cscope 15 $HOME/task1/bluez 0008988782 @android/a2dp-sink.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dboÞ.h > 29  ~ 31  ~"lib/blu‘oÙh.h " 32  ~"¤c/log.h " 33  ~"h®-msg.h " 34  ~"c.h " 35  ~"a2dp-sšk.h " 37  c * gh®_c = NULL ; 39  $bt_a2dp_sšk_cÚÃù (cÚ¡ * buf , ušt16_t Ën ) 43 `DBG (""); 45 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_A2DP_SINK , HAL_OP_A2DP_CONNECT , 46 HAL_STATUS_UNSUPPORTED ); 47 } } 49  $bt_a2dp_sšk_discÚÃù (cÚ¡ * buf , ušt16_t Ën ) 53 `DBG (""); 55 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_A2DP_SINK , HAL_OP_A2DP_DISCONNECT , 56 HAL_STATUS_UNSUPPORTED ); 57 } } 59 cÚ¡  c_hªdËr gcmd_hªdËrs [] = { 61 { bt_a2dp_sšk_cÚÃù , çl£ , ( h®_cmd_a2dp_cÚÃù ) }, 63 { bt_a2dp_sšk_discÚÃù , çl£ , 64 ( h®_cmd_a2dp_discÚÃù ) }, 67 boÞ $bt_a2dp_sšk_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ) 69 `DBG (""); 71 h®_c = c ; 72 `c_»gi¡” ( h®_c , HAL_SERVICE_ID_A2DP_SINK , cmd_hªdËrs , 73 `G_N_ELEMENTS ( cmd_hªdËrs )); 75  Œue ; 76 } } 78  $bt_a2dp_sšk_uÄegi¡” () 80 `DBG (""); 82 `c_uÄegi¡” ( h®_c , HAL_SERVICE_ID_A2DP_SINK ); 83 h®_c = NULL ; 84 } } @android/a2dp-sink.h 24 boÞ bt_a2dp_sšk_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ); 25  bt_a2dp_sšk_uÄegi¡” (); @android/a2dp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dšt.h > 29  ~<¡dboÞ.h > 30  ~<¡dlib.h > 31  ~<”ºo.h > 32  ~ 33  ~ 34  ~ 36  ~"btio/btio.h " 37  ~"lib/blu‘oÙh.h " 38  ~"lib/sdp.h " 39  ~"lib/sdp_lib.h " 40  ~"´ofžes/audio/a2dp-codecs.h " 41  ~"¤c/log.h " 42  ~"h®-msg.h " 43  ~"c-commÚ.h " 44  ~"c.h " 45  ~"a2dp.h " 46  ~"utžs.h " 47  ~"blu‘oÙh.h " 48  ~"avd.h " 49  ~"avrý.h " 50  ~"audio-msg.h " 52  #SVC_HINT_CAPTURING 0x08 ) 53  #IDLE_TIMEOUT 1 ) 54  #AUDIO_RETRY_TIMEOUT 2 ) 56  GIOChªÃl * g£rv” = NULL ; 57  GSLi¡ * gdeviûs = NULL ; 58  GSLi¡ * g’dpošts = NULL ; 59  GSLi¡ * g£tups = NULL ; 60  bdaddr_t gad­‹r_addr ; 61  ušt32_t g»cÜd_id = 0; 62  gušt gaudio_»Œy_id = 0; 63  boÞ gaudio_»Œyšg = çl£ ; 65  c * gh®_c = NULL ; 66  c * gaudio_c = NULL ; 68  sa2dp_´e£t { 69 * md©a ; 70 št8_t mËn ; 73  sa2dp_’dpošt { 74 ušt8_t mid ; 75 ušt8_t mcodec ; 76  avd_loÿl_£p * m£p ; 77  a2dp_´e£t * mÿps ; 78 GSLi¡ * m´e£ts ; 81  sa2dp_deviû { 82 bdaddr_t md¡ ; 83 ušt8_t m¡©e ; 84 GIOChªÃl * mio ; 85  avd * m£ssiÚ ; 86 gušt midË_id ; 89  sa2dp_£tup { 90  a2dp_deviû * mdev ; 91  a2dp_’dpošt * m’dpošt ; 92  a2dp_´e£t * m´e£t ; 93  avd_¡»am * m¡»am ; 94 ušt8_t m¡©e ; 97  $deviû_cmp ( gcÚ¡poš‹r s , gcÚ¡poš‹¸ u£r_d©a ) 99 cÚ¡  a2dp_deviû * dev = s ; 100 cÚ¡ bdaddr_t * d¡ = u£r_d©a ; 102  `bacmp (& dev -> d¡ , dst); 103 } } 105  $´e£t_ä“ (* d©a ) 107  a2dp_´e£t * ´e£t = d©a ; 109 `g_ä“ ( ´e£t -> d©a ); 110 `g_ä“ ( ´e£t ); 111 } } 113  $uÄegi¡”_’dpošt (* d©a ) 115  a2dp_’dpošt * ’dpošt = d©a ; 117 ià( ’dpošt -> £p ) 118 `avd_uÄegi¡”_£p ( ’dpošt -> £p ); 120 ià( ’dpošt -> ÿps ) 121 `´e£t_ä“ ( ’dpošt -> ÿps ); 123 `g_¦i¡_ä“_fuÎ ( ’dpošt -> ´e£ts , ´e£t_ä“ ); 125 `g_ä“ ( ’dpošt ); 126 } } 128  $£tup_ä“ (* d©a ) 130  a2dp_£tup * £tup = d©a ; 132 ià(! `g_¦i¡_fšd ( £tup -> ’dpošt -> ´e£ts , s‘up-> ´e£t )) 133 `´e£t_ä“ ( £tup -> ´e£t ); 135 `g_ä“ ( £tup ); 136 } } 138  $£tup_»move ( a2dp_£tup * £tup ) 140 £tups = `g_¦i¡_»move (£tups, £tup ); 141 `£tup_ä“ ( £tup ); 142 } } 144  $£tup_»move_®l_by_dev ( a2dp_deviû * dev ) 146 GSLi¡ * l = £tups ; 148  l ) { 149  a2dp_£tup * £tup = l -> d©a ; 150 GSLi¡ * Ãxt = `g_¦i¡_Ãxt ( l ); 152 ià( £tup -> dev == dev) 153 `£tup_»move ( £tup ); 155 l = Ãxt ; 157 } } 159  $a2dp_deviû_ä“ (* d©a ) 161  a2dp_deviû * dev = d©a ; 163 ià( dev -> idË_id > 0) 164 `g_sourû_»move ( dev -> idË_id ); 166 ià( dev -> £ssiÚ ) 167 `avd_uÄef ( dev -> £ssiÚ ); 169 ià( dev -> io ) { 170 `g_io_chªÃl_shutdown ( dev -> io , FALSE , NULL ); 171 `g_io_chªÃl_uÄef ( dev -> io ); 174 `£tup_»move_®l_by_dev ( dev ); 176 `g_ä“ ( dev ); 177 } } 179  $a2dp_deviû_»move ( a2dp_deviû * dev ) 181 deviûs = `g_¦i¡_»move (deviûs, dev ); 182 `a2dp_deviû_ä“ ( dev ); 183 } } 185  a2dp_deviû * $a2dp_deviû_Ãw (cÚ¡ bdaddr_t * d¡ ) 187  a2dp_deviû * dev ; 189 dev = `g_Ãw0 ( a2dp_deviû , 1); 190 `baýy (& dev -> d¡ , dst); 191 deviûs = `g_¦i¡_´•’d (deviûs, dev ); 193  dev ; 194 } } 196  boÞ $a2dp_deviû_cÚÃù ( a2dp_deviû * dev , BtIOCÚÃù cb ) 198 GE¼Ü * ”r = NULL ; 200 dev -> io = `bt_io_cÚÃù ( cb , dev, NULL , & ”r , 201 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 202 BT_IO_OPT_DEST_BDADDR , & dev -> d¡ , 203 BT_IO_OPT_PSM , AVDTP_PSM , 204 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 205 BT_IO_OPT_INVALID ); 206 ià( ”r ) { 207 `”rÜ ("%s", ”r -> mes§ge ); 208 `g_”rÜ_ä“ ( ”r ); 209  çl£ ; 212  Œue ; 213 } } 215  $bt_a2dp_nÙify_¡©e ( a2dp_deviû * dev , ušt8_t ¡©e ) 217  h®_ev_a2dp_cÚn_¡©e ev ; 218  add»ss [18]; 220 ià( dev -> ¡©e == state) 223 dev -> ¡©e = state; 225 `ba2¡r (& dev -> d¡ , add»ss ); 226 `DBG ("deviû % ¡©%u", add»ss , ¡©e ); 228 `bdaddr2ªdroid (& dev -> d¡ , ev . bdaddr ); 229 ev . ¡©e = state; 231 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_A2DP , HAL_EV_A2DP_CONN_STATE , 232 ( ev ), &ev); 234 ià( ¡©e !ð HAL_A2DP_STATE_DISCONNECTED ) 237 `bt_avrý_discÚÃù (& dev -> d¡ ); 239 `a2dp_deviû_»move ( dev ); 240 } } 242  $bt_audio_nÙify_¡©e ( a2dp_£tup * £tup , ušt8_t ¡©e ) 244  h®_ev_a2dp_audio_¡©e ev ; 245  add»ss [18]; 247 ià( £tup -> ¡©e == state) 250 £tup -> ¡©e = state; 252 `ba2¡r (& £tup -> dev -> d¡ , add»ss ); 253 `DBG ("deviû % ¡©%u", add»ss , ¡©e ); 255 `bdaddr2ªdroid (& £tup -> dev -> d¡ , ev . bdaddr ); 256 ev . ¡©e = state; 258 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_A2DP , HAL_EV_A2DP_AUDIO_STATE , 259 ( ev ), &ev); 260 } } 262  $discÚÃù_cb (* u£r_d©a ) 264  a2dp_deviû * dev = u£r_d©a ; 266 `bt_a2dp_nÙify_¡©e ( dev , HAL_A2DP_STATE_DISCONNECTED ); 267 } } 269  $sbc_check_cÚfig (* ÿps , ušt8_t ÿps_Ën , * cÚf , 270 ušt8_t cÚf_Ën ) 272 a2dp_sbc_t * ÿp , * cÚfig ; 274 ià( cÚf_Ën !ð ÿps_Ën || cÚf_ËÀ!ð( a2dp_sbc_t )) { 275 `”rÜ ("SBC: Inv®id cÚfigu¿tiÚ siz(%u)", cÚf_Ën ); 276  - EINVAL ; 279 ÿp = ÿps ; 280 cÚfig = cÚf ; 282 ià(!( ÿp -> äequ’cy & cÚfig ->frequency)) { 283 `”rÜ ("SBC: Unsupported frequency (%u) byƒndpoint", 284 cÚfig -> äequ’cy ); 285  - EINVAL ; 288 ià(!( ÿp -> chªÃl_mode & cÚfig ->channel_mode)) { 289 `”rÜ ("SBC: Unsupported channel mode (%u) byƒndpoint", 290 cÚfig -> chªÃl_mode ); 291  - EINVAL ; 294 ià(!( ÿp -> block_Ëngth & cÚfig ->block_length)) { 295 `”rÜ ("SBC: Unsupported block†ength (%u) byƒndpoint", 296 cÚfig -> block_Ëngth ); 297  - EINVAL ; 300 ià(!( ÿp -> ®loÿtiÚ_m‘hod & cÚfig ->allocation_method)) { 301 `”rÜ ("SBC: Unsupported‡llocation method (%u) byƒndpoint", 302 cÚfig -> block_Ëngth ); 303  - EINVAL ; 306 ià( cÚfig -> max_b™poÞ < ÿp -> mš_b™poÞ ) { 307 `”rÜ ("SBC: Invalid maximun bitpool (%u < %u)", 308 cÚfig -> max_b™poÞ , ÿp -> mš_b™poÞ ); 309  - EINVAL ; 312 ià( cÚfig -> mš_b™poÞ > ÿp -> max_b™poÞ ) { 313 `”rÜ ("SBC: Invalid minimun bitpool (%u > %u)", 314 cÚfig -> mš_b™poÞ , ÿp ->min_bitpool); 315  - EINVAL ; 318 ià( cÚfig -> max_b™poÞ > ÿp ->max_bitpool) 319  - ERANGE ; 321 ià( cÚfig -> mš_b™poÞ < ÿp ->min_bitpool) 322  - ERANGE ; 325 } } 327  $¯c_check_cÚfig (* ÿps , ušt8_t ÿps_Ën , * cÚf , 328 ušt8_t cÚf_Ën ) 330 a2dp_¯c_t * ÿp , * cÚfig ; 332 ià( cÚf_Ën !ð ÿps_Ën || cÚf_ËÀ!ð( a2dp_¯c_t )) { 333 `”rÜ ("AAC: Inv®id cÚfigu¿tiÚ siz(%u)", cÚf_Ën ); 334  - EINVAL ; 337 ÿp = ÿps ; 338 cÚfig = cÚf ; 340 ià(!( ÿp -> objeù_ty³ & cÚfig ->object_type)) { 341 `”rÜ ("AAC: Unsupported objectype (%u) byƒndpoint", 342 cÚfig -> objeù_ty³ ); 343  - EINVAL ; 346 ià(!( `AAC_GET_FREQUENCY (* ÿp è& AAC_GET_FREQUENCY(* cÚfig ))) { 347 `”rÜ ("AAC: Unsupported frequency (%u) byƒndpoint", 348 `AAC_GET_FREQUENCY (* cÚfig )); 349  - EINVAL ; 352 ià(!( ÿp -> chªÃls & cÚfig ->channels)) { 353 `”rÜ ("AAC: Unsupported channels (%u) byƒndpoint", 354 cÚfig -> chªÃls ); 355  - EINVAL ; 361 ià(! ÿp -> vbr && cÚfig ->vbr) { 362 `”rÜ ("AAC: Unsupported VBR (%u) byƒndpoint", 363 cÚfig -> vbr ); 364  - EINVAL ; 367 ià( `AAC_GET_BITRATE (* ÿp è< AAC_GET_BITRATE(* cÚfig )) 368  - ERANGE ; 371 } } 373  $­tx_check_cÚfig (* ÿps , ušt8_t ÿps_Ën , * cÚf , 374 ušt8_t cÚf_Ën ) 376 a2dp_­tx_t * ÿp , * cÚfig ; 378 ià( cÚf_Ën !ð ÿps_Ën || cÚf_ËÀ!ð( a2dp_­tx_t )) { 379 `”rÜ ("APTX: Inv®id cÚfigu¿tiÚ siz(%u)", cÚf_Ën ); 380  - EINVAL ; 383 ÿp = ÿps ; 384 cÚfig = cÚf ; 386 ià(!( ÿp -> äequ’cy & cÚfig ->frequency)) { 387 `”rÜ ("APTX: Unsupported frequenct (%u) byƒndpoint", 388 cÚfig -> äequ’cy ); 389  - EINVAL ; 392 ià(!( ÿp -> chªÃl_mode & cÚfig ->channel_mode)) { 393 `”rÜ ("APTX: Unsupported channel mode (%u) byƒndpoint", 394 cÚfig -> chªÃl_mode ); 395  - EINVAL ; 399 } } 401  $check_ÿ·bž™›s ( a2dp_´e£t * ´e£t , 402  avd_medŸ_codec_ÿ·bž™y * codec , 403 ušt8_t codec_Ën ) 405 a2dp_v’dÜ_codec_t * vndcodec ; 408  codec -> medŸ_codec_ty³ ) { 409  A2DP_CODEC_SBC : 410  `sbc_check_cÚfig ( codec -> d©a , codec_Ën , ´e£t ->data, 411 ´e£t -> Ën ); 412  A2DP_CODEC_MPEG24 : 413  `¯c_check_cÚfig ( codec -> d©a , codec_Ën , ´e£t ->data, 414 ´e£t -> Ën ); 415  A2DP_CODEC_VENDOR : 416 vndcodec = (*è codec -> d©a ; 417 ià( `btohl ( vndcodec -> v’dÜ_id è=ð APTX_VENDOR_ID && 418 `btohs ( vndcodec -> codec_id è=ð APTX_CODEC_ID ) 419  `­tx_check_cÚfig ( codec -> d©a , codec_Ën , 420 ´e£t -> d©a ,…»£t-> Ën ); 421  - EINVAL ; 423  - EINVAL ; 425 } } 427  a2dp_´e£t * $sbc_£Ëù_¿nge (* ÿps , ušt8_t ÿps_Ën , 428 * cÚf , ušt8_t cÚf_Ën ) 430  a2dp_´e£t * p ; 431 a2dp_sbc_t * ÿp , * cÚfig ; 433 ÿp = ÿps ; 434 cÚfig = cÚf ; 436 cÚfig -> mš_b™poÞ = `MAX (cÚfig->mš_b™poÞ, ÿp ->min_bitpool); 437 cÚfig -> max_b™poÞ = `MIN (cÚfig->max_b™poÞ, ÿp ->max_bitpool); 439 p = `g_Ãw0 ( a2dp_´e£t , 1); 440 p -> Ën = cÚf_Ën ; 441 p -> d©a = `g_memdup ( cÚf ,…-> Ën ); 443  p ; 444 } } 446  a2dp_´e£t * $¯c_£Ëù_¿nge (* ÿps , ušt8_t ÿps_Ën , 447 * cÚf , ušt8_t cÚf_Ën ) 449  a2dp_´e£t * p ; 450 a2dp_¯c_t * ÿp , * cÚfig ; 451 ušt32_t b™¿‹ ; 453 ÿp = ÿps ; 454 cÚfig = cÚf ; 456 b™¿‹ = `MIN ( `AAC_GET_BITRATE (* ÿp ), AAC_GET_BITRATE(* cÚfig )); 457 `AAC_SET_BITRATE (* cÚfig , b™¿‹ ); 459 p = `g_Ãw0 ( a2dp_´e£t , 1); 460 p -> Ën = cÚf_Ën ; 461 p -> d©a = `g_memdup ( cÚf ,…-> Ën ); 463  p ; 464 } } 466  a2dp_´e£t * $£Ëù_´e£t_¿nge ( a2dp_´e£t * ´e£t , 467  avd_medŸ_codec_ÿ·bž™y * codec , 468 ušt8_t codec_Ën ) 471  codec -> medŸ_codec_ty³ ) { 472  A2DP_CODEC_SBC : 473  `sbc_£Ëù_¿nge ( codec -> d©a , codec_Ën , ´e£t ->data, 474 ´e£t -> Ën ); 475  A2DP_CODEC_MPEG24 : 476  `¯c_£Ëù_¿nge ( codec -> d©a , codec_Ën , ´e£t ->data, 477 ´e£t -> Ën ); 479  NULL ; 481 } } 483  a2dp_´e£t * $£Ëù_´e£t ( a2dp_’dpošt * ’dpošt , 484  avd_»mÙe_£p * r£p ) 486  avd_£rviû_ÿ·bž™y * £rviû ; 487  avd_medŸ_codec_ÿ·bž™y * codec ; 488 GSLi¡ * l ; 489 ušt8_t codec_Ën ; 491 £rviû = `avd_g‘_codec ( r£p ); 492 codec = ( avd_medŸ_codec_ÿ·bž™y *è £rviû -> d©a ; 493 codec_Ën = £rviû -> Ëngth - (* codec ); 495  l = ’dpošt -> ´e£ts ;†;† = `g_¦i¡_Ãxt (l)) { 496  a2dp_´e£t * ´e£t = l -> d©a ; 497  ”r ; 499 ”r = `check_ÿ·bž™›s ( ´e£t , codec , codec_Ën ); 500 ià( ”r == 0) 501  ´e£t ; 503 ià( ”r =ð- ERANGE ) 504  `£Ëù_´e£t_¿nge ( ´e£t , codec , codec_Ën ); 507  NULL ; 508 } } 510  $£tup_add ( a2dp_deviû * dev ,  a2dp_’dpošt * ’dpošt , 511  a2dp_´e£t * ´e£t ,  avd_¡»am * ¡»am ) 513  a2dp_£tup * £tup ; 515 £tup = `g_Ãw0 ( a2dp_£tup , 1); 516 £tup -> dev = dev; 517 £tup -> ’dpošt =ƒndpoint; 518 £tup -> ´e£t =…reset; 519 £tup -> ¡»am = stream; 520 £tups = `g_¦i¡_­³nd (£tups, £tup ); 522 ià( dev -> idË_id > 0) { 523 `g_sourû_»move ( dev -> idË_id ); 524 dev -> idË_id = 0; 526 } } 528  $£Ëù_cÚfigu¿tiÚ ( a2dp_deviû * dev , 529  a2dp_’dpošt * ’dpošt , 530  avd_»mÙe_£p * r£p ) 532  a2dp_´e£t * ´e£t ; 533  avd_¡»am * ¡»am ; 534  avd_£rviû_ÿ·bž™y * £rviû ; 535  avd_medŸ_codec_ÿ·bž™y * codec ; 536 GSLi¡ * ÿps ; 537  ”r ; 539 ´e£t = `£Ëù_´e£t ( ’dpošt , r£p ); 540 ià(! ´e£t ) { 541 `”rÜ ("Unableo select codec…reset"); 542  - EINVAL ; 545 £rviû = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_TRANSPORT , NULL , 0); 546 ÿps = `g_¦i¡_­³nd ( NULL , £rviû ); 548 codec = `g_m®loc0 ((*codecè+ ´e£t -> Ën ); 549 codec -> medŸ_ty³ = AVDTP_MEDIA_TYPE_AUDIO ; 550 codec -> medŸ_codec_ty³ = ’dpošt ->codec; 551 `memýy ( codec -> d©a , ´e£t ->d©a,…»£t-> Ën ); 553 £rviû = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_CODEC , codec , 554 (* codec è+ ´e£t -> Ën ); 555 ÿps = `g_¦i¡_­³nd (ÿps, £rviû ); 557 `g_ä“ ( codec ); 559 ”r = `avd_£t_cÚfigu¿tiÚ ( dev -> £ssiÚ , r£p , ’dpošt -> £p , ÿps , 560 & ¡»am ); 561 `g_¦i¡_ä“_fuÎ ( ÿps , g_ä“ ); 562 ià( ”r < 0) { 563 `”rÜ ("avd_£t_cÚfigu¿tiÚ: %s", `¡»¼Ü (- ”r )); 564  ”r ; 567 `£tup_add ( dev , ’dpošt , ´e£t , ¡»am ); 570 } } 572  $discov”_cb ( avd * £ssiÚ , GSLi¡ * £ps , 573  avd_”rÜ * ”r , * u£r_d©a ) 575  a2dp_deviû * dev = u£r_d©a ; 576  a2dp_’dpošt * ’dpošt = NULL ; 577  avd_»mÙe_£p * r£p = NULL ; 578 GSLi¡ * l ; 580  l = ’dpošts ;†;† = `g_¦i¡_Ãxt (l)) { 581 ’dpošt = l -> d©a ; 583 r£p = `avd_fšd_»mÙe_£p ( £ssiÚ , ’dpošt -> £p ); 584 ià( r£p ) 588 ià(! r£p ) { 589 `”rÜ ("Unableo find matchingƒndpoint"); 590  çžed ; 593 ià( `£Ëù_cÚfigu¿tiÚ ( dev , ’dpošt , r£p ) < 0) 594  çžed ; 598 çžed : 599 `avd_shutdown ( £ssiÚ ); 600 } } 602  gboÞ—n $idË_timeout ( gpoš‹r u£r_d©a ) 604  a2dp_deviû * dev = u£r_d©a ; 605  ”r ; 607 dev -> idË_id = 0; 609 ”r = `avd_discov” ( dev -> £ssiÚ , discov”_cb , dev); 610 ià( ”r == 0) 611  FALSE ; 613 `”rÜ ("avd_discov”: %s", `¡»¼Ü (- ”r )); 614 `bt_a2dp_nÙify_¡©e ( dev , HAL_A2DP_STATE_DISCONNECTED ); 616  FALSE ; 617 } } 619  $sigÇlšg_cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * ”r , 620 gpoš‹r u£r_d©a ) 622  a2dp_deviû * dev = u£r_d©a ; 623 ušt16_t imtu , omtu ; 624 GE¼Ü * g”r = NULL ; 625  fd ; 627 ià( ”r ) { 628 `bt_a2dp_nÙify_¡©e ( dev , HAL_A2DP_STATE_DISCONNECTED ); 629 `”rÜ ("%s", ”r -> mes§ge ); 633 `bt_io_g‘ ( chª , & g”r , 634 BT_IO_OPT_IMTU , & imtu , 635 BT_IO_OPT_OMTU , & omtu , 636 BT_IO_OPT_INVALID ); 637 ià( g”r ) { 638 `”rÜ ("%s", g”r -> mes§ge ); 639 `g_”rÜ_ä“ ( g”r ); 640  çžed ; 643 fd = `g_io_chªÃl_unix_g‘_fd ( chª ); 646 dev -> £ssiÚ = `avd_Ãw ( fd , imtu , omtu , 0x0100); 647 ià(! dev -> £ssiÚ ) 648  çžed ; 650 `avd_add_discÚÃù_cb ( dev -> £ssiÚ , discÚÃù_cb , dev); 653 ià( dev -> io ) { 654  ³¼ ; 656 `g_io_chªÃl_uÄef ( dev -> io ); 657 dev -> io = NULL ; 659 ³¼ = `avd_discov” ( dev -> £ssiÚ , discov”_cb , dev); 660 ià( ³¼ < 0) { 661 `”rÜ ("avd_discov”: %s", `¡»¼Ü (- ³¼ )); 662  çžed ; 664 `bt_avrý_cÚÃù (& dev -> d¡ ); 666 dev -> idË_id = `g_timeout_add_£cÚds ( IDLE_TIMEOUT , idË_timeout , 667 dev ); 671 çžed : 672 `bt_a2dp_nÙify_¡©e ( dev , HAL_A2DP_STATE_DISCONNECTED ); 673 } } 675  $bt_a2dp_cÚÃù (cÚ¡ * buf , ušt16_t Ën ) 677 cÚ¡  h®_cmd_a2dp_cÚÃù * cmd = buf ; 678  a2dp_deviû * dev ; 679 ušt8_t ¡©us ; 680  addr [18]; 681 bdaddr_t d¡ ; 682 GSLi¡ * l ; 684 `DBG (""); 686 `ªdroid2bdaddr (& cmd -> bdaddr , & d¡ ); 688 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 689 ià( l ) { 690 ¡©us = HAL_STATUS_FAILED ; 691  çžed ; 694 dev = `a2dp_deviû_Ãw (& d¡ ); 695 ià(! `a2dp_deviû_cÚÃù ( dev , sigÇlšg_cÚÃù_cb )) { 696 `a2dp_deviû_»move ( dev ); 697 ¡©us = HAL_STATUS_FAILED ; 698  çžed ; 701 `ba2¡r (& dev -> d¡ , addr ); 702 `DBG ("cÚÃùšgØ%s", addr ); 704 `bt_a2dp_nÙify_¡©e ( dev , HAL_A2DP_STATE_CONNECTING ); 706 ¡©us = HAL_STATUS_SUCCESS ; 708 çžed : 709 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_A2DP , HAL_OP_A2DP_CONNECT , ¡©us ); 710 } } 712  $bt_a2dp_discÚÃù (cÚ¡ * buf , ušt16_t Ën ) 714 cÚ¡  h®_cmd_a2dp_cÚÃù * cmd = buf ; 715 ušt8_t ¡©us ; 716  a2dp_deviû * dev ; 717 GSLi¡ * l ; 718 bdaddr_t d¡ ; 720 `DBG (""); 722 `ªdroid2bdaddr (& cmd -> bdaddr , & d¡ ); 724 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 725 ià(! l ) { 726 ¡©us = HAL_STATUS_FAILED ; 727  çžed ; 730 dev = l -> d©a ; 731 ¡©us = HAL_STATUS_SUCCESS ; 733 ià( dev -> io ) { 734 `bt_a2dp_nÙify_¡©e ( dev , HAL_A2DP_STATE_DISCONNECTED ); 735  çžed ; 739 `avd_shutdown ( dev -> £ssiÚ ); 740 `bt_a2dp_nÙify_¡©e ( dev , HAL_A2DP_STATE_DISCONNECTING ); 742 çžed : 743 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_A2DP , HAL_OP_A2DP_DISCONNECT , 744 ¡©us ); 745 } } 747 cÚ¡  c_hªdËr gcmd_hªdËrs [] = { 749 { bt_a2dp_cÚÃù , çl£ , ( h®_cmd_a2dp_cÚÃù ) }, 751 { bt_a2dp_discÚÃù , çl£ , ( h®_cmd_a2dp_discÚÃù ) }, 754  a2dp_£tup * $fšd_£tup_by_deviû ( a2dp_deviû * dev ) 756 GSLi¡ * l ; 758  l = £tups ;†;† = `g_¦i¡_Ãxt (l)) { 759  a2dp_£tup * £tup = l -> d©a ; 761 ià( £tup -> dev == dev) 762  £tup ; 765  NULL ; 766 } } 768  $Œª¥Üt_cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * ”r , 769 gpoš‹r u£r_d©a ) 771  a2dp_deviû * dev = u£r_d©a ; 772  a2dp_£tup * £tup ; 773 ušt16_t imtu , omtu ; 774 GE¼Ü * g”r = NULL ; 775  fd ; 777 ià( ”r ) { 778 `”rÜ ("%s", ”r -> mes§ge ); 782 £tup = `fšd_£tup_by_deviû ( dev ); 783 ià(! £tup ) { 784 `”rÜ ("Unableo find stream setup"); 788 `bt_io_g‘ ( chª , & g”r , 789 BT_IO_OPT_IMTU , & imtu , 790 BT_IO_OPT_OMTU , & omtu , 791 BT_IO_OPT_INVALID ); 792 ià( g”r ) { 793 `”rÜ ("%s", g”r -> mes§ge ); 794 `g_”rÜ_ä“ ( g”r ); 798 fd = `g_io_chªÃl_unix_g‘_fd ( chª ); 800 ià(! `avd_¡»am_£t_Œª¥Üt ( £tup -> ¡»am , fd , imtu , omtu )) { 801 `”rÜ ("avdtp_stream_set_transport: failed"); 805 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chª , FALSE ); 807 ià( dev -> io ) { 808 `g_io_chªÃl_uÄef ( dev -> io ); 809 dev -> io = NULL ; 812 `bt_a2dp_nÙify_¡©e ( dev , HAL_A2DP_STATE_CONNECTED ); 813 } } 815  $cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 817  a2dp_deviû * dev ; 818 bdaddr_t d¡ ; 819  add»ss [18]; 820 GE¼Ü * g”r = NULL ; 821 GSLi¡ * l ; 823 ià( ”r ) { 824 `”rÜ ("%s", ”r -> mes§ge ); 828 `bt_io_g‘ ( chª , & g”r , 829 BT_IO_OPT_DEST_BDADDR , & d¡ , 830 BT_IO_OPT_INVALID ); 831 ià( g”r ) { 832 `”rÜ ("%s", g”r -> mes§ge ); 833 `g_”rÜ_ä“ ( g”r ); 834 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 838 `ba2¡r (& d¡ , add»ss ); 839 `DBG ("Incomšg cÚÃùiÚ from %s", add»ss ); 841 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 842 ià( l ) { 843 `Œª¥Üt_cÚÃù_cb ( chª , ”r , l -> d©a ); 847 dev = `a2dp_deviû_Ãw (& d¡ ); 848 `bt_a2dp_nÙify_¡©e ( dev , HAL_A2DP_STATE_CONNECTING ); 849 `sigÇlšg_cÚÃù_cb ( chª , ”r , dev ); 850 } } 852  sdp_»cÜd_t * $a2dp_»cÜd () 854 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 855 uuid_t roÙ_uuid , l2ÿp_uuid , avd_uuid , a2dp_uuid ; 856 sdp_´ofže_desc_t ´ofže [1]; 857 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 858 sdp_»cÜd_t * »cÜd ; 859 sdp_d©a_t * psm , * v”siÚ , * ã©u»s ; 860 ušt16_t Í = AVDTP_UUID ; 861 ušt16_t a2dp_v” = 0x0103, avd_v” = 0x0103, ã© = 0x000f; 863 »cÜd = `sdp_»cÜd_®loc (); 864 ià(! »cÜd ) 865  NULL ; 867 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 868 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 869 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 871 `sdp_uuid16_ü—‹ (& a2dp_uuid , AUDIO_SOURCE_SVCLASS_ID ); 872 svþass_id = `sdp_li¡_­³nd ( NULL , & a2dp_uuid ); 873 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 875 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , ADVANCED_AUDIO_PROFILE_ID ); 876 ´ofže [0]. v”siÚ = a2dp_v” ; 877 pf£q = `sdp_li¡_­³nd ( NULL , & ´ofže [0]); 878 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 880 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 881 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp_uuid ); 882 psm = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 883 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], psm ); 884 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 886 `sdp_uuid16_ü—‹ (& avd_uuid , AVDTP_UUID ); 887 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & avd_uuid ); 888 v”siÚ = `sdp_d©a_®loc ( SDP_UINT16 , & avd_v” ); 889 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], v”siÚ ); 890 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 892 ­rÙo = `sdp_li¡_­³nd ( NULL , ­£q ); 893 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 895 ã©u»s = `sdp_d©a_®loc ( SDP_UINT16 , & ã© ); 896 `sdp_©Œ_add ( »cÜd , SDP_ATTR_SUPPORTED_FEATURES , ã©u»s ); 898 `sdp_£t_šfo_©Œ ( »cÜd , "AudiØSourû", NULL , NULL); 900 `sdp_d©a_ä“ ( psm ); 901 `sdp_d©a_ä“ ( v”siÚ ); 902 `sdp_li¡_ä“ ( ´Ùo [0], NULL ); 903 `sdp_li¡_ä“ ( ´Ùo [1], NULL ); 904 `sdp_li¡_ä“ ( ­£q , NULL ); 905 `sdp_li¡_ä“ ( pf£q , NULL ); 906 `sdp_li¡_ä“ ( ­rÙo , NULL ); 907 `sdp_li¡_ä“ ( roÙ , NULL ); 908 `sdp_li¡_ä“ ( svþass_id , NULL ); 910  »cÜd ; 911 } } 913  gboÞ—n $£p_g‘ÿp_šd ( avd * £ssiÚ , 914  avd_loÿl_£p * £p , 915 GSLi¡ ** ÿps , ušt8_t * ”r , 916 * u£r_d©a ) 918  a2dp_’dpošt * ’dpošt = u£r_d©a ; 919  a2dp_´e£t * ÿp = ’dpošt -> ÿps ; 920  avd_£rviû_ÿ·bž™y * £rviû ; 921  avd_medŸ_codec_ÿ·bž™y * codec ; 923 * ÿps = NULL ; 925 £rviû = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_TRANSPORT , NULL , 0); 926 * ÿps = `g_¦i¡_­³nd (*ÿps, £rviû ); 928 codec = `g_m®loc0 ((*codecè+ ÿp -> Ën ); 929 codec -> medŸ_ty³ = AVDTP_MEDIA_TYPE_AUDIO ; 930 codec -> medŸ_codec_ty³ = ’dpošt ->codec; 931 `memýy ( codec -> d©a , ÿp ->d©a, c­-> Ën ); 933 £rviû = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_CODEC , codec , 934 (* codec è+ ÿp -> Ën ); 935 * ÿps = `g_¦i¡_­³nd (*ÿps, £rviû ); 936 `g_ä“ ( codec ); 938  TRUE ; 939 } } 941  $check_cÚfig ( a2dp_’dpošt * ’dpošt , 942  a2dp_´e£t * cÚfig ) 944 GSLi¡ * l ; 945  a2dp_´e£t * ÿps ; 947  l = ’dpošt -> ´e£ts ;†;† = `g_¦i¡_Ãxt (l)) { 948  a2dp_´e£t * ´e£t = l -> d©a ; 950 ià( ´e£t -> Ën !ð cÚfig ->len) 953 ià( `memcmp ( ´e£t -> d©a , cÚfig ->d©a,…»£t-> Ën ) == 0) 957 ÿps = ’dpošt ->caps; 960  ’dpošt -> codec ) { 961  A2DP_CODEC_SBC : 962  `sbc_check_cÚfig ( ÿps -> d©a , c­s-> Ën , cÚfig ->data, 963 cÚfig -> Ën ); 965  - EINVAL ; 967 } } 969  a2dp_deviû * $fšd_deviû_by_£ssiÚ ( avd * £ssiÚ ) 971 GSLi¡ * l ; 973  l = deviûs ;†;† = `g_¦i¡_Ãxt (l)) { 974  a2dp_deviû * dev = l -> d©a ; 976 ià( dev -> £ssiÚ == session) 977  dev ; 980  NULL ; 981 } } 983  a2dp_£tup * $fšd_£tup ( ušt8_t id ) 985 GSLi¡ * l ; 987  l = £tups ;†;† = `g_¦i¡_Ãxt (l)) { 988  a2dp_£tup * £tup = l -> d©a ; 990 ià( £tup -> ’dpošt -> id == id) 991  £tup ; 994  NULL ; 995 } } 997  $£tup_»move_by_id ( ušt8_t id ) 999  a2dp_£tup * £tup ; 1001 £tup = `fšd_£tup ( id ); 1002 ià(! £tup ) { 1003 `”rÜ ("UÇbËØfšd sŒ—m s‘u°f܃ndpošˆ%u", id ); 1007 `£tup_»move ( £tup ); 1008 } } 1010  gboÞ—n $£p_£tcÚf_šd ( avd * £ssiÚ , 1011  avd_loÿl_£p * £p , 1012  avd_¡»am * ¡»am , 1013 GSLi¡ * ÿps , 1014 avd_£t_cÚfigu¿tiÚ_cb cb , 1015 * u£r_d©a ) 1017  a2dp_’dpošt * ’dpošt = u£r_d©a ; 1018  a2dp_deviû * dev ; 1019  a2dp_´e£t * ´e£t = NULL ; 1021 `DBG (""); 1023 dev = `fšd_deviû_by_£ssiÚ ( £ssiÚ ); 1024 ià(! dev ) { 1025 `”rÜ ("UÇbËØfšd deviû fÜ sessiÚ %p", £ssiÚ ); 1026  FALSE ; 1029 ; ÿps !ð NULL ; c­ ð `g_¦i¡_Ãxt (caps)) { 1030  avd_£rviû_ÿ·bž™y * ÿp = ÿps -> d©a ; 1031  avd_medŸ_codec_ÿ·bž™y * codec ; 1033 ià( ÿp -> ÿ‹gÜy =ð AVDTP_DELAY_REPORTING ) 1034  FALSE ; 1036 ià( ÿp -> ÿ‹gÜy !ð AVDTP_MEDIA_CODEC ) 1039 codec = ( avd_medŸ_codec_ÿ·bž™y *è ÿp -> d©a ; 1041 ià( codec -> medŸ_codec_ty³ !ð ’dpošt ->codec) 1042  FALSE ; 1044 ´e£t = `g_Ãw0 ( a2dp_´e£t , 1); 1045 ´e£t -> Ën = ÿp -> Ëngth - (* codec ); 1046 ´e£t -> d©a = `g_memdup ( codec ->d©a,…»£t-> Ën ); 1048 ià( `check_cÚfig ( ’dpošt , ´e£t ) < 0) { 1049 `´e£t_ä“ ( ´e£t ); 1050  FALSE ; 1054 ià(! ´e£t ) 1055  FALSE ; 1057 `£tup_add ( dev , ’dpošt , ´e£t , ¡»am ); 1059 `cb ( £ssiÚ , ¡»am , NULL ); 1061  TRUE ; 1062 } } 1064  gboÞ—n $£p_Ý’_šd ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 1065  avd_¡»am * ¡»am , ušt8_t * ”r , 1066 * u£r_d©a ) 1068  a2dp_’dpošt * ’dpošt = u£r_d©a ; 1069  a2dp_£tup * £tup ; 1071 `DBG (""); 1073 £tup = `fšd_£tup ( ’dpošt -> id ); 1074 ià(! £tup ) { 1075 `”rÜ ("Unableo find stream setup forƒndpoint %u", 1076 ’dpošt -> id ); 1077 * ”r = AVDTP_SEP_NOT_IN_USE ; 1078  FALSE ; 1081  TRUE ; 1082 } } 1084  gboÞ—n $£p_þo£_šd ( avd * £ssiÚ , 1085  avd_loÿl_£p * £p , 1086  avd_¡»am * ¡»am , 1087 ušt8_t * ”r , 1088 * u£r_d©a ) 1090  a2dp_’dpošt * ’dpošt = u£r_d©a ; 1091  a2dp_£tup * £tup ; 1093 `DBG (""); 1095 £tup = `fšd_£tup ( ’dpošt -> id ); 1096 ià(! £tup ) { 1097 `”rÜ ("Unableo find stream setup forƒndpoint %u", 1098 ’dpošt -> id ); 1099 * ”r = AVDTP_SEP_NOT_IN_USE ; 1100  FALSE ; 1103 `bt_audio_nÙify_¡©e ( £tup , HAL_AUDIO_STOPPED ); 1105 `£tup_»move ( £tup ); 1107  TRUE ; 1108 } } 1110  gboÞ—n $£p_¡¬t_šd ( avd * £ssiÚ , 1111  avd_loÿl_£p * £p , 1112  avd_¡»am * ¡»am , 1113 ušt8_t * ”r , 1114 * u£r_d©a ) 1116  a2dp_’dpošt * ’dpošt = u£r_d©a ; 1117  a2dp_£tup * £tup ; 1119 `DBG (""); 1121 £tup = `fšd_£tup ( ’dpošt -> id ); 1122 ià(! £tup ) { 1123 `”rÜ ("Unableo find stream setup forƒndpoint %u", 1124 ’dpošt -> id ); 1125 * ”r = AVDTP_SEP_NOT_IN_USE ; 1126  FALSE ; 1129 `bt_audio_nÙify_¡©e ( £tup , HAL_AUDIO_STARTED ); 1131  TRUE ; 1132 } } 1134  gboÞ—n $£p_su¥’d_šd ( avd * £ssiÚ , 1135  avd_loÿl_£p * £p , 1136  avd_¡»am * ¡»am , 1137 ušt8_t * ”r , 1138 * u£r_d©a ) 1140  a2dp_’dpošt * ’dpošt = u£r_d©a ; 1141  a2dp_£tup * £tup ; 1143 `DBG (""); 1145 £tup = `fšd_£tup ( ’dpošt -> id ); 1146 ià(! £tup ) { 1147 `”rÜ ("Unableo find stream setup forƒndpoint %u", 1148 ’dpošt -> id ); 1149 * ”r = AVDTP_SEP_NOT_IN_USE ; 1150  FALSE ; 1153 `bt_audio_nÙify_¡©e ( £tup , HAL_AUDIO_SUSPEND ); 1155  TRUE ; 1156 } } 1158  avd_£p_šd g£p_šd = { 1159 . g‘_ÿ·bž™y = £p_g‘ÿp_šd , 1160 . g£t_cÚfigu¿tiÚ = £p_£tcÚf_šd , 1161 . gÝ’ = £p_Ý’_šd , 1162 . gþo£ = £p_þo£_šd , 1163 . g¡¬t = £p_¡¬t_šd , 1164 . gsu¥’d = £p_su¥’d_šd , 1167  $£p_£tcÚf_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 1168  avd_¡»am * ¡»am , 1169  avd_”rÜ * ”r , * u£r_d©a ) 1171  a2dp_’dpošt * ’dpošt = u£r_d©a ; 1172  a2dp_£tup * £tup ; 1173  »t ; 1175 `DBG (""); 1177 £tup = `fšd_£tup ( ’dpošt -> id ); 1178 ià(! £tup ) { 1179 `”rÜ ("Unableo find stream setup forƒndpoint %u", 1180 ’dpošt -> id ); 1184 ià( ”r ) 1185  çžed ; 1187 »t = `avd_Ý’ ( £ssiÚ , ¡»am ); 1188 ià( »t < 0) { 1189 `”rÜ ("avd_Ý’: %s", `¡»¼Ü (- »t )); 1190  çžed ; 1195 çžed : 1196 `£tup_»move ( £tup ); 1197 } } 1199  $£p_Ý’_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 1200  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 1201 * u£r_d©a ) 1203  a2dp_’dpošt * ’dpošt = u£r_d©a ; 1204  a2dp_deviû * dev ; 1206 `DBG (""); 1208 ià( ”r ) 1209  çžed ; 1211 dev = `fšd_deviû_by_£ssiÚ ( £ssiÚ ); 1212 ià(! dev ) { 1213 `”rÜ ("Unableo find device for session"); 1214  çžed ; 1217 `a2dp_deviû_cÚÃù ( dev , Œª¥Üt_cÚÃù_cb ); 1221 çžed : 1222 `£tup_»move_by_id ( ’dpošt -> id ); 1223 } } 1225  $£p_¡¬t_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 1226  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 1227 * u£r_d©a ) 1229  a2dp_’dpošt * ’dpošt = u£r_d©a ; 1230  a2dp_£tup * £tup ; 1232 `DBG (""); 1234 ià( ”r ) { 1235 `£tup_»move_by_id ( ’dpošt -> id ); 1239 £tup = `fšd_£tup ( ’dpošt -> id ); 1240 ià(! £tup ) { 1241 `”rÜ ("Unableo find stream setup for %uƒndpoint", 1242 ’dpošt -> id ); 1246 `bt_audio_nÙify_¡©e ( £tup , HAL_AUDIO_STARTED ); 1247 } } 1249  $£p_su¥’d_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 1250  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 1251 * u£r_d©a ) 1253  a2dp_’dpošt * ’dpošt = u£r_d©a ; 1254  a2dp_£tup * £tup ; 1256 `DBG (""); 1258 ià( ”r ) { 1259 `£tup_»move_by_id ( ’dpošt -> id ); 1263 £tup = `fšd_£tup ( ’dpošt -> id ); 1264 ià(! £tup ) { 1265 `”rÜ ("Unableo find stream setup for %uƒndpoint", 1266 ’dpošt -> id ); 1270 `bt_audio_nÙify_¡©e ( £tup , HAL_AUDIO_STOPPED ); 1271 } } 1273  $£p_þo£_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 1274  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 1275 * u£r_d©a ) 1277  a2dp_’dpošt * ’dpošt = u£r_d©a ; 1278  a2dp_£tup * £tup ; 1280 `DBG (""); 1282 ià( ”r ) 1285 £tup = `fšd_£tup ( ’dpošt -> id ); 1286 ià(! £tup ) { 1287 `”rÜ ("Unableo find stream setup for %uƒndpoint", 1288 ’dpošt -> id ); 1292 `bt_audio_nÙify_¡©e ( £tup , HAL_AUDIO_STOPPED ); 1294 `£tup_»move ( £tup ); 1295 } } 1297  $£p_abÜt_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 1298  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 1299 * u£r_d©a ) 1301  a2dp_’dpošt * ’dpošt = u£r_d©a ; 1303 `DBG (""); 1305 ià( ”r ) 1308 `£tup_»move_by_id ( ’dpošt -> id ); 1309 } } 1311  avd_£p_cfm g£p_cfm = { 1312 . £t_cÚfigu¿tiÚ = £p_£tcÚf_cfm , 1313 . gÝ’ = £p_Ý’_cfm , 1314 . g¡¬t = £p_¡¬t_cfm , 1315 . gsu¥’d = £p_su¥’d_cfm , 1316 . gþo£ = £p_þo£_cfm , 1317 . gabÜt = £p_abÜt_cfm , 1320  ušt8_t $»gi¡”_’dpošt (cÚ¡ ušt8_t * uuid , ušt8_ˆ codec , 1321 GSLi¡ * ´e£ts ) 1323  a2dp_’dpošt * ’dpošt ; 1327 ’dpošt = `g_Ãw0 ( a2dp_’dpošt , 1); 1328 ’dpošt -> id = `g_¦i¡_Ëngth ( ’dpošts ) + 1; 1329 ’dpošt -> codec = codec; 1330 ’dpošt -> £p = `avd_»gi¡”_£p ( AVDTP_SEP_TYPE_SOURCE , 1331 AVDTP_MEDIA_TYPE_AUDIO , 1332 codec , FALSE , & £p_šd , 1333 & £p_cfm , ’dpošt ); 1334 ’dpošt -> ÿps = ´e£ts -> d©a ; 1335 ’dpošt -> ´e£ts = `g_¦i¡_cÝy ( `g_¦i¡_Áh (presets, 1)); 1337 ià( ’dpošt -> codec =ð A2DP_CODEC_VENDOR ) { 1338 a2dp_v’dÜ_codec_t * vndcodec = (*è ’dpošt -> ÿps -> d©a ; 1340 `avd_£p_£t_v’dÜ_codec ( ’dpošt -> £p , 1341 `btohl ( vndcodec -> v’dÜ_id ), 1342 `btohs ( vndcodec -> codec_id )); 1345 ’dpošts = `g_¦i¡_­³nd Óndpošts, ’dpošt ); 1347  ’dpošt -> id ; 1348 } } 1350  GSLi¡ * $·r£_´e£ts (cÚ¡  audio_´e£t * p , ušt8_t couÁ , 1351 ušt16_t Ën ) 1353 GSLi¡ * l = NULL ; 1354 ušt8_t i ; 1356  i = 0; couÁ > i; i++) { 1357 cÚ¡ ušt8_t * ±r = (cÚ¡ ušt8_ˆ*è p ; 1358  a2dp_´e£t * ´e£t ; 1360 ià( Ën < ( audio_´e£t )) { 1361 `DBG ("Inv®id…»£ˆšdex %u", i ); 1362 `g_¦i¡_ä“_fuÎ ( l , ´e£t_ä“ ); 1363  NULL ; 1366 Ën -ð( audio_´e£t ); 1367 ià( Ën =ð0 ||†’ < p ->len) { 1368 `DBG ("Inv®id…»£ˆsizoà%u fÜ index %u", Ën , i ); 1369 `g_¦i¡_ä“_fuÎ ( l , ´e£t_ä“ ); 1370  NULL ; 1373 ´e£t = `g_Ãw0 ( a2dp_´e£t , 1); 1374 ´e£t -> Ën = p ->len; 1375 ´e£t -> d©a = `g_memdup ( p ->d©a,…»£t-> Ën ); 1376 l = `g_¦i¡_­³nd Ö, ´e£t ); 1378 Ën -ð ´e£t ->len; 1379 ±r +ð(* p è+ ´e£t -> Ën ; 1380 p = (cÚ¡  audio_´e£t *è ±r ; 1383  l ; 1384 } } 1386  $bt_audio_Ý’ (cÚ¡ * buf , ušt16_t Ën ) 1388 cÚ¡  audio_cmd_Ý’ * cmd = buf ; 1389  audio_r¥_Ý’ r¥ ; 1390 GSLi¡ * ´e£ts ; 1392 `DBG (""); 1394 audio_»Œyšg = çl£ ; 1396 ià( cmd -> ´e£ts == 0) { 1397 `”rÜ ("No‡udio…resets found"); 1398  çžed ; 1401 ´e£ts = `·r£_´e£ts ( cmd -> ´e£t , cmd->´e£ts, Ën - (*cmd)); 1402 ià(! ´e£ts ) { 1403 `”rÜ ("No‡udio…resets found"); 1404  çžed ; 1407 r¥ . id = `»gi¡”_’dpošt ( cmd -> uuid , cmd-> codec , ´e£ts ); 1408 ià( r¥ . id == 0) { 1409 `g_¦i¡_ä“_fuÎ ( ´e£ts , ´e£t_ä“ ); 1410 `”rÜ ("Unableo„egisterƒndpoint"); 1411  çžed ; 1414 `g_¦i¡_ä“ ( ´e£ts ); 1416 `c_£nd_r¥_fuÎ ( audio_c , AUDIO_SERVICE_ID , AUDIO_OP_OPEN , 1417 ( r¥ ), &rsp, -1); 1421 çžed : 1422 `c_£nd_r¥ ( audio_c , AUDIO_SERVICE_ID , AUDIO_OP_OPEN , 1423 AUDIO_STATUS_FAILED ); 1424 } } 1426  a2dp_’dpošt * $fšd_’dpošt ( ušt8_t id ) 1428 GSLi¡ * l ; 1430  l = ’dpošts ;†;† = `g_¦i¡_Ãxt (l)) { 1431  a2dp_’dpošt * ’dpošt = l -> d©a ; 1433 ià( ’dpošt -> id == id) 1434  ’dpošt ; 1437  NULL ; 1438 } } 1440  $bt_audio_þo£ (cÚ¡ * buf , ušt16_t Ën ) 1442 cÚ¡  audio_cmd_þo£ * cmd = buf ; 1443  a2dp_’dpošt * ’dpošt ; 1445 `DBG (""); 1447 ’dpošt = `fšd_’dpošt ( cmd -> id ); 1448 ià(! ’dpošt ) { 1449 `”rÜ ("UÇbËØfšdƒndpošˆ%u", cmd -> id ); 1450 `c_£nd_r¥ ( audio_c , AUDIO_SERVICE_ID , AUDIO_OP_CLOSE , 1451 AUDIO_STATUS_FAILED ); 1455 ’dpošts = `g_¦i¡_»move Óndpošts, ’dpošt ); 1456 `uÄegi¡”_’dpošt ( ’dpošt ); 1458 `c_£nd_r¥ ( audio_c , AUDIO_SERVICE_ID , AUDIO_OP_CLOSE , 1459 AUDIO_STATUS_SUCCESS ); 1460 } } 1462  $bt_¡»am_Ý’ (cÚ¡ * buf , ušt16_t Ën ) 1464 cÚ¡  audio_cmd_Ý’_¡»am * cmd = buf ; 1465  audio_r¥_Ý’_¡»am * r¥ ; 1466  a2dp_£tup * £tup ; 1467  fd ; 1468 ušt16_t omtu ; 1470 `DBG (""); 1472 ià( cmd -> id ) 1473 £tup = `fšd_£tup ( cmd -> id ); 1475 £tup = £tups ? s‘ups-> d©a : NULL ; 1476 ià(! £tup ) { 1477 `”rÜ ("UÇbËØfšd sŒ—m f܃ndpošˆ%u", cmd -> id ); 1478 `c_£nd_r¥ ( audio_c , AUDIO_SERVICE_ID , AUDIO_OP_OPEN_STREAM , 1479 AUDIO_STATUS_FAILED ); 1483 ià(! `avd_¡»am_g‘_Œª¥Üt ( £tup -> ¡»am , & fd , NULL , & omtu , 1484 NULL )) { 1485 `”rÜ ("avdtp_stream_get_transport: failed"); 1486 `c_£nd_r¥ ( audio_c , AUDIO_SERVICE_ID , AUDIO_OP_OPEN_STREAM , 1487 AUDIO_STATUS_FAILED ); 1491 Ën = ( audio_r¥_Ý’_¡»am ) + 1492 ( audio_´e£t è+ £tup -> ´e£t -> Ën ; 1493 r¥ = `g_m®loc0 ( Ën ); 1494 r¥ -> id = £tup -> ’dpošt ->id; 1495 r¥ -> mtu = omtu ; 1496 r¥ -> ´e£t -> Ën = £tup ->preset->len; 1497 `memýy ( r¥ -> ´e£t -> d©a , £tup ->´e£t->d©a, s‘up->´e£t-> Ën ); 1499 `c_£nd_r¥_fuÎ ( audio_c , AUDIO_SERVICE_ID , AUDIO_OP_OPEN_STREAM , 1500 Ën , r¥ , fd ); 1502 `g_ä“ ( r¥ ); 1503 } } 1505  $bt_¡»am_þo£ (cÚ¡ * buf , ušt16_t Ën ) 1507 cÚ¡  audio_cmd_þo£_¡»am * cmd = buf ; 1508  a2dp_£tup * £tup ; 1509  ”r ; 1511 `DBG (""); 1513 £tup = `fšd_£tup ( cmd -> id ); 1514 ià(! £tup ) { 1515 `”rÜ ("UÇbËØfšd sŒ—m f܃ndpošˆ%u", cmd -> id ); 1516  çžed ; 1519 ”r = `avd_þo£ ( £tup -> dev -> £ssiÚ , s‘up-> ¡»am , FALSE ); 1520 ià( ”r < 0) { 1521 `”rÜ ("avd_þo£: %s", `¡»¼Ü (- ”r )); 1522  çžed ; 1525 `c_£nd_r¥ ( audio_c , AUDIO_SERVICE_ID , AUDIO_OP_CLOSE_STREAM , 1526 AUDIO_STATUS_SUCCESS ); 1530 çžed : 1531 `c_£nd_r¥ ( audio_c , AUDIO_SERVICE_ID , AUDIO_OP_CLOSE_STREAM , 1532 AUDIO_STATUS_FAILED ); 1533 } } 1535  $bt_¡»am_»sume (cÚ¡ * buf , ušt16_t Ën ) 1537 cÚ¡  audio_cmd_»sume_¡»am * cmd = buf ; 1538  a2dp_£tup * £tup ; 1539  ”r ; 1541 `DBG (""); 1543 £tup = `fšd_£tup ( cmd -> id ); 1544 ià(! £tup ) { 1545 `”rÜ ("UÇbËØfšd sŒ—m f܃ndpošˆ%u", cmd -> id ); 1546  çžed ; 1549 ià( £tup -> ¡©e !ð HAL_AUDIO_STARTED ) { 1550 ”r = `avd_¡¬t ( £tup -> dev -> £ssiÚ , s‘up-> ¡»am ); 1551 ià( ”r < 0) { 1552 `”rÜ ("avd_¡¬t: %s", `¡»¼Ü (- ”r )); 1553  çžed ; 1557 `c_£nd_r¥ ( audio_c , AUDIO_SERVICE_ID , AUDIO_OP_RESUME_STREAM , 1558 AUDIO_STATUS_SUCCESS ); 1562 çžed : 1563 `c_£nd_r¥ ( audio_c , AUDIO_SERVICE_ID , AUDIO_OP_RESUME_STREAM , 1564 AUDIO_STATUS_FAILED ); 1565 } } 1567  $bt_¡»am_su¥’d (cÚ¡ * buf , ušt16_t Ën ) 1569 cÚ¡  audio_cmd_su¥’d_¡»am * cmd = buf ; 1570  a2dp_£tup * £tup ; 1571  ”r ; 1573 `DBG (""); 1575 £tup = `fšd_£tup ( cmd -> id ); 1576 ià(! £tup ) { 1577 `”rÜ ("UÇbËØfšd sŒ—m f܃ndpošˆ%u", cmd -> id ); 1578  çžed ; 1581 ”r = `avd_su¥’d ( £tup -> dev -> £ssiÚ , s‘up-> ¡»am ); 1582 ià( ”r < 0) { 1583 `”rÜ ("avd_su¥’d: %s", `¡»¼Ü (- ”r )); 1584  çžed ; 1587 `c_£nd_r¥ ( audio_c , AUDIO_SERVICE_ID , AUDIO_OP_SUSPEND_STREAM , 1588 AUDIO_STATUS_SUCCESS ); 1592 çžed : 1593 `c_£nd_r¥ ( audio_c , AUDIO_SERVICE_ID , AUDIO_OP_SUSPEND_STREAM , 1594 AUDIO_STATUS_FAILED ); 1595 } } 1597 cÚ¡  c_hªdËr gaudio_hªdËrs [] = { 1599 { bt_audio_Ý’ , Œue , ( audio_cmd_Ý’ ) }, 1601 { bt_audio_þo£ , çl£ , ( audio_cmd_þo£ ) }, 1603 { bt_¡»am_Ý’ , çl£ , ( audio_cmd_Ý’_¡»am ) }, 1605 { bt_¡»am_þo£ , çl£ , ( audio_cmd_þo£_¡»am ) }, 1607 { bt_¡»am_»sume , çl£ , ( audio_cmd_»sume_¡»am ) }, 1609 { bt_¡»am_su¥’d , çl£ , ( audio_cmd_su¥’d_¡»am ) }, 1612  $bt_audio_uÄegi¡” () 1614 `DBG (""); 1616 ià( audio_»Œy_id > 0) 1617 `g_sourû_»move ( audio_»Œy_id ); 1619 `g_¦i¡_ä“_fuÎ ( ’dpošts , uÄegi¡”_’dpošt ); 1620 ’dpošts = NULL ; 1622 `g_¦i¡_ä“_fuÎ ( £tups , £tup_ä“ ); 1623 £tups = NULL ; 1625 `c_þ—nup ( audio_c ); 1626 audio_c = NULL ; 1627 } } 1629  boÞ $bt_audio_»gi¡” ( c_discÚÃù_cb discÚÃù ) 1631 `DBG (""); 1633 audio_c = `c_š™ ( BLUEZ_AUDIO_SK_PATH , (BLUEZ_AUDIO_SK_PATH), 1634 AUDIO_SERVICE_ID_MAX , çl£ , discÚÃù , NULL ); 1635 ià(! audio_c ) 1636  çl£ ; 1638 `c_»gi¡” ( audio_c , AUDIO_SERVICE_ID , audio_hªdËrs , 1639 `G_N_ELEMENTS ( audio_hªdËrs )); 1641  Œue ; 1642 } } 1644  gboÞ—n $audio_»Œy_»gi¡” (* d©a ) 1646 c_discÚÃù_cb cb = d©a ; 1648 audio_»Œy_id = 0; 1649 audio_»Œyšg = Œue ; 1651 `bt_audio_»gi¡” ( cb ); 1653  FALSE ; 1654 } } 1656  $audio_discÚÃùed (* d©a ) 1658 GSLi¡ * l ; 1659 boÞ »¡¬t ; 1661 `DBG (""); 1663 ià( audio_»Œyšg ) 1664  »Œy ; 1666 »¡¬t = ’dpošts !ð NULL ? Œue : çl£ ; 1668 `bt_audio_uÄegi¡” (); 1670  l = deviûs ;†;† = `g_¦i¡_Ãxt (l)) { 1671  a2dp_deviû * dev = l -> d©a ; 1673 `avd_shutdown ( dev -> £ssiÚ ); 1676 ià(! »¡¬t ) 1679 »Œy : 1680 audio_»Œy_id = `g_timeout_add_£cÚds ( AUDIO_RETRY_TIMEOUT , 1681 audio_»Œy_»gi¡” , 1682 audio_discÚÃùed ); 1683 } } 1685 boÞ $bt_a2dp_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ) 1687 GE¼Ü * ”r = NULL ; 1688 sdp_»cÜd_t * »c ; 1690 `DBG (""); 1692 `baýy (& ad­‹r_addr , addr ); 1694 £rv” = `bt_io_li¡’ ( cÚÃù_cb , NULL , NULL, NULL, & ”r , 1695 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 1696 BT_IO_OPT_PSM , AVDTP_PSM , 1697 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 1698 BT_IO_OPT_MASTER , Œue , 1699 BT_IO_OPT_INVALID ); 1700 ià(! £rv” ) { 1701 `”rÜ ("FažedØli¡’ oÀAVDTP chªÃl: %s", ”r -> mes§ge ); 1702 `g_”rÜ_ä“ ( ”r ); 1703  çl£ ; 1706 »c = `a2dp_»cÜd (); 1707 ià(! »c ) { 1708 `”rÜ ("Failedo‡llocate A2DP„ecord"); 1709  çž ; 1712 ià( `bt_ad­‹r_add_»cÜd ( »c , SVC_HINT_CAPTURING ) < 0) { 1713 `”rÜ ("Failedo„egister A2DP„ecord"); 1714 `sdp_»cÜd_ä“ ( »c ); 1715  çž ; 1717 »cÜd_id = »c -> hªdË ; 1719 h®_c = c ; 1721 `c_»gi¡” ( h®_c , HAL_SERVICE_ID_A2DP , cmd_hªdËrs , 1722 `G_N_ELEMENTS ( cmd_hªdËrs )); 1724 ià( `bt_audio_»gi¡” ( audio_discÚÃùed )) 1725  Œue ; 1727 çž : 1728 `g_io_chªÃl_shutdown ( £rv” , TRUE , NULL ); 1729 `g_io_chªÃl_uÄef ( £rv” ); 1730 £rv” = NULL ; 1731  çl£ ; 1732 } } 1734  $bt_a2dp_uÄegi¡” () 1736 `DBG (""); 1738 `g_¦i¡_ä“_fuÎ ( £tups , £tup_ä“ ); 1739 £tups = NULL ; 1741 `g_¦i¡_ä“_fuÎ ( ’dpošts , uÄegi¡”_’dpošt ); 1742 ’dpošts = NULL ; 1744 `g_¦i¡_ä“_fuÎ ( deviûs , a2dp_deviû_ä“ ); 1745 deviûs = NULL ; 1747 `c_uÄegi¡” ( h®_c , HAL_SERVICE_ID_A2DP ); 1748 h®_c = NULL ; 1750 `bt_ad­‹r_»move_»cÜd ( »cÜd_id ); 1751 »cÜd_id = 0; 1753 ià( £rv” ) { 1754 `g_io_chªÃl_shutdown ( £rv” , TRUE , NULL ); 1755 `g_io_chªÃl_uÄef ( £rv” ); 1756 £rv” = NULL ; 1759 ià( audio_c ) { 1760 `c_uÄegi¡” ( audio_c , AUDIO_SERVICE_ID ); 1761 `c_þ—nup ( audio_c ); 1762 audio_c = NULL ; 1764 } } @android/a2dp.h 24 boÞ bt_a2dp_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ); 25  bt_a2dp_uÄegi¡” (); @android/audio-msg.h 24  #BLUEZ_AUDIO_MTU 1024 ) 26 cÚ¡  gBLUEZ_AUDIO_SK_PATH [] = "\0bluez_audio_socket"; 28  #AUDIO_SERVICE_ID 0 ) 29  #AUDIO_SERVICE_ID_MAX AUDIO_SERVICE_ID ) 31  #AUDIO_STATUS_SUCCESS IPC_STATUS_SUCCESS ) 32  #AUDIO_STATUS_FAILED 0x01 ) 34  #AUDIO_OP_STATUS IPC_OP_STATUS ) 36  #AUDIO_OP_OPEN 0x01 ) 37  saudio_´e£t { 38 ušt8_t mËn ; 39 ušt8_t md©a [0]; 40 } __©Œibu‹__ (( ·cked )); 42  saudio_cmd_Ý’ { 43 ušt8_t muuid [16]; 44 ušt8_t mcodec ; 45 ušt8_t m´e£ts ; 46  audio_´e£t m´e£t [0]; 47 } __©Œibu‹__ (( ·cked )); 49  saudio_r¥_Ý’ { 50 ušt8_t mid ; 51 } __©Œibu‹__ (( ·cked )); 53  #AUDIO_OP_CLOSE 0x02 ) 54  saudio_cmd_þo£ { 55 ušt8_t mid ; 56 } __©Œibu‹__ (( ·cked )); 58  #AUDIO_OP_OPEN_STREAM 0x03 ) 59  saudio_cmd_Ý’_¡»am { 60 ušt8_t mid ; 61 } __©Œibu‹__ (( ·cked )); 63  saudio_r¥_Ý’_¡»am { 64 ušt16_t mid ; 65 ušt16_t mmtu ; 66  audio_´e£t m´e£t [0]; 67 } __©Œibu‹__ (( ·cked )); 69  #AUDIO_OP_CLOSE_STREAM 0x04 ) 70  saudio_cmd_þo£_¡»am { 71 ušt8_t mid ; 72 } __©Œibu‹__ (( ·cked )); 74  #AUDIO_OP_RESUME_STREAM 0x05 ) 75  saudio_cmd_»sume_¡»am { 76 ušt8_t mid ; 77 } __©Œibu‹__ (( ·cked )); 79  #AUDIO_OP_SUSPEND_STREAM 0x06 ) 80  saudio_cmd_su¥’d_¡»am { 81 ušt8_t mid ; 82 } __©Œibu‹__ (( ·cked )); @android/audio_utils/resampler.c 19  ~<”ºo.h > 20  ~<¡dlib.h > 21  ~<¡ršg.h > 22  ~ 23  ~ 24  ~<¥“x/¥“x_»§m¶”.h > 26  ~"h®-log.h " 28  s»§m¶” { 29  »§m¶”_™ã m™ã ; 30 S³exRe§m¶”S‹ * m¥“x_»§m¶” ; 31  »§m¶”_bufãr_´ovid” * m´ovid” ; 32 ušt32_t mš_§m¶e_¿‹ ; 33 ušt32_t mout_§m¶e_¿‹ ; 34 ušt32_t mchªÃl_couÁ ; 35 št16_t * mš_buf ; 36 size_t mš_buf_size ; 37 size_t mäames_š ; 38 size_t mäames_rq ; 39 size_t mäames_Ãeded ; 41 št32_t m¥“x_d–ay_ns ; 49  $»§m¶”_»£t ( »§m¶”_™ã * »§m¶” ) 51  »§m¶” * rsmp = (resampler *)resampler; 53 rsmp -> äames_š = 0; 54 rsmp -> äames_rq = 0; 56 ià( rsmp !ð NULL &&„smp-> ¥“x_»§m¶” != NULL) { 57 `¥“x_»§m¶”_»£t_mem ( rsmp -> ¥“x_»§m¶” ); 59 } } 61  št32_t $»§m¶”_d–ay_ns ( »§m¶”_™ã * »§m¶” ) 63  »§m¶” * rsmp = (resampler *)resampler; 65 št32_t d–ay = (št32_t)((1000000000 * ( št64_t ) rsmp -> äames_š è/„smp-> š_§m¶e_¿‹ ); 66 d–ay +ð rsmp -> ¥“x_d–ay_ns ; 68  d–ay ; 69 } } 73  $»§m¶”_»§m¶e_äom_´ovid” ( »§m¶”_™ã * »§m¶” , 74 št16_t * out , 75 size_t * outF¿meCouÁ ) 77  »§m¶” * rsmp = (resampler *)resampler; 78 size_t äamesRq ; 79 size_t äamesWr ; 80 size_t šF¿mes ; 82 ià( rsmp =ð NULL || out =ðNULL || outF¿meCouÁ == NULL) { 83  - EINVAL ; 85 ià( rsmp -> ´ovid” =ð NULL ) { 86 * outF¿meCouÁ = 0; 87  - ENOSYS ; 90 äamesRq = * outF¿meCouÁ ; 93 ià( äamesRq !ð rsmp -> äames_rq ) { 94 rsmp -> äames_Ãeded = ( äamesRq *„smp-> š_§m¶e_¿‹ è/„smp-> out_§m¶e_¿‹ + 1; 95 rsmp -> äames_rq = äamesRq ; 98 äamesWr = 0; 99 šF¿mes = 0; 100  äamesWr < äamesRq ) { 101 size_t outF¿mes ; 102 ià( rsmp -> äames_š <„smp-> äames_Ãeded ) { 103  »§m¶”_bufãr buf ; 107 ià( rsmp -> š_buf_size <„smp-> äames_Ãeded ) { 108 rsmp -> š_buf_size =„smp-> äames_Ãeded ; 109 rsmp -> š_buf = ( št16_t *) `»®loc (rsmp->in_buf, 110 rsmp -> š_buf_size *„smp-> chªÃl_couÁ * ( št16_t )); 112 buf . äame_couÁ = rsmp -> äames_Ãeded -„smp-> äames_š ; 113 rsmp -> ´ovid” -> `g‘_Ãxt_bufãr Ôsmp->´ovid”, & buf ); 114 ià( buf . ¿w =ð NULL ) { 117 `memýy ( rsmp -> š_buf +„smp-> äames_š *„smp-> chªÃl_couÁ , 118 buf . ¿w , 119 buf . äame_couÁ * rsmp -> chªÃl_couÁ * ( št16_t )); 120 rsmp -> äames_š +ð buf . äame_couÁ ; 121 rsmp -> ´ovid” -> `»Ëa£_bufãr Ôsmp->´ovid”, & buf ); 124 outF¿mes = äamesRq - äamesWr ; 125 šF¿mes = rsmp -> äames_š ; 126 ià( rsmp -> chªÃl_couÁ == 1) { 127 `¥“x_»§m¶”_´oûss_št ( rsmp -> ¥“x_»§m¶” , 129 rsmp -> š_buf , 130 (*è& šF¿mes , 131 out + äamesWr , 132 (*è& outF¿mes ); 134 `¥“x_»§m¶”_´oûss_š‹¾—ved_št ( rsmp -> ¥“x_»§m¶” , 135 rsmp -> š_buf , 136 (*è& šF¿mes , 137 out + äamesWr * rsmp -> chªÃl_couÁ , 138 (*è& outF¿mes ); 140 äamesWr +ð outF¿mes ; 141 rsmp -> äames_š -ð šF¿mes ; 143 ià(( äamesWr !ð äamesRq è&& ( rsmp -> äames_š != 0)) 144 `w¬n ("ReSampler::resample()„emaining %zd frames in‡nd %zd out", 145 rsmp -> äames_š , ( äamesRq - äamesWr )); 147 ià( rsmp -> äames_š ) { 148 `memmove ( rsmp -> š_buf , 149 rsmp -> š_buf + šF¿mes *„smp-> chªÃl_couÁ , 150 rsmp -> äames_š *„smp-> chªÃl_couÁ * ( št16_t )); 152 * outF¿meCouÁ = äamesWr ; 155 } } 157  $»§m¶”_»§m¶e_äom_šput ( »§m¶”_™ã * »§m¶” , 158 št16_t * š , 159 size_t * šF¿meCouÁ , 160 št16_t * out , 161 size_t * outF¿meCouÁ ) 163  »§m¶” * rsmp = (resampler *)resampler; 165 ià( rsmp =ð NULL || š =ðNULL || šF¿meCouÁ == NULL || 166 out =ð NULL || outF¿meCouÁ == NULL) { 167  - EINVAL ; 169 ià( rsmp -> ´ovid” !ð NULL ) { 170 * outF¿meCouÁ = 0; 171  - ENOSYS ; 174 ià( rsmp -> chªÃl_couÁ == 1) { 175 `¥“x_»§m¶”_´oûss_št ( rsmp -> ¥“x_»§m¶” , 177 š , 178 (*è šF¿meCouÁ , 179 out , 180 (*è outF¿meCouÁ ); 182 `¥“x_»§m¶”_´oûss_š‹¾—ved_št ( rsmp -> ¥“x_»§m¶” , 183 š , 184 (*è šF¿meCouÁ , 185 out , 186 (*è outF¿meCouÁ ); 189 `DBG ("»§m¶”_»§m¶e_äom_šput(èDONE iÀ%zd ouˆ%zd", * šF¿meCouÁ , * outF¿meCouÁ ); 192 } } 194  $ü—‹_»§m¶” ( ušt32_t šSam¶eR©e , 195 ušt32_t outSam¶eR©e , 196 ušt32_t chªÃlCouÁ , 197 ušt32_t qu®™y , 198  »§m¶”_bufãr_´ovid” * ´ovid” , 199  »§m¶”_™ã ** »§m¶” ) 201  ”rÜ ; 202  »§m¶” * rsmp ; 203  äames ; 205 `DBG ("create_resampler() In SR %d Out SR %d channels %d", 206 šSam¶eR©e , outSam¶eR©e , chªÃlCouÁ ); 208 ià( »§m¶” =ð NULL ) { 209  - EINVAL ; 212 * »§m¶” = NULL ; 214 ià( qu®™y <ð RESAMPLER_QUALITY_MIN || qu®™y >ð RESAMPLER_QUALITY_MAX ) { 215  - EINVAL ; 218 rsmp = ( »§m¶” *) `ÿÎoc (1, (resampler)); 220 rsmp -> ¥“x_»§m¶” = `¥“x_»§m¶”_š™ ( chªÃlCouÁ , 221 šSam¶eR©e , 222 outSam¶eR©e , 223 qu®™y , 224 & ”rÜ ); 225 ià( rsmp -> ¥“x_»§m¶” =ð NULL ) { 226 `”rÜ ("ReSam¶”: CªnÙ c»©¥“x„e§m¶”: %s", `¥“x_»§m¶”_¡»¼Ü ( ”rÜ )); 227 `ä“ ( rsmp ); 228  - ENODEV ; 231 rsmp -> ™ã . »£t = »§m¶”_»£t ; 232 rsmp -> ™ã . »§m¶e_äom_´ovid” = »§m¶”_»§m¶e_äom_´ovid” ; 233 rsmp -> ™ã . »§m¶e_äom_šput = »§m¶”_»§m¶e_äom_šput ; 234 rsmp -> ™ã . d–ay_ns = »§m¶”_d–ay_ns ; 236 rsmp -> ´ovid” =…rovider; 237 rsmp -> š_§m¶e_¿‹ = šSam¶eR©e ; 238 rsmp -> out_§m¶e_¿‹ = outSam¶eR©e ; 239 rsmp -> chªÃl_couÁ = chªÃlCouÁ ; 240 rsmp -> š_buf = NULL ; 241 rsmp -> š_buf_size = 0; 243 `»§m¶”_»£t (& rsmp -> ™ã ); 245 äames = `¥“x_»§m¶”_g‘_šput_Ï‹ncy ( rsmp -> ¥“x_»§m¶” ); 246 rsmp -> ¥“x_d–ay_ns = ( št32_t )((1000000000 * ( št64_t ) äames è/„smp-> š_§m¶e_¿‹ ); 247 äames = `¥“x_»§m¶”_g‘_ouut_Ï‹ncy ( rsmp -> ¥“x_»§m¶” ); 248 rsmp -> ¥“x_d–ay_ns +ð( št32_t )((1000000000 * ( št64_t ) äames è/„smp-> out_§m¶e_¿‹ ); 250 * »§m¶” = & rsmp -> ™ã ; 251 `DBG ("create_resampler() DONE„smp %p &rsmp->itfe %p speex %p", 252 rsmp , &rsmp-> ™ã ,„smp-> ¥“x_»§m¶” ); 254 } } 256  $»Ëa£_»§m¶” ( »§m¶”_™ã * »§m¶” ) 258  »§m¶” * rsmp = (resampler *)resampler; 260 ià( rsmp =ð NULL ) { 264 `ä“ ( rsmp -> š_buf ); 266 ià( rsmp -> ¥“x_»§m¶” !ð NULL ) { 267 `¥“x_»§m¶”_de¡roy ( rsmp -> ¥“x_»§m¶” ); 269 `ä“ ( rsmp ); 270 } } @android/audio_utils/resampler.h 17 #iâdeà ANDROID_RESAMPLER_H 18  #ANDROID_RESAMPLER_H ) 20  ~<¡dšt.h > 21  ~ 23 g__BEGIN_DECLS 26  #RESAMPLER_QUALITY_MAX 10 ) 27  #RESAMPLER_QUALITY_MIN 0 ) 28  #RESAMPLER_QUALITY_DEFAULT 4 ) 29  #RESAMPLER_QUALITY_VOIP 3 ) 30  #RESAMPLER_QUALITY_DESKTOP 5 ) 32  s»§m¶”_bufãr { 34 * m¿w ; 35 * mi16 ; 36 št8_t * mi8 ; 38 size_t mäame_couÁ ; 42  s»§m¶”_bufãr_´ovid” 50 (* mg‘_Ãxt_bufãr )( »§m¶”_bufãr_´ovid” * m´ovid” , 51  »§m¶”_bufãr * mbufãr ); 57 (* m»Ëa£_bufãr )( »§m¶”_bufãr_´ovid” * m´ovid” , 58  »§m¶”_bufãr * mbufãr ); 62  s»§m¶”_™ã { 66 (* m»£t )( »§m¶”_™ã * m»§m¶” ); 71 (* m»§m¶e_äom_´ovid” )( »§m¶”_™ã * m»§m¶” , 72 št16_t * mout , 73 size_t * moutF¿meCouÁ ); 79 (* m»§m¶e_äom_šput )( »§m¶”_™ã * m»§m¶” , 80 št16_t * mš , 81 size_t * mšF¿meCouÁ , 82 št16_t * mout , 83 size_t * moutF¿meCouÁ ); 87 št32_t (* d–ay_ns )( »§m¶”_™ã * m»§m¶” ); 95  ü—‹_»§m¶” ( ušt32_t šSam¶eR©e , 96 ušt32_t outSam¶eR©e , 97 ušt32_t chªÃlCouÁ , 98 ušt32_t qu®™y , 99  »§m¶”_bufãr_´ovid” * ´ovid” , 100  »§m¶”_™ã **); 105  »Ëa£_»§m¶” ( »§m¶”_™ã *); 107 g__END_DECLS @android/avctp.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡dlib.h > 31  ~<¡dšt.h > 32  ~<¡dboÞ.h > 33  ~<”ºo.h > 34  ~ 35  ~ 36  ~ 37  ~<¡ršg.h > 38  ~ 39  ~ 40  ~ 41  ~<Ãtš‘/š.h > 43  ~ 45  ~ 47  ~"¤c/log.h " 48  ~"¤c/ušput.h " 50  ~"avùp.h " 56  #AVC_PRESS_TIMEOUT 2 ) 58  #QUIRK_NO_RELEASE 1 << 0 ) 61  #AVCTP_COMMAND 0 ) 62  #AVCTP_RESPONSE 1 ) 65  #AVCTP_PACKET_SINGLE 0 ) 66  #AVCTP_PACKET_START 1 ) 67  #AVCTP_PACKET_CONTINUE 2 ) 68  #AVCTP_PACKET_END 3 ) 70 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 72  savùp_h—d” { 73 ušt8_t mid :1; 74 ušt8_t mü :1; 75 ušt8_t m·ck‘_ty³ :2; 76 ušt8_t mŒª§ùiÚ :4; 77 ušt16_t mpid ; 78 } __©Œibu‹__ (( ·cked )); 80  savc_h—d” { 81 ušt8_t mcode :4; 82 ušt8_t m_hdr0 :4; 83 ušt8_t msubun™_id :3; 84 ušt8_t msubun™_ty³ :5; 85 ušt8_t mÝcode ; 86 } __©Œibu‹__ (( ·cked )); 88 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 90  savùp_h—d” { 91 ušt8_t mŒª§ùiÚ :4; 92 ušt8_t m·ck‘_ty³ :2; 93 ušt8_t mü :1; 94 ušt8_t mid :1; 95 ušt16_t mpid ; 96 } __©Œibu‹__ (( ·cked )); 98  savc_h—d” { 99 ušt8_t m_hdr0 :4; 100 ušt8_t mcode :4; 101 ušt8_t msubun™_ty³ :5; 102 ušt8_t msubun™_id :3; 103 ušt8_t mÝcode ; 104 } __©Œibu‹__ (( ·cked )); 110  savùp_cÚŒÞ_»q { 111  avùp_³ndšg_»q * mp ; 112 ušt8_t mcode ; 113 ušt8_t msubun™ ; 114 ušt8_t mÝ ; 115  iovec * miov ; 116  miov_út ; 117 avùp_r¥_cb mfunc ; 118 * mu£r_d©a ; 121  savùp_browsšg_»q { 122  avùp_³ndšg_»q * mp ; 123  iovec * miov ; 124  miov_út ; 125 avùp_browsšg_r¥_cb mfunc ; 126 * mu£r_d©a ; 129 (* tavùp_´oûss_cb è(* td©a ); 131  savùp_³ndšg_»q { 132  avùp_chªÃl * chª ; 133 ušt8_t Œª§ùiÚ ; 134 gušt timeout ; 135  ”r ; 136 avùp_´oûss_cb ´oûss ; 137 * d©a ; 138 avùp_de¡roy_cb_t de¡roy ; 141  savùp_chªÃl { 142  avùp * £ssiÚ ; 143 GIOChªÃl * io ; 144 ušt8_t Œª§ùiÚ ; 145 gušt w©ch ; 146 ušt16_t imtu ; 147 ušt16_t omtu ; 148 ušt8_t * bufãr ; 149 GSLi¡ * hªdËrs ; 150  avùp_³ndšg_»q * p ; 151 GQueue * queue ; 152 GSLi¡ * ´oûs£d ; 153 gušt ´oûss_id ; 154 avùp_de¡roy_cb_t de¡roy ; 157  skey_´es£d { 158 ušt8_t Ý ; 159 ušt8_t * ·¿ms ; 160 size_t ·¿ms_Ën ; 161 gušt tim” ; 164  savùp { 165  ušput ; 167  ·s¡hrough_id ; 168  un™_id ; 169  subun™_id ; 171  avùp_chªÃl * cÚŒÞ ; 172  avùp_chªÃl * browsšg ; 174  avùp_·s¡hrough_hªdËr * hªdËr ; 176 ušt8_t key_quœks [256]; 177  key_´es£d key ; 178 ušt16_t v”siÚ ; 180 avùp_de¡roy_cb_t de¡roy ; 181 * d©a ; 184  savùp_·s¡hrough_hªdËr { 185 avùp_·s¡hrough_cb cb ; 186 * u£r_d©a ; 187  id ; 190  savùp_pdu_hªdËr { 191 ušt8_t Ýcode ; 192 avùp_cÚŒÞ_pdu_cb cb ; 193 * u£r_d©a ; 194  id ; 197  savùp_browsšg_pdu_hªdËr { 198 avùp_browsšg_pdu_cb cb ; 199 * u£r_d©a ; 200  id ; 201 avùp_de¡roy_cb_t de¡roy ; 205 cÚ¡ * Çme ; 206 ušt8_t avc ; 207 ušt16_t ušput ; 208 } key_m­ [] = { 209 { "SELECT", AVC_SELECT , KEY_SELECT }, 210 { "UP", AVC_UP , KEY_UP }, 211 { "DOWN", AVC_DOWN , KEY_DOWN }, 212 { "LEFT", AVC_LEFT , KEY_LEFT }, 213 { "RIGHT", AVC_RIGHT , KEY_RIGHT }, 214 { "ROOT MENU", AVC_ROOT_MENU , KEY_MENU }, 215 { "CONTENTS MENU", AVC_CONTENTS_MENU , KEY_PROGRAM }, 216 { "FAVORITE MENU", AVC_FAVORITE_MENU , KEY_FAVORITES }, 217 { "EXIT", AVC_EXIT , KEY_EXIT }, 218 { "ON DEMAND MENU", AVC_ON_DEMAND_MENU , KEY_MENU }, 219 { "APPS MENU", AVC_APPS_MENU , KEY_MENU }, 220 { "0", AVC_0 , KEY_0 }, 221 { "1", AVC_1 , KEY_1 }, 222 { "2", AVC_2 , KEY_2 }, 223 { "3", AVC_3 , KEY_3 }, 224 { "4", AVC_4 , KEY_4 }, 225 { "5", AVC_5 , KEY_5 }, 226 { "6", AVC_6 , KEY_6 }, 227 { "7", AVC_7 , KEY_7 }, 228 { "8", AVC_8 , KEY_8 }, 229 { "9", AVC_9 , KEY_9 }, 230 { "DOT", AVC_DOT , KEY_DOT }, 231 { "ENTER", AVC_ENTER , KEY_ENTER }, 232 { "CHANNEL UP", AVC_CHANNEL_UP , KEY_CHANNELUP }, 233 { "CHANNEL DOWN", AVC_CHANNEL_DOWN , KEY_CHANNELDOWN }, 234 { "CHANNEL PREVIOUS", AVC_CHANNEL_PREVIOUS , KEY_LAST }, 235 { "INPUT SELECT", AVC_INPUT_SELECT , KEY_CONFIG }, 236 { "INFO", AVC_INFO , KEY_INFO }, 237 { "HELP", AVC_HELP , KEY_HELP }, 238 { "POWER", AVC_POWER , KEY_POWER2 }, 239 { "VOLUME UP", AVC_VOLUME_UP , KEY_VOLUMEUP }, 240 { "VOLUME DOWN", AVC_VOLUME_DOWN , KEY_VOLUMEDOWN }, 241 { "MUTE", AVC_MUTE , KEY_MUTE }, 242 { "PLAY", AVC_PLAY , KEY_PLAYCD }, 243 { "STOP", AVC_STOP , KEY_STOPCD }, 244 { "PAUSE", AVC_PAUSE , KEY_PAUSECD }, 245 { "FORWARD", AVC_FORWARD , KEY_NEXTSONG }, 246 { "BACKWARD", AVC_BACKWARD , KEY_PREVIOUSSONG }, 247 { "RECORD", AVC_RECORD , KEY_RECORD }, 248 { "REWIND", AVC_REWIND , KEY_REWIND }, 249 { "FAST FORWARD", AVC_FAST_FORWARD , KEY_FASTFORWARD }, 250 { "LIST", AVC_LIST , KEY_LIST }, 251 { "F1", AVC_F1 , KEY_F1 }, 252 { "F2", AVC_F2 , KEY_F2 }, 253 { "F3", AVC_F3 , KEY_F3 }, 254 { "F4", AVC_F4 , KEY_F4 }, 255 { "F5", AVC_F5 , KEY_F5 }, 256 { "F6", AVC_F6 , KEY_F6 }, 257 { "F7", AVC_F7 , KEY_F7 }, 258 { "F8", AVC_F8 , KEY_F8 }, 259 { "F9", AVC_F9 , KEY_F9 }, 260 { "RED", AVC_RED , KEY_RED }, 261 { "GREEN", AVC_GREEN , KEY_GREEN }, 262 { "BLUE", AVC_BLUE , KEY_BLUE }, 263 { "YELLOW", AVC_YELLOW , KEY_YELLOW }, 264 { NULL } 265 } }; 267  gboÞ—n ´oûss_queue ( gpoš‹r u£r_d©a ); 268  gboÞ—n avùp_·s¡hrough_r¥ ( avùp * £ssiÚ , ušt8_t code , 269 ušt8_t subun™ , ušt8_ˆ* Ý”ªds , 270 size_t Ý”ªd_couÁ , * u£r_d©a ); 272  $£nd_ev’t ( fd , ušt16_t ty³ , ušt16_ˆ code , št32_t v®ue ) 274  ušput_ev’t ev’t ; 275  ”r ; 277 `mem£t (& ev’t , 0, (event)); 278 ev’t . ty³ =ype; 279 ev’t . code = code; 280 ev’t . v®ue = value; 283 ”r = `wr™e ( fd , & ev’t , (event)); 284 }  ”r < 0 && ”ºo =ð EINTR ); 286 ià( ”r < 0) { 287 ”r = - ”ºo ; 288 `”rÜ ("£nd_ev’t: % (%d)", `¡»¼Ü (- ”r ), -err); 291  ”r ; 292 } } 294  $£nd_key ( fd , ušt16_t key ,  ´es£d ) 296 `£nd_ev’t ( fd , EV_KEY , key , ´es£d ); 297 `£nd_ev’t ( fd , EV_SYN , SYN_REPORT , 0); 298 } } 300  gboÞ—n $auto_»Ëa£ ( gpoš‹r u£r_d©a ) 302  avùp * £ssiÚ = u£r_d©a ; 304 £ssiÚ -> key . tim” = 0; 306 `DBG ("AV/C: key…ressimeout"); 308 `£nd_key ( £ssiÚ -> ušput , sessiÚ-> key . Ý , 0); 310  FALSE ; 311 } } 313  ssize_t $hªdË_·Ãl_·s¡hrough ( avùp * £ssiÚ , 314 ušt8_t Œª§ùiÚ , ušt8_ˆ* code , 315 ušt8_t * subun™ , ušt8_ˆ* Ý”ªds , 316 size_t Ý”ªd_couÁ , * u£r_d©a ) 318  avùp_·s¡hrough_hªdËr * hªdËr = £ssiÚ ->handler; 319 cÚ¡ * ¡©us ; 320  ´es£d , i ; 322 ià(* code !ð AVC_CTYPE_CONTROL || * subun™ !ð AVC_SUBUNIT_PANEL ) { 323 * code = AVC_CTYPE_REJECTED ; 324  Ý”ªd_couÁ ; 327 ià( Ý”ªd_couÁ == 0) 328  dÚe ; 330 ià( Ý”ªds [0] & 0x80) { 331 ¡©us = "released"; 332 ´es£d = 0; 334 ¡©us = "pressed"; 335 ´es£d = 1; 338 ià( £ssiÚ -> key . tim” =ð0 && hªdËr !ð NULL ) { 339 ià( hªdËr -> `cb ( £ssiÚ , Ý”ªds [0] & 0x7F, 340 ´es£d , hªdËr -> u£r_d©a )) 341  dÚe ; 344 ià( £ssiÚ -> ušput < 0) { 345 `DBG ("AV/C: uinput‚ot initialized"); 346 * code = AVC_CTYPE_NOT_IMPLEMENTED ; 350  i = 0; key_m­ [i]. Çme !ð NULL ; i++) { 351 ušt8_t key_quœks ; 353 ià(( Ý”ªds [0] & 0x7Fè!ð key_m­ [ i ]. avc ) 356 `DBG ("AV/C: % %s", key_m­ [ i ]. Çme , ¡©us ); 358 key_quœks = £ssiÚ ->key_quœks[ key_m­ [ i ]. avc ]; 360 ià( key_quœks & QUIRK_NO_RELEASE ) { 361 ià(! ´es£d ) { 362 `DBG ("AV/C: Ignoring„elease"); 366 `DBG ("AV/C:reating key…ress‡s…ress +„elease"); 367 `£nd_key ( £ssiÚ -> ušput , key_m­ [ i ].uinput, 1); 368 `£nd_key ( £ssiÚ -> ušput , key_m­ [ i ].uinput, 0); 372 ià( ´es£d ) { 373 ià( £ssiÚ -> key . tim” > 0) { 374 `g_sourû_»move ( £ssiÚ -> key . tim” ); 375 `£nd_key ( £ssiÚ -> ušput , sessiÚ-> key . Ý , 0); 378 £ssiÚ -> key . Ý = key_m­ [ i ]. ušput ; 379 £ssiÚ -> key . tim” = `g_timeout_add_£cÚds ( 380 AVC_PRESS_TIMEOUT , 381 auto_»Ëa£ , 382 £ssiÚ ); 383 } ià( £ssiÚ -> key . tim” > 0) { 384 `g_sourû_»move ( £ssiÚ -> key . tim” ); 385 £ssiÚ -> key . tim” = 0; 388 `£nd_key ( £ssiÚ -> ušput , key_m­ [ i ].ušput, ´es£d ); 392 ià( key_m­ [ i ]. Çme =ð NULL ) { 393 `DBG ("AV/C: unknown button 0x%02X %s", 394 Ý”ªds [0] & 0x7F, ¡©us ); 395 * code = AVC_CTYPE_NOT_IMPLEMENTED ; 396  Ý”ªd_couÁ ; 399 dÚe : 400 * code = AVC_CTYPE_ACCEPTED ; 401  Ý”ªd_couÁ ; 402 } } 404  ssize_t $hªdË_un™_šfo ( avùp * £ssiÚ , 405 ušt8_t Œª§ùiÚ , ušt8_ˆ* code , 406 ušt8_t * subun™ , ušt8_ˆ* Ý”ªds , 407 size_t Ý”ªd_couÁ , * u£r_d©a ) 409 ià(* code !ð AVC_CTYPE_STATUS ) { 410 * code = AVC_CTYPE_REJECTED ; 414 * code = AVC_CTYPE_STABLE ; 422 ià( Ý”ªd_couÁ >= 1) 423 Ý”ªds [0] = 0x07; 424 ià( Ý”ªd_couÁ >= 2) 425 Ý”ªds [1] = AVC_SUBUNIT_PANEL << 3; 427 `DBG ("replyo AVC_OP_UNITINFO"); 429  Ý”ªd_couÁ ; 430 } } 432  ssize_t $hªdË_subun™_šfo ( avùp * £ssiÚ , 433 ušt8_t Œª§ùiÚ , ušt8_ˆ* code , 434 ušt8_t * subun™ , ušt8_ˆ* Ý”ªds , 435 size_t Ý”ªd_couÁ , * u£r_d©a ) 437 ià(* code !ð AVC_CTYPE_STATUS ) { 438 * code = AVC_CTYPE_REJECTED ; 442 * code = AVC_CTYPE_STABLE ; 450 ià( Ý”ªd_couÁ >= 2) 451 Ý”ªds [1] = AVC_SUBUNIT_PANEL << 3; 453 `DBG ("replyo AVC_OP_SUBUNITINFO"); 455  Ý”ªd_couÁ ; 456 } } 458  avùp_pdu_hªdËr * $fšd_hªdËr ( GSLi¡ * li¡ , ušt8_t Ýcode ) 460 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 461  avùp_pdu_hªdËr * hªdËr = li¡ -> d©a ; 463 ià( hªdËr -> Ýcode == opcode) 464  hªdËr ; 467  NULL ; 468 } } 470  $³ndšg_de¡roy ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 472  avùp_³ndšg_»q * »q = d©a ; 474 ià( »q -> de¡roy ) 475 »q -> `de¡roy Ôeq-> d©a ); 477 ià( »q -> timeout > 0) 478 `g_sourû_»move ( »q -> timeout ); 480 `g_ä“ ( »q ); 481 } } 483  $avùp_chªÃl_de¡roy ( avùp_chªÃl * chª ) 485 `g_io_chªÃl_shutdown ( chª -> io , TRUE , NULL ); 486 `g_io_chªÃl_uÄef ( chª -> io ); 488 ià( chª -> w©ch ) 489 `g_sourû_»move ( chª -> w©ch ); 491 ià( chª -> p ) 492 `³ndšg_de¡roy ( chª -> p , NULL ); 494 ià( chª -> ´oûss_id > 0) 495 `g_sourû_»move ( chª -> ´oûss_id ); 497 ià( chª -> de¡roy ) 498 chª -> `de¡roy (chan); 500 `g_ä“ ( chª -> bufãr ); 501 `g_queue_fÜ—ch ( chª -> queue , ³ndšg_de¡roy , NULL ); 502 `g_queue_ä“ ( chª -> queue ); 503 `g_¦i¡_fÜ—ch ( chª -> ´oûs£d , ³ndšg_de¡roy , NULL ); 504 `g_¦i¡_ä“ ( chª -> ´oûs£d ); 505 `g_¦i¡_ä“_fuÎ ( chª -> hªdËrs , g_ä“ ); 506 `g_ä“ ( chª ); 507 } } 509  $avùp_£nd ( avùp_chªÃl * cÚŒÞ , ušt8_t Œª§ùiÚ , 510 ušt8_t ü , ušt8_ˆ code , 511 ušt8_t subun™ , ušt8_ˆ Ýcode , 512 cÚ¡  iovec * iov ,  iov_út ) 514  avùp_h—d” avùp ; 515  avc_h—d” avc ; 516  msghdr msg ; 517  sk , ”r = 0; 518  iovec pdu [ iov_út + 2]; 519  i ; 520 size_t Ën = ( avùp è+ ( avc ); 522 `DBG (""); 524 pdu [0]. iov_ba£ = & avùp ; 525 pdu [0]. iov_Ën = ( avùp ); 526 pdu [1]. iov_ba£ = & avc ; 527 pdu [1]. iov_Ën = ( avc ); 529  i = 0; i < iov_út ; i++) { 530 pdu [ i + 2]. iov_ba£ = iov [i].iov_base; 531 pdu [ i + 2]. iov_Ën = iov [i].iov_len; 532 Ën +ð iov [ i ]. iov_Ën ; 535 ià( cÚŒÞ -> omtu < Ën ) 536  - EOVERFLOW ; 538 sk = `g_io_chªÃl_unix_g‘_fd ( cÚŒÞ -> io ); 540 `mem£t (& avùp , 0, (avctp)); 542 avùp . Œª§ùiÚ =ransaction; 543 avùp . ·ck‘_ty³ = AVCTP_PACKET_SINGLE ; 544 avùp . ü = cr; 545 avùp . pid = `htÚs ( AV_REMOTE_SVCLASS_ID ); 547 `mem£t (& avc , 0, (avc)); 549 avc . code = code; 550 avc . subun™_ty³ = subun™ ; 551 avc . Ýcode = opcode; 553 `mem£t (& msg , 0, (msg)); 554 msg . msg_iov = pdu ; 555 msg . msg_iovËn = iov_út + 2; 557 ià( `£ndmsg ( sk , & msg , 0) < 0) 558 ”r = - ”ºo ; 560  ”r ; 561 } } 563  $avùp_browsšg_£nd ( avùp_chªÃl * browsšg , 564 ušt8_t Œª§ùiÚ , ušt8_ˆ ü , 565 cÚ¡  iovec * iov ,  iov_út ) 567  avùp_h—d” avùp ; 568  msghdr msg ; 569  iovec pdu [ iov_út + 1]; 570  sk , ”r = 0; 571  i ; 572 size_t Ën = ( avùp ); 574  i = 0; i < iov_út ; i++) { 575 pdu [ i + 1]. iov_ba£ = iov [i].iov_base; 576 pdu [ i + 1]. iov_Ën = iov [i].iov_len; 577 Ën +ð iov [ i ]. iov_Ën ; 580 pdu [0]. iov_ba£ = & avùp ; 581 pdu [0]. iov_Ën = ( avùp ); 583 ià( browsšg -> omtu < Ën ) 584  - EOVERFLOW ; 586 sk = `g_io_chªÃl_unix_g‘_fd ( browsšg -> io ); 588 `mem£t (& avùp , 0, (avctp)); 590 avùp . Œª§ùiÚ =ransaction; 591 avùp . ·ck‘_ty³ = AVCTP_PACKET_SINGLE ; 592 avùp . ü = cr; 593 avùp . pid = `htÚs ( AV_REMOTE_SVCLASS_ID ); 595 `mem£t (& msg , 0, (msg)); 596 msg . msg_iov = pdu ; 597 msg . msg_iovËn = iov_út + 1; 599 ià( `£ndmsg ( sk , & msg , 0) < 0) 600 ”r = - ”ºo ; 602  ”r ; 603 } } 605  $cÚŒÞ_»q_de¡roy (* d©a ) 607  avùp_cÚŒÞ_»q * »q = d©a ; 608  avùp_³ndšg_»q * p = »q ->p; 609  avùp * £ssiÚ = p -> chª ->session; 610  i ; 612 ià( p -> ”r =ð0 || »q -> func =ð NULL ) 613  dÚe ; 615 »q -> `func ( £ssiÚ , AVC_CTYPE_REJECTED ,„eq-> subun™ , NULL , 0, 616 »q -> u£r_d©a ); 618 dÚe : 619  i = 0; i < »q -> iov_út ; i++) 620 `g_ä“ ( »q -> iov [ i ]. iov_ba£ ); 622 `g_ä“ ( »q -> iov ); 623 `g_ä“ ( »q ); 624 } } 626  $browsšg_»q_de¡roy (* d©a ) 628  avùp_browsšg_»q * »q = d©a ; 629  avùp_³ndšg_»q * p = »q ->p; 630  avùp * £ssiÚ = p -> chª ->session; 631  i ; 633 ià( p -> ”r =ð0 || »q -> func =ð NULL ) 634  dÚe ; 636 »q -> `func ( £ssiÚ , NULL , 0,„eq-> u£r_d©a ); 638 dÚe : 639  i = 0; i < »q -> iov_út ; i++) 640 `g_ä“ ( »q -> iov [ i ]. iov_ba£ ); 642 `g_ä“ ( »q -> iov ); 643 `g_ä“ ( »q ); 644 } } 646  gboÞ—n $»q_timeout ( gpoš‹r u£r_d©a ) 648  avùp_chªÃl * chª = u£r_d©a ; 649  avùp_³ndšg_»q * p = chª ->p; 651 `DBG ("Œª§ùiÚ %u", p -> Œª§ùiÚ ); 653 p -> timeout = 0; 654 p -> ”r = - ETIMEDOUT ; 656 `³ndšg_de¡roy ( p , NULL ); 657 chª -> p = NULL ; 659 ià( chª -> ´oûss_id == 0) 660 chª -> ´oûss_id = `g_idË_add ( ´oûss_queue , chan); 662  FALSE ; 663 } } 665  $´oûss_cÚŒÞ (* d©a ) 667  avùp_cÚŒÞ_»q * »q = d©a ; 668  avùp_³ndšg_»q * p = »q ->p; 670  `avùp_£nd ( p -> chª ,…-> Œª§ùiÚ , AVCTP_COMMAND , »q -> code , 671 »q -> subun™ ,„eq-> Ý ,„eq-> iov ,„eq-> iov_út ); 672 } } 674  $´oûss_browsšg (* d©a ) 676  avùp_browsšg_»q * »q = d©a ; 677  avùp_³ndšg_»q * p = »q ->p; 679  `avùp_browsšg_£nd ( p -> chª ,…-> Œª§ùiÚ , AVCTP_COMMAND , 680 »q -> iov ,„eq-> iov_út ); 681 } } 683  gboÞ—n $´oûss_queue (* u£r_d©a ) 685  avùp_chªÃl * chª = u£r_d©a ; 686  avùp_³ndšg_»q * p = chª ->p; 688 chª -> ´oûss_id = 0; 690 ià( p !ð NULL ) 691  FALSE ; 693 ( p = `g_queue_pÝ_h—d ( chª -> queue ))) { 695 ià( p -> `´oûss Õ-> d©a ) == 0) 698 `³ndšg_de¡roy ( p , NULL ); 701 ià( p =ð NULL ) 702  FALSE ; 704 chª -> p =…; 705 p -> timeout = `g_timeout_add_£cÚds (2, »q_timeout , chª ); 707  FALSE ; 709 } } 711  $cÚŒÞ_»¥Ú£ ( avùp_chªÃl * cÚŒÞ , 712  avùp_h—d” * avùp , 713  avc_h—d” * avc , 714 ušt8_t * Ý”ªds , 715 size_t Ý”ªd_couÁ ) 717  avùp_³ndšg_»q * p = cÚŒÞ ->p; 718  avùp_cÚŒÞ_»q * »q ; 719 GSLi¡ * l ; 721 ià( p &&…-> Œª§ùiÚ =ð avùp ->transaction) { 722 cÚŒÞ -> ´oûs£d = `g_¦i¡_´•’d (cÚŒÞ->´oûs£d, p ); 724 ià( p -> timeout > 0) { 725 `g_sourû_»move ( p -> timeout ); 726 p -> timeout = 0; 729 cÚŒÞ -> p = NULL ; 731 ià( cÚŒÞ -> ´oûss_id == 0) 732 cÚŒÞ -> ´oûss_id = `g_idË_add ( ´oûss_queue , 733 cÚŒÞ ); 736  l = cÚŒÞ -> ´oûs£d ;†;† =†-> Ãxt ) { 737 p = l -> d©a ; 738 »q = p -> d©a ; 740 ià( p -> Œª§ùiÚ !ð avùp ->transaction) 743 ià( »q -> func &&„eq-> `func ( cÚŒÞ -> £ssiÚ , avc -> code , 744 avc -> subun™_ty³ , 745 Ý”ªds , Ý”ªd_couÁ , 746 »q -> u£r_d©a )) 749 cÚŒÞ -> ´oûs£d = `g_¦i¡_»move (cÚŒÞ->´oûs£d, p ); 750 `³ndšg_de¡roy ( p , NULL ); 754 } } 756  $browsšg_»¥Ú£ ( avùp_chªÃl * browsšg , 757  avùp_h—d” * avùp , 758 ušt8_t * Ý”ªds , 759 size_t Ý”ªd_couÁ ) 761  avùp_³ndšg_»q * p = browsšg ->p; 762  avùp_browsšg_»q * »q ; 763 GSLi¡ * l ; 765 ià( p &&…-> Œª§ùiÚ =ð avùp ->transaction) { 766 browsšg -> ´oûs£d = `g_¦i¡_´•’d (browsšg->´oûs£d, p ); 768 ià( p -> timeout > 0) { 769 `g_sourû_»move ( p -> timeout ); 770 p -> timeout = 0; 773 browsšg -> p = NULL ; 775 ià( browsšg -> ´oûss_id == 0) 776 browsšg -> ´oûss_id = `g_idË_add ( ´oûss_queue , 777 browsšg ); 780  l = browsšg -> ´oûs£d ;†;† =†-> Ãxt ) { 781 p = l -> d©a ; 782 »q = p -> d©a ; 784 ià( p -> Œª§ùiÚ !ð avùp ->transaction) 787 ià( »q -> func &&„eq-> `func ( browsšg -> £ssiÚ , Ý”ªds , 788 Ý”ªd_couÁ , »q -> u£r_d©a )) 791 browsšg -> ´oûs£d = `g_¦i¡_»move (browsšg->´oûs£d, p ); 792 `³ndšg_de¡roy ( p , NULL ); 796 } } 798  gboÞ—n $£ssiÚ_browsšg_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 799 gpoš‹r d©a ) 801  avùp * £ssiÚ = d©a ; 802  avùp_chªÃl * browsšg = £ssiÚ ->browsing; 803 ušt8_t * buf = browsšg -> bufãr ; 804 ušt8_t * Ý”ªds ; 805  avùp_h—d” * avùp ; 806  sock , »t , ·ck‘_size , Ý”ªd_couÁ ; 807  avùp_browsšg_pdu_hªdËr * hªdËr ; 809 ià( cÚd & ( G_IO_ERR | G_IO_HUP | G_IO_NVAL )) 810  çžed ; 812 sock = `g_io_chªÃl_unix_g‘_fd ( chª ); 814 »t = `»ad ( sock , buf , browsšg -> imtu ); 815 ià( »t <= 0) 816  çžed ; 818 ià( »t < AVCTP_HEADER_LENGTH ) { 819 `”rÜ ("Too small AVCTP…acket"); 820  çžed ; 823 avùp = ( avùp_h—d” *è buf ; 825 ià( avùp -> ·ck‘_ty³ !ð AVCTP_PACKET_SINGLE ) { 826 `”rÜ ("Invalid…acketype"); 827  çžed ; 830 Ý”ªds = buf + AVCTP_HEADER_LENGTH ; 831 »t -ð AVCTP_HEADER_LENGTH ; 832 Ý”ªd_couÁ = »t ; 834 ià( avùp -> ü =ð AVCTP_RESPONSE ) { 835 `browsšg_»¥Ú£ ( browsšg , avùp , Ý”ªds , Ý”ªd_couÁ ); 836  TRUE ; 839 ·ck‘_size = AVCTP_HEADER_LENGTH ; 840 avùp -> ü = AVCTP_RESPONSE ; 842 hªdËr = `g_¦i¡_Áh_d©a ( browsšg -> hªdËrs , 0); 843 ià( hªdËr =ð NULL ) { 844 `DBG ("handler‚ot found"); 847  £nd ; 850 »t = hªdËr -> `cb ( £ssiÚ , avùp -> Œª§ùiÚ , Ý”ªds , Ý”ªd_couÁ , 851 hªdËr -> u£r_d©a ); 852 ià( »t < 0) { 853 ià( »t =ð- EAGAIN ) 854  TRUE ; 855  çžed ; 858 ·ck‘_size +ð »t ; 860 £nd : 861 ià( ·ck‘_size != 0) { 862 »t = `wr™e ( sock , buf , ·ck‘_size ); 863 ià( »t !ð ·ck‘_size ) 864  çžed ; 867  TRUE ; 869 çžed : 870 `DBG ("AVCTP Browsing: disconnected"); 872 ià( £ssiÚ -> browsšg ) { 873 `avùp_chªÃl_de¡roy ( £ssiÚ -> browsšg ); 874 £ssiÚ -> browsšg = NULL ; 877  FALSE ; 878 } } 880  gboÞ—n $£ssiÚ_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , gpoš‹r d©a ) 882  avùp * £ssiÚ = d©a ; 883  avùp_chªÃl * cÚŒÞ = £ssiÚ ->control; 884 ušt8_t * buf = cÚŒÞ -> bufãr ; 885 ušt8_t * Ý”ªds , code , subun™ ; 886  avùp_h—d” * avùp ; 887  avc_h—d” * avc ; 888  ·ck‘_size , Ý”ªd_couÁ , sock ; 889  avùp_pdu_hªdËr * hªdËr ; 890 ssize_t »t ; 892 ià( cÚd & ( G_IO_ERR | G_IO_HUP | G_IO_NVAL )) 893  çžed ; 895 sock = `g_io_chªÃl_unix_g‘_fd ( chª ); 897 »t = `»ad ( sock , buf , cÚŒÞ -> imtu ); 898 ià( »t <= 0) 899  çžed ; 901 ià( »t < AVCTP_HEADER_LENGTH ) { 902 `”rÜ ("Too small AVCTP…acket"); 903  çžed ; 906 avùp = ( avùp_h—d” *è buf ; 908 »t -ð AVCTP_HEADER_LENGTH ; 909 ià( »t < AVC_HEADER_LENGTH ) { 910 `”rÜ ("Too small AVC…acket"); 911  çžed ; 914 avc = ( avc_h—d” *è( buf + AVCTP_HEADER_LENGTH ); 916 »t -ð AVC_HEADER_LENGTH ; 918 Ý”ªds = ( ušt8_t *è avc + AVC_HEADER_LENGTH ; 919 Ý”ªd_couÁ = »t ; 921 ià( avùp -> ü =ð AVCTP_RESPONSE ) { 922 `cÚŒÞ_»¥Ú£ ( cÚŒÞ , avùp , avc , Ý”ªds , Ý”ªd_couÁ ); 923  TRUE ; 926 ·ck‘_size = AVCTP_HEADER_LENGTH + AVC_HEADER_LENGTH ; 927 avùp -> ü = AVCTP_RESPONSE ; 929 ià( avùp -> ·ck‘_ty³ !ð AVCTP_PACKET_SINGLE ) { 930 avc -> code = AVC_CTYPE_NOT_IMPLEMENTED ; 931  dÚe ; 934 ià( avùp -> pid !ð `htÚs ( AV_REMOTE_SVCLASS_ID )) { 935 avùp -> id = 1; 936 ·ck‘_size = AVCTP_HEADER_LENGTH ; 937  dÚe ; 940 hªdËr = `fšd_hªdËr ( cÚŒÞ -> hªdËrs , avc -> Ýcode ); 941 ià(! hªdËr ) { 942 `DBG ("hªd˸nÙ found fÜ 0x%02x", avc -> Ýcode ); 943 avc -> code = AVC_CTYPE_REJECTED ; 944  dÚe ; 947 code = avc ->code; 948 subun™ = avc -> subun™_ty³ ; 950 »t = hªdËr -> `cb ( £ssiÚ , avùp -> Œª§ùiÚ , & code , 951 & subun™ , Ý”ªds , Ý”ªd_couÁ , 952 hªdËr -> u£r_d©a ); 953 ià( »t < 0) { 954 ià( »t =ð- EAGAIN ) 955  TRUE ; 956  çžed ; 959 ·ck‘_size +ð »t ; 960 avc -> code = code; 961 avc -> subun™_ty³ = subun™ ; 963 dÚe : 964 »t = `wr™e ( sock , buf , ·ck‘_size ); 965 ià( »t !ð ·ck‘_size ) 966  çžed ; 968  TRUE ; 970 çžed : 971 `DBG ("AVCTP sessiÚ %°gÙ discÚÃùed", £ssiÚ ); 972 `avùp_shutdown ( £ssiÚ ); 973  FALSE ; 974 } } 976  $ušput_ü—‹ (cÚ¡ * Çme ) 978  ušput_dev dev ; 979  fd , ”r , i ; 981 fd = `Ý’ ("/dev/ušput", O_RDWR ); 982 ià( fd < 0) { 983 fd = `Ý’ ("/dev/šput/ušput", O_RDWR ); 984 ià( fd < 0) { 985 fd = `Ý’ ("/dev/misc/ušput", O_RDWR ); 986 ià( fd < 0) { 987 ”r = - ”ºo ; 988 `”rÜ ("Can't open input device: %s (%d)", 989 `¡»¼Ü (- ”r ), -err); 990  ”r ; 995 `mem£t (& dev , 0, (dev)); 996 ià( Çme ) 997 `¡ºýy ( dev . Çme ,‚ame, UINPUT_MAX_NAME_SIZE - 1); 999 dev . id . bu¡y³ = BUS_BLUETOOTH ; 1000 dev . id . v’dÜ = 0x0000; 1001 dev . id . ´oduù = 0x0000; 1002 dev . id . v”siÚ = 0x0000; 1004 ià( `wr™e ( fd , & dev , (dev)) < 0) { 1005 ”r = - ”ºo ; 1006 `”rÜ ("Can't write device information: %s (%d)", 1007 `¡»¼Ü (- ”r ), -err); 1008 `þo£ ( fd ); 1009  ”r ; 1012 `ioùl ( fd , UI_SET_EVBIT , EV_KEY ); 1013 `ioùl ( fd , UI_SET_EVBIT , EV_REL ); 1014 `ioùl ( fd , UI_SET_EVBIT , EV_REP ); 1015 `ioùl ( fd , UI_SET_EVBIT , EV_SYN ); 1017  i = 0; key_m­ [i]. Çme !ð NULL ; i++) 1018 `ioùl ( fd , UI_SET_KEYBIT , key_m­ [ i ]. ušput ); 1020 ià( `ioùl ( fd , UI_DEV_CREATE , NULL ) < 0) { 1021 ”r = - ”ºo ; 1022 `”rÜ ("Can't create uinput device: %s (%d)", 1023 `¡»¼Ü (- ”r ), -err); 1024 `þo£ ( fd ); 1025  ”r ; 1028  fd ; 1029 } } 1031  $avùp_š™_ušput ( avùp * £ssiÚ , cÚ¡ * Çme , 1032 cÚ¡ * add»ss ) 1034 ià( `g_¡r_equ® ( Çme , "Nokia CK-20W")) { 1035 £ssiÚ -> key_quœks [ AVC_FORWARD ] |ð QUIRK_NO_RELEASE ; 1036 £ssiÚ -> key_quœks [ AVC_BACKWARD ] |ð QUIRK_NO_RELEASE ; 1037 £ssiÚ -> key_quœks [ AVC_PLAY ] |ð QUIRK_NO_RELEASE ; 1038 £ssiÚ -> key_quœks [ AVC_PAUSE ] |ð QUIRK_NO_RELEASE ; 1041 £ssiÚ -> ušput = `ušput_ü—‹ ( add»ss ); 1042 ià( £ssiÚ -> ušput < 0) { 1043 `”rÜ ("AVCTP: fažedØš™ ušpuˆfÜ %s", add»ss ); 1044  £ssiÚ -> ušput ; 1048 } } 1050  avùp_chªÃl * $avùp_chªÃl_ü—‹ ( avùp * £ssiÚ ,  fd , 1051 size_t imtu , size_ˆ omtu , 1052 avùp_de¡roy_cb_t de¡roy ) 1054  avùp_chªÃl * chª ; 1056 chª = `g_Ãw0 ( avùp_chªÃl , 1); 1057 chª -> £ssiÚ = session; 1058 chª -> io = `g_io_chªÃl_unix_Ãw ( fd ); 1059 chª -> queue = `g_queue_Ãw (); 1060 chª -> imtu = imtu; 1061 chª -> omtu = omtu; 1062 chª -> bufãr = `g_m®loc0 ( `MAX ( imtu , omtu )); 1063 chª -> de¡roy = destroy; 1065  chª ; 1066 } } 1068  $hªdËr_ä“ (* d©a ) 1070  avùp_browsšg_pdu_hªdËr * hªdËr = d©a ; 1072 ià( hªdËr -> de¡roy ) 1073 hªdËr -> `de¡roy (hªdËr-> u£r_d©a ); 1075 `g_ä“ ( d©a ); 1076 } } 1078  $avùp_de¡roy_browsšg (* d©a ) 1080  avùp_chªÃl * chª = d©a ; 1082 `g_¦i¡_ä“_fuÎ ( chª -> hªdËrs , hªdËr_ä“ ); 1084 chª -> hªdËrs = NULL ; 1085 } } 1087  avùp_³ndšg_»q * $³ndšg_ü—‹ ( avùp_chªÃl * chª , 1088 avùp_´oûss_cb ´oûss , 1089 * d©a , 1090 avùp_de¡roy_cb_t de¡roy ) 1092  avùp_³ndšg_»q * p ; 1093 GSLi¡ * l , * tmp ; 1095 ià(! chª -> ´oûs£d ) 1096  dÚe ; 1098 tmp = `g_¦i¡_cÝy ( chª -> ´oûs£d ); 1101  l = tmp ;†;† = `g_¦i¡_Ãxt (l)) { 1102  avùp_³ndšg_»q * »q = l -> d©a ; 1104 ià( »q -> Œª§ùiÚ =ð chª ->transaction) { 1105 chª -> Œª§ùiÚ ++; 1106 chª -> Œª§ùiÚ %= 16; 1107 tmp = `g_¦i¡_d–‘e_lšk Ñmp, l ); 1108 l = tmp ; 1112 `g_¦i¡_ä“ ( tmp ); 1114 dÚe : 1115 p = `g_Ãw0 ( avùp_³ndšg_»q , 1); 1116 p -> chª = chan; 1117 p -> Œª§ùiÚ = chª ->transaction; 1118 p -> ´oûss =…rocess; 1119 p -> d©a = data; 1120 p -> de¡roy = destroy; 1122 chª -> Œª§ùiÚ ++; 1123 chª -> Œª§ùiÚ %= 16; 1125  p ; 1126 } } 1128  $avùp_£nd_»q ( avùp * £ssiÚ , ušt8_t code , ušt8_ˆ subun™ , 1129 ušt8_t Ýcode , cÚ¡  iovec * iov ,  iov_út , 1130 avùp_r¥_cb func , * u£r_d©a ) 1132  avùp_chªÃl * cÚŒÞ = £ssiÚ ->control; 1133  avùp_³ndšg_»q * p ; 1134  avùp_cÚŒÞ_»q * »q ; 1135  iovec * pdu ; 1136  i ; 1138 ià( cÚŒÞ =ð NULL ) 1139  - ENOTCONN ; 1141 pdu = `g_Ãw0 ( iovec , iov_út ); 1143  i = 0; i < iov_út ; i++) { 1144 pdu [ i ]. iov_Ën = iov [i].iov_len; 1145 pdu [ i ]. iov_ba£ = `g_memdup ( iov [i].iov_ba£, iov[i]. iov_Ën ); 1148 »q = `g_Ãw0 ( avùp_cÚŒÞ_»q , 1); 1149 »q -> code = code; 1150 »q -> subun™ = subunit; 1151 »q -> Ý = Ýcode ; 1152 »q -> func = func; 1153 »q -> iov = pdu ; 1154 »q -> iov_út = iov_cnt; 1155 »q -> u£r_d©a = user_data; 1157 p = `³ndšg_ü—‹ ( cÚŒÞ , ´oûss_cÚŒÞ , »q , cÚŒÞ_»q_de¡roy ); 1159 »q -> p =…; 1161 `g_queue_push_ž ( cÚŒÞ -> queue , p ); 1163 ià( cÚŒÞ -> ´oûss_id == 0) 1164 cÚŒÞ -> ´oûss_id = `g_idË_add ( ´oûss_queue , control); 1167 } } 1169  $avùp_£nd_browsšg_»q ( avùp * £ssiÚ , 1170 cÚ¡  iovec * iov ,  iov_út , 1171 avùp_browsšg_r¥_cb func , * u£r_d©a ) 1173  avùp_chªÃl * browsšg = £ssiÚ ->browsing; 1174  avùp_³ndšg_»q * p ; 1175  avùp_browsšg_»q * »q ; 1176  iovec * pdu ; 1177  i ; 1179 ià( browsšg =ð NULL ) 1180  - ENOTCONN ; 1182 pdu = `g_Ãw0 ( iovec , iov_út ); 1184  i = 0; i < iov_út ; i++) { 1185 pdu [ i ]. iov_Ën = iov [i].iov_len; 1186 pdu [ i ]. iov_ba£ = `g_memdup ( iov [i].iov_ba£, iov[i]. iov_Ën ); 1189 »q = `g_Ãw0 ( avùp_browsšg_»q , 1); 1190 »q -> func = func; 1191 »q -> iov = pdu ; 1192 »q -> iov_út = iov_cnt; 1193 »q -> u£r_d©a = user_data; 1195 p = `³ndšg_ü—‹ ( browsšg , ´oûss_browsšg , »q , 1196 browsšg_»q_de¡roy ); 1198 »q -> p =…; 1200 `g_queue_push_ž ( browsšg -> queue , p ); 1203 ià( browsšg -> w©ch == 0) 1206 ià( browsšg -> ´oûss_id == 0) 1207 browsšg -> ´oûss_id = `g_idË_add ( ´oûss_queue , browsing); 1210 } } 1212  $avùp_£nd_browsšg ( avùp * £ssiÚ , ušt8_t Œª§ùiÚ , 1213 cÚ¡  iovec * iov ,  iov_út ) 1215  avùp_chªÃl * browsšg = £ssiÚ ->browsing; 1217 ià( browsšg =ð NULL ) 1218  - ENOTCONN ; 1220  `avùp_browsšg_£nd ( browsšg , Œª§ùiÚ , AVCTP_RESPONSE , 1221 iov , iov_út ); 1222 } } 1224 cÚ¡ * $Ý2¡r ( ušt8_t Ý ) 1226  i ; 1228  i = 0; key_m­ [i]. Çme !ð NULL ; i++) { 1229 ià(( Ý & 0x7Fè=ð key_m­ [ i ]. avc ) 1230  key_m­ [ i ]. Çme ; 1234 } } 1236  $avùp_·s¡hrough_´ess ( avùp * £ssiÚ , ušt8_t Ý , 1237 ušt8_t * ·¿ms , size_t ·¿ms_Ën ) 1239  iovec iov [2]; 1240  iov_út ; 1241 ušt8_t Ý”ªds [2]; 1243 `DBG ("%s", `Ý2¡r ( Ý )); 1245 iov [0]. iov_ba£ = Ý”ªds ; 1246 iov [0]. iov_Ën = ( Ý”ªds ); 1249 Ý”ªds [0] = Ý & 0x7f; 1251 ià( ·¿ms_Ën > 0) { 1252 iov [1]. iov_ba£ = ·¿ms ; 1253 iov [1]. iov_Ën = ·¿ms_Ën ; 1254 iov_út = 2; 1255 Ý”ªds [1] = ·¿ms_Ën ; 1257 iov_út = 1; 1258 Ý”ªds [1] = 0; 1261  `avùp_£nd_»q ( £ssiÚ , AVC_CTYPE_CONTROL , 1262 AVC_SUBUNIT_PANEL , AVC_OP_PASSTHROUGH , 1263 iov , iov_út , avùp_·s¡hrough_r¥ , NULL ); 1264 } } 1266  $avùp_·s¡hrough_»Ëa£ ( avùp * £ssiÚ , ušt8_t Ý , 1267 ušt8_t * ·¿ms , size_t ·¿ms_Ën ) 1269  iovec iov [2]; 1270  iov_út ; 1271 ušt8_t Ý”ªds [2]; 1273 `DBG ("%s", `Ý2¡r ( Ý )); 1275 iov [0]. iov_ba£ = Ý”ªds ; 1276 iov [0]. iov_Ën = ( Ý”ªds ); 1279 Ý”ªds [0] = Ý | 0x80; 1281 ià( ·¿ms_Ën > 0) { 1282 iov [1]. iov_ba£ = ·¿ms ; 1283 iov [1]. iov_Ën = ·¿ms_Ën ; 1284 iov_út = 2; 1285 Ý”ªds [1] = ·¿ms_Ën ; 1287 iov_út = 1; 1288 Ý”ªds [1] = 0; 1291  `avùp_£nd_»q ( £ssiÚ , AVC_CTYPE_CONTROL , 1292 AVC_SUBUNIT_PANEL , AVC_OP_PASSTHROUGH , 1293 iov , iov_út , NULL , NULL); 1294 } } 1296  gboÞ—n $»³©_timeout ( gpoš‹r u£r_d©a ) 1298  avùp * £ssiÚ = u£r_d©a ; 1300 `avùp_·s¡hrough_»Ëa£ ( £ssiÚ , sessiÚ-> key . Ý , sessiÚ->key. ·¿ms , 1301 £ssiÚ -> key . ·¿ms_Ën ); 1302 `avùp_·s¡hrough_´ess ( £ssiÚ , sessiÚ-> key . Ý , sessiÚ->key. ·¿ms , 1303 £ssiÚ -> key . ·¿ms_Ën ); 1305  TRUE ; 1306 } } 1308  $»Ëa£_´es£d ( avùp * £ssiÚ ) 1310 `avùp_·s¡hrough_»Ëa£ ( £ssiÚ , sessiÚ-> key . Ý , sessiÚ->key. ·¿ms , 1311 £ssiÚ -> key . ·¿ms_Ën ); 1313 ià( £ssiÚ -> key . tim” > 0) 1314 `g_sourû_»move ( £ssiÚ -> key . tim” ); 1316 £ssiÚ -> key . tim” = 0; 1317 } } 1319  boÞ $£t_´es£d ( avùp * £ssiÚ , ušt8_t Ý , ušt8_ˆ* ·¿ms , 1320 size_t ·¿ms_Ën ) 1322 ià( £ssiÚ -> key . tim” > 0) { 1323 ià( £ssiÚ -> key . Ý == op) 1324  TRUE ; 1325 `»Ëa£_´es£d ( £ssiÚ ); 1328 ià( Ý !ð AVC_FAST_FORWARD && o°!ð AVC_REWIND ) 1329  FALSE ; 1331 £ssiÚ -> key . Ý = op; 1332 £ssiÚ -> key . ·¿ms =…arams; 1333 £ssiÚ -> key . ·¿ms_Ën =…arams_len; 1334 £ssiÚ -> key . tim” = `g_timeout_add_£cÚds ( AVC_PRESS_TIMEOUT , 1335 »³©_timeout , 1336 £ssiÚ ); 1338  TRUE ; 1339 } } 1341  gboÞ—n $avùp_·s¡hrough_r¥ ( avùp * £ssiÚ , ušt8_t code , 1342 ušt8_t subun™ , ušt8_ˆ* Ý”ªds , 1343 size_t Ý”ªd_couÁ , * u£r_d©a ) 1345 ušt8_t * ·¿ms ; 1346 size_t ·¿ms_Ën ; 1348 `DBG ("cod0x%02x o³¿nd_couÁ %zd", code , Ý”ªd_couÁ ); 1350 ià( code !ð AVC_CTYPE_ACCEPTED ) 1351  FALSE ; 1353 ià( Ý”ªds [0] =ð AVC_VENDOR_UNIQUE ) { 1354 ·¿ms = & Ý”ªds [2]; 1355 ·¿ms_Ën = Ý”ªd_couÁ - 2; 1357 ·¿ms = NULL ; 1358 ·¿ms_Ën = 0; 1361 ià( `£t_´es£d ( £ssiÚ , Ý”ªds [0], ·¿ms , ·¿ms_Ën )) 1362  FALSE ; 1364 `avùp_·s¡hrough_»Ëa£ ( £ssiÚ , Ý”ªds [0], ·¿ms , ·¿ms_Ën ); 1366  FALSE ; 1367 } } 1369  $avùp_£nd_·s¡hrough ( avùp * £ssiÚ , ušt8_t Ý , ušt8_ˆ* ·¿ms , 1370 size_t ·¿ms_Ën ) 1373 ià( £ssiÚ -> key . tim” > 0) 1374 `»Ëa£_´es£d ( £ssiÚ ); 1376  `avùp_·s¡hrough_´ess ( £ssiÚ , Ý , ·¿ms , ·¿ms_Ën ); 1377 } } 1379  $avùp_£nd_v’dÜ ( avùp * £ssiÚ , ušt8_t Œª§ùiÚ , 1380 ušt8_t code , ušt8_ˆ subun™ , 1381 cÚ¡  iovec * iov ,  iov_út ) 1383  avùp_chªÃl * cÚŒÞ = £ssiÚ ->control; 1385 ià( cÚŒÞ =ð NULL ) 1386  - ENOTCONN ; 1388  `avùp_£nd ( cÚŒÞ , Œª§ùiÚ , AVCTP_RESPONSE , code , subun™ , 1389 AVC_OP_VENDORDEP , iov , iov_út ); 1390 } } 1392  $avùp_£nd_v’dÜ_»q ( avùp * £ssiÚ , ušt8_t code , ušt8_ˆ subun™ , 1393 cÚ¡  iovec * iov ,  iov_út , 1394 avùp_r¥_cb func , * u£r_d©a ) 1396  `avùp_£nd_»q ( £ssiÚ , code , subun™ , AVC_OP_VENDORDEP , iov , 1397 iov_út , func , u£r_d©a ); 1398 } } 1400  $avùp_»gi¡”_·s¡hrough_hªdËr ( avùp * £ssiÚ , 1401 avùp_·s¡hrough_cb cb , 1402 * u£r_d©a ) 1404  avùp_chªÃl * cÚŒÞ = £ssiÚ ->control; 1405  avùp_·s¡hrough_hªdËr * hªdËr ; 1406  id = 0; 1408 ià( cÚŒÞ =ð NULL || £ssiÚ -> hªdËr != NULL) 1411 hªdËr = `g_Ãw ( avùp_·s¡hrough_hªdËr , 1); 1412 hªdËr -> cb = cb; 1413 hªdËr -> u£r_d©a = user_data; 1414 hªdËr -> id = ++id; 1416 £ssiÚ -> hªdËr = handler; 1418  hªdËr -> id ; 1419 } } 1421 boÞ $avùp_uÄegi¡”_·s¡hrough_hªdËr ( avùp * £ssiÚ , 1422  id ) 1424 ià( £ssiÚ -> hªdËr =ð NULL ) 1425  çl£ ; 1427 ià( £ssiÚ -> hªdËr -> id != id) 1428  çl£ ; 1430 `g_ä“ ( £ssiÚ -> hªdËr ); 1431 £ssiÚ -> hªdËr = NULL ; 1432  Œue ; 1433 } } 1435  $avùp_»gi¡”_pdu_hªdËr ( avùp * £ssiÚ , ušt8_t Ýcode , 1436 avùp_cÚŒÞ_pdu_cb cb , 1437 * u£r_d©a ) 1439  avùp_chªÃl * cÚŒÞ = £ssiÚ ->control; 1440  avùp_pdu_hªdËr * hªdËr ; 1441  id = 0; 1443 ià( cÚŒÞ =ð NULL ) 1446 hªdËr = `fšd_hªdËr ( cÚŒÞ -> hªdËrs , Ýcode ); 1447 ià( hªdËr ) 1450 hªdËr = `g_Ãw ( avùp_pdu_hªdËr , 1); 1451 hªdËr -> Ýcode = opcode; 1452 hªdËr -> cb = cb; 1453 hªdËr -> u£r_d©a = user_data; 1454 hªdËr -> id = ++id; 1456 cÚŒÞ -> hªdËrs = `g_¦i¡_­³nd (cÚŒÞ->hªdËrs, hªdËr ); 1458  hªdËr -> id ; 1459 } } 1461  $avùp_»gi¡”_browsšg_pdu_hªdËr ( avùp * £ssiÚ , 1462 avùp_browsšg_pdu_cb cb , 1463 * u£r_d©a , 1464 avùp_de¡roy_cb_t de¡roy ) 1466  avùp_chªÃl * browsšg = £ssiÚ ->browsing; 1467  avùp_browsšg_pdu_hªdËr * hªdËr ; 1468  id = 0; 1470 ià( browsšg =ð NULL ) 1473 ià( browsšg -> hªdËrs !ð NULL ) 1476 hªdËr = `g_Ãw ( avùp_browsšg_pdu_hªdËr , 1); 1477 hªdËr -> cb = cb; 1478 hªdËr -> u£r_d©a = user_data; 1479 hªdËr -> id = ++id; 1480 hªdËr -> de¡roy = destroy; 1482 browsšg -> hªdËrs = `g_¦i¡_­³nd (browsšg->hªdËrs, hªdËr ); 1484  hªdËr -> id ; 1485 } } 1487 boÞ $avùp_uÄegi¡”_pdu_hªdËr ( avùp * £ssiÚ ,  id ) 1489  avùp_chªÃl * cÚŒÞ = £ssiÚ ->control; 1490 GSLi¡ * l ; 1492 ià(! cÚŒÞ ) 1493  çl£ ; 1495  l = cÚŒÞ -> hªdËrs ;†;† = `g_¦i¡_Ãxt (l)) { 1496  avùp_pdu_hªdËr * hªdËr = l -> d©a ; 1498 ià( hªdËr -> id != id) 1501 cÚŒÞ -> hªdËrs = `g_¦i¡_»move (cÚŒÞ->hªdËrs, hªdËr ); 1502 `g_ä“ ( hªdËr ); 1503  Œue ; 1506  çl£ ; 1507 } } 1509 boÞ $avùp_uÄegi¡”_browsšg_pdu_hªdËr ( avùp * £ssiÚ , 1510  id ) 1512  avùp_chªÃl * browsšg = £ssiÚ ->browsing; 1513 GSLi¡ * l ; 1515 ià( browsšg =ð NULL ) 1516  çl£ ; 1518  l = browsšg -> hªdËrs ;†;† = `g_¦i¡_Ãxt (l)) { 1519  avùp_browsšg_pdu_hªdËr * hªdËr = l -> d©a ; 1521 ià( hªdËr -> id != id) 1524 browsšg -> hªdËrs = `g_¦i¡_»move (browsing->handlers, 1525 hªdËr ); 1526 `g_ä“ ( hªdËr ); 1527  Œue ; 1530  çl£ ; 1531 } } 1533  avùp * $avùp_Ãw ( fd , size_t imtu , size_ˆ omtu , ušt16_t v”siÚ ) 1535  avùp * £ssiÚ ; 1536  avùp_chªÃl * cÚŒÞ ; 1537 GIOCÚd™iÚ cÚd = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL ; 1539 £ssiÚ = `g_Ãw0 ( avùp , 1); 1540 £ssiÚ -> v”siÚ = version; 1542 cÚŒÞ = `avùp_chªÃl_ü—‹ ( £ssiÚ , fd , imtu , omtu , NULL ); 1543 ià(! cÚŒÞ ) { 1544 `g_ä“ ( £ssiÚ ); 1545  NULL ; 1548 £ssiÚ -> ušput = -1; 1549 £ssiÚ -> cÚŒÞ = control; 1550 £ssiÚ -> ·s¡hrough_id = `avùp_»gi¡”_pdu_hªdËr (session, 1551 AVC_OP_PASSTHROUGH , 1552 hªdË_·Ãl_·s¡hrough , 1553 NULL ); 1554 £ssiÚ -> un™_id = `avùp_»gi¡”_pdu_hªdËr (session, 1555 AVC_OP_UNITINFO , 1556 hªdË_un™_šfo , 1557 NULL ); 1558 £ssiÚ -> subun™_id = `avùp_»gi¡”_pdu_hªdËr (session, 1559 AVC_OP_SUBUNITINFO , 1560 hªdË_subun™_šfo , 1561 NULL ); 1563 cÚŒÞ -> w©ch = `g_io_add_w©ch ( £ssiÚ ->cÚŒÞ-> io , cÚd , 1564 ( GIOFunc è £ssiÚ_cb , £ssiÚ ); 1566  £ssiÚ ; 1567 } } 1569  $avùp_cÚÃù_browsšg ( avùp * £ssiÚ ,  fd , size_t imtu , 1570 size_t omtu ) 1572  avùp_chªÃl * browsšg ; 1573 GIOCÚd™iÚ cÚd = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL ; 1575 ià( £ssiÚ -> browsšg ) 1576  - EISCONN ; 1578 browsšg = `avùp_chªÃl_ü—‹ ( £ssiÚ , fd , imtu , omtu , 1579 avùp_de¡roy_browsšg ); 1580 ià(! browsšg ) 1581  - EINVAL ; 1583 £ssiÚ -> browsšg = browsing; 1584 browsšg -> w©ch = `g_io_add_w©ch ( £ssiÚ ->browsšg-> io , cÚd , 1585 ( GIOFunc è £ssiÚ_browsšg_cb , £ssiÚ ); 1588 } } 1590  $avùp_£t_de¡roy_cb ( avùp * £ssiÚ , avùp_de¡roy_cb_t cb , 1591 * u£r_d©a ) 1593 £ssiÚ -> de¡roy = cb ; 1594 £ssiÚ -> d©a = u£r_d©a ; 1595 } } 1597  $avùp_shutdown ( avùp * £ssiÚ ) 1599 ià(! £ssiÚ ) 1602 ià( £ssiÚ -> browsšg ) 1603 `avùp_chªÃl_de¡roy ( £ssiÚ -> browsšg ); 1605 ià( £ssiÚ -> cÚŒÞ ) 1606 `avùp_chªÃl_de¡roy ( £ssiÚ -> cÚŒÞ ); 1608 ià( £ssiÚ -> de¡roy ) 1609 £ssiÚ -> `de¡roy (£ssiÚ-> d©a ); 1611 `g_ä“ ( £ssiÚ -> hªdËr ); 1613 ià( £ssiÚ -> key . tim” > 0) 1614 `g_sourû_»move ( £ssiÚ -> key . tim” ); 1616 ià( £ssiÚ -> ušput >= 0) { 1617 `DBG ("AVCTP: closing uinput"); 1619 `ioùl ( £ssiÚ -> ušput , UI_DEV_DESTROY ); 1620 `þo£ ( £ssiÚ -> ušput ); 1621 £ssiÚ -> ušput = -1; 1624 `g_ä“ ( £ssiÚ ); 1625 } } @android/avctp.h 25  #AVCTP_CONTROL_PSM 23 ) 26  #AVCTP_BROWSING_PSM 27 ) 28  #AVCTP_HEADER_LENGTH 3 ) 29  #AVC_HEADER_LENGTH 3 ) 31  #AVC_DATA_OFFSET AVCTP_HEADER_LENGTH + AVC_HEADER_LENGTH ) 32  #AVC_DATA_MTU 512 ) 35  #AVC_CTYPE_CONTROL 0x0 ) 36  #AVC_CTYPE_STATUS 0x1 ) 37  #AVC_CTYPE_NOTIFY 0x3 ) 38  #AVC_CTYPE_NOT_IMPLEMENTED 0x8 ) 39  #AVC_CTYPE_ACCEPTED 0x9 ) 40  #AVC_CTYPE_REJECTED 0xA ) 41  #AVC_CTYPE_STABLE 0xC ) 42  #AVC_CTYPE_CHANGED 0xD ) 43  #AVC_CTYPE_INTERIM 0xF ) 46  #AVC_OP_VENDORDEP 0x00 ) 47  #AVC_OP_UNITINFO 0x30 ) 48  #AVC_OP_SUBUNITINFO 0x31 ) 49  #AVC_OP_PASSTHROUGH 0x7c ) 52  #AVC_SUBUNIT_PANEL 0x09 ) 55  #AVC_SELECT 0x00 ) 56  #AVC_UP 0x01 ) 57  #AVC_DOWN 0x02 ) 58  #AVC_LEFT 0x03 ) 59  #AVC_RIGHT 0x04 ) 60  #AVC_ROOT_MENU 0x09 ) 61  #AVC_CONTENTS_MENU 0x0b ) 62  #AVC_FAVORITE_MENU 0x0c ) 63  #AVC_EXIT 0x0d ) 64  #AVC_ON_DEMAND_MENU 0x0e ) 65  #AVC_APPS_MENU 0x0f ) 66  #AVC_0 0x20 ) 67  #AVC_1 0x21 ) 68  #AVC_2 0x22 ) 69  #AVC_3 0x23 ) 70  #AVC_4 0x24 ) 71  #AVC_5 0x25 ) 72  #AVC_6 0x26 ) 73  #AVC_7 0x27 ) 74  #AVC_8 0x28 ) 75  #AVC_9 0x29 ) 76  #AVC_DOT 0x2a ) 77  #AVC_ENTER 0x2b ) 78  #AVC_CHANNEL_UP 0x30 ) 79  #AVC_CHANNEL_DOWN 0x31 ) 80  #AVC_CHANNEL_PREVIOUS 0x32 ) 81  #AVC_INPUT_SELECT 0x34 ) 82  #AVC_INFO 0x35 ) 83  #AVC_HELP 0x36 ) 84  #AVC_PAGE_UP 0x37 ) 85  #AVC_PAGE_DOWN 0x38 ) 86  #AVC_LOCK 0x3a ) 87  #AVC_POWER 0x40 ) 88  #AVC_VOLUME_UP 0x41 ) 89  #AVC_VOLUME_DOWN 0x42 ) 90  #AVC_MUTE 0x43 ) 91  #AVC_PLAY 0x44 ) 92  #AVC_STOP 0x45 ) 93  #AVC_PAUSE 0x46 ) 94  #AVC_RECORD 0x47 ) 95  #AVC_REWIND 0x48 ) 96  #AVC_FAST_FORWARD 0x49 ) 97  #AVC_EJECT 0x4a ) 98  #AVC_FORWARD 0x4b ) 99  #AVC_BACKWARD 0x4c ) 100  #AVC_LIST 0x4d ) 101  #AVC_F1 0x71 ) 102  #AVC_F2 0x72 ) 103  #AVC_F3 0x73 ) 104  #AVC_F4 0x74 ) 105  #AVC_F5 0x75 ) 106  #AVC_F6 0x76 ) 107  #AVC_F7 0x77 ) 108  #AVC_F8 0x78 ) 109  #AVC_F9 0x79 ) 110  #AVC_RED 0x7a ) 111  #AVC_GREEN 0x7b ) 112  #AVC_BLUE 0x7c ) 113  #AVC_YELLOW 0x7c ) 115  #AVC_VENDOR_UNIQUE 0x7e ) 117  #AVC_VENDOR_NEXT_GROUP 0x00 ) 118  #AVC_VENDOR_PREV_GROUP 0x01 ) 120  gavùp ; 122  $boÞ (* tavùp_·s¡hrough_cb è( tavùp * t£ssiÚ , 123 tušt8_t tÝ , tboÞ t´es£d , 124 * tu£r_d©a ); 125  $ssize_t (* tavùp_cÚŒÞ_pdu_cb è( tavùp * t£ssiÚ , 126 tušt8_t tŒª§ùiÚ , ušt8_ˆ* tcode , 127 tušt8_t * tsubun™ , ušt8_ˆ* tÝ”ªds , 128 tsize_t tÝ”ªd_couÁ , * tu£r_d©a ); 129  $gboÞ—n (* tavùp_r¥_cb è( tavùp * t£ssiÚ , tušt8_t tcode , 130 tušt8_t tsubun™ , ušt8_ˆ* tÝ”ªds , 131 tsize_t tÝ”ªd_couÁ , * tu£r_d©a ); 132  $gboÞ—n (* tavùp_browsšg_r¥_cb è( tavùp * t£ssiÚ , 133 tušt8_t * tÝ”ªds , tsize_t tÝ”ªd_couÁ , 134 * tu£r_d©a ); 135  $ssize_t (* tavùp_browsšg_pdu_cb è( tavùp * t£ssiÚ , 136 tušt8_t tŒª§ùiÚ , 137 tušt8_t * tÝ”ªds , tsize_t tÝ”ªd_couÁ , 138 * tu£r_d©a ); 140 (* tavùp_de¡roy_cb_t è(* tu£r_d©a ); 142  avùp * `avùp_Ãw ( fd , size_t imtu , size_ˆ omtu , ušt16_t v”siÚ ); 143  `avùp_£t_de¡roy_cb ( avùp * £ssiÚ , avùp_de¡roy_cb_t cb , 144 * u£r_d©a ); 146  `avùp_š™_ušput ( avùp * £ssiÚ , cÚ¡ * Çme , 147 cÚ¡ * add»ss ); 148  `avùp_cÚÃù_browsšg ( avùp * £ssiÚ ,  fd , size_t imtu , 149 size_t omtu ); 151  `avùp_shutdown ( avùp * £ssiÚ ); 153  `avùp_»gi¡”_·s¡hrough_hªdËr ( avùp * £ssiÚ , 154 avùp_·s¡hrough_cb cb , 155 * u£r_d©a ); 156 boÞ `avùp_uÄegi¡”_·s¡hrough_hªdËr ( avùp * £ssiÚ , 157  id ); 159  `avùp_»gi¡”_pdu_hªdËr ( avùp * £ssiÚ , ušt8_t Ýcode , 160 avùp_cÚŒÞ_pdu_cb cb , 161 * u£r_d©a ); 162 boÞ `avùp_uÄegi¡”_pdu_hªdËr ( avùp * £ssiÚ ,  id ); 164  `avùp_»gi¡”_browsšg_pdu_hªdËr ( avùp * £ssiÚ , 165 avùp_browsšg_pdu_cb cb , 166 * u£r_d©a , 167 avùp_de¡roy_cb_t de¡roy ); 168 boÞ `avùp_uÄegi¡”_browsšg_pdu_hªdËr ( avùp * £ssiÚ , 169  id ); 171  `avùp_£nd_·s¡hrough ( avùp * £ssiÚ , ušt8_t Ý , ušt8_ˆ* ·¿ms , 172 size_t ·¿ms_Ën ); 173  `avùp_£nd_v’dÜ ( avùp * £ssiÚ , ušt8_t Œª§ùiÚ , 174 ušt8_t code , ušt8_ˆ subun™ , 175 cÚ¡  iovec * iov ,  iov_út ); 176  `avùp_£nd_v’dÜ_»q ( avùp * £ssiÚ , ušt8_t code , ušt8_ˆ subun™ , 177 cÚ¡  iovec * iov ,  iov_út , 178 avùp_r¥_cb func , * u£r_d©a ); 179  `avùp_£nd_browsšg ( avùp * £ssiÚ , ušt8_t Œª§ùiÚ , 180 cÚ¡  iovec * iov ,  iov_út ); 181  `avùp_£nd_browsšg_»q ( avùp * £ssiÚ , 182 cÚ¡  iovec * iov ,  iov_út , 183 avùp_browsšg_r¥_cb func , * u£r_d©a ); @android/avdtp.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dlib.h > 30  ~<¡dio.h > 31  ~<¡dšt.h > 32  ~<¡dboÞ.h > 33  ~<”ºo.h > 34  ~ 35  ~ 36  ~<¡ršg.h > 37  ~ 38  ~<Ãtš‘/š.h > 40  ~ 42  ~"lib/blu‘oÙh.h " 43  ~"¤c/log.h " 44  ~"avd.h " 45  ~"../´ofžes/audio/a2dp-codecs.h " 47  #MAX_SEID 0x3E ) 49 #iâdeà MAX 50  #MAX ( x , y è((xè> (yè? (xè: (y)) ) 53  #AVDTP_DISCOVER 0x01 ) 54  #AVDTP_GET_CAPABILITIES 0x02 ) 55  #AVDTP_SET_CONFIGURATION 0x03 ) 56  #AVDTP_GET_CONFIGURATION 0x04 ) 57  #AVDTP_RECONFIGURE 0x05 ) 58  #AVDTP_OPEN 0x06 ) 59  #AVDTP_START 0x07 ) 60  #AVDTP_CLOSE 0x08 ) 61  #AVDTP_SUSPEND 0x09 ) 62  #AVDTP_ABORT 0x0A ) 63  #AVDTP_SECURITY_CONTROL 0x0B ) 64  #AVDTP_GET_ALL_CAPABILITIES 0x0C ) 65  #AVDTP_DELAY_REPORT 0x0D ) 67  #AVDTP_PKT_TYPE_SINGLE 0x00 ) 68  #AVDTP_PKT_TYPE_START 0x01 ) 69  #AVDTP_PKT_TYPE_CONTINUE 0x02 ) 70  #AVDTP_PKT_TYPE_END 0x03 ) 72  #AVDTP_MSG_TYPE_COMMAND 0x00 ) 73  #AVDTP_MSG_TYPE_GEN_REJECT 0x01 ) 74  #AVDTP_MSG_TYPE_ACCEPT 0x02 ) 75  #AVDTP_MSG_TYPE_REJECT 0x03 ) 77  #REQ_TIMEOUT 6 ) 78  #ABORT_TIMEOUT 2 ) 79  #DISCONNECT_TIMEOUT 1 ) 80  #START_TIMEOUT 1 ) 82 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 84  savd_commÚ_h—d” { 85 ušt8_t mmes§ge_ty³ :2; 86 ušt8_t m·ck‘_ty³ :2; 87 ušt8_t mŒª§ùiÚ :4; 88 } __©Œibu‹__ (( ·cked )); 90  savd_sšgË_h—d” { 91 ušt8_t mmes§ge_ty³ :2; 92 ušt8_t m·ck‘_ty³ :2; 93 ušt8_t mŒª§ùiÚ :4; 94 ušt8_t msigÇl_id :6; 95 ušt8_t mrç0 :2; 96 } __©Œibu‹__ (( ·cked )); 98  savd_¡¬t_h—d” { 99 ušt8_t mmes§ge_ty³ :2; 100 ušt8_t m·ck‘_ty³ :2; 101 ušt8_t mŒª§ùiÚ :4; 102 ušt8_t mno_of_·ck‘s ; 103 ušt8_t msigÇl_id :6; 104 ušt8_t mrç0 :2; 105 } __©Œibu‹__ (( ·cked )); 107  savd_cÚtšue_h—d” { 108 ušt8_t mmes§ge_ty³ :2; 109 ušt8_t m·ck‘_ty³ :2; 110 ušt8_t mŒª§ùiÚ :4; 111 } __©Œibu‹__ (( ·cked )); 113  s£id_šfo { 114 ušt8_t mrç0 :1; 115 ušt8_t mšu£ :1; 116 ušt8_t m£id :6; 117 ušt8_t mrç2 :3; 118 ušt8_t mty³ :1; 119 ušt8_t mmedŸ_ty³ :4; 120 } __©Œibu‹__ (( ·cked )); 122  s£id { 123 ušt8_t mrç0 :2; 124 ušt8_t m£id :6; 125 } __©Œibu‹__ (( ·cked )); 127 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 129  savd_commÚ_h—d” { 130 ušt8_t mŒª§ùiÚ :4; 131 ušt8_t m·ck‘_ty³ :2; 132 ušt8_t mmes§ge_ty³ :2; 133 } __©Œibu‹__ (( ·cked )); 135  savd_sšgË_h—d” { 136 ušt8_t mŒª§ùiÚ :4; 137 ušt8_t m·ck‘_ty³ :2; 138 ušt8_t mmes§ge_ty³ :2; 139 ušt8_t mrç0 :2; 140 ušt8_t msigÇl_id :6; 141 } __©Œibu‹__ (( ·cked )); 143  savd_¡¬t_h—d” { 144 ušt8_t mŒª§ùiÚ :4; 145 ušt8_t m·ck‘_ty³ :2; 146 ušt8_t mmes§ge_ty³ :2; 147 ušt8_t mno_of_·ck‘s ; 148 ušt8_t mrç0 :2; 149 ušt8_t msigÇl_id :6; 150 } __©Œibu‹__ (( ·cked )); 152  savd_cÚtšue_h—d” { 153 ušt8_t mŒª§ùiÚ :4; 154 ušt8_t m·ck‘_ty³ :2; 155 ušt8_t mmes§ge_ty³ :2; 156 } __©Œibu‹__ (( ·cked )); 158  s£id_šfo { 159 ušt8_t m£id :6; 160 ušt8_t mšu£ :1; 161 ušt8_t mrç0 :1; 162 ušt8_t mmedŸ_ty³ :4; 163 ušt8_t mty³ :1; 164 ušt8_t mrç2 :3; 165 } __©Œibu‹__ (( ·cked )); 167  s£id { 168 ušt8_t m£id :6; 169 ušt8_t mrç0 :2; 170 } __©Œibu‹__ (( ·cked )); 178  sdiscov”_»¥ { 179  £id_šfo m£ps [0]; 180 } __©Œibu‹__ (( ·cked )); 182  sg‘ÿp_»¥ { 183 ušt8_t mÿps [0]; 184 } __©Œibu‹__ (( ·cked )); 186  s¡¬t_»q { 187  £id mfœ¡_£id ; 188  £id mÙh”_£ids [0]; 189 } __©Œibu‹__ (( ·cked )); 191  ssu¥’d_»q { 192  £id mfœ¡_£id ; 193  £id mÙh”_£ids [0]; 194 } __©Œibu‹__ (( ·cked )); 196  s£id_»j { 197 ušt8_t m”rÜ ; 198 } __©Œibu‹__ (( ·cked )); 200  scÚf_»j { 201 ušt8_t mÿ‹gÜy ; 202 ušt8_t m”rÜ ; 203 } __©Œibu‹__ (( ·cked )); 205 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 207  s£id_»q { 208 ušt8_t mrç0 :2; 209 ušt8_t maý_£id :6; 210 } __©Œibu‹__ (( ·cked )); 212  s£tcÚf_»q { 213 ušt8_t mrç0 :2; 214 ušt8_t maý_£id :6; 215 ušt8_t mrç1 :2; 216 ušt8_t mšt_£id :6; 218 ušt8_t mÿps [0]; 219 } __©Œibu‹__ (( ·cked )); 221  s¡»am_»j { 222 ušt8_t mrç0 :2; 223 ušt8_t maý_£id :6; 224 ušt8_t m”rÜ ; 225 } __©Œibu‹__ (( ·cked )); 227  s»cÚf_»q { 228 ušt8_t mrç0 :2; 229 ušt8_t maý_£id :6; 231 ušt8_t m£rv_ÿp ; 232 ušt8_t m£rv_ÿp_Ën ; 234 ušt8_t mÿps [0]; 235 } __©Œibu‹__ (( ·cked )); 237  sd–ay_»q { 238 ušt8_t mrç0 :2; 239 ušt8_t maý_£id :6; 240 ušt16_t md–ay ; 241 } __©Œibu‹__ (( ·cked )); 243 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 245  s£id_»q { 246 ušt8_t maý_£id :6; 247 ušt8_t mrç0 :2; 248 } __©Œibu‹__ (( ·cked )); 250  s£tcÚf_»q { 251 ušt8_t maý_£id :6; 252 ušt8_t mrç0 :2; 253 ušt8_t mšt_£id :6; 254 ušt8_t mrç1 :2; 256 ušt8_t mÿps [0]; 257 } __©Œibu‹__ (( ·cked )); 259  s¡»am_»j { 260 ušt8_t maý_£id :6; 261 ušt8_t mrç0 :2; 262 ušt8_t m”rÜ ; 263 } __©Œibu‹__ (( ·cked )); 265  s»cÚf_»q { 266 ušt8_t maý_£id :6; 267 ušt8_t mrç0 :2; 269 ušt8_t m£rv_ÿp ; 270 ušt8_t m£rv_ÿp_Ën ; 272 ušt8_t mÿps [0]; 273 } __©Œibu‹__ (( ·cked )); 275  sd–ay_»q { 276 ušt8_t maý_£id :6; 277 ušt8_t mrç0 :2; 278 ušt16_t md–ay ; 279 } __©Œibu‹__ (( ·cked )); 285  sš_buf { 286 gboÞ—n maùive ; 287  mno_of_·ck‘s ; 288 ušt8_t mŒª§ùiÚ ; 289 ušt8_t mmes§ge_ty³ ; 290 ušt8_t msigÇl_id ; 291 ušt8_t mbuf [1024]; 292 ušt8_t md©a_size ; 295  s³ndšg_»q { 296 ušt8_t mŒª§ùiÚ ; 297 ušt8_t msigÇl_id ; 298 * md©a ; 299 size_t md©a_size ; 300  avd_¡»am * m¡»am ; 301 gušt mtimeout ; 302 gboÞ—n mcÞlided ; 305  savd_»mÙe_£p { 306 ušt8_t m£id ; 307 ušt8_t mty³ ; 308 ušt8_t mmedŸ_ty³ ; 309  avd_£rviû_ÿ·bž™y * mcodec ; 310 gboÞ—n md–ay_»pÜtšg ; 311 GSLi¡ * mÿps ; 312  avd_¡»am * m¡»am ; 315  savd_loÿl_£p { 316 avd_¡©e_t m¡©e ; 317  avd_¡»am * m¡»am ; 318  £id_šfo mšfo ; 319 ušt8_t mcodec ; 320 ušt32_t mvndcodec_v’dÜ ; 321 ušt16_t mvndcodec_codec ; 322 gboÞ—n md–ay_»pÜtšg ; 323 GSLi¡ * mÿps ; 324  avd_£p_šd * mšd ; 325  avd_£p_cfm * mcfm ; 326 * mu£r_d©a ; 329  s¡»am_ÿÎback { 330 avd_¡»am_¡©e_cb mcb ; 331 * mu£r_d©a ; 332  mid ; 335  sdiscov”_ÿÎback { 336  mid ; 337 avd_discov”_cb_t mcb ; 338 * mu£r_d©a ; 341  sdiscÚÃù_ÿÎback { 342  mid ; 343 avd_discÚÃù_cb_t mcb ; 344 * mu£r_d©a ; 347  savd_¡»am { 348 GIOChªÃl * mio ; 349 ušt16_t mimtu ; 350 ušt16_t momtu ; 351  avd * m£ssiÚ ; 352  avd_loÿl_£p * ml£p ; 353 ušt8_t mr£id ; 354 GSLi¡ * mÿps ; 355 GSLi¡ * mÿÎbacks ; 356  avd_£rviû_ÿ·bž™y * mcodec ; 357 gušt mio_id ; 358 gušt mtim” ; 360 gboÞ—n mÝ’_aý ; 361 gboÞ—n mþo£_št ; 362 gboÞ—n mabÜt_št ; 363 gušt m¡¬t_tim” ; 364 gboÞ—n md–ay_»pÜtšg ; 365 ušt16_t md–ay ; 366 gboÞ—n m¡¬tšg ; 371  savd { 372  m»f ; 374 ušt16_t mv”siÚ ; 376  avd_£rv” * m£rv” ; 378 gušt mauth_id ; 380 GIOChªÃl * mio ; 381 gušt mio_id ; 383 GSLi¡ * m£ps ; 385 GSLi¡ * m¡»ams ; 387 GSLi¡ * m»q_queue ; 388 GSLi¡ * m´io_queue ; 390  avd_¡»am * m³ndšg_Ý’ ; 392 ušt16_t mimtu ; 393 ušt16_t momtu ; 395  š_buf mš ; 397 * mbuf ; 399  discov”_ÿÎback * mdiscov” ; 400  ³ndšg_»q * m»q ; 402 GSLi¡ * mdiscÚÃù ; 404 boÞ mshutdown ; 407  GSLi¡ * gl£ps = NULL ; 409  £nd_»que¡ ( avd * £ssiÚ , gboÞ—n ´iÜ™y , 410  avd_¡»am * ¡»am , ušt8_t sigÇl_id , 411 * bufãr , size_t size ); 412  gboÞ—n avd_·r£_»¥ ( avd * £ssiÚ , 413  avd_¡»am * ¡»am , 414 ušt8_t Œª§ùiÚ , ušt8_ˆ sigÇl_id , 415 * buf ,  size ); 416  gboÞ—n avd_·r£_»j ( avd * £ssiÚ , 417  avd_¡»am * ¡»am , 418 ušt8_t Œª§ùiÚ , ušt8_ˆ sigÇl_id , 419 * buf ,  size ); 420  ´oûss_queue ( avd * £ssiÚ ); 421  avd_£p_£t_¡©e ( avd * £ssiÚ , 422  avd_loÿl_£p * £p , 423 avd_¡©e_t ¡©e ); 425 cÚ¡ * $avd_¡©e¡r ( avd_¡©e_t ¡©e ) 427  ¡©e ) { 428  AVDTP_STATE_IDLE : 430  AVDTP_STATE_CONFIGURED : 432  AVDTP_STATE_OPEN : 434  AVDTP_STATE_STREAMING : 436  AVDTP_STATE_CLOSING : 438  AVDTP_STATE_ABORTING : 443 } } 445  gboÞ—n $Œy_£nd ( sk , * d©a , size_t Ën ) 447  ”r ; 450 ”r = `£nd ( sk , d©a , Ën , 0); 451 }  ”r < 0 && ”ºo =ð EINTR ); 453 ià( ”r < 0) { 454 `”rÜ ("£nd: % (%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 455  FALSE ; 456 } ià(( size_t è ”r !ð Ën ) { 457 `”rÜ ("try_send: complete buffer‚ot sent (%d/%zu bytes)", 458 ”r , Ën ); 459  FALSE ; 462  TRUE ; 463 } } 465  gboÞ—n $avd_£nd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 466 ušt8_t mes§ge_ty³ , ušt8_ˆ sigÇl_id , 467 * d©a , size_t Ën ) 469  cÚt_äagm’ts , £Á ; 470  avd_¡¬t_h—d” ¡¬t ; 471  avd_cÚtšue_h—d” cÚt ; 472  sock ; 474 ià( £ssiÚ -> io =ð NULL ) { 475 `”rÜ ("avdtp_send: session is closed"); 476  FALSE ; 479 sock = `g_io_chªÃl_unix_g‘_fd ( £ssiÚ -> io ); 482 ià(( avd_sšgË_h—d” è+ Ën <ð £ssiÚ -> omtu ) { 483  avd_sšgË_h—d” sšgË ; 485 `mem£t (& sšgË , 0, (single)); 487 sšgË . Œª§ùiÚ =ransaction; 488 sšgË . ·ck‘_ty³ = AVDTP_PKT_TYPE_SINGLE ; 489 sšgË . mes§ge_ty³ = message_type; 490 sšgË . sigÇl_id = signal_id; 492 `memýy ( £ssiÚ -> buf , & sšgË , (single)); 493 `memýy ( £ssiÚ -> buf + ( sšgË ), d©a , Ën ); 495  `Œy_£nd ( sock , £ssiÚ -> buf , ( sšgË è+ Ën ); 499 ià( £ssiÚ -> omtu < ( ¡¬t )) { 500 `”rÜ ("Noƒnough spaceo fragment…acket"); 501  FALSE ; 505 cÚt_äagm’ts = ( Ën - ( £ssiÚ -> omtu - ( ¡¬t ))) / 506 ( £ssiÚ -> omtu - ( cÚt )) + 1; 508 `DBG ("%zu by‹ ¥l™ iÁØ%d f¿gm’ts", Ën , cÚt_äagm’ts + 1); 511 `mem£t (& ¡¬t , 0, (start)); 512 ¡¬t . Œª§ùiÚ =ransaction; 513 ¡¬t . ·ck‘_ty³ = AVDTP_PKT_TYPE_START ; 514 ¡¬t . mes§ge_ty³ = message_type; 515 ¡¬t . no_of_·ck‘s = cÚt_äagm’ts + 1; 516 ¡¬t . sigÇl_id = signal_id; 518 `memýy ( £ssiÚ -> buf , & ¡¬t , (start)); 519 `memýy ( £ssiÚ -> buf + ( ¡¬t ), d©a , 520 £ssiÚ -> omtu - ( ¡¬t )); 522 ià(! `Œy_£nd ( sock , £ssiÚ -> buf , sessiÚ-> omtu )) 523  FALSE ; 525 `DBG ("fœ¡…ack‘ w™h %zu by‹ £Á", £ssiÚ -> omtu - ( ¡¬t )); 527 £Á = £ssiÚ -> omtu - ( ¡¬t ); 530  £Á < Ën ) { 531  Ëá , to_cÝy ; 533 Ëá = Ën - £Á ; 534 ià( Ëá + ( cÚt è> £ssiÚ -> omtu ) { 535 cÚt . ·ck‘_ty³ = AVDTP_PKT_TYPE_CONTINUE ; 536 to_cÝy = £ssiÚ -> omtu - ( cÚt ); 537 `DBG ("£ndšg cÚtšuw™h %d by‹s", to_cÝy ); 539 cÚt . ·ck‘_ty³ = AVDTP_PKT_TYPE_END ; 540 to_cÝy = Ëá ; 541 `DBG ("£ndšgƒnd w™h %d by‹s", to_cÝy ); 544 cÚt . Œª§ùiÚ =ransaction; 545 cÚt . mes§ge_ty³ = message_type; 547 `memýy ( £ssiÚ -> buf , & cÚt , (cont)); 548 `memýy ( £ssiÚ -> buf + ( cÚt ), d©a + £Á , to_cÝy ); 550 ià(! `Œy_£nd ( sock , £ssiÚ -> buf , to_cÝy + ( cÚt ))) 551  FALSE ; 553 £Á +ð to_cÝy ; 556  TRUE ; 557 } } 559  $³ndšg_»q_ä“ (* d©a ) 561  ³ndšg_»q * »q = d©a ; 563 ià( »q -> timeout ) 564 `g_sourû_»move ( »q -> timeout ); 565 `g_ä“ ( »q -> d©a ); 566 `g_ä“ ( »q ); 567 } } 569  $þo£_¡»am ( avd_¡»am * ¡»am ) 571  sock ; 573 ià( ¡»am -> io =ð NULL ) 576 sock = `g_io_chªÃl_unix_g‘_fd ( ¡»am -> io ); 578 `shutdown ( sock , SHUT_RDWR ); 580 `g_io_chªÃl_shutdown ( ¡»am -> io , FALSE , NULL ); 582 `g_io_chªÃl_uÄef ( ¡»am -> io ); 583 ¡»am -> io = NULL ; 584 } } 586  gboÞ—n $¡»am_þo£_timeout ( gpoš‹r u£r_d©a ) 588  avd_¡»am * ¡»am = u£r_d©a ; 590 `DBG ("Timed out waiting for…eero closeheransport channel"); 592 ¡»am -> tim” = 0; 594 `þo£_¡»am ( ¡»am ); 596  FALSE ; 597 } } 599  gboÞ—n $¡»am_Ý’_timeout ( gpoš‹r u£r_d©a ) 601  avd_¡»am * ¡»am = u£r_d©a ; 603 `DBG ("Timed out waiting for…eero openheransport channel"); 605 ¡»am -> tim” = 0; 607 ¡»am -> £ssiÚ -> ³ndšg_Ý’ = NULL ; 609 `avd_abÜt ( ¡»am -> £ssiÚ , stream); 611  FALSE ; 612 } } 614  $avd_”rÜ_š™ ( avd_”rÜ * ”r , ušt8_t ÿ‹gÜy ,  id ) 616 ”r -> ÿ‹gÜy = category; 618 ià( ÿ‹gÜy =ð AVDTP_ERRNO ) 619 ”r ->”r. posix_”ºo = id ; 621 ”r ->”r. ”rÜ_code = id ; 622 } } 624 ušt8_t $avd_”rÜ_ÿ‹gÜy ( avd_”rÜ * ”r ) 626  ”r -> ÿ‹gÜy ; 627 } } 629  $avd_”rÜ_”rÜ_code ( avd_”rÜ * ”r ) 631 `as£¹ ( ”r -> ÿ‹gÜy !ð AVDTP_ERRNO ); 632  ”r ->”r. ”rÜ_code ; 633 } } 635  $avd_”rÜ_posix_”ºo ( avd_”rÜ * ”r ) 637 `as£¹ ( ”r -> ÿ‹gÜy =ð AVDTP_ERRNO ); 638  ”r ->”r. posix_”ºo ; 639 } } 641  avd_¡»am * $fšd_¡»am_by_r£id ( avd * £ssiÚ , 642 ušt8_t r£id ) 644 GSLi¡ * l ; 646  l = £ssiÚ -> ¡»ams ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 647  avd_¡»am * ¡»am = l -> d©a ; 649 ià( ¡»am -> r£id ==„seid) 650  ¡»am ; 653  NULL ; 654 } } 656  avd_»mÙe_£p * $fšd_»mÙe_£p ( GSLi¡ * £ps , ušt8_t £id ) 658 GSLi¡ * l ; 660  l = £ps ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 661  avd_»mÙe_£p * £p = l -> d©a ; 663 ià( £p -> £id == seid) 664  £p ; 667  NULL ; 668 } } 670  $¡»am_ä“ (* d©a ) 672  avd_¡»am * ¡»am = d©a ; 673  avd_»mÙe_£p * r£p ; 675 ¡»am -> l£p -> šfo . šu£ = 0; 676 ¡»am -> l£p ->¡»am = NULL ; 678 r£p = `fšd_»mÙe_£p ( ¡»am -> £ssiÚ -> £ps , sŒ—m-> r£id ); 679 ià( r£p ) 680 r£p -> ¡»am = NULL ; 682 ià( ¡»am -> tim” ) 683 `g_sourû_»move ( ¡»am -> tim” ); 685 ià( ¡»am -> ¡¬t_tim” > 0) 686 `g_sourû_»move ( ¡»am -> ¡¬t_tim” ); 688 ià( ¡»am -> io ) 689 `þo£_¡»am ( ¡»am ); 691 ià( ¡»am -> io_id ) 692 `g_sourû_»move ( ¡»am -> io_id ); 694 `g_¦i¡_ä“_fuÎ ( ¡»am -> ÿÎbacks , g_ä“ ); 695 `g_¦i¡_ä“_fuÎ ( ¡»am -> ÿps , g_ä“ ); 697 `g_ä“ ( ¡»am ); 698 } } 700  gboÞ—n $Œª¥Üt_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 701 gpoš‹r d©a ) 703  avd_¡»am * ¡»am = d©a ; 704  avd_loÿl_£p * £p = ¡»am -> l£p ; 706 ià( ¡»am -> þo£_št && £p -> cfm && s•->cfm-> þo£ ) 707 £p -> cfm -> `þo£ ( ¡»am -> £ssiÚ , s•, sŒ—m, NULL , 708 £p -> u£r_d©a ); 710 ià(!( cÚd & G_IO_NVAL )) 711 `þo£_¡»am ( ¡»am ); 713 ¡»am -> io_id = 0; 715 ià(! ¡»am -> abÜt_št ) 716 `avd_£p_£t_¡©e ( ¡»am -> £ssiÚ , £p , AVDTP_STATE_IDLE ); 718  FALSE ; 719 } } 721  $hªdË_Œª¥Üt_cÚÃù ( avd * £ssiÚ , GIOChªÃl * io , 722 ušt16_t imtu , ušt16_ˆ omtu ) 724  avd_¡»am * ¡»am = £ssiÚ -> ³ndšg_Ý’ ; 725  avd_loÿl_£p * £p = ¡»am -> l£p ; 727 £ssiÚ -> ³ndšg_Ý’ = NULL ; 729 ià( ¡»am -> tim” ) { 730 `g_sourû_»move ( ¡»am -> tim” ); 731 ¡»am -> tim” = 0; 734 ià( io =ð NULL ) 737 ià( ¡»am -> io =ð NULL ) 738 ¡»am -> io = `g_io_chªÃl_»f (io); 740 ¡»am -> omtu = omtu; 741 ¡»am -> imtu = imtu; 743 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_OPEN ); 745 ¡»am -> io_id = `g_io_add_w©ch ( io , G_IO_ERR | G_IO_HUP | G_IO_NVAL , 746 ( GIOFunc è Œª¥Üt_cb , ¡»am ); 747 } } 749  $³ndšg_»q_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 751 cÚ¡  ³ndšg_»q * »q = a ; 752 cÚ¡  avd_¡»am * ¡»am = b ; 754 ià( »q -> ¡»am == stream) 758 } } 760  $þ—nup_queue ( avd * £ssiÚ ,  avd_¡»am * ¡»am ) 762 GSLi¡ * l ; 763  ³ndšg_»q * »q ; 765 ( l = `g_¦i¡_fšd_cu¡om ( £ssiÚ -> ´io_queue , ¡»am , 766 ³ndšg_»q_cmp ))) { 767 »q = l -> d©a ; 768 `³ndšg_»q_ä“ ( »q ); 769 £ssiÚ -> ´io_queue = `g_¦i¡_»move (£ssiÚ->´io_queue, »q ); 772 ( l = `g_¦i¡_fšd_cu¡om ( £ssiÚ -> »q_queue , ¡»am , 773 ³ndšg_»q_cmp ))) { 774 »q = l -> d©a ; 775 `³ndšg_»q_ä“ ( »q ); 776 £ssiÚ -> »q_queue = `g_¦i¡_»move (£ssiÚ->»q_queue, »q ); 778 } } 780  $hªdË_uÇnsw”ed_»q ( avd * £ssiÚ , 781  avd_¡»am * ¡»am ) 783  ³ndšg_»q * »q ; 784  avd_loÿl_£p * l£p ; 785  avd_”rÜ ”r ; 787 ià( £ssiÚ -> »q -> sigÇl_id =ð AVDTP_ABORT ) { 789 `DBG ("handle_unanswered_req: Abort„eq,„eturning"); 790 £ssiÚ -> »q -> ¡»am = NULL ; 794 »q = £ssiÚ ->req; 795 £ssiÚ -> »q = NULL ; 797 `avd_”rÜ_š™ (& ”r , AVDTP_ERRNO , EIO ); 799 l£p = ¡»am ->lsep; 801  »q -> sigÇl_id ) { 802  AVDTP_RECONFIGURE : 803 `”rÜ ("No„eplyo Reconfigure„equest"); 804 ià( l£p &&†£p-> cfm &&†£p->cfm-> »cÚfigu» ) 805 l£p -> cfm -> `»cÚfigu» ( £ssiÚ ,†£p, ¡»am , & ”r , 806 l£p -> u£r_d©a ); 808  AVDTP_OPEN : 809 `”rÜ ("No„eplyo Open„equest"); 810 ià( l£p &&†£p-> cfm &&†£p->cfm-> Ý’ ) 811 l£p -> cfm -> `Ý’ ( £ssiÚ ,†£p, ¡»am , & ”r , 812 l£p -> u£r_d©a ); 814  AVDTP_START : 815 `”rÜ ("No„eplyo Start„equest"); 816 ià( l£p &&†£p-> cfm &&†£p->cfm-> ¡¬t ) 817 l£p -> cfm -> `¡¬t ( £ssiÚ ,†£p, ¡»am , & ”r , 818 l£p -> u£r_d©a ); 820  AVDTP_SUSPEND : 821 `”rÜ ("No„eplyo Suspend„equest"); 822 ià( l£p &&†£p-> cfm &&†£p->cfm-> su¥’d ) 823 l£p -> cfm -> `su¥’d ( £ssiÚ ,†£p, ¡»am , & ”r , 824 l£p -> u£r_d©a ); 826  AVDTP_CLOSE : 827 `”rÜ ("No„eplyo Close„equest"); 828 ià( l£p &&†£p-> cfm &&†£p->cfm-> þo£ ) 829 l£p -> cfm -> `þo£ ( £ssiÚ ,†£p, ¡»am , & ”r , 830 l£p -> u£r_d©a ); 832  AVDTP_SET_CONFIGURATION : 833 `”rÜ ("No„eplyo SetConfiguration„equest"); 834 ià( l£p &&†£p-> cfm &&†£p->cfm-> £t_cÚfigu¿tiÚ ) 835 l£p -> cfm -> `£t_cÚfigu¿tiÚ ( £ssiÚ ,†£p, ¡»am , 836 & ”r , l£p -> u£r_d©a ); 839 `³ndšg_»q_ä“ ( »q ); 840 } } 842  $avd_£p_£t_¡©e ( avd * £ssiÚ , 843  avd_loÿl_£p * £p , 844 avd_¡©e_t ¡©e ) 846  avd_¡»am * ¡»am = £p ->stream; 847 avd_¡©e_t Þd_¡©e ; 848  avd_”rÜ ”r , * ”r_±r = NULL ; 849 GSLi¡ * l ; 851 ià(! ¡»am ) { 852 `”rÜ ("Error changing sep state: stream‚ot‡vailable"); 856 ià( £p -> ¡©e == state) { 857 `avd_”rÜ_š™ (& ”r , AVDTP_ERRNO , EIO ); 858 `DBG ("¡»am s‹ chªgçžed: %s", `avd_¡»¼Ü (& ”r )); 859 ”r_±r = & ”r ; 861 ”r_±r = NULL ; 862 `DBG ("stream state changed: %s -> %s", 863 `avd_¡©e¡r ( £p -> ¡©e ), 864 `avd_¡©e¡r ( ¡©e )); 867 Þd_¡©e = £p -> ¡©e ; 868 £p -> ¡©e = state; 870  ¡©e ) { 871  AVDTP_STATE_CONFIGURED : 872 ià( £p -> šfo . ty³ =ð AVDTP_SEP_TYPE_SINK ) 873 `avd_d–ay_»pÜt ( £ssiÚ , ¡»am , sŒ—m-> d–ay ); 875  AVDTP_STATE_OPEN : 876 ¡»am -> ¡¬tšg = FALSE ; 878  AVDTP_STATE_STREAMING : 879 ià( ¡»am -> ¡¬t_tim” ) { 880 `g_sourû_»move ( ¡»am -> ¡¬t_tim” ); 881 ¡»am -> ¡¬t_tim” = 0; 883 ¡»am -> Ý’_aý = FALSE ; 885  AVDTP_STATE_CLOSING : 886  AVDTP_STATE_ABORTING : 887 ià( ¡»am -> ¡¬t_tim” ) { 888 `g_sourû_»move ( ¡»am -> ¡¬t_tim” ); 889 ¡»am -> ¡¬t_tim” = 0; 892  AVDTP_STATE_IDLE : 893 ià( ¡»am -> ¡¬t_tim” ) { 894 `g_sourû_»move ( ¡»am -> ¡¬t_tim” ); 895 ¡»am -> ¡¬t_tim” = 0; 897 ià( £ssiÚ -> ³ndšg_Ý’ =ð ¡»am ) 898 `hªdË_Œª¥Üt_cÚÃù ( £ssiÚ , NULL , 0, 0); 899 ià( £ssiÚ -> »q && sessiÚ->»q-> ¡»am == stream) 900 `hªdË_uÇnsw”ed_»q ( £ssiÚ , ¡»am ); 902 `þ—nup_queue ( £ssiÚ , ¡»am ); 908 l = ¡»am -> ÿÎbacks ; 909  l !ð NULL ) { 910  ¡»am_ÿÎback * cb = l -> d©a ; 911 l = `g_¦i¡_Ãxt (l); 912 cb -> `cb ( ¡»am , Þd_¡©e , ¡©e , ”r_±r , cb-> u£r_d©a ); 915 ià( ¡©e =ð AVDTP_STATE_IDLE && 916 `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am )) { 917 £ssiÚ -> ¡»ams = `g_¦i¡_»move (£ssiÚ->¡»ams, ¡»am ); 918 `¡»am_ä“ ( ¡»am ); 921 ià( £ssiÚ -> io && sessiÚ-> shutdown && sessiÚ-> ¡»ams =ð NULL ) { 922  sock = `g_io_chªÃl_unix_g‘_fd ( £ssiÚ -> io ); 923 `shutdown ( sock , SHUT_RDWR ); 925 } } 927  $fš®ize_discov”y ( avd * £ssiÚ ,  ”r ) 929  discov”_ÿÎback * discov” = £ssiÚ ->discover; 930  avd_”rÜ avd_”r ; 932 ià(! discov” ) 935 £ssiÚ -> discov” = NULL ; 937 `avd_”rÜ_š™ (& avd_”r , AVDTP_ERRNO , ”r ); 939 ià( discov” -> id > 0) 940 `g_sourû_»move ( discov” -> id ); 942 ià( discov” -> cb ) 943 discov” -> `cb ( £ssiÚ , sessiÚ-> £ps , ”r ? & avd_”r : NULL , 944 discov” -> u£r_d©a ); 945 `g_ä“ ( discov” ); 946 } } 948  $»Ëa£_¡»am ( avd_¡»am * ¡»am ,  avd * £ssiÚ ) 950  avd_loÿl_£p * £p = ¡»am -> l£p ; 952 ià( £p -> cfm && s•->cfm-> abÜt && 953 ( £p -> ¡©e !ð AVDTP_STATE_ABORTING || 954 ¡»am -> abÜt_št )) 955 £p -> cfm -> `abÜt ( £ssiÚ , s•, ¡»am , NULL , s•-> u£r_d©a ); 957 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_IDLE ); 958 } } 960  $£p_ä“ ( gpoš‹r d©a ) 962  avd_»mÙe_£p * £p = d©a ; 964 `g_¦i¡_ä“_fuÎ ( £p -> ÿps , g_ä“ ); 965 `g_ä“ ( £p ); 966 } } 968  $avd_ä“ (* d©a ) 970  avd * £ssiÚ = d©a ; 972 `DBG ("%p", £ssiÚ ); 974 `g_¦i¡_ä“_fuÎ ( £ssiÚ -> ¡»ams , ¡»am_ä“ ); 976 ià( £ssiÚ -> io ) { 977 `g_io_chªÃl_shutdown ( £ssiÚ -> io , FALSE , NULL ); 978 `g_io_chªÃl_uÄef ( £ssiÚ -> io ); 981 ià( £ssiÚ -> io_id ) { 982 `g_sourû_»move ( £ssiÚ -> io_id ); 983 £ssiÚ -> io_id = 0; 986 ià( £ssiÚ -> »q ) 987 `³ndšg_»q_ä“ ( £ssiÚ -> »q ); 989 `g_¦i¡_ä“_fuÎ ( £ssiÚ -> »q_queue , ³ndšg_»q_ä“ ); 990 `g_¦i¡_ä“_fuÎ ( £ssiÚ -> ´io_queue , ³ndšg_»q_ä“ ); 991 `g_¦i¡_ä“_fuÎ ( £ssiÚ -> £ps , £p_ä“ ); 992 `g_¦i¡_ä“_fuÎ ( £ssiÚ -> discÚÃù , g_ä“ ); 994 `g_ä“ ( £ssiÚ -> buf ); 996 `g_ä“ ( £ssiÚ ); 997 } } 999  $´oûss_discÚÃù (* d©a ) 1001  discÚÃù_ÿÎback * ÿÎback = d©a ; 1003 ÿÎback -> `cb (ÿÎback-> u£r_d©a ); 1005 `g_ä“ ( ÿÎback ); 1006 } } 1008  $cÚÃùiÚ_lo¡ ( avd * £ssiÚ ,  ”r ) 1010 `DBG ("DiscÚÃùed: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 1012 `g_¦i¡_fÜ—ch ( £ssiÚ -> ¡»ams , ( GFunc è »Ëa£_¡»am , session); 1013 £ssiÚ -> ¡»ams = NULL ; 1015 `avd_»f ( £ssiÚ ); 1017 `fš®ize_discov”y ( £ssiÚ , ”r ); 1019 `g_¦i¡_ä“_fuÎ ( £ssiÚ -> discÚÃù , ´oûss_discÚÃù ); 1020 £ssiÚ -> discÚÃù = NULL ; 1022 `avd_uÄef ( £ssiÚ ); 1023 } } 1025  $avd_uÄef ( avd * £ssiÚ ) 1027 ià(! £ssiÚ ) 1030 £ssiÚ -> »f --; 1032 `DBG ("%p:„ef=%d", £ssiÚ , sessiÚ-> »f ); 1034 ià( £ssiÚ -> »f > 0) 1037 `fš®ize_discov”y ( £ssiÚ , ECONNABORTED ); 1039 `avd_ä“ ( £ssiÚ ); 1040 } } 1042  avd * $avd_»f ( avd * £ssiÚ ) 1044 £ssiÚ -> »f ++; 1046 `DBG ("%p:„ef=%d", £ssiÚ , sessiÚ-> »f ); 1048  £ssiÚ ; 1049 } } 1051  avd_loÿl_£p * $fšd_loÿl_£p_by_£id ( ušt8_t £id ) 1053 GSLi¡ * l ; 1055  l = l£ps ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 1056  avd_loÿl_£p * £p = l -> d©a ; 1058 ià( £p -> šfo . £id == seid) 1059  £p ; 1062  NULL ; 1063 } } 1065  avd_»mÙe_£p * $avd_fšd_»mÙe_£p ( avd * £ssiÚ , 1066  avd_loÿl_£p * l£p ) 1068 GSLi¡ * l ; 1070 ià( l£p -> šfo . šu£ ) 1071  NULL ; 1073  l = £ssiÚ -> £ps ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 1074  avd_»mÙe_£p * £p = l -> d©a ; 1075  avd_£rviû_ÿ·bž™y * ÿp ; 1076  avd_medŸ_codec_ÿ·bž™y * codec_d©a ; 1079 ià( £p -> ty³ =ð l£p -> šfo .type) 1082 ià( £p -> medŸ_ty³ !ð l£p -> šfo .media_type) 1085 ià(! £p -> codec ) 1088 ÿp = £p -> codec ; 1089 codec_d©a = (*è ÿp -> d©a ; 1091 ià( codec_d©a -> medŸ_codec_ty³ !ð l£p -> codec ) 1095 ià( l£p -> codec =ð A2DP_CODEC_VENDOR ) { 1096 a2dp_v’dÜ_codec_t * vndcodec = 1097 (*è codec_d©a -> d©a ; 1099 ià( `btohl ( vndcodec -> v’dÜ_id è!ð l£p -> vndcodec_v’dÜ ) 1102 ià( `btohs ( vndcodec -> codec_id è!ð l£p -> vndcodec_codec ) 1106 ià( £p -> ¡»am =ð NULL ) 1107  £p ; 1110  NULL ; 1111 } } 1113  GSLi¡ * $ÿps_to_li¡ ( ušt8_t * d©a ,  size , 1114  avd_£rviû_ÿ·bž™y ** codec , 1115 gboÞ—n * d–ay_»pÜtšg ) 1117 GSLi¡ * ÿps ; 1118  ´oûs£d ; 1120 ià( d–ay_»pÜtšg ) 1121 * d–ay_»pÜtšg = FALSE ; 1123  ´oûs£d = 0, ÿps = NULL ;…roûs£d + 2 <ð size ;) { 1124  avd_£rviû_ÿ·bž™y * ÿp ; 1125 ušt8_t Ëngth , ÿ‹gÜy ; 1127 ÿ‹gÜy = d©a [0]; 1128 Ëngth = d©a [1]; 1130 ià( ´oûs£d + 2 + Ëngth > size ) { 1131 `”rÜ ("Invalid capability data in getcap„esp"); 1135 ÿp = `g_m®loc (( avd_£rviû_ÿ·bž™y ) + 1136 Ëngth ); 1137 `memýy ( ÿp , d©a , 2 + Ëngth ); 1139 ´oûs£d +ð2 + Ëngth ; 1140 d©a +ð2 + Ëngth ; 1142 ÿps = `g_¦i¡_­³nd (ÿps, ÿp ); 1144 ià( ÿ‹gÜy =ð AVDTP_MEDIA_CODEC && 1145 Ëngth >= 1146 ( avd_medŸ_codec_ÿ·bž™y )) 1147 * codec = ÿp ; 1148 ià( ÿ‹gÜy =ð AVDTP_DELAY_REPORTING && d–ay_»pÜtšg ) 1149 * d–ay_»pÜtšg = TRUE ; 1152  ÿps ; 1153 } } 1155  gboÞ—n $avd_unknown_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1156 ušt8_t sigÇl_id ) 1158  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_GEN_REJECT , 1159 sigÇl_id , NULL , 0); 1160 } } 1162  gboÞ—n $avd_discov”_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1163 * buf ,  size ) 1165 GSLi¡ * l ; 1166  r¥_size , £p_couÁ , i ; 1167  £id_šfo * £ps ; 1168 gboÞ—n »t ; 1170 £p_couÁ = `g_¦i¡_Ëngth ( l£ps ); 1172 ià( £p_couÁ == 0) { 1173 ušt8_t ”r = AVDTP_NOT_SUPPORTED_COMMAND ; 1174  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1175 AVDTP_DISCOVER , & ”r , (err)); 1178 r¥_size = £p_couÁ * ( £id_šfo ); 1180 £ps = `g_Ãw0 ( £id_šfo , £p_couÁ ); 1182  l = l£ps , i = 0;† !ð NULL ;† =†-> Ãxt , i++) { 1183  avd_loÿl_£p * £p = l -> d©a ; 1185 `memýy (& £ps [ i ], & £p -> šfo , ( £id_šfo )); 1188 »t = `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1189 AVDTP_DISCOVER , £ps , r¥_size ); 1190 `g_ä“ ( £ps ); 1192  »t ; 1193 } } 1195  gboÞ—n $avd_g‘ÿp_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1196  £id_»q * »q ,  size , 1197 gboÞ—n g‘_®l ) 1199 GSLi¡ * l , * ÿps ; 1200  avd_loÿl_£p * £p = NULL ; 1201  r¥_size ; 1202 ušt8_t ”r , buf [1024], * ±r = buf; 1203 ušt8_t cmd ; 1205 cmd = g‘_®l ? AVDTP_GET_ALL_CAPABILITIES : AVDTP_GET_CAPABILITIES ; 1207 ià( size < ( £id_»q )) { 1208 ”r = AVDTP_BAD_LENGTH ; 1209  çžed ; 1212 £p = `fšd_loÿl_£p_by_£id ( »q -> aý_£id ); 1213 ià(! £p ) { 1214 ”r = AVDTP_BAD_ACP_SEID ; 1215  çžed ; 1218 ià(! £p -> šd -> `g‘_ÿ·bž™y ( £ssiÚ , s•, & ÿps , & ”r , 1219 £p -> u£r_d©a )) 1220  çžed ; 1222  l = ÿps , r¥_size = 0;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 1223  avd_£rviû_ÿ·bž™y * ÿp = l -> d©a ; 1225 ià( r¥_size + ÿp -> Ëngth + 2 > ( buf )) 1228 `memýy ( ±r , ÿp , c­-> Ëngth + 2); 1229 r¥_size +ð ÿp -> Ëngth + 2; 1230 ±r +ð ÿp -> Ëngth + 2; 1232 `g_ä“ ( ÿp ); 1235 ià( g‘_®l && £p -> d–ay_»pÜtšg ) { 1236 ±r [0] = AVDTP_DELAY_REPORTING ; 1237 ±r [1] = 0x00; 1238 r¥_size += 2; 1241 `g_¦i¡_ä“ ( ÿps ); 1243  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , cmd , 1244 buf , r¥_size ); 1246 çžed : 1247  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , cmd , 1248 & ”r , (err)); 1249 } } 1251  $£tcÚf_cb ( avd * £ssiÚ ,  avd_¡»am * ¡»am , 1252  avd_”rÜ * ”r ) 1254  cÚf_»j »j ; 1255  avd_loÿl_£p * £p ; 1257 ià( ”r !ð NULL ) { 1258 »j . ”rÜ = AVDTP_UNSUPPORTED_CONFIGURATION ; 1259 »j . ÿ‹gÜy = ”r ->”r. ”rÜ_code ; 1260 `avd_£nd ( £ssiÚ , sessiÚ-> š . Œª§ùiÚ , 1261 AVDTP_MSG_TYPE_REJECT , AVDTP_SET_CONFIGURATION , 1262 & »j , (rej)); 1266 ià(! `avd_£nd ( £ssiÚ , sessiÚ-> š . Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1267 AVDTP_SET_CONFIGURATION , NULL , 0)) { 1268 `¡»am_ä“ ( ¡»am ); 1272 £p = ¡»am -> l£p ; 1273 £p -> ¡»am = stream; 1274 £p -> šfo . šu£ = 1; 1275 £ssiÚ -> ¡»ams = `g_¦i¡_­³nd (£ssiÚ->¡»ams, ¡»am ); 1277 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_CONFIGURED ); 1278 } } 1280  gboÞ—n $avd_£tcÚf_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1281  £tcÚf_»q * »q ,  size ) 1283  cÚf_»j »j ; 1284  avd_loÿl_£p * £p ; 1285  avd_¡»am * ¡»am ; 1286 ušt8_t ”r , ÿ‹gÜy = 0x00; 1287 GSLi¡ * l ; 1289 ià( size < ( £tcÚf_»q )) { 1290 `”rÜ ("Too short getcap„equest"); 1291  FALSE ; 1294 £p = `fšd_loÿl_£p_by_£id ( »q -> aý_£id ); 1295 ià(! £p ) { 1296 ”r = AVDTP_BAD_ACP_SEID ; 1297  çžed ; 1300 ià( £p -> ¡»am ) { 1301 ”r = AVDTP_SEP_IN_USE ; 1302  çžed ; 1305 ¡»am = `g_Ãw0 ( avd_¡»am , 1); 1306 ¡»am -> £ssiÚ = session; 1307 ¡»am -> l£p = £p ; 1308 ¡»am -> r£id = »q -> št_£id ; 1309 ¡»am -> ÿps = `ÿps_to_li¡ ( »q ->caps, 1310 size - ( £tcÚf_»q ), 1311 & ¡»am -> codec , 1312 & ¡»am -> d–ay_»pÜtšg ); 1318  l = ¡»am -> ÿps ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 1319  avd_£rviû_ÿ·bž™y * ÿp = l -> d©a ; 1321 ià( ÿp -> ÿ‹gÜy =ð AVDTP_MEDIA_TRANSPORT && 1322 ÿp -> Ëngth != 0) { 1323 ”r = AVDTP_BAD_MEDIA_TRANSPORT_FORMAT ; 1324  çžed_¡»am ; 1328 ià( ¡»am -> d–ay_»pÜtšg && £ssiÚ -> v”siÚ < 0x0103) 1329 £ssiÚ -> v”siÚ = 0x0103; 1331 ià( £p -> šd && s•->šd-> £t_cÚfigu¿tiÚ ) { 1332 ià(! £p -> šd -> `£t_cÚfigu¿tiÚ ( £ssiÚ , s•, ¡»am , 1333 ¡»am -> ÿps , 1334 £tcÚf_cb , 1335 £p -> u£r_d©a )) { 1336 ”r = AVDTP_UNSUPPORTED_CONFIGURATION ; 1337 ÿ‹gÜy = 0x00; 1338  çžed_¡»am ; 1341 ià(! `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1342 AVDTP_SET_CONFIGURATION , NULL , 0)) { 1343 `¡»am_ä“ ( ¡»am ); 1344  FALSE ; 1347 £p -> ¡»am = stream; 1348 £p -> šfo . šu£ = 1; 1349 £ssiÚ -> ¡»ams = `g_¦i¡_­³nd (£ssiÚ->¡»ams, ¡»am ); 1351 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_CONFIGURED ); 1354  TRUE ; 1356 çžed_¡»am : 1357 `¡»am_ä“ ( ¡»am ); 1358 çžed : 1359 »j . ”rÜ = ”r ; 1360 »j . ÿ‹gÜy = category; 1361  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1362 AVDTP_SET_CONFIGURATION , & »j , (rej)); 1363 } } 1365  gboÞ—n $avd_g‘cÚf_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1366  £id_»q * »q ,  size ) 1368 GSLi¡ * l ; 1369  avd_loÿl_£p * £p = NULL ; 1370  r¥_size ; 1371 ušt8_t ”r ; 1372 ušt8_t buf [1024]; 1373 ušt8_t * ±r = buf ; 1375 ià( size < (è( £id_»q )) { 1376 `”rÜ ("Too short getconf„equest"); 1377  FALSE ; 1380 `mem£t ( buf , 0, (buf)); 1382 £p = `fšd_loÿl_£p_by_£id ( »q -> aý_£id ); 1383 ià(! £p ) { 1384 ”r = AVDTP_BAD_ACP_SEID ; 1385  çžed ; 1387 ià(! £p -> ¡»am || !£p->¡»am-> ÿps ) { 1388 ”r = AVDTP_UNSUPPORTED_CONFIGURATION ; 1389  çžed ; 1392  l = £p -> ¡»am -> ÿps , r¥_size = 0;†;† = `g_¦i¡_Ãxt (l)) { 1393  avd_£rviû_ÿ·bž™y * ÿp = l -> d©a ; 1395 ià( r¥_size + ÿp -> Ëngth + 2 > (è( buf )) 1398 `memýy ( ±r , ÿp , c­-> Ëngth + 2); 1399 r¥_size +ð ÿp -> Ëngth + 2; 1400 ±r +ð ÿp -> Ëngth + 2; 1403  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1404 AVDTP_GET_CONFIGURATION , buf , r¥_size ); 1406 çžed : 1407  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1408 AVDTP_GET_CONFIGURATION , & ”r , (err)); 1409 } } 1411  gboÞ—n $avd_»cÚf_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1412  £id_»q * »q ,  size ) 1414  cÚf_»j »j ; 1416 »j . ”rÜ = AVDTP_NOT_SUPPORTED_COMMAND ; 1417 »j . ÿ‹gÜy = 0x00; 1419  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1420 AVDTP_RECONFIGURE , & »j , (rej)); 1421 } } 1423  $check_£id_cÞlisiÚ ( ³ndšg_»q * »q , ušt8_t id ) 1425  £id_»q * £id = »q -> d©a ; 1427 ià( £id -> aý_£id =ð id ) 1428 »q -> cÞlided = TRUE ; 1429 } } 1431  $check_¡¬t_cÞlisiÚ ( ³ndšg_»q * »q , ušt8_t id ) 1433  ¡¬t_»q * ¡¬t = »q -> d©a ; 1434  £id *£id = & ¡¬t -> fœ¡_£id ; 1435  couÁ = 1 + »q -> d©a_size - ( ¡¬t_»q ); 1436  i ; 1438  i = 0; i < couÁ ; i++, £id ++) { 1439 ià( £id ->£id =ð id ) { 1440 »q -> cÞlided = TRUE ; 1444 } } 1446  $check_su¥’d_cÞlisiÚ ( ³ndšg_»q * »q , ušt8_t id ) 1448  su¥’d_»q * su¥’d = »q -> d©a ; 1449  £id *£id = & su¥’d -> fœ¡_£id ; 1450  couÁ = 1 + »q -> d©a_size - ( su¥’d_»q ); 1451  i ; 1453  i = 0; i < couÁ ; i++, £id ++) { 1454 ià( £id ->£id =ð id ) { 1455 »q -> cÞlided = TRUE ; 1459 } } 1461  $avd_check_cÞlisiÚ ( avd * £ssiÚ , ušt8_t cmd , 1462  avd_¡»am * ¡»am ) 1464  ³ndšg_»q * »q = £ssiÚ ->req; 1466 ià( »q =ð NULL || (»q-> sigÇl_id !ð cmd && cmd !ð AVDTP_ABORT )) 1469 ià( cmd =ð AVDTP_ABORT ) 1470 cmd = »q -> sigÇl_id ; 1472  cmd ) { 1473  AVDTP_OPEN : 1474  AVDTP_CLOSE : 1475 `check_£id_cÞlisiÚ ( »q , ¡»am -> r£id ); 1477  AVDTP_START : 1478 `check_¡¬t_cÞlisiÚ ( »q , ¡»am -> r£id ); 1480  AVDTP_SUSPEND : 1481 `check_su¥’d_cÞlisiÚ ( »q , ¡»am -> r£id ); 1484 } } 1486  gboÞ—n $avd_Ý’_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1487  £id_»q * »q ,  size ) 1489  avd_loÿl_£p * £p ; 1490  avd_¡»am * ¡»am ; 1491 ušt8_t ”r ; 1493 ià( size < ( £id_»q )) { 1494 `”rÜ ("Too short‡bort„equest"); 1495  FALSE ; 1498 £p = `fšd_loÿl_£p_by_£id ( »q -> aý_£id ); 1499 ià(! £p ) { 1500 ”r = AVDTP_BAD_ACP_SEID ; 1501  çžed ; 1504 ià( £p -> ¡©e !ð AVDTP_STATE_CONFIGURED ) { 1505 ”r = AVDTP_BAD_STATE ; 1506  çžed ; 1509 ¡»am = £p ->stream; 1511 ià( £p -> šd && s•->šd-> Ý’ ) { 1512 ià(! £p -> šd -> `Ý’ ( £ssiÚ , s•, ¡»am , & ”r , 1513 £p -> u£r_d©a )) 1514  çžed ; 1517 `avd_check_cÞlisiÚ ( £ssiÚ , AVDTP_OPEN , ¡»am ); 1519 ià(! `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1520 AVDTP_OPEN , NULL , 0)) 1521  FALSE ; 1523 ¡»am -> Ý’_aý = TRUE ; 1524 £ssiÚ -> ³ndšg_Ý’ = ¡»am ; 1525 ¡»am -> tim” = `g_timeout_add_£cÚds ( REQ_TIMEOUT , 1526 ¡»am_Ý’_timeout , 1527 ¡»am ); 1529  TRUE ; 1531 çžed : 1532  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1533 AVDTP_OPEN , & ”r , (err)); 1534 } } 1536  gboÞ—n $avd_¡¬t_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1537  ¡¬t_»q * »q ,  size ) 1539  avd_loÿl_£p * £p ; 1540  avd_¡»am * ¡»am ; 1541  ¡»am_»j »j ; 1542  £id *seid; 1543 ušt8_t ”r , çžed_£id ; 1544  £id_couÁ , i ; 1546 ià( size < ( ¡¬t_»q )) { 1547 `”rÜ ("Too short start„equest"); 1548  FALSE ; 1551 £id_couÁ = 1 + size - ( ¡¬t_»q ); 1553 £id = & »q -> fœ¡_£id ; 1555  i = 0; i < £id_couÁ ; i++, £id ++) { 1556 çžed_£id = £id ->seid; 1558 £p = `fšd_loÿl_£p_by_£id ( »q -> fœ¡_£id . £id ); 1559 ià(! £p || !£p-> ¡»am ) { 1560 ”r = AVDTP_BAD_ACP_SEID ; 1561  çžed ; 1564 ¡»am = £p ->stream; 1567 ià( £p -> ¡©e !ð AVDTP_STATE_OPEN ) { 1568 ”r = AVDTP_BAD_STATE ; 1569  çžed ; 1571 ¡»am -> ¡¬tšg = TRUE ; 1573 ià( £p -> šd && s•->šd-> ¡¬t ) { 1574 ià(! £p -> šd -> `¡¬t ( £ssiÚ , s•, ¡»am , & ”r , 1575 £p -> u£r_d©a )) 1576  çžed ; 1579 `avd_check_cÞlisiÚ ( £ssiÚ , AVDTP_START , ¡»am ); 1581 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_STREAMING ); 1584  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1585 AVDTP_START , NULL , 0); 1587 çžed : 1588 `DBG ("Rejeùšg (%d)", ”r ); 1589 `mem£t (& »j , 0, (rej)); 1590 »j . aý_£id = çžed_£id ; 1591 »j . ”rÜ = ”r ; 1592  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1593 AVDTP_START , & »j , (rej)); 1594 } } 1596  gboÞ—n $avd_þo£_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1597  £id_»q * »q ,  size ) 1599  avd_loÿl_£p * £p ; 1600  avd_¡»am * ¡»am ; 1601 ušt8_t ”r ; 1603 ià( size < ( £id_»q )) { 1604 `”rÜ ("Too short close„equest"); 1605  FALSE ; 1608 £p = `fšd_loÿl_£p_by_£id ( »q -> aý_£id ); 1609 ià(! £p || !£p-> ¡»am ) { 1610 ”r = AVDTP_BAD_ACP_SEID ; 1611  çžed ; 1614 ià( £p -> ¡©e !ð AVDTP_STATE_OPEN && 1615 £p -> ¡©e !ð AVDTP_STATE_STREAMING ) { 1616 ”r = AVDTP_BAD_STATE ; 1617  çžed ; 1620 ¡»am = £p ->stream; 1622 ià( £p -> šd && s•->šd-> þo£ ) { 1623 ià(! £p -> šd -> `þo£ ( £ssiÚ , s•, ¡»am , & ”r , 1624 £p -> u£r_d©a )) 1625  çžed ; 1628 `avd_check_cÞlisiÚ ( £ssiÚ , AVDTP_CLOSE , ¡»am ); 1630 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_CLOSING ); 1632 ià(! `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1633 AVDTP_CLOSE , NULL , 0)) 1634  FALSE ; 1636 ¡»am -> tim” = `g_timeout_add_£cÚds ( REQ_TIMEOUT , 1637 ¡»am_þo£_timeout , 1638 ¡»am ); 1640  TRUE ; 1642 çžed : 1643  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1644 AVDTP_CLOSE , & ”r , (err)); 1645 } } 1647  gboÞ—n $avd_su¥’d_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1648  su¥’d_»q * »q ,  size ) 1650  avd_loÿl_£p * £p ; 1651  avd_¡»am * ¡»am ; 1652  ¡»am_»j »j ; 1653  £id *seid; 1654 ušt8_t ”r , çžed_£id ; 1655  £id_couÁ , i ; 1657 ià( size < ( su¥’d_»q )) { 1658 `”rÜ ("Too short suspend„equest"); 1659  FALSE ; 1662 £id_couÁ = 1 + size - ( su¥’d_»q ); 1664 £id = & »q -> fœ¡_£id ; 1666  i = 0; i < £id_couÁ ; i++, £id ++) { 1667 çžed_£id = £id ->seid; 1669 £p = `fšd_loÿl_£p_by_£id ( »q -> fœ¡_£id . £id ); 1670 ià(! £p || !£p-> ¡»am ) { 1671 ”r = AVDTP_BAD_ACP_SEID ; 1672  çžed ; 1675 ¡»am = £p ->stream; 1677 ià( £p -> ¡©e !ð AVDTP_STATE_STREAMING ) { 1678 ”r = AVDTP_BAD_STATE ; 1679  çžed ; 1682 ià( £p -> šd && s•->šd-> su¥’d ) { 1683 ià(! £p -> šd -> `su¥’d ( £ssiÚ , s•, ¡»am , & ”r , 1684 £p -> u£r_d©a )) 1685  çžed ; 1688 `avd_check_cÞlisiÚ ( £ssiÚ , AVDTP_SUSPEND , ¡»am ); 1690 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_OPEN ); 1693  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1694 AVDTP_SUSPEND , NULL , 0); 1696 çžed : 1697 `mem£t (& »j , 0, (rej)); 1698 »j . aý_£id = çžed_£id ; 1699 »j . ”rÜ = ”r ; 1700  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1701 AVDTP_SUSPEND , & »j , (rej)); 1702 } } 1704  gboÞ—n $avd_abÜt_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1705  £id_»q * »q ,  size ) 1707  avd_loÿl_£p * £p ; 1708 ušt8_t ”r ; 1709 gboÞ—n »t ; 1711 ià( size < ( £id_»q )) { 1712 `”rÜ ("Too short‡bort„equest"); 1713  FALSE ; 1716 £p = `fšd_loÿl_£p_by_£id ( »q -> aý_£id ); 1717 ià(! £p || !£p-> ¡»am ) 1718  TRUE ; 1720 ià( £p -> šd && s•->šd-> abÜt ) 1721 £p -> šd -> `abÜt ( £ssiÚ , s•, s•-> ¡»am , & ”r , 1722 £p -> u£r_d©a ); 1724 `avd_check_cÞlisiÚ ( £ssiÚ , AVDTP_ABORT , £p -> ¡»am ); 1726 »t = `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1727 AVDTP_ABORT , NULL , 0); 1728 ià( »t ) 1729 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_ABORTING ); 1731  »t ; 1732 } } 1734  gboÞ—n $avd_£cùl_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1735  £id_»q * »q ,  size ) 1737  `avd_unknown_cmd ( £ssiÚ , Œª§ùiÚ , AVDTP_SECURITY_CONTROL ); 1738 } } 1740  gboÞ—n $avd_d–ay»pÜt_cmd ( avd * £ssiÚ , 1741 ušt8_t Œª§ùiÚ , 1742  d–ay_»q * »q , 1743  size ) 1745  avd_loÿl_£p * £p ; 1746  avd_¡»am * ¡»am ; 1747 ušt8_t ”r ; 1749 ià( size < ( d–ay_»q )) { 1750 `”rÜ ("Too short delay„eport„equest"); 1751  FALSE ; 1754 £p = `fšd_loÿl_£p_by_£id ( »q -> aý_£id ); 1755 ià(! £p || !£p-> ¡»am ) { 1756 ”r = AVDTP_BAD_ACP_SEID ; 1757  çžed ; 1760 ¡»am = £p ->stream; 1762  £p -> ¡©e ) { 1763  AVDTP_STATE_IDLE : 1764  AVDTP_STATE_ABORTING : 1765  AVDTP_STATE_CLOSING : 1766 ”r = AVDTP_BAD_STATE ; 1767  çžed ; 1768  AVDTP_STATE_CONFIGURED : 1769  AVDTP_STATE_OPEN : 1770  AVDTP_STATE_STREAMING : 1775 ¡»am -> d–ay = `Áohs ( »q ->delay); 1777 ià( £p -> šd && s•->šd-> d–ay»pÜt ) { 1778 ià(! £p -> šd -> `d–ay»pÜt ( £ssiÚ , s•, ¡»am -> r£id , 1779 ¡»am -> d–ay , & ”r , 1780 £p -> u£r_d©a )) 1781  çžed ; 1784  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1785 AVDTP_DELAY_REPORT , NULL , 0); 1787 çžed : 1788  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1789 AVDTP_DELAY_REPORT , & ”r , (err)); 1790 } } 1792  gboÞ—n $avd_·r£_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1793 ušt8_t sigÇl_id , * buf ,  size ) 1795  sigÇl_id ) { 1796  AVDTP_DISCOVER : 1797 `DBG ("Received DISCOVER_CMD"); 1798  `avd_discov”_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 1799  AVDTP_GET_CAPABILITIES : 1800 `DBG ("Received GET_CAPABILITIES_CMD"); 1801  `avd_g‘ÿp_cmd ( £ssiÚ , Œª§ùiÚ , buf , size , 1802 FALSE ); 1803  AVDTP_GET_ALL_CAPABILITIES : 1804 `DBG ("Received GET_ALL_CAPABILITIES_CMD"); 1805  `avd_g‘ÿp_cmd ( £ssiÚ , Œª§ùiÚ , buf , size , TRUE ); 1806  AVDTP_SET_CONFIGURATION : 1807 `DBG ("Received SET_CONFIGURATION_CMD"); 1808  `avd_£tcÚf_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 1809  AVDTP_GET_CONFIGURATION : 1810 `DBG ("Received GET_CONFIGURATION_CMD"); 1811  `avd_g‘cÚf_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 1812  AVDTP_RECONFIGURE : 1813 `DBG ("Received RECONFIGURE_CMD"); 1814  `avd_»cÚf_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 1815  AVDTP_OPEN : 1816 `DBG ("Received OPEN_CMD"); 1817  `avd_Ý’_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 1818  AVDTP_START : 1819 `DBG ("Received START_CMD"); 1820  `avd_¡¬t_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 1821  AVDTP_CLOSE : 1822 `DBG ("Received CLOSE_CMD"); 1823  `avd_þo£_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 1824  AVDTP_SUSPEND : 1825 `DBG ("Received SUSPEND_CMD"); 1826  `avd_su¥’d_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 1827  AVDTP_ABORT : 1828 `DBG ("Received ABORT_CMD"); 1829  `avd_abÜt_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 1830  AVDTP_SECURITY_CONTROL : 1831 `DBG ("Received SECURITY_CONTROL_CMD"); 1832  `avd_£cùl_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 1833  AVDTP_DELAY_REPORT : 1834 `DBG ("Received DELAY_REPORT_CMD"); 1835  `avd_d–ay»pÜt_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 1837 `DBG ("Reûived unknowÀ»que¡ id %u", sigÇl_id ); 1838  `avd_unknown_cmd ( £ssiÚ , Œª§ùiÚ , sigÇl_id ); 1840 } } 1842 eavd_·r£_»suÉ { mPARSE_ERROR , mPARSE_FRAGMENT , mPARSE_SUCCESS }; 1844  avd_·r£_»suÉ $avd_·r£_d©a ( avd * £ssiÚ , 1845 * buf , size_t size ) 1847  avd_commÚ_h—d” * h—d” = buf ; 1848  avd_sšgË_h—d” * sšgË = (*è £ssiÚ -> buf ; 1849  avd_¡¬t_h—d” * ¡¬t = (*è £ssiÚ -> buf ; 1850 * ·ylßd ; 1851 gsize ·ylßd_size ; 1853  h—d” -> ·ck‘_ty³ ) { 1854  AVDTP_PKT_TYPE_SINGLE : 1855 ià( size < (* sšgË )) { 1856 `”rÜ ("Receivedoo small single…acket (%zu bytes)", 1857 size ); 1858  PARSE_ERROR ; 1860 ià( £ssiÚ -> š . aùive ) { 1861 `”rÜ ("SINGLE: Invalid AVDTP…acket fragmentation"); 1862  PARSE_ERROR ; 1865 ·ylßd = £ssiÚ -> buf + (* sšgË ); 1866 ·ylßd_size = size - (* sšgË ); 1868 £ssiÚ -> š . aùive = TRUE ; 1869 £ssiÚ -> š . d©a_size = 0; 1870 £ssiÚ -> š . no_of_·ck‘s = 1; 1871 £ssiÚ -> š . Œª§ùiÚ = h—d” ->transaction; 1872 £ssiÚ -> š . mes§ge_ty³ = h—d” ->message_type; 1873 £ssiÚ -> š . sigÇl_id = sšgË ->signal_id; 1876  AVDTP_PKT_TYPE_START : 1877 ià( size < (* ¡¬t )) { 1878 `”rÜ ("Receivedoo small start…acket (%zu bytes)", 1879 size ); 1880  PARSE_ERROR ; 1882 ià( £ssiÚ -> š . aùive ) { 1883 `”rÜ ("START: Invalid AVDTP…acket fragmentation"); 1884  PARSE_ERROR ; 1887 £ssiÚ -> š . aùive = TRUE ; 1888 £ssiÚ -> š . d©a_size = 0; 1889 £ssiÚ -> š . Œª§ùiÚ = h—d” ->transaction; 1890 £ssiÚ -> š . mes§ge_ty³ = h—d” ->message_type; 1891 £ssiÚ -> š . no_of_·ck‘s = ¡¬t ->no_of_packets; 1892 £ssiÚ -> š . sigÇl_id = ¡¬t ->signal_id; 1894 ·ylßd = £ssiÚ -> buf + (* ¡¬t ); 1895 ·ylßd_size = size - (* ¡¬t ); 1898  AVDTP_PKT_TYPE_CONTINUE : 1899 ià( size < ( avd_cÚtšue_h—d” )) { 1900 `”rÜ ("Receivedoo small continue…acket (%zu bytes)", 1901 size ); 1902  PARSE_ERROR ; 1904 ià(! £ssiÚ -> š . aùive ) { 1905 `”rÜ ("CONTINUE: Invalid AVDTP…acket fragmentation"); 1906  PARSE_ERROR ; 1908 ià( £ssiÚ -> š . Œª§ùiÚ !ð h—d” ->transaction) { 1909 `”rÜ ("Continueransaction id doesn't match"); 1910  PARSE_ERROR ; 1912 ià( £ssiÚ -> š . no_of_·ck‘s <= 1) { 1913 `”rÜ ("Too few continue…ackets"); 1914  PARSE_ERROR ; 1917 ·ylßd = £ssiÚ -> buf + ( avd_cÚtšue_h—d” ); 1918 ·ylßd_size = size - ( avd_cÚtšue_h—d” ); 1921  AVDTP_PKT_TYPE_END : 1922 ià( size < ( avd_cÚtšue_h—d” )) { 1923 `”rÜ ("Receivedoo smallƒnd…acket (%zu bytes)", 1924 size ); 1925  PARSE_ERROR ; 1927 ià(! £ssiÚ -> š . aùive ) { 1928 `”rÜ ("END: Invalid AVDTP…acket fragmentation"); 1929  PARSE_ERROR ; 1931 ià( £ssiÚ -> š . Œª§ùiÚ !ð h—d” ->transaction) { 1932 `”rÜ ("Endransaction id doesn't match"); 1933  PARSE_ERROR ; 1935 ià( £ssiÚ -> š . no_of_·ck‘s > 1) { 1936 `”rÜ ("Got‡nƒnd…acketooƒarly"); 1937  PARSE_ERROR ; 1940 ·ylßd = £ssiÚ -> buf + ( avd_cÚtšue_h—d” ); 1941 ·ylßd_size = size - ( avd_cÚtšue_h—d” ); 1945 `”rÜ ("Inv®id AVDTP…ack‘y³ 0x%02X", h—d” -> ·ck‘_ty³ ); 1946  PARSE_ERROR ; 1949 ià( £ssiÚ -> š . d©a_size + ·ylßd_size > 1950 ( £ssiÚ -> š . buf )) { 1951 `”rÜ ("Notƒnough incoming buffer space!"); 1952  PARSE_ERROR ; 1955 `memýy ( £ssiÚ -> š . buf + sessiÚ->š. d©a_size , ·ylßd , ·ylßd_size ); 1956 £ssiÚ -> š . d©a_size +ð ·ylßd_size ; 1958 ià( £ssiÚ -> š . no_of_·ck‘s > 1) { 1959 £ssiÚ -> š . no_of_·ck‘s --; 1960 `DBG ("Received AVDTP fragment. %do go", 1961 £ssiÚ -> š . no_of_·ck‘s ); 1962  PARSE_FRAGMENT ; 1965 £ssiÚ -> š . aùive = FALSE ; 1967  PARSE_SUCCESS ; 1968 } } 1970  gboÞ—n $£ssiÚ_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 1971 gpoš‹r d©a ) 1973  avd * £ssiÚ = d©a ; 1974  avd_commÚ_h—d” * h—d” ; 1975 ssize_t size ; 1976  fd ; 1978 `DBG (""); 1980 ià( cÚd & G_IO_NVAL ) { 1981 £ssiÚ -> io_id = 0; 1983  FALSE ; 1986 h—d” = (*è £ssiÚ -> buf ; 1988 ià( cÚd & ( G_IO_HUP | G_IO_ERR )) 1989  çžed ; 1991 fd = `g_io_chªÃl_unix_g‘_fd ( chª ); 1992 size = `»ad ( fd , £ssiÚ -> buf , sessiÚ-> imtu ); 1993 ià( size < 0) { 1994 `”rÜ ("IO Channel„eadƒrror"); 1995  çžed ; 1998 ià(( size_t è size < ( avd_commÚ_h—d” )) { 1999 `”rÜ ("ReûivedoØsm®È·ck‘ (%zu by‹s)", size ); 2000  çžed ; 2003  `avd_·r£_d©a ( £ssiÚ , sessiÚ-> buf , size )) { 2004  PARSE_ERROR : 2005  çžed ; 2006  PARSE_FRAGMENT : 2007  TRUE ; 2008  PARSE_SUCCESS : 2012 ià( £ssiÚ -> š . mes§ge_ty³ =ð AVDTP_MSG_TYPE_COMMAND ) { 2013 ià(! `avd_·r£_cmd ( £ssiÚ , sessiÚ-> š . Œª§ùiÚ , 2014 £ssiÚ -> š . sigÇl_id , 2015 £ssiÚ -> š . buf , 2016 £ssiÚ -> š . d©a_size )) { 2017 `”rÜ ("Unableo handle command. Disconnecting"); 2018  çžed ; 2021 ià( £ssiÚ -> »q && sessiÚ->»q-> cÞlided ) { 2022 `DBG ("Collision detected"); 2023  Ãxt ; 2026  TRUE ; 2029 ià( £ssiÚ -> »q =ð NULL ) { 2030 `”rÜ ("No…ending„equest, ignoring message"); 2031  TRUE ; 2034 ià( h—d” -> Œª§ùiÚ !ð £ssiÚ -> »q ->transaction) { 2035 `”rÜ ("Transaction†abel doesn't match"); 2036  TRUE ; 2039 ià( £ssiÚ -> š . sigÇl_id !ð£ssiÚ-> »q ->signal_id) { 2040 `”rÜ ("Response signal doesn't match"); 2041  TRUE ; 2044 `g_sourû_»move ( £ssiÚ -> »q -> timeout ); 2045 £ssiÚ -> »q -> timeout = 0; 2047  h—d” -> mes§ge_ty³ ) { 2048  AVDTP_MSG_TYPE_ACCEPT : 2049 ià(! `avd_·r£_»¥ ( £ssiÚ , sessiÚ-> »q -> ¡»am , 2050 £ssiÚ -> š . Œª§ùiÚ , 2051 £ssiÚ -> š . sigÇl_id , 2052 £ssiÚ -> š . buf , 2053 £ssiÚ -> š . d©a_size )) { 2054 `”rÜ ("Unableo…arse‡ccept„esponse"); 2055  çžed ; 2058  AVDTP_MSG_TYPE_REJECT : 2059 ià(! `avd_·r£_»j ( £ssiÚ , sessiÚ-> »q -> ¡»am , 2060 £ssiÚ -> š . Œª§ùiÚ , 2061 £ssiÚ -> š . sigÇl_id , 2062 £ssiÚ -> š . buf , 2063 £ssiÚ -> š . d©a_size )) { 2064 `”rÜ ("Unableo…arse„eject„esponse"); 2065  çžed ; 2068  AVDTP_MSG_TYPE_GEN_REJECT : 2069 `”rÜ ("Received‡ General Reject message"); 2072 `”rÜ ("UnknowÀmes§gty³ 0x%02X", h—d” -> mes§ge_ty³ ); 2076 Ãxt : 2077 `³ndšg_»q_ä“ ( £ssiÚ -> »q ); 2078 £ssiÚ -> »q = NULL ; 2080 `´oûss_queue ( £ssiÚ ); 2082  TRUE ; 2084 çžed : 2085 £ssiÚ -> io_id = 0; 2086 `cÚÃùiÚ_lo¡ ( £ssiÚ , EIO ); 2088  FALSE ; 2089 } } 2091  $£t_´iÜ™y ( fd ,  ´iÜ™y ) 2093  ”r ; 2095 ”r = `£tsockÝt ( fd , SOL_SOCKET , SO_PRIORITY , & ´iÜ™y , 2096 ( ´iÜ™y )); 2097 ià( ”r =ð0 || ”ºo =ð ENOTSOCK ) 2100 ”r = - ”ºo ; 2101 `”rÜ ("£tsockÝt(SO_PRIORITY): % (%d)", `¡»¼Ü (- ”r ), -err); 2103  ”r ; 2104 } } 2106  avd * $avd_Ãw ( fd , size_t imtu , size_ˆ omtu , ušt16_t v”siÚ ) 2108  avd * £ssiÚ ; 2109 GIOCÚd™iÚ cÚd = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL ; 2110  Ãw_fd ; 2112 Ãw_fd = `dup ( fd ); 2113 ià( Ãw_fd < 0) { 2114 `”rÜ ("dup(): % (%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 2115  NULL ; 2118 ià( `£t_´iÜ™y ( Ãw_fd , 6) < 0) 2119  NULL ; 2121 £ssiÚ = `g_Ãw0 ( avd , 1); 2122 £ssiÚ -> io = `g_io_chªÃl_unix_Ãw ( Ãw_fd ); 2123 £ssiÚ -> v”siÚ = version; 2124 £ssiÚ -> imtu = imtu; 2125 £ssiÚ -> omtu = omtu; 2126 £ssiÚ -> buf = `g_m®loc0 ( `MAX (£ssiÚ-> imtu , sessiÚ-> omtu )); 2135 £ssiÚ -> io_id = `g_io_add_w©ch_fuÎ (£ssiÚ-> io , G_PRIORITY_LOW , cÚd , 2136 ( GIOFunc è £ssiÚ_cb , £ssiÚ , 2137 NULL ); 2139  `avd_»f ( £ssiÚ ); 2140 } } 2142  $avd_add_discÚÃù_cb ( avd * £ssiÚ , 2143 avd_discÚÃù_cb_t cb , 2144 * u£r_d©a ) 2146  discÚÃù_ÿÎback * ÿÎback ; 2147  id = 0; 2149 ÿÎback = `g_Ãw0 ( discÚÃù_ÿÎback , 1); 2150 ÿÎback -> id = ++id; 2151 ÿÎback -> cb = cb; 2152 ÿÎback -> u£r_d©a = user_data; 2153 £ssiÚ -> discÚÃù = `g_¦i¡_­³nd (£ssiÚ->discÚÃù, ÿÎback ); 2155  id ; 2156 } } 2158 gboÞ—n $avd_»move_discÚÃù_cb ( avd * £ssiÚ ,  id ) 2160 GSLi¡ * l ; 2162  l = £ssiÚ -> discÚÃù ;†;† = `g_¦i¡_Ãxt (l)) { 2163  discÚÃù_ÿÎback * ÿÎback = l -> d©a ; 2165 ià( ÿÎback -> id != id) 2168 £ssiÚ -> discÚÃù = `g_¦i¡_»move (session->disconnect, 2169 ÿÎback ); 2170 `g_ä“ ( ÿÎback ); 2171  TRUE ; 2174  FALSE ; 2175 } } 2177  $avd_shutdown ( avd * £ssiÚ ) 2179 GSLi¡ * l ; 2180 boÞ abÜtšg = çl£ ; 2182 ià(! £ssiÚ -> io ) 2185  l = £ssiÚ -> ¡»ams ;†;† = `g_¦i¡_Ãxt (l)) { 2186  avd_¡»am * ¡»am = l -> d©a ; 2188 ià( ¡»am -> abÜt_št || 2189 `avd_þo£ ( £ssiÚ , ¡»am , TRUE ) == 0) 2190 abÜtšg = Œue ; 2193 ià( abÜtšg ) { 2195 £ssiÚ -> shutdown = Œue ; 2197  sock = `g_io_chªÃl_unix_g‘_fd ( £ssiÚ -> io ); 2199 `shutdown ( sock , SHUT_RDWR ); 2201 } } 2203  $queue_»que¡ ( avd * £ssiÚ ,  ³ndšg_»q * »q , 2204 gboÞ—n ´iÜ™y ) 2206 ià( ´iÜ™y ) 2207 £ssiÚ -> ´io_queue = `g_¦i¡_­³nd (£ssiÚ->´io_queue, »q ); 2209 £ssiÚ -> »q_queue = `g_¦i¡_­³nd (£ssiÚ->»q_queue, »q ); 2210 } } 2212  ušt8_t $»q_g‘_£id ( ³ndšg_»q * »q ) 2214 ià( »q -> sigÇl_id =ð AVDTP_DISCOVER ) 2217  (( £id_»q *è( »q -> d©a ))-> aý_£id ; 2218 } } 2220  $ÿnûl_»que¡ ( avd * £ssiÚ ,  ”r ) 2222  ³ndšg_»q * »q ; 2223  £id_»q ¤eq ; 2224  avd_loÿl_£p * l£p ; 2225  avd_¡»am * ¡»am ; 2226 ušt8_t £id ; 2227  avd_”rÜ av”r ; 2229 »q = £ssiÚ ->req; 2230 £ssiÚ -> »q = NULL ; 2232 `avd_”rÜ_š™ (& av”r , AVDTP_ERRNO , ”r ); 2234 £id = `»q_g‘_£id ( »q ); 2235 ià( £id ) 2236 ¡»am = `fšd_¡»am_by_r£id ( £ssiÚ , £id ); 2238 ¡»am = NULL ; 2240 ià( ¡»am ) { 2241 ¡»am -> abÜt_št = TRUE ; 2242 l£p = ¡»am ->lsep; 2244 l£p = NULL ; 2246  »q -> sigÇl_id ) { 2247  AVDTP_RECONFIGURE : 2248 `”rÜ ("RecÚfigu»: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2249 ià( l£p &&†£p-> cfm &&†£p->cfm-> »cÚfigu» ) 2250 l£p -> cfm -> `»cÚfigu» ( £ssiÚ ,†£p, ¡»am , & av”r , 2251 l£p -> u£r_d©a ); 2253  AVDTP_OPEN : 2254 `”rÜ ("O³n: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2255 ià( l£p &&†£p-> cfm &&†£p->cfm-> Ý’ ) 2256 l£p -> cfm -> `Ý’ ( £ssiÚ ,†£p, ¡»am , & av”r , 2257 l£p -> u£r_d©a ); 2259  AVDTP_START : 2260 `”rÜ ("S¹: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2261 ià( l£p &&†£p-> cfm &&†£p->cfm-> ¡¬t ) { 2262 l£p -> cfm -> `¡¬t ( £ssiÚ ,†£p, ¡»am , & av”r , 2263 l£p -> u£r_d©a ); 2264 ià( ¡»am ) 2265 ¡»am -> ¡¬tšg = FALSE ; 2268  AVDTP_SUSPEND : 2269 `”rÜ ("Su¥’d: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2270 ià( l£p &&†£p-> cfm &&†£p->cfm-> su¥’d ) 2271 l£p -> cfm -> `su¥’d ( £ssiÚ ,†£p, ¡»am , & av”r , 2272 l£p -> u£r_d©a ); 2274  AVDTP_CLOSE : 2275 `”rÜ ("Clo£: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2276 ià( l£p &&†£p-> cfm &&†£p->cfm-> þo£ ) { 2277 l£p -> cfm -> `þo£ ( £ssiÚ ,†£p, ¡»am , & av”r , 2278 l£p -> u£r_d©a ); 2279 ià( ¡»am ) 2280 ¡»am -> þo£_št = FALSE ; 2283  AVDTP_SET_CONFIGURATION : 2284 `”rÜ ("S‘CÚfigu¿tiÚ: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2285 ià( l£p &&†£p-> cfm &&†£p->cfm-> £t_cÚfigu¿tiÚ ) 2286 l£p -> cfm -> `£t_cÚfigu¿tiÚ ( £ssiÚ ,†£p, ¡»am , 2287 & av”r , l£p -> u£r_d©a ); 2288  çžed ; 2289  AVDTP_DISCOVER : 2290 `”rÜ ("Discov”: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2291  çžed ; 2292  AVDTP_GET_CAPABILITIES : 2293 `”rÜ ("G‘C­abž™›s: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2294  çžed ; 2295  AVDTP_ABORT : 2296 `”rÜ ("AbÜt: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2297  çžed ; 2300 ià(! ¡»am ) 2301  çžed ; 2303 `mem£t (& ¤eq , 0, (sreq)); 2304 ¤eq . aý_£id = £id ; 2306 ”r = `£nd_»que¡ ( £ssiÚ , TRUE , ¡»am , AVDTP_ABORT , & ¤eq , 2307 ( ¤eq )); 2308 ià( ”r < 0) { 2309 `”rÜ ("Unableo send‡bort„equest"); 2310  çžed ; 2313  dÚe ; 2315 çžed : 2316 `cÚÃùiÚ_lo¡ ( £ssiÚ , ”r ); 2317 dÚe : 2318 `³ndšg_»q_ä“ ( »q ); 2319  ”r ; 2320 } } 2322  gboÞ—n $»que¡_timeout ( gpoš‹r u£r_d©a ) 2324  avd * £ssiÚ = u£r_d©a ; 2326 `ÿnûl_»que¡ ( £ssiÚ , ETIMEDOUT ); 2328  FALSE ; 2329 } } 2331  $£nd_»q ( avd * £ssiÚ , gboÞ—n ´iÜ™y , 2332  ³ndšg_»q * »q ) 2334  Œª§ùiÚ = 0; 2335  ”r ; 2337 ià( £ssiÚ -> »q !ð NULL ) { 2338 `queue_»que¡ ( £ssiÚ , »q , ´iÜ™y ); 2342 »q -> Œª§ùiÚ =ransaction++; 2343 Œª§ùiÚ %= 16; 2347 ià(! `avd_£nd ( £ssiÚ , »q -> Œª§ùiÚ , AVDTP_MSG_TYPE_COMMAND , 2348 »q -> sigÇl_id ,„eq-> d©a ,„eq-> d©a_size )) { 2349 ”r = - EIO ; 2350  çžed ; 2353 £ssiÚ -> »q =„eq; 2355 »q -> timeout = `g_timeout_add_£cÚds Ôeq-> sigÇl_id =ð AVDTP_ABORT ? 2356 ABORT_TIMEOUT : REQ_TIMEOUT , 2357 »que¡_timeout , 2358 £ssiÚ ); 2361 çžed : 2362 `g_ä“ ( »q -> d©a ); 2363 `g_ä“ ( »q ); 2364  ”r ; 2365 } } 2367  $£nd_»que¡ ( avd * £ssiÚ , gboÞ—n ´iÜ™y , 2368  avd_¡»am * ¡»am , ušt8_t sigÇl_id , 2369 * bufãr , size_t size ) 2371  ³ndšg_»q * »q ; 2373 ià( size > 0 && ! bufãr ) { 2374 `DBG ("Inv®id bufã¸%p", bufãr ); 2375  - EINVAL ; 2378 ià( ¡»am && sŒ—m-> abÜt_št && sigÇl_id !ð AVDTP_ABORT ) { 2379 `DBG ("Unableo send„equests while‡borting"); 2380  - EINVAL ; 2383 »q = `g_Ãw0 ( ³ndšg_»q , 1); 2384 »q -> sigÇl_id = signal_id; 2385 »q -> d©a_size = size ; 2386 »q -> ¡»am = stream; 2388 ià( size > 0) { 2389 »q -> d©a = `g_m®loc ( size ); 2390 `memýy ( »q -> d©a , bufãr , size ); 2393  `£nd_»q ( £ssiÚ , ´iÜ™y , »q ); 2394 } } 2396  gboÞ—n $avd_discov”_»¥ ( avd * £ssiÚ , 2397  discov”_»¥ * »¥ ,  size ) 2399  £p_couÁ , i ; 2400 ušt8_t g‘ÿp_cmd ; 2401  »t = 0; 2402 gboÞ—n g‘ÿp_³ndšg = FALSE ; 2404 ià( £ssiÚ -> v”siÚ >= 0x0103) 2405 g‘ÿp_cmd = AVDTP_GET_ALL_CAPABILITIES ; 2407 g‘ÿp_cmd = AVDTP_GET_CAPABILITIES ; 2409 £p_couÁ = size / ( £id_šfo ); 2411  i = 0; i < £p_couÁ ; i++) { 2412  avd_»mÙe_£p * £p ; 2413  avd_¡»am * ¡»am ; 2414  £id_»q »q ; 2416 `DBG ("seid %dype %d media %d in use %d", 2417 »¥ -> £ps [ i ]. £id ,„e¥->£ps[i]. ty³ , 2418 »¥ -> £ps [ i ]. medŸ_ty³ ,„e¥->£ps[i]. šu£ ); 2420 ¡»am = `fšd_¡»am_by_r£id ( £ssiÚ , »¥ -> £ps [ i ]. £id ); 2422 £p = `fšd_»mÙe_£p ( £ssiÚ -> £ps , »¥ ->£ps[ i ]. £id ); 2423 ià(! £p ) { 2424 ià( »¥ -> £ps [ i ]. šu£ && ! ¡»am ) 2426 £p = `g_Ãw0 ( avd_»mÙe_£p , 1); 2427 £ssiÚ -> £ps = `g_¦i¡_­³nd (£ssiÚ->£ps, £p ); 2430 £p -> ¡»am = stream; 2431 £p -> £id = »¥ -> £ps [ i ].seid; 2432 £p -> ty³ = »¥ -> £ps [ i ].type; 2433 £p -> medŸ_ty³ = »¥ -> £ps [ i ].media_type; 2435 `mem£t (& »q , 0, (req)); 2436 »q . aý_£id = £p -> £id ; 2438 »t = `£nd_»que¡ ( £ssiÚ , TRUE , NULL , g‘ÿp_cmd , 2439 & »q , (req)); 2440 ià( »t < 0) 2442 g‘ÿp_³ndšg = TRUE ; 2445 ià(! g‘ÿp_³ndšg ) 2446 `fš®ize_discov”y ( £ssiÚ , - »t ); 2448  TRUE ; 2449 } } 2451  gboÞ—n $avd_g‘_ÿ·bž™›s_»¥ ( avd * £ssiÚ , 2452  g‘ÿp_»¥ * »¥ , 2453  size ) 2455  avd_»mÙe_£p * £p ; 2456 ušt8_t £id ; 2464 ià( size < (( g‘ÿp_»¥ ) + 4 + 2465 ( avd_medŸ_codec_ÿ·bž™y ))) { 2466 `”rÜ ("Too short getcap„esp…acket"); 2467  FALSE ; 2470 £id = (( £id_»q *è £ssiÚ -> »q -> d©a )-> aý_£id ; 2472 £p = `fšd_»mÙe_£p ( £ssiÚ -> £ps , £id ); 2474 `DBG ("£id %dy³ %d medŸ %d", £p -> £id , 2475 £p -> ty³ , s•-> medŸ_ty³ ); 2477 ià( £p -> ÿps ) { 2478 `g_¦i¡_ä“_fuÎ ( £p -> ÿps , g_ä“ ); 2479 £p -> ÿps = NULL ; 2480 £p -> codec = NULL ; 2481 £p -> d–ay_»pÜtšg = FALSE ; 2484 £p -> ÿps = `ÿps_to_li¡ ( »¥ ->ÿps, size - ( g‘ÿp_»¥ ), 2485 & £p -> codec , &£p-> d–ay_»pÜtšg ); 2487  TRUE ; 2488 } } 2490  gboÞ—n $avd_£t_cÚfigu¿tiÚ_»¥ ( avd * £ssiÚ , 2491  avd_¡»am * ¡»am , 2492  avd_sšgË_h—d” * »¥ , 2493  size ) 2495  avd_loÿl_£p * £p = ¡»am -> l£p ; 2497 ià( £p -> cfm && s•->cfm-> £t_cÚfigu¿tiÚ ) 2498 £p -> cfm -> `£t_cÚfigu¿tiÚ ( £ssiÚ , s•, ¡»am , NULL , 2499 £p -> u£r_d©a ); 2501 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_CONFIGURED ); 2503  TRUE ; 2504 } } 2506  gboÞ—n $avd_»cÚfigu»_»¥ ( avd * £ssiÚ , 2507  avd_¡»am * ¡»am , 2508  avd_sšgË_h—d” * »¥ , 2509  size ) 2511  TRUE ; 2512 } } 2514  gboÞ—n $avd_Ý’_»¥ ( avd * £ssiÚ , 2515  avd_¡»am * ¡»am , 2516  £id_»j * »¥ ,  size ) 2518  avd_loÿl_£p * £p = ¡»am -> l£p ; 2520 £ssiÚ -> ³ndšg_Ý’ = ¡»am ; 2522 ià(! ¡»am -> Ý’_aý && £p -> cfm && s•->cfm-> Ý’ ) 2523 £p -> cfm -> `Ý’ ( £ssiÚ , s•, ¡»am , NULL , s•-> u£r_d©a ); 2525  TRUE ; 2526 } } 2528  gboÞ—n $avd_¡¬t_»¥ ( avd * £ssiÚ , 2529  avd_¡»am * ¡»am , 2530  £id_»j * »¥ ,  size ) 2532  avd_loÿl_£p * £p = ¡»am -> l£p ; 2536 ià( £p -> ¡©e !ð AVDTP_STATE_STREAMING ) 2537 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_STREAMING ); 2539 ià( £p -> cfm && s•->cfm-> ¡¬t ) 2540 £p -> cfm -> `¡¬t ( £ssiÚ , s•, ¡»am , NULL , s•-> u£r_d©a ); 2542  TRUE ; 2543 } } 2545  gboÞ—n $avd_þo£_»¥ ( avd * £ssiÚ , 2546  avd_¡»am * ¡»am , 2547  £id_»j * »¥ ,  size ) 2549  avd_loÿl_£p * £p = ¡»am -> l£p ; 2551 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_CLOSING ); 2553 `þo£_¡»am ( ¡»am ); 2555  TRUE ; 2556 } } 2558  gboÞ—n $avd_su¥’d_»¥ ( avd * £ssiÚ , 2559  avd_¡»am * ¡»am , 2560 * d©a ,  size ) 2562  avd_loÿl_£p * £p = ¡»am -> l£p ; 2564 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_OPEN ); 2566 ià( £p -> cfm && s•->cfm-> su¥’d ) 2567 £p -> cfm -> `su¥’d ( £ssiÚ , s•, ¡»am , NULL , s•-> u£r_d©a ); 2569  TRUE ; 2570 } } 2572  gboÞ—n $avd_abÜt_»¥ ( avd * £ssiÚ , 2573  avd_¡»am * ¡»am , 2574  £id_»j * »¥ ,  size ) 2576  avd_loÿl_£p * £p = ¡»am -> l£p ; 2578 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_ABORTING ); 2580 ià( £p -> cfm && s•->cfm-> abÜt ) 2581 £p -> cfm -> `abÜt ( £ssiÚ , s•, ¡»am , NULL , s•-> u£r_d©a ); 2583 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_IDLE ); 2585  TRUE ; 2586 } } 2588  gboÞ—n $avd_d–ay_»pÜt_»¥ ( avd * £ssiÚ , 2589  avd_¡»am * ¡»am , 2590 * d©a ,  size ) 2592  avd_loÿl_£p * £p = ¡»am -> l£p ; 2594 ià( £p -> cfm && s•->cfm-> d–ay_»pÜt ) 2595 £p -> cfm -> `d–ay_»pÜt ( £ssiÚ , s•, ¡»am , NULL , 2596 £p -> u£r_d©a ); 2598  TRUE ; 2599 } } 2601  gboÞ—n $avd_·r£_»¥ ( avd * £ssiÚ , 2602  avd_¡»am * ¡»am , 2603 ušt8_t Œª§ùiÚ , ušt8_ˆ sigÇl_id , 2604 * buf ,  size ) 2606  ³ndšg_»q * Ãxt ; 2607 cÚ¡ * g‘_®l = ""; 2609 ià( £ssiÚ -> ´io_queue ) 2610 Ãxt = £ssiÚ -> ´io_queue -> d©a ; 2611 ià( £ssiÚ -> »q_queue ) 2612 Ãxt = £ssiÚ -> »q_queue -> d©a ; 2614 Ãxt = NULL ; 2616  sigÇl_id ) { 2617  AVDTP_DISCOVER : 2618 `DBG ("DISCOVER„equest succeeded"); 2619  `avd_discov”_»¥ ( £ssiÚ , buf , size ); 2620  AVDTP_GET_ALL_CAPABILITIES : 2621 g‘_®l = "ALL_"; 2622  AVDTP_GET_CAPABILITIES : 2623 `DBG ("GET_%sCAPABILITIES„eque¡ sucûeded", g‘_®l ); 2624 ià(! `avd_g‘_ÿ·bž™›s_»¥ ( £ssiÚ , buf , size )) 2625  FALSE ; 2626 ià(!( Ãxt && (Ãxt-> sigÇl_id =ð AVDTP_GET_CAPABILITIES || 2627 Ãxt -> sigÇl_id =ð AVDTP_GET_ALL_CAPABILITIES ))) 2628 `fš®ize_discov”y ( £ssiÚ , 0); 2629  TRUE ; 2634 ià(! ¡»am ) { 2635 `DBG ("AVDTP: stream was closed while waiting for„eply"); 2636  TRUE ; 2639  sigÇl_id ) { 2640  AVDTP_SET_CONFIGURATION : 2641 `DBG ("SET_CONFIGURATION„equest succeeded"); 2642  `avd_£t_cÚfigu¿tiÚ_»¥ ( £ssiÚ , ¡»am , 2643 buf , size ); 2644  AVDTP_RECONFIGURE : 2645 `DBG ("RECONFIGURE„equest succeeded"); 2646  `avd_»cÚfigu»_»¥ ( £ssiÚ , ¡»am , buf , size ); 2647  AVDTP_OPEN : 2648 `DBG ("OPEN„equest succeeded"); 2649  `avd_Ý’_»¥ ( £ssiÚ , ¡»am , buf , size ); 2650  AVDTP_SUSPEND : 2651 `DBG ("SUSPEND„equest succeeded"); 2652  `avd_su¥’d_»¥ ( £ssiÚ , ¡»am , buf , size ); 2653  AVDTP_START : 2654 `DBG ("START„equest succeeded"); 2655  `avd_¡¬t_»¥ ( £ssiÚ , ¡»am , buf , size ); 2656  AVDTP_CLOSE : 2657 `DBG ("CLOSE„equest succeeded"); 2658  `avd_þo£_»¥ ( £ssiÚ , ¡»am , buf , size ); 2659  AVDTP_ABORT : 2660 `DBG ("ABORT„equest succeeded"); 2661  `avd_abÜt_»¥ ( £ssiÚ , ¡»am , buf , size ); 2662  AVDTP_DELAY_REPORT : 2663 `DBG ("DELAY_REPORT„equest succeeded"); 2664  `avd_d–ay_»pÜt_»¥ ( £ssiÚ , ¡»am , buf , size ); 2667 `”rÜ ("UnknowÀsigÇÈid iÀacû±„e¥Ú£: %u", sigÇl_id ); 2668  TRUE ; 2669 } } 2671  gboÞ—n $£id_»j_to_”r ( £id_»j * »j ,  size , 2672  avd_”rÜ * ”r ) 2674 ià( size < ( £id_»j )) { 2675 `”rÜ ("Too small…acket for seid_rej"); 2676  FALSE ; 2679 `avd_”rÜ_š™ ( ”r , 0x00, »j -> ”rÜ ); 2681  TRUE ; 2682 } } 2684  gboÞ—n $cÚf_»j_to_”r ( cÚf_»j * »j ,  size , 2685  avd_”rÜ * ”r ) 2687 ià( size < ( cÚf_»j )) { 2688 `”rÜ ("Too small…acket for conf_rej"); 2689  FALSE ; 2692 `avd_”rÜ_š™ ( ”r , »j -> ÿ‹gÜy ,„ej-> ”rÜ ); 2694  TRUE ; 2695 } } 2697  gboÞ—n $¡»am_»j_to_”r ( ¡»am_»j * »j ,  size , 2698  avd_”rÜ * ”r , 2699 ušt8_t * aý_£id ) 2701 ià( size < ( ¡»am_»j )) { 2702 `”rÜ ("Too small…acket for stream_rej"); 2703  FALSE ; 2706 `avd_”rÜ_š™ ( ”r , 0x00, »j -> ”rÜ ); 2708 ià( aý_£id ) 2709 * aý_£id = »j ->acp_seid; 2711  TRUE ; 2712 } } 2714  gboÞ—n $avd_·r£_»j ( avd * £ssiÚ , 2715  avd_¡»am * ¡»am , 2716 ušt8_t Œª§ùiÚ , ušt8_ˆ sigÇl_id , 2717 * buf ,  size ) 2719  avd_”rÜ ”r ; 2720 ušt8_t aý_£id ; 2721  avd_loÿl_£p * £p = ¡»am ? sŒ—m-> l£p : NULL ; 2723  sigÇl_id ) { 2724  AVDTP_DISCOVER : 2725  AVDTP_GET_CAPABILITIES : 2726  AVDTP_GET_ALL_CAPABILITIES : 2727 ià(! `£id_»j_to_”r ( buf , size , & ”r )) 2728  FALSE ; 2729 `”rÜ ("%s„equest„ejected: %s (%d)", 2730 sigÇl_id =ð AVDTP_DISCOVER ? "DISCOVER" : 2731 sigÇl_id =ð AVDTP_GET_CAPABILITIES ? 2733 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 2734 ià( £ssiÚ -> discov” ) { 2735 £ssiÚ -> discov” -> `cb (£ssiÚ, sessiÚ-> £ps , & ”r , 2736 £ssiÚ -> discov” -> u£r_d©a ); 2737 `g_ä“ ( £ssiÚ -> discov” ); 2738 £ssiÚ -> discov” = NULL ; 2740  TRUE ; 2741  AVDTP_OPEN : 2742 ià(! `£id_»j_to_”r ( buf , size , & ”r )) 2743  FALSE ; 2744 `”rÜ ("OPEN„equest„ejected: %s (%d)", 2745 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 2746 ià( £p && s•-> cfm && s•->cfm-> Ý’ ) 2747 £p -> cfm -> `Ý’ ( £ssiÚ , s•, ¡»am , & ”r , 2748 £p -> u£r_d©a ); 2749  TRUE ; 2750  AVDTP_SET_CONFIGURATION : 2751 ià(! `cÚf_»j_to_”r ( buf , size , & ”r )) 2752  FALSE ; 2753 `”rÜ ("SET_CONFIGURATION„equest„ejected: %s (%d)", 2754 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 2755 ià( £p && s•-> cfm && s•->cfm-> £t_cÚfigu¿tiÚ ) 2756 £p -> cfm -> `£t_cÚfigu¿tiÚ ( £ssiÚ , s•, ¡»am , 2757 & ”r , £p -> u£r_d©a ); 2758  TRUE ; 2759  AVDTP_GET_CONFIGURATION : 2760 ià(! `£id_»j_to_”r ( buf , size , & ”r )) 2761  FALSE ; 2762 `”rÜ ("GET_CONFIGURATION„equest„ejected: %s (%d)", 2763 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 2764 ià( £p && s•-> cfm && s•->cfm-> g‘_cÚfigu¿tiÚ ) 2765 £p -> cfm -> `g‘_cÚfigu¿tiÚ ( £ssiÚ , s•, ¡»am , & ”r , 2766 £p -> u£r_d©a ); 2767  TRUE ; 2768  AVDTP_RECONFIGURE : 2769 ià(! `cÚf_»j_to_”r ( buf , size , & ”r )) 2770  FALSE ; 2771 `”rÜ ("RECONFIGURE„equest„ejected: %s (%d)", 2772 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 2773 ià( £p && s•-> cfm && s•->cfm-> »cÚfigu» ) 2774 £p -> cfm -> `»cÚfigu» ( £ssiÚ , s•, ¡»am , & ”r , 2775 £p -> u£r_d©a ); 2776  TRUE ; 2777  AVDTP_START : 2778 ià(! `¡»am_»j_to_”r ( buf , size , & ”r , & aý_£id )) 2779  FALSE ; 2780 `”rÜ ("START„equest„ejected: %s (%d)", 2781 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 2782 ià( £p && s•-> cfm && s•->cfm-> ¡¬t ) { 2783 £p -> cfm -> `¡¬t ( £ssiÚ , s•, ¡»am , & ”r , 2784 £p -> u£r_d©a ); 2785 ¡»am -> ¡¬tšg = FALSE ; 2787  TRUE ; 2788  AVDTP_SUSPEND : 2789 ià(! `¡»am_»j_to_”r ( buf , size , & ”r , & aý_£id )) 2790  FALSE ; 2791 `”rÜ ("SUSPEND„equest„ejected: %s (%d)", 2792 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 2793 ià( £p && s•-> cfm && s•->cfm-> su¥’d ) 2794 £p -> cfm -> `su¥’d ( £ssiÚ , s•, ¡»am , & ”r , 2795 £p -> u£r_d©a ); 2796  TRUE ; 2797  AVDTP_CLOSE : 2798 ià(! `¡»am_»j_to_”r ( buf , size , & ”r , & aý_£id )) 2799  FALSE ; 2800 `”rÜ ("CLOSE„equest„ejected: %s (%d)", 2801 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 2802 ià( £p && s•-> cfm && s•->cfm-> þo£ ) { 2803 £p -> cfm -> `þo£ ( £ssiÚ , s•, ¡»am , & ”r , 2804 £p -> u£r_d©a ); 2805 ¡»am -> þo£_št = FALSE ; 2807  TRUE ; 2808  AVDTP_ABORT : 2809 ià(! `¡»am_»j_to_”r ( buf , size , & ”r , & aý_£id )) 2810  FALSE ; 2811 `”rÜ ("ABORT„equest„ejected: %s (%d)", 2812 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 2813 ià( £p && s•-> cfm && s•->cfm-> abÜt ) 2814 £p -> cfm -> `abÜt ( £ssiÚ , s•, ¡»am , & ”r , 2815 £p -> u£r_d©a ); 2816  FALSE ; 2817  AVDTP_DELAY_REPORT : 2818 ià(! `¡»am_»j_to_”r ( buf , size , & ”r , & aý_£id )) 2819  FALSE ; 2820 `”rÜ ("DELAY_REPORT„equest„ejected: %s (%d)", 2821 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 2822 ià( £p && s•-> cfm && s•->cfm-> d–ay_»pÜt ) 2823 £p -> cfm -> `d–ay_»pÜt ( £ssiÚ , s•, ¡»am , & ”r , 2824 £p -> u£r_d©a ); 2825  TRUE ; 2827 `”rÜ ("UnknowÀ»jeù„e¥Ú£ sigÇÈid: %u", sigÇl_id ); 2828  TRUE ; 2830 } } 2832  avd_£rviû_ÿ·bž™y * $avd_¡»am_g‘_codec ( 2833  avd_¡»am * ¡»am ) 2835 GSLi¡ * l ; 2837  l = ¡»am -> ÿps ;†;† =†-> Ãxt ) { 2838  avd_£rviû_ÿ·bž™y * ÿp = l -> d©a ; 2840 ià( ÿp -> ÿ‹gÜy =ð AVDTP_MEDIA_CODEC ) 2841  ÿp ; 2844  NULL ; 2845 } } 2847  gboÞ—n $avd_¡»am_has_ÿ·bž™y ( avd_¡»am * ¡»am , 2848  avd_£rviû_ÿ·bž™y * ÿp ) 2850 GSLi¡ * l ; 2851  avd_£rviû_ÿ·bž™y * ¡»am_ÿp ; 2853  l = ¡»am -> ÿps ;†;† = `g_¦i¡_Ãxt (l)) { 2854 ¡»am_ÿp = l -> d©a ; 2856 ià( ¡»am_ÿp -> ÿ‹gÜy !ð ÿp ->category || 2857 ¡»am_ÿp -> Ëngth !ð ÿp ->length) 2860 ià( `memcmp ( ¡»am_ÿp -> d©a , ÿp ->d©a, c­-> Ëngth ) == 0) 2861  TRUE ; 2864  FALSE ; 2865 } } 2867 gboÞ—n $avd_¡»am_has_ÿ·bž™›s ( avd_¡»am * ¡»am , 2868 GSLi¡ * ÿps ) 2870 ; ÿps ; c­ ð `g_¦i¡_Ãxt (caps)) { 2871  avd_£rviû_ÿ·bž™y * ÿp = ÿps -> d©a ; 2873 ià(! `avd_¡»am_has_ÿ·bž™y ( ¡»am , ÿp )) 2874  FALSE ; 2877  TRUE ; 2878 } } 2880  avd_»mÙe_£p * $avd_¡»am_g‘_»mÙe_£p ( 2881  avd_¡»am * ¡»am ) 2883 GSLi¡ * l ; 2885  l = ¡»am -> £ssiÚ -> £ps ;†;† =†-> Ãxt ) { 2886  avd_»mÙe_£p * £p = l -> d©a ; 2888 ià( £p -> £id =ð ¡»am -> r£id ) 2889  £p ; 2892  NULL ; 2893 } } 2895 gboÞ—n $avd_¡»am_£t_Œª¥Üt ( avd_¡»am * ¡»am ,  fd , 2896 size_t imtu , size_ˆ omtu ) 2898 GIOChªÃl * io ; 2900 ià( ¡»am !ð¡»am-> £ssiÚ -> ³ndšg_Ý’ ) 2901  FALSE ; 2903 ià( `£t_´iÜ™y ( fd , 5) < 0) 2904  FALSE ; 2906 io = `g_io_chªÃl_unix_Ãw ( fd ); 2908 `hªdË_Œª¥Üt_cÚÃù ( ¡»am -> £ssiÚ , io , imtu , omtu ); 2910 `g_io_chªÃl_uÄef ( io ); 2912  TRUE ; 2914 } } 2916 gboÞ—n $avd_¡»am_g‘_Œª¥Üt ( avd_¡»am * ¡»am , * sock , 2917 ušt16_t * imtu , ušt16_ˆ* omtu , 2918 GSLi¡ ** ÿps ) 2920 ià( ¡»am -> io =ð NULL ) 2921  FALSE ; 2923 ià( sock ) 2924 * sock = `g_io_chªÃl_unix_g‘_fd ( ¡»am -> io ); 2926 ià( omtu ) 2927 * omtu = ¡»am ->omtu; 2929 ià( imtu ) 2930 * imtu = ¡»am ->imtu; 2932 ià( ÿps ) 2933 * ÿps = ¡»am ->caps; 2935  TRUE ; 2936 } } 2938  $´oûss_queue ( avd * £ssiÚ ) 2940 GSLi¡ ** queue , * l ; 2941  ³ndšg_»q * »q ; 2943 ià( £ssiÚ -> »q ) 2946 ià( £ssiÚ -> ´io_queue ) 2947 queue = & £ssiÚ -> ´io_queue ; 2949 queue = & £ssiÚ -> »q_queue ; 2951 ià(!* queue ) 2954 l = * queue ; 2955 »q = l -> d©a ; 2957 * queue = `g_¦i¡_»move (*queue, »q ); 2959  `£nd_»q ( £ssiÚ , FALSE , »q ); 2960 } } 2962  avd_£rviû_ÿ·bž™y * $avd_g‘_codec ( avd_»mÙe_£p * £p ) 2964  £p -> codec ; 2965 } } 2967  avd_£rviû_ÿ·bž™y * $avd_£rviû_ÿp_Ãw ( ušt8_t ÿ‹gÜy , 2968 cÚ¡ * d©a , 2969  Ëngth ) 2971  avd_£rviû_ÿ·bž™y * ÿp ; 2973 ià( ÿ‹gÜy < AVDTP_MEDIA_TRANSPORT || 2974 ÿ‹gÜy > AVDTP_DELAY_REPORTING ) 2975  NULL ; 2977 ià( Ëngth > 0 && ! d©a ) 2978  NULL ; 2980 ÿp = `g_m®loc (( avd_£rviû_ÿ·bž™y è+ Ëngth ); 2981 ÿp -> ÿ‹gÜy = category; 2982 ÿp -> Ëngth =†ength; 2984 ià( Ëngth > 0) 2985 `memýy ( ÿp -> d©a , d©a, Ëngth ); 2987  ÿp ; 2988 } } 2990  gboÞ—n $´oûss_discov” ( gpoš‹r d©a ) 2992  avd * £ssiÚ = d©a ; 2994 £ssiÚ -> discov” -> id = 0; 2996 `fš®ize_discov”y ( £ssiÚ , 0); 2998  FALSE ; 2999 } } 3001  $avd_discov” ( avd * £ssiÚ , avd_discov”_cb_t cb , 3002 * u£r_d©a ) 3004  ”r ; 3006 ià( £ssiÚ -> discov” ) 3007  - EBUSY ; 3009 £ssiÚ -> discov” = `g_Ãw0 ( discov”_ÿÎback , 1); 3011 ià( £ssiÚ -> £ps ) { 3012 £ssiÚ -> discov” -> cb = cb; 3013 £ssiÚ -> discov” -> u£r_d©a = user_data; 3014 £ssiÚ -> discov” -> id = `g_idË_add ( ´oûss_discov” , session); 3018 ”r = `£nd_»que¡ ( £ssiÚ , FALSE , NULL , AVDTP_DISCOVER , NULL, 0); 3019 ià( ”r == 0) { 3020 £ssiÚ -> discov” -> cb = cb; 3021 £ssiÚ -> discov” -> u£r_d©a = user_data; 3024  ”r ; 3025 } } 3027 gboÞ—n $avd_¡»am_»move_cb ( avd * £ssiÚ , 3028  avd_¡»am * ¡»am , 3029  id ) 3031 GSLi¡ * l ; 3032  ¡»am_ÿÎback * cb ; 3034 ià(! ¡»am ) 3035  FALSE ; 3037  cb = NULL , l = ¡»am -> ÿÎbacks ;† !ðNULL;† =†-> Ãxt ) { 3038  ¡»am_ÿÎback * tmp = l -> d©a ; 3039 ià( tmp &&mp-> id == id) { 3040 cb = tmp ; 3045 ià(! cb ) 3046  FALSE ; 3048 ¡»am -> ÿÎbacks = `g_¦i¡_»move (¡»am->ÿÎbacks, cb ); 3049 `g_ä“ ( cb ); 3051  TRUE ; 3052 } } 3054  $avd_¡»am_add_cb ( avd * £ssiÚ , 3055  avd_¡»am * ¡»am , 3056 avd_¡»am_¡©e_cb cb , * d©a ) 3058  ¡»am_ÿÎback * ¡»am_cb ; 3059  id = 0; 3061 ¡»am_cb = `g_Ãw ( ¡»am_ÿÎback , 1); 3062 ¡»am_cb -> cb = cb; 3063 ¡»am_cb -> u£r_d©a = d©a ; 3064 ¡»am_cb -> id = ++id; 3066 ¡»am -> ÿÎbacks = `g_¦i¡_­³nd (¡»am->ÿÎbacks, ¡»am_cb ); 3068  ¡»am_cb -> id ; 3069 } } 3071  $avd_g‘_cÚfigu¿tiÚ ( avd * £ssiÚ ,  avd_¡»am * ¡»am ) 3073  £id_»q »q ; 3075 `mem£t (& »q , 0, (req)); 3076 »q . aý_£id = ¡»am -> r£id ; 3078  `£nd_»que¡ ( £ssiÚ , FALSE , ¡»am , AVDTP_GET_CONFIGURATION , 3079 & »q , (req)); 3080 } } 3082  $cÝy_ÿ·bž™›s ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 3084  avd_£rviû_ÿ·bž™y * ¤c_ÿp = d©a ; 3085  avd_£rviû_ÿ·bž™y * d¡_ÿp ; 3086 GSLi¡ ** l = u£r_d©a ; 3088 d¡_ÿp = `avd_£rviû_ÿp_Ãw ( ¤c_ÿp -> ÿ‹gÜy , src_ÿp-> d©a , 3089 ¤c_ÿp -> Ëngth ); 3091 * l = `g_¦i¡_­³nd (*l, d¡_ÿp ); 3092 } } 3094  $avd_£t_cÚfigu¿tiÚ ( avd * £ssiÚ , 3095  avd_»mÙe_£p * r£p , 3096  avd_loÿl_£p * l£p , 3097 GSLi¡ * ÿps , 3098  avd_¡»am ** ¡»am ) 3100  £tcÚf_»q * »q ; 3101  avd_¡»am * Ãw_¡»am ; 3102 * ±r ; 3103  ”r , ÿps_Ën ; 3104  avd_£rviû_ÿ·bž™y * ÿp ; 3105 GSLi¡ * l ; 3107 ià(!( l£p && r£p )) 3108  - EINVAL ; 3110 `DBG ("%p: iÁ_£id=%u,‡ý_£id=%u", £ssiÚ , 3111 l£p -> šfo . £id , r£p ->seid); 3113 Ãw_¡»am = `g_Ãw0 ( avd_¡»am , 1); 3114 Ãw_¡»am -> £ssiÚ = session; 3115 Ãw_¡»am -> l£p =†sep; 3116 Ãw_¡»am -> r£id = r£p -> £id ; 3118 ià( r£p -> d–ay_»pÜtšg && l£p ->delay_reporting) { 3119  avd_£rviû_ÿ·bž™y * d–ay_»pÜtšg ; 3121 d–ay_»pÜtšg = `avd_£rviû_ÿp_Ãw ( AVDTP_DELAY_REPORTING , 3122 NULL , 0); 3123 ÿps = `g_¦i¡_­³nd (ÿps, d–ay_»pÜtšg ); 3124 Ãw_¡»am -> d–ay_»pÜtšg = TRUE ; 3127 `g_¦i¡_fÜ—ch ( ÿps , cÝy_ÿ·bž™›s , & Ãw_¡»am ->caps); 3130  l = ÿps , ÿps_Ën = 0;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 3131 ÿp = l -> d©a ; 3132 ÿps_Ën +ð ÿp -> Ëngth + 2; 3135 »q = `g_m®loc0 (( £tcÚf_»q è+ ÿps_Ën ); 3137 »q -> št_£id = l£p -> šfo . £id ; 3138 »q -> aý_£id = r£p -> £id ; 3141  l = ÿps , ±r = »q ->ÿps;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 3142 ÿp = l -> d©a ; 3143 `memýy ( ±r , ÿp , c­-> Ëngth + 2); 3144 ±r +ð ÿp -> Ëngth + 2; 3147 ”r = `£nd_»que¡ ( £ssiÚ , FALSE , Ãw_¡»am , 3148 AVDTP_SET_CONFIGURATION , »q , 3149 ( £tcÚf_»q è+ ÿps_Ën ); 3150 ià( ”r < 0) 3151 `¡»am_ä“ ( Ãw_¡»am ); 3153 l£p -> šfo . šu£ = 1; 3154 l£p -> ¡»am = Ãw_¡»am ; 3155 r£p -> ¡»am = Ãw_¡»am ; 3156 £ssiÚ -> ¡»ams = `g_¦i¡_­³nd (£ssiÚ->¡»ams, Ãw_¡»am ); 3157 ià( ¡»am ) 3158 * ¡»am = Ãw_¡»am ; 3161 `g_ä“ ( »q ); 3163  ”r ; 3164 } } 3166  $avd_Ý’ ( avd * £ssiÚ ,  avd_¡»am * ¡»am ) 3168  £id_»q »q ; 3170 ià(! `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am )) 3171  - EINVAL ; 3173 ià( ¡»am -> l£p -> ¡©e > AVDTP_STATE_CONFIGURED ) 3174  - EINVAL ; 3176 `mem£t (& »q , 0, (req)); 3177 »q . aý_£id = ¡»am -> r£id ; 3179  `£nd_»que¡ ( £ssiÚ , FALSE , ¡»am , AVDTP_OPEN , 3180 & »q , (req)); 3181 } } 3183  gboÞ—n $¡¬t_timeout ( gpoš‹r u£r_d©a ) 3185  avd_¡»am * ¡»am = u£r_d©a ; 3186  avd * £ssiÚ = ¡»am ->session; 3188 ¡»am -> Ý’_aý = FALSE ; 3190 ià( `avd_¡¬t ( £ssiÚ , ¡»am ) < 0) 3191 `”rÜ ("wait_timeout:‡vdtp_start failed"); 3193 ¡»am -> ¡¬t_tim” = 0; 3195  FALSE ; 3196 } } 3198  $avd_¡¬t ( avd * £ssiÚ ,  avd_¡»am * ¡»am ) 3200  ¡¬t_»q »q ; 3201  »t ; 3203 ià(! `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am )) 3204  - EINVAL ; 3206 ià( ¡»am -> l£p -> ¡©e !ð AVDTP_STATE_OPEN ) 3207  - EINVAL ; 3213 ià( ¡»am -> Ý’_aý ) { 3215 ià( ¡»am -> ¡¬t_tim” ) 3218 ¡»am -> ¡¬t_tim” = `g_timeout_add_£cÚds ( START_TIMEOUT , 3219 ¡¬t_timeout , 3220 ¡»am ); 3224 ià( ¡»am -> þo£_št =ð TRUE ) { 3225 `”rÜ ("avdtp_start:„ejecting start since close is initiated"); 3226  - EINVAL ; 3229 ià( ¡»am -> ¡¬tšg =ð TRUE ) { 3230 `DBG ("stream‡lready started"); 3231  - EINPROGRESS ; 3234 `mem£t (& »q , 0, (req)); 3235 »q . fœ¡_£id . £id = ¡»am -> r£id ; 3237 »t = `£nd_»que¡ ( £ssiÚ , FALSE , ¡»am , AVDTP_START , 3238 & »q , (req)); 3239 ià( »t == 0) 3240 ¡»am -> ¡¬tšg = TRUE ; 3242  »t ; 3243 } } 3245  $avd_þo£ ( avd * £ssiÚ ,  avd_¡»am * ¡»am , 3246 gboÞ—n immedŸ‹ ) 3248  £id_»q »q ; 3249  »t ; 3251 ià(! `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am )) 3252  - EINVAL ; 3254 ià( ¡»am -> þo£_št =ð TRUE ) { 3255 `”rÜ ("avdtp_close:„ejecting since close is‡lready initiated"); 3256  - EINVAL ; 3260 ià( ¡»am -> l£p -> ¡©e < AVDTP_STATE_OPEN ) 3261  `avd_abÜt ( £ssiÚ , ¡»am ); 3263 ià( immedŸ‹ && £ssiÚ -> »q && ¡»am == session->req->stream) 3264  `avd_abÜt ( £ssiÚ , ¡»am ); 3266 `mem£t (& »q , 0, (req)); 3267 »q . aý_£id = ¡»am -> r£id ; 3269 »t = `£nd_»que¡ ( £ssiÚ , FALSE , ¡»am , AVDTP_CLOSE , 3270 & »q , (req)); 3271 ià( »t == 0) 3272 ¡»am -> þo£_št = TRUE ; 3274  »t ; 3275 } } 3277  $avd_su¥’d ( avd * £ssiÚ ,  avd_¡»am * ¡»am ) 3279  £id_»q »q ; 3281 ià(! `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am )) 3282  - EINVAL ; 3284 ià( ¡»am -> l£p -> ¡©e <ð AVDTP_STATE_OPEN || sŒ—m-> þo£_št ) 3285  - EINVAL ; 3287 `mem£t (& »q , 0, (req)); 3288 »q . aý_£id = ¡»am -> r£id ; 3290  `£nd_»que¡ ( £ssiÚ , FALSE , ¡»am , AVDTP_SUSPEND , 3291 & »q , (req)); 3292 } } 3294  $avd_abÜt ( avd * £ssiÚ ,  avd_¡»am * ¡»am ) 3296  £id_»q »q ; 3297  »t ; 3299 ià(! `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am )) 3300  - EINVAL ; 3302 ià( ¡»am -> l£p -> ¡©e =ð AVDTP_STATE_ABORTING ) 3303  - EINVAL ; 3305 ià( £ssiÚ -> »q && sessiÚ->»q-> timeout > 0 && 3306 ¡»am =ð £ssiÚ -> »q ->stream) 3307  `ÿnûl_»que¡ ( £ssiÚ , ECANCELED ); 3309 `mem£t (& »q , 0, (req)); 3310 »q . aý_£id = ¡»am -> r£id ; 3312 »t = `£nd_»que¡ ( £ssiÚ , TRUE , ¡»am , AVDTP_ABORT , 3313 & »q , (req)); 3314 ià( »t == 0) 3315 ¡»am -> abÜt_št = TRUE ; 3317  »t ; 3318 } } 3320  $avd_d–ay_»pÜt ( avd * £ssiÚ ,  avd_¡»am * ¡»am , 3321 ušt16_t d–ay ) 3323  d–ay_»q »q ; 3325 ià(! `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am )) 3326  - EINVAL ; 3328 ià( ¡»am -> l£p -> ¡©e !ð AVDTP_STATE_CONFIGURED && 3329 ¡»am -> l£p -> ¡©e !ð AVDTP_STATE_STREAMING ) 3330  - EINVAL ; 3332 ià(! ¡»am -> d–ay_»pÜtšg || £ssiÚ -> v”siÚ < 0x0103) 3333  - EINVAL ; 3335 ¡»am -> d–ay = delay; 3337 `mem£t (& »q , 0, (req)); 3338 »q . aý_£id = ¡»am -> r£id ; 3339 »q . d–ay = `htÚs (delay); 3341  `£nd_»que¡ ( £ssiÚ , TRUE , ¡»am , AVDTP_DELAY_REPORT , 3342 & »q , (req)); 3343 } } 3345  avd_loÿl_£p * $avd_»gi¡”_£p ( ušt8_t ty³ , ušt8_ˆ medŸ_ty³ , 3346 ušt8_t codec_ty³ , 3347 gboÞ—n d–ay_»pÜtšg , 3348  avd_£p_šd * šd , 3349  avd_£p_cfm * cfm , 3350 * u£r_d©a ) 3352  avd_loÿl_£p * £p ; 3354 ià( `g_¦i¡_Ëngth ( l£ps è> MAX_SEID ) 3355  NULL ; 3357 £p = `g_Ãw0 ( avd_loÿl_£p , 1); 3359 £p -> ¡©e = AVDTP_STATE_IDLE ; 3360 £p -> šfo . £id = `g_¦i¡_Ëngth ( l£ps ) + 1; 3361 £p -> šfo . ty³ =ype; 3362 £p -> šfo . medŸ_ty³ = media_type; 3363 £p -> codec = codec_ty³ ; 3364 £p -> šd = ind; 3365 £p -> cfm = cfm; 3366 £p -> u£r_d©a = user_data; 3367 £p -> d–ay_»pÜtšg = delay_reporting; 3369 `DBG ("SEP %°»gi¡”ed:y³:%d codec:%d seid:%d", £p , 3370 £p -> šfo . ty³ , s•-> codec , s•->šfo. £id ); 3371 l£ps = `g_¦i¡_­³nd Ö£ps, £p ); 3373  £p ; 3374 } } 3376  $avd_£p_£t_v’dÜ_codec ( avd_loÿl_£p * £p , ušt32_t v’dÜ_id , 3377 ušt16_t codec_id ) 3379 £p -> vndcodec_v’dÜ = v’dÜ_id ; 3380 £p -> vndcodec_codec = codec_id ; 3381 } } 3383  $avd_uÄegi¡”_£p ( avd_loÿl_£p * £p ) 3385 ià(! £p ) 3386  - EINVAL ; 3388 l£ps = `g_¦i¡_»move Ö£ps, £p ); 3390 ià( £p -> ¡»am ) 3391 `»Ëa£_¡»am ( £p -> ¡»am , s•->¡»am-> £ssiÚ ); 3393 `DBG ("SEP %°uÄegi¡”ed:y³:%d codec:%d seid:%d", £p , 3394 £p -> šfo . ty³ , s•-> codec , s•->šfo. £id ); 3396 `g_ä“ ( £p ); 3399 } } 3401 cÚ¡ * $avd_¡»¼Ü ( avd_”rÜ * ”r ) 3403 ià( ”r -> ÿ‹gÜy =ð AVDTP_ERRNO ) 3404  `¡»¼Ü ( ”r ->”r. posix_”ºo ); 3406  ”r ->”r. ”rÜ_code ) { 3407  AVDTP_BAD_HEADER_FORMAT : 3409  AVDTP_BAD_LENGTH : 3411  AVDTP_BAD_ACP_SEID : 3413  AVDTP_SEP_IN_USE : 3415  AVDTP_SEP_NOT_IN_USE : 3417  AVDTP_BAD_SERV_CATEGORY : 3419  AVDTP_BAD_PAYLOAD_FORMAT : 3421  AVDTP_NOT_SUPPORTED_COMMAND : 3423  AVDTP_INVALID_CAPABILITIES : 3425  AVDTP_BAD_RECOVERY_TYPE : 3427  AVDTP_BAD_MEDIA_TRANSPORT_FORMAT : 3429  AVDTP_BAD_RECOVERY_FORMAT : 3431  AVDTP_BAD_ROHC_FORMAT : 3433  AVDTP_BAD_CP_FORMAT : 3435  AVDTP_BAD_MULTIPLEXING_FORMAT : 3437  AVDTP_UNSUPPORTED_CONFIGURATION : 3439  AVDTP_BAD_STATE : 3444 } } 3446 avd_¡©e_t $avd_£p_g‘_¡©e ( avd_loÿl_£p * £p ) 3448  £p -> ¡©e ; 3449 } } 3451 gboÞ—n $avd_has_¡»am ( avd * £ssiÚ ,  avd_¡»am * ¡»am ) 3453  `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am è? TRUE : FALSE ; 3454 } } @android/avdtp.h 25  gavd ; 26  gavd_¡»am ; 27  gavd_loÿl_£p ; 28  gavd_»mÙe_£p ; 29  savd_”rÜ { 30 ušt8_t mÿ‹gÜy ; 32 ušt8_t m”rÜ_code ; 33  mposix_”ºo ; 34 } m”r ; 37  #AVDTP_PSM 25 ) 40  #AVDTP_MEDIA_TRANSPORT 0x01 ) 41  #AVDTP_REPORTING 0x02 ) 42  #AVDTP_RECOVERY 0x03 ) 43  #AVDTP_CONTENT_PROTECTION 0x04 ) 44  #AVDTP_HEADER_COMPRESSION 0x05 ) 45  #AVDTP_MULTIPLEXING 0x06 ) 46  #AVDTP_MEDIA_CODEC 0x07 ) 47  #AVDTP_DELAY_REPORTING 0x08 ) 48  #AVDTP_ERRNO 0xff ) 51  #AVDTP_BAD_HEADER_FORMAT 0x01 ) 52  #AVDTP_BAD_LENGTH 0x11 ) 53  #AVDTP_BAD_ACP_SEID 0x12 ) 54  #AVDTP_SEP_IN_USE 0x13 ) 55  #AVDTP_SEP_NOT_IN_USE 0x14 ) 56  #AVDTP_BAD_SERV_CATEGORY 0x17 ) 57  #AVDTP_BAD_PAYLOAD_FORMAT 0x18 ) 58  #AVDTP_NOT_SUPPORTED_COMMAND 0x19 ) 59  #AVDTP_INVALID_CAPABILITIES 0x1A ) 60  #AVDTP_BAD_RECOVERY_TYPE 0x22 ) 61  #AVDTP_BAD_MEDIA_TRANSPORT_FORMAT 0x23 ) 62  #AVDTP_BAD_RECOVERY_FORMAT 0x25 ) 63  #AVDTP_BAD_ROHC_FORMAT 0x26 ) 64  #AVDTP_BAD_CP_FORMAT 0x27 ) 65  #AVDTP_BAD_MULTIPLEXING_FORMAT 0x28 ) 66  #AVDTP_UNSUPPORTED_CONFIGURATION 0x29 ) 67  #AVDTP_BAD_STATE 0x31 ) 70  #AVDTP_SEP_TYPE_SOURCE 0x00 ) 71  #AVDTP_SEP_TYPE_SINK 0x01 ) 74  #AVDTP_MEDIA_TYPE_AUDIO 0x00 ) 75  #AVDTP_MEDIA_TYPE_VIDEO 0x01 ) 76  #AVDTP_MEDIA_TYPE_MULTIMEDIA 0x02 ) 79 mAVDTP_STATE_IDLE , 80 mAVDTP_STATE_CONFIGURED , 81 mAVDTP_STATE_OPEN , 82 mAVDTP_STATE_STREAMING , 83 mAVDTP_STATE_CLOSING , 84 mAVDTP_STATE_ABORTING , 85 } tavd_¡©e_t ; 87  savd_£rviû_ÿ·bž™y { 88 ušt8_t mÿ‹gÜy ; 89 ušt8_t mËngth ; 90 ušt8_t md©a [0]; 91 } __©Œibu‹__ (( ·cked )); 93 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 95  savd_medŸ_codec_ÿ·bž™y { 96 ušt8_t mrç0 :4; 97 ušt8_t mmedŸ_ty³ :4; 98 ušt8_t mmedŸ_codec_ty³ ; 99 ušt8_t md©a [0]; 100 } __©Œibu‹__ (( ·cked )); 102 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 104  savd_medŸ_codec_ÿ·bž™y { 105 ušt8_t mmedŸ_ty³ :4; 106 ušt8_t mrç0 :4; 107 ušt8_t mmedŸ_codec_ty³ ; 108 ušt8_t md©a [0]; 109 } __©Œibu‹__ (( ·cked )); 115 (* tavd_¡»am_¡©e_cb è( tavd_¡»am * t¡»am , 116 tavd_¡©e_t tÞd_¡©e , 117 tavd_¡©e_t tÃw_¡©e , 118  tavd_”rÜ * t”r , 119 * tu£r_d©a ); 121 (* tavd_£t_cÚfigu¿tiÚ_cb è( tavd * t£ssiÚ , 122  tavd_¡»am * t¡»am , 123  tavd_”rÜ * t”r ); 126  savd_£p_cfm { 127 (* £t_cÚfigu¿tiÚ è( avd * £ssiÚ , 128  avd_loÿl_£p * l£p , 129  avd_¡»am * ¡»am , 130  avd_”rÜ * ”r , 131 * u£r_d©a ); 132 (* g‘_cÚfigu¿tiÚ è( avd * £ssiÚ , 133  avd_loÿl_£p * l£p , 134  avd_¡»am * ¡»am , 135  avd_”rÜ * ”r , 136 * u£r_d©a ); 137 (* Ý’ è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 138  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 139 * u£r_d©a ); 140 (* ¡¬t è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 141  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 142 * u£r_d©a ); 143 (* su¥’d è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 144  avd_¡»am * ¡»am , 145  avd_”rÜ * ”r , * u£r_d©a ); 146 (* þo£ è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 147  avd_¡»am * ¡»am , 148  avd_”rÜ * ”r , * u£r_d©a ); 149 (* abÜt è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 150  avd_¡»am * ¡»am , 151  avd_”rÜ * ”r , * u£r_d©a ); 152 (* »cÚfigu» è( avd * £ssiÚ , 153  avd_loÿl_£p * l£p , 154  avd_¡»am * ¡»am , 155  avd_”rÜ * ”r , * u£r_d©a ); 156 (* d–ay_»pÜt è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 157  avd_¡»am * ¡»am , 158  avd_”rÜ * ”r , * u£r_d©a ); 165  savd_£p_šd { 166 `gboÞ—n (* g‘_ÿ·bž™y è( avd * £ssiÚ , 167  avd_loÿl_£p * £p , 168 GSLi¡ ** ÿps , ušt8_t * ”r , 169 * u£r_d©a ); 170 `gboÞ—n (* £t_cÚfigu¿tiÚ è( avd * £ssiÚ , 171  avd_loÿl_£p * l£p , 172  avd_¡»am * ¡»am , 173 GSLi¡ * ÿps , 174 avd_£t_cÚfigu¿tiÚ_cb cb , 175 * u£r_d©a ); 176 `gboÞ—n (* g‘_cÚfigu¿tiÚ è( avd * £ssiÚ , 177  avd_loÿl_£p * l£p , 178 ušt8_t * ”r , * u£r_d©a ); 179 `gboÞ—n (* Ý’ è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 180  avd_¡»am * ¡»am , ušt8_t * ”r , 181 * u£r_d©a ); 182 `gboÞ—n (* ¡¬t è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 183  avd_¡»am * ¡»am , ušt8_t * ”r , 184 * u£r_d©a ); 185 `gboÞ—n (* su¥’d è( avd * £ssiÚ , 186  avd_loÿl_£p * £p , 187  avd_¡»am * ¡»am , ušt8_t * ”r , 188 * u£r_d©a ); 189 `gboÞ—n (* þo£ è( avd * £ssiÚ ,  avd_loÿl_£p * £p , 190  avd_¡»am * ¡»am , ušt8_t * ”r , 191 * u£r_d©a ); 192 (* abÜt è( avd * £ssiÚ ,  avd_loÿl_£p * £p , 193  avd_¡»am * ¡»am , ušt8_t * ”r , 194 * u£r_d©a ); 195 `gboÞ—n (* »cÚfigu» è( avd * £ssiÚ , 196  avd_loÿl_£p * l£p , 197 ušt8_t * ”r , * u£r_d©a ); 198 `gboÞ—n (* d–ay»pÜt è( avd * £ssiÚ , 199  avd_loÿl_£p * l£p , 200 ušt8_t r£id , ušt16_t d–ay , 201 ušt8_t * ”r , * u£r_d©a ); 204 (* tavd_discov”_cb_t è( tavd * t£ssiÚ , tGSLi¡ * t£ps , 205  tavd_”rÜ * t”r , * tu£r_d©a ); 206 (* tavd_discÚÃù_cb_t è(* tu£r_d©a ); 208  avd * `avd_Ãw ( fd , size_t imtu , size_ˆ omtu , ušt16_t v”siÚ ); 210  `avd_add_discÚÃù_cb ( avd * £ssiÚ , 211 avd_discÚÃù_cb_t cb , 212 * u£r_d©a ); 213 gboÞ—n `avd_»move_discÚÃù_cb ( avd * £ssiÚ ,  id ); 215  `avd_shutdown ( avd * £ssiÚ ); 217  `avd_uÄef ( avd * £ssiÚ ); 218  avd * `avd_»f (avd * £ssiÚ ); 220  avd_£rviû_ÿ·bž™y * `avd_£rviû_ÿp_Ãw ( ušt8_t ÿ‹gÜy , 221 cÚ¡ * d©a , 222  size ); 224  avd_£rviû_ÿ·bž™y * `avd_g‘_codec ( avd_»mÙe_£p * £p ); 226  `avd_discov” ( avd * £ssiÚ , avd_discov”_cb_t cb , 227 * u£r_d©a ); 229 gboÞ—n `avd_has_¡»am ( avd * £ssiÚ ,  avd_¡»am * ¡»am ); 231  `avd_¡»am_add_cb ( avd * £ssiÚ , 232  avd_¡»am * ¡»am , 233 avd_¡»am_¡©e_cb cb , * d©a ); 234 gboÞ—n `avd_¡»am_»move_cb ( avd * £ssiÚ , 235  avd_¡»am * ¡»am , 236  id ); 238 gboÞ—n `avd_¡»am_£t_Œª¥Üt ( avd_¡»am * ¡»am ,  fd , 239 size_t imtu , size_ˆ omtu ); 240 gboÞ—n `avd_¡»am_g‘_Œª¥Üt ( avd_¡»am * ¡»am , * sock , 241 ušt16_t * imtu , ušt16_ˆ* omtu , 242 GSLi¡ ** ÿps ); 243  avd_£rviû_ÿ·bž™y * `avd_¡»am_g‘_codec ( 244  avd_¡»am * ¡»am ); 245 gboÞ—n `avd_¡»am_has_ÿ·bž™›s ( avd_¡»am * ¡»am , 246 GSLi¡ * ÿps ); 247  avd_»mÙe_£p * `avd_¡»am_g‘_»mÙe_£p ( 248  avd_¡»am * ¡»am ); 250  `avd_£t_cÚfigu¿tiÚ ( avd * £ssiÚ , 251  avd_»mÙe_£p * r£p , 252  avd_loÿl_£p * l£p , 253 GSLi¡ * ÿps , 254  avd_¡»am ** ¡»am ); 256  `avd_g‘_cÚfigu¿tiÚ ( avd * £ssiÚ , 257  avd_¡»am * ¡»am ); 259  `avd_Ý’ ( avd * £ssiÚ ,  avd_¡»am * ¡»am ); 260  `avd_¡¬t ( avd * £ssiÚ ,  avd_¡»am * ¡»am ); 261  `avd_su¥’d ( avd * £ssiÚ ,  avd_¡»am * ¡»am ); 262  `avd_þo£ ( avd * £ssiÚ ,  avd_¡»am * ¡»am , 263 gboÞ—n immedŸ‹ ); 264  `avd_abÜt ( avd * £ssiÚ ,  avd_¡»am * ¡»am ); 265  `avd_d–ay_»pÜt ( avd * £ssiÚ ,  avd_¡»am * ¡»am , 266 ušt16_t d–ay ); 268  avd_loÿl_£p * `avd_»gi¡”_£p ( ušt8_t ty³ , ušt8_ˆ medŸ_ty³ , 269 ušt8_t codec_ty³ , 270 gboÞ—n d–ay_»pÜtšg , 271  avd_£p_šd * šd , 272  avd_£p_cfm * cfm , 273 * u£r_d©a ); 274  `avd_£p_£t_v’dÜ_codec ( avd_loÿl_£p * £p , ušt32_t v’dÜ_id , 275 ušt16_t codec_id ); 278  avd_»mÙe_£p * `avd_fšd_»mÙe_£p ( avd * £ssiÚ , 279  avd_loÿl_£p * l£p ); 281  `avd_uÄegi¡”_£p ( avd_loÿl_£p * £p ); 283 avd_¡©e_t `avd_£p_g‘_¡©e ( avd_loÿl_£p * £p ); 285  `avd_”rÜ_š™ ( avd_”rÜ * ”r , ušt8_t ty³ ,  id ); 286 cÚ¡ * `avd_¡»¼Ü ( avd_”rÜ * ”r ); 287 ušt8_t `avd_”rÜ_ÿ‹gÜy ( avd_”rÜ * ”r ); 288  `avd_”rÜ_”rÜ_code ( avd_”rÜ * ”r ); 289  `avd_”rÜ_posix_”ºo ( avd_”rÜ * ”r ); @android/avdtptest.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡dlib.h > 30  ~ 31  ~ 32  ~<¡dboÞ.h > 33  ~<”ºo.h > 35  ~ 36  ~ 37  ~ 39  ~ 41  ~"¤c/sh¬ed/utž.h " 42  ~"btio/btio.h " 43  ~"avd.h " 45  GMašLoÝ * gmašloÝ = NULL ; 46  gdev_rÞe = AVDTP_SEP_TYPE_SOURCE ; 47  boÞ g´ecÚf = çl£ ; 48  avd * gavd = NULL ; 49  avd_¡»am * gavd_¡»am = NULL ; 50  avd_loÿl_£p * gloÿl_£p = NULL ; 51  avd_»mÙe_£p * g»mÙe_£p = NULL ; 52  GIOChªÃl * gio = NULL ; 53  boÞ g»jeù = çl£ ; 54  bdaddr_t g¤c ; 55  bdaddr_t gd¡ ; 56  ušt16_t gv”siÚ = 0x0103; 57  gušt gmedŸ_¶ay” = 0; 58  gušt gmedŸ_»cÜd” = 0; 59  gušt gidË_id = 0; 61  boÞ gäagm’t = çl£ ; 64 mCMD_GET_CONF , 65 mCMD_OPEN , 66 mCMD_START , 67 mCMD_SUSPEND , 68 mCMD_CLOSE , 69 mCMD_ABORT , 70 mCMD_DELAY , 71 mCMD_NONE , 72 } gcommªd = CMD_NONE ; 74 cÚ¡  gsbc_codec [] = {0x00, 0x00, 0x11, 0x15, 0x02, 0x40}; 75 cÚ¡  gsbc_medŸ_äame [] = { 91  $·r£_commªd (cÚ¡ * cmd ) 93 ià(! `¡ºcmp ( cmd , "getconf", ("getconf"))) { 94 commªd = CMD_GET_CONF ; 95 } ià(! `¡ºcmp ( cmd , "open", ("open"))) { 96 commªd = CMD_OPEN ; 97 } ià(! `¡ºcmp ( cmd , "start", ("start"))) { 98 commªd = CMD_START ; 99 } ià(! `¡ºcmp ( cmd , "suspend", ("suspend"))) { 100 commªd = CMD_SUSPEND ; 101 } ià(! `¡ºcmp ( cmd , "close", ("close"))) { 102 commªd = CMD_CLOSE ; 103 } ià(! `¡ºcmp ( cmd , "abort", ("abort"))) { 104 commªd = CMD_ABORT ; 105 } ià(! `¡ºcmp ( cmd , "delay", ("delay"))) { 106 commªd = CMD_DELAY ; 108 `´štf ("UnknowÀcommªd '%s'\n", cmd ); 109 `´štf ("(getconf open start suspend close‡bort delay)\n"); 110 `ex™ (1); 112 } } 114  $£nd_commªd () 116 avd_¡©e_t ¡©e = `avd_£p_g‘_¡©e ( loÿl_£p ); 118  commªd ) { 119  CMD_GET_CONF : 120 `avd_g‘_cÚfigu¿tiÚ ( avd , avd_¡»am ); 122  CMD_OPEN : 123 ià( ¡©e =ð AVDTP_STATE_CONFIGURED ) 124 `avd_Ý’ ( avd , avd_¡»am ); 126  CMD_START : 127 ià( ¡©e =ð AVDTP_STATE_OPEN ) 128 `avd_¡¬t ( avd , avd_¡»am ); 130  CMD_SUSPEND : 131 ià( ¡©e =ð AVDTP_STATE_STREAMING ) 132 `avd_su¥’d ( avd , avd_¡»am ); 134  CMD_CLOSE : 135 ià( ¡©e =ð AVDTP_STATE_STREAMING ) 136 `avd_þo£ ( avd , avd_¡»am , FALSE ); 138  CMD_ABORT : 139 `avd_abÜt ( avd , avd_¡»am ); 141  CMD_DELAY : 142 `avd_d–ay_»pÜt ( avd , avd_¡»am , 250); 144  CMD_NONE : 148 } } 150  gboÞ—n $medŸ_wr™” ( gpoš‹r u£r_d©a ) 152 ušt16_t omtu ; 153  fd ; 154  to_wr™e ; 156 ià(! `avd_¡»am_g‘_Œª¥Üt ( avd_¡»am , & fd , NULL , & omtu , NULL)) 157  TRUE ; 159 ià( omtu < ( sbc_medŸ_äame )) 160 to_wr™e = omtu ; 162 to_wr™e = ( sbc_medŸ_äame ); 164 ià( `wr™e ( fd , sbc_medŸ_äame , to_wr™e ) < 0) 165  TRUE ; 167 `£nd_commªd (); 169  TRUE ; 170 } } 172  boÞ $¡¬t_medŸ_¶ay” () 174  fd ; 175 ušt16_t omtu ; 177 `´štf ("Media streaming started\n"); 179 ià( medŸ_¶ay” || ! avd_¡»am ) 180  çl£ ; 182 ià(! `avd_¡»am_g‘_Œª¥Üt ( avd_¡»am , & fd , NULL , & omtu , NULL)) 183  çl£ ; 185 medŸ_¶ay” = `g_timeout_add (200, medŸ_wr™” , NULL ); 186 ià(! medŸ_¶ay” ) 187  çl£ ; 189  Œue ; 190 } } 192  $¡Ý_medŸ_¶ay” () 194 ià(! medŸ_¶ay” ) 197 `´štf ("Media streaming stopped\n"); 199 `g_sourû_»move ( medŸ_¶ay” ); 200 medŸ_¶ay” = 0; 201 } } 203 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 205  s¹p_h—d” { 206  mcc :4; 207  mx :1; 208  mp :1; 209  mv :2; 211  m± :7; 212  mm :1; 214 ušt16_t m£qu’û_numb” ; 215 ušt32_t mtime¡amp ; 216 ušt32_t ms¤c ; 217 ušt32_t mc¤c [0]; 218 } __©Œibu‹__ (( ·cked )); 220 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 222  s¹p_h—d” { 223  mv :2; 224  mp :1; 225  mx :1; 226  mcc :4; 228  mm :1; 229  m± :7; 231 ušt16_t m£qu’û_numb” ; 232 ušt32_t mtime¡amp ; 233 ušt32_t ms¤c ; 234 ušt32_t mc¤c [0]; 235 } __©Œibu‹__ (( ·cked )); 241  gboÞ—n $medŸ_»ad” ( GIOChªÃl * sourû , GIOCÚd™iÚ cÚd™iÚ , 242 gpoš‹r d©a ) 244  buf [ UINT16_MAX ]; 245  ¹p_h—d” * ¹p = (*è buf ; 246  boÞ decode = çl£ ; 247 ušt16_t imtu ; 248  fd , »t ; 250 ià(! `avd_¡»am_g‘_Œª¥Üt ( avd_¡»am , & fd , & imtu , NULL , NULL)) 251  TRUE ; 253 »t = `»ad ( fd , buf , imtu ); 254 ià( »t < 0) { 255 `´štf ("R—dšg fažed (%s)\n", `¡»¼Ü ( ”ºo )); 256  TRUE ; 259 ià( »t < (è(* ¹p )) { 260 `´štf ("NÙƒnough medŸ d©¨»ûived (%u by‹s)", »t ); 261  TRUE ; 264 ià(! decode ) { 265 `´štf ("V=%u P=%u X=%u CC=%u M=%u PT=%u SeqNr=%d\n", 266 ¹p -> v ,„-> p ,„-> x ,„-> cc ,„-> m ,„-> ± , 267 `be16_to_ýu ( ¹p -> £qu’û_numb” )); 268 decode = Œue ; 271 `£nd_commªd (); 273  TRUE ; 274 } } 276  boÞ $¡¬t_medŸ_»cÜd” () 278  fd ; 279 ušt16_t omtu ; 280 GIOChªÃl * chª ; 282 `´štf ("Media„ecording started\n"); 284 ià( medŸ_»cÜd” || ! avd_¡»am ) 285  çl£ ; 287 ià(! `avd_¡»am_g‘_Œª¥Üt ( avd_¡»am , & fd , NULL , & omtu , NULL)) 288  çl£ ; 290 chª = `g_io_chªÃl_unix_Ãw ( fd ); 292 medŸ_»cÜd” = `g_io_add_w©ch ( chª , G_IO_IN , medŸ_»ad” , NULL ); 293 `g_io_chªÃl_uÄef ( chª ); 295 ià(! medŸ_»cÜd” ) 296  çl£ ; 298  Œue ; 299 } } 301  $¡Ý_medŸ_»cÜd” () 303 ià(! medŸ_»cÜd” ) 306 `´štf ("Media„ecording stopped\n"); 308 `g_sourû_»move ( medŸ_»cÜd” ); 309 medŸ_»cÜd” = 0; 310 } } 312  $£t_cÚfigu¿tiÚ_cfm ( avd * £ssiÚ , 313  avd_loÿl_£p * l£p , 314  avd_¡»am * ¡»am , 315  avd_”rÜ * ”r , 316 * u£r_d©a ) 318 `´štf ("%s\n", __func__ ); 320 ià( ´ecÚf ) 321 `avd_Ý’ ( avd , avd_¡»am ); 322 } } 324  $g‘_cÚfigu¿tiÚ_cfm ( avd * £ssiÚ , 325  avd_loÿl_£p * l£p , 326  avd_¡»am * ¡»am , 327  avd_”rÜ * ”r , 328 * u£r_d©a ) 330 `´štf ("%s\n", __func__ ); 331 } } 333  $discÚÃù_cb (* u£r_d©a ) 335 `´štf ("Disconnected\n"); 337 `g_maš_loÝ_qu™ ( mašloÝ ); 338 } } 340  $discov”_cb ( avd * £ssiÚ , GSLi¡ * £ps , 341  avd_”rÜ * ”r , * u£r_d©a ) 343  avd_£rviû_ÿ·bž™y * £rviû ; 344 GSLi¡ * ÿps = NULL ; 345  »t ; 347 »mÙe_£p = `avd_fšd_»mÙe_£p ( avd , loÿl_£p ); 348 ià(! »mÙe_£p ) { 349 `´štf ("Unableo find matchingƒndpoint\n"); 350 `avd_shutdown ( £ssiÚ ); 354 `´štf ("Matchingƒndpoint found\n"); 356 £rviû = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_TRANSPORT , NULL , 0); 357 ÿps = `g_¦i¡_­³nd (ÿps, £rviû ); 359 £rviû = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_CODEC , sbc_codec , 360 ( sbc_codec )); 361 ÿps = `g_¦i¡_­³nd (ÿps, £rviû ); 363 »t = `avd_£t_cÚfigu¿tiÚ ( avd , »mÙe_£p , loÿl_£p , ÿps , 364 & avd_¡»am ); 366 `g_¦i¡_ä“_fuÎ ( ÿps , g_ä“ ); 368 ià( »t < 0) { 369 `´štf ("FažedØ£ˆcÚfigu¿tiÚ (%s)\n", `¡»¼Ü (- »t )); 370 `avd_shutdown ( £ssiÚ ); 372 } } 374  $cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 376 ušt16_t imtu , omtu ; 377 GE¼Ü * g”r = NULL ; 378  fd ; 380 ià( ”r ) { 381 `´štf ("%s\n", ”r -> mes§ge ); 382 `g_maš_loÝ_qu™ ( mašloÝ ); 386 `bt_io_g‘ ( chª , & g”r , 387 BT_IO_OPT_IMTU , & imtu , 388 BT_IO_OPT_OMTU , & omtu , 389 BT_IO_OPT_DEST_BDADDR , & d¡ , 390 BT_IO_OPT_INVALID ); 391 ià( g”r ) { 392 `´štf ("%s\n", g”r -> mes§ge ); 393 `g_maš_loÝ_qu™ ( mašloÝ ); 397 `´štf ("CÚÃùed (imtu=%d omtu=%d)\n", imtu , omtu ); 399 fd = `g_io_chªÃl_unix_g‘_fd ( chª ); 401 ià( avd && avd_¡»am ) { 402 ià(! `avd_¡»am_£t_Œª¥Üt ( avd_¡»am , fd , imtu , omtu )) { 403 `´štf ("avdtp_stream_set_transport: failed\n"); 404 `g_maš_loÝ_qu™ ( mašloÝ ); 407 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chª , FALSE ); 409 `£nd_commªd (); 414 avd = `avd_Ãw ( fd , imtu , omtu , v”siÚ ); 415 ià(! avd ) { 416 `´štf ("Failedo create‡vdtp instance\n"); 417 `g_maš_loÝ_qu™ ( mašloÝ ); 421 `avd_add_discÚÃù_cb ( avd , discÚÃù_cb , NULL ); 423 ià( ´ecÚf ) { 424  »t ; 426 »t = `avd_discov” ( avd , discov”_cb , NULL ); 427 ià( »t < 0) { 428 `´štf ("avd_discov” fažed: %s", `¡»¼Ü (- »t )); 429 `g_maš_loÝ_qu™ ( mašloÝ ); 432 } } 434  GIOChªÃl * $do_cÚÃù ( GE¼Ü ** ”r ) 436 ià( äagm’t ) 437  `bt_io_cÚÃù ( cÚÃù_cb , NULL , NULL, ”r , 438 BT_IO_OPT_SOURCE_BDADDR , & ¤c , 439 BT_IO_OPT_DEST_BDADDR , & d¡ , 440 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 441 BT_IO_OPT_PSM , AVDTP_PSM , 442 BT_IO_OPT_MTU , 48, 443 BT_IO_OPT_INVALID ); 445  `bt_io_cÚÃù ( cÚÃù_cb , NULL , NULL, ”r , 446 BT_IO_OPT_SOURCE_BDADDR , & ¤c , 447 BT_IO_OPT_DEST_BDADDR , & d¡ , 448 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 449 BT_IO_OPT_PSM , AVDTP_PSM , 450 BT_IO_OPT_INVALID ); 451 } } 453  $Ý’_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 454  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 455 * u£r_d©a ) 457 GE¼Ü * g”r = NULL ; 459 `´štf ("%s\n", __func__ ); 461 `do_cÚÃù (& g”r ); 462 ià( g”r ) { 463 `´štf ("cÚÃù fažed: %s\n", g”r -> mes§ge ); 464 `g_”rÜ_ä“ ( g”r ); 465 `g_maš_loÝ_qu™ ( mašloÝ ); 467 } } 469  $¡¬t_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 470  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 471 * u£r_d©a ) 473 `´štf ("%s\n", __func__ ); 475 ià( dev_rÞe =ð AVDTP_SEP_TYPE_SOURCE ) 476 `¡¬t_medŸ_¶ay” (); 478 `¡¬t_medŸ_»cÜd” (); 479 } } 481  $su¥’d_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 482  avd_¡»am * ¡»am , 483  avd_”rÜ * ”r , * u£r_d©a ) 485 `´štf ("%s\n", __func__ ); 487 ià( dev_rÞe =ð AVDTP_SEP_TYPE_SOURCE ) 488 `¡Ý_medŸ_¶ay” (); 490 `¡Ý_medŸ_»cÜd” (); 491 } } 493  $þo£_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 494  avd_¡»am * ¡»am , 495  avd_”rÜ * ”r , * u£r_d©a ) 497 `´štf ("%s\n", __func__ ); 499 ià( dev_rÞe =ð AVDTP_SEP_TYPE_SOURCE ) 500 `¡Ý_medŸ_¶ay” (); 502 `¡Ý_medŸ_»cÜd” (); 504 avd_¡»am = NULL ; 505 } } 507  $abÜt_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 508  avd_¡»am * ¡»am , 509  avd_”rÜ * ”r , * u£r_d©a ) 511 `´štf ("%s\n", __func__ ); 513 ià( dev_rÞe =ð AVDTP_SEP_TYPE_SOURCE ) 514 `¡Ý_medŸ_¶ay” (); 516 `¡Ý_medŸ_»cÜd” (); 518 avd_¡»am = NULL ; 519 } } 521  $»cÚfigu»_cfm ( avd * £ssiÚ , 522  avd_loÿl_£p * l£p , 523  avd_¡»am * ¡»am , 524  avd_”rÜ * ”r , * u£r_d©a ) 526 `´štf ("%s\n", __func__ ); 527 } } 529  $d–ay_»pÜt_cfm ( avd * £ssiÚ , 530  avd_loÿl_£p * l£p , 531  avd_¡»am * ¡»am , 532  avd_”rÜ * ”r , * u£r_d©a ) 534 `´štf ("%s\n", __func__ ); 535 } } 537  avd_£p_cfm g£p_cfm = { 538 . £t_cÚfigu¿tiÚ = £t_cÚfigu¿tiÚ_cfm , 539 . gg‘_cÚfigu¿tiÚ = g‘_cÚfigu¿tiÚ_cfm , 540 . gÝ’ = Ý’_cfm , 541 . g¡¬t = ¡¬t_cfm , 542 . gsu¥’d = su¥’d_cfm , 543 . gþo£ = þo£_cfm , 544 . gabÜt = abÜt_cfm , 545 . g»cÚfigu» = »cÚfigu»_cfm , 546 . gd–ay_»pÜt = d–ay_»pÜt_cfm , 549  gboÞ—n $g‘_ÿ·bž™y_šd ( avd * £ssiÚ , 550  avd_loÿl_£p * £p , 551 GSLi¡ ** ÿps , ušt8_t * ”r , 552 * u£r_d©a ) 554  avd_£rviû_ÿ·bž™y * £rviû ; 555  i ; 557 `´štf ("%s\n", __func__ ); 559 ià( idË_id > 0) { 560 `g_sourû_»move ( idË_id ); 561 idË_id = 0; 564 ià( »jeù ) 565  FALSE ; 567 * ÿps = NULL ; 569 £rviû = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_TRANSPORT , NULL , 0); 570 * ÿps = `g_¦i¡_­³nd (*ÿps, £rviû ); 572 £rviû = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_CODEC , sbc_codec , 573 ( sbc_codec )); 574 * ÿps = `g_¦i¡_­³nd (*ÿps, £rviû ); 576 ià( äagm’t ) 577  i = 0; i < 10; i++) { 578 £rviû = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_CODEC , 579 sbc_codec , 580 ( sbc_codec )); 581 * ÿps = `g_¦i¡_­³nd (*ÿps, £rviû ); 584  TRUE ; 585 } } 587  gboÞ—n $£t_cÚfigu¿tiÚ_šd ( avd * £ssiÚ , 588  avd_loÿl_£p * l£p , 589  avd_¡»am * ¡»am , 590 GSLi¡ * ÿps , 591 avd_£t_cÚfigu¿tiÚ_cb cb , 592 * u£r_d©a ) 594 `´štf ("%s\n", __func__ ); 596 ià( »jeù ) 597  FALSE ; 599 ià( idË_id > 0) { 600 `g_sourû_»move ( idË_id ); 601 idË_id = 0; 604 avd_¡»am = ¡»am ; 606 `cb ( £ssiÚ , ¡»am , NULL ); 608 `£nd_commªd (); 610  TRUE ; 611 } } 613  gboÞ—n $g‘_cÚfigu¿tiÚ_šd ( avd * £ssiÚ , 614  avd_loÿl_£p * l£p , 615 ušt8_t * ”r , * u£r_d©a ) 617 `´štf ("%s\n", __func__ ); 619 ià( »jeù ) 620  FALSE ; 622  TRUE ; 623 } } 625  gboÞ—n $Ý’_šd ( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 626  avd_¡»am * ¡»am , ušt8_t * ”r , 627 * u£r_d©a ) 629 `´štf ("%s\n", __func__ ); 631 ià( »jeù ) 632  FALSE ; 634 `£nd_commªd (); 636  TRUE ; 637 } } 639  gboÞ—n $¡¬t_šd ( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 640  avd_¡»am * ¡»am , ušt8_t * ”r , 641 * u£r_d©a ) 643 `´štf ("%s\n", __func__ ); 645 ià( »jeù ) 646  FALSE ; 648 ià( dev_rÞe =ð AVDTP_SEP_TYPE_SOURCE ) 649 `¡¬t_medŸ_¶ay” (); 651 `¡¬t_medŸ_»cÜd” (); 653 `£nd_commªd (); 655  TRUE ; 656 } } 658  gboÞ—n $su¥’d_šd ( avd * £ssiÚ , 659  avd_loÿl_£p * £p , 660  avd_¡»am * ¡»am , ušt8_t * ”r , 661 * u£r_d©a ) 663 `´štf ("%s\n", __func__ ); 665 ià( »jeù ) 666  FALSE ; 668 ià( dev_rÞe =ð AVDTP_SEP_TYPE_SOURCE ) 669 `¡Ý_medŸ_¶ay” (); 671 `¡Ý_medŸ_»cÜd” (); 673  TRUE ; 674 } } 676  gboÞ—n $þo£_šd ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 677  avd_¡»am * ¡»am , ušt8_t * ”r , 678 * u£r_d©a ) 680 `´štf ("%s\n", __func__ ); 682 ià( »jeù ) 683  FALSE ; 685 ià( dev_rÞe =ð AVDTP_SEP_TYPE_SOURCE ) 686 `¡Ý_medŸ_¶ay” (); 688 `¡Ý_medŸ_»cÜd” (); 690 avd_¡»am = NULL ; 692  TRUE ; 693 } } 695  $abÜt_šd ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 696  avd_¡»am * ¡»am , ušt8_t * ”r , 697 * u£r_d©a ) 699 `´štf ("%s\n", __func__ ); 701 ià( dev_rÞe =ð AVDTP_SEP_TYPE_SOURCE ) 702 `¡Ý_medŸ_¶ay” (); 704 `¡Ý_medŸ_»cÜd” (); 706 avd_¡»am = NULL ; 707 } } 709  gboÞ—n $»cÚfigu»_šd ( avd * £ssiÚ , 710  avd_loÿl_£p * l£p , 711 ušt8_t * ”r , * u£r_d©a ) 713 `´štf ("%s\n", __func__ ); 715 ià( »jeù ) 716  FALSE ; 718  TRUE ; 719 } } 721  gboÞ—n $d–ay»pÜt_šd ( avd * £ssiÚ , 722  avd_loÿl_£p * l£p , 723 ušt8_t r£id , ušt16_t d–ay , 724 ušt8_t * ”r , * u£r_d©a ) 726 `´štf ("%s\n", __func__ ); 728 ià( »jeù ) 729  FALSE ; 731  TRUE ; 732 } } 734  avd_£p_šd g£p_šd = { 735 . g‘_ÿ·bž™y = g‘_ÿ·bž™y_šd , 736 . g£t_cÚfigu¿tiÚ = £t_cÚfigu¿tiÚ_šd , 737 . gg‘_cÚfigu¿tiÚ = g‘_cÚfigu¿tiÚ_šd , 738 . gÝ’ = Ý’_šd , 739 . gþo£ = þo£_šd , 740 . g¡¬t = ¡¬t_šd , 741 . gsu¥’d = su¥’d_šd , 742 . gabÜt = abÜt_šd , 743 . g»cÚfigu» = »cÚfigu»_šd , 744 . gd–ay»pÜt = d–ay»pÜt_šd , 747  $u§ge () 749 `´štf ("avd‹¡ - AVDTPe¡šg v” %s\n", VERSION ); 750 `´štf ("Usage:\n" 752 `´štf ("options:\n" 762 } } 764  ÝtiÚ gmaš_ÝtiÚs [] = { 778  GIOChªÃl * $do_li¡’ ( GE¼Ü ** ”r ) 780 ià( äagm’t ) 781  `bt_io_li¡’ ( cÚÃù_cb , NULL , NULL, NULL, ”r , 782 BT_IO_OPT_SOURCE_BDADDR , & ¤c , 783 BT_IO_OPT_PSM , AVDTP_PSM , 784 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 785 BT_IO_OPT_MTU , 48, 786 BT_IO_OPT_INVALID ); 788  `bt_io_li¡’ ( cÚÃù_cb , NULL , NULL, NULL, ”r , 789 BT_IO_OPT_SOURCE_BDADDR , & ¤c , 790 BT_IO_OPT_PSM , AVDTP_PSM , 791 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 792 BT_IO_OPT_INVALID ); 793 } } 795  $maš ( ¬gc , * ¬gv []) 797 GE¼Ü * ”r = NULL ; 798  Ýt ; 800 `baýy (& ¤c , BDADDR_ANY ); 801 `baýy (& d¡ , BDADDR_ANY ); 803 mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 804 ià(! mašloÝ ) { 805 `´štf ("Failedo create main†oop\n"); 807 `ex™ (1); 810 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "d:hi:s:c:v:lrfp", 811 maš_ÝtiÚs , NULL )è!ð EOF ) { 812  Ýt ) { 814 ià(! `¡ºcmp ( Ýrg , "hci", 3)) 815 `hci_devba ( `©oi ( Ýrg + 3), & ¤c ); 817 `¡r2ba ( Ýrg , & ¤c ); 820 ià(! `¡ºÿ£cmp ( Ýrg , "SRC", ("SRC"))) { 821 dev_rÞe = AVDTP_SEP_TYPE_SOURCE ; 822 } ià(! `¡ºÿ£cmp ( Ýrg , "SINK", 824 dev_rÞe = AVDTP_SEP_TYPE_SINK ; 826 `u§ge (); 827 `ex™ (0); 831 ià( `¡r2ba ( Ýrg , & d¡ ) < 0) { 832 `u§ge (); 833 `ex™ (0); 837 `baýy (& d¡ , BDADDR_ANY ); 840 »jeù = Œue ; 843 äagm’t = Œue ; 846 ´ecÚf = Œue ; 849 `·r£_commªd ( Ýrg ); 852 v”siÚ = `¡¹Þ ( Ýrg , NULL , 0); 853 ià( v”siÚ != 0x0100 && version != 0x0102 && 854 v”siÚ != 0x0103) { 855 `´štf ("invalid version\n"); 856 `ex™ (0); 862 `u§ge (); 863 `ex™ (0); 867 loÿl_£p = `avd_»gi¡”_£p ( dev_rÞe , AVDTP_MEDIA_TYPE_AUDIO , 868 0x00, TRUE , & £p_šd , & £p_cfm , NULL ); 869 ià(! loÿl_£p ) { 870 `´štf ("Failedo„egister sep\n"); 871 `ex™ (0); 874 ià(! `bacmp (& d¡ , BDADDR_ANY )) { 875 `´štf ("Listening...\n"); 876 io = `do_li¡’ (& ”r ); 878 `´štf ("Connecting...\n"); 879 io = `do_cÚÃù (& ”r ); 882 ià(! io ) { 883 `´štf ("Fažed: %s\n", ”r -> mes§ge ); 884 `g_”rÜ_ä“ ( ”r ); 885 `ex™ (0); 888 `g_maš_loÝ_run ( mašloÝ ); 890 `´štf ("Done\n"); 892 `avd_uÄef ( avd ); 893 avd = NULL ; 895 `g_maš_loÝ_uÄef ( mašloÝ ); 896 mašloÝ = NULL ; 899 } } @android/avrcp-lib.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dboÞ.h > 29  ~ 30  ~<”ºo.h > 31  ~<¡ršg.h > 33  ~"lib/blu‘oÙh.h " 35  ~"¤c/sh¬ed/utž.h " 36  ~"¤c/log.h " 38  ~"avùp.h " 39  ~"avrý-lib.h " 43  #AVRCP_PACKET_TYPE_SINGLE 0x00 ) 44  #AVRCP_PACKET_TYPE_START 0x01 ) 45  #AVRCP_PACKET_TYPE_CONTINUING 0x02 ) 46  #AVRCP_PACKET_TYPE_END 0x03 ) 48  #AVRCP_CHARSET_UTF8 0x006a ) 50 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 52  savrý_h—d” { 53 ušt8_t mcom·ny_id [3]; 54 ušt8_t mpdu_id ; 55 ušt8_t m·ck‘_ty³ :2; 56 ušt8_t mrsvd :6; 57 ušt16_t m·¿ms_Ën ; 58 ušt8_t m·¿ms [0]; 59 } __©Œibu‹__ (( ·cked )); 60  #AVRCP_HEADER_LENGTH 7 ) 62 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 64  savrý_h—d” { 65 ušt8_t mcom·ny_id [3]; 66 ušt8_t mpdu_id ; 67 ušt8_t mrsvd :6; 68 ušt8_t m·ck‘_ty³ :2; 69 ušt16_t m·¿ms_Ën ; 70 ušt8_t m·¿ms [0]; 71 } __©Œibu‹__ (( ·cked )); 72  #AVRCP_HEADER_LENGTH 7 ) 78  savrý_browsšg_h—d” { 79 ušt8_t mpdu_id ; 80 ušt16_t m·¿ms_Ën ; 81 ušt8_t m·¿ms [0]; 82 } __©Œibu‹__ (( ·cked )); 83  #AVRCP_BROWSING_HEADER_LENGTH 3 ) 85  sg‘_ÿ·bž™›s_»q { 86 ušt8_t mÿp ; 87 ušt8_t m·¿ms [0]; 88 } __©Œibu‹__ (( ·cked )); 90  sg‘_ÿ·bž™›s_r¥ { 91 ušt8_t mÿp ; 92 ušt8_t mnumb” ; 93 ušt8_t m·¿ms [0]; 94 } __©Œibu‹__ (( ·cked )); 96  sli¡_©Œibu‹s_r¥ { 97 ušt8_t mnumb” ; 98 ušt8_t m·¿ms [0]; 99 } __©Œibu‹__ (( ·cked )); 101  sli¡_v®ues_»q { 102 ušt8_t m©Œ ; 103 } __©Œibu‹__ (( ·cked )); 105  sli¡_v®ues_r¥ { 106 ušt8_t mnumb” ; 107 ušt8_t m·¿ms [0]; 108 } __©Œibu‹__ (( ·cked )); 110  sg‘_v®ue_»q { 111 ušt8_t mnumb” ; 112 ušt8_t m©Œs [0]; 113 } __©Œibu‹__ (( ·cked )); 115  s©Œ_v®ue { 116 ušt8_t m©Œ ; 117 ušt8_t mv®ue ; 118 } __©Œibu‹__ (( ·cked )); 120  sv®ue_r¥ { 121 ušt8_t mnumb” ; 122  ©Œ_v®ue mv®ues [0]; 123 } __©Œibu‹__ (( ·cked )); 125  s£t_v®ue_»q { 126 ušt8_t mnumb” ; 127  ©Œ_v®ue mv®ues [0]; 128 } __©Œibu‹__ (( ·cked )); 130  sg‘_©Œibu‹_‹xt_»q { 131 ušt8_t mnumb” ; 132 ušt8_t m©Œs [0]; 133 } __©Œibu‹__ (( ·cked )); 135  s‹xt_v®ue { 136 ušt8_t m©Œ ; 137 ušt16_t mch¬£t ; 138 ušt8_t mËn ; 139  md©a [0]; 140 } __©Œibu‹__ (( ·cked )); 142  sg‘_©Œibu‹_‹xt_r¥ { 143 ušt8_t mnumb” ; 144  ‹xt_v®ue mv®ues [0]; 145 } __©Œibu‹__ (( ·cked )); 147  sg‘_v®ue_‹xt_»q { 148 ušt8_t m©Œ ; 149 ušt8_t mnumb” ; 150 ušt8_t mv®ues [0]; 151 } __©Œibu‹__ (( ·cked )); 153  sg‘_v®ue_‹xt_r¥ { 154 ušt8_t mnumb” ; 155  ‹xt_v®ue mv®ues [0]; 156 } __©Œibu‹__ (( ·cked )); 158  smedŸ_™em { 159 ušt32_t m©Œ ; 160 ušt16_t mch¬£t ; 161 ušt16_t mËn ; 162  md©a [0]; 163 } __©Œibu‹__ (( ·cked )); 165  sg‘_–em’t_©Œibu‹s_»q { 166 ušt64_t mid ; 167 ušt8_t mnumb” ; 168 ušt32_t m©Œs [0]; 169 } __©Œibu‹__ (( ·cked )); 171  sg‘_–em’t_©Œibu‹s_r¥ { 172 ušt8_t mnumb” ; 173  medŸ_™em m™ems [0]; 174 } __©Œibu‹__ (( ·cked )); 176  sg‘_¶ay_¡©us_r¥ { 177 ušt32_t mdu¿tiÚ ; 178 ušt32_t mpos™iÚ ; 179 ušt8_t m¡©us ; 180 } __©Œibu‹__ (( ·cked )); 182  s»gi¡”_nÙifiÿtiÚ_»q { 183 ušt8_t mev’t ; 184 ušt32_t mš‹rv® ; 185 } __©Œibu‹__ (( ·cked )); 187  s»gi¡”_nÙifiÿtiÚ_r¥ { 188 ušt8_t mev’t ; 189 ušt8_t md©a [0]; 190 } __©Œibu‹__ (( ·cked )); 192  s£t_vÞume_»q { 193 ušt8_t mv®ue ; 194 } __©Œibu‹__ (( ·cked )); 196  s£t_vÞume_r¥ { 197 ušt8_t mv®ue ; 198 } __©Œibu‹__ (( ·cked )); 200  s£t_add»s£d_»q { 201 ušt16_t mid ; 202 } __©Œibu‹__ (( ·cked )); 204  s£t_add»s£d_r¥ { 205 ušt8_t m¡©us ; 206 } __©Œibu‹__ (( ·cked )); 208  s£t_brow£d_»q { 209 ušt16_t mid ; 210 } __©Œibu‹__ (( ·cked )); 212  s£t_brow£d_r¥ { 213 ušt8_t m¡©us ; 214 ušt16_t mcouÁ” ; 215 ušt32_t m™ems ; 216 ušt16_t mch¬£t ; 217 ušt8_t md•th ; 218 ušt8_t md©a [0]; 219 } __©Œibu‹__ (( ·cked )); 221  sg‘_fÞd”_™ems_»q { 222 ušt8_t mscÝe ; 223 ušt32_t m¡¬t ; 224 ušt32_t m’d ; 225 ušt8_t mnumb” ; 226 ušt32_t m©Œs [0]; 227 } __©Œibu‹__ (( ·cked )); 229  sg‘_fÞd”_™ems_r¥ { 230 ušt8_t m¡©us ; 231 ušt16_t mcouÁ” ; 232 ušt16_t mnumb” ; 233 ušt8_t md©a [0]; 234 } __©Œibu‹__ (( ·cked )); 236  schªge_·th_»q { 237 ušt16_t mcouÁ” ; 238 ušt8_t mdœeùiÚ ; 239 ušt64_t muid ; 240 } __©Œibu‹__ (( ·cked )); 242  schªge_·th_r¥ { 243 ušt8_t m¡©us ; 244 ušt32_t m™ems ; 245 } __©Œibu‹__ (( ·cked )); 247  sg‘_™em_©Œibu‹s_»q { 248 ušt8_t mscÝe ; 249 ušt64_t muid ; 250 ušt16_t mcouÁ” ; 251 ušt8_t mnumb” ; 252 ušt32_t m©Œs [0]; 253 } __©Œibu‹__ (( ·cked )); 255  sg‘_™em_©Œibu‹s_r¥ { 256 ušt8_t m¡©us ; 257 ušt8_t mnumb” ; 258  medŸ_™em m™ems [0]; 259 } __©Œibu‹__ (( ·cked )); 261  s¶ay_™em_»q { 262 ušt8_t mscÝe ; 263 ušt64_t muid ; 264 ušt16_t mcouÁ” ; 265 } __©Œibu‹__ (( ·cked )); 267  s¶ay_™em_r¥ { 268 ušt8_t m¡©us ; 269 } __©Œibu‹__ (( ·cked )); 271  s£¬ch_»q { 272 ušt16_t mch¬£t ; 273 ušt16_t mËn ; 274  m¡ršg [0]; 275 } __©Œibu‹__ (( ·cked )); 277  s£¬ch_r¥ { 278 ušt8_t m¡©us ; 279 ušt16_t mcouÁ” ; 280 ušt32_t m™ems ; 281 } __©Œibu‹__ (( ·cked )); 283  sadd_to_now_¶ayšg_»q { 284 ušt8_t mscÝe ; 285 ušt64_t muid ; 286 ušt16_t mcouÁ” ; 287 } __©Œibu‹__ (( ·cked )); 289  sadd_to_now_¶ayšg_r¥ { 290 ušt8_t m¡©us ; 291 } __©Œibu‹__ (( ·cked )); 293  savrý_cÚŒÞ_hªdËr { 294 ušt8_t mid ; 295 ušt8_t mcode ; 296 ušt8_t mr¥ ; 297 ssize_t (* func è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 298 ušt16_t m·¿ms_Ën , ušt8_t * m·¿ms , * mu£r_d©a ); 301  savrý_browsšg_hªdËr { 302 ušt8_t mid ; 303 ssize_t (* func è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 304 ušt16_t m·¿ms_Ën , ušt8_t * m·¿ms , * mu£r_d©a ); 307  savrý_cÚtšušg { 308 ušt8_t mpdu_id ; 309  iovec mpdu ; 312  savrý { 313  avùp * mcÚn ; 314  avrý_¶ay” * m¶ay” ; 316 cÚ¡  avrý_cÚŒÞ_hªdËr * mcÚŒÞ_hªdËrs ; 317 * mcÚŒÞ_d©a ; 318  mcÚŒÞ_id ; 319 ušt16_t mcÚŒÞ_mtu ; 321  avrý_cÚtšušg * mcÚtšušg ; 323 cÚ¡  avrý_·s¡hrough_hªdËr * m·s¡hrough_hªdËrs ; 324 * m·s¡hrough_d©a ; 325  m·s¡hrough_id ; 327 cÚ¡  avrý_browsšg_hªdËr * mbrowsšg_hªdËrs ; 328 * mbrowsšg_d©a ; 329  mbrowsšg_id ; 331 avrý_de¡roy_cb_t mde¡roy ; 332 * mde¡roy_d©a ; 335  savrý_¶ay” { 336 cÚ¡  avrý_cÚŒÞ_šd * mšd ; 337 cÚ¡  avrý_cÚŒÞ_cfm * mcfm ; 339 * mu£r_d©a ; 342  šlše ušt32_t $Áoh24 (cÚ¡ ušt8_t ¤c [3]) 344  ¤c [0] << 16 | src[1] << 8 | src[2]; 345 } } 347  šlše  $htÚ24 ( ušt8_t d¡ [3], ušt32_t ¤c ) 349 d¡ [0] = ( ¤c & 0xff0000) >> 16; 350 d¡ [1] = ( ¤c & 0x00ff00) >> 8; 351 d¡ [2] = ( ¤c & 0x0000ff); 352 } } 354  $cÚtšušg_ä“ ( avrý_cÚtšušg * cÚtšušg ) 356 `g_ä“ ( cÚtšušg -> pdu . iov_ba£ ); 357 `g_ä“ ( cÚtšušg ); 358 } } 360  $avrý_shutdown ( avrý * £ssiÚ ) 362 ià( £ssiÚ -> cÚn ) { 363 ià( £ssiÚ -> cÚŒÞ_id > 0) 364 `avùp_uÄegi¡”_pdu_hªdËr ( £ssiÚ -> cÚn , 365 £ssiÚ -> cÚŒÞ_id ); 366 ià( £ssiÚ -> ·s¡hrough_id > 0) 367 `avùp_uÄegi¡”_·s¡hrough_hªdËr ( £ssiÚ -> cÚn , 368 £ssiÚ -> ·s¡hrough_id ); 371 `avùp_£t_de¡roy_cb ( £ssiÚ -> cÚn , NULL , NULL); 372 `avùp_shutdown ( £ssiÚ -> cÚn ); 375 ià( £ssiÚ -> de¡roy ) 376 £ssiÚ -> `de¡roy (£ssiÚ-> de¡roy_d©a ); 378 ià( £ssiÚ -> cÚtšušg ) 379 `cÚtšušg_ä“ ( £ssiÚ -> cÚtšušg ); 381 `g_ä“ ( £ssiÚ -> ¶ay” ); 382 `g_ä“ ( £ssiÚ ); 383 } } 385  avrý_h—d” * $·r£_pdu ( ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ ) 387  avrý_h—d” * pdu ; 389 ià(! Ý”ªds || Ý”ªd_couÁ < (* pdu )) { 390 `”rÜ ("AVRCP:…ack‘oØsm®È(%zu by‹s)", Ý”ªd_couÁ ); 391  NULL ; 394 pdu = (*è Ý”ªds ; 395 pdu -> ·¿ms_Ën = `Áohs (pdu->params_len); 397 ià( Ý”ªd_couÁ !ð pdu -> ·¿ms_Ën + (*pdu)) { 398 `”rÜ ("AVRCP: invalid…arameter†ength (%u bytes)", 399 pdu -> ·¿ms_Ën ); 400  NULL ; 403  pdu ; 404 } } 406  avrý_browsšg_h—d” * $·r£_browsšg_pdu ( ušt8_t * Ý”ªds , 407 size_t Ý”ªd_couÁ ) 409  avrý_browsšg_h—d” * pdu ; 411 ià(! Ý”ªds || Ý”ªd_couÁ < (* pdu )) { 412 `”rÜ ("AVRCP:…ack‘oØsm®È(%zu by‹s)", Ý”ªd_couÁ ); 413  NULL ; 416 pdu = (*è Ý”ªds ; 417 pdu -> ·¿ms_Ën = `Áohs (pdu->params_len); 419 ià( Ý”ªd_couÁ !ð pdu -> ·¿ms_Ën + (*pdu)) { 420 `”rÜ ("AVRCP: invalid…arameter†ength (%u bytes)", 421 pdu -> ·¿ms_Ën ); 422  NULL ; 425  pdu ; 426 } } 428  ušt8_t $”ºo2¡©us ( ”r ) 430  ”r ) { 431 - ENOSYS : 432  AVRCP_STATUS_INVALID_COMMAND ; 433 - EINVAL : 434  AVRCP_STATUS_INVALID_PARAM ; 436  AVRCP_STATUS_SUCCESS ; 437 - ENOTDIR : 438  AVRCP_STATUS_NOT_DIRECTORY ; 439 - EBADRQC : 440  AVRCP_STATUS_INVALID_SCOPE ; 441 - ERANGE : 442  AVRCP_STATUS_OUT_OF_BOUNDS ; 443 - ENOENT : 444  AVRCP_STATUS_DOES_NOT_EXIST ; 446  AVRCP_STATUS_INTERNAL_ERROR ; 448 } } 450  ssize_t $hªdË_v’dÜd•_pdu ( avùp * cÚn , ušt8_t Œª§ùiÚ , 451 ušt8_t * code , ušt8_ˆ* subun™ , 452 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 453 * u£r_d©a ) 455  avrý * £ssiÚ = u£r_d©a ; 456 cÚ¡  avrý_cÚŒÞ_hªdËr * hªdËr ; 457  avrý_h—d” * pdu ; 458 ušt32_t com·ny_id ; 459 ssize_t »t ; 461 pdu = `·r£_pdu ( Ý”ªds , Ý”ªd_couÁ ); 462 ià(! pdu ) { 463 pdu = (*è Ý”ªds ; 464 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_COMMAND ; 465  »jeù ; 468 com·ny_id = `Áoh24 ( pdu ->company_id); 469 ià( com·ny_id !ð IEEEID_BTSIG ) { 470 * code = AVC_CTYPE_NOT_IMPLEMENTED ; 474 `DBG ("AVRCP PDU 0x%02X,†’ 0x%04X", pdu -> pdu_id ,…du-> ·¿ms_Ën ); 476 pdu -> ·ck‘_ty³ = 0; 477 pdu -> rsvd = 0; 479 ià(! £ssiÚ -> cÚŒÞ_hªdËrs ) 480  »jeù ; 482  hªdËr = £ssiÚ -> cÚŒÞ_hªdËrs ; hªdËr-> id ; handler++) { 483 ià( hªdËr -> id =ð pdu -> pdu_id ) 487 ià( hªdËr -> id !ð pdu -> pdu_id || hªdËr-> code != *code) { 488 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_COMMAND ; 489  »jeù ; 492 ià(! hªdËr -> func ) { 493 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 494  »jeù ; 497 »t = hªdËr -> `func ( £ssiÚ , Œª§ùiÚ , pdu -> ·¿ms_Ën ,…du-> ·¿ms , 498 £ssiÚ -> cÚŒÞ_d©a ); 499 ià( »t == 0) 500  - EAGAIN ; 502 ià( »t < 0) { 503 ià( »t =ð- EAGAIN ) 504  »t ; 505 pdu -> ·¿ms [0] = `”ºo2¡©us ( »t ); 506  »jeù ; 509 * code = hªdËr -> r¥ ; 510 pdu -> ·¿ms_Ën = `htÚs ( »t ); 512  AVRCP_HEADER_LENGTH + »t ; 514 »jeù : 515 pdu -> ·¿ms_Ën = `htÚs (1); 516 * code = AVC_CTYPE_REJECTED ; 518  AVRCP_HEADER_LENGTH + 1; 519 } } 521  boÞ $hªdË_·s¡hrough_pdu ( avùp * cÚn , ušt8_t Ý , 522 boÞ ´es£d , * u£r_d©a ) 524  avrý * £ssiÚ = u£r_d©a ; 525 cÚ¡  avrý_·s¡hrough_hªdËr * hªdËr ; 527 ià(! £ssiÚ -> ·s¡hrough_hªdËrs ) 528  çl£ ; 530  hªdËr = £ssiÚ -> ·s¡hrough_hªdËrs ; hªdËr-> func ; 531 hªdËr ++) { 532 ià( hªdËr -> Ý == op) 536 ià( hªdËr -> func =ð NULL ) 537  çl£ ; 539  hªdËr -> `func ( £ssiÚ , ´es£d , sessiÚ-> ·s¡hrough_d©a ); 540 } } 542  $discÚÃù_cb (* d©a ) 544  avrý * £ssiÚ = d©a ; 546 £ssiÚ -> cÚn = NULL ; 548 `avrý_shutdown ( £ssiÚ ); 549 } } 551  avrý * $avrý_Ãw ( fd , size_t imtu , size_ˆ omtu , ušt16_t v”siÚ ) 553  avrý * £ssiÚ ; 555 £ssiÚ = `g_Ãw0 ( avrý , 1); 557 £ssiÚ -> cÚn = `avùp_Ãw ( fd , imtu , omtu , v”siÚ ); 558 ià(! £ssiÚ -> cÚn ) { 559 `g_ä“ ( £ssiÚ ); 560  NULL ; 563 £ssiÚ -> ·s¡hrough_id = `avùp_»gi¡”_·s¡hrough_hªdËr ( 564 £ssiÚ -> cÚn , 565 hªdË_·s¡hrough_pdu , 566 £ssiÚ ); 567 £ssiÚ -> cÚŒÞ_id = `avùp_»gi¡”_pdu_hªdËr (£ssiÚ-> cÚn , 568 AVC_OP_VENDORDEP , 569 hªdË_v’dÜd•_pdu , 570 £ssiÚ ); 571 £ssiÚ -> cÚŒÞ_mtu = omtu - AVC_DATA_OFFSET ; 577 ià( £ssiÚ -> cÚŒÞ_mtu > AVC_DATA_MTU ) 578 £ssiÚ -> cÚŒÞ_mtu = AVC_DATA_MTU ; 580 `avùp_£t_de¡roy_cb ( £ssiÚ -> cÚn , discÚÃù_cb , session); 582  £ssiÚ ; 583 } } 585  ssize_t $hªdË_browsšg_pdu ( avùp * cÚn , 586 ušt8_t Œª§ùiÚ , ušt8_ˆ* Ý”ªds , 587 size_t Ý”ªd_couÁ , * u£r_d©a ) 589  avrý * £ssiÚ = u£r_d©a ; 590 cÚ¡  avrý_browsšg_hªdËr * hªdËr ; 591  avrý_browsšg_h—d” * pdu ; 592  »t ; 594 pdu = `·r£_browsšg_pdu ( Ý”ªds , Ý”ªd_couÁ ); 595 ià(! pdu ) { 596 pdu = (*è Ý”ªds ; 597 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_COMMAND ; 598  »jeù ; 601 `DBG ("AVRCP Browsšg PDU 0x%02X,†’ 0x%04X", pdu -> pdu_id , 602 pdu -> ·¿ms_Ën ); 604 ià(! £ssiÚ -> browsšg_hªdËrs ) { 605 pdu -> pdu_id = AVRCP_GENERAL_REJECT ; 606 pdu -> ·¿ms [0] = AVRCP_STATUS_INTERNAL_ERROR ; 607  »jeù ; 610  hªdËr = £ssiÚ -> browsšg_hªdËrs ; hªdËr-> id ; handler++) { 611 ià( hªdËr -> id =ð pdu -> pdu_id ) 615 ià( hªdËr -> id !ð pdu -> pdu_id ) { 616 pdu -> pdu_id = AVRCP_GENERAL_REJECT ; 617 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_COMMAND ; 618  »jeù ; 621 ià(! hªdËr -> func ) { 622 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 623  »jeù ; 626 »t = hªdËr -> `func ( £ssiÚ , Œª§ùiÚ , pdu -> ·¿ms_Ën ,…du-> ·¿ms , 627 £ssiÚ -> cÚŒÞ_d©a ); 628 ià( »t == 0) 629  - EAGAIN ; 631 ià( »t < 0) { 632 ià( »t =ð- EAGAIN ) 633  »t ; 634 pdu -> ·¿ms [0] = `”ºo2¡©us ( »t ); 635  »jeù ; 638 pdu -> ·¿ms_Ën = `htÚs ( »t ); 640  AVRCP_BROWSING_HEADER_LENGTH + »t ; 642 »jeù : 643 pdu -> ·¿ms_Ën = `htÚs (1); 645  AVRCP_BROWSING_HEADER_LENGTH + 1; 646 } } 648  $browsšg_discÚÃù_cb (* d©a ) 650  avrý * £ssiÚ = d©a ; 652 £ssiÚ -> browsšg_id = 0; 653 } } 655  $avrý_cÚÃù_browsšg ( avrý * £ssiÚ ,  fd , size_t imtu , 656 size_t omtu ) 658  ”r ; 660 ”r = `avùp_cÚÃù_browsšg ( £ssiÚ -> cÚn , fd , imtu , omtu ); 661 ià( ”r < 0) 662  ”r ; 664 £ssiÚ -> browsšg_id = `avùp_»gi¡”_browsšg_pdu_hªdËr ( 665 £ssiÚ -> cÚn , 666 hªdË_browsšg_pdu , 667 £ssiÚ , 668 browsšg_discÚÃù_cb ); 671 } } 673  $avrý_£t_de¡roy_cb ( avrý * £ssiÚ , avrý_de¡roy_cb_t cb , 674 * u£r_d©a ) 676 £ssiÚ -> de¡roy = cb ; 677 £ssiÚ -> de¡roy_d©a = u£r_d©a ; 678 } } 680  ssize_t $g‘_ÿ·bž™›s ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 681 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 682 * u£r_d©a ) 684  avrý_¶ay” * ¶ay” = u£r_d©a ; 685  g‘_ÿ·bž™›s_»q * »q ; 687 ià(! ·¿ms || ·¿ms_Ën !ð(* »q )) 688  - EINVAL ; 690 »q = (*è ·¿ms ; 692  »q -> ÿp ) { 693  CAP_COMPANY_ID : 694 »q -> ·¿ms [0] = 1; 695 `htÚ24 (& »q -> ·¿ms [1], IEEEID_BTSIG ); 697  CAP_EVENTS_SUPPORTED : 698 ià(! ¶ay” -> šd || !¶ay”->šd-> g‘_ÿ·bž™›s ) 699  - ENOSYS ; 700  ¶ay” -> šd -> `g‘_ÿ·bž™›s ( £ssiÚ , Œª§ùiÚ , 701 ¶ay” -> u£r_d©a ); 704  - EINVAL ; 705 } } 707  ssize_t $li¡_©Œibu‹s ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 708 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 709 * u£r_d©a ) 711  avrý_¶ay” * ¶ay” = u£r_d©a ; 713 `DBG (""); 715 ià(! ¶ay” -> šd || !¶ay”->šd-> li¡_©Œibu‹s ) 716  - ENOSYS ; 718  ¶ay” -> šd -> `li¡_©Œibu‹s ( £ssiÚ , Œª§ùiÚ , 719 ¶ay” -> u£r_d©a ); 720 } } 722  boÞ $check_©Œibu‹s ( ušt8_t numb” , cÚ¡ ušt8_ˆ* ©Œs ) 724  i ; 726  i = 0; i < numb” ; i++) { 727 ià( ©Œs [ i ] > AVRCP_ATTRIBUTE_LAST || 728 ©Œs [ i ] =ð AVRCP_ATTRIBUTE_ILEGAL ) 729  çl£ ; 732  Œue ; 733 } } 735  ssize_t $g‘_©Œibu‹_‹xt ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 736 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 737 * u£r_d©a ) 739  avrý_¶ay” * ¶ay” = u£r_d©a ; 740  g‘_©Œibu‹_‹xt_»q * »q ; 742 `DBG (""); 744 ià(! ¶ay” -> šd || !¶ay”->šd-> g‘_©Œibu‹_‹xt ) 745  - ENOSYS ; 747 ià(! ·¿ms || ·¿ms_Ën < (* »q )) 748  - EINVAL ; 750 »q = (*è ·¿ms ; 751 ià( ·¿ms_Ën !ð(* »q è+„eq-> numb” ) 752  - EINVAL ; 754 ià(! `check_©Œibu‹s ( »q -> numb” ,„eq-> ©Œs )) 755  - EINVAL ; 757  ¶ay” -> šd -> `g‘_©Œibu‹_‹xt ( £ssiÚ , Œª§ùiÚ , 758 »q -> numb” ,„eq-> ©Œs , 759 ¶ay” -> u£r_d©a ); 760 } } 762  ssize_t $li¡_v®ues ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 763 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 764 * u£r_d©a ) 766  avrý_¶ay” * ¶ay” = u£r_d©a ; 767  li¡_v®ues_»q * »q ; 769 `DBG (""); 771 ià(! ·¿ms || ·¿ms_Ën !ð(* »q )) 772  - EINVAL ; 774 »q = (*è ·¿ms ; 775 ià( »q -> ©Œ > AVRCP_ATTRIBUTE_LAST || 776 »q -> ©Œ =ð AVRCP_ATTRIBUTE_ILEGAL ) 777  - EINVAL ; 779 ià(! ¶ay” -> šd || !¶ay”->šd-> li¡_v®ues ) 780  - ENOSYS ; 782  ¶ay” -> šd -> `li¡_v®ues ( £ssiÚ , Œª§ùiÚ , »q -> ©Œ , 783 ¶ay” -> u£r_d©a ); 784 } } 786  boÞ $check_v®ue ( ušt8_t ©Œ , ušt8_ˆ numb” , cÚ¡ ušt8_ˆ* v®ues ) 788  i ; 790  i = 0; i < numb” ; i++) { 792  ©Œ ) { 793  AVRCP_ATTRIBUTE_EQUALIZER : 794 ià( v®ues [ i ] < AVRCP_EQUALIZER_OFF || 795 v®ues [ i ] > AVRCP_EQUALIZER_ON ) 796  çl£ ; 798  AVRCP_ATTRIBUTE_REPEAT_MODE : 799 ià( v®ues [ i ] < AVRCP_REPEAT_MODE_OFF || 800 v®ues [ i ] > AVRCP_REPEAT_MODE_GROUP ) 801  çl£ ; 803  AVRCP_ATTRIBUTE_SHUFFLE : 804 ià( v®ues [ i ] < AVRCP_SHUFFLE_OFF || 805 v®ues [ i ] > AVRCP_SHUFFLE_GROUP ) 806  çl£ ; 808  AVRCP_ATTRIBUTE_SCAN : 809 ià( v®ues [ i ] < AVRCP_SCAN_OFF || 810 v®ues [ i ] > AVRCP_SCAN_GROUP ) 811  çl£ ; 816  Œue ; 817 } } 819  ssize_t $g‘_v®ue_‹xt ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 820 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 821 * u£r_d©a ) 823  avrý_¶ay” * ¶ay” = u£r_d©a ; 824  g‘_v®ue_‹xt_»q * »q ; 826 `DBG (""); 828 ià(! ¶ay” -> šd || !¶ay”->šd-> g‘_v®ue_‹xt ) 829  - ENOSYS ; 831 ià(! ·¿ms || ·¿ms_Ën < (* »q )) 832  - EINVAL ; 834 »q = (*è ·¿ms ; 835 ià( ·¿ms_Ën !ð(* »q è+„eq-> numb” ) 836  - EINVAL ; 838 ià( »q -> numb” > AVRCP_ATTRIBUTE_LAST || 839 »q -> numb” =ð AVRCP_ATTRIBUTE_ILEGAL ) 840  - EINVAL ; 842 ià(! `check_v®ue ( »q -> ©Œ ,„eq-> numb” ,„eq-> v®ues )) 843  - EINVAL ; 845  ¶ay” -> šd -> `g‘_v®ue_‹xt ( £ssiÚ , Œª§ùiÚ , ·¿ms [0], 846 ·¿ms [1], ¶ms[2], 847 ¶ay” -> u£r_d©a ); 848 } } 850  ssize_t $g‘_v®ue ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 851 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 852 * u£r_d©a ) 854  avrý_¶ay” * ¶ay” = u£r_d©a ; 855  g‘_v®ue_»q * »q ; 857 `DBG (""); 859 ià(! ¶ay” -> šd || !¶ay”->šd-> g‘_v®ue ) 860  - ENOSYS ; 862 ià(! ·¿ms || ·¿ms_Ën < (* »q )) 863  - EINVAL ; 865 »q = (*è ·¿ms ; 866 ià( ·¿ms_Ën < (* »q è+„eq-> numb” ) 867  - EINVAL ; 869 ià(! `check_©Œibu‹s ( »q -> numb” ,„eq-> ©Œs )) 870  - EINVAL ; 872  ¶ay” -> šd -> `g‘_v®ue ( £ssiÚ , Œª§ùiÚ , ·¿ms [0], 873 & ·¿ms [1], ¶ay” -> u£r_d©a ); 874 } } 876  ssize_t $£t_v®ue ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 877 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 878 * u£r_d©a ) 880  avrý_¶ay” * ¶ay” = u£r_d©a ; 881  £t_v®ue_»q * »q ; 882 ušt8_t ©Œs [ AVRCP_ATTRIBUTE_LAST ]; 883 ušt8_t v®ues [ AVRCP_ATTRIBUTE_LAST ]; 884  i ; 886 `DBG (""); 888 ià(! ¶ay” -> šd || !¶ay”->šd-> £t_v®ue ) 889  - ENOSYS ; 891 ià(! ·¿ms || ·¿ms_Ën < (* »q )) 892  - EINVAL ; 894 »q = (*è ·¿ms ; 895 ià( ·¿ms_Ën < (* »q è+„eq-> numb” * (*»q-> v®ues )) 896  - EINVAL ; 898  i = 0; i < »q -> numb” ; i++) { 899 ©Œs [ i ] = »q -> v®ues [i]. ©Œ ; 900 v®ues [ i ] = »q ->v®ues[i]. v®ue ; 902 ià(! `check_v®ue ( ©Œs [ i ], 1, & v®ues [i])) 903  - EINVAL ; 906  ¶ay” -> šd -> `£t_v®ue ( £ssiÚ , Œª§ùiÚ , »q -> numb” , 907 ©Œs , v®ues , ¶ay” -> u£r_d©a ); 908 } } 910  ssize_t $g‘_¶ay_¡©us ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 911 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 912 * u£r_d©a ) 914  avrý_¶ay” * ¶ay” = u£r_d©a ; 916 `DBG (""); 918 ià(! ¶ay” -> šd || !¶ay”->šd-> g‘_¶ay_¡©us ) 919  - ENOSYS ; 921  ¶ay” -> šd -> `g‘_¶ay_¡©us ( £ssiÚ , Œª§ùiÚ , 922 ¶ay” -> u£r_d©a ); 923 } } 925  boÞ $·r£_©Œibu‹s ( ušt32_t * ·¿ms , ušt16_t ·¿ms_Ën , 926 ušt8_t numb” , ušt32_t * ©Œs ) 928  i ; 930  i = 0; i < numb” && ·¿ms_Ën >ð(* ©Œs ); i++, 931 ·¿ms_Ën -ð(* ©Œs )) { 932 ©Œs [ i ] = `be32_to_ýu ( ·¿ms [i]); 934 ià( ©Œs [ i ] =ð AVRCP_MEDIA_ATTRIBUTE_ILLEGAL || 935 ©Œs [ i ] > AVRCP_MEDIA_ATTRIBUTE_LAST ) 936  çl£ ; 939  Œue ; 940 } } 942  ssize_t $g‘_–em’t_©Œibu‹s ( avrý * £ssiÚ , 943 ušt8_t Œª§ùiÚ , 944 ušt16_t ·¿ms_Ën , 945 ušt8_t * ·¿ms , 946 * u£r_d©a ) 948  avrý_¶ay” * ¶ay” = u£r_d©a ; 949  g‘_–em’t_©Œibu‹s_»q * »q ; 950 ušt64_t uid ; 951 ušt32_t ©Œs [ AVRCP_MEDIA_ATTRIBUTE_LAST ]; 953 `DBG (""); 955 ià(! ¶ay” -> šd || !¶ay”->šd-> g‘_–em’t_©Œibu‹s ) 956  - ENOSYS ; 958 »q = (*è ·¿ms ; 959 ià(! ·¿ms || ·¿ms_Ën < (* »q )) 960  - EINVAL ; 962 ià(! `·r£_©Œibu‹s ( »q -> ©Œs , ·¿ms_Ën - (*req), 963 »q -> numb” , ©Œs )) 964  - EINVAL ; 966 uid = `g‘_be64 ( ·¿ms ); 968  ¶ay” -> šd -> `g‘_–em’t_©Œibu‹s ( £ssiÚ , Œª§ùiÚ , uid , 969 »q -> numb” , ©Œs , 970 ¶ay” -> u£r_d©a ); 971 } } 973  ssize_t $»gi¡”_nÙifiÿtiÚ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 974 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 975 * u£r_d©a ) 977  avrý_¶ay” * ¶ay” = u£r_d©a ; 978  »gi¡”_nÙifiÿtiÚ_»q * »q ; 979 ušt32_t š‹rv® ; 981 `DBG (""); 983 ià(! ¶ay” -> šd || !¶ay”->šd-> »gi¡”_nÙifiÿtiÚ ) 984  - ENOSYS ; 986 ià(! ·¿ms || ·¿ms_Ën !ð(* »q )) 987  - EINVAL ; 989 »q = (*è ·¿ms ; 991 š‹rv® = `be32_to_ýu ( »q ->interval); 993  ¶ay” -> šd -> `»gi¡”_nÙifiÿtiÚ ( £ssiÚ , Œª§ùiÚ , 994 »q -> ev’t , š‹rv® , 995 ¶ay” -> u£r_d©a ); 996 } } 998  ssize_t $£t_vÞume ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 999 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 1000 * u£r_d©a ) 1002  avrý_¶ay” * ¶ay” = u£r_d©a ; 1003  £t_vÞume_»q * »q ; 1004 ušt8_t vÞume ; 1006 `DBG (""); 1008 ià(! ¶ay” -> šd || !¶ay”->šd-> £t_vÞume ) 1009  - ENOSYS ; 1011 ià(! ·¿ms || ·¿ms_Ën !ð( vÞume )) 1012  - EINVAL ; 1014 »q = (*è ·¿ms ; 1016 vÞume = »q -> v®ue & 0x7f; 1018  ¶ay” -> šd -> `£t_vÞume ( £ssiÚ , Œª§ùiÚ , vÞume , 1019 ¶ay” -> u£r_d©a ); 1020 } } 1022  ssize_t $£t_add»s£d ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 1023 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 1024 * u£r_d©a ) 1026  avrý_¶ay” * ¶ay” = u£r_d©a ; 1027  £t_add»s£d_»q * »q ; 1028 ušt16_t id ; 1030 `DBG (""); 1032 ià(! ¶ay” -> šd || !¶ay”->šd-> £t_add»s£d ) 1033  - ENOSYS ; 1035 ià(! ·¿ms || ·¿ms_Ën !ð(* »q )) 1036  - EINVAL ; 1038 »q = (*è ·¿ms ; 1040 id = `be16_to_ýu ( »q ->id); 1042  ¶ay” -> šd -> `£t_add»s£d ( £ssiÚ , Œª§ùiÚ , id , 1043 ¶ay” -> u£r_d©a ); 1044 } } 1046  $cÚtšušg_Ãw ( avrý * £ssiÚ , ušt8_t pdu_id , 1047 cÚ¡  iovec * iov ,  iov_út , 1048 size_t off£t ) 1050  avrý_cÚtšušg * cÚtšušg ; 1051  i ; 1052 size_t Ën = 0; 1054 cÚtšušg = `g_Ãw0 ( avrý_cÚtšušg , 1); 1055 cÚtšušg -> pdu_id =…du_id; 1057  i = 0; i < iov_út ; i++) { 1058 ià( i =ð0 && off£t ) { 1059 Ën +ð iov [ i ]. iov_Ën - off£t ; 1063 Ën +ð iov [ i ]. iov_Ën ; 1066 cÚtšušg -> pdu . iov_ba£ = `g_m®loc0 ( Ën ); 1068 `DBG ("ËÀ%zu", Ën ); 1070  i = 0; i < iov_út ; i++) { 1071 ià( i =ð0 && off£t ) { 1072 `memýy ( cÚtšušg -> pdu . iov_ba£ , 1073 iov [ i ]. iov_ba£ + off£t , 1074 iov [ i ]. iov_Ën - off£t ); 1075 cÚtšušg -> pdu . iov_Ën +ð iov [ i ].iov_ËÀ- off£t ; 1079 `memýy ( cÚtšušg -> pdu . iov_ba£ + cÚtšušg->pdu. iov_Ën , 1080 iov [ i ]. iov_ba£ , iov[i]. iov_Ën ); 1081 cÚtšušg -> pdu . iov_Ën +ð iov [ i ].iov_len; 1084 £ssiÚ -> cÚtšušg = continuing; 1085 } } 1087  $avrý_£nd_š‹º® ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 1088 ušt8_t code , ušt8_ˆ subun™ , 1089 ušt8_t pdu_id , ušt8_ˆ ty³ , 1090 cÚ¡  iovec * iov ,  iov_út ) 1092  iovec pdu [ iov_út + 1]; 1093  avrý_h—d” hdr ; 1094  i ; 1102 ià( £ssiÚ -> cÚtšušg ) { 1103 `cÚtšušg_ä“ ( £ssiÚ -> cÚtšušg ); 1104 £ssiÚ -> cÚtšušg = NULL ; 1107 `mem£t (& hdr , 0, (hdr)); 1109 pdu [0]. iov_ba£ = & hdr ; 1110 pdu [0]. iov_Ën = ( hdr ); 1112 hdr . ·ck‘_ty³ = ty³ ; 1114  i = 0; i < iov_út ; i++) { 1115 pdu [ i + 1]. iov_ba£ = iov [i].iov_base; 1117 ià( pdu [0]. iov_Ën + hdr . ·¿ms_Ën + iov [ i ].iov_len <= 1118 £ssiÚ -> cÚŒÞ_mtu ) { 1119 pdu [ i + 1]. iov_Ën = iov [i].iov_len; 1120 hdr . ·¿ms_Ën +ð iov [ i ]. iov_Ën ; 1121 ià( hdr . ·ck‘_ty³ !ð AVRCP_PACKET_TYPE_SINGLE ) 1122 hdr . ·ck‘_ty³ = AVRCP_PACKET_TYPE_END ; 1130 pdu [ i + 1]. iov_Ën = £ssiÚ -> cÚŒÞ_mtu - 1131 ( pdu [0]. iov_Ën + hdr . ·¿ms_Ën ); 1132 hdr . ·¿ms_Ën +ð pdu [ i + 1]. iov_Ën ; 1134 `cÚtšušg_Ãw ( £ssiÚ , pdu_id , & iov [ i ], iov_út - i, 1135 pdu [ i + 1]. iov_Ën ); 1137 hdr . ·ck‘_ty³ = hdr.·ck‘_ty³ !ð AVRCP_PACKET_TYPE_SINGLE ? 1138 AVRCP_PACKET_TYPE_CONTINUING : 1139 AVRCP_PACKET_TYPE_START ; 1143 `htÚ24 ( hdr . com·ny_id , IEEEID_BTSIG ); 1144 hdr . pdu_id =…du_id; 1145 hdr . ·¿ms_Ën = `htÚs (hdr.params_len); 1147  `avùp_£nd_v’dÜ ( £ssiÚ -> cÚn , Œª§ùiÚ , code , subun™ , 1148 pdu , iov_út + 1); 1149 } } 1151  ssize_t $»que¡_cÚtšušg ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 1152 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 1153 * u£r_d©a ) 1155  iovec iov ; 1156  ”r ; 1158 `DBG (""); 1160 ià(! ·¿ms || ·¿ms_Ën !ð1 || ! £ssiÚ -> cÚtšušg || 1161 £ssiÚ -> cÚtšušg -> pdu_id !ð ·¿ms [0]) 1162  - EINVAL ; 1164 iov . iov_ba£ = £ssiÚ -> cÚtšušg -> pdu .iov_base; 1165 iov . iov_Ën = £ssiÚ -> cÚtšušg -> pdu .iov_len; 1167 `DBG ("ËÀ%zu", iov . iov_Ën ); 1169 £ssiÚ -> cÚtšušg -> pdu . iov_ba£ = NULL ; 1171 ”r = `avrý_£nd_š‹º® ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_STABLE , 1172 AVC_SUBUNIT_PANEL , ·¿ms [0], 1173 AVRCP_PACKET_TYPE_CONTINUING , & iov , 1); 1175 `g_ä“ ( iov . iov_ba£ ); 1177 ià( ”r < 0) 1178  - EINVAL ; 1181 } } 1183  ssize_t $abÜt_cÚtšušg ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 1184 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 1185 * u£r_d©a ) 1187 `DBG (""); 1189 ià(! ·¿ms || ·¿ms_Ën !ð1 || ! £ssiÚ -> cÚtšušg ) 1190  - EINVAL ; 1192 `cÚtšušg_ä“ ( £ssiÚ -> cÚtšušg ); 1193 £ssiÚ -> cÚtšušg = NULL ; 1195 `avrý_£nd_š‹º® ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_ACCEPTED , 1196 AVC_SUBUNIT_PANEL , AVRCP_ABORT_CONTINUING , 1197 AVRCP_PACKET_TYPE_SINGLE , NULL , 0); 1200 } } 1202 cÚ¡  avrý_cÚŒÞ_hªdËr g¶ay”_hªdËrs [] = { 1203 { AVRCP_GET_CAPABILITIES , 1204 AVC_CTYPE_STATUS , AVC_CTYPE_STABLE , 1205 g‘_ÿ·bž™›s }, 1206 { AVRCP_LIST_PLAYER_ATTRIBUTES , 1207 AVC_CTYPE_STATUS , AVC_CTYPE_STABLE , 1208 li¡_©Œibu‹s }, 1209 { AVRCP_GET_PLAYER_ATTRIBUTE_TEXT , 1210 AVC_CTYPE_STATUS , AVC_CTYPE_STABLE , 1211 g‘_©Œibu‹_‹xt }, 1212 { AVRCP_LIST_PLAYER_VALUES , 1213 AVC_CTYPE_STATUS , AVC_CTYPE_STABLE , 1214 li¡_v®ues }, 1215 { AVRCP_GET_PLAYER_VALUE_TEXT , 1216 AVC_CTYPE_STATUS , AVC_CTYPE_STABLE , 1217 g‘_v®ue_‹xt }, 1218 { AVRCP_GET_CURRENT_PLAYER_VALUE , 1219 AVC_CTYPE_STATUS , AVC_CTYPE_STABLE , 1220 g‘_v®ue }, 1221 { AVRCP_SET_PLAYER_VALUE , 1222 AVC_CTYPE_CONTROL , AVC_CTYPE_STABLE , 1223 £t_v®ue }, 1224 { AVRCP_GET_PLAY_STATUS , 1225 AVC_CTYPE_STATUS , AVC_CTYPE_STABLE , 1226 g‘_¶ay_¡©us }, 1227 { AVRCP_GET_ELEMENT_ATTRIBUTES , 1228 AVC_CTYPE_STATUS , AVC_CTYPE_STABLE , 1229 g‘_–em’t_©Œibu‹s }, 1230 { AVRCP_REGISTER_NOTIFICATION , 1231 AVC_CTYPE_NOTIFY , AVC_CTYPE_INTERIM , 1232 »gi¡”_nÙifiÿtiÚ }, 1233 { AVRCP_SET_ABSOLUTE_VOLUME , 1234 AVC_CTYPE_CONTROL , AVC_CTYPE_STABLE , 1235 £t_vÞume }, 1236 { AVRCP_SET_ADDRESSED_PLAYER , 1237 AVC_CTYPE_CONTROL , AVC_CTYPE_STABLE , 1238 £t_add»s£d }, 1239 { AVRCP_REQUEST_CONTINUING , 1240 AVC_CTYPE_CONTROL , AVC_CTYPE_STABLE , 1241 »que¡_cÚtšušg }, 1242 { AVRCP_ABORT_CONTINUING , 1243 AVC_CTYPE_CONTROL , AVC_CTYPE_ACCEPTED , 1244 abÜt_cÚtšušg }, 1248  $avrý_£t_cÚŒÞ_hªdËrs ( avrý * £ssiÚ , 1249 cÚ¡  avrý_cÚŒÞ_hªdËr * hªdËrs , 1250 * u£r_d©a ) 1252 £ssiÚ -> cÚŒÞ_hªdËrs = hªdËrs ; 1253 £ssiÚ -> cÚŒÞ_d©a = u£r_d©a ; 1254 } } 1256  ssize_t $£t_brow£d ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 1257 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 1258 * u£r_d©a ) 1260  avrý_¶ay” * ¶ay” = u£r_d©a ; 1261  £t_brow£d_»q * »q ; 1262 ušt16_t id ; 1264 `DBG (""); 1266 ià(! ¶ay” -> šd || !¶ay”->šd-> £t_brow£d ) 1267  - ENOSYS ; 1269 ià(! ·¿ms || ·¿ms_Ën !ð(* »q )) 1270  - EINVAL ; 1272 »q = (*è ·¿ms ; 1274 id = `be16_to_ýu ( »q ->id); 1276  ¶ay” -> šd -> `£t_brow£d ( £ssiÚ , Œª§ùiÚ , id , 1277 ¶ay” -> u£r_d©a ); 1278 } } 1280  ssize_t $g‘_fÞd”_™ems ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 1281 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 1282 * u£r_d©a ) 1284  avrý_¶ay” * ¶ay” = u£r_d©a ; 1285  g‘_fÞd”_™ems_»q * »q ; 1286 ušt32_t ¡¬t , ’d ; 1287 ušt16_t numb” ; 1288 ušt32_t ©Œs [ AVRCP_MEDIA_ATTRIBUTE_LAST ]; 1289  i ; 1291 `DBG (""); 1293 ià(! ¶ay” -> šd || !¶ay”->šd-> g‘_fÞd”_™ems ) 1294  - ENOSYS ; 1296 ià(! ·¿ms || ·¿ms_Ën < (* »q )) 1297  - EINVAL ; 1299 »q = (*è ·¿ms ; 1301 ià( »q -> scÝe > AVRCP_MEDIA_NOW_PLAYING ) 1302  - EBADRQC ; 1304 ¡¬t = `be32_to_ýu ( »q ->start); 1305 ’d = `be32_to_ýu ( »q ->end); 1307 ià( ¡¬t > ’d ) 1308  - ERANGE ; 1310 numb” = `be16_to_ýu ( »q ->number); 1312  i = 0; i < numb” ; i++) { 1313 ©Œs [ i ] = `be32_to_ýu ( »q ->attrs[i]); 1315 ià( ©Œs [ i ] =ð AVRCP_MEDIA_ATTRIBUTE_ILLEGAL || 1316 ©Œs [ i ] > AVRCP_MEDIA_ATTRIBUTE_LAST ) 1317  - EINVAL ; 1320  ¶ay” -> šd -> `g‘_fÞd”_™ems ( £ssiÚ , Œª§ùiÚ , »q -> scÝe , 1321 ¡¬t , ’d , numb” , ©Œs , 1322 ¶ay” -> u£r_d©a ); 1323 } } 1325  ssize_t $chªge_·th ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 1326 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 1327 * u£r_d©a ) 1329  avrý_¶ay” * ¶ay” = u£r_d©a ; 1330  chªge_·th_»q * »q ; 1331 ušt16_t couÁ” ; 1332 ušt64_t uid ; 1334 `DBG (""); 1336 ià(! ¶ay” -> šd || !¶ay”->šd-> chªge_·th ) 1337  - ENOSYS ; 1339 ià(! ·¿ms || ·¿ms_Ën < (* »q )) 1340  - EINVAL ; 1342 »q = (*è ·¿ms ; 1344 couÁ” = `be16_to_ýu ( »q ->counter); 1345 uid = `be64_to_ýu ( »q ->uid); 1347  ¶ay” -> šd -> `chªge_·th ( £ssiÚ , Œª§ùiÚ , couÁ” , 1348 »q -> dœeùiÚ , uid , ¶ay” -> u£r_d©a ); 1349 } } 1351  ssize_t $g‘_™em_©Œibu‹s ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 1352 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 1353 * u£r_d©a ) 1355  avrý_¶ay” * ¶ay” = u£r_d©a ; 1356  g‘_™em_©Œibu‹s_»q * »q ; 1357 ušt64_t uid ; 1358 ušt16_t couÁ” ; 1359 ušt32_t ©Œs [ AVRCP_MEDIA_ATTRIBUTE_LAST ]; 1360  i ; 1362 `DBG (""); 1364 ià(! ¶ay” -> šd || !¶ay”->šd-> g‘_™em_©Œibu‹s ) 1365  - ENOSYS ; 1367 ià(! ·¿ms || ·¿ms_Ën < (* »q )) 1368  - EINVAL ; 1370 »q = (*è ·¿ms ; 1372 ià( »q -> scÝe > AVRCP_MEDIA_NOW_PLAYING ) 1373  - EBADRQC ; 1375 uid = `be64_to_ýu ( »q ->uid); 1376 couÁ” = `be16_to_ýu ( »q ->counter); 1378  i = 0; i < »q -> numb” ; i++) { 1379 ©Œs [ i ] = `be32_to_ýu ( »q ->attrs[i]); 1381 ià( ©Œs [ i ] =ð AVRCP_MEDIA_ATTRIBUTE_ILLEGAL || 1382 ©Œs [ i ] > AVRCP_MEDIA_ATTRIBUTE_LAST ) 1383  - EINVAL ; 1386  ¶ay” -> šd -> `g‘_™em_©Œibu‹s ( £ssiÚ , Œª§ùiÚ , 1387 »q -> scÝe , uid , couÁ” , 1388 »q -> numb” , ©Œs , 1389 ¶ay” -> u£r_d©a ); 1390 } } 1392  ssize_t $¶ay_™em ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 1393 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 1394 * u£r_d©a ) 1396  avrý_¶ay” * ¶ay” = u£r_d©a ; 1397  ¶ay_™em_»q * »q ; 1398 ušt64_t uid ; 1399 ušt16_t couÁ” ; 1401 `DBG (""); 1403 ià(! ¶ay” -> šd || !¶ay”->šd-> ¶ay_™em ) 1404  - ENOSYS ; 1406 ià(! ·¿ms || ·¿ms_Ën < (* »q )) 1407  - EINVAL ; 1409 »q = (*è ·¿ms ; 1411 ià( »q -> scÝe > AVRCP_MEDIA_NOW_PLAYING ) 1412  - EBADRQC ; 1414 uid = `be64_to_ýu ( »q ->uid); 1415 couÁ” = `be16_to_ýu ( »q ->counter); 1417  ¶ay” -> šd -> `¶ay_™em ( £ssiÚ , Œª§ùiÚ , »q -> scÝe , uid , 1418 couÁ” , ¶ay” -> u£r_d©a ); 1419 } } 1421  ssize_t $£¬ch ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 1422 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 1423 * u£r_d©a ) 1425  avrý_¶ay” * ¶ay” = u£r_d©a ; 1426  £¬ch_»q * »q ; 1427 * ¡ršg ; 1428 ušt16_t Ën ; 1429  »t ; 1431 `DBG (""); 1433 ià(! ¶ay” -> šd || !¶ay”->šd-> £¬ch ) 1434  - ENOSYS ; 1436 ià(! ·¿ms || ·¿ms_Ën < (* »q )) 1437  - EINVAL ; 1439 »q = (*è ·¿ms ; 1441 Ën = `be16_to_ýu ( »q ->len); 1442 ià(! Ën ) 1443  - EINVAL ; 1445 ¡ršg = `¡ºdup ( »q ->¡ršg, Ën ); 1447 »t = ¶ay” -> šd -> `£¬ch ( £ssiÚ , Œª§ùiÚ , ¡ršg , 1448 ¶ay” -> u£r_d©a ); 1450 `ä“ ( ¡ršg ); 1452  »t ; 1453 } } 1455  ssize_t $add_to_now_¶ayšg ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 1456 ušt16_t ·¿ms_Ën , ušt8_t * ·¿ms , 1457 * u£r_d©a ) 1459  avrý_¶ay” * ¶ay” = u£r_d©a ; 1460  add_to_now_¶ayšg_»q * »q ; 1461 ušt64_t uid ; 1462 ušt16_t couÁ” ; 1464 `DBG (""); 1466 ià(! ¶ay” -> šd || !¶ay”->šd-> add_to_now_¶ayšg ) 1467  - ENOSYS ; 1469 ià(! ·¿ms || ·¿ms_Ën < (* »q )) 1470  - EINVAL ; 1472 »q = (*è ·¿ms ; 1474 ià( »q -> scÝe > AVRCP_MEDIA_NOW_PLAYING ) 1475  - EBADRQC ; 1477 uid = `be64_to_ýu ( »q ->uid); 1478 couÁ” = `be16_to_ýu ( »q ->counter); 1480  ¶ay” -> šd -> `add_to_now_¶ayšg ( £ssiÚ , Œª§ùiÚ , »q -> scÝe , 1481 uid , couÁ” , 1482 ¶ay” -> u£r_d©a ); 1483 } } 1485 cÚ¡  avrý_browsšg_hªdËr gbrowsšg_hªdËrs [] = { 1486 { AVRCP_SET_BROWSED_PLAYER , £t_brow£d }, 1487 { AVRCP_GET_FOLDER_ITEMS , g‘_fÞd”_™ems }, 1488 { AVRCP_CHANGE_PATH , chªge_·th }, 1489 { AVRCP_GET_ITEM_ATTRIBUTES , g‘_™em_©Œibu‹s }, 1490 { AVRCP_PLAY_ITEM , ¶ay_™em }, 1491 { AVRCP_SEARCH , £¬ch }, 1492 { AVRCP_ADD_TO_NOW_PLAYING , add_to_now_¶ayšg }, 1496  $avrý_£t_browsšg_hªdËrs ( avrý * £ssiÚ , 1497 cÚ¡  avrý_browsšg_hªdËr * hªdËrs , 1498 * u£r_d©a ) 1500 £ssiÚ -> browsšg_hªdËrs = hªdËrs ; 1501 £ssiÚ -> browsšg_d©a = u£r_d©a ; 1502 } } 1504  $avrý_»gi¡”_¶ay” ( avrý * £ssiÚ , 1505 cÚ¡  avrý_cÚŒÞ_šd * šd , 1506 cÚ¡  avrý_cÚŒÞ_cfm * cfm , 1507 * u£r_d©a ) 1509  avrý_¶ay” * ¶ay” ; 1511 ¶ay” = `g_Ãw0 ( avrý_¶ay” , 1); 1512 ¶ay” -> šd = ind; 1513 ¶ay” -> cfm = cfm; 1514 ¶ay” -> u£r_d©a = user_data; 1516 `avrý_£t_cÚŒÞ_hªdËrs ( £ssiÚ , ¶ay”_hªdËrs , ¶ay” ); 1517 `avrý_£t_browsšg_hªdËrs ( £ssiÚ , browsšg_hªdËrs , ¶ay” ); 1518 £ssiÚ -> ¶ay” =…layer; 1519 } } 1521  $avrý_£t_·s¡hrough_hªdËrs ( avrý * £ssiÚ , 1522 cÚ¡  avrý_·s¡hrough_hªdËr * hªdËrs , 1523 * u£r_d©a ) 1525 £ssiÚ -> ·s¡hrough_hªdËrs = hªdËrs ; 1526 £ssiÚ -> ·s¡hrough_d©a = u£r_d©a ; 1527 } } 1529  $avrý_š™_ušput ( avrý * £ssiÚ , cÚ¡ * Çme , 1530 cÚ¡ * add»ss ) 1532  `avùp_š™_ušput ( £ssiÚ -> cÚn , Çme , add»ss ); 1533 } } 1535  $avrý_£nd ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , ušt8_ˆ code , 1536 ušt8_t subun™ , ušt8_ˆ pdu_id , 1537 cÚ¡  iovec * iov ,  iov_út ) 1539  `avrý_£nd_š‹º® ( £ssiÚ , Œª§ùiÚ , code , subun™ , pdu_id , 1540 AVRCP_PACKET_TYPE_SINGLE , iov , iov_út ); 1541 } } 1543  $¡©us2”ºo ( ušt8_t ¡©us ) 1545  ¡©us ) { 1546  AVRCP_STATUS_INVALID_COMMAND : 1547  - ENOSYS ; 1548  AVRCP_STATUS_INVALID_PARAM : 1549  - EINVAL ; 1550  AVRCP_STATUS_SUCCESS : 1552  AVRCP_STATUS_NOT_DIRECTORY : 1553  - ENOTDIR ; 1554  AVRCP_STATUS_INVALID_SCOPE : 1555  - EBADRQC ; 1556  AVRCP_STATUS_OUT_OF_BOUNDS : 1557  - ERANGE ; 1558  AVRCP_STATUS_INTERNAL_ERROR : 1559  AVRCP_STATUS_INVALID_PLAYER_ID : 1560  AVRCP_STATUS_PLAYER_NOT_BROWSABLE : 1561  AVRCP_STATUS_NO_AVAILABLE_PLAYERS : 1562  AVRCP_STATUS_ADDRESSED_PLAYER_CHANGED : 1563  - EPERM ; 1565  - EPROTO ; 1567 } } 1569  $·r£_¡©us ( avrý_h—d” * pdu ) 1571 ià( pdu -> ·¿ms_Ën < 1) 1572  - EPROTO ; 1574  `¡©us2”ºo ( pdu -> ·¿ms [0]); 1575 } } 1577  $·r£_browsšg_¡©us ( avrý_browsšg_h—d” * pdu ) 1579 ià( pdu -> ·¿ms_Ën < 1) 1580  - EPROTO ; 1582  `¡©us2”ºo ( pdu -> ·¿ms [0]); 1583 } } 1585  $avrý_£nd_»q ( avrý * £ssiÚ , ušt8_t code , ušt8_ˆ subun™ , 1586 ušt8_t pdu_id , cÚ¡  iovec * iov , 1587  iov_út , avùp_r¥_cb func , 1588 * u£r_d©a ) 1590  iovec pdu [ iov_út + 1]; 1591  avrý_h—d” hdr ; 1592  i ; 1594 `mem£t (& hdr , 0, (hdr)); 1596 pdu [0]. iov_ba£ = & hdr ; 1597 pdu [0]. iov_Ën = ( hdr ); 1599  i = 0; i < iov_út ; i++) { 1600 pdu [ i + 1]. iov_ba£ = iov [i].iov_base; 1601 pdu [ i + 1]. iov_Ën = iov [i].iov_len; 1602 hdr . ·¿ms_Ën +ð iov [ i ]. iov_Ën ; 1605 `htÚ24 ( hdr . com·ny_id , IEEEID_BTSIG ); 1606 hdr . pdu_id =…du_id; 1607 hdr . ·ck‘_ty³ = AVRCP_PACKET_TYPE_SINGLE ; 1608 hdr . ·¿ms_Ën = `htÚs (hdr.params_len); 1610  `avùp_£nd_v’dÜ_»q ( £ssiÚ -> cÚn , code , subun™ , pdu , 1611 iov_út + 1, func , u£r_d©a ); 1612 } } 1614  $avrý_£nd_browsšg_»q ( avrý * £ssiÚ , ušt8_t pdu_id , 1615 cÚ¡  iovec * iov ,  iov_út , 1616 avùp_browsšg_r¥_cb func , 1617 * u£r_d©a ) 1619  iovec pdu [ iov_út + 1]; 1620  avrý_browsšg_h—d” hdr ; 1621  i ; 1623 `mem£t (& hdr , 0, (hdr)); 1625  i = 0; i < iov_út ; i++) { 1626 pdu [ i + 1]. iov_ba£ = iov [i].iov_base; 1627 pdu [ i + 1]. iov_Ën = iov [i].iov_len; 1628 hdr . ·¿ms_Ën +ð iov [ i ]. iov_Ën ; 1631 hdr . pdu_id =…du_id; 1632 hdr . ·¿ms_Ën = `htÚs (hdr.params_len); 1634 pdu [0]. iov_ba£ = & hdr ; 1635 pdu [0]. iov_Ën = ( hdr ); 1637  `avùp_£nd_browsšg_»q ( £ssiÚ -> cÚn , pdu , iov_út + 1, 1638 func , u£r_d©a ); 1639 } } 1641  $avrý_£nd_browsšg ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 1642 ušt8_t pdu_id , cÚ¡  iovec * iov , 1643  iov_út ) 1645  iovec pdu [ iov_út + 1]; 1646  avrý_browsšg_h—d” hdr ; 1647  i ; 1649 `mem£t (& hdr , 0, (hdr)); 1651  i = 0; i < iov_út ; i++) { 1652 pdu [ i + 1]. iov_ba£ = iov [i].iov_base; 1653 pdu [ i + 1]. iov_Ën = iov [i].iov_len; 1654 hdr . ·¿ms_Ën +ð iov [ i ]. iov_Ën ; 1657 hdr . pdu_id =…du_id; 1658 hdr . ·¿ms_Ën = `htÚs (hdr.params_len); 1660 pdu [0]. iov_ba£ = & hdr ; 1661 pdu [0]. iov_Ën = ( hdr ); 1663  `avùp_£nd_browsšg ( £ssiÚ -> cÚn , Œª§ùiÚ , pdu , 1664 iov_út + 1); 1665 } } 1667  gboÞ—n $g‘_ÿ·bž™›s_r¥ ( avùp * cÚn , 1668 ušt8_t code , ušt8_ˆ subun™ , 1669 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 1670 * u£r_d©a ) 1672  avrý * £ssiÚ = u£r_d©a ; 1673  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 1674  avrý_h—d” * pdu ; 1675  g‘_ÿ·bž™›s_r¥ * r¥ ; 1676 ušt8_t numb” = 0; 1677 ušt8_t * ·¿ms = NULL ; 1678  ”r ; 1680 `DBG (""); 1682 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> g‘_ÿ·bž™›s ) 1683  FALSE ; 1685 pdu = `·r£_pdu ( Ý”ªds , Ý”ªd_couÁ ); 1686 ià(! pdu ) { 1687 ”r = - EPROTO ; 1688  dÚe ; 1691 ià( code =ð AVC_CTYPE_REJECTED ) { 1692 ”r = `·r£_¡©us ( pdu ); 1693  dÚe ; 1696 ià( pdu -> ·¿ms_Ën < (* r¥ )) { 1697 ”r = - EPROTO ; 1698  dÚe ; 1701 r¥ = (*è pdu -> ·¿ms ; 1703  r¥ -> ÿp ) { 1704  CAP_COMPANY_ID : 1705  CAP_EVENTS_SUPPORTED : 1708 ”r = - EPROTO ; 1709  dÚe ; 1712 ià( r¥ -> numb” > 0) { 1713 numb” = r¥ ->number; 1714 ·¿ms = r¥ ->params; 1717 ”r = 0; 1719 dÚe : 1720 ¶ay” -> cfm -> `g‘_ÿ·bž™›s ( £ssiÚ , ”r , numb” , ·¿ms , 1721 ¶ay” -> u£r_d©a ); 1723  FALSE ; 1724 } } 1727  $avrý_g‘_ÿ·bž™›s ( avrý * £ssiÚ , ušt8_t ·¿m ) 1729  iovec iov ; 1730  g‘_ÿ·bž™›s_»q »q ; 1732 »q . ÿp = ·¿m ; 1734 iov . iov_ba£ = & »q ; 1735 iov . iov_Ën = ( »q ); 1737  `avrý_£nd_»q ( £ssiÚ , AVC_CTYPE_STATUS , AVC_SUBUNIT_PANEL , 1738 AVRCP_GET_CAPABILITIES , & iov , 1, 1739 g‘_ÿ·bž™›s_r¥ , £ssiÚ ); 1740 } } 1742  gboÞ—n $»gi¡”_nÙifiÿtiÚ_r¥ ( avùp * cÚn , 1743 ušt8_t code , ušt8_ˆ subun™ , 1744 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 1745 * u£r_d©a ) 1747  avrý * £ssiÚ = u£r_d©a ; 1748  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 1749  avrý_h—d” * pdu ; 1750  »gi¡”_nÙifiÿtiÚ_r¥ * r¥ ; 1751 ušt8_t ev’t = 0; 1752 ušt16_t v®ue16 , v®ue16_2 [2]; 1753 ušt32_t v®ue32 ; 1754 ušt64_t v®ue64 ; 1755 ušt8_t * ·¿ms = NULL ; 1756  ”r ; 1758 `DBG (""); 1760 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> »gi¡”_nÙifiÿtiÚ ) 1761  FALSE ; 1763 pdu = `·r£_pdu ( Ý”ªds , Ý”ªd_couÁ ); 1764 ià(! pdu ) { 1765 ”r = - EPROTO ; 1766  dÚe ; 1769 ià( code =ð AVC_CTYPE_REJECTED ) { 1770 ”r = `·r£_¡©us ( pdu ); 1771  dÚe ; 1774 ià( pdu -> ·¿ms_Ën < (* r¥ )) { 1775 ”r = - EPROTO ; 1776  dÚe ; 1779 r¥ = (*è pdu -> ·¿ms ; 1780 ev’t = r¥ ->event; 1782 ià( ev’t > AVRCP_EVENT_LAST ) { 1783 ”r = - EPROTO ; 1784  dÚe ; 1787  ev’t ) { 1788  AVRCP_EVENT_STATUS_CHANGED : 1789 ià( pdu -> ·¿ms_Ën !ð(* r¥ è+ ( ušt8_t )) { 1790 ”r = - EPROTO ; 1791  dÚe ; 1793 ·¿ms = r¥ -> d©a ; 1795  AVRCP_EVENT_VOLUME_CHANGED : 1796 ià( pdu -> ·¿ms_Ën !ð(* r¥ è+ ( ušt8_t )) { 1797 ”r = - EPROTO ; 1798  dÚe ; 1800 ·¿ms = r¥ -> d©a ; 1801 ·¿ms [0] &= 0x7f; 1803  AVRCP_EVENT_TRACK_CHANGED : 1804 ià( pdu -> ·¿ms_Ën !ð(* r¥ è+ ( v®ue64 )) { 1805 ”r = - EPROTO ; 1806  dÚe ; 1808 v®ue64 = `g‘_be64 ( r¥ -> d©a ); 1809 ·¿ms = ( ušt8_t *è& v®ue64 ; 1811  AVRCP_EVENT_PLAYBACK_POS_CHANGED : 1812 ià( pdu -> ·¿ms_Ën !ð(* r¥ è+ ( v®ue32 )) { 1813 ”r = - EPROTO ; 1814  dÚe ; 1816 v®ue32 = `g‘_be32 ( r¥ -> d©a ); 1817 ·¿ms = ( ušt8_t *è& v®ue32 ; 1819  AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED : 1820 ià( pdu -> ·¿ms_Ën < (* r¥ è+ ( v®ue16_2 )) { 1821 ”r = - EPROTO ; 1822  dÚe ; 1824 v®ue16_2 [0] = `g‘_be16 ( r¥ -> d©a ); 1825 v®ue16_2 [1] = `g‘_be16 ( r¥ -> d©a + 2); 1826 ·¿ms = ( ušt8_t *è v®ue16_2 ; 1828  AVRCP_EVENT_SETTINGS_CHANGED : 1829 ià( pdu -> ·¿ms_Ën < (* r¥ è+ ( ušt8_t )) { 1830 ”r = - EPROTO ; 1831  dÚe ; 1833 ·¿ms = r¥ -> d©a ; 1835  AVRCP_EVENT_UIDS_CHANGED : 1836 ià( pdu -> ·¿ms_Ën < (* r¥ è+ ( v®ue16 )) { 1837 ”r = - EPROTO ; 1838  dÚe ; 1840 v®ue16 = `g‘_be16 ( r¥ -> d©a ); 1841 ·¿ms = ( ušt8_t *è& v®ue16 ; 1845 ”r = 0; 1847 dÚe : 1848  ¶ay” -> cfm -> `»gi¡”_nÙifiÿtiÚ ( £ssiÚ , ”r , code , ev’t , 1849 ·¿ms , ¶ay” -> u£r_d©a ); 1850 } } 1852  $avrý_»gi¡”_nÙifiÿtiÚ ( avrý * £ssiÚ , ušt8_t ev’t , 1853 ušt32_t š‹rv® ) 1855  iovec iov ; 1856  »gi¡”_nÙifiÿtiÚ_»q »q ; 1858 ià( ev’t > AVRCP_EVENT_LAST ) 1859  - EINVAL ; 1861 »q . ev’t =ƒvent; 1862 »q . š‹rv® = `ýu_to_be32 (interval); 1864 iov . iov_ba£ = & »q ; 1865 iov . iov_Ën = ( »q ); 1867  `avrý_£nd_»q ( £ssiÚ , AVC_CTYPE_NOTIFY , AVC_SUBUNIT_PANEL , 1868 AVRCP_REGISTER_NOTIFICATION , & iov , 1, 1869 »gi¡”_nÙifiÿtiÚ_r¥ , £ssiÚ ); 1870 } } 1872  gboÞ—n $li¡_©Œibu‹s_r¥ ( avùp * cÚn , 1873 ušt8_t code , ušt8_ˆ subun™ , 1874 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 1875 * u£r_d©a ) 1877  avrý * £ssiÚ = u£r_d©a ; 1878  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 1879  avrý_h—d” * pdu = (*è Ý”ªds ; 1880  li¡_©Œibu‹s_r¥ * r¥ ; 1881 ušt8_t numb” = 0; 1882 ušt8_t * ©Œs = NULL ; 1883  ”r ; 1885 `DBG (""); 1887 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> li¡_©Œibu‹s ) 1888  FALSE ; 1890 pdu = `·r£_pdu ( Ý”ªds , Ý”ªd_couÁ ); 1891 ià(! pdu ) { 1892 ”r = - EPROTO ; 1893  dÚe ; 1896 ià( code =ð AVC_CTYPE_REJECTED ) { 1897 ”r = `·r£_¡©us ( pdu ); 1898  dÚe ; 1901 r¥ = (*è pdu -> ·¿ms ; 1903 ià( pdu -> ·¿ms_Ën < (* r¥ )) { 1904 ”r = - EPROTO ; 1905  dÚe ; 1908 numb” = pdu -> ·¿ms [0]; 1909 ià( numb” > 0) 1910 ©Œs = & pdu -> ·¿ms [1]; 1912 ”r = 0; 1914 dÚe : 1915 ¶ay” -> cfm -> `li¡_©Œibu‹s ( £ssiÚ , ”r , numb” , ©Œs , 1916 ¶ay” -> u£r_d©a ); 1918  FALSE ; 1919 } } 1921  $avrý_li¡_¶ay”_©Œibu‹s ( avrý * £ssiÚ ) 1923  `avrý_£nd_»q ( £ssiÚ , AVC_CTYPE_STATUS , AVC_SUBUNIT_PANEL , 1924 AVRCP_LIST_PLAYER_ATTRIBUTES , NULL , 0, 1925 li¡_©Œibu‹s_r¥ , £ssiÚ ); 1926 } } 1928  $·r£_‹xt_r¥ ( avrý_h—d” * pdu , ušt8_t * numb” , 1929 ušt8_t * ©Œs , ** ‹xt ) 1931 ušt8_t * ±r ; 1932 ušt16_t ·¿ms_Ën ; 1933  i ; 1935 ià( pdu -> ·¿ms_Ën < 1) 1936  - EPROTO ; 1938 * numb” = pdu -> ·¿ms [0]; 1939 ià(* numb” > AVRCP_ATTRIBUTE_LAST ) { 1940 * numb” = 0; 1941  - EPROTO ; 1944 ·¿ms_Ën = pdu ->params_len - 1; 1945  i = 0, ±r = & pdu -> ·¿ms [1]; i < * numb” && ·¿ms_Ën > 0; i++) { 1946  ‹xt_v®ue * v® ; 1948 ià( ·¿ms_Ën < (* v® )) 1949  çž ; 1951 v® = (*è ±r ; 1953 ©Œs [ i ] = v® -> ©Œ ; 1955 ·¿ms_Ën -ð(* v® ); 1956 ±r +ð(* v® ); 1958 ià( v® -> Ën > ·¿ms_Ën ) 1959  çž ; 1961 ià( v® -> Ën > 0) { 1962 ‹xt [ i ] = `g_¡ºdup ( v® -> d©a , v®-> Ën ); 1963 ·¿ms_Ën -ð v® -> Ën ; 1964 ±r +ð v® -> Ën ; 1968 ià( i !ð* numb” ) 1969  çž ; 1973 çž : 1974  i -= 1; i >= 0; i--) 1975 `g_ä“ ( ‹xt [ i ]); 1977 * numb” = 0; 1979  - EPROTO ; 1980 } } 1982  gboÞ—n $g‘_©Œibu‹_‹xt_r¥ ( avùp * cÚn , 1983 ušt8_t code , ušt8_ˆ subun™ , 1984 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 1985 * u£r_d©a ) 1987  avrý * £ssiÚ = u£r_d©a ; 1988  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 1989  avrý_h—d” * pdu ; 1990 ušt8_t numb” = 0; 1991 ušt8_t ©Œs [ AVRCP_ATTRIBUTE_LAST ]; 1992 * ‹xt [ AVRCP_ATTRIBUTE_LAST ]; 1993  ”r ; 1995 `DBG (""); 1997 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> g‘_©Œibu‹_‹xt ) 1998  FALSE ; 2000 pdu = `·r£_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2001 ià(! pdu ) { 2002 ”r = - EPROTO ; 2003  dÚe ; 2006 ià( code =ð AVC_CTYPE_REJECTED ) { 2007 ”r = `·r£_¡©us ( pdu ); 2008  dÚe ; 2011 ”r = `·r£_‹xt_r¥ ( pdu , & numb” , ©Œs , ‹xt ); 2013 dÚe : 2014 ¶ay” -> cfm -> `g‘_©Œibu‹_‹xt ( £ssiÚ , ”r , numb” , ©Œs , ‹xt , 2015 ¶ay” -> u£r_d©a ); 2017  FALSE ; 2018 } } 2020  $avrý_g‘_¶ay”_©Œibu‹_‹xt ( avrý * £ssiÚ , ušt8_t numb” , 2021 ušt8_t * ©Œs ) 2023  iovec iov [2]; 2025 ià(! numb” ||‚umb” > AVRCP_ATTRIBUTE_LAST ) 2026  - EINVAL ; 2028 iov [0]. iov_ba£ = & numb” ; 2029 iov [0]. iov_Ën = ( numb” ); 2031 iov [1]. iov_ba£ = ©Œs ; 2032 iov [1]. iov_Ën = numb” ; 2034  `avrý_£nd_»q ( £ssiÚ , AVC_CTYPE_STATUS , AVC_SUBUNIT_PANEL , 2035 AVRCP_GET_PLAYER_ATTRIBUTE_TEXT , iov , 2, 2036 g‘_©Œibu‹_‹xt_r¥ , £ssiÚ ); 2037 } } 2039  gboÞ—n $li¡_v®ues_r¥ ( avùp * cÚn , 2040 ušt8_t code , ušt8_ˆ subun™ , 2041 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 2042 * u£r_d©a ) 2044  avrý * £ssiÚ = u£r_d©a ; 2045  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 2046  avrý_h—d” * pdu ; 2047  li¡_v®ues_r¥ * r¥ ; 2048 ušt8_t numb” = 0; 2049 ušt8_t * v®ues = NULL ; 2050  ”r ; 2052 `DBG (""); 2054 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> li¡_v®ues ) 2055  FALSE ; 2057 pdu = `·r£_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2058 ià(! pdu ) { 2059 ”r = - EPROTO ; 2060  dÚe ; 2063 ià( code =ð AVC_CTYPE_REJECTED ) { 2064 ”r = `·r£_¡©us ( pdu ); 2065  dÚe ; 2068 ià( pdu -> ·¿ms_Ën < (* r¥ )) { 2069 ”r = - EPROTO ; 2070  dÚe ; 2073 r¥ = (*è pdu -> ·¿ms ; 2075 ià( r¥ -> numb” > 0) { 2076 numb” = r¥ ->number; 2077 v®ues = r¥ -> ·¿ms ; 2080 ”r = 0; 2082 dÚe : 2083 ¶ay” -> cfm -> `li¡_v®ues ( £ssiÚ , ”r , numb” , v®ues , 2084 ¶ay” -> u£r_d©a ); 2086  FALSE ; 2087 } } 2089  $avrý_li¡_¶ay”_v®ues ( avrý * £ssiÚ , ušt8_t ©Œ ) 2091  iovec iov ; 2093 iov . iov_ba£ = & ©Œ ; 2094 iov . iov_Ën = ( ©Œ ); 2096  `avrý_£nd_»q ( £ssiÚ , AVC_CTYPE_STATUS , AVC_SUBUNIT_PANEL , 2097 AVRCP_LIST_PLAYER_VALUES , & iov , 1, 2098 li¡_v®ues_r¥ , £ssiÚ ); 2099 } } 2101  gboÞ—n $g‘_v®ue_‹xt_r¥ ( avùp * cÚn , 2102 ušt8_t code , ušt8_ˆ subun™ , 2103 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 2104 * u£r_d©a ) 2106  avrý * £ssiÚ = u£r_d©a ; 2107  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 2108  avrý_h—d” * pdu ; 2109 ušt8_t numb” = 0; 2110 ušt8_t v®ues [ AVRCP_ATTRIBUTE_LAST ]; 2111 * ‹xt [ AVRCP_ATTRIBUTE_LAST ]; 2112  ”r ; 2114 `DBG (""); 2116 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> g‘_v®ue_‹xt ) 2117  FALSE ; 2119 pdu = `·r£_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2120 ià(! pdu ) { 2121 ”r = - EPROTO ; 2122  dÚe ; 2125 ià( code =ð AVC_CTYPE_REJECTED ) { 2126 ”r = `·r£_¡©us ( pdu ); 2127  dÚe ; 2130 ”r = `·r£_‹xt_r¥ ( pdu , & numb” , v®ues , ‹xt ); 2132 dÚe : 2133 ¶ay” -> cfm -> `g‘_v®ue_‹xt ( £ssiÚ , ”r , numb” , v®ues , ‹xt , 2134 ¶ay” -> u£r_d©a ); 2136  FALSE ; 2137 } } 2139  $avrý_g‘_¶ay”_v®ue_‹xt ( avrý * £ssiÚ , ušt8_t ©Œ , 2140 ušt8_t numb” , ušt8_ˆ* v®ues ) 2142  iovec iov [2]; 2143  g‘_v®ue_‹xt_»q »q ; 2145 ià(! numb” ) 2146  - EINVAL ; 2148 »q . ©Œ =‡ttr; 2149 »q . numb” =‚umber; 2151 iov [0]. iov_ba£ = & »q ; 2152 iov [0]. iov_Ën = ( »q ); 2154 iov [1]. iov_ba£ = v®ues ; 2155 iov [1]. iov_Ën = numb” ; 2157  `avrý_£nd_»q ( £ssiÚ , AVC_CTYPE_STATUS , AVC_SUBUNIT_PANEL , 2158 AVRCP_GET_PLAYER_VALUE_TEXT , iov , 2, 2159 g‘_v®ue_‹xt_r¥ , £ssiÚ ); 2160 } } 2162  $·r£_v®ue ( avrý_h—d” * pdu , ušt8_t * numb” , 2163 ušt8_t * ©Œs , ušt8_ˆ* v®ues ) 2165  i ; 2166  v®ue_r¥ * r¥ ; 2168 ià( pdu -> ·¿ms_Ën < (* r¥ )) 2169  - EPROTO ; 2171 r¥ = (*è pdu -> ·¿ms ; 2177 ià( r¥ -> numb” > AVRCP_ATTRIBUTE_LAST || 2178 (* r¥ è+„¥-> numb” * 2 !ð pdu -> ·¿ms_Ën ) { 2179 * numb” = 0; 2180  - EPROTO ; 2183  i = 0; i < r¥ -> numb” ; i++) { 2184 ©Œs [ i ] = r¥ -> v®ues [i]. ©Œ ; 2185 v®ues [ i ] = r¥ ->v®ues[i]. v®ue ; 2188 * numb” = r¥ ->number; 2191 } } 2193  gboÞ—n $g‘_v®ue_r¥ ( avùp * cÚn , 2194 ušt8_t code , ušt8_ˆ subun™ , 2195 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 2196 * u£r_d©a ) 2198  avrý * £ssiÚ = u£r_d©a ; 2199  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 2200  avrý_h—d” * pdu ; 2201 ušt8_t numb” = 0; 2202 ušt8_t ©Œs [ AVRCP_ATTRIBUTE_LAST ]; 2203 ušt8_t v®ues [ AVRCP_ATTRIBUTE_LAST ]; 2204  ”r ; 2206 `DBG (""); 2208 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> g‘_v®ue ) 2209  FALSE ; 2211 pdu = `·r£_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2212 ià(! pdu ) { 2213 ”r = - EPROTO ; 2214  dÚe ; 2217 ià( code =ð AVC_CTYPE_REJECTED ) { 2218 ”r = `·r£_¡©us ( pdu ); 2219  dÚe ; 2222 ”r = `·r£_v®ue ( pdu , & numb” , ©Œs , v®ues ); 2224 dÚe : 2225 ¶ay” -> cfm -> `g‘_v®ue ( £ssiÚ , ”r , numb” , ©Œs , v®ues , 2226 ¶ay” -> u£r_d©a ); 2228  FALSE ; 2229 } } 2231  $avrý_g‘_cu¼’t_¶ay”_v®ue ( avrý * £ssiÚ , ušt8_t numb” , 2232 ušt8_t * ©Œs ) 2235  iovec iov [2]; 2237 ià( numb” > AVRCP_ATTRIBUTE_LAST ) 2238  - EINVAL ; 2240 iov [0]. iov_ba£ = & numb” ; 2241 iov [0]. iov_Ën = ( numb” ); 2243 iov [1]. iov_ba£ = ©Œs ; 2244 iov [1]. iov_Ën = numb” ; 2246  `avrý_£nd_»q ( £ssiÚ , AVC_CTYPE_STATUS , AVC_SUBUNIT_PANEL , 2247 AVRCP_GET_CURRENT_PLAYER_VALUE , iov , 2, 2248 g‘_v®ue_r¥ , £ssiÚ ); 2249 } } 2251  gboÞ—n $£t_v®ue_r¥ ( avùp * cÚn , 2252 ušt8_t code , ušt8_ˆ subun™ , 2253 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 2254 * u£r_d©a ) 2256  avrý * £ssiÚ = u£r_d©a ; 2257  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 2258  avrý_h—d” * pdu ; 2259  ”r ; 2261 `DBG (""); 2263 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> £t_v®ue ) 2264  FALSE ; 2266 pdu = `·r£_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2267 ià(! pdu ) { 2268 ”r = - EPROTO ; 2269  dÚe ; 2272 ià( code =ð AVC_CTYPE_REJECTED ) { 2273 ”r = `·r£_¡©us ( pdu ); 2274  dÚe ; 2277 ”r = 0; 2279 dÚe : 2280 ¶ay” -> cfm -> `£t_v®ue ( £ssiÚ , ”r ,…Ïy”-> u£r_d©a ); 2282  FALSE ; 2283 } } 2285  $avrý_£t_¶ay”_v®ue ( avrý * £ssiÚ , ušt8_t numb” , 2286 ušt8_t * ©Œs , ušt8_ˆ* v®ues ) 2288  iovec iov [2]; 2289  ©Œ_v®ue v® [ AVRCP_ATTRIBUTE_LAST ]; 2290  i ; 2292 ià( numb” > AVRCP_ATTRIBUTE_LAST ) 2293  - EINVAL ; 2295 iov [0]. iov_ba£ = & numb” ; 2296 iov [0]. iov_Ën = ( numb” ); 2298  i = 0; i < numb” ; i++) { 2299 v® [ i ]. ©Œ = ©Œs [i]; 2300 v® [ i ]. v®ue = v®ues [i]; 2303 iov [1]. iov_ba£ = v® ; 2304 iov [1]. iov_Ën = (* v® è* numb” ; 2306  `avrý_£nd_»q ( £ssiÚ , AVC_CTYPE_CONTROL , AVC_SUBUNIT_PANEL , 2307 AVRCP_SET_PLAYER_VALUE , iov , 2, 2308 £t_v®ue_r¥ , £ssiÚ ); 2309 } } 2311  gboÞ—n $g‘_¶ay_¡©us_r¥ ( avùp * cÚn , 2312 ušt8_t code , ušt8_ˆ subun™ , 2313 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 2314 * u£r_d©a ) 2316  avrý * £ssiÚ = u£r_d©a ; 2317  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 2318  avrý_h—d” * pdu ; 2319  g‘_¶ay_¡©us_r¥ * r¥ ; 2320 ušt8_t ¡©us = 0; 2321 ušt32_t pos™iÚ = 0; 2322 ušt32_t du¿tiÚ = 0; 2323  ”r ; 2325 `DBG (""); 2327 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> g‘_¶ay_¡©us ) 2328  FALSE ; 2330 pdu = `·r£_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2331 ià(! pdu ) { 2332 ”r = - EPROTO ; 2333  dÚe ; 2336 ià( code =ð AVC_CTYPE_REJECTED ) { 2337 ”r = `·r£_¡©us ( pdu ); 2338  dÚe ; 2341 ià( pdu -> ·¿ms_Ën < (* r¥ )) { 2342 ”r = - EPROTO ; 2343  dÚe ; 2346 r¥ = (*è pdu -> ·¿ms ; 2348 du¿tiÚ = `be32_to_ýu ( r¥ ->duration); 2349 pos™iÚ = `be32_to_ýu ( r¥ ->position); 2350 ¡©us = r¥ ->status; 2351 ”r = 0; 2353 dÚe : 2354 ¶ay” -> cfm -> `g‘_¶ay_¡©us ( £ssiÚ , ”r , ¡©us , pos™iÚ , du¿tiÚ , 2355 ¶ay” -> u£r_d©a ); 2357  FALSE ; 2358 } } 2360  $avrý_g‘_¶ay_¡©us ( avrý * £ssiÚ ) 2362  `avrý_£nd_»q ( £ssiÚ , AVC_CTYPE_STATUS , AVC_SUBUNIT_PANEL , 2363 AVRCP_GET_PLAY_STATUS , NULL , 0, 2364 g‘_¶ay_¡©us_r¥ , £ssiÚ ); 2365 } } 2367  gboÞ—n $£t_vÞume_r¥ ( avùp * cÚn , 2368 ušt8_t code , ušt8_ˆ subun™ , 2369 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 2370 * u£r_d©a ) 2372  avrý * £ssiÚ = u£r_d©a ; 2373  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 2374  avrý_h—d” * pdu ; 2375  £t_vÞume_r¥ * r¥ ; 2376 ušt8_t v®ue = 0; 2377  ”r ; 2379 `DBG (""); 2381 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> £t_vÞume ) 2382  FALSE ; 2384 pdu = `·r£_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2385 ià(! pdu ) { 2386 ”r = - EPROTO ; 2387  dÚe ; 2390 ià( code =ð AVC_CTYPE_REJECTED ) { 2391 ”r = `·r£_¡©us ( pdu ); 2392  dÚe ; 2395 ià( pdu -> ·¿ms_Ën < (* r¥ )) { 2396 ”r = - EPROTO ; 2397  dÚe ; 2400 r¥ = (*è pdu -> ·¿ms ; 2402 v®ue = r¥ ->value & 0x7f; 2403 ”r = 0; 2405 dÚe : 2406 ¶ay” -> cfm -> `£t_vÞume ( £ssiÚ , ”r , v®ue ,…Ïy”-> u£r_d©a ); 2408  FALSE ; 2409 } } 2411  $avrý_£t_vÞume ( avrý * £ssiÚ , ušt8_t vÞume ) 2413  iovec iov ; 2415 iov . iov_ba£ = & vÞume ; 2416 iov . iov_Ën = ( vÞume ); 2418  `avrý_£nd_»q ( £ssiÚ , AVC_CTYPE_CONTROL , AVC_SUBUNIT_PANEL , 2419 AVRCP_SET_ABSOLUTE_VOLUME , & iov , 1, 2420 £t_vÞume_r¥ , £ssiÚ ); 2421 } } 2423  $·r£_©Œibu‹_li¡ ( ušt8_t * ·¿ms , ušt16_t ·¿ms_Ën , 2424 ušt8_t numb” , ušt32_t * ©Œs , ** ‹xt ) 2426  medŸ_™em * ™em ; 2427  i ; 2429 ià( numb” > AVRCP_MEDIA_ATTRIBUTE_LAST ) 2430  - EPROTO ; 2432  i = 0; i < numb” && ·¿ms_Ën >ð(* ™em ); i++) { 2433 ™em = (*è ·¿ms ; 2435 ™em -> ©Œ = `be32_to_ýu (item->attr); 2436 ™em -> ch¬£t = `be16_to_ýu (item->charset); 2437 ™em -> Ën = `be16_to_ýu (item->len); 2439 ·¿ms_Ën -ð(* ™em ); 2440 ·¿ms +ð(* ™em ); 2441 ià( ™em -> Ën > ·¿ms_Ën ) 2442  çž ; 2444 ià( ™em -> Ën > 0) { 2445 ‹xt [ i ] = `g_¡ºdup ( ™em -> d©a , i‹m-> Ën ); 2446 ·¿ms_Ën -ð ™em -> Ën ; 2447 ·¿ms +ð ™em -> Ën ; 2453 çž : 2454  i -= 1; i >= 0; i--) 2455 `g_ä“ ( ‹xt [ i ]); 2457  - EPROTO ; 2458 } } 2460  $·r£_–em’ts ( avrý_h—d” * pdu , ušt8_t * numb” , 2461 ušt32_t * ©Œs , ** ‹xt ) 2463  g‘_–em’t_©Œibu‹s_r¥ * r¥ ; 2465 ià( pdu -> ·¿ms_Ën < (* r¥ )) 2466  - EPROTO ; 2468 r¥ = (*è pdu -> ·¿ms ; 2469 ià( r¥ -> numb” > AVRCP_MEDIA_ATTRIBUTE_LAST ) 2470  - EPROTO ; 2472 * numb” = r¥ ->number; 2474  `·r£_©Œibu‹_li¡ ( pdu -> ·¿ms + (* r¥ ), 2475 pdu -> ·¿ms_Ën - (* r¥ ), 2476 * numb” , ©Œs , ‹xt ); 2477 } } 2479  $·r£_™ems ( avrý_browsšg_h—d” * pdu , ušt8_t * numb” , 2480 ušt32_t * ©Œs , ** ‹xt ) 2482  g‘_™em_©Œibu‹s_r¥ * r¥ ; 2484 ià( pdu -> ·¿ms_Ën < (* r¥ )) 2485  - EPROTO ; 2487 r¥ = (*è pdu -> ·¿ms ; 2489 ià( r¥ -> numb” > AVRCP_MEDIA_ATTRIBUTE_LAST ) 2490  - EPROTO ; 2492 * numb” = r¥ ->number; 2494  `·r£_©Œibu‹_li¡ ( pdu -> ·¿ms + (* r¥ ), 2495 pdu -> ·¿ms_Ën - (* r¥ ), 2496 * numb” , ©Œs , ‹xt ); 2497 } } 2499  gboÞ—n $g‘_–em’t_©Œibu‹s_r¥ ( avùp * cÚn , 2500 ušt8_t code , ušt8_ˆ subun™ , 2501 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 2502 * u£r_d©a ) 2504  avrý * £ssiÚ = u£r_d©a ; 2505  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 2506  avrý_h—d” * pdu ; 2507 ušt8_t numb” = 0; 2508 ušt32_t ©Œs [ AVRCP_MEDIA_ATTRIBUTE_LAST ]; 2509 * ‹xt [ AVRCP_MEDIA_ATTRIBUTE_LAST ]; 2510  ”r ; 2512 `DBG (""); 2514 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> g‘_–em’t_©Œibu‹s ) 2515  FALSE ; 2517 pdu = `·r£_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2518 ià(! pdu ) { 2519 ”r = - EPROTO ; 2520  dÚe ; 2523 ià( code =ð AVC_CTYPE_REJECTED ) { 2524 ”r = `·r£_¡©us ( pdu ); 2525  dÚe ; 2528 ”r = `·r£_–em’ts ( pdu , & numb” , ©Œs , ‹xt ); 2530 dÚe : 2531 ¶ay” -> cfm -> `g‘_–em’t_©Œibu‹s ( £ssiÚ , ”r , numb” , ©Œs , ‹xt , 2532 ¶ay” -> u£r_d©a ); 2534  FALSE ; 2535 } } 2537  $avrý_g‘_–em’t_©Œibu‹s ( avrý * £ssiÚ ) 2539  iovec iov ; 2540  g‘_–em’t_©Œibu‹s_»q »q ; 2543 `mem£t (& »q , 0, (req)); 2545 iov . iov_ba£ = & »q ; 2546 iov . iov_Ën = ( »q ); 2548  `avrý_£nd_»q ( £ssiÚ , AVC_CTYPE_STATUS , AVC_SUBUNIT_PANEL , 2549 AVRCP_GET_ELEMENT_ATTRIBUTES , & iov , 1, 2550 g‘_–em’t_©Œibu‹s_r¥ , £ssiÚ ); 2551 } } 2553  gboÞ—n $£t_add»s£d_r¥ ( avùp * cÚn , 2554 ušt8_t code , ušt8_ˆ subun™ , 2555 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 2556 * u£r_d©a ) 2558  avrý * £ssiÚ = u£r_d©a ; 2559  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 2560  avrý_h—d” * pdu ; 2561  ”r ; 2563 `DBG (""); 2565 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> £t_add»s£d ) 2566  FALSE ; 2568 pdu = `·r£_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2569 ià(! pdu ) { 2570 ”r = - EPROTO ; 2571  dÚe ; 2574 ”r = `·r£_¡©us ( pdu ); 2576 dÚe : 2577 ¶ay” -> cfm -> `£t_add»s£d ( £ssiÚ , ”r ,…Ïy”-> u£r_d©a ); 2579  FALSE ; 2580 } } 2582  $avrý_£t_add»s£d_¶ay” ( avrý * £ssiÚ , ušt16_t ¶ay”_id ) 2584  iovec iov ; 2585  £t_add»s£d_»q »q ; 2587 »q . id = `ýu_to_be16 ( ¶ay”_id ); 2589 iov . iov_ba£ = & »q ; 2590 iov . iov_Ën = ( »q ); 2592  `avrý_£nd_»q ( £ssiÚ , AVC_CTYPE_CONTROL , AVC_SUBUNIT_PANEL , 2593 AVRCP_SET_ADDRESSED_PLAYER , & iov , 1, 2594 £t_add»s£d_r¥ , £ssiÚ ); 2595 } } 2597 * $·r£_fÞd”_li¡ ( ušt8_t * ·¿ms , ušt16_t ·¿ms_Ën , 2598 ušt8_t d•th ) 2600 ** fÞd”s , * ·th ; 2601 ušt8_t couÁ ; 2602 size_t i ; 2604 fÞd”s = `g_Ãw0 (*, d•th + 2); 2605 fÞd”s [0] = `g_¡rdup ("/Filesystem"); 2607  i = 0, couÁ = 1; couÁ <ð d•th && i < ·¿ms_Ën ; count++) { 2608 ušt8_t Ën ; 2610 Ën = ·¿ms [ i ++]; 2612 ià( i + Ën > ·¿ms_Ën ||†en == 0) { 2613 `g_¡rä“v ( fÞd”s ); 2614  NULL ; 2617 fÞd”s [ couÁ ] = `g_memdup (& ·¿ms [ i ], Ën ); 2618 i +ð Ën ; 2621 ·th = `g_bužd_·thv ("/", fÞd”s ); 2622 `g_¡rä“v ( fÞd”s ); 2624  ·th ; 2625 } } 2627  gboÞ—n $£t_brow£d_r¥ ( avùp * cÚn , ušt8_t * Ý”ªds , 2628 size_t Ý”ªd_couÁ , * u£r_d©a ) 2630  avrý * £ssiÚ = u£r_d©a ; 2631  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 2632  avrý_browsšg_h—d” * pdu ; 2633  £t_brow£d_r¥ * r¥ ; 2634 ušt16_t couÁ” = 0; 2635 ušt32_t ™ems = 0; 2636 * ·th = NULL ; 2637  ”r ; 2639 `DBG (""); 2641 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> £t_brow£d ) 2642  FALSE ; 2644 pdu = `·r£_browsšg_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2645 ià(! pdu ) { 2646 ”r = - EPROTO ; 2647  dÚe ; 2650 ”r = `·r£_browsšg_¡©us ( pdu ); 2651 ià( ”r < 0) 2652  dÚe ; 2654 ià( pdu -> ·¿ms_Ën < (* r¥ )) { 2655 ”r = - EPROTO ; 2656  dÚe ; 2659 r¥ = (*è pdu -> ·¿ms ; 2661 couÁ” = `be16_to_ýu ( r¥ ->counter); 2662 ™ems = `be32_to_ýu ( r¥ ->items); 2664 ·th = `·r£_fÞd”_li¡ ( r¥ -> d©a , pdu -> ·¿ms_Ën - (*rsp), 2665 r¥ -> d•th ); 2666 ià(! ·th ) 2667 ”r = - EPROTO ; 2669 dÚe : 2670 ¶ay” -> cfm -> `£t_brow£d ( £ssiÚ , ”r , couÁ” , ™ems , ·th , 2671 ¶ay” -> u£r_d©a ); 2673  FALSE ; 2674 } } 2676  $avrý_£t_brow£d_¶ay” ( avrý * £ssiÚ , ušt16_t ¶ay”_id ) 2678  iovec iov ; 2679  £t_brow£d_»q »q ; 2681 »q . id = `ýu_to_be16 ( ¶ay”_id ); 2683 iov . iov_ba£ = & »q ; 2684 iov . iov_Ën = ( »q ); 2686  `avrý_£nd_browsšg_»q ( £ssiÚ , AVRCP_SET_BROWSED_PLAYER , 2687 & iov , 1, £t_brow£d_r¥ , £ssiÚ ); 2688 } } 2690  gboÞ—n $g‘_fÞd”_™ems_r¥ ( avùp * cÚn , 2691 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 2692 * u£r_d©a ) 2694  avrý * £ssiÚ = u£r_d©a ; 2695  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 2696  avrý_browsšg_h—d” * pdu ; 2697  g‘_fÞd”_™ems_r¥ * r¥ ; 2698 ušt16_t couÁ” = 0, numb” = 0; 2699 ušt8_t * ·¿ms = NULL ; 2700  ”r ; 2702 `DBG (""); 2704 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> g‘_fÞd”_™ems ) 2705  FALSE ; 2707 pdu = `·r£_browsšg_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2708 ià(! pdu ) { 2709 ”r = - EPROTO ; 2710  dÚe ; 2713 ”r = `·r£_browsšg_¡©us ( pdu ); 2714 ià( ”r < 0) 2715  dÚe ; 2717 ià( pdu -> ·¿ms_Ën < (* r¥ )) { 2718 ”r = - EPROTO ; 2719  dÚe ; 2722 r¥ = (*è pdu -> ·¿ms ; 2724 couÁ” = `be16_to_ýu ( r¥ ->counter); 2725 numb” = `be16_to_ýu ( r¥ ->number); 2726 ·¿ms = r¥ -> d©a ; 2730 dÚe : 2731 ¶ay” -> cfm -> `g‘_fÞd”_™ems ( £ssiÚ , ”r , couÁ” , numb” , ·¿ms , 2732 ¶ay” -> u£r_d©a ); 2734  FALSE ; 2735 } } 2737  $avrý_g‘_fÞd”_™ems ( avrý * £ssiÚ , ušt8_t scÝe , 2738 ušt32_t ¡¬t , ušt32_ˆ ’d , ušt8_t numb” , 2739 ušt32_t * ©Œs ) 2742  iovec iov [2]; 2743  g‘_fÞd”_™ems_»q »q ; 2744  i ; 2746 »q . scÝe = scope; 2747 »q . ¡¬t = `ýu_to_be32 (start); 2748 »q . ’d = `ýu_to_be32 (end); 2749 »q . numb” =‚umber; 2751 iov [0]. iov_ba£ = & »q ; 2752 iov [0]. iov_Ën = ( »q ); 2754 ià(! numb” ) 2755  `avrý_£nd_browsšg_»q ( £ssiÚ , AVRCP_GET_FOLDER_ITEMS , 2756 iov , 1, g‘_fÞd”_™ems_r¥ , 2757 £ssiÚ ); 2759  i = 0; i < numb” ; i++) 2760 ©Œs [ i ] = `ýu_to_be32 (attrs[i]); 2762 iov [1]. iov_ba£ = ©Œs ; 2763 iov [1]. iov_Ën = numb” * (* ©Œs ); 2765  `avrý_£nd_browsšg_»q ( £ssiÚ , AVRCP_GET_FOLDER_ITEMS , 2766 iov , 2, g‘_fÞd”_™ems_r¥ , £ssiÚ ); 2767 } } 2769  gboÞ—n $chªge_·th_r¥ ( avùp * cÚn , ušt8_t * Ý”ªds , 2770 size_t Ý”ªd_couÁ , * u£r_d©a ) 2772  avrý * £ssiÚ = u£r_d©a ; 2773  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 2774  avrý_browsšg_h—d” * pdu ; 2775  chªge_·th_r¥ * r¥ ; 2776 ušt32_t ™ems = 0; 2777  ”r ; 2779 `DBG (""); 2781 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> chªge_·th ) 2782  FALSE ; 2784 pdu = `·r£_browsšg_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2785 ià(! pdu ) { 2786 ”r = - EPROTO ; 2787  dÚe ; 2790 ”r = `·r£_browsšg_¡©us ( pdu ); 2791 ià( ”r < 0) 2792  dÚe ; 2794 ià( pdu -> ·¿ms_Ën < (* r¥ )) { 2795 ”r = - EPROTO ; 2796  dÚe ; 2799 r¥ = (*è pdu -> ·¿ms ; 2801 ™ems = `be32_to_ýu ( r¥ ->items); 2803 dÚe : 2804 ¶ay” -> cfm -> `chªge_·th ( £ssiÚ , ”r , ™ems ,…Ïy”-> u£r_d©a ); 2806  FALSE ; 2807 } } 2809  $avrý_chªge_·th ( avrý * £ssiÚ , ušt8_t dœeùiÚ , ušt64_t uid , 2810 ušt16_t couÁ” ) 2812  iovec iov ; 2813  chªge_·th_»q »q ; 2815 »q . couÁ” = `ýu_to_be16 (counter); 2816 »q . dœeùiÚ = direction; 2817 »q . uid = `ýu_to_be64 (uid); 2819 iov . iov_ba£ = & »q ; 2820 iov . iov_Ën = ( »q ); 2822  `avrý_£nd_browsšg_»q ( £ssiÚ , AVRCP_CHANGE_PATH , 2823 & iov , 1, chªge_·th_r¥ , £ssiÚ ); 2824 } } 2826  gboÞ—n $g‘_™em_©Œibu‹s_r¥ ( avùp * cÚn , ušt8_t * Ý”ªds , 2827 size_t Ý”ªd_couÁ , * u£r_d©a ) 2829  avrý * £ssiÚ = u£r_d©a ; 2830  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 2831  avrý_browsšg_h—d” * pdu ; 2832 ušt8_t numb” = 0; 2833 ušt32_t ©Œs [ AVRCP_MEDIA_ATTRIBUTE_LAST ]; 2834 * ‹xt [ AVRCP_MEDIA_ATTRIBUTE_LAST ]; 2835  ”r ; 2837 `DBG (""); 2839 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> g‘_™em_©Œibu‹s ) 2840  FALSE ; 2842 pdu = `·r£_browsšg_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2843 ià(! pdu ) { 2844 ”r = - EPROTO ; 2845  dÚe ; 2848 ”r = `·r£_browsšg_¡©us ( pdu ); 2849 ià( ”r < 0) 2850  dÚe ; 2852 ”r = `·r£_™ems ( pdu , & numb” , ©Œs , ‹xt ); 2854 dÚe : 2855 ¶ay” -> cfm -> `g‘_™em_©Œibu‹s ( £ssiÚ , ”r , numb” , ©Œs , ‹xt , 2856 ¶ay” -> u£r_d©a ); 2858  FALSE ; 2859 } } 2861  $avrý_g‘_™em_©Œibu‹s ( avrý * £ssiÚ , ušt8_t scÝe , 2862 ušt64_t uid , ušt16_t couÁ” , ušt8_t numb” , 2863 ušt32_t * ©Œs ) 2865  iovec iov [2]; 2866  g‘_™em_©Œibu‹s_»q »q ; 2867  i ; 2869 »q . scÝe = scope; 2870 »q . uid = `ýu_to_be64 (uid); 2871 »q . couÁ” = `ýu_to_be16 (counter); 2872 »q . numb” =‚umber; 2874 iov [0]. iov_ba£ = & »q ; 2875 iov [0]. iov_Ën = ( »q ); 2877 ià(! numb” ) 2878  `avrý_£nd_browsšg_»q ( £ssiÚ , 2879 AVRCP_GET_ITEM_ATTRIBUTES , 2880 iov , 1, g‘_™em_©Œibu‹s_r¥ , 2881 £ssiÚ ); 2883 ià( numb” > AVRCP_MEDIA_ATTRIBUTE_LAST ) 2884  - EINVAL ; 2886  i = 0; i < numb” ; i++) { 2887 ià( ©Œs [ i ] > AVRCP_MEDIA_ATTRIBUTE_LAST || 2888 ©Œs [ i ] =ð AVRCP_MEDIA_ATTRIBUTE_ILLEGAL ) 2889  - EINVAL ; 2890 ©Œs [ i ] = `ýu_to_be32 (attrs[i]); 2893 iov [1]. iov_ba£ = ©Œs ; 2894 iov [1]. iov_Ën = numb” * (* ©Œs ); 2896  `avrý_£nd_browsšg_»q ( £ssiÚ , AVRCP_GET_ITEM_ATTRIBUTES , 2897 iov , 2, g‘_™em_©Œibu‹s_r¥ , 2898 £ssiÚ ); 2899 } } 2901  gboÞ—n $¶ay_™em_r¥ ( avùp * cÚn , ušt8_t * Ý”ªds , 2902 size_t Ý”ªd_couÁ , * u£r_d©a ) 2904  avrý * £ssiÚ = u£r_d©a ; 2905  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 2906  avrý_browsšg_h—d” * pdu ; 2907  ”r ; 2909 `DBG (""); 2911 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> ¶ay_™em ) 2912  FALSE ; 2914 pdu = `·r£_browsšg_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2915 ià(! pdu ) { 2916 ”r = - EPROTO ; 2917  dÚe ; 2920 ”r = `·r£_browsšg_¡©us ( pdu ); 2922 dÚe : 2923 ¶ay” -> cfm -> `¶ay_™em ( £ssiÚ , ”r ,…Ïy”-> u£r_d©a ); 2925  FALSE ; 2926 } } 2928  $avrý_¶ay_™em ( avrý * £ssiÚ , ušt8_t scÝe , ušt64_t uid , 2929 ušt16_t couÁ” ) 2931  iovec iov ; 2932  ¶ay_™em_»q »q ; 2934 ià( scÝe > AVRCP_MEDIA_NOW_PLAYING ) 2935  - EINVAL ; 2937 »q . scÝe = scope; 2938 »q . uid = `ýu_to_be64 (uid); 2939 »q . couÁ” = `ýu_to_be16 (counter); 2941 iov . iov_ba£ = & »q ; 2942 iov . iov_Ën = ( »q ); 2944  `avrý_£nd_browsšg_»q ( £ssiÚ , AVRCP_PLAY_ITEM , & iov , 1, 2945 ¶ay_™em_r¥ , £ssiÚ ); 2946 } } 2948  gboÞ—n $£¬ch_r¥ ( avùp * cÚn , ušt8_t * Ý”ªds , 2949 size_t Ý”ªd_couÁ , * u£r_d©a ) 2951  avrý * £ssiÚ = u£r_d©a ; 2952  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 2953  avrý_browsšg_h—d” * pdu ; 2954  £¬ch_r¥ * r¥ ; 2955 ušt16_t couÁ” = 0; 2956 ušt32_t ™ems = 0; 2957  ”r ; 2959 `DBG (""); 2961 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> £¬ch ) 2962  FALSE ; 2964 pdu = `·r£_browsšg_pdu ( Ý”ªds , Ý”ªd_couÁ ); 2965 ià(! pdu ) { 2966 ”r = - EPROTO ; 2967  dÚe ; 2970 ”r = `·r£_browsšg_¡©us ( pdu ); 2971 ià( ”r < 0) 2972  dÚe ; 2974 ià( pdu -> ·¿ms_Ën < (* r¥ )) { 2975 ”r = - EPROTO ; 2976  dÚe ; 2979 r¥ = (*è pdu -> ·¿ms ; 2981 couÁ” = `be16_to_ýu ( r¥ ->counter); 2982 ™ems = `be32_to_ýu ( r¥ ->items); 2984 ”r = 0; 2986 dÚe : 2987 ¶ay” -> cfm -> `£¬ch ( £ssiÚ , ”r , couÁ” , ™ems ,…Ïy”-> u£r_d©a ); 2989  FALSE ; 2990 } } 2992  $avrý_£¬ch ( avrý * £ssiÚ , cÚ¡ * ¡ršg ) 2994  iovec iov [2]; 2995  £¬ch_»q »q ; 2996 size_t Ën ; 2998 ià(! ¡ršg ) 2999  - EINVAL ; 3001 Ën = `¡ºËn ( ¡ršg , UINT8_MAX ); 3003 »q . ch¬£t = `ýu_to_be16 ( AVRCP_CHARSET_UTF8 ); 3004 »q . Ën = `ýu_to_be16 (len); 3006 iov [0]. iov_ba£ = & »q ; 3007 iov [0]. iov_Ën = ( »q ); 3009 iov [1]. iov_ba£ = (*è ¡ršg ; 3010 iov [1]. iov_Ën = Ën ; 3012  `avrý_£nd_browsšg_»q ( £ssiÚ , AVRCP_SEARCH , iov , 2, 3013 £¬ch_r¥ , £ssiÚ ); 3014 } } 3016  gboÞ—n $add_to_now_¶ayšg_r¥ ( avùp * cÚn , ušt8_t * Ý”ªds , 3017 size_t Ý”ªd_couÁ , * u£r_d©a ) 3019  avrý * £ssiÚ = u£r_d©a ; 3020  avrý_¶ay” * ¶ay” = £ssiÚ ->player; 3021  avrý_browsšg_h—d” * pdu ; 3022  ”r ; 3024 `DBG (""); 3026 ià(! ¶ay” || !¶ay”-> cfm || !¶ay”->cfm-> add_to_now_¶ayšg ) 3027  FALSE ; 3029 pdu = `·r£_browsšg_pdu ( Ý”ªds , Ý”ªd_couÁ ); 3030 ià(! pdu ) { 3031 ”r = - EPROTO ; 3032  dÚe ; 3035 ”r = `·r£_browsšg_¡©us ( pdu ); 3037 dÚe : 3038 ¶ay” -> cfm -> `add_to_now_¶ayšg ( £ssiÚ , ”r ,…Ïy”-> u£r_d©a ); 3040  FALSE ; 3041 } } 3043  $avrý_add_to_now_¶ayšg ( avrý * £ssiÚ , ušt8_t scÝe , ušt64_t uid , 3044 ušt16_t couÁ” ) 3046  iovec iov ; 3047  add_to_now_¶ayšg_»q »q ; 3049 ià( scÝe > AVRCP_MEDIA_NOW_PLAYING ) 3050  - EINVAL ; 3052 »q . scÝe = scope; 3053 »q . uid = `ýu_to_be64 (uid); 3054 »q . couÁ” = `ýu_to_be16 (counter); 3056 iov . iov_ba£ = & »q ; 3057 iov . iov_Ën = ( »q ); 3059  `avrý_£nd_browsšg_»q ( £ssiÚ , AVRCP_ADD_TO_NOW_PLAYING , 3060 & iov , 1, add_to_now_¶ayšg_r¥ , 3061 £ssiÚ ); 3062 } } 3064  $avrý_g‘_ÿ·bž™›s_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3065 ušt8_t numb” , ušt8_ˆ* ev’ts ) 3067  iovec iov [2]; 3068  g‘_ÿ·bž™›s_r¥ r¥ ; 3070 ià( numb” > AVRCP_EVENT_LAST ) 3071  - EINVAL ; 3073 r¥ . ÿp = CAP_EVENTS_SUPPORTED ; 3074 r¥ . numb” =‚umber; 3076 iov [0]. iov_ba£ = & r¥ ; 3077 iov [0]. iov_Ën = ( r¥ ); 3079 iov [1]. iov_ba£ = ev’ts ; 3080 iov [1]. iov_Ën = numb” ; 3082  `avrý_£nd ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_STABLE , 3083 AVC_SUBUNIT_PANEL , AVRCP_GET_CAPABILITIES , 3084 iov , 2); 3085 } } 3087  $avrý_li¡_¶ay”_©Œibu‹s_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3088 ušt8_t numb” , ušt8_ˆ* ©Œs ) 3090  iovec iov [2]; 3091  li¡_©Œibu‹s_r¥ r¥ ; 3093 ià( numb” > AVRCP_ATTRIBUTE_LAST ) 3094  - EINVAL ; 3096 r¥ . numb” =‚umber; 3098 iov [0]. iov_ba£ = & r¥ ; 3099 iov [0]. iov_Ën = ( r¥ ); 3101 ià(! numb” ) 3102  `avrý_£nd ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_STABLE , 3103 AVC_SUBUNIT_PANEL , AVRCP_LIST_PLAYER_ATTRIBUTES , 3104 iov , 1); 3106 iov [1]. iov_ba£ = ©Œs ; 3107 iov [1]. iov_Ën = numb” ; 3109  `avrý_£nd ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_STABLE , 3110 AVC_SUBUNIT_PANEL , AVRCP_LIST_PLAYER_ATTRIBUTES , 3111 iov , 2); 3112 } } 3114  $avrý_g‘_¶ay”_©Œibu‹_‹xt_r¥ ( avrý * £ssiÚ , 3115 ušt8_t Œª§ùiÚ , ušt8_ˆ numb” , 3116 ušt8_t * ©Œs , cÚ¡ ** ‹xt ) 3118  iovec iov [1 + AVRCP_ATTRIBUTE_LAST * 2]; 3119  ‹xt_v®ue v® [ AVRCP_ATTRIBUTE_LAST ]; 3120  i ; 3122 ià( numb” > AVRCP_ATTRIBUTE_LAST ) 3123  - EINVAL ; 3125 iov [0]. iov_ba£ = & numb” ; 3126 iov [0]. iov_Ën = ( numb” ); 3128  i = 0; i < numb” ; i++) { 3129 ušt8_t Ën = 0; 3131 ià( ©Œs [ i ] > AVRCP_ATTRIBUTE_LAST || 3132 ©Œs [ i ] =ð AVRCP_ATTRIBUTE_ILEGAL ) 3133  - EINVAL ; 3135 ià( ‹xt [ i ]) 3136 Ën = `¡¾’ ( ‹xt [ i ]); 3138 v® [ i ]. ©Œ = ©Œs [i]; 3139 v® [ i ]. ch¬£t = `ýu_to_be16 ( AVRCP_CHARSET_UTF8 ); 3140 v® [ i ]. Ën =†en; 3142 iov [ i + 1]. iov_ba£ = & v® [i]; 3143 iov [ i + 1]. iov_Ën = ( v® [i]); 3145 iov [ i + 2]. iov_ba£ = (*è ‹xt [i]; 3146 iov [ i + 2]. iov_Ën = Ën ; 3149  `avrý_£nd ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_STABLE , 3150 AVC_SUBUNIT_PANEL , AVRCP_GET_PLAYER_ATTRIBUTE_TEXT , 3151 iov , 1 + i * 2); 3152 } } 3154  $avrý_li¡_¶ay”_v®ues_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3155 ušt8_t numb” , ušt8_ˆ* v®ues ) 3157  iovec iov [2]; 3159 ià( numb” > AVRCP_ATTRIBUTE_LAST ) 3160  - EINVAL ; 3162 iov [0]. iov_ba£ = & numb” ; 3163 iov [0]. iov_Ën = ( numb” ); 3165 iov [1]. iov_ba£ = v®ues ; 3166 iov [1]. iov_Ën = numb” ; 3168  `avrý_£nd ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_STABLE , 3169 AVC_SUBUNIT_PANEL , AVRCP_LIST_PLAYER_VALUES , 3170 iov , 2); 3171 } } 3173  $avrý_g‘_¶ay_¡©us_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3174 ušt32_t pos™iÚ , ušt32_ˆ du¿tiÚ , 3175 ušt8_t ¡©us ) 3177  iovec iov ; 3178  g‘_¶ay_¡©us_r¥ r¥ ; 3180 r¥ . du¿tiÚ = `ýu_to_be32 (duration); 3181 r¥ . pos™iÚ = `ýu_to_be32 (position); 3182 r¥ . ¡©us = status; 3184 iov . iov_ba£ = & r¥ ; 3185 iov . iov_Ën = ( r¥ ); 3187  `avrý_£nd ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_STABLE , 3188 AVC_SUBUNIT_PANEL , AVRCP_GET_PLAY_STATUS , 3189 & iov , 1); 3190 } } 3192  $avrý_g‘_¶ay”_v®ues_‹xt_r¥ ( avrý * £ssiÚ , 3193 ušt8_t Œª§ùiÚ , ušt8_ˆ numb” , 3194 ušt8_t * v®ues , cÚ¡ ** ‹xt ) 3196  iovec iov [1 + AVRCP_ATTRIBUTE_LAST * 2]; 3197  ‹xt_v®ue v® [ AVRCP_ATTRIBUTE_LAST ]; 3198  i ; 3200 ià( numb” > AVRCP_ATTRIBUTE_LAST ) 3201  - EINVAL ; 3203 iov [0]. iov_ba£ = & numb” ; 3204 iov [0]. iov_Ën = ( numb” ); 3206  i = 0; i < numb” ; i++) { 3207 ušt8_t Ën = 0; 3209 ià( ‹xt [ i ]) 3210 Ën = `¡¾’ ( ‹xt [ i ]); 3212 v® [ i ]. ©Œ = v®ues [i]; 3213 v® [ i ]. ch¬£t = `ýu_to_be16 ( AVRCP_CHARSET_UTF8 ); 3214 v® [ i ]. Ën =†en; 3216 iov [ i + 1]. iov_ba£ = & v® [i]; 3217 iov [ i + 1]. iov_Ën = ( v® [i]); 3219 iov [ i + 2]. iov_ba£ = (*è ‹xt [i]; 3220 iov [ i + 2]. iov_Ën = Ën ; 3223  `avrý_£nd ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_STABLE , 3224 AVC_SUBUNIT_PANEL , AVRCP_GET_PLAYER_VALUE_TEXT , 3225 iov , 1 + i * 2); 3226 } } 3228  $avrý_g‘_cu¼’t_¶ay”_v®ue_r¥ ( avrý * £ssiÚ , 3229 ušt8_t Œª§ùiÚ , ušt8_ˆ numb” , 3230 ušt8_t * ©Œs , ušt8_ˆ* v®ues ) 3232  iovec iov [1 + AVRCP_ATTRIBUTE_LAST ]; 3233  ©Œ_v®ue v® [ AVRCP_ATTRIBUTE_LAST ]; 3234  i ; 3236 ià( numb” > AVRCP_ATTRIBUTE_LAST ) 3237  - EINVAL ; 3239 iov [0]. iov_ba£ = & numb” ; 3240 iov [0]. iov_Ën = ( numb” ); 3242  i = 0; i < numb” ; i++) { 3243 v® [ i ]. ©Œ = ©Œs [i]; 3244 v® [ i ]. v®ue = v®ues [i]; 3246 iov [ i + 1]. iov_ba£ = & v® [i]; 3247 iov [ i + 1]. iov_Ën = ( v® [i]); 3250  `avrý_£nd ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_STABLE , 3251 AVC_SUBUNIT_PANEL , AVRCP_GET_CURRENT_PLAYER_VALUE , 3252 iov , 1 + i ); 3253 } } 3255  $avrý_£t_¶ay”_v®ue_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ ) 3257  `avrý_£nd ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_STABLE , 3258 AVC_SUBUNIT_PANEL , AVRCP_SET_PLAYER_VALUE , NULL , 0); 3259 } } 3261  $avrý_g‘_–em’t_©Œs_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3262 ušt8_t * ·¿ms , size_t ·¿ms_Ën ) 3264  iovec iov ; 3266 iov . iov_ba£ = ·¿ms ; 3267 iov . iov_Ën = ·¿ms_Ën ; 3269  `avrý_£nd ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_STABLE , 3270 AVC_SUBUNIT_PANEL , AVRCP_GET_ELEMENT_ATTRIBUTES , 3271 & iov , 1); 3272 } } 3274  $avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3275 ušt8_t code , ušt8_ˆ ev’t , 3276 * d©a , size_t Ën ) 3278  iovec iov [2]; 3279 ušt16_t * ¶ay” ; 3280 ušt8_t * vÞume ; 3282 ià( ev’t > AVRCP_EVENT_LAST ) 3283  - EINVAL ; 3285 iov [0]. iov_ba£ = & ev’t ; 3286 iov [0]. iov_Ën = ( ev’t ); 3288  ev’t ) { 3289  AVRCP_EVENT_STATUS_CHANGED : 3290 ià( Ën !ð( ušt8_t )) 3291  - EINVAL ; 3293  AVRCP_EVENT_VOLUME_CHANGED : 3294 ià( Ën !ð( ušt8_t )) 3295  - EINVAL ; 3296 vÞume = d©a ; 3297 ià( vÞume [0] > 127) 3298  - EINVAL ; 3300  AVRCP_EVENT_TRACK_CHANGED : 3301 ià( Ën !ð( ušt64_t )) 3302  - EINVAL ; 3304 `put_be64 (*( ušt64_t *è d©a , data); 3306  AVRCP_EVENT_PLAYBACK_POS_CHANGED : 3307 ià( Ën !ð( ušt32_t )) 3308  - EINVAL ; 3310 `put_be32 (*( ušt32_t *è d©a , data); 3312  AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED : 3313 ià( Ën != 4) 3314  - EINVAL ; 3316 ¶ay” = d©a ; 3317 ¶ay” [0] = `ýu_to_be16 (player[0]); 3318 ¶ay” [1] = `ýu_to_be16 (player[1]); 3321  AVRCP_EVENT_SETTINGS_CHANGED : 3322 ià( Ën < ( ušt8_t )) 3323  - EINVAL ; 3325  AVRCP_EVENT_UIDS_CHANGED : 3326 ià( Ën !ð( ušt16_t )) 3327  - EINVAL ; 3329 `put_be16 (*( ušt16_t *è d©a , data); 3332  `avrý_£nd ( £ssiÚ , Œª§ùiÚ , code , AVC_SUBUNIT_PANEL , 3333 AVRCP_REGISTER_NOTIFICATION , iov , 1); 3336 iov [1]. iov_ba£ = d©a ; 3337 iov [1]. iov_Ën = Ën ; 3339  `avrý_£nd ( £ssiÚ , Œª§ùiÚ , code , AVC_SUBUNIT_PANEL , 3340 AVRCP_REGISTER_NOTIFICATION , iov , 2); 3341 } } 3343  $avrý_£t_vÞume_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3344 ušt8_t vÞume ) 3346  iovec iov ; 3348 ià( vÞume > 127) 3349  - EINVAL ; 3351 iov . iov_ba£ = & vÞume ; 3352 iov . iov_Ën = ( vÞume ); 3354  `avrý_£nd ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_STABLE , 3355 AVC_SUBUNIT_PANEL , AVRCP_SET_ABSOLUTE_VOLUME , 3356 & iov , 1); 3357 } } 3359  $avrý_£t_add»s£d_¶ay”_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3360 ušt8_t ¡©us ) 3362  iovec iov ; 3364 iov . iov_ba£ = & ¡©us ; 3365 iov . iov_Ën = ( ¡©us ); 3367  `avrý_£nd ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_STABLE , 3368 AVC_SUBUNIT_PANEL , AVRCP_SET_ADDRESSED_PLAYER , 3369 & iov , 1); 3370 } } 3372  $avrý_¡©us_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3373 ušt8_t pdu_id , ušt8_ˆ ¡©us ) 3375  iovec iov ; 3377 ià( ¡©us > AVRCP_STATUS_ADDRESSED_PLAYER_CHANGED ) 3378  - EINVAL ; 3380 iov . iov_ba£ = & ¡©us ; 3381 iov . iov_Ën = ( ¡©us ); 3383  `avrý_£nd_browsšg ( £ssiÚ , Œª§ùiÚ , pdu_id , & iov , 1); 3384 } } 3386  $avrý_£t_brow£d_¶ay”_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3387 ušt8_t ¡©us , ušt16_t couÁ” , 3388 ušt32_t ™ems , ušt8_t d•th , 3389 cÚ¡ ** fÞd”s ) 3391  iovec iov [ UINT8_MAX * 2 + 1]; 3392  £t_brow£d_r¥ r¥ ; 3393 ušt16_t Ën [ UINT8_MAX ]; 3394  i ; 3396 ià( ¡©us !ð AVRCP_STATUS_SUCCESS ) 3397  `avrý_¡©us_r¥ ( £ssiÚ , Œª§ùiÚ , 3398 AVRCP_SET_BROWSED_PLAYER , ¡©us ); 3400 r¥ . ¡©us = status; 3401 r¥ . couÁ” = `ýu_to_be16 (counter); 3402 r¥ . ™ems = `ýu_to_be32 (items); 3403 r¥ . ch¬£t = `ýu_to_be16 ( AVRCP_CHARSET_UTF8 ); 3404 r¥ . d•th = depth; 3406 iov [0]. iov_ba£ = & r¥ ; 3407 iov [0]. iov_Ën = ( r¥ ); 3409 ià(! d•th ) 3410  `avrý_£nd_browsšg ( £ssiÚ , Œª§ùiÚ , 3411 AVRCP_SET_BROWSED_PLAYER , 3412 iov , 1); 3414  i = 0; i < d•th ; i++) { 3415 ià(! fÞd”s [ i ]) 3416  - EINVAL ; 3418 Ën [ i ] = `¡¾’ ( fÞd”s [i]); 3420 iov [ i * 2 + 2]. iov_ba£ = (*è fÞd”s [i]; 3421 iov [ i * 2 + 2]. iov_Ën = Ën [i]; 3423 Ën [ i ] = `ýu_to_be16 (len[i]); 3425 iov [ i * 2 + 1]. iov_ba£ = & Ën [i]; 3426 iov [ i * 2 + 1]. iov_Ën = ( Ën [i]); 3429  `avrý_£nd_browsšg ( £ssiÚ , Œª§ùiÚ , 3430 AVRCP_SET_BROWSED_PLAYER , iov , 3431 d•th * 2 + 1); 3432 } } 3434  $avrý_g‘_fÞd”_™ems_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3435 ušt8_t ¡©us , ušt16_t couÁ” , 3436 ušt8_t numb” , ušt8_ˆ* ty³ , 3437 ušt16_t * Ën , ušt8_t ** ·¿ms ) 3439  iovec iov [ UINT8_MAX * 2 + 1]; 3440  g‘_fÞd”_™ems_r¥ r¥ ; 3441 ušt8_t ™em [ UINT8_MAX ][3]; 3442  i ; 3444 ià( ¡©us !ð AVRCP_STATUS_SUCCESS ) 3445  `avrý_¡©us_r¥ ( £ssiÚ , Œª§ùiÚ , 3446 AVRCP_GET_FOLDER_ITEMS , ¡©us ); 3448 r¥ . ¡©us = status; 3449 r¥ . couÁ” = `ýu_to_be16 (counter); 3450 r¥ . numb” = `ýu_to_be16 (number); 3452 iov [0]. iov_ba£ = & r¥ ; 3453 iov [0]. iov_Ën = ( r¥ ); 3455  i = 0; i < numb” ; i++) { 3456 ™em [ i ][0] = ty³ [i]; 3457 `put_be16 ( Ën [ i ], & ™em [i][1]); 3459 iov [ i * 2 + 1]. iov_ba£ = ™em [i]; 3460 iov [ i * 2 + 1]. iov_Ën = ( ™em [i]); 3462 iov [ i * 2 + 2]. iov_ba£ = ·¿ms [i]; 3463 iov [ i * 2 + 2]. iov_Ën = Ën [i]; 3466  `avrý_£nd_browsšg ( £ssiÚ , Œª§ùiÚ , AVRCP_GET_FOLDER_ITEMS , 3467 iov , numb” * 2 + 1); 3468 } } 3470  $avrý_chªge_·th_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3471 ušt8_t ¡©us , ušt32_t ™ems ) 3473  iovec iov ; 3474  chªge_·th_r¥ r¥ ; 3476 ià( ¡©us !ð AVRCP_STATUS_SUCCESS ) 3477  `avrý_¡©us_r¥ ( £ssiÚ , Œª§ùiÚ , AVRCP_CHANGE_PATH , 3478 ¡©us ); 3480 r¥ . ¡©us = status; 3481 r¥ . ™ems = `ýu_to_be32 (items); 3483 iov . iov_ba£ = & r¥ ; 3484 iov . iov_Ën = ( r¥ ); 3486  `avrý_£nd_browsšg ( £ssiÚ , Œª§ùiÚ , AVRCP_CHANGE_PATH , 3487 & iov , 1); 3488 } } 3490  boÞ $·ck_©Œibu‹_li¡ ( iovec * iov , ušt8_t numb” , 3491 ušt32_t * ©Œs , cÚ¡ ** ‹xt ) 3493  i ; 3494  medŸ_™em v® [ AVRCP_MEDIA_ATTRIBUTE_LAST ]; 3496  i = 0; i < numb” ; i++) { 3497 ušt16_t Ën = 0; 3499 ià( ©Œs [ i ] > AVRCP_MEDIA_ATTRIBUTE_LAST || 3500 ©Œs [ i ] =ð AVRCP_MEDIA_ATTRIBUTE_ILLEGAL ) 3501  çl£ ; 3503 ià( ‹xt [ i ]) 3504 Ën = `¡¾’ ( ‹xt [ i ]); 3506 v® [ i ]. ©Œ = `ýu_to_be32 ( ©Œs [i]); 3507 v® [ i ]. ch¬£t = `ýu_to_be16 ( AVRCP_CHARSET_UTF8 ); 3508 v® [ i ]. Ën = `ýu_to_be16 (len); 3510 iov [ i ]. iov_ba£ = & v® [i]; 3511 iov [ i ]. iov_Ën = ( v® [i]); 3513 iov [ i + 1]. iov_ba£ = (*è ‹xt [i]; 3514 iov [ i + 1]. iov_Ën = Ën ; 3517  Œue ; 3518 } } 3520  $avrý_g‘_™em_©Œibu‹s_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3521 ušt8_t ¡©us , ušt8_ˆ numb” , 3522 ušt32_t * ©Œs , cÚ¡ ** ‹xt ) 3524  iovec iov [ AVRCP_MEDIA_ATTRIBUTE_LAST * 2 + 1]; 3525  g‘_™em_©Œibu‹s_r¥ r¥ ; 3527 ià( numb” > AVRCP_MEDIA_ATTRIBUTE_LAST ) 3528  - EINVAL ; 3530 ià( ¡©us !ð AVRCP_STATUS_SUCCESS ) 3531  `avrý_¡©us_r¥ ( £ssiÚ , Œª§ùiÚ , 3532 AVRCP_GET_ITEM_ATTRIBUTES , ¡©us ); 3534 r¥ . ¡©us = status; 3535 r¥ . numb” =‚umber; 3537 iov [0]. iov_ba£ = & r¥ ; 3538 iov [0]. iov_Ën = ( r¥ ); 3540 ià(! `·ck_©Œibu‹_li¡ (& iov [1], numb” , ©Œs , ‹xt )) 3541  - EINVAL ; 3543  `avrý_£nd_browsšg ( £ssiÚ , Œª§ùiÚ , 3544 AVRCP_GET_ITEM_ATTRIBUTES , iov , 3545 numb” * 2 + 1); 3546 } } 3548  $avrý_¶ay_™em_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3549 ušt8_t ¡©us ) 3551  `avrý_¡©us_r¥ ( £ssiÚ , Œª§ùiÚ , AVRCP_PLAY_ITEM , 3552 ¡©us ); 3553 } } 3555  $avrý_£¬ch_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , ušt8_ˆ ¡©us , 3556 ušt16_t couÁ” , ušt32_t ™ems ) 3558  iovec iov ; 3559  £¬ch_r¥ r¥ ; 3561 ià( ¡©us !ð AVRCP_STATUS_SUCCESS ) 3562  `avrý_¡©us_r¥ ( £ssiÚ , Œª§ùiÚ , AVRCP_SEARCH , 3563 ¡©us ); 3565 r¥ . ¡©us = status; 3566 r¥ . couÁ” = `ýu_to_be16 (counter); 3567 r¥ . ™ems = `ýu_to_be32 (items); 3569 iov . iov_ba£ = & r¥ ; 3570 iov . iov_Ën = ( r¥ ); 3572  `avrý_£nd_browsšg ( £ssiÚ , Œª§ùiÚ , AVRCP_SEARCH , 3573 & iov , 1); 3574 } } 3576  $avrý_add_to_now_¶ayšg_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 3577 ušt8_t ¡©us ) 3579  `avrý_¡©us_r¥ ( £ssiÚ , Œª§ùiÚ , AVRCP_ADD_TO_NOW_PLAYING , 3580 ¡©us ); 3581 } } 3583  $avrý_£nd_·s¡hrough ( avrý * £ssiÚ , ušt32_t v’dÜ , ušt8_t Ý ) 3585 ušt8_t ·¿ms [5]; 3587 ià(! v’dÜ ) 3588  `avùp_£nd_·s¡hrough ( £ssiÚ -> cÚn , Ý , NULL , 0); 3590 `htÚ24 ( ·¿ms , v’dÜ ); 3591 `put_be16 ( Ý , & ·¿ms [3]); 3593  `avùp_£nd_·s¡hrough ( £ssiÚ -> cÚn , AVC_VENDOR_UNIQUE , ·¿ms , 3594 ( ·¿ms )); 3595 } } @android/avrcp-lib.h 25  #AVRCP_GET_CAPABILITIES 0x10 ) 26  #AVRCP_LIST_PLAYER_ATTRIBUTES 0X11 ) 27  #AVRCP_LIST_PLAYER_VALUES 0x12 ) 28  #AVRCP_GET_CURRENT_PLAYER_VALUE 0x13 ) 29  #AVRCP_SET_PLAYER_VALUE 0x14 ) 30  #AVRCP_GET_PLAYER_ATTRIBUTE_TEXT 0x15 ) 31  #AVRCP_GET_PLAYER_VALUE_TEXT 0x16 ) 32  #AVRCP_DISPLAYABLE_CHARSET 0x17 ) 33  #AVRCP_CT_BATTERY_STATUS 0x18 ) 34  #AVRCP_GET_ELEMENT_ATTRIBUTES 0x20 ) 35  #AVRCP_GET_PLAY_STATUS 0x30 ) 36  #AVRCP_REGISTER_NOTIFICATION 0x31 ) 37  #AVRCP_REQUEST_CONTINUING 0x40 ) 38  #AVRCP_ABORT_CONTINUING 0x41 ) 39  #AVRCP_SET_ABSOLUTE_VOLUME 0x50 ) 40  #AVRCP_SET_ADDRESSED_PLAYER 0x60 ) 41  #AVRCP_SET_BROWSED_PLAYER 0x70 ) 42  #AVRCP_GET_FOLDER_ITEMS 0x71 ) 43  #AVRCP_CHANGE_PATH 0x72 ) 44  #AVRCP_GET_ITEM_ATTRIBUTES 0x73 ) 45  #AVRCP_PLAY_ITEM 0x74 ) 46  #AVRCP_SEARCH 0x80 ) 47  #AVRCP_ADD_TO_NOW_PLAYING 0x90 ) 48  #AVRCP_GENERAL_REJECT 0xA0 ) 51  #AVRCP_EVENT_STATUS_CHANGED 0x01 ) 52  #AVRCP_EVENT_TRACK_CHANGED 0x02 ) 53  #AVRCP_EVENT_TRACK_REACHED_END 0x03 ) 54  #AVRCP_EVENT_TRACK_REACHED_START 0x04 ) 55  #AVRCP_EVENT_PLAYBACK_POS_CHANGED 0x05 ) 56  #AVRCP_EVENT_SETTINGS_CHANGED 0x08 ) 57  #AVRCP_EVENT_NOW_PLAYING_CONTENT_CHANGED 0x09 ) 58  #AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED 0x0a ) 59  #AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED 0x0b ) 60  #AVRCP_EVENT_UIDS_CHANGED 0x0c ) 61  #AVRCP_EVENT_VOLUME_CHANGED 0x0d ) 62  #AVRCP_EVENT_LAST AVRCP_EVENT_VOLUME_CHANGED ) 65  #AVRCP_STATUS_INVALID_COMMAND 0x00 ) 66  #AVRCP_STATUS_INVALID_PARAM 0x01 ) 67  #AVRCP_STATUS_PARAM_NOT_FOUND 0x02 ) 68  #AVRCP_STATUS_INTERNAL_ERROR 0x03 ) 69  #AVRCP_STATUS_SUCCESS 0x04 ) 70  #AVRCP_STATUS_UID_CHANGED 0x05 ) 71  #AVRCP_STATUS_NOT_DIRECTORY 0x08 ) 72  #AVRCP_STATUS_DOES_NOT_EXIST 0x09 ) 73  #AVRCP_STATUS_INVALID_SCOPE 0x0a ) 74  #AVRCP_STATUS_OUT_OF_BOUNDS 0x0b ) 75  #AVRCP_STATUS_INVALID_PLAYER_ID 0x11 ) 76  #AVRCP_STATUS_PLAYER_NOT_BROWSABLE 0x12 ) 77  #AVRCP_STATUS_NO_AVAILABLE_PLAYERS 0x15 ) 78  #AVRCP_STATUS_ADDRESSED_PLAYER_CHANGED 0x16 ) 81  #CAP_COMPANY_ID 0x02 ) 82  #CAP_EVENTS_SUPPORTED 0x03 ) 85  #AVRCP_ATTRIBUTE_ILEGAL 0x00 ) 86  #AVRCP_ATTRIBUTE_EQUALIZER 0x01 ) 87  #AVRCP_ATTRIBUTE_REPEAT_MODE 0x02 ) 88  #AVRCP_ATTRIBUTE_SHUFFLE 0x03 ) 89  #AVRCP_ATTRIBUTE_SCAN 0x04 ) 90  #AVRCP_ATTRIBUTE_LAST AVRCP_ATTRIBUTE_SCAN ) 93  #AVRCP_EQUALIZER_OFF 0x01 ) 94  #AVRCP_EQUALIZER_ON 0x02 ) 97  #AVRCP_REPEAT_MODE_OFF 0x01 ) 98  #AVRCP_REPEAT_MODE_SINGLE 0x02 ) 99  #AVRCP_REPEAT_MODE_ALL 0x03 ) 100  #AVRCP_REPEAT_MODE_GROUP 0x04 ) 103  #AVRCP_SHUFFLE_OFF 0x01 ) 104  #AVRCP_SHUFFLE_ALL 0x02 ) 105  #AVRCP_SHUFFLE_GROUP 0x03 ) 108  #AVRCP_SCAN_OFF 0x01 ) 109  #AVRCP_SCAN_ALL 0x02 ) 110  #AVRCP_SCAN_GROUP 0x03 ) 113  #AVRCP_MEDIA_ATTRIBUTE_ILLEGAL 0x00 ) 114  #AVRCP_MEDIA_ATTRIBUTE_TITLE 0x01 ) 115  #AVRCP_MEDIA_ATTRIBUTE_ARTIST 0x02 ) 116  #AVRCP_MEDIA_ATTRIBUTE_ALBUM 0x03 ) 117  #AVRCP_MEDIA_ATTRIBUTE_TRACK 0x04 ) 118  #AVRCP_MEDIA_ATTRIBUTE_N_TRACKS 0x05 ) 119  #AVRCP_MEDIA_ATTRIBUTE_GENRE 0x06 ) 120  #AVRCP_MEDIA_ATTRIBUTE_DURATION 0x07 ) 121  #AVRCP_MEDIA_ATTRIBUTE_LAST AVRCP_MEDIA_ATTRIBUTE_DURATION ) 124  #AVRCP_MEDIA_PLAYER_LIST 0x00 ) 125  #AVRCP_MEDIA_PLAYER_VFS 0x01 ) 126  #AVRCP_MEDIA_SEARCH 0x02 ) 127  #AVRCP_MEDIA_NOW_PLAYING 0x03 ) 130  #IEEEID_BTSIG 0x001958 ) 132  gavrý ; 134  savrý_cÚŒÞ_šd { 135 (* mg‘_ÿ·bž™›s è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 136 * mu£r_d©a ); 137 (* mli¡_©Œibu‹s è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 138 * mu£r_d©a ); 139 (* mg‘_©Œibu‹_‹xt è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 140 ušt8_t mnumb” , ušt8_ˆ* m©Œs , 141 * mu£r_d©a ); 142 (* mli¡_v®ues è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 143 ušt8_t m©Œ , * mu£r_d©a ); 144 (* mg‘_v®ue_‹xt è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 145 ušt8_t m©Œ , ušt8_ˆ mnumb” , 146 ušt8_t * mv®ues , * mu£r_d©a ); 147 (* mg‘_v®ue è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 148 ušt8_t mnumb” , ušt8_ˆ* m©Œs , 149 * mu£r_d©a ); 150 (* m£t_v®ue è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 151 ušt8_t mnumb” , ušt8_ˆ* m©Œs , 152 ušt8_t * mv®ues , * mu£r_d©a ); 153 (* mg‘_¶ay_¡©us è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 154 * mu£r_d©a ); 155 (* mg‘_–em’t_©Œibu‹s è( avrý * m£ssiÚ , 156 ušt8_t mŒª§ùiÚ , ušt64_t muid , 157 ušt8_t mnumb” , ušt32_t * m©Œs , 158 * mu£r_d©a ); 159 (* m»gi¡”_nÙifiÿtiÚ è( avrý * m£ssiÚ , 160 ušt8_t mŒª§ùiÚ , ušt8_ˆ mev’t , 161 ušt32_t mš‹rv® , * mu£r_d©a ); 162 (* m£t_vÞume è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 163 ušt8_t mvÞume , * mu£r_d©a ); 164 (* m£t_add»s£d è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 165 ušt16_t mid , * mu£r_d©a ); 166 (* m£t_brow£d è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 167 ušt16_t mid , * mu£r_d©a ); 168 (* mg‘_fÞd”_™ems è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 169 ušt8_t mscÝe , ušt32_t m¡¬t , 170 ušt32_t m’d , ušt16_t mnumb” , 171 ušt32_t * m©Œs , * mu£r_d©a ); 172 (* mchªge_·th è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 173 ušt16_t mcouÁ” , ušt8_t mdœeùiÚ , 174 ušt64_t muid , * mu£r_d©a ); 175 (* mg‘_™em_©Œibu‹s è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 176 ušt8_t mscÝe , ušt64_t muid , 177 ušt16_t mcouÁ” , ušt8_t mnumb” , 178 ušt32_t * m©Œs , * mu£r_d©a ); 179 (* m¶ay_™em è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 180 ušt8_t mscÝe , ušt64_t muid , 181 ušt16_t mcouÁ” , * mu£r_d©a ); 182 (* m£¬ch è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 183 cÚ¡ * m¡ršg , * mu£r_d©a ); 184 (* madd_to_now_¶ayšg è( avrý * m£ssiÚ , ušt8_t mŒª§ùiÚ , 185 ušt8_t mscÝe , ušt64_t muid , 186 ušt16_t mcouÁ” , * mu£r_d©a ); 189  savrý_cÚŒÞ_cfm { 190 (* mg‘_ÿ·bž™›s è( avrý * m£ssiÚ ,  m”r , 191 ušt8_t mnumb” , ušt8_ˆ* m·¿ms , 192 * mu£r_d©a ); 193 (* mli¡_©Œibu‹s è( avrý * m£ssiÚ ,  m”r , 194 ušt8_t mnumb” , ušt8_ˆ* m©Œs , 195 * mu£r_d©a ); 196 (* mg‘_©Œibu‹_‹xt è( avrý * m£ssiÚ ,  m”r , 197 ušt8_t mnumb” , ušt8_ˆ* m©Œs , 198 ** m‹xt , * mu£r_d©a ); 199 (* mli¡_v®ues è( avrý * m£ssiÚ ,  m”r , 200 ušt8_t mnumb” , ušt8_ˆ* mv®ues , 201 * mu£r_d©a ); 202 (* mg‘_v®ue_‹xt è( avrý * m£ssiÚ ,  m”r , 203 ušt8_t mnumb” , ušt8_ˆ* mv®ues , 204 ** m‹xt , * mu£r_d©a ); 205 (* mg‘_v®ue è( avrý * m£ssiÚ ,  m”r , 206 ušt8_t mnumb” , ušt8_ˆ* m©Œs , 207 ušt8_t * mv®ues , * mu£r_d©a ); 208 (* m£t_v®ue è( avrý * m£ssiÚ ,  m”r , * mu£r_d©a ); 209 (* mg‘_¶ay_¡©us è( avrý * m£ssiÚ ,  m”r , 210 ušt8_t m¡©us , ušt32_t mpos™iÚ , 211 ušt32_t mdu¿tiÚ , * mu£r_d©a ); 212 (* mg‘_–em’t_©Œibu‹s è( avrý * m£ssiÚ ,  m”r , 213 ušt8_t mnumb” , ušt32_t * m©Œs , 214 ** m‹xt , * mu£r_d©a ); 215 boÞ (* »gi¡”_nÙifiÿtiÚ è( avrý * m£ssiÚ ,  m”r , 216 ušt8_t mcode , ušt8_ˆ mev’t , 217 ušt8_t * m·¿ms , * mu£r_d©a ); 218 (* m£t_vÞume è( avrý * m£ssiÚ ,  m”r , ušt8_t mvÞume , 219 * mu£r_d©a ); 220 (* m£t_add»s£d è( avrý * m£ssiÚ ,  m”r , 221 * mu£r_d©a ); 222 (* m£t_brow£d è( avrý * m£ssiÚ ,  m”r , 223 ušt16_t mcouÁ” , ušt32_t m™ems , 224 * m·th , * mu£r_d©a ); 225 (* mg‘_fÞd”_™ems è( avrý * m£ssiÚ ,  m”r , 226 ušt16_t mcouÁ” , ušt16_ˆ mnumb” , 227 ušt8_t * m·¿ms , * mu£r_d©a ); 228 (* mchªge_·th è( avrý * m£ssiÚ ,  m”r , 229 ušt32_t m™ems , * mu£r_d©a ); 230 (* mg‘_™em_©Œibu‹s è( avrý * m£ssiÚ ,  m”r , 231 ušt8_t mnumb” , ušt32_t * m©Œs , 232 ** m‹xt , * mu£r_d©a ); 233 (* m¶ay_™em è( avrý * m£ssiÚ ,  m”r , * mu£r_d©a ); 234 (* m£¬ch è( avrý * m£ssiÚ ,  m”r , ušt16_t mcouÁ” , 235 ušt32_t m™ems , * mu£r_d©a ); 236 (* madd_to_now_¶ayšg è( avrý * m£ssiÚ ,  m”r , 237 * mu£r_d©a ); 240  savrý_·s¡hrough_hªdËr { 241 ušt8_t mÝ ; 242 boÞ (* func è( avrý * m£ssiÚ , boÞ m´es£d , * mu£r_d©a ); 245 (* tavrý_de¡roy_cb_t è(* tu£r_d©a ); 247  avrý * `avrý_Ãw ( fd , size_t imtu , size_ˆ omtu , ušt16_t v”siÚ ); 248  `avrý_shutdown ( avrý * £ssiÚ ); 249  `avrý_£t_de¡roy_cb ( avrý * £ssiÚ , avrý_de¡roy_cb_t cb , 250 * u£r_d©a ); 251  `avrý_cÚÃù_browsšg ( avrý * £ssiÚ ,  fd , size_t imtu , 252 size_t omtu ); 254  `avrý_»gi¡”_¶ay” ( avrý * £ssiÚ , 255 cÚ¡  avrý_cÚŒÞ_šd * šd , 256 cÚ¡  avrý_cÚŒÞ_cfm * cfm , 257 * u£r_d©a ); 258  `avrý_£t_·s¡hrough_hªdËrs ( avrý * £ssiÚ , 259 cÚ¡  avrý_·s¡hrough_hªdËr * hªdËrs , 260 * u£r_d©a ); 261  `avrý_š™_ušput ( avrý * £ssiÚ , cÚ¡ * Çme , 262 cÚ¡ * add»ss ); 263  `avrý_£nd ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , ušt8_ˆ code , 264 ušt8_t subun™ , ušt8_ˆ pdu_id , 265 cÚ¡  iovec * iov ,  iov_út ); 266  `avrý_g‘_ÿ·bž™›s ( avrý * £ssiÚ , ušt8_t ·¿m ); 267  `avrý_»gi¡”_nÙifiÿtiÚ ( avrý * £ssiÚ , ušt8_t ev’t , 268 ušt32_t š‹rv® ); 269  `avrý_li¡_¶ay”_©Œibu‹s ( avrý * £ssiÚ ); 270  `avrý_g‘_¶ay”_©Œibu‹_‹xt ( avrý * £ssiÚ , ušt8_t numb” , 271 ušt8_t * ©Œs ); 272  `avrý_li¡_¶ay”_v®ues ( avrý * £ssiÚ , ušt8_t ©Œ ); 273  `avrý_g‘_¶ay”_v®ue_‹xt ( avrý * £ssiÚ , ušt8_t ©Œ , 274 ušt8_t numb” , ušt8_ˆ* v®ues ); 275  `avrý_£t_¶ay”_v®ue ( avrý * £ssiÚ , ušt8_t numb” , 276 ušt8_t * ©Œs , ušt8_ˆ* v®ues ); 277  `avrý_g‘_cu¼’t_¶ay”_v®ue ( avrý * £ssiÚ , ušt8_t numb” , 278 ušt8_t * ©Œs ); 279  `avrý_g‘_¶ay_¡©us ( avrý * £ssiÚ ); 280  `avrý_£t_vÞume ( avrý * £ssiÚ , ušt8_t vÞume ); 281  `avrý_g‘_–em’t_©Œibu‹s ( avrý * £ssiÚ ); 282  `avrý_£t_add»s£d_¶ay” ( avrý * £ssiÚ , ušt16_t ¶ay”_id ); 283  `avrý_£t_brow£d_¶ay” ( avrý * £ssiÚ , ušt16_t ¶ay”_id ); 284  `avrý_g‘_fÞd”_™ems ( avrý * £ssiÚ , ušt8_t scÝe , 285 ušt32_t ¡¬t , ušt32_ˆ ’d , ušt8_t numb” , 286 ušt32_t * ©Œs ); 287  `avrý_chªge_·th ( avrý * £ssiÚ , ušt8_t dœeùiÚ , ušt64_t uid , 288 ušt16_t couÁ” ); 289  `avrý_g‘_™em_©Œibu‹s ( avrý * £ssiÚ , ušt8_t scÝe , 290 ušt64_t uid , ušt16_t couÁ” , ušt8_t numb” , 291 ušt32_t * ©Œs ); 292  `avrý_¶ay_™em ( avrý * £ssiÚ , ušt8_t scÝe , ušt64_t uid , 293 ušt16_t couÁ” ); 294  `avrý_£¬ch ( avrý * £ssiÚ , cÚ¡ * ¡ršg ); 295  `avrý_add_to_now_¶ayšg ( avrý * £ssiÚ , ušt8_t scÝe , ušt64_t uid , 296 ušt16_t couÁ” ); 298  `avrý_g‘_ÿ·bž™›s_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 299 ušt8_t numb” , ušt8_ˆ* ev’ts ); 300  `avrý_li¡_¶ay”_©Œibu‹s_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 301 ušt8_t numb” , ušt8_ˆ* ©Œs ); 302  `avrý_g‘_¶ay”_©Œibu‹_‹xt_r¥ ( avrý * £ssiÚ , 303 ušt8_t Œª§ùiÚ , ušt8_ˆ numb” , 304 ušt8_t * ©Œs , cÚ¡ ** ‹xt ); 305  `avrý_li¡_¶ay”_v®ues_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 306 ušt8_t numb” , ušt8_ˆ* v®ues ); 307  `avrý_g‘_¶ay_¡©us_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 308 ušt32_t pos™iÚ , ušt32_ˆ du¿tiÚ , 309 ušt8_t ¡©us ); 310  `avrý_g‘_¶ay”_v®ues_‹xt_r¥ ( avrý * £ssiÚ , 311 ušt8_t Œª§ùiÚ , ušt8_ˆ numb” , 312 ušt8_t * v®ues , cÚ¡ ** ‹xt ); 313  `avrý_g‘_cu¼’t_¶ay”_v®ue_r¥ ( avrý * £ssiÚ , 314 ušt8_t Œª§ùiÚ , ušt8_ˆ numb” , 315 ušt8_t * ©Œs , ušt8_ˆ* v®ues ); 316  `avrý_£t_¶ay”_v®ue_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ ); 317  `avrý_g‘_–em’t_©Œs_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 318 ušt8_t * ·¿ms , size_t ·¿ms_Ën ); 319  `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 320 ušt8_t code , ušt8_ˆ ev’t , 321 * d©a , size_t Ën ); 322  `avrý_£t_vÞume_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 323 ušt8_t vÞume ); 324  `avrý_£t_add»s£d_¶ay”_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 325 ušt8_t ¡©us ); 326  `avrý_£t_brow£d_¶ay”_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 327 ušt8_t ¡©us , ušt16_t couÁ” , 328 ušt32_t ™ems , ušt8_t d•th , 329 cÚ¡ ** fÞd”s ); 330  `avrý_g‘_fÞd”_™ems_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 331 ušt8_t ¡©us , ušt16_t couÁ” , 332 ušt8_t numb” , ušt8_ˆ* ty³ , 333 ušt16_t * Ën , ušt8_t ** ·¿ms ); 334  `avrý_chªge_·th_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 335 ušt8_t ¡©us , ušt32_t ™ems ); 336  `avrý_g‘_™em_©Œibu‹s_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 337 ušt8_t ¡©us , ušt8_ˆ numb” , 338 ušt32_t * ©Œs , cÚ¡ ** ‹xt ); 339  `avrý_¶ay_™em_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 340 ušt8_t ¡©us ); 341  `avrý_£¬ch_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , ušt8_ˆ ¡©us , 342 ušt16_t couÁ” , ušt32_t ™ems ); 343  `avrý_add_to_now_¶ayšg_r¥ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 344 ušt8_t ¡©us ); 346  `avrý_£nd_·s¡hrough ( avrý * £ssiÚ , ušt32_t v’dÜ , ušt8_t Ý ); @android/avrcp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~<¡dboÞ.h > 30  ~<”ºo.h > 31  ~ 33  ~"btio/btio.h " 34  ~"lib/blu‘oÙh.h " 35  ~"lib/sdp.h " 36  ~"lib/sdp_lib.h " 37  ~"¤c/sdp-þ›Á.h " 38  ~"¤c/sh¬ed/utž.h " 39  ~"¤c/log.h " 41  ~"avùp.h " 42  ~"avrý-lib.h " 43  ~"h®-msg.h " 44  ~"c-commÚ.h " 45  ~"c.h " 46  ~"blu‘oÙh.h " 47  ~"avrý.h " 48  ~"utžs.h " 50  #L2CAP_PSM_AVCTP 0x17 ) 52  #AVRCP_FEATURE_CATEGORY_1 0x0001 ) 53  #AVRCP_FEATURE_CATEGORY_2 0x0002 ) 54  #AVRCP_FEATURE_CATEGORY_3 0x0004 ) 55  #AVRCP_FEATURE_CATEGORY_4 0x0008 ) 57  bdaddr_t gad­‹r_addr ; 58  ušt32_t g»cÜd_tg_id = 0; 59  ušt32_t g»cÜd_ù_id = 0; 60  GSLi¡ * gdeviûs = NULL ; 61  GIOChªÃl * g£rv” = NULL ; 62  c * gh®_c = NULL ; 64  savrý_»que¡ { 65  avrý_deviû * mdev ; 66 ušt8_t mpdu_id ; 67 ušt8_t mev’t_id ; 68 ušt8_t mŒª§ùiÚ ; 71  savrý_deviû { 72 bdaddr_t md¡ ; 73 ušt16_t mv”siÚ ; 74 ušt16_t mã©u»s ; 75  avrý * m£ssiÚ ; 76 GIOChªÃl * mio ; 77 GQueue * mqueue ; 80  avrý_»que¡ * $pÝ_»que¡ ( ušt8_t pdu_id , ušt8_ˆ ev’t_id , 81 boÞ ³ek ) 83 GSLi¡ * l ; 85  l = deviûs ;†;† = `g_¦i¡_Ãxt (l)) { 86  avrý_deviû * dev = l -> d©a ; 87 GLi¡ * »qs = `g_queue_³ek_h—d_lšk ( dev -> queue ); 88  i ; 90  i = 0; »qs ;„eq ð `g_li¡_Ãxt (reqs), i++) { 91  avrý_»que¡ * »q = »qs -> d©a ; 93 ià( »q -> pdu_id !ðpdu_id ||„eq-> ev’t_id !=ƒvent_id) 96 ià(! ³ek ) 97 `g_queue_pÝ_Áh ( dev -> queue , i ); 99  »q ; 103  NULL ; 104 } } 106  $hªdË_g‘_¶ay_¡©us (cÚ¡ * buf , ušt16_t Ën ) 108 cÚ¡  h®_cmd_avrý_g‘_¶ay_¡©us * cmd = buf ; 109 ušt8_t ¡©us ; 110  avrý_»que¡ * »q ; 111  »t ; 113 `DBG (""); 115 »q = `pÝ_»que¡ ( AVRCP_GET_PLAY_STATUS , 0, çl£ ); 116 ià(! »q ) { 117 ¡©us = HAL_STATUS_FAILED ; 118  dÚe ; 121 »t = `avrý_g‘_¶ay_¡©us_r¥ ( »q -> dev -> £ssiÚ ,„eq-> Œª§ùiÚ , 122 cmd -> pos™iÚ , cmd-> du¿tiÚ , 123 cmd -> ¡©us ); 124 ià( »t < 0) { 125 ¡©us = HAL_STATUS_FAILED ; 126 `g_ä“ ( »q ); 127  dÚe ; 130 ¡©us = HAL_STATUS_SUCCESS ; 131 `g_ä“ ( »q ); 133 dÚe : 134 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_AVRCP , 135 HAL_OP_AVRCP_GET_PLAY_STATUS , ¡©us ); 136 } } 138  $hªdË_li¡_¶ay”_©Œs (cÚ¡ * buf , ušt16_t Ën ) 140 `DBG (""); 142 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_AVRCP , 143 HAL_OP_AVRCP_LIST_PLAYER_ATTRS , HAL_STATUS_FAILED ); 144 } } 146  $hªdË_li¡_¶ay”_v®ues (cÚ¡ * buf , ušt16_t Ën ) 148 `DBG (""); 150 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_AVRCP , 151 HAL_OP_AVRCP_LIST_PLAYER_VALUES , HAL_STATUS_FAILED ); 152 } } 154  $hªdË_g‘_¶ay”_©Œs (cÚ¡ * buf , ušt16_t Ën ) 156 `DBG (""); 158 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_AVRCP , 159 HAL_OP_AVRCP_GET_PLAYER_ATTRS , HAL_STATUS_FAILED ); 160 } } 162  $hªdË_g‘_¶ay”_©Œs_‹xt (cÚ¡ * buf , ušt16_t Ën ) 164 `DBG (""); 166 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_AVRCP , 167 HAL_OP_AVRCP_GET_PLAYER_ATTRS_TEXT , HAL_STATUS_FAILED ); 168 } } 170  $hªdË_g‘_¶ay”_v®ues_‹xt (cÚ¡ * buf , ušt16_t Ën ) 172 `DBG (""); 174 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_AVRCP , 175 HAL_OP_AVRCP_GET_PLAYER_VALUES_TEXT , HAL_STATUS_FAILED ); 176 } } 178  size_t $wr™e_–em’t_‹xt ( ušt8_t id , ušt8_ˆ ‹xt_Ën , ušt8_ˆ* ‹xt , 179 ušt8_t * pdu ) 181 ušt16_t ch¬£t = 106; 182 size_t Ën = 0; 184 `put_be32 ( id , pdu ); 185 pdu += 4; 186 Ën += 4; 188 `put_be16 ( ch¬£t , pdu ); 189 pdu += 2; 190 Ën += 2; 192 `put_be16 ( ‹xt_Ën , pdu ); 193 pdu += 2; 194 Ën += 2; 196 `memýy ( pdu , ‹xt , ‹xt_Ën ); 197 Ën +ð ‹xt_Ën ; 199  Ën ; 200 } } 202  $wr™e_–em’t_©Œs ( ušt8_t * ±r , ušt8_ˆ numb” , ušt8_ˆ* pdu , 203 size_t * Ën ) 205  i ; 207 * pdu = numb” ; 208 pdu ++; 209 * Ën += 1; 211  i = 0; i < numb” ; i++) { 212  h®_avrý_¶ay”_£‰šg_‹xt * ‹xt = (*è ±r ; 213 size_t »t ; 215 »t = `wr™e_–em’t_‹xt ( ‹xt -> id ,ext-> Ën ,ext->‹xt, pdu ); 217 ±r +ð(* ‹xt è+ext-> Ën ; 218 pdu +ð »t ; 219 * Ën +ð »t ; 221 } } 223  $hªdË_g‘_–em’t_©Œs_‹xt (cÚ¡ * buf , ušt16_t Ën ) 225  h®_cmd_avrý_g‘_–em’t_©Œs_‹xt * cmd = (*è buf ; 226 ušt8_t ¡©us ; 227  avrý_»que¡ * »q ; 228 ušt8_t pdu [ IPC_MTU ]; 229 ušt8_t * ±r ; 230 size_t pdu_Ën ; 231  »t ; 233 `DBG (""); 235 »q = `pÝ_»que¡ ( AVRCP_GET_ELEMENT_ATTRIBUTES , 0, çl£ ); 236 ià(! »q ) { 237 ¡©us = HAL_STATUS_FAILED ; 238  dÚe ; 241 ±r = ( ušt8_t *è& cmd -> v®ues [0]; 242 pdu_Ën = 0; 243 `wr™e_–em’t_©Œs ( ±r , cmd -> numb” , pdu , & pdu_Ën ); 245 »t = `avrý_g‘_–em’t_©Œs_r¥ ( »q -> dev -> £ssiÚ ,„eq-> Œª§ùiÚ , 246 pdu , pdu_Ën ); 247 ià( »t < 0) { 248 ¡©us = HAL_STATUS_FAILED ; 249 `g_ä“ ( »q ); 250  dÚe ; 253 ¡©us = HAL_STATUS_SUCCESS ; 254 `g_ä“ ( »q ); 256 dÚe : 257 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_AVRCP , 258 HAL_OP_AVRCP_GET_ELEMENT_ATTRS_TEXT , ¡©us ); 259 } } 261  $hªdË_£t_¶ay”_©Œs_v®ue (cÚ¡ * buf , ušt16_t Ën ) 263 `DBG (""); 265 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_AVRCP , 266 HAL_OP_AVRCP_SET_PLAYER_ATTRS_VALUE , HAL_STATUS_FAILED ); 267 } } 269  $hªdË_»gi¡”_nÙifiÿtiÚ (cÚ¡ * buf , ušt16_t Ën ) 271  h®_cmd_avrý_»gi¡”_nÙifiÿtiÚ * cmd = (*è buf ; 272 ušt8_t ¡©us ; 273  avrý_»que¡ * »q ; 274 ušt8_t code ; 275 boÞ ³ek = çl£ ; 276  »t ; 278 `DBG (""); 280  cmd -> ty³ ) { 281  HAL_AVRCP_EVENT_TYPE_INTERIM : 282 code = AVC_CTYPE_INTERIM ; 283 ³ek = Œue ; 285  HAL_AVRCP_EVENT_TYPE_CHANGED : 286 code = AVC_CTYPE_CHANGED ; 289 ¡©us = HAL_STATUS_FAILED ; 290  dÚe ; 293 »q = `pÝ_»que¡ ( AVRCP_REGISTER_NOTIFICATION , cmd -> ev’t , ³ek ); 294 ià(! »q ) { 295 ¡©us = HAL_STATUS_FAILED ; 296  dÚe ; 299 »t = `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( »q -> dev -> £ssiÚ , 300 »q -> Œª§ùiÚ , code , 301 cmd -> ev’t , cmd-> d©a , 302 cmd -> Ën ); 303 ià( »t < 0) { 304 ¡©us = HAL_STATUS_FAILED ; 305 ià(! ³ek ) 306 `g_ä“ ( »q ); 307  dÚe ; 310 ¡©us = HAL_STATUS_SUCCESS ; 311 ià(! ³ek ) 312 `g_ä“ ( »q ); 314 dÚe : 315 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_AVRCP , 316 HAL_OP_AVRCP_REGISTER_NOTIFICATION , ¡©us ); 317 } } 319  $hªdË_£t_vÞume (cÚ¡ * buf , ušt16_t Ën ) 321  h®_cmd_avrý_£t_vÞume * cmd = (*è buf ; 322  avrý_deviû * dev ; 323 ušt8_t ¡©us ; 324  »t ; 326 `DBG (""); 328 ià(! deviûs ) { 329 `”rÜ ("AVRCP: No device foundo set volume"); 330 ¡©us = HAL_STATUS_FAILED ; 331  dÚe ; 338 dev = deviûs -> d©a ; 340 »t = `avrý_£t_vÞume ( dev -> £ssiÚ , cmd -> v®ue & 0x7f); 341 ià( »t < 0) { 342 ¡©us = HAL_STATUS_FAILED ; 343  dÚe ; 346 ¡©us = HAL_STATUS_SUCCESS ; 348 dÚe : 349 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_AVRCP , HAL_OP_AVRCP_SET_VOLUME , 350 ¡©us ); 351 } } 353 cÚ¡  c_hªdËr gcmd_hªdËrs [] = { 355 { hªdË_g‘_¶ay_¡©us , çl£ , 356 ( h®_cmd_avrý_g‘_¶ay_¡©us ) }, 358 { hªdË_li¡_¶ay”_©Œs , Œue , 359 ( h®_cmd_avrý_li¡_¶ay”_©Œs ) }, 361 { hªdË_li¡_¶ay”_v®ues , Œue , 362 ( h®_cmd_avrý_li¡_¶ay”_v®ues ) }, 364 { hªdË_g‘_¶ay”_©Œs , Œue , 365 ( h®_cmd_avrý_g‘_¶ay”_©Œs ) }, 367 { hªdË_g‘_¶ay”_©Œs_‹xt , Œue , 368 ( h®_cmd_avrý_g‘_¶ay”_©Œs_‹xt ) }, 370 { hªdË_g‘_¶ay”_v®ues_‹xt , Œue , 371 ( h®_cmd_avrý_g‘_¶ay”_v®ues_‹xt ) }, 373 { hªdË_g‘_–em’t_©Œs_‹xt , Œue , 374 ( h®_cmd_avrý_g‘_–em’t_©Œs_‹xt ) }, 376 { hªdË_£t_¶ay”_©Œs_v®ue , Œue , 377 ( h®_cmd_avrý_£t_¶ay”_©Œs_v®ue ) }, 379 { hªdË_»gi¡”_nÙifiÿtiÚ , Œue , 380 ( h®_cmd_avrý_»gi¡”_nÙifiÿtiÚ ) }, 382 { hªdË_£t_vÞume , çl£ , ( h®_cmd_avrý_£t_vÞume ) }, 385  sdp_»cÜd_t * $avrý_tg_»cÜd () 387 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 388 uuid_t roÙ_uuid , l2ÿp , avùp , av¹g ; 389 sdp_´ofže_desc_t ´ofže [1]; 390 sdp_li¡_t * ­rÙo_cÚŒÞ , * ´Ùo_cÚŒÞ [2]; 391 sdp_»cÜd_t * »cÜd ; 392 sdp_d©a_t * psm , * v”siÚ , * ã©u»s ; 393 ušt16_t Í = L2CAP_PSM_AVCTP ; 394 ušt16_t avrý_v” = 0x0105, avùp_v” = 0x0104; 395 ušt16_t ã© = ( AVRCP_FEATURE_CATEGORY_1 | 396 AVRCP_FEATURE_CATEGORY_2 | 397 AVRCP_FEATURE_CATEGORY_3 | 398 AVRCP_FEATURE_CATEGORY_4 ); 400 »cÜd = `sdp_»cÜd_®loc (); 401 ià(! »cÜd ) 402  NULL ; 404 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 405 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 406 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 409 `sdp_uuid16_ü—‹ (& av¹g , AV_REMOTE_TARGET_SVCLASS_ID ); 410 svþass_id = `sdp_li¡_­³nd ( NULL , & av¹g ); 411 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 414 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 415 ´Ùo_cÚŒÞ [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp ); 416 psm = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 417 ´Ùo_cÚŒÞ [0] = `sdp_li¡_­³nd ÕrÙo_cÚŒÞ[0], psm ); 418 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo_cÚŒÞ [0]); 420 `sdp_uuid16_ü—‹ (& avùp , AVCTP_UUID ); 421 ´Ùo_cÚŒÞ [1] = `sdp_li¡_­³nd ( NULL , & avùp ); 422 v”siÚ = `sdp_d©a_®loc ( SDP_UINT16 , & avùp_v” ); 423 ´Ùo_cÚŒÞ [1] = `sdp_li¡_­³nd ÕrÙo_cÚŒÞ[1], v”siÚ ); 424 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo_cÚŒÞ [1]); 426 ­rÙo_cÚŒÞ = `sdp_li¡_­³nd ( NULL , ­£q ); 427 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo_cÚŒÞ ); 430 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , AV_REMOTE_PROFILE_ID ); 431 ´ofže [0]. v”siÚ = avrý_v” ; 432 pf£q = `sdp_li¡_­³nd ( NULL , & ´ofže [0]); 433 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 435 ã©u»s = `sdp_d©a_®loc ( SDP_UINT16 , & ã© ); 436 `sdp_©Œ_add ( »cÜd , SDP_ATTR_SUPPORTED_FEATURES , ã©u»s ); 438 `sdp_£t_šfo_©Œ ( »cÜd , "AVRCP TG", NULL , NULL); 440 `sdp_d©a_ä“ ( psm ); 441 `sdp_d©a_ä“ ( v”siÚ ); 442 `sdp_li¡_ä“ ( ´Ùo_cÚŒÞ [0], NULL ); 443 `sdp_li¡_ä“ ( ´Ùo_cÚŒÞ [1], NULL ); 444 `sdp_li¡_ä“ ( ­£q , NULL ); 445 `sdp_li¡_ä“ ( ­rÙo_cÚŒÞ , NULL ); 446 `sdp_li¡_ä“ ( pf£q , NULL ); 447 `sdp_li¡_ä“ ( roÙ , NULL ); 448 `sdp_li¡_ä“ ( svþass_id , NULL ); 450  »cÜd ; 451 } } 453  sdp_»cÜd_t * $avrý_ù_»cÜd () 455 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 456 uuid_t roÙ_uuid , l2ÿp , avùp , avrù , avrùr ; 457 sdp_´ofže_desc_t ´ofže [1]; 458 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 459 sdp_»cÜd_t * »cÜd ; 460 sdp_d©a_t * psm , * v”siÚ , * ã©u»s ; 461 ušt16_t Í = AVCTP_CONTROL_PSM ; 462 ušt16_t avrý_v” = 0x0105, avùp_v” = 0x0104; 463 ušt16_t ã© = ( AVRCP_FEATURE_CATEGORY_1 | 464 AVRCP_FEATURE_CATEGORY_2 | 465 AVRCP_FEATURE_CATEGORY_3 | 466 AVRCP_FEATURE_CATEGORY_4 ); 468 »cÜd = `sdp_»cÜd_®loc (); 469 ià(! »cÜd ) 470  NULL ; 472 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 473 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 474 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 477 `sdp_uuid16_ü—‹ (& avrù , AV_REMOTE_SVCLASS_ID ); 478 svþass_id = `sdp_li¡_­³nd ( NULL , & avrù ); 479 `sdp_uuid16_ü—‹ (& avrùr , AV_REMOTE_CONTROLLER_SVCLASS_ID ); 480 svþass_id = `sdp_li¡_­³nd (svþass_id, & avrùr ); 481 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 484 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 485 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp ); 486 psm = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 487 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], psm ); 488 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 490 `sdp_uuid16_ü—‹ (& avùp , AVCTP_UUID ); 491 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & avùp ); 492 v”siÚ = `sdp_d©a_®loc ( SDP_UINT16 , & avùp_v” ); 493 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], v”siÚ ); 494 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 496 ­rÙo = `sdp_li¡_­³nd ( NULL , ­£q ); 497 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 500 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , AV_REMOTE_PROFILE_ID ); 501 ´ofže [0]. v”siÚ = avrý_v” ; 502 pf£q = `sdp_li¡_­³nd ( NULL , & ´ofže [0]); 503 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 505 ã©u»s = `sdp_d©a_®loc ( SDP_UINT16 , & ã© ); 506 `sdp_©Œ_add ( »cÜd , SDP_ATTR_SUPPORTED_FEATURES , ã©u»s ); 508 `sdp_£t_šfo_©Œ ( »cÜd , "AVRCP CT", NULL , NULL); 510 `ä“ ( psm ); 511 `ä“ ( v”siÚ ); 512 `sdp_li¡_ä“ ( ´Ùo [0], NULL ); 513 `sdp_li¡_ä“ ( ´Ùo [1], NULL ); 514 `sdp_li¡_ä“ ( ­£q , NULL ); 515 `sdp_li¡_ä“ ( pf£q , NULL ); 516 `sdp_li¡_ä“ ( ­rÙo , NULL ); 517 `sdp_li¡_ä“ ( roÙ , NULL ); 518 `sdp_li¡_ä“ ( svþass_id , NULL ); 520  »cÜd ; 521 } } 523  $avrý_deviû_ä“ (* d©a ) 525  avrý_deviû * dev = d©a ; 527 ià( dev -> queue ) { 528 `g_queue_fÜ—ch ( dev -> queue , ( GFunc è g_ä“ , NULL ); 529 `g_queue_ä“ ( dev -> queue ); 532 ià( dev -> £ssiÚ ) 533 `avrý_shutdown ( dev -> £ssiÚ ); 535 ià( dev -> io ) { 536 `g_io_chªÃl_shutdown ( dev -> io , FALSE , NULL ); 537 `g_io_chªÃl_uÄef ( dev -> io ); 540 `g_ä“ ( dev ); 541 } } 543  $avrý_deviû_»move ( avrý_deviû * dev ) 545 deviûs = `g_¦i¡_»move (deviûs, dev ); 546 `avrý_deviû_ä“ ( dev ); 547 } } 549  avrý_deviû * $avrý_deviû_Ãw (cÚ¡ bdaddr_t * d¡ ) 551  avrý_deviû * dev ; 553 dev = `g_Ãw0 ( avrý_deviû , 1); 554 `baýy (& dev -> d¡ , dst); 555 deviûs = `g_¦i¡_´•’d (deviûs, dev ); 557  dev ; 558 } } 560  $deviû_cmp ( gcÚ¡poš‹r s , gcÚ¡poš‹¸ u£r_d©a ) 562 cÚ¡  avrý_deviû * dev = s ; 563 cÚ¡ bdaddr_t * d¡ = u£r_d©a ; 565  `bacmp (& dev -> d¡ , dst); 566 } } 568  avrý_deviû * $avrý_deviû_fšd (cÚ¡ bdaddr_t * d¡ ) 570 GSLi¡ * l ; 572 l = `g_¦i¡_fšd_cu¡om ( deviûs , d¡ , deviû_cmp ); 573 ià(! l ) 574  NULL ; 576  l -> d©a ; 577 } } 579  $discÚÃù_cb (* d©a ) 581  avrý_deviû * dev = d©a ; 583 `DBG (""); 585 dev -> £ssiÚ = NULL ; 587 `avrý_deviû_»move ( dev ); 588 } } 590  boÞ $hªdË_ç¡_fÜw¬d ( avrý * £ssiÚ , boÞ ´es£d , 591 * u£r_d©a ) 593  h®_ev_avrý_·s¡hrough_cmd ev ; 595 `DBG ("´es£d %s", ´es£d ? "true" : "false"); 597 ev . id = AVC_FAST_FORWARD ; 598 ev . ¡©e = ´es£d ; 600 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_AVRCP , 601 HAL_EV_AVRCP_PASSTHROUGH_CMD , ( ev ), &ev); 603  Œue ; 604 } } 606  boÞ $hªdË_»wšd ( avrý * £ssiÚ , boÞ ´es£d , 607 * u£r_d©a ) 609  h®_ev_avrý_·s¡hrough_cmd ev ; 611 `DBG ("´es£d %s", ´es£d ? "true" : "false"); 613 ev . id = AVC_REWIND ; 614 ev . ¡©e = ´es£d ; 616 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_AVRCP , 617 HAL_EV_AVRCP_PASSTHROUGH_CMD , ( ev ), &ev); 619  Œue ; 620 } } 622 cÚ¡  avrý_·s¡hrough_hªdËr g·s¡hrough_hªdËrs [] = { 623 { AVC_FAST_FORWARD , hªdË_ç¡_fÜw¬d }, 624 { AVC_REWIND , hªdË_»wšd }, 628  $hªdË_g‘_ÿ·bž™›s_cmd ( avrý * £ssiÚ , 629 ušt8_t Œª§ùiÚ , * u£r_d©a ) 631 ušt8_t ev’ts [] = { AVRCP_EVENT_STATUS_CHANGED , 632 AVRCP_EVENT_TRACK_CHANGED , 633 AVRCP_EVENT_PLAYBACK_POS_CHANGED }; 635 `DBG (""); 642 `avrý_g‘_ÿ·bž™›s_r¥ ( £ssiÚ , Œª§ùiÚ , ( ev’ts ), 643 ev’ts ); 646 } } 648  $push_»que¡ ( avrý_deviû * dev , ušt8_t pdu_id , 649 ušt8_t ev’t_id , ušt8_ˆ Œª§ùiÚ ) 651  avrý_»que¡ * »q ; 653 »q = `g_Ãw0 ( avrý_»que¡ , 1); 654 »q -> dev = dev; 655 »q -> pdu_id =…du_id; 656 »q -> ev’t_id =ƒvent_id; 657 »q -> Œª§ùiÚ =ransaction; 659 `g_queue_push_ž ( dev -> queue , »q ); 660 } } 662  $hªdË_g‘_¶ay_¡©us_cmd ( avrý * £ssiÚ , 663 ušt8_t Œª§ùiÚ , * u£r_d©a ) 665  avrý_deviû * dev = u£r_d©a ; 667 `DBG (""); 669 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_AVRCP , 670 HAL_EV_AVRCP_GET_PLAY_STATUS , 0, NULL ); 672 `push_»que¡ ( dev , AVRCP_GET_PLAY_STATUS , 0, Œª§ùiÚ ); 675 } } 677  $hªdË_g‘_–em’t_©Œs_cmd ( avrý * £ssiÚ , 678 ušt8_t Œª§ùiÚ , ušt64_t uid , 679 ušt8_t numb” , ušt32_t * ©Œs , 680 * u£r_d©a ) 682  avrý_deviû * dev = u£r_d©a ; 683 ušt8_t buf [ IPC_MTU ]; 684  h®_ev_avrý_g‘_–em’t_©Œs * ev = (*è buf ; 685  i ; 687 `DBG (""); 689 ev -> numb” =‚umber; 691 ià( ev -> numb” == 0) { 692  i = 0; i < HAL_AVRCP_MEDIA_ATTR_DURATION ; i++) { 694 ev -> ©Œs [ i ] = i + 1; 696 ev -> numb” = i ; 697  dÚe ; 700  i = 0; i < numb” ; i++) 701 ev -> ©Œs [ i ] =‡ttrs[i]; 703 dÚe : 704 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_AVRCP , 705 HAL_EV_AVRCP_GET_ELEMENT_ATTRS , 706 (* ev è+ƒv-> numb” ,ƒv); 708 `push_»que¡ ( dev , AVRCP_GET_ELEMENT_ATTRIBUTES , 0, Œª§ùiÚ ); 712 } } 714  $hªdË_»gi¡”_nÙifiÿtiÚ_cmd ( avrý * £ssiÚ , 715 ušt8_t Œª§ùiÚ , 716 ušt8_t ev’t , 717 ušt32_t š‹rv® , 718 * u£r_d©a ) 720  avrý_deviû * dev = u£r_d©a ; 721  h®_ev_avrý_»gi¡”_nÙifiÿtiÚ ev ; 723 `DBG (""); 726  ev’t ) { 727  AVRCP_EVENT_STATUS_CHANGED : 728  AVRCP_EVENT_TRACK_CHANGED : 729  AVRCP_EVENT_PLAYBACK_POS_CHANGED : 732  - EINVAL ; 735 ev . ev’t =ƒvent; 736 ev . ·¿m = š‹rv® ; 738 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_AVRCP , 739 HAL_EV_AVRCP_REGISTER_NOTIFICATION , 740 ( ev ), &ev); 742 `push_»que¡ ( dev , AVRCP_REGISTER_NOTIFICATION , ev’t , Œª§ùiÚ ); 745 } } 747 cÚ¡  avrý_cÚŒÞ_šd gcÚŒÞ_šd = { 748 . g‘_ÿ·bž™›s = hªdË_g‘_ÿ·bž™›s_cmd , 749 . gg‘_¶ay_¡©us = hªdË_g‘_¶ay_¡©us_cmd , 750 . gg‘_–em’t_©Œibu‹s = hªdË_g‘_–em’t_©Œs_cmd , 751 . g»gi¡”_nÙifiÿtiÚ = hªdË_»gi¡”_nÙifiÿtiÚ_cmd , 754  boÞ $hªdË_»gi¡”_nÙifiÿtiÚ_r¥ ( avrý * £ssiÚ ,  ”r , 755 ušt8_t code , ušt8_ˆ ev’t , 756 ušt8_t * ·¿ms , 757 * u£r_d©a ) 759  avrý_deviû * dev = u£r_d©a ; 760  h®_ev_avrý_vÞume_chªged ev ; 762 ià( ”r < 0) { 763 `”rÜ ("AVRCP: %s", `¡»¼Ü (- ”r )); 764  çl£ ; 767 ià( code !ð AVC_CTYPE_INTERIM && cod!ð AVC_CTYPE_CHANGED ) 768  çl£ ; 770 ià( ev’t !ð AVRCP_EVENT_VOLUME_CHANGED ) 771  çl£ ; 773 ev . ty³ = code ; 774 ev . vÞume = ·¿ms [0] & 0x7f; 776 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_AVRCP , 777 HAL_EV_AVRCP_VOLUME_CHANGED , 778 ( ev ), &ev); 780 ià( code =ð AVC_CTYPE_INTERIM ) 781  Œue ; 783 `avrý_»gi¡”_nÙifiÿtiÚ ( dev -> £ssiÚ , ev’t , 0); 784  çl£ ; 785 } } 787  $hªdË_g‘_ÿ·bž™›s_r¥ ( avrý * £ssiÚ ,  ”r , 788 ušt8_t numb” , ušt8_ˆ* ev’ts , 789 * u£r_d©a ) 791  avrý_deviû * dev = u£r_d©a ; 792  i ; 794 ià( ”r < 0) { 795 `”rÜ ("AVRCP: %s", `¡»¼Ü (- ”r )); 799  i = 0; i < numb” ; i++) { 800 ià( ev’ts [ i ] !ð AVRCP_EVENT_VOLUME_CHANGED ) 803 `avrý_»gi¡”_nÙifiÿtiÚ ( dev -> £ssiÚ , ev’ts [ i ], 0); 808 } } 810  $hªdË_£t_vÞume_r¥ ( avrý * £ssiÚ ,  ”r , 811 ušt8_t v®ue , * u£r_d©a ) 813  h®_ev_avrý_vÞume_chªged ev ; 815 ià( ”r < 0) { 816 ev . vÞume = 0; 817 ev . ty³ = AVC_CTYPE_REJECTED ; 818  dÚe ; 821 ev . vÞume = v®ue ; 822 ev . ty³ = AVC_CTYPE_ACCEPTED ; 824 dÚe : 825 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_AVRCP , 826 HAL_EV_AVRCP_VOLUME_CHANGED , 827 ( ev ), &ev); 828 } } 830 cÚ¡  avrý_cÚŒÞ_cfm gcÚŒÞ_cfm = { 831 . g‘_ÿ·bž™›s = hªdË_g‘_ÿ·bž™›s_r¥ , 832 . g»gi¡”_nÙifiÿtiÚ = hªdË_»gi¡”_nÙifiÿtiÚ_r¥ , 833 . g£t_vÞume = hªdË_£t_vÞume_r¥ , 836  $avrý_deviû_add_£ssiÚ ( avrý_deviû * dev ,  fd , 837 ušt16_t imtu , ušt16_ˆ omtu ) 839  h®_ev_avrý_»mÙe_ã©u»s ev ; 840  add»ss [18]; 842 dev -> £ssiÚ = `avrý_Ãw ( fd , imtu , omtu , dev-> v”siÚ ); 843 ià(! dev -> £ssiÚ ) 844  - EINVAL ; 846 `avrý_£t_de¡roy_cb ( dev -> £ssiÚ , discÚÃù_cb , dev); 847 `avrý_£t_·s¡hrough_hªdËrs ( dev -> £ssiÚ , ·s¡hrough_hªdËrs , 848 dev ); 849 `avrý_»gi¡”_¶ay” ( dev -> £ssiÚ , & cÚŒÞ_šd , & cÚŒÞ_cfm , dev); 851 dev -> queue = `g_queue_Ãw (); 853 `ba2¡r (& dev -> d¡ , add»ss ); 856 `avrý_š™_ušput ( dev -> £ssiÚ , "blu‘oÙh", add»ss ); 858 `bdaddr2ªdroid (& dev -> d¡ , ev . bdaddr ); 859 ev . ã©u»s = HAL_AVRCP_FEATURE_NONE ; 861 `DBG ("v”siÚ 0x%02x", dev -> v”siÚ ); 863 ià( dev -> v”siÚ < 0x0103) 864  dÚe ; 866 ev . ã©u»s |ð HAL_AVRCP_FEATURE_METADATA ; 868 ià( dev -> v”siÚ < 0x0104) 869  dÚe ; 871 ev . ã©u»s |ð HAL_AVRCP_FEATURE_ABSOLUTE_VOLUME ; 873 `avrý_g‘_ÿ·bž™›s ( dev -> £ssiÚ , CAP_EVENTS_SUPPORTED ); 875 dÚe : 876 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_AVRCP , 877 HAL_EV_AVRCP_REMOTE_FEATURES , 878 ( ev ), &ev); 881 } } 883  $cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 885  avrý_deviû * dev = u£r_d©a ; 886 ušt16_t imtu , omtu ; 887  add»ss [18]; 888 GE¼Ü * g”r = NULL ; 889  fd ; 891 ià( ”r ) { 892 `”rÜ ("%s", ”r -> mes§ge ); 896 `bt_io_g‘ ( chª , & g”r , 897 BT_IO_OPT_DEST , add»ss , 898 BT_IO_OPT_IMTU , & imtu , 899 BT_IO_OPT_OMTU , & omtu , 900 BT_IO_OPT_INVALID ); 901 ià( g”r ) { 902 `”rÜ ("%s", g”r -> mes§ge ); 903 `g_”rÜ_ä“ ( g”r ); 904 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 908 fd = `g_io_chªÃl_unix_g‘_fd ( chª ); 909 ià( `avrý_deviû_add_£ssiÚ ( dev , fd , imtu , omtu ) < 0) { 910 `avrý_deviû_ä“ ( dev ); 914 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chª , FALSE ); 916 ià( dev -> io ) { 917 `g_io_chªÃl_uÄef ( dev -> io ); 918 dev -> io = NULL ; 921 `DBG ("% cÚÃùed", add»ss ); 922 } } 924  boÞ $avrý_deviû_cÚÃù ( avrý_deviû * dev , BtIOCÚÃù cb ) 926 GE¼Ü * ”r = NULL ; 928 dev -> io = `bt_io_cÚÃù ( cb , dev, NULL , & ”r , 929 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 930 BT_IO_OPT_DEST_BDADDR , & dev -> d¡ , 931 BT_IO_OPT_PSM , L2CAP_PSM_AVCTP , 932 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 933 BT_IO_OPT_INVALID ); 934 ià( ”r ) { 935 `”rÜ ("%s", ”r -> mes§ge ); 936 `g_”rÜ_ä“ ( ”r ); 937  çl£ ; 940  Œue ; 941 } } 943  $£¬ch_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r d©a ) 945  avrý_deviû * dev = d©a ; 946 sdp_li¡_t * li¡ ; 948 `DBG (""); 950 ià(! `g_¦i¡_fšd ( deviûs , dev )) 953 ià( ”r < 0) { 954 `”rÜ ("Unableo get AV_REMOTE_SVCLASS_ID SDP„ecord: %s", 955 `¡»¼Ü (- ”r )); 956  çž ; 959 ià(! »cs || !»cs-> d©a ) { 960 `”rÜ ("No AVRCP„ecords found"); 961  çž ; 964  li¡ = »cs ;†i¡;†i¡ =†i¡-> Ãxt ) { 965 sdp_»cÜd_t * »c = li¡ -> d©a ; 966 sdp_li¡_t * l ; 967 sdp_´ofže_desc_t * desc ; 968  ã©u»s ; 970 ià( `sdp_g‘_´ofže_descs ( »c , & l ) < 0) 973 desc = l -> d©a ; 974 dev -> v”siÚ = desc ->version; 976 ià( `sdp_g‘_št_©Œ ( »c , SDP_ATTR_SUPPORTED_FEATURES , 977 & ã©u»s ) == 0) 978 dev -> ã©u»s = features; 980 `sdp_li¡_ä“ ( l , ä“ ); 984 ià( dev -> io ) { 985 GE¼Ü * g”r = NULL ; 986 ià(! `bt_io_acû± ( dev -> io , cÚÃù_cb , dev, NULL , & g”r )) { 987 `”rÜ ("bt_io_acû±: %s", g”r -> mes§ge ); 988 `g_”rÜ_ä“ ( g”r ); 989  çž ; 994 ià(! `avrý_deviû_cÚÃù ( dev , cÚÃù_cb )) { 995 `”rÜ ("Unableo connecto AVRCP"); 996  çž ; 1001 çž : 1002 `avrý_deviû_»move ( dev ); 1003 } } 1005  $avrý_deviû_£¬ch ( avrý_deviû * dev ) 1007 uuid_t uuid ; 1009 `sdp_uuid16_ü—‹ (& uuid , AV_REMOTE_SVCLASS_ID ); 1011  `bt_£¬ch_£rviû (& ad­‹r_addr , & dev -> d¡ , & uuid , £¬ch_cb , 1012 dev , NULL , 0); 1013 } } 1015  $cÚfœm_cb ( GIOChªÃl * chª , gpoš‹r d©a ) 1017  avrý_deviû * dev ; 1018  add»ss [18]; 1019 bdaddr_t d¡ ; 1020 GE¼Ü * ”r = NULL ; 1022 `bt_io_g‘ ( chª , & ”r , 1023 BT_IO_OPT_DEST_BDADDR , & d¡ , 1024 BT_IO_OPT_DEST , add»ss , 1025 BT_IO_OPT_INVALID ); 1026 ià( ”r ) { 1027 `”rÜ ("%s", ”r -> mes§ge ); 1028 `g_”rÜ_ä“ ( ”r ); 1029 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 1033 `DBG ("šcomšg cÚÃù from %s", add»ss ); 1035 dev = `avrý_deviû_fšd (& d¡ ); 1036 ià( dev && dev-> £ssiÚ ) { 1037 `”rÜ ("AVRCP: Refusing unexpected connect"); 1038 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 1042 dev = `avrý_deviû_Ãw (& d¡ ); 1043 ià( `avrý_deviû_£¬ch ( dev ) < 0) { 1044 `”rÜ ("AVRCP: Failedo search SDP details"); 1045 `avrý_deviû_ä“ ( dev ); 1046 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 1049 dev -> io = `g_io_chªÃl_»f ( chª ); 1050 } } 1052 boÞ $bt_avrý_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ) 1054 GE¼Ü * ”r = NULL ; 1055 sdp_»cÜd_t * »c ; 1057 `DBG (""); 1059 `baýy (& ad­‹r_addr , addr ); 1061 £rv” = `bt_io_li¡’ ( NULL , cÚfœm_cb , NULL, NULL, & ”r , 1062 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 1063 BT_IO_OPT_PSM , L2CAP_PSM_AVCTP , 1064 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 1065 BT_IO_OPT_INVALID ); 1066 ià(! £rv” ) { 1067 `”rÜ ("FažedØli¡’ oÀAVDTP chªÃl: %s", ”r -> mes§ge ); 1068 `g_”rÜ_ä“ ( ”r ); 1069  çl£ ; 1072 »c = `avrý_tg_»cÜd (); 1073 ià(! »c ) { 1074 `”rÜ ("Failedo‡llocate AVRCP TG„ecord"); 1075  çž ; 1078 ià( `bt_ad­‹r_add_»cÜd ( »c , 0) < 0) { 1079 `”rÜ ("Failedo„egister AVRCP TG„ecord"); 1080 `sdp_»cÜd_ä“ ( »c ); 1081  çž ; 1083 »cÜd_tg_id = »c -> hªdË ; 1085 »c = `avrý_ù_»cÜd (); 1086 ià(! »c ) { 1087 `”rÜ ("Failedo‡llocate AVRCP CT„ecord"); 1088 `bt_ad­‹r_»move_»cÜd ( »cÜd_tg_id ); 1089  çž ; 1092 ià( `bt_ad­‹r_add_»cÜd ( »c , 0) < 0) { 1093 `”rÜ ("Failedo„egister AVRCP CT„ecord"); 1094 `bt_ad­‹r_»move_»cÜd ( »cÜd_tg_id ); 1095 `sdp_»cÜd_ä“ ( »c ); 1096  çž ; 1098 »cÜd_ù_id = »c -> hªdË ; 1100 h®_c = c ; 1102 `c_»gi¡” ( h®_c , HAL_SERVICE_ID_AVRCP , cmd_hªdËrs , 1103 `G_N_ELEMENTS ( cmd_hªdËrs )); 1105  Œue ; 1106 çž : 1107 `g_io_chªÃl_shutdown ( £rv” , TRUE , NULL ); 1108 `g_io_chªÃl_uÄef ( £rv” ); 1109 £rv” = NULL ; 1111  çl£ ; 1112 } } 1114  $bt_avrý_uÄegi¡” () 1116 `DBG (""); 1118 `g_¦i¡_ä“_fuÎ ( deviûs , avrý_deviû_ä“ ); 1119 deviûs = NULL ; 1121 `c_uÄegi¡” ( h®_c , HAL_SERVICE_ID_AVRCP ); 1122 h®_c = NULL ; 1124 `bt_ad­‹r_»move_»cÜd ( »cÜd_tg_id ); 1125 »cÜd_tg_id = 0; 1127 `bt_ad­‹r_»move_»cÜd ( »cÜd_ù_id ); 1128 »cÜd_ù_id = 0; 1130 ià( £rv” ) { 1131 `g_io_chªÃl_shutdown ( £rv” , TRUE , NULL ); 1132 `g_io_chªÃl_uÄef ( £rv” ); 1133 £rv” = NULL ; 1135 } } 1137  $bt_avrý_cÚÃù (cÚ¡ bdaddr_t * d¡ ) 1139  avrý_deviû * dev ; 1140  addr [18]; 1142 `DBG (""); 1144 ià( `avrý_deviû_fšd ( d¡ )) 1147 dev = `avrý_deviû_Ãw ( d¡ ); 1148 ià( `avrý_deviû_£¬ch ( dev ) < 0) { 1149 `”rÜ ("AVRCP: Failedo search SDP details"); 1150 `avrý_deviû_ä“ ( dev ); 1153 `ba2¡r (& dev -> d¡ , addr ); 1154 `DBG ("cÚÃùšgØ%s", addr ); 1155 } } 1157  $bt_avrý_discÚÃù (cÚ¡ bdaddr_t * d¡ ) 1159  avrý_deviû * dev ; 1161 `DBG (""); 1163 dev = `avrý_deviû_fšd ( d¡ ); 1164 ià(! dev ) 1167 ià( dev -> £ssiÚ ) { 1168 `avrý_shutdown ( dev -> £ssiÚ ); 1172 `avrý_deviû_»move ( dev ); 1173 } } @android/avrcp.h 24 boÞ bt_avrý_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ); 25  bt_avrý_uÄegi¡” (); 27  bt_avrý_cÚÃù (cÚ¡ bdaddr_t * d¡ ); 28  bt_avrý_discÚÃù (cÚ¡ bdaddr_t * d¡ ); @android/bas.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dboÞ.h > 29  ~<”ºo.h > 31  ~ 33  ~"¤c/log.h " 35  ~"lib/uuid.h " 36  ~"¤c/sh¬ed/utž.h " 37  ~"¤c/sh¬ed/queue.h " 39  ~"©Œib/g©Œib.h " 40  ~"©Œib/©t.h " 41  ~"©Œib/g©t.h " 43  ~"ªdroid/bas.h " 45  #ATT_NOTIFICATION_HEADER_SIZE 3 ) 47  sbt_bas { 48  m»f_couÁ ; 49 GA‰rib * m©Œib ; 50  g©t_´im¬y * m´im¬y ; 51 ušt16_t mhªdË ; 52 ušt16_t mccc_hªdË ; 53 gušt mid ; 54  queue * mg©t_Ý ; 57  sg©t_»que¡ { 58  mid ; 59  bt_bas * mbas ; 60 * mu£r_d©a ; 63  $de¡roy_g©t_»q ( g©t_»que¡ * »q ) 65 `queue_»move ( »q -> bas -> g©t_Ý ,„eq); 66 `bt_bas_uÄef ( »q -> bas ); 67 `ä“ ( »q ); 68 } } 70  $bas_ä“ ( bt_bas * bas ) 72 `bt_bas_d‘ach ( bas ); 74 `g_ä“ ( bas -> ´im¬y ); 75 `queue_de¡roy ( bas -> g©t_Ý , (*è de¡roy_g©t_»q ); 76 `g_ä“ ( bas ); 77 } } 79  bt_bas * $bt_bas_Ãw (* ´im¬y ) 81  bt_bas * bas ; 83 bas = `g_Œy_Ãw0 ( bt_bas , 1); 84 ià(! bas ) 85  NULL ; 87 bas -> g©t_Ý = `queue_Ãw (); 88 ià(! bas -> g©t_Ý ) { 89 `bas_ä“ ( bas ); 90  NULL ; 93 ià( ´im¬y ) 94 bas -> ´im¬y = `g_memdup (primary, (*bas->primary)); 96  `bt_bas_»f ( bas ); 97 } } 99  bt_bas * $bt_bas_»f ( bt_bas * bas ) 101 ià(! bas ) 102  NULL ; 104 `__sync_ãtch_ªd_add (& bas -> »f_couÁ , 1); 106  bas ; 107 } } 109  $bt_bas_uÄef ( bt_bas * bas ) 111 ià(! bas ) 114 ià( `__sync_sub_ªd_ãtch (& bas -> »f_couÁ , 1)) 117 `bas_ä“ ( bas ); 118 } } 120  g©t_»que¡ * $ü—‹_»que¡ ( bt_bas * bas , 121 * u£r_d©a ) 123  g©t_»que¡ * »q ; 125 »q = `Ãw0 ( g©t_»que¡ , 1); 126 ià(! »q ) 127  NULL ; 129 »q -> u£r_d©a = user_data; 130 »q -> bas = `bt_bas_»f (bas); 132  »q ; 133 } } 135  boÞ $£t_ªd_¡Üe_g©t_»q ( bt_bas * bas , 136  g©t_»que¡ * »q , 137  id ) 139 »q -> id = id; 140  `queue_push_h—d ( bas -> g©t_Ý , »q ); 141 } } 143  $wr™e_ch¬ ( bt_bas * bas , GA‰rib * ©Œib , ušt16_t hªdË , 144 cÚ¡ ušt8_t * v®ue , size_t vËn , 145 GA‰ribResuÉFunc func , 146 gpoš‹r u£r_d©a ) 148  g©t_»que¡ * »q ; 149  id ; 151 »q = `ü—‹_»que¡ ( bas , u£r_d©a ); 152 ià(! »q ) 155 id = `g©t_wr™e_ch¬ ( ©Œib , hªdË , v®ue , vËn , func , »q ); 157 ià( `£t_ªd_¡Üe_g©t_»q ( bas , »q , id )) 160 `”rÜ ("bas: Could‚ot write characteristic"); 161 `g_©Œib_ÿnûl ( ©Œib , id ); 162 `ä“ ( »q ); 164 } } 166  $»ad_ch¬ ( bt_bas * bas , GA‰rib * ©Œib , ušt16_t hªdË , 167 GA‰ribResuÉFunc func , gpoš‹r u£r_d©a ) 169  g©t_»que¡ * »q ; 170  id ; 172 »q = `ü—‹_»que¡ ( bas , u£r_d©a ); 173 ià(! »q ) 176 id = `g©t_»ad_ch¬ ( ©Œib , hªdË , func , »q ); 178 ià( `£t_ªd_¡Üe_g©t_»q ( bas , »q , id )) 181 `”rÜ ("bas: Could‚ot„ead characteristic"); 182 `g_©Œib_ÿnûl ( ©Œib , id ); 183 `ä“ ( »q ); 184 } } 186  $discov”_ch¬ ( bt_bas * bas , GA‰rib * ©Œib , 187 ušt16_t ¡¬t , ušt16_ˆ ’d , 188 bt_uuid_t * uuid , g©t_cb_t func , 189 gpoš‹r u£r_d©a ) 191  g©t_»que¡ * »q ; 192  id ; 194 »q = `ü—‹_»que¡ ( bas , u£r_d©a ); 195 ià(! »q ) 198 id = `g©t_discov”_ch¬ ( ©Œib , ¡¬t , ’d , uuid , func , »q ); 200 ià( `£t_ªd_¡Üe_g©t_»q ( bas , »q , id )) 203 `”rÜ ("bas: Could‚ot discover characteristic"); 204 `g_©Œib_ÿnûl ( ©Œib , id ); 205 `ä“ ( »q ); 206 } } 208  $discov”_desc ( bt_bas * bas , GA‰rib * ©Œib , 209 ušt16_t ¡¬t , ušt16_ˆ ’d , bt_uuid_t * uuid , 210 g©t_cb_t func , gpoš‹r u£r_d©a ) 212  g©t_»que¡ * »q ; 213  id ; 215 »q = `ü—‹_»que¡ ( bas , u£r_d©a ); 216 ià(! »q ) 219 id = `g©t_discov”_desc ( ©Œib , ¡¬t , ’d , uuid , func , »q ); 220 ià( `£t_ªd_¡Üe_g©t_»q ( bas , »q , id )) 223 `”rÜ ("bas: Could‚ot discover descriptor"); 224 `g_©Œib_ÿnûl ( ©Œib , id ); 225 `ä“ ( »q ); 226 } } 228  $v®ue_cb (cÚ¡ gušt8 * pdu , gušt16 Ën , gpoš‹r u£r_d©a ) 230 `DBG ("B©‹ry Lev–‡ˆ%u", pdu [ ATT_NOTIFICATION_HEADER_SIZE ]); 231 } } 233  $ccc_wr™‹n_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 234 gušt16 ¶’ , gpoš‹r u£r_d©a ) 236  g©t_»que¡ * »q = u£r_d©a ; 237  bt_bas * bas = »q -> u£r_d©a ; 239 `de¡roy_g©t_»q ( »q ); 241 ià( ¡©us != 0) { 242 `”rÜ ("Write Scan Refresh CCC failed: %s", 243 `©t_ecode2¡r ( ¡©us )); 247 `DBG ("Battery Level:‚otificationƒnabled"); 249 bas -> id = `g_©Œib_»gi¡” (bas-> ©Œib , ATT_OP_HANDLE_NOTIFY , 250 bas -> hªdË , v®ue_cb , bas, NULL ); 251 } } 253  $wr™e_ccc ( bt_bas * bas , GA‰rib * ©Œib , ušt16_t hªdË , 254 * u£r_d©a ) 256 ušt8_t v®ue [2]; 258 `put_Ë16 ( GATT_CLIENT_CHARAC_CFG_NOTIF_BIT , v®ue ); 260 `wr™e_ch¬ ( bas , ©Œib , hªdË , v®ue , (v®ue), ccc_wr™‹n_cb , 261 u£r_d©a ); 262 } } 264  $ccc_»ad_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 265 gpoš‹r u£r_d©a ) 267  g©t_»que¡ * »q = u£r_d©a ; 268  bt_bas * bas = »q -> u£r_d©a ; 270 `de¡roy_g©t_»q ( »q ); 272 ià( ¡©us != 0) { 273 `”rÜ ("E¼Ü„—dšg CCC v®ue: %s", `©t_ecode2¡r ( ¡©us )); 277 `wr™e_ccc ( bas , bas-> ©Œib , bas-> ccc_hªdË , bas); 278 } } 280  $discov”_desütÜ_cb ( ušt8_t ¡©us , GSLi¡ * descs , 281 * u£r_d©a ) 283  g©t_»que¡ * »q = u£r_d©a ; 284  bt_bas * bas = »q -> u£r_d©a ; 285  g©t_desc * desc ; 287 `de¡roy_g©t_»q ( »q ); 289 ià( ¡©us != 0) { 290 `”rÜ ("Discov” desütÜ çžed: %s", `©t_ecode2¡r ( ¡©us )); 295 desc = descs -> d©a ; 296 bas -> ccc_hªdË = desc -> hªdË ; 298 `»ad_ch¬ ( bas , bas-> ©Œib , desc -> hªdË , ccc_»ad_cb , bas); 299 } } 301  $bas_discov”ed_cb ( ušt8_t ¡©us , GSLi¡ * ch¬s , * u£r_d©a ) 303  g©t_»que¡ * »q = u£r_d©a ; 304  bt_bas * bas = »q -> u£r_d©a ; 305  g©t_ch¬ * chr ; 306 ušt16_t ¡¬t , ’d ; 307 bt_uuid_t uuid ; 309 `de¡roy_g©t_»q ( »q ); 311 ià( ¡©us ) { 312 `”rÜ ("B©‹ry: %s", `©t_ecode2¡r ( ¡©us )); 316 chr = ch¬s -> d©a ; 317 bas -> hªdË = chr -> v®ue_hªdË ; 319 `DBG ("B©‹ry hªdË: 0x%04x", bas -> hªdË ); 321 ¡¬t = chr -> v®ue_hªdË + 1; 322 ’d = bas -> ´im¬y -> ¿nge .end; 324 `bt_uuid16_ü—‹ (& uuid , GATT_CLIENT_CHARAC_CFG_UUID ); 326 `discov”_desc ( bas , bas-> ©Œib , ¡¬t , ’d , & uuid , 327 discov”_desütÜ_cb , bas ); 328 } } 330 boÞ $bt_bas_©ch ( bt_bas * bas , * ©Œib ) 332 ià(! bas || bas-> ©Œib || !bas-> ´im¬y ) 333  çl£ ; 335 bas -> ©Œib = `g_©Œib_»f (attrib); 337 ià( bas -> hªdË > 0) 338  Œue ; 340 `discov”_ch¬ ( bas , bas-> ©Œib , bas-> ´im¬y -> ¿nge . ¡¬t , 341 bas -> ´im¬y -> ¿nge . ’d , NULL , 342 bas_discov”ed_cb , bas ); 344  Œue ; 345 } } 347  $ÿnûl_g©t_»q ( g©t_»que¡ * »q ) 349 ià( `g_©Œib_ÿnûl ( »q -> bas -> ©Œib ,„eq-> id )) 350 `de¡roy_g©t_»q ( »q ); 351 } } 353  $bt_bas_d‘ach ( bt_bas * bas ) 355 ià(! bas || !bas-> ©Œib ) 358 ià( bas -> id > 0) { 359 `g_©Œib_uÄegi¡” ( bas -> ©Œib , bas-> id ); 360 bas -> id = 0; 363 `queue_fÜ—ch ( bas -> g©t_Ý , (*è ÿnûl_g©t_»q , NULL ); 364 `g_©Œib_uÄef ( bas -> ©Œib ); 365 bas -> ©Œib = NULL ; 366 } } @android/bas.h 24  gbt_bas ; 26  bt_bas * bt_bas_Ãw (* ´im¬y ); 28  bt_bas * bt_bas_»f (bt_ba * bas ); 29  bt_bas_uÄef ( bt_bas * bas ); 31 boÞ bt_bas_©ch ( bt_bas * bas , * g©t ); 32  bt_bas_d‘ach ( bt_bas * bas ); @android/bluetooth.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<”ºo.h > 29  ~<¡dlib.h > 30  ~ 31  ~<š‰y³s.h > 32  ~ 33  ~ 34  ~ 36  ~ 38  ~"lib/blu‘oÙh.h " 39  ~"lib/sdp.h " 40  ~"lib/mgmt.h " 41  ~"lib/uuid.h " 42  ~"¤c/sh¬ed/utž.h " 43  ~"¤c/sh¬ed/mgmt.h " 44  ~"¤c/sh¬ed/queue.h " 45  ~"¤c/eœ.h " 46  ~"lib/sdp.h " 47  ~"lib/sdp_lib.h " 48  ~"¤c/sdp-þ›Á.h " 49  ~"¤c/sdpd.h " 50  ~"¤c/log.h " 51  ~"h®-msg.h " 52  ~"c-commÚ.h " 53  ~"c.h " 54  ~"utžs.h " 55  ~"blu‘oÙh.h " 61  #MPS_DEFAULT_MPSD ((1ULL << 0) | (1ULL << 2) | (1ULL << 4) | \ 65 (1ULL << 36)) ) 71  #MPS_DEFAULT_MPMD ((1ULL << 1) | (1ULL << 3) | (1ULL << 5) | \ 73 (1ULL << 12è| (1ULL << 15è| (1ULL << 17)) ) 79  #MPS_DEFAULT_DEPS ((1 << 1è| (1 << 2è| (1 << 3)) ) 82  #MPS_MPSD_HFP_AG_DEP ((1ULL << 0) | (1ULL << 2) | (1ULL << 4) | \ 86 (1ULL << 30)) ) 89  #MPS_MPMD_HFP_AG_DEP (1ULL << 6) ) 91  #DUT_MODE_FILE "/sys/k”Ãl/debug/blu‘oÙh/hci%u/dut_mode" ) 93  #SETTINGS_FILE ANDROID_STORAGEDIR "/£‰šgs" ) 94  #DEVICES_FILE ANDROID_STORAGEDIR "/deviûs" ) 95  #CACHE_FILE ANDROID_STORAGEDIR "/ÿche" ) 97  #ADAPTER_MAJOR_CLASS 0x02 ) 98  #ADAPTER_MINOR_CLASS 0x03 ) 101  #DEFAULT_IO_CAPABILITY 0x01 ) 104  #DEFAULT_DISCOVERABLE_TIMEOUT 120 ) 106  #DEVICES_CACHE_MAX 300 ) 108  #BASELEN_PROP_CHANGED (( h®_ev_ad­‹r_´Ýs_chªged ) \ 109 + ( h®_´Ý”ty )) ) 111  #BASELEN_REMOTE_DEV_PROP (( h®_ev_»mÙe_deviû_´Ýs ) \ 112 + ( h®_´Ý”ty )) ) 114  #SCAN_TYPE_NONE 0 ) 115  #SCAN_TYPE_BREDR (1 << BDADDR_BREDR ) ) 116  #SCAN_TYPE_LE ((1 << BDADDR_LE_PUBLIC è| (1 << BDADDR_LE_RANDOM )) ) 117  #SCAN_TYPE_DUAL ( SCAN_TYPE_BREDR | SCAN_TYPE_LE ) ) 119  #BDADDR_LE ( BDADDR_LE_RANDOM | BDADDR_LE_PUBLIC ) ) 121  sdeviû { 122 bdaddr_t mbdaddr ; 123 ušt8_t mbdaddr_ty³ ; 125 bdaddr_t m½a ; 126 ušt8_t m½a_ty³ ; 128 boÞ mË ; 129 boÞ mb»dr ; 131 boÞ m·œšg ; 133 boÞ mb»dr_·œed ; 134 boÞ mb»dr_bÚded ; 135 boÞ mË_·œed ; 136 boÞ mË_bÚded ; 138 boÞ mš_wh™e_li¡ ; 140 * mÇme ; 141 * mä›ndly_Çme ; 143 ušt32_t mþass ; 144 št32_t mrssi ; 146 time_t mb»dr_£’ ; 147 time_t mË_£’ ; 149 GSLi¡ * muuids ; 151 boÞ mfound ; 152  mcÚfœm_id ; 154 boÞ mv®id_»mÙe_c¤k ; 155 ušt8_t m»mÙe_c¤k [16]; 156 ušt32_t m»mÙe_sign_út ; 158 boÞ mv®id_loÿl_c¤k ; 159 ušt8_t mloÿl_c¤k [16]; 160 ušt32_t mloÿl_sign_út ; 161 ušt16_t mg©t_ccc ; 164  sbrow£_»q { 165 bdaddr_t mbdaddr ; 166 GSLi¡ * muuids ; 167  m£¬ch_uuid ; 168  m»cÚÃù_©‹m± ; 172 ušt16_t mšdex ; 174 bdaddr_t mbdaddr ; 175 ušt32_t mdev_þass ; 177 * mÇme ; 179 ušt8_t mmax_adv”t_š¡ªû ; 180 ušt8_t m½a_ofæßd_suµÜ‹d ; 181 ušt8_t mmax_œk_li¡_size ; 182 ušt8_t mmax_sÿn_fž‹rs_suµÜ‹d ; 183 ušt16_t msÿn_»suÉ_¡Üage_size ; 184 ušt8_t maùiv™y_’”gy_šfo_suµÜ‹d ; 186 ušt32_t mcu¼’t_£‰šgs ; 187 ušt32_t msuµÜ‹d_£‰šgs ; 189 boÞ mË_sÿšg ; 190 ušt8_t mcur_discov”y_ty³ ; 191 ušt8_t mexp_discov”y_ty³ ; 192 ušt32_t mdiscov”abË_timeout ; 194 GSLi¡ * muuids ; 195 } gad­‹r = { 196 . šdex = MGMT_INDEX_NONE , 197 . gdev_þass = 0, 198 . gÇme = NULL , 199 . gmax_adv”t_š¡ªû = 0, 200 . g½a_ofæßd_suµÜ‹d = 0, 201 . gmax_œk_li¡_size = 0, 202 . gmax_sÿn_fž‹rs_suµÜ‹d = 0, 203 . gsÿn_»suÉ_¡Üage_size = 0, 204 . gaùiv™y_’”gy_šfo_suµÜ‹d = 0, 205 . gcu¼’t_£‰šgs = 0, 206 . gsuµÜ‹d_£‰šgs = 0, 207 . gcur_discov”y_ty³ = SCAN_TYPE_NONE , 208 . gexp_discov”y_ty³ = SCAN_TYPE_NONE , 209 . gdiscov”abË_timeout = DEFAULT_DISCOVERABLE_TIMEOUT , 210 . guuids = NULL , 213 cÚ¡ ušt16_t guuid_li¡ [] = { 214 L2CAP_UUID , 215 PNP_INFO_SVCLASS_ID , 216 PUBLIC_BROWSE_GROUP , 220  ušt16_t gÝtiÚ_šdex = MGMT_INDEX_NONE ; 221  mgmt * gmgmt_if = NULL ; 223  GSLi¡ * gbÚded_deviûs = NULL ; 224  GSLi¡ * gÿched_deviûs = NULL ; 226  bt_Ë_deviû_found gg©t_deviû_found_cb = NULL ; 227  bt_Ë_discov”y_¡Ý³d gg©t_discov”y_¡Ý³d_cb = NULL ; 230  GSLi¡ * gbrow£_»qs ; 232  c * gh®_c = NULL ; 234  boÞ gk”Ãl_cÚn_cÚŒÞ = çl£ ; 236  queue * guÅaœed_cb_li¡ = NULL ; 237  queue * g·œed_cb_li¡ = NULL ; 239  $g‘_deviû_ªdroid_addr ( deviû * dev , ušt8_t * addr ) 246 ià( `bacmp (& dev -> ½a , BDADDR_ANY )) 247 `bdaddr2ªdroid (& dev -> ½a , addr ); 249 `bdaddr2ªdroid (& dev -> bdaddr , addr ); 250 } } 252  $mgmt_debug (cÚ¡ * ¡r , * u£r_d©a ) 254 cÚ¡ * ´efix = u£r_d©a ; 255 `šfo ("%s%s", ´efix , ¡r ); 256 } } 258  $¡Üe_ad­‹r_cÚfig () 260 GKeyFže * key_fže ; 261 gsize Ëngth = 0; 262  addr [18]; 263 * d©a ; 265 key_fže = `g_key_fže_Ãw (); 267 `g_key_fže_lßd_äom_fže ( key_fže , SETTINGS_FILE , 0, NULL ); 269 `ba2¡r (& ad­‹r . bdaddr , addr ); 271 `g_key_fže_£t_¡ršg ( key_fže , "G’”®", "Add»ss", addr ); 273 ià( ad­‹r . Çme ) 274 `g_key_fže_£t_¡ršg ( key_fže , "General", "Name", 275 ad­‹r . Çme ); 277 `g_key_fže_£t_š‹g” ( key_fže , "General", "DiscoverableTimeout", 278 ad­‹r . discov”abË_timeout ); 280 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 282 `g_fže_£t_cÚ‹Ás ( SETTINGS_FILE , d©a , Ëngth , NULL ); 284 `g_ä“ ( d©a ); 285 `g_key_fže_ä“ ( key_fže ); 286 } } 288  $lßd_ad­‹r_cÚfig () 290 GE¼Ü * g”r = NULL ; 291 GKeyFže * key_fže ; 292 * ¡r ; 294 key_fže = `g_key_fže_Ãw (); 295 `g_key_fže_lßd_äom_fže ( key_fže , SETTINGS_FILE , 0, NULL ); 297 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , "G’”®", "Add»ss", NULL ); 298 ià(! ¡r ) { 299 `g_key_fže_ä“ ( key_fže ); 303 `¡r2ba ( ¡r , & ad­‹r . bdaddr ); 304 `g_ä“ ( ¡r ); 306 ad­‹r . Çme = `g_key_fže_g‘_¡ršg ( key_fže , "G’”®", "Name", NULL ); 308 ad­‹r . discov”abË_timeout = `g_key_fže_g‘_š‹g” ( key_fže , 309 "G’”®", "Discov”abËTimeout", & g”r ); 310 ià( g”r ) { 311 ad­‹r . discov”abË_timeout = DEFAULT_DISCOVERABLE_TIMEOUT ; 312 `g_þ—r_”rÜ (& g”r ); 315 `g_key_fže_ä“ ( key_fže ); 316 } } 318  $¡Üe_deviû_šfo ( deviû * dev , cÚ¡ * ·th ) 320 GKeyFže * key_fže ; 321  addr [18]; 322 gsize Ëngth = 0; 323 ** uuids = NULL ; 324 * ¡r ; 326 `ba2¡r (& dev -> bdaddr , addr ); 328 key_fže = `g_key_fže_Ãw (); 329 `g_key_fže_lßd_äom_fže ( key_fže , ·th , 0, NULL ); 331 `g_key_fže_£t_boÞ—n ( key_fže , addr , "BREDR", dev -> b»dr ); 333 ià( dev -> Ë ) 334 `g_key_fže_£t_š‹g” ( key_fže , addr , "AddressType", 335 dev -> bdaddr_ty³ ); 337 `g_key_fže_£t_¡ršg ( key_fže , addr , "Name", dev -> Çme ); 339 ià( dev -> ä›ndly_Çme ) 340 `g_key_fže_£t_¡ršg ( key_fže , addr , "FriendlyName", 341 dev -> ä›ndly_Çme ); 343 `g_key_fže_»move_key ( key_fže , addr , "Fr›ndlyName", NULL ); 345 ià( dev -> þass ) 346 `g_key_fže_£t_š‹g” ( key_fže , addr , "CÏss", dev -> þass ); 348 `g_key_fže_»move_key ( key_fže , addr , "CÏss", NULL ); 350 ià( dev -> b»dr_£’ > dev-> Ë_£’ ) 351 `g_key_fže_£t_š‹g” ( key_fže , addr , "Timestamp", 352 dev -> b»dr_£’ ); 354 `g_key_fže_£t_š‹g” ( key_fže , addr , "Timestamp", 355 dev -> Ë_£’ ); 357 ià( dev -> uuids ) { 358 GSLi¡ * l ; 359  i ; 361 uuids = `g_Ãw0 (*, `g_¦i¡_Ëngth ( dev ->uuids) + 1); 363  i = 0, l = dev -> uuids ;†;† = `g_¦i¡_Ãxt (l), i++) { 364  j ; 365 ušt8_t * u = l -> d©a ; 366 * uuid_¡r = `g_m®loc0 (33); 368  j = 0; j < 16; j++) 369 `¥rštf ( uuid_¡r + ( j * 2), "%2.2X", u [j]); 371 uuids [ i ] = uuid_¡r ; 374 `g_key_fže_£t_¡ršg_li¡ ( key_fže , addr , "Services", 375 (cÚ¡ **) uuids , i ); 377 `g_key_fže_»move_key ( key_fže , addr , "S”viûs", NULL ); 380 ¡r = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 381 `g_fže_£t_cÚ‹Ás ( ·th , ¡r , Ëngth , NULL ); 382 `g_ä“ ( ¡r ); 384 `g_key_fže_ä“ ( key_fže ); 385 `g_¡rä“v ( uuids ); 386 } } 388  $»move_deviû_šfo ( deviû * dev , cÚ¡ * ·th ) 390 GKeyFže * key_fže ; 391 gsize Ëngth = 0; 392  addr [18]; 393 * ¡r ; 395 `ba2¡r (& dev -> bdaddr , addr ); 397 key_fže = `g_key_fže_Ãw (); 398 `g_key_fže_lßd_äom_fže ( key_fže , ·th , 0, NULL ); 400 `g_key_fže_»move_group ( key_fže , addr , NULL ); 402 ¡r = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 403 `g_fže_£t_cÚ‹Ás ( ·th , ¡r , Ëngth , NULL ); 404 `g_ä“ ( ¡r ); 406 `g_key_fže_ä“ ( key_fže ); 407 } } 409  $deviû_m©ch ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 411 cÚ¡  deviû * dev = a ; 412 cÚ¡ bdaddr_t * bdaddr = b ; 415 ià(! `bacmp (& dev -> ½a , bdaddr )) 418  `bacmp (& dev -> bdaddr , bdaddr); 419 } } 421  deviû * $fšd_deviû (cÚ¡ bdaddr_t * bdaddr ) 423 GSLi¡ * l ; 425 l = `g_¦i¡_fšd_cu¡om ( bÚded_deviûs , bdaddr , deviû_m©ch ); 426 ià( l ) 427  l -> d©a ; 429 l = `g_¦i¡_fšd_cu¡om ( ÿched_deviûs , bdaddr , deviû_m©ch ); 430 ià( l ) 431  l -> d©a ; 433  NULL ; 434 } } 436  $ä“_deviû ( deviû * dev ) 438 ià( dev -> cÚfœm_id ) 439 `mgmt_ÿnûl ( mgmt_if , dev -> cÚfœm_id ); 441 `g_ä“ ( dev -> Çme ); 442 `g_ä“ ( dev -> ä›ndly_Çme ); 443 `g_¦i¡_ä“_fuÎ ( dev -> uuids , g_ä“ ); 444 `g_ä“ ( dev ); 445 } } 447  $ÿche_deviû ( deviû * Ãw_dev ) 449  deviû * dev ; 450 GSLi¡ * l ; 452 l = `g_¦i¡_fšd ( ÿched_deviûs , Ãw_dev ); 453 ià( l ) { 454 ÿched_deviûs = `g_¦i¡_»move (ÿched_deviûs, Ãw_dev ); 455  ÿche ; 458 ià( `g_¦i¡_Ëngth ( ÿched_deviûs è< DEVICES_CACHE_MAX ) 459  ÿche ; 461 l = `g_¦i¡_Ï¡ ( ÿched_deviûs ); 462 dev = l -> d©a ; 464 ÿched_deviûs = `g_¦i¡_»move (ÿched_deviûs, dev ); 465 `»move_deviû_šfo ( dev , CACHE_FILE ); 466 `ä“_deviû ( dev ); 468 ÿche : 469 ÿched_deviûs = `g_¦i¡_´•’d (ÿched_deviûs, Ãw_dev ); 470 `¡Üe_deviû_šfo ( Ãw_dev , CACHE_FILE ); 471 } } 473  deviû * $ü—‹_deviû (cÚ¡ bdaddr_t * bdaddr , ušt8_t bdaddr_ty³ ) 475  deviû * dev ; 476  addr [18]; 478 `ba2¡r ( bdaddr , addr ); 479 `DBG ("%s", addr ); 481 dev = `g_Ãw0 ( deviû , 1); 483 `baýy (& dev -> bdaddr , bdaddr); 485 ià( bdaddr_ty³ =ð BDADDR_BREDR ) { 486 dev -> b»dr = Œue ; 487 dev -> b»dr_£’ = `time ( NULL ); 489 dev -> Ë = Œue ; 490 dev -> bdaddr_ty³ = bdaddr_type; 491 dev -> Ë_£’ = `time ( NULL ); 498 dev -> Çme = `g_¡rdup ( addr ); 500  dev ; 501 } } 503  deviû * $g‘_deviû (cÚ¡ bdaddr_t * bdaddr , ušt8_t ty³ ) 505  deviû * dev ; 507 dev = `fšd_deviû ( bdaddr ); 508 ià( dev ) 509  dev ; 511 dev = `ü—‹_deviû ( bdaddr , ty³ ); 513 `ÿche_deviû ( dev ); 515  dev ; 516 } } 518  deviû * $fšd_deviû_ªdroid (cÚ¡ ušt8_t * addr ) 520 bdaddr_t bdaddr ; 522 `ªdroid2bdaddr ( addr , & bdaddr ); 524  `fšd_deviû (& bdaddr ); 525 } } 527  deviû * $g‘_deviû_ªdroid (cÚ¡ ušt8_t * addr ) 529 bdaddr_t bdaddr ; 531 `ªdroid2bdaddr ( addr , & bdaddr ); 533  `g‘_deviû (& bdaddr , BDADDR_BREDR ); 534 } } 536  $£nd_ad­‹r_´Ý”ty ( ušt8_t ty³ , ušt16_t Ën , cÚ¡ * v® ) 538 ušt8_t buf [ BASELEN_PROP_CHANGED + Ën ]; 539  h®_ev_ad­‹r_´Ýs_chªged * ev = (*è buf ; 541 ev -> ¡©us = HAL_STATUS_SUCCESS ; 542 ev -> num_´Ýs = 1; 543 ev -> ´Ýs [0]. ty³ =ype; 544 ev -> ´Ýs [0]. Ën =†en; 545 `memýy ( ev -> ´Ýs [0]. v® , v®, Ën ); 547 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 548 HAL_EV_ADAPTER_PROPS_CHANGED , ( buf ), buf); 549 } } 551  $ad­‹r_Çme_chªged (cÚ¡ ušt8_t * Çme ) 554 `£nd_ad­‹r_´Ý”ty ( HAL_PROP_ADAPTER_NAME , 555 `¡¾’ ((cÚ¡ *è Çme ),‚ame); 556 } } 558  $ad­‹r_£t_Çme (cÚ¡ ušt8_t * Çme ) 560 ià(! `g_¡rcmp0 ( ad­‹r . Çme , (const *)‚ame)) 563 `DBG ("%s", Çme ); 565 `g_ä“ ( ad­‹r . Çme ); 566 ad­‹r . Çme = `g_¡rdup ((const *)‚ame); 568 `¡Üe_ad­‹r_cÚfig (); 570 `ad­‹r_Çme_chªged ( Çme ); 571 } } 573  $mgmt_loÿl_Çme_chªged_ev’t ( ušt16_t šdex , ušt16_ˆ Ëngth , 574 cÚ¡ * ·¿m , * u£r_d©a ) 576 cÚ¡  mgmt_ý_£t_loÿl_Çme * ½ = ·¿m ; 578 ià( Ëngth < (* ½ )) { 579 `”rÜ ("Wrong size of†ocal‚ame changed…arameters"); 583 `ad­‹r_£t_Çme ( ½ -> Çme ); 586 } } 588  $pow”ed_chªged () 590  h®_ev_ad­‹r_¡©e_chªged ev ; 592 ev . ¡©e = ( ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_POWERED ) ? 593 HAL_POWER_ON : HAL_POWER_OFF ; 595 `DBG ("%u", ev . ¡©e ); 597 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 598 HAL_EV_ADAPTER_STATE_CHANGED , ( ev ), &ev); 599 } } 601  ušt8_t $£‰šgs2sÿn_mode () 603 boÞ cÚÃùabË , discov”abË ; 605 cÚÃùabË = ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_CONNECTABLE ; 606 discov”abË = ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_DISCOVERABLE ; 608 ià( cÚÃùabË && discov”abË ) 609  HAL_ADAPTER_SCAN_MODE_CONN_DISC ; 611 ià( cÚÃùabË ) 612  HAL_ADAPTER_SCAN_MODE_CONN ; 614  HAL_ADAPTER_SCAN_MODE_NONE ; 615 } } 617  $sÿn_mode_chªged () 619 ušt8_t mode ; 621 mode = `£‰šgs2sÿn_mode (); 623 `DBG ("mod%u", mode ); 625 `£nd_ad­‹r_´Ý”ty ( HAL_PROP_ADAPTER_SCAN_MODE , ( mode ), &mode); 626 } } 628  $ad­‹r_þass_chªged () 630 `£nd_ad­‹r_´Ý”ty ( HAL_PROP_ADAPTER_CLASS , ( ad­‹r . dev_þass ), 631 & ad­‹r . dev_þass ); 632 } } 634  $£‰šgs_chªged ( ušt32_t £‰šgs ) 636 ušt32_t chªged_mask ; 637 ušt32_t sÿn_mode_mask ; 639 chªged_mask = ad­‹r . cu¼’t_£‰šgs ^ £‰šgs ; 641 ad­‹r . cu¼’t_£‰šgs = £‰šgs ; 643 `DBG ("0x%08x", chªged_mask ); 645 ià( chªged_mask & MGMT_SETTING_POWERED ) 646 `pow”ed_chªged (); 648 sÿn_mode_mask = MGMT_SETTING_CONNECTABLE | 649 MGMT_SETTING_DISCOVERABLE ; 655 ià( ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_POWERED ) 656 ià( chªged_mask & sÿn_mode_mask ) 657 `sÿn_mode_chªged (); 658 } } 660  $Ãw_£‰šgs_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 661 cÚ¡ * ·¿m , * u£r_d©a ) 663 ušt32_t £‰šgs ; 665 ià( Ëngth < ( £‰šgs )) { 666 `”rÜ ("Wrong size of‚ew settings…arameters"); 670 £‰šgs = `g‘_Ë32 ( ·¿m ); 672 `DBG ("£‰šgs: 0x%8.8x -> 0x%8.8x", ad­‹r . cu¼’t_£‰šgs , 673 £‰šgs ); 675 ià( £‰šgs =ð ad­‹r . cu¼’t_£‰šgs ) 678 `£‰šgs_chªged ( £‰šgs ); 679 } } 681  $mgmt_dev_þass_chªged_ev’t ( ušt16_t šdex , ušt16_ˆ Ëngth , 682 cÚ¡ * ·¿m , * u£r_d©a ) 684 cÚ¡  mgmt_cod * ½ = ·¿m ; 685 ušt32_t dev_þass ; 687 ià( Ëngth < (* ½ )) { 688 `”rÜ ("Wrong size of class of device changed…arameters"); 692 dev_þass = ½ -> v® [0] | (rp->val[1] << 8) | (rp->val[2] << 16); 694 ià( dev_þass =ð ad­‹r .dev_class) 697 `DBG ("CÏss: 0x%06x", dev_þass ); 699 ad­‹r . dev_þass = dev_class; 701 `ad­‹r_þass_chªged (); 704 } } 706  $bt_¡Üe_g©t_ccc (cÚ¡ bdaddr_t * d¡ , ušt16_t v®ue ) 708  deviû * dev ; 709 GKeyFže * key_fže ; 710 gsize Ëngth = 0; 711  addr [18]; 712 * d©a ; 714 dev = `fšd_deviû ( d¡ ); 715 ià(! dev ) 718 key_fže = `g_key_fže_Ãw (); 720 ià(! `g_key_fže_lßd_äom_fže ( key_fže , DEVICES_FILE , 0, NULL )) { 721 `g_key_fže_ä“ ( key_fže ); 725 `ba2¡r (& dev -> bdaddr , addr ); 727 `DBG ("% G©ˆCCC %d", addr , v®ue ); 729 `g_key_fže_£t_š‹g” ( key_fže , addr , "G©tCCC", v®ue ); 731 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 732 `g_fže_£t_cÚ‹Ás ( DEVICES_FILE , d©a , Ëngth , NULL ); 733 `g_ä“ ( d©a ); 735 `g_key_fže_ä“ ( key_fže ); 737 dev -> g©t_ccc = v®ue ; 738 } } 740 ušt16_t $bt_g‘_g©t_ccc (cÚ¡ bdaddr_t * addr ) 742  deviû * dev ; 744 dev = `fšd_deviû ( addr ); 745 ià(! dev ) 748  dev -> g©t_ccc ; 749 } } 751  $¡Üe_lšk_key (cÚ¡ bdaddr_t * d¡ , cÚ¡ ušt8_t * key , 752 ušt8_t ty³ , ušt8_ˆ pš_Ëngth ) 754 GKeyFže * key_fže ; 755  key_¡r [33]; 756 gsize Ëngth = 0; 757  addr [18]; 758 * d©a ; 759  i ; 761 key_fže = `g_key_fže_Ãw (); 763 ià(! `g_key_fže_lßd_äom_fže ( key_fže , DEVICES_FILE , 0, NULL )) { 764 `g_key_fže_ä“ ( key_fže ); 768 `ba2¡r ( d¡ , addr ); 770 `DBG ("% ty³ %u…š_ËÀ%u", addr , ty³ , pš_Ëngth ); 772  i = 0; i < 16; i++) 773 `¥rštf ( key_¡r + ( i * 2), "%2.2X", key [i]); 775 `g_key_fže_£t_¡ršg ( key_fže , addr , "LškKey", key_¡r ); 776 `g_key_fže_£t_š‹g” ( key_fže , addr , "LškKeyTy³", ty³ ); 777 `g_key_fže_£t_š‹g” ( key_fže , addr , "LškKeyPšL’gth", pš_Ëngth ); 779 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 780 `g_fže_£t_cÚ‹Ás ( DEVICES_FILE , d©a , Ëngth , NULL ); 781 `g_ä“ ( d©a ); 783 `g_key_fže_ä“ ( key_fže ); 784 } } 786  $£nd_bÚd_¡©e_chªge ( deviû * dev , ušt8_t ¡©us , 787 ušt8_t ¡©e ) 789  h®_ev_bÚd_¡©e_chªged ev ; 791 ev . ¡©us = status; 792 ev . ¡©e = state; 793 `g‘_deviû_ªdroid_addr ( dev , ev . bdaddr ); 795 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 796 HAL_EV_BOND_STATE_CHANGED , ( ev ), &ev); 797 } } 799  $upd©e_b»dr_¡©e ( deviû * dev , boÞ ·œšg , boÞ ·œed , 800 boÞ bÚded ) 802 ià( ·œšg =ð dev ->·œšg && ·œed =ðdev-> b»dr_·œed && 803 bÚded =ð dev -> b»dr_bÚded ) 807 ià( ·œšg && dev -> b»dr_·œed ) 808  dÚe ; 811 ià(! ·œšg && ! ·œed && dev ->·œšg && dev-> b»dr_·œed ) 812  dÚe ; 814 ià( ·œed && ! dev -> Ë_·œed && !dev-> b»dr_·œed ) { 815 ÿched_deviûs = `g_¦i¡_»move (ÿched_deviûs, dev ); 816 bÚded_deviûs = `g_¦i¡_´•’d (bÚded_deviûs, dev ); 817 `»move_deviû_šfo ( dev , CACHE_FILE ); 818 `¡Üe_deviû_šfo ( dev , DEVICES_FILE ); 819 } ià(! ·œed && ! dev -> Ë_·œed ) { 820 bÚded_deviûs = `g_¦i¡_»move (bÚded_deviûs, dev ); 821 `»move_deviû_šfo ( dev , DEVICES_FILE ); 822 `ÿche_deviû ( dev ); 825 dev -> b»dr_·œed = ·œed ; 827 ià( dev -> b»dr_·œed ) 828 dev -> b»dr_bÚded = dev->b»dr_bÚded || bÚded ; 830 dev -> b»dr_bÚded = çl£ ; 832 dÚe : 833 dev -> ·œšg =…airing; 834 } } 836  $upd©e_Ë_¡©e ( deviû * dev , boÞ ·œšg , boÞ ·œed , 837 boÞ bÚded ) 839 ià( ·œšg =ð dev ->·œšg && ·œed =ðdev-> Ë_·œed && 840 bÚded =ð dev -> Ë_bÚded ) 844 ià( ·œšg && dev -> Ë_·œed ) 845  dÚe ; 848 ià(! ·œšg && ! ·œed && dev ->·œšg && dev-> Ë_·œed ) 849  dÚe ; 851 ià( ·œed && ! dev -> b»dr_·œed && !dev-> Ë_·œed ) { 852 ÿched_deviûs = `g_¦i¡_»move (ÿched_deviûs, dev ); 853 bÚded_deviûs = `g_¦i¡_´•’d (bÚded_deviûs, dev ); 854 `»move_deviû_šfo ( dev , CACHE_FILE ); 855 `¡Üe_deviû_šfo ( dev , DEVICES_FILE ); 856 } ià(! ·œed && ! dev -> b»dr_·œed ) { 857 bÚded_deviûs = `g_¦i¡_»move (bÚded_deviûs, dev ); 858 `»move_deviû_šfo ( dev , DEVICES_FILE ); 859 dev -> v®id_loÿl_c¤k = çl£ ; 860 dev -> v®id_»mÙe_c¤k = çl£ ; 861 dev -> loÿl_sign_út = 0; 862 dev -> »mÙe_sign_út = 0; 863 `mem£t ( dev -> loÿl_c¤k , 0, (dev->local_csrk)); 864 `mem£t ( dev -> »mÙe_c¤k , 0, (dev->remote_csrk)); 865 `ÿche_deviû ( dev ); 868 dev -> Ë_·œed = ·œed ; 870 ià( dev -> Ë_·œed ) 871 dev -> Ë_bÚded = dev->Ë_bÚded || bÚded ; 873 dev -> Ë_bÚded = çl£ ; 875 dÚe : 876 dev -> ·œšg =…airing; 877 } } 879  ušt8_t $deviû_bÚd_¡©e ( deviû * dev ) 881 ià( dev -> ·œšg ) 882  HAL_BOND_STATE_BONDING ; 888 ià( dev -> b»dr_·œed || dev-> Ë_·œed ) 889  HAL_BOND_STATE_BONDED ; 891  HAL_BOND_STATE_NONE ; 892 } } 894  $upd©e_bÚd_¡©e ( deviû * dev , ušt8_t ¡©us , 895 ušt8_t Þd_bÚd , ušt8_ˆ Ãw_bÚd ) 897 ià( Þd_bÚd =ð Ãw_bÚd ) 905 ià(( Þd_bÚd =ð HAL_BOND_STATE_NONE && 906 Ãw_bÚd =ð HAL_BOND_STATE_BONDED ) || 907 ( Þd_bÚd =ð HAL_BOND_STATE_BONDED && 908 Ãw_bÚd =ð HAL_BOND_STATE_NONE )) 909 `£nd_bÚd_¡©e_chªge ( dev , HAL_STATUS_SUCCESS , 910 HAL_BOND_STATE_BONDING ); 912 `£nd_bÚd_¡©e_chªge ( dev , ¡©us , Ãw_bÚd ); 913 } } 915  $£nd_·œed_nÙifiÿtiÚ (* d©a , * u£r_d©a ) 917 bt_·œed_deviû_cb cb = d©a ; 918  deviû * dev = u£r_d©a ; 920 `cb (& dev -> bdaddr , dev-> bdaddr_ty³ ); 921 } } 923  $upd©e_deviû_¡©e ( deviû * dev , ušt8_t addr_ty³ , 924 ušt8_t ¡©us , boÞ ·œšg , boÞ ·œed , 925 boÞ bÚded ) 927 ušt8_t Þd_bÚd , Ãw_bÚd ; 929 Þd_bÚd = `deviû_bÚd_¡©e ( dev ); 931 ià( addr_ty³ =ð BDADDR_BREDR ) 932 `upd©e_b»dr_¡©e ( dev , ·œšg , ·œed , bÚded ); 934 `upd©e_Ë_¡©e ( dev , ·œšg , ·œed , bÚded ); 936 Ãw_bÚd = `deviû_bÚd_¡©e ( dev ); 938 `upd©e_bÚd_¡©e ( dev , ¡©us , Þd_bÚd , Ãw_bÚd ); 939 } } 941  $£nd_deviû_´Ý”ty ( deviû * dev , ušt8_t ty³ , 942 ušt16_t Ën , cÚ¡ * v® ) 944 ušt8_t buf [ BASELEN_REMOTE_DEV_PROP + Ën ]; 945  h®_ev_»mÙe_deviû_´Ýs * ev = (*è buf ; 947 ev -> ¡©us = HAL_STATUS_SUCCESS ; 948 `g‘_deviû_ªdroid_addr ( dev , ev -> bdaddr ); 949 ev -> num_´Ýs = 1; 950 ev -> ´Ýs [0]. ty³ =ype; 951 ev -> ´Ýs [0]. Ën =†en; 952 `memýy ( ev -> ´Ýs [0]. v® , v®, Ën ); 954 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 955 HAL_EV_REMOTE_DEVICE_PROPS , ( buf ), buf); 956 } } 958  $£nd_deviû_uuids_nÙif ( deviû * dev ) 960 ušt8_t buf [( ušt128_t è* `g_¦i¡_Ëngth ( dev -> uuids )]; 961 ušt8_t * ±r = buf ; 962 GSLi¡ * l ; 964  l = dev -> uuids ;†;† = `g_¦i¡_Ãxt (l)) { 965 `memýy ( ±r , l -> d©a , ( ušt128_t )); 966 ±r +ð( ušt128_t ); 969 `£nd_deviû_´Ý”ty ( dev , HAL_PROP_DEVICE_UUIDS , ( buf ), buf); 970 } } 972  $£t_deviû_uuids ( deviû * dev , GSLi¡ * uuids ) 974 `g_¦i¡_ä“_fuÎ ( dev -> uuids , g_ä“ ); 975 dev -> uuids = uuids; 977 ià( dev -> Ë_·œed || dev-> b»dr_·œed ) 978 `¡Üe_deviû_šfo ( dev , DEVICES_FILE ); 980 `¡Üe_deviû_šfo ( dev , CACHE_FILE ); 982 `£nd_deviû_uuids_nÙif ( dev ); 983 } } 985  $brow£_»q_ä“ ( brow£_»q * »q ) 987 `g_¦i¡_ä“_fuÎ ( »q -> uuids , g_ä“ ); 988 `g_ä“ ( »q ); 989 } } 991  $uuid_128_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 993  `memcmp ( a , b , ( ušt128_t )); 994 } } 996  $upd©e_»cÜds ( brow£_»q * »q , sdp_li¡_t * »cs ) 998 ; »cs ;„ec ð»cs-> Ãxt ) { 999 sdp_»cÜd_t * »c = (sdp_»cÜd_ˆ*è »cs -> d©a ; 1000 sdp_li¡_t * svcþass = NULL ; 1001 uuid_t uuid128 ; 1002 uuid_t * tmp ; 1003 ušt8_t * Ãw_uuid ; 1005 ià(! »c ) 1008 ià( `sdp_g‘_£rviû_þas£s ( »c , & svcþass ) < 0) 1011 ià(! svcþass ) 1014 tmp = svcþass -> d©a ; 1016  tmp -> ty³ ) { 1017  SDP_UUID16 : 1018 `sdp_uuid16_to_uuid128 (& uuid128 , tmp ); 1020  SDP_UUID32 : 1021 `sdp_uuid32_to_uuid128 (& uuid128 , tmp ); 1023  SDP_UUID128 : 1024 `memýy (& uuid128 , tmp , ( uuid_t )); 1027 `sdp_li¡_ä“ ( svcþass , ä“ ); 1031 Ãw_uuid = `g_m®loc (16); 1032 `memýy ( Ãw_uuid , & uuid128 . v®ue .uuid128, 1033 ( uuid128 . v®ue .uuid128)); 1036 ià( `g_¦i¡_fšd_cu¡om ( »q -> uuids , Ãw_uuid , uuid_128_cmp )) 1037 `g_ä“ ( Ãw_uuid ); 1039 »q -> uuids = `g_¦i¡_­³nd Ôeq->uuids, Ãw_uuid ); 1041 `sdp_li¡_ä“ ( svcþass , ä“ ); 1043 } } 1045  $brow£_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r u£r_d©a ) 1047  brow£_»q * »q = u£r_d©a ; 1048  deviû * dev ; 1049 uuid_t uuid ; 1055 ià( ”r < 0 || »q -> £¬ch_uuid == 2) { 1056 ià( ”r =ð- ECONNRESET && »q -> »cÚÃù_©‹m± < 1) { 1057 »q -> £¬ch_uuid --; 1058 »q -> »cÚÃù_©‹m± ++; 1060  dÚe ; 1064 `upd©e_»cÜds ( »q , »cs ); 1067 ià( uuid_li¡ [ »q -> £¬ch_uuid ]) { 1068 `sdp_uuid16_ü—‹ (& uuid , uuid_li¡ [ »q -> £¬ch_uuid ++]); 1069 `bt_£¬ch_£rviû (& ad­‹r . bdaddr , & »q ->bdaddr, & uuid , 1070 brow£_cb , u£r_d©a , NULL , 0); 1074 dÚe : 1075 dev = `fšd_deviû (& »q -> bdaddr ); 1076 ià( dev ) { 1077 `£t_deviû_uuids ( dev , »q -> uuids ); 1078 »q -> uuids = NULL ; 1081 brow£_»qs = `g_¦i¡_»move (brow£_»qs, »q ); 1082 `brow£_»q_ä“ ( »q ); 1083 } } 1085  $»q_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 1087 cÚ¡  brow£_»q * »q = a ; 1088 cÚ¡ bdaddr_t * bdaddr = b ; 1090  `bacmp (& »q -> bdaddr , bdaddr); 1091 } } 1093  ušt8_t $brow£_»mÙe_sdp (cÚ¡ bdaddr_t * addr ) 1095  brow£_»q * »q ; 1096 uuid_t uuid ; 1098 ià( `g_¦i¡_fšd_cu¡om ( brow£_»qs , addr , »q_cmp )) 1099  HAL_STATUS_SUCCESS ; 1101 »q = `g_Ãw0 ( brow£_»q , 1); 1102 `baýy (& »q -> bdaddr , addr ); 1103 `sdp_uuid16_ü—‹ (& uuid , uuid_li¡ [ »q -> £¬ch_uuid ++]); 1105 ià( `bt_£¬ch_£rviû (& ad­‹r . bdaddr , 1106 & »q -> bdaddr , & uuid , brow£_cb ,„eq, NULL , 0) < 0) { 1107 `brow£_»q_ä“ ( »q ); 1108  HAL_STATUS_FAILED ; 1111 brow£_»qs = `g_¦i¡_­³nd (brow£_»qs, »q ); 1113  HAL_STATUS_SUCCESS ; 1114 } } 1116  $£nd_»mÙe_sdp_»c_nÙify ( bt_uuid_t * uuid ,  chªÃl , 1117 * Çme , ušt8_t Çme_Ën , 1118 ušt8_t ¡©us , bdaddr_t * bdaddr ) 1120  h®_´Ý_deviû_£rviû_»c * ´Ý ; 1121 ušt8_t buf [ BASELEN_REMOTE_DEV_PROP + Çme_Ën + (* ´Ý )]; 1122  h®_ev_»mÙe_deviû_´Ýs * ev = (*è buf ; 1123 size_t ´Ý_Ën = (* ´Ý è+ Çme_Ën ; 1125 `mem£t ( buf , 0, (buf)); 1127 ià( uuid && ¡©us =ð HAL_STATUS_SUCCESS ) { 1128 ´Ý = (*è& ev -> ´Ýs [0]. v® ; 1129 ´Ý -> Çme_Ën =‚ame_len; 1130 ´Ý -> chªÃl = ( ušt16_t )channel; 1131 `memýy ( ´Ý -> Çme ,‚ame, Çme_Ën ); 1132 `memýy ( ´Ý -> uuid , &uuid-> v®ue . u128 , (prop->uuid)); 1135 ev -> num_´Ýs = 1; 1136 ev -> ¡©us = status; 1137 ev -> ´Ýs [0]. Ën = ´Ý_Ën ; 1138 `bdaddr2ªdroid ( bdaddr , ev ->bdaddr); 1139 ev -> ´Ýs [0]. ty³ = HAL_PROP_DEVICE_SERVICE_REC ; 1141 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 1142 HAL_EV_REMOTE_DEVICE_PROPS , 1143 ( buf ), buf); 1144 } } 1146  $fšd_»mÙe_sdp_»c_cb ( sdp_li¡_t * »cs ,  ”r , 1147 gpoš‹r u£r_d©a ) 1149 bdaddr_t * addr = u£r_d©a ; 1150 ušt8_t Çme_Ën ; 1151 ušt8_t ¡©us ; 1152  Çme_buf [256]; 1153  chªÃl ; 1154 bt_uuid_t uuid ; 1155 uuid_t uuid128_sdp ; 1156 sdp_li¡_t * ´Ùos ; 1157 sdp_»cÜd_t * sdp_»c ; 1159 ià( ”r < 0) { 1160 `”rÜ ("error while search„emote sdp„ecords"); 1161 ¡©us = HAL_STATUS_FAILED ; 1162 `£nd_»mÙe_sdp_»c_nÙify ( NULL , 0, NULL, 0, ¡©us , addr ); 1163  dÚe ; 1166 ià(! »cs ) { 1167 `šfo ("No service„ecords found on„emote"); 1168 ¡©us = HAL_STATUS_SUCCESS ; 1169 `£nd_»mÙe_sdp_»c_nÙify ( NULL , 0, NULL, 0, ¡©us , addr ); 1170  dÚe ; 1173  ; »cs ;„ec ð»cs-> Ãxt ) { 1174 sdp_»c = »cs -> d©a ; 1176  sdp_»c -> svþass . ty³ ) { 1177  SDP_UUID16 : 1178 `sdp_uuid16_to_uuid128 (& uuid128_sdp , 1179 & sdp_»c -> svþass ); 1181  SDP_UUID32 : 1182 `sdp_uuid32_to_uuid128 (& uuid128_sdp , 1183 & sdp_»c -> svþass ); 1185  SDP_UUID128 : 1188 `”rÜ ("wrong sdp uuidype"); 1189  dÚe ; 1192 ià(! `sdp_g‘_acûss_´Ùos ( sdp_»c , & ´Ùos )) { 1193 chªÃl = `sdp_g‘_´Ùo_pÜt ( ´Ùos , RFCOMM_UUID ); 1195 `sdp_li¡_fÜ—ch ( ´Ùos , 1196 ( sdp_li¡_func_t è sdp_li¡_ä“ , 1197 NULL ); 1198 `sdp_li¡_ä“ ( ´Ùos , NULL ); 1200 chªÃl = -1; 1202 ià( chªÃl < 0) { 1203 `”rÜ ("can't get channel for sdp„ecord"); 1204 chªÃl = 0; 1207 ià(! `sdp_g‘_£rviû_Çme ( sdp_»c , Çme_buf , (name_buf))) 1208 Çme_Ën = `¡¾’ ( Çme_buf ); 1210 Çme_Ën = 0; 1212 uuid . ty³ = BT_UUID128 ; 1213 `memýy (& uuid . v®ue . u128 , uuid128_sdp .v®ue. uuid128 . d©a , 1214 ( uuid . v®ue . u128 )); 1215 ¡©us = HAL_STATUS_SUCCESS ; 1217 `£nd_»mÙe_sdp_»c_nÙify (& uuid , chªÃl , Çme_buf , Çme_Ën , 1218 ¡©us , addr ); 1221 dÚe : 1222 `g_ä“ ( addr ); 1223 } } 1225  ušt8_t $fšd_»mÙe_sdp_»c (cÚ¡ bdaddr_t * addr , 1226 cÚ¡ ušt8_t * fšd_uuid ) 1228 bdaddr_t * bdaddr ; 1229 uuid_t uuid ; 1232 `sdp_uuid128_ü—‹ (& uuid , fšd_uuid ); 1234 bdaddr = `g_Ãw ( bdaddr_t , 1); 1235 ià(! bdaddr ) 1236  HAL_STATUS_NOMEM ; 1238 `memýy ( bdaddr , addr , (*bdaddr)); 1240 ià( `bt_£¬ch_£rviû (& ad­‹r . bdaddr , addr , & uuid , 1241 fšd_»mÙe_sdp_»c_cb , bdaddr , NULL , 0) < 0) { 1242 `g_ä“ ( bdaddr ); 1243  HAL_STATUS_FAILED ; 1246  HAL_STATUS_SUCCESS ; 1247 } } 1249  $Ãw_lšk_key_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 1250 cÚ¡ * ·¿m , * u£r_d©a ) 1252 cÚ¡  mgmt_ev_Ãw_lšk_key * ev = ·¿m ; 1253 cÚ¡  mgmt_addr_šfo * addr = & ev -> key .addr; 1254  deviû * dev ; 1255  d¡ [18]; 1257 ià( Ëngth < (* ev )) { 1258 `”rÜ ("Too small‚ew†ink keyƒvent"); 1262 `ba2¡r (& addr -> bdaddr , d¡ ); 1264 `DBG ("new key for %sype %u…in_len %u", 1265 d¡ , ev -> key . ty³ ,ƒv->key. pš_Ën ); 1267 ià( ev -> key . pš_Ën > 16) { 1268 `”rÜ ("Invalid PIN†ength (%u) in‚ew_keyƒvent", 1269 ev -> key . pš_Ën ); 1273 dev = `g‘_deviû (& ev -> key . addr . bdaddr ,ƒv->key.addr. ty³ ); 1274 ià(! dev ) 1277 `upd©e_deviû_¡©e ( dev , ev -> key . addr . ty³ , HAL_STATUS_SUCCESS , çl£ , 1278 Œue , !! ev -> ¡Üe_hšt ); 1280 ià( ev -> ¡Üe_hšt ) { 1281 cÚ¡  mgmt_lšk_key_šfo * key = & ev ->key; 1283 `¡Üe_lšk_key (& addr -> bdaddr , key -> v® , key-> ty³ , 1284 key -> pš_Ën ); 1287 `brow£_»mÙe_sdp (& addr -> bdaddr ); 1288 } } 1290  ušt8_t $g‘_deviû_Çme ( deviû * dev ) 1292 `£nd_deviû_´Ý”ty ( dev , HAL_PROP_DEVICE_NAME , 1293 `¡¾’ ( dev -> Çme ), dev->name); 1295  HAL_STATUS_SUCCESS ; 1296 } } 1298  $pš_code_»que¡_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 1299 cÚ¡ * ·¿m , * u£r_d©a ) 1301 cÚ¡  mgmt_ev_pš_code_»que¡ * ev = ·¿m ; 1302  h®_ev_pš_»que¡ h®_ev ; 1303  deviû * dev ; 1304  d¡ [18]; 1306 ià( Ëngth < (* ev )) { 1307 `”rÜ ("Too small PIN code„equestƒvent"); 1311 `ba2¡r (& ev -> addr . bdaddr , d¡ ); 1313 dev = `g‘_deviû (& ev -> addr . bdaddr , BDADDR_BREDR ); 1319 `g‘_deviû_Çme ( dev ); 1321 `upd©e_deviû_¡©e ( dev , ev -> addr . ty³ , HAL_STATUS_SUCCESS , Œue , 1322 çl£ , false); 1324 `DBG ("% ty³ %u secu» %u", d¡ , ev -> addr . ty³ ,ƒv-> £cu» ); 1327 `mem£t (& h®_ev , 0, (hal_ev)); 1328 `g‘_deviû_ªdroid_addr ( dev , h®_ev . bdaddr ); 1329 h®_ev . þass_of_dev = dev -> þass ; 1331 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_EV_PIN_REQUEST , 1332 ( h®_ev ), &hal_ev); 1333 } } 1335  $£nd_s¥_»que¡ ( deviû * dev , ušt8_t v¬ŸÁ , 1336 ušt32_t ·sskey ) 1338  h®_ev_s¥_»que¡ ev ; 1340 `mem£t (& ev , 0, (ev)); 1342 `g‘_deviû_ªdroid_addr ( dev , ev . bdaddr ); 1343 `memýy ( ev . Çme , dev ->Çme, `¡¾’ (dev->name)); 1344 ev . þass_of_dev = dev -> þass ; 1346 ev . ·œšg_v¬ŸÁ = v¬ŸÁ ; 1347 ev . ·sskey =…asskey; 1349 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_EV_SSP_REQUEST , 1350 ( ev ), &ev); 1351 } } 1353  $u£r_cÚfœm_»que¡_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 1354 cÚ¡ * ·¿m , * u£r_d©a ) 1356 cÚ¡  mgmt_ev_u£r_cÚfœm_»que¡ * ev = ·¿m ; 1357  deviû * dev ; 1358  d¡ [18]; 1360 ià( Ëngth < (* ev )) { 1361 `”rÜ ("Too small user confirm„equestƒvent"); 1365 `ba2¡r (& ev -> addr . bdaddr , d¡ ); 1366 `DBG ("% cÚfœm_hšˆ%u", d¡ , ev -> cÚfœm_hšt ); 1368 dev = `g‘_deviû (& ev -> addr . bdaddr ,ƒv->addr. ty³ ); 1369 ià(! dev ) 1372 `upd©e_deviû_¡©e ( dev , ev -> addr . ty³ , HAL_STATUS_SUCCESS , Œue , 1373 çl£ , false); 1375 ià( ev -> cÚfœm_hšt ) 1376 `£nd_s¥_»que¡ ( dev , HAL_SSP_VARIANT_CONSENT , 0); 1378 `£nd_s¥_»que¡ ( dev , HAL_SSP_VARIANT_CONFIRM , ev -> v®ue ); 1379 } } 1381  $u£r_·sskey_»que¡_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 1382 cÚ¡ * ·¿m , * u£r_d©a ) 1384 cÚ¡  mgmt_ev_u£r_·sskey_»que¡ * ev = ·¿m ; 1385  deviû * dev ; 1386  d¡ [18]; 1388 ià( Ëngth < (* ev )) { 1389 `”rÜ ("Too small…asskey„equestƒvent"); 1393 `ba2¡r (& ev -> addr . bdaddr , d¡ ); 1394 `DBG ("%s", d¡ ); 1396 dev = `g‘_deviû (& ev -> addr . bdaddr ,ƒv->addr. ty³ ); 1397 ià(! dev ) 1400 `upd©e_deviû_¡©e ( dev , ev -> addr . ty³ , HAL_STATUS_SUCCESS , Œue , 1401 çl£ , false); 1403 `£nd_s¥_»que¡ ( dev , HAL_SSP_VARIANT_ENTRY , 0); 1404 } } 1406  $u£r_·sskey_nÙify_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 1407 cÚ¡ * ·¿m , 1408 * u£r_d©a ) 1410 cÚ¡  mgmt_ev_·sskey_nÙify * ev = ·¿m ; 1411  deviû * dev ; 1412  d¡ [18]; 1414 ià( Ëngth < (* ev )) { 1415 `”rÜ ("Too small…asskey‚otifyƒvent"); 1419 `ba2¡r (& ev -> addr . bdaddr , d¡ ); 1420 `DBG ("% ’‹»d %u", d¡ , ev -> ’‹»d ); 1423 ià( ev -> ’‹»d ) 1426 dev = `fšd_deviû (& ev -> addr . bdaddr ); 1427 ià(! dev ) 1430 `upd©e_deviû_¡©e ( dev , ev -> addr . ty³ , HAL_STATUS_SUCCESS , Œue , 1431 çl£ , false); 1433 `£nd_s¥_»que¡ ( dev , HAL_SSP_VARIANT_NOTIF , ev -> ·sskey ); 1434 } } 1436  $þ—r_deviû_found ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 1438  deviû * dev = d©a ; 1440 dev -> found = çl£ ; 1441 } } 1443  ušt8_t $g‘_suµÜ‹d_discov”y_ty³ () 1445 ušt8_t ty³ = SCAN_TYPE_NONE ; 1447 ià( ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_BREDR ) 1448 ty³ |ð SCAN_TYPE_BREDR ; 1450 ià( ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_LE ) 1451 ty³ |ð SCAN_TYPE_LE ; 1453  ty³ ; 1454 } } 1456  boÞ $¡¬t_discov”y ( ušt8_t ty³ ) 1458  mgmt_ý_¡¬t_discov”y ý ; 1460 ý . ty³ = `g‘_suµÜ‹d_discov”y_ty³ () &ype; 1462 `DBG ("ty³=0x%x", ý . ty³ ); 1464 ià( ý . ty³ =ð SCAN_TYPE_NONE ) 1465  çl£ ; 1467 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_START_DISCOVERY , ad­‹r . šdex , 1468 ( ý ), &ý, NULL , NULL, NULL) > 0) 1469  Œue ; 1471 `”rÜ ("Failedo start discovery"); 1473  çl£ ; 1474 } } 1480  $check_discov”y_¡©e ( ušt8_t Ãw_ty³ , ušt8_ˆ Þd_ty³ ) 1482  h®_ev_discov”y_¡©e_chªged ev ; 1484 `DBG ("%u %u", Ãw_ty³ , Þd_ty³ ); 1486 ià( Ãw_ty³ =ð `g‘_suµÜ‹d_discov”y_ty³ ()) { 1487 `g_¦i¡_fÜ—ch ( bÚded_deviûs , þ—r_deviû_found , NULL ); 1488 `g_¦i¡_fÜ—ch ( ÿched_deviûs , þ—r_deviû_found , NULL ); 1489 ev . ¡©e = HAL_DISCOVERY_STATE_STARTED ; 1490  dÚe ; 1493 ià( Þd_ty³ !ð `g‘_suµÜ‹d_discov”y_ty³ ()) 1496 ev . ¡©e = HAL_DISCOVERY_STATE_STOPPED ; 1498 dÚe : 1499 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 1500 HAL_EV_DISCOVERY_STATE_CHANGED , ( ev ), &ev); 1501 } } 1503  $mgmt_discov”šg_ev’t ( ušt16_t šdex , ušt16_ˆ Ëngth , 1504 cÚ¡ * ·¿m , * u£r_d©a ) 1506 cÚ¡  mgmt_ev_discov”šg * ev = ·¿m ; 1507 ušt8_t ty³ ; 1509 ià( Ëngth < (* ev )) { 1510 `”rÜ ("Too small discoveringƒvent"); 1514 `DBG ("ty³ %u discov”šg %u", ev -> ty³ ,ƒv-> discov”šg ); 1516 ià(!! ad­‹r . cur_discov”y_ty³ =ð!! ev -> discov”šg ) 1519 ty³ = ev -> discov”šg ?ƒv->ty³ : SCAN_TYPE_NONE ; 1521 `check_discov”y_¡©e ( ty³ , ad­‹r . cur_discov”y_ty³ ); 1523 ad­‹r . cur_discov”y_ty³ = ty³ ; 1525 ià( ev -> discov”šg ) { 1526 ad­‹r . exp_discov”y_ty³ =‡d­‹r. Ë_sÿšg ? 1527 SCAN_TYPE_LE : SCAN_TYPE_NONE ; 1532 ià( g©t_discov”y_¡Ý³d_cb ) { 1533 `g©t_discov”y_¡Ý³d_cb (); 1534 g©t_discov”y_¡Ý³d_cb = NULL ; 1537 ty³ = ad­‹r . exp_discov”y_ty³ ; 1538 ad­‹r . exp_discov”y_ty³ =‡d­‹r. Ë_sÿšg ? SCAN_TYPE_LE : 1539 SCAN_TYPE_NONE ; 1541 ià( ty³ !ð SCAN_TYPE_NONE ) 1542 `¡¬t_discov”y ( ty³ ); 1543 } } 1545  $cÚfœm_deviû_Çme_cb ( ušt8_t ¡©us , ušt16_t Ëngth , 1546 cÚ¡ * ·¿m , * u£r_d©a ) 1548 cÚ¡  mgmt_½_cÚfœm_Çme * ½ = ·¿m ; 1549  deviû * dev ; 1551 `DBG ("CÚfœm‚am¡©us: % (0x%02x)", `mgmt_”r¡r ( ¡©us ), status); 1553 ià( Ëngth < (* ½ )) { 1554 `”rÜ ("Wrong size of confirm‚ame„esponse"); 1558 dev = `fšd_deviû (& ½ -> addr . bdaddr ); 1559 ià(! dev ) 1562 dev -> cÚfœm_id = 0; 1563 } } 1565  $cÚfœm_deviû_Çme (cÚ¡ bdaddr_t * addr , ušt8_t addr_ty³ , 1566 boÞ »sÞve_Çme ) 1568  mgmt_ý_cÚfœm_Çme ý ; 1569  »s ; 1571 `mem£t (& ý , 0, (cp)); 1572 `baýy (& ý . addr . bdaddr ,‡ddr); 1573 ý . addr . ty³ = addr_ty³ ; 1575 ià(! »sÞve_Çme ) 1576 ý . Çme_known = 1; 1578 »s = `mgmt_£nd ( mgmt_if , MGMT_OP_CONFIRM_NAME , ad­‹r . šdex , 1579 ( ý ), &ý, cÚfœm_deviû_Çme_cb , 1580 NULL , NULL); 1581 ià(! »s ) 1582 `”rÜ ("Failedo send confirm‚ame„equest"); 1584  »s ; 1585 } } 1587  $fžl_h®_´Ý (* buf , ušt8_t ty³ , ušt16_t Ën , 1588 cÚ¡ * v® ) 1590  h®_´Ý”ty * ´Ý = buf ; 1592 ´Ý -> ty³ =ype; 1593 ´Ý -> Ën =†en; 1595 ià( Ën ) 1596 `memýy ( ´Ý -> v® , v®, Ën ); 1598  (* ´Ý è+ Ën ; 1599 } } 1601  ušt8_t $g‘_deviû_ªdroid_ty³ ( deviû * dev ) 1603 ià( dev -> b»dr && dev-> Ë ) 1604  HAL_TYPE_DUAL ; 1606 ià( dev -> Ë ) 1607  HAL_TYPE_LE ; 1609  HAL_TYPE_BREDR ; 1610 } } 1612 ušt8_t $bt_g‘_deviû_ªdroid_ty³ (cÚ¡ bdaddr_t * addr ) 1614  deviû * dev ; 1616 dev = `g‘_deviû ( addr , BDADDR_BREDR ); 1618  `g‘_deviû_ªdroid_ty³ ( dev ); 1619 } } 1621 boÞ $bt_is_deviû_Ë (cÚ¡ bdaddr_t * addr ) 1623  deviû * dev ; 1625 dev = `fšd_deviû ( addr ); 1626 ià(! dev ) 1627  çl£ ; 1629  dev -> Ë ; 1630 } } 1632 cÚ¡ bdaddr_t * $bt_g‘_id_addr (cÚ¡ bdaddr_t * addr , ušt8_t * ty³ ) 1634  deviû * dev ; 1636 dev = `fšd_deviû ( addr ); 1637 ià(! dev ) 1638  NULL ; 1640 ià( ty³ ) 1641 * ty³ = dev -> bdaddr_ty³ ; 1643  & dev -> bdaddr ; 1644 } } 1646 cÚ¡ * $bt_g‘_ad­‹r_Çme () 1648  ad­‹r . Çme ; 1649 } } 1651 boÞ $bt_deviû_is_bÚded (cÚ¡ bdaddr_t * bdaddr ) 1653 ià( `g_¦i¡_fšd_cu¡om ( bÚded_deviûs , bdaddr , deviû_m©ch )) 1654  Œue ; 1656  çl£ ; 1657 } } 1659 boÞ $bt_deviû_£t_uuids (cÚ¡ bdaddr_t * addr , GSLi¡ * uuids ) 1661  deviû * dev ; 1663 dev = `fšd_deviû ( addr ); 1664 ià(! dev ) 1665  çl£ ; 1667 `£t_deviû_uuids ( dev , uuids ); 1669  Œue ; 1670 } } 1672 boÞ $bt_k”Ãl_cÚn_cÚŒÞ () 1674  k”Ãl_cÚn_cÚŒÞ ; 1675 } } 1677 boÞ $bt_auto_cÚÃù_add (cÚ¡ bdaddr_t * addr ) 1679  mgmt_ý_add_deviû ý ; 1680  deviû * dev ; 1682 ià(! k”Ãl_cÚn_cÚŒÞ ) 1683  çl£ ; 1685 dev = `fšd_deviû ( addr ); 1686 ià(! dev ) 1687  çl£ ; 1689 ià( dev -> bdaddr_ty³ =ð BDADDR_BREDR ) { 1690 `DBG ("auto-connection feature is‚ot‡vailable for BR/EDR"); 1691  çl£ ; 1694 ià( dev -> š_wh™e_li¡ ) { 1695 `DBG ("Device‡lready in white†ist"); 1696  Œue ; 1699 `mem£t (& ý , 0, (cp)); 1700 `baýy (& ý . addr . bdaddr ,‡ddr); 1701 ý . addr . ty³ = dev -> bdaddr_ty³ ; 1702 ý . aùiÚ = 0x02; 1704 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_ADD_DEVICE , ad­‹r . šdex , ( ý ), 1705 & ý , NULL , NULL, NULL) > 0) { 1706 dev -> š_wh™e_li¡ = Œue ; 1707  Œue ; 1710 `”rÜ ("Failedo‡dd device"); 1712  çl£ ; 1713 } } 1715  $bt_auto_cÚÃù_»move (cÚ¡ bdaddr_t * addr ) 1717  mgmt_ý_»move_deviû ý ; 1718  deviû * dev ; 1720 ià(! k”Ãl_cÚn_cÚŒÞ ) 1723 dev = `fšd_deviû ( addr ); 1724 ià(! dev ) 1727 ià( dev -> bdaddr_ty³ =ð BDADDR_BREDR ) { 1728 `DBG ("auto-connection feature is‚ot‡vailable for BR/EDR"); 1732 ià(! dev -> š_wh™e_li¡ ) { 1733 `DBG ("Device‡lready„emoved from white†ist"); 1737 `mem£t (& ý , 0, (cp)); 1738 `baýy (& ý . addr . bdaddr ,‡ddr); 1739 ý . addr . ty³ = dev -> bdaddr_ty³ ; 1741 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_REMOVE_DEVICE , ad­‹r . šdex , 1742 ( ý ), &ý, NULL , NULL, NULL) > 0) { 1743 dev -> š_wh™e_li¡ = çl£ ; 1747 `”rÜ ("Failedo„emove device"); 1748 } } 1750  boÞ $m©ch_by_v®ue (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 1752  d©a =ð u£r_d©a ; 1753 } } 1755 boÞ $bt_uÅaœed_»gi¡” ( bt_uÅaœed_deviû_cb cb ) 1757 ià( `queue_fšd ( uÅaœed_cb_li¡ , m©ch_by_v®ue , cb )) 1758  çl£ ; 1760  `queue_push_h—d ( uÅaœed_cb_li¡ , cb ); 1761 } } 1763  $bt_uÅaœed_uÄegi¡” ( bt_uÅaœed_deviû_cb cb ) 1765 `queue_»move ( uÅaœed_cb_li¡ , cb ); 1766 } } 1768 boÞ $bt_·œed_»gi¡” ( bt_·œed_deviû_cb cb ) 1770 ià( `queue_fšd ( ·œed_cb_li¡ , m©ch_by_v®ue , cb )) 1771  çl£ ; 1773  `queue_push_h—d ( ·œed_cb_li¡ , cb ); 1774 } } 1776  $bt_·œed_uÄegi¡” ( bt_·œed_deviû_cb cb ) 1778 `queue_»move ( ·œed_cb_li¡ , cb ); 1779 } } 1781 boÞ $bt_is_·œšg (cÚ¡ bdaddr_t * addr ) 1783  deviû * dev ; 1785 dev = `fšd_deviû ( addr ); 1786 ià(! dev ) 1787  çl£ ; 1789  dev -> ·œšg ; 1790 } } 1792  boÞ $rssi_above_th»shÞd ( Þd ,  Ãw ) 1795  `abs ( Þd - Ãw ) >= 8; 1796 } } 1798  $upd©e_Ãw_deviû ( deviû * dev , št8_t rssi , 1799 cÚ¡  eœ_d©a * eœ ) 1801 ušt8_t buf [ IPC_MTU ]; 1802  h®_ev_deviû_found * ev = (*è buf ; 1803 ušt8_t ªdroid_bdaddr [6]; 1804 ušt8_t ªdroid_ty³ ; 1805 size_t size ; 1807 `mem£t ( buf , 0, (buf)); 1809 ià( ad­‹r . cur_discov”y_ty³ ) 1810 dev -> found = Œue ; 1812 size = (* ev ); 1814 `g‘_deviû_ªdroid_addr ( dev , ªdroid_bdaddr ); 1815 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_ADDR , 1816 ( ªdroid_bdaddr ),‡ndroid_bdaddr); 1817 ev -> num_´Ýs ++; 1819 ªdroid_ty³ = `g‘_deviû_ªdroid_ty³ ( dev ); 1820 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_TYPE , 1821 ( ªdroid_ty³ ), &android_type); 1822 ev -> num_´Ýs ++; 1824 ià( eœ -> þass ) 1825 dev -> þass = eœ ->class; 1827 ià( dev -> þass ) { 1828 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_CLASS , 1829 ( dev -> þass ), &dev->class); 1830 ev -> num_´Ýs ++; 1833 ià( rssi && `rssi_above_th»shÞd ( dev ->rssi,„ssi)) 1834 dev -> rssi =„ssi; 1836 ià( dev -> rssi ) { 1837 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_RSSI , 1838 ( dev -> rssi ), &dev->rssi); 1839 ev -> num_´Ýs ++; 1842 ià( eœ -> Çme && `¡¾’ (eir->name)) { 1843 `g_ä“ ( dev -> Çme ); 1844 dev -> Çme = `g_¡rdup ( eœ ->name); 1847 ià( dev -> Çme ) { 1848 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_NAME , 1849 `¡¾’ ( dev -> Çme ), dev->name); 1850 ev -> num_´Ýs ++; 1853 ià( dev -> ä›ndly_Çme ) { 1854 size +ð `fžl_h®_´Ý ( buf + size, 1855 HAL_PROP_DEVICE_FRIENDLY_NAME , 1856 `¡¾’ ( dev -> ä›ndly_Çme ), 1857 dev -> ä›ndly_Çme ); 1858 ev -> num_´Ýs ++; 1862 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_EV_DEVICE_FOUND , 1863 size , buf ); 1864 } } 1866  $upd©e_deviû ( deviû * dev , št8_t rssi , 1867 cÚ¡  eœ_d©a * eœ , ušt8_t bdaddr_ty³ ) 1869 ušt8_t buf [ IPC_MTU ]; 1870  h®_ev_»mÙe_deviû_´Ýs * ev = (*è buf ; 1871 ušt8_t Þd_ty³ , Ãw_ty³ ; 1872 size_t size ; 1874 `mem£t ( buf , 0, (buf)); 1876 size = (* ev ); 1878 ev -> ¡©us = HAL_STATUS_SUCCESS ; 1879 `g‘_deviû_ªdroid_addr ( dev , ev -> bdaddr ); 1881 Þd_ty³ = `g‘_deviû_ªdroid_ty³ ( dev ); 1883 ià( bdaddr_ty³ =ð BDADDR_BREDR ) { 1884 dev -> b»dr = Œue ; 1886 dev -> Ë = Œue ; 1887 dev -> bdaddr_ty³ = bdaddr_type; 1890 Ãw_ty³ = `g‘_deviû_ªdroid_ty³ ( dev ); 1892 ià( Þd_ty³ !ð Ãw_ty³ ) { 1893 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_TYPE , 1894 ( Ãw_ty³ ), &new_type); 1895 ev -> num_´Ýs ++; 1898 ià( eœ -> þass && dev ->class !=ƒir->class) { 1899 dev -> þass = eœ ->class; 1900 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_CLASS , 1901 ( dev -> þass ), &dev->class); 1902 ev -> num_´Ýs ++; 1905 ià( rssi && `rssi_above_th»shÞd ( dev ->rssi,„ssi)) { 1906 dev -> rssi =„ssi; 1907 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_RSSI , 1908 ( dev -> rssi ), &dev->rssi); 1909 ev -> num_´Ýs ++; 1912 ià( eœ -> Çme && `¡¾’ Óœ->Çmeè&& `¡rcmp ( dev ->name,ƒir->name)) { 1913 `g_ä“ ( dev -> Çme ); 1914 dev -> Çme = `g_¡rdup ( eœ ->name); 1915 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_NAME , 1916 `¡¾’ ( dev -> Çme ), dev->name); 1917 ev -> num_´Ýs ++; 1920 ià( dev -> ä›ndly_Çme ) { 1921 size +ð `fžl_h®_´Ý ( buf + size, 1922 HAL_PROP_DEVICE_FRIENDLY_NAME , 1923 `¡¾’ ( dev -> ä›ndly_Çme ), 1924 dev -> ä›ndly_Çme ); 1925 ev -> num_´Ýs ++; 1929 ià( ev -> num_´Ýs ) 1930 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 1931 HAL_EV_REMOTE_DEVICE_PROPS , size , buf ); 1932 } } 1934  boÞ $is_Ãw_deviû (cÚ¡  deviû * dev ,  æags , 1935 ušt8_t bdaddr_ty³ ) 1937 ià( dev -> found ) 1938  çl£ ; 1940 ià( dev -> b»dr_·œed || dev-> Ë_·œed ) 1941  çl£ ; 1943 ià( bdaddr_ty³ !ð BDADDR_BREDR && 1944 !( æags & ( EIR_LIM_DISC | EIR_GEN_DISC ))) 1945  çl£ ; 1947  Œue ; 1948 } } 1950  $upd©e_found_deviû (cÚ¡ bdaddr_t * bdaddr , ušt8_t bdaddr_ty³ , 1951 št8_t rssi , boÞ cÚfœm , 1952 boÞ cÚÃùabË , 1953 cÚ¡ ušt8_t * d©a , ušt8_ˆ d©a_Ën ) 1955  eœ_d©a eœ ; 1956  deviû * dev ; 1958 `mem£t (& eœ , 0, (eir)); 1960 `eœ_·r£ (& eœ , d©a , d©a_Ën ); 1962 dev = `g‘_deviû ( bdaddr , bdaddr_ty³ ); 1964 ià( bdaddr_ty³ =ð BDADDR_BREDR ) 1965 dev -> b»dr_£’ = `time ( NULL ); 1967 dev -> Ë_£’ = `time ( NULL ); 1973 ià( `is_Ãw_deviû ( dev , eœ . æags , bdaddr_ty³ )) 1974 `upd©e_Ãw_deviû ( dev , rssi , & eœ ); 1976 `upd©e_deviû ( dev , rssi , & eœ , bdaddr_ty³ ); 1978 `eœ_d©a_ä“ (& eœ ); 1981 ià( bdaddr_ty³ !ð BDADDR_BREDR && g©t_deviû_found_cb ) { 1982 bdaddr_t * addr ; 1983 ušt8_t addr_ty³ ; 1991 ià( `bacmp (& dev -> ½a , BDADDR_ANY )) { 1992 addr = & dev -> ½a ; 1993 addr_ty³ = dev -> ½a_ty³ ; 1995 addr = & dev -> bdaddr ; 1996 addr_ty³ = dev -> bdaddr_ty³ ; 1999 `g©t_deviû_found_cb ( addr , addr_ty³ , rssi , d©a_Ën , d©a , 2000 cÚÃùabË , dev -> Ë_bÚded ); 2003 ià(! dev -> b»dr_·œed && !dev-> Ë_·œed ) 2004 `ÿche_deviû ( dev ); 2006 ià( cÚfœm ) { 2007  addr [18]; 2008 boÞ »sÞve_Çme = Œue ; 2010 `ba2¡r ( bdaddr , addr ); 2016 ià( `g_¡rcmp0 ( dev -> Çme , addr )) { 2017 `g‘_deviû_Çme ( dev ); 2018 »sÞve_Çme = çl£ ; 2021 `šfo ("Device %s‚eeds‚ame confirmation (resolve_name=%d)", 2022 addr , »sÞve_Çme ); 2023 dev -> cÚfœm_id = `cÚfœm_deviû_Çme ( bdaddr , bdaddr_ty³ , 2024 »sÞve_Çme ); 2026 } } 2028  $mgmt_deviû_found_ev’t ( ušt16_t šdex , ušt16_ˆ Ëngth , 2029 cÚ¡ * ·¿m , * u£r_d©a ) 2031 cÚ¡  mgmt_ev_deviû_found * ev = ·¿m ; 2032 cÚ¡ ušt8_t * eœ ; 2033 ušt16_t eœ_Ën ; 2034 ušt32_t æags ; 2035 boÞ cÚfœm_Çme ; 2036 boÞ cÚÃùabË ; 2037  addr [18]; 2039 ià( Ëngth < (* ev )) { 2040 `”rÜ ("ToØsh܈deviû foundƒv’ˆ(%u by‹s)", Ëngth ); 2044 eœ_Ën = `Ë16_to_ýu ( ev ->eir_len); 2045 ià( Ëngth !ð(* ev è+ eœ_Ën ) { 2046 `”rÜ ("Device foundƒvent size mismatch (%u != %zu)", 2047 Ëngth , (* ev è+ eœ_Ën ); 2051 ià( eœ_Ën == 0) 2052 eœ = NULL ; 2054 eœ = ev ->eir; 2056 æags = `Ë32_to_ýu ( ev ->flags); 2058 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 2059 `DBG ("hci%u‡ddr %s,„ssi %d flags 0x%04xƒir_len %u", 2060 šdex , addr , ev -> rssi , æags , eœ_Ën ); 2062 cÚfœm_Çme = æags & MGMT_DEV_FOUND_CONFIRM_NAME ; 2063 cÚÃùabË = !( æags & MGMT_DEV_FOUND_NOT_CONNECTABLE ); 2065 `upd©e_found_deviû (& ev -> addr . bdaddr ,ƒv->addr. ty³ ,ƒv-> rssi , 2066 cÚfœm_Çme , cÚÃùabË , eœ , eœ_Ën ); 2067 } } 2069  $mgmt_deviû_cÚÃùed_ev’t ( ušt16_t šdex , ušt16_ˆ Ëngth , 2070 cÚ¡ * ·¿m , * u£r_d©a ) 2072 cÚ¡  mgmt_ev_deviû_cÚÃùed * ev = ·¿m ; 2073  h®_ev_aþ_¡©e_chªged h®_ev ; 2074  deviû * dev ; 2076 ià( Ëngth < (* ev )) { 2077 `”rÜ ("ToØsh܈deviû cÚÃùedƒv’ˆ(%u by‹s)", Ëngth ); 2081 `upd©e_found_deviû (& ev -> addr . bdaddr ,ƒv->addr. ty³ , 0, çl£ , false, 2082 & ev -> eœ [0], `Ë16_to_ýu Óv-> eœ_Ën )); 2084 h®_ev . ¡©us = HAL_STATUS_SUCCESS ; 2085 h®_ev . ¡©e = HAL_ACL_STATE_CONNECTED ; 2087 dev = `fšd_deviû (& ev -> addr . bdaddr ); 2088 ià(! dev ) 2091 `g‘_deviû_ªdroid_addr ( dev , h®_ev . bdaddr ); 2093 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 2094 HAL_EV_ACL_STATE_CHANGED , ( h®_ev ), &hal_ev); 2095 } } 2097  boÞ $deviû_is_·œed ( deviû * dev , ušt8_t addr_ty³ ) 2099 ià( addr_ty³ =ð BDADDR_BREDR ) 2100  dev -> b»dr_·œed ; 2102  dev -> Ë_·œed ; 2103 } } 2105  boÞ $deviû_is_bÚded ( deviû * dev ) 2107  dev -> b»dr_bÚded || dev-> Ë_bÚded ; 2108 } } 2110  $mgmt_deviû_discÚÃùed_ev’t ( ušt16_t šdex , ušt16_ˆ Ëngth , 2111 cÚ¡ * ·¿m , 2112 * u£r_d©a ) 2114 cÚ¡  mgmt_ev_deviû_discÚÃùed * ev = ·¿m ; 2115  h®_ev_aþ_¡©e_chªged h®_ev ; 2116  deviû * dev ; 2117 ušt8_t ty³ = ev -> addr .type; 2119 ià( Ëngth < (* ev )) { 2120 `”rÜ ("ToØsh܈deviû discÚÃùedƒv’ˆ(%u by‹s)", Ëngth ); 2124 dev = `fšd_deviû (& ev -> addr . bdaddr ); 2125 ià(! dev ) 2128 h®_ev . ¡©us = HAL_STATUS_SUCCESS ; 2129 h®_ev . ¡©e = HAL_ACL_STATE_DISCONNECTED ; 2130 `g‘_deviû_ªdroid_addr ( dev , h®_ev . bdaddr ); 2132 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 2133 HAL_EV_ACL_STATE_CHANGED , ( h®_ev ), &hal_ev); 2135 ià( `deviû_is_·œed ( dev , ty³ è&& ! `deviû_is_bÚded (dev)) 2136 `upd©e_deviû_¡©e ( dev , ty³ , HAL_STATUS_SUCCESS , çl£ , 2137 çl£ , false); 2138 } } 2140  ušt8_t $¡©us_mgmt2h® ( ušt8_t mgmt ) 2142  mgmt ) { 2143  MGMT_STATUS_SUCCESS : 2144  HAL_STATUS_SUCCESS ; 2145  MGMT_STATUS_NO_RESOURCES : 2146  HAL_STATUS_NOMEM ; 2147  MGMT_STATUS_BUSY : 2148  HAL_STATUS_BUSY ; 2149  MGMT_STATUS_NOT_SUPPORTED : 2150  HAL_STATUS_UNSUPPORTED ; 2151  MGMT_STATUS_INVALID_PARAMS : 2152  HAL_STATUS_INVALID ; 2153  MGMT_STATUS_AUTH_FAILED : 2154  HAL_STATUS_AUTH_FAILURE ; 2155  MGMT_STATUS_NOT_CONNECTED : 2156  HAL_STATUS_REMOTE_DEVICE_DOWN ; 2158  HAL_STATUS_FAILED ; 2160 } } 2162  $mgmt_cÚÃù_çžed_ev’t ( ušt16_t šdex , ušt16_ˆ Ëngth , 2163 cÚ¡ * ·¿m , * u£r_d©a ) 2165 cÚ¡  mgmt_ev_cÚÃù_çžed * ev = ·¿m ; 2166  deviû * dev ; 2168 ià( Ëngth < (* ev )) { 2169 `”rÜ ("ToØsh܈cÚÃù fažedƒv’ˆ(%u by‹s)", Ëngth ); 2173 `DBG (""); 2175 dev = `fšd_deviû (& ev -> addr . bdaddr ); 2176 ià(! dev ) 2185 ià(! dev -> ·œšg ) 2188 `upd©e_deviû_¡©e ( dev , ev -> addr . ty³ , `¡©us_mgmt2h® Óv-> ¡©us ), 2189 çl£ , false, false); 2190 } } 2192  $mgmt_auth_çžed_ev’t ( ušt16_t šdex , ušt16_ˆ Ëngth , 2193 cÚ¡ * ·¿m , * u£r_d©a ) 2195 cÚ¡  mgmt_ev_auth_çžed * ev = ·¿m ; 2196  deviû * dev ; 2198 ià( Ëngth < (* ev )) { 2199 `”rÜ ("ToØsm®Èauth fažed mgmˆev’ˆ(%u by‹s)", Ëngth ); 2203 `DBG (""); 2205 dev = `fšd_deviû (& ev -> addr . bdaddr ); 2206 ià(! dev ) 2209 ià(! dev -> ·œšg ) 2212 `upd©e_deviû_¡©e ( dev , ev -> addr . ty³ , `¡©us_mgmt2h® Óv-> ¡©us ), 2213 çl£ , false, false); 2214 } } 2216  $mgmt_deviû_uÅaœed_ev’t ( ušt16_t šdex , ušt16_ˆ Ëngth , 2217 cÚ¡ * ·¿m , * u£r_d©a ) 2219 cÚ¡  mgmt_ev_deviû_uÅaœed * ev = ·¿m ; 2220  deviû * dev ; 2222 ià( Ëngth < (* ev )) { 2223 `”rÜ ("ToØsm®Èdeviû uÅaœedƒv’ˆ(%u by‹s)", Ëngth ); 2227 `DBG (""); 2231 dev = `fšd_deviû (& ev -> addr . bdaddr ); 2232 ià(! dev ) 2235 `upd©e_deviû_¡©e ( dev , ev -> addr . ty³ , HAL_STATUS_SUCCESS , çl£ , 2236 çl£ , false); 2239 dev -> š_wh™e_li¡ = çl£ ; 2240 } } 2242  $¡Üe_Ék (cÚ¡ bdaddr_t * d¡ , ušt8_t bdaddr_ty³ , boÞ ma¡” , 2243 cÚ¡ ušt8_t * key , ušt8_ˆ key_ty³ , ušt8_ˆ ’c_size , 2244 ušt16_t ediv , ušt64_t ¿nd ) 2246 cÚ¡ * key_s , * keyty³_s , * ’csize_s , * ediv_s , * ¿nd_s ; 2247 GKeyFže * key_fže ; 2248  key_¡r [33]; 2249 gsize Ëngth = 0; 2250  addr [18]; 2251 * d©a ; 2252  i ; 2254 key_fže = `g_key_fže_Ãw (); 2255 ià(! `g_key_fže_lßd_äom_fže ( key_fže , DEVICES_FILE , 0, NULL )) { 2256 `g_key_fže_ä“ ( key_fže ); 2260 `ba2¡r ( d¡ , addr ); 2262 key_s = ma¡” ? "LongTermKey" : "SlaveLongTermKey"; 2263 keyty³_s = ma¡” ? "LongTermKeyType" : "SlaveLongTermKeyType"; 2264 ’csize_s = ma¡” ? "LongTermKeyEncSize" : "SlaveLongTermKeyEncSize"; 2265 ediv_s = ma¡” ? "LongTermKeyEDiv" : "SlaveLongTermKeyEDiv"; 2266 ¿nd_s = ma¡” ? "LongTermKeyRand" : "SlaveLongTermKeyRand"; 2268  i = 0; i < 16; i++) 2269 `¥rštf ( key_¡r + ( i * 2), "%2.2X", key [i]); 2271 `g_key_fže_£t_¡ršg ( key_fže , addr , key_s , key_¡r ); 2273 `g_key_fže_£t_š‹g” ( key_fže , addr , keyty³_s , key_ty³ ); 2275 `g_key_fže_£t_š‹g” ( key_fže , addr , ’csize_s , ’c_size ); 2277 `g_key_fže_£t_š‹g” ( key_fže , addr , ediv_s , ediv ); 2279 `g_key_fže_£t_ušt64 ( key_fže , addr , ¿nd_s , ¿nd ); 2281 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 2282 `g_fže_£t_cÚ‹Ás ( DEVICES_FILE , d©a , Ëngth , NULL ); 2283 `g_ä“ ( d©a ); 2285 `g_key_fže_ä“ ( key_fže ); 2286 } } 2288  $Ãw_lÚg_‹rm_key_ev’t ( ušt16_t šdex , ušt16_ˆ Ëngth , 2289 cÚ¡ * ·¿m , * u£r_d©a ) 2291 cÚ¡  mgmt_ev_Ãw_lÚg_‹rm_key * ev = ·¿m ; 2292  deviû * dev ; 2293  d¡ [18]; 2295 ià( Ëngth < (* ev )) { 2296 `”rÜ ("ToØsm®ÈlÚg”m keyƒv’ˆ(%u by‹s)", Ëngth ); 2300 `ba2¡r (& ev -> key . addr . bdaddr , d¡ ); 2302 `DBG ("new LTK for %sype %uƒnc_size %u store_hint %u", 2303 d¡ , ev -> key . ty³ ,ƒv->key. ’c_size ,ƒv-> ¡Üe_hšt ); 2305 dev = `fšd_deviû (& ev -> key . addr . bdaddr ); 2306 ià(! dev ) 2309 `upd©e_deviû_¡©e ( dev , ev -> key . addr . ty³ , HAL_STATUS_SUCCESS , çl£ , 2310 Œue , !! ev -> ¡Üe_hšt ); 2312 ià( ev -> ¡Üe_hšt ) { 2313 cÚ¡  mgmt_Ék_šfo * key = & ev ->key; 2314 ušt16_t ediv ; 2315 ušt64_t ¿nd ; 2317 ediv = `Ë16_to_ýu ( key ->ediv); 2318 ¿nd = `Ë64_to_ýu ( key ->rand); 2320 `¡Üe_Ék (& key -> addr . bdaddr , key->addr. ty³ , key-> ma¡” , 2321 key -> v® , key-> ty³ , key-> ’c_size , ediv , ¿nd ); 2325 } } 2327  $¡Üe_c¤k ( deviû * dev ) 2329 GKeyFže * key_fže ; 2330  key_¡r [33]; 2331  addr [18]; 2332  i ; 2333 gsize Ëngth = 0; 2334 * d©a ; 2336 `ba2¡r (& dev -> bdaddr , addr ); 2338 key_fže = `g_key_fže_Ãw (); 2339 ià(! `g_key_fže_lßd_äom_fže ( key_fže , DEVICES_FILE , 0, NULL )) { 2340 `g_key_fže_ä“ ( key_fže ); 2344 ià( dev -> v®id_loÿl_c¤k ) { 2345  i = 0; i < 16; i++) 2346 `¥rštf ( key_¡r + ( i * 2), "%2.2X", 2347 dev -> loÿl_c¤k [ i ]); 2349 `g_key_fže_£t_¡ršg ( key_fže , addr , "LoÿlCSRK", key_¡r ); 2352 ià( dev -> v®id_»mÙe_c¤k ) { 2353  i = 0; i < 16; i++) 2354 `¥rštf ( key_¡r + ( i * 2), "%2.2X", 2355 dev -> »mÙe_c¤k [ i ]); 2357 `g_key_fže_£t_¡ršg ( key_fže , addr , "RemÙeCSRK", key_¡r ); 2360 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 2361 `g_fže_£t_cÚ‹Ás ( DEVICES_FILE , d©a , Ëngth , NULL ); 2362 `g_ä“ ( d©a ); 2364 `g_key_fže_ä“ ( key_fže ); 2365 } } 2367  $Ãw_c¤k_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 2368 cÚ¡ * ·¿m , * u£r_d©a ) 2370 cÚ¡  mgmt_ev_Ãw_c¤k * ev = ·¿m ; 2371  deviû * dev ; 2372  d¡ [18]; 2374 ià( Ëngth < (* ev )) { 2375 `”rÜ ("ToØsm®Èc¤kƒv’ˆ(%u by‹s)", Ëngth ); 2379 `ba2¡r (& ev -> key . addr . bdaddr , d¡ ); 2380 dev = `g‘_deviû (& ev -> key . addr . bdaddr ,ƒv->key.addr. ty³ ); 2381 ià(! dev ) 2384  ev -> key . ma¡” ) { 2386 `memýy ( dev -> loÿl_c¤k , ev -> key . v® , 16); 2387 dev -> loÿl_sign_út = 0; 2388 dev -> v®id_loÿl_c¤k = Œue ; 2391 `memýy ( dev -> »mÙe_c¤k , ev -> key . v® , 16); 2392 dev -> »mÙe_sign_út = 0; 2393 dev -> v®id_»mÙe_c¤k = Œue ; 2396 `”rÜ ("UnknowÀCSRK keyy³ 02%02x", ev -> key . ma¡” ); 2400 `upd©e_deviû_¡©e ( dev , ev -> key . addr . ty³ , HAL_STATUS_SUCCESS , çl£ , 2401 Œue , !! ev -> ¡Üe_hšt ); 2403 ià( ev -> ¡Üe_hšt ) 2404 `¡Üe_c¤k ( dev ); 2405 } } 2407  $¡Üe_œk ( deviû * dev , cÚ¡ ušt8_t * v® ) 2409 GKeyFže * key_fže ; 2410  key_¡r [33]; 2411  addr [18]; 2412  i ; 2413 gsize Ëngth = 0; 2414 * d©a ; 2416 `ba2¡r (& dev -> bdaddr , addr ); 2418 key_fže = `g_key_fže_Ãw (); 2419 ià(! `g_key_fže_lßd_äom_fže ( key_fže , DEVICES_FILE , 0, NULL )) { 2420 `g_key_fže_ä“ ( key_fže ); 2424  i = 0; i < 16; i++) 2425 `¥rštf ( key_¡r + ( i * 2), "%2.2X", v® [i]); 2427 `g_key_fže_£t_¡ršg ( key_fže , addr , "Id’t™yResÞvšgKey", key_¡r ); 2429 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 2430 `g_fže_£t_cÚ‹Ás ( DEVICES_FILE , d©a , Ëngth , NULL ); 2431 `g_ä“ ( d©a ); 2433 `g_key_fže_ä“ ( key_fže ); 2434 } } 2436  $Ãw_œk_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 2437 cÚ¡ * ·¿m , * u£r_d©a ) 2439 cÚ¡  mgmt_ev_Ãw_œk * ev = ·¿m ; 2440 cÚ¡  mgmt_addr_šfo * addr = & ev -> key .addr; 2441  deviû * dev ; 2442  d¡ [18], ½a [18]; 2444 ià( Ëngth < (* ev )) { 2445 `”rÜ ("TØsm®ÈNew Irk Ev’ˆ(%u by‹s)", Ëngth ); 2449 `ba2¡r (& ev -> key . addr . bdaddr , d¡ ); 2450 `ba2¡r (& ev -> ½a ,„pa); 2452 `DBG ("Ãw IRK fÜ %s, RPA %s", d¡ , ½a ); 2454 ià(! `bacmp (& ev -> ½a , BDADDR_ANY )) { 2455 dev = `g‘_deviû (& addr -> bdaddr ,‡ddr-> ty³ ); 2456 ià(! dev ) 2459 dev = `fšd_deviû (& addr -> bdaddr ); 2461 ià( dev && dev-> b»dr_·œed ) { 2462 `baýy (& dev -> ½a , & addr -> bdaddr ); 2463 dev -> ½a_ty³ = addr -> ty³ ; 2467 dev = `fšd_deviû (& ev -> ½a ); 2468 ià(! dev ) 2472 `»move_deviû_šfo ( dev , CACHE_FILE ); 2480 `baýy (& dev -> ½a , &dev-> bdaddr ); 2481 dev -> ½a_ty³ = dev-> bdaddr_ty³ ; 2483 `baýy (& dev -> bdaddr , & addr ->bdaddr); 2484 dev -> bdaddr_ty³ = addr -> ty³ ; 2488 `upd©e_deviû_¡©e ( dev , ev -> key . addr . ty³ , HAL_STATUS_SUCCESS , çl£ , 2489 Œue , !! ev -> ¡Üe_hšt ); 2491 ià( ev -> ¡Üe_hšt ) 2492 `¡Üe_œk ( dev , ev -> key . v® ); 2493 } } 2495  $»gi¡”_mgmt_hªdËrs () 2497 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_NEW_SETTINGS , ad­‹r . šdex , 2498 Ãw_£‰šgs_ÿÎback , NULL , NULL); 2500 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_CLASS_OF_DEV_CHANGED , ad­‹r . šdex , 2501 mgmt_dev_þass_chªged_ev’t , NULL , NULL); 2503 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_LOCAL_NAME_CHANGED , ad­‹r . šdex , 2504 mgmt_loÿl_Çme_chªged_ev’t , NULL , NULL); 2506 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_NEW_LINK_KEY , ad­‹r . šdex , 2507 Ãw_lšk_key_ÿÎback , NULL , NULL); 2509 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_PIN_CODE_REQUEST , ad­‹r . šdex , 2510 pš_code_»que¡_ÿÎback , NULL , NULL); 2512 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_USER_CONFIRM_REQUEST , ad­‹r . šdex , 2513 u£r_cÚfœm_»que¡_ÿÎback , NULL , NULL); 2515 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_USER_PASSKEY_REQUEST , ad­‹r . šdex , 2516 u£r_·sskey_»que¡_ÿÎback , NULL , NULL); 2518 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_PASSKEY_NOTIFY , ad­‹r . šdex , 2519 u£r_·sskey_nÙify_ÿÎback , NULL , NULL); 2521 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_DISCOVERING , ad­‹r . šdex , 2522 mgmt_discov”šg_ev’t , NULL , NULL); 2524 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_DEVICE_FOUND , ad­‹r . šdex , 2525 mgmt_deviû_found_ev’t , NULL , NULL); 2527 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_DEVICE_CONNECTED , ad­‹r . šdex , 2528 mgmt_deviû_cÚÃùed_ev’t , NULL , NULL); 2530 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_DEVICE_DISCONNECTED , ad­‹r . šdex , 2531 mgmt_deviû_discÚÃùed_ev’t , NULL , NULL); 2533 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_CONNECT_FAILED , ad­‹r . šdex , 2534 mgmt_cÚÃù_çžed_ev’t , NULL , NULL); 2536 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_AUTH_FAILED , ad­‹r . šdex , 2537 mgmt_auth_çžed_ev’t , NULL , NULL); 2539 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_DEVICE_UNPAIRED , ad­‹r . šdex , 2540 mgmt_deviû_uÅaœed_ev’t , NULL , NULL); 2542 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_NEW_LONG_TERM_KEY , ad­‹r . šdex , 2543 Ãw_lÚg_‹rm_key_ev’t , NULL , NULL); 2545 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_NEW_CSRK , ad­‹r . šdex , 2546 Ãw_c¤k_ÿÎback , NULL , NULL); 2548 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_NEW_IRK , ad­‹r . šdex , Ãw_œk_ÿÎback , 2549 NULL , NULL); 2550 } } 2552  $lßd_lšk_keys_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 2553 cÚ¡ * ·¿m , * u£r_d©a ) 2555 bt_blu‘oÙh_»ady cb = u£r_d©a ; 2556  ”r ; 2558 ià( ¡©us ) { 2559 `”rÜ ("Failedo†oad†ink keys for index %u: %s (0x%02x)", 2560 ad­‹r . šdex , `mgmt_”r¡r ( ¡©us ), status); 2561 ”r = - EIO ; 2562  çžed ; 2565 `DBG ("¡©u %u", ¡©us ); 2567 `cb (0, & ad­‹r . bdaddr ); 2570 çžed : 2571 `cb ( ”r , NULL ); 2572 } } 2574  $lßd_lšk_keys ( GSLi¡ * keys , bt_blu‘oÙh_»ady cb ) 2576  mgmt_ý_lßd_lšk_keys * ý ; 2577  mgmt_lšk_key_šfo * key ; 2578 size_t key_couÁ , ý_size ; 2579  id ; 2581 key_couÁ = `g_¦i¡_Ëngth ( keys ); 2583 `DBG ("key %zu ", key_couÁ ); 2585 ý_size = (* ý è+ ( key_couÁ * (* key )); 2587 ý = `g_m®loc0 ( ý_size ); 2594 ý -> key_couÁ = `ýu_to_Ë16 (key_count); 2596  key = ý -> keys ; key !ð NULL ; key ð `g_¦i¡_Ãxt (keys), key++) 2597 `memýy ( key , keys -> d©a , (*key)); 2599 id = `mgmt_£nd ( mgmt_if , MGMT_OP_LOAD_LINK_KEYS , ad­‹r . šdex , 2600 ý_size , ý , lßd_lšk_keys_com¶‘e , cb , NULL ); 2602 `g_ä“ ( ý ); 2604 ià( id == 0) { 2605 `”rÜ ("Failedo†oad†ink keys"); 2606 `cb (- EIO , NULL ); 2608 } } 2610  $lßd_Ék_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 2611 cÚ¡ * ·¿m , * u£r_d©a ) 2613 ià( ¡©us =ð MGMT_STATUS_SUCCESS ) 2616 `šfo ("FažedØlßd LTKs: % (0x%02x)", `mgmt_”r¡r ( ¡©us ), status); 2617 } } 2619  $lßd_Éks ( GSLi¡ * Éks ) 2621  mgmt_ý_lßd_lÚg_‹rm_keys * ý ; 2622  mgmt_Ék_šfo * Ék ; 2623 size_t Ék_couÁ , ý_size ; 2624 GSLi¡ * l ; 2626 Ék_couÁ = `g_¦i¡_Ëngth ( Éks ); 2628 `DBG ("Ék %zu", Ék_couÁ ); 2630 ý_size = (* ý è+ ( Ék_couÁ * (* Ék )); 2632 ý = `g_m®loc0 ( ý_size ); 2639 ý -> key_couÁ = `ýu_to_Ë16 ( Ék_couÁ ); 2641  l = Éks , Ék = ý -> keys ;† !ð NULL ;† = `g_¦i¡_Ãxt (l),†tk++) 2642 `memýy ( Ék , l -> d©a , (*ltk)); 2644 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_LOAD_LONG_TERM_KEYS , ad­‹r . šdex , 2645 ý_size , ý , lßd_Ék_com¶‘e , NULL , NULL) == 0) 2646 `”rÜ ("Failedo†oad LTKs"); 2648 `g_ä“ ( ý ); 2649 } } 2651  $lßd_œk_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 2652 cÚ¡ * ·¿m , * u£r_d©a ) 2654 ià( ¡©us =ð MGMT_STATUS_SUCCESS ) 2657 `šfo ("FažedØlßd IRKs: % (0x%02x)", `mgmt_”r¡r ( ¡©us ), status); 2658 } } 2660  $lßd_œks ( GSLi¡ * œks ) 2662  mgmt_ý_lßd_œks * ý ; 2663  mgmt_œk_šfo * œk ; 2664 size_t œk_couÁ , ý_size ; 2665 GSLi¡ * l ; 2667 œk_couÁ = `g_¦i¡_Ëngth ( œks ); 2669 `DBG ("œk %zu", œk_couÁ ); 2671 ý_size = (* ý è+ ( œk_couÁ * (* œk )); 2673 ý = `g_m®loc0 ( ý_size ); 2675 ý -> œk_couÁ = `ýu_to_Ë16 (irk_count); 2677  l = œks , œk = ý ->œks;† !ð NULL ;† = `g_¦i¡_Ãxt (l), irk++) 2678 `memýy ( œk , œks -> d©a , (*irk)); 2680 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_LOAD_IRKS , ad­‹r . šdex , ý_size , ý , 2681 lßd_œk_com¶‘e , NULL , NULL) == 0) 2682 `”rÜ ("Failedo†oad IRKs"); 2684 `g_ä“ ( ý ); 2685 } } 2687  ušt8_t $g‘_ad­‹r_uuids () 2689  h®_ev_ad­‹r_´Ýs_chªged * ev ; 2690 GSLi¡ * li¡ = ad­‹r . uuids ; 2691 size_t uuid_couÁ = `g_¦i¡_Ëngth ( li¡ ); 2692 size_t Ën = uuid_couÁ * ( ušt128_t ); 2693 ušt8_t buf [ BASELEN_PROP_CHANGED + Ën ]; 2694 ušt8_t * p ; 2696 `mem£t ( buf , 0, (buf)); 2697 ev = (*è buf ; 2699 ev -> num_´Ýs = 1; 2700 ev -> ¡©us = HAL_STATUS_SUCCESS ; 2702 ev -> ´Ýs [0]. ty³ = HAL_PROP_ADAPTER_UUIDS ; 2703 ev -> ´Ýs [0]. Ën =†en; 2704 p = ev -> ´Ýs -> v® ; 2706 ; li¡ ;†i¡ = `g_¦i¡_Ãxt (list)) { 2707 uuid_t * uuid = li¡ -> d©a ; 2709 `memýy ( p , & uuid -> v®ue . uuid128 , ( ušt128_t )); 2711 p +ð( ušt128_t ); 2714 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 2715 HAL_EV_ADAPTER_PROPS_CHANGED , ( buf ), ev ); 2717  HAL_STATUS_SUCCESS ; 2718 } } 2720  $»move_uuid_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 2721 cÚ¡ * ·¿m , * u£r_d©a ) 2723 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 2724 `”rÜ ("FažedØ»movUUID: % (0x%02x)", `mgmt_”r¡r ( ¡©us ), 2725 ¡©us ); 2729 `mgmt_dev_þass_chªged_ev’t ( ad­‹r . šdex , Ëngth , ·¿m , NULL ); 2731 `g‘_ad­‹r_uuids (); 2732 } } 2734  $»move_uuid ( uuid_t * uuid ) 2736 ušt128_t ušt128 ; 2737  mgmt_ý_»move_uuid ý ; 2739 `Áoh128 (( ušt128_t *è uuid -> v®ue . uuid128 . d©a , & ušt128 ); 2740 `htob128 (& ušt128 , ( ušt128_t *è ý . uuid ); 2742 `mgmt_£nd ( mgmt_if , MGMT_OP_REMOVE_UUID , ad­‹r . šdex , ( ý ), &cp, 2743 »move_uuid_com¶‘e , NULL , NULL); 2744 } } 2746  $add_uuid_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 2747 cÚ¡ * ·¿m , * u£r_d©a ) 2749 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 2750 `”rÜ ("FažedØadd UUID: % (0x%02x)", `mgmt_”r¡r ( ¡©us ), 2751 ¡©us ); 2755 `mgmt_dev_þass_chªged_ev’t ( ad­‹r . šdex , Ëngth , ·¿m , NULL ); 2757 `g‘_ad­‹r_uuids (); 2758 } } 2760  $add_uuid ( ušt8_t svc_hšt , uuid_t * uuid ) 2762 ušt128_t ušt128 ; 2763  mgmt_ý_add_uuid ý ; 2765 `Áoh128 (( ušt128_t *è uuid -> v®ue . uuid128 . d©a , & ušt128 ); 2766 `htob128 (& ušt128 , ( ušt128_t *è ý . uuid ); 2768 ý . svc_hšt = svc_hint; 2770 `mgmt_£nd ( mgmt_if , MGMT_OP_ADD_UUID , ad­‹r . šdex , ( ý ), &cp, 2771 add_uuid_com¶‘e , NULL , NULL); 2772 } } 2774  $bt_ad­‹r_add_»cÜd ( sdp_»cÜd_t * »c , ušt8_t svc_hšt ) 2776 uuid_t * uuid ; 2778 uuid = `sdp_uuid_to_uuid128 (& »c -> svþass ); 2780 ià( `g_¦i¡_fšd_cu¡om ( ad­‹r . uuids , uuid , sdp_uuid_cmp )) { 2781  uuid_¡r [32]; 2783 `sdp_uuid2¡º ( uuid , uuid_¡r , (uuid_str)); 2784 `DBG ("UUID % ®»ady‡dded", uuid_¡r ); 2786 `bt_ä“ ( uuid ); 2787  - EALREADY ; 2790 ad­‹r . uuids = `g_¦i¡_´•’d ×d­‹r.uuids, uuid ); 2792 `add_uuid ( svc_hšt , uuid ); 2794  `add_»cÜd_to_£rv” (& ad­‹r . bdaddr , »c ); 2795 } } 2797  $bt_ad­‹r_»move_»cÜd ( ušt32_t hªdË ) 2799 sdp_»cÜd_t * »c ; 2800 GSLi¡ * uuid_found ; 2802 »c = `sdp_»cÜd_fšd ( hªdË ); 2803 ià(! »c ) 2806 uuid_found = `g_¦i¡_fšd_cu¡om ( ad­‹r . uuids , & »c -> svþass , 2807 sdp_uuid_cmp ); 2808 ià( uuid_found ) { 2809 uuid_t * uuid = uuid_found -> d©a ; 2811 `»move_uuid ( uuid ); 2813 ad­‹r . uuids = `g_¦i¡_»move ×d­‹r.uuids, uuid ); 2815 `ä“ ( uuid ); 2818 `»move_»cÜd_äom_£rv” ( hªdË ); 2819 } } 2821  $£t_mode_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 2822 cÚ¡ * ·¿m , * u£r_d©a ) 2824 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 2825 `”rÜ ("Failedo set mode: %s (0x%02x)", 2826 `mgmt_”r¡r ( ¡©us ), status); 2835 `Ãw_£‰šgs_ÿÎback ( ad­‹r . šdex , Ëngth , ·¿m , NULL ); 2836 } } 2838  boÞ $£t_mode ( ušt16_t Ýcode , ušt8_t mode ) 2840  mgmt_mode ý ; 2842 `mem£t (& ý , 0, (cp)); 2843 ý . v® = mode ; 2845 `DBG ("Ýcode=0x%x mode=0x%x", Ýcode , mode ); 2847 ià( `mgmt_£nd ( mgmt_if , Ýcode , ad­‹r . šdex , ( ý ), &cp, 2848 £t_mode_com¶‘e , NULL , NULL) > 0) 2849  Œue ; 2851 `”rÜ ("Failedo set mode"); 2853  çl£ ; 2854 } } 2856  $£t_io_ÿ·bž™y () 2858  mgmt_ý_£t_io_ÿ·bž™y ý ; 2860 `mem£t (& ý , 0, (cp)); 2861 ý . io_ÿ·bž™y = DEFAULT_IO_CAPABILITY ; 2863 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_SET_IO_CAPABILITY , ad­‹r . šdex , 2864 ( ý ), &ý, NULL , NULL, NULL) == 0) 2865 `”rÜ ("Failedo set IO capability"); 2866 } } 2868  $£t_deviû_id () 2870  mgmt_ý_£t_deviû_id ý ; 2872 `mem£t (& ý , 0, (cp)); 2873 ý . sourû = `ýu_to_Ë16 ( `bt_cÚfig_g‘_²p_sourû ()); 2874 ý . v’dÜ = `ýu_to_Ë16 ( `bt_cÚfig_g‘_²p_v’dÜ ()); 2875 ý . ´oduù = `ýu_to_Ë16 ( `bt_cÚfig_g‘_²p_´oduù ()); 2876 ý . v”siÚ = `ýu_to_Ë16 ( `bt_cÚfig_g‘_²p_v”siÚ ()); 2878 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_SET_DEVICE_ID , ad­‹r . šdex , 2879 ( ý ), &ý, NULL , NULL, NULL) == 0) 2880 `”rÜ ("Failedo set device id"); 2882 `»gi¡”_deviû_id ( `bt_cÚfig_g‘_²p_sourû (), 2883 `bt_cÚfig_g‘_²p_v’dÜ (), 2884 `bt_cÚfig_g‘_²p_´oduù (), 2885 `bt_cÚfig_g‘_²p_v”siÚ ()); 2887 `bt_ad­‹r_add_»cÜd ( `sdp_»cÜd_fšd (0x10000), 0x00); 2888 } } 2890  $£t_ad­‹r_Çme_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 2891 cÚ¡ * ·¿m , * u£r_d©a ) 2893 cÚ¡  mgmt_ý_£t_loÿl_Çme * ½ = ·¿m ; 2895 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 2896 `”rÜ ("FažedØ£ˆÇme: % (0x%02x)", `mgmt_”r¡r ( ¡©us ), 2897 ¡©us ); 2901 `ad­‹r_£t_Çme ( ½ -> Çme ); 2902 } } 2904  ušt8_t $£t_ad­‹r_Çme (cÚ¡ ušt8_t * Çme , ušt16_t Ën ) 2906  mgmt_ý_£t_loÿl_Çme ý ; 2908 `mem£t (& ý , 0, (cp)); 2909 `memýy ( ý . Çme ,‚ame, Ën ); 2911 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_SET_LOCAL_NAME , ad­‹r . šdex , 2912 ( ý ), &ý, £t_ad­‹r_Çme_com¶‘e , 2913 NULL , NULL) > 0) 2914  HAL_STATUS_SUCCESS ; 2916 `”rÜ ("Failedo set‚ame"); 2918  HAL_STATUS_FAILED ; 2919 } } 2921  ušt8_t $£t_ad­‹r_discov”abË_timeout (cÚ¡ * buf , ušt16_t Ën ) 2923 cÚ¡ ušt32_t * timeout = buf ; 2925 ià( Ën !ð(* timeout )) { 2926 `”rÜ ("Invalid set discimeout size (%u bytes),erminating", 2927 Ën ); 2928 `¿i£ ( SIGTERM ); 2929  HAL_STATUS_FAILED ; 2938 `memýy (& ad­‹r . discov”abË_timeout , timeout , ( ušt32_t )); 2940 `¡Üe_ad­‹r_cÚfig (); 2942 `£nd_ad­‹r_´Ý”ty ( HAL_PROP_ADAPTER_DISC_TIMEOUT , 2943 ( ad­‹r . discov”abË_timeout ), 2944 & ad­‹r . discov”abË_timeout ); 2946  HAL_STATUS_SUCCESS ; 2947 } } 2949  $þ—r_uuids () 2951  mgmt_ý_»move_uuid ý ; 2953 `mem£t (& ý , 0, (cp)); 2955 `mgmt_£nd ( mgmt_if , MGMT_OP_REMOVE_UUID , ad­‹r . šdex , ( ý ), 2956 & ý , NULL , NULL, NULL); 2957 } } 2959  deviû * $ü—‹_deviû_äom_šfo ( GKeyFže * key_fže , 2960 cÚ¡ * ³” ) 2962  deviû * dev ; 2963 ušt8_t ty³ ; 2964 bdaddr_t bdaddr ; 2965 ** uuids ; 2966 * ¡r ; 2969 ty³ = `g_key_fže_g‘_š‹g” ( key_fže , ³” , "Add»ssTy³", NULL ); 2971 `¡r2ba ( ³” , & bdaddr ); 2972 dev = `ü—‹_deviû (& bdaddr , ty³ ); 2974 ià( ty³ !ð BDADDR_BREDR ) 2975 dev -> b»dr = `g_key_fže_g‘_boÞ—n ( key_fže , ³” , "BREDR", 2976 NULL ); 2978 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , ³” , "LškKey", NULL ); 2979 ià( ¡r ) { 2980 `g_ä“ ( ¡r ); 2981 dev -> b»dr_·œed = Œue ; 2982 dev -> b»dr_bÚded = Œue ; 2985 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , ³” , "LÚgT”mKey", NULL ); 2986 ià( ¡r ) { 2987 `g_ä“ ( ¡r ); 2988 dev -> Ë_·œed = Œue ; 2989 dev -> Ë_bÚded = Œue ; 2992 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , ³” , "SÏveLÚgT”mKey", NULL ); 2993 ià( ¡r ) { 2994 `g_ä“ ( ¡r ); 2995 dev -> Ë_·œed = Œue ; 2996 dev -> Ë_bÚded = Œue ; 2999 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , ³” , "LoÿlCSRK", NULL ); 3000 ià( ¡r ) { 3001  i ; 3003 dev -> v®id_loÿl_c¤k = Œue ; 3004  i = 0; i < 16; i++) 3005 `ssÿnf ( ¡r + ( i * 2), "%02hhX", & dev -> loÿl_c¤k [i]); 3007 `g_ä“ ( ¡r ); 3009 dev -> loÿl_sign_út = `g_key_fže_g‘_š‹g” ( key_fže , ³” , 3010 "LoÿlCSRKSignCouÁ”", NULL ); 3013 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , ³” , "RemÙeCSRK", NULL ); 3014 ià( ¡r ) { 3015  i ; 3017 dev -> v®id_»mÙe_c¤k = Œue ; 3018  i = 0; i < 16; i++) 3019 `ssÿnf ( ¡r + ( i * 2), "%02hhX", & dev -> »mÙe_c¤k [i]); 3021 `g_ä“ ( ¡r ); 3023 dev -> »mÙe_sign_út = `g_key_fže_g‘_š‹g” ( key_fže , ³” , 3024 "RemÙeCSRKSignCouÁ”", NULL ); 3027 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , ³” , "G©tCCC", NULL ); 3028 ià( ¡r ) { 3029 dev -> g©t_ccc = `©oi ( ¡r ); 3030 `g_ä“ ( ¡r ); 3033 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , ³” , "Name", NULL ); 3034 ià( ¡r ) { 3035 `g_ä“ ( dev -> Çme ); 3036 dev -> Çme = ¡r ; 3039 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , ³” , "Fr›ndlyName", NULL ); 3040 ià( ¡r ) { 3041 `g_ä“ ( dev -> ä›ndly_Çme ); 3042 dev -> ä›ndly_Çme = ¡r ; 3045 dev -> þass = `g_key_fže_g‘_š‹g” ( key_fže , ³” , "CÏss", NULL ); 3047 ià( dev -> b»dr ) 3048 dev -> b»dr_£’ = `g_key_fže_g‘_š‹g” ( key_fže , ³” , 3050 NULL ); 3052 dev -> Ë_£’ = `g_key_fže_g‘_š‹g” ( key_fže , ³” , 3053 "Time¡amp", NULL ); 3055 uuids = `g_key_fže_g‘_¡ršg_li¡ ( key_fže , ³” , "S”viûs", NULL , 3056 NULL ); 3057 ià( uuids ) { 3058 ** uuid ; 3060  uuid = uuids ; *uuid; uuid++) { 3061 ušt8_t * u = `g_m®loc0 (16); 3062  i ; 3064  i = 0; i < 16; i++) 3065 `ssÿnf ((* uuid è+ ( i * 2), "%02hhX", & u [i]); 3067 dev -> uuids = `g_¦i¡_­³nd (dev->uuids, u ); 3070 `g_¡rä“v ( uuids ); 3073  dev ; 3074 } } 3076  mgmt_lšk_key_šfo * $g‘_key_šfo ( GKeyFže * key_fže , 3077 cÚ¡ * ³” ) 3079  mgmt_lšk_key_šfo * šfo = NULL ; 3080 * ¡r ; 3081  i ; 3083 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , ³” , "LškKey", NULL ); 3084 ià(! ¡r || `¡¾’ (str) != 32) 3085  çžed ; 3087 šfo = `g_Ãw0 ( mgmt_lšk_key_šfo , 1); 3089 `¡r2ba ( ³” , & šfo -> addr . bdaddr ); 3091  i = 0; i < ( šfo -> v® ); i++) 3092 `ssÿnf ( ¡r + ( i * 2), "%02hhX", & šfo -> v® [i]); 3094 šfo -> ty³ = `g_key_fže_g‘_š‹g” ( key_fže , ³” , "LinkKeyType", 3095 NULL ); 3096 šfo -> pš_Ën = `g_key_fže_g‘_š‹g” ( key_fže , ³” , 3097 "LškKeyPšL’gth", NULL ); 3099 çžed : 3100 `g_ä“ ( ¡r ); 3102  šfo ; 3103 } } 3105  mgmt_Ék_šfo * $g‘_Ék_šfo ( GKeyFže * key_fže , cÚ¡ * ³” , 3106 boÞ ma¡” ) 3108 cÚ¡ * key_s , * keyty³_s , * ’csize_s , * ediv_s , * ¿nd_s ; 3109  mgmt_Ék_šfo * šfo = NULL ; 3110 * key ; 3111  i ; 3113 key_s = ma¡” ? "LongTermKey" : "SlaveLongTermKey"; 3114 keyty³_s = ma¡” ? "LongTermKeyType" : "SlaveLongTermKeyType"; 3115 ’csize_s = ma¡” ? "LongTermKeyEncSize" : "SlaveLongTermKeyEncSize"; 3116 ediv_s = ma¡” ? "LongTermKeyEDiv" : "SlaveLongTermKeyEDiv"; 3117 ¿nd_s = ma¡” ? "LongTermKeyRand" : "SlaveLongTermKeyRand"; 3119 key = `g_key_fže_g‘_¡ršg ( key_fže , ³” , key_s , NULL ); 3120 ià(! key || `¡¾’ (key) != 32) 3121  çžed ; 3123 šfo = `g_Ãw0 ( mgmt_Ék_šfo , 1); 3125 `¡r2ba ( ³” , & šfo -> addr . bdaddr ); 3127 šfo -> addr . ty³ = `g_key_fže_g‘_š‹g” ( key_fže , ³” , "AddressType", 3128 NULL ); 3130  i = 0; i < ( šfo -> v® ); i++) 3131 `ssÿnf ( key + ( i * 2), "%02hhX", & šfo -> v® [i]); 3133 šfo -> ty³ = `g_key_fže_g‘_š‹g” ( key_fže , ³” , keyty³_s , NULL ); 3135 šfo -> ’c_size = `g_key_fže_g‘_š‹g” ( key_fže , ³” , ’csize_s , 3136 NULL ); 3138 šfo -> ¿nd = `g_key_fže_g‘_ušt64 ( key_fže , ³” , ¿nd_s , NULL ); 3139 šfo -> ¿nd = `ýu_to_Ë64 (info->rand); 3141 šfo -> ediv = `g_key_fže_g‘_š‹g” ( key_fže , ³” , ediv_s , NULL ); 3142 šfo -> ediv = `ýu_to_Ë16 (info->ediv); 3144 šfo -> ma¡” = master; 3146 çžed : 3147 `g_ä“ ( key ); 3149  šfo ; 3150 } } 3152  mgmt_œk_šfo * $g‘_œk_šfo ( GKeyFže * key_fže , cÚ¡ * ³” ) 3154  mgmt_œk_šfo * šfo = NULL ; 3155  i ; 3156 * ¡r ; 3158 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , ³” , "IdentityResolvingKey", 3159 NULL ); 3160 ià(! ¡r || `¡¾’ (str) != 32) 3161  çžed ; 3163 šfo = `g_Ãw0 ( mgmt_œk_šfo , 1); 3165 `¡r2ba ( ³” , & šfo -> addr . bdaddr ); 3167 šfo -> addr . ty³ = `g_key_fže_g‘_š‹g” ( key_fže , ³” , "AddressType", 3168 NULL ); 3170  i = 0; i < ( šfo -> v® ); i++) 3171 `ssÿnf ( ¡r + ( i * 2), "%02hhX", & šfo -> v® [i]); 3173 çžed : 3174 `g_ä“ ( ¡r ); 3176  šfo ; 3177 } } 3179  time_t $deviû_time¡amp (cÚ¡  deviû * dev ) 3181 ià( dev -> b»dr && dev-> Ë ) { 3182 ià( dev -> Ë_£’ > dev-> b»dr_£’ ) 3183  dev -> Ë_£’ ; 3185  dev -> b»dr_£’ ; 3188 ià( dev -> b»dr ) 3189  dev -> b»dr_£’ ; 3191  dev -> Ë_£’ ; 3192 } } 3194  $deviû_time¡amp_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 3196 cÚ¡  deviû * deva = a ; 3197 cÚ¡  deviû * devb = b ; 3199  `deviû_time¡amp ( deva è< deviû_time¡amp( devb ); 3200 } } 3202  $lßd_deviûs_ÿche () 3204 GKeyFže * key_fže ; 3205 gch¬ ** devs ; 3206 gsize Ën = 0; 3207  i ; 3209 key_fže = `g_key_fže_Ãw (); 3211 `g_key_fže_lßd_äom_fže ( key_fže , CACHE_FILE , 0, NULL ); 3213 devs = `g_key_fže_g‘_groups ( key_fže , & Ën ); 3215  i = 0; i < Ën ; i++) { 3216  deviû * dev ; 3218 dev = `ü—‹_deviû_äom_šfo ( key_fže , devs [ i ]); 3219 ÿched_deviûs = `g_¦i¡_´•’d (ÿched_deviûs, dev ); 3222 ÿched_deviûs = `g_¦i¡_sÜt (ÿched_deviûs, deviû_time¡amp_cmp ); 3224 `g_¡rä“v ( devs ); 3225 `g_key_fže_ä“ ( key_fže ); 3226 } } 3228  $lßd_deviûs_šfo ( bt_blu‘oÙh_»ady cb ) 3230 GKeyFže * key_fže ; 3231 gch¬ ** devs ; 3232 gsize Ën = 0; 3233  i ; 3234 GSLi¡ * keys = NULL ; 3235 GSLi¡ * Éks = NULL ; 3236 GSLi¡ * œks = NULL ; 3238 key_fže = `g_key_fže_Ãw (); 3240 `g_key_fže_lßd_äom_fže ( key_fže , DEVICES_FILE , 0, NULL ); 3242 devs = `g_key_fže_g‘_groups ( key_fže , & Ën ); 3244  i = 0; i < Ën ; i++) { 3245  mgmt_lšk_key_šfo * key_šfo ; 3246  mgmt_Ék_šfo * Ék_šfo ; 3247  mgmt_œk_šfo * œk_šfo ; 3248  mgmt_Ék_šfo * ¦ave_Ék_šfo ; 3249  deviû * dev ; 3251 key_šfo = `g‘_key_šfo ( key_fže , devs [ i ]); 3252 œk_šfo = `g‘_œk_šfo ( key_fže , devs [ i ]); 3253 Ék_šfo = `g‘_Ék_šfo ( key_fže , devs [ i ], Œue ); 3254 ¦ave_Ék_šfo = `g‘_Ék_šfo ( key_fže , devs [ i ], çl£ ); 3256 ià(! key_šfo && ! Ék_šfo && ! ¦ave_Ék_šfo ) { 3257 `”rÜ ("FažedØlßd key fÜ %s, skpšg", devs [ i ]); 3262 ià( key_šfo ) 3263 keys = `g_¦i¡_´•’d (keys, key_šfo ); 3265 ià( œk_šfo ) 3266 œks = `g_¦i¡_´•’d (œks, œk_šfo ); 3268 ià( Ék_šfo ) 3269 Éks = `g_¦i¡_´•’d Ötks, Ék_šfo ); 3271 ià( ¦ave_Ék_šfo ) 3272 Éks = `g_¦i¡_´•’d Ötks, ¦ave_Ék_šfo ); 3274 dev = `ü—‹_deviû_äom_šfo ( key_fže , devs [ i ]); 3276 bÚded_deviûs = `g_¦i¡_´•’d (bÚded_deviûs, dev ); 3279 `lßd_Éks ( Éks ); 3280 `g_¦i¡_ä“_fuÎ ( Éks , g_ä“ ); 3282 `lßd_œks ( œks ); 3283 `g_¦i¡_ä“_fuÎ ( œks , g_ä“ ); 3285 `lßd_lšk_keys ( keys , cb ); 3286 `g_¦i¡_ä“_fuÎ ( keys , g_ä“ ); 3288 `g_¡rä“v ( devs ); 3289 `g_key_fže_ä“ ( key_fže ); 3290 } } 3292  $£t_ad­‹r_þass () 3294  mgmt_ý_£t_dev_þass ý ; 3296 `mem£t (& ý , 0, (cp)); 3302 ý . majÜ = ADAPTER_MAJOR_CLASS & 0x1f; 3303 ý . mšÜ = ADAPTER_MINOR_CLASS << 2; 3305 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_SET_DEV_CLASS , ad­‹r . šdex , ( ý ), 3306 & ý , NULL , NULL, NULL) > 0) 3309 `”rÜ ("Failedo set class of device"); 3310 } } 3312  sdp_»cÜd_t * $mps_»cÜd () 3314 sdp_d©a_t * mpsd_ã©u»s , * mpmd_ã©u»s , * d•’d’c›s ; 3315 sdp_li¡_t * svþass_id , * pf£q , * roÙ ; 3316 uuid_t roÙ_uuid , svþass_uuid ; 3317 sdp_´ofže_desc_t ´ofže ; 3318 sdp_»cÜd_t * »cÜd ; 3319 ušt64_t mpsd_ã© , mpmd_ã© ; 3320 ušt16_t d•s ; 3322 »cÜd = `sdp_»cÜd_®loc (); 3323 ià(! »cÜd ) 3324  NULL ; 3326 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 3327 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 3328 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 3330 `sdp_uuid16_ü—‹ (& svþass_uuid , MPS_SVCLASS_ID ); 3331 svþass_id = `sdp_li¡_­³nd ( NULL , & svþass_uuid ); 3332 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 3334 `sdp_uuid16_ü—‹ (& ´ofže . uuid , MPS_PROFILE_ID ); 3335 ´ofže . v”siÚ = 0x0100; 3336 pf£q = `sdp_li¡_­³nd ( NULL , & ´ofže ); 3337 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 3339 mpsd_ã© = MPS_DEFAULT_MPSD ; 3340 mpmd_ã© = MPS_DEFAULT_MPMD ; 3343 ià( çl£ ) { 3344 mpsd_ã© &ð MPS_MPSD_HFP_AG_DEP ; 3345 mpmd_ã© &ð MPS_MPMD_HFP_AG_DEP ; 3348 mpsd_ã©u»s = `sdp_d©a_®loc ( SDP_UINT64 , & mpsd_ã© ); 3349 `sdp_©Œ_add ( »cÜd , SDP_ATTR_MPSD_SCENARIOS , mpsd_ã©u»s ); 3351 mpmd_ã©u»s = `sdp_d©a_®loc ( SDP_UINT64 , & mpmd_ã© ); 3352 `sdp_©Œ_add ( »cÜd , SDP_ATTR_MPMD_SCENARIOS , mpmd_ã©u»s ); 3354 d•s = MPS_DEFAULT_DEPS ; 3355 d•’d’c›s = `sdp_d©a_®loc ( SDP_UINT16 , & d•s ); 3356 `sdp_©Œ_add ( »cÜd , SDP_ATTR_MPS_DEPENDENCIES , d•’d’c›s ); 3358 `sdp_£t_šfo_©Œ ( »cÜd , "Multi Profile", 0, 0); 3360 `sdp_li¡_ä“ ( pf£q , NULL ); 3361 `sdp_li¡_ä“ ( roÙ , NULL ); 3362 `sdp_li¡_ä“ ( svþass_id , NULL ); 3364  »cÜd ; 3365 } } 3367  $add_mps_»cÜd () 3369 sdp_»cÜd_t * »c ; 3371 »c = `mps_»cÜd (); 3372 ià(! »c ) { 3373 `”rÜ ("Failedo‡llocate MPS„ecord"); 3377 ià( `bt_ad­‹r_add_»cÜd ( »c , 0) < 0) { 3378 `”rÜ ("Failedo„egister MPS„ecord"); 3379 `sdp_»cÜd_ä“ ( »c ); 3381 } } 3383  $þ—r_auto_cÚÃù_li¡_com¶‘e ( ušt8_t ¡©us , 3384 ušt16_t Ëngth , 3385 cÚ¡ * ·¿m , 3386 * u£r_d©a ) 3388 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) 3389 `”rÜ ("Failedo clear‡uto connect†ist: %s (0x%02x)", 3390 `mgmt_”r¡r ( ¡©us ), status); 3391 } } 3393  $þ—r_auto_cÚÃù_li¡ () 3395  mgmt_ý_»move_deviû ý ; 3397 ià(! k”Ãl_cÚn_cÚŒÞ ) 3400 `mem£t (& ý , 0, (cp)); 3402 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_REMOVE_DEVICE , ad­‹r . šdex , ( ý ), 3403 & ý , þ—r_auto_cÚÃù_li¡_com¶‘e , NULL , NULL) > 0) 3406 `”rÜ ("Could‚ot clear‡uto connect†ist"); 3407 } } 3409  $»ad_šfo_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 3410 cÚ¡ * ·¿m , * u£r_d©a ) 3412 cÚ¡  mgmt_½_»ad_šfo * ½ = ·¿m ; 3413 bt_blu‘oÙh_»ady cb = u£r_d©a ; 3414 ušt32_t missšg_£‰šgs ; 3415  ”r ; 3417 `DBG (""); 3419 ià( ¡©us ) { 3420 `”rÜ ("Failedo„ead info for index %u: %s (0x%02x)", 3421 ad­‹r . šdex , `mgmt_”r¡r ( ¡©us ), status); 3422 ”r = - EIO ; 3423  çžed ; 3426 ià( Ëngth < (* ½ )) { 3427 `”rÜ ("Too small„ead info complete„esponse"); 3428 ”r = - EIO ; 3429  çžed ; 3432 ià(! `bacmp (& ½ -> bdaddr , BDADDR_ANY )) { 3433 `”rÜ ("No Bluetooth‡ddress"); 3434 ”r = - ENODEV ; 3435  çžed ; 3438 `lßd_ad­‹r_cÚfig (); 3440 ià(! `bacmp (& ad­‹r . bdaddr , BDADDR_ANY )) { 3441 `baýy (& ad­‹r . bdaddr , & ½ ->bdaddr); 3442 `¡Üe_ad­‹r_cÚfig (); 3443 } ià( `bacmp (& ad­‹r . bdaddr , & ½ ->bdaddr)) { 3444 `”rÜ ("Bluetooth‡ddress mismatch"); 3445 ”r = - ENODEV ; 3446  çžed ; 3449 ià( ad­‹r . Çme && `g_¡rcmp0 ×d­‹r.Çme, (cÚ¡ *è ½ ->name)) 3450 `£t_ad­‹r_Çme (( ušt8_t *) ad­‹r . Çme , `¡¾’ (adapter.name)); 3452 `£t_ad­‹r_þass (); 3455 ad­‹r . dev_þass = ½ ->dev_class[0] | (rp->dev_class[1] << 8) | 3456 ( ½ -> dev_þass [2] << 16); 3458 ad­‹r . suµÜ‹d_£‰šgs = `Ë32_to_ýu ( ½ ->supported_settings); 3459 ad­‹r . cu¼’t_£‰šgs = `Ë32_to_ýu ( ½ ->current_settings); 3462 `»gi¡”_mgmt_hªdËrs (); 3464 `þ—r_uuids (); 3465 `þ—r_auto_cÚÃù_li¡ (); 3467 `£t_io_ÿ·bž™y (); 3468 `£t_deviû_id (); 3469 `add_mps_»cÜd (); 3471 missšg_£‰šgs = ad­‹r . cu¼’t_£‰šgs ^ 3472 ad­‹r . suµÜ‹d_£‰šgs ; 3474 ià( missšg_£‰šgs & MGMT_SETTING_SSP ) 3475 `£t_mode ( MGMT_OP_SET_SSP , 0x01); 3477 ià( missšg_£‰šgs & MGMT_SETTING_SECURE_CONN ) 3478 `£t_mode ( MGMT_OP_SET_SECURE_CONN , 0x01); 3480 ià( missšg_£‰šgs & MGMT_SETTING_BONDABLE ) 3481 `£t_mode ( MGMT_OP_SET_BONDABLE , 0x01); 3483 `lßd_deviûs_šfo ( cb ); 3484 `lßd_deviûs_ÿche (); 3488 çžed : 3489 `cb ( ”r , NULL ); 3490 } } 3492  $mgmt_šdex_added_ev’t ( ušt16_t šdex , ušt16_ˆ Ëngth , 3493 cÚ¡ * ·¿m , * u£r_d©a ) 3495 bt_blu‘oÙh_»ady cb = u£r_d©a ; 3497 `DBG ("šdex %u", šdex ); 3499 ià( ad­‹r . šdex !ð MGMT_INDEX_NONE ) { 3500 `DBG ("skƒv’ˆfÜ index %u", šdex ); 3504 ià( ÝtiÚ_šdex !ð MGMT_INDEX_NONE && o±iÚ_šdex !ð šdex ) { 3505 `DBG ("skƒv’ˆfÜ index %u (ÝtiÚ %u)", šdex , ÝtiÚ_šdex ); 3509 ad­‹r . šdex = index; 3511 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_READ_INFO , šdex , 0, NULL , 3512 »ad_šfo_com¶‘e , cb , NULL ) == 0) { 3513 `cb (- EIO , NULL ); 3516 } } 3518  $mgmt_šdex_»moved_ev’t ( ušt16_t šdex , ušt16_ˆ Ëngth , 3519 cÚ¡ * ·¿m , * u£r_d©a ) 3521 `DBG ("šdex %u", šdex ); 3523 ià( šdex !ð ad­‹r .index) 3526 `”rÜ ("Adapter was„emoved. Exiting."); 3527 `¿i£ ( SIGTERM ); 3528 } } 3530  $»ad_šdex_li¡_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 3531 cÚ¡ * ·¿m , * u£r_d©a ) 3533 cÚ¡  mgmt_½_»ad_šdex_li¡ * ½ = ·¿m ; 3534 bt_blu‘oÙh_»ady cb = u£r_d©a ; 3535 ušt16_t num ; 3536  i ; 3538 `DBG (""); 3540 ià( ¡©us ) { 3541 `”rÜ ("%s: FažedØ»ad index†i¡: % (0x%02x)", __func__ , 3542 `mgmt_”r¡r ( ¡©us ), status); 3543  çžed ; 3546 ià( Ëngth < (* ½ )) { 3547 `”rÜ ("%s: WrÚg sizoà»ad index†i¡„e¥Ú£", __func__ ); 3548  çžed ; 3551 num = `Ë16_to_ýu ( ½ -> num_cÚŒÞËrs ); 3553 `DBG ("Numb” oàcÚŒÞËrs: %u", num ); 3555 ià( num * ( ušt16_t è+ (* ½ è!ð Ëngth ) { 3556 `”rÜ ("%s: IncÜ»ù…kˆsizfÜ index†i¡„¥", __func__ ); 3557  çžed ; 3560 ià( ad­‹r . šdex !ð MGMT_INDEX_NONE ) 3563  i = 0; i < num ; i++) { 3564 ušt16_t šdex = `Ë16_to_ýu ( ½ ->šdex[ i ]); 3566 ià( ÝtiÚ_šdex !ð MGMT_INDEX_NONE && o±iÚ_šdex !ð šdex ) 3569 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_READ_INFO , šdex , 0, NULL , 3570 »ad_šfo_com¶‘e , cb , NULL ) == 0) 3571  çžed ; 3573 ad­‹r . šdex = index; 3579 çžed : 3580 `cb (- EIO , NULL ); 3581 } } 3583  $»ad_v”siÚ_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 3584 cÚ¡ * ·¿m , * u£r_d©a ) 3586 cÚ¡  mgmt_½_»ad_v”siÚ * ½ = ·¿m ; 3587 ušt8_t mgmt_v”siÚ , mgmt_»visiÚ ; 3588 bt_blu‘oÙh_»ady cb = u£r_d©a ; 3590 `DBG (""); 3592 ià( ¡©us ) { 3593 `”rÜ ("Failedo„ead version information: %s (0x%02x)", 3594 `mgmt_”r¡r ( ¡©us ), status); 3595  çžed ; 3598 ià( Ëngth < (* ½ )) { 3599 `”rÜ ("Wrong size„esponse"); 3600  çžed ; 3603 mgmt_v”siÚ = ½ -> v”siÚ ; 3604 mgmt_»visiÚ = `Ë16_to_ýu ( ½ -> »visiÚ ); 3606 `šfo ("Bluetooth management interface %u.%u initialized", 3607 mgmt_v”siÚ , mgmt_»visiÚ ); 3609 ià( `MGMT_VERSION ( mgmt_v”siÚ , mgmt_»visiÚ ) < MGMT_VERSION(1, 3)) { 3610 `”rÜ ("Version 1.3 or†ater of management interface„equired"); 3611  çžed ; 3615 ià( `MGMT_VERSION ( mgmt_v”siÚ , mgmt_»visiÚ ) >= MGMT_VERSION(1, 7)) { 3616 `šfo ("Kernel connection control will be used"); 3617 k”Ãl_cÚn_cÚŒÞ = Œue ; 3620 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_INDEX_ADDED , MGMT_INDEX_NONE , 3621 mgmt_šdex_added_ev’t , cb , NULL ); 3622 `mgmt_»gi¡” ( mgmt_if , MGMT_EV_INDEX_REMOVED , MGMT_INDEX_NONE , 3623 mgmt_šdex_»moved_ev’t , NULL , NULL); 3625 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_READ_INDEX_LIST , MGMT_INDEX_NONE , 0, 3626 NULL , »ad_šdex_li¡_com¶‘e , cb , NULL) > 0) 3629 `”rÜ ("Failedo„ead controller index†ist"); 3631 çžed : 3632 `cb (- EIO , NULL ); 3633 } } 3635 boÞ $bt_blu‘oÙh_¡¬t ( šdex , boÞ mgmt_dbg , bt_blu‘oÙh_»ady cb ) 3637 `DBG ("šdex %d", šdex ); 3639 mgmt_if = `mgmt_Ãw_deçuÉ (); 3640 ià(! mgmt_if ) { 3641 `”rÜ ("Failedo‡ccess management interface"); 3642  çl£ ; 3645 ià( mgmt_dbg ) 3646 `mgmt_£t_debug ( mgmt_if , mgmt_debug , "mgmt_if: ", NULL ); 3648 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_READ_VERSION , MGMT_INDEX_NONE , 0, NULL , 3649 »ad_v”siÚ_com¶‘e , cb , NULL ) == 0) { 3650 `”rÜ ("Error sending READ_VERSION mgmt command"); 3652 `mgmt_uÄef ( mgmt_if ); 3653 mgmt_if = NULL ; 3655  çl£ ; 3658 ià( šdex >= 0) 3659 ÝtiÚ_šdex = šdex ; 3661  Œue ; 3662 } } 3664  $shutdown_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 3665 cÚ¡ * ·¿m , * u£r_d©a ) 3667 bt_blu‘oÙh_¡Ý³d cb = u£r_d©a ; 3669 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) 3670 `”rÜ ("Clean controller shutdown failed"); 3672 `cb (); 3673 } } 3675 boÞ $bt_blu‘oÙh_¡Ý ( bt_blu‘oÙh_¡Ý³d cb ) 3677  mgmt_mode ý ; 3679 ià( ad­‹r . šdex =ð MGMT_INDEX_NONE ) 3680  çl£ ; 3682 `šfo ("Switching controller off"); 3684 `mem£t (& ý , 0, (cp)); 3686  `mgmt_£nd ( mgmt_if , MGMT_OP_SET_POWERED , ad­‹r . šdex , 3687 ( ý ), &ý, shutdown_com¶‘e , (*) cb , 3688 NULL ) > 0; 3689 } } 3691  $bt_blu‘oÙh_þ—nup () 3693 `g_ä“ ( ad­‹r . Çme ); 3694 ad­‹r . Çme = NULL ; 3696 `mgmt_uÄef ( mgmt_if ); 3697 mgmt_if = NULL ; 3698 } } 3700  boÞ $£t_discov”abË ( ušt8_t mode , ušt16_t timeout ) 3702  mgmt_ý_£t_discov”abË ý ; 3704 `mem£t (& ý , 0, (cp)); 3705 ý . v® = mode ; 3706 ý . timeout = `ýu_to_Ë16 (timeout); 3708 `DBG ("mod%uimeouˆ%u", mode , timeout ); 3710 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_SET_DISCOVERABLE , ad­‹r . šdex , 3711 ( ý ), &ý, £t_mode_com¶‘e , NULL , NULL) > 0) 3712  Œue ; 3714 `”rÜ ("Failedo set mode discoverable"); 3716  çl£ ; 3717 } } 3719  ušt8_t $g‘_ad­‹r_add»ss () 3721 ušt8_t buf [6]; 3723 `bdaddr2ªdroid (& ad­‹r . bdaddr , buf ); 3725 `£nd_ad­‹r_´Ý”ty ( HAL_PROP_ADAPTER_ADDR , ( buf ), buf); 3727  HAL_STATUS_SUCCESS ; 3728 } } 3730  ušt8_t $g‘_ad­‹r_Çme () 3732 ià(! ad­‹r . Çme ) 3733  HAL_STATUS_FAILED ; 3735 `ad­‹r_Çme_chªged (( ušt8_t *è ad­‹r . Çme ); 3737  HAL_STATUS_SUCCESS ; 3738 } } 3740  ušt8_t $g‘_ad­‹r_þass () 3742 `DBG (""); 3744 `ad­‹r_þass_chªged (); 3746  HAL_STATUS_SUCCESS ; 3747 } } 3749  ušt8_t $£‰šgs2ty³ () 3751 boÞ b»dr , Ë ; 3753 b»dr = ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_BREDR ; 3754 Ë = ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_LE ; 3756 ià( b»dr && Ë ) 3757  HAL_TYPE_DUAL ; 3759 ià( b»dr && ! Ë ) 3760  HAL_TYPE_BREDR ; 3762 ià(! b»dr && Ë ) 3763  HAL_TYPE_LE ; 3766 } } 3768  ušt8_t $g‘_ad­‹r_ty³ () 3770 ušt8_t ty³ ; 3772 `DBG (""); 3774 ty³ = `£‰šgs2ty³ (); 3776 ià(! ty³ ) 3777  HAL_STATUS_FAILED ; 3779 `£nd_ad­‹r_´Ý”ty ( HAL_PROP_ADAPTER_TYPE , ( ty³ ), &type); 3781  HAL_STATUS_SUCCESS ; 3782 } } 3784  ušt8_t $g‘_ad­‹r_£rviû_»c () 3786 `DBG ("Not implemented"); 3790  HAL_STATUS_FAILED ; 3791 } } 3793  ušt8_t $g‘_ad­‹r_sÿn_mode () 3795 `DBG (""); 3797 `sÿn_mode_chªged (); 3799  HAL_STATUS_SUCCESS ; 3800 } } 3802  ušt8_t $g‘_ad­‹r_bÚded_deviûs () 3804 ušt8_t buf [( bdaddr_t è* `g_¦i¡_Ëngth ( bÚded_deviûs )]; 3805  i = 0; 3806 GSLi¡ * l ; 3808 `DBG (""); 3810  l = bÚded_deviûs ;†;† = `g_¦i¡_Ãxt (l)) { 3811  deviû * dev = l -> d©a ; 3813 `g‘_deviû_ªdroid_addr ( dev , buf + ( i * ( bdaddr_t ))); 3814 i ++; 3817 `£nd_ad­‹r_´Ý”ty ( HAL_PROP_ADAPTER_BONDED_DEVICES , 3818 i * ( bdaddr_t ), buf ); 3820  HAL_STATUS_SUCCESS ; 3821 } } 3823  ušt8_t $g‘_ad­‹r_discov”abË_timeout () 3825 `£nd_ad­‹r_´Ý”ty ( HAL_PROP_ADAPTER_DISC_TIMEOUT , 3826 ( ad­‹r . discov”abË_timeout ), 3827 & ad­‹r . discov”abË_timeout ); 3829  HAL_STATUS_SUCCESS ; 3830 } } 3832  $´•¬e_Ë_ã©u»s ( ušt8_t * Ë_ã©u»s ) 3834 Ë_ã©u»s [0] = !!( ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_PRIVACY ); 3835 Ë_ã©u»s [1] = ad­‹r . max_adv”t_š¡ªû ; 3836 Ë_ã©u»s [2] = ad­‹r . ½a_ofæßd_suµÜ‹d ; 3837 Ë_ã©u»s [3] = ad­‹r . max_œk_li¡_size ; 3838 Ë_ã©u»s [4] = ad­‹r . max_sÿn_fž‹rs_suµÜ‹d ; 3840 Ë_ã©u»s [5] = ad­‹r . sÿn_»suÉ_¡Üage_size ; 3842 Ë_ã©u»s [6] = ad­‹r . sÿn_»suÉ_¡Üage_size >> 8; 3843 Ë_ã©u»s [7] = ad­‹r . aùiv™y_’”gy_šfo_suµÜ‹d ; 3844 } } 3846  ušt8_t $g‘_ad­‹r_Ë_ã©u»s () 3848 ušt8_t Ë_ã©u»s [8]; 3850 `´•¬e_Ë_ã©u»s ( Ë_ã©u»s ); 3852 `£nd_ad­‹r_´Ý”ty ( HAL_PROP_ADAPTER_LOCAL_LE_FEAT , 3853 ( Ë_ã©u»s ),†e_features); 3854  HAL_STATUS_SUCCESS ; 3855 } } 3857  $hªdË_g‘_ad­‹r_´Ý_cmd (cÚ¡ * buf , ušt16_t Ën ) 3859 cÚ¡  h®_cmd_g‘_ad­‹r_´Ý * cmd = buf ; 3860 ušt8_t ¡©us ; 3862  cmd -> ty³ ) { 3863  HAL_PROP_ADAPTER_ADDR : 3864 ¡©us = `g‘_ad­‹r_add»ss (); 3866  HAL_PROP_ADAPTER_NAME : 3867 ¡©us = `g‘_ad­‹r_Çme (); 3869  HAL_PROP_ADAPTER_UUIDS : 3870 ¡©us = `g‘_ad­‹r_uuids (); 3872  HAL_PROP_ADAPTER_CLASS : 3873 ¡©us = `g‘_ad­‹r_þass (); 3875  HAL_PROP_ADAPTER_TYPE : 3876 ¡©us = `g‘_ad­‹r_ty³ (); 3878  HAL_PROP_ADAPTER_SERVICE_REC : 3879 ¡©us = `g‘_ad­‹r_£rviû_»c (); 3881  HAL_PROP_ADAPTER_SCAN_MODE : 3882 ¡©us = `g‘_ad­‹r_sÿn_mode (); 3884  HAL_PROP_ADAPTER_BONDED_DEVICES : 3885 ¡©us = `g‘_ad­‹r_bÚded_deviûs (); 3887  HAL_PROP_ADAPTER_DISC_TIMEOUT : 3888 ¡©us = `g‘_ad­‹r_discov”abË_timeout (); 3890  HAL_PROP_ADAPTER_LOCAL_LE_FEAT : 3891 ¡©us = `g‘_ad­‹r_Ë_ã©u»s (); 3894 ¡©us = HAL_STATUS_FAILED ; 3898 ià( ¡©us !ð HAL_STATUS_SUCCESS ) 3899 `”rÜ ("Failedo get‡dapter…roperty (type %u status %u)", 3900 cmd -> ty³ , ¡©us ); 3902 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_GET_ADAPTER_PROP , 3903 ¡©us ); 3904 } } 3906  $g‘_ad­‹r_´Ý”t›s () 3908 ušt8_t buf [ IPC_MTU ]; 3909  h®_ev_ad­‹r_´Ýs_chªged * ev = (*è buf ; 3910 ušt8_t bÚded [ `g_¦i¡_Ëngth ( bÚded_deviûs è* ( bdaddr_t )]; 3911 ušt128_t uuids [ `g_¦i¡_Ëngth ( ad­‹r .uuids)]; 3912 ušt8_t ªdroid_bdaddr [6]; 3913 ušt8_t Ë_ã©u»s [8]; 3914 ušt8_t ty³ , mode ; 3915 size_t size , i ; 3916 GSLi¡ * l ; 3918 size = (* ev ); 3920 ev -> ¡©us = HAL_STATUS_SUCCESS ; 3921 ev -> num_´Ýs = 0; 3923 `bdaddr2ªdroid (& ad­‹r . bdaddr , & ªdroid_bdaddr ); 3924 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_ADAPTER_ADDR , 3925 ( ªdroid_bdaddr ),‡ndroid_bdaddr); 3926 ev -> num_´Ýs ++; 3928 ià( ad­‹r . Çme ) { 3929 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_ADAPTER_NAME , 3930 `¡¾’ ( ad­‹r . Çme ),‡dapter.name); 3931 ev -> num_´Ýs ++; 3934 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_ADAPTER_CLASS , 3935 ( ad­‹r . dev_þass ), &adapter.dev_class); 3936 ev -> num_´Ýs ++; 3938 ty³ = `£‰šgs2ty³ (); 3939 ià( ty³ ) { 3940 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_ADAPTER_TYPE , 3941 ( ty³ ), &type); 3942 ev -> num_´Ýs ++; 3945 mode = `£‰šgs2sÿn_mode (); 3946 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_ADAPTER_SCAN_MODE , 3947 ( mode ), &mode); 3948 ev -> num_´Ýs ++; 3950 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_ADAPTER_DISC_TIMEOUT , 3951 ( ad­‹r . discov”abË_timeout ), 3952 & ad­‹r . discov”abË_timeout ); 3953 ev -> num_´Ýs ++; 3955  i = 0, l = bÚded_deviûs ;†;† = `g_¦i¡_Ãxt (l), i++) { 3956  deviû * dev = l -> d©a ; 3958 `g‘_deviû_ªdroid_addr ( dev , bÚded + ( i * ( bdaddr_t ))); 3961 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_ADAPTER_BONDED_DEVICES , 3962 ( bÚded ), bonded); 3963 ev -> num_´Ýs ++; 3965  i = 0, l = ad­‹r . uuids ;†;† = `g_¦i¡_Ãxt (l), i++) { 3966 uuid_t * uuid = l -> d©a ; 3968 `memýy (& uuids [ i ], & uuid -> v®ue . uuid128 , ( ušt128_t )); 3971 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_ADAPTER_UUIDS , ( uuids ), 3972 uuids ); 3973 ev -> num_´Ýs ++; 3975 `´•¬e_Ë_ã©u»s ( Ë_ã©u»s ); 3976 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_ADAPTER_LOCAL_LE_FEAT , 3977 ( Ë_ã©u»s ),†e_features); 3979 ev -> num_´Ýs ++; 3981 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 3982 HAL_EV_ADAPTER_PROPS_CHANGED , size , buf ); 3983 } } 3985  $ÿnûl_³ndšg_cÚfœm_Çme ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 3987  deviû * dev = d©a ; 3989 `mgmt_ÿnûl ( mgmt_if , dev -> cÚfœm_id ); 3990 dev -> cÚfœm_id = 0; 3991 } } 3993  boÞ $¡Ý_discov”y ( ušt8_t ty³ ) 3995  mgmt_ý_¡Ý_discov”y ý ; 3997 ý . ty³ = `g‘_suµÜ‹d_discov”y_ty³ () &ype; 3999 `DBG ("ty³=0x%x", ý . ty³ ); 4001 ià( ý . ty³ =ð SCAN_TYPE_NONE ) 4002  çl£ ; 4005 `g_¦i¡_fÜ—ch ( ÿched_deviûs , ÿnûl_³ndšg_cÚfœm_Çme , NULL ); 4007 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_STOP_DISCOVERY , ad­‹r . šdex , 4008 ( ý ), &ý, NULL , NULL, NULL) > 0) 4009  Œue ; 4011 `”rÜ ("Failedo stop discovery"); 4012  çl£ ; 4013 } } 4015  sadv_u£r_d©a { 4016 bt_Ë_£t_adv”tisšg_dÚe mcb ; 4017 * mu£r_d©a ; 4020  $£t_adv”tisšg_cb ( ušt8_t ¡©us , ušt16_t Ëngth , 4021 cÚ¡ * ·¿m , * u£r_d©a ) 4023  adv_u£r_d©a * d©a = u£r_d©a ; 4025 `DBG (""); 4027 ià( ¡©us ) 4028 `”rÜ ("Failedo set‡dverising %s (0x%02x))", 4029 `mgmt_”r¡r ( ¡©us ), status); 4031 d©a -> `cb ( ¡©us , d©a-> u£r_d©a ); 4032 } } 4034 boÞ $bt_Ë_£t_adv”tisšg ( boÞ adv”tisšg , bt_Ë_£t_adv”tisšg_dÚe cb , 4035 * u£r_d©a ) 4037  adv_u£r_d©a * d©a ; 4038 ušt8_t adv = adv”tisšg ? 0x01 : 0x00; 4040 d©a = `Ãw0 ( adv_u£r_d©a , 1); 4041 ià(! d©a ) 4042  çl£ ; 4044 d©a -> cb = cb; 4045 d©a -> u£r_d©a = user_data; 4047 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_SET_ADVERTISING , ad­‹r . šdex , 4048 ( adv ), &adv, £t_adv”tisšg_cb , d©a , ä“ ) > 0) 4049  Œue ; 4051 `”rÜ ("Failedo set‡dvertising"); 4052 `ä“ ( d©a ); 4053  çl£ ; 4054 } } 4056 boÞ $bt_Ë_»gi¡” ( bt_Ë_deviû_found cb ) 4058 ià( g©t_deviû_found_cb ) 4059  çl£ ; 4061 g©t_deviû_found_cb = cb ; 4063  Œue ; 4064 } } 4066  $bt_Ë_uÄegi¡” () 4068 g©t_deviû_found_cb = NULL ; 4069 } } 4071 boÞ $bt_Ë_discov”y_¡Ý ( bt_Ë_discov”y_¡Ý³d cb ) 4073 ià(!( ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 4074  çl£ ; 4076 ad­‹r . Ë_sÿšg = çl£ ; 4078 ià( ad­‹r . cur_discov”y_ty³ !ð SCAN_TYPE_LE ) { 4079 ià( cb ) 4080 `cb (); 4082  Œue ; 4085 ià(! `¡Ý_discov”y ( SCAN_TYPE_LE )) 4086  çl£ ; 4088 g©t_discov”y_¡Ý³d_cb = cb ; 4089 ad­‹r . exp_discov”y_ty³ = SCAN_TYPE_NONE ; 4091  Œue ; 4092 } } 4094 boÞ $bt_Ë_discov”y_¡¬t () 4096 ià(!( ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 4097  çl£ ; 4099 ad­‹r . Ë_sÿšg = Œue ; 4107 ià( ad­‹r . cur_discov”y_ty³ !ð SCAN_TYPE_NONE ) { 4108 ad­‹r . exp_discov”y_ty³ = SCAN_TYPE_LE ; 4109  Œue ; 4112 ià( `¡¬t_discov”y ( SCAN_TYPE_LE )) 4113  Œue ; 4115  çl£ ; 4116 } } 4118  s»ad_rssi_u£r_d©a { 4119 bt_»ad_deviû_rssi_dÚe mcb ; 4120 * mu£r_d©a ; 4123  $»ad_deviû_rssi_cb ( ušt8_t ¡©us , ušt16_t Ëngth , 4124 cÚ¡ * ·¿m , * u£r_d©a ) 4126 cÚ¡  mgmt_½_g‘_cÚn_šfo * ½ = ·¿m ; 4127  »ad_rssi_u£r_d©a * d©a = u£r_d©a ; 4129 `DBG (""); 4131 ià( ¡©us ) 4132 `”rÜ ("Failedo get conn info: %s (0x%02x))", 4133 `mgmt_”r¡r ( ¡©us ), status); 4135 ià( Ëngth < (* ½ )) { 4136 `”rÜ ("Wrong size of get conn info„esponse"); 4140 d©a -> `cb ( ¡©us , & ½ -> addr . bdaddr ,„p-> rssi , d©a-> u£r_d©a ); 4141 } } 4143 boÞ $bt_»ad_deviû_rssi (cÚ¡ bdaddr_t * addr , bt_»ad_deviû_rssi_dÚe cb , 4144 * u£r_d©a ) 4146  deviû * dev ; 4147  »ad_rssi_u£r_d©a * d©a ; 4148  mgmt_ý_g‘_cÚn_šfo ý ; 4150 dev = `fšd_deviû ( addr ); 4151 ià(! dev ) 4152  çl£ ; 4154 `memýy (& ý . addr . bdaddr ,‡ddr, (cp.addr.bdaddr)); 4155 ý . addr . ty³ = dev -> b»dr ? BDADDR_BREDR : dev-> bdaddr_ty³ ; 4157 d©a = `Ãw0 ( »ad_rssi_u£r_d©a , 1); 4158 ià(! d©a ) 4159  çl£ ; 4161 d©a -> cb = cb; 4162 d©a -> u£r_d©a = user_data; 4164 ià(! `mgmt_£nd ( mgmt_if , MGMT_OP_GET_CONN_INFO , ad­‹r . šdex , 4165 ( ý ), &ý, »ad_deviû_rssi_cb , d©a , ä“ )) { 4166 `ä“ ( d©a ); 4167 `”rÜ ("Failedo get conn info"); 4168  çl£ ; 4171  Œue ; 4172 } } 4174 boÞ $bt_g‘_c¤k (cÚ¡ bdaddr_t * addr , bt_c¤k_ty³ ty³ , ušt8_t key [16], 4175 ušt32_t * sign_út ) 4177  deviû * dev ; 4178 boÞ loÿl = ( ty³ =ð LOCAL_CSRK ); 4180 dev = `fšd_deviû ( addr ); 4181 ià(! dev ) 4182  çl£ ; 4184 ià( loÿl && dev -> v®id_loÿl_c¤k ) { 4185 `memýy ( key , dev -> loÿl_c¤k , 16); 4186 * sign_út = dev -> loÿl_sign_út ; 4187 } ià(! loÿl && dev -> v®id_»mÙe_c¤k ) { 4188 `memýy ( key , dev -> »mÙe_c¤k , 16); 4189 * sign_út = dev -> »mÙe_sign_út ; 4191  çl£ ; 4194  Œue ; 4195 } } 4197  $¡Üe_sign_couÁ” ( deviû * dev , bt_c¤k_ty³ ty³ ) 4199 cÚ¡ * sign_út_s ; 4200 ušt32_t sign_út ; 4201 GKeyFže * key_fže ; 4202 boÞ loÿl = ( ty³ =ð LOCAL_CSRK ); 4204 gsize Ëngth = 0; 4205  addr [18]; 4206 * d©a ; 4208 key_fže = `g_key_fže_Ãw (); 4209 ià(! `g_key_fže_lßd_äom_fže ( key_fže , DEVICES_FILE , 0, NULL )) { 4210 `g_key_fže_ä“ ( key_fže ); 4214 `ba2¡r (& dev -> bdaddr , addr ); 4216 sign_út_s = loÿl ? "LocalCSRKSignCounter" : "RemoteCSRKSignCounter"; 4217 sign_út = loÿl ? dev -> loÿl_sign_út : dev-> »mÙe_sign_út ; 4219 `g_key_fže_£t_š‹g” ( key_fže , addr , sign_út_s , sign_út ); 4221 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 4222 `g_fže_£t_cÚ‹Ás ( DEVICES_FILE , d©a , Ëngth , NULL ); 4223 `g_ä“ ( d©a ); 4225 `g_key_fže_ä“ ( key_fže ); 4226 } } 4228  $bt_upd©e_sign_couÁ” (cÚ¡ bdaddr_t * addr , bt_c¤k_ty³ ty³ , 4229 ušt32_t v® ) 4231  deviû * dev ; 4233 dev = `fšd_deviû ( addr ); 4234 ià(! dev ) 4237 ià( ty³ =ð LOCAL_CSRK ) 4238 dev -> loÿl_sign_út = v® ; 4240 dev -> »mÙe_sign_út = v® ; 4242 `¡Üe_sign_couÁ” ( dev , ty³ ); 4243 } } 4245  ušt8_t $£t_ad­‹r_sÿn_mode (cÚ¡ * buf , ušt16_t Ën ) 4247 cÚ¡ ušt8_t * mode = buf ; 4248 boÞ cÚn , disc , cur_cÚn , cur_disc ; 4250 ià( Ën !ð(* mode )) { 4251 `”rÜ ("Invalid set scan mode size (%u bytes),erminating", 4252 Ën ); 4253 `¿i£ ( SIGTERM ); 4254  HAL_STATUS_FAILED ; 4257 cur_cÚn = ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_CONNECTABLE ; 4258 cur_disc = ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_DISCOVERABLE ; 4260 `DBG ("cÚÃùabË %u discov”abË %d mod%u", cur_cÚn , cur_disc , 4261 * mode ); 4263 * mode ) { 4264  HAL_ADAPTER_SCAN_MODE_NONE : 4265 ià(! cur_cÚn && ! cur_disc ) 4266  dÚe ; 4268 cÚn = çl£ ; 4269 disc = çl£ ; 4271  HAL_ADAPTER_SCAN_MODE_CONN : 4272 ià( cur_cÚn && ! cur_disc ) 4273  dÚe ; 4275 cÚn = Œue ; 4276 disc = çl£ ; 4278  HAL_ADAPTER_SCAN_MODE_CONN_DISC : 4279 ià( cur_cÚn && cur_disc ) 4280  dÚe ; 4282 cÚn = Œue ; 4283 disc = Œue ; 4286  HAL_STATUS_FAILED ; 4289 ià( cur_cÚn !ð cÚn ) { 4290 ià(! `£t_mode ( MGMT_OP_SET_CONNECTABLE , cÚn ? 0x01 : 0x00)) 4291  HAL_STATUS_FAILED ; 4294 ià( cur_disc !ð disc && cÚn ) { 4295 ià(! `£t_discov”abË ( disc ? 0x01 : 0x00, 0)) 4296  HAL_STATUS_FAILED ; 4299  HAL_STATUS_SUCCESS ; 4301 dÚe : 4303 `sÿn_mode_chªged (); 4305  HAL_STATUS_SUCCESS ; 4306 } } 4308  $hªdË_£t_ad­‹r_´Ý_cmd (cÚ¡ * buf , ušt16_t Ën ) 4310 cÚ¡  h®_cmd_£t_ad­‹r_´Ý * cmd = buf ; 4311 ušt8_t ¡©us ; 4313 ià( Ën !ð(* cmd ) + cmd->len) { 4314 `”rÜ ("Invalid set‡dapter…rop cmd (0x%x),erminating", 4315 cmd -> ty³ ); 4316 `¿i£ ( SIGTERM ); 4320  cmd -> ty³ ) { 4321  HAL_PROP_ADAPTER_SCAN_MODE : 4322 ¡©us = `£t_ad­‹r_sÿn_mode ( cmd -> v® , cmd-> Ën ); 4324  HAL_PROP_ADAPTER_NAME : 4325 ¡©us = `£t_ad­‹r_Çme ( cmd -> v® , cmd-> Ën ); 4327  HAL_PROP_ADAPTER_DISC_TIMEOUT : 4328 ¡©us = `£t_ad­‹r_discov”abË_timeout ( cmd -> v® , cmd-> Ën ); 4331 `DBG ("UnhªdËd…rÝ”tyy³ 0x%x", cmd -> ty³ ); 4332 ¡©us = HAL_STATUS_FAILED ; 4336 ià( ¡©us !ð HAL_STATUS_SUCCESS ) 4337 `”rÜ ("Failedo set‡dapter…roperty (type %u status %u)", 4338 cmd -> ty³ , ¡©us ); 4340 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_SET_ADAPTER_PROP , 4341 ¡©us ); 4342 } } 4344  $·œ_deviû_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 4345 cÚ¡ * ·¿m , * u£r_d©a ) 4347 cÚ¡  mgmt_½_·œ_deviû * ½ = ·¿m ; 4348  deviû * dev ; 4350 `DBG ("¡©u %u", ¡©us ); 4352 dev = `fšd_deviû (& ½ -> addr . bdaddr ); 4353 ià(! dev ) 4360 `upd©e_deviû_¡©e ( dev , ½ -> addr . ty³ , `¡©us_mgmt2h® ( ¡©us ), çl£ , 4361 ! ¡©us , çl£ ); 4363 ià( ¡©us =ð MGMT_STATUS_SUCCESS ) 4364 `queue_fÜ—ch ( ·œed_cb_li¡ , £nd_·œed_nÙifiÿtiÚ , dev ); 4365 } } 4367  ušt8_t $£Ëù_deviû_b—»r ( deviû * dev ) 4369 ušt8_t »s ; 4371 ià( dev -> b»dr && dev-> Ë ) { 4372 ià( dev -> Ë_£’ > dev-> b»dr_£’ ) 4373 »s = dev -> bdaddr_ty³ ; 4375 »s = BDADDR_BREDR ; 4377 »s = dev -> b»dr ? BDADDR_BREDR : dev-> bdaddr_ty³ ; 4380 `DBG ("S–eùed b—»¸%d", »s ); 4382  »s ; 4383 } } 4385 ušt8_t $bt_deviû_Ï¡_£’_b—»r (cÚ¡ bdaddr_t * bdaddr ) 4387  deviû * dev ; 4389 dev = `fšd_deviû ( bdaddr ); 4390 ià(! dev ) 4391  BDADDR_BREDR ; 4393  `£Ëù_deviû_b—»r ( dev ); 4394 } } 4396  $hªdË_ü—‹_bÚd_cmd (cÚ¡ * buf , ušt16_t Ën ) 4398 cÚ¡  h®_cmd_ü—‹_bÚd * cmd = buf ; 4399  deviû * dev ; 4400 ušt8_t ¡©us ; 4401  mgmt_ý_·œ_deviû ý ; 4403 dev = `g‘_deviû_ªdroid ( cmd -> bdaddr ); 4405 ý . io_ÿp = DEFAULT_IO_CAPABILITY ; 4406 ý . addr . ty³ = `£Ëù_deviû_b—»r ( dev ); 4407 `baýy (& ý . addr . bdaddr , & dev ->bdaddr); 4410 ià( cmd -> Œª¥Üt > BT_TRANSPORT_LE ) { 4411 ¡©us = HAL_STATUS_INVALID ; 4412  çž ; 4415 ià( `deviû_is_·œed ( dev , ý . addr . ty³ )) { 4416 ¡©us = HAL_STATUS_FAILED ; 4417  çž ; 4420 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_PAIR_DEVICE , ad­‹r . šdex , ( ý ), 4421 & ý , ·œ_deviû_com¶‘e , NULL , NULL) == 0) { 4422 ¡©us = HAL_STATUS_FAILED ; 4423  çž ; 4426 ¡©us = HAL_STATUS_SUCCESS ; 4428 `upd©e_deviû_¡©e ( dev , ý . addr . ty³ , HAL_STATUS_SUCCESS , Œue , çl£ , 4429 çl£ ); 4431 çž : 4432 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_CREATE_BOND , 4433 ¡©us ); 4434 } } 4436  $hªdË_ÿnûl_bÚd_cmd (cÚ¡ * buf , ušt16_t Ën ) 4438 cÚ¡  h®_cmd_ÿnûl_bÚd * cmd = buf ; 4439  mgmt_addr_šfo ý ; 4440  deviû * dev ; 4441 ušt8_t ¡©us ; 4443 dev = `fšd_deviû_ªdroid ( cmd -> bdaddr ); 4444 ià(! dev ) { 4445 ¡©us = HAL_STATUS_FAILED ; 4446  çžed ; 4449 ý . ty³ = `£Ëù_deviû_b—»r ( dev ); 4450 `baýy (& ý . bdaddr , & dev ->bdaddr); 4452 ià( `mgmt_»¶y ( mgmt_if , MGMT_OP_CANCEL_PAIR_DEVICE , ad­‹r . šdex , 4453 ( ý ), &ý, NULL , NULL, NULL) == 0) { 4454 ¡©us = HAL_STATUS_FAILED ; 4455  çžed ; 4458 ¡©us = HAL_STATUS_SUCCESS ; 4460 çžed : 4461 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_CANCEL_BOND , 4462 ¡©us ); 4463 } } 4465  $£nd_uÅaœed_nÙifiÿtiÚ (* d©a , * u£r_d©a ) 4467 bt_uÅaœed_deviû_cb cb = d©a ; 4468  mgmt_addr_šfo * addr = u£r_d©a ; 4470 `cb (& addr -> bdaddr ,‡ddr-> ty³ ); 4471 } } 4473  $uÅaœ_deviû_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 4474 cÚ¡ * ·¿m , * u£r_d©a ) 4476 cÚ¡  mgmt_½_uÅaœ_deviû * ½ = ·¿m ; 4477  deviû * dev ; 4479 `DBG ("¡©u %u", ¡©us ); 4481 ià( ¡©us !ð MGMT_STATUS_SUCCESS && stu !ð MGMT_STATUS_NOT_PAIRED ) 4484 dev = `fšd_deviû (& ½ -> addr . bdaddr ); 4485 ià(! dev ) 4488 `upd©e_deviû_¡©e ( dev , ½ -> addr . ty³ , HAL_STATUS_SUCCESS , çl£ , 4489 çl£ , false); 4492 `queue_fÜ—ch ( uÅaœed_cb_li¡ , £nd_uÅaœed_nÙifiÿtiÚ , 4493 (*)& ½ -> addr ); 4494 } } 4496  $hªdË_»move_bÚd_cmd (cÚ¡ * buf , ušt16_t Ën ) 4498 cÚ¡  h®_cmd_»move_bÚd * cmd = buf ; 4499  mgmt_ý_uÅaœ_deviû ý ; 4500  deviû * dev ; 4501 ušt8_t ¡©us ; 4503 dev = `fšd_deviû_ªdroid ( cmd -> bdaddr ); 4504 ià(! dev ) { 4505 ¡©us = HAL_STATUS_FAILED ; 4506  çžed ; 4509 ý . discÚÃù = 1; 4510 `baýy (& ý . addr . bdaddr , & dev ->bdaddr); 4512 ià( dev -> Ë_·œed ) { 4513 ý . addr . ty³ = dev -> bdaddr_ty³ ; 4515 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_UNPAIR_DEVICE , ad­‹r . šdex , 4516 ( ý ), &ý, uÅaœ_deviû_com¶‘e , 4517 NULL , NULL) == 0) { 4518 ¡©us = HAL_STATUS_FAILED ; 4519  çžed ; 4523 ià( dev -> b»dr_·œed ) { 4524 ý . addr . ty³ = BDADDR_BREDR ; 4526 ià( `mgmt_£nd ( mgmt_if , MGMT_OP_UNPAIR_DEVICE , ad­‹r . šdex , 4527 ( ý ), &ý, uÅaœ_deviû_com¶‘e , 4528 NULL , NULL) == 0) { 4529 ¡©us = HAL_STATUS_FAILED ; 4530  çžed ; 4534 ¡©us = HAL_STATUS_SUCCESS ; 4536 çžed : 4537 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_REMOVE_BOND , 4538 ¡©us ); 4539 } } 4541  $hªdË_pš_»¶y_cmd (cÚ¡ * buf , ušt16_t Ën ) 4543 cÚ¡  h®_cmd_pš_»¶y * cmd = buf ; 4544 ušt8_t ¡©us ; 4545 bdaddr_t bdaddr ; 4546  addr [18]; 4548 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 4549 `ba2¡r (& bdaddr , addr ); 4551 `DBG ("% acû± %u…š_ËÀ%u", addr , cmd -> acû± , cmd-> pš_Ën ); 4553 ià(! cmd -> acû± && cmd-> pš_Ën ) { 4554 ¡©us = HAL_STATUS_INVALID ; 4555  çžed ; 4558 ià( cmd -> acû± ) { 4559  mgmt_ý_pš_code_»¶y ½ ; 4561 `mem£t (& ½ , 0, (rp)); 4563 `baýy (& ½ . addr . bdaddr , &bdaddr); 4564 ½ . addr . ty³ = BDADDR_BREDR ; 4565 ½ . pš_Ën = cmd ->pin_len; 4566 `memýy ( ½ . pš_code , cmd ->pš_code,„p. pš_Ën ); 4568 ià( `mgmt_»¶y ( mgmt_if , MGMT_OP_PIN_CODE_REPLY , ad­‹r . šdex , 4569 ( ½ ), &½, NULL , NULL, NULL) == 0) { 4570 ¡©us = HAL_STATUS_FAILED ; 4571  çžed ; 4574  mgmt_ý_pš_code_Ãg_»¶y ½ ; 4576 `baýy (& ½ . addr . bdaddr , &bdaddr); 4577 ½ . addr . ty³ = BDADDR_BREDR ; 4579 ià( `mgmt_»¶y ( mgmt_if , MGMT_OP_PIN_CODE_NEG_REPLY , 4580 ad­‹r . šdex , ( ½ ), &rp, 4581 NULL , NULL, NULL) == 0) { 4582 ¡©us = HAL_STATUS_FAILED ; 4583  çžed ; 4587 ¡©us = HAL_STATUS_SUCCESS ; 4588 çžed : 4589 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_PIN_REPLY , 4590 ¡©us ); 4591 } } 4593  ušt8_t $u£r_cÚfœm_»¶y (cÚ¡ bdaddr_t * bdaddr , ušt8_t ty³ , 4594 boÞ acû± ) 4596  mgmt_addr_šfo ý ; 4597 ušt16_t Ýcode ; 4599 ià( acû± ) 4600 Ýcode = MGMT_OP_USER_CONFIRM_REPLY ; 4602 Ýcode = MGMT_OP_USER_CONFIRM_NEG_REPLY ; 4604 `baýy (& ý . bdaddr , bdaddr); 4605 ý . ty³ =ype; 4607 ià( `mgmt_»¶y ( mgmt_if , Ýcode , ad­‹r . šdex , ( ý ), &cp, 4608 NULL , NULL, NULL) > 0) 4609  HAL_STATUS_SUCCESS ; 4611  HAL_STATUS_FAILED ; 4612 } } 4614  ušt8_t $u£r_·sskey_»¶y (cÚ¡ bdaddr_t * bdaddr , ušt8_t ty³ , 4615 boÞ acû± , ušt32_t ·sskey ) 4617  id ; 4619 ià( acû± ) { 4620  mgmt_ý_u£r_·sskey_»¶y ý ; 4622 `mem£t (& ý , 0, (cp)); 4623 `baýy (& ý . addr . bdaddr , bdaddr); 4624 ý . addr . ty³ =ype; 4625 ý . ·sskey = `ýu_to_Ë32 (passkey); 4627 id = `mgmt_»¶y ( mgmt_if , MGMT_OP_USER_PASSKEY_REPLY , 4628 ad­‹r . šdex , ( ý ), &cp, 4629 NULL , NULL, NULL); 4631  mgmt_ý_u£r_·sskey_Ãg_»¶y ý ; 4633 `mem£t (& ý , 0, (cp)); 4634 `baýy (& ý . addr . bdaddr , bdaddr); 4635 ý . addr . ty³ =ype; 4637 id = `mgmt_»¶y ( mgmt_if , MGMT_OP_USER_PASSKEY_NEG_REPLY , 4638 ad­‹r . šdex , ( ý ), &cp, 4639 NULL , NULL, NULL); 4642 ià( id == 0) 4643  HAL_STATUS_FAILED ; 4645  HAL_STATUS_SUCCESS ; 4646 } } 4648  $hªdË_s¥_»¶y_cmd (cÚ¡ * buf , ušt16_t Ën ) 4650 cÚ¡  h®_cmd_s¥_»¶y * cmd = buf ; 4651  deviû * dev ; 4652 ušt8_t ¡©us ; 4653  addr [18]; 4657 dev = `fšd_deviû_ªdroid ( cmd -> bdaddr ); 4658 ià(! dev ) 4661 `ba2¡r (& dev -> bdaddr , addr ); 4663 `DBG ("% v¬ŸÁ %u‡cû± %u", addr , cmd -> s¥_v¬ŸÁ , cmd-> acû± ); 4665  cmd -> s¥_v¬ŸÁ ) { 4666  HAL_SSP_VARIANT_CONFIRM : 4667  HAL_SSP_VARIANT_CONSENT : 4668 ¡©us = `u£r_cÚfœm_»¶y (& dev -> bdaddr , 4669 `£Ëù_deviû_b—»r ( dev ), 4670 cmd -> acû± ); 4672  HAL_SSP_VARIANT_ENTRY : 4673 ¡©us = `u£r_·sskey_»¶y (& dev -> bdaddr , 4674 `£Ëù_deviû_b—»r ( dev ), 4675 cmd -> acû± , cmd-> ·sskey ); 4677  HAL_SSP_VARIANT_NOTIF : 4678 ¡©us = HAL_STATUS_SUCCESS ; 4681 ¡©us = HAL_STATUS_INVALID ; 4685 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_SSP_REPLY , 4686 ¡©us ); 4687 } } 4689  $hªdË_g‘_»mÙe_£rviûs_cmd (cÚ¡ * buf , ušt16_t Ën ) 4691 cÚ¡  h®_cmd_g‘_»mÙe_£rviûs * cmd = buf ; 4692 ušt8_t ¡©us ; 4693 bdaddr_t addr ; 4695 `ªdroid2bdaddr (& cmd -> bdaddr , & addr ); 4697 ¡©us = `brow£_»mÙe_sdp (& addr ); 4699 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 4700 HAL_OP_GET_REMOTE_SERVICES , ¡©us ); 4701 } } 4703  ušt8_t $g‘_deviû_uuids ( deviû * dev ) 4705 `£nd_deviû_uuids_nÙif ( dev ); 4707  HAL_STATUS_SUCCESS ; 4708 } } 4710  ušt8_t $g‘_deviû_þass ( deviû * dev ) 4712 `£nd_deviû_´Ý”ty ( dev , HAL_PROP_DEVICE_CLASS , (dev-> þass ), 4713 & dev -> þass ); 4715  HAL_STATUS_SUCCESS ; 4716 } } 4718  ušt8_t $g‘_deviû_ty³ ( deviû * dev ) 4720 ušt8_t ty³ = `g‘_deviû_ªdroid_ty³ ( dev ); 4722 `£nd_deviû_´Ý”ty ( dev , HAL_PROP_DEVICE_TYPE , ( ty³ ), &type); 4724  HAL_STATUS_SUCCESS ; 4725 } } 4727  ušt8_t $g‘_deviû_£rviû_»c ( deviû * dev ) 4729 `DBG ("Not implemented"); 4733  HAL_STATUS_FAILED ; 4734 } } 4736  ušt8_t $g‘_deviû_ä›ndly_Çme ( deviû * dev ) 4738 ià(! dev -> ä›ndly_Çme ) 4739  HAL_STATUS_FAILED ; 4741 `£nd_deviû_´Ý”ty ( dev , HAL_PROP_DEVICE_FRIENDLY_NAME , 4742 `¡¾’ ( dev -> ä›ndly_Çme ), dev->friendly_name); 4744  HAL_STATUS_SUCCESS ; 4745 } } 4747  ušt8_t $g‘_deviû_rssi ( deviû * dev ) 4749 ià(! dev -> rssi ) 4750  HAL_STATUS_FAILED ; 4752 `£nd_deviû_´Ý”ty ( dev , HAL_PROP_DEVICE_RSSI , (dev-> rssi ), 4753 & dev -> rssi ); 4755  HAL_STATUS_SUCCESS ; 4756 } } 4758  ušt8_t $g‘_deviû_v”siÚ_šfo ( deviû * dev ) 4760 `DBG ("Not implemented"); 4764  HAL_STATUS_FAILED ; 4765 } } 4767  ušt8_t $g‘_deviû_time¡amp ( deviû * dev ) 4769 ušt32_t time¡amp ; 4771 time¡amp = `deviû_time¡amp ( dev ); 4773 `£nd_deviû_´Ý”ty ( dev , HAL_PROP_DEVICE_TIMESTAMP , ( time¡amp ), 4774 & time¡amp ); 4776  HAL_STATUS_SUCCESS ; 4777 } } 4779  $g‘_»mÙe_deviû_´Ýs ( deviû * dev ) 4781 ušt8_t buf [ IPC_MTU ]; 4782  h®_ev_»mÙe_deviû_´Ýs * ev = (*è buf ; 4783 ušt128_t uuids [ `g_¦i¡_Ëngth ( dev ->uuids)]; 4784 ušt8_t ªdroid_ty³ ; 4785 ušt32_t time¡amp ; 4786 size_t size , i ; 4787 GSLi¡ * l ; 4789 `mem£t ( buf , 0, (buf)); 4791 size = (* ev ); 4793 ev -> ¡©us = HAL_STATUS_SUCCESS ; 4794 `g‘_deviû_ªdroid_addr ( dev , ev -> bdaddr ); 4796 ªdroid_ty³ = `g‘_deviû_ªdroid_ty³ ( dev ); 4797 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_TYPE , 4798 ( ªdroid_ty³ ), &android_type); 4799 ev -> num_´Ýs ++; 4801 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_CLASS , 4802 ( dev -> þass ), &dev->class); 4803 ev -> num_´Ýs ++; 4805 ià( dev -> rssi ) { 4806 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_RSSI , 4807 ( dev -> rssi ), &dev->rssi); 4808 ev -> num_´Ýs ++; 4811 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_NAME , 4812 `¡¾’ ( dev -> Çme ), dev->name); 4813 ev -> num_´Ýs ++; 4815 ià( dev -> ä›ndly_Çme ) { 4816 size +ð `fžl_h®_´Ý ( buf + size, 4817 HAL_PROP_DEVICE_FRIENDLY_NAME , 4818 `¡¾’ ( dev -> ä›ndly_Çme ), 4819 dev -> ä›ndly_Çme ); 4820 ev -> num_´Ýs ++; 4823  i = 0, l = dev -> uuids ;†;† = `g_¦i¡_Ãxt (l), i++) 4824 `memýy (& uuids [ i ], l -> d©a , ( ušt128_t )); 4826 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_UUIDS , ( uuids ), 4827 uuids ); 4828 ev -> num_´Ýs ++; 4830 time¡amp = `g‘_deviû_time¡amp ( dev ); 4832 size +ð `fžl_h®_´Ý ( buf + size, HAL_PROP_DEVICE_TIMESTAMP , 4833 ( time¡amp ), ×tamp); 4834 ev -> num_´Ýs ++; 4836 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 4837 HAL_EV_REMOTE_DEVICE_PROPS , size , buf ); 4838 } } 4840  $£nd_bÚded_deviûs_´Ýs () 4842 GSLi¡ * l ; 4844  l = bÚded_deviûs ;†;† = `g_¦i¡_Ãxt (l)) { 4845  deviû * dev = l -> d©a ; 4847 `g‘_»mÙe_deviû_´Ýs ( dev ); 4849 } } 4851  $hªdË_’abË_cmd (cÚ¡ * buf , ušt16_t Ën ) 4853 ušt8_t ¡©us ; 4859 `g‘_ad­‹r_´Ý”t›s (); 4862 `£nd_bÚded_deviûs_´Ýs (); 4864 ià( ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_POWERED ) { 4865 ¡©us = HAL_STATUS_SUCCESS ; 4866  »¶y ; 4869 ià(! `£t_mode ( MGMT_OP_SET_POWERED , 0x01)) { 4870 ¡©us = HAL_STATUS_FAILED ; 4871  »¶y ; 4874 ¡©us = HAL_STATUS_SUCCESS ; 4875 »¶y : 4876 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_ENABLE , ¡©us ); 4877 } } 4879  $hªdË_di§bË_cmd (cÚ¡ * buf , ušt16_t Ën ) 4881 ušt8_t ¡©us ; 4883 ià(!( ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) { 4884 ¡©us = HAL_STATUS_SUCCESS ; 4885  »¶y ; 4889 `mgmt_ÿnûl_šdex ( mgmt_if , ad­‹r . šdex ); 4891 ià(! `£t_mode ( MGMT_OP_SET_POWERED , 0x00)) { 4892 ¡©us = HAL_STATUS_FAILED ; 4893  »¶y ; 4896 ¡©us = HAL_STATUS_SUCCESS ; 4897 »¶y : 4898 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_DISABLE , ¡©us ); 4899 } } 4901  $hªdË_g‘_ad­‹r_´Ýs_cmd (cÚ¡ * buf , ušt16_t Ën ) 4903 `g‘_ad­‹r_´Ý”t›s (); 4905 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 4906 HAL_OP_GET_ADAPTER_PROPS , HAL_STATUS_SUCCESS ); 4907 } } 4909  $hªdË_g‘_»mÙe_deviû_´Ýs_cmd (cÚ¡ * buf , ušt16_t Ën ) 4911 cÚ¡  h®_cmd_g‘_»mÙe_deviû_´Ýs * cmd = buf ; 4912  deviû * dev ; 4913 ušt8_t ¡©us ; 4915 dev = `fšd_deviû_ªdroid ( cmd -> bdaddr ); 4916 ià(! dev ) { 4917 ¡©us = HAL_STATUS_INVALID ; 4918  çžed ; 4921 `g‘_»mÙe_deviû_´Ýs ( dev ); 4923 ¡©us = HAL_STATUS_SUCCESS ; 4925 çžed : 4926 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 4927 HAL_OP_GET_REMOTE_DEVICE_PROPS , ¡©us ); 4928 } } 4930  $hªdË_g‘_»mÙe_deviû_´Ý_cmd (cÚ¡ * buf , ušt16_t Ën ) 4932 cÚ¡  h®_cmd_g‘_»mÙe_deviû_´Ý * cmd = buf ; 4933  deviû * dev ; 4934 ušt8_t ¡©us ; 4936 dev = `fšd_deviû_ªdroid ( cmd -> bdaddr ); 4937 ià(! dev ) { 4938 ¡©us = HAL_STATUS_INVALID ; 4939  çžed ; 4942  cmd -> ty³ ) { 4943  HAL_PROP_DEVICE_NAME : 4944 ¡©us = `g‘_deviû_Çme ( dev ); 4946  HAL_PROP_DEVICE_UUIDS : 4947 ¡©us = `g‘_deviû_uuids ( dev ); 4949  HAL_PROP_DEVICE_CLASS : 4950 ¡©us = `g‘_deviû_þass ( dev ); 4952  HAL_PROP_DEVICE_TYPE : 4953 ¡©us = `g‘_deviû_ty³ ( dev ); 4955  HAL_PROP_DEVICE_SERVICE_REC : 4956 ¡©us = `g‘_deviû_£rviû_»c ( dev ); 4958  HAL_PROP_DEVICE_FRIENDLY_NAME : 4959 ¡©us = `g‘_deviû_ä›ndly_Çme ( dev ); 4961  HAL_PROP_DEVICE_RSSI : 4962 ¡©us = `g‘_deviû_rssi ( dev ); 4964  HAL_PROP_DEVICE_VERSION_INFO : 4965 ¡©us = `g‘_deviû_v”siÚ_šfo ( dev ); 4967  HAL_PROP_DEVICE_TIMESTAMP : 4968 ¡©us = `g‘_deviû_time¡amp ( dev ); 4971 ¡©us = HAL_STATUS_FAILED ; 4975 ià( ¡©us !ð HAL_STATUS_SUCCESS ) 4976 `”rÜ ("Failedo get device…roperty (type %u status %u)", 4977 cmd -> ty³ , ¡©us ); 4979 çžed : 4980 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 4981 HAL_OP_GET_REMOTE_DEVICE_PROP , ¡©us ); 4982 } } 4984  ušt8_t $£t_deviû_ä›ndly_Çme ( deviû * dev , cÚ¡ ušt8_t * v® , 4985 ušt16_t Ën ) 4987 `DBG (""); 4989 `g_ä“ ( dev -> ä›ndly_Çme ); 4990 dev -> ä›ndly_Çme = `g_¡ºdup ((cÚ¡ *è v® , Ën ); 4992 ià( dev -> b»dr_·œed || dev-> Ë_·œed ) 4993 `¡Üe_deviû_šfo ( dev , DEVICES_FILE ); 4995 `¡Üe_deviû_šfo ( dev , CACHE_FILE ); 4997  HAL_STATUS_SUCCESS ; 4998 } } 5000  ušt8_t $£t_deviû_v”siÚ_šfo ( deviû * dev ) 5002 `DBG ("Not implemented"); 5006  HAL_STATUS_FAILED ; 5007 } } 5009  $hªdË_£t_»mÙe_deviû_´Ý_cmd (cÚ¡ * buf , ušt16_t Ën ) 5011 cÚ¡  h®_cmd_£t_»mÙe_deviû_´Ý * cmd = buf ; 5012  deviû * dev ; 5013 ušt8_t ¡©us ; 5015 ià( Ën !ð(* cmd ) + cmd->len) { 5016 `”rÜ ("Invalid set„emote device…rop cmd (0x%x),erminating", 5017 cmd -> ty³ ); 5018 `¿i£ ( SIGTERM ); 5022 dev = `fšd_deviû_ªdroid ( cmd -> bdaddr ); 5023 ià(! dev ) { 5024 ¡©us = HAL_STATUS_INVALID ; 5025  çžed ; 5028  cmd -> ty³ ) { 5029  HAL_PROP_DEVICE_FRIENDLY_NAME : 5030 ¡©us = `£t_deviû_ä›ndly_Çme ( dev , cmd -> v® , cmd-> Ën ); 5032  HAL_PROP_DEVICE_VERSION_INFO : 5033 ¡©us = `£t_deviû_v”siÚ_šfo ( dev ); 5036 ¡©us = HAL_STATUS_FAILED ; 5040 ià( ¡©us !ð HAL_STATUS_SUCCESS ) 5041 `”rÜ ("Failedo set device…roperty (type %u status %u)", 5042 cmd -> ty³ , ¡©us ); 5044 çžed : 5045 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 5046 HAL_OP_SET_REMOTE_DEVICE_PROP , ¡©us ); 5047 } } 5049  $hªdË_g‘_»mÙe_£rviû_»c_cmd (cÚ¡ * buf , ušt16_t Ën ) 5051 cÚ¡  h®_cmd_g‘_»mÙe_£rviû_»c * cmd = buf ; 5052 ušt8_t ¡©us ; 5053 bdaddr_t addr ; 5055 `ªdroid2bdaddr (& cmd -> bdaddr , & addr ); 5057 ¡©us = `fšd_»mÙe_sdp_»c (& addr , cmd -> uuid ); 5059 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 5060 HAL_OP_GET_REMOTE_SERVICE_REC , ¡©us ); 5061 } } 5063  $hªdË_¡¬t_discov”y_cmd (cÚ¡ * buf , ušt16_t Ën ) 5065 ušt8_t ¡©us ; 5067 ià(!( ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) { 5068 ¡©us = HAL_STATUS_NOT_READY ; 5069  çžed ; 5072  ad­‹r . cur_discov”y_ty³ ) { 5073  SCAN_TYPE_DUAL : 5074  SCAN_TYPE_BREDR : 5076  SCAN_TYPE_NONE : 5077 ià(! `¡¬t_discov”y ( SCAN_TYPE_DUAL )) { 5078 ¡©us = HAL_STATUS_FAILED ; 5079  çžed ; 5083  SCAN_TYPE_LE : 5084 ià( `g‘_suµÜ‹d_discov”y_ty³ (è=ð SCAN_TYPE_LE ) 5087 ià(! `¡Ý_discov”y ( SCAN_TYPE_LE )) { 5088 ¡©us = HAL_STATUS_FAILED ; 5089  çžed ; 5092 ad­‹r . exp_discov”y_ty³ = SCAN_TYPE_DUAL ; 5096 ¡©us = HAL_STATUS_SUCCESS ; 5098 çžed : 5099 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_START_DISCOVERY , 5100 ¡©us ); 5101 } } 5103  $hªdË_ÿnûl_discov”y_cmd (cÚ¡ * buf , ušt16_t Ën ) 5105 ušt8_t ¡©us ; 5107 ià(!( ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) { 5108 ¡©us = HAL_STATUS_NOT_READY ; 5109  çžed ; 5112  ad­‹r . cur_discov”y_ty³ ) { 5113  SCAN_TYPE_NONE : 5115  SCAN_TYPE_LE : 5116 ià( `g‘_suµÜ‹d_discov”y_ty³ (è!ð SCAN_TYPE_LE ) 5119 ià( ad­‹r . exp_discov”y_ty³ =ð SCAN_TYPE_LE ) { 5120 ¡©us = HAL_STATUS_BUSY ; 5121  çžed ; 5124 ià(! `¡Ý_discov”y ( SCAN_TYPE_LE )) { 5125 ¡©us = HAL_STATUS_FAILED ; 5126  çžed ; 5130  SCAN_TYPE_DUAL : 5131  SCAN_TYPE_BREDR : 5132 ià(! `¡Ý_discov”y ( SCAN_TYPE_DUAL )) { 5133 ¡©us = HAL_STATUS_FAILED ; 5134  çžed ; 5137 ià( ad­‹r . exp_discov”y_ty³ !ð SCAN_TYPE_LE ) 5138 ad­‹r . exp_discov”y_ty³ = SCAN_TYPE_NONE ; 5143 ¡©us = HAL_STATUS_SUCCESS ; 5145 çžed : 5146 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_CANCEL_DISCOVERY , 5147 ¡©us ); 5148 } } 5150  $hªdË_dut_mode_cÚf_cmd (cÚ¡ * buf , ušt16_t Ën ) 5152 cÚ¡  h®_cmd_dut_mode_cÚf * cmd = buf ; 5153  ·th [ FILENAME_MAX ]; 5154 ušt8_t ¡©us ; 5155  fd , »t ; 5157 `DBG ("’abË %u", cmd -> ’abË ); 5159 `¢´štf ( ·th , Õ©h), DUT_MODE_FILE , ad­‹r . šdex ); 5161 fd = `Ý’ ( ·th , O_WRONLY ); 5162 ià( fd < 0) { 5163 ¡©us = HAL_STATUS_FAILED ; 5164  çžed ; 5167 ià( cmd -> ’abË ) 5168 »t = `wr™e ( fd , "1", ("1")); 5170 »t = `wr™e ( fd , "0", ("0")); 5172 ià( »t < 0) 5173 ¡©us = HAL_STATUS_FAILED ; 5175 ¡©us = HAL_STATUS_SUCCESS ; 5177 `þo£ ( fd ); 5179 çžed : 5180 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_DUT_MODE_CONF , 5181 ¡©us ); 5182 } } 5184  $hªdË_dut_mode_£nd_cmd (cÚ¡ * buf , ušt16_t Ën ) 5186 cÚ¡  h®_cmd_dut_mode_£nd * cmd = buf ; 5188 ià( Ën !ð(* cmd ) + cmd->len) { 5189 `”rÜ ("Invalid dut mode send cmd,erminating"); 5190 `¿i£ ( SIGTERM ); 5194 `”rÜ ("dut_mode_£nd‚Ù suµÜ‹d (cmd opcod%u)", cmd -> Ýcode ); 5198 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_DUT_MODE_SEND , 5199 HAL_STATUS_FAILED ); 5200 } } 5202  $hªdË_Ë_‹¡_mode_cmd (cÚ¡ * buf , ušt16_t Ën ) 5204 cÚ¡  h®_cmd_Ë_‹¡_mode * cmd = buf ; 5206 ià( Ën !ð(* cmd ) + cmd->len) { 5207 `”rÜ ("Invalid†eest mode cmd,erminating"); 5208 `¿i£ ( SIGTERM ); 5212 `”rÜ ("Ë_‹¡_modnÙ suµÜ‹d (cmd opcod%u)", cmd -> Ýcode ); 5216 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_LE_TEST_MODE , 5217 HAL_STATUS_FAILED ); 5218 } } 5220  $hªdË_g‘_cÚÃùiÚ_¡©e (cÚ¡ * buf , ušt16_t Ën ) 5222 cÚ¡  h®_cmd_g‘_cÚÃùiÚ_¡©e * cmd = buf ; 5223  h®_r¥_g‘_cÚÃùiÚ_¡©e r¥ ; 5224  add»ss [18]; 5225 bdaddr_t bdaddr ; 5227 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 5228 `ba2¡r (& bdaddr , add»ss ); 5230 `DBG ("%s", add»ss ); 5234 r¥ . cÚÃùiÚ_¡©e = 0; 5236 `c_£nd_r¥_fuÎ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , 5237 HAL_OP_GET_CONNECTION_STATE , ( r¥ ), &rsp, 5239 } } 5241  $hªdË_»ad_’”gy_šfo (cÚ¡ * buf , ušt16_t Ën ) 5243 `DBG (""); 5247 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_BLUETOOTH , HAL_OP_READ_ENERGY_INFO , 5248 HAL_STATUS_UNSUPPORTED ); 5249 } } 5251 cÚ¡  c_hªdËr gcmd_hªdËrs [] = { 5253 { hªdË_’abË_cmd , çl£ , 0 }, 5255 { hªdË_di§bË_cmd , çl£ , 0 }, 5257 { hªdË_g‘_ad­‹r_´Ýs_cmd , çl£ , 0 }, 5259 { hªdË_g‘_ad­‹r_´Ý_cmd , çl£ , 5260 ( h®_cmd_g‘_ad­‹r_´Ý ) }, 5262 { hªdË_£t_ad­‹r_´Ý_cmd , Œue , 5263 ( h®_cmd_£t_ad­‹r_´Ý ) }, 5265 { hªdË_g‘_»mÙe_deviû_´Ýs_cmd , çl£ , 5266 ( h®_cmd_g‘_»mÙe_deviû_´Ýs ) }, 5268 { hªdË_g‘_»mÙe_deviû_´Ý_cmd , çl£ , 5269 ( h®_cmd_g‘_»mÙe_deviû_´Ý ) }, 5271 { hªdË_£t_»mÙe_deviû_´Ý_cmd , Œue , 5272 ( h®_cmd_£t_»mÙe_deviû_´Ý ) }, 5274 { hªdË_g‘_»mÙe_£rviû_»c_cmd , çl£ , 5275 ( h®_cmd_g‘_»mÙe_£rviû_»c ) }, 5277 { hªdË_g‘_»mÙe_£rviûs_cmd , çl£ , 5278 ( h®_cmd_g‘_»mÙe_£rviûs ) }, 5280 { hªdË_¡¬t_discov”y_cmd , çl£ , 0 }, 5282 { hªdË_ÿnûl_discov”y_cmd , çl£ , 0 }, 5284 { hªdË_ü—‹_bÚd_cmd , çl£ , ( h®_cmd_ü—‹_bÚd ) }, 5286 { hªdË_»move_bÚd_cmd , çl£ , ( h®_cmd_»move_bÚd ) }, 5288 { hªdË_ÿnûl_bÚd_cmd , çl£ , ( h®_cmd_ÿnûl_bÚd ) }, 5290 { hªdË_pš_»¶y_cmd , çl£ , ( h®_cmd_pš_»¶y ) }, 5292 { hªdË_s¥_»¶y_cmd , çl£ , ( h®_cmd_s¥_»¶y ) }, 5294 { hªdË_dut_mode_cÚf_cmd , çl£ , 5295 ( h®_cmd_dut_mode_cÚf ) }, 5297 { hªdË_dut_mode_£nd_cmd , Œue , 5298 ( h®_cmd_dut_mode_£nd ) }, 5300 { hªdË_Ë_‹¡_mode_cmd , Œue , ( h®_cmd_Ë_‹¡_mode ) }, 5302 { hªdË_g‘_cÚÃùiÚ_¡©e , çl£ , 5303 ( h®_cmd_g‘_cÚÃùiÚ_¡©e ) }, 5305 { hªdË_»ad_’”gy_šfo , çl£ , 0 }, 5308 boÞ $bt_blu‘oÙh_»gi¡” ( c *c, ušt8_t mode ) 5310 ušt32_t missšg_£‰šgs ; 5312 `DBG ("mod0x%x", mode ); 5314 uÅaœed_cb_li¡ = `queue_Ãw (); 5315 ià(! uÅaœed_cb_li¡ ) { 5316 `”rÜ ("Cannot‡llocate queue for unpaired callbacks"); 5317  çl£ ; 5320 ·œed_cb_li¡ = `queue_Ãw (); 5321 ià(! ·œed_cb_li¡ ) { 5322 `”rÜ ("Cannot‡llocate queue for…aired callbacks"); 5323 `queue_de¡roy ( uÅaœed_cb_li¡ , NULL ); 5324 uÅaœed_cb_li¡ = NULL ; 5325  çl£ ; 5328 missšg_£‰šgs = ad­‹r . cu¼’t_£‰šgs ^ 5329 ad­‹r . suµÜ‹d_£‰šgs ; 5331  mode ) { 5332  HAL_MODE_DEFAULT : 5333 ià( missšg_£‰šgs & MGMT_SETTING_BREDR ) 5334 `£t_mode ( MGMT_OP_SET_BREDR , 0x01); 5336 ià( missšg_£‰šgs & MGMT_SETTING_LE ) 5337 `£t_mode ( MGMT_OP_SET_LE , 0x01); 5339  HAL_MODE_LE : 5341 ià(!( ad­‹r . suµÜ‹d_£‰šgs & MGMT_SETTING_LE )) { 5342 `”rÜ ("LE Mode‚ot supported by controller"); 5343  çžed ; 5347 ià(!( ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_LE )) 5348 `£t_mode ( MGMT_OP_SET_LE , 0x01); 5351 ià( ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_BREDR ) 5352 `£t_mode ( MGMT_OP_SET_BREDR , 0x00); 5354  HAL_MODE_BREDR : 5356 ià(!( ad­‹r . suµÜ‹d_£‰šgs & MGMT_SETTING_BREDR )) { 5357 `”rÜ ("BR/EDR Mode‚ot supported"); 5358  çžed ; 5362 ià( missšg_£‰šgs & MGMT_SETTING_BREDR ) 5363 `£t_mode ( MGMT_OP_SET_BREDR , 0x01); 5371 ià( ad­‹r . cu¼’t_£‰šgs & MGMT_SETTING_LE ) 5372 `£t_mode ( MGMT_OP_SET_LE , 0x00); 5375 `”rÜ ("UnknowÀmod0x%x", mode ); 5376  çžed ; 5380 ià(! ad­‹r . Çme ) { 5381 ad­‹r . Çme = `g_¡rdup ( `bt_cÚfig_g‘_mod– ()); 5382 `£t_ad­‹r_Çme (( ušt8_t *) ad­‹r . Çme , `¡¾’ (adapter.name)); 5385 h®_c = c ; 5387 `c_»gi¡” ( h®_c , HAL_SERVICE_ID_BLUETOOTH , cmd_hªdËrs , 5388 `G_N_ELEMENTS ( cmd_hªdËrs )); 5390  Œue ; 5392 çžed : 5393 `queue_de¡roy ( uÅaœed_cb_li¡ , NULL ); 5394 uÅaœed_cb_li¡ = NULL ; 5395 `queue_de¡roy ( ·œed_cb_li¡ , NULL ); 5396 ·œed_cb_li¡ = NULL ; 5398  çl£ ; 5399 } } 5401  $bt_blu‘oÙh_uÄegi¡” () 5403 `DBG (""); 5405 `g_¦i¡_ä“_fuÎ ( bÚded_deviûs , ( GDe¡royNÙify è ä“_deviû ); 5406 bÚded_deviûs = NULL ; 5408 `g_¦i¡_ä“_fuÎ ( ÿched_deviûs , ( GDe¡royNÙify è ä“_deviû ); 5409 ÿched_deviûs = NULL ; 5411 `c_uÄegi¡” ( h®_c , HAL_SERVICE_ID_CORE ); 5412 h®_c = NULL ; 5414 `queue_de¡roy ( uÅaœed_cb_li¡ , NULL ); 5415 uÅaœed_cb_li¡ = NULL ; 5417 `queue_de¡roy ( ·œed_cb_li¡ , NULL ); 5418 ·œed_cb_li¡ = NULL ; 5419 } } @android/bluetooth.h 24 ebt_c¤k_ty³ { 25 mLOCAL_CSRK , 26 mREMOTE_CSRK , 29 (* tbt_blu‘oÙh_»ady )( t”r , cÚ¡ tbdaddr_t * taddr ); 30 boÞ `bt_blu‘oÙh_¡¬t ( šdex , boÞ mgmt_dbg , bt_blu‘oÙh_»ady cb ); 32 (* tbt_blu‘oÙh_¡Ý³d )(); 33 boÞ `bt_blu‘oÙh_¡Ý ( bt_blu‘oÙh_¡Ý³d cb ); 35  `bt_blu‘oÙh_þ—nup (); 37 boÞ `bt_blu‘oÙh_»gi¡” ( c *c, ušt8_t mode ); 38  `bt_blu‘oÙh_uÄegi¡” (); 40  `bt_ad­‹r_add_»cÜd ( sdp_»cÜd_t * »c , ušt8_t svc_hšt ); 41  `bt_ad­‹r_»move_»cÜd ( ušt32_t hªdË ); 43 (* tbt_Ë_deviû_found )(cÚ¡ tbdaddr_t * taddr , tušt8_t taddr_ty³ , 44  trssi , tušt16_t teœ_Ën , 45 cÚ¡ * teœ , tboÞ tcÚÃùabË , 46 tboÞ tbÚded ); 47 boÞ `bt_Ë_»gi¡” ( bt_Ë_deviû_found cb ); 48  `bt_Ë_uÄegi¡” (); 50 boÞ `bt_Ë_discov”y_¡¬t (); 52 (* tbt_Ë_discov”y_¡Ý³d )(); 53 boÞ `bt_Ë_discov”y_¡Ý ( bt_Ë_discov”y_¡Ý³d cb ); 55 (* tbt_Ë_£t_adv”tisšg_dÚe )( tušt8_t t¡©us , * tu£r_d©a ); 56 boÞ `bt_Ë_£t_adv”tisšg (boÞ adv”tisšg , bt_Ë_£t_adv”tisšg_dÚe cb , 57 * u£r_d©a ); 59 ušt8_t `bt_g‘_deviû_ªdroid_ty³ (cÚ¡ bdaddr_t * addr ); 60 boÞ `bt_is_deviû_Ë (cÚ¡ bdaddr_t * addr ); 61 ušt8_t `bt_deviû_Ï¡_£’_b—»r (cÚ¡ bdaddr_t * bdaddr ); 63 cÚ¡ * `bt_g‘_ad­‹r_Çme (); 64 boÞ `bt_deviû_is_bÚded (cÚ¡ bdaddr_t * bdaddr ); 65 boÞ `bt_deviû_£t_uuids (cÚ¡ bdaddr_t * bdaddr , GSLi¡ * uuids ); 67 (* tbt_»ad_deviû_rssi_dÚe )( tušt8_t t¡©us , cÚ¡ tbdaddr_t * taddr , 68 tšt8_t trssi , * tu£r_d©a ); 69 boÞ `bt_»ad_deviû_rssi (cÚ¡ bdaddr_t * addr , bt_»ad_deviû_rssi_dÚe cb , 70 * u£r_d©a ); 72 boÞ `bt_g‘_c¤k (cÚ¡ bdaddr_t * addr , bt_c¤k_ty³ ty³ , 73 ušt8_t key [16], ušt32_t * sign_út ); 75  `bt_upd©e_sign_couÁ” (cÚ¡ bdaddr_t * addr , bt_c¤k_ty³ ty³ , 76 ušt32_t v® ); 78  `bt_¡Üe_g©t_ccc (cÚ¡ bdaddr_t * addr , ušt16_t v®ue ); 80 ušt16_t `bt_g‘_g©t_ccc (cÚ¡ bdaddr_t * addr ); 82 cÚ¡ bdaddr_t * `bt_g‘_id_addr (cÚ¡ bdaddr_ˆ* addr , ušt8_t * ty³ ); 84 boÞ `bt_k”Ãl_cÚn_cÚŒÞ (); 86 boÞ `bt_auto_cÚÃù_add (cÚ¡ bdaddr_t * addr ); 88  `bt_auto_cÚÃù_»move (cÚ¡ bdaddr_t * addr ); 90 (* tbt_uÅaœed_deviû_cb )(cÚ¡ tbdaddr_t * taddr , tušt8_t tty³ ); 91 boÞ `bt_uÅaœed_»gi¡” ( bt_uÅaœed_deviû_cb cb ); 92  `bt_uÅaœed_uÄegi¡” ( bt_uÅaœed_deviû_cb cb ); 94 (* tbt_·œed_deviû_cb )(cÚ¡ tbdaddr_t * taddr , tušt8_t tty³ ); 95 boÞ `bt_·œed_»gi¡” ( bt_·œed_deviû_cb cb ); 96  `bt_·œed_uÄegi¡” ( bt_·œed_deviû_cb cb ); 97 boÞ `bt_is_·œšg (cÚ¡ bdaddr_t * addr ); @android/bluetoothd-snoop.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<ùy³.h > 29  ~<¡dlib.h > 30  ~ 31 #ià defšed ( ANDROID ) 32  ~ 35  ~"lib/blu‘oÙh.h " 36  ~"lib/hci.h " 37  ~"lib/mgmt.h " 39  ~"mÚ™Ü/mašloÝ.h " 40  ~"¤c/sh¬ed/bt¢oÝ.h " 41  ~"¤c/log.h " 43  #DEFAULT_SNOOP_FILE "/sdÿrd/bt¢oÝ_hci.log" ) 45  bt¢oÝ * g¢oÝ = NULL ; 46  ušt8_t gmÚ™Ü_buf [ BTSNOOP_MAX_PACKET_SIZE ]; 47  gmÚ™Ü_fd = -1; 49  $sigÇl_ÿÎback ( signum , * u£r_d©a ) 51  signum ) { 52  SIGINT : 53  SIGTERM : 54 `mašloÝ_qu™ (); 57 } } 59  ušt32_t $g‘_æags_äom_Ýcode ( ušt16_t Ýcode ) 61  Ýcode ) { 62  BTSNOOP_OPCODE_NEW_INDEX : 63  BTSNOOP_OPCODE_DEL_INDEX : 65  BTSNOOP_OPCODE_COMMAND_PKT : 67  BTSNOOP_OPCODE_EVENT_PKT : 69  BTSNOOP_OPCODE_ACL_TX_PKT : 71  BTSNOOP_OPCODE_ACL_RX_PKT : 73  BTSNOOP_OPCODE_SCO_TX_PKT : 74  BTSNOOP_OPCODE_SCO_RX_PKT : 79 } } 81  $d©a_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 83  cÚŒÞ [32]; 84  mgmt_hdr hdr ; 85  msghdr msg ; 86  iovec iov [2]; 88 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 89 `mašloÝ_»move_fd ( mÚ™Ü_fd ); 93 iov [0]. iov_ba£ = & hdr ; 94 iov [0]. iov_Ën = MGMT_HDR_SIZE ; 95 iov [1]. iov_ba£ = mÚ™Ü_buf ; 96 iov [1]. iov_Ën = ( mÚ™Ü_buf ); 98 `mem£t (& msg , 0, (msg)); 99 msg . msg_iov = iov ; 100 msg . msg_iovËn = 2; 101 msg . msg_cÚŒÞ = cÚŒÞ ; 102 msg . msg_cÚŒÞËn = ( cÚŒÞ ); 104  Œue ) { 105  cmsghdr * cmsg ; 106  timev® * tv = NULL ; 107  timev® ùv ; 108 ušt16_t Ýcode , šdex , pkŽ’ ; 109 ušt32_t æags ; 110 ssize_t Ën ; 112 Ën = `»cvmsg ( mÚ™Ü_fd , & msg , MSG_DONTWAIT ); 113 ià( Ën < 0) 116 ià( Ën < MGMT_HDR_SIZE ) 119  cmsg = `CMSG_FIRSTHDR (& msg ); cmsg !ð NULL ; 120 cmsg = `CMSG_NXTHDR (& msg , cmsg)) { 121 ià( cmsg -> cmsg_Ëv– !ð SOL_SOCKET ) 124 ià( cmsg -> cmsg_ty³ =ð SCM_TIMESTAMP ) { 125 `memýy (& ùv , `CMSG_DATA ( cmsg ), (ctv)); 126 tv = & ùv ; 130 Ýcode = `btohs ( hdr .opcode); 131 šdex = `btohs ( hdr .index); 132 pkŽ’ = `btohs ( hdr . Ën ); 134 ià( šdex ) 137 æags = `g‘_æags_äom_Ýcode ( Ýcode ); 138 ià( æags != 0xff) 139 `bt¢oÝ_wr™e ( ¢oÝ , tv , æags , mÚ™Ü_buf , pkŽ’ ); 141 } } 143  $Ý’_mÚ™Ü (cÚ¡ * ·th ) 145  sockaddr_hci addr ; 146  Ýt = 1; 148 ¢oÝ = `bt¢oÝ_ü—‹ ( ·th , BTSNOOP_TYPE_HCI ); 149 ià(! ¢oÝ ) 152 mÚ™Ü_fd = `sock‘ ( AF_BLUETOOTH , SOCK_RAW | SOCK_CLOEXEC , BTPROTO_HCI ); 153 ià( mÚ™Ü_fd < 0) 154  çžed ; 156 `mem£t (& addr , 0, (addr)); 157 addr . hci_çmžy = AF_BLUETOOTH ; 158 addr . hci_dev = HCI_DEV_NONE ; 159 addr . hci_chªÃl = HCI_CHANNEL_MONITOR ; 161 ià( `bšd ( mÚ™Ü_fd , ( sockaddr *è& addr , (addr)) < 0) 162  çžed_þo£ ; 164 ià( `£tsockÝt ( mÚ™Ü_fd , SOL_SOCKET , SO_TIMESTAMP , & Ýt , (opt)) 166  çžed_þo£ ; 168 `mašloÝ_add_fd ( mÚ™Ü_fd , EPOLLIN , d©a_ÿÎback , NULL , NULL); 172 çžed_þo£ : 173 `þo£ ( mÚ™Ü_fd ); 174 mÚ™Ü_fd = -1; 176 çžed : 177 `bt¢oÝ_uÄef ( ¢oÝ ); 178 ¢oÝ = NULL ; 181 } } 183  $þo£_mÚ™Ü () 185 `bt¢oÝ_uÄef ( ¢oÝ ); 186 ¢oÝ = NULL ; 188 `þo£ ( mÚ™Ü_fd ); 189 mÚ™Ü_fd = -1; 190 } } 192  $£t_ÿ·bž™›s () 194 #ià `defšed ( ANDROID ) 195  __u£r_ÿp_h—d”_¡ruù h—d” ; 196  __u£r_ÿp_d©a_¡ruù ÿp ; 198 h—d” . v”siÚ = _LINUX_CAPABILITY_VERSION ; 199 h—d” . pid = 0; 205 ÿp . efãùive = c­. ³rm™‹d = 206 `CAP_TO_MASK ( CAP_NET_RAW ) | 207 `CAP_TO_MASK ( CAP_DAC_READ_SEARCH ); 208 ÿp . šh”™abË = 0; 211 ià( `ÿp£t (& h—d” , & ÿp ) < 0) 212 `ex™ ( EXIT_FAILURE ); 214 } } 216  $maš ( ¬gc , * ¬gv []) 218 cÚ¡ * ·th ; 219 sig£t_t mask ; 221 `__btd_log_š™ ( NULL , 0); 223 `DBG (""); 225 `£t_ÿ·bž™›s (); 227 ià( ¬gc > 1) 228 ·th = ¬gv [1]; 230 ·th = DEFAULT_SNOOP_FILE ; 232 `mašloÝ_š™ (); 234 `sigem±y£t (& mask ); 235 `sigadd£t (& mask , SIGINT ); 236 `sigadd£t (& mask , SIGTERM ); 238 `mašloÝ_£t_sigÇl (& mask , sigÇl_ÿÎback , NULL , NULL); 240 ià(! `¡rcmp ( DEFAULT_SNOOP_FILE , ·th )) 241 `»Çme ( DEFAULT_SNOOP_FILE , DEFAULT_SNOOP_FILE ".old"); 243 ià( `Ý’_mÚ™Ü ( ·th ) < 0) { 244 `”rÜ ("bluetoothd_snoop: start failed"); 245  EXIT_FAILURE ; 248 `šfo ("bluetoothd_snoop: started"); 250 `mašloÝ_run (); 252 `þo£_mÚ™Ü (); 254 `šfo ("bluetoothd_snoop: stopped"); 256 `__btd_log_þ—nup (); 258  EXIT_SUCCESS ; 259 } } @android/bluetoothd-wrapper.c 18  ~<¡dio.h > 19  ~<¡dlib.h > 20  ~<¡ršg.h > 21  ~ 22  ~<¡dboÞ.h > 24  ~ 26  ~"h®-utžs.h " 28  #VALGRIND_BIN "/sy¡em/bš/v®gršd" ) 30  #BLUETOOTHD_BIN "/sy¡em/bš/blu‘oÙhd-maš" ) 32  $run_v®gršd ( debug ,  mgmt_dbg ) 34 * ´g_¬gv [7]; 35 * ´g_’vp [3]; 37 ´g_¬gv [0] = VALGRIND_BIN ; 38 ´g_¬gv [1] = "--leak-check=full"; 39 ´g_¬gv [2] = "--track-origins=yes"; 40 ´g_¬gv [3] = BLUETOOTHD_BIN ; 41 ´g_¬gv [4] = debug ? "-d" : NULL ; 42 ´g_¬gv [5] = mgmt_dbg ? "--mgmt-debug" : NULL ; 43 ´g_¬gv [6] = NULL ; 45 ´g_’vp [0] = "G_SLICE=always-malloc"; 46 ´g_’vp [1] = "G_DEBUG=gc-friendly"; 47 ´g_’vp [2] = NULL ; 49 `execve ( ´g_¬gv [0],…rg_¬gv, ´g_’vp ); 50 } } 52  $run_blu‘oÙhd ( debug ,  mgmt_dbg ) 54 * ´g_¬gv [4]; 55 * ´g_’vp [1]; 57 ´g_¬gv [0] = BLUETOOTHD_BIN ; 58 ´g_¬gv [1] = debug ? "-d" : NULL ; 59 ´g_¬gv [2] = mgmt_dbg ? "--mgmt-debug" : NULL ; 60 ´g_¬gv [3] = NULL ; 62 ´g_’vp [0] = NULL ; 64 `execve ( ´g_¬gv [0],…rg_¬gv, ´g_’vp ); 65 } } 67  $maš ( ¬gc , * ¬gv []) 69  v®ue [ PROPERTY_VALUE_MAX ]; 70  debug = 0; 71  mgmt_dbg = 0; 73 ià( `g‘_cÚfig ("debug", v®ue , NULL ) > 0 && 74 (! `¡rÿ£cmp ( v®ue , "Œue"è|| `©oi (value) > 0)) 75 debug = 1; 77 ià( `g‘_cÚfig ("mgmtdbg", v®ue , NULL ) > 0 && 78 (! `¡rÿ£cmp ( v®ue , "Œue"è|| `©oi (value) > 0)) { 79 debug = 1; 80 mgmt_dbg = 1; 83 ià( `g‘_cÚfig ("v®gršd", v®ue , NULL ) > 0 && 84 (! `¡rÿ£cmp ( v®ue , "Œue"è|| `©oi (value) > 0)) 85 `run_v®gršd ( debug , mgmt_dbg ); 91 `run_blu‘oÙhd ( debug , mgmt_dbg ); 94 } } @android/client/haltest.c 18 #ifdeà HAVE_CONFIG_H 19  ~ 22  ~<¡dlib.h > 23  ~<¡dboÞ.h > 24  ~<¡ršg.h > 25  ~<¡dio.h > 26  ~<¡d¬g.h > 27  ~ 28  ~ 29  ~ 30  ~ 32  ~"if-maš.h " 33  ~"‹rmš®.h " 34  ~"pÞlhªdËr.h " 35  ~"hi¡Üy.h " 37  ´oûss_lše (* lše_bufãr ); 39 cÚ¡  š‹rçû * gš‹rçûs [] = { 40 & audio_if , 41 & sco_if , 42 & blu‘oÙh_if , 43 & av_if , 44 & rc_if , 45 & g©t_if , 46 & g©t_þ›Á_if , 47 & g©t_£rv”_if , 48 & hf_if , 49 & hh_if , 50 & ·n_if , 51 & hl_if , 52 & sock_if , 53 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 54 & hf_þ›Á_if , 55 & mû_if , 56 & ù¾_rc_if , 57 & av_sšk_if , 59 NULL 62  m‘hod gcommªds []; 64  m‘hod * $g‘_m‘hod ( m‘hod * m‘hods , cÚ¡ * Çme ) 66  `¡rcmp ( m‘hods -> Çme , "") != 0) { 67 ià( `¡rcmp ( m‘hods -> Çme ,‚ame) == 0) 68  m‘hods ; 69 m‘hods ++; 72  NULL ; 73 } } 76 cÚ¡  š‹rçû * $g‘_š‹rçû (cÚ¡ * Çme ) 78  i ; 80  i = 0; š‹rçûs [i] !ð NULL ; ++i) { 81 ià( `¡rcmp ( š‹rçûs [ i ]-> Çme ,‚ame) == 0) 85  š‹rçûs [ i ]; 86 } } 88  $h®‹¡_”rÜ (cÚ¡ * fÜm© , ...) 90 va_li¡ ¬gs ; 91  »t ; 92 `va_¡¬t ( ¬gs , fÜm© ); 93 »t = `‹rmš®_v´št ( fÜm© , ¬gs ); 94 `va_’d ( ¬gs ); 95  »t ; 96 } } 98  $h®‹¡_šfo (cÚ¡ * fÜm© , ...) 100 va_li¡ ¬gs ; 101  »t ; 102 `va_¡¬t ( ¬gs , fÜm© ); 103 »t = `‹rmš®_v´št ( fÜm© , ¬gs ); 104 `va_’d ( ¬gs ); 105  »t ; 106 } } 108  $h®‹¡_w¬n (cÚ¡ * fÜm© , ...) 110 va_li¡ ¬gs ; 111  »t ; 112 `va_¡¬t ( ¬gs , fÜm© ); 113 »t = `‹rmš®_v´št ( fÜm© , ¬gs ); 114 `va_’d ( ¬gs ); 115  »t ; 116 } } 118  $h–p_´št_š‹rçû (cÚ¡  š‹rçû * i ) 120  m‘hod * m ; 122  m = i -> m‘hods ; `¡rcmp (m-> Çme , "") != 0; m++) 123 `h®‹¡_šfo ("% % %s\n", i -> Çme , m ->name, 124 ( m -> h–p ? m->help : "")); 125 } } 128  $h–p_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 129 ** u£r ) 131 ià( ¬gc == 2) 132 * ’um_func = š‹rçû_Çme ; 133 } } 136  $h–p_p ( ¬gc , cÚ¡ ** ¬gv ) 138 cÚ¡  m‘hod * m = commªds ; 139 cÚ¡  š‹rçû ** = š‹rçûs ; 140 cÚ¡  š‹rçû * i ; 142 ià( ¬gc == 1) { 143 `‹rmš®_´št ("haltest‡llowso call Android HAL methods.\n"); 144 `‹rmš®_´št ("\nAvailable commands:\n"); 145 0 !ð `¡rcmp ( m -> Çme , "")) { 146 `‹rmš®_´št ("\t% %s\n", m -> Çme , 147 ( m -> h–p ? m->help : "")); 148 m ++; 151 `‹rmš®_´št ("\nAvailable interfaceso use:\n"); 152  NULL !ð* ) { 153 `‹rmš®_´št ("\t%s\n", (* )-> Çme ); 154 ++; 157 `‹rmš®_´št ("\nTo get help on methods forƒach interfaceype:\n"); 158 `‹rmš®_´št ("\n\thelp \n"); 159 `‹rmš®_´št ("\nBasic scenario:\n\tbluetooth init\n"); 160 `‹rmš®_´št ("\tbluetoothƒnable\n\tbluetooth start_discovery\n"); 161 `‹rmš®_´št ("\tbluetooth get_profile_interface handsfree\n"); 162 `‹rmš®_´št ("\thandsfree init\n\n"); 166 i = `g‘_š‹rçû ( ¬gv [1]); 167 ià( i =ð NULL ) { 168 `h®‹¡_”rÜ ("No such interface\n"); 172 `h–p_´št_š‹rçû ( i ); 173 } } 176  $qu™_p ( ¬gc , cÚ¡ ** ¬gv ) 178  þ—nup_audio [] = "audio cleanup"; 180 `þo£_hw_bt_dev (); 181 `´oûss_lše ( þ—nup_audio ); 183 `ex™ (0); 184 } } 186  gfd_¡ack [10]; 187  gfd_¡ack_poš‹r = 0; 189  ¡dš_hªdËr ( pÞlfd *pollfd); 191  $´oûss_fže (cÚ¡ * Çme ) 193  fd = `Ý’ ( Çme , O_RDONLY ); 195 ià( fd < 0) { 196 `h®‹¡_”rÜ ("Cª'ˆÝ’ fže: % fÜ„—dšg\n", Çme ); 200 ià( fd_¡ack_poš‹r >= 10) { 201 `h®‹¡_”rÜ ("To many open files\n"); 202 `þo£ ( fd ); 206 fd_¡ack [ fd_¡ack_poš‹r ++] = fd ; 207 `pÞl_uÄegi¡”_fd ( fd_¡ack [ fd_¡ack_poš‹r - 2], ¡dš_hªdËr ); 208 `pÞl_»gi¡”_fd ( fd_¡ack [ fd_¡ack_poš‹r - 1], POLLIN , ¡dš_hªdËr ); 209 } } 211  $sourû_p ( ¬gc , cÚ¡ ** ¬gv ) 213 ià( ¬gc < 2) { 214 `h®‹¡_”rÜ ("No file specified"); 218 `´oûss_fže ( ¬gv [1]); 219 } } 222  m‘hod gcommªds [] = { 223 STD_METHODCH ( h–p , "[]"), 224 STD_METHOD ( qu™ ), 225 METHOD ("ex™", qu™_p , NULL , NULL), 226 STD_METHODH ( sourû , ""), 227 END_METHOD 231  m‘hod * $g‘_commªd (cÚ¡ * Çme ) 233  `g‘_m‘hod ( commªds , Çme ); 234 } } 237 cÚ¡ * $š‹rçû_Çme (* v ,  i ) 239  š‹rçûs [ i ] ? iÁ”çûs[i]-> Çme : NULL ; 240 } } 243 cÚ¡ * $commªd_Çme (* v ,  i ) 245  cmd_út = `NELEM ( commªds ); 247 ià( i >ð cmd_út ) 248  `š‹rçû_Çme ( v , i - cmd_út ); 250  commªds [ i ]. Çme ; 251 } } 259  $commªd_lše_to_¬gv (* lše_bufãr , * ¬gv [],  ¬gv_size ) 261 cÚ¡ * tok’_b»aks = "\r\n\t "; 262 * tok’ ; 263  ¬gc = 0; 265 tok’ = `¡¹ok ( lše_bufãr , tok’_b»aks ); 266  tok’ !ð NULL && ¬gc < (è ¬gv_size ) { 267 ¬gv [ ¬gc ++] = tok’ ; 268 tok’ = `¡¹ok ( NULL , tok’_b»aks ); 271  ¬gc ; 272 } } 274  $´oûss_lše (* lše_bufãr ) 276 * ¬gv [50]; 277  ¬gc ; 278  i = 0; 279  m‘hod * m ; 281 ¬gc = `commªd_lše_to_¬gv ( lše_bufãr , ¬gv , 50); 282 ià( ¬gc < 1) 285  š‹rçûs [ i ] !ð NULL ) { 286 ià( `¡rcmp ( š‹rçûs [ i ]-> Çme , ¬gv [0])) { 287 i ++; 291 ià( ¬gc < 2 || `¡rcmp ( ¬gv [1], "?") == 0) { 292 `h–p_´št_š‹rçû ( š‹rçûs [ i ]); 296 m = `g‘_m‘hod ( š‹rçûs [ i ]-> m‘hods , ¬gv [1]); 297 ià( m !ð NULL ) { 298 m -> `func ( ¬gc , (cÚ¡ **è ¬gv ); 302 `h®‹¡_”rÜ ("NØfunùiÚ % found\n", ¬gv [1]); 306 m = `g‘_commªd ( ¬gv [0]); 307 ià( m =ð NULL ) 308 `h®‹¡_”rÜ ("NØsuch commªd %s\n", ¬gv [0]); 310 m -> `func ( ¬gc , (cÚ¡ **è ¬gv ); 311 } } 314  $¡dš_hªdËr ( pÞlfd *pollfd) 316  buf [10]; 318 ià( pÞlfd -> »v’ts & POLLIN ) { 319  couÁ = `»ad ( fd_¡ack [ fd_¡ack_poš‹r - 1], buf , 10); 321 ià( couÁ > 0) { 322  i ; 324  i = 0; i < couÁ ; ++i) 325 `‹rmš®_´oûss_ch¬ ( buf [ i ], ´oûss_lše ); 330 ià( fd_¡ack_poš‹r > 1) 331 `pÞl_»gi¡”_fd ( fd_¡ack [ fd_¡ack_poš‹r - 2], POLLIN , 332 ¡dš_hªdËr ); 333 ià( fd_¡ack_poš‹r > 0) { 334 `pÞl_uÄegi¡”_fd ( fd_¡ack [-- fd_¡ack_poš‹r ], ¡dš_hªdËr ); 336 ià( fd_¡ack [ fd_¡ack_poš‹r ]) 337 `þo£ ( fd_¡ack [ fd_¡ack_poš‹r ]); 339 } } 341  $u§ge () 343 `´štf ("haltest Android Bluetooth HALestingool\n" 345 `´štf ("\thaltest [options]\n"); 346 `´štf ("options:\n" 351 } } 353  $´št_v”siÚ () 355 `´štf ("h®‹¡ v”siÚ %s\n", VERSION ); 356 } } 358 cÚ¡  ÝtiÚ gmaš_ÝtiÚs [] = { 359 { "no-š™", no_¬gum’t , NULL , 'n' }, 360 { "ivi", no_¬gum’t , NULL , 'i' }, 361 { "h–p", no_¬gum’t , NULL , 'h' }, 362 { "v”siÚ", no_¬gum’t , NULL , 'v' }, 363 { NULL } 366  boÞ gno_š™ = çl£ ; 367  boÞ givi_Úly = çl£ ; 369  $·r£_commªd_lše ( ¬gc , * ¬gv []) 372  Ýt ; 374 Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "šhv", maš_ÝtiÚs , NULL ); 375 ià( Ýt < 0) 378  Ýt ) { 380 no_š™ = Œue ; 383 ivi_Úly = Œue ; 386 `u§ge (); 387 `ex™ (0); 389 `´št_v”siÚ (); 390 `ex™ (0); 392 `putch¬ ('\n'); 393 `ex™ (-1); 397 } } 399 cÚ¡ * cÚ¡ gš‹rçû_Çmes [] = { 400 BT_PROFILE_HANDSFREE_ID , 401 BT_PROFILE_ADVANCED_AUDIO_ID , 402 BT_PROFILE_AV_RC_ID , 403 BT_PROFILE_HEALTH_ID , 404 BT_PROFILE_HIDHOST_ID , 405 BT_PROFILE_PAN_ID , 406 BT_PROFILE_GATT_ID , 407 BT_PROFILE_SOCKETS_ID , 408 NULL 411 cÚ¡ * cÚ¡ givi_š‹rçû_šames [] = { 412 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 413 BT_PROFILE_HANDSFREE_CLIENT_ID , 414 BT_PROFILE_MAP_CLIENT_ID , 415 BT_PROFILE_AV_RC_CTRL_ID , 416 BT_PROFILE_ADVANCED_AUDIO_SINK_ID , 418 NULL 421  $š™ (cÚ¡ * cÚ¡ * šames ) 423 cÚ¡  m‘hod * m ; 424 cÚ¡ * ¬gv [4]; 425  š™_audio [] = "audio init"; 426  š™_sco [] = "sco init"; 427  š™_bt [] = "bluetooth init"; 428 ušt32_t i ; 430 `´oûss_lše ( š™_audio ); 431 `´oûss_lše ( š™_sco ); 432 `´oûss_lše ( š™_bt ); 434 m = `g‘_š‹rçû_m‘hod ("bluetooth", "get_profile_interface"); 436 * šames ) { 437 ¬gv [2] = * šames ; 438 m -> `func (3, ¬gv ); 439 šames ++; 443  i = 3; i < `NELEM ( š‹rçûs ) - 1; ++i) { 444 m = `g‘_š‹rçû_m‘hod ( š‹rçûs [ i ]-> Çme , "init"); 445 ià( m !ð NULL ) 446 m -> `func (2, ¬gv ); 448 } } 450  $maš ( ¬gc , ** ¬gv ) 452  ¡© rc¡© ; 454 `·r£_commªd_lše ( ¬gc , ¬gv ); 456 `‹rmš®_£tup (); 458 ià(! no_š™ ) { 459 ià( ivi_Úly ) 460 `š™ ( ivi_š‹rçû_šames ); 462 `š™ ( š‹rçû_Çmes ); 465 `hi¡Üy_»¡Üe (".haltest_history"); 467 fd_¡ack [ fd_¡ack_poš‹r ++] = 0; 469 `pÞl_»gi¡”_fd (0, POLLIN , ¡dš_hªdËr ); 471 ià( `¡© (".h®‹¡rc", & rc¡© è=ð0 && (rc¡©. ¡_mode & S_IFREG ) != 0) 472 `´oûss_fže (".haltestrc"); 474 `pÞl_di¥©ch_loÝ (); 477 } } @android/client/history.c 18  ~<¡dlib.h > 19  ~<¡ršg.h > 20  ~<¡dio.h > 21  ~<ùy³.h > 23  ~"hi¡Üy.h " 27  #HISTORY_DEPTH 40 ) 28  #LINE_SIZE 200 ) 29  glšes [ HISTORY_DEPTH ][ LINE_SIZE ]; 30  gÏ¡_lše = 0; 31  ghi¡Üy_size = 0; 34  $hi¡Üy_¡Üe (cÚ¡ * fž’ame ) 36 } } 39  $hi¡Üy_»¡Üe (cÚ¡ * fž’ame ) 41  lše [1000]; 42 FILE * f = `fÝ’ ( fž’ame , "rt"); 44 ià( f =ð NULL ) 48 ià( `fg‘s ( lše , 1000, f è!ð NULL ) { 49  l = `¡¾’ ( lše ); 51  l > 0 && `is¥aû ( lše [--l])) 52 lše [ l ] = 0; 54 ià( l > 0) 55 `hi¡Üy_add_lše ( lše ); 60 `fþo£ ( f ); 61 } } 64  $hi¡Üy_add_lše (cÚ¡ * lše ) 66 ià( lše =ð NULL || `¡¾’ (line) == 0) 69 ià( `¡rcmp ( lše , lšes [ Ï¡_lše ]) == 0) 72 Ï¡_lše = (Ï¡_lš+ 1è% HISTORY_DEPTH ; 73 `¡ºýy (& lšes [ Ï¡_lše ][0], lše , LINE_SIZE - 1); 74 ià( hi¡Üy_size < HISTORY_DEPTH ) 75 hi¡Üy_size ++; 76 } } 84  $hi¡Üy_g‘_lše ( n , * buf ,  buf_size ) 86 ià( n == -1) 87 n = hi¡Üy_size - 1; 89 ià( n >ð hi¡Üy_size || buf_size == 0 ||‚ < 0) 92 `¡ºýy ( buf , 93 & lšes [( HISTORY_DEPTH + Ï¡_lše - n ) % HISTORY_DEPTH][0], 94 buf_size - 1); 95 buf [ buf_size - 1] = 0; 97  n ; 98 } } @android/client/history.h 18  hi¡Üy_¡Üe (cÚ¡ * fž’ame ); 19  hi¡Üy_»¡Üe (cÚ¡ * fž’ame ); 20  hi¡Üy_add_lše (cÚ¡ * lše ); 21  hi¡Üy_g‘_lše ( n , * buf ,  buf_size ); @android/client/if-audio.c 18  ~<±h»ad.h > 19  ~ 20  ~ 22  ~"if-maš.h " 23  ~"../h®-utžs.h " 25 audio_hw_deviû_t * gif_audio = NULL ; 26  audio_¡»am_out * g¡»am_out = NULL ; 28  size_t gbufãr_size = 0; 29  ±h»ad_t g¶ay_th»ad = 0; 30  ±h»ad_mu‹x_t gout¡»am_mu‹x = PTHREAD_MUTEX_INITIALIZER ; 31  ±h»ad_mu‹x_t g¡©e_mu‹x = PTHREAD_MUTEX_INITIALIZER ; 33 e¡©e { 34 mSTATE_STOPPED , 35 mSTATE_STOPPING , 36 mSTATE_PLAYING , 37 mSTATE_SUSPENDED , 38 mSTATE_MAX 41 SINTMAP ( audio_chªÃl_mask_t , -1, "(AUDIO_CHANNEL_INVALID)") 42 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_LEFT ), 43 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_RIGHT ), 44 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_CENTER ), 45 DELEMENT ( AUDIO_CHANNEL_OUT_LOW_FREQUENCY ), 46 DELEMENT ( AUDIO_CHANNEL_OUT_BACK_LEFT ), 47 DELEMENT ( AUDIO_CHANNEL_OUT_BACK_RIGHT ), 48 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER ), 49 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER ), 50 DELEMENT ( AUDIO_CHANNEL_OUT_BACK_CENTER ), 51 DELEMENT ( AUDIO_CHANNEL_OUT_SIDE_LEFT ), 52 DELEMENT ( AUDIO_CHANNEL_OUT_SIDE_RIGHT ), 53 DELEMENT ( AUDIO_CHANNEL_OUT_TOP_CENTER ), 54 DELEMENT ( AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT ), 55 DELEMENT ( AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER ), 56 DELEMENT ( AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT ), 57 DELEMENT ( AUDIO_CHANNEL_OUT_TOP_BACK_LEFT ), 58 DELEMENT ( AUDIO_CHANNEL_OUT_TOP_BACK_CENTER ), 59 DELEMENT ( AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT ), 60 DELEMENT ( AUDIO_CHANNEL_OUT_MONO ), 61 DELEMENT ( AUDIO_CHANNEL_OUT_STEREO ), 62 DELEMENT ( AUDIO_CHANNEL_OUT_QUAD ), 63 #ià ANDROID_VERSION < PLATFORM_VER (5, 0, 0) 64 DELEMENT ( AUDIO_CHANNEL_OUT_SURROUND ), 66 DELEMENT ( AUDIO_CHANNEL_OUT_QUAD_BACK ), 67 DELEMENT ( AUDIO_CHANNEL_OUT_QUAD_SIDE ), 68 DELEMENT ( AUDIO_CHANNEL_OUT_5POINT1_BACK ), 69 DELEMENT ( AUDIO_CHANNEL_OUT_5POINT1_SIDE ), 71 DELEMENT ( AUDIO_CHANNEL_OUT_5POINT1 ), 72 DELEMENT ( AUDIO_CHANNEL_OUT_7POINT1 ), 73 DELEMENT ( AUDIO_CHANNEL_OUT_ALL ), 74 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_LEFT ), 75 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_LEFT ), 76 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_LEFT ), 77 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_LEFT ), 78 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_LEFT ), 79 ENDMAP 81 SINTMAP ( audio_fÜm©_t , -1, "(AUDIO_FORMAT_INVALID)") 82 DELEMENT ( AUDIO_FORMAT_DEFAULT ), 83 DELEMENT ( AUDIO_FORMAT_PCM ), 84 DELEMENT ( AUDIO_FORMAT_MP3 ), 85 DELEMENT ( AUDIO_FORMAT_AMR_NB ), 86 DELEMENT ( AUDIO_FORMAT_AMR_WB ), 87 DELEMENT ( AUDIO_FORMAT_AAC ), 88 DELEMENT ( AUDIO_FORMAT_HE_AAC_V1 ), 89 DELEMENT ( AUDIO_FORMAT_HE_AAC_V2 ), 90 DELEMENT ( AUDIO_FORMAT_VORBIS ), 91 DELEMENT ( AUDIO_FORMAT_MAIN_MASK ), 92 DELEMENT ( AUDIO_FORMAT_SUB_MASK ), 93 DELEMENT ( AUDIO_FORMAT_PCM_16_BIT ), 94 DELEMENT ( AUDIO_FORMAT_PCM_8_BIT ), 95 DELEMENT ( AUDIO_FORMAT_PCM_32_BIT ), 96 DELEMENT ( AUDIO_FORMAT_PCM_8_24_BIT ), 97 ENDMAP 99  gcu¼’t_¡©e = STATE_STOPPED ; 101  #SAMPLERATE 44100 ) 102  g§m¶e [ SAMPLERATE ]; 103  ušt16_t g§m¶e_pos ; 105  $š™_p ( ¬gc , cÚ¡ ** ¬gv ) 107  ”r ; 108 cÚ¡ hw_moduË_t * moduË ; 109 audio_hw_deviû_t * deviû ; 111 ”r = `hw_g‘_moduË_by_þass ( AUDIO_HARDWARE_MODULE_ID , 112 AUDIO_HARDWARE_MODULE_ID_A2DP , & moduË ); 113 ià( ”r ) { 114 `h®‹¡_”rÜ ("hw_g‘_moduË_by_þas »tuºed %d\n", ”r ); 118 ”r = `audio_hw_deviû_Ý’ ( moduË , & deviû ); 119 ià( ”r ) { 120 `h®‹¡_”rÜ ("audio_hw_deviû_Ý’„‘uºed %d\n", ”r ); 124 if_audio = deviû ; 125 } } 127  $ãed_äom_fže (* bufãr , * d©a ) 129 FILE * š = d©a ; 130  `ä—d ( bufãr , bufãr_size , 1, š ); 131 } } 133  $ãed_äom_g’”©Ü (* bufãr , * d©a ) 135 size_t i = 0; 136  vÞume = 0.5; 137 * äeq = d©a ; 138  f = 1; 140 ià( äeq ) 141 f = * äeq ; 144  i = 0; i < bufãr_size / (* bufãr ) - 1;) { 145 ià( §m¶e_pos >ð SAMPLERATE ) 146 §m¶e_pos = sam¶e_po % SAMPLERATE ; 149 bufãr [ i ++] = §m¶e [ §m¶e_pos ] * vÞume ; 150 bufãr [ i ++] = §m¶e [ §m¶e_pos ] * vÞume ; 152 §m¶e_pos +ð f ; 155  bufãr_size ; 156 } } 158  $´•¬e_§m¶e () 160  x ; 161  s ; 163 `h®‹¡_šfo ("Preparing‡udio sample...\n"); 165  x = 0; x < SAMPLERATE ; x++) { 167 s = (2.0 * 3.14159è* (() x / SAMPLERATE ); 168 s = `sš (s); 171 §m¶e [ x ] = s * 32767; 174 §m¶e_pos = 0; 175 } } 177 * $¶ayback_th»ad (* d©a ) 179 (* fžbuff_cb ) (*, *); 180  bufãr [ bufãr_size / ()]; 181 size_t Ën = 0; 182 ssize_t w_Ën = 0; 183 FILE * š = d©a ; 184 * cb_d©a = NULL ; 185  äeq = 440.0; 188 ià( š ) { 189 fžbuff_cb = ãed_äom_fže ; 190 cb_d©a = š ; 192 `´•¬e_§m¶e (); 193 fžbuff_cb = ãed_äom_g’”©Ü ; 194 cb_d©a = & äeq ; 197 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 198 cu¼’t_¡©e = STATE_PLAYING ; 199 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 202 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 204 ià( cu¼’t_¡©e =ð STATE_STOPPING ) { 205 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 207 } ià( cu¼’t_¡©e =ð STATE_SUSPENDED ) { 208 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 209 `u¦“p (500); 213 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 215 Ën = `fžbuff_cb ( bufãr , cb_d©a ); 217 `±h»ad_mu‹x_lock (& out¡»am_mu‹x ); 218 ià(! ¡»am_out ) { 219 `±h»ad_mu‹x_uÆock (& out¡»am_mu‹x ); 223 w_Ën = ¡»am_out -> `wr™e (¡»am_out, bufãr , bufãr_size ); 224 `±h»ad_mu‹x_uÆock (& out¡»am_mu‹x ); 225 }  Ën && w_Ën > 0); 227 ià( š ) 228 `fþo£ ( š ); 230 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 231 cu¼’t_¡©e = STATE_STOPPED ; 232 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 234 `h®‹¡_šfo ("Done…laying.\n"); 236  NULL ; 237 } } 239  $¶ay_p ( ¬gc , cÚ¡ ** ¬gv ) 241 cÚ¡ * âame = NULL ; 242 FILE * š = NULL ; 244 `RETURN_IF_NULL ( if_audio ); 245 `RETURN_IF_NULL ( ¡»am_out ); 247 ià( ¬gc < 3) { 248 `h®‹¡_”rÜ ("Invalid‡udio file…ath.\n"); 249 `h®‹¡_šfo ("Using sound generator.\n"); 251 âame = ¬gv [2]; 252 š = `fÝ’ ( âame , "r"); 254 ià( š =ð NULL ) { 255 `h®‹¡_”rÜ ("CªnÙ o³Àfže: %s\n", âame ); 258 `h®‹¡_šfo ("PÏyšg fže: %s\n", âame ); 261 ià( bufãr_size == 0) { 262 `h®‹¡_”rÜ ("Invalid buffer size. Was stream_out opened?\n"); 263  çž ; 266 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 267 ià( cu¼’t_¡©e !ð STATE_STOPPED ) { 268 `h®‹¡_”rÜ ("Already…laying or stream suspended!\n"); 269 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 270  çž ; 272 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 274 ià( `±h»ad_ü—‹ (& ¶ay_th»ad , NULL , ¶ayback_th»ad , š ) != 0) { 275 `h®‹¡_”rÜ ("Cannot create…laybackhread!\n"); 276  çž ; 280 çž : 281 ià( š ) 282 `fþo£ ( š ); 283 } } 285  $¡Ý_p ( ¬gc , cÚ¡ ** ¬gv ) 287 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 288 ià( cu¼’t_¡©e =ð STATE_STOPPED || cu¼’t_¡©=ð STATE_STOPPING ) { 289 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 293 cu¼’t_¡©e = STATE_STOPPING ; 294 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 296 `±h»ad_mu‹x_lock (& out¡»am_mu‹x ); 297 ¡»am_out -> commÚ . `¡ªdby (&stream_out->common); 298 `±h»ad_mu‹x_uÆock (& out¡»am_mu‹x ); 299 } } 301  $Ý’_ouut_¡»am_p ( ¬gc , cÚ¡ ** ¬gv ) 303  ”r ; 305 `RETURN_IF_NULL ( if_audio ); 307 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 308 ià( cu¼’t_¡©e =ð STATE_PLAYING ) { 309 `h®‹¡_”rÜ ("Already…laying!\n"); 310 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 313 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 315 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 316 ”r = if_audio -> `Ý’_ouut_¡»am (if_audio, 318 AUDIO_DEVICE_OUT_ALL_A2DP , 319 AUDIO_OUTPUT_FLAG_NONE , 320 NULL , 321 & ¡»am_out , NULL ); 323 ”r = if_audio -> `Ý’_ouut_¡»am (if_audio, 325 AUDIO_DEVICE_OUT_ALL_A2DP , 326 AUDIO_OUTPUT_FLAG_NONE , 327 NULL , 328 & ¡»am_out ); 330 ià( ”r < 0) { 331 `h®‹¡_”rÜ ("Ý’ ouuˆ¡»am„‘uºed %d\n", ”r ); 335 bufãr_size = ¡»am_out -> commÚ . `g‘_bufãr_size (&stream_out->common); 336 ià( bufãr_size == 0) 337 `h®‹¡_”rÜ ("Invalid buffer size„eceived!\n"); 339 `h®‹¡_šfo ("Usšg bufã¸size: %zu\n", bufãr_size ); 340 } } 342  $þo£_ouut_¡»am_p ( ¬gc , cÚ¡ ** ¬gv ) 344 `RETURN_IF_NULL ( if_audio ); 345 `RETURN_IF_NULL ( ¡»am_out ); 347 `¡Ý_p ( ¬gc , ¬gv ); 349 `h®‹¡_šfo ("Waiting for…laybackhread...\n"); 350 `±h»ad_još ( ¶ay_th»ad , NULL ); 352 if_audio -> `þo£_ouut_¡»am (if_audio, ¡»am_out ); 354 ¡»am_out = NULL ; 355 bufãr_size = 0; 356 } } 358  $þ—nup_p ( ¬gc , cÚ¡ ** ¬gv ) 360  ”r ; 362 `RETURN_IF_NULL ( if_audio ); 364 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 365 ià( cu¼’t_¡©e !ð STATE_STOPPED ) { 366 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 367 `þo£_ouut_¡»am_p (0, NULL ); 369 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 372 ”r = `audio_hw_deviû_þo£ ( if_audio ); 373 ià( ”r < 0) { 374 `h®‹¡_”rÜ ("audio_hw_deviû_þo£„‘uºed %d\n", ”r ); 378 if_audio = NULL ; 379 } } 381  $su¥’d_p ( ¬gc , cÚ¡ ** ¬gv ) 383 `RETURN_IF_NULL ( if_audio ); 384 `RETURN_IF_NULL ( ¡»am_out ); 386 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 387 ià( cu¼’t_¡©e !ð STATE_PLAYING ) { 388 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 391 cu¼’t_¡©e = STATE_SUSPENDED ; 392 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 394 `±h»ad_mu‹x_lock (& out¡»am_mu‹x ); 395 ¡»am_out -> commÚ . `¡ªdby (&stream_out->common); 396 `±h»ad_mu‹x_uÆock (& out¡»am_mu‹x ); 397 } } 399  $»sume_p ( ¬gc , cÚ¡ ** ¬gv ) 401 `RETURN_IF_NULL ( if_audio ); 402 `RETURN_IF_NULL ( ¡»am_out ); 404 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 405 ià( cu¼’t_¡©e =ð STATE_SUSPENDED ) 406 cu¼’t_¡©e = STATE_PLAYING ; 407 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 408 } } 410  $g‘_Ï‹ncy_p ( ¬gc , cÚ¡ ** ¬gv ) 412 `RETURN_IF_NULL ( if_audio ); 413 `RETURN_IF_NULL ( ¡»am_out ); 415 `h®‹¡_šfo ("Output‡udio stream†atency: %d\n", 416 ¡»am_out -> `g‘_Ï‹ncy (stream_out)); 417 } } 419  $g‘_bufãr_size_p ( ¬gc , cÚ¡ ** ¬gv ) 421 `RETURN_IF_NULL ( if_audio ); 422 `RETURN_IF_NULL ( ¡»am_out ); 424 `h®‹¡_šfo ("Current output buffer size: %zu\n", 425 ¡»am_out -> commÚ . `g‘_bufãr_size (&stream_out->common)); 426 } } 428  $g‘_chªÃls_p ( ¬gc , cÚ¡ ** ¬gv ) 430 audio_chªÃl_mask_t chªÃls ; 432 `RETURN_IF_NULL ( if_audio ); 433 `RETURN_IF_NULL ( ¡»am_out ); 435 chªÃls = ¡»am_out -> commÚ . `g‘_chªÃls (&stream_out->common); 437 `h®‹¡_šfo ("ChªÃls: %s\n", `audio_chªÃl_mask_t2¡r ( chªÃls )); 438 } } 440  $g‘_fÜm©_p ( ¬gc , cÚ¡ ** ¬gv ) 442 audio_fÜm©_t fÜm© ; 444 `RETURN_IF_NULL ( if_audio ); 445 `RETURN_IF_NULL ( ¡»am_out ); 447 fÜm© = ¡»am_out -> commÚ . `g‘_fÜm© (&stream_out->common); 449 `h®‹¡_šfo ("FÜm©: %s\n", `audio_fÜm©_t2¡r ( fÜm© )); 450 } } 452  $g‘_§m¶e_¿‹_p ( ¬gc , cÚ¡ ** ¬gv ) 454 `RETURN_IF_NULL ( if_audio ); 455 `RETURN_IF_NULL ( ¡»am_out ); 457 `h®‹¡_šfo ("Current sample„ate: %d\n", 458 ¡»am_out -> commÚ . `g‘_§m¶e_¿‹ (&stream_out->common)); 459 } } 461  $g‘_·¿m‘”s_p ( ¬gc , cÚ¡ ** ¬gv ) 463 cÚ¡ * key¡r ; 465 `RETURN_IF_NULL ( if_audio ); 466 `RETURN_IF_NULL ( ¡»am_out ); 468 ià( ¬gc < 3) { 469 `h®‹¡_šfo ("No keys given.\n"); 470 key¡r = ""; 472 key¡r = ¬gv [2]; 475 `h®‹¡_šfo ("Current…arameters: %s\n", 476 ¡»am_out -> commÚ . `g‘_·¿m‘”s (&stream_out->common, 477 key¡r )); 478 } } 480  $£t_·¿m‘”s_p ( ¬gc , cÚ¡ ** ¬gv ) 482 `RETURN_IF_NULL ( if_audio ); 483 `RETURN_IF_NULL ( ¡»am_out ); 485 ià( ¬gc < 3) { 486 `h®‹¡_”rÜ ("No key=value;…airs given.\n"); 490 ¡»am_out -> commÚ . `£t_·¿m‘”s (&¡»am_out->commÚ, ¬gv [2]); 491 } } 493  $£t_§m¶e_¿‹_p ( ¬gc , cÚ¡ ** ¬gv ) 495 `RETURN_IF_NULL ( if_audio ); 496 `RETURN_IF_NULL ( ¡»am_out ); 498 ià( ¬gc < 3) 501 ¡»am_out -> commÚ . `£t_§m¶e_¿‹ (&¡»am_out->commÚ, `©oi ( ¬gv [2])); 502 } } 504  $š™_check_p ( ¬gc , cÚ¡ ** ¬gv ) 506 `RETURN_IF_NULL ( if_audio ); 508 `h®‹¡_šfo ("In™ check„esuÉ: %d\n", if_audio -> `š™_check (if_audio)); 509 } } 511  m‘hod gm‘hods [] = { 512 STD_METHOD ( š™ ), 513 STD_METHOD ( þ—nup ), 514 STD_METHOD ( Ý’_ouut_¡»am ), 515 STD_METHOD ( þo£_ouut_¡»am ), 516 STD_METHODH ( ¶ay , ""), 517 STD_METHOD ( ¡Ý ), 518 STD_METHOD ( su¥’d ), 519 STD_METHOD ( »sume ), 520 STD_METHOD ( g‘_Ï‹ncy ), 521 STD_METHOD ( g‘_bufãr_size ), 522 STD_METHOD ( g‘_chªÃls ), 523 STD_METHOD ( g‘_fÜm© ), 524 STD_METHOD ( g‘_§m¶e_¿‹ ), 525 STD_METHODH ( g‘_·¿m‘”s , ""), 526 STD_METHODH ( £t_·¿m‘”s , ""), 527 STD_METHODH ( £t_§m¶e_¿‹ , ""), 528 STD_METHOD ( š™_check ), 529 END_METHOD 532 cÚ¡  š‹rçû gaudio_if = { 533 . Çme = "audio", 534 . gm‘hods = m‘hods @android/client/if-av-sink.c 18  ~"if-maš.h " 19  ~"../h®-utžs.h " 21 cÚ¡ bv_š‹rçû_t * gif_av_sšk = NULL ; 23 SINTMAP ( bv_cÚÃùiÚ_¡©e_t , -1, "(unknown)") 24 DELEMENT ( BTAV_CONNECTION_STATE_DISCONNECTED ), 25 DELEMENT ( BTAV_CONNECTION_STATE_CONNECTING ), 26 DELEMENT ( BTAV_CONNECTION_STATE_CONNECTED ), 27 DELEMENT ( BTAV_CONNECTION_STATE_DISCONNECTING ), 28 ENDMAP 30 SINTMAP ( bv_audio_¡©e_t , -1, "(unknown)") 31 DELEMENT ( BTAV_AUDIO_STATE_REMOTE_SUSPEND ), 32 DELEMENT ( BTAV_AUDIO_STATE_STOPPED ), 33 DELEMENT ( BTAV_AUDIO_STATE_STARTED ), 34 ENDMAP 36  gÏ¡_addr [ MAX_ADDR_STR_LEN ]; 38  $cÚÃùiÚ_¡©e ( bv_cÚÃùiÚ_¡©e_t ¡©e , 39 bt_bdaddr_t * bd_addr ) 41 `h®‹¡_šfo ("(sink) %s: connection_state=%s„emote_bd_addr=%s\n", 42 __func__ , `bv_cÚÃùiÚ_¡©e_t2¡r ( ¡©e ), 43 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 44 } } 46  $audio_¡©e ( bv_audio_¡©e_t ¡©e , bt_bdaddr_t * bd_addr ) 48 `h®‹¡_šfo ("(sškè%s:‡udio_¡©e=% »mÙe_bd_addr=%s\n", __func__ , 49 `bv_audio_¡©e_t2¡r ( ¡©e ), 50 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 51 } } 53  $audio_cÚfig ( bt_bdaddr_t * bd_addr , ušt32_t §m¶e_¿‹ , 54 ušt8_t chªÃl_couÁ ) { 55 `h®‹¡_šfo ("(sink) %s:‡ddr=%s\n sample_rate=%d\n channel_count=%d\n", 56 __func__ , `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr ), 57 §m¶e_¿‹ , chªÃl_couÁ ); 58 } } 60  bv_ÿÎbacks_t gav_cbacks = { 61 . size = ( av_cbacks ), 62 . gcÚÃùiÚ_¡©e_cb = cÚÃùiÚ_¡©e , 63 . gaudio_¡©e_cb = audio_¡©e , 64 . gaudio_cÚfig_cb = audio_cÚfig , 69  $š™_p ( ¬gc , cÚ¡ ** ¬gv ) 71 `RETURN_IF_NULL ( if_av_sšk ); 73 `EXEC ( if_av_sšk -> š™ , & av_cbacks ); 74 } } 78  $cÚÃù_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 79 ** u£r ) 81 ià( ¬gc == 3) { 82 * u£r = NULL ; 83 * ’um_func = ’um_deviûs ; 85 } } 87  $cÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 89 bt_bdaddr_t addr ; 91 `RETURN_IF_NULL ( if_av_sšk ); 92 `VERIFY_ADDR_ARG (2, & addr ); 94 `EXEC ( if_av_sšk -> cÚÃù , & addr ); 95 } } 99  $discÚÃù_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 100 ** u£r ) 102 ià( ¬gc == 3) { 103 * u£r = Ï¡_addr ; 104 * ’um_func = ’um_Úe_¡ršg ; 106 } } 108  $discÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 110 bt_bdaddr_t addr ; 112 `RETURN_IF_NULL ( if_av_sšk ); 113 `VERIFY_ADDR_ARG (2, & addr ); 115 `EXEC ( if_av_sšk -> discÚÃù , & addr ); 116 } } 120  $þ—nup_p ( ¬gc , cÚ¡ ** ¬gv ) 122 `RETURN_IF_NULL ( if_av_sšk ); 124 `EXECV ( if_av_sšk -> þ—nup ); 125 if_av_sšk = NULL ; 126 } } 128  m‘hod gm‘hods [] = { 129 STD_METHOD ( š™ ), 130 STD_METHODCH ( cÚÃù , ""), 131 STD_METHODCH ( discÚÃù , ""), 132 STD_METHOD ( þ—nup ), 133 END_METHOD 136 cÚ¡  š‹rçû gav_sšk_if = { 137 . Çme = "av-sink", 138 . gm‘hods = m‘hods @android/client/if-av.c 18  ~"if-maš.h " 19  ~"../h®-utžs.h " 21 cÚ¡ bv_š‹rçû_t * gif_av = NULL ; 23 SINTMAP ( bv_cÚÃùiÚ_¡©e_t , -1, "(unknown)") 24 DELEMENT ( BTAV_CONNECTION_STATE_DISCONNECTED ), 25 DELEMENT ( BTAV_CONNECTION_STATE_CONNECTING ), 26 DELEMENT ( BTAV_CONNECTION_STATE_CONNECTED ), 27 DELEMENT ( BTAV_CONNECTION_STATE_DISCONNECTING ), 28 ENDMAP 30 SINTMAP ( bv_audio_¡©e_t , -1, "(unknown)") 31 DELEMENT ( BTAV_AUDIO_STATE_REMOTE_SUSPEND ), 32 DELEMENT ( BTAV_AUDIO_STATE_STOPPED ), 33 DELEMENT ( BTAV_AUDIO_STATE_STARTED ), 34 ENDMAP 36  gÏ¡_addr [ MAX_ADDR_STR_LEN ]; 38  $cÚÃùiÚ_¡©e ( bv_cÚÃùiÚ_¡©e_t ¡©e , 39 bt_bdaddr_t * bd_addr ) 41 `h®‹¡_šfo ("%s: cÚÃùiÚ_¡©e=% »mÙe_bd_addr=%s\n", __func__ , 42 `bv_cÚÃùiÚ_¡©e_t2¡r ( ¡©e ), 43 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 44 } } 46  $audio_¡©e ( bv_audio_¡©e_t ¡©e , bt_bdaddr_t * bd_addr ) 48 `h®‹¡_šfo ("%s:‡udio_¡©e=% »mÙe_bd_addr=%s\n", __func__ , 49 `bv_audio_¡©e_t2¡r ( ¡©e ), 50 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 51 } } 53 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 54  $audio_cÚfig ( bt_bdaddr_t * bd_addr , ušt32_t §m¶e_¿‹ , 55 ušt8_t chªÃl_couÁ ) { 56 `h®‹¡_šfo ("%s:„emote_addr=%s\n sample_rate=%d\n channel_count=%d\n", 57 __func__ , `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr ), 58 §m¶e_¿‹ , chªÃl_couÁ ); 59 } } 62  bv_ÿÎbacks_t gav_cbacks = { 63 . size = ( av_cbacks ), 64 . gcÚÃùiÚ_¡©e_cb = cÚÃùiÚ_¡©e , 65 . gaudio_¡©e_cb = audio_¡©e , 66 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 67 . gaudio_cÚfig_cb = audio_cÚfig , 73  $š™_p ( ¬gc , cÚ¡ ** ¬gv ) 75 `RETURN_IF_NULL ( if_av ); 77 `EXEC ( if_av -> š™ , & av_cbacks ); 78 } } 82  $cÚÃù_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 83 ** u£r ) 85 ià( ¬gc == 3) { 86 * u£r = NULL ; 87 * ’um_func = ’um_deviûs ; 89 } } 91  $cÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 93 bt_bdaddr_t addr ; 95 `RETURN_IF_NULL ( if_av ); 96 `VERIFY_ADDR_ARG (2, & addr ); 98 `EXEC ( if_av -> cÚÃù , & addr ); 99 } } 103  $discÚÃù_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 104 ** u£r ) 106 ià( ¬gc == 3) { 107 * u£r = Ï¡_addr ; 108 * ’um_func = ’um_Úe_¡ršg ; 110 } } 112  $discÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 114 bt_bdaddr_t addr ; 116 `RETURN_IF_NULL ( if_av ); 117 `VERIFY_ADDR_ARG (2, & addr ); 119 `EXEC ( if_av -> discÚÃù , & addr ); 120 } } 124  $þ—nup_p ( ¬gc , cÚ¡ ** ¬gv ) 126 `RETURN_IF_NULL ( if_av ); 128 `EXECV ( if_av -> þ—nup ); 129 if_av = NULL ; 130 } } 132  m‘hod gm‘hods [] = { 133 STD_METHOD ( š™ ), 134 STD_METHODCH ( cÚÃù , ""), 135 STD_METHODCH ( discÚÃù , ""), 136 STD_METHOD ( þ—nup ), 137 END_METHOD 140 cÚ¡  š‹rçû gav_if = { 141 . Çme = "av", 142 . gm‘hods = m‘hods @android/client/if-bt.c 18  ~<¡ršg.h > 19  ~<š‰y³s.h > 21  ~"if-maš.h " 22  ~"‹rmš®.h " 23  ~"../h®-msg.h " 24  ~"../h®-utžs.h " 26  hw_deviû_t * gbt_deviû ; 27 cÚ¡ bt_š‹rçû_t * gif_blu‘oÙh ; 29  #VERIFY_PROP_TYPE_ARG ( n , typ ) \ 31 ià( n < ¬gc ) \ 32 typ = `¡r2brÝ”tyty³ ( ¬gv [ n ]); \ 34 `h®‹¡_”rÜ ("No…ropertyype specified\n"); \ 37 } 0) ) 39  bt_sÿn_mode_t $¡r2btsÿnmode (cÚ¡ * ¡r ) 41 bt_sÿn_mode_t v = `¡r2bt_sÿn_mode_t ( ¡r ); 43 ià((è v != -1) 44  v ; 46 `h®‹¡_w¬n ("WARN: % ÿÂÙ cÚv”ˆ%s\n", __func__ , ¡r ); 47  ( bt_sÿn_mode_t è `©oi ( ¡r ); 48 } } 50  bt_s¥_v¬ŸÁ_t $¡r2bts¥v¬ŸÁ (cÚ¡ * ¡r ) 52 bt_s¥_v¬ŸÁ_t v = `¡r2bt_s¥_v¬ŸÁ_t ( ¡r ); 54 ià((è v != -1) 55  v ; 57 `h®‹¡_w¬n ("WARN: % ÿÂÙ cÚv”ˆ%s\n", __func__ , ¡r ); 58  ( bt_s¥_v¬ŸÁ_t è `©oi ( ¡r ); 59 } } 61  bt_´Ý”ty_ty³_t $¡r2brÝ”tyty³ (cÚ¡ * ¡r ) 63 bt_´Ý”ty_ty³_t v = `¡r2bt_´Ý”ty_ty³_t ( ¡r ); 65 ià((è v != -1) 66  v ; 68 `h®‹¡_w¬n ("WARN: % ÿÂÙ cÚv”ˆ%s\n", __func__ , ¡r ); 69  ( bt_´Ý”ty_ty³_t è `©oi ( ¡r ); 70 } } 72  $dump_´Ý”t›s ( num_´Ý”t›s , bt_´Ý”ty_t * ´Ý”t›s ) 74  i ; 76  i = 0; i < num_´Ý”t›s ; i++) { 81 bt_´Ý”ty_t ´Ý ; 82 `memýy (& ´Ý , ´Ý”t›s + i , (prop)); 84 `h®‹¡_šfo ("´Ý: %s\n", `brÝ”ty2¡r (& ´Ý )); 86 } } 89  bt_bdaddr_t * g»mÙe_deviûs = NULL ; 90  g»mÙe_deviûs_út = 0; 91  g»mÙe_deviûs_ÿ·c™y = 0; 94  $add_»mÙe_deviû (cÚ¡ bt_bdaddr_t * addr ) 96  i ; 98 ià( »mÙe_deviûs =ð NULL ) { 99 »mÙe_deviûs = `m®loc (4 * ( bt_bdaddr_t )); 100 »mÙe_deviûs_út = 0; 101 ià( »mÙe_deviûs =ð NULL ) { 102 »mÙe_deviûs_ÿ·c™y = 0; 106 »mÙe_deviûs_ÿ·c™y = 4; 110  i = 0; i < »mÙe_deviûs_út ; ++i) { 111  »s = `memcmp (& »mÙe_deviûs [ i ], addr , (*addr)); 113 ià( »s == 0) 115 ià( »s > 0) 120 ià( »mÙe_deviûs_út >ð »mÙe_deviûs_ÿ·c™y ) { 121 »mÙe_deviûs_ÿ·c™y *= 2; 122 »mÙe_deviûs = `»®loc ÔemÙe_deviûs, ( bt_bdaddr_t ) * 123 »mÙe_deviûs_ÿ·c™y ); 124 ià( »mÙe_deviûs =ð NULL ) { 125 »mÙe_deviûs_ÿ·c™y = 0; 126 »mÙe_deviûs_út = 0; 131 ià( i < »mÙe_deviûs_út ) 132 `memmove ( »mÙe_deviûs + i + 1,„emote_devices + i, 133 ( »mÙe_deviûs_út - i è* ( bt_bdaddr_t )); 134 »mÙe_deviûs [ i ] = * addr ; 135 »mÙe_deviûs_út ++; 136 } } 138 cÚ¡ * $’um_deviûs (* v ,  i ) 140  buf [ MAX_ADDR_STR_LEN ]; 142 ià( i >ð »mÙe_deviûs_út ) 143  NULL ; 145 `bt_bdaddr_t2¡r (& »mÙe_deviûs [ i ], buf ); 146  buf ; 147 } } 149  $add_»mÙe_deviû_äom_´Ýs ( num_´Ý”t›s , 150 cÚ¡ bt_´Ý”ty_t * ´Ý”t›s ) 152  i ; 154  i = 0; i < num_´Ý”t›s ; i++) { 159 bt_´Ý”ty_t ´Ý”ty ; 161 `memýy (& ´Ý”ty , ´Ý”t›s + i , (property)); 162 ià( ´Ý”ty . ty³ =ð BT_PROPERTY_BDADDR ) 163 `add_»mÙe_deviû (( bt_bdaddr_t *è ´Ý”ty . v® ); 165 } } 167 boÞ $þo£_hw_bt_dev () 169 ià(! bt_deviû ) 170  çl£ ; 172 bt_deviû -> `þo£ (bt_device); 173  Œue ; 174 } } 176  $ad­‹r_¡©e_chªged_cb ( bt_¡©e_t ¡©e ) 178 `h®‹¡_šfo ("%s: s‹=%s\n", __func__ , `bt_¡©e_t2¡r ( ¡©e )); 179 } } 181  $ad­‹r_´Ý”t›s_cb ( bt_¡©us_t ¡©us ,  num_´Ý”t›s , 182 bt_´Ý”ty_t * ´Ý”t›s ) 184 `h®‹¡_šfo ("%s: stus=% num_´Ý”t›s=%d\n", __func__ , 185 `bt_¡©us_t2¡r ( ¡©us ), num_´Ý”t›s ); 187 `dump_´Ý”t›s ( num_´Ý”t›s , ´Ý”t›s ); 188 } } 190  $»mÙe_deviû_´Ý”t›s_cb ( bt_¡©us_t ¡©us , 191 bt_bdaddr_t * bd_addr , 192  num_´Ý”t›s , 193 bt_´Ý”ty_t * ´Ý”t›s ) 195 `h®‹¡_šfo ("%s: stus=% bd_addr=% num_´Ý”t›s=%d\n", __func__ , 196 `bt_¡©us_t2¡r ( ¡©us ), `bdaddr2¡r ( bd_addr ), 197 num_´Ý”t›s ); 199 `add_»mÙe_deviû ( bd_addr ); 201 `dump_´Ý”t›s ( num_´Ý”t›s , ´Ý”t›s ); 202 } } 204  $deviû_found_cb ( num_´Ý”t›s , bt_´Ý”ty_t * ´Ý”t›s ) 206 `h®‹¡_šfo ("%s:‚um_´Ý”t›s=%d\n", __func__ , num_´Ý”t›s ); 208 `add_»mÙe_deviû_äom_´Ýs ( num_´Ý”t›s , ´Ý”t›s ); 210 `dump_´Ý”t›s ( num_´Ý”t›s , ´Ý”t›s ); 211 } } 213  $discov”y_¡©e_chªged_cb ( bt_discov”y_¡©e_t ¡©e ) 215 `h®‹¡_šfo ("%s: s‹=%s\n", __func__ , 216 `bt_discov”y_¡©e_t2¡r ( ¡©e )); 217 } } 223  gÏ¡_»mÙe_addr [ MAX_ADDR_STR_LEN ]; 224  bt_s¥_v¬ŸÁ_t gÏ¡_s¥_v¬ŸÁ = (bt_ssp_variant_t) -1; 226  bt_bdaddr_t gpš_»que¡_addr ; 227  $pš_»que¡_ªsw” (* »¶y ) 229 bt_pš_code_t pš ; 230  acû± = 0; 231  pš_Ën = `¡¾’ ( »¶y ); 233 ià( pš_Ën > 0) { 234 acû± = 1; 235 ià( pš_Ën > 16) 236 pš_Ën = 16; 237 `memýy (& pš .pš, »¶y , pš_Ën ); 240 `EXEC ( if_blu‘oÙh -> pš_»¶y , & pš_»que¡_addr , acû± , pš_Ën , & pš ); 241 } } 243  $pš_»que¡_cb ( bt_bdaddr_t * »mÙe_bd_addr , bt_bdÇme_t * bd_Çme , 244 ušt32_t cod ) 247 `bt_bdaddr_t2¡r ( »mÙe_bd_addr , Ï¡_»mÙe_addr ); 248 pš_»que¡_addr = * »mÙe_bd_addr ; 250 `h®‹¡_šfo ("%s:„emÙe_bd_addr=% bd_Çme=% cod=%06x\n", __func__ , 251 Ï¡_»mÙe_addr , bd_Çme -> Çme , cod ); 252 `‹rmš®_´om±_fÜ ("EÁ”…š: ", pš_»que¡_ªsw” ); 253 } } 256  bt_bdaddr_t gs¥_»que¡_addr ; 257  bt_s¥_v¬ŸÁ_t gs¥_»que¡_v¬ŸÁ ; 258  ušt32_t gs¥_»que¡_·sk_key ; 261  $s¥_»que¡_yes_no_ªsw” (* »¶y ) 263  acû± = * »¶y == 0 || *reply == 'y' || *reply == 'Y'; 265 if_blu‘oÙh -> `s¥_»¶y (& s¥_»que¡_addr , s¥_»que¡_v¬ŸÁ , acû± , 266 s¥_»que¡_·sk_key ); 267 } } 269  $s¥_»que¡_cb ( bt_bdaddr_t * »mÙe_bd_addr , bt_bdÇme_t * bd_Çme , 270 ušt32_t cod , bt_s¥_v¬ŸÁ_t ·œšg_v¬ŸÁ , 271 ušt32_t ·ss_key ) 273  ´om± [50]; 276 `bt_bdaddr_t2¡r ( »mÙe_bd_addr , Ï¡_»mÙe_addr ); 277 Ï¡_s¥_v¬ŸÁ = ·œšg_v¬ŸÁ ; 279 `h®‹¡_šfo ("%s:„emote_bd_addr=%s bd_name=%s cod=%06x…airing_variant=%s…ass_key=%d\n", 280 __func__ , Ï¡_»mÙe_addr , bd_Çme -> Çme , cod , 281 `bt_s¥_v¬ŸÁ_t2¡r ( ·œšg_v¬ŸÁ ), ·ss_key ); 283  ·œšg_v¬ŸÁ ) { 284  BT_SSP_VARIANT_PASSKEY_CONFIRMATION : 285 `¥rštf ( ´om± , "DÛ Ùh” deviû show %d [Y/n] ?", ·ss_key ); 287 s¥_»que¡_addr = * »mÙe_bd_addr ; 288 s¥_»que¡_v¬ŸÁ = ·œšg_v¬ŸÁ ; 289 s¥_»que¡_·sk_key = ·ss_key ; 291 `‹rmš®_´om±_fÜ ( ´om± , s¥_»que¡_yes_no_ªsw” ); 293  BT_SSP_VARIANT_CONSENT : 294 `¥rštf ( ´om± , "Consent…airing [Y/n] ?"); 296 s¥_»que¡_addr = * »mÙe_bd_addr ; 297 s¥_»que¡_v¬ŸÁ = ·œšg_v¬ŸÁ ; 298 s¥_»que¡_·sk_key = 0; 300 `‹rmš®_´om±_fÜ ( ´om± , s¥_»que¡_yes_no_ªsw” ); 302  BT_SSP_VARIANT_PASSKEY_ENTRY : 303  BT_SSP_VARIANT_PASSKEY_NOTIFICATION : 305 `h®‹¡_šfo ("Not‡utomatically handled\n"); 308 } } 310  $bÚd_¡©e_chªged_cb ( bt_¡©us_t ¡©us , 311 bt_bdaddr_t * »mÙe_bd_addr , 312 bt_bÚd_¡©e_t ¡©e ) 314 `h®‹¡_šfo ("%s: stus=% »mÙe_bd_addr=% ¡©e=%s\n", __func__ , 315 `bt_¡©us_t2¡r ( ¡©us ), `bdaddr2¡r ( »mÙe_bd_addr ), 316 `bt_bÚd_¡©e_t2¡r ( ¡©e )); 317 } } 319  $aþ_¡©e_chªged_cb ( bt_¡©us_t ¡©us , 320 bt_bdaddr_t * »mÙe_bd_addr , 321 bt_aþ_¡©e_t ¡©e ) 323 `h®‹¡_šfo ("%s: stus=% »mÙe_bd_addr=% ¡©e=%s\n", __func__ , 324 `bt_¡©us_t2¡r ( ¡©us ), `bdaddr2¡r ( »mÙe_bd_addr ), 325 `bt_aþ_¡©e_t2¡r ( ¡©e )); 326 } } 328  $th»ad_evt_cb ( bt_cb_th»ad_evt evt ) 330 `h®‹¡_šfo ("%s:ƒvt=%s\n", __func__ , `bt_cb_th»ad_evt2¡r ( evt )); 331 } } 333  $dut_mode_»cv_cb ( ušt16_t Ýcode , ušt8_t * buf , ušt8_ˆ Ën ) 335 `h®‹¡_šfo ("%s\n", __func__ ); 336 } } 338  $Ë_‹¡_mode_cb ( bt_¡©us_t ¡©us , ušt16_t num_·ck‘s ) 340 `h®‹¡_šfo ("% % %d\n", __func__ , `bt_¡©us_t2¡r ( ¡©us ), 341 num_·ck‘s ); 342 } } 344 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 345  $’”gy_šfo_cb ( bt_aùiv™y_’”gy_šfo * ’”gy_šfo ) 347 `h®‹¡_šfo ("%s status=%s, ctrl_state=0x%02X,x_time=0x%jx," 349 __func__ , `bt_¡©us_t2¡r ( ’”gy_šfo -> ¡©us ), 350 ’”gy_šfo -> ù¾_¡©e ,ƒÃrgy_šfo-> tx_time , 351 ’”gy_šfo -> rx_time ,ƒÃrgy_šfo-> idË_time , 352 ’”gy_šfo -> ’”gy_u£d ); 353 } } 356  bt_ÿÎbacks_t gbt_ÿÎbacks = { 357 . size = ( bt_ÿÎbacks ), 358 . gad­‹r_¡©e_chªged_cb = ad­‹r_¡©e_chªged_cb , 359 . gad­‹r_´Ý”t›s_cb = ad­‹r_´Ý”t›s_cb , 360 . g»mÙe_deviû_´Ý”t›s_cb = »mÙe_deviû_´Ý”t›s_cb , 361 . gdeviû_found_cb = deviû_found_cb , 362 . gdiscov”y_¡©e_chªged_cb = discov”y_¡©e_chªged_cb , 363 . gpš_»que¡_cb = pš_»que¡_cb , 364 . gs¥_»que¡_cb = s¥_»que¡_cb , 365 . gbÚd_¡©e_chªged_cb = bÚd_¡©e_chªged_cb , 366 . gaþ_¡©e_chªged_cb = aþ_¡©e_chªged_cb , 367 . gth»ad_evt_cb = th»ad_evt_cb , 368 . gdut_mode_»cv_cb = dut_mode_»cv_cb , 369 . gË_‹¡_mode_cb = Ë_‹¡_mode_cb , 370 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 371 . g’”gy_šfo_cb = ’”gy_šfo_cb , 375 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 376  ®¬m_cb g®¬m_cb_p = NULL ; 377 * g®¬m_cb_p_d©a = NULL ; 379  boÞ $£t_wake_®¬m ( ušt64_t d–ay_mžlis , boÞ should_wake , ®¬m_cb cb , 380 * d©a ) 382 `h®‹¡_šfo ("%s: d–ay %" PRIu64 " should_wake %u cb %p data %p\n", 383 __func__ , d–ay_mžlis , should_wake , cb , d©a ); 386 ®¬m_cb_p = cb ; 387 ®¬m_cb_p_d©a = d©a ; 389  Œue ; 390 } } 392  $acquœe_wake_lock (cÚ¡ * lock_Çme ) 394 `h®‹¡_šfo ("%s: %s\n", __func__ , lock_Çme ); 396  BT_STATUS_SUCCESS ; 397 } } 399  $»Ëa£_wake_lock (cÚ¡ * lock_Çme ) 401 `h®‹¡_šfo ("%s: %s\n", __func__ , lock_Çme ); 403  BT_STATUS_SUCCESS ; 404 } } 406  bt_os_ÿÎouts_t gbt_os_ÿÎouts = { 407 . size = ( bt_os_ÿÎouts ), 408 . g£t_wake_®¬m = £t_wake_®¬m , 409 . gacquœe_wake_lock = acquœe_wake_lock , 410 . g»Ëa£_wake_lock = »Ëa£_wake_lock , 414  $š™_p ( ¬gc , cÚ¡ ** ¬gv ) 416  ”r ; 417 cÚ¡ hw_moduË_t * moduË ; 419 ”r = `hw_g‘_moduË ( BT_HARDWARE_MODULE_ID , & moduË ); 420 ià( ”r ) { 421 `h®‹¡_”rÜ ("he_g‘_moduË„‘uºed %d\n", ”r ); 425 ”r = moduË -> m‘hods -> `Ý’ (moduË, BT_HARDWARE_MODULE_ID , & bt_deviû ); 426 ià( ”r ) { 427 `h®‹¡_”rÜ ("moduË->m‘hods->Ý’„‘uºed %d\n", ”r ); 431 if_blu‘oÙh = 432 (( blu‘oÙh_deviû_t *è bt_deviû )-> `g‘_blu‘oÙh_š‹rçû (); 433 ià(! if_blu‘oÙh ) { 434 `h®‹¡_”rÜ ("get_bluetooth_interface„eturned NULL\n"); 438 `EXEC ( if_blu‘oÙh -> š™ , & bt_ÿÎbacks ); 440 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 441 `EXEC ( if_blu‘oÙh -> £t_os_ÿÎouts , & bt_os_ÿÎouts ); 443 } } 445  $þ—nup_p ( ¬gc , cÚ¡ ** ¬gv ) 447 `RETURN_IF_NULL ( if_blu‘oÙh ); 449 `EXECV ( if_blu‘oÙh -> þ—nup ); 451 if_blu‘oÙh = NULL ; 452 } } 454  $’abË_p ( ¬gc , cÚ¡ ** ¬gv ) 456 `RETURN_IF_NULL ( if_blu‘oÙh ); 458 `EXEC ( if_blu‘oÙh -> ’abË ); 459 } } 460 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 461  $»ad_’”gy_šfo_p ( ¬gc , cÚ¡ ** ¬gv ) 463 `RETURN_IF_NULL ( if_blu‘oÙh ); 465 `EXEC ( if_blu‘oÙh -> »ad_’”gy_šfo ); 466 } } 468  #g‘_cÚÃùiÚ_¡©e_c com¶‘e_addr_c ) 470  $g‘_cÚÃùiÚ_¡©e_p ( ¬gc , cÚ¡ ** ¬gv ) 472 bt_bdaddr_t addr ; 474 `RETURN_IF_NULL ( if_blu‘oÙh ); 476 `VERIFY_ADDR_ARG (2, & addr ); 478 `h®‹¡_šfo ("if_bluetooth->get_connection_state : %d\n", 479 if_blu‘oÙh -> `g‘_cÚÃùiÚ_¡©e (& addr )); 480 } } 483  $di§bË_p ( ¬gc , cÚ¡ ** ¬gv ) 485 `RETURN_IF_NULL ( if_blu‘oÙh ); 487 `EXEC ( if_blu‘oÙh -> di§bË ); 488 } } 490  $g‘_ad­‹r_´Ý”t›s_p ( ¬gc , cÚ¡ ** ¬gv ) 492 `RETURN_IF_NULL ( if_blu‘oÙh ); 494 `EXEC ( if_blu‘oÙh -> g‘_ad­‹r_´Ý”t›s ); 495 } } 497  $g‘_ad­‹r_´Ý”ty_c ( ¬gc , cÚ¡ ** ¬gv , 498 ’um_func *’um_func, ** u£r ) 500 ià( ¬gc == 3) { 501 * u£r = `TYPE_ENUM ( bt_´Ý”ty_ty³_t ); 502 * ’um_func = ’um_defšes ; 504 } } 506  $g‘_ad­‹r_´Ý”ty_p ( ¬gc , cÚ¡ ** ¬gv ) 508  ty³ ; 510 `RETURN_IF_NULL ( if_blu‘oÙh ); 511 `VERIFY_PROP_TYPE_ARG (2, ty³ ); 513 `EXEC ( if_blu‘oÙh -> g‘_ad­‹r_´Ý”ty , ty³ ); 514 } } 516 cÚ¡ * cÚ¡ gÇmes [] = { 520 NULL 523  $£t_ad­‹r_´Ý”ty_c ( ¬gc , cÚ¡ ** ¬gv , 524 ’um_func *’um_func, ** u£r ) 526 ià( ¬gc == 3) { 527 * u£r = (*è Çmes ; 528 * ’um_func = ’um_¡ršgs ; 529 } ià( ¬gc == 4) { 530 ià(0 =ð `¡rcmp ( ¬gv [2], "BT_PROPERTY_ADAPTER_SCAN_MODE")) { 531 * u£r = `TYPE_ENUM ( bt_sÿn_mode_t ); 532 * ’um_func = ’um_defšes ; 535 } } 537  $£t_ad­‹r_´Ý”ty_p ( ¬gc , cÚ¡ ** ¬gv ) 539 bt_´Ý”ty_t ´Ý”ty ; 540 bt_sÿn_mode_t mode ; 541  timeout ; 543 `RETURN_IF_NULL ( if_blu‘oÙh ); 544 `VERIFY_PROP_TYPE_ARG (2, ´Ý”ty . ty³ ); 546 ià( ¬gc <= 3) { 547 `h®‹¡_”rÜ ("No…roperty value specified\n"); 550  ´Ý”ty . ty³ ) { 551  BT_PROPERTY_BDNAME : 552 ´Ý”ty . Ën = `¡¾’ ( ¬gv [3]) + 1; 553 ´Ý”ty . v® = (*è ¬gv [3]; 556  BT_PROPERTY_ADAPTER_SCAN_MODE : 557 mode = `¡r2btsÿnmode ( ¬gv [3]); 558 ´Ý”ty . Ën = ( bt_sÿn_mode_t ); 559 ´Ý”ty . v® = & mode ; 562  BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT : 563 timeout = `©oi ( ¬gv [3]); 564 ´Ý”ty . v® = & timeout ; 565 ´Ý”ty . Ën = ( timeout ); 568  BT_PROPERTY_BDADDR : 569  BT_PROPERTY_UUIDS : 570  BT_PROPERTY_CLASS_OF_DEVICE : 571  BT_PROPERTY_TYPE_OF_DEVICE : 572  BT_PROPERTY_SERVICE_RECORD : 573  BT_PROPERTY_ADAPTER_BONDED_DEVICES : 574  BT_PROPERTY_REMOTE_FRIENDLY_NAME : 575  BT_PROPERTY_REMOTE_RSSI : 576  BT_PROPERTY_REMOTE_VERSION_INFO : 577  BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP : 578 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 579  BT_PROPERTY_LOCAL_LE_FEATURES : 582 `h®‹¡_”rÜ ("Inv®id…rÝ”ty %s\n", ¬gv [3]); 586 `EXEC ( if_blu‘oÙh -> £t_ad­‹r_´Ý”ty , & ´Ý”ty ); 587 } } 590  $com¶‘e_addr_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 591 ** u£r ) 593 ià( ¬gc == 3) { 594 * u£r = NULL ; 595 * ’um_func = ’um_deviûs ; 597 } } 600  #g‘_»mÙe_deviû_´Ý”t›s_c com¶‘e_addr_c ) 602  $g‘_»mÙe_deviû_´Ý”t›s_p ( ¬gc , cÚ¡ ** ¬gv ) 604 bt_bdaddr_t addr ; 606 `RETURN_IF_NULL ( if_blu‘oÙh ); 607 `VERIFY_ADDR_ARG (2, & addr ); 609 `EXEC ( if_blu‘oÙh -> g‘_»mÙe_deviû_´Ý”t›s , & addr ); 610 } } 612  $g‘_»mÙe_deviû_´Ý”ty_c ( ¬gc , cÚ¡ ** ¬gv , 613 ’um_func *enum_func, 614 ** u£r ) 616 ià( ¬gc == 3) { 617 * u£r = NULL ; 618 * ’um_func = ’um_deviûs ; 619 } ià( ¬gc == 4) { 620 * u£r = `TYPE_ENUM ( bt_´Ý”ty_ty³_t ); 621 * ’um_func = ’um_defšes ; 623 } } 625  $g‘_»mÙe_deviû_´Ý”ty_p ( ¬gc , cÚ¡ ** ¬gv ) 627 bt_´Ý”ty_ty³_t ty³ ; 628 bt_bdaddr_t addr ; 630 `RETURN_IF_NULL ( if_blu‘oÙh ); 631 `VERIFY_ADDR_ARG (2, & addr ); 632 `VERIFY_PROP_TYPE_ARG (3, ty³ ); 634 `EXEC ( if_blu‘oÙh -> g‘_»mÙe_deviû_´Ý”ty , & addr , ty³ ); 635 } } 641  #£t_»mÙe_deviû_´Ý”ty_c g‘_»mÙe_deviû_´Ý”ty_c ) 643  $£t_»mÙe_deviû_´Ý”ty_p ( ¬gc , cÚ¡ ** ¬gv ) 645 bt_´Ý”ty_t ´Ý”ty ; 646 bt_bdaddr_t addr ; 648 `RETURN_IF_NULL ( if_blu‘oÙh ); 649 `VERIFY_ADDR_ARG (2, & addr ); 650 `VERIFY_PROP_TYPE_ARG (3, ´Ý”ty . ty³ ); 652  ´Ý”ty . ty³ ) { 653  BT_PROPERTY_REMOTE_FRIENDLY_NAME : 654 ´Ý”ty . Ën = `¡¾’ ( ¬gv [4]); 655 ´Ý”ty . v® = (*è ¬gv [4]; 657  BT_PROPERTY_BDNAME : 658  BT_PROPERTY_BDADDR : 659  BT_PROPERTY_UUIDS : 660  BT_PROPERTY_CLASS_OF_DEVICE : 661  BT_PROPERTY_TYPE_OF_DEVICE : 662  BT_PROPERTY_SERVICE_RECORD : 663  BT_PROPERTY_ADAPTER_SCAN_MODE : 664  BT_PROPERTY_ADAPTER_BONDED_DEVICES : 665  BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT : 666  BT_PROPERTY_REMOTE_RSSI : 667  BT_PROPERTY_REMOTE_VERSION_INFO : 668  BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP : 669 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 670  BT_PROPERTY_LOCAL_LE_FEATURES : 676 `EXEC ( if_blu‘oÙh -> £t_»mÙe_deviû_´Ý”ty , & addr , & ´Ý”ty ); 677 } } 680  #g‘_»mÙe_£rviû_»cÜd_c com¶‘e_addr_c ) 682  $g‘_»mÙe_£rviû_»cÜd_p ( ¬gc , cÚ¡ ** ¬gv ) 684 bt_bdaddr_t addr ; 685 bt_uuid_t uuid ; 687 `RETURN_IF_NULL ( if_blu‘oÙh ); 688 `VERIFY_ADDR_ARG (2, & addr ); 690 ià( ¬gc <= 3) { 691 `h®‹¡_”rÜ ("No uuid specified\n"); 695 `¡r2bt_uuid_t ( ¬gv [3], & uuid ); 697 `EXEC ( if_blu‘oÙh -> g‘_»mÙe_£rviû_»cÜd , & addr , & uuid ); 698 } } 701  #g‘_»mÙe_£rviûs_c com¶‘e_addr_c ) 703  $g‘_»mÙe_£rviûs_p ( ¬gc , cÚ¡ ** ¬gv ) 705 bt_bdaddr_t addr ; 707 `RETURN_IF_NULL ( if_blu‘oÙh ); 708 `VERIFY_ADDR_ARG (2, & addr ); 710 `EXEC ( if_blu‘oÙh -> g‘_»mÙe_£rviûs , & addr ); 711 } } 713  $¡¬t_discov”y_p ( ¬gc , cÚ¡ ** ¬gv ) 715 `RETURN_IF_NULL ( if_blu‘oÙh ); 717 `EXEC ( if_blu‘oÙh -> ¡¬t_discov”y ); 718 } } 720  $ÿnûl_discov”y_p ( ¬gc , cÚ¡ ** ¬gv ) 722 `RETURN_IF_NULL ( if_blu‘oÙh ); 724 `EXEC ( if_blu‘oÙh -> ÿnûl_discov”y ); 725 } } 728  #ü—‹_bÚd_c com¶‘e_addr_c ) 730  $ü—‹_bÚd_p ( ¬gc , cÚ¡ ** ¬gv ) 732 bt_bdaddr_t addr ; 733 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 734  Œª¥Üt ; 737 `RETURN_IF_NULL ( if_blu‘oÙh ); 738 `VERIFY_ADDR_ARG (2, & addr ); 740 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 741 ià( ¬gc < 4) 742 Œª¥Üt = BT_TRANSPORT_UNKNOWN ; 744 Œª¥Üt = `©oi ( ¬gv [3]); 746 `EXEC ( if_blu‘oÙh -> ü—‹_bÚd , & addr , Œª¥Üt ); 748 `EXEC ( if_blu‘oÙh -> ü—‹_bÚd , & addr ); 750 } } 753  #»move_bÚd_c com¶‘e_addr_c ) 755  $»move_bÚd_p ( ¬gc , cÚ¡ ** ¬gv ) 757 bt_bdaddr_t addr ; 759 `RETURN_IF_NULL ( if_blu‘oÙh ); 760 `VERIFY_ADDR_ARG (2, & addr ); 762 `EXEC ( if_blu‘oÙh -> »move_bÚd , & addr ); 763 } } 766  #ÿnûl_bÚd_c com¶‘e_addr_c ) 768  $ÿnûl_bÚd_p ( ¬gc , cÚ¡ ** ¬gv ) 770 bt_bdaddr_t addr ; 772 `RETURN_IF_NULL ( if_blu‘oÙh ); 773 `VERIFY_ADDR_ARG (2, & addr ); 775 `EXEC ( if_blu‘oÙh -> ÿnûl_bÚd , & addr ); 776 } } 778  $pš_»¶y_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 779 ** u£r ) 781 cÚ¡ *cÚ¡ com¶‘iÚs [] = { Ï¡_»mÙe_addr , NULL }; 783 ià( ¬gc == 3) { 784 * u£r = (*è com¶‘iÚs ; 785 * ’um_func = ’um_¡ršgs ; 787 } } 789  $pš_»¶y_p ( ¬gc , cÚ¡ ** ¬gv ) 791 bt_bdaddr_t addr ; 792 bt_pš_code_t pš ; 793  pš_Ën = 0; 794  acû± = 0; 796 `RETURN_IF_NULL ( if_blu‘oÙh ); 797 `VERIFY_ADDR_ARG (2, & addr ); 799 ià( ¬gc > 3) { 800 acû± = 1; 801 pš_Ën = `¡¾’ ( ¬gv [3]); 802 `memýy ( pš .pš, ¬gv [3], pš_Ën ); 805 `EXEC ( if_blu‘oÙh -> pš_»¶y , & addr , acû± , pš_Ën , & pš ); 806 } } 808  $s¥_»¶y_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 809 ** u£r ) 811 ià( ¬gc == 3) { 812 * u£r = Ï¡_»mÙe_addr ; 813 * ’um_func = ’um_Úe_¡ršg ; 814 } ià( ¬gc == 5) { 815 * u£r = "1"; 816 * ’um_func = ’um_Úe_¡ršg ; 817 } ià( ¬gc == 4) { 818 ià(-1 !ð(è Ï¡_s¥_v¬ŸÁ ) { 819 * u£r = (*è `bt_s¥_v¬ŸÁ_t2¡r ( Ï¡_s¥_v¬ŸÁ ); 820 * ’um_func = ’um_Úe_¡ršg ; 822 * u£r = `TYPE_ENUM ( bt_s¥_v¬ŸÁ_t ); 823 * ’um_func = ’um_defšes ; 826 } } 828  $s¥_»¶y_p ( ¬gc , cÚ¡ ** ¬gv ) 830 bt_bdaddr_t addr ; 831 bt_s¥_v¬ŸÁ_t v¬ ; 832  acû± ; 833  ·sskey ; 835 `RETURN_IF_NULL ( if_blu‘oÙh ); 836 `VERIFY_ADDR_ARG (2, & addr ); 838 ià( ¬gc < 4) { 839 `h®‹¡_”rÜ ("No ssp variant specified\n"); 843 v¬ = `¡r2bts¥v¬ŸÁ ( ¬gv [3]); 844 ià( ¬gc < 5) { 845 `h®‹¡_”rÜ ("No‡ccept value specified\n"); 849 acû± = `©oi ( ¬gv [4]); 850 ·sskey = 0; 852 ià( acû± && v¬ =ð BT_SSP_VARIANT_PASSKEY_ENTRY && ¬gc >= 5) 853 ·sskey = `©oi ( ¬gv [4]); 855 `EXEC ( if_blu‘oÙh -> s¥_»¶y , & addr , v¬ , acû± , ·sskey ); 856 } } 858  $g‘_´ofže_š‹rçû_c ( ¬gc , cÚ¡ ** ¬gv , 859 ’um_func *’um_func, ** u£r ) 861 cÚ¡ *cÚ¡ ´ofže_ids [] = { 862 BT_PROFILE_HANDSFREE_ID , 863 BT_PROFILE_ADVANCED_AUDIO_ID , 864 BT_PROFILE_HEALTH_ID , 865 BT_PROFILE_SOCKETS_ID , 866 BT_PROFILE_HIDHOST_ID , 867 BT_PROFILE_PAN_ID , 868 BT_PROFILE_GATT_ID , 869 BT_PROFILE_AV_RC_ID , 870 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 871 BT_PROFILE_HANDSFREE_CLIENT_ID , 872 BT_PROFILE_MAP_CLIENT_ID , 873 BT_PROFILE_AV_RC_CTRL_ID , 874 BT_PROFILE_ADVANCED_AUDIO_SINK_ID , 876 NULL 879 ià( ¬gc == 3) { 880 * u£r = (*è ´ofže_ids ; 881 * ’um_func = ’um_¡ršgs ; 883 } } 885  $g‘_´ofže_š‹rçû_p ( ¬gc , cÚ¡ ** ¬gv ) 887 cÚ¡ * id ; 888 cÚ¡ ** pif = NULL ; 890 `RETURN_IF_NULL ( if_blu‘oÙh ); 891 ià( ¬gc <= 2) { 892 `h®‹¡_”rÜ ("No interface specified\n"); 896 id = ¬gv [2]; 898 ià( `¡rcmp ( BT_PROFILE_HANDSFREE_ID , id ) == 0) 899 pif = (cÚ¡ **è& if_hf ; 900 ià( `¡rcmp ( BT_PROFILE_ADVANCED_AUDIO_ID , id ) == 0) 901 pif = (cÚ¡ **è& if_av ; 902 ià( `¡rcmp ( BT_PROFILE_HEALTH_ID , id ) == 0) 903 pif = (cÚ¡ **è& if_hl ; 904 ià( `¡rcmp ( BT_PROFILE_SOCKETS_ID , id ) == 0) 905 pif = (cÚ¡ **è& if_sock ; 906 ià( `¡rcmp ( BT_PROFILE_HIDHOST_ID , id ) == 0) 907 pif = (cÚ¡ **è& if_hh ; 908 ià( `¡rcmp ( BT_PROFILE_PAN_ID , id ) == 0) 909 pif = (cÚ¡ **è& if_·n ; 910 ià( `¡rcmp ( BT_PROFILE_AV_RC_ID , id ) == 0) 911 pif = (cÚ¡ **è& if_rc ; 912 ià( `¡rcmp ( BT_PROFILE_GATT_ID , id ) == 0) 913 pif = (cÚ¡ **è& if_g©t ; 914 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 915 ià( `¡rcmp ( BT_PROFILE_AV_RC_CTRL_ID , id ) == 0) 916 pif = (cÚ¡ **è& if_rc_ù¾ ; 917 ià( `¡rcmp ( BT_PROFILE_HANDSFREE_CLIENT_ID , id ) == 0) 918 pif = (cÚ¡ **è& if_hf_þ›Á ; 919 ià( `¡rcmp ( BT_PROFILE_MAP_CLIENT_ID , id ) == 0) 920 pif = (cÚ¡ **è& if_mû ; 921 ià( `¡rcmp ( BT_PROFILE_ADVANCED_AUDIO_SINK_ID , id ) == 0) 922 pif = (cÚ¡ **è& if_av_sšk ; 925 `h®‹¡_”rÜ ("%s is‚ot correct for get_profile_interface\n", 926 id ); 928 ià( pif !ð NULL ) { 929 * pif = if_blu‘oÙh -> `g‘_´ofže_š‹rçû ( id ); 930 `h®‹¡_šfo ("g‘_´ofže_š‹rçû(%sè: %p\n", id , * pif ); 932 } } 934  $dut_mode_cÚfigu»_p ( ¬gc , cÚ¡ ** ¬gv ) 936 ušt8_t mode ; 938 `RETURN_IF_NULL ( if_blu‘oÙh ); 940 ià( ¬gc <= 2) { 941 `h®‹¡_”rÜ ("No dut mode specified\n"); 945 mode = `¡¹Þ ( ¬gv [2], NULL , 0); 947 `EXEC ( if_blu‘oÙh -> dut_mode_cÚfigu» , mode ); 948 } } 950  $dut_mode_£nd_p ( ¬gc , cÚ¡ ** ¬gv ) 952 `h®‹¡_”rÜ ("not implemented\n"); 953 } } 955  $Ë_‹¡_mode_p ( ¬gc , cÚ¡ ** ¬gv ) 957 `h®‹¡_”rÜ ("not implemented\n"); 958 } } 960  $cÚfig_hci_¢oÝ_log_p ( ¬gc , cÚ¡ ** ¬gv ) 962 ušt8_t mode ; 964 `RETURN_IF_NULL ( if_blu‘oÙh ); 966 ià( ¬gc <= 2) { 967 `h®‹¡_”rÜ ("No mode specified\n"); 971 mode = `¡¹Þ ( ¬gv [2], NULL , 0); 973 `EXEC ( if_blu‘oÙh -> cÚfig_hci_¢oÝ_log , mode ); 974 } } 976  m‘hod gm‘hods [] = { 977 STD_METHOD ( š™ ), 978 STD_METHOD ( þ—nup ), 979 STD_METHOD ( ’abË ), 980 STD_METHOD ( di§bË ), 981 STD_METHOD ( g‘_ad­‹r_´Ý”t›s ), 982 STD_METHODCH ( g‘_ad­‹r_´Ý”ty , ""), 983 STD_METHODCH ( £t_ad­‹r_´Ý”ty , " "), 984 STD_METHODCH ( g‘_»mÙe_deviû_´Ý”t›s , ""), 985 STD_METHODCH ( g‘_»mÙe_deviû_´Ý”ty , " "), 986 STD_METHODCH ( £t_»mÙe_deviû_´Ý”ty , 988 STD_METHODCH ( g‘_»mÙe_£rviû_»cÜd , " "), 989 STD_METHODCH ( g‘_»mÙe_£rviûs , ""), 990 STD_METHOD ( ¡¬t_discov”y ), 991 STD_METHOD ( ÿnûl_discov”y ), 992 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 993 STD_METHODCH ( ü—‹_bÚd , " []"), 994 STD_METHOD ( »ad_’”gy_šfo ), 995 STD_METHODCH ( g‘_cÚÃùiÚ_¡©e , ""), 997 STD_METHODCH ( ü—‹_bÚd , ""), 999 STD_METHODCH ( »move_bÚd , ""), 1000 STD_METHODCH ( ÿnûl_bÚd , ""), 1001 STD_METHODCH ( pš_»¶y , "
[]"), 1002 STD_METHODCH ( s¥_»¶y , "
1|0 []"), 1003 STD_METHODCH ( g‘_´ofže_š‹rçû , ""), 1004 STD_METHODH ( dut_mode_cÚfigu» , ""), 1005 STD_METHOD ( dut_mode_£nd ), 1006 STD_METHOD ( Ë_‹¡_mode ), 1007 STD_METHODH ( cÚfig_hci_¢oÝ_log , ""), 1008 END_METHOD 1011 cÚ¡  š‹rçû gblu‘oÙh_if = { 1012 . Çme = "bluetooth", 1013 . gm‘hods = m‘hods @android/client/if-gatt.c 18  ~<¡dboÞ.h > 20  ~<¡ršg.h > 22  ~ 24  ~"../h®-utžs.h " 25  ~"if-maš.h " 27 cÚ¡ btg©t_š‹rçû_t * gif_g©t = NULL ; 34  #¡r2btg©t_desü_id_t ¡r2btg©t_g©t_id_t ) 35  #btg©t_desü_id_t2¡r btg©t_g©t_id_t2¡r ) 36  #btg©t_desü_id_t btg©t_g©t_id_t ) 38  #MAX_CHAR_ID_STR_LEN ( MAX_UUID_STR_LEN + 3 + 11) ) 39  #MAX_SRVC_ID_STR_LEN ( MAX_UUID_STR_LEN + 3 + 11 + 1 + 11) ) 41  #MAX_HEX_VAL_STR_LEN 100 ) 42  #MAX_NOTIFY_PARAMS_STR_LEN ( MAX_SRVC_ID_STR_LEN + MAX_CHAR_ID_STR_LEN \ 43 + MAX_ADDR_STR_LEN + MAX_HEX_VAL_STR_LEN + 60) ) 44  #MAX_READ_PARAMS_STR_LEN ( MAX_SRVC_ID_STR_LEN + MAX_CHAR_ID_STR_LEN \ 45 + MAX_UUID_STR_LEN + MAX_HEX_VAL_STR_LEN + 80) ) 48  #VERIFY_INT_ARG ( n , v , ”r ) \ 50 ià( n < ¬gc ) \ 51 v = `¡¹Þ ( ¬gv [ n ], NULL , 0); \ 53 `h®‹¡_”rÜ ( ”r ); \ 56 } 0) ) 58  #VERIFY_HEX_ARG ( n , v , ”r ) \ 60 ià( n < ¬gc ) \ 61 v = `¡¹Þ ( ¬gv [ n ], NULL , 16); \ 63 `h®‹¡_”rÜ ( ”r ); \ 66 } 0) ) 69  #VERIFY_CLIENT_IF ( n , v è `VERIFY_INT_ARG Ò, v, "NØþ›Á_ià¥ecif›d\n") ) 70  #VERIFY_SERVER_IF ( n , v è `VERIFY_INT_ARG Ò, v, "NØ£rv”_ià¥ecif›d\n") ) 71  #VERIFY_CONN_ID ( n , v è `VERIFY_INT_ARG Ò, v, "NØcÚn_ià¥ecif›d\n") ) 72  #VERIFY_TRANS_ID ( n , v è `VERIFY_INT_ARG Ò, v, "NØŒªs_id s³cif›d\n") ) 73  #VERIFY_STATUS ( n , v è `VERIFY_INT_ARG Ò, v, "NØ¡©u ¥ecif›d\n") ) 74  #VERIFY_OFFSET ( n , v è `VERIFY_INT_ARG Ò, v, "NØoff£ˆ¥ecif›d\n") ) 75  #VERIFY_TEST_ARG ( n , v è `VERIFY_INT_ARG Ò, v, "NØ‹¡‡rg s³cif›d\n") ) 76  #VERIFY_ACTION ( n , v è `VERIFY_INT_ARG Ò, v, "NØaùiÚ s³cif›d\n") ) 77  #VERIFY_FILT_TYPE ( n , v è `VERIFY_INT_ARG Ò, v, "NØfž‹¸¥ecif›d\n") ) 78  #VERIFY_FILT_INDEX ( n , v è `VERIFY_INT_ARG (n, v, \ 79 "NØfž‹¸šdex s³cif›d\n") ) 80  #VERIFY_FEAT_SELN ( n , v è `VERIFY_INT_ARG Ò, v, "NØã© s–À¥ecif›d\n") ) 81  #VERIFY_LIST_LOGIC_TYPE ( n , v è `VERIFY_INT_ARG (n, v, \ 82 "NØli¡†ogiøty³ s³cif›d\n") ) 83  #VERIFY_FILT_LOGIC_TYPE ( n , v è `VERIFY_INT_ARG (n, v, \ 84 "NØfžˆlogiøty³ s³cif›d\n") ) 85  #VERIFY_RSSI_HI_THR ( n , v è `VERIFY_INT_ARG (n, v, \ 86 "NØrss˜h˜th»shÞd s³cif›d\n") ) 87  #VERIFY_RSSI_LOW_THR ( n , v è `VERIFY_INT_ARG (n, v, \ 88 "NØlowh»shÞd s³cif›d\n") ) 89  #VERIFY_DELY_MODE ( n , v è `VERIFY_INT_ARG Ò, v, "NØd–ay mod¥ecif›d\n") ) 90  #VERIFY_FND_TIME ( n , v è `VERIFY_INT_ARG Ò, v, "NØfoundim¥ecif›d\n") ) 91  #VERIFY_LOST_TIME ( n , v è `VERIFY_INT_ARG Ò, v, "NØlo¡im¥ecif›d\n") ) 92  #VERIFY_FND_TIME_CNT ( n , v è `VERIFY_INT_ARG (n, v, \ 93 "NØfoundim” couÁ” s³cif›d\n") ) 94  #VERIFY_COMP_ID ( n , v è `VERIFY_INT_ARG Ò, v, "NØcom·ny id s³cif›d\n") ) 95  #VERIFY_COMP_ID_MASK ( n , v è `VERIFY_INT_ARG (n, v, \ 96 "NØcomp. id mask s³cif›d\n") ) 97  #VERIFY_DATA_LEN ( n , v è `VERIFY_INT_ARG Ò, v, "NØd©¨ËÀ¥ecif›d\n") ) 98  #VERIFY_MASK_LEN ( n , v è `VERIFY_INT_ARG Ò, v, "NØmask†’ s³cif›d\n") ) 99  #VERIFY_MIN_INTERVAL ( n , v è `VERIFY_INT_ARG (n, v, \ 100 "NØmš iÁ”v® s³cif›d\n") ) 101  #VERIFY_MAX_INTERVAL ( n , v è `VERIFY_INT_ARG (n, v, \ 102 "NØmax iÁ”v® s³cif›d\n") ) 103  #VERIFY_APPEARANCE ( n , v è `VERIFY_INT_ARG Ò, v, "NØ­³¿nû s³cif›d\n") ) 104  #VERIFY_MANUFACTURER_LEN ( n , v è `VERIFY_INT_ARG (n, v, \ 105 "NØmªuçùu»¸ËÀ¥ecif›d\n") ) 106  #VERIFY_SERVICE_DATA_LEN ( n , v è `VERIFY_INT_ARG (n, v, \ 107 "NØ£rviû d©¨ËÀ¥ecif›d\n") ) 108  #VERIFY_SERVICE_UUID_LEN ( n , v è `VERIFY_INT_ARG (n, v, \ 109 "NØ£rviû uuid†’ s³cif›d\n") ) 110  #VERIFY_MTU ( n , v è `VERIFY_INT_ARG Ò, v, "NØmtu s³cif›d\n") ) 111  #VERIFY_LATENCY ( n , v è `VERIFY_INT_ARG (n, v, \ 112 "NØÏ‹ncy s³cif›d\n") ) 113  #VERIFY_TIMEOUT ( n , v è `VERIFY_INT_ARG Ò, v, "NØtimeouˆ¥ecif›d\n") ) 114  #VERIFY_SCAN_INTERVAL ( n , v è `VERIFY_INT_ARG (n, v, \ 115 "NØsÿÀš‹rv® s³cif›d\n") ) 116  #VERIFY_SCAN_WINDOW ( n , v è `VERIFY_INT_ARG (n, v, \ 117 "NØsÿÀwšdow s³cif›d\n") ) 118  #VERIFY_ADV_TYPE ( n , v è `VERIFY_INT_ARG (n, v, \ 119 "NØadv”tisšgy³ s³cif›d\n") ) 120  #VERIFY_CHNL_MAP ( n , v è `VERIFY_INT_ARG (n, v, \ 121 "NØchªÃÈm­ s³cif›d\n") ) 122  #VERIFY_TX_POWER ( n , v è `VERIFY_INT_ARG (n, v, \ 123 "NØtx…ow” s³cif›d\n") ) 124  #VERIFY_TIMEOUT_S ( n , v è `VERIFY_INT_ARG (n, v, \ 125 "NØtimeouˆš seø¥ecif›d\n") ) 126  #VERIFY_BATCH_SCAN_FULL_MAX ( n , v è `VERIFY_INT_ARG (n, v, \ 127 "NØb©ch sÿÀfuÎ max s³cif›d\n") ) 128  #VERIFY_BATCH_SCAN_TRUNC_MAX ( n , v è `VERIFY_INT_ARG (n, v, \ 129 "NØb©ch sÿÀŒunømax s³cif›d\n") ) 130  #VERIFY_BATCH_SCAN_NOTIFY_THR ( n , v è `VERIFY_INT_ARG (n, v, \ 131 "NØb©ch sÿÀnÙifyh»shÞd s³cif›d\n") ) 132  #VERIFY_SCAN_MODE ( n , v è `VERIFY_INT_ARG (n, v, \ 133 "NØsÿÀmod¥ecif›d\n") ) 134  #VERIFY_ADDR_TYPE ( n , v è `VERIFY_INT_ARG (n, v, \ 135 "NØadd»s ty³ s³cif›d\n") ) 136  #VERIFY_DISCARD_RULE ( n , v è `VERIFY_INT_ARG (n, v, \ 137 "NØdisÿrd„uË s³cif›d\n") ) 138  #VERIFY_HANDLE ( n , v è `VERIFY_HEX_ARG Ò, v, "NØ"#v" s³cif›d\n") ) 139  #VERIFY_SERVICE_HANDLE ( n , v è `VERIFY_HANDLE Ò, v) ) 141  #VERIFY_UUID ( n , v ) \ 143 ià( n < ¬gc ) \ 144 `g©t_¡r2bt_uuid_t ( ¬gv [ n ], -1, v ); \ 146 `h®‹¡_”rÜ ("No uuid specified\n"); \ 149 } 0) ) 151  #VERIFY_SRVC_ID ( n , v ) \ 153 ià( n < ¬gc ) \ 154 `¡r2btg©t_¤vc_id_t ( ¬gv [ n ], v ); \ 156 `h®‹¡_”rÜ ("No srvc_id specified\n"); \ 159 } 0) ) 161  #VERIFY_CHAR_ID ( n , v ) \ 163 ià( n < ¬gc ) \ 164 `¡r2btg©t_g©t_id_t ( ¬gv [ n ], v ); \ 166 `h®‹¡_”rÜ ("No char_id specified\n"); \ 169 } 0) ) 171  #VERIFY_DESCR_ID ( n , v ) \ 173 ià( n < ¬gc ) \ 174 `¡r2btg©t_desü_id_t ( ¬gv [ n ], v ); \ 176 `h®‹¡_”rÜ ("No descr_id specified\n"); \ 179 } 0) ) 181  #GET_VERIFY_HEX_STRING ( i , v , l ) \ 183  Î ;\ 184 cÚ¡ * n = ¬gv [ i ]; \ 185 ià( ¬gc <ð i ) { \ 186 `h®‹¡_”rÜ ("No value specified\n"); \ 189 ià( n [0] != '0' || (n[1] != 'X' &&‚[1] != 'x')) { \ 190 `h®‹¡_”rÜ ("Value must be hex string\n"); \ 193 Î = `fžl_bufãr ( n + 2, ( ušt8_t *è v , (v)); \ 194 ià( Î < 0) { \ 195 `h®‹¡_”rÜ ("Value must be byte hex string\n"); \ 198 l = Î ; \ 199 } 0) ) 202 cÚ¡  gGATT_BASE_UUID [] = { 215 * $g©t_uuid_t2¡r (cÚ¡ bt_uuid_t * uuid , * buf ) 217  shiá = 0; 218  i = 16; 219  lim™ = 0; 220  j = 0; 223 ià(0 =ð `memcmp (& uuid -> uu , & GATT_BASE_UUID , 224 ( bt_uuid_t ) - 4)) { 225 lim™ = 12; 227 ià( uuid -> uu [15] == 0 && uuid->uu[14] == 0) 228 i = 14; 231  i -- > lim™ ) { 232 ià( i == 11 || i == 9 || i == 7 || i == 5) { 233 buf [ j * 2 + shiá ] = '-'; 234 shiá ++; 237 `¥rštf ( buf + j * 2 + shiá , "%02x", uuid -> uu [ i ]); 238 ++ j ; 241  buf ; 242 } } 248  $sÿn_f›ld (cÚ¡ * ¡r ,  Ën , ušt8_t * out ,  out_size ) 250  i ; 252 `mem£t ( out , 0, out_size ); 253 ià( out_size * 2 > Ën + 1) 254 out_size = ( Ën + 1) / 2; 256  i = 0; i < out_size && Ën > 0; ++i) { 257 Ën -= 2; 258 ià( Ën >= 0) 259 `ssÿnf ( ¡r + Ën , "%02hhx", & out [ i ]); 261 `ssÿnf ( ¡r , "%1hhx", & out [ i ]); 263 } } 266 cÚ¡ * $¡rch¾im™ (cÚ¡ * p , cÚ¡ * e ,  c ) 268  p < e && *°!ð(è c ) 269 ++ p ; 271  p < e ?… : NULL ; 272 } } 283  $g©t_¡r2bt_uuid_t (cÚ¡ * ¡r ,  Ën , bt_uuid_t * uuid ) 285  dash_út = 0; 286  dashes [6] = {-1}; 287  ušt8_t fžed_off£t [] = { 16, 12, 10, 8, 6, 0 }; 288 cÚ¡ * p = ¡r ; 289 cÚ¡ * e ; 290  i ; 292 e = ¡r + (( Ën >ð0è?†’ : (è `¡¾’ (str)); 294  p !ð NULL && dash_út < 5) { 295 cÚ¡ * f = `¡rch¾im™ ( p , e , '-'); 297 ià( f !ð NULL ) 298 dashes [++ dash_út ] = f ++ - ¡r ; 299 p = f ; 303 ià( dash_út < 5) 304 dashes [++ dash_út ] = e - ¡r ; 306 `memýy ( uuid , GATT_BASE_UUID , ( bt_uuid_t )); 309 ià( dash_út =ð1 && dashes [1] > 8) { 310 ià( dashes [1] > 32) 311 dashes [1] = 32; 312 `sÿn_f›ld ( ¡r , dashes [1], 313 & uuid -> uu [16 - ( dashes [1] + 1) / 2], 314 ( dashes [1] + 1) / 2); 316  i = 0; i < dash_út ; ++i) { 317 `sÿn_f›ld ( ¡r + dashes [ i ] + 1, 318 dashes [ i + 1] - dashes[i] - 1, 319 & uuid -> uu [ fžed_off£t [ i + 1]], 320 fžed_off£t [ i ] - filed_offset[i + 1]); 323 } } 326 * $btg©t_g©t_id_t2¡r (cÚ¡ btg©t_g©t_id_t * ch¬_id , * buf ) 328  uuid_buf [ MAX_UUID_STR_LEN ]; 330 `¥rštf ( buf , "{%s,%d}", `g©t_uuid_t2¡r (& ch¬_id -> uuid , uuid_buf ), 331 ch¬_id -> š¡_id ); 332  buf ; 333 } } 336  $¡r2btg©t_g©t_id_t (cÚ¡ * buf , btg©t_g©t_id_t * ch¬_id ) 338 cÚ¡ * e ; 340 `memýy (& ch¬_id -> uuid , & GATT_BASE_UUID , ( bt_uuid_t )); 341 ch¬_id -> š¡_id = 0; 343 ià(* buf == '{') 344 buf ++; 345 e = `¡½brk ( buf , " ,}"); 346 ià( e =ð NULL ) 347 e = buf + `¡¾’ (buf); 349 `g©t_¡r2bt_uuid_t ( buf , e - buf, & ch¬_id -> uuid ); 350 ià(* e == ',') { 351 buf = e + 1; 352 e = `¡½brk ( buf , " ,}"); 353 ià( e =ð NULL ) 354 e = buf + `¡¾’ (buf); 355 ià( buf < e ) 356 ch¬_id -> š¡_id = `©oi ( buf ); 358 } } 361 * $btg©t_¤vc_id_t2¡r (cÚ¡ btg©t_¤vc_id_t * ¤vc_id , * buf ) 363  uuid_buf [ MAX_UUID_STR_LEN ]; 365 `¥rštf ( buf , "{%s,%d,%d}", `g©t_uuid_t2¡r (& ¤vc_id -> id . uuid , uuid_buf ), 366 ¤vc_id -> id . š¡_id , srvc_id-> is_´im¬y ); 367  buf ; 368 } } 371  $¡r2btg©t_¤vc_id_t (cÚ¡ * buf , btg©t_¤vc_id_t * ¤vc_id ) 373 cÚ¡ * e ; 375 `memýy (& ¤vc_id -> id . uuid , & GATT_BASE_UUID , ( bt_uuid_t )); 376 ¤vc_id -> id . š¡_id = 0; 377 ¤vc_id -> is_´im¬y = 1; 379 ià(* buf == '{') 380 buf ++; 381 e = `¡½brk ( buf , " ,}"); 382 ià( e =ð NULL ) 383 e = buf + `¡¾’ (buf); 385 `g©t_¡r2bt_uuid_t ( buf , e - buf, & ¤vc_id -> id . uuid ); 386 ià(* e == ',') { 387 buf = e + 1; 388 e = `¡½brk ( buf , " ,}"); 389 ià( e =ð NULL ) 390 e = buf + `¡¾’ (buf); 391 ià( buf < e ) 392 ¤vc_id -> id . š¡_id = `©oi ( buf ); 395 ià(* e == ',') { 396 buf = e + 1; 397 e = `¡½brk ( buf , " ,}"); 398 ià( e =ð NULL ) 399 e = buf + `¡¾’ (buf); 400 ià( buf < e ) 401 ¤vc_id -> is_´im¬y = `©oi ( buf ); 403 } } 406 * $¬¿y2¡r (cÚ¡ ušt8_t * v ,  size , * buf ,  out_size ) 408  lim™ = size ; 409  i ; 411 ià( out_size > 0) { 412 * buf = '\0'; 413 ià( size >ð2 * out_size ) 414 lim™ = ( out_size - 2) / 2; 416  i = 0; i < lim™ ; ++i) 417 `¥rštf ( buf + 2 * i , "%02x", v [i]); 420 ià( lim™ < size ) 421 `¥rštf ( buf + 2 * i , "..."); 424  buf ; 425 } } 428 * $btg©t_nÙify_·¿ms_t2¡r (cÚ¡ btg©t_nÙify_·¿ms_t * d©a , 429 * buf ) 431  addr [ MAX_ADDR_STR_LEN ]; 432  ¤vc_id [ MAX_SRVC_ID_STR_LEN ]; 433  ch¬_id [ MAX_CHAR_ID_STR_LEN ]; 434  v®ue [ MAX_HEX_VAL_STR_LEN ]; 436 `¥rštf ( buf , "{bda=%s, srvc_id=%s, char_id=%s, val=%s, is_notify=%u}", 437 `bt_bdaddr_t2¡r (& d©a -> bda , addr ), 438 `btg©t_¤vc_id_t2¡r (& d©a -> ¤vc_id , srvc_id), 439 `btg©t_g©t_id_t2¡r (& d©a -> ch¬_id , char_id), 440 `¬¿y2¡r ( d©a -> v®ue , d©a-> Ën , value, (value)), 441 d©a -> is_nÙify ); 442  buf ; 443 } } 445 * $btg©t_unfÜm©‹d_v®ue_t2¡r (cÚ¡ btg©t_unfÜm©‹d_v®ue_t * v , 446 * buf ,  size ) 448  `¬¿y2¡r ( v -> v®ue , v-> Ën , buf , size ); 449 } } 451 * $btg©t_»ad_·¿ms_t2¡r (cÚ¡ btg©t_»ad_·¿ms_t * d©a , 452 * buf ) 454  ¤vc_id [ MAX_SRVC_ID_STR_LEN ]; 455  ch¬_id [ MAX_CHAR_ID_STR_LEN ]; 456  desü_id [ MAX_UUID_STR_LEN ]; 457  v®ue [ MAX_HEX_VAL_STR_LEN ]; 459 `¥rštf ( buf , "{srvc_id=%s, char_id=%s, descr_id=%s, val=%s value_type=%d, status=%d}", 460 `btg©t_¤vc_id_t2¡r (& d©a -> ¤vc_id , srvc_id), 461 `btg©t_g©t_id_t2¡r (& d©a -> ch¬_id , char_id), 462 `btg©t_desü_id_t2¡r (& d©a -> desü_id , descr_id), 463 `btg©t_unfÜm©‹d_v®ue_t2¡r (& d©a -> v®ue , value, 100), 464 d©a -> v®ue_ty³ , d©a-> ¡©us ); 465  buf ; 466 } } 471  gþ›Á_if_¡r [20]; 472  gcÚn_id_¡r [20]; 474  gÏ¡_addr [ MAX_ADDR_STR_LEN ]; 477  $g©tc_»gi¡”_þ›Á_cb ( ¡©us ,  þ›Á_if , 478 bt_uuid_t * ­p_uuid ) 480  buf [ MAX_UUID_STR_LEN ]; 482 `¢´štf ( þ›Á_if_¡r , (þ›Á_if_¡r), "%d", þ›Á_if ); 484 `h®‹¡_šfo ("%s: stus=%d cl›Á_if=%d‡µ_uuid=%s\n", __func__ , 485 ¡©us , þ›Á_if , 486 `g©t_uuid_t2¡r ( ­p_uuid , buf )); 487 } } 490  $g©tc_sÿn_»suÉ_cb ( bt_bdaddr_t * bda ,  rssi , ušt8_t * adv_d©a ) 492  buf [ MAX_ADDR_STR_LEN ]; 494 `h®‹¡_šfo ("%s: bda=% rssi=%d‡dv_d©a=%p\n", __func__ , 495 `bt_bdaddr_t2¡r ( bda , buf ), rssi , adv_d©a ); 496 } } 499  $g©tc_cÚÃù_cb ( cÚn_id ,  ¡©us ,  þ›Á_if , 500 bt_bdaddr_t * bda ) 502 `h®‹¡_šfo ("%s: conn_id=%d status=%d, client_if=%d bda=%s\n", 503 __func__ , cÚn_id , ¡©us , þ›Á_if , 504 `bt_bdaddr_t2¡r ( bda , Ï¡_addr )); 505 } } 508  $g©tc_discÚÃù_cb ( cÚn_id ,  ¡©us ,  þ›Á_if , 509 bt_bdaddr_t * bda ) 511  buf [ MAX_ADDR_STR_LEN ]; 513 `h®‹¡_šfo ("%s: conn_id=%d status=%d, client_if=%d bda=%s\n", 514 __func__ , cÚn_id , ¡©us , þ›Á_if , 515 `bt_bdaddr_t2¡r ( bda , buf )); 516 } } 522  $g©tc_£¬ch_com¶‘e_cb ( cÚn_id ,  ¡©us ) 524 `h®‹¡_šfo ("%s: cÚn_id=%d stus=%d\n", __func__ , cÚn_id , ¡©us ); 525 } } 528  $g©tc_£¬ch_»suÉ_cb ( cÚn_id , btg©t_¤vc_id_t * ¤vc_id ) 530  ¤vc_id_buf [ MAX_SRVC_ID_STR_LEN ]; 532 `h®‹¡_šfo ("%s: cÚn_id=%d srvc_id=%s\n", __func__ , cÚn_id , 533 `btg©t_¤vc_id_t2¡r ( ¤vc_id , ¤vc_id_buf )); 534 } } 537  $g©tc_g‘_ch¬aù”i¡ic_cb ( cÚn_id ,  ¡©us , 538 btg©t_¤vc_id_t * ¤vc_id , 539 btg©t_g©t_id_t * ch¬_id , 540  ch¬_´Ý ) 542  ¤vc_id_buf [ MAX_SRVC_ID_STR_LEN ]; 543  ch¬_id_buf [ MAX_CHAR_ID_STR_LEN ]; 545 `h®‹¡_šfo ("%s: conn_id=%d status=%d srvc_id=%s char_id=%s, char_prop=0x%x\n", 546 __func__ , cÚn_id , ¡©us , 547 `btg©t_¤vc_id_t2¡r ( ¤vc_id , ¤vc_id_buf ), 548 `btg©t_g©t_id_t2¡r ( ch¬_id , ch¬_id_buf ), ch¬_´Ý ); 551 ià( ¡©us == 0) 552 `EXEC ( if_g©t -> þ›Á -> g‘_ch¬aù”i¡ic , cÚn_id , ¤vc_id , 553 ch¬_id ); 554 } } 557  $g©tc_g‘_desütÜ_cb ( cÚn_id ,  ¡©us , 558 btg©t_¤vc_id_t * ¤vc_id , btg©t_g©t_id_t * ch¬_id , 559 btg©t_desü_id_t * desü_id ) 561  buf [ MAX_UUID_STR_LEN ]; 562  ¤vc_id_buf [ MAX_SRVC_ID_STR_LEN ]; 563  ch¬_id_buf [ MAX_CHAR_ID_STR_LEN ]; 565 `h®‹¡_šfo ("%s: conn_id=%d status=%d srvc_id=%s char_id=%s, descr_id=%s\n", 566 __func__ , cÚn_id , ¡©us , 567 `btg©t_¤vc_id_t2¡r ( ¤vc_id , ¤vc_id_buf ), 568 `btg©t_g©t_id_t2¡r ( ch¬_id , ch¬_id_buf ), 569 `btg©t_desü_id_t2¡r ( desü_id , buf )); 571 ià( ¡©us == 0) 572 `EXEC ( if_g©t -> þ›Á -> g‘_desütÜ , cÚn_id , ¤vc_id , ch¬_id , 573 desü_id ); 574 } } 577  $g©tc_g‘_šþuded_£rviû_cb ( cÚn_id ,  ¡©us , 578 btg©t_¤vc_id_t * ¤vc_id , 579 btg©t_¤vc_id_t * šþ_¤vc_id ) 581  ¤vc_id_buf [ MAX_SRVC_ID_STR_LEN ]; 582  šþ_¤vc_id_buf [ MAX_SRVC_ID_STR_LEN ]; 584 `h®‹¡_šfo ("%s: conn_id=%d status=%d srvc_id=%s incl_srvc_id=%s)\n", 585 __func__ , cÚn_id , ¡©us , 586 `btg©t_¤vc_id_t2¡r ( ¤vc_id , ¤vc_id_buf ), 587 `btg©t_¤vc_id_t2¡r ( šþ_¤vc_id , šþ_¤vc_id_buf )); 589 ià( ¡©us == 0) 590 `EXEC ( if_g©t -> þ›Á -> g‘_šþuded_£rviû , cÚn_id , ¤vc_id , 591 šþ_¤vc_id ); 592 } } 595  $g©tc_»gi¡”_fÜ_nÙifiÿtiÚ_cb ( cÚn_id ,  »gi¡”ed , 596  ¡©us , 597 btg©t_¤vc_id_t * ¤vc_id , 598 btg©t_g©t_id_t * ch¬_id ) 600  ¤vc_id_buf [ MAX_SRVC_ID_STR_LEN ]; 601  ch¬_id_buf [ MAX_CHAR_ID_STR_LEN ]; 603 `h®‹¡_šfo ("%s: conn_id=%d„egistered=%d status=%d srvc_id=%s char_id=%s\n", 604 __func__ , cÚn_id , »gi¡”ed , ¡©us , 605 `btg©t_¤vc_id_t2¡r ( ¤vc_id , ¤vc_id_buf ), 606 `btg©t_g©t_id_t2¡r ( ch¬_id , ch¬_id_buf )); 607 } } 613  $g©tc_nÙify_cb ( cÚn_id , btg©t_nÙify_·¿ms_t * p_d©a ) 615  buf [ MAX_NOTIFY_PARAMS_STR_LEN ]; 617 `h®‹¡_šfo ("%s: cÚn_id=%d d©a=%s\n", __func__ , cÚn_id , 618 `btg©t_nÙify_·¿ms_t2¡r ( p_d©a , buf )); 619 } } 622  $g©tc_»ad_ch¬aù”i¡ic_cb ( cÚn_id ,  ¡©us , 623 btg©t_»ad_·¿ms_t * p_d©a ) 625  buf [ MAX_READ_PARAMS_STR_LEN ]; 627 `h®‹¡_šfo ("%s: cÚn_id=%d stus=%d d©a=%s\n", __func__ , cÚn_id , 628 ¡©us , `btg©t_»ad_·¿ms_t2¡r ( p_d©a , buf )); 629 } } 632  $g©tc_wr™e_ch¬aù”i¡ic_cb ( cÚn_id ,  ¡©us , 633 btg©t_wr™e_·¿ms_t * p_d©a ) 635 `h®‹¡_šfo ("%s: cÚn_id=%d stus=%d\n", __func__ , cÚn_id , ¡©us ); 636 } } 639  $g©tc_execu‹_wr™e_cb ( cÚn_id ,  ¡©us ) 641 `h®‹¡_šfo ("%s: cÚn_id=%d stus=%d\n", __func__ , cÚn_id , ¡©us ); 642 } } 645  $g©tc_»ad_desütÜ_cb ( cÚn_id ,  ¡©us , 646 btg©t_»ad_·¿ms_t * p_d©a ) 648  buf [ MAX_READ_PARAMS_STR_LEN ]; 650 `h®‹¡_šfo ("%s: cÚn_id=%d stus=%d d©a=%s\n", __func__ , cÚn_id , 651 ¡©us , `btg©t_»ad_·¿ms_t2¡r ( p_d©a , buf )); 652 } } 655  $g©tc_wr™e_desütÜ_cb ( cÚn_id ,  ¡©us , 656 btg©t_wr™e_·¿ms_t * p_d©a ) 658 `h®‹¡_šfo ("%s: cÚn_id=%d stus=%d\n", __func__ , cÚn_id , ¡©us ); 659 } } 662  $g©tc_»ad_»mÙe_rssi_cb ( þ›Á_if , bt_bdaddr_t * bda ,  rssi , 663  ¡©us ) 665  buf [ MAX_ADDR_STR_LEN ]; 667 `h®‹¡_šfo ("%s: cl›Á_if=%d bda=% rssi=%d s©us=%d\n", __func__ , 668 þ›Á_if , `bt_bdaddr_t2¡r ( bda , buf ), rssi , ¡©us ); 669 } } 672  $g©tc_li¡’_cb ( ¡©us ,  þ›Á_if ) 674 `h®‹¡_šfo ("%s: cl›Á_if=%d stus=%d\n", __func__ , þ›Á_if , 675 ¡©us ); 676 } } 678 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 680  $g©tc_cÚfigu»_mtu_cb ( cÚn_id ,  ¡©us ,  mtu ) 682 `h®‹¡_šfo ("%s: cÚn_id=%d, stus=%d, mtu=%d", __func__ , cÚn_id , 683 ¡©us , mtu ); 684 } } 687  $g©tc_sÿn_fž‹r_cfg_cb ( aùiÚ ,  þ›Á_if ,  ¡©us , 688  fžt_ty³ ,  avbl_¥aû ) 690 `h®‹¡_šfo ("%s:‡ction=%d, client_if=%d, status=%d, filt_type=%d" 691 ",‡vbl_¥aû=%d", __func__ , aùiÚ , þ›Á_if , ¡©us , 692 fžt_ty³ , avbl_¥aû ); 693 } } 696  $g©tc_sÿn_fž‹r_·¿m_cb ( aùiÚ ,  þ›Á_if ,  ¡©us , 697  avbl_¥aû ) 699 `h®‹¡_šfo ("%s:‡ction=%d, client_if=%d, status=%d,‡vbl_space=%d", 700 __func__ , aùiÚ , þ›Á_if , ¡©us , avbl_¥aû ); 701 } } 704  $g©tc_sÿn_fž‹r_¡©us_cb ( ’abË ,  þ›Á_if ,  ¡©us ) 706 `h®‹¡_šfo ("%s:ƒÇbË=%d, cl›Á_if=%d, stus=%d", __func__ , 707 ’abË , þ›Á_if , ¡©us ); 708 } } 711  $g©tc_muÉi_adv_’abË_cb ( þ›Á_if ,  ¡©us ) 713 `h®‹¡_šfo ("%s: cl›Á_if=%d, stus=%d", __func__ , þ›Á_if , 714 ¡©us ); 715 } } 718  $g©tc_muÉi_adv_upd©e_cb ( þ›Á_if ,  ¡©us ) 720 `h®‹¡_šfo ("%s: cl›Á_if=%d, stus=%d", __func__ , þ›Á_if , 721 ¡©us ); 722 } } 725  $g©tc_muÉi_adv_d©a_cb ( þ›Á_if ,  ¡©us ) 727 `h®‹¡_šfo ("%s: cl›Á_if=%d, stus=%d", __func__ , þ›Á_if , 728 ¡©us ); 729 } } 732  $g©tc_muÉi_adv_di§bË_cb ( þ›Á_if ,  ¡©us ) 734 `h®‹¡_šfo ("%s: cl›Á_if=%d, stus=%d", __func__ , þ›Á_if , 735 ¡©us ); 736 } } 744  $g©tc_cÚge¡iÚ_cb ( cÚn_id , boÞ cÚge¡ed ) 746 `h®‹¡_šfo ("%s: cÚn_id=%d, cÚge¡ed=%d", __func__ , cÚn_id , 747 cÚge¡ed ); 748 } } 751  $g©tc_b©chsÿn_cfg_¡Üage_cb ( þ›Á_if ,  ¡©us ) 753 `h®‹¡_šfo ("%s: cl›Á_if=%d, stus=%d", __func__ , þ›Á_if , 754 ¡©us ); 755 } } 758  $g©tc_b©chsÿn_’abË_di§bË_cb ( aùiÚ ,  þ›Á_if , 759  ¡©us ) 761 `h®‹¡_šfo ("%s:‡ùiÚ=%d, cl›Á_if=%d, stus=%d", __func__ , aùiÚ , 762 þ›Á_if , ¡©us ); 763 } } 766  $g©tc_b©chsÿn_»pÜts_cb ( þ›Á_if ,  ¡©us , 767  »pÜt_fÜm© ,  num_»cÜds , 768  d©a_Ën , ušt8_t * »p_d©a ) 771  v®buf [600]; 773 `h®‹¡_šfo ("%s: client_if=%d, status=%d,„eport_format=%d" 774 ",‚um_»cÜds=%d, d©a_Ën=%d,„•_d©a=%s", __func__ , 775 þ›Á_if , ¡©us , »pÜt_fÜm© , num_»cÜds , d©a_Ën , 776 `¬¿y2¡r ( »p_d©a , d©a_Ën , v®buf , (valbuf))); 777 } } 780  $g©tc_b©chsÿn_th»shÞd_cb ( þ›Á_if ) 782 `h®‹¡_šfo ("%s: cl›Á_if=%d", __func__ , þ›Á_if ); 783 } } 786  $g©tc_Œack_adv_ev’t_cb ( þ›Á_if ,  fžt_šdex , 787  addr_ty³ , bt_bdaddr_t * bda , 788  adv_¡©e ) 790  buf [ MAX_ADDR_STR_LEN ]; 792 `h®‹¡_šfo ("%s, client_if=%d, filt_index=%d,‡ddr_type=%d, bda=%s" 793 ",‡dv_¡©e=%d", __func__ , þ›Á_if , fžt_šdex , 794 addr_ty³ , `bt_bdaddr_t2¡r ( bda , buf ), adv_¡©e ); 795 } } 798 cÚ¡ btg©t_þ›Á_ÿÎbacks_t gbtg©t_þ›Á_ÿÎbacks = { 799 . »gi¡”_þ›Á_cb = g©tc_»gi¡”_þ›Á_cb , 800 . gsÿn_»suÉ_cb = g©tc_sÿn_»suÉ_cb , 801 . gÝ’_cb = g©tc_cÚÃù_cb , 802 . gþo£_cb = g©tc_discÚÃù_cb , 803 . g£¬ch_com¶‘e_cb = g©tc_£¬ch_com¶‘e_cb , 804 . g£¬ch_»suÉ_cb = g©tc_£¬ch_»suÉ_cb , 805 . gg‘_ch¬aù”i¡ic_cb = g©tc_g‘_ch¬aù”i¡ic_cb , 806 . gg‘_desütÜ_cb = g©tc_g‘_desütÜ_cb , 807 . gg‘_šþuded_£rviû_cb = g©tc_g‘_šþuded_£rviû_cb , 808 . g»gi¡”_fÜ_nÙifiÿtiÚ_cb = g©tc_»gi¡”_fÜ_nÙifiÿtiÚ_cb , 809 . gnÙify_cb = g©tc_nÙify_cb , 810 . g»ad_ch¬aù”i¡ic_cb = g©tc_»ad_ch¬aù”i¡ic_cb , 811 . gwr™e_ch¬aù”i¡ic_cb = g©tc_wr™e_ch¬aù”i¡ic_cb , 812 . g»ad_desütÜ_cb = g©tc_»ad_desütÜ_cb , 813 . gwr™e_desütÜ_cb = g©tc_wr™e_desütÜ_cb , 814 . gexecu‹_wr™e_cb = g©tc_execu‹_wr™e_cb , 815 . g»ad_»mÙe_rssi_cb = g©tc_»ad_»mÙe_rssi_cb , 816 . gli¡’_cb = g©tc_li¡’_cb , 817 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 818 . gcÚfigu»_mtu_cb = g©tc_cÚfigu»_mtu_cb , 819 . gsÿn_fž‹r_cfg_cb = g©tc_sÿn_fž‹r_cfg_cb , 820 . gsÿn_fž‹r_·¿m_cb = g©tc_sÿn_fž‹r_·¿m_cb , 821 . gsÿn_fž‹r_¡©us_cb = g©tc_sÿn_fž‹r_¡©us_cb , 822 . gmuÉi_adv_’abË_cb = g©tc_muÉi_adv_’abË_cb , 823 . gmuÉi_adv_upd©e_cb = g©tc_muÉi_adv_upd©e_cb , 824 . gmuÉi_adv_d©a_cb = g©tc_muÉi_adv_d©a_cb , 825 . gmuÉi_adv_di§bË_cb = g©tc_muÉi_adv_di§bË_cb , 826 . gcÚge¡iÚ_cb = g©tc_cÚge¡iÚ_cb , 827 . gb©chsÿn_cfg_¡Üage_cb = g©tc_b©chsÿn_cfg_¡Üage_cb , 828 . gb©chsÿn_’b_di§bË_cb = g©tc_b©chsÿn_’abË_di§bË_cb , 829 . gb©chsÿn_»pÜts_cb = g©tc_b©chsÿn_»pÜts_cb , 830 . gb©chsÿn_th»shÞd_cb = g©tc_b©chsÿn_th»shÞd_cb , 831 . gŒack_adv_ev’t_cb = g©tc_Œack_adv_ev’t_cb , 838  g£rv”_if_¡r [20]; 841  $g©ts_»gi¡”_£rv”_cb ( ¡©us ,  £rv”_if , 842 bt_uuid_t * ­p_uuid ) 844  buf [ MAX_UUID_STR_LEN ]; 846 `h®‹¡_šfo ("%s: stus=%d s”v”_if=%d‡µ_uuid=%s\n", __func__ , 847 ¡©us , £rv”_if , `g©t_uuid_t2¡r ( ­p_uuid , buf )); 848 } } 854  $g©ts_cÚÃùiÚ_cb ( cÚn_id ,  £rv”_if ,  cÚÃùed , 855 bt_bdaddr_t * bda ) 857 `h®‹¡_šfo ("%s: conn_id=%d server_if=%d connected=%d bda=%s\n", 858 __func__ , cÚn_id , £rv”_if , cÚÃùed , 859 `bt_bdaddr_t2¡r ( bda , Ï¡_addr )); 860 `¢´štf ( cÚn_id_¡r , (cÚn_id_¡r), "%d", cÚn_id ); 861 } } 864  $g©ts_£rviû_added_cb ( ¡©us ,  £rv”_if , 865 btg©t_¤vc_id_t * ¤vc_id ,  ¤vc_hªdË ) 867  buf [ MAX_SRVC_ID_STR_LEN ]; 869 `¢´štf ( £rv”_if_¡r , (£rv”_if_¡r), "%d", £rv”_if ); 871 `h®‹¡_šfo ("%s: status=%d server_if=%d srvc_id=%s handle=0x%x\n", 872 __func__ , ¡©us , £rv”_if , 873 `btg©t_¤vc_id_t2¡r ( ¤vc_id , buf ), ¤vc_hªdË ); 874 } } 877  $g©ts_šþuded_£rviû_added_cb ( ¡©us ,  £rv”_if , 878  ¤vc_hªdË , 879  šþ_¤vc_hªdË ) 881 `h®‹¡_šfo ("%s: status=%d server_if=%d srvc_handle=0x%x inc_srvc_handle=0x%x\n", 882 __func__ , ¡©us , £rv”_if , 883 ¤vc_hªdË , šþ_¤vc_hªdË ); 884 } } 887  $g©ts_ch¬aù”i¡ic_added_cb ( ¡©us ,  £rv”_if , 888 bt_uuid_t * uuid , 889  ¤vc_hªdË , 890  ch¬_hªdË ) 892  buf [ MAX_SRVC_ID_STR_LEN ]; 894 `h®‹¡_šfo ("%s: status=%d server_if=%d uuid=%s srvc_handle=0x%x char_handle=0x%x\n", 895 __func__ , ¡©us , £rv”_if , `g©t_uuid_t2¡r ( uuid , buf ), 896 ¤vc_hªdË , ch¬_hªdË ); 897 } } 900  $g©ts_desütÜ_added_cb ( ¡©us ,  £rv”_if , 901 bt_uuid_t * uuid ,  ¤vc_hªdË , 902  desü_hªdË ) 904  buf [ MAX_SRVC_ID_STR_LEN ]; 906 `h®‹¡_šfo ("%s: status=%d server_if=%d uuid=%s srvc_handle=0x%x descr_handle=0x%x\n", 907 __func__ , ¡©us , £rv”_if , `g©t_uuid_t2¡r ( uuid , buf ), 908 ¤vc_hªdË , desü_hªdË ); 909 } } 912  $g©ts_£rviû_¡¬‹d_cb ( ¡©us ,  £rv”_if ,  ¤vc_hªdË ) 914 `h®‹¡_šfo ("%s: status=%d server_if=%d srvc_handle=0x%x\n", 915 __func__ , ¡©us , £rv”_if , ¤vc_hªdË ); 916 } } 919  $g©ts_£rviû_¡Ý³d_cb ( ¡©us ,  £rv”_if ,  ¤vc_hªdË ) 921 `h®‹¡_šfo ("%s: status=%d server_if=%d srvc_handle=0x%x\n", 922 __func__ , ¡©us , £rv”_if , ¤vc_hªdË ); 923 } } 926  $g©ts_£rviû_d–‘ed_cb ( ¡©us ,  £rv”_if ,  ¤vc_hªdË ) 928 `h®‹¡_šfo ("%s: status=%d server_if=%d srvc_handle=0x%x\n", 929 __func__ , ¡©us , £rv”_if , ¤vc_hªdË ); 930 } } 936  $g©ts_»que¡_»ad_cb ( cÚn_id ,  Œªs_id , bt_bdaddr_t * bda , 937  ©Œ_hªdË ,  off£t , 938 boÞ is_lÚg ) 940  buf [ MAX_ADDR_STR_LEN ]; 942 `h®‹¡_šfo ("%s: conn_id=%drans_id=%d bda=%s‡ttr_handle=0x%x offset=%d is_long=%d\n", 943 __func__ , cÚn_id , Œªs_id , `bt_bdaddr_t2¡r ( bda , buf ), 944 ©Œ_hªdË , off£t , is_lÚg ); 945 } } 951  $g©ts_»que¡_wr™e_cb ( cÚn_id ,  Œªs_id , bt_bdaddr_t * bda , 952  ©Œ_hªdË ,  off£t ,  Ëngth , 953 boÞ Ãed_r¥ , boÞ is_´• , 954 ušt8_t * v®ue ) 956  buf [ MAX_ADDR_STR_LEN ]; 957  v®buf [100]; 959 `h®‹¡_šfo ("%s: conn_id=%drans_id=%d bda=%s‡ttr_handle=0x%x offset=%d†ength=%d‚eed_rsp=%d is_prep=%d value=%s\n", 960 __func__ , cÚn_id , Œªs_id , `bt_bdaddr_t2¡r ( bda , buf ), 961 ©Œ_hªdË , off£t , Ëngth , Ãed_r¥ , is_´• , 962 `¬¿y2¡r ( v®ue , Ëngth , v®buf , (valbuf))); 963 } } 966  $g©ts_»que¡_exec_wr™e_cb ( cÚn_id ,  Œªs_id , 967 bt_bdaddr_t * bda ,  exec_wr™e ) 969  buf [ MAX_ADDR_STR_LEN ]; 971 `h®‹¡_šfo ("%s: conn_id=%drans_id=%d bda=%sƒxec_write=%d\n", 972 __func__ , cÚn_id , Œªs_id , `bt_bdaddr_t2¡r ( bda , buf ), 973 exec_wr™e ); 974 } } 980  $g©ts_»¥Ú£_cÚfœm©iÚ_cb ( ¡©us ,  hªdË ) 982 `h®‹¡_šfo ("%s: stus=%d hªdË=0x%x\n", __func__ , ¡©us , hªdË ); 983 } } 985 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 990  $g©ts_šdiÿtiÚ_£Á_cb ( cÚn_id ,  ¡©us ) 992 `h®‹¡_šfo ("%s: stus=%d cÚn_id=%d", __func__ , ¡©us , cÚn_id ); 993 } } 1001  $g©ts_cÚge¡iÚ_cb ( cÚn_id , boÞ cÚge¡ed ) 1003 `h®‹¡_šfo ("%s: cÚn_id=%d cÚge¡ed=%d", __func__ , cÚn_id , 1004 cÚge¡ed ); 1005 } } 1008 cÚ¡ btg©t_£rv”_ÿÎbacks_t gbtg©t_£rv”_ÿÎbacks = { 1009 . »gi¡”_£rv”_cb = g©ts_»gi¡”_£rv”_cb , 1010 . gcÚÃùiÚ_cb = g©ts_cÚÃùiÚ_cb , 1011 . g£rviû_added_cb = g©ts_£rviû_added_cb , 1012 . gšþuded_£rviû_added_cb = g©ts_šþuded_£rviû_added_cb , 1013 . gch¬aù”i¡ic_added_cb = g©ts_ch¬aù”i¡ic_added_cb , 1014 . gdesütÜ_added_cb = g©ts_desütÜ_added_cb , 1015 . g£rviû_¡¬‹d_cb = g©ts_£rviû_¡¬‹d_cb , 1016 . g£rviû_¡Ý³d_cb = g©ts_£rviû_¡Ý³d_cb , 1017 . g£rviû_d–‘ed_cb = g©ts_£rviû_d–‘ed_cb , 1018 . g»que¡_»ad_cb = g©ts_»que¡_»ad_cb , 1019 . g»que¡_wr™e_cb = g©ts_»que¡_wr™e_cb , 1020 . g»que¡_exec_wr™e_cb = g©ts_»que¡_exec_wr™e_cb , 1021 . g»¥Ú£_cÚfœm©iÚ_cb = g©ts_»¥Ú£_cÚfœm©iÚ_cb , 1022 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 1023 . gšdiÿtiÚ_£Á_cb = g©ts_šdiÿtiÚ_£Á_cb , 1024 . gcÚge¡iÚ_cb = g©ts_cÚge¡iÚ_cb , 1028 cÚ¡ btg©t_ÿÎbacks_t gg©t_cbacks = { 1029 . size = ( g©t_cbacks ), 1030 . gþ›Á = & btg©t_þ›Á_ÿÎbacks , 1031 . g£rv” = & btg©t_£rv”_ÿÎbacks 1037  $fžl_bufãr (cÚ¡ * ¡r , ušt8_t * out ,  out_size ) 1039  ¡r_Ën ; 1040  i , j ; 1041  c ; 1042 ušt8_t b ; 1044 ¡r_Ën = `¡¾’ ( ¡r ); 1047 ià( ¡r_Ën % 2) 1050  i = 0, j = 0; i < out_size && j < ¡r_Ën ; i++, j++) { 1051 c = ¡r [ j ]; 1053 ià( c >= 'a' && c <= 'f') 1054 c += 'A' - 'a'; 1056 ià( c >= '0' && c <= '9') 1057 b = c - '0'; 1058 ià( c >= 'A' && c <= 'F') 1059 b = 10 + c - 'A'; 1063 j ++; 1065 c = ¡r [ j ]; 1067 ià( c >= 'a' && c <= 'f') 1068 c += 'A' - 'a'; 1070 ià( c >= '0' && c <= '9') 1071 b = b * 16 + c - '0'; 1072 ià( c >= 'A' && c <= 'F') 1073 b = b * 16 + 10 + c - 'A'; 1077 out [ i ] = b ; 1080  i ; 1081 } } 1087  $š™_p ( ¬gc , cÚ¡ ** ¬gv ) 1089 `RETURN_IF_NULL ( if_g©t ); 1091 `EXEC ( if_g©t -> š™ , & g©t_cbacks ); 1092 } } 1096  $þ—nup_p ( ¬gc , cÚ¡ ** ¬gv ) 1098 `RETURN_IF_NULL ( if_g©t ); 1100 `EXECV ( if_g©t -> þ—nup ); 1102 if_g©t = NULL ; 1103 } } 1105  m‘hod gm‘hods [] = { 1106 STD_METHOD ( š™ ), 1107 STD_METHOD ( þ—nup ), 1108 END_METHOD 1111 cÚ¡  š‹rçû gg©t_if = { 1112 . Çme = "gatt", 1113 . gm‘hods = m‘hods 1118  $»gi¡”_þ›Á_p ( ¬gc , cÚ¡ ** ¬gv ) 1120 bt_uuid_t uuid ; 1122 `RETURN_IF_NULL ( if_g©t ); 1125 ià( ¬gc <= 2) 1126 `g©t_¡r2bt_uuid_t ("babe4bed", -1, & uuid ); 1128 `g©t_¡r2bt_uuid_t ( ¬gv [2], -1, & uuid ); 1130 `EXEC ( if_g©t -> þ›Á -> »gi¡”_þ›Á , & uuid ); 1131 } } 1135  $uÄegi¡”_þ›Á_c ( ¬gc , cÚ¡ ** ¬gv , 1136 ’um_func *’um_func, ** u£r ) 1138 ià( ¬gc == 3) { 1139 * u£r = þ›Á_if_¡r ; 1140 * ’um_func = ’um_Úe_¡ršg ; 1142 } } 1144  $uÄegi¡”_þ›Á_p ( ¬gc , cÚ¡ ** ¬gv ) 1146  þ›Á_if ; 1148 `RETURN_IF_NULL ( if_g©t ); 1149 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1151 `EXEC ( if_g©t -> þ›Á -> uÄegi¡”_þ›Á , þ›Á_if ); 1152 } } 1157  #sÿn_c uÄegi¡”_þ›Á_c ) 1159  $sÿn_p ( ¬gc , cÚ¡ ** ¬gv ) 1161 #ià ANDROID_VERSION < `PLATFORM_VER (5, 0, 0) 1162  þ›Á_if ; 1164  ¡¬t = 1; 1166 `RETURN_IF_NULL ( if_g©t ); 1168 #ià ANDROID_VERSION < `PLATFORM_VER (5, 0, 0) 1169 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1172 ià( ¬gc >= 4) 1173 ¡¬t = `©oi ( ¬gv [3]); 1175 `EXEC ( if_g©t -> þ›Á -> sÿn , þ›Á_if , ¡¬t ); 1178 ià( ¬gc >= 3) 1179 ¡¬t = `©oi ( ¬gv [2]); 1181 `EXEC ( if_g©t -> þ›Á -> sÿn , ¡¬t ); 1183 } } 1187  $cÚÃù_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 1188 ** u£r ) 1190 ià( ¬gc == 3) { 1191 * u£r = þ›Á_if_¡r ; 1192 * ’um_func = ’um_Úe_¡ršg ; 1193 } ià( ¬gc == 4) { 1194 * u£r = NULL ; 1195 * ’um_func = ’um_deviûs ; 1197 } } 1199  $cÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 1201  þ›Á_if ; 1202 bt_bdaddr_t bd_addr ; 1203  is_dœeù = 1; 1204 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 1205  Œª¥Üt = 1; 1208 `RETURN_IF_NULL ( if_g©t ); 1209 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1210 `VERIFY_ADDR_ARG (3, & bd_addr ); 1213 ià( ¬gc > 4) 1214 is_dœeù = `©oi ( ¬gv [4]); 1216 #ià ANDROID_VERSION < `PLATFORM_VER (5, 0, 0) 1217 `EXEC ( if_g©t -> þ›Á -> cÚÃù , þ›Á_if , & bd_addr , is_dœeù ); 1220 ià( ¬gc > 5) 1221 Œª¥Üt = `©oi ( ¬gv [5]); 1223 `EXEC ( if_g©t -> þ›Á -> cÚÃù , þ›Á_if , & bd_addr , is_dœeù , 1224 Œª¥Üt ); 1226 } } 1230  $discÚÃù_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 1231 ** u£r ) 1233 ià( ¬gc == 3) { 1234 * u£r = þ›Á_if_¡r ; 1235 * ’um_func = ’um_Úe_¡ršg ; 1236 } ià( ¬gc == 4) { 1237 * u£r = Ï¡_addr ; 1238 * ’um_func = ’um_Úe_¡ršg ; 1239 } ià( ¬gc == 5) { 1240 * u£r = cÚn_id_¡r ; 1241 * ’um_func = ’um_Úe_¡ršg ; 1243 } } 1245  $discÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 1247  þ›Á_if ; 1248 bt_bdaddr_t bd_addr ; 1249  cÚn_id ; 1251 `RETURN_IF_NULL ( if_g©t ); 1252 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1253 `VERIFY_ADDR_ARG (3, & bd_addr ); 1254 `VERIFY_CONN_ID (4, cÚn_id ); 1256 `EXEC ( if_g©t -> þ›Á -> discÚÃù , þ›Á_if , & bd_addr , cÚn_id ); 1257 } } 1262  #li¡’_c uÄegi¡”_þ›Á_c ) 1264  $li¡’_p ( ¬gc , cÚ¡ ** ¬gv ) 1266  þ›Á_if ; 1267  ¡¬t = 1; 1269 `RETURN_IF_NULL ( if_g©t ); 1271 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1274 ià( ¬gc >= 4) 1275 ¡¬t = `©oi ( ¬gv [3]); 1277 `EXEC ( if_g©t -> þ›Á -> li¡’ , þ›Á_if , ¡¬t ); 1278 } } 1282  $»äesh_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 1283 ** u£r ) 1285 ià( ¬gc == 3) { 1286 * u£r = þ›Á_if_¡r ; 1287 * ’um_func = ’um_Úe_¡ršg ; 1288 } ià( ¬gc == 4) { 1289 * ’um_func = ’um_deviûs ; 1291 } } 1293  $»äesh_p ( ¬gc , cÚ¡ ** ¬gv ) 1295  þ›Á_if ; 1296 bt_bdaddr_t bd_addr ; 1298 `RETURN_IF_NULL ( if_g©t ); 1299 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1300 `VERIFY_ADDR_ARG (3, & bd_addr ); 1302 `EXEC ( if_g©t -> þ›Á -> »äesh , þ›Á_if , & bd_addr ); 1303 } } 1307  $£¬ch_£rviû_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 1308 ** u£r ) 1310 ià( ¬gc == 3) { 1311 * u£r = cÚn_id_¡r ; 1312 * ’um_func = ’um_Úe_¡ršg ; 1314 } } 1316  $£¬ch_£rviû_p ( ¬gc , cÚ¡ ** ¬gv ) 1318  cÚn_id ; 1320 `RETURN_IF_NULL ( if_g©t ); 1322 `VERIFY_CONN_ID (2, cÚn_id ); 1325 ià( ¬gc <= 3) { 1326 `EXEC ( if_g©t -> þ›Á -> £¬ch_£rviû , cÚn_id , NULL ); 1329 bt_uuid_t fž‹r_uuid ; 1331 `g©t_¡r2bt_uuid_t ( ¬gv [3], -1, & fž‹r_uuid ); 1332 `EXEC ( if_g©t -> þ›Á -> £¬ch_£rviû , cÚn_id , & fž‹r_uuid ); 1334 } } 1338  $g‘_šþuded_£rviû_c ( ¬gc , cÚ¡ ** ¬gv , 1339 ’um_func *’um_func, ** u£r ) 1341 ià( ¬gc == 3) { 1342 * u£r = cÚn_id_¡r ; 1343 * ’um_func = ’um_Úe_¡ršg ; 1345 } } 1347  $g‘_šþuded_£rviû_p ( ¬gc , cÚ¡ ** ¬gv ) 1349  cÚn_id ; 1350 btg©t_¤vc_id_t ¤vc_id ; 1352 `RETURN_IF_NULL ( if_g©t ); 1353 `VERIFY_CONN_ID (2, cÚn_id ); 1354 `VERIFY_SRVC_ID (3, & ¤vc_id ); 1356 `EXEC ( if_g©t -> þ›Á -> g‘_šþuded_£rviû , cÚn_id , & ¤vc_id , NULL ); 1357 } } 1362  #g‘_ch¬aù”i¡ic_c g‘_šþuded_£rviû_c ) 1364  $g‘_ch¬aù”i¡ic_p ( ¬gc , cÚ¡ ** ¬gv ) 1366  cÚn_id ; 1367 btg©t_¤vc_id_t ¤vc_id ; 1369 `RETURN_IF_NULL ( if_g©t ); 1370 `VERIFY_CONN_ID (2, cÚn_id ); 1371 `VERIFY_SRVC_ID (3, & ¤vc_id ); 1373 `EXEC ( if_g©t -> þ›Á -> g‘_ch¬aù”i¡ic , cÚn_id , & ¤vc_id , NULL ); 1374 } } 1379  #g‘_desütÜ_c g‘_šþuded_£rviû_c ) 1381  $g‘_desütÜ_p ( ¬gc , cÚ¡ ** ¬gv ) 1383  cÚn_id ; 1384 btg©t_¤vc_id_t ¤vc_id ; 1385 btg©t_g©t_id_t ch¬_id ; 1387 `RETURN_IF_NULL ( if_g©t ); 1388 `VERIFY_CONN_ID (2, cÚn_id ); 1389 `VERIFY_SRVC_ID (3, & ¤vc_id ); 1390 `VERIFY_CHAR_ID (4, & ch¬_id ); 1392 `EXEC ( if_g©t -> þ›Á -> g‘_desütÜ , cÚn_id , & ¤vc_id , & ch¬_id , 1393 NULL ); 1394 } } 1399  #»ad_ch¬aù”i¡ic_c g‘_šþuded_£rviû_c ) 1401  $»ad_ch¬aù”i¡ic_p ( ¬gc , cÚ¡ ** ¬gv ) 1403  cÚn_id ; 1404 btg©t_¤vc_id_t ¤vc_id ; 1405 btg©t_g©t_id_t ch¬_id ; 1406  auth_»q = 0; 1408 `RETURN_IF_NULL ( if_g©t ); 1409 `VERIFY_CONN_ID (2, cÚn_id ); 1410 `VERIFY_SRVC_ID (3, & ¤vc_id ); 1411 `VERIFY_CHAR_ID (4, & ch¬_id ); 1414 ià( ¬gc > 5) 1415 auth_»q = `©oi ( ¬gv [5]); 1417 `EXEC ( if_g©t -> þ›Á -> »ad_ch¬aù”i¡ic , cÚn_id , & ¤vc_id , & ch¬_id , 1418 auth_»q ); 1419 } } 1423  $wr™e_ch¬aù”i¡ic_c ( ¬gc , cÚ¡ ** ¬gv , 1424 ’um_func *’um_func, ** u£r ) 1430 cÚ¡ * w¹y³s [] = { "1", "2", "3", NULL }; 1432 ià( ¬gc == 3) { 1433 * u£r = cÚn_id_¡r ; 1434 * ’um_func = ’um_Úe_¡ršg ; 1435 } ià( ¬gc == 6) { 1436 * u£r = w¹y³s ; 1437 * ’um_func = ’um_¡ršgs ; 1439 } } 1441  $wr™e_ch¬aù”i¡ic_p ( ¬gc , cÚ¡ ** ¬gv ) 1443  cÚn_id ; 1444 btg©t_¤vc_id_t ¤vc_id ; 1445 btg©t_g©t_id_t ch¬_id ; 1446  wr™e_ty³ ; 1447  Ën ; 1448  auth_»q = 0; 1449 ušt8_t v®ue [100]; 1451 `RETURN_IF_NULL ( if_g©t ); 1452 `VERIFY_CONN_ID (2, cÚn_id ); 1453 `VERIFY_SRVC_ID (3, & ¤vc_id ); 1454 `VERIFY_CHAR_ID (4, & ch¬_id ); 1457 ià( ¬gc <= 5) { 1458 `h®‹¡_”rÜ ("No writeype specified\n"); 1461 wr™e_ty³ = `©oi ( ¬gv [5]); 1463 `GET_VERIFY_HEX_STRING (6, v®ue , Ën ); 1466 ià( ¬gc > 7) 1467 auth_»q = `©oi ( ¬gv [7]); 1469 `EXEC ( if_g©t -> þ›Á -> wr™e_ch¬aù”i¡ic , cÚn_id , & ¤vc_id , & ch¬_id , 1470 wr™e_ty³ , Ën , auth_»q , (*è v®ue ); 1471 } } 1476  #»ad_desütÜ_c g‘_šþuded_£rviû_c ) 1478  $»ad_desütÜ_p ( ¬gc , cÚ¡ ** ¬gv ) 1480  cÚn_id ; 1481 btg©t_¤vc_id_t ¤vc_id ; 1482 btg©t_g©t_id_t ch¬_id ; 1483 btg©t_desü_id_t desü_id ; 1484  auth_»q = 0; 1486 `RETURN_IF_NULL ( if_g©t ); 1487 `VERIFY_CONN_ID (2, cÚn_id ); 1488 `VERIFY_SRVC_ID (3, & ¤vc_id ); 1489 `VERIFY_CHAR_ID (4, & ch¬_id ); 1490 `VERIFY_DESCR_ID (5, & desü_id ); 1493 ià( ¬gc > 6) 1494 auth_»q = `©oi ( ¬gv [6]); 1496 `EXEC ( if_g©t -> þ›Á -> »ad_desütÜ , cÚn_id , & ¤vc_id , & ch¬_id , 1497 & desü_id , auth_»q ); 1498 } } 1502  $wr™e_desütÜ_c ( ¬gc , cÚ¡ ** ¬gv , 1503 ’um_func *’um_func, ** u£r ) 1509 cÚ¡ * w¹y³s [] = { "1", "2", "3", NULL }; 1511 ià( ¬gc == 3) { 1512 * u£r = cÚn_id_¡r ; 1513 * ’um_func = ’um_Úe_¡ršg ; 1514 } ià( ¬gc == 7) { 1515 * u£r = w¹y³s ; 1516 * ’um_func = ’um_¡ršgs ; 1518 } } 1520  $wr™e_desütÜ_p ( ¬gc , cÚ¡ ** ¬gv ) 1522  cÚn_id ; 1523 btg©t_¤vc_id_t ¤vc_id ; 1524 btg©t_g©t_id_t ch¬_id ; 1525 btg©t_desü_id_t desü_id ; 1526  wr™e_ty³ ; 1527  Ën ; 1528  auth_»q = 0; 1529 ušt8_t v®ue [200] = {0}; 1531 `RETURN_IF_NULL ( if_g©t ); 1532 `VERIFY_CONN_ID (2, cÚn_id ); 1533 `VERIFY_SRVC_ID (3, & ¤vc_id ); 1534 `VERIFY_CHAR_ID (4, & ch¬_id ); 1535 `VERIFY_DESCR_ID (5, & desü_id ); 1538 ià( ¬gc <= 6) { 1539 `h®‹¡_”rÜ ("No writeype specified\n"); 1542 wr™e_ty³ = `©oi ( ¬gv [6]); 1545 ià( ¬gc <= 7) { 1546 `h®‹¡_”rÜ ("No value specified\n"); 1551 ià( `¡ºcmp ( ¬gv [7], "0X", 2) && strncmp(argv[7], "0x", 2)) { 1552 `h®‹¡_”rÜ ("Value must be hex string"); 1556 Ën = `fžl_bufãr ( ¬gv [7] + 2, v®ue , (value)); 1559 ià( ¬gc > 8) 1560 auth_»q = `©oi ( ¬gv [8]); 1562 `EXEC ( if_g©t -> þ›Á -> wr™e_desütÜ , cÚn_id , & ¤vc_id , & ch¬_id , 1563 & desü_id , wr™e_ty³ , Ën , auth_»q , (*è v®ue ); 1564 } } 1569  #execu‹_wr™e_c £¬ch_£rviû_c ) 1571  $execu‹_wr™e_p ( ¬gc , cÚ¡ ** ¬gv ) 1573  cÚn_id ; 1574  execu‹ ; 1576 `RETURN_IF_NULL ( if_g©t ); 1577 `VERIFY_CONN_ID (2, cÚn_id ); 1580 ià( ¬gc <= 3) { 1581 `h®‹¡_”rÜ ("Noƒxecute specified\n"); 1584 execu‹ = `©oi ( ¬gv [3]); 1586 `EXEC ( if_g©t -> þ›Á -> execu‹_wr™e , cÚn_id , execu‹ ); 1587 } } 1591  $»gi¡”_fÜ_nÙifiÿtiÚ_c ( ¬gc , cÚ¡ ** ¬gv , 1592 ’um_func *’um_func, ** u£r ) 1594 ià( ¬gc == 3) { 1595 * u£r = þ›Á_if_¡r ; 1596 * ’um_func = ’um_Úe_¡ršg ; 1597 } ià( ¬gc == 4) { 1598 * u£r = Ï¡_addr ; 1599 * ’um_func = ’um_Úe_¡ršg ; 1601 } } 1603  $»gi¡”_fÜ_nÙifiÿtiÚ_p ( ¬gc , cÚ¡ ** ¬gv ) 1605  þ›Á_if ; 1606 bt_bdaddr_t bd_addr ; 1607 btg©t_¤vc_id_t ¤vc_id ; 1608 btg©t_g©t_id_t ch¬_id ; 1610 `RETURN_IF_NULL ( if_g©t ); 1611 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1612 `VERIFY_ADDR_ARG (3, & bd_addr ); 1613 `VERIFY_SRVC_ID (4, & ¤vc_id ); 1614 `VERIFY_CHAR_ID (5, & ch¬_id ); 1616 `EXEC ( if_g©t -> þ›Á -> »gi¡”_fÜ_nÙifiÿtiÚ , þ›Á_if , & bd_addr , 1617 & ¤vc_id , & ch¬_id ); 1618 } } 1623  #d”egi¡”_fÜ_nÙifiÿtiÚ_c »gi¡”_fÜ_nÙifiÿtiÚ_c ) 1625  $d”egi¡”_fÜ_nÙifiÿtiÚ_p ( ¬gc , cÚ¡ ** ¬gv ) 1627  þ›Á_if ; 1628 bt_bdaddr_t bd_addr ; 1629 btg©t_¤vc_id_t ¤vc_id ; 1630 btg©t_g©t_id_t ch¬_id ; 1632 `RETURN_IF_NULL ( if_g©t ); 1633 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1634 `VERIFY_ADDR_ARG (3, & bd_addr ); 1635 `VERIFY_SRVC_ID (4, & ¤vc_id ); 1636 `VERIFY_CHAR_ID (5, & ch¬_id ); 1638 `EXEC ( if_g©t -> þ›Á -> d”egi¡”_fÜ_nÙifiÿtiÚ , þ›Á_if , & bd_addr , 1639 & ¤vc_id , & ch¬_id ); 1640 } } 1644  $»ad_»mÙe_rssi_c ( ¬gc , cÚ¡ ** ¬gv , 1645 ’um_func *’um_func, ** u£r ) 1647 ià( ¬gc == 3) { 1648 * u£r = þ›Á_if_¡r ; 1649 * ’um_func = ’um_Úe_¡ršg ; 1650 } ià( ¬gc == 4) { 1651 * ’um_func = ’um_deviûs ; 1653 } } 1655  $»ad_»mÙe_rssi_p ( ¬gc , cÚ¡ ** ¬gv ) 1657  þ›Á_if ; 1658 bt_bdaddr_t bd_addr ; 1660 `RETURN_IF_NULL ( if_g©t ); 1661 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1662 `VERIFY_ADDR_ARG (3, & bd_addr ); 1664 `EXEC ( if_g©t -> þ›Á -> »ad_»mÙe_rssi , þ›Á_if , & bd_addr ); 1665 } } 1667 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 1669  $sÿn_fž‹r_·¿m_£tup_c ( ¬gc , cÚ¡ ** ¬gv , 1670 ’um_func *’um_func, ** u£r ) 1672 ià( ¬gc == 2) { 1673 * u£r = þ›Á_if_¡r ; 1674 * ’um_func = ’um_Úe_¡ršg ; 1676 } } 1678  $sÿn_fž‹r_·¿m_£tup_p ( ¬gc , cÚ¡ ** ¬gv ) 1680  þ›Á_if ; 1681  aùiÚ ; 1682  fžt_šdex ; 1683  ã©_£Ê ; 1684  li¡_logic_ty³ , fžt_logic_ty³ ; 1685  rssi_high_th»s , rssi_low_th»s ; 1686  d–y_mode ; 1687  found_timeout , lo¡_timeout , found_timeout_út ; 1689 `RETURN_IF_NULL ( if_g©t ); 1690 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1691 `VERIFY_ACTION (3, aùiÚ ); 1692 `VERIFY_FILT_INDEX (4, fžt_šdex ); 1693 `VERIFY_FEAT_SELN (5, ã©_£Ê ); 1694 `VERIFY_LIST_LOGIC_TYPE (6, li¡_logic_ty³ ); 1695 `VERIFY_FILT_LOGIC_TYPE (7, fžt_logic_ty³ ); 1696 `VERIFY_RSSI_HI_THR (8, rssi_high_th»s ); 1697 `VERIFY_RSSI_LOW_THR (9, rssi_low_th»s ); 1698 `VERIFY_DELY_MODE (10, d–y_mode ); 1699 `VERIFY_FND_TIME (11, found_timeout ); 1700 `VERIFY_LOST_TIME (12, lo¡_timeout ); 1701 `VERIFY_FND_TIME_CNT (13, found_timeout_út ); 1703 `EXEC ( if_g©t -> þ›Á -> sÿn_fž‹r_·¿m_£tup , þ›Á_if , aùiÚ , 1704 fžt_šdex , ã©_£Ê , li¡_logic_ty³ , fžt_logic_ty³ , 1705 rssi_high_th»s , rssi_low_th»s , d–y_mode , found_timeout , 1706 lo¡_timeout , found_timeout_út ); 1707 } } 1711  $sÿn_fž‹r_add_»move_c ( ¬gc , cÚ¡ ** ¬gv , 1712 ’um_func *’um_func, ** u£r ) 1714 ià( ¬gc == 2) { 1715 * u£r = þ›Á_if_¡r ; 1716 * ’um_func = ’um_Úe_¡ršg ; 1717 } ià( ¬gc == 10) { 1718 * u£r = Ï¡_addr ; 1719 * ’um_func = ’um_Úe_¡ršg ; 1721 } } 1723  $sÿn_fž‹r_add_»move_p ( ¬gc , cÚ¡ ** ¬gv ) 1725  þ›Á_if ; 1726  aùiÚ ; 1727  fžt_ty³ ; 1728  fžt_šdex ; 1729  com·ny_id ; 1730  com·ny_id_mask ; 1731 bt_uuid_t p_uuid ; 1732 bt_uuid_t p_uuid_mask ; 1733 bt_bdaddr_t bd_addr ; 1734  addr_ty³ ; 1735  d©a_Ën ; 1736 ušt8_t p_d©a [100]; 1737  mask_Ën ; 1738 ušt8_t p_mask [100]; 1740 `RETURN_IF_NULL ( if_g©t ); 1741 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1742 `VERIFY_ACTION (3, aùiÚ ); 1743 `VERIFY_FILT_TYPE (4, fžt_ty³ ); 1744 `VERIFY_FILT_INDEX (5, fžt_šdex ); 1745 `VERIFY_COMP_ID (6, com·ny_id ); 1746 `VERIFY_COMP_ID_MASK (7, com·ny_id_mask ); 1748 ià( ¬gc <= 9) { 1749 `h®‹¡_”rÜ ("No…_uuid,…_uuid_mask specified\n"); 1752 `g©t_¡r2bt_uuid_t ( ¬gv [8], -1, & p_uuid ); 1753 `g©t_¡r2bt_uuid_t ( ¬gv [9], -1, & p_uuid_mask ); 1755 `VERIFY_UUID (8, & p_uuid ); 1756 `VERIFY_UUID (9, & p_uuid_mask ); 1757 `VERIFY_ADDR_ARG (10, & bd_addr ); 1758 `VERIFY_ADDR_TYPE (11, addr_ty³ ); 1759 `GET_VERIFY_HEX_STRING (12, p_d©a , d©a_Ën ); 1760 `GET_VERIFY_HEX_STRING (13, p_mask , mask_Ën ); 1762 `EXEC ( if_g©t -> þ›Á -> sÿn_fž‹r_add_»move , þ›Á_if , aùiÚ , 1763 fžt_ty³ , fžt_šdex , com·ny_id , com·ny_id_mask , 1764 & p_uuid , & p_uuid_mask , & bd_addr , addr_ty³ , d©a_Ën , 1765 (*è p_d©a , mask_Ën , (*è p_mask ); 1766 } } 1769  $sÿn_fž‹r_þ—r_c ( ¬gc , cÚ¡ ** ¬gv , 1770 ’um_func *’um_func, ** u£r ) 1772 ià( ¬gc == 2) { 1773 * u£r = þ›Á_if_¡r ; 1774 * ’um_func = ’um_Úe_¡ršg ; 1776 } } 1778  $sÿn_fž‹r_þ—r_p ( ¬gc , cÚ¡ ** ¬gv ) 1780  þ›Á_if ; 1781  fžt_šdex ; 1783 `RETURN_IF_NULL ( if_g©t ); 1784 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1785 `VERIFY_FILT_INDEX (3, fžt_šdex ); 1787 `EXEC ( if_g©t -> þ›Á -> sÿn_fž‹r_þ—r , þ›Á_if , fžt_šdex ); 1788 } } 1791  $sÿn_fž‹r_’abË_c ( ¬gc , cÚ¡ ** ¬gv , 1792 ’um_func *’um_func, ** u£r ) 1794 ià( ¬gc == 2) { 1795 * u£r = þ›Á_if_¡r ; 1796 * ’um_func = ’um_Úe_¡ršg ; 1798 } } 1800  $sÿn_fž‹r_’abË_p ( ¬gc , cÚ¡ ** ¬gv ) 1802  þ›Á_if ; 1803  ’abË = 0; 1805 `RETURN_IF_NULL ( if_g©t ); 1806 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1809 ià( ¬gc >= 4) 1810 ’abË = `©oi ( ¬gv [3]); 1812 `EXEC ( if_g©t -> þ›Á -> sÿn_fž‹r_þ—r , þ›Á_if , ’abË ); 1813 } } 1816  $£t_adv_d©a_c ( ¬gc , cÚ¡ ** ¬gv , 1817 ’um_func *’um_func, ** u£r ) 1819 ià( ¬gc == 2) { 1820 * u£r = þ›Á_if_¡r ; 1821 * ’um_func = ’um_Úe_¡ršg ; 1823 } } 1825  $£t_adv_d©a_p ( ¬gc , cÚ¡ ** ¬gv ) 1827  þ›Á_if ; 1828 boÞ £t_sÿn_r¥ ; 1829 boÞ šþude_Çme , šþude_txpow” ; 1830  mš_š‹rv® , max_š‹rv® ; 1831  ­³¬ªû ; 1832 ušt16_t mªuçùu»r_Ën ; 1833 ušt8_t mªuçùu»r_d©a [100]; 1834 ušt16_t £rviû_d©a_Ën ; 1835 ušt8_t £rviû_d©a [100]; 1836 ušt16_t £rviû_uuid_Ën ; 1837 ušt8_t £rviû_uuid [100]; 1839 `RETURN_IF_NULL ( if_g©t ); 1840 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1843 ià( ¬gc >= 4) 1844 £t_sÿn_r¥ = `©oi ( ¬gv [3]); 1846 ià( ¬gc >= 5) 1847 šþude_Çme = `©oi ( ¬gv [4]); 1849 ià( ¬gc >= 6) 1850 šþude_txpow” = `©oi ( ¬gv [5]); 1852 `VERIFY_MIN_INTERVAL (6, mš_š‹rv® ); 1853 `VERIFY_MAX_INTERVAL (7, max_š‹rv® ); 1854 `VERIFY_APPEARANCE (8, ­³¬ªû ); 1855 `GET_VERIFY_HEX_STRING (9, mªuçùu»r_d©a , mªuçùu»r_Ën ); 1856 `GET_VERIFY_HEX_STRING (10, £rviû_d©a , £rviû_d©a_Ën ); 1857 `GET_VERIFY_HEX_STRING (11, £rviû_uuid , £rviû_uuid_Ën ); 1859 `EXEC ( if_g©t -> þ›Á -> £t_adv_d©a , þ›Á_if , £t_sÿn_r¥ , 1860 šþude_Çme , šþude_txpow” , mš_š‹rv® , max_š‹rv® , 1861 ­³¬ªû , mªuçùu»r_Ën , (*è mªuçùu»r_d©a , 1862 £rviû_d©a_Ën , (*è £rviû_d©a , £rviû_uuid_Ën , 1863 (*è £rviû_uuid ); 1864 } } 1867  $cÚfigu»_mtu_c ( ¬gc , cÚ¡ ** ¬gv , 1868 ’um_func *’um_func, ** u£r ) 1870 ià( ¬gc == 2) { 1871 * u£r = cÚn_id_¡r ; 1872 * ’um_func = ’um_Úe_¡ršg ; 1874 } } 1876  $cÚfigu»_mtu_p ( ¬gc , cÚ¡ ** ¬gv ) 1878  cÚn_id ; 1879  mtu ; 1881 `RETURN_IF_NULL ( if_g©t ); 1882 `VERIFY_CONN_ID (2, cÚn_id ); 1883 `VERIFY_MTU (3, mtu ); 1885 `EXEC ( if_g©t -> þ›Á -> cÚfigu»_mtu , cÚn_id , mtu ); 1886 } } 1889  $cÚn_·¿m‘”_upd©e_c ( ¬gc , cÚ¡ ** ¬gv , 1890 ’um_func *’um_func, ** u£r ) 1892 ià( ¬gc == 2) { 1893 * u£r = Ï¡_addr ; 1894 * ’um_func = ’um_Úe_¡ršg ; 1896 } } 1898  $cÚn_·¿m‘”_upd©e_p ( ¬gc , cÚ¡ ** ¬gv ) 1900 bt_bdaddr_t bd_addr ; 1901  mš_š‹rv® , max_š‹rv® ; 1902  Ï‹ncy ; 1903  timeout ; 1905 `RETURN_IF_NULL ( if_g©t ); 1906 `VERIFY_ADDR_ARG (2, & bd_addr ); 1907 `VERIFY_MIN_INTERVAL (3, mš_š‹rv® ); 1908 `VERIFY_MAX_INTERVAL (4, max_š‹rv® ); 1909 `VERIFY_LATENCY (5, Ï‹ncy ); 1910 `VERIFY_TIMEOUT (6, timeout ); 1912 `EXEC ( if_g©t -> þ›Á -> cÚn_·¿m‘”_upd©e , & bd_addr , mš_š‹rv® , 1913 max_š‹rv® , Ï‹ncy , timeout ); 1914 } } 1917  $£t_sÿn_·¿m‘”s_p ( ¬gc , cÚ¡ ** ¬gv ) 1919  sÿn_š‹rv® ; 1920  sÿn_wšdow ; 1922 `RETURN_IF_NULL ( if_g©t ); 1923 `VERIFY_SCAN_INTERVAL (2, sÿn_š‹rv® ); 1924 `VERIFY_SCAN_WINDOW (3, sÿn_wšdow ); 1926 `EXEC ( if_g©t -> þ›Á -> £t_sÿn_·¿m‘”s , sÿn_š‹rv® , sÿn_wšdow ); 1927 } } 1930  $muÉi_adv_’abË_c ( ¬gc , cÚ¡ ** ¬gv , 1931 ’um_func *’um_func, ** u£r ) 1933 ià( ¬gc == 2) { 1934 * u£r = þ›Á_if_¡r ; 1935 * ’um_func = ’um_Úe_¡ršg ; 1937 } } 1939  $muÉi_adv_’abË_p ( ¬gc , cÚ¡ ** ¬gv ) 1941  þ›Á_if ; 1942  mš_š‹rv® , max_š‹rv® ; 1943  adv_ty³ ; 1944  chÆ_m­ ; 1945  tx_pow” ; 1946  timeout_s ; 1948 `RETURN_IF_NULL ( if_g©t ); 1949 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1950 `VERIFY_MIN_INTERVAL (3, mš_š‹rv® ); 1951 `VERIFY_MAX_INTERVAL (4, max_š‹rv® ); 1952 `VERIFY_ADV_TYPE (5, adv_ty³ ); 1953 `VERIFY_CHNL_MAP (6, chÆ_m­ ); 1954 `VERIFY_TX_POWER (7, tx_pow” ); 1955 `VERIFY_TIMEOUT_S (8, timeout_s ); 1957 `EXEC ( if_g©t -> þ›Á -> muÉi_adv_’abË , þ›Á_if , mš_š‹rv® , 1958 max_š‹rv® , adv_ty³ , chÆ_m­ , tx_pow” , timeout_s ); 1959 } } 1962  $muÉi_adv_upd©e_c ( ¬gc , cÚ¡ ** ¬gv , 1963 ’um_func *’um_func, ** u£r ) 1965 ià( ¬gc == 2) { 1966 * u£r = þ›Á_if_¡r ; 1967 * ’um_func = ’um_Úe_¡ršg ; 1969 } } 1971  $muÉi_adv_upd©e_p ( ¬gc , cÚ¡ ** ¬gv ) 1973  þ›Á_if ; 1974  mš_š‹rv® , max_š‹rv® ; 1975  adv_ty³ ; 1976  chÆ_m­ ; 1977  tx_pow” ; 1978  timeout_s ; 1980 `RETURN_IF_NULL ( if_g©t ); 1981 `VERIFY_CLIENT_IF (2, þ›Á_if ); 1982 `VERIFY_MIN_INTERVAL (3, mš_š‹rv® ); 1983 `VERIFY_MAX_INTERVAL (4, max_š‹rv® ); 1984 `VERIFY_ADV_TYPE (5, adv_ty³ ); 1985 `VERIFY_CHNL_MAP (6, chÆ_m­ ); 1986 `VERIFY_TX_POWER (7, tx_pow” ); 1987 `VERIFY_TIMEOUT_S (8, timeout_s ); 1989 `EXEC ( if_g©t -> þ›Á -> muÉi_adv_upd©e , þ›Á_if , mš_š‹rv® , 1990 max_š‹rv® , adv_ty³ , chÆ_m­ , tx_pow” , timeout_s ); 1991 } } 1994  $muÉi_adv_£t_š¡_d©a_c ( ¬gc , cÚ¡ ** ¬gv , 1995 ’um_func *’um_func, ** u£r ) 1997 ià( ¬gc == 2) { 1998 * u£r = þ›Á_if_¡r ; 1999 * ’um_func = ’um_Úe_¡ršg ; 2001 } } 2003  $muÉi_adv_£t_š¡_d©a_p ( ¬gc , cÚ¡ ** ¬gv ) 2005  þ›Á_if ; 2006 boÞ £t_sÿn_r¥ ; 2007 boÞ šþude_Çme , šþude_txpow” ; 2008  ­³¬ªû ; 2009 ušt16_t mªuçùu»r_Ën ; 2010 ušt8_t mªuçùu»r_d©a [100]; 2011 ušt16_t £rviû_d©a_Ën ; 2012 ušt8_t £rviû_d©a [100]; 2013 ušt16_t £rviû_uuid_Ën ; 2014 ušt8_t £rviû_uuid [100]; 2016 `RETURN_IF_NULL ( if_g©t ); 2017 `VERIFY_CLIENT_IF (2, þ›Á_if ); 2020 ià( ¬gc >= 4) 2021 £t_sÿn_r¥ = `©oi ( ¬gv [3]); 2023 ià( ¬gc >= 5) 2024 šþude_Çme = `©oi ( ¬gv [4]); 2026 ià( ¬gc >= 6) 2027 šþude_txpow” = `©oi ( ¬gv [5]); 2029 `VERIFY_APPEARANCE (6, ­³¬ªû ); 2030 `GET_VERIFY_HEX_STRING (7, mªuçùu»r_d©a , mªuçùu»r_Ën ); 2031 `GET_VERIFY_HEX_STRING (8, £rviû_d©a , £rviû_d©a_Ën ); 2032 `GET_VERIFY_HEX_STRING (9, £rviû_uuid , £rviû_uuid_Ën ); 2034 `EXEC ( if_g©t -> þ›Á -> muÉi_adv_£t_š¡_d©a , þ›Á_if , £t_sÿn_r¥ , 2035 šþude_Çme , šþude_txpow” , ­³¬ªû , mªuçùu»r_Ën , 2036 (*è mªuçùu»r_d©a , £rviû_d©a_Ën , 2037 (*è £rviû_d©a , £rviû_uuid_Ën , (*è £rviû_uuid ); 2038 } } 2041  $muÉi_adv_di§bË_c ( ¬gc , cÚ¡ ** ¬gv , 2042 ’um_func *’um_func, ** u£r ) 2044 ià( ¬gc == 2) { 2045 * u£r = þ›Á_if_¡r ; 2046 * ’um_func = ’um_Úe_¡ršg ; 2048 } } 2050  $muÉi_adv_di§bË_p ( ¬gc , cÚ¡ ** ¬gv ) 2052  þ›Á_if ; 2054 `RETURN_IF_NULL ( if_g©t ); 2055 `VERIFY_CLIENT_IF (2, þ›Á_if ); 2057 `EXEC ( if_g©t -> þ›Á -> muÉi_adv_di§bË , þ›Á_if ); 2058 } } 2061  $b©chsÿn_cfg_¡Üage_c ( ¬gc , cÚ¡ ** ¬gv , 2062 ’um_func *’um_func, ** u£r ) 2064 ià( ¬gc == 2) { 2065 * u£r = þ›Á_if_¡r ; 2066 * ’um_func = ’um_Úe_¡ršg ; 2068 } } 2070  $b©chsÿn_cfg_¡Üage_p ( ¬gc , cÚ¡ ** ¬gv ) 2072  þ›Á_if ; 2073  b©ch_sÿn_fuÎ_max ; 2074  b©ch_sÿn_Œunc_max ; 2075  b©ch_sÿn_nÙify_th»shÞd ; 2077 `RETURN_IF_NULL ( if_g©t ); 2078 `VERIFY_CLIENT_IF (2, þ›Á_if ); 2079 `VERIFY_BATCH_SCAN_FULL_MAX (3, b©ch_sÿn_fuÎ_max ); 2080 `VERIFY_BATCH_SCAN_TRUNC_MAX (4, b©ch_sÿn_Œunc_max ); 2081 `VERIFY_BATCH_SCAN_NOTIFY_THR (5, b©ch_sÿn_nÙify_th»shÞd ); 2083 `EXEC ( if_g©t -> þ›Á -> b©chsÿn_cfg_¡Üage , þ›Á_if , 2084 b©ch_sÿn_fuÎ_max , b©ch_sÿn_Œunc_max , 2085 b©ch_sÿn_nÙify_th»shÞd ); 2086 } } 2089  $b©chsÿn_’b_b©ch_sÿn_c ( ¬gc , cÚ¡ ** ¬gv , 2090 ’um_func *’um_func, ** u£r ) 2092 ià( ¬gc == 2) { 2093 * u£r = þ›Á_if_¡r ; 2094 * ’um_func = ’um_Úe_¡ršg ; 2096 } } 2098  $b©chsÿn_’b_b©ch_sÿn_p ( ¬gc , cÚ¡ ** ¬gv ) 2100  þ›Á_if ; 2101  sÿn_mode , sÿn_š‹rv® , sÿn_wšdow ; 2102  addr_ty³ ; 2103  disÿrd_ruË ; 2105 `RETURN_IF_NULL ( if_g©t ); 2106 `VERIFY_CLIENT_IF (2, þ›Á_if ); 2107 `VERIFY_SCAN_MODE (3, sÿn_mode ); 2108 `VERIFY_SCAN_INTERVAL (4, sÿn_š‹rv® ); 2109 `VERIFY_SCAN_WINDOW (5, sÿn_wšdow ); 2110 `VERIFY_ADDR_TYPE (6, addr_ty³ ); 2111 `VERIFY_DISCARD_RULE (7, disÿrd_ruË ); 2113 `EXEC ( if_g©t -> þ›Á -> b©chsÿn_’b_b©ch_sÿn , þ›Á_if , sÿn_mode , 2114 sÿn_š‹rv® , sÿn_wšdow , addr_ty³ , disÿrd_ruË ); 2115 } } 2118  $b©chsÿn_dis_b©ch_sÿn_c ( ¬gc , cÚ¡ ** ¬gv , 2119 ’um_func *’um_func, ** u£r ) 2121 ià( ¬gc == 2) { 2122 * u£r = þ›Á_if_¡r ; 2123 * ’um_func = ’um_Úe_¡ršg ; 2125 } } 2127  $b©chsÿn_dis_b©ch_sÿn_p ( ¬gc , cÚ¡ ** ¬gv ) 2129  þ›Á_if ; 2131 `RETURN_IF_NULL ( if_g©t ); 2132 `VERIFY_CLIENT_IF (2, þ›Á_if ); 2134 `EXEC ( if_g©t -> þ›Á -> b©chsÿn_dis_b©ch_sÿn , þ›Á_if ); 2135 } } 2138  $b©chsÿn_»ad_»pÜts_c ( ¬gc , cÚ¡ ** ¬gv , 2139 ’um_func *’um_func, ** u£r ) 2141 ià( ¬gc == 2) { 2142 * u£r = þ›Á_if_¡r ; 2143 * ’um_func = ’um_Úe_¡ršg ; 2145 } } 2147  $b©chsÿn_»ad_»pÜts_p ( ¬gc , cÚ¡ ** ¬gv ) 2149  þ›Á_if ; 2150  sÿn_mode ; 2152 `RETURN_IF_NULL ( if_g©t ); 2153 `VERIFY_CLIENT_IF (2, þ›Á_if ); 2154 `VERIFY_SCAN_MODE (3, sÿn_mode ); 2156 `EXEC ( if_g©t -> þ›Á -> b©chsÿn_»ad_»pÜts , þ›Á_if , sÿn_mode ); 2157 } } 2162  $g‘_deviû_ty³_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 2163 ** u£r ) 2165 ià( ¬gc == 3) 2166 * ’um_func = ’um_deviûs ; 2167 } } 2169  $g‘_deviû_ty³_p ( ¬gc , cÚ¡ ** ¬gv ) 2171 bt_bdaddr_t bd_addr ; 2172  dev_ty³ ; 2174 `RETURN_IF_NULL ( if_g©t ); 2175 `VERIFY_ADDR_ARG (2, & bd_addr ); 2177 dev_ty³ = if_g©t -> þ›Á -> `g‘_deviû_ty³ (& bd_addr ); 2178 `h®‹¡_šfo ("%s: %d\n", "g‘_deviû_ty³", dev_ty³ ); 2179 } } 2183  $‹¡_commªd_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 2184 ** u£r ) 2186 ià( ¬gc == 4) 2187 * ’um_func = ’um_deviûs ; 2188 } } 2190  $‹¡_commªd_p ( ¬gc , cÚ¡ ** ¬gv ) 2192  commªd ; 2193  i ; 2194 bt_bdaddr_t bd_addr ; 2195 bt_uuid_t uuid ; 2196 btg©t_‹¡_·¿ms_t ·¿ms = { 2197 . bda1 = & bd_addr , 2198 . uuid1 = & uuid 2200 ušt16_t * u = & ·¿ms . u1 ; 2202 `RETURN_IF_NULL ( if_g©t ); 2205 ià( ¬gc <= 2) { 2206 `h®‹¡_”rÜ ("No command specified\n"); 2209 commªd = `©oi ( ¬gv [2]); 2211 `VERIFY_ADDR_ARG (3, & bd_addr ); 2212 `VERIFY_UUID (4, & uuid ); 2214  i = 5; i < ¬gc ; i++) 2215 `VERIFY_TEST_ARG ( i , * u ++); 2217 `EXEC ( if_g©t -> þ›Á -> ‹¡_commªd , commªd , & ·¿ms ); 2218 } } 2220  m‘hod gþ›Á_m‘hods [] = { 2221 STD_METHODH ( »gi¡”_þ›Á , "[]"), 2222 STD_METHODCH ( uÄegi¡”_þ›Á , ""), 2223 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 2224 STD_METHODCH ( sÿn , "[1|0]"), 2225 STD_METHODCH ( cÚÃù , " [] [ " 2231 STD_METHODCH ( sÿn_fž‹r_add_»move , " " 2235 STD_METHODCH ( sÿn_fž‹r_þ—r , " "), 2236 STD_METHODCH ( sÿn_fž‹r_’abË , " []"), 2237 STD_METHODCH ( £t_adv_d©a , " [] " 2241 STD_METHODCH ( cÚfigu»_mtu , " "), 2242 STD_METHODCH ( cÚn_·¿m‘”_upd©e , " " 2244 STD_METHODH ( £t_sÿn_·¿m‘”s , " "), 2245 STD_METHODCH ( muÉi_adv_’abË , " " 2248 STD_METHODCH ( muÉi_adv_upd©e , " " 2251 STD_METHODCH ( muÉi_adv_£t_š¡_d©a , " []" 2255 STD_METHODCH ( muÉi_adv_di§bË , ""), 2256 STD_METHODCH ( b©chsÿn_cfg_¡Üage , " " 2259 STD_METHODCH ( b©chsÿn_’b_b©ch_sÿn , " " 2262 STD_METHODCH ( b©chsÿn_dis_b©ch_sÿn , ""), 2263 STD_METHODCH ( b©chsÿn_»ad_»pÜts , " "), 2265 STD_METHODCH ( sÿn , " [1|0]"), 2266 STD_METHODCH ( cÚÃù , " []"), 2268 STD_METHODCH ( discÚÃù , " "), 2269 STD_METHODCH ( »äesh , " "), 2270 STD_METHODCH ( £¬ch_£rviû , " []"), 2271 STD_METHODCH ( g‘_šþuded_£rviû , " "), 2272 STD_METHODCH ( g‘_ch¬aù”i¡ic , " "), 2273 STD_METHODCH ( g‘_desütÜ , " "), 2274 STD_METHODCH ( »ad_ch¬aù”i¡ic , 2276 STD_METHODCH ( wr™e_ch¬aù”i¡ic , 2278 STD_METHODCH ( »ad_desütÜ , 2280 STD_METHODCH ( wr™e_desütÜ , 2282 STD_METHODCH ( execu‹_wr™e , " "), 2283 STD_METHODCH ( »gi¡”_fÜ_nÙifiÿtiÚ , 2285 STD_METHODCH ( d”egi¡”_fÜ_nÙifiÿtiÚ , 2287 STD_METHODCH ( »ad_»mÙe_rssi , " "), 2288 STD_METHODCH ( g‘_deviû_ty³ , ""), 2289 STD_METHODCH ( ‹¡_commªd , 2291 STD_METHODCH ( li¡’ , " [1|0]"), 2292 END_METHOD 2295 cÚ¡  š‹rçû gg©t_þ›Á_if = { 2296 . Çme = "gattc", 2297 . gm‘hods = þ›Á_m‘hods 2304  $g©ts_»gi¡”_£rv”_p ( ¬gc , cÚ¡ * ¬gv []) 2306 bt_uuid_t uuid ; 2308 `RETURN_IF_NULL ( if_g©t ); 2311 ià( ¬gc <= 2) 2312 `g©t_¡r2bt_uuid_t ("bed4babe", -1, & uuid ); 2314 `g©t_¡r2bt_uuid_t ( ¬gv [2], -1, & uuid ); 2316 `EXEC ( if_g©t -> £rv” -> »gi¡”_£rv” , & uuid ); 2317 } } 2321  $g©ts_uÄegi¡”_£rv”_c ( ¬gc , cÚ¡ ** ¬gv , 2322 ’um_func *’um_func, ** u£r ) 2324 ià( ¬gc == 3) { 2325 * u£r = £rv”_if_¡r ; 2326 * ’um_func = ’um_Úe_¡ršg ; 2328 } } 2330  $g©ts_uÄegi¡”_£rv”_p ( ¬gc , cÚ¡ * ¬gv []) 2332  £rv”_if ; 2334 `RETURN_IF_NULL ( if_g©t ); 2335 `VERIFY_SERVER_IF (2, £rv”_if ); 2337 `EXEC ( if_g©t -> £rv” -> uÄegi¡”_£rv” , £rv”_if ); 2338 } } 2342  $g©ts_cÚÃù_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 2343 ** u£r ) 2345 ià( ¬gc == 3) { 2346 * u£r = £rv”_if_¡r ; 2347 * ’um_func = ’um_Úe_¡ršg ; 2348 } ià( ¬gc == 4) { 2349 * u£r = NULL ; 2350 * ’um_func = ’um_deviûs ; 2352 } } 2354  $g©ts_cÚÃù_p ( ¬gc , cÚ¡ * ¬gv []) 2356  £rv”_if ; 2357 bt_bdaddr_t bd_addr ; 2358  is_dœeù = 1; 2359 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 2360  Œª¥Üt = 1; 2363 `RETURN_IF_NULL ( if_g©t ); 2364 `VERIFY_SERVER_IF (2, £rv”_if ); 2365 `VERIFY_ADDR_ARG (3, & bd_addr ); 2368 ià( ¬gc > 4) 2369 is_dœeù = `©oi ( ¬gv [4]); 2371 #ià ANDROID_VERSION < `PLATFORM_VER (5, 0, 0) 2372 `EXEC ( if_g©t -> £rv” -> cÚÃù , £rv”_if , & bd_addr , is_dœeù ); 2375 ià( ¬gc > 5) 2376 Œª¥Üt = `©oi ( ¬gv [5]); 2378 `EXEC ( if_g©t -> £rv” -> cÚÃù , £rv”_if , & bd_addr , is_dœeù , 2379 Œª¥Üt ); 2381 } } 2385  $g©ts_discÚÃù_c ( ¬gc , cÚ¡ ** ¬gv , 2386 ’um_func *’um_func, ** u£r ) 2388 ià( ¬gc == 3) { 2389 * u£r = £rv”_if_¡r ; 2390 * ’um_func = ’um_Úe_¡ršg ; 2391 } ià( ¬gc == 4) { 2392 * u£r = Ï¡_addr ; 2393 * ’um_func = ’um_Úe_¡ršg ; 2394 } ià( ¬gc == 5) { 2395 * u£r = cÚn_id_¡r ; 2396 * ’um_func = ’um_Úe_¡ršg ; 2398 } } 2400  $g©ts_discÚÃù_p ( ¬gc , cÚ¡ * ¬gv []) 2402  £rv”_if ; 2403 bt_bdaddr_t bd_addr ; 2404  cÚn_id ; 2406 `RETURN_IF_NULL ( if_g©t ); 2407 `VERIFY_SERVER_IF (2, £rv”_if ); 2408 `VERIFY_ADDR_ARG (3, & bd_addr ); 2409 `VERIFY_CONN_ID (4, cÚn_id ); 2411 `EXEC ( if_g©t -> £rv” -> discÚÃù , £rv”_if , & bd_addr , cÚn_id ); 2412 } } 2417  #g©ts_add_£rviû_c g©ts_uÄegi¡”_£rv”_c ) 2419  $g©ts_add_£rviû_p ( ¬gc , cÚ¡ * ¬gv []) 2421  £rv”_if ; 2422 btg©t_¤vc_id_t ¤vc_id ; 2423  num_hªdËs ; 2425 `RETURN_IF_NULL ( if_g©t ); 2426 `VERIFY_SERVER_IF (2, £rv”_if ); 2427 `VERIFY_SRVC_ID (3, & ¤vc_id ); 2430 ià( ¬gc <= 4) { 2431 `h®‹¡_”rÜ ("No‚um_handles specified\n"); 2434 num_hªdËs = `©oi ( ¬gv [4]); 2436 `EXEC ( if_g©t -> £rv” -> add_£rviû , £rv”_if , & ¤vc_id , num_hªdËs ); 2437 } } 2442  #g©ts_add_šþuded_£rviû_c g©ts_uÄegi¡”_£rv”_c ) 2444  $g©ts_add_šþuded_£rviû_p ( ¬gc , cÚ¡ * ¬gv []) 2446  £rv”_if ; 2447  £rviû_hªdË ; 2448  šþuded_hªdË ; 2450 `RETURN_IF_NULL ( if_g©t ); 2451 `VERIFY_SERVER_IF (2, £rv”_if ); 2452 `VERIFY_SERVICE_HANDLE (3, £rviû_hªdË ); 2453 `VERIFY_HANDLE (4, šþuded_hªdË ); 2455 `EXEC ( if_g©t -> £rv” -> add_šþuded_£rviû , £rv”_if , £rviû_hªdË , 2456 šþuded_hªdË ); 2457 } } 2462  #g©ts_add_ch¬aù”i¡ic_c g©ts_uÄegi¡”_£rv”_c ) 2464  $g©ts_add_ch¬aù”i¡ic_p ( ¬gc , cÚ¡ * ¬gv []) 2466  £rv”_if ; 2467  £rviû_hªdË ; 2468  ´Ý”t›s ; 2469  ³rmissiÚs ; 2470 bt_uuid_t uuid ; 2472 `RETURN_IF_NULL ( if_g©t ); 2473 `VERIFY_SERVER_IF (2, £rv”_if ); 2474 `VERIFY_SERVICE_HANDLE (3, £rviû_hªdË ); 2475 `VERIFY_UUID (4, & uuid ); 2478 ià( ¬gc <= 5) { 2479 `h®‹¡_”rÜ ("No…roperties specified\n"); 2482 ´Ý”t›s = `©oi ( ¬gv [5]); 2485 ià( ¬gc <= 6) { 2486 `h®‹¡_”rÜ ("No…ermissions specified\n"); 2489 ³rmissiÚs = `©oi ( ¬gv [6]); 2491 `EXEC ( if_g©t -> £rv” -> add_ch¬aù”i¡ic , £rv”_if , £rviû_hªdË , 2492 & uuid , ´Ý”t›s , ³rmissiÚs ); 2493 } } 2498  #g©ts_add_desütÜ_c g©ts_uÄegi¡”_£rv”_c ) 2500  $g©ts_add_desütÜ_p ( ¬gc , cÚ¡ * ¬gv []) 2502  £rv”_if ; 2503  £rviû_hªdË ; 2504  ³rmissiÚs ; 2505 bt_uuid_t uuid ; 2507 `RETURN_IF_NULL ( if_g©t ); 2508 `VERIFY_SERVER_IF (2, £rv”_if ); 2509 `VERIFY_SERVICE_HANDLE (3, £rviû_hªdË ); 2510 `VERIFY_UUID (4, & uuid ); 2513 ià( ¬gc <= 5) { 2514 `h®‹¡_”rÜ ("No…ermissions specified\n"); 2517 ³rmissiÚs = `©oi ( ¬gv [5]); 2519 `EXEC ( if_g©t -> £rv” -> add_desütÜ , £rv”_if , £rviû_hªdË , & uuid , 2520 ³rmissiÚs ); 2521 } } 2526  #g©ts_¡¬t_£rviû_c g©ts_uÄegi¡”_£rv”_c ) 2528  $g©ts_¡¬t_£rviû_p ( ¬gc , cÚ¡ * ¬gv []) 2530  £rv”_if ; 2531  £rviû_hªdË ; 2532  Œª¥Üt ; 2534 `RETURN_IF_NULL ( if_g©t ); 2535 `VERIFY_SERVER_IF (2, £rv”_if ); 2536 `VERIFY_SERVICE_HANDLE (3, £rviû_hªdË ); 2539 ià( ¬gc <= 4) { 2540 `h®‹¡_”rÜ ("Noransport specified\n"); 2543 Œª¥Üt = `©oi ( ¬gv [4]); 2545 `EXEC ( if_g©t -> £rv” -> ¡¬t_£rviû , £rv”_if , £rviû_hªdË , 2546 Œª¥Üt ); 2547 } } 2552  #g©ts_¡Ý_£rviû_c g©ts_uÄegi¡”_£rv”_c ) 2554  $g©ts_¡Ý_£rviû_p ( ¬gc , cÚ¡ * ¬gv []) 2556  £rv”_if ; 2557  £rviû_hªdË ; 2559 `RETURN_IF_NULL ( if_g©t ); 2560 `VERIFY_SERVER_IF (2, £rv”_if ); 2561 `VERIFY_SERVICE_HANDLE (3, £rviû_hªdË ); 2563 `EXEC ( if_g©t -> £rv” -> ¡Ý_£rviû , £rv”_if , £rviû_hªdË ); 2564 } } 2569  #g©ts_d–‘e_£rviû_c g©ts_uÄegi¡”_£rv”_c ) 2571  $g©ts_d–‘e_£rviû_p ( ¬gc , cÚ¡ * ¬gv []) 2573  £rv”_if ; 2574  £rviû_hªdË ; 2576 `RETURN_IF_NULL ( if_g©t ); 2577 `VERIFY_SERVER_IF (2, £rv”_if ); 2578 `VERIFY_SERVICE_HANDLE (3, £rviû_hªdË ); 2580 `EXEC ( if_g©t -> £rv” -> d–‘e_£rviû , £rv”_if , £rviû_hªdË ); 2581 } } 2585  $g©ts_£nd_šdiÿtiÚ_p ( ¬gc , cÚ¡ * ¬gv []) 2587  £rv”_if ; 2588  ©Œ_hªdË ; 2589  cÚn_id ; 2590  cÚfœm ; 2591  d©a [200]; 2592  Ën = 0; 2594 `RETURN_IF_NULL ( if_g©t ); 2595 `VERIFY_SERVER_IF (2, £rv”_if ); 2596 `VERIFY_HANDLE (3, ©Œ_hªdË ); 2597 `VERIFY_CONN_ID (4, cÚn_id ); 2600 ià( ¬gc <= 5) { 2601 `h®‹¡_”rÜ ("Noransport specified\n"); 2604 cÚfœm = `©oi ( ¬gv [5]); 2606 `GET_VERIFY_HEX_STRING (6, d©a , Ën ); 2608 `EXEC ( if_g©t -> £rv” -> £nd_šdiÿtiÚ , £rv”_if , ©Œ_hªdË , cÚn_id , 2609 Ën , cÚfœm , d©a ); 2610 } } 2614  $g©ts_£nd_»¥Ú£_p ( ¬gc , cÚ¡ * ¬gv []) 2616  cÚn_id ; 2617  Œªs_id ; 2618  ¡©us ; 2619 btg©t_»¥Ú£_t d©a ; 2621 `mem£t (& d©a , 0, (data)); 2623 `RETURN_IF_NULL ( if_g©t ); 2625 `VERIFY_CONN_ID (2, cÚn_id ); 2626 `VERIFY_TRANS_ID (3, Œªs_id ); 2627 `VERIFY_STATUS (4, ¡©us ); 2628 `VERIFY_HANDLE (5, d©a . ©Œ_v®ue . hªdË ); 2629 `VERIFY_OFFSET (6, d©a . ©Œ_v®ue . off£t ); 2631 d©a . ©Œ_v®ue . auth_»q = 0; 2632 d©a . ©Œ_v®ue . Ën = 0; 2634 `GET_VERIFY_HEX_STRING (7, d©a . ©Œ_v®ue . v®ue , d©a.©Œ_v®ue. Ën ); 2636 `h®‹¡_šfo ("cÚn_id %d,¿ns_id %d, stu %d", cÚn_id , Œªs_id , 2637 ¡©us ); 2639 `EXEC ( if_g©t -> £rv” -> £nd_»¥Ú£ , cÚn_id , Œªs_id , ¡©us , & d©a ); 2640 } } 2642  #GATTS_METHODH ( n , h è `METHOD (#n, g©ts_ ##n## _p , NULL , h) ) 2643  #GATTS_METHODCH ( n , h è `METHOD (#n, g©ts_ ##n## _p , g©ts_##n## _c , h) ) 2645  m‘hod g£rv”_m‘hods [] = { 2646 GATTS_METHODH ( »gi¡”_£rv” , "[]"), 2647 GATTS_METHODCH ( uÄegi¡”_£rv” , ""), 2648 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 2649 GATTS_METHODCH ( cÚÃù , " [] []"), 2651 GATTS_METHODCH ( cÚÃù , " []"), 2653 GATTS_METHODCH ( discÚÃù , " "), 2654 GATTS_METHODCH ( add_£rviû , " "), 2655 GATTS_METHODCH ( add_šþuded_£rviû , 2657 GATTS_METHODCH ( add_ch¬aù”i¡ic , 2659 GATTS_METHODCH ( add_desütÜ , 2661 GATTS_METHODCH ( ¡¬t_£rviû , 2663 GATTS_METHODCH ( ¡Ý_£rviû , " "), 2664 GATTS_METHODCH ( d–‘e_£rviû , " "), 2665 GATTS_METHODH ( £nd_šdiÿtiÚ , 2667 GATTS_METHODH ( £nd_»¥Ú£ , 2669 END_METHOD 2672 cÚ¡  š‹rçû gg©t_£rv”_if = { 2673 . Çme = "gatts", 2674 . gm‘hods = £rv”_m‘hods @android/client/if-hf-client.c 18  ~"if-maš.h " 19  ~"../h®-utžs.h " 21 cÚ¡ bthf_þ›Á_š‹rçû_t * gif_hf_þ›Á = NULL ; 23  gÏ¡_addr [ MAX_ADDR_STR_LEN ]; 25 SINTMAP ( bthf_þ›Á_cÚÃùiÚ_¡©e_t , -1, "(unknown)") 26 DELEMENT ( BTHF_CLIENT_CONNECTION_STATE_DISCONNECTED ), 27 DELEMENT ( BTHF_CLIENT_CONNECTION_STATE_CONNECTING ), 28 DELEMENT ( BTHF_CLIENT_CONNECTION_STATE_CONNECTED ), 29 DELEMENT ( BTHF_CLIENT_CONNECTION_STATE_SLC_CONNECTED ), 30 DELEMENT ( BTHF_CLIENT_CONNECTION_STATE_DISCONNECTING ), 31 ENDMAP 33 SINTMAP ( bthf_þ›Á_audio_¡©e_t , -1, "(unknown)") 34 DELEMENT ( BTHF_CLIENT_AUDIO_STATE_DISCONNECTED ), 35 DELEMENT ( BTHF_CLIENT_AUDIO_STATE_CONNECTING ), 36 DELEMENT ( BTHF_CLIENT_AUDIO_STATE_CONNECTED ), 37 DELEMENT ( BTHF_CLIENT_AUDIO_STATE_CONNECTED_MSBC ), 38 ENDMAP 40 SINTMAP ( bthf_þ›Á_vr_¡©e_t , -1, "(unknown)") 41 DELEMENT ( BTHF_CLIENT_VR_STATE_STOPPED ), 42 DELEMENT ( BTHF_CLIENT_VR_STATE_STARTED ), 43 ENDMAP 45 SINTMAP ( bthf_þ›Á_ÃtwÜk_¡©e_t , -1, "(unknown)") 46 DELEMENT ( BTHF_CLIENT_NETWORK_STATE_NOT_AVAILABLE ), 47 DELEMENT ( BTHF_CLIENT_NETWORK_STATE_AVAILABLE ), 48 ENDMAP 50 SINTMAP ( bthf_þ›Á_£rviû_ty³_t , -1, "(unknown)") 51 DELEMENT ( BTHF_CLIENT_SERVICE_TYPE_HOME ), 52 DELEMENT ( BTHF_CLIENT_SERVICE_TYPE_ROAMING ), 53 ENDMAP 55 SINTMAP ( bthf_þ›Á_ÿÎ_t , -1, "(unknown)") 56 DELEMENT ( BTHF_CLIENT_CALL_NO_CALLS_IN_PROGRESS ), 57 DELEMENT ( BTHF_CLIENT_CALL_CALLS_IN_PROGRESS ), 58 ENDMAP 60 SINTMAP ( bthf_þ›Á_ÿΣtup_t , -1, "(unknown)") 61 DELEMENT ( BTHF_CLIENT_CALLSETUP_NONE ), 62 DELEMENT ( BTHF_CLIENT_CALLSETUP_INCOMING ), 63 DELEMENT ( BTHF_CLIENT_CALLSETUP_OUTGOING ), 64 DELEMENT ( BTHF_CLIENT_CALLSETUP_ALERTING ), 65 ENDMAP 67 SINTMAP ( bthf_þ›Á_ÿÎh–d_t , -1, "(unknown)") 68 DELEMENT ( BTHF_CLIENT_CALLHELD_NONE ), 69 DELEMENT ( BTHF_CLIENT_CALLHELD_HOLD_AND_ACTIVE ), 70 DELEMENT ( BTHF_CLIENT_CALLHELD_HOLD ), 71 ENDMAP 73 SINTMAP ( bthf_þ›Á_»¥_ªd_hÞd_t , -1, "(unknown)") 74 DELEMENT ( BTHF_CLIENT_RESP_AND_HOLD_HELD ), 75 DELEMENT ( BTRH_CLIENT_RESP_AND_HOLD_ACCEPT ), 76 DELEMENT ( BTRH_CLIENT_RESP_AND_HOLD_REJECT ), 77 ENDMAP 79 SINTMAP ( bthf_þ›Á_ÿÎ_dœeùiÚ_t , -1, "(unknown)") 80 DELEMENT ( BTHF_CLIENT_CALL_DIRECTION_OUTGOING ), 81 DELEMENT ( BTHF_CLIENT_CALL_DIRECTION_INCOMING ), 82 ENDMAP 84 SINTMAP ( bthf_þ›Á_ÿÎ_¡©e_t , -1, "(unknown)") 85 DELEMENT ( BTHF_CLIENT_CALL_STATE_ACTIVE ), 86 DELEMENT ( BTHF_CLIENT_CALL_STATE_HELD ), 87 DELEMENT ( BTHF_CLIENT_CALL_STATE_DIALING ), 88 DELEMENT ( BTHF_CLIENT_CALL_STATE_ALERTING ), 89 DELEMENT ( BTHF_CLIENT_CALL_STATE_INCOMING ), 90 DELEMENT ( BTHF_CLIENT_CALL_STATE_WAITING ), 91 DELEMENT ( BTHF_CLIENT_CALL_STATE_HELD_BY_RESP_HOLD ), 92 ENDMAP 94 SINTMAP ( bthf_þ›Á_ÿÎ_m±y_ty³_t , -1, "(unknown)") 95 DELEMENT ( BTHF_CLIENT_CALL_MPTY_TYPE_SINGLE ), 96 DELEMENT ( BTHF_CLIENT_CALL_MPTY_TYPE_MULTI ), 97 ENDMAP 99 SINTMAP ( bthf_þ›Á_vÞume_ty³_t , -1, "(unknown)") 100 DELEMENT ( BTHF_CLIENT_VOLUME_TYPE_SPK ), 101 DELEMENT ( BTHF_CLIENT_VOLUME_TYPE_MIC ), 102 ENDMAP 104 SINTMAP ( bthf_þ›Á_cmd_com¶‘e_t , -1, "(unknown)") 105 DELEMENT ( BTHF_CLIENT_CMD_COMPLETE_OK ), 106 DELEMENT ( BTHF_CLIENT_CMD_COMPLETE_ERROR ), 107 DELEMENT ( BTHF_CLIENT_CMD_COMPLETE_ERROR_NO_CARRIER ), 108 DELEMENT ( BTHF_CLIENT_CMD_COMPLETE_ERROR_BUSY ), 109 DELEMENT ( BTHF_CLIENT_CMD_COMPLETE_ERROR_NO_ANSWER ), 110 DELEMENT ( BTHF_CLIENT_CMD_COMPLETE_ERROR_DELAYED ), 111 DELEMENT ( BTHF_CLIENT_CMD_COMPLETE_ERROR_BLACKLISTED ), 112 DELEMENT ( BTHF_CLIENT_CMD_COMPLETE_ERROR_CME ), 113 ENDMAP 115 SINTMAP ( bthf_þ›Á_subsüib”_£rviû_ty³_t , -1, "(unknown)") 116 DELEMENT ( BTHF_CLIENT_SERVICE_UNKNOWN ), 117 DELEMENT ( BTHF_CLIENT_SERVICE_VOICE ), 118 DELEMENT ( BTHF_CLIENT_SERVICE_FAX ), 119 ENDMAP 121 SINTMAP ( bthf_þ›Á_š_bªd_ršg_¡©e_t , -1, "(unknown)") 122 DELEMENT ( BTHF_CLIENT_IN_BAND_RINGTONE_NOT_PROVIDED ), 123 DELEMENT ( BTHF_CLIENT_IN_BAND_RINGTONE_PROVIDED ), 124 ENDMAP 126 SINTMAP ( bthf_þ›Á_ÿÎ_aùiÚ_t , -1, "(unknown)") 127 DELEMENT ( BTHF_CLIENT_CALL_ACTION_CHLD_0 ), 128 DELEMENT ( BTHF_CLIENT_CALL_ACTION_CHLD_1 ), 129 DELEMENT ( BTHF_CLIENT_CALL_ACTION_CHLD_2 ), 130 DELEMENT ( BTHF_CLIENT_CALL_ACTION_CHLD_3 ), 131 DELEMENT ( BTHF_CLIENT_CALL_ACTION_CHLD_4 ), 132 DELEMENT ( BTHF_CLIENT_CALL_ACTION_CHLD_1x ), 133 DELEMENT ( BTHF_CLIENT_CALL_ACTION_CHLD_2x ), 134 DELEMENT ( BTHF_CLIENT_CALL_ACTION_ATA ), 135 DELEMENT ( BTHF_CLIENT_CALL_ACTION_CHUP ), 136 DELEMENT ( BTHF_CLIENT_CALL_ACTION_BTRH_0 ), 137 DELEMENT ( BTHF_CLIENT_CALL_ACTION_BTRH_1 ), 138 DELEMENT ( BTHF_CLIENT_CALL_ACTION_BTRH_2 ), 139 ENDMAP 143  gã©u»s_¡r [512]; 145 cÚ¡ * $³¬_ã©u»s_t2¡r ( ã© ) 147 `mem£t ( ã©u»s_¡r , 0, (features_str)); 149 `¥rštf ( ã©u»s_¡r , "BTHF_CLIENT_PEER_FEAT_3WAY: %s,\n" 159 ã© & BTHF_CLIENT_PEER_FEAT_3WAY ? "True" : "False", 160 ã© & BTHF_CLIENT_PEER_FEAT_ECNR ? "True" : "False", 161 ã© & BTHF_CLIENT_PEER_FEAT_VREC ? "True" : "False", 162 ã© & BTHF_CLIENT_PEER_FEAT_INBAND ? "True" : "False", 163 ã© & BTHF_CLIENT_PEER_FEAT_VTAG ? "True" : "False", 164 ã© & BTHF_CLIENT_PEER_FEAT_REJECT ? "True" : "False", 165 ã© & BTHF_CLIENT_PEER_FEAT_ECS ? "True" : "False", 166 ã© & BTHF_CLIENT_PEER_FEAT_ECC ? "True" : "False", 167 ã© & BTHF_CLIENT_PEER_FEAT_EXTERR ? "True" : "False", 168 ã© & BTHF_CLIENT_PEER_FEAT_CODEC ? "True" : "False"); 170  ã©u»s_¡r ; 171 } } 173 cÚ¡ * $chld_ã©u»s_t2¡r ( ã© ) 175 `mem£t ( ã©u»s_¡r , 0, (features_str)); 177 `¥rštf ( ã©u»s_¡r , 185 ã© & BTHF_CLIENT_CHLD_FEAT_REL ? "True" : "False", 186 ã© & BTHF_CLIENT_CHLD_FEAT_REL_ACC ? "True" : "False", 187 ã© & BTHF_CLIENT_CHLD_FEAT_REL_X ? "True" : "False", 188 ã© & BTHF_CLIENT_CHLD_FEAT_HOLD_ACC ? "True" : "False", 189 ã© & BTHF_CLIENT_CHLD_FEAT_PRIV_X ? "True" : "False", 190 ã© & BTHF_CLIENT_CHLD_FEAT_MERGE ? "True" : "False", 191 ã© & BTHF_CLIENT_CHLD_FEAT_MERGE_DETACH ? "True" : "False"); 193  ã©u»s_¡r ; 194 } } 197  $hf_þ›Á_cÚÃùiÚ_¡©e_ÿÎback ( 198 bthf_þ›Á_cÚÃùiÚ_¡©e_t ¡©e , 199  ³”_ã© , 200  chld_ã© , 201 bt_bdaddr_t * bd_addr ) 203 `h®‹¡_šfo ("%s: s‹=% bd_addr=%s\n", __func__ , 204 `bthf_þ›Á_cÚÃùiÚ_¡©e_t2¡r ( ¡©e ), 205 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 207 ià( ¡©e !ð BTHF_CLIENT_CONNECTION_STATE_CONNECTED ) 210 `h®‹¡_šfo ("\“r_ã©u»s%s\n", `³¬_ã©u»s_t2¡r ( ³”_ã© )); 211 `h®‹¡_šfo ("\tchld_ã©=%s\n", `chld_ã©u»s_t2¡r ( chld_ã© )); 212 } } 215  $hf_þ›Á_audio_¡©e_ÿÎback ( bthf_þ›Á_audio_¡©e_t ¡©e , 216 bt_bdaddr_t * bd_addr ) 218 `h®‹¡_šfo ("%s: s‹=% bd_addr=%s\n", __func__ , 219 `bthf_þ›Á_audio_¡©e_t2¡r ( ¡©e ), 220 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 221 } } 224  $hf_þ›Á_vr_cmd_ÿÎback ( bthf_þ›Á_vr_¡©e_t ¡©e ) 226 `h®‹¡_šfo ("%s: vr_¡©e=%s\n", __func__ , 227 `bthf_þ›Á_vr_¡©e_t2¡r ( ¡©e )); 228 } } 231  $hf_þ›Á_ÃtwÜk_¡©e_ÿÎback ( bthf_þ›Á_ÃtwÜk_¡©e_t ¡©e ) 233 `h®‹¡_šfo ("%s:‚‘wÜk_¡©e=%s\n", __func__ , 234 `bthf_þ›Á_ÃtwÜk_¡©e_t2¡r ( ¡©e )); 235 } } 238  $hf_þ›Á_ÃtwÜk_rßmšg_ÿÎback ( bthf_þ›Á_£rviû_ty³_t ty³ ) 240 `h®‹¡_šfo ("%s: s”viû_ty³=%s\n", __func__ , 241 `bthf_þ›Á_£rviû_ty³_t2¡r ( ty³ )); 242 } } 245  $hf_þ›Á_ÃtwÜk_sigÇl_ÿÎback ( sigÇl_¡»ngth ) 247 `h®‹¡_šfo ("%s: sigÇÈ¡»ngth=%d\n", __func__ , sigÇl_¡»ngth ); 248 } } 251  $hf_þ›Á_b©‹ry_Ëv–_ÿÎback ( b©‹ry_Ëv– ) 253 `h®‹¡_šfo ("%s: b©‹ry_lvl=%d\n", __func__ , b©‹ry_Ëv– ); 254 } } 257  $hf_þ›Á_cu¼’t_Ý”©Ü_ÿÎback (cÚ¡ * Çme ) 259 `h®‹¡_šfo ("%s: o³¿tÜ_Çme=%s\n", __func__ , Çme ); 260 } } 263  $hf_þ›Á_ÿÎ_ÿÎback ( bthf_þ›Á_ÿÎ_t ÿÎ ) 265 `h®‹¡_šfo ("%s: c®l_¡©e=%s\n", __func__ , 266 `bthf_þ›Á_ÿÎ_t2¡r ( ÿÎ )); 267 } } 270  $hf_þ›Á_ÿΣtup_ÿÎback ( bthf_þ›Á_ÿΣtup_t ÿΣtup ) 272 `h®‹¡_šfo ("%s: c®l£tup=%s\n", __func__ , 273 `bthf_þ›Á_ÿΣtup_t2¡r ( ÿΣtup )); 274 } } 277  $hf_þ›Á_ÿÎh–d_ÿÎback ( bthf_þ›Á_ÿÎh–d_t ÿÎh–d ) 279 `h®‹¡_šfo ("%s: c®lh–d=%s\n", __func__ , 280 `bthf_þ›Á_ÿÎh–d_t2¡r ( ÿÎh–d )); 281 } } 284  $hf_þ›Á_»¥_ªd_hÞd_ÿÎback ( 285 bthf_þ›Á_»¥_ªd_hÞd_t »¥_ªd_hÞd ) 287 `h®‹¡_šfo ("%s:„e¥_ªd_hÞd=%s\n", __func__ , 288 `bthf_þ›Á_»¥_ªd_hÞd_t2¡r ( »¥_ªd_hÞd )); 289 } } 292  $hf_þ›Á_þ_ÿÎback (cÚ¡ * numb” ) 294 `h®‹¡_šfo ("%s:‚umb”=%s\n", __func__ , numb” ); 295 } } 298  $hf_þ›Á_ÿÎ_wa™šg_ÿÎback (cÚ¡ * numb” ) 300 `h®‹¡_šfo ("%s:‚umb”=%s\n", __func__ , numb” ); 301 } } 304  $hf_þ›Á_cu¼’t_ÿÎs_ÿÎback ( šdex , 305 bthf_þ›Á_ÿÎ_dœeùiÚ_t dœ , 306 bthf_þ›Á_ÿÎ_¡©e_t ¡©e , 307 bthf_þ›Á_ÿÎ_m±y_ty³_t m±y , 308 cÚ¡ * numb” ) 310 `h®‹¡_šfo ("%s: index=%d, direction=%s, state=%s, m_party=%s\n", 311 __func__ , šdex , 312 `bthf_þ›Á_ÿÎ_dœeùiÚ_t2¡r ( dœ ), 313 `bthf_þ›Á_ÿÎ_¡©e_t2¡r ( ¡©e ), 314 `bthf_þ›Á_ÿÎ_m±y_ty³_t2¡r ( m±y )); 316 ià( numb” ) 317 `h®‹¡_šfo ("%s:‚umb”=%s\n", __func__ , numb” ); 318 } } 321  $hf_þ›Á_vÞume_chªge_ÿÎback ( bthf_þ›Á_vÞume_ty³_t ty³ , 322  vÞume ) 324 `h®‹¡_šfo ("%s: vÞ_ty³=%s, v®ue=%d\n", __func__ , 325 `bthf_þ›Á_vÞume_ty³_t2¡r ( ty³ ), vÞume ); 326 } } 329  $hf_þ›Á_cmd_com¶‘e_ÿÎback ( bthf_þ›Á_cmd_com¶‘e_t ty³ , 330  cme ) 332 `h®‹¡_šfo ("%s:y³=%s, cme=%d\n", __func__ , 333 `bthf_þ›Á_cmd_com¶‘e_t2¡r ( ty³ ), cme ); 334 } } 337  $hf_þ›Á_subsüib”_šfo_ÿÎback (cÚ¡ * Çme , 338 bthf_þ›Á_subsüib”_£rviû_ty³_t ty³ ) 340 `h®‹¡_šfo ("%s:‚ame=%s,y³=%s\n", __func__ , Çme , 341 `bthf_þ›Á_subsüib”_£rviû_ty³_t2¡r ( ty³ )); 342 } } 345  $hf_þ›Á_š_bªd_ršg_tÚe_ÿÎback ( 346 bthf_þ›Á_š_bªd_ršg_¡©e_t ¡©e ) 348 `h®‹¡_šfo ("%s: s‹=%s\n", __func__ , 349 `bthf_þ›Á_š_bªd_ršg_¡©e_t2¡r ( ¡©e )); 350 } } 353  $hf_þ›Á_Ï¡_voiû_g_numb”_ÿÎback (cÚ¡ * numb” ) 355 `h®‹¡_šfo ("%s:‚umb”=%s\n", __func__ , numb” ); 356 } } 359  $hf_þ›Á_ršg_šdiÿtiÚ_ÿÎback () 361 `h®‹¡_šfo ("%s\n", __func__ ); 362 } } 364  bthf_þ›Á_ÿÎbacks_t ghf_þ›Á_cbacks = { 365 . size = ( hf_þ›Á_cbacks ), 366 . gcÚÃùiÚ_¡©e_cb = hf_þ›Á_cÚÃùiÚ_¡©e_ÿÎback , 367 . gaudio_¡©e_cb = hf_þ›Á_audio_¡©e_ÿÎback , 368 . gvr_cmd_cb = hf_þ›Á_vr_cmd_ÿÎback , 369 . gÃtwÜk_¡©e_cb = hf_þ›Á_ÃtwÜk_¡©e_ÿÎback , 370 . gÃtwÜk_rßmšg_cb = hf_þ›Á_ÃtwÜk_rßmšg_ÿÎback , 371 . gÃtwÜk_sigÇl_cb = hf_þ›Á_ÃtwÜk_sigÇl_ÿÎback , 372 . gb©‹ry_Ëv–_cb = hf_þ›Á_b©‹ry_Ëv–_ÿÎback , 373 . gcu¼’t_Ý”©Ü_cb = hf_þ›Á_cu¼’t_Ý”©Ü_ÿÎback , 374 . gÿÎ_cb = hf_þ›Á_ÿÎ_ÿÎback , 375 . gÿΣtup_cb = hf_þ›Á_ÿΣtup_ÿÎback , 376 . gÿÎh–d_cb = hf_þ›Á_ÿÎh–d_ÿÎback , 377 . g»¥_ªd_hÞd_cb = hf_þ›Á_»¥_ªd_hÞd_ÿÎback , 378 . gþ_cb = hf_þ›Á_þ_ÿÎback , 379 . gÿÎ_wa™šg_cb = hf_þ›Á_ÿÎ_wa™šg_ÿÎback , 380 . gcu¼’t_ÿÎs_cb = hf_þ›Á_cu¼’t_ÿÎs_ÿÎback , 381 . gvÞume_chªge_cb = hf_þ›Á_vÞume_chªge_ÿÎback , 382 . gcmd_com¶‘e_cb = hf_þ›Á_cmd_com¶‘e_ÿÎback , 383 . gsubsüib”_šfo_cb = hf_þ›Á_subsüib”_šfo_ÿÎback , 384 . gš_bªd_ršg_tÚe_cb = hf_þ›Á_š_bªd_ršg_tÚe_ÿÎback , 385 . gÏ¡_voiû_g_numb”_ÿÎback = 386 hf_þ›Á_Ï¡_voiû_g_numb”_ÿÎback , 387 . gršg_šdiÿtiÚ_cb = hf_þ›Á_ršg_šdiÿtiÚ_ÿÎback , 391  $š™_p ( ¬gc , cÚ¡ ** ¬gv ) 393 `RETURN_IF_NULL ( if_hf_þ›Á ); 395 `EXEC ( if_hf_þ›Á -> š™ , & hf_þ›Á_cbacks ); 396 } } 398  $cÚÃù_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 399 ** u£r ) 401 ià( ¬gc == 3) { 402 * u£r = NULL ; 403 * ’um_func = ’um_deviûs ; 405 } } 408  $cÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 410 bt_bdaddr_t addr ; 412 `RETURN_IF_NULL ( if_hf_þ›Á ); 413 `VERIFY_ADDR_ARG (2, & addr ); 415 `EXEC ( if_hf_þ›Á -> cÚÃù , & addr ); 416 } } 422  $cÚÃùed_addr_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 423 ** u£r ) 425 ià( ¬gc == 3) { 426 * u£r = Ï¡_addr ; 427 * ’um_func = ’um_Úe_¡ršg ; 429 } } 432  #discÚÃù_c cÚÃùed_addr_c ) 435  $discÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 437 bt_bdaddr_t addr ; 439 `RETURN_IF_NULL ( if_hf_þ›Á ); 440 `VERIFY_ADDR_ARG (2, & addr ); 442 `EXEC ( if_hf_þ›Á -> discÚÃù , & addr ); 443 } } 445  $cÚÃù_audio_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 446 ** u£r ) 448 ià( ¬gc == 3) { 449 * u£r = NULL ; 450 * ’um_func = ’um_deviûs ; 452 } } 455  $cÚÃù_audio_p ( ¬gc , cÚ¡ ** ¬gv ) 457 bt_bdaddr_t addr ; 459 `RETURN_IF_NULL ( if_hf_þ›Á ); 460 `VERIFY_ADDR_ARG (2, & addr ); 462 `EXEC ( if_hf_þ›Á -> cÚÃù_audio , & addr ); 463 } } 466  #discÚÃù_audio_c cÚÃùed_addr_c ) 469  $discÚÃù_audio_p ( ¬gc , cÚ¡ ** ¬gv ) 471 bt_bdaddr_t addr ; 473 `RETURN_IF_NULL ( if_hf_þ›Á ); 474 `VERIFY_ADDR_ARG (2, & addr ); 476 `EXEC ( if_hf_þ›Á -> discÚÃù_audio , & addr ); 477 } } 480  $¡¬t_voiû_»cogn™iÚ_p ( ¬gc , cÚ¡ ** ¬gv ) 482 `RETURN_IF_NULL ( if_hf_þ›Á ); 484 `EXEC ( if_hf_þ›Á -> ¡¬t_voiû_»cogn™iÚ ); 485 } } 488  $¡Ý_voiû_»cogn™iÚ_p ( ¬gc , cÚ¡ ** ¬gv ) 490 `RETURN_IF_NULL ( if_hf_þ›Á ); 492 `EXEC ( if_hf_þ›Á -> ¡Ý_voiû_»cogn™iÚ ); 493 } } 495  $vÞume_cÚŒÞ_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 496 ** u£r ) 498 ià( ¬gc == 3) { 499 * u£r = `TYPE_ENUM ( bthf_þ›Á_vÞume_ty³_t ); 500 * ’um_func = ’um_defšes ; 502 } } 505  $vÞume_cÚŒÞ_p ( ¬gc , cÚ¡ ** ¬gv ) 507 bthf_þ›Á_vÞume_ty³_t ty³ ; 508  vÞume ; 510 `RETURN_IF_NULL ( if_hf_þ›Á ); 513 ià( ¬gc <= 2) { 514 `h®‹¡_”rÜ ("No volumeype specified\n"); 517 ty³ = `¡r2bthf_þ›Á_vÞume_ty³_t ( ¬gv [2]); 520 ià( ¬gc <= 3) { 521 `h®‹¡_”rÜ ("No volume specified\n"); 524 vÞume = `©oi ( ¬gv [3]); 526 `EXEC ( if_hf_þ›Á -> vÞume_cÚŒÞ , ty³ , vÞume ); 527 } } 530  $dŸl_p ( ¬gc , cÚ¡ ** ¬gv ) 532 `RETURN_IF_NULL ( if_hf_þ›Á ); 535 ià( ¬gc <= 2) { 536 `h®‹¡_šfo ("Number‚ot specified. Redial\n"); 537 `EXEC ( if_hf_þ›Á -> dŸl , NULL ); 541 `EXEC ( if_hf_þ›Á -> dŸl , ¬gv [2]); 542 } } 545  $dŸl_memÜy_p ( ¬gc , cÚ¡ ** ¬gv ) 547 `RETURN_IF_NULL ( if_hf_þ›Á ); 550 ià( ¬gc <= 2) { 551 `h®‹¡_”rÜ ("No memory index specified\n"); 555 `EXEC ( if_hf_þ›Á -> dŸl_memÜy , `©oi ( ¬gv [2])); 556 } } 558  $hªdË_ÿÎ_aùiÚ_c ( ¬gc , cÚ¡ ** ¬gv , 559 ’um_func *’um_func, ** u£r ) 561 ià( ¬gc == 3) { 562 * u£r = `TYPE_ENUM ( bthf_þ›Á_ÿÎ_aùiÚ_t ); 563 * ’um_func = ’um_defšes ; 565 } } 568  $hªdË_ÿÎ_aùiÚ_p ( ¬gc , cÚ¡ ** ¬gv ) 570 bthf_þ›Á_ÿÎ_aùiÚ_t aùiÚ ; 571  šdex = 0; 573 `RETURN_IF_NULL ( if_hf_þ›Á ); 576 ià( ¬gc <= 2) { 577 `h®‹¡_”rÜ ("No‡ction specified\n"); 580 aùiÚ = `¡r2bthf_þ›Á_ÿÎ_aùiÚ_t ( ¬gv [2]); 583 ià( aùiÚ =ð BTHF_CLIENT_CALL_ACTION_CHLD_1x || 584 aùiÚ =ð BTHF_CLIENT_CALL_ACTION_CHLD_2x ) { 585 ià( ¬gc <= 3) { 586 `h®‹¡_”rÜ ("No call index specified\n"); 589 šdex = `©oi ( ¬gv [3]); 592 `EXEC ( if_hf_þ›Á -> hªdË_ÿÎ_aùiÚ , aùiÚ , šdex ); 593 } } 596  $qu”y_cu¼’t_ÿÎs_p ( ¬gc , cÚ¡ ** ¬gv ) 598 `RETURN_IF_NULL ( if_hf_þ›Á ); 600 `EXEC ( if_hf_þ›Á -> qu”y_cu¼’t_ÿÎs ); 601 } } 604  $qu”y_cu¼’t_Ý”©Ü_Çme_p ( ¬gc , cÚ¡ ** ¬gv ) 606 `RETURN_IF_NULL ( if_hf_þ›Á ); 608 `EXEC ( if_hf_þ›Á -> qu”y_cu¼’t_Ý”©Ü_Çme ); 609 } } 612  $»Œ›ve_subsüib”_šfo_p ( ¬gc , cÚ¡ ** ¬gv ) 614 `RETURN_IF_NULL ( if_hf_þ›Á ); 616 `EXEC ( if_hf_þ›Á -> »Œ›ve_subsüib”_šfo ); 617 } } 620  $£nd_dtmf_p ( ¬gc , cÚ¡ ** ¬gv ) 622 `RETURN_IF_NULL ( if_hf_þ›Á ); 624 `EXEC ( if_hf_þ›Á -> £nd_dtmf , * ¬gv [2]); 625 } } 628  $»que¡_Ï¡_voiû_g_numb”_p ( ¬gc , cÚ¡ ** ¬gv ) 630 `RETURN_IF_NULL ( if_hf_þ›Á ); 632 `EXEC ( if_hf_þ›Á -> »que¡_Ï¡_voiû_g_numb” ); 633 } } 636  $þ—nup_p ( ¬gc , cÚ¡ ** ¬gv ) 638 `RETURN_IF_NULL ( if_hf_þ›Á ); 640 `EXECV ( if_hf_þ›Á -> þ—nup ); 641 if_hf_þ›Á = NULL ; 642 } } 644  m‘hod gm‘hods [] = { 645 STD_METHOD ( š™ ), 646 STD_METHODCH ( cÚÃù , ""), 647 STD_METHODCH ( discÚÃù , ""), 648 STD_METHODCH ( cÚÃù_audio , ""), 649 STD_METHODCH ( discÚÃù_audio , ""), 650 STD_METHOD ( ¡¬t_voiû_»cogn™iÚ ), 651 STD_METHOD ( ¡Ý_voiû_»cogn™iÚ ), 652 STD_METHODCH ( vÞume_cÚŒÞ , " "), 653 STD_METHODH ( dŸl , ""), 654 STD_METHODH ( dŸl_memÜy , ""), 655 STD_METHODCH ( hªdË_ÿÎ_aùiÚ , " "), 656 STD_METHOD ( qu”y_cu¼’t_ÿÎs ), 657 STD_METHOD ( qu”y_cu¼’t_Ý”©Ü_Çme ), 658 STD_METHOD ( »Œ›ve_subsüib”_šfo ), 659 STD_METHODH ( £nd_dtmf , ""), 660 STD_METHOD ( »que¡_Ï¡_voiû_g_numb” ), 661 STD_METHOD ( þ—nup ), 662 END_METHOD 665 cÚ¡  š‹rçû ghf_þ›Á_if = { 666 . Çme = "handsfree_client", 667 . gm‘hods = m‘hods @android/client/if-hf.c 18  ~"if-maš.h " 19  ~"../h®-utžs.h " 21 cÚ¡ bthf_š‹rçû_t * gif_hf = NULL ; 23 SINTMAP ( bthf_©_»¥Ú£_t , -1, "(unknown)") 24 DELEMENT ( BTHF_AT_RESPONSE_ERROR ), 25 DELEMENT ( BTHF_AT_RESPONSE_OK ), 26 ENDMAP 28 SINTMAP ( bthf_cÚÃùiÚ_¡©e_t , -1, "(unknown)") 29 DELEMENT ( BTHF_CONNECTION_STATE_DISCONNECTED ), 30 DELEMENT ( BTHF_CONNECTION_STATE_CONNECTING ), 31 DELEMENT ( BTHF_CONNECTION_STATE_CONNECTED ), 32 DELEMENT ( BTHF_CONNECTION_STATE_SLC_CONNECTED ), 33 DELEMENT ( BTHF_CONNECTION_STATE_DISCONNECTING ), 34 ENDMAP 36 SINTMAP ( bthf_audio_¡©e_t , -1, "(unknown)") 37 DELEMENT ( BTHF_AUDIO_STATE_DISCONNECTED ), 38 DELEMENT ( BTHF_AUDIO_STATE_CONNECTING ), 39 DELEMENT ( BTHF_AUDIO_STATE_CONNECTED ), 40 DELEMENT ( BTHF_AUDIO_STATE_DISCONNECTING ), 41 ENDMAP 43 SINTMAP ( bthf_vr_¡©e_t , -1, "(unknown)") 44 DELEMENT ( BTHF_VR_STATE_STOPPED ), 45 DELEMENT ( BTHF_VR_STATE_STARTED ), 46 ENDMAP 48 SINTMAP ( bthf_vÞume_ty³_t , -1, "(unknown)") 49 DELEMENT ( BTHF_VOLUME_TYPE_SPK ), 50 DELEMENT ( BTHF_VOLUME_TYPE_MIC ), 51 ENDMAP 53 SINTMAP ( bthf_Äec_t , -1, "(unknown)") 54 DELEMENT ( BTHF_NREC_STOP ), 55 DELEMENT ( BTHF_NREC_START ), 56 ENDMAP 58 SINTMAP ( bthf_chld_ty³_t , -1, "(unknown)") 59 DELEMENT ( BTHF_CHLD_TYPE_RELEASEHELD ), 60 DELEMENT ( BTHF_CHLD_TYPE_RELEASEACTIVE_ACCEPTHELD ), 61 DELEMENT ( BTHF_CHLD_TYPE_HOLDACTIVE_ACCEPTHELD ), 62 DELEMENT ( BTHF_CHLD_TYPE_ADDHELDTOCONF ), 63 ENDMAP 66 SINTMAP ( bthf_ÃtwÜk_¡©e_t , -1, "(unknown)") 67 DELEMENT ( BTHF_NETWORK_STATE_NOT_AVAILABLE ), 68 DELEMENT ( BTHF_NETWORK_STATE_AVAILABLE ), 69 ENDMAP 72 SINTMAP ( bthf_£rviû_ty³_t , -1, "(unknown)") 73 DELEMENT ( BTHF_SERVICE_TYPE_HOME ), 74 DELEMENT ( BTHF_SERVICE_TYPE_ROAMING ), 75 ENDMAP 77 SINTMAP ( bthf_ÿÎ_¡©e_t , -1, "(unknown)") 78 DELEMENT ( BTHF_CALL_STATE_ACTIVE ), 79 DELEMENT ( BTHF_CALL_STATE_HELD ), 80 DELEMENT ( BTHF_CALL_STATE_DIALING ), 81 DELEMENT ( BTHF_CALL_STATE_ALERTING ), 82 DELEMENT ( BTHF_CALL_STATE_INCOMING ), 83 DELEMENT ( BTHF_CALL_STATE_WAITING ), 84 DELEMENT ( BTHF_CALL_STATE_IDLE ), 85 ENDMAP 87 SINTMAP ( bthf_ÿÎ_dœeùiÚ_t , -1, "(unknown)") 88 DELEMENT ( BTHF_CALL_DIRECTION_OUTGOING ), 89 DELEMENT ( BTHF_CALL_DIRECTION_INCOMING ), 90 ENDMAP 92 SINTMAP ( bthf_ÿÎ_mode_t , -1, "(unknown)") 93 DELEMENT ( BTHF_CALL_TYPE_VOICE ), 94 DELEMENT ( BTHF_CALL_TYPE_DATA ), 95 DELEMENT ( BTHF_CALL_TYPE_FAX ), 96 ENDMAP 98 SINTMAP ( bthf_ÿÎ_m±y_ty³_t , -1, "(unknown)") 99 DELEMENT ( BTHF_CALL_MPTY_TYPE_SINGLE ), 100 DELEMENT ( BTHF_CALL_MPTY_TYPE_MULTI ), 101 ENDMAP 103 SINTMAP ( bthf_ÿÎ_add¹y³_t , -1, "(unknown)") 104 DELEMENT ( BTHF_CALL_ADDRTYPE_UNKNOWN ), 105 DELEMENT ( BTHF_CALL_ADDRTYPE_INTERNATIONAL ), 106 gENDMAP 108 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 109 SINTMAP ( bthf_wbs_cÚfig_t , -1, "(unknown)") 110 DELEMENT ( BTHF_WBS_NONE ), 111 DELEMENT ( BTHF_WBS_NO ), 112 DELEMENT ( BTHF_WBS_YES ), 113 gENDMAP 118  gÏ¡_addr [ MAX_ADDR_STR_LEN ]; 124  $cÚÃùiÚ_¡©e_cb ( bthf_cÚÃùiÚ_¡©e_t ¡©e , 125 bt_bdaddr_t * bd_addr ) 127 `h®‹¡_šfo ("%s: s‹=% bd_addr=%s\n", __func__ , 128 `bthf_cÚÃùiÚ_¡©e_t2¡r ( ¡©e ), 129 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 130 } } 136  $audio_¡©e_cb ( bthf_audio_¡©e_t ¡©e , bt_bdaddr_t * bd_addr ) 138 `h®‹¡_šfo ("%s: s‹=% bd_addr=%s\n", __func__ , 139 `bthf_audio_¡©e_t2¡r ( ¡©e ), 140 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 141 } } 147 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 148  $vr_cmd_cb ( bthf_vr_¡©e_t ¡©e , bt_bdaddr_t * bd_addr ) 150 `h®‹¡_šfo ("%s: s‹=% bd_addr=%s\n", __func__ , 151 `bthf_vr_¡©e_t2¡r ( ¡©e ), 152 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 153 } } 155  $vr_cmd_cb ( bthf_vr_¡©e_t ¡©e ) 157 `h®‹¡_šfo ("%s: s‹=%s\n", __func__ , `bthf_vr_¡©e_t2¡r ( ¡©e )); 158 } } 162 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 163  $ªsw”_ÿÎ_cmd_cb ( bt_bdaddr_t * bd_addr ) 165 `h®‹¡_šfo ("%s: bd_addr=%s\n", __func__ , 166 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 167 } } 169  $ªsw”_ÿÎ_cmd_cb () 171 `h®‹¡_šfo ("%s\n", __func__ ); 172 } } 176 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 177  $hªgup_ÿÎ_cmd_cb ( bt_bdaddr_t * bd_addr ) 179 `h®‹¡_šfo ("%s: bd_addr=%s\n", __func__ , 180 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 181 } } 183  $hªgup_ÿÎ_cmd_cb () 185 `h®‹¡_šfo ("%s\n", __func__ ); 186 } } 193 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 194  $vÞume_cmd_cb ( bthf_vÞume_ty³_t ty³ ,  vÞume , 195 bt_bdaddr_t * bd_addr ) 197 `h®‹¡_šfo ("%s:y³=% vÞume=%d bd_addr=%s\n", __func__ , 198 `bthf_vÞume_ty³_t2¡r ( ty³ ), vÞume , 199 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 200 } } 202  $vÞume_cmd_cb ( bthf_vÞume_ty³_t ty³ ,  vÞume ) 204 `h®‹¡_šfo ("%s:y³=% vÞume=%d\n", __func__ , 205 `bthf_vÞume_ty³_t2¡r ( ty³ ), vÞume ); 206 } } 213 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 214  $dŸl_ÿÎ_cmd_cb (* numb” , bt_bdaddr_t * bd_addr ) 216 `h®‹¡_šfo ("%s:‚umb”=% bd_addr=%s\n", __func__ , numb” , 217 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 218 } } 220  $dŸl_ÿÎ_cmd_cb (* numb” ) 222 `h®‹¡_šfo ("%s:‚umb”=%s\n", __func__ , numb” ); 223 } } 230 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 231  $dtmf_cmd_cb ( tÚe , bt_bdaddr_t * bd_addr ) 233 `h®‹¡_šfo ("%s:Úe=%d bd_addr=%s\n", __func__ , tÚe , 234 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 235 } } 237  $dtmf_cmd_cb ( tÚe ) 239 `h®‹¡_šfo ("%s:Úe=%d\n", __func__ , tÚe ); 240 } } 247 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 248  $Äec_cmd_cb ( bthf_Äec_t Äec , bt_bdaddr_t * bd_addr ) 250 `h®‹¡_šfo ("%s:‚»c=% bd_addr=%s\n", __func__ , 251 `bthf_Äec_t2¡r ( Äec ), 252 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 253 } } 255  $Äec_cmd_cb ( bthf_Äec_t Äec ) 257 `h®‹¡_šfo ("%s:‚»c=%s\n", __func__ , `bthf_Äec_t2¡r ( Äec )); 258 } } 265 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 266  $chld_cmd_cb ( bthf_chld_ty³_t chld , bt_bdaddr_t * bd_addr ) 268 `h®‹¡_šfo ("%s: chld=% bd_addr=%s\n", __func__ , 269 `bthf_chld_ty³_t2¡r ( chld ), 270 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 271 } } 273  $chld_cmd_cb ( bthf_chld_ty³_t chld ) 275 `h®‹¡_šfo ("%s: chld=%s\n", __func__ , `bthf_chld_ty³_t2¡r ( chld )); 276 } } 280 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 281  $úum_cmd_cb ( bt_bdaddr_t * bd_addr ) 283 `h®‹¡_šfo ("%s: bd_addr=%s\n", __func__ , 284 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 285 } } 287  $úum_cmd_cb () 289 `h®‹¡_šfo ("%s\n", __func__ ); 290 } } 294 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 295  $cšd_cmd_cb ( bt_bdaddr_t * bd_addr ) 297 `h®‹¡_šfo ("%s: bd_addr=%s\n", __func__ , 298 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 299 } } 301  $cšd_cmd_cb () 303 `h®‹¡_šfo ("%s\n", __func__ ); 304 } } 308 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 309  $cÝs_cmd_cb ( bt_bdaddr_t * bd_addr ) 311 `h®‹¡_šfo ("%s: bd_addr=%s\n", __func__ , 312 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 313 } } 315  $cÝs_cmd_cb () 317 `h®‹¡_šfo ("%s\n", __func__ ); 318 } } 322 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 323  $þcc_cmd_cb ( bt_bdaddr_t * bd_addr ) 325 `h®‹¡_šfo ("%s: bd_addr=%s\n", __func__ , 326 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 327 } } 329  $þcc_cmd_cb () 331 `h®‹¡_šfo ("%s\n", __func__ ); 332 } } 339 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 340  $unknown_©_cmd_cb (* ©_¡ršg , bt_bdaddr_t * bd_addr ) 342 `h®‹¡_šfo ("%s:‡t_¡ršg=% bd_addr=%s\n", __func__ , ©_¡ršg , 343 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 344 } } 346  $unknown_©_cmd_cb (* ©_¡ršg ) 348 `h®‹¡_šfo ("%s:‡t_¡ršg=%s\n", __func__ , ©_¡ršg ); 349 } } 353 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 354  $key_´es£d_cmd_cb ( bt_bdaddr_t * bd_addr ) 356 `h®‹¡_šfo ("%s: bd_addr=%s\n", __func__ , 357 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 358 } } 360  $key_´es£d_cmd_cb () 362 `h®‹¡_šfo ("%s\n", __func__ ); 363 } } 366 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 367  $wbs_cb ( bthf_wbs_cÚfig_t wbs , bt_bdaddr_t * bd_addr ) 369 `h®‹¡_šfo ("%s: bd_addr=%s\n", __func__ , 370 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 371 } } 374  bthf_ÿÎbacks_t ghf_cbacks = { 375 . size = ( hf_cbacks ), 376 . gcÚÃùiÚ_¡©e_cb = cÚÃùiÚ_¡©e_cb , 377 . gaudio_¡©e_cb = audio_¡©e_cb , 378 . gvr_cmd_cb = vr_cmd_cb , 379 . gªsw”_ÿÎ_cmd_cb = ªsw”_ÿÎ_cmd_cb , 380 . ghªgup_ÿÎ_cmd_cb = hªgup_ÿÎ_cmd_cb , 381 . gvÞume_cmd_cb = vÞume_cmd_cb , 382 . gdŸl_ÿÎ_cmd_cb = dŸl_ÿÎ_cmd_cb , 383 . gdtmf_cmd_cb = dtmf_cmd_cb , 384 . gÄec_cmd_cb = Äec_cmd_cb , 385 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 386 . gwbs_cb = wbs_cb , 388 . gchld_cmd_cb = chld_cmd_cb , 389 . gúum_cmd_cb = úum_cmd_cb , 390 . gcšd_cmd_cb = cšd_cmd_cb , 391 . gcÝs_cmd_cb = cÝs_cmd_cb , 392 . gþcc_cmd_cb = þcc_cmd_cb , 393 . gunknown_©_cmd_cb = unknown_©_cmd_cb , 394 . gkey_´es£d_cmd_cb = key_´es£d_cmd_cb , 399  $š™_p ( ¬gc , cÚ¡ ** ¬gv ) 401 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 402  max_hf_þ›Ás ; 405 `RETURN_IF_NULL ( if_hf ); 407 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 408 ià( ¬gc <= 2) 409 max_hf_þ›Ás = 1; 411 max_hf_þ›Ás = `©oi ( ¬gv [2]); 413 `EXEC ( if_hf -> š™ , & hf_cbacks , max_hf_þ›Ás ); 415 `EXEC ( if_hf -> š™ , & hf_cbacks ); 417 } } 421  $cÚÃù_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 422 ** u£r ) 424 ià( ¬gc == 3) { 425 * u£r = NULL ; 426 * ’um_func = ’um_deviûs ; 428 } } 430  $cÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 432 bt_bdaddr_t addr ; 434 `RETURN_IF_NULL ( if_hf ); 435 `VERIFY_ADDR_ARG (2, & addr ); 437 `EXEC ( if_hf -> cÚÃù , & addr ); 438 } } 446  $cÚÃùed_addr_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 447 ** u£r ) 449 ià( ¬gc == 3) { 450 * u£r = Ï¡_addr ; 451 * ’um_func = ’um_Úe_¡ršg ; 453 } } 456  #discÚÃù_c cÚÃùed_addr_c ) 458  $discÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 460 bt_bdaddr_t addr ; 462 `RETURN_IF_NULL ( if_hf ); 463 `VERIFY_ADDR_ARG (2, & addr ); 465 `EXEC ( if_hf -> discÚÃù , & addr ); 466 } } 471  #cÚÃù_audio_c cÚÃùed_addr_c ) 473  $cÚÃù_audio_p ( ¬gc , cÚ¡ ** ¬gv ) 475 bt_bdaddr_t addr ; 477 `RETURN_IF_NULL ( if_hf ); 478 `VERIFY_ADDR_ARG (2, & addr ); 480 `EXEC ( if_hf -> cÚÃù_audio , & addr ); 481 } } 486  #discÚÃù_audio_c cÚÃùed_addr_c ) 488  $discÚÃù_audio_p ( ¬gc , cÚ¡ ** ¬gv ) 490 bt_bdaddr_t addr ; 492 `RETURN_IF_NULL ( if_hf ); 493 `VERIFY_ADDR_ARG (2, & addr ); 495 `EXEC ( if_hf -> discÚÃù_audio , & addr ); 496 } } 500  $¡¬t_voiû_»cogn™iÚ_p ( ¬gc , cÚ¡ ** ¬gv ) 502 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 503 bt_bdaddr_t addr ; 506 `RETURN_IF_NULL ( if_hf ); 508 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 509 `VERIFY_ADDR_ARG (2, & addr ); 511 `EXEC ( if_hf -> ¡¬t_voiû_»cogn™iÚ , & addr ); 513 `EXEC ( if_hf -> ¡¬t_voiû_»cogn™iÚ ); 515 } } 519  $¡Ý_voiû_»cogn™iÚ_p ( ¬gc , cÚ¡ ** ¬gv ) 521 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 522 bt_bdaddr_t addr ; 525 `RETURN_IF_NULL ( if_hf ); 527 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 528 `VERIFY_ADDR_ARG (2, & addr ); 530 `EXEC ( if_hf -> ¡Ý_voiû_»cogn™iÚ , & addr ); 532 `EXEC ( if_hf -> ¡Ý_voiû_»cogn™iÚ ); 534 } } 538  $vÞume_cÚŒÞ_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 539 ** u£r ) 541 ià( ¬gc == 3) { 542 * u£r = `TYPE_ENUM ( bthf_vÞume_ty³_t ); 543 * ’um_func = ’um_defšes ; 545 } } 547  $vÞume_cÚŒÞ_p ( ¬gc , cÚ¡ ** ¬gv ) 549 bthf_vÞume_ty³_t ty³ ; 550  vÞume ; 551 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 552 bt_bdaddr_t addr ; 555 `RETURN_IF_NULL ( if_hf ); 558 ià( ¬gc <= 2) { 559 `h®‹¡_”rÜ ("No volumeype specified\n"); 562 ty³ = `¡r2bthf_vÞume_ty³_t ( ¬gv [2]); 565 ià( ¬gc <= 3) { 566 `h®‹¡_”rÜ ("No volume specified\n"); 569 vÞume = `©oi ( ¬gv [3]); 571 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 572 `VERIFY_ADDR_ARG (4, & addr ); 574 `EXEC ( if_hf -> vÞume_cÚŒÞ , ty³ , vÞume , & addr ); 576 `EXEC ( if_hf -> vÞume_cÚŒÞ , ty³ , vÞume ); 578 } } 582  $deviû_¡©us_nÙifiÿtiÚ_c ( ¬gc , cÚ¡ ** ¬gv , 583 ’um_func *enum_func, 584 ** u£r ) 586 ià( ¬gc == 3) { 587 * u£r = `TYPE_ENUM ( bthf_ÃtwÜk_¡©e_t ); 588 * ’um_func = ’um_defšes ; 589 } ià( ¬gc == 4) { 590 * u£r = `TYPE_ENUM ( bthf_£rviû_ty³_t ); 591 * ’um_func = ’um_defšes ; 593 } } 595  $deviû_¡©us_nÙifiÿtiÚ_p ( ¬gc , cÚ¡ ** ¬gv ) 597 bthf_ÃtwÜk_¡©e_t Ák_¡©e ; 598 bthf_£rviû_ty³_t svc_ty³ ; 599  sigÇl ; 600  b©t_chg ; 602 `RETURN_IF_NULL ( if_hf ); 605 ià( ¬gc <= 2) { 606 `h®‹¡_”rÜ ("No‚etwork state specified\n"); 609 Ák_¡©e = `¡r2bthf_ÃtwÜk_¡©e_t ( ¬gv [2]); 612 ià( ¬gc <= 3) { 613 `h®‹¡_”rÜ ("No serviceype specified\n"); 616 svc_ty³ = `¡r2bthf_£rviû_ty³_t ( ¬gv [3]); 619 ià( ¬gc <= 4) { 620 `h®‹¡_”rÜ ("No signal specified\n"); 623 sigÇl = `©oi ( ¬gv [4]); 626 ià( ¬gc <= 5) { 627 `h®‹¡_”rÜ ("No batt_chg specified\n"); 630 b©t_chg = `©oi ( ¬gv [5]); 632 `EXEC ( if_hf -> deviû_¡©us_nÙifiÿtiÚ , Ák_¡©e , svc_ty³ , sigÇl , 633 b©t_chg ); 634 } } 638  $cÝs_»¥Ú£_p ( ¬gc , cÚ¡ ** ¬gv ) 640 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 641 bt_bdaddr_t addr ; 644 `RETURN_IF_NULL ( if_hf ); 647 ià( ¬gc <= 2) { 648 `h®‹¡_”rÜ ("No cops specified\n"); 652 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 653 `VERIFY_ADDR_ARG (3, & addr ); 655 `EXEC ( if_hf -> cÝs_»¥Ú£ , ¬gv [2], & addr ); 657 `EXEC ( if_hf -> cÝs_»¥Ú£ , ¬gv [2]); 659 } } 663  $cšd_»¥Ú£_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 664 ** u£r ) 666 ià( ¬gc == 6) { 667 * u£r = `TYPE_ENUM ( bthf_ÿÎ_¡©e_t ); 668 * ’um_func = ’um_defšes ; 670 } } 672  $cšd_»¥Ú£_p ( ¬gc , cÚ¡ ** ¬gv ) 674  svc ; 675  num_aùive ; 676  num_h–d ; 677 bthf_ÿÎ_¡©e_t ÿÎ_£tup_¡©e ; 678  sigÇl ; 679  rßm ; 680  b©t_chg ; 681 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 682 bt_bdaddr_t addr ; 685 `RETURN_IF_NULL ( if_hf ); 688 ià( ¬gc <= 2) { 689 `h®‹¡_”rÜ ("No service specified\n"); 692 svc = `©oi ( ¬gv [2]); 695 ià( ¬gc <= 3) { 696 `h®‹¡_”rÜ ("No‚um‡ctive specified\n"); 699 num_aùive = `©oi ( ¬gv [3]); 702 ià( ¬gc <= 4) { 703 `h®‹¡_”rÜ ("No‚um held specified\n"); 706 num_h–d = `©oi ( ¬gv [4]); 709 ià( ¬gc <= 5) { 710 `h®‹¡_”rÜ ("No call setup state specified\n"); 713 ÿÎ_£tup_¡©e = `¡r2bthf_ÿÎ_¡©e_t ( ¬gv [5]); 716 ià( ¬gc <= 6) { 717 `h®‹¡_”rÜ ("No signal specified\n"); 720 sigÇl = `©oi ( ¬gv [6]); 723 ià( ¬gc <= 7) { 724 `h®‹¡_”rÜ ("No„oam specified\n"); 727 rßm = `©oi ( ¬gv [7]); 730 ià( ¬gc <= 8) { 731 `h®‹¡_”rÜ ("No batt_chg specified\n"); 734 b©t_chg = `©oi ( ¬gv [8]); 736 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 737 `VERIFY_ADDR_ARG (9, & addr ); 739 `EXEC ( if_hf -> cšd_»¥Ú£ , svc , num_aùive , num_h–d , ÿÎ_£tup_¡©e , 740 sigÇl , rßm , b©t_chg , & addr ); 742 `EXEC ( if_hf -> cšd_»¥Ú£ , svc , num_aùive , num_h–d , ÿÎ_£tup_¡©e , 743 sigÇl , rßm , b©t_chg ); 745 } } 749  $fÜm©‹d_©_»¥Ú£_p ( ¬gc , cÚ¡ ** ¬gv ) 751 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 752 bt_bdaddr_t addr ; 755 `RETURN_IF_NULL ( if_hf ); 758 ià( ¬gc <= 2) { 759 `h®‹¡_”rÜ ("No„esponse specified\n"); 763 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 764 `VERIFY_ADDR_ARG (3, & addr ); 766 `EXEC ( if_hf -> fÜm©‹d_©_»¥Ú£ , ¬gv [2], & addr ); 768 `EXEC ( if_hf -> fÜm©‹d_©_»¥Ú£ , ¬gv [2]); 770 } } 774  $©_»¥Ú£_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 775 ** u£r ) 777 ià( ¬gc == 3) { 778 * u£r = `TYPE_ENUM ( bthf_©_»¥Ú£_t ); 779 * ’um_func = ’um_defšes ; 781 } } 783  $©_»¥Ú£_p ( ¬gc , cÚ¡ ** ¬gv ) 785 bthf_©_»¥Ú£_t »¥Ú£_code ; 786  ”rÜ_code ; 787 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 788 bt_bdaddr_t addr ; 791 `RETURN_IF_NULL ( if_hf ); 794 ià( ¬gc <= 2) { 795 `h®‹¡_”rÜ ("No„esponse specified\n"); 798 »¥Ú£_code = `¡r2bthf_©_»¥Ú£_t ( ¬gv [2]); 801 ià( ¬gc <= 3) 802 ”rÜ_code = 0; 804 ”rÜ_code = `©oi ( ¬gv [3]); 806 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 807 `VERIFY_ADDR_ARG (4, & addr ); 809 `EXEC ( if_hf -> ©_»¥Ú£ , »¥Ú£_code , ”rÜ_code , & addr ); 811 `EXEC ( if_hf -> ©_»¥Ú£ , »¥Ú£_code , ”rÜ_code ); 813 } } 817  $þcc_»¥Ú£_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 818 ** u£r ) 820 ià( ¬gc == 4) { 821 * u£r = `TYPE_ENUM ( bthf_ÿÎ_dœeùiÚ_t ); 822 * ’um_func = ’um_defšes ; 823 } ià( ¬gc == 5) { 824 * u£r = `TYPE_ENUM ( bthf_ÿÎ_¡©e_t ); 825 * ’um_func = ’um_defšes ; 826 } ià( ¬gc == 6) { 827 * u£r = `TYPE_ENUM ( bthf_ÿÎ_mode_t ); 828 * ’um_func = ’um_defšes ; 829 } ià( ¬gc == 7) { 830 * u£r = `TYPE_ENUM ( bthf_ÿÎ_m±y_ty³_t ); 831 * ’um_func = ’um_defšes ; 832 } ià( ¬gc == 9) { 833 * u£r = `TYPE_ENUM ( bthf_ÿÎ_add¹y³_t ); 834 * ’um_func = ’um_defšes ; 836 } } 838  $þcc_»¥Ú£_p ( ¬gc , cÚ¡ ** ¬gv ) 840  šdex ; 841 bthf_ÿÎ_dœeùiÚ_t dœ ; 842 bthf_ÿÎ_¡©e_t ¡©e ; 843 bthf_ÿÎ_mode_t mode ; 844 bthf_ÿÎ_m±y_ty³_t m±y ; 845 cÚ¡ * numb” ; 846 bthf_ÿÎ_add¹y³_t ty³ ; 847 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 848 bt_bdaddr_t addr ; 851 `RETURN_IF_NULL ( if_hf ); 854 ià( ¬gc <= 2) { 855 `h®‹¡_”rÜ ("No index specified\n"); 858 šdex = `©oi ( ¬gv [2]); 861 ià( ¬gc <= 3) { 862 `h®‹¡_”rÜ ("No direction specified\n"); 865 dœ = `¡r2bthf_ÿÎ_dœeùiÚ_t ( ¬gv [3]); 868 ià( ¬gc <= 4) { 869 `h®‹¡_”rÜ ("No call state specified\n"); 872 ¡©e = `¡r2bthf_ÿÎ_¡©e_t ( ¬gv [4]); 875 ià( ¬gc <= 5) { 876 `h®‹¡_”rÜ ("No mode specified\n"); 879 mode = `¡r2bthf_ÿÎ_mode_t ( ¬gv [5]); 882 ià( ¬gc <= 6) { 883 `h®‹¡_”rÜ ("No mptyype specified\n"); 886 m±y = `¡r2bthf_ÿÎ_m±y_ty³_t ( ¬gv [6]); 889 ià( ¬gc <= 7) { 890 `h®‹¡_”rÜ ("No‚umber specified\n"); 893 numb” = ¬gv [7]; 896 ià( ¬gc <= 8) { 897 `h®‹¡_”rÜ ("No‡ddressype specified\n"); 900 ty³ = `¡r2bthf_ÿÎ_add¹y³_t ( ¬gv [8]); 902 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 903 `VERIFY_ADDR_ARG (9, & addr ); 905 `EXEC ( if_hf -> þcc_»¥Ú£ , šdex , dœ , ¡©e , mode , m±y , numb” , 906 ty³ , & addr ); 908 `EXEC ( if_hf -> þcc_»¥Ú£ , šdex , dœ , ¡©e , mode , m±y , numb” , 909 ty³ ); 911 } } 913 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 914  $cÚfigu»_wbs_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 915 ** u£r ) 917 ià( ¬gc == 4) { 918 * u£r = `TYPE_ENUM ( bthf_wbs_cÚfig_t ); 919 * ’um_func = ’um_defšes ; 921 } } 923  $cÚfigu»_wbs_p ( ¬gc , cÚ¡ ** ¬gv ) 925 bthf_wbs_cÚfig_t wbs ; 926 bt_bdaddr_t addr ; 928 `RETURN_IF_NULL ( if_hf ); 930 ià( ¬gc <= 3) { 931 `h®‹¡_”rÜ ("Too few…arameters specified\n"); 935 `VERIFY_ADDR_ARG (2, & addr ); 936 wbs = `¡r2bthf_wbs_cÚfig_t ( ¬gv [3]); 938 `EXEC ( if_hf -> cÚfigu»_wbs , & addr , wbs ); 939 } } 944  $phÚe_¡©e_chªge_c ( ¬gc , cÚ¡ ** ¬gv , 945 ’um_func *’um_func, ** u£r ) 947 ià( ¬gc == 5) { 948 * u£r = `TYPE_ENUM ( bthf_ÿÎ_¡©e_t ); 949 * ’um_func = ’um_defšes ; 950 } ià( ¬gc == 7) { 951 * u£r = `TYPE_ENUM ( bthf_ÿÎ_add¹y³_t ); 952 * ’um_func = ’um_defšes ; 954 } } 956  $phÚe_¡©e_chªge_p ( ¬gc , cÚ¡ ** ¬gv ) 958  num_aùive ; 959  num_h–d ; 960 bthf_ÿÎ_¡©e_t ÿÎ_£tup_¡©e ; 961 cÚ¡ * numb” ; 962 bthf_ÿÎ_add¹y³_t ty³ ; 964 `RETURN_IF_NULL ( if_hf ); 967 ià( ¬gc <= 2) { 968 `h®‹¡_”rÜ ("No‚um_active specified\n"); 971 num_aùive = `©oi ( ¬gv [2]); 974 ià( ¬gc <= 3) { 975 `h®‹¡_”rÜ ("No‚um_held specified\n"); 978 num_h–d = `©oi ( ¬gv [3]); 981 ià( ¬gc <= 4) { 982 `h®‹¡_”rÜ ("No call setup state specified\n"); 985 ÿÎ_£tup_¡©e = `¡r2bthf_ÿÎ_¡©e_t ( ¬gv [4]); 988 ià( ¬gc <= 5) { 989 `h®‹¡_”rÜ ("No‚umber specified\n"); 992 numb” = ¬gv [5]; 995 ià( ¬gc <= 6) { 996 `h®‹¡_”rÜ ("No‡ddressype specified\n"); 999 ty³ = `¡r2bthf_ÿÎ_add¹y³_t ( ¬gv [6]); 1001 `EXEC ( if_hf -> phÚe_¡©e_chªge , num_aùive , num_h–d , ÿÎ_£tup_¡©e , 1002 numb” , ty³ ); 1003 } } 1007  $þ—nup_p ( ¬gc , cÚ¡ ** ¬gv ) 1009 `RETURN_IF_NULL ( if_hf ); 1011 `EXECV ( if_hf -> þ—nup ); 1012 if_hf = NULL ; 1013 } } 1015  m‘hod gm‘hods [] = { 1016 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 1017 STD_METHODH ( š™ , "[]"), 1018 STD_METHODH ( ¡¬t_voiû_»cogn™iÚ , ""), 1019 STD_METHODH ( ¡Ý_voiû_»cogn™iÚ , ""), 1020 STD_METHODCH ( vÞume_cÚŒÞ , " "), 1021 STD_METHODH ( cÝs_»¥Ú£ , " "), 1022 STD_METHODCH ( cšd_»¥Ú£ , 1025 STD_METHODH ( fÜm©‹d_©_»¥Ú£ , " "), 1026 STD_METHODCH ( ©_»¥Ú£ , " [ ]"), 1027 STD_METHODCH ( þcc_»¥Ú£ , 1030 STD_METHODCH ( cÚfigu»_wbs , " "), 1032 STD_METHOD ( š™ ), 1033 STD_METHOD ( ¡¬t_voiû_»cogn™iÚ ), 1034 STD_METHOD ( ¡Ý_voiû_»cogn™iÚ ), 1035 STD_METHODCH ( vÞume_cÚŒÞ , " "), 1036 STD_METHODH ( cÝs_»¥Ú£ , ""), 1037 STD_METHODCH ( cšd_»¥Ú£ , 1040 STD_METHODH ( fÜm©‹d_©_»¥Ú£ , ""), 1041 STD_METHODCH ( ©_»¥Ú£ , " []"), 1042 STD_METHODCH ( þcc_»¥Ú£ , 1046 STD_METHODCH ( cÚÃù , ""), 1047 STD_METHODCH ( discÚÃù , ""), 1048 STD_METHODCH ( cÚÃù_audio , ""), 1049 STD_METHODCH ( discÚÃù_audio , ""), 1050 STD_METHODCH ( deviû_¡©us_nÙifiÿtiÚ , 1052 STD_METHODCH ( phÚe_¡©e_chªge , 1055 STD_METHOD ( þ—nup ), 1056 END_METHOD 1059 cÚ¡  š‹rçû ghf_if = { 1060 . Çme = "handsfree", 1061 . gm‘hods = m‘hods @android/client/if-hh.c 18  ~<¡dio.h > 19  ~<ùy³.h > 20  ~<¡ršg.h > 22  ~ 23  ~ 25  ~"if-maš.h " 26  ~"pÞlhªdËr.h " 27  ~"../h®-utžs.h " 29 cÚ¡ bthh_š‹rçû_t * gif_hh = NULL ; 31 SINTMAP ( bthh_´ÙocÞ_mode_t , -1, "(unknown)") 32 DELEMENT ( BTHH_REPORT_MODE ), 33 DELEMENT ( BTHH_BOOT_MODE ), 34 DELEMENT ( BTHH_UNSUPPORTED_MODE ), 35 ENDMAP 37 SINTMAP ( bthh_»pÜt_ty³_t , -1, "(unknown)") 38 DELEMENT ( BTHH_INPUT_REPORT ), 39 DELEMENT ( BTHH_OUTPUT_REPORT ), 40 DELEMENT ( BTHH_FEATURE_REPORT ), 41 ENDMAP 43 SINTMAP ( bthh_cÚÃùiÚ_¡©e_t , -1, "(unknown)") 44 DELEMENT ( BTHH_CONN_STATE_CONNECTED ), 45 DELEMENT ( BTHH_CONN_STATE_CONNECTING ), 46 DELEMENT ( BTHH_CONN_STATE_DISCONNECTED ), 47 DELEMENT ( BTHH_CONN_STATE_DISCONNECTING ), 48 DELEMENT ( BTHH_CONN_STATE_FAILED_MOUSE_FROM_HOST ), 49 DELEMENT ( BTHH_CONN_STATE_FAILED_KBD_FROM_HOST ), 50 DELEMENT ( BTHH_CONN_STATE_FAILED_TOO_MANY_DEVICES ), 51 DELEMENT ( BTHH_CONN_STATE_FAILED_NO_BTHID_DRIVER ), 52 DELEMENT ( BTHH_CONN_STATE_FAILED_GENERIC ), 53 DELEMENT ( BTHH_CONN_STATE_UNKNOWN ), 54 ENDMAP 56 SINTMAP ( bthh_¡©us_t , -1, "(unknown)") 57 DELEMENT ( BTHH_OK ), 58 DELEMENT ( BTHH_HS_HID_NOT_READY ), 59 DELEMENT ( BTHH_HS_INVALID_RPT_ID ), 60 DELEMENT ( BTHH_HS_TRANS_NOT_SPT ), 61 DELEMENT ( BTHH_HS_INVALID_PARAM ), 62 DELEMENT ( BTHH_HS_ERROR ), 63 DELEMENT ( BTHH_ERR ), 64 DELEMENT ( BTHH_ERR_SDP ), 65 DELEMENT ( BTHH_ERR_PROTO ), 66 DELEMENT ( BTHH_ERR_DB_FULL ), 67 DELEMENT ( BTHH_ERR_TOD_UNSPT ), 68 DELEMENT ( BTHH_ERR_NO_RES ), 69 DELEMENT ( BTHH_ERR_AUTH_FAILED ), 70 DELEMENT ( BTHH_ERR_HDL ), 71 ENDMAP 73  gcÚÃùed_deviû_addr [ MAX_ADDR_STR_LEN ]; 78  $cÚÃùiÚ_¡©e_cb ( bt_bdaddr_t * bd_addr , 79 bthh_cÚÃùiÚ_¡©e_t ¡©e ) 81  addr [ MAX_ADDR_STR_LEN ]; 83 `h®‹¡_šfo ("%s: bd_addr=% cÚÃùiÚ_¡©e=%s\n", __func__ , 84 `bt_bdaddr_t2¡r ( bd_addr , addr ), 85 `bthh_cÚÃùiÚ_¡©e_t2¡r ( ¡©e )); 86 ià( ¡©e =ð BTHH_CONN_STATE_CONNECTED ) 87 `¡rýy ( cÚÃùed_deviû_addr , addr ); 88 } } 94  $vœtu®_uÅlug_cb ( bt_bdaddr_t * bd_addr , bthh_¡©us_t hh_¡©us ) 96  addr [ MAX_ADDR_STR_LEN ]; 98 `h®‹¡_šfo ("%s: bd_addr=% hh_¡©us=%s\n", __func__ , 99 `bt_bdaddr_t2¡r ( bd_addr , addr ), 100 `bthh_¡©us_t2¡r ( hh_¡©us )); 101 } } 104 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 105  $hªdshake_cb ( bt_bdaddr_t * bd_addr , bthh_¡©us_t hh_¡©us ) 107  addr [ MAX_ADDR_STR_LEN ]; 109 `h®‹¡_šfo ("%s: bd_addr=% hh_¡©us=%s\n", __func__ , 110 `bt_bdaddr_t2¡r ( bd_addr , addr ), 111 `bthh_¡©us_t2¡r ( hh_¡©us )); 112 } } 120  $hid_šfo_cb ( bt_bdaddr_t * bd_addr , bthh_hid_šfo_t hid_šfo ) 122  addr [ MAX_ADDR_STR_LEN ]; 125 `h®‹¡_šfo ("%s: bd_addr=%s\n", __func__ , 126 `bt_bdaddr_t2¡r ( bd_addr , addr )); 127 } } 133  $´ÙocÞ_mode_cb ( bt_bdaddr_t * bd_addr , bthh_¡©us_t hh_¡©us , 134 bthh_´ÙocÞ_mode_t mode ) 136  addr [ MAX_ADDR_STR_LEN ]; 138 `h®‹¡_šfo ("%s: bd_addr=% hh_¡©us=% mode=%s\n", __func__ , 139 `bt_bdaddr_t2¡r ( bd_addr , addr ), 140 `bthh_¡©us_t2¡r ( hh_¡©us ), 141 `bthh_´ÙocÞ_mode_t2¡r ( mode )); 142 } } 145  $idË_time_cb ( bt_bdaddr_t * bd_addr , bthh_¡©us_t hh_¡©us , 146  idË_¿‹ ) 148  addr [ MAX_ADDR_STR_LEN ]; 150 `h®‹¡_šfo ("%s: bd_addr=% hh_¡©us=% idË_¿‹=%d\n", __func__ , 151 `bt_bdaddr_t2¡r ( bd_addr , addr ), 152 `bthh_¡©us_t2¡r ( hh_¡©us ), idË_¿‹ ); 153 } } 160  $g‘_»pÜt_cb ( bt_bdaddr_t * bd_addr , bthh_¡©us_t hh_¡©us , 161 ušt8_t * ½t_d©a ,  ½t_size ) 163  addr [ MAX_ADDR_STR_LEN ]; 166 `h®‹¡_šfo ("%s: bd_addr=% hh_¡©us=% ½t_size=%d\n", __func__ , 167 `bt_bdaddr_t2¡r ( bd_addr , addr ), 168 `bthh_¡©us_t2¡r ( hh_¡©us ), ½t_size ); 169 } } 171  bthh_ÿÎbacks_t gbthh_ÿÎbacks = { 172 . size = ( bthh_ÿÎbacks ), 173 . gcÚÃùiÚ_¡©e_cb = cÚÃùiÚ_¡©e_cb , 174 . ghid_šfo_cb = hid_šfo_cb , 175 . g´ÙocÞ_mode_cb = ´ÙocÞ_mode_cb , 176 . gidË_time_cb = idË_time_cb , 177 . gg‘_»pÜt_cb = g‘_»pÜt_cb , 178 . gvœtu®_uÅlug_cb = vœtu®_uÅlug_cb , 179 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 180 . ghªdshake_cb = hªdshake_cb 186  $š™_p ( ¬gc , cÚ¡ ** ¬gv ) 188 `RETURN_IF_NULL ( if_hh ); 190 `EXEC ( if_hh -> š™ , & bthh_ÿÎbacks ); 191 } } 195  $cÚÃù_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 196 ** u£r ) 198 ià( ¬gc == 3) { 199 * u£r = (*è cÚÃùed_deviû_addr ; 200 * ’um_func = ’um_Úe_¡ršg ; 202 } } 204  $cÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 206 bt_bdaddr_t addr ; 208 `RETURN_IF_NULL ( if_hh ); 209 `VERIFY_ADDR_ARG (2, & addr ); 211 `EXEC ( if_hh -> cÚÃù , & addr ); 212 } } 217  #discÚÃù_c cÚÃù_c ) 219  $discÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 221 bt_bdaddr_t addr ; 223 `RETURN_IF_NULL ( if_hh ); 224 `VERIFY_ADDR_ARG (2, & addr ); 226 `EXEC ( if_hh -> discÚÃù , & addr ); 227 } } 232  #vœtu®_uÅlug_c cÚÃù_c ) 234  $vœtu®_uÅlug_p ( ¬gc , cÚ¡ ** ¬gv ) 236 bt_bdaddr_t addr ; 238 `RETURN_IF_NULL ( if_hh ); 239 `VERIFY_ADDR_ARG (2, & addr ); 241 `EXEC ( if_hh -> vœtu®_uÅlug , & addr ); 242 } } 247  #£t_šfo_c cÚÃù_c ) 249  $£t_šfo_p ( ¬gc , cÚ¡ ** ¬gv ) 251 bt_bdaddr_t addr ; 252 bthh_hid_šfo_t hid_šfo ; 254 `RETURN_IF_NULL ( if_hh ); 255 `VERIFY_ADDR_ARG (2, & addr ); 257 `mem£t (& hid_šfo , 0, (hid_info)); 263 `EXEC ( if_hh -> £t_šfo , & addr , hid_šfo ); 264 } } 268  $g‘_´ÙocÞ_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 269 ** u£r ) 271 ià( ¬gc == 3) { 272 * u£r = cÚÃùed_deviû_addr ; 273 * ’um_func = ’um_Úe_¡ršg ; 274 } ià( ¬gc == 4) { 275 * u£r = `TYPE_ENUM ( bthh_´ÙocÞ_mode_t ); 276 * ’um_func = ’um_defšes ; 278 } } 280  $g‘_´ÙocÞ_p ( ¬gc , cÚ¡ ** ¬gv ) 282 bt_bdaddr_t addr ; 283 bthh_´ÙocÞ_mode_t ´ÙocÞMode ; 285 `RETURN_IF_NULL ( if_hh ); 286 `VERIFY_ADDR_ARG (2, & addr ); 288 ià( ¬gc < 4) { 289 `h®‹¡_”rÜ ("No…rotocol mode specified\n"); 292 ´ÙocÞMode = `¡r2bthh_´ÙocÞ_mode_t ( ¬gv [3]); 294 `EXEC ( if_hh -> g‘_´ÙocÞ , & addr , ´ÙocÞMode ); 295 } } 300  #£t_´ÙocÞ_c g‘_´ÙocÞ_c ) 302  $£t_´ÙocÞ_p ( ¬gc , cÚ¡ ** ¬gv ) 304 bt_bdaddr_t addr ; 305 bthh_´ÙocÞ_mode_t ´ÙocÞMode ; 307 `RETURN_IF_NULL ( if_hh ); 308 `VERIFY_ADDR_ARG (2, & addr ); 310 ià( ¬gc < 4) { 311 `h®‹¡_”rÜ ("No…rotocol mode specified\n"); 314 ´ÙocÞMode = `¡r2bthh_´ÙocÞ_mode_t ( ¬gv [3]); 316 `EXEC ( if_hh -> £t_´ÙocÞ , & addr , ´ÙocÞMode ); 317 } } 321  $g‘_»pÜt_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 322 ** u£r ) 324 ià( ¬gc == 3) { 325 * u£r = cÚÃùed_deviû_addr ; 326 * ’um_func = ’um_Úe_¡ršg ; 327 } ià( ¬gc == 4) { 328 * u£r = `TYPE_ENUM ( bthh_»pÜt_ty³_t ); 329 * ’um_func = ’um_defšes ; 331 } } 333  $g‘_»pÜt_p ( ¬gc , cÚ¡ ** ¬gv ) 335 bt_bdaddr_t addr ; 336 bthh_»pÜt_ty³_t »pÜtTy³ ; 337 ušt8_t »pÜtId ; 338  bufãrSize ; 340 `RETURN_IF_NULL ( if_hh ); 341 `VERIFY_ADDR_ARG (2, & addr ); 343 ià( ¬gc < 4) { 344 `h®‹¡_”rÜ ("No„eportype specified\n"); 347 »pÜtTy³ = `¡r2bthh_»pÜt_ty³_t ( ¬gv [3]); 349 ià( ¬gc < 5) { 350 `h®‹¡_”rÜ ("No„eportId specified\n"); 353 »pÜtId = ( ušt8_t è `©oi ( ¬gv [4]); 355 ià( ¬gc < 6) { 356 `h®‹¡_”rÜ ("No bufferSize specified\n"); 359 bufãrSize = `©oi ( ¬gv [5]); 361 `EXEC ( if_hh -> g‘_»pÜt , & addr , »pÜtTy³ , »pÜtId , bufãrSize ); 362 } } 366  $£t_»pÜt_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 367 ** u£r ) 369 ià( ¬gc == 3) { 370 * u£r = cÚÃùed_deviû_addr ; 371 * ’um_func = ’um_Úe_¡ršg ; 372 } ià( ¬gc == 4) { 373 * u£r = `TYPE_ENUM ( bthh_»pÜt_ty³_t ); 374 * ’um_func = ’um_defšes ; 376 } } 378  $£t_»pÜt_p ( ¬gc , cÚ¡ ** ¬gv ) 380 bt_bdaddr_t addr ; 381 bthh_»pÜt_ty³_t »pÜtTy³ ; 383 `RETURN_IF_NULL ( if_hh ); 384 `VERIFY_ADDR_ARG (2, & addr ); 386 ià( ¬gc <= 3) { 387 `h®‹¡_”rÜ ("No„eportype specified\n"); 390 »pÜtTy³ = `¡r2bthh_»pÜt_ty³_t ( ¬gv [3]); 392 ià( ¬gc <= 4) { 393 `h®‹¡_”rÜ ("No„eport specified\n"); 397 `EXEC ( if_hh -> £t_»pÜt , & addr , »pÜtTy³ , (*è ¬gv [4]); 398 } } 402  $£nd_d©a_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 403 ** u£r ) 405 ià( ¬gc == 3) { 406 * u£r = cÚÃùed_deviû_addr ; 407 * ’um_func = ’um_Úe_¡ršg ; 409 } } 411  $£nd_d©a_p ( ¬gc , cÚ¡ ** ¬gv ) 413 bt_bdaddr_t addr ; 415 `RETURN_IF_NULL ( if_hh ); 416 `VERIFY_ADDR_ARG (2, & addr ); 418 ià( ¬gc <= 3) { 419 `h®‹¡_”rÜ ("No datao send specified\n"); 423 `EXEC ( if_hh -> £nd_d©a , & addr , (*è ¬gv [3]); 424 } } 428  $þ—nup_p ( ¬gc , cÚ¡ ** ¬gv ) 430 `RETURN_IF_NULL ( if_hh ); 432 `EXECV ( if_hh -> þ—nup ); 433 } } 436  m‘hod gm‘hods [] = { 437 STD_METHOD ( š™ ), 438 STD_METHODCH ( cÚÃù , ""), 439 STD_METHODCH ( discÚÃù , ""), 440 STD_METHODCH ( vœtu®_uÅlug , ""), 441 STD_METHODCH ( £t_šfo , ""), 442 STD_METHODCH ( g‘_´ÙocÞ , " "), 443 STD_METHODCH ( £t_´ÙocÞ , " "), 444 STD_METHODCH ( g‘_»pÜt , " "), 445 STD_METHODCH ( £t_»pÜt , " "), 446 STD_METHODCH ( £nd_d©a , " "), 447 STD_METHOD ( þ—nup ), 448 END_METHOD 451 cÚ¡  š‹rçû ghh_if = { 452 . Çme = "hidhost", 453 . gm‘hods = m‘hods @android/client/if-hl.c 18  ~<¡dio.h > 19  ~<ùy³.h > 20  ~ 21  ~<¡ršg.h > 23  ~ 24  ~ 26  ~"if-maš.h " 27  ~"pÞlhªdËr.h " 28  ~"../h®-utžs.h " 30 SINTMAP ( bthl_md•_rÞe_t , -1, "(unknown)") 31 DELEMENT ( BTHL_MDEP_ROLE_SOURCE ), 32 DELEMENT ( BTHL_MDEP_ROLE_SINK ), 33 ENDMAP 35 SINTMAP ( bthl_chªÃl_ty³_t , -1, "(unknown)") 36 DELEMENT ( BTHL_CHANNEL_TYPE_RELIABLE ), 37 DELEMENT ( BTHL_CHANNEL_TYPE_STREAMING ), 38 DELEMENT ( BTHL_CHANNEL_TYPE_ANY ), 39 ENDMAP 41 SINTMAP ( bthl_­p_»g_¡©e_t , -1, "(unknown)") 42 DELEMENT ( BTHL_APP_REG_STATE_REG_SUCCESS ), 43 DELEMENT ( BTHL_APP_REG_STATE_REG_FAILED ), 44 DELEMENT ( BTHL_APP_REG_STATE_DEREG_SUCCESS ), 45 DELEMENT ( BTHL_APP_REG_STATE_DEREG_FAILED ), 46 ENDMAP 48 SINTMAP ( bthl_chªÃl_¡©e_t , -1, "(unknown)") 49 DELEMENT ( BTHL_CONN_STATE_CONNECTING ), 50 DELEMENT ( BTHL_CONN_STATE_CONNECTED ), 51 DELEMENT ( BTHL_CONN_STATE_DISCONNECTING ), 52 DELEMENT ( BTHL_CONN_STATE_DISCONNECTED ), 53 DELEMENT ( BTHL_CONN_STATE_DESTROYED ), 54 gENDMAP 56  #APP_ID_SIZE 20 ) 57  #MDEP_CFG_SIZE 10 ) 58  #CHANNEL_ID_SIZE 50 ) 60  schªÃl_šfo { 61  mfd ; 64  smd•_cfg { 65 ušt8_t mrÞe ; 66  chªÃl_šfo mchªÃl [ CHANNEL_ID_SIZE ]; 70  md•_cfg mmd• [ MDEP_CFG_SIZE ]; 71 } g­p [ APP_ID_SIZE ]; 73 cÚ¡ bthl_š‹rçû_t * gif_hl = NULL ; 75  $­p_»g_¡©e_cb ( ­p_id , bthl_­p_»g_¡©e_t ¡©e ) 77 `h®‹¡_šfo ("%s:‡µ_id=%d‡µ_»g_¡©e=%s\n", __func__ , 78 ­p_id , `bthl_­p_»g_¡©e_t2¡r ( ¡©e )); 79 } } 81  $chªÃl_¡©e_cb ( ­p_id , bt_bdaddr_t * bd_addr , 82  šdex ,  chªÃl_id , 83 bthl_chªÃl_¡©e_t ¡©e ,  fd ) 85  addr [ MAX_ADDR_STR_LEN ]; 87 `h®‹¡_šfo ("%s:‡pp_id=%d bd_addr=%s mdep_cfg_index=%d\n" 88 "chªÃl_id=%d chªÃl_¡©e=% fd=%d\n", __func__ , 89 ­p_id , `bt_bdaddr_t2¡r ( bd_addr , addr ), šdex , 90 chªÃl_id , `bthl_chªÃl_¡©e_t2¡r ( ¡©e ), fd ); 92 ià( ­p_id >ð APP_ID_SIZE || šdex >ð MDEP_CFG_SIZE 93 || chªÃl_id >ð CHANNEL_ID_SIZE ) { 94 `h®‹¡_”rÜ ("exceeds maximum†imit"); 98 ià( ¡©e =ð BTHL_CONN_STATE_CONNECTED ) { 99 ­p [ ­p_id ]. md• [ šdex ]. chªÃl [ chªÃl_id ]. fd = fd; 105 ià( ­p [ ­p_id ]. md• [ šdex ]. rÞe =ð BTHL_MDEP_ROLE_SOURCE ) 106 ià( `wr™e ( fd , "0", ("0")) < 0) 107 `h®‹¡_”rÜ ("writing data on fd failed\n"); 112 ià( ¡©e =ð BTHL_CONN_STATE_DISCONNECTED || 113 ¡©e =ð BTHL_CONN_STATE_DESTROYED ) { 114 ià( ­p [ ­p_id ]. md• [ šdex ]. chªÃl [ chªÃl_id ]. fd >= 0) { 115 `þo£ ( ­p [ ­p_id ]. md• [ šdex ]. chªÃl [ chªÃl_id ]. fd ); 116 ­p [ ­p_id ]. md• [ šdex ]. chªÃl [ chªÃl_id ]. fd = -1; 119 } } 121  bthl_ÿÎbacks_t ghl_cbacks = { 122 . size = ( hl_cbacks ), 123 . g­p_»g_¡©e_cb = ­p_»g_¡©e_cb , 124 . gchªÃl_¡©e_cb = chªÃl_¡©e_cb , 129  $š™_p ( ¬gc , cÚ¡ ** ¬gv ) 131  i , j , k ; 133  i = 0; i < APP_ID_SIZE ; i++) { 134  j = 0; j < MDEP_CFG_SIZE ; j++) { 135 ­p [ i ]. md• [ j ]. rÞe = 0; 136  k = 0; k < CHANNEL_ID_SIZE ; k++) 137 ­p [ i ]. md• [ j ]. chªÃl [ k ]. fd = -1; 142 `RETURN_IF_NULL ( if_hl ); 144 `EXEC ( if_hl -> š™ , & hl_cbacks ); 145 } } 149  $»gi¡”_­¶iÿtiÚ_p ( ¬gc , cÚ¡ ** ¬gv ) 151 bthl_»g_·¿m_t »g ; 152 ušt16_t md•_¬gc_š™ , md•_¬gc_off ; 153  ­p_id = -1; 154  i ; 156 `RETURN_IF_NULL ( if_hl ); 158 ià( ¬gc <= 2) { 159 `h®‹¡_”rÜ ("No‡pp‚ame is specified\n"); 163 ià( ¬gc <= 3) { 164 `h®‹¡_”rÜ ("No…rovider is specified\n"); 168 ià( ¬gc <= 4) { 169 `h®‹¡_”rÜ ("No service‚ame is specified\n"); 173 ià( ¬gc <= 5) { 174 `h®‹¡_”rÜ ("No service description is specified\n"); 178 ià( ¬gc <= 6) { 179 `h®‹¡_”rÜ ("No‚um of mdeps is specified\n"); 183 `mem£t (& »g , 0, (reg)); 185 ià( ¬gc !ð(( `©oi ( ¬gv [6]) * 4) + 7)) { 186 `h®‹¡_”rÜ ("mdep cfg‡rgumetns‡re‚ot…roper\n"); 190 »g . ­¶iÿtiÚ_Çme = ¬gv [2]; 192 ià( `¡rcmp ("-", ¬gv [3])) 193 »g . ´ovid”_Çme = ¬gv [3]; 195 ià( `¡rcmp ("-", ¬gv [4])) 196 »g . ¤v_Çme = ¬gv [4]; 198 ià( `¡rcmp ("-", ¬gv [5])) 199 »g . ¤v_de¥ = ¬gv [5]; 201 »g . numb”_of_md•s = `©oi ( ¬gv [6]); 203 »g . md•_cfg = `m®loc Ôeg. numb”_of_md•s * ( bthl_md•_cfg_t )); 204 md•_¬gc_š™ = 7; 206  i = 0; i < »g . numb”_of_md•s ; i++) { 207 md•_¬gc_off = md•_¬gc_š™ + (4 * i ); 208 »g . md•_cfg [ i ]. md•_rÞe = 209 `¡r2bthl_md•_rÞe_t ( ¬gv [ md•_¬gc_off ]); 210 »g . md•_cfg [ i ]. d©a_ty³ = `©oi ( ¬gv [ md•_¬gc_off + 1]); 211 »g . md•_cfg [ i ]. chªÃl_ty³ = 212 `¡r2bthl_chªÃl_ty³_t ( ¬gv [ md•_¬gc_off + 2]); 214 ià(! `¡rcmp ("-", ¬gv [ md•_¬gc_off + 3])) { 215 »g . md•_cfg [ i ]. md•_desütiÚ = NULL ; 219 »g . md•_cfg [ i ]. md•_desütiÚ = ¬gv [ md•_¬gc_off + 3]; 222 `EXEC ( if_hl -> »gi¡”_­¶iÿtiÚ , & »g , & ­p_id ); 224  i = 0; i < »g . numb”_of_md•s ; i++) 225 ­p [ ­p_id ]. md• [ i ]. rÞe = »g . md•_cfg [i]. md•_rÞe ; 227 `ä“ ( »g . md•_cfg ); 228 } } 232  $uÄegi¡”_­¶iÿtiÚ_p ( ¬gc , cÚ¡ ** ¬gv ) 234 ušt32_t ­p_id ; 236 `RETURN_IF_NULL ( if_hl ); 238 ià( ¬gc <= 2) { 239 `h®‹¡_”rÜ ("No‡pp id is specified"); 243 ­p_id = ( ušt32_t è `©oi ( ¬gv [2]); 245 `EXEC ( if_hl -> uÄegi¡”_­¶iÿtiÚ , ­p_id ); 246 } } 250  $cÚÃù_chªÃl_p ( ¬gc , cÚ¡ ** ¬gv ) 252 ušt32_t ­p_id , md•_cfg_šdex ; 253  chªÃl_id = -1; 254 bt_bdaddr_t bd_addr ; 256 `RETURN_IF_NULL ( if_hl ); 258 ià( ¬gc <= 2) { 259 `h®‹¡_”rÜ ("No‡pp id is specified"); 263 `VERIFY_ADDR_ARG (3, & bd_addr ); 265 ià( ¬gc <= 4) { 266 `h®‹¡_”rÜ ("No mdep cfg index is specified"); 270 ­p_id = ( ušt32_t è `©oi ( ¬gv [2]); 271 md•_cfg_šdex = ( ušt32_t è `©oi ( ¬gv [4]); 273 `EXEC ( if_hl -> cÚÃù_chªÃl , ­p_id , & bd_addr , md•_cfg_šdex , 274 & chªÃl_id ); 275 } } 279  $de¡roy_chªÃl_p ( ¬gc , cÚ¡ ** ¬gv ) 281 ušt32_t chªÃl_id ; 283 `RETURN_IF_NULL ( if_hl ); 285 ià( ¬gc <= 2) { 286 `h®‹¡_”rÜ ("No channel id is specified"); 290 chªÃl_id = ( ušt32_t è `©oi ( ¬gv [2]); 292 `EXEC ( if_hl -> de¡roy_chªÃl , chªÃl_id ); 293 } } 297  $þo£_chªÃl_p ( ¬gc , cÚ¡ ** ¬gv ) 299 ušt32_t ­p_id ; 300 ušt8_t šdex ; 301  chªÃl_id ; 303 `RETURN_IF_NULL ( if_hl ); 305 ià( ¬gc <= 2) { 306 `h®‹¡_”rÜ ("No‡pp id is specified"); 310 ià( ¬gc <= 3) { 311 `h®‹¡_”rÜ ("No mdep_cfg_index is specified"); 315 ià( ¬gc <= 4) { 316 `h®‹¡_”rÜ ("No channel_id is specified"); 320 ­p_id = ( ušt32_t è `©oi ( ¬gv [2]); 321 ià( ­p_id >ð APP_ID_SIZE ) { 322 `h®‹¡_”rÜ ("WrÚg‡µ_id s³cif›d: %u\n", ­p_id ); 326 šdex = ( ušt8_t è `©oi ( ¬gv [3]); 327 ià( šdex >ð MDEP_CFG_SIZE ) { 328 `h®‹¡_”rÜ ("WrÚg md• cfg index: %u\n", šdex ); 332 chªÃl_id = `©oi ( ¬gv [4]); 333 ià( chªÃl_id >ð CHANNEL_ID_SIZE ) { 334 `h®‹¡_”rÜ ("WrÚg chªÃÈid: %u\n", chªÃl_id ); 338 ià( ­p [ ­p_id ]. md• [ šdex ]. chªÃl [ chªÃl_id ]. fd >= 0) { 339 `shutdown ( ­p [ ­p_id ]. md• [ šdex ]. chªÃl [ chªÃl_id ]. fd , 340 SHUT_RDWR ); 341 ­p [ ­p_id ]. md• [ šdex ]. chªÃl [ chªÃl_id ]. fd = -1; 343 } } 347  $þ—nup_p ( ¬gc , cÚ¡ ** ¬gv ) 349 `RETURN_IF_NULL ( if_hl ); 351 `EXECV ( if_hl -> þ—nup ); 352 if_hl = NULL ; 353 } } 355  m‘hod gm‘hods [] = { 356 STD_METHOD ( š™ ), 357 STD_METHODH ( »gi¡”_­¶iÿtiÚ , 362 STD_METHODH ( uÄegi¡”_­¶iÿtiÚ , ""), 363 STD_METHODH ( cÚÃù_chªÃl , " "), 364 STD_METHODH ( de¡roy_chªÃl , ""), 365 STD_METHODH ( þo£_chªÃl , " "), 366 STD_METHOD ( þ—nup ), 367 END_METHOD 370 cÚ¡  š‹rçû ghl_if = { 371 . Çme = "hl", 372 . gm‘hods = m‘hods @android/client/if-main.h 18  ~<¡dio.h > 19  ~<¡dlib.h > 20  ~<¡dboÞ.h > 21  ~ 22  ~ 23  ~<”ºo.h > 24  ~ 25  ~ 26  ~ 27  ~ 28  ~ 29  ~ 31  ~ 32  ~ 33  ~ 34  ~ 35  ~ 36  ~ 37  ~ 38  ~ 40  ~"h®.h " 42 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 43  ~ 44  ~ 47  ~ 48  ~ 49  ~ 50  ~ 51  ~ 53 audio_hw_deviû_t * if_audio ; 56 cÚ¡ bt_š‹rçû_t * if_blu‘oÙh ; 57 cÚ¡ bv_š‹rçû_t * if_av ; 58 cÚ¡ bŒc_š‹rçû_t * if_rc ; 59 cÚ¡ bthf_š‹rçû_t * if_hf ; 60 cÚ¡ bthh_š‹rçû_t * if_hh ; 61 cÚ¡ bª_š‹rçû_t * if_·n ; 62 cÚ¡ bthl_š‹rçû_t * if_hl ; 63 cÚ¡ btsock_š‹rçû_t * if_sock ; 64 cÚ¡ btg©t_š‹rçû_t * if_g©t ; 65 cÚ¡ btg©t_£rv”_š‹rçû_t * if_g©t_£rv” ; 66 cÚ¡ btg©t_þ›Á_š‹rçû_t * if_g©t_þ›Á ; 67 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 68 cÚ¡ bŒc_ù¾_š‹rçû_t * if_rc_ù¾ ; 69 cÚ¡ bthf_þ›Á_š‹rçû_t * if_hf_þ›Á ; 70 cÚ¡ btmû_š‹rçû_t * if_mû ; 71 cÚ¡ bv_š‹rçû_t * if_av_sšk ; 78  sš‹rçû { 79 cÚ¡ * mÇme ; 80  m‘hod * mm‘hods ; 83 cÚ¡  š‹rçû audio_if ; 84 cÚ¡  š‹rçû sco_if ; 85 cÚ¡  š‹rçû blu‘oÙh_if ; 86 cÚ¡  š‹rçû av_if ; 87 cÚ¡  š‹rçû rc_if ; 88 cÚ¡  š‹rçû g©t_if ; 89 cÚ¡  š‹rçû g©t_þ›Á_if ; 90 cÚ¡  š‹rçû g©t_£rv”_if ; 91 cÚ¡  š‹rçû ·n_if ; 92 cÚ¡  š‹rçû sock_if ; 93 cÚ¡  š‹rçû hf_if ; 94 cÚ¡  š‹rçû hh_if ; 95 cÚ¡  š‹rçû hl_if ; 96 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 97 cÚ¡  š‹rçû ù¾_rc_if ; 98 cÚ¡  š‹rçû hf_þ›Á_if ; 99 cÚ¡  š‹rçû mû_if ; 100 cÚ¡  š‹rçû av_sšk_if ; 104 cÚ¡  š‹rçû * š‹rçûs []; 106  #METHOD ( Çme , func , comp , h–p è{Çme, func, comp, h–p} ) 107  #STD_METHOD ( m è{#m, m## _p , NULL , NULL} ) 108  #STD_METHODC ( m è{#m, m## _p , m## _c , NULL } ) 109  #STD_METHODH ( m , h è{#m, m## _p , NULL , h} ) 110  #STD_METHODCH ( m , h è{#m, m## _p , m## _c , h} ) 111  #END_METHOD {"", NULL , NULL, NULL} ) 119 (* t·r£_ªd_ÿÎ )( t¬gc , cÚ¡ ** t¬gv ); 128 cÚ¡ *(* t’um_func )(* tu£r ,  ti ); 135 (* tb_com¶‘e )( t¬gc , cÚ¡ ** t¬gv , t’um_func *enum_func, 136 ** tu£r ); 142  sm‘hod { 143 cÚ¡ * Çme ; 144 ·r£_ªd_ÿÎ func ; 145 b_com¶‘e com¶‘e ; 146 cÚ¡ * h–p ; 149  $h®‹¡_”rÜ (cÚ¡ * fÜm© , ...) 150 `__©Œibu‹__ (( `fÜm© ( ´štf , 1, 2))); 151  $h®‹¡_šfo (cÚ¡ * fÜm© , ...) `__©Œibu‹__ (( `fÜm© ( ´štf , 1, 2))); 152  $h®‹¡_w¬n (cÚ¡ * fÜm© , ...) `__©Œibu‹__ (( `fÜm© ( ´štf , 1, 2))); 155 cÚ¡ * `’um_deviûs (* v ,  i ); 156 cÚ¡ * `š‹rçû_Çme (* v ,  i ); 157 cÚ¡ * `commªd_Çme (* v ,  i ); 158  `add_»mÙe_deviû (cÚ¡ bt_bdaddr_t * addr ); 159 boÞ `þo£_hw_bt_dev (); 161 cÚ¡  š‹rçû * `g‘_š‹rçû (cÚ¡ * Çme ); 162  m‘hod * `g‘_m‘hod (m‘hod * m‘hods , cÚ¡ * Çme ); 163  m‘hod * `g‘_commªd (cÚ¡ * Çme ); 164 cÚ¡  m‘hod * `g‘_š‹rçû_m‘hod (cÚ¡ * šame , 165 cÚ¡ * mÇme ); 167  #NELEM ( x è((è((xè/ ((x)[0]))) ) 170  #EXEC ( f , ...) \ 172 ià( f ) { \ 173  ”r = `f ( __VA_ARGS__ ); \ 174 `h®‹¡_šfo ("%s: %s\n", #f, `bt_¡©us_t2¡r ( ”r )); \ 176 `h®‹¡_šfo ("%s is NULL\n", #f); \ 178 } ) } 181  #EXECV ( f , ...) \ 183 (è `f ( __VA_ARGS__ ); \ 184 `h®‹¡_šfo ("%s: void\n", #f); \ 185 } ) 187  #RETURN_IF_NULL ( x ) \ 188 dØ{ ià(! x è{ `h®‹¡_”rÜ ("% i NULL\n", #x); ; } } 0) ) 190  #VERIFY_ADDR_ARG ( n , adr ) \ 192 ià( n < ¬gc ) {\ 193 `¡r2bt_bdaddr_t ( ¬gv [ n ], adr ); \ 195 `h®‹¡_”rÜ ("No‡ddress specified\n");\ 198 } 0) ) @android/client/if-mce.c 18  ~"if-maš.h " 19  ~"../h®-utžs.h " 21 cÚ¡ btmû_š‹rçû_t * gif_mû = NULL ; 26  $btmû_»mÙe_mas_š¡ªûs_cb ( bt_¡©us_t ¡©us , 27 bt_bdaddr_t * bd_addr , 28  num_š¡ªûs , 29 btmû_mas_š¡ªû_t * š¡ªûs ) 31  i ; 33 `h®‹¡_šfo ("%s: stus=% bd_addr=% num_š¡ªû=%d\n", __func__ , 34 `bt_¡©us_t2¡r ( ¡©us ), `bdaddr2¡r ( bd_addr ), 35 num_š¡ªûs ); 37  i = 0; i < num_š¡ªûs ; i++) 38 `h®‹¡_šfo ("id=%d scn=%d msg_types=%d‚ame=%s\n", 39 š¡ªûs [ i ]. id , in¡ªûs[i]. sú , 40 š¡ªûs [ i ]. msg_ty³s , in¡ªûs[i]. p_Çme ); 41 } } 43  btmû_ÿÎbacks_t gmû_cbacks = { 44 . size = ( mû_cbacks ), 45 . g»mÙe_mas_š¡ªûs_cb = btmû_»mÙe_mas_š¡ªûs_cb , 50  $š™_p ( ¬gc , cÚ¡ ** ¬gv ) 52 `RETURN_IF_NULL ( if_mû ); 54 `EXEC ( if_mû -> š™ , & mû_cbacks ); 55 } } 57  $g‘_»mÙe_mas_š¡ªûs_c ( ¬gc , cÚ¡ ** ¬gv , 58 ’um_func *’um_func, ** u£r ) 60 ià( ¬gc == 3) { 61 * u£r = NULL ; 62 * ’um_func = ’um_deviûs ; 64 } } 68  $g‘_»mÙe_mas_š¡ªûs_p ( ¬gc , cÚ¡ ** ¬gv ) 70 bt_bdaddr_t addr ; 72 `RETURN_IF_NULL ( if_mû ); 73 `VERIFY_ADDR_ARG (2, & addr ); 75 `EXEC ( if_mû -> g‘_»mÙe_mas_š¡ªûs , & addr ); 76 } } 78  m‘hod gm‘hods [] = { 79 STD_METHOD ( š™ ), 80 STD_METHODCH ( g‘_»mÙe_mas_š¡ªûs , ""), 81 END_METHOD 84 cÚ¡  š‹rçû gmû_if = { 85 . Çme = "mce", 86 . gm‘hods = m‘hods @android/client/if-pan.c 18  ~"if-maš.h " 19  ~"../h®-utžs.h " 21 cÚ¡ bª_š‹rçû_t * gif_·n = NULL ; 23  tbª_rÞe_t ; 25 SINTMAP ( bª_rÞe_t , -1, "(unknown)") 26 DELEMENT ( BTPAN_ROLE_NONE ), 27 DELEMENT ( BTPAN_ROLE_PANNAP ), 28 DELEMENT ( BTPAN_ROLE_PANU ), 29 ENDMAP 31 SINTMAP ( bª_cÚÃùiÚ_¡©e_t , -1, "(unknown)") 32 DELEMENT ( BTPAN_STATE_CONNECTED ), 33 DELEMENT ( BTPAN_STATE_CONNECTING ), 34 DELEMENT ( BTPAN_STATE_DISCONNECTED ), 35 DELEMENT ( BTPAN_STATE_DISCONNECTING ), 36 ENDMAP 38 SINTMAP ( bª_cÚŒÞ_¡©e_t , -1, "(unknown)") 39 DELEMENT ( BTPAN_STATE_ENABLED ), 40 DELEMENT ( BTPAN_STATE_DISABLED ), 41 gENDMAP 43 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 44  $cÚŒÞ_¡©e_cb ( bª_cÚŒÞ_¡©e_t ¡©e ,  loÿl_rÞe , 45 bt_¡©us_t ”rÜ , cÚ¡ * iâame ) 47  $cÚŒÞ_¡©e_cb ( bª_cÚŒÞ_¡©e_t ¡©e , bt_¡©us_t ”rÜ , 48  loÿl_rÞe , cÚ¡ * iâame ) 51 `h®‹¡_šfo ("%s: state=%sƒrror=%s†ocal_role=%s ifname=%s\n", 52 __func__ , `bª_cÚŒÞ_¡©e_t2¡r ( ¡©e ), 53 `bt_¡©us_t2¡r ( ”rÜ ), `bª_rÞe_t2¡r ( loÿl_rÞe ), 54 iâame ); 55 } } 57  gÏ¡_u£d_addr [ MAX_ADDR_STR_LEN ]; 59  $cÚÃùiÚ_¡©e_cb ( bª_cÚÃùiÚ_¡©e_t ¡©e , 60 bt_¡©us_t ”rÜ , cÚ¡ bt_bdaddr_t * bd_addr , 61  loÿl_rÞe ,  »mÙe_rÞe ) 63 `h®‹¡_šfo ("%s: state=%sƒrror=%s bd_addr=%s†ocal_role=%s„emote_role=%s\n", 64 __func__ , `bª_cÚÃùiÚ_¡©e_t2¡r ( ¡©e ), 65 `bt_¡©us_t2¡r ( ”rÜ ), 66 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_u£d_addr ), 67 `bª_rÞe_t2¡r ( loÿl_rÞe ), 68 `bª_rÞe_t2¡r ( »mÙe_rÞe )); 69 } } 71  bª_ÿÎbacks_t g·n_cbacks = { 72 . size = ( ·n_cbacks ), 73 . gcÚŒÞ_¡©e_cb = cÚŒÞ_¡©e_cb , 74 . gcÚÃùiÚ_¡©e_cb = cÚÃùiÚ_¡©e_cb 77  $š™_p ( ¬gc , cÚ¡ ** ¬gv ) 79 `RETURN_IF_NULL ( if_·n ); 81 `EXEC ( if_·n -> š™ , & ·n_cbacks ); 82 } } 86  $’abË_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 87 ** u£r ) 89 ià( ¬gc == 3) { 90 * u£r = `TYPE_ENUM ( bª_rÞe_t ); 91 * ’um_func = ’um_defšes ; 93 } } 95  $’abË_p ( ¬gc , cÚ¡ ** ¬gv ) 97  loÿl_rÞe ; 99 `RETURN_IF_NULL ( if_·n ); 102 ià( ¬gc < 3) { 103 `h®‹¡_”rÜ ("No†ocal mode specified\n"); 106 loÿl_rÞe = `¡r2bª_rÞe_t ( ¬gv [2]); 107 ià( loÿl_rÞe == -1) 108 loÿl_rÞe = `©oi ( ¬gv [2]); 110 `EXEC ( if_·n -> ’abË , loÿl_rÞe ); 111 } } 115  $g‘_loÿl_rÞe_p ( ¬gc , cÚ¡ ** ¬gv ) 117  loÿl_rÞe ; 119 `RETURN_IF_NULL ( if_·n ); 121 loÿl_rÞe = if_·n -> `g‘_loÿl_rÞe (); 122 `h®‹¡_šfo ("loÿl_rÞe: %s\n", `bª_rÞe_t2¡r ( loÿl_rÞe )); 123 } } 127  $cÚÃù_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 128 ** u£r ) 130 ià( ¬gc == 3) { 131 * u£r = NULL ; 132 * ’um_func = ’um_deviûs ; 133 } ià( ¬gc == 4 ||‡rgc == 5) { 134 * u£r = `TYPE_ENUM ( bª_rÞe_t ); 135 * ’um_func = ’um_defšes ; 137 } } 139  $cÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 141 bt_bdaddr_t addr ; 142  loÿl_rÞe ; 143  »mÙe_rÞe ; 145 `RETURN_IF_NULL ( if_·n ); 146 `VERIFY_ADDR_ARG (2, & addr ); 149 ià( ¬gc < 4) { 150 `h®‹¡_”rÜ ("No†ocal mode specified\n"); 153 loÿl_rÞe = `¡r2bª_rÞe_t ( ¬gv [3]); 154 ià( loÿl_rÞe == -1) 155 loÿl_rÞe = `©oi ( ¬gv [3]); 158 ià( ¬gc < 5) { 159 `h®‹¡_”rÜ ("No„emote mode specified\n"); 162 »mÙe_rÞe = `¡r2bª_rÞe_t ( ¬gv [4]); 163 ià( »mÙe_rÞe == -1) 164 »mÙe_rÞe = `©oi ( ¬gv [4]); 166 `EXEC ( if_·n -> cÚÃù , & addr , loÿl_rÞe , »mÙe_rÞe ); 167 } } 171  $discÚÃù_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 172 ** u£r ) 174 ià( ¬gc == 3) { 175 * u£r = Ï¡_u£d_addr ; 176 * ’um_func = ’um_Úe_¡ršg ; 178 } } 180  $discÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 182 bt_bdaddr_t addr ; 184 `RETURN_IF_NULL ( if_·n ); 185 `VERIFY_ADDR_ARG (2, & addr ); 187 `EXEC ( if_·n -> discÚÃù , & addr ); 188 } } 192  $þ—nup_p ( ¬gc , cÚ¡ ** ¬gv ) 194 `RETURN_IF_NULL ( if_·n ); 196 `EXECV ( if_·n -> þ—nup ); 197 if_·n = NULL ; 198 } } 200  m‘hod gm‘hods [] = { 201 STD_METHOD ( š™ ), 202 STD_METHODCH ( cÚÃù , " "), 203 STD_METHODCH ( ’abË , ""), 204 STD_METHOD ( g‘_loÿl_rÞe ), 205 STD_METHODCH ( discÚÃù , ""), 206 STD_METHOD ( þ—nup ), 207 END_METHOD 210 cÚ¡  š‹rçû g·n_if = { 211 . Çme = "pan", 212 . gm‘hods = m‘hods @android/client/if-rc-ctrl.c 18  ~<¡dio.h > 19  ~<ùy³.h > 20  ~<¡ršg.h > 22  ~ 23  ~ 25  ~"if-maš.h " 26  ~"pÞlhªdËr.h " 27  ~"../h®-utžs.h " 29 cÚ¡ bŒc_ù¾_š‹rçû_t * gif_rc_ù¾ = NULL ; 30  gÏ¡_addr [ MAX_ADDR_STR_LEN ]; 32  $·s¡hrough_r¥_cb ( id ,  key_¡©e ) 34 `h®‹¡_šfo ("%s: id=%d key_¡©e=%d\n", __func__ , id , key_¡©e ); 35 } } 37  $cÚÃùiÚ_¡©e_cb ( boÞ ¡©e , bt_bdaddr_t * bd_addr ) 39 `h®‹¡_šfo ("%s: s‹=% bd_addr=%s\n", __func__ , 40 ¡©e ? "true" : "false", 41 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr )); 42 } } 44  bŒc_ù¾_ÿÎbacks_t grc_ù¾_cbacks = { 45 . size = ( rc_ù¾_cbacks ), 46 . g·s¡hrough_r¥_cb = ·s¡hrough_r¥_cb , 47 . gcÚÃùiÚ_¡©e_cb = cÚÃùiÚ_¡©e_cb , 52  $š™_p ( ¬gc , cÚ¡ ** ¬gv ) 54 `RETURN_IF_NULL ( if_rc_ù¾ ); 56 `EXEC ( if_rc_ù¾ -> š™ , & rc_ù¾_cbacks ); 57 } } 61  $þ—nup_p ( ¬gc , cÚ¡ ** ¬gv ) 63 `RETURN_IF_NULL ( if_rc_ù¾ ); 65 `EXECV ( if_rc_ù¾ -> þ—nup ); 66 if_rc_ù¾ = NULL ; 67 } } 71  $£nd_·ss_through_cmd_c ( ¬gc , cÚ¡ ** ¬gv , 72 ’um_func *’um_func, ** u£r ) 74 } } 76  $£nd_·ss_through_cmd_p ( ¬gc , cÚ¡ ** ¬gv ) 78 bt_bdaddr_t addr ; 79 ušt8_t key_code , key_¡©e ; 81 `RETURN_IF_NULL ( if_rc ); 82 `VERIFY_ADDR_ARG (2, & addr ); 84 ià( ¬gc <= 4) { 85 `h®‹¡_”rÜ ("No key code specified"); 89 key_code = ( ušt8_t è `©oi ( ¬gv [3]); 91 ià( ¬gc <= 5) { 92 `h®‹¡_”rÜ ("No key state specified"); 96 key_¡©e = ( ušt8_t è `©oi ( ¬gv [4]); 98 `EXEC ( if_rc_ù¾ -> £nd_·ss_through_cmd , & addr , key_code , key_¡©e ); 99 } } 101  m‘hod gm‘hods [] = { 102 STD_METHOD ( š™ ), 103 STD_METHODCH ( £nd_·ss_through_cmd , 105 STD_METHOD ( þ—nup ), 106 END_METHOD 109 cÚ¡  š‹rçû gù¾_rc_if = { 110 . Çme = "rc-ctrl", 111 . gm‘hods = m‘hods @android/client/if-rc.c 18  ~<¡dio.h > 19  ~<ùy³.h > 20  ~<¡ršg.h > 22  ~ 23  ~ 25  ~"if-maš.h " 26  ~"pÞlhªdËr.h " 27  ~"../h®-utžs.h " 29 cÚ¡ bŒc_š‹rçû_t * gif_rc = NULL ; 31 SINTMAP ( bŒc_¶ay_¡©us_t , -1, "(unknown)") 32 DELEMENT ( BTRC_PLAYSTATE_STOPPED ), 33 DELEMENT ( BTRC_PLAYSTATE_PLAYING ), 34 DELEMENT ( BTRC_PLAYSTATE_PAUSED ), 35 DELEMENT ( BTRC_PLAYSTATE_FWD_SEEK ), 36 DELEMENT ( BTRC_PLAYSTATE_REV_SEEK ), 37 DELEMENT ( BTRC_PLAYSTATE_ERROR ), 38 ENDMAP 40 SINTMAP ( bŒc_medŸ_©Œ_t , -1, "(unknown)") 41 DELEMENT ( BTRC_MEDIA_ATTR_TITLE ), 42 DELEMENT ( BTRC_MEDIA_ATTR_ARTIST ), 43 DELEMENT ( BTRC_MEDIA_ATTR_ALBUM ), 44 DELEMENT ( BTRC_MEDIA_ATTR_TRACK_NUM ), 45 DELEMENT ( BTRC_MEDIA_ATTR_NUM_TRACKS ), 46 DELEMENT ( BTRC_MEDIA_ATTR_GENRE ), 47 DELEMENT ( BTRC_MEDIA_ATTR_PLAYING_TIME ), 48 ENDMAP 50 SINTMAP ( bŒc_¡©us_t , -1, "(unknown)") 51 DELEMENT ( BTRC_STS_BAD_CMD ), 52 DELEMENT ( BTRC_STS_BAD_PARAM ), 53 DELEMENT ( BTRC_STS_NOT_FOUND ), 54 DELEMENT ( BTRC_STS_INTERNAL_ERR ), 55 DELEMENT ( BTRC_STS_NO_ERROR ), 56 ENDMAP 58 SINTMAP ( bŒc_ev’t_id_t , -1, "(unknown)") 59 DELEMENT ( BTRC_EVT_PLAY_STATUS_CHANGED ), 60 DELEMENT ( BTRC_EVT_TRACK_CHANGE ), 61 DELEMENT ( BTRC_EVT_TRACK_REACHED_END ), 62 DELEMENT ( BTRC_EVT_TRACK_REACHED_START ), 63 DELEMENT ( BTRC_EVT_PLAY_POS_CHANGED ), 64 DELEMENT ( BTRC_EVT_APP_SETTINGS_CHANGED ), 65 ENDMAP 67 SINTMAP ( bŒc_nÙifiÿtiÚ_ty³_t , -1, "(unknown)") 68 DELEMENT ( BTRC_NOTIFICATION_TYPE_INTERIM ), 69 DELEMENT ( BTRC_NOTIFICATION_TYPE_CHANGED ), 70 ENDMAP 72  gÏ¡_addr [ MAX_ADDR_STR_LEN ]; 74  $»mÙe_ã©u»s_cb ( bt_bdaddr_t * bd_addr , 75 bŒc_»mÙe_ã©u»s_t ã©u»s ) 77 `h®‹¡_šfo ("%s:„emÙe_bd_addr=% ã©u»s=%u\n", __func__ , 78 `bt_bdaddr_t2¡r ( bd_addr , Ï¡_addr ), ã©u»s ); 79 } } 81  $g‘_¶ay_¡©us_cb () 83 `h®‹¡_šfo ("%s\n", __func__ ); 84 } } 86  $li¡_¶ay”_­p_©Œ_cb () 88 `h®‹¡_šfo ("%s\n", __func__ ); 89 } } 91  $li¡_¶ay”_­p_v®ues_cb ( bŒc_¶ay”_©Œ_t ©Œ_id ) 93 `h®‹¡_šfo ("%s,‡‰r_id=%d\n", __func__ , ©Œ_id ); 94 } } 96  $g‘_¶ay”_­p_v®ue_cb ( ušt8_t num_©Œ , 97 bŒc_¶ay”_©Œ_t * p_©Œs ) 99  i ; 101 `h®‹¡_šfo ("%s,‚um_©Œ=%d\n", __func__ , num_©Œ ); 103  i = 0; i < num_©Œ ; i++) 104 `h®‹¡_šfo ("©Œibu‹=%u\n", p_©Œs [ i ]); 105 } } 107  $g‘_¶ay”_­p_©Œs_‹xt_cb ( ušt8_t num_©Œ , 108 bŒc_¶ay”_©Œ_t * p_©Œs ) 110  i ; 112 `h®‹¡_šfo ("%s,‚um_©Œ=%d\n", __func__ , num_©Œ ); 114  i = 0; i < num_©Œ ; i++) 115 `h®‹¡_šfo ("©Œibu‹=%u\n", p_©Œs [ i ]); 117 } } 119  $g‘_¶ay”_­p_v®ues_‹xt_cb ( ušt8_t ©Œ_id , ušt8_ˆ num_v® , 120 ušt8_t * p_v®s ) 122 `h®‹¡_šfo ("%s,‡‰r_id=%d‚um_v®=%d v®ues=%p\n", __func__ , 123 ©Œ_id , num_v® , p_v®s ); 124 } } 126  $£t_¶ay”_­p_v®ue_cb ( bŒc_¶ay”_£‰šgs_t * p_v®s ) 128  i ; 130 `h®‹¡_šfo ("%s,‚um_©Œ=%u\n", __func__ , p_v®s -> num_©Œ ); 132  i = 0; i < p_v®s -> num_©Œ ; i++) 133 `h®‹¡_šfo ("©Œ id=%u, v®ues=%u\n", p_v®s -> ©Œ_ids [ i ], 134 p_v®s -> ©Œ_v®ues [ i ]); 135 } } 137  $g‘_–em’t_©Œ_cb ( ušt8_t num_©Œ , bŒc_medŸ_©Œ_t * ©Œs ) 139 ušt8_t i ; 141 `h®‹¡_šfo ("%s,‚um_of_©Œibu‹s=%d\n", __func__ , num_©Œ ); 143  i = 0; i < num_©Œ ; i++) 144 `h®‹¡_šfo ("©Œ id=%s\n", `bŒc_medŸ_©Œ_t2¡r ( ©Œs [ i ])); 145 } } 147  $»gi¡”_nÙifiÿtiÚ_cb ( bŒc_ev’t_id_t ev’t_id , ušt32_t ·¿m ) 149 `h®‹¡_šfo ("%s,ƒv’t=%u…¬am=%u\n", __func__ , ev’t_id , ·¿m ); 150 } } 152  $vÞume_chªge_cb ( ušt8_t vÞume , ušt8_ˆ ùy³ ) 154 `h®‹¡_šfo ("%s, vÞume=%d cty³=%d\n", __func__ , vÞume , ùy³ ); 155 } } 157  $·s¡hrough_cmd_cb ( id ,  key_¡©e ) 159 `h®‹¡_šfo ("%s, id=%d key_¡©e=%d\n", __func__ , id , key_¡©e ); 160 } } 162  bŒc_ÿÎbacks_t grc_cbacks = { 163 . size = ( rc_cbacks ), 164 . g»mÙe_ã©u»s_cb = »mÙe_ã©u»s_cb , 165 . gg‘_¶ay_¡©us_cb = g‘_¶ay_¡©us_cb , 166 . gli¡_¶ay”_­p_©Œ_cb = li¡_¶ay”_­p_©Œ_cb , 167 . gli¡_¶ay”_­p_v®ues_cb = li¡_¶ay”_­p_v®ues_cb , 168 . gg‘_¶ay”_­p_v®ue_cb = g‘_¶ay”_­p_v®ue_cb , 169 . gg‘_¶ay”_­p_©Œs_‹xt_cb = g‘_¶ay”_­p_©Œs_‹xt_cb , 170 . gg‘_¶ay”_­p_v®ues_‹xt_cb = g‘_¶ay”_­p_v®ues_‹xt_cb , 171 . g£t_¶ay”_­p_v®ue_cb = £t_¶ay”_­p_v®ue_cb , 172 . gg‘_–em’t_©Œ_cb = g‘_–em’t_©Œ_cb , 173 . g»gi¡”_nÙifiÿtiÚ_cb = »gi¡”_nÙifiÿtiÚ_cb , 174 . gvÞume_chªge_cb = vÞume_chªge_cb , 175 . g·s¡hrough_cmd_cb = ·s¡hrough_cmd_cb , 180  $š™_p ( ¬gc , cÚ¡ ** ¬gv ) 182 `RETURN_IF_NULL ( if_rc ); 184 `EXEC ( if_rc -> š™ , & rc_cbacks ); 185 } } 189  $g‘_¶ay_¡©us_r¥_c ( ¬gc , cÚ¡ ** ¬gv , 190 ’um_func *’um_func, ** u£r ) 192 ià( ¬gc == 3) { 193 * u£r = `TYPE_ENUM ( bŒc_¶ay_¡©us_t ); 194 * ’um_func = ’um_defšes ; 196 } } 198  $g‘_¶ay_¡©us_r¥_p ( ¬gc , cÚ¡ ** ¬gv ) 200 bŒc_¶ay_¡©us_t ¶ay_¡©us ; 201 ušt32_t sÚg_Ën , sÚg_pos ; 203 `RETURN_IF_NULL ( if_rc ); 205 ià( ¬gc <= 2) { 206 `h®‹¡_”rÜ ("No…lay status specified"); 210 ià( ¬gc <= 3) { 211 `h®‹¡_”rÜ ("No song†ength specified"); 215 ià( ¬gc <= 4) { 216 `h®‹¡_”rÜ ("No song…osition specified"); 220 ¶ay_¡©us = `¡r2bŒc_¶ay_¡©us_t ( ¬gv [2]); 221 sÚg_Ën = ( ušt32_t è `©oi ( ¬gv [3]); 222 sÚg_pos = ( ušt32_t è `©oi ( ¬gv [4]); 224 `EXEC ( if_rc -> g‘_¶ay_¡©us_r¥ , ¶ay_¡©us , sÚg_Ën , sÚg_pos ); 225 } } 229  $g‘_–em’t_©Œ_r¥_c ( ¬gc , cÚ¡ ** ¬gv , 230 ’um_func *’um_func, ** u£r ) 232 ià( ¬gc == 4) { 233 * u£r = `TYPE_ENUM ( bŒc_medŸ_©Œ_t ); 234 * ’um_func = ’um_defšes ; 236 } } 238  $g‘_–em’t_©Œ_r¥_p ( ¬gc , cÚ¡ ** ¬gv ) 240 ušt8_t num_©Œ ; 241 bŒc_–em’t_©Œ_v®_t ©Œs ; 243 `RETURN_IF_NULL ( if_rc ); 245 ià( ¬gc <= 2) { 246 `h®‹¡_”rÜ ("No‚umber of‡ttributes specified"); 250 ià( ¬gc <= 4) { 251 `h®‹¡_”rÜ ("No‡ttr id‡nd value specified"); 255 num_©Œ = ( ušt8_t è `©oi ( ¬gv [2]); 256 ©Œs . ©Œ_id = `¡r2bŒc_medŸ_©Œ_t ( ¬gv [3]); 257 `¡rýy ((*) ©Œs . ‹xt , ¬gv [4]); 259 `EXEC ( if_rc -> g‘_–em’t_©Œ_r¥ , num_©Œ , & ©Œs ); 260 } } 264  $£t_vÞume_c ( ¬gc , cÚ¡ ** ¬gv , 265 ’um_func *’um_func, ** u£r ) 267 } } 269  $£t_vÞume_p ( ¬gc , cÚ¡ ** ¬gv ) 271 ušt8_t vÞume ; 273 `RETURN_IF_NULL ( if_rc ); 275 ià( ¬gc <= 2) { 276 `h®‹¡_”rÜ ("No volume specified"); 280 vÞume = ( ušt8_t è `©oi ( ¬gv [2]); 282 `EXEC ( if_rc -> £t_vÞume , vÞume ); 283 } } 287  $£t_¶ay”_­p_v®ue_r¥_c ( ¬gc , cÚ¡ ** ¬gv , 288 ’um_func *’um_func, ** u£r ) 290 ià( ¬gc == 3) { 291 * u£r = `TYPE_ENUM ( bŒc_¡©us_t ); 292 * ’um_func = ’um_defšes ; 294 } } 296  $£t_¶ay”_­p_v®ue_r¥_p ( ¬gc , cÚ¡ ** ¬gv ) 298 bŒc_¡©us_t r¥_¡©us ; 300 `RETURN_IF_NULL ( if_rc ); 302 ià( ¬gc <= 2) { 303 `h®‹¡_”rÜ ("No„esponse status specified"); 307 r¥_¡©us = `¡r2bŒc_¡©us_t ( ¬gv [2]); 309 `EXEC ( if_rc -> £t_¶ay”_­p_v®ue_r¥ , r¥_¡©us ); 310 } } 314  $»gi¡”_nÙifiÿtiÚ_r¥_c ( ¬gc , cÚ¡ ** ¬gv , 315 ’um_func *’um_func, ** u£r ) 317 ià( ¬gc == 3) { 318 * u£r = `TYPE_ENUM ( bŒc_ev’t_id_t ); 319 * ’um_func = ’um_defšes ; 322 ià( ¬gc == 4) { 323 * u£r = `TYPE_ENUM ( bŒc_nÙifiÿtiÚ_ty³_t ); 324 * ’um_func = ’um_defšes ; 326 } } 328  $»gi¡”_nÙifiÿtiÚ_r¥_p ( ¬gc , cÚ¡ ** ¬gv ) 330 bŒc_ev’t_id_t ev’t_id ; 331 bŒc_nÙifiÿtiÚ_ty³_t ty³ ; 332 bŒc_»gi¡”_nÙifiÿtiÚ_t »g ; 333 ušt32_t sÚg_pos ; 334 ušt64_t Œack ; 336 `RETURN_IF_NULL ( if_rc ); 338 `mem£t (& »g , 0, (reg)); 339 ev’t_id = `¡r2bŒc_ev’t_id_t ( ¬gv [2]); 340 ty³ = `¡r2bŒc_nÙifiÿtiÚ_ty³_t ( ¬gv [3]); 342  ev’t_id ) { 343  BTRC_EVT_PLAY_STATUS_CHANGED : 344 »g . ¶ay_¡©us = `¡r2bŒc_¶ay_¡©us_t ( ¬gv [4]); 347  BTRC_EVT_TRACK_CHANGE : 348 Œack = `¡¹ouÎ ( ¬gv [5], NULL , 10); 349 `memýy ( »g . Œack , &Œack, ( bŒc_uid_t )); 352  BTRC_EVT_TRACK_REACHED_END : 353  BTRC_EVT_TRACK_REACHED_START : 356  BTRC_EVT_PLAY_POS_CHANGED : 357 sÚg_pos = `¡¹oul ( ¬gv [4], NULL , 10); 358 `memýy (& »g . sÚg_pos , &sÚg_pos, ( ušt32_t )); 361  BTRC_EVT_APP_SETTINGS_CHANGED : 362 `h®‹¡_”rÜ ("not supported"); 366 `EXEC ( if_rc -> »gi¡”_nÙifiÿtiÚ_r¥ , ev’t_id , ty³ , & »g ); 367 } } 371  $þ—nup_p ( ¬gc , cÚ¡ ** ¬gv ) 373 `RETURN_IF_NULL ( if_rc ); 375 `EXECV ( if_rc -> þ—nup ); 376 if_rc = NULL ; 377 } } 379  m‘hod gm‘hods [] = { 380 STD_METHOD ( š™ ), 381 STD_METHODCH ( g‘_¶ay_¡©us_r¥ , 383 STD_METHODCH ( g‘_–em’t_©Œ_r¥ , " "), 384 STD_METHODCH ( £t_¶ay”_­p_v®ue_r¥ , ""), 385 STD_METHODCH ( £t_vÞume , ""), 386 STD_METHODCH ( »gi¡”_nÙifiÿtiÚ_r¥ , 393 STD_METHOD ( þ—nup ), 394 END_METHOD 397 cÚ¡  š‹rçû grc_if = { 398 . Çme = "rc", 399 . gm‘hods = m‘hods @android/client/if-sco.c 18  ~<±h»ad.h > 19  ~ 20  ~ 22  ~"if-maš.h " 23  ~"../h®-utžs.h " 25 audio_hw_deviû_t * gif_audio_sco = NULL ; 26  audio_¡»am_out * g¡»am_out = NULL ; 27  audio_¡»am_š * g¡»am_š = NULL ; 29  size_t gbufãr_size = 0; 30  size_t gbufãr_size_š = 0; 31  ±h»ad_t g¶ay_th»ad = 0; 32  ±h»ad_mu‹x_t gout¡»am_mu‹x = PTHREAD_MUTEX_INITIALIZER ; 33  ±h»ad_mu‹x_t g¡©e_mu‹x = PTHREAD_MUTEX_INITIALIZER ; 35 e¡©e { 36 mSTATE_STOPPED , 37 mSTATE_STOPPING , 38 mSTATE_PLAYING , 39 mSTATE_SUSPENDED , 40 mSTATE_MAX 43 SINTMAP ( audio_chªÃl_mask_t , -1, "(AUDIO_CHANNEL_INVALID)") 44 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_LEFT ), 45 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_RIGHT ), 46 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_CENTER ), 47 DELEMENT ( AUDIO_CHANNEL_OUT_LOW_FREQUENCY ), 48 DELEMENT ( AUDIO_CHANNEL_OUT_BACK_LEFT ), 49 DELEMENT ( AUDIO_CHANNEL_OUT_BACK_RIGHT ), 50 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER ), 51 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER ), 52 DELEMENT ( AUDIO_CHANNEL_OUT_BACK_CENTER ), 53 DELEMENT ( AUDIO_CHANNEL_OUT_SIDE_LEFT ), 54 DELEMENT ( AUDIO_CHANNEL_OUT_SIDE_RIGHT ), 55 DELEMENT ( AUDIO_CHANNEL_OUT_TOP_CENTER ), 56 DELEMENT ( AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT ), 57 DELEMENT ( AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER ), 58 DELEMENT ( AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT ), 59 DELEMENT ( AUDIO_CHANNEL_OUT_TOP_BACK_LEFT ), 60 DELEMENT ( AUDIO_CHANNEL_OUT_TOP_BACK_CENTER ), 61 DELEMENT ( AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT ), 62 DELEMENT ( AUDIO_CHANNEL_OUT_MONO ), 63 DELEMENT ( AUDIO_CHANNEL_OUT_STEREO ), 64 DELEMENT ( AUDIO_CHANNEL_OUT_QUAD ), 65 #ià ANDROID_VERSION < PLATFORM_VER (5, 0, 0) 66 DELEMENT ( AUDIO_CHANNEL_OUT_SURROUND ), 68 DELEMENT ( AUDIO_CHANNEL_OUT_QUAD_BACK ), 69 DELEMENT ( AUDIO_CHANNEL_OUT_QUAD_SIDE ), 70 DELEMENT ( AUDIO_CHANNEL_OUT_5POINT1_BACK ), 71 DELEMENT ( AUDIO_CHANNEL_OUT_5POINT1_SIDE ), 73 DELEMENT ( AUDIO_CHANNEL_OUT_5POINT1 ), 74 DELEMENT ( AUDIO_CHANNEL_OUT_7POINT1 ), 75 DELEMENT ( AUDIO_CHANNEL_OUT_ALL ), 76 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_LEFT ), 77 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_LEFT ), 78 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_LEFT ), 79 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_LEFT ), 80 DELEMENT ( AUDIO_CHANNEL_OUT_FRONT_LEFT ), 81 ENDMAP 83 SINTMAP ( audio_fÜm©_t , -1, "(AUDIO_FORMAT_INVALID)") 84 DELEMENT ( AUDIO_FORMAT_DEFAULT ), 85 DELEMENT ( AUDIO_FORMAT_PCM ), 86 DELEMENT ( AUDIO_FORMAT_MP3 ), 87 DELEMENT ( AUDIO_FORMAT_AMR_NB ), 88 DELEMENT ( AUDIO_FORMAT_AMR_WB ), 89 DELEMENT ( AUDIO_FORMAT_AAC ), 90 DELEMENT ( AUDIO_FORMAT_HE_AAC_V1 ), 91 DELEMENT ( AUDIO_FORMAT_HE_AAC_V2 ), 92 DELEMENT ( AUDIO_FORMAT_VORBIS ), 93 DELEMENT ( AUDIO_FORMAT_MAIN_MASK ), 94 DELEMENT ( AUDIO_FORMAT_SUB_MASK ), 95 DELEMENT ( AUDIO_FORMAT_PCM_16_BIT ), 96 DELEMENT ( AUDIO_FORMAT_PCM_8_BIT ), 97 DELEMENT ( AUDIO_FORMAT_PCM_32_BIT ), 98 DELEMENT ( AUDIO_FORMAT_PCM_8_24_BIT ), 99 ENDMAP 101  gcu¼’t_¡©e = STATE_STOPPED ; 103  #SAMPLERATE 44100 ) 104  g§m¶e [ SAMPLERATE ]; 105  ušt16_t g§m¶e_pos ; 107  $š™_p ( ¬gc , cÚ¡ ** ¬gv ) 109  ”r ; 110 cÚ¡ hw_moduË_t * moduË ; 111 audio_hw_deviû_t * deviû ; 113 ”r = `hw_g‘_moduË_by_þass ( AUDIO_HARDWARE_MODULE_ID , "sco", & moduË ); 114 ià( ”r ) { 115 `h®‹¡_”rÜ ("hw_g‘_moduË_by_þas »tuºed %d\n", ”r ); 119 ”r = `audio_hw_deviû_Ý’ ( moduË , & deviû ); 120 ià( ”r ) { 121 `h®‹¡_”rÜ ("audio_hw_deviû_Ý’„‘uºed %d\n", ”r ); 125 if_audio_sco = deviû ; 126 } } 128  $ãed_äom_fže (* bufãr , * d©a ) 130 FILE * š = d©a ; 131  `ä—d ( bufãr , bufãr_size , 1, š ); 132 } } 134  $ãed_äom_g’”©Ü (* bufãr , * d©a ) 136 size_t i = 0; 137  vÞume = 0.5; 138 * äeq = d©a ; 139  f = 1; 141 ià( äeq ) 142 f = * äeq ; 145  i = 0; i < bufãr_size / (* bufãr ) - 1;) { 146 ià( §m¶e_pos >ð SAMPLERATE ) 147 §m¶e_pos = sam¶e_po % SAMPLERATE ; 150 bufãr [ i ++] = §m¶e [ §m¶e_pos ] * vÞume ; 151 bufãr [ i ++] = §m¶e [ §m¶e_pos ] * vÞume ; 153 §m¶e_pos +ð f ; 156  bufãr_size ; 157 } } 159  $ãed_äom_š (* bufãr , * d©a ) 161  ¡»am_š -> `»ad (¡»am_š, bufãr , bufãr_size_š ); 162 } } 164  $´•¬e_§m¶e () 166  x ; 167  s ; 169 `h®‹¡_šfo ("Preparing‡udio sample...\n"); 171  x = 0; x < SAMPLERATE ; x++) { 173 s = (2.0 * 3.14159è* (() x / SAMPLERATE ); 174 s = `sš (s); 177 §m¶e [ x ] = s * 32767; 180 §m¶e_pos = 0; 181 } } 183  $mÚo_to_¡”eo_pcm16 (cÚ¡ št16_t * š , iÁ16_ˆ* out , size_t §m¶es ) 185 size_t i ; 187  i = 0; i < §m¶es ; i++) { 188 out [2 * i ] = š [i]; 189 out [2 * i + 1] = š [i]; 191 } } 193 * $¶ayback_th»ad (* d©a ) 195 (* fžbuff_cb ) (*, *); 196  bufãr [ bufãr_size / ()]; 197  bufãr_š [ bufãr_size_š / ()]; 198 size_t Ën = 0; 199 ssize_t w_Ën = 0; 200 FILE * š = d©a ; 201 * cb_d©a = NULL ; 202  äeq = 440.0; 205 ià( š ) { 206 ià( d©a =ð ¡»am_š ) 207 fžbuff_cb = ãed_äom_š ; 209 fžbuff_cb = ãed_äom_fže ; 210 cb_d©a = š ; 213 `´•¬e_§m¶e (); 214 fžbuff_cb = ãed_äom_g’”©Ü ; 215 cb_d©a = & äeq ; 218 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 219 cu¼’t_¡©e = STATE_PLAYING ; 220 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 223 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 225 ià( cu¼’t_¡©e =ð STATE_STOPPING ) { 226 `h®‹¡_šfo ("Detected stopping\n"); 227 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 229 } ià( cu¼’t_¡©e =ð STATE_SUSPENDED ) { 230 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 231 `u¦“p (500); 235 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 237 ià( d©a && d©¨=ð ¡»am_š ) { 238  chª_š = `pÝcouÁ ( ¡»am_š -> commÚ . `g‘_chªÃls (&stream_in->common)); 239  chª_out = `pÝcouÁ ( ¡»am_out -> commÚ . `g‘_chªÃls (&stream_out->common)); 241 Ën = `fžbuff_cb ( bufãr_š , cb_d©a ); 243 ià( chª_š =ð1 && chª_out == 2) { 244 `mÚo_to_¡”eo_pcm16 ( bufãr_š , 245 bufãr , 246 bufãr_size_š / 2); 249 Ën = `fžbuff_cb ( bufãr , cb_d©a ); 251 `±h»ad_mu‹x_lock (& out¡»am_mu‹x ); 252 ià(! ¡»am_out ) { 253 `±h»ad_mu‹x_uÆock (& out¡»am_mu‹x ); 257 w_Ën = ¡»am_out -> `wr™e (¡»am_out, bufãr , bufãr_size ); 258 `±h»ad_mu‹x_uÆock (& out¡»am_mu‹x ); 259 }  Ën && w_Ën > 0); 261 ià( š && d©a !ð ¡»am_š ) 262 `fþo£ ( š ); 264 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 265 cu¼’t_¡©e = STATE_STOPPED ; 266 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 268 `h®‹¡_šfo ("Done…laying.\n"); 270  NULL ; 271 } } 273  $wr™e_¡”eo_pcm16 (cÚ¡ * šput , size_t Ën , FILE * out ) 275  §m¶e [2]; 276 size_t i ; 278  i = 0; i < Ën / 2; i++) { 279 §m¶e [0] = šput [ i ]; 280 §m¶e [1] = šput [ i ]; 282 `fwr™e ( §m¶e , (§m¶e), 1, out ); 284 } } 286 * $»ad_th»ad (* d©a ) 288 (* fžbuff_cb è(*, *èð ãed_äom_š ; 289  bufãr [ bufãr_size_š / ()]; 290 ssize_t Ën = 0; 291 * cb_d©a = NULL ; 292 FILE * out = d©a ; 294 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 295 cu¼’t_¡©e = STATE_PLAYING ; 296 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 299 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 301 ià( cu¼’t_¡©e =ð STATE_STOPPING ) { 302 `h®‹¡_šfo ("Detected stopping\n"); 303 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 305 } ià( cu¼’t_¡©e =ð STATE_SUSPENDED ) { 306 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 307 `u¦“p (500); 311 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 313 Ën = `fžbuff_cb ( bufãr , cb_d©a ); 314 ià( Ën < 0) { 315 `h®‹¡_”rÜ ("Error„eceiving SCO data"); 319 `h®‹¡_šfo ("R—d %zd by‹s\n", Ën ); 321 ià( out ) { 322 `wr™e_¡”eo_pcm16 ( bufãr , Ën , out ); 323 `h®‹¡_šfo ("Wr™‹À%zd by‹s\n", Ën * 2); 325 }  Ën ); 327 ià( out ) 328 `fþo£ ( out ); 330 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 331 cu¼’t_¡©e = STATE_STOPPED ; 332 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 334 `h®‹¡_šfo ("Done„eading.\n"); 336  NULL ; 337 } } 339  $¶ay_p ( ¬gc , cÚ¡ ** ¬gv ) 341 cÚ¡ * âame = NULL ; 342 FILE * š = NULL ; 344 `RETURN_IF_NULL ( if_audio_sco ); 345 `RETURN_IF_NULL ( ¡»am_out ); 347 ià( ¬gc < 3) { 348 `h®‹¡_”rÜ ("Invalid‡udio file…ath.\n"); 349 `h®‹¡_šfo ("Using sound generator.\n"); 351 âame = ¬gv [2]; 352 š = `fÝ’ ( âame , "r"); 354 ià( š =ð NULL ) { 355 `h®‹¡_”rÜ ("CªnÙ o³Àfže: %s\n", âame ); 358 `h®‹¡_šfo ("PÏyšg fže: %s\n", âame ); 361 ià( bufãr_size == 0) { 362 `h®‹¡_”rÜ ("Invalid buffer size. Was stream_out opened?\n"); 363  çž ; 366 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 367 ià( cu¼’t_¡©e !ð STATE_STOPPED ) { 368 `h®‹¡_”rÜ ("Already…laying or stream suspended!\n"); 369 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 370  çž ; 372 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 374 ià( `±h»ad_ü—‹ (& ¶ay_th»ad , NULL , ¶ayback_th»ad , š ) != 0) { 375 `h®‹¡_”rÜ ("Cannot create…laybackhread!\n"); 376  çž ; 380 çž : 381 ià( š ) 382 `fþo£ ( š ); 383 } } 385  $loÝ_p ( ¬gc , cÚ¡ ** ¬gv ) 387  chª_out , chª_š ; 389 `RETURN_IF_NULL ( if_audio_sco ); 390 `RETURN_IF_NULL ( ¡»am_out ); 391 `RETURN_IF_NULL ( ¡»am_š ); 393 chª_out = `pÝcouÁ ( ¡»am_out -> commÚ . `g‘_chªÃls (&stream_out->common)); 394 chª_š = `pÝcouÁ ( ¡»am_š -> commÚ . `g‘_chªÃls (&stream_in->common)); 396 ià(! bufãr_size || ! bufãr_size_š ) { 397 `h®‹¡_”rÜ ("Invalid buffer sizes. Streams opened\n"); 401 ià( bufãr_size / chª_out !ð bufãr_size_š / chª_š ) { 402 `h®‹¡_”rÜ ("read/write buffers differ,‚ot supported\n"); 406 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 407 ià( cu¼’t_¡©e !ð STATE_STOPPED ) { 408 `h®‹¡_”rÜ ("Already…laying or stream suspended!\n"); 409 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 412 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 414 ià( `±h»ad_ü—‹ (& ¶ay_th»ad , NULL , ¶ayback_th»ad , 415 ¡»am_š ) != 0) 416 `h®‹¡_”rÜ ("Cannot create…laybackhread!\n"); 417 } } 419  $»ad_p ( ¬gc , cÚ¡ ** ¬gv ) 421 cÚ¡ * âame = NULL ; 422 FILE * out = NULL ; 424 `RETURN_IF_NULL ( if_audio_sco ); 425 `RETURN_IF_NULL ( ¡»am_š ); 427 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 428 ià( cu¼’t_¡©e !ð STATE_STOPPED ) { 429 `h®‹¡_”rÜ ("Already…laying or stream suspended!\n"); 430 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 433 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 435 ià( ¬gc < 3) { 436 `h®‹¡_”rÜ ("Invalid‡udio file…ath.\n"); 437 `h®‹¡_šfo ("Using„ead‡ndhrough‡way\n"); 439 âame = ¬gv [2]; 440 out = `fÝ’ ( âame , "w"); 441 ià(! out ) { 442 `h®‹¡_”rÜ ("CªnÙ o³Àfže: %s\n", âame ); 446 `h®‹¡_šfo ("R—dšgØfže: %s\n", âame ); 449 ià(! bufãr_size_š ) { 450 `h®‹¡_”rÜ ("Invalid buffer size.\n"); 451  çžed ; 454 ià( `±h»ad_ü—‹ (& ¶ay_th»ad , NULL , »ad_th»ad , out ) != 0) { 455 `h®‹¡_”rÜ ("Cannot create…laybackhread!\n"); 456  çžed ; 460 çžed : 461 ià( out ) 462 `fþo£ ( out ); 463 } } 465  $¡Ý_p ( ¬gc , cÚ¡ ** ¬gv ) 467 `RETURN_IF_NULL ( if_audio_sco ); 468 `RETURN_IF_NULL ( ¶ay_th»ad ); 470 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 471 ià( cu¼’t_¡©e =ð STATE_STOPPED || cu¼’t_¡©=ð STATE_STOPPING ) { 472 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 476 ià( ¡»am_out ) { 477 `±h»ad_mu‹x_lock (& out¡»am_mu‹x ); 478 ¡»am_out -> commÚ . `¡ªdby (&stream_out->common); 479 `±h»ad_mu‹x_uÆock (& out¡»am_mu‹x ); 482 cu¼’t_¡©e = STATE_STOPPING ; 483 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 485 `±h»ad_još ( ¶ay_th»ad , NULL ); 486 ¶ay_th»ad = 0; 488 `h®‹¡_šfo ("Ended %s\n", __func__ ); 489 } } 491  $Ý’_ouut_¡»am_p ( ¬gc , cÚ¡ ** ¬gv ) 493  audio_cÚfig * cÚfig ; 494  ”r ; 496 `RETURN_IF_NULL ( if_audio_sco ); 498 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 499 ià( cu¼’t_¡©e =ð STATE_PLAYING ) { 500 `h®‹¡_”rÜ ("Already…laying!\n"); 501 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 504 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 506 ià( ¬gc < 3) { 507 `h®‹¡_šfo ("No sampling„ate specified. Use default conf\n"); 508 cÚfig = NULL ; 510 cÚfig = `ÿÎoc (1, ( audio_cÚfig )); 511 ià(! cÚfig ) 514 cÚfig -> §m¶e_¿‹ = `©oi ( ¬gv [2]); 515 cÚfig -> chªÃl_mask = AUDIO_CHANNEL_OUT_STEREO ; 516 cÚfig -> fÜm© = AUDIO_FORMAT_PCM_16_BIT ; 519 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 520 ”r = if_audio_sco -> `Ý’_ouut_¡»am (if_audio_sco, 522 AUDIO_DEVICE_OUT_ALL_SCO , 523 AUDIO_OUTPUT_FLAG_NONE , 524 cÚfig , 525 & ¡»am_out , NULL ); 527 ”r = if_audio_sco -> `Ý’_ouut_¡»am (if_audio_sco, 529 AUDIO_DEVICE_OUT_ALL_SCO , 530 AUDIO_OUTPUT_FLAG_NONE , 531 cÚfig , 532 & ¡»am_out ); 534 ià( ”r < 0) { 535 `h®‹¡_”rÜ ("Ý’ ouuˆ¡»am„‘uºed %d\n", ”r ); 536  çžed ; 539 bufãr_size = ¡»am_out -> commÚ . `g‘_bufãr_size (&stream_out->common); 540 ià( bufãr_size == 0) 541 `h®‹¡_”rÜ ("Invalid buffer size„eceived!\n"); 543 `h®‹¡_šfo ("Usšg bufã¸size: %zu\n", bufãr_size ); 544 çžed : 545 ià( cÚfig ) 546 `ä“ ( cÚfig ); 547 } } 549  $þo£_ouut_¡»am_p ( ¬gc , cÚ¡ ** ¬gv ) 551 `RETURN_IF_NULL ( if_audio_sco ); 552 `RETURN_IF_NULL ( ¡»am_out ); 554 ià( ¶ay_th»ad ) 555 `¡Ý_p ( ¬gc , ¬gv ); 557 if_audio_sco -> `þo£_ouut_¡»am (if_audio_sco, ¡»am_out ); 559 ¡»am_out = NULL ; 560 bufãr_size = 0; 561 } } 563  $Ý’_šput_¡»am_p ( ¬gc , cÚ¡ ** ¬gv ) 565  audio_cÚfig * cÚfig ; 566  ”r ; 568 `RETURN_IF_NULL ( if_audio_sco ); 570 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 571 ià( cu¼’t_¡©e =ð STATE_PLAYING ) { 572 `h®‹¡_”rÜ ("Already…laying!\n"); 573 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 576 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 578 ià( ¬gc < 3) { 579 `h®‹¡_šfo ("No sampling„ate specified. Use default conf\n"); 580 cÚfig = NULL ; 582 cÚfig = `ÿÎoc (1, ( audio_cÚfig )); 583 ià(! cÚfig ) 586 cÚfig -> §m¶e_¿‹ = `©oi ( ¬gv [2]); 587 cÚfig -> chªÃl_mask = AUDIO_CHANNEL_OUT_MONO ; 588 cÚfig -> fÜm© = AUDIO_FORMAT_PCM_16_BIT ; 591 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 592 ”r = if_audio_sco -> `Ý’_šput_¡»am (if_audio_sco, 594 AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET , 595 cÚfig , 596 & ¡»am_š , 0, NULL , 0); 598 ”r = if_audio_sco -> `Ý’_šput_¡»am (if_audio_sco, 600 AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET , 601 cÚfig , 602 & ¡»am_š ); 604 ià( ”r < 0) { 605 `h®‹¡_”rÜ ("Ý’ ouuˆ¡»am„‘uºed %d\n", ”r ); 606  çžed ; 609 bufãr_size_š = ¡»am_š -> commÚ . `g‘_bufãr_size (&stream_in->common); 610 ià( bufãr_size_š == 0) 611 `h®‹¡_”rÜ ("Invalid buffer size„eceived!\n"); 613 `h®‹¡_šfo ("Usšg bufã¸size: %zu\n", bufãr_size_š ); 614 çžed : 615 ià( cÚfig ) 616 `ä“ ( cÚfig ); 617 } } 619  $þo£_šput_¡»am_p ( ¬gc , cÚ¡ ** ¬gv ) 621 `RETURN_IF_NULL ( if_audio_sco ); 622 `RETURN_IF_NULL ( ¡»am_š ); 624 ià( ¶ay_th»ad ) 625 `¡Ý_p ( ¬gc , ¬gv ); 627 if_audio_sco -> `þo£_šput_¡»am (if_audio_sco, ¡»am_š ); 629 ¡»am_š = NULL ; 630 bufãr_size_š = 0; 631 } } 633  $þ—nup_p ( ¬gc , cÚ¡ ** ¬gv ) 635  ”r ; 637 `RETURN_IF_NULL ( if_audio_sco ); 639 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 640 ià( cu¼’t_¡©e !ð STATE_STOPPED ) { 641 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 642 `þo£_ouut_¡»am_p (0, NULL ); 644 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 647 ”r = `audio_hw_deviû_þo£ ( if_audio_sco ); 648 ià( ”r < 0) { 649 `h®‹¡_”rÜ ("audio_hw_deviû_þo£„‘uºed %d\n", ”r ); 653 if_audio_sco = NULL ; 654 } } 656  $su¥’d_p ( ¬gc , cÚ¡ ** ¬gv ) 658 `RETURN_IF_NULL ( if_audio_sco ); 659 `RETURN_IF_NULL ( ¡»am_out ); 661 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 662 ià( cu¼’t_¡©e !ð STATE_PLAYING ) { 663 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 666 cu¼’t_¡©e = STATE_SUSPENDED ; 667 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 669 `±h»ad_mu‹x_lock (& out¡»am_mu‹x ); 670 ¡»am_out -> commÚ . `¡ªdby (&stream_out->common); 671 `±h»ad_mu‹x_uÆock (& out¡»am_mu‹x ); 672 } } 674  $»sume_p ( ¬gc , cÚ¡ ** ¬gv ) 676 `RETURN_IF_NULL ( if_audio_sco ); 677 `RETURN_IF_NULL ( ¡»am_out ); 679 `±h»ad_mu‹x_lock (& ¡©e_mu‹x ); 680 ià( cu¼’t_¡©e =ð STATE_SUSPENDED ) 681 cu¼’t_¡©e = STATE_PLAYING ; 682 `±h»ad_mu‹x_uÆock (& ¡©e_mu‹x ); 683 } } 685  $g‘_Ï‹ncy_p ( ¬gc , cÚ¡ ** ¬gv ) 687 `RETURN_IF_NULL ( if_audio_sco ); 688 `RETURN_IF_NULL ( ¡»am_out ); 690 `h®‹¡_šfo ("Output‡udio stream†atency: %d\n", 691 ¡»am_out -> `g‘_Ï‹ncy (stream_out)); 692 } } 694  $g‘_bufãr_size_p ( ¬gc , cÚ¡ ** ¬gv ) 696 `RETURN_IF_NULL ( if_audio_sco ); 697 `RETURN_IF_NULL ( ¡»am_out ); 699 `h®‹¡_šfo ("Current output buffer size: %zu\n", 700 ¡»am_out -> commÚ . `g‘_bufãr_size (&stream_out->common)); 701 } } 703  $g‘_chªÃls_p ( ¬gc , cÚ¡ ** ¬gv ) 705 audio_chªÃl_mask_t chªÃls ; 707 `RETURN_IF_NULL ( if_audio_sco ); 708 `RETURN_IF_NULL ( ¡»am_out ); 710 chªÃls = ¡»am_out -> commÚ . `g‘_chªÃls (&stream_out->common); 712 `h®‹¡_šfo ("ChªÃls: %s\n", `audio_chªÃl_mask_t2¡r ( chªÃls )); 713 } } 715  $g‘_fÜm©_p ( ¬gc , cÚ¡ ** ¬gv ) 717 audio_fÜm©_t fÜm© ; 719 `RETURN_IF_NULL ( if_audio_sco ); 720 `RETURN_IF_NULL ( ¡»am_out ); 722 fÜm© = ¡»am_out -> commÚ . `g‘_fÜm© (&stream_out->common); 724 `h®‹¡_šfo ("FÜm©: %s\n", `audio_fÜm©_t2¡r ( fÜm© )); 725 } } 727  $g‘_§m¶e_¿‹_p ( ¬gc , cÚ¡ ** ¬gv ) 729 `RETURN_IF_NULL ( if_audio_sco ); 730 `RETURN_IF_NULL ( ¡»am_out ); 732 `h®‹¡_šfo ("Current sample„ate: %d\n", 733 ¡»am_out -> commÚ . `g‘_§m¶e_¿‹ (&stream_out->common)); 734 } } 736  $g‘_·¿m‘”s_p ( ¬gc , cÚ¡ ** ¬gv ) 738 cÚ¡ * key¡r ; 740 `RETURN_IF_NULL ( if_audio_sco ); 741 `RETURN_IF_NULL ( ¡»am_out ); 743 ià( ¬gc < 3) { 744 `h®‹¡_šfo ("No keys given.\n"); 745 key¡r = ""; 747 key¡r = ¬gv [2]; 750 `h®‹¡_šfo ("Current…arameters: %s\n", 751 ¡»am_out -> commÚ . `g‘_·¿m‘”s (&stream_out->common, 752 key¡r )); 753 } } 755  $£t_·¿m‘”s_p ( ¬gc , cÚ¡ ** ¬gv ) 757 `RETURN_IF_NULL ( if_audio_sco ); 758 `RETURN_IF_NULL ( ¡»am_out ); 760 ià( ¬gc < 3) { 761 `h®‹¡_”rÜ ("No key=value;…airs given.\n"); 765 ¡»am_out -> commÚ . `£t_·¿m‘”s (&¡»am_out->commÚ, ¬gv [2]); 766 } } 768  $£t_§m¶e_¿‹_p ( ¬gc , cÚ¡ ** ¬gv ) 770 `RETURN_IF_NULL ( if_audio_sco ); 771 `RETURN_IF_NULL ( ¡»am_out ); 773 ià( ¬gc < 3) 776 ¡»am_out -> commÚ . `£t_§m¶e_¿‹ (&¡»am_out->commÚ, `©oi ( ¬gv [2])); 777 } } 779  $š™_check_p ( ¬gc , cÚ¡ ** ¬gv ) 781 `RETURN_IF_NULL ( if_audio_sco ); 783 `h®‹¡_šfo ("Init check„esult: %d\n", 784 if_audio_sco -> `š™_check (if_audio_sco)); 785 } } 787  m‘hod gm‘hods [] = { 788 STD_METHOD ( š™ ), 789 STD_METHOD ( þ—nup ), 790 STD_METHODH ( Ý’_ouut_¡»am , "sample_rate"), 791 STD_METHOD ( þo£_ouut_¡»am ), 792 STD_METHODH ( Ý’_šput_¡»am , "sampling„ate"), 793 STD_METHOD ( þo£_šput_¡»am ), 794 STD_METHODH ( ¶ay , ""), 795 STD_METHOD ( »ad ), 796 STD_METHOD ( loÝ ), 797 STD_METHOD ( ¡Ý ), 798 STD_METHOD ( su¥’d ), 799 STD_METHOD ( »sume ), 800 STD_METHOD ( g‘_Ï‹ncy ), 801 STD_METHOD ( g‘_bufãr_size ), 802 STD_METHOD ( g‘_chªÃls ), 803 STD_METHOD ( g‘_fÜm© ), 804 STD_METHOD ( g‘_§m¶e_¿‹ ), 805 STD_METHODH ( g‘_·¿m‘”s , ""), 806 STD_METHODH ( £t_·¿m‘”s , ""), 807 STD_METHODH ( £t_§m¶e_¿‹ , ""), 808 STD_METHOD ( š™_check ), 809 END_METHOD 812 cÚ¡  š‹rçû gsco_if = { 813 . Çme = "sco", 814 . gm‘hods = m‘hods @android/client/if-sock.c 18  ~<¡dio.h > 19  ~<ùy³.h > 20  ~ 21  ~<¡ršg.h > 23  ~"if-maš.h " 24  ~"pÞlhªdËr.h " 25  ~"../h®-utžs.h " 27 cÚ¡ btsock_š‹rçû_t * gif_sock = NULL ; 29 SINTMAP ( btsock_ty³_t , -1, "(unknown)") 30 DELEMENT ( BTSOCK_RFCOMM ), 31 DELEMENT ( BTSOCK_SCO ), 32 DELEMENT ( BTSOCK_L2CAP ), 33 gENDMAP 35  #MAX_LISTEN_FD 15 ) 36  gli¡’_fd [ MAX_LISTEN_FD ]; 37  gli¡’_fd_couÁ ; 39 cÚ¡ * cÚ¡ guuids [] = { 40 "00001101", "00001105", "0000112f", NULL 47  $»ûive_äom_þ›Á ( pÞlfd *pollfd) 49  buf [16]; 54  outbuf [( buf ) * 4 + 2]; 55  i ; 56  »t ; 58 ià( pÞlfd -> »v’ts & POLLHUP ) { 59 `h®‹¡_”rÜ ("DiscÚÃùed fd=%d\n", pÞlfd -> fd ); 60 `pÞl_uÄegi¡”_fd ( pÞlfd -> fd , »ûive_äom_þ›Á ); 61 } ià( pÞlfd -> »v’ts & POLLIN ) { 62 `h®‹¡_šfo ("»ûivšg from cl›Á fd=%d\n", pÞlfd -> fd ); 65 `mem£t ( outbuf , ' ', (outbuf)); 66 outbuf [(outbuf) - 1] = 0; 67 »t = `»cv ( pÞlfd -> fd , buf , (buf), MSG_DONTWAIT ); 69  i = 0; i < »t ; ++i) 70 `¥rštf ( outbuf + i * 3, "%02X ", 71 (è buf [ i ]); 72 outbuf [ i * 3] = ' '; 73  i = 0; i < »t ; ++i) 74 `¥rštf ( outbuf + 48 + i , "%c", 75 ( `i¥ršt ( buf [ i ]) ? buf[i] : '.')); 76 ià( »t > 0) 77 `h®‹¡_šfo ("%s\n", outbuf ); 78 }  »t > 0); 81 `h®‹¡_”rÜ ("PÞÈev’ˆ%x\n", pÞlfd -> »v’ts ); 82 `pÞl_uÄegi¡”_fd ( pÞlfd -> fd , »ûive_äom_þ›Á ); 84 } } 90  $»ûive_sock_cÚÃù_sigÇl ( pÞlfd *pollfd) 92 sock_cÚÃù_sigÇl_t cs ; 93  addr_¡r [ MAX_ADDR_STR_LEN ]; 95 ià( pÞlfd -> »v’ts & POLLIN ) { 96  »t ; 98 `pÞl_uÄegi¡”_fd ( pÞlfd -> fd , »ûive_sock_cÚÃù_sigÇl ); 99 »t = `»ad ( pÞlfd -> fd , & cs , (cs)); 100 ià( »t !ð( cs )) { 101 `h®‹¡_šfo ("R—d oÀcÚÃù„‘uº %d\n", »t ); 105 `h®‹¡_šfo ("Connectiono %s channel %d status=%d\n", 106 `bt_bdaddr_t2¡r (& cs . bd_addr , addr_¡r ), 107 cs . chªÃl , cs. ¡©us ); 109 ià( cs . ¡©us == 0) 110 `pÞl_»gi¡”_fd ( pÞlfd -> fd , POLLIN , 111 »ûive_äom_þ›Á ); 114 ià( pÞlfd -> »v’ts & POLLHUP ) { 115 `h®‹¡_”rÜ ("DiscÚÃùed fd=%d„ev’ts=0x%X\n", pÞlfd -> fd , 116 pÞlfd -> »v’ts ); 117 `pÞl_uÄegi¡”_fd ( pÞlfd -> fd , »ûive_sock_cÚÃù_sigÇl ); 119 } } 126  $»ad_acû±ed ( fd ) 128  »t ; 129  msghdr msg ; 130  iovec iv ; 131  cmsgbuf [ `CMSG_SPACE (1)]; 132  cmsghdr * cmsg±r ; 133 sock_cÚÃù_sigÇl_t cs ; 134  acû±ed_fd = -1; 135  addr_¡r [ MAX_ADDR_STR_LEN ]; 137 `mem£t (& msg , 0, (msg)); 138 `mem£t (& iv , 0, (iv)); 139 `mem£t ( cmsgbuf , 0, (cmsgbuf)); 141 iv . iov_ba£ = & cs ; 142 iv . iov_Ën = ( cs ); 144 msg . msg_iov = & iv ; 145 msg . msg_iovËn = 1; 146 msg . msg_cÚŒÞ = cmsgbuf ; 147 msg . msg_cÚŒÞËn = ( cmsgbuf ); 150 »t = `»cvmsg ( fd , & msg , MSG_NOSIGNAL ); 151 }  »t < 0 && ”ºo =ð EINTR ); 153 ià( »t < 16 || 154 ( msg . msg_æags & ( MSG_CTRUNC | MSG_OOB | MSG_ERRQUEUE )) != 0) 155 `h®‹¡_”rÜ ("Failedo‡ccept connection\n"); 157  cmsg±r = `CMSG_FIRSTHDR (& msg ); 158 cmsg±r !ð NULL ; cmsg±¸ð `CMSG_NXTHDR (& msg , cmsgptr)) { 159  couÁ ; 161 ià( cmsg±r -> cmsg_Ëv– !ð SOL_SOCKET || 162 cmsg±r -> cmsg_ty³ !ð SCM_RIGHTS ) 165 `memýy (& acû±ed_fd , `CMSG_DATA ( cmsg±r ), (accepted_fd)); 166 couÁ = (( cmsg±r -> cmsg_Ën - `CMSG_LEN (0)) / ()); 168 ià( couÁ != 1) 169 `h®‹¡_”rÜ ("Failedo‡ccept descriptors count=%d\n", 170 couÁ ); 175 `h®‹¡_šfo ("Incoming connection from %s channel %d status=%d fd=%d\n", 176 `bt_bdaddr_t2¡r (& cs . bd_addr , addr_¡r ), 177 cs . chªÃl , cs. ¡©us , acû±ed_fd ); 178 `pÞl_»gi¡”_fd ( acû±ed_fd , POLLIN , »ûive_äom_þ›Á ); 179 } } 182  $þ›Á_cÚÃùed ( pÞlfd *pollfd) 184 `h®‹¡_šfo ("þ›Á cÚÃùed %x\n", pÞlfd -> »v’ts ); 186 ià( pÞlfd -> »v’ts & POLLHUP ) 187 `pÞl_uÄegi¡”_fd ( pÞlfd -> fd , þ›Á_cÚÃùed ); 188 ià( pÞlfd -> »v’ts & POLLIN ) 189 `»ad_acû±ed ( pÞlfd -> fd ); 190 } } 194  $li¡’_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 195 ** u£r ) 197 ià( ¬gc == 3) { 198 * u£r = `TYPE_ENUM ( btsock_ty³_t ); 199 * ’um_func = ’um_defšes ; 200 } ià( ¬gc == 5) { 201 * u£r = (*è uuids ; 202 * ’um_func = ’um_¡ršgs ; 204 } } 206  $li¡’_p ( ¬gc , cÚ¡ ** ¬gv ) 208 btsock_ty³_t ty³ ; 209 cÚ¡ * £rviû_Çme ; 210 bt_uuid_t £rviû_uuid ; 211  chªÃl ; 212  sock_fd = -1; 213  æags ; 215 `RETURN_IF_NULL ( if_sock ); 218 ià( ¬gc < 3) { 219 `h®‹¡_”rÜ ("No socketype specified\n"); 222 ty³ = `¡r2btsock_ty³_t ( ¬gv [2]); 223 ià((è ty³ == -1) 224 ty³ = `©oi ( ¬gv [2]); 227 ià( ¬gc < 4) { 228 `h®‹¡_”rÜ ("No service‚ame specified\n"); 231 £rviû_Çme = ¬gv [3]; 234 ià( ¬gc < 5) { 235 `h®‹¡_”rÜ ("No uuid specified\n"); 238 `¡r2bt_uuid_t ( ¬gv [4], & £rviû_uuid ); 241 chªÃl = ¬gc > 5 ? `©oi ( ¬gv [5]) : 0; 244 æags = ¬gc > 6 ? `©oi ( ¬gv [6]) : 0; 246 ià( li¡’_fd_couÁ >ð MAX_LISTEN_FD ) { 247 `h®‹¡_”rÜ ("Max (%d)†istening socketsƒxceeded\n", 248 li¡’_fd_couÁ ); 251 `EXEC ( if_sock -> li¡’ , ty³ , £rviû_Çme , 252 & £rviû_uuid . uu [0], chªÃl , & sock_fd , æags ); 253 ià( sock_fd > 0) { 254  chªÃl = 0; 255  »t = `»ad ( sock_fd , & chªÃl , 4); 256 ià( »t != 4) 257 `h®‹¡_šfo ("Read channel failed\n"); 258 `h®‹¡_šfo ("ChªÃÈ»tuºed from fœ¡„—d %d\n", chªÃl ); 259 li¡’_fd [ li¡’_fd_couÁ ++] = sock_fd ; 260 `pÞl_»gi¡”_fd ( sock_fd , POLLIN , þ›Á_cÚÃùed ); 262 } } 266  $cÚÃù_c ( ¬gc , cÚ¡ ** ¬gv , ’um_func *enum_func, 267 ** u£r ) 269 ià( ¬gc == 3) { 270 * ’um_func = ’um_deviûs ; 271 } ià( ¬gc == 4) { 272 * u£r = `TYPE_ENUM ( btsock_ty³_t ); 273 * ’um_func = ’um_defšes ; 274 } ià( ¬gc == 5) { 275 * u£r = (*è uuids ; 276 * ’um_func = ’um_¡ršgs ; 278 } } 280  $cÚÃù_p ( ¬gc , cÚ¡ ** ¬gv ) 282 bt_bdaddr_t addr ; 283 btsock_ty³_t ty³ ; 284 bt_uuid_t uuid ; 285  chªÃl ; 286  sock_fd = -1; 287  æags ; 290 ià( ¬gc <= 2) { 291 `h®‹¡_”rÜ ("No‡ddress specified\n"); 294 `¡r2bt_bdaddr_t ( ¬gv [2], & addr ); 297 ià( ¬gc <= 3) { 298 `h®‹¡_”rÜ ("No socketype specified\n"); 301 ty³ = `¡r2btsock_ty³_t ( ¬gv [3]); 302 ià((è ty³ == -1) 303 ty³ = `©oi ( ¬gv [3]); 306 ià( ¬gc <= 4) { 307 `h®‹¡_”rÜ ("No uuid specified\n"); 310 `¡r2bt_uuid_t ( ¬gv [4], & uuid ); 313 ià( ¬gc <= 5) { 314 `h®‹¡_”rÜ ("No channel specified\n"); 317 chªÃl = `©oi ( ¬gv [5]); 320 æags = ¬gc <ð6 ? 0 : `©oi ( ¬gv [6]); 322 `RETURN_IF_NULL ( if_sock ); 324 `EXEC ( if_sock -> cÚÃù , & addr , ty³ , & uuid . uu [0], chªÃl , & sock_fd , 325 æags ); 326 ià( sock_fd > 0) { 327  chªÃl = 0; 328  »t = `»ad ( sock_fd , & chªÃl , 4); 330 ià( »t != 4) 331 `h®‹¡_šfo ("Read channel failed\n"); 332 `h®‹¡_šfo ("ChªÃÈ»tuºed from fœ¡„—d %d\n", chªÃl ); 333 li¡’_fd [ li¡’_fd_couÁ ++] = sock_fd ; 334 `pÞl_»gi¡”_fd ( sock_fd , POLLIN , »ûive_sock_cÚÃù_sigÇl ); 336 } } 339  m‘hod gm‘hods [] = { 340 STD_METHODCH ( li¡’ , 342 STD_METHODCH ( cÚÃù , 344 END_METHOD 347 cÚ¡  š‹rçû gsock_if = { 348 . Çme = "socket", 349 . gm‘hods = m‘hods @android/client/pollhandler.c 18  ~<¡dio.h > 19  ~<”ºo.h > 20  ~ 22  ~"pÞlhªdËr.h " 36  #MAX_OPEN_FD 10 ) 39  pÞlfd gfds [ MAX_OPEN_FD ]; 40  pÞl_hªdËr gfds_hªdËr [ MAX_OPEN_FD ]; 42  gfds_couÁ = 0; 49  $pÞl_di¥©ch_loÝ () 51  fds_couÁ > 0) { 52  i ; 53  cur_fds_couÁ = fds_couÁ ; 54  »ady = `pÞl ( fds , fds_couÁ , 1000); 56  i = 0; i < fds_couÁ && »ady > 0; ++i) { 57 ià( fds [ i ]. »v’ts == 0) 60 fds_hªdËr [ i ]( fds + i); 61 »ady --; 68 ià( cur_fds_couÁ !ð fds_couÁ ) 72 } } 81  $pÞl_»gi¡”_fd ( fd ,  ev’ts , pÞl_hªdËr ph ) 83 ià( fds_couÁ >ð MAX_OPEN_FD ) 84  - EMFILE ; 86 fds_hªdËr [ fds_couÁ ] = ph ; 87 fds [ fds_couÁ ]. fd = fd; 88 fds [ fds_couÁ ]. ev’ts =ƒvents; 89 fds_couÁ ++; 91  fds_couÁ ; 92 } } 101  $pÞl_uÄegi¡”_fd ( fd , pÞl_hªdËr ph ) 103  i ; 105  i = 0; i < fds_couÁ ; ++i) { 106 ià( fds_hªdËr [ i ] =ð ph && fds [i]. fd == fd) { 107 fds_couÁ --; 108 ià( i < fds_couÁ ) { 109 fds [ i ]. fd = fds[ fds_couÁ ].fd; 110 fds [ i ]. ev’ts = fds[ fds_couÁ ].events; 111 fds_hªdËr [ i ] = fds_hªdËr[ fds_couÁ ]; 116  - EBADF ; 117 } } @android/client/pollhandler.h 18  ~ 21 (* tpÞl_hªdËr )( tpÞlfd *pollfd); 23  `pÞl_»gi¡”_fd ( fd ,  ev’ts , pÞl_hªdËr ph ); 24  `pÞl_uÄegi¡”_fd ( fd , pÞl_hªdËr ph ); 26  `pÞl_di¥©ch_loÝ (); @android/client/tabcompletion.c 18  ~<¡dio.h > 19  ~<ùy³.h > 20  ~<¡ršg.h > 21  ~"if-maš.h " 22  ~"‹rmš®.h " 25  gb_h™_couÁ ; 27  s¥l™_¬g { 28  ¥l™_¬g * mÃxt ; 29 cÚ¡ * mÜigš ; 30  mÁcÝy [1]; 31 } t¥l™_¬g_t ; 34 cÚ¡  m‘hod * $g‘_š‹rçû_m‘hod (cÚ¡ * šame , 35 cÚ¡ * mÇme ) 37 cÚ¡  š‹rçû * içû = `g‘_š‹rçû ( šame ); 39 ià( içû =ð NULL ) 40  NULL ; 42  `g‘_m‘hod ( içû -> m‘hods , mÇme ); 43 } } 46  $´št_m©ches ( ’um_func f , * u£r , cÚ¡ * ´efix ,  Ën ) 48  i ; 49 cÚ¡ * ’um_Çme ; 51 `putch¬ ('\n'); 52  i = 0; NULL !ð( ’um_Çme = `f ( u£r , i)); ++i) { 53 ià( `¡ºcmp ( ’um_Çme , ´efix , Ën ) == 0) 54 `´štf ("%s\t", ’um_Çme ); 56 `putch¬ ('\n'); 57 `‹rmš®_d¿w_commªd_lše (); 58 } } 67  $¥l™_commªd (cÚ¡ * lše_bufãr ,  size , ¥l™_¬g_t * buf , 68  buf_size_š_by‹s ) 70 ¥l™_¬g_t * ´ev = NULL ; 71 ¥l™_¬g_t * ¬g = buf ; 72  ¬gc = 0; 73 cÚ¡ * p = lše_bufãr ; 74 cÚ¡ * e = p + ( size > 0 ? siz: (è `¡¾’ (p)); 75  Ën ; 78  p < e && `is¥aû (*p)) 79 p ++; 80 ¬g -> Üigš = p ; 81 ¬g -> Ãxt = NULL ; 82  p < e && ! `is¥aû (*p)) 83 p ++; 84 Ën = p - ¬g -> Üigš ; 85 ià(& ¬g -> ÁcÝy [0] + Ën + 1 > 86 (cÚ¡ *è buf + buf_size_š_by‹s ) 88 `¡ºýy ( ¬g -> ÁcÝy ,‡rg-> Üigš , Ën ); 89 ¬g -> ÁcÝy [ Ën ] = 0; 90 ià( ´ev !ð NULL ) 91 ´ev -> Ãxt = ¬g ; 92 ´ev = ¬g ; 93 ¬g +ð(2 * (*¬gè+ Ën ) / (*arg); 94 ¬gc ++; 95 }  p < e ); 97  ¬gc ; 98 } } 101 cÚ¡ * $m‘hods_Çme (* v ,  i ) 103 cÚ¡  š‹rçû * içû = v ; 105  içû -> m‘hods [ i ]. Çme [0] ? içû->m‘hods[i].Çm: NULL ; 106 } } 108  gcommªd_com¶‘iÚ_¬gs ; 109 (* tshÜt_h–p )( tcommªd_com¶‘iÚ_¬gs * t¬gs ); 111  scommªd_com¶‘iÚ_¬gs { 112 cÚ¡ ¥l™_¬g_t * ¬g ; 113 cÚ¡ * ty³d ; 114 ’um_func func ; 115 * u£r ; 116 shÜt_h–p h–p ; 117 cÚ¡ * u£r_h–p ; 121  $b_com¶‘iÚ ( commªd_com¶‘iÚ_¬gs * ¬gs ) 123 cÚ¡ * Çme = ¬gs -> ty³d ; 124 cÚ¡  Ën = `¡¾’ ( Çme ); 125  i ; 126  j ; 127  ´efix [128] = {0}; 128  ´efix_Ën = 0; 129  couÁ = 0; 130 cÚ¡ * ’um_Çme ; 132  i = 0; NULL !ð( ’um_Çme = ¬gs -> `func ×rgs-> u£r , i)); ++i) { 134 ià( `¡ºcmp ( ’um_Çme , Çme , Ën ) != 0) 138 ià( couÁ ++ == 0) { 139 `¡rýy ( ´efix , ’um_Çme ); 140 ´efix_Ën = `¡¾’ ( ´efix ); 145  j = 0; ´efix [j] != 0 146 && ´efix [ j ] =ð ’um_Çme [j];) 147 ++ j ; 148 ´efix_Ën = j ; 149 ´efix [ j ] = 0; 152 ià( couÁ == 0) { 154 ià( ¬gs -> h–p !ð NULL ) 155 ¬gs -> `h–p (args); 156 b_h™_couÁ = 0; 161 ià( Ën =ð ´efix_Ën ) { 162 ià( couÁ != 1) { 163 ià( b_h™_couÁ == 1) { 164 `putch¬ ('\a'); 165 } ià( b_h™_couÁ == 2 || 166 ¬gs -> h–p =ð NULL ) { 167 `´št_m©ches ( ¬gs -> func , 168 ¬gs -> u£r , Çme , Ën ); 170 ¬gs -> `h–p (args); 171 b_h™_couÁ = 1; 173 } ià( couÁ == 1) { 175 `‹rmš®_š£¹_što_commªd_lše (" "); 179 ià( couÁ == 1) { 181 ´efix [ ´efix_Ën ++] = ' '; 182 ´efix [ ´efix_Ën ] = '\0'; 185 `‹rmš®_š£¹_što_commªd_lše ( ´efix + Ën ); 186 b_h™_couÁ = 0; 188 } } 191  $commªd_com¶‘iÚ ( ¥l™_¬g_t * ¬g ) 193  commªd_com¶‘iÚ_¬gs ¬gs = { 194 . ¬g =‡rg, 195 . ty³d = ¬g -> ÁcÝy , 196 . func = commªd_Çme 199 `b_com¶‘iÚ (& ¬gs ); 200 } } 203  $m‘hod_com¶‘iÚ (cÚ¡  š‹rçû * içû , ¥l™_¬g_t * ¬g ) 205  commªd_com¶‘iÚ_¬gs ¬gs = { 206 . ¬g =‡rg, 207 . ty³d = ¬g -> Ãxt -> ÁcÝy , 208 . func = m‘hods_Çme , 209 . u£r = (*è içû 212 ià( içû =ð NULL ) 215 `b_com¶‘iÚ (& ¬gs ); 216 } } 218 cÚ¡ * gbÞd = "\x1b[1m"; 219 cÚ¡ * gnÜm® = "\x1b[0m"; 221  boÞ $fšd_Áh_¬gum’t (cÚ¡ * ¡r ,  n , cÚ¡ ** s , 222 cÚ¡ ** e ) 224 cÚ¡ * p = ¡r ; 225  ¬gc = 0; 226 * e = NULL ; 228  p !ð NULL && *p != 0) { 230  `is¥aû (* p )) 231 ++ p ; 233 ià( n =ð ¬gc ) 234 * s = p ; 236 ià(* p == '[') { 237 p = `¡rchr (p, ']'); 238 ià( p !ð NULL ) 239 * e = ++ p ; 240 } ià(* p == '<') { 241 p = `¡rchr (p, '>'); 242 ià( p !ð NULL ) 243 * e = ++ p ; 245 * e = `¡rchr ( p , ' '); 246 ià(* e =ð NULL ) 247 * e = p + `¡¾’ (p); 248 p = * e ; 251 ià( n =ð ¬gc ) 254 ¬gc ++; 255 * e = NULL ; 257  * e !ð NULL ; 258 } } 261  $m‘hod_h–p ( commªd_com¶‘iÚ_¬gs * ¬gs ) 263  ¬gc ; 264 cÚ¡ ¥l™_¬g_t * ¬g = ¬gs ->arg; 265 cÚ¡ * sb = NULL ; 266 cÚ¡ * eb = NULL ; 267 cÚ¡ * ¬g1 = ""; 268  ¬g1_size = 0; 270 ià( ¬gs -> u£r_h–p =ð NULL ) 273  ¬gc = 0; ¬g !ð NULL ;‡rgc++) 274 ¬g =‡rg-> Ãxt ; 277 ià( `g‘_commªd ( ¬gs -> ¬g -> ÁcÝy è=ð NULL ) { 279 ¬g1 = ¬gs -> ¬g -> Ãxt -> ÁcÝy ; 280 ¬g1_size = `¡¾’ ( ¬g1 ) + 1; 283 `fšd_Áh_¬gum’t ( ¬gs -> u£r_h–p , ¬gc - ( ¬g1_size ? 3 : 2), 284 & sb , & eb ); 286 ià( eb !ð NULL ) 287 `h®‹¡_šfo ("% %-*s%.*s%s%.*s%s%s\n", ¬gs -> ¬g -> ÁcÝy , 288 ¬g1_size , ¬g1 , (è( sb - ¬gs -> u£r_h–p ), 289 ¬gs -> u£r_h–p , bÞd , (è( eb - sb ), 290 sb , nÜm® , eb ); 292 `h®‹¡_šfo ("% %-*s%s\n", ¬gs -> ¬g -> ÁcÝy , 293 ¬g1_size , ¬g1 , ¬gs -> u£r_h–p ); 294 } } 297 cÚ¡ * $»tuº_nuÎ (* u£r ,  i ) 299  NULL ; 300 } } 308  $·¿m_com¶‘iÚ ( ¬gc , cÚ¡ ¥l™_¬g_t * ¬g , 309 cÚ¡  m‘hod *m‘hod,  hÍix ) 311  i ; 312 cÚ¡ * ¬gv [ ¬gc ]; 313 cÚ¡ ¥l™_¬g_t * tmp = ¬g ; 314  commªd_com¶‘iÚ_¬gs ¬gs = { 315 . ¬g =‡rg, 316 . func = »tuº_nuÎ 320  i = 0; i < ¬gc ; ++i) { 321 ¬gv [ i ] = tmp -> ÁcÝy ; 322 tmp =mp-> Ãxt ; 325 ià( m‘hod !ð NULL && m‘hod-> com¶‘e != NULL) { 327 m‘hod -> `com¶‘e ( ¬gc , ¬gv , & ¬gs . func , &¬gs. u£r ); 331 ià( ¬gs . func !ð NULL ) { 332 ¬gs . ty³d = ¬gv [ ¬gc - 1]; 333 ¬gs . h–p = m‘hod_h–p ; 334 ¬gs . u£r_h–p = m‘hod ? m‘hod-> h–p : NULL ; 336 `b_com¶‘iÚ (& ¬gs ); 338 } } 346  $´oûss_b (cÚ¡ * lše ,  Ën ) 348  ¬gc ; 349  ¥l™_¬g_t buf [( LINE_BUF_MAX * 2) / (split_arg_t)]; 350 cÚ¡  m‘hod *method; 352 ¬gc = `¥l™_commªd ( lše , Ën , buf , (buf)); 353 b_h™_couÁ ++; 355 ià( ¬gc == 0) 358 ià( ¬gc == 1) { 359 `commªd_com¶‘iÚ ( buf ); 363 m‘hod = `g‘_commªd ( buf [0]. ÁcÝy ); 364 ià( m‘hod !ð NULL ) { 365 `·¿m_com¶‘iÚ ( ¬gc , buf , m‘hod , 1); 366 } ià( ¬gc == 2) { 367 `m‘hod_com¶‘iÚ ( `g‘_š‹rçû ( buf [0]. ÁcÝy ), buf); 370 m‘hod = `g‘_š‹rçû_m‘hod ( buf [0]. ÁcÝy , 371 buf [0]. Ãxt -> ÁcÝy ); 372 `·¿m_com¶‘iÚ ( ¬gc , buf , m‘hod , 2); 374 } } @android/client/terminal.c 18  ~<¡dio.h > 19  ~<¡ršg.h > 20  ~<ùy³.h > 21  ~<¡dboÞ.h > 22  ~<‹rmios.h > 23  ~<¡dlib.h > 25  ~"‹rmš®.h " 26  ~"hi¡Üy.h " 32  #SEQ_INSERT "[2~" ) 33  #SEQ_DELETE "[3~" ) 34  #SEQ_HOME "OH" ) 35  #SEQ_END "OF" ) 36  #SEQ_PGUP "[5~" ) 37  #SEQ_PGDOWN "[6~" ) 38  #SEQ_LEFT "[D" ) 39  #SEQ_RIGHT "[C" ) 40  #SEQ_UP "[A" ) 41  #SEQ_DOWN "[B" ) 42  #SEQ_STAB "[Z" ) 43  #SEQ_M_n "n" ) 44  #SEQ_M_p "p" ) 45  #SEQ_CLEFT "[1;5D" ) 46  #SEQ_CRIGHT "[1;5C" ) 47  #SEQ_CUP "[1;5A" ) 48  #SEQ_CDOWN "[1;5B" ) 49  #SEQ_SLEFT "[1;2D" ) 50  #SEQ_SRIGHT "[1;2C" ) 51  #SEQ_SUP "[1;2A" ) 52  #SEQ_SDOWN "[1;2B" ) 53  #SEQ_MLEFT "[1;3D" ) 54  #SEQ_MRIGHT "[1;3C" ) 55  #SEQ_MUP "[1;3A" ) 56  #SEQ_MDOWN "[1;3B" ) 58  #KEY_SEQUENCE ( k è{ KEY_ ##k, SEQ_ ##k } ) 59  sªsii_£qu’û { 60  mcode ; 61 cÚ¡ * m£qu’û ; 65 cÚ¡  ªsii_£qu’û gªsii_£qunûs [] = { 66 KEY_SEQUENCE ( INSERT ), 67 KEY_SEQUENCE ( DELETE ), 68 KEY_SEQUENCE ( HOME ), 69 KEY_SEQUENCE ( END ), 70 KEY_SEQUENCE ( PGUP ), 71 KEY_SEQUENCE ( PGDOWN ), 72 KEY_SEQUENCE ( LEFT ), 73 KEY_SEQUENCE ( RIGHT ), 74 KEY_SEQUENCE ( UP ), 75 KEY_SEQUENCE ( DOWN ), 76 KEY_SEQUENCE ( CLEFT ), 77 KEY_SEQUENCE ( CRIGHT ), 78 KEY_SEQUENCE ( CUP ), 79 KEY_SEQUENCE ( CDOWN ), 80 KEY_SEQUENCE ( SLEFT ), 81 KEY_SEQUENCE ( SRIGHT ), 82 KEY_SEQUENCE ( SUP ), 83 KEY_SEQUENCE ( SDOWN ), 84 KEY_SEQUENCE ( MLEFT ), 85 KEY_SEQUENCE ( MRIGHT ), 86 KEY_SEQUENCE ( MUP ), 87 KEY_SEQUENCE ( MDOWN ), 88 KEY_SEQUENCE ( STAB ), 89 KEY_SEQUENCE ( M_p ), 90 KEY_SEQUENCE ( M_n ), 91 { 0, NULL } 94  #KEY_SEQUNCE_NOT_FINISHED -1 ) 95  #KEY_C_C 3 ) 96  #KEY_C_D 4 ) 97  #KEY_C_L 12 ) 99  #is£q’û ( c è((cè=ð0x1B) ) 105  #MAX_ASCII_SEQUENCE 10 ) 107  gcu¼’t_£qu’û [ MAX_ASCII_SEQUENCE ]; 108  gcu¼’t_£qu’û_Ën = -1; 111  glše_buf [ LINE_BUF_MAX ]; 113  glše_buf_ix = 0; 115  glše_Ën = 0; 118  glše_šdex = 0; 120  g´om±_buf [10] = "> "; 121 cÚ¡ *cÚ¡ gnÝrom± = ""; 122 cÚ¡ * gcu¼’t_´om± = ´om±_buf ; 123 cÚ¡ * g´om± = ´om±_buf ; 130  $‹rmš®_move_cursÜ ( n ) 132 ià( n < 0) { 133 ; n < 0;‚++) 134 `putch¬ ('\b'); 135 } ià( n > 0) { 136 `´štf ("%*s", n , lše_buf + lše_buf_ix ); 138 } } 141  $‹rmš®_d¿w_commªd_lše () 147 ià( lše_Ën > 0) 148 `´štf ("%s%s", ´om± , lše_buf ); 150 `´štf ("%s", ´om± ); 153 `‹rmš®_move_cursÜ ( lše_buf_ix - lše_Ën ); 154 } } 157  $‹rmš®_š£¹_što_commªd_lše (cÚ¡ * p ) 159  Ën = `¡¾’ ( p ); 161 ià( lše_Ën =ð lše_buf_ix ) { 162 `¡rÿt ( lše_buf , p ); 163 `´štf ("%s", p ); 164 lše_Ën =†še_ËÀ+ Ën ; 165 lše_buf_ix = lše_Ën ; 167 `memmove ( lše_buf + lše_buf_ix + Ën , 168 lše_buf + lše_buf_ix , lše_Ën -†ine_buf_ix + 1); 169 `memmove ( lše_buf + lše_buf_ix , p , Ën ); 170 `´štf ("%s", lše_buf + lše_buf_ix ); 171 lše_buf_ix +ð Ën ; 172 lše_Ën +ð Ën ; 173 `‹rmš®_move_cursÜ ( lše_buf_ix - lše_Ën ); 175 } } 178  $‹rmš®_´št (cÚ¡ * fÜm© , ...) 180 va_li¡ ¬gs ; 181  »t ; 183 `va_¡¬t ( ¬gs , fÜm© ); 185 »t = `‹rmš®_v´št ( fÜm© , ¬gs ); 187 `va_’d ( ¬gs ); 188  »t ; 189 } } 192  $‹rmš®_v´št (cÚ¡ * fÜm© , va_li¡ ¬gs ) 194  »t ; 196 `´štf ("\r%*s\r", (è lše_Ën + 1, " "); 198 »t = `v´štf ( fÜm© , ¬gs ); 200 `‹rmš®_d¿w_commªd_lše (); 202 `fæush ( ¡dout ); 204  »t ; 205 } } 211  $‹rmš®_lše_»¶aûd () 213  Ën = `¡¾’ ( lše_buf ); 216 ià( Ën < lše_Ën ) { 218  lše_buf_ix > Ën ) { 219 `putch¬ ('\b'); 220 lše_buf_ix --; 224 ià( lše_buf_ix < lše_Ën ) 225 `´štf ("%.*s", lše_Ën - lše_buf_ix , 226 lše_buf + lše_buf_ix ); 228  lše_Ën >ð Ën ++) 229 `putch¬ (' '); 233 `´štf ("\r%s%s", ´om± , lše_buf ); 235 lše_Ën = `¡¾’ ( lše_buf ); 236 lše_buf_ix = lše_Ën ; 237 `fæush ( ¡dout ); 238 } } 240  $‹rmš®_þ—r_lše () 242 lše_buf [0] = '\0'; 243 `‹rmš®_lše_»¶aûd (); 244 } } 246  $‹rmš®_þ—r_sü“n () 248 lše_buf [0] = '\0'; 249 lše_buf_ix = 0; 250 lše_Ën = 0; 252 `´štf ("\x1b[2J\x1b[1;1H%s", ´om± ); 253 } } 255  $‹rmš®_d–‘e_ch¬ () 258 ià( lše_buf_ix >ð lše_Ën ) 264 lše_Ën --; 265 `memmove ( lše_buf + lše_buf_ix ,†ine_buf +†ine_buf_ix + 1, 266 lše_Ën - lše_buf_ix + 1); 268 `´štf ("% \b", lše_buf + lše_buf_ix ); 270 `‹rmš®_move_cursÜ ( lše_buf_ix - lše_Ën ); 271 } } 277  $‹rmš®_g‘_lše_äom_hi¡Üy ( Ãw_lše_šdex ) 279 Ãw_lše_šdex = `hi¡Üy_g‘_lše (new_line_index, 280 lše_buf , LINE_BUF_MAX ); 282 ià( Ãw_lše_šdex >= 0) { 283 `‹rmš®_lše_»¶aûd (); 284 lše_šdex = Ãw_lše_šdex ; 286 } } 295  $‹rmš®_m©ch_h™Üy ( boÞ back ) 297  buf [ lše_buf_ix + 1]; 298  lše ; 299  m©chšg_lše = -1; 300  dœ = back ? 1 : -1; 302 lše = lše_šdex + dœ ; 303  m©chšg_lše =ð-1 && lše >= 0) { 304  Ãw_lše_šdex ; 306 Ãw_lše_šdex = `hi¡Üy_g‘_lše ( lše , buf , lše_buf_ix + 1); 307 ià( Ãw_lše_šdex < 0) 310 ià(0 =ð `¡ºcmp ( lše_buf , buf , lše_buf_ix )) 311 m©chšg_lše = lše ; 312 lše +ð dœ ; 315 ià( m©chšg_lše >= 0) { 316  pos = lše_buf_ix ; 317 `‹rmš®_g‘_lše_äom_hi¡Üy ( m©chšg_lše ); 319 lše_buf_ix = pos ; 320 `‹rmš®_move_cursÜ ( pos - lše_Ën ); 322 } } 328  $‹rmš®_cÚv”t_£qu’û ( c ) 330  i ; 333 ià( cu¼’t_£qu’û_Ën == -1) { 335 ià( `is£q’û ( c )) { 336 cu¼’t_£qu’û_Ën ++; 337  KEY_SEQUNCE_NOT_FINISHED ; 340  c ; 344 cu¼’t_£qu’û [ cu¼’t_£qu’û_Ën ++] = c ; 345 cu¼’t_£qu’û [ cu¼’t_£qu’û_Ën ] = '\0'; 346  i = 0; ªsii_£qunûs [i]. code ; ++i) { 348 ià(0 !ð `¡ºcmp ( cu¼’t_£qu’û , ªsii_£qunûs [ i ]. £qu’û , 349 cu¼’t_£qu’û_Ën )) 353 ià( ªsii_£qunûs [ i ]. £qu’û [ cu¼’t_£qu’û_Ën ] == 0) { 354 cu¼’t_£qu’û_Ën = -1; 355  ªsii_£qunûs [ i ]. code ; 359  KEY_SEQUNCE_NOT_FINISHED ; 362 `‹rmš®_´št ("ªs˜ch¬ 0x%X %c\n", c ); 367 cu¼’t_£qu’û_Ën = -1; 368  c ; 369 } } 371 (* t‹rmš®_aùiÚ )( tc , tlše_ÿÎback t´oûss_lše ); 373  #TERMINAL_ACTION ( n ) \ 374  `n ( c , (* ´oûss_lše )(* lše )) ) 376 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_nuÎ ) 378 } } 382  mkey ; 383 ‹rmš®_aùiÚ mfunc ; 384 } tKeyAùiÚ ; 386  gaùiÚ_keys [] = { 387 KEY_SEQUNCE_NOT_FINISHED , 388 KEY_LEFT , 389 KEY_RIGHT , 390 KEY_HOME , 391 KEY_END , 392 KEY_DELETE , 393 KEY_CLEFT , 394 KEY_CRIGHT , 395 KEY_SUP , 396 KEY_SDOWN , 397 KEY_UP , 398 KEY_DOWN , 399 KEY_BACKSPACE , 400 KEY_INSERT , 401 KEY_PGUP , 402 KEY_PGDOWN , 403 KEY_CUP , 404 KEY_CDOWN , 405 KEY_SLEFT , 406 KEY_SRIGHT , 407 KEY_MLEFT , 408 KEY_MRIGHT , 409 KEY_MUP , 410 KEY_MDOWN , 411 KEY_STAB , 412 KEY_M_n , 413 KEY_M_p , 414 KEY_C_C , 415 KEY_C_D , 416 KEY_C_L , 422  #NELEM ( x è((è((xè/ ((x)[0]))) ) 428  KeyAùiÚ gcu¼’t_aùiÚs [ NELEM ( aùiÚ_keys ) + 1]; 431  $KeyAùiÚKeyCom·» (cÚ¡ * a , cÚ¡ * b ) 433  ((cÚ¡ KeyAùiÚ *è a )-> key - ((cÚ¡ KeyAùiÚ *è b )->key; 434 } } 437  KeyAùiÚ * $‹rmš®_g‘_aùiÚ ( key ) 439 KeyAùiÚ a = { . key = key }; 441  `b£¬ch (& a , cu¼’t_aùiÚs + 1, `NELEM ( aùiÚ_keys ), (a), 442 KeyAùiÚKeyCom·» ); 443 } } 446  $‹rmš®_£t_aùiÚs (cÚ¡ KeyAùiÚ * aùiÚs ) 448  i ; 451  i = 0; i < `NELEM ( aùiÚ_keys ); ++i) { 456 cu¼’t_aùiÚs [ i + 1]. key = aùiÚ_keys [i]; 457 cu¼’t_aùiÚs [ i + 1]. func = ‹rmš®_aùiÚ_nuÎ ; 461 `qsÜt ( cu¼’t_aùiÚs + 1, `NELEM ( aùiÚ_keys ), ( KeyAùiÚ ), 462 KeyAùiÚKeyCom·» ); 464 cu¼’t_aùiÚs [0] = * aùiÚs ++; 467 ; aùiÚs -> key ; ++actions) { 468 KeyAùiÚ * ¶aû = `‹rmš®_g‘_aùiÚ ( aùiÚs -> key ); 470 ià( ¶aû ) 471 ¶aû -> func = aùiÚs ->func; 473 } } 475 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_Ëá ) 478 ià( lše_buf_ix <= 0) 480 lše_buf_ix --; 481 `‹rmš®_move_cursÜ (-1); 482 } } 484 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_right ) 490 ià( lše_buf_ix < lše_Ën ) 491 `putch¬ ( lše_buf [ lše_buf_ix ++]); 492 } } 494 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_home ) 497 `´štf ("\r%s", ´om± ); 498 lše_buf_ix = 0; 499 } } 501 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_’d ) 504 ià( lše_buf_ix < lše_Ën ) { 506 `´štf ("%s", lše_buf + lše_buf_ix ); 508 lše_buf_ix = lše_Ën ; 510 } } 512 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_d– ) 514 `‹rmš®_d–‘e_ch¬ (); 515 } } 517 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_wÜd_Ëá ) 519  Þd_pos ; 525 ià( lše_buf_ix <= 0) 528 Þd_pos = lše_buf_ix ; 529 lše_buf_ix --; 531  lše_buf_ix && `is¥aû ( lše_buf [line_buf_ix])) 532 lše_buf_ix --; 535  lše_buf_ix > 0 && 536 ! `is¥aû ( lše_buf [ lše_buf_ix - 1])) 537 lše_buf_ix --; 540 `‹rmš®_move_cursÜ ( lše_buf_ix - Þd_pos ); 541 } } 543 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_wÜd_right ) 545  Þd_pos ; 551 ià( lše_buf_ix >ð lše_Ën ) 554 Þd_pos = lše_buf_ix ; 556  lše_buf_ix < lše_Ën && `is¥aû ( lše_buf [line_buf_ix])) 557 lše_buf_ix ++; 560  lše_buf_ix < lše_Ën && ! `is¥aû ( lše_buf [line_buf_ix])) 561 lše_buf_ix ++; 566 ià( lše_buf_ix > Þd_pos ) 567 `´štf ("%.*s", (è( lše_buf_ix - Þd_pos ), 568 lše_buf + Þd_pos ); 569 } } 571 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_hi¡Üy_begš ) 573 `‹rmš®_g‘_lše_äom_hi¡Üy (-1); 574 } } 576 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_hi¡Üy_’d ) 578 ià( lše_šdex > 0) 579 `‹rmš®_g‘_lše_äom_hi¡Üy (0); 580 } } 582 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_hi¡Üy_up ) 584 `‹rmš®_g‘_lše_äom_hi¡Üy ( lše_šdex + 1); 585 } } 587 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_hi¡Üy_down ) 589 ià( lše_šdex > 0) 590 `‹rmš®_g‘_lše_äom_hi¡Üy ( lše_šdex - 1); 591 } } 593 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_b ) 596 `´oûss_b ( lše_buf , lše_buf_ix ); 597 } } 600 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_back¥aû ) 602 ià( lše_buf_ix <= 0) 605 ià( lše_buf_ix =ð lše_Ën ) { 606 `´štf ("\b \b"); 607 lše_Ën = -- lše_buf_ix ; 608 lše_buf [ lše_Ën ] = 0; 610 `putch¬ ('\b'); 611 lše_buf_ix --; 612 lše_Ën --; 613 `memmove ( lše_buf + lše_buf_ix , 614 lše_buf + lše_buf_ix + 1, 615 lše_Ën - lše_buf_ix + 1); 616 `´štf ("% \b", lše_buf + lše_buf_ix ); 617 `‹rmš®_move_cursÜ ( lše_buf_ix - lše_Ën ); 619 } } 621 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_fšd_hi¡Üy_fÜw¬d ) 624 `‹rmš®_m©ch_h™Üy ( çl£ ); 625 } } 627 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_fšd_hi¡Üy_backw¬d ) 630 `‹rmš®_m©ch_h™Üy ( Œue ); 631 } } 633 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_ù¾_c ) 635 `‹rmš®_þ—r_lše (); 636 } } 638 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_ù¾_d ) 640 ià( lše_Ën > 0) { 641 `‹rmš®_d–‘e_ch¬ (); 643 `puts (""); 644 `ex™ (0); 646 } } 648 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_þ—r_sü“n ) 650 `‹rmš®_þ—r_sü“n (); 651 } } 653 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_’‹r ) 659 `hi¡Üy_add_lše ( lše_buf ); 660 lše_Ën = 0; 661 lše_buf_ix = 0; 662 lše_šdex = -1; 664 `putch¬ ( c ); 665 ´om± = nÝrom± ; 666 `´oûss_lše ( lše_buf ); 668 lše_buf [0] = '\0'; 669 ´om± = cu¼’t_´om± ; 670 `´štf ("%s", ´om± ); 671 } } 673 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_deçuÉ ) 675  ¡r [2] = { c , 0 }; 677 ià(! `i¥ršt ( c )) 682 `´štf ("ch¬-0x%02x\n", c ); 683 ià( lše_buf_ix < LINE_BUF_MAX - 1) 684 `‹rmš®_š£¹_što_commªd_lše ( ¡r ); 685 } } 688  lše_ÿÎback g´om±_ÿÎback ; 690  KeyAùiÚ gnÜm®_aùiÚs [] = { 691 { 0, ‹rmš®_aùiÚ_deçuÉ }, 692 { KEY_LEFT , ‹rmš®_aùiÚ_Ëá }, 693 { KEY_RIGHT , ‹rmš®_aùiÚ_right }, 694 { KEY_HOME , ‹rmš®_aùiÚ_home }, 695 { KEY_END , ‹rmš®_aùiÚ_’d }, 696 { KEY_DELETE , ‹rmš®_aùiÚ_d– }, 697 { KEY_CLEFT , ‹rmš®_aùiÚ_wÜd_Ëá }, 698 { KEY_CRIGHT , ‹rmš®_aùiÚ_wÜd_right }, 699 { KEY_SUP , ‹rmš®_aùiÚ_hi¡Üy_begš }, 700 { KEY_SDOWN , ‹rmš®_aùiÚ_hi¡Üy_’d }, 701 { KEY_UP , ‹rmš®_aùiÚ_hi¡Üy_up }, 702 { KEY_DOWN , ‹rmš®_aùiÚ_hi¡Üy_down }, 703 { '\t', ‹rmš®_aùiÚ_b }, 704 { KEY_BACKSPACE , ‹rmš®_aùiÚ_back¥aû }, 705 { KEY_M_n , ‹rmš®_aùiÚ_fšd_hi¡Üy_fÜw¬d }, 706 { KEY_M_p , ‹rmš®_aùiÚ_fšd_hi¡Üy_backw¬d }, 707 { KEY_C_C , ‹rmš®_aùiÚ_ù¾_c }, 708 { KEY_C_D , ‹rmš®_aùiÚ_ù¾_d }, 709 { KEY_C_L , ‹rmš®_aùiÚ_þ—r_sü“n }, 710 { '\r', ‹rmš®_aùiÚ_’‹r }, 711 { '\n', ‹rmš®_aùiÚ_’‹r }, 712 { 0, NULL }, 715 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_ªsw” ) 717 `putch¬ ( c ); 719 `‹rmš®_£t_aùiÚs ( nÜm®_aùiÚs ); 721 cu¼’t_´om± = ´om±_buf ; 724 ´om± = nÝrom± ; 725 lše_buf_ix = 0; 726 lše_Ën = 0; 728 `´om±_ÿÎback ( lše_buf ); 730 lše_buf [0] = 0; 732 ´om± = cu¼’t_´om± ; 734 `´štf ("%s", ´om± ); 735 } } 737 $TERMINAL_ACTION ( ‹rmš®_aùiÚ_´om±_ù¾_c ) 739 `´štf ("^C\n"); 740 lše_buf_ix = 0; 741 lše_Ën = 0; 742 lše_buf [0] = 0; 744 cu¼’t_´om± = ´om±_buf ; 745 ´om± = cu¼’t_´om± ; 746 `‹rmš®_£t_aùiÚs ( nÜm®_aùiÚs ); 748 `´štf ("%s", ´om± ); 749 } } 751  KeyAùiÚ g´om±_aùiÚs [] = { 752 { 0, ‹rmš®_aùiÚ_deçuÉ }, 753 { KEY_LEFT , ‹rmš®_aùiÚ_Ëá }, 754 { KEY_RIGHT , ‹rmš®_aùiÚ_right }, 755 { KEY_HOME , ‹rmš®_aùiÚ_home }, 756 { KEY_END , ‹rmš®_aùiÚ_’d }, 757 { KEY_DELETE , ‹rmš®_aùiÚ_d– }, 758 { KEY_CLEFT , ‹rmš®_aùiÚ_wÜd_Ëá }, 759 { KEY_CRIGHT , ‹rmš®_aùiÚ_wÜd_right }, 760 { KEY_BACKSPACE , ‹rmš®_aùiÚ_back¥aû }, 761 { KEY_C_C , ‹rmš®_aùiÚ_´om±_ù¾_c }, 762 { KEY_C_D , ‹rmš®_aùiÚ_ù¾_d }, 763 { '\r', ‹rmš®_aùiÚ_ªsw” }, 764 { '\n', ‹rmš®_aùiÚ_ªsw” }, 765 { 0, NULL }, 768  $‹rmš®_´oûss_ch¬ ( c , lše_ÿÎback ´oûss_lše ) 770 KeyAùiÚ * a ; 772 c = `‹rmš®_cÚv”t_£qu’û (c); 775 a = `‹rmš®_g‘_aùiÚ ( c ); 778 ià( a =ð NULL ) 779 a = & cu¼’t_aùiÚs [0]; 781 a -> `func ( c , ´oûss_lše ); 782 `fæush ( ¡dout ); 783 } } 785  $‹rmš®_´om±_fÜ (cÚ¡ * s , lše_ÿÎback ´oûss_lše ) 787 cu¼’t_´om± = s ; 788 ià( ´om± !ð nÝrom± ) { 789 ´om± = s ; 790 `‹rmš®_þ—r_lše (); 792 ´om±_ÿÎback = ´oûss_lše ; 793 `‹rmš®_£t_aùiÚs ( ´om±_aùiÚs ); 794 } } 796  ‹rmios gÜigŸÆ_tios ; 798  $‹rmš®_þ—nup () 800 `tc£‰r (0, TCSANOW , & ÜigŸÆ_tios ); 801 } } 803  $‹rmš®_£tup () 805  ‹rmios tios ; 807 `‹rmš®_£t_aùiÚs ( nÜm®_aùiÚs ); 809 `tcg‘©Œ (0, & ÜigŸÆ_tios ); 810 tios = ÜigŸÆ_tios ; 816 tios . c_læag &ð~( ICANON | ECHO | BRKINT | IGNBRK ); 817 `tc£‰r (0, TCSANOW , & tios ); 820 `©ex™ ( ‹rmš®_þ—nup ); 822 `´štf ("%s", ´om± ); 823 `fæush ( ¡dout ); 824 } } @android/client/terminal.h 18  ~<¡d¬g.h > 21  #LINE_BUF_MAX 1024 ) 23 ekey_codes { 24 mKEY_BACKSPACE = 0x7F, 25 mKEY_INSERT = 1000, 26 mKEY_DELETE , 27 mKEY_HOME , 28 mKEY_END , 29 mKEY_PGUP , 30 mKEY_PGDOWN , 31 mKEY_LEFT , 32 mKEY_RIGHT , 33 mKEY_UP , 34 mKEY_DOWN , 35 mKEY_CLEFT , 36 mKEY_CRIGHT , 37 mKEY_CUP , 38 mKEY_CDOWN , 39 mKEY_SLEFT , 40 mKEY_SRIGHT , 41 mKEY_SUP , 42 mKEY_SDOWN , 43 mKEY_MLEFT , 44 mKEY_MRIGHT , 45 mKEY_MUP , 46 mKEY_MDOWN , 47 mKEY_STAB , 48 mKEY_M_p , 49 mKEY_M_n 52 (* tlše_ÿÎback )(*); 54  `‹rmš®_£tup (); 55  `‹rmš®_´št (cÚ¡ * fÜm© , ...); 56  `‹rmš®_v´št (cÚ¡ * fÜm© , va_li¡ ¬gs ); 57  `‹rmš®_´oûss_ch¬ ( c , lše_ÿÎback ´oûss_lše ); 58  `‹rmš®_š£¹_što_commªd_lše (cÚ¡ * p ); 59  `‹rmš®_d¿w_commªd_lše (); 60  `‹rmš®_´om±_fÜ (cÚ¡ * s , lše_ÿÎback ´oûss_lše ); 62  `´oûss_b (cÚ¡ * lše ,  Ën ); @android/cutils/properties.h 24  ~ 25  ~<¡dlib.h > 26  ~<¡dio.h > 27  ~<¡ršg.h > 28  ~ 29  ~ 31  #PROPERTY_VALUE_MAX 32 ) 32  #PROPERTY_KEY_MAX 32 ) 34  #BLUETOOTH_MODE_PROPERTY_NAME "³rsi¡.sys.blu‘oÙh.mode" ) 35  #BLUETOOTH_MODE_PROPERTY_HANDSFREE "³rsi¡.sys.blu‘oÙh.hªdsä“" ) 37  šlše  $´Ý”ty_g‘ (cÚ¡ * key , * v®ue , 38 cÚ¡ * deçuÉ_v®ue ) 40 cÚ¡ * ´Ý = NULL ; 42 ià(! `¡rcmp ( key , BLUETOOTH_MODE_PROPERTY_NAME )) 43 ´Ý = `g‘’v ("BLUETOOTH_MODE"); 45 ià(! `¡rcmp ( key , BLUETOOTH_MODE_PROPERTY_HANDSFREE )) 46 ´Ý = `g‘’v ("BLUETOOTH_HANDSFREE_MODE"); 48 ià(! ´Ý ) 49 ´Ý = deçuÉ_v®ue ; 51 ià( ´Ý ) { 52 `¡ºýy ( v®ue , ´Ý , PROPERTY_VALUE_MAX ); 54 v®ue [ PROPERTY_VALUE_MAX - 1] = '\0'; 56  `¡¾’ ( v®ue ); 60 } } 64  šlše  $´Ý”ty_£t (cÚ¡ * key , cÚ¡ * v®ue ) 66 cÚ¡  SYSTEM_SOCKET_PATH [] = "\0android_system"; 68  sockaddr_un addr ; 69  msg [256]; 70  fd , Ën ; 72 fd = `sock‘ ( PF_LOCAL , SOCK_DGRAM , 0); 73 ià( fd < 0) 76 `mem£t (& addr , 0, (addr)); 77 addr . sun_çmžy = AF_UNIX ; 78 `memýy ( addr . sun_·th , SYSTEM_SOCKET_PATH , (SYSTEM_SOCKET_PATH)); 80 ià( `cÚÃù ( fd , ( sockaddr *è& addr , (addr)) < 0) { 81 `þo£ ( fd ); 85 Ën = `¢´štf ( msg , (msg), "%s=%s", key , v®ue ); 87 ià( `£nd ( fd , msg , Ën + 1, 0) < 0) { 88 `þo£ ( fd ); 92 `þo£ ( fd ); 95 } } @android/dis.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<¡dboÞ.h > 28  ~<”ºo.h > 30  ~ 32  ~"¤c/log.h " 34  ~"lib/uuid.h " 35  ~"¤c/sh¬ed/utž.h " 36  ~"¤c/sh¬ed/queue.h " 38  ~"©Œib/g©Œib.h " 39  ~"©Œib/©t.h " 40  ~"©Œib/g©t.h " 42  ~"ªdroid/dis.h " 44  #PNP_ID_SIZE 7 ) 46  sbt_dis { 47  m»f_couÁ ; 48 ušt16_t mhªdË ; 49 ušt8_t msourû ; 50 ušt16_t mv’dÜ ; 51 ušt16_t m´oduù ; 52 ušt16_t mv”siÚ ; 53 GA‰rib * m©Œib ; 54  g©t_´im¬y * m´im¬y ; 55 bt_dis_nÙify mnÙify ; 56 * mnÙify_d©a ; 57  queue * mg©t_Ý ; 60  sch¬aù”i¡ic { 61  g©t_ch¬ m©Œ ; 62  bt_dis * md ; 65  sg©t_»que¡ { 66  mid ; 67  bt_dis * mdis ; 68 * mu£r_d©a ; 71  $de¡roy_g©t_»q ( g©t_»que¡ * »q ) 73 `queue_»move ( »q -> dis -> g©t_Ý ,„eq); 74 `bt_dis_uÄef ( »q -> dis ); 75 `ä“ ( »q ); 76 } } 78  $dis_ä“ ( bt_dis * dis ) 80 `bt_dis_d‘ach ( dis ); 82 `g_ä“ ( dis -> ´im¬y ); 83 `queue_de¡roy ( dis -> g©t_Ý , (*è de¡roy_g©t_»q ); 84 `g_ä“ ( dis ); 85 } } 87  bt_dis * $bt_dis_Ãw (* ´im¬y ) 89  bt_dis * dis ; 91 dis = `g_Œy_Ãw0 ( bt_dis , 1); 92 ià(! dis ) 93  NULL ; 95 dis -> g©t_Ý = `queue_Ãw (); 96 ià(! dis -> g©t_Ý ) { 97 `dis_ä“ ( dis ); 98  NULL ; 101 ià( ´im¬y ) 102 dis -> ´im¬y = `g_memdup (primary, (*dis->primary)); 104  `bt_dis_»f ( dis ); 105 } } 107  bt_dis * $bt_dis_»f ( bt_dis * dis ) 109 ià(! dis ) 110  NULL ; 112 `__sync_ãtch_ªd_add (& dis -> »f_couÁ , 1); 114  dis ; 115 } } 117  $bt_dis_uÄef ( bt_dis * dis ) 119 ià(! dis ) 122 ià( `__sync_sub_ªd_ãtch (& dis -> »f_couÁ , 1)) 125 `dis_ä“ ( dis ); 126 } } 128  g©t_»que¡ * $ü—‹_»que¡ ( bt_dis * dis , 129 * u£r_d©a ) 131  g©t_»que¡ * »q ; 133 »q = `Ãw0 ( g©t_»que¡ , 1); 134 ià(! »q ) 135  NULL ; 137 »q -> u£r_d©a = user_data; 138 »q -> dis = `bt_dis_»f (dis); 140  »q ; 141 } } 143  boÞ $£t_ªd_¡Üe_g©t_»q ( bt_dis * dis , 144  g©t_»que¡ * »q , 145  id ) 147 »q -> id = id; 148  `queue_push_h—d ( dis -> g©t_Ý , »q ); 149 } } 151  $»ad_²pid_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 152 gpoš‹r u£r_d©a ) 154  g©t_»que¡ * »q = u£r_d©a ; 155  bt_dis * dis = »q -> u£r_d©a ; 156 ušt8_t v®ue [ PNP_ID_SIZE ]; 157 ssize_t vËn ; 159 `de¡roy_g©t_»q ( »q ); 161 ià( ¡©us != 0) { 162 `”rÜ ("E¼Ü„—dšg PNP_ID v®ue: %s", `©t_ecode2¡r ( ¡©us )); 166 vËn = `dec_»ad_»¥ ( pdu , Ën , v®ue , (value)); 167 ià( vËn < 0) { 168 `”rÜ ("Error„eading PNP_ID: Protocolƒrror"); 172 ià( vËn < 7) { 173 `”rÜ ("Error„eading PNP_ID: Invalid…du†ength„eceived"); 177 dis -> sourû = v®ue [0]; 178 dis -> v’dÜ = `g‘_Ë16 (& v®ue [1]); 179 dis -> ´oduù = `g‘_Ë16 (& v®ue [3]); 180 dis -> v”siÚ = `g‘_Ë16 (& v®ue [5]); 182 `DBG ("source: 0x%02X vendor: 0x%04X…roduct: 0x%04X version: 0x%04X", 183 dis -> sourû , dis-> v’dÜ , dis-> ´oduù , dis-> v”siÚ ); 185 ià( dis -> nÙify ) 186 dis -> `nÙify (dis-> sourû , dis-> v’dÜ , dis-> ´oduù , 187 dis -> v”siÚ , dis-> nÙify_d©a ); 188 } } 190  $»ad_ch¬ ( bt_dis * dis , GA‰rib * ©Œib , ušt16_t hªdË , 191 GA‰ribResuÉFunc func , gpoš‹r u£r_d©a ) 193  g©t_»que¡ * »q ; 194  id ; 196 »q = `ü—‹_»que¡ ( dis , u£r_d©a ); 197 ià(! »q ) 200 id = `g©t_»ad_ch¬ ( ©Œib , hªdË , func , »q ); 202 ià( `£t_ªd_¡Üe_g©t_»q ( dis , »q , id )) 205 `”rÜ ("dis: Could‚ot„ead characteristic"); 206 `g_©Œib_ÿnûl ( ©Œib , id ); 207 `ä“ ( »q ); 208 } } 210  $discov”_ch¬ ( bt_dis * dis , GA‰rib * ©Œib , 211 ušt16_t ¡¬t , ušt16_ˆ ’d , 212 bt_uuid_t * uuid , g©t_cb_t func , 213 gpoš‹r u£r_d©a ) 215  g©t_»que¡ * »q ; 216  id ; 218 »q = `ü—‹_»que¡ ( dis , u£r_d©a ); 219 ià(! »q ) 222 id = `g©t_discov”_ch¬ ( ©Œib , ¡¬t , ’d , uuid , func , »q ); 224 ià( `£t_ªd_¡Üe_g©t_»q ( dis , »q , id )) 227 `”rÜ ("dis: Could‚ot send discover characteristic"); 228 `g_©Œib_ÿnûl ( ©Œib , id ); 229 `ä“ ( »q ); 230 } } 232  $cÚfigu»_deviûšfo_cb ( ušt8_t ¡©us , GSLi¡ * ch¬aù”i¡ics , 233 * u£r_d©a ) 235  g©t_»que¡ * »q = u£r_d©a ; 236  bt_dis * d = »q -> u£r_d©a ; 237 GSLi¡ * l ; 239 `de¡roy_g©t_»q ( »q ); 241 ià( ¡©us != 0) { 242 `”rÜ ("Discover deviceinfo characteristics: %s", 243 `©t_ecode2¡r ( ¡©us )); 247  l = ch¬aù”i¡ics ;†;† =†-> Ãxt ) { 248  g©t_ch¬ * c = l -> d©a ; 250 ià( `¡rcmp ( c -> uuid , PNPID_UUID ) == 0) { 251 d -> hªdË = c -> v®ue_hªdË ; 252 `»ad_ch¬ ( d , d-> ©Œib , d-> hªdË , »ad_²pid_cb , d); 256 } } 258 boÞ $bt_dis_©ch ( bt_dis * dis , * ©Œib ) 260  g©t_´im¬y * ´im¬y = dis ->primary; 262 ià( dis -> ©Œib || ! ´im¬y ) 263  çl£ ; 265 dis -> ©Œib = `g_©Œib_»f (attrib); 267 ià(! dis -> hªdË ) 268 `discov”_ch¬ ( dis , dis-> ©Œib , ´im¬y -> ¿nge . ¡¬t , 269 ´im¬y -> ¿nge . ’d , NULL , 270 cÚfigu»_deviûšfo_cb , dis ); 272  Œue ; 273 } } 275  $ÿnûl_g©t_»q ( g©t_»que¡ * »q ) 277 ià( `g_©Œib_ÿnûl ( »q -> dis -> ©Œib ,„eq-> id )) 278 `de¡roy_g©t_»q ( »q ); 279 } } 281  $bt_dis_d‘ach ( bt_dis * dis ) 283 ià(! dis -> ©Œib ) 286 `queue_fÜ—ch ( dis -> g©t_Ý , (*è ÿnûl_g©t_»q , NULL ); 287 `g_©Œib_uÄef ( dis -> ©Œib ); 288 dis -> ©Œib = NULL ; 289 } } 291 boÞ $bt_dis_£t_nÙifiÿtiÚ ( bt_dis * dis , bt_dis_nÙify func , 292 * u£r_d©a ) 294 ià(! dis ) 295  çl£ ; 297 dis -> nÙify = func ; 298 dis -> nÙify_d©a = u£r_d©a ; 300  Œue ; 301 } } @android/dis.h 24  gbt_dis ; 26  bt_dis * bt_dis_Ãw (* ´im¬y ); 28  bt_dis * bt_dis_»f (bt_di * dis ); 29  bt_dis_uÄef ( bt_dis * dis ); 31 boÞ bt_dis_©ch ( bt_dis * dis , * g©t ); 32  bt_dis_d‘ach ( bt_dis * dis ); 34 (* tbt_dis_nÙify è( tušt8_t tsourû , tušt16_t tv’dÜ , 35 tušt16_t t´oduù , ušt16_ˆ tv”siÚ , 36 * tu£r_d©a ); 38 boÞ `bt_dis_£t_nÙifiÿtiÚ ( bt_dis * dis , bt_dis_nÙify func , 39 * u£r_d©a ); @android/gatt.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dboÞ.h > 29  ~<¡dlib.h > 30  ~<¡dšt.h > 31  ~ 32  ~<”ºo.h > 33  ~ 35  ~"c.h " 36  ~"c-commÚ.h " 37  ~"lib/sdp.h " 38  ~"lib/sdp_lib.h " 39  ~"lib/uuid.h " 40  ~"blu‘oÙh.h " 41  ~"g©t.h " 42  ~"¤c/log.h " 43  ~"h®-msg.h " 44  ~"utžs.h " 45  ~"¤c/sh¬ed/utž.h " 46  ~"¤c/sh¬ed/queue.h " 47  ~"¤c/sh¬ed/g©t-db.h " 48  ~"©Œib/g©Œib.h " 49  ~"©Œib/©t.h " 50  ~"©Œib/g©t.h " 51  ~"btio/btio.h " 54  #GATT_MAX_ATTR_LEN 600 ) 56  #GATT_SUCCESS 0x00000000 ) 57  #GATT_FAILURE 0x00000101 ) 59  #BASE_UUID16_OFFSET 12 ) 61  #GATT_PERM_READ 0x00000001 ) 62  #GATT_PERM_READ_ENCRYPTED 0x00000002 ) 63  #GATT_PERM_READ_MITM 0x00000004 ) 64  #GATT_PERM_READ_AUTHORIZATION 0x00000008 ) 65  #GATT_PERM_WRITE 0x00000100 ) 66  #GATT_PERM_WRITE_ENCRYPTED 0x00000200 ) 67  #GATT_PERM_WRITE_MITM 0x00000400 ) 68  #GATT_PERM_WRITE_AUTHORIZATION 0x00000800 ) 69  #GATT_PERM_WRITE_SIGNED 0x00010000 ) 70  #GATT_PERM_WRITE_SIGNED_MITM 0x00020000 ) 71  #GATT_PERM_NONE 0x10000000 ) 73  #GATT_PAIR_CONN_TIMEOUT 30 ) 74  #GATT_CONN_TIMEOUT 2 ) 76 cÚ¡ ušt8_t gBLUETOOTH_UUID [] = { 82 mDEVICE_DISCONNECTED = 0, 83 mDEVICE_CONNECT_INIT , 84 mDEVICE_CONNECT_READY , 85 mDEVICE_CONNECTED , 86 } tg©t_deviû_¡©e_t ; 88 cÚ¡ * gdeviû_¡©e_¡r [] = { 95  s³ndšg_Œªs_d©a { 96  mid ; 97 ušt8_t mÝcode ; 98  g©t_db_©Œibu‹ * m©Œib ; 99  m£rŸl_id ; 102  sg©t_­p { 103 št32_t mid ; 104 ušt8_t muuid [16]; 106 g©t_ty³_t mty³ ; 109  queue * mnÙifiÿtiÚs ; 111 g©t_cÚn_cb_t mfunc ; 114  s–em’t_id { 115 bt_uuid_t muuid ; 116 ušt8_t mš¡ªû ; 119  sdesütÜ { 120  –em’t_id mid ; 121 ušt16_t mhªdË ; 124  sch¬aù”i¡ic { 125  –em’t_id mid ; 126  g©t_ch¬ mch ; 127 ušt16_t m’d_hªdË ; 129  queue * mdesütÜs ; 132  s£rviû { 133  –em’t_id mid ; 134  g©t_´im¬y m´im ; 135  g©t_šþuded mšþ ; 137 boÞ m´im¬y ; 139  queue * mch¬s ; 140  queue * mšþuded ; 141 boÞ mšþ_£¬ch_dÚe ; 144  snÙifiÿtiÚ_d©a { 145  h®_g©t_¤vc_id m£rviû ; 146  h®_g©t_g©t_id mch ; 147  ­p_cÚÃùiÚ * mcÚn ; 148 gušt mnÙif_id ; 149 gušt mšd_id ; 150  m»f ; 153  sg©t_deviû { 154 bdaddr_t mbdaddr ; 155 ušt8_t mbdaddr_ty³ ; 157 g©t_deviû_¡©e_t m¡©e ; 159 GA‰rib * m©Œib ; 160 GIOChªÃl * m©t_io ; 161  queue * m£rviûs ; 162 boÞ m·¹Ÿl_¤vc_£¬ch ; 164 gušt mw©ch_id ; 165 gušt m£rv”_id ; 166 gušt mšd_id ; 168  m»f ; 169  mcÚn_út ; 171  queue * mautocÚÃù_­ps ; 173  queue * m³ndšg_»que¡s ; 176  s­p_cÚÃùiÚ { 177  g©t_deviû * mdeviû ; 178  g©t_­p * m­p ; 179  queue * mŒª§ùiÚs ; 180 št32_t mid ; 182 gušt mtimeout_id ; 184 boÞ mwa™_execu‹_wr™e ; 187  s£rviû_sdp { 188 št32_t m£rviû_hªdË ; 189 ušt32_t msdp_hªdË ; 192  c * gh®_c = NULL ; 193  bdaddr_t gad­‹r_addr ; 194  boÞ gsÿšg = çl£ ; 195  gadv”tisšg_út = 0; 197  queue * gg©t_­ps = NULL ; 198  queue * gg©t_deviûs = NULL ; 199  queue * g­p_cÚÃùiÚs = NULL ; 201  queue * g£rviûs_sdp = NULL ; 203  queue * gli¡’_­ps = NULL ; 204  g©t_db * gg©t_db = NULL ; 206  g©t_db_©Œibu‹ * g£rviû_chªged_©Œib = NULL ; 208  GIOChªÃl * gË_io = NULL ; 209  GIOChªÃl * gb»dr_io = NULL ; 211  ušt32_t gg©t_sdp_hªdË = 0; 212  ušt32_t gg­_sdp_hªdË = 0; 213  ušt32_t gdis_sdp_hªdË = 0; 215  bt_üy±o * güy±o = NULL ; 217  g‹¡_þ›Á_if = 0; 218 cÚ¡ ušt8_t gTEST_UUID [] = { 223  boÞ $is_blu‘oÙh_uuid (cÚ¡ ušt8_t * uuid ) 225  i ; 227  i = 0; i < 16; i++) { 229 ià( i == 12 || i == 13) 232 ià( uuid [ i ] !ð BLUETOOTH_UUID [i]) 233  çl£ ; 236  Œue ; 237 } } 239  $ªdroid2uuid (cÚ¡ ušt8_t * uuid , bt_uuid_t * d¡ ) 241 ià( `is_blu‘oÙh_uuid ( uuid )) { 243 d¡ -> ty³ = BT_UUID16 ; 244 d¡ -> v®ue . u16 = ( uuid [13] << 8) + uuid[12]; 246  i ; 248 d¡ -> ty³ = BT_UUID128 ; 249  i = 0; i < 16; i++) 250 d¡ -> v®ue . u128 . d©a [ i ] = uuid [15 - i]; 252 } } 254  $uuid2ªdroid (cÚ¡ bt_uuid_t * ¤c , ušt8_t * uuid ) 256 bt_uuid_t uu128 ; 257 ušt8_t i ; 259 ià( ¤c -> ty³ !ð BT_UUID128 ) { 260 `bt_uuid_to_uuid128 ( ¤c , & uu128 ); 261 ¤c = & uu128 ; 264  i = 0; i < 16; i++) 265 uuid [15 - i ] = ¤c -> v®ue . u128 . d©a [i]; 266 } } 268  $h®_¤vc_id_to_–em’t_id (cÚ¡  h®_g©t_¤vc_id * äom , 269  –em’t_id * to ) 271 to -> š¡ªû = äom -> š¡_id ; 272 `ªdroid2uuid ( äom -> uuid , & to ->uuid); 273 } } 275  $–em’t_id_to_h®_¤vc_id (cÚ¡  –em’t_id * äom , 276 ušt8_t ´im¬y , 277  h®_g©t_¤vc_id * to ) 279 to -> is_´im¬y = ´im¬y ; 280 to -> š¡_id = äom -> š¡ªû ; 281 `uuid2ªdroid (& äom -> uuid , to ->uuid); 282 } } 284  $h®_g©t_id_to_–em’t_id (cÚ¡  h®_g©t_g©t_id * äom , 285  –em’t_id * to ) 287 to -> š¡ªû = äom -> š¡_id ; 288 `ªdroid2uuid ( äom -> uuid , & to ->uuid); 289 } } 291  $–em’t_id_to_h®_g©t_id (cÚ¡  –em’t_id * äom , 292  h®_g©t_g©t_id * to ) 294 to -> š¡_id = äom -> š¡ªû ; 295 `uuid2ªdroid (& äom -> uuid , to ->uuid); 296 } } 298  $de¡roy_ch¬aù”i¡ic (* d©a ) 300  ch¬aù”i¡ic * ch¬s = d©a ; 302 ià(! ch¬s ) 305 `queue_de¡roy ( ch¬s -> desütÜs , ä“ ); 306 `ä“ ( ch¬s ); 307 } } 309  $de¡roy_£rviû (* d©a ) 311  £rviû * ¤vc = d©a ; 313 ià(! ¤vc ) 316 `queue_de¡roy ( ¤vc -> ch¬s , de¡roy_ch¬aù”i¡ic ); 325 `queue_de¡roy ( ¤vc -> šþuded , NULL ); 327 `ä“ ( ¤vc ); 328 } } 330  boÞ $m©ch_­p_by_uuid (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 332 cÚ¡ ušt8_t * exp_uuid = u£r_d©a ; 333 cÚ¡  g©t_­p * þ›Á = d©a ; 335  ! `memcmp ( exp_uuid , þ›Á -> uuid , (client->uuid)); 336 } } 338  boÞ $m©ch_­p_by_id (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 340 št32_t exp_id = `PTR_TO_INT ( u£r_d©a ); 341 cÚ¡  g©t_­p * þ›Á = d©a ; 343  þ›Á -> id =ð exp_id ; 344 } } 346  g©t_­p * $fšd_­p_by_id ( št32_t id ) 348  `queue_fšd ( g©t_­ps , m©ch_­p_by_id , `INT_TO_PTR ( id )); 349 } } 351  boÞ $m©ch_by_v®ue (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 353  d©a =ð u£r_d©a ; 354 } } 356  boÞ $m©ch_deviû_by_bdaddr (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 358 cÚ¡  g©t_deviû * dev = d©a ; 359 cÚ¡ bdaddr_t * addr = u£r_d©a ; 361  ! `bacmp (& dev -> bdaddr , addr ); 362 } } 364  boÞ $m©ch_deviû_by_¡©e (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 366 cÚ¡  g©t_deviû * dev = d©a ; 368 ià( dev -> ¡©e !ð `PTR_TO_UINT ( u£r_d©a )) 369  çl£ ; 371  Œue ; 372 } } 374  boÞ $m©ch_³ndšg_deviû (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 376 cÚ¡  g©t_deviû * dev = d©a ; 378 ià(( dev -> ¡©e =ð DEVICE_CONNECT_INIT ) || 379 ( dev -> ¡©e =ð DEVICE_CONNECT_READY )) 380  Œue ; 382  çl£ ; 383 } } 385  boÞ $m©ch_cÚÃùiÚ_by_id (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 387 cÚ¡  ­p_cÚÃùiÚ * cÚn = d©a ; 388 cÚ¡ št32_t id = `PTR_TO_INT ( u£r_d©a ); 390  cÚn -> id == id; 391 } } 393  boÞ $m©ch_cÚÃùiÚ_by_deviû_ªd_­p (cÚ¡ * d©a , 394 cÚ¡ * u£r_d©a ) 396 cÚ¡  ­p_cÚÃùiÚ * cÚn = d©a ; 397 cÚ¡  ­p_cÚÃùiÚ * m©ch = u£r_d©a ; 399  cÚn -> deviû =ð m©ch ->deviû && cÚn-> ­p == match->app; 400 } } 402  ­p_cÚÃùiÚ * $fšd_cÚÃùiÚ_by_id ( št32_t cÚn_id ) 404  ­p_cÚÃùiÚ * cÚn ; 406 cÚn = `queue_fšd ( ­p_cÚÃùiÚs , m©ch_cÚÃùiÚ_by_id , 407 `INT_TO_PTR ( cÚn_id )); 408 ià( cÚn && cÚn-> deviû -> ¡©e =ð DEVICE_CONNECTED ) 409  cÚn ; 411  NULL ; 412 } } 414  boÞ $m©ch_cÚÃùiÚ_by_deviû (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 416 cÚ¡  ­p_cÚÃùiÚ * cÚn = d©a ; 417 cÚ¡  g©t_deviû * dev = u£r_d©a ; 419  cÚn -> deviû =ð dev ; 420 } } 422  boÞ $m©ch_cÚÃùiÚ_by_­p (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 424 cÚ¡  ­p_cÚÃùiÚ * cÚn = d©a ; 425 cÚ¡  g©t_­p * ­p = u£r_d©a ; 427  cÚn -> ­p ==‡pp; 428 } } 430  g©t_deviû * $fšd_deviû_by_addr (cÚ¡ bdaddr_t * addr ) 432  `queue_fšd ( g©t_deviûs , m©ch_deviû_by_bdaddr , addr ); 433 } } 435  g©t_deviû * $fšd_³ndšg_deviû () 437  `queue_fšd ( g©t_deviûs , m©ch_³ndšg_deviû , NULL ); 438 } } 440  g©t_deviû * $fšd_deviû_by_¡©e ( ušt32_t ¡©e ) 442  `queue_fšd ( g©t_deviûs , m©ch_deviû_by_¡©e , 443 `UINT_TO_PTR ( ¡©e )); 444 } } 446  boÞ $m©ch_¤vc_by_–em’t_id (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 448 cÚ¡  –em’t_id * exp_id = u£r_d©a ; 449 cÚ¡  £rviû *£rviû = d©a ; 451 ià( £rviû -> id . š¡ªû =ð exp_id ->instance) 452  ! `bt_uuid_cmp (& £rviû -> id . uuid , & exp_id ->uuid); 454  çl£ ; 455 } } 457  boÞ $m©ch_¤vc_by_high”_š¡_id (cÚ¡ * d©a , 458 cÚ¡ * u£r_d©a ) 460 cÚ¡  £rviû * s = d©a ; 461 ušt8_t š¡_id = `PTR_TO_INT ( u£r_d©a ); 464  š¡_id < s -> id . š¡ªû ; 465 } } 467  boÞ $m©ch_¤vc_by_bt_uuid (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 469 cÚ¡ bt_uuid_t * exp_uuid = u£r_d©a ; 470 cÚ¡  £rviû *£rviû = d©a ; 472  ! `bt_uuid_cmp ( exp_uuid , & £rviû -> id . uuid ); 473 } } 475  boÞ $m©ch_¤vc_by_¿nge (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 477 cÚ¡  £rviû * ¤vc = d©a ; 478 cÚ¡  ©t_¿nge * ¿nge = u£r_d©a ; 480  ! `memcmp (& ¤vc -> ´im . ¿nge ,„ange, (srvc->prim.range)); 481 } } 483  boÞ $m©ch_ch¬_by_high”_š¡_id (cÚ¡ * d©a , 484 cÚ¡ * u£r_d©a ) 486 cÚ¡  ch¬aù”i¡ic * ch = d©a ; 487 ušt8_t š¡_id = `PTR_TO_INT ( u£r_d©a ); 490  š¡_id < ch -> id . š¡ªû ; 491 } } 493  boÞ $m©ch_desü_by_–em’t_id (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 495 cÚ¡  –em’t_id * exp_id = u£r_d©a ; 496 cÚ¡  desütÜ * desü = d©a ; 498 ià( exp_id -> š¡ªû =ð desü -> id .instance) 499  ! `bt_uuid_cmp (& desü -> id . uuid , & exp_id ->uuid); 501  çl£ ; 502 } } 504  boÞ $m©ch_desü_by_high”_š¡_id (cÚ¡ * d©a , 505 cÚ¡ * u£r_d©a ) 507 cÚ¡  desütÜ * desü = d©a ; 508 ušt8_t š¡ªû = `PTR_TO_INT ( u£r_d©a ); 511  š¡ªû < desü -> id .instance; 512 } } 514  boÞ $m©ch_nÙifiÿtiÚ (cÚ¡ * a , cÚ¡ * b ) 516 cÚ¡  nÙifiÿtiÚ_d©a * a1 = a ; 517 cÚ¡  nÙifiÿtiÚ_d©a * b1 = b ; 519 ià( a1 -> cÚn !ð b1 ->conn) 520  çl£ ; 522 ià( `memcmp (& a1 -> ch , & b1 ->ch, (a1->ch))) 523  çl£ ; 525 ià( `memcmp (& a1 -> £rviû , & b1 ->service, (a1->service))) 526  çl£ ; 528  Œue ; 529 } } 531  boÞ $m©ch_ch¬_by_–em’t_id (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 533 cÚ¡  –em’t_id * exp_id = u£r_d©a ; 534 cÚ¡  ch¬aù”i¡ic * ch¬s = d©a ; 536 ià( exp_id -> š¡ªû =ð ch¬s -> id .instance) 537  ! `bt_uuid_cmp (& ch¬s -> id . uuid , & exp_id ->uuid); 539  çl£ ; 540 } } 542  $de¡roy_nÙifiÿtiÚ (* d©a ) 544  nÙifiÿtiÚ_d©a * nÙifiÿtiÚ = d©a ; 545  g©t_­p * ­p ; 547 ià(-- nÙifiÿtiÚ -> »f ) 550 ­p = nÙifiÿtiÚ -> cÚn ->app; 551 `queue_»move_if ( ­p -> nÙifiÿtiÚs , m©ch_nÙifiÿtiÚ , nÙifiÿtiÚ ); 552 `ä“ ( nÙifiÿtiÚ ); 553 } } 555  $uÄegi¡”_nÙifiÿtiÚ (* d©a ) 557  nÙifiÿtiÚ_d©a * nÙifiÿtiÚ = d©a ; 558  g©t_deviû * dev = nÙifiÿtiÚ -> cÚn -> deviû ; 565 ià(! `queue_fšd ( g©t_deviûs , m©ch_by_v®ue , dev )) 568 ià( nÙifiÿtiÚ -> nÙif_id && dev ) 569 `g_©Œib_uÄegi¡” ( dev -> ©Œib , nÙifiÿtiÚ -> nÙif_id ); 571 ià( nÙifiÿtiÚ -> šd_id && dev ) 572 `g_©Œib_uÄegi¡” ( dev -> ©Œib , nÙifiÿtiÚ -> šd_id ); 573 } } 575  $deviû_£t_¡©e ( g©t_deviû * dev , ušt32_t ¡©e ) 577  bda [18]; 579 `ba2¡r (& dev -> bdaddr , bda ); 580 `DBG ("g©t: Deviû % ¡©chªged % -> %s", bda , 581 deviû_¡©e_¡r [ dev -> ¡©e ], device_state_str[state]); 583 dev -> ¡©e = state; 584 } } 586  boÞ $auto_cÚÃù_Ë ( g©t_deviû * dev ) 589 ià( `bt_k”Ãl_cÚn_cÚŒÞ ()) { 590 cÚ¡ bdaddr_t * bdaddr ; 597 ià( dev -> bdaddr_ty³ =ð BDADDR_LE_RANDOM ) { 598 bdaddr = `bt_g‘_id_addr (& dev ->bdaddr, NULL ); 599 ià(! bdaddr ) 600  - EINVAL ; 602 bdaddr = & dev ->bdaddr; 605  `bt_auto_cÚÃù_add ( bdaddr ); 609 ià(! sÿšg ) { 610 ià(! `bt_Ë_discov”y_¡¬t ()) { 611 `”rÜ ("gatt: Could‚ot start scan"); 612  çl£ ; 616  Œue ; 617 } } 619  $cÚÃùiÚ_þ—nup ( g©t_deviû * deviû ) 621 ià( deviû -> w©ch_id ) { 622 `g_sourû_»move ( deviû -> w©ch_id ); 623 deviû -> w©ch_id = 0; 626 ià( deviû -> ©t_io ) { 627 `g_io_chªÃl_shutdown ( deviû -> ©t_io , FALSE , NULL ); 628 `g_io_chªÃl_uÄef ( deviû -> ©t_io ); 629 deviû -> ©t_io = NULL ; 632 ià( deviû -> ©Œib ) { 633 GA‰rib * ©Œib = deviû ->attrib; 635 ià( deviû -> £rv”_id > 0) 636 `g_©Œib_uÄegi¡” ( deviû -> ©Œib , deviû-> £rv”_id ); 638 ià( deviû -> šd_id > 0) 639 `g_©Œib_uÄegi¡” ( deviû -> ©Œib , 640 deviû -> šd_id ); 642 deviû -> ©Œib = NULL ; 643 `g_©Œib_ÿnûl_®l ( ©Œib ); 644 `g_©Œib_uÄef ( ©Œib ); 651 ià(! sÿšg && ( deviû -> ¡©e =ð DEVICE_CONNECT_INIT || 652 deviû -> ¡©e =ð DEVICE_CONNECT_READY )) { 653 ià(! `fšd_³ndšg_deviû ()) 654 `bt_Ë_discov”y_¡Ý ( NULL ); 658 ià(! `bt_deviû_is_bÚded (& deviû -> bdaddr )) 659 `queue_»move_®l ( deviû -> £rviûs , NULL , NULL, de¡roy_£rviû ); 661 `deviû_£t_¡©e ( deviû , DEVICE_DISCONNECTED ); 663 ià(! `queue_i£m±y ( deviû -> autocÚÃù_­ps )) { 664 `auto_cÚÃù_Ë ( deviû ); 665 `deviû_£t_¡©e ( deviû , DEVICE_CONNECT_INIT ); 667 `bt_auto_cÚÃù_»move (& deviû -> bdaddr ); 669 } } 671  $de¡roy_g©t_­p (* d©a ) 673  g©t_­p * ­p = d©a ; 682 ià( ­p -> ty³ =ð GATT_CLIENT ) 683  `queue_³ek_h—d ( ­p -> nÙifiÿtiÚs )) { 684  nÙifiÿtiÚ_d©a * nÙifiÿtiÚ ; 686 nÙifiÿtiÚ = `queue_pÝ_h—d ( ­p -> nÙifiÿtiÚs ); 687 `uÄegi¡”_nÙifiÿtiÚ ( nÙifiÿtiÚ ); 690 `queue_de¡roy ( ­p -> nÙifiÿtiÚs , ä“ ); 692 `ä“ ( ­p ); 693 } } 695 e³nd_»q_¡©e { 696 mREQUEST_INIT , 697 mREQUEST_PENDING , 698 mREQUEST_DONE , 701  s³ndšg_»que¡ { 702  g©t_db_©Œibu‹ * m©Œib ; 703  mËngth ; 704 ušt8_t * mv®ue ; 705 ušt16_t moff£t ; 707 ušt8_t * mfž‹r_v®ue ; 708 ušt16_t mfž‹r_vËn ; 710 ³nd_»q_¡©e m¡©e ; 711 ušt8_t m”rÜ ; 714  $de¡roy_³ndšg_»que¡ (* d©a ) 716  ³ndšg_»que¡ * ’Œy = d©a ; 718 `ä“ ( ’Œy -> v®ue ); 719 `ä“ ( ’Œy -> fž‹r_v®ue ); 720 `ä“ ( ’Œy ); 721 } } 723  $de¡roy_deviû (* d©a ) 725  g©t_deviû * dev = d©a ; 727 ià(! dev ) 730 `queue_de¡roy ( dev -> £rviûs , de¡roy_£rviû ); 731 `queue_de¡roy ( dev -> ³ndšg_»que¡s , de¡roy_³ndšg_»que¡ ); 732 `queue_de¡roy ( dev -> autocÚÃù_­ps , NULL ); 734 `bt_auto_cÚÃù_»move (& dev -> bdaddr ); 736 `ä“ ( dev ); 737 } } 739  g©t_deviû * $deviû_»f ( g©t_deviû * deviû ) 741 ià(! deviû ) 742  NULL ; 744 deviû -> »f ++; 746  deviû ; 747 } } 749  $deviû_uÄef ( g©t_deviû * deviû ) 751 ià(! deviû ) 754 ià(-- deviû -> »f ) 757 `de¡roy_deviû ( deviû ); 758 } } 760  g©t_deviû * $ü—‹_deviû (cÚ¡ bdaddr_t * addr ) 762  g©t_deviû * dev ; 764 dev = `Ãw0 ( g©t_deviû , 1); 765 ià(! dev ) 766  NULL ; 768 `baýy (& dev -> bdaddr , addr ); 770 dev -> £rviûs = `queue_Ãw (); 771 ià(! dev -> £rviûs ) { 772 `”rÜ ("gatt: Failedo‡llocate memory for client"); 773 `de¡roy_deviû ( dev ); 774  NULL ; 777 dev -> autocÚÃù_­ps = `queue_Ãw (); 778 ià(! dev -> autocÚÃù_­ps ) { 779 `”rÜ ("gatt: Failedo‡llocate memory for client"); 780 `de¡roy_deviû ( dev ); 781  NULL ; 784 dev -> ³ndšg_»que¡s = `queue_Ãw (); 785 ià(! dev -> ³ndšg_»que¡s ) { 786 `”rÜ ("gatt: Failedo‡llocate memory for client"); 787 `de¡roy_deviû ( dev ); 788  NULL ; 791 ià(! `queue_push_h—d ( g©t_deviûs , dev )) { 792 `”rÜ ("gatt: Cannot…ush deviceo queue"); 793 `de¡roy_deviû ( dev ); 794  NULL ; 797  `deviû_»f ( dev ); 798 } } 800  $£nd_þ›Á_cÚÃùiÚ_nÙify ( ­p_cÚÃùiÚ * cÚÃùiÚ , 801 št32_t ¡©us ) 803  h®_ev_g©t_þ›Á_cÚÃù ev ; 805 ià( cÚÃùiÚ -> ­p -> func ) { 806 cÚÃùiÚ -> ­p -> `func (&cÚÃùiÚ-> deviû -> bdaddr , 807 ¡©us =ð GATT_SUCCESS ? 0 : - ENOTCONN , 808 cÚÃùiÚ -> deviû -> ©Œib ); 812 ev . þ›Á_if = cÚÃùiÚ -> ­p -> id ; 813 ev . cÚn_id = cÚÃùiÚ -> id ; 814 ev . ¡©us = status; 816 `bdaddr2ªdroid (& cÚÃùiÚ -> deviû -> bdaddr , & ev . bda ); 818 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , HAL_EV_GATT_CLIENT_CONNECT , 819 ( ev ), &ev); 820 } } 822  $£nd_£rv”_cÚÃùiÚ_nÙify ( ­p_cÚÃùiÚ * cÚÃùiÚ , 823 boÞ cÚÃùed ) 825  h®_ev_g©t_£rv”_cÚÃùiÚ ev ; 827 ià( cÚÃùiÚ -> ­p -> func ) { 828 cÚÃùiÚ -> ­p -> `func (&cÚÃùiÚ-> deviû -> bdaddr , 829 cÚÃùed ? 0 : - ENOTCONN , 830 cÚÃùiÚ -> deviû -> ©Œib ); 834 ev . £rv”_if = cÚÃùiÚ -> ­p -> id ; 835 ev . cÚn_id = cÚÃùiÚ -> id ; 836 ev . cÚÃùed = connected; 838 `bdaddr2ªdroid (& cÚÃùiÚ -> deviû -> bdaddr , & ev .bdaddr); 840 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 841 HAL_EV_GATT_SERVER_CONNECTION , ( ev ), &ev); 842 } } 844  $£nd_þ›Á_discÚÃùiÚ_nÙify ( ­p_cÚÃùiÚ * cÚÃùiÚ , 845 št32_t ¡©us ) 847  h®_ev_g©t_þ›Á_discÚÃù ev ; 849 ià( cÚÃùiÚ -> ­p -> func ) { 850 cÚÃùiÚ -> ­p -> `func (&cÚÃùiÚ-> deviû -> bdaddr , - ENOTCONN , 851 cÚÃùiÚ -> deviû -> ©Œib ); 855 ev . þ›Á_if = cÚÃùiÚ -> ­p -> id ; 856 ev . cÚn_id = cÚÃùiÚ -> id ; 857 ev . ¡©us = status; 859 `bdaddr2ªdroid (& cÚÃùiÚ -> deviû -> bdaddr , & ev . bda ); 861 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 862 HAL_EV_GATT_CLIENT_DISCONNECT , ( ev ), &ev); 864 } } 866  $£nd_­p_discÚÃù_nÙify ( ­p_cÚÃùiÚ * cÚÃùiÚ , 867 št32_t ¡©us ) 869 ià(! cÚÃùiÚ -> ­p ) 872 ià( cÚÃùiÚ -> ­p -> ty³ =ð GATT_CLIENT ) 873 `£nd_þ›Á_discÚÃùiÚ_nÙify ( cÚÃùiÚ , ¡©us ); 875 `£nd_£rv”_cÚÃùiÚ_nÙify ( cÚÃùiÚ , !! ¡©us ); 876 } } 878  $£nd_­p_cÚÃù_nÙify ( ­p_cÚÃùiÚ * cÚÃùiÚ , 879 št32_t ¡©us ) 881 ià(! cÚÃùiÚ -> ­p ) 884 ià( cÚÃùiÚ -> ­p -> ty³ =ð GATT_CLIENT ) 885 `£nd_þ›Á_cÚÃùiÚ_nÙify ( cÚÃùiÚ , ¡©us ); 886 ià( cÚÃùiÚ -> ­p -> ty³ =ð GATT_SERVER ) 887 `£nd_£rv”_cÚÃùiÚ_nÙify ( cÚÃùiÚ , ! ¡©us ); 888 } } 890  $discÚÃù_nÙify_by_deviû (* d©a , * u£r_d©a ) 892  ­p_cÚÃùiÚ * cÚn = d©a ; 893  g©t_deviû * dev = u£r_d©a ; 895 ià( dev !ð cÚn -> deviû || !cÚn-> ­p ) 898 ià( dev -> ¡©e =ð DEVICE_CONNECTED ) 899 `£nd_­p_discÚÃù_nÙify ( cÚn , GATT_SUCCESS ); 900 ià( dev -> ¡©e =ð DEVICE_CONNECT_INIT || 901 dev -> ¡©e =ð DEVICE_CONNECT_READY ) 902 `£nd_­p_cÚÃù_nÙify ( cÚn , GATT_FAILURE ); 903 } } 905  $de¡roy_cÚÃùiÚ (* d©a ) 907  ­p_cÚÃùiÚ * cÚn = d©a ; 909 ià( cÚn -> timeout_id > 0) 910 `g_sourû_»move ( cÚn -> timeout_id ); 912 ià(! `queue_fšd ( g©t_deviûs , m©ch_by_v®ue , cÚn -> deviû )) 913  þ—nup ; 915 cÚn -> deviû -> cÚn_út --; 916 ià( cÚn -> deviû -> cÚn_út == 0) 917 `cÚÃùiÚ_þ—nup ( cÚn -> deviû ); 919 þ—nup : 920 `queue_de¡roy ( cÚn -> Œª§ùiÚs , ä“ ); 921 `deviû_uÄef ( cÚn -> deviû ); 922 `ä“ ( cÚn ); 923 } } 925  $deviû_discÚÃù_þ›Ás ( g©t_deviû * dev ) 928 `queue_fÜ—ch ( ­p_cÚÃùiÚs , discÚÃù_nÙify_by_deviû , dev ); 931 `queue_»move_®l ( ­p_cÚÃùiÚs , m©ch_cÚÃùiÚ_by_deviû , dev , 932 de¡roy_cÚÃùiÚ ); 933 } } 935  gboÞ—n $discÚÃùed_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 936 gpoš‹r u£r_d©a ) 938  g©t_deviû * dev = u£r_d©a ; 939  sock , ”r = 0; 940 sockËn_t Ën ; 942 sock = `g_io_chªÃl_unix_g‘_fd ( io ); 943 Ën = ( ”r ); 944 ià(! `g‘sockÝt ( sock , SOL_SOCKET , SO_ERROR , & ”r , & Ën )) 945 `DBG ("% (%d)", `¡»¼Ü ( ”r ),ƒrr); 947 `deviû_discÚÃù_þ›Ás ( dev ); 949  FALSE ; 950 } } 952  ©t_hªdËr (cÚ¡ ušt8_t * du , ušt16_t Ën , gpoš‹r u£r_d©a ); 954  $exchªge_mtu_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 955 gpoš‹r u£r_d©a ) 957  g©t_deviû * deviû = u£r_d©a ; 958 GIOChªÃl * io ; 959 GE¼Ü * g”r = NULL ; 960 ušt16_t rmtu , mtu , imtu ; 962 ià( ¡©us ) { 963 `”rÜ ("g©t: MTUƒxchªge: %s", `©t_ecode2¡r ( ¡©us )); 964  çžed ; 967 ià(! `dec_mtu_»¥ ( pdu , ¶’ , & rmtu )) { 968 `”rÜ ("gatt: MTUƒxchange:…rotocolƒrror"); 969  çžed ; 972 ià( rmtu < ATT_DEFAULT_LE_MTU ) { 973 `”rÜ ("gatt: MTUƒxchange: mtuƒrror"); 974  çžed ; 977 io = `g_©Œib_g‘_chªÃl ( deviû -> ©Œib ); 979 `bt_io_g‘ ( io , & g”r , BT_IO_OPT_IMTU , & imtu , BT_IO_OPT_INVALID ); 980 ià( g”r ) { 981 `”rÜ ("g©t: Could‚Ù g‘ imtu: %s", g”r -> mes§ge ); 982 `g_”rÜ_ä“ ( g”r ); 987 mtu = `MIN ( rmtu , imtu ); 988 ià( mtu !ð imtu && ! `g_©Œib_£t_mtu ( deviû -> ©Œib , mtu)) { 989 `”rÜ ("gatt: MTUƒxchange failed"); 990  çžed ; 993 `DBG ("MTUƒxchªgsucûeded:„mtu:%d, old mtu:%d,‚ew mtu:%d", rmtu , 994 imtu , mtu ); 996 çžed : 997 `deviû_uÄef ( deviû ); 998 } } 1000  $£nd_exchªge_mtu_»que¡ ( g©t_deviû * deviû ) 1002 GIOChªÃl * io ; 1003 GE¼Ü * g”r = NULL ; 1004 ušt16_t imtu ; 1006 io = `g_©Œib_g‘_chªÃl ( deviû -> ©Œib ); 1008 `bt_io_g‘ ( io , & g”r , BT_IO_OPT_IMTU , & imtu , BT_IO_OPT_INVALID ); 1009 ià( g”r ) { 1010 `”rÜ ("g©t: Could‚Ù g‘ imtu: %s", g”r -> mes§ge ); 1011 `g_”rÜ_ä“ ( g”r ); 1016 ià(! `g©t_exchªge_mtu ( deviû -> ©Œib , imtu , exchªge_mtu_cb , 1017 `deviû_»f ( deviû ))) 1018 `deviû_uÄef ( deviû ); 1019 } } 1021  $ignÜe_cÚfœm©iÚ_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 1022 gušt16 Ën , gpoš‹r u£r_d©a ) 1025 } } 1027  $nÙify_©t_¿nge_chªge ( g©t_deviû * dev , 1028  ©t_¿nge * ¿nge ) 1030 ušt16_t hªdË ; 1031 ušt16_t Ëngth = 0; 1032 ušt16_t ccc ; 1033 ušt8_t * pdu ; 1034 size_t mtu ; 1035 GA‰ribResuÉFunc cÚfœm©iÚ_cb = NULL ; 1037 hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( £rviû_chªged_©Œib ); 1038 ià(! hªdË ) 1041 ccc = `bt_g‘_g©t_ccc (& dev -> bdaddr ); 1042 ià(! ccc ) 1045 pdu = `g_©Œib_g‘_bufãr ( dev -> ©Œib , & mtu ); 1047  ccc ) { 1049 Ëngth = `’c_nÙifiÿtiÚ ( hªdË , ( ušt8_t *è ¿nge , 1050 (* ¿nge ), pdu , mtu ); 1053 Ëngth = `’c_šdiÿtiÚ ( hªdË , ( ušt8_t *è ¿nge , 1054 (* ¿nge ), pdu , mtu ); 1055 cÚfœm©iÚ_cb = ignÜe_cÚfœm©iÚ_cb ; 1062 ià( Ëngth ) 1063 `g_©Œib_£nd ( dev -> ©Œib , 0, pdu , Ëngth , 1064 cÚfœm©iÚ_cb , NULL , NULL); 1065 } } 1067  ­p_cÚÃùiÚ * $ü—‹_cÚÃùiÚ ( g©t_deviû * deviû , 1068  g©t_­p * ­p ) 1070  ­p_cÚÃùiÚ * Ãw_cÚn ; 1071  št32_t Ï¡_cÚn_id = 1; 1074 Ãw_cÚn = `Ãw0 ( ­p_cÚÃùiÚ , 1); 1075 ià(! Ãw_cÚn ) 1076  NULL ; 1079 Ãw_cÚn -> ­p =‡pp; 1080 Ãw_cÚn -> id = Ï¡_cÚn_id ++; 1082 Ãw_cÚn -> Œª§ùiÚs = `queue_Ãw (); 1083 ià(! Ãw_cÚn -> Œª§ùiÚs ) { 1084 `ä“ ( Ãw_cÚn ); 1085  NULL ; 1088 ià(! `queue_push_h—d ( ­p_cÚÃùiÚs , Ãw_cÚn )) { 1089 `”rÜ ("gatt: Cannot…ush client onhe client queue!?"); 1090 `queue_de¡roy ( Ãw_cÚn -> Œª§ùiÚs , ä“ ); 1091 `ä“ ( Ãw_cÚn ); 1092  NULL ; 1095 Ãw_cÚn -> deviû = `deviû_»f (device); 1096 Ãw_cÚn -> deviû -> cÚn_út ++; 1098  Ãw_cÚn ; 1099 } } 1101  £rviû * $ü—‹_£rviû ( ušt8_t id , boÞ ´im¬y , * uuid , 1102 * d©a ) 1104  £rviû * s ; 1106 s = `Ãw0 ( £rviû , 1); 1107 ià(! s ) { 1108 `”rÜ ("gatt: Cannot‡llocate memory for gatt_primary"); 1109  NULL ; 1112 s -> ch¬s = `queue_Ãw (); 1113 ià(! s -> ch¬s ) { 1114 `”rÜ ("gatt: Cannot‡llocate memory for char cache"); 1115 `ä“ ( s ); 1116  NULL ; 1119 s -> šþuded = `queue_Ãw (); 1120 ià(! s -> šþuded ) { 1121 `”rÜ ("gatt: Cannot‡llocate memory for included queue"); 1122 `queue_de¡roy ( s -> ch¬s , NULL ); 1123 `ä“ ( s ); 1124  NULL ; 1127 ià( `bt_¡ršg_to_uuid (& s -> id . uuid , uuid) < 0) { 1128 `”rÜ ("gatt: Cannot convert stringo uuid"); 1129 `queue_de¡roy ( s -> ch¬s , NULL ); 1130 `ä“ ( s ); 1131  NULL ; 1134 s -> id . š¡ªû = id; 1137 s -> ´im¬y =…rimary; 1138 ià( s -> ´im¬y ) 1139 `memýy (& s -> ´im , d©a , (s->prim)); 1141 `memýy (& s -> šþ , d©a , (s->incl)); 1143  s ; 1144 } } 1146  $£nd_þ›Á_´im¬y_nÙify (* d©a , * u£r_d©a ) 1148  h®_ev_g©t_þ›Á_£¬ch_»suÉ ev ; 1149  £rviû * p = d©a ; 1150 št32_t cÚn_id = `PTR_TO_INT ( u£r_d©a ); 1153 ià(! p -> ´im¬y ) 1156 ev . cÚn_id = conn_id; 1157 `–em’t_id_to_h®_¤vc_id (& p -> id , 1, & ev . ¤vc_id ); 1159 `uuid2ªdroid (& p -> id . uuid , ev . ¤vc_id .uuid); 1161 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 1162 HAL_EV_GATT_CLIENT_SEARCH_RESULT , ( ev ), &ev); 1163 } } 1165  $£nd_þ›Á_£¬ch_com¶‘e_nÙify ( št32_t ¡©us , iÁ32_ˆ cÚn_id ) 1167  h®_ev_g©t_þ›Á_£¬ch_com¶‘e ev ; 1169 ev . ¡©us = status; 1170 ev . cÚn_id = conn_id; 1171 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 1172 HAL_EV_GATT_CLIENT_SEARCH_COMPLETE , ( ev ), &ev); 1173 } } 1175  sdiscov”_¤vc_d©a { 1176 bt_uuid_t muuid ; 1177  ­p_cÚÃùiÚ * mcÚn ; 1180  $discov”_¤vc_by_uuid_cb ( ušt8_t ¡©us , GSLi¡ * ¿nges , 1181 * u£r_d©a ) 1183  discov”_¤vc_d©a * cb_d©a = u£r_d©a ; 1184  g©t_´im¬y ´im ; 1185  £rviû * s ; 1186 št32_t g©t_¡©us ; 1187  g©t_deviû * dev = cb_d©a -> cÚn -> deviû ; 1188 ušt8_t š¡ªû_id = `queue_Ëngth ( dev -> £rviûs ); 1190 `DBG ("Stu %d", ¡©us ); 1192 ià( ¡©us ) { 1193 `”rÜ ("gatt: Discover…ri srvc filtered by uuid failed: %s", 1194 `©t_ecode2¡r ( ¡©us )); 1195 g©t_¡©us = GATT_FAILURE ; 1196  »¶y ; 1199 ià(! ¿nges ) { 1200 `šfo ("gatt: No…rimary services searched by uuid found"); 1201 g©t_¡©us = GATT_SUCCESS ; 1202  »¶y ; 1205 `bt_uuid_to_¡ršg (& cb_d©a -> uuid , ´im .uuid, (prim.uuid)); 1207 ; ¿nges ;„ªge ð¿nges-> Ãxt ) { 1208 `memýy (& ´im . ¿nge , ¿nges -> d©a , (prim.range)); 1210 s = `ü—‹_£rviû ( š¡ªû_id ++, Œue , ´im . uuid , &prim); 1211 ià(! s ) { 1212 g©t_¡©us = GATT_FAILURE ; 1213  »¶y ; 1216 ià(! `queue_push_ž ( dev -> £rviûs , s )) { 1217 `”rÜ ("gatt: Cannot…ush…rimary serviceohe†ist"); 1218 `de¡roy_£rviû ( s ); 1219 g©t_¡©us = GATT_FAILURE ; 1220  »¶y ; 1223 `£nd_þ›Á_´im¬y_nÙify ( s , `INT_TO_PTR ( cb_d©a -> cÚn -> id )); 1225 `DBG ("attr handle = 0x%04x,ƒnd grp handle = 0x%04x uuid: %s", 1226 ´im . ¿nge . ¡¬t ,…rim.¿nge. ’d ,…rim. uuid ); 1230 dev -> ·¹Ÿl_¤vc_£¬ch = Œue ; 1231 g©t_¡©us = GATT_SUCCESS ; 1233 »¶y : 1234 `£nd_þ›Á_£¬ch_com¶‘e_nÙify ( g©t_¡©us , cb_d©a -> cÚn -> id ); 1235 `ä“ ( cb_d©a ); 1236 } } 1238  $discov”_¤vc_®l_cb ( ušt8_t ¡©us , GSLi¡ * £rviûs , 1239 * u£r_d©a ) 1241  discov”_¤vc_d©a * cb_d©a = u£r_d©a ; 1242  g©t_deviû * dev = cb_d©a -> cÚn -> deviû ; 1243 št32_t g©t_¡©us ; 1244 GSLi¡ * l ; 1249 ušt8_t š¡ªû_id = `queue_Ëngth ( dev -> £rviûs ); 1251 `DBG ("Stu %d", ¡©us ); 1253 ià( ¡©us ) { 1254 `”rÜ ("gatt: Discover‡ll…rimary services failed: %s", 1255 `©t_ecode2¡r ( ¡©us )); 1256 g©t_¡©us = GATT_FAILURE ; 1257  »¶y ; 1260 ià(! £rviûs ) { 1261 `šfo ("gatt: No…rimary services found"); 1262 g©t_¡©us = GATT_SUCCESS ; 1263  »¶y ; 1266  l = £rviûs ;†;† =†-> Ãxt ) { 1267  g©t_´im¬y * ´im = l -> d©a ; 1268  £rviû * p ; 1270 ià( `queue_fšd ( dev -> £rviûs , m©ch_¤vc_by_¿nge , 1271 & ´im -> ¿nge )) 1274 p = `ü—‹_£rviû ( š¡ªû_id ++, Œue , ´im -> uuid ,…rim); 1275 ià(! p ) 1278 ià(! `queue_push_ž ( dev -> £rviûs , p )) { 1279 `”rÜ ("gatt: Cannot…ush…rimary serviceohe†ist"); 1280 `ä“ ( p ); 1284 `DBG ("attr handle = 0x%04x,ƒnd grp handle = 0x%04x uuid: %s", 1285 ´im -> ¿nge . ¡¬t ,…rim->¿nge. ’d ,…rim-> uuid ); 1292 `queue_fÜ—ch ( dev -> £rviûs , £nd_þ›Á_´im¬y_nÙify , 1293 `INT_TO_PTR ( cb_d©a -> cÚn -> id )); 1296 dev -> ·¹Ÿl_¤vc_£¬ch = çl£ ; 1297 g©t_¡©us = GATT_SUCCESS ; 1299 »¶y : 1300 `£nd_þ›Á_£¬ch_com¶‘e_nÙify ( g©t_¡©us , cb_d©a -> cÚn -> id ); 1301 `ä“ ( cb_d©a ); 1302 } } 1304  gboÞ—n $cÚÃùiÚ_timeout (* u£r_d©a ) 1306  ­p_cÚÃùiÚ * cÚn = u£r_d©a ; 1308 cÚn -> timeout_id = 0; 1310 `queue_»move ( ­p_cÚÃùiÚs , cÚn ); 1311 `de¡roy_cÚÃùiÚ ( cÚn ); 1313  FALSE ; 1314 } } 1316  $discov”_´im¬y_cb ( ušt8_t ¡©us , GSLi¡ * £rviûs , 1317 * u£r_d©a ) 1319  discov”_¤vc_d©a * cb_d©a = u£r_d©a ; 1320  ­p_cÚÃùiÚ * cÚn = cb_d©a ->conn; 1321  g©t_deviû * dev = cÚn -> deviû ; 1322 GSLi¡ * l , * uuids = NULL ; 1324 `DBG ("Stu %d", ¡©us ); 1326 ià( ¡©us ) { 1327 `”rÜ ("gatt: Discover‡ll…rimary services failed: %s", 1328 `©t_ecode2¡r ( ¡©us )); 1329 `ä“ ( cb_d©a ); 1334 ià(! £rviûs ) { 1335 `šfo ("gatt: No…rimary services found"); 1336 `ä“ ( cb_d©a ); 1341  l = £rviûs ;†;† =†-> Ãxt ) { 1342  g©t_´im¬y * ´im = l -> d©a ; 1343 ušt8_t * Ãw_uuid ; 1344 bt_uuid_t uuid , u128 ; 1346 `DBG ("uuid: %s", ´im -> uuid ); 1348 ià( `bt_¡ršg_to_uuid (& uuid , ´im ->uuid) < 0) { 1349 `”rÜ ("gatt: Cannot convert stringo uuid"); 1353 `bt_uuid_to_uuid128 (& uuid , & u128 ); 1354 Ãw_uuid = `g_memdup (& u128 . v®ue .u128, (u128.value.u128)); 1356 uuids = `g_¦i¡_´•’d (uuids, Ãw_uuid ); 1359 `bt_deviû_£t_uuids (& dev -> bdaddr , uuids ); 1361 `ä“ ( cb_d©a ); 1363 cÚn -> timeout_id = `g_timeout_add_£cÚds ( GATT_CONN_TIMEOUT , 1364 cÚÃùiÚ_timeout , cÚn ); 1365 } } 1367  gušt $£¬ch_dev_fÜ_¤vc ( ­p_cÚÃùiÚ * cÚn , bt_uuid_t * uuid ) 1369  discov”_¤vc_d©a * cb_d©a = 1370 `Ãw0 ( discov”_¤vc_d©a , 1); 1372 ià(! cb_d©a ) { 1373 `”rÜ ("gatt: Cannot‡llocate cb data"); 1377 cb_d©a -> cÚn = conn; 1379 ià( uuid ) { 1380 `memýy (& cb_d©a -> uuid , uuid, (cb_data->uuid)); 1381  `g©t_discov”_´im¬y ( cÚn -> deviû -> ©Œib , uuid , 1382 discov”_¤vc_by_uuid_cb , cb_d©a ); 1386 ià( cÚn -> ­p ) 1387  `g©t_discov”_´im¬y ( cÚn -> deviû -> ©Œib , NULL , 1388 discov”_¤vc_®l_cb , cb_d©a ); 1390  `g©t_discov”_´im¬y ( cÚn -> deviû -> ©Œib , NULL , 1391 discov”_´im¬y_cb , cb_d©a ); 1392 } } 1394  scÚÃù_d©a { 1395  g©t_deviû * mdev ; 1396 št32_t m¡©us ; 1399  $£nd_­p_cÚÃù_nÙifiÿtiÚs (* d©a , * u£r_d©a ) 1401  ­p_cÚÃùiÚ * cÚn = d©a ; 1402  cÚÃù_d©a * cÚ_d©a = u£r_d©a ; 1404 ià( cÚn -> deviû =ð cÚ_d©a -> dev ) 1405 `£nd_­p_cÚÃù_nÙify ( cÚn , cÚ_d©a -> ¡©us ); 1406 } } 1408  ­p_cÚÃùiÚ * $fšd_cÚn_w™hout_­p ( g©t_deviû * dev ) 1410  ­p_cÚÃùiÚ cÚn_m©ch ; 1412 cÚn_m©ch . deviû = dev ; 1413 cÚn_m©ch . ­p = NULL ; 1415  `queue_fšd ( ­p_cÚÃùiÚs , m©ch_cÚÃùiÚ_by_deviû_ªd_­p , 1416 & cÚn_m©ch ); 1417 } } 1419  ­p_cÚÃùiÚ * $fšd_cÚn (cÚ¡ bdaddr_t * addr , št32_t ­p_id ) 1421  ­p_cÚÃùiÚ cÚn_m©ch ; 1422  g©t_deviû * dev = NULL ; 1423  g©t_­p * ­p ; 1426 ­p = `fšd_­p_by_id ( ­p_id ); 1427 ià(! ­p ) { 1428 `”rÜ ("g©t: Cl›Á id %d‚Ù found", ­p_id ); 1429  NULL ; 1433 dev = `fšd_deviû_by_addr ( addr ); 1434 ià(! dev ) { 1435 `”rÜ ("g©t: Cl›Á id %d‚Ù found", ­p_id ); 1436  NULL ; 1439 cÚn_m©ch . deviû = dev ; 1440 cÚn_m©ch . ­p =‡pp; 1442  `queue_fšd ( ­p_cÚÃùiÚs , m©ch_cÚÃùiÚ_by_deviû_ªd_­p , 1443 & cÚn_m©ch ); 1444 } } 1446  $ü—‹_­p_cÚÃùiÚ (* d©a , * u£r_d©a ) 1448  g©t_deviû * dev = u£r_d©a ; 1449  g©t_­p * ­p ; 1451 ­p = `fšd_­p_by_id ( `PTR_TO_INT ( d©a )); 1452 ià(! ­p ) 1455 `DBG ("AutocÚÃù‡µliÿtiÚ id=%d", ­p -> id ); 1457 ià(! `fšd_cÚn (& dev -> bdaddr , `PTR_TO_INT ( d©a ))) 1458 `ü—‹_cÚÃùiÚ ( dev , ­p ); 1459 } } 1461  $šd_hªdËr (cÚ¡ ušt8_t * cmd , ušt16_t cmd_Ën , 1462 gpoš‹r u£r_d©a ) 1464  g©t_deviû * dev = u£r_d©a ; 1465 ušt16_t »¥_Ëngth = 0; 1466 size_t Ëngth ; 1468 ušt8_t * Ýdu = `g_©Œib_g‘_bufãr ( dev -> ©Œib , & Ëngth ); 1476 »¥_Ëngth = `’c_cÚfœm©iÚ ( Ýdu , Ëngth ); 1477 ià( »¥_Ëngth ) 1478 `g_©Œib_£nd ( dev -> ©Œib , 0, Ýdu , »¥_Ëngth , NULL , NULL, 1479 NULL ); 1480 } } 1482  $cÚÃù_cb ( GIOChªÃl * io , GE¼Ü * g”r , gpoš‹r u£r_d©a ) 1484  g©t_deviû * dev = u£r_d©a ; 1485  cÚÃù_d©a d©a ; 1486  ©t_¿nge ¿nge ; 1487 ušt32_t ¡©us ; 1488 GA‰rib * ©Œib ; 1489 ušt16_t mtu ; 1490 ušt16_t cid ; 1492 ià( dev -> ¡©e !ð DEVICE_CONNECT_READY ) { 1493 `”rÜ ("gatt: Device‚ot in‡ connecting state!?"); 1494 `g_io_chªÃl_shutdown ( io , TRUE , NULL ); 1498 ià( dev -> ©t_io ) { 1499 `g_io_chªÃl_uÄef ( dev -> ©t_io ); 1500 dev -> ©t_io = NULL ; 1503 ià( g”r ) { 1504 `”rÜ ("g©t: cÚÃùiÚ fažed %s", g”r -> mes§ge ); 1505 `deviû_£t_¡©e ( dev , DEVICE_DISCONNECTED ); 1506 ¡©us = GATT_FAILURE ; 1507  »¶y ; 1510 ià(! `bt_io_g‘ ( io , & g”r , BT_IO_OPT_IMTU , & mtu , BT_IO_OPT_CID , & cid , 1511 BT_IO_OPT_INVALID è|| cid =ð ATT_CID ) 1512 mtu = ATT_DEFAULT_LE_MTU ; 1514 ©Œib = `g_©Œib_Ãw ( io , mtu ); 1515 ià(! ©Œib ) { 1516 `”rÜ ("gatt: unableo create‚ew GAttrib instance"); 1517 `deviû_£t_¡©e ( dev , DEVICE_DISCONNECTED ); 1518 ¡©us = GATT_FAILURE ; 1519  »¶y ; 1522 dev -> ©Œib =‡ttrib; 1523 dev -> w©ch_id = `g_io_add_w©ch ( io , G_IO_HUP | G_IO_ERR | G_IO_NVAL , 1524 discÚÃùed_cb , dev ); 1526 dev -> £rv”_id = `g_©Œib_»gi¡” ( ©Œib , GATTRIB_ALL_REQS , 1527 GATTRIB_ALL_HANDLES , 1528 ©t_hªdËr , dev , NULL ); 1529 dev -> šd_id = `g_©Œib_»gi¡” ( ©Œib , ATT_OP_HANDLE_IND , 1530 GATTRIB_ALL_HANDLES , 1531 šd_hªdËr , dev , NULL ); 1532 ià(( dev -> £rv”_id && dev-> šd_id ) == 0) 1533 `”rÜ ("gatt: Could‚ot‡ttacho server"); 1535 `deviû_£t_¡©e ( dev , DEVICE_CONNECTED ); 1539 `£nd_exchªge_mtu_»que¡ ( dev ); 1547 ¿nge . ¡¬t = `g©t_db_©Œibu‹_g‘_hªdË ( £rviû_chªged_©Œib ) + 2; 1548 ¿nge . ’d = 0xffff; 1555 `nÙify_©t_¿nge_chªge ( dev , & ¿nge ); 1557 ¡©us = GATT_SUCCESS ; 1559 »¶y : 1564 `queue_fÜ—ch ( dev -> autocÚÃù_­ps , ü—‹_­p_cÚÃùiÚ , dev); 1566 ià(! dev -> cÚn_út ) { 1567  ­p_cÚÃùiÚ * cÚn ; 1569 ià(! dev -> ©Œib ) 1572 cÚn = `ü—‹_cÚÃùiÚ ( dev , NULL ); 1573 ià(! cÚn ) 1576 ià( `bt_is_·œšg (& dev -> bdaddr )) 1582 cÚn -> timeout_id = `g_timeout_add_£cÚds ( 1583 GATT_PAIR_CONN_TIMEOUT , 1584 cÚÃùiÚ_timeout , cÚn ); 1591 `£¬ch_dev_fÜ_¤vc ( cÚn , NULL ); 1594 d©a . dev = dev; 1595 d©a . ¡©us = status; 1596 `queue_fÜ—ch ( ­p_cÚÃùiÚs , £nd_­p_cÚÃù_nÙifiÿtiÚs , & d©a ); 1597 `deviû_uÄef ( dev ); 1600 ià( sÿšg ) 1601 `bt_Ë_discov”y_¡¬t (); 1604 } } 1606  $cÚÃù_Ë ( g©t_deviû * dev ) 1608 GIOChªÃl * io ; 1609 GE¼Ü * g”r = NULL ; 1610  addr [18]; 1611 cÚ¡ bdaddr_t * bdaddr ; 1612 ušt8_t bdaddr_ty³ ; 1614 `ba2¡r (& dev -> bdaddr , addr ); 1617 ià( dev -> ©t_io ) { 1618 `šfo ("g©t: cÚÃùiÚØdev % i Úgošg", addr ); 1619  - EALREADY ; 1622 `DBG ("CÚÃùiÚ‡‰em±o: %s", addr ); 1629 ià( dev -> bdaddr_ty³ =ð BDADDR_LE_RANDOM ) { 1630 bdaddr = `bt_g‘_id_addr (& dev ->bdaddr, & bdaddr_ty³ ); 1631 ià(! bdaddr ) 1632  - EINVAL ; 1634 bdaddr = & dev ->bdaddr; 1635 bdaddr_ty³ = dev ->bdaddr_type; 1642 io = `bt_io_cÚÃù ( cÚÃù_cb , `deviû_»f ( dev ), NULL , & g”r , 1643 BT_IO_OPT_SOURCE_BDADDR , 1644 & ad­‹r_addr , 1645 BT_IO_OPT_SOURCE_TYPE , BDADDR_LE_PUBLIC , 1646 BT_IO_OPT_DEST_BDADDR , bdaddr , 1647 BT_IO_OPT_DEST_TYPE , bdaddr_ty³ , 1648 BT_IO_OPT_CID , ATT_CID , 1649 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 1650 BT_IO_OPT_INVALID ); 1651 ià(! io ) { 1652 `”rÜ ("g©t: Fažed bt_io_cÚÃù(%s): %s", addr , 1653 g”r -> mes§ge ); 1654 `g_”rÜ_ä“ ( g”r ); 1655  - EIO ; 1659 dev -> ©t_io = io ; 1662 } } 1664  $cÚÃù_Ãxt_dev () 1666  g©t_deviû * dev ; 1668 `DBG (""); 1670 dev = `fšd_deviû_by_¡©e ( DEVICE_CONNECT_READY ); 1671 ià(! dev ) 1672  - ENODEV ; 1674  `cÚÃù_Ë ( dev ); 1675 } } 1677  $bt_Ë_discov”y_¡Ý_cb () 1679 `DBG (""); 1682 ià( `cÚÃù_Ãxt_dev () < 0) 1683 `bt_Ë_discov”y_¡¬t (); 1684 } } 1686  $Ë_deviû_found_hªdËr (cÚ¡ bdaddr_t * addr , ušt8_t addr_ty³ , 1687  rssi , ušt16_t eœ_Ën , 1688 cÚ¡ * eœ , 1689 boÞ cÚÃùabË , boÞ bÚded ) 1691 ušt8_t buf [ IPC_MTU ]; 1692  h®_ev_g©t_þ›Á_sÿn_»suÉ * ev = (*è buf ; 1693  g©t_deviû * dev ; 1694  bda [18]; 1696 ià(! sÿšg ) 1697  dÚe ; 1699 `ba2¡r ( addr , bda ); 1700 `DBG ("LE Deviû found: %s,„ssi: %d,‡dv_d©a: %d", bda , rssi , !! eœ ); 1702 `bdaddr2ªdroid ( addr , ev -> bda ); 1703 ev -> rssi =„ssi; 1704 ev -> Ën = eœ_Ën ; 1706 `memýy ( ev -> adv_d©a , eœ ,ƒv-> Ën ); 1708 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 1709 HAL_EV_GATT_CLIENT_SCAN_RESULT , 1710 (* ev è+ƒv-> Ën ,ƒv); 1712 dÚe : 1713 ià(! cÚÃùabË ) 1717 ià( `bt_k”Ãl_cÚn_cÚŒÞ ()) 1720 dev = `fšd_deviû_by_addr ( addr ); 1721 ià(! dev ) { 1722 ià(! bÚded ) 1725 dev = `ü—‹_deviû ( addr ); 1728 ià(! dev || dev-> ¡©e !ð DEVICE_CONNECT_INIT ) 1731 `deviû_£t_¡©e ( dev , DEVICE_CONNECT_READY ); 1732 dev -> bdaddr_ty³ = addr_ty³ ; 1738 `bt_Ë_discov”y_¡Ý ( bt_Ë_discov”y_¡Ý_cb ); 1739 } } 1741  g©t_­p * $»gi¡”_­p (cÚ¡ ušt8_t * uuid , g©t_ty³_t ty³ ) 1743  št32_t ­¶iÿtiÚ_id = 1; 1744  g©t_­p * ­p ; 1746 ià( `queue_fšd ( g©t_­ps , m©ch_­p_by_uuid , uuid )) { 1747 `”rÜ ("gatt:‡pp uuid is‡lready on†ist"); 1748  NULL ; 1751 ­p = `Ãw0 ( g©t_­p , 1); 1752 ià(! ­p ) { 1753 `”rÜ ("gatt: Cannot‡llocate memory for„egistering‡pp"); 1754  NULL ; 1757 ­p -> ty³ =ype; 1759 ià( ­p -> ty³ =ð GATT_CLIENT ) { 1760 ­p -> nÙifiÿtiÚs = `queue_Ãw (); 1761 ià(! ­p -> nÙifiÿtiÚs ) { 1762 `”rÜ ("gatt: couldn't‡llocate‚otifications queue"); 1763 `de¡roy_g©t_­p ( ­p ); 1764  NULL ; 1768 `memýy ( ­p -> uuid , uuid, (app->uuid)); 1770 ­p -> id = ­¶iÿtiÚ_id ++; 1772 ià(! `queue_push_h—d ( g©t_­ps , ­p )) { 1773 `”rÜ ("gatt: Cannot…ush‡pp onhe†ist"); 1774 `de¡roy_g©t_­p ( ­p ); 1775  NULL ; 1778 ià(( ­p -> ty³ =ð GATT_SERVER ) && 1779 ! `queue_push_ž ( li¡’_­ps , `INT_TO_PTR ( ­p -> id ))) { 1780 `”rÜ ("gatt: Cannot…ush server onhe†ist"); 1781 `de¡roy_g©t_­p ( ­p ); 1782  NULL ; 1785  ­p ; 1786 } } 1788  $hªdË_þ›Á_»gi¡” (cÚ¡ * buf , ušt16_t Ën ) 1790 cÚ¡  h®_cmd_g©t_þ›Á_»gi¡” * cmd = buf ; 1791  h®_ev_g©t_þ›Á_»gi¡”_þ›Á ev ; 1792  g©t_­p * ­p ; 1794 `DBG (""); 1796 `mem£t (& ev , 0, (ev)); 1798 ­p = `»gi¡”_­p ( cmd -> uuid , GATT_CLIENT ); 1800 ià( ­p ) { 1801 ev . þ›Á_if = ­p -> id ; 1802 ev . ¡©us = GATT_SUCCESS ; 1804 ev . ¡©us = GATT_FAILURE ; 1807 `memýy ( ev . ­p_uuid , cmd -> uuid , (ev.app_uuid)); 1809 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 1810 HAL_EV_GATT_CLIENT_REGISTER_CLIENT , ( ev ), &ev); 1812 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , HAL_OP_GATT_CLIENT_REGISTER , 1813 HAL_STATUS_SUCCESS ); 1814 } } 1816  $hªdË_þ›Á_sÿn (cÚ¡ * buf , ušt16_t Ën ) 1818 cÚ¡  h®_cmd_g©t_þ›Á_sÿn * cmd = buf ; 1819 ušt8_t ¡©us ; 1821 `DBG ("Ãw s‹ %d", cmd -> ¡¬t ); 1823 ià( cmd -> þ›Á_if != 0) { 1824 * »gi¡”ed = `fšd_­p_by_id ( cmd -> þ›Á_if ); 1826 ià(! »gi¡”ed ) { 1827 `”rÜ ("gatt: Client‚ot„egistered"); 1828 ¡©us = HAL_STATUS_FAILED ; 1829  »¶y ; 1834 ià(! cmd -> ¡¬t ) { 1835 `DBG ("Stopping LE SCAN"); 1837 ià( sÿšg ) { 1838 `bt_Ë_discov”y_¡Ý ( NULL ); 1839 sÿšg = çl£ ; 1842 ¡©us = HAL_STATUS_SUCCESS ; 1843  »¶y ; 1847 ià( sÿšg ) { 1848 ¡©us = HAL_STATUS_SUCCESS ; 1849  »¶y ; 1853 ià(! `bt_Ë_discov”y_¡¬t ()) { 1854 `”rÜ ("gatt: LE scan switch failed"); 1855 ¡©us = HAL_STATUS_FAILED ; 1856  »¶y ; 1858 sÿšg = Œue ; 1859 ¡©us = HAL_STATUS_SUCCESS ; 1861 »¶y : 1862 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , HAL_OP_GATT_CLIENT_SCAN , 1863 ¡©us ); 1864 } } 1866  $Œigg”_discÚÃùiÚ ( ­p_cÚÃùiÚ * cÚÃùiÚ ) 1869 ià( `queue_»move ( ­p_cÚÃùiÚs , cÚÃùiÚ )) 1870 `£nd_­p_discÚÃù_nÙify ( cÚÃùiÚ , GATT_SUCCESS ); 1872 `de¡roy_cÚÃùiÚ ( cÚÃùiÚ ); 1873 } } 1875  $­p_discÚÃù_deviûs ( g©t_­p * þ›Á ) 1877  ­p_cÚÃùiÚ * cÚn ; 1880 cÚn = `queue_»move_if ( ­p_cÚÃùiÚs , m©ch_cÚÃùiÚ_by_­p , 1881 þ›Á ); 1882  cÚn ) { 1883 `Œigg”_discÚÃùiÚ ( cÚn ); 1885 cÚn = `queue_»move_if ( ­p_cÚÃùiÚs , 1886 m©ch_cÚÃùiÚ_by_­p , þ›Á ); 1888 } } 1890  $cÚÃù_b»dr ( g©t_deviû * dev ) 1892 BtIOSecLev– £c_Ëv– ; 1893 GIOChªÃl * io ; 1894 GE¼Ü * g”r = NULL ; 1895  addr [18]; 1897 `ba2¡r (& dev -> bdaddr , addr ); 1900 ià( dev -> ©t_io ) { 1901 `šfo ("g©t: cÚÃùiÚØdev % i Úgošg", addr ); 1902  - EALREADY ; 1905 `DBG ("CÚÃùiÚ‡‰em±o: %s", addr ); 1907 £c_Ëv– = `bt_deviû_is_bÚded (& dev -> bdaddr è? BT_IO_SEC_MEDIUM : 1908 BT_IO_SEC_LOW ; 1910 io = `bt_io_cÚÃù ( cÚÃù_cb , `deviû_»f ( dev ), NULL , & g”r , 1911 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 1912 BT_IO_OPT_SOURCE_TYPE , BDADDR_BREDR , 1913 BT_IO_OPT_DEST_BDADDR , & dev -> bdaddr , 1914 BT_IO_OPT_DEST_TYPE , BDADDR_BREDR , 1915 BT_IO_OPT_PSM , ATT_PSM , 1916 BT_IO_OPT_SEC_LEVEL , £c_Ëv– , 1917 BT_IO_OPT_INVALID ); 1918 ià(! io ) { 1919 `”rÜ ("g©t: Fažed bt_io_cÚÃù(%s): %s", addr , 1920 g”r -> mes§ge ); 1921 `g_”rÜ_ä“ ( g”r ); 1922  - EIO ; 1925 `deviû_£t_¡©e ( dev , DEVICE_CONNECT_READY ); 1928 dev -> ©t_io = io ; 1931 } } 1933  boÞ $Œigg”_cÚÃùiÚ ( ­p_cÚÃùiÚ * cÚÃùiÚ ) 1935 boÞ »t ; 1937  cÚÃùiÚ -> deviû -> ¡©e ) { 1938  DEVICE_DISCONNECTED : 1943 ià( `bt_deviû_Ï¡_£’_b—»r (& cÚÃùiÚ -> deviû -> bdaddr ) == 1944 BDADDR_BREDR ) 1945  `cÚÃù_b»dr ( cÚÃùiÚ -> deviû ) == 0; 1948 »t = `auto_cÚÃù_Ë ( cÚÃùiÚ -> deviû ); 1949 ià( »t ) 1950 `deviû_£t_¡©e ( cÚÃùiÚ -> deviû , 1951 DEVICE_CONNECT_INIT ); 1953  DEVICE_CONNECTED : 1954 `£nd_­p_cÚÃù_nÙify ( cÚÃùiÚ , GATT_SUCCESS ); 1955 »t = Œue ; 1957  DEVICE_CONNECT_READY : 1958  DEVICE_CONNECT_INIT : 1961 »t = Œue ; 1965  »t ; 1966 } } 1968  $»move_autocÚÃù_deviû ( g©t_deviû * dev ) 1970 `bt_auto_cÚÃù_»move (& dev -> bdaddr ); 1972 ià( dev -> ¡©e =ð DEVICE_CONNECT_INIT ) 1973 `deviû_£t_¡©e ( dev , DEVICE_DISCONNECTED ); 1975 `deviû_uÄef ( dev ); 1976 } } 1978  $þ—r_autocÚÃù_deviûs (* d©a , * u£r_d©a ) 1980  g©t_deviû * dev = d©a ; 1982 ià( `queue_»move ( dev -> autocÚÃù_­ps , u£r_d©a )) 1983 ià( `queue_i£m±y ( dev -> autocÚÃù_­ps )) 1984 `»move_autocÚÃù_deviû ( dev ); 1985 } } 1987  ušt8_t $uÄegi¡”_­p ( þ›Á_if ) 1989  g©t_­p * þ ; 1995 `queue_fÜ—ch ( g©t_deviûs , þ—r_autocÚÃù_deviûs , `INT_TO_PTR ( þ›Á_if )); 1997 þ = `queue_»move_if ( g©t_­ps , m©ch_­p_by_id , `INT_TO_PTR ( þ›Á_if )); 1998 ià(! þ ) { 1999 `”rÜ ("g©t: cl›Á_if=%d‚Ù found", þ›Á_if ); 2001  HAL_STATUS_FAILED ; 2005 `­p_discÚÃù_deviûs ( þ ); 2006 `de¡roy_g©t_­p ( þ ); 2008  HAL_STATUS_SUCCESS ; 2009 } } 2011  $£nd_þ›Á_li¡’_nÙify ( št32_t id , iÁ32_ˆ ¡©us ) 2013  h®_ev_g©t_þ›Á_li¡’ ev ; 2016 ev . £rv”_if = id ; 2017 ev . ¡©us = status; 2019 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , HAL_EV_GATT_CLIENT_LISTEN , 2020 ( ev ), &ev); 2021 } } 2023  sli¡’_d©a { 2024 št32_t mþ›Á_id ; 2025 boÞ m¡¬t ; 2028  li¡’_d©a * $ü—‹_li¡’_d©a ( št32_t þ›Á_id , boÞ ¡¬t ) 2030  li¡’_d©a * d ; 2032 d = `Ãw0 ( li¡’_d©a , 1); 2033 ià(! d ) 2034  NULL ; 2036 d -> þ›Á_id = client_id; 2037 d -> ¡¬t = start; 2039  d ; 2040 } } 2042  $£t_adv”tisšg_cb ( ušt8_t ¡©us , * u£r_d©a ) 2044  li¡’_d©a * l = u£r_d©a ; 2046 `£nd_þ›Á_li¡’_nÙify ( l -> þ›Á_id , ¡©us ); 2049 ià(! ¡©us ) 2050 adv”tisšg_út = l -> ¡¬t ? 1 : 0; 2057 ià(( l -> ¡¬t && ¡©us ) || (!l->start && !status)) 2058 `queue_»move ( li¡’_­ps , `INT_TO_PTR ( l -> þ›Á_id )); 2060 `ä“ ( l ); 2061 } } 2063  $hªdË_þ›Á_uÄegi¡” (cÚ¡ * buf , ušt16_t Ën ) 2065 cÚ¡  h®_cmd_g©t_þ›Á_uÄegi¡” * cmd = buf ; 2066 ušt8_t ¡©us ; 2067 * li¡’šg_þ›Á ; 2068  li¡’_d©a * d©a ; 2070 `DBG (""); 2072 li¡’šg_þ›Á = `queue_fšd ( li¡’_­ps , m©ch_by_v®ue , 2073 `INT_TO_PTR ( cmd -> þ›Á_if )); 2075 ià( li¡’šg_þ›Á ) { 2076 adv”tisšg_út --; 2077 `queue_»move ( li¡’_­ps , `INT_TO_PTR ( cmd -> þ›Á_if )); 2079 ¡©us = `uÄegi¡”_­p ( cmd -> þ›Á_if ); 2080  »¶y ; 2083 ià(! adv”tisšg_út ) { 2084 d©a = `ü—‹_li¡’_d©a ( cmd -> þ›Á_if , çl£ ); 2085 ià(! d©a ) { 2086 `”rÜ ("gatt: Could‚ot‡llocate†isten data"); 2087 ¡©us = HAL_STATUS_NOMEM ; 2088  »¶y ; 2091 ià(! `bt_Ë_£t_adv”tisšg ( d©a -> ¡¬t , £t_adv”tisšg_cb , 2092 d©a )) { 2093 `”rÜ ("gatt: Could‚ot set‡dvertising"); 2094 ¡©us = HAL_STATUS_FAILED ; 2095 `ä“ ( d©a ); 2096  »¶y ; 2100 ¡©us = `uÄegi¡”_­p ( cmd -> þ›Á_if ); 2102 »¶y : 2103 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 2104 HAL_OP_GATT_CLIENT_UNREGISTER , ¡©us ); 2105 } } 2107  ušt8_t $hªdË_cÚÃù ( št32_t ­p_id , cÚ¡ bdaddr_t * addr ) 2109  ­p_cÚÃùiÚ cÚn_m©ch ; 2110  ­p_cÚÃùiÚ * cÚn ; 2111  g©t_deviû * deviû ; 2112  g©t_­p * ­p ; 2114 `DBG (""); 2116 ­p = `fšd_­p_by_id ( ­p_id ); 2117 ià(! ­p ) 2118  HAL_STATUS_FAILED ; 2120 deviû = `fšd_deviû_by_addr ( addr ); 2121 ià(! deviû ) { 2122 deviû = `ü—‹_deviû ( addr ); 2123 ià(! deviû ) 2124  HAL_STATUS_FAILED ; 2127 cÚn_m©ch . deviû = device; 2128 cÚn_m©ch . ­p =‡pp; 2130 cÚn = `queue_fšd ( ­p_cÚÃùiÚs , m©ch_cÚÃùiÚ_by_deviû_ªd_­p , 2131 & cÚn_m©ch ); 2132 ià(! cÚn ) { 2133 cÚn = `ü—‹_cÚÃùiÚ ( deviû , ­p ); 2134 ià(! cÚn ) 2135  HAL_STATUS_NOMEM ; 2138 ià(! `Œigg”_cÚÃùiÚ ( cÚn )) 2139  HAL_STATUS_FAILED ; 2141  HAL_STATUS_SUCCESS ; 2142 } } 2144  $hªdË_þ›Á_cÚÃù (cÚ¡ * buf , ušt16_t Ën ) 2146 cÚ¡  h®_cmd_g©t_þ›Á_cÚÃù * cmd = buf ; 2147 ušt8_t ¡©us ; 2148 bdaddr_t addr ; 2150 `DBG (""); 2152 `ªdroid2bdaddr (& cmd -> bdaddr , & addr ); 2158 ¡©us = `hªdË_cÚÃù ( cmd -> þ›Á_if , & addr ); 2160 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , HAL_OP_GATT_CLIENT_CONNECT , 2161 ¡©us ); 2162 } } 2164  $hªdË_þ›Á_discÚÃù (cÚ¡ * buf , ušt16_t Ën ) 2166 cÚ¡  h®_cmd_g©t_þ›Á_discÚÃù * cmd = buf ; 2167  ­p_cÚÃùiÚ * cÚn ; 2168 ušt8_t ¡©us ; 2170 `DBG (""); 2173 cÚn = `fšd_cÚÃùiÚ_by_id ( cmd -> cÚn_id ); 2174 ià( cÚn ) 2175 `Œigg”_discÚÃùiÚ ( cÚn ); 2177 ¡©us = HAL_STATUS_SUCCESS ; 2179 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 2180 HAL_OP_GATT_CLIENT_DISCONNECT , ¡©us ); 2181 } } 2183  $hªdË_þ›Á_li¡’ (cÚ¡ * buf , ušt16_t Ën ) 2185 cÚ¡  h®_cmd_g©t_þ›Á_li¡’ * cmd = buf ; 2186 ušt8_t ¡©us ; 2187  li¡’_d©a * d©a ; 2188 boÞ »q_£Á = çl£ ; 2189 * li¡’šg_þ›Á ; 2191 `DBG (""); 2193 ià(! `fšd_­p_by_id ( cmd -> þ›Á_if )) { 2194 `”rÜ ("gatt: Client‚ot„egistered"); 2195 ¡©us = HAL_STATUS_FAILED ; 2196  »¶y ; 2199 li¡’šg_þ›Á = `queue_fšd ( li¡’_­ps , m©ch_by_v®ue , 2200 `INT_TO_PTR ( cmd -> þ›Á_if )); 2202 ià( cmd -> ¡¬t ) { 2203 ià( li¡’šg_þ›Á ) { 2204 ¡©us = HAL_STATUS_SUCCESS ; 2205  »¶y ; 2208 ià(! `queue_push_ž ( li¡’_­ps , 2209 `INT_TO_PTR ( cmd -> þ›Á_if ))) { 2210 `”rÜ ("gatt: Could‚ot…ut client on†isten queue"); 2211 ¡©us = HAL_STATUS_FAILED ; 2212  »¶y ; 2216 ià( adv”tisšg_út > 0) { 2217 adv”tisšg_út ++; 2218 ¡©us = HAL_STATUS_SUCCESS ; 2219  »¶y ; 2223 ià(! li¡’šg_þ›Á ) { 2224 `”rÜ ("gatt: This client %d does‚ot†isten", 2225 cmd -> þ›Á_if ); 2226 ¡©us = HAL_STATUS_FAILED ; 2227  »¶y ; 2234 ià( adv”tisšg_út > 1) { 2235 adv”tisšg_út --; 2236 `queue_»move ( li¡’_­ps , 2237 `INT_TO_PTR ( cmd -> þ›Á_if )); 2238 ¡©us = HAL_STATUS_SUCCESS ; 2239  »¶y ; 2243 d©a = `ü—‹_li¡’_d©a ( cmd -> þ›Á_if , cmd-> ¡¬t ); 2244 ià(! d©a ) { 2245 `”rÜ ("gatt: Could‚ot‡llocate†isten data"); 2246 ¡©us = HAL_STATUS_NOMEM ; 2247  »¶y ; 2250 ià(! `bt_Ë_£t_adv”tisšg ( cmd -> ¡¬t , £t_adv”tisšg_cb , d©a )) { 2251 `”rÜ ("gatt: Could‚ot set‡dvertising"); 2252 ¡©us = HAL_STATUS_FAILED ; 2253 `ä“ ( d©a ); 2254  »¶y ; 2261 »q_£Á = Œue ; 2263 ¡©us = HAL_STATUS_SUCCESS ; 2265 »¶y : 2266 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , HAL_OP_GATT_CLIENT_LISTEN , 2267 ¡©us ); 2270 ià(! »q_£Á ) { 2271 št32_t g©t_¡©us = ¡©us =ð HAL_STATUS_SUCCESS ? 2272 GATT_SUCCESS : GATT_FAILURE ; 2273 `£nd_þ›Á_li¡’_nÙify ( cmd -> þ›Á_if , g©t_¡©us ); 2275 } } 2277  $hªdË_þ›Á_»äesh (cÚ¡ * buf , ušt16_t Ën ) 2279 cÚ¡  h®_cmd_g©t_þ›Á_»äesh * cmd = buf ; 2280  g©t_deviû * dev ; 2281 ušt8_t ¡©us ; 2282 bdaddr_t bda ; 2291 `DBG (""); 2293 `ªdroid2bdaddr (& cmd -> bdaddr , & bda ); 2294 dev = `fšd_deviû_by_addr (& bda ); 2295 ià(! dev ) { 2296 ¡©us = HAL_STATUS_FAILED ; 2297  dÚe ; 2300 `queue_»move_®l ( dev -> £rviûs , NULL , NULL, de¡roy_£rviû ); 2302 ¡©us = HAL_STATUS_SUCCESS ; 2304 dÚe : 2305 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , HAL_OP_GATT_CLIENT_REFRESH , 2306 ¡©us ); 2307 } } 2309  $hªdË_þ›Á_£¬ch_£rviû (cÚ¡ * buf , ušt16_t Ën ) 2311 cÚ¡  h®_cmd_g©t_þ›Á_£¬ch_£rviû * cmd = buf ; 2312  ­p_cÚÃùiÚ * cÚn ; 2313 ušt8_t ¡©us ; 2314  £rviû * s ; 2315 bt_uuid_t uuid ; 2316 gušt ¤vc_£¬ch_sucûss ; 2318 `DBG (""); 2320 ià( Ën !ð(* cmd è+ (cmd-> fž‹»d ? 16 : 0)) { 2321 `”rÜ ("Invalid search service size (%u bytes),erminating", 2322 Ën ); 2323 `¿i£ ( SIGTERM ); 2327 cÚn = `fšd_cÚÃùiÚ_by_id ( cmd -> cÚn_id ); 2328 ià(! cÚn ) { 2329 `”rÜ ("g©t: dev w™h cÚn_id=%d‚Ù found", cmd -> cÚn_id ); 2331 ¡©us = HAL_STATUS_FAILED ; 2332  »¶y ; 2335 ià( cÚn -> deviû -> ¡©e !ð DEVICE_CONNECTED ) { 2336  bda [18]; 2338 `ba2¡r (& cÚn -> deviû -> bdaddr , bda ); 2339 `”rÜ ("g©t: deviû % nÙ cÚÃùed", bda ); 2341 ¡©us = HAL_STATUS_FAILED ; 2342  »¶y ; 2345 ià( cmd -> fž‹»d ) 2346 `ªdroid2uuid ( cmd -> fž‹r_uuid , & uuid ); 2349 ià( `queue_i£m±y ( cÚn -> deviû -> £rviûs )) { 2350 ià( cmd -> fž‹»d ) 2351 ¤vc_£¬ch_sucûss = `£¬ch_dev_fÜ_¤vc ( cÚn , & uuid ); 2353 ¤vc_£¬ch_sucûss = `£¬ch_dev_fÜ_¤vc ( cÚn , NULL ); 2355 ià(! ¤vc_£¬ch_sucûss ) { 2356 ¡©us = HAL_STATUS_FAILED ; 2357  »¶y ; 2360 ¡©us = HAL_STATUS_SUCCESS ; 2361  »¶y ; 2365 ià( cmd -> fž‹»d ) { 2367 s = `queue_fšd ( cÚn -> deviû -> £rviûs , m©ch_¤vc_by_bt_uuid , 2368 & uuid ); 2370 ià( s ) { 2371 `£nd_þ›Á_´im¬y_nÙify ( s , `INT_TO_PTR ( cÚn -> id )); 2373 ià(! `£¬ch_dev_fÜ_¤vc ( cÚn , & uuid )) { 2374 ¡©us = HAL_STATUS_FAILED ; 2375  »¶y ; 2378 ¡©us = HAL_STATUS_SUCCESS ; 2379  »¶y ; 2383 ià( cÚn -> deviû -> ·¹Ÿl_¤vc_£¬ch ) { 2384 ¤vc_£¬ch_sucûss = `£¬ch_dev_fÜ_¤vc ( cÚn , NULL ); 2385 ià(! ¤vc_£¬ch_sucûss ) { 2386 ¡©us = HAL_STATUS_FAILED ; 2387  »¶y ; 2390 `queue_fÜ—ch ( cÚn -> deviû -> £rviûs , 2391 £nd_þ›Á_´im¬y_nÙify , 2392 `INT_TO_PTR ( cmd -> cÚn_id )); 2395 `£nd_þ›Á_£¬ch_com¶‘e_nÙify ( GATT_SUCCESS , cÚn -> id ); 2397 ¡©us = HAL_STATUS_SUCCESS ; 2399 »¶y : 2400 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 2401 HAL_OP_GATT_CLIENT_SEARCH_SERVICE , ¡©us ); 2402 } } 2404  $£nd_þ›Á_šþ_£rviû_nÙify (cÚ¡  –em’t_id * ¤vc_id , 2405 cÚ¡  £rviû * šþ , 2406 št32_t cÚn_id ) 2408  h®_ev_g©t_þ›Á_g‘_šc_£rviû ev ; 2410 `mem£t (& ev , 0, (ev)); 2412 ev . cÚn_id = conn_id; 2414 `–em’t_id_to_h®_¤vc_id ( ¤vc_id , 1, & ev .srvc_id); 2416 ià( šþ ) { 2417 `–em’t_id_to_h®_¤vc_id (& šþ -> id , 0, & ev . šþ_¤vc_id ); 2418 ev . ¡©us = GATT_SUCCESS ; 2420 ev . ¡©us = GATT_FAILURE ; 2423 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 2424 HAL_EV_GATT_CLIENT_GET_INC_SERVICE , 2425 ( ev ), &ev); 2426 } } 2428  sg‘_šþuded_d©a { 2429  £rviû * m´im ; 2430  ­p_cÚÃùiÚ * mcÚn ; 2433  $g‘_š¡_id_of_´im_£rviûs (cÚ¡  g©t_deviû * dev ) 2435  £rviû * s = `queue_³ek_ž ( dev -> £rviûs ); 2437 ià( s ) 2438  s -> id . š¡ªû ; 2441 } } 2443  $g‘_šþuded_cb ( ušt8_t ¡©us , GSLi¡ * šþuded , * u£r_d©a ) 2445  g‘_šþuded_d©a * d©a = u£r_d©a ; 2446  ­p_cÚÃùiÚ * cÚn = d©a ->conn; 2447  £rviû *£rviû = d©a -> ´im ; 2448  £rviû * šþ = NULL ; 2449  š¡ªû_id ; 2451 `DBG (""); 2453 `ä“ ( d©a ); 2455 ià( ¡©us ) { 2456 `”rÜ ("gatt:‚o included services found"); 2457  çžed ; 2461 £rviû -> šþ_£¬ch_dÚe = Œue ; 2469 š¡ªû_id = `g‘_š¡_id_of_´im_£rviûs ( cÚn -> deviû ); 2470 ià( š¡ªû_id < 0) 2471  çžed ; 2473 ; šþuded ; inþuded = inþuded-> Ãxt ) { 2474  g©t_šþuded * šþuded_£rviû = šþuded -> d©a ; 2476 šþ = `ü—‹_£rviû (++ š¡ªû_id , çl£ , 2477 šþuded_£rviû -> uuid , 2478 šþuded_£rviû ); 2479 ià(! šþ ) 2487 ià(! `queue_push_ž ( £rviû -> šþuded , šþ ) || 2488 ! `queue_push_ž ( cÚn -> deviû -> £rviûs , šþ )) { 2489 `”rÜ ("gatt: Cannot…ush incl serviceohe†ist"); 2490 `de¡roy_£rviû ( šþ ); 2499 šþ = `queue_³ek_h—d ( £rviû -> šþuded ); 2501 çžed : 2502 `£nd_þ›Á_šþ_£rviû_nÙify (& £rviû -> id , šþ , cÚn ->id); 2503 } } 2505  boÞ $£¬ch_šþuded_£rviûs ( ­p_cÚÃùiÚ * cÚÃùiÚ , 2506  £rviû *service) 2508  g‘_šþuded_d©a * d©a ; 2509 ušt16_t ¡¬t , ’d ; 2511 d©a = `Ãw0 ( g‘_šþuded_d©a , 1); 2512 ià(! d©a ) { 2513 `”rÜ ("gatt: failedo‡llocate memory for included_data"); 2514  çl£ ; 2517 d©a -> ´im = £rviû ; 2518 d©a -> cÚn = cÚÃùiÚ ; 2520 ià( £rviû -> ´im¬y ) { 2521 ¡¬t = £rviû -> ´im . ¿nge .start; 2522 ’d = £rviû -> ´im . ¿nge .end; 2524 ¡¬t = £rviû -> šþ . ¿nge .start; 2525 ’d = £rviû -> šþ . ¿nge .end; 2528 `g©t_fšd_šþuded ( cÚÃùiÚ -> deviû -> ©Œib , ¡¬t , ’d , 2529 g‘_šþuded_cb , d©a ); 2531  Œue ; 2532 } } 2534  boÞ $fšd_£rviû ( št32_t cÚn_id ,  –em’t_id * £rviû_id , 2535  ­p_cÚÃùiÚ ** cÚÃùiÚ , 2536  £rviû **service) 2538  £rviû * ¤vc ; 2539  ­p_cÚÃùiÚ * cÚn ; 2541 cÚn = `fšd_cÚÃùiÚ_by_id ( cÚn_id ); 2542 ià(! cÚn ) { 2543 `”rÜ ("g©t: cÚn_id=%d‚Ù found", cÚn_id ); 2544  çl£ ; 2547 ¤vc = `queue_fšd ( cÚn -> deviû -> £rviûs , m©ch_¤vc_by_–em’t_id , 2548 £rviû_id ); 2549 ià(! ¤vc ) { 2550 `”rÜ ("gatt: Service with inst_id: %d‚ot found", 2551 £rviû_id -> š¡ªû ); 2552  çl£ ; 2555 * cÚÃùiÚ = cÚn ; 2556 * £rviû = ¤vc ; 2558  Œue ; 2559 } } 2561  $hªdË_þ›Á_g‘_šþuded_£rviû (cÚ¡ * buf , ušt16_t Ën ) 2563 cÚ¡  h®_cmd_g©t_þ›Á_g‘_šþuded_£rviû * cmd = buf ; 2564  ­p_cÚÃùiÚ * cÚn ; 2565  £rviû * ´im_£rviû ; 2566  £rviû * šþ_£rviû = NULL ; 2567  –em’t_id m©ch_id ; 2568  –em’t_id ¤vc_id ; 2569 ušt8_t ¡©us ; 2571 `DBG (""); 2573 `h®_¤vc_id_to_–em’t_id (& cmd -> ¤vc_id , &srvc_id); 2575 ià( Ën !ð(* cmd ) + 2576 ( cmd -> cÚtšu©iÚ ? (cmd-> šþ_¤vc_id [0]) : 0)) { 2577 `”rÜ ("Invalid get incl services size (%u bytes),erminating", 2578 Ën ); 2579 `¿i£ ( SIGTERM ); 2583 `h®_¤vc_id_to_–em’t_id (& cmd -> ¤vc_id , & m©ch_id ); 2584 ià(! `fšd_£rviû ( cmd -> cÚn_id , & m©ch_id , & cÚn , & ´im_£rviû )) { 2585 ¡©us = HAL_STATUS_FAILED ; 2586  nÙify ; 2589 ià(! ´im_£rviû -> šþ_£¬ch_dÚe ) { 2590 ià( `£¬ch_šþuded_£rviûs ( cÚn , ´im_£rviû )) { 2591 ¡©us = HAL_STATUS_SUCCESS ; 2592  »¶y ; 2595 ¡©us = HAL_STATUS_FAILED ; 2596  nÙify ; 2600 ià(! cmd -> cÚtšu©iÚ ) { 2601 šþ_£rviû = `queue_³ek_h—d ( ´im_£rviû -> šþuded ); 2603 ušt8_t š¡_id = cmd -> šþ_¤vc_id [0].inst_id; 2604 šþ_£rviû = `queue_fšd ( ´im_£rviû -> šþuded , 2605 m©ch_¤vc_by_high”_š¡_id , 2606 `INT_TO_PTR ( š¡_id )); 2609 ¡©us = HAL_STATUS_SUCCESS ; 2611 nÙify : 2616 `£nd_þ›Á_šþ_£rviû_nÙify (& ¤vc_id , šþ_£rviû , cmd -> cÚn_id ); 2618 »¶y : 2619 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 2620 HAL_OP_GATT_CLIENT_GET_INCLUDED_SERVICE , ¡©us ); 2621 } } 2623  $£nd_þ›Á_ch¬_nÙify (cÚ¡  h®_g©t_¤vc_id * £rviû , 2624 cÚ¡  h®_g©t_g©t_id * ch¬ac , 2625 št32_t ch¬_´Ý , iÁ32_ˆ cÚn_id ) 2627  h®_ev_g©t_þ›Á_g‘_ch¬aù”i¡ic ev ; 2629 ev . cÚn_id = conn_id; 2631 ià( ch¬ac ) { 2632 `memýy (& ev . ch¬_id , ch¬ac , ( h®_g©t_g©t_id )); 2633 ev . ch¬_´Ý = char_prop; 2634 ev . ¡©us = GATT_SUCCESS ; 2636 `mem£t (& ev . ch¬_id , 0, ( h®_g©t_g©t_id )); 2637 ev . ch¬_´Ý = 0; 2638 ev . ¡©us = GATT_FAILURE ; 2641 `memýy (& ev . ¤vc_id , £rviû , ( h®_g©t_¤vc_id )); 2643 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 2644 HAL_EV_GATT_CLIENT_GET_CHARACTERISTIC , 2645 ( ev ), &ev); 2646 } } 2648  $cÚv”t_£nd_þ›Á_ch¬_nÙify (cÚ¡  ch¬aù”i¡ic * ch , 2649 št32_t cÚn_id , 2650 cÚ¡  £rviû *service) 2652  h®_g©t_¤vc_id ¤vc ; 2653  h®_g©t_g©t_id ch¬ac ; 2655 `–em’t_id_to_h®_¤vc_id (& £rviû -> id , s”viû-> ´im¬y , & ¤vc ); 2657 ià( ch ) { 2658 `–em’t_id_to_h®_g©t_id (& ch -> id , & ch¬ac ); 2659 `£nd_þ›Á_ch¬_nÙify (& ¤vc , & ch¬ac , ch ->ch. ´Ý”t›s , 2660 cÚn_id ); 2662 `£nd_þ›Á_ch¬_nÙify (& ¤vc , NULL , 0, cÚn_id ); 2664 } } 2666  $ÿche_®l_¤vc_ch¬s ( £rviû * ¤vc , GSLi¡ * ch¬aù”i¡ics ) 2668 ušt16_t š¡_id = 0; 2669 bt_uuid_t uuid ; 2671 ; ch¬aù”i¡ics ; ch¬aù”i¡ic ðch¬aù”i¡ics-> Ãxt ) { 2672  ch¬aù”i¡ic * ch ; 2674 ch = `Ãw0 ( ch¬aù”i¡ic , 1); 2675 ià(! ch ) { 2676 `”rÜ ("gatt: Error while caching characteristic"); 2680 ch -> desütÜs = `queue_Ãw (); 2681 ià(! ch -> desütÜs ) { 2682 `”rÜ ("gatt: Error while caching characteristic"); 2683 `ä“ ( ch ); 2687 `memýy (& ch ->ch, ch¬aù”i¡ics -> d©a , (ch->ch)); 2689 `bt_¡ršg_to_uuid (& uuid , ch ->ch.uuid); 2690 `bt_uuid_to_uuid128 (& uuid , & ch -> id .uuid); 2696 ch -> id . š¡ªû = ++ š¡_id ; 2699 ià( ch¬aù”i¡ics -> Ãxt ) { 2700  g©t_ch¬ * Ãxt = ch¬aù”i¡ics ->Ãxt-> d©a ; 2701 ch -> ’d_hªdË = Ãxt -> hªdË - 1; 2703 ch -> ’d_hªdË = ¤vc -> ´im¬y ? srvc-> ´im . ¿nge . ’d : 2704 ¤vc -> šþ . ¿nge . ’d ; 2707 `DBG ("attr handle = 0x%04x,ƒnd handle = 0x%04x uuid: %s", 2708 ch ->ch. hªdË , ch-> ’d_hªdË , ch->ch. uuid ); 2710 ià(! `queue_push_ž ( ¤vc -> ch¬s , ch )) { 2711 `”rÜ ("gatt: Error while caching characteristic"); 2712 `de¡roy_ch¬aù”i¡ic ( ch ); 2715 } } 2717  sdiscov”_ch¬_d©a { 2718 št32_t mcÚn_id ; 2719  £rviû * m£rviû ; 2722  $discov”_ch¬_cb ( ušt8_t ¡©us , GSLi¡ * ch¬aù”i¡ics , 2723 * u£r_d©a ) 2725  discov”_ch¬_d©a * d©a = u£r_d©a ; 2726  £rviû * ¤vc = d©a ->service; 2728 ià( `queue_i£m±y ( ¤vc -> ch¬s )) 2729 `ÿche_®l_¤vc_ch¬s ( ¤vc , ch¬aù”i¡ics ); 2731 `cÚv”t_£nd_þ›Á_ch¬_nÙify ( `queue_³ek_h—d ( ¤vc -> ch¬s ), 2732 d©a -> cÚn_id , ¤vc ); 2734 `ä“ ( d©a ); 2735 } } 2737  $hªdË_þ›Á_g‘_ch¬aù”i¡ic (cÚ¡ * buf , ušt16_t Ën ) 2739 cÚ¡  h®_cmd_g©t_þ›Á_g‘_ch¬aù”i¡ic * cmd = buf ; 2740  ch¬aù”i¡ic * ch ; 2741  –em’t_id m©ch_id ; 2742  ­p_cÚÃùiÚ * cÚn ; 2743  £rviû * ¤vc ; 2744 ušt8_t ¡©us ; 2746 `DBG (""); 2748 ià( Ën !ð(* cmd è+ (cmd-> cÚtšu©iÚ ? (cmd-> ch¬_id [0]) : 0)) { 2749 `”rÜ ("Invalid get characteristic size (%u bytes),erminating", 2750 Ën ); 2751 `¿i£ ( SIGTERM ); 2755 `h®_¤vc_id_to_–em’t_id (& cmd -> ¤vc_id , & m©ch_id ); 2756 ià(! `fšd_£rviû ( cmd -> cÚn_id , & m©ch_id , & cÚn , & ¤vc )) { 2757 ¡©us = HAL_STATUS_FAILED ; 2758  dÚe ; 2762 ià( `queue_i£m±y ( ¤vc -> ch¬s )) { 2763  discov”_ch¬_d©a * cb_d©a ; 2764  ©t_¿nge ¿nge ; 2766 cb_d©a = `Ãw0 ( discov”_ch¬_d©a , 1); 2767 ià(! cb_d©a ) { 2768 `”rÜ ("gatt: Cannot‡llocate cb data"); 2769 ¡©us = HAL_STATUS_FAILED ; 2770  dÚe ; 2773 cb_d©a -> £rviû = ¤vc ; 2774 cb_d©a -> cÚn_id = cÚn -> id ; 2776 ¿nge = ¤vc -> ´im¬y ? srvc-> ´im .¿ng: srvc-> šþ .range; 2778 ià(! `g©t_discov”_ch¬ ( cÚn -> deviû -> ©Œib , ¿nge . ¡¬t , 2779 ¿nge . ’d , NULL , 2780 discov”_ch¬_cb , cb_d©a )) { 2781 `ä“ ( cb_d©a ); 2783 ¡©us = HAL_STATUS_FAILED ; 2784  dÚe ; 2787 ¡©us = HAL_STATUS_SUCCESS ; 2788  dÚe ; 2791 ià( cmd -> cÚtšu©iÚ ) 2792 ch = `queue_fšd ( ¤vc -> ch¬s , m©ch_ch¬_by_high”_š¡_id , 2793 `INT_TO_PTR ( cmd -> ch¬_id [0]. š¡_id )); 2795 ch = `queue_³ek_h—d ( ¤vc -> ch¬s ); 2797 `cÚv”t_£nd_þ›Á_ch¬_nÙify ( ch , cÚn -> id , ¤vc ); 2799 ¡©us = HAL_STATUS_SUCCESS ; 2801 dÚe : 2802 ià( ¡©us !ð HAL_STATUS_SUCCESS ) 2803 `£nd_þ›Á_ch¬_nÙify (& cmd -> ¤vc_id , NULL , 0, cmd-> cÚn_id ); 2805 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 2806 HAL_OP_GATT_CLIENT_GET_CHARACTERISTIC , ¡©us ); 2807 } } 2809  $£nd_þ›Á_desü_nÙify ( št32_t ¡©us , iÁ32_ˆ cÚn_id , 2810 boÞ ´im¬y , 2811 cÚ¡  –em’t_id * ¤vc , 2812 cÚ¡  –em’t_id * ch , 2813 cÚ¡  –em’t_id * Ýt_desü ) 2815  h®_ev_g©t_þ›Á_g‘_desütÜ ev ; 2817 `mem£t (& ev , 0, (ev)); 2819 ev . ¡©us = status; 2820 ev . cÚn_id = conn_id; 2822 `–em’t_id_to_h®_¤vc_id ( ¤vc , ´im¬y , & ev . ¤vc_id ); 2823 `–em’t_id_to_h®_g©t_id ( ch , & ev . ch¬_id ); 2825 ià( Ýt_desü ) 2826 `–em’t_id_to_h®_g©t_id ( Ýt_desü , & ev . desü_id ); 2828 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 2829 HAL_EV_GATT_CLIENT_GET_DESCRIPTOR , ( ev ), &ev); 2830 } } 2832  sdiscov”_desc_d©a { 2833  ­p_cÚÃùiÚ * mcÚn ; 2834  £rviû * m¤vc ; 2835  ch¬aù”i¡ic * mch ; 2838  $g©t_discov”_desc_cb ( gušt8 ¡©us , GSLi¡ * descs , 2839 gpoš‹r u£r_d©a ) 2841  discov”_desc_d©a * d©a = u£r_d©a ; 2842  ­p_cÚÃùiÚ * cÚn = d©a ->conn; 2843  £rviû * ¤vc = d©a ->srvc; 2844  ch¬aù”i¡ic * ch = d©a ->ch; 2845  desütÜ * desü ; 2846  i = 0; 2848 ià( ¡©us != 0) { 2849 `”rÜ ("Discover‡ll characteristic descriptors failed [%s]: %s", 2850 ch ->ch. uuid , `©t_ecode2¡r ( ¡©us )); 2851  »¶y ; 2854  ; descs ; desc ðdescs-> Ãxt ) { 2855  g©t_desc * desc = descs -> d©a ; 2856 bt_uuid_t uuid ; 2858 desü = `Ãw0 ( desütÜ , 1); 2859 ià(! desü ) 2862 `bt_¡ršg_to_uuid (& uuid , desc ->uuid); 2863 `bt_uuid_to_uuid128 (& uuid , & desü -> id .uuid); 2865 desü -> id . š¡ªû = ++ i ; 2866 desü -> hªdË = desc ->handle; 2868 `DBG ("©Œ hªdË = 0x%04x, uuid: %s", desc -> hªdË , desc-> uuid ); 2870 ià(! `queue_push_ž ( ch -> desütÜs , desü )) 2871 `ä“ ( desü ); 2874 »¶y : 2875 desü = `queue_³ek_h—d ( ch -> desütÜs ); 2877 `£nd_þ›Á_desü_nÙify ( ¡©us ? GATT_FAILURE : GATT_SUCCESS , cÚn -> id , 2878 ¤vc -> ´im¬y , &¤vc-> id , & ch ->id, 2879 desü ? &desü-> id : NULL ); 2881 `ä“ ( d©a ); 2882 } } 2884  boÞ $bužd_desü_ÿche ( ­p_cÚÃùiÚ * cÚÃùiÚ , 2885  £rviû * ¤vc , 2886  ch¬aù”i¡ic * ch ) 2888  discov”_desc_d©a * cb_d©a ; 2889 ušt16_t ¡¬t , ’d ; 2892 ¡¬t = ch ->ch. v®ue_hªdË + 1; 2893 ’d = ch -> ’d_hªdË ; 2896 ià( ¡¬t > ’d ) 2897  çl£ ; 2899 cb_d©a = `Ãw0 ( discov”_desc_d©a , 1); 2900 ià(! cb_d©a ) 2901  çl£ ; 2903 cb_d©a -> cÚn = cÚÃùiÚ ; 2904 cb_d©a -> ¤vc = srvc; 2905 cb_d©a -> ch = ch; 2907 ià(! `g©t_discov”_desc ( cÚÃùiÚ -> deviû -> ©Œib , ¡¬t , ’d , NULL , 2908 g©t_discov”_desc_cb , cb_d©a )) { 2909 `ä“ ( cb_d©a ); 2910  çl£ ; 2913  Œue ; 2914 } } 2916  $hªdË_þ›Á_g‘_desütÜ (cÚ¡ * buf , ušt16_t Ën ) 2918 cÚ¡  h®_cmd_g©t_þ›Á_g‘_desütÜ * cmd = buf ; 2919  desütÜ * desü = NULL ; 2920  ch¬aù”i¡ic * ch ; 2921  £rviû * ¤vc ; 2922  –em’t_id ¤vc_id ; 2923  –em’t_id ch¬_id ; 2924  ­p_cÚÃùiÚ * cÚn ; 2925 št32_t cÚn_id ; 2926 ušt8_t ´im¬y ; 2927 ušt8_t ¡©us ; 2929 `DBG (""); 2931 ià( Ën !ð(* cmd ) + 2932 ( cmd -> cÚtšu©iÚ ? (cmd-> desü_id [0]) : 0)) { 2933 `”rÜ ("gatt: Invalid get descr command (%u bytes),erminating", 2934 Ën ); 2936 `¿i£ ( SIGTERM ); 2940 cÚn_id = cmd ->conn_id; 2941 ´im¬y = cmd -> ¤vc_id . is_´im¬y ; 2943 `h®_¤vc_id_to_–em’t_id (& cmd -> ¤vc_id , &srvc_id); 2944 `h®_g©t_id_to_–em’t_id (& cmd -> ch¬_id , &char_id); 2946 ià(! `fšd_£rviû ( cÚn_id , & ¤vc_id , & cÚn , & ¤vc )) { 2947 `”rÜ ("gatt: Get descr. could‚ot find service"); 2949 ¡©us = HAL_STATUS_FAILED ; 2950  çžed ; 2953 ch = `queue_fšd ( ¤vc -> ch¬s , m©ch_ch¬_by_–em’t_id , & ch¬_id ); 2954 ià(! ch ) { 2955 `”rÜ ("gatt: Get descr. could‚ot find characteristic"); 2957 ¡©us = HAL_STATUS_FAILED ; 2958  çžed ; 2961 ià( `queue_i£m±y ( ch -> desütÜs )) { 2962 ià( `bužd_desü_ÿche ( cÚn , ¤vc , ch )) { 2963 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 2964 HAL_OP_GATT_CLIENT_GET_DESCRIPTOR , 2965 HAL_STATUS_SUCCESS ); 2970 ¡©us = HAL_STATUS_SUCCESS ; 2973 ià( cmd -> cÚtšu©iÚ ) 2974 desü = `queue_fšd ( ch -> desütÜs , 2975 m©ch_desü_by_high”_š¡_id , 2976 `INT_TO_PTR ( cmd -> desü_id [0]. š¡_id )); 2978 desü = `queue_³ek_h—d ( ch -> desütÜs ); 2980 çžed : 2981 `£nd_þ›Á_desü_nÙify ( desü ? GATT_SUCCESS : GATT_FAILURE , cÚn_id , 2982 ´im¬y , & ¤vc_id , & ch¬_id , 2983 & desü -> id ); 2985 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 2986 HAL_OP_GATT_CLIENT_GET_DESCRIPTOR , ¡©us ); 2987 } } 2989  sch¬_Ý_d©a { 2990 št32_t mcÚn_id ; 2991 cÚ¡  –em’t_id * m¤vc_id ; 2992 cÚ¡  –em’t_id * mch¬_id ; 2993 ušt8_t m´im¬y ; 2996  ch¬_Ý_d©a * $ü—‹_ch¬_Ý_d©a ( št32_t cÚn_id , 2997 cÚ¡  –em’t_id * s_id , 2998 cÚ¡  –em’t_id * ch_id , 2999 boÞ ´im¬y ) 3001  ch¬_Ý_d©a * d ; 3003 d = `Ãw0 ( ch¬_Ý_d©a , 1); 3004 ià(! d ) 3005  NULL ; 3007 d -> cÚn_id = conn_id; 3008 d -> ¤vc_id = s_id ; 3009 d -> ch¬_id = ch_id ; 3010 d -> ´im¬y =…rimary; 3012  d ; 3013 } } 3015  $£nd_þ›Á_»ad_ch¬_nÙify ( št32_t ¡©us , cÚ¡ ušt8_t * pdu , 3016 ušt16_t Ën , št32_t cÚn_id , 3017 cÚ¡  –em’t_id * s_id , 3018 cÚ¡  –em’t_id * ch_id , 3019 ušt8_t ´im¬y ) 3021 ušt8_t buf [ IPC_MTU ]; 3022  h®_ev_g©t_þ›Á_»ad_ch¬aù”i¡ic * ev = (*è buf ; 3023 ssize_t vËn ; 3025 `mem£t ( buf , 0, (buf)); 3027 ev -> cÚn_id = conn_id; 3028 ev -> ¡©us = status; 3029 ev -> d©a . ¡©us = status; 3031 `–em’t_id_to_h®_¤vc_id ( s_id , ´im¬y , & ev -> d©a . ¤vc_id ); 3032 `–em’t_id_to_h®_g©t_id ( ch_id , & ev -> d©a . ch¬_id ); 3034 ià( ¡©us =ð0 && pdu ) { 3035 vËn = `dec_»ad_»¥ ( pdu , Ën , ev -> d©a . v®ue , ( buf )); 3036 ià( vËn < 0) { 3037 `”rÜ ("gatt: Protocolƒrror"); 3038 ev -> ¡©us = GATT_FAILURE ; 3040 ev -> d©a . Ën = vËn ; 3044 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 3045 HAL_EV_GATT_CLIENT_READ_CHARACTERISTIC , 3046 (* ev è+ƒv-> d©a . Ën ,ƒv); 3047 } } 3049  $»ad_ch¬_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 3050 gpoš‹r u£r_d©a ) 3052  ch¬_Ý_d©a * d©a = u£r_d©a ; 3054 `£nd_þ›Á_»ad_ch¬_nÙify ( ¡©us , pdu , Ën , d©a -> cÚn_id , 3055 d©a -> ¤vc_id , d©a-> ch¬_id , 3056 d©a -> ´im¬y ); 3058 `ä“ ( d©a ); 3059 } } 3061  $g‘_cid ( g©t_deviû * dev ) 3063 GIOChªÃl * io ; 3064 ušt16_t cid ; 3066 io = `g_©Œib_g‘_chªÃl ( dev -> ©Œib ); 3068 ià(! `bt_io_g‘ ( io , NULL , BT_IO_OPT_CID , & cid , BT_IO_OPT_INVALID )) { 3069 `”rÜ ("gatt: Failedo get CID"); 3073  cid ; 3074 } } 3076  $g‘_£c_Ëv– ( g©t_deviû * dev ) 3078 GIOChªÃl * io ; 3079  £c_Ëv– ; 3081 io = `g_©Œib_g‘_chªÃl ( dev -> ©Œib ); 3083 ià(! `bt_io_g‘ ( io , NULL , BT_IO_OPT_SEC_LEVEL , & £c_Ëv– , 3084 BT_IO_OPT_INVALID )) { 3085 `”rÜ ("gatt: Failedo get sec_level"); 3089  £c_Ëv– ; 3090 } } 3092  boÞ $£t_£cur™y ( g©t_deviû * deviû ,  »q_£c_Ëv– ) 3094  £c_Ëv– ; 3095 GE¼Ü * g”r = NULL ; 3096 GIOChªÃl * io ; 3098 £c_Ëv– = `g‘_£c_Ëv– ( deviû ); 3099 ià( £c_Ëv– < 0) 3100  çl£ ; 3102 ià( »q_£c_Ëv– <ð £c_Ëv– ) 3103  Œue ; 3105 io = `g_©Œib_g‘_chªÃl ( deviû -> ©Œib ); 3106 ià(! io ) 3107  çl£ ; 3109 `bt_io_£t ( io , & g”r , BT_IO_OPT_SEC_LEVEL , »q_£c_Ëv– , 3110 BT_IO_OPT_INVALID ); 3111 ià( g”r ) { 3112 `”rÜ ("g©t: FažedØ£ˆ£cur™y†ev–: %s", g”r -> mes§ge ); 3113 `g_”rÜ_ä“ ( g”r ); 3114  çl£ ; 3117  Œue ; 3118 } } 3120 boÞ $bt_g©t_£t_£cur™y (cÚ¡ bdaddr_t * bdaddr ,  £c_Ëv– ) 3122  g©t_deviû * deviû ; 3124 deviû = `fšd_deviû_by_addr ( bdaddr ); 3125 ià(! deviû ) 3126  çl£ ; 3128  `£t_£cur™y ( deviû , £c_Ëv– ); 3129 } } 3131  boÞ $£t_auth_ty³ ( g©t_deviû * deviû ,  auth_ty³ ) 3133  £c_Ëv– ; 3135  auth_ty³ ) { 3136  HAL_GATT_AUTHENTICATION_MITM : 3137 £c_Ëv– = BT_SECURITY_HIGH ; 3139  HAL_GATT_AUTHENTICATION_NO_MITM : 3140 £c_Ëv– = BT_SECURITY_MEDIUM ; 3142  HAL_GATT_AUTHENTICATION_NONE : 3143 £c_Ëv– = BT_SECURITY_LOW ; 3146 `”rÜ ("g©t: Inv®id‡uth_ty³ v®ue: %d", auth_ty³ ); 3147  çl£ ; 3150  `£t_£cur™y ( deviû , £c_Ëv– ); 3151 } } 3153  $hªdË_þ›Á_»ad_ch¬aù”i¡ic (cÚ¡ * buf , ušt16_t Ën ) 3155 cÚ¡  h®_cmd_g©t_þ›Á_»ad_ch¬aù”i¡ic * cmd = buf ; 3156  ch¬_Ý_d©a * cb_d©a ; 3157  ch¬aù”i¡ic * ch ; 3158  ­p_cÚÃùiÚ * cÚn ; 3159  £rviû * ¤vc ; 3160  –em’t_id ¤vc_id ; 3161  –em’t_id ch¬_id ; 3162 ušt8_t ¡©us ; 3164 `DBG (""); 3168 `h®_¤vc_id_to_–em’t_id (& cmd -> ¤vc_id , &srvc_id); 3169 `h®_g©t_id_to_–em’t_id (& cmd -> ch¬_id , &char_id); 3171 ià(! `fšd_£rviû ( cmd -> cÚn_id , & ¤vc_id , & cÚn , & ¤vc )) { 3172 ¡©us = HAL_STATUS_FAILED ; 3173  çžed ; 3177 ch = `queue_fšd ( ¤vc -> ch¬s , m©ch_ch¬_by_–em’t_id , & ch¬_id ); 3178 ià(! ch ) { 3179 `”rÜ ("gatt: Characteristic with inst_id: %d‚ot found", 3180 cmd -> ch¬_id . š¡_id ); 3181 ¡©us = HAL_STATUS_FAILED ; 3182  çžed ; 3185 cb_d©a = `ü—‹_ch¬_Ý_d©a ( cmd -> cÚn_id , & ¤vc -> id , & ch ->id, 3186 cmd -> ¤vc_id . is_´im¬y ); 3187 ià(! cb_d©a ) { 3188 `”rÜ ("gatt: Cannot‡llocate cb data"); 3189 ¡©us = HAL_STATUS_NOMEM ; 3190  çžed ; 3193 ià(! `£t_auth_ty³ ( cÚn -> deviû , cmd -> auth_»q )) { 3194 `”rÜ ("g©t: FažedØ£ˆ£cur™y %d", cmd -> auth_»q ); 3195 ¡©us = HAL_STATUS_FAILED ; 3196 `ä“ ( cb_d©a ); 3197  çžed ; 3200 ià(! `g©t_»ad_ch¬ ( cÚn -> deviû -> ©Œib , ch ->ch. v®ue_hªdË , 3201 »ad_ch¬_cb , cb_d©a )) { 3202 `”rÜ ("gatt: Cannot„ead characteristic with inst_id: %d", 3203 cmd -> ch¬_id . š¡_id ); 3204 ¡©us = HAL_STATUS_FAILED ; 3205 `ä“ ( cb_d©a ); 3206  çžed ; 3209 ¡©us = HAL_STATUS_SUCCESS ; 3211 çžed : 3212 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 3213 HAL_OP_GATT_CLIENT_READ_CHARACTERISTIC , ¡©us ); 3219 ià( ¡©us !ð HAL_STATUS_SUCCESS ) 3220 `£nd_þ›Á_»ad_ch¬_nÙify ( GATT_FAILURE , NULL , 0, 3221 cmd -> cÚn_id , & ¤vc_id , & ch¬_id , 3222 cmd -> ¤vc_id . is_´im¬y ); 3223 } } 3225  $£nd_þ›Á_wr™e_ch¬_nÙify ( št32_t ¡©us , iÁ32_ˆ cÚn_id , 3226 cÚ¡  –em’t_id * ¤vc_id , 3227 cÚ¡  –em’t_id * ch¬_id , 3228 ušt8_t ´im¬y ) 3230  h®_ev_g©t_þ›Á_wr™e_ch¬aù”i¡ic ev ; 3232 `mem£t (& ev , 0, (ev)); 3234 ev . cÚn_id = conn_id; 3235 ev . ¡©us = status; 3236 ev . d©a . ¡©us = status; 3238 `–em’t_id_to_h®_¤vc_id ( ¤vc_id , ´im¬y , & ev . d©a .srvc_id); 3239 `–em’t_id_to_h®_g©t_id ( ch¬_id , & ev . d©a .char_id); 3241 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 3242 HAL_EV_GATT_CLIENT_WRITE_CHARACTERISTIC , 3243 ( ev ), &ev); 3244 } } 3246  $wr™e_ch¬_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 3247 gpoš‹r u£r_d©a ) 3249  ch¬_Ý_d©a * d©a = u£r_d©a ; 3251 `£nd_þ›Á_wr™e_ch¬_nÙify ( ¡©us , d©a -> cÚn_id , d©a-> ¤vc_id , 3252 d©a -> ch¬_id , d©a-> ´im¬y ); 3254 `ä“ ( d©a ); 3255 } } 3257  gušt $sigÃd_wr™e_cmd ( g©t_deviû * dev , ušt16_t hªdË , 3258 cÚ¡ ušt8_t * v®ue , ušt16_t vËn ) 3260 ušt8_t c¤k [16]; 3261 ušt32_t sign_út ; 3262 gušt »s ; 3264 `mem£t ( c¤k , 0, 16); 3266 ià(! `bt_g‘_c¤k (& dev -> bdaddr , LOCAL_CSRK , c¤k , & sign_út )) { 3267 `”rÜ ("gatt: Could‚ot get csrk key"); 3271 »s = `g©t_sigÃd_wr™e_cmd ( dev -> ©Œib , hªdË , v®ue , vËn , üy±o , 3272 c¤k , sign_út , NULL , NULL); 3273 ià(! »s ) { 3274 `”rÜ ("gatt: Could write signed cmd"); 3278 `bt_upd©e_sign_couÁ” (& dev -> bdaddr , LOCAL_CSRK , ++ sign_út ); 3280  »s ; 3281 } } 3283  $hªdË_þ›Á_wr™e_ch¬aù”i¡ic (cÚ¡ * buf , ušt16_t Ën ) 3285 cÚ¡  h®_cmd_g©t_þ›Á_wr™e_ch¬aù”i¡ic * cmd = buf ; 3286  ch¬_Ý_d©a * cb_d©a = NULL ; 3287  ch¬aù”i¡ic * ch ; 3288  ­p_cÚÃùiÚ * cÚn ; 3289  £rviû * ¤vc ; 3290  –em’t_id ¤vc_id ; 3291  –em’t_id ch¬_id ; 3292 ušt8_t ¡©us ; 3293 gušt »s ; 3295 `DBG (""); 3297 ià( Ën !ð(* cmd ) + cmd->len) { 3298 `”rÜ ("Inv®id wr™ch¬ siz(%u by‹s),”mš©šg", Ën ); 3299 `¿i£ ( SIGTERM ); 3303 `h®_¤vc_id_to_–em’t_id (& cmd -> ¤vc_id , &srvc_id); 3304 `h®_g©t_id_to_–em’t_id (& cmd -> ch¬_id , &char_id); 3306 ià(! `fšd_£rviû ( cmd -> cÚn_id , & ¤vc_id , & cÚn , & ¤vc )) { 3307 ¡©us = HAL_STATUS_FAILED ; 3308  çžed ; 3312 ch = `queue_fšd ( ¤vc -> ch¬s , m©ch_ch¬_by_–em’t_id , & ch¬_id ); 3313 ià(! ch ) { 3314 `”rÜ ("gatt: Characteristic with inst_id: %d‚ot found", 3315 cmd -> ch¬_id . š¡_id ); 3316 ¡©us = HAL_STATUS_FAILED ; 3317  çžed ; 3320 ià( cmd -> wr™e_ty³ =ð GATT_WRITE_TYPE_PREPARE || 3321 cmd -> wr™e_ty³ =ð GATT_WRITE_TYPE_DEFAULT ) { 3322 cb_d©a = `ü—‹_ch¬_Ý_d©a ( cmd -> cÚn_id , & ¤vc -> id , & ch ->id, 3323 cmd -> ¤vc_id . is_´im¬y ); 3324 ià(! cb_d©a ) { 3325 `”rÜ ("gatt: Cannot‡llocate call data"); 3326 ¡©us = HAL_STATUS_NOMEM ; 3327  çžed ; 3331 ià(! `£t_auth_ty³ ( cÚn -> deviû , cmd -> auth_»q )) { 3332 `”rÜ ("g©t: FažedØ£ˆ£cur™y %d", cmd -> auth_»q ); 3333 ¡©us = HAL_STATUS_FAILED ; 3334  çžed ; 3337  cmd -> wr™e_ty³ ) { 3338  GATT_WRITE_TYPE_NO_RESPONSE : 3339 »s = `g©t_wr™e_cmd ( cÚn -> deviû -> ©Œib , ch ->ch. v®ue_hªdË , 3340 cmd -> v®ue , cmd-> Ën , 3341 NULL , NULL); 3343  GATT_WRITE_TYPE_PREPARE : 3344 »s = `g©t_»lŸbË_wr™e_ch¬ ( cÚn -> deviû -> ©Œib , 3345 ch ->ch. v®ue_hªdË , 3346 cmd -> v®ue , cmd-> Ën , 3347 wr™e_ch¬_cb , cb_d©a ); 3349  GATT_WRITE_TYPE_DEFAULT : 3350 »s = `g©t_wr™e_ch¬ ( cÚn -> deviû -> ©Œib , ch ->ch. v®ue_hªdË , 3351 cmd -> v®ue , cmd-> Ën , 3352 wr™e_ch¬_cb , cb_d©a ); 3354  GATT_WRITE_TYPE_SIGNED : 3355 ià( `g‘_cid ( cÚn -> deviû è!ð ATT_CID ) { 3356 `”rÜ ("gatt: Cannot write signed on BR/EDR bearer"); 3357 ¡©us = HAL_STATUS_FAILED ; 3358  çžed ; 3361 ià( `g‘_£c_Ëv– ( cÚn -> deviû è!ð BT_SECURITY_LOW ) { 3362 `”rÜ ("gatt: Cannot write signed onƒncrypted†ink"); 3363 ¡©us = HAL_STATUS_FAILED ; 3364  çžed ; 3367 »s = `sigÃd_wr™e_cmd ( cÚn -> deviû , ch ->ch. v®ue_hªdË , 3368 cmd -> v®ue , cmd-> Ën ); 3371 `”rÜ ("g©t: Wr™ty³ %d unsuµÜ‹d", cmd -> wr™e_ty³ ); 3372 ¡©us = HAL_STATUS_UNSUPPORTED ; 3373  çžed ; 3376 ià(! »s ) { 3377 `”rÜ ("gatt: Cannot write char. with inst_id: %d", 3378 cmd -> ch¬_id . š¡_id ); 3379 ¡©us = HAL_STATUS_FAILED ; 3380  çžed ; 3383 ¡©us = HAL_STATUS_SUCCESS ; 3385 çžed : 3386 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 3387 HAL_OP_GATT_CLIENT_WRITE_CHARACTERISTIC , ¡©us ); 3393 ià( ¡©us !ð HAL_STATUS_SUCCESS || 3394 cmd -> wr™e_ty³ =ð GATT_WRITE_TYPE_NO_RESPONSE || 3395 cmd -> wr™e_ty³ =ð GATT_WRITE_TYPE_SIGNED ) { 3396 št32_t g©t_¡©us = ( ¡©us =ð HAL_STATUS_SUCCESS ) ? 3397 GATT_SUCCESS : GATT_FAILURE ; 3399 `£nd_þ›Á_wr™e_ch¬_nÙify ( g©t_¡©us , cmd -> cÚn_id , 3400 & ¤vc_id , & ch¬_id , 3401 cmd -> ¤vc_id . is_´im¬y ); 3402 `ä“ ( cb_d©a ); 3404 } } 3406  $£nd_þ›Á_desü_»ad_nÙify ( št32_t ¡©us , cÚ¡ ušt8_t * pdu , 3407 gušt16 Ën , št32_t cÚn_id , 3408 cÚ¡  –em’t_id * ¤vc , 3409 cÚ¡  –em’t_id * ch , 3410 cÚ¡  –em’t_id * desü , 3411 ušt8_t ´im¬y ) 3413 ušt8_t buf [ IPC_MTU ]; 3414  h®_ev_g©t_þ›Á_»ad_desütÜ * ev = (*è buf ; 3416 `mem£t ( buf , 0, (buf)); 3418 ev -> ¡©us = status; 3419 ev -> cÚn_id = conn_id; 3420 ev -> d©a . ¡©us =ƒv->status; 3422 `–em’t_id_to_h®_¤vc_id ( ¤vc , ´im¬y , & ev -> d©a . ¤vc_id ); 3423 `–em’t_id_to_h®_g©t_id ( ch , & ev -> d©a . ch¬_id ); 3424 `–em’t_id_to_h®_g©t_id ( desü , & ev -> d©a . desü_id ); 3426 ià( ¡©us =ð0 && pdu ) { 3427 ssize_t »t ; 3429 »t = `dec_»ad_»¥ ( pdu , Ën , ev -> d©a . v®ue , 3430 GATT_MAX_ATTR_LEN ); 3431 ià( »t < 0) { 3432 `”rÜ ("gatt: Protocolƒrror"); 3433 ev -> ¡©us = GATT_FAILURE ; 3435 ev -> d©a . Ën = »t ; 3439 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 3440 HAL_EV_GATT_CLIENT_READ_DESCRIPTOR , 3441 (* ev è+ƒv-> d©a . Ën ,ƒv); 3442 } } 3444  sdesc_d©a { 3445 št32_t mcÚn_id ; 3446 cÚ¡  –em’t_id * m¤vc_id ; 3447 cÚ¡  –em’t_id * mch¬_id ; 3448 cÚ¡  –em’t_id * mdesü_id ; 3449 ušt8_t m´im¬y ; 3452  $»ad_desc_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 3453 gpoš‹r u£r_d©a ) 3455  desc_d©a * cb_d©a = u£r_d©a ; 3457 ià( ¡©us != 0) 3458 `”rÜ ("gatt: Discover‡ll char descriptors failed: %s", 3459 `©t_ecode2¡r ( ¡©us )); 3461 `£nd_þ›Á_desü_»ad_nÙify ( ¡©us , pdu , Ën , cb_d©a -> cÚn_id , 3462 cb_d©a -> ¤vc_id , cb_d©a-> ch¬_id , 3463 cb_d©a -> desü_id , cb_d©a-> ´im¬y ); 3465 `ä“ ( cb_d©a ); 3466 } } 3468  desc_d©a * $ü—‹_desc_d©a ( št32_t cÚn_id , 3469 cÚ¡  –em’t_id * s_id , 3470 cÚ¡  –em’t_id * ch_id , 3471 cÚ¡  –em’t_id * d_id , 3472 ušt8_t ´im¬y ) 3474  desc_d©a * d ; 3476 d = `Ãw0 ( desc_d©a , 1); 3477 ià(! d ) 3478  NULL ; 3480 d -> cÚn_id = conn_id; 3481 d -> ¤vc_id = s_id ; 3482 d -> ch¬_id = ch_id ; 3483 d -> desü_id = d_id ; 3484 d -> ´im¬y =…rimary; 3486  d ; 3487 } } 3489  $hªdË_þ›Á_»ad_desütÜ (cÚ¡ * buf , ušt16_t Ën ) 3491 cÚ¡  h®_cmd_g©t_þ›Á_»ad_desütÜ * cmd = buf ; 3492  desc_d©a * cb_d©a ; 3493  ch¬aù”i¡ic * ch ; 3494  desütÜ * desü ; 3495  £rviû * ¤vc ; 3496  –em’t_id ch¬_id ; 3497  –em’t_id desü_id ; 3498  –em’t_id ¤vc_id ; 3499  ­p_cÚÃùiÚ * cÚn ; 3500 št32_t cÚn_id = 0; 3501 ušt8_t ´im¬y ; 3502 ušt8_t ¡©us ; 3504 `DBG (""); 3506 cÚn_id = cmd ->conn_id; 3507 ´im¬y = cmd -> ¤vc_id . is_´im¬y ; 3509 `h®_¤vc_id_to_–em’t_id (& cmd -> ¤vc_id , &srvc_id); 3510 `h®_g©t_id_to_–em’t_id (& cmd -> ch¬_id , &char_id); 3511 `h®_g©t_id_to_–em’t_id (& cmd -> desü_id , &descr_id); 3513 ià(! `fšd_£rviû ( cÚn_id , & ¤vc_id , & cÚn , & ¤vc )) { 3514 `”rÜ ("gatt: Read descr. could‚ot find service"); 3516 ¡©us = HAL_STATUS_FAILED ; 3517  çžed ; 3520 ch = `queue_fšd ( ¤vc -> ch¬s , m©ch_ch¬_by_–em’t_id , & ch¬_id ); 3521 ià(! ch ) { 3522 `”rÜ ("gatt: Read descr. could‚ot find characteristic"); 3524 ¡©us = HAL_STATUS_FAILED ; 3525  çžed ; 3528 desü = `queue_fšd ( ch -> desütÜs , m©ch_desü_by_–em’t_id , 3529 & desü_id ); 3530 ià(! desü ) { 3531 `”rÜ ("gatt: Read descr. could‚ot find descriptor"); 3533 ¡©us = HAL_STATUS_FAILED ; 3534  çžed ; 3537 cb_d©a = `ü—‹_desc_d©a ( cÚn_id , & ¤vc -> id , & ch ->id, & desü ->id, 3538 ´im¬y ); 3539 ià(! cb_d©a ) { 3540 `”rÜ ("gatt: Read descr. could‚ot‡llocate callback data"); 3542 ¡©us = HAL_STATUS_NOMEM ; 3543  çžed ; 3546 ià(! `£t_auth_ty³ ( cÚn -> deviû , cmd -> auth_»q )) { 3547 `”rÜ ("g©t: FažedØ£ˆ£cur™y %d", cmd -> auth_»q ); 3548 ¡©us = HAL_STATUS_FAILED ; 3549 `ä“ ( cb_d©a ); 3550  çžed ; 3553 ià(! `g©t_»ad_ch¬ ( cÚn -> deviû -> ©Œib , desü -> hªdË , »ad_desc_cb , 3554 cb_d©a )) { 3555 `ä“ ( cb_d©a ); 3557 ¡©us = HAL_STATUS_FAILED ; 3558  çžed ; 3561 ¡©us = HAL_STATUS_SUCCESS ; 3563 çžed : 3564 ià( ¡©us !ð HAL_STATUS_SUCCESS ) 3565 `£nd_þ›Á_desü_»ad_nÙify ( GATT_FAILURE , NULL , 0, cÚn_id , 3566 & ¤vc_id , & ch¬_id , & desü_id , 3567 ´im¬y ); 3569 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 3570 HAL_OP_GATT_CLIENT_READ_DESCRIPTOR , ¡©us ); 3571 } } 3573  $£nd_þ›Á_desü_wr™e_nÙify ( št32_t ¡©us , iÁ32_ˆ cÚn_id , 3574 cÚ¡  –em’t_id * ¤vc , 3575 cÚ¡  –em’t_id * ch , 3576 cÚ¡  –em’t_id * desü , 3577 ušt8_t ´im¬y ) { 3578 ušt8_t buf [ IPC_MTU ]; 3579  h®_ev_g©t_þ›Á_wr™e_desütÜ * ev = (*è buf ; 3581 `mem£t ( buf , 0, (buf)); 3583 ev -> ¡©us = status; 3584 ev -> cÚn_id = conn_id; 3586 `–em’t_id_to_h®_¤vc_id ( ¤vc , ´im¬y , & ev -> d©a . ¤vc_id ); 3587 `–em’t_id_to_h®_g©t_id ( ch , & ev -> d©a . ch¬_id ); 3588 `–em’t_id_to_h®_g©t_id ( desü , & ev -> d©a . desü_id ); 3589 ev -> d©a . ¡©us = status; 3591 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 3592 HAL_EV_GATT_CLIENT_WRITE_DESCRIPTOR , 3593 (* ev ),ƒv); 3594 } } 3596  $wr™e_desü_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 3597 gpoš‹r u£r_d©a ) 3599  desc_d©a * cb_d©a = u£r_d©a ; 3601 ià( ¡©us ) 3602 `”rÜ ("gatt: Write descriptors failed: %s", 3603 `©t_ecode2¡r ( ¡©us )); 3605 `£nd_þ›Á_desü_wr™e_nÙify ( ¡©us , cb_d©a -> cÚn_id , 3606 cb_d©a -> ¤vc_id , cb_d©a-> ch¬_id , 3607 cb_d©a -> desü_id , cb_d©a-> ´im¬y ); 3609 `ä“ ( cb_d©a ); 3610 } } 3612  $hªdË_þ›Á_wr™e_desütÜ (cÚ¡ * buf , ušt16_t Ën ) 3614 cÚ¡  h®_cmd_g©t_þ›Á_wr™e_desütÜ * cmd = buf ; 3615  desc_d©a * cb_d©a = NULL ; 3616  ch¬aù”i¡ic * ch ; 3617  desütÜ * desü ; 3618  £rviû * ¤vc ; 3619  –em’t_id ¤vc_id ; 3620  –em’t_id ch¬_id ; 3621  –em’t_id desü_id ; 3622  ­p_cÚÃùiÚ * cÚn ; 3623 št32_t cÚn_id ; 3624 ušt8_t ´im¬y ; 3625 ušt8_t ¡©us ; 3626 gušt »s ; 3628 `DBG (""); 3630 ià( Ën !ð(* cmd ) + cmd->len) { 3631 `”rÜ ("Invalid write desriptor command (%u bytes),erminating", 3632 Ën ); 3633 `¿i£ ( SIGTERM ); 3637 ´im¬y = cmd -> ¤vc_id . is_´im¬y ; 3638 cÚn_id = cmd ->conn_id; 3640 `h®_¤vc_id_to_–em’t_id (& cmd -> ¤vc_id , &srvc_id); 3641 `h®_g©t_id_to_–em’t_id (& cmd -> ch¬_id , &char_id); 3642 `h®_g©t_id_to_–em’t_id (& cmd -> desü_id , &descr_id); 3644 ià(! `fšd_£rviû ( cmd -> cÚn_id , & ¤vc_id , & cÚn , & ¤vc )) { 3645 `”rÜ ("gatt: Write descr. could‚ot find service"); 3647 ¡©us = HAL_STATUS_FAILED ; 3648  çžed ; 3651 ch = `queue_fšd ( ¤vc -> ch¬s , m©ch_ch¬_by_–em’t_id , & ch¬_id ); 3652 ià(! ch ) { 3653 `”rÜ ("gatt: Write descr. could‚ot find characteristic"); 3655 ¡©us = HAL_STATUS_FAILED ; 3656  çžed ; 3659 desü = `queue_fšd ( ch -> desütÜs , m©ch_desü_by_–em’t_id , 3660 & desü_id ); 3661 ià(! desü ) { 3662 `”rÜ ("gatt: Write descr. could‚ot find descriptor"); 3664 ¡©us = HAL_STATUS_FAILED ; 3665  çžed ; 3668 ià( cmd -> wr™e_ty³ !ð GATT_WRITE_TYPE_NO_RESPONSE ) { 3669 cb_d©a = `ü—‹_desc_d©a ( cÚn_id , & ¤vc -> id , & ch ->id, 3670 & desü -> id , ´im¬y ); 3671 ià(! cb_d©a ) { 3672 `”rÜ ("gatt: Write descr. could‚ot‡llocate cb_data"); 3674 ¡©us = HAL_STATUS_NOMEM ; 3675  çžed ; 3679 ià(! `£t_auth_ty³ ( cÚn -> deviû , cmd -> auth_»q )) { 3680 `”rÜ ("g©t: FažedØ£ˆ£cur™y %d", cmd -> auth_»q ); 3681 ¡©us = HAL_STATUS_FAILED ; 3682  çžed ; 3685  cmd -> wr™e_ty³ ) { 3686  GATT_WRITE_TYPE_NO_RESPONSE : 3687 »s = `g©t_wr™e_cmd ( cÚn -> deviû -> ©Œib , desü -> hªdË , 3688 cmd -> v®ue , cmd-> Ën , NULL , NULL); 3690  GATT_WRITE_TYPE_PREPARE : 3691 »s = `g©t_»lŸbË_wr™e_ch¬ ( cÚn -> deviû -> ©Œib , 3692 desü -> hªdË , cmd -> v®ue , 3693 cmd -> Ën , wr™e_desü_cb , 3694 cb_d©a ); 3696  GATT_WRITE_TYPE_DEFAULT : 3697 »s = `g©t_wr™e_ch¬ ( cÚn -> deviû -> ©Œib , desü -> hªdË , 3698 cmd -> v®ue , cmd-> Ën , 3699 wr™e_desü_cb , cb_d©a ); 3702 `”rÜ ("g©t: Wr™ty³ %d unsuµÜ‹d", cmd -> wr™e_ty³ ); 3703 ¡©us = HAL_STATUS_UNSUPPORTED ; 3704  çžed ; 3707 ià(! »s ) { 3708 `”rÜ ("gatt: Write desc, could‚ot write desc"); 3709 ¡©us = HAL_STATUS_FAILED ; 3710  çžed ; 3713 ¡©us = HAL_STATUS_SUCCESS ; 3715 çžed : 3716 ià( ¡©us !ð HAL_STATUS_SUCCESS || 3717 cmd -> wr™e_ty³ =ð GATT_WRITE_TYPE_NO_RESPONSE ) { 3718 št32_t g©t_¡©us = ( ¡©us =ð HAL_STATUS_SUCCESS ) ? 3719 GATT_SUCCESS : GATT_FAILURE ; 3721 `£nd_þ›Á_desü_wr™e_nÙify ( g©t_¡©us , cÚn_id , & ¤vc_id , 3722 & ch¬_id , & desü_id , ´im¬y ); 3723 `ä“ ( cb_d©a ); 3726 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 3727 HAL_OP_GATT_CLIENT_WRITE_DESCRIPTOR , ¡©us ); 3728 } } 3730  $£nd_þ›Á_wr™e_execu‹_nÙify ( št32_t id , iÁ32_ˆ ¡©us ) 3732  h®_ev_g©t_þ›Á_exec_wr™e ev ; 3734 ev . cÚn_id = id ; 3735 ev . ¡©us = status; 3737 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 3738 HAL_EV_GATT_CLIENT_EXEC_WRITE , 3739 ( ev ), &ev); 3740 } } 3742  $wr™e_execu‹_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 3743 gpoš‹r u£r_d©a ) 3745 `£nd_þ›Á_wr™e_execu‹_nÙify ( `PTR_TO_INT ( u£r_d©a ), ¡©us ); 3746 } } 3748  $hªdË_þ›Á_execu‹_wr™e (cÚ¡ * buf , ušt16_t Ën ) 3750 cÚ¡  h®_cmd_g©t_þ›Á_execu‹_wr™e * cmd = buf ; 3751  ­p_cÚÃùiÚ * cÚn ; 3752 ušt8_t ¡©us ; 3753 ušt8_t æags ; 3755 `DBG (""); 3757 cÚn = `fšd_cÚÃùiÚ_by_id ( cmd -> cÚn_id ); 3758 ià(! cÚn ) { 3759 ¡©us = HAL_STATUS_FAILED ; 3760  »¶y ; 3763 æags = cmd -> execu‹ ? ATT_WRITE_ALL_PREP_WRITES : 3764 ATT_CANCEL_ALL_PREP_WRITES ; 3766 ià(! `g©t_execu‹_wr™e ( cÚn -> deviû -> ©Œib , æags , wr™e_execu‹_cb , 3767 `INT_TO_PTR ( cmd -> cÚn_id ))) { 3768 `”rÜ ("gatt: Could‚ot sendƒxecute write"); 3769 ¡©us = HAL_STATUS_FAILED ; 3770  »¶y ; 3773 ¡©us = HAL_STATUS_SUCCESS ; 3774 »¶y : 3775 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 3776 HAL_OP_GATT_CLIENT_EXECUTE_WRITE , ¡©us ); 3779 ià( ¡©us !ð HAL_STATUS_SUCCESS ) 3780 `£nd_þ›Á_wr™e_execu‹_nÙify ( cmd -> cÚn_id , GATT_FAILURE ); 3781 } } 3783  $hªdË_nÙifiÿtiÚ (cÚ¡ ušt8_t * pdu , ušt16_t Ën , 3784 gpoš‹r u£r_d©a ) 3786 ušt8_t buf [ IPC_MTU ]; 3787  h®_ev_g©t_þ›Á_nÙify * ev = (*è buf ; 3788  nÙifiÿtiÚ_d©a * nÙifiÿtiÚ = u£r_d©a ; 3789 ušt8_t d©a_off£t = (ušt8_tè+ ( ušt16_t ); 3791 ià( Ën < d©a_off£t ) 3794 `memýy (& ev -> ch¬_id , & nÙifiÿtiÚ -> ch , (ev->char_id)); 3795 `memýy (& ev -> ¤vc_id , & nÙifiÿtiÚ -> £rviû , (ev->srvc_id)); 3796 `bdaddr2ªdroid (& nÙifiÿtiÚ -> cÚn -> deviû -> bdaddr , & ev -> bda ); 3797 ev -> cÚn_id = nÙifiÿtiÚ -> cÚn -> id ; 3798 ev -> is_nÙify = pdu [0] =ð ATT_OP_HANDLE_NOTIFY ; 3801 ev -> Ën =†’ - d©a_off£t ; 3802 `memýy ( ev -> v®ue , pdu + d©a_off£t , Ën - data_offset); 3804 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , HAL_EV_GATT_CLIENT_NOTIFY , 3805 (* ev è+ƒv-> Ën ,ƒv); 3806 } } 3808  $£nd_»gi¡”_fÜ_nÙifiÿtiÚ_ev ( št32_t id , iÁ32_ˆ »gi¡”ed , 3809 št32_t ¡©us , 3810 cÚ¡  h®_g©t_¤vc_id * ¤vc , 3811 cÚ¡  h®_g©t_g©t_id * ch ) 3813  h®_ev_g©t_þ›Á_»g_fÜ_nÙif ev ; 3815 ev . cÚn_id = id ; 3816 ev . ¡©us = status; 3817 ev . »gi¡”ed =„egistered; 3818 `memýy (& ev . ¤vc_id , ¤vc , (ev.srvc_id)); 3819 `memýy (& ev . ch¬_id , ch , (ev.char_id)); 3821 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 3822 HAL_EV_GATT_CLIENT_REGISTER_FOR_NOTIF , ( ev ), &ev); 3823 } } 3825  $hªdË_þ›Á_»gi¡”_fÜ_nÙifiÿtiÚ (cÚ¡ * buf , 3826 ušt16_t Ën ) 3828 cÚ¡  h®_cmd_g©t_þ›Á_»gi¡”_fÜ_nÙifiÿtiÚ * cmd = buf ; 3829  nÙifiÿtiÚ_d©a * nÙifiÿtiÚ ; 3830  ch¬aù”i¡ic * c ; 3831  –em’t_id m©ch_id ; 3832  ­p_cÚÃùiÚ * cÚn ; 3833 št32_t cÚn_id = 0; 3834  £rviû *service; 3835 ušt8_t ¡©us ; 3836 št32_t g©t_¡©us ; 3837 bdaddr_t addr ; 3839 `DBG (""); 3841 `ªdroid2bdaddr (& cmd -> bdaddr , & addr ); 3843 cÚn = `fšd_cÚn (& addr , cmd -> þ›Á_if ); 3844 ià(! cÚn ) { 3845 ¡©us = HAL_STATUS_FAILED ; 3846  çžed ; 3849 cÚn_id = cÚn -> id ; 3851 `h®_¤vc_id_to_–em’t_id (& cmd -> ¤vc_id , & m©ch_id ); 3852 £rviû = `queue_fšd ( cÚn -> deviû -> £rviûs , m©ch_¤vc_by_–em’t_id , 3853 & m©ch_id ); 3854 ià(! £rviû ) { 3855 ¡©us = HAL_STATUS_FAILED ; 3856  çžed ; 3859 `h®_g©t_id_to_–em’t_id (& cmd -> ch¬_id , & m©ch_id ); 3860 c = `queue_fšd ( £rviû -> ch¬s , m©ch_ch¬_by_–em’t_id , & m©ch_id ); 3861 ià(! c ) { 3862 ¡©us = HAL_STATUS_FAILED ; 3863  çžed ; 3866 nÙifiÿtiÚ = `Ãw0 ( nÙifiÿtiÚ_d©a , 1); 3867 ià(! nÙifiÿtiÚ ) { 3868 ¡©us = HAL_STATUS_NOMEM ; 3869  çžed ; 3872 `memýy (& nÙifiÿtiÚ -> ch , & cmd -> ch¬_id , (notification->ch)); 3873 `memýy (& nÙifiÿtiÚ -> £rviû , & cmd -> ¤vc_id , 3874 ( nÙifiÿtiÚ -> £rviû )); 3875 nÙifiÿtiÚ -> cÚn = conn; 3877 ià( `queue_fšd ( cÚn -> ­p -> nÙifiÿtiÚs , m©ch_nÙifiÿtiÚ , 3878 nÙifiÿtiÚ )) { 3879 `ä“ ( nÙifiÿtiÚ ); 3880 ¡©us = HAL_STATUS_SUCCESS ; 3881  çžed ; 3884 nÙifiÿtiÚ -> nÙif_id = `g_©Œib_»gi¡” ( cÚn -> deviû -> ©Œib , 3885 ATT_OP_HANDLE_NOTIFY , 3886 c -> ch . v®ue_hªdË , 3887 hªdË_nÙifiÿtiÚ , 3888 nÙifiÿtiÚ , 3889 de¡roy_nÙifiÿtiÚ ); 3890 ià(! nÙifiÿtiÚ -> nÙif_id ) { 3891 `ä“ ( nÙifiÿtiÚ ); 3892 ¡©us = HAL_STATUS_FAILED ; 3893  çžed ; 3896 nÙifiÿtiÚ -> šd_id = `g_©Œib_»gi¡” ( cÚn -> deviû -> ©Œib , 3897 ATT_OP_HANDLE_IND , 3898 c -> ch . v®ue_hªdË , 3899 hªdË_nÙifiÿtiÚ , 3900 nÙifiÿtiÚ , 3901 de¡roy_nÙifiÿtiÚ ); 3902 ià(! nÙifiÿtiÚ -> šd_id ) { 3903 `g_©Œib_uÄegi¡” ( cÚn -> deviû -> ©Œib , 3904 nÙifiÿtiÚ -> nÙif_id ); 3905 `ä“ ( nÙifiÿtiÚ ); 3906 ¡©us = HAL_STATUS_FAILED ; 3907  çžed ; 3915 nÙifiÿtiÚ -> »f = 2; 3917 ià(! `queue_push_ž ( cÚn -> ­p -> nÙifiÿtiÚs , nÙifiÿtiÚ )) { 3918 `uÄegi¡”_nÙifiÿtiÚ ( nÙifiÿtiÚ ); 3919 ¡©us = HAL_STATUS_FAILED ; 3920  çžed ; 3923 ¡©us = HAL_STATUS_SUCCESS ; 3925 çžed : 3926 g©t_¡©us = ¡©us ? GATT_FAILURE : GATT_SUCCESS ; 3927 `£nd_»gi¡”_fÜ_nÙifiÿtiÚ_ev ( cÚn_id , 1, g©t_¡©us , 3928 & cmd -> ¤vc_id , &cmd-> ch¬_id ); 3929 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 3930 HAL_OP_GATT_CLIENT_REGISTER_FOR_NOTIFICATION , ¡©us ); 3931 } } 3933  $hªdË_þ›Á_d”egi¡”_fÜ_nÙifiÿtiÚ (cÚ¡ * buf , 3934 ušt16_t Ën ) 3936 cÚ¡  h®_cmd_g©t_þ›Á_d”egi¡”_fÜ_nÙifiÿtiÚ * cmd = buf ; 3937  nÙifiÿtiÚ_d©a * nÙifiÿtiÚ , nÙif ; 3938  ­p_cÚÃùiÚ * cÚn ; 3939 št32_t cÚn_id = 0; 3940 ušt8_t ¡©us ; 3941 št32_t g©t_¡©us ; 3942 bdaddr_t addr ; 3944 `DBG (""); 3946 `ªdroid2bdaddr (& cmd -> bdaddr , & addr ); 3948 cÚn = `fšd_cÚn (& addr , cmd -> þ›Á_if ); 3949 ià(! cÚn ) { 3950 ¡©us = HAL_STATUS_FAILED ; 3951  çžed ; 3954 cÚn_id = cÚn -> id ; 3956 `memýy (& nÙif . ch , & cmd -> ch¬_id , (notif.ch)); 3957 `memýy (& nÙif . £rviû , & cmd -> ¤vc_id , (notif.service)); 3958 nÙif . cÚn = conn; 3960 nÙifiÿtiÚ = `queue_fšd ( cÚn -> ­p -> nÙifiÿtiÚs , 3961 m©ch_nÙifiÿtiÚ , & nÙif ); 3962 ià(! nÙifiÿtiÚ ) { 3963 ¡©us = HAL_STATUS_FAILED ; 3964  çžed ; 3967 `uÄegi¡”_nÙifiÿtiÚ ( nÙifiÿtiÚ ); 3969 ¡©us = HAL_STATUS_SUCCESS ; 3971 çžed : 3972 g©t_¡©us = ¡©us ? GATT_FAILURE : GATT_SUCCESS ; 3973 `£nd_»gi¡”_fÜ_nÙifiÿtiÚ_ev ( cÚn_id , 0, g©t_¡©us , 3974 & cmd -> ¤vc_id , &cmd-> ch¬_id ); 3976 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 3977 HAL_OP_GATT_CLIENT_DEREGISTER_FOR_NOTIFICATION , ¡©us ); 3978 } } 3980  $£nd_þ›Á_»mÙe_rssi_nÙify ( št32_t þ›Á_if , 3981 cÚ¡ bdaddr_t * addr , 3982 št32_t rssi , iÁ32_ˆ ¡©us ) 3984  h®_ev_g©t_þ›Á_»ad_»mÙe_rssi ev ; 3986 ev . þ›Á_if = client_if; 3987 `bdaddr2ªdroid ( addr , & ev . add»ss ); 3988 ev . rssi =„ssi; 3989 ev . ¡©us = status; 3991 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 3992 HAL_EV_GATT_CLIENT_READ_REMOTE_RSSI , ( ev ), &ev); 3993 } } 3995  $»ad_»mÙe_rssi_cb ( ušt8_t ¡©us , cÚ¡ bdaddr_t * addr , 3996 št8_t rssi , * u£r_d©a ) 3998 št32_t þ›Á_if = `PTR_TO_INT ( u£r_d©a ); 3999 št32_t g©t_¡©us = ¡©us ? GATT_FAILURE : GATT_SUCCESS ; 4001 `£nd_þ›Á_»mÙe_rssi_nÙify ( þ›Á_if , addr , rssi , g©t_¡©us ); 4002 } } 4004  $hªdË_þ›Á_»ad_»mÙe_rssi (cÚ¡ * buf , ušt16_t Ën ) 4006 cÚ¡  h®_cmd_g©t_þ›Á_»ad_»mÙe_rssi * cmd = buf ; 4007 ušt8_t ¡©us ; 4008 bdaddr_t bdaddr ; 4010 `DBG (""); 4012 ià(! `fšd_­p_by_id ( cmd -> þ›Á_if )) { 4013 ¡©us = HAL_STATUS_FAILED ; 4014  çžed ; 4017 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 4018 ià(! `bt_»ad_deviû_rssi (& bdaddr , »ad_»mÙe_rssi_cb , 4019 `INT_TO_PTR ( cmd -> þ›Á_if ))) { 4020 `”rÜ ("gatt: Could‚ot„ead RSSI"); 4021 ¡©us = HAL_STATUS_FAILED ; 4022  çžed ; 4025 ¡©us = HAL_STATUS_SUCCESS ; 4027 çžed : 4028 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 4029 HAL_OP_GATT_CLIENT_READ_REMOTE_RSSI , ¡©us ); 4031 ià( ¡©us !ð HAL_STATUS_SUCCESS ) 4032 `£nd_þ›Á_»mÙe_rssi_nÙify ( cmd -> þ›Á_if , & bdaddr , 0, 4033 GATT_FAILURE ); 4034 } } 4036  $hªdË_þ›Á_g‘_deviû_ty³ (cÚ¡ * buf , ušt16_t Ën ) 4038 cÚ¡  h®_cmd_g©t_þ›Á_g‘_deviû_ty³ * cmd = buf ; 4039  h®_r¥_g©t_þ›Á_g‘_deviû_ty³ r¥ ; 4040 bdaddr_t bdaddr ; 4042 `DBG (""); 4044 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 4046 r¥ . ty³ = `bt_g‘_deviû_ªdroid_ty³ (& bdaddr ); 4048 `c_£nd_r¥_fuÎ ( h®_c , HAL_SERVICE_ID_GATT , 4049 HAL_OP_GATT_CLIENT_GET_DEVICE_TYPE , 4050 ( r¥ ), &rsp, -1); 4051 } } 4053  $hªdË_þ›Á_£t_adv_d©a (cÚ¡ * buf , ušt16_t Ën ) 4055 cÚ¡  h®_cmd_g©t_þ›Á_£t_adv_d©a * cmd = buf ; 4056 ušt8_t ¡©us ; 4058 ià( Ën !ð(* cmd è+ cmd-> mªuçùu»r_Ën ) { 4059 `”rÜ ("Invalid set‡dv data command (%u bytes),erminating", 4060 Ën ); 4061 `¿i£ ( SIGTERM ); 4065 `DBG ("scan_rsp=%u‚ame=%ux=%u min=%d max=%d‡pp=%d", 4066 cmd -> £t_sÿn_r¥ , cmd-> šþude_Çme , cmd-> šþude_txpow” , 4067 cmd -> mš_š‹rv® , cmd-> max_š‹rv® , cmd-> ­³¬ªû ); 4069 `DBG ("manufacturer=%u service_data=%u service_uuid=%u", 4070 cmd -> mªuçùu»r_Ën , cmd-> £rviû_d©a_Ën , 4071 cmd -> £rviû_uuid_Ën ); 4074 ià( cmd -> mªuçùu»r_Ën || cmd-> £rviû_d©a_Ën || 4075 cmd -> £rviû_uuid_Ën ) { 4076 `”rÜ ("gatt: Extra‡dvertising data‚ot supported"); 4077 ¡©us = HAL_STATUS_FAILED ; 4078  çžed ; 4081 ¡©us = HAL_STATUS_SUCCESS ; 4083 çžed : 4084 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 4085 HAL_OP_GATT_CLIENT_SET_ADV_DATA , ¡©us ); 4086 } } 4088  $‹¡_commªd_»suÉ ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 4089 gušt16 Ën , gpoš‹r u£r_d©a ) 4091 `DBG ("¡©us: %d", ¡©us ); 4092 } } 4094  ušt8_t $‹¡_»ad_wr™e ( bdaddr_t * bdaddr , bt_uuid_t * uuid , ušt16_t Ý , 4095 ušt16_t u2 ,ušt16_ˆ u3 , 4096 ušt16_t u4 , ušt16_ˆ u5 ) 4098 gušt16 Ëngth = 0; 4099  g©t_deviû * dev ; 4100 ušt8_t * pdu ; 4101 size_t mtu ; 4103 dev = `fšd_deviû_by_addr ( bdaddr ); 4104 ià(! dev || dev-> ¡©e !ð DEVICE_CONNECTED ) 4105  HAL_STATUS_FAILED ; 4107 pdu = `g_©Œib_g‘_bufãr ( dev -> ©Œib , & mtu ); 4108 ià(! pdu ) 4109  HAL_STATUS_FAILED ; 4111  Ý ) { 4112  ATT_OP_READ_REQ : 4113 Ëngth = `’c_»ad_»q ( u2 , pdu , mtu ); 4115  ATT_OP_READ_BY_TYPE_REQ : 4116 Ëngth = `’c_»ad_by_ty³_»q ( u2 , u3 , uuid , pdu , mtu ); 4118  ATT_OP_READ_BLOB_REQ : 4119 Ëngth = `’c_»ad_blob_»q ( u2 , u3 , pdu , mtu ); 4121  ATT_OP_READ_BY_GROUP_REQ : 4122 Ëngth = `’c_»ad_by_g½_»q ( u2 , u3 , uuid , pdu , mtu ); 4124  ATT_OP_READ_MULTI_REQ : 4125  HAL_STATUS_UNSUPPORTED ; 4126  ATT_OP_WRITE_REQ : 4127 Ëngth = `’c_wr™e_»q ( u2 , ( ušt8_t *è& u3 , (u3), pdu , 4128 mtu ); 4130  ATT_OP_WRITE_CMD : 4131 Ëngth = `’c_wr™e_cmd ( u2 , ( ušt8_t *è& u3 , (u3), pdu , 4132 mtu ); 4134  ATT_OP_PREP_WRITE_REQ : 4135 Ëngth = `’c_´•_wr™e_»q ( u2 , u3 , ( ušt8_t *è& u4 , (u4), 4136 pdu , mtu ); 4138  ATT_OP_EXEC_WRITE_REQ : 4139 Ëngth = `’c_exec_wr™e_»q ( u2 , pdu , mtu ); 4141  ATT_OP_SIGNED_WRITE_CMD : 4142 ià( `sigÃd_wr™e_cmd ( dev , u2 , ( ušt8_t *è& u3 , (u3))) 4143  HAL_STATUS_SUCCESS ; 4145  HAL_STATUS_FAILED ; 4147 `”rÜ ("gatt: Unknown operationype"); 4149  HAL_STATUS_UNSUPPORTED ; 4152 ià(! Ëngth ) 4153  HAL_STATUS_FAILED ; 4155 `g_©Œib_£nd ( dev -> ©Œib , 0, pdu , Ëngth , ‹¡_commªd_»suÉ , NULL , 4156 NULL ); 4158  HAL_STATUS_SUCCESS ; 4159 } } 4161  ušt8_t $‹¡_šü—£_£cur™y ( bdaddr_t * bdaddr , ušt16_t u1 ) 4163  g©t_deviû * deviû ; 4165 deviû = `fšd_deviû_by_addr ( bdaddr ); 4166 ià(! deviû ) 4167  HAL_STATUS_FAILED ; 4169 ià(! `£t_auth_ty³ ( deviû , u1 )) 4170  HAL_STATUS_FAILED ; 4172  HAL_STATUS_SUCCESS ; 4173 } } 4175  $hªdË_þ›Á_‹¡_commªd (cÚ¡ * buf , ušt16_t Ën ) 4177 cÚ¡  h®_cmd_g©t_þ›Á_‹¡_commªd * cmd = buf ; 4178  g©t_­p * ­p ; 4179 bdaddr_t bdaddr ; 4180 bt_uuid_t uuid ; 4181 ušt8_t ¡©us ; 4183 `DBG (""); 4185 `ªdroid2bdaddr ( cmd -> bda1 , & bdaddr ); 4186 `ªdroid2uuid ( cmd -> uuid1 , & uuid ); 4188  cmd -> commªd ) { 4189  GATT_CLIENT_TEST_CMD_ENABLE : 4190 ià( cmd -> u1 ) { 4191 ià(! ‹¡_þ›Á_if ) { 4192 ­p = `»gi¡”_­p ( TEST_UUID , GATT_CLIENT ); 4193 ià( ­p ) 4194 ‹¡_þ›Á_if = ­p -> id ; 4197 ià( ‹¡_þ›Á_if ) 4198 ¡©us = HAL_STATUS_SUCCESS ; 4200 ¡©us = HAL_STATUS_FAILED ; 4202 ¡©us = `uÄegi¡”_­p ( ‹¡_þ›Á_if ); 4203 ‹¡_þ›Á_if = 0; 4206  GATT_CLIENT_TEST_CMD_CONNECT : 4208 ¡©us = `hªdË_cÚÃù ( ‹¡_þ›Á_if , & bdaddr ); 4210  GATT_CLIENT_TEST_CMD_DISCONNECT : 4211 ­p = `queue_fšd ( g©t_­ps , m©ch_­p_by_id , 4212 `INT_TO_PTR ( ‹¡_þ›Á_if )); 4213 ià( ­p ) 4214 `­p_discÚÃù_deviûs ( ­p ); 4216 ¡©us = HAL_STATUS_SUCCESS ; 4218  GATT_CLIENT_TEST_CMD_DISCOVER : 4219 ¡©us = HAL_STATUS_FAILED ; 4221  GATT_CLIENT_TEST_CMD_READ : 4222  GATT_CLIENT_TEST_CMD_WRITE : 4223 ¡©us = `‹¡_»ad_wr™e (& bdaddr , & uuid , cmd -> u1 , cmd-> u2 , 4224 cmd -> u3 , cmd-> u4 , cmd-> u5 ); 4226  GATT_CLIENT_TEST_CMD_INCREASE_SECURITY : 4227 ¡©us = `‹¡_šü—£_£cur™y (& bdaddr , cmd -> u1 ); 4229  GATT_CLIENT_TEST_CMD_PAIRING_CONFIG : 4231 ¡©us = HAL_STATUS_FAILED ; 4235 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 4236 HAL_OP_GATT_CLIENT_TEST_COMMAND , ¡©us ); 4237 } } 4239  $hªdË_£rv”_»gi¡” (cÚ¡ * buf , ušt16_t Ën ) 4241 cÚ¡  h®_cmd_g©t_£rv”_»gi¡” * cmd = buf ; 4242  h®_ev_g©t_£rv”_»gi¡” ev ; 4243  g©t_­p * ­p ; 4245 `DBG (""); 4247 `mem£t (& ev , 0, (ev)); 4249 ­p = `»gi¡”_­p ( cmd -> uuid , GATT_SERVER ); 4251 ià( ­p ) { 4252 ev . £rv”_if = ­p -> id ; 4253 ev . ¡©us = GATT_SUCCESS ; 4255 ev . ¡©us = GATT_FAILURE ; 4258 `memýy ( ev . uuid , cmd ->uuid, (ev.uuid)); 4260 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 4261 HAL_EV_GATT_SERVER_REGISTER , ( ev ), &ev); 4263 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , HAL_OP_GATT_SERVER_REGISTER , 4264 HAL_STATUS_SUCCESS ); 4265 } } 4267  $hªdË_£rv”_uÄegi¡” (cÚ¡ * buf , ušt16_t Ën ) 4269 cÚ¡  h®_cmd_g©t_£rv”_uÄegi¡” * cmd = buf ; 4270 ušt8_t ¡©us ; 4272 `DBG (""); 4274 ¡©us = `uÄegi¡”_­p ( cmd -> £rv”_if ); 4276 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 4277 HAL_OP_GATT_SERVER_UNREGISTER , ¡©us ); 4278 } } 4280  $hªdË_£rv”_cÚÃù (cÚ¡ * buf , ušt16_t Ën ) 4282 cÚ¡  h®_cmd_g©t_£rv”_cÚÃù * cmd = buf ; 4283 ušt8_t ¡©us ; 4284 bdaddr_t addr ; 4286 `DBG (""); 4288 `ªdroid2bdaddr (& cmd -> bdaddr , & addr ); 4292 ¡©us = `hªdË_cÚÃù ( cmd -> £rv”_if , & addr ); 4294 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , HAL_OP_GATT_SERVER_CONNECT , 4295 ¡©us ); 4296 } } 4298  $hªdË_£rv”_discÚÃù (cÚ¡ * buf , ušt16_t Ën ) 4300 cÚ¡  h®_cmd_g©t_£rv”_discÚÃù * cmd = buf ; 4301  ­p_cÚÃùiÚ * cÚn ; 4302 ušt8_t ¡©us ; 4304 `DBG (""); 4307 cÚn = `fšd_cÚÃùiÚ_by_id ( cmd -> cÚn_id ); 4308 ià( cÚn ) 4309 `Œigg”_discÚÃùiÚ ( cÚn ); 4311 ¡©us = HAL_STATUS_SUCCESS ; 4313 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 4314 HAL_OP_GATT_SERVER_DISCONNECT , ¡©us ); 4315 } } 4317  $hªdË_£rv”_add_£rviû (cÚ¡ * buf , ušt16_t Ën ) 4319 cÚ¡  h®_cmd_g©t_£rv”_add_£rviû * cmd = buf ; 4320  h®_ev_g©t_£rv”_£rviû_added ev ; 4321  g©t_­p * £rv” ; 4322  g©t_db_©Œibu‹ * £rviû ; 4323 ušt8_t ¡©us ; 4324 bt_uuid_t uuid ; 4326 `DBG (""); 4328 `mem£t (& ev , 0, (ev)); 4330 £rv” = `fšd_­p_by_id ( cmd -> £rv”_if ); 4331 ià(! £rv” ) { 4332 ¡©us = HAL_STATUS_FAILED ; 4333  çžed ; 4336 `ªdroid2uuid ( cmd -> ¤vc_id . uuid , &uuid); 4338 £rviû = `g©t_db_add_£rviû ( g©t_db , & uuid , cmd -> ¤vc_id . is_´im¬y , 4339 cmd -> num_hªdËs ); 4340 ià(! £rviû ) { 4341 ¡©us = HAL_STATUS_FAILED ; 4342  çžed ; 4345 ev . ¤vc_hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( £rviû ); 4346 ià(! ev . ¤vc_hªdË ) { 4347 ¡©us = HAL_STATUS_FAILED ; 4348  çžed ; 4351 ¡©us = HAL_STATUS_SUCCESS ; 4353 çžed : 4354 ev . ¡©us = stu =ð HAL_STATUS_SUCCESS ? GATT_SUCCESS : GATT_FAILURE ; 4355 ev . ¤vc_id = cmd ->srvc_id; 4356 ev . £rv”_if = cmd ->server_if; 4358 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 4359 HAL_EV_GATT_SERVER_SERVICE_ADDED , ( ev ), &ev); 4361 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 4362 HAL_OP_GATT_SERVER_ADD_SERVICE , ¡©us ); 4363 } } 4365  $hªdË_£rv”_add_šþuded_£rviû (cÚ¡ * buf , ušt16_t Ën ) 4367 cÚ¡  h®_cmd_g©t_£rv”_add_šc_£rviû * cmd = buf ; 4368  h®_ev_g©t_£rv”_šc_¤vc_added ev ; 4369  g©t_­p * £rv” ; 4370  g©t_db_©Œibu‹ * £rviû , * šþude ; 4371 ušt8_t ¡©us ; 4373 `DBG (""); 4375 `mem£t (& ev , 0, (ev)); 4377 £rv” = `fšd_­p_by_id ( cmd -> £rv”_if ); 4378 ià(! £rv” ) { 4379 ¡©us = HAL_STATUS_FAILED ; 4380  çžed ; 4383 £rviû = `g©t_db_g‘_©Œibu‹ ( g©t_db , cmd -> £rviû_hªdË ); 4384 ià(! £rviû ) { 4385 ¡©us = HAL_STATUS_FAILED ; 4386  çžed ; 4389 šþude = `g©t_db_g‘_©Œibu‹ ( g©t_db , cmd -> šþuded_hªdË ); 4390 ià(! šþude ) { 4391 ¡©us = HAL_STATUS_FAILED ; 4392  çžed ; 4395 £rviû = `g©t_db_£rviû_add_šþuded (£rviû, šþude ); 4396 ià(! £rviû ) { 4397 ¡©us = HAL_STATUS_FAILED ; 4398  çžed ; 4401 ev . šþ_¤vc_hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( £rviû ); 4402 ¡©us = HAL_STATUS_SUCCESS ; 4403 çžed : 4404 ev . ¤vc_hªdË = cmd -> £rviû_hªdË ; 4405 ev . ¡©us = status; 4406 ev . £rv”_if = cmd ->server_if; 4407 ev . ¡©us = stu =ð HAL_STATUS_SUCCESS ? GATT_SUCCESS : GATT_FAILURE ; 4409 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 4410 HAL_EV_GATT_SERVER_INC_SRVC_ADDED , ( ev ), &ev); 4412 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 4413 HAL_OP_GATT_SERVER_ADD_INC_SERVICE , ¡©us ); 4414 } } 4416  boÞ $is_£rviû (cÚ¡ bt_uuid_t * ty³ ) 4418 bt_uuid_t uuid ; 4420 `bt_uuid16_ü—‹ (& uuid , GATT_PRIM_SVC_UUID ); 4421 ià(! `bt_uuid_cmp (& uuid , ty³ )) 4422  Œue ; 4424 `bt_uuid16_ü—‹ (& uuid , GATT_SND_SVC_UUID ); 4425 ià(! `bt_uuid_cmp (& uuid , ty³ )) 4426  Œue ; 4428  çl£ ; 4429 } } 4431  boÞ $m©ch_³ndšg_dev_»que¡ (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 4433 cÚ¡  ³ndšg_»que¡ *³ndšg_»que¡ = d©a ; 4435  ³ndšg_»que¡ -> ¡©e =ð REQUEST_PENDING ; 4436 } } 4438  $£nd_dev_com¶‘e_»¥Ú£ ( g©t_deviû * deviû , 4439 ušt8_t Ýcode ) 4441 size_t mtu ; 4442 ušt8_t * r¥ = `g_©Œib_g‘_bufãr ( deviû -> ©Œib , & mtu ); 4443  ³ndšg_»que¡ * v® ; 4444 ušt16_t Ën = 0; 4445 ušt8_t ”rÜ = 0; 4447 ià( `queue_i£m±y ( deviû -> ³ndšg_»que¡s )) 4450 ià( `queue_fšd ( deviû -> ³ndšg_»que¡s , m©ch_³ndšg_dev_»que¡ , 4451 NULL )) { 4452 `DBG ("Still…ending„equests"); 4456  Ýcode ) { 4457  ATT_OP_READ_BY_TYPE_REQ : { 4458  ©t_d©a_li¡ * adl ; 4459  ™”©Ü = 0; 4460  Ëngth ; 4461  queue * ‹mp ; 4463 ‹mp = `queue_Ãw (); 4464 ià(! ‹mp ) 4465  dÚe ; 4467 v® = `queue_pÝ_h—d ( deviû -> ³ndšg_»que¡s ); 4468 ià(! v® ) { 4469 `queue_de¡roy ( ‹mp , NULL ); 4470 ”rÜ = ATT_ECODE_ATTR_NOT_FOUND ; 4471  dÚe ; 4474 ià( v® -> ”rÜ ) { 4475 `queue_de¡roy ( ‹mp , NULL ); 4476 ”rÜ = v® ->error; 4477 `de¡roy_³ndšg_»que¡ ( v® ); 4478  dÚe ; 4481 Ëngth = v® ->length; 4483  v® && v®-> Ëngth =ðËngth && v®-> ”rÜ == 0) { 4484 `queue_push_ž ( ‹mp , v® ); 4485 v® = `queue_pÝ_h—d ( deviû -> ³ndšg_»que¡s ); 4488 adl = `©t_d©a_li¡_®loc ( `queue_Ëngth ( ‹mp ), ( ušt16_t ) + 4489 Ëngth ); 4491 ià( v® ) 4492 `de¡roy_³ndšg_»que¡ ( v® ); 4494 v® = `queue_pÝ_h—d ( ‹mp ); 4495  v® ) { 4496 ušt8_t * v®ue = adl -> d©a [ ™”©Ü ++]; 4497 ušt16_t hªdË ; 4499 hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( v® -> ©Œib ); 4501 `put_Ë16 ( hªdË , v®ue ); 4502 `memýy (& v®ue [2], v® ->v®ue, v®-> Ëngth ); 4504 `de¡roy_³ndšg_»que¡ ( v® ); 4505 v® = `queue_pÝ_h—d ( ‹mp ); 4508 Ën = `’c_»ad_by_ty³_»¥ ( adl , r¥ , mtu ); 4510 `©t_d©a_li¡_ä“ ( adl ); 4511 `queue_de¡roy ( ‹mp , de¡roy_³ndšg_»que¡ ); 4515  ATT_OP_READ_BLOB_REQ : 4516 v® = `queue_pÝ_h—d ( deviû -> ³ndšg_»que¡s ); 4517 ià( v® -> ”rÜ ) { 4518 ”rÜ = v® ->error; 4519  dÚe ; 4522 Ën = `’c_»ad_blob_»¥ ( v® -> v®ue , v®-> Ëngth , v®-> off£t , 4523 r¥ , mtu ); 4524 `de¡roy_³ndšg_»que¡ ( v® ); 4526  ATT_OP_READ_REQ : 4527 v® = `queue_pÝ_h—d ( deviû -> ³ndšg_»que¡s ); 4528 ià( v® -> ”rÜ ) { 4529 ”rÜ = v® ->error; 4530  dÚe ; 4533 Ën = `’c_»ad_»¥ ( v® -> v®ue , v®-> Ëngth , r¥ , mtu ); 4534 `de¡roy_³ndšg_»que¡ ( v® ); 4536  ATT_OP_READ_BY_GROUP_REQ : { 4537  ©t_d©a_li¡ * adl ; 4538  ™”©Ü = 0; 4539  Ëngth ; 4540  queue * ‹mp ; 4542 ‹mp = `queue_Ãw (); 4543 ià(! ‹mp ) 4544  dÚe ; 4546 v® = `queue_pÝ_h—d ( deviû -> ³ndšg_»que¡s ); 4547 ià(! v® ) { 4548 `queue_de¡roy ( ‹mp , NULL ); 4549 ”rÜ = ATT_ECODE_ATTR_NOT_FOUND ; 4550  dÚe ; 4553 Ëngth = v® ->length; 4555  v® && v®-> Ëngth ==†ength) { 4556 `queue_push_ž ( ‹mp , v® ); 4557 v® = `queue_pÝ_h—d ( deviû -> ³ndšg_»que¡s ); 4560 adl = `©t_d©a_li¡_®loc ( `queue_Ëngth ( ‹mp ), 4561 2 * ( ušt16_t è+ Ëngth ); 4563 v® = `queue_pÝ_h—d ( ‹mp ); 4564  v® ) { 4565 ušt8_t * v®ue = adl -> d©a [ ™”©Ü ++]; 4566 ušt16_t ¡¬t_hªdË , ’d_hªdË ; 4568 `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( v® -> ©Œib , 4569 & ¡¬t_hªdË , 4570 & ’d_hªdË ); 4572 `put_Ë16 ( ¡¬t_hªdË , v®ue ); 4573 `put_Ë16 ( ’d_hªdË , & v®ue [2]); 4574 `memýy (& v®ue [4], v® ->v®ue, v®-> Ëngth ); 4576 `de¡roy_³ndšg_»que¡ ( v® ); 4577 v® = `queue_pÝ_h—d ( ‹mp ); 4580 Ën = `’c_»ad_by_g½_»¥ ( adl , r¥ , mtu ); 4582 `©t_d©a_li¡_ä“ ( adl ); 4583 `queue_de¡roy ( ‹mp , de¡roy_³ndšg_»que¡ ); 4587  ATT_OP_FIND_BY_TYPE_REQ : { 4588 GSLi¡ * li¡ = NULL ; 4590 v® = `queue_pÝ_h—d ( deviû -> ³ndšg_»que¡s ); 4591  v® ) { 4592  ©t_¿nge * ¿nge ; 4593 cÚ¡ bt_uuid_t * ty³ ; 4596 ià(( v® -> Ëngth !ðv®-> fž‹r_vËn ) || 4597 `memcmp ( v® -> v®ue , v®-> fž‹r_v®ue , 4598 v® -> Ëngth )) { 4600 `de¡roy_³ndšg_»que¡ ( v® ); 4601 v® = `queue_pÝ_h—d ( deviû -> ³ndšg_»que¡s ); 4605 ¿nge = `Ãw0 ( ©t_¿nge , 1); 4606 ià(! ¿nge ) { 4607 `de¡roy_³ndšg_»que¡ ( v® ); 4608 ”rÜ = ATT_ECODE_INSUFF_RESOURCES ; 4612 ¿nge -> ¡¬t = `g©t_db_©Œibu‹_g‘_hªdË ( 4613 v® -> ©Œib ); 4615 ty³ = `g©t_db_©Œibu‹_g‘_ty³ ( v® -> ©Œib ); 4616 ià( `is_£rviû ( ty³ )) 4617 `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( 4618 v® -> ©Œib , 4619 NULL , 4620 & ¿nge -> ’d ); 4622 ¿nge -> ’d =„ªge-> ¡¬t ; 4624 li¡ = `g_¦i¡_­³nd Öi¡, ¿nge ); 4626 `de¡roy_³ndšg_»que¡ ( v® ); 4627 v® = `queue_pÝ_h—d ( deviû -> ³ndšg_»que¡s ); 4630 ià( li¡ && ! ”rÜ ) 4631 Ën = `’c_fšd_by_ty³_»¥ ( li¡ , r¥ , mtu ); 4633 ”rÜ = ATT_ECODE_ATTR_NOT_FOUND ; 4635 `g_¦i¡_ä“_fuÎ ( li¡ , ä“ ); 4639  ATT_OP_EXEC_WRITE_REQ : 4640 v® = `queue_pÝ_h—d ( deviû -> ³ndšg_»que¡s ); 4641 ià( v® -> ”rÜ ) { 4642 ”rÜ = v® ->error; 4643  dÚe ; 4646 Ën = `’c_exec_wr™e_»¥ ( r¥ ); 4647 `de¡roy_³ndšg_»que¡ ( v® ); 4649  ATT_OP_WRITE_REQ : 4650 v® = `queue_pÝ_h—d ( deviû -> ³ndšg_»que¡s ); 4651 ià( v® -> ”rÜ ) { 4652 ”rÜ = v® ->error; 4653  dÚe ; 4656 Ën = `’c_wr™e_»¥ ( r¥ ); 4657 `de¡roy_³ndšg_»que¡ ( v® ); 4659  ATT_OP_PREP_WRITE_REQ : { 4660 ušt16_t hªdË ; 4662 v® = `queue_pÝ_h—d ( deviû -> ³ndšg_»que¡s ); 4663 ià( v® -> ”rÜ ) { 4664 ”rÜ = v® ->error; 4665  dÚe ; 4668 hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( v® -> ©Œib ); 4670 Ën = `’c_´•_wr™e_»¥ ( hªdË , v® -> off£t , v®-> v®ue , 4671 v® -> Ëngth , r¥ , mtu ); 4672 `de¡roy_³ndšg_»que¡ ( v® ); 4679 dÚe : 4680 ià(! Ën ) 4681 Ën = `’c_”rÜ_»¥ ( Ýcode , 0x0000, ”rÜ , r¥ , mtu ); 4683 `g_©Œib_£nd ( deviû -> ©Œib , 0, r¥ , Ën , NULL , NULL, NULL); 4685 `queue_»move_®l ( deviû -> ³ndšg_»que¡s , NULL , NULL, 4686 de¡roy_³ndšg_»que¡ ); 4687 } } 4689  s»que¡_´oûssšg_d©a { 4690 ušt8_t mÝcode ; 4691  g©t_deviû * mdeviû ; 4694  ušt8_t $check_deviû_³rmissiÚs ( g©t_deviû * deviû , 4695 ušt8_t Ýcode , ušt32_t ³rmissiÚs ) 4697 GIOChªÃl * io ; 4698  £c_Ëv– ; 4700 io = `g_©Œib_g‘_chªÃl ( deviû -> ©Œib ); 4702 ià(! `bt_io_g‘ ( io , NULL , BT_IO_OPT_SEC_LEVEL , & £c_Ëv– , 4703 BT_IO_OPT_INVALID )) 4704  ATT_ECODE_UNLIKELY ; 4706 `DBG ("Ýcod%u…”missiÚ %u sec_Ëv– %u", Ýcode , ³rmissiÚs , 4707 £c_Ëv– ); 4709  Ýcode ) { 4710  ATT_OP_SIGNED_WRITE_CMD : 4711 ià(!( ³rmissiÚs & GATT_PERM_WRITE_SIGNED )) 4712  ATT_ECODE_WRITE_NOT_PERM ; 4714 ià(( ³rmissiÚs & GATT_PERM_WRITE_SIGNED_MITM ) && 4715 £c_Ëv– < BT_SECURITY_HIGH ) 4716  ATT_ECODE_AUTHENTICATION ; 4718  ATT_OP_READ_BY_TYPE_REQ : 4719  ATT_OP_READ_REQ : 4720  ATT_OP_READ_BLOB_REQ : 4721  ATT_OP_READ_MULTI_REQ : 4722  ATT_OP_READ_BY_GROUP_REQ : 4723  ATT_OP_FIND_BY_TYPE_REQ : 4724  ATT_OP_FIND_INFO_REQ : 4725 ià(!( ³rmissiÚs & GATT_PERM_READ )) 4726  ATT_ECODE_READ_NOT_PERM ; 4728 ià(( ³rmissiÚs & GATT_PERM_READ_MITM ) && 4729 £c_Ëv– < BT_SECURITY_HIGH ) 4730  ATT_ECODE_AUTHENTICATION ; 4732 ià(( ³rmissiÚs & GATT_PERM_READ_ENCRYPTED ) && 4733 £c_Ëv– < BT_SECURITY_MEDIUM ) 4734  ATT_ECODE_INSUFF_ENC ; 4736 ià( ³rmissiÚs & GATT_PERM_READ_AUTHORIZATION ) 4737  ATT_ECODE_AUTHORIZATION ; 4739  ATT_OP_WRITE_REQ : 4740  ATT_OP_WRITE_CMD : 4741  ATT_OP_PREP_WRITE_REQ : 4742  ATT_OP_EXEC_WRITE_REQ : 4743 ià(!( ³rmissiÚs & GATT_PERM_WRITE )) 4744  ATT_ECODE_WRITE_NOT_PERM ; 4746 ià(( ³rmissiÚs & GATT_PERM_WRITE_MITM ) && 4747 £c_Ëv– < BT_SECURITY_HIGH ) 4748  ATT_ECODE_AUTHENTICATION ; 4750 ià(( ³rmissiÚs & GATT_PERM_WRITE_ENCRYPTED ) && 4751 £c_Ëv– < BT_SECURITY_MEDIUM ) 4752  ATT_ECODE_INSUFF_ENC ; 4754 ià( ³rmissiÚs & GATT_PERM_WRITE_AUTHORIZATION ) 4755  ATT_ECODE_AUTHORIZATION ; 4758  ATT_ECODE_UNLIKELY ; 4762 } } 4764  ušt8_t $”r_to_©t ( ”r ) 4766 ià(! ”r || (”¸> 0 &&ƒ¼ < UINT8_MAX )) 4767  ”r ; 4769  ”r ) { 4770 - ENOENT : 4771  ATT_ECODE_INVALID_HANDLE ; 4772 - ENOMEM : 4773  ATT_ECODE_INSUFF_RESOURCES ; 4775  ATT_ECODE_UNLIKELY ; 4777 } } 4779  $©Œibu‹_»ad_cb ( g©t_db_©Œibu‹ * ©Œib ,  ”r , 4780 cÚ¡ ušt8_t * v®ue , size_t Ëngth , 4781 * u£r_d©a ) 4783  ³ndšg_»que¡ * »¥_d©a = u£r_d©a ; 4784 ušt8_t ”rÜ = `”r_to_©t ( ”r ); 4786 »¥_d©a -> ©Œib =‡ttrib; 4787 »¥_d©a -> Ëngth =†ength; 4788 »¥_d©a -> ”rÜ =ƒrror; 4790 »¥_d©a -> ¡©e = REQUEST_DONE ; 4792 ià(! Ëngth ) 4795 »¥_d©a -> v®ue = `m®loc0 ( Ëngth ); 4796 ià(! »¥_d©a -> v®ue ) { 4797 »¥_d©a -> ”rÜ = ATT_ECODE_INSUFF_RESOURCES ; 4802 `memýy ( »¥_d©a -> v®ue , v®ue, Ëngth ); 4803 } } 4805  $»ad_»que¡ed_©Œibu‹s (* d©a , * u£r_d©a ) 4807  ³ndšg_»que¡ * »¥_d©a = d©a ; 4808  »que¡_´oûssšg_d©a * ´oûss_d©a = u£r_d©a ; 4809  g©t_db_©Œibu‹ * ©Œib ; 4810 ušt32_t ³rmissiÚs ; 4811 ušt8_t ”rÜ ; 4813 ©Œib = »¥_d©a ->attrib; 4814 ià(! ©Œib ) { 4815 »¥_d©a -> ”rÜ = ATT_ECODE_ATTR_NOT_FOUND ; 4816 »¥_d©a -> ¡©e = REQUEST_DONE ; 4820 `g©t_db_©Œibu‹_g‘_³rmissiÚs ( ©Œib , & ³rmissiÚs ); 4826 ià( ³rmissiÚs == 0) 4827 ³rmissiÚs = GATT_PERM_READ ; 4829 ”rÜ = `check_deviû_³rmissiÚs ( ´oûss_d©a -> deviû , 4830 ´oûss_d©a -> Ýcode , 4831 ³rmissiÚs ); 4832 ià( ”rÜ != 0) { 4833 »¥_d©a -> ”rÜ =ƒrror; 4834 »¥_d©a -> ¡©e = REQUEST_DONE ; 4838 »¥_d©a -> ¡©e = REQUEST_PENDING ; 4840 `g©t_db_©Œibu‹_»ad ( ©Œib , »¥_d©a -> off£t , ´oûss_d©a -> Ýcode , 4841 & ´oûss_d©a -> deviû -> bdaddr , 4842 ©Œibu‹_»ad_cb , »¥_d©a ); 4843 } } 4845  $´oûss_dev_³ndšg_»que¡s ( g©t_deviû * deviû , 4846 ušt8_t ©t_Ýcode ) 4848  »que¡_´oûssšg_d©a ´oûss_d©a ; 4850 ià( `queue_i£m±y ( deviû -> ³ndšg_»que¡s )) 4853 ´oûss_d©a . deviû = device; 4854 ´oûss_d©a . Ýcode = ©t_Ýcode ; 4857 `queue_fÜ—ch ( deviû -> ³ndšg_»que¡s , »ad_»que¡ed_©Œibu‹s , 4858 & ´oûss_d©a ); 4860 `£nd_dev_com¶‘e_»¥Ú£ ( deviû , ©t_Ýcode ); 4861 } } 4863  ³ndšg_Œªs_d©a * $cÚn_add_Œª§ù ( ­p_cÚÃùiÚ * cÚn , 4864 ušt8_t Ýcode , 4865  g©t_db_©Œibu‹ * ©Œib , 4866  £rŸl_id ) 4868  ³ndšg_Œªs_d©a * Œª§ùiÚ ; 4869  št32_t Œªs_id = 1; 4871 Œª§ùiÚ = `Ãw0 ( ³ndšg_Œªs_d©a , 1); 4872 ià(! Œª§ùiÚ ) 4873  NULL ; 4875 ià(! `queue_push_ž ( cÚn -> Œª§ùiÚs , Œª§ùiÚ )) { 4876 `ä“ ( Œª§ùiÚ ); 4877  NULL ; 4880 Œª§ùiÚ -> id = Œªs_id ++; 4881 Œª§ùiÚ -> Ýcode = opcode; 4882 Œª§ùiÚ -> ©Œib =‡ttrib; 4883 Œª§ùiÚ -> £rŸl_id = serial_id; 4885  Œª§ùiÚ ; 4886 } } 4888  $»ad_cb ( g©t_db_©Œibu‹ * ©Œib ,  id , 4889 ušt16_t off£t , ušt8_t Ýcode , bdaddr_t * bdaddr , 4890 * u£r_d©a ) 4892  ³ndšg_Œªs_d©a * Œª§ùiÚ ; 4893  h®_ev_g©t_£rv”_»que¡_»ad ev ; 4894  g©t_­p * ­p ; 4895  ­p_cÚÃùiÚ * cÚn ; 4896 št32_t ­p_id = `PTR_TO_INT ( u£r_d©a ); 4898 `DBG ("id %u", id ); 4900 ­p = `fšd_­p_by_id ( ­p_id ); 4901 ià(! ­p ) { 4902 `”rÜ ("gatt:„ead_cb, cound‚ot found‡pp id"); 4903  çžed ; 4906 cÚn = `fšd_cÚn ( bdaddr , ­p -> id ); 4907 ià(! cÚn ) { 4908 `”rÜ ("gatt:„ead_cb, cound‚ot found connection"); 4909  çžed ; 4912 `mem£t (& ev , 0, (ev)); 4915 Œª§ùiÚ = `cÚn_add_Œª§ù ( cÚn , Ýcode , ©Œib , id ); 4916 ià(! Œª§ùiÚ ) 4917  çžed ; 4919 `bdaddr2ªdroid ( bdaddr , ev .bdaddr); 4920 ev . cÚn_id = cÚn -> id ; 4921 ev . ©Œ_hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( ©Œib ); 4922 ev . off£t = offset; 4923 ev . is_lÚg = Ýcode =ð ATT_OP_READ_BLOB_REQ ; 4924 ev . Œªs_id = Œª§ùiÚ -> id ; 4926 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 4927 HAL_EV_GATT_SERVER_REQUEST_READ , 4928 ( ev ), &ev); 4932 çžed : 4933 `g©t_db_©Œibu‹_»ad_»suÉ ( ©Œib , id , - ENOENT , NULL , 0); 4934 } } 4936  $wr™e_cb ( g©t_db_©Œibu‹ * ©Œib ,  id , 4937 ušt16_t off£t , cÚ¡ ušt8_t * v®ue , size_t Ën , 4938 ušt8_t Ýcode , bdaddr_t * bdaddr , * u£r_d©a ) 4940 ušt8_t buf [ IPC_MTU ]; 4941  h®_ev_g©t_£rv”_»que¡_wr™e * ev = (*è buf ; 4942  ³ndšg_Œªs_d©a * Œª§ùiÚ ; 4943  g©t_­p * ­p ; 4944 št32_t ­p_id = `PTR_TO_INT ( u£r_d©a ); 4945  ­p_cÚÃùiÚ * cÚn ; 4947 `DBG ("id %u", id ); 4949 ­p = `fšd_­p_by_id ( ­p_id ); 4950 ià(! ­p ) { 4951 `”rÜ ("gatt: write_cb could‚ot found‡pp id"); 4952  çžed ; 4955 cÚn = `fšd_cÚn ( bdaddr , ­p -> id ); 4956 ià(! cÚn ) { 4957 `”rÜ ("gatt: write_cb could‚ot found connection"); 4958  çžed ; 4965 ià( Ýcode =ð ATT_OP_PREP_WRITE_REQ ) 4966 cÚn -> wa™_execu‹_wr™e = Œue ; 4969 Œª§ùiÚ = `cÚn_add_Œª§ù ( cÚn , Ýcode , ©Œib , id ); 4970 ià(! Œª§ùiÚ ) 4971  çžed ; 4973 `mem£t ( ev , 0, (*ev)); 4975 `bdaddr2ªdroid ( bdaddr , & ev ->bdaddr); 4976 ev -> ©Œ_hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( ©Œib ); 4977 ev -> off£t = offset; 4979 ev -> cÚn_id = cÚn -> id ; 4980 ev -> Œªs_id = Œª§ùiÚ -> id ; 4982 ev -> is_´• = Ýcode =ð ATT_OP_PREP_WRITE_REQ ; 4984 ià( Ýcode =ð ATT_OP_WRITE_REQ || opcod=ð ATT_OP_PREP_WRITE_REQ ) 4985 ev -> Ãed_r¥ = 0x01; 4987 `g©t_db_©Œibu‹_wr™e_»suÉ ( ©Œib , id , 0); 4989 ev -> Ëngth = Ën ; 4990 `memýy ( ev -> v®ue , v®ue, Ën ); 4992 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 4993 HAL_EV_GATT_SERVER_REQUEST_WRITE , 4994 (* ev è+ƒv-> Ëngth ,ƒv); 4997 çžed : 4998 `g©t_db_©Œibu‹_wr™e_»suÉ ( ©Œib , id , ATT_ECODE_UNLIKELY ); 4999 } } 5001  ušt32_t $ªdroid_to_g©t_³rmissiÚs ( št32_t h®_³rmissiÚs ) 5003 ušt32_t ³rmissiÚs = 0; 5005 ià( h®_³rmissiÚs & HAL_GATT_PERMISSION_READ ) 5006 ³rmissiÚs |ð GATT_PERM_READ ; 5008 ià( h®_³rmissiÚs & HAL_GATT_PERMISSION_READ_ENCRYPTED ) 5009 ³rmissiÚs |ð GATT_PERM_READ_ENCRYPTED | GATT_PERM_READ ; 5011 ià( h®_³rmissiÚs & HAL_GATT_PERMISSION_READ_ENCRYPTED_MITM ) 5012 ³rmissiÚs |ð GATT_PERM_READ_MITM | GATT_PERM_READ_ENCRYPTED | 5013 GATT_PERM_READ ; 5015 ià( h®_³rmissiÚs & HAL_GATT_PERMISSION_WRITE ) 5016 ³rmissiÚs |ð GATT_PERM_WRITE ; 5018 ià( h®_³rmissiÚs & HAL_GATT_PERMISSION_WRITE_ENCRYPTED ) 5019 ³rmissiÚs |ð GATT_PERM_WRITE_ENCRYPTED | GATT_PERM_WRITE ; 5021 ià( h®_³rmissiÚs & HAL_GATT_PERMISSION_WRITE_ENCRYPTED_MITM ) 5022 ³rmissiÚs |ð GATT_PERM_WRITE_MITM | 5023 GATT_PERM_WRITE_ENCRYPTED | GATT_PERM_WRITE ; 5025 ià( h®_³rmissiÚs & HAL_GATT_PERMISSION_WRITE_SIGNED ) 5026 ³rmissiÚs |ð GATT_PERM_WRITE_SIGNED ; 5028 ià( h®_³rmissiÚs & HAL_GATT_PERMISSION_WRITE_SIGNED_MITM ) 5029 ³rmissiÚs |ð GATT_PERM_WRITE_SIGNED_MITM | 5030 GATT_PERM_WRITE_SIGNED ; 5032  ³rmissiÚs ; 5033 } } 5035  $hªdË_£rv”_add_ch¬aù”i¡ic (cÚ¡ * buf , ušt16_t Ën ) 5037 cÚ¡  h®_cmd_g©t_£rv”_add_ch¬aù”i¡ic * cmd = buf ; 5038  h®_ev_g©t_£rv”_ch¬aù”i¡ic_added ev ; 5039  g©t_­p * £rv” ; 5040  g©t_db_©Œibu‹ * ©Œib ; 5041 bt_uuid_t uuid ; 5042 ušt8_t ¡©us ; 5043 ušt32_t ³rmissiÚs ; 5044 št32_t ­p_id = cmd -> £rv”_if ; 5046 `DBG (""); 5048 `mem£t (& ev , 0, (ev)); 5050 £rv” = `fšd_­p_by_id ( ­p_id ); 5051 ià(! £rv” ) { 5052 ¡©us = HAL_STATUS_FAILED ; 5053  çžed ; 5056 ©Œib = `g©t_db_g‘_©Œibu‹ ( g©t_db , cmd -> £rviû_hªdË ); 5057 ià(! ©Œib ) { 5058 ¡©us = HAL_STATUS_FAILED ; 5059  çžed ; 5062 `ªdroid2uuid ( cmd -> uuid , &uuid); 5063 ³rmissiÚs = `ªdroid_to_g©t_³rmissiÚs ( cmd ->permissions); 5065 ©Œib = `g©t_db_£rviû_add_ch¬aù”i¡ic (attrib, 5066 & uuid , ³rmissiÚs , 5067 cmd -> ´Ý”t›s , 5068 »ad_cb , wr™e_cb , 5069 `INT_TO_PTR ( ­p_id )); 5070 ià(! ©Œib ) { 5071 ¡©us = HAL_STATUS_FAILED ; 5072  çžed ; 5075 ev . ch¬_hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( ©Œib ); 5076 ¡©us = HAL_STATUS_SUCCESS ; 5078 çžed : 5079 ev . ¤vc_hªdË = cmd -> £rviû_hªdË ; 5080 ev . ¡©us = status; 5081 ev . £rv”_if = ­p_id ; 5082 ev . ¡©us = stu =ð HAL_STATUS_SUCCESS ? GATT_SUCCESS : GATT_FAILURE ; 5083 `memýy ( ev . uuid , cmd ->uuid, (cmd->uuid)); 5085 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 5086 HAL_EV_GATT_SERVER_CHAR_ADDED , ( ev ), &ev); 5088 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5089 HAL_OP_GATT_SERVER_ADD_CHARACTERISTIC , ¡©us ); 5090 } } 5092  $hªdË_£rv”_add_desütÜ (cÚ¡ * buf , ušt16_t Ën ) 5094 cÚ¡  h®_cmd_g©t_£rv”_add_desütÜ * cmd = buf ; 5095  h®_ev_g©t_£rv”_desütÜ_added ev ; 5096  g©t_­p * £rv” ; 5097  g©t_db_©Œibu‹ * ©Œib ; 5098 bt_uuid_t uuid ; 5099 ušt8_t ¡©us ; 5100 ušt32_t ³rmissiÚs ; 5101 št32_t ­p_id = cmd -> £rv”_if ; 5103 `DBG (""); 5105 `mem£t (& ev , 0, (ev)); 5107 £rv” = `fšd_­p_by_id ( ­p_id ); 5108 ià(! £rv” ) { 5109 ¡©us = HAL_STATUS_FAILED ; 5110  çžed ; 5113 `ªdroid2uuid ( cmd -> uuid , &uuid); 5114 ³rmissiÚs = `ªdroid_to_g©t_³rmissiÚs ( cmd ->permissions); 5116 ©Œib = `g©t_db_g‘_©Œibu‹ ( g©t_db , cmd -> £rviû_hªdË ); 5117 ià(! ©Œib ) { 5118 ¡©us = HAL_STATUS_FAILED ; 5119  çžed ; 5122 ©Œib = `g©t_db_£rviû_add_desütÜ ×‰rib, & uuid , ³rmissiÚs , 5123 »ad_cb , wr™e_cb , 5124 `INT_TO_PTR ( ­p_id )); 5125 ià(! ©Œib ) { 5126 ¡©us = HAL_STATUS_FAILED ; 5127  çžed ; 5130 ev . desü_hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( ©Œib ); 5131 ¡©us = HAL_STATUS_SUCCESS ; 5133 çžed : 5134 ev . £rv”_if = ­p_id ; 5135 ev . ¤vc_hªdË = cmd -> £rviû_hªdË ; 5136 `memýy ( ev . uuid , cmd ->uuid, (cmd->uuid)); 5137 ev . ¡©us = stu =ð HAL_STATUS_SUCCESS ? GATT_SUCCESS : GATT_FAILURE ; 5139 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 5140 HAL_EV_GATT_SERVER_DESCRIPTOR_ADDED , ( ev ), &ev); 5142 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5143 HAL_OP_GATT_SERVER_ADD_DESCRIPTOR , ¡©us ); 5144 } } 5146  $nÙify_£rviû_chªge (* d©a , * u£r_d©a ) 5148  ©t_¿nge ¿nge ; 5149  g©t_db_©Œibu‹ * ©Œib = u£r_d©a ; 5151 `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( ©Œib , & ¿nge . ¡¬t , &¿nge. ’d ); 5154 ià(! ¿nge . ’d ) 5157 `nÙify_©t_¿nge_chªge ( d©a , & ¿nge ); 5158 } } 5160  sdp_»cÜd_t * $g‘_sdp_»cÜd ( uuid_t * uuid , ušt16_t ¡¬t , ušt16_ˆ ’d , 5161 cÚ¡ * Çme ) 5163 sdp_li¡_t * svþass_id , * ­£q , * ´Ùo [2], * roÙ , * ­rÙo ; 5164 uuid_t roÙ_uuid , ´Ùo_uuid , l2ÿp ; 5165 sdp_»cÜd_t * »cÜd ; 5166 sdp_d©a_t * psm , * sh , * eh ; 5167 ušt16_t Í = ATT_PSM ; 5169 »cÜd = `sdp_»cÜd_®loc (); 5170 ià( »cÜd =ð NULL ) 5171  NULL ; 5173 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 5174 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 5175 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 5176 `sdp_li¡_ä“ ( roÙ , NULL ); 5178 svþass_id = `sdp_li¡_­³nd ( NULL , uuid ); 5179 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 5180 `sdp_li¡_ä“ ( svþass_id , NULL ); 5182 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 5183 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp ); 5184 psm = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 5185 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], psm ); 5186 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 5188 `sdp_uuid16_ü—‹ (& ´Ùo_uuid , ATT_UUID ); 5189 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & ´Ùo_uuid ); 5190 sh = `sdp_d©a_®loc ( SDP_UINT16 , & ¡¬t ); 5191 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], sh ); 5192 eh = `sdp_d©a_®loc ( SDP_UINT16 , & ’d ); 5193 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], eh ); 5194 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 5196 ­rÙo = `sdp_li¡_­³nd ( NULL , ­£q ); 5197 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 5199 ià( Çme ) 5200 `sdp_£t_šfo_©Œ ( »cÜd , Çme , "BlueZ fÜ Android", NULL ); 5202 `sdp_d©a_ä“ ( psm ); 5203 `sdp_d©a_ä“ ( sh ); 5204 `sdp_d©a_ä“ ( eh ); 5205 `sdp_li¡_ä“ ( ´Ùo [0], NULL ); 5206 `sdp_li¡_ä“ ( ´Ùo [1], NULL ); 5207 `sdp_li¡_ä“ ( ­£q , NULL ); 5208 `sdp_li¡_ä“ ( ­rÙo , NULL ); 5210  »cÜd ; 5211 } } 5213  ušt32_t $add_sdp_»cÜd (cÚ¡ bt_uuid_t * uuid , ušt16_t ¡¬t , 5214 ušt16_t ’d , cÚ¡ * Çme ) 5216 sdp_»cÜd_t * »c ; 5217 uuid_t u , u32 ; 5219  uuid -> ty³ ) { 5220  BT_UUID16 : 5221 `sdp_uuid16_ü—‹ (& u , uuid -> v®ue . u16 ); 5223  BT_UUID32 : 5224 `sdp_uuid32_ü—‹ (& u32 , uuid -> v®ue .u32); 5225 `sdp_uuid32_to_uuid128 (& u , & u32 ); 5227  BT_UUID128 : 5228 `sdp_uuid128_ü—‹ (& u , & uuid -> v®ue . u128 ); 5230  BT_UUID_UNSPEC : 5235 »c = `g‘_sdp_»cÜd (& u , ¡¬t , ’d , Çme ); 5236 ià(! »c ) 5239 ià( `bt_ad­‹r_add_»cÜd ( »c , 0) < 0) { 5240 `”rÜ ("gatt: Failedo„egister SDP„ecord"); 5241 `sdp_»cÜd_ä“ ( »c ); 5245  »c -> hªdË ; 5246 } } 5248  boÞ $m©ch_£rviû_sdp (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 5250 cÚ¡  £rviû_sdp * s = d©a ; 5252  s -> £rviû_hªdË =ð `PTR_TO_INT ( u£r_d©a ); 5253 } } 5255  £rviû_sdp * $Ãw_£rviû_sdp_»cÜd ( št32_t £rviû_hªdË ) 5257 bt_uuid_t uuid ; 5258  £rviû_sdp * s ; 5259  g©t_db_©Œibu‹ * ©Œib ; 5260 ušt16_t ’d_hªdË ; 5262 ©Œib = `g©t_db_g‘_©Œibu‹ ( g©t_db , £rviû_hªdË ); 5263 ià(! ©Œib ) 5264  NULL ; 5266 `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( ©Œib , NULL , & ’d_hªdË ); 5267 ià(! ’d_hªdË ) 5268  NULL ; 5270 ià(! `g©t_db_©Œibu‹_g‘_£rviû_uuid ( ©Œib , & uuid )) 5271  NULL ; 5273 s = `Ãw0 ( £rviû_sdp , 1); 5274 ià(! s ) 5275  NULL ; 5277 s -> £rviû_hªdË = service_handle; 5278 s -> sdp_hªdË = `add_sdp_»cÜd (& uuid , £rviû_hªdË , ’d_hªdË , NULL ); 5279 ià(! s -> sdp_hªdË ) { 5280 `ä“ ( s ); 5281  NULL ; 5284  s ; 5285 } } 5287  $ä“_£rviû_sdp_»cÜd (* d©a ) 5289  £rviû_sdp * s = d©a ; 5291 ià(! s ) 5294 `bt_ad­‹r_»move_»cÜd ( s -> sdp_hªdË ); 5295 `ä“ ( s ); 5296 } } 5298  boÞ $add_£rviû_sdp_»cÜd ( št32_t £rviû_hªdË ) 5300  £rviû_sdp * s ; 5302 s = `queue_fšd ( £rviûs_sdp , m©ch_£rviû_sdp , 5303 `INT_TO_PTR ( £rviû_hªdË )); 5304 ià( s ) 5305  Œue ; 5307 s = `Ãw_£rviû_sdp_»cÜd ( £rviû_hªdË ); 5308 ià(! s ) 5309  çl£ ; 5311 ià(! `queue_push_ž ( £rviûs_sdp , s )) { 5312 `ä“_£rviû_sdp_»cÜd ( s ); 5313  çl£ ; 5316  Œue ; 5317 } } 5319  $»move_£rviû_sdp_»cÜd ( št32_t £rviû_hªdË ) 5321  £rviû_sdp * s ; 5323 s = `queue_»move_if ( £rviûs_sdp , m©ch_£rviû_sdp , 5324 `INT_TO_PTR ( £rviû_hªdË )); 5325 ià(! s ) 5328 `ä“_£rviû_sdp_»cÜd ( s ); 5329 } } 5331  $hªdË_£rv”_¡¬t_£rviû (cÚ¡ * buf , ušt16_t Ën ) 5333 cÚ¡  h®_cmd_g©t_£rv”_¡¬t_£rviû * cmd = buf ; 5334  h®_ev_g©t_£rv”_£rviû_¡¬‹d ev ; 5335  g©t_­p * £rv” ; 5336  g©t_db_©Œibu‹ * ©Œib ; 5337 ušt8_t ¡©us ; 5339 `DBG ("Œª¥Üˆ0x%02x", cmd -> Œª¥Üt ); 5341 `mem£t (& ev , 0, (ev)); 5343 ià( cmd -> Œª¥Üt == 0) { 5344 ¡©us = HAL_STATUS_FAILED ; 5345  çžed ; 5348 £rv” = `fšd_­p_by_id ( cmd -> £rv”_if ); 5349 ià(! £rv” ) { 5350 ¡©us = HAL_STATUS_FAILED ; 5351  çžed ; 5354 ià( cmd -> Œª¥Üt & GATT_SERVER_TRANSPORT_BREDR_BIT ) { 5355 ià(! `add_£rviû_sdp_»cÜd ( cmd -> £rviû_hªdË )) { 5356 ¡©us = HAL_STATUS_FAILED ; 5357  çžed ; 5362 ©Œib = `g©t_db_g‘_©Œibu‹ ( g©t_db , cmd -> £rviû_hªdË ); 5363 ià(! ©Œib ) { 5364 ¡©us = HAL_STATUS_FAILED ; 5365  çžed ; 5368 ià(! `g©t_db_£rviû_£t_aùive ( ©Œib , Œue )) { 5373 ¡©us = HAL_STATUS_FAILED ; 5374  çžed ; 5377 `queue_fÜ—ch ( g©t_deviûs , nÙify_£rviû_chªge , ©Œib ); 5379 ¡©us = HAL_STATUS_SUCCESS ; 5381 çžed : 5382 ev . ¡©us = stu =ð HAL_STATUS_SUCCESS ? GATT_SUCCESS : GATT_FAILURE ; 5383 ev . £rv”_if = cmd ->server_if; 5384 ev . ¤vc_hªdË = cmd -> £rviû_hªdË ; 5386 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 5387 HAL_EV_GATT_SERVER_SERVICE_STARTED , ( ev ), &ev); 5389 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5390 HAL_OP_GATT_SERVER_START_SERVICE , ¡©us ); 5391 } } 5393  $hªdË_£rv”_¡Ý_£rviû (cÚ¡ * buf , ušt16_t Ën ) 5395 cÚ¡  h®_cmd_g©t_£rv”_¡Ý_£rviû * cmd = buf ; 5396  h®_ev_g©t_£rv”_£rviû_¡Ý³d ev ; 5397  g©t_­p * £rv” ; 5398  g©t_db_©Œibu‹ * ©Œib ; 5399 ušt8_t ¡©us ; 5401 `DBG (""); 5403 `mem£t (& ev , 0, (ev)); 5405 £rv” = `fšd_­p_by_id ( cmd -> £rv”_if ); 5406 ià(! £rv” ) { 5407 ¡©us = HAL_STATUS_FAILED ; 5408  çžed ; 5411 ©Œib = `g©t_db_g‘_©Œibu‹ ( g©t_db , cmd -> £rviû_hªdË ); 5412 ià(! ©Œib ) { 5413 ¡©us = HAL_STATUS_FAILED ; 5414  çžed ; 5417 ià(! `g©t_db_£rviû_£t_aùive ( ©Œib , çl£ )) { 5418 ¡©us = HAL_STATUS_FAILED ; 5419  çžed ; 5422 `»move_£rviû_sdp_»cÜd ( cmd -> £rviû_hªdË ); 5424 ¡©us = HAL_STATUS_SUCCESS ; 5426 `queue_fÜ—ch ( g©t_deviûs , nÙify_£rviû_chªge , ©Œib ); 5428 çžed : 5429 ev . ¡©us = stu =ð HAL_STATUS_SUCCESS ? GATT_SUCCESS : GATT_FAILURE ; 5430 ev . £rv”_if = cmd ->server_if; 5431 ev . ¤vc_hªdË = cmd -> £rviû_hªdË ; 5433 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 5434 HAL_EV_GATT_SERVER_SERVICE_STOPPED , ( ev ), &ev); 5436 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5437 HAL_OP_GATT_SERVER_STOP_SERVICE , ¡©us ); 5438 } } 5440  $hªdË_£rv”_d–‘e_£rviû (cÚ¡ * buf , ušt16_t Ën ) 5442 cÚ¡  h®_cmd_g©t_£rv”_d–‘e_£rviû * cmd = buf ; 5443  h®_ev_g©t_£rv”_£rviû_d–‘ed ev ; 5444  g©t_­p * £rv” ; 5445  g©t_db_©Œibu‹ * ©Œib ; 5446 ušt8_t ¡©us ; 5448 `DBG (""); 5450 `mem£t (& ev , 0, (ev)); 5452 £rv” = `fšd_­p_by_id ( cmd -> £rv”_if ); 5453 ià(! £rv” ) { 5454 ¡©us = HAL_STATUS_FAILED ; 5455  çžed ; 5458 ©Œib = `g©t_db_g‘_©Œibu‹ ( g©t_db , cmd -> £rviû_hªdË ); 5459 ià(! ©Œib ) { 5460 ¡©us = HAL_STATUS_FAILED ; 5461  çžed ; 5464 ià(! `g©t_db_»move_£rviû ( g©t_db , ©Œib )) { 5465 ¡©us = HAL_STATUS_FAILED ; 5466  çžed ; 5469 `»move_£rviû_sdp_»cÜd ( cmd -> £rviû_hªdË ); 5471 ¡©us = HAL_STATUS_SUCCESS ; 5473 çžed : 5474 ev . ¡©us = stu =ð HAL_STATUS_SUCCESS ? GATT_SUCCESS : GATT_FAILURE ; 5475 ev . ¤vc_hªdË = cmd -> £rviû_hªdË ; 5476 ev . £rv”_if = cmd ->server_if; 5478 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 5479 HAL_EV_GATT_SERVER_SERVICE_DELETED , ( ev ), &ev); 5481 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5482 HAL_OP_GATT_SERVER_DELETE_SERVICE , ¡©us ); 5483 } } 5485  $hªdË_£rv”_£nd_šdiÿtiÚ (cÚ¡ * buf , ušt16_t Ën ) 5487 cÚ¡  h®_cmd_g©t_£rv”_£nd_šdiÿtiÚ * cmd = buf ; 5488  ­p_cÚÃùiÚ * cÚn ; 5489 ušt8_t ¡©us ; 5490 ušt16_t Ëngth ; 5491 ušt8_t * pdu ; 5492 size_t mtu ; 5493 GA‰ribResuÉFunc cÚfœm©iÚ_cb = NULL ; 5495 `DBG (""); 5497 cÚn = `fšd_cÚÃùiÚ_by_id ( cmd -> cÚn_id ); 5498 ià(! cÚn ) { 5499 `”rÜ ("gatt: Could‚ot find connection"); 5500 ¡©us = HAL_STATUS_FAILED ; 5501  »¶y ; 5504 pdu = `g_©Œib_g‘_bufãr ( cÚn -> deviû -> ©Œib , & mtu ); 5506 ià( cmd -> cÚfœm ) { 5508 Ëngth = `’c_šdiÿtiÚ ( cmd -> ©Œibu‹_hªdË , 5509 ( ušt8_t *) cmd -> v®ue , cmd-> Ën , pdu , 5510 mtu ); 5511 cÚfœm©iÚ_cb = ignÜe_cÚfœm©iÚ_cb ; 5513 Ëngth = `’c_nÙifiÿtiÚ ( cmd -> ©Œibu‹_hªdË , 5514 ( ušt8_t *) cmd -> v®ue , cmd-> Ën , 5515 pdu , mtu ); 5518 ià( Ëngth == 0) { 5519 `”rÜ ("gatt: Failedoƒncode indication"); 5520 ¡©us = HAL_STATUS_FAILED ; 5522 `g_©Œib_£nd ( cÚn -> deviû -> ©Œib , 0, pdu , Ëngth , 5523 cÚfœm©iÚ_cb , NULL , NULL); 5524 ¡©us = HAL_STATUS_SUCCESS ; 5527 »¶y : 5528 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5529 HAL_OP_GATT_SERVER_SEND_INDICATION , ¡©us ); 5530 } } 5532  boÞ $m©ch_Œªs_id (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 5534 cÚ¡  ³ndšg_Œªs_d©a * Œª§ùiÚ = d©a ; 5536  Œª§ùiÚ -> id =ð `PTR_TO_UINT ( u£r_d©a ); 5537 } } 5539  boÞ $fšd_cÚn_wa™šg_exec_wr™e (cÚ¡ * d©a , 5540 cÚ¡ * u£r_d©a ) 5542 cÚ¡  ­p_cÚÃùiÚ * cÚn = d©a ; 5544  cÚn -> wa™_execu‹_wr™e ; 5545 } } 5547  boÞ $³ndšg_execu‹_wr™e () 5549  `queue_fšd ( ­p_cÚÃùiÚs , fšd_cÚn_wa™šg_exec_wr™e , NULL ); 5550 } } 5552  $hªdË_£rv”_£nd_»¥Ú£ (cÚ¡ * buf , ušt16_t Ën ) 5554 cÚ¡  h®_cmd_g©t_£rv”_£nd_»¥Ú£ * cmd = buf ; 5555  ³ndšg_Œªs_d©a * Œª§ùiÚ ; 5556  ­p_cÚÃùiÚ * cÚn ; 5557 ušt8_t ¡©us ; 5559 `DBG (""); 5561 cÚn = `fšd_cÚÃùiÚ_by_id ( cmd -> cÚn_id ); 5562 ià(! cÚn ) { 5563 `”rÜ ("gatt: could‚ot found connection"); 5564 ¡©us = HAL_STATUS_FAILED ; 5565  »¶y ; 5568 Œª§ùiÚ = `queue_»move_if ( cÚn -> Œª§ùiÚs , m©ch_Œªs_id , 5569 `UINT_TO_PTR ( cmd -> Œªs_id )); 5570 ià(! Œª§ùiÚ ) { 5571 `”rÜ ("g©t:¿n§ùiÚ ID = %d‚Ù found", cmd -> Œªs_id ); 5572 ¡©us = HAL_STATUS_FAILED ; 5573  »¶y ; 5576 ià( Œª§ùiÚ -> Ýcode =ð ATT_OP_EXEC_WRITE_REQ ) { 5577  ³ndšg_»que¡ * »q ; 5579 cÚn -> wa™_execu‹_wr™e = çl£ ; 5582 ià( `³ndšg_execu‹_wr™e ()) 5583  dÚe ; 5590 »q = `queue_³ek_h—d ( cÚn -> deviû -> ³ndšg_»que¡s ); 5591 ià(! »q ) 5592  dÚe ; 5595 »q -> ”rÜ = `”r_to_©t (( ušt8_t è cmd -> ¡©us ); 5596 »q -> ¡©e = REQUEST_DONE ; 5605 ià( Œª§ùiÚ -> Ýcode < ATT_OP_WRITE_REQ ) 5606 `g©t_db_©Œibu‹_»ad_»suÉ ( Œª§ùiÚ -> ©Œib , 5607 Œª§ùiÚ -> £rŸl_id , 5608 `”r_to_©t (( ušt8_t è cmd -> ¡©us ), 5609 cmd -> d©a , cmd-> Ën ); 5611 `g©t_db_©Œibu‹_wr™e_»suÉ ( Œª§ùiÚ -> ©Œib , 5612 Œª§ùiÚ -> £rŸl_id , 5613 `”r_to_©t (( ušt8_t è cmd -> ¡©us )); 5615 `£nd_dev_com¶‘e_»¥Ú£ ( cÚn -> deviû , Œª§ùiÚ -> Ýcode ); 5617 dÚe : 5619 `ä“ ( Œª§ùiÚ ); 5621 ¡©us = HAL_STATUS_SUCCESS ; 5623 »¶y : 5624 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5625 HAL_OP_GATT_SERVER_SEND_RESPONSE , ¡©us ); 5626 } } 5628  $hªdË_þ›Á_sÿn_fž‹r_£tup (cÚ¡ * buf , ušt16_t Ën ) 5630 cÚ¡  h®_cmd_g©t_þ›Á_sÿn_fž‹r_£tup * cmd = buf ; 5632 `DBG ("þ›Á_ià%u", cmd -> þ›Á_if ); 5636 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5637 HAL_OP_GATT_CLIENT_SCAN_FILTER_SETUP , 5638 HAL_STATUS_UNSUPPORTED ); 5639 } } 5641  $hªdË_þ›Á_sÿn_fž‹r_add_»move (cÚ¡ * buf , ušt16_t Ën ) 5643 cÚ¡  h®_cmd_g©t_þ›Á_sÿn_fž‹r_add_»move * cmd = buf ; 5645 `DBG ("þ›Á_ià%u", cmd -> þ›Á_if ); 5649 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5650 HAL_OP_GATT_CLIENT_SCAN_FILTER_ADD_REMOVE , 5651 HAL_STATUS_UNSUPPORTED ); 5652 } } 5654  $hªdË_þ›Á_sÿn_fž‹r_þ—r (cÚ¡ * buf , ušt16_t Ën ) 5656 cÚ¡  h®_cmd_g©t_þ›Á_sÿn_fž‹r_þ—r * cmd = buf ; 5658 `DBG ("þ›Á_ià%u", cmd -> þ›Á_if ); 5662 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5663 HAL_OP_GATT_CLIENT_SCAN_FILTER_CLEAR , 5664 HAL_STATUS_UNSUPPORTED ); 5665 } } 5667  $hªdË_þ›Á_sÿn_fž‹r_’abË (cÚ¡ * buf , ušt16_t Ën ) 5669 cÚ¡  h®_cmd_g©t_þ›Á_sÿn_fž‹r_’abË * cmd = buf ; 5671 `DBG ("þ›Á_ià%u", cmd -> þ›Á_if ); 5675 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5676 HAL_OP_GATT_CLIENT_SCAN_FILTER_ENABLE , 5677 HAL_STATUS_UNSUPPORTED ); 5678 } } 5680  $hªdË_þ›Á_cÚfigu»_mtu (cÚ¡ * buf , ušt16_t Ën ) 5682 cÚ¡  h®_cmd_g©t_þ›Á_cÚfigu»_mtu * cmd = buf ; 5684 `DBG ("cÚn_id %u", cmd -> cÚn_id ); 5688 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5689 HAL_OP_GATT_CLIENT_CONFIGURE_MTU , 5690 HAL_STATUS_UNSUPPORTED ); 5691 } } 5693  $hªdË_þ›Á_cÚn_·¿m_upd©e (cÚ¡ * buf , ušt16_t Ën ) 5695 cÚ¡  h®_cmd_g©t_þ›Á_cÚn_·¿m_upd©e * cmd = buf ; 5696  add»ss [18]; 5697 bdaddr_t bdaddr ; 5699 `ªdroid2bdaddr ( cmd -> add»ss , & bdaddr ); 5700 `ba2¡r (& bdaddr , add»ss ); 5702 `DBG ("%s", add»ss ); 5706 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5707 HAL_OP_GATT_CLIENT_CONN_PARAM_UPDATE , 5708 HAL_STATUS_UNSUPPORTED ); 5709 } } 5711  $hªdË_þ›Á_£t_sÿn_·¿m (cÚ¡ * buf , ušt16_t Ën ) 5713 cÚ¡  h®_cmd_g©t_þ›Á_£t_sÿn_·¿m * cmd = buf ; 5715 `DBG ("š‹rv® %d wšdow %d", cmd -> š‹rv® , cmd-> wšdow ); 5719 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5720 HAL_OP_GATT_CLIENT_SET_SCAN_PARAM , 5721 HAL_STATUS_UNSUPPORTED ); 5722 } } 5724  $hªdË_þ›Á_£tup_muÉi_adv (cÚ¡ * buf , ušt16_t Ën ) 5726 cÚ¡  h®_cmd_g©t_þ›Á_£tup_muÉi_adv * cmd = buf ; 5728 `DBG ("þ›Á_ià%d", cmd -> þ›Á_if ); 5732 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5733 HAL_OP_GATT_CLIENT_SETUP_MULTI_ADV , 5734 HAL_STATUS_UNSUPPORTED ); 5735 } } 5737  $hªdË_þ›Á_upd©e_muÉi_adv (cÚ¡ * buf , ušt16_t Ën ) 5739 cÚ¡  h®_cmd_g©t_þ›Á_upd©e_muÉi_adv * cmd = buf ; 5741 `DBG ("þ›Á_ià%d", cmd -> þ›Á_if ); 5745 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5746 HAL_OP_GATT_CLIENT_UPDATE_MULTI_ADV , 5747 HAL_STATUS_UNSUPPORTED ); 5748 } } 5750  $hªdË_þ›Á_£tup_muÉi_adv_š¡ (cÚ¡ * buf , ušt16_t Ën ) 5752 cÚ¡  h®_cmd_g©t_þ›Á_£tup_muÉi_adv_š¡ * cmd = buf ; 5754 `DBG ("þ›Á_ià%d", cmd -> þ›Á_if ); 5758 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5759 HAL_OP_GATT_CLIENT_SETUP_MULTI_ADV_INST , 5760 HAL_STATUS_UNSUPPORTED ); 5761 } } 5763  $hªdË_þ›Á_di§bË_muÉi_adv_š¡ (cÚ¡ * buf , ušt16_t Ën ) 5765 cÚ¡  h®_cmd_g©t_þ›Á_di§bË_muÉi_adv_š¡ * cmd = buf ; 5767 `DBG ("þ›Á_ià%d", cmd -> þ›Á_if ); 5771 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5772 HAL_OP_GATT_CLIENT_DISABLE_MULTI_ADV_INST , 5773 HAL_STATUS_UNSUPPORTED ); 5774 } } 5776  $hªdË_þ›Á_cÚfigu»_b©chsÿn (cÚ¡ * buf , ušt16_t Ën ) 5778 cÚ¡  h®_cmd_g©t_þ›Á_cÚfigu»_b©chsÿn * cmd = buf ; 5780 `DBG ("þ›Á_ià%d", cmd -> þ›Á_if ); 5784 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5785 HAL_OP_GATT_CLIENT_CONFIGURE_BATCHSCAN , 5786 HAL_STATUS_UNSUPPORTED ); 5787 } } 5789  $hªdË_þ›Á_’abË_b©chsÿn (cÚ¡ * buf , ušt16_t Ën ) 5791 cÚ¡  h®_cmd_g©t_þ›Á_’abË_b©chsÿn * cmd = buf ; 5793 `DBG ("þ›Á_ià%d", cmd -> þ›Á_if ); 5797 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5798 HAL_OP_GATT_CLIENT_ENABLE_BATCHSCAN , 5799 HAL_STATUS_UNSUPPORTED ); 5800 } } 5802  $hªdË_þ›Á_di§bË_b©chsÿn (cÚ¡ * buf , ušt16_t Ën ) 5804 cÚ¡  h®_cmd_g©t_þ›Á_di§bË_b©chsÿn * cmd = buf ; 5806 `DBG ("þ›Á_ià%d", cmd -> þ›Á_if ); 5810 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5811 HAL_OP_GATT_CLIENT_DISABLE_BATCHSCAN , 5812 HAL_STATUS_UNSUPPORTED ); 5813 } } 5815  $hªdË_þ›Á_»ad_b©chsÿn_»pÜts (cÚ¡ * buf , ušt16_t Ën ) 5817 cÚ¡  h®_cmd_g©t_þ›Á_»ad_b©chsÿn_»pÜts * cmd = buf ; 5819 `DBG ("þ›Á_ià%d", cmd -> þ›Á_if ); 5823 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_GATT , 5824 HAL_OP_GATT_CLIENT_READ_BATCHSCAN_REPORTS , 5825 HAL_STATUS_UNSUPPORTED ); 5826 } } 5828 cÚ¡  c_hªdËr gcmd_hªdËrs [] = { 5830 { hªdË_þ›Á_»gi¡” , çl£ , 5831 ( h®_cmd_g©t_þ›Á_»gi¡” ) }, 5833 { hªdË_þ›Á_uÄegi¡” , çl£ , 5834 ( h®_cmd_g©t_þ›Á_uÄegi¡” ) }, 5836 { hªdË_þ›Á_sÿn , çl£ , 5837 ( h®_cmd_g©t_þ›Á_sÿn ) }, 5839 { hªdË_þ›Á_cÚÃù , çl£ , 5840 ( h®_cmd_g©t_þ›Á_cÚÃù ) }, 5842 { hªdË_þ›Á_discÚÃù , çl£ , 5843 ( h®_cmd_g©t_þ›Á_discÚÃù ) }, 5845 { hªdË_þ›Á_li¡’ , çl£ , 5846 ( h®_cmd_g©t_þ›Á_li¡’ ) }, 5848 { hªdË_þ›Á_»äesh , çl£ , 5849 ( h®_cmd_g©t_þ›Á_»äesh ) }, 5851 { hªdË_þ›Á_£¬ch_£rviû , Œue , 5852 ( h®_cmd_g©t_þ›Á_£¬ch_£rviû ) }, 5854 { hªdË_þ›Á_g‘_šþuded_£rviû , Œue , 5855 ( h®_cmd_g©t_þ›Á_g‘_šþuded_£rviû ) }, 5857 { hªdË_þ›Á_g‘_ch¬aù”i¡ic , Œue , 5858 ( h®_cmd_g©t_þ›Á_g‘_ch¬aù”i¡ic ) }, 5860 { hªdË_þ›Á_g‘_desütÜ , Œue , 5861 ( h®_cmd_g©t_þ›Á_g‘_desütÜ ) }, 5863 { hªdË_þ›Á_»ad_ch¬aù”i¡ic , çl£ , 5864 ( h®_cmd_g©t_þ›Á_»ad_ch¬aù”i¡ic ) }, 5866 { hªdË_þ›Á_wr™e_ch¬aù”i¡ic , Œue , 5867 ( h®_cmd_g©t_þ›Á_wr™e_ch¬aù”i¡ic ) }, 5869 { hªdË_þ›Á_»ad_desütÜ , çl£ , 5870 ( h®_cmd_g©t_þ›Á_»ad_desütÜ ) }, 5872 { hªdË_þ›Á_wr™e_desütÜ , Œue , 5873 ( h®_cmd_g©t_þ›Á_wr™e_desütÜ ) }, 5875 { hªdË_þ›Á_execu‹_wr™e , çl£ , 5876 ( h®_cmd_g©t_þ›Á_execu‹_wr™e )}, 5878 { hªdË_þ›Á_»gi¡”_fÜ_nÙifiÿtiÚ , çl£ , 5879 ( h®_cmd_g©t_þ›Á_»gi¡”_fÜ_nÙifiÿtiÚ ) }, 5881 { hªdË_þ›Á_d”egi¡”_fÜ_nÙifiÿtiÚ , çl£ , 5882 ( h®_cmd_g©t_þ›Á_d”egi¡”_fÜ_nÙifiÿtiÚ ) }, 5884 { hªdË_þ›Á_»ad_»mÙe_rssi , çl£ , 5885 ( h®_cmd_g©t_þ›Á_»ad_»mÙe_rssi ) }, 5887 { hªdË_þ›Á_g‘_deviû_ty³ , çl£ , 5888 ( h®_cmd_g©t_þ›Á_g‘_deviû_ty³ ) }, 5890 { hªdË_þ›Á_£t_adv_d©a , Œue , 5891 ( h®_cmd_g©t_þ›Á_£t_adv_d©a ) }, 5893 { hªdË_þ›Á_‹¡_commªd , çl£ , 5894 ( h®_cmd_g©t_þ›Á_‹¡_commªd ) }, 5896 { hªdË_£rv”_»gi¡” , çl£ , 5897 ( h®_cmd_g©t_£rv”_»gi¡” ) }, 5899 { hªdË_£rv”_uÄegi¡” , çl£ , 5900 ( h®_cmd_g©t_£rv”_uÄegi¡” ) }, 5902 { hªdË_£rv”_cÚÃù , çl£ , 5903 ( h®_cmd_g©t_£rv”_cÚÃù ) }, 5905 { hªdË_£rv”_discÚÃù , çl£ , 5906 ( h®_cmd_g©t_£rv”_discÚÃù ) }, 5908 { hªdË_£rv”_add_£rviû , çl£ , 5909 ( h®_cmd_g©t_£rv”_add_£rviû ) }, 5911 { hªdË_£rv”_add_šþuded_£rviû , çl£ , 5912 ( h®_cmd_g©t_£rv”_add_šc_£rviû ) }, 5914 { hªdË_£rv”_add_ch¬aù”i¡ic , çl£ , 5915 ( h®_cmd_g©t_£rv”_add_ch¬aù”i¡ic ) }, 5917 { hªdË_£rv”_add_desütÜ , çl£ , 5918 ( h®_cmd_g©t_£rv”_add_desütÜ ) }, 5920 { hªdË_£rv”_¡¬t_£rviû , çl£ , 5921 ( h®_cmd_g©t_£rv”_¡¬t_£rviû ) }, 5923 { hªdË_£rv”_¡Ý_£rviû , çl£ , 5924 ( h®_cmd_g©t_£rv”_¡Ý_£rviû ) }, 5926 { hªdË_£rv”_d–‘e_£rviû , çl£ , 5927 ( h®_cmd_g©t_£rv”_d–‘e_£rviû ) }, 5929 { hªdË_£rv”_£nd_šdiÿtiÚ , Œue , 5930 ( h®_cmd_g©t_£rv”_£nd_šdiÿtiÚ ) }, 5932 { hªdË_£rv”_£nd_»¥Ú£ , Œue , 5933 ( h®_cmd_g©t_£rv”_£nd_»¥Ú£ ) }, 5935 { hªdË_þ›Á_sÿn_fž‹r_£tup , çl£ , 5936 ( h®_cmd_g©t_þ›Á_sÿn_fž‹r_£tup ) }, 5938 { hªdË_þ›Á_sÿn_fž‹r_add_»move , Œue , 5939 ( h®_cmd_g©t_þ›Á_sÿn_fž‹r_add_»move ) }, 5941 { hªdË_þ›Á_sÿn_fž‹r_þ—r , çl£ , 5942 ( h®_cmd_g©t_þ›Á_sÿn_fž‹r_þ—r ) }, 5944 { hªdË_þ›Á_sÿn_fž‹r_’abË , çl£ , 5945 ( h®_cmd_g©t_þ›Á_sÿn_fž‹r_’abË ) }, 5947 { hªdË_þ›Á_cÚfigu»_mtu , çl£ , 5948 ( h®_cmd_g©t_þ›Á_cÚfigu»_mtu ) }, 5950 { hªdË_þ›Á_cÚn_·¿m_upd©e , çl£ , 5951 ( h®_cmd_g©t_þ›Á_cÚn_·¿m_upd©e ) }, 5953 { hªdË_þ›Á_£t_sÿn_·¿m , çl£ , 5954 ( h®_cmd_g©t_þ›Á_£t_sÿn_·¿m ) }, 5956 { hªdË_þ›Á_£tup_muÉi_adv , çl£ , 5957 ( h®_cmd_g©t_þ›Á_£tup_muÉi_adv ) }, 5959 { hªdË_þ›Á_upd©e_muÉi_adv , çl£ , 5960 ( h®_cmd_g©t_þ›Á_upd©e_muÉi_adv ) }, 5962 { hªdË_þ›Á_£tup_muÉi_adv_š¡ , çl£ , 5963 ( h®_cmd_g©t_þ›Á_£tup_muÉi_adv_š¡ ) }, 5965 { hªdË_þ›Á_di§bË_muÉi_adv_š¡ , çl£ , 5966 ( h®_cmd_g©t_þ›Á_di§bË_muÉi_adv_š¡ ) }, 5968 { hªdË_þ›Á_cÚfigu»_b©chsÿn , çl£ , 5969 ( h®_cmd_g©t_þ›Á_cÚfigu»_b©chsÿn ) }, 5971 { hªdË_þ›Á_’abË_b©chsÿn , çl£ , 5972 ( h®_cmd_g©t_þ›Á_’abË_b©chsÿn ) }, 5974 { hªdË_þ›Á_di§bË_b©chsÿn , çl£ , 5975 ( h®_cmd_g©t_þ›Á_di§bË_b©chsÿn ) }, 5977 { hªdË_þ›Á_»ad_b©chsÿn_»pÜts , çl£ , 5978 ( h®_cmd_g©t_þ›Á_»ad_b©chsÿn_»pÜts ) }, 5981  ušt8_t $»ad_by_ty³ (cÚ¡ ušt8_t * cmd , ušt16_t cmd_Ën , 5982  g©t_deviû * deviû ) 5984 ušt16_t ¡¬t , ’d ; 5985 ušt16_t Ën = 0; 5986 bt_uuid_t uuid ; 5987  queue * q ; 5989 `DBG (""); 5991  cmd [0]) { 5992  ATT_OP_READ_BY_TYPE_REQ : 5993 Ën = `dec_»ad_by_ty³_»q ( cmd , cmd_Ën , & ¡¬t , & ’d , & uuid ); 5995  ATT_OP_READ_BY_GROUP_REQ : 5996 Ën = `dec_»ad_by_g½_»q ( cmd , cmd_Ën , & ¡¬t , & ’d , & uuid ); 6002 ià(! Ën ) 6003  ATT_ECODE_INVALID_PDU ; 6005 ià( ¡¬t > ’d || start == 0) 6006  ATT_ECODE_INVALID_HANDLE ; 6008 q = `queue_Ãw (); 6009 ià(! q ) 6010  ATT_ECODE_INSUFF_RESOURCES ; 6012  cmd [0]) { 6013  ATT_OP_READ_BY_TYPE_REQ : 6014 `g©t_db_»ad_by_ty³ ( g©t_db , ¡¬t , ’d , uuid , q ); 6016  ATT_OP_READ_BY_GROUP_REQ : 6017 `g©t_db_»ad_by_group_ty³ ( g©t_db , ¡¬t , ’d , uuid , q ); 6023 ià( `queue_i£m±y ( q )) { 6024 `queue_de¡roy ( q , NULL ); 6025  ATT_ECODE_ATTR_NOT_FOUND ; 6028  `queue_³ek_h—d ( q )) { 6029  ³ndšg_»que¡ * d©a ; 6030  g©t_db_©Œibu‹ * ©Œib = `queue_pÝ_h—d ( q ); 6032 d©a = `Ãw0 ( ³ndšg_»que¡ , 1); 6033 ià(! d©a ) { 6034 `queue_de¡roy ( q , NULL ); 6035  ATT_ECODE_INSUFF_RESOURCES ; 6038 d©a -> ¡©e = REQUEST_INIT ; 6039 d©a -> ©Œib =‡ttrib; 6040 ià(! `queue_push_ž ( deviû -> ³ndšg_»que¡s , d©a )) { 6041 `ä“ ( d©a ); 6042 `queue_de¡roy ( q , NULL ); 6043  ATT_ECODE_INSUFF_RESOURCES ; 6047 `queue_de¡roy ( q , NULL ); 6048 `´oûss_dev_³ndšg_»que¡s ( deviû , cmd [0]); 6051 } } 6053  ušt8_t $»ad_»que¡ (cÚ¡ ušt8_t * cmd , ušt16_t cmd_Ën , 6054  g©t_deviû * dev ) 6056  g©t_db_©Œibu‹ * ©Œib ; 6057 ušt16_t hªdË ; 6058 ušt16_t Ën ; 6059 ušt16_t off£t ; 6060  ³ndšg_»que¡ * d©a ; 6062 `DBG (""); 6064  cmd [0]) { 6065  ATT_OP_READ_BLOB_REQ : 6066 Ën = `dec_»ad_blob_»q ( cmd , cmd_Ën , & hªdË , & off£t ); 6067 ià(! Ën ) 6068  ATT_ECODE_INVALID_PDU ; 6070  ATT_OP_READ_REQ : 6071 Ën = `dec_»ad_»q ( cmd , cmd_Ën , & hªdË ); 6072 ià(! Ën ) 6073  ATT_ECODE_INVALID_PDU ; 6074 off£t = 0; 6077 `”rÜ ("g©t: UÃx³ùed„—dy³ 0x%02x", cmd [0]); 6078  ATT_ECODE_REQ_NOT_SUPP ; 6081 ©Œib = `g©t_db_g‘_©Œibu‹ ( g©t_db , hªdË ); 6082 ià( ©Œib == 0) 6083  ATT_ECODE_INVALID_HANDLE ; 6085 d©a = `Ãw0 ( ³ndšg_»que¡ , 1); 6086 ià(! d©a ) 6087  ATT_ECODE_INSUFF_RESOURCES ; 6089 d©a -> off£t = offset; 6090 d©a -> ©Œib =‡ttrib; 6091 d©a -> ¡©e = REQUEST_INIT ; 6092 ià(! `queue_push_ž ( dev -> ³ndšg_»que¡s , d©a )) { 6093 `ä“ ( d©a ); 6094  ATT_ECODE_INSUFF_RESOURCES ; 6097 `´oûss_dev_³ndšg_»que¡s ( dev , cmd [0]); 6100 } } 6102  ušt8_t $mtu_©t_hªdË (cÚ¡ ušt8_t * cmd , ušt16_t cmd_Ën , 6103  g©t_deviû * dev ) 6105 ušt16_t mtu , imtu , omtu ; 6106 size_t Ëngth ; 6107 GIOChªÃl * io ; 6108 GE¼Ü * g”r = NULL ; 6109 ušt16_t Ën ; 6110 ušt8_t * r¥ ; 6112 `DBG (""); 6114 Ën = `dec_mtu_»q ( cmd , cmd_Ën , & mtu ); 6115 ià(! Ën ) 6116  ATT_ECODE_INVALID_PDU ; 6118 ià( mtu < ATT_DEFAULT_LE_MTU ) 6119  ATT_ECODE_REQ_NOT_SUPP ; 6121 io = `g_©Œib_g‘_chªÃl ( dev -> ©Œib ); 6123 `bt_io_g‘ ( io , & g”r , 6124 BT_IO_OPT_IMTU , & imtu , 6125 BT_IO_OPT_OMTU , & omtu , 6126 BT_IO_OPT_INVALID ); 6127 ià( g”r ) { 6128 `”rÜ ("bt_io_g‘: %s", g”r -> mes§ge ); 6129 `g_”rÜ_ä“ ( g”r ); 6130  ATT_ECODE_UNLIKELY ; 6133 r¥ = `g_©Œib_g‘_bufãr ( dev -> ©Œib , & Ëngth ); 6136 Ën = `’c_mtu_»¥ ( imtu , r¥ , Ëngth ); 6137 ià(! Ën ) 6138  ATT_ECODE_UNLIKELY ; 6140 `g_©Œib_£nd ( dev -> ©Œib , 0, r¥ , Ën , NULL , NULL, NULL); 6143 mtu = `MIN (mtu, omtu ); 6144 `g_©Œib_£t_mtu ( dev -> ©Œib , mtu ); 6147 } } 6149  ušt8_t $fšd_šfo_hªdË (cÚ¡ ušt8_t * cmd , ušt16_t cmd_Ën , 6150 ušt8_t * r¥ , size_t r¥_size , 6151 ušt16_t * Ëngth ) 6153  g©t_db_©Œibu‹ * ©Œib ; 6154  queue * q , * ‹mp ; 6155  ©t_d©a_li¡ * adl ; 6156  ™”©Ü = 0; 6157 ušt16_t ¡¬t , ’d ; 6158 ušt16_t Ën , queue_Ën ; 6159 ušt8_t »t = 0; 6161 `DBG (""); 6163 Ën = `dec_fšd_šfo_»q ( cmd , cmd_Ën , & ¡¬t , & ’d ); 6164 ià(! Ën ) 6165  ATT_ECODE_INVALID_PDU ; 6167 ià( ¡¬t > ’d || start == 0) 6168  ATT_ECODE_INVALID_HANDLE ; 6170 q = `queue_Ãw (); 6171 ià(! q ) 6172  ATT_ECODE_UNLIKELY ; 6174 `g©t_db_fšd_šfÜm©iÚ ( g©t_db , ¡¬t , ’d , q ); 6176 ià( `queue_i£m±y ( q )) { 6177 `queue_de¡roy ( q , NULL ); 6178  ATT_ECODE_ATTR_NOT_FOUND ; 6181 ‹mp = `queue_Ãw (); 6182 ià(! ‹mp ) { 6183 `queue_de¡roy ( q , NULL ); 6184  ATT_ECODE_UNLIKELY ; 6187 ©Œib = `queue_³ek_h—d ( q ); 6189 Ën = `bt_uuid_Ën ( `g©t_db_©Œibu‹_g‘_ty³ ( ©Œib )); 6190 ià( Ën != 2 &&†en != 16) { 6191 `queue_de¡roy ( q , NULL ); 6192 `queue_de¡roy ( ‹mp , NULL ); 6193  ATT_ECODE_UNLIKELY ; 6196  ©Œib ) { 6197 cÚ¡ bt_uuid_t * ty³ ; 6199 ty³ = `g©t_db_©Œibu‹_g‘_ty³ ( ©Œib ); 6200 ià( `bt_uuid_Ën ( ty³ è!ð Ën ) 6203 `queue_push_ž ( ‹mp , `queue_pÝ_h—d ( q )); 6204 ©Œib = `queue_³ek_h—d ( q ); 6207 `queue_de¡roy ( q , NULL ); 6209 queue_Ën = `queue_Ëngth ( ‹mp ); 6210 adl = `©t_d©a_li¡_®loc ( queue_Ën , Ën + ( ušt16_t )); 6211 ià(! adl ) { 6212 `queue_de¡roy ( ‹mp , NULL ); 6213  ATT_ECODE_INSUFF_RESOURCES ; 6216  `queue_³ek_h—d ( ‹mp )) { 6217 ušt8_t * v®ue ; 6218 cÚ¡ bt_uuid_t * ty³ ; 6219  g©t_db_©Œibu‹ * ©Œib = `queue_pÝ_h—d ( ‹mp ); 6220 ušt16_t hªdË ; 6222 ty³ = `g©t_db_©Œibu‹_g‘_ty³ ( ©Œib ); 6223 ià(! ty³ ) 6226 v®ue = adl -> d©a [ ™”©Ü ++]; 6228 hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( ©Œib ); 6229 `put_Ë16 ( hªdË , v®ue ); 6230 `memýy (& v®ue [2], & ty³ ->v®ue, Ën ); 6233 Ën = `’c_fšd_šfo_»¥ Ö’ =ð2 ? ATT_FIND_INFO_RESP_FMT_16BIT : 6234 ATT_FIND_INFO_RESP_FMT_128BIT , adl , r¥ , 6235 r¥_size ); 6236 ià(! Ën ) 6237 »t = ATT_ECODE_UNLIKELY ; 6239 * Ëngth = Ën ; 6240 `©t_d©a_li¡_ä“ ( adl ); 6241 `queue_de¡roy ( ‹mp , NULL ); 6243  »t ; 6244 } } 6246  ušt8_t $fšd_by_ty³_»que¡ (cÚ¡ ušt8_t * cmd , ušt16_t cmd_Ën , 6247  g©t_deviû * deviû ) 6249 ušt8_t £¬ch_v®ue [ cmd_Ën ]; 6250 size_t £¬ch_vËn ; 6251 ušt16_t ¡¬t , ’d ; 6252  queue * q ; 6253 bt_uuid_t uuid ; 6254 ušt16_t Ën ; 6256 `DBG (""); 6258 Ën = `dec_fšd_by_ty³_»q ( cmd , cmd_Ën , & ¡¬t , & ’d , & uuid , 6259 £¬ch_v®ue , & £¬ch_vËn ); 6260 ià(! Ën ) 6261  ATT_ECODE_INVALID_PDU ; 6263 ià( ¡¬t > ’d || start == 0) 6264  ATT_ECODE_INVALID_HANDLE ; 6266 q = `queue_Ãw (); 6267 ià(! q ) 6268  ATT_ECODE_UNLIKELY ; 6270 `g©t_db_fšd_by_ty³ ( g©t_db , ¡¬t , ’d , & uuid , q ); 6272 ià( `queue_i£m±y ( q )) { 6273 size_t mtu ; 6274 ušt8_t * r¥ = `g_©Œib_g‘_bufãr ( deviû -> ©Œib , & mtu ); 6276 Ën = `’c_”rÜ_»¥ ( ATT_OP_FIND_BY_TYPE_REQ , ¡¬t , 6277 ATT_ECODE_ATTR_NOT_FOUND , r¥ , mtu ); 6278 `g_©Œib_£nd ( deviû -> ©Œib , 0, r¥ , Ën , NULL , NULL, NULL); 6279 `queue_de¡roy ( q , NULL ); 6283  `queue_³ek_h—d ( q )) { 6284  g©t_db_©Œibu‹ * ©Œib = `queue_pÝ_h—d ( q ); 6285  ³ndšg_»que¡ * d©a ; 6287 d©a = `Ãw0 ( ³ndšg_»que¡ , 1); 6288 ià(! d©a ) { 6289 `queue_de¡roy ( q , NULL ); 6290  ATT_ECODE_INSUFF_RESOURCES ; 6293 d©a -> fž‹r_v®ue = `m®loc0 ( £¬ch_vËn ); 6294 ià(! d©a -> fž‹r_v®ue ) { 6295 `de¡roy_³ndšg_»que¡ ( d©a ); 6296 `queue_de¡roy ( q , NULL ); 6297  ATT_ECODE_INSUFF_RESOURCES ; 6300 d©a -> ¡©e = REQUEST_INIT ; 6301 d©a -> ©Œib =‡ttrib; 6302 d©a -> fž‹r_vËn = £¬ch_vËn ; 6303 `memýy ( d©a -> fž‹r_v®ue , £¬ch_v®ue , £¬ch_vËn ); 6305 `queue_push_ž ( deviû -> ³ndšg_»que¡s , d©a ); 6308 `queue_de¡roy ( q , NULL ); 6310 `´oûss_dev_³ndšg_»que¡s ( deviû , ATT_OP_FIND_BY_TYPE_REQ ); 6313 } } 6315  $wr™e_cÚfœm ( g©t_db_©Œibu‹ * ©Œib , 6316  ”r , * u£r_d©a ) 6318 ià(! ”r ) 6321 `”rÜ ("E¼Ü wr™tšg‡‰ribu‹ %p", ©Œib ); 6322 } } 6324  $wr™e_cmd_»que¡ (cÚ¡ ušt8_t * cmd , ušt16_t cmd_Ën , 6325  g©t_deviû * dev ) 6327 ušt8_t v®ue [ cmd_Ën ]; 6328  g©t_db_©Œibu‹ * ©Œib ; 6329 ušt32_t ³rmissiÚs ; 6330 ušt16_t hªdË ; 6331 ušt16_t Ën ; 6332 size_t vËn ; 6334 Ën = `dec_wr™e_cmd ( cmd , cmd_Ën , & hªdË , v®ue , & vËn ); 6335 ià(! Ën ) 6338 ià( hªdË == 0) 6341 ©Œib = `g©t_db_g‘_©Œibu‹ ( g©t_db , hªdË ); 6342 ià(! ©Œib ) 6345 ià(! `g©t_db_©Œibu‹_g‘_³rmissiÚs ( ©Œib , & ³rmissiÚs )) 6348 ià( `check_deviû_³rmissiÚs ( dev , cmd [0], ³rmissiÚs )) 6351 `g©t_db_©Œibu‹_wr™e ( ©Œib , 0, v®ue , vËn , cmd [0], & dev -> bdaddr , 6352 wr™e_cÚfœm , NULL ); 6353 } } 6355  $wr™e_sigÃd_cmd_»que¡ (cÚ¡ ušt8_t * cmd , ušt16_t cmd_Ën , 6356  g©t_deviû * dev ) 6358 ušt8_t v®ue [ cmd_Ën ]; 6359 ušt8_t s [ ATT_SIGNATURE_LEN ]; 6360  g©t_db_©Œibu‹ * ©Œib ; 6361 ušt32_t ³rmissiÚs ; 6362 ušt16_t hªdË ; 6363 ušt16_t Ën ; 6364 size_t vËn ; 6365 ušt8_t c¤k [16]; 6366 ušt32_t sign_út ; 6368 ià( `g‘_cid ( dev è!ð ATT_CID ) { 6369 `”rÜ ("gatt: Remoteries write signed on BR/EDR bearer"); 6370 `cÚÃùiÚ_þ—nup ( dev ); 6374 ià( `g‘_£c_Ëv– ( dev è!ð BT_SECURITY_LOW ) { 6375 `”rÜ ("gatt: Remoteries write signed onƒncrypted†ink"); 6376 `cÚÃùiÚ_þ—nup ( dev ); 6380 ià(! `bt_g‘_c¤k (& dev -> bdaddr , REMOTE_CSRK , c¤k , & sign_út )) { 6381 `”rÜ ("gatt: No valid csrk from„emote device"); 6385 Ën = `dec_sigÃd_wr™e_cmd ( cmd , cmd_Ën , & hªdË , v®ue , & vËn , s ); 6387 ià( hªdË == 0) 6390 ©Œib = `g©t_db_g‘_©Œibu‹ ( g©t_db , hªdË ); 6391 ià(! ©Œib ) 6394 `g©t_db_©Œibu‹_g‘_³rmissiÚs ( ©Œib , & ³rmissiÚs ); 6396 ià( `check_deviû_³rmissiÚs ( dev , cmd [0], ³rmissiÚs )) 6399 ià( Ën ) { 6400 ušt8_t t [ ATT_SIGNATURE_LEN ]; 6401 ušt32_t r_sign_út = `g‘_Ë32 ( s ); 6403 ià( r_sign_út < sign_út ) { 6404 `”rÜ ("gatt: Invalid sign counter (%d<%d)", 6405 r_sign_út , sign_út ); 6410 ià(! `bt_üy±o_sign_©t ( üy±o , c¤k , cmd , 6411 cmd_Ën - ATT_SIGNATURE_LEN , 6412 r_sign_út , t )) { 6413 `”rÜ ("gatt: Error when generating‡tt signature"); 6417 ià( `memcmp ( t , s , ATT_SIGNATURE_LEN )) { 6418 `”rÜ ("gatt: signature does‚ot match"); 6422 `bt_upd©e_sign_couÁ” (& dev -> bdaddr , REMOTE_CSRK , r_sign_út ); 6423 `g©t_db_©Œibu‹_wr™e ( ©Œib , 0, v®ue , vËn , cmd [0], 6424 & dev -> bdaddr , wr™e_cÚfœm , NULL ); 6426 } } 6428  $©Œibu‹_wr™e_cb ( g©t_db_©Œibu‹ * ©Œib ,  ”r , 6429 * u£r_d©a ) 6431  ³ndšg_»que¡ * d©a = u£r_d©a ; 6432 ušt8_t ”rÜ = `”r_to_©t ( ”r ); 6434 `DBG (""); 6436 d©a -> ©Œib =‡ttrib; 6437 d©a -> ”rÜ =ƒrror; 6439 d©a -> ¡©e = REQUEST_DONE ; 6440 } } 6442  ušt8_t $wr™e_»q_»que¡ (cÚ¡ ušt8_t * cmd , ušt16_t cmd_Ën , 6443  g©t_deviû * dev ) 6445 ušt8_t v®ue [ cmd_Ën ]; 6446  ³ndšg_»que¡ * d©a ; 6447  g©t_db_©Œibu‹ * ©Œib ; 6448 ušt32_t ³rmissiÚs ; 6449 ušt16_t hªdË ; 6450 ušt16_t Ën ; 6451 ušt8_t ”rÜ ; 6452 size_t vËn ; 6454 Ën = `dec_wr™e_»q ( cmd , cmd_Ën , & hªdË , v®ue , & vËn ); 6455 ià(! Ën ) 6456  ATT_ECODE_INVALID_PDU ; 6458 ià( hªdË == 0) 6459  ATT_ECODE_INVALID_HANDLE ; 6461 ©Œib = `g©t_db_g‘_©Œibu‹ ( g©t_db , hªdË ); 6462 ià(! ©Œib ) 6463  ATT_ECODE_ATTR_NOT_FOUND ; 6465 `g©t_db_©Œibu‹_g‘_³rmissiÚs ( ©Œib , & ³rmissiÚs ); 6467 ”rÜ = `check_deviû_³rmissiÚs ( dev , cmd [0], ³rmissiÚs ); 6468 ià( ”rÜ ) 6469  ”rÜ ; 6471 d©a = `Ãw0 ( ³ndšg_»que¡ , 1); 6472 ià(! d©a ) 6473  ATT_ECODE_INSUFF_RESOURCES ; 6475 d©a -> ©Œib =‡ttrib; 6476 d©a -> ¡©e = REQUEST_PENDING ; 6478 ià(! `queue_push_ž ( dev -> ³ndšg_»que¡s , d©a )) { 6479 `ä“ ( d©a ); 6480  ATT_ECODE_INSUFF_RESOURCES ; 6483 ià(! `g©t_db_©Œibu‹_wr™e ( ©Œib , 0, v®ue , vËn , cmd [0], 6484 & dev -> bdaddr , ©Œibu‹_wr™e_cb , 6485 d©a )) { 6486 `queue_»move ( dev -> ³ndšg_»que¡s , d©a ); 6487 `ä“ ( d©a ); 6488  ATT_ECODE_UNLIKELY ; 6491 `£nd_dev_com¶‘e_»¥Ú£ ( dev , cmd [0]); 6494 } } 6496  ušt8_t $wr™e_´•_»que¡ (cÚ¡ ušt8_t * cmd , ušt16_t cmd_Ën , 6497  g©t_deviû * dev ) 6499 ušt8_t v®ue [ cmd_Ën ]; 6500  ³ndšg_»que¡ * d©a ; 6501  g©t_db_©Œibu‹ * ©Œib ; 6502 ušt32_t ³rmissiÚs ; 6503 ušt16_t hªdË ; 6504 ušt16_t off£t ; 6505 ušt8_t ”rÜ ; 6506 ušt16_t Ën ; 6507 size_t vËn ; 6509 Ën = `dec_´•_wr™e_»q ( cmd , cmd_Ën , & hªdË , & off£t , 6510 v®ue , & vËn ); 6511 ià(! Ën ) 6512  ATT_ECODE_INVALID_PDU ; 6514 ià( hªdË == 0) 6515  ATT_ECODE_INVALID_HANDLE ; 6517 ©Œib = `g©t_db_g‘_©Œibu‹ ( g©t_db , hªdË ); 6518 ià(! ©Œib ) 6519  ATT_ECODE_ATTR_NOT_FOUND ; 6521 `g©t_db_©Œibu‹_g‘_³rmissiÚs ( ©Œib , & ³rmissiÚs ); 6523 ”rÜ = `check_deviû_³rmissiÚs ( dev , cmd [0], ³rmissiÚs ); 6524 ià( ”rÜ ) 6525  ”rÜ ; 6527 d©a = `Ãw0 ( ³ndšg_»que¡ , 1); 6528 ià(! d©a ) 6529  ATT_ECODE_INSUFF_RESOURCES ; 6531 d©a -> ©Œib =‡ttrib; 6532 d©a -> off£t = offset; 6533 d©a -> ¡©e = REQUEST_PENDING ; 6535 ià(! `queue_push_ž ( dev -> ³ndšg_»que¡s , d©a )) { 6536 `ä“ ( d©a ); 6537  ATT_ECODE_INSUFF_RESOURCES ; 6540 d©a -> v®ue = `g_memdup (v®ue, vËn ); 6541 d©a -> Ëngth = vËn ; 6543 ià(! `g©t_db_©Œibu‹_wr™e ( ©Œib , off£t , v®ue , vËn , cmd [0], 6544 & dev -> bdaddr , ©Œibu‹_wr™e_cb , 6545 d©a )) { 6546 `queue_»move ( dev -> ³ndšg_»que¡s , d©a ); 6547 `g_ä“ ( d©a -> v®ue ); 6548 `ä“ ( d©a ); 6550  ATT_ECODE_UNLIKELY ; 6553 `£nd_dev_com¶‘e_»¥Ú£ ( dev , cmd [0]); 6556 } } 6558  $£nd_£rv”_wr™e_execu‹_nÙify (* d©a , * u£r_d©a ) 6560  h®_ev_g©t_£rv”_»que¡_exec_wr™e * ev = u£r_d©a ; 6561  ³ndšg_Œªs_d©a * Œª§ùiÚ ; 6562  ­p_cÚÃùiÚ * cÚn = d©a ; 6564 ià(! cÚn -> wa™_execu‹_wr™e ) 6567 ev -> cÚn_id = cÚn -> id ; 6569 Œª§ùiÚ = `cÚn_add_Œª§ù ( cÚn , ATT_OP_EXEC_WRITE_REQ , NULL , 0); 6570 ià(! Œª§ùiÚ ) { 6571 cÚn -> wa™_execu‹_wr™e = çl£ ; 6575 ev -> Œªs_id = Œª§ùiÚ -> id ; 6577 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_GATT , 6578 HAL_EV_GATT_SERVER_REQUEST_EXEC_WRITE , 6579 (* ev ),ƒv); 6580 } } 6582  ušt8_t $wr™e_execu‹_»que¡ (cÚ¡ ušt8_t * cmd , ušt16_t cmd_Ën , 6583  g©t_deviû * dev ) 6585  h®_ev_g©t_£rv”_»que¡_exec_wr™e ev ; 6586 ušt8_t v®ue ; 6587  ³ndšg_»que¡ * d©a ; 6593 ià(! `³ndšg_execu‹_wr™e ()) 6594  ATT_ECODE_UNLIKELY ; 6596 ià(! `dec_exec_wr™e_»q ( cmd , cmd_Ën , & v®ue )) 6597  ATT_ECODE_INVALID_PDU ; 6599 `mem£t (& ev , 0, (ev)); 6600 `bdaddr2ªdroid (& dev -> bdaddr , & ev .bdaddr); 6601 ev . exec_wr™e = v®ue ; 6603 d©a = `Ãw0 ( ³ndšg_»que¡ , 1); 6604 ià(! d©a ) 6605  ATT_ECODE_INSUFF_RESOURCES ; 6607 d©a -> ¡©e = REQUEST_PENDING ; 6608 ià(! `queue_push_ž ( dev -> ³ndšg_»que¡s , d©a )) { 6609 `ä“ ( d©a ); 6610  ATT_ECODE_INSUFF_RESOURCES ; 6613 `queue_fÜ—ch ( ­p_cÚÃùiÚs , £nd_£rv”_wr™e_execu‹_nÙify , & ev ); 6614 `£nd_dev_com¶‘e_»¥Ú£ ( dev , cmd [0]); 6617 } } 6619  $©t_hªdËr (cÚ¡ ušt8_t * du , ušt16_t Ën , gpoš‹r u£r_d©a ) 6621  g©t_deviû * dev = u£r_d©a ; 6622 ušt8_t ¡©us ; 6623 ušt16_t »¥_Ëngth = 0; 6624 size_t Ëngth ; 6625 ušt8_t * Ýdu = `g_©Œib_g‘_bufãr ( dev -> ©Œib , & Ëngth ); 6627 `DBG ("Ý 0x%02x", du [0]); 6629 ià( Ën > Ëngth ) { 6630 `”rÜ ("g©t: ToØmuch d©¨Ú ATT sock‘ %p", Ýdu ); 6631 ¡©us = ATT_ECODE_INVALID_PDU ; 6632  dÚe ; 6635  du [0]) { 6636  ATT_OP_READ_BY_GROUP_REQ : 6637  ATT_OP_READ_BY_TYPE_REQ : 6638 ¡©us = `»ad_by_ty³ ( du , Ën , dev ); 6640  ATT_OP_READ_REQ : 6641  ATT_OP_READ_BLOB_REQ : 6642 ¡©us = `»ad_»que¡ ( du , Ën , dev ); 6644  ATT_OP_MTU_REQ : 6645 ¡©us = `mtu_©t_hªdË ( du , Ën , dev ); 6647  ATT_OP_FIND_INFO_REQ : 6648 ¡©us = `fšd_šfo_hªdË ( du , Ën , Ýdu , Ëngth , 6649 & »¥_Ëngth ); 6651  ATT_OP_WRITE_REQ : 6652 ¡©us = `wr™e_»q_»que¡ ( du , Ën , dev ); 6653 ià(! ¡©us ) 6656  ATT_OP_WRITE_CMD : 6657 `wr™e_cmd_»que¡ ( du , Ën , dev ); 6660  ATT_OP_SIGNED_WRITE_CMD : 6661 `wr™e_sigÃd_cmd_»que¡ ( du , Ën , dev ); 6664  ATT_OP_PREP_WRITE_REQ : 6665 ¡©us = `wr™e_´•_»que¡ ( du , Ën , dev ); 6666 ià(! ¡©us ) 6669  ATT_OP_FIND_BY_TYPE_REQ : 6670 ¡©us = `fšd_by_ty³_»que¡ ( du , Ën , dev ); 6672  ATT_OP_EXEC_WRITE_REQ : 6673 ¡©us = `wr™e_execu‹_»que¡ ( du , Ën , dev ); 6674 ià(! ¡©us ) 6677  ATT_OP_READ_MULTI_REQ : 6679 `DBG ("UnsuµÜ‹d„eque¡ 0x%02x", du [0]); 6680 ¡©us = ATT_ECODE_REQ_NOT_SUPP ; 6681  dÚe ; 6684 dÚe : 6685 ià( ¡©us ) 6686 »¥_Ëngth = `’c_”rÜ_»¥ ( du [0], 0x0000, ¡©us , Ýdu , 6687 Ëngth ); 6689 ià( »¥_Ëngth ) 6690 `g_©Œib_£nd ( dev -> ©Œib , 0, Ýdu , »¥_Ëngth , NULL , NULL, 6691 NULL ); 6692 } } 6694  $cÚÃù_cÚfœm ( GIOChªÃl * io , * u£r_d©a ) 6696  g©t_deviû * dev ; 6697 ušt8_t d¡_ty³ ; 6698 bdaddr_t d¡ ; 6699 GE¼Ü * g”r = NULL ; 6701 `DBG (""); 6703 `bt_io_g‘ ( io , & g”r , 6704 BT_IO_OPT_DEST_BDADDR , & d¡ , 6705 BT_IO_OPT_DEST_TYPE , & d¡_ty³ , 6706 BT_IO_OPT_INVALID ); 6707 ià( g”r ) { 6708 `”rÜ ("g©t: bt_io_g‘: %s", g”r -> mes§ge ); 6709 `g_”rÜ_ä“ ( g”r ); 6714 dev = `fšd_deviû_by_addr (& d¡ ); 6715 ià(! dev ) { 6716 dev = `ü—‹_deviû (& d¡ ); 6717 ià(! dev ) { 6718 `”rÜ ("gatt: Could‚ot create device"); 6719  drÝ ; 6722 ià(( dev -> ¡©e !ð DEVICE_DISCONNECTED ) && 6723 !( dev -> ¡©e =ð DEVICE_CONNECT_INIT && 6724 `bt_k”Ãl_cÚn_cÚŒÞ ())) { 6725  addr [18]; 6727 `ba2¡r (& d¡ , addr ); 6728 `šfo ("gatt: Rejecting incoming connection from %s", 6729 addr ); 6730  drÝ ; 6734 dev -> bdaddr_ty³ = d¡_ty³ ; 6736 ià(! `bt_io_acû± ( io , cÚÃù_cb , `deviû_»f ( dev ), NULL , NULL)) { 6737 `”rÜ ("gatt: failedo‡ccept connection"); 6738 `deviû_uÄef ( dev ); 6739  drÝ ; 6742 `queue_fÜ—ch ( li¡’_­ps , ü—‹_­p_cÚÃùiÚ , dev ); 6743 `deviû_£t_¡©e ( dev , DEVICE_CONNECT_READY ); 6747 drÝ : 6748 `g_io_chªÃl_shutdown ( io , TRUE , NULL ); 6749 } } 6751  sg­_¤vc_hªdËs { 6752  g©t_db_©Œibu‹ * m¤vc ; 6755  g©t_db_©Œibu‹ * mdev_Çme ; 6756  g©t_db_©Œibu‹ * m­³¬ ; 6757  g©t_db_©Œibu‹ * m´iv ; 6760  g­_¤vc_hªdËs gg­_¤vc_d©a ; 6762  #APPEARANCE_GENERIC_PHONE 0x0040 ) 6763  #PERIPHERAL_PRIVACY_DISABLE 0x00 ) 6765  $deviû_Çme_»ad_cb ( g©t_db_©Œibu‹ * ©Œib , 6766  id , ušt16_t off£t , 6767 ušt8_t Ýcode , bdaddr_t * bdaddr , 6768 * u£r_d©a ) 6770 cÚ¡ * Çme = `bt_g‘_ad­‹r_Çme (); 6772 `g©t_db_©Œibu‹_»ad_»suÉ ( ©Œib , id , 0, (*è Çme , 6773 `¡¾’ ( Çme )); 6774 } } 6776  $»gi¡”_g­_£rviû () 6778 ušt16_t ¡¬t , ’d ; 6779 bt_uuid_t uuid ; 6782 `bt_uuid16_ü—‹ (& uuid , 0x1800); 6783 g­_¤vc_d©a . ¤vc = `g©t_db_add_£rviû ( g©t_db , & uuid , Œue , 7); 6786 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_DEVICE_NAME ); 6787 g­_¤vc_d©a . dev_Çme = 6788 `g©t_db_£rviû_add_ch¬aù”i¡ic ( g­_¤vc_d©a . ¤vc , 6789 & uuid , GATT_PERM_READ , 6790 GATT_CHR_PROP_READ , 6791 deviû_Çme_»ad_cb , 6792 NULL , NULL); 6795 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_APPEARANCE ); 6797 g­_¤vc_d©a . ­³¬ = 6798 `g©t_db_£rviû_add_ch¬aù”i¡ic ( g­_¤vc_d©a . ¤vc , 6799 & uuid , GATT_PERM_READ , 6800 GATT_CHR_PROP_READ , 6801 NULL , NULL, NULL); 6802 ià( g­_¤vc_d©a . ­³¬ ) { 6803 ušt16_t v®ue ; 6805 v®ue = `ýu_to_Ë16 ( APPEARANCE_GENERIC_PHONE ); 6806 `g©t_db_©Œibu‹_wr™e ( g­_¤vc_d©a . ­³¬ , 0, 6807 (*è& v®ue , (value), 6808 ATT_OP_WRITE_REQ , NULL , 6809 wr™e_cÚfœm , NULL ); 6813 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_PERIPHERAL_PRIV_FLAG ); 6814 g­_¤vc_d©a . ´iv = 6815 `g©t_db_£rviû_add_ch¬aù”i¡ic ( g­_¤vc_d©a . ¤vc , 6816 & uuid , GATT_PERM_READ , 6817 GATT_CHR_PROP_READ , 6818 NULL , NULL, NULL); 6819 ià( g­_¤vc_d©a . ´iv ) { 6820 ušt8_t v®ue ; 6822 v®ue = PERIPHERAL_PRIVACY_DISABLE ; 6823 `g©t_db_©Œibu‹_wr™e ( g­_¤vc_d©a . ´iv , 0, 6824 & v®ue , (value), 6825 ATT_OP_WRITE_REQ , NULL , 6826 wr™e_cÚfœm , NULL ); 6829 `g©t_db_£rviû_£t_aùive ( g­_¤vc_d©a . ¤vc , Œue ); 6832 `bt_uuid16_ü—‹ (& uuid , 0x1800); 6833 `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( g­_¤vc_d©a . ¤vc , & ¡¬t , & ’d ); 6834 g­_sdp_hªdË = `add_sdp_»cÜd (& uuid , ¡¬t , ’d , 6836 ià(! g­_sdp_hªdË ) 6837 `”rÜ ("gatt: Failedo„egister GAP SDP„ecord"); 6838 } } 6840  $deviû_šfo_»ad_cb ( g©t_db_©Œibu‹ * ©Œib , 6841  id , ušt16_t off£t , 6842 ušt8_t Ýcode , bdaddr_t * bdaddr , 6843 * u£r_d©a ) 6845 * buf = u£r_d©a ; 6847 `g©t_db_©Œibu‹_»ad_»suÉ ( ©Œib , id , 0, u£r_d©a , `¡¾’ ( buf )); 6848 } } 6850  $deviû_šfo_»ad_sy¡em_id_cb ( g©t_db_©Œibu‹ * ©Œib , 6851  id , ušt16_t off£t , 6852 ušt8_t Ýcode , bdaddr_t * bdaddr , 6853 * u£r_d©a ) 6855 ušt8_t pdu [8]; 6857 `put_Ë64 ( `bt_cÚfig_g‘_sy¡em_id (), pdu ); 6859 `g©t_db_©Œibu‹_»ad_»suÉ ( ©Œib , id , 0, pdu , (pdu)); 6860 } } 6862  $deviû_šfo_»ad_²p_id_cb ( g©t_db_©Œibu‹ * ©Œib , 6863  id , ušt16_t off£t , 6864 ušt8_t Ýcode , bdaddr_t * bdaddr , 6865 * u£r_d©a ) 6867 ušt8_t pdu [7]; 6869 pdu [0] = `bt_cÚfig_g‘_²p_sourû (); 6870 `put_Ë16 ( `bt_cÚfig_g‘_²p_v’dÜ (), & pdu [1]); 6871 `put_Ë16 ( `bt_cÚfig_g‘_²p_´oduù (), & pdu [3]); 6872 `put_Ë16 ( `bt_cÚfig_g‘_²p_v”siÚ (), & pdu [5]); 6874 `g©t_db_©Œibu‹_»ad_»suÉ ( ©Œib , id , 0, pdu , (pdu)); 6875 } } 6877  $»gi¡”_deviû_šfo_£rviû () 6879 bt_uuid_t uuid ; 6880  g©t_db_©Œibu‹ * £rviû ; 6881 ušt16_t ¡¬t_hªdË , ’d_hªdË ; 6882 cÚ¡ * d©a ; 6883 ušt32_t ’c_³rm = GATT_PERM_READ | GATT_PERM_READ_ENCRYPTED ; 6885 `DBG (""); 6888 `bt_uuid16_ü—‹ (& uuid , 0x180a); 6889 £rviû = `g©t_db_add_£rviû ( g©t_db , & uuid , Œue , 15); 6892 d©a = `bt_cÚfig_g‘_Çme (); 6893 ià( d©a ) { 6894 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_MODEL_NUMBER_STRING ); 6895 `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , & uuid , 6896 GATT_PERM_READ , 6897 GATT_CHR_PROP_READ , 6898 deviû_šfo_»ad_cb , NULL , 6899 (*è d©a ); 6902 d©a = `bt_cÚfig_g‘_£rŸl (); 6903 ià( d©a ) { 6904 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_SERIAL_NUMBER_STRING ); 6905 `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , & uuid , 6906 ’c_³rm , GATT_CHR_PROP_READ , 6907 deviû_šfo_»ad_cb , NULL , 6908 (*è d©a ); 6911 ià( `bt_cÚfig_g‘_sy¡em_id ()) { 6912 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_SYSTEM_ID ); 6913 `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , & uuid , 6914 ’c_³rm , GATT_CHR_PROP_READ , 6915 deviû_šfo_»ad_sy¡em_id_cb , 6916 NULL , NULL); 6919 d©a = `bt_cÚfig_g‘_fw_»v (); 6920 ià( d©a ) { 6921 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_FIRMWARE_REVISION_STRING ); 6922 `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , & uuid , 6923 GATT_PERM_READ , 6924 GATT_CHR_PROP_READ , 6925 deviû_šfo_»ad_cb , NULL , 6926 (*è d©a ); 6929 d©a = `bt_cÚfig_g‘_hw_»v (); 6930 ià( d©a ) { 6931 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_HARDWARE_REVISION_STRING ); 6932 `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , & uuid , 6933 GATT_PERM_READ , 6934 GATT_CHR_PROP_READ , 6935 deviû_šfo_»ad_cb , NULL , 6936 (*è d©a ); 6939 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_SOFTWARE_REVISION_STRING ); 6940 `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , & uuid , GATT_PERM_READ , 6941 GATT_CHR_PROP_READ , deviû_šfo_»ad_cb , 6942 NULL , VERSION ); 6944 d©a = `bt_cÚfig_g‘_v’dÜ (); 6945 ià( d©a ) { 6946 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_MANUFACTURER_NAME_STRING ); 6947 `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , & uuid , 6948 GATT_PERM_READ , 6949 GATT_CHR_PROP_READ , 6950 deviû_šfo_»ad_cb , NULL , 6951 (*è d©a ); 6954 ià( `bt_cÚfig_g‘_²p_sourû ()) { 6955 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_PNP_ID ); 6956 `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , & uuid , 6957 GATT_PERM_READ , 6958 GATT_CHR_PROP_READ , 6959 deviû_šfo_»ad_²p_id_cb , 6960 NULL , NULL); 6963 `g©t_db_£rviû_£t_aùive ( £rviû , Œue ); 6966 `bt_uuid16_ü—‹ (& uuid , 0x180a); 6967 `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( £rviû , & ¡¬t_hªdË , 6968 & ’d_hªdË ); 6969 dis_sdp_hªdË = `add_sdp_»cÜd (& uuid , ¡¬t_hªdË , ’d_hªdË , 6971 ià(! dis_sdp_hªdË ) 6972 `”rÜ ("gatt: Failedo„egister DIS SDP„ecord"); 6973 } } 6975  $g©t_¤vc_chªge_wr™e_cb ( g©t_db_©Œibu‹ * ©Œib , 6976  id , ušt16_t off£t , 6977 cÚ¡ ušt8_t * v®ue , size_t Ën , 6978 ušt8_t Ýcode , bdaddr_t * bdaddr , 6979 * u£r_d©a ) 6981  g©t_deviû * dev ; 6983 dev = `fšd_deviû_by_addr ( bdaddr ); 6984 ià(! dev ) { 6985 `”rÜ ("gatt: Could‚ot find device ?!"); 6989 ià(! `bt_deviû_is_bÚded ( bdaddr )) { 6990 `g©t_db_©Œibu‹_wr™e_»suÉ ( ©Œib , id , 6991 ATT_ECODE_AUTHORIZATION ); 6996 ià( Ën != 2) { 6997 `g©t_db_©Œibu‹_wr™e_»suÉ ( ©Œib , id , 6998 ATT_ECODE_INVAL_ATTR_VALUE_LEN ); 7003 `bt_¡Üe_g©t_ccc ( bdaddr , `g‘_Ë16 ( v®ue )); 7005 `g©t_db_©Œibu‹_wr™e_»suÉ ( ©Œib , id , 0); 7006 } } 7008  $g©t_¤vc_chªge_»ad_cb ( g©t_db_©Œibu‹ * ©Œib , 7009  id , ušt16_t off£t , 7010 ušt8_t Ýcode , bdaddr_t * bdaddr , 7011 * u£r_d©a ) 7013  g©t_deviû * dev ; 7014 ušt8_t pdu [2]; 7016 dev = `fšd_deviû_by_addr ( bdaddr ); 7017 ià(! dev ) { 7018 `”rÜ ("gatt: Could‚ot find device ?!"); 7022 `put_Ë16 ( `bt_g‘_g©t_ccc (& dev -> bdaddr ), pdu ); 7024 `g©t_db_©Œibu‹_»ad_»suÉ ( ©Œib , id , 0, pdu , (pdu)); 7025 } } 7027  $»gi¡”_g©t_£rviû () 7029  g©t_db_©Œibu‹ * £rviû ; 7030 ušt16_t ¡¬t_hªdË , ’d_hªdË ; 7031 bt_uuid_t uuid ; 7033 `DBG (""); 7035 `bt_uuid16_ü—‹ (& uuid , 0x1801); 7036 £rviû = `g©t_db_add_£rviû ( g©t_db , & uuid , Œue , 4); 7038 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_SERVICE_CHANGED ); 7039 £rviû_chªged_©Œib = `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , 7040 & uuid , GATT_PERM_NONE , 7041 GATT_CHR_PROP_INDICATE , 7042 NULL , NULL, NULL); 7044 `bt_uuid16_ü—‹ (& uuid , GATT_CLIENT_CHARAC_CFG_UUID ); 7045 `g©t_db_£rviû_add_desütÜ ( £rviû , & uuid , 7046 GATT_PERM_READ | GATT_PERM_WRITE , 7047 g©t_¤vc_chªge_»ad_cb , 7048 g©t_¤vc_chªge_wr™e_cb , NULL ); 7050 `g©t_db_£rviû_£t_aùive ( £rviû , Œue ); 7053 `bt_uuid16_ü—‹ (& uuid , 0x1801); 7054 `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( £rviû , & ¡¬t_hªdË , 7055 & ’d_hªdË ); 7056 g©t_sdp_hªdË = `add_sdp_»cÜd (& uuid , ¡¬t_hªdË , ’d_hªdË , 7059 ià(! g©t_sdp_hªdË ) 7060 `”rÜ ("gatt: Failedo„egister GATT SDP„ecord"); 7061 } } 7063  boÞ $¡¬t_li¡’šg () 7066 b»dr_io = `bt_io_li¡’ ( NULL , cÚÃù_cÚfœm , NULL, NULL, NULL, 7067 BT_IO_OPT_SOURCE_TYPE , BDADDR_BREDR , 7068 BT_IO_OPT_PSM , ATT_PSM , 7069 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 7070 BT_IO_OPT_INVALID ); 7073 Ë_io = `bt_io_li¡’ ( NULL , cÚÃù_cÚfœm , NULL, NULL, NULL, 7074 BT_IO_OPT_SOURCE_TYPE , BDADDR_LE_PUBLIC , 7075 BT_IO_OPT_CID , ATT_CID , 7076 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 7077 BT_IO_OPT_INVALID ); 7079 ià(! Ë_io && ! b»dr_io ) { 7080 `”rÜ ("gatt: Failedo start†istening IO"); 7081  çl£ ; 7084  Œue ; 7085 } } 7087  $g©t_·œed_cb (cÚ¡ bdaddr_t * addr , ušt8_t ty³ ) 7089  g©t_deviû * dev ; 7090  add»ss [18]; 7091  ­p_cÚÃùiÚ * cÚn ; 7093 dev = `fšd_deviû_by_addr ( addr ); 7094 ià(! dev ) 7097 ià( dev -> bdaddr_ty³ !ð ty³ ) 7100 `ba2¡r ( addr , add»ss ); 7101 `DBG ("Paœed deviû %s", add»ss ); 7104 cÚn = `fšd_cÚn_w™hout_­p ( dev ); 7105 ià(! cÚn ) 7108 ià( cÚn -> timeout_id > 0) { 7109 `g_sourû_»move ( cÚn -> timeout_id ); 7110 cÚn -> timeout_id = 0; 7113 `£¬ch_dev_fÜ_¤vc ( cÚn , NULL ); 7114 } } 7116  $g©t_uÅaœed_cb (cÚ¡ bdaddr_t * addr , ušt8_t ty³ ) 7118  g©t_deviû * dev ; 7119  add»ss [18]; 7121 dev = `fšd_deviû_by_addr ( addr ); 7122 ià(! dev ) 7125 ià( dev -> bdaddr_ty³ !ð ty³ ) 7128 `ba2¡r ( addr , add»ss ); 7129 `DBG ("UÅaœed deviû %s", add»ss ); 7131 `queue_»move ( g©t_deviûs , dev ); 7132 `de¡roy_deviû ( dev ); 7133 } } 7135 boÞ $bt_g©t_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr ) 7137 `DBG (""); 7139 ià(! `bt_·œed_»gi¡” ( g©t_·œed_cb )) { 7140 `”rÜ ("gatt: Could‚ot„egister…aired callback"); 7141  çl£ ; 7144 ià(! `bt_uÅaœed_»gi¡” ( g©t_uÅaœed_cb )) { 7145 `”rÜ ("gatt: Could‚ot„egister unpaired callback"); 7146  çl£ ; 7149 ià(! `¡¬t_li¡’šg ()) 7150  çl£ ; 7152 üy±o = `bt_üy±o_Ãw (); 7153 ià(! üy±o ) { 7154 `”rÜ ("gatt: Failedo setup crypto"); 7155  çžed ; 7158 g©t_deviûs = `queue_Ãw (); 7159 g©t_­ps = `queue_Ãw (); 7160 ­p_cÚÃùiÚs = `queue_Ãw (); 7161 li¡’_­ps = `queue_Ãw (); 7162 £rviûs_sdp = `queue_Ãw (); 7163 g©t_db = `g©t_db_Ãw (); 7165 ià(! g©t_deviûs || ! g©t_­ps || ! li¡’_­ps || ! ­p_cÚÃùiÚs || 7166 ! £rviûs_sdp || ! g©t_db ) { 7167 `”rÜ ("gatt: Failedo‡llocate memory for queues"); 7168  çžed ; 7171 ià(! `bt_Ë_»gi¡” ( Ë_deviû_found_hªdËr )) { 7172 `”rÜ ("gatt: bt_le_register failed"); 7173  çžed ; 7176 `baýy (& ad­‹r_addr , addr ); 7178 h®_c = c ; 7180 `c_»gi¡” ( h®_c , HAL_SERVICE_ID_GATT , cmd_hªdËrs , 7181 `G_N_ELEMENTS ( cmd_hªdËrs )); 7183 `»gi¡”_g­_£rviû (); 7184 `»gi¡”_deviû_šfo_£rviû (); 7185 `»gi¡”_g©t_£rviû (); 7187 `šfo ("g©t: LE: % BR/EDR: %s", Ë_io ? "enabled" : "disabled", 7188 b»dr_io ? "enabled" : "disabled"); 7190  Œue ; 7192 çžed : 7194 `bt_·œed_uÄegi¡” ( g©t_·œed_cb ); 7195 `bt_uÅaœed_uÄegi¡” ( g©t_uÅaœed_cb ); 7197 `queue_de¡roy ( g©t_­ps , NULL ); 7198 g©t_­ps = NULL ; 7200 `queue_de¡roy ( g©t_deviûs , NULL ); 7201 g©t_deviûs = NULL ; 7203 `queue_de¡roy ( ­p_cÚÃùiÚs , NULL ); 7204 ­p_cÚÃùiÚs = NULL ; 7206 `queue_de¡roy ( li¡’_­ps , NULL ); 7207 li¡’_­ps = NULL ; 7209 `queue_de¡roy ( £rviûs_sdp , NULL ); 7210 £rviûs_sdp = NULL ; 7212 `g©t_db_uÄef ( g©t_db ); 7213 g©t_db = NULL ; 7215 `bt_üy±o_uÄef ( üy±o ); 7216 üy±o = NULL ; 7218 ià( Ë_io ) { 7219 `g_io_chªÃl_uÄef ( Ë_io ); 7220 Ë_io = NULL ; 7223 ià( b»dr_io ) { 7224 `g_io_chªÃl_uÄef ( b»dr_io ); 7225 b»dr_io = NULL ; 7228  çl£ ; 7229 } } 7231  $bt_g©t_uÄegi¡” () 7233 `DBG (""); 7235 `c_uÄegi¡” ( h®_c , HAL_SERVICE_ID_GATT ); 7236 h®_c = NULL ; 7238 `queue_de¡roy ( g©t_­ps , de¡roy_g©t_­p ); 7239 g©t_­ps = NULL ; 7241 `queue_de¡roy ( ­p_cÚÃùiÚs , de¡roy_cÚÃùiÚ ); 7242 ­p_cÚÃùiÚs = NULL ; 7244 `queue_de¡roy ( g©t_deviûs , de¡roy_deviû ); 7245 g©t_deviûs = NULL ; 7247 `queue_de¡roy ( £rviûs_sdp , ä“_£rviû_sdp_»cÜd ); 7248 £rviûs_sdp = NULL ; 7250 `queue_de¡roy ( li¡’_­ps , NULL ); 7251 li¡’_­ps = NULL ; 7253 `g©t_db_uÄef ( g©t_db ); 7254 g©t_db = NULL ; 7256 ià( Ë_io ) { 7257 `g_io_chªÃl_uÄef ( Ë_io ); 7258 Ë_io = NULL ; 7261 ià( b»dr_io ) { 7262 `g_io_chªÃl_uÄef ( b»dr_io ); 7263 b»dr_io = NULL ; 7266 ià( g­_sdp_hªdË ) { 7267 `bt_ad­‹r_»move_»cÜd ( g­_sdp_hªdË ); 7268 g­_sdp_hªdË = 0; 7271 ià( g©t_sdp_hªdË ) { 7272 `bt_ad­‹r_»move_»cÜd ( g©t_sdp_hªdË ); 7273 g©t_sdp_hªdË = 0; 7276 ià( dis_sdp_hªdË ) { 7277 `bt_ad­‹r_»move_»cÜd ( dis_sdp_hªdË ); 7278 dis_sdp_hªdË = 0; 7281 `bt_üy±o_uÄef ( üy±o ); 7282 üy±o = NULL ; 7284 `bt_Ë_uÄegi¡” (); 7285 `bt_uÅaœed_uÄegi¡” ( g©t_uÅaœed_cb ); 7286 } } 7288  $bt_g©t_»gi¡”_­p (cÚ¡ * uuid , g©t_ty³_t ty³ , 7289 g©t_cÚn_cb_t func ) 7291  g©t_­p * ­p ; 7292 bt_uuid_t u , u128 ; 7294 `bt_¡ršg_to_uuid (& u , uuid ); 7295 `bt_uuid_to_uuid128 (& u , & u128 ); 7296 ­p = `»gi¡”_­p ((*è& u128 . v®ue .u128, ty³ ); 7297 ià(! ­p ) 7300 ­p -> func = func; 7302  ­p -> id ; 7303 } } 7305 boÞ $bt_g©t_uÄegi¡”_­p ( id ) 7307 ušt8_t ¡©us ; 7309 ¡©us = `uÄegi¡”_­p ( id ); 7311  ¡©us !ð HAL_STATUS_FAILED ; 7312 } } 7314 boÞ $bt_g©t_cÚÃù_­p ( id , cÚ¡ bdaddr_t * addr ) 7316 ušt8_t ¡©us ; 7318 ¡©us = `hªdË_cÚÃù ( id , addr ); 7320  ¡©us !ð HAL_STATUS_FAILED ; 7321 } } 7323 boÞ $bt_g©t_discÚÃù_­p ( id , cÚ¡ bdaddr_t * addr ) 7325  ­p_cÚÃùiÚ m©ch ; 7326  ­p_cÚÃùiÚ * cÚn ; 7327  g©t_deviû * deviû ; 7328  g©t_­p * ­p ; 7330 ­p = `fšd_­p_by_id ( id ); 7331 ià(! ­p ) 7332  çl£ ; 7334 deviû = `fšd_deviû_by_addr ( addr ); 7335 ià(! deviû ) 7336  çl£ ; 7338 m©ch . deviû = device; 7339 m©ch . ­p =‡pp; 7341 cÚn = `queue_fšd ( ­p_cÚÃùiÚs , m©ch_cÚÃùiÚ_by_deviû_ªd_­p , 7342 & m©ch ); 7343 ià(! cÚn ) 7344  çl£ ; 7346 `Œigg”_discÚÃùiÚ ( cÚn ); 7348  Œue ; 7349 } } 7351 boÞ $bt_g©t_add_autocÚÃù ( id , cÚ¡ bdaddr_t * addr ) 7353  g©t_deviû * dev ; 7354  g©t_­p * ­p ; 7356 `DBG (""); 7358 ­p = `fšd_­p_by_id ( id ); 7359 ià(! ­p ) { 7360 `”rÜ ("g©t: Aµ ID=%d‚Ù found", id ); 7361  çl£ ; 7364 dev = `fšd_deviû_by_addr ( addr ); 7365 ià(! dev ) { 7366 `”rÜ ("gatt: Device‚ot found"); 7367  çl£ ; 7371 ià( `queue_i£m±y ( dev -> autocÚÃù_­ps )) 7372 `deviû_»f ( dev ); 7374 ià(! `queue_fšd ( dev -> autocÚÃù_­ps , m©ch_by_v®ue , 7375 `INT_TO_PTR ( id ))) 7376  `queue_push_h—d ( dev -> autocÚÃù_­ps , `INT_TO_PTR ( id )); 7378  Œue ; 7379 } } 7381  $bt_g©t_»move_autocÚÃù ( id , cÚ¡ bdaddr_t * addr ) 7383  g©t_deviû * dev ; 7385 `DBG (""); 7387 dev = `fšd_deviû_by_addr ( addr ); 7388 ià(! dev ) { 7389 `”rÜ ("gatt: Device‚ot found"); 7393 `queue_»move ( dev -> autocÚÃù_­ps , `INT_TO_PTR ( id )); 7395 ià( `queue_i£m±y ( dev -> autocÚÃù_­ps )) 7396 `»move_autocÚÃù_deviû ( dev ); 7397 } } @android/gatt.h 24 boÞ bt_g©t_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr ); 25  bt_g©t_uÄegi¡” (); 29 mGATT_CLIENT , 30 mGATT_SERVER , 31 } tg©t_ty³_t ; 33 (* tg©t_cÚn_cb_t )(cÚ¡ tbdaddr_t * taddr ,  t”r , * t©Œib ); 35  `bt_g©t_»gi¡”_­p (cÚ¡ * uuid , g©t_ty³_t ty³ , 36 g©t_cÚn_cb_t func ); 37 boÞ `bt_g©t_uÄegi¡”_­p ( id ); 39 boÞ `bt_g©t_cÚÃù_­p ( id , cÚ¡ bdaddr_t * addr ); 40 boÞ `bt_g©t_discÚÃù_­p ( id , cÚ¡ bdaddr_t * addr ); 41 boÞ `bt_g©t_£t_£cur™y (cÚ¡ bdaddr_t * bdaddr ,  £c_Ëv– ); 42 boÞ `bt_g©t_add_autocÚÃù ( id , cÚ¡ bdaddr_t * addr ); 43  `bt_g©t_»move_autocÚÃù ( id , cÚ¡ bdaddr_t * addr ); @android/hal-a2dp-sink.c 18  ~<¡dboÞ.h > 19  ~<¡ddef.h > 20  ~<¡ršg.h > 22  ~"h®-log.h " 23  ~"h®.h " 24  ~"h®-msg.h " 25  ~"h®-c.h " 27 cÚ¡ bv_ÿÎbacks_t * gcbs = NULL ; 29  boÞ $š‹rçû_»ady () 31  cbs !ð NULL ; 32 } } 34  $hªdË_cÚn_¡©e (* buf , ušt16_t Ën ,  fd ) 36  h®_ev_a2dp_cÚn_¡©e * ev = buf ; 38 ià( cbs -> cÚÃùiÚ_¡©e_cb ) 39 cbs -> `cÚÃùiÚ_¡©e_cb ( ev -> ¡©e , 40 ( bt_bdaddr_t *è( ev -> bdaddr )); 41 } } 43  $hªdË_audio_¡©e (* buf , ušt16_t Ën ,  fd ) 45  h®_ev_a2dp_audio_¡©e * ev = buf ; 47 ià( cbs -> audio_¡©e_cb ) 48 cbs -> `audio_¡©e_cb ( ev -> ¡©e , ( bt_bdaddr_t *)Óv-> bdaddr )); 49 } } 51  $hªdË_audio_cÚfig (* buf , ušt16_t Ën ,  fd ) 53  h®_ev_a2dp_audio_cÚfig * ev = buf ; 55 ià( cbs -> audio_cÚfig_cb ) 56 cbs -> `audio_cÚfig_cb (( bt_bdaddr_t *)( ev -> bdaddr ), 57 ev -> §m¶e_¿‹ ,ƒv-> chªÃl_couÁ ); 58 } } 64 cÚ¡  h®_c_hªdËr gev_hªdËrs [] = { 66 { hªdË_cÚn_¡©e , çl£ , ( h®_ev_a2dp_cÚn_¡©e ) }, 68 { hªdË_audio_¡©e , çl£ , ( h®_ev_a2dp_audio_¡©e ) }, 70 { hªdË_audio_cÚfig , çl£ , ( h®_ev_a2dp_audio_cÚfig ) }, 73  bt_¡©us_t $a2dp_cÚÃù ( bt_bdaddr_t * bd_addr ) 75  h®_cmd_a2dp_cÚÃù cmd ; 77 `DBG (""); 79 ià(! `š‹rçû_»ady ()) 80  BT_STATUS_NOT_READY ; 82 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 84  `h®_c_cmd ( HAL_SERVICE_ID_A2DP_SINK , HAL_OP_A2DP_CONNECT , 85 ( cmd ), &cmd, NULL , NULL, NULL); 86 } } 88  bt_¡©us_t $discÚÃù ( bt_bdaddr_t * bd_addr ) 90  h®_cmd_a2dp_discÚÃù cmd ; 92 `DBG (""); 94 ià(! `š‹rçû_»ady ()) 95  BT_STATUS_NOT_READY ; 97 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 99  `h®_c_cmd ( HAL_SERVICE_ID_A2DP_SINK , HAL_OP_A2DP_DISCONNECT , 100 ( cmd ), &cmd, NULL , NULL, NULL); 101 } } 103  bt_¡©us_t $š™ ( bv_ÿÎbacks_t * ÿÎbacks ) 105  h®_cmd_»gi¡”_moduË cmd ; 106  »t ; 108 `DBG (""); 110 ià( `š‹rçû_»ady ()) 111  BT_STATUS_DONE ; 113 cbs = ÿÎbacks ; 115 `h®_c_»gi¡” ( HAL_SERVICE_ID_A2DP_SINK , ev_hªdËrs , 116 ( ev_hªdËrs )/(ev_handlers[0])); 118 cmd . £rviû_id = HAL_SERVICE_ID_A2DP_SINK ; 119 cmd . mode = HAL_MODE_DEFAULT ; 120 cmd . max_þ›Ás = 1; 122 »t = `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_REGISTER_MODULE , 123 ( cmd ), &cmd, NULL , NULL, NULL); 125 ià( »t !ð BT_STATUS_SUCCESS ) { 126 cbs = NULL ; 127 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_A2DP_SINK ); 130  »t ; 131 } } 133  $þ—nup () 135  h®_cmd_uÄegi¡”_moduË cmd ; 137 `DBG (""); 139 ià(! `š‹rçû_»ady ()) 142 cmd . £rviû_id = HAL_SERVICE_ID_A2DP_SINK ; 144 `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_UNREGISTER_MODULE , 145 ( cmd ), &cmd, NULL , NULL, NULL); 147 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_A2DP_SINK ); 149 cbs = NULL ; 150 } } 152  bv_š‹rçû_t giçû = { 153 . size = ( içû ), 154 . gš™ = š™ , 155 . gcÚÃù = a2dp_cÚÃù , 156 . gdiscÚÃù = discÚÃù , 157 . gþ—nup = þ—nup 160 bv_š‹rçû_t * $bt_g‘_a2dp_sšk_š‹rçû () 162  & içû ; 163 } } @android/hal-a2dp.c 18  ~<¡dboÞ.h > 19  ~<¡ddef.h > 20  ~<¡ršg.h > 22  ~"h®-log.h " 23  ~"h®.h " 24  ~"h®-msg.h " 25  ~"h®-c.h " 27 cÚ¡ bv_ÿÎbacks_t * gcbs = NULL ; 29  boÞ $š‹rçû_»ady () 31  cbs !ð NULL ; 32 } } 34  $hªdË_cÚn_¡©e (* buf , ušt16_t Ën ,  fd ) 36  h®_ev_a2dp_cÚn_¡©e * ev = buf ; 38 ià( cbs -> cÚÃùiÚ_¡©e_cb ) 39 cbs -> `cÚÃùiÚ_¡©e_cb ( ev -> ¡©e , 40 ( bt_bdaddr_t *è( ev -> bdaddr )); 41 } } 43  $hªdË_audio_¡©e (* buf , ušt16_t Ën ,  fd ) 45  h®_ev_a2dp_audio_¡©e * ev = buf ; 47 ià( cbs -> audio_¡©e_cb ) 48 cbs -> `audio_¡©e_cb ( ev -> ¡©e , ( bt_bdaddr_t *)Óv-> bdaddr )); 49 } } 51  $hªdË_audio_cÚfig (* buf , ušt16_t Ën ,  fd ) 53 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 54  h®_ev_a2dp_audio_cÚfig * ev = buf ; 56 ià( cbs -> audio_cÚfig_cb ) 57 cbs -> `audio_cÚfig_cb (( bt_bdaddr_t *)( ev -> bdaddr ), 58 ev -> §m¶e_¿‹ ,ƒv-> chªÃl_couÁ ); 60 } } 66 cÚ¡  h®_c_hªdËr gev_hªdËrs [] = { 68 { hªdË_cÚn_¡©e , çl£ , ( h®_ev_a2dp_cÚn_¡©e ) }, 70 { hªdË_audio_¡©e , çl£ , ( h®_ev_a2dp_audio_¡©e ) }, 72 { hªdË_audio_cÚfig , çl£ , ( h®_ev_a2dp_audio_cÚfig ) }, 75  bt_¡©us_t $a2dp_cÚÃù ( bt_bdaddr_t * bd_addr ) 77  h®_cmd_a2dp_cÚÃù cmd ; 79 `DBG (""); 81 ià(! `š‹rçû_»ady ()) 82  BT_STATUS_NOT_READY ; 84 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 86  `h®_c_cmd ( HAL_SERVICE_ID_A2DP , HAL_OP_A2DP_CONNECT , 87 ( cmd ), &cmd, NULL , NULL, NULL); 88 } } 90  bt_¡©us_t $discÚÃù ( bt_bdaddr_t * bd_addr ) 92  h®_cmd_a2dp_discÚÃù cmd ; 94 `DBG (""); 96 ià(! `š‹rçû_»ady ()) 97  BT_STATUS_NOT_READY ; 99 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 101  `h®_c_cmd ( HAL_SERVICE_ID_A2DP , HAL_OP_A2DP_DISCONNECT , 102 ( cmd ), &cmd, NULL , NULL, NULL); 103 } } 105  bt_¡©us_t $š™ ( bv_ÿÎbacks_t * ÿÎbacks ) 107  h®_cmd_»gi¡”_moduË cmd ; 108  »t ; 110 `DBG (""); 112 ià( `š‹rçû_»ady ()) 113  BT_STATUS_DONE ; 115 cbs = ÿÎbacks ; 117 `h®_c_»gi¡” ( HAL_SERVICE_ID_A2DP , ev_hªdËrs , 118 ( ev_hªdËrs )/(ev_handlers[0])); 120 cmd . £rviû_id = HAL_SERVICE_ID_A2DP ; 121 cmd . mode = HAL_MODE_DEFAULT ; 122 cmd . max_þ›Ás = 1; 124 »t = `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_REGISTER_MODULE , 125 ( cmd ), &cmd, NULL , NULL, NULL); 127 ià( »t !ð BT_STATUS_SUCCESS ) { 128 cbs = NULL ; 129 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_A2DP ); 132  »t ; 133 } } 135  $þ—nup () 137  h®_cmd_uÄegi¡”_moduË cmd ; 139 `DBG (""); 141 ià(! `š‹rçû_»ady ()) 144 cmd . £rviû_id = HAL_SERVICE_ID_A2DP ; 146 `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_UNREGISTER_MODULE , 147 ( cmd ), &cmd, NULL , NULL, NULL); 149 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_A2DP ); 151 cbs = NULL ; 152 } } 154  bv_š‹rçû_t giçû = { 155 . size = ( içû ), 156 . gš™ = š™ , 157 . gcÚÃù = a2dp_cÚÃù , 158 . gdiscÚÃù = discÚÃù , 159 . gþ—nup = þ—nup 162 bv_š‹rçû_t * $bt_g‘_a2dp_š‹rçû () 164  & içû ; 165 } } @android/hal-audio-aptx.c 18  ~<¡dšt.h > 19  ~<¡dboÞ.h > 20  ~<¡ršg.h > 21  ~ 22  ~ 24  ~"audio-msg.h " 25  ~"h®-audio.h " 26  ~"h®-log.h " 27  ~"´ofžes/audio/a2dp-codecs.h " 29  #APTX_SO_NAME "libbt-­tx.so" ) 31  s­tx_d©a { 32 a2dp_­tx_t m­tx ; 34 * m’c ; 37 cÚ¡ a2dp_­tx_t g­tx_´e£ts [] = { 39 . šfo = { 40 . v’dÜ_id = APTX_VENDOR_ID , 41 . gcodec_id = APTX_CODEC_ID , 43 . gäequ’cy = APTX_SAMPLING_FREQ_44100 | 44 APTX_SAMPLING_FREQ_48000 , 45 . gchªÃl_mode = APTX_CHANNEL_MODE_STEREO , 48 . gšfo = { 49 . v’dÜ_id = APTX_VENDOR_ID , 50 . gcodec_id = APTX_CODEC_ID , 52 . gäequ’cy = APTX_SAMPLING_FREQ_48000 , 53 . gchªÃl_mode = APTX_CHANNEL_MODE_STEREO , 56 . gšfo = { 57 . v’dÜ_id = APTX_VENDOR_ID , 58 . gcodec_id = APTX_CODEC_ID , 60 . gäequ’cy = APTX_SAMPLING_FREQ_44100 , 61 . gchªÃl_mode = APTX_CHANNEL_MODE_STEREO , 65 * g­tx_hªdË ; 66  g­tx_b‹ncsize ; 67 (* ­tx_š™ )(*, ); 68 (* ­tx_’code )(*, *, *, *); 70  boÞ $­tx_lßd () 72 cÚ¡ * (* ­tx_v”siÚ )(); 73 cÚ¡ * (* ­tx_bužd )(); 74 (* ­tx_sizeoãnc )(); 76 ­tx_hªdË = `dlÝ’ ( APTX_SO_NAME , RTLD_LAZY ); 77 ià(! ­tx_hªdË ) { 78 `”rÜ ("APTX: fažedØÝ’†ib¿ry % (%s)", APTX_SO_NAME , 79 `dË¼Ü ()); 80  çl£ ; 83 ­tx_v”siÚ = `dlsym ( ­tx_hªdË , "aptxbtenc_version"); 84 ­tx_bužd = `dlsym ( ­tx_hªdË , "aptxbtenc_build"); 86 ià( ­tx_v”siÚ && ­tx_bužd ) 87 `šfo ("APTX: usšg†ib¿ry v”siÚ % bužd %s", `­tx_v”siÚ (), 88 `­tx_bužd ()); 90 `w¬n ("APTX: cannot„etrieve†ibrary version"); 92 ­tx_sizeoãnc = `dlsym ( ­tx_hªdË , "SizeofAptxbtenc"); 93 ­tx_š™ = `dlsym ( ­tx_hªdË , "aptxbtenc_init"); 94 ­tx_’code = `dlsym ( ­tx_hªdË , "aptxbtenc_encodestereo"); 95 ià(! ­tx_sizeoãnc || ! ­tx_š™ || ! ­tx_’code ) { 96 `”rÜ ("APTX: failed initialize†ibrary"); 97 `dlþo£ ( ­tx_hªdË ); 98 ­tx_hªdË = NULL ; 99  çl£ ; 101 ­tx_b‹ncsize = `­tx_sizeoãnc (); 103 `šfo ("APTX: codeølib¿ry in™Ÿlized (size=%d)", ­tx_b‹ncsize ); 105  Œue ; 106 } } 108  $­tx_uÆßd () 110 ià(! ­tx_hªdË ) 113 `dlþo£ ( ­tx_hªdË ); 114 ­tx_hªdË = NULL ; 115 } } 117  $­tx_g‘_´e£ts ( audio_´e£t * ´e£t , size_t * Ën ) 119  i ; 120  couÁ ; 121 size_t Ãw_Ën = 0; 122 ušt8_t * ±r = (ušt8_ˆ*è ´e£t ; 123 size_t ´e£t_size = (* ´e£t è+ ( a2dp_­tx_t ); 125 `DBG (""); 127 couÁ = ( ­tx_´e£ts ) / (aptx_presets[0]); 129  i = 0; i < couÁ ; i++) { 130 ´e£t = ( audio_´e£t *è ±r ; 132 ià( Ãw_Ën + ´e£t_size > * Ën ) 135 ´e£t -> Ën = ( a2dp_­tx_t ); 136 `memýy ( ´e£t -> d©a , & ­tx_´e£ts [ i ],…»£t-> Ën ); 138 Ãw_Ën +ð ´e£t_size ; 139 ±r +ð ´e£t_size ; 142 * Ën = Ãw_Ën ; 144  i ; 145 } } 147  boÞ $­tx_codec_š™ ( audio_´e£t * ´e£t , ušt16_t ·ylßd_Ën , 148 ** codec_d©a ) 150  ­tx_d©a *aptx_data; 152 `DBG (""); 154 ià( ´e£t -> Ën !ð( a2dp_­tx_t )) { 155 `”rÜ ("APTX:…reset size mismatch"); 156  çl£ ; 159 ­tx_d©a = `m®loc ((*aptx_data)); 160 ià(! ­tx_d©a ) 161  çl£ ; 163 `mem£t ( ­tx_d©a , 0, (*aptx_data)); 164 `memýy (& ­tx_d©a -> ­tx , ´e£t -> d©a ,…»£t-> Ën ); 166 ­tx_d©a -> ’c = `ÿÎoc (1, ­tx_b‹ncsize ); 167 ià(! ­tx_d©a -> ’c ) { 168 `”rÜ ("APTX: failedo createƒncoder"); 169 `ä“ ( ­tx_d©a ); 170  çl£ ; 174 `­tx_š™ ( ­tx_d©a -> ’c , 1); 176 * codec_d©a = ­tx_d©a ; 178  Œue ; 179 } } 181  boÞ $­tx_þ—nup (* codec_d©a ) 183  ­tx_d©a *­tx_d©¨ð(­tx_d©¨*è codec_d©a ; 185 `ä“ ( ­tx_d©a -> ’c ); 186 `ä“ ( codec_d©a ); 188  Œue ; 189 } } 191  boÞ $­tx_g‘_cÚfig (* codec_d©a ,  audio_šput_cÚfig * cÚfig ) 193  ­tx_d©a *­tx_d©¨ð(­tx_d©¨*è codec_d©a ; 195 cÚfig -> ¿‹ = ­tx_d©a -> ­tx . äequ’cy & APTX_SAMPLING_FREQ_48000 ? 197 cÚfig -> chªÃls = AUDIO_CHANNEL_OUT_STEREO ; 198 cÚfig -> fÜm© = AUDIO_FORMAT_PCM_16_BIT ; 200  Œue ; 201 } } 203  size_t $­tx_g‘_bufãr_size (* codec_d©a ) 207 } } 209  size_t $­tx_g‘_medŸ·ck‘_du¿tiÚ (* codec_d©a ) 213 } } 215  ssize_t $­tx_’code_medŸ·ck‘ (* codec_d©a , cÚ¡ ušt8_t * bufãr , 216 size_t Ën ,  medŸ_·ck‘ * mp , 217 size_t mp_d©a_Ën , size_ˆ* wr™‹n ) 219  ­tx_d©a *­tx_d©¨ð(­tx_d©¨*è codec_d©a ; 220 cÚ¡ št16_t * ±r = (cÚ¡ *è bufãr ; 221 size_t by‹s_š = 0; 222 size_t by‹s_out = 0; 224 ( Ën - by‹s_š è>ð16 && ( mp_d©a_Ën - by‹s_out ) >= 4) { 225  pcm_l [4], pcm_r [4]; 226  i ; 228  i = 0; i < 4; i++) { 229 pcm_l [ i ] = ±r [0]; 230 pcm_r [ i ] = ±r [1]; 231 ±r += 2; 234 `­tx_’code ( ­tx_d©a -> ’c , pcm_l , pcm_r , & mp -> d©a [ by‹s_out ]); 236 by‹s_š += 16; 237 by‹s_out += 4; 240 * wr™‹n = by‹s_out ; 242  by‹s_š ; 243 } } 245  boÞ $­tx_upd©e_qos (* codec_d©a , ušt8_t Ý ) 252  çl£ ; 253 } } 255 cÚ¡  audio_codec gcodec = { 256 . ty³ = A2DP_CODEC_VENDOR , 257 . gu£_¹p = çl£ , 259 . glßd = ­tx_lßd , 260 . guÆßd = ­tx_uÆßd , 262 . gg‘_´e£ts = ­tx_g‘_´e£ts , 264 . gš™ = ­tx_codec_š™ , 265 . gþ—nup = ­tx_þ—nup , 266 . gg‘_cÚfig = ­tx_g‘_cÚfig , 267 . gg‘_bufãr_size = ­tx_g‘_bufãr_size , 268 . gg‘_medŸ·ck‘_du¿tiÚ = ­tx_g‘_medŸ·ck‘_du¿tiÚ , 269 . g’code_medŸ·ck‘ = ­tx_’code_medŸ·ck‘ , 270 . gupd©e_qos = ­tx_upd©e_qos , 273 cÚ¡  audio_codec * $codec_­tx () 275  & codec ; 276 } } @android/hal-audio-sbc.c 18  ~<¡dboÞ.h > 19  ~<¡ršg.h > 20  ~ 21  ~<¡dlib.h > 23  ~ 24  ~"audio-msg.h " 25  ~"h®-audio.h " 26  ~"h®-log.h " 27  ~"../´ofžes/audio/a2dp-codecs.h " 29  #MAX_FRAMES_IN_PAYLOAD 15 ) 31  #SBC_QUALITY_MIN_BITPOOL 33 ) 32  #SBC_QUALITY_STEP 5 ) 35 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 37  s¹p_·ylßd { 38  mäame_couÁ :4; 39  mrç0 :1; 40  mis_Ï¡_äagm’t :1; 41  mis_fœ¡_äagm’t :1; 42  mis_äagm’‹d :1; 43 } __©Œibu‹__ (( ·cked )); 45 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 47  s¹p_·ylßd { 48  mis_äagm’‹d :1; 49  mis_fœ¡_äagm’t :1; 50  mis_Ï¡_äagm’t :1; 51  mrç0 :1; 52  mäame_couÁ :4; 53 } __©Œibu‹__ (( ·cked )); 59  smedŸ_·ck‘_sbc { 60  medŸ_·ck‘_¹p mhdr ; 61  ¹p_·ylßd m·ylßd ; 62 ušt8_t md©a [0]; 65  ssbc_d©a { 66 a2dp_sbc_t msbc ; 68 sbc_t m’c ; 70 ušt16_t m·ylßd_Ën ; 72 size_t mš_äame_Ën ; 73 size_t mš_buf_size ; 75 size_t mout_äame_Ën ; 77  mäame_du¿tiÚ ; 78  mäames_³r_·ck‘ ; 81 cÚ¡ a2dp_sbc_t gsbc_´e£ts [] = { 83 . äequ’cy = SBC_SAMPLING_FREQ_44100 | SBC_SAMPLING_FREQ_48000 , 84 . gchªÃl_mode = SBC_CHANNEL_MODE_MONO | 85 SBC_CHANNEL_MODE_DUAL_CHANNEL | 86 SBC_CHANNEL_MODE_STEREO | 87 SBC_CHANNEL_MODE_JOINT_STEREO , 88 . gsubbªds = SBC_SUBBANDS_4 | SBC_SUBBANDS_8 , 89 . g®loÿtiÚ_m‘hod = SBC_ALLOCATION_SNR | 90 SBC_ALLOCATION_LOUDNESS , 91 . gblock_Ëngth = SBC_BLOCK_LENGTH_4 | SBC_BLOCK_LENGTH_8 | 92 SBC_BLOCK_LENGTH_12 | SBC_BLOCK_LENGTH_16 , 93 . gmš_b™poÞ = MIN_BITPOOL , 94 . gmax_b™poÞ = MAX_BITPOOL 97 . gäequ’cy = SBC_SAMPLING_FREQ_44100 , 98 . gchªÃl_mode = SBC_CHANNEL_MODE_JOINT_STEREO , 99 . gsubbªds = SBC_SUBBANDS_8 , 100 . g®loÿtiÚ_m‘hod = SBC_ALLOCATION_LOUDNESS , 101 . gblock_Ëngth = SBC_BLOCK_LENGTH_16 , 102 . gmš_b™poÞ = MIN_BITPOOL , 103 . gmax_b™poÞ = MAX_BITPOOL 106 . gäequ’cy = SBC_SAMPLING_FREQ_48000 , 107 . gchªÃl_mode = SBC_CHANNEL_MODE_JOINT_STEREO , 108 . gsubbªds = SBC_SUBBANDS_8 , 109 . g®loÿtiÚ_m‘hod = SBC_ALLOCATION_LOUDNESS , 110 . gblock_Ëngth = SBC_BLOCK_LENGTH_16 , 111 . gmš_b™poÞ = MIN_BITPOOL , 112 . gmax_b™poÞ = MAX_BITPOOL 116  $sbc_g‘_´e£ts ( audio_´e£t * ´e£t , size_t * Ën ) 118  i ; 119  couÁ ; 120 size_t Ãw_Ën = 0; 121 ušt8_t * ±r = (ušt8_ˆ*è ´e£t ; 122 size_t ´e£t_size = (* ´e£t è+ ( a2dp_sbc_t ); 124 couÁ = ( sbc_´e£ts ) / (sbc_presets[0]); 126  i = 0; i < couÁ ; i++) { 127 ´e£t = ( audio_´e£t *è ±r ; 129 ià( Ãw_Ën + ´e£t_size > * Ën ) 132 ´e£t -> Ën = ( a2dp_sbc_t ); 133 `memýy ( ´e£t -> d©a , & sbc_´e£ts [ i ],…»£t-> Ën ); 135 Ãw_Ën +ð ´e£t_size ; 136 ±r +ð ´e£t_size ; 139 * Ën = Ãw_Ën ; 141  i ; 142 } } 144  $sbc_äeq2št ( ušt8_t äeq ) 146  äeq ) { 147  SBC_SAMPLING_FREQ_16000 : 149  SBC_SAMPLING_FREQ_32000 : 151  SBC_SAMPLING_FREQ_44100 : 153  SBC_SAMPLING_FREQ_48000 : 158 } } 160 cÚ¡ * $sbc_mode2¡r ( ušt8_t mode ) 162  mode ) { 163  SBC_CHANNEL_MODE_MONO : 165  SBC_CHANNEL_MODE_DUAL_CHANNEL : 167  SBC_CHANNEL_MODE_STEREO : 169  SBC_CHANNEL_MODE_JOINT_STEREO : 174 } } 176  $sbc_blocks2št ( ušt8_t blocks ) 178  blocks ) { 179  SBC_BLOCK_LENGTH_4 : 181  SBC_BLOCK_LENGTH_8 : 183  SBC_BLOCK_LENGTH_12 : 185  SBC_BLOCK_LENGTH_16 : 190 } } 192  $sbc_subbªds2št ( ušt8_t subbªds ) 194  subbªds ) { 195  SBC_SUBBANDS_4 : 197  SBC_SUBBANDS_8 : 202 } } 204 cÚ¡ * $sbc_®loÿtiÚ2¡r ( ušt8_t ®loÿtiÚ ) 206  ®loÿtiÚ ) { 207  SBC_ALLOCATION_SNR : 209  SBC_ALLOCATION_LOUDNESS : 214 } } 216  $sbc_š™_’cod” ( sbc_d©a *sbc_data) 218 a2dp_sbc_t * š = & sbc_d©a -> sbc ; 219 sbc_t * out = & sbc_d©a -> ’c ; 221 `sbc_š™_a2dp ( out , 0L, š , (*in)); 223 out -> ’dŸn = SBC_LE ; 224 out -> b™poÞ = š -> max_b™poÞ ; 226 `DBG ("frequency=%d channel_mode=%s block_length=%d subbands=%d‡llocation=%s bitpool=%d-%d", 227 `sbc_äeq2št ( š -> äequ’cy ), 228 `sbc_mode2¡r ( š -> chªÃl_mode ), 229 `sbc_blocks2št ( š -> block_Ëngth ), 230 `sbc_subbªds2št ( š -> subbªds ), 231 `sbc_®loÿtiÚ2¡r ( š -> ®loÿtiÚ_m‘hod ), 232 š -> mš_b™poÞ , in-> max_b™poÞ ); 233 } } 235  $sbc_codec_ÿlcuÏ‹ ( sbc_d©a *sbc_data) 237 size_t š_äame_Ën ; 238 size_t out_äame_Ën ; 239 size_t num_äames ; 241 š_äame_Ën = `sbc_g‘_codesize (& sbc_d©a -> ’c ); 242 out_äame_Ën = `sbc_g‘_äame_Ëngth (& sbc_d©a -> ’c ); 243 num_äames = sbc_d©a -> ·ylßd_Ën / out_äame_Ën ; 245 ià( num_äames > MAX_FRAMES_IN_PAYLOAD ) 246 num_äames = MAX_FRAMES_IN_PAYLOAD ; 248 sbc_d©a -> š_äame_Ën = in_frame_len; 249 sbc_d©a -> š_buf_size = num_äames * š_äame_Ën ; 251 sbc_d©a -> out_äame_Ën = out_frame_len; 253 sbc_d©a -> äame_du¿tiÚ = `sbc_g‘_äame_du¿tiÚ (&sbc_d©a-> ’c ); 254 sbc_d©a -> äames_³r_·ck‘ = num_äames ; 256 `DBG ("in_frame_len=%zu out_frame_len=%zu frames_per_packet=%zu", 257 š_äame_Ën , out_äame_Ën , num_äames ); 258 } } 260  boÞ $sbc_codec_š™ ( audio_´e£t * ´e£t , ušt16_t ·ylßd_Ën , 261 ** codec_d©a ) 263  sbc_d©a *sbc_data; 265 ià( ´e£t -> Ën !ð( a2dp_sbc_t )) { 266 `”rÜ ("SBC:…reset size mismatch"); 267  çl£ ; 270 sbc_d©a = `ÿÎoc ((sbc_data), 1); 271 ià(! sbc_d©a ) 272  çl£ ; 274 `memýy (& sbc_d©a -> sbc , ´e£t -> d©a ,…»£t-> Ën ); 276 `sbc_š™_’cod” ( sbc_d©a ); 278 sbc_d©a -> ·ylßd_Ën =…ayload_len; 280 `sbc_codec_ÿlcuÏ‹ ( sbc_d©a ); 282 * codec_d©a = sbc_d©a ; 284  Œue ; 285 } } 287  boÞ $sbc_þ—nup (* codec_d©a ) 289  sbc_d©a *sbc_d©¨ð(sbc_d©¨*è codec_d©a ; 291 `sbc_fšish (& sbc_d©a -> ’c ); 292 `ä“ ( codec_d©a ); 294  Œue ; 295 } } 297  boÞ $sbc_g‘_cÚfig (* codec_d©a ,  audio_šput_cÚfig * cÚfig ) 299  sbc_d©a *sbc_d©¨ð(sbc_d©¨*è codec_d©a ; 301  sbc_d©a -> sbc . äequ’cy ) { 302  SBC_SAMPLING_FREQ_16000 : 303 cÚfig -> ¿‹ = 16000; 305  SBC_SAMPLING_FREQ_32000 : 306 cÚfig -> ¿‹ = 32000; 308  SBC_SAMPLING_FREQ_44100 : 309 cÚfig -> ¿‹ = 44100; 311  SBC_SAMPLING_FREQ_48000 : 312 cÚfig -> ¿‹ = 48000; 315  çl£ ; 317 cÚfig -> chªÃls = sbc_d©a -> sbc . chªÃl_mode =ð SBC_CHANNEL_MODE_MONO ? 318 AUDIO_CHANNEL_OUT_MONO : 319 AUDIO_CHANNEL_OUT_STEREO ; 320 cÚfig -> fÜm© = AUDIO_FORMAT_PCM_16_BIT ; 322  Œue ; 323 } } 325  size_t $sbc_g‘_bufãr_size (* codec_d©a ) 327  sbc_d©a *sbc_d©¨ð(sbc_d©¨*è codec_d©a ; 329  sbc_d©a -> š_buf_size ; 330 } } 332  size_t $sbc_g‘_medŸ·ck‘_du¿tiÚ (* codec_d©a ) 334  sbc_d©a *sbc_d©¨ð(sbc_d©¨*è codec_d©a ; 336  sbc_d©a -> äame_du¿tiÚ * sbc_d©a-> äames_³r_·ck‘ ; 337 } } 339  ssize_t $sbc_’code_medŸ·ck‘ (* codec_d©a , cÚ¡ ušt8_t * bufãr , 340 size_t Ën ,  medŸ_·ck‘ * mp , 341 size_t mp_d©a_Ën , size_ˆ* wr™‹n ) 343  sbc_d©a *sbc_d©¨ð(sbc_d©¨*è codec_d©a ; 344  medŸ_·ck‘_sbc * mp_sbc = (medŸ_·ck‘_sbø*è mp ; 345 size_t cÚsumed = 0; 346 size_t ’coded = 0; 347 ušt8_t äame_couÁ = 0; 349 mp_d©a_Ën -ð( mp_sbc -> ·ylßd ); 351  Ën - cÚsumed >ð sbc_d©a -> š_äame_Ën && 352 mp_d©a_Ën - ’coded >ð sbc_d©a -> out_äame_Ën && 353 äame_couÁ < sbc_d©a -> äames_³r_·ck‘ ) { 354 ssize_t »ad ; 355 ssize_t wr™‹n = 0; 357 »ad = `sbc_’code (& sbc_d©a -> ’c , bufãr + cÚsumed , 358 sbc_d©a -> š_äame_Ën , mp_sbc -> d©a + ’coded , 359 mp_d©a_Ën - ’coded , & wr™‹n ); 361 ià( »ad < 0) { 362 `”rÜ ("SBC: failedoƒncode block‡t frame %d (%zd)", 363 äame_couÁ , »ad ); 367 äame_couÁ ++; 368 cÚsumed +ð »ad ; 369 ’coded +ð wr™‹n ; 372 * wr™‹n = ’coded + ( mp_sbc -> ·ylßd ); 373 mp_sbc -> ·ylßd . äame_couÁ = frame_count; 375  cÚsumed ; 376 } } 378  boÞ $sbc_upd©e_qos (* codec_d©a , ušt8_t Ý ) 380  sbc_d©a *sbc_d©¨ð(sbc_d©¨*è codec_d©a ; 381 ušt8_t cu¼_b™poÞ = sbc_d©a -> ’c . b™poÞ ; 382 ušt8_t Ãw_b™poÞ = cu¼_b™poÞ ; 384  Ý ) { 385  QOS_POLICY_DEFAULT : 386 Ãw_b™poÞ = sbc_d©a -> sbc . max_b™poÞ ; 389  QOS_POLICY_DECREASE : 390 ià( cu¼_b™poÞ > SBC_QUALITY_MIN_BITPOOL ) { 391 Ãw_b™poÞ = cu¼_b™poÞ - SBC_QUALITY_STEP ; 392 ià( Ãw_b™poÞ < SBC_QUALITY_MIN_BITPOOL ) 393 Ãw_b™poÞ = SBC_QUALITY_MIN_BITPOOL ; 398 ià( Ãw_b™poÞ =ð cu¼_b™poÞ ) 399  çl£ ; 401 sbc_d©a -> ’c . b™poÞ = Ãw_b™poÞ ; 403 `sbc_codec_ÿlcuÏ‹ ( sbc_d©a ); 405 `šfo ("SBC: b™poÞ chªged: %d -> %d", cu¼_b™poÞ , Ãw_b™poÞ ); 407  Œue ; 408 } } 410 cÚ¡  audio_codec gcodec = { 411 . ty³ = A2DP_CODEC_SBC , 412 . gu£_¹p = Œue , 414 . gg‘_´e£ts = sbc_g‘_´e£ts , 416 . gš™ = sbc_codec_š™ , 417 . gþ—nup = sbc_þ—nup , 418 . gg‘_cÚfig = sbc_g‘_cÚfig , 419 . gg‘_bufãr_size = sbc_g‘_bufãr_size , 420 . gg‘_medŸ·ck‘_du¿tiÚ = sbc_g‘_medŸ·ck‘_du¿tiÚ , 421 . g’code_medŸ·ck‘ = sbc_’code_medŸ·ck‘ , 422 . gupd©e_qos = sbc_upd©e_qos , 425 cÚ¡  audio_codec * $codec_sbc () 427  & codec ; 428 } } @android/hal-audio.c 18  ~<”ºo.h > 19  ~<±h»ad.h > 20  ~ 21  ~<¡dio.h > 22  ~<¡dlib.h > 23  ~<¡ršg.h > 24  ~ 25  ~ 26  ~ 27  ~<¬·/š‘.h > 28  ~ 30  ~ 31  ~ 33  ~"audio-msg.h " 34  ~"c-commÚ.h " 35  ~"h®-log.h " 36  ~"h®-msg.h " 37  ~"h®-audio.h " 38  ~"h®-utžs.h " 39  ~"h®.h " 41  #FIXED_A2DP_PLAYBACK_LATENCY_MS 25 ) 43  #FIXED_BUFFER_SIZE (20 * 512) ) 45  #MAX_DELAY 100000 ) 47 cÚ¡ ušt8_t ga2dp_¤c_uuid [] = { 51  gli¡’_sk = -1; 52  gaudio_sk = -1; 54  ±h»ad_t gc_th = 0; 55  ±h»ad_mu‹x_t gsk_mu‹x = PTHREAD_MUTEX_INITIALIZER ; 57  $time¥ec_add ( time¥ec * ba£ , ušt64_t time_us , 58  time¥ec * »s ) 60 »s -> tv_£c = ba£ ->tv_£ø+ time_us / 1000000; 61 »s -> tv_n£c = ba£ ->tv_n£ø+ ( time_us % 1000000) * 1000; 63 ià( »s -> tv_n£c >= 1000000000) { 64 »s -> tv_£c ++; 65 »s -> tv_n£c -= 1000000000; 67 } } 69  $time¥ec_diff ( time¥ec * a , time¥eø* b , 70  time¥ec * »s ) 72 »s -> tv_£c = a ->tv_£ø- b ->tv_sec; 73 »s -> tv_n£c = a ->tv_n£ø- b ->tv_nsec; 75 ià( »s -> tv_n£c < 0) { 76 »s -> tv_£c --; 77 »s -> tv_n£c += 1000000000; 79 } } 81  ušt64_t $time¥ec_diff_us ( time¥ec * a , time¥eø* b ) 83  time¥ec »s ; 85 `time¥ec_diff ( a , b , & »s ); 87  »s . tv_£c * 1000000Î +„es. tv_n£c / 1000ll; 88 } } 90 #ià defšed ( ANDROID ) 95  þock_Çno¦“p ( þockid_t þock_id ,  æags , 96 cÚ¡  time¥ec * »que¡ , 97  time¥ec * »maš ); 101 cÚ¡ audio_codec_g‘_t mg‘_codec ; 102 boÞ mlßded ; 103 } gaudio_codecs [] = { 104 { . g‘_codec = codec_­tx , . glßded = çl£ }, 105 { . gg‘_codec = codec_sbc , . glßded = çl£ }, 108  #NUM_CODECS (( audio_codecs è/ ×udio_codecs[0])) ) 110  #MAX_AUDIO_ENDPOINTS NUM_CODECS ) 112  saudio_’dpošt { 113 ušt8_t mid ; 114 cÚ¡  audio_codec * mcodec ; 115 * mcodec_d©a ; 116  mfd ; 118  medŸ_·ck‘ * mmp ; 119 size_t mmp_d©a_Ën ; 121 ušt16_t m£q ; 122 ušt32_t m§m¶es ; 123  time¥ec m¡¬t ; 125 boÞ m»sync ; 128  audio_’dpošt gaudio_’dpošts [ MAX_AUDIO_ENDPOINTS ]; 130 ea2dp_¡©e_t { 131 mAUDIO_A2DP_STATE_NONE , 132 mAUDIO_A2DP_STATE_STANDBY , 133 mAUDIO_A2DP_STATE_SUSPENDED , 134 mAUDIO_A2DP_STATE_STARTED 137  sa2dp_¡»am_out { 138  audio_¡»am_out m¡»am ; 140  audio_’dpošt * m• ; 141 a2dp_¡©e_t maudio_¡©e ; 142  audio_šput_cÚfig mcfg ; 144 ušt8_t * mdownmix_buf ; 147  sa2dp_audio_dev { 148  audio_hw_deviû mdev ; 149  a2dp_¡»am_out * mout ; 152  $audio_c_cmd ( ušt8_t £rviû_id , ušt8_ˆ Ýcode , ušt16_t Ën , 153 * ·¿m , size_t * r¥_Ën , * r¥ , * fd ) 155 ssize_t »t ; 156  msghdr msg ; 157  iovec iv [2]; 158  c_hdr cmd ; 159  cmsgbuf [ `CMSG_SPACE (())]; 160  c_¡©us s ; 161 size_t s_Ën = ( s ); 163 `±h»ad_mu‹x_lock (& sk_mu‹x ); 165 ià( audio_sk < 0) { 166 `”rÜ ("audio: Invalid cmd socket…assedo‡udio_ipc_cmd"); 167  çžed ; 170 ià(! r¥ || ! r¥_Ën ) { 171 `mem£t (& s , 0, s_Ën ); 172 r¥_Ën = & s_Ën ; 173 r¥ = & s ; 176 `mem£t (& msg , 0, (msg)); 177 `mem£t (& cmd , 0, (cmd)); 179 cmd . £rviû_id = service_id; 180 cmd . Ýcode = opcode; 181 cmd . Ën =†en; 183 iv [0]. iov_ba£ = & cmd ; 184 iv [0]. iov_Ën = ( cmd ); 186 iv [1]. iov_ba£ = ·¿m ; 187 iv [1]. iov_Ën = Ën ; 189 msg . msg_iov = iv ; 190 msg . msg_iovËn = 2; 192 »t = `£ndmsg ( audio_sk , & msg , 0); 193 ià( »t < 0) { 194 `”rÜ ("audio: S’dšg commªd fažed:%s", `¡»¼Ü ( ”ºo )); 195  çžed ; 199 ià( »t == 0) { 200 `”rÜ ("audio: Command socket closed"); 201  çžed ; 204 `mem£t (& msg , 0, (msg)); 205 `mem£t (& cmd , 0, (cmd)); 207 iv [0]. iov_ba£ = & cmd ; 208 iv [0]. iov_Ën = ( cmd ); 210 iv [1]. iov_ba£ = r¥ ; 211 iv [1]. iov_Ën = * r¥_Ën ; 213 msg . msg_iov = iv ; 214 msg . msg_iovËn = 2; 216 ià( fd ) { 217 `mem£t ( cmsgbuf , 0, (cmsgbuf)); 218 msg . msg_cÚŒÞ = cmsgbuf ; 219 msg . msg_cÚŒÞËn = ( cmsgbuf ); 222 »t = `»cvmsg ( audio_sk , & msg , 0); 223 ià( »t < 0) { 224 `”rÜ ("audio: Receiving command„esponse failed:%s", 225 `¡»¼Ü ( ”ºo )); 226  çžed ; 229 ià( »t < ( ssize_t è( cmd )) { 230 `”rÜ ("audio: ToØsm®È»¥Ú£„eûived(%zd by‹s)", »t ); 231  çžed ; 234 ià( cmd . £rviû_id != service_id) { 235 `”rÜ ("audio: Inv®id s”viû id (%u v %u)", cmd . £rviû_id , 236 £rviû_id ); 237  çžed ; 240 ià( »t !ð( ssize_t è(( cmd è+ cmd. Ën )) { 241 `”rÜ ("audio: M®fÜmed„e¥Ú£„eûived(%zd by‹s)", »t ); 242  çžed ; 245 ià( cmd . Ýcode !ðÝcod&& cmd.Ýcod!ð AUDIO_OP_STATUS ) { 246 `”rÜ ("audio: Invalid opcode„eceived (%u vs %u)", 247 cmd . Ýcode , opcode); 248  çžed ; 251 ià( cmd . Ýcode =ð AUDIO_OP_STATUS ) { 252  c_¡©us * s = r¥ ; 254 ià((* s è!ð cmd . Ën ) { 255 `”rÜ ("audio: Invalid status†ength"); 256  çžed ; 259 ià( s -> code =ð AUDIO_STATUS_SUCCESS ) { 260 `”rÜ ("audio: Invalid success status„esponse"); 261  çžed ; 264 `±h»ad_mu‹x_uÆock (& sk_mu‹x ); 266  s -> code ; 269 `±h»ad_mu‹x_uÆock (& sk_mu‹x ); 272 ià( fd ) { 273  cmsghdr * cmsg ; 275 * fd = -1; 277  cmsg = `CMSG_FIRSTHDR (& msg ); cmsg; 278 cmsg = `CMSG_NXTHDR (& msg , cmsg)) { 279 ià( cmsg -> cmsg_Ëv– =ð SOL_SOCKET 280 && cmsg -> cmsg_ty³ =ð SCM_RIGHTS ) { 281 `memýy ( fd , `CMSG_DATA ( cmsg ), ()); 286 ià(* fd < 0) 287  çžed ; 290 * r¥_Ën = cmd . Ën ; 292  AUDIO_STATUS_SUCCESS ; 294 çžed : 296 `shutdown ( audio_sk , SHUT_RDWR ); 297 `±h»ad_mu‹x_uÆock (& sk_mu‹x ); 299  AUDIO_STATUS_FAILED ; 300 } } 302  $c_Ý’_cmd (cÚ¡  audio_codec * codec ) 304 ušt8_t buf [ BLUEZ_AUDIO_MTU ]; 305  audio_cmd_Ý’ * cmd = (audio_cmd_Ý’ *è buf ; 306  audio_r¥_Ý’ r¥ ; 307 size_t cmd_Ën = ( buf è- (* cmd ); 308 size_t r¥_Ën = ( r¥ ); 309  »suÉ ; 311 `DBG (""); 313 `memýy ( cmd -> uuid , a2dp_¤c_uuid , (a2dp_src_uuid)); 315 cmd -> codec = codec-> ty³ ; 316 cmd -> ´e£ts = codec -> `g‘_´e£ts (cmd-> ´e£t , & cmd_Ën ); 318 cmd_Ën +ð(* cmd ); 320 »suÉ = `audio_c_cmd ( AUDIO_SERVICE_ID , AUDIO_OP_OPEN , cmd_Ën , cmd , 321 & r¥_Ën , & r¥ , NULL ); 323 ià( »suÉ !ð AUDIO_STATUS_SUCCESS ) 326  r¥ . id ; 327 } } 329  $c_þo£_cmd ( ušt8_t ’dpošt_id ) 331  audio_cmd_þo£ cmd ; 332  »suÉ ; 334 `DBG (""); 336 cmd . id = ’dpošt_id ; 338 »suÉ = `audio_c_cmd ( AUDIO_SERVICE_ID , AUDIO_OP_CLOSE , 339 ( cmd ), &cmd, NULL , NULL, NULL); 341  »suÉ ; 342 } } 344  $c_Ý’_¡»am_cmd ( ušt8_t * ’dpošt_id , ušt16_t * mtu , * fd , 345  audio_´e£t ** ÿps ) 347  buf [ BLUEZ_AUDIO_MTU ]; 348  audio_cmd_Ý’_¡»am cmd ; 349  audio_r¥_Ý’_¡»am * r¥ = 350 ( audio_r¥_Ý’_¡»am *è& buf ; 351 size_t r¥_Ën = ( buf ); 352  »suÉ ; 354 `DBG (""); 356 ià(! ÿps ) 357  AUDIO_STATUS_FAILED ; 359 cmd . id = * ’dpošt_id ; 361 »suÉ = `audio_c_cmd ( AUDIO_SERVICE_ID , AUDIO_OP_OPEN_STREAM , 362 ( cmd ), &cmd, & r¥_Ën , r¥ , fd ); 363 ià( »suÉ =ð AUDIO_STATUS_SUCCESS ) { 364 size_t buf_Ën = ( audio_´e£t ) + 365 r¥ -> ´e£t [0]. Ën ; 366 * ’dpošt_id = r¥ -> id ; 367 * mtu = r¥ ->mtu; 368 * ÿps = `m®loc ( buf_Ën ); 369 `memýy (* ÿps , & r¥ -> ´e£t , buf_Ën ); 371 * ÿps = NULL ; 374  »suÉ ; 375 } } 377  $c_þo£_¡»am_cmd ( ušt8_t ’dpošt_id ) 379  audio_cmd_þo£_¡»am cmd ; 380  »suÉ ; 382 `DBG (""); 384 cmd . id = ’dpošt_id ; 386 »suÉ = `audio_c_cmd ( AUDIO_SERVICE_ID , AUDIO_OP_CLOSE_STREAM , 387 ( cmd ), &cmd, NULL , NULL, NULL); 389  »suÉ ; 390 } } 392  $c_»sume_¡»am_cmd ( ušt8_t ’dpošt_id ) 394  audio_cmd_»sume_¡»am cmd ; 395  »suÉ ; 397 `DBG (""); 399 cmd . id = ’dpošt_id ; 401 »suÉ = `audio_c_cmd ( AUDIO_SERVICE_ID , AUDIO_OP_RESUME_STREAM , 402 ( cmd ), &cmd, NULL , NULL, NULL); 404  »suÉ ; 405 } } 407  $c_su¥’d_¡»am_cmd ( ušt8_t ’dpošt_id ) 409  audio_cmd_su¥’d_¡»am cmd ; 410  »suÉ ; 412 `DBG (""); 414 cmd . id = ’dpošt_id ; 416 »suÉ = `audio_c_cmd ( AUDIO_SERVICE_ID , AUDIO_OP_SUSPEND_STREAM , 417 ( cmd ), &cmd, NULL , NULL, NULL); 419  »suÉ ; 420 } } 422  s»gi¡”_¡©e { 423  audio_’dpošt * m• ; 424 boÞ m”rÜ ; 427  $»gi¡”_’dpošt (cÚ¡  audio_codec * codec , 428  »gi¡”_¡©e * ¡©e ) 430  audio_’dpošt * • = ¡©e ->ep; 433 ià( ¡©e -> ”rÜ ) 436 • -> id = `c_Ý’_cmd ( codec ); 438 ià(! • -> id ) { 439 ¡©e -> ”rÜ = Œue ; 440 `”rÜ ("Failedo„egisterƒndpoint"); 444 • -> codec = codec; 445 • -> codec_d©a = NULL ; 446 • -> fd = -1; 448 ¡©e -> • ++; 449 } } 451  $»gi¡”_’dpošts () 453  »gi¡”_¡©e ¡©e ; 454  i ; 456 ¡©e . • = & audio_’dpošts [0]; 457 ¡©e . ”rÜ = çl£ ; 459  i = 0; i < NUM_CODECS ; i++) { 460 cÚ¡  audio_codec * codec = audio_codecs [ i ]. `g‘_codec (); 462 ià(! audio_codecs [ i ]. lßded ) 465 `»gi¡”_’dpošt ( codec , & ¡©e ); 468  ¡©e . ”rÜ ? AUDIO_STATUS_FAILED : AUDIO_STATUS_SUCCESS ; 469 } } 471  $uÄegi¡”_’dpošts () 473 size_t i ; 475  i = 0; i < MAX_AUDIO_ENDPOINTS ; i++) { 476  audio_’dpošt * • = & audio_’dpošts [ i ]; 478 ià( • -> id ) { 479 `c_þo£_cmd ( • -> id ); 480 `mem£t ( • , 0, (*ep)); 483 } } 485  boÞ $Ý’_’dpošt ( audio_’dpošt ** •p , 486  audio_šput_cÚfig * cfg ) 488  audio_´e£t * ´e£t ; 489  audio_’dpošt * • = * •p ; 490 cÚ¡  audio_codec * codec ; 491 ušt16_t mtu ; 492 ušt16_t ·ylßd_Ën ; 493  fd ; 494 size_t i ; 495 ušt8_t •_id = 0; 497 ià( • ) 498 •_id = • -> id ; 500 ià( `c_Ý’_¡»am_cmd (& •_id , & mtu , & fd , & ´e£t ) != 501 AUDIO_STATUS_SUCCESS ) 502  çl£ ; 504 `DBG ("•_id=%d mtu=%u", •_id , mtu ); 506  i = 0; i < MAX_AUDIO_ENDPOINTS ; i++) 507 ià( audio_’dpošts [ i ]. id =ð •_id ) { 508 • = & audio_’dpošts [ i ]; 512 ià(! • ) { 513 `”rÜ ("Cound‚ot find openedƒndpoint"); 514  çžed ; 517 * •p = • ; 519 ·ylßd_Ën = mtu ; 520 ià( • -> codec -> u£_¹p ) 521 ·ylßd_Ën -ð( ¹p_h—d” ); 523 • -> fd = fd; 525 codec = • ->codec; 526 codec -> `š™ ( ´e£t , ·ylßd_Ën , & • -> codec_d©a ); 527 codec -> `g‘_cÚfig ( • -> codec_d©a , cfg ); 529 • -> mp = `ÿÎoc ( mtu , 1); 530 ià(! • -> mp ) 531  çžed ; 533 ià( • -> codec -> u£_¹p ) { 534  medŸ_·ck‘_¹p * mp_¹p = 535 ( medŸ_·ck‘_¹p *è • -> mp ; 536 mp_¹p -> hdr . v = 2; 537 mp_¹p -> hdr . ± = 0x60; 538 mp_¹p -> hdr . s¤c = `htÚl (1); 541 • -> mp_d©a_Ën = ·ylßd_Ën ; 543 `ä“ ( ´e£t ); 545  Œue ; 547 çžed : 548 `þo£ ( fd ); 549 `ä“ ( ´e£t ); 551  çl£ ; 552 } } 554  $þo£_’dpošt ( audio_’dpošt * • ) 556 `c_þo£_¡»am_cmd ( • -> id ); 557 ià( • -> fd >= 0) { 558 `þo£ ( • -> fd ); 559 • -> fd = -1; 562 `ä“ ( • -> mp ); 564 • -> codec -> `þ—nup Óp-> codec_d©a ); 565 • -> codec_d©a = NULL ; 566 } } 568  boÞ $»sume_’dpošt ( audio_’dpošt * • ) 570 ià( `c_»sume_¡»am_cmd ( • -> id è!ð AUDIO_STATUS_SUCCESS ) 571  çl£ ; 573 • -> §m¶es = 0; 574 • -> »sync = çl£ ; 576 • -> codec -> `upd©e_qos Óp-> codec_d©a , QOS_POLICY_DEFAULT ); 578  Œue ; 579 } } 581  $downmix_to_mÚo ( a2dp_¡»am_out * out , cÚ¡ ušt8_t * bufãr , 582 size_t by‹s ) 584 cÚ¡ št16_t * šput = (cÚ¡ *è bufãr ; 585 št16_t * ouut = (*è out -> downmix_buf ; 586 size_t i , äames ; 589 äames = by‹s / (2 * ( št16_t )); 591  i = 0; i < äames ; i++) { 592 št16_t l = `g‘_Ë16 (& šput [ i * 2]); 593 št16_t r = `g‘_Ë16 (& šput [ i * 2 + 1]); 595 `put_Ë16 (( l + r è/ 2, & ouut [ i ]); 597 } } 599  boÞ $wa™_fÜ_’dpošt ( audio_’dpošt * • , boÞ * wr™abË ) 601  »t ; 603  Œue ) { 604  pÞlfd …ollfd; 606 pÞlfd . fd = • ->fd; 607 pÞlfd . ev’ts = POLLOUT ; 608 pÞlfd . »v’ts = 0; 610 »t = `pÞl (& pÞlfd , 1, 500); 612 ià( »t >= 0) { 613 * wr™abË = !!( pÞlfd . »v’ts & POLLOUT ); 617 ià( ”ºo !ð EINTR ) { 618 »t = ”ºo ; 619 `”rÜ ("pÞÈçžed (%d)", »t ); 620  çl£ ; 624  Œue ; 625 } } 627  boÞ $wr™e_to_’dpošt ( audio_’dpošt * • , size_t by‹s ) 629  medŸ_·ck‘ * mp = (medŸ_·ck‘ *è • ->mp; 630  »t ; 632  Œue ) { 633 »t = `wr™e ( • -> fd , mp , by‹s ); 635 ià( »t >= 0) 642 ià( ”ºo =ð EAGAIN ) { 643 »t = ”ºo ; 644 `w¬n ("wr™çžed (%d)", »t ); 648 ià( ”ºo !ð EINTR ) { 649 »t = ”ºo ; 650 `”rÜ ("wr™çžed (%d)", »t ); 651  çl£ ; 655  Œue ; 656 } } 658  boÞ $wr™e_d©a ( a2dp_¡»am_out * out , cÚ¡ * bufãr , 659 size_t by‹s ) 661  audio_’dpošt * • = out ->ep; 662  medŸ_·ck‘ * mp = (medŸ_·ck‘ *è • ->mp; 663  medŸ_·ck‘_¹p * mp_¹p = (medŸ_·ck‘_¹°*è • -> mp ; 664 size_t ä“_¥aû = • -> mp_d©a_Ën ; 665 size_t cÚsumed = 0; 667  cÚsumed < by‹s ) { 668 size_t wr™‹n = 0; 669 ssize_t »ad ; 670 ušt32_t §m¶es ; 671  »t ; 672  time¥ec cu¼’t ; 673 ušt64_t audio_£Á , audio_·s£d ; 674 boÞ do_wr™e = çl£ ; 680 ià( • -> codec -> u£_¹p ) { 681 mp_¹p -> hdr . £qu’û_numb” = `htÚs ( • -> £q ++); 682 mp_¹p -> hdr . time¡amp = `htÚl ( • -> §m¶es ); 684 »ad = • -> codec -> `’code_medŸ·ck‘ Óp-> codec_d©a , 685 bufãr + cÚsumed , 686 by‹s - cÚsumed , mp , 687 ä“_¥aû , & wr™‹n ); 693 ià( »ad <= 0) 694  Œue ; 697 `þock_g‘time ( CLOCK_MONOTONIC , & cu¼’t ); 698 ià(! • -> §m¶es ) 699 `memýy (& • -> ¡¬t , & cu¼’t , (ep->start)); 700 audio_£Á = • -> §m¶es * 1000000Î / out -> cfg . ¿‹ ; 701 audio_·s£d = `time¥ec_diff_us (& cu¼’t , & • -> ¡¬t ); 708 ià( audio_£Á > audio_·s£d ) { 709  time¥ec ªchÜ ; 711 • -> »sync = çl£ ; 713 `time¥ec_add (& • -> ¡¬t , audio_£Á , & ªchÜ ); 715  Œue ) { 716 »t = `þock_Çno¦“p ( CLOCK_MONOTONIC , 717 TIMER_ABSTIME , & ªchÜ , 718 NULL ); 720 ià(! »t ) 723 ià( »t !ð EINTR ) { 724 `”rÜ ("clock_nanosleep failed (%d)", 725 »t ); 726  çl£ ; 729 } ià(! • -> »sync ) { 730 ušt64_t diff = audio_·s£d - audio_£Á ; 732 ià( diff > MAX_DELAY ) { 733 `w¬n ("Ïg i %jums,„esyncšg", diff / 1000); 735 • -> codec -> `upd©e_qos Óp-> codec_d©a , 736 QOS_POLICY_DECREASE ); 737 • -> »sync = Œue ; 746 ià( wr™‹n > 0 && ! • -> »sync ) { 750 ià(! `wa™_fÜ_’dpošt ( • , & do_wr™e )) 751  çl£ ; 753 ià( do_wr™e ) { 754 ià( • -> codec -> u£_¹p ) 755 wr™‹n +ð( ¹p_h—d” ); 757 ià(! `wr™e_to_’dpošt ( • , wr™‹n )) 758  çl£ ; 767 §m¶es = »ad / (2 * `pÝcouÁ ( out -> cfg . chªÃls )); 768 • -> §m¶es += samples; 769 cÚsumed +ð »ad ; 772  Œue ; 773 } } 775  ssize_t $out_wr™e ( audio_¡»am_out * ¡»am , cÚ¡ * bufãr , 776 size_t by‹s ) 778  a2dp_¡»am_out * out = (a2dp_¡»am_ouˆ*è ¡»am ; 779 cÚ¡ * š_buf = bufãr ; 780 size_t š_Ën = by‹s ; 783 ià( out -> audio_¡©e =ð AUDIO_A2DP_STATE_NONE ) 787 ià( out -> audio_¡©e =ð AUDIO_A2DP_STATE_STANDBY ) { 788 `DBG ("stream in standby,‡uto-start"); 790 ià(! `»sume_’dpošt ( out -> • )) 793 out -> audio_¡©e = AUDIO_A2DP_STATE_STARTED ; 796 ià( out -> audio_¡©e !ð AUDIO_A2DP_STATE_STARTED ) { 797 `”rÜ ("audio: stream‚ot started"); 801 ià( out -> • -> fd < 0) { 802 `”rÜ ("audio:‚oransport socket"); 814 ià( out -> cfg . chªÃls =ð AUDIO_CHANNEL_OUT_MONO ) { 815 ià(! out -> downmix_buf ) { 816 `”rÜ ("audio: downmix buffer‚ot initialized"); 820 `downmix_to_mÚo ( out , bufãr , by‹s ); 822 š_buf = out -> downmix_buf ; 823 š_Ën = by‹s / 2; 826 ià(! `wr™e_d©a ( out , š_buf , š_Ën )) 829  by‹s ; 830 } } 832  ušt32_t $out_g‘_§m¶e_¿‹ (cÚ¡  audio_¡»am * ¡»am ) 834  a2dp_¡»am_out * out = (a2dp_¡»am_ouˆ*è ¡»am ; 836 `DBG (""); 838  out -> cfg . ¿‹ ; 839 } } 841  $out_£t_§m¶e_¿‹ ( audio_¡»am * ¡»am , ušt32_t ¿‹ ) 843  a2dp_¡»am_out * out = (a2dp_¡»am_ouˆ*è ¡»am ; 845 `DBG (""); 847 ià( ¿‹ !ð out -> cfg .rate) { 848 `w¬n ("audio: cªnÙ s‘ sam¶¿‹Ø%d", ¿‹ ); 853 } } 855  size_t $out_g‘_bufãr_size (cÚ¡  audio_¡»am * ¡»am ) 857 `DBG (""); 866  FIXED_BUFFER_SIZE ; 867 } } 869  ušt32_t $out_g‘_chªÃls (cÚ¡  audio_¡»am * ¡»am ) 871 `DBG (""); 878  AUDIO_CHANNEL_OUT_STEREO ; 879 } } 881  audio_fÜm©_t $out_g‘_fÜm© (cÚ¡  audio_¡»am * ¡»am ) 883  a2dp_¡»am_out * out = (a2dp_¡»am_ouˆ*è ¡»am ; 885 `DBG (""); 887  out -> cfg . fÜm© ; 888 } } 890  $out_£t_fÜm© ( audio_¡»am * ¡»am , audio_fÜm©_t fÜm© ) 892 `DBG (""); 893  - ENOSYS ; 894 } } 896  $out_¡ªdby ( audio_¡»am * ¡»am ) 898  a2dp_¡»am_out * out = (a2dp_¡»am_ouˆ*è ¡»am ; 900 `DBG (""); 902 ià( out -> audio_¡©e =ð AUDIO_A2DP_STATE_STARTED ) { 903 ià( `c_su¥’d_¡»am_cmd ( out -> • -> id è!ð AUDIO_STATUS_SUCCESS ) 905 out -> audio_¡©e = AUDIO_A2DP_STATE_STANDBY ; 909 } } 911  $out_dump (cÚ¡  audio_¡»am * ¡»am ,  fd ) 913 `DBG (""); 914  - ENOSYS ; 915 } } 917  $out_£t_·¿m‘”s ( audio_¡»am * ¡»am , cÚ¡ * kv·œs ) 919  a2dp_¡»am_out * out = (a2dp_¡»am_ouˆ*è ¡»am ; 920 * kv·œ ; 921 * ¡r ; 922 * §v•Œ ; 923 boÞ ’‹r_su¥’d = çl£ ; 924 boÞ ex™_su¥’d = çl£ ; 926 `DBG ("%s", kv·œs ); 928 ¡r = `¡rdup ( kv·œs ); 929 ià(! ¡r ) 930  - ENOMEM ; 932 kv·œ = `¡¹ok_r ( ¡r , ";", & §v•Œ ); 934 ; kv·œ && *kv·œ; kv·œ = `¡¹ok_r ( NULL , ";", & §v•Œ )) { 935 * keyv® ; 937 keyv® = `¡rchr ( kv·œ , '='); 938 ià(! keyv® ) 941 * keyv® = '\0'; 942 keyv® ++; 944 ià(! `¡rcmp ( kv·œ , "closing")) { 945 ià(! `¡rcmp ( keyv® , "true")) 946 out -> audio_¡©e = AUDIO_A2DP_STATE_NONE ; 947 } ià(! `¡rcmp ( kv·œ , "A2dpSuspended")) { 948 ià(! `¡rcmp ( keyv® , "true")) 949 ’‹r_su¥’d = Œue ; 951 ex™_su¥’d = Œue ; 955 `ä“ ( ¡r ); 957 ià( ’‹r_su¥’d && out -> audio_¡©e =ð AUDIO_A2DP_STATE_STARTED ) { 958 ià( `c_su¥’d_¡»am_cmd ( out -> • -> id è!ð AUDIO_STATUS_SUCCESS ) 960 out -> audio_¡©e = AUDIO_A2DP_STATE_SUSPENDED ; 963 ià( ex™_su¥’d && out -> audio_¡©e =ð AUDIO_A2DP_STATE_SUSPENDED ) 964 out -> audio_¡©e = AUDIO_A2DP_STATE_STANDBY ; 967 } } 969 * $out_g‘_·¿m‘”s (cÚ¡  audio_¡»am * ¡»am , 970 cÚ¡ * keys ) 972 `DBG (""); 973  `¡rdup (""); 974 } } 976  ušt32_t $out_g‘_Ï‹ncy (cÚ¡  audio_¡»am_out * ¡»am ) 978  a2dp_¡»am_out * out = (a2dp_¡»am_ouˆ*è ¡»am ; 979  audio_’dpošt * • = out ->ep; 980 size_t pkt_du¿tiÚ ; 982 `DBG (""); 984 pkt_du¿tiÚ = • -> codec -> `g‘_medŸ·ck‘_du¿tiÚ Óp-> codec_d©a ); 986  FIXED_A2DP_PLAYBACK_LATENCY_MS + pkt_du¿tiÚ / 1000; 987 } } 989  $out_£t_vÞume ( audio_¡»am_out * ¡»am ,  Ëá , 990  right ) 992 `DBG (""); 994  - ENOSYS ; 995 } } 997  $out_g‘_»nd”_pos™iÚ (cÚ¡  audio_¡»am_out * ¡»am , 998 ušt32_t * d¥_äames ) 1000 `DBG (""); 1001  - ENOSYS ; 1002 } } 1004  $out_add_audio_efãù (cÚ¡  audio_¡»am * ¡»am , 1005 efãù_hªdË_t efãù ) 1007 `DBG (""); 1008  - ENOSYS ; 1009 } } 1011  $out_»move_audio_efãù (cÚ¡  audio_¡»am * ¡»am , 1012 efãù_hªdË_t efãù ) 1014 `DBG (""); 1015  - ENOSYS ; 1016 } } 1018  ušt32_t $š_g‘_§m¶e_¿‹ (cÚ¡  audio_¡»am * ¡»am ) 1020 `DBG (""); 1021  - ENOSYS ; 1022 } } 1024  $š_£t_§m¶e_¿‹ ( audio_¡»am * ¡»am , ušt32_t ¿‹ ) 1026 `DBG (""); 1027  - ENOSYS ; 1028 } } 1030  size_t $š_g‘_bufãr_size (cÚ¡  audio_¡»am * ¡»am ) 1032 `DBG (""); 1033  - ENOSYS ; 1034 } } 1036  ušt32_t $š_g‘_chªÃls (cÚ¡  audio_¡»am * ¡»am ) 1038 `DBG (""); 1039  - ENOSYS ; 1040 } } 1042  audio_fÜm©_t $š_g‘_fÜm© (cÚ¡  audio_¡»am * ¡»am ) 1044 `DBG (""); 1045  - ENOSYS ; 1046 } } 1048  $š_£t_fÜm© ( audio_¡»am * ¡»am , audio_fÜm©_t fÜm© ) 1050 `DBG (""); 1051  - ENOSYS ; 1052 } } 1054  $š_¡ªdby ( audio_¡»am * ¡»am ) 1056 `DBG (""); 1057  - ENOSYS ; 1058 } } 1060  $š_dump (cÚ¡  audio_¡»am * ¡»am ,  fd ) 1062 `DBG (""); 1063  - ENOSYS ; 1064 } } 1066  $š_£t_·¿m‘”s ( audio_¡»am * ¡»am , cÚ¡ * kv·œs ) 1068 `DBG (""); 1069  - ENOSYS ; 1070 } } 1072 * $š_g‘_·¿m‘”s (cÚ¡  audio_¡»am * ¡»am , 1073 cÚ¡ * keys ) 1075 `DBG (""); 1076  `¡rdup (""); 1077 } } 1079  $š_£t_gaš ( audio_¡»am_š * ¡»am ,  gaš ) 1081 `DBG (""); 1082  - ENOSYS ; 1083 } } 1085  ssize_t $š_»ad ( audio_¡»am_š * ¡»am , * bufãr , 1086 size_t by‹s ) 1088 `DBG (""); 1089  - ENOSYS ; 1090 } } 1092  ušt32_t $š_g‘_šput_äames_lo¡ ( audio_¡»am_š * ¡»am ) 1094 `DBG (""); 1095  - ENOSYS ; 1096 } } 1098  $š_add_audio_efãù (cÚ¡  audio_¡»am * ¡»am , 1099 efãù_hªdË_t efãù ) 1101 `DBG (""); 1102  - ENOSYS ; 1103 } } 1105  $š_»move_audio_efãù (cÚ¡  audio_¡»am * ¡»am , 1106 efãù_hªdË_t efãù ) 1108 `DBG (""); 1109  - ENOSYS ; 1110 } } 1112  $audio_Ý’_ouut_¡»am_»® ( audio_hw_deviû * dev , 1113 audio_io_hªdË_t hªdË , 1114 audio_deviûs_t deviûs , 1115 audio_ouut_æags_t æags , 1116  audio_cÚfig * cÚfig , 1117  audio_¡»am_out ** ¡»am_out , 1118 cÚ¡ * add»ss ) 1120  a2dp_audio_dev * a2dp_dev = (a2dp_audio_dev *è dev ; 1121  a2dp_¡»am_out * out ; 1123 out = `ÿÎoc (1, ( a2dp_¡»am_out )); 1124 ià(! out ) 1125  - ENOMEM ; 1127 `DBG (""); 1129 out -> ¡»am . commÚ . g‘_§m¶e_¿‹ = out_g‘_§m¶e_¿‹ ; 1130 out -> ¡»am . commÚ . £t_§m¶e_¿‹ = out_£t_§m¶e_¿‹ ; 1131 out -> ¡»am . commÚ . g‘_bufãr_size = out_g‘_bufãr_size ; 1132 out -> ¡»am . commÚ . g‘_chªÃls = out_g‘_chªÃls ; 1133 out -> ¡»am . commÚ . g‘_fÜm© = out_g‘_fÜm© ; 1134 out -> ¡»am . commÚ . £t_fÜm© = out_£t_fÜm© ; 1135 out -> ¡»am . commÚ . ¡ªdby = out_¡ªdby ; 1136 out -> ¡»am . commÚ . dump = out_dump ; 1137 out -> ¡»am . commÚ . £t_·¿m‘”s = out_£t_·¿m‘”s ; 1138 out -> ¡»am . commÚ . g‘_·¿m‘”s = out_g‘_·¿m‘”s ; 1139 out -> ¡»am . commÚ . add_audio_efãù = out_add_audio_efãù ; 1140 out -> ¡»am . commÚ . »move_audio_efãù = out_»move_audio_efãù ; 1141 out -> ¡»am . g‘_Ï‹ncy = out_g‘_Ï‹ncy ; 1142 out -> ¡»am . £t_vÞume = out_£t_vÞume ; 1143 out -> ¡»am . wr™e = out_wr™e ; 1144 out -> ¡»am . g‘_»nd”_pos™iÚ = out_g‘_»nd”_pos™iÚ ; 1147 out -> • = NULL ; 1149 ià(! `Ý’_’dpošt (& out -> • , &out-> cfg )) 1150  çž ; 1152 `DBG ("¿‹=%d chªÃls=%d fÜm©=%d", out -> cfg . ¿‹ , 1153 out -> cfg . chªÃls , out->cfg. fÜm© ); 1155 ià( out -> cfg . chªÃls =ð AUDIO_CHANNEL_OUT_MONO ) { 1156 out -> downmix_buf = `m®loc ( FIXED_BUFFER_SIZE / 2); 1157 ià(! out -> downmix_buf ) 1158  çž ; 1161 * ¡»am_out = & out -> ¡»am ; 1162 a2dp_dev -> out = out; 1164 out -> audio_¡©e = AUDIO_A2DP_STATE_STANDBY ; 1168 çž : 1169 `”rÜ ("audio: cannot open output stream"); 1170 `ä“ ( out ); 1171 * ¡»am_out = NULL ; 1172  - EIO ; 1173 } } 1175 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 1176  $audio_Ý’_ouut_¡»am ( audio_hw_deviû * dev , 1177 audio_io_hªdË_t hªdË , 1178 audio_deviûs_t deviûs , 1179 audio_ouut_æags_t æags , 1180  audio_cÚfig * cÚfig , 1181  audio_¡»am_out ** ¡»am_out , 1182 cÚ¡ * add»ss ) 1184  `audio_Ý’_ouut_¡»am_»® ( dev , hªdË , deviûs , æags , 1185 cÚfig , ¡»am_out , add»ss ); 1186 } } 1188  $audio_Ý’_ouut_¡»am ( audio_hw_deviû * dev , 1189 audio_io_hªdË_t hªdË , 1190 audio_deviûs_t deviûs , 1191 audio_ouut_æags_t æags , 1192  audio_cÚfig * cÚfig , 1193  audio_¡»am_out ** ¡»am_out ) 1195  `audio_Ý’_ouut_¡»am_»® ( dev , hªdË , deviûs , æags , 1196 cÚfig , ¡»am_out , NULL ); 1197 } } 1200  $audio_þo£_ouut_¡»am ( audio_hw_deviû * dev , 1201  audio_¡»am_out * ¡»am ) 1203  a2dp_audio_dev * a2dp_dev = (a2dp_audio_dev *è dev ; 1204  a2dp_¡»am_out * out = (a2dp_¡»am_ouˆ*è ¡»am ; 1206 `DBG (""); 1208 `þo£_’dpošt ( a2dp_dev -> out -> • ); 1210 `ä“ ( out -> downmix_buf ); 1212 `ä“ ( ¡»am ); 1213 a2dp_dev -> out = NULL ; 1214 } } 1216  $audio_£t_·¿m‘”s ( audio_hw_deviû * dev , 1217 cÚ¡ * kv·œs ) 1219  a2dp_audio_dev * a2dp_dev = (a2dp_audio_dev *è dev ; 1220  a2dp_¡»am_out * out = a2dp_dev ->out; 1222 `DBG (""); 1224 ià(! out ) 1227  out -> ¡»am . commÚ . `£t_·¿m‘”s (( audio_¡»am *) out, 1228 kv·œs ); 1229 } } 1231 * $audio_g‘_·¿m‘”s (cÚ¡  audio_hw_deviû * dev , 1232 cÚ¡ * keys ) 1234 `DBG (""); 1235  `¡rdup (""); 1236 } } 1238  $audio_š™_check (cÚ¡  audio_hw_deviû * dev ) 1240 `DBG (""); 1242 } } 1244  $audio_£t_voiû_vÞume ( audio_hw_deviû * dev ,  vÞume ) 1246 `DBG (""); 1247  - ENOSYS ; 1248 } } 1250  $audio_£t_ma¡”_vÞume ( audio_hw_deviû * dev ,  vÞume ) 1252 `DBG (""); 1253  - ENOSYS ; 1254 } } 1256  $audio_£t_mode ( audio_hw_deviû * dev ,  mode ) 1258 `DBG (""); 1259  - ENOSYS ; 1260 } } 1262  $audio_£t_mic_mu‹ ( audio_hw_deviû * dev , boÞ ¡©e ) 1264 `DBG (""); 1265  - ENOSYS ; 1266 } } 1268  $audio_g‘_mic_mu‹ (cÚ¡  audio_hw_deviû * dev , boÞ * ¡©e ) 1270 `DBG (""); 1271  - ENOSYS ; 1272 } } 1274  size_t $audio_g‘_šput_bufãr_size (cÚ¡  audio_hw_deviû * dev , 1275 cÚ¡  audio_cÚfig * cÚfig ) 1277 `DBG (""); 1278  - ENOSYS ; 1279 } } 1281  $audio_Ý’_šput_¡»am_»® ( audio_hw_deviû * dev , 1282 audio_io_hªdË_t hªdË , 1283 audio_deviûs_t deviûs , 1284  audio_cÚfig * cÚfig , 1285  audio_¡»am_š ** ¡»am_š , 1286 audio_šput_æags_t æags , 1287 cÚ¡ * add»ss , 1288 audio_sourû_t sourû ) 1290  audio_¡»am_š * š ; 1292 `DBG (""); 1294 š = `ÿÎoc (1, ( audio_¡»am_š )); 1295 ià(! š ) 1296  - ENOMEM ; 1298 š -> commÚ . g‘_§m¶e_¿‹ = š_g‘_§m¶e_¿‹ ; 1299 š -> commÚ . £t_§m¶e_¿‹ = š_£t_§m¶e_¿‹ ; 1300 š -> commÚ . g‘_bufãr_size = š_g‘_bufãr_size ; 1301 š -> commÚ . g‘_chªÃls = š_g‘_chªÃls ; 1302 š -> commÚ . g‘_fÜm© = š_g‘_fÜm© ; 1303 š -> commÚ . £t_fÜm© = š_£t_fÜm© ; 1304 š -> commÚ . ¡ªdby = š_¡ªdby ; 1305 š -> commÚ . dump = š_dump ; 1306 š -> commÚ . £t_·¿m‘”s = š_£t_·¿m‘”s ; 1307 š -> commÚ . g‘_·¿m‘”s = š_g‘_·¿m‘”s ; 1308 š -> commÚ . add_audio_efãù = š_add_audio_efãù ; 1309 š -> commÚ . »move_audio_efãù = š_»move_audio_efãù ; 1310 š -> £t_gaš = š_£t_gaš ; 1311 š -> »ad = š_»ad ; 1312 š -> g‘_šput_äames_lo¡ = š_g‘_šput_äames_lo¡ ; 1314 * ¡»am_š = š ; 1317 } } 1319 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 1320  $audio_Ý’_šput_¡»am ( audio_hw_deviû * dev , 1321 audio_io_hªdË_t hªdË , 1322 audio_deviûs_t deviûs , 1323  audio_cÚfig * cÚfig , 1324  audio_¡»am_š ** ¡»am_š , 1325 audio_šput_æags_t æags , 1326 cÚ¡ * add»ss , 1327 audio_sourû_t sourû ) 1329  `audio_Ý’_šput_¡»am_»® ( dev , hªdË , deviûs , cÚfig , 1330 ¡»am_š , æags , add»ss , 1331 sourû ); 1332 } } 1334  $audio_Ý’_šput_¡»am ( audio_hw_deviû * dev , 1335 audio_io_hªdË_t hªdË , 1336 audio_deviûs_t deviûs , 1337  audio_cÚfig * cÚfig , 1338  audio_¡»am_š ** ¡»am_š ) 1340  `audio_Ý’_šput_¡»am_»® ( dev , hªdË , deviûs , cÚfig , 1341 ¡»am_š , 0, NULL , 0); 1342 } } 1345  $audio_þo£_šput_¡»am ( audio_hw_deviû * dev , 1346  audio_¡»am_š * ¡»am_š ) 1348 `DBG (""); 1349 `ä“ ( ¡»am_š ); 1350 } } 1352  $audio_dump (cÚ¡ audio_hw_deviû_t * deviû ,  fd ) 1354 `DBG (""); 1355  - ENOSYS ; 1356 } } 1358 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 1359  $£t_ma¡”_mu‹ ( audio_hw_deviû * dev , boÞ mu‹ ) 1361 `DBG (""); 1362  - ENOSYS ; 1363 } } 1365  $g‘_ma¡”_mu‹ ( audio_hw_deviû * dev , boÞ * mu‹ ) 1367 `DBG (""); 1368  - ENOSYS ; 1369 } } 1371  $ü—‹_audio_·tch ( audio_hw_deviû * dev , 1372  num_sourûs , 1373 cÚ¡  audio_pÜt_cÚfig * sourûs , 1374  num_sšks , 1375 cÚ¡  audio_pÜt_cÚfig * sšks , 1376 audio_·tch_hªdË_t * hªdË ) 1378 `DBG (""); 1379  - ENOSYS ; 1380 } } 1382  $»Ëa£_audio_·tch ( audio_hw_deviû * dev , 1383 audio_·tch_hªdË_t hªdË ) 1385 `DBG (""); 1386  - ENOSYS ; 1387 } } 1389  $g‘_audio_pÜt ( audio_hw_deviû * dev ,  audio_pÜt * pÜt ) 1391 `DBG (""); 1392  - ENOSYS ; 1393 } } 1395  $£t_audio_pÜt_cÚfig ( audio_hw_deviû * dev , 1396 cÚ¡  audio_pÜt_cÚfig * cÚfig ) 1398 `DBG (""); 1399  - ENOSYS ; 1400 } } 1403  $audio_þo£ ( hw_deviû_t * deviû ) 1405  a2dp_audio_dev * a2dp_dev = (a2dp_audio_dev *) deviû ; 1406  i ; 1408 `DBG (""); 1410 `uÄegi¡”_’dpošts (); 1412  i = 0; i < NUM_CODECS ; i++) { 1413 cÚ¡  audio_codec * codec = audio_codecs [ i ]. `g‘_codec (); 1415 ià(! audio_codecs [ i ]. lßded ) 1418 ià( codec -> uÆßd ) 1419 codec -> `uÆßd (); 1421 audio_codecs [ i ]. lßded = çl£ ; 1424 `shutdown ( li¡’_sk , SHUT_RDWR ); 1425 `shutdown ( audio_sk , SHUT_RDWR ); 1427 `±h»ad_još ( c_th , NULL ); 1429 `þo£ ( li¡’_sk ); 1430 li¡’_sk = -1; 1432 `ä“ ( a2dp_dev ); 1434 } } 1436 * $c_hªdËr (* d©a ) 1438 boÞ dÚe = çl£ ; 1439  pÞlfd pfd ; 1440  sk ; 1442 `DBG (""); 1444 ! dÚe ) { 1445 `DBG ("Waiting for connection ..."); 1447 sk = `acû± ( li¡’_sk , NULL , NULL); 1448 ià( sk < 0) { 1449  ”r = ”ºo ; 1451 ià( ”r =ð EINTR ) 1454 ià( ”r !ð ECONNABORTED &&ƒ¼ !ð EINVAL ) 1455 `”rÜ ("audio: Failedo‡ccept socket: %d (%s)", 1456 ”r , `¡»¼Ü (err)); 1461 `±h»ad_mu‹x_lock (& sk_mu‹x ); 1462 audio_sk = sk ; 1463 `±h»ad_mu‹x_uÆock (& sk_mu‹x ); 1465 `DBG ("Audio IPC: Connected"); 1467 ià( `»gi¡”_’dpošts (è!ð AUDIO_STATUS_SUCCESS ) { 1468 `”rÜ ("audio: Failedo„egisterƒndpoints"); 1470 `uÄegi¡”_’dpošts (); 1472 `±h»ad_mu‹x_lock (& sk_mu‹x ); 1473 `shutdown ( audio_sk , SHUT_RDWR ); 1474 `þo£ ( audio_sk ); 1475 audio_sk = -1; 1476 `±h»ad_mu‹x_uÆock (& sk_mu‹x ); 1481 `mem£t (& pfd , 0, (pfd)); 1482 pfd . fd = audio_sk ; 1483 pfd . ev’ts = POLLHUP | POLLERR | POLLNVAL ; 1486  `pÞl (& pfd , 1, -1è< 0 && ”ºo =ð EINTR ); 1488 `šfo ("Audio HAL: Socket closed"); 1490 `±h»ad_mu‹x_lock (& sk_mu‹x ); 1491 `þo£ ( audio_sk ); 1492 audio_sk = -1; 1493 `±h»ad_mu‹x_uÆock (& sk_mu‹x ); 1497 `mem£t ( audio_’dpošts , 0, (audio_endpoints)); 1499 `šfo ("Closing Audio IPChread"); 1500  NULL ; 1501 } } 1503  $audio_c_š™ () 1505  sockaddr_un addr ; 1506  ”r ; 1507  sk ; 1509 `DBG (""); 1511 sk = `sock‘ ( PF_LOCAL , SOCK_SEQPACKET , 0); 1512 ià( sk < 0) { 1513 ”r = - ”ºo ; 1514 `”rÜ ("audio: FažedØü—‹ sock‘: %d (%s)", - ”r , 1515 `¡»¼Ü (- ”r )); 1516  ”r ; 1519 `mem£t (& addr , 0, (addr)); 1520 addr . sun_çmžy = AF_UNIX ; 1522 `memýy ( addr . sun_·th , BLUEZ_AUDIO_SK_PATH , 1523 ( BLUEZ_AUDIO_SK_PATH )); 1525 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 1526 ”r = - ”ºo ; 1527 `”rÜ ("audio: FažedØbšd sock‘: %d (%s)", - ”r , 1528 `¡»¼Ü (- ”r )); 1529  çžed ; 1532 ià( `li¡’ ( sk , 1) < 0) { 1533 ”r = - ”ºo ; 1534 `”rÜ ("audio: FažedØli¡’ oÀthsock‘: %d (%s)", - ”r , 1535 `¡»¼Ü (- ”r )); 1536  çžed ; 1539 li¡’_sk = sk ; 1541 ”r = `±h»ad_ü—‹ (& c_th , NULL , c_hªdËr , NULL); 1542 ià( ”r ) { 1543 ”r = -err; 1544 c_th = 0; 1545 `”rÜ ("audio: Failedo start Audio IPChread: %d (%s)", 1546 - ”r , `¡»¼Ü (-err)); 1547  çžed ; 1552 çžed : 1553 `þo£ ( sk ); 1554  ”r ; 1555 } } 1557  $audio_Ý’ (cÚ¡ hw_moduË_t * moduË , cÚ¡ * Çme , 1558 hw_deviû_t ** deviû ) 1560  a2dp_audio_dev * a2dp_dev ; 1561 size_t i ; 1562  ”r ; 1564 `DBG (""); 1566 ià( `¡rcmp ( Çme , AUDIO_HARDWARE_INTERFACE )) { 1567 `”rÜ ("audio: iÁ”çû % nÙ m©chšg [%s]", Çme , 1568 AUDIO_HARDWARE_INTERFACE ); 1569  - EINVAL ; 1572 ”r = `audio_c_š™ (); 1573 ià( ”r < 0) 1574  ”r ; 1576 a2dp_dev = `ÿÎoc (1, ( a2dp_audio_dev )); 1577 ià(! a2dp_dev ) 1578  - ENOMEM ; 1580 a2dp_dev -> dev . commÚ . g = HARDWARE_DEVICE_TAG ; 1581 a2dp_dev -> dev . commÚ . v”siÚ = AUDIO_DEVICE_API_VERSION_CURRENT ; 1582 a2dp_dev -> dev . commÚ . moduË = ( hw_moduË_t *) module; 1583 a2dp_dev -> dev . commÚ . þo£ = audio_þo£ ; 1585 a2dp_dev -> dev . š™_check = audio_š™_check ; 1586 a2dp_dev -> dev . £t_voiû_vÞume = audio_£t_voiû_vÞume ; 1587 a2dp_dev -> dev . £t_ma¡”_vÞume = audio_£t_ma¡”_vÞume ; 1588 a2dp_dev -> dev . £t_mode = audio_£t_mode ; 1589 a2dp_dev -> dev . £t_mic_mu‹ = audio_£t_mic_mu‹ ; 1590 a2dp_dev -> dev . g‘_mic_mu‹ = audio_g‘_mic_mu‹ ; 1591 a2dp_dev -> dev . £t_·¿m‘”s = audio_£t_·¿m‘”s ; 1592 a2dp_dev -> dev . g‘_·¿m‘”s = audio_g‘_·¿m‘”s ; 1593 a2dp_dev -> dev . g‘_šput_bufãr_size = audio_g‘_šput_bufãr_size ; 1594 a2dp_dev -> dev . Ý’_ouut_¡»am = audio_Ý’_ouut_¡»am ; 1595 a2dp_dev -> dev . þo£_ouut_¡»am = audio_þo£_ouut_¡»am ; 1596 a2dp_dev -> dev . Ý’_šput_¡»am = audio_Ý’_šput_¡»am ; 1597 a2dp_dev -> dev . þo£_šput_¡»am = audio_þo£_šput_¡»am ; 1598 a2dp_dev -> dev . dump = audio_dump ; 1599 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 1600 a2dp_dev -> dev . £t_ma¡”_mu‹ = set_master_mute; 1601 a2dp_dev -> dev . g‘_ma¡”_mu‹ = get_master_mute; 1602 a2dp_dev -> dev . ü—‹_audio_·tch = create_audio_patch; 1603 a2dp_dev -> dev . »Ëa£_audio_·tch =„elease_audio_patch; 1604 a2dp_dev -> dev . g‘_audio_pÜt = get_audio_port; 1605 a2dp_dev -> dev . £t_audio_pÜt_cÚfig = set_audio_port_config; 1608  i = 0; i < NUM_CODECS ; i++) { 1609 cÚ¡  audio_codec * codec = audio_codecs [ i ]. `g‘_codec (); 1611 ià( codec -> lßd && !codec-> `lßd ()) 1614 audio_codecs [ i ]. lßded = Œue ; 1622 * deviû = & a2dp_dev -> dev . commÚ ; 1625 } } 1627  hw_moduË_m‘hods_t gh®_moduË_m‘hods = { 1628 . Ý’ = audio_Ý’ , 1631  audio_moduË gHAL_MODULE_INFO_SYM = { 1632 . commÚ = { 1633 . g = HARDWARE_MODULE_TAG , 1634 . gv”siÚ_majÜ = 1, 1635 . gv”siÚ_mšÜ = 0, 1636 . gid = AUDIO_HARDWARE_MODULE_ID , 1637 . gÇme = "A2DP Bluez HW HAL", 1638 . gauthÜ = "Intel Corporation", 1639 . gm‘hods = & h®_moduË_m‘hods , @android/hal-audio.h 18  ~ 19  ~ 21 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 23  s¹p_h—d” { 24  mcc :4; 25  mx :1; 26  mp :1; 27  mv :2; 29  m± :7; 30  mm :1; 32 ušt16_t m£qu’û_numb” ; 33 ušt32_t mtime¡amp ; 34 ušt32_t ms¤c ; 35 ušt32_t mc¤c [0]; 36 } __©Œibu‹__ (( ·cked )); 38 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 40  s¹p_h—d” { 41  mv :2; 42  mp :1; 43  mx :1; 44  mcc :4; 46  mm :1; 47  m± :7; 49 ušt16_t m£qu’û_numb” ; 50 ušt32_t mtime¡amp ; 51 ušt32_t ms¤c ; 52 ušt32_t mc¤c [0]; 53 } __©Œibu‹__ (( ·cked )); 59  smedŸ_·ck‘ { 60 ušt8_t md©a [0]; 63  smedŸ_·ck‘_¹p { 64  ¹p_h—d” mhdr ; 65 ušt8_t md©a [0]; 68  saudio_šput_cÚfig { 69 ušt32_t m¿‹ ; 70 ušt32_t mchªÃls ; 71 audio_fÜm©_t mfÜm© ; 74  saudio_codec { 75 ušt8_t mty³ ; 76 boÞ mu£_¹p ; 78 boÞ (* lßd ) (); 79 (* muÆßd ) (); 81 (* mg‘_´e£ts è( audio_´e£t * m´e£t , size_t * mËn ); 83 boÞ (* š™ è( audio_´e£t * m´e£t , ušt16_t mmtu , 84 ** mcodec_d©a ); 85 boÞ (* þ—nup è(* mcodec_d©a ); 86 boÞ (* g‘_cÚfig è(* mcodec_d©a , 87  audio_šput_cÚfig * mcÚfig ); 88 size_t (* g‘_bufãr_size è(* mcodec_d©a ); 89 size_t (* g‘_medŸ·ck‘_du¿tiÚ è(* mcodec_d©a ); 90 ssize_t (* ’code_medŸ·ck‘ è(* mcodec_d©a , cÚ¡ ušt8_t * mbufãr , 91 size_t mËn ,  medŸ_·ck‘ * mmp , 92 size_t mmp_d©a_Ën , size_ˆ* mwr™‹n ); 93 boÞ (* upd©e_qos è(* mcodec_d©a , ušt8_t mÝ ); 96  #QOS_POLICY_DEFAULT 0x00 ) 97  #QOS_POLICY_DECREASE 0x01 ) 99 cÚ¡  taudio_codec * (* taudio_codec_g‘_t ) (); 101 cÚ¡  audio_codec * codec_sbc (); 102 cÚ¡  audio_codec * codec_­tx (); @android/hal-avrcp-ctrl.c 18  ~<¡dboÞ.h > 19  ~<¡ddef.h > 20  ~<¡ršg.h > 21  ~<¡dlib.h > 23  ~"h®-utžs.h " 24  ~"h®-log.h " 25  ~"h®.h " 26  ~"h®-msg.h " 27  ~"c-commÚ.h " 28  ~"h®-c.h " 30 cÚ¡ bŒc_ù¾_ÿÎbacks_t * gcbs = NULL ; 32  boÞ $š‹rçû_»ady () 34  cbs !ð NULL ; 35 } } 37  $hªdË_cÚÃùiÚ_¡©e (* buf , ušt16_t Ën ,  fd ) 39  h®_ev_avrý_ù¾_cÚn_¡©e * ev = buf ; 41 ià( cbs -> cÚÃùiÚ_¡©e_cb ) 42 cbs -> `cÚÃùiÚ_¡©e_cb ( ev -> ¡©e , 43 ( bt_bdaddr_t *è( ev -> bdaddr )); 44 } } 46  $hªdË_·s¡hrough_r¥ (* buf , ušt16_t Ën ,  fd ) 48  h®_ev_avrý_ù¾_·s¡hrough_r¥ * ev = buf ; 50 ià( cbs -> ·s¡hrough_r¥_cb ) 51 cbs -> `·s¡hrough_r¥_cb ( ev -> id ,ƒv-> key_¡©e ); 52 } } 58 cÚ¡  h®_c_hªdËr gev_hªdËrs [] = { 60 { hªdË_cÚÃùiÚ_¡©e , çl£ , 61 ( h®_ev_avrý_ù¾_cÚn_¡©e ) }, 63 { hªdË_·s¡hrough_r¥ , çl£ , 64 ( h®_ev_avrý_ù¾_·s¡hrough_r¥ ) }, 67  bt_¡©us_t $š™ ( bŒc_ù¾_ÿÎbacks_t * ÿÎbacks ) 69  h®_cmd_»gi¡”_moduË cmd ; 70  »t ; 72 `DBG (""); 74 ià( `š‹rçû_»ady ()) 75  BT_STATUS_DONE ; 77 cbs = ÿÎbacks ; 79 `h®_c_»gi¡” ( HAL_SERVICE_ID_AVRCP_CTRL , ev_hªdËrs , 80 ( ev_hªdËrs ) / (ev_handlers[0])); 82 cmd . £rviû_id = HAL_SERVICE_ID_AVRCP_CTRL ; 83 cmd . mode = HAL_MODE_DEFAULT ; 84 cmd . max_þ›Ás = 1; 86 »t = `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_REGISTER_MODULE , 87 ( cmd ), &cmd, NULL , NULL, NULL); 89 ià( »t !ð BT_STATUS_SUCCESS ) { 90 cbs = NULL ; 91 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_AVRCP_CTRL ); 94  »t ; 95 } } 97  bt_¡©us_t $£nd_·ss_through_cmd ( bt_bdaddr_t * bd_addr , ušt8_t key_code , 98 ušt8_t key_¡©e ) 100  h®_cmd_avrý_ù¾_£nd_·s¡hrough cmd ; 102 `DBG (""); 104 ià(! `š‹rçû_»ady ()) 105  BT_STATUS_NOT_READY ; 107 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 108 cmd . key_code = key_code; 109 cmd . key_¡©e = key_state; 111  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP_CTRL , 112 HAL_OP_AVRCP_CTRL_SEND_PASSTHROUGH , 113 ( cmd ), &cmd, NULL , NULL, NULL); 114 } } 116  $þ—nup () 118  h®_cmd_uÄegi¡”_moduË cmd ; 120 `DBG (""); 122 ià(! `š‹rçû_»ady ()) 125 cmd . £rviû_id = HAL_SERVICE_ID_AVRCP_CTRL ; 127 `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_UNREGISTER_MODULE , 128 ( cmd ), &cmd, NULL , NULL, NULL); 130 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_AVRCP_CTRL ); 132 cbs = NULL ; 133 } } 135  bŒc_ù¾_š‹rçû_t giçû = { 136 . size = ( içû ), 137 . gš™ = š™ , 138 . g£nd_·ss_through_cmd = £nd_·ss_through_cmd , 139 . gþ—nup = þ—nup 142 bŒc_ù¾_š‹rçû_t * $bt_g‘_avrý_ù¾_š‹rçû () 144  & içû ; 145 } } @android/hal-avrcp.c 18  ~<¡dboÞ.h > 19  ~<¡ddef.h > 20  ~<¡ršg.h > 21  ~<¡dlib.h > 23  ~"h®-utžs.h " 24  ~"h®-log.h " 25  ~"h®.h " 26  ~"h®-msg.h " 27  ~"c-commÚ.h " 28  ~"h®-c.h " 30 cÚ¡ bŒc_ÿÎbacks_t * gcbs = NULL ; 32  boÞ $š‹rçû_»ady () 34  cbs !ð NULL ; 35 } } 37  $hªdË_»mÙe_ã©u»s (* buf , ušt16_t Ën ,  fd ) 39  h®_ev_avrý_»mÙe_ã©u»s * ev = buf ; 41 ià( cbs -> »mÙe_ã©u»s_cb ) 42 cbs -> `»mÙe_ã©u»s_cb (( bt_bdaddr_t *è( ev -> bdaddr ), 43 ev -> ã©u»s ); 44 } } 46  $hªdË_g‘_¶ay_¡©us (* buf , ušt16_t Ën ,  fd ) 48 ià( cbs -> g‘_¶ay_¡©us_cb ) 49 cbs -> `g‘_¶ay_¡©us_cb (); 50 } } 52  $hªdË_li¡_¶ay”_©Œs (* buf , ušt16_t Ën ,  fd ) 54 ià( cbs -> li¡_¶ay”_­p_©Œ_cb ) 55 cbs -> `li¡_¶ay”_­p_©Œ_cb (); 56 } } 58  $hªdË_li¡_¶ay”_v®ues (* buf , ušt16_t Ën ,  fd ) 60  h®_ev_avrý_li¡_¶ay”_v®ues * ev = buf ; 62 ià( cbs -> li¡_¶ay”_­p_v®ues_cb ) 63 cbs -> `li¡_¶ay”_­p_v®ues_cb ( ev -> ©Œ ); 64 } } 66  $hªdË_g‘_¶ay”_v®ues (* buf , ušt16_t Ën ,  fd ) 68  h®_ev_avrý_g‘_¶ay”_v®ues * ev = buf ; 69 bŒc_¶ay”_©Œ_t ©Œs [4]; 70  i ; 72 ià(! cbs -> g‘_¶ay”_­p_v®ue_cb ) 76  i = 0; i < ev -> numb” ; i++) 77 ©Œs [ i ] = ev ->attrs[i]; 79 cbs -> `g‘_¶ay”_­p_v®ue_cb ( ev -> numb” , ©Œs ); 80 } } 82  $hªdË_g‘_¶ay”_©Œs_‹xt (* buf , ušt16_t Ën ,  fd ) 84  h®_ev_avrý_g‘_¶ay”_©Œs_‹xt * ev = buf ; 85 bŒc_¶ay”_©Œ_t ©Œs [4]; 86  i ; 88 ià(! cbs -> g‘_¶ay”_­p_©Œs_‹xt_cb ) 92  i = 0; i < ev -> numb” ; i++) 93 ©Œs [ i ] = ev ->attrs[i]; 95 cbs -> `g‘_¶ay”_­p_©Œs_‹xt_cb ( ev -> numb” , ©Œs ); 96 } } 98  $hªdË_g‘_¶ay”_v®ues_‹xt (* buf , ušt16_t Ën ,  fd ) 100  h®_ev_avrý_g‘_¶ay”_v®ues_‹xt * ev = buf ; 102 ià( cbs -> g‘_¶ay”_­p_v®ues_‹xt_cb ) 103 cbs -> `g‘_¶ay”_­p_v®ues_‹xt_cb ( ev -> ©Œ ,ƒv-> numb” , 104 ev -> v®ues ); 105 } } 107  $hªdË_£t_¶ay”_v®ue (* buf , ušt16_t Ën ,  fd ) 109  h®_ev_avrý_£t_¶ay”_v®ues * ev = buf ; 110  h®_avrý_¶ay”_©Œ_v®ue * ©Œs ; 111 bŒc_¶ay”_£‰šgs_t v®ues ; 112  i ; 114 ià(! cbs -> £t_¶ay”_­p_v®ue_cb ) 117 ©Œs = ( h®_avrý_¶ay”_©Œ_v®ue *è ev ->attrs; 120 v®ues . num_©Œ = ev -> numb” ; 121  i = 0; i < ev -> numb” ; i++) { 122 v®ues . ©Œ_ids [ i ] = ©Œs [i]. ©Œ ; 123 v®ues . ©Œ_v®ues [ i ] = ©Œs [i]. v®ue ; 126 cbs -> `£t_¶ay”_­p_v®ue_cb (& v®ues ); 127 } } 129  $hªdË_g‘_–em’t_©Œs (* buf , ušt16_t Ën ,  fd ) 131  h®_ev_avrý_g‘_–em’t_©Œs * ev = buf ; 132 bŒc_medŸ_©Œ_t ©Œs [ BTRC_MAX_APP_SETTINGS ]; 133  i ; 135 ià(! cbs -> g‘_–em’t_©Œ_cb ) 139  i = 0; i < ev -> numb” ; i++) 140 ©Œs [ i ] = ev ->attrs[i]; 142 cbs -> `g‘_–em’t_©Œ_cb ( ev -> numb” , ©Œs ); 143 } } 145  $hªdË_»gi¡”_nÙifiÿtiÚ (* buf , ušt16_t Ën ,  fd ) 147  h®_ev_avrý_»gi¡”_nÙifiÿtiÚ * ev = buf ; 149 ià( cbs -> »gi¡”_nÙifiÿtiÚ_cb ) 150 cbs -> `»gi¡”_nÙifiÿtiÚ_cb ( ev -> ev’t ,ƒv-> ·¿m ); 151 } } 153  $hªdË_vÞume_chªged (* buf , ušt16_t Ën ,  fd ) 155  h®_ev_avrý_vÞume_chªged * ev = buf ; 157 ià( cbs -> vÞume_chªge_cb ) 158 cbs -> `vÞume_chªge_cb ( ev -> vÞume ,ƒv-> ty³ ); 159 } } 161  $hªdË_·s¡hrough_cmd (* buf , ušt16_t Ën ,  fd ) 163  h®_ev_avrý_·s¡hrough_cmd * ev = buf ; 165 ià( cbs -> ·s¡hrough_cmd_cb ) 166 cbs -> `·s¡hrough_cmd_cb ( ev -> id ,ƒv-> ¡©e ); 167 } } 173 cÚ¡  h®_c_hªdËr gev_hªdËrs [] = { 175 { hªdË_»mÙe_ã©u»s , çl£ , 176 ( h®_ev_avrý_»mÙe_ã©u»s ) }, 178 { hªdË_g‘_¶ay_¡©us , çl£ , 0 }, 180 { hªdË_li¡_¶ay”_©Œs , çl£ , 0 }, 182 { hªdË_li¡_¶ay”_v®ues , çl£ , 183 ( h®_ev_avrý_li¡_¶ay”_v®ues ) }, 185 { hªdË_g‘_¶ay”_v®ues , Œue , 186 ( h®_ev_avrý_g‘_¶ay”_v®ues ) }, 188 { hªdË_g‘_¶ay”_©Œs_‹xt , Œue , 189 ( h®_ev_avrý_g‘_¶ay”_©Œs_‹xt ) }, 191 { hªdË_g‘_¶ay”_v®ues_‹xt , Œue , 192 ( h®_ev_avrý_g‘_¶ay”_v®ues_‹xt ) }, 194 { hªdË_£t_¶ay”_v®ue , Œue , 195 ( h®_ev_avrý_£t_¶ay”_v®ues ) }, 197 { hªdË_g‘_–em’t_©Œs , Œue , 198 ( h®_ev_avrý_g‘_–em’t_©Œs ) }, 200 { hªdË_»gi¡”_nÙifiÿtiÚ , çl£ , 201 ( h®_ev_avrý_»gi¡”_nÙifiÿtiÚ ) }, 203 { hªdË_vÞume_chªged , çl£ , 204 ( h®_ev_avrý_vÞume_chªged ) }, 206 { hªdË_·s¡hrough_cmd , çl£ , 207 ( h®_ev_avrý_·s¡hrough_cmd ) }, 210  bt_¡©us_t $š™ ( bŒc_ÿÎbacks_t * ÿÎbacks ) 212  h®_cmd_»gi¡”_moduË cmd ; 213  »t ; 215 `DBG (""); 217 ià( `š‹rçû_»ady ()) 218  BT_STATUS_DONE ; 220 cbs = ÿÎbacks ; 222 `h®_c_»gi¡” ( HAL_SERVICE_ID_AVRCP , ev_hªdËrs , 223 ( ev_hªdËrs ) / (ev_handlers[0])); 225 cmd . £rviû_id = HAL_SERVICE_ID_AVRCP ; 226 cmd . mode = HAL_MODE_DEFAULT ; 227 cmd . max_þ›Ás = 1; 229 »t = `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_REGISTER_MODULE , 230 ( cmd ), &cmd, NULL , NULL, NULL); 232 ià( »t !ð BT_STATUS_SUCCESS ) { 233 cbs = NULL ; 234 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_AVRCP ); 237  »t ; 238 } } 240  bt_¡©us_t $g‘_¶ay_¡©us_r¥ ( bŒc_¶ay_¡©us_t ¡©us , 241 ušt32_t sÚg_Ën , ušt32_ˆ sÚg_pos ) 243  h®_cmd_avrý_g‘_¶ay_¡©us cmd ; 245 `DBG (""); 247 ià(! `š‹rçû_»ady ()) 248  BT_STATUS_NOT_READY ; 250 cmd . ¡©us = status; 251 cmd . du¿tiÚ = sÚg_Ën ; 252 cmd . pos™iÚ = sÚg_pos ; 254  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , HAL_OP_AVRCP_GET_PLAY_STATUS , 255 ( cmd ), &cmd, NULL , NULL, NULL); 256 } } 258  bt_¡©us_t $li¡_¶ay”_­p_©Œ_r¥ ( num_©Œ , 259 bŒc_¶ay”_©Œ_t * p_©Œs ) 261  buf [ IPC_MTU ]; 262  h®_cmd_avrý_li¡_¶ay”_©Œs * cmd = (*è buf ; 263 size_t Ën ; 265 `DBG (""); 267 ià(! `š‹rçû_»ady ()) 268  BT_STATUS_NOT_READY ; 270 ià( num_©Œ < 0) 271  BT_STATUS_PARM_INVALID ; 273 Ën = (* cmd è+ num_©Œ ; 274 ià( Ën > IPC_MTU ) 275  BT_STATUS_PARM_INVALID ; 277 cmd -> numb” = num_©Œ ; 278 `memýy ( cmd -> ©Œs , p_©Œs , num_©Œ ); 280  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , 281 HAL_OP_AVRCP_LIST_PLAYER_ATTRS , 282 Ën , cmd , NULL , NULL, NULL); 283 } } 285  bt_¡©us_t $li¡_¶ay”_­p_v®ue_r¥ ( num_v® , ušt8_t * p_v®s ) 287  buf [ IPC_MTU ]; 288  h®_cmd_avrý_li¡_¶ay”_v®ues * cmd = (*è buf ; 289 size_t Ën ; 291 `DBG (""); 293 ià(! `š‹rçû_»ady ()) 294  BT_STATUS_NOT_READY ; 296 ià( num_v® < 0) 297  BT_STATUS_PARM_INVALID ; 299 Ën = (* cmd è+ num_v® ; 301 ià( Ën > IPC_MTU ) 302  BT_STATUS_PARM_INVALID ; 304 cmd -> numb” = num_v® ; 305 `memýy ( cmd -> v®ues , p_v®s , num_v® ); 307  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , 308 HAL_OP_AVRCP_LIST_PLAYER_VALUES , 309 Ën , cmd , NULL , NULL, NULL); 310 } } 312  bt_¡©us_t $g‘_¶ay”_­p_v®ue_r¥ ( bŒc_¶ay”_£‰šgs_t * p_v®s ) 314  buf [ IPC_MTU ]; 315  h®_cmd_avrý_g‘_¶ay”_©Œs * cmd = (*è buf ; 316 size_t Ën , ©Œs_Ën ; 317  i ; 319 `DBG (""); 321 ià(! `š‹rçû_»ady ()) 322  BT_STATUS_NOT_READY ; 324 ià(! p_v®s ) 325  BT_STATUS_PARM_INVALID ; 327 ©Œs_Ën = p_v®s -> num_©Œ * 328 ( h®_avrý_¶ay”_©Œ_v®ue ); 329 Ën = (* cmd è+ ©Œs_Ën ; 331 ià( Ën > IPC_MTU ) 332  BT_STATUS_PARM_INVALID ; 334 cmd -> numb” = p_v®s -> num_©Œ ; 336  i = 0; i < p_v®s -> num_©Œ ; i++) { 337 cmd -> ©Œs [ i ]. ©Œ = p_v®s -> ©Œ_ids [i]; 338 cmd -> ©Œs [ i ]. v®ue = p_v®s -> ©Œ_v®ues [i]; 341  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , 342 HAL_OP_AVRCP_GET_PLAYER_ATTRS , 343 Ën , cmd , NULL , NULL, NULL); 344 } } 346  $wr™e_‹xt ( ušt8_t * ±r , ušt8_ˆ id , ušt8_ˆ* ‹xt , size_t * Ën ) 348  h®_avrý_¶ay”_£‰šg_‹xt * v®ue = (*è ±r ; 349 size_t ©Œ_Ën = (* v®ue ); 351 ià( ©Œ_Ën + * Ën > IPC_MTU ) 354 v®ue -> id = id; 355 v®ue -> Ën = `¡ºËn ((cÚ¡ *è ‹xt , BTRC_MAX_ATTR_STR_LEN ); 357 * Ën +ð ©Œ_Ën ; 359 ià( v®ue -> Ën + *ËÀ> IPC_MTU ) 360 v®ue -> Ën = IPC_MTU - *len; 362 `memýy ( v®ue -> ‹xt ,ext, v®ue-> Ën ); 364 * Ën +ð v®ue ->len; 366  ©Œ_Ën + v®ue -> Ën ; 367 } } 369  ušt8_t $wr™e_¶ay”_£‰šg_‹xt ( ušt8_t * ±r , ušt8_ˆ num_©Œ , 370 bŒc_¶ay”_£‰šg_‹xt_t * p_©Œs , 371 size_t * Ën ) 373  i ; 375  i = 0; i < num_©Œ && * Ën < IPC_MTU ; i++) { 376  »t ; 378 »t = `wr™e_‹xt ( ±r , p_©Œs [ i ]. id ,…_©Œs[i]. ‹xt , Ën ); 379 ià( »t == 0) 382 ±r +ð »t ; 385  i ; 386 } } 388  bt_¡©us_t $g‘_¶ay”_­p_©Œ_‹xt_r¥ ( num_©Œ , 389 bŒc_¶ay”_£‰šg_‹xt_t * p_©Œs ) 391  buf [ IPC_MTU ]; 392  h®_cmd_avrý_g‘_¶ay”_©Œs_‹xt * cmd = (*è buf ; 393 ušt8_t * ±r ; 394 size_t Ën ; 396 `DBG (""); 398 ià(! `š‹rçû_»ady ()) 399  BT_STATUS_NOT_READY ; 401 ià( num_©Œ < 0 ||‚um_©Œ > BTRC_MAX_APP_SETTINGS ) 402  BT_STATUS_PARM_INVALID ; 404 Ën = (* cmd ); 405 ±r = ( ušt8_t *è& cmd -> ©Œs [0]; 406 cmd -> numb” = `wr™e_¶ay”_£‰šg_‹xt ( ±r , num_©Œ , p_©Œs , & Ën ); 408  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , 409 HAL_OP_AVRCP_GET_PLAYER_ATTRS_TEXT , 410 Ën , cmd , NULL , NULL, NULL); 411 } } 413  bt_¡©us_t $g‘_¶ay”_­p_v®ue_‹xt_r¥ ( num_v® , 414 bŒc_¶ay”_£‰šg_‹xt_t * p_v®s ) 416  buf [ IPC_MTU ]; 417  h®_cmd_avrý_g‘_¶ay”_v®ues_‹xt * cmd = (*è buf ; 418 ušt8_t * ±r ; 419 size_t Ën ; 421 `DBG (""); 423 ià(! `š‹rçû_»ady ()) 424  BT_STATUS_NOT_READY ; 426 ià( num_v® < 0) 427  BT_STATUS_PARM_INVALID ; 429 Ën = (* cmd ); 430 ±r = ( ušt8_t *è& cmd -> v®ues [0]; 431 cmd -> numb” = `wr™e_¶ay”_£‰šg_‹xt ( ±r , num_v® , p_v®s , & Ën ); 433  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , 434 HAL_OP_AVRCP_GET_PLAYER_VALUES_TEXT , 435 Ën , cmd , NULL , NULL, NULL); 436 } } 438  ušt8_t $wr™e_–em’t_©Œ_‹xt ( ušt8_t * ±r , ušt8_ˆ num_©Œ , 439 bŒc_–em’t_©Œ_v®_t * p_©Œs , 440 size_t * Ën ) 442  i ; 444  i = 0; i < num_©Œ && * Ën < IPC_MTU ; i++) { 445  »t ; 447 »t = `wr™e_‹xt ( ±r , p_©Œs [ i ]. ©Œ_id ,…_©Œs[i]. ‹xt , Ën ); 448 ià( »t == 0) 451 ±r +ð »t ; 454  i ; 455 } } 457  bt_¡©us_t $g‘_–em’t_©Œ_r¥ ( ušt8_t num_©Œ , 458 bŒc_–em’t_©Œ_v®_t * p_©Œs ) 460  buf [ IPC_MTU ]; 461  h®_cmd_avrý_g‘_–em’t_©Œs_‹xt * cmd = (*è buf ; 462 size_t Ën ; 463 ušt8_t * ±r ; 465 `DBG (""); 467 ià(! `š‹rçû_»ady ()) 468  BT_STATUS_NOT_READY ; 470 Ën = (* cmd ); 471 ±r = ( ušt8_t *è& cmd -> v®ues [0]; 472 cmd -> numb” = `wr™e_–em’t_©Œ_‹xt ( ±r , num_©Œ , p_©Œs , & Ën ); 474  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , 475 HAL_OP_AVRCP_GET_ELEMENT_ATTRS_TEXT , 476 Ën , cmd , NULL , NULL, NULL); 477 } } 479  bt_¡©us_t $£t_¶ay”_­p_v®ue_r¥ ( bŒc_¡©us_t r¥_¡©us ) 481  h®_cmd_avrý_£t_¶ay”_©Œs_v®ue cmd ; 483 `DBG (""); 485 ià(! `š‹rçû_»ady ()) 486  BT_STATUS_NOT_READY ; 488 cmd . ¡©us = r¥_¡©us ; 490  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , 491 HAL_OP_AVRCP_SET_PLAYER_ATTRS_VALUE , 492 ( cmd ), &cmd, NULL , NULL, NULL); 493 } } 495  bt_¡©us_t $¶ay_¡©us_chªged_r¥ ( bŒc_nÙifiÿtiÚ_ty³_t ty³ , 496 bŒc_¶ay_¡©us_t * ¶ay_¡©us ) 498  buf [ IPC_MTU ]; 499  h®_cmd_avrý_»gi¡”_nÙifiÿtiÚ * cmd = (*è buf ; 500 size_t Ën ; 502 cmd -> ev’t = BTRC_EVT_PLAY_STATUS_CHANGED ; 503 cmd -> ty³ =ype; 504 cmd -> Ën = 1; 505 `memýy ( cmd -> d©a , ¶ay_¡©us , cmd-> Ën ); 507 Ën = (* cmd ) + cmd->len; 509  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , 510 HAL_OP_AVRCP_REGISTER_NOTIFICATION , 511 Ën , cmd , NULL , NULL, NULL); 512 } } 514  bt_¡©us_t $Œack_chªge_r¥ ( bŒc_nÙifiÿtiÚ_ty³_t ty³ , 515 bŒc_uid_t * Œack ) 517  buf [ IPC_MTU ]; 518  h®_cmd_avrý_»gi¡”_nÙifiÿtiÚ * cmd = (*è buf ; 519 size_t Ën ; 521 cmd -> ev’t = BTRC_EVT_TRACK_CHANGE ; 522 cmd -> ty³ =ype; 523 cmd -> Ën = (* Œack ); 524 `memýy ( cmd -> d©a , Œack , cmd-> Ën ); 526 Ën = (* cmd ) + cmd->len; 528  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , 529 HAL_OP_AVRCP_REGISTER_NOTIFICATION , 530 Ën , cmd , NULL , NULL, NULL); 531 } } 533  bt_¡©us_t $Œack_»ached_’d_r¥ ( bŒc_nÙifiÿtiÚ_ty³_t ty³ ) 535  h®_cmd_avrý_»gi¡”_nÙifiÿtiÚ cmd ; 537 cmd . ev’t = BTRC_EVT_TRACK_REACHED_END ; 538 cmd . ty³ =ype; 539 cmd . Ën = 0; 541  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , 542 HAL_OP_AVRCP_REGISTER_NOTIFICATION , 543 ( cmd ), &cmd, NULL , NULL, NULL); 544 } } 546  bt_¡©us_t $Œack_»ached_¡¬t_r¥ ( bŒc_nÙifiÿtiÚ_ty³_t ty³ ) 548  h®_cmd_avrý_»gi¡”_nÙifiÿtiÚ cmd ; 550 cmd . ev’t = BTRC_EVT_TRACK_REACHED_START ; 551 cmd . ty³ =ype; 552 cmd . Ën = 0; 554  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , 555 HAL_OP_AVRCP_REGISTER_NOTIFICATION , 556 ( cmd ), &cmd, NULL , NULL, NULL); 557 } } 559  bt_¡©us_t $¶ay_pos_chªged_r¥ ( bŒc_nÙifiÿtiÚ_ty³_t ty³ , 560 ušt32_t * sÚg_pos ) 562  buf [ IPC_MTU ]; 563  h®_cmd_avrý_»gi¡”_nÙifiÿtiÚ * cmd = (*è buf ; 564 size_t Ën ; 566 cmd -> ev’t = BTRC_EVT_PLAY_POS_CHANGED ; 567 cmd -> ty³ =ype; 568 cmd -> Ën = (* sÚg_pos ); 569 `memýy ( cmd -> d©a , sÚg_pos , cmd-> Ën ); 571 Ën = (* cmd ) + cmd->len; 573  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , 574 HAL_OP_AVRCP_REGISTER_NOTIFICATION , 575 Ën , cmd , NULL , NULL, NULL); 576 } } 578  bt_¡©us_t $£‰šgs_chªged_r¥ ( bŒc_nÙifiÿtiÚ_ty³_t ty³ , 579 bŒc_¶ay”_£‰šgs_t * ¶ay”_£‰šg ) 581  buf [ IPC_MTU ]; 582  h®_cmd_avrý_»gi¡”_nÙifiÿtiÚ * cmd = (*è buf ; 583  h®_avrý_¶ay”_©Œ_v®ue * ©Œs ; 584 size_t Ën , ·¿m_Ën ; 585  i ; 587 ·¿m_Ën = ¶ay”_£‰šg -> num_©Œ * (* ©Œs ); 588 Ën = (* cmd è+ ·¿m_Ën ; 590 ià( Ën > IPC_MTU ) 591  BT_STATUS_PARM_INVALID ; 593 cmd -> ev’t = BTRC_EVT_APP_SETTINGS_CHANGED ; 594 cmd -> ty³ =ype; 595 cmd -> Ën = ·¿m_Ën ; 597 ©Œs = ( h®_avrý_¶ay”_©Œ_v®ue *è& cmd -> d©a [0]; 598  i = 0; i < ¶ay”_£‰šg -> num_©Œ ; i++) { 599 ©Œs [ i ]. ©Œ = ¶ay”_£‰šg -> ©Œ_ids [i]; 600 ©Œs [ i ]. v®ue = ¶ay”_£‰šg -> ©Œ_v®ues [i]; 603  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , 604 HAL_OP_AVRCP_REGISTER_NOTIFICATION , 605 Ën , cmd , NULL , NULL, NULL); 606 } } 608  bt_¡©us_t $»gi¡”_nÙifiÿtiÚ_r¥ ( bŒc_ev’t_id_t ev’t_id , 609 bŒc_nÙifiÿtiÚ_ty³_t ty³ , 610 bŒc_»gi¡”_nÙifiÿtiÚ_t * p_·¿m ) 612 `DBG (""); 614 ià(! `š‹rçû_»ady ()) 615  BT_STATUS_NOT_READY ; 617  ev’t_id ) { 618  BTRC_EVT_PLAY_STATUS_CHANGED : 619  `¶ay_¡©us_chªged_r¥ ( ty³ , & p_·¿m -> ¶ay_¡©us ); 620  BTRC_EVT_TRACK_CHANGE : 621  `Œack_chªge_r¥ ( ty³ , & p_·¿m -> Œack ); 622  BTRC_EVT_TRACK_REACHED_END : 623  `Œack_»ached_’d_r¥ ( ty³ ); 624  BTRC_EVT_TRACK_REACHED_START : 625  `Œack_»ached_¡¬t_r¥ ( ty³ ); 626  BTRC_EVT_PLAY_POS_CHANGED : 627  `¶ay_pos_chªged_r¥ ( ty³ , & p_·¿m -> sÚg_pos ); 628  BTRC_EVT_APP_SETTINGS_CHANGED : 629  `£‰šgs_chªged_r¥ ( ty³ , & p_·¿m -> ¶ay”_£‰šg ); 631  BT_STATUS_PARM_INVALID ; 633 } } 635  bt_¡©us_t $£t_vÞume ( ušt8_t vÞume ) 637  h®_cmd_avrý_£t_vÞume cmd ; 639 `DBG (""); 641 ià(! `š‹rçû_»ady ()) 642  BT_STATUS_NOT_READY ; 644 cmd . v®ue = vÞume ; 646  `h®_c_cmd ( HAL_SERVICE_ID_AVRCP , HAL_OP_AVRCP_SET_VOLUME , 647 ( cmd ), &cmd, NULL , NULL, NULL); 648 } } 650  $þ—nup () 652  h®_cmd_uÄegi¡”_moduË cmd ; 654 `DBG (""); 656 ià(! `š‹rçû_»ady ()) 659 cmd . £rviû_id = HAL_SERVICE_ID_AVRCP ; 661 `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_UNREGISTER_MODULE , 662 ( cmd ), &cmd, NULL , NULL, NULL); 664 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_AVRCP ); 666 cbs = NULL ; 667 } } 669  bŒc_š‹rçû_t giçû = { 670 . size = ( içû ), 671 . gš™ = š™ , 672 . gg‘_¶ay_¡©us_r¥ = g‘_¶ay_¡©us_r¥ , 673 . gli¡_¶ay”_­p_©Œ_r¥ = li¡_¶ay”_­p_©Œ_r¥ , 674 . gli¡_¶ay”_­p_v®ue_r¥ = li¡_¶ay”_­p_v®ue_r¥ , 675 . gg‘_¶ay”_­p_v®ue_r¥ = g‘_¶ay”_­p_v®ue_r¥ , 676 . gg‘_¶ay”_­p_©Œ_‹xt_r¥ = g‘_¶ay”_­p_©Œ_‹xt_r¥ , 677 . gg‘_¶ay”_­p_v®ue_‹xt_r¥ = g‘_¶ay”_­p_v®ue_‹xt_r¥ , 678 . gg‘_–em’t_©Œ_r¥ = g‘_–em’t_©Œ_r¥ , 679 . g£t_¶ay”_­p_v®ue_r¥ = £t_¶ay”_­p_v®ue_r¥ , 680 . g»gi¡”_nÙifiÿtiÚ_r¥ = »gi¡”_nÙifiÿtiÚ_r¥ , 681 . g£t_vÞume = £t_vÞume , 682 . gþ—nup = þ—nup 685 bŒc_š‹rçû_t * $bt_g‘_avrý_š‹rçû () 687  & içû ; 688 } } @android/hal-bluetooth.c 18  ~<¡dio.h > 19  ~<¡dlib.h > 20  ~<¡dboÞ.h > 21  ~<¡ršg.h > 23  ~ 25  ~"h®-log.h " 26  ~"h®.h " 27  ~"h®-msg.h " 28  ~"c-commÚ.h " 29  ~"h®-c.h " 30  ~"h®-utžs.h " 32 cÚ¡ bt_ÿÎbacks_t * gbt_h®_cbacks = NULL ; 34  #’um_´Ý_to_h® ( ´Ý , h®_´Ý , ty³ ) do { \ 35  ty³ e ; \ 36 ´Ý . v® = & e ; \ 37 ´Ý . Ën = ( e ); \ 38 e = *(( ušt8_t *è( h®_´Ý -> v® )); \ 39 } 0) ) 41  #’um_´Ý_äom_h® ( ´Ý , h®_Ën , h®_v® , ’um_ty³ ) do { \ 42 ’um_ty³ e ; \ 43 ià( ´Ý -> Ën !ð( e )) { \ 44 `”rÜ ("invalid HAL…roperty %u (%u vs %zu),‡borting ", \ 45 ´Ý -> ty³ ,…rÝ-> Ën , ( e )); \ 46 `ex™ ( EXIT_FAILURE ); \ 48 `memýy (& e , ´Ý -> v® , (e)); \ 49 *(( ušt8_t *è h®_v® èð e ; \ 50 * h®_Ën = 1; \ 51 } 0) ) 53  $hªdË_ad­‹r_¡©e_chªged (* buf , ušt16_t Ën ,  fd ) 55  h®_ev_ad­‹r_¡©e_chªged * ev = buf ; 57 `DBG ("¡©e: %s", `bt_¡©e_t2¡r ( ev -> ¡©e )); 59 ià( bt_h®_cbacks -> ad­‹r_¡©e_chªged_cb ) 60 bt_h®_cbacks -> `ad­‹r_¡©e_chªged_cb ( ev -> ¡©e ); 61 } } 63  $ad­‹r_´Ýs_to_h® ( bt_´Ý”ty_t * £nd_´Ýs , 64  h®_´Ý”ty * ´Ý , 65 ušt8_t num_´Ýs , ušt16_t Ën ) 67 * buf = ´Ý ; 68 ušt8_t i ; 70  i = 0; i < num_´Ýs ; i++) { 71 ià((* ´Ý è+…rÝ-> Ën >†en) { 72 `”rÜ ("invalid‡dapter…roperties(%zu > %u),‡borting", 73 (* ´Ý è+…rÝ-> Ën ,†en); 74 `ex™ ( EXIT_FAILURE ); 77 £nd_´Ýs [ i ]. ty³ = ´Ý ->type; 79  ´Ý -> ty³ ) { 80  HAL_PROP_ADAPTER_TYPE : 81 `’um_´Ý_to_h® ( £nd_´Ýs [ i ], ´Ý , 82 bt_deviû_ty³_t ); 84  HAL_PROP_ADAPTER_SCAN_MODE : 85 `’um_´Ý_to_h® ( £nd_´Ýs [ i ], ´Ý , 86 bt_sÿn_mode_t ); 88  HAL_PROP_ADAPTER_SERVICE_REC : 90 £nd_´Ýs [ i ]. Ën = ´Ý ->len; 91 £nd_´Ýs [ i ]. v® = ´Ý ->val; 95 `DBG ("´Ý[%d]: %s", i , `brÝ”ty2¡r (& £nd_´Ýs [i])); 97 Ën -ð(* ´Ý ) +…rop->len; 98 buf +ð(* ´Ý è+…rÝ-> Ën ; 99 ´Ý = buf ; 102 ià(! Ën ) 105 `”rÜ ("šv®id‡d­‹¸´Ý”t› (%u by‹ Ëá),‡bÜtšg", Ën ); 106 `ex™ ( EXIT_FAILURE ); 107 } } 109  $ad­‹r_´Ý_äom_h® (cÚ¡ bt_´Ý”ty_t * ´Ý”ty , ušt8_t * ty³ , 110 ušt16_t * Ën , * v® ) 113 * ty³ = ´Ý”ty ->type; 115  ´Ý”ty -> ty³ ) { 116  HAL_PROP_ADAPTER_SCAN_MODE : 117 `’um_´Ý_äom_h® ( ´Ý”ty , Ën , v® , bt_sÿn_mode_t ); 119  BT_PROPERTY_BDNAME : 120  BT_PROPERTY_BDADDR : 121  BT_PROPERTY_UUIDS : 122  BT_PROPERTY_CLASS_OF_DEVICE : 123  BT_PROPERTY_TYPE_OF_DEVICE : 124  BT_PROPERTY_SERVICE_RECORD : 125  BT_PROPERTY_ADAPTER_BONDED_DEVICES : 126  BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT : 127  BT_PROPERTY_REMOTE_FRIENDLY_NAME : 128  BT_PROPERTY_REMOTE_RSSI : 129  BT_PROPERTY_REMOTE_VERSION_INFO : 130  BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP : 131 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 132  BT_PROPERTY_LOCAL_LE_FEATURES : 135 * Ën = ´Ý”ty ->len; 136 `memýy ( v® , ´Ý”ty ->v®,…rÝ”ty-> Ën ); 139 } } 141  $deviû_´Ýs_to_h® ( bt_´Ý”ty_t * £nd_´Ýs , 142  h®_´Ý”ty * ´Ý , ušt8_t num_´Ýs , 143 ušt16_t Ën ) 145 * buf = ´Ý ; 146 ušt8_t i ; 148  i = 0; i < num_´Ýs ; i++) { 149 ià((* ´Ý è+…rÝ-> Ën >†en) { 150 `”rÜ ("invalid device…roperties (%zu > %u),‡borting", 151 (* ´Ý è+…rÝ-> Ën ,†en); 152 `ex™ ( EXIT_FAILURE ); 155 £nd_´Ýs [ i ]. ty³ = ´Ý ->type; 157  ´Ý -> ty³ ) { 158  HAL_PROP_DEVICE_TYPE : 159 `’um_´Ý_to_h® ( £nd_´Ýs [ i ], ´Ý , 160 bt_deviû_ty³_t ); 162  HAL_PROP_DEVICE_VERSION_INFO : 164  bt_»mÙe_v”siÚ_t e ; 165 cÚ¡  h®_´Ý_deviû_šfo * p ; 167 £nd_´Ýs [ i ]. v® = & e ; 168 £nd_´Ýs [ i ]. Ën = ( e ); 170 p = ( h®_´Ý_deviû_šfo *è ´Ý -> v® ; 172 e . mªuçùu»r = p ->manufacturer; 173 e . sub_v” = p -> sub_v”siÚ ; 174 e . v”siÚ = p ->version; 177  HAL_PROP_DEVICE_SERVICE_REC : 179  bt_£rviû_»cÜd_t e ; 180 cÚ¡  h®_´Ý_deviû_£rviû_»c * p ; 182 £nd_´Ýs [ i ]. v® = & e ; 183 £nd_´Ýs [ i ]. Ën = ( e ); 185 p = ( h®_´Ý_deviû_£rviû_»c *è ´Ý -> v® ; 187 `mem£t (& e , 0, (e)); 188 `memýy (& e . chªÃl , & p ->channel, (e.channel)); 189 `memýy ( e . uuid . uu , p ->uuid, (e.uuid.uu)); 190 `memýy ( e . Çme , p ->Çme,…-> Çme_Ën ); 194 £nd_´Ýs [ i ]. Ën = ´Ý ->len; 195 £nd_´Ýs [ i ]. v® = ´Ý ->val; 199 Ën -ð(* ´Ý ) +…rop->len; 200 buf +ð(* ´Ý è+…rÝ-> Ën ; 201 ´Ý = buf ; 203 `DBG ("´Ý[%d]: %s", i , `brÝ”ty2¡r (& £nd_´Ýs [i])); 206 ià(! Ën ) 209 `”rÜ ("šv®id deviû…rÝ”t› (%u by‹ Ëá),‡bÜtšg", Ën ); 210 `ex™ ( EXIT_FAILURE ); 211 } } 213  $hªdË_ad­‹r_´Ýs_chªged (* buf , ušt16_t Ën ,  fd ) 215  h®_ev_ad­‹r_´Ýs_chªged * ev = buf ; 216 bt_´Ý”ty_t ´Ýs [ ev -> num_´Ýs ]; 218 `DBG (""); 220 ià(! bt_h®_cbacks -> ad­‹r_´Ý”t›s_cb ) 223 Ën -ð(* ev ); 224 `ad­‹r_´Ýs_to_h® ( ´Ýs , ev ->´Ýs,ƒv-> num_´Ýs , Ën ); 226 bt_h®_cbacks -> `ad­‹r_´Ý”t›s_cb ( ev -> ¡©us ,ƒv-> num_´Ýs , ´Ýs ); 227 } } 229  $hªdË_bÚd_¡©e_chªge (* buf , ušt16_t Ën ,  fd ) 231  h®_ev_bÚd_¡©e_chªged * ev = buf ; 232 bt_bdaddr_t * addr = (bt_bdaddr_ˆ*è ev -> bdaddr ; 234 `DBG ("¡©%u", ev -> ¡©e ); 236 ià( bt_h®_cbacks -> bÚd_¡©e_chªged_cb ) 237 bt_h®_cbacks -> `bÚd_¡©e_chªged_cb ( ev -> ¡©us , addr , 238 ev -> ¡©e ); 239 } } 241  $hªdË_pš_»que¡ (* buf , ušt16_t Ën ,  fd ) 243  h®_ev_pš_»que¡ * ev = buf ; 245 bt_bdaddr_t * addr = (bt_bdaddr_ˆ*è ev -> bdaddr ; 246 bt_bdÇme_t * Çme = (bt_bdÇme_ˆ*è ev ->name; 248 `DBG (""); 250 ià( bt_h®_cbacks -> pš_»que¡_cb ) 251 bt_h®_cbacks -> `pš_»que¡_cb ( addr , Çme , ev -> þass_of_dev ); 252 } } 254  $hªdË_s¥_»que¡ (* buf , ušt16_t Ën ,  fd ) 256  h®_ev_s¥_»que¡ * ev = buf ; 258 bt_bdaddr_t * addr = (bt_bdaddr_ˆ*è ev -> bdaddr ; 259 bt_bdÇme_t * Çme = (bt_bdÇme_ˆ*è ev ->name; 261 `DBG (""); 263 ià( bt_h®_cbacks -> s¥_»que¡_cb ) 264 bt_h®_cbacks -> `s¥_»que¡_cb ( addr , Çme , ev -> þass_of_dev , 265 ev -> ·œšg_v¬ŸÁ , 266 ev -> ·sskey ); 267 } } 269  $bt_th»ad_assocŸ‹ () 271 ià( bt_h®_cbacks -> th»ad_evt_cb ) 272 bt_h®_cbacks -> `th»ad_evt_cb ( ASSOCIATE_JVM ); 273 } } 275  $bt_th»ad_di§ssocŸ‹ () 277 ià( bt_h®_cbacks -> th»ad_evt_cb ) 278 bt_h®_cbacks -> `th»ad_evt_cb ( DISASSOCIATE_JVM ); 279 } } 281  boÞ $š‹rçû_»ady () 283  bt_h®_cbacks !ð NULL ; 284 } } 286  $hªdË_discov”y_¡©e_chªged (* buf , ušt16_t Ën ,  fd ) 288  h®_ev_discov”y_¡©e_chªged * ev = buf ; 290 `DBG (""); 292 ià( bt_h®_cbacks -> discov”y_¡©e_chªged_cb ) 293 bt_h®_cbacks -> `discov”y_¡©e_chªged_cb ( ev -> ¡©e ); 294 } } 296  $hªdË_deviû_found (* buf , ušt16_t Ën ,  fd ) 298  h®_ev_deviû_found * ev = buf ; 299 bt_´Ý”ty_t ´Ýs [ ev -> num_´Ýs ]; 301 `DBG (""); 303 ià(! bt_h®_cbacks -> deviû_found_cb ) 306 Ën -ð(* ev ); 307 `deviû_´Ýs_to_h® ( ´Ýs , ev ->´Ýs,ƒv-> num_´Ýs , Ën ); 309 bt_h®_cbacks -> `deviû_found_cb ( ev -> num_´Ýs , ´Ýs ); 310 } } 312  $hªdË_deviû_¡©e_chªged (* buf , ušt16_t Ën ,  fd ) 314  h®_ev_»mÙe_deviû_´Ýs * ev = buf ; 315 bt_´Ý”ty_t ´Ýs [ ev -> num_´Ýs ]; 317 `DBG (""); 319 ià(! bt_h®_cbacks -> »mÙe_deviû_´Ý”t›s_cb ) 322 Ën -ð(* ev ); 323 `deviû_´Ýs_to_h® ( ´Ýs , ev ->´Ýs,ƒv-> num_´Ýs , Ën ); 325 bt_h®_cbacks -> `»mÙe_deviû_´Ý”t›s_cb ( ev -> ¡©us , 326 ( bt_bdaddr_t *) ev -> bdaddr , 327 ev -> num_´Ýs , ´Ýs ); 328 } } 330  $hªdË_aþ_¡©e_chªged (* buf , ušt16_t Ën ,  fd ) 332  h®_ev_aþ_¡©e_chªged * ev = buf ; 333 bt_bdaddr_t * addr = (bt_bdaddr_ˆ*è ev -> bdaddr ; 335 `DBG ("¡©%u", ev -> ¡©e ); 337 ià( bt_h®_cbacks -> aþ_¡©e_chªged_cb ) 338 bt_h®_cbacks -> `aþ_¡©e_chªged_cb ( ev -> ¡©us , addr , 339 ev -> ¡©e ); 340 } } 342  $hªdË_dut_mode_»ûive (* buf , ušt16_t Ën ,  fd ) 344  h®_ev_dut_mode_»ûive * ev = buf ; 346 `DBG (""); 348 ià( Ën !ð(* ev ) +ƒv->len) { 349 `”rÜ ("šv®id duˆmod»ûivev’ˆ(%u),‡bÜtšg", Ën ); 350 `ex™ ( EXIT_FAILURE ); 353 ià( bt_h®_cbacks -> dut_mode_»cv_cb ) 354 bt_h®_cbacks -> `dut_mode_»cv_cb ( ev -> Ýcode ,ƒv-> d©a ,ƒv-> Ën ); 355 } } 357  $hªdË_Ë_‹¡_mode (* buf , ušt16_t Ën ,  fd ) 359  h®_ev_Ë_‹¡_mode * ev = buf ; 361 `DBG (""); 363 ià( bt_h®_cbacks -> Ë_‹¡_mode_cb ) 364 bt_h®_cbacks -> `Ë_‹¡_mode_cb ( ev -> ¡©us ,ƒv-> num_·ck‘s ); 365 } } 367  $hªdË_’”gy_šfo (* buf , ušt16_t Ën ,  fd ) 369 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 370  h®_ev_’”gy_šfo * ev = buf ; 371 bt_aùiv™y_’”gy_šfo šfo ; 373 `DBG (""); 375 šfo . ù¾_¡©e = ev ->ctrl_state; 376 šfo . ’”gy_u£d = ev ->energy_used; 377 šfo . idË_time = ev ->idle_time; 378 šfo . rx_time = ev ->rx_time; 379 šfo . ¡©us = ev ->status; 380 šfo . tx_time = ev -> ¡©us ; 382 ià( bt_h®_cbacks -> ’”gy_šfo_cb ) 383 bt_h®_cbacks -> `’”gy_šfo_cb (& šfo ); 385 } } 391 cÚ¡  h®_c_hªdËr gev_hªdËrs [] = { 393 { hªdË_ad­‹r_¡©e_chªged , çl£ , 394 ( h®_ev_ad­‹r_¡©e_chªged ) }, 396 { hªdË_ad­‹r_´Ýs_chªged , Œue , 397 ( h®_ev_ad­‹r_´Ýs_chªged ) + 398 ( h®_´Ý”ty ) }, 400 { hªdË_deviû_¡©e_chªged , Œue , 401 ( h®_ev_»mÙe_deviû_´Ýs ) + 402 ( h®_´Ý”ty ) }, 404 { hªdË_deviû_found , Œue , ( h®_ev_deviû_found ) + 405 ( h®_´Ý”ty ) }, 407 { hªdË_discov”y_¡©e_chªged , çl£ , 408 ( h®_ev_discov”y_¡©e_chªged ) }, 410 { hªdË_pš_»que¡ , çl£ , ( h®_ev_pš_»que¡ ) }, 412 { hªdË_s¥_»que¡ , çl£ , ( h®_ev_s¥_»que¡ ) }, 414 { hªdË_bÚd_¡©e_chªge , çl£ , 415 ( h®_ev_bÚd_¡©e_chªged ) }, 417 { hªdË_aþ_¡©e_chªged , çl£ , 418 ( h®_ev_aþ_¡©e_chªged ) }, 420 { hªdË_dut_mode_»ûive , Œue , 421 ( h®_ev_dut_mode_»ûive ) }, 423 { hªdË_Ë_‹¡_mode , çl£ , ( h®_ev_Ë_‹¡_mode ) }, 425 { hªdË_’”gy_šfo , çl£ , ( h®_ev_’”gy_šfo ) }, 428  ušt8_t $g‘_mode () 430  v®ue [ PROPERTY_VALUE_MAX ]; 432 ià( `g‘_cÚfig ("mode", v®ue , NULL ) > 0) { 433 ià(! `¡rÿ£cmp ( v®ue , "bredr")) 434  HAL_MODE_BREDR ; 436 ià(! `¡rÿ£cmp ( v®ue , "le")) 437  HAL_MODE_LE ; 440  HAL_MODE_DEFAULT ; 441 } } 443  ušt16_t $add_´Ý (cÚ¡ * ´Ý , ušt8_t ty³ , * buf ) 445  h®_cÚfig_´Ý * h®_´Ý = buf ; 447 h®_´Ý -> ty³ =ype; 448 h®_´Ý -> Ën = `¡¾’ ( ´Ý ) + 1; 449 `memýy ( h®_´Ý -> v® , ´Ý , h®_´Ý-> Ën ); 451  (* h®_´Ý è+ h®_´Ý-> Ën ; 452 } } 454  $£nd_cÚfigu¿tiÚ () 456  buf [ IPC_MTU ]; 457  h®_cmd_cÚfigu¿tiÚ * cmd = (*è buf ; 458  ´Ý [ PROPERTY_VALUE_MAX ]; 459 ušt16_t Ën = (* cmd ); 461 cmd -> num = 0; 463 ià( `g‘_cÚfig ("v’dÜ", ´Ý , "ro.product.manufacturer") > 0) { 464 Ën +ð `add_´Ý ( ´Ý , HAL_CONFIG_VENDOR , buf +†en); 465 cmd -> num ++; 468 ià( `g‘_cÚfig ("Çme", ´Ý , "ro.product.name") > 0) { 469 Ën +ð `add_´Ý ( ´Ý , HAL_CONFIG_NAME , buf +†en); 470 cmd -> num ++; 473 ià( `g‘_cÚfig ("mod–", ´Ý , "ro.product.model") > 0) { 474 Ën +ð `add_´Ý ( ´Ý , HAL_CONFIG_MODEL , buf +†en); 475 cmd -> num ++; 478 ià( `g‘_cÚfig ("£rŸÊo", ´Ý , "ro.serialno") > 0) { 479 Ën +ð `add_´Ý ( ´Ý , HAL_CONFIG_SERIAL_NUMBER , buf +†en); 480 cmd -> num ++; 483 ià( `g‘_cÚfig ("sy¡emid", ´Ý , NULL ) > 0) { 484 Ën +ð `add_´Ý ( ´Ý , HAL_CONFIG_SYSTEM_ID , buf +†en); 485 cmd -> num ++; 488 ià( `g‘_cÚfig ("²pid", ´Ý , NULL ) > 0) { 489 Ën +ð `add_´Ý ( ´Ý , HAL_CONFIG_PNP_ID , buf +†en); 490 cmd -> num ++; 493 ià( `g‘_cÚfig ("fw»v", ´Ý , "ro.build.version.release") > 0) { 494 Ën +ð `add_´Ý ( ´Ý , HAL_CONFIG_FW_REV , buf +†en); 495 cmd -> num ++; 498 ià( `g‘_cÚfig ("hw»v", ´Ý , "ro.board.platform") > 0) { 499 Ën +ð `add_´Ý ( ´Ý , HAL_CONFIG_HW_REV , buf +†en); 500 cmd -> num ++; 503  `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_CONFIGURATION , Ën , cmd , 504 NULL , NULL, NULL); 505 } } 507  $š™ ( bt_ÿÎbacks_t * ÿÎbacks ) 509  h®_cmd_»gi¡”_moduË cmd ; 510  ¡©us ; 512 `DBG (""); 514 ià( `š‹rçû_»ady ()) 515  BT_STATUS_DONE ; 517 `h®_c_»gi¡” ( HAL_SERVICE_ID_BLUETOOTH , ev_hªdËrs , 518 ( ev_hªdËrs )/(ev_handlers[0])); 520 ià(! `h®_c_š™ ( BLUEZ_HAL_SK_PATH , (BLUEZ_HAL_SK_PATH))) 521  BT_STATUS_FAIL ; 523 bt_h®_cbacks = ÿÎbacks ; 526 ià( `´Ý”ty_£t ("bluetooth.start", "daemon") < 0) { 527 `”rÜ ("Failedo set bluetooth.start=daemon"); 528 `h®_c_þ—nup (); 529 bt_h®_cbacks = NULL ; 530  BT_STATUS_FAIL ; 533 ià(! `h®_c_acû± ()) { 534 `h®_c_þ—nup (); 535 bt_h®_cbacks = NULL ; 536  BT_STATUS_FAIL ; 539 ¡©us = `£nd_cÚfigu¿tiÚ (); 540 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 541 `”rÜ ("Failedo send configuration"); 542  çž ; 545 cmd . £rviû_id = HAL_SERVICE_ID_BLUETOOTH ; 546 cmd . mode = `g‘_mode (); 547 cmd . max_þ›Ás = 1; 549 ¡©us = `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_REGISTER_MODULE , 550 ( cmd ), &cmd, NULL , NULL, NULL); 551 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 552 `”rÜ ("Failedo„egister 'bluetooth' service"); 553  çž ; 556 cmd . £rviû_id = HAL_SERVICE_ID_SOCKET ; 557 cmd . max_þ›Ás = 1; 559 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 560 cmd . mode = HAL_MODE_SOCKET_DYNAMIC_MAP ; 562 cmd . mode = HAL_MODE_DEFAULT ; 565 ¡©us = `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_REGISTER_MODULE , 566 ( cmd ), &cmd, NULL , NULL, NULL); 567 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 568 `”rÜ ("Failedo„egister 'socket' service"); 569  çž ; 572  ¡©us ; 574 çž : 575 `h®_c_þ—nup (); 576 bt_h®_cbacks = NULL ; 578 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_BLUETOOTH ); 580  ¡©us ; 581 } } 583  $’abË () 585 `DBG (""); 587 ià(! `š‹rçû_»ady ()) 588  BT_STATUS_NOT_READY ; 590  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_ENABLE , 0, NULL , 591 NULL , NULL, NULL); 592 } } 594  $di§bË () 596 `DBG (""); 598 ià(! `š‹rçû_»ady ()) 599  BT_STATUS_NOT_READY ; 601  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_DISABLE , 0, NULL , 602 NULL , NULL, NULL); 603 } } 605  $þ—nup () 607 `DBG (""); 609 ià(! `š‹rçû_»ady ()) 612 `h®_c_þ—nup (); 614 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_BLUETOOTH ); 616 bt_h®_cbacks = NULL ; 617 } } 619  $g‘_ad­‹r_´Ý”t›s () 621 `DBG (""); 623 ià(! `š‹rçû_»ady ()) 624  BT_STATUS_NOT_READY ; 626  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_GET_ADAPTER_PROPS , 627 0, NULL , NULL, NULL, NULL); 628 } } 630  $g‘_ad­‹r_´Ý”ty ( bt_´Ý”ty_ty³_t ty³ ) 632  h®_cmd_g‘_ad­‹r_´Ý cmd ; 634 `DBG ("´Ý: % (%d)", `bt_´Ý”ty_ty³_t2¡r ( ty³ ),ype); 636 ià(! `š‹rçû_»ady ()) 637  BT_STATUS_NOT_READY ; 640 cmd . ty³ =ype; 642  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_GET_ADAPTER_PROP , 643 ( cmd ), &cmd, NULL , NULL, NULL); 644 } } 646  $£t_ad­‹r_´Ý”ty (cÚ¡ bt_´Ý”ty_t * ´Ý”ty ) 648  buf [ IPC_MTU ]; 649  h®_cmd_£t_ad­‹r_´Ý * cmd = (*è buf ; 650 size_t Ën ; 652 `DBG ("´Ý: %s", `brÝ”ty2¡r ( ´Ý”ty )); 654 ià(! `š‹rçû_»ady ()) 655  BT_STATUS_NOT_READY ; 657 `ad­‹r_´Ý_äom_h® ( ´Ý”ty , & cmd -> ty³ , &cmd-> Ën , cmd-> v® ); 659 Ën = (* cmd ) + cmd->len; 661  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_SET_ADAPTER_PROP , 662 Ën , cmd , NULL , NULL, NULL); 663 } } 665  $g‘_»mÙe_deviû_´Ý”t›s ( bt_bdaddr_t * »mÙe_addr ) 667  h®_cmd_g‘_»mÙe_deviû_´Ýs cmd ; 669 `DBG ("bdaddr: %s", `bdaddr2¡r ( »mÙe_addr )); 671 ià(! `š‹rçû_»ady ()) 672  BT_STATUS_NOT_READY ; 674 `memýy ( cmd . bdaddr , »mÙe_addr , (cmd.bdaddr)); 676  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , 677 HAL_OP_GET_REMOTE_DEVICE_PROPS , 678 ( cmd ), &cmd, NULL , NULL, NULL); 679 } } 681  $g‘_»mÙe_deviû_´Ý”ty ( bt_bdaddr_t * »mÙe_addr , 682 bt_´Ý”ty_ty³_t ty³ ) 684  h®_cmd_g‘_»mÙe_deviû_´Ý cmd ; 686 `DBG ("bdaddr: % ´Ý: %s", `bdaddr2¡r ( »mÙe_addr ), 687 `bt_´Ý”ty_ty³_t2¡r ( ty³ )); 689 ià(! `š‹rçû_»ady ()) 690  BT_STATUS_NOT_READY ; 692 `memýy ( cmd . bdaddr , »mÙe_addr , (cmd.bdaddr)); 695 cmd . ty³ =ype; 697  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , 698 HAL_OP_GET_REMOTE_DEVICE_PROP , 699 ( cmd ), &cmd, NULL , NULL, NULL); 700 } } 702  $£t_»mÙe_deviû_´Ý”ty ( bt_bdaddr_t * »mÙe_addr , 703 cÚ¡ bt_´Ý”ty_t * ´Ý”ty ) 705  buf [ IPC_MTU ]; 706  h®_cmd_£t_»mÙe_deviû_´Ý * cmd = (*è buf ; 707 size_t Ën ; 709 `DBG ("bdaddr: % ´Ý: %s", `bdaddr2¡r ( »mÙe_addr ), 710 `bt_´Ý”ty_ty³_t2¡r ( ´Ý”ty -> ty³ )); 712 ià(! `š‹rçû_»ady ()) 713  BT_STATUS_NOT_READY ; 715 `memýy ( cmd -> bdaddr , »mÙe_addr , (cmd->bdaddr)); 718 cmd -> ty³ = ´Ý”ty ->type; 719 cmd -> Ën = ´Ý”ty ->len; 720 `memýy ( cmd -> v® , ´Ý”ty ->v®,…rÝ”ty-> Ën ); 722 Ën = (* cmd ) + cmd->len; 724  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , 725 HAL_OP_SET_REMOTE_DEVICE_PROP , 726 Ën , cmd , NULL , NULL, NULL); 727 } } 729  $g‘_»mÙe_£rviû_»cÜd ( bt_bdaddr_t * »mÙe_addr , bt_uuid_t * uuid ) 731  h®_cmd_g‘_»mÙe_£rviû_»c cmd ; 733 `DBG ("bdaddr: %s", `bdaddr2¡r ( »mÙe_addr )); 735 ià(! `š‹rçû_»ady ()) 736  BT_STATUS_NOT_READY ; 738 `memýy ( cmd . bdaddr , »mÙe_addr , (cmd.bdaddr)); 739 `memýy ( cmd . uuid , uuid, (cmd.uuid)); 741  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , 742 HAL_OP_GET_REMOTE_SERVICE_REC , 743 ( cmd ), &cmd, NULL , NULL, NULL); 744 } } 746  $g‘_»mÙe_£rviûs ( bt_bdaddr_t * »mÙe_addr ) 748  h®_cmd_g‘_»mÙe_£rviûs cmd ; 750 `DBG ("bdaddr: %s", `bdaddr2¡r ( »mÙe_addr )); 752 ià(! `š‹rçû_»ady ()) 753  BT_STATUS_NOT_READY ; 755 `memýy ( cmd . bdaddr , »mÙe_addr , (cmd.bdaddr)); 757  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_GET_REMOTE_SERVICES , 758 ( cmd ), &cmd, NULL , NULL, NULL); 759 } } 761  $¡¬t_discov”y () 763 `DBG (""); 765 ià(! `š‹rçû_»ady ()) 766  BT_STATUS_NOT_READY ; 768  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_START_DISCOVERY , 0, 769 NULL , NULL, NULL, NULL); 770 } } 772  $ÿnûl_discov”y () 774 `DBG (""); 776 ià(! `š‹rçû_»ady ()) 777  BT_STATUS_NOT_READY ; 779  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_CANCEL_DISCOVERY , 0, 780 NULL , NULL, NULL, NULL); 781 } } 783  $ü—‹_bÚd_»® (cÚ¡ bt_bdaddr_t * bd_addr ,  Œª¥Üt ) 785  h®_cmd_ü—‹_bÚd cmd ; 787 `DBG ("bdaddr: %s", `bdaddr2¡r ( bd_addr )); 789 ià(! `š‹rçû_»ady ()) 790  BT_STATUS_NOT_READY ; 792 cmd . Œª¥Üt =ransport; 794 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 796  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_CREATE_BOND , 797 ( cmd ), &cmd, NULL , NULL, NULL); 798 } } 800 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 801  $ü—‹_bÚd (cÚ¡ bt_bdaddr_t * bd_addr ,  Œª¥Üt ) 803  `ü—‹_bÚd_»® ( bd_addr , Œª¥Üt ); 804 } } 806  $ü—‹_bÚd (cÚ¡ bt_bdaddr_t * bd_addr ) 808  `ü—‹_bÚd_»® ( bd_addr , BT_TRANSPORT_UNKNOWN ); 809 } } 812  $ÿnûl_bÚd (cÚ¡ bt_bdaddr_t * bd_addr ) 814  h®_cmd_ÿnûl_bÚd cmd ; 816 `DBG ("bdaddr: %s", `bdaddr2¡r ( bd_addr )); 818 ià(! `š‹rçû_»ady ()) 819  BT_STATUS_NOT_READY ; 821 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 823  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_CANCEL_BOND , 824 ( cmd ), &cmd, NULL , NULL, NULL); 825 } } 827  $»move_bÚd (cÚ¡ bt_bdaddr_t * bd_addr ) 829  h®_cmd_»move_bÚd cmd ; 831 `DBG ("bdaddr: %s", `bdaddr2¡r ( bd_addr )); 833 ià(! `š‹rçû_»ady ()) 834  BT_STATUS_NOT_READY ; 836 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 838  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_REMOVE_BOND , 839 ( cmd ), &cmd, NULL , NULL, NULL); 840 } } 842  $pš_»¶y (cÚ¡ bt_bdaddr_t * bd_addr , ušt8_t acû± , 843 ušt8_t pš_Ën , bt_pš_code_t * pš_code ) 845  h®_cmd_pš_»¶y cmd ; 847 `DBG ("bdaddr: %s", `bdaddr2¡r ( bd_addr )); 849 ià(! `š‹rçû_»ady ()) 850  BT_STATUS_NOT_READY ; 852 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 853 cmd . acû± =‡ccept; 854 cmd . pš_Ën =…in_len; 855 `memýy ( cmd . pš_code ,…in_code, (cmd.pin_code)); 857  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_PIN_REPLY , 858 ( cmd ), &cmd, NULL , NULL, NULL); 859 } } 861  $s¥_»¶y (cÚ¡ bt_bdaddr_t * bd_addr , bt_s¥_v¬ŸÁ_t v¬ŸÁ , 862 ušt8_t acû± , ušt32_t ·sskey ) 864  h®_cmd_s¥_»¶y cmd ; 866 `DBG ("bdaddr: %s", `bdaddr2¡r ( bd_addr )); 868 ià(! `š‹rçû_»ady ()) 869  BT_STATUS_NOT_READY ; 871 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 873 cmd . s¥_v¬ŸÁ = v¬ŸÁ ; 874 cmd . acû± =‡ccept; 875 cmd . ·sskey =…asskey; 877  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_SSP_REPLY , 878 ( cmd ), &cmd, NULL , NULL, NULL); 879 } } 881 cÚ¡ * $g‘_´ofže_š‹rçû (cÚ¡ * ´ofže_id ) 883 `DBG ("%s", ´ofže_id ); 885 ià(! `š‹rçû_»ady ()) 886  NULL ; 888 ià(! `¡rcmp ( ´ofže_id , BT_PROFILE_SOCKETS_ID )) 889  `bt_g‘_sock‘_š‹rçû (); 891 ià(! `¡rcmp ( ´ofže_id , BT_PROFILE_HIDHOST_ID )) 892  `bt_g‘_hidho¡_š‹rçû (); 894 ià(! `¡rcmp ( ´ofže_id , BT_PROFILE_PAN_ID )) 895  `bt_g‘_·n_š‹rçû (); 897 ià(! `¡rcmp ( ´ofže_id , BT_PROFILE_ADVANCED_AUDIO_ID )) 898  `bt_g‘_a2dp_š‹rçû (); 900 ià(! `¡rcmp ( ´ofže_id , BT_PROFILE_AV_RC_ID )) 901  `bt_g‘_avrý_š‹rçû (); 903 ià(! `¡rcmp ( ´ofže_id , BT_PROFILE_HANDSFREE_ID )) 904  `bt_g‘_hªdsä“_š‹rçû (); 906 ià(! `¡rcmp ( ´ofže_id , BT_PROFILE_GATT_ID )) 907  `bt_g‘_g©t_š‹rçû (); 909 ià(! `¡rcmp ( ´ofže_id , BT_PROFILE_HEALTH_ID )) 910  `bt_g‘_h—Éh_š‹rçû (); 912 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 913 ià(! `¡rcmp ( ´ofže_id , BT_PROFILE_AV_RC_CTRL_ID )) 914  `bt_g‘_avrý_ù¾_š‹rçû (); 916 ià(! `¡rcmp ( ´ofže_id , BT_PROFILE_HANDSFREE_CLIENT_ID )) 917  `bt_g‘_hf_þ›Á_š‹rçû (); 919 ià(! `¡rcmp ( ´ofže_id , BT_PROFILE_MAP_CLIENT_ID )) 920  `bt_g‘_m­_þ›Á_š‹rçû (); 922 ià(! `¡rcmp ( ´ofže_id , BT_PROFILE_ADVANCED_AUDIO_SINK_ID )) 923  `bt_g‘_a2dp_sšk_š‹rçû (); 926  NULL ; 927 } } 929  $dut_mode_cÚfigu» ( ušt8_t ’abË ) 931  h®_cmd_dut_mode_cÚf cmd ; 933 `DBG ("’abË %u", ’abË ); 935 ià(! `š‹rçû_»ady ()) 936  BT_STATUS_NOT_READY ; 938 cmd . ’abË =ƒnable; 940  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_DUT_MODE_CONF , 941 ( cmd ), &cmd, NULL , NULL, NULL); 942 } } 944  $dut_mode_£nd ( ušt16_t Ýcode , ušt8_t * buf , ušt8_ˆ buf_Ën ) 946  cmd_buf [ IPC_MTU ]; 947  h®_cmd_dut_mode_£nd * cmd = (*è cmd_buf ; 948 size_t Ën ; 950 `DBG ("Ýcod%u†’ %u", Ýcode , buf_Ën ); 952 ià(! `š‹rçû_»ady ()) 953  BT_STATUS_NOT_READY ; 955 cmd -> Ýcode = opcode; 956 cmd -> Ën = buf_Ën ; 957 `memýy ( cmd -> d©a , buf , cmd-> Ën ); 959 Ën = (* cmd ) + cmd->len; 961  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_DUT_MODE_SEND , 962 Ën , cmd , NULL , NULL, NULL); 963 } } 965  $Ë_‹¡_mode ( ušt16_t Ýcode , ušt8_t * buf , ušt8_ˆ buf_Ën ) 967  cmd_buf [ IPC_MTU ]; 968  h®_cmd_Ë_‹¡_mode * cmd = (*è cmd_buf ; 969 size_t Ën ; 971 `DBG ("Ýcod%u†’ %u", Ýcode , buf_Ën ); 973 ià(! `š‹rçû_»ady ()) 974  BT_STATUS_NOT_READY ; 976 cmd -> Ýcode = opcode; 977 cmd -> Ën = buf_Ën ; 978 `memýy ( cmd -> d©a , buf , cmd-> Ën ); 980 Ën = (* cmd ) + cmd->len; 982  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_LE_TEST_MODE , 983 Ën , cmd , NULL , NULL, NULL); 984 } } 986  $cÚfig_hci_¢oÝ_log ( ušt8_t ’abË ) 988 cÚ¡ * ´Ý”ty ; 990 `DBG ("’abË %u", ’abË ); 992 ´Ý”ty = ’abË ? "bluetooth.start" : "bluetooth.stop"; 994 ià( `´Ý”ty_£t ( ´Ý”ty , "snoop") < 0) { 995 `”rÜ ("FažedØ£ˆ%s=¢oÝ", ´Ý”ty ); 996  BT_STATUS_FAIL ; 999  BT_STATUS_SUCCESS ; 1000 } } 1002 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 1003  $g‘_cÚÃùiÚ_¡©e (cÚ¡ bt_bdaddr_t * bd_addr ) 1005  h®_cmd_g‘_cÚÃùiÚ_¡©e cmd ; 1006  h®_r¥_g‘_cÚÃùiÚ_¡©e r¥ ; 1007 size_t r¥_Ën = ( r¥ ); 1008 bt_¡©us_t ¡©us ; 1010 `DBG ("bdaddr: %s", `bdaddr2¡r ( bd_addr )); 1012 ià(! `š‹rçû_»ady ()) 1015 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 1017 ¡©us = `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , 1018 HAL_OP_GET_CONNECTION_STATE , ( cmd ), &cmd, 1019 & r¥_Ën , & r¥ , NULL ); 1021 ià( ¡©us !ð BT_STATUS_SUCCESS ) 1024  r¥ . cÚÃùiÚ_¡©e ; 1025 } } 1027  $£t_os_ÿÎouts ( bt_os_ÿÎouts_t * ÿÎouts ) 1029 `DBG ("ÿÎouts: %p", ÿÎouts ); 1033  BT_STATUS_SUCCESS ; 1034 } } 1036  $»ad_’”gy_šfo () 1038 `DBG (""); 1040 ià(! `š‹rçû_»ady ()) 1041  BT_STATUS_NOT_READY ; 1043  `h®_c_cmd ( HAL_SERVICE_ID_BLUETOOTH , HAL_OP_READ_ENERGY_INFO , 0, 1044 NULL , NULL, NULL, NULL); 1045 } } 1048 cÚ¡ bt_š‹rçû_t gblu‘oÙh_if = { 1049 . size = ( bt_š‹rçû_t ), 1050 . gš™ = š™ , 1051 . g’abË = ’abË , 1052 . gdi§bË = di§bË , 1053 . gþ—nup = þ—nup , 1054 . gg‘_ad­‹r_´Ý”t›s = g‘_ad­‹r_´Ý”t›s , 1055 . gg‘_ad­‹r_´Ý”ty = g‘_ad­‹r_´Ý”ty , 1056 . g£t_ad­‹r_´Ý”ty = £t_ad­‹r_´Ý”ty , 1057 . gg‘_»mÙe_deviû_´Ý”t›s = g‘_»mÙe_deviû_´Ý”t›s , 1058 . gg‘_»mÙe_deviû_´Ý”ty = g‘_»mÙe_deviû_´Ý”ty , 1059 . g£t_»mÙe_deviû_´Ý”ty = £t_»mÙe_deviû_´Ý”ty , 1060 . gg‘_»mÙe_£rviû_»cÜd = g‘_»mÙe_£rviû_»cÜd , 1061 . gg‘_»mÙe_£rviûs = g‘_»mÙe_£rviûs , 1062 . g¡¬t_discov”y = ¡¬t_discov”y , 1063 . gÿnûl_discov”y = ÿnûl_discov”y , 1064 . gü—‹_bÚd = ü—‹_bÚd , 1065 . g»move_bÚd = »move_bÚd , 1066 . gÿnûl_bÚd = ÿnûl_bÚd , 1067 . gpš_»¶y = pš_»¶y , 1068 . gs¥_»¶y = s¥_»¶y , 1069 . gg‘_´ofže_š‹rçû = g‘_´ofže_š‹rçû , 1070 . gdut_mode_cÚfigu» = dut_mode_cÚfigu» , 1071 . gdut_mode_£nd = dut_mode_£nd , 1072 . gË_‹¡_mode = Ë_‹¡_mode , 1073 . gcÚfig_hci_¢oÝ_log = cÚfig_hci_¢oÝ_log , 1074 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 1075 . gg‘_cÚÃùiÚ_¡©e = g‘_cÚÃùiÚ_¡©e , 1076 . g£t_os_ÿÎouts = £t_os_ÿÎouts , 1077 . g»ad_’”gy_šfo = »ad_’”gy_šfo , 1081 cÚ¡ bt_š‹rçû_t * $g‘_blu‘oÙh_š‹rçû () 1083 `DBG (""); 1085  & blu‘oÙh_if ; 1086 } } 1088  $þo£_blu‘oÙh ( hw_deviû_t * deviû ) 1090 `DBG (""); 1092 `þ—nup (); 1094 `ä“ ( deviû ); 1097 } } 1099  $Ý’_blu‘oÙh (cÚ¡  hw_moduË_t * moduË , cÚ¡ * Çme , 1100  hw_deviû_t ** deviû ) 1102 blu‘oÙh_deviû_t * dev = `m®loc ((bluetooth_device_t)); 1104 `DBG (""); 1106 `mem£t ( dev , 0, ( blu‘oÙh_deviû_t )); 1107 dev -> commÚ . g = HARDWARE_DEVICE_TAG ; 1108 dev -> commÚ . v”siÚ = 0; 1109 dev -> commÚ . moduË = ( hw_moduË_t *) module; 1110 dev -> commÚ . þo£ = þo£_blu‘oÙh ; 1111 dev -> g‘_blu‘oÙh_š‹rçû = get_bluetooth_interface; 1113 * deviû = ( hw_deviû_t *è dev ; 1116 } } 1118  hw_moduË_m‘hods_t gblu‘oÙh_moduË_m‘hods = { 1119 . Ý’ = Ý’_blu‘oÙh , 1122  hw_moduË_t gHAL_MODULE_INFO_SYM = { 1123 . g = HARDWARE_MODULE_TAG , 1124 . gv”siÚ_majÜ = 1, 1125 . gv”siÚ_mšÜ = 0, 1126 . gid = BT_HARDWARE_MODULE_ID , 1127 . gÇme = "BlueZ Bluetooth stack", 1128 . gauthÜ = "Intel Corporation", 1129 . gm‘hods = & blu‘oÙh_moduË_m‘hods @android/hal-gatt.c 18  ~<¡dboÞ.h > 19  ~<¡ršg.h > 20  ~<¡dlib.h > 22  ~"h®-log.h " 23  ~"h®.h " 24  ~"h®-msg.h " 25  ~"c-commÚ.h " 26  ~"h®-c.h " 27  ~"h®-utžs.h " 29 cÚ¡ btg©t_ÿÎbacks_t * gcbs = NULL ; 31  boÞ $š‹rçû_»ady () 33  cbs !ð NULL ; 34 } } 36  $g©t_id_äom_h® ( btg©t_g©t_id_t * to , 37  h®_g©t_g©t_id * äom ) 39 `memýy (& to -> uuid , äom ->uuid, (to->uuid)); 40 to -> š¡_id = äom ->inst_id; 41 } } 43  $g©t_id_to_h® ( h®_g©t_g©t_id * to , btg©t_g©t_id_t * äom ) 45 `memýy ( to -> uuid , & äom ->uuid, (from->uuid)); 46 to -> š¡_id = äom ->inst_id; 47 } } 49  $¤vc_id_äom_h® ( btg©t_¤vc_id_t * to , 50  h®_g©t_¤vc_id * äom ) 52 `memýy (& to -> id . uuid , äom ->uuid, (to->id.uuid)); 53 to -> id . š¡_id = äom ->inst_id; 54 to -> is_´im¬y = äom ->is_primary; 55 } } 57  $¤vc_id_to_h® ( h®_g©t_¤vc_id * to , btg©t_¤vc_id_t * äom ) 59 `memýy ( to -> uuid , & äom -> id .uuid, (from->id.uuid)); 60 to -> š¡_id = äom -> id .inst_id; 61 to -> is_´im¬y = äom ->is_primary; 62 } } 66  $hªdË_»gi¡”_þ›Á (* buf , ušt16_t Ën ,  fd ) 68  h®_ev_g©t_þ›Á_»gi¡”_þ›Á * ev = buf ; 70 ià( cbs -> þ›Á -> »gi¡”_þ›Á_cb ) 71 cbs -> þ›Á -> `»gi¡”_þ›Á_cb ( ev -> ¡©us ,ƒv-> þ›Á_if , 72 ( bt_uuid_t *è ev -> ­p_uuid ); 73 } } 75  $hªdË_sÿn_»suÉ (* buf , ušt16_t Ën ,  fd ) 77  h®_ev_g©t_þ›Á_sÿn_»suÉ * ev = buf ; 78 ušt8_t ad [62]; 80 ià( Ën !ð(* ev ) +ƒv->len) { 81 `”rÜ ("gatt: invalid scan„esultƒvent,‡borting"); 82 `ex™ ( EXIT_FAILURE ); 86 `mem£t ( ad , 0, (ad)); 87 `memýy ( ad , ev -> adv_d©a ,ƒv-> Ën > (ad) ? (ad) :ƒv->len); 89 ià( cbs -> þ›Á -> sÿn_»suÉ_cb ) 90 cbs -> þ›Á -> `sÿn_»suÉ_cb (( bt_bdaddr_t *è ev -> bda ,ƒv-> rssi , 91 ad ); 92 } } 94  $hªdË_cÚÃù (* buf , ušt16_t Ën ,  fd ) 96  h®_ev_g©t_þ›Á_cÚÃù * ev = buf ; 98 ià( cbs -> þ›Á -> Ý’_cb ) 99 cbs -> þ›Á -> `Ý’_cb ( ev -> cÚn_id ,ƒv-> ¡©us ,ƒv-> þ›Á_if , 100 ( bt_bdaddr_t *è ev -> bda ); 101 } } 103  $hªdË_discÚÃù (* buf , ušt16_t Ën ,  fd ) 105  h®_ev_g©t_þ›Á_discÚÃù * ev = buf ; 107 ià( cbs -> þ›Á -> þo£_cb ) 108 cbs -> þ›Á -> `þo£_cb ( ev -> cÚn_id ,ƒv-> ¡©us ,ƒv-> þ›Á_if , 109 ( bt_bdaddr_t *è ev -> bda ); 110 } } 112  $hªdË_£¬ch_com¶‘e (* buf , ušt16_t Ën ,  fd ) 114  h®_ev_g©t_þ›Á_£¬ch_com¶‘e * ev = buf ; 116 ià( cbs -> þ›Á -> £¬ch_com¶‘e_cb ) 117 cbs -> þ›Á -> `£¬ch_com¶‘e_cb ( ev -> cÚn_id ,ƒv-> ¡©us ); 118 } } 120  $hªdË_£¬ch_»suÉ (* buf , ušt16_t Ën ,  fd ) 122  h®_ev_g©t_þ›Á_£¬ch_»suÉ * ev = buf ; 123 btg©t_¤vc_id_t ¤vc_id ; 125 `¤vc_id_äom_h® (& ¤vc_id , & ev ->srvc_id); 127 ià( cbs -> þ›Á -> £¬ch_»suÉ_cb ) 128 cbs -> þ›Á -> `£¬ch_»suÉ_cb ( ev -> cÚn_id , & ¤vc_id ); 129 } } 131  $hªdË_g‘_ch¬aù”i¡ic (* buf , ušt16_t Ën ,  fd ) 133  h®_ev_g©t_þ›Á_g‘_ch¬aù”i¡ic * ev = buf ; 134 btg©t_g©t_id_t ch¬_id ; 135 btg©t_¤vc_id_t ¤vc_id ; 137 `¤vc_id_äom_h® (& ¤vc_id , & ev ->srvc_id); 138 `g©t_id_äom_h® (& ch¬_id , & ev ->char_id); 140 ià( cbs -> þ›Á -> g‘_ch¬aù”i¡ic_cb ) 141 cbs -> þ›Á -> `g‘_ch¬aù”i¡ic_cb ( ev -> cÚn_id ,ƒv-> ¡©us , 142 & ¤vc_id , & ch¬_id , 143 ev -> ch¬_´Ý ); 144 } } 146  $hªdË_g‘_desütÜ (* buf , ušt16_t Ën ,  fd ) 148  h®_ev_g©t_þ›Á_g‘_desütÜ * ev = buf ; 149 btg©t_g©t_id_t desü_id ; 150 btg©t_g©t_id_t ch¬_id ; 151 btg©t_¤vc_id_t ¤vc_id ; 153 `¤vc_id_äom_h® (& ¤vc_id , & ev ->srvc_id); 154 `g©t_id_äom_h® (& ch¬_id , & ev ->char_id); 155 `g©t_id_äom_h® (& desü_id , & ev ->descr_id); 157 ià( cbs -> þ›Á -> g‘_desütÜ_cb ) 158 cbs -> þ›Á -> `g‘_desütÜ_cb ( ev -> cÚn_id ,ƒv-> ¡©us , 159 & ¤vc_id , & ch¬_id , & desü_id ); 160 } } 162  $hªdË_g‘_šþuded_£rviû (* buf , ušt16_t Ën ,  fd ) 164  h®_ev_g©t_þ›Á_g‘_šc_£rviû * ev = buf ; 165 btg©t_¤vc_id_t ¤vc_id ; 166 btg©t_¤vc_id_t šþ_¤vc_id ; 168 `¤vc_id_äom_h® (& ¤vc_id , & ev ->srvc_id); 169 `¤vc_id_äom_h® (& šþ_¤vc_id , & ev ->incl_srvc_id); 171 ià( cbs -> þ›Á -> g‘_šþuded_£rviû_cb ) 172 cbs -> þ›Á -> `g‘_šþuded_£rviû_cb ( ev -> cÚn_id ,ƒv-> ¡©us , 173 & ¤vc_id , 174 & šþ_¤vc_id ); 175 } } 177  $hªdË_»gi¡”_fÜ_nÙifiÿtiÚ (* buf , ušt16_t Ën ,  fd ) 179  h®_ev_g©t_þ›Á_»g_fÜ_nÙif * ev = buf ; 180 btg©t_g©t_id_t ch¬_id ; 181 btg©t_¤vc_id_t ¤vc_id ; 183 `¤vc_id_äom_h® (& ¤vc_id , & ev ->srvc_id); 184 `g©t_id_äom_h® (& ch¬_id , & ev ->char_id); 186 ià( cbs -> þ›Á -> »gi¡”_fÜ_nÙifiÿtiÚ_cb ) 187 cbs -> þ›Á -> `»gi¡”_fÜ_nÙifiÿtiÚ_cb ( ev -> cÚn_id , 188 ev -> »gi¡”ed , 189 ev -> ¡©us , 190 & ¤vc_id , 191 & ch¬_id ); 192 } } 194  $hªdË_nÙify (* buf , ušt16_t Ën ,  fd ) 196  h®_ev_g©t_þ›Á_nÙify * ev = buf ; 197 btg©t_nÙify_·¿ms_t ·¿ms ; 199 ià( Ën !ð(* ev ) +ƒv->len) { 200 `”rÜ ("gatt: invalid‚otifyƒvent,‡borting"); 201 `ex™ ( EXIT_FAILURE ); 204 `mem£t (& ·¿ms , 0, (params)); 205 `memýy ( ·¿ms . v®ue , ev ->v®ue,ƒv-> Ën ); 206 `memýy (& ·¿ms . bda , ev ->bda, (params.bda)); 208 `¤vc_id_äom_h® (& ·¿ms . ¤vc_id , & ev ->srvc_id); 209 `g©t_id_äom_h® (& ·¿ms . ch¬_id , & ev ->char_id); 211 ·¿ms . Ën = ev ->len; 212 ·¿ms . is_nÙify = ev ->is_notify; 214 ià( cbs -> þ›Á -> nÙify_cb ) 215 cbs -> þ›Á -> `nÙify_cb ( ev -> cÚn_id , & ·¿ms ); 216 } } 218  $hªdË_»ad_ch¬aù”i¡ic (* buf , ušt16_t Ën ,  fd ) 220  h®_ev_g©t_þ›Á_»ad_ch¬aù”i¡ic * ev = buf ; 221 btg©t_»ad_·¿ms_t ·¿ms ; 223 ià( Ën !ð(* ev è+ƒv-> d©a .len) { 224 `”rÜ ("gatt: invalid„ead characteristicƒvent,‡borting"); 225 `ex™ ( EXIT_FAILURE ); 228 `mem£t (& ·¿ms , 0, (params)); 230 `¤vc_id_äom_h® (& ·¿ms . ¤vc_id , & ev -> d©a .srvc_id); 231 `g©t_id_äom_h® (& ·¿ms . ch¬_id , & ev -> d©a .char_id); 232 `g©t_id_äom_h® (& ·¿ms . desü_id , & ev -> d©a .descr_id); 234 `memýy (& ·¿ms . v®ue .v®ue, ev -> d©a .v®ue,ƒv->d©a. Ën ); 236 ·¿ms . v®ue_ty³ = ev -> d©a .value_type; 237 ·¿ms . v®ue . Ën = ev -> d©a .len; 238 ·¿ms . ¡©us = ev -> d©a .status; 240 ià( cbs -> þ›Á -> »ad_ch¬aù”i¡ic_cb ) 241 cbs -> þ›Á -> `»ad_ch¬aù”i¡ic_cb ( ev -> cÚn_id ,ƒv-> ¡©us , 242 & ·¿ms ); 243 } } 245  $hªdË_wr™e_ch¬aù”i¡ic (* buf , ušt16_t Ën ,  fd ) 247  h®_ev_g©t_þ›Á_wr™e_ch¬aù”i¡ic * ev = buf ; 248 btg©t_wr™e_·¿ms_t ·¿ms ; 250 `mem£t (& ·¿ms , 0, (params)); 252 `¤vc_id_äom_h® (& ·¿ms . ¤vc_id , & ev -> d©a .srvc_id); 253 `g©t_id_äom_h® (& ·¿ms . ch¬_id , & ev -> d©a .char_id); 254 `g©t_id_äom_h® (& ·¿ms . desü_id , & ev -> d©a .descr_id); 256 ·¿ms . ¡©us = ev -> d©a .status; 258 ià( cbs -> þ›Á -> wr™e_ch¬aù”i¡ic_cb ) 259 cbs -> þ›Á -> `wr™e_ch¬aù”i¡ic_cb ( ev -> cÚn_id ,ƒv-> ¡©us , 260 & ·¿ms ); 261 } } 263  $hªdË_»ad_desütÜ (* buf , ušt16_t Ën ,  fd ) 265  h®_ev_g©t_þ›Á_»ad_desütÜ * ev = buf ; 266 btg©t_»ad_·¿ms_t ·¿ms ; 268 ià( Ën !ð(* ev è+ƒv-> d©a .len) { 269 `”rÜ ("gatt: invalid„ead descriptorƒvent,‡borting"); 270 `ex™ ( EXIT_FAILURE ); 273 `mem£t (& ·¿ms , 0, (params)); 275 `¤vc_id_äom_h® (& ·¿ms . ¤vc_id , & ev -> d©a .srvc_id); 276 `g©t_id_äom_h® (& ·¿ms . ch¬_id , & ev -> d©a .char_id); 277 `g©t_id_äom_h® (& ·¿ms . desü_id , & ev -> d©a .descr_id); 279 `memýy (& ·¿ms . v®ue .v®ue, ev -> d©a .v®ue,ƒv->d©a. Ën ); 281 ·¿ms . v®ue_ty³ = ev -> d©a .value_type; 282 ·¿ms . v®ue . Ën = ev -> d©a .len; 283 ·¿ms . ¡©us = ev -> d©a .status; 285 ià( cbs -> þ›Á -> »ad_desütÜ_cb ) 286 cbs -> þ›Á -> `»ad_desütÜ_cb ( ev -> cÚn_id ,ƒv-> ¡©us , 287 & ·¿ms ); 288 } } 290  $hªdË_wr™e_desütÜ (* buf , ušt16_t Ën ,  fd ) 292  h®_ev_g©t_þ›Á_wr™e_desütÜ * ev = buf ; 293 btg©t_wr™e_·¿ms_t ·¿ms ; 295 `mem£t (& ·¿ms , 0, (params)); 297 `¤vc_id_äom_h® (& ·¿ms . ¤vc_id , & ev -> d©a .srvc_id); 298 `g©t_id_äom_h® (& ·¿ms . ch¬_id , & ev -> d©a .char_id); 299 `g©t_id_äom_h® (& ·¿ms . desü_id , & ev -> d©a .descr_id); 301 ·¿ms . ¡©us = ev -> d©a .status; 303 ià( cbs -> þ›Á -> wr™e_desütÜ_cb ) 304 cbs -> þ›Á -> `wr™e_desütÜ_cb ( ev -> cÚn_id ,ƒv-> ¡©us , 305 & ·¿ms ); 306 } } 308  $hªdË_execu‹_wr™e (* buf , ušt16_t Ën ,  fd ) 310  h®_ev_g©t_þ›Á_exec_wr™e * ev = buf ; 312 ià( cbs -> þ›Á -> execu‹_wr™e_cb ) 313 cbs -> þ›Á -> `execu‹_wr™e_cb ( ev -> cÚn_id ,ƒv-> ¡©us ); 314 } } 316  $hªdË_»ad_»mÙe_rssi (* buf , ušt16_t Ën ,  fd ) 318  h®_ev_g©t_þ›Á_»ad_»mÙe_rssi * ev = buf ; 320 ià( cbs -> þ›Á -> »ad_»mÙe_rssi_cb ) 321 cbs -> þ›Á -> `»ad_»mÙe_rssi_cb ( ev -> þ›Á_if , 322 ( bt_bdaddr_t *è ev -> add»ss , 323 ev -> rssi ,ƒv-> ¡©us ); 324 } } 326  $hªdË_li¡’ (* buf , ušt16_t Ën ,  fd ) 328  h®_ev_g©t_þ›Á_li¡’ * ev = buf ; 330 ià( cbs -> þ›Á -> li¡’_cb ) 331 cbs -> þ›Á -> `li¡’_cb ( ev -> ¡©us ,ƒv-> £rv”_if ); 332 } } 336  $hªdË_»gi¡”_£rv” (* buf , ušt16_t Ën ,  fd ) 338  h®_ev_g©t_£rv”_»gi¡” * ev = buf ; 340 ià( cbs -> £rv” -> »gi¡”_£rv”_cb ) 341 cbs -> £rv” -> `»gi¡”_£rv”_cb ( ev -> ¡©us ,ƒv-> £rv”_if , 342 ( bt_uuid_t *è& ev -> uuid ); 343 } } 345  $hªdË_cÚÃùiÚ (* buf , ušt16_t Ën ,  fd ) 347  h®_ev_g©t_£rv”_cÚÃùiÚ * ev = buf ; 349 ià( cbs -> £rv” -> cÚÃùiÚ_cb ) 350 cbs -> £rv” -> `cÚÃùiÚ_cb ( ev -> cÚn_id ,ƒv-> £rv”_if , 351 ev -> cÚÃùed , 352 ( bt_bdaddr_t *è& ev -> bdaddr ); 353 } } 355  $hªdË_£rviû_added (* buf , ušt16_t Ën ,  fd ) 357  h®_ev_g©t_£rv”_£rviû_added * ev = buf ; 358 btg©t_¤vc_id_t ¤vc_id ; 360 `¤vc_id_äom_h® (& ¤vc_id , & ev ->srvc_id); 362 ià( cbs -> £rv” -> £rviû_added_cb ) 363 cbs -> £rv” -> `£rviû_added_cb ( ev -> ¡©us ,ƒv-> £rv”_if , 364 & ¤vc_id , ev -> ¤vc_hªdË ); 365 } } 367  $hªdË_šþuded_£rviû_added (* buf , ušt16_t Ën ,  fd ) 369  h®_ev_g©t_£rv”_šc_¤vc_added * ev = buf ; 371 ià( cbs -> £rv” -> šþuded_£rviû_added_cb ) 372 cbs -> £rv” -> `šþuded_£rviû_added_cb ( ev -> ¡©us , 373 ev -> £rv”_if , 374 ev -> ¤vc_hªdË , 375 ev -> šþ_¤vc_hªdË ); 376 } } 378  $hªdË_ch¬aù”i¡ic_added (* buf , ušt16_t Ën ,  fd ) 380  h®_ev_g©t_£rv”_ch¬aù”i¡ic_added * ev = buf ; 382 ià( cbs -> £rv” -> ch¬aù”i¡ic_added_cb ) 383 cbs -> £rv” -> `ch¬aù”i¡ic_added_cb ( ev -> ¡©us ,ƒv-> £rv”_if , 384 ( bt_uuid_t *è& ev -> uuid , 385 ev -> ¤vc_hªdË , 386 ev -> ch¬_hªdË ); 387 } } 389  $hªdË_desütÜ_added (* buf , ušt16_t Ën ,  fd ) 391  h®_ev_g©t_£rv”_desütÜ_added * ev = buf ; 393 ià( cbs -> £rv” -> desütÜ_added_cb ) 394 cbs -> £rv” -> `desütÜ_added_cb ( ev -> ¡©us ,ƒv-> £rv”_if , 395 ( bt_uuid_t *è& ev -> uuid , 396 ev -> ¤vc_hªdË , 397 ev -> desü_hªdË ); 398 } } 400  $hªdË_£rviû_¡¬‹d (* buf , ušt16_t Ën ,  fd ) 402  h®_ev_g©t_£rv”_£rviû_¡¬‹d * ev = buf ; 404 ià( cbs -> £rv” -> £rviû_¡¬‹d_cb ) 405 cbs -> £rv” -> `£rviû_¡¬‹d_cb ( ev -> ¡©us ,ƒv-> £rv”_if , 406 ev -> ¤vc_hªdË ); 407 } } 409  $hªdË_£rviû_¡Ý³d (* buf , ušt16_t Ën ,  fd ) 411  h®_ev_g©t_£rv”_£rviû_¡Ý³d * ev = buf ; 413 ià( cbs -> £rv” -> £rviû_¡Ý³d_cb ) 414 cbs -> £rv” -> `£rviû_¡Ý³d_cb ( ev -> ¡©us ,ƒv-> £rv”_if , 415 ev -> ¤vc_hªdË ); 416 } } 418  $hªdË_£rviû_d–‘ed (* buf , ušt16_t Ën ,  fd ) 420  h®_ev_g©t_£rv”_£rviû_d–‘ed * ev = buf ; 422 ià( cbs -> £rv” -> £rviû_d–‘ed_cb ) 423 cbs -> £rv” -> `£rviû_d–‘ed_cb ( ev -> ¡©us ,ƒv-> £rv”_if , 424 ev -> ¤vc_hªdË ); 425 } } 427  $hªdË_»que¡_»ad (* buf , ušt16_t Ën ,  fd ) 429  h®_ev_g©t_£rv”_»que¡_»ad * ev = buf ; 431 ià( cbs -> £rv” -> »que¡_»ad_cb ) 432 cbs -> £rv” -> `»que¡_»ad_cb ( ev -> cÚn_id ,ƒv-> Œªs_id , 433 ( bt_bdaddr_t *è& ev -> bdaddr , 434 ev -> ©Œ_hªdË ,ƒv-> off£t , 435 ev -> is_lÚg ); 436 } } 438  $hªdË_»que¡_wr™e (* buf , ušt16_t Ën ,  fd ) 440  h®_ev_g©t_£rv”_»que¡_wr™e * ev = buf ; 442 ià( Ën !ð(* ev è+ƒv-> Ëngth ) { 443 `”rÜ ("gatt: invalid„equest writeƒvent,‡borting"); 444 `ex™ ( EXIT_FAILURE ); 447 ià( cbs -> £rv” -> »que¡_wr™e_cb ) 448 cbs -> £rv” -> `»que¡_wr™e_cb ( ev -> cÚn_id ,ƒv-> Œªs_id , 449 ( bt_bdaddr_t *è ev -> bdaddr , 450 ev -> ©Œ_hªdË ,ƒv-> off£t , 451 ev -> Ëngth ,ƒv-> Ãed_r¥ , 452 ev -> is_´• ,ƒv-> v®ue ); 453 } } 455  $hªdË_»que¡_exec_wr™e (* buf , ušt16_t Ën ,  fd ) 457  h®_ev_g©t_£rv”_»que¡_exec_wr™e * ev = buf ; 459 ià( cbs -> £rv” -> »que¡_exec_wr™e_cb ) 460 cbs -> £rv” -> `»que¡_exec_wr™e_cb ( ev -> cÚn_id ,ƒv-> Œªs_id , 461 ( bt_bdaddr_t *è ev -> bdaddr , 462 ev -> exec_wr™e ); 463 } } 465  $hªdË_»¥Ú£_cÚfœm©iÚ (* buf , ušt16_t Ën ,  fd ) 467  h®_ev_g©t_£rv”_r¥_cÚfœm©iÚ * ev = buf ; 469 ià( cbs -> £rv” -> »¥Ú£_cÚfœm©iÚ_cb ) 470 cbs -> £rv” -> `»¥Ú£_cÚfœm©iÚ_cb ( ev -> ¡©us ,ƒv-> hªdË ); 471 } } 473  $hªdË_cÚfigu»_mtu (* buf , ušt16_t Ën ,  fd ) 475 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 476  h®_ev_g©t_þ›Á_cÚfigu»_mtu * ev = buf ; 478 ià( cbs -> þ›Á -> cÚfigu»_mtu_cb ) 479 cbs -> þ›Á -> `cÚfigu»_mtu_cb ( ev -> cÚn_id ,ƒv-> ¡©us ,ƒv-> mtu ); 481 } } 483  $hªdË_fž‹r_cÚfig (* buf , ušt16_t Ën ,  fd ) 485 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 486  h®_ev_g©t_þ›Á_fž‹r_cÚfig * ev = buf ; 488 ià( cbs -> þ›Á -> sÿn_fž‹r_cfg_cb ) 489 cbs -> þ›Á -> `sÿn_fž‹r_cfg_cb ( ev -> aùiÚ ,ƒv-> þ›Á_if , 490 ev -> ¡©us ,ƒv-> ty³ , 491 ev -> ¥aû ); 493 } } 495  $hªdË_fž‹r_·¿ms (* buf , ušt16_t Ën ,  fd ) 497 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 498  h®_ev_g©t_þ›Á_fž‹r_·¿ms * ev = buf ; 500 ià( cbs -> þ›Á -> sÿn_fž‹r_·¿m_cb ) 501 cbs -> þ›Á -> `sÿn_fž‹r_·¿m_cb ( ev -> aùiÚ ,ƒv-> þ›Á_if , 502 ev -> ¡©us ,ƒv-> ¥aû ); 504 } } 506  $hªdË_fž‹r_¡©us (* buf , ušt16_t Ën ,  fd ) 508 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 509  h®_ev_g©t_þ›Á_fž‹r_¡©us * ev = buf ; 511 ià( cbs -> þ›Á -> sÿn_fž‹r_¡©us_cb ) 512 cbs -> þ›Á -> `sÿn_fž‹r_¡©us_cb ( ev -> ’abË ,ƒv-> þ›Á_if , 513 ev -> ¡©us ); 515 } } 517  $hªdË__muÉi_adv_’abË (* buf , ušt16_t Ën ,  fd ) 519 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 520  h®_ev_g©t_þ›Á_muÉi_adv_’abË * ev = buf ; 522 ià( cbs -> þ›Á -> muÉi_adv_’abË_cb ) 523 cbs -> þ›Á -> `muÉi_adv_’abË_cb ( ev -> þ›Á_if ,ƒv-> ¡©us ); 525 } } 527  $hªdË_muÉi_adv_upd©e (* buf , ušt16_t Ën ,  fd ) 529 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 530  h®_ev_g©t_þ›Á_muÉi_adv_upd©e * ev = buf ; 532 ià( cbs -> þ›Á -> muÉi_adv_upd©e_cb ) 533 cbs -> þ›Á -> `muÉi_adv_upd©e_cb ( ev -> þ›Á_if ,ƒv-> ¡©us ); 535 } } 537  $hªdË_muÉi_adv_d©a (* buf , ušt16_t Ën ,  fd ) 539 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 540  h®_ev_g©t_þ›Á_muÉi_adv_d©a * ev = buf ; 542 ià( cbs -> þ›Á -> muÉi_adv_d©a_cb ) 543 cbs -> þ›Á -> `muÉi_adv_d©a_cb ( ev -> þ›Á_if ,ƒv-> ¡©us ); 545 } } 547  $hªdË_muÉi_adv_di§bË (* buf , ušt16_t Ën ,  fd ) 549 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 550  h®_ev_g©t_þ›Á_muÉi_adv_di§bË * ev = buf ; 552 ià( cbs -> þ›Á -> muÉi_adv_di§bË_cb ) 553 cbs -> þ›Á -> `muÉi_adv_di§bË_cb ( ev -> þ›Á_if ,ƒv-> ¡©us ); 555 } } 557  $hªdË_þ›Á_cÚge¡iÚ (* buf , ušt16_t Ën ,  fd ) 559 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 560  h®_ev_g©t_þ›Á_cÚge¡iÚ * ev = buf ; 562 ià( cbs -> þ›Á -> cÚge¡iÚ_cb ) 563 cbs -> þ›Á -> `cÚge¡iÚ_cb ( ev -> cÚn_id ,ƒv-> cÚge¡ed ); 565 } } 567  $hªdË_cÚfig_b©chsÿn (* buf , ušt16_t Ën ,  fd ) 569 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 570  h®_ev_g©t_þ›Á_cÚfig_b©chsÿn * ev = buf ; 572 ià( cbs -> þ›Á -> b©chsÿn_cfg_¡Üage_cb ) 573 cbs -> þ›Á -> `b©chsÿn_cfg_¡Üage_cb ( ev -> þ›Á_if , 574 ev -> ¡©us ); 576 } } 578  $hªdË_’abË_b©chsÿn (* buf , ušt16_t Ën ,  fd ) 580 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 581  h®_ev_g©t_þ›Á_’abË_b©chsÿn * ev = buf ; 583 ià( cbs -> þ›Á -> b©chsÿn_’b_di§bË_cb ) 584 cbs -> þ›Á -> `b©chsÿn_’b_di§bË_cb ( ev -> aùiÚ ,ƒv-> þ›Á_if , 585 ev -> ¡©us ); 587 } } 589  $hªdË_þ›Á_b©chsÿn_»pÜts (* buf , ušt16_t Ën ,  fd ) 591 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 592  h®_ev_g©t_þ›Á_b©chsÿn_»pÜts * ev = buf ; 594 ià( cbs -> þ›Á -> b©chsÿn_»pÜts_cb ) 595 cbs -> þ›Á -> `b©chsÿn_»pÜts_cb ( ev -> þ›Á_if ,ƒv-> ¡©us , 596 ev -> fÜm© ,ƒv-> num , 597 ev -> d©a_Ën ,ƒv-> d©a ); 599 } } 601  $hªdË_b©chsÿn_th»shÞd (* buf , ušt16_t Ën ,  fd ) 603 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 604  h®_ev_g©t_þ›Á_b©chsÿn_th»shÞd * ev = buf ; 606 ià( cbs -> þ›Á -> b©chsÿn_th»shÞd_cb ) 607 cbs -> þ›Á -> `b©chsÿn_th»shÞd_cb ( ev -> þ›Á_if ); 609 } } 611  $hªdË_Œack_adv (* buf , ušt16_t Ën ,  fd ) 613 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 614  h®_ev_g©t_þ›Á_Œack_adv * ev = buf ; 616 ià( cbs -> þ›Á -> Œack_adv_ev’t_cb ) 617 cbs -> þ›Á -> `Œack_adv_ev’t_cb ( ev -> þ›Á_if ,ƒv-> fž‘r_šdex , 618 ev -> add»ss_ty³ , 619 ( bt_bdaddr_t *è ev -> add»ss , 620 ev -> ¡©e ); 622 } } 624  $hªdË_šdiÿtiÚ_£nd (* buf , ušt16_t Ën ,  fd ) 626 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 627  h®_ev_g©t_£rv”_šdiÿtiÚ_£Á * ev = buf ; 629 ià( cbs -> £rv” -> šdiÿtiÚ_£Á_cb ) 630 cbs -> £rv” -> `šdiÿtiÚ_£Á_cb ( ev -> cÚn_id ,ƒv-> ¡©us ); 632 } } 634  $hªdË_£rv”_cÚge¡iÚ (* buf , ušt16_t Ën ,  fd ) 636 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 637  h®_ev_g©t_£rv”_cÚge¡iÚ * ev = buf ; 639 ià( cbs -> £rv” -> cÚge¡iÚ_cb ) 640 cbs -> £rv” -> `cÚge¡iÚ_cb ( ev -> cÚn_id ,ƒv-> cÚge¡ed ); 642 } } 648 cÚ¡  h®_c_hªdËr gev_hªdËrs [] = { 650 { hªdË_»gi¡”_þ›Á , çl£ , 651 ( h®_ev_g©t_þ›Á_»gi¡”_þ›Á ) }, 653 { hªdË_sÿn_»suÉ , Œue , 654 ( h®_ev_g©t_þ›Á_sÿn_»suÉ ) }, 656 { hªdË_cÚÃù , çl£ , ( h®_ev_g©t_þ›Á_cÚÃù ) }, 658 { hªdË_discÚÃù , çl£ , 659 ( h®_ev_g©t_þ›Á_discÚÃù ) }, 661 { hªdË_£¬ch_com¶‘e , çl£ , 662 ( h®_ev_g©t_þ›Á_£¬ch_com¶‘e ) }, 664 { hªdË_£¬ch_»suÉ , çl£ , 665 ( h®_ev_g©t_þ›Á_£¬ch_»suÉ ) }, 667 { hªdË_g‘_ch¬aù”i¡ic , çl£ , 668 ( h®_ev_g©t_þ›Á_g‘_ch¬aù”i¡ic ) }, 670 { hªdË_g‘_desütÜ , çl£ , 671 ( h®_ev_g©t_þ›Á_g‘_desütÜ ) }, 673 { hªdË_g‘_šþuded_£rviû , çl£ , 674 ( h®_ev_g©t_þ›Á_g‘_šc_£rviû ) }, 676 { hªdË_»gi¡”_fÜ_nÙifiÿtiÚ , çl£ , 677 ( h®_ev_g©t_þ›Á_»g_fÜ_nÙif ) }, 679 { hªdË_nÙify , Œue , ( h®_ev_g©t_þ›Á_nÙify ) }, 681 { hªdË_»ad_ch¬aù”i¡ic , Œue , 682 ( h®_ev_g©t_þ›Á_»ad_ch¬aù”i¡ic ) }, 684 { hªdË_wr™e_ch¬aù”i¡ic , çl£ , 685 ( h®_ev_g©t_þ›Á_wr™e_ch¬aù”i¡ic ) }, 687 { hªdË_»ad_desütÜ , Œue , 688 ( h®_ev_g©t_þ›Á_»ad_desütÜ ) }, 690 { hªdË_wr™e_desütÜ , çl£ , 691 ( h®_ev_g©t_þ›Á_wr™e_desütÜ ) }, 693 { hªdË_execu‹_wr™e , çl£ , 694 ( h®_ev_g©t_þ›Á_exec_wr™e ) }, 696 { hªdË_»ad_»mÙe_rssi , çl£ , 697 ( h®_ev_g©t_þ›Á_»ad_»mÙe_rssi ) }, 699 { hªdË_li¡’ , çl£ , ( h®_ev_g©t_þ›Á_li¡’ ) }, 701 { hªdË_»gi¡”_£rv” , çl£ , 702 ( h®_ev_g©t_£rv”_»gi¡” ) }, 704 { hªdË_cÚÃùiÚ , çl£ , 705 ( h®_ev_g©t_£rv”_cÚÃùiÚ ) }, 707 { hªdË_£rviû_added , çl£ , 708 ( h®_ev_g©t_£rv”_£rviû_added ) }, 710 { hªdË_šþuded_£rviû_added , çl£ , 711 ( h®_ev_g©t_£rv”_šc_¤vc_added ) }, 713 { hªdË_ch¬aù”i¡ic_added , çl£ , 714 ( h®_ev_g©t_£rv”_ch¬aù”i¡ic_added ) }, 716 { hªdË_desütÜ_added , çl£ , 717 ( h®_ev_g©t_£rv”_desütÜ_added ) }, 719 { hªdË_£rviû_¡¬‹d , çl£ , 720 ( h®_ev_g©t_£rv”_£rviû_¡¬‹d ) }, 722 { hªdË_£rviû_¡Ý³d , çl£ , 723 ( h®_ev_g©t_£rv”_£rviû_¡Ý³d ) }, 725 { hªdË_£rviû_d–‘ed , çl£ , 726 ( h®_ev_g©t_£rv”_£rviû_d–‘ed ) }, 728 { hªdË_»que¡_»ad , çl£ , 729 ( h®_ev_g©t_£rv”_»que¡_»ad ) }, 731 { hªdË_»que¡_wr™e , Œue , 732 ( h®_ev_g©t_£rv”_»que¡_wr™e ) }, 734 { hªdË_»que¡_exec_wr™e , çl£ , 735 ( h®_ev_g©t_£rv”_»que¡_exec_wr™e ) }, 737 { hªdË_»¥Ú£_cÚfœm©iÚ , çl£ , 738 ( h®_ev_g©t_£rv”_r¥_cÚfœm©iÚ ) }, 740 { hªdË_cÚfigu»_mtu , çl£ , 741 ( h®_ev_g©t_þ›Á_cÚfigu»_mtu ) }, 743 { hªdË_fž‹r_cÚfig , çl£ , 744 ( h®_ev_g©t_þ›Á_fž‹r_cÚfig ) }, 746 { hªdË_fž‹r_·¿ms , çl£ , 747 ( h®_ev_g©t_þ›Á_fž‹r_·¿ms ) }, 749 { hªdË_fž‹r_¡©us , çl£ , 750 ( h®_ev_g©t_þ›Á_fž‹r_¡©us ) }, 752 { hªdË__muÉi_adv_’abË , çl£ , 753 ( h®_ev_g©t_þ›Á_muÉi_adv_’abË ) }, 755 { hªdË_muÉi_adv_upd©e , çl£ , 756 ( h®_ev_g©t_þ›Á_muÉi_adv_upd©e ) }, 758 { hªdË_muÉi_adv_d©a , çl£ , 759 ( h®_ev_g©t_þ›Á_muÉi_adv_d©a ) }, 761 { hªdË_muÉi_adv_di§bË , çl£ , 762 ( h®_ev_g©t_þ›Á_muÉi_adv_di§bË ) }, 764 { hªdË_þ›Á_cÚge¡iÚ , çl£ , 765 ( h®_ev_g©t_þ›Á_cÚge¡iÚ ) }, 767 { hªdË_cÚfig_b©chsÿn , çl£ , 768 ( h®_ev_g©t_þ›Á_cÚfig_b©chsÿn ) }, 770 { hªdË_’abË_b©chsÿn , çl£ , 771 ( h®_ev_g©t_þ›Á_’abË_b©chsÿn ) }, 773 { hªdË_þ›Á_b©chsÿn_»pÜts , Œue , 774 ( h®_ev_g©t_þ›Á_b©chsÿn_»pÜts ) }, 776 { hªdË_b©chsÿn_th»shÞd , çl£ , 777 ( h®_ev_g©t_þ›Á_b©chsÿn_th»shÞd ) }, 779 { hªdË_Œack_adv , çl£ , 780 ( h®_ev_g©t_þ›Á_Œack_adv ) }, 782 { hªdË_šdiÿtiÚ_£nd , çl£ , 783 ( h®_ev_g©t_£rv”_šdiÿtiÚ_£Á ) }, 785 { hªdË_£rv”_cÚge¡iÚ , çl£ , 786 ( h®_ev_g©t_£rv”_cÚge¡iÚ ) }, 791  bt_¡©us_t $»gi¡”_þ›Á ( bt_uuid_t * uuid ) 793  h®_cmd_g©t_þ›Á_»gi¡” cmd ; 795 ià(! `š‹rçû_»ady ()) 796  BT_STATUS_NOT_READY ; 798 `memýy ( cmd . uuid , uuid, (*uuid)); 800  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_CLIENT_REGISTER , 801 ( cmd ), &cmd, NULL , NULL, NULL); 802 } } 804  bt_¡©us_t $uÄegi¡”_þ›Á ( þ›Á_if ) 806  h®_cmd_g©t_þ›Á_uÄegi¡” cmd ; 808 ià(! `š‹rçû_»ady ()) 809  BT_STATUS_NOT_READY ; 811 cmd . þ›Á_if = client_if; 813  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_CLIENT_UNREGISTER , 814 ( cmd ), &cmd, NULL , NULL, NULL); 815 } } 817  bt_¡©us_t $sÿn_»® ( þ›Á_if , boÞ ¡¬t ) 819  h®_cmd_g©t_þ›Á_sÿn cmd ; 821 ià(! `š‹rçû_»ady ()) 822  BT_STATUS_NOT_READY ; 824 cmd . þ›Á_if = client_if; 825 cmd . ¡¬t = start; 827  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_CLIENT_SCAN , 828 ( cmd ), &cmd, NULL , NULL, NULL); 829 } } 831 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 832  bt_¡©us_t $sÿn ( boÞ ¡¬t ) 834  `sÿn_»® (0, ¡¬t ); 835 } } 837  bt_¡©us_t $sÿn ( þ›Á_if , boÞ ¡¬t ) 839  `sÿn_»® ( þ›Á_if , ¡¬t ); 840 } } 843  bt_¡©us_t $cÚÃù_»® ( þ›Á_if , cÚ¡ bt_bdaddr_t * bd_addr , 844 boÞ is_dœeù ,  Œª¥Üt ) 846  h®_cmd_g©t_þ›Á_cÚÃù cmd ; 848 ià(! `š‹rçû_»ady ()) 849  BT_STATUS_NOT_READY ; 851 cmd . þ›Á_if = client_if; 852 cmd . is_dœeù = is_direct; 853 cmd . Œª¥Üt =ransport; 855 `memýy ( cmd . bdaddr , bd_addr , (*bd_addr)); 857  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_CLIENT_CONNECT , 858 ( cmd ), &cmd, NULL , NULL, NULL); 859 } } 861 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 862  bt_¡©us_t $cÚÃù ( þ›Á_if , cÚ¡ bt_bdaddr_t * bd_addr , 863 boÞ is_dœeù ,  Œª¥Üt ) 865  `cÚÃù_»® ( þ›Á_if , bd_addr , is_dœeù , Œª¥Üt ); 866 } } 868  bt_¡©us_t $cÚÃù ( þ›Á_if , cÚ¡ bt_bdaddr_t * bd_addr , 869 boÞ is_dœeù ) 871  `cÚÃù_»® ( þ›Á_if , bd_addr , is_dœeù , 872 BT_TRANSPORT_UNKNOWN ); 873 } } 876  bt_¡©us_t $discÚÃù ( þ›Á_if , cÚ¡ bt_bdaddr_t * bd_addr , 877  cÚn_id ) 879  h®_cmd_g©t_þ›Á_discÚÃù cmd ; 881 ià(! `š‹rçû_»ady ()) 882  BT_STATUS_NOT_READY ; 884 cmd . þ›Á_if = client_if; 885 cmd . cÚn_id = conn_id; 887 `memýy ( cmd . bdaddr , bd_addr , (*bd_addr)); 889  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_CLIENT_DISCONNECT , 890 ( cmd ), &cmd, NULL , NULL, NULL); 891 } } 893  bt_¡©us_t $li¡’ ( þ›Á_if , boÞ ¡¬t ) 895  h®_cmd_g©t_þ›Á_li¡’ cmd ; 897 ià(! `š‹rçû_»ady ()) 898  BT_STATUS_NOT_READY ; 900 cmd . þ›Á_if = client_if; 901 cmd . ¡¬t = start; 903  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_CLIENT_LISTEN , 904 ( cmd ), &cmd, NULL , NULL, NULL); 905 } } 907  bt_¡©us_t $»äesh ( þ›Á_if , cÚ¡ bt_bdaddr_t * bd_addr ) 909  h®_cmd_g©t_þ›Á_»äesh cmd ; 911 ià(! `š‹rçû_»ady ()) 912  BT_STATUS_NOT_READY ; 914 cmd . þ›Á_if = client_if; 916 `memýy ( cmd . bdaddr , bd_addr , (*bd_addr)); 918  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_CLIENT_REFRESH , 919 ( cmd ), &cmd, NULL , NULL, NULL); 920 } } 922  bt_¡©us_t $£¬ch_£rviû ( cÚn_id , bt_uuid_t * fž‹r_uuid ) 924  buf [ IPC_MTU ]; 925  h®_cmd_g©t_þ›Á_£¬ch_£rviû * cmd = (*è buf ; 926 size_t Ën = (* cmd ); 928 ià(! `š‹rçû_»ady ()) 929  BT_STATUS_NOT_READY ; 931 `mem£t ( cmd , 0, (*cmd)); 933 cmd -> cÚn_id = conn_id; 935 ià( fž‹r_uuid ) { 936 `memýy ( cmd -> fž‹r_uuid , filter_uuid, (*filter_uuid)); 937 Ën +ð(* fž‹r_uuid ); 938 cmd -> fž‹»d = 1; 941  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 942 HAL_OP_GATT_CLIENT_SEARCH_SERVICE , 943 Ën , cmd , NULL , NULL, NULL); 944 } } 946  bt_¡©us_t $g‘_šþuded_£rviû ( cÚn_id , btg©t_¤vc_id_t * ¤vc_id , 947 btg©t_¤vc_id_t * ¡¬t_šþ_¤vc_id ) 949  buf [ IPC_MTU ]; 950  h®_cmd_g©t_þ›Á_g‘_šþuded_£rviû * cmd = (*è buf ; 951 size_t Ën = (* cmd ); 953 ià(! `š‹rçû_»ady ()) 954  BT_STATUS_NOT_READY ; 956 cmd -> cÚn_id = conn_id; 958 `¤vc_id_to_h® (& cmd -> ¤vc_id , srvc_id); 959 cmd -> cÚtšu©iÚ = 0; 961 ià( ¡¬t_šþ_¤vc_id ) { 962 `¤vc_id_to_h® (& cmd -> šþ_¤vc_id [0], ¡¬t_šþ_¤vc_id ); 963 Ën +ð( cmd -> šþ_¤vc_id [0]); 964 cmd -> cÚtšu©iÚ = 1; 967  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 968 HAL_OP_GATT_CLIENT_GET_INCLUDED_SERVICE , 969 Ën , cmd , NULL , NULL, NULL); 970 } } 972  bt_¡©us_t $g‘_ch¬aù”i¡ic ( cÚn_id , btg©t_¤vc_id_t * ¤vc_id , 973 btg©t_g©t_id_t * ¡¬t_ch¬_id ) 975  buf [ IPC_MTU ]; 976  h®_cmd_g©t_þ›Á_g‘_ch¬aù”i¡ic * cmd = (*è buf ; 977 size_t Ën = (* cmd ); 979 ià(! `š‹rçû_»ady ()) 980  BT_STATUS_NOT_READY ; 982 cmd -> cÚn_id = conn_id; 984 `¤vc_id_to_h® (& cmd -> ¤vc_id , srvc_id); 985 cmd -> cÚtšu©iÚ = 0; 987 ià( ¡¬t_ch¬_id ) { 988 `g©t_id_to_h® (& cmd -> ch¬_id [0], ¡¬t_ch¬_id ); 989 Ën +ð( cmd -> ch¬_id [0]); 990 cmd -> cÚtšu©iÚ = 1; 993  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 994 HAL_OP_GATT_CLIENT_GET_CHARACTERISTIC , 995 Ën , cmd , NULL , NULL, NULL); 996 } } 998  bt_¡©us_t $g‘_desütÜ ( cÚn_id , btg©t_¤vc_id_t * ¤vc_id , 999 btg©t_g©t_id_t * ch¬_id , 1000 btg©t_g©t_id_t * ¡¬t_desü_id ) 1002  buf [ IPC_MTU ]; 1003  h®_cmd_g©t_þ›Á_g‘_desütÜ * cmd = (*è buf ; 1004 size_t Ën = (* cmd ); 1006 ià(! `š‹rçû_»ady ()) 1007  BT_STATUS_NOT_READY ; 1009 cmd -> cÚn_id = conn_id; 1011 `¤vc_id_to_h® (& cmd -> ¤vc_id , srvc_id); 1012 `g©t_id_to_h® (& cmd -> ch¬_id , char_id); 1013 cmd -> cÚtšu©iÚ = 0; 1015 ià( ¡¬t_desü_id ) { 1016 `g©t_id_to_h® (& cmd -> desü_id [0], ¡¬t_desü_id ); 1017 Ën +ð( cmd -> desü_id [0]); 1018 cmd -> cÚtšu©iÚ = 1; 1021  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1022 HAL_OP_GATT_CLIENT_GET_DESCRIPTOR , 1023 Ën , cmd , NULL , NULL, NULL); 1024 } } 1026  bt_¡©us_t $»ad_ch¬aù”i¡ic ( cÚn_id , btg©t_¤vc_id_t * ¤vc_id , 1027 btg©t_g©t_id_t * ch¬_id , 1028  auth_»q ) 1030  h®_cmd_g©t_þ›Á_»ad_ch¬aù”i¡ic cmd ; 1032 ià(! `š‹rçû_»ady ()) 1033  BT_STATUS_NOT_READY ; 1035 cmd . cÚn_id = conn_id; 1036 cmd . auth_»q =‡uth_req; 1038 `¤vc_id_to_h® (& cmd . ¤vc_id , srvc_id); 1039 `g©t_id_to_h® (& cmd . ch¬_id , char_id); 1041  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1042 HAL_OP_GATT_CLIENT_READ_CHARACTERISTIC , 1043 ( cmd ), &cmd, NULL , NULL, NULL); 1044 } } 1046  bt_¡©us_t $wr™e_ch¬aù”i¡ic ( cÚn_id , btg©t_¤vc_id_t * ¤vc_id , 1047 btg©t_g©t_id_t * ch¬_id , 1048  wr™e_ty³ ,  Ën ,  auth_»q , 1049 * p_v®ue ) 1051  buf [ IPC_MTU ]; 1052  h®_cmd_g©t_þ›Á_wr™e_ch¬aù”i¡ic * cmd = (*è buf ; 1053 size_t cmd_Ën = (* cmd è+ Ën ; 1055 ià(! `š‹rçû_»ady ()) 1056  BT_STATUS_NOT_READY ; 1058 cmd -> cÚn_id = conn_id; 1059 cmd -> wr™e_ty³ = write_type; 1060 cmd -> Ën =†en; 1061 cmd -> auth_»q =‡uth_req; 1063 `¤vc_id_to_h® (& cmd -> ¤vc_id , srvc_id); 1064 `g©t_id_to_h® (& cmd -> ch¬_id , char_id); 1066 `memýy ( cmd -> v®ue , p_v®ue , Ën ); 1068  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1069 HAL_OP_GATT_CLIENT_WRITE_CHARACTERISTIC , 1070 cmd_Ën , cmd , NULL , NULL, NULL); 1071 } } 1073  bt_¡©us_t $»ad_desütÜ ( cÚn_id , btg©t_¤vc_id_t * ¤vc_id , 1074 btg©t_g©t_id_t * ch¬_id , 1075 btg©t_g©t_id_t * desü_id , 1076  auth_»q ) 1078  h®_cmd_g©t_þ›Á_»ad_desütÜ cmd ; 1080 ià(! `š‹rçû_»ady ()) 1081  BT_STATUS_NOT_READY ; 1083 cmd . cÚn_id = conn_id; 1084 cmd . auth_»q =‡uth_req; 1086 `¤vc_id_to_h® (& cmd . ¤vc_id , srvc_id); 1087 `g©t_id_to_h® (& cmd . ch¬_id , char_id); 1088 `g©t_id_to_h® (& cmd . desü_id , descr_id); 1090  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1091 HAL_OP_GATT_CLIENT_READ_DESCRIPTOR , 1092 ( cmd ), &cmd, NULL , NULL, NULL); 1093 } } 1095  bt_¡©us_t $wr™e_desütÜ ( cÚn_id , btg©t_¤vc_id_t * ¤vc_id , 1096 btg©t_g©t_id_t * ch¬_id , 1097 btg©t_g©t_id_t * desü_id , 1098  wr™e_ty³ ,  Ën ,  auth_»q , 1099 * p_v®ue ) 1101  buf [ IPC_MTU ]; 1102  h®_cmd_g©t_þ›Á_wr™e_desütÜ * cmd = (*è buf ; 1103 size_t cmd_Ën = (* cmd è+ Ën ; 1105 ià(! `š‹rçû_»ady ()) 1106  BT_STATUS_NOT_READY ; 1108 cmd -> cÚn_id = conn_id; 1109 cmd -> wr™e_ty³ = write_type; 1110 cmd -> Ën =†en; 1111 cmd -> auth_»q =‡uth_req; 1113 `¤vc_id_to_h® (& cmd -> ¤vc_id , srvc_id); 1114 `g©t_id_to_h® (& cmd -> ch¬_id , char_id); 1115 `g©t_id_to_h® (& cmd -> desü_id , descr_id); 1117 `memýy ( cmd -> v®ue , p_v®ue , Ën ); 1119  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1120 HAL_OP_GATT_CLIENT_WRITE_DESCRIPTOR , 1121 cmd_Ën , cmd , NULL , NULL, NULL); 1122 } } 1124  bt_¡©us_t $execu‹_wr™e ( cÚn_id ,  execu‹ ) 1126  h®_cmd_g©t_þ›Á_execu‹_wr™e cmd ; 1128 ià(! `š‹rçû_»ady ()) 1129  BT_STATUS_NOT_READY ; 1131 cmd . cÚn_id = conn_id; 1132 cmd . execu‹ =ƒxecute; 1134  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1135 HAL_OP_GATT_CLIENT_EXECUTE_WRITE , 1136 ( cmd ), &cmd, NULL , NULL, NULL); 1137 } } 1139  bt_¡©us_t $»gi¡”_fÜ_nÙifiÿtiÚ ( þ›Á_if , 1140 cÚ¡ bt_bdaddr_t * bd_addr , 1141 btg©t_¤vc_id_t * ¤vc_id , 1142 btg©t_g©t_id_t * ch¬_id ) 1144  h®_cmd_g©t_þ›Á_»gi¡”_fÜ_nÙifiÿtiÚ cmd ; 1146 ià(! `š‹rçû_»ady ()) 1147  BT_STATUS_NOT_READY ; 1149 cmd . þ›Á_if = client_if; 1151 `memýy ( cmd . bdaddr , bd_addr , (*bd_addr)); 1153 `¤vc_id_to_h® (& cmd . ¤vc_id , srvc_id); 1154 `g©t_id_to_h® (& cmd . ch¬_id , char_id); 1156  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1157 HAL_OP_GATT_CLIENT_REGISTER_FOR_NOTIFICATION , 1158 ( cmd ), &cmd, NULL , NULL, NULL); 1159 } } 1161  bt_¡©us_t $d”egi¡”_fÜ_nÙifiÿtiÚ ( þ›Á_if , 1162 cÚ¡ bt_bdaddr_t * bd_addr , 1163 btg©t_¤vc_id_t * ¤vc_id , 1164 btg©t_g©t_id_t * ch¬_id ) 1166  h®_cmd_g©t_þ›Á_d”egi¡”_fÜ_nÙifiÿtiÚ cmd ; 1168 ià(! `š‹rçû_»ady ()) 1169  BT_STATUS_NOT_READY ; 1171 cmd . þ›Á_if = client_if; 1173 `memýy ( cmd . bdaddr , bd_addr , (*bd_addr)); 1175 `¤vc_id_to_h® (& cmd . ¤vc_id , srvc_id); 1176 `g©t_id_to_h® (& cmd . ch¬_id , char_id); 1178  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1179 HAL_OP_GATT_CLIENT_DEREGISTER_FOR_NOTIFICATION , 1180 ( cmd ), &cmd, NULL , NULL, NULL); 1181 } } 1183  bt_¡©us_t $»ad_»mÙe_rssi ( þ›Á_if , cÚ¡ bt_bdaddr_t * bd_addr ) 1185  h®_cmd_g©t_þ›Á_»ad_»mÙe_rssi cmd ; 1187 ià(! `š‹rçû_»ady ()) 1188  BT_STATUS_NOT_READY ; 1190 cmd . þ›Á_if = client_if; 1192 `memýy ( cmd . bdaddr , bd_addr , (*bd_addr)); 1194  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1195 HAL_OP_GATT_CLIENT_READ_REMOTE_RSSI , 1196 ( cmd ), &cmd, NULL , NULL, NULL); 1197 } } 1199  $g‘_deviû_ty³ (cÚ¡ bt_bdaddr_t * bd_addr ) 1201  h®_cmd_g©t_þ›Á_g‘_deviû_ty³ cmd ; 1202 ušt8_t dev_ty³ ; 1203 size_t »¥_Ën = ( dev_ty³ ); 1204 bt_¡©us_t ¡©us ; 1206 ià(! `š‹rçû_»ady ()) 1207  BT_STATUS_NOT_READY ; 1209 `memýy ( cmd . bdaddr , bd_addr , (*bd_addr)); 1211 ¡©us = `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1212 HAL_OP_GATT_CLIENT_GET_DEVICE_TYPE , 1213 ( cmd ), &cmd, & »¥_Ën , & dev_ty³ , NULL ); 1215 ià( ¡©us !ð BT_STATUS_SUCCESS || »¥_Ën !ð( dev_ty³ )) 1218  dev_ty³ ; 1219 } } 1221  bt_¡©us_t $£t_adv_d©a_»® ( £rv”_if , boÞ £t_sÿn_r¥ , 1222 boÞ šþude_Çme , boÞ šþude_txpow” , 1223  mš_š‹rv® ,  max_š‹rv® , 1224  ­³¬ªû , ušt16_t mªuçùu»r_Ën , 1225 * mªuçùu»r_d©a , 1226 ušt16_t £rviû_d©a_Ën , * £rviû_d©a , 1227 ušt16_t £rviû_uuid_Ën , * £rviû_uuid ) 1229  buf [ IPC_MTU ]; 1230  h®_cmd_g©t_þ›Á_£t_adv_d©a * cmd = (*è buf ; 1231 size_t cmd_Ën ; 1232 ušt8_t * d©a ; 1234 ià(! `š‹rçû_»ady ()) 1235  BT_STATUS_NOT_READY ; 1237 cmd_Ën = (* cmd è+ mªuçùu»r_Ën + £rviû_d©a_Ën + 1238 £rviû_uuid_Ën ; 1240 ià( cmd_Ën > IPC_MTU ) 1241  BT_STATUS_FAIL ; 1243 cmd -> £rv”_if = server_if; 1244 cmd -> £t_sÿn_r¥ = set_scan_rsp; 1245 cmd -> šþude_Çme = include_name; 1246 cmd -> šþude_txpow” = include_txpower; 1247 cmd -> mš_š‹rv® = min_interval; 1248 cmd -> max_š‹rv® = max_interval; 1249 cmd -> ­³¬ªû =‡ppearance; 1250 cmd -> mªuçùu»r_Ën = manufacturer_len; 1251 cmd -> £rviû_d©a_Ën = service_data_len; 1252 cmd -> £rviû_uuid_Ën = service_uuid_len; 1254 d©a = cmd ->data; 1256 ià( mªuçùu»r_d©a && mªuçùu»r_Ën ) { 1257 `memýy ( d©a , mªuçùu»r_d©a , mªuçùu»r_Ën ); 1258 d©a +ð mªuçùu»r_Ën ; 1261 ià( £rviû_d©a && £rviû_d©a_Ën ) { 1262 `memýy ( d©a , £rviû_d©a , £rviû_d©a_Ën ); 1263 d©a +ð £rviû_d©a_Ën ; 1266 ià( £rviû_uuid && £rviû_uuid_Ën ) 1267 `memýy ( d©a , £rviû_uuid , £rviû_uuid_Ën ); 1269  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_CLIENT_SET_ADV_DATA , 1270 cmd_Ën , cmd , NULL , NULL, NULL); 1271 } } 1277 #ià ANDROID_VERSION < PLATFORM_VER (4, 4, 3) 1278  bt_¡©us_t $£t_adv_d©a ( £rv”_if , boÞ £t_sÿn_r¥ , 1279 boÞ šþude_Çme , boÞ šþude_txpow” , 1280  mš_š‹rv® ,  max_š‹rv® , 1281  ­³¬ªû , ušt16_t mªuçùu»r_Ën , 1282 * mªuçùu»r_d©a ) 1284  `£t_adv_d©a_»® ( £rv”_if , £t_sÿn_r¥ , šþude_Çme , 1285 šþude_txpow” , mš_š‹rv® , 1286 max_š‹rv® , ­³¬ªû , 1287 mªuçùu»r_Ën , mªuçùu»r_d©a , 1288 0, NULL , 0, NULL); 1289 } } 1291  bt_¡©us_t $£t_adv_d©a ( £rv”_if , boÞ £t_sÿn_r¥ , 1292 boÞ šþude_Çme , boÞ šþude_txpow” , 1293  mš_š‹rv® ,  max_š‹rv® , 1294  ­³¬ªû , ušt16_t mªuçùu»r_Ën , 1295 * mªuçùu»r_d©a , 1296 ušt16_t £rviû_d©a_Ën , * £rviû_d©a , 1297 ušt16_t £rviû_uuid_Ën , * £rviû_uuid ) 1299  `£t_adv_d©a_»® ( £rv”_if , £t_sÿn_r¥ , šþude_Çme , 1300 šþude_txpow” , mš_š‹rv® , 1301 max_š‹rv® , ­³¬ªû , 1302 mªuçùu»r_Ën , mªuçùu»r_d©a , 1303 £rviû_d©a_Ën , £rviû_d©a , 1304 £rviû_uuid_Ën , £rviû_uuid ); 1305 } } 1308  bt_¡©us_t $‹¡_commªd ( commªd , btg©t_‹¡_·¿ms_t * ·¿ms ) 1310  h®_cmd_g©t_þ›Á_‹¡_commªd cmd ; 1312 ià(! `š‹rçû_»ady ()) 1313  BT_STATUS_NOT_READY ; 1315 cmd . commªd = command; 1317 `memýy ( cmd . bda1 , ·¿ms ->bda1, (*params->bda1)); 1318 `memýy ( cmd . uuid1 , ·¿ms ->uuid1, (*params->uuid1)); 1320 cmd . u1 = ·¿ms ->u1; 1321 cmd . u2 = ·¿ms ->u2; 1322 cmd . u3 = ·¿ms ->u3; 1323 cmd . u4 = ·¿ms ->u4; 1324 cmd . u5 = ·¿ms ->u5; 1326  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_CLIENT_TEST_COMMAND , 1327 ( cmd ), &cmd, NULL , NULL, NULL); 1328 } } 1330 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 1331  bt_¡©us_t $sÿn_fž‹r_·¿m_£tup ( þ›Á_if ,  aùiÚ , 1332  fžt_šdex ,  ã©_£Ê , 1333  li¡_logic_ty³ , 1334  fžt_logic_ty³ , 1335  rssi_high_th»s , 1336  rssi_low_th»s , 1337  d–y_mode , 1338  found_timeout , 1339  lo¡_timeout , 1340  found_timeout_út ) 1342  h®_cmd_g©t_þ›Á_sÿn_fž‹r_£tup cmd ; 1344 ià(! `š‹rçû_»ady ()) 1345  BT_STATUS_NOT_READY ; 1347 cmd . þ›Á_if = client_if; 1348 cmd . aùiÚ =‡ction; 1349 cmd . fž‹r_šdex = fžt_šdex ; 1350 cmd . ã©u»s = ã©_£Ê ; 1351 cmd . li¡_ty³ = li¡_logic_ty³ ; 1352 cmd . fž‹r_ty³ = fžt_logic_ty³ ; 1353 cmd . rssi_hi = rssi_high_th»s ; 1354 cmd . rssi_lo = rssi_low_th»s ; 1355 cmd . d–iv”y_mode = d–y_mode ; 1356 cmd . found_timeout = found_timeout; 1357 cmd . lo¡_timeout =†ost_timeout; 1358 cmd . found_timeout_út = found_timeout_cnt; 1360  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1361 HAL_OP_GATT_CLIENT_SCAN_FILTER_SETUP , 1362 ( cmd ), &cmd, NULL , NULL, NULL); 1363 } } 1365  bt_¡©us_t $sÿn_fž‹r_add_»move ( þ›Á_if ,  aùiÚ , 1366  fžt_ty³ ,  fžt_šdex , 1367  com·ny_id , 1368  com·ny_id_mask , 1369 cÚ¡ bt_uuid_t * p_uuid , 1370 cÚ¡ bt_uuid_t * p_uuid_mask , 1371 cÚ¡ bt_bdaddr_t * bd_addr , 1372  addr_ty³ , 1373  d©a_Ën , * p_d©a , 1374  mask_Ën , * p_mask ) 1376  buf [ IPC_MTU ]; 1377  h®_cmd_g©t_þ›Á_sÿn_fž‹r_add_»move * cmd = (*è buf ; 1378 size_t cmd_Ën ; 1380 ià(! `š‹rçû_»ady ()) 1381  BT_STATUS_NOT_READY ; 1383 ià(! p_uuid || ! p_uuid_mask || ! bd_addr ) 1384  BT_STATUS_PARM_INVALID ; 1386 cmd_Ën = (* cmd è+ d©a_Ën + mask_Ën ; 1387 ià( cmd_Ën > IPC_MTU ) 1388  BT_STATUS_FAIL ; 1390 cmd -> þ›Á_if = client_if; 1391 cmd -> aùiÚ =‡ction; 1392 cmd -> fž‹r_ty³ = fžt_ty³ ; 1393 cmd -> fž‹r_šdex = fžt_šdex ; 1394 cmd -> com·ny_id = company_id; 1395 cmd -> com·ny_id_mask = company_id_mask; 1396 `memýy ( cmd -> uuid , p_uuid , (*p_uuid)); 1397 `memýy ( cmd -> uuid_mask , p_uuid_mask , (*p_uuid_mask)); 1398 `memýy ( cmd -> add»ss , bd_addr , (*bd_addr)); 1399 cmd -> add»ss_ty³ = addr_ty³ ; 1401 cmd -> d©a_Ën = data_len; 1402 `memýy ( cmd -> d©a_mask , p_d©a , d©a_Ën ); 1404 cmd -> mask_Ën = mask_len; 1405 `memýy ( cmd -> d©a_mask + d©a_Ën , p_mask , mask_Ën ); 1407  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1408 HAL_OP_GATT_CLIENT_SCAN_FILTER_ADD_REMOVE , 1409 cmd_Ën , cmd , NULL , NULL, NULL); 1410 } } 1412  bt_¡©us_t $sÿn_fž‹r_þ—r ( þ›Á_if ,  fžt_šdex ) 1414  h®_cmd_g©t_þ›Á_sÿn_fž‹r_þ—r cmd ; 1416 ià(! `š‹rçû_»ady ()) 1417  BT_STATUS_NOT_READY ; 1419 cmd . þ›Á_if = client_if; 1420 cmd . šdex = fžt_šdex ; 1422  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1423 HAL_OP_GATT_CLIENT_SCAN_FILTER_CLEAR , 1424 ( cmd ), &cmd, NULL , NULL, NULL); 1425 } } 1427  bt_¡©us_t $sÿn_fž‹r_’abË ( þ›Á_if , boÞ ’abË ) 1429  h®_cmd_g©t_þ›Á_sÿn_fž‹r_’abË cmd ; 1431 ià(! `š‹rçû_»ady ()) 1432  BT_STATUS_NOT_READY ; 1434 cmd . þ›Á_if = client_if; 1435 cmd . ’abË =ƒnable; 1437  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1438 HAL_OP_GATT_CLIENT_SCAN_FILTER_ENABLE , 1439 ( cmd ), &cmd, NULL , NULL, NULL); 1440 } } 1442  bt_¡©us_t $cÚfigu»_mtu ( cÚn_id ,  mtu ) 1444  h®_cmd_g©t_þ›Á_cÚfigu»_mtu cmd ; 1446 ià(! `š‹rçû_»ady ()) 1447  BT_STATUS_NOT_READY ; 1449 cmd . cÚn_id = conn_id; 1450 cmd . mtu = mtu; 1452  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1453 HAL_OP_GATT_CLIENT_CONFIGURE_MTU , 1454 ( cmd ), &cmd, NULL , NULL, NULL); 1455 } } 1457  bt_¡©us_t $cÚn_·¿m‘”_upd©e (cÚ¡ bt_bdaddr_t * bd_addr , 1458  mš_š‹rv® , 1459  max_š‹rv® ,  Ï‹ncy , 1460  timeout ) 1462  h®_cmd_g©t_þ›Á_cÚn_·¿m_upd©e cmd ; 1464 ià(! `š‹rçû_»ady ()) 1465  BT_STATUS_NOT_READY ; 1467 ià(! bd_addr ) 1468  BT_STATUS_PARM_INVALID ; 1470 `memýy ( cmd . add»ss , bd_addr , (*bd_addr)); 1471 cmd . mš_š‹rv® = min_interval; 1472 cmd . max_š‹rv® = max_interval; 1473 cmd . Ï‹ncy =†atency; 1474 cmd . timeout =imeout; 1476  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1477 HAL_OP_GATT_CLIENT_CONN_PARAM_UPDATE , 1478 ( cmd ), &cmd, NULL , NULL, NULL); 1479 } } 1481  bt_¡©us_t $£t_sÿn_·¿m‘”s ( sÿn_š‹rv® ,  sÿn_wšdow ) 1483  h®_cmd_g©t_þ›Á_£t_sÿn_·¿m cmd ; 1485 ià(! `š‹rçû_»ady ()) 1486  BT_STATUS_NOT_READY ; 1488 cmd . š‹rv® = sÿn_š‹rv® ; 1489 cmd . wšdow = sÿn_wšdow ; 1491  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1492 HAL_OP_GATT_CLIENT_SET_SCAN_PARAM , 1493 ( cmd ), &cmd, NULL , NULL, NULL); 1494 } } 1496  bt_¡©us_t $muÉi_adv_’abË ( þ›Á_if ,  mš_š‹rv® , 1497  max_š‹rv® ,  adv_ty³ , 1498  chÆ_m­ ,  tx_pow” , 1499  timeout_s ) 1501  h®_cmd_g©t_þ›Á_£tup_muÉi_adv cmd ; 1503 ià(! `š‹rçû_»ady ()) 1504  BT_STATUS_NOT_READY ; 1506 cmd . þ›Á_if = client_if; 1507 cmd . mš_š‹rv® = min_interval; 1508 cmd . max_š‹rv® = max_interval; 1509 cmd . ty³ = adv_ty³ ; 1510 cmd . chªÃl_m­ = chÆ_m­ ; 1511 cmd . tx_pow” =x_power; 1512 cmd . timeout = timeout_s ; 1514  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1515 HAL_OP_GATT_CLIENT_SETUP_MULTI_ADV , 1516 ( cmd ), &cmd, NULL , NULL, NULL); 1517 } } 1519  bt_¡©us_t $muÉi_adv_upd©e ( þ›Á_if ,  mš_š‹rv® , 1520  max_š‹rv® ,  adv_ty³ , 1521  chÆ_m­ ,  tx_pow” , 1522  timeout_s ) 1524  h®_cmd_g©t_þ›Á_upd©e_muÉi_adv cmd ; 1526 ià(! `š‹rçû_»ady ()) 1527  BT_STATUS_NOT_READY ; 1529 cmd . þ›Á_if = client_if; 1530 cmd . mš_š‹rv® = min_interval; 1531 cmd . max_š‹rv® = max_interval; 1532 cmd . ty³ = adv_ty³ ; 1533 cmd . chªÃl_m­ = chÆ_m­ ; 1534 cmd . tx_pow” =x_power; 1535 cmd . timeout = timeout_s ; 1537  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1538 HAL_OP_GATT_CLIENT_UPDATE_MULTI_ADV , 1539 ( cmd ), &cmd, NULL , NULL, NULL); 1540 } } 1542  bt_¡©us_t $muÉi_adv_£t_š¡_d©a ( þ›Á_if , boÞ £t_sÿn_r¥ , 1543 boÞ šþude_Çme , 1544 boÞ šþ_txpow” , 1545  ­³¬ªû , 1546  mªuçùu»r_Ën , 1547 * mªuçùu»r_d©a , 1548  £rviû_d©a_Ën , 1549 * £rviû_d©a , 1550  £rviû_uuid_Ën , 1551 * £rviû_uuid ) 1553  buf [ IPC_MTU ]; 1554  h®_cmd_g©t_þ›Á_£tup_muÉi_adv_š¡ * cmd = (*è buf ; 1555  off = 0; 1557 ià(! `š‹rçû_»ady ()) 1558  BT_STATUS_NOT_READY ; 1560 ià( mªuçùu»r_Ën > 0 && ! mªuçùu»r_d©a ) 1561  BT_STATUS_PARM_INVALID ; 1563 ià( £rviû_d©a_Ën > 0 && ! £rviû_d©a ) 1564  BT_STATUS_PARM_INVALID ; 1566 ià( £rviû_uuid_Ën > 0 && ! £rviû_uuid ) 1567  BT_STATUS_PARM_INVALID ; 1569 ià((* cmd è+ mªuçùu»r_Ën + £rviû_d©a_Ën 1570 + £rviû_uuid_Ën > IPC_MTU ) 1571  BT_STATUS_FAIL ; 1573 cmd -> þ›Á_if = client_if; 1574 cmd -> £t_sÿn_r¥ = set_scan_rsp; 1575 cmd -> šþude_Çme = include_name; 1576 cmd -> šþude_tx_pow” = šþ_txpow” ; 1577 cmd -> ­³¬ªû =‡ppearance; 1578 cmd -> mªuçùu»r_d©a_Ën = mªuçùu»r_Ën ; 1579 cmd -> £rviû_d©a_Ën = service_data_len; 1580 cmd -> £rviû_uuid_Ën = service_uuid_len; 1582 ià( mªuçùu»r_Ën > 0) { 1583 `memýy ( cmd -> d©a_£rviû_uuid , mªuçùu»r_d©a , 1584 mªuçùu»r_Ën ); 1585 off +ð mªuçùu»r_Ën ; 1588 ià( £rviû_d©a_Ën > 0) { 1589 `memýy ( cmd -> d©a_£rviû_uuid + off , £rviû_d©a , 1590 £rviû_d©a_Ën ); 1591 off +ð £rviû_d©a_Ën ; 1594 ià( £rviû_uuid_Ën > 0) { 1595 `memýy ( cmd -> d©a_£rviû_uuid + off , £rviû_uuid , 1596 £rviû_uuid_Ën ); 1597 off +ð £rviû_uuid_Ën ; 1600  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1601 HAL_OP_GATT_CLIENT_SETUP_MULTI_ADV_INST , 1602 (* cmd è+ off , cmd, NULL , NULL, NULL); 1603 } } 1605  bt_¡©us_t $muÉi_adv_di§bË ( þ›Á_if ) 1607  h®_cmd_g©t_þ›Á_di§bË_muÉi_adv_š¡ cmd ; 1609 ià(! `š‹rçû_»ady ()) 1610  BT_STATUS_NOT_READY ; 1612 cmd . þ›Á_if = client_if; 1614  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1615 HAL_OP_GATT_CLIENT_DISABLE_MULTI_ADV_INST , 1616 ( cmd ), &cmd, NULL , NULL, NULL); 1617 } } 1619  bt_¡©us_t $b©chsÿn_cfg_¡Üage ( þ›Á_if ,  b©ch_sÿn_fuÎ_max , 1620  b©ch_sÿn_Œunc_max , 1621  b©ch_sÿn_nÙify_th»shÞd ) 1623  h®_cmd_g©t_þ›Á_cÚfigu»_b©chsÿn cmd ; 1625 ià(! `š‹rçû_»ady ()) 1626  BT_STATUS_NOT_READY ; 1628 cmd . þ›Á_if = client_if; 1629 cmd . fuÎ_max = b©ch_sÿn_fuÎ_max ; 1630 cmd . Œunc_max = b©ch_sÿn_Œunc_max ; 1631 cmd . nÙify_th»shÞd = b©ch_sÿn_nÙify_th»shÞd ; 1633  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1634 HAL_OP_GATT_CLIENT_CONFIGURE_BATCHSCAN , 1635 ( cmd ), &cmd, NULL , NULL, NULL); 1636 } } 1638  bt_¡©us_t $b©chsÿn_’b_b©ch_sÿn ( þ›Á_if ,  sÿn_mode , 1639  sÿn_š‹rv® , 1640  sÿn_wšdow ,  addr_ty³ , 1641  disÿrd_ruË ) 1643  h®_cmd_g©t_þ›Á_’abË_b©chsÿn cmd ; 1645 ià(! `š‹rçû_»ady ()) 1646  BT_STATUS_NOT_READY ; 1648 cmd . þ›Á_if = client_if; 1649 cmd . mode = sÿn_mode ; 1650 cmd . š‹rv® = sÿn_š‹rv® ; 1651 cmd . wšdow = sÿn_wšdow ; 1652 cmd . add»ss_ty³ = addr_ty³ ; 1653 cmd . disÿrd_ruË = discard_rule; 1655  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1656 HAL_OP_GATT_CLIENT_ENABLE_BATCHSCAN , 1657 ( cmd ), &cmd, NULL , NULL, NULL); 1658 } } 1660  bt_¡©us_t $b©chsÿn_dis_b©ch_sÿn ( þ›Á_if ) 1662  h®_cmd_g©t_þ›Á_di§bË_b©chsÿn cmd ; 1664 ià(! `š‹rçû_»ady ()) 1665  BT_STATUS_NOT_READY ; 1667 cmd . þ›Á_if = client_if; 1669  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1670 HAL_OP_GATT_CLIENT_DISABLE_BATCHSCAN , 1671 ( cmd ), &cmd, NULL , NULL, NULL); 1672 } } 1674  bt_¡©us_t $b©chsÿn_»ad_»pÜts ( þ›Á_if ,  sÿn_mode ) 1676  h®_cmd_g©t_þ›Á_»ad_b©chsÿn_»pÜts cmd ; 1678 ià(! `š‹rçû_»ady ()) 1679  BT_STATUS_NOT_READY ; 1681 cmd . þ›Á_if = client_if; 1682 cmd . sÿn_mode = scan_mode; 1684  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1685 HAL_OP_GATT_CLIENT_READ_BATCHSCAN_REPORTS , 1686 ( cmd ), &cmd, NULL , NULL, NULL); 1687 } } 1692  bt_¡©us_t $»gi¡”_£rv” ( bt_uuid_t * uuid ) 1694  h®_cmd_g©t_£rv”_»gi¡” cmd ; 1696 ià(! `š‹rçû_»ady ()) 1697  BT_STATUS_NOT_READY ; 1699 `memýy ( cmd . uuid , uuid, (*uuid)); 1701  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_SERVER_REGISTER , 1702 ( cmd ), &cmd, NULL , NULL, NULL); 1703 } } 1705  bt_¡©us_t $uÄegi¡”_£rv” ( £rv”_if ) 1707  h®_cmd_g©t_£rv”_uÄegi¡” cmd ; 1709 ià(! `š‹rçû_»ady ()) 1710  BT_STATUS_NOT_READY ; 1712 cmd . £rv”_if = server_if; 1714  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_SERVER_UNREGISTER , 1715 ( cmd ), &cmd, NULL , NULL, NULL); 1716 } } 1718  bt_¡©us_t $£rv”_cÚÃù_»® ( £rv”_if , 1719 cÚ¡ bt_bdaddr_t * bd_addr , 1720 boÞ is_dœeù ,  Œª¥Üt ) 1722  h®_cmd_g©t_£rv”_cÚÃù cmd ; 1724 ià(! `š‹rçû_»ady ()) 1725  BT_STATUS_NOT_READY ; 1727 cmd . £rv”_if = server_if; 1728 cmd . is_dœeù = is_direct; 1729 cmd . Œª¥Üt =ransport; 1731 `memýy ( cmd . bdaddr , bd_addr , (*bd_addr)); 1733  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_SERVER_CONNECT , 1734 ( cmd ), &cmd, NULL , NULL, NULL); 1735 } } 1737 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 1738  bt_¡©us_t $£rv”_cÚÃù ( £rv”_if , cÚ¡ bt_bdaddr_t * bd_addr , 1739 boÞ is_dœeù ,  Œª¥Üt ) 1741  `£rv”_cÚÃù_»® ( £rv”_if , bd_addr , is_dœeù , Œª¥Üt ); 1742 } } 1744  bt_¡©us_t $£rv”_cÚÃù ( £rv”_if , cÚ¡ bt_bdaddr_t * bd_addr , 1745 boÞ is_dœeù ) 1747  `£rv”_cÚÃù_»® ( £rv”_if , bd_addr , is_dœeù , 1748 BT_TRANSPORT_UNKNOWN ); 1749 } } 1752  bt_¡©us_t $£rv”_discÚÃù ( £rv”_if , cÚ¡ bt_bdaddr_t * bd_addr , 1753  cÚn_id ) 1755  h®_cmd_g©t_£rv”_discÚÃù cmd ; 1757 ià(! `š‹rçû_»ady ()) 1758  BT_STATUS_NOT_READY ; 1760 cmd . £rv”_if = server_if; 1761 cmd . cÚn_id = conn_id; 1763 `memýy ( cmd . bdaddr , bd_addr , (*bd_addr)); 1765  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_SERVER_DISCONNECT , 1766 ( cmd ), &cmd, NULL , NULL, NULL); 1767 } } 1769  bt_¡©us_t $add_£rviû ( £rv”_if , btg©t_¤vc_id_t * ¤vc_id , 1770  num_hªdËs ) 1772  h®_cmd_g©t_£rv”_add_£rviû cmd ; 1774 ià(! `š‹rçû_»ady ()) 1775  BT_STATUS_NOT_READY ; 1777 cmd . £rv”_if = server_if; 1778 cmd . num_hªdËs =‚um_handles; 1780 `¤vc_id_to_h® (& cmd . ¤vc_id , srvc_id); 1782  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_SERVER_ADD_SERVICE , 1783 ( cmd ), &cmd, NULL , NULL, NULL); 1784 } } 1786  bt_¡©us_t $add_šþuded_£rviû ( £rv”_if ,  £rviû_hªdË , 1787  šþuded_hªdË ) 1789  h®_cmd_g©t_£rv”_add_šc_£rviû cmd ; 1791 ià(! `š‹rçû_»ady ()) 1792  BT_STATUS_NOT_READY ; 1794 cmd . £rv”_if = server_if; 1795 cmd . £rviû_hªdË = service_handle; 1796 cmd . šþuded_hªdË = included_handle; 1798  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1799 HAL_OP_GATT_SERVER_ADD_INC_SERVICE , 1800 ( cmd ), &cmd, NULL , NULL, NULL); 1801 } } 1803  bt_¡©us_t $add_ch¬aù”i¡ic ( £rv”_if ,  £rviû_hªdË , 1804 bt_uuid_t * uuid ,  ´Ý”t›s , 1805  ³rmissiÚs ) 1807  h®_cmd_g©t_£rv”_add_ch¬aù”i¡ic cmd ; 1809 ià(! `š‹rçû_»ady ()) 1810  BT_STATUS_NOT_READY ; 1812 cmd . £rv”_if = server_if; 1813 cmd . £rviû_hªdË = service_handle; 1814 cmd . ´Ý”t›s =…roperties; 1815 cmd . ³rmissiÚs =…ermissions; 1817 `memýy ( cmd . uuid , uuid, (*uuid)); 1819  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1820 HAL_OP_GATT_SERVER_ADD_CHARACTERISTIC , 1821 ( cmd ), &cmd, NULL , NULL, NULL); 1822 } } 1824  bt_¡©us_t $add_desütÜ ( £rv”_if ,  £rviû_hªdË , 1825 bt_uuid_t * uuid ,  ³rmissiÚs ) 1827  h®_cmd_g©t_£rv”_add_desütÜ cmd ; 1829 ià(! `š‹rçû_»ady ()) 1830  BT_STATUS_NOT_READY ; 1832 cmd . £rv”_if = server_if; 1833 cmd . £rviû_hªdË = service_handle; 1834 cmd . ³rmissiÚs =…ermissions; 1836 `memýy ( cmd . uuid , uuid, (*uuid)); 1838  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1839 HAL_OP_GATT_SERVER_ADD_DESCRIPTOR , 1840 ( cmd ), &cmd, NULL , NULL, NULL); 1841 } } 1843  bt_¡©us_t $¡¬t_£rviû_»® ( £rv”_if ,  £rviû_hªdË , 1844  Œª¥Üt ) 1846  h®_cmd_g©t_£rv”_¡¬t_£rviû cmd ; 1848 ià(! `š‹rçû_»ady ()) 1849  BT_STATUS_NOT_READY ; 1851 cmd . £rv”_if = server_if; 1852 cmd . £rviû_hªdË = service_handle; 1853 cmd . Œª¥Üt =ransport; 1855  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1856 HAL_OP_GATT_SERVER_START_SERVICE , 1857 ( cmd ), &cmd, NULL , NULL, NULL); 1858 } } 1860 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 1861  bt_¡©us_t $¡¬t_£rviû ( £rv”_if ,  £rviû_hªdË , 1862  Œª¥Üt ) 1864  `¡¬t_£rviû_»® ( £rv”_if , £rviû_hªdË , Œª¥Üt ); 1865 } } 1867  bt_¡©us_t $¡¬t_£rviû ( £rv”_if ,  £rviû_hªdË , 1868  Œª¥Üt ) 1870  Œª¥Üt_mask = 0; 1873  Œª¥Üt ) { 1875 Œª¥Üt_mask = GATT_SERVER_TRANSPORT_LE_BIT ; 1878 Œª¥Üt_mask = GATT_SERVER_TRANSPORT_BREDR_BIT ; 1881 Œª¥Üt_mask = GATT_SERVER_TRANSPORT_LE_BIT | 1882 GATT_SERVER_TRANSPORT_BREDR_BIT ; 1886  `¡¬t_£rviû_»® ( £rv”_if , £rviû_hªdË , Œª¥Üt_mask ); 1887 } } 1890  bt_¡©us_t $¡Ý_£rviû ( £rv”_if ,  £rviû_hªdË ) 1892  h®_cmd_g©t_£rv”_¡Ý_£rviû cmd ; 1894 ià(! `š‹rçû_»ady ()) 1895  BT_STATUS_NOT_READY ; 1897 cmd . £rv”_if = server_if; 1898 cmd . £rviû_hªdË = service_handle; 1900  `h®_c_cmd ( HAL_SERVICE_ID_GATT , HAL_OP_GATT_SERVER_STOP_SERVICE , 1901 ( cmd ), &cmd, NULL , NULL, NULL); 1902 } } 1904  bt_¡©us_t $d–‘e_£rviû ( £rv”_if ,  £rviû_hªdË ) 1906  h®_cmd_g©t_£rv”_d–‘e_£rviû cmd ; 1908 ià(! `š‹rçû_»ady ()) 1909  BT_STATUS_NOT_READY ; 1911 cmd . £rv”_if = server_if; 1912 cmd . £rviû_hªdË = service_handle; 1914  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1915 HAL_OP_GATT_SERVER_DELETE_SERVICE , 1916 ( cmd ), &cmd, NULL , NULL, NULL); 1917 } } 1919  bt_¡©us_t $£nd_šdiÿtiÚ ( £rv”_if ,  ©Œibu‹_hªdË , 1920  cÚn_id ,  Ën ,  cÚfœm , 1921 * p_v®ue ) 1923  buf [ IPC_MTU ]; 1924  h®_cmd_g©t_£rv”_£nd_šdiÿtiÚ * cmd = (*è buf ; 1925 size_t cmd_Ën = (* cmd è+ Ën ; 1927 ià(! `š‹rçû_»ady ()) 1928  BT_STATUS_NOT_READY ; 1930 cmd -> £rv”_if = server_if; 1931 cmd -> ©Œibu‹_hªdË =‡ttribute_handle; 1932 cmd -> cÚn_id = conn_id; 1933 cmd -> Ën =†en; 1934 cmd -> cÚfœm = confirm; 1936 `memýy ( cmd -> v®ue , p_v®ue , Ën ); 1938  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1939 HAL_OP_GATT_SERVER_SEND_INDICATION , 1940 cmd_Ën , cmd , NULL , NULL, NULL); 1941 } } 1943  bt_¡©us_t $£nd_»¥Ú£ ( cÚn_id ,  Œªs_id ,  ¡©us , 1944 btg©t_»¥Ú£_t * »¥Ú£ ) 1946  buf [ IPC_MTU ]; 1947  h®_cmd_g©t_£rv”_£nd_»¥Ú£ * cmd = (*è buf ; 1948 size_t cmd_Ën = (* cmd è+ (* »¥Ú£ ); 1950 `mem£t ( buf , 0 , IPC_MTU ); 1952 ià(! `š‹rçû_»ady ()) 1953  BT_STATUS_NOT_READY ; 1955 cmd -> cÚn_id = conn_id; 1956 cmd -> Œªs_id =rans_id; 1957 cmd -> ¡©us = status; 1958 cmd -> hªdË = »¥Ú£ -> ©Œ_v®ue .handle; 1959 cmd -> off£t = »¥Ú£ -> ©Œ_v®ue .offset; 1960 cmd -> auth_»q = »¥Ú£ -> ©Œ_v®ue .auth_req; 1961 cmd -> Ën = »¥Ú£ -> ©Œ_v®ue .len; 1963 `memýy ( cmd -> d©a , »¥Ú£ -> ©Œ_v®ue . v®ue , cmd-> Ën ); 1965  `h®_c_cmd ( HAL_SERVICE_ID_GATT , 1966 HAL_OP_GATT_SERVER_SEND_RESPONSE , 1967 cmd_Ën , cmd , NULL , NULL, NULL); 1968 } } 1970  bt_¡©us_t $š™ (cÚ¡ btg©t_ÿÎbacks_t * ÿÎbacks ) 1972  h®_cmd_»gi¡”_moduË cmd ; 1973  »t ; 1975 `DBG (""); 1977 ià( `š‹rçû_»ady ()) 1978  BT_STATUS_DONE ; 1980 cbs = ÿÎbacks ; 1982 `h®_c_»gi¡” ( HAL_SERVICE_ID_GATT , ev_hªdËrs , 1983 ( ev_hªdËrs )/(ev_handlers[0])); 1985 cmd . £rviû_id = HAL_SERVICE_ID_GATT ; 1986 cmd . mode = HAL_MODE_DEFAULT ; 1987 cmd . max_þ›Ás = 1; 1989 »t = `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_REGISTER_MODULE , 1990 ( cmd ), &cmd, NULL , NULL, NULL); 1992 ià( »t !ð BT_STATUS_SUCCESS ) { 1993 cbs = NULL ; 1994 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_GATT ); 1997  »t ; 1998 } } 2000  $þ—nup () 2002  h®_cmd_uÄegi¡”_moduË cmd ; 2004 `DBG (""); 2006 ià(! `š‹rçû_»ady ()) 2009 cmd . £rviû_id = HAL_SERVICE_ID_GATT ; 2011 `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_UNREGISTER_MODULE , 2012 ( cmd ), &cmd, NULL , NULL, NULL); 2014 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_GATT ); 2016 cbs = NULL ; 2017 } } 2019  btg©t_þ›Á_š‹rçû_t gþ›Á_içû = { 2020 . »gi¡”_þ›Á =„egister_client, 2021 . guÄegi¡”_þ›Á = uÄegi¡”_þ›Á , 2022 . gsÿn = sÿn , 2023 . gcÚÃù = cÚÃù , 2024 . gdiscÚÃù = discÚÃù , 2025 . gli¡’ = li¡’ , 2026 . g»äesh = »äesh , 2027 . g£¬ch_£rviû = £¬ch_£rviû , 2028 . gg‘_šþuded_£rviû = g‘_šþuded_£rviû , 2029 . gg‘_ch¬aù”i¡ic = g‘_ch¬aù”i¡ic , 2030 . gg‘_desütÜ = g‘_desütÜ , 2031 . g»ad_ch¬aù”i¡ic = »ad_ch¬aù”i¡ic , 2032 . gwr™e_ch¬aù”i¡ic = wr™e_ch¬aù”i¡ic , 2033 . g»ad_desütÜ = »ad_desütÜ , 2034 . gwr™e_desütÜ = wr™e_desütÜ , 2035 . gexecu‹_wr™e = execu‹_wr™e , 2036 . g»gi¡”_fÜ_nÙifiÿtiÚ = »gi¡”_fÜ_nÙifiÿtiÚ , 2037 . gd”egi¡”_fÜ_nÙifiÿtiÚ = d”egi¡”_fÜ_nÙifiÿtiÚ , 2038 . g»ad_»mÙe_rssi = »ad_»mÙe_rssi , 2039 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 2040 . gsÿn_fž‹r_·¿m_£tup = sÿn_fž‹r_·¿m_£tup , 2041 . gsÿn_fž‹r_add_»move = sÿn_fž‹r_add_»move , 2042 . gsÿn_fž‹r_þ—r = sÿn_fž‹r_þ—r , 2043 . gsÿn_fž‹r_’abË = sÿn_fž‹r_’abË , 2045 . gg‘_deviû_ty³ = g‘_deviû_ty³ , 2046 . g£t_adv_d©a = £t_adv_d©a , 2047 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 2048 . gcÚfigu»_mtu = cÚfigu»_mtu , 2049 . gcÚn_·¿m‘”_upd©e = cÚn_·¿m‘”_upd©e , 2050 . g£t_sÿn_·¿m‘”s = £t_sÿn_·¿m‘”s , 2051 . gmuÉi_adv_’abË = muÉi_adv_’abË , 2052 . gmuÉi_adv_upd©e = muÉi_adv_upd©e , 2053 . gmuÉi_adv_£t_š¡_d©a = muÉi_adv_£t_š¡_d©a , 2054 . gmuÉi_adv_di§bË = muÉi_adv_di§bË , 2055 . gb©chsÿn_cfg_¡Üage = b©chsÿn_cfg_¡Üage , 2056 . gb©chsÿn_’b_b©ch_sÿn = b©chsÿn_’b_b©ch_sÿn , 2057 . gb©chsÿn_dis_b©ch_sÿn = b©chsÿn_dis_b©ch_sÿn , 2058 . gb©chsÿn_»ad_»pÜts = b©chsÿn_»ad_»pÜts , 2060 . g‹¡_commªd = ‹¡_commªd , 2063  btg©t_£rv”_š‹rçû_t g£rv”_içû = { 2064 . »gi¡”_£rv” =„egister_server, 2065 . guÄegi¡”_£rv” = uÄegi¡”_£rv” , 2066 . gcÚÃù = £rv”_cÚÃù , 2067 . gdiscÚÃù = £rv”_discÚÃù , 2068 . gadd_£rviû = add_£rviû , 2069 . gadd_šþuded_£rviû = add_šþuded_£rviû , 2070 . gadd_ch¬aù”i¡ic = add_ch¬aù”i¡ic , 2071 . gadd_desütÜ = add_desütÜ , 2072 . g¡¬t_£rviû = ¡¬t_£rviû , 2073 . g¡Ý_£rviû = ¡Ý_£rviû , 2074 . gd–‘e_£rviû = d–‘e_£rviû , 2075 . g£nd_šdiÿtiÚ = £nd_šdiÿtiÚ , 2076 . g£nd_»¥Ú£ = £nd_»¥Ú£ , 2079  btg©t_š‹rçû_t giçû = { 2080 . size = ( içû ), 2081 . gš™ = š™ , 2082 . gþ—nup = þ—nup , 2083 . gþ›Á = & þ›Á_içû , 2084 . g£rv” = & £rv”_içû , 2087 btg©t_š‹rçû_t * $bt_g‘_g©t_š‹rçû () 2089  & içû ; 2090 } } @android/hal-handsfree-client.c 18  ~<¡dboÞ.h > 19  ~<¡ddef.h > 20  ~<¡ršg.h > 21  ~<¡dlib.h > 23  ~ 25  ~"h®-log.h " 26  ~"h®.h " 27  ~"h®-msg.h " 28  ~"c-commÚ.h " 29  ~"h®-c.h " 31 cÚ¡ bthf_þ›Á_ÿÎbacks_t * gcbs = NULL ; 33  boÞ $š‹rçû_»ady () 35  cbs !ð NULL ; 36 } } 38  $hªdË_cÚn_¡©e (* buf , ušt16_t Ën ,  fd ) 40  h®_ev_hf_þ›Á_cÚn_¡©e * ev = buf ; 42 ià( cbs -> cÚÃùiÚ_¡©e_cb ) 43 cbs -> `cÚÃùiÚ_¡©e_cb ( ev -> ¡©e ,ƒv-> ³”_ã© , 44 ev -> chld_ã© , 45 ( bt_bdaddr_t *è ev -> bdaddr ); 46 } } 48  $hªdË_audio_¡©e (* buf , ušt16_t Ën ,  fd ) 50  h®_ev_hf_þ›Á_audio_¡©e * ev = buf ; 52 ià( cbs -> audio_¡©e_cb ) 53 cbs -> `audio_¡©e_cb ( ev -> ¡©e , ( bt_bdaddr_t *èÓv-> bdaddr )); 54 } } 56  $hªdË_vr_¡©e (* buf , ušt16_t Ën ,  fd ) 58  h®_ev_hf_þ›Á_vr_¡©e * ev = buf ; 60 ià( cbs -> vr_cmd_cb ) 61 cbs -> `vr_cmd_cb ( ev -> ¡©e ); 62 } } 64  $hªdË_ÃtwÜk_¡©e (* buf , ušt16_t Ën ,  fd ) 66  h®_ev_hf_þ›Á_Ãt_¡©e * ev = buf ; 68 ià( cbs -> ÃtwÜk_¡©e_cb ) 69 cbs -> `ÃtwÜk_¡©e_cb ( ev -> ¡©e ); 70 } } 72  $hªdË_ÃtwÜk_rßmšg (* buf , ušt16_t Ën ,  fd ) 74  h®_ev_hf_þ›Á_Ãt_rßmšg_ty³ * ev = buf ; 76 ià( cbs -> ÃtwÜk_rßmšg_cb ) 77 cbs -> `ÃtwÜk_rßmšg_cb ( ev -> ¡©e ); 78 } } 80  $hªdË_ÃtwÜk_sigÇl (* buf , ušt16_t Ën ,  fd ) 82  h®_ev_hf_þ›Á_Ãt_sigÇl_¡»ngth * ev = buf ; 84 ià( cbs -> ÃtwÜk_sigÇl_cb ) 85 cbs -> `ÃtwÜk_sigÇl_cb ( ev -> sigÇl_¡»ngth ); 86 } } 88  $hªdË_b©‹ry_Ëv– (* buf , ušt16_t Ën ,  fd ) 90  h®_ev_hf_þ›Á_b©‹ry_Ëv– * ev = buf ; 92 ià( cbs -> b©‹ry_Ëv–_cb ) 93 cbs -> `b©‹ry_Ëv–_cb ( ev -> b©‹ry_Ëv– ); 94 } } 96  $hªdË_Ý”©Ü_Çme (* buf , ušt16_t Ën ,  fd ) 98  h®_ev_hf_þ›Á_Ý”©Ü_Çme * ev = buf ; 99 ušt16_t Çme_Ën = ev ->name_len; 100 * Çme = NULL ; 102 ià( Ën !ð(* ev è+ Çme_Ën || 103 ( Çme_Ën !ð0 && ev -> Çme [name_len - 1] != '\0')) { 104 `”rÜ ("invalid operator‚ame,‡borting"); 105 `ex™ ( EXIT_FAILURE ); 108 ià( Çme_Ën ) 109 Çme = (*è ev ->name; 111 ià( cbs -> cu¼’t_Ý”©Ü_cb ) 112 cbs -> `cu¼’t_Ý”©Ü_cb ( Çme ); 113 } } 115  $hªdË_ÿÎ (* buf , ušt16_t Ën ,  fd ) 117  h®_ev_hf_þ›Á_ÿÎ_šdiÿtÜ * ev = buf ; 119 ià( cbs -> ÿÎ_cb ) 120 cbs -> `ÿÎ_cb ( ev -> ÿÎ ); 121 } } 123  $hªdË_ÿÎ_£tup (* buf , ušt16_t Ën ,  fd ) 125  h®_ev_hf_þ›Á_ÿÎ_£tup_šdiÿtÜ * ev = buf ; 127 ià( cbs -> ÿΣtup_cb ) 128 cbs -> `ÿΣtup_cb ( ev -> ÿÎ_£tup ); 129 } } 131  $hªdË_ÿÎ_h–d (* buf , ušt16_t Ën ,  fd ) 133  h®_ev_hf_þ›Á_ÿÎ_h–d_šdiÿtÜ * ev = buf ; 135 ià( cbs -> ÿÎh–d_cb ) 136 cbs -> `ÿÎh–d_cb ( ev -> ÿÎ_h–d ); 137 } } 139  $hªdË_»¥Ú£_ªd_hÞd (* buf , ušt16_t Ën ,  fd ) 141  h®_ev_hf_þ›Á_»¥Ú£_ªd_hÞd_¡©us * ev = buf ; 143 ià( cbs -> »¥_ªd_hÞd_cb ) 144 cbs -> `»¥_ªd_hÞd_cb ( ev -> ¡©us ); 145 } } 147  $hªdË_þ (* buf , ušt16_t Ën ,  fd ) 149  h®_ev_hf_þ›Á_ÿΚg_lše_id’t * ev = buf ; 150 ušt16_t num_Ën = ev -> numb”_Ën ; 151 * numb” = NULL ; 153 ià( Ën !ð(* ev è+ num_Ën || 154 ( num_Ën !ð0 && ev -> numb” [num_len - 1] != '\0')) { 155 `”rÜ ("invalid clip,‡borting"); 156 `ex™ ( EXIT_FAILURE ); 159 ià( num_Ën ) 160 numb” = (*è ev ->number; 162 ià( cbs -> þ_cb ) 163 cbs -> `þ_cb ( numb” ); 164 } } 166  $hªdË_ÿÎ_wa™šg (* buf , ušt16_t Ën ,  fd ) 168  h®_ev_hf_þ›Á_ÿÎ_wa™šg * ev = buf ; 169 ušt16_t num_Ën = ev -> numb”_Ën ; 170 * numb” = NULL ; 172 ià( Ën !ð(* ev è+ num_Ën || 173 ( num_Ën !ð0 && ev -> numb” [num_len - 1] != '\0')) { 174 `”rÜ ("invalid call waiting,‡borting"); 175 `ex™ ( EXIT_FAILURE ); 178 ià( num_Ën ) 179 numb” = (*è ev ->number; 181 ià( cbs -> ÿÎ_wa™šg_cb ) 182 cbs -> `ÿÎ_wa™šg_cb ( numb” ); 183 } } 185  $hªdË_cu¼’t_ÿÎs (* buf , ušt16_t Ën ,  fd ) 187  h®_ev_hf_þ›Á_cu¼’t_ÿÎ * ev = buf ; 188 ušt16_t num_Ën = ev -> numb”_Ën ; 189 * numb” = NULL ; 191 ià( Ën !ð(* ev è+ num_Ën || 192 ( num_Ën !ð0 && ev -> numb” [num_len - 1] != '\0')) { 193 `”rÜ ("invalid current calls,‡borting"); 194 `ex™ ( EXIT_FAILURE ); 197 ià( num_Ën ) 198 numb” = (*è ev ->number; 200 ià( cbs -> cu¼’t_ÿÎs_cb ) 201 cbs -> `cu¼’t_ÿÎs_cb ( ev -> šdex ,ƒv-> dœeùiÚ ,ƒv-> ÿÎ_¡©e , 202 ev -> muɬty , numb” ); 203 } } 205  $hªdË_vÞume_chªge (* buf , ušt16_t Ën ,  fd ) 207  h®_ev_hf_þ›Á_vÞume_chªged * ev = buf ; 209 ià( cbs -> vÞume_chªge_cb ) 210 cbs -> `vÞume_chªge_cb ( ev -> ty³ ,ƒv-> vÞume ); 211 } } 213  $hªdË_commªd_cmp (* buf , ušt16_t Ën ,  fd ) 215  h®_ev_hf_þ›Á_commªd_com¶‘e * ev = buf ; 217 ià( cbs -> cmd_com¶‘e_cb ) 218 cbs -> `cmd_com¶‘e_cb ( ev -> ty³ ,ƒv-> cme ); 219 } } 221  $hªdË_subsüib”_šfo (* buf , ušt16_t Ën ,  fd ) 223 cÚ¡  h®_ev_hf_þ›Á_subsüib”_£rviû_šfo * ev = buf ; 224 ušt16_t Çme_Ën = ev ->name_len; 225 * Çme = NULL ; 227 ià( Ën !ð(* ev è+ Çme_Ën || 228 ( Çme_Ën !ð0 && ev -> Çme [name_len - 1] != '\0')) { 229 `”rÜ ("invalid sunscriber info,‡borting"); 230 `ex™ ( EXIT_FAILURE ); 233 ià( Çme_Ën ) 234 Çme = (*è ev ->name; 236 ià( cbs -> subsüib”_šfo_cb ) 237 cbs -> `subsüib”_šfo_cb ( Çme , ev -> ty³ ); 238 } } 240  $hªdË_š_bªd_ršgtÚe (* buf , ušt16_t Ën ,  fd ) 242  h®_ev_hf_þ›Á_šbªd_£‰šgs * ev = buf ; 244 ià( cbs -> š_bªd_ršg_tÚe_cb ) 245 cbs -> `š_bªd_ršg_tÚe_cb ( ev -> ¡©e ); 246 } } 248  $hªdË_Ï¡_voiû_g_numb” (* buf , ušt16_t Ën ,  fd ) 250 cÚ¡  h®_ev_hf_þ›Á_Ï¡_void_ÿÎ_g_num * ev = buf ; 251 * numb” = NULL ; 252 ušt16_t num_Ën = ev -> numb”_Ën ; 254 ià( Ën !ð(* ev è+ num_Ën || 255 ( num_Ën !ð0 && ev -> numb” [num_len - 1] != '\0')) { 256 `”rÜ ("invalid voiceag,‡borting"); 257 `ex™ ( EXIT_FAILURE ); 260 ià( num_Ën ) 261 numb” = (*è ev ->number; 263 ià( cbs -> Ï¡_voiû_g_numb”_ÿÎback ) 264 cbs -> `Ï¡_voiû_g_numb”_ÿÎback ( numb” ); 265 } } 267  $hªdË_ršg_šdiÿtiÚ (* buf , ušt16_t Ën ,  fd ) 269 ià( cbs -> ršg_šdiÿtiÚ_cb ) 270 cbs -> `ršg_šdiÿtiÚ_cb (); 271 } } 277 cÚ¡  h®_c_hªdËr gev_hªdËrs [] = { 279 { hªdË_cÚn_¡©e , çl£ , 280 ( h®_ev_hf_þ›Á_cÚn_¡©e ) }, 282 { hªdË_audio_¡©e , çl£ , 283 ( h®_ev_hf_þ›Á_audio_¡©e ) }, 285 { hªdË_vr_¡©e , çl£ , ( h®_ev_hf_þ›Á_vr_¡©e ) }, 287 { hªdË_ÃtwÜk_¡©e , çl£ , 288 ( h®_ev_hf_þ›Á_Ãt_¡©e )}, 290 { hªdË_ÃtwÜk_rßmšg , çl£ , 291 ( h®_ev_hf_þ›Á_Ãt_rßmšg_ty³ ) }, 293 { hªdË_ÃtwÜk_sigÇl , çl£ , 294 ( h®_ev_hf_þ›Á_Ãt_sigÇl_¡»ngth ) }, 296 { hªdË_b©‹ry_Ëv– , çl£ , 297 ( h®_ev_hf_þ›Á_b©‹ry_Ëv– ) }, 299 { hªdË_Ý”©Ü_Çme , Œue , 300 ( h®_ev_hf_þ›Á_Ý”©Ü_Çme ) }, 302 { hªdË_ÿÎ , çl£ , 303 ( h®_ev_hf_þ›Á_ÿÎ_šdiÿtÜ ) }, 305 { hªdË_ÿÎ_£tup , çl£ , 306 ( h®_ev_hf_þ›Á_ÿÎ_£tup_šdiÿtÜ ) }, 308 { hªdË_ÿÎ_h–d , çl£ , 309 ( h®_ev_hf_þ›Á_ÿÎ_h–d_šdiÿtÜ ) }, 311 { hªdË_»¥Ú£_ªd_hÞd , çl£ , 312 ( h®_ev_hf_þ›Á_»¥Ú£_ªd_hÞd_¡©us ) }, 314 { hªdË_þ , Œue , 315 ( h®_ev_hf_þ›Á_ÿΚg_lše_id’t ) }, 317 { hªdË_ÿÎ_wa™šg , Œue , 318 ( h®_ev_hf_þ›Á_ÿÎ_wa™šg ) }, 320 { hªdË_cu¼’t_ÿÎs , Œue , 321 ( h®_ev_hf_þ›Á_cu¼’t_ÿÎ ) }, 323 { hªdË_vÞume_chªge , çl£ , 324 ( h®_ev_hf_þ›Á_vÞume_chªged ) }, 326 { hªdË_commªd_cmp , çl£ , 327 ( h®_ev_hf_þ›Á_commªd_com¶‘e ) }, 329 { hªdË_subsüib”_šfo , Œue , 330 ( h®_ev_hf_þ›Á_subsüib”_£rviû_šfo ) }, 332 { hªdË_š_bªd_ršgtÚe , çl£ , 333 ( h®_ev_hf_þ›Á_šbªd_£‰šgs ) }, 335 { hªdË_Ï¡_voiû_g_numb” , Œue , 336 ( h®_ev_hf_þ›Á_Ï¡_void_ÿÎ_g_num ) }, 338 { hªdË_ršg_šdiÿtiÚ , çl£ , 0 }, 341  bt_¡©us_t $š™ ( bthf_þ›Á_ÿÎbacks_t * ÿÎbacks ) 343  h®_cmd_»gi¡”_moduË cmd ; 344  »t ; 346 `DBG (""); 348 ià( `š‹rçû_»ady ()) 349  BT_STATUS_DONE ; 351 cbs = ÿÎbacks ; 353 `h®_c_»gi¡” ( HAL_SERVICE_ID_HANDSFREE_CLIENT , ev_hªdËrs , 354 ( ev_hªdËrs )/(ev_handlers[0])); 356 cmd . £rviû_id = HAL_SERVICE_ID_HANDSFREE_CLIENT ; 357 cmd . mode = HAL_MODE_DEFAULT ; 358 cmd . max_þ›Ás = 1; 360 »t = `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_REGISTER_MODULE , 361 ( cmd ), &cmd, NULL , NULL, NULL); 362 ià( »t !ð BT_STATUS_SUCCESS ) { 363 cbs = NULL ; 364 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_HANDSFREE_CLIENT ); 367  »t ; 368 } } 370  bt_¡©us_t $hf_þ›Á_cÚÃù ( bt_bdaddr_t * bd_addr ) 372  h®_cmd_hf_þ›Á_cÚÃù cmd ; 374 `DBG (""); 376 ià(! `š‹rçû_»ady ()) 377  BT_STATUS_NOT_READY ; 379 ià(! bd_addr ) 380  BT_STATUS_PARM_INVALID ; 382 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 384  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 385 HAL_OP_HF_CLIENT_CONNECT , ( cmd ), &cmd, 386 NULL , NULL, NULL); 387 } } 389  bt_¡©us_t $discÚÃù ( bt_bdaddr_t * bd_addr ) 391  h®_cmd_hf_þ›Á_discÚÃù cmd ; 393 `DBG (""); 395 ià(! `š‹rçû_»ady ()) 396  BT_STATUS_NOT_READY ; 398 ià(! bd_addr ) 399  BT_STATUS_PARM_INVALID ; 401 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 403  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 404 HAL_OP_HF_CLIENT_DISCONNECT , ( cmd ), &cmd, 405 NULL , NULL, NULL); 406 } } 408  bt_¡©us_t $cÚÃù_audio ( bt_bdaddr_t * bd_addr ) 410  h®_cmd_hf_þ›Á_cÚÃù_audio cmd ; 412 `DBG (""); 414 ià(! `š‹rçû_»ady ()) 415  BT_STATUS_NOT_READY ; 417 ià(! bd_addr ) 418  BT_STATUS_PARM_INVALID ; 420 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 422  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 423 HAL_OP_HF_CLIENT_CONNECT_AUDIO , ( cmd ), 424 & cmd , NULL , NULL, NULL); 425 } } 427  bt_¡©us_t $discÚÃù_audio ( bt_bdaddr_t * bd_addr ) 429  h®_cmd_hf_þ›Á_discÚÃù_audio cmd ; 431 `DBG (""); 433 ià(! `š‹rçû_»ady ()) 434  BT_STATUS_NOT_READY ; 436 ià(! bd_addr ) 437  BT_STATUS_PARM_INVALID ; 439 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 441  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 442 HAL_OP_HF_CLIENT_DISCONNECT_AUDIO , ( cmd ), 443 & cmd , NULL , NULL, NULL); 444 } } 446  bt_¡©us_t $¡¬t_voiû_»cogn™iÚ () 448 `DBG (""); 450 ià(! `š‹rçû_»ady ()) 451  BT_STATUS_NOT_READY ; 453  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 454 HAL_OP_HF_CLIENT_START_VR , 0, NULL , NULL, NULL, 455 NULL ); 456 } } 458  bt_¡©us_t $¡Ý_voiû_»cogn™iÚ () 460 `DBG (""); 462 ià(! `š‹rçû_»ady ()) 463  BT_STATUS_NOT_READY ; 465  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 466 HAL_OP_HF_CLIENT_STOP_VR , 0, NULL , NULL, NULL, 467 NULL ); 468 } } 470  bt_¡©us_t $vÞume_cÚŒÞ ( bthf_þ›Á_vÞume_ty³_t ty³ , 471  vÞume ) 473  h®_cmd_hf_þ›Á_vÞume_cÚŒÞ cmd ; 475 `DBG (""); 477 ià(! `š‹rçû_»ady ()) 478  BT_STATUS_NOT_READY ; 480 cmd . ty³ =ype; 481 cmd . vÞume = volume; 483  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 484 HAL_OP_HF_CLIENT_VOLUME_CONTROL , ( cmd ), 485 & cmd , NULL , NULL, NULL); 486 } } 488  bt_¡©us_t $dŸl (cÚ¡ * numb” ) 490  buf [ IPC_MTU ]; 491  h®_cmd_hf_þ›Á_dŸl * cmd = (*è buf ; 492 size_t Ën ; 494 `DBG (""); 496 ià(! `š‹rçû_»ady ()) 497  BT_STATUS_NOT_READY ; 499 ià( numb” ) { 500 cmd -> numb”_Ën = `¡¾’ ( numb” ) + 1; 501 `memýy ( cmd -> numb” ,‚umb”, cmd-> numb”_Ën ); 503 cmd -> numb”_Ën = 0; 506 Ën = (* cmd è+ cmd-> numb”_Ën ; 508  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 509 HAL_OP_HF_CLIENT_DIAL , Ën , cmd , NULL , NULL, 510 NULL ); 511 } } 513  bt_¡©us_t $dŸl_memÜy ( loÿtiÚ ) 515  h®_cmd_hf_þ›Á_dŸl_memÜy cmd ; 517 `DBG (""); 519 ià(! `š‹rçû_»ady ()) 520  BT_STATUS_NOT_READY ; 522 cmd . loÿtiÚ =†ocation; 524  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 525 HAL_OP_HF_CLIENT_DIAL_MEMORY , 526 ( cmd ), &cmd, NULL , NULL, NULL); 527 } } 529  bt_¡©us_t $ÿÎ_aùiÚ ( bthf_þ›Á_ÿÎ_aùiÚ_t aùiÚ ,  šdex ) 531  h®_cmd_hf_þ›Á_ÿÎ_aùiÚ cmd ; 533 `DBG (""); 535 ià(! `š‹rçû_»ady ()) 536  BT_STATUS_NOT_READY ; 538 cmd . aùiÚ =‡ction; 539 cmd . šdex = index; 541  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 542 HAL_OP_HF_CLIENT_CALL_ACTION , ( cmd ), &cmd, 543 NULL , NULL, NULL); 544 } } 546  bt_¡©us_t $qu”y_cu¼’t_ÿÎs () 548 `DBG (""); 550 ià(! `š‹rçû_»ady ()) 551  BT_STATUS_NOT_READY ; 553  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 554 HAL_OP_HF_CLIENT_QUERY_CURRENT_CALLS , 0, NULL , 555 NULL , NULL, NULL); 556 } } 558  bt_¡©us_t $qu”y_Ý”©Ü_Çme () 560 `DBG (""); 562 ià(! `š‹rçû_»ady ()) 563  BT_STATUS_NOT_READY ; 565  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 566 HAL_OP_HF_CLIENT_QUERY_OPERATOR_NAME , 0, NULL , 567 NULL , NULL, NULL); 568 } } 570  bt_¡©us_t $»Œ›ve_sub¤_šfo () 572 `DBG (""); 574 ià(! `š‹rçû_»ady ()) 575  BT_STATUS_NOT_READY ; 577  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 578 HAL_OP_HF_CLIENT_RETRIEVE_SUBSCR_INFO , 0, NULL , 579 NULL , NULL, NULL); 580 } } 582  bt_¡©us_t $£nd_dtmf ( tÚe ) 584  h®_cmd_hf_þ›Á_£nd_dtmf cmd ; 586 `DBG (""); 588 ià(! `š‹rçû_»ady ()) 589  BT_STATUS_NOT_READY ; 591 cmd . tÚe =one; 593  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 594 HAL_OP_HF_CLIENT_SEND_DTMF , ( cmd ), &cmd, 595 NULL , NULL, NULL); 596 } } 598  bt_¡©us_t $»que¡_Ï¡_voiû_g_numb” () 600 `DBG (""); 602 ià(! `š‹rçû_»ady ()) 603  BT_STATUS_NOT_READY ; 605  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE_CLIENT , 606 HAL_OP_HF_CLIENT_GET_LAST_VOICE_TAG_NUM , 607 0, NULL , NULL, NULL, NULL); 608 } } 610  $þ—nup () 612  h®_cmd_uÄegi¡”_moduË cmd ; 614 `DBG (""); 616 ià(! `š‹rçû_»ady ()) 619 cmd . £rviû_id = HAL_SERVICE_ID_HANDSFREE_CLIENT ; 621 `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_UNREGISTER_MODULE , 622 ( cmd ), &cmd, NULL , NULL, NULL); 624 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_HANDSFREE_CLIENT ); 626 cbs = NULL ; 627 } } 629  bthf_þ›Á_š‹rçû_t giçû = { 630 . size = ( içû ), 631 . gš™ = š™ , 632 . gcÚÃù = hf_þ›Á_cÚÃù , 633 . gdiscÚÃù = discÚÃù , 634 . gcÚÃù_audio = cÚÃù_audio , 635 . gdiscÚÃù_audio = discÚÃù_audio , 636 . g¡¬t_voiû_»cogn™iÚ = ¡¬t_voiû_»cogn™iÚ , 637 . g¡Ý_voiû_»cogn™iÚ = ¡Ý_voiû_»cogn™iÚ , 638 . gvÞume_cÚŒÞ = vÞume_cÚŒÞ , 639 . gdŸl = dŸl , 640 . gdŸl_memÜy = dŸl_memÜy , 641 . ghªdË_ÿÎ_aùiÚ = ÿÎ_aùiÚ , 642 . gqu”y_cu¼’t_ÿÎs = qu”y_cu¼’t_ÿÎs , 643 . gqu”y_cu¼’t_Ý”©Ü_Çme = qu”y_Ý”©Ü_Çme , 644 . g»Œ›ve_subsüib”_šfo = »Œ›ve_sub¤_šfo , 645 . g£nd_dtmf = £nd_dtmf , 646 . g»que¡_Ï¡_voiû_g_numb” = »que¡_Ï¡_voiû_g_numb” , 647 . gþ—nup = þ—nup 650 bthf_þ›Á_š‹rçû_t * $bt_g‘_hf_þ›Á_š‹rçû () 652  & içû ; 653 } } @android/hal-handsfree.c 18  ~<¡dboÞ.h > 19  ~<¡ddef.h > 20  ~<¡ršg.h > 21  ~<¡dlib.h > 23  ~ 25  ~"h®-log.h " 26  ~"h®.h " 27  ~"h®-msg.h " 28  ~"c-commÚ.h " 29  ~"h®-c.h " 30  ~"h®-utžs.h " 32 cÚ¡ bthf_ÿÎbacks_t * gcbs = NULL ; 34  boÞ $š‹rçû_»ady () 36  cbs !ð NULL ; 37 } } 39  $hªdË_cÚn_¡©e (* buf , ušt16_t Ën ,  fd ) 41  h®_ev_hªdsä“_cÚn_¡©e * ev = buf ; 43 ià( cbs -> cÚÃùiÚ_¡©e_cb ) 44 cbs -> `cÚÃùiÚ_¡©e_cb ( ev -> ¡©e , 45 ( bt_bdaddr_t *è( ev -> bdaddr )); 46 } } 48  $hªdË_audio_¡©e (* buf , ušt16_t Ën ,  fd ) 50  h®_ev_hªdsä“_audio_¡©e * ev = buf ; 52 ià( cbs -> audio_¡©e_cb ) 53 cbs -> `audio_¡©e_cb ( ev -> ¡©e , ( bt_bdaddr_t *èÓv-> bdaddr )); 54 } } 56  $hªdË_vr_¡©e (* buf , ušt16_t Ën ,  fd ) 58  h®_ev_hªdsä“_vr_¡©e * ev = buf ; 60 ià( cbs -> vr_cmd_cb ) 61 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 62 cbs -> `vr_cmd_cb ( ev -> ¡©e , ( bt_bdaddr_t *èÓv-> bdaddr )); 64 cbs -> `vr_cmd_cb ( ev -> ¡©e ); 66 } } 68  $hªdË_ªsw” (* buf , ušt16_t Ën ,  fd ) 70 ià( cbs -> ªsw”_ÿÎ_cmd_cb ) { 71 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 72  h®_ev_hªdsä“_ªsw” * ev = buf ; 74 cbs -> `ªsw”_ÿÎ_cmd_cb (( bt_bdaddr_t *è( ev -> bdaddr )); 76 cbs -> `ªsw”_ÿÎ_cmd_cb (); 79 } } 81  $hªdË_hªgup (* buf , ušt16_t Ën ,  fd ) 83 ià( cbs -> hªgup_ÿÎ_cmd_cb ) { 84 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 85  h®_ev_hªdsä“_hªgup * ev = buf ; 87 cbs -> `hªgup_ÿÎ_cmd_cb (( bt_bdaddr_t *è( ev -> bdaddr )); 89 cbs -> `hªgup_ÿÎ_cmd_cb (); 92 } } 94  $hªdË_vÞume (* buf , ušt16_t Ën ,  fd ) 96  h®_ev_hªdsä“_vÞume * ev = buf ; 98 ià( cbs -> vÞume_cmd_cb ) 99 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 100 cbs -> `vÞume_cmd_cb ( ev -> ty³ ,ƒv-> vÞume , 101 ( bt_bdaddr_t *è( ev -> bdaddr )); 103 cbs -> `vÞume_cmd_cb ( ev -> ty³ ,ƒv-> vÞume ); 105 } } 107  $hªdË_dŸl (* buf , ušt16_t Ën ,  fd ) 109  h®_ev_hªdsä“_dŸl * ev = buf ; 110 ušt16_t num_Ën = ev -> numb”_Ën ; 111 * numb” = NULL ; 113 ià( Ën !ð(* ev è+ num_Ën || 114 ( num_Ën !ð0 && ev -> numb” [num_len - 1] != '\0')) { 115 `”rÜ ("invalid dialƒvent,‡borting"); 116 `ex™ ( EXIT_FAILURE ); 119 ià(! cbs -> dŸl_ÿÎ_cmd_cb ) 122 ià( ev -> numb”_Ën ) 123 numb” = (*è ev ->number; 125 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 126 cbs -> `dŸl_ÿÎ_cmd_cb ( numb” , ( bt_bdaddr_t *è( ev -> bdaddr )); 128 cbs -> `dŸl_ÿÎ_cmd_cb ( numb” ); 130 } } 132  $hªdË_dtmf (* buf , ušt16_t Ën ,  fd ) 134  h®_ev_hªdsä“_dtmf * ev = buf ; 136 ià( cbs -> dtmf_cmd_cb ) 137 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 138 cbs -> `dtmf_cmd_cb ( ev -> tÚe , ( bt_bdaddr_t *èÓv-> bdaddr )); 140 cbs -> `dtmf_cmd_cb ( ev -> tÚe ); 142 } } 144  $hªdË_Äec (* buf , ušt16_t Ën ,  fd ) 146  h®_ev_hªdsä“_Äec * ev = buf ; 148 ià( cbs -> Äec_cmd_cb ) 149 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 150 cbs -> `Äec_cmd_cb ( ev -> Äec , ( bt_bdaddr_t *èÓv-> bdaddr )); 152 cbs -> `Äec_cmd_cb ( ev -> Äec ); 154 } } 156  $hªdË_chld (* buf , ušt16_t Ën ,  fd ) 158  h®_ev_hªdsä“_chld * ev = buf ; 160 ià( cbs -> chld_cmd_cb ) 161 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 162 cbs -> `chld_cmd_cb ( ev -> chld , ( bt_bdaddr_t *èÓv-> bdaddr )); 164 cbs -> `chld_cmd_cb ( ev -> chld ); 166 } } 168  $hªdË_úum (* buf , ušt16_t Ën ,  fd ) 170 ià( cbs -> úum_cmd_cb ) { 171 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 172  h®_ev_hªdsä“_úum * ev = buf ; 174 cbs -> `úum_cmd_cb (( bt_bdaddr_t *è( ev -> bdaddr )); 176 cbs -> `úum_cmd_cb ( NULL ); 179 } } 181  $hªdË_cšd (* buf , ušt16_t Ën ,  fd ) 183 ià( cbs -> cšd_cmd_cb ) { 184 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 185  h®_ev_hªdsä“_cšd * ev = buf ; 187 cbs -> `cšd_cmd_cb (( bt_bdaddr_t *è( ev -> bdaddr )); 189 cbs -> `cšd_cmd_cb (); 192 } } 194  $hªdË_cÝs (* buf , ušt16_t Ën ,  fd ) 196 ià( cbs -> cÝs_cmd_cb ) { 197 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 198  h®_ev_hªdsä“_cÝs * ev = buf ; 200 cbs -> `cÝs_cmd_cb (( bt_bdaddr_t *è( ev -> bdaddr )); 202 cbs -> `cÝs_cmd_cb (); 205 } } 207  $hªdË_þcc (* buf , ušt16_t Ën ,  fd ) 209 ià( cbs -> þcc_cmd_cb ) { 210 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 211  h®_ev_hªdsä“_þcc * ev = buf ; 213 cbs -> `þcc_cmd_cb (( bt_bdaddr_t *è( ev -> bdaddr )); 215 cbs -> `þcc_cmd_cb (); 218 } } 220  $hªdË_unknown_© (* buf , ušt16_t Ën ,  fd ) 222  h®_ev_hªdsä“_unknown_© * ev = buf ; 224 ià( Ën !ð(* ev ) +ƒv->len || 225 ( ev -> Ën !ð0 &&ƒv-> buf [ev->len - 1] != '\0')) { 226 `”rÜ ("invalid unknown commandƒvent,‡borting"); 227 `ex™ ( EXIT_FAILURE ); 230 ià( cbs -> unknown_©_cmd_cb ) 231 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 232 cbs -> `unknown_©_cmd_cb ((*è ev -> buf , 233 ( bt_bdaddr_t *è( ev -> bdaddr )); 235 cbs -> `unknown_©_cmd_cb ((*è ev -> buf ); 237 } } 239  $hªdË_h¥_key_´ess (* buf , ušt16_t Ën ,  fd ) 241 ià( cbs -> key_´es£d_cmd_cb ) { 242 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 243  h®_ev_hªdsä“_h¥_key_´ess * ev = buf ; 245 cbs -> `key_´es£d_cmd_cb (( bt_bdaddr_t *è( ev -> bdaddr )); 247 cbs -> `key_´es£d_cmd_cb (); 250 } } 256 cÚ¡  h®_c_hªdËr gev_hªdËrs [] = { 258 { hªdË_cÚn_¡©e , çl£ , 259 ( h®_ev_hªdsä“_cÚn_¡©e ) }, 261 { hªdË_audio_¡©e , çl£ , 262 ( h®_ev_hªdsä“_audio_¡©e ) }, 264 { hªdË_vr_¡©e , çl£ , ( h®_ev_hªdsä“_vr_¡©e ) }, 266 { hªdË_ªsw” , çl£ , ( h®_ev_hªdsä“_ªsw” ) }, 268 { hªdË_hªgup , çl£ , ( h®_ev_hªdsä“_hªgup ) }, 270 { hªdË_vÞume , çl£ , ( h®_ev_hªdsä“_vÞume ) }, 272 { hªdË_dŸl , Œue , ( h®_ev_hªdsä“_dŸl ) }, 274 { hªdË_dtmf , çl£ , ( h®_ev_hªdsä“_dtmf ) }, 276 { hªdË_Äec , çl£ , ( h®_ev_hªdsä“_Äec ) }, 278 { hªdË_chld , çl£ , ( h®_ev_hªdsä“_chld ) }, 280 { hªdË_úum , çl£ , ( h®_ev_hªdsä“_úum ) }, 282 { hªdË_cšd , çl£ , ( h®_ev_hªdsä“_cšd ) }, 284 { hªdË_cÝs , çl£ , ( h®_ev_hªdsä“_cÝs ) }, 286 { hªdË_þcc , çl£ , ( h®_ev_hªdsä“_þcc ) }, 288 { hªdË_unknown_© , Œue , ( h®_ev_hªdsä“_unknown_© ) }, 290 { hªdË_h¥_key_´ess , çl£ , 291 ( h®_ev_hªdsä“_h¥_key_´ess ) }, 294  ušt8_t $g‘_mode () 296  v®ue [ PROPERTY_VALUE_MAX ]; 298 ià( `g‘_cÚfig ("hªdsä“", v®ue , NULL ) > 0) { 299 ià(! `¡rÿ£cmp ( v®ue , "hfp")) 300  HAL_MODE_HANDSFREE_HFP ; 302 ià(! `¡rÿ£cmp ( v®ue , "hfp_wbs")) 303  HAL_MODE_HANDSFREE_HFP_WBS ; 306  HAL_MODE_HANDSFREE_HSP_ONLY ; 307 } } 309  bt_¡©us_t $š™_»® ( bthf_ÿÎbacks_t * ÿÎbacks ,  max_hf_þ›Ás ) 311  h®_cmd_»gi¡”_moduË cmd ; 312  »t ; 314 `DBG (""); 316 ià( `š‹rçû_»ady ()) 317  BT_STATUS_DONE ; 319 cbs = ÿÎbacks ; 321 `h®_c_»gi¡” ( HAL_SERVICE_ID_HANDSFREE , ev_hªdËrs , 322 ( ev_hªdËrs )/(ev_handlers[0])); 324 cmd . £rviû_id = HAL_SERVICE_ID_HANDSFREE ; 325 cmd . mode = `g‘_mode (); 326 cmd . max_þ›Ás = max_hf_þ›Ás ; 328 »t = `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_REGISTER_MODULE , 329 ( cmd ), &cmd, NULL , NULL, NULL); 331 ià( »t !ð BT_STATUS_SUCCESS ) { 332 cbs = NULL ; 333 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_HANDSFREE ); 336  »t ; 337 } } 339 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 340  bt_¡©us_t $š™ ( bthf_ÿÎbacks_t * ÿÎbacks ,  max_hf_þ›Ás ) 342  `š™_»® ( ÿÎbacks , max_hf_þ›Ás ); 343 } } 345  bt_¡©us_t $š™ ( bthf_ÿÎbacks_t * ÿÎbacks ) 347  `š™_»® ( ÿÎbacks , 1); 348 } } 351  bt_¡©us_t $hªdsä“_cÚÃù ( bt_bdaddr_t * bd_addr ) 353  h®_cmd_hªdsä“_cÚÃù cmd ; 355 `DBG (""); 357 ià(! `š‹rçû_»ady ()) 358  BT_STATUS_NOT_READY ; 360 ià(! bd_addr ) 361  BT_STATUS_PARM_INVALID ; 363 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 365  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , HAL_OP_HANDSFREE_CONNECT , 366 ( cmd ), &cmd, NULL , NULL, NULL); 367 } } 369  bt_¡©us_t $discÚÃù ( bt_bdaddr_t * bd_addr ) 371  h®_cmd_hªdsä“_discÚÃù cmd ; 373 `DBG (""); 375 ià(! `š‹rçû_»ady ()) 376  BT_STATUS_NOT_READY ; 378 ià(! bd_addr ) 379  BT_STATUS_PARM_INVALID ; 381 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 383  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , 384 HAL_OP_HANDSFREE_DISCONNECT , ( cmd ), &cmd, 385 NULL , NULL, NULL); 386 } } 388  bt_¡©us_t $cÚÃù_audio ( bt_bdaddr_t * bd_addr ) 390  h®_cmd_hªdsä“_cÚÃù_audio cmd ; 392 `DBG (""); 394 ià(! `š‹rçû_»ady ()) 395  BT_STATUS_NOT_READY ; 397 ià(! bd_addr ) 398  BT_STATUS_PARM_INVALID ; 400 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 402  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , 403 HAL_OP_HANDSFREE_CONNECT_AUDIO , ( cmd ), 404 & cmd , NULL , NULL, NULL); 405 } } 407  bt_¡©us_t $discÚÃù_audio ( bt_bdaddr_t * bd_addr ) 409  h®_cmd_hªdsä“_discÚÃù_audio cmd ; 411 `DBG (""); 413 ià(! `š‹rçû_»ady ()) 414  BT_STATUS_NOT_READY ; 416 ià(! bd_addr ) 417  BT_STATUS_PARM_INVALID ; 419 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 421  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , 422 HAL_OP_HANDSFREE_DISCONNECT_AUDIO , ( cmd ), 423 & cmd , NULL , NULL, NULL); 424 } } 426  bt_¡©us_t $¡¬t_voiû_»cogn™iÚ_»® ( bt_bdaddr_t * bd_addr ) 428  h®_cmd_hªdsä“_¡¬t_vr cmd ; 430 `DBG (""); 432 ià(! `š‹rçû_»ady ()) 433  BT_STATUS_NOT_READY ; 435 `mem£t (& cmd , 0, (cmd)); 437 ià( bd_addr ) 438 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 440  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , HAL_OP_HANDSFREE_START_VR , 441 ( cmd ), &cmd, NULL , NULL, NULL); 442 } } 444 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 445  bt_¡©us_t $¡¬t_voiû_»cogn™iÚ ( bt_bdaddr_t * bd_addr ) 447  `¡¬t_voiû_»cogn™iÚ_»® ( bd_addr ); 448 } } 450  bt_¡©us_t $¡¬t_voiû_»cogn™iÚ () 452  `¡¬t_voiû_»cogn™iÚ_»® ( NULL ); 453 } } 456  bt_¡©us_t $¡Ý_voiû_»cogn™iÚ_»® ( bt_bdaddr_t * bd_addr ) 458  h®_cmd_hªdsä“_¡Ý_vr cmd ; 460 `DBG (""); 462 ià(! `š‹rçû_»ady ()) 463  BT_STATUS_NOT_READY ; 465 `mem£t (& cmd , 0, (cmd)); 467 ià( bd_addr ) 468 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 470  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , HAL_OP_HANDSFREE_STOP_VR , 471 ( cmd ), &cmd, NULL , NULL, NULL); 472 } } 474 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 475  bt_¡©us_t $¡Ý_voiû_»cogn™iÚ ( bt_bdaddr_t * bd_addr ) 477  `¡Ý_voiû_»cogn™iÚ_»® ( bd_addr ); 478 } } 480  bt_¡©us_t $¡Ý_voiû_»cogn™iÚ () 482  `¡Ý_voiû_»cogn™iÚ_»® ( NULL ); 483 } } 486  bt_¡©us_t $vÞume_cÚŒÞ_»® ( bthf_vÞume_ty³_t ty³ ,  vÞume , 487 bt_bdaddr_t * bd_addr ) 489  h®_cmd_hªdsä“_vÞume_cÚŒÞ cmd ; 491 `DBG (""); 493 ià(! `š‹rçû_»ady ()) 494  BT_STATUS_NOT_READY ; 496 `mem£t (& cmd , 0, (cmd)); 498 cmd . ty³ =ype; 499 cmd . vÞume = volume; 501 ià( bd_addr ) 502 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 504  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , 505 HAL_OP_HANDSFREE_VOLUME_CONTROL , ( cmd ), 506 & cmd , NULL , NULL, NULL); 507 } } 509 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 510  bt_¡©us_t $vÞume_cÚŒÞ ( bthf_vÞume_ty³_t ty³ ,  vÞume , 511 bt_bdaddr_t * bd_addr ) 513  `vÞume_cÚŒÞ_»® ( ty³ , vÞume , bd_addr ); 514 } } 516  bt_¡©us_t $vÞume_cÚŒÞ ( bthf_vÞume_ty³_t ty³ ,  vÞume ) 518  `vÞume_cÚŒÞ_»® ( ty³ , vÞume , NULL ); 519 } } 522  bt_¡©us_t $deviû_¡©us_nÙifiÿtiÚ ( bthf_ÃtwÜk_¡©e_t ¡©e , 523 bthf_£rviû_ty³_t ty³ , 524  sigÇl ,  b©‹ry ) 526  h®_cmd_hªdsä“_deviû_¡©us_nÙif cmd ; 528 `DBG (""); 530 ià(! `š‹rçû_»ady ()) 531  BT_STATUS_NOT_READY ; 533 cmd . ¡©e = state; 534 cmd . ty³ =ype; 535 cmd . sigÇl = signal; 536 cmd . b©‹ry = battery; 538  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , 539 HAL_OP_HANDSFREE_DEVICE_STATUS_NOTIF , 540 ( cmd ), &cmd, NULL , NULL, NULL); 541 } } 543  bt_¡©us_t $cÝs_»¥Ú£_»® (cÚ¡ * cÝs , bt_bdaddr_t * bd_addr ) 545  buf [ IPC_MTU ]; 546  h®_cmd_hªdsä“_cÝs_»¥Ú£ * cmd = (*è buf ; 547 size_t Ën ; 549 `DBG (""); 551 ià(! `š‹rçû_»ady ()) 552  BT_STATUS_NOT_READY ; 554 ià(! cÝs ) 555  BT_STATUS_PARM_INVALID ; 557 `mem£t ( cmd , 0, (*cmd)); 559 ià( bd_addr ) 560 `memýy ( cmd -> bdaddr , bd_addr , (cmd->bdaddr)); 563 cmd -> Ën = `¡¾’ ( cÝs ) + 1; 564 `memýy ( cmd -> buf , cÝs , cmd-> Ën ); 566 Ën = (* cmd ) + cmd->len; 568  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , 569 HAL_OP_HANDSFREE_COPS_RESPONSE , 570 Ën , cmd , NULL , NULL, NULL); 571 } } 573 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 574  bt_¡©us_t $cÝs_»¥Ú£ (cÚ¡ * cÝs , bt_bdaddr_t * bd_addr ) 576  `cÝs_»¥Ú£_»® ( cÝs , bd_addr ); 577 } } 579  bt_¡©us_t $cÝs_»¥Ú£ (cÚ¡ * cÝs ) 581  `cÝs_»¥Ú£_»® ( cÝs , NULL ); 582 } } 585  bt_¡©us_t $cšd_»¥Ú£_»® ( svc ,  num_aùive ,  num_h–d , 586 bthf_ÿÎ_¡©e_t ¡©e ,  sigÇl , 587  rßm ,  b©t_chg , 588 bt_bdaddr_t * bd_addr ) 590  h®_cmd_hªdsä“_cšd_»¥Ú£ cmd ; 592 `DBG (""); 594 ià(! `š‹rçû_»ady ()) 595  BT_STATUS_NOT_READY ; 597 `mem£t (& cmd , 0, (cmd)); 599 ià( bd_addr ) 600 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 602 cmd . svc = svc; 603 cmd . num_aùive =‚um_active; 604 cmd . num_h–d =‚um_held; 605 cmd . ¡©e = state; 606 cmd . sigÇl = signal; 607 cmd . rßm =„oam; 608 cmd . b©t_chg = batt_chg; 610  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , 611 HAL_OP_HANDSFREE_CIND_RESPONSE , 612 ( cmd ), &cmd, NULL , NULL, NULL); 613 } } 615 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 616  bt_¡©us_t $cšd_»¥Ú£ ( svc ,  num_aùive ,  num_h–d , 617 bthf_ÿÎ_¡©e_t ¡©e ,  sigÇl , 618  rßm ,  b©t_chg , 619 bt_bdaddr_t * bd_addr ) 621  `cšd_»¥Ú£_»® ( svc , num_aùive , num_h–d , ¡©e , sigÇl , 622 rßm , b©t_chg , bd_addr ); 623 } } 625  bt_¡©us_t $cšd_»¥Ú£ ( svc ,  num_aùive ,  num_h–d , 626 bthf_ÿÎ_¡©e_t ¡©e ,  sigÇl , 627  rßm ,  b©t_chg ) 629  `cšd_»¥Ú£_»® ( svc , num_aùive , num_h–d , ¡©e , sigÇl , 630 rßm , b©t_chg , NULL ); 631 } } 634  bt_¡©us_t $fÜm©‹d_©_»¥Ú£_»® (cÚ¡ * r¥ , 635 bt_bdaddr_t * bd_addr ) 637  buf [ IPC_MTU ]; 638  h®_cmd_hªdsä“_fÜm©‹d_©_»¥Ú£ * cmd = (*è buf ; 639 size_t Ën ; 641 `DBG (""); 643 ià(! `š‹rçû_»ady ()) 644  BT_STATUS_NOT_READY ; 646 ià(! r¥ ) 647  BT_STATUS_PARM_INVALID ; 649 `mem£t ( cmd , 0, (*cmd)); 651 ià( bd_addr ) 652 `memýy ( cmd -> bdaddr , bd_addr , (cmd->bdaddr)); 654 cmd -> Ën = `¡¾’ ( r¥ ) + 1; 655 `memýy ( cmd -> buf , r¥ , cmd-> Ën ); 657 Ën = (* cmd ) + cmd->len; 659  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , 660 HAL_OP_HANDSFREE_FORMATTED_AT_RESPONSE , 661 Ën , cmd , NULL , NULL, NULL); 662 } } 664 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 665  bt_¡©us_t $fÜm©‹d_©_»¥Ú£ (cÚ¡ * r¥ , bt_bdaddr_t * bd_addr ) 667  `fÜm©‹d_©_»¥Ú£_»® ( r¥ , bd_addr ); 668 } } 670  bt_¡©us_t $fÜm©‹d_©_»¥Ú£ (cÚ¡ * r¥ ) 672  `fÜm©‹d_©_»¥Ú£_»® ( r¥ , NULL ); 673 } } 676  bt_¡©us_t $©_»¥Ú£_»® ( bthf_©_»¥Ú£_t »¥Ú£ ,  ”rÜ , 677 bt_bdaddr_t * bd_addr ) 679  h®_cmd_hªdsä“_©_»¥Ú£ cmd ; 681 `DBG (""); 683 ià(! `š‹rçû_»ady ()) 684  BT_STATUS_NOT_READY ; 686 ià( bd_addr ) 687 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 689 `mem£t (& cmd , 0, (cmd)); 691 cmd . »¥Ú£ =„esponse; 692 cmd . ”rÜ =ƒrror; 694  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , 695 HAL_OP_HANDSFREE_AT_RESPONSE , 696 ( cmd ), &cmd, NULL , NULL, NULL); 697 } } 699 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 700  bt_¡©us_t $©_»¥Ú£ ( bthf_©_»¥Ú£_t »¥Ú£ ,  ”rÜ , 701 bt_bdaddr_t * bd_addr ) 703  `©_»¥Ú£_»® ( »¥Ú£ , ”rÜ , bd_addr ); 704 } } 706  bt_¡©us_t $©_»¥Ú£ ( bthf_©_»¥Ú£_t »¥Ú£ ,  ”rÜ ) 708  `©_»¥Ú£_»® ( »¥Ú£ , ”rÜ , NULL ); 709 } } 712  bt_¡©us_t $þcc_»¥Ú£_»® ( šdex , bthf_ÿÎ_dœeùiÚ_t dœ , 713 bthf_ÿÎ_¡©e_t ¡©e , 714 bthf_ÿÎ_mode_t mode , 715 bthf_ÿÎ_m±y_ty³_t m±y , 716 cÚ¡ * numb” , 717 bthf_ÿÎ_add¹y³_t ty³ , 718 bt_bdaddr_t * bd_addr ) 720  buf [ IPC_MTU ]; 721  h®_cmd_hªdsä“_þcc_»¥Ú£ * cmd = (*è buf ; 722 size_t Ën ; 724 `DBG (""); 726 ià(! `š‹rçû_»ady ()) 727  BT_STATUS_NOT_READY ; 729 `mem£t ( cmd , 0, (*cmd)); 731 ià( bd_addr ) 732 `memýy ( cmd -> bdaddr , bd_addr , (cmd->bdaddr)); 734 cmd -> šdex = index; 735 cmd -> dœ = dir; 736 cmd -> ¡©e = state; 737 cmd -> mode = mode; 738 cmd -> m±y = mpty; 739 cmd -> ty³ =ype; 741 ià( numb” ) { 742 cmd -> numb”_Ën = `¡¾’ ( numb” ) + 1; 743 `memýy ( cmd -> numb” ,‚umb”, cmd-> numb”_Ën ); 745 cmd -> numb”_Ën = 0; 748 Ën = (* cmd è+ cmd-> numb”_Ën ; 750  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , 751 HAL_OP_HANDSFREE_CLCC_RESPONSE , 752 Ën , cmd , NULL , NULL, NULL); 753 } } 755 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 756  bt_¡©us_t $þcc_»¥Ú£ ( šdex , bthf_ÿÎ_dœeùiÚ_t dœ , 757 bthf_ÿÎ_¡©e_t ¡©e , 758 bthf_ÿÎ_mode_t mode , 759 bthf_ÿÎ_m±y_ty³_t m±y , 760 cÚ¡ * numb” , 761 bthf_ÿÎ_add¹y³_t ty³ , 762 bt_bdaddr_t * bd_addr ) 764  `þcc_»¥Ú£_»® ( šdex , dœ , ¡©e , mode , m±y , numb” , ty³ , 765 bd_addr ); 766 } } 768  bt_¡©us_t $þcc_»¥Ú£ ( šdex , bthf_ÿÎ_dœeùiÚ_t dœ , 769 bthf_ÿÎ_¡©e_t ¡©e , 770 bthf_ÿÎ_mode_t mode , 771 bthf_ÿÎ_m±y_ty³_t m±y , 772 cÚ¡ * numb” , 773 bthf_ÿÎ_add¹y³_t ty³ ) 775  `þcc_»¥Ú£_»® ( šdex , dœ , ¡©e , mode , m±y , numb” , ty³ , 776 NULL ); 777 } } 780  bt_¡©us_t $phÚe_¡©e_chªge ( num_aùive ,  num_h–d , 781 bthf_ÿÎ_¡©e_t ¡©e , 782 cÚ¡ * numb” , 783 bthf_ÿÎ_add¹y³_t ty³ ) 785  buf [ IPC_MTU ]; 786  h®_cmd_hªdsä“_phÚe_¡©e_chªge * cmd = (*è buf ; 787 size_t Ën ; 789 `DBG (""); 791 ià(! `š‹rçû_»ady ()) 792  BT_STATUS_NOT_READY ; 794 cmd -> num_aùive =‚um_active; 795 cmd -> num_h–d =‚um_held; 796 cmd -> ¡©e = state; 797 cmd -> ty³ =ype; 799 ià( numb” ) { 800 cmd -> numb”_Ën = `¡¾’ ( numb” ) + 1; 801 `memýy ( cmd -> numb” ,‚umb”, cmd-> numb”_Ën ); 803 cmd -> numb”_Ën = 0; 806 Ën = (* cmd è+ cmd-> numb”_Ën ; 808  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , 809 HAL_OP_HANDSFREE_PHONE_STATE_CHANGE , 810 Ën , cmd , NULL , NULL, NULL); 811 } } 813  $þ—nup () 815  h®_cmd_uÄegi¡”_moduË cmd ; 817 `DBG (""); 819 ià(! `š‹rçû_»ady ()) 822 cmd . £rviû_id = HAL_SERVICE_ID_HANDSFREE ; 824 `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_UNREGISTER_MODULE , 825 ( cmd ), &cmd, NULL , NULL, NULL); 827 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_HANDSFREE ); 829 cbs = NULL ; 830 } } 832 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 833  bt_¡©us_t $cÚfigu»_wbs ( bt_bdaddr_t * bd_addr , bthf_wbs_cÚfig_t cÚfig ) 835  h®_cmd_hªdsä“_cÚfigu»_wbs cmd ; 837 `DBG ("%u", cÚfig ); 839 ià(! `š‹rçû_»ady ()) 840  BT_STATUS_NOT_READY ; 842 ià(! bd_addr ) 843  BT_STATUS_PARM_INVALID ; 845 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 846 cmd . cÚfig = config; 848  `h®_c_cmd ( HAL_SERVICE_ID_HANDSFREE , 849 HAL_OP_HANDSFREE_CONFIGURE_WBS , 850 ( cmd ), &cmd, NULL , NULL, NULL); 851 } } 854  bthf_š‹rçû_t giçû = { 855 . size = ( içû ), 856 . gš™ = š™ , 857 . gcÚÃù = hªdsä“_cÚÃù , 858 . gdiscÚÃù = discÚÃù , 859 . gcÚÃù_audio = cÚÃù_audio , 860 . gdiscÚÃù_audio = discÚÃù_audio , 861 . g¡¬t_voiû_»cogn™iÚ = ¡¬t_voiû_»cogn™iÚ , 862 . g¡Ý_voiû_»cogn™iÚ = ¡Ý_voiû_»cogn™iÚ , 863 . gvÞume_cÚŒÞ = vÞume_cÚŒÞ , 864 . gdeviû_¡©us_nÙifiÿtiÚ = deviû_¡©us_nÙifiÿtiÚ , 865 . gcÝs_»¥Ú£ = cÝs_»¥Ú£ , 866 . gcšd_»¥Ú£ = cšd_»¥Ú£ , 867 . gfÜm©‹d_©_»¥Ú£ = fÜm©‹d_©_»¥Ú£ , 868 . g©_»¥Ú£ = ©_»¥Ú£ , 869 . gþcc_»¥Ú£ = þcc_»¥Ú£ , 870 . gphÚe_¡©e_chªge = phÚe_¡©e_chªge , 871 . gþ—nup = þ—nup , 872 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 873 . gcÚfigu»_wbs = cÚfigu»_wbs , 877 bthf_š‹rçû_t * $bt_g‘_hªdsä“_š‹rçû () 879  & içû ; 880 } } @android/hal-health.c 18  ~<¡dboÞ.h > 19  ~<¡ddef.h > 20  ~<¡ršg.h > 21  ~<¡dlib.h > 22  ~ 23  ~ 24  ~<”ºo.h > 26  ~"h®-log.h " 27  ~"h®.h " 28  ~"h®-msg.h " 29  ~"c-commÚ.h " 30  ~"h®-c.h " 32 cÚ¡ bthl_ÿÎbacks_t * gcbacks = NULL ; 34  boÞ $š‹rçû_»ady () 36  cbacks !ð NULL ; 37 } } 39  $hªdË_­p_»gi¡¿tiÚ_¡©e (* buf , ušt16_t Ën ,  fd ) 41  h®_ev_h—Éh_­p_»g_¡©e * ev = buf ; 43 ià( cbacks -> ­p_»g_¡©e_cb ) 44 cbacks -> `­p_»g_¡©e_cb ( ev -> id ,ƒv-> ¡©e ); 45 } } 47  $hªdË_chªÃl_¡©e (* buf , ušt16_t Ën ,  fd ) 49  h®_ev_h—Éh_chªÃl_¡©e * ev = buf ; 50  æags ; 52 ià( fd < 0) 53  ’d ; 55 æags = `fúŽ ( fd , F_GETFL , 0); 56 ià( æags < 0) { 57 `”rÜ ("h—Éh: fúŽ GETFLƒ¼Ü: %s", `¡»¼Ü ( ”ºo )); 62 ià( `fúŽ ( fd , F_SETFL , æags & ~ O_NONBLOCK ) < 0) { 63 `”rÜ ("h—Éh: fúŽ SETFLƒ¼Ü: %s", `¡»¼Ü ( ”ºo )); 67 ’d : 68 ià( cbacks -> chªÃl_¡©e_cb ) 69 cbacks -> `chªÃl_¡©e_cb ( ev -> ­p_id , ( bt_bdaddr_t *èev-> bdaddr , 70 ev -> md•_šdex ,ƒv-> chªÃl_id , 71 ev -> chªÃl_¡©e , fd ); 72 } } 78 cÚ¡  h®_c_hªdËr gev_hªdËrs [] = { 80 { hªdË_­p_»gi¡¿tiÚ_¡©e , çl£ , 81 ( h®_ev_h—Éh_­p_»g_¡©e ) }, 83 { hªdË_chªÃl_¡©e , çl£ , 84 ( h®_ev_h—Éh_chªÃl_¡©e ) }, 87  bt_¡©us_t $»gi¡”_­¶iÿtiÚ ( bthl_»g_·¿m_t * »g , * ­p_id ) 89 ušt8_t buf [ IPC_MTU ]; 90  h®_cmd_h—Éh_»g_­p * cmd = (*è buf ; 91  h®_r¥_h—Éh_»g_­p r¥ ; 92 size_t r¥_Ën = ( r¥ ); 93 bt_¡©us_t ¡©us ; 94 ušt16_t off , Ën ; 95  i ; 97 `DBG (""); 99 ià(! `š‹rçû_»ady ()) 100  BT_STATUS_NOT_READY ; 102 ià(! »g || ! ­p_id || !»g-> ­¶iÿtiÚ_Çme ) 103  BT_STATUS_PARM_INVALID ; 105 * ­p_id = -1; 106 `mem£t ( buf , 0, IPC_MTU ); 108 cmd -> num_of_md• = »g -> numb”_of_md•s ; 110 off = 0; 111 cmd -> ­p_Çme_off = off ; 112 Ën = `¡¾’ ( »g -> ­¶iÿtiÚ_Çme ) + 1; 113 `memýy ( cmd -> d©a , »g -> ­¶iÿtiÚ_Çme , Ën ); 114 off +ð Ën ; 116 cmd -> ´ovid”_Çme_off = off ; 117 ià( »g -> ´ovid”_Çme ) { 118 Ën = `¡¾’ ( »g -> ´ovid”_Çme ) + 1; 119 `memýy ( cmd -> d©a + off , »g -> ´ovid”_Çme , Ën ); 120 off +ð Ën ; 123 cmd -> £rviû_Çme_off = off ; 124 ià( »g -> ¤v_Çme ) { 125 Ën = `¡¾’ ( »g -> ¤v_Çme ) + 1; 126 `memýy ( cmd -> d©a + off , »g -> ¤v_Çme , Ën ); 127 off +ð Ën ; 130 cmd -> £rviû_desü_off = off ; 131 ià( »g -> ¤v_de¥ ) { 132 Ën = `¡¾’ ( »g -> ¤v_de¥ ) + 1; 133 `memýy ( cmd -> d©a + off , »g -> ¤v_de¥ , Ën ); 134 off +ð Ën ; 137 cmd -> Ën = off ; 138 ¡©us = `h®_c_cmd ( HAL_SERVICE_ID_HEALTH , HAL_OP_HEALTH_REG_APP , 139 (* cmd è+ cmd-> Ën , buf , 140 & r¥_Ën , & r¥ , NULL ); 141 ià( ¡©us !ð BT_STATUS_SUCCESS ) 142  ¡©us ; 144  i = 0; i < »g -> numb”_of_md•s ; i++) { 145  h®_cmd_h—Éh_md• * md• = (*è buf ; 147 `mem£t ( buf , 0, IPC_MTU ); 148 md• -> ­p_id = r¥ .app_id; 149 md• -> rÞe = »g -> md•_cfg [ i ]. md•_rÞe ; 150 md• -> d©a_ty³ = »g -> md•_cfg [ i ].data_type; 151 md• -> chªÃl_ty³ = »g -> md•_cfg [ i ].channel_type; 153 ià( »g -> md•_cfg [ i ]. md•_desütiÚ ) { 154 md• -> desü_Ën = 155 `¡¾’ ( »g -> md•_cfg [ i ]. md•_desütiÚ ) + 1; 156 `memýy ( md• -> desü , »g -> md•_cfg [ i ]. md•_desütiÚ , 157 md• -> desü_Ën ); 160 ¡©us = `h®_c_cmd ( HAL_SERVICE_ID_HEALTH , HAL_OP_HEALTH_MDEP , 161 (* md• è+ md•-> desü_Ën , 162 buf , NULL , NULL, NULL); 164 ià( ¡©us !ð BT_STATUS_SUCCESS ) 165  ¡©us ; 168 * ­p_id = r¥ .app_id; 170  ¡©us ; 171 } } 173  bt_¡©us_t $uÄegi¡”_­¶iÿtiÚ ( ­p_id ) 175  h®_cmd_h—Éh_uÄeg_­p cmd ; 177 `DBG (""); 179 ià(! `š‹rçû_»ady ()) 180  BT_STATUS_NOT_READY ; 182 cmd . ­p_id =‡pp_id; 184  `h®_c_cmd ( HAL_SERVICE_ID_HEALTH , HAL_OP_HEALTH_UNREG_APP , 185 ( cmd ), &cmd, NULL , NULL, NULL); 186 } } 188  bt_¡©us_t $cÚÃù_chªÃl ( ­p_id , bt_bdaddr_t * bd_addr , 189  md•_cfg_šdex , * chªÃl_id ) 191  h®_cmd_h—Éh_cÚÃù_chªÃl cmd ; 192  h®_r¥_h—Éh_cÚÃù_chªÃl r¥ ; 193 size_t Ën = ( r¥ ); 194 bt_¡©us_t ¡©us ; 196 `DBG (""); 198 ià(! `š‹rçû_»ady ()) 199  BT_STATUS_NOT_READY ; 201 ià(! bd_addr || ! chªÃl_id ) 202  BT_STATUS_PARM_INVALID ; 204 * chªÃl_id = -1; 205 cmd . ­p_id =‡pp_id; 206 cmd . md•_šdex = md•_cfg_šdex ; 207 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 209 ¡©us = `h®_c_cmd ( HAL_SERVICE_ID_HEALTH , 210 HAL_OP_HEALTH_CONNECT_CHANNEL , 211 ( cmd ), &cmd, & Ën , & r¥ , NULL ); 213 ià( ¡©us =ð BT_STATUS_SUCCESS ) 214 * chªÃl_id = r¥ .channel_id; 216  ¡©us ; 217 } } 219  bt_¡©us_t $de¡roy_chªÃl ( chªÃl_id ) 221  h®_cmd_h—Éh_de¡roy_chªÃl cmd ; 223 `DBG (""); 225 ià(! `š‹rçû_»ady ()) 226  BT_STATUS_NOT_READY ; 228 cmd . chªÃl_id = channel_id; 230  `h®_c_cmd ( HAL_SERVICE_ID_HEALTH , HAL_OP_HEALTH_DESTROY_CHANNEL , 231 ( cmd ), &cmd, NULL , NULL, NULL); 232 } } 234  bt_¡©us_t $š™ ( bthl_ÿÎbacks_t * ÿÎbacks ) 236  h®_cmd_»gi¡”_moduË cmd ; 237  »t ; 239 `DBG (""); 241 ià( `š‹rçû_»ady ()) 242  BT_STATUS_DONE ; 245 cbacks = ÿÎbacks ; 247 `h®_c_»gi¡” ( HAL_SERVICE_ID_HEALTH , ev_hªdËrs , 248 ( ev_hªdËrs )/(ev_handlers[0])); 250 cmd . £rviû_id = HAL_SERVICE_ID_HEALTH ; 251 cmd . mode = HAL_MODE_DEFAULT ; 252 cmd . max_þ›Ás = 1; 254 »t = `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_REGISTER_MODULE , 255 ( cmd ), &cmd, NULL , NULL, NULL); 257 ià( »t !ð BT_STATUS_SUCCESS ) { 258 cbacks = NULL ; 259 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_HEALTH ); 262  »t ; 263 } } 265  $þ—nup () 267  h®_cmd_uÄegi¡”_moduË cmd ; 269 `DBG (""); 271 ià(! `š‹rçû_»ady ()) 274 cmd . £rviû_id = HAL_SERVICE_ID_HEALTH ; 276 `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_UNREGISTER_MODULE , 277 ( cmd ), &cmd, NULL , NULL, NULL); 279 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_HEALTH ); 281 cbacks = NULL ; 282 } } 284  bthl_š‹rçû_t gh—Éh_if = { 285 . size = ( h—Éh_if ), 286 . gš™ = š™ , 287 . g»gi¡”_­¶iÿtiÚ = »gi¡”_­¶iÿtiÚ , 288 . guÄegi¡”_­¶iÿtiÚ = uÄegi¡”_­¶iÿtiÚ , 289 . gcÚÃù_chªÃl = cÚÃù_chªÃl , 290 . gde¡roy_chªÃl = de¡roy_chªÃl , 291 . gþ—nup = þ—nup 294 bthl_š‹rçû_t * $bt_g‘_h—Éh_š‹rçû () 296  & h—Éh_if ; 297 } } @android/hal-hidhost.c 18  ~<¡dboÞ.h > 19  ~<¡ddef.h > 20  ~<¡ršg.h > 21  ~<¡dlib.h > 23  ~"h®-log.h " 24  ~"h®.h " 25  ~"h®-msg.h " 26  ~"c-commÚ.h " 27  ~"h®-c.h " 29 cÚ¡ bthh_ÿÎbacks_t * gcbacks ; 31  boÞ $š‹rçû_»ady () 33  cbacks !ð NULL ; 34 } } 36  $hªdË_cÚn_¡©e (* buf , ušt16_t Ën ,  fd ) 38  h®_ev_hidho¡_cÚn_¡©e * ev = buf ; 40 ià( cbacks -> cÚÃùiÚ_¡©e_cb ) 41 cbacks -> `cÚÃùiÚ_¡©e_cb (( bt_bdaddr_t *è ev -> bdaddr , 42 ev -> ¡©e ); 43 } } 45  $hªdË_šfo (* buf , ušt16_t Ën ,  fd ) 47  h®_ev_hidho¡_šfo * ev = buf ; 48 bthh_hid_šfo_t šfo ; 50 šfo . ©Œ_mask = ev -> ©Œ ; 51 šfo . sub_þass = ev -> subþass ; 52 šfo . ­p_id = ev ->app_id; 53 šfo . v’dÜ_id = ev -> v’dÜ ; 54 šfo . ´oduù_id = ev -> ´oduù ; 55 šfo . v”siÚ = ev ->version; 56 šfo . ùry_code = ev -> couÁry ; 57 šfo . dl_Ën = ev -> desü_Ën ; 58 `memýy ( šfo . dsc_li¡ , ev -> desü , info. dl_Ën ); 60 ià( cbacks -> hid_šfo_cb ) 61 cbacks -> `hid_šfo_cb (( bt_bdaddr_t *è ev -> bdaddr , šfo ); 62 } } 64  $hªdË_´Ùo_mode (* buf , ušt16_t Ën ,  fd ) 66  h®_ev_hidho¡_´Ùo_mode * ev = buf ; 68 ià( cbacks -> ´ÙocÞ_mode_cb ) 69 cbacks -> `´ÙocÞ_mode_cb (( bt_bdaddr_t *è ev -> bdaddr , 70 ev -> ¡©us ,ƒv-> mode ); 71 } } 73  $hªdË_idË_time (* buf , ušt16_t Ën ,  fd ) 75  h®_ev_hidho¡_idË_time * ev = buf ; 77 ià( cbacks -> idË_time_cb ) 78 cbacks -> `idË_time_cb (( bt_bdaddr_t *è ev -> bdaddr ,ƒv-> ¡©us , 79 ev -> idË_¿‹ ); 80 } } 82  $hªdË_g‘_»pÜt (* buf , ušt16_t Ën ,  fd ) 84  h®_ev_hidho¡_g‘_»pÜt * ev = buf ; 86 ià( Ën !ð(* ev ) +ƒv->len) { 87 `”rÜ ("invalid get„eportƒvent,‡borting"); 88 `ex™ ( EXIT_FAILURE ); 91 ià( cbacks -> g‘_»pÜt_cb ) 92 cbacks -> `g‘_»pÜt_cb (( bt_bdaddr_t *è ev -> bdaddr ,ƒv-> ¡©us , 93 ev -> d©a ,ƒv-> Ën ); 94 } } 96  $hªdË_vœtu®_uÅlug (* buf , ušt16_t Ën ,  fd ) 98  h®_ev_hidho¡_vœtu®_uÅlug * ev = buf ; 100 ià( cbacks -> vœtu®_uÅlug_cb ) 101 cbacks -> `vœtu®_uÅlug_cb (( bt_bdaddr_t *è ev -> bdaddr , 102 ev -> ¡©us ); 103 } } 105  $hªdË_hªdshake (* buf , ušt16_t Ën ,  fd ) 107 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 108  h®_ev_hidho¡_hªdshake * ev = buf ; 110 ià( cbacks -> hªdshake_cb ) 111 cbacks -> `hªdshake_cb (( bt_bdaddr_t *è ev -> bdaddr ,ƒv-> ¡©us ); 113 } } 119 cÚ¡  h®_c_hªdËr gev_hªdËrs [] = { 121 { hªdË_cÚn_¡©e , çl£ , ( h®_ev_hidho¡_cÚn_¡©e ) }, 123 { hªdË_šfo , çl£ , ( h®_ev_hidho¡_šfo ) }, 125 { hªdË_´Ùo_mode , çl£ , ( h®_ev_hidho¡_´Ùo_mode ) }, 127 { hªdË_idË_time , çl£ , ( h®_ev_hidho¡_idË_time ) }, 129 { hªdË_g‘_»pÜt , Œue , ( h®_ev_hidho¡_g‘_»pÜt ) }, 131 { hªdË_vœtu®_uÅlug , çl£ , 132 ( h®_ev_hidho¡_vœtu®_uÅlug ) }, 133 { hªdË_hªdshake , çl£ , ( h®_ev_hidho¡_hªdshake ) }, 136  bt_¡©us_t $hidho¡_cÚÃù ( bt_bdaddr_t * bd_addr ) 138  h®_cmd_hidho¡_cÚÃù cmd ; 140 `DBG (""); 142 ià(! `š‹rçû_»ady ()) 143  BT_STATUS_NOT_READY ; 145 ià(! bd_addr ) 146  BT_STATUS_PARM_INVALID ; 148 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 150  `h®_c_cmd ( HAL_SERVICE_ID_HIDHOST , HAL_OP_HIDHOST_CONNECT , 151 ( cmd ), &cmd, NULL , NULL, NULL); 152 } } 154  bt_¡©us_t $discÚÃù ( bt_bdaddr_t * bd_addr ) 156  h®_cmd_hidho¡_discÚÃù cmd ; 158 `DBG (""); 160 ià(! `š‹rçû_»ady ()) 161  BT_STATUS_NOT_READY ; 163 ià(! bd_addr ) 164  BT_STATUS_PARM_INVALID ; 166 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 168  `h®_c_cmd ( HAL_SERVICE_ID_HIDHOST , HAL_OP_HIDHOST_DISCONNECT , 169 ( cmd ), &cmd, NULL , NULL, NULL); 170 } } 172  bt_¡©us_t $vœtu®_uÅlug ( bt_bdaddr_t * bd_addr ) 174  h®_cmd_hidho¡_vœtu®_uÅlug cmd ; 176 `DBG (""); 178 ià(! `š‹rçû_»ady ()) 179  BT_STATUS_NOT_READY ; 181 ià(! bd_addr ) 182  BT_STATUS_PARM_INVALID ; 184 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 186  `h®_c_cmd ( HAL_SERVICE_ID_HIDHOST , 187 HAL_OP_HIDHOST_VIRTUAL_UNPLUG , 188 ( cmd ), &cmd, NULL , NULL, NULL); 189 } } 191  bt_¡©us_t $£t_šfo ( bt_bdaddr_t * bd_addr , bthh_hid_šfo_t hid_šfo ) 193  h®_cmd_hidho¡_£t_šfo cmd ; 195 `DBG (""); 197 ià(! `š‹rçû_»ady ()) 198  BT_STATUS_NOT_READY ; 200 ià(! bd_addr ) 201  BT_STATUS_PARM_INVALID ; 203 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 204 cmd . ©Œ = hid_šfo . ©Œ_mask ; 205 cmd . subþass = hid_šfo . sub_þass ; 206 cmd . ­p_id = hid_šfo .app_id; 207 cmd . v’dÜ = hid_šfo . v’dÜ_id ; 208 cmd . ´oduù = hid_šfo . ´oduù_id ; 209 cmd . couÁry = hid_šfo . ùry_code ; 210 cmd . desü_Ën = hid_šfo . dl_Ën ; 211 `memýy ( cmd . desü , hid_šfo . dsc_li¡ , cmd. desü_Ën ); 213  `h®_c_cmd ( HAL_SERVICE_ID_HIDHOST , HAL_OP_HIDHOST_SET_INFO , 214 ( cmd ), &cmd, NULL , NULL, NULL); 215 } } 217  bt_¡©us_t $g‘_´ÙocÞ ( bt_bdaddr_t * bd_addr , 218 bthh_´ÙocÞ_mode_t ´ÙocÞ_mode ) 220  h®_cmd_hidho¡_g‘_´ÙocÞ cmd ; 222 `DBG (""); 224 ià(! `š‹rçû_»ady ()) 225  BT_STATUS_NOT_READY ; 227 ià(! bd_addr ) 228  BT_STATUS_PARM_INVALID ; 230 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 233 cmd . mode = ´ÙocÞ_mode ; 235  `h®_c_cmd ( HAL_SERVICE_ID_HIDHOST , 236 HAL_OP_HIDHOST_GET_PROTOCOL , 237 ( cmd ), &cmd, NULL , NULL, NULL); 238 } } 240  bt_¡©us_t $£t_´ÙocÞ ( bt_bdaddr_t * bd_addr , 241 bthh_´ÙocÞ_mode_t ´ÙocÞ_mode ) 243  h®_cmd_hidho¡_£t_´ÙocÞ cmd ; 245 `DBG (""); 247 ià(! `š‹rçû_»ady ()) 248  BT_STATUS_NOT_READY ; 250 ià(! bd_addr ) 251  BT_STATUS_PARM_INVALID ; 253 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 256 cmd . mode = ´ÙocÞ_mode ; 258  `h®_c_cmd ( HAL_SERVICE_ID_HIDHOST , 259 HAL_OP_HIDHOST_SET_PROTOCOL , 260 ( cmd ), &cmd, NULL , NULL, NULL); 261 } } 263  bt_¡©us_t $g‘_»pÜt ( bt_bdaddr_t * bd_addr , 264 bthh_»pÜt_ty³_t »pÜt_ty³ , 265 ušt8_t »pÜt_id , 266  bufãr_size ) 268  h®_cmd_hidho¡_g‘_»pÜt cmd ; 270 `DBG (""); 272 ià(! `š‹rçû_»ady ()) 273  BT_STATUS_NOT_READY ; 275 ià(! bd_addr ) 276  BT_STATUS_PARM_INVALID ; 278 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 279 cmd . id = »pÜt_id ; 280 cmd . buf_size = bufãr_size ; 283 cmd . ty³ = »pÜt_ty³ ; 285  `h®_c_cmd ( HAL_SERVICE_ID_HIDHOST , HAL_OP_HIDHOST_GET_REPORT , 286 ( cmd ), &cmd, NULL , NULL, NULL); 287 } } 289  bt_¡©us_t $£t_»pÜt ( bt_bdaddr_t * bd_addr , 290 bthh_»pÜt_ty³_t »pÜt_ty³ , 291 * »pÜt ) 293 ušt8_t buf [ IPC_MTU ]; 294  h®_cmd_hidho¡_£t_»pÜt * cmd = (*è buf ; 296 `DBG (""); 298 ià(! `š‹rçû_»ady ()) 299  BT_STATUS_NOT_READY ; 301 ià(! bd_addr || ! »pÜt ) 302  BT_STATUS_PARM_INVALID ; 304 `memýy ( cmd -> bdaddr , bd_addr , (cmd->bdaddr)); 305 cmd -> Ën = `¡¾’ ( »pÜt ); 306 `memýy ( cmd -> d©a , »pÜt , cmd-> Ën ); 309 cmd -> ty³ = »pÜt_ty³ ; 311  `h®_c_cmd ( HAL_SERVICE_ID_HIDHOST , HAL_OP_HIDHOST_SET_REPORT , 312 (* cmd è+ cmd-> Ën , buf , NULL , NULL, NULL); 313 } } 315  bt_¡©us_t $£nd_d©a ( bt_bdaddr_t * bd_addr , * d©a ) 317 ušt8_t buf [ IPC_MTU ]; 318  h®_cmd_hidho¡_£nd_d©a * cmd = (*è buf ; 320 `DBG (""); 322 ià(! `š‹rçû_»ady ()) 323  BT_STATUS_NOT_READY ; 325 ià(! bd_addr || ! d©a ) 326  BT_STATUS_PARM_INVALID ; 328 `memýy ( cmd -> bdaddr , bd_addr , (cmd->bdaddr)); 329 cmd -> Ën = `¡¾’ ( d©a ); 330 `memýy ( cmd -> d©a , d©a, cmd-> Ën ); 332  `h®_c_cmd ( HAL_SERVICE_ID_HIDHOST , HAL_OP_HIDHOST_SEND_DATA , 333 (* cmd è+ cmd-> Ën , buf , NULL , NULL, NULL); 334 } } 336  bt_¡©us_t $š™ ( bthh_ÿÎbacks_t * ÿÎbacks ) 338  h®_cmd_»gi¡”_moduË cmd ; 339  »t ; 341 `DBG (""); 343 ià( `š‹rçû_»ady ()) 344  BT_STATUS_DONE ; 347 cbacks = ÿÎbacks ; 349 `h®_c_»gi¡” ( HAL_SERVICE_ID_HIDHOST , ev_hªdËrs , 350 ( ev_hªdËrs )/(ev_handlers[0])); 352 cmd . £rviû_id = HAL_SERVICE_ID_HIDHOST ; 353 cmd . mode = HAL_MODE_DEFAULT ; 354 cmd . max_þ›Ás = 1; 356 »t = `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_REGISTER_MODULE , 357 ( cmd ), &cmd, NULL , NULL, NULL); 359 ià( »t !ð BT_STATUS_SUCCESS ) { 360 cbacks = NULL ; 361 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_HIDHOST ); 364  »t ; 365 } } 367  $þ—nup () 369  h®_cmd_uÄegi¡”_moduË cmd ; 371 `DBG (""); 373 ià(! `š‹rçû_»ady ()) 376 cmd . £rviû_id = HAL_SERVICE_ID_HIDHOST ; 378 `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_UNREGISTER_MODULE , 379 ( cmd ), &cmd, NULL , NULL, NULL); 381 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_HIDHOST ); 383 cbacks = NULL ; 384 } } 386  bthh_š‹rçû_t ghidho¡_if = { 387 . size = ( hidho¡_if ), 388 . gš™ = š™ , 389 . gcÚÃù = hidho¡_cÚÃù , 390 . gdiscÚÃù = discÚÃù , 391 . gvœtu®_uÅlug = vœtu®_uÅlug , 392 . g£t_šfo = £t_šfo , 393 . gg‘_´ÙocÞ = g‘_´ÙocÞ , 394 . g£t_´ÙocÞ = £t_´ÙocÞ , 395 . gg‘_»pÜt = g‘_»pÜt , 396 . g£t_»pÜt = £t_»pÜt , 397 . g£nd_d©a = £nd_d©a , 398 . gþ—nup = þ—nup 401 bthh_š‹rçû_t * $bt_g‘_hidho¡_š‹rçû () 403  & hidho¡_if ; 404 } } @android/hal-ipc.c 18  ~<±h»ad.h > 19  ~<”ºo.h > 20  ~ 21  ~ 22  ~<¡dboÞ.h > 23  ~ 24  ~ 25  ~<¡dšt.h > 26  ~<¡dlib.h > 28  ~ 30  ~"h®.h " 31  ~"h®-msg.h " 32  ~"h®-log.h " 33  ~"c-commÚ.h " 34  ~"h®-c.h " 36  #CONNECT_TIMEOUT (10 * 1000) ) 38  gli¡’_sk = -1; 39  gcmd_sk = -1; 40  gnÙif_sk = -1; 42  ±h»ad_mu‹x_t gcmd_sk_mu‹x = PTHREAD_MUTEX_INITIALIZER ; 44  ±h»ad_t gnÙif_th = 0; 46  s£rviû_hªdËr { 47 cÚ¡  h®_c_hªdËr * mhªdËr ; 48 ušt8_t msize ; 51  £rviû_hªdËr g£rviûs [ HAL_SERVICE_ID_MAX + 1]; 53  $h®_c_»gi¡” ( ušt8_t £rviû , cÚ¡  h®_c_hªdËr * hªdËrs , 54 ušt8_t size ) 56 £rviûs [ £rviû ]. hªdËr = hªdËrs ; 57 £rviûs [ £rviû ]. size = size; 58 } } 60  $h®_c_uÄegi¡” ( ušt8_t £rviû ) 62 £rviûs [ £rviû ]. hªdËr = NULL ; 63 £rviûs [ £rviû ]. size = 0; 64 } } 66  boÞ $hªdË_msg (* buf , ssize_t Ën ,  fd ) 68  c_hdr * msg = buf ; 69 cÚ¡  h®_c_hªdËr * hªdËr ; 70 ušt8_t Ýcode ; 72 ià( Ën < ( ssize_t è(* msg )) { 73 `”rÜ ("IPC: mes§gtoØsm®È(%zd by‹s)", Ën ); 74  çl£ ; 77 ià( Ën !ð( ssize_t è((* msg ) + msg->len)) { 78 `”rÜ ("IPC: mes§gm®fÜmed (%zd by‹s)", Ën ); 79  çl£ ; 83 ià( msg -> £rviû_id > HAL_SERVICE_ID_MAX ) { 84 `”rÜ ("IPC: unknowÀ£rviû (0x%x)", msg -> £rviû_id ); 85  çl£ ; 89 ià(! £rviûs [ msg -> £rviû_id ]. hªdËr ) { 90 `”rÜ ("IPC: uÄegi¡”ed s”viû (0x%x)", msg -> £rviû_id ); 91  çl£ ; 95 ià( msg -> Ýcode < HAL_MINIMUM_EVENT ) { 96 `”rÜ ("IPC: invalid opcode for service 0x%x (0x%x)", 97 msg -> £rviû_id , msg-> Ýcode ); 98  çl£ ; 105 Ýcode = msg ->Ýcod- HAL_MINIMUM_EVENT ; 108 ià( Ýcode >ð £rviûs [ msg -> £rviû_id ]. size ) { 109 `”rÜ ("IPC: invalid opcode for service 0x%x (0x%x)", 110 msg -> £rviû_id , msg-> Ýcode ); 111  çl£ ; 114 hªdËr = & £rviûs [ msg -> £rviû_id ].hªdËr[ Ýcode ]; 117 ià(( hªdËr -> v¬_Ën && hªdËr-> d©a_Ën > msg -> Ën ) || 118 (! hªdËr -> v¬_Ën && hªdËr-> d©a_Ën !ð msg -> Ën )) { 119 `”rÜ ("IPC: message size invalid for service 0x%x opcode 0x%x " 121 msg -> £rviû_id , msg-> Ýcode , msg-> Ën ); 122  çl£ ; 125 hªdËr -> `hªdËr ( msg -> ·ylßd , msg-> Ën , fd ); 127  Œue ; 128 } } 130 * $nÙifiÿtiÚ_hªdËr (* d©a ) 132  msghdr msg ; 133  iovec iv ; 134  cmsghdr * cmsg ; 135  cmsgbuf [ `CMSG_SPACE (())]; 136  buf [ IPC_MTU ]; 137 ssize_t »t ; 138  fd ; 140 `bt_th»ad_assocŸ‹ (); 142  Œue ) { 143 `mem£t (& msg , 0, (msg)); 144 `mem£t ( buf , 0, (buf)); 145 `mem£t ( cmsgbuf , 0, (cmsgbuf)); 147 iv . iov_ba£ = buf ; 148 iv . iov_Ën = ( buf ); 150 msg . msg_iov = & iv ; 151 msg . msg_iovËn = 1; 153 msg . msg_cÚŒÞ = cmsgbuf ; 154 msg . msg_cÚŒÞËn = ( cmsgbuf ); 156 »t = `»cvmsg ( nÙif_sk , & msg , 0); 157 ià( »t < 0) { 158 `”rÜ ("Receiving‚otifications failed: %s", 159 `¡»¼Ü ( ”ºo )); 160  çžed ; 164 ià( »t == 0) { 165 `±h»ad_mu‹x_lock (& cmd_sk_mu‹x ); 166 ià( cmd_sk == -1) { 167 `±h»ad_mu‹x_uÆock (& cmd_sk_mu‹x ); 170 `±h»ad_mu‹x_uÆock (& cmd_sk_mu‹x ); 172 `”rÜ ("Notification socket closed"); 173  çžed ; 176 fd = -1; 179  cmsg = `CMSG_FIRSTHDR (& msg ); cmsg; 180 cmsg = `CMSG_NXTHDR (& msg , cmsg)) { 181 ià( cmsg -> cmsg_Ëv– =ð SOL_SOCKET 182 && cmsg -> cmsg_ty³ =ð SCM_RIGHTS ) { 183 `memýy (& fd , `CMSG_DATA ( cmsg ), ()); 188 ià(! `hªdË_msg ( buf , »t , fd )) 189  çžed ; 192 `þo£ ( nÙif_sk ); 193 nÙif_sk = -1; 195 `bt_th»ad_di§ssocŸ‹ (); 197 `DBG ("exit"); 199  NULL ; 201 çžed : 202 `ex™ ( EXIT_FAILURE ); 203 } } 205  $acû±_cÚÃùiÚ ( sk ) 207  ”r ; 208  pÞlfd pfd ; 209  Ãw_sk ; 211 `mem£t (& pfd , 0 , (pfd)); 212 pfd . fd = sk ; 213 pfd . ev’ts = POLLIN ; 215 ”r = `pÞl (& pfd , 1, CONNECT_TIMEOUT ); 216 ià( ”r < 0) { 217 ”r = ”ºo ; 218 `”rÜ ("FažedØpÞl: %d (%s)", ”r , `¡»¼Ü (err)); 222 ià( ”r == 0) { 223 `”rÜ ("bluetoothd connectimeout"); 227 Ãw_sk = `acû± ( sk , NULL , NULL); 228 ià( Ãw_sk < 0) { 229 ”r = ”ºo ; 230 `”rÜ ("FažedØacû± sock‘: %d (%s)", ”r , `¡»¼Ü (err)); 234  Ãw_sk ; 235 } } 237 boÞ $h®_c_acû± () 239  ”r ; 241 cmd_sk = `acû±_cÚÃùiÚ ( li¡’_sk ); 242 ià( cmd_sk < 0) 243  çl£ ; 245 nÙif_sk = `acû±_cÚÃùiÚ ( li¡’_sk ); 246 ià( nÙif_sk < 0) { 247 `þo£ ( cmd_sk ); 248 cmd_sk = -1; 249  çl£ ; 252 ”r = `±h»ad_ü—‹ (& nÙif_th , NULL , nÙifiÿtiÚ_hªdËr , NULL); 253 ià( ”r ) { 254 nÙif_th = 0; 255 `”rÜ ("FažedØ¡¬ˆnÙifiÿtiÚh»ad: %d (%s)", ”r , 256 `¡»¼Ü ( ”r )); 257 `þo£ ( cmd_sk ); 258 cmd_sk = -1; 259 `þo£ ( nÙif_sk ); 260 nÙif_sk = -1; 261  çl£ ; 264 `šfo ("IPC connected"); 266  Œue ; 267 } } 269 boÞ $h®_c_š™ (cÚ¡ * ·th , size_t size ) 271  sockaddr_un addr ; 272  sk ; 273  ”r ; 275 sk = `sock‘ ( AF_LOCAL , SOCK_SEQPACKET , 0); 276 ià( sk < 0) { 277 ”r = ”ºo ; 278 `”rÜ ("FažedØü—‹ sock‘: %d (%s)", ”r , 279 `¡»¼Ü ( ”r )); 280  çl£ ; 283 `mem£t (& addr , 0, (addr)); 284 addr . sun_çmžy = AF_UNIX ; 286 `memýy ( addr . sun_·th , ·th , size ); 288 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 289 ”r = ”ºo ; 290 `”rÜ ("FažedØbšd sock‘: %d (%s)", ”r , `¡»¼Ü (err)); 291 `þo£ ( sk ); 292  çl£ ; 295 ià( `li¡’ ( sk , 2) < 0) { 296 ”r = ”ºo ; 297 `”rÜ ("FažedØli¡’ oÀsock‘: %d (%s)", ”r , 298 `¡»¼Ü ( ”r )); 299 `þo£ ( sk ); 300  çl£ ; 303 li¡’_sk = sk ; 305  Œue ; 306 } } 308  $h®_c_þ—nup () 310 `þo£ ( li¡’_sk ); 311 li¡’_sk = -1; 313 `±h»ad_mu‹x_lock (& cmd_sk_mu‹x ); 314 ià( cmd_sk >= 0) { 315 `þo£ ( cmd_sk ); 316 cmd_sk = -1; 318 `±h»ad_mu‹x_uÆock (& cmd_sk_mu‹x ); 320 ià( nÙif_sk < 0) 323 `shutdown ( nÙif_sk , SHUT_RD ); 325 `±h»ad_još ( nÙif_th , NULL ); 326 nÙif_th = 0; 327 } } 329  $h®_c_cmd ( ušt8_t £rviû_id , ušt8_ˆ Ýcode , ušt16_t Ën , * ·¿m , 330 size_t * r¥_Ën , * r¥ , * fd ) 332 ssize_t »t ; 333  msghdr msg ; 334  iovec iv [2]; 335  c_hdr cmd ; 336  cmsgbuf [ `CMSG_SPACE (())]; 337  c_¡©us s ; 338 size_t s_Ën = ( s ); 340 ià( cmd_sk < 0) { 341 `”rÜ ("Invalid cmd socket…assedo hal_ipc_cmd"); 342  çžed ; 345 ià(! r¥ || ! r¥_Ën ) { 346 `mem£t (& s , 0, s_Ën ); 347 r¥_Ën = & s_Ën ; 348 r¥ = & s ; 351 `mem£t (& msg , 0, (msg)); 352 `mem£t (& cmd , 0, (cmd)); 354 cmd . £rviû_id = service_id; 355 cmd . Ýcode = opcode; 356 cmd . Ën =†en; 358 iv [0]. iov_ba£ = & cmd ; 359 iv [0]. iov_Ën = ( cmd ); 361 iv [1]. iov_ba£ = ·¿m ; 362 iv [1]. iov_Ën = Ën ; 364 msg . msg_iov = iv ; 365 msg . msg_iovËn = 2; 367 `±h»ad_mu‹x_lock (& cmd_sk_mu‹x ); 369 »t = `£ndmsg ( cmd_sk , & msg , 0); 370 ià( »t < 0) { 371 `”rÜ ("S’dšg commªd fažed:%s", `¡»¼Ü ( ”ºo )); 372 `±h»ad_mu‹x_uÆock (& cmd_sk_mu‹x ); 373  çžed ; 377 ià( »t == 0) { 378 `”rÜ ("Command socket closed"); 379 `±h»ad_mu‹x_uÆock (& cmd_sk_mu‹x ); 380  çžed ; 383 `mem£t (& msg , 0, (msg)); 384 `mem£t (& cmd , 0, (cmd)); 386 iv [0]. iov_ba£ = & cmd ; 387 iv [0]. iov_Ën = ( cmd ); 389 iv [1]. iov_ba£ = r¥ ; 390 iv [1]. iov_Ën = * r¥_Ën ; 392 msg . msg_iov = iv ; 393 msg . msg_iovËn = 2; 395 ià( fd ) { 396 `mem£t ( cmsgbuf , 0, (cmsgbuf)); 397 msg . msg_cÚŒÞ = cmsgbuf ; 398 msg . msg_cÚŒÞËn = ( cmsgbuf ); 401 »t = `»cvmsg ( cmd_sk , & msg , 0); 403 `±h»ad_mu‹x_uÆock (& cmd_sk_mu‹x ); 405 ià( »t < 0) { 406 `”rÜ ("Reûivšg commªd„e¥Ú£ fažed: %s", `¡»¼Ü ( ”ºo )); 407  çžed ; 411 ià( »t < ( ssize_t è( cmd )) { 412 `”rÜ ("ToØsm®È»¥Ú£„eûived(%zd by‹s)", »t ); 413  çžed ; 416 ià( cmd . £rviû_id != service_id) { 417 `”rÜ ("Invalid service id (0x%x vs 0x%x)", 418 cmd . £rviû_id , service_id); 419  çžed ; 422 ià( »t !ð( ssize_t è(( cmd è+ cmd. Ën )) { 423 `”rÜ ("M®fÜmed„e¥Ú£„eûived(%zd by‹s)", »t ); 424  çžed ; 427 ià( cmd . Ýcode !ðÝcod&& cmd.Ýcod!ð HAL_OP_STATUS ) { 428 `”rÜ ("Invalid opcode„eceived (0x%x vs 0x%x)", 429 cmd . Ýcode , opcode); 430  çžed ; 433 ià( cmd . Ýcode =ð HAL_OP_STATUS ) { 434  c_¡©us * s = r¥ ; 436 ià((* s è!ð cmd . Ën ) { 437 `”rÜ ("Invalid status†ength"); 438  çžed ; 441 ià( s -> code =ð HAL_STATUS_SUCCESS ) { 442 `”rÜ ("Invalid success status„esponse"); 443  çžed ; 446  s -> code ; 450 ià( fd ) { 451  cmsghdr * cmsg ; 453 * fd = -1; 455  cmsg = `CMSG_FIRSTHDR (& msg ); cmsg; 456 cmsg = `CMSG_NXTHDR (& msg , cmsg)) { 457 ià( cmsg -> cmsg_Ëv– =ð SOL_SOCKET 458 && cmsg -> cmsg_ty³ =ð SCM_RIGHTS ) { 459 `memýy ( fd , `CMSG_DATA ( cmsg ), ()); 465 * r¥_Ën = cmd . Ën ; 467  BT_STATUS_SUCCESS ; 469 çžed : 470 `ex™ ( EXIT_FAILURE ); 471 } } @android/hal-ipc.h 18  sh®_c_hªdËr { 19 (* mhªdËr è(* mbuf , ušt16_t mËn ,  mfd ); 20 boÞ mv¬_Ën ; 21 size_t md©a_Ën ; 24 boÞ h®_c_š™ (cÚ¡ * ·th , size_t size ); 25 boÞ h®_c_acû± (); 26  h®_c_þ—nup (); 28  h®_c_cmd ( ušt8_t £rviû_id , ušt8_ˆ Ýcode , ušt16_t Ën , * ·¿m , 29 size_t * r¥_Ën , * r¥ , * fd ); 31  h®_c_»gi¡” ( ušt8_t £rviû , cÚ¡  h®_c_hªdËr * hªdËrs , 32 ušt8_t size ); 33  h®_c_uÄegi¡” ( ušt8_t £rviû ); @android/hal-log.h 18  #LOG_TAG "BlueZ" ) 20 #ifdeà __BIONIC__ 21  ~ 23  ~<¡dio.h > 24  #LOG_INFO " I" ) 25  #LOG_WARN " W" ) 26  #LOG_ERROR " E" ) 27  #LOG_DEBUG " D" ) 28  #ALOG ( ´i , g , fmt , ¬g ...è `årštf ( ¡d”r ,ag…ri": " fmt"\n", ##¬g) ) 31  #šfo ( fmt , ¬g ...è `ALOG ( LOG_INFO , LOG_TAG , fmt, ##¬g) ) 32  #w¬n ( fmt , ¬g ...è `ALOG ( LOG_WARN , LOG_TAG , fmt, ##¬g) ) 33  #”rÜ ( fmt , ¬g ...è `ALOG ( LOG_ERROR , LOG_TAG , fmt, ##¬g) ) 34  #DBG ( fmt , ¬g ...è `ALOG ( LOG_DEBUG , LOG_TAG , "%s:%s(è"fmt, __FILE__ , \ 35 __func__ , ## ¬g ) ) @android/hal-map-client.c 18  ~<¡dlib.h > 19  ~<¡dboÞ.h > 20  ~<¡ršg.h > 22  ~"h®-log.h " 23  ~"h®.h " 24  ~"h®-msg.h " 25  ~"h®-c.h " 27 cÚ¡ btmû_ÿÎbacks_t * gcbs = NULL ; 29  boÞ $š‹rçû_»ady () 31  cbs !ð NULL ; 32 } } 36  $»mÙe_mas_š¡ªûs_to_h® ( btmû_mas_š¡ªû_t * £nd_š¡ªû , 37  h®_m­_þ›Á_mas_š¡ªû * š¡ªû , 38  num_š¡ªûs , ušt16_t Ën ) 40 * buf = š¡ªû ; 41 * Çme ; 42  i ; 44 `DBG (""); 46  i = 0; i < num_š¡ªûs ; i++) { 47 Çme = (*è š¡ªû ->name; 48 ià((* š¡ªû è+ in¡ªû-> Çme_Ën > Ën || 49 ( š¡ªû -> Çme_Ën != 0 && 50 Çme [ š¡ªû -> Çme_Ën - 1] != '\0')) { 51 `”rÜ ("šv®id„emÙma š¡ªû %d,‡bÜtšg", i ); 52 `ex™ ( EXIT_FAILURE ); 55 £nd_š¡ªû [ i ]. id = š¡ªû ->id; 56 £nd_š¡ªû [ i ]. msg_ty³s = š¡ªû ->msg_types; 57 £nd_š¡ªû [ i ]. sú = š¡ªû ->scn; 58 £nd_š¡ªû [ i ]. p_Çme = Çme ; 60 Ën -ð(* š¡ªû è+ in¡ªû-> Çme_Ën ; 61 buf +ð(* š¡ªû è+ in¡ªû-> Çme_Ën ; 62 š¡ªû = buf ; 65 ià(! Ën ) 68 `”rÜ ("šv®id„emÙma š¡ªû (%u by‹ Ëá),‡bÜtšg", Ën ); 69 `ex™ ( EXIT_FAILURE ); 70 } } 72  $hªdË_»mÙe_mas_š¡ªûs (* buf , ušt16_t Ën ,  fd ) 74  h®_ev_m­_þ›Á_»mÙe_mas_š¡ªûs * ev = buf ; 75 btmû_mas_š¡ªû_t š¡ªûs [ ev -> num_š¡ªûs ]; 77 `DBG (""); 79 Ën -ð(* ev ); 80 `»mÙe_mas_š¡ªûs_to_h® ( š¡ªûs , ev ->š¡ªûs,ƒv-> num_š¡ªûs , 81 Ën ); 83 ià( cbs -> »mÙe_mas_š¡ªûs_cb ) 84 cbs -> `»mÙe_mas_š¡ªûs_cb ( ev -> ¡©us , 85 ( bt_bdaddr_t *è ev -> bdaddr , 86 ev -> num_š¡ªûs , š¡ªûs ); 87 } } 93 cÚ¡  h®_c_hªdËr gev_hªdËrs [] = { 95 { hªdË_»mÙe_mas_š¡ªûs , Œue , 96 ( h®_ev_m­_þ›Á_»mÙe_mas_š¡ªûs ) } 101  bt_¡©us_t $g‘_»mÙe_mas_š¡ªûs ( bt_bdaddr_t * bd_addr ) 103  h®_cmd_m­_þ›Á_g‘_š¡ªûs cmd ; 105 ià(! `š‹rçû_»ady ()) 106  BT_STATUS_NOT_READY ; 108 `memýy ( cmd . bdaddr , bd_addr , (*bd_addr)); 110  `h®_c_cmd ( HAL_SERVICE_ID_MAP_CLIENT , 111 HAL_OP_MAP_CLIENT_GET_INSTANCES , ( cmd ), 112 & cmd , NULL , NULL, NULL); 113 } } 115  bt_¡©us_t $š™ ( btmû_ÿÎbacks_t * ÿÎbacks ) 117  h®_cmd_»gi¡”_moduË cmd ; 118  »t ; 120 `DBG (""); 131 cbs = ÿÎbacks ; 133 `h®_c_»gi¡” ( HAL_SERVICE_ID_MAP_CLIENT , ev_hªdËrs , 134 ( ev_hªdËrs )/(ev_handlers[0])); 136 cmd . £rviû_id = HAL_SERVICE_ID_MAP_CLIENT ; 137 cmd . mode = HAL_MODE_DEFAULT ; 138 cmd . max_þ›Ás = 1; 140 »t = `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_REGISTER_MODULE , 141 ( cmd ), &cmd, 0, NULL , NULL); 143 ià( »t !ð BT_STATUS_SUCCESS ) { 144 cbs = NULL ; 145 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_MAP_CLIENT ); 148  »t ; 149 } } 151  btmû_š‹rçû_t giçû = { 152 . size = ( içû ), 153 . gš™ = š™ , 154 . gg‘_»mÙe_mas_š¡ªûs = g‘_»mÙe_mas_š¡ªûs 157 btmû_š‹rçû_t * $bt_g‘_m­_þ›Á_š‹rçû () 159  & içû ; 160 } } @android/hal-msg.h 24 cÚ¡  gBLUEZ_HAL_SK_PATH [] = "\0bluez_hal_socket"; 26  #HAL_MINIMUM_EVENT 0x81 ) 28  #HAL_SERVICE_ID_CORE 0 ) 29  #HAL_SERVICE_ID_BLUETOOTH 1 ) 30  #HAL_SERVICE_ID_SOCKET 2 ) 31  #HAL_SERVICE_ID_HIDHOST 3 ) 32  #HAL_SERVICE_ID_PAN 4 ) 33  #HAL_SERVICE_ID_HANDSFREE 5 ) 34  #HAL_SERVICE_ID_A2DP 6 ) 35  #HAL_SERVICE_ID_HEALTH 7 ) 36  #HAL_SERVICE_ID_AVRCP 8 ) 37  #HAL_SERVICE_ID_GATT 9 ) 38  #HAL_SERVICE_ID_HANDSFREE_CLIENT 10 ) 39  #HAL_SERVICE_ID_MAP_CLIENT 11 ) 40  #HAL_SERVICE_ID_AVRCP_CTRL 12 ) 41  #HAL_SERVICE_ID_A2DP_SINK 13 ) 43  #HAL_SERVICE_ID_MAX HAL_SERVICE_ID_A2DP_SINK ) 47  #HAL_STATUS_SUCCESS IPC_STATUS_SUCCESS ) 48  #HAL_STATUS_FAILED 0x01 ) 49  #HAL_STATUS_NOT_READY 0x02 ) 50  #HAL_STATUS_NOMEM 0x03 ) 51  #HAL_STATUS_BUSY 0x04 ) 52  #HAL_STATUS_DONE 0x05 ) 53  #HAL_STATUS_UNSUPPORTED 0x06 ) 54  #HAL_STATUS_INVALID 0x07 ) 55  #HAL_STATUS_UNHANDLED 0x08 ) 56  #HAL_STATUS_AUTH_FAILURE 0x09 ) 57  #HAL_STATUS_REMOTE_DEVICE_DOWN 0x0a ) 59  #HAL_OP_STATUS IPC_OP_STATUS ) 61  #HAL_MODE_DEFAULT 0x00 ) 62  #HAL_MODE_BREDR 0x01 ) 63  #HAL_MODE_LE 0x02 ) 65  #HAL_OP_REGISTER_MODULE 0x01 ) 66  sh®_cmd_»gi¡”_moduË { 67 ušt8_t m£rviû_id ; 68 ušt8_t mmode ; 69 št32_t mmax_þ›Ás ; 70 } __©Œibu‹__ (( ·cked )); 72  #HAL_OP_UNREGISTER_MODULE 0x02 ) 73  sh®_cmd_uÄegi¡”_moduË { 74 ušt8_t m£rviû_id ; 75 } __©Œibu‹__ (( ·cked )); 77  #HAL_CONFIG_VENDOR 0x00 ) 78  #HAL_CONFIG_MODEL 0x01 ) 79  #HAL_CONFIG_NAME 0x02 ) 80  #HAL_CONFIG_SERIAL_NUMBER 0x03 ) 81  #HAL_CONFIG_SYSTEM_ID 0x04 ) 82  #HAL_CONFIG_PNP_ID 0x05 ) 83  #HAL_CONFIG_FW_REV 0x06 ) 84  #HAL_CONFIG_HW_REV 0x07 ) 86  sh®_cÚfig_´Ý { 87 ušt8_t mty³ ; 88 ušt16_t mËn ; 89 ušt8_t mv® [0]; 90 } __©Œibu‹__ (( ·cked )); 92  #HAL_OP_CONFIGURATION 0x03 ) 93  sh®_cmd_cÚfigu¿tiÚ { 94 ušt8_t mnum ; 95  h®_cÚfig_´Ý m´Ýs [0]; 96 } __©Œibu‹__ (( ·cked )); 100  #HAL_OP_ENABLE 0x01 ) 102  #HAL_OP_DISABLE 0x02 ) 104  #HAL_OP_GET_ADAPTER_PROPS 0x03 ) 106  #HAL_OP_GET_ADAPTER_PROP 0x04 ) 107  sh®_cmd_g‘_ad­‹r_´Ý { 108 ušt8_t mty³ ; 109 } __©Œibu‹__ (( ·cked )); 111  #HAL_MAX_NAME_LENGTH 249 ) 113  #HAL_PROP_ADAPTER_NAME 0x01 ) 114  #HAL_PROP_ADAPTER_ADDR 0x02 ) 115  #HAL_PROP_ADAPTER_UUIDS 0x03 ) 116  #HAL_PROP_ADAPTER_CLASS 0x04 ) 117  #HAL_PROP_ADAPTER_TYPE 0x05 ) 118  #HAL_PROP_ADAPTER_SERVICE_REC 0x06 ) 119  #HAL_PROP_ADAPTER_SCAN_MODE 0x07 ) 120  #HAL_PROP_ADAPTER_BONDED_DEVICES 0x08 ) 121  #HAL_PROP_ADAPTER_DISC_TIMEOUT 0x09 ) 123  #HAL_PROP_DEVICE_NAME 0x01 ) 124  #HAL_PROP_DEVICE_ADDR 0x02 ) 125  #HAL_PROP_DEVICE_UUIDS 0x03 ) 126  #HAL_PROP_DEVICE_CLASS 0x04 ) 127  #HAL_PROP_DEVICE_TYPE 0x05 ) 128  #HAL_PROP_DEVICE_SERVICE_REC 0x06 ) 129  sh®_´Ý_deviû_£rviû_»c { 130 ušt8_t muuid [16]; 131 ušt16_t mchªÃl ; 132 ušt8_t mÇme_Ën ; 133 ušt8_t mÇme []; 134 } __©Œibu‹__ (( ·cked )); 136  #HAL_PROP_DEVICE_FRIENDLY_NAME 0x0a ) 137  #HAL_PROP_DEVICE_RSSI 0x0b ) 138  #HAL_PROP_DEVICE_VERSION_INFO 0x0c ) 139  sh®_´Ý_deviû_šfo { 140 ušt8_t mv”siÚ ; 141 ušt16_t msub_v”siÚ ; 142 ušt16_t mmªuçùu»r ; 143 } __©Œibu‹__ (( ·cked )); 145  #HAL_PROP_ADAPTER_LOCAL_LE_FEAT 0x0d ) 146  #HAL_PROP_DEVICE_TIMESTAMP 0xFF ) 148  #HAL_ADAPTER_SCAN_MODE_NONE 0x00 ) 149  #HAL_ADAPTER_SCAN_MODE_CONN 0x01 ) 150  #HAL_ADAPTER_SCAN_MODE_CONN_DISC 0x02 ) 152  #HAL_TYPE_BREDR 0x01 ) 153  #HAL_TYPE_LE 0x02 ) 154  #HAL_TYPE_DUAL 0x03 ) 156  #HAL_OP_SET_ADAPTER_PROP 0x05 ) 157  sh®_cmd_£t_ad­‹r_´Ý { 158 ušt8_t mty³ ; 159 ušt16_t mËn ; 160 ušt8_t mv® [0]; 161 } __©Œibu‹__ (( ·cked )); 163  #HAL_OP_GET_REMOTE_DEVICE_PROPS 0x06 ) 164  sh®_cmd_g‘_»mÙe_deviû_´Ýs { 165 ušt8_t mbdaddr [6]; 166 } __©Œibu‹__ (( ·cked )); 168  #HAL_OP_GET_REMOTE_DEVICE_PROP 0x07 ) 169  sh®_cmd_g‘_»mÙe_deviû_´Ý { 170 ušt8_t mbdaddr [6]; 171 ušt8_t mty³ ; 172 } __©Œibu‹__ (( ·cked )); 174  #HAL_OP_SET_REMOTE_DEVICE_PROP 0x08 ) 175  sh®_cmd_£t_»mÙe_deviû_´Ý { 176 ušt8_t mbdaddr [6]; 177 ušt8_t mty³ ; 178 ušt16_t mËn ; 179 ušt8_t mv® [0]; 180 } __©Œibu‹__ (( ·cked )); 182  #HAL_OP_GET_REMOTE_SERVICE_REC 0x09 ) 183  sh®_cmd_g‘_»mÙe_£rviû_»c { 184 ušt8_t mbdaddr [6]; 185 ušt8_t muuid [16]; 186 } __©Œibu‹__ (( ·cked )); 188  #HAL_OP_GET_REMOTE_SERVICES 0x0a ) 189  sh®_cmd_g‘_»mÙe_£rviûs { 190 ušt8_t mbdaddr [6]; 191 } __©Œibu‹__ (( ·cked )); 193  #HAL_OP_START_DISCOVERY 0x0b ) 195  #HAL_OP_CANCEL_DISCOVERY 0x0c ) 197  #BT_TRANSPORT_UNKNOWN 0x00 ) 198  #BT_TRANSPORT_BR_EDR 0x01 ) 199  #BT_TRANSPORT_LE 0x02 ) 201  #HAL_OP_CREATE_BOND 0x0d ) 202  sh®_cmd_ü—‹_bÚd { 203 ušt8_t mbdaddr [6]; 204 ušt8_t mŒª¥Üt ; 205 } __©Œibu‹__ (( ·cked )); 207  #HAL_OP_REMOVE_BOND 0x0e ) 208  sh®_cmd_»move_bÚd { 209 ušt8_t mbdaddr [6]; 210 } __©Œibu‹__ (( ·cked )); 212  #HAL_OP_CANCEL_BOND 0x0f ) 213  sh®_cmd_ÿnûl_bÚd { 214 ušt8_t mbdaddr [6]; 215 } __©Œibu‹__ (( ·cked )); 217  #HAL_OP_PIN_REPLY 0x10 ) 218  sh®_cmd_pš_»¶y { 219 ušt8_t mbdaddr [6]; 220 ušt8_t macû± ; 221 ušt8_t mpš_Ën ; 222 ušt8_t mpš_code [16]; 223 } __©Œibu‹__ (( ·cked )); 225  #HAL_SSP_VARIANT_CONFIRM 0x00 ) 226  #HAL_SSP_VARIANT_ENTRY 0x01 ) 227  #HAL_SSP_VARIANT_CONSENT 0x02 ) 228  #HAL_SSP_VARIANT_NOTIF 0x03 ) 230  #HAL_OP_SSP_REPLY 0x11 ) 231  sh®_cmd_s¥_»¶y { 232 ušt8_t mbdaddr [6]; 233 ušt8_t ms¥_v¬ŸÁ ; 234 ušt8_t macû± ; 235 ušt32_t m·sskey ; 236 } __©Œibu‹__ (( ·cked )); 238  #HAL_OP_DUT_MODE_CONF 0x12 ) 239  sh®_cmd_dut_mode_cÚf { 240 ušt8_t m’abË ; 241 } __©Œibu‹__ (( ·cked )); 243  #HAL_OP_DUT_MODE_SEND 0x13 ) 244  sh®_cmd_dut_mode_£nd { 245 ušt16_t mÝcode ; 246 ušt8_t mËn ; 247 ušt8_t md©a [0]; 248 } __©Œibu‹__ (( ·cked )); 250  #HAL_OP_LE_TEST_MODE 0x14 ) 251  sh®_cmd_Ë_‹¡_mode { 252 ušt16_t mÝcode ; 253 ušt8_t mËn ; 254 ušt8_t md©a [0]; 255 } __©Œibu‹__ (( ·cked )); 257  #HAL_OP_GET_CONNECTION_STATE 0x15 ) 258  sh®_cmd_g‘_cÚÃùiÚ_¡©e { 259 ušt8_t mbdaddr [6]; 260 } __©Œibu‹__ (( ·cked )); 262  sh®_r¥_g‘_cÚÃùiÚ_¡©e { 263 št32_t mcÚÃùiÚ_¡©e ; 264 } __©Œibu‹__ (( ·cked )); 266  #HAL_OP_READ_ENERGY_INFO 0x16 ) 270  #HAL_MODE_SOCKET_DEFAULT HAL_MODE_DEFAULT ) 271  #HAL_MODE_SOCKET_DYNAMIC_MAP 0x01 ) 273  #HAL_SOCK_RFCOMM 0x01 ) 274  #HAL_SOCK_SCO 0x02 ) 275  #HAL_SOCK_L2CAP 0x03 ) 277  #HAL_SOCK_FLAG_ENCRYPT 0x01 ) 278  #HAL_SOCK_FLAG_AUTH 0x02 ) 280  #HAL_OP_SOCKET_LISTEN 0x01 ) 281  sh®_cmd_sock‘_li¡’ { 282 ušt8_t mty³ ; 283 ušt8_t mÇme [256]; 284 ušt8_t muuid [16]; 285 št32_t mchªÃl ; 286 ušt8_t mæags ; 287 } __©Œibu‹__ (( ·cked )); 289  #HAL_OP_SOCKET_CONNECT 0x02 ) 290  sh®_cmd_sock‘_cÚÃù { 291 ušt8_t mbdaddr [6]; 292 ušt8_t mty³ ; 293 ušt8_t muuid [16]; 294 št32_t mchªÃl ; 295 ušt8_t mæags ; 296 } __©Œibu‹__ (( ·cked )); 300  #HAL_OP_HIDHOST_CONNECT 0x01 ) 301  sh®_cmd_hidho¡_cÚÃù { 302 ušt8_t mbdaddr [6]; 303 } __©Œibu‹__ (( ·cked )); 305  #HAL_OP_HIDHOST_DISCONNECT 0x02 ) 306  sh®_cmd_hidho¡_discÚÃù { 307 ušt8_t mbdaddr [6]; 308 } __©Œibu‹__ (( ·cked )); 310  #HAL_OP_HIDHOST_VIRTUAL_UNPLUG 0x03 ) 311  sh®_cmd_hidho¡_vœtu®_uÅlug { 312 ušt8_t mbdaddr [6]; 313 } __©Œibu‹__ (( ·cked )); 315  #HAL_OP_HIDHOST_SET_INFO 0x04 ) 316  sh®_cmd_hidho¡_£t_šfo { 317 ušt8_t mbdaddr [6]; 318 ušt8_t m©Œ ; 319 ušt8_t msubþass ; 320 ušt8_t m­p_id ; 321 ušt16_t mv’dÜ ; 322 ušt16_t m´oduù ; 323 ušt16_t mcouÁry ; 324 ušt16_t mdesü_Ën ; 325 ušt8_t mdesü [0]; 326 } __©Œibu‹__ (( ·cked )); 328  #HAL_HIDHOST_REPORT_PROTOCOL 0x00 ) 329  #HAL_HIDHOST_BOOT_PROTOCOL 0x01 ) 330  #HAL_HIDHOST_UNSUPPORTED_PROTOCOL 0xff ) 332  #HAL_OP_HIDHOST_GET_PROTOCOL 0x05 ) 333  sh®_cmd_hidho¡_g‘_´ÙocÞ { 334 ušt8_t mbdaddr [6]; 335 ušt8_t mmode ; 336 } __©Œibu‹__ (( ·cked )); 338  #HAL_OP_HIDHOST_SET_PROTOCOL 0x06 ) 339  sh®_cmd_hidho¡_£t_´ÙocÞ { 340 ušt8_t mbdaddr [6]; 341 ušt8_t mmode ; 342 } __©Œibu‹__ (( ·cked )); 344  #HAL_HIDHOST_INPUT_REPORT 0x01 ) 345  #HAL_HIDHOST_OUTPUT_REPORT 0x02 ) 346  #HAL_HIDHOST_FEATURE_REPORT 0x03 ) 348  #HAL_OP_HIDHOST_GET_REPORT 0x07 ) 349  sh®_cmd_hidho¡_g‘_»pÜt { 350 ušt8_t mbdaddr [6]; 351 ušt8_t mty³ ; 352 ušt8_t mid ; 353 ušt16_t mbuf_size ; 354 } __©Œibu‹__ (( ·cked )); 356  #HAL_OP_HIDHOST_SET_REPORT 0x08 ) 357  sh®_cmd_hidho¡_£t_»pÜt { 358 ušt8_t mbdaddr [6]; 359 ušt8_t mty³ ; 360 ušt16_t mËn ; 361 ušt8_t md©a [0]; 362 } __©Œibu‹__ (( ·cked )); 364  #HAL_OP_HIDHOST_SEND_DATA 0x09 ) 365  sh®_cmd_hidho¡_£nd_d©a { 366 ušt8_t mbdaddr [6]; 367 ušt16_t mËn ; 368 ušt8_t md©a [0]; 369 } __©Œibu‹__ (( ·cked )); 373  #HAL_OP_A2DP_CONNECT 0x01 ) 374  sh®_cmd_a2dp_cÚÃù { 375 ušt8_t mbdaddr [6]; 376 } __©Œibu‹__ (( ·cked )); 378  #HAL_OP_A2DP_DISCONNECT 0x02 ) 379  sh®_cmd_a2dp_discÚÃù { 380 ušt8_t mbdaddr [6]; 381 } __©Œibu‹__ (( ·cked )); 386  #HAL_PAN_ROLE_NONE 0x00 ) 387  #HAL_PAN_ROLE_NAP 0x01 ) 388  #HAL_PAN_ROLE_PANU 0x02 ) 391  #HAL_PAN_CTRL_ENABLED 0x00 ) 392  #HAL_PAN_CTRL_DISABLED 0x01 ) 395  #HAL_PAN_STATE_CONNECTED 0x00 ) 396  #HAL_PAN_STATE_CONNECTING 0x01 ) 397  #HAL_PAN_STATE_DISCONNECTED 0x02 ) 398  #HAL_PAN_STATE_DISCONNECTING 0x03 ) 401  #HAL_PAN_STATUS_FAIL 0x01 ) 402  #HAL_PAN_STATUS_NOT_READY 0x02 ) 403  #HAL_PAN_STATUS_NO_MEMORY 0x03 ) 404  #HAL_PAN_STATUS_BUSY 0x04 ) 405  #HAL_PAN_STATUS_DONE 0x05 ) 406  #HAL_PAN_STATUS_UNSUPORTED 0x06 ) 407  #HAL_PAN_STATUS_INVAL 0x07 ) 408  #HAL_PAN_STATUS_UNHANDLED 0x08 ) 409  #HAL_PAN_STATUS_AUTH_FAILED 0x09 ) 410  #HAL_PAN_STATUS_DEVICE_DOWN 0x0A ) 412  #HAL_OP_PAN_ENABLE 0x01 ) 413  sh®_cmd_·n_’abË { 414 ušt8_t mloÿl_rÞe ; 415 } __©Œibu‹__ (( ·cked )); 417  #HAL_OP_PAN_GET_ROLE 0x02 ) 418  sh®_r¥_·n_g‘_rÞe { 419 ušt8_t mloÿl_rÞe ; 420 } __©Œibu‹__ (( ·cked )); 422  #HAL_OP_PAN_CONNECT 0x03 ) 423  sh®_cmd_·n_cÚÃù { 424 ušt8_t mbdaddr [6]; 425 ušt8_t mloÿl_rÞe ; 426 ušt8_t m»mÙe_rÞe ; 427 } __©Œibu‹__ (( ·cked )); 429  #HAL_OP_PAN_DISCONNECT 0x04 ) 430  sh®_cmd_·n_discÚÃù { 431 ušt8_t mbdaddr [6]; 432 } __©Œibu‹__ (( ·cked )); 434  #HAL_HEALTH_MDEP_ROLE_SOURCE 0x00 ) 435  #HAL_HEALTH_MDEP_ROLE_SINK 0x01 ) 437  #HAL_HEALTH_CHANNEL_TYPE_RELIABLE 0x00 ) 438  #HAL_HEALTH_CHANNEL_TYPE_STREAMING 0x01 ) 439  #HAL_HEALTH_CHANNEL_TYPE_ANY 0x02 ) 441  #HAL_OP_HEALTH_REG_APP 0x01 ) 442  sh®_cmd_h—Éh_»g_­p { 443 ušt8_t mnum_of_md• ; 444 ušt16_t m­p_Çme_off ; 445 ušt16_t m´ovid”_Çme_off ; 446 ušt16_t m£rviû_Çme_off ; 447 ušt16_t m£rviû_desü_off ; 448 ušt16_t mËn ; 449 ušt8_t md©a [0]; 450 } __©Œibu‹__ (( ·cked )); 452  sh®_r¥_h—Éh_»g_­p { 453 ušt16_t m­p_id ; 454 } __©Œibu‹__ (( ·cked )); 456  #HAL_OP_HEALTH_MDEP 0x02 ) 457  sh®_cmd_h—Éh_md• { 458 ušt16_t m­p_id ; 459 ušt8_t mrÞe ; 460 ušt16_t md©a_ty³ ; 461 ušt8_t mchªÃl_ty³ ; 462 ušt16_t mdesü_Ën ; 463 ušt8_t mdesü [0]; 464 } __©Œibu‹__ (( ·cked )); 466  #HAL_OP_HEALTH_UNREG_APP 0x03 ) 467  sh®_cmd_h—Éh_uÄeg_­p { 468 ušt16_t m­p_id ; 469 } __©Œibu‹__ (( ·cked )); 471  #HAL_OP_HEALTH_CONNECT_CHANNEL 0x04 ) 472  sh®_cmd_h—Éh_cÚÃù_chªÃl { 473 ušt16_t m­p_id ; 474 ušt8_t mbdaddr [6]; 475 ušt8_t mmd•_šdex ; 476 } __©Œibu‹__ (( ·cked )); 478  sh®_r¥_h—Éh_cÚÃù_chªÃl { 479 ušt16_t mchªÃl_id ; 480 } __©Œibu‹__ (( ·cked )); 482  #HAL_OP_HEALTH_DESTROY_CHANNEL 0x05 ) 483  sh®_cmd_h—Éh_de¡roy_chªÃl { 484 ušt16_t mchªÃl_id ; 485 } __©Œibu‹__ (( ·cked )); 489  #HAL_MODE_HANDSFREE_HSP_ONLY HAL_MODE_DEFAULT ) 490  #HAL_MODE_HANDSFREE_HFP 0x01 ) 491  #HAL_MODE_HANDSFREE_HFP_WBS 0x02 ) 493  #HAL_OP_HANDSFREE_CONNECT 0x01 ) 494  sh®_cmd_hªdsä“_cÚÃù { 495 ušt8_t mbdaddr [6]; 496 } __©Œibu‹__ (( ·cked )); 498  #HAL_OP_HANDSFREE_DISCONNECT 0x02 ) 499  sh®_cmd_hªdsä“_discÚÃù { 500 ušt8_t mbdaddr [6]; 501 } __©Œibu‹__ (( ·cked )); 503  #HAL_OP_HANDSFREE_CONNECT_AUDIO 0x03 ) 504  sh®_cmd_hªdsä“_cÚÃù_audio { 505 ušt8_t mbdaddr [6]; 506 } __©Œibu‹__ (( ·cked )); 508  #HAL_OP_HANDSFREE_DISCONNECT_AUDIO 0x04 ) 509  sh®_cmd_hªdsä“_discÚÃù_audio { 510 ušt8_t mbdaddr [6]; 511 } __©Œibu‹__ (( ·cked )); 513  #HAL_OP_HANDSFREE_START_VR 0x05 ) 514  sh®_cmd_hªdsä“_¡¬t_vr { 515 ušt8_t mbdaddr [6]; 516 } __©Œibu‹__ (( ·cked )); 518  #HAL_OP_HANDSFREE_STOP_VR 0x06 ) 519  sh®_cmd_hªdsä“_¡Ý_vr { 520 ušt8_t mbdaddr [6]; 521 } __©Œibu‹__ (( ·cked )); 523  #HAL_HANDSFREE_VOLUME_TYPE_SPEAKER 0x00 ) 524  #HAL_HANDSFREE_VOLUME_TYPE_MIC 0x01 ) 526  #HAL_OP_HANDSFREE_VOLUME_CONTROL 0x07 ) 527  sh®_cmd_hªdsä“_vÞume_cÚŒÞ { 528 ušt8_t mty³ ; 529 ušt8_t mvÞume ; 530 ušt8_t mbdaddr [6]; 531 } __©Œibu‹__ (( ·cked )); 533  #HAL_HANDSFREE_NETWORK_STATE_NOT_AVAILABLE 0x00 ) 534  #HAL_HANDSFREE_NETWORK_STATE_AVAILABLE 0x01 ) 536  #HAL_HANDSFREE_SERVICE_TYPE_HOME 0x00 ) 537  #HAL_HANDSFREE_SERVICE_TYPE_ROAMING 0x01 ) 539  #HAL_OP_HANDSFREE_DEVICE_STATUS_NOTIF 0x08 ) 540  sh®_cmd_hªdsä“_deviû_¡©us_nÙif { 541 ušt8_t m¡©e ; 542 ušt8_t mty³ ; 543 ušt8_t msigÇl ; 544 ušt8_t mb©‹ry ; 545 } __©Œibu‹__ (( ·cked )); 547  #HAL_OP_HANDSFREE_COPS_RESPONSE 0x09 ) 548  sh®_cmd_hªdsä“_cÝs_»¥Ú£ { 549 ušt16_t mËn ; 550 ušt8_t mbdaddr [6]; 551 ušt8_t mbuf [0]; 552 } __©Œibu‹__ (( ·cked )); 554  #HAL_HANDSFREE_CALL_STATE_ACTIVE 0x00 ) 555  #HAL_HANDSFREE_CALL_STATE_HELD 0x01 ) 556  #HAL_HANDSFREE_CALL_STATE_DIALING 0x02 ) 557  #HAL_HANDSFREE_CALL_STATE_ALERTING 0x03 ) 558  #HAL_HANDSFREE_CALL_STATE_INCOMING 0x04 ) 559  #HAL_HANDSFREE_CALL_STATE_WAITING 0x05 ) 560  #HAL_HANDSFREE_CALL_STATE_IDLE 0x06 ) 562  #HAL_OP_HANDSFREE_CIND_RESPONSE 0x0A ) 563  sh®_cmd_hªdsä“_cšd_»¥Ú£ { 564 ušt8_t msvc ; 565 ušt8_t mnum_aùive ; 566 ušt8_t mnum_h–d ; 567 ušt8_t m¡©e ; 568 ušt8_t msigÇl ; 569 ušt8_t mrßm ; 570 ušt8_t mb©t_chg ; 571 ušt8_t mbdaddr [6]; 572 } __©Œibu‹__ (( ·cked )); 574  #HAL_OP_HANDSFREE_FORMATTED_AT_RESPONSE 0x0B ) 575  sh®_cmd_hªdsä“_fÜm©‹d_©_»¥Ú£ { 576 ušt16_t mËn ; 577 ušt8_t mbdaddr [6]; 578 ušt8_t mbuf [0]; 579 } __©Œibu‹__ (( ·cked )); 581  #HAL_HANDSFREE_AT_RESPONSE_ERROR 0x00 ) 582  #HAL_HANDSFREE_AT_RESPONSE_OK 0x01 ) 584  #HAL_OP_HANDSFREE_AT_RESPONSE 0x0C ) 585  sh®_cmd_hªdsä“_©_»¥Ú£ { 586 ušt8_t m»¥Ú£ ; 587 ušt8_t m”rÜ ; 588 ušt8_t mbdaddr [6]; 589 } __©Œibu‹__ (( ·cked )); 591  #HAL_HANDSFREE_CALL_DIRECTION_OUTGOING 0x00 ) 592  #HAL_HANDSFREE_CALL_DIRECTION_INCOMING 0x01 ) 594  #HAL_HANDSFREE_CALL_TYPE_VOICE 0x00 ) 595  #HAL_HANDSFREE_CALL_TYPE_DATA 0x01 ) 596  #HAL_HANDSFREE_CALL_TYPE_FAX 0x02 ) 598  #HAL_HANDSFREE_CALL_MPTY_TYPE_SINGLE 0x00 ) 599  #HAL_HANDSFREE_CALL_MPTY_TYPE_MULTI 0x01 ) 601  #HAL_HANDSFREE_CALL_ADDRTYPE_UNKNOWN 0x81 ) 602  #HAL_HANDSFREE_CALL_ADDRTYPE_INTERNATIONAL 0x91 ) 604  #HAL_OP_HANDSFREE_CLCC_RESPONSE 0x0D ) 605  sh®_cmd_hªdsä“_þcc_»¥Ú£ { 606 ušt8_t mšdex ; 607 ušt8_t mdœ ; 608 ušt8_t m¡©e ; 609 ušt8_t mmode ; 610 ušt8_t mm±y ; 611 ušt8_t mty³ ; 612 ušt8_t mbdaddr [6]; 613 ušt16_t mnumb”_Ën ; 614 ušt8_t mnumb” [0]; 615 } __©Œibu‹__ (( ·cked )); 617  #HAL_OP_HANDSFREE_PHONE_STATE_CHANGE 0x0E ) 618  sh®_cmd_hªdsä“_phÚe_¡©e_chªge { 619 ušt8_t mnum_aùive ; 620 ušt8_t mnum_h–d ; 621 ušt8_t m¡©e ; 622 ušt8_t mty³ ; 623 ušt16_t mnumb”_Ën ; 624 ušt8_t mnumb” [0]; 625 } __©Œibu‹__ (( ·cked )); 627  #HAL_HANDSFREE_WBS_NONE 0x00 ) 628  #HAL_HANDSFREE_WBS_NO 0x01 ) 629  #HAL_HANDSFREE_WBS_YES 0x02 ) 631  #HAL_OP_HANDSFREE_CONFIGURE_WBS 0x0F ) 632  sh®_cmd_hªdsä“_cÚfigu»_wbs { 633 ušt8_t mbdaddr [6]; 634 ušt8_t mcÚfig ; 635 } __©Œibu‹__ (( ·cked )); 639  #HAL_AVRCP_PLAY_STATUS_STOPPED 0x00 ) 640  #HAL_AVRCP_PLAY_STATUS_PLAYING 0x01 ) 641  #HAL_AVRCP_PLAY_STATUS_PAUSED 0x02 ) 642  #HAL_AVRCP_PLAY_STATUS_FWD_SEEK 0x03 ) 643  #HAL_AVRCP_PLAY_STATUS_REV_SEEK 0x04 ) 644  #HAL_AVRCP_PLAY_STATUS_ERROR 0xff ) 646  #HAL_OP_AVRCP_GET_PLAY_STATUS 0x01 ) 647  sh®_cmd_avrý_g‘_¶ay_¡©us { 648 ušt8_t m¡©us ; 649 ušt32_t mdu¿tiÚ ; 650 ušt32_t mpos™iÚ ; 651 } __©Œibu‹__ (( ·cked )); 653  #HAL_AVRCP_PLAYER_ATTR_EQUALIZER 0x01 ) 654  #HAL_AVRCP_PLAYER_ATTR_REPEAT 0x02 ) 655  #HAL_AVRCP_PLAYER_ATTR_SHUFFLE 0x03 ) 656  #HAL_AVRCP_PLAYER_ATTR_SCAN 0x04 ) 658  #HAL_OP_AVRCP_LIST_PLAYER_ATTRS 0x02 ) 659  sh®_cmd_avrý_li¡_¶ay”_©Œs { 660 ušt8_t mnumb” ; 661 ušt8_t m©Œs [0]; 662 } __©Œibu‹__ (( ·cked )); 664  #HAL_OP_AVRCP_LIST_PLAYER_VALUES 0x03 ) 665  sh®_cmd_avrý_li¡_¶ay”_v®ues { 666 ušt8_t mnumb” ; 667 ušt8_t mv®ues [0]; 668 } __©Œibu‹__ (( ·cked )); 670  sh®_avrý_¶ay”_©Œ_v®ue { 671 ušt8_t m©Œ ; 672 ušt8_t mv®ue ; 673 } __©Œibu‹__ (( ·cked )); 675  #HAL_OP_AVRCP_GET_PLAYER_ATTRS 0x04 ) 676  sh®_cmd_avrý_g‘_¶ay”_©Œs { 677 ušt8_t mnumb” ; 678  h®_avrý_¶ay”_©Œ_v®ue m©Œs [0]; 679 } __©Œibu‹__ (( ·cked )); 681  sh®_avrý_¶ay”_£‰šg_‹xt { 682 ušt8_t mid ; 683 ušt8_t mËn ; 684 ušt8_t m‹xt [0]; 685 } __©Œibu‹__ (( ·cked )); 687  #HAL_OP_AVRCP_GET_PLAYER_ATTRS_TEXT 0x05 ) 688  sh®_cmd_avrý_g‘_¶ay”_©Œs_‹xt { 689 ušt8_t mnumb” ; 690  h®_avrý_¶ay”_£‰šg_‹xt m©Œs [0]; 691 } __©Œibu‹__ (( ·cked )); 693  #HAL_OP_AVRCP_GET_PLAYER_VALUES_TEXT 0x06 ) 694  sh®_cmd_avrý_g‘_¶ay”_v®ues_‹xt { 695 ušt8_t mnumb” ; 696  h®_avrý_¶ay”_£‰šg_‹xt mv®ues [0]; 697 } __©Œibu‹__ (( ·cked )); 699  #HAL_AVRCP_MEDIA_ATTR_TITLE 0x01 ) 700  #HAL_AVRCP_MEDIA_ATTR_ARTIST 0x02 ) 701  #HAL_AVRCP_MEDIA_ATTR_ALBUM 0x03 ) 702  #HAL_AVRCP_MEDIA_ATTR_TRACK_NUM 0x04 ) 703  #HAL_AVRCP_MEDIA_ATTR_NUM_TRACKS 0x05 ) 704  #HAL_AVRCP_MEDIA_ATTR_GENRE 0x06 ) 705  #HAL_AVRCP_MEDIA_ATTR_DURATION 0x07 ) 707  #HAL_OP_AVRCP_GET_ELEMENT_ATTRS_TEXT 0x07 ) 708  sh®_cmd_avrý_g‘_–em’t_©Œs_‹xt { 709 ušt8_t mnumb” ; 710  h®_avrý_¶ay”_£‰šg_‹xt mv®ues [0]; 711 } __©Œibu‹__ (( ·cked )); 713  #HAL_OP_AVRCP_SET_PLAYER_ATTRS_VALUE 0x08 ) 714  sh®_cmd_avrý_£t_¶ay”_©Œs_v®ue { 715 ušt8_t m¡©us ; 716 } __©Œibu‹__ (( ·cked )); 718  #HAL_AVRCP_EVENT_STATUS_CHANGED 0x01 ) 719  #HAL_AVRCP_EVENT_TRACK_CHANGED 0x02 ) 720  #HAL_AVRCP_EVENT_TRACK_REACHED_END 0x03 ) 721  #HAL_AVRCP_EVENT_TRACK_REACHED_START 0x04 ) 722  #HAL_AVRCP_EVENT_POSITION_CHANGED 0x05 ) 723  #HAL_AVRCP_EVENT_SETTING_CHANGED 0x08 ) 725  #HAL_AVRCP_EVENT_TYPE_INTERIM 0x00 ) 726  #HAL_AVRCP_EVENT_TYPE_CHANGED 0x01 ) 728  #HAL_OP_AVRCP_REGISTER_NOTIFICATION 0x09 ) 729  sh®_cmd_avrý_»gi¡”_nÙifiÿtiÚ { 730 ušt8_t mev’t ; 731 ušt8_t mty³ ; 732 ušt8_t mËn ; 733 ušt8_t md©a [0]; 734 } __©Œibu‹__ (( ·cked )); 736  #HAL_OP_AVRCP_SET_VOLUME 0x0a ) 737  sh®_cmd_avrý_£t_vÞume { 738 ušt8_t mv®ue ; 739 } __©Œibu‹__ (( ·cked )); 743  #HAL_OP_AVRCP_CTRL_SEND_PASSTHROUGH 0x01 ) 744  sh®_cmd_avrý_ù¾_£nd_·s¡hrough { 745 ušt8_t mbdaddr [6]; 746 ušt8_t mkey_code ; 747 ušt8_t mkey_¡©e ; 748 } __©Œibu‹__ (( ·cked )); 752  #HAL_OP_GATT_CLIENT_REGISTER 0x01 ) 753  sh®_cmd_g©t_þ›Á_»gi¡” { 754 ušt8_t muuid [16]; 755 } __©Œibu‹__ (( ·cked )); 757  #HAL_OP_GATT_CLIENT_UNREGISTER 0x02 ) 758  sh®_cmd_g©t_þ›Á_uÄegi¡” { 759 št32_t mþ›Á_if ; 760 } __©Œibu‹__ (( ·cked )); 762  #HAL_OP_GATT_CLIENT_SCAN 0x03 ) 763  sh®_cmd_g©t_þ›Á_sÿn { 764 št32_t mþ›Á_if ; 765 ušt8_t m¡¬t ; 766 } __©Œibu‹__ (( ·cked )); 768  #HAL_OP_GATT_CLIENT_CONNECT 0x04 ) 769  sh®_cmd_g©t_þ›Á_cÚÃù { 770 št32_t mþ›Á_if ; 771 ušt8_t mbdaddr [6]; 772 ušt8_t mis_dœeù ; 773 št32_t mŒª¥Üt ; 774 } __©Œibu‹__ (( ·cked )); 776  #HAL_OP_GATT_CLIENT_DISCONNECT 0x05 ) 777  sh®_cmd_g©t_þ›Á_discÚÃù { 778 št32_t mþ›Á_if ; 779 ušt8_t mbdaddr [6]; 780 št32_t mcÚn_id ; 781 } __©Œibu‹__ (( ·cked )); 783  #HAL_OP_GATT_CLIENT_LISTEN 0x06 ) 784  sh®_cmd_g©t_þ›Á_li¡’ { 785 št32_t mþ›Á_if ; 786 ušt8_t m¡¬t ; 787 } __©Œibu‹__ (( ·cked )); 789  #HAL_OP_GATT_CLIENT_REFRESH 0x07 ) 790  sh®_cmd_g©t_þ›Á_»äesh { 791 št32_t mþ›Á_if ; 792 ušt8_t mbdaddr [6]; 793 } __©Œibu‹__ (( ·cked )); 795  #HAL_OP_GATT_CLIENT_SEARCH_SERVICE 0x08 ) 796  sh®_cmd_g©t_þ›Á_£¬ch_£rviû { 797 št32_t mcÚn_id ; 798 ušt8_t mfž‹»d ; 799 ušt8_t mfž‹r_uuid [0]; 800 } __©Œibu‹__ (( ·cked )); 802  #HAL_OP_GATT_CLIENT_GET_INCLUDED_SERVICE 0x09 ) 803  sh®_g©t_¤vc_id { 804 ušt8_t muuid [16]; 805 ušt8_t mš¡_id ; 806 ušt8_t mis_´im¬y ; 807 } __©Œibu‹__ (( ·cked )); 809  sh®_cmd_g©t_þ›Á_g‘_šþuded_£rviû { 810 št32_t mcÚn_id ; 811  h®_g©t_¤vc_id m¤vc_id ; 812 ušt8_t mcÚtšu©iÚ ; 813  h®_g©t_¤vc_id mšþ_¤vc_id [0]; 814 } __©Œibu‹__ (( ·cked )); 816  #HAL_OP_GATT_CLIENT_GET_CHARACTERISTIC 0x0a ) 817  sh®_g©t_g©t_id { 818 ušt8_t muuid [16]; 819 ušt8_t mš¡_id ; 820 } __©Œibu‹__ (( ·cked )); 822  sh®_cmd_g©t_þ›Á_g‘_ch¬aù”i¡ic { 823 št32_t mcÚn_id ; 824  h®_g©t_¤vc_id m¤vc_id ; 825 ušt8_t mcÚtšu©iÚ ; 826  h®_g©t_g©t_id mch¬_id [0]; 827 } __©Œibu‹__ (( ·cked )); 829  #HAL_OP_GATT_CLIENT_GET_DESCRIPTOR 0x0b ) 830  sh®_cmd_g©t_þ›Á_g‘_desütÜ { 831 št32_t mcÚn_id ; 832  h®_g©t_¤vc_id m¤vc_id ; 833  h®_g©t_g©t_id mch¬_id ; 834 ušt8_t mcÚtšu©iÚ ; 835  h®_g©t_g©t_id mdesü_id [0]; 836 } __©Œibu‹__ (( ·cked )); 838  #HAL_OP_GATT_CLIENT_READ_CHARACTERISTIC 0x0c ) 839  sh®_cmd_g©t_þ›Á_»ad_ch¬aù”i¡ic { 840 št32_t mcÚn_id ; 841  h®_g©t_¤vc_id m¤vc_id ; 842  h®_g©t_g©t_id mch¬_id ; 843 št32_t mauth_»q ; 844 } __©Œibu‹__ (( ·cked )); 846  #GATT_WRITE_TYPE_NO_RESPONSE 0x01 ) 847  #GATT_WRITE_TYPE_DEFAULT 0x02 ) 848  #GATT_WRITE_TYPE_PREPARE 0x03 ) 849  #GATT_WRITE_TYPE_SIGNED 0x04 ) 851  #HAL_OP_GATT_CLIENT_WRITE_CHARACTERISTIC 0x0d ) 852  sh®_cmd_g©t_þ›Á_wr™e_ch¬aù”i¡ic { 853 št32_t mcÚn_id ; 854  h®_g©t_¤vc_id m¤vc_id ; 855  h®_g©t_g©t_id mch¬_id ; 856 št32_t mwr™e_ty³ ; 857 št32_t mËn ; 858 št32_t mauth_»q ; 859 ušt8_t mv®ue [0]; 860 } __©Œibu‹__ (( ·cked )); 862  #HAL_OP_GATT_CLIENT_READ_DESCRIPTOR 0x0e ) 863  sh®_cmd_g©t_þ›Á_»ad_desütÜ { 864 št32_t mcÚn_id ; 865  h®_g©t_¤vc_id m¤vc_id ; 866  h®_g©t_g©t_id mch¬_id ; 867  h®_g©t_g©t_id mdesü_id ; 868 št32_t mauth_»q ; 869 } __©Œibu‹__ (( ·cked )); 871  #HAL_OP_GATT_CLIENT_WRITE_DESCRIPTOR 0x0f ) 872  sh®_cmd_g©t_þ›Á_wr™e_desütÜ { 873 št32_t mcÚn_id ; 874  h®_g©t_¤vc_id m¤vc_id ; 875  h®_g©t_g©t_id mch¬_id ; 876  h®_g©t_g©t_id mdesü_id ; 877 št32_t mwr™e_ty³ ; 878 št32_t mËn ; 879 št32_t mauth_»q ; 880 ušt8_t mv®ue [0]; 881 } __©Œibu‹__ (( ·cked )); 883  #HAL_OP_GATT_CLIENT_EXECUTE_WRITE 0x10 ) 884  sh®_cmd_g©t_þ›Á_execu‹_wr™e { 885 št32_t mcÚn_id ; 886 št32_t mexecu‹ ; 887 } __©Œibu‹__ (( ·cked )); 889  #HAL_OP_GATT_CLIENT_REGISTER_FOR_NOTIFICATION 0x11 ) 890  sh®_cmd_g©t_þ›Á_»gi¡”_fÜ_nÙifiÿtiÚ { 891 št32_t mþ›Á_if ; 892 ušt8_t mbdaddr [6]; 893  h®_g©t_¤vc_id m¤vc_id ; 894  h®_g©t_g©t_id mch¬_id ; 895 } __©Œibu‹__ (( ·cked )); 897  #HAL_OP_GATT_CLIENT_DEREGISTER_FOR_NOTIFICATION 0x12 ) 898  sh®_cmd_g©t_þ›Á_d”egi¡”_fÜ_nÙifiÿtiÚ { 899 št32_t mþ›Á_if ; 900 ušt8_t mbdaddr [6]; 901  h®_g©t_¤vc_id m¤vc_id ; 902  h®_g©t_g©t_id mch¬_id ; 903 } __©Œibu‹__ (( ·cked )); 905  #HAL_OP_GATT_CLIENT_READ_REMOTE_RSSI 0x13 ) 906  sh®_cmd_g©t_þ›Á_»ad_»mÙe_rssi { 907 št32_t mþ›Á_if ; 908 ušt8_t mbdaddr [6]; 909 } __©Œibu‹__ (( ·cked )); 911  #HAL_OP_GATT_CLIENT_GET_DEVICE_TYPE 0x14 ) 912  sh®_cmd_g©t_þ›Á_g‘_deviû_ty³ { 913 ušt8_t mbdaddr [6]; 914 } __©Œibu‹__ (( ·cked )); 916  sh®_r¥_g©t_þ›Á_g‘_deviû_ty³ { 917 ušt8_t mty³ ; 918 } __©Œibu‹__ (( ·cked )); 920  #HAL_OP_GATT_CLIENT_SET_ADV_DATA 0x015 ) 921  sh®_cmd_g©t_þ›Á_£t_adv_d©a { 922 št32_t m£rv”_if ; 923 ušt8_t m£t_sÿn_r¥ ; 924 ušt8_t mšþude_Çme ; 925 ušt8_t mšþude_txpow” ; 926 št32_t mmš_š‹rv® ; 927 št32_t mmax_š‹rv® ; 928 št32_t m­³¬ªû ; 929 ušt16_t mmªuçùu»r_Ën ; 930 ušt16_t m£rviû_d©a_Ën ; 931 ušt16_t m£rviû_uuid_Ën ; 932 ušt8_t md©a [0]; 933 } __©Œibu‹__ (( ·cked )); 935  #GATT_CLIENT_TEST_CMD_ENABLE 0x01 ) 936  #GATT_CLIENT_TEST_CMD_CONNECT 0x02 ) 937  #GATT_CLIENT_TEST_CMD_DISCONNECT 0x03 ) 938  #GATT_CLIENT_TEST_CMD_DISCOVER 0x04 ) 939  #GATT_CLIENT_TEST_CMD_READ 0xe0 ) 940  #GATT_CLIENT_TEST_CMD_WRITE 0xe1 ) 941  #GATT_CLIENT_TEST_CMD_INCREASE_SECURITY 0xe2 ) 942  #GATT_CLIENT_TEST_CMD_PAIRING_CONFIG 0xf0 ) 944  #HAL_OP_GATT_CLIENT_TEST_COMMAND 0x16 ) 945  sh®_cmd_g©t_þ›Á_‹¡_commªd { 946 št32_t mcommªd ; 947 ušt8_t mbda1 [6]; 948 ušt8_t muuid1 [16]; 949 ušt16_t mu1 ; 950 ušt16_t mu2 ; 951 ušt16_t mu3 ; 952 ušt16_t mu4 ; 953 ušt16_t mu5 ; 954 } __©Œibu‹__ (( ·cked )); 956  #HAL_OP_GATT_SERVER_REGISTER 0x17 ) 957  sh®_cmd_g©t_£rv”_»gi¡” { 958 ušt8_t muuid [16]; 959 } __©Œibu‹__ (( ·cked )); 961  #HAL_OP_GATT_SERVER_UNREGISTER 0x18 ) 962  sh®_cmd_g©t_£rv”_uÄegi¡” { 963 št32_t m£rv”_if ; 964 } __©Œibu‹__ (( ·cked )); 966  #HAL_OP_GATT_SERVER_CONNECT 0x19 ) 967  sh®_cmd_g©t_£rv”_cÚÃù { 968 št32_t m£rv”_if ; 969 ušt8_t mbdaddr [6]; 970 ušt8_t mis_dœeù ; 971 št32_t mŒª¥Üt ; 972 } __©Œibu‹__ (( ·cked )); 974  #HAL_OP_GATT_SERVER_DISCONNECT 0x1a ) 975  sh®_cmd_g©t_£rv”_discÚÃù { 976 št32_t m£rv”_if ; 977 ušt8_t mbdaddr [6]; 978 št32_t mcÚn_id ; 979 } __©Œibu‹__ (( ·cked )); 981  #HAL_OP_GATT_SERVER_ADD_SERVICE 0x1b ) 982  sh®_cmd_g©t_£rv”_add_£rviû { 983 št32_t m£rv”_if ; 984  h®_g©t_¤vc_id m¤vc_id ; 985 št32_t mnum_hªdËs ; 986 } __©Œibu‹__ (( ·cked )); 988  #HAL_OP_GATT_SERVER_ADD_INC_SERVICE 0x1c ) 989  sh®_cmd_g©t_£rv”_add_šc_£rviû { 990 št32_t m£rv”_if ; 991 št32_t m£rviû_hªdË ; 992 št32_t mšþuded_hªdË ; 993 } __©Œibu‹__ (( ·cked )); 995  #HAL_OP_GATT_SERVER_ADD_CHARACTERISTIC 0x1d ) 996  sh®_cmd_g©t_£rv”_add_ch¬aù”i¡ic { 997 št32_t m£rv”_if ; 998 št32_t m£rviû_hªdË ; 999 ušt8_t muuid [16]; 1000 št32_t m´Ý”t›s ; 1001 št32_t m³rmissiÚs ; 1002 } __©Œibu‹__ (( ·cked )); 1004  #HAL_OP_GATT_SERVER_ADD_DESCRIPTOR 0x1e ) 1005  sh®_cmd_g©t_£rv”_add_desütÜ { 1006 št32_t m£rv”_if ; 1007 št32_t m£rviû_hªdË ; 1008 ušt8_t muuid [16]; 1009 št32_t m³rmissiÚs ; 1010 } __©Œibu‹__ (( ·cked )); 1012  #GATT_SERVER_TRANSPORT_LE_BIT 0x01 ) 1013  #GATT_SERVER_TRANSPORT_BREDR_BIT 0x02 ) 1015  #HAL_OP_GATT_SERVER_START_SERVICE 0x1f ) 1016  sh®_cmd_g©t_£rv”_¡¬t_£rviû { 1017 št32_t m£rv”_if ; 1018 št32_t m£rviû_hªdË ; 1019 št32_t mŒª¥Üt ; 1020 } __©Œibu‹__ (( ·cked )); 1022  #HAL_OP_GATT_SERVER_STOP_SERVICE 0x20 ) 1023  sh®_cmd_g©t_£rv”_¡Ý_£rviû { 1024 št32_t m£rv”_if ; 1025 št32_t m£rviû_hªdË ; 1026 } __©Œibu‹__ (( ·cked )); 1028  #HAL_OP_GATT_SERVER_DELETE_SERVICE 0x21 ) 1029  sh®_cmd_g©t_£rv”_d–‘e_£rviû { 1030 št32_t m£rv”_if ; 1031 št32_t m£rviû_hªdË ; 1032 } __©Œibu‹__ (( ·cked )); 1034  #HAL_OP_GATT_SERVER_SEND_INDICATION 0x22 ) 1035  sh®_cmd_g©t_£rv”_£nd_šdiÿtiÚ { 1036 št32_t m£rv”_if ; 1037 št32_t m©Œibu‹_hªdË ; 1038 št32_t mcÚn_id ; 1039 št32_t mËn ; 1040 št32_t mcÚfœm ; 1041 ušt8_t mv®ue [0]; 1042 } __©Œibu‹__ (( ·cked )); 1044  #HAL_OP_GATT_SERVER_SEND_RESPONSE 0x23 ) 1045  sh®_cmd_g©t_£rv”_£nd_»¥Ú£ { 1046 št32_t mcÚn_id ; 1047 št32_t mŒªs_id ; 1048 ušt16_t mhªdË ; 1049 ušt16_t moff£t ; 1050 ušt8_t mauth_»q ; 1051 št32_t m¡©us ; 1052 ušt16_t mËn ; 1053 ušt8_t md©a [0]; 1054 } __©Œibu‹__ (( ·cked )); 1056  #HAL_OP_GATT_CLIENT_SCAN_FILTER_SETUP 0x024 ) 1057  sh®_cmd_g©t_þ›Á_sÿn_fž‹r_£tup { 1058 št32_t mþ›Á_if ; 1059 št32_t maùiÚ ; 1060 št32_t mfž‹r_šdex ; 1061 št32_t mã©u»s ; 1062 št32_t mli¡_ty³ ; 1063 št32_t mfž‹r_ty³ ; 1064 št32_t mrssi_hi ; 1065 št32_t mrssi_lo ; 1066 št32_t md–iv”y_mode ; 1067 št32_t mfound_timeout ; 1068 št32_t mlo¡_timeout ; 1069 št32_t mfound_timeout_út ; 1070 } __©Œibu‹__ (( ·cked )); 1072  #HAL_OP_GATT_CLIENT_SCAN_FILTER_ADD_REMOVE 0x025 ) 1073  sh®_cmd_g©t_þ›Á_sÿn_fž‹r_add_»move { 1074 št32_t mþ›Á_if ; 1075 št32_t maùiÚ ; 1076 št32_t mfž‹r_ty³ ; 1077 št32_t mfž‹r_šdex ; 1078 št32_t mcom·ny_id ; 1079 št32_t mcom·ny_id_mask ; 1080 ušt8_t muuid [16]; 1081 ušt8_t muuid_mask [16]; 1082 ušt8_t madd»ss [6]; 1083 ušt8_t madd»ss_ty³ ; 1084 št32_t md©a_Ën ; 1085 št32_t mmask_Ën ; 1086 ušt8_t md©a_mask [0]; 1087 } __©Œibu‹__ (( ·cked )); 1089  #HAL_OP_GATT_CLIENT_SCAN_FILTER_CLEAR 0x26 ) 1090  sh®_cmd_g©t_þ›Á_sÿn_fž‹r_þ—r { 1091 št32_t mþ›Á_if ; 1092 št32_t mšdex ; 1093 } __©Œibu‹__ (( ·cked )); 1095  #HAL_OP_GATT_CLIENT_SCAN_FILTER_ENABLE 0x27 ) 1096  sh®_cmd_g©t_þ›Á_sÿn_fž‹r_’abË { 1097 št32_t mþ›Á_if ; 1098 ušt8_t m’abË ; 1099 } __©Œibu‹__ (( ·cked )); 1101  #HAL_OP_GATT_CLIENT_CONFIGURE_MTU 0x28 ) 1102  sh®_cmd_g©t_þ›Á_cÚfigu»_mtu { 1103 št32_t mcÚn_id ; 1104 št32_t mmtu ; 1105 } __©Œibu‹__ (( ·cked )); 1107  #HAL_OP_GATT_CLIENT_CONN_PARAM_UPDATE 0x29 ) 1108  sh®_cmd_g©t_þ›Á_cÚn_·¿m_upd©e { 1109 ušt8_t madd»ss [6]; 1110 št32_t mmš_š‹rv® ; 1111 št32_t mmax_š‹rv® ; 1112 št32_t mÏ‹ncy ; 1113 št32_t mtimeout ; 1114 } __©Œibu‹__ (( ·cked )); 1116  #HAL_OP_GATT_CLIENT_SET_SCAN_PARAM 0x2a ) 1117  sh®_cmd_g©t_þ›Á_£t_sÿn_·¿m { 1118 št32_t mš‹rv® ; 1119 št32_t mwšdow ; 1120 } __©Œibu‹__ (( ·cked )); 1122  #HAL_OP_GATT_CLIENT_SETUP_MULTI_ADV 0x2b ) 1123  sh®_cmd_g©t_þ›Á_£tup_muÉi_adv { 1124 št32_t mþ›Á_if ; 1125 št32_t mmš_š‹rv® ; 1126 št32_t mmax_š‹rv® ; 1127 št32_t mty³ ; 1128 št32_t mchªÃl_m­ ; 1129 št32_t mtx_pow” ; 1130 št32_t mtimeout ; 1131 } __©Œibu‹__ (( ·cked )); 1133  #HAL_OP_GATT_CLIENT_UPDATE_MULTI_ADV 0x2c ) 1134  sh®_cmd_g©t_þ›Á_upd©e_muÉi_adv { 1135 št32_t mþ›Á_if ; 1136 št32_t mmš_š‹rv® ; 1137 št32_t mmax_š‹rv® ; 1138 št32_t mty³ ; 1139 št32_t mchªÃl_m­ ; 1140 št32_t mtx_pow” ; 1141 št32_t mtimeout ; 1142 } __©Œibu‹__ (( ·cked )); 1144  #HAL_OP_GATT_CLIENT_SETUP_MULTI_ADV_INST 0x2d ) 1145  sh®_cmd_g©t_þ›Á_£tup_muÉi_adv_š¡ { 1146 št32_t mþ›Á_if ; 1147 ušt8_t m£t_sÿn_r¥ ; 1148 ušt8_t mšþude_Çme ; 1149 ušt8_t mšþude_tx_pow” ; 1150 št32_t m­³¬ªû ; 1151 št32_t mmªuçùu»r_d©a_Ën ; 1152 št32_t m£rviû_d©a_Ën ; 1153 št32_t m£rviû_uuid_Ën ; 1154 ušt8_t md©a_£rviû_uuid [0]; 1155 } __©Œibu‹__ (( ·cked )); 1157  #HAL_OP_GATT_CLIENT_DISABLE_MULTI_ADV_INST 0x2e ) 1158  sh®_cmd_g©t_þ›Á_di§bË_muÉi_adv_š¡ { 1159 št32_t mþ›Á_if ; 1160 } __©Œibu‹__ (( ·cked )); 1162  #HAL_OP_GATT_CLIENT_CONFIGURE_BATCHSCAN 0x2f ) 1163  sh®_cmd_g©t_þ›Á_cÚfigu»_b©chsÿn { 1164 št32_t mþ›Á_if ; 1165 št32_t mfuÎ_max ; 1166 št32_t mŒunc_max ; 1167 št32_t mnÙify_th»shÞd ; 1168 } __©Œibu‹__ (( ·cked )); 1170  #HAL_OP_GATT_CLIENT_ENABLE_BATCHSCAN 0x30 ) 1171  sh®_cmd_g©t_þ›Á_’abË_b©chsÿn { 1172 št32_t mþ›Á_if ; 1173 št32_t mmode ; 1174 št32_t mš‹rv® ; 1175 št32_t mwšdow ; 1176 št32_t madd»ss_ty³ ; 1177 št32_t mdisÿrd_ruË ; 1178 } __©Œibu‹__ (( ·cked )); 1180  #HAL_OP_GATT_CLIENT_DISABLE_BATCHSCAN 0x31 ) 1181  sh®_cmd_g©t_þ›Á_di§bË_b©chsÿn { 1182 št32_t mþ›Á_if ; 1183 } __©Œibu‹__ (( ·cked )); 1185  #HAL_OP_GATT_CLIENT_READ_BATCHSCAN_REPORTS 0x32 ) 1186  sh®_cmd_g©t_þ›Á_»ad_b©chsÿn_»pÜts { 1187 št32_t mþ›Á_if ; 1188 št32_t msÿn_mode ; 1189 } __©Œibu‹__ (( ·cked )); 1193  #HAL_OP_HF_CLIENT_CONNECT 0x01 ) 1194  sh®_cmd_hf_þ›Á_cÚÃù { 1195 ušt8_t mbdaddr [6]; 1196 } __©Œibu‹__ (( ·cked )); 1198  #HAL_OP_HF_CLIENT_DISCONNECT 0x02 ) 1199  sh®_cmd_hf_þ›Á_discÚÃù { 1200 ušt8_t mbdaddr [6]; 1201 } __©Œibu‹__ (( ·cked )); 1203  #HAL_OP_HF_CLIENT_CONNECT_AUDIO 0x03 ) 1204  sh®_cmd_hf_þ›Á_cÚÃù_audio { 1205 ušt8_t mbdaddr [6]; 1206 } __©Œibu‹__ (( ·cked )); 1208  #HAL_OP_HF_CLIENT_DISCONNECT_AUDIO 0x04 ) 1209  sh®_cmd_hf_þ›Á_discÚÃù_audio { 1210 ušt8_t mbdaddr [6]; 1211 } __©Œibu‹__ (( ·cked )); 1213  #HAL_OP_HF_CLIENT_START_VR 0x05 ) 1214  #HAL_OP_HF_CLIENT_STOP_VR 0x06 ) 1216  #HF_CLIENT_VOLUME_TYPE_SPEAKER 0x00 ) 1217  #HF_CLIENT_VOLUME_TYPE_MIC 0x01 ) 1219  #HAL_OP_HF_CLIENT_VOLUME_CONTROL 0x07 ) 1220  sh®_cmd_hf_þ›Á_vÞume_cÚŒÞ { 1221 ušt8_t mty³ ; 1222 ušt8_t mvÞume ; 1223 } __©Œibu‹__ (( ·cked )); 1225  #HAL_OP_HF_CLIENT_DIAL 0x08 ) 1226  sh®_cmd_hf_þ›Á_dŸl { 1227 ušt16_t mnumb”_Ën ; 1228 ušt8_t mnumb” [0]; 1229 } __©Œibu‹__ (( ·cked )); 1231  #HAL_OP_HF_CLIENT_DIAL_MEMORY 0x09 ) 1232  sh®_cmd_hf_þ›Á_dŸl_memÜy { 1233 št32_t mloÿtiÚ ; 1234 } __©Œibu‹__ (( ·cked )); 1236  #HAL_HF_CLIENT_ACTION_CHLD_0 0x00 ) 1237  #HAL_HF_CLIENT_ACTION_CHLD_1 0x01 ) 1238  #HAL_HF_CLIENT_ACTION_CHLD_2 0x02 ) 1239  #HAL_HF_CLIENT_ACTION_CHLD_3 0x03 ) 1240  #HAL_HF_CLIENT_ACTION_CHLD_4 0x04 ) 1241  #HAL_HF_CLIENT_ACTION_CHLD_1x 0x05 ) 1242  #HAL_HF_CLIENT_ACTION_CHLD_2x 0x06 ) 1243  #HAL_HF_CLIENT_ACTION_ATA 0x07 ) 1244  #HAL_HF_CLIENT_ACTION_CHUP 0x08 ) 1245  #HAL_HF_CLIENT_ACTION_BRTH_0 0x09 ) 1246  #HAL_HF_CLIENT_ACTION_BRTH_1 0x0a ) 1247  #HAL_HF_CLIENT_ACTION_BRTH_2 0x0b ) 1249  #HAL_OP_HF_CLIENT_CALL_ACTION 0x0a ) 1250  sh®_cmd_hf_þ›Á_ÿÎ_aùiÚ { 1251 ušt8_t maùiÚ ; 1252 št32_t mšdex ; 1253 } __©Œibu‹__ (( ·cked )); 1255  #HAL_OP_HF_CLIENT_QUERY_CURRENT_CALLS 0x0b ) 1256  #HAL_OP_HF_CLIENT_QUERY_OPERATOR_NAME 0x0c ) 1257  #HAL_OP_HF_CLIENT_RETRIEVE_SUBSCR_INFO 0x0d ) 1259  #HAL_OP_HF_CLIENT_SEND_DTMF 0x0e ) 1260  sh®_cmd_hf_þ›Á_£nd_dtmf { 1261 ušt8_t mtÚe ; 1262 } __©Œibu‹__ (( ·cked )); 1264  #HAL_OP_HF_CLIENT_GET_LAST_VOICE_TAG_NUM 0x0f ) 1268  #HAL_OP_MAP_CLIENT_GET_INSTANCES 0x01 ) 1269  sh®_cmd_m­_þ›Á_g‘_š¡ªûs { 1270 ušt8_t mbdaddr [6]; 1271 } __©Œibu‹__ (( ·cked )); 1275  #HAL_POWER_OFF 0x00 ) 1276  #HAL_POWER_ON 0x01 ) 1278  #HAL_EV_ADAPTER_STATE_CHANGED 0x81 ) 1279  sh®_ev_ad­‹r_¡©e_chªged { 1280 ušt8_t m¡©e ; 1281 } __©Œibu‹__ (( ·cked )); 1283  #HAL_EV_ADAPTER_PROPS_CHANGED 0x82 ) 1284  sh®_´Ý”ty { 1285 ušt8_t mty³ ; 1286 ušt16_t mËn ; 1287 ušt8_t mv® [0]; 1288 } __©Œibu‹__ (( ·cked )); 1289  sh®_ev_ad­‹r_´Ýs_chªged { 1290 ušt8_t m¡©us ; 1291 ušt8_t mnum_´Ýs ; 1292  h®_´Ý”ty m´Ýs [0]; 1293 } __©Œibu‹__ (( ·cked )); 1295  #HAL_EV_REMOTE_DEVICE_PROPS 0x83 ) 1296  sh®_ev_»mÙe_deviû_´Ýs { 1297 ušt8_t m¡©us ; 1298 ušt8_t mbdaddr [6]; 1299 ušt8_t mnum_´Ýs ; 1300  h®_´Ý”ty m´Ýs [0]; 1301 } __©Œibu‹__ (( ·cked )); 1303  #HAL_EV_DEVICE_FOUND 0x84 ) 1304  sh®_ev_deviû_found { 1305 ušt8_t mnum_´Ýs ; 1306  h®_´Ý”ty m´Ýs [0]; 1307 } __©Œibu‹__ (( ·cked )); 1309  #HAL_DISCOVERY_STATE_STOPPED 0x00 ) 1310  #HAL_DISCOVERY_STATE_STARTED 0x01 ) 1312  #HAL_EV_DISCOVERY_STATE_CHANGED 0x85 ) 1313  sh®_ev_discov”y_¡©e_chªged { 1314 ušt8_t m¡©e ; 1315 } __©Œibu‹__ (( ·cked )); 1317  #HAL_EV_PIN_REQUEST 0x86 ) 1318  sh®_ev_pš_»que¡ { 1319 ušt8_t mbdaddr [6]; 1320 ušt8_t mÇme [249]; 1321 ušt32_t mþass_of_dev ; 1322 } __©Œibu‹__ (( ·cked )); 1324  #HAL_EV_SSP_REQUEST 0x87 ) 1325  sh®_ev_s¥_»que¡ { 1326 ušt8_t mbdaddr [6]; 1327 ušt8_t mÇme [249]; 1328 ušt32_t mþass_of_dev ; 1329 ušt8_t m·œšg_v¬ŸÁ ; 1330 ušt32_t m·sskey ; 1331 } __©Œibu‹__ (( ·cked )); 1333  #HAL_BOND_STATE_NONE 0 ) 1334  #HAL_BOND_STATE_BONDING 1 ) 1335  #HAL_BOND_STATE_BONDED 2 ) 1337  #HAL_EV_BOND_STATE_CHANGED 0x88 ) 1338  sh®_ev_bÚd_¡©e_chªged { 1339 ušt8_t m¡©us ; 1340 ušt8_t mbdaddr [6]; 1341 ušt8_t m¡©e ; 1342 } __©Œibu‹__ (( ·cked )); 1344  #HAL_ACL_STATE_CONNECTED 0x00 ) 1345  #HAL_ACL_STATE_DISCONNECTED 0x01 ) 1347  #HAL_EV_ACL_STATE_CHANGED 0x89 ) 1348  sh®_ev_aþ_¡©e_chªged { 1349 ušt8_t m¡©us ; 1350 ušt8_t mbdaddr [6]; 1351 ušt8_t m¡©e ; 1352 } __©Œibu‹__ (( ·cked )); 1354  #HAL_EV_DUT_MODE_RECEIVE 0x8a ) 1355  sh®_ev_dut_mode_»ûive { 1356 ušt16_t mÝcode ; 1357 ušt8_t mËn ; 1358 ušt8_t md©a [0]; 1359 } __©Œibu‹__ (( ·cked )); 1361  #HAL_EV_LE_TEST_MODE 0x8b ) 1362  sh®_ev_Ë_‹¡_mode { 1363 ušt8_t m¡©us ; 1364 ušt16_t mnum_·ck‘s ; 1365 } __©Œibu‹__ (( ·cked )); 1367  #HAL_EV_ENERGY_INFO 0x8c ) 1368  sh®_ev_’”gy_šfo { 1369 ušt8_t m¡©us ; 1370 ušt8_t mù¾_¡©e ; 1371 ušt64_t mtx_time ; 1372 ušt64_t mrx_time ; 1373 ušt64_t midË_time ; 1374 ušt64_t m’”gy_u£d ; 1375 } __©Œibu‹__ (( ·cked )); 1377  #HAL_HIDHOST_STATE_CONNECTED 0x00 ) 1378  #HAL_HIDHOST_STATE_CONNECTING 0x01 ) 1379  #HAL_HIDHOST_STATE_DISCONNECTED 0x02 ) 1380  #HAL_HIDHOST_STATE_DISCONNECTING 0x03 ) 1381  #HAL_HIDHOST_STATE_NO_HID 0x07 ) 1382  #HAL_HIDHOST_STATE_FAILED 0x08 ) 1383  #HAL_HIDHOST_STATE_UNKNOWN 0x09 ) 1385  #HAL_EV_HIDHOST_CONN_STATE 0x81 ) 1386  sh®_ev_hidho¡_cÚn_¡©e { 1387 ušt8_t mbdaddr [6]; 1388 ušt8_t m¡©e ; 1389 } __©Œibu‹__ (( ·cked )); 1391  #HAL_HIDHOST_STATUS_OK 0x00 ) 1393  #HAL_HIDHOST_HS_NOT_READY 0x01 ) 1394  #HAL_HIDHOST_HS_INVALID_RAPORT_ID 0x02 ) 1395  #HAL_HIDHOST_HS_TRANS_NOT_SUPPORTED 0x03 ) 1396  #HAL_HIDHOST_HS_INVALID_PARAM 0x04 ) 1397  #HAL_HIDHOST_HS_ERROR 0x05 ) 1399  #HAL_HIDHOST_GENERAL_ERROR 0x06 ) 1400  #HAL_HIDHOST_SDP_ERROR 0x07 ) 1401  #HAL_HIDHOST_PROTOCOL_ERROR 0x08 ) 1402  #HAL_HIDHOST_DB_ERROR 0x09 ) 1403  #HAL_HIDHOST_TOD_UNSUPPORTED_ERROR 0x0a ) 1404  #HAL_HIDHOST_NO_RESOURCES_ERROR 0x0b ) 1405  #HAL_HIDHOST_AUTH_FAILED_ERROR 0x0c ) 1406  #HAL_HIDHOST_HDL_ERROR 0x0d ) 1408  #HAL_EV_HIDHOST_INFO 0x82 ) 1409  sh®_ev_hidho¡_šfo { 1410 ušt8_t mbdaddr [6]; 1411 ušt8_t m©Œ ; 1412 ušt8_t msubþass ; 1413 ušt8_t m­p_id ; 1414 ušt16_t mv’dÜ ; 1415 ušt16_t m´oduù ; 1416 ušt16_t mv”siÚ ; 1417 ušt8_t mcouÁry ; 1418 ušt16_t mdesü_Ën ; 1419 ušt8_t mdesü [884]; 1420 } __©Œibu‹__ (( ·cked )); 1422  #HAL_EV_HIDHOST_PROTO_MODE 0x83 ) 1423  sh®_ev_hidho¡_´Ùo_mode { 1424 ušt8_t mbdaddr [6]; 1425 ušt8_t m¡©us ; 1426 ušt8_t mmode ; 1427 } __©Œibu‹__ (( ·cked )); 1429  #HAL_EV_HIDHOST_IDLE_TIME 0x84 ) 1430  sh®_ev_hidho¡_idË_time { 1431 ušt8_t mbdaddr [6]; 1432 ušt8_t m¡©us ; 1433 ušt32_t midË_¿‹ ; 1434 } __©Œibu‹__ (( ·cked )); 1436  #HAL_EV_HIDHOST_GET_REPORT 0x85 ) 1437  sh®_ev_hidho¡_g‘_»pÜt { 1438 ušt8_t mbdaddr [6]; 1439 ušt8_t m¡©us ; 1440 ušt16_t mËn ; 1441 ušt8_t md©a [0]; 1442 } __©Œibu‹__ (( ·cked )); 1444  #HAL_EV_HIDHOST_VIRTUAL_UNPLUG 0x86 ) 1445  sh®_ev_hidho¡_vœtu®_uÅlug { 1446 ušt8_t mbdaddr [6]; 1447 ušt8_t m¡©us ; 1448 } __©Œibu‹__ (( ·cked )); 1450  #HAL_EV_HIDHOST_HANDSHAKE 0x87 ) 1451  sh®_ev_hidho¡_hªdshake { 1452 ušt8_t mbdaddr [6]; 1453 ušt8_t m¡©us ; 1454 } __©Œibu‹__ (( ·cked )); 1456  #HAL_EV_PAN_CTRL_STATE 0x81 ) 1457  sh®_ev_·n_ù¾_¡©e { 1458 ušt8_t m¡©e ; 1459 ušt8_t m¡©us ; 1460 ušt8_t mloÿl_rÞe ; 1461 ušt8_t mÇme [17]; 1462 } __©Œibu‹__ (( ·cked )); 1464  #HAL_EV_PAN_CONN_STATE 0x82 ) 1465  sh®_ev_·n_cÚn_¡©e { 1466 ušt8_t m¡©e ; 1467 ušt8_t m¡©us ; 1468 ušt8_t mbdaddr [6]; 1469 ušt8_t mloÿl_rÞe ; 1470 ušt8_t m»mÙe_rÞe ; 1471 } __©Œibu‹__ (( ·cked )); 1473  #HAL_HEALTH_APP_REG_SUCCESS 0x00 ) 1474  #HAL_HEALTH_APP_REG_FAILED 0x01 ) 1475  #HAL_HEALTH_APP_DEREG_SUCCESS 0x02 ) 1476  #HAL_HEALTH_APP_DEREG_FAILED 0x03 ) 1478  #HAL_HEALTH_CHANNEL_CONNECTING 0x00 ) 1479  #HAL_HEALTH_CHANNEL_CONNECTED 0x01 ) 1480  #HAL_HEALTH_CHANNEL_DISCONNECTING 0x02 ) 1481  #HAL_HEALTH_CHANNEL_DISCONNECTED 0x03 ) 1482  #HAL_HEALTH_CHANNEL_DESTROYED 0x04 ) 1484  #HAL_EV_HEALTH_APP_REG_STATE 0x81 ) 1485  sh®_ev_h—Éh_­p_»g_¡©e { 1486 ušt16_t mid ; 1487 ušt8_t m¡©e ; 1488 } __©Œibu‹__ (( ·cked )); 1490  #HAL_EV_HEALTH_CHANNEL_STATE 0x82 ) 1491  sh®_ev_h—Éh_chªÃl_¡©e { 1492 ušt16_t m­p_id ; 1493 ušt8_t mbdaddr [6]; 1494 ušt8_t mmd•_šdex ; 1495 ušt16_t mchªÃl_id ; 1496 ušt8_t mchªÃl_¡©e ; 1497 } __©Œibu‹__ (( ·cked )); 1499  #HAL_A2DP_STATE_DISCONNECTED 0x00 ) 1500  #HAL_A2DP_STATE_CONNECTING 0x01 ) 1501  #HAL_A2DP_STATE_CONNECTED 0x02 ) 1502  #HAL_A2DP_STATE_DISCONNECTING 0x03 ) 1504  #HAL_EV_A2DP_CONN_STATE 0x81 ) 1505  sh®_ev_a2dp_cÚn_¡©e { 1506 ušt8_t m¡©e ; 1507 ušt8_t mbdaddr [6]; 1508 } __©Œibu‹__ (( ·cked )); 1510  #HAL_AUDIO_SUSPEND 0x00 ) 1511  #HAL_AUDIO_STOPPED 0x01 ) 1512  #HAL_AUDIO_STARTED 0x02 ) 1514  #HAL_EV_A2DP_AUDIO_STATE 0x82 ) 1515  sh®_ev_a2dp_audio_¡©e { 1516 ušt8_t m¡©e ; 1517 ušt8_t mbdaddr [6]; 1518 } __©Œibu‹__ (( ·cked )); 1520  #HAL_EV_A2DP_AUDIO_CONFIG 0x83 ) 1521  sh®_ev_a2dp_audio_cÚfig { 1522 ušt8_t mbdaddr [6]; 1523 ušt32_t m§m¶e_¿‹ ; 1524 ušt8_t mchªÃl_couÁ ; 1525 } __©Œibu‹__ (( ·cked )); 1527  #HAL_EV_HANDSFREE_CONN_STATE_DISCONNECTED 0x00 ) 1528  #HAL_EV_HANDSFREE_CONN_STATE_CONNECTING 0x01 ) 1529  #HAL_EV_HANDSFREE_CONN_STATE_CONNECTED 0x02 ) 1530  #HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED 0x03 ) 1531  #HAL_EV_HANDSFREE_CONN_STATE_DISCONNECTING 0x04 ) 1533  #HAL_EV_HANDSFREE_CONN_STATE 0x81 ) 1534  sh®_ev_hªdsä“_cÚn_¡©e { 1535 ušt8_t m¡©e ; 1536 ušt8_t mbdaddr [6]; 1537 } __©Œibu‹__ (( ·cked )); 1539  #HAL_EV_HANDSFREE_AUDIO_STATE_DISCONNECTED 0x00 ) 1540  #HAL_EV_HANDSFREE_AUDIO_STATE_CONNECTING 0x01 ) 1541  #HAL_EV_HANDSFREE_AUDIO_STATE_CONNECTED 0x02 ) 1542  #HAL_EV_HANDSFREE_AUDIO_STATE_DISCONNECTING 0x03 ) 1544  #HAL_EV_HANDSFREE_AUDIO_STATE 0x82 ) 1545  sh®_ev_hªdsä“_audio_¡©e { 1546 ušt8_t m¡©e ; 1547 ušt8_t mbdaddr [6]; 1548 } __©Œibu‹__ (( ·cked )); 1550  #HAL_HANDSFREE_VR_STOPPED 0x00 ) 1551  #HAL_HANDSFREE_VR_STARTED 0x01 ) 1553  #HAL_EV_HANDSFREE_VR 0x83 ) 1554  sh®_ev_hªdsä“_vr_¡©e { 1555 ušt8_t m¡©e ; 1556 ušt8_t mbdaddr [6]; 1557 } __©Œibu‹__ (( ·cked )); 1559  #HAL_EV_HANDSFREE_ANSWER 0x84 ) 1560  sh®_ev_hªdsä“_ªsw” { 1561 ušt8_t mbdaddr [6]; 1562 } __©Œibu‹__ (( ·cked )); 1564  #HAL_EV_HANDSFREE_HANGUP 0x85 ) 1565  sh®_ev_hªdsä“_hªgup { 1566 ušt8_t mbdaddr [6]; 1567 } __©Œibu‹__ (( ·cked )); 1569  #HAL_EV_HANDSFREE_VOLUME 0x86 ) 1570  sh®_ev_hªdsä“_vÞume { 1571 ušt8_t mty³ ; 1572 ušt8_t mvÞume ; 1573 ušt8_t mbdaddr [6]; 1574 } __©Œibu‹__ (( ·cked )); 1576  #HAL_EV_HANDSFREE_DIAL 0x87 ) 1577  sh®_ev_hªdsä“_dŸl { 1578 ušt8_t mbdaddr [6]; 1579 ušt16_t mnumb”_Ën ; 1580 ušt8_t mnumb” [0]; 1581 } __©Œibu‹__ (( ·cked )); 1583  #HAL_EV_HANDSFREE_DTMF 0x88 ) 1584  sh®_ev_hªdsä“_dtmf { 1585 ušt8_t mtÚe ; 1586 ušt8_t mbdaddr [6]; 1587 } __©Œibu‹__ (( ·cked )); 1589  #HAL_HANDSFREE_NREC_STOP 0x00 ) 1590  #HAL_HANDSFREE_NREC_START 0x01 ) 1592  #HAL_EV_HANDSFREE_NREC 0x89 ) 1593  sh®_ev_hªdsä“_Äec { 1594 ušt8_t mÄec ; 1595 ušt8_t mbdaddr [6]; 1596 } __©Œibu‹__ (( ·cked )); 1598  #HAL_HANDSFREE_CHLD_TYPE_RELEASEHELD 0x00 ) 1599  #HAL_HANDSFREE_CHLD_TYPE_RELEASEACTIVE_ACCEPTHELD 0x01 ) 1600  #HAL_HANDSFREE_CHLD_TYPE_HOLDACTIVE_ACCEPTHELD 0x02 ) 1601  #HAL_HANDSFREE_CHLD_TYPE_ADDHELDTOCONF 0x03 ) 1603  #HAL_EV_HANDSFREE_CHLD 0x8A ) 1604  sh®_ev_hªdsä“_chld { 1605 ušt8_t mchld ; 1606 ušt8_t mbdaddr [6]; 1607 } __©Œibu‹__ (( ·cked )); 1609  #HAL_EV_HANDSFREE_CNUM 0x8B ) 1610  sh®_ev_hªdsä“_úum { 1611 ušt8_t mbdaddr [6]; 1612 } __©Œibu‹__ (( ·cked )); 1614  #HAL_EV_HANDSFREE_CIND 0x8C ) 1615  sh®_ev_hªdsä“_cšd { 1616 ušt8_t mbdaddr [6]; 1617 } __©Œibu‹__ (( ·cked )); 1619  #HAL_EV_HANDSFREE_COPS 0x8D ) 1620  sh®_ev_hªdsä“_cÝs { 1621 ušt8_t mbdaddr [6]; 1622 } __©Œibu‹__ (( ·cked )); 1624  #HAL_EV_HANDSFREE_CLCC 0x8E ) 1625  sh®_ev_hªdsä“_þcc { 1626 ušt8_t mbdaddr [6]; 1627 } __©Œibu‹__ (( ·cked )); 1629  #HAL_EV_HANDSFREE_UNKNOWN_AT 0x8F ) 1630  sh®_ev_hªdsä“_unknown_© { 1631 ušt8_t mbdaddr [6]; 1632 ušt16_t mËn ; 1633 ušt8_t mbuf [0]; 1634 } __©Œibu‹__ (( ·cked )); 1636  #HAL_EV_HANDSFREE_HSP_KEY_PRESS 0x90 ) 1637  sh®_ev_hªdsä“_h¥_key_´ess { 1638 ušt8_t mbdaddr [6]; 1639 } __©Œibu‹__ (( ·cked )); 1641  #HAL_AVRCP_FEATURE_NONE 0x00 ) 1642  #HAL_AVRCP_FEATURE_METADATA 0x01 ) 1643  #HAL_AVRCP_FEATURE_ABSOLUTE_VOLUME 0x02 ) 1644  #HAL_AVRCP_FEATURE_BROWSE 0x04 ) 1646  #HAL_EV_AVRCP_REMOTE_FEATURES 0x81 ) 1647  sh®_ev_avrý_»mÙe_ã©u»s { 1648 ušt8_t mbdaddr [6]; 1649 ušt8_t mã©u»s ; 1650 } __©Œibu‹__ (( ·cked )); 1652  #HAL_EV_AVRCP_GET_PLAY_STATUS 0x82 ) 1653  #HAL_EV_AVRCP_LIST_PLAYER_ATTRS 0x83 ) 1655  #HAL_EV_AVRCP_LIST_PLAYER_VALUES 0x84 ) 1656  sh®_ev_avrý_li¡_¶ay”_v®ues { 1657 ušt8_t m©Œ ; 1658 } __©Œibu‹__ (( ·cked )); 1660  #HAL_EV_AVRCP_GET_PLAYER_VALUES 0x85 ) 1661  sh®_ev_avrý_g‘_¶ay”_v®ues { 1662 ušt8_t mnumb” ; 1663 ušt8_t m©Œs [0]; 1664 } __©Œibu‹__ (( ·cked )); 1666  #HAL_EV_AVRCP_GET_PLAYER_ATTRS_TEXT 0x86 ) 1667  sh®_ev_avrý_g‘_¶ay”_©Œs_‹xt { 1668 ušt8_t mnumb” ; 1669 ušt8_t m©Œs [0]; 1670 } __©Œibu‹__ (( ·cked )); 1672  #HAL_EV_AVRCP_GET_PLAYER_VALUES_TEXT 0x87 ) 1673  sh®_ev_avrý_g‘_¶ay”_v®ues_‹xt { 1674 ušt8_t m©Œ ; 1675 ušt8_t mnumb” ; 1676 ušt8_t mv®ues [0]; 1677 } __©Œibu‹__ (( ·cked )); 1679  #HAL_EV_AVRCP_SET_PLAYER_VALUES 0x88 ) 1680  sh®_ev_avrý_£t_¶ay”_v®ues { 1681 ušt8_t mnumb” ; 1682  h®_avrý_¶ay”_©Œ_v®ue m©Œs [0]; 1683 } __©Œibu‹__ (( ·cked )); 1685  #HAL_EV_AVRCP_GET_ELEMENT_ATTRS 0x89 ) 1686  sh®_ev_avrý_g‘_–em’t_©Œs { 1687 ušt8_t mnumb” ; 1688 ušt8_t m©Œs [0]; 1689 } __©Œibu‹__ (( ·cked )); 1691  #HAL_EV_AVRCP_REGISTER_NOTIFICATION 0x8a ) 1692  sh®_ev_avrý_»gi¡”_nÙifiÿtiÚ { 1693 ušt8_t mev’t ; 1694 ušt32_t m·¿m ; 1695 } __©Œibu‹__ (( ·cked )); 1697  #HAL_EV_AVRCP_VOLUME_CHANGED 0x8b ) 1698  sh®_ev_avrý_vÞume_chªged { 1699 ušt8_t mvÞume ; 1700 ušt8_t mty³ ; 1701 } __©Œibu‹__ (( ·cked )); 1703  #HAL_EV_AVRCP_PASSTHROUGH_CMD 0x8c ) 1704  sh®_ev_avrý_·s¡hrough_cmd { 1705 ušt8_t mid ; 1706 ušt8_t m¡©e ; 1707 } __©Œibu‹__ (( ·cked )); 1709  #HAL_EV_AVRCP_CTRL_CONN_STATE 0x81 ) 1710  sh®_ev_avrý_ù¾_cÚn_¡©e { 1711 ušt8_t m¡©e ; 1712 ušt8_t mbdaddr [6]; 1713 } __©Œibu‹__ (( ·cked )); 1715  #HAL_EV_AVRCP_CTRL_PASSTHROUGH_RSP 0x82 ) 1716  sh®_ev_avrý_ù¾_·s¡hrough_r¥ { 1717 ušt8_t mid ; 1718 ušt8_t mkey_¡©e ; 1719 } __©Œibu‹__ (( ·cked )); 1721  #HAL_EV_GATT_CLIENT_REGISTER_CLIENT 0x81 ) 1722  sh®_ev_g©t_þ›Á_»gi¡”_þ›Á { 1723 št32_t m¡©us ; 1724 št32_t mþ›Á_if ; 1725 ušt8_t m­p_uuid [16]; 1726 } __©Œibu‹__ (( ·cked )); 1728  #HAL_EV_GATT_CLIENT_SCAN_RESULT 0x82 ) 1729  sh®_ev_g©t_þ›Á_sÿn_»suÉ { 1730 ušt8_t mbda [6]; 1731 št32_t mrssi ; 1732 ušt16_t mËn ; 1733 ušt8_t madv_d©a [0]; 1734 } __©Œibu‹__ (( ·cked )); 1736  #HAL_EV_GATT_CLIENT_CONNECT 0x83 ) 1737  sh®_ev_g©t_þ›Á_cÚÃù { 1738 št32_t mcÚn_id ; 1739 št32_t m¡©us ; 1740 št32_t mþ›Á_if ; 1741 ušt8_t mbda [6]; 1742 } __©Œibu‹__ (( ·cked )); 1744  #HAL_EV_GATT_CLIENT_DISCONNECT 0x84 ) 1745  sh®_ev_g©t_þ›Á_discÚÃù { 1746 št32_t mcÚn_id ; 1747 št32_t m¡©us ; 1748 št32_t mþ›Á_if ; 1749 ušt8_t mbda [6]; 1750 } __©Œibu‹__ (( ·cked )); 1752  #HAL_EV_GATT_CLIENT_SEARCH_COMPLETE 0x85 ) 1753  sh®_ev_g©t_þ›Á_£¬ch_com¶‘e { 1754 št32_t mcÚn_id ; 1755 št32_t m¡©us ; 1756 } __©Œibu‹__ (( ·cked )); 1758  #HAL_EV_GATT_CLIENT_SEARCH_RESULT 0x86 ) 1759  sh®_ev_g©t_þ›Á_£¬ch_»suÉ { 1760 št32_t mcÚn_id ; 1761  h®_g©t_¤vc_id m¤vc_id ; 1762 } __©Œibu‹__ (( ·cked )); 1764  #HAL_EV_GATT_CLIENT_GET_CHARACTERISTIC 0x87 ) 1765  sh®_ev_g©t_þ›Á_g‘_ch¬aù”i¡ic { 1766 št32_t mcÚn_id ; 1767 št32_t m¡©us ; 1768  h®_g©t_¤vc_id m¤vc_id ; 1769  h®_g©t_g©t_id mch¬_id ; 1770 št32_t mch¬_´Ý ; 1771 } __©Œibu‹__ (( ·cked )); 1773  #HAL_EV_GATT_CLIENT_GET_DESCRIPTOR 0x88 ) 1774  sh®_ev_g©t_þ›Á_g‘_desütÜ { 1775 št32_t mcÚn_id ; 1776 št32_t m¡©us ; 1777  h®_g©t_¤vc_id m¤vc_id ; 1778  h®_g©t_g©t_id mch¬_id ; 1779  h®_g©t_g©t_id mdesü_id ; 1780 } __©Œibu‹__ (( ·cked )); 1782  #HAL_EV_GATT_CLIENT_GET_INC_SERVICE 0X89 ) 1783  sh®_ev_g©t_þ›Á_g‘_šc_£rviû { 1784 št32_t mcÚn_id ; 1785 št32_t m¡©us ; 1786  h®_g©t_¤vc_id m¤vc_id ; 1787  h®_g©t_¤vc_id mšþ_¤vc_id ; 1788 } __©Œibu‹__ (( ·cked )); 1790  #HAL_EV_GATT_CLIENT_REGISTER_FOR_NOTIF 0x8a ) 1791  sh®_ev_g©t_þ›Á_»g_fÜ_nÙif { 1792 št32_t mcÚn_id ; 1793 št32_t m»gi¡”ed ; 1794 št32_t m¡©us ; 1795  h®_g©t_¤vc_id m¤vc_id ; 1796  h®_g©t_g©t_id mch¬_id ; 1797 } __©Œibu‹__ (( ·cked )); 1799  #HAL_EV_GATT_CLIENT_NOTIFY 0x8b ) 1800  sh®_ev_g©t_þ›Á_nÙify { 1801 št32_t mcÚn_id ; 1802 ušt8_t mbda [6]; 1803  h®_g©t_¤vc_id m¤vc_id ; 1804  h®_g©t_g©t_id mch¬_id ; 1805 ušt8_t mis_nÙify ; 1806 ušt16_t mËn ; 1807 ušt8_t mv®ue [0]; 1808 } __©Œibu‹__ (( ·cked )); 1810  #HAL_EV_GATT_CLIENT_READ_CHARACTERISTIC 0x8c ) 1811  sh®_g©t_»ad_·¿ms { 1812  h®_g©t_¤vc_id m¤vc_id ; 1813  h®_g©t_g©t_id mch¬_id ; 1814  h®_g©t_g©t_id mdesü_id ; 1815 ušt8_t m¡©us ; 1816 ušt16_t mv®ue_ty³ ; 1817 ušt16_t mËn ; 1818 ušt8_t mv®ue [0]; 1819 } __©Œibu‹__ (( ·cked )); 1821  sh®_ev_g©t_þ›Á_»ad_ch¬aù”i¡ic { 1822 št32_t mcÚn_id ; 1823 št32_t m¡©us ; 1824  h®_g©t_»ad_·¿ms md©a ; 1825 } __©Œibu‹__ (( ·cked )); 1827  #HAL_EV_GATT_CLIENT_WRITE_CHARACTERISTIC 0x8d ) 1828  sh®_g©t_wr™e_·¿ms { 1829  h®_g©t_¤vc_id m¤vc_id ; 1830  h®_g©t_g©t_id mch¬_id ; 1831  h®_g©t_g©t_id mdesü_id ; 1832 ušt8_t m¡©us ; 1833 } __©Œibu‹__ (( ·cked )); 1835  sh®_ev_g©t_þ›Á_wr™e_ch¬aù”i¡ic { 1836 št32_t mcÚn_id ; 1837 št32_t m¡©us ; 1838  h®_g©t_wr™e_·¿ms md©a ; 1839 } __©Œibu‹__ (( ·cked )); 1841  #HAL_EV_GATT_CLIENT_READ_DESCRIPTOR 0x8e ) 1842  sh®_ev_g©t_þ›Á_»ad_desütÜ { 1843 št32_t mcÚn_id ; 1844 št32_t m¡©us ; 1845  h®_g©t_»ad_·¿ms md©a ; 1846 } __©Œibu‹__ (( ·cked )); 1848  #HAL_EV_GATT_CLIENT_WRITE_DESCRIPTOR 0x8f ) 1849  sh®_ev_g©t_þ›Á_wr™e_desütÜ { 1850 št32_t mcÚn_id ; 1851 št32_t m¡©us ; 1852  h®_g©t_wr™e_·¿ms md©a ; 1853 } __©Œibu‹__ (( ·cked )); 1855  #HAL_EV_GATT_CLIENT_EXEC_WRITE 0x90 ) 1856  sh®_ev_g©t_þ›Á_exec_wr™e { 1857 št32_t mcÚn_id ; 1858 št32_t m¡©us ; 1859 } __©Œibu‹__ (( ·cked )); 1861  #HAL_EV_GATT_CLIENT_READ_REMOTE_RSSI 0x91 ) 1862  sh®_ev_g©t_þ›Á_»ad_»mÙe_rssi { 1863 št32_t mþ›Á_if ; 1864 ušt8_t madd»ss [6]; 1865 št32_t mrssi ; 1866 št32_t m¡©us ; 1867 } __©Œibu‹__ (( ·cked )); 1869  #HAL_EV_GATT_CLIENT_LISTEN 0x92 ) 1870  sh®_ev_g©t_þ›Á_li¡’ { 1871 št32_t m¡©us ; 1872 št32_t m£rv”_if ; 1873 } __©Œibu‹__ (( ·cked )); 1875  #HAL_EV_GATT_SERVER_REGISTER 0x93 ) 1876  sh®_ev_g©t_£rv”_»gi¡” { 1877 št32_t m¡©us ; 1878 št32_t m£rv”_if ; 1879 ušt8_t muuid [16]; 1880 } __©Œibu‹__ (( ·cked )); 1882  #HAL_EV_GATT_SERVER_CONNECTION 0x94 ) 1883  sh®_ev_g©t_£rv”_cÚÃùiÚ { 1884 št32_t mcÚn_id ; 1885 št32_t m£rv”_if ; 1886 št32_t mcÚÃùed ; 1887 ušt8_t mbdaddr [6]; 1888 } __©Œibu‹__ (( ·cked )); 1890  #HAL_EV_GATT_SERVER_SERVICE_ADDED 0x95 ) 1891  sh®_ev_g©t_£rv”_£rviû_added { 1892 št32_t m¡©us ; 1893 št32_t m£rv”_if ; 1894  h®_g©t_¤vc_id m¤vc_id ; 1895 št32_t m¤vc_hªdË ; 1896 } __©Œibu‹__ (( ·cked )); 1898  #HAL_EV_GATT_SERVER_INC_SRVC_ADDED 0x96 ) 1899  sh®_ev_g©t_£rv”_šc_¤vc_added { 1900 št32_t m¡©us ; 1901 št32_t m£rv”_if ; 1902 št32_t m¤vc_hªdË ; 1903 št32_t mšþ_¤vc_hªdË ; 1904 } __©Œibu‹__ (( ·cked )); 1906  #HAL_EV_GATT_SERVER_CHAR_ADDED 0x97 ) 1907  sh®_ev_g©t_£rv”_ch¬aù”i¡ic_added { 1908 št32_t m¡©us ; 1909 št32_t m£rv”_if ; 1910 ušt8_t muuid [16]; 1911 št32_t m¤vc_hªdË ; 1912 št32_t mch¬_hªdË ; 1913 } __©Œibu‹__ (( ·cked )); 1915  #HAL_EV_GATT_SERVER_DESCRIPTOR_ADDED 0x98 ) 1916  sh®_ev_g©t_£rv”_desütÜ_added { 1917 št32_t m¡©us ; 1918 št32_t m£rv”_if ; 1919 ušt8_t muuid [16]; 1920 št32_t m¤vc_hªdË ; 1921 št32_t mdesü_hªdË ; 1922 } __©Œibu‹__ (( ·cked )); 1924  #HAL_EV_GATT_SERVER_SERVICE_STARTED 0x99 ) 1925  sh®_ev_g©t_£rv”_£rviû_¡¬‹d { 1926 št32_t m¡©us ; 1927 št32_t m£rv”_if ; 1928 št32_t m¤vc_hªdË ; 1929 } __©Œibu‹__ (( ·cked )); 1931  #HAL_EV_GATT_SERVER_SERVICE_STOPPED 0x9a ) 1932  sh®_ev_g©t_£rv”_£rviû_¡Ý³d { 1933 št32_t m¡©us ; 1934 št32_t m£rv”_if ; 1935 št32_t m¤vc_hªdË ; 1936 } __©Œibu‹__ (( ·cked )); 1938  #HAL_EV_GATT_SERVER_SERVICE_DELETED 0x9b ) 1939  sh®_ev_g©t_£rv”_£rviû_d–‘ed { 1940 št32_t m¡©us ; 1941 št32_t m£rv”_if ; 1942 št32_t m¤vc_hªdË ; 1943 } __©Œibu‹__ (( ·cked )); 1945  #HAL_EV_GATT_SERVER_REQUEST_READ 0x9c ) 1946  sh®_ev_g©t_£rv”_»que¡_»ad { 1947 št32_t mcÚn_id ; 1948 št32_t mŒªs_id ; 1949 ušt8_t mbdaddr [6]; 1950 št32_t m©Œ_hªdË ; 1951 št32_t moff£t ; 1952 ušt8_t mis_lÚg ; 1953 } __©Œibu‹__ (( ·cked )); 1955  #HAL_EV_GATT_SERVER_REQUEST_WRITE 0x9d ) 1956  sh®_ev_g©t_£rv”_»que¡_wr™e { 1957 št32_t mcÚn_id ; 1958 št32_t mŒªs_id ; 1959 ušt8_t mbdaddr [6]; 1960 št32_t m©Œ_hªdË ; 1961 št32_t moff£t ; 1962 št32_t mËngth ; 1963 ušt8_t mÃed_r¥ ; 1964 ušt8_t mis_´• ; 1965 ušt8_t mv®ue [0]; 1966 } __©Œibu‹__ (( ·cked )); 1968  #HAL_EV_GATT_SERVER_REQUEST_EXEC_WRITE 0x9e ) 1969  sh®_ev_g©t_£rv”_»que¡_exec_wr™e { 1970 št32_t mcÚn_id ; 1971 št32_t mŒªs_id ; 1972 ušt8_t mbdaddr [6]; 1973 št32_t mexec_wr™e ; 1974 } __©Œibu‹__ (( ·cked )); 1976  #HAL_EV_GATT_SERVER_RSP_CONFIRMATION 0x9f ) 1977  sh®_ev_g©t_£rv”_r¥_cÚfœm©iÚ { 1978 št32_t m¡©us ; 1979 št32_t mhªdË ; 1980 } __©Œibu‹__ (( ·cked )); 1982  #HAL_EV_GATT_CLIENT_CONFIGURE_MTU 0xa0 ) 1983  sh®_ev_g©t_þ›Á_cÚfigu»_mtu { 1984 št32_t mcÚn_id ; 1985 št32_t m¡©us ; 1986 št32_t mmtu ; 1987 } __©Œibu‹__ (( ·cked )); 1989  #HAL_EV_GATT_CLIENT_FILTER_CONFIG 0xa1 ) 1990  sh®_ev_g©t_þ›Á_fž‹r_cÚfig { 1991 št32_t maùiÚ ; 1992 št32_t mþ›Á_if ; 1993 št32_t m¡©us ; 1994 št32_t mty³ ; 1995 št32_t m¥aû ; 1996 } __©Œibu‹__ (( ·cked )); 1998  #HAL_EV_GATT_CLIENT_FILTER_PARAMS 0xa2 ) 1999  sh®_ev_g©t_þ›Á_fž‹r_·¿ms { 2000 št32_t maùiÚ ; 2001 št32_t mþ›Á_if ; 2002 št32_t m¡©us ; 2003 št32_t m¥aû ; 2004 } __©Œibu‹__ (( ·cked )); 2006  #HAL_EV_GATT_CLIENT_FILTER_STATUS 0xa3 ) 2007  sh®_ev_g©t_þ›Á_fž‹r_¡©us { 2008 št32_t m’abË ; 2009 št32_t mþ›Á_if ; 2010 št32_t m¡©us ; 2011 } __©Œibu‹__ (( ·cked )); 2013  #HAL_EV_GATT_CLIENT_MULTI_ADV_ENABLE 0xa4 ) 2014  sh®_ev_g©t_þ›Á_muÉi_adv_’abË { 2015 št32_t mþ›Á_if ; 2016 št32_t m¡©us ; 2017 } __©Œibu‹__ (( ·cked )); 2020  #HAL_EV_GATT_CLIENT_MULTI_ADV_UPDATE 0xa5 ) 2021  sh®_ev_g©t_þ›Á_muÉi_adv_upd©e { 2022 št32_t mþ›Á_if ; 2023 št32_t m¡©us ; 2024 } __©Œibu‹__ (( ·cked )); 2027  #HAL_EV_GATT_CLIENT_MULTI_ADV_DATA 0xa6 ) 2028  sh®_ev_g©t_þ›Á_muÉi_adv_d©a { 2029 št32_t mþ›Á_if ; 2030 št32_t m¡©us ; 2031 } __©Œibu‹__ (( ·cked )); 2034  #HAL_EV_GATT_CLIENT_MULTI_ADV_DISABLE 0xa7 ) 2035  sh®_ev_g©t_þ›Á_muÉi_adv_di§bË { 2036 št32_t mþ›Á_if ; 2037 št32_t m¡©us ; 2038 } __©Œibu‹__ (( ·cked )); 2040  #HAL_EV_GATT_CLIENT_CONGESTION 0xa8 ) 2041  sh®_ev_g©t_þ›Á_cÚge¡iÚ { 2042 št32_t mcÚn_id ; 2043 ušt8_t mcÚge¡ed ; 2044 } __©Œibu‹__ (( ·cked )); 2046  #HAL_EV_GATT_CLIENT_CONFIG_BATCHSCAN 0xa9 ) 2047  sh®_ev_g©t_þ›Á_cÚfig_b©chsÿn { 2048 št32_t mþ›Á_if ; 2049 št32_t m¡©us ; 2050 } __©Œibu‹__ (( ·cked )); 2052  #HAL_EV_GATT_CLIENT_ENABLE_BATCHSCAN 0x¯ ) 2053  sh®_ev_g©t_þ›Á_’abË_b©chsÿn { 2054 št32_t maùiÚ ; 2055 št32_t mþ›Á_if ; 2056 št32_t m¡©us ; 2057 } __©Œibu‹__ (( ·cked )); 2059  #HAL_EV_GATT_CLIENT_BATCHSCAN_REPORTS 0xab ) 2060  sh®_ev_g©t_þ›Á_b©chsÿn_»pÜts { 2061 št32_t mþ›Á_if ; 2062 št32_t m¡©us ; 2063 št32_t mfÜm© ; 2064 št32_t mnum ; 2065 št32_t md©a_Ën ; 2066 ušt8_t md©a [0]; 2067 } __©Œibu‹__ (( ·cked )); 2069  #HAL_EV_GATT_CLIENT_BATCHSCAN_THRESHOLD 0xac ) 2070  sh®_ev_g©t_þ›Á_b©chsÿn_th»shÞd { 2071 št32_t mþ›Á_if ; 2072 } __©Œibu‹__ (( ·cked )); 2074  #HAL_EV_GATT_CLIENT_TRACK_ADV 0xad ) 2075  sh®_ev_g©t_þ›Á_Œack_adv { 2076 št32_t mþ›Á_if ; 2077 št32_t mfž‘r_šdex ; 2078 št32_t madd»ss_ty³ ; 2079 ušt8_t madd»ss [6]; 2080 št32_t m¡©e ; 2081 } __©Œibu‹__ (( ·cked )); 2083  #HAL_EV_GATT_SERVER_INDICATION_SENT 0x« ) 2084  sh®_ev_g©t_£rv”_šdiÿtiÚ_£Á { 2085 št32_t mcÚn_id ; 2086 št32_t m¡©us ; 2087 } __©Œibu‹__ (( ·cked )); 2089  #HAL_EV_GATT_SERVER_CONGESTION 0xaf ) 2090  sh®_ev_g©t_£rv”_cÚge¡iÚ { 2091 št32_t mcÚn_id ; 2092 ušt8_t mcÚge¡ed ; 2093 } __©Œibu‹__ (( ·cked )); 2095  #HAL_GATT_PERMISSION_READ 0x0001 ) 2096  #HAL_GATT_PERMISSION_READ_ENCRYPTED 0x0002 ) 2097  #HAL_GATT_PERMISSION_READ_ENCRYPTED_MITM 0x0004 ) 2098  #HAL_GATT_PERMISSION_WRITE 0x0010 ) 2099  #HAL_GATT_PERMISSION_WRITE_ENCRYPTED 0x0020 ) 2100  #HAL_GATT_PERMISSION_WRITE_ENCRYPTED_MITM 0x0040 ) 2101  #HAL_GATT_PERMISSION_WRITE_SIGNED 0x0080 ) 2102  #HAL_GATT_PERMISSION_WRITE_SIGNED_MITM 0x0100 ) 2104  #HAL_GATT_AUTHENTICATION_NONE 0 ) 2105  #HAL_GATT_AUTHENTICATION_NO_MITM 1 ) 2106  #HAL_GATT_AUTHENTICATION_MITM 2 ) 2108  #HAL_HF_CLIENT_CONN_STATE_DISCONNECTED 0x00 ) 2109  #HAL_HF_CLIENT_CONN_STATE_CONNECTING 0x01 ) 2110  #HAL_HF_CLIENT_CONN_STATE_SLC_CONNECTED 0x02 ) 2111  #HAL_HF_CLIENT_CONN_STATE_DISCONNECTING 0x03 ) 2113  #HAL_HF_CLIENT_PEER_FEAT_3WAY 0x00000001 ) 2114  #HAL_HF_CLIENT_PEER_FEAT_ECNR 0x00000002 ) 2115  #HAL_HF_CLIENT_PEER_FEAT_VREC 0x00000004 ) 2116  #HAL_HF_CLIENT_PEER_FEAT_INBAND 0x00000008 ) 2117  #HAL_HF_CLIENT_PEER_FEAT_VTAG 0x00000010 ) 2118  #HAL_HF_CLIENT_PEER_FEAT_REJECT 0x00000020 ) 2119  #HAL_HF_CLIENT_PEER_FEAT_ECS 0x00000040 ) 2120  #HAL_HF_CLIENT_PEER_FEAT_ECC 0x00000080 ) 2121  #HAL_HF_CLIENT_PEER_FEAT_EXTERR 0x00000100 ) 2122  #HAL_HF_CLIENT_PEER_FEAT_CODEC 0x00000200 ) 2124  #HAL_HF_CLIENT_CHLD_FEAT_REL 0x00000001 ) 2125  #HAL_HF_CLIENT_CHLD_FEAT_REL_ACC 0x00000002 ) 2126  #HAL_HF_CLIENT_CHLD_FEAT_REL_X 0x00000004 ) 2127  #HAL_HF_CLIENT_CHLD_FEAT_HOLD_ACC 0x00000008 ) 2128  #HAL_HF_CLIENT_CHLD_FEAT_PRIV_X 0x00000010 ) 2129  #HAL_HF_CLIENT_CHLD_FEAT_MERGE 0x00000020 ) 2130  #HAL_HF_CLIENT_CHLD_FEAT_MERGE_DETACH 0x00000040 ) 2132  #HAL_EV_HF_CLIENT_CONN_STATE 0x81 ) 2133  sh®_ev_hf_þ›Á_cÚn_¡©e { 2134 ušt8_t m¡©e ; 2135 ušt32_t m³”_ã© ; 2136 ušt32_t mchld_ã© ; 2137 ušt8_t mbdaddr [6]; 2138 } __©Œibu‹__ (( ·cked )); 2140  #HAL_HF_CLIENT_AUDIO_STATE_DISCONNECTED 0x00 ) 2141  #HAL_HF_CLIENT_AUDIO_STATE_CONNECTING 0x01 ) 2142  #HAL_HF_CLIENT_AUDIO_STATE_CONNECTED 0x02 ) 2143  #HAL_HF_CLIENT_AUDIO_STATE_CONNECTED_MSBC 0x03 ) 2145  #HAL_EV_HF_CLIENT_AUDIO_STATE 0x82 ) 2146  sh®_ev_hf_þ›Á_audio_¡©e { 2147 ušt8_t m¡©e ; 2148 ušt8_t mbdaddr [6]; 2149 } __©Œibu‹__ (( ·cked )); 2151  #HAL_HF_CLIENT_VR_STOPPED 0x00 ) 2152  #HAL_HF_CLIENT_VR_STARTED 0x01 ) 2154  #HAL_EV_HF_CLIENT_VR_STATE 0x83 ) 2155  sh®_ev_hf_þ›Á_vr_¡©e { 2156 ušt8_t m¡©e ; 2157 } __©Œibu‹__ (( ·cked )); 2159  #HAL_HF_CLIENT_NET_NOT_AVAILABLE 0x00 ) 2160  #HAL_HF_CLIENT_NET_AVAILABLE 0x01 ) 2162  #HAL_EV_HF_CLIENT_NET_STATE 0x84 ) 2163  sh®_ev_hf_þ›Á_Ãt_¡©e { 2164 ušt8_t m¡©e ; 2165 } __©Œibu‹__ (( ·cked )); 2167  #HAL_HF_CLIENT_NET_ROAMING_TYPE_HOME 0x00 ) 2168  #HAL_HF_CLIENT_NET_ROAMING_TYPE_ROAMING 0x01 ) 2170  #HAL_EV_HF_CLIENT_NET_ROAMING_TYPE 0x85 ) 2171  sh®_ev_hf_þ›Á_Ãt_rßmšg_ty³ { 2172 ušt8_t m¡©e ; 2173 } __©Œibu‹__ (( ·cked )); 2175  #HAL_EV_HF_CLIENT_NET_SIGNAL_STRENGTH 0x86 ) 2176  sh®_ev_hf_þ›Á_Ãt_sigÇl_¡»ngth { 2177 ušt8_t msigÇl_¡»ngth ; 2178 } __©Œibu‹__ (( ·cked )); 2180  #HAL_EV_HF_CLIENT_BATTERY_LEVEL 0x87 ) 2181  sh®_ev_hf_þ›Á_b©‹ry_Ëv– { 2182 ušt8_t mb©‹ry_Ëv– ; 2183 } __©Œibu‹__ (( ·cked )); 2185  #HAL_EV_HF_CLIENT_OPERATOR_NAME 0x88 ) 2186  sh®_ev_hf_þ›Á_Ý”©Ü_Çme { 2187 ušt16_t mÇme_Ën ; 2188 ušt8_t mÇme [0]; 2189 } __©Œibu‹__ (( ·cked )); 2191  #HAL_HF_CLIENT_CALL_IND_NO_CALL_IN_PROGERSS 0x00 ) 2192  #HAL_HF_CLIENT_CALL_IND_CALL_IN_PROGERSS 0x01 ) 2194  #HAL_EV_HF_CLIENT_CALL_INDICATOR 0x89 ) 2195  sh®_ev_hf_þ›Á_ÿÎ_šdiÿtÜ { 2196 ušt8_t mÿÎ ; 2197 } __©Œibu‹__ (( ·cked )); 2199  #HAL_HF_CLIENT_CALL_SETUP_NONE 0x00 ) 2200  #HAL_HF_CLIENT_CALL_SETUP_INCOMING 0x01 ) 2201  #HAL_HF_CLIENT_CALL_SETUP_OUTGOING 0x02 ) 2202  #HAL_HF_CLIENT_CALL_SETUP_ALERTING 0x03 ) 2204  #HAL_EV_HF_CLIENT_CALL_SETUP_INDICATOR 0x8a ) 2205  sh®_ev_hf_þ›Á_ÿÎ_£tup_šdiÿtÜ { 2206 ušt8_t mÿÎ_£tup ; 2207 } __©Œibu‹__ (( ·cked )); 2209  #HAL_HF_CLIENT_CALL_HELD_IND_NONE 0x00 ) 2210  #HAL_HF_CLIENT_CALL_HELD_IND_HOLD_AND_ACTIVE 0x01 ) 2211  #HAL_HF_CLIENT_CALL_SETUP_IND_HOLD 0x02 ) 2213  #HAL_EV_HF_CLIENT_CALL_HELD_INDICATOR 0x8b ) 2214  sh®_ev_hf_þ›Á_ÿÎ_h–d_šdiÿtÜ { 2215 ušt8_t mÿÎ_h–d ; 2216 } __©Œibu‹__ (( ·cked )); 2218  #HAL_HF_CLIENT_RESP_AND_HOLD_STATUS_HELD 0x00 ) 2219  #HAL_HF_CLIENT_RESP_AND_HOLD_STATUS_ACCEPT 0x01 ) 2220  #HAL_HF_CLIENT_RESP_AND_HOLD_STATUS_REJECT 0x02 ) 2222  #HAL_EV_HF_CLIENT_RESPONSE_AND_HOLD_STATUS 0x8c ) 2223  sh®_ev_hf_þ›Á_»¥Ú£_ªd_hÞd_¡©us { 2224 ušt8_t m¡©us ; 2225 } __©Œibu‹__ (( ·cked )); 2227  #HAL_EV_HF_CLIENT_CALLING_LINE_IDENT 0x8d ) 2228  sh®_ev_hf_þ›Á_ÿΚg_lše_id’t { 2229 ušt16_t mnumb”_Ën ; 2230 ušt8_t mnumb” [0]; 2231 } __©Œibu‹__ (( ·cked )); 2233  #HAL_EV_HF_CLIENT_CALL_WAITING 0x8e ) 2234  sh®_ev_hf_þ›Á_ÿÎ_wa™šg { 2235 ušt16_t mnumb”_Ën ; 2236 ušt8_t mnumb” [0]; 2237 } __©Œibu‹__ (( ·cked )); 2239  #HAL_HF_CLIENT_DIRECTION_OUTGOING 0x00 ) 2240  #HAL_HF_CLIENT_DIRECTION_INCOMING 0x01 ) 2242  #HAL_HF_CLIENT_CALL_STATE_ACTIVE 0x00 ) 2243  #HAL_HF_CLIENT_CALL_STATE_HELD 0x01 ) 2244  #HAL_HF_CLIENT_CALL_STATE_DIALING 0x02 ) 2245  #HAL_HF_CLIENT_CALL_STATE_ALERTING 0x03 ) 2246  #HAL_HF_CLIENT_CALL_STATE_INCOMING 0x04 ) 2247  #HAL_HF_CLIENT_CALL_STATE_WAITING 0x05 ) 2248  #HAL_HF_CLIENT_CALL_STATE_HELD_BY_RESP_AND_HOLD 0x06 ) 2250  #HAL_EV_HF_CLIENT_CURRENT_CALL 0x8f ) 2251  sh®_ev_hf_þ›Á_cu¼’t_ÿÎ { 2252 ušt8_t mšdex ; 2253 ušt8_t mdœeùiÚ ; 2254 ušt8_t mÿÎ_¡©e ; 2255 ušt8_t mmuɬty ; 2256 ušt16_t mnumb”_Ën ; 2257 ušt8_t mnumb” [0]; 2258 } __©Œibu‹__ (( ·cked )); 2260  #HAL_EV_CLIENT_VOLUME_CHANGED 0x90 ) 2261  sh®_ev_hf_þ›Á_vÞume_chªged { 2262 ušt8_t mty³ ; 2263 ušt8_t mvÞume ; 2264 } __©Œibu‹__ (( ·cked )); 2266  #HAL_HF_CLIENT_CMD_COMP_OK 0x00 ) 2267  #HAL_HF_CLIENT_CMD_COMP_ERR 0x01 ) 2268  #HAL_HF_CLIENT_CMD_COMP_ERR_NO_CARRIER 0x02 ) 2269  #HAL_HF_CLIENT_CMD_COMP_ERR_BUSY 0x03 ) 2270  #HAL_HF_CLIENT_CMD_COMP_ERR_NO_ANSWER 0x04 ) 2271  #HAL_HF_CLIENT_CMD_COMP_ERR_DELAYED 0x05 ) 2272  #HAL_HF_CLIENT_CMD_COMP_ERR_BACKLISTED 0x06 ) 2273  #HAL_HF_CLIENT_CMD_COMP_ERR_CME 0x07 ) 2275  #HAL_EV_CLIENT_COMMAND_COMPLETE 0x91 ) 2276  sh®_ev_hf_þ›Á_commªd_com¶‘e { 2277 ušt8_t mty³ ; 2278 ušt8_t mcme ; 2279 } __©Œibu‹__ (( ·cked )); 2281  #HAL_HF_CLIENT_SUBSCR_TYPE_UNKNOWN 0x00 ) 2282  #HAL_HF_CLIENT_SUBSCR_TYPE_VOICE 0x01 ) 2283  #HAL_HF_CLIENT_SUBSCR_TYPE_FAX 0x02 ) 2285  #HAL_EV_CLIENT_SUBSCRIBER_SERVICE_INFO 0x92 ) 2286  sh®_ev_hf_þ›Á_subsüib”_£rviû_šfo { 2287 ušt8_t mty³ ; 2288 ušt16_t mÇme_Ën ; 2289 ušt8_t mÇme [0]; 2290 } __©Œibu‹__ (( ·cked )); 2292  #HAL_HF_CLIENT_INBAND_RINGTONE_NOT_PROVIDED 0x00 ) 2293  #HAL_HF_CLIENT_INBAND_RINGTONE_PROVIDED 0x01 ) 2295  #HAL_EV_CLIENT_INBAND_SETTINGS 0x93 ) 2296  sh®_ev_hf_þ›Á_šbªd_£‰šgs { 2297 ušt8_t m¡©e ; 2298 } __©Œibu‹__ (( ·cked )); 2300  #HAL_EV_CLIENT_LAST_VOICE_CALL_TAG_NUM 0x94 ) 2301  sh®_ev_hf_þ›Á_Ï¡_void_ÿÎ_g_num { 2302 ušt16_t mnumb”_Ën ; 2303 ušt8_t mnumb” [0]; 2304 } __©Œibu‹__ (( ·cked )); 2306  #HAL_EV_CLIENT_RING_INDICATION 0x95 ) 2308  #HAL_EV_MAP_CLIENT_REMOTE_MAS_INSTANCES 0x81 ) 2309  sh®_m­_þ›Á_mas_š¡ªû { 2310 št32_t mid ; 2311 št32_t msú ; 2312 št32_t mmsg_ty³s ; 2313 št32_t mÇme_Ën ; 2314 ušt8_t mÇme [0]; 2315 } __©Œibu‹__ (( ·cked )); 2317  sh®_ev_m­_þ›Á_»mÙe_mas_š¡ªûs { 2318 št8_t m¡©us ; 2319 ušt8_t mbdaddr [6]; 2320 št32_t mnum_š¡ªûs ; 2321  h®_m­_þ›Á_mas_š¡ªû mš¡ªûs [0]; 2322 } __©Œibu‹__ (( ·cked )); @android/hal-pan.c 18  ~<¡dboÞ.h > 19  ~<¡ddef.h > 20  ~<¡ršg.h > 22  ~"h®-utžs.h " 23  ~"h®-log.h " 24  ~"h®.h " 25  ~"h®-msg.h " 26  ~"h®-c.h " 28 cÚ¡ bª_ÿÎbacks_t * gcbs = NULL ; 30  boÞ $š‹rçû_»ady () 32  cbs !ð NULL ; 33 } } 35  $hªdË_cÚn_¡©e (* buf , ušt16_t Ën ,  fd ) 37  h®_ev_·n_cÚn_¡©e * ev = buf ; 39 ià( cbs -> cÚÃùiÚ_¡©e_cb ) 40 cbs -> `cÚÃùiÚ_¡©e_cb ( ev -> ¡©e ,ƒv-> ¡©us , 41 ( bt_bdaddr_t *è ev -> bdaddr , 42 ev -> loÿl_rÞe ,ƒv-> »mÙe_rÞe ); 43 } } 45  $hªdË_ù¾_¡©e (* buf , ušt16_t Ën ,  fd ) 47  h®_ev_·n_ù¾_¡©e * ev = buf ; 49 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 50 ià( cbs -> cÚŒÞ_¡©e_cb ) 51 cbs -> `cÚŒÞ_¡©e_cb ( ev -> ¡©e ,ƒv-> loÿl_rÞe ,ƒv-> ¡©us , 52 (*) ev -> Çme ); 64 ià( cbs -> cÚŒÞ_¡©e_cb ) 65 cbs -> `cÚŒÞ_¡©e_cb ( ev -> loÿl_rÞe ,ƒv-> ¡©e ,ƒv-> ¡©us , 66 (*) ev -> Çme ); 68 } } 74 cÚ¡  h®_c_hªdËr gev_hªdËrs [] = { 76 { hªdË_ù¾_¡©e , çl£ , ( h®_ev_·n_ù¾_¡©e ) }, 78 { hªdË_cÚn_¡©e , çl£ , ( h®_ev_·n_cÚn_¡©e ) }, 81  bt_¡©us_t $·n_’abË ( loÿl_rÞe ) 83  h®_cmd_·n_’abË cmd ; 85 `DBG (""); 87 ià(! `š‹rçû_»ady ()) 88  BT_STATUS_NOT_READY ; 90 cmd . loÿl_rÞe =†ocal_role; 92  `h®_c_cmd ( HAL_SERVICE_ID_PAN , HAL_OP_PAN_ENABLE , 93 ( cmd ), &cmd, NULL , NULL, NULL); 94 } } 96  $·n_g‘_loÿl_rÞe () 98  h®_r¥_·n_g‘_rÞe r¥ ; 99 size_t Ën = ( r¥ ); 100 bt_¡©us_t ¡©us ; 102 `DBG (""); 104 ià(! `š‹rçû_»ady ()) 105  BTPAN_ROLE_NONE ; 107 ¡©us = `h®_c_cmd ( HAL_SERVICE_ID_PAN , HAL_OP_PAN_GET_ROLE , 0, NULL , 108 & Ën , & r¥ , NULL ); 109 ià( ¡©us !ð BT_STATUS_SUCCESS ) 110  BTPAN_ROLE_NONE ; 112  r¥ . loÿl_rÞe ; 113 } } 115  bt_¡©us_t $·n_cÚÃù (cÚ¡ bt_bdaddr_t * bd_addr ,  loÿl_rÞe , 116  »mÙe_rÞe ) 118  h®_cmd_·n_cÚÃù cmd ; 120 `DBG (""); 122 ià(! `š‹rçû_»ady ()) 123  BT_STATUS_NOT_READY ; 125 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 126 cmd . loÿl_rÞe =†ocal_role; 127 cmd . »mÙe_rÞe =„emote_role; 129  `h®_c_cmd ( HAL_SERVICE_ID_PAN , HAL_OP_PAN_CONNECT , 130 ( cmd ), &cmd, NULL , NULL, NULL); 131 } } 133  bt_¡©us_t $·n_discÚÃù (cÚ¡ bt_bdaddr_t * bd_addr ) 135  h®_cmd_·n_discÚÃù cmd ; 137 `DBG (""); 139 ià(! `š‹rçû_»ady ()) 140  BT_STATUS_NOT_READY ; 142 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 144  `h®_c_cmd ( HAL_SERVICE_ID_PAN , HAL_OP_PAN_DISCONNECT , 145 ( cmd ), &cmd, NULL , NULL, NULL); 146 } } 148  bt_¡©us_t $·n_š™ (cÚ¡ bª_ÿÎbacks_t * ÿÎbacks ) 150  h®_cmd_»gi¡”_moduË cmd ; 151  »t ; 153 `DBG (""); 155 ià( `š‹rçû_»ady ()) 156  BT_STATUS_DONE ; 158 cbs = ÿÎbacks ; 160 `h®_c_»gi¡” ( HAL_SERVICE_ID_PAN , ev_hªdËrs , 161 ( ev_hªdËrs )/(ev_handlers[0])); 163 cmd . £rviû_id = HAL_SERVICE_ID_PAN ; 164 cmd . mode = HAL_MODE_DEFAULT ; 165 cmd . max_þ›Ás = 1; 167 »t = `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_REGISTER_MODULE , 168 ( cmd ), &cmd, NULL , NULL, NULL); 170 ià( »t !ð BT_STATUS_SUCCESS ) { 171 cbs = NULL ; 172 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_PAN ); 175  »t ; 176 } } 178  $·n_þ—nup () 180  h®_cmd_uÄegi¡”_moduË cmd ; 182 `DBG (""); 184 ià(! `š‹rçû_»ady ()) 187 cmd . £rviû_id = HAL_SERVICE_ID_PAN ; 189 `h®_c_cmd ( HAL_SERVICE_ID_CORE , HAL_OP_UNREGISTER_MODULE , 190 ( cmd ), &cmd, NULL , NULL, NULL); 192 `h®_c_uÄegi¡” ( HAL_SERVICE_ID_PAN ); 194 cbs = NULL ; 195 } } 197  bª_š‹rçû_t g·n_if = { 198 . size = ( ·n_if ), 199 . gš™ = ·n_š™ , 200 . g’abË = ·n_’abË , 201 . gg‘_loÿl_rÞe = ·n_g‘_loÿl_rÞe , 202 . gcÚÃù = ·n_cÚÃù , 203 . gdiscÚÃù = ·n_discÚÃù , 204 . gþ—nup = ·n_þ—nup 207 bª_š‹rçû_t * $bt_g‘_·n_š‹rçû () 209  & ·n_if ; 210 } } @android/hal-sco.c 18  ~<”ºo.h > 19  ~<±h»ad.h > 20  ~ 21  ~<¡dio.h > 22  ~<¡dlib.h > 23  ~<¡ršg.h > 24  ~ 25  ~ 26  ~ 28  ~ 29  ~ 30  ~ 32  ~"h®-utžs.h " 33  ~"sco-msg.h " 34  ~"c-commÚ.h " 35  ~"h®-log.h " 36  ~"h®.h " 38  #AUDIO_STREAM_DEFAULT_RATE 44100 ) 39  #AUDIO_STREAM_SCO_RATE 8000 ) 40  #AUDIO_STREAM_DEFAULT_FORMAT AUDIO_FORMAT_PCM_16_BIT ) 42  #OUT_BUFFER_SIZE 2560 ) 43  #OUT_STREAM_FRAMES 2560 ) 44  #IN_STREAM_FRAMES 5292 ) 46  #SOCKET_POLL_TIMEOUT_MS 500 ) 48  gli¡’_sk = -1; 49  gc_sk = -1; 51  gsco_fd = -1; 52  ušt16_t gsco_mtu = 0; 53  ±h»ad_mu‹x_t gsco_mu‹x = PTHREAD_MUTEX_INITIALIZER ; 55  ±h»ad_t gc_th = 0; 56  ±h»ad_mu‹x_t gsk_mu‹x = PTHREAD_MUTEX_INITIALIZER ; 58  sco_¡»am_š * gsco_¡»am_š = NULL ; 59  sco_¡»am_out * gsco_¡»am_out = NULL ; 61  ssco_audio_cÚfig { 62 ušt32_t m¿‹ ; 63 ušt32_t mchªÃls ; 64 ušt32_t mäame_num ; 65 audio_fÜm©_t mfÜm© ; 68  ssco_¡»am_out { 69  audio_¡»am_out m¡»am ; 71  sco_audio_cÚfig mcfg ; 73 ušt8_t * mdownmix_buf ; 74 ušt8_t * mÿche ; 75 size_t mÿche_Ën ; 77 size_t m§m¶es ; 78  time¥ec m¡¬t ; 80  »§m¶”_™ã * m»§m¶” ; 81 št16_t * m»§m¶e_buf ; 82 ušt32_t m»§m¶e_äame_num ; 84 bt_bdaddr_t mbd_addr ; 87  $sco_þo£_sock‘ () 89 `DBG ("scØfd %d", sco_fd ); 91 ià( sco_fd < 0) 94 `shutdown ( sco_fd , SHUT_RDWR ); 95 `þo£ ( sco_fd ); 96 sco_fd = -1; 97 } } 99  ssco_¡»am_š { 100  audio_¡»am_š m¡»am ; 102  sco_audio_cÚfig mcfg ; 104  »§m¶”_™ã * m»§m¶” ; 105 št16_t * m»§m¶e_buf ; 106 ušt32_t m»§m¶e_äame_num ; 108 bt_bdaddr_t mbd_addr ; 111  ssco_dev { 112  audio_hw_deviû mdev ; 113  sco_¡»am_out * mout ; 114  sco_¡»am_š * mš ; 122  size_t $g‘_»§m¶e_äame_num ( ušt32_t sco_¿‹ , ušt32_ˆ ¿‹ , 123 size_t äame_num , boÞ ouut ) 125 size_t »§m¶e_äames_num = äame_num * sco_¿‹ / ¿‹ + ouut ; 127 `DBG ("resampler: sco_rate %d frame_num %zd„ate %d„esample frames %zd", 128 sco_¿‹ , äame_num , ¿‹ , »§m¶e_äames_num ); 130  »§m¶e_äames_num ; 131 } } 135  $sco_c_cmd ( ušt8_t £rviû_id , ušt8_ˆ Ýcode , ušt16_t Ën , 136 * ·¿m , size_t * r¥_Ën , * r¥ , * fd ) 138 ssize_t »t ; 139  msghdr msg ; 140  iovec iv [2]; 141  c_hdr cmd ; 142  cmsgbuf [ `CMSG_SPACE (())]; 143  c_¡©us s ; 144 size_t s_Ën = ( s ); 146 `±h»ad_mu‹x_lock (& sk_mu‹x ); 148 ià( c_sk < 0) { 149 `”rÜ ("sco: Invalid cmd socket…assedo sco_ipc_cmd"); 150  çžed ; 153 ià(! r¥ || ! r¥_Ën ) { 154 `mem£t (& s , 0, s_Ën ); 155 r¥_Ën = & s_Ën ; 156 r¥ = & s ; 159 `mem£t (& msg , 0, (msg)); 160 `mem£t (& cmd , 0, (cmd)); 162 cmd . £rviû_id = service_id; 163 cmd . Ýcode = opcode; 164 cmd . Ën =†en; 166 iv [0]. iov_ba£ = & cmd ; 167 iv [0]. iov_Ën = ( cmd ); 169 iv [1]. iov_ba£ = ·¿m ; 170 iv [1]. iov_Ën = Ën ; 172 msg . msg_iov = iv ; 173 msg . msg_iovËn = 2; 175 »t = `£ndmsg ( c_sk , & msg , 0); 176 ià( »t < 0) { 177 `”rÜ ("sco: S’dšg commªd fažed:%s", `¡»¼Ü ( ”ºo )); 178  çžed ; 182 ià( »t == 0) { 183 `”rÜ ("sco: Command socket closed"); 184  çžed ; 187 `mem£t (& msg , 0, (msg)); 188 `mem£t (& cmd , 0, (cmd)); 190 iv [0]. iov_ba£ = & cmd ; 191 iv [0]. iov_Ën = ( cmd ); 193 iv [1]. iov_ba£ = r¥ ; 194 iv [1]. iov_Ën = * r¥_Ën ; 196 msg . msg_iov = iv ; 197 msg . msg_iovËn = 2; 199 ià( fd ) { 200 `mem£t ( cmsgbuf , 0, (cmsgbuf)); 201 msg . msg_cÚŒÞ = cmsgbuf ; 202 msg . msg_cÚŒÞËn = ( cmsgbuf ); 205 »t = `»cvmsg ( c_sk , & msg , 0); 206 ià( »t < 0) { 207 `”rÜ ("sco: Receiving command„esponse failed:%s", 208 `¡»¼Ü ( ”ºo )); 209  çžed ; 212 ià( »t < ( ssize_t è( cmd )) { 213 `”rÜ ("sco: ToØsm®È»¥Ú£„eûived(%zd by‹s)", »t ); 214  çžed ; 217 ià( cmd . £rviû_id != service_id) { 218 `”rÜ ("sco: Inv®id s”viû id (%u v %u)", cmd . £rviû_id , 219 £rviû_id ); 220  çžed ; 223 ià( »t !ð( ssize_t è(( cmd è+ cmd. Ën )) { 224 `”rÜ ("sco: M®fÜmed„e¥Ú£„eûived(%zd by‹s)", »t ); 225  çžed ; 228 ià( cmd . Ýcode !ðÝcod&& cmd.Ýcod!ð SCO_OP_STATUS ) { 229 `”rÜ ("sco: Invalid opcode„eceived (%u vs %u)", 230 cmd . Ýcode , opcode); 231  çžed ; 234 ià( cmd . Ýcode =ð SCO_OP_STATUS ) { 235  c_¡©us * s = r¥ ; 237 ià((* s è!ð cmd . Ën ) { 238 `”rÜ ("sco: Invalid status†ength"); 239  çžed ; 242 ià( s -> code =ð SCO_STATUS_SUCCESS ) { 243 `”rÜ ("sco: Invalid success status„esponse"); 244  çžed ; 247 `±h»ad_mu‹x_uÆock (& sk_mu‹x ); 249  s -> code ; 252 `±h»ad_mu‹x_uÆock (& sk_mu‹x ); 255 ià( fd ) { 256  cmsghdr * cmsg ; 258 * fd = -1; 260  cmsg = `CMSG_FIRSTHDR (& msg ); cmsg; 261 cmsg = `CMSG_NXTHDR (& msg , cmsg)) { 262 ià( cmsg -> cmsg_Ëv– =ð SOL_SOCKET 263 && cmsg -> cmsg_ty³ =ð SCM_RIGHTS ) { 264 `memýy ( fd , `CMSG_DATA ( cmsg ), ()); 269 ià(* fd < 0) 270  çžed ; 273 * r¥_Ën = cmd . Ën ; 275  SCO_STATUS_SUCCESS ; 277 çžed : 279 `shutdown ( c_sk , SHUT_RDWR ); 280 `±h»ad_mu‹x_uÆock (& sk_mu‹x ); 282  SCO_STATUS_FAILED ; 283 } } 285  $c_g‘_sco_fd ( bt_bdaddr_t * bd_addr ) 287  »t = SCO_STATUS_SUCCESS ; 289 `±h»ad_mu‹x_lock (& sco_mu‹x ); 291 ià( sco_fd < 0) { 292  sco_cmd_g‘_fd cmd ; 293  sco_r¥_g‘_fd r¥ ; 294 size_t r¥_Ën = ( r¥ ); 296 `DBG ("Getting SCO fd"); 298 `memýy ( cmd . bdaddr , bd_addr , (cmd.bdaddr)); 300 »t = `sco_c_cmd ( SCO_SERVICE_ID , SCO_OP_GET_FD , ( cmd ), 301 & cmd , & r¥_Ën , & r¥ , & sco_fd ); 304 sco_mtu = 48; 307 `±h»ad_mu‹x_uÆock (& sco_mu‹x ); 309  »t ; 310 } } 314  $downmix_to_mÚo ( sco_¡»am_out * out , cÚ¡ ušt8_t * bufãr , 315 size_t äame_num ) 317 cÚ¡ št16_t * šput = (cÚ¡ *è bufãr ; 318 št16_t * ouut = (*è out -> downmix_buf ; 319 size_t i ; 321  i = 0; i < äame_num ; i++) { 322 št16_t l = `g‘_Ë16 (& šput [ i * 2]); 323 št16_t r = `g‘_Ë16 (& šput [ i * 2 + 1]); 325 `put_Ë16 (( l + r è/ 2, & ouut [ i ]); 327 } } 329  ušt64_t $time¥ec_diff_us ( time¥ec * a , time¥eø* b ) 331  time¥ec »s ; 333 »s . tv_£c = a ->tv_£ø- b ->tv_sec; 334 »s . tv_n£c = a ->tv_n£ø- b ->tv_nsec; 336 ià( »s . tv_n£c < 0) { 337 »s . tv_£c --; 338 »s . tv_n£c += 1000000000ll; 341  »s . tv_£c * 1000000Î +„es. tv_n£c / 1000ll; 342 } } 344  boÞ $wr™e_d©a ( sco_¡»am_out * out , cÚ¡ ušt8_t * bufãr , 345 size_t by‹s ) 347  pÞlfd pfd ; 348 size_t Ën , wr™‹n = 0; 349  »t ; 350 ušt8_t * p ; 351 ušt64_t audio_£Á_us , audio_·s£d_us ; 353 pfd . fd = sco_fd ; 354 pfd . ev’ts = POLLOUT | POLLHUP | POLLNVAL ; 356  by‹s > wr™‹n ) { 357  time¥ec now ; 360 ià( `pÞl (& pfd , 1, SOCKET_POLL_TIMEOUT_MS ) == 0) { 361 `DBG ("timeouˆfd %d", sco_fd ); 362  çl£ ; 365 ià( pfd . »v’ts & ( POLLHUP | POLLNVAL )) { 366 `”rÜ ("”rÜ fd %d,ƒv’t 0x%x", sco_fd , pfd . »v’ts ); 367  çl£ ; 370 Ën = by‹s - wr™‹n > sco_mtu ? sco_mtu : bytes - written; 372 `þock_g‘time ( CLOCK_REALTIME , & now ); 374 ià(! out -> §m¶es ) 375 `memýy (& out -> ¡¬t , & now , (out->start)); 377 audio_£Á_us = out -> §m¶es * 1000000Î / AUDIO_STREAM_SCO_RATE ; 378 audio_·s£d_us = `time¥ec_diff_us (& now , & out -> ¡¬t ); 379 ià((è( audio_£Á_us - audio_·s£d_us ) > 1500) { 380  time¥ec timeout = {0, 381 ( audio_£Á_us - 382 audio_·s£d_us ) * 1000}; 383 `DBG ("Sleeping for %d ms", 384 (è( audio_£Á_us - audio_·s£d_us )); 385 `Çno¦“p (& timeout , NULL ); 386 } ià(()( audio_·s£d_us - audio_£Á_us ) > 50000) { 387 `DBG ("\n\nResync\n\n"); 388 out -> §m¶es = 0; 389 `memýy (& out -> ¡¬t , & now , (out->start)); 392 ià( out -> ÿche_Ën ) { 393 `DBG ("Fœ¡…ack‘ cache_ËÀ%zd", out -> ÿche_Ën ); 394 `memýy ( out -> ÿche + out-> ÿche_Ën , bufãr , 395 sco_mtu - out -> ÿche_Ën ); 396 p = out -> ÿche ; 398 ià( by‹s - wr™‹n >ð sco_mtu ) 399 p = (*è bufãr + wr™‹n ; 401 `memýy ( out -> ÿche , bufãr + wr™‹n , 402 by‹s - wr™‹n ); 403 out -> ÿche_Ën = by‹s - wr™‹n ; 404 `DBG ("Last…acket, cache %zd bytes", 405 by‹s - wr™‹n ); 406 wr™‹n +ð by‹s - written; 411 »t = `wr™e ( sco_fd , p , Ën ); 412 ià( »t > 0) { 413 ià( out -> ÿche_Ën ) { 414 wr™‹n = sco_mtu - out -> ÿche_Ën ; 415 out -> ÿche_Ën = 0; 417 wr™‹n +ð »t ; 419 out -> §m¶es +ð »t / 2; 421 `DBG ("written %d samples %zdotal %zd bytes", 422 »t , out -> §m¶es , wr™‹n ); 426 ià( ”ºo =ð EAGAIN ) { 427 »t = ”ºo ; 428 `w¬n ("wr™çžed (%d)", »t ); 432 ià( ”ºo !ð EINTR ) { 433 »t = ”ºo ; 434 `”rÜ ("wr™çžed (%dèfd %d by‹ %zd", »t , sco_fd , 435 by‹s ); 436  çl£ ; 440 `DBG ("wr™‹À%zd by‹s", by‹s ); 442  Œue ; 443 } } 445  ssize_t $out_wr™e ( audio_¡»am_out * ¡»am , cÚ¡ * bufãr , 446 size_t by‹s ) 448  sco_¡»am_out * out = (sco_¡»am_ouˆ*è ¡»am ; 449 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 450 size_t äame_num = by‹s / `audio_¡»am_out_äame_size ( ¡»am ); 452 size_t äame_num = by‹s / `audio_¡»am_äame_size (& out -> ¡»am . commÚ ); 454 size_t ouut_äame_num = äame_num ; 455 * £nd_buf = out -> downmix_buf ; 456 size_t tÙ® ; 458 `DBG ("wr™tØfd %d by‹ %zu", sco_fd , by‹s ); 460 ià( `c_g‘_sco_fd (& out -> bd_addr è!ð SCO_STATUS_SUCCESS ) 463 ià(! out -> downmix_buf ) { 464 `”rÜ ("sco: downmix buffer‚ot initialized"); 468 `downmix_to_mÚo ( out , bufãr , äame_num ); 470 ià( out -> »§m¶” ) { 471  »t ; 474 ouut_äame_num = out -> »§m¶e_äame_num ; 476 »t = out -> »§m¶” -> `»§m¶e_äom_šput (out->resampler, 477 £nd_buf , 478 & äame_num , 479 out -> »§m¶e_buf , 480 & ouut_äame_num ); 481 ià( »t ) { 482 `”rÜ ("Failedo„esample frames: %zd input %zd (%s)", 483 äame_num , ouut_äame_num , `¡»¼Ü ( »t )); 487 £nd_buf = out -> »§m¶e_buf ; 489 `DBG ("Resampled: frame_num %zd, output_frame_num %zd", 490 äame_num , ouut_äame_num ); 493 tÙ® = ouut_äame_num * ( št16_t ) * 1; 495 `DBG ("tÙ® %zd", tÙ® ); 497 ià(! `wr™e_d©a ( out , £nd_buf , tÙ® )) 500  by‹s ; 501 } } 503  ušt32_t $out_g‘_§m¶e_¿‹ (cÚ¡  audio_¡»am * ¡»am ) 505  sco_¡»am_out * out = (sco_¡»am_ouˆ*è ¡»am ; 507 `DBG ("¿‹ %u", out -> cfg . ¿‹ ); 509  out -> cfg . ¿‹ ; 510 } } 512  $out_£t_§m¶e_¿‹ ( audio_¡»am * ¡»am , ušt32_t ¿‹ ) 514 `DBG ("¿‹ %u", ¿‹ ); 517 } } 519  size_t $out_g‘_bufãr_size (cÚ¡  audio_¡»am * ¡»am ) 521  sco_¡»am_out * out = (sco_¡»am_ouˆ*è ¡»am ; 522 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 523 size_t size = `audio_¡»am_out_äame_size (& out -> ¡»am ) * 524 out -> cfg . äame_num ; 526 size_t size = `audio_¡»am_äame_size (& out -> ¡»am . commÚ ) * 527 out -> cfg . äame_num ; 531 ià( out -> cfg . ¿‹ =ð AUDIO_STREAM_SCO_RATE ) 532 size = 576 * 2; 534 `DBG ("buàsiz%zd", size ); 536  size ; 537 } } 539  ušt32_t $out_g‘_chªÃls (cÚ¡  audio_¡»am * ¡»am ) 541  sco_¡»am_out * out = (sco_¡»am_ouˆ*è ¡»am ; 543 `DBG ("chªÃl num: %u", `pÝcouÁ ( out -> cfg . chªÃls )); 545  out -> cfg . chªÃls ; 546 } } 548  audio_fÜm©_t $out_g‘_fÜm© (cÚ¡  audio_¡»am * ¡»am ) 550  sco_¡»am_out * out = (sco_¡»am_ouˆ*è ¡»am ; 552 `DBG ("fÜm©: %u", out -> cfg . fÜm© ); 554  out -> cfg . fÜm© ; 555 } } 557  $out_£t_fÜm© ( audio_¡»am * ¡»am , audio_fÜm©_t fÜm© ) 559 `DBG (""); 561  - ENOSYS ; 562 } } 564  $out_¡ªdby ( audio_¡»am * ¡»am ) 566 `DBG (""); 569 } } 571  $out_dump (cÚ¡  audio_¡»am * ¡»am ,  fd ) 573 `DBG (""); 575  - ENOSYS ; 576 } } 578  $out_£t_·¿m‘”s ( audio_¡»am * ¡»am , cÚ¡ * kv·œs ) 580 `DBG ("%s", kv·œs ); 583 } } 585 * $out_g‘_·¿m‘”s (cÚ¡  audio_¡»am * ¡»am , 586 cÚ¡ * keys ) 588 `DBG (""); 590  `¡rdup (""); 591 } } 593  ušt32_t $out_g‘_Ï‹ncy (cÚ¡  audio_¡»am_out * ¡»am ) 595 `DBG (""); 598 } } 600  $out_£t_vÞume ( audio_¡»am_out * ¡»am ,  Ëá , 601  right ) 603 `DBG (""); 605  - ENOSYS ; 606 } } 608  $out_g‘_»nd”_pos™iÚ (cÚ¡  audio_¡»am_out * ¡»am , 609 ušt32_t * d¥_äames ) 611 `DBG (""); 613  - ENOSYS ; 614 } } 616  $out_add_audio_efãù (cÚ¡  audio_¡»am * ¡»am , 617 efãù_hªdË_t efãù ) 619 `DBG (""); 621  - ENOSYS ; 622 } } 624  $out_»move_audio_efãù (cÚ¡  audio_¡»am * ¡»am , 625 efãù_hªdË_t efãù ) 627 `DBG (""); 629  - ENOSYS ; 630 } } 632  $sco_Ý’_ouut_¡»am_»® ( audio_hw_deviû * dev , 633 audio_io_hªdË_t hªdË , 634 audio_deviûs_t deviûs , 635 audio_ouut_æags_t æags , 636  audio_cÚfig * cÚfig , 637  audio_¡»am_out ** ¡»am_out , 638 cÚ¡ * add»ss ) 640  sco_dev * adev = (sco_dev *è dev ; 641  sco_¡»am_out * out ; 642  chª_num , »t ; 643 size_t »§m¶e_size ; 645 `DBG ("cÚfig %°deviû fÏg 0x%02x", cÚfig , deviûs ); 647 ià( sco_¡»am_out ) { 648 `DBG ("stream_out‡lready open"); 649  - EIO ; 652 out = `ÿÎoc (1, ( sco_¡»am_out )); 653 ià(! out ) 654  - ENOMEM ; 656 `DBG ("¡»am %°scØfd %d mtu %u", out , sco_fd , sco_mtu ); 658 out -> ¡»am . commÚ . g‘_§m¶e_¿‹ = out_g‘_§m¶e_¿‹ ; 659 out -> ¡»am . commÚ . £t_§m¶e_¿‹ = out_£t_§m¶e_¿‹ ; 660 out -> ¡»am . commÚ . g‘_bufãr_size = out_g‘_bufãr_size ; 661 out -> ¡»am . commÚ . g‘_chªÃls = out_g‘_chªÃls ; 662 out -> ¡»am . commÚ . g‘_fÜm© = out_g‘_fÜm© ; 663 out -> ¡»am . commÚ . £t_fÜm© = out_£t_fÜm© ; 664 out -> ¡»am . commÚ . ¡ªdby = out_¡ªdby ; 665 out -> ¡»am . commÚ . dump = out_dump ; 666 out -> ¡»am . commÚ . £t_·¿m‘”s = out_£t_·¿m‘”s ; 667 out -> ¡»am . commÚ . g‘_·¿m‘”s = out_g‘_·¿m‘”s ; 668 out -> ¡»am . commÚ . add_audio_efãù = out_add_audio_efãù ; 669 out -> ¡»am . commÚ . »move_audio_efãù = out_»move_audio_efãù ; 670 out -> ¡»am . g‘_Ï‹ncy = out_g‘_Ï‹ncy ; 671 out -> ¡»am . £t_vÞume = out_£t_vÞume ; 672 out -> ¡»am . wr™e = out_wr™e ; 673 out -> ¡»am . g‘_»nd”_pos™iÚ = out_g‘_»nd”_pos™iÚ ; 675 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 676 ià( add»ss ) { 677 `DBG ("add»s %s", add»ss ); 679 `¡r2bt_bdaddr_t ( add»ss , & out -> bd_addr ); 683 ià( `c_g‘_sco_fd (& out -> bd_addr è!ð SCO_STATUS_SUCCESS ) 684 `DBG ("SCO is‚ot connected yet; get fd on write()"); 686 ià( cÚfig ) { 687 `DBG ("config:„ate %u chan mask %x format %d offload %p", 688 cÚfig -> §m¶e_¿‹ , cÚfig-> chªÃl_mask , 689 cÚfig -> fÜm© , &cÚfig-> ofæßd_šfo ); 691 out -> cfg . fÜm© = cÚfig ->format; 692 out -> cfg . chªÃls = cÚfig -> chªÃl_mask ; 693 out -> cfg . ¿‹ = cÚfig -> §m¶e_¿‹ ; 695 out -> cfg . fÜm© = AUDIO_STREAM_DEFAULT_FORMAT ; 696 out -> cfg . chªÃls = AUDIO_CHANNEL_OUT_STEREO ; 697 out -> cfg . ¿‹ = AUDIO_STREAM_DEFAULT_RATE ; 700 out -> cfg . äame_num = OUT_STREAM_FRAMES ; 702 out -> downmix_buf = `m®loc ( `out_g‘_bufãr_size (&out-> ¡»am . commÚ )); 703 ià(! out -> downmix_buf ) { 704 `ä“ ( out ); 705  - ENOMEM ; 708 out -> ÿche = `m®loc ( sco_mtu ); 709 ià(! out -> ÿche ) { 710 `ä“ ( out -> downmix_buf ); 711 `ä“ ( out ); 712  - ENOMEM ; 715 ià( out -> cfg . ¿‹ =ð AUDIO_STREAM_SCO_RATE ) 716  sk_»§m¶” ; 719 chª_num = 1; 721 »t = `ü—‹_»§m¶” ( out -> cfg . ¿‹ , AUDIO_STREAM_SCO_RATE , chª_num , 722 RESAMPLER_QUALITY_DEFAULT , NULL , 723 & out -> »§m¶” ); 724 ià( »t ) { 725 `”rÜ ("FažedØü—‹„e§m¶” (%s)", `¡»¼Ü (- »t )); 726  çžed ; 729 out -> »§m¶e_äame_num = `g‘_»§m¶e_äame_num ( AUDIO_STREAM_SCO_RATE , 730 out -> cfg . ¿‹ , 731 out -> cfg . äame_num , 1); 733 ià(! out -> »§m¶e_äame_num ) { 734 `”rÜ ("frame‚um isoo smallo„esample, discard it"); 735  çžed ; 738 »§m¶e_size = ( št16_t è* chª_num * out -> »§m¶e_äame_num ; 740 out -> »§m¶e_buf = `m®loc ( »§m¶e_size ); 741 ià(! out -> »§m¶e_buf ) { 742 `”rÜ ("failedo‡llocate„esample buffer for %u frames", 743 out -> »§m¶e_äame_num ); 744  çžed ; 747 `DBG ("Resampler: input %d output %d chan %d frames %u size %zd", 748 out -> cfg . ¿‹ , AUDIO_STREAM_SCO_RATE , chª_num , 749 out -> »§m¶e_äame_num , »§m¶e_size ); 750 sk_»§m¶” : 751 * ¡»am_out = & out -> ¡»am ; 752 adev -> out = out; 753 sco_¡»am_out = out ; 756 çžed : 757 ià( out -> »§m¶” ) 758 `»Ëa£_»§m¶” ( out -> »§m¶” ); 760 `ä“ ( out -> ÿche ); 761 `ä“ ( out -> downmix_buf ); 762 `ä“ ( out ); 763 * ¡»am_out = NULL ; 764 adev -> out = NULL ; 765 sco_¡»am_out = NULL ; 767  »t ; 768 } } 770 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 771  $sco_Ý’_ouut_¡»am ( audio_hw_deviû * dev , 772 audio_io_hªdË_t hªdË , 773 audio_deviûs_t deviûs , 774 audio_ouut_æags_t æags , 775  audio_cÚfig * cÚfig , 776  audio_¡»am_out ** ¡»am_out , 777 cÚ¡ * add»ss ) 779  `sco_Ý’_ouut_¡»am_»® ( dev , hªdË , deviûs , æags , 780 cÚfig , ¡»am_out , add»ss ); 781 } } 783  $sco_Ý’_ouut_¡»am ( audio_hw_deviû * dev , 784 audio_io_hªdË_t hªdË , 785 audio_deviûs_t deviûs , 786 audio_ouut_æags_t æags , 787  audio_cÚfig * cÚfig , 788  audio_¡»am_out ** ¡»am_out ) 790  `sco_Ý’_ouut_¡»am_»® ( dev , hªdË , deviûs , æags , 791 cÚfig , ¡»am_out , NULL ); 792 } } 795  $sco_þo£_ouut_¡»am ( audio_hw_deviû * dev , 796  audio_¡»am_out * ¡»am_out ) 798  sco_dev *sco_dev = (sco_dev *è dev ; 799  sco_¡»am_out * out = (sco_¡»am_ouˆ*è ¡»am_out ; 801 `DBG ("dev %°¡»am %°fd %d", dev , out , sco_fd ); 803 ià( out -> »§m¶” ) { 804 `»Ëa£_»§m¶” ( out -> »§m¶” ); 805 `ä“ ( out -> »§m¶e_buf ); 808 `ä“ ( out -> ÿche ); 809 `ä“ ( out -> downmix_buf ); 810 `ä“ ( out ); 811 sco_dev -> out = NULL ; 813 `±h»ad_mu‹x_lock (& sco_mu‹x ); 815 sco_¡»am_out = NULL ; 817 ià(! sco_¡»am_š ) 818 `sco_þo£_sock‘ (); 820 `±h»ad_mu‹x_uÆock (& sco_mu‹x ); 821 } } 823  $sco_£t_·¿m‘”s ( audio_hw_deviû * dev , 824 cÚ¡ * kv·œs ) 826 `DBG ("%s", kv·œs ); 829 } } 831 * $sco_g‘_·¿m‘”s (cÚ¡  audio_hw_deviû * dev , 832 cÚ¡ * keys ) 834 `DBG (""); 836  `¡rdup (""); 837 } } 839  $sco_š™_check (cÚ¡  audio_hw_deviû * dev ) 841 `DBG (""); 844 } } 846  $sco_£t_voiû_vÞume ( audio_hw_deviû * dev ,  vÞume ) 848 `DBG ("%f", vÞume ); 851 } } 853  $sco_£t_ma¡”_vÞume ( audio_hw_deviû * dev ,  vÞume ) 855 `DBG ("%f", vÞume ); 858 } } 860  $sco_£t_mode ( audio_hw_deviû * dev ,  mode ) 862 `DBG (""); 864  - ENOSYS ; 865 } } 867  $sco_£t_mic_mu‹ ( audio_hw_deviû * dev , boÞ ¡©e ) 869 `DBG (""); 871  - ENOSYS ; 872 } } 874  $sco_g‘_mic_mu‹ (cÚ¡  audio_hw_deviû * dev , boÞ * ¡©e ) 876 `DBG (""); 878  - ENOSYS ; 879 } } 881  size_t $sco_g‘_šput_bufãr_size (cÚ¡  audio_hw_deviû * dev , 882 cÚ¡  audio_cÚfig * cÚfig ) 884 `DBG (""); 886  - ENOSYS ; 887 } } 889  ušt32_t $š_g‘_§m¶e_¿‹ (cÚ¡  audio_¡»am * ¡»am ) 891  sco_¡»am_š * š = (sco_¡»am_š *è ¡»am ; 893 `DBG ("¿‹ %u", š -> cfg . ¿‹ ); 895  š -> cfg . ¿‹ ; 896 } } 898  $š_£t_§m¶e_¿‹ ( audio_¡»am * ¡»am , ušt32_t ¿‹ ) 900 `DBG ("¿‹ %u", ¿‹ ); 903 } } 905  size_t $š_g‘_bufãr_size (cÚ¡  audio_¡»am * ¡»am ) 907  sco_¡»am_š * š = (sco_¡»am_š *è ¡»am ; 908 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 909 size_t size = `audio_¡»am_š_äame_size (& š -> ¡»am ) * 910 š -> cfg . äame_num ; 912 size_t size = `audio_¡»am_äame_size (& š -> ¡»am . commÚ ) * 913 š -> cfg . äame_num ; 917 ià( š -> cfg . ¿‹ =ð AUDIO_STREAM_SCO_RATE ) 918 size = 576; 920 `DBG ("buàsiz%zd", size ); 922  size ; 923 } } 925  ušt32_t $š_g‘_chªÃls (cÚ¡  audio_¡»am * ¡»am ) 927  sco_¡»am_š * š = (sco_¡»am_š *è ¡»am ; 929 `DBG ("chªÃl num: %u", `pÝcouÁ ( š -> cfg . chªÃls )); 931  š -> cfg . chªÃls ; 932 } } 934  audio_fÜm©_t $š_g‘_fÜm© (cÚ¡  audio_¡»am * ¡»am ) 936  sco_¡»am_š * š = (sco_¡»am_š *è ¡»am ; 938 `DBG ("fÜm©: %u", š -> cfg . fÜm© ); 940  š -> cfg . fÜm© ; 941 } } 943  $š_£t_fÜm© ( audio_¡»am * ¡»am , audio_fÜm©_t fÜm© ) 945 `DBG (""); 947  - ENOSYS ; 948 } } 950  $š_¡ªdby ( audio_¡»am * ¡»am ) 952 `DBG (""); 955 } } 957  $š_dump (cÚ¡  audio_¡»am * ¡»am ,  fd ) 959 `DBG (""); 961  - ENOSYS ; 962 } } 964  $š_£t_·¿m‘”s ( audio_¡»am * ¡»am , cÚ¡ * kv·œs ) 966 `DBG ("%s", kv·œs ); 969 } } 971 * $š_g‘_·¿m‘”s (cÚ¡  audio_¡»am * ¡»am , 972 cÚ¡ * keys ) 974 `DBG (""); 976  `¡rdup (""); 977 } } 979  $š_add_audio_efãù (cÚ¡  audio_¡»am * ¡»am , 980 efãù_hªdË_t efãù ) 982 `DBG (""); 984  - ENOSYS ; 985 } } 987  $š_»move_audio_efãù (cÚ¡  audio_¡»am * ¡»am , 988 efãù_hªdË_t efãù ) 990 `DBG (""); 992  - ENOSYS ; 993 } } 995  $š_£t_gaš ( audio_¡»am_š * ¡»am ,  gaš ) 997 `DBG (""); 999  - ENOSYS ; 1000 } } 1002  boÞ $»ad_d©a ( sco_¡»am_š * š , * bufãr , size_t by‹s ) 1004  pÞlfd pfd ; 1005 size_t Ën , »ad_by‹s = 0; 1007 pfd . fd = sco_fd ; 1008 pfd . ev’ts = POLLIN | POLLHUP | POLLNVAL ; 1010  by‹s > »ad_by‹s ) { 1011  »t ; 1014 ià( `pÞl (& pfd , 1, SOCKET_POLL_TIMEOUT_MS ) == 0) { 1015 `DBG ("timeouˆfd %d", sco_fd ); 1016  çl£ ; 1019 ià( pfd . »v’ts & ( POLLHUP | POLLNVAL )) { 1020 `”rÜ ("”rÜ fd %d,ƒv’t 0x%x", sco_fd , pfd . »v’ts ); 1021  çl£ ; 1024 Ën = by‹s - »ad_by‹s > sco_mtu ? sco_mtu : 1025 by‹s - »ad_by‹s ; 1027 »t = `»ad ( sco_fd , bufãr + »ad_by‹s , Ën ); 1028 ià( »t > 0) { 1029 »ad_by‹s +ð »t ; 1030 `DBG ("»ad %dÙ® %zd", »t , »ad_by‹s ); 1034 ià( ”ºo =ð EAGAIN ) { 1035 »t = ”ºo ; 1036 `w¬n ("»ad fažed (%d)", »t ); 1040 ià( ”ºo !ð EINTR ) { 1041 »t = ”ºo ; 1042 `”rÜ ("»ad fažed (%dèfd %d by‹ %zd", »t , sco_fd , 1043 by‹s ); 1044  çl£ ; 1048 `DBG ("»ad %zd by‹s", »ad_by‹s ); 1050  Œue ; 1051 } } 1053  ssize_t $š_»ad ( audio_¡»am_š * ¡»am , * bufãr , 1054 size_t by‹s ) 1056  sco_¡»am_š * š = (sco_¡»am_š *è ¡»am ; 1057 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 1058 size_t äame_size = `audio_¡»am_š_äame_size (& š -> ¡»am ); 1060 size_t äame_size = `audio_¡»am_äame_size (& ¡»am -> commÚ ); 1062 size_t äame_num = by‹s / äame_size ; 1063 size_t šput_äame_num = äame_num ; 1064 * »ad_buf = bufãr ; 1065 size_t tÙ® = by‹s ; 1066  »t ; 1068 `DBG ("R—d from fd %d by‹ %zu", sco_fd , by‹s ); 1070 ià( `c_g‘_sco_fd (& š -> bd_addr è!ð SCO_STATUS_SUCCESS ) 1073 ià(! š -> »§m¶” && in-> cfg . ¿‹ !ð AUDIO_STREAM_SCO_RATE ) { 1074 `”rÜ ("Cannot find„esampler"); 1078 ià( š -> »§m¶” ) { 1079 šput_äame_num = `g‘_»§m¶e_äame_num ( AUDIO_STREAM_SCO_RATE , 1080 š -> cfg . ¿‹ , 1081 äame_num , 0); 1082 ià( šput_äame_num > š -> »§m¶e_äame_num ) { 1083 `DBG ("resize input frames from %zdo %d", 1084 šput_äame_num , š -> »§m¶e_äame_num ); 1085 šput_äame_num = š -> »§m¶e_äame_num ; 1088 »ad_buf = š -> »§m¶e_buf ; 1090 tÙ® = šput_äame_num * ( št16_t ) * 1; 1093 if(! `»ad_d©a ( š , »ad_buf , tÙ® )) 1096 ià( š -> »§m¶” ) { 1097 »t = š -> »§m¶” -> `»§m¶e_äom_šput (in->resampler, 1098 š -> »§m¶e_buf , 1099 & šput_äame_num , 1100 ( št16_t *è bufãr , 1101 & äame_num ); 1102 ià( »t ) { 1103 `”rÜ ("Failedo„esample frames: %zd input %zd (%s)", 1104 äame_num , šput_äame_num , 1105 `¡»¼Ü ( »t )); 1109 `DBG ("»§m¶”:„emaš %zd ouuˆ%zd f¿mes", šput_äame_num , 1110 äame_num ); 1113  by‹s ; 1114 } } 1116  ušt32_t $š_g‘_šput_äames_lo¡ ( audio_¡»am_š * ¡»am ) 1118 `DBG (""); 1120  - ENOSYS ; 1121 } } 1123  $sco_Ý’_šput_¡»am_»® ( audio_hw_deviû * dev , 1124 audio_io_hªdË_t hªdË , 1125 audio_deviûs_t deviûs , 1126  audio_cÚfig * cÚfig , 1127  audio_¡»am_š ** ¡»am_š , 1128 audio_šput_æags_t æags , 1129 cÚ¡ * add»ss , 1130 audio_sourû_t sourû ) 1132  sco_dev *sco_dev = (sco_dev *è dev ; 1133  sco_¡»am_š * š ; 1134  chª_num , »t ; 1135 size_t »§m¶e_size ; 1137 `DBG ("cÚfig %°deviû fÏg 0x%02x", cÚfig , deviûs ); 1139 ià( sco_¡»am_š ) { 1140 `DBG ("stream_in‡lready open"); 1141 »t = - EIO ; 1142  çžed2 ; 1145 š = `ÿÎoc (1, ( sco_¡»am_š )); 1146 ià(! š ) 1147  - ENOMEM ; 1149 `DBG ("¡»am %°scØfd %d mtu %u", š , sco_fd , sco_mtu ); 1151 š -> ¡»am . commÚ . g‘_§m¶e_¿‹ = š_g‘_§m¶e_¿‹ ; 1152 š -> ¡»am . commÚ . £t_§m¶e_¿‹ = š_£t_§m¶e_¿‹ ; 1153 š -> ¡»am . commÚ . g‘_bufãr_size = š_g‘_bufãr_size ; 1154 š -> ¡»am . commÚ . g‘_chªÃls = š_g‘_chªÃls ; 1155 š -> ¡»am . commÚ . g‘_fÜm© = š_g‘_fÜm© ; 1156 š -> ¡»am . commÚ . £t_fÜm© = š_£t_fÜm© ; 1157 š -> ¡»am . commÚ . ¡ªdby = š_¡ªdby ; 1158 š -> ¡»am . commÚ . dump = š_dump ; 1159 š -> ¡»am . commÚ . £t_·¿m‘”s = š_£t_·¿m‘”s ; 1160 š -> ¡»am . commÚ . g‘_·¿m‘”s = š_g‘_·¿m‘”s ; 1161 š -> ¡»am . commÚ . add_audio_efãù = š_add_audio_efãù ; 1162 š -> ¡»am . commÚ . »move_audio_efãù = š_»move_audio_efãù ; 1163 š -> ¡»am . £t_gaš = š_£t_gaš ; 1164 š -> ¡»am . »ad = š_»ad ; 1165 š -> ¡»am . g‘_šput_äames_lo¡ = š_g‘_šput_äames_lo¡ ; 1167 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 1168 ià( add»ss ) { 1169 `DBG ("add»s %s", add»ss ); 1171 `¡r2bt_bdaddr_t ( add»ss , & š -> bd_addr ); 1175 ià( cÚfig ) { 1176 `DBG ("config:„ate %u chan mask %x format %d offload %p", 1177 cÚfig -> §m¶e_¿‹ , cÚfig-> chªÃl_mask , 1178 cÚfig -> fÜm© , &cÚfig-> ofæßd_šfo ); 1180 š -> cfg . fÜm© = cÚfig ->format; 1181 š -> cfg . chªÃls = cÚfig -> chªÃl_mask ; 1182 š -> cfg . ¿‹ = cÚfig -> §m¶e_¿‹ ; 1184 š -> cfg . fÜm© = AUDIO_STREAM_DEFAULT_FORMAT ; 1185 š -> cfg . chªÃls = AUDIO_CHANNEL_OUT_MONO ; 1186 š -> cfg . ¿‹ = AUDIO_STREAM_DEFAULT_RATE ; 1189 š -> cfg . äame_num = IN_STREAM_FRAMES ; 1191 ià( š -> cfg . ¿‹ =ð AUDIO_STREAM_SCO_RATE ) 1192  sk_»§m¶” ; 1195 chª_num = 1; 1197 »t = `ü—‹_»§m¶” ( AUDIO_STREAM_SCO_RATE , š -> cfg . ¿‹ , chª_num , 1198 RESAMPLER_QUALITY_DEFAULT , NULL , 1199 & š -> »§m¶” ); 1200 ià( »t ) { 1201 `”rÜ ("FažedØü—‹„e§m¶” (%s)", `¡»¼Ü (- »t )); 1202  çžed ; 1205 š -> »§m¶e_äame_num = `g‘_»§m¶e_äame_num ( AUDIO_STREAM_SCO_RATE , 1206 š -> cfg . ¿‹ , 1207 š -> cfg . äame_num , 0); 1209 »§m¶e_size = ( št16_t è* chª_num * š -> »§m¶e_äame_num ; 1211 š -> »§m¶e_buf = `m®loc ( »§m¶e_size ); 1212 ià(! š -> »§m¶e_buf ) { 1213 `”rÜ ("failedo‡llocate„esample buffer for %d frames", 1214 š -> »§m¶e_äame_num ); 1215  çžed ; 1218 `DBG ("Resampler: input %d output %d chan %d frames %u size %zd", 1219 AUDIO_STREAM_SCO_RATE , š -> cfg . ¿‹ , chª_num , 1220 š -> »§m¶e_äame_num , »§m¶e_size ); 1221 sk_»§m¶” : 1222 * ¡»am_š = & š -> ¡»am ; 1223 sco_dev -> š = in; 1224 sco_¡»am_š = š ; 1227 çžed : 1228 ià( š -> »§m¶” ) 1229 `»Ëa£_»§m¶” ( š -> »§m¶” ); 1230 `ä“ ( š ); 1231 çžed2 : 1232 * ¡»am_š = NULL ; 1233 sco_dev -> š = NULL ; 1234 sco_¡»am_š = NULL ; 1236  »t ; 1237 } } 1239 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 1240  $sco_Ý’_šput_¡»am ( audio_hw_deviû * dev , 1241 audio_io_hªdË_t hªdË , 1242 audio_deviûs_t deviûs , 1243  audio_cÚfig * cÚfig , 1244  audio_¡»am_š ** ¡»am_š , 1245 audio_šput_æags_t æags , 1246 cÚ¡ * add»ss , 1247 audio_sourû_t sourû ) 1249  `sco_Ý’_šput_¡»am_»® ( dev , hªdË , deviûs , cÚfig , 1250 ¡»am_š , æags , add»ss , 1251 sourû ); 1252 } } 1254  $sco_Ý’_šput_¡»am ( audio_hw_deviû * dev , 1255 audio_io_hªdË_t hªdË , 1256 audio_deviûs_t deviûs , 1257  audio_cÚfig * cÚfig , 1258  audio_¡»am_š ** ¡»am_š ) 1260  `sco_Ý’_šput_¡»am_»® ( dev , hªdË , deviûs , cÚfig , 1261 ¡»am_š , 0, NULL , 0); 1262 } } 1265  $sco_þo£_šput_¡»am ( audio_hw_deviû * dev , 1266  audio_¡»am_š * ¡»am_š ) 1268  sco_dev *sco_dev = (sco_dev *è dev ; 1269  sco_¡»am_š * š = (sco_¡»am_š *è ¡»am_š ; 1271 `DBG ("dev %°¡»am %°fd %d", dev , š , sco_fd ); 1273 ià( š -> »§m¶” ) { 1274 `»Ëa£_»§m¶” ( š -> »§m¶” ); 1275 `ä“ ( š -> »§m¶e_buf ); 1278 `ä“ ( š ); 1279 sco_dev -> š = NULL ; 1281 `±h»ad_mu‹x_lock (& sco_mu‹x ); 1283 sco_¡»am_š = NULL ; 1285 ià(! sco_¡»am_out ) 1286 `sco_þo£_sock‘ (); 1288 `±h»ad_mu‹x_uÆock (& sco_mu‹x ); 1289 } } 1291  $sco_dump (cÚ¡ audio_hw_deviû_t * deviû ,  fd ) 1293 `DBG (""); 1296 } } 1298 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 1299  $£t_ma¡”_mu‹ ( audio_hw_deviû * dev , boÞ mu‹ ) 1301 `DBG (""); 1302  - ENOSYS ; 1303 } } 1305  $g‘_ma¡”_mu‹ ( audio_hw_deviû * dev , boÞ * mu‹ ) 1307 `DBG (""); 1308  - ENOSYS ; 1309 } } 1311  $ü—‹_audio_·tch ( audio_hw_deviû * dev , 1312  num_sourûs , 1313 cÚ¡  audio_pÜt_cÚfig * sourûs , 1314  num_sšks , 1315 cÚ¡  audio_pÜt_cÚfig * sšks , 1316 audio_·tch_hªdË_t * hªdË ) 1318 `DBG (""); 1319  - ENOSYS ; 1320 } } 1322  $»Ëa£_audio_·tch ( audio_hw_deviû * dev , 1323 audio_·tch_hªdË_t hªdË ) 1325 `DBG (""); 1326  - ENOSYS ; 1327 } } 1329  $g‘_audio_pÜt ( audio_hw_deviû * dev ,  audio_pÜt * pÜt ) 1331 `DBG (""); 1332  - ENOSYS ; 1333 } } 1335  $£t_audio_pÜt_cÚfig ( audio_hw_deviû * dev , 1336 cÚ¡  audio_pÜt_cÚfig * cÚfig ) 1338 `DBG (""); 1339  - ENOSYS ; 1340 } } 1343  $sco_þo£ ( hw_deviû_t * deviû ) 1345 `DBG (""); 1347 `ä“ ( deviû ); 1350 } } 1352 * $c_hªdËr (* d©a ) 1354 boÞ dÚe = çl£ ; 1355  pÞlfd pfd ; 1356  sk ; 1358 `DBG (""); 1360 ! dÚe ) { 1361 `DBG ("Waiting for connection ..."); 1363 sk = `acû± ( li¡’_sk , NULL , NULL); 1364 ià( sk < 0) { 1365  ”r = ”ºo ; 1367 ià( ”r =ð EINTR ) 1370 ià( ”r !ð ECONNABORTED &&ƒ¼ !ð EINVAL ) 1371 `”rÜ ("sco: Failedo‡ccept socket: %d (%s)", 1372 ”r , `¡»¼Ü (err)); 1377 `±h»ad_mu‹x_lock (& sk_mu‹x ); 1378 c_sk = sk ; 1379 `±h»ad_mu‹x_uÆock (& sk_mu‹x ); 1381 `DBG ("SCO IPC: Connected"); 1383 `mem£t (& pfd , 0, (pfd)); 1384 pfd . fd = c_sk ; 1385 pfd . ev’ts = POLLHUP | POLLERR | POLLNVAL ; 1388  `pÞl (& pfd , 1, -1è< 0 && ”ºo =ð EINTR ); 1390 `šfo ("SCO HAL: Socket closed"); 1392 `±h»ad_mu‹x_lock (& sk_mu‹x ); 1393 `þo£ ( c_sk ); 1394 c_sk = -1; 1395 `±h»ad_mu‹x_uÆock (& sk_mu‹x ); 1398 `šfo ("Closing SCO IPChread"); 1399  NULL ; 1400 } } 1402  $sco_c_š™ () 1404  sockaddr_un addr ; 1405  ”r ; 1406  sk ; 1408 `DBG (""); 1410 sk = `sock‘ ( PF_LOCAL , SOCK_SEQPACKET , 0); 1411 ià( sk < 0) { 1412 ”r = - ”ºo ; 1413 `”rÜ ("sco: FažedØü—‹ sock‘: %d (%s)", - ”r , 1414 `¡»¼Ü (- ”r )); 1415  ”r ; 1418 `mem£t (& addr , 0, (addr)); 1419 addr . sun_çmžy = AF_UNIX ; 1421 `memýy ( addr . sun_·th , BLUEZ_SCO_SK_PATH , (BLUEZ_SCO_SK_PATH)); 1423 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 1424 ”r = - ”ºo ; 1425 `”rÜ ("sco: FažedØbšd sock‘: %d (%s)", - ”r , 1426 `¡»¼Ü (- ”r )); 1427  çžed ; 1430 ià( `li¡’ ( sk , 1) < 0) { 1431 ”r = - ”ºo ; 1432 `”rÜ ("sco: FažedØli¡’ oÀthsock‘: %d (%s)", - ”r , 1433 `¡»¼Ü (- ”r )); 1434  çžed ; 1437 li¡’_sk = sk ; 1439 ”r = `±h»ad_ü—‹ (& c_th , NULL , c_hªdËr , NULL); 1440 ià( ”r ) { 1441 ”r = -err; 1442 c_th = 0; 1443 `”rÜ ("sco: Failedo start IPChread: %d (%s)", 1444 - ”r , `¡»¼Ü (-err)); 1445  çžed ; 1450 çžed : 1451 `þo£ ( sk ); 1452  ”r ; 1453 } } 1455  $sco_Ý’ (cÚ¡ hw_moduË_t * moduË , cÚ¡ * Çme , 1456 hw_deviû_t ** deviû ) 1458  sco_dev * dev ; 1459  ”r ; 1461 `DBG (""); 1463 ià( `¡rcmp ( Çme , AUDIO_HARDWARE_INTERFACE )) { 1464 `”rÜ ("SCO: iÁ”çû % nÙ m©chšg [%s]", Çme , 1465 AUDIO_HARDWARE_INTERFACE ); 1466  - EINVAL ; 1469 ”r = `sco_c_š™ (); 1470 ià( ”r < 0) 1471  ”r ; 1473 dev = `ÿÎoc (1, ( sco_dev )); 1474 ià(! dev ) 1475  - ENOMEM ; 1477 dev ->dev. commÚ . g = HARDWARE_DEVICE_TAG ; 1478 dev ->dev. commÚ . v”siÚ = AUDIO_DEVICE_API_VERSION_CURRENT ; 1479 dev ->dev. commÚ . moduË = ( hw_moduË_t *) module; 1480 dev ->dev. commÚ . þo£ = sco_þo£ ; 1482 dev ->dev. š™_check = sco_š™_check ; 1483 dev ->dev. £t_voiû_vÞume = sco_£t_voiû_vÞume ; 1484 dev ->dev. £t_ma¡”_vÞume = sco_£t_ma¡”_vÞume ; 1485 dev ->dev. £t_mode = sco_£t_mode ; 1486 dev ->dev. £t_mic_mu‹ = sco_£t_mic_mu‹ ; 1487 dev ->dev. g‘_mic_mu‹ = sco_g‘_mic_mu‹ ; 1488 dev ->dev. £t_·¿m‘”s = sco_£t_·¿m‘”s ; 1489 dev ->dev. g‘_·¿m‘”s = sco_g‘_·¿m‘”s ; 1490 dev ->dev. g‘_šput_bufãr_size = sco_g‘_šput_bufãr_size ; 1491 dev ->dev. Ý’_ouut_¡»am = sco_Ý’_ouut_¡»am ; 1492 dev ->dev. þo£_ouut_¡»am = sco_þo£_ouut_¡»am ; 1493 dev ->dev. Ý’_šput_¡»am = sco_Ý’_šput_¡»am ; 1494 dev ->dev. þo£_šput_¡»am = sco_þo£_šput_¡»am ; 1495 dev ->dev. dump = sco_dump ; 1496 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 1497 dev ->dev. £t_ma¡”_mu‹ = set_master_mute; 1498 dev ->dev. g‘_ma¡”_mu‹ = get_master_mute; 1499 dev ->dev. ü—‹_audio_·tch = create_audio_patch; 1500 dev ->dev. »Ëa£_audio_·tch =„elease_audio_patch; 1501 dev ->dev. g‘_audio_pÜt = get_audio_port; 1502 dev ->dev. £t_audio_pÜt_cÚfig = set_audio_port_config; 1505 * deviû = & dev ->dev. commÚ ; 1508 } } 1510  hw_moduË_m‘hods_t gh®_moduË_m‘hods = { 1511 . Ý’ = sco_Ý’ , 1514  audio_moduË gHAL_MODULE_INFO_SYM = { 1515 . commÚ = { 1516 . g = HARDWARE_MODULE_TAG , 1517 . gv”siÚ_majÜ = 1, 1518 . gv”siÚ_mšÜ = 0, 1519 . gid = AUDIO_HARDWARE_MODULE_ID , 1520 . gÇme = "SCO Audio HW HAL", 1521 . gauthÜ = "Intel Corporation", 1522 . gm‘hods = & h®_moduË_m‘hods , @android/hal-socket.c 18  ~<¡dboÞ.h > 19  ~<¡dšt.h > 20  ~<¡dlib.h > 21  ~<¡ršg.h > 23  ~"h®-c.h " 24  ~"h®-log.h " 25  ~"h®-msg.h " 26  ~"h®-utžs.h " 27  ~"h®.h " 29  bt_¡©us_t $sock‘_li¡’ ( btsock_ty³_t ty³ , cÚ¡ * £rviû_Çme , 30 cÚ¡ ušt8_t * uuid ,  chª , 31 * sock ,  æags ) 33  h®_cmd_sock‘_li¡’ cmd ; 35 ià(! sock ) 36  BT_STATUS_PARM_INVALID ; 38 `DBG ("uuid %s chan %d sock %pype %d service_name %s flags 0x%02x", 39 `btuuid2¡r ( uuid ), chª , sock , ty³ , £rviû_Çme , æags ); 41 `mem£t (& cmd , 0, (cmd)); 44 cmd . ty³ =ype; 45 cmd . æags = flags; 46 cmd . chªÃl = chª ; 48 ià( uuid ) 49 `memýy ( cmd . uuid , uuid, (cmd.uuid)); 51 ià( £rviû_Çme ) 52 `memýy ( cmd . Çme , £rviû_Çme , `¡¾’ (service_name)); 54  `h®_c_cmd ( HAL_SERVICE_ID_SOCKET , HAL_OP_SOCKET_LISTEN , 55 ( cmd ), &cmd, NULL , NULL, sock ); 56 } } 58  bt_¡©us_t $sock‘_cÚÃù (cÚ¡ bt_bdaddr_t * bdaddr , btsock_ty³_t ty³ , 59 cÚ¡ ušt8_t * uuid ,  chª , 60 * sock ,  æags ) 62  h®_cmd_sock‘_cÚÃù cmd ; 64 ià(! sock ) 65  BT_STATUS_PARM_INVALID ; 67 `DBG ("bdaddr %s uuid %s chan %d sock %pype %d flags 0x%02x", 68 `bdaddr2¡r ( bdaddr ), `btuuid2¡r ( uuid ), chª , sock , ty³ , æags ); 70 `mem£t (& cmd , 0, (cmd)); 73 cmd . ty³ =ype; 74 cmd . æags = flags; 75 cmd . chªÃl = chª ; 77 ià( uuid ) 78 `memýy ( cmd . uuid , uuid, (cmd.uuid)); 80 ià( bdaddr ) 81 `memýy ( cmd . bdaddr , bdaddr, (cmd.bdaddr)); 83  `h®_c_cmd ( HAL_SERVICE_ID_SOCKET , HAL_OP_SOCKET_CONNECT , 84 ( cmd ), &cmd, NULL , NULL, sock ); 85 } } 87  btsock_š‹rçû_t gsock‘_if = { 88 ( sock‘_if ), 89 sock‘_li¡’ , 90 sock‘_cÚÃù 93 btsock_š‹rçû_t * $bt_g‘_sock‘_š‹rçû () 95  & sock‘_if ; 96 } } @android/hal-utils.c 18  ~<¡dio.h > 19  ~<¡ršg.h > 20  ~<¡dšt.h > 21  ~<¡dboÞ.h > 23  ~ 25  ~"h®.h " 26  ~"h®-utžs.h " 34 cÚ¡ * $bt_uuid_t2¡r (cÚ¡ ušt8_t * uuid , * buf ) 36  shiá = 0; 37  i ; 38  is_bt ; 40 ià(! uuid ) 41  `¡rýy ( buf , "NULL"); 43 is_bt = ! `memcmp (& uuid [4], & BT_BASE_UUID [4], HAL_UUID_LEN - 4); 45  i = 0; i < HAL_UUID_LEN ; i++) { 46 ià( i =ð4 && is_bt ) 49 ià( i == 4 || i == 6 || i == 8 || i == 10) { 50 buf [ i * 2 + shiá ] = '-'; 51 shiá ++; 53 `¥rštf ( buf + i * 2 + shiá , "%02x", uuid [i]); 56  buf ; 57 } } 59 cÚ¡ * $btuuid2¡r (cÚ¡ ušt8_t * uuid ) 61  buf [ MAX_UUID_STR_LEN ]; 63  `bt_uuid_t2¡r ( uuid , buf ); 64 } } 66 INTMAP ( bt_¡©us_t , -1, "(unknown)") 67 DELEMENT ( BT_STATUS_SUCCESS ), 68 DELEMENT ( BT_STATUS_FAIL ), 69 DELEMENT ( BT_STATUS_NOT_READY ), 70 DELEMENT ( BT_STATUS_NOMEM ), 71 DELEMENT ( BT_STATUS_BUSY ), 72 DELEMENT ( BT_STATUS_DONE ), 73 DELEMENT ( BT_STATUS_UNSUPPORTED ), 74 DELEMENT ( BT_STATUS_PARM_INVALID ), 75 DELEMENT ( BT_STATUS_UNHANDLED ), 76 DELEMENT ( BT_STATUS_AUTH_FAILURE ), 77 DELEMENT ( BT_STATUS_RMT_DEV_DOWN ), 78 ENDMAP 80 INTMAP ( bt_¡©e_t , -1, "(unknown)") 81 DELEMENT ( BT_STATE_OFF ), 82 DELEMENT ( BT_STATE_ON ), 83 ENDMAP 85 INTMAP ( bt_deviû_ty³_t , -1, "(unknown)") 86 DELEMENT ( BT_DEVICE_DEVTYPE_BREDR ), 87 DELEMENT ( BT_DEVICE_DEVTYPE_BLE ), 88 DELEMENT ( BT_DEVICE_DEVTYPE_DUAL ), 89 ENDMAP 91 INTMAP ( bt_sÿn_mode_t , -1, "(unknown)") 92 DELEMENT ( BT_SCAN_MODE_NONE ), 93 DELEMENT ( BT_SCAN_MODE_CONNECTABLE ), 94 DELEMENT ( BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE ), 95 ENDMAP 97 INTMAP ( bt_discov”y_¡©e_t , -1, "(unknown)") 98 DELEMENT ( BT_DISCOVERY_STOPPED ), 99 DELEMENT ( BT_DISCOVERY_STARTED ), 100 ENDMAP 102 INTMAP ( bt_aþ_¡©e_t , -1, "(unknown)") 103 DELEMENT ( BT_ACL_STATE_CONNECTED ), 104 DELEMENT ( BT_ACL_STATE_DISCONNECTED ), 105 ENDMAP 107 INTMAP ( bt_bÚd_¡©e_t , -1, "(unknown)") 108 DELEMENT ( BT_BOND_STATE_NONE ), 109 DELEMENT ( BT_BOND_STATE_BONDING ), 110 DELEMENT ( BT_BOND_STATE_BONDED ), 111 ENDMAP 113 INTMAP ( bt_s¥_v¬ŸÁ_t , -1, "(unknown)") 114 DELEMENT ( BT_SSP_VARIANT_PASSKEY_CONFIRMATION ), 115 DELEMENT ( BT_SSP_VARIANT_PASSKEY_ENTRY ), 116 DELEMENT ( BT_SSP_VARIANT_CONSENT ), 117 DELEMENT ( BT_SSP_VARIANT_PASSKEY_NOTIFICATION ), 118 gENDMAP 120 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 121 INTMAP ( bt_´Ý”ty_ty³_t , -1, "(unknown)") 122 DELEMENT ( BT_PROPERTY_BDNAME ), 123 DELEMENT ( BT_PROPERTY_BDADDR ), 124 DELEMENT ( BT_PROPERTY_UUIDS ), 125 DELEMENT ( BT_PROPERTY_CLASS_OF_DEVICE ), 126 DELEMENT ( BT_PROPERTY_TYPE_OF_DEVICE ), 127 DELEMENT ( BT_PROPERTY_SERVICE_RECORD ), 128 DELEMENT ( BT_PROPERTY_ADAPTER_SCAN_MODE ), 129 DELEMENT ( BT_PROPERTY_ADAPTER_BONDED_DEVICES ), 130 DELEMENT ( BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT ), 131 DELEMENT ( BT_PROPERTY_REMOTE_FRIENDLY_NAME ), 132 DELEMENT ( BT_PROPERTY_REMOTE_RSSI ), 133 DELEMENT ( BT_PROPERTY_REMOTE_VERSION_INFO ), 134 DELEMENT ( BT_PROPERTY_LOCAL_LE_FEATURES ), 135 DELEMENT ( BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP ), 136 gENDMAP 138 INTMAP ( bt_´Ý”ty_ty³_t , -1, "(unknown)") 139 DELEMENT ( BT_PROPERTY_BDNAME ), 140 DELEMENT ( BT_PROPERTY_BDADDR ), 141 DELEMENT ( BT_PROPERTY_UUIDS ), 142 DELEMENT ( BT_PROPERTY_CLASS_OF_DEVICE ), 143 DELEMENT ( BT_PROPERTY_TYPE_OF_DEVICE ), 144 DELEMENT ( BT_PROPERTY_SERVICE_RECORD ), 145 DELEMENT ( BT_PROPERTY_ADAPTER_SCAN_MODE ), 146 DELEMENT ( BT_PROPERTY_ADAPTER_BONDED_DEVICES ), 147 DELEMENT ( BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT ), 148 DELEMENT ( BT_PROPERTY_REMOTE_FRIENDLY_NAME ), 149 DELEMENT ( BT_PROPERTY_REMOTE_RSSI ), 150 DELEMENT ( BT_PROPERTY_REMOTE_VERSION_INFO ), 151 DELEMENT ( BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP ), 152 gENDMAP 155 INTMAP ( bt_cb_th»ad_evt , -1, "(unknown)") 156 DELEMENT ( ASSOCIATE_JVM ), 157 DELEMENT ( DISASSOCIATE_JVM ), 158 ENDMAP 161  $št2¡r_fšdšt ( v , cÚ¡  št2¡r m []) 163  i ; 165  i = 0; m [i]. ¡r ; ++i) { 166 ià( m [ i ]. v® =ð v ) 167  i ; 170 } } 173  $št2¡r_fšd¡r (cÚ¡ * ¡r , cÚ¡  št2¡r m []) 175  i ; 177  i = 0; m [i]. ¡r ; ++i) { 178 ià( `¡rcmp ( m [ i ]. ¡r , str) == 0) 179  i ; 182 } } 190 cÚ¡ * $bt_bdaddr_t2¡r (cÚ¡ bt_bdaddr_t * bd_addr , * buf ) 192 cÚ¡ ušt8_t * p ; 194 ià(! bd_addr ) 195  `¡rýy ( buf , "NULL"); 197 p = bd_addr -> add»ss ; 199 `¢´štf ( buf , MAX_ADDR_STR_LEN , "%02x:%02x:%02x:%02x:%02x:%02x", 200 p [0],…[1],…[2],…[3],…[4],…[5]); 202  buf ; 203 } } 206  $¡r2bt_bdaddr_t (cÚ¡ * ¡r , bt_bdaddr_t * bd_addr ) 208 ušt8_t * p = bd_addr -> add»ss ; 210 `ssÿnf ( ¡r , "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx", 211 & p [0], &p[1], &p[2], &p[3], &p[4], &p[5]); 212 } } 215  $¡r2bt_uuid_t (cÚ¡ * ¡r , bt_uuid_t * uuid ) 217  i = 0; 219 `memýy ( uuid , BT_BASE_UUID , ( bt_uuid_t )); 221 * ¡r && i < (è( bt_uuid_t )) { 222 * ¡r == '-') 223 ¡r ++; 225 ià( `ssÿnf ( ¡r , "%02hhx", & uuid -> uu [ i ]) != 1) 228 i ++; 229 ¡r += 2; 231 } } 233 cÚ¡ * $’um_defšes (* v ,  i ) 235 cÚ¡  št2¡r * m = v ; 237  m [ i ]. ¡r !ð NULL ? m[i].str : NULL; 238 } } 240 cÚ¡ * $’um_¡ršgs (* v ,  i ) 242 cÚ¡ ** m = v ; 244  m [ i ] !ð NULL ? m[i] : NULL; 245 } } 247 cÚ¡ * $’um_Úe_¡ršg (* v ,  i ) 249 cÚ¡ * m = v ; 251  ( i =ð0è&& ( m [0] !ð0è? m : NULL ; 252 } } 254 cÚ¡ * $bdaddr2¡r (cÚ¡ bt_bdaddr_t * bd_addr ) 256  buf [ MAX_ADDR_STR_LEN ]; 258  `bt_bdaddr_t2¡r ( bd_addr , buf ); 259 } } 261  $bÚded_deviûs2¡ršg (* ¡r , * ´Ý ,  ´Ý_Ën ) 263  couÁ = ´Ý_Ën / ( bt_bdaddr_t ); 264 bt_bdaddr_t * addr = ´Ý ; 266 `¡rÿt ( ¡r , "{"); 268  couÁ --) { 269 `¡rÿt ( ¡r , `bdaddr2¡r ( addr )); 270 ià( couÁ ) 271 `¡rÿt ( ¡r , ", "); 272 addr ++; 275 `¡rÿt ( ¡r , "}"); 276 } } 278  $uuids2¡ršg (* ¡r , * ´Ý ,  ´Ý_Ën ) 280  couÁ = ´Ý_Ën / ( bt_uuid_t ); 281 bt_uuid_t * uuid = ´Ý ; 283 `¡rÿt ( ¡r , "{"); 285  couÁ --) { 286 `¡rÿt ( ¡r , `btuuid2¡r ( uuid -> uu )); 287 ià( couÁ ) 288 `¡rÿt ( ¡r , ", "); 289 uuid ++; 292 `¡rÿt ( ¡r , "}"); 293 } } 295 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 296  $loÿl_Ë_ã©2¡ršg (* ¡r , cÚ¡ bt_loÿl_Ë_ã©u»s_t * f ) 298 ušt16_t sÿn_num ; 300 ¡r +ð `¥rštf (str, "{\n"); 302 ¡r +ð `¥rštf (str, "Privacy supported: %s,\n", 303 f -> loÿl_´ivacy_’abËd ? "TRUE" : "FALSE"); 305 ¡r +ð `¥rštf (str, "Num of‡dvertising instances: %u,\n", 306 f -> max_adv_š¡ªû ); 308 ¡r +ð `¥rštf (str, "PRA offloading support: %s,\n", 309 f -> ½a_ofæßd_suµÜ‹d ? "TRUE" : "FALSE"); 311 ¡r +ð `¥rštf (str, "Num of offloaded IRKs: %u,\n", 312 f -> max_œk_li¡_size ); 314 ¡r +ð `¥rštf (str, "Num of offloaded scan filters: %u,\n", 315 f -> max_adv_fž‹r_suµÜ‹d ); 317 sÿn_num = ( f -> sÿn_»suÉ_¡Üage_size_hiby‹ << 8) + 318 f -> sÿn_»suÉ_¡Üage_size_loby‹ ; 320 ¡r +ð `¥rštf (¡r, "Num oàofæßded sÿÀ»suÉs: %u,\n", sÿn_num ); 322 ¡r +ð `¥rštf (str, "Activity &ƒnergy„eport support: %s\n", 323 f -> aùiv™y_’”gy_šfo_suµÜ‹d ? "TRUE" : "FALSE"); 325 `¥rštf ( ¡r , "}"); 326 } } 329 cÚ¡ * $brÝ”ty2¡r (cÚ¡ bt_´Ý”ty_t * ´Ý”ty ) 331 bt_£rviû_»cÜd_t * »c ; 332  buf [4096]; 333 * p ; 335 p = buf + `¥rštf (buf, "type=%s†en=%d val=", 336 `bt_´Ý”ty_ty³_t2¡r ( ´Ý”ty -> ty³ ), 337 ´Ý”ty -> Ën ); 339  ´Ý”ty -> ty³ ) { 340  BT_PROPERTY_BDNAME : 341  BT_PROPERTY_REMOTE_FRIENDLY_NAME : 342 `¢´štf ( p , ´Ý”ty -> Ën + 1, "%s", 343 (( bt_bdÇme_t *è ´Ý”ty -> v® )-> Çme ); 345  BT_PROPERTY_BDADDR : 346 `¥rštf ( p , "%s", `bdaddr2¡r (( bt_bdaddr_t *è ´Ý”ty -> v® )); 348  BT_PROPERTY_CLASS_OF_DEVICE : 349 `¥rštf ( p , "%06x", *((*è ´Ý”ty -> v® )); 351  BT_PROPERTY_TYPE_OF_DEVICE : 352 `¥rštf ( p , "%s", `bt_deviû_ty³_t2¡r ( 353 *(( bt_deviû_ty³_t *è ´Ý”ty -> v® ))); 355  BT_PROPERTY_REMOTE_RSSI : 356 `¥rštf ( p , "%d", *((*è ´Ý”ty -> v® )); 358  BT_PROPERTY_ADAPTER_SCAN_MODE : 359 `¥rštf ( p , "%s", 360 `bt_sÿn_mode_t2¡r (*(( bt_sÿn_mode_t *è ´Ý”ty -> v® ))); 362  BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT : 363 `¥rštf ( p , "%d", *((*è ´Ý”ty -> v® )); 365  BT_PROPERTY_ADAPTER_BONDED_DEVICES : 366 `bÚded_deviûs2¡ršg ( p , ´Ý”ty -> v® ,…rÝ”ty-> Ën ); 368  BT_PROPERTY_UUIDS : 369 `uuids2¡ršg ( p , ´Ý”ty -> v® ,…rÝ”ty-> Ën ); 371  BT_PROPERTY_SERVICE_RECORD : 372 »c = ´Ý”ty -> v® ; 373 `¥rštf ( p , "{%s, %d, %s}", `btuuid2¡r ( »c -> uuid . uu ), 374 »c -> chªÃl ,„ec-> Çme ); 376 #ià ANDROID_VERSION >ð `PLATFORM_VER (5, 0, 0) 377  BT_PROPERTY_LOCAL_LE_FEATURES : 378 `loÿl_Ë_ã©2¡ršg ( p , ´Ý”ty -> v® ); 381  BT_PROPERTY_REMOTE_VERSION_INFO : 382  BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP : 384 `¥rštf ( p , "%p", ´Ý”ty -> v® ); 388  buf ; 389 } } 391  #PROP_PREFIX "³rsi¡.sys.blu‘oÙh." ) 392  #PROP_PREFIX_RO "ro.blu‘oÙh." ) 394  $g‘_cÚfig (cÚ¡ * cÚfig_key , * v®ue , cÚ¡ * çÎback ) 396  key [ PROPERTY_KEY_MAX ]; 397  »t ; 399 ià( `¡¾’ ( cÚfig_key è+ ( PROP_PREFIX è> ( key )) 402 `¢´štf ( key , (key), PROP_PREFIX "%s", cÚfig_key ); 404 »t = `´Ý”ty_g‘ ( key , v®ue , ""); 405 ià( »t > 0) 406  »t ; 408 `¢´štf ( key , (key), PROP_PREFIX_RO "%s", cÚfig_key ); 410 »t = `´Ý”ty_g‘ ( key , v®ue , ""); 411 ià( »t > 0) 412  »t ; 414 ià(! çÎback ) 417  `´Ý”ty_g‘ ( çÎback , v®ue , ""); 418 } } @android/hal-utils.h 18  ~<’dŸn.h > 20  ~ 22  #MAX_UUID_STR_LEN 37 ) 23  #HAL_UUID_LEN 16 ) 24  #MAX_ADDR_STR_LEN 18 ) 26 cÚ¡  gBT_BASE_UUID [] = { 31 cÚ¡ * bt_uuid_t2¡r (cÚ¡ ušt8_t * uuid , * buf ); 32 cÚ¡ * btuuid2¡r (cÚ¡ ušt8_t * uuid ); 33 cÚ¡ * bt_bdaddr_t2¡r (cÚ¡ bt_bdaddr_t * bd_addr , * buf ); 34  ¡r2bt_bdaddr_t (cÚ¡ * ¡r , bt_bdaddr_t * bd_addr ); 35  ¡r2bt_uuid_t (cÚ¡ * ¡r , bt_uuid_t * uuid ); 36 cÚ¡ * brÝ”ty2¡r (cÚ¡ bt_´Ý”ty_t * ´Ý”ty ); 37 cÚ¡ * bdaddr2¡r (cÚ¡ bt_bdaddr_t * bd_addr ); 39  g‘_cÚfig (cÚ¡ * cÚfig_key , * v®ue , cÚ¡ * çÎback ); 73  sšt2¡r { 74  mv® ; 75 cÚ¡ * m¡r ; 78  št2¡r_fšdšt ( v , cÚ¡  št2¡r m []); 79  št2¡r_fšd¡r (cÚ¡ * ¡r , cÚ¡  št2¡r m []); 80 cÚ¡ * ’um_defšes (* v ,  i ); 81 cÚ¡ * ’um_¡ršgs (* v ,  i ); 82 cÚ¡ * ’um_Úe_¡ršg (* v ,  i ); 84  #TYPE_ENUM ( ty³ è((*è& __ ##ty³##2 ¡r [0]) ) 85  #DECINTMAP ( ty³ ) \ 86  št2¡r __ ## ty³ ##2 ¡r []; \ 87 cÚ¡ * ty³ ##2## `¡r Ñy³ v ); \ 88 ty³ ¡r ##2## `ty³ (const *str); \ 89 ) 90  #INTMAP ( ty³ , deá , defs ) \ 91 cÚ¡ * ty³ ##2## `¡r Ñy³ v ) \ 93  i = `št2¡r_fšdšt ((è v , __ ## ty³ ##2 ¡r ); \ 94  ( i < 0è? defs : __ ## ty³ ##2 ¡r [i].str; \ 96 ty³ ¡r ##2## `ty³ (const *str) \ 98  i = `št2¡r_fšd¡r ( ¡r , __ ## ty³ ##2str); \ 99  ( i < 0è? ( ty³ è deá : (ty³è( __ ##ty³##2 ¡r [i]. v® ); \ 101  št2¡r __ ## ty³ ##2 ¡r [] = { ) 103  #SINTMAP ( ty³ , deá , defs ) \ 104  št2¡r __ ## ty³ ##2 ¡r []; \ 105  šlše cÚ¡ * ty³ ##2## `¡r Ñy³ v ) \ 107  i = `št2¡r_fšdšt ((è v , __ ## ty³ ##2 ¡r ); \ 108  ( i < 0è? defs : __ ## ty³ ##2 ¡r [i].str; \ 110  šlše ty³ ¡r ##2## `ty³ (const *str) \ 112  i = `št2¡r_fšd¡r ( ¡r , __ ## ty³ ##2str); \ 113  ( i < 0è? ( ty³ è deá : (ty³è( __ ##ty³##2 ¡r [i]. v® ); \ 115  št2¡r __ ## ty³ ##2 ¡r [] = { ) 117  #ENDMAP {0, NULL } }; ) 120  #MELEMENT ( v , s è{v, s} ) 122  #DELEMENT ( s è{s, #s} ) 125 DECINTMAP ( bt_¡©us_t ); 126 DECINTMAP ( bt_¡©e_t ); 127 DECINTMAP ( bt_deviû_ty³_t ); 128 DECINTMAP ( bt_sÿn_mode_t ); 129 DECINTMAP ( bt_discov”y_¡©e_t ); 130 DECINTMAP ( bt_aþ_¡©e_t ); 131 DECINTMAP ( bt_bÚd_¡©e_t ); 132 DECINTMAP ( bt_s¥_v¬ŸÁ_t ); 133 DECINTMAP ( bt_´Ý”ty_ty³_t ); 134 DECINTMAP ( bt_cb_th»ad_evt ); 136  šlše ušt16_t g‘_Ë16 (cÚ¡ * ¤c ) 138 cÚ¡  __©Œibu‹__ (( ·cked )) { 139 ušt16_t gË16 ; 140 } * gp = ¤c ; 142  Ë16toh ( p -> Ë16 ); 145  šlše  put_Ë16 ( ušt16_t v® , * d¡ ) 147  __©Œibu‹__ (( ·cked )) { 148 ušt16_t gË16 ; 149 } * gp = d¡ ; 151 gp -> gË16 = htÞe16 ( v® ); @android/hal.h 18  ~ 19  ~ 20  ~ 21  ~ 22  ~ 23  ~ 24  ~ 25  ~ 26  ~ 27  ~ 28  ~ 30  #PLATFORM_VER ( a , b , c è(× << 16è| ( b << 8è| (c)) ) 32 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 33  ~ 34  ~ 37 btsock_š‹rçû_t * bt_g‘_sock‘_š‹rçû (); 38 bthh_š‹rçû_t * bt_g‘_hidho¡_š‹rçû (); 39 bª_š‹rçû_t * bt_g‘_·n_š‹rçû (); 40 bv_š‹rçû_t * bt_g‘_a2dp_š‹rçû (); 41 bŒc_š‹rçû_t * bt_g‘_avrý_š‹rçû (); 42 bthf_š‹rçû_t * bt_g‘_hªdsä“_š‹rçû (); 43 btg©t_š‹rçû_t * bt_g‘_g©t_š‹rçû (); 44 bthl_š‹rçû_t * bt_g‘_h—Éh_š‹rçû (); 46 #ià ANDROID_VERSION >ð PLATFORM_VER (5, 0, 0) 47 bŒc_ù¾_š‹rçû_t * bt_g‘_avrý_ù¾_š‹rçû (); 48 bthf_þ›Á_š‹rçû_t * bt_g‘_hf_þ›Á_š‹rçû (); 49 btmû_š‹rçû_t * bt_g‘_m­_þ›Á_š‹rçû (); 50 bv_š‹rçû_t * bt_g‘_a2dp_sšk_š‹rçû (); 53  bt_th»ad_assocŸ‹ (); 54  bt_th»ad_di§ssocŸ‹ (); @android/handsfree-client.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~<¡dboÞ.h > 30  ~<”ºo.h > 31  ~ 32  ~ 34  ~"lib/blu‘oÙh.h " 35  ~"lib/sdp.h " 36  ~"lib/sdp_lib.h " 37  ~"¤c/sdp-þ›Á.h " 38  ~"¤c/sh¬ed/hå.h " 39  ~"¤c/sh¬ed/queue.h " 40  ~"¤c/sh¬ed/utž.h " 41  ~"btio/btio.h " 42  ~"c.h " 43  ~"c-commÚ.h " 44  ~"¤c/log.h " 45  ~"utžs.h " 47  ~"blu‘oÙh.h " 48  ~"h®-msg.h " 49  ~"hªdsä“-þ›Á.h " 50  ~"sco.h " 52  #HFP_HF_CHANNEL 7 ) 54  #HFP_HF_FEAT_ECNR 0x00000001 ) 55  #HFP_HF_FEAT_3WAY 0x00000002 ) 56  #HFP_HF_FEAT_CLI 0x00000004 ) 57  #HFP_HF_FEAT_VR 0x00000008 ) 58  #HFP_HF_FEAT_RVC 0x00000010 ) 59  #HFP_HF_FEAT_ECS 0x00000020 ) 60  #HFP_HF_FEAT_ECC 0x00000040 ) 61  #HFP_HF_FEAT_CODEC 0x00000080 ) 62  #HFP_HF_FEAT_HF_IND 0x00000100 ) 63  #HFP_HF_FEAT_ESCO_S4_T2 0x00000200 ) 65  #HFP_AG_FEAT_3WAY 0x00000001 ) 66  #HFP_AG_FEAT_ECNR 0x00000002 ) 67  #HFP_AG_FEAT_VR 0x00000004 ) 68  #HFP_AG_FEAT_INBAND 0x00000008 ) 69  #HFP_AG_FEAT_VTAG 0x00000010 ) 70  #HFP_AG_FEAT_REJ_CALL 0x00000020 ) 71  #HFP_AG_FEAT_ECS 0x00000040 ) 72  #HFP_AG_FEAT_ECC 0x00000080 ) 73  #HFP_AG_FEAT_EXT_ERR 0x00000100 ) 74  #HFP_AG_FEAT_CODEC 0x00000200 ) 76  #HFP_HF_FEATURES ( HFP_HF_FEAT_ECNR | HFP_HF_FEAT_3WAY |\ 77 HFP_HF_FEAT_CLI | HFP_HF_FEAT_VR |\ 78 HFP_HF_FEAT_RVC | HFP_HF_FEAT_ECS |\ 79 HFP_HF_FEAT_ECC ) ) 81  #CVSD_OFFSET 0 ) 82  #MSBC_OFFSET 1 ) 83  #CODECS_COUNT ( MSBC_OFFSET + 1) ) 85  #CODEC_ID_CVSD 0x01 ) 86  #CODEC_ID_MSBC 0x02 ) 88  #MAX_NUMBER_LEN 33 ) 89  #MAX_OPERATOR_NAME_LEN 17 ) 91 ehå_šdiÿtÜ { 92 mHFP_INDICATOR_SERVICE = 0, 93 mHFP_INDICATOR_CALL , 94 mHFP_INDICATOR_CALLSETUP , 95 mHFP_INDICATOR_CALLHELD , 96 mHFP_INDICATOR_SIGNAL , 97 mHFP_INDICATOR_ROAM , 98 mHFP_INDICATOR_BATTCHG , 99 mHFP_INDICATOR_LAST 102 (* tc›v_func_t )( tušt8_t tv® ); 104  sšdiÿtÜ { 105 ušt8_t šdex ; 106 ušt32_t mš ; 107 ušt32_t max ; 108 ušt32_t v® ; 109 c›v_func_t cb ; 112  shå_codec { 113 ušt8_t ty³ ; 114 boÞ loÿl_suµÜ‹d ; 115 boÞ »mÙe_suµÜ‹d ; 118  sdeviû { 119 bdaddr_t bdaddr ; 120  hå_hf * hf ; 121 ušt8_t ¡©e ; 122 ušt8_t audio_¡©e ; 124 ušt8_t ÃgÙŸ‹d_codec ; 125 ušt32_t ã©u»s ; 126  hå_codec codecs [2]; 128  šdiÿtÜ ag_šd [ HFP_INDICATOR_LAST ]; 130 ušt32_t chld_ã©u»s ; 133 cÚ¡  hå_codec codecs_deçuÉs [] = { 134 { CODEC_ID_CVSD , Œue , çl£ }, 135 { CODEC_ID_MSBC , çl£ , false}, 136 } }; 138  bdaddr_t gad­‹r_addr ; 140  c * gh®_c = NULL ; 142  ušt32_t ghå_hf_ã©u»s = 0; 143  ušt32_t ghå_hf_»cÜd_id = 0; 144  queue * gdeviûs = NULL ; 145  GIOChªÃl * ghå_hf_£rv” = NULL ; 147  bt_sco * gsco = NULL ; 149  deviû * $fšd_deçuÉ_deviû () 151  `queue_³ek_h—d ( deviûs ); 152 } } 154  boÞ $m©ch_by_bdaddr (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 156 cÚ¡ bdaddr_t * addr1 = d©a ; 157 cÚ¡ bdaddr_t * addr2 = u£r_d©a ; 159  ! `bacmp ( addr1 , addr2 ); 160 } } 162  deviû * $fšd_deviû (cÚ¡ bdaddr_t * addr ) 164  `queue_fšd ( deviûs , m©ch_by_bdaddr , addr ); 165 } } 167  $š™_codecs ( deviû * dev ) 169 `memýy (& dev -> codecs , codecs_deçuÉs , (dev->codecs)); 171 ià( hå_hf_ã©u»s & HFP_HF_FEAT_CODEC ) 172 dev -> codecs [ MSBC_OFFSET ]. loÿl_suµÜ‹d = Œue ; 173 } } 175  deviû * $deviû_ü—‹ (cÚ¡ bdaddr_t * bdaddr ) 177  deviû * dev ; 179 dev = `Ãw0 ( deviû , 1); 180 ià(! dev ) 181  NULL ; 183 ià(! `queue_push_ž ( deviûs , dev )) { 184 `”rÜ ("hf-client: Could‚ot…ush dev onhe†ist"); 185 `ä“ ( dev ); 186  NULL ; 189 `baýy (& dev -> bdaddr , bdaddr); 190 dev -> ¡©e = HAL_HF_CLIENT_CONN_STATE_DISCONNECTED ; 191 dev -> audio_¡©e = HAL_HF_CLIENT_AUDIO_STATE_DISCONNECTED ; 193 `š™_codecs ( dev ); 195  dev ; 196 } } 198  deviû * $g‘_deviû (cÚ¡ bdaddr_t * addr ) 200  deviû * dev ; 202 dev = `fšd_deviû ( addr ); 203 ià( dev ) 204  dev ; 207 ià( `queue_i£m±y ( deviûs )) 208  `deviû_ü—‹ ( addr ); 210  NULL ; 211 } } 213  $deviû_£t_¡©e ( deviû * dev , ušt8_t ¡©e ) 215  h®_ev_hf_þ›Á_cÚn_¡©e ev ; 216  add»ss [18]; 218 ià( dev -> ¡©e == state) 221 `mem£t (& ev , 0, (ev)); 223 dev -> ¡©e = state; 225 `ba2¡r (& dev -> bdaddr , add»ss ); 226 `DBG ("deviû % ¡©%u", add»ss , ¡©e ); 228 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 229 ev . ¡©e = state; 231 ev . chld_ã© = dev -> chld_ã©u»s ; 232 ev . ³”_ã© = dev -> ã©u»s ; 234 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 235 HAL_EV_HF_CLIENT_CONN_STATE , ( ev ), &ev); 236 } } 238  $deviû_de¡roy ( deviû * dev ) 240 `deviû_£t_¡©e ( dev , HAL_HF_CLIENT_CONN_STATE_DISCONNECTED ); 241 `queue_»move ( deviûs , dev ); 243 ià( dev -> hf ) 244 `hå_hf_uÄef ( dev -> hf ); 246 `ä“ ( dev ); 247 } } 249  $hªdË_discÚÃù (cÚ¡ * buf , ušt16_t Ën ) 251 cÚ¡  h®_cmd_hf_þ›Á_discÚÃù * cmd = buf ; 252  deviû * dev ; 253 ušt32_t ¡©us ; 254 bdaddr_t bdaddr ; 255  addr [18]; 257 `DBG (""); 259 `ªdroid2bdaddr (& cmd -> bdaddr , &bdaddr); 261 `ba2¡r (& bdaddr , addr ); 262 `DBG ("DiscÚÃù %s", addr ); 264 dev = `g‘_deviû (& bdaddr ); 265 ià(! dev ) { 266 ¡©us = HAL_STATUS_FAILED ; 267  dÚe ; 270 ià( dev -> ¡©e =ð HAL_HF_CLIENT_CONN_STATE_DISCONNECTED ) { 271 ¡©us = HAL_STATUS_FAILED ; 272  dÚe ; 275 ià( dev -> ¡©e =ð HAL_HF_CLIENT_CONN_STATE_DISCONNECTING ) { 276 ¡©us = HAL_STATUS_SUCCESS ; 277  dÚe ; 280 ià( dev -> ¡©e =ð HAL_HF_CLIENT_CONN_STATE_CONNECTING ) { 281 `deviû_de¡roy ( dev ); 282 ¡©us = HAL_STATUS_SUCCESS ; 283  dÚe ; 286 ¡©us = `hå_hf_discÚÃù ( dev -> hf è? HAL_STATUS_SUCCESS : 287 HAL_STATUS_FAILED ; 289 ià( ¡©us ) 290 `deviû_£t_¡©e ( dev , HAL_HF_CLIENT_CONN_STATE_DISCONNECTING ); 292 dÚe : 294 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 295 HAL_OP_HF_CLIENT_DISCONNECT , ¡©us ); 296 } } 298  $£t_audio_¡©e ( deviû * dev , ušt8_t ¡©e ) 300  h®_ev_hf_þ›Á_audio_¡©e ev ; 301  add»ss [18]; 303 ià( dev -> audio_¡©e =ð ¡©e ) 306 dev -> audio_¡©e = ¡©e ; 308 `ba2¡r (& dev -> bdaddr , add»ss ); 309 `DBG ("deviû % audiØ¡©%u", add»ss , ¡©e ); 311 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 312 ev . ¡©e = state; 314 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 315 HAL_EV_HF_CLIENT_AUDIO_STATE , ( ev ), &ev); 316 } } 318  $bcc_cb ( hå_»suÉ »suÉ , hå_”rÜ cme_”r , 319 * u£r_d©a ) 321  deviû * dev = u£r_d©a ; 323 ià( »suÉ !ð HFP_RESULT_OK ) 324 `£t_audio_¡©e ( dev , HAL_HF_CLIENT_AUDIO_STATE_DISCONNECTED ); 325 } } 327  boÞ $codec_ÃgÙŸtiÚ_suµÜ‹d ( deviû * dev ) 329  ( dev -> ã©u»s & HFP_AG_FEAT_CODEC ) && 330 ( hå_hf_ã©u»s & HFP_HF_FEAT_CODEC ); 331 } } 333  boÞ $cÚÃù_sco ( deviû * dev ) 335 ià( `codec_ÃgÙŸtiÚ_suµÜ‹d ( dev )) 336  `hå_hf_£nd_commªd ( dev -> hf , bcc_cb , dev, 339  `bt_sco_cÚÃù ( sco , & dev -> bdaddr , BT_VOICE_CVSD_16BIT ); 340 } } 342  $hªdË_cÚÃù_audio (cÚ¡ * buf , ušt16_t Ën ) 344 cÚ¡  h®_cmd_hf_þ›Á_cÚÃù_audio * cmd = (*è buf ; 345  deviû * dev ; 346 ušt8_t ¡©us ; 347 bdaddr_t bdaddr ; 349 `DBG (""); 351 `ªdroid2bdaddr (& cmd -> bdaddr , &bdaddr); 353 dev = `fšd_deviû (& bdaddr ); 354 ià(! dev || dev-> ¡©e !ð HAL_HF_CLIENT_CONN_STATE_SLC_CONNECTED || 355 dev -> audio_¡©e !ð HAL_HF_CLIENT_AUDIO_STATE_DISCONNECTED ) { 356 `”rÜ ("hf-client: Cannot create SCO, check SLC or‡udio state"); 357 ¡©us = HAL_STATUS_FAILED ; 358  dÚe ; 361 ià( `cÚÃù_sco ( dev )) { 362 ¡©us = HAL_STATUS_SUCCESS ; 363 `£t_audio_¡©e ( dev , HAL_HF_CLIENT_AUDIO_STATE_CONNECTING ); 365 ¡©us = HAL_STATUS_FAILED ; 368 dÚe : 369 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 370 HAL_OP_HF_CLIENT_CONNECT_AUDIO , ¡©us ); 371 } } 373  $hªdË_discÚÃù_audio (cÚ¡ * buf , ušt16_t Ën ) 375 cÚ¡  h®_cmd_hf_þ›Á_discÚÃù_audio * cmd = (*è buf ; 376  deviû * dev ; 377 ušt8_t ¡©us ; 378 bdaddr_t bdaddr ; 380 `DBG (""); 382 `ªdroid2bdaddr (& cmd -> bdaddr , &bdaddr); 384 dev = `fšd_deviû (& bdaddr ); 385 ià(! dev || 386 dev -> audio_¡©e =ð HAL_HF_CLIENT_AUDIO_STATE_DISCONNECTED ) { 387 `”rÜ ("hf-client: Device‚ot found or‡udio‚ot connected"); 388 ¡©us = HAL_STATUS_FAILED ; 389  dÚe ; 392 `bt_sco_discÚÃù ( sco ); 393 ¡©us = HAL_STATUS_SUCCESS ; 395 dÚe : 396 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 397 HAL_OP_HF_CLIENT_DISCONNECT_AUDIO , ¡©us ); 398 } } 400  $cmd_com¶‘e_cb ( hå_»suÉ »suÉ , hå_”rÜ cme_”r , 401 * u£r_d©a ) 403  h®_ev_hf_þ›Á_commªd_com¶‘e ev ; 405 `DBG (""); 406 `mem£t (& ev , 0, (ev)); 408  »suÉ ) { 409  HFP_RESULT_OK : 410 ev . ty³ = HAL_HF_CLIENT_CMD_COMP_OK ; 412  HFP_RESULT_NO_CARRIER : 413 ev . ty³ = HAL_HF_CLIENT_CMD_COMP_ERR_NO_CARRIER ; 415  HFP_RESULT_ERROR : 416 ev . ty³ = HAL_HF_CLIENT_CMD_COMP_ERR ; 418  HFP_RESULT_BUSY : 419 ev . ty³ = HAL_HF_CLIENT_CMD_COMP_ERR_BUSY ; 421  HFP_RESULT_NO_ANSWER : 422 ev . ty³ = HAL_HF_CLIENT_CMD_COMP_ERR_NO_ANSWER ; 424  HFP_RESULT_DELAYED : 425 ev . ty³ = HAL_HF_CLIENT_CMD_COMP_ERR_DELAYED ; 427  HFP_RESULT_BLACKLISTED : 428 ev . ty³ = HAL_HF_CLIENT_CMD_COMP_ERR_BACKLISTED ; 430  HFP_RESULT_CME_ERROR : 431 ev . ty³ = HAL_HF_CLIENT_CMD_COMP_ERR_CME ; 432 ev . cme = cme_”r ; 434  HFP_RESULT_CONNECT : 435  HFP_RESULT_RING : 436  HFP_RESULT_NO_DIALTONE : 438 `”rÜ ("hf-þ›Á: UnknowÀ”rÜ cod%d", »suÉ ); 439 ev . ty³ = HAL_HF_CLIENT_CMD_COMP_ERR ; 443 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 444 HAL_EV_CLIENT_COMMAND_COMPLETE , ( ev ), &ev); 445 } } 447  $hªdË_¡¬t_vr (cÚ¡ * buf , ušt16_t Ën ) 449  deviû * dev ; 450 ušt8_t ¡©us ; 452 `DBG (""); 454 dev = `fšd_deçuÉ_deviû (); 455 ià(! dev ) { 456 ¡©us = HAL_STATUS_FAILED ; 457  dÚe ; 460 ià( `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , "AT+BVRA=1")) 461 ¡©us = HAL_STATUS_SUCCESS ; 463 ¡©us = HAL_STATUS_FAILED ; 465 dÚe : 466 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 467 HAL_OP_HF_CLIENT_START_VR , ¡©us ); 468 } } 470  $hªdË_¡Ý_vr (cÚ¡ * buf , ušt16_t Ën ) 472  deviû * dev ; 473 ušt8_t ¡©us ; 475 `DBG (""); 477 dev = `fšd_deçuÉ_deviû (); 478 ià(! dev ) { 479 ¡©us = HAL_STATUS_FAILED ; 480  dÚe ; 483 ià( `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , "AT+BVRA=0")) 484 ¡©us = HAL_STATUS_SUCCESS ; 486 ¡©us = HAL_STATUS_FAILED ; 488 dÚe : 489 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 490 HAL_OP_HF_CLIENT_STOP_VR , ¡©us ); 491 } } 493  $hªdË_vÞume_cÚŒÞ (cÚ¡ * buf , ušt16_t Ën ) 495 cÚ¡  h®_cmd_hf_þ›Á_vÞume_cÚŒÞ * cmd = buf ; 496  deviû * dev ; 497 ušt8_t ¡©us ; 498 ušt8_t vÞ ; 499 boÞ »t ; 501 `DBG (""); 503 dev = `fšd_deçuÉ_deviû (); 504 ià(! dev ) { 505 ¡©us = HAL_STATUS_FAILED ; 506  dÚe ; 513 vÞ = cmd -> vÞume > 15 ? 15 : cmd->volume; 515  cmd -> ty³ ) { 516  HF_CLIENT_VOLUME_TYPE_SPEAKER : 517 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , 518 "AT+VGS=%u", vÞ ); 520  HF_CLIENT_VOLUME_TYPE_MIC : 521 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , 522 "AT+VGM=%u", vÞ ); 525 »t = çl£ ; 529 ¡©us = »t ? HAL_STATUS_SUCCESS : HAL_STATUS_FAILED ; 531 dÚe : 532 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 533 HAL_OP_HF_CLIENT_VOLUME_CONTROL , 534 ¡©us ); 535 } } 537  $hªdË_dŸl (cÚ¡ * buf , ušt16_t Ën ) 539 cÚ¡  h®_cmd_hf_þ›Á_dŸl * cmd = buf ; 540  deviû * dev ; 541 ušt8_t ¡©us ; 542 boÞ »t ; 544 `DBG (""); 546 ià( Ën !ð(* cmd è+ cmd-> numb”_Ën ) 547  çžed ; 549 dev = `fšd_deçuÉ_deviû (); 550 ià(! dev ) { 551 ¡©us = HAL_STATUS_FAILED ; 552  dÚe ; 555 ià( cmd -> numb”_Ën > 0) { 556 ià( cmd -> numb” [cmd-> numb”_Ën - 1] != '\0') 557  çžed ; 559 `DBG ("DŸlšg %s", cmd -> numb” ); 561 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , 562 "ATD%s;", cmd -> numb” ); 564 `DBG ("Redialing"); 566 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , 570 ¡©us = »t ? HAL_STATUS_SUCCESS : HAL_STATUS_FAILED ; 572 dÚe : 573 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 574 HAL_OP_HF_CLIENT_DIAL , ¡©us ); 578 çžed : 579 `”rÜ ("M®fÜmed‚umb” d©a, siz(%u by‹s),”mš©šg", Ën ); 580 `¿i£ ( SIGTERM ); 581 } } 583  $hªdË_dŸl_memÜy (cÚ¡ * buf , ušt16_t Ën ) 585 cÚ¡  h®_cmd_hf_þ›Á_dŸl_memÜy * cmd = buf ; 586  deviû * dev ; 587 ušt8_t ¡©us ; 589 `DBG (""); 591 dev = `fšd_deçuÉ_deviû (); 592 ià(! dev ) { 593 ¡©us = HAL_STATUS_FAILED ; 594  dÚe ; 598 ià( cmd -> loÿtiÚ < 0) { 599 ¡©us = HAL_STATUS_FAILED ; 600  dÚe ; 603 ià( `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , "ATD>%d;", 604 cmd -> loÿtiÚ )) 605 ¡©us = HAL_STATUS_SUCCESS ; 607 ¡©us = HAL_STATUS_FAILED ; 609 dÚe : 610 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 611 HAL_OP_HF_CLIENT_DIAL_MEMORY , ¡©us ); 612 } } 614  $hªdË_ÿÎ_aùiÚ (cÚ¡ * buf , ušt16_t Ën ) 616 cÚ¡  h®_cmd_hf_þ›Á_ÿÎ_aùiÚ * cmd = buf ; 617  deviû * dev ; 618 ušt8_t ¡©us ; 619 boÞ »t ; 621 `DBG (""); 623 dev = `fšd_deçuÉ_deviû (); 624 ià(! dev ) { 625 ¡©us = HAL_STATUS_FAILED ; 626  dÚe ; 629  cmd -> aùiÚ ) { 630  HAL_HF_CLIENT_ACTION_CHLD_0 : 631 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , 634  HAL_HF_CLIENT_ACTION_CHLD_1 : 635 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , 638  HAL_HF_CLIENT_ACTION_CHLD_2 : 639 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , 640 NULL , "AT+CHLD=2"); 642  HAL_HF_CLIENT_ACTION_CHLD_3 : 643 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , 646  HAL_HF_CLIENT_ACTION_CHLD_4 : 647 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , 650  HAL_HF_CLIENT_ACTION_CHLD_1x : 652 ià( cmd -> šdex <= 0) 653 »t = çl£ ; 655 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , 656 NULL , "AT+CHLD=1%d", cmd -> šdex ); 658  HAL_HF_CLIENT_ACTION_CHLD_2x : 660 ià( cmd -> šdex <= 0) 661 »t = çl£ ; 663 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , 664 NULL , "AT+CHLD=2%d", cmd -> šdex ); 666  HAL_HF_CLIENT_ACTION_ATA : 667 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , 670  HAL_HF_CLIENT_ACTION_CHUP : 671 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , 674  HAL_HF_CLIENT_ACTION_BRTH_0 : 675 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , 678  HAL_HF_CLIENT_ACTION_BRTH_1 : 679 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , 682  HAL_HF_CLIENT_ACTION_BRTH_2 : 683 »t = `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , 687 `”rÜ ("hf-þ›Á: UnknowÀaùiÚ %d", cmd -> aùiÚ ); 688 »t = çl£ ; 692 ¡©us = »t ? HAL_STATUS_SUCCESS : HAL_STATUS_FAILED ; 694 dÚe : 695 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 696 HAL_OP_HF_CLIENT_CALL_ACTION , ¡©us ); 697 } } 699  $hªdË_qu”y_cu¼’t_ÿÎs (cÚ¡ * buf , ušt16_t Ën ) 701  deviû * dev ; 702 ušt8_t ¡©us ; 704 `DBG (""); 706 dev = `fšd_deçuÉ_deviû (); 707 ià(! dev ) { 708 ¡©us = HAL_STATUS_FAILED ; 709  dÚe ; 712 ià( `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , "AT+CLCC")) 713 ¡©us = HAL_STATUS_SUCCESS ; 715 ¡©us = HAL_STATUS_FAILED ; 717 dÚe : 718 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 719 HAL_OP_HF_CLIENT_QUERY_CURRENT_CALLS , 720 ¡©us ); 721 } } 723  $hªdË_qu”y_Ý”©Ü_Çme (cÚ¡ * buf , ušt16_t Ën ) 725  deviû * dev ; 726 ušt8_t ¡©us ; 728 `DBG (""); 730 dev = `fšd_deçuÉ_deviû (); 731 ià(! dev ) { 732 ¡©us = HAL_STATUS_FAILED ; 733  dÚe ; 736 ià( `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , "AT+COPS?")) 737 ¡©us = HAL_STATUS_SUCCESS ; 739 ¡©us = HAL_STATUS_FAILED ; 741 dÚe : 742 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 743 HAL_OP_HF_CLIENT_QUERY_OPERATOR_NAME , 744 ¡©us ); 745 } } 747  $hªdË_»Œ›ve_subsü_šfo (cÚ¡ * buf , ušt16_t Ën ) 749  deviû * dev ; 750 ušt8_t ¡©us ; 752 `DBG (""); 754 dev = `fšd_deçuÉ_deviû (); 755 ià(! dev ) { 756 ¡©us = HAL_STATUS_FAILED ; 757  dÚe ; 760 ià( `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , "AT+CNUM")) 761 ¡©us = HAL_STATUS_SUCCESS ; 763 ¡©us = HAL_STATUS_FAILED ; 765 dÚe : 766 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 767 HAL_OP_HF_CLIENT_RETRIEVE_SUBSCR_INFO , 768 ¡©us ); 769 } } 771  $hªdË_£nd_dtmf (cÚ¡ * buf , ušt16_t Ën ) 773 cÚ¡  h®_cmd_hf_þ›Á_£nd_dtmf * cmd = buf ; 774  deviû * dev ; 775 ušt8_t ¡©us ; 777 dev = `fšd_deçuÉ_deviû (); 778 ià(! dev ) { 779 ¡©us = HAL_STATUS_FAILED ; 780  dÚe ; 783 ià( `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , "AT+VTS=%c", 784 (è cmd -> tÚe )) 785 ¡©us = HAL_STATUS_SUCCESS ; 787 ¡©us = HAL_STATUS_FAILED ; 789 dÚe : 790 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 791 HAL_OP_HF_CLIENT_SEND_DTMF , ¡©us ); 792 } } 794  $hªdË_g‘_Ï¡_vc_g_num (cÚ¡ * buf , ušt16_t Ën ) 796  deviû * dev ; 797 ušt8_t ¡©us ; 799 dev = `fšd_deçuÉ_deviû (); 800 ià(! dev ) { 801 ¡©us = HAL_STATUS_FAILED ; 802  dÚe ; 805 ià( `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , "AT+BINP=1")) 806 ¡©us = HAL_STATUS_SUCCESS ; 808 ¡©us = HAL_STATUS_FAILED ; 810 dÚe : 811 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 812 HAL_OP_HF_CLIENT_GET_LAST_VOICE_TAG_NUM , ¡©us ); 813 } } 815  $discÚÃù_w©ch (* u£r_d©a ) 817 `DBG (""); 819 `deviû_de¡roy ( u£r_d©a ); 820 } } 822  $¦c_”rÜ ( deviû * dev ) 824 `”rÜ ("hf-client: Could‚ot create SLC - dropping connection"); 825 `hå_hf_discÚÃù ( dev -> hf ); 826 } } 828  $£t_chld_ã© ( deviû * dev , * ã© ) 830 `DBG (" %s", ã© ); 832 ià( `¡rcmp ( ã© , "0") == 0) 833 dev -> chld_ã©u»s |ð HAL_HF_CLIENT_CHLD_FEAT_REL ; 834 ià( `¡rcmp ( ã© , "1") == 0) 835 dev -> chld_ã©u»s |ð HAL_HF_CLIENT_CHLD_FEAT_REL_ACC ; 836 ià( `¡rcmp ( ã© , "1x") == 0) 837 dev -> chld_ã©u»s |ð HAL_HF_CLIENT_CHLD_FEAT_REL_X ; 838 ià( `¡rcmp ( ã© , "2") == 0) 839 dev -> chld_ã©u»s |ð HAL_HF_CLIENT_CHLD_FEAT_HOLD_ACC ; 840 ià( `¡rcmp ( ã© , "2x") == 0) 841 dev -> chld_ã©u»s |ð HAL_HF_CLIENT_CHLD_FEAT_PRIV_X ; 842 ià( `¡rcmp ( ã© , "3") == 0) 843 dev -> chld_ã©u»s |ð HAL_HF_CLIENT_CHLD_FEAT_MERGE ; 844 ià( `¡rcmp ( ã© , "4") == 0) 845 dev -> chld_ã©u»s |ð HAL_HF_CLIENT_CHLD_FEAT_MERGE_DETACH ; 846 } } 848  $g‘_loÿl_codecs_¡ršg ( deviû * dev , * buf , 849 ušt8_t Ën ) 851  i ; 852 ušt8_t off£t ; 854 `mem£t ( buf , 0, Ën ); 855 off£t = 0; 857  i = 0; i < CODECS_COUNT ; i++) { 858  c [8]; 859  l ; 861 ià(! dev -> codecs [ i ]. loÿl_suµÜ‹d ) 864 `mem£t ( c , 0, (c)); 866 l = `¥rštf ( c , "%d,", dev -> codecs [ i ]. ty³ ); 868 ià( l > ( Ën - off£t - 1)) { 869 `”rÜ ("hf-client: Codecs cannot fit into buffer"); 873 `¡rÿt (& buf [ off£t ], c ); 874 off£t +ð l ; 876 } } 878  $bv¿_cb ( hå_cÚ‹xt * cÚ‹xt , * u£r_d©a ) 880  h®_ev_hf_þ›Á_vr_¡©e ev ; 881  v® ; 883 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || val > 1) 886 ev . ¡©e = v® ? HAL_HF_CLIENT_VR_STARTED : HAL_HF_CLIENT_VR_STOPPED ; 888 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 889 HAL_EV_HF_CLIENT_VR_STATE , ( ev ), &ev); 890 } } 892  $vgm_cb ( hå_cÚ‹xt * cÚ‹xt , * u£r_d©a ) 894  h®_ev_hf_þ›Á_vÞume_chªged ev ; 895  v® ; 897 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || val > 15) 900 ev . ty³ = HF_CLIENT_VOLUME_TYPE_MIC ; 901 ev . vÞume = v® ; 903 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 904 HAL_EV_HF_CLIENT_VR_STATE , ( ev ), &ev); 905 } } 907  $vgs_cb ( hå_cÚ‹xt * cÚ‹xt , * u£r_d©a ) 909  h®_ev_hf_þ›Á_vÞume_chªged ev ; 910  v® ; 912 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || val > 15) 915 ev . ty³ = HF_CLIENT_VOLUME_TYPE_SPEAKER ; 916 ev . vÞume = v® ; 918 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 919 HAL_EV_CLIENT_VOLUME_CHANGED , ( ev ), &ev); 920 } } 922  $b¹h_cb ( hå_cÚ‹xt * cÚ‹xt , * u£r_d©a ) 924  h®_ev_hf_þ›Á_»¥Ú£_ªd_hÞd_¡©us ev ; 925  v® ; 927 `DBG (""); 929 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || 930 v® > HAL_HF_CLIENT_RESP_AND_HOLD_STATUS_REJECT ) { 931 `”rÜ ("hf-client: incorrect BTRH„esponse "); 935 ev . ¡©us = v® ; 937 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 938 HAL_EV_HF_CLIENT_RESPONSE_AND_HOLD_STATUS , 939 ( ev ), &ev); 940 } } 942  $þcc_cb ( hå_cÚ‹xt * cÚ‹xt , * u£r_d©a ) 944 ušt8_t buf [ IPC_MTU ]; 945  h®_ev_hf_þ›Á_cu¼’t_ÿÎ * ev = (*è buf ; 946  v® ; 948 `DBG (""); 950 `mem£t ( buf , 0, (buf)); 952 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® )) { 953 `”rÜ ("hf-client: Could‚ot get index"); 957 ev -> šdex = v® ; 959 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || 960 v® > HAL_HF_CLIENT_DIRECTION_INCOMING ) { 961 `”rÜ ("hf-client: Could‚ot get direction"); 965 ev -> dœeùiÚ = v® ; 967 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || 968 v® > HAL_HF_CLIENT_CALL_STATE_HELD_BY_RESP_AND_HOLD ) { 969 `”rÜ ("hf-client: Could‚ot get callstate"); 973 ev -> ÿÎ_¡©e = v® ; 976 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® )) { 977 `”rÜ ("hf-client: Could‚ot get mode"); 981 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || val > 1) { 982 `”rÜ ("hf-client: Could‚ot get multiparty"); 986 ev -> muɬty = v® ; 988 ià( `hå_cÚ‹xt_g‘_¡ršg ( cÚ‹xt , (*è& ev -> numb” [0], 989 MAX_NUMBER_LEN )) 990 ev -> numb”_Ën = `¡¾’ ((*èev-> numb” ) + 1; 992 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 993 HAL_EV_HF_CLIENT_CURRENT_CALL , 994 (* ev è+ƒv-> numb”_Ën ,ƒv); 995 } } 997  $c›v_cb ( hå_cÚ‹xt * cÚ‹xt , * u£r_d©a ) 999  deviû * dev = u£r_d©a ; 1000  šdex , v® ; 1001  i ; 1003 `DBG (""); 1005 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & šdex )) 1008 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® )) 1011  i = 0; i < HFP_INDICATOR_LAST ; i++) { 1012 ià( dev -> ag_šd [ i ]. šdex != index) 1015 ià( dev -> ag_šd [ i ]. cb ) { 1016 dev -> ag_šd [ i ]. v® = val; 1017 dev -> ag_šd [ i ]. `cb ( v® ); 1021 } } 1023  $úum_cb ( hå_cÚ‹xt * cÚ‹xt , * u£r_d©a ) 1025 ušt8_t buf [ IPC_MTU ]; 1026  h®_ev_hf_þ›Á_subsüib”_£rviû_šfo * ev = (*è buf ; 1027  £rviû ; 1029 `DBG (""); 1032 `hå_cÚ‹xt_sk_f›ld ( cÚ‹xt ); 1034 ià(! `hå_cÚ‹xt_g‘_¡ršg ( cÚ‹xt , (*è& ev -> Çme [0], 1035 MAX_NUMBER_LEN )) { 1036 `”rÜ ("hf-client: Could‚ot get‚umber"); 1040 ev -> Çme_Ën = `¡¾’ ((*è&ev-> Çme [0]) + 1; 1043 `hå_cÚ‹xt_sk_f›ld ( cÚ‹xt ); 1046 `hå_cÚ‹xt_sk_f›ld ( cÚ‹xt ); 1048 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & £rviû )) 1051  £rviû ) { 1053 ev -> ty³ = HAL_HF_CLIENT_SUBSCR_TYPE_VOICE ; 1056 ev -> ty³ = HAL_HF_CLIENT_SUBSCR_TYPE_FAX ; 1059 ev -> ty³ = HAL_HF_CLIENT_SUBSCR_TYPE_UNKNOWN ; 1063 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 1064 HAL_EV_CLIENT_SUBSCRIBER_SERVICE_INFO , 1065 (* ev è+ƒv-> Çme_Ën ,ƒv); 1066 } } 1068  $cÝs_cb ( hå_cÚ‹xt * cÚ‹xt , * u£r_d©a ) 1070 ušt8_t buf [ IPC_MTU ]; 1071  h®_ev_hf_þ›Á_Ý”©Ü_Çme * ev = (*è buf ; 1072  fÜm© ; 1074 `DBG (""); 1077 `hå_cÚ‹xt_sk_f›ld ( cÚ‹xt ); 1079 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & fÜm© )) 1082 ià( fÜm© != 0) 1083 `šfo ("hf-client: Not correct string format in +COSP"); 1085 ià(! `hå_cÚ‹xt_g‘_¡ršg ( cÚ‹xt , (*è& ev -> Çme [0], 1086 MAX_OPERATOR_NAME_LEN )) { 1087 `”rÜ ("hf-client: incorrect COPS„esponse"); 1091 ev -> Çme_Ën = `¡¾’ ((*è&ev-> Çme [0]) + 1; 1093 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 1094 HAL_EV_HF_CLIENT_OPERATOR_NAME , 1095 (* ev è+ƒv-> Çme_Ën ,ƒv); 1096 } } 1098  $bšp_cb ( hå_cÚ‹xt * cÚ‹xt , * u£r_d©a ) 1100 ušt8_t buf [ IPC_MTU ]; 1101  h®_ev_hf_þ›Á_Ï¡_void_ÿÎ_g_num * ev = (*è buf ; 1102  numb” [33]; 1104 `DBG (""); 1106 ià(! `hå_cÚ‹xt_g‘_¡ršg ( cÚ‹xt , numb” , (number))) { 1107 `”rÜ ("hf-client: incorrect COPS„esponse"); 1111 ev -> numb”_Ën = `¡¾’ ( numb” ) + 1; 1112 `memýy ( ev -> numb” ,‚umb”,ƒv-> numb”_Ën ); 1114 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 1115 HAL_EV_CLIENT_LAST_VOICE_CALL_TAG_NUM , 1116 (* ev è+ƒv-> numb”_Ën ,ƒv); 1117 } } 1119  boÞ $is_codec_suµÜ‹d_loÿly ( deviû * dev , ušt8_t codec ) 1121  i ; 1123  i = 0; i < CODECS_COUNT ; i++) { 1124 ià( dev -> codecs [ i ]. ty³ !ð codec ) 1127  dev -> codecs [ i ]. loÿl_suµÜ‹d ; 1130  çl£ ; 1131 } } 1133  $bcs_»¥ ( hå_»suÉ »suÉ , hå_”rÜ cme_”r , 1134 * u£r_d©a ) 1136 ià( »suÉ !ð HFP_RESULT_OK ) 1137 `”rÜ ("hf-þ›Á: E¼Ü oÀAT+BCS (”r=%u)", »suÉ ); 1138 } } 1140  $bcs_cb ( hå_cÚ‹xt * cÚ‹xt , * u£r_d©a ) 1142  deviû * dev = u£r_d©a ; 1143  codec ; 1144  codecs_¡ršg [8]; 1146 `DBG (""); 1148 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & codec )) 1149  çžed ; 1151 ià(! `is_codec_suµÜ‹d_loÿly ( dev , codec )) 1152  çžed ; 1154 dev -> ÃgÙŸ‹d_codec = codec ; 1156 `hå_hf_£nd_commªd ( dev -> hf , bcs_»¥ , dev, "AT+BCS=%u", codec ); 1160 çžed : 1161 `”rÜ ("hf-client: Could‚ot get codec"); 1163 `g‘_loÿl_codecs_¡ršg ( dev , codecs_¡ršg , (codecs_string)); 1165 `hå_hf_£nd_commªd ( dev -> hf , bcs_»¥ , dev, "AT+BCS=%s", codecs_¡ršg ); 1166 } } 1168  $¦c_com¶‘ed ( deviû * dev ) 1170  i ; 1171  šdiÿtÜ * ag_šd ; 1173 `DBG (""); 1175 ag_šd = dev ->ag_ind; 1177 `deviû_£t_¡©e ( dev , HAL_HF_CLIENT_CONN_STATE_SLC_CONNECTED ); 1180  i = 0; i < HFP_INDICATOR_LAST ; i++) { 1181 ià(! ag_šd [ i ]. cb ) 1184 ag_šd [ i ]. `cb ×g_šd[i]. v® ); 1189 `hå_hf_»gi¡” ( dev -> hf , bv¿_cb , "+BRVA", dev, NULL ); 1190 `hå_hf_»gi¡” ( dev -> hf , vgm_cb , "+VGM", dev, NULL ); 1191 `hå_hf_»gi¡” ( dev -> hf , vgs_cb , "+VGS", dev, NULL ); 1192 `hå_hf_»gi¡” ( dev -> hf , b¹h_cb , "+BTRH", dev, NULL ); 1193 `hå_hf_»gi¡” ( dev -> hf , þcc_cb , "+CLCC", dev, NULL ); 1194 `hå_hf_»gi¡” ( dev -> hf , c›v_cb , "+CIEV", dev, NULL ); 1195 `hå_hf_»gi¡” ( dev -> hf , cÝs_cb , "+COPS", dev, NULL ); 1196 `hå_hf_»gi¡” ( dev -> hf , úum_cb , "+CNUM", dev, NULL ); 1197 `hå_hf_»gi¡” ( dev -> hf , bšp_cb , "+BINP", dev, NULL ); 1198 `hå_hf_»gi¡” ( dev -> hf , bcs_cb , "+BCS", dev, NULL ); 1200 ià(! `hå_hf_£nd_commªd ( dev -> hf , cmd_com¶‘e_cb , NULL , "AT+COPS=3,0")) 1201 `šfo ("hf-client: Could‚ot send AT+COPS=3,0"); 1202 } } 1204  $¦c_chld_cb ( hå_cÚ‹xt * cÚ‹xt , * u£r_d©a ) 1206  deviû * dev = u£r_d©a ; 1207  ã© [3]; 1209 ià(! `hå_cÚ‹xt_Ý’_cÚš” ( cÚ‹xt )) 1210  çžed ; 1212  `hå_cÚ‹xt_g‘_unquÙed_¡ršg ( cÚ‹xt , ã© , (feat))) 1213 `£t_chld_ã© ( dev , ã© ); 1215 ià(! `hå_cÚ‹xt_þo£_cÚš” ( cÚ‹xt )) 1216  çžed ; 1220 çžed : 1221 `”rÜ ("hf-client: Error on CHLD„esponse"); 1222 `¦c_”rÜ ( dev ); 1223 } } 1225  $¦c_chld_»¥ ( hå_»suÉ »suÉ , hå_”rÜ cme_”r , 1226 * u£r_d©a ) 1228  deviû * dev = u£r_d©a ; 1230 `DBG (""); 1232 `hå_hf_uÄegi¡” ( dev -> hf , "+CHLD"); 1234 ià( »suÉ !ð HFP_RESULT_OK ) { 1235 `”rÜ ("hf-þ›Á: CHLDƒ¼Ü: %d", »suÉ ); 1236 `¦c_”rÜ ( dev ); 1240 `¦c_com¶‘ed ( dev ); 1241 } } 1243  $¦c_cm”_»¥ ( hå_»suÉ »suÉ , hå_”rÜ cme_”r , 1244 * u£r_d©a ) 1246  deviû * dev = u£r_d©a ; 1248 `DBG (""); 1250 ià( »suÉ !ð HFP_RESULT_OK ) { 1251 `”rÜ ("hf-þ›Á: CMERƒ¼Ü: %d", »suÉ ); 1252  çžed ; 1256 ià(!( dev -> ã©u»s & HFP_AG_FEAT_3WAY )) { 1257 `¦c_com¶‘ed ( dev ); 1261 ià(! `hå_hf_»gi¡” ( dev -> hf , ¦c_chld_cb , "+CHLD", dev, NULL )) { 1262 `”rÜ ("hf-client: Could‚ot„egister +CHLD"); 1263  çžed ; 1266 ià(! `hå_hf_£nd_commªd ( dev -> hf , ¦c_chld_»¥ , dev, "AT+CHLD=?")) { 1267 `”rÜ ("hf-client: Could‚ot send AT+CHLD"); 1268  çžed ; 1273 çžed : 1274 `¦c_”rÜ ( dev ); 1275 } } 1277  $£t_šdiÿtÜ_v®ue ( ušt8_t šdex ,  v® , 1278  šdiÿtÜ * ag_šd ) 1280  i ; 1282  i = 0; i < HFP_INDICATOR_LAST ; i++) { 1283 ià( šdex !ð ag_šd [ i ].index) 1286 ag_šd [ i ]. v® = val; 1287 ag_šd [ i ]. `cb ( v® ); 1290 } } 1292  $¦c_cšd_¡©us_cb ( hå_cÚ‹xt * cÚ‹xt , 1293 * u£r_d©a ) 1295  deviû * dev = u£r_d©a ; 1296 ušt8_t šdex = 1; 1298 `DBG (""); 1300  `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) { 1301 ušt32_t v® ; 1303 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® )) { 1304 `”rÜ ("hf-client: Error on CIND status„esponse"); 1308 `£t_šdiÿtÜ_v®ue ( šdex ++, v® , dev -> ag_šd ); 1310 } } 1312  $¦c_cšd_¡©us_»¥ ( hå_»suÉ »suÉ , 1313 hå_”rÜ cme_”r , 1314 * u£r_d©a ) 1316  deviû * dev = u£r_d©a ; 1318 `DBG (""); 1320 `hå_hf_uÄegi¡” ( dev -> hf , "+CIND"); 1322 ià( »suÉ !ð HFP_RESULT_OK ) { 1323 `”rÜ ("hf-þ›Á: CINDƒ¼Ü: %d", »suÉ ); 1324  çžed ; 1328 ià(! `hå_hf_£nd_commªd ( dev -> hf , ¦c_cm”_»¥ , dev, 1330 `”rÜ ("hf-client: Counld‚ot send AT+CMER"); 1331  çžed ; 1336 çžed : 1337 `¦c_”rÜ ( dev ); 1338 } } 1340  $¦c_cšd_»¥ ( hå_»suÉ »suÉ , hå_”rÜ cme_”r , 1341 * u£r_d©a ) 1343  deviû * dev = u£r_d©a ; 1345 `DBG (""); 1347 `hå_hf_uÄegi¡” ( dev -> hf , "+CIND"); 1349 ià( »suÉ !ð HFP_RESULT_OK ) { 1350 `”rÜ ("hf-þ›Á: CINDƒ¼Ü: %d", »suÉ ); 1351  çžed ; 1355 ià(! `hå_hf_»gi¡” ( dev -> hf , ¦c_cšd_¡©us_cb , "+CIND", dev, 1356 NULL )) { 1357 `”rÜ ("hf-client: Counld‚ot„egister +CIND"); 1358  çžed ; 1361 ià(! `hå_hf_£nd_commªd ( dev -> hf , ¦c_cšd_¡©us_»¥ , dev, 1363 `”rÜ ("hf-client: Counld‚ot send AT+CIND?"); 1364  çžed ; 1369 çžed : 1370 `¦c_”rÜ ( dev ); 1371 } } 1373  $c›v_£rviû_cb ( ušt8_t v® ) 1375  h®_ev_hf_þ›Á_Ãt_¡©e ev ; 1377 `DBG (""); 1379 ià( v® > HAL_HF_CLIENT_NET_ROAMING_TYPE_ROAMING ) { 1380 `”rÜ ("hf-þ›Á: IncÜ»ù s‹ %u:", v® ); 1384 ev . ¡©e = v® ; 1386 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 1387 HAL_EV_HF_CLIENT_NET_STATE , ( ev ), &ev); 1388 } } 1390  $c›v_ÿÎ_cb ( ušt8_t v® ) 1392  h®_ev_hf_þ›Á_ÿÎ_šdiÿtÜ ev ; 1394 `DBG (""); 1396 ià( v® > HAL_HF_CLIENT_CALL_IND_CALL_IN_PROGERSS ) { 1397 `”rÜ ("hf-þ›Á: IncÜ»ù c®È¡©%u:", v® ); 1401 ev . ÿÎ = v® ; 1403 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 1404 HAL_EV_HF_CLIENT_CALL_INDICATOR , ( ev ), &ev); 1405 } } 1407  $c›v_ÿΣtup_cb ( ušt8_t v® ) 1409  h®_ev_hf_þ›Á_ÿÎ_£tup_šdiÿtÜ ev ; 1411 `DBG (""); 1413 ià( v® > HAL_HF_CLIENT_CALL_SETUP_ALERTING ) { 1414 `”rÜ ("hf-þ›Á: IncÜ»ù c®È£tu°¡©%u:", v® ); 1418 ev . ÿÎ_£tup = v® ; 1420 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 1421 HAL_EV_HF_CLIENT_CALL_SETUP_INDICATOR , 1422 ( ev ), &ev); 1423 } } 1425  $c›v_ÿÎh–d_cb ( ušt8_t v® ) 1427  h®_ev_hf_þ›Á_ÿÎ_h–d_šdiÿtÜ ev ; 1429 `DBG (""); 1431 ià( v® > HAL_HF_CLIENT_CALL_SETUP_IND_HOLD ) { 1432 `”rÜ ("hf-þ›Á: IncÜ»ù c®Èh–d s‹ %u:", v® ); 1436 ev . ÿÎ_h–d = v® ; 1438 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 1439 HAL_EV_HF_CLIENT_CALL_HELD_INDICATOR , 1440 ( ev ), &ev); 1441 } } 1443  $c›v_sigÇl_cb ( ušt8_t v® ) 1445  h®_ev_hf_þ›Á_Ãt_sigÇl_¡»ngth ev ; 1447 `DBG (""); 1449 ià( v® > 5) { 1450 `”rÜ ("hf-þ›Á: IncÜ»ù sigÇÈv®u%u:", v® ); 1454 ev . sigÇl_¡»ngth = v® ; 1456 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 1457 HAL_EV_HF_CLIENT_NET_SIGNAL_STRENGTH , 1458 ( ev ), &ev); 1459 } } 1461  $c›v_rßm_cb ( ušt8_t v® ) 1463  h®_ev_hf_þ›Á_Ãt_rßmšg_ty³ ev ; 1465 `DBG (""); 1467 ià( v® > HAL_HF_CLIENT_NET_ROAMING_TYPE_ROAMING ) { 1468 `”rÜ ("hf-þ›Á: IncÜ»ù„ßmšg s‹ %u:", v® ); 1472 ev . ¡©e = v® ; 1474 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 1475 HAL_EV_HF_CLIENT_NET_ROAMING_TYPE , 1476 ( ev ), &ev); 1477 } } 1479  $c›v_b©tchg_cb ( ušt8_t v® ) 1481  h®_ev_hf_þ›Á_b©‹ry_Ëv– ev ; 1483 `DBG (""); 1485 ià( v® > 5) { 1486 `”rÜ ("hf-þ›Á: IncÜ»ù b©‹ry ch¬gv®u%u:", v® ); 1490 ev . b©‹ry_Ëv– = v® ; 1492 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 1493 HAL_EV_HF_CLIENT_BATTERY_LEVEL , ( ev ), &ev); 1494 } } 1496  $£t_šdiÿtÜ_·¿m‘”s ( ušt8_t šdex , cÚ¡ * šdiÿtÜ , 1497  mš , 1498  max , 1499  šdiÿtÜ * ag_šd ) 1501 `DBG ("%s, %i", šdiÿtÜ , šdex ); 1505 ià( `¡rcmp ("£rviû", šdiÿtÜ ) == 0) { 1506 ag_šd [ HFP_INDICATOR_SERVICE ]. šdex = index; 1507 ag_šd [ HFP_INDICATOR_SERVICE ]. mš = min; 1508 ag_šd [ HFP_INDICATOR_SERVICE ]. max = max; 1509 ag_šd [ HFP_INDICATOR_SERVICE ]. cb = c›v_£rviû_cb ; 1513 ià( `¡rcmp ("ÿÎ", šdiÿtÜ ) == 0) { 1514 ag_šd [ HFP_INDICATOR_CALL ]. šdex = index; 1515 ag_šd [ HFP_INDICATOR_CALL ]. mš = min; 1516 ag_šd [ HFP_INDICATOR_CALL ]. max = max; 1517 ag_šd [ HFP_INDICATOR_CALL ]. cb = c›v_ÿÎ_cb ; 1521 ià( `¡rcmp ("ÿΣtup", šdiÿtÜ ) == 0) { 1522 ag_šd [ HFP_INDICATOR_CALLSETUP ]. šdex = index; 1523 ag_šd [ HFP_INDICATOR_CALLSETUP ]. mš = min; 1524 ag_šd [ HFP_INDICATOR_CALLSETUP ]. max = max; 1525 ag_šd [ HFP_INDICATOR_CALLSETUP ]. cb = c›v_ÿΣtup_cb ; 1529 ià( `¡rcmp ("ÿÎh–d", šdiÿtÜ ) == 0) { 1530 ag_šd [ HFP_INDICATOR_CALLHELD ]. šdex = index; 1531 ag_šd [ HFP_INDICATOR_CALLHELD ]. mš = min; 1532 ag_šd [ HFP_INDICATOR_CALLHELD ]. max = max; 1533 ag_šd [ HFP_INDICATOR_CALLHELD ]. cb = c›v_ÿÎh–d_cb ; 1537 ià( `¡rcmp ("sigÇl", šdiÿtÜ ) == 0) { 1538 ag_šd [ HFP_INDICATOR_SIGNAL ]. šdex = index; 1539 ag_šd [ HFP_INDICATOR_SIGNAL ]. mš = min; 1540 ag_šd [ HFP_INDICATOR_SIGNAL ]. max = max; 1541 ag_šd [ HFP_INDICATOR_SIGNAL ]. cb = c›v_sigÇl_cb ; 1545 ià( `¡rcmp ("rßm", šdiÿtÜ ) == 0) { 1546 ag_šd [ HFP_INDICATOR_ROAM ]. šdex = index; 1547 ag_šd [ HFP_INDICATOR_ROAM ]. mš = min; 1548 ag_šd [ HFP_INDICATOR_ROAM ]. max = max; 1549 ag_šd [ HFP_INDICATOR_ROAM ]. cb = c›v_rßm_cb ; 1553 ià( `¡rcmp ("b©tchg", šdiÿtÜ ) == 0) { 1554 ag_šd [ HFP_INDICATOR_BATTCHG ]. šdex = index; 1555 ag_šd [ HFP_INDICATOR_BATTCHG ]. mš = min; 1556 ag_šd [ HFP_INDICATOR_BATTCHG ]. max = max; 1557 ag_šd [ HFP_INDICATOR_BATTCHG ]. cb = c›v_b©tchg_cb ; 1561 `”rÜ ("hf-þ›Á: UnknowÀšdiÿtÜ: %s", šdiÿtÜ ); 1562 } } 1564  $¦c_cšd_cb ( hå_cÚ‹xt * cÚ‹xt , * u£r_d©a ) 1566  deviû * dev = u£r_d©a ; 1567  šdex = 1; 1569 `DBG (""); 1571  `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) { 1572  Çme [255]; 1573  mš , max ; 1576 ià(! `hå_cÚ‹xt_Ý’_cÚš” ( cÚ‹xt )) 1579 ià(! `hå_cÚ‹xt_g‘_¡ršg ( cÚ‹xt , Çme , (name))) { 1580 `”rÜ ("hf-client: Could‚ot get string"); 1581  çžed ; 1584 ià(! `hå_cÚ‹xt_Ý’_cÚš” ( cÚ‹xt )) { 1585 `”rÜ ("hf-client: Could‚ot open container"); 1586  çžed ; 1589 ià(! `hå_cÚ‹xt_g‘_¿nge ( cÚ‹xt , & mš , & max )) { 1590 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & mš )) { 1591 `”rÜ ("hf-client: Could‚ot get‚umber"); 1592  çžed ; 1595 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & max )) { 1596 `”rÜ ("hf-client: Could‚ot get‚umber"); 1597  çžed ; 1601 ià(! `hå_cÚ‹xt_þo£_cÚš” ( cÚ‹xt )) { 1602 `”rÜ ("hf-client: Could‚ot close container"); 1603  çžed ; 1606 ià(! `hå_cÚ‹xt_þo£_cÚš” ( cÚ‹xt )) { 1607 `”rÜ ("hf-client: Could‚ot close container"); 1608  çžed ; 1611 `£t_šdiÿtÜ_·¿m‘”s ( šdex , Çme , mš , max , dev -> ag_šd ); 1612 šdex ++; 1617 çžed : 1618 `”rÜ ("hf-client: Error on CIND„esponse"); 1619 `¦c_”rÜ ( dev ); 1620 } } 1622  $¦c_bac_»¥ ( hå_»suÉ »suÉ , hå_”rÜ cme_”r , 1623 * u£r_d©a ) 1625  deviû * dev = u£r_d©a ; 1627 `DBG (""); 1629 ià( »suÉ !ð HFP_RESULT_OK ) 1630  çžed ; 1633 ià(! `hå_hf_»gi¡” ( dev -> hf , ¦c_cšd_cb , "+CIND", dev, NULL )) { 1634 `”rÜ ("hf-client: Could‚ot„egister for +CIND"); 1635  çžed ; 1638 ià(! `hå_hf_£nd_commªd ( dev -> hf , ¦c_cšd_»¥ , dev, "AT+CIND=?")) 1639  çžed ; 1643 çžed : 1644 `”rÜ ("hf-client: Error on BAC„esponse"); 1645 `¦c_”rÜ ( dev ); 1646 } } 1648  boÞ $£nd_suµÜ‹d_codecs ( deviû * dev ) 1650  codecs_¡ršg [8]; 1651  bac [16]; 1653 `mem£t ( bac , 0, (bac)); 1655 `¡rýy ( bac , "AT+BAC="); 1657 `g‘_loÿl_codecs_¡ršg ( dev , codecs_¡ršg , (codecs_string)); 1658 `¡rÿt ( bac , codecs_¡ršg ); 1660  `hå_hf_£nd_commªd ( dev -> hf , ¦c_bac_»¥ , dev, bac ); 1661 } } 1663  $¦c_brsf_cb ( hå_cÚ‹xt * cÚ‹xt , * u£r_d©a ) 1665  ã© ; 1666  deviû * dev = u£r_d©a ; 1668 `DBG (""); 1670 ià( `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & ã© )) 1671 dev -> ã©u»s = ã© ; 1672 } } 1674  $¦c_brsf_»¥ ( hå_»suÉ »suÉ , hå_”rÜ cme_”r , 1675 * u£r_d©a ) 1677  deviû * dev = u£r_d©a ; 1679 `hå_hf_uÄegi¡” ( dev -> hf , "+BRSF"); 1681 ià( »suÉ !ð HFP_RESULT_OK ) { 1682 `”rÜ ("hf-þ›Á: BRSFƒ¼Ü: %d", »suÉ ); 1683  çžed ; 1687 ià( `codec_ÃgÙŸtiÚ_suµÜ‹d ( dev )) { 1688 ià( `£nd_suµÜ‹d_codecs ( dev )) 1691 `”rÜ ("hf-client: Could‚ot send BAC command"); 1692  çžed ; 1696 ià(! `hå_hf_»gi¡” ( dev -> hf , ¦c_cšd_cb , "+CIND", dev, NULL )) { 1697 `”rÜ ("hf-client: Could‚ot„egister for +CIND"); 1698  çžed ; 1701 ià(! `hå_hf_£nd_commªd ( dev -> hf , ¦c_cšd_»¥ , dev, "AT+CIND=?")) { 1702 `”rÜ ("hf-client: Could‚ot send AT+CIND command"); 1703  çžed ; 1708 çžed : 1709 `¦c_”rÜ ( dev ); 1710 } } 1712  boÞ $ü—‹_¦c ( deviû * dev ) 1714 `DBG (""); 1716 ià(! `hå_hf_»gi¡” ( dev -> hf , ¦c_brsf_cb , "+BRSF", dev, NULL )) 1717  çl£ ; 1719  `hå_hf_£nd_commªd ( dev -> hf , ¦c_brsf_»¥ , dev, "AT+BRSF=%u", 1720 hå_hf_ã©u»s ); 1721 } } 1723  $cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 1725  deviû * dev = u£r_d©a ; 1727 `DBG (""); 1729 ià( ”r ) { 1730 `”rÜ ("hf-þ›Á: cÚÃù fažed (%s)", ”r -> mes§ge ); 1731  çžed ; 1734 dev -> hf = `hå_hf_Ãw ( `g_io_chªÃl_unix_g‘_fd ( chª )); 1735 ià(! dev -> hf ) { 1736 `”rÜ ("hf-client: Could‚ot create hfp io"); 1737  çžed ; 1740 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chª , FALSE ); 1742 `hå_hf_£t_þo£_Ú_uÄef ( dev -> hf , Œue ); 1743 `hå_hf_£t_discÚÃù_hªdËr ( dev -> hf , discÚÃù_w©ch , dev, NULL ); 1745 ià(! `ü—‹_¦c ( dev )) { 1746 `”rÜ ("hf-client: Could‚ot start SLC creation"); 1747 `hå_hf_discÚÃù ( dev -> hf ); 1748  çžed ; 1753 çžed : 1754 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 1755 `deviû_de¡roy ( dev ); 1756 } } 1758  $sdp_hå_£¬ch_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r d©a ) 1760 sdp_li¡_t * ´Ùos , * þas£s ; 1761  deviû * dev = d©a ; 1762 GE¼Ü * g”r = NULL ; 1763 GIOChªÃl * io ; 1764 uuid_t uuid ; 1765  chªÃl ; 1767 `DBG (""); 1769 ià( ”r < 0) { 1770 `”rÜ ("hf-client: unableo get SDP„ecord: %s", 1771 `¡»¼Ü (- ”r )); 1772  çžed ; 1775 ià(! »cs || !»cs-> d©a ) { 1776 `šfo ("hf-client:‚o HFP SDP„ecords found"); 1777  çžed ; 1780 ià( `sdp_g‘_£rviû_þas£s ( »cs -> d©a , & þas£s ) < 0 || !classes) { 1781 `”rÜ ("hf-client: unableo get service classes from„ecord"); 1782  çžed ; 1787 `memýy (& uuid , þas£s -> d©a , (uuid)); 1788 `sdp_li¡_ä“ ( þas£s , ä“ ); 1790 ià(! `sdp_uuid128_to_uuid (& uuid è|| uuid. ty³ !ð SDP_UUID16 || 1791 uuid . v®ue . uuid16 !ð HANDSFREE_AGW_SVCLASS_ID ) { 1792 `”rÜ ("hf-client: invalid service„ecord or‚ot HFP"); 1793  çžed ; 1796 ià( `sdp_g‘_acûss_´Ùos ( »cs -> d©a , & ´Ùos ) < 0) { 1797 `”rÜ ("hf-client: unableo get‡ccess…rotocols from„ecord"); 1798 `sdp_li¡_ä“ ( þas£s , ä“ ); 1799  çžed ; 1802 chªÃl = `sdp_g‘_´Ùo_pÜt ( ´Ùos , RFCOMM_UUID ); 1803 `sdp_li¡_fÜ—ch ( ´Ùos , ( sdp_li¡_func_t è sdp_li¡_ä“ , NULL ); 1804 `sdp_li¡_ä“ ( ´Ùos , NULL ); 1805 ià( chªÃl <= 0) { 1806 `”rÜ ("hf-client: unableo get RFCOMM channel from„ecord"); 1807  çžed ; 1810 io = `bt_io_cÚÃù ( cÚÃù_cb , dev , NULL , & g”r , 1811 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 1812 BT_IO_OPT_DEST_BDADDR , & dev -> bdaddr , 1813 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 1814 BT_IO_OPT_CHANNEL , chªÃl , 1815 BT_IO_OPT_INVALID ); 1816 ià(! io ) { 1817 `”rÜ ("hf-þ›Á: uÇbËØcÚÃù: %s", g”r -> mes§ge ); 1818 `g_”rÜ_ä“ ( g”r ); 1819  çžed ; 1822 `g_io_chªÃl_uÄef ( io ); 1825 çžed : 1826 `deviû_de¡roy ( dev ); 1827 } } 1829  $sdp_£¬ch_hå ( deviû * dev ) 1831 uuid_t uuid ; 1833 `sdp_uuid16_ü—‹ (& uuid , HANDSFREE_AGW_SVCLASS_ID ); 1835  `bt_£¬ch_£rviû (& ad­‹r_addr , & dev -> bdaddr , & uuid , 1836 sdp_hå_£¬ch_cb , dev , NULL , 0); 1837 } } 1839  $hªdË_cÚÃù (cÚ¡ * buf , ušt16_t Ën ) 1841  deviû * dev ; 1842 cÚ¡  h®_cmd_hf_þ›Á_cÚÃù * cmd = buf ; 1843 ušt32_t ¡©us ; 1844 bdaddr_t bdaddr ; 1845  addr [18]; 1847 `DBG (""); 1849 `ªdroid2bdaddr (& cmd -> bdaddr , &bdaddr); 1851 `ba2¡r (& bdaddr , addr ); 1852 `DBG ("cÚÃùšgØ%s", addr ); 1854 dev = `g‘_deviû (& bdaddr ); 1855 ià(! dev ) { 1856 ¡©us = HAL_STATUS_FAILED ; 1857  dÚe ; 1860 ià( dev -> ¡©e !ð HAL_HF_CLIENT_CONN_STATE_DISCONNECTED ) { 1861 ¡©us = HAL_STATUS_FAILED ; 1862  dÚe ; 1865 ià( `sdp_£¬ch_hå ( dev ) < 0) { 1866 ¡©us = HAL_STATUS_FAILED ; 1867 `deviû_de¡roy ( dev ); 1868  dÚe ; 1871 `deviû_£t_¡©e ( dev , HAL_HF_CLIENT_CONN_STATE_CONNECTING ); 1873 ¡©us = HAL_STATUS_SUCCESS ; 1875 dÚe : 1876 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , 1877 HAL_OP_HF_CLIENT_CONNECT , ¡©us ); 1878 } } 1880  $cÚfœm_cb ( GIOChªÃl * chª , gpoš‹r d©a ) 1882  deviû * dev ; 1883  add»ss [18]; 1884 bdaddr_t bdaddr ; 1885 GE¼Ü * ”r = NULL ; 1887 `bt_io_g‘ ( chª , & ”r , 1888 BT_IO_OPT_DEST , add»ss , 1889 BT_IO_OPT_DEST_BDADDR , & bdaddr , 1890 BT_IO_OPT_INVALID ); 1891 ià( ”r ) { 1892 `”rÜ ("hf-þ›Á: cÚfœm fažed (%s)", ”r -> mes§ge ); 1893 `g_”rÜ_ä“ ( ”r ); 1894  drÝ ; 1897 `DBG ("Incomšg cÚÃùiÚ from %s", add»ss ); 1899 dev = `g‘_deviû (& bdaddr ); 1900 ià(! dev ) { 1901 `”rÜ ("hf-client: There is other AG connected"); 1902  drÝ ; 1905 ià( dev -> ¡©e !ð HAL_HF_CLIENT_CONN_STATE_DISCONNECTED ) { 1907 `”rÜ ("hf-client: Connections is up or ongoing ?"); 1908  drÝ ; 1911 `deviû_£t_¡©e ( dev , HAL_HF_CLIENT_CONN_STATE_CONNECTING ); 1913 ià(! `bt_io_acû± ( chª , cÚÃù_cb , dev , NULL , NULL)) { 1914 `”rÜ ("hf-client: failedo‡ccept connection"); 1915 `deviû_de¡roy ( dev ); 1916  drÝ ; 1921 drÝ : 1922 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 1923 } } 1925 cÚ¡  c_hªdËr gcmd_hªdËrs [] = { 1927 { hªdË_cÚÃù , çl£ , 1928 ( h®_cmd_hf_þ›Á_cÚÃù ) }, 1930 { hªdË_discÚÃù , çl£ , 1931 ( h®_cmd_hf_þ›Á_discÚÃù ) }, 1933 { hªdË_cÚÃù_audio , çl£ , 1934 ( h®_cmd_hf_þ›Á_cÚÃù_audio ) }, 1936 { hªdË_discÚÃù_audio , çl£ , 1937 ( h®_cmd_hf_þ›Á_discÚÃù_audio ) }, 1939 { hªdË_¡¬t_vr , çl£ , 0 }, 1941 { hªdË_¡Ý_vr , çl£ , 0 }, 1943 { hªdË_vÞume_cÚŒÞ , çl£ , 1944 ( h®_cmd_hf_þ›Á_vÞume_cÚŒÞ ) }, 1946 { hªdË_dŸl , Œue , ( h®_cmd_hf_þ›Á_dŸl ) }, 1948 { hªdË_dŸl_memÜy , çl£ , 1949 ( h®_cmd_hf_þ›Á_dŸl_memÜy ) }, 1951 { hªdË_ÿÎ_aùiÚ , çl£ , 1952 ( h®_cmd_hf_þ›Á_ÿÎ_aùiÚ ) }, 1954 { hªdË_qu”y_cu¼’t_ÿÎs , çl£ , 0 }, 1956 { hªdË_qu”y_Ý”©Ü_Çme , çl£ , 0 }, 1958 { hªdË_»Œ›ve_subsü_šfo , çl£ , 0 }, 1960 { hªdË_£nd_dtmf , çl£ , 1961 ( h®_cmd_hf_þ›Á_£nd_dtmf ) }, 1963 { hªdË_g‘_Ï¡_vc_g_num , çl£ , 0 }, 1966  sdp_»cÜd_t * $hå_hf_»cÜd () 1968 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 1969 uuid_t roÙ_uuid , svþass_uuid , ga_svþass_uuid ; 1970 uuid_t l2ÿp_uuid , rfcomm_uuid ; 1971 sdp_´ofže_desc_t ´ofže ; 1972 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 1973 sdp_»cÜd_t * »cÜd ; 1974 sdp_d©a_t * chªÃl , * ã©u»s ; 1975 ušt16_t sdpã© ; 1976 ušt8_t ch = HFP_HF_CHANNEL ; 1978 »cÜd = `sdp_»cÜd_®loc (); 1979 ià(! »cÜd ) 1980  NULL ; 1982 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 1983 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 1984 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 1986 `sdp_uuid16_ü—‹ (& svþass_uuid , HANDSFREE_SVCLASS_ID ); 1987 svþass_id = `sdp_li¡_­³nd ( NULL , & svþass_uuid ); 1988 `sdp_uuid16_ü—‹ (& ga_svþass_uuid , GENERIC_AUDIO_SVCLASS_ID ); 1989 svþass_id = `sdp_li¡_­³nd (svþass_id, & ga_svþass_uuid ); 1990 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 1992 `sdp_uuid16_ü—‹ (& ´ofže . uuid , HANDSFREE_PROFILE_ID ); 1993 ´ofže . v”siÚ = 0x0106; 1994 pf£q = `sdp_li¡_­³nd ( NULL , & ´ofže ); 1995 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 1997 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 1998 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp_uuid ); 1999 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 2001 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 2002 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & rfcomm_uuid ); 2003 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & ch ); 2004 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 2005 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 2008 sdpã© = hå_hf_ã©u»s & 0x0000003F; 2009 ià( hå_hf_ã©u»s & HFP_HF_FEAT_CODEC ) 2010 sdpã© |= 0x00000020; 2012 sdpã© &= ~0x00000020; 2014 ã©u»s = `sdp_d©a_®loc ( SDP_UINT16 , & sdpã© ); 2015 `sdp_©Œ_add ( »cÜd , SDP_ATTR_SUPPORTED_FEATURES , ã©u»s ); 2017 ­rÙo = `sdp_li¡_­³nd ( NULL , ­£q ); 2018 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 2020 `sdp_£t_šfo_©Œ ( »cÜd , "Hªds-F»un™", NULL , NULL); 2022 `sdp_d©a_ä“ ( chªÃl ); 2023 `sdp_li¡_ä“ ( ´Ùo [0], NULL ); 2024 `sdp_li¡_ä“ ( ´Ùo [1], NULL ); 2025 `sdp_li¡_ä“ ( ­£q , NULL ); 2026 `sdp_li¡_ä“ ( pf£q , NULL ); 2027 `sdp_li¡_ä“ ( ­rÙo , NULL ); 2028 `sdp_li¡_ä“ ( roÙ , NULL ); 2029 `sdp_li¡_ä“ ( svþass_id , NULL ); 2031  »cÜd ; 2032 } } 2034  boÞ $’abË_hf_þ›Á () 2036 sdp_»cÜd_t * »c ; 2037 GE¼Ü * ”r = NULL ; 2039 hå_hf_£rv” = `bt_io_li¡’ ( NULL , cÚfœm_cb , NULL, NULL, & ”r , 2040 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 2041 BT_IO_OPT_CHANNEL , HFP_HF_CHANNEL , 2042 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 2043 BT_IO_OPT_INVALID ); 2044 ià(! hå_hf_£rv” ) { 2045 `”rÜ ("hf-client: Failedo†isten on Handsfree„fcomm: %s", 2046 ”r -> mes§ge ); 2047 `g_”rÜ_ä“ ( ”r ); 2048  çl£ ; 2051 hå_hf_ã©u»s = HFP_HF_FEATURES ; 2053 »c = `hå_hf_»cÜd (); 2054 ià(! »c ) { 2055 `”rÜ ("hf-client: Could‚ot create service„ecord"); 2056  çžed ; 2059 ià( `bt_ad­‹r_add_»cÜd ( »c , 0) < 0) { 2060 `”rÜ ("hf-client: Failedo„egister service„ecord"); 2061 `sdp_»cÜd_ä“ ( »c ); 2062  çžed ; 2065 hå_hf_»cÜd_id = »c -> hªdË ; 2067  Œue ; 2069 çžed : 2070 `g_io_chªÃl_shutdown ( hå_hf_£rv” , TRUE , NULL ); 2071 `g_io_chªÃl_uÄef ( hå_hf_£rv” ); 2072 hå_hf_£rv” = NULL ; 2074  çl£ ; 2075 } } 2077  $þ—nup_hå_hf () 2079 ià( hå_hf_£rv” ) { 2080 `g_io_chªÃl_shutdown ( hå_hf_£rv” , TRUE , NULL ); 2081 `g_io_chªÃl_uÄef ( hå_hf_£rv” ); 2082 hå_hf_£rv” = NULL ; 2085 ià( hå_hf_»cÜd_id > 0) { 2086 `bt_ad­‹r_»move_»cÜd ( hå_hf_»cÜd_id ); 2087 hå_hf_»cÜd_id = 0; 2090 ià( sco ) { 2091 `bt_sco_uÄef ( sco ); 2092 sco = NULL ; 2094 } } 2096  boÞ $cÚfœm_sco_cb (cÚ¡ bdaddr_t * addr , ušt16_t * voiû_£‰šgs ) 2098  deviû * dev ; 2100 `DBG (""); 2102 dev = `fšd_deviû ( addr ); 2103 ià(! dev || dev-> ¡©e !ð HAL_HF_CLIENT_CONN_STATE_SLC_CONNECTED ) { 2104 `”rÜ ("hf-client: No device or SLC‚ot„eady"); 2105  çl£ ; 2108 `£t_audio_¡©e ( dev , HAL_HF_CLIENT_AUDIO_STATE_CONNECTING ); 2110 ià( `codec_ÃgÙŸtiÚ_suµÜ‹d ( dev ) && 2111 dev -> ÃgÙŸ‹d_codec !ð CODEC_ID_CVSD ) 2112 * voiû_£‰šgs = BT_VOICE_TRANSPARENT ; 2114 * voiû_£‰šgs = BT_VOICE_CVSD_16BIT ; 2116  Œue ; 2117 } } 2119  $cÚÃù_sco_cb ( sco_¡©us ¡©us , cÚ¡ bdaddr_t * addr ) 2121  deviû * dev ; 2122 ušt8_t audio_¡©e ; 2124 `DBG ("SCO Stu %u", ¡©us ); 2127 dev = `fšd_deviû ( addr ); 2128 ià(! dev ) { 2129 `”rÜ ("hf-client: There is‚o device?"); 2133 ià( ¡©us !ð SCO_STATUS_OK ) { 2134 audio_¡©e = HAL_HF_CLIENT_AUDIO_STATE_DISCONNECTED ; 2135  dÚe ; 2138 ià( dev -> ÃgÙŸ‹d_codec =ð CODEC_ID_MSBC ) 2139 audio_¡©e = HAL_HF_CLIENT_AUDIO_STATE_CONNECTED_MSBC ; 2141 audio_¡©e = HAL_HF_CLIENT_AUDIO_STATE_CONNECTED ; 2143 dÚe : 2144 `£t_audio_¡©e ( dev , audio_¡©e ); 2145 } } 2147  $discÚÃù_sco_cb (cÚ¡ bdaddr_t * addr ) 2149  deviû * dev ; 2151 `DBG (""); 2153 dev = `fšd_deviû ( addr ); 2154 ià(! dev ) { 2155 `”rÜ ("hf-client: No device"); 2159 `£t_audio_¡©e ( dev , HAL_HF_CLIENT_AUDIO_STATE_DISCONNECTED ); 2160 } } 2162 boÞ $bt_hf_þ›Á_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr ) 2164 `DBG (""); 2166 deviûs = `queue_Ãw (); 2167 ià(! deviûs ) { 2168 `”rÜ ("hf-client: Could‚ot create devices†ist"); 2169  çžed ; 2172 `baýy (& ad­‹r_addr , addr ); 2174 ià(! `’abË_hf_þ›Á ()) 2175  çžed ; 2177 sco = `bt_sco_Ãw ( addr ); 2178 ià(! sco ) { 2179 `”rÜ ("hf-client: Cannot create SCO. HFP AG is in use ?"); 2180  çžed ; 2183 `bt_sco_£t_cÚfœm_cb ( sco , cÚfœm_sco_cb ); 2184 `bt_sco_£t_cÚÃù_cb ( sco , cÚÃù_sco_cb ); 2185 `bt_sco_£t_discÚÃù_cb ( sco , discÚÃù_sco_cb ); 2187 h®_c = c ; 2188 `c_»gi¡” ( h®_c , HAL_SERVICE_ID_HANDSFREE_CLIENT , cmd_hªdËrs , 2189 `G_N_ELEMENTS ( cmd_hªdËrs )); 2191  Œue ; 2193 çžed : 2194 `þ—nup_hå_hf (); 2195 `queue_de¡roy ( deviûs , ä“ ); 2196 deviûs = NULL ; 2198  çl£ ; 2199 } } 2201  $bt_hf_þ›Á_uÄegi¡” () 2203 `DBG (""); 2205 `þ—nup_hå_hf (); 2207 `queue_de¡roy ( deviûs , (*è deviû_de¡roy ); 2208 deviûs = NULL ; 2210 `c_uÄegi¡” ( h®_c , HAL_SERVICE_ID_HANDSFREE ); 2211 h®_c = NULL ; 2212 } } @android/handsfree-client.h 24 boÞ bt_hf_þ›Á_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr ); 25  bt_hf_þ›Á_uÄegi¡” (); @android/handsfree.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~<¡dboÞ.h > 30  ~<”ºo.h > 31  ~ 32  ~ 34  ~"lib/blu‘oÙh.h " 35  ~"lib/sdp.h " 36  ~"lib/sdp_lib.h " 37  ~"¤c/sdp-þ›Á.h " 38  ~"¤c/uuid-h–³r.h " 39  ~"¤c/sh¬ed/hå.h " 40  ~"¤c/sh¬ed/queue.h " 41  ~"¤c/sh¬ed/utž.h " 42  ~"btio/btio.h " 43  ~"h®-msg.h " 44  ~"c-commÚ.h " 45  ~"c.h " 46  ~"hªdsä“.h " 47  ~"blu‘oÙh.h " 48  ~"¤c/log.h " 49  ~"utžs.h " 50  ~"sco-msg.h " 51  ~"sco.h " 53  #HSP_AG_CHANNEL 12 ) 54  #HFP_AG_CHANNEL 13 ) 56  #HFP_AG_FEAT_3WAY 0x00000001 ) 57  #HFP_AG_FEAT_ECNR 0x00000002 ) 58  #HFP_AG_FEAT_VR 0x00000004 ) 59  #HFP_AG_FEAT_INBAND 0x00000008 ) 60  #HFP_AG_FEAT_VTAG 0x00000010 ) 61  #HFP_AG_FEAT_REJ_CALL 0x00000020 ) 62  #HFP_AG_FEAT_ECS 0x00000040 ) 63  #HFP_AG_FEAT_ECC 0x00000080 ) 64  #HFP_AG_FEAT_EXT_ERR 0x00000100 ) 65  #HFP_AG_FEAT_CODEC 0x00000200 ) 67  #HFP_HF_FEAT_ECNR 0x00000001 ) 68  #HFP_HF_FEAT_3WAY 0x00000002 ) 69  #HFP_HF_FEAT_CLI 0x00000004 ) 70  #HFP_HF_FEAT_VR 0x00000008 ) 71  #HFP_HF_FEAT_RVC 0x00000010 ) 72  #HFP_HF_FEAT_ECS 0x00000020 ) 73  #HFP_HF_FEAT_ECC 0x00000040 ) 74  #HFP_HF_FEAT_CODEC 0x00000080 ) 76  #HFP_AG_FEATURES ( HFP_AG_FEAT_3WAY | HFP_AG_FEAT_ECNR |\ 77 HFP_AG_FEAT_VR | HFP_AG_FEAT_REJ_CALL |\ 78 HFP_AG_FEAT_ECS | HFP_AG_FEAT_EXT_ERR ) ) 80  #HFP_AG_CHLD "0,1,2,3" ) 83  #IND_SERVICE 0 ) 84  #IND_CALL 1 ) 85  #IND_CALLSETUP 2 ) 86  #IND_CALLHELD 3 ) 87  #IND_SIGNAL 4 ) 88  #IND_ROAM 5 ) 89  #IND_BATTCHG 6 ) 90  #IND_COUNT ( IND_BATTCHG + 1) ) 92  #RING_TIMEOUT 2 ) 94  #CVSD_OFFSET 0 ) 95  #MSBC_OFFSET 1 ) 96  #CODECS_COUNT ( MSBC_OFFSET + 1) ) 98  #CODEC_ID_CVSD 0x01 ) 99  #CODEC_ID_MSBC 0x02 ) 101  sšdiÿtÜ { 102 cÚ¡ * mÇme ; 103  mmš ; 104  mmax ; 105  mv® ; 106 boÞ m®ways_aùive ; 107 boÞ maùive ; 110  shå_codec { 111 ušt8_t mty³ ; 112 boÞ mloÿl_suµÜ‹d ; 113 boÞ m»mÙe_suµÜ‹d ; 116  shf_deviû { 117 bdaddr_t mbdaddr ; 118 ušt8_t m¡©e ; 119 ušt8_t maudio_¡©e ; 120 ušt32_t mã©u»s ; 122 boÞ mþ_’abËd ; 123 boÞ mcm“_’abËd ; 124 boÞ mccwa_’abËd ; 125 boÞ mšdiÿtÜs_’abËd ; 126  šdiÿtÜ mšds [ IND_COUNT ]; 127  mnum_aùive ; 128  mnum_h–d ; 129  m£tup_¡©e ; 130 boÞ mÿÎ_hªgšg_up ; 132 ušt8_t mÃgÙŸ‹d_codec ; 133 ušt8_t m´Ýo£d_codec ; 134  hå_codec mcodecs [ CODECS_COUNT ]; 136 gušt mršg ; 137 * mþ ; 138 boÞ mh¥ ; 140  hå_gw * mgw ; 141 gušt md–ay_sco ; 144 cÚ¡  šdiÿtÜ gšds_deçuÉs [] = { 145 { "£rviû", 0, 1, 0, çl£ , Œue }, 146 { "ÿÎ", 0, 1, 0, Œue ,rue }, 147 { "ÿΣtup", 0, 3, 0, Œue ,rue }, 148 { "ÿÎh–d", 0, 2, 0, Œue ,rue }, 149 { "sigÇl", 0, 5, 0, çl£ , Œue }, 150 { "rßm", 0, 1, 0, çl£ , Œue }, 151 { "b©tchg", 0, 5, 0, çl£ , Œue }, 154 cÚ¡  hå_codec gcodecs_deçuÉs [] = { 155 { CODEC_ID_CVSD , Œue , çl£ }, 156 { CODEC_ID_MSBC , çl£ , false}, 159  queue * gdeviûs = NULL ; 161  ušt32_t ghå_ag_ã©u»s = 0; 163  bdaddr_t gad­‹r_addr ; 165  c * gh®_c = NULL ; 166  c * gsco_c = NULL ; 168  ušt32_t ghå_»cÜd_id = 0; 169  GIOChªÃl * ghå_£rv” = NULL ; 171  ušt32_t gh¥_»cÜd_id = 0; 172  GIOChªÃl * gh¥_£rv” = NULL ; 174  bt_sco * gsco = NULL ; 176  gmax_hå_þ›Ás = 0; 178  $£t_¡©e ( hf_deviû * dev , ušt8_t ¡©e ) 180  h®_ev_hªdsä“_cÚn_¡©e ev ; 181  add»ss [18]; 183 ià( dev -> ¡©e == state) 186 dev -> ¡©e = state; 188 `ba2¡r (& dev -> bdaddr , add»ss ); 189 `DBG ("deviû % ¡©%u", add»ss , ¡©e ); 191 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 192 ev . ¡©e = state; 194 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 195 HAL_EV_HANDSFREE_CONN_STATE , ( ev ), &ev); 196 } } 198  $£t_audio_¡©e ( hf_deviû * dev , ušt8_t ¡©e ) 200  h®_ev_hªdsä“_audio_¡©e ev ; 201  add»ss [18]; 203 ià( dev -> audio_¡©e =ð ¡©e ) 206 dev -> audio_¡©e = ¡©e ; 208 `ba2¡r (& dev -> bdaddr , add»ss ); 209 `DBG ("deviû % audiØ¡©%u", add»ss , ¡©e ); 211 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 212 ev . ¡©e = state; 214 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 215 HAL_EV_HANDSFREE_AUDIO_STATE , ( ev ), &ev); 216 } } 218  $š™_codecs ( hf_deviû * dev ) 220 `memýy ( dev -> codecs , codecs_deçuÉs , (dev->codecs)); 222 ià( hå_ag_ã©u»s & HFP_AG_FEAT_CODEC ) 223 dev -> codecs [ MSBC_OFFSET ]. loÿl_suµÜ‹d = Œue ; 224 } } 226  hf_deviû * $deviû_ü—‹ (cÚ¡ bdaddr_t * bdaddr ) 228  hf_deviû * dev ; 230 dev = `Ãw0 ( hf_deviû , 1); 231 ià(! dev ) 232  NULL ; 234 `baýy (& dev -> bdaddr , bdaddr); 235 dev -> £tup_¡©e = HAL_HANDSFREE_CALL_STATE_IDLE ; 236 dev -> ¡©e = HAL_EV_HANDSFREE_CONN_STATE_DISCONNECTED ; 237 dev -> audio_¡©e = HAL_EV_HANDSFREE_AUDIO_STATE_DISCONNECTED ; 239 `memýy ( dev -> šds , šds_deçuÉs , (dev->inds)); 241 `š™_codecs ( dev ); 243 ià(! `queue_push_h—d ( deviûs , dev )) { 244 `ä“ ( dev ); 245  NULL ; 248  dev ; 249 } } 251  $deviû_de¡roy ( hf_deviû * dev ) 253 `hå_gw_uÄef ( dev -> gw ); 255 ià( dev -> d–ay_sco ) 256 `g_sourû_»move ( dev -> d–ay_sco ); 258 ià( dev -> audio_¡©e =ð HAL_EV_HANDSFREE_AUDIO_STATE_CONNECTED ) 259 `bt_sco_discÚÃù ( sco ); 261 `g_sourû_»move ( dev -> ršg ); 262 `g_ä“ ( dev -> þ ); 264 `£t_audio_¡©e ( dev , HAL_EV_HANDSFREE_AUDIO_STATE_DISCONNECTED ); 265 `£t_¡©e ( dev , HAL_EV_HANDSFREE_CONN_STATE_DISCONNECTED ); 267 `queue_»move ( deviûs , dev ); 268 `ä“ ( dev ); 269 } } 271  boÞ $m©ch_by_bdaddr (cÚ¡ * d©a , cÚ¡ * m©ch_d©a ) 273 cÚ¡  hf_deviû * dev = d©a ; 274 cÚ¡ bdaddr_t * addr = m©ch_d©a ; 276  ! `bacmp (& dev -> bdaddr , addr ); 277 } } 279  hf_deviû * $fšd_deviû (cÚ¡ bdaddr_t * bdaddr ) 281 ià(! `bacmp ( bdaddr , BDADDR_ANY )) 282  `queue_³ek_h—d ( deviûs ); 284  `queue_fšd ( deviûs , m©ch_by_bdaddr , bdaddr ); 285 } } 287  hf_deviû * $g‘_deviû (cÚ¡ bdaddr_t * bdaddr ) 289  hf_deviû * dev ; 291 dev = `fšd_deviû ( bdaddr ); 292 ià( dev ) 293  dev ; 295 ià( `queue_Ëngth ( deviûs è=ð max_hå_þ›Ás ) 296  NULL ; 298  `deviû_ü—‹ ( bdaddr ); 299 } } 301  $discÚÃù_w©ch (* u£r_d©a ) 303  hf_deviû * dev = u£r_d©a ; 305 `DBG (""); 307 `deviû_de¡roy ( dev ); 308 } } 310  $©_cmd_unknown (cÚ¡ * commªd , * u£r_d©a ) 312  hf_deviû * dev = u£r_d©a ; 313 ušt8_t buf [ IPC_MTU ]; 314  h®_ev_hªdsä“_unknown_© * ev = (*è buf ; 316 ià( dev -> ¡©e !ð HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED ) { 317 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 318 `hå_gw_discÚÃù ( dev -> gw ); 322 `bdaddr2ªdroid (& dev -> bdaddr , ev ->bdaddr); 325 ev -> Ën = `¡¾’ ( commªd ) + 1; 326 `memýy ( ev -> buf , commªd ,ƒv-> Ën ); 328 ià( ev -> Ën > IPC_MTU - (*ev)) { 329 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 333 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 334 HAL_EV_HANDSFREE_UNKNOWN_AT , (* ev è+ƒv-> Ën ,ƒv); 335 } } 337  $©_cmd_vgm ( hå_cÚ‹xt * cÚ‹xt , 338 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 340  hf_deviû * dev = u£r_d©a ; 341  h®_ev_hªdsä“_vÞume ev ; 342  v® ; 344 `DBG (""); 346  ty³ ) { 347  HFP_GW_CMD_TYPE_SET : 348 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || val > 15) 351 ià( `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) 354 ev . ty³ = HAL_HANDSFREE_VOLUME_TYPE_MIC ; 355 ev . vÞume = v® ; 356 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 358 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 359 HAL_EV_HANDSFREE_VOLUME , ( ev ), &ev); 362 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 364  HFP_GW_CMD_TYPE_READ : 365  HFP_GW_CMD_TYPE_TEST : 366  HFP_GW_CMD_TYPE_COMMAND : 370 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 371 } } 373  $©_cmd_vgs ( hå_cÚ‹xt * cÚ‹xt , 374 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 376  hf_deviû * dev = u£r_d©a ; 377  h®_ev_hªdsä“_vÞume ev ; 378  v® ; 380 `DBG (""); 382  ty³ ) { 383  HFP_GW_CMD_TYPE_SET : 384 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || val > 15) 387 ià( `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) 390 ev . ty³ = HAL_HANDSFREE_VOLUME_TYPE_SPEAKER ; 391 ev . vÞume = v® ; 392 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 394 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 395 HAL_EV_HANDSFREE_VOLUME , ( ev ), &ev); 398 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 400  HFP_GW_CMD_TYPE_READ : 401  HFP_GW_CMD_TYPE_TEST : 402  HFP_GW_CMD_TYPE_COMMAND : 406 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 407 } } 409  $©_cmd_cÝs ( hå_cÚ‹xt * cÚ‹xt , 410 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 412  hf_deviû * dev = u£r_d©a ; 413  h®_ev_hªdsä“_cÝs ev ; 414  v® ; 416  ty³ ) { 417  HFP_GW_CMD_TYPE_SET : 418 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || val != 3) 421 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || val != 0) 424 ià( `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) 427 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 429  HFP_GW_CMD_TYPE_READ : 430 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 432 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 433 HAL_EV_HANDSFREE_COPS , ( ev ), &ev); 435  HFP_GW_CMD_TYPE_TEST : 436  HFP_GW_CMD_TYPE_COMMAND : 440 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 441 } } 443  $©_cmd_bŸ ( hå_cÚ‹xt * cÚ‹xt , 444 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 446  hf_deviû * dev = u£r_d©a ; 447  v® , i , def ; 448 boÞ tmp [ IND_COUNT ]; 450 `DBG (""); 452  ty³ ) { 453  HFP_GW_CMD_TYPE_SET : 454  i = 0; i < IND_COUNT ; i++) 455 tmp [ i ] = dev -> šds [i]. aùive ; 457 i = 0; 460 def = ( i < IND_COUNT è? dev -> šds [i]. aùive : 0; 462 ià(! `hå_cÚ‹xt_g‘_numb”_deçuÉ ( cÚ‹xt , & v® , def )) 463  çžed ; 465 ià( v® > 1) 466  çžed ; 468 ià( i < IND_COUNT ) { 469 tmp [ i ] = v® || dev -> šds [i]. ®ways_aùive ; 470 i ++; 472 }  `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )); 474  i = 0; i < IND_COUNT ; i++) 475 dev -> šds [ i ]. aùive = tmp [i]; 477 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 479  HFP_GW_CMD_TYPE_TEST : 480  HFP_GW_CMD_TYPE_READ : 481  HFP_GW_CMD_TYPE_COMMAND : 485 çžed : 486 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 487 } } 489  $©_cmd_a ( hå_cÚ‹xt * cÚ‹xt , 490 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 492  hf_deviû * dev = u£r_d©a ; 493  h®_ev_hªdsä“_ªsw” ev ; 495 `DBG (""); 497  ty³ ) { 498  HFP_GW_CMD_TYPE_COMMAND : 499 ià( `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) 502 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 504 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 505 HAL_EV_HANDSFREE_ANSWER , ( ev ), &ev); 508 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 510  HFP_GW_CMD_TYPE_SET : 511  HFP_GW_CMD_TYPE_READ : 512  HFP_GW_CMD_TYPE_TEST : 516 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 517 } } 519  $©_cmd_d ( hå_cÚ‹xt * cÚ‹xt , 520 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 522  hf_deviû * dev = u£r_d©a ; 523  buf [ IPC_MTU ]; 524  h®_ev_hªdsä“_dŸl * ev = (*è buf ; 525  út ; 527 `DBG (""); 529  ty³ ) { 530  HFP_GW_CMD_TYPE_SET : 531 ià(! `hå_cÚ‹xt_g‘_unquÙed_¡ršg ( cÚ‹xt , 532 (*è ev -> numb” , 255)) 535 `bdaddr2ªdroid (& dev -> bdaddr , ev ->bdaddr); 537 ev -> numb”_Ën = `¡¾’ ((*èev-> numb” ); 539 ià( ev -> numb” [ev-> numb”_Ën - 1] != ';') 542 ià( ev -> numb” [0] == '>') 543 út = `¡r¥n ((*è ev -> numb” + 1, "0123456789") + 1; 545 út = `¡r¥n ((*è ev -> numb” , "0123456789ABC*#+"); 547 ià( út !ð ev -> numb”_Ën - 1) 550 ev -> numb”_Ën ++; 552 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 553 HAL_EV_HANDSFREE_DIAL , 554 (* ev è+ƒv-> numb”_Ën ,ƒv); 556  HFP_GW_CMD_TYPE_READ : 557  HFP_GW_CMD_TYPE_TEST : 558  HFP_GW_CMD_TYPE_COMMAND : 562 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 563 } } 565  $©_cmd_ccwa ( hå_cÚ‹xt * cÚ‹xt , 566 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 568  hf_deviû * dev = u£r_d©a ; 569  v® ; 571 `DBG (""); 573  ty³ ) { 574  HFP_GW_CMD_TYPE_SET : 575 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || val > 1) 578 ià( `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) 581 dev -> ccwa_’abËd = v® ; 583 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 585  HFP_GW_CMD_TYPE_READ : 586  HFP_GW_CMD_TYPE_TEST : 587  HFP_GW_CMD_TYPE_COMMAND : 591 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 592 } } 594  $©_cmd_chup ( hå_cÚ‹xt * cÚ‹xt , 595 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 597  hf_deviû * dev = u£r_d©a ; 598  h®_ev_hªdsä“_hªgup ev ; 600 `DBG (""); 602  ty³ ) { 603  HFP_GW_CMD_TYPE_COMMAND : 604 ià( `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) 607 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 609 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 610 HAL_EV_HANDSFREE_HANGUP , ( ev ), &ev); 613 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 615  HFP_GW_CMD_TYPE_READ : 616  HFP_GW_CMD_TYPE_TEST : 617  HFP_GW_CMD_TYPE_SET : 621 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 622 } } 624  $©_cmd_þcc ( hå_cÚ‹xt * cÚ‹xt , 625 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 627  hf_deviû * dev = u£r_d©a ; 628  h®_ev_hªdsä“_þcc ev ; 630 `DBG (""); 632  ty³ ) { 633  HFP_GW_CMD_TYPE_COMMAND : 634 ià( `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) 637 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 639 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 640 HAL_EV_HANDSFREE_CLCC , ( ev ), &ev); 642  HFP_GW_CMD_TYPE_READ : 643  HFP_GW_CMD_TYPE_TEST : 644  HFP_GW_CMD_TYPE_SET : 648 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 649 } } 651  $©_cmd_cm“ ( hå_cÚ‹xt * cÚ‹xt , 652 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 654  hf_deviû * dev = u£r_d©a ; 655  v® ; 657 `DBG (""); 659  ty³ ) { 660  HFP_GW_CMD_TYPE_SET : 661 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || val > 1) 664 ià( `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) 667 dev -> cm“_’abËd = v® ; 669 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 671  HFP_GW_CMD_TYPE_READ : 672  HFP_GW_CMD_TYPE_TEST : 673  HFP_GW_CMD_TYPE_COMMAND : 677 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 678 } } 680  $©_cmd_þ ( hå_cÚ‹xt * cÚ‹xt , 681 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 683  hf_deviû * dev = u£r_d©a ; 684  v® ; 686 `DBG (""); 688  ty³ ) { 689  HFP_GW_CMD_TYPE_SET : 690 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || val > 1) 693 ià( `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) 696 dev -> þ_’abËd = v® ; 698 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 700  HFP_GW_CMD_TYPE_READ : 701  HFP_GW_CMD_TYPE_TEST : 702  HFP_GW_CMD_TYPE_COMMAND : 706 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 707 } } 709  $©_cmd_vts ( hå_cÚ‹xt * cÚ‹xt , 710 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 712  hf_deviû * dev = u£r_d©a ; 713  h®_ev_hªdsä“_dtmf ev ; 714  ¡r [2]; 716 `DBG (""); 718  ty³ ) { 719  HFP_GW_CMD_TYPE_SET : 720 ià(! `hå_cÚ‹xt_g‘_unquÙed_¡ršg ( cÚ‹xt , ¡r , 2)) 723 ià(!(( ¡r [0] >= '0' && str[0] <= '9') || 724 ( ¡r [0] >= 'A' && str[0] <= 'D') || 725 ¡r [0] == '*' || str[0] == '#')) 728 ià( `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) 731 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 732 ev . tÚe = ¡r [0]; 734 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 735 HAL_EV_HANDSFREE_DTMF , ( ev ), &ev); 738 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 740  HFP_GW_CMD_TYPE_READ : 741  HFP_GW_CMD_TYPE_TEST : 742  HFP_GW_CMD_TYPE_COMMAND : 746 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 747 } } 749  $©_cmd_úum ( hå_cÚ‹xt * cÚ‹xt , 750 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 752  hf_deviû * dev = u£r_d©a ; 753  h®_ev_hªdsä“_úum ev ; 755 `DBG (""); 757  ty³ ) { 758  HFP_GW_CMD_TYPE_COMMAND : 759 ià( `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) 762 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 764 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 765 HAL_EV_HANDSFREE_CNUM , ( ev ), &ev); 767  HFP_GW_CMD_TYPE_SET : 768  HFP_GW_CMD_TYPE_READ : 769  HFP_GW_CMD_TYPE_TEST : 773 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 774 } } 776  $©_cmd_bšp ( hå_cÚ‹xt * cÚ‹xt , 777 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 779  hf_deviû * dev = u£r_d©a ; 781 `DBG (""); 785 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 786 } } 788  $©_cmd_bldn ( hå_cÚ‹xt * cÚ‹xt , 789 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 791  hf_deviû * dev = u£r_d©a ; 792  h®_ev_hªdsä“_dŸl ev ; 794 `DBG (""); 796  ty³ ) { 797  HFP_GW_CMD_TYPE_COMMAND : 798 ià( `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) 801 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 802 ev . numb”_Ën = 0; 804 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 805 HAL_EV_HANDSFREE_DIAL , ( ev ), &ev); 807  HFP_GW_CMD_TYPE_READ : 808  HFP_GW_CMD_TYPE_TEST : 809  HFP_GW_CMD_TYPE_SET : 813 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 814 } } 816  $©_cmd_bv¿ ( hå_cÚ‹xt * cÚ‹xt , 817 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 819  hf_deviû * dev = u£r_d©a ; 820  h®_ev_hªdsä“_vr_¡©e ev ; 821  v® ; 823 `DBG (""); 825  ty³ ) { 826  HFP_GW_CMD_TYPE_SET : 827 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || val > 1) 830 ià( `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) 833 ià( v® ) 834 ev . ¡©e = HAL_HANDSFREE_VR_STARTED ; 836 ev . ¡©e = HAL_HANDSFREE_VR_STOPPED ; 838 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 840 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 841 HAL_EV_HANDSFREE_VR , ( ev ), &ev); 843  HFP_GW_CMD_TYPE_READ : 844  HFP_GW_CMD_TYPE_TEST : 845  HFP_GW_CMD_TYPE_COMMAND : 849 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 850 } } 852  $©_cmd_Äec ( hå_cÚ‹xt * cÚ‹xt , 853 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 855  hf_deviû * dev = u£r_d©a ; 856  h®_ev_hªdsä“_Äec ev ; 857  v® ; 859 `DBG (""); 861  ty³ ) { 862  HFP_GW_CMD_TYPE_SET : 868 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) || val != 0) 871 ià( `hå_cÚ‹xt_has_Ãxt ( cÚ‹xt )) 874 ev . Äec = HAL_HANDSFREE_NREC_STOP ; 875 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 877 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 878 HAL_EV_HANDSFREE_NREC , ( ev ), &ev); 881 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 883  HFP_GW_CMD_TYPE_READ : 884  HFP_GW_CMD_TYPE_TEST : 885  HFP_GW_CMD_TYPE_COMMAND : 889 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 890 } } 892  $©_cmd_bsœ ( hå_cÚ‹xt * cÚ‹xt , 893 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 895  hf_deviû * dev = u£r_d©a ; 897 `DBG (""); 901 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 902 } } 904  $©_cmd_bŒh ( hå_cÚ‹xt * cÚ‹xt , 905 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 907  hf_deviû * dev = u£r_d©a ; 909 `DBG (""); 913 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 914 } } 916  $discÚÃù_sco_cb (cÚ¡ bdaddr_t * addr ) 918  hf_deviû * dev ; 920 `DBG (""); 922 dev = `fšd_deviû ( addr ); 923 ià(! dev ) { 924 `”rÜ ("handsfree: Could‚ot find device"); 928 `£t_audio_¡©e ( dev , HAL_EV_HANDSFREE_AUDIO_STATE_DISCONNECTED ); 929 } } 931  $£Ëù_codec ( hf_deviû * dev , ušt8_t codec_ty³ ) 933 ušt8_t ty³ = CODEC_ID_CVSD ; 934  i ; 936 ià( codec_ty³ > 0) { 937 ty³ = codec_ty³ ; 938  dÚe ; 941  i = CODECS_COUNT - 1; i >ð CVSD_OFFSET ; i--) { 942 ià(! dev -> codecs [ i ]. loÿl_suµÜ‹d ) 945 ià(! dev -> codecs [ i ]. »mÙe_suµÜ‹d ) 948 ty³ = dev -> codecs [ i ].type; 952 dÚe : 953 dev -> ´Ýo£d_codec = ty³ ; 955 `hå_gw_£nd_šfo ( dev -> gw , "+BCS: %u", ty³ ); 956 } } 958  boÞ $codec_ÃgÙŸtiÚ_suµÜ‹d ( hf_deviû * dev ) 960  ( dev -> ã©u»s & HFP_HF_FEAT_CODEC ) && 961 ( hå_ag_ã©u»s & HFP_AG_FEAT_CODEC ); 962 } } 964  $cÚÃù_sco_cb ( sco_¡©us ¡©us , cÚ¡ bdaddr_t * addr ) 966  hf_deviû * dev ; 968 dev = `fšd_deviû ( addr ); 969 ià(! dev ) { 970 `”rÜ ("handsfree: Connect sco failed,‚o device?"); 974 ià( ¡©us !ð SCO_STATUS_OK ) { 975 `”rÜ ("handsfree:‡udio connect failed"); 977 `£t_audio_¡©e ( dev , HAL_EV_HANDSFREE_AUDIO_STATE_DISCONNECTED ); 979 ià(! `codec_ÃgÙŸtiÚ_suµÜ‹d ( dev )) 983 ià( dev -> ÃgÙŸ‹d_codec !ð CODEC_ID_CVSD ) { 984 `šfo ("handsfree:rying fallback with CVSD"); 985 `£Ëù_codec ( dev , CODEC_ID_CVSD ); 991 `£t_audio_¡©e ( dev , HAL_EV_HANDSFREE_AUDIO_STATE_CONNECTED ); 992 } } 994  boÞ $cÚÃù_sco ( hf_deviû * dev ) 996 ušt16_t voiû_£‰šgs ; 998 ià( `codec_ÃgÙŸtiÚ_suµÜ‹d ( dev ) && 999 dev -> ÃgÙŸ‹d_codec !ð CODEC_ID_CVSD ) 1000 voiû_£‰šgs = BT_VOICE_TRANSPARENT ; 1002 voiû_£‰šgs = BT_VOICE_CVSD_16BIT ; 1004 ià(! `bt_sco_cÚÃù ( sco , & dev -> bdaddr , voiû_£‰šgs )) 1005  çl£ ; 1007 `£t_audio_¡©e ( dev , HAL_EV_HANDSFREE_AUDIO_STATE_CONNECTING ); 1009  Œue ; 1010 } } 1012  gboÞ—n $cÚÃù_sco_d–ayed (* d©a ) 1014  hf_deviû * dev = d©a ; 1016 `DBG (""); 1018 dev -> d–ay_sco = 0; 1020 ià( `cÚÃù_sco ( dev )) 1021  FALSE ; 1027 ià( dev -> ÃgÙŸ‹d_codec !ð CODEC_ID_CVSD ) 1028 `£Ëù_codec ( dev , CODEC_ID_CVSD ); 1030  FALSE ; 1031 } } 1033  $©_cmd_bcc ( hå_cÚ‹xt * »suÉ , hå_gw_cmd_ty³ ty³ , 1034 * u£r_d©a ) 1036  hf_deviû * dev = u£r_d©a ; 1038 `DBG (""); 1040  ty³ ) { 1041  HFP_GW_CMD_TYPE_COMMAND : 1042 ià(! `codec_ÃgÙŸtiÚ_suµÜ‹d ( dev )) 1045 ià( `hå_cÚ‹xt_has_Ãxt ( »suÉ )) 1048 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 1051 ià(! dev -> ÃgÙŸ‹d_codec ) { 1052 `£Ëù_codec ( dev , 0); 1057 ià( dev -> d–ay_sco == 0) 1058 dev -> d–ay_sco = `g_idË_add ( cÚÃù_sco_d–ayed , dev); 1060  HFP_GW_CMD_TYPE_READ : 1061  HFP_GW_CMD_TYPE_TEST : 1062  HFP_GW_CMD_TYPE_SET : 1066 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 1067 } } 1069  $©_cmd_bcs ( hå_cÚ‹xt * »suÉ , hå_gw_cmd_ty³ ty³ , 1070 * u£r_d©a ) 1072  hf_deviû * dev = u£r_d©a ; 1073  v® ; 1075 `DBG (""); 1077  ty³ ) { 1078  HFP_GW_CMD_TYPE_SET : 1079 ià(! `hå_cÚ‹xt_g‘_numb” ( »suÉ , & v® )) 1082 ià( `hå_cÚ‹xt_has_Ãxt ( »suÉ )) 1086 ià( dev -> ´Ýo£d_codec !ð v® ) { 1087 dev -> ´Ýo£d_codec = 0; 1091 dev -> ´Ýo£d_codec = 0; 1092 dev -> ÃgÙŸ‹d_codec = v® ; 1094 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 1100 ià( dev -> d–ay_sco == 0) 1101 dev -> d–ay_sco = `g_idË_add ( cÚÃù_sco_d–ayed , dev); 1103  HFP_GW_CMD_TYPE_READ : 1104  HFP_GW_CMD_TYPE_TEST : 1105  HFP_GW_CMD_TYPE_COMMAND : 1109 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 1110 } } 1112  $©_cmd_ckpd ( hå_cÚ‹xt * »suÉ , hå_gw_cmd_ty³ ty³ , 1113 * u£r_d©a ) 1115  hf_deviû * dev = u£r_d©a ; 1116  h®_ev_hªdsä“_h¥_key_´ess ev ; 1117  v® ; 1119 `DBG (""); 1121  ty³ ) { 1122  HFP_GW_CMD_TYPE_SET : 1123 ià(! `hå_cÚ‹xt_g‘_numb” ( »suÉ , & v® ) || val != 200) 1126 ià( `hå_cÚ‹xt_has_Ãxt ( »suÉ )) 1129 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 1131 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 1132 HAL_EV_HANDSFREE_HSP_KEY_PRESS , 1133 ( ev ), &ev); 1135 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 1137  HFP_GW_CMD_TYPE_READ : 1138  HFP_GW_CMD_TYPE_TEST : 1139  HFP_GW_CMD_TYPE_COMMAND : 1143 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 1144 } } 1146  $»gi¡”_po¡_¦c_© ( hf_deviû * dev ) 1148 ià( dev -> h¥ ) { 1149 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_ckpd , "+CKPD", dev, NULL ); 1150 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_vgs , "+VGS", dev, NULL ); 1151 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_vgm , "+VGM", dev, NULL ); 1155 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_a , "A", dev, NULL ); 1156 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_d , "D", dev, NULL ); 1157 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_ccwa , "+CCWA", dev, NULL ); 1158 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_chup , "+CHUP", dev, NULL ); 1159 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_þcc , "+CLCC", dev, NULL ); 1160 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_cÝs , "+COPS", dev, NULL ); 1161 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_cm“ , "+CMEE", dev, NULL ); 1162 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_þ , "+CLIP", dev, NULL ); 1163 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_vts , "+VTS", dev, NULL ); 1164 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_úum , "+CNUM", dev, NULL ); 1165 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_bŸ , "+BIA", dev, NULL ); 1166 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_bšp , "+BINP", dev, NULL ); 1167 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_bldn , "+BLDN", dev, NULL ); 1168 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_bv¿ , "+BVRA", dev, NULL ); 1169 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_Äec , "+NREC", dev, NULL ); 1170 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_vgs , "+VGS", dev, NULL ); 1171 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_vgm , "+VGM", dev, NULL ); 1172 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_bsœ , "+BSIR", dev, NULL ); 1173 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_bŒh , "+BTRH", dev, NULL ); 1174 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_bcc , "+BCC", dev, NULL ); 1175 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_bcs , "+BCS", dev, NULL ); 1176 } } 1178  $©_cmd_cm” ( hå_cÚ‹xt * »suÉ , hå_gw_cmd_ty³ ty³ , 1179 * u£r_d©a ) 1181  hf_deviû * dev = u£r_d©a ; 1182  v® ; 1184  ty³ ) { 1185  HFP_GW_CMD_TYPE_SET : 1187 ià(! `hå_cÚ‹xt_g‘_numb” ( »suÉ , & v® ) || val != 3) 1191 ià(! `hå_cÚ‹xt_g‘_numb” ( »suÉ , & v® )) 1195 ià(! `hå_cÚ‹xt_g‘_numb” ( »suÉ , & v® )) 1199 ià(! `hå_cÚ‹xt_g‘_numb” ( »suÉ , & v® ) || val > 1) 1202 ià( `hå_cÚ‹xt_has_Ãxt ( »suÉ )) 1205 dev -> šdiÿtÜs_’abËd = v® ; 1207 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 1209 ià( dev -> ã©u»s & HFP_HF_FEAT_3WAY ) 1212 `»gi¡”_po¡_¦c_© ( dev ); 1213 `£t_¡©e ( dev , HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED ); 1215  HFP_GW_CMD_TYPE_TEST : 1216  HFP_GW_CMD_TYPE_READ : 1217  HFP_GW_CMD_TYPE_COMMAND : 1221 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 1223 ià( dev -> ¡©e !ð HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED ) 1224 `hå_gw_discÚÃù ( dev -> gw ); 1225 } } 1227  $©_cmd_cšd ( hå_cÚ‹xt * »suÉ , hå_gw_cmd_ty³ ty³ , 1228 * u£r_d©a ) 1230  hf_deviû * dev = u£r_d©a ; 1231  h®_ev_hªdsä“_cšd ev ; 1232 * buf , * ±r ; 1233  Ën ; 1234  i ; 1236  ty³ ) { 1237  HFP_GW_CMD_TYPE_TEST : 1243 ià( `codec_ÃgÙŸtiÚ_suµÜ‹d ( dev ) && 1244 ! dev -> codecs [ CVSD_OFFSET ]. »mÙe_suµÜ‹d ) 1247 Ën = `¡¾’ ("+CIND:") + 1; 1249  i = 0; i < IND_COUNT ; i++) { 1250 Ën +ð `¡¾’ ("(\"\",(X,X)),"); 1251 Ën +ð `¡¾’ ( dev -> šds [ i ]. Çme ); 1254 buf = `g_m®loc ( Ën ); 1256 ±r = buf + `¥rštf (buf, "+CIND:"); 1258  i = 0; i < IND_COUNT ; i++) { 1259 ±r +ð `¥rštf (ptr, "(\"%s\",(%d%c%d)),", 1260 dev -> šds [ i ]. Çme , 1261 dev -> šds [ i ]. mš , 1262 dev -> šds [ i ]. max == 1 ? ',' : '-', 1263 dev -> šds [ i ]. max ); 1266 ±r --; 1267 * ±r = '\0'; 1269 `hå_gw_£nd_šfo ( dev -> gw , "%s", buf ); 1270 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 1272 `g_ä“ ( buf ); 1274  HFP_GW_CMD_TYPE_READ : 1275 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 1277 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 1278 HAL_EV_HANDSFREE_CIND , ( ev ), &ev); 1280  HFP_GW_CMD_TYPE_SET : 1281  HFP_GW_CMD_TYPE_COMMAND : 1285 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 1287 ià( dev -> ¡©e !ð HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED ) 1288 `hå_gw_discÚÃù ( dev -> gw ); 1289 } } 1291  $©_cmd_brsf ( hå_cÚ‹xt * »suÉ , hå_gw_cmd_ty³ ty³ , 1292 * u£r_d©a ) 1294  hf_deviû * dev = u£r_d©a ; 1295  ã© ; 1297  ty³ ) { 1298  HFP_GW_CMD_TYPE_SET : 1299 ià(! `hå_cÚ‹xt_g‘_numb” ( »suÉ , & ã© )) 1302 ià( `hå_cÚ‹xt_has_Ãxt ( »suÉ )) 1306 dev -> ã©u»s = ã© ; 1308 `hå_gw_£nd_šfo ( dev -> gw , "+BRSF: %u", hå_ag_ã©u»s ); 1309 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 1311  HFP_GW_CMD_TYPE_READ : 1312  HFP_GW_CMD_TYPE_TEST : 1313  HFP_GW_CMD_TYPE_COMMAND : 1317 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 1319 ià( dev -> ¡©e !ð HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED ) 1320 `hå_gw_discÚÃù ( dev -> gw ); 1321 } } 1323  $©_cmd_chld ( hå_cÚ‹xt * »suÉ , hå_gw_cmd_ty³ ty³ , 1324 * u£r_d©a ) 1326  hf_deviû * dev = u£r_d©a ; 1327  h®_ev_hªdsä“_chld ev ; 1328  v® ; 1330 `DBG (""); 1332  ty³ ) { 1333  HFP_GW_CMD_TYPE_SET : 1334 ià(! `hå_cÚ‹xt_g‘_numb” ( »suÉ , & v® ) || val > 3) 1338 ià( `hå_cÚ‹xt_has_Ãxt ( »suÉ )) 1342 ev . chld = v® ; 1343 `bdaddr2ªdroid (& dev -> bdaddr , ev .bdaddr); 1345 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HANDSFREE , 1346 HAL_EV_HANDSFREE_CHLD , ( ev ), &ev); 1348  HFP_GW_CMD_TYPE_TEST : 1349 `hå_gw_£nd_šfo ( dev -> gw , "+CHLD: (%s)", HFP_AG_CHLD ); 1350 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 1352 `»gi¡”_po¡_¦c_© ( dev ); 1353 `£t_¡©e ( dev , HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED ); 1355  HFP_GW_CMD_TYPE_READ : 1356  HFP_GW_CMD_TYPE_COMMAND : 1360 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 1362 ià( dev -> ¡©e !ð HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED ) 1363 `hå_gw_discÚÃù ( dev -> gw ); 1364 } } 1366  hå_codec * $fšd_codec_by_ty³ ( hf_deviû * dev , ušt8_t ty³ ) 1368  i ; 1370  i = 0; i < CODECS_COUNT ; i++) 1371 ià( ty³ =ð dev -> codecs [ i ].type) 1372  & dev -> codecs [ i ]; 1374  NULL ; 1375 } } 1377  $©_cmd_bac ( hå_cÚ‹xt * »suÉ , hå_gw_cmd_ty³ ty³ , 1378 * u£r_d©a ) 1380  hf_deviû * dev = u£r_d©a ; 1381  v® ; 1383 `DBG (""); 1385  ty³ ) { 1386  HFP_GW_CMD_TYPE_SET : 1387 ià(! `codec_ÃgÙŸtiÚ_suµÜ‹d ( dev )) 1388  çžed ; 1391 `š™_codecs ( dev ); 1392 dev -> ÃgÙŸ‹d_codec = 0; 1398 ià(! `hå_cÚ‹xt_g‘_numb” ( »suÉ , & v® ) || 1399 v® !ð CODEC_ID_CVSD ) 1400  çžed ; 1402 dev -> codecs [ CVSD_OFFSET ]. »mÙe_suµÜ‹d = Œue ; 1404 ià( `hå_cÚ‹xt_g‘_numb” ( »suÉ , & v® )) { 1405 ià( v® !ð CODEC_ID_MSBC ) 1406  çžed ; 1408 dev -> codecs [ MSBC_OFFSET ]. »mÙe_suµÜ‹d = Œue ; 1411  `hå_cÚ‹xt_has_Ãxt ( »suÉ )) { 1412  hå_codec * codec ; 1414 ià(! `hå_cÚ‹xt_g‘_numb” ( »suÉ , & v® )) 1415  çžed ; 1417 codec = `fšd_codec_by_ty³ ( dev , v® ); 1418 ià(! codec ) 1421 codec -> »mÙe_suµÜ‹d = Œue ; 1424 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 1426 ià( dev -> ´Ýo£d_codec ) 1427 `£Ëù_codec ( dev , 0); 1429  HFP_GW_CMD_TYPE_TEST : 1430  HFP_GW_CMD_TYPE_READ : 1431  HFP_GW_CMD_TYPE_COMMAND : 1435 çžed : 1436 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 1438 ià( dev -> ¡©e !ð HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED ) 1439 `hå_gw_discÚÃù ( dev -> gw ); 1440 } } 1442  $»gi¡”_¦c_© ( hf_deviû * dev ) 1444 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_brsf , "+BRSF", dev, NULL ); 1445 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_cšd , "+CIND", dev, NULL ); 1446 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_cm” , "+CMER", dev, NULL ); 1447 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_chld , "+CHLD", dev, NULL ); 1448 `hå_gw_»gi¡” ( dev -> gw , ©_cmd_bac , "+BAC", dev, NULL ); 1449 } } 1451  $cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 1453  hf_deviû * dev = u£r_d©a ; 1455 `DBG (""); 1457 ià( ”r ) { 1458 `”rÜ ("hªdsä“: cÚÃù fažed (%s)", ”r -> mes§ge ); 1459  çžed ; 1462 dev -> gw = `hå_gw_Ãw ( `g_io_chªÃl_unix_g‘_fd ( chª )); 1463 ià(! dev -> gw ) 1464  çžed ; 1466 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chª , FALSE ); 1468 `hå_gw_£t_þo£_Ú_uÄef ( dev -> gw , Œue ); 1469 `hå_gw_£t_commªd_hªdËr ( dev -> gw , ©_cmd_unknown , dev, NULL ); 1470 `hå_gw_£t_discÚÃù_hªdËr ( dev -> gw , discÚÃù_w©ch , dev, NULL ); 1472 ià( dev -> h¥ ) { 1473 `»gi¡”_po¡_¦c_© ( dev ); 1474 `£t_¡©e ( dev , HAL_EV_HANDSFREE_CONN_STATE_CONNECTED ); 1475 `£t_¡©e ( dev , HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED ); 1479 `»gi¡”_¦c_© ( dev ); 1480 `£t_¡©e ( dev , HAL_EV_HANDSFREE_CONN_STATE_CONNECTED ); 1483 çžed : 1484 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 1485 `deviû_de¡roy ( dev ); 1486 } } 1488  $cÚfœm_cb ( GIOChªÃl * chª , gpoš‹r d©a ) 1490  add»ss [18]; 1491 bdaddr_t bdaddr ; 1492 GE¼Ü * ”r = NULL ; 1493  hf_deviû * dev ; 1495 `bt_io_g‘ ( chª , & ”r , 1496 BT_IO_OPT_DEST , add»ss , 1497 BT_IO_OPT_DEST_BDADDR , & bdaddr , 1498 BT_IO_OPT_INVALID ); 1499 ià( ”r ) { 1500 `”rÜ ("hªdsä“: cÚfœm fažed (%s)", ”r -> mes§ge ); 1501 `g_”rÜ_ä“ ( ”r ); 1502  drÝ ; 1505 `DBG ("šcomšg cÚÃù from %s", add»ss ); 1507 dev = `g‘_deviû (& bdaddr ); 1508 ià(! dev ) { 1509 `”rÜ ("hªdsä“: FažedØg‘ deviû objeù fÜ %s", add»ss ); 1510  drÝ ; 1513 ià( dev -> ¡©e !ð HAL_EV_HANDSFREE_CONN_STATE_DISCONNECTED ) { 1514 `šfo ("hªdsä“:„efusšg cÚÃùiÚ from %s", add»ss ); 1515  drÝ ; 1518 ià(! `bt_io_acû± ( chª , cÚÃù_cb , dev , NULL , NULL)) { 1519 `”rÜ ("handsfree: failedo‡ccept connection"); 1520 `deviû_de¡roy ( dev ); 1521  drÝ ; 1524 dev -> h¥ = `GPOINTER_TO_INT ( d©a ); 1526 `£t_¡©e ( dev , HAL_EV_HANDSFREE_CONN_STATE_CONNECTING ); 1530 drÝ : 1531 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 1532 } } 1534  $sdp_h¥_£¬ch_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r d©a ) 1536  hf_deviû * dev = d©a ; 1537 sdp_li¡_t * ´Ùos , * þas£s ; 1538 GE¼Ü * g”r = NULL ; 1539 GIOChªÃl * io ; 1540 uuid_t uuid ; 1541  chªÃl ; 1543 `DBG (""); 1545 ià( ”r < 0) { 1546 `”rÜ ("handsfree: unableo get SDP„ecord: %s", 1547 `¡»¼Ü (- ”r )); 1548  çž ; 1551 ià(! »cs || !»cs-> d©a ) { 1552 `šfo ("handsfree:‚o HSP SDP„ecords found"); 1553  çž ; 1556 ià( `sdp_g‘_£rviû_þas£s ( »cs -> d©a , & þas£s ) < 0 || !classes) { 1557 `”rÜ ("handsfree: unableo get service classes from„ecord"); 1558  çž ; 1561 ià( `sdp_g‘_acûss_´Ùos ( »cs -> d©a , & ´Ùos ) < 0) { 1562 `”rÜ ("handsfree: unableo get‡ccess…rotocols from„ecord"); 1563 `sdp_li¡_ä“ ( þas£s , ä“ ); 1564  çž ; 1570 `memýy (& uuid , þas£s -> d©a , (uuid)); 1571 `sdp_li¡_ä“ ( þas£s , ä“ ); 1573 ià(! `sdp_uuid128_to_uuid (& uuid è|| uuid. ty³ !ð SDP_UUID16 || 1574 uuid . v®ue . uuid16 !ð HEADSET_SVCLASS_ID ) { 1575 `sdp_li¡_ä“ ( ´Ùos , NULL ); 1576 `”rÜ ("handsfree: invalid service„ecord or‚ot HSP"); 1577  çž ; 1580 chªÃl = `sdp_g‘_´Ùo_pÜt ( ´Ùos , RFCOMM_UUID ); 1581 `sdp_li¡_fÜ—ch ( ´Ùos , ( sdp_li¡_func_t è sdp_li¡_ä“ , NULL ); 1582 `sdp_li¡_ä“ ( ´Ùos , NULL ); 1583 ià( chªÃl <= 0) { 1584 `”rÜ ("handsfree: unableo get RFCOMM channel from„ecord"); 1585  çž ; 1588 io = `bt_io_cÚÃù ( cÚÃù_cb , dev , NULL , & g”r , 1589 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 1590 BT_IO_OPT_DEST_BDADDR , & dev -> bdaddr , 1591 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 1592 BT_IO_OPT_CHANNEL , chªÃl , 1593 BT_IO_OPT_INVALID ); 1594 ià(! io ) { 1595 `”rÜ ("hªdsä“: uÇbËØcÚÃù: %s", g”r -> mes§ge ); 1596 `g_”rÜ_ä“ ( g”r ); 1597  çž ; 1600 dev -> h¥ = Œue ; 1602 `g_io_chªÃl_uÄef ( io ); 1605 çž : 1606 `deviû_de¡roy ( dev ); 1607 } } 1609  $sdp_£¬ch_h¥ ( hf_deviû * dev ) 1611 uuid_t uuid ; 1613 `sdp_uuid16_ü—‹ (& uuid , HEADSET_SVCLASS_ID ); 1615  `bt_£¬ch_£rviû (& ad­‹r_addr , & dev -> bdaddr , & uuid , 1616 sdp_h¥_£¬ch_cb , dev , NULL , 0); 1617 } } 1619  $sdp_hå_£¬ch_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r d©a ) 1621  hf_deviû * dev = d©a ; 1622 sdp_li¡_t * ´Ùos , * þas£s ; 1623 GE¼Ü * g”r = NULL ; 1624 GIOChªÃl * io ; 1625 uuid_t uuid ; 1626  chªÃl ; 1628 `DBG (""); 1630 ià( ”r < 0) { 1631 `”rÜ ("handsfree: unableo get SDP„ecord: %s", 1632 `¡»¼Ü (- ”r )); 1633  çž ; 1636 ià(! »cs || !»cs-> d©a ) { 1637 `šfo ("handsfree:‚o HFP SDP„ecords found,rying HSP"); 1639 ià( `sdp_£¬ch_h¥ ( dev ) < 0) { 1640 `”rÜ ("handsfree: HSP SDP search failed"); 1641  çž ; 1647 ià( `sdp_g‘_£rviû_þas£s ( »cs -> d©a , & þas£s ) < 0 || !classes) { 1648 `”rÜ ("handsfree: unableo get service classes from„ecord"); 1649  çž ; 1652 ià( `sdp_g‘_acûss_´Ùos ( »cs -> d©a , & ´Ùos ) < 0) { 1653 `”rÜ ("handsfree: unableo get‡ccess…rotocols from„ecord"); 1654 `sdp_li¡_ä“ ( þas£s , ä“ ); 1655  çž ; 1660 `memýy (& uuid , þas£s -> d©a , (uuid)); 1661 `sdp_li¡_ä“ ( þas£s , ä“ ); 1663 ià(! `sdp_uuid128_to_uuid (& uuid è|| uuid. ty³ !ð SDP_UUID16 || 1664 uuid . v®ue . uuid16 !ð HANDSFREE_SVCLASS_ID ) { 1665 `sdp_li¡_ä“ ( ´Ùos , NULL ); 1666 `”rÜ ("handsfree: invalid service„ecord or‚ot HFP"); 1667  çž ; 1670 chªÃl = `sdp_g‘_´Ùo_pÜt ( ´Ùos , RFCOMM_UUID ); 1671 `sdp_li¡_fÜ—ch ( ´Ùos , ( sdp_li¡_func_t è sdp_li¡_ä“ , NULL ); 1672 `sdp_li¡_ä“ ( ´Ùos , NULL ); 1673 ià( chªÃl <= 0) { 1674 `”rÜ ("handsfree: unableo get RFCOMM channel from„ecord"); 1675  çž ; 1678 io = `bt_io_cÚÃù ( cÚÃù_cb , dev , NULL , & g”r , 1679 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 1680 BT_IO_OPT_DEST_BDADDR , & dev -> bdaddr , 1681 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 1682 BT_IO_OPT_CHANNEL , chªÃl , 1683 BT_IO_OPT_INVALID ); 1684 ià(! io ) { 1685 `”rÜ ("hªdsä“: uÇbËØcÚÃù: %s", g”r -> mes§ge ); 1686 `g_”rÜ_ä“ ( g”r ); 1687  çž ; 1690 `g_io_chªÃl_uÄef ( io ); 1693 çž : 1694 `deviû_de¡roy ( dev ); 1695 } } 1697  $sdp_£¬ch_hå ( hf_deviû * dev ) 1699 uuid_t uuid ; 1701 `sdp_uuid16_ü—‹ (& uuid , HANDSFREE_SVCLASS_ID ); 1703  `bt_£¬ch_£rviû (& ad­‹r_addr , & dev -> bdaddr , & uuid , 1704 sdp_hå_£¬ch_cb , dev , NULL , 0); 1705 } } 1707  $hªdË_cÚÃù (cÚ¡ * buf , ušt16_t Ën ) 1709 cÚ¡  h®_cmd_hªdsä“_cÚÃù * cmd = buf ; 1710  hf_deviû * dev ; 1711  addr [18]; 1712 ušt8_t ¡©us ; 1713 bdaddr_t bdaddr ; 1714  »t ; 1716 `DBG (""); 1718 `ªdroid2bdaddr (& cmd -> bdaddr , &bdaddr); 1720 dev = `g‘_deviû (& bdaddr ); 1721 ià(! dev ) { 1722 ¡©us = HAL_STATUS_FAILED ; 1723  çžed ; 1726 ià( dev -> ¡©e !ð HAL_EV_HANDSFREE_CONN_STATE_DISCONNECTED ) { 1727 ¡©us = HAL_STATUS_FAILED ; 1728  çžed ; 1731 `ba2¡r (& bdaddr , addr ); 1732 `DBG ("cÚÃùšgØ%s", addr ); 1735 »t = hå_£rv” ? `sdp_£¬ch_hå ( dev è: `sdp_£¬ch_h¥ (dev); 1736 ià( »t < 0) { 1737 `”rÜ ("handsfree: SDP search failed"); 1738 `deviû_de¡roy ( dev ); 1739 ¡©us = HAL_STATUS_FAILED ; 1740  çžed ; 1743 `£t_¡©e ( dev , HAL_EV_HANDSFREE_CONN_STATE_CONNECTING ); 1745 ¡©us = HAL_STATUS_SUCCESS ; 1747 çžed : 1748 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 1749 HAL_OP_HANDSFREE_CONNECT , ¡©us ); 1750 } } 1752  $hªdË_discÚÃù (cÚ¡ * buf , ušt16_t Ën ) 1754 cÚ¡  h®_cmd_hªdsä“_discÚÃù * cmd = buf ; 1755  hf_deviû * dev ; 1756 bdaddr_t bdaddr ; 1757 ušt8_t ¡©us ; 1759 `DBG (""); 1761 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 1763 dev = `fšd_deviû (& bdaddr ); 1764 ià(! dev ) { 1765 ¡©us = HAL_STATUS_FAILED ; 1766  çžed ; 1769 ià( dev -> ¡©e =ð HAL_EV_HANDSFREE_CONN_STATE_DISCONNECTED ) { 1770 ¡©us = HAL_STATUS_FAILED ; 1771  çžed ; 1774 ià( dev -> ¡©e =ð HAL_EV_HANDSFREE_CONN_STATE_DISCONNECTING ) { 1775 ¡©us = HAL_STATUS_SUCCESS ; 1776  çžed ; 1779 ià( dev -> ¡©e =ð HAL_EV_HANDSFREE_CONN_STATE_CONNECTING ) { 1780 `deviû_de¡roy ( dev ); 1782 `£t_¡©e ( dev , HAL_EV_HANDSFREE_CONN_STATE_DISCONNECTING ); 1783 `hå_gw_discÚÃù ( dev -> gw ); 1786 ¡©us = HAL_STATUS_SUCCESS ; 1788 çžed : 1789 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 1790 HAL_OP_HANDSFREE_DISCONNECT , ¡©us ); 1791 } } 1793  boÞ $discÚÃù_sco ( hf_deviû * dev ) 1795 ià( dev -> audio_¡©e =ð HAL_EV_HANDSFREE_AUDIO_STATE_DISCONNECTED || 1796 dev -> audio_¡©e =ð HAL_EV_HANDSFREE_AUDIO_STATE_DISCONNECTING ) 1797  çl£ ; 1799 `bt_sco_discÚÃù ( sco ); 1800 `£t_audio_¡©e ( dev , HAL_EV_HANDSFREE_AUDIO_STATE_DISCONNECTING ); 1802  Œue ; 1803 } } 1805  boÞ $cÚÃù_audio ( hf_deviû * dev ) 1807 ià( dev -> audio_¡©e !ð HAL_EV_HANDSFREE_AUDIO_STATE_DISCONNECTED ) 1808  çl£ ; 1811 ià( `codec_ÃgÙŸtiÚ_suµÜ‹d ( dev è&& !dev-> ÃgÙŸ‹d_codec ) { 1812 `£Ëù_codec ( dev , 0); 1813  Œue ; 1816  `cÚÃù_sco ( dev ); 1817 } } 1819  $hªdË_cÚÃù_audio (cÚ¡ * buf , ušt16_t Ën ) 1821 cÚ¡  h®_cmd_hªdsä“_cÚÃù_audio * cmd = buf ; 1822  hf_deviû * dev ; 1823 bdaddr_t bdaddr ; 1824 ušt8_t ¡©us ; 1826 `DBG (""); 1828 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 1830 dev = `fšd_deviû (& bdaddr ); 1831 ià(! dev ) { 1832 ¡©us = HAL_STATUS_FAILED ; 1833  dÚe ; 1836 ià( dev -> audio_¡©e !ð HAL_EV_HANDSFREE_AUDIO_STATE_DISCONNECTED ) { 1837 ¡©us = HAL_STATUS_FAILED ; 1838  dÚe ; 1841 ¡©us = `cÚÃù_audio ( dev è? HAL_STATUS_SUCCESS : HAL_STATUS_FAILED ; 1843 dÚe : 1844 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 1845 HAL_OP_HANDSFREE_CONNECT_AUDIO , ¡©us ); 1846 } } 1848  $hªdË_discÚÃù_audio (cÚ¡ * buf , ušt16_t Ën ) 1850 cÚ¡  h®_cmd_hªdsä“_discÚÃù_audio * cmd = buf ; 1851  hf_deviû * dev ; 1852 bdaddr_t bdaddr ; 1853 ušt8_t ¡©us ; 1855 `DBG (""); 1857 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 1859 dev = `fšd_deviû (& bdaddr ); 1860 ià(! dev ) { 1861 ¡©us = HAL_STATUS_FAILED ; 1862  dÚe ; 1865 ¡©us = `discÚÃù_sco ( dev è? HAL_STATUS_SUCCESS : HAL_STATUS_FAILED ; 1867 dÚe : 1868 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 1869 HAL_OP_HANDSFREE_DISCONNECT_AUDIO , ¡©us ); 1870 } } 1872  $hªdË_¡¬t_vr (cÚ¡ * buf , ušt16_t Ën ) 1874 cÚ¡  h®_cmd_hªdsä“_¡¬t_vr * cmd = buf ; 1875  hf_deviû * dev ; 1876 bdaddr_t bdaddr ; 1877 ušt8_t ¡©us ; 1879 `DBG (""); 1881 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 1883 dev = `fšd_deviû (& bdaddr ); 1884 ià(! dev ) { 1885 ¡©us = HAL_STATUS_FAILED ; 1886  dÚe ; 1889 ià( dev -> ã©u»s & HFP_HF_FEAT_VR ) { 1890 `hå_gw_£nd_šfo ( dev -> gw , "+BVRA: 1"); 1891 ¡©us = HAL_STATUS_SUCCESS ; 1893 ¡©us = HAL_STATUS_FAILED ; 1896 dÚe : 1897 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 1898 HAL_OP_HANDSFREE_START_VR , ¡©us ); 1899 } } 1901  $hªdË_¡Ý_vr (cÚ¡ * buf , ušt16_t Ën ) 1903 cÚ¡  h®_cmd_hªdsä“_¡Ý_vr * cmd = buf ; 1904  hf_deviû * dev ; 1905 bdaddr_t bdaddr ; 1906 ušt8_t ¡©us ; 1908 `DBG (""); 1910 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 1912 dev = `fšd_deviû (& bdaddr ); 1913 ià(! dev ) { 1914 ¡©us = HAL_STATUS_FAILED ; 1915  dÚe ; 1918 ià( dev -> ã©u»s & HFP_HF_FEAT_VR ) { 1919 `hå_gw_£nd_šfo ( dev -> gw , "+BVRA: 0"); 1920 ¡©us = HAL_STATUS_SUCCESS ; 1922 ¡©us = HAL_STATUS_FAILED ; 1925 dÚe : 1926 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 1927 HAL_OP_HANDSFREE_STOP_VR , ¡©us ); 1928 } } 1930  $hªdË_vÞume_cÚŒÞ (cÚ¡ * buf , ušt16_t Ën ) 1932 cÚ¡  h®_cmd_hªdsä“_vÞume_cÚŒÞ * cmd = buf ; 1933  hf_deviû * dev ; 1934 ušt8_t ¡©us , vÞume ; 1935 bdaddr_t bdaddr ; 1937 `DBG ("ty³=%u vÞume=%u", cmd -> ty³ , cmd-> vÞume ); 1939 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 1941 dev = `fšd_deviû (& bdaddr ); 1942 ià(! dev ) { 1943 ¡©us = HAL_STATUS_FAILED ; 1944  dÚe ; 1947 vÞume = cmd ->volume > 15 ? 15 : cmd->volume; 1949  cmd -> ty³ ) { 1950  HAL_HANDSFREE_VOLUME_TYPE_MIC : 1951 `hå_gw_£nd_šfo ( dev -> gw , "+VGM: %u", vÞume ); 1953 ¡©us = HAL_STATUS_SUCCESS ; 1955  HAL_HANDSFREE_VOLUME_TYPE_SPEAKER : 1956 `hå_gw_£nd_šfo ( dev -> gw , "+VGS: %u", vÞume ); 1958 ¡©us = HAL_STATUS_SUCCESS ; 1961 ¡©us = HAL_STATUS_FAILED ; 1965 dÚe : 1966 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 1967 HAL_OP_HANDSFREE_VOLUME_CONTROL , ¡©us ); 1968 } } 1970  $upd©e_šdiÿtÜ ( hf_deviû * dev ,  šd , ušt8_t v® ) 1972 `DBG ("šd=%u‚ew=%u old=%u", šd , v® , dev -> šds [ind].val); 1974 ià( dev -> šds [ šd ]. v® == val) 1977 dev -> šds [ šd ]. v® = val; 1979 ià(! dev -> šdiÿtÜs_’abËd ) 1982 ià(! dev -> šds [ šd ]. aùive ) 1986 `hå_gw_£nd_šfo ( dev -> gw , "+CIEV: %u,%u", šd + 1, v® ); 1987 } } 1989  $deviû_¡©us_nÙif (* d©a , * u£r_d©a ) 1991  hf_deviû * dev = d©a ; 1992  h®_cmd_hªdsä“_deviû_¡©us_nÙif * cmd = u£r_d©a ; 1994 `upd©e_šdiÿtÜ ( dev , IND_SERVICE , cmd -> ¡©e ); 1995 `upd©e_šdiÿtÜ ( dev , IND_ROAM , cmd -> ty³ ); 1996 `upd©e_šdiÿtÜ ( dev , IND_SIGNAL , cmd -> sigÇl ); 1997 `upd©e_šdiÿtÜ ( dev , IND_BATTCHG , cmd -> b©‹ry ); 1998 } } 2000  $hªdË_deviû_¡©us_nÙif (cÚ¡ * buf , ušt16_t Ën ) 2002 cÚ¡  h®_cmd_hªdsä“_deviû_¡©us_nÙif * cmd = buf ; 2003 ušt8_t ¡©us ; 2005 `DBG (""); 2007 ià( `queue_i£m±y ( deviûs )) { 2008 ¡©us = HAL_STATUS_FAILED ; 2009  dÚe ; 2013 `queue_fÜ—ch ( deviûs , deviû_¡©us_nÙif , (*è cmd ); 2015 ¡©us = HAL_STATUS_SUCCESS ; 2017 dÚe : 2018 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 2019 HAL_OP_HANDSFREE_DEVICE_STATUS_NOTIF , ¡©us ); 2020 } } 2022  $hªdË_cÝs (cÚ¡ * buf , ušt16_t Ën ) 2024 cÚ¡  h®_cmd_hªdsä“_cÝs_»¥Ú£ * cmd = buf ; 2025  hf_deviû * dev ; 2026 bdaddr_t bdaddr ; 2027 ušt8_t ¡©us ; 2029 ià( Ën !ð(* cmd ) + cmd->len || 2030 ( cmd -> Ën !ð0 && cmd-> buf [cmd->len - 1] != '\0')) { 2031 `”rÜ ("Invalid cops„esponse command,erminating"); 2032 `¿i£ ( SIGTERM ); 2036 `DBG (""); 2038 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 2040 dev = `fšd_deviû (& bdaddr ); 2041 ià(! dev ) { 2042 ¡©us = HAL_STATUS_FAILED ; 2043  dÚe ; 2046 `hå_gw_£nd_šfo ( dev -> gw , "+COPS: 0,0,\"%.16s\"", 2047 cmd -> Ën ? (*ècmd-> buf : ""); 2049 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 2051 ¡©us = HAL_STATUS_SUCCESS ; 2053 dÚe : 2054 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 2055 HAL_OP_HANDSFREE_COPS_RESPONSE , ¡©us ); 2056 } } 2058  $g‘_ÿΣtup ( ušt8_t ¡©e ) 2060  ¡©e ) { 2061  HAL_HANDSFREE_CALL_STATE_INCOMING : 2063  HAL_HANDSFREE_CALL_STATE_DIALING : 2065  HAL_HANDSFREE_CALL_STATE_ALERTING : 2070 } } 2072  $hªdË_cšd (cÚ¡ * buf , ušt16_t Ën ) 2074 cÚ¡  h®_cmd_hªdsä“_cšd_»¥Ú£ * cmd = buf ; 2075  hf_deviû * dev ; 2076 bdaddr_t bdaddr ; 2077 ušt8_t ¡©us ; 2079 `DBG (""); 2081 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 2083 dev = `fšd_deviû (& bdaddr ); 2084 ià(! dev ) { 2085 ¡©us = HAL_STATUS_FAILED ; 2086  dÚe ; 2090 dev -> šds [ IND_SERVICE ]. v® = cmd -> svc ; 2091 dev -> šds [ IND_CALL ]. v® = !!( cmd -> num_aùive + cmd-> num_h–d ); 2092 dev -> šds [ IND_CALLSETUP ]. v® = `g‘_ÿΣtup ( cmd -> ¡©e ); 2093 dev -> šds [ IND_CALLHELD ]. v® = cmd -> num_h–d ? 2094 ( cmd -> num_aùive ? 1 : 2) : 0; 2095 dev -> šds [ IND_SIGNAL ]. v® = cmd -> sigÇl ; 2096 dev -> šds [ IND_ROAM ]. v® = cmd -> rßm ; 2097 dev -> šds [ IND_BATTCHG ]. v® = cmd -> b©t_chg ; 2100 `hå_gw_£nd_šfo ( dev -> gw , "+CIND: %u,%u,%u,%u,%u,%u,%u", 2101 dev -> šds [ IND_SERVICE ]. v® , 2102 dev -> šds [ IND_CALL ]. v® , 2103 dev -> šds [ IND_CALLSETUP ]. v® , 2104 dev -> šds [ IND_CALLHELD ]. v® , 2105 dev -> šds [ IND_SIGNAL ]. v® , 2106 dev -> šds [ IND_ROAM ]. v® , 2107 dev -> šds [ IND_BATTCHG ]. v® ); 2109 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 2111 ¡©us = HAL_STATUS_SUCCESS ; 2113 dÚe : 2114 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 2115 HAL_OP_HANDSFREE_CIND_RESPONSE , ¡©us ); 2116 } } 2118  $hªdË_fÜm©‹d_©_»¥ (cÚ¡ * buf , ušt16_t Ën ) 2120 cÚ¡  h®_cmd_hªdsä“_fÜm©‹d_©_»¥Ú£ * cmd = buf ; 2121  hf_deviû * dev ; 2122 bdaddr_t bdaddr ; 2123 ušt8_t ¡©us ; 2125 `DBG (""); 2127 ià( Ën !ð(* cmd ) + cmd->len || 2128 ( cmd -> Ën !ð0 && cmd-> buf [cmd->len - 1] != '\0')) { 2129 `”rÜ ("Invalid formatted AT„esponse command,erminating"); 2130 `¿i£ ( SIGTERM ); 2134 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 2136 dev = `fšd_deviû (& bdaddr ); 2137 ià(! dev ) { 2138 ¡©us = HAL_STATUS_FAILED ; 2139  dÚe ; 2142 `hå_gw_£nd_šfo ( dev -> gw , "%s", cmd -> Ën ? (*ècmd-> buf : ""); 2144 ¡©us = HAL_STATUS_SUCCESS ; 2146 dÚe : 2147 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 2148 HAL_OP_HANDSFREE_FORMATTED_AT_RESPONSE , ¡©us ); 2149 } } 2151  $hªdË_©_»¥ (cÚ¡ * buf , ušt16_t Ën ) 2153 cÚ¡  h®_cmd_hªdsä“_©_»¥Ú£ * cmd = buf ; 2154  hf_deviû * dev ; 2155 bdaddr_t bdaddr ; 2156 ušt8_t ¡©us ; 2158 `DBG (""); 2160 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 2162 dev = `fšd_deviû (& bdaddr ); 2163 ià(! dev ) { 2164 ¡©us = HAL_STATUS_FAILED ; 2165  dÚe ; 2168 ià( cmd -> »¥Ú£ =ð HAL_HANDSFREE_AT_RESPONSE_OK ) 2169 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 2170 ià( dev -> cm“_’abËd ) 2171 `hå_gw_£nd_”rÜ ( dev -> gw , cmd -> ”rÜ ); 2173 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_ERROR ); 2175 ¡©us = HAL_STATUS_SUCCESS ; 2177 dÚe : 2178 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 2179 HAL_OP_HANDSFREE_AT_RESPONSE , ¡©us ); 2180 } } 2182  $hªdË_þcc_»¥ (cÚ¡ * buf , ušt16_t Ën ) 2184 cÚ¡  h®_cmd_hªdsä“_þcc_»¥Ú£ * cmd = buf ; 2185  hf_deviû * dev ; 2186 ušt8_t ¡©us ; 2187 bdaddr_t bdaddr ; 2188 * numb” ; 2190 ià( Ën !ð(* cmd è+ cmd-> numb”_Ën || (cmd->number_len != 0 && 2191 cmd -> numb” [cmd-> numb”_Ën - 1] != '\0')) { 2192 `”rÜ ("Invalid CLCC„esponse command,erminating"); 2193 `¿i£ ( SIGTERM ); 2197 `DBG (""); 2199 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 2201 dev = `fšd_deviû (& bdaddr ); 2202 ià(! dev ) { 2203 ¡©us = HAL_STATUS_FAILED ; 2204  dÚe ; 2207 ià(! cmd -> šdex ) { 2208 `hå_gw_£nd_»suÉ ( dev -> gw , HFP_RESULT_OK ); 2210 ¡©us = HAL_STATUS_SUCCESS ; 2211  dÚe ; 2214 numb” = cmd -> numb”_Ën ? (*) cmd->number : ""; 2216  cmd -> ¡©e ) { 2217  HAL_HANDSFREE_CALL_STATE_INCOMING : 2218  HAL_HANDSFREE_CALL_STATE_WAITING : 2219  HAL_HANDSFREE_CALL_STATE_ACTIVE : 2220  HAL_HANDSFREE_CALL_STATE_HELD : 2221  HAL_HANDSFREE_CALL_STATE_DIALING : 2222  HAL_HANDSFREE_CALL_STATE_ALERTING : 2223 ià( cmd -> ty³ =ð HAL_HANDSFREE_CALL_ADDRTYPE_INTERNATIONAL && 2224 numb” [0] != '+') 2225 `hå_gw_£nd_šfo ( dev -> gw , 2227 cmd -> šdex , cmd-> dœ , cmd-> ¡©e , 2228 cmd -> mode , cmd-> m±y , numb” , 2229 cmd -> ty³ ); 2231 `hå_gw_£nd_šfo ( dev -> gw , 2233 cmd -> šdex , cmd-> dœ , cmd-> ¡©e , 2234 cmd -> mode , cmd-> m±y , numb” , 2235 cmd -> ty³ ); 2237 ¡©us = HAL_STATUS_SUCCESS ; 2239  HAL_HANDSFREE_CALL_STATE_IDLE : 2241 ¡©us = HAL_STATUS_FAILED ; 2245 dÚe : 2246 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 2247 HAL_OP_HANDSFREE_CLCC_RESPONSE , ¡©us ); 2248 } } 2250  gboÞ—n $ršg_cb ( gpoš‹r u£r_d©a ) 2252  hf_deviû * dev = u£r_d©a ; 2254 `hå_gw_£nd_šfo ( dev -> gw , "RING"); 2256 ià( dev -> þ_’abËd && dev-> þ ) 2257 `hå_gw_£nd_šfo ( dev -> gw , "%s", dev-> þ ); 2259  TRUE ; 2260 } } 2262  $phÚe_¡©e_dŸlšg ( hf_deviû * dev ,  num_aùive , 2263  num_h–d ) 2265 `upd©e_šdiÿtÜ ( dev , IND_CALLSETUP , 2); 2267 ià( num_aùive =ð0 && num_h–d > 0) 2268 `upd©e_šdiÿtÜ ( dev , IND_CALLHELD , 2); 2270 ià( dev -> num_aùive =ð0 && dev-> num_h–d == 0) 2271 `cÚÃù_audio ( dev ); 2272 } } 2274  $phÚe_¡©e_®”tšg ( hf_deviû * dev ,  num_aùive , 2275  num_h–d ) 2277 `upd©e_šdiÿtÜ ( dev , IND_CALLSETUP , 3); 2278 } } 2280  $phÚe_¡©e_wa™šg ( hf_deviû * dev ,  num_aùive , 2281  num_h–d , ušt8_t ty³ , 2282 cÚ¡ ušt8_t * numb” ,  numb”_Ën ) 2284 * num ; 2286 ià(! dev -> ccwa_’abËd ) 2289 num = numb”_Ën ? (*è numb” : ""; 2291 ià( ty³ =ð HAL_HANDSFREE_CALL_ADDRTYPE_INTERNATIONAL && num [0] != '+') 2292 `hå_gw_£nd_šfo ( dev -> gw , "+CCWA: \"+%s\",%u", num , ty³ ); 2294 `hå_gw_£nd_šfo ( dev -> gw , "+CCWA: \"%s\",%u", num , ty³ ); 2296 `upd©e_šdiÿtÜ ( dev , IND_CALLSETUP , 1); 2297 } } 2299  $phÚe_¡©e_šcomšg ( hf_deviû * dev ,  num_aùive , 2300  num_h–d , ušt8_t ty³ , 2301 cÚ¡ ušt8_t * numb” ,  numb”_Ën ) 2303 * num ; 2305 ià( dev -> £tup_¡©e =ð HAL_HANDSFREE_CALL_STATE_INCOMING ) { 2306 ià( dev -> num_aùive !=‚um_active || 2307 dev -> num_h–d !=‚um_held) { 2312 `upd©e_šdiÿtÜ ( dev , IND_CALLHELD , 2313 num_h–d ? ( num_aùive ? 1 : 2) : 0); 2314 `upd©e_šdiÿtÜ ( dev , IND_CALL , 2315 !!( num_aùive + num_h–d )); 2321 ià( dev -> ÿÎ_hªgšg_up ) 2324 ià( num_aùive > 0 || num_h–d > 0) { 2325 `phÚe_¡©e_wa™šg ( dev , num_aùive , num_h–d , ty³ , numb” , 2326 numb”_Ën ); 2330 `upd©e_šdiÿtÜ ( dev , IND_CALLSETUP , 1); 2332 num = numb”_Ën ? (*è numb” : ""; 2334 ià( ty³ =ð HAL_HANDSFREE_CALL_ADDRTYPE_INTERNATIONAL && num [0] != '+') 2335 dev -> þ = `g_¡rdup_´štf ("+CLIP: \"+%s\",%u", num , ty³ ); 2337 dev -> þ = `g_¡rdup_´štf ("+CLIP: \"%s\",%u", num , ty³ ); 2340 `ršg_cb ( dev ); 2342 dev -> ršg = `g_timeout_add_£cÚds_fuÎ ( G_PRIORITY_DEFAULT , 2343 RING_TIMEOUT , ršg_cb , 2344 dev , NULL ); 2345 ià(! dev -> ršg ) { 2346 `g_ä“ ( dev -> þ ); 2347 dev -> þ = NULL ; 2349 } } 2351  $phÚe_¡©e_idË ( hf_deviû * dev ,  num_aùive , 2352  num_h–d ) 2354 ià( dev -> ršg ) { 2355 `g_sourû_»move ( dev -> ršg ); 2356 dev -> ršg = 0; 2358 ià( dev -> þ ) { 2359 `g_ä“ ( dev -> þ ); 2360 dev -> þ = NULL ; 2364  dev -> £tup_¡©e ) { 2365  HAL_HANDSFREE_CALL_STATE_INCOMING : 2366 ià( num_aùive > dev ->num_active) { 2367 `upd©e_šdiÿtÜ ( dev , IND_CALL , 1); 2369 ià( dev -> num_aùive =ð0 && dev-> num_h–d == 0) 2370 `cÚÃù_audio ( dev ); 2373 ià( num_h–d > dev ->num_held) 2374 `upd©e_šdiÿtÜ ( dev , IND_CALLHELD , 1); 2376 `upd©e_šdiÿtÜ ( dev , IND_CALLSETUP , 0); 2378 ià( num_aùive =ð dev ->num_aùiv&& num_h–d == dev->num_held) 2379 dev -> ÿÎ_hªgšg_up = Œue ; 2382  HAL_HANDSFREE_CALL_STATE_DIALING : 2383  HAL_HANDSFREE_CALL_STATE_ALERTING : 2384 ià( num_aùive > dev ->num_active) 2385 `upd©e_šdiÿtÜ ( dev , IND_CALL , 1); 2387 `upd©e_šdiÿtÜ ( dev , IND_CALLHELD , 2388 num_h–d ? ( num_aùive ? 1 : 2) : 0); 2390 `upd©e_šdiÿtÜ ( dev , IND_CALLSETUP , 0); 2392  HAL_HANDSFREE_CALL_STATE_IDLE : 2394 ià( dev -> ÿÎ_hªgšg_up ) { 2395 dev -> ÿÎ_hªgšg_up = çl£ ; 2400 ià( num_h–d !ð0 && num_aùive != 0 && 2401 dev -> num_aùive =ð num_h–d && 2402 dev -> num_h–d =ð num_aùive ) { 2404 dev -> šds [ IND_CALLHELD ]. v® = 0; 2405 } ià(( num_aùive > 0 || num_h–d > 0) && 2406 dev -> num_aùive == 0 && 2407 dev -> num_h–d == 0) { 2413 `cÚÃù_audio ( dev ); 2414 } ià( num_aùive =ð0 && num_h–d == 0) { 2415 `discÚÃù_sco ( dev ); 2418 `upd©e_šdiÿtÜ ( dev , IND_CALLHELD , 2419 num_h–d ? ( num_aùive ? 1 : 2) : 0); 2420 `upd©e_šdiÿtÜ ( dev , IND_CALL , !!( num_aùive + num_h–d )); 2421 `upd©e_šdiÿtÜ ( dev , IND_CALLSETUP , 0); 2424 ià( num_aùive =ð0 && num_h–d == 0 && 2425 dev -> šds [ IND_SERVICE ]. v® == 0 && 2426 ( dev -> num_aùive > 0 || dev-> num_h–d > 0)) 2427 `hå_gw_£nd_šfo ( dev -> gw , "NO CARRIER"); 2431 `DBG ("unhªdËd s‹ %u", dev -> £tup_¡©e ); 2434 } } 2436  $phÚe_¡©e_chªge (* d©a , * u£r_d©a ) 2438  hf_deviû * dev = d©a ; 2439  h®_cmd_hªdsä“_phÚe_¡©e_chªge * cmd = u£r_d©a ; 2441  cmd -> ¡©e ) { 2442  HAL_HANDSFREE_CALL_STATE_DIALING : 2443 `phÚe_¡©e_dŸlšg ( dev , cmd -> num_aùive , cmd-> num_h–d ); 2445  HAL_HANDSFREE_CALL_STATE_ALERTING : 2446 `phÚe_¡©e_®”tšg ( dev , cmd -> num_aùive , cmd-> num_h–d ); 2448  HAL_HANDSFREE_CALL_STATE_INCOMING : 2449 `phÚe_¡©e_šcomšg ( dev , cmd -> num_aùive , cmd-> num_h–d , 2450 cmd -> ty³ , cmd-> numb” , 2451 cmd -> numb”_Ën ); 2453  HAL_HANDSFREE_CALL_STATE_IDLE : 2454 `phÚe_¡©e_idË ( dev , cmd -> num_aùive , cmd-> num_h–d ); 2457 `DBG ("unhªdËd‚ew s‹ %u (cu¼’ˆ¡©%u)", cmd -> ¡©e , 2458 dev -> £tup_¡©e ); 2463 dev -> num_aùive = cmd ->num_active; 2464 dev -> num_h–d = cmd ->num_held; 2465 dev -> £tup_¡©e = cmd -> ¡©e ; 2467 } } 2469  $hªdË_phÚe_¡©e_chªge (cÚ¡ * buf , ušt16_t Ën ) 2471 cÚ¡  h®_cmd_hªdsä“_phÚe_¡©e_chªge * cmd = buf ; 2472 ušt8_t ¡©us ; 2474 ià( Ën !ð(* cmd è+ cmd-> numb”_Ën || (cmd->number_len != 0 && 2475 cmd -> numb” [cmd-> numb”_Ën - 1] != '\0')) { 2476 `”rÜ ("Invalid…hone state change command,erminating"); 2477 `¿i£ ( SIGTERM ); 2481 `DBG ("aùive=%u hÞd=%u s‹=%u", cmd -> num_aùive , cmd-> num_h–d , 2482 cmd -> ¡©e ); 2484 ià( `queue_i£m±y ( deviûs )) { 2485 ¡©us = HAL_STATUS_FAILED ; 2486  çžed ; 2490 `queue_fÜ—ch ( deviûs , phÚe_¡©e_chªge , (*è cmd ); 2492 ¡©us = HAL_STATUS_SUCCESS ; 2494 çžed : 2495 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 2496 HAL_OP_HANDSFREE_PHONE_STATE_CHANGE , ¡©us ); 2497 } } 2499  $hªdË_cÚfigu»_wbs (cÚ¡ * buf , ušt16_t Ën ) 2501 cÚ¡  h®_cmd_hªdsä“_cÚfigu»_wbs * cmd = buf ; 2502  hf_deviû * dev ; 2503 bdaddr_t bdaddr ; 2504 ušt8_t ¡©us ; 2506 ià(!( hå_ag_ã©u»s & HFP_AG_FEAT_CODEC )) { 2507 ¡©us = HAL_STATUS_FAILED ; 2508  dÚe ; 2511 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 2513 dev = `fšd_deviû (& bdaddr ); 2514 ià(! dev ) { 2515 ¡©us = HAL_STATUS_FAILED ; 2516  dÚe ; 2519 ià( dev -> audio_¡©e !ð HAL_EV_HANDSFREE_AUDIO_STATE_DISCONNECTED ) { 2520 ¡©us = HAL_STATUS_FAILED ; 2521  dÚe ; 2524  cmd -> cÚfig ) { 2525  HAL_HANDSFREE_WBS_NO : 2526 dev -> codecs [ MSBC_OFFSET ]. loÿl_suµÜ‹d = çl£ ; 2528  HAL_HANDSFREE_WBS_YES : 2529 dev -> codecs [ MSBC_OFFSET ]. loÿl_suµÜ‹d = Œue ; 2531  HAL_HANDSFREE_WBS_NONE : 2534 ¡©us = HAL_STATUS_FAILED ; 2543 dev -> ÃgÙŸ‹d_codec = 0; 2544 ¡©us = HAL_STATUS_SUCCESS ; 2546 dÚe : 2547 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HANDSFREE , 2548 HAL_OP_HANDSFREE_CONFIGURE_WBS , ¡©us ); 2549 } } 2551 cÚ¡  c_hªdËr gcmd_hªdËrs [] = { 2553 { hªdË_cÚÃù , çl£ , 2554 ( h®_cmd_hªdsä“_cÚÃù ) }, 2556 { hªdË_discÚÃù , çl£ , 2557 ( h®_cmd_hªdsä“_discÚÃù ) }, 2559 { hªdË_cÚÃù_audio , çl£ , 2560 ( h®_cmd_hªdsä“_cÚÃù_audio ) }, 2562 { hªdË_discÚÃù_audio , çl£ , 2563 ( h®_cmd_hªdsä“_discÚÃù_audio ) }, 2565 { hªdË_¡¬t_vr , çl£ , ( h®_cmd_hªdsä“_¡¬t_vr ) }, 2567 { hªdË_¡Ý_vr , çl£ , ( h®_cmd_hªdsä“_¡Ý_vr ) }, 2569 { hªdË_vÞume_cÚŒÞ , çl£ , 2570 ( h®_cmd_hªdsä“_vÞume_cÚŒÞ ) }, 2572 { hªdË_deviû_¡©us_nÙif , çl£ , 2573 ( h®_cmd_hªdsä“_deviû_¡©us_nÙif ) }, 2575 { hªdË_cÝs , Œue , 2576 ( h®_cmd_hªdsä“_cÝs_»¥Ú£ ) }, 2578 { hªdË_cšd , çl£ , 2579 ( h®_cmd_hªdsä“_cšd_»¥Ú£ ) }, 2581 { hªdË_fÜm©‹d_©_»¥ , Œue , 2582 ( h®_cmd_hªdsä“_fÜm©‹d_©_»¥Ú£ ) }, 2584 { hªdË_©_»¥ , çl£ , 2585 ( h®_cmd_hªdsä“_©_»¥Ú£ ) }, 2587 { hªdË_þcc_»¥ , Œue , 2588 ( h®_cmd_hªdsä“_þcc_»¥Ú£ ) }, 2590 { hªdË_phÚe_¡©e_chªge , Œue , 2591 ( h®_cmd_hªdsä“_phÚe_¡©e_chªge ) }, 2593 { hªdË_cÚfigu»_wbs , çl£ , 2594 ( h®_cmd_hªdsä“_cÚfigu»_wbs ) }, 2597  sdp_»cÜd_t * $h—d£t_ag_»cÜd () 2599 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2600 uuid_t roÙ_uuid , svþass_uuid , ga_svþass_uuid ; 2601 uuid_t l2ÿp_uuid , rfcomm_uuid ; 2602 sdp_´ofže_desc_t ´ofže ; 2603 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 2604 sdp_»cÜd_t * »cÜd ; 2605 sdp_d©a_t * chªÃl ; 2606 ušt8_t Ãtid = 0x01; 2607 sdp_d©a_t * ÃtwÜk ; 2608 ušt8_t ch = HSP_AG_CHANNEL ; 2610 »cÜd = `sdp_»cÜd_®loc (); 2611 ià(! »cÜd ) 2612  NULL ; 2614 ÃtwÜk = `sdp_d©a_®loc ( SDP_UINT8 , & Ãtid ); 2615 ià(! ÃtwÜk ) { 2616 `sdp_»cÜd_ä“ ( »cÜd ); 2617  NULL ; 2620 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2621 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 2622 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 2624 `sdp_uuid16_ü—‹ (& svþass_uuid , HEADSET_AGW_SVCLASS_ID ); 2625 svþass_id = `sdp_li¡_­³nd ( NULL , & svþass_uuid ); 2626 `sdp_uuid16_ü—‹ (& ga_svþass_uuid , GENERIC_AUDIO_SVCLASS_ID ); 2627 svþass_id = `sdp_li¡_­³nd (svþass_id, & ga_svþass_uuid ); 2628 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 2630 `sdp_uuid16_ü—‹ (& ´ofže . uuid , HEADSET_PROFILE_ID ); 2631 ´ofže . v”siÚ = 0x0102; 2632 pf£q = `sdp_li¡_­³nd ( NULL , & ´ofže ); 2633 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 2635 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 2636 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp_uuid ); 2637 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 2639 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 2640 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & rfcomm_uuid ); 2641 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & ch ); 2642 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 2643 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 2645 ­rÙo = `sdp_li¡_­³nd ( NULL , ­£q ); 2646 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 2648 `sdp_£t_šfo_©Œ ( »cÜd , "Voiû G©eway", NULL , NULL); 2650 `sdp_©Œ_add ( »cÜd , SDP_ATTR_EXTERNAL_NETWORK , ÃtwÜk ); 2652 `sdp_d©a_ä“ ( chªÃl ); 2653 `sdp_li¡_ä“ ( ´Ùo [0], NULL ); 2654 `sdp_li¡_ä“ ( ´Ùo [1], NULL ); 2655 `sdp_li¡_ä“ ( ­£q , NULL ); 2656 `sdp_li¡_ä“ ( pf£q , NULL ); 2657 `sdp_li¡_ä“ ( ­rÙo , NULL ); 2658 `sdp_li¡_ä“ ( roÙ , NULL ); 2659 `sdp_li¡_ä“ ( svþass_id , NULL ); 2661  »cÜd ; 2662 } } 2664  boÞ $cÚfœm_sco_cb (cÚ¡ bdaddr_t * addr , ušt16_t * voiû_£‰šgs ) 2666  add»ss [18]; 2667  hf_deviû * dev ; 2669 `ba2¡r ( addr , add»ss ); 2671 `DBG ("šcomšg SCO cÚÃùiÚ from %s", add»ss ); 2673 dev = `fšd_deviû ( addr ); 2674 ià(! dev || dev-> ¡©e !ð HAL_EV_HANDSFREE_CONN_STATE_SLC_CONNECTED ) { 2675 `”rÜ ("hªdsä“:‡udiØcÚÃùiÚ from % »jeùed", add»ss ); 2676  çl£ ; 2680 * voiû_£‰šgs = 0; 2682 `£t_audio_¡©e ( dev , HAL_EV_HANDSFREE_AUDIO_STATE_CONNECTING ); 2683  Œue ; 2684 } } 2686  boÞ $’abË_h¥_ag () 2688 sdp_»cÜd_t * »c ; 2689 GE¼Ü * ”r = NULL ; 2691 `DBG (""); 2693 h¥_£rv” = `bt_io_li¡’ ( NULL , cÚfœm_cb , `GINT_TO_POINTER ( Œue ), 2694 NULL , & ”r , 2695 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 2696 BT_IO_OPT_CHANNEL , HSP_AG_CHANNEL , 2697 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 2698 BT_IO_OPT_INVALID ); 2699 ià(! h¥_£rv” ) { 2700 `”rÜ ("FažedØli¡’ oÀH—d£ˆrfcomm: %s", ”r -> mes§ge ); 2701 `g_”rÜ_ä“ ( ”r ); 2702  çl£ ; 2705 »c = `h—d£t_ag_»cÜd (); 2706 ià(! »c ) { 2707 `”rÜ ("Failedo‡llocate Headset„ecord"); 2708  çžed ; 2711 ià( `bt_ad­‹r_add_»cÜd ( »c , 0) < 0) { 2712 `”rÜ ("Failedo„egister Headset„ecord"); 2713 `sdp_»cÜd_ä“ ( »c ); 2714  çžed ; 2717 h¥_»cÜd_id = »c -> hªdË ; 2718  Œue ; 2720 çžed : 2721 `g_io_chªÃl_shutdown ( h¥_£rv” , TRUE , NULL ); 2722 `g_io_chªÃl_uÄef ( h¥_£rv” ); 2723 h¥_£rv” = NULL ; 2725  çl£ ; 2726 } } 2728  $þ—nup_h¥_ag () 2730 ià( h¥_£rv” ) { 2731 `g_io_chªÃl_shutdown ( h¥_£rv” , TRUE , NULL ); 2732 `g_io_chªÃl_uÄef ( h¥_£rv” ); 2733 h¥_£rv” = NULL ; 2736 ià( h¥_»cÜd_id > 0) { 2737 `bt_ad­‹r_»move_»cÜd ( h¥_»cÜd_id ); 2738 h¥_»cÜd_id = 0; 2740 } } 2742  sdp_»cÜd_t * $hå_ag_»cÜd () 2744 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2745 uuid_t roÙ_uuid , svþass_uuid , ga_svþass_uuid ; 2746 uuid_t l2ÿp_uuid , rfcomm_uuid ; 2747 sdp_´ofže_desc_t ´ofže ; 2748 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 2749 sdp_»cÜd_t * »cÜd ; 2750 sdp_d©a_t * chªÃl , * ã©u»s ; 2751 ušt8_t Ãtid = 0x01; 2752 ušt16_t sdpã© ; 2753 sdp_d©a_t * ÃtwÜk ; 2754 ušt8_t ch = HFP_AG_CHANNEL ; 2756 »cÜd = `sdp_»cÜd_®loc (); 2757 ià(! »cÜd ) 2758  NULL ; 2760 ÃtwÜk = `sdp_d©a_®loc ( SDP_UINT8 , & Ãtid ); 2761 ià(! ÃtwÜk ) { 2762 `sdp_»cÜd_ä“ ( »cÜd ); 2763  NULL ; 2766 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2767 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 2768 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 2770 `sdp_uuid16_ü—‹ (& svþass_uuid , HANDSFREE_AGW_SVCLASS_ID ); 2771 svþass_id = `sdp_li¡_­³nd ( NULL , & svþass_uuid ); 2772 `sdp_uuid16_ü—‹ (& ga_svþass_uuid , GENERIC_AUDIO_SVCLASS_ID ); 2773 svþass_id = `sdp_li¡_­³nd (svþass_id, & ga_svþass_uuid ); 2774 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 2776 `sdp_uuid16_ü—‹ (& ´ofže . uuid , HANDSFREE_PROFILE_ID ); 2777 ´ofže . v”siÚ = 0x0106; 2778 pf£q = `sdp_li¡_­³nd ( NULL , & ´ofže ); 2779 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 2781 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 2782 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp_uuid ); 2783 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 2785 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 2786 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & rfcomm_uuid ); 2787 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & ch ); 2788 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 2789 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 2792 sdpã© = hå_ag_ã©u»s & 0x0000003F; 2793 ià( hå_ag_ã©u»s & HFP_AG_FEAT_CODEC ) 2794 sdpã© |= 0x00000020; 2796 sdpã© &= ~0x00000020; 2798 ã©u»s = `sdp_d©a_®loc ( SDP_UINT16 , & sdpã© ); 2799 `sdp_©Œ_add ( »cÜd , SDP_ATTR_SUPPORTED_FEATURES , ã©u»s ); 2801 ­rÙo = `sdp_li¡_­³nd ( NULL , ­£q ); 2802 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 2804 `sdp_£t_šfo_©Œ ( »cÜd , "Hªds-F»AudiØG©eway", NULL , NULL); 2806 `sdp_©Œ_add ( »cÜd , SDP_ATTR_EXTERNAL_NETWORK , ÃtwÜk ); 2808 `sdp_d©a_ä“ ( chªÃl ); 2809 `sdp_li¡_ä“ ( ´Ùo [0], NULL ); 2810 `sdp_li¡_ä“ ( ´Ùo [1], NULL ); 2811 `sdp_li¡_ä“ ( ­£q , NULL ); 2812 `sdp_li¡_ä“ ( pf£q , NULL ); 2813 `sdp_li¡_ä“ ( ­rÙo , NULL ); 2814 `sdp_li¡_ä“ ( roÙ , NULL ); 2815 `sdp_li¡_ä“ ( svþass_id , NULL ); 2817  »cÜd ; 2818 } } 2820  boÞ $’abË_hå_ag () 2822 sdp_»cÜd_t * »c ; 2823 GE¼Ü * ”r = NULL ; 2825 `DBG (""); 2827 ià( hå_£rv” ) 2828  çl£ ; 2830 hå_£rv” = `bt_io_li¡’ ( NULL , cÚfœm_cb , `GINT_TO_POINTER ( çl£ ), 2831 NULL , & ”r , 2832 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 2833 BT_IO_OPT_CHANNEL , HFP_AG_CHANNEL , 2834 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 2835 BT_IO_OPT_INVALID ); 2836 ià(! hå_£rv” ) { 2837 `”rÜ ("FažedØli¡’ oÀHªdsä“„fcomm: %s", ”r -> mes§ge ); 2838 `g_”rÜ_ä“ ( ”r ); 2839  çl£ ; 2842 »c = `hå_ag_»cÜd (); 2843 ià(! »c ) { 2844 `”rÜ ("Failedo‡llocate Handsfree„ecord"); 2845  çžed ; 2848 ià( `bt_ad­‹r_add_»cÜd ( »c , 0) < 0) { 2849 `”rÜ ("Failedo„egister Handsfree„ecord"); 2850 `sdp_»cÜd_ä“ ( »c ); 2851  çžed ; 2854 hå_»cÜd_id = »c -> hªdË ; 2855  Œue ; 2857 çžed : 2858 `g_io_chªÃl_shutdown ( hå_£rv” , TRUE , NULL ); 2859 `g_io_chªÃl_uÄef ( hå_£rv” ); 2860 hå_£rv” = NULL ; 2862  çl£ ; 2863 } } 2865  $þ—nup_hå_ag () 2867 ià( hå_£rv” ) { 2868 `g_io_chªÃl_shutdown ( hå_£rv” , TRUE , NULL ); 2869 `g_io_chªÃl_uÄef ( hå_£rv” ); 2870 hå_£rv” = NULL ; 2873 ià( hå_»cÜd_id > 0) { 2874 `bt_ad­‹r_»move_»cÜd ( hå_»cÜd_id ); 2875 hå_»cÜd_id = 0; 2877 } } 2879  $bt_sco_g‘_fd (cÚ¡ * buf , ušt16_t Ën ) 2881 cÚ¡  sco_cmd_g‘_fd * cmd = buf ; 2882  sco_r¥_g‘_fd r¥ ; 2883  hf_deviû * dev ; 2884 bdaddr_t bdaddr ; 2885  fd ; 2887 `DBG (""); 2889 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 2891 dev = `fšd_deviû (& bdaddr ); 2892 ià(! dev || ! `bt_sco_g‘_fd_ªd_mtu ( sco , & fd , & r¥ . mtu )) 2893  çžed ; 2895 `DBG ("fd %d mtu %u", fd , r¥ . mtu ); 2897 `c_£nd_r¥_fuÎ ( sco_c , SCO_SERVICE_ID , SCO_OP_GET_FD , 2898 ( r¥ ), &r¥, fd ); 2902 çžed : 2903 `c_£nd_r¥ ( sco_c , SCO_SERVICE_ID , SCO_OP_STATUS , SCO_STATUS_FAILED ); 2904 } } 2906 cÚ¡  c_hªdËr gsco_hªdËrs [] = { 2908 { bt_sco_g‘_fd , çl£ , 0 } 2911  $bt_sco_uÄegi¡” () 2913 `DBG (""); 2915 `c_þ—nup ( sco_c ); 2916 sco_c = NULL ; 2917 } } 2919  boÞ $bt_sco_»gi¡” ( c_discÚÃù_cb discÚÃù ) 2921 `DBG (""); 2923 sco_c = `c_š™ ( BLUEZ_SCO_SK_PATH , (BLUEZ_SCO_SK_PATH), 2924 SCO_SERVICE_ID , çl£ , discÚÃù , NULL ); 2925 ià(! sco_c ) 2926  çl£ ; 2928 `c_»gi¡” ( sco_c , SCO_SERVICE_ID , sco_hªdËrs , 2929 `G_N_ELEMENTS ( sco_hªdËrs )); 2931  Œue ; 2932 } } 2934 boÞ $bt_hªdsä“_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode , 2935  max_þ›Ás ) 2937 `DBG ("mod0x%x max_þ›Á %d", mode , max_þ›Ás ); 2939 `baýy (& ad­‹r_addr , addr ); 2941 ià( max_þ›Ás < 1) 2942  çl£ ; 2944 deviûs = `queue_Ãw (); 2945 ià(! deviûs ) 2946  çl£ ; 2948 ià(! `’abË_h¥_ag ()) 2949  çžed_queue ; 2951 sco = `bt_sco_Ãw ( addr ); 2952 ià(! sco ) 2953  çžed_h¥ ; 2955 `bt_sco_£t_cÚfœm_cb ( sco , cÚfœm_sco_cb ); 2956 `bt_sco_£t_cÚÃù_cb ( sco , cÚÃù_sco_cb ); 2957 `bt_sco_£t_discÚÃù_cb ( sco , discÚÃù_sco_cb ); 2959 ià( mode =ð HAL_MODE_HANDSFREE_HSP_ONLY ) 2960  dÚe ; 2962 hå_ag_ã©u»s = HFP_AG_FEATURES ; 2964 ià( mode =ð HAL_MODE_HANDSFREE_HFP_WBS ) 2965 hå_ag_ã©u»s |ð HFP_AG_FEAT_CODEC ; 2967 ià( `’abË_hå_ag ()) 2968  dÚe ; 2970 `bt_sco_uÄef ( sco ); 2971 sco = NULL ; 2972 hå_ag_ã©u»s = 0; 2973 çžed_h¥ : 2974 `þ—nup_h¥_ag (); 2975 çžed_queue : 2976 `queue_de¡roy ( deviûs , NULL ); 2977 deviûs = NULL ; 2979  çl£ ; 2981 dÚe : 2982 h®_c = c ; 2983 `c_»gi¡” ( h®_c , HAL_SERVICE_ID_HANDSFREE , cmd_hªdËrs , 2984 `G_N_ELEMENTS ( cmd_hªdËrs )); 2986 `bt_sco_»gi¡” ( NULL ); 2988 max_hå_þ›Ás = max_þ›Ás ; 2990  Œue ; 2991 } } 2993  $bt_hªdsä“_uÄegi¡” () 2995 `DBG (""); 2997 `bt_sco_uÄegi¡” (); 2998 `c_uÄegi¡” ( h®_c , HAL_SERVICE_ID_HANDSFREE ); 2999 h®_c = NULL ; 3001 `þ—nup_hå_ag (); 3002 `þ—nup_h¥_ag (); 3003 `bt_sco_uÄef ( sco ); 3004 sco = NULL ; 3006 hå_ag_ã©u»s = 0; 3008 `queue_de¡roy ( deviûs , ( queue_de¡roy_func_t è deviû_de¡roy ); 3009 deviûs = NULL ; 3011 max_hå_þ›Ás = 0; 3012 } } @android/handsfree.h 24 boÞ bt_hªdsä“_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode , 25  max_þ›Ás ); 26  bt_hªdsä“_uÄegi¡” (); @android/hardware/audio.h 18 #iâdeà ANDROID_AUDIO_HAL_INTERFACE_H 19  #ANDROID_AUDIO_HAL_INTERFACE_H ) 21  ~<¡dšt.h > 22  ~<¡ršgs.h > 23  ~ 24  ~ 26  ~ 27  ~ 28  ~ 30 g__BEGIN_DECLS 35  #AUDIO_HARDWARE_MODULE_ID "audio" ) 40  #AUDIO_HARDWARE_INTERFACE "audio_hw_if" ) 46  #AUDIO_MODULE_API_VERSION_0_1 `HARDWARE_MODULE_API_VERSION (0, 1) ) 47  #AUDIO_MODULE_API_VERSION_CURRENT AUDIO_MODULE_API_VERSION_0_1 ) 52  #AUDIO_DEVICE_API_VERSION_0_0 `HARDWARE_DEVICE_API_VERSION (0, 0) ) 53  #AUDIO_DEVICE_API_VERSION_1_0 `HARDWARE_DEVICE_API_VERSION (1, 0) ) 54  #AUDIO_DEVICE_API_VERSION_2_0 `HARDWARE_DEVICE_API_VERSION (2, 0) ) 55  #AUDIO_DEVICE_API_VERSION_3_0 `HARDWARE_DEVICE_API_VERSION (3, 0) ) 56  #AUDIO_DEVICE_API_VERSION_CURRENT AUDIO_DEVICE_API_VERSION_3_0 ) 58  #AUDIO_DEVICE_API_VERSION_MIN AUDIO_DEVICE_API_VERSION_2_0 ) 67  #AUDIO_HARDWARE_MODULE_ID_PRIMARY "´im¬y" ) 68  #AUDIO_HARDWARE_MODULE_ID_A2DP "a2dp" ) 69  #AUDIO_HARDWARE_MODULE_ID_USB "usb" ) 70  #AUDIO_HARDWARE_MODULE_ID_REMOTE_SUBMIX "r_submix" ) 71  #AUDIO_HARDWARE_MODULE_ID_CODEC_OFFLOAD "codec_ofæßd" ) 84  #AUDIO_PARAMETER_KEY_BT_NREC "bt_h—d£t_Äec" ) 85  #AUDIO_PARAMETER_VALUE_ON "Ú" ) 86  #AUDIO_PARAMETER_VALUE_OFF "off" ) 89  #AUDIO_PARAMETER_KEY_TTY_MODE "‰y_mode" ) 90  #AUDIO_PARAMETER_VALUE_TTY_OFF "‰y_off" ) 91  #AUDIO_PARAMETER_VALUE_TTY_VCO "‰y_vco" ) 92  #AUDIO_PARAMETER_VALUE_TTY_HCO "‰y_hco" ) 93  #AUDIO_PARAMETER_VALUE_TTY_FULL "‰y_fuÎ" ) 97  #AUDIO_PARAMETER_KEY_HAC "HACS‘tšg" ) 98  #AUDIO_PARAMETER_VALUE_HAC_ON "ON" ) 99  #AUDIO_PARAMETER_VALUE_HAC_OFF "OFF" ) 102  #AUDIO_PARAMETER_A2DP_SINK_ADDRESS "a2dp_sšk_add»ss" ) 105  #AUDIO_PARAMETER_A2DP_SOURCE_ADDRESS "a2dp_sourû_add»ss" ) 108  #AUDIO_PARAMETER_KEY_SCREEN_STATE "sü“n_¡©e" ) 111  #AUDIO_PARAMETER_KEY_BT_SCO_WB "bt_wbs" ) 118  #AUDIO_PARAMETER_STREAM_ROUTING "routšg" ) 119  #AUDIO_PARAMETER_STREAM_FORMAT "fÜm©" ) 120  #AUDIO_PARAMETER_STREAM_CHANNELS "chªÃls" ) 121  #AUDIO_PARAMETER_STREAM_FRAME_COUNT "äame_couÁ" ) 122  #AUDIO_PARAMETER_STREAM_INPUT_SOURCE "šput_sourû" ) 123  #AUDIO_PARAMETER_STREAM_SAMPLING_RATE "§m¶šg_¿‹" ) 125  #AUDIO_PARAMETER_DEVICE_DISCONNECT "discÚÃù" ) 129  #AUDIO_PARAMETER_STREAM_SUP_FORMATS "sup_fÜm©s" ) 132  #AUDIO_PARAMETER_STREAM_SUP_CHANNELS "sup_chªÃls" ) 135  #AUDIO_PARAMETER_STREAM_SUP_SAMPLING_RATES "sup_§m¶šg_¿‹s" ) 140  #AUDIO_PARAMETER_STREAM_HW_AV_SYNC "hw_av_sync" ) 146  #AUDIO_OFFLOAD_CODEC_PARAMS "music_ofæßd_codec_·¿m" ) 147  #AUDIO_OFFLOAD_CODEC_BIT_PER_SAMPLE "music_ofæßd_b™_³r_§m¶e" ) 148  #AUDIO_OFFLOAD_CODEC_BIT_RATE "music_ofæßd_b™_¿‹" ) 149  #AUDIO_OFFLOAD_CODEC_AVG_BIT_RATE "music_ofæßd_avg_b™_¿‹" ) 150  #AUDIO_OFFLOAD_CODEC_ID "music_ofæßd_codec_id" ) 151  #AUDIO_OFFLOAD_CODEC_BLOCK_ALIGN "music_ofæßd_block_®ign" ) 152  #AUDIO_OFFLOAD_CODEC_SAMPLE_RATE "music_ofæßd_§m¶e_¿‹" ) 153  #AUDIO_OFFLOAD_CODEC_ENCODE_OPTION "music_ofæßd_’code_ÝtiÚ" ) 154  #AUDIO_OFFLOAD_CODEC_NUM_CHANNEL "music_ofæßd_num_chªÃls" ) 155  #AUDIO_OFFLOAD_CODEC_DOWN_SAMPLING "music_ofæßd_down_§m¶šg" ) 156  #AUDIO_OFFLOAD_CODEC_DELAY_SAMPLES "d–ay_§m¶es" ) 157  #AUDIO_OFFLOAD_CODEC_PADDING_SAMPLES "·ddšg_§m¶es" ) 162  saudio_¡»am { 167 ušt32_t (* g‘_§m¶e_¿‹ )(cÚ¡  audio_¡»am * m¡»am ); 172 (* m£t_§m¶e_¿‹ )( audio_¡»am * m¡»am , ušt32_t m¿‹ ); 178 size_t (* g‘_bufãr_size )(cÚ¡  audio_¡»am * m¡»am ); 184 audio_chªÃl_mask_t (* g‘_chªÃls )(cÚ¡  audio_¡»am * m¡»am ); 189 audio_fÜm©_t (* g‘_fÜm© )(cÚ¡  audio_¡»am * m¡»am ); 194 (* m£t_fÜm© )( audio_¡»am * m¡»am , audio_fÜm©_t mfÜm© ); 201 (* m¡ªdby )( audio_¡»am * m¡»am ); 204 (* mdump )(cÚ¡  audio_¡»am * m¡»am ,  mfd ); 207 audio_deviûs_t (* g‘_deviû )(cÚ¡  audio_¡»am * m¡»am ); 215 (* m£t_deviû )( audio_¡»am * m¡»am , audio_deviûs_t mdeviû ); 230 (* m£t_·¿m‘”s )( audio_¡»am * m¡»am , cÚ¡ * mkv_·œs ); 236 * (* mg‘_·¿m‘”s )(cÚ¡  audio_¡»am * m¡»am , 237 cÚ¡ * mkeys ); 238 (* madd_audio_efãù )(cÚ¡  audio_¡»am * m¡»am , 239 efãù_hªdË_t mefãù ); 240 (* m»move_audio_efãù )(cÚ¡  audio_¡»am * m¡»am , 241 efãù_hªdË_t mefãù ); 243  audio_¡»am taudio_¡»am_t ; 247 mSTREAM_CBK_EVENT_WRITE_READY , 248 mSTREAM_CBK_EVENT_DRAIN_READY 249 } t¡»am_ÿÎback_ev’t_t ; 251 (* t¡»am_ÿÎback_t )( t¡»am_ÿÎback_ev’t_t tev’t , * t·¿m , * tcook› ); 255 AUDIO_DRAIN_ALL , 256 AUDIO_DRAIN_EARLY_NOTIFY 259 } taudio_d¿š_ty³_t ; 268  saudio_¡»am_out { 274  audio_¡»am commÚ ; 279 `ušt32_t (* g‘_Ï‹ncy )(cÚ¡  audio_¡»am_out * ¡»am ); 288 (* £t_vÞume )( audio_¡»am_out * ¡»am ,  Ëá ,  right ); 303 `ssize_t (* wr™e )( audio_¡»am_out * ¡»am , cÚ¡ * bufãr , 304 size_t by‹s ); 309 (* g‘_»nd”_pos™iÚ )(cÚ¡  audio_¡»am_out * ¡»am , 310 ušt32_t * d¥_äames ); 316 (* g‘_Ãxt_wr™e_time¡amp )(cÚ¡  audio_¡»am_out * ¡»am , 317 št64_t * time¡amp ); 325 (* £t_ÿÎback )( audio_¡»am_out * ¡»am , 326 ¡»am_ÿÎback_t ÿÎback , * cook› ); 337 (* ·u£ )( audio_¡»am_out * ¡»am ); 345 (* »sume )( audio_¡»am_out * ¡»am ); 364 (* d¿š )( audio_¡»am_out * ¡»am , audio_d¿š_ty³_t ty³ ); 372 (* æush )( audio_¡»am_out * ¡»am ); 390 (* g‘_´e£Á©iÚ_pos™iÚ )(cÚ¡  audio_¡»am_out * ¡»am , 391 ušt64_t * äames ,  time¥ec * time¡amp ); 394  audio_¡»am_out taudio_¡»am_out_t ; 396  saudio_¡»am_š { 402  audio_¡»am commÚ ; 406 (* £t_gaš )( audio_¡»am_š * ¡»am ,  gaš ); 412 `ssize_t (* »ad )( audio_¡»am_š * ¡»am , * bufãr , 413 size_t by‹s ); 425 `ušt32_t (* g‘_šput_äames_lo¡ )( audio_¡»am_š * ¡»am ); 427  audio_¡»am_š taudio_¡»am_š_t ; 434 `__©Œibu‹__ (( __d•»ÿ‹d__ )) 435  šlše size_t $audio_¡»am_äame_size (cÚ¡  audio_¡»am * s ) 437 size_t chª_§mp_sz ; 438 audio_fÜm©_t fÜm© = s -> `g‘_fÜm© (s); 440 ià( `audio_is_lš—r_pcm ( fÜm© )) { 441 chª_§mp_sz = `audio_by‹s_³r_§m¶e ( fÜm© ); 442  `pÝcouÁ ( s -> `g‘_chªÃls (s)è* chª_§mp_sz ; 445  ( št8_t ); 446 } } 451  šlše size_t $audio_¡»am_out_äame_size (cÚ¡  audio_¡»am_out * s ) 453 size_t chª_§mp_sz ; 454 audio_fÜm©_t fÜm© = s -> commÚ . `g‘_fÜm© (&s->common); 456 ià( `audio_is_lš—r_pcm ( fÜm© )) { 457 chª_§mp_sz = `audio_by‹s_³r_§m¶e ( fÜm© ); 458  `audio_chªÃl_couÁ_äom_out_mask ( s -> commÚ . `g‘_chªÃls (&s->commÚ)è* chª_§mp_sz ; 461  ( št8_t ); 462 } } 467  šlše size_t $audio_¡»am_š_äame_size (cÚ¡  audio_¡»am_š * s ) 469 size_t chª_§mp_sz ; 470 audio_fÜm©_t fÜm© = s -> commÚ . `g‘_fÜm© (&s->common); 472 ià( `audio_is_lš—r_pcm ( fÜm© )) { 473 chª_§mp_sz = `audio_by‹s_³r_§m¶e ( fÜm© ); 474  `audio_chªÃl_couÁ_äom_š_mask ( s -> commÚ . `g‘_chªÃls (&s->commÚ)è* chª_§mp_sz ; 477  ( št8_t ); 478 } } 487  saudio_moduË { 488  hw_moduË_t mcommÚ ; 491  saudio_hw_deviû { 497  hw_deviû_t mcommÚ ; 511 ušt32_t (* g‘_suµÜ‹d_deviûs )(cÚ¡  audio_hw_deviû * mdev ); 517 (* mš™_check )(cÚ¡  audio_hw_deviû * mdev ); 520 (* m£t_voiû_vÞume )( audio_hw_deviû * mdev ,  mvÞume ); 527 (* m£t_ma¡”_vÞume )( audio_hw_deviû * mdev ,  mvÞume ); 536 (* mg‘_ma¡”_vÞume )( audio_hw_deviû * mdev , * mvÞume ); 543 (* m£t_mode )( audio_hw_deviû * mdev , audio_mode_t mmode ); 546 (* m£t_mic_mu‹ )( audio_hw_deviû * mdev , boÞ m¡©e ); 547 (* mg‘_mic_mu‹ )(cÚ¡  audio_hw_deviû * mdev , boÞ * m¡©e ); 550 (* m£t_·¿m‘”s )( audio_hw_deviû * mdev , cÚ¡ * mkv_·œs ); 556 * (* mg‘_·¿m‘”s )(cÚ¡  audio_hw_deviû * mdev , 557 cÚ¡ * mkeys ); 563 size_t (* g‘_šput_bufãr_size )(cÚ¡  audio_hw_deviû * mdev , 564 cÚ¡  audio_cÚfig * mcÚfig ); 574 (* mÝ’_ouut_¡»am )( audio_hw_deviû * mdev , 575 audio_io_hªdË_t mhªdË , 576 audio_deviûs_t mdeviûs , 577 audio_ouut_æags_t mæags , 578  audio_cÚfig * mcÚfig , 579  audio_¡»am_out ** m¡»am_out , 580 cÚ¡ * madd»ss ); 582 (* mþo£_ouut_¡»am )( audio_hw_deviû * mdev , 583  audio_¡»am_out * m¡»am_out ); 586 (* mÝ’_šput_¡»am )( audio_hw_deviû * mdev , 587 audio_io_hªdË_t mhªdË , 588 audio_deviûs_t mdeviûs , 589  audio_cÚfig * mcÚfig , 590  audio_¡»am_š ** m¡»am_š , 591 audio_šput_æags_t mæags , 592 cÚ¡ * madd»ss , 593 audio_sourû_t msourû ); 595 (* mþo£_šput_¡»am )( audio_hw_deviû * mdev , 596  audio_¡»am_š * m¡»am_š ); 599 (* mdump )(cÚ¡  audio_hw_deviû * mdev ,  mfd ); 605 (* m£t_ma¡”_mu‹ )( audio_hw_deviû * mdev , boÞ mmu‹ ); 614 (* mg‘_ma¡”_mu‹ )( audio_hw_deviû * mdev , boÞ * mmu‹ ); 623 (* mü—‹_audio_·tch )( audio_hw_deviû * mdev , 624  mnum_sourûs , 625 cÚ¡  audio_pÜt_cÚfig * msourûs , 626  mnum_sšks , 627 cÚ¡  audio_pÜt_cÚfig * msšks , 628 audio_·tch_hªdË_t * mhªdË ); 631 (* m»Ëa£_audio_·tch )( audio_hw_deviû * mdev , 632 audio_·tch_hªdË_t mhªdË ); 640 (* mg‘_audio_pÜt )( audio_hw_deviû * mdev , 641  audio_pÜt * mpÜt ); 644 (* m£t_audio_pÜt_cÚfig )( audio_hw_deviû * mdev , 645 cÚ¡  audio_pÜt_cÚfig * mcÚfig ); 648  audio_hw_deviû taudio_hw_deviû_t ; 652  šlše  $audio_hw_deviû_Ý’ (cÚ¡  hw_moduË_t * moduË , 653  audio_hw_deviû ** deviû ) 655  moduË -> m‘hods -> `Ý’ (moduË, AUDIO_HARDWARE_INTERFACE , 656 ( hw_deviû_t **) deviû ); 657 } } 659  šlše  $audio_hw_deviû_þo£ ( audio_hw_deviû * deviû ) 661  deviû -> commÚ . `þo£ (&device->common); 662 } } 665 g__END_DECLS @android/hardware/audio_effect.h 18 #iâdeà ANDROID_AUDIO_EFFECT_H 19  #ANDROID_AUDIO_EFFECT_H ) 21  ~<”ºo.h > 22  ~<¡dšt.h > 23  ~<¡ršgs.h > 24  ~ 25  ~ 27  ~ 30 __BEGIN_DECLS 47  sefãù_uuid_s { 48 ušt32_t mtimeLow ; 49 ušt16_t mtimeMid ; 50 ušt16_t mtimeHiAndV”siÚ ; 51 ušt16_t mþockSeq ; 52 ušt8_t mnode [6]; 53 } tefãù_uuid_t ; 56  #EFFECT_STRING_LEN_MAX 64 ) 59  #EFFECT_UUID_INITIALIZER { 0xec7178ec, 0xe5e1, 0x4432, 0xa3f4, \ 60 { 0x46, 0x57, 0xe6, 0x79, 0x52, 0x10 } } ) 61 cÚ¡ efãù_uuid_t gEFFECT_UUID_NULL_ = EFFECT_UUID_INITIALIZER ; 62 cÚ¡ efãù_uuid_t * cÚ¡ gEFFECT_UUID_NULL = & EFFECT_UUID_NULL_ ; 63 cÚ¡ * cÚ¡ gEFFECT_UUID_NULL_STR = "ec7178ec-e5e1-4432-a3f4-4657e6795210"; 68  sefãù_desütÜ_s { 69 efãù_uuid_t mty³ ; 70 efãù_uuid_t muuid ; 71 ušt32_t m­iV”siÚ ; 72 ušt32_t mæags ; 73 ušt16_t mýuLßd ; 74 ušt16_t mmemÜyU§ge ; 75  mÇme [ EFFECT_STRING_LEN_MAX ]; 76  mim¶em’tÜ [ EFFECT_STRING_LEN_MAX ]; 77 } tefãù_desütÜ_t ; 153  #EFFECT_FLAG_TYPE_SHIFT 0 ) 154  #EFFECT_FLAG_TYPE_SIZE 3 ) 155  #EFFECT_FLAG_TYPE_MASK (((1 << EFFECT_FLAG_TYPE_SIZE ) -1) \ 156 << EFFECT_FLAG_TYPE_SHIFT ) ) 157  #EFFECT_FLAG_TYPE_INSERT (0 << EFFECT_FLAG_TYPE_SHIFT ) ) 158  #EFFECT_FLAG_TYPE_AUXILIARY (1 << EFFECT_FLAG_TYPE_SHIFT ) ) 159  #EFFECT_FLAG_TYPE_REPLACE (2 << EFFECT_FLAG_TYPE_SHIFT ) ) 160  #EFFECT_FLAG_TYPE_PRE_PROC (3 << EFFECT_FLAG_TYPE_SHIFT ) ) 161  #EFFECT_FLAG_TYPE_POST_PROC (4 << EFFECT_FLAG_TYPE_SHIFT ) ) 164  #EFFECT_FLAG_INSERT_SHIFT ( EFFECT_FLAG_TYPE_SHIFT + EFFECT_FLAG_TYPE_SIZE ) ) 165  #EFFECT_FLAG_INSERT_SIZE 3 ) 166  #EFFECT_FLAG_INSERT_MASK (((1 << EFFECT_FLAG_INSERT_SIZE ) -1) \ 167 << EFFECT_FLAG_INSERT_SHIFT ) ) 168  #EFFECT_FLAG_INSERT_ANY (0 << EFFECT_FLAG_INSERT_SHIFT ) ) 169  #EFFECT_FLAG_INSERT_FIRST (1 << EFFECT_FLAG_INSERT_SHIFT ) ) 170  #EFFECT_FLAG_INSERT_LAST (2 << EFFECT_FLAG_INSERT_SHIFT ) ) 171  #EFFECT_FLAG_INSERT_EXCLUSIVE (3 << EFFECT_FLAG_INSERT_SHIFT ) ) 175  #EFFECT_FLAG_VOLUME_SHIFT ( EFFECT_FLAG_INSERT_SHIFT + EFFECT_FLAG_INSERT_SIZE ) ) 176  #EFFECT_FLAG_VOLUME_SIZE 3 ) 177  #EFFECT_FLAG_VOLUME_MASK (((1 << EFFECT_FLAG_VOLUME_SIZE ) -1) \ 178 << EFFECT_FLAG_VOLUME_SHIFT ) ) 179  #EFFECT_FLAG_VOLUME_CTRL (1 << EFFECT_FLAG_VOLUME_SHIFT ) ) 180  #EFFECT_FLAG_VOLUME_IND (2 << EFFECT_FLAG_VOLUME_SHIFT ) ) 181  #EFFECT_FLAG_VOLUME_NONE (0 << EFFECT_FLAG_VOLUME_SHIFT ) ) 184  #EFFECT_FLAG_DEVICE_SHIFT ( EFFECT_FLAG_VOLUME_SHIFT + EFFECT_FLAG_VOLUME_SIZE ) ) 185  #EFFECT_FLAG_DEVICE_SIZE 3 ) 186  #EFFECT_FLAG_DEVICE_MASK (((1 << EFFECT_FLAG_DEVICE_SIZE ) -1) \ 187 << EFFECT_FLAG_DEVICE_SHIFT ) ) 188  #EFFECT_FLAG_DEVICE_IND (1 << EFFECT_FLAG_DEVICE_SHIFT ) ) 189  #EFFECT_FLAG_DEVICE_NONE (0 << EFFECT_FLAG_DEVICE_SHIFT ) ) 192  #EFFECT_FLAG_INPUT_SHIFT ( EFFECT_FLAG_DEVICE_SHIFT + EFFECT_FLAG_DEVICE_SIZE ) ) 193  #EFFECT_FLAG_INPUT_SIZE 2 ) 194  #EFFECT_FLAG_INPUT_MASK (((1 << EFFECT_FLAG_INPUT_SIZE ) -1) \ 195 << EFFECT_FLAG_INPUT_SHIFT ) ) 196  #EFFECT_FLAG_INPUT_DIRECT (1 << EFFECT_FLAG_INPUT_SHIFT ) ) 197  #EFFECT_FLAG_INPUT_PROVIDER (2 << EFFECT_FLAG_INPUT_SHIFT ) ) 198  #EFFECT_FLAG_INPUT_BOTH (3 << EFFECT_FLAG_INPUT_SHIFT ) ) 201  #EFFECT_FLAG_OUTPUT_SHIFT ( EFFECT_FLAG_INPUT_SHIFT + EFFECT_FLAG_INPUT_SIZE ) ) 202  #EFFECT_FLAG_OUTPUT_SIZE 2 ) 203  #EFFECT_FLAG_OUTPUT_MASK (((1 << EFFECT_FLAG_OUTPUT_SIZE ) -1) \ 204 << EFFECT_FLAG_OUTPUT_SHIFT ) ) 205  #EFFECT_FLAG_OUTPUT_DIRECT (1 << EFFECT_FLAG_OUTPUT_SHIFT ) ) 206  #EFFECT_FLAG_OUTPUT_PROVIDER (2 << EFFECT_FLAG_OUTPUT_SHIFT ) ) 207  #EFFECT_FLAG_OUTPUT_BOTH (3 << EFFECT_FLAG_OUTPUT_SHIFT ) ) 210  #EFFECT_FLAG_HW_ACC_SHIFT ( EFFECT_FLAG_OUTPUT_SHIFT + EFFECT_FLAG_OUTPUT_SIZE ) ) 211  #EFFECT_FLAG_HW_ACC_SIZE 2 ) 212  #EFFECT_FLAG_HW_ACC_MASK (((1 << EFFECT_FLAG_HW_ACC_SIZE ) -1) \ 213 << EFFECT_FLAG_HW_ACC_SHIFT ) ) 214  #EFFECT_FLAG_HW_ACC_SIMPLE (1 << EFFECT_FLAG_HW_ACC_SHIFT ) ) 215  #EFFECT_FLAG_HW_ACC_TUNNEL (2 << EFFECT_FLAG_HW_ACC_SHIFT ) ) 218  #EFFECT_FLAG_AUDIO_MODE_SHIFT ( EFFECT_FLAG_HW_ACC_SHIFT + EFFECT_FLAG_HW_ACC_SIZE ) ) 219  #EFFECT_FLAG_AUDIO_MODE_SIZE 2 ) 220  #EFFECT_FLAG_AUDIO_MODE_MASK (((1 << EFFECT_FLAG_AUDIO_MODE_SIZE ) -1) \ 221 << EFFECT_FLAG_AUDIO_MODE_SHIFT ) ) 222  #EFFECT_FLAG_AUDIO_MODE_IND (1 << EFFECT_FLAG_AUDIO_MODE_SHIFT ) ) 223  #EFFECT_FLAG_AUDIO_MODE_NONE (0 << EFFECT_FLAG_AUDIO_MODE_SHIFT ) ) 226  #EFFECT_FLAG_AUDIO_SOURCE_SHIFT ( EFFECT_FLAG_AUDIO_MODE_SHIFT + EFFECT_FLAG_AUDIO_MODE_SIZE ) ) 227  #EFFECT_FLAG_AUDIO_SOURCE_SIZE 2 ) 228  #EFFECT_FLAG_AUDIO_SOURCE_MASK (((1 << EFFECT_FLAG_AUDIO_SOURCE_SIZE ) -1) \ 229 << EFFECT_FLAG_AUDIO_SOURCE_SHIFT ) ) 230  #EFFECT_FLAG_AUDIO_SOURCE_IND (1 << EFFECT_FLAG_AUDIO_SOURCE_SHIFT ) ) 231  #EFFECT_FLAG_AUDIO_SOURCE_NONE (0 << EFFECT_FLAG_AUDIO_SOURCE_SHIFT ) ) 234  #EFFECT_FLAG_OFFLOAD_SHIFT ( EFFECT_FLAG_AUDIO_SOURCE_SHIFT + \ 235 EFFECT_FLAG_AUDIO_SOURCE_SIZE ) ) 236  #EFFECT_FLAG_OFFLOAD_SIZE 1 ) 237  #EFFECT_FLAG_OFFLOAD_MASK (((1 << EFFECT_FLAG_OFFLOAD_SIZE ) -1) \ 238 << EFFECT_FLAG_OFFLOAD_SHIFT ) ) 239  #EFFECT_FLAG_OFFLOAD_SUPPORTED (1 << EFFECT_FLAG_OFFLOAD_SHIFT ) ) 241  #EFFECT_MAKE_API_VERSION ( M , m è(((M)<<16è| ((mè& 0xFFFF)) ) 242  #EFFECT_API_VERSION_MAJOR ( v è((v)>>16) ) 243  #EFFECT_API_VERSION_MINOR ( v è(( m è& 0xFFFF) ) 252  #EFFECT_CONTROL_API_VERSION `EFFECT_MAKE_API_VERSION (2,0) ) 272  efãù_š‹rçû_s ** tefãù_hªdË_t ; 276  audio_bufãr_s taudio_bufãr_t ; 284  sefãù_š‹rçû_s { 320 št32_t (* ´oûss )( efãù_hªdË_t m£lf , 321 audio_bufãr_t * mšBufãr , 322 audio_bufãr_t * moutBufãr ); 353 št32_t (* commªd )( efãù_hªdË_t m£lf , 354 ušt32_t mcmdCode , 355 ušt32_t mcmdSize , 356 * mpCmdD©a , 357 ušt32_t * m»¶ySize , 358 * mpR•lyD©a ); 378 št32_t (* g‘_desütÜ )( efãù_hªdË_t m£lf , 379 efãù_desütÜ_t * mpDesütÜ ); 408 št32_t (* ´oûss_»v”£ )( efãù_hªdË_t m£lf , 409 audio_bufãr_t * mšBufãr , 410 audio_bufãr_t * moutBufãr ); 417 eefãù_commªd_e { 418 mEFFECT_CMD_INIT , 419 mEFFECT_CMD_SET_CONFIG , 420 mEFFECT_CMD_RESET , 421 mEFFECT_CMD_ENABLE , 422 mEFFECT_CMD_DISABLE , 423 mEFFECT_CMD_SET_PARAM , 424 mEFFECT_CMD_SET_PARAM_DEFERRED , 425 mEFFECT_CMD_SET_PARAM_COMMIT , 426 mEFFECT_CMD_GET_PARAM , 427 mEFFECT_CMD_SET_DEVICE , 428 mEFFECT_CMD_SET_VOLUME , 429 mEFFECT_CMD_SET_AUDIO_MODE , 430 mEFFECT_CMD_SET_CONFIG_REVERSE , 431 mEFFECT_CMD_SET_INPUT_DEVICE , 432 mEFFECT_CMD_GET_CONFIG , 433 mEFFECT_CMD_GET_CONFIG_REVERSE , 434 mEFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS , 435 mEFFECT_CMD_GET_FEATURE_CONFIG , 436 mEFFECT_CMD_SET_FEATURE_CONFIG , 437 mEFFECT_CMD_SET_AUDIO_SOURCE , 438 mEFFECT_CMD_OFFLOAD , 440 mEFFECT_CMD_FIRST_PROPRIETARY = 0x10000 776  saudio_bufãr_s { 777 size_t mäameCouÁ ; 779 * m¿w ; 780 št32_t * ms32 ; 781 št16_t * ms16 ; 782 ušt8_t * mu8 ; 798  $št32_t (* tbufãr_funùiÚ_t )(* tcook› , taudio_bufãr_t * tbufãr ); 800  sbufãr_´ovid”_s { 801 bufãr_funùiÚ_t g‘Bufãr ; 802 bufãr_funùiÚ_t »Ëa£Bufãr ; 803 * cook› ; 804 } tbufãr_´ovid”_t ; 811  sbufãr_cÚfig_s { 812 audio_bufãr_t bufãr ; 813 ušt32_t §m¶šgR©e ; 814 ušt32_t chªÃls ; 815 bufãr_´ovid”_t bufãrProvid” ; 816 ušt8_t fÜm© ; 817 ušt8_t acûssMode ; 818 ušt16_t mask ; 819 } tbufãr_cÚfig_t ; 823 eefãù_bufãr_acûss_e { 824 EFFECT_BUFFER_ACCESS_WRITE , 825 EFFECT_BUFFER_ACCESS_READ , 826 EFFECT_BUFFER_ACCESS_ACCUMULATE 831 eefãù_ã©u»_e { 832 EFFECT_FEATURE_AUX_CHANNELS , 833 EFFECT_FEATURE_CNT 838  schªÃl_cÚfig_s { 839 audio_chªÃl_mask_t maš_chªÃls ; 840 audio_chªÃl_mask_t aux_chªÃls ; 841 } tchªÃl_cÚfig_t ; 846  #EFFECT_CONFIG_BUFFER 0x0001 847  #EFFECT_CONFIG_SMP_RATE 0x0002 848  #EFFECT_CONFIG_CHANNELS 0x0004 849  #EFFECT_CONFIG_FORMAT 0x0008 850  #EFFECT_CONFIG_ACC_MODE 0x0010 851  #EFFECT_CONFIG_PROVIDER 0x0020 852  #EFFECT_CONFIG_ALL ( EFFECT_CONFIG_BUFFER | EFFECT_CONFIG_SMP_RATE | \ 853 EFFECT_CONFIG_CHANNELS | EFFECT_CONFIG_FORMAT | \ 854 EFFECT_CONFIG_ACC_MODE | EFFECT_CONFIG_PROVIDER ) ) 859  sefãù_cÚfig_s { 860 bufãr_cÚfig_t šputCfg ; 861 bufãr_cÚfig_t ouutCfg ; 862 } tefãù_cÚfig_t ; 889  sefãù_·¿m_s { 890 št32_t ¡©us ; 891 ušt32_t psize ; 892 ušt32_t vsize ; 893  d©a []; 894 } tefãù_·¿m_t ; 897  sefãù_ofæßd_·¿m_s { 898 boÞ isOfæßd ; 899  ioHªdË ; 900 } tefãù_ofæßd_·¿m_t ; 910  #EFFECT_LIBRARY_API_VERSION `EFFECT_MAKE_API_VERSION (3,0) ) 912  #AUDIO_EFFECT_LIBRARY_TAG ((('A'è<< 24è| (('E'è<< 16è| (('L'è<< 8è| ('T')) ) 917  saudio_efãù_lib¿ry_s { 919 ušt32_t g ; 921 ušt32_t v”siÚ ; 923 cÚ¡ * Çme ; 925 cÚ¡ * im¶em’tÜ ; 956 `št32_t (* ü—‹_efãù )(cÚ¡ efãù_uuid_t * uuid , 957 št32_t £ssiÚId , 958 št32_t ioId , 959 efãù_hªdË_t * pHªdË ); 978 `št32_t (* »Ëa£_efãù )( efãù_hªdË_t hªdË ); 998 `št32_t (* g‘_desütÜ )(cÚ¡ efãù_uuid_t * uuid , 999 efãù_desütÜ_t * pDesütÜ ); 1000 } taudio_efãù_lib¿ry_t ; 1003  #AUDIO_EFFECT_LIBRARY_INFO_SYM AELI ) 1006  #AUDIO_EFFECT_LIBRARY_INFO_SYM_AS_STR "AELI" ) 1008 __END_DECLS @android/hardware/bluetooth.h 17 #iâdeà ANDROID_INCLUDE_BLUETOOTH_H 18  #ANDROID_INCLUDE_BLUETOOTH_H ) 20  ~<¡dboÞ.h > 21  ~<¡dšt.h > 22  ~ 23  ~ 25  ~ 27 g__BEGIN_DECLS 33  #BT_HARDWARE_MODULE_ID "blu‘oÙh" ) 34  #BT_STACK_MODULE_ID "blu‘oÙh" ) 35  #BT_STACK_TEST_MODULE_ID "blu‘oÙh_‹¡" ) 40  #BT_PROFILE_HANDSFREE_ID "hªdsä“" ) 41  #BT_PROFILE_HANDSFREE_CLIENT_ID "hªdsä“_þ›Á" ) 42  #BT_PROFILE_ADVANCED_AUDIO_ID "a2dp" ) 43  #BT_PROFILE_ADVANCED_AUDIO_SINK_ID "a2dp_sšk" ) 44  #BT_PROFILE_HEALTH_ID "h—Éh" ) 45  #BT_PROFILE_SOCKETS_ID "sock‘" ) 46  #BT_PROFILE_HIDHOST_ID "hidho¡" ) 47  #BT_PROFILE_PAN_ID "·n" ) 48  #BT_PROFILE_MAP_CLIENT_ID "m­_þ›Á" ) 50  #BT_PROFILE_GATT_ID "g©t" ) 51  #BT_PROFILE_AV_RC_ID "avrý" ) 52  #BT_PROFILE_AV_RC_CTRL_ID "avrý_ù¾" ) 56 ušt8_t madd»ss [6]; 57 } t__©Œibu‹__ (( t·cked )) tbt_bdaddr_t ; 61 ušt8_t mÇme [249]; 62 } t__©Œibu‹__ (( t·cked )) tbt_bdÇme_t ; 66 mBT_SCAN_MODE_NONE , 67 mBT_SCAN_MODE_CONNECTABLE , 68 mBT_SCAN_MODE_CONNECTABLE_DISCOVERABLE 69 } tbt_sÿn_mode_t ; 73 mBT_STATE_OFF , 74 mBT_STATE_ON 75 } tbt_¡©e_t ; 81 mBT_STATUS_SUCCESS , 82 mBT_STATUS_FAIL , 83 mBT_STATUS_NOT_READY , 84 mBT_STATUS_NOMEM , 85 mBT_STATUS_BUSY , 86 mBT_STATUS_DONE , 87 mBT_STATUS_UNSUPPORTED , 88 mBT_STATUS_PARM_INVALID , 89 mBT_STATUS_UNHANDLED , 90 mBT_STATUS_AUTH_FAILURE , 91 mBT_STATUS_RMT_DEV_DOWN , 92 mBT_STATUS_AUTH_REJECTED 94 } tbt_¡©us_t ; 98 ušt8_t mpš [16]; 99 } t__©Œibu‹__ (( t·cked )) tbt_pš_code_t ; 102 ušt8_t m¡©us ; 103 ušt8_t mù¾_¡©e ; 104 ušt64_t mtx_time ; 105 ušt64_t mrx_time ; 106 ušt64_t midË_time ; 107 ušt64_t m’”gy_u£d ; 108 } t__©Œibu‹__ (( t·cked )) tbt_aùiv™y_’”gy_šfo ; 112 mBT_DISCOVERY_STOPPED , 113 mBT_DISCOVERY_STARTED 114 } tbt_discov”y_¡©e_t ; 118 mBT_ACL_STATE_CONNECTED , 119 mBT_ACL_STATE_DISCONNECTED 120 } tbt_aþ_¡©e_t ; 124 ušt8_t muu [16]; 125 } tbt_uuid_t ; 130 bt_uuid_t muuid ; 131 ušt16_t mchªÃl ; 132  mÇme [256]; 133 } tbt_£rviû_»cÜd_t ; 139  mv”siÚ ; 140  msub_v” ; 141  mmªuçùu»r ; 142 } tbt_»mÙe_v”siÚ_t ; 146 ušt8_t mloÿl_´ivacy_’abËd ; 147 ušt8_t mmax_adv_š¡ªû ; 148 ušt8_t m½a_ofæßd_suµÜ‹d ; 149 ušt8_t mmax_œk_li¡_size ; 150 ušt8_t mmax_adv_fž‹r_suµÜ‹d ; 151 ušt8_t msÿn_»suÉ_¡Üage_size_loby‹ ; 152 ušt8_t msÿn_»suÉ_¡Üage_size_hiby‹ ; 153 ušt8_t maùiv™y_’”gy_šfo_suµÜ‹d ; 154 } tbt_loÿl_Ë_ã©u»s_t ; 164 mBT_PROPERTY_BDNAME = 0x1, 170 mBT_PROPERTY_BDADDR , 176 mBT_PROPERTY_UUIDS , 182 mBT_PROPERTY_CLASS_OF_DEVICE , 188 mBT_PROPERTY_TYPE_OF_DEVICE , 194 mBT_PROPERTY_SERVICE_RECORD , 202 mBT_PROPERTY_ADAPTER_SCAN_MODE , 209 mBT_PROPERTY_ADAPTER_BONDED_DEVICES , 215 mBT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT , 223 mBT_PROPERTY_REMOTE_FRIENDLY_NAME , 229 mBT_PROPERTY_REMOTE_RSSI , 236 mBT_PROPERTY_REMOTE_VERSION_INFO , 243 mBT_PROPERTY_LOCAL_LE_FEATURES , 245 mBT_PROPERTY_REMOTE_DEVICE_TIMESTAMP = 0xFF, 246 } tbt_´Ý”ty_ty³_t ; 251 bt_´Ý”ty_ty³_t mty³ ; 252  mËn ; 253 * mv® ; 254 } tbt_´Ý”ty_t ; 259 mBT_DEVICE_DEVTYPE_BREDR = 0x1, 260 mBT_DEVICE_DEVTYPE_BLE , 261 mBT_DEVICE_DEVTYPE_DUAL 262 } tbt_deviû_ty³_t ; 265 mBT_BOND_STATE_NONE , 266 mBT_BOND_STATE_BONDING , 267 mBT_BOND_STATE_BONDED 268 } tbt_bÚd_¡©e_t ; 272 mBT_SSP_VARIANT_PASSKEY_CONFIRMATION , 273 mBT_SSP_VARIANT_PASSKEY_ENTRY , 274 mBT_SSP_VARIANT_CONSENT , 275 mBT_SSP_VARIANT_PASSKEY_NOTIFICATION 276 } tbt_s¥_v¬ŸÁ_t ; 278  #BT_MAX_NUM_UUIDS 32 ) 283 (* tad­‹r_¡©e_chªged_ÿÎback )( tbt_¡©e_t t¡©e ); 294 (* tad­‹r_´Ý”t›s_ÿÎback )( tbt_¡©us_t t¡©us , 295  tnum_´Ý”t›s , 296 tbt_´Ý”ty_t * t´Ý”t›s ); 302 (* t»mÙe_deviû_´Ý”t›s_ÿÎback )( tbt_¡©us_t t¡©us , 303 tbt_bdaddr_t * tbd_addr , 304  tnum_´Ý”t›s , 305 tbt_´Ý”ty_t * t´Ý”t›s ); 310 (* tdeviû_found_ÿÎback )( tnum_´Ý”t›s , 311 tbt_´Ý”ty_t * t´Ý”t›s ); 314 (* tdiscov”y_¡©e_chªged_ÿÎback )( tbt_discov”y_¡©e_t t¡©e ); 317 (* tpš_»que¡_ÿÎback )( tbt_bdaddr_t * t»mÙe_bd_addr , 318 tbt_bdÇme_t * tbd_Çme , tušt32_t tcod ); 325 (* ts¥_»que¡_ÿÎback )( tbt_bdaddr_t * t»mÙe_bd_addr , 326 tbt_bdÇme_t * tbd_Çme , 327 tušt32_t tcod , 328 tbt_s¥_v¬ŸÁ_t t·œšg_v¬ŸÁ , 329 tušt32_t t·ss_key ); 333 (* tbÚd_¡©e_chªged_ÿÎback )( tbt_¡©us_t t¡©us , 334 tbt_bdaddr_t * t»mÙe_bd_addr , 335 tbt_bÚd_¡©e_t t¡©e ); 338 (* taþ_¡©e_chªged_ÿÎback )( tbt_¡©us_t t¡©us , tbt_bdaddr_t * t»mÙe_bd_addr , 339 tbt_aþ_¡©e_t t¡©e ); 342 ASSOCIATE_JVM , 343 DISASSOCIATE_JVM 344 } tbt_cb_th»ad_evt ; 349 (* tÿÎback_th»ad_ev’t )( tbt_cb_th»ad_evt tevt ); 353 (* tdut_mode_»cv_ÿÎback )( tušt16_t tÝcode , tušt8_t * tbuf , ušt8_ˆ tËn ); 358 (* tË_‹¡_mode_ÿÎback )( tbt_¡©us_t t¡©us , tušt16_t tnum_·ck‘s ); 366 (* t’”gy_šfo_ÿÎback )( tbt_aùiv™y_’”gy_šfo * t’”gy_šfo ); 374 size_t size ; 375 ad­‹r_¡©e_chªged_ÿÎback ad­‹r_¡©e_chªged_cb ; 376 ad­‹r_´Ý”t›s_ÿÎback ad­‹r_´Ý”t›s_cb ; 377 »mÙe_deviû_´Ý”t›s_ÿÎback »mÙe_deviû_´Ý”t›s_cb ; 378 deviû_found_ÿÎback deviû_found_cb ; 379 discov”y_¡©e_chªged_ÿÎback discov”y_¡©e_chªged_cb ; 380 pš_»que¡_ÿÎback pš_»que¡_cb ; 381 s¥_»que¡_ÿÎback s¥_»que¡_cb ; 382 bÚd_¡©e_chªged_ÿÎback bÚd_¡©e_chªged_cb ; 383 aþ_¡©e_chªged_ÿÎback aþ_¡©e_chªged_cb ; 384 ÿÎback_th»ad_ev’t th»ad_evt_cb ; 385 dut_mode_»cv_ÿÎback dut_mode_»cv_cb ; 386 Ë_‹¡_mode_ÿÎback Ë_‹¡_mode_cb ; 387 ’”gy_šfo_ÿÎback ’”gy_šfo_cb ; 388 } tbt_ÿÎbacks_t ; 390 (* t®¬m_cb )(* td©a ); 391  $boÞ (* t£t_wake_®¬m_ÿÎout )( tušt64_t td–ay_mžlis , tboÞ tshould_wake , t®¬m_cb tcb , * td©a ); 392 (* tacquœe_wake_lock_ÿÎout )(cÚ¡ * tlock_Çme ); 393 (* t»Ëa£_wake_lock_ÿÎout )(cÚ¡ * tlock_Çme ); 401 size_t size ; 403 £t_wake_®¬m_ÿÎout £t_wake_®¬m ; 404 acquœe_wake_lock_ÿÎout acquœe_wake_lock ; 405 »Ëa£_wake_lock_ÿÎout »Ëa£_wake_lock ; 406 } tbt_os_ÿÎouts_t ; 430 size_t size ; 435 (* š™ )( bt_ÿÎbacks_t * ÿÎbacks ); 438 (* ’abË )(); 441 (* di§bË )(); 444 (* þ—nup )(); 447 (* g‘_ad­‹r_´Ý”t›s )(); 450 (* g‘_ad­‹r_´Ý”ty )( bt_´Ý”ty_ty³_t ty³ ); 456 (* £t_ad­‹r_´Ý”ty )(cÚ¡ bt_´Ý”ty_t * ´Ý”ty ); 459 (* g‘_»mÙe_deviû_´Ý”t›s )( bt_bdaddr_t * »mÙe_addr ); 462 (* g‘_»mÙe_deviû_´Ý”ty )( bt_bdaddr_t * »mÙe_addr , 463 bt_´Ý”ty_ty³_t ty³ ); 466 (* £t_»mÙe_deviû_´Ý”ty )( bt_bdaddr_t * »mÙe_addr , 467 cÚ¡ bt_´Ý”ty_t * ´Ý”ty ); 470 (* g‘_»mÙe_£rviû_»cÜd )( bt_bdaddr_t * »mÙe_addr , 471 bt_uuid_t * uuid ); 474 (* g‘_»mÙe_£rviûs )( bt_bdaddr_t * »mÙe_addr ); 477 (* ¡¬t_discov”y )(); 480 (* ÿnûl_discov”y )(); 483 (* ü—‹_bÚd )(cÚ¡ bt_bdaddr_t * bd_addr ,  Œª¥Üt ); 486 (* »move_bÚd )(cÚ¡ bt_bdaddr_t * bd_addr ); 489 (* ÿnûl_bÚd )(cÚ¡ bt_bdaddr_t * bd_addr ); 496 (* g‘_cÚÃùiÚ_¡©e )(cÚ¡ bt_bdaddr_t * bd_addr ); 500 (* pš_»¶y )(cÚ¡ bt_bdaddr_t * bd_addr , ušt8_t acû± , 501 ušt8_t pš_Ën , bt_pš_code_t * pš_code ); 508 (* s¥_»¶y )(cÚ¡ bt_bdaddr_t * bd_addr , bt_s¥_v¬ŸÁ_t v¬ŸÁ , 509 ušt8_t acû± , ušt32_t ·sskey ); 512 cÚ¡ * (* g‘_´ofže_š‹rçû è(cÚ¡ * ´ofže_id ); 516 (* dut_mode_cÚfigu» )( ušt8_t ’abË ); 519 (* dut_mode_£nd )( ušt16_t Ýcode , ušt8_t * buf , ušt8_ˆ Ën ); 522 (* Ë_‹¡_mode )( ušt16_t Ýcode , ušt8_t * buf , ušt8_ˆ Ën ); 525 (* cÚfig_hci_¢oÝ_log )( ušt8_t ’abË ); 530 (* £t_os_ÿÎouts )( bt_os_ÿÎouts_t * ÿÎouts ); 535 (* »ad_’”gy_šfo )(); 536 } tbt_š‹rçû_t ; 543  hw_deviû_t commÚ ; 544 cÚ¡ bt_š‹rçû_t * (* g‘_blu‘oÙh_š‹rçû )(); 545 } tblu‘oÙh_deviû_t ; 547  blu‘oÙh_deviû_t tblu‘oÙh_moduË_t ; 548 __END_DECLS @android/hardware/bt_av.h 17 #iâdeà ANDROID_INCLUDE_BT_AV_H 18  #ANDROID_INCLUDE_BT_AV_H ) 20 __BEGIN_DECLS 24 mBTAV_CONNECTION_STATE_DISCONNECTED = 0, 25 mBTAV_CONNECTION_STATE_CONNECTING , 26 mBTAV_CONNECTION_STATE_CONNECTED , 27 mBTAV_CONNECTION_STATE_DISCONNECTING 28 } tbv_cÚÃùiÚ_¡©e_t ; 32 mBTAV_AUDIO_STATE_REMOTE_SUSPEND = 0, 33 mBTAV_AUDIO_STATE_STOPPED , 34 mBTAV_AUDIO_STATE_STARTED , 35 } tbv_audio_¡©e_t ; 41 (* tbv_cÚÃùiÚ_¡©e_ÿÎback )( tbv_cÚÃùiÚ_¡©e_t t¡©e , 42 tbt_bdaddr_t * tbd_addr ); 47 (* tbv_audio_¡©e_ÿÎback )( tbv_audio_¡©e_t t¡©e , 48 tbt_bdaddr_t * tbd_addr ); 56 (* tbv_audio_cÚfig_ÿÎback )( tbt_bdaddr_t * tbd_addr , 57 tušt32_t t§m¶e_¿‹ , 58 tušt8_t tchªÃl_couÁ ); 63 size_t size ; 64 bv_cÚÃùiÚ_¡©e_ÿÎback cÚÃùiÚ_¡©e_cb ; 65 bv_audio_¡©e_ÿÎback audio_¡©e_cb ; 66 bv_audio_cÚfig_ÿÎback audio_cÚfig_cb ; 67 } tbv_ÿÎbacks_t ; 85 size_t size ; 89 `bt_¡©us_t (* š™ )Ð bv_ÿÎbacks_t * ÿÎbacks ); 92 `bt_¡©us_t (* cÚÃù )Ð bt_bdaddr_t * bd_addr ); 95 `bt_¡©us_t (* discÚÃù )Ð bt_bdaddr_t * bd_addr ); 98 (* þ—nup )( ); 99 } tbv_š‹rçû_t ; 101 __END_DECLS @android/hardware/bt_gatt.h 18 #iâdeà ANDROID_INCLUDE_BT_GATT_H 19  #ANDROID_INCLUDE_BT_GATT_H ) 21  ~<¡dšt.h > 22  ~"bt_g©t_þ›Á.h " 23  ~"bt_g©t_£rv”.h " 25 __BEGIN_DECLS 30 size_t msize ; 33 cÚ¡ btg©t_þ›Á_ÿÎbacks_t * mþ›Á ; 36 cÚ¡ btg©t_£rv”_ÿÎbacks_t * m£rv” ; 37 } tbtg©t_ÿÎbacks_t ; 42 size_t msize ; 47 bt_¡©us_t (* š™ )ÐcÚ¡ btg©t_ÿÎbacks_t * mÿÎbacks ); 50 (* mþ—nup )( ); 53 cÚ¡ btg©t_þ›Á_š‹rçû_t * mþ›Á ; 56 cÚ¡ btg©t_£rv”_š‹rçû_t * m£rv” ; 57 } tbtg©t_š‹rçû_t ; 59 g__END_DECLS @android/hardware/bt_gatt_client.h 18 #iâdeà ANDROID_INCLUDE_BT_GATT_CLIENT_H 19  #ANDROID_INCLUDE_BT_GATT_CLIENT_H ) 21  ~<¡dšt.h > 22  ~"bt_g©t_ty³s.h " 24 g__BEGIN_DECLS 30  #BTGATT_MAX_ATTR_LEN 600 ) 35 ušt8_t mv®ue [ BTGATT_MAX_ATTR_LEN ]; 36 ušt16_t mËn ; 37 } tbtg©t_unfÜm©‹d_v®ue_t ; 42 btg©t_¤vc_id_t m¤vc_id ; 43 btg©t_g©t_id_t mch¬_id ; 44 btg©t_g©t_id_t mdesü_id ; 45 btg©t_unfÜm©‹d_v®ue_t mv®ue ; 46 ušt16_t mv®ue_ty³ ; 47 ušt8_t m¡©us ; 48 } tbtg©t_»ad_·¿ms_t ; 53 btg©t_¤vc_id_t m¤vc_id ; 54 btg©t_g©t_id_t mch¬_id ; 55 btg©t_g©t_id_t mdesü_id ; 56 ušt8_t m¡©us ; 57 } tbtg©t_wr™e_·¿ms_t ; 62 ušt8_t mv®ue [ BTGATT_MAX_ATTR_LEN ]; 63 bt_bdaddr_t mbda ; 64 btg©t_¤vc_id_t m¤vc_id ; 65 btg©t_g©t_id_t mch¬_id ; 66 ušt16_t mËn ; 67 ušt8_t mis_nÙify ; 68 } tbtg©t_nÙify_·¿ms_t ; 72 bt_bdaddr_t * mbda1 ; 73 bt_uuid_t * muuid1 ; 74 ušt16_t mu1 ; 75 ušt16_t mu2 ; 76 ušt16_t mu3 ; 77 ušt16_t mu4 ; 78 ušt16_t mu5 ; 79 } tbtg©t_‹¡_·¿ms_t ; 84 (* t»gi¡”_þ›Á_ÿÎback )( t¡©us ,  tþ›Á_if , 85 tbt_uuid_t * t­p_uuid ); 88 (* tsÿn_»suÉ_ÿÎback )( tbt_bdaddr_t * tbda ,  trssi , tušt8_t * tadv_d©a ); 91 (* tcÚÃù_ÿÎback )( tcÚn_id ,  t¡©us ,  tþ›Á_if , tbt_bdaddr_t * tbda ); 94 (* tdiscÚÃù_ÿÎback )( tcÚn_id ,  t¡©us , 95  tþ›Á_if , tbt_bdaddr_t * tbda ); 101 (* t£¬ch_com¶‘e_ÿÎback )( tcÚn_id ,  t¡©us ); 104 (* t£¬ch_»suÉ_ÿÎback )Ð tcÚn_id , tbtg©t_¤vc_id_t * t¤vc_id ); 107 (* tg‘_ch¬aù”i¡ic_ÿÎback )( tcÚn_id ,  t¡©us , 108 tbtg©t_¤vc_id_t * t¤vc_id , tbtg©t_g©t_id_t * tch¬_id , 109  tch¬_´Ý ); 112 (* tg‘_desütÜ_ÿÎback )( tcÚn_id ,  t¡©us , 113 tbtg©t_¤vc_id_t * t¤vc_id , tbtg©t_g©t_id_t * tch¬_id , 114 tbtg©t_g©t_id_t * tdesü_id ); 117 (* tg‘_šþuded_£rviû_ÿÎback )( tcÚn_id ,  t¡©us , 118 tbtg©t_¤vc_id_t * t¤vc_id , btg©t_¤vc_id_ˆ* tšþ_¤vc_id ); 121 (* t»gi¡”_fÜ_nÙifiÿtiÚ_ÿÎback )( tcÚn_id , 122  t»gi¡”ed ,  t¡©us , tbtg©t_¤vc_id_t * t¤vc_id , 123 tbtg©t_g©t_id_t * tch¬_id ); 129 (* tnÙify_ÿÎback )( tcÚn_id , tbtg©t_nÙify_·¿ms_t * tp_d©a ); 132 (* t»ad_ch¬aù”i¡ic_ÿÎback )( tcÚn_id ,  t¡©us , 133 tbtg©t_»ad_·¿ms_t * tp_d©a ); 136 (* twr™e_ch¬aù”i¡ic_ÿÎback )( tcÚn_id ,  t¡©us , 137 tbtg©t_wr™e_·¿ms_t * tp_d©a ); 140 (* texecu‹_wr™e_ÿÎback )( tcÚn_id ,  t¡©us ); 143 (* t»ad_desütÜ_ÿÎback )( tcÚn_id ,  t¡©us , 144 tbtg©t_»ad_·¿ms_t * tp_d©a ); 147 (* twr™e_desütÜ_ÿÎback )( tcÚn_id ,  t¡©us , 148 tbtg©t_wr™e_·¿ms_t * tp_d©a ); 151 (* t»ad_»mÙe_rssi_ÿÎback )( tþ›Á_if , tbt_bdaddr_t * tbda , 152  trssi ,  t¡©us ); 157 (* tli¡’_ÿÎback )( t¡©us ,  t£rv”_if ); 160 (* tcÚfigu»_mtu_ÿÎback )( tcÚn_id ,  t¡©us ,  tmtu ); 163 (* tsÿn_fž‹r_cfg_ÿÎback )( taùiÚ ,  tþ›Á_if ,  t¡©us ,  tfžt_ty³ , 164  tavbl_¥aû ); 167 (* tsÿn_fž‹r_·¿m_ÿÎback )( taùiÚ ,  tþ›Á_if ,  t¡©us , 168  tavbl_¥aû ); 171 (* tsÿn_fž‹r_¡©us_ÿÎback )( t’abË ,  tþ›Á_if ,  t¡©us ); 174 (* tmuÉi_adv_’abË_ÿÎback )( tþ›Á_if ,  t¡©us ); 177 (* tmuÉi_adv_upd©e_ÿÎback )( tþ›Á_if ,  t¡©us ); 180 (* tmuÉi_adv_d©a_ÿÎback )( tþ›Á_if ,  t¡©us ); 183 (* tmuÉi_adv_di§bË_ÿÎback )( tþ›Á_if ,  t¡©us ); 190 (* tcÚge¡iÚ_ÿÎback )( tcÚn_id , tboÞ tcÚge¡ed ); 192 (* tb©chsÿn_cfg_¡Üage_ÿÎback )( tþ›Á_if ,  t¡©us ); 195 (* tb©chsÿn_’abË_di§bË_ÿÎback )( taùiÚ ,  tþ›Á_if ,  t¡©us ); 198 (* tb©chsÿn_»pÜts_ÿÎback )( tþ›Á_if ,  t¡©us ,  t»pÜt_fÜm© , 199  tnum_»cÜds ,  td©a_Ën , tušt8_t * t»p_d©a ); 202 (* tb©chsÿn_th»shÞd_ÿÎback )( tþ›Á_if ); 205 (* tŒack_adv_ev’t_ÿÎback )( tþ›Á_if ,  tfžt_šdex ,  taddr_ty³ , 206 tbt_bdaddr_t * tbda ,  tadv_¡©e ); 209 »gi¡”_þ›Á_ÿÎback »gi¡”_þ›Á_cb ; 210 sÿn_»suÉ_ÿÎback sÿn_»suÉ_cb ; 211 cÚÃù_ÿÎback Ý’_cb ; 212 discÚÃù_ÿÎback þo£_cb ; 213 £¬ch_com¶‘e_ÿÎback £¬ch_com¶‘e_cb ; 214 £¬ch_»suÉ_ÿÎback £¬ch_»suÉ_cb ; 215 g‘_ch¬aù”i¡ic_ÿÎback g‘_ch¬aù”i¡ic_cb ; 216 g‘_desütÜ_ÿÎback g‘_desütÜ_cb ; 217 g‘_šþuded_£rviû_ÿÎback g‘_šþuded_£rviû_cb ; 218 »gi¡”_fÜ_nÙifiÿtiÚ_ÿÎback »gi¡”_fÜ_nÙifiÿtiÚ_cb ; 219 nÙify_ÿÎback nÙify_cb ; 220 »ad_ch¬aù”i¡ic_ÿÎback »ad_ch¬aù”i¡ic_cb ; 221 wr™e_ch¬aù”i¡ic_ÿÎback wr™e_ch¬aù”i¡ic_cb ; 222 »ad_desütÜ_ÿÎback »ad_desütÜ_cb ; 223 wr™e_desütÜ_ÿÎback wr™e_desütÜ_cb ; 224 execu‹_wr™e_ÿÎback execu‹_wr™e_cb ; 225 »ad_»mÙe_rssi_ÿÎback »ad_»mÙe_rssi_cb ; 226 li¡’_ÿÎback li¡’_cb ; 227 cÚfigu»_mtu_ÿÎback cÚfigu»_mtu_cb ; 228 sÿn_fž‹r_cfg_ÿÎback sÿn_fž‹r_cfg_cb ; 229 sÿn_fž‹r_·¿m_ÿÎback sÿn_fž‹r_·¿m_cb ; 230 sÿn_fž‹r_¡©us_ÿÎback sÿn_fž‹r_¡©us_cb ; 231 muÉi_adv_’abË_ÿÎback muÉi_adv_’abË_cb ; 232 muÉi_adv_upd©e_ÿÎback muÉi_adv_upd©e_cb ; 233 muÉi_adv_d©a_ÿÎback muÉi_adv_d©a_cb ; 234 muÉi_adv_di§bË_ÿÎback muÉi_adv_di§bË_cb ; 235 cÚge¡iÚ_ÿÎback cÚge¡iÚ_cb ; 236 b©chsÿn_cfg_¡Üage_ÿÎback b©chsÿn_cfg_¡Üage_cb ; 237 b©chsÿn_’abË_di§bË_ÿÎback b©chsÿn_’b_di§bË_cb ; 238 b©chsÿn_»pÜts_ÿÎback b©chsÿn_»pÜts_cb ; 239 b©chsÿn_th»shÞd_ÿÎback b©chsÿn_th»shÞd_cb ; 240 Œack_adv_ev’t_ÿÎback Œack_adv_ev’t_cb ; 241 } tbtg©t_þ›Á_ÿÎbacks_t ; 247 `bt_¡©us_t (* »gi¡”_þ›Á )Ð bt_uuid_t * uuid ); 250 `bt_¡©us_t (* uÄegi¡”_þ›Á )( þ›Á_if ); 253 `bt_¡©us_t (* sÿn )Ð boÞ ¡¬t ); 256 `bt_¡©us_t (* cÚÃù )Ð þ›Á_if , cÚ¡ bt_bdaddr_t * bd_addr , 257 boÞ is_dœeù ,  Œª¥Üt ); 260 `bt_¡©us_t (* discÚÃù )Ð þ›Á_if , cÚ¡ bt_bdaddr_t * bd_addr , 261  cÚn_id ); 264 `bt_¡©us_t (* li¡’ )( þ›Á_if , boÞ ¡¬t ); 267 `bt_¡©us_t (* »äesh )Ð þ›Á_if , cÚ¡ bt_bdaddr_t * bd_addr ); 273 `bt_¡©us_t (* £¬ch_£rviû )( cÚn_id , bt_uuid_t * fž‹r_uuid ); 279 `bt_¡©us_t (* g‘_šþuded_£rviû )Ð cÚn_id , btg©t_¤vc_id_t * ¤vc_id , 280 btg©t_¤vc_id_t * ¡¬t_šþ_¤vc_id ); 286 `bt_¡©us_t (* g‘_ch¬aù”i¡ic )Ð cÚn_id , 287 btg©t_¤vc_id_t * ¤vc_id , btg©t_g©t_id_t * ¡¬t_ch¬_id ); 293 `bt_¡©us_t (* g‘_desütÜ )Ð cÚn_id , 294 btg©t_¤vc_id_t * ¤vc_id , btg©t_g©t_id_t * ch¬_id , 295 btg©t_g©t_id_t * ¡¬t_desü_id ); 298 `bt_¡©us_t (* »ad_ch¬aù”i¡ic )Ð cÚn_id , 299 btg©t_¤vc_id_t * ¤vc_id , btg©t_g©t_id_t * ch¬_id , 300  auth_»q ); 303 `bt_¡©us_t (* wr™e_ch¬aù”i¡ic )( cÚn_id , 304 btg©t_¤vc_id_t * ¤vc_id , btg©t_g©t_id_t * ch¬_id , 305  wr™e_ty³ ,  Ën ,  auth_»q , 306 * p_v®ue ); 309 `bt_¡©us_t (* »ad_desütÜ )( cÚn_id , 310 btg©t_¤vc_id_t * ¤vc_id , btg©t_g©t_id_t * ch¬_id , 311 btg©t_g©t_id_t * desü_id ,  auth_»q ); 314 `bt_¡©us_t (* wr™e_desütÜ )Ð cÚn_id , 315 btg©t_¤vc_id_t * ¤vc_id , btg©t_g©t_id_t * ch¬_id , 316 btg©t_g©t_id_t * desü_id ,  wr™e_ty³ ,  Ën , 317  auth_»q , * p_v®ue ); 320 `bt_¡©us_t (* execu‹_wr™e )( cÚn_id ,  execu‹ ); 326 `bt_¡©us_t (* »gi¡”_fÜ_nÙifiÿtiÚ )Ð þ›Á_if , 327 cÚ¡ bt_bdaddr_t * bd_addr , btg©t_¤vc_id_t * ¤vc_id , 328 btg©t_g©t_id_t * ch¬_id ); 331 `bt_¡©us_t (* d”egi¡”_fÜ_nÙifiÿtiÚ )Ð þ›Á_if , 332 cÚ¡ bt_bdaddr_t * bd_addr , btg©t_¤vc_id_t * ¤vc_id , 333 btg©t_g©t_id_t * ch¬_id ); 336 `bt_¡©us_t (* »ad_»mÙe_rssi )Ð þ›Á_if , cÚ¡ bt_bdaddr_t * bd_addr ); 339 `bt_¡©us_t (* sÿn_fž‹r_·¿m_£tup )( þ›Á_if ,  aùiÚ ,  fžt_šdex ,  ã©_£Ê , 340  li¡_logic_ty³ ,  fžt_logic_ty³ ,  rssi_high_th»s , 341  rssi_low_th»s ,  d–y_mode ,  found_timeout , 342  lo¡_timeout ,  found_timeout_út ); 346 `bt_¡©us_t (* sÿn_fž‹r_add_»move )( þ›Á_if ,  aùiÚ ,  fžt_ty³ , 347  fžt_šdex ,  com·ny_id , 348  com·ny_id_mask , cÚ¡ bt_uuid_t * p_uuid , 349 cÚ¡ bt_uuid_t * p_uuid_mask , cÚ¡ bt_bdaddr_t * bd_addr , 350  addr_ty³ ,  d©a_Ën , * p_d©a ,  mask_Ën , 351 * p_mask ); 354 `bt_¡©us_t (* sÿn_fž‹r_þ—r )( þ›Á_if ,  fžt_šdex ); 357 `bt_¡©us_t (* sÿn_fž‹r_’abË )( þ›Á_if , boÞ ’abË ); 360 (* g‘_deviû_ty³ )ÐcÚ¡ bt_bdaddr_t * bd_addr ); 363 `bt_¡©us_t (* £t_adv_d©a )( þ›Á_if , boÞ £t_sÿn_r¥ , boÞ šþude_Çme , 364 boÞ šþude_txpow” ,  mš_š‹rv® ,  max_š‹rv® ,  ­³¬ªû , 365 ušt16_t mªuçùu»r_Ën , * mªuçùu»r_d©a , 366 ušt16_t £rviû_d©a_Ën , * £rviû_d©a , 367 ušt16_t £rviû_uuid_Ën , * £rviû_uuid ); 370 `bt_¡©us_t (* cÚfigu»_mtu )( cÚn_id ,  mtu ); 373 `bt_¡©us_t (* cÚn_·¿m‘”_upd©e )(cÚ¡ bt_bdaddr_t * bd_addr ,  mš_š‹rv® , 374  max_š‹rv® ,  Ï‹ncy ,  timeout ); 377 `bt_¡©us_t (* £t_sÿn_·¿m‘”s )( sÿn_š‹rv® ,  sÿn_wšdow ); 380 `bt_¡©us_t (* muÉi_adv_’abË )( þ›Á_if ,  mš_š‹rv® , max_š‹rv® , adv_ty³ , 381  chÆ_m­ ,  tx_pow” ,  timeout_s ); 384 `bt_¡©us_t (* muÉi_adv_upd©e )( þ›Á_if ,  mš_š‹rv® , max_š‹rv® , adv_ty³ , 385  chÆ_m­ ,  tx_pow” ,  timeout_s ); 388 `bt_¡©us_t (* muÉi_adv_£t_š¡_d©a )( þ›Á_if , boÞ £t_sÿn_r¥ , boÞ šþude_Çme , 389 boÞ šþ_txpow” ,  ­³¬ªû ,  mªuçùu»r_Ën , 390 * mªuçùu»r_d©a ,  £rviû_d©a_Ën , 391 * £rviû_d©a ,  £rviû_uuid_Ën , * £rviû_uuid ); 394 `bt_¡©us_t (* muÉi_adv_di§bË )( þ›Á_if ); 397 `bt_¡©us_t (* b©chsÿn_cfg_¡Üage )( þ›Á_if ,  b©ch_sÿn_fuÎ_max , 398  b©ch_sÿn_Œunc_max ,  b©ch_sÿn_nÙify_th»shÞd ); 401 `bt_¡©us_t (* b©chsÿn_’b_b©ch_sÿn )( þ›Á_if ,  sÿn_mode , 402  sÿn_š‹rv® ,  sÿn_wšdow ,  addr_ty³ ,  disÿrd_ruË ); 405 `bt_¡©us_t (* b©chsÿn_dis_b©ch_sÿn )( þ›Á_if ); 408 `bt_¡©us_t (* b©chsÿn_»ad_»pÜts )( þ›Á_if ,  sÿn_mode ); 411 `bt_¡©us_t (* ‹¡_commªd )Ð commªd , btg©t_‹¡_·¿ms_t * ·¿ms ); 413 } tbtg©t_þ›Á_š‹rçû_t ; 415 __END_DECLS @android/hardware/bt_gatt_server.h 18 #iâdeà ANDROID_INCLUDE_BT_GATT_SERVER_H 19  #ANDROID_INCLUDE_BT_GATT_SERVER_H ) 21  ~<¡dšt.h > 23  ~"bt_g©t_ty³s.h " 25 __BEGIN_DECLS 30 ušt8_t mv®ue [ BTGATT_MAX_ATTR_LEN ]; 31 ušt16_t mhªdË ; 32 ušt16_t moff£t ; 33 ušt16_t mËn ; 34 ušt8_t mauth_»q ; 35 } tbtg©t_v®ue_t ; 40 btg©t_v®ue_t m©Œ_v®ue ; 41 ušt16_t mhªdË ; 42 } tbtg©t_»¥Ú£_t ; 47 (* t»gi¡”_£rv”_ÿÎback )( t¡©us ,  t£rv”_if , 48 tbt_uuid_t * t­p_uuid ); 51 (* tcÚÃùiÚ_ÿÎback )( tcÚn_id ,  t£rv”_if ,  tcÚÃùed , 52 tbt_bdaddr_t * tbda ); 55 (* t£rviû_added_ÿÎback )( t¡©us ,  t£rv”_if , 56 tbtg©t_¤vc_id_t * t¤vc_id ,  t¤vc_hªdË ); 59 (* tšþuded_£rviû_added_ÿÎback )( t¡©us ,  t£rv”_if , 60  t¤vc_hªdË ,  tšþ_¤vc_hªdË ); 63 (* tch¬aù”i¡ic_added_ÿÎback )( t¡©us ,  t£rv”_if , 64 tbt_uuid_t * tuuid ,  t¤vc_hªdË ,  tch¬_hªdË ); 67 (* tdesütÜ_added_ÿÎback )( t¡©us ,  t£rv”_if , 68 tbt_uuid_t * tuuid ,  t¤vc_hªdË ,  tdesü_hªdË ); 71 (* t£rviû_¡¬‹d_ÿÎback )( t¡©us ,  t£rv”_if , 72  t¤vc_hªdË ); 75 (* t£rviû_¡Ý³d_ÿÎback )( t¡©us ,  t£rv”_if , 76  t¤vc_hªdË ); 79 (* t£rviû_d–‘ed_ÿÎback )( t¡©us ,  t£rv”_if , 80  t¤vc_hªdË ); 86 (* t»que¡_»ad_ÿÎback )( tcÚn_id ,  tŒªs_id , tbt_bdaddr_t * tbda , 87  t©Œ_hªdË ,  toff£t , tboÞ tis_lÚg ); 93 (* t»que¡_wr™e_ÿÎback )( tcÚn_id ,  tŒªs_id , tbt_bdaddr_t * tbda , 94  t©Œ_hªdË ,  toff£t ,  tËngth , 95 tboÞ tÃed_r¥ , boÞ tis_´• , tušt8_t * tv®ue ); 98 (* t»que¡_exec_wr™e_ÿÎback )( tcÚn_id ,  tŒªs_id , 99 tbt_bdaddr_t * tbda ,  texec_wr™e ); 105 (* t»¥Ú£_cÚfœm©iÚ_ÿÎback )( t¡©us ,  thªdË ); 111 (* tšdiÿtiÚ_£Á_ÿÎback )( tcÚn_id ,  t¡©us ); 118 (* tcÚge¡iÚ_ÿÎback )( tcÚn_id , tboÞ tcÚge¡ed ); 121 »gi¡”_£rv”_ÿÎback »gi¡”_£rv”_cb ; 122 cÚÃùiÚ_ÿÎback cÚÃùiÚ_cb ; 123 £rviû_added_ÿÎback £rviû_added_cb ; 124 šþuded_£rviû_added_ÿÎback šþuded_£rviû_added_cb ; 125 ch¬aù”i¡ic_added_ÿÎback ch¬aù”i¡ic_added_cb ; 126 desütÜ_added_ÿÎback desütÜ_added_cb ; 127 £rviû_¡¬‹d_ÿÎback £rviû_¡¬‹d_cb ; 128 £rviû_¡Ý³d_ÿÎback £rviû_¡Ý³d_cb ; 129 £rviû_d–‘ed_ÿÎback £rviû_d–‘ed_cb ; 130 »que¡_»ad_ÿÎback »que¡_»ad_cb ; 131 »que¡_wr™e_ÿÎback »que¡_wr™e_cb ; 132 »que¡_exec_wr™e_ÿÎback »que¡_exec_wr™e_cb ; 133 »¥Ú£_cÚfœm©iÚ_ÿÎback »¥Ú£_cÚfœm©iÚ_cb ; 134 šdiÿtiÚ_£Á_ÿÎback šdiÿtiÚ_£Á_cb ; 135 cÚge¡iÚ_ÿÎback cÚge¡iÚ_cb ; 136 } tbtg©t_£rv”_ÿÎbacks_t ; 141 `bt_¡©us_t (* »gi¡”_£rv” )Ð bt_uuid_t * uuid ); 144 `bt_¡©us_t (* uÄegi¡”_£rv” )( £rv”_if ); 147 `bt_¡©us_t (* cÚÃù )( £rv”_if , cÚ¡ bt_bdaddr_t * bd_addr , 148 boÞ is_dœeù ,  Œª¥Üt ); 151 `bt_¡©us_t (* discÚÃù )( £rv”_if , cÚ¡ bt_bdaddr_t * bd_addr , 152  cÚn_id ); 155 `bt_¡©us_t (* add_£rviû )Ð £rv”_if , btg©t_¤vc_id_t * ¤vc_id ,  num_hªdËs ); 158 `bt_¡©us_t (* add_šþuded_£rviû )Ð £rv”_if ,  £rviû_hªdË ,  šþuded_hªdË ); 161 `bt_¡©us_t (* add_ch¬aù”i¡ic )Ð £rv”_if , 162  £rviû_hªdË , bt_uuid_t * uuid , 163  ´Ý”t›s ,  ³rmissiÚs ); 166 `bt_¡©us_t (* add_desütÜ )( £rv”_if ,  £rviû_hªdË , 167 bt_uuid_t * uuid ,  ³rmissiÚs ); 170 `bt_¡©us_t (* ¡¬t_£rviû )( £rv”_if ,  £rviû_hªdË , 171  Œª¥Üt ); 174 `bt_¡©us_t (* ¡Ý_£rviû )( £rv”_if ,  £rviû_hªdË ); 177 `bt_¡©us_t (* d–‘e_£rviû )( £rv”_if ,  £rviû_hªdË ); 180 `bt_¡©us_t (* £nd_šdiÿtiÚ )( £rv”_if ,  ©Œibu‹_hªdË , 181  cÚn_id ,  Ën ,  cÚfœm , 182 * p_v®ue ); 185 `bt_¡©us_t (* £nd_»¥Ú£ )( cÚn_id ,  Œªs_id , 186  ¡©us , btg©t_»¥Ú£_t * »¥Ú£ ); 188 } tbtg©t_£rv”_š‹rçû_t ; 190 __END_DECLS @android/hardware/bt_gatt_types.h 18 #iâdeà ANDROID_INCLUDE_BT_GATT_TYPES_H 19  #ANDROID_INCLUDE_BT_GATT_TYPES_H ) 21  ~<¡dšt.h > 22  ~<¡dboÞ.h > 24 g__BEGIN_DECLS 29  #BTGATT_SERVICE_TYPE_PRIMARY 0 ) 30  #BTGATT_SERVICE_TYPE_SECONDARY 1 ) 35 bt_uuid_t muuid ; 36 ušt8_t mš¡_id ; 37 } tbtg©t_g©t_id_t ; 42 btg©t_g©t_id_t mid ; 43 ušt8_t mis_´im¬y ; 44 } tbtg©t_¤vc_id_t ; 49 mGATT_TRANSPORT_AUTO , 50 mGATT_TRANSPORT_BREDR , 51 mGATT_TRANSPORT_LE 52 } tbtg©t_Œª¥Üt_t ; 54 g__END_DECLS @android/hardware/bt_hf.h 17 #iâdeà ANDROID_INCLUDE_BT_HF_H 18  #ANDROID_INCLUDE_BT_HF_H ) 20 __BEGIN_DECLS 24 mBTHF_AT_RESPONSE_ERROR = 0, 25 mBTHF_AT_RESPONSE_OK 26 } tbthf_©_»¥Ú£_t ; 29 mBTHF_CONNECTION_STATE_DISCONNECTED = 0, 30 mBTHF_CONNECTION_STATE_CONNECTING , 31 mBTHF_CONNECTION_STATE_CONNECTED , 32 mBTHF_CONNECTION_STATE_SLC_CONNECTED , 33 mBTHF_CONNECTION_STATE_DISCONNECTING 34 } tbthf_cÚÃùiÚ_¡©e_t ; 37 mBTHF_AUDIO_STATE_DISCONNECTED = 0, 38 mBTHF_AUDIO_STATE_CONNECTING , 39 mBTHF_AUDIO_STATE_CONNECTED , 40 mBTHF_AUDIO_STATE_DISCONNECTING 41 } tbthf_audio_¡©e_t ; 44 mBTHF_VR_STATE_STOPPED = 0, 45 mBTHF_VR_STATE_STARTED 46 } tbthf_vr_¡©e_t ; 49 mBTHF_VOLUME_TYPE_SPK = 0, 50 mBTHF_VOLUME_TYPE_MIC 51 } tbthf_vÞume_ty³_t ; 56 mBTHF_NREC_STOP , 57 mBTHF_NREC_START 58 } tbthf_Äec_t ; 63 mBTHF_WBS_NONE , 64 mBTHF_WBS_NO , 65 mBTHF_WBS_YES 66 } tbthf_wbs_cÚfig_t ; 71 mBTHF_CHLD_TYPE_RELEASEHELD , 72 mBTHF_CHLD_TYPE_RELEASEACTIVE_ACCEPTHELD , 73 mBTHF_CHLD_TYPE_HOLDACTIVE_ACCEPTHELD , 74 mBTHF_CHLD_TYPE_ADDHELDTOCONF , 75 } tbthf_chld_ty³_t ; 80 (* tbthf_cÚÃùiÚ_¡©e_ÿÎback )( tbthf_cÚÃùiÚ_¡©e_t t¡©e , tbt_bdaddr_t * tbd_addr ); 85 (* tbthf_audio_¡©e_ÿÎback )( tbthf_audio_¡©e_t t¡©e , tbt_bdaddr_t * tbd_addr ); 90 (* tbthf_vr_cmd_ÿÎback )( tbthf_vr_¡©e_t t¡©e , tbt_bdaddr_t * tbd_addr ); 94 (* tbthf_ªsw”_ÿÎ_cmd_ÿÎback )( tbt_bdaddr_t * tbd_addr ); 98 (* tbthf_hªgup_ÿÎ_cmd_ÿÎback )( tbt_bdaddr_t * tbd_addr ); 103 (* tbthf_vÞume_cmd_ÿÎback )( tbthf_vÞume_ty³_t tty³ ,  tvÞume , tbt_bdaddr_t * tbd_addr ); 108 (* tbthf_dŸl_ÿÎ_cmd_ÿÎback )(* tnumb” , tbt_bdaddr_t * tbd_addr ); 113 (* tbthf_dtmf_cmd_ÿÎback )( ttÚe , tbt_bdaddr_t * tbd_addr ); 118 (* tbthf_Äec_cmd_ÿÎback )( tbthf_Äec_t tÄec , tbt_bdaddr_t * tbd_addr ); 123 (* tbthf_wbs_ÿÎback )( tbthf_wbs_cÚfig_t twbs , tbt_bdaddr_t * tbd_addr ); 128 (* tbthf_chld_cmd_ÿÎback )( tbthf_chld_ty³_t tchld , tbt_bdaddr_t * tbd_addr ); 132 (* tbthf_úum_cmd_ÿÎback )( tbt_bdaddr_t * tbd_addr ); 136 (* tbthf_cšd_cmd_ÿÎback )( tbt_bdaddr_t * tbd_addr ); 140 (* tbthf_cÝs_cmd_ÿÎback )( tbt_bdaddr_t * tbd_addr ); 144 (* tbthf_þcc_cmd_ÿÎback è( tbt_bdaddr_t * tbd_addr ); 149 (* tbthf_unknown_©_cmd_ÿÎback )(* t©_¡ršg , tbt_bdaddr_t * tbd_addr ); 153 (* tbthf_key_´es£d_cmd_ÿÎback )( tbt_bdaddr_t * tbd_addr ); 158 size_t size ; 159 bthf_cÚÃùiÚ_¡©e_ÿÎback cÚÃùiÚ_¡©e_cb ; 160 bthf_audio_¡©e_ÿÎback audio_¡©e_cb ; 161 bthf_vr_cmd_ÿÎback vr_cmd_cb ; 162 bthf_ªsw”_ÿÎ_cmd_ÿÎback ªsw”_ÿÎ_cmd_cb ; 163 bthf_hªgup_ÿÎ_cmd_ÿÎback hªgup_ÿÎ_cmd_cb ; 164 bthf_vÞume_cmd_ÿÎback vÞume_cmd_cb ; 165 bthf_dŸl_ÿÎ_cmd_ÿÎback dŸl_ÿÎ_cmd_cb ; 166 bthf_dtmf_cmd_ÿÎback dtmf_cmd_cb ; 167 bthf_Äec_cmd_ÿÎback Äec_cmd_cb ; 168 bthf_wbs_ÿÎback wbs_cb ; 169 bthf_chld_cmd_ÿÎback chld_cmd_cb ; 170 bthf_úum_cmd_ÿÎback úum_cmd_cb ; 171 bthf_cšd_cmd_ÿÎback cšd_cmd_cb ; 172 bthf_cÝs_cmd_ÿÎback cÝs_cmd_cb ; 173 bthf_þcc_cmd_ÿÎback þcc_cmd_cb ; 174 bthf_unknown_©_cmd_ÿÎback unknown_©_cmd_cb ; 175 bthf_key_´es£d_cmd_ÿÎback key_´es£d_cmd_cb ; 176 } tbthf_ÿÎbacks_t ; 181 BTHF_NETWORK_STATE_NOT_AVAILABLE = 0, 182 BTHF_NETWORK_STATE_AVAILABLE 183 } tbthf_ÃtwÜk_¡©e_t ; 188 BTHF_SERVICE_TYPE_HOME = 0, 189 BTHF_SERVICE_TYPE_ROAMING 190 } tbthf_£rviû_ty³_t ; 193 BTHF_CALL_STATE_ACTIVE = 0, 194 BTHF_CALL_STATE_HELD , 195 BTHF_CALL_STATE_DIALING , 196 BTHF_CALL_STATE_ALERTING , 197 BTHF_CALL_STATE_INCOMING , 198 BTHF_CALL_STATE_WAITING , 199 BTHF_CALL_STATE_IDLE 200 } tbthf_ÿÎ_¡©e_t ; 203 BTHF_CALL_DIRECTION_OUTGOING = 0, 204 BTHF_CALL_DIRECTION_INCOMING 205 } tbthf_ÿÎ_dœeùiÚ_t ; 208 BTHF_CALL_TYPE_VOICE = 0, 209 BTHF_CALL_TYPE_DATA , 210 BTHF_CALL_TYPE_FAX 211 } tbthf_ÿÎ_mode_t ; 214 BTHF_CALL_MPTY_TYPE_SINGLE = 0, 215 BTHF_CALL_MPTY_TYPE_MULTI 216 } tbthf_ÿÎ_m±y_ty³_t ; 219 BTHF_CALL_ADDRTYPE_UNKNOWN = 0x81, 220 BTHF_CALL_ADDRTYPE_INTERNATIONAL = 0x91 221 } tbthf_ÿÎ_add¹y³_t ; 226 size_t size ; 230 `bt_¡©us_t (* š™ )Ð bthf_ÿÎbacks_t * ÿÎbacks ,  max_hf_þ›Ás ); 233 `bt_¡©us_t (* cÚÃù )Ð bt_bdaddr_t * bd_addr ); 236 `bt_¡©us_t (* discÚÃù )Ð bt_bdaddr_t * bd_addr ); 239 `bt_¡©us_t (* cÚÃù_audio )Ð bt_bdaddr_t * bd_addr ); 242 `bt_¡©us_t (* discÚÃù_audio )Ð bt_bdaddr_t * bd_addr ); 245 `bt_¡©us_t (* ¡¬t_voiû_»cogn™iÚ )Ð bt_bdaddr_t * bd_addr ); 248 `bt_¡©us_t (* ¡Ý_voiû_»cogn™iÚ )Ð bt_bdaddr_t * bd_addr ); 251 `bt_¡©us_t (* vÞume_cÚŒÞ è( bthf_vÞume_ty³_t ty³ ,  vÞume , bt_bdaddr_t * bd_addr ); 254 `bt_¡©us_t (* deviû_¡©us_nÙifiÿtiÚ )( bthf_ÃtwÜk_¡©e_t Ák_¡©e , bthf_£rviû_ty³_t svc_ty³ ,  sigÇl , 255  b©t_chg ); 258 `bt_¡©us_t (* cÝs_»¥Ú£ )(cÚ¡ * cÝs , bt_bdaddr_t * bd_addr ); 261 `bt_¡©us_t (* cšd_»¥Ú£ )( svc ,  num_aùive ,  num_h–d , bthf_ÿÎ_¡©e_t ÿÎ_£tup_¡©e , 262  sigÇl ,  rßm ,  b©t_chg , bt_bdaddr_t * bd_addr ); 265 `bt_¡©us_t (* fÜm©‹d_©_»¥Ú£ )(cÚ¡ * r¥ , bt_bdaddr_t * bd_addr ); 271 `bt_¡©us_t (* ©_»¥Ú£ è( bthf_©_»¥Ú£_t »¥Ú£_code ,  ”rÜ_code , bt_bdaddr_t * bd_addr ); 277 `bt_¡©us_t (* þcc_»¥Ú£ è( šdex , bthf_ÿÎ_dœeùiÚ_t dœ , 278 bthf_ÿÎ_¡©e_t ¡©e , bthf_ÿÎ_mode_t mode , 279 bthf_ÿÎ_m±y_ty³_t m±y , cÚ¡ * numb” , 280 bthf_ÿÎ_add¹y³_t ty³ , bt_bdaddr_t * bd_addr ); 289 `bt_¡©us_t (* phÚe_¡©e_chªge è( num_aùive ,  num_h–d , bthf_ÿÎ_¡©e_t ÿÎ_£tup_¡©e , 290 cÚ¡ * numb” , bthf_ÿÎ_add¹y³_t ty³ ); 293 (* þ—nup )( ); 296 `bt_¡©us_t (* cÚfigu»_wbs )Ð bt_bdaddr_t * bd_addr , bthf_wbs_cÚfig_t cÚfig ); 297 } tbthf_š‹rçû_t ; 299 __END_DECLS @android/hardware/bt_hf_client.h 17 #iâdeà ANDROID_INCLUDE_BT_HF_CLIENT_H 18  #ANDROID_INCLUDE_BT_HF_CLIENT_H ) 20 __BEGIN_DECLS 23 mBTHF_CLIENT_CONNECTION_STATE_DISCONNECTED = 0, 24 mBTHF_CLIENT_CONNECTION_STATE_CONNECTING , 25 mBTHF_CLIENT_CONNECTION_STATE_CONNECTED , 26 mBTHF_CLIENT_CONNECTION_STATE_SLC_CONNECTED , 27 mBTHF_CLIENT_CONNECTION_STATE_DISCONNECTING 28 } tbthf_þ›Á_cÚÃùiÚ_¡©e_t ; 31 mBTHF_CLIENT_AUDIO_STATE_DISCONNECTED = 0, 32 mBTHF_CLIENT_AUDIO_STATE_CONNECTING , 33 mBTHF_CLIENT_AUDIO_STATE_CONNECTED , 34 mBTHF_CLIENT_AUDIO_STATE_CONNECTED_MSBC , 35 } tbthf_þ›Á_audio_¡©e_t ; 38 mBTHF_CLIENT_VR_STATE_STOPPED = 0, 39 mBTHF_CLIENT_VR_STATE_STARTED 40 } tbthf_þ›Á_vr_¡©e_t ; 43 mBTHF_CLIENT_VOLUME_TYPE_SPK = 0, 44 mBTHF_CLIENT_VOLUME_TYPE_MIC 45 } tbthf_þ›Á_vÞume_ty³_t ; 49 mBTHF_CLIENT_NETWORK_STATE_NOT_AVAILABLE = 0, 50 mBTHF_CLIENT_NETWORK_STATE_AVAILABLE 51 } tbthf_þ›Á_ÃtwÜk_¡©e_t ; 55 mBTHF_CLIENT_SERVICE_TYPE_HOME = 0, 56 mBTHF_CLIENT_SERVICE_TYPE_ROAMING 57 } tbthf_þ›Á_£rviû_ty³_t ; 60 mBTHF_CLIENT_CALL_STATE_ACTIVE = 0, 61 mBTHF_CLIENT_CALL_STATE_HELD , 62 mBTHF_CLIENT_CALL_STATE_DIALING , 63 mBTHF_CLIENT_CALL_STATE_ALERTING , 64 mBTHF_CLIENT_CALL_STATE_INCOMING , 65 mBTHF_CLIENT_CALL_STATE_WAITING , 66 mBTHF_CLIENT_CALL_STATE_HELD_BY_RESP_HOLD , 67 } tbthf_þ›Á_ÿÎ_¡©e_t ; 70 mBTHF_CLIENT_CALL_NO_CALLS_IN_PROGRESS = 0, 71 mBTHF_CLIENT_CALL_CALLS_IN_PROGRESS 72 } tbthf_þ›Á_ÿÎ_t ; 75 mBTHF_CLIENT_CALLSETUP_NONE = 0, 76 mBTHF_CLIENT_CALLSETUP_INCOMING , 77 mBTHF_CLIENT_CALLSETUP_OUTGOING , 78 mBTHF_CLIENT_CALLSETUP_ALERTING 80 } tbthf_þ›Á_ÿΣtup_t ; 83 mBTHF_CLIENT_CALLHELD_NONE = 0, 84 mBTHF_CLIENT_CALLHELD_HOLD_AND_ACTIVE , 85 mBTHF_CLIENT_CALLHELD_HOLD , 86 } tbthf_þ›Á_ÿÎh–d_t ; 89 mBTHF_CLIENT_RESP_AND_HOLD_HELD = 0, 90 mBTRH_CLIENT_RESP_AND_HOLD_ACCEPT , 91 mBTRH_CLIENT_RESP_AND_HOLD_REJECT , 92 } tbthf_þ›Á_»¥_ªd_hÞd_t ; 95 mBTHF_CLIENT_CALL_DIRECTION_OUTGOING = 0, 96 mBTHF_CLIENT_CALL_DIRECTION_INCOMING 97 } tbthf_þ›Á_ÿÎ_dœeùiÚ_t ; 100 mBTHF_CLIENT_CALL_MPTY_TYPE_SINGLE = 0, 101 mBTHF_CLIENT_CALL_MPTY_TYPE_MULTI 102 } tbthf_þ›Á_ÿÎ_m±y_ty³_t ; 105 mBTHF_CLIENT_CMD_COMPLETE_OK = 0, 106 mBTHF_CLIENT_CMD_COMPLETE_ERROR , 107 mBTHF_CLIENT_CMD_COMPLETE_ERROR_NO_CARRIER , 108 mBTHF_CLIENT_CMD_COMPLETE_ERROR_BUSY , 109 mBTHF_CLIENT_CMD_COMPLETE_ERROR_NO_ANSWER , 110 mBTHF_CLIENT_CMD_COMPLETE_ERROR_DELAYED , 111 mBTHF_CLIENT_CMD_COMPLETE_ERROR_BLACKLISTED , 112 mBTHF_CLIENT_CMD_COMPLETE_ERROR_CME 113 } tbthf_þ›Á_cmd_com¶‘e_t ; 116 mBTHF_CLIENT_CALL_ACTION_CHLD_0 = 0, 117 mBTHF_CLIENT_CALL_ACTION_CHLD_1 , 118 mBTHF_CLIENT_CALL_ACTION_CHLD_2 , 119 mBTHF_CLIENT_CALL_ACTION_CHLD_3 , 120 mBTHF_CLIENT_CALL_ACTION_CHLD_4 , 121 mBTHF_CLIENT_CALL_ACTION_CHLD_1x , 122 mBTHF_CLIENT_CALL_ACTION_CHLD_2x , 123 mBTHF_CLIENT_CALL_ACTION_ATA , 124 mBTHF_CLIENT_CALL_ACTION_CHUP , 125 mBTHF_CLIENT_CALL_ACTION_BTRH_0 , 126 mBTHF_CLIENT_CALL_ACTION_BTRH_1 , 127 mBTHF_CLIENT_CALL_ACTION_BTRH_2 , 128 } tbthf_þ›Á_ÿÎ_aùiÚ_t ; 131 mBTHF_CLIENT_SERVICE_UNKNOWN = 0, 132 mBTHF_CLIENT_SERVICE_VOICE , 133 mBTHF_CLIENT_SERVICE_FAX 134 } tbthf_þ›Á_subsüib”_£rviû_ty³_t ; 137 mBTHF_CLIENT_IN_BAND_RINGTONE_NOT_PROVIDED = 0, 138 mBTHF_CLIENT_IN_BAND_RINGTONE_PROVIDED , 139 } tbthf_þ›Á_š_bªd_ršg_¡©e_t ; 142  #BTHF_CLIENT_PEER_FEAT_3WAY 0x00000001 ) 143  #BTHF_CLIENT_PEER_FEAT_ECNR 0x00000002 ) 144  #BTHF_CLIENT_PEER_FEAT_VREC 0x00000004 ) 145  #BTHF_CLIENT_PEER_FEAT_INBAND 0x00000008 ) 146  #BTHF_CLIENT_PEER_FEAT_VTAG 0x00000010 ) 147  #BTHF_CLIENT_PEER_FEAT_REJECT 0x00000020 ) 148  #BTHF_CLIENT_PEER_FEAT_ECS 0x00000040 ) 149  #BTHF_CLIENT_PEER_FEAT_ECC 0x00000080 ) 150  #BTHF_CLIENT_PEER_FEAT_EXTERR 0x00000100 ) 151  #BTHF_CLIENT_PEER_FEAT_CODEC 0x00000200 ) 154  #BTHF_CLIENT_CHLD_FEAT_REL 0x00000001 ) 155  #BTHF_CLIENT_CHLD_FEAT_REL_ACC 0x00000002 ) 157  #BTHF_CLIENT_CHLD_FEAT_REL_X 0x00000004 ) 158  #BTHF_CLIENT_CHLD_FEAT_HOLD_ACC 0x00000008 ) 160  #BTHF_CLIENT_CHLD_FEAT_PRIV_X 0x00000010 ) 162  #BTHF_CLIENT_CHLD_FEAT_MERGE 0x00000020 ) 163  #BTHF_CLIENT_CHLD_FEAT_MERGE_DETACH 0x00000040 ) 170 (* tbthf_þ›Á_cÚÃùiÚ_¡©e_ÿÎback )( tbthf_þ›Á_cÚÃùiÚ_¡©e_t t¡©e , 171  t³”_ã© , 172  tchld_ã© , 173 tbt_bdaddr_t * tbd_addr ); 178 (* tbthf_þ›Á_audio_¡©e_ÿÎback )( tbthf_þ›Á_audio_¡©e_t t¡©e , 179 tbt_bdaddr_t * tbd_addr ); 184 (* tbthf_þ›Á_vr_cmd_ÿÎback )( tbthf_þ›Á_vr_¡©e_t t¡©e ); 188 (* tbthf_þ›Á_ÃtwÜk_¡©e_ÿÎback è( tbthf_þ›Á_ÃtwÜk_¡©e_t t¡©e ); 192 (* tbthf_þ›Á_ÃtwÜk_rßmšg_ÿÎback è( tbthf_þ›Á_£rviû_ty³_t tty³ ); 196 (* tbthf_þ›Á_ÃtwÜk_sigÇl_ÿÎback è( tsigÇl_¡»ngth ); 200 (* tbthf_þ›Á_b©‹ry_Ëv–_ÿÎback è( tb©‹ry_Ëv– ); 204 (* tbthf_þ›Á_cu¼’t_Ý”©Ü_ÿÎback è(cÚ¡ * tÇme ); 208 (* tbthf_þ›Á_ÿÎ_ÿÎback è( tbthf_þ›Á_ÿÎ_t tÿÎ ); 212 (* tbthf_þ›Á_ÿΣtup_ÿÎback è( tbthf_þ›Á_ÿΣtup_t tÿΣtup ); 216 (* tbthf_þ›Á_ÿÎh–d_ÿÎback è( tbthf_þ›Á_ÿÎh–d_t tÿÎh–d ); 220 (* tbthf_þ›Á_»¥_ªd_hÞd_ÿÎback è( tbthf_þ›Á_»¥_ªd_hÞd_t t»¥_ªd_hÞd ); 225 (* tbthf_þ›Á_þ_ÿÎback è(cÚ¡ * tnumb” ); 230 (* tbthf_þ›Á_ÿÎ_wa™šg_ÿÎback è(cÚ¡ * tnumb” ); 236 (* tbthf_þ›Á_cu¼’t_ÿÎs è( tšdex , tbthf_þ›Á_ÿÎ_dœeùiÚ_t tdœ , 237 tbthf_þ›Á_ÿÎ_¡©e_t t¡©e , 238 tbthf_þ›Á_ÿÎ_m±y_ty³_t tm±y , 239 cÚ¡ * tnumb” ); 243 (* tbthf_þ›Á_vÞume_chªge_ÿÎback è( tbthf_þ›Á_vÞume_ty³_t tty³ ,  tvÞume ); 248 (* tbthf_þ›Á_cmd_com¶‘e_ÿÎback è( tbthf_þ›Á_cmd_com¶‘e_t tty³ ,  tcme ); 252 (* tbthf_þ›Á_subsüib”_šfo_ÿÎback è(cÚ¡ * tÇme , 253 tbthf_þ›Á_subsüib”_£rviû_ty³_t tty³ ); 257 (* tbthf_þ›Á_š_bªd_ršg_tÚe_ÿÎback è( tbthf_þ›Á_š_bªd_ršg_¡©e_t t¡©e ); 262 (* tbthf_þ›Á_Ï¡_voiû_g_numb”_ÿÎback è(cÚ¡ * tnumb” ); 267 (* tbthf_þ›Á_ršg_šdiÿtiÚ_ÿÎback ) (); 272 size_t size ; 273 bthf_þ›Á_cÚÃùiÚ_¡©e_ÿÎback cÚÃùiÚ_¡©e_cb ; 274 bthf_þ›Á_audio_¡©e_ÿÎback audio_¡©e_cb ; 275 bthf_þ›Á_vr_cmd_ÿÎback vr_cmd_cb ; 276 bthf_þ›Á_ÃtwÜk_¡©e_ÿÎback ÃtwÜk_¡©e_cb ; 277 bthf_þ›Á_ÃtwÜk_rßmšg_ÿÎback ÃtwÜk_rßmšg_cb ; 278 bthf_þ›Á_ÃtwÜk_sigÇl_ÿÎback ÃtwÜk_sigÇl_cb ; 279 bthf_þ›Á_b©‹ry_Ëv–_ÿÎback b©‹ry_Ëv–_cb ; 280 bthf_þ›Á_cu¼’t_Ý”©Ü_ÿÎback cu¼’t_Ý”©Ü_cb ; 281 bthf_þ›Á_ÿÎ_ÿÎback ÿÎ_cb ; 282 bthf_þ›Á_ÿΣtup_ÿÎback ÿΣtup_cb ; 283 bthf_þ›Á_ÿÎh–d_ÿÎback ÿÎh–d_cb ; 284 bthf_þ›Á_»¥_ªd_hÞd_ÿÎback »¥_ªd_hÞd_cb ; 285 bthf_þ›Á_þ_ÿÎback þ_cb ; 286 bthf_þ›Á_ÿÎ_wa™šg_ÿÎback ÿÎ_wa™šg_cb ; 287 bthf_þ›Á_cu¼’t_ÿÎs cu¼’t_ÿÎs_cb ; 288 bthf_þ›Á_vÞume_chªge_ÿÎback vÞume_chªge_cb ; 289 bthf_þ›Á_cmd_com¶‘e_ÿÎback cmd_com¶‘e_cb ; 290 bthf_þ›Á_subsüib”_šfo_ÿÎback subsüib”_šfo_cb ; 291 bthf_þ›Á_š_bªd_ršg_tÚe_ÿÎback š_bªd_ršg_tÚe_cb ; 292 bthf_þ›Á_Ï¡_voiû_g_numb”_ÿÎback Ï¡_voiû_g_numb”_ÿÎback ; 293 bthf_þ›Á_ršg_šdiÿtiÚ_ÿÎback ršg_šdiÿtiÚ_cb ; 294 } tbthf_þ›Á_ÿÎbacks_t ; 300 size_t size ; 304 `bt_¡©us_t (* š™ )( bthf_þ›Á_ÿÎbacks_t * ÿÎbacks ); 307 `bt_¡©us_t (* cÚÃù )( bt_bdaddr_t * bd_addr ); 310 `bt_¡©us_t (* discÚÃù )( bt_bdaddr_t * bd_addr ); 313 `bt_¡©us_t (* cÚÃù_audio )( bt_bdaddr_t * bd_addr ); 316 `bt_¡©us_t (* discÚÃù_audio )( bt_bdaddr_t * bd_addr ); 319 `bt_¡©us_t (* ¡¬t_voiû_»cogn™iÚ )(); 322 `bt_¡©us_t (* ¡Ý_voiû_»cogn™iÚ )(); 325 `bt_¡©us_t (* vÞume_cÚŒÞ è( bthf_þ›Á_vÞume_ty³_t ty³ ,  vÞume ); 329 `bt_¡©us_t (* dŸl è(cÚ¡ * numb” ); 332 `bt_¡©us_t (* dŸl_memÜy è( loÿtiÚ ); 337 `bt_¡©us_t (* hªdË_ÿÎ_aùiÚ è( bthf_þ›Á_ÿÎ_aùiÚ_t aùiÚ ,  idx ); 340 `bt_¡©us_t (* qu”y_cu¼’t_ÿÎs ) (); 343 `bt_¡©us_t (* qu”y_cu¼’t_Ý”©Ü_Çme ) (); 346 `bt_¡©us_t (* »Œ›ve_subsüib”_šfo ) (); 349 `bt_¡©us_t (* £nd_dtmf è( code ); 352 `bt_¡©us_t (* »que¡_Ï¡_voiû_g_numb” ) (); 355 (* þ—nup )(); 358 `bt_¡©us_t (* £nd_©_cmd è( cmd ,  v®1 ,  v®2 , cÚ¡ * ¬g ); 359 } tbthf_þ›Á_š‹rçû_t ; 361 __END_DECLS @android/hardware/bt_hh.h 17 #iâdeà ANDROID_INCLUDE_BT_HH_H 18  #ANDROID_INCLUDE_BT_HH_H ) 20  ~<¡dšt.h > 22 g__BEGIN_DECLS 24  #BTHH_MAX_DSC_LEN 884 ) 29 mBTHH_CONN_STATE_CONNECTED = 0, 30 mBTHH_CONN_STATE_CONNECTING , 31 mBTHH_CONN_STATE_DISCONNECTED , 32 mBTHH_CONN_STATE_DISCONNECTING , 33 mBTHH_CONN_STATE_FAILED_MOUSE_FROM_HOST , 34 mBTHH_CONN_STATE_FAILED_KBD_FROM_HOST , 35 mBTHH_CONN_STATE_FAILED_TOO_MANY_DEVICES , 36 mBTHH_CONN_STATE_FAILED_NO_BTHID_DRIVER , 37 mBTHH_CONN_STATE_FAILED_GENERIC , 38 mBTHH_CONN_STATE_UNKNOWN 39 } tbthh_cÚÃùiÚ_¡©e_t ; 43 mBTHH_OK = 0, 44 mBTHH_HS_HID_NOT_READY , 45 mBTHH_HS_INVALID_RPT_ID , 46 mBTHH_HS_TRANS_NOT_SPT , 47 mBTHH_HS_INVALID_PARAM , 48 mBTHH_HS_ERROR , 49 mBTHH_ERR , 50 mBTHH_ERR_SDP , 51 mBTHH_ERR_PROTO , 53 mBTHH_ERR_DB_FULL , 54 mBTHH_ERR_TOD_UNSPT , 55 mBTHH_ERR_NO_RES , 56 mBTHH_ERR_AUTH_FAILED , 57 mBTHH_ERR_HDL 58 } tbthh_¡©us_t ; 62 mBTHH_REPORT_MODE = 0x00, 63 mBTHH_BOOT_MODE = 0x01, 64 mBTHH_UNSUPPORTED_MODE = 0xff 65 } tbthh_´ÙocÞ_mode_t ; 69 mBTHH_INPUT_REPORT = 1, 70 mBTHH_OUTPUT_REPORT , 71 mBTHH_FEATURE_REPORT 72 } tbthh_»pÜt_ty³_t ; 76  m©Œ_mask ; 77 ušt8_t msub_þass ; 78 ušt8_t m­p_id ; 79  mv’dÜ_id ; 80  m´oduù_id ; 81  mv”siÚ ; 82 ušt8_t mùry_code ; 83  mdl_Ën ; 84 ušt8_t mdsc_li¡ [ BTHH_MAX_DSC_LEN ]; 85 } tbthh_hid_šfo_t ; 90 (* tbthh_cÚÃùiÚ_¡©e_ÿÎback )( tbt_bdaddr_t * tbd_addr , tbthh_cÚÃùiÚ_¡©e_t t¡©e ); 95 (* tbthh_vœtu®_uÅlug_ÿÎback )( tbt_bdaddr_t * tbd_addr , tbthh_¡©us_t thh_¡©us ); 100 (* tbthh_hid_šfo_ÿÎback )( tbt_bdaddr_t * tbd_addr , tbthh_hid_šfo_t thid_šfo ); 105 (* tbthh_´ÙocÞ_mode_ÿÎback )( tbt_bdaddr_t * tbd_addr , tbthh_¡©us_t thh_¡©us , tbthh_´ÙocÞ_mode_t tmode ); 109 (* tbthh_idË_time_ÿÎback )( tbt_bdaddr_t * tbd_addr , tbthh_¡©us_t thh_¡©us ,  tidË_¿‹ ); 115 (* tbthh_g‘_»pÜt_ÿÎback )( tbt_bdaddr_t * tbd_addr , tbthh_¡©us_t thh_¡©us , tušt8_t * t½t_d©a ,  t½t_size ); 120 (* tbthh_hªdshake_ÿÎback )( tbt_bdaddr_t * tbd_addr , tbthh_¡©us_t thh_¡©us ); 126 size_t size ; 127 bthh_cÚÃùiÚ_¡©e_ÿÎback cÚÃùiÚ_¡©e_cb ; 128 bthh_hid_šfo_ÿÎback hid_šfo_cb ; 129 bthh_´ÙocÞ_mode_ÿÎback ´ÙocÞ_mode_cb ; 130 bthh_idË_time_ÿÎback idË_time_cb ; 131 bthh_g‘_»pÜt_ÿÎback g‘_»pÜt_cb ; 132 bthh_vœtu®_uÅlug_ÿÎback vœtu®_uÅlug_cb ; 133 bthh_hªdshake_ÿÎback hªdshake_cb ; 135 } tbthh_ÿÎbacks_t ; 143 size_t size ; 148 `bt_¡©us_t (* š™ )Ð bthh_ÿÎbacks_t * ÿÎbacks ); 151 `bt_¡©us_t (* cÚÃù )Ð bt_bdaddr_t * bd_addr ); 154 `bt_¡©us_t (* discÚÃù )Ð bt_bdaddr_t * bd_addr ); 157 `bt_¡©us_t (* vœtu®_uÅlug )( bt_bdaddr_t * bd_addr ); 160 `bt_¡©us_t (* £t_šfo )( bt_bdaddr_t * bd_addr , bthh_hid_šfo_t hid_šfo ); 163 `bt_¡©us_t (* g‘_´ÙocÞ è( bt_bdaddr_t * bd_addr , bthh_´ÙocÞ_mode_t ´ÙocÞMode ); 166 `bt_¡©us_t (* £t_´ÙocÞ )( bt_bdaddr_t * bd_addr , bthh_´ÙocÞ_mode_t ´ÙocÞMode ); 169 `bt_¡©us_t (* g‘_»pÜt )( bt_bdaddr_t * bd_addr , bthh_»pÜt_ty³_t »pÜtTy³ , ušt8_t »pÜtId ,  bufãrSize ); 172 `bt_¡©us_t (* £t_»pÜt )( bt_bdaddr_t * bd_addr , bthh_»pÜt_ty³_t »pÜtTy³ , * »pÜt ); 175 `bt_¡©us_t (* £nd_d©a )( bt_bdaddr_t * bd_addr , * d©a ); 178 (* þ—nup )( ); 180 } tbthh_š‹rçû_t ; 181 __END_DECLS @android/hardware/bt_hl.h 17 #iâdeà ANDROID_INCLUDE_BT_HL_H 18  #ANDROID_INCLUDE_BT_HL_H ) 20 __BEGIN_DECLS 26 mBTHL_MDEP_ROLE_SOURCE , 27 mBTHL_MDEP_ROLE_SINK 28 } tbthl_md•_rÞe_t ; 31 mBTHL_APP_REG_STATE_REG_SUCCESS , 32 mBTHL_APP_REG_STATE_REG_FAILED , 33 mBTHL_APP_REG_STATE_DEREG_SUCCESS , 34 mBTHL_APP_REG_STATE_DEREG_FAILED 35 } tbthl_­p_»g_¡©e_t ; 39 mBTHL_CHANNEL_TYPE_RELIABLE , 40 mBTHL_CHANNEL_TYPE_STREAMING , 41 mBTHL_CHANNEL_TYPE_ANY 42 } tbthl_chªÃl_ty³_t ; 47 mBTHL_CONN_STATE_CONNECTING , 48 mBTHL_CONN_STATE_CONNECTED , 49 mBTHL_CONN_STATE_DISCONNECTING , 50 mBTHL_CONN_STATE_DISCONNECTED , 51 mBTHL_CONN_STATE_DESTROYED 52 } tbthl_chªÃl_¡©e_t ; 56 bthl_md•_rÞe_t mmd•_rÞe ; 57  md©a_ty³ ; 58 bthl_chªÃl_ty³_t mchªÃl_ty³ ; 59 cÚ¡ * mmd•_desütiÚ ; 60 } tbthl_md•_cfg_t ; 64 cÚ¡ * m­¶iÿtiÚ_Çme ; 65 cÚ¡ * m´ovid”_Çme ; 66 cÚ¡ * m¤v_Çme ; 67 cÚ¡ * m¤v_de¥ ; 68  mnumb”_of_md•s ; 69 bthl_md•_cfg_t * mmd•_cfg ; 70 } tbthl_»g_·¿m_t ; 75 (* tbthl_­p_»g_¡©e_ÿÎback )( t­p_id , tbthl_­p_»g_¡©e_t t¡©e ); 81 (* tbthl_chªÃl_¡©e_ÿÎback )( t­p_id , tbt_bdaddr_t * tbd_addr ,  tmd•_cfg_šdex ,  tchªÃl_id , tbthl_chªÃl_¡©e_t t¡©e ,  tfd ); 86 size_t size ; 87 bthl_­p_»g_¡©e_ÿÎback ­p_»g_¡©e_cb ; 88 bthl_chªÃl_¡©e_ÿÎback chªÃl_¡©e_cb ; 89 } tbthl_ÿÎbacks_t ; 96 size_t size ; 101 `bt_¡©us_t (* š™ )Ð bthl_ÿÎbacks_t * ÿÎbacks ); 104 `bt_¡©us_t (* »gi¡”_­¶iÿtiÚ èÐ bthl_»g_·¿m_t * p_»g_·¿m , * ­p_id ); 107 `bt_¡©us_t (* uÄegi¡”_­¶iÿtiÚ è( ­p_id ); 110 `bt_¡©us_t (* cÚÃù_chªÃl )( ­p_id , bt_bdaddr_t * bd_addr ,  md•_cfg_šdex , * chªÃl_id ); 113 `bt_¡©us_t (* de¡roy_chªÃl )( chªÃl_id ); 116 (* þ—nup )(); 118 } tbthl_š‹rçû_t ; 119 __END_DECLS @android/hardware/bt_mce.h 17 #iâdeà ANDROID_INCLUDE_BT_MCE_H 18  #ANDROID_INCLUDE_BT_MCE_H ) 20 __BEGIN_DECLS 25  mid ; 26  msú ; 27  mmsg_ty³s ; 28 * mp_Çme ; 29 } tbtmû_mas_š¡ªû_t ; 32 (* tbtmû_»mÙe_mas_š¡ªûs_ÿÎback )( tbt_¡©us_t t¡©us , tbt_bdaddr_t * tbd_addr , 33  tnum_š¡ªûs , tbtmû_mas_š¡ªû_t * tš¡ªûs ); 37 size_t size ; 38 btmû_»mÙe_mas_š¡ªûs_ÿÎback »mÙe_mas_š¡ªûs_cb ; 39 } tbtmû_ÿÎbacks_t ; 43 size_t size ; 46 `bt_¡©us_t (* š™ )( btmû_ÿÎbacks_t * ÿÎbacks ); 49 `bt_¡©us_t (* g‘_»mÙe_mas_š¡ªûs )( bt_bdaddr_t * bd_addr ); 50 } tbtmû_š‹rçû_t ; 52 __END_DECLS @android/hardware/bt_pan.h 17 #iâdeà ANDROID_INCLUDE_BT_PAN_H 18  #ANDROID_INCLUDE_BT_PAN_H ) 20 g__BEGIN_DECLS 22  #BTPAN_ROLE_NONE 0 ) 23  #BTPAN_ROLE_PANNAP 1 ) 24  #BTPAN_ROLE_PANU 2 ) 27 mBTPAN_STATE_CONNECTED = 0, 28 mBTPAN_STATE_CONNECTING = 1, 29 mBTPAN_STATE_DISCONNECTED = 2, 30 mBTPAN_STATE_DISCONNECTING = 3 31 } tbª_cÚÃùiÚ_¡©e_t ; 34 mBTPAN_STATE_ENABLED = 0, 35 mBTPAN_STATE_DISABLED = 1 36 } tbª_cÚŒÞ_¡©e_t ; 41 (* tbª_cÚÃùiÚ_¡©e_ÿÎback )( tbª_cÚÃùiÚ_¡©e_t t¡©e , tbt_¡©us_t t”rÜ , 42 cÚ¡ tbt_bdaddr_t * tbd_addr ,  tloÿl_rÞe ,  t»mÙe_rÞe ); 43 (* tbª_cÚŒÞ_¡©e_ÿÎback )( tbª_cÚŒÞ_¡©e_t t¡©e ,  tloÿl_rÞe , 44 tbt_¡©us_t t”rÜ , cÚ¡ * tiâame ); 47 size_t size ; 48 bª_cÚŒÞ_¡©e_ÿÎback cÚŒÞ_¡©e_cb ; 49 bª_cÚÃùiÚ_¡©e_ÿÎback cÚÃùiÚ_¡©e_cb ; 50 } tbª_ÿÎbacks_t ; 53 size_t size ; 57 `bt_¡©us_t (* š™ )(cÚ¡ bª_ÿÎbacks_t * ÿÎbacks ); 63 `bt_¡©us_t (* ’abË )( loÿl_rÞe ); 67 (* g‘_loÿl_rÞe )(); 72 `bt_¡©us_t (* cÚÃù )(cÚ¡ bt_bdaddr_t * bd_addr ,  loÿl_rÞe ,  »mÙe_rÞe ); 76 `bt_¡©us_t (* discÚÃù )(cÚ¡ bt_bdaddr_t * bd_addr ); 81 (* þ—nup )(); 83 } tbª_š‹rçû_t ; 85 __END_DECLS @android/hardware/bt_rc.h 17 #iâdeà ANDROID_INCLUDE_BT_RC_H 18  #ANDROID_INCLUDE_BT_RC_H ) 20 g__BEGIN_DECLS 23  #BTRC_MAX_ATTR_STR_LEN 255 ) 24  #BTRC_UID_SIZE 8 ) 25  #BTRC_MAX_APP_SETTINGS 8 ) 26  #BTRC_MAX_FOLDER_DEPTH 4 ) 27  #BTRC_MAX_APP_ATTR_SIZE 16 ) 28  #BTRC_MAX_ELEM_ATTR_SIZE 7 ) 30  ušt8_t tbŒc_uid_t [ BTRC_UID_SIZE ]; 33 mBTRC_FEAT_NONE = 0x00, 34 mBTRC_FEAT_METADATA = 0x01, 35 mBTRC_FEAT_ABSOLUTE_VOLUME = 0x02, 36 mBTRC_FEAT_BROWSE = 0x04, 37 } tbŒc_»mÙe_ã©u»s_t ; 40 mBTRC_PLAYSTATE_STOPPED = 0x00, 41 mBTRC_PLAYSTATE_PLAYING = 0x01, 42 mBTRC_PLAYSTATE_PAUSED = 0x02, 43 mBTRC_PLAYSTATE_FWD_SEEK = 0x03, 44 mBTRC_PLAYSTATE_REV_SEEK = 0x04, 45 mBTRC_PLAYSTATE_ERROR = 0xFF, 46 } tbŒc_¶ay_¡©us_t ; 49 mBTRC_EVT_PLAY_STATUS_CHANGED = 0x01, 50 mBTRC_EVT_TRACK_CHANGE = 0x02, 51 mBTRC_EVT_TRACK_REACHED_END = 0x03, 52 mBTRC_EVT_TRACK_REACHED_START = 0x04, 53 mBTRC_EVT_PLAY_POS_CHANGED = 0x05, 54 mBTRC_EVT_APP_SETTINGS_CHANGED = 0x08, 55 } tbŒc_ev’t_id_t ; 58 mBTRC_NOTIFICATION_TYPE_INTERIM = 0, 59 mBTRC_NOTIFICATION_TYPE_CHANGED = 1, 60 } tbŒc_nÙifiÿtiÚ_ty³_t ; 63 mBTRC_PLAYER_ATTR_EQUALIZER = 0x01, 64 mBTRC_PLAYER_ATTR_REPEAT = 0x02, 65 mBTRC_PLAYER_ATTR_SHUFFLE = 0x03, 66 mBTRC_PLAYER_ATTR_SCAN = 0x04, 67 } tbŒc_¶ay”_©Œ_t ; 70 mBTRC_MEDIA_ATTR_TITLE = 0x01, 71 mBTRC_MEDIA_ATTR_ARTIST = 0x02, 72 mBTRC_MEDIA_ATTR_ALBUM = 0x03, 73 mBTRC_MEDIA_ATTR_TRACK_NUM = 0x04, 74 mBTRC_MEDIA_ATTR_NUM_TRACKS = 0x05, 75 mBTRC_MEDIA_ATTR_GENRE = 0x06, 76 mBTRC_MEDIA_ATTR_PLAYING_TIME = 0x07, 77 } tbŒc_medŸ_©Œ_t ; 80 mBTRC_PLAYER_VAL_OFF_REPEAT = 0x01, 81 mBTRC_PLAYER_VAL_SINGLE_REPEAT = 0x02, 82 mBTRC_PLAYER_VAL_ALL_REPEAT = 0x03, 83 mBTRC_PLAYER_VAL_GROUP_REPEAT = 0x04 84 } tbŒc_¶ay”_»³©_v®_t ; 87 mBTRC_PLAYER_VAL_OFF_SHUFFLE = 0x01, 88 mBTRC_PLAYER_VAL_ALL_SHUFFLE = 0x02, 89 mBTRC_PLAYER_VAL_GROUP_SHUFFLE = 0x03 90 } tbŒc_¶ay”_shufæe_v®_t ; 93 mBTRC_STS_BAD_CMD = 0x00, 94 mBTRC_STS_BAD_PARAM = 0x01, 95 mBTRC_STS_NOT_FOUND = 0x02, 96 mBTRC_STS_INTERNAL_ERR = 0x03, 97 mBTRC_STS_NO_ERROR = 0x04 98 } tbŒc_¡©us_t ; 101 ušt8_t mnum_©Œ ; 102 ušt8_t m©Œ_ids [ BTRC_MAX_APP_SETTINGS ]; 103 ušt8_t m©Œ_v®ues [ BTRC_MAX_APP_SETTINGS ]; 104 } tbŒc_¶ay”_£‰šgs_t ; 108 bŒc_¶ay_¡©us_t m¶ay_¡©us ; 109 bŒc_uid_t mŒack ; 110 ušt32_t msÚg_pos ; 111 bŒc_¶ay”_£‰šgs_t m¶ay”_£‰šg ; 112 } tbŒc_»gi¡”_nÙifiÿtiÚ_t ; 115 ušt8_t mid ; 116 ušt8_t m‹xt [ BTRC_MAX_ATTR_STR_LEN ]; 117 } tbŒc_¶ay”_£‰šg_‹xt_t ; 120 ušt32_t m©Œ_id ; 121 ušt8_t m‹xt [ BTRC_MAX_ATTR_STR_LEN ]; 122 } tbŒc_–em’t_©Œ_v®_t ; 125 (* tbŒc_»mÙe_ã©u»s_ÿÎback )( tbt_bdaddr_t * tbd_addr , 126 tbŒc_»mÙe_ã©u»s_t tã©u»s ); 129 (* tbŒc_g‘_¶ay_¡©us_ÿÎback )(); 132 (* tbŒc_li¡_¶ay”_­p_©Œ_ÿÎback )(); 135 (* tbŒc_li¡_¶ay”_­p_v®ues_ÿÎback )( tbŒc_¶ay”_©Œ_t t©Œ_id ); 140 (* tbŒc_g‘_¶ay”_­p_v®ue_ÿÎback è( tušt8_t tnum_©Œ , tbŒc_¶ay”_©Œ_t * tp_©Œs ); 145 (* tbŒc_g‘_¶ay”_­p_©Œs_‹xt_ÿÎback è( tušt8_t tnum_©Œ , tbŒc_¶ay”_©Œ_t * tp_©Œs ); 150 (* tbŒc_g‘_¶ay”_­p_v®ues_‹xt_ÿÎback è( tušt8_t t©Œ_id , ušt8_ˆ tnum_v® , ušt8_ˆ* tp_v®s ); 153 (* tbŒc_£t_¶ay”_­p_v®ue_ÿÎback è( tbŒc_¶ay”_£‰šgs_t * tp_v®s ); 158 (* tbŒc_g‘_–em’t_©Œ_ÿÎback è( tušt8_t tnum_©Œ , tbŒc_medŸ_©Œ_t * tp_©Œs ); 163 (* tbŒc_»gi¡”_nÙifiÿtiÚ_ÿÎback è( tbŒc_ev’t_id_t tev’t_id , tušt32_t t·¿m ); 169 (* tbŒc_vÞume_chªge_ÿÎback è( tušt8_t tvÞume , ušt8_ˆ tùy³ ); 172 (* tbŒc_·s¡hrough_cmd_ÿÎback è( tid ,  tkey_¡©e ); 177 size_t size ; 178 bŒc_»mÙe_ã©u»s_ÿÎback »mÙe_ã©u»s_cb ; 179 bŒc_g‘_¶ay_¡©us_ÿÎback g‘_¶ay_¡©us_cb ; 180 bŒc_li¡_¶ay”_­p_©Œ_ÿÎback li¡_¶ay”_­p_©Œ_cb ; 181 bŒc_li¡_¶ay”_­p_v®ues_ÿÎback li¡_¶ay”_­p_v®ues_cb ; 182 bŒc_g‘_¶ay”_­p_v®ue_ÿÎback g‘_¶ay”_­p_v®ue_cb ; 183 bŒc_g‘_¶ay”_­p_©Œs_‹xt_ÿÎback g‘_¶ay”_­p_©Œs_‹xt_cb ; 184 bŒc_g‘_¶ay”_­p_v®ues_‹xt_ÿÎback g‘_¶ay”_­p_v®ues_‹xt_cb ; 185 bŒc_£t_¶ay”_­p_v®ue_ÿÎback £t_¶ay”_­p_v®ue_cb ; 186 bŒc_g‘_–em’t_©Œ_ÿÎback g‘_–em’t_©Œ_cb ; 187 bŒc_»gi¡”_nÙifiÿtiÚ_ÿÎback »gi¡”_nÙifiÿtiÚ_cb ; 188 bŒc_vÞume_chªge_ÿÎback vÞume_chªge_cb ; 189 bŒc_·s¡hrough_cmd_ÿÎback ·s¡hrough_cmd_cb ; 190 } tbŒc_ÿÎbacks_t ; 196 size_t size ; 200 `bt_¡©us_t (* š™ )Ð bŒc_ÿÎbacks_t * ÿÎbacks ); 207 `bt_¡©us_t (* g‘_¶ay_¡©us_r¥ )Ð bŒc_¶ay_¡©us_t ¶ay_¡©us , ušt32_t sÚg_Ën , ušt32_ˆ sÚg_pos ); 212 `bt_¡©us_t (* li¡_¶ay”_­p_©Œ_r¥ )Ð num_©Œ , bŒc_¶ay”_©Œ_t * p_©Œs ); 217 `bt_¡©us_t (* li¡_¶ay”_­p_v®ue_r¥ )Ð num_v® , ušt8_t * p_v®s ); 220 `bt_¡©us_t (* g‘_¶ay”_­p_v®ue_r¥ )Ð bŒc_¶ay”_£‰šgs_t * p_v®s ); 225 `bt_¡©us_t (* g‘_¶ay”_­p_©Œ_‹xt_r¥ )Ð num_©Œ , bŒc_¶ay”_£‰šg_‹xt_t * p_©Œs ); 230 `bt_¡©us_t (* g‘_¶ay”_­p_v®ue_‹xt_r¥ )Ð num_v® , bŒc_¶ay”_£‰šg_‹xt_t * p_v®s ); 235 `bt_¡©us_t (* g‘_–em’t_©Œ_r¥ )Ð ušt8_t num_©Œ , bŒc_–em’t_©Œ_v®_t * p_©Œs ); 240 `bt_¡©us_t (* £t_¶ay”_­p_v®ue_r¥ )( bŒc_¡©us_t r¥_¡©us ); 247 `bt_¡©us_t (* »gi¡”_nÙifiÿtiÚ_r¥ )( bŒc_ev’t_id_t ev’t_id , 248 bŒc_nÙifiÿtiÚ_ty³_t ty³ , 249 bŒc_»gi¡”_nÙifiÿtiÚ_t * p_·¿m ); 258 `bt_¡©us_t (* £t_vÞume )( ušt8_t vÞume ); 261 (* þ—nup )( ); 262 } tbŒc_š‹rçû_t ; 265 (* tbŒc_·s¡hrough_r¥_ÿÎback è( tid ,  tkey_¡©e ); 267 (* tbŒc_cÚÃùiÚ_¡©e_ÿÎback è( tboÞ t¡©e , tbt_bdaddr_t * tbd_addr ); 272 size_t size ; 273 bŒc_·s¡hrough_r¥_ÿÎback ·s¡hrough_r¥_cb ; 274 bŒc_cÚÃùiÚ_¡©e_ÿÎback cÚÃùiÚ_¡©e_cb ; 275 } tbŒc_ù¾_ÿÎbacks_t ; 281 size_t size ; 285 `bt_¡©us_t (* š™ )Ð bŒc_ù¾_ÿÎbacks_t * ÿÎbacks ); 288 `bt_¡©us_t (* £nd_·ss_through_cmd èÐ bt_bdaddr_t * bd_addr , ušt8_t key_code , ušt8_ˆ key_¡©e ); 291 (* þ—nup )( ); 292 } tbŒc_ù¾_š‹rçû_t ; 294 __END_DECLS @android/hardware/bt_sock.h 17 #iâdeà ANDROID_INCLUDE_BT_SOCK_H 18  #ANDROID_INCLUDE_BT_SOCK_H ) 20 g__BEGIN_DECLS 22  #BTSOCK_FLAG_ENCRYPT 1 ) 23  #BTSOCK_FLAG_AUTH (1 << 1) ) 26 mBTSOCK_RFCOMM = 1, 27 mBTSOCK_SCO = 2, 28 mBTSOCK_L2CAP = 3 29 } tbtsock_ty³_t ; 33  msize ; 34 bt_bdaddr_t mbd_addr ; 35  mchªÃl ; 36  m¡©us ; 37 } t__©Œibu‹__ (( t·cked )è tsock_cÚÃù_sigÇl_t ; 42 size_t msize ; 47 bt_¡©us_t (* li¡’ )( btsock_ty³_t mty³ , cÚ¡ * m£rviû_Çme , cÚ¡ ušt8_t * m£rviû_uuid ,  mchªÃl , * msock_fd ,  mæags ); 52 bt_¡©us_t (* cÚÃù )(cÚ¡ bt_bdaddr_t * mbd_addr , btsock_ty³_t mty³ , cÚ¡ ušt8_t * muuid ,  mchªÃl , * msock_fd ,  mæags ); 54 } tbtsock_š‹rçû_t ; 56 g__END_DECLS @android/hardware/hardware.c 17  ~ 19  ~ 20  ~<¡ršg.h > 21  ~<±h»ad.h > 22  ~<”ºo.h > 23  ~ 24  ~<¡dio.h > 26  #LOG_TAG "HAL" ) 28  #LOG_INFO " I" ) 29  #LOG_WARN " W" ) 30  #LOG_ERROR " E" ) 31  #LOG_DEBUG " D" ) 32  #ALOG ( ´i , g , fmt , ¬g ...è `årštf ( ¡d”r ,ag…ri": " fmt"\n", ##¬g) ) 34  #šfo ( fmt , ¬g ...è `ALOG ( LOG_INFO , LOG_TAG , fmt, ##¬g) ) 35  #w¬n ( fmt , ¬g ...è `ALOG ( LOG_WARN , LOG_TAG , fmt, ##¬g) ) 36  #”rÜ ( fmt , ¬g ...è `ALOG ( LOG_ERROR , LOG_TAG , fmt, ##¬g) ) 43  $lßd (cÚ¡ * id , 44 cÚ¡ * ·th , 45 cÚ¡  hw_moduË_t ** pHmi ) 47  ¡©us ; 48 * hªdË ; 49  hw_moduË_t * hmi ; 50 cÚ¡ * sym = HAL_MODULE_INFO_SYM_AS_STR ; 57 hªdË = `dlÝ’ ( ·th , RTLD_NOW ); 58 ià( hªdË =ð NULL ) { 59 cÚ¡ * ”r_¡r = `dË¼Ü (); 60 `”rÜ ("lßd: moduË=%s\n%s", ·th , ”r_¡r ?err_str:"unknown"); 61 ¡©us = - EINVAL ; 62  dÚe ; 66 hmi = ( hw_moduË_t *) `dlsym ( hªdË , sym ); 67 ià( hmi =ð NULL ) { 68 `”rÜ ("lßd: couldn'ˆfšd symbÞ %s", sym ); 69 ¡©us = - EINVAL ; 70  dÚe ; 74 ià( `¡rcmp ( id , hmi ->id) != 0) { 75 `”rÜ ("lßd: id=% !ðhmi->id=%s", id , hmi ->id); 76 ¡©us = - EINVAL ; 77  dÚe ; 80 hmi -> dso = hªdË ; 82 * pHmi = hmi ; 84 `šfo ("loaded HAL id=%s…ath=%s hmi=%p handle=%p", 85 id , ·th , * pHmi , hªdË ); 89 dÚe : 90 hmi = NULL ; 91 ià( hªdË !ð NULL ) { 92 `dlþo£ ( hªdË ); 93 hªdË = NULL ; 96  ¡©us ; 97 } } 99  $hw_g‘_moduË_by_þass (cÚ¡ * þass_id , cÚ¡ * š¡ , 100 cÚ¡  hw_moduË_t ** moduË ) 102  ·th [ PATH_MAX ]; 103  Çme [ PATH_MAX ]; 105 ià( š¡ ) 106 `¢´štf ( Çme , PATH_MAX , "%s.%s", þass_id , š¡ ); 108 `¢´štf ( Çme , PATH_MAX , "%s", þass_id ); 116 `¢´štf ( ·th , Õ©h), "%s/%s.deçuÉ.so", PLUGINDIR , Çme ); 118  `lßd ( þass_id , ·th , moduË ); 119 } } 121  $hw_g‘_moduË (cÚ¡ * id , cÚ¡  hw_moduË_t ** moduË ) 123  `hw_g‘_moduË_by_þass ( id , NULL , moduË ); 124 } } @android/hardware/hardware.h 17 #iâdeà ANDROID_INCLUDE_HARDWARE_HARDWARE_H 18  #ANDROID_INCLUDE_HARDWARE_HARDWARE_H ) 20  ~<¡dšt.h > 21  ~ 23 g__BEGIN_DECLS 29  #MAKE_TAG_CONSTANT ( A , B , C , D è(((Aè<< 24è| ((Bè<< 16è| ((Cè<< 8è| (D)) ) 31  #HARDWARE_MODULE_TAG `MAKE_TAG_CONSTANT ('H', 'W', 'M', 'T') ) 32  #HARDWARE_DEVICE_TAG `MAKE_TAG_CONSTANT ('H', 'W', 'D', 'T') ) 34  #HARDWARE_MAKE_API_VERSION ( maj , mš ) \ 35 (((( maj è& 0xffè<< 8è| (( mš è& 0xff)) ) 37  #HARDWARE_MAKE_API_VERSION_2 ( maj , mš , hdr ) \ 38 (((( maj è& 0xffè<< 24è| ((( mš è& 0xffè<< 16è| (( hdr è& 0xffff)) ) 39  #HARDWARE_API_VERSION_2_MAJ_MIN_MASK 0xffff0000 ) 40  #HARDWARE_API_VERSION_2_HEADER_MASK 0x0000ffff ) 54  #HARDWARE_HAL_API_VERSION `HARDWARE_MAKE_API_VERSION (1, 0) ) 65  #HARDWARE_MODULE_API_VERSION ( maj , mš è `HARDWARE_MAKE_API_VERSION (maj,mš) ) 66  #HARDWARE_MODULE_API_VERSION_2 ( maj , mš , hdr è `HARDWARE_MAKE_API_VERSION_2 (maj,mš,hdr) ) 71  #HARDWARE_DEVICE_API_VERSION ( maj , mš è `HARDWARE_MAKE_API_VERSION (maj,mš) ) 72  #HARDWARE_DEVICE_API_VERSION_2 ( maj , mš , hdr è `HARDWARE_MAKE_API_VERSION_2 (maj,mš,hdr) ) 74  ghw_moduË_t ; 75  ghw_moduË_m‘hods_t ; 76  ghw_deviû_t ; 83  shw_moduË_t { 85 ušt32_t mg ; 108 ušt16_t mmoduË_­i_v”siÚ ; 109  #v”siÚ_majÜ moduË_­i_v”siÚ ) 126 ušt16_t mh®_­i_v”siÚ ; 127  #v”siÚ_mšÜ h®_­i_v”siÚ ) 130 cÚ¡ * mid ; 133 cÚ¡ * mÇme ; 136 cÚ¡ * mauthÜ ; 139  hw_moduË_m‘hods_t * mm‘hods ; 142 * mdso ; 145 ušt32_t m»£rved [32-7]; 147 } thw_moduË_t ; 149  shw_moduË_m‘hods_t { 151 (* mÝ’ )(cÚ¡  hw_moduË_t * mmoduË , cÚ¡ * mid , 152  hw_deviû_t ** mdeviû ); 154 } thw_moduË_m‘hods_t ; 160  shw_deviû_t { 162 ušt32_t mg ; 180 ušt32_t mv”siÚ ; 183  hw_moduË_t * mmoduË ; 186 ušt32_t m»£rved [12]; 189 (* mþo£ )( hw_deviû_t * mdeviû ); 191 } thw_deviû_t ; 196  #HAL_MODULE_INFO_SYM HMI ) 201  #HAL_MODULE_INFO_SYM_AS_STR "HMI" ) 208  hw_g‘_moduË (cÚ¡ * id , cÚ¡  hw_moduË_t ** moduË ); 222  hw_g‘_moduË_by_þass (cÚ¡ * þass_id , cÚ¡ * š¡ , 223 cÚ¡  hw_moduË_t ** moduË ); 225 g__END_DECLS @android/health.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dšt.h > 30  ~<¡dboÞ.h > 31  ~<”ºo.h > 32  ~ 33  ~ 35  ~"btio/btio.h " 36  ~"lib/blu‘oÙh.h " 37  ~"lib/sdp.h " 38  ~"lib/sdp_lib.h " 39  ~"lib/uuid.h " 40  ~"lib/l2ÿp.h " 41  ~"¤c/log.h " 42  ~"¤c/sh¬ed/utž.h " 43  ~"¤c/sh¬ed/queue.h " 44  ~"¤c/uuid-h–³r.h " 45  ~"¤c/sdp-þ›Á.h " 46  ~"´ofžes/h—Éh/mÿp.h " 48  ~"h®-msg.h " 49  ~"c-commÚ.h " 50  ~"c.h " 51  ~"utžs.h " 52  ~"blu‘oÙh.h " 53  ~"h—Éh.h " 55  #SVC_HINT_HEALTH 0x00 ) 56  #HDP_VERSION 0x0101 ) 57  #DATA_EXCHANGE_SPEC_11073 0x01 ) 59  #CHANNEL_TYPE_ANY 0x00 ) 60  #CHANNEL_TYPE_RELIABLE 0x01 ) 61  #CHANNEL_TYPE_STREAM 0x02 ) 63  #MDEP_ECHO 0x00 ) 64  #MDEP_INITIAL 0x01 ) 65  #MDEP_FINAL 0x7F ) 67  bdaddr_t gad­‹r_addr ; 68  c * gh®_c = NULL ; 69  queue * g­ps = NULL ; 70  mÿp_š¡ªû * gmÿp = NULL ; 71  ušt32_t g»cÜd_id = 0; 72  ušt32_t g»cÜd_¡©e = 0; 74  smd•_cfg { 75 ušt8_t mrÞe ; 76 ušt16_t md©a_ty³ ; 77 ušt8_t mchªÃl_ty³ ; 78 * mdesü ; 80 ušt8_t mid ; 83  sh—Éh_deviû { 84 bdaddr_t md¡ ; 85 ušt16_t m­p_id ; 87  mÿp_mþ * mmþ ; 89  queue * mchªÃls ; 91 ušt16_t mcýsm ; 92 ušt16_t mdýsm ; 95  sh—Éh_chªÃl { 96 ušt8_t mmd•_id ; 97 ušt8_t mty³ ; 99  h—Éh_deviû * mdev ; 101 ušt8_t m»mÙe_md• ; 102  mÿp_mdl * mmdl ; 103 boÞ mmdl_cÚn ; 104 ušt16_t mmdl_id ; 106 ušt16_t mid ; 109  sh—Éh_­p { 110 * m­p_Çme ; 111 * m´ovid”_Çme ; 112 * m£rviû_Çme ; 113 * m£rviû_desü ; 114 ušt8_t mnum_of_md• ; 115  queue * mmd•s ; 117 ušt16_t mid ; 118  queue * mdeviûs ; 121  $£nd_­p_»g_nÙify ( h—Éh_­p * ­p , ušt8_t ¡©e ) 123  h®_ev_h—Éh_­p_»g_¡©e ev ; 125 `DBG (""); 127 ev . id = ­p ->id; 128 ev . ¡©e = state; 130 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HEALTH , 131 HAL_EV_HEALTH_APP_REG_STATE , ( ev ), &ev); 132 } } 134  $£nd_chªÃl_¡©e_nÙify ( h—Éh_chªÃl * chªÃl , 135 ušt8_t ¡©e ,  fd ) 137  h®_ev_h—Éh_chªÃl_¡©e ev ; 139 `DBG (""); 141 `bdaddr2ªdroid (& chªÃl -> dev -> d¡ , ev . bdaddr ); 142 ev . ­p_id = chªÃl -> dev ->app_id; 143 ev . md•_šdex = chªÃl -> md•_id - 1; 144 ev . chªÃl_id = chªÃl -> id ; 145 ev . chªÃl_¡©e = ¡©e ; 147 `c_£nd_nÙif_w™h_fd ( h®_c , HAL_SERVICE_ID_HEALTH , 148 HAL_EV_HEALTH_CHANNEL_STATE , 149 ( ev ), &ev, fd ); 150 } } 152  $uÄef_mdl ( h—Éh_chªÃl * chªÃl ) 154 ià(! chªÃl || !chªÃl-> mdl ) 157 `mÿp_mdl_uÄef ( chªÃl -> mdl ); 158 chªÃl -> mdl = NULL ; 159 chªÃl -> mdl_cÚn = çl£ ; 160 } } 162  $ä“_h—Éh_chªÃl (* d©a ) 164  h—Éh_chªÃl * chªÃl = d©a ; 165  fd ; 167 `DBG ("chªÃÈ%p", chªÃl ); 169 ià(! chªÃl ) 172 fd = `mÿp_mdl_g‘_fd ( chªÃl -> mdl ); 173 ià( fd >= 0) 174 `shutdown ( fd , SHUT_RDWR ); 176 `uÄef_mdl ( chªÃl ); 177 `ä“ ( chªÃl ); 178 } } 180  $de¡roy_chªÃl (* d©a ) 182  h—Éh_chªÃl * chªÃl = d©a ; 184 ià(! chªÃl ) 187 `£nd_chªÃl_¡©e_nÙify ( chªÃl , HAL_HEALTH_CHANNEL_DESTROYED , -1); 188 `queue_»move ( chªÃl -> dev -> chªÃls , channel); 189 `ä“_h—Éh_chªÃl ( chªÃl ); 190 } } 192  $uÄef_mþ ( h—Éh_deviû * dev ) 194 ià(! dev || !dev-> mþ ) 197 `mÿp_þo£_mþ ( dev -> mþ , FALSE ); 198 `mÿp_mþ_uÄef ( dev -> mþ ); 199 dev -> mþ = NULL ; 200 } } 202  $ä“_h—Éh_deviû (* d©a ) 204  h—Éh_deviû * dev = d©a ; 206 ià(! dev ) 209 `uÄef_mþ ( dev ); 210 `queue_de¡roy ( dev -> chªÃls , ä“_h—Éh_chªÃl ); 211 `ä“ ( dev ); 212 } } 214  $ä“_md•_cfg (* d©a ) 216  md•_cfg * cfg = d©a ; 218 ià(! cfg ) 221 `ä“ ( cfg -> desü ); 222 `ä“ ( cfg ); 223 } } 225  $ä“_h—Éh_­p (* d©a ) 227  h—Éh_­p * ­p = d©a ; 229 ià(! ­p ) 232 `ä“ ( ­p -> ­p_Çme ); 233 `ä“ ( ­p -> ´ovid”_Çme ); 234 `ä“ ( ­p -> £rviû_Çme ); 235 `ä“ ( ­p -> £rviû_desü ); 236 `queue_de¡roy ( ­p -> md•s , ä“_md•_cfg ); 237 `queue_de¡roy ( ­p -> deviûs , ä“_h—Éh_deviû ); 238 `ä“ ( ­p ); 239 } } 241  boÞ $m©ch_chªÃl_by_mdl (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 243 cÚ¡  h—Éh_chªÃl * chªÃl = d©a ; 244 cÚ¡  mÿp_mdl * mdl = u£r_d©a ; 246  chªÃl -> mdl == mdl; 247 } } 249  boÞ $m©ch_chªÃl_by_id (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 251 cÚ¡  h—Éh_chªÃl * chªÃl = d©a ; 252 ušt16_t chªÃl_id = `PTR_TO_INT ( u£r_d©a ); 254  chªÃl -> id =ð chªÃl_id ; 255 } } 257  boÞ $m©ch_dev_by_mþ (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 259 cÚ¡  h—Éh_deviû * dev = d©a ; 260 cÚ¡  mÿp_mþ * mþ = u£r_d©a ; 262  dev -> mþ == mcl; 263 } } 265  boÞ $m©ch_dev_by_addr (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 267 cÚ¡  h—Éh_deviû * dev = d©a ; 268 cÚ¡ bdaddr_t * addr = u£r_d©a ; 270  ! `bacmp (& dev -> d¡ , addr ); 271 } } 273  boÞ $m©ch_chªÃl_by_md•_id (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 275 cÚ¡  h—Éh_chªÃl * chªÃl = d©a ; 276 ušt16_t md•_id = `PTR_TO_INT ( u£r_d©a ); 278  chªÃl -> md•_id == mdep_id; 279 } } 281  boÞ $m©ch_md•_by_rÞe (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 283 cÚ¡  md•_cfg * md• = d©a ; 284 ušt16_t rÞe = `PTR_TO_INT ( u£r_d©a ); 286  md• -> rÞe ==„ole; 287 } } 289  boÞ $m©ch_md•_by_id (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 291 cÚ¡  md•_cfg * md• = d©a ; 292 ušt16_t md•_id = `PTR_TO_INT ( u£r_d©a ); 294  md• -> id =ð md•_id ; 295 } } 297  boÞ $m©ch_­p_by_id (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 299 cÚ¡  h—Éh_­p * ­p = d©a ; 300 ušt16_t ­p_id = `PTR_TO_INT ( u£r_d©a ); 302  ­p -> id =ð ­p_id ; 303 } } 305  h—Éh_chªÃl * $£¬ch_chªÃl_by_id ( ušt16_t id ) 307 cÚ¡  queue_’Œy * ­ps_’Œy , * deviûs_’Œy ; 308  h—Éh_­p * ­p ; 309  h—Éh_chªÃl * chªÃl ; 310  h—Éh_deviû * dev ; 312 `DBG (""); 314 ­ps_’Œy = `queue_g‘_’Œ›s ( ­ps ); 315  ­ps_’Œy ) { 316 ­p = ­ps_’Œy -> d©a ; 317 deviûs_’Œy = `queue_g‘_’Œ›s ( ­p -> deviûs ); 318  deviûs_’Œy ) { 319 dev = deviûs_’Œy -> d©a ; 320 chªÃl = `queue_fšd ( dev -> chªÃls , m©ch_chªÃl_by_id , 321 `INT_TO_PTR ( id )); 323 ià( chªÃl ) 324  chªÃl ; 326 deviûs_’Œy = deviûs_’Œy-> Ãxt ; 329 ­ps_’Œy =‡µs_’Œy-> Ãxt ; 332  NULL ; 333 } } 335  h—Éh_chªÃl * $£¬ch_chªÃl_by_mdl ( mÿp_mdl * mdl ) 337 cÚ¡  queue_’Œy * ­ps_’Œy , * deviûs_’Œy ; 338  h—Éh_­p * ­p ; 339  h—Éh_chªÃl * chªÃl ; 340  h—Éh_deviû * dev ; 342 `DBG (""); 344 ­ps_’Œy = `queue_g‘_’Œ›s ( ­ps ); 345  ­ps_’Œy ) { 346 ­p = ­ps_’Œy -> d©a ; 347 deviûs_’Œy = `queue_g‘_’Œ›s ( ­p -> deviûs ); 348  deviûs_’Œy ) { 349 dev = deviûs_’Œy -> d©a ; 350 chªÃl = `queue_fšd ( dev -> chªÃls , 351 m©ch_chªÃl_by_mdl , mdl ); 353 ià( chªÃl ) 354  chªÃl ; 356 deviûs_’Œy = deviûs_’Œy-> Ãxt ; 359 ­ps_’Œy =‡µs_’Œy-> Ãxt ; 362  NULL ; 363 } } 365  h—Éh_deviû * $£¬ch_dev_by_mþ ( mÿp_mþ * mþ ) 367 cÚ¡  queue_’Œy * ­ps_’Œy ; 368  h—Éh_­p * ­p ; 369  h—Éh_deviû * dev ; 371 `DBG (""); 373 ­ps_’Œy = `queue_g‘_’Œ›s ( ­ps ); 374  ­ps_’Œy ) { 375 ­p = ­ps_’Œy -> d©a ; 377 dev = `queue_fšd ( ­p -> deviûs , m©ch_dev_by_mþ , mþ ); 379 ià( dev ) 380  dev ; 382 ­ps_’Œy =‡µs_’Œy-> Ãxt ; 385  NULL ; 386 } } 388  h—Éh_­p * $£¬ch_­p_by_md•id ( ušt8_t md•id ) 390 cÚ¡  queue_’Œy * ­ps_’Œy ; 391  h—Éh_­p * ­p ; 393 `DBG (""); 395 ­ps_’Œy = `queue_g‘_’Œ›s ( ­ps ); 396  ­ps_’Œy ) { 397 ­p = ­ps_’Œy -> d©a ; 399 ià( `queue_fšd ( ­p -> md•s , m©ch_md•_by_id , 400 `INT_TO_PTR ( md•id ))) 401  ­p ; 403 ­ps_’Œy =‡µs_’Œy-> Ãxt ; 406  NULL ; 407 } } 409  $»gi¡”_£rviû_´ÙocÞs ( sdp_»cÜd_t * »c , 410  h—Éh_­p * ­p ) 412 uuid_t l2ÿp_uuid , mÿp_c_uuid ; 413 sdp_li¡_t * l2ÿp_li¡ , * ´Ùo_li¡ = NULL , * mÿp_li¡ = NULL; 414 sdp_li¡_t * acûss_´Ùo_li¡ = NULL ; 415 sdp_d©a_t * psm = NULL , * mÿp_v” = NULL; 416 ušt32_t cýsm ; 417 ušt16_t v”siÚ = MCAP_VERSION ; 418 GE¼Ü * ”r = NULL ; 419  »t = -1; 421 `DBG (""); 424 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 425 l2ÿp_li¡ = `sdp_li¡_­³nd ( NULL , & l2ÿp_uuid ); 426 ià(! l2ÿp_li¡ ) 427  çž ; 429 cýsm = `mÿp_g‘_ù¾_psm ( mÿp , & ”r ); 430 ià( ”r ) 431  çž ; 433 psm = `sdp_d©a_®loc ( SDP_UINT16 , & cýsm ); 434 ià(! psm ) 435  çž ; 437 ià(! `sdp_li¡_­³nd ( l2ÿp_li¡ , psm )) 438  çž ; 440 ´Ùo_li¡ = `sdp_li¡_­³nd ( NULL , l2ÿp_li¡ ); 441 ià(! ´Ùo_li¡ ) 442  çž ; 445 `sdp_uuid16_ü—‹ (& mÿp_c_uuid , MCAP_CTRL_UUID ); 446 mÿp_li¡ = `sdp_li¡_­³nd ( NULL , & mÿp_c_uuid ); 447 ià(! mÿp_li¡ ) 448  çž ; 450 mÿp_v” = `sdp_d©a_®loc ( SDP_UINT16 , & v”siÚ ); 451 ià(! mÿp_v” ) 452  çž ; 454 ià(! `sdp_li¡_­³nd ( mÿp_li¡ , mÿp_v” )) 455  çž ; 457 ià(! `sdp_li¡_­³nd ( ´Ùo_li¡ , mÿp_li¡ )) 458  çž ; 461 acûss_´Ùo_li¡ = `sdp_li¡_­³nd ( NULL , ´Ùo_li¡ ); 462 ià(! acûss_´Ùo_li¡ ) 463  çž ; 465 `sdp_£t_acûss_´Ùos ( »c , acûss_´Ùo_li¡ ); 466 »t = 0; 468 çž : 469 `sdp_li¡_ä“ ( l2ÿp_li¡ , NULL ); 470 `sdp_li¡_ä“ ( mÿp_li¡ , NULL ); 471 `sdp_li¡_ä“ ( ´Ùo_li¡ , NULL ); 472 `sdp_li¡_ä“ ( acûss_´Ùo_li¡ , NULL ); 474 ià( psm ) 475 `sdp_d©a_ä“ ( psm ); 477 ià( mÿp_v” ) 478 `sdp_d©a_ä“ ( mÿp_v” ); 480 ià( ”r ) 481 `g_”rÜ_ä“ ( ”r ); 483  »t ; 484 } } 486  $»gi¡”_£rviû_´ofžes ( sdp_»cÜd_t * »c ) 488  »t ; 489 sdp_li¡_t * ´ofže_li¡ ; 490 sdp_´ofže_desc_t hdp_´ofže ; 492 `DBG (""); 495 `sdp_uuid16_ü—‹ (& hdp_´ofže . uuid , HDP_SVCLASS_ID ); 496 hdp_´ofže . v”siÚ = HDP_VERSION ; 497 ´ofže_li¡ = `sdp_li¡_­³nd ( NULL , & hdp_´ofže ); 498 ià(! ´ofže_li¡ ) 502 »t = `sdp_£t_´ofže_descs ( »c , ´ofže_li¡ ); 503 `sdp_li¡_ä“ ( ´ofže_li¡ , NULL ); 505  »t ; 506 } } 508  $»gi¡”_£rviû_add™iÚ®_´ÙocÞs ( sdp_»cÜd_t * »c , 509  h—Éh_­p * ­p ) 511  »t = -1; 512 uuid_t l2ÿp_uuid , mÿp_d_uuid ; 513 sdp_li¡_t * l2ÿp_li¡ , * ´Ùo_li¡ = NULL , * mÿp_li¡ = NULL; 514 sdp_li¡_t * acûss_´Ùo_li¡ = NULL ; 515 sdp_d©a_t * psm = NULL ; 516 ušt32_t dýsm ; 517 GE¼Ü * ”r = NULL ; 519 `DBG (""); 522 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 523 l2ÿp_li¡ = `sdp_li¡_­³nd ( NULL , & l2ÿp_uuid ); 524 ià(! l2ÿp_li¡ ) 525  çž ; 527 dýsm = `mÿp_g‘_d©a_psm ( mÿp , & ”r ); 528 ià( ”r ) 529  çž ; 531 psm = `sdp_d©a_®loc ( SDP_UINT16 , & dýsm ); 532 ià(! psm ) 533  çž ; 535 ià(! `sdp_li¡_­³nd ( l2ÿp_li¡ , psm )) 536  çž ; 538 ´Ùo_li¡ = `sdp_li¡_­³nd ( NULL , l2ÿp_li¡ ); 539 ià(! ´Ùo_li¡ ) 540  çž ; 543 `sdp_uuid16_ü—‹ (& mÿp_d_uuid , MCAP_DATA_UUID ); 544 mÿp_li¡ = `sdp_li¡_­³nd ( NULL , & mÿp_d_uuid ); 545 ià(! mÿp_li¡ ) 546  çž ; 548 ià(! `sdp_li¡_­³nd ( ´Ùo_li¡ , mÿp_li¡ )) 549  çž ; 552 acûss_´Ùo_li¡ = `sdp_li¡_­³nd ( NULL , ´Ùo_li¡ ); 553 ià(! acûss_´Ùo_li¡ ) 554  çž ; 556 `sdp_£t_add_acûss_´Ùos ( »c , acûss_´Ùo_li¡ ); 557 »t = 0; 559 çž : 560 `sdp_li¡_ä“ ( l2ÿp_li¡ , NULL ); 561 `sdp_li¡_ä“ ( mÿp_li¡ , NULL ); 562 `sdp_li¡_ä“ ( ´Ùo_li¡ , NULL ); 563 `sdp_li¡_ä“ ( acûss_´Ùo_li¡ , NULL ); 565 ià( psm ) 566 `sdp_d©a_ä“ ( psm ); 568 ià( ”r ) 569 `g_”rÜ_ä“ ( ”r ); 571  »t ; 572 } } 574  sdp_li¡_t * $md•s_to_sdp_ã©u»s ( md•_cfg * md• ) 576 sdp_d©a_t * md•id , * dty³ = NULL , * rÞe = NULL, * desü = NULL; 577 sdp_li¡_t * f_li¡ = NULL ; 579 `DBG (""); 581 md•id = `sdp_d©a_®loc ( SDP_UINT8 , & md• -> id ); 582 ià(! md•id ) 583  NULL ; 585 dty³ = `sdp_d©a_®loc ( SDP_UINT16 , & md• -> d©a_ty³ ); 586 ià(! dty³ ) 587  çž ; 589 rÞe = `sdp_d©a_®loc ( SDP_UINT8 , & md• ->role); 590 ià(! rÞe ) 591  çž ; 593 ià( md• -> desü ) { 594 desü = `sdp_d©a_®loc ( SDP_TEXT_STR8 , md• ->descr); 595 ià(! desü ) 596  çž ; 599 f_li¡ = `sdp_li¡_­³nd ( NULL , md•id ); 600 ià(! f_li¡ ) 601  çž ; 603 ià(! `sdp_li¡_­³nd ( f_li¡ , dty³ )) 604  çž ; 606 ià(! `sdp_li¡_­³nd ( f_li¡ , rÞe )) 607  çž ; 609 ià( desü && ! `sdp_li¡_­³nd ( f_li¡ , descr)) 610  çž ; 612  f_li¡ ; 614 çž : 615 `sdp_li¡_ä“ ( f_li¡ , NULL ); 617 ià( md•id ) 618 `sdp_d©a_ä“ ( md•id ); 620 ià( dty³ ) 621 `sdp_d©a_ä“ ( dty³ ); 623 ià( rÞe ) 624 `sdp_d©a_ä“ ( rÞe ); 626 ià( desü ) 627 `sdp_d©a_ä“ ( desü ); 629  NULL ; 630 } } 632  $ä“_hdp_li¡ (* li¡ ) 634 sdp_li¡_t * hdp_li¡ = li¡ ; 636 `sdp_li¡_ä“ ( hdp_li¡ , ( sdp_ä“_func_t ) sdp_d©a_ä“ ); 637 } } 639  $»gi¡”_ã©u»s (* d©a , * u£r_d©a ) 641  md•_cfg * md• = d©a ; 642 sdp_li¡_t ** sup_ã©u»s = u£r_d©a ; 643 sdp_li¡_t * hdp_ã©u» ; 645 `DBG (""); 647 hdp_ã©u» = `md•s_to_sdp_ã©u»s ( md• ); 648 ià(! hdp_ã©u» ) 651 ià(!* sup_ã©u»s ) { 652 * sup_ã©u»s = `sdp_li¡_­³nd ( NULL , hdp_ã©u» ); 653 ià(!* sup_ã©u»s ) 654 `sdp_li¡_ä“ ( hdp_ã©u» , 655 ( sdp_ä“_func_t ) sdp_d©a_ä“ ); 656 } ià(! `sdp_li¡_­³nd (* sup_ã©u»s , hdp_ã©u» )) { 657 `sdp_li¡_ä“ ( hdp_ã©u» , 658 ( sdp_ä“_func_t ) sdp_d©a_ä“ ); 660 } } 662  $»gi¡”_£rviû_sup_ã©u»s ( sdp_»cÜd_t * »c , 663  h—Éh_­p * ­p ) 665 sdp_li¡_t * sup_ã©u»s = NULL ; 667 `DBG (""); 669 `queue_fÜ—ch ( ­p -> md•s , »gi¡”_ã©u»s , & sup_ã©u»s ); 670 ià(! sup_ã©u»s ) 673 ià( `sdp_£t_suµ_ã© ( »c , sup_ã©u»s ) < 0) { 674 `sdp_li¡_ä“ ( sup_ã©u»s , ä“_hdp_li¡ ); 678 `sdp_li¡_ä“ ( sup_ã©u»s , ä“_hdp_li¡ ); 680 } } 682  $»gi¡”_d©a_exchªge_¥ec ( sdp_»cÜd_t * »c ) 684 sdp_d©a_t * ¥ec ; 685 ušt8_t d©a_¥ec = DATA_EXCHANGE_SPEC_11073 ; 688 `DBG (""); 690 ¥ec = `sdp_d©a_®loc ( SDP_UINT8 , & d©a_¥ec ); 691 ià(! ¥ec ) 694 ià( `sdp_©Œ_add ( »c , SDP_ATTR_DATA_EXCHANGE_SPEC , ¥ec ) < 0) { 695 `sdp_d©a_ä“ ( ¥ec ); 700 } } 702  $»gi¡”_mÿp_ã©u»s ( sdp_»cÜd_t * »c ) 704 sdp_d©a_t * mÿp_´oc ; 705 ušt8_t mÿp_sup_´oc = MCAP_SUP_PROC ; 707 `DBG (""); 709 mÿp_´oc = `sdp_d©a_®loc ( SDP_UINT8 , & mÿp_sup_´oc ); 710 ià(! mÿp_´oc ) 713 ià( `sdp_©Œ_add ( »c , SDP_ATTR_MCAP_SUPPORTED_PROCEDURES , 714 mÿp_´oc ) < 0) { 715 `sdp_d©a_ä“ ( mÿp_´oc ); 720 } } 722  $£t_sdp_£rviûs_uuid ( sdp_»cÜd_t * »c , ušt8_t rÞe ) 724 uuid_t sourû , sšk ; 725 sdp_li¡_t * li¡ = NULL ; 727 `sdp_uuid16_ü—‹ (& sšk , HDP_SINK_SVCLASS_ID ); 728 `sdp_uuid16_ü—‹ (& sourû , HDP_SOURCE_SVCLASS_ID ); 729 `sdp_g‘_£rviû_þas£s ( »c , & li¡ ); 731  rÞe ) { 732  HAL_HEALTH_MDEP_ROLE_SOURCE : 733 ià(! `sdp_li¡_fšd ( li¡ , & sourû , sdp_uuid_cmp )) 734 li¡ = `sdp_li¡_­³nd Öi¡, & sourû ); 736  HAL_HEALTH_MDEP_ROLE_SINK : 737 ià(! `sdp_li¡_fšd ( li¡ , & sšk , sdp_uuid_cmp )) 738 li¡ = `sdp_li¡_­³nd Öi¡, & sšk ); 742 ià( `sdp_£t_£rviû_þas£s ( »c , li¡ ) < 0) { 743 `sdp_li¡_ä“ ( li¡ , NULL ); 747 `sdp_li¡_ä“ ( li¡ , NULL ); 750 } } 752  $upd©e_sdp_»cÜd ( h—Éh_­p * ­p ) 754 sdp_»cÜd_t * »c ; 755 ušt8_t rÞe ; 757 `DBG (""); 759 ià( »cÜd_id > 0) { 760 `bt_ad­‹r_»move_»cÜd ( »cÜd_id ); 761 »cÜd_id = 0; 764 »c = `sdp_»cÜd_®loc (); 765 ià(! »c ) 768 rÞe = HAL_HEALTH_MDEP_ROLE_SOURCE ; 769 ià( `queue_fšd ( ­p -> md•s , m©ch_md•_by_rÞe , `INT_TO_PTR ( rÞe ))) 770 `£t_sdp_£rviûs_uuid ( »c , rÞe ); 772 rÞe = HAL_HEALTH_MDEP_ROLE_SINK ; 773 ià( `queue_fšd ( ­p -> md•s , m©ch_md•_by_rÞe , `INT_TO_PTR ( rÞe ))) 774 `£t_sdp_£rviûs_uuid ( »c , rÞe ); 776 `sdp_£t_šfo_©Œ ( »c , ­p -> £rviû_Çme ,‡µ-> ´ovid”_Çme , 777 ­p -> £rviû_desü ); 779 ià( `»gi¡”_£rviû_´ÙocÞs ( »c , ­p ) < 0) 780  çž ; 782 ià( `»gi¡”_£rviû_´ofžes ( »c ) < 0) 783  çž ; 785 ià( `»gi¡”_£rviû_add™iÚ®_´ÙocÞs ( »c , ­p ) < 0) 786  çž ; 788 ià( `»gi¡”_£rviû_sup_ã©u»s ( »c , ­p ) < 0) 789  çž ; 791 ià( `»gi¡”_d©a_exchªge_¥ec ( »c ) < 0) 792  çž ; 794 ià( `»gi¡”_mÿp_ã©u»s ( »c ) < 0) 795  çž ; 797 ià( `sdp_£t_»cÜd_¡©e ( »c , »cÜd_¡©e ++) < 0) 798  çž ; 800 ià( `bt_ad­‹r_add_»cÜd ( »c , SVC_HINT_HEALTH ) < 0) { 801 `”rÜ ("health: Failedo„egister HEALTH„ecord"); 802  çž ; 805 »cÜd_id = »c -> hªdË ; 809 çž : 810 `sdp_»cÜd_ä“ ( »c ); 813 } } 815  h—Éh_­p * $ü—‹_h—Éh_­p (cÚ¡ * ­p_Çme , 816 cÚ¡ * ´ovid” , cÚ¡ * ¤v_Çme , 817 cÚ¡ * ¤v_desü , ušt8_t md•s ) 819  h—Éh_­p * ­p ; 820  ­p_id = 1; 822 `DBG (""); 824 ­p = `Ãw0 ( h—Éh_­p , 1); 825 ià(! ­p ) 826  NULL ; 828 ­p -> id = ­p_id ++; 829 ­p -> num_of_md• = md•s ; 830 ­p -> ­p_Çme = `¡rdup (app_name); 832 ià( ´ovid” ) { 833 ­p -> ´ovid”_Çme = `¡rdup ( ´ovid” ); 834 ià(! ­p -> ´ovid”_Çme ) 835  çž ; 838 ià( ¤v_Çme ) { 839 ­p -> £rviû_Çme = `¡rdup ( ¤v_Çme ); 840 ià(! ­p -> £rviû_Çme ) 841  çž ; 844 ià( ¤v_desü ) { 845 ­p -> £rviû_desü = `¡rdup ( ¤v_desü ); 846 ià(! ­p -> £rviû_desü ) 847  çž ; 850 ­p -> md•s = `queue_Ãw (); 851 ià(! ­p -> md•s ) 852  çž ; 854 ­p -> deviûs = `queue_Ãw (); 855 ià(! ­p -> deviûs ) 856  çž ; 858  ­p ; 860 çž : 861 `ä“_h—Éh_­p ( ­p ); 862  NULL ; 863 } } 865  $bt_h—Éh_»gi¡”_­p (cÚ¡ * buf , ušt16_t Ën ) 867 cÚ¡  h®_cmd_h—Éh_»g_­p * cmd = buf ; 868  h®_r¥_h—Éh_»g_­p r¥ ; 869  h—Éh_­p * ­p ; 870 ušt16_t off ; 871 ušt16_t ­p_Çme_Ën , ´ovid”_Ën , ¤v_Çme_Ën , ¤v_desü_Ën ; 872 * ­p_Çme , * ´ovid” = NULL , * ¤v_Çme = NULL, * ¤v_desü = NULL; 874 `DBG (""); 876 ià( Ën !ð(* cmd ) + cmd->len || 877 cmd -> ­p_Çme_off > cmd-> ´ovid”_Çme_off || 878 cmd -> ´ovid”_Çme_off > cmd-> £rviû_Çme_off || 879 cmd -> £rviû_Çme_off > cmd-> £rviû_desü_off || 880 cmd -> £rviû_desü_off > cmd-> Ën ) { 881 `”rÜ ("health: Invalid„egister‡pp command,erminating"); 882 `¿i£ ( SIGTERM ); 886 ­p_Çme = (*è cmd -> d©a ; 887 ­p_Çme_Ën = cmd -> ´ovid”_Çme_off - cmd-> ­p_Çme_off ; 889 off = ­p_Çme_Ën ; 890 ´ovid”_Ën = cmd -> £rviû_Çme_off - off ; 891 ià( ´ovid”_Ën > 0) 892 ´ovid” = (*è cmd -> d©a + off ; 894 off +ð ´ovid”_Ën ; 895 ¤v_Çme_Ën = cmd -> £rviû_desü_off - off ; 896 ià( ¤v_Çme_Ën > 0) 897 ¤v_Çme = (*è cmd -> d©a + off ; 899 off +ð ¤v_Çme_Ën ; 900 ¤v_desü_Ën = cmd -> Ën - off ; 901 ià( ¤v_desü_Ën > 0) 902 ¤v_desü = (*è cmd -> d©a + off ; 904 ­p = `ü—‹_h—Éh_­p ( ­p_Çme , ´ovid” , ¤v_Çme , ¤v_desü , 905 cmd -> num_of_md• ); 906 ià(! ­p ) 907  çž ; 909 ià(! `queue_push_ž ( ­ps , ­p )) 910  çž ; 912 r¥ . ­p_id = ­p -> id ; 913 `c_£nd_r¥_fuÎ ( h®_c , HAL_SERVICE_ID_HEALTH , HAL_OP_HEALTH_REG_APP , 914 ( r¥ ), &rsp, -1); 917 çž : 918 `ä“_h—Éh_­p ( ­p ); 919 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HEALTH , HAL_OP_HEALTH_MDEP , 920 HAL_STATUS_FAILED ); 921 } } 923  ušt8_t $ªdroid2chªÃl_ty³ ( ušt8_t ty³ ) 925  ty³ ) { 926  HAL_HEALTH_CHANNEL_TYPE_RELIABLE : 927  CHANNEL_TYPE_RELIABLE ; 928  HAL_HEALTH_CHANNEL_TYPE_STREAMING : 929  CHANNEL_TYPE_STREAM ; 931  CHANNEL_TYPE_ANY ; 933 } } 935  $bt_h—Éh_md•_cfg_d©a (cÚ¡ * buf , ušt16_t Ën ) 937 cÚ¡  h®_cmd_h—Éh_md• * cmd = buf ; 938  h—Éh_­p * ­p ; 939  md•_cfg * md• = NULL ; 940 ušt8_t ¡©us ; 942 `DBG (""); 944 ­p = `queue_fšd ( ­ps , m©ch_­p_by_id , `INT_TO_PTR ( cmd -> ­p_id )); 945 ià(! ­p ) { 946 ¡©us = HAL_STATUS_INVALID ; 947  çž ; 950 md• = `Ãw0 ( md•_cfg , 1); 951 ià(! md• ) { 952 ¡©us = HAL_STATUS_INVALID ; 953  çž ; 956 md• -> rÞe = cmd ->role; 957 md• -> d©a_ty³ = cmd ->data_type; 958 md• -> chªÃl_ty³ = `ªdroid2chªÃl_ty³ ( cmd ->channel_type); 959 md• -> id = `queue_Ëngth ( ­p -> md•s ) + 1; 961 ià( cmd -> desü_Ën > 0) { 962 md• -> desü = `m®loc0 ( cmd -> desü_Ën ); 963 `memýy ( md• -> desü , cmd ->desü, cmd-> desü_Ën ); 966 ià(! `queue_push_ž ( ­p -> md•s , md• )) { 967 ¡©us = HAL_STATUS_FAILED ; 968  çž ; 971 ià( ­p -> num_of_md• !ð `queue_Ëngth ×µ-> md•s )) 972  £nd_r¥ ; 982 ià( `upd©e_sdp_»cÜd ( ­p ) < 0) { 983 `”rÜ ("health: HDP SDP„ecord…reparation failed"); 984 ¡©us = HAL_STATUS_FAILED ; 985  çž ; 988 `£nd_­p_»g_nÙify ( ­p , HAL_HEALTH_APP_REG_SUCCESS ); 990 £nd_r¥ : 991 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HEALTH , HAL_OP_HEALTH_MDEP , 992 HAL_STATUS_SUCCESS ); 995 çž : 996 ià( ¡©us !ð HAL_STATUS_SUCCESS ) { 997 `ä“_md•_cfg ( md• ); 998 `queue_»move ( ­ps , ­p ); 999 `ä“_h—Éh_­p ( ­p ); 1002 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HEALTH , HAL_OP_HEALTH_MDEP , 1003 ¡©us ); 1004 } } 1006  $bt_h—Éh_uÄegi¡”_­p (cÚ¡ * buf , ušt16_t Ën ) 1008 cÚ¡  h®_cmd_h—Éh_uÄeg_­p * cmd = buf ; 1009  h—Éh_­p * ­p ; 1011 `DBG (""); 1013 ­p = `queue_»move_if ( ­ps , m©ch_­p_by_id , `INT_TO_PTR ( cmd -> ­p_id )); 1014 ià(! ­p ) { 1015 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HEALTH , 1016 HAL_OP_HEALTH_UNREG_APP , HAL_STATUS_INVALID ); 1020 `£nd_­p_»g_nÙify ( ­p , HAL_HEALTH_APP_DEREG_SUCCESS ); 1022 ià( »cÜd_id > 0) { 1023 `bt_ad­‹r_»move_»cÜd ( »cÜd_id ); 1024 »cÜd_id = 0; 1027 `ä“_h—Éh_­p ( ­p ); 1028 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HEALTH , 1029 HAL_OP_HEALTH_UNREG_APP , HAL_STATUS_SUCCESS ); 1030 } } 1032  $g‘_´Ù_desc_’Œy ( sdp_d©a_t * ’Œy ,  ty³ , gušt16 * v® ) 1034 sdp_d©a_t * ™” ; 1035  ´Ùo ; 1037 ià(! ’Œy || ! `SDP_IS_SEQ ÓÁry-> dtd )) 1040 ™” = ’Œy -> v® . d©a£q ; 1041 ià(!( ™” -> dtd & SDP_UUID_UNSPEC )) 1044 ´Ùo = `sdp_uuid_to_´Ùo (& ™” -> v® . uuid ); 1045 ià( ´Ùo !ð ty³ ) 1048 ià(! v® ) 1051 ™” = i‹r-> Ãxt ; 1052 ià( ™” -> dtd !ð SDP_UINT16 ) 1055 * v® = ™” ->v®. ušt16 ; 1058 } } 1060  $g‘_´Ù_desc_li¡ (cÚ¡ sdp_»cÜd_t * »c , ušt16_t * psm , 1061 ušt16_t * v”siÚ ) 1063 sdp_d©a_t * pdl , * p0 , * p1 ; 1065 ià(! psm && ! v”siÚ ) 1068 pdl = `sdp_d©a_g‘ ( »c , SDP_ATTR_PROTO_DESC_LIST ); 1069 ià(! pdl || ! `SDP_IS_SEQ Õdl-> dtd )) 1072 p0 = pdl -> v® . d©a£q ; 1073 ià( `g‘_´Ù_desc_’Œy ( p0 , L2CAP_UUID , psm ) < 0) 1076 p1 = p0 -> Ãxt ; 1077 ià( `g‘_´Ù_desc_’Œy ( p1 , MCAP_CTRL_UUID , v”siÚ ) < 0) 1081 } } 1083  $g‘_cýsm ( sdp_li¡_t * »cs , ušt16_t * cýsm ) 1085 sdp_li¡_t * l ; 1087  l = »cs ;†;† =†-> Ãxt ) { 1088 sdp_»cÜd_t * »c = l -> d©a ; 1090 ià(! `g‘_´Ù_desc_li¡ ( »c , cýsm , NULL )) 1095 } } 1097  $g‘_add_´Ù_desc_li¡ (cÚ¡ sdp_»cÜd_t * »c , ušt16_t * psm ) 1099 sdp_d©a_t * pdl , * p0 , * p1 ; 1101 ià(! psm ) 1104 pdl = `sdp_d©a_g‘ ( »c , SDP_ATTR_ADD_PROTO_DESC_LIST ); 1105 ià(! pdl ||…dl-> dtd !ð SDP_SEQ8 ) 1108 pdl =…dl-> v® . d©a£q ; 1109 ià( pdl -> dtd !ð SDP_SEQ8 ) 1112 p0 = pdl -> v® . d©a£q ; 1114 ià( `g‘_´Ù_desc_’Œy ( p0 , L2CAP_UUID , psm ) < 0) 1117 p1 = p0 -> Ãxt ; 1118 ià( `g‘_´Ù_desc_’Œy ( p1 , MCAP_DATA_UUID , NULL ) < 0) 1122 } } 1124  $g‘_dýsm ( sdp_li¡_t * »cs , ušt16_t * dýsm ) 1126 sdp_li¡_t * l ; 1128  l = »cs ;†;† =†-> Ãxt ) { 1129 sdp_»cÜd_t * »c = l -> d©a ; 1131 ià(! `g‘_add_´Ù_desc_li¡ ( »c , dýsm )) 1136 } } 1138  $£nd_echo_d©a ( sock , cÚ¡ * buf , ušt32_t size ) 1140 cÚ¡ ušt8_t * buf_b = buf ; 1141 ušt32_t £Á = 0; 1143  £Á < size ) { 1144  n = `wr™e ( sock , buf_b + £Á , size - sent); 1145 ià( n < 0) 1147 £Á +ð n ; 1151 } } 1153  gboÞ—n $£rve_echo ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , gpoš‹r d©a ) 1155  h—Éh_chªÃl * chªÃl = d©a ; 1156 ušt8_t buf [ MCAP_DC_MTU ]; 1157  fd , Ën , »t ; 1159 `DBG ("chªÃÈ%p", chªÃl ); 1161 ià( cÚd & ( G_IO_ERR | G_IO_HUP | G_IO_NVAL )) { 1162 `DBG ("Error condition on channel"); 1163  FALSE ; 1166 fd = `g_io_chªÃl_unix_g‘_fd ( io ); 1168 Ën = `»ad ( fd , buf , (buf)); 1169 ià( Ën < 0) { 1170 `DBG ("Error„eading ECHO"); 1171  FALSE ; 1174 »t = `£nd_echo_d©a ( fd , buf , Ën ); 1175 ià( »t !ð Ën ) 1176 `DBG ("Error sending ECHO back"); 1178  FALSE ; 1179 } } 1181  $mÿp_mdl_cÚÃùed_cb ( mÿp_mdl * mdl , * d©a ) 1183  h—Éh_chªÃl * chªÃl = d©a ; 1184  fd ; 1186 `DBG ("D©¨chªÃÈcÚÃùed: mdÈ%°chªÃÈ%p", mdl , chªÃl ); 1188 ià(! chªÃl ) { 1189 chªÃl = `£¬ch_chªÃl_by_mdl ( mdl ); 1190 ià(! chªÃl ) { 1191 `”rÜ ("health: channel data does‚otƒxist"); 1196 ià(! chªÃl -> mdl ) 1197 chªÃl -> mdl = `mÿp_mdl_»f (mdl); 1199 fd = `mÿp_mdl_g‘_fd ( chªÃl -> mdl ); 1200 ià( fd < 0) { 1201 `”rÜ ("health:ƒrror„etrieving fd"); 1202  çž ; 1205 ià( chªÃl -> md•_id =ð MDEP_ECHO ) { 1206 GIOChªÃl * io ; 1208 io = `g_io_chªÃl_unix_Ãw ( fd ); 1209 `g_io_add_w©ch ( io , G_IO_ERR | G_IO_HUP | G_IO_NVAL | G_IO_IN , 1210 £rve_echo , chªÃl ); 1211 `g_io_chªÃl_uÄef ( io ); 1216 `šfo ("health: MDL connected"); 1217 `£nd_chªÃl_¡©e_nÙify ( chªÃl , HAL_HEALTH_CHANNEL_CONNECTED , fd ); 1220 çž : 1222 `de¡roy_chªÃl ( chªÃl ); 1223 } } 1225  $mÿp_mdl_þo£d_cb ( mÿp_mdl * mdl , * d©a ) 1227  h—Éh_chªÃl * chªÃl = d©a ; 1229 `šfo ("health: MDL closed"); 1231 ià(! chªÃl ) 1234 chªÃl -> mdl_cÚn = çl£ ; 1235 } } 1237  $mÿp_mdl_d–‘ed_cb ( mÿp_mdl * mdl , * d©a ) 1239  h—Éh_chªÃl * chªÃl ; 1241 `šfo ("health: MDL deleted"); 1243 chªÃl = `£¬ch_chªÃl_by_mdl ( mdl ); 1244 ià(! chªÃl ) 1247 `DBG ("chªÃÈ%°mdÈ%p", chªÃl , mdl ); 1248 `de¡roy_chªÃl ( chªÃl ); 1249 } } 1251  $mÿp_mdl_abÜ‹d_cb ( mÿp_mdl * mdl , * d©a ) 1253 `DBG ("Not Implemeneted"); 1254 } } 1256  h—Éh_deviû * $ü—‹_deviû ( h—Éh_­p * ­p , 1257 cÚ¡ ušt8_t * addr ) 1259  h—Éh_deviû * dev ; 1261 ià(! ­p ) 1262  NULL ; 1265 dev = `Ãw0 ( h—Éh_deviû , 1); 1266 ià(! dev ) 1267  NULL ; 1269 `ªdroid2bdaddr ( addr , & dev -> d¡ ); 1270 dev -> chªÃls = `queue_Ãw (); 1271 ià(! dev -> chªÃls ) { 1272 `ä“_h—Éh_deviû ( dev ); 1273  NULL ; 1276 ià(! `queue_push_ž ( ­p -> deviûs , dev )) { 1277 `ä“_h—Éh_deviû ( dev ); 1278  NULL ; 1281 dev -> ­p_id = ­p -> id ; 1283  dev ; 1284 } } 1286  h—Éh_deviû * $g‘_deviû ( h—Éh_­p * ­p , 1287 cÚ¡ ušt8_t * addr ) 1289  h—Éh_deviû * dev ; 1290 bdaddr_t bdaddr ; 1292 `ªdroid2bdaddr ( addr , & bdaddr ); 1293 dev = `queue_fšd ( ­p -> deviûs , m©ch_dev_by_addr , & bdaddr ); 1294 ià( dev ) 1295  dev ; 1297  `ü—‹_deviû ( ­p , addr ); 1298 } } 1300  h—Éh_chªÃl * $ü—‹_chªÃl ( h—Éh_­p * ­p , 1301 ušt8_t md•_šdex , 1302  h—Éh_deviû * dev ) 1304  md•_cfg * md• ; 1305  h—Éh_chªÃl * chªÃl ; 1306  chªÃl_id = 1; 1308 `DBG ("md• %u", md•_šdex ); 1310 ià(! dev || ! ­p ) 1311  NULL ; 1313 md• = `queue_fšd ( ­p -> md•s , m©ch_md•_by_id , `INT_TO_PTR ( md•_šdex )); 1314 ià(! md• ) { 1315 ià( md•_šdex =ð MDEP_ECHO ) { 1316 md• = `Ãw0 ( md•_cfg , 1); 1317 ià(! md• ) 1318  NULL ; 1321 md• -> id = MDEP_ECHO ; 1323 ià(! `queue_push_ž ( ­p -> md•s , md• )) { 1324 `ä“_md•_cfg ( md• ); 1325  NULL ; 1328  NULL ; 1332 chªÃl = `Ãw0 ( h—Éh_chªÃl , 1); 1333 ià(! chªÃl ) 1334  NULL ; 1336 chªÃl -> md•_id = md• -> id ; 1337 chªÃl -> ty³ = md• -> chªÃl_ty³ ; 1338 chªÃl -> id = chªÃl_id ++; 1339 chªÃl -> dev = dev; 1341 ià(! `queue_push_ž ( dev -> chªÃls , chªÃl )) { 1342 `ä“_h—Éh_chªÃl ( chªÃl ); 1343  NULL ; 1346  chªÃl ; 1347 } } 1349  h—Éh_chªÃl * $cÚÃù_chªÃl ( h—Éh_­p * ­p , 1350  mÿp_mþ * mþ , 1351 ušt8_t md•id ) 1353  h—Éh_deviû * deviû ; 1354  h—Éh_chªÃl * chªÃl = NULL ; 1355 bdaddr_t addr ; 1357 `DBG ("­°%°md•id %u", ­p , md•id ); 1359 `mÿp_mþ_g‘_addr ( mþ , & addr ); 1361 ià(! ­p ) { 1362 `DBG ("NØ­°found fÜ md•id %u", md•id ); 1363  NULL ; 1366 deviû = `g‘_deviû ( ­p , ( ušt8_t *è& addr ); 1367 ià(! deviû ) 1368  NULL ; 1370 chªÃl = `ü—‹_chªÃl ( ­p , md•id , deviû ); 1372  chªÃl ; 1373 } } 1375  ušt8_t $cÚf_to_l2ÿp ( ušt8_t cÚf ) 1377  cÚf =ð CHANNEL_TYPE_STREAM ? L2CAP_MODE_STREAMING : 1378 L2CAP_MODE_ERTM ; 1379 } } 1381  ušt8_t $mÿp_mdl_cÚn_»q_cb ( mÿp_mþ * mþ , ušt8_t md•id , 1382 ušt16_t mdlid , ušt8_t * cÚf , * d©a ) 1384 GE¼Ü * g”r = NULL ; 1385  h—Éh_chªÃl * chªÃl ; 1386  h—Éh_­p * ­p ; 1387  md•_cfg * md• ; 1389 `DBG ("Data channel„equest: mdepid %u mdlid %u conf %u", 1390 md•id , mdlid , * cÚf ); 1392 ià( md•id =ð MDEP_ECHO ) 1394 ­p = `queue_³ek_ž ( ­ps ); 1396 ­p = `£¬ch_­p_by_md•id ( md•id ); 1398 ià(! ­p ) 1399  MCAP_MDL_BUSY ; 1401 chªÃl = `cÚÃù_chªÃl ( ­p , mþ , md•id ); 1402 ià(! chªÃl ) 1403  MCAP_MDL_BUSY ; 1406 mþ -> cb -> u£r_d©a = chªÃl ; 1408 ià( md•id =ð MDEP_ECHO ) { 1409 * cÚf ) { 1410  CHANNEL_TYPE_ANY : 1411 * cÚf = CHANNEL_TYPE_RELIABLE ; 1413  CHANNEL_TYPE_RELIABLE : 1415  CHANNEL_TYPE_STREAM : 1416  MCAP_CONFIGURATION_REJECTED ; 1425  MCAP_CONFIGURATION_REJECTED ; 1428 ià(! `mÿp_£t_d©a_chª_mode ( mÿp , L2CAP_MODE_ERTM , & g”r )) { 1429 `”rÜ ("E¼Ü: %s", g”r -> mes§ge ); 1430 `g_”rÜ_ä“ ( g”r ); 1431  MCAP_MDL_BUSY ; 1436  MCAP_SUCCESS ; 1439 md• = `queue_fšd ( ­p -> md•s , m©ch_md•_by_id , `INT_TO_PTR ( md•id )); 1440 ià(! md• ) 1441  MCAP_MDL_BUSY ; 1443 * cÚf ) { 1444  CHANNEL_TYPE_ANY : 1445 ià( md• -> rÞe =ð HAL_HEALTH_MDEP_ROLE_SINK ) { 1446  MCAP_CONFIGURATION_REJECTED ; 1448 ià( `queue_Ëngth ( chªÃl -> dev -> chªÃls ) <= 1) 1449 * cÚf = CHANNEL_TYPE_RELIABLE ; 1451 * cÚf = CHANNEL_TYPE_STREAM ; 1454  CHANNEL_TYPE_STREAM : 1455 ià( md• -> rÞe =ð HAL_HEALTH_MDEP_ROLE_SOURCE ) 1456  MCAP_CONFIGURATION_REJECTED ; 1458  CHANNEL_TYPE_RELIABLE : 1459 ià( md• -> rÞe =ð HAL_HEALTH_MDEP_ROLE_SOURCE ) 1460  MCAP_CONFIGURATION_REJECTED ; 1469  MCAP_CONFIGURATION_REJECTED ; 1472 ià(! `mÿp_£t_d©a_chª_mode ( mÿp , `cÚf_to_l2ÿp (* cÚf ), & g”r )) { 1473 `”rÜ ("h—Éh:ƒ¼Ü s‘tšg L2CAP mode: %s", g”r -> mes§ge ); 1474 `g_”rÜ_ä“ ( g”r ); 1475  MCAP_MDL_BUSY ; 1478  MCAP_SUCCESS ; 1479 } } 1481  ušt8_t $mÿp_mdl_»cÚn_»q_cb ( mÿp_mdl * mdl , * d©a ) 1483  h—Éh_chªÃl * chªÃl ; 1484 GE¼Ü * ”r = NULL ; 1486 `DBG (""); 1488 chªÃl = `£¬ch_chªÃl_by_mdl ( mdl ); 1489 ià(! chªÃl ) { 1490 `”rÜ ("health: channel data does‚otƒxist"); 1491  MCAP_UNSPECIFIED_ERROR ; 1494 ià(! `mÿp_£t_d©a_chª_mode ( mÿp , 1495 `cÚf_to_l2ÿp ( chªÃl -> ty³ ), & ”r )) { 1496 `”rÜ ("h—Éh: %s", ”r -> mes§ge ); 1497 `g_”rÜ_ä“ ( ”r ); 1498  MCAP_MDL_BUSY ; 1501  MCAP_SUCCESS ; 1502 } } 1504  $cÚÃù_mdl_cb ( mÿp_mdl * mdl , GE¼Ü * g”r , gpoš‹r d©a ) 1506  h—Éh_chªÃl * chªÃl = d©a ; 1507  fd ; 1509 `DBG (""); 1511 ià( g”r ) { 1512 `”rÜ ("h—Éh:ƒ¼Ü cÚÃùšgØMDL %s", g”r -> mes§ge ); 1513  çž ; 1516 fd = `mÿp_mdl_g‘_fd ( chªÃl -> mdl ); 1517 ià( fd < 0) { 1518 `”rÜ ("health:ƒrror„etrieving fd"); 1519  çž ; 1522 `šfo ("health: MDL connected"); 1523 chªÃl -> mdl_cÚn = Œue ; 1526 ià(! `queue_Ëngth ( chªÃl -> dev -> chªÃls )) 1527 ià( chªÃl -> ty³ !ð CHANNEL_TYPE_RELIABLE ) 1528  çž ; 1530 `£nd_chªÃl_¡©e_nÙify ( chªÃl , HAL_HEALTH_CHANNEL_CONNECTED , fd ); 1534 çž : 1536 `de¡roy_chªÃl ( chªÃl ); 1537 } } 1539  $»cÚÃù_mdl_cb ( mÿp_mdl * mdl , GE¼Ü * g”r , gpoš‹r d©a ) 1541  h—Éh_chªÃl * chªÃl = d©a ; 1542 ušt8_t mode ; 1543 GE¼Ü * ”r = NULL ; 1545 `DBG (""); 1547 ià( g”r ) { 1548 `”rÜ ("h—Éh:ƒ¼Ü„ecÚÃùšgØMDL %s", g”r -> mes§ge ); 1549  çž ; 1552 chªÃl -> mdl_id = `mÿp_mdl_g‘_mdlid ( mdl ); 1554 ià( chªÃl -> ty³ =ð CHANNEL_TYPE_RELIABLE ) 1555 mode = L2CAP_MODE_ERTM ; 1557 mode = L2CAP_MODE_STREAMING ; 1559 ià(! `mÿp_cÚÃù_mdl ( chªÃl -> mdl , mode , chªÃl-> dev -> dýsm , 1560 cÚÃù_mdl_cb , chªÃl , 1561 NULL , & ”r )) { 1562 `”rÜ ("health:ƒrror connectingo mdl"); 1563 `g_”rÜ_ä“ ( ”r ); 1564  çž ; 1569 çž : 1571 `de¡roy_chªÃl ( chªÃl ); 1572 } } 1574  $»cÚÃù_mdl ( h—Éh_chªÃl * chªÃl ) 1576 GE¼Ü * g”r = NULL ; 1578 `DBG (""); 1580 ià(! chªÃl ) 1583 ià(! `mÿp_»cÚÃù_mdl ( chªÃl -> mdl , »cÚÃù_mdl_cb , channel, 1584 NULL , & g”r )){ 1585 `”rÜ ("h—Éh:„ecÚÃù fažed %s", g”r -> mes§ge ); 1586 `de¡roy_chªÃl ( chªÃl ); 1590 } } 1592  $ü—‹_mdl_cb ( mÿp_mdl * mdl , ušt8_t ty³ , GE¼Ü * g”r , 1593 gpoš‹r d©a ) 1595  h—Éh_chªÃl * chªÃl = d©a ; 1596 ušt8_t mode ; 1597 GE¼Ü * ”r = NULL ; 1599 `DBG (""); 1600 ià( g”r ) { 1601 `”rÜ ("h—Éh:ƒ¼Ü c»©šg MDL %s", g”r -> mes§ge ); 1602  çž ; 1605 ià( chªÃl -> ty³ =ð CHANNEL_TYPE_ANY &&ype != CHANNEL_TYPE_ANY) 1606 chªÃl -> ty³ =ype; 1612 ià( chªÃl -> ty³ !=ype) { 1614 `”rÜ ("health: channelype„equested %d…referred %d‚ot same", 1615 chªÃl -> ty³ ,ype); 1616  çž ; 1619 ià(! chªÃl -> mdl ) 1620 chªÃl -> mdl = `mÿp_mdl_»f (mdl); 1622 chªÃl -> ty³ =ype; 1623 chªÃl -> mdl_id = `mÿp_mdl_g‘_mdlid ( mdl ); 1625 ià( chªÃl -> ty³ =ð CHANNEL_TYPE_RELIABLE ) 1626 mode = L2CAP_MODE_ERTM ; 1628 mode = L2CAP_MODE_STREAMING ; 1630 ià(! `mÿp_cÚÃù_mdl ( chªÃl -> mdl , mode , chªÃl-> dev -> dýsm , 1631 cÚÃù_mdl_cb , chªÃl , 1632 NULL , & ”r )) { 1633 `”rÜ ("health:ƒrror connectingo mdl"); 1634 `g_”rÜ_ä“ ( ”r ); 1635  çž ; 1640 çž : 1641 `de¡roy_chªÃl ( chªÃl ); 1642 } } 1644  boÞ $check_rÞe ( ušt8_t »c_rÞe , ušt8_ˆ ­p_rÞe ) 1646 ià(( »c_rÞe =ð HAL_HEALTH_MDEP_ROLE_SINK && 1647 ­p_rÞe =ð HAL_HEALTH_MDEP_ROLE_SOURCE ) || 1648 ( »c_rÞe =ð HAL_HEALTH_MDEP_ROLE_SOURCE && 1649 ­p_rÞe =ð HAL_HEALTH_MDEP_ROLE_SINK )) 1650  Œue ; 1652  çl£ ; 1653 } } 1655  boÞ $g‘_md•_äom_»c (cÚ¡ sdp_»cÜd_t * »c , ušt8_t rÞe , 1656 ušt16_t d_ty³ , ušt8_t * md• ) 1658 sdp_d©a_t * li¡ , * ã© ; 1660 ià(! md• ) 1661  çl£ ; 1663 li¡ = `sdp_d©a_g‘ ( »c , SDP_ATTR_SUPPORTED_FEATURES_LIST ); 1664 ià(! li¡ || ! `SDP_IS_SEQ Öi¡-> dtd )) 1665  çl£ ; 1667  ã© = li¡ -> v® . d©a£q ; f—t; f—ˆðã©-> Ãxt ) { 1668 sdp_d©a_t * d©a_ty³ , * md•id , * rÞe_t ; 1670 ià(! `SDP_IS_SEQ ( ã© -> dtd )) 1673 md•id = ã© -> v® . d©a£q ; 1674 ià(! md•id ) 1677 d©a_ty³ = md•id -> Ãxt ; 1678 ià(! d©a_ty³ ) 1681 rÞe_t = d©a_ty³ -> Ãxt ; 1682 ià(! rÞe_t ) 1685 ià( d©a_ty³ -> dtd !ð SDP_UINT16 || md•id ->dtd !ð SDP_UINT8 || 1686 rÞe_t -> dtd !ð SDP_UINT8 ) 1689 ià( d©a_ty³ -> v® . ušt16 !ð d_ty³ || 1690 ! `check_rÞe ( rÞe_t -> v® . ušt8 , rÞe )) 1693 * md• = md•id -> v® . ušt8 ; 1695  Œue ; 1698  çl£ ; 1699 } } 1701  boÞ $g‘_»mÙe_md• ( sdp_li¡_t * »cs ,  h—Éh_chªÃl * chªÃl ) 1703  h—Éh_­p * ­p ; 1704  md•_cfg * md• ; 1705 ušt8_t md•_id ; 1707 ­p = `queue_fšd ( ­ps , m©ch_­p_by_id , 1708 `INT_TO_PTR ( chªÃl -> dev -> ­p_id )); 1709 ià(! ­p ) 1710  çl£ ; 1712 md• = `queue_fšd ( ­p -> md•s , m©ch_md•_by_id , 1713 `INT_TO_PTR ( chªÃl -> md•_id )); 1714 ià(! md• ) 1715  çl£ ; 1717 ià(! `g‘_md•_äom_»c ( »cs -> d©a , md• -> rÞe , md•-> d©a_ty³ , 1718 & md•_id )) { 1719 `”rÜ ("h—Éh:‚Øm©chšg MDEP: %u", chªÃl -> md•_id ); 1720  çl£ ; 1723 chªÃl -> »mÙe_md• = md•_id ; 1724  Œue ; 1725 } } 1727  boÞ $ü—‹_mdl ( h—Éh_chªÃl * chªÃl ) 1729  h—Éh_­p * ­p ; 1730  md•_cfg * md• ; 1731 ušt8_t ty³ ; 1732 GE¼Ü * g”r = NULL ; 1734 ­p = `queue_fšd ( ­ps , m©ch_­p_by_id , 1735 `INT_TO_PTR ( chªÃl -> dev -> ­p_id )); 1736 ià(! ­p ) 1737  çl£ ; 1739 md• = `queue_fšd ( ­p -> md•s , m©ch_md•_by_id , 1740 `INT_TO_PTR ( chªÃl -> md•_id )); 1741 ià(! md• ) 1742  çl£ ; 1744 ià( md• -> rÞe =ð HAL_HEALTH_MDEP_ROLE_SOURCE ) 1745 ty³ = chªÃl ->type; 1747 ty³ = CHANNEL_TYPE_ANY ; 1749 ià(! `mÿp_ü—‹_mdl ( chªÃl -> dev -> mþ , chªÃl-> »mÙe_md• , 1750 ty³ , ü—‹_mdl_cb , chªÃl , NULL , & g”r )) { 1751 `”rÜ ("h—Éh:ƒ¼Ü c»©šg mdÈ%s", g”r -> mes§ge ); 1752 `g_”rÜ_ä“ ( g”r ); 1753  çl£ ; 1756  Œue ; 1757 } } 1759  boÞ $£t_mþ_cb ( mÿp_mþ * mþ , gpoš‹r u£r_d©a , GE¼Ü ** ”r ) 1761  `mÿp_mþ_£t_cb ( mþ , u£r_d©a , ”r , 1762 MCAP_MDL_CB_CONNECTED , mÿp_mdl_cÚÃùed_cb , 1763 MCAP_MDL_CB_CLOSED , mÿp_mdl_þo£d_cb , 1764 MCAP_MDL_CB_DELETED , mÿp_mdl_d–‘ed_cb , 1765 MCAP_MDL_CB_ABORTED , mÿp_mdl_abÜ‹d_cb , 1766 MCAP_MDL_CB_REMOTE_CONN_REQ , mÿp_mdl_cÚn_»q_cb , 1767 MCAP_MDL_CB_REMOTE_RECONN_REQ , mÿp_mdl_»cÚn_»q_cb , 1768 MCAP_MDL_CB_INVALID ); 1769 } } 1771  $ü—‹_mþ_cb ( mÿp_mþ * mþ , GE¼Ü * ”r , gpoš‹r d©a ) 1773  h—Éh_chªÃl * chªÃl = d©a ; 1774 gboÞ—n »t ; 1775 GE¼Ü * g”r = NULL ; 1777 `DBG (""); 1779 ià( ”r ) { 1780 `”rÜ ("h—Éh:ƒ¼Ü c»©šg MCL : %s", ”r -> mes§ge ); 1781  çž ; 1784 ià(! chªÃl -> dev -> mþ ) 1785 chªÃl -> dev -> mþ = `mÿp_mþ_»f (mcl); 1787 `šfo ("health: MCL connected"); 1789 »t = `£t_mþ_cb ( chªÃl -> dev -> mþ , chªÃl, & g”r ); 1790 ià(! »t ) { 1791 `”rÜ ("h—Éh:ƒ¼Ü s‘tšg mdÈÿÎbacks: %s", g”r -> mes§ge ); 1792 `g_”rÜ_ä“ ( g”r ); 1793  çž ; 1796 ià(! `ü—‹_mdl ( chªÃl )) 1797  çž ; 1801 çž : 1802 `de¡roy_chªÃl ( chªÃl ); 1803 } } 1805  $£¬ch_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r d©a ) 1807  h—Éh_chªÃl * chªÃl = d©a ; 1808 GE¼Ü * g”r = NULL ; 1810 `DBG (""); 1812 ià( ”r < 0 || ! »cs ) { 1813 `”rÜ ("health: Error getting„emote SDP„ecords"); 1814  çž ; 1817 ià( `g‘_cýsm ( »cs , & chªÃl -> dev -> cýsm ) < 0) { 1818 `”rÜ ("health: Can't get„emote PSM for control channel"); 1819  çž ; 1822 ià( `g‘_dýsm ( »cs , & chªÃl -> dev -> dýsm ) < 0) { 1823 `”rÜ ("health: Can't get„emote PSM for data channel"); 1824  çž ; 1827 ià(! `g‘_»mÙe_md• ( »cs , chªÃl )) { 1828 `”rÜ ("health: Can't get„emote MDEP data"); 1829  çž ; 1832 ià(! `mÿp_ü—‹_mþ ( mÿp , & chªÃl -> dev -> d¡ , chªÃl->dev-> cýsm , 1833 ü—‹_mþ_cb , chªÃl , NULL , & g”r )) { 1834 `”rÜ ("h—Éh:ƒ¼Ü c»©šg mþ %s", g”r -> mes§ge ); 1835 `g_”rÜ_ä“ ( g”r ); 1836  çž ; 1841 çž : 1842 `de¡roy_chªÃl ( chªÃl ); 1843 } } 1845  $cÚÃù_mþ ( h—Éh_chªÃl * chªÃl ) 1847 uuid_t uuid ; 1848  ”r ; 1850 `DBG (""); 1852 `bt_¡ršg2uuid (& uuid , HDP_UUID ); 1854 ”r = `bt_£¬ch_£rviû (& ad­‹r_addr , & chªÃl -> dev -> d¡ , & uuid , 1855 £¬ch_cb , chªÃl , NULL , 0); 1856 ià(! ”r ) 1857 `£nd_chªÃl_¡©e_nÙify ( chªÃl , 1858 HAL_HEALTH_CHANNEL_CONNECTING , -1); 1860  ”r ; 1861 } } 1863  h—Éh_­p * $g‘_­p ( ušt16_t ­p_id ) 1865  `queue_fšd ( ­ps , m©ch_­p_by_id , `INT_TO_PTR ( ­p_id )); 1866 } } 1868  h—Éh_chªÃl * $g‘_chªÃl ( h—Éh_­p * ­p , 1869 ušt8_t md•_šdex , 1870  h—Éh_deviû * dev ) 1872  h—Éh_chªÃl * chªÃl ; 1873 ušt8_t šdex ; 1875 ià(! dev ) 1876  NULL ; 1878 šdex = md•_šdex + 1; 1879 chªÃl = `queue_fšd ( dev -> chªÃls , m©ch_chªÃl_by_md•_id , 1880 `INT_TO_PTR ( šdex )); 1881 ià( chªÃl ) 1882  chªÃl ; 1884  `ü—‹_chªÃl ( ­p , šdex , dev ); 1885 } } 1887  $bt_h—Éh_cÚÃù_chªÃl (cÚ¡ * buf , ušt16_t Ën ) 1889 cÚ¡  h®_cmd_h—Éh_cÚÃù_chªÃl * cmd = buf ; 1890  h®_r¥_h—Éh_cÚÃù_chªÃl r¥ ; 1891  h—Éh_deviû * dev = NULL ; 1892  h—Éh_chªÃl * chªÃl = NULL ; 1893  h—Éh_­p * ­p ; 1895 `DBG (""); 1897 ­p = `g‘_­p ( cmd -> ­p_id ); 1898 ià(! ­p ) 1899  £nd_r¥ ; 1901 dev = `g‘_deviû ( ­p , cmd -> bdaddr ); 1902 ià(! dev ) 1903  £nd_r¥ ; 1905 chªÃl = `g‘_chªÃl ( ­p , cmd -> md•_šdex , dev ); 1906 ià(! chªÃl ) 1907  £nd_r¥ ; 1909 ià(! `queue_Ëngth ( dev -> chªÃls )) { 1910 ià( chªÃl -> ty³ !ð CHANNEL_TYPE_RELIABLE ) { 1911 `”rÜ ("health: first data shannel should be„eliable"); 1912  çž ; 1916 ià(! dev -> mþ ) { 1917 ià( `cÚÃù_mþ ( chªÃl ) < 0) { 1918 `”rÜ ("health:ƒrror„etrieving HDP SDP„ecord"); 1919  çž ; 1923 ià( chªÃl -> mdl && chªÃl-> mdl_cÚn ) 1924  çž ; 1927 ià(! chªÃl -> mdl && ! `ü—‹_mdl (channel)) 1928  çž ; 1931 ià( chªÃl -> mdl && !chªÃl-> mdl_cÚn ) { 1932 ià( `»cÚÃù_mdl ( chªÃl ) < 0) 1933  çž ; 1938 r¥ . chªÃl_id = chªÃl -> id ; 1939 `c_£nd_r¥_fuÎ ( h®_c , HAL_SERVICE_ID_HEALTH , 1940 HAL_OP_HEALTH_CONNECT_CHANNEL , 1941 ( r¥ ), &rsp, -1); 1944 çž : 1945 `queue_»move ( chªÃl -> dev -> chªÃls , channel); 1946 `ä“_h—Éh_chªÃl ( chªÃl ); 1948 £nd_r¥ : 1949 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HEALTH , 1950 HAL_OP_HEALTH_CONNECT_CHANNEL , HAL_STATUS_FAILED ); 1951 } } 1953  $chªÃl_d–‘e_cb ( GE¼Ü * g”r , gpoš‹r d©a ) 1955  h—Éh_chªÃl * chªÃl = d©a ; 1957 `DBG (""); 1959 ià( g”r ) { 1960 `”rÜ ("h—Éh: chªÃÈd–‘çžed %s", g”r -> mes§ge ); 1964 `de¡roy_chªÃl ( chªÃl ); 1965 } } 1967  $bt_h—Éh_de¡roy_chªÃl (cÚ¡ * buf , ušt16_t Ën ) 1969 cÚ¡  h®_cmd_h—Éh_de¡roy_chªÃl * cmd = buf ; 1970  h—Éh_chªÃl * chªÃl ; 1971 GE¼Ü * g”r = NULL ; 1973 `DBG (""); 1975 chªÃl = `£¬ch_chªÃl_by_id ( cmd -> chªÃl_id ); 1976 ià(! chªÃl ) 1977  çž ; 1979 ià(! `mÿp_d–‘e_mdl ( chªÃl -> mdl , chªÃl_d–‘e_cb , channel, 1980 NULL , & g”r )) { 1981 `”rÜ ("h—Éh: chªÃÈd–‘çžed %s", g”r -> mes§ge ); 1982  çž ; 1985 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HEALTH , 1986 HAL_OP_HEALTH_DESTROY_CHANNEL , HAL_STATUS_SUCCESS ); 1990 çž : 1991 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HEALTH , 1992 HAL_OP_HEALTH_DESTROY_CHANNEL , HAL_STATUS_INVALID ); 1993 } } 1995 cÚ¡  c_hªdËr gcmd_hªdËrs [] = { 1997 { bt_h—Éh_»gi¡”_­p , Œue , 1998 ( h®_cmd_h—Éh_»g_­p ) }, 2000 { bt_h—Éh_md•_cfg_d©a , Œue , 2001 ( h®_cmd_h—Éh_md• ) }, 2003 { bt_h—Éh_uÄegi¡”_­p , çl£ , 2004 ( h®_cmd_h—Éh_uÄeg_­p ) }, 2006 { bt_h—Éh_cÚÃù_chªÃl , çl£ , 2007 ( h®_cmd_h—Éh_cÚÃù_chªÃl ) }, 2009 { bt_h—Éh_de¡roy_chªÃl , çl£ , 2010 ( h®_cmd_h—Éh_de¡roy_chªÃl ) }, 2013  $mþ_cÚÃùed ( mÿp_mþ * mþ , gpoš‹r d©a ) 2015 GE¼Ü * g”r = NULL ; 2016 boÞ »t ; 2018 `DBG (""); 2020 `šfo ("health: MCL connected"); 2021 »t = `£t_mþ_cb ( mþ , NULL , & g”r ); 2022 ià(! »t ) { 2023 `”rÜ ("h—Éh:ƒ¼Ü s‘tšg mþ c®lbacks: %s", g”r -> mes§ge ); 2024 `g_”rÜ_ä“ ( g”r ); 2026 } } 2028  $mþ_»cÚÃùed ( mÿp_mþ * mþ , gpoš‹r d©a ) 2030  h—Éh_deviû * dev ; 2032 `DBG (""); 2034 `šfo ("health: MCL„econnected"); 2035 dev = `£¬ch_dev_by_mþ ( mþ ); 2036 ià(! dev ) { 2037 `”rÜ ("device data does‚otƒxists"); 2040 } } 2042  $mþ_discÚÃùed ( mÿp_mþ * mþ , gpoš‹r d©a ) 2044  h—Éh_deviû * dev ; 2046 `DBG (""); 2048 `šfo ("health: MCL disconnected"); 2049 dev = `£¬ch_dev_by_mþ ( mþ ); 2050 `uÄef_mþ ( dev ); 2051 } } 2053  $mþ_unÿched ( mÿp_mþ * mþ , gpoš‹r d©a ) 2056 } } 2058 boÞ $bt_h—Éh_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ) 2060 GE¼Ü * ”r = NULL ; 2062 `DBG (""); 2064 `baýy (& ad­‹r_addr , addr ); 2066 mÿp = `mÿp_ü—‹_š¡ªû (& ad­‹r_addr , BT_IO_SEC_MEDIUM , 0, 0, 2067 mþ_cÚÃùed , mþ_»cÚÃùed , 2068 mþ_discÚÃùed , mþ_unÿched , 2069 NULL , 2070 NULL , & ”r ); 2071 ià(! mÿp ) { 2072 `”rÜ ("h—Éh: MCAP in¡ªû c»©iÚ fažed %s", ”r -> mes§ge ); 2073 `g_”rÜ_ä“ ( ”r ); 2074  çl£ ; 2077 h®_c = c ; 2078 ­ps = `queue_Ãw (); 2079 ià(! ­ps ) 2080  çl£ ; 2082 `c_»gi¡” ( h®_c , HAL_SERVICE_ID_HEALTH , cmd_hªdËrs , 2083 `G_N_ELEMENTS ( cmd_hªdËrs )); 2085  Œue ; 2086 } } 2088  $bt_h—Éh_uÄegi¡” () 2090 `DBG (""); 2092 `mÿp_š¡ªû_uÄef ( mÿp ); 2093 `queue_de¡roy ( ­ps , ä“_h—Éh_­p ); 2094 `c_uÄegi¡” ( h®_c , HAL_SERVICE_ID_HEALTH ); 2095 h®_c = NULL ; 2096 } } @android/health.h 24 boÞ bt_h—Éh_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ); 25  bt_h—Éh_uÄegi¡” (); @android/hidhost.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dšt.h > 29  ~<¡dboÞ.h > 30  ~<”ºo.h > 31  ~ 32  ~ 33  ~<ùy³.h > 35  ~ 37  ~"btio/btio.h " 38  ~"lib/blu‘oÙh.h " 39  ~"lib/sdp.h " 40  ~"lib/sdp_lib.h " 41  ~"¤c/sh¬ed/mgmt.h " 42  ~"¤c/sh¬ed/utž.h " 43  ~"¤c/sh¬ed/uhid.h " 44  ~"¤c/sdp-þ›Á.h " 45  ~"¤c/uuid-h–³r.h " 46  ~"¤c/log.h " 48  ~"h®-msg.h " 49  ~"c-commÚ.h " 50  ~"c.h " 51  ~"blu‘oÙh.h " 52  ~"g©t.h " 53  ~"hog.h " 54  ~"hidho¡.h " 55  ~"utžs.h " 57  #L2CAP_PSM_HIDP_CTRL 0x11 ) 58  #L2CAP_PSM_HIDP_INTR 0x13 ) 61  #HID_MSG_HANDSHAKE 0x00 ) 62  #HID_MSG_CONTROL 0x10 ) 63  #HID_MSG_GET_REPORT 0x40 ) 64  #HID_MSG_SET_REPORT 0x50 ) 65  #HID_MSG_GET_PROTOCOL 0x60 ) 66  #HID_MSG_SET_PROTOCOL 0x70 ) 67  #HID_MSG_DATA 0xa0 ) 69  #HID_MSG_TYPE_MASK 0xf0 ) 72  #HID_DATA_TYPE_INPUT 0x01 ) 73  #HID_DATA_TYPE_OUTPUT 0x02 ) 74  #HID_DATA_TYPE_FEATURE 0x03 ) 77  #HID_PROTO_BOOT 0x00 ) 78  #HID_PROTO_REPORT 0x01 ) 81  #HID_GET_REPORT_SIZE_FIELD 0x08 ) 84  #HID_VIRTUAL_CABLE_UNPLUG 0x05 ) 86  #HOG_UUID "00001812-0000-1000-8000-00805f9b34fb" ) 88  bdaddr_t gad­‹r_addr ; 90  GIOChªÃl * gù¾_io = NULL ; 91  GIOChªÃl * gšŒ_io = NULL ; 92  GSLi¡ * gdeviûs = NULL ; 93  ghog_­p = 0; 95  c * gh®_c = NULL ; 97  shid_deviû { 98 bdaddr_t md¡ ; 99 ušt8_t m¡©e ; 100 ušt8_t msubþass ; 101 ušt16_t mv’dÜ ; 102 ušt16_t m´oduù ; 103 ušt16_t mv”siÚ ; 104 ušt8_t mcouÁry ; 105  mrd_size ; 106 * mrd_d©a ; 107 ušt8_t mboÙ_dev ; 108 GIOChªÃl * mù¾_io ; 109 GIOChªÃl * mšŒ_io ; 110 gušt mù¾_w©ch ; 111 gušt mšŒ_w©ch ; 112  bt_uhid * muhid ; 113 ušt8_t mÏ¡_hid_msg ; 114  bt_hog * mhog ; 115  m£c_Ëv– ; 118  $deviû_cmp ( gcÚ¡poš‹r s , gcÚ¡poš‹¸ u£r_d©a ) 120 cÚ¡  hid_deviû * dev = s ; 121 cÚ¡ bdaddr_t * d¡ = u£r_d©a ; 123  `bacmp (& dev -> d¡ , dst); 124 } } 126  $hid_deviû_ä“ (* d©a ) 128  hid_deviû * dev = d©a ; 130 ià( dev -> ù¾_w©ch > 0) 131 `g_sourû_»move ( dev -> ù¾_w©ch ); 133 ià( dev -> šŒ_w©ch > 0) 134 `g_sourû_»move ( dev -> šŒ_w©ch ); 136 ià( dev -> šŒ_io ) 137 `g_io_chªÃl_uÄef ( dev -> šŒ_io ); 139 ià( dev -> ù¾_io ) 140 `g_io_chªÃl_uÄef ( dev -> ù¾_io ); 142 ià( dev -> uhid ) 143 `bt_uhid_uÄef ( dev -> uhid ); 145 ià( dev -> hog ) 146 `bt_hog_uÄef ( dev -> hog ); 148 `g_ä“ ( dev -> rd_d©a ); 149 `g_ä“ ( dev ); 150 } } 152  $hid_deviû_»move ( hid_deviû * dev ) 154 deviûs = `g_¦i¡_»move (deviûs, dev ); 155 `hid_deviû_ä“ ( dev ); 156 } } 158  hid_deviû * $hid_deviû_Ãw (cÚ¡ bdaddr_t * addr ) 160  hid_deviû * dev ; 162 dev = `g_Ãw0 ( hid_deviû , 1); 163 `baýy (& dev -> d¡ , addr ); 164 dev -> ¡©e = HAL_HIDHOST_STATE_DISCONNECTED ; 165 dev -> £c_Ëv– = BT_IO_SEC_LOW ; 167 deviûs = `g_¦i¡_­³nd (deviûs, dev ); 169  dev ; 170 } } 172  boÞ $hex2buf (cÚ¡ ušt8_t * hex , ušt8_ˆ* buf ,  buf_size ) 174  i , j ; 175  c ; 176 ušt8_t b ; 178  i = 0, j = 0; i < buf_size ; i++, j++) { 179 c = `touµ” ( hex [ j ]); 181 ià( c >= '0' && c <= '9') 182 b = c - '0'; 183 ià( c >= 'A' && c <= 'F') 184 b = 10 + c - 'A'; 186  çl£ ; 188 j ++; 190 c = `touµ” ( hex [ j ]); 192 ià( c >= '0' && c <= '9') 193 b = b * 16 + c - '0'; 194 ià( c >= 'A' && c <= 'F') 195 b = b * 16 + 10 + c - 'A'; 197  çl£ ; 199 buf [ i ] = b ; 202  Œue ; 203 } } 205  $hªdË_uhid_ouut ( uhid_ev’t * ev’t , * u£r_d©a ) 207  uhid_ouut_»q * ouut = & ev’t -> u .output; 208  hid_deviû * dev = u£r_d©a ; 209  fd , »q_size ; 210 ušt8_t * »q ; 212 ià(! dev -> ù¾_io ) 215 »q_size = 1 + ouut -> size ; 216 »q = `m®loc0 ( »q_size ); 217 ià(! »q ) 220 »q [0] = HID_MSG_SET_REPORT | ouut -> ¹y³ ; 221 `memýy ( »q + 1, ouut -> d©a , »q_size - 1); 223 fd = `g_io_chªÃl_unix_g‘_fd ( dev -> ù¾_io ); 225 ià( `wr™e ( fd , »q , »q_size ) < 0) 226 `”rÜ ("hidhost:ƒrror writing set_report: %s (%d)", 227 `¡»¼Ü ( ”ºo ),ƒrrno); 229 `ä“ ( »q ); 230 } } 232  gboÞ—n $šŒ_io_w©ch_cb ( GIOChªÃl * chª , gpoš‹r d©a ) 234  hid_deviû * dev = d©a ; 235 ušt8_t buf [ UHID_DATA_MAX ]; 236  uhid_ev’t ev ; 237  fd , b»ad , ”r ; 240 ià(! dev -> uhid ) 241  TRUE ; 243 fd = `g_io_chªÃl_unix_g‘_fd ( chª ); 244 b»ad = `»ad ( fd , buf , (buf)); 245 ià( b»ad < 0) { 246 `”rÜ ("hidhost:„ead from interrupt failed: %s(%d)", 247 `¡»¼Ü ( ”ºo ), -errno); 248  TRUE ; 252 ià( b»ad =ð0 || buf [0] !ð( HID_MSG_DATA | HID_DATA_TYPE_INPUT )) 253  TRUE ; 256 `mem£t (& ev , 0, (ev)); 257 ev . ty³ = UHID_INPUT ; 258 ev . u . šput . size = b»ad - 1; 259 `memýy ( ev . u . šput . d©a , & buf [1],ƒv.u.šput. size ); 261 ”r = `bt_uhid_£nd ( dev -> uhid , & ev ); 262 ià( ”r < 0) 263 `DBG ("bt_uhid_£nd: % (%d)", `¡»¼Ü (- ”r ), -err); 265  TRUE ; 266 } } 268  $bt_hid_nÙify_¡©e ( hid_deviû * dev , ušt8_t ¡©e ) 270  h®_ev_hidho¡_cÚn_¡©e ev ; 271  add»ss [18]; 273 ià( dev -> ¡©e == state) 276 dev -> ¡©e = state; 278 `ba2¡r (& dev -> d¡ , add»ss ); 279 `DBG ("deviû % ¡©%u", add»ss , ¡©e ); 281 `bdaddr2ªdroid (& dev -> d¡ , ev . bdaddr ); 282 ev . ¡©e = state; 284 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HIDHOST , 285 HAL_EV_HIDHOST_CONN_STATE , ( ev ), &ev); 286 } } 288  gboÞ—n $šŒ_w©ch_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 289 gpoš‹r d©a ) 291  hid_deviû * dev = d©a ; 293 ià( cÚd & ( G_IO_HUP | G_IO_ERR | G_IO_NVAL )) 294  ”rÜ ; 296 ià( cÚd & G_IO_IN ) 297  `šŒ_io_w©ch_cb ( chª , d©a ); 299 ”rÜ : 300 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_DISCONNECTED ); 307 ià(( cÚd & ( G_IO_HUP | G_IO_ERR )è&& dev -> ù¾_w©ch ) 308 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 311 ià( dev -> ù¾_io && !( cÚd & G_IO_NVAL )) 312 `g_io_chªÃl_shutdown ( dev -> ù¾_io , TRUE , NULL ); 314 `hid_deviû_»move ( dev ); 316  FALSE ; 317 } } 319  $bt_hid_nÙify_´Ùo_mode ( hid_deviû * dev , ušt8_t * buf , 320  Ën ) 322  h®_ev_hidho¡_´Ùo_mode ev ; 323  add»ss [18]; 325 `ba2¡r (& dev -> d¡ , add»ss ); 326 `DBG ("deviû %s", add»ss ); 328 `mem£t (& ev , 0, (ev)); 329 `bdaddr2ªdroid (& dev -> d¡ , ev . bdaddr ); 331 ià( buf [0] =ð HID_MSG_DATA ) { 332 ev . ¡©us = HAL_HIDHOST_STATUS_OK ; 333 ià( buf [1] =ð HID_PROTO_REPORT ) 334 ev . mode = HAL_HIDHOST_REPORT_PROTOCOL ; 335 ià( buf [1] =ð HID_PROTO_BOOT ) 336 ev . mode = HAL_HIDHOST_BOOT_PROTOCOL ; 338 ev . mode = HAL_HIDHOST_UNSUPPORTED_PROTOCOL ; 341 ev . ¡©us = buf [0]; 342 ev . mode = HAL_HIDHOST_UNSUPPORTED_PROTOCOL ; 345 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HIDHOST , 346 HAL_EV_HIDHOST_PROTO_MODE , ( ev ), &ev); 347 } } 349  $bt_hid_nÙify_g‘_»pÜt ( hid_deviû * dev , ušt8_t * buf , 350  Ën ) 352  h®_ev_hidho¡_g‘_»pÜt * ev ; 353  ev_Ën ; 354  add»ss [18]; 356 `ba2¡r (& dev -> d¡ , add»ss ); 357 `DBG ("deviû %s", add»ss ); 359 ev_Ën = (* ev ); 361 ià(!(( buf [0] =ð( HID_MSG_DATA | HID_DATA_TYPE_INPUT )) || 362 ( buf [0] =ð( HID_MSG_DATA | HID_DATA_TYPE_OUTPUT )) || 363 ( buf [0] =ð( HID_MSG_DATA | HID_DATA_TYPE_FEATURE )))) { 364 ev = `g_m®loc0 ( ev_Ën ); 365 ev -> ¡©us = buf [0]; 366 `bdaddr2ªdroid (& dev -> d¡ , ev -> bdaddr ); 367  £nd ; 374 ev_Ën +ð( dev -> boÙ_dev è? ( Ën - 1) : (len - 2); 375 ev = `g_m®loc0 ( ev_Ën ); 376 ev -> ¡©us = HAL_HIDHOST_STATUS_OK ; 377 `bdaddr2ªdroid (& dev -> d¡ , ev -> bdaddr ); 383 ià( dev -> boÙ_dev ) { 384 ev -> Ën =†en - 1; 385 `memýy ( ev -> d©a , buf + 1,ƒv-> Ën ); 387 ev -> Ën =†en - 2; 388 `memýy ( ev -> d©a , buf + 2,ƒv-> Ën ); 391 £nd : 392 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HIDHOST , 393 HAL_EV_HIDHOST_GET_REPORT , ev_Ën , ev ); 394 `g_ä“ ( ev ); 395 } } 397  $bt_hid_nÙify_hªdshake ( hid_deviû * dev , ušt8_t * buf , 398  Ën ) 400  h®_ev_hidho¡_hªdshake ev ; 402 `bdaddr2ªdroid (& dev -> d¡ , ev . bdaddr ); 405 ev . ¡©us = buf [0]; 406 ià( ev . ¡©us > HAL_HIDHOST_HS_ERROR ) 407 ev . ¡©us = HAL_HIDHOST_HS_ERROR ; 409 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HIDHOST , 410 HAL_EV_HIDHOST_HANDSHAKE , ( ev ), &ev); 411 } } 413  $bt_hid_nÙify_vœtu®_uÅlug ( hid_deviû * dev , 414 ušt8_t * buf ,  Ën ) 416  h®_ev_hidho¡_vœtu®_uÅlug ev ; 417  add»ss [18]; 419 `ba2¡r (& dev -> d¡ , add»ss ); 420 `DBG ("deviû %s", add»ss ); 421 `bdaddr2ªdroid (& dev -> d¡ , ev . bdaddr ); 423 ev . ¡©us = HAL_HIDHOST_GENERAL_ERROR ; 426 ià( dev -> šŒ_io && dev-> ù¾_io ) { 427 `g_io_chªÃl_shutdown ( dev -> šŒ_io , TRUE , NULL ); 428 `g_io_chªÃl_shutdown ( dev -> ù¾_io , TRUE , NULL ); 429 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_DISCONNECTING ); 430 ev . ¡©us = HAL_HIDHOST_STATUS_OK ; 433 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HIDHOST , 434 HAL_EV_HIDHOST_VIRTUAL_UNPLUG , ( ev ), &ev); 435 } } 437  gboÞ—n $ù¾_io_w©ch_cb ( GIOChªÃl * chª , gpoš‹r d©a ) 439  hid_deviû * dev = d©a ; 440  fd , b»ad ; 441 ušt8_t buf [ UHID_DATA_MAX ]; 443 `DBG (""); 445 fd = `g_io_chªÃl_unix_g‘_fd ( chª ); 446 b»ad = `»ad ( fd , buf , (buf)); 447 ià( b»ad < 0) { 448 `”rÜ ("hidhost:„ead from control failed: %s(%d)", 449 `¡»¼Ü ( ”ºo ), -errno); 450  TRUE ; 453  dev -> Ï¡_hid_msg ) { 454  HID_MSG_GET_PROTOCOL : 455  HID_MSG_SET_PROTOCOL : 456 `bt_hid_nÙify_´Ùo_mode ( dev , buf , b»ad ); 458  HID_MSG_GET_REPORT : 459 `bt_hid_nÙify_g‘_»pÜt ( dev , buf , b»ad ); 463  buf [0] & HID_MSG_TYPE_MASK ) { 464  HID_MSG_HANDSHAKE : 465 `bt_hid_nÙify_hªdshake ( dev , buf , b»ad ); 467  HID_MSG_CONTROL : 468 ià(( buf [0] & ~ HID_MSG_TYPE_MASK è=ð HID_VIRTUAL_CABLE_UNPLUG ) 469 `bt_hid_nÙify_vœtu®_uÅlug ( dev , buf , b»ad ); 476 dev -> Ï¡_hid_msg = 0; 478  TRUE ; 479 } } 481  gboÞ—n $ù¾_w©ch_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 482 gpoš‹r d©a ) 484  hid_deviû * dev = d©a ; 486 ià( cÚd & ( G_IO_HUP | G_IO_ERR | G_IO_NVAL )) 487  ”rÜ ; 489 ià( cÚd & G_IO_IN ) 490  `ù¾_io_w©ch_cb ( chª , d©a ); 492 ”rÜ : 493 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_DISCONNECTED ); 500 ià(( cÚd & ( G_IO_HUP | G_IO_ERR )è&& dev -> šŒ_w©ch ) 501 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 503 ià( dev -> šŒ_io && !( cÚd & G_IO_NVAL )) 504 `g_io_chªÃl_shutdown ( dev -> šŒ_io , TRUE , NULL ); 506 `hid_deviû_»move ( dev ); 508  FALSE ; 509 } } 511  $bt_hid_£t_šfo ( hid_deviû * dev ) 513  h®_ev_hidho¡_šfo ev ; 515 `DBG (""); 517 `bdaddr2ªdroid (& dev -> d¡ , ev . bdaddr ); 518 ev . ©Œ = 0; 519 ev . subþass = dev ->subclass; 520 ev . ­p_id = 0; 521 ev . v’dÜ = dev ->vendor; 522 ev . ´oduù = dev ->product; 523 ev . v”siÚ = dev ->version; 524 ev . couÁry = dev ->country; 525 ev . desü_Ën = dev -> rd_size ; 526 `mem£t ( ev . desü , 0, (ev.descr)); 527 `memýy ( ev . desü , dev -> rd_d©a ,ƒv. desü_Ën ); 529 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_HIDHOST , HAL_EV_HIDHOST_INFO , 530 ( ev ), &ev); 531 } } 533  $uhid_ü—‹ ( hid_deviû * dev ) 535  uhid_ev’t ev ; 536  ”r ; 538 dev -> uhid = `bt_uhid_Ãw_deçuÉ (); 539 ià(! dev -> uhid ) { 540 ”r = - ”ºo ; 541 `”rÜ ("hidhost: Failedo create bt_uhid instance"); 542  ”r ; 545 `mem£t (& ev , 0, (ev)); 546 ev . ty³ = UHID_CREATE ; 547 `¡rýy ((*è ev . u . ü—‹ . Çme , "bluez-input-device"); 548 ev . u . ü—‹ . bus = BUS_BLUETOOTH ; 549 ev . u . ü—‹ . v’dÜ = dev ->vendor; 550 ev . u . ü—‹ . ´oduù = dev ->product; 551 ev . u . ü—‹ . v”siÚ = dev ->version; 552 ev . u . ü—‹ . couÁry = dev ->country; 553 ev . u . ü—‹ . rd_size = dev ->rd_size; 554 ev . u . ü—‹ . rd_d©a = dev ->rd_data; 556 ”r = `bt_uhid_£nd ( dev -> uhid , & ev ); 557 ià( ”r < 0) { 558 `”rÜ ("hidhost: Failedo create uHID device: %s", 559 `¡»¼Ü (- ”r )); 560 `bt_uhid_uÄef ( dev -> uhid ); 561 dev -> uhid = NULL ; 562  ”r ; 565 `bt_uhid_»gi¡” ( dev -> uhid , UHID_OUTPUT , hªdË_uhid_ouut , dev); 566 `bt_hid_£t_šfo ( dev ); 569 } } 571  $š‹¼u±_cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * cÚn_”r , 572 gpoš‹r u£r_d©a ) 574  hid_deviû * dev = u£r_d©a ; 575 ušt8_t ¡©e ; 577 `DBG (""); 579 ià( cÚn_”r ) { 580 `”rÜ ("hidhost: Failedo connect interrupt channel (%s)", 581 cÚn_”r -> mes§ge ); 582 ¡©e = HAL_HIDHOST_STATE_FAILED ; 583  çžed ; 586 ià( `uhid_ü—‹ ( dev ) < 0) { 587 ¡©e = HAL_HIDHOST_STATE_NO_HID ; 588  çžed ; 591 dev -> šŒ_w©ch = `g_io_add_w©ch (dev-> šŒ_io , 592 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 593 šŒ_w©ch_cb , dev ); 595 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_CONNECTED ); 599 çžed : 600 `bt_hid_nÙify_¡©e ( dev , ¡©e ); 601 `hid_deviû_»move ( dev ); 602 } } 604  $cÚŒÞ_cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * cÚn_”r , 605 gpoš‹r u£r_d©a ) 607  hid_deviû * dev = u£r_d©a ; 608 GE¼Ü * ”r = NULL ; 610 `DBG (""); 612 ià( cÚn_”r ) { 613 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_DISCONNECTED ); 614 `”rÜ ("hidhost: Failedo connect control channel (%s)", 615 cÚn_”r -> mes§ge ); 616  çžed ; 620 dev -> šŒ_io = `bt_io_cÚÃù ( š‹¼u±_cÚÃù_cb , dev, NULL , & ”r , 621 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 622 BT_IO_OPT_DEST_BDADDR , & dev -> d¡ , 623 BT_IO_OPT_PSM , L2CAP_PSM_HIDP_INTR , 624 BT_IO_OPT_SEC_LEVEL , dev -> £c_Ëv– , 625 BT_IO_OPT_INVALID ); 626 ià(! dev -> šŒ_io ) { 627 `”rÜ ("hidhost: Failedo connect interrupt channel (%s)", 628 ”r -> mes§ge ); 629 `g_”rÜ_ä“ ( ”r ); 630  çžed ; 633 dev -> ù¾_w©ch = `g_io_add_w©ch (dev-> ù¾_io , 634 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 635 ù¾_w©ch_cb , dev ); 639 çžed : 640 `hid_deviû_»move ( dev ); 641 } } 643  $hid_sdp_£¬ch_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r d©a ) 645  hid_deviû * dev = d©a ; 646 sdp_li¡_t * li¡ ; 647 GE¼Ü * g”r = NULL ; 649 `DBG (""); 651 ià( ”r < 0) { 652 `”rÜ ("hidho¡: UÇbËØg‘ SDP„ecÜd: %s", `¡»¼Ü (- ”r )); 653  çž ; 656 ià(! »cs || !»cs-> d©a ) { 657 `”rÜ ("hidhost: No SDP„ecords found"); 658  çž ; 661  li¡ = »cs ;†i¡ !ð NULL ;†i¡ =†i¡-> Ãxt ) { 662 sdp_»cÜd_t * »c = li¡ -> d©a ; 663 sdp_d©a_t * d©a ; 665 d©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_HID_COUNTRY_CODE ); 666 ià( d©a ) 667 dev -> couÁry = d©a -> v® . ušt8 ; 669 d©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_HID_DEVICE_SUBCLASS ); 670 ià( d©a ) { 671 dev -> subþass = d©a -> v® . ušt8 ; 674 ià( dev -> subþass & 0x40) 675 dev -> £c_Ëv– = BT_IO_SEC_MEDIUM ; 678 d©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_HID_BOOT_DEVICE ); 679 ià( d©a ) 680 dev -> boÙ_dev = d©a -> v® . ušt8 ; 682 d©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_HID_DESCRIPTOR_LIST ); 683 ià( d©a ) { 684 ià(! `SDP_IS_SEQ ( d©a -> dtd )) 685  çž ; 688 d©a = d©a-> v® . d©a£q ; 689 ià(! `SDP_IS_SEQ ( d©a -> dtd )) 690  çž ; 693 d©a = d©a-> v® . d©a£q ; 694 ià( d©a -> dtd !ð SDP_UINT8 ) 695  çž ; 698 d©a = d©a-> Ãxt ; 699 ià(! d©a || ! `SDP_IS_TEXT_STR (d©a-> dtd )) 700  çž ; 702 dev -> rd_size = d©a -> un™Size ; 703 dev -> rd_d©a = `g_memdup ( d©a -> v® . ¡r , d©a-> un™Size ); 707 ià( dev -> ù¾_io ) { 709 ià(( dev -> £c_Ëv– > BT_IO_SEC_LOW ) && 710 ! `bt_io_£t ( dev -> ù¾_io , & g”r , 711 BT_IO_OPT_SEC_LEVEL , dev -> £c_Ëv– , 712 BT_IO_OPT_INVALID )) { 713 `”rÜ ("hidhost: Cannot„aise security†evel: %s", 714 g”r -> mes§ge ); 715 `g_”rÜ_ä“ ( g”r ); 717  çž ; 720 ià( `uhid_ü—‹ ( dev ) < 0) 721  çž ; 725 dev -> ù¾_io = `bt_io_cÚÃù ( cÚŒÞ_cÚÃù_cb , dev, NULL , & g”r , 726 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 727 BT_IO_OPT_DEST_BDADDR , & dev -> d¡ , 728 BT_IO_OPT_PSM , L2CAP_PSM_HIDP_CTRL , 729 BT_IO_OPT_SEC_LEVEL , dev -> £c_Ëv– , 730 BT_IO_OPT_INVALID ); 731 ià( g”r ) { 732 `”rÜ ("hidhost: Failedo connect control channel (%s)", 733 g”r -> mes§ge ); 734 `g_”rÜ_ä“ ( g”r ); 735  çž ; 740 çž : 741 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_DISCONNECTED ); 742 `hid_deviû_»move ( dev ); 743 } } 745  $hid_sdp_did_£¬ch_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r d©a ) 747  hid_deviû * dev = d©a ; 748 sdp_li¡_t * li¡ ; 749 uuid_t uuid ; 751 `DBG (""); 753 ià( ”r < 0) { 754 `”rÜ ("hidhost: Unableo get Device ID SDP„ecord: %s", 755 `¡»¼Ü (- ”r )); 756  çž ; 759 ià(! »cs || !»cs-> d©a ) { 760 `”rÜ ("hidhost: No Device ID SDP„ecords found"); 761  çž ; 764  li¡ = »cs ;†i¡;†i¡ =†i¡-> Ãxt ) { 765 sdp_»cÜd_t * »c = li¡ -> d©a ; 766 sdp_d©a_t * d©a ; 768 d©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_VENDOR_ID ); 769 ià( d©a ) 770 dev -> v’dÜ = d©a -> v® . ušt16 ; 772 d©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_PRODUCT_ID ); 773 ià( d©a ) 774 dev -> ´oduù = d©a -> v® . ušt16 ; 776 d©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_VERSION ); 777 ià( d©a ) 778 dev -> v”siÚ = d©a -> v® . ušt16 ; 781 `sdp_uuid16_ü—‹ (& uuid , HID_SVCLASS_ID ); 782 ià( `bt_£¬ch_£rviû (& ad­‹r_addr , & dev -> d¡ , & uuid , 783 hid_sdp_£¬ch_cb , dev , NULL , 0) < 0) { 784 `”rÜ ("hidhost: Failedo search SDP details"); 785  çž ; 790 çž : 791 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_DISCONNECTED ); 792 `hid_deviû_»move ( dev ); 793 } } 795  $hog_cÚn_cb (cÚ¡ bdaddr_t * addr ,  ”r , * ©Œib ) 797 GSLi¡ * l ; 798  hid_deviû * dev ; 800 l = `g_¦i¡_fšd_cu¡om ( deviûs , addr , deviû_cmp ); 801 dev = l ?†-> d©a : NULL ; 803 ià( ”r < 0) { 804 ià(! dev ) 806 ià( dev -> hog ) { 807 `bt_hid_nÙify_¡©e ( dev , 808 HAL_HIDHOST_STATE_DISCONNECTED ); 809 `bt_hog_d‘ach ( dev -> hog ); 812  çž ; 815 ià(! dev ) 816 dev = `hid_deviû_Ãw ( addr ); 818 ià(! dev -> hog ) { 820 dev -> hog = `bt_hog_Ãw ("bluez-šput-deviû", dev-> v’dÜ , 821 dev -> ´oduù , dev-> v”siÚ , NULL ); 822 ià(! dev -> hog ) { 823 `”rÜ ("HoG: unableo create session"); 824  çž ; 828 ià(! `bt_hog_©ch ( dev -> hog , ©Œib )) { 829 `”rÜ ("HoG: unableo‡ttach"); 830  çž ; 833 ià(! `bt_g©t_£t_£cur™y ( addr , BT_IO_SEC_MEDIUM )) { 834 `”rÜ ("Failedo set security†evel"); 835  çž ; 838 `DBG (""); 840 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_CONNECTED ); 842 ià(! `bt_g©t_add_autocÚÃù ( hog_­p , & dev -> d¡ )) 843 `”rÜ ("hidhost: Could‚ot‡ddo‡utoconnect†ist"); 847 çž : 848 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_DISCONNECTED ); 849 `hid_deviû_»move ( dev ); 850 } } 852  boÞ $hog_cÚÃù ( hid_deviû * dev ) 854 `DBG (""); 856 ià( hog_­p ) 857  `bt_g©t_cÚÃù_­p ( hog_­p , & dev -> d¡ ); 859 hog_­p = `bt_g©t_»gi¡”_­p ( HOG_UUID , GATT_CLIENT , hog_cÚn_cb ); 860 ià(! hog_­p ) { 861 `”rÜ ("hidhost: bt_gatt_register_app failed"); 862  çl£ ; 865  `bt_g©t_cÚÃù_­p ( hog_­p , & dev -> d¡ ); 866 } } 868  $bt_hid_cÚÃù (cÚ¡ * buf , ušt16_t Ën ) 870 cÚ¡  h®_cmd_hidho¡_cÚÃù * cmd = buf ; 871  hid_deviû * dev ; 872 ušt8_t ¡©us ; 873  addr [18]; 874 bdaddr_t d¡ ; 875 GSLi¡ * l ; 876 uuid_t uuid ; 878 `DBG (""); 880 `ªdroid2bdaddr (& cmd -> bdaddr , & d¡ ); 882 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 883 ià( l ) 884 dev = l -> d©a ; 886 dev = `hid_deviû_Ãw (& d¡ ); 888 ià( dev -> ¡©e !ð HAL_HIDHOST_STATE_DISCONNECTED ) 889  dÚe ; 891 `ba2¡r (& dev -> d¡ , addr ); 892 `DBG ("cÚÃùšgØ%s", addr ); 894 ià( `bt_is_deviû_Ë (& d¡ )) { 895 ià(! `hog_cÚÃù ( dev )) { 896 ¡©us = HAL_STATUS_FAILED ; 897 `hid_deviû_»move ( dev ); 898  çžed ; 900  dÚe ; 903 `sdp_uuid16_ü—‹ (& uuid , PNP_INFO_SVCLASS_ID ); 904 ià( `bt_£¬ch_£rviû (& ad­‹r_addr , & dev -> d¡ , & uuid , 905 hid_sdp_did_£¬ch_cb , dev , NULL , 0) < 0) { 906 `”rÜ ("hidhost: Failedo search DeviceID SDP details"); 907 `hid_deviû_»move ( dev ); 908 ¡©us = HAL_STATUS_FAILED ; 909  çžed ; 912 dÚe : 913 ià( dev -> ¡©e =ð HAL_HIDHOST_STATE_DISCONNECTED ) 914 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_CONNECTING ); 916 ¡©us = HAL_STATUS_SUCCESS ; 918 çžed : 919 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HIDHOST , HAL_OP_HIDHOST_CONNECT , 920 ¡©us ); 921 } } 923  boÞ $hog_discÚÃù ( hid_deviû * dev ) 925 `DBG (""); 927 ià( dev -> ¡©e =ð HAL_HIDHOST_STATE_DISCONNECTED ) 928  çl£ ; 930 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_DISCONNECTING ); 932 ià(! `bt_g©t_discÚÃù_­p ( hog_­p , & dev -> d¡ )) { 933 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_DISCONNECTED ); 934 `hid_deviû_»move ( dev ); 937  Œue ; 938 } } 940  $bt_hid_discÚÃù (cÚ¡ * buf , ušt16_t Ën ) 942 cÚ¡  h®_cmd_hidho¡_discÚÃù * cmd = buf ; 943  hid_deviû * dev ; 944 ušt8_t ¡©us ; 945 GSLi¡ * l ; 946 bdaddr_t d¡ ; 948 `DBG (""); 950 `ªdroid2bdaddr (& cmd -> bdaddr , & d¡ ); 952 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 953 ià(! l ) { 954 ¡©us = HAL_STATUS_FAILED ; 955  çžed ; 958 dev = l -> d©a ; 959 ià( `bt_is_deviû_Ë (& d¡ )) { 960 ià(! `hog_discÚÃù ( dev )) { 961 ¡©us = HAL_STATUS_FAILED ; 962  çžed ; 964  dÚe ; 968 ià( dev -> šŒ_io ) 969 `g_io_chªÃl_shutdown ( dev -> šŒ_io , TRUE , NULL ); 971 ià( dev -> ù¾_io ) 972 `g_io_chªÃl_shutdown ( dev -> ù¾_io , TRUE , NULL ); 974 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_DISCONNECTING ); 977 dÚe : 978 ¡©us = HAL_STATUS_SUCCESS ; 980 çžed : 981 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HIDHOST , HAL_OP_HIDHOST_DISCONNECT , 982 ¡©us ); 983 } } 985  boÞ $bt_hid_wr™e_vœtu®_uÅlug ( GIOChªÃl * chª ) 987 ušt8_t hdr = HID_MSG_CONTROL | HID_VIRTUAL_CABLE_UNPLUG ; 988  fd = `g_io_chªÃl_unix_g‘_fd ( chª ); 990 ià( `wr™e ( fd , & hdr , (hdr)) == (hdr)) 991  Œue ; 993 `”rÜ ("hidhost: Error writing virtual unplug command: %s (%d)", 994 `¡»¼Ü ( ”ºo ),ƒrrno); 995  çl£ ; 996 } } 998  $bt_hid_vœtu®_uÅlug (cÚ¡ * buf , ušt16_t Ën ) 1000 cÚ¡  h®_cmd_hidho¡_vœtu®_uÅlug * cmd = buf ; 1001  hid_deviû * dev ; 1002 GSLi¡ * l ; 1003 ušt8_t ¡©us ; 1004 bdaddr_t d¡ ; 1006 `DBG (""); 1008 `ªdroid2bdaddr (& cmd -> bdaddr , & d¡ ); 1010 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 1011 ià(! l ) { 1012 ¡©us = HAL_STATUS_FAILED ; 1013  çžed ; 1016 dev = l -> d©a ; 1018 ià(!( dev -> ù¾_io )) { 1019 ¡©us = HAL_STATUS_FAILED ; 1020  çžed ; 1023 ià(! `bt_hid_wr™e_vœtu®_uÅlug ( dev -> ù¾_io )) { 1024 ¡©us = HAL_STATUS_FAILED ; 1025  çžed ; 1029 ià( dev -> šŒ_io ) 1030 `g_io_chªÃl_shutdown ( dev -> šŒ_io , TRUE , NULL ); 1032 ià( dev -> ù¾_io ) 1033 `g_io_chªÃl_shutdown ( dev -> ù¾_io , TRUE , NULL ); 1035 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_DISCONNECTING ); 1037 ¡©us = HAL_STATUS_SUCCESS ; 1039 çžed : 1040 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HIDHOST , 1041 HAL_OP_HIDHOST_VIRTUAL_UNPLUG , ¡©us ); 1042 } } 1044  $bt_hid_šfo (cÚ¡ * buf , ušt16_t Ën ) 1046 cÚ¡  h®_cmd_hidho¡_£t_šfo * cmd = buf ; 1048 ià( Ën !ð(* cmd è+ cmd-> desü_Ën ) { 1049 `”rÜ ("Inv®id hid s‘ infØsiz(%u by‹s),”mš©šg", Ën ); 1050 `¿i£ ( SIGTERM ); 1060 `DBG ("Not supported"); 1062 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HIDHOST , HAL_OP_HIDHOST_SET_INFO , 1063 HAL_STATUS_UNSUPPORTED ); 1064 } } 1066  $bt_hid_g‘_´ÙocÞ (cÚ¡ * buf , ušt16_t Ën ) 1068 cÚ¡  h®_cmd_hidho¡_g‘_´ÙocÞ * cmd = buf ; 1069  hid_deviû * dev ; 1070 GSLi¡ * l ; 1071 bdaddr_t d¡ ; 1072  fd ; 1073 ušt8_t hdr ; 1074 ušt8_t ¡©us ; 1076 `DBG (""); 1078  cmd -> mode ) { 1079  HAL_HIDHOST_REPORT_PROTOCOL : 1080  HAL_HIDHOST_BOOT_PROTOCOL : 1083 ¡©us = HAL_STATUS_INVALID ; 1084  çžed ; 1087 `ªdroid2bdaddr (& cmd -> bdaddr , & d¡ ); 1089 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 1090 ià(! l ) { 1091 ¡©us = HAL_STATUS_FAILED ; 1092  çžed ; 1095 dev = l -> d©a ; 1097 hdr = HID_MSG_GET_PROTOCOL | cmd -> mode ; 1098 fd = `g_io_chªÃl_unix_g‘_fd ( dev -> ù¾_io ); 1100 ià( `wr™e ( fd , & hdr , (hdr)) < 0) { 1101 `”rÜ ("hidhost: Error writing device_get_protocol: %s (%d)", 1102 `¡»¼Ü ( ”ºo ),ƒrrno); 1103 ¡©us = HAL_STATUS_FAILED ; 1104  çžed ; 1107 dev -> Ï¡_hid_msg = HID_MSG_GET_PROTOCOL ; 1109 ¡©us = HAL_STATUS_SUCCESS ; 1111 çžed : 1112 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HIDHOST , 1113 HAL_OP_HIDHOST_GET_PROTOCOL , ¡©us ); 1114 } } 1116  $bt_hid_£t_´ÙocÞ (cÚ¡ * buf , ušt16_t Ën ) 1118 cÚ¡  h®_cmd_hidho¡_£t_´ÙocÞ * cmd = buf ; 1119  hid_deviû * dev ; 1120 GSLi¡ * l ; 1121 bdaddr_t d¡ ; 1122  fd ; 1123 ušt8_t hdr ; 1124 ušt8_t ¡©us ; 1126 `DBG (""); 1128  cmd -> mode ) { 1129  HAL_HIDHOST_REPORT_PROTOCOL : 1130  HAL_HIDHOST_BOOT_PROTOCOL : 1133 ¡©us = HAL_STATUS_INVALID ; 1134  çžed ; 1137 `ªdroid2bdaddr (& cmd -> bdaddr , & d¡ ); 1139 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 1140 ià(! l ) { 1141 ¡©us = HAL_STATUS_FAILED ; 1142  çžed ; 1145 dev = l -> d©a ; 1147 hdr = HID_MSG_SET_PROTOCOL | cmd -> mode ; 1148 fd = `g_io_chªÃl_unix_g‘_fd ( dev -> ù¾_io ); 1150 ià( `wr™e ( fd , & hdr , (hdr)) < 0) { 1151 `”rÜ ("hidhost:ƒrror writing device_set_protocol: %s (%d)", 1152 `¡»¼Ü ( ”ºo ),ƒrrno); 1153 ¡©us = HAL_STATUS_FAILED ; 1154  çžed ; 1157 dev -> Ï¡_hid_msg = HID_MSG_SET_PROTOCOL ; 1159 ¡©us = HAL_STATUS_SUCCESS ; 1161 çžed : 1162 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HIDHOST , 1163 HAL_OP_HIDHOST_SET_PROTOCOL , ¡©us ); 1164 } } 1166  $bt_hid_g‘_»pÜt (cÚ¡ * buf , ušt16_t Ën ) 1168 cÚ¡  h®_cmd_hidho¡_g‘_»pÜt * cmd = buf ; 1169  hid_deviû * dev ; 1170 GSLi¡ * l ; 1171 bdaddr_t d¡ ; 1172  fd ; 1173 ušt8_t * »q ; 1174 ušt8_t »q_size ; 1175 ušt8_t ¡©us ; 1177 `DBG (""); 1179  cmd -> ty³ ) { 1180  HAL_HIDHOST_INPUT_REPORT : 1181  HAL_HIDHOST_OUTPUT_REPORT : 1182  HAL_HIDHOST_FEATURE_REPORT : 1185 ¡©us = HAL_STATUS_INVALID ; 1186  çžed ; 1189 `ªdroid2bdaddr (& cmd -> bdaddr , & d¡ ); 1191 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 1192 ià(! l ) { 1193 ¡©us = HAL_STATUS_FAILED ; 1194  çžed ; 1197 dev = l -> d©a ; 1198 »q_size = ( cmd -> buf_size > 0) ? 4 : 2; 1199 »q = `g_Œy_m®loc0 ( »q_size ); 1200 ià(! »q ) { 1201 ¡©us = HAL_STATUS_NOMEM ; 1202  çžed ; 1205 »q [0] = HID_MSG_GET_REPORT | cmd -> ty³ ; 1206 »q [1] = cmd -> id ; 1208 ià( cmd -> buf_size > 0) { 1209 »q [0] =„eq[0] | HID_GET_REPORT_SIZE_FIELD ; 1210 `put_Ë16 ( cmd -> buf_size , & »q [2]); 1213 fd = `g_io_chªÃl_unix_g‘_fd ( dev -> ù¾_io ); 1215 ià( `wr™e ( fd , »q , »q_size ) < 0) { 1216 `”rÜ ("hidhost:ƒrror writing hid_get_report: %s (%d)", 1217 `¡»¼Ü ( ”ºo ),ƒrrno); 1218 `g_ä“ ( »q ); 1219 ¡©us = HAL_STATUS_FAILED ; 1220  çžed ; 1223 dev -> Ï¡_hid_msg = HID_MSG_GET_REPORT ; 1224 `g_ä“ ( »q ); 1226 ¡©us = HAL_STATUS_SUCCESS ; 1228 çžed : 1229 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HIDHOST , HAL_OP_HIDHOST_GET_REPORT , 1230 ¡©us ); 1231 } } 1233  $bt_hid_£t_»pÜt (cÚ¡ * buf , ušt16_t Ën ) 1235 cÚ¡  h®_cmd_hidho¡_£t_»pÜt * cmd = buf ; 1236  hid_deviû * dev ; 1237 GSLi¡ * l ; 1238 bdaddr_t d¡ ; 1239  fd ; 1240 ušt8_t * »q = NULL ; 1241 ušt8_t »q_size ; 1242 ušt8_t ¡©us ; 1244 `DBG (""); 1246 ià( Ën !ð(* cmd ) + cmd->len) { 1247 `”rÜ ("Invalid hid set„eport size (%u bytes),erminating", 1248 Ën ); 1249 `¿i£ ( SIGTERM ); 1253  cmd -> ty³ ) { 1254  HAL_HIDHOST_INPUT_REPORT : 1255  HAL_HIDHOST_OUTPUT_REPORT : 1256  HAL_HIDHOST_FEATURE_REPORT : 1259 ¡©us = HAL_STATUS_INVALID ; 1260  çžed ; 1263 `ªdroid2bdaddr (& cmd -> bdaddr , & d¡ ); 1265 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 1266 ià(! l ) { 1267 ¡©us = HAL_STATUS_FAILED ; 1268  çžed ; 1271 dev = l -> d©a ; 1273 ià(! dev -> ù¾_io && !dev-> hog ) { 1274 ¡©us = HAL_STATUS_FAILED ; 1275  çžed ; 1278 »q_size = 1 + ( cmd -> Ën / 2); 1279 »q = `g_Œy_m®loc0 ( »q_size ); 1280 ià(! »q ) { 1281 ¡©us = HAL_STATUS_NOMEM ; 1282  çžed ; 1285 »q [0] = HID_MSG_SET_REPORT | cmd -> ty³ ; 1290 ià(! `hex2buf ( cmd -> d©a , »q + 1, »q_size - 1)) { 1291 ¡©us = HAL_STATUS_INVALID ; 1292  çžed ; 1295 ià( dev -> hog ) { 1296 ià( `bt_hog_£nd_»pÜt ( dev -> hog , »q + 1, »q_size - 1, 1297 cmd -> ty³ ) < 0) { 1298 ¡©us = HAL_STATUS_FAILED ; 1299  çžed ; 1302  dÚe ; 1305 fd = `g_io_chªÃl_unix_g‘_fd ( dev -> ù¾_io ); 1307 ià( `wr™e ( fd , »q , »q_size ) < 0) { 1308 `”rÜ ("hidhost:ƒrror writing hid_set_report: %s (%d)", 1309 `¡»¼Ü ( ”ºo ),ƒrrno); 1310 ¡©us = HAL_STATUS_FAILED ; 1311  çžed ; 1314 dev -> Ï¡_hid_msg = HID_MSG_SET_REPORT ; 1316 dÚe : 1317 ¡©us = HAL_STATUS_SUCCESS ; 1319 çžed : 1320 `g_ä“ ( »q ); 1322 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HIDHOST , HAL_OP_HIDHOST_SET_REPORT , 1323 ¡©us ); 1324 } } 1326  $bt_hid_£nd_d©a (cÚ¡ * buf , ušt16_t Ën ) 1328 cÚ¡  h®_cmd_hidho¡_£nd_d©a * cmd = buf ; 1329  hid_deviû * dev ; 1330 GSLi¡ * l ; 1331 bdaddr_t d¡ ; 1332  fd ; 1333 ušt8_t * »q = NULL ; 1334 ušt8_t »q_size ; 1335 ušt8_t ¡©us ; 1337 `DBG (""); 1339 ià( Ën !ð(* cmd ) + cmd->len) { 1340 `”rÜ ("Invalid hid send data size (%u bytes),erminating", 1341 Ën ); 1342 `¿i£ ( SIGTERM ); 1346 `ªdroid2bdaddr (& cmd -> bdaddr , & d¡ ); 1348 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 1349 ià(! l ) { 1350 ¡©us = HAL_STATUS_FAILED ; 1351  çžed ; 1354 dev = l -> d©a ; 1356 ià(!( dev -> šŒ_io )) { 1357 ¡©us = HAL_STATUS_FAILED ; 1358  çžed ; 1361 »q_size = 1 + ( cmd -> Ën / 2); 1362 »q = `g_Œy_m®loc0 ( »q_size ); 1363 ià(! »q ) { 1364 ¡©us = HAL_STATUS_NOMEM ; 1365  çžed ; 1368 »q [0] = HID_MSG_DATA | HID_DATA_TYPE_OUTPUT ; 1373 ià(! `hex2buf ( cmd -> d©a , »q + 1, »q_size - 1)) { 1374 ¡©us = HAL_STATUS_INVALID ; 1375  çžed ; 1378 fd = `g_io_chªÃl_unix_g‘_fd ( dev -> šŒ_io ); 1380 ià( `wr™e ( fd , »q , »q_size ) < 0) { 1381 `”rÜ ("hidhost:ƒrror writing datao HID device: %s (%d)", 1382 `¡»¼Ü ( ”ºo ),ƒrrno); 1383 ¡©us = HAL_STATUS_FAILED ; 1384  çžed ; 1387 ¡©us = HAL_STATUS_SUCCESS ; 1389 çžed : 1390 `g_ä“ ( »q ); 1392 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_HIDHOST , HAL_OP_HIDHOST_SEND_DATA , 1393 ¡©us ); 1394 } } 1396 cÚ¡  c_hªdËr gcmd_hªdËrs [] = { 1398 { bt_hid_cÚÃù , çl£ , ( h®_cmd_hidho¡_cÚÃù ) }, 1400 { bt_hid_discÚÃù , çl£ , ( h®_cmd_hidho¡_discÚÃù ) }, 1402 { bt_hid_vœtu®_uÅlug , çl£ , 1403 ( h®_cmd_hidho¡_vœtu®_uÅlug ) }, 1405 { bt_hid_šfo , Œue , ( h®_cmd_hidho¡_£t_šfo ) }, 1407 { bt_hid_g‘_´ÙocÞ , çl£ , 1408 ( h®_cmd_hidho¡_g‘_´ÙocÞ ) }, 1410 { bt_hid_£t_´ÙocÞ , çl£ , 1411 ( h®_cmd_hidho¡_g‘_´ÙocÞ ) }, 1413 { bt_hid_g‘_»pÜt , çl£ , ( h®_cmd_hidho¡_g‘_»pÜt ) }, 1415 { bt_hid_£t_»pÜt , Œue , ( h®_cmd_hidho¡_£t_»pÜt ) }, 1417 { bt_hid_£nd_d©a , Œue , ( h®_cmd_hidho¡_£nd_d©a ) }, 1420  $cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 1422  hid_deviû * dev ; 1423 bdaddr_t d¡ ; 1424  add»ss [18]; 1425 ušt16_t psm ; 1426 GE¼Ü * g”r = NULL ; 1427 GSLi¡ * l ; 1428 uuid_t uuid ; 1430 ià( ”r ) { 1431 `”rÜ ("hidho¡: CÚÃù fažed (%s)", ”r -> mes§ge ); 1435 `bt_io_g‘ ( chª , & g”r , 1436 BT_IO_OPT_DEST_BDADDR , & d¡ , 1437 BT_IO_OPT_PSM , & psm , 1438 BT_IO_OPT_INVALID ); 1439 ià( g”r ) { 1440 `”rÜ ("hidhost: Failedo„ead„emote‡ddress (%s)", 1441 g”r -> mes§ge ); 1442 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 1443 `g_”rÜ_ä“ ( g”r ); 1447 `ba2¡r (& d¡ , add»ss ); 1448 `DBG ("Incomšg cÚÃùiÚ from % Ú PSM %d", add»ss , psm ); 1450 ià(! `bt_deviû_is_bÚded (& d¡ )) { 1451 `w¬n ("hidhost: Rejecting connection from unknown device %s", 1452 add»ss ); 1453 ià( psm =ð L2CAP_PSM_HIDP_CTRL ) 1454 `bt_hid_wr™e_vœtu®_uÅlug ( chª ); 1456 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 1460  psm ) { 1461  L2CAP_PSM_HIDP_CTRL : 1462 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 1463 ià( l ) 1466 dev = `hid_deviû_Ãw (& d¡ ); 1467 dev -> ù¾_io = `g_io_chªÃl_»f ( chª ); 1469 `sdp_uuid16_ü—‹ (& uuid , PNP_INFO_SVCLASS_ID ); 1470 ià( `bt_£¬ch_£rviû (& ad­‹r_addr , & dev -> d¡ , & uuid , 1471 hid_sdp_did_£¬ch_cb , dev , NULL , 0) < 0) { 1472 `”rÜ ("hidhost: Failedo search DID SDP details"); 1473 `hid_deviû_»move ( dev ); 1477 dev -> ù¾_w©ch = `g_io_add_w©ch (dev-> ù¾_io , 1478 G_IO_HUP | G_IO_ERR | G_IO_NVAL , 1479 ù¾_w©ch_cb , dev ); 1480 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_CONNECTING ); 1483  L2CAP_PSM_HIDP_INTR : 1484 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 1485 ià(! l ) 1488 dev = l -> d©a ; 1489 dev -> šŒ_io = `g_io_chªÃl_»f ( chª ); 1490 dev -> šŒ_w©ch = `g_io_add_w©ch (dev-> šŒ_io , 1491 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 1492 šŒ_w©ch_cb , dev ); 1493 `bt_hid_nÙify_¡©e ( dev , HAL_HIDHOST_STATE_CONNECTED ); 1496 } } 1498  $hid_uÅaœed_cb (cÚ¡ bdaddr_t * addr , ušt8_t ty³ ) 1500 GSLi¡ * l ; 1501  hid_deviû * dev ; 1502  add»ss [18]; 1504 l = `g_¦i¡_fšd_cu¡om ( deviûs , addr , deviû_cmp ); 1505 ià(! l ) 1508 dev = l -> d©a ; 1510 `ba2¡r ( addr , add»ss ); 1511 `DBG ("UÅaœed deviû %s", add»ss ); 1513 ià( hog_­p ) 1514 `bt_g©t_»move_autocÚÃù ( hog_­p , addr ); 1516 `hid_deviû_»move ( dev ); 1517 } } 1519 boÞ $bt_hid_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ) 1521 GE¼Ü * ”r = NULL ; 1523 `DBG (""); 1525 ià(! `bt_uÅaœed_»gi¡” ( hid_uÅaœed_cb )) { 1526 `”rÜ ("hidhost: Could‚ot„egister unpaired callback"); 1527  çl£ ; 1530 `baýy (& ad­‹r_addr , addr ); 1532 ù¾_io = `bt_io_li¡’ ( cÚÃù_cb , NULL , NULL, NULL, & ”r , 1533 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 1534 BT_IO_OPT_PSM , L2CAP_PSM_HIDP_CTRL , 1535 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 1536 BT_IO_OPT_INVALID ); 1537 ià(! ù¾_io ) { 1538 `”rÜ ("hidhost: Failedo†isten on control channel: %s", 1539 ”r -> mes§ge ); 1540 `g_”rÜ_ä“ ( ”r ); 1541  çl£ ; 1544 šŒ_io = `bt_io_li¡’ ( cÚÃù_cb , NULL , NULL, NULL, & ”r , 1545 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 1546 BT_IO_OPT_PSM , L2CAP_PSM_HIDP_INTR , 1547 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 1548 BT_IO_OPT_INVALID ); 1549 ià(! šŒ_io ) { 1550 `”rÜ ("hidhost: Failedo†isten on interrupt channel: %s", 1551 ”r -> mes§ge ); 1552 `g_”rÜ_ä“ ( ”r ); 1554 `g_io_chªÃl_shutdown ( ù¾_io , TRUE , NULL ); 1555 `g_io_chªÃl_uÄef ( ù¾_io ); 1556 ù¾_io = NULL ; 1558  çl£ ; 1561 h®_c = c ; 1563 `c_»gi¡” ( h®_c , HAL_SERVICE_ID_HIDHOST , cmd_hªdËrs , 1564 `G_N_ELEMENTS ( cmd_hªdËrs )); 1566  Œue ; 1567 } } 1569  $bt_hid_uÄegi¡” () 1571 `DBG (""); 1573 ià( hog_­p > 0) 1574 `bt_g©t_uÄegi¡”_­p ( hog_­p ); 1576 `g_¦i¡_ä“_fuÎ ( deviûs , hid_deviû_ä“ ); 1577 deviûs = NULL ; 1579 ià( ù¾_io ) { 1580 `g_io_chªÃl_shutdown ( ù¾_io , TRUE , NULL ); 1581 `g_io_chªÃl_uÄef ( ù¾_io ); 1582 ù¾_io = NULL ; 1585 ià( šŒ_io ) { 1586 `g_io_chªÃl_shutdown ( šŒ_io , TRUE , NULL ); 1587 `g_io_chªÃl_uÄef ( šŒ_io ); 1588 šŒ_io = NULL ; 1591 `c_uÄegi¡” ( h®_c , HAL_SERVICE_ID_HIDHOST ); 1592 h®_c = NULL ; 1594 `bt_uÅaœed_uÄegi¡” ( hid_uÅaœed_cb ); 1595 } } @android/hidhost.h 24 boÞ bt_hid_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ); 25  bt_hid_uÄegi¡” (); @android/hog.c 27 #ifdeà HAVE_CONFIG_H 28  ~ 31  ~<¡dlib.h > 32  ~<¡dboÞ.h > 33  ~<”ºo.h > 34  ~ 35  ~ 36  ~ 37  ~ 39  ~ 41  ~ 43  ~"¤c/log.h " 45  ~"lib/uuid.h " 46  ~"¤c/sh¬ed/utž.h " 47  ~"¤c/sh¬ed/uhid.h " 48  ~"¤c/sh¬ed/queue.h " 50  ~"©Œib/©t.h " 51  ~"©Œib/g©Œib.h " 52  ~"©Œib/g©t.h " 54  ~"btio/btio.h " 56  ~"ªdroid/sýp.h " 57  ~"ªdroid/dis.h " 58  ~"ªdroid/bas.h " 59  ~"ªdroid/hog.h " 61  #HOG_UUID "00001812-0000-1000-8000-00805f9b34fb" ) 63  #HOG_INFO_UUID 0x2A4A ) 64  #HOG_REPORT_MAP_UUID 0x2A4B ) 65  #HOG_REPORT_UUID 0x2A4D ) 66  #HOG_PROTO_MODE_UUID 0x2A4E ) 67  #HOG_CONTROL_POINT_UUID 0x2A4C ) 69  #HOG_REPORT_TYPE_INPUT 1 ) 70  #HOG_REPORT_TYPE_OUTPUT 2 ) 71  #HOG_REPORT_TYPE_FEATURE 3 ) 73  #HOG_PROTO_MODE_BOOT 0 ) 74  #HOG_PROTO_MODE_REPORT 1 ) 76  #HOG_REPORT_MAP_MAX_SIZE 512 ) 77  #HID_INFO_SIZE 4 ) 78  #ATT_NOTIFICATION_HEADER_SIZE 3 ) 80  sbt_hog { 81  m»f_couÁ ; 82 * mÇme ; 83 ušt16_t mv’dÜ ; 84 ušt16_t m´oduù ; 85 ušt16_t mv”siÚ ; 86  g©t_´im¬y * m´im¬y ; 87 GA‰rib * m©Œib ; 88 GSLi¡ * m»pÜts ; 89  bt_uhid * muhid ; 90 gboÞ—n mhas_»pÜt_id ; 91 ušt16_t mbcdhid ; 92 ušt8_t mbcouÁrycode ; 93 ušt16_t m´Ùo_mode_hªdË ; 94 ušt16_t mù¾±_hªdË ; 95 ušt8_t mæags ; 96  mg‘»p_©t ; 97 ušt16_t mg‘»p_id ; 98  m£Œ•_©t ; 99 ušt16_t m£Œ•_id ; 100  bt_sýp * msýp ; 101  bt_dis * mdis ; 102  bt_bas * mbas ; 103 GSLi¡ * mš¡ªûs ; 104  queue * mg©t_Ý ; 107  s»pÜt { 108  bt_hog * mhog ; 109 ušt8_t mid ; 110 ušt8_t mty³ ; 111 ušt16_t mccc_hªdË ; 112 gušt mnÙifyid ; 113  g©t_ch¬ * mdeþ ; 114 ušt16_t mËn ; 115 ušt8_t * mv®ue ; 118  sg©t_»que¡ { 119  mid ; 120  bt_hog * mhog ; 121 * mu£r_d©a ; 124  g©t_»que¡ * $ü—‹_»que¡ ( bt_hog * hog , 125 * u£r_d©a ) 127  g©t_»que¡ * »q ; 129 »q = `Ãw0 ( g©t_»que¡ , 1); 130 ià(! »q ) 131  NULL ; 133 »q -> u£r_d©a = user_data; 134 »q -> hog = `bt_hog_»f (hog); 136  »q ; 137 } } 139  boÞ $£t_ªd_¡Üe_g©t_»q ( bt_hog * hog , 140  g©t_»que¡ * »q , 141  id ) 143 »q -> id = id; 144  `queue_push_h—d ( hog -> g©t_Ý , »q ); 145 } } 147  $de¡roy_g©t_»q ( g©t_»que¡ * »q ) 149 `queue_»move ( »q -> hog -> g©t_Ý ,„eq); 150 `bt_hog_uÄef ( »q -> hog ); 151 `ä“ ( »q ); 152 } } 154  $wr™e_ch¬ ( bt_hog * hog , GA‰rib * ©Œib , ušt16_t hªdË , 155 cÚ¡ ušt8_t * v®ue , size_t vËn , 156 GA‰ribResuÉFunc func , 157 gpoš‹r u£r_d©a ) 159  g©t_»que¡ * »q ; 160  id ; 162 »q = `ü—‹_»que¡ ( hog , u£r_d©a ); 163 ià(! »q ) 166 id = `g©t_wr™e_ch¬ ( ©Œib , hªdË , v®ue , vËn , func , »q ); 168 ià( `£t_ªd_¡Üe_g©t_»q ( hog , »q , id )) 171 `”rÜ ("hog: Could‚ot„ead char"); 172 `g_©Œib_ÿnûl ( ©Œib , id ); 173 `ä“ ( »q ); 174 } } 176  $»ad_ch¬ ( bt_hog * hog , GA‰rib * ©Œib , ušt16_t hªdË , 177 GA‰ribResuÉFunc func , gpoš‹r u£r_d©a ) 179  g©t_»que¡ * »q ; 180  id ; 182 »q = `ü—‹_»que¡ ( hog , u£r_d©a ); 183 ià(! »q ) 186 id = `g©t_»ad_ch¬ ( ©Œib , hªdË , func , »q ); 188 ià( `£t_ªd_¡Üe_g©t_»q ( hog , »q , id )) 191 `”rÜ ("hog: Could‚ot„ead char"); 192 `g_©Œib_ÿnûl ( ©Œib , id ); 193 `ä“ ( »q ); 194 } } 196  $discov”_desc ( bt_hog * hog , GA‰rib * ©Œib , 197 ušt16_t ¡¬t , ušt16_ˆ ’d , g©t_cb_t func , 198 gpoš‹r u£r_d©a ) 200  g©t_»que¡ * »q ; 201  id ; 203 »q = `ü—‹_»que¡ ( hog , u£r_d©a ); 204 ià(! »q ) 207 id = `g©t_discov”_desc ( ©Œib , ¡¬t , ’d , NULL , func , »q ); 208 ià( `£t_ªd_¡Üe_g©t_»q ( hog , »q , id )) 211 `”rÜ ("hog: Could‚ot discover descriptors"); 212 `g_©Œib_ÿnûl ( ©Œib , id ); 213 `ä“ ( »q ); 214 } } 216  $discov”_ch¬ ( bt_hog * hog , GA‰rib * ©Œib , 217 ušt16_t ¡¬t , ušt16_ˆ ’d , 218 bt_uuid_t * uuid , g©t_cb_t func , 219 gpoš‹r u£r_d©a ) 221  g©t_»que¡ * »q ; 222  id ; 224 »q = `ü—‹_»que¡ ( hog , u£r_d©a ); 225 ià(! »q ) 228 id = `g©t_discov”_ch¬ ( ©Œib , ¡¬t , ’d , uuid , func , »q ); 230 ià( `£t_ªd_¡Üe_g©t_»q ( hog , »q , id )) 233 `”rÜ ("hog: Could‚ot discover characteristic"); 234 `g_©Œib_ÿnûl ( ©Œib , id ); 235 `ä“ ( »q ); 236 } } 238  $discov”_´im¬y ( bt_hog * hog , GA‰rib * ©Œib , 239 bt_uuid_t * uuid , g©t_cb_t func , 240 gpoš‹r u£r_d©a ) 242  g©t_»que¡ * »q ; 243  id ; 245 »q = `ü—‹_»que¡ ( hog , u£r_d©a ); 246 ià(! »q ) 249 id = `g©t_discov”_´im¬y ( ©Œib , uuid , func , »q ); 251 ià( `£t_ªd_¡Üe_g©t_»q ( hog , »q , id )) 254 `”rÜ ("hog: Could‚ot send discover…rimary"); 255 `g_©Œib_ÿnûl ( ©Œib , id ); 256 `ä“ ( »q ); 257 } } 259  $fšd_šþuded ( bt_hog * hog , GA‰rib * ©Œib , 260 ušt16_t ¡¬t , ušt16_ˆ ’d , 261 g©t_cb_t func , gpoš‹r u£r_d©a ) 263  g©t_»que¡ * »q ; 264  id ; 266 »q = `ü—‹_»que¡ ( hog , u£r_d©a ); 267 ià(! »q ) 270 id = `g©t_fšd_šþuded ( ©Œib , ¡¬t , ’d , func , »q ); 272 ià( `£t_ªd_¡Üe_g©t_»q ( hog , »q , id )) 275 `”rÜ ("Could‚ot find included"); 276 `g_©Œib_ÿnûl ( ©Œib , id ); 277 `ä“ ( »q ); 278 } } 280  $»pÜt_v®ue_cb (cÚ¡ gušt8 * pdu , gušt16 Ën , gpoš‹r u£r_d©a ) 282  »pÜt *»p܈ð u£r_d©a ; 283  bt_hog * hog = »pÜt ->hog; 284  uhid_ev’t ev ; 285 ušt8_t * buf ; 286  ”r ; 288 ià( Ën < ATT_NOTIFICATION_HEADER_SIZE ) { 289 `”rÜ ("Malformed ATT‚otification"); 293 pdu +ð ATT_NOTIFICATION_HEADER_SIZE ; 294 Ën -ð ATT_NOTIFICATION_HEADER_SIZE ; 296 `mem£t (& ev , 0, (ev)); 297 ev . ty³ = UHID_INPUT ; 298 buf = ev . u . šput . d©a ; 300 ià( hog -> has_»pÜt_id ) { 301 buf [0] = »pÜt -> id ; 302 Ën = `MIN Ö’, ( ev . u . šput . d©a ) - 1); 303 `memýy ( buf + 1, pdu , Ën ); 304 ev . u . šput . size = ++ Ën ; 306 Ën = `MIN Ö’, ( ev . u . šput . d©a )); 307 `memýy ( buf , pdu , Ën ); 308 ev . u . šput . size = Ën ; 311 ”r = `bt_uhid_£nd ( hog -> uhid , & ev ); 312 ià( ”r < 0) { 313 `”rÜ ("bt_uhid_£nd: % (%d)", `¡»¼Ü (- ”r ), -err); 317 `DBG ("HoG„•Üˆ(%u by‹s)", ev . u . šput . size ); 318 } } 320  $»pÜt_ccc_wr™‹n_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 321 gušt16 ¶’ , gpoš‹r u£r_d©a ) 323  g©t_»que¡ * »q = u£r_d©a ; 324  »pÜt *»p܈ð »q -> u£r_d©a ; 325  bt_hog * hog = »pÜt ->hog; 327 `de¡roy_g©t_»q ( »q ); 329 ià( ¡©us != 0) { 330 `”rÜ ("Write„eport characteristic descriptor failed: %s", 331 `©t_ecode2¡r ( ¡©us )); 335 »pÜt -> nÙifyid = `g_©Œib_»gi¡” ( hog -> ©Œib , 336 ATT_OP_HANDLE_NOTIFY , 337 »pÜt -> deþ -> v®ue_hªdË , 338 »pÜt_v®ue_cb , »pÜt , NULL ); 340 `DBG ("Report characteristic descriptor written:‚otificationsƒnabled"); 341 } } 343  $wr™e_ccc ( bt_hog * hog , GA‰rib * ©Œib , ušt16_t hªdË , 344 * u£r_d©a ) 346 ušt8_t v®ue [2]; 348 `put_Ë16 ( GATT_CLIENT_CHARAC_CFG_NOTIF_BIT , v®ue ); 350 `wr™e_ch¬ ( hog , ©Œib , hªdË , v®ue , (value), 351 »pÜt_ccc_wr™‹n_cb , u£r_d©a ); 352 } } 354  $ccc_»ad_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 355 gpoš‹r u£r_d©a ) 357  g©t_»que¡ * »q = u£r_d©a ; 358  »pÜt *»p܈ð »q -> u£r_d©a ; 360 `de¡roy_g©t_»q ( »q ); 362 ià( ¡©us != 0) { 363 `”rÜ ("E¼Ü„—dšg CCC v®ue: %s", `©t_ecode2¡r ( ¡©us )); 367 `wr™e_ccc ( »pÜt -> hog ,„•Üt->hog-> ©Œib ,„•Üt-> ccc_hªdË ,„eport); 368 } } 370  $»pÜt_»ã»nû_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 371 gušt16 ¶’ , gpoš‹r u£r_d©a ) 373  g©t_»que¡ * »q = u£r_d©a ; 374  »pÜt *»p܈ð »q -> u£r_d©a ; 376 `de¡roy_g©t_»q ( »q ); 378 ià( ¡©us != 0) { 379 `”rÜ ("Read Report Reference descriptor failed: %s", 380 `©t_ecode2¡r ( ¡©us )); 384 ià( ¶’ != 3) { 385 `”rÜ ("Malformed ATT„ead„esponse"); 389 »pÜt -> id = pdu [1]; 390 »pÜt -> ty³ = pdu [2]; 391 `DBG ("R•ÜˆID: 0x%02x R•Üˆty³: 0x%02x", pdu [1],…du[2]); 394 ià( »pÜt -> ty³ =ð HOG_REPORT_TYPE_INPUT ) 395 `»ad_ch¬ ( »pÜt -> hog ,„•Üt->hog-> ©Œib ,„•Üt-> ccc_hªdË , 396 ccc_»ad_cb , »pÜt ); 397 } } 399  ex‹º®_»pÜt_»ã»nû_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 400 gušt16 ¶’ , gpoš‹r u£r_d©a ); 402  $discov”_ex‹º®_cb ( ušt8_t ¡©us , GSLi¡ * descs , * u£r_d©a ) 404  g©t_»que¡ * »q = u£r_d©a ; 405  bt_hog * hog = »q -> u£r_d©a ; 407 `de¡roy_g©t_»q ( »q ); 409 ià( ¡©us != 0) { 410 `”rÜ ("Discoverƒxternal descriptors failed: %s", 411 `©t_ecode2¡r ( ¡©us )); 415  ; descs ; desc ðdescs-> Ãxt ) { 416  g©t_desc * desc = descs -> d©a ; 418 `»ad_ch¬ ( hog , hog-> ©Œib , desc -> hªdË , 419 ex‹º®_»pÜt_»ã»nû_cb , 420 hog ); 422 } } 424  $discov”_ex‹º® ( bt_hog * hog , GA‰rib * ©Œib , 425 ušt16_t ¡¬t , ušt16_ˆ ’d , 426 gpoš‹r u£r_d©a ) 428 bt_uuid_t uuid ; 430 ià( ¡¬t > ’d ) 433 `bt_uuid16_ü—‹ (& uuid , GATT_EXTERNAL_REPORT_REFERENCE ); 435 `discov”_desc ( hog , ©Œib , ¡¬t , ’d , discov”_ex‹º®_cb , 436 u£r_d©a ); 437 } } 439  $discov”_»pÜt_cb ( ušt8_t ¡©us , GSLi¡ * descs , * u£r_d©a ) 441  g©t_»que¡ * »q = u£r_d©a ; 442  »pÜt *»p܈ð »q -> u£r_d©a ; 443  bt_hog * hog = »pÜt ->hog; 445 `de¡roy_g©t_»q ( »q ); 447 ià( ¡©us != 0) { 448 `”rÜ ("Discover„eport descriptors failed: %s", 449 `©t_ecode2¡r ( ¡©us )); 453  ; descs ; desc ðdescs-> Ãxt ) { 454  g©t_desc * desc = descs -> d©a ; 456  desc -> uuid16 ) { 457  GATT_CLIENT_CHARAC_CFG_UUID : 458 »pÜt -> ccc_hªdË = desc -> hªdË ; 460  GATT_REPORT_REFERENCE : 461 `»ad_ch¬ ( hog , hog-> ©Œib , desc -> hªdË , 462 »pÜt_»ã»nû_cb , »pÜt ); 466 } } 468  $discov”_»pÜt ( bt_hog * hog , GA‰rib * ©Œib , 469 ušt16_t ¡¬t , ušt16_ˆ ’d , 470 gpoš‹r u£r_d©a ) 472 ià( ¡¬t > ’d ) 475 `discov”_desc ( hog , ©Œib , ¡¬t , ’d , discov”_»pÜt_cb , u£r_d©a ); 476 } } 478  $»pÜt_»ad_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 479 gpoš‹r u£r_d©a ) 481  g©t_»que¡ * »q = u£r_d©a ; 482  »pÜt *»p܈ð »q -> u£r_d©a ; 484 `de¡roy_g©t_»q ( »q ); 486 ià( ¡©us != 0) { 487 `”rÜ ("E¼Ü„—dšg R•Üˆv®ue: %s", `©t_ecode2¡r ( ¡©us )); 491 ià( »pÜt -> v®ue ) 492 `g_ä“ ( »pÜt -> v®ue ); 494 »pÜt -> v®ue = `g_memdup ( pdu , Ën ); 495 »pÜt -> Ën =†en; 496 } } 498  »pÜt * $»pÜt_Ãw ( bt_hog * hog ,  g©t_ch¬ * chr ) 500  »pÜt *report; 502 »pÜt = `g_Ãw0 (report, 1); 503 »pÜt -> hog = hog; 504 »pÜt -> deþ = `g_memdup ( chr , (*chr)); 505 hog -> »pÜts = `g_¦i¡_­³nd (hog->»pÜts, »pÜt ); 507 `»ad_ch¬ ( hog , hog-> ©Œib , chr -> v®ue_hªdË , »pÜt_»ad_cb , »pÜt ); 509  »pÜt ; 510 } } 512  $ex‹º®_£rviû_ch¬_cb ( ušt8_t ¡©us , GSLi¡ * ch¬s , 513 * u£r_d©a ) 515  g©t_»que¡ * »q = u£r_d©a ; 516  bt_hog * hog = »q -> u£r_d©a ; 517  g©t_´im¬y * ´im¬y = hog ->primary; 518  »pÜt *report; 519 GSLi¡ * l ; 521 `de¡roy_g©t_»q ( »q ); 523 ià( ¡©us != 0) { 524 cÚ¡ * ¡r = `©t_ecode2¡r ( ¡©us ); 525 `DBG ("Discov”ƒx‹º® s”viû ch¬aù”i¡iøçžed: %s", ¡r ); 529  l = ch¬s ;†;† = `g_¦i¡_Ãxt (l)) { 530  g©t_ch¬ * chr , * Ãxt ; 531 ušt16_t ¡¬t , ’d ; 533 chr = l -> d©a ; 534 Ãxt = l ->Ãxˆ?†->Ãxt-> d©a : NULL ; 536 `DBG ("0x%04x UUID: %s…roperties: %02x", 537 chr -> hªdË , chr-> uuid , chr-> ´Ý”t›s ); 539 »pÜt = `»pÜt_Ãw ( hog , chr ); 540 ¡¬t = chr -> v®ue_hªdË + 1; 541 ’d = ( Ãxt ?‚ext-> hªdË - 1 : ´im¬y -> ¿nge .end); 542 `discov”_»pÜt ( hog , hog-> ©Œib , ¡¬t , ’d , »pÜt ); 544 } } 546  $ex‹º®_»pÜt_»ã»nû_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 547 gušt16 ¶’ , gpoš‹r u£r_d©a ) 549  g©t_»que¡ * »q = u£r_d©a ; 550  bt_hog * hog = »q -> u£r_d©a ; 551 ušt16_t uuid16 ; 552 bt_uuid_t uuid ; 554 `de¡roy_g©t_»q ( »q ); 556 ià( ¡©us != 0) { 557 `”rÜ ("Read External Report Reference descriptor failed: %s", 558 `©t_ecode2¡r ( ¡©us )); 562 ià( ¶’ != 3) { 563 `”rÜ ("Malformed ATT„ead„esponse"); 567 uuid16 = `g‘_Ë16 (& pdu [1]); 568 `DBG ("External„eport„eference„ead,ƒxternal„eport characteristic " 569 "UUID: 0x%04x", uuid16 ); 572 ià( uuid16 !ð HOG_REPORT_UUID ) 575 `bt_uuid16_ü—‹ (& uuid , uuid16 ); 576 `discov”_ch¬ ( hog , hog-> ©Œib , 0x0001, 0xffff, & uuid , 577 ex‹º®_£rviû_ch¬_cb , hog ); 578 } } 580  $»pÜt_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 582 cÚ¡  »pÜt * ¿ = a , * rb = b ; 585 ià( ¿ -> ty³ !ð rb ->type) 586  ¿ -> ty³ - rb ->type; 589 ià(! rb -> id ) 593  ¿ -> id - rb ->id; 594 } } 596  »pÜt * $fšd_»pÜt ( bt_hog * hog , ušt8_t ty³ , ušt8_ˆ id ) 598  »pÜt cmp ; 599 GSLi¡ * l ; 601 cmp . ty³ =ype; 602 cmp . id = hog -> has_»pÜt_id ? id : 0; 604 l = `g_¦i¡_fšd_cu¡om ( hog -> »pÜts , & cmp , »pÜt_cmp ); 606  l ?†-> d©a : NULL ; 607 } } 609  »pÜt * $fšd_»pÜt_by_¹y³ ( bt_hog * hog , ušt8_t ¹y³ , 610 ušt8_t id ) 612 ušt8_t ty³ ; 614  ¹y³ ) { 615  UHID_FEATURE_REPORT : 616 ty³ = HOG_REPORT_TYPE_FEATURE ; 618  UHID_OUTPUT_REPORT : 619 ty³ = HOG_REPORT_TYPE_OUTPUT ; 621  UHID_INPUT_REPORT : 622 ty³ = HOG_REPORT_TYPE_INPUT ; 625  NULL ; 628  `fšd_»pÜt ( hog , ty³ , id ); 629 } } 631  $ouut_wr™‹n_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 632 gušt16 ¶’ , gpoš‹r u£r_d©a ) 634  g©t_»que¡ * »q = u£r_d©a ; 636 `de¡roy_g©t_»q ( »q ); 638 ià( ¡©us != 0) { 639 `”rÜ ("Wr™ouuˆ»p܈çžed: %s", `©t_ecode2¡r ( ¡©us )); 642 } } 644  $fÜw¬d_»pÜt ( uhid_ev’t * ev , * u£r_d©a ) 646  bt_hog * hog = u£r_d©a ; 647  »pÜt *report; 648 * d©a ; 649  size ; 651 »pÜt = `fšd_»pÜt_by_¹y³ ( hog , ev -> u . ouut . ¹y³ , 652 ev -> u . ouut . d©a [0]); 653 ià(! »pÜt ) 656 d©a = ev -> u . ouut .data; 657 size = ev -> u . ouut .size; 658 ià( hog -> has_»pÜt_id && size > 0) { 659 d©a ++; 660 -- size ; 663 `DBG ("S’dšg„•Üˆty³ %d ID %dØhªdË 0x%X", »pÜt -> ty³ , 664 »pÜt -> id ,„•Üt-> deþ -> v®ue_hªdË ); 666 ià( hog -> ©Œib =ð NULL ) 669 ià( »pÜt -> deþ -> ´Ý”t›s & GATT_CHR_PROP_WRITE ) 670 `wr™e_ch¬ ( hog , hog-> ©Œib , »pÜt -> deþ -> v®ue_hªdË , 671 d©a , size , ouut_wr™‹n_cb , hog ); 672 ià( »pÜt -> deþ -> ´Ý”t›s & GATT_CHR_PROP_WRITE_WITHOUT_RESP ) 673 `g©t_wr™e_cmd ( hog -> ©Œib , »pÜt -> deþ -> v®ue_hªdË , 674 d©a , size , NULL , NULL); 675 } } 677  $g‘_ã©u» ( uhid_ev’t * ev , * u£r_d©a ) 679  bt_hog * hog = u£r_d©a ; 680  »pÜt *report; 681  uhid_ev’t r¥ ; 682  ”r ; 684 `mem£t (& r¥ , 0, (rsp)); 685 r¥ . ty³ = UHID_FEATURE_ANSWER ; 686 r¥ . u . ã©u»_ªsw” . id = ev ->u. ã©u» .id; 688 »pÜt = `fšd_»pÜt_by_¹y³ ( hog , ev -> u . ã©u» . ¹y³ , 689 ev -> u . ã©u» . ºum ); 690 ià(! »pÜt ) { 691 r¥ . u . ã©u»_ªsw” . ”r = ENOTSUP ; 692  dÚe ; 695 ià(! »pÜt -> v®ue ) { 696 r¥ . u . ã©u»_ªsw” . ”r = EIO ; 697  dÚe ; 700 r¥ . u . ã©u»_ªsw” . size = »pÜt -> Ën ; 701 `memýy ( r¥ . u . ã©u»_ªsw” . d©a , »pÜt -> v®ue ,„•Üt-> Ën ); 703 dÚe : 704 ”r = `bt_uhid_£nd ( hog -> uhid , & r¥ ); 705 ià( ”r < 0) 706 `”rÜ ("bt_uhid_£nd: %s", `¡»¼Ü (- ”r )); 707 } } 709  $£t_»pÜt_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 710 gušt16 ¶’ , gpoš‹r u£r_d©a ) 712  bt_hog * hog = u£r_d©a ; 713  uhid_ev’t r¥ ; 714  ”r ; 716 hog -> £Œ•_©t = 0; 718 `mem£t (& r¥ , 0, (rsp)); 719 r¥ . ty³ = UHID_SET_REPORT_REPLY ; 720 r¥ . u . £t_»pÜt_»¶y . id = hog -> £Œ•_id ; 721 r¥ . u . £t_»pÜt_»¶y . ”r = ¡©us ; 723 ià( ¡©us != 0) 724 `”rÜ ("E¼Ü s‘tšg R•Üˆv®ue: %s", `©t_ecode2¡r ( ¡©us )); 726 ”r = `bt_uhid_£nd ( hog -> uhid , & r¥ ); 727 ià( ”r < 0) 728 `”rÜ ("bt_uhid_£nd: %s", `¡»¼Ü (- ”r )); 729 } } 731  $£t_»pÜt ( uhid_ev’t * ev , * u£r_d©a ) 733  bt_hog * hog = u£r_d©a ; 734  »pÜt *report; 735 * d©a ; 736  size ; 737  ”r ; 740 ià( hog -> £Œ•_©t ) { 741 `g_©Œib_ÿnûl ( hog -> ©Œib , hog-> £Œ•_©t ); 742 hog -> £Œ•_©t = 0; 745 hog -> £Œ•_id = ev -> u . £t_»pÜt . id ; 747 »pÜt = `fšd_»pÜt_by_¹y³ ( hog , ev -> u . £t_»pÜt . ¹y³ , 748 ev -> u . £t_»pÜt . ºum ); 749 ià(! »pÜt ) { 750 ”r = ENOTSUP ; 751  çž ; 754 d©a = ev -> u . £t_»pÜt .data; 755 size = ev -> u . £t_»pÜt .size; 756 ià( hog -> has_»pÜt_id && size > 0) { 757 d©a ++; 758 -- size ; 761 `DBG ("S’dšg„•Üˆty³ %d ID %dØhªdË 0x%X", »pÜt -> ty³ , 762 »pÜt -> id ,„•Üt-> deþ -> v®ue_hªdË ); 764 ià( hog -> ©Œib =ð NULL ) 767 hog -> £Œ•_©t = `g©t_wr™e_ch¬ (hog-> ©Œib , 768 »pÜt -> deþ -> v®ue_hªdË , 769 d©a , size , £t_»pÜt_cb , 770 hog ); 771 ià(! hog -> £Œ•_©t ) { 772 ”r = ENOMEM ; 773  çž ; 777 çž : 779 `£t_»pÜt_cb ( ”r , NULL , 0, hog ); 780 } } 782  $g‘_»pÜt_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 783 gpoš‹r u£r_d©a ) 785  bt_hog * hog = u£r_d©a ; 786  uhid_ev’t r¥ ; 787  ”r ; 789 hog -> g‘»p_©t = 0; 791 `mem£t (& r¥ , 0, (rsp)); 792 r¥ . ty³ = UHID_GET_REPORT_REPLY ; 793 r¥ . u . g‘_»pÜt_»¶y . id = hog -> g‘»p_id ; 795 ià( ¡©us != 0) { 796 `”rÜ ("E¼Ü„—dšg R•Üˆv®ue: %s", `©t_ecode2¡r ( ¡©us )); 797  ex™ ; 800 ià( Ën == 0) { 801 `”rÜ ("E¼Ü„—dšg R•Üt,†’gth %d", Ën ); 802 ¡©us = EIO ; 803  ex™ ; 806 ià( pdu [0] != 0x0b) { 807 `”rÜ ("E¼Ü„—dšg R•Üt, inv®id„e¥Ú£: %02x", pdu [0]); 808 ¡©us = EPROTO ; 809  ex™ ; 812 -- Ën ; 813 ++ pdu ; 814 ià( hog -> has_»pÜt_id && Ën > 0) { 815 -- Ën ; 816 ++ pdu ; 819 r¥ . u . g‘_»pÜt_»¶y . size = Ën ; 820 `memýy ( r¥ . u . g‘_»pÜt_»¶y . d©a , pdu , Ën ); 822 ex™ : 823 r¥ . u . g‘_»pÜt_»¶y . ”r = ¡©us ; 824 ”r = `bt_uhid_£nd ( hog -> uhid , & r¥ ); 825 ià( ”r < 0) 826 `”rÜ ("bt_uhid_£nd: %s", `¡»¼Ü (- ”r )); 827 } } 829  $g‘_»pÜt ( uhid_ev’t * ev , * u£r_d©a ) 831  bt_hog * hog = u£r_d©a ; 832  »pÜt *report; 833 gušt8 ”r ; 836 ià( hog -> g‘»p_©t ) { 837 `g_©Œib_ÿnûl ( hog -> ©Œib , hog-> g‘»p_©t ); 838 hog -> g‘»p_©t = 0; 841 hog -> g‘»p_id = ev -> u . g‘_»pÜt . id ; 843 »pÜt = `fšd_»pÜt_by_¹y³ ( hog , ev -> u . g‘_»pÜt . ¹y³ , 844 ev -> u . g‘_»pÜt . ºum ); 845 ià(! »pÜt ) { 846 ”r = ENOTSUP ; 847  çž ; 850 hog -> g‘»p_©t = `g©t_»ad_ch¬ (hog-> ©Œib , 851 »pÜt -> deþ -> v®ue_hªdË , 852 g‘_»pÜt_cb , hog ); 853 ià(! hog -> g‘»p_©t ) { 854 ”r = ENOMEM ; 855  çž ; 860 çž : 862 `g‘_»pÜt_cb ( ”r , NULL , 0, hog ); 863 } } 865  boÞ $g‘_desütÜ_™em_šfo ( ušt8_t * buf , ssize_t bËn , ssize_ˆ* Ën , 866 boÞ * is_lÚg ) 868 ià(! bËn ) 869  çl£ ; 871 * is_lÚg = ( buf [0] == 0xfe); 873 ià(* is_lÚg ) { 874 ià( bËn < 3) 875  çl£ ; 885 * Ën = buf [1] + 3; 887 ušt8_t b_size ; 897 b_size = buf [0] & 0x03; 898 * Ën = ( b_size ? 1 << (b_size - 1) : 0) + 1; 902  * Ën <ð bËn ; 903 } } 905 * $™em2¡ršg (* ¡r , ušt8_t * buf , ušt8_ˆ Ën ) 907 * p = ¡r ; 908  i ; 914  i = 0; i < 6 && i < Ën ; i++) 915 p +ð `¥rštf Õ, " %02x", buf [ i ]); 921 ià( i < Ën ) 922 `¥rštf ( p , " ..."); 924  ¡r ; 925 } } 927  $»pÜt_m­_»ad_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 928 gpoš‹r u£r_d©a ) 930  g©t_»que¡ * »q = u£r_d©a ; 931  bt_hog * hog = »q -> u£r_d©a ; 932 ušt8_t v®ue [ HOG_REPORT_MAP_MAX_SIZE ]; 933  uhid_ev’t ev ; 934 ssize_t vËn ; 935  ™em¡r [20]; 936  i , ”r ; 937 GE¼Ü * g”r = NULL ; 939 `de¡roy_g©t_»q ( »q ); 941 ià( ¡©us != 0) { 942 `”rÜ ("R•ÜˆM­„—d fažed: %s", `©t_ecode2¡r ( ¡©us )); 946 vËn = `dec_»ad_»¥ ( pdu , ¶’ , v®ue , (value)); 947 ià( vËn < 0) { 948 `”rÜ ("ATT…rotocolƒrror"); 952 `DBG ("Report MAP:"); 953  i = 0; i < vËn ;) { 954 ssize_t ž’ = 0; 955 boÞ lÚg_™em = çl£ ; 957 ià( `g‘_desütÜ_™em_šfo (& v®ue [ i ], vËn - i, & ž’ , 958 & lÚg_™em )) { 960 ià(! lÚg_™em && ( v®ue [ i ] & 0xfc) == 0x84) 961 hog -> has_»pÜt_id = TRUE ; 963 `DBG ("\t%s", `™em2¡ršg ( ™em¡r , & v®ue [ i ], ž’ )); 965 i +ð ž’ ; 967 `”rÜ ("R•ÜˆM­…¬sšg fažed‡ˆ%d", i ); 970 `DBG ("\t%s", `™em2¡ršg ( ™em¡r , & v®ue [ i ], vËn - i)); 976 `mem£t (& ev , 0, (ev)); 977 ev . ty³ = UHID_CREATE ; 979 `bt_io_g‘ ( `g_©Œib_g‘_chªÃl ( hog -> ©Œib ), & g”r , 980 BT_IO_OPT_SOURCE , ev . u . ü—‹ . phys , 981 BT_IO_OPT_DEST , ev . u . ü—‹ . uniq , 982 BT_IO_OPT_INVALID ); 983 ià( g”r ) { 984 `”rÜ ("FažedØcÚÃùiÚ d‘ažs: %s", g”r -> mes§ge ); 985 `g_”rÜ_ä“ ( g”r ); 989 `¡rýy ((*è ev . u . ü—‹ . Çme , hog ->name); 990 ev . u . ü—‹ . v’dÜ = hog ->vendor; 991 ev . u . ü—‹ . ´oduù = hog ->product; 992 ev . u . ü—‹ . v”siÚ = hog ->version; 993 ev . u . ü—‹ . couÁry = hog -> bcouÁrycode ; 994 ev . u . ü—‹ . bus = BUS_BLUETOOTH ; 995 ev . u . ü—‹ . rd_d©a = v®ue ; 996 ev . u . ü—‹ . rd_size = vËn ; 998 ”r = `bt_uhid_£nd ( hog -> uhid , & ev ); 999 ià( ”r < 0) { 1000 `”rÜ ("bt_uhid_£nd: %s", `¡»¼Ü (- ”r )); 1004 `bt_uhid_»gi¡” ( hog -> uhid , UHID_OUTPUT , fÜw¬d_»pÜt , hog); 1005 `bt_uhid_»gi¡” ( hog -> uhid , UHID_FEATURE , g‘_ã©u» , hog); 1006 `bt_uhid_»gi¡” ( hog -> uhid , UHID_GET_REPORT , g‘_»pÜt , hog); 1007 `bt_uhid_»gi¡” ( hog -> uhid , UHID_SET_REPORT , £t_»pÜt , hog); 1008 } } 1010  $šfo_»ad_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 1011 gpoš‹r u£r_d©a ) 1013  g©t_»que¡ * »q = u£r_d©a ; 1014  bt_hog * hog = »q -> u£r_d©a ; 1015 ušt8_t v®ue [ HID_INFO_SIZE ]; 1016 ssize_t vËn ; 1018 `de¡roy_g©t_»q ( »q ); 1020 ià( ¡©us != 0) { 1021 `”rÜ ("HID Information„ead failed: %s", 1022 `©t_ecode2¡r ( ¡©us )); 1026 vËn = `dec_»ad_»¥ ( pdu , ¶’ , v®ue , (value)); 1027 ià( vËn != 4) { 1028 `”rÜ ("ATT…rotocolƒrror"); 1032 hog -> bcdhid = `g‘_Ë16 (& v®ue [0]); 1033 hog -> bcouÁrycode = v®ue [2]; 1034 hog -> æags = v®ue [3]; 1036 `DBG ("bcdHID: 0x%04X bCountryCode: 0x%02X Flags: 0x%02X", 1037 hog -> bcdhid , hog-> bcouÁrycode , hog-> æags ); 1038 } } 1040  $´Ùo_mode_»ad_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 1041 gpoš‹r u£r_d©a ) 1043  g©t_»que¡ * »q = u£r_d©a ; 1044  bt_hog * hog = »q -> u£r_d©a ; 1045 ušt8_t v®ue ; 1046 ssize_t vËn ; 1048 `de¡roy_g©t_»q ( »q ); 1050 ià( ¡©us != 0) { 1051 `”rÜ ("Protocol Mode characteristic„ead failed: %s", 1052 `©t_ecode2¡r ( ¡©us )); 1056 vËn = `dec_»ad_»¥ ( pdu , ¶’ , & v®ue , (value)); 1057 ià( vËn < 0) { 1058 `”rÜ ("ATT…rotocolƒrror"); 1062 ià( v®ue =ð HOG_PROTO_MODE_BOOT ) { 1063 ušt8_t nv® = HOG_PROTO_MODE_REPORT ; 1065 `DBG ("HoG is operating in Boot Procotol Mode"); 1067 `g©t_wr™e_cmd ( hog -> ©Œib , hog-> ´Ùo_mode_hªdË , & nv® , 1068 ( nv® ), NULL , NULL); 1069 } ià( v®ue =ð HOG_PROTO_MODE_REPORT ) 1070 `DBG ("HoG is operating in Report Protocol Mode"); 1071 } } 1073  $ch¬_discov”ed_cb ( ušt8_t ¡©us , GSLi¡ * ch¬s , * u£r_d©a ) 1075  g©t_»que¡ * »q = u£r_d©a ; 1076  bt_hog * hog = »q -> u£r_d©a ; 1077  g©t_´im¬y * ´im¬y = hog ->primary; 1078 bt_uuid_t »pÜt_uuid , »pÜt_m­_uuid , šfo_uuid ; 1079 bt_uuid_t ´Ùo_mode_uuid , ù¾±_uuid ; 1080  »pÜt *report; 1081 GSLi¡ * l ; 1082 ušt16_t šfo_hªdË = 0, ´Ùo_mode_hªdË = 0; 1084 `de¡roy_g©t_»q ( »q ); 1086 ià( ¡©us != 0) { 1087 cÚ¡ * ¡r = `©t_ecode2¡r ( ¡©us ); 1088 `DBG ("Discov”‡Î ch¬aù”i¡ic çžed: %s", ¡r ); 1092 `bt_uuid16_ü—‹ (& »pÜt_uuid , HOG_REPORT_UUID ); 1093 `bt_uuid16_ü—‹ (& »pÜt_m­_uuid , HOG_REPORT_MAP_UUID ); 1094 `bt_uuid16_ü—‹ (& šfo_uuid , HOG_INFO_UUID ); 1095 `bt_uuid16_ü—‹ (& ´Ùo_mode_uuid , HOG_PROTO_MODE_UUID ); 1096 `bt_uuid16_ü—‹ (& ù¾±_uuid , HOG_CONTROL_POINT_UUID ); 1098  l = ch¬s ;†;† = `g_¦i¡_Ãxt (l)) { 1099  g©t_ch¬ * chr , * Ãxt ; 1100 bt_uuid_t uuid ; 1101 ušt16_t ¡¬t , ’d ; 1103 chr = l -> d©a ; 1104 Ãxt = l ->Ãxˆ?†->Ãxt-> d©a : NULL ; 1106 `DBG ("0x%04x UUID: %s…roperties: %02x", 1107 chr -> hªdË , chr-> uuid , chr-> ´Ý”t›s ); 1109 `bt_¡ršg_to_uuid (& uuid , chr ->uuid); 1111 ¡¬t = chr -> v®ue_hªdË + 1; 1112 ’d = ( Ãxt ?‚ext-> hªdË - 1 : ´im¬y -> ¿nge .end); 1114 ià( `bt_uuid_cmp (& uuid , & »pÜt_uuid ) == 0) { 1115 »pÜt = `»pÜt_Ãw ( hog , chr ); 1116 `discov”_»pÜt ( hog , hog-> ©Œib , ¡¬t , ’d , »pÜt ); 1117 } ià( `bt_uuid_cmp (& uuid , & »pÜt_m­_uuid ) == 0) { 1118 `»ad_ch¬ ( hog , hog-> ©Œib , chr -> v®ue_hªdË , 1119 »pÜt_m­_»ad_cb , hog ); 1120 `discov”_ex‹º® ( hog , hog-> ©Œib , ¡¬t , ’d , hog); 1121 } ià( `bt_uuid_cmp (& uuid , & šfo_uuid ) == 0) 1122 šfo_hªdË = chr -> v®ue_hªdË ; 1123 ià( `bt_uuid_cmp (& uuid , & ´Ùo_mode_uuid ) == 0) 1124 ´Ùo_mode_hªdË = chr -> v®ue_hªdË ; 1125 ià( `bt_uuid_cmp (& uuid , & ù¾±_uuid ) == 0) 1126 hog -> ù¾±_hªdË = chr -> v®ue_hªdË ; 1129 ià( ´Ùo_mode_hªdË ) { 1130 hog -> ´Ùo_mode_hªdË =…roto_mode_handle; 1131 `»ad_ch¬ ( hog , hog-> ©Œib , ´Ùo_mode_hªdË , 1132 ´Ùo_mode_»ad_cb , hog ); 1135 ià( šfo_hªdË ) 1136 `»ad_ch¬ ( hog , hog-> ©Œib , šfo_hªdË , šfo_»ad_cb , hog); 1137 } } 1139  $»pÜt_ä“ (* d©a ) 1141  »pÜt *»p܈ð d©a ; 1143 `g_ä“ ( »pÜt -> v®ue ); 1144 `g_ä“ ( »pÜt -> deþ ); 1145 `g_ä“ ( »pÜt ); 1146 } } 1148  $ÿnûl_g©t_»q ( g©t_»que¡ * »q ) 1150 ià( `g_©Œib_ÿnûl ( »q -> hog -> ©Œib ,„eq-> id )) 1151 `de¡roy_g©t_»q ( »q ); 1152 } } 1154  $hog_ä“ (* d©a ) 1156  bt_hog * hog = d©a ; 1158 `bt_hog_d‘ach ( hog ); 1160 `g_¦i¡_ä“_fuÎ ( hog -> š¡ªûs , hog_ä“ ); 1162 `bt_sýp_uÄef ( hog -> sýp ); 1163 `bt_dis_uÄef ( hog -> dis ); 1164 `bt_bas_uÄef ( hog -> bas ); 1165 `bt_uhid_uÄef ( hog -> uhid ); 1166 `g_¦i¡_ä“_fuÎ ( hog -> »pÜts , »pÜt_ä“ ); 1167 `g_ä“ ( hog -> Çme ); 1168 `g_ä“ ( hog -> ´im¬y ); 1169 `queue_de¡roy ( hog -> g©t_Ý , (*è de¡roy_g©t_»q ); 1170 `g_ä“ ( hog ); 1171 } } 1173  bt_hog * $bt_hog_Ãw (cÚ¡ * Çme , ušt16_t v’dÜ , ušt16_ˆ ´oduù , 1174 ušt16_t v”siÚ , * ´im¬y ) 1176  bt_hog * hog ; 1178 hog = `g_Œy_Ãw0 ( bt_hog , 1); 1179 ià(! hog ) 1180  NULL ; 1182 hog -> g©t_Ý = `queue_Ãw (); 1183 ià(! hog -> g©t_Ý ) { 1184 `hog_ä“ ( hog ); 1185  NULL ; 1188 hog -> uhid = `bt_uhid_Ãw_deçuÉ (); 1189 ià(! hog -> uhid ) { 1190 `hog_ä“ ( hog ); 1191 `queue_de¡roy ( hog -> g©t_Ý , NULL ); 1192  NULL ; 1195 hog -> Çme = `g_¡rdup (name); 1196 hog -> v’dÜ = vendor; 1197 hog -> ´oduù =…roduct; 1198 hog -> v”siÚ = version; 1200 ià( ´im¬y ) 1201 hog -> ´im¬y = `g_memdup (primary, (*hog->primary)); 1203  `bt_hog_»f ( hog ); 1204 } } 1206  bt_hog * $bt_hog_»f ( bt_hog * hog ) 1208 ià(! hog ) 1209  NULL ; 1211 `__sync_ãtch_ªd_add (& hog -> »f_couÁ , 1); 1213  hog ; 1214 } } 1216  $bt_hog_uÄef ( bt_hog * hog ) 1218 ià(! hog ) 1221 ià( `__sync_sub_ªd_ãtch (& hog -> »f_couÁ , 1)) 1224 `hog_ä“ ( hog ); 1225 } } 1227  $fšd_šþuded_cb ( ušt8_t ¡©us , GSLi¡ * £rviûs , * u£r_d©a ) 1229  g©t_»que¡ * »q = u£r_d©a ; 1230  bt_hog * hog = »q -> u£r_d©a ; 1231  g©t_šþuded * šþude ; 1232 GSLi¡ * l ; 1234 `DBG (""); 1236 `de¡roy_g©t_»q ( »q ); 1238 ià( hog -> ´im¬y ) 1241 ià( ¡©us ) { 1242 cÚ¡ * ¡r = `©t_ecode2¡r ( ¡©us ); 1243 `DBG ("Fšd inþuded fažed: %s", ¡r ); 1247 ià(! £rviûs ) { 1248 `DBG ("No included service found"); 1252  l = £rviûs ;†;† =†-> Ãxt ) { 1253 šþude = l -> d©a ; 1255 ià( `¡rcmp ( šþude -> uuid , HOG_UUID ) == 0) 1259 ià(! l ) { 1260  l = £rviûs ;†;† =†-> Ãxt ) { 1261 šþude = l -> d©a ; 1263 `fšd_šþuded ( hog , hog-> ©Œib , 1264 šþude -> ¿nge . ¡¬t , 1265 šþude -> ¿nge . ’d , fšd_šþuded_cb , 1266 hog ); 1271 hog -> ´im¬y = `g_Ãw0 ( g©t_´im¬y , 1); 1272 `memýy ( hog -> ´im¬y -> uuid , šþude ->uuid, (include->uuid)); 1273 `memýy (& hog -> ´im¬y -> ¿nge , & šþude ->range, (include->range)); 1275 `discov”_ch¬ ( hog , hog-> ©Œib , hog-> ´im¬y -> ¿nge . ¡¬t , 1276 hog -> ´im¬y -> ¿nge . ’d , NULL , 1277 ch¬_discov”ed_cb , hog ); 1278 } } 1280  $hog_©ch_sýp ( bt_hog * hog ,  g©t_´im¬y * ´im¬y ) 1282 ià( hog -> sýp ) { 1283 `bt_sýp_©ch ( hog -> sýp , hog-> ©Œib ); 1287 hog -> sýp = `bt_sýp_Ãw ( ´im¬y ); 1288 ià( hog -> sýp ) 1289 `bt_sýp_©ch ( hog -> sýp , hog-> ©Œib ); 1290 } } 1292  $dis_nÙify ( ušt8_t sourû , ušt16_t v’dÜ , ušt16_ˆ ´oduù , 1293 ušt16_t v”siÚ , * u£r_d©a ) 1295  bt_hog * hog = u£r_d©a ; 1297 hog -> v’dÜ = vendor; 1298 hog -> ´oduù =…roduct; 1299 hog -> v”siÚ = version; 1300 } } 1302  $hog_©ch_dis ( bt_hog * hog ,  g©t_´im¬y * ´im¬y ) 1304 ià( hog -> dis ) { 1305 `bt_dis_©ch ( hog -> dis , hog-> ©Œib ); 1309 hog -> dis = `bt_dis_Ãw ( ´im¬y ); 1310 ià( hog -> dis ) { 1311 `bt_dis_£t_nÙifiÿtiÚ ( hog -> dis , dis_nÙify , hog); 1312 `bt_dis_©ch ( hog -> dis , hog-> ©Œib ); 1314 } } 1316  $hog_©ch_bas ( bt_hog * hog ,  g©t_´im¬y * ´im¬y ) 1318 ià( hog -> bas ) { 1319 `bt_bas_©ch ( hog -> bas , hog-> ©Œib ); 1323 hog -> bas = `bt_bas_Ãw ( ´im¬y ); 1324 ià( hog -> bas ) 1325 `bt_bas_©ch ( hog -> bas , hog-> ©Œib ); 1326 } } 1328  $hog_©ch_hog ( bt_hog * hog ,  g©t_´im¬y * ´im¬y ) 1330  bt_hog * š¡ªû ; 1332 ià(! hog -> ´im¬y ) { 1333 hog -> ´im¬y = `g_memdup (primary, (*primary)); 1334 `discov”_ch¬ ( hog , hog-> ©Œib , ´im¬y -> ¿nge . ¡¬t , 1335 ´im¬y -> ¿nge . ’d , NULL , 1336 ch¬_discov”ed_cb , hog ); 1340 š¡ªû = `bt_hog_Ãw ( hog -> Çme , hog-> v’dÜ , hog-> ´oduù , 1341 hog -> v”siÚ , ´im¬y ); 1342 ià(! š¡ªû ) 1345 `bt_hog_©ch ( š¡ªû , hog -> ©Œib ); 1346 hog -> š¡ªûs = `g_¦i¡_­³nd (hog->š¡ªûs, š¡ªû ); 1347 } } 1349  $´im¬y_cb ( ušt8_t ¡©us , GSLi¡ * £rviûs , * u£r_d©a ) 1351  g©t_»que¡ * »q = u£r_d©a ; 1352  bt_hog * hog = »q -> u£r_d©a ; 1353  g©t_´im¬y * ´im¬y ; 1354 GSLi¡ * l ; 1356 `DBG (""); 1358 `de¡roy_g©t_»q ( »q ); 1360 ià( ¡©us ) { 1361 cÚ¡ * ¡r = `©t_ecode2¡r ( ¡©us ); 1362 `DBG ("Discov”…rim¬y fažed: %s", ¡r ); 1366 ià(! £rviûs ) { 1367 `DBG ("No…rimary service found"); 1371  l = £rviûs ;†;† =†-> Ãxt ) { 1372 ´im¬y = l -> d©a ; 1374 ià( `¡rcmp ( ´im¬y -> uuid , SCAN_PARAMETERS_UUID ) == 0) { 1375 `hog_©ch_sýp ( hog , ´im¬y ); 1379 ià( `¡rcmp ( ´im¬y -> uuid , DEVICE_INFORMATION_UUID ) == 0) { 1380 `hog_©ch_dis ( hog , ´im¬y ); 1384 ià( `¡rcmp ( ´im¬y -> uuid , BATTERY_UUID ) == 0) { 1385 `hog_©ch_bas ( hog , ´im¬y ); 1389 ià( `¡rcmp ( ´im¬y -> uuid , HOG_UUID ) == 0) 1390 `hog_©ch_hog ( hog , ´im¬y ); 1393 ià( hog -> ´im¬y ) 1396  l = £rviûs ;†;† =†-> Ãxt ) { 1397 ´im¬y = l -> d©a ; 1399 `fšd_šþuded ( hog , hog-> ©Œib , ´im¬y -> ¿nge . ¡¬t , 1400 ´im¬y -> ¿nge . ’d , fšd_šþuded_cb , hog ); 1402 } } 1404 boÞ $bt_hog_©ch ( bt_hog * hog , * g©t ) 1406  g©t_´im¬y * ´im¬y = hog ->primary; 1407 GSLi¡ * l ; 1409 ià( hog -> ©Œib ) 1410  çl£ ; 1412 hog -> ©Œib = `g_©Œib_»f ( g©t ); 1414 ià(! ´im¬y ) { 1415 `discov”_´im¬y ( hog , hog-> ©Œib , NULL , ´im¬y_cb , hog); 1416  Œue ; 1419 ià( hog -> sýp ) 1420 `bt_sýp_©ch ( hog -> sýp , g©t ); 1422 ià( hog -> dis ) 1423 `bt_dis_©ch ( hog -> dis , g©t ); 1425 ià( hog -> bas ) 1426 `bt_bas_©ch ( hog -> bas , g©t ); 1428  l = hog -> š¡ªûs ;†;† =†-> Ãxt ) { 1429  bt_hog * š¡ªû = l -> d©a ; 1431 `bt_hog_©ch ( š¡ªû , g©t ); 1434 ià( hog -> »pÜts =ð NULL ) { 1435 `discov”_ch¬ ( hog , hog-> ©Œib , ´im¬y -> ¿nge . ¡¬t , 1436 ´im¬y -> ¿nge . ’d , NULL , 1437 ch¬_discov”ed_cb , hog ); 1438  Œue ; 1441  l = hog -> »pÜts ;†;† =†-> Ãxt ) { 1442  »pÜt * r = l -> d©a ; 1444 r -> nÙifyid = `g_©Œib_»gi¡” ( hog -> ©Œib , 1445 ATT_OP_HANDLE_NOTIFY , 1446 r -> deþ -> v®ue_hªdË , 1447 »pÜt_v®ue_cb , r , NULL ); 1450  Œue ; 1451 } } 1453  $bt_hog_d‘ach ( bt_hog * hog ) 1455 GSLi¡ * l ; 1457 ià(! hog -> ©Œib ) 1460  l = hog -> š¡ªûs ;†;† =†-> Ãxt ) { 1461  bt_hog * š¡ªû = l -> d©a ; 1463 `bt_hog_d‘ach ( š¡ªû ); 1466  l = hog -> »pÜts ;†;† =†-> Ãxt ) { 1467  »pÜt * r = l -> d©a ; 1469 ià( r -> nÙifyid > 0) { 1470 `g_©Œib_uÄegi¡” ( hog -> ©Œib , r -> nÙifyid ); 1471 r -> nÙifyid = 0; 1475 ià( hog -> sýp ) 1476 `bt_sýp_d‘ach ( hog -> sýp ); 1478 ià( hog -> dis ) 1479 `bt_dis_d‘ach ( hog -> dis ); 1481 ià( hog -> bas ) 1482 `bt_bas_d‘ach ( hog -> bas ); 1484 `queue_fÜ—ch ( hog -> g©t_Ý , (*è ÿnûl_g©t_»q , NULL ); 1485 `g_©Œib_uÄef ( hog -> ©Œib ); 1486 hog -> ©Œib = NULL ; 1487 } } 1489  $bt_hog_£t_cÚŒÞ_pošt ( bt_hog * hog , boÞ su¥’d ) 1491 ušt8_t v®ue = su¥’d ? 0x00 : 0x01; 1493 ià( hog -> ©Œib =ð NULL ) 1494  - ENOTCONN ; 1496 ià( hog -> ù¾±_hªdË == 0) 1497  - ENOTSUP ; 1499 `g©t_wr™e_cmd ( hog -> ©Œib , hog-> ù¾±_hªdË , & v®ue , 1500 ( v®ue ), NULL , NULL); 1503 } } 1505  $bt_hog_£nd_»pÜt ( bt_hog * hog , * d©a , size_t size ,  ty³ ) 1507  »pÜt *report; 1508 GSLi¡ * l ; 1510 ià(! hog ) 1511  - EINVAL ; 1513 ià(! hog -> ©Œib ) 1514  - ENOTCONN ; 1516 »pÜt = `fšd_»pÜt ( hog , ty³ , 0); 1517 ià(! »pÜt ) 1518  - ENOTSUP ; 1520 `DBG ("hog: Wr™»pÜt, hªdË 0x%X", »pÜt -> deþ -> v®ue_hªdË ); 1522 ià( »pÜt -> deþ -> ´Ý”t›s & GATT_CHR_PROP_WRITE ) 1523 `wr™e_ch¬ ( hog , hog-> ©Œib , »pÜt -> deþ -> v®ue_hªdË , 1524 d©a , size , ouut_wr™‹n_cb , hog ); 1526 ià( »pÜt -> deþ -> ´Ý”t›s & GATT_CHR_PROP_WRITE_WITHOUT_RESP ) 1527 `g©t_wr™e_cmd ( hog -> ©Œib , »pÜt -> deþ -> v®ue_hªdË , 1528 d©a , size , NULL , NULL); 1530  l = hog -> š¡ªûs ;†;† =†-> Ãxt ) { 1531  bt_hog * š¡ªû = l -> d©a ; 1533 `bt_hog_£nd_»pÜt ( š¡ªû , d©a , size , ty³ ); 1537 } } @android/hog.h 24  gbt_hog ; 26  bt_hog * bt_hog_Ãw (cÚ¡ * Çme , ušt16_t v’dÜ , ušt16_ˆ ´oduù , 27 ušt16_t v”siÚ , * ´im¬y ); 29  bt_hog * bt_hog_»f (bt_hog * hog ); 30  bt_hog_uÄef ( bt_hog * hog ); 32 boÞ bt_hog_©ch ( bt_hog * hog , * g©t ); 33  bt_hog_d‘ach ( bt_hog * hog ); 35  bt_hog_£t_cÚŒÞ_pošt ( bt_hog * hog , boÞ su¥’d ); 36  bt_hog_£nd_»pÜt ( bt_hog * hog , * d©a , size_t size ,  ty³ ); @android/ipc-common.h 24  #IPC_MTU 1024 ) 26  #IPC_STATUS_SUCCESS 0x00 ) 28  sc_hdr { 29 ušt8_t m£rviû_id ; 30 ušt8_t mÝcode ; 31 ušt16_t mËn ; 32 ušt8_t m·ylßd [0]; 33 } __©Œibu‹__ (( ·cked )); 35  #IPC_OP_STATUS 0x00 ) 36  sc_¡©us { 37 ušt8_t mcode ; 38 } __©Œibu‹__ (( ·cked )); @android/ipc-tester.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~ 30  ~<”ºo.h > 31  ~ 33  ~ 34  ~ 35  ~ 36  ~ 37  ~ 38  ~ 40  ~"lib/blu‘oÙh.h " 41  ~"lib/mgmt.h " 43  ~"¤c/sh¬ed/‹¡”.h " 44  ~"¤c/sh¬ed/mgmt.h " 45  ~"emuÏtÜ/hc›mu.h " 47  ~"h®-msg.h " 48  ~"c-commÚ.h " 50  ~ 52  #WAIT_FOR_SIGNAL_TIME 2 ) 53  #EMULATOR_SIGNAL "emuÏtÜ_¡¬‹d" ) 55  s‹¡_d©a { 56  mgmt * mmgmt ; 57 ušt16_t mmgmt_šdex ; 58  hc›mu * mhc›mu ; 59 hc›mu_ty³ mhc›mu_ty³ ; 60 pid_t mblu‘oÙhd_pid ; 61 boÞ m£tup_dÚe ; 64  sc_d©a { 65 * mbufãr ; 66 size_t mËn ; 69  sg’”ic_d©a { 70  c_d©a mc_d©a ; 72  mnum_£rviûs ; 73  mš™_£rviûs []; 76  s»gmod_msg { 77  c_hdr mh—d” ; 78  h®_cmd_»gi¡”_moduË mcmd ; 79 } __©Œibu‹__ (( ·cked )); 81  #CONNECT_TIMEOUT (5 * 1000) ) 82  #SERVICE_NAME "blu‘oÙhd" ) 84  gexec_dœ [ PATH_MAX ]; 86  gcmd_sk = -1; 87  gnÙif_sk = -1; 89  $»ad_šfo_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 90 cÚ¡ * ·¿m , * u£r_d©a ) 92  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 93 cÚ¡  mgmt_½_»ad_šfo * ½ = ·¿m ; 94  addr [18]; 95 ušt16_t mªuçùu»r ; 96 ušt32_t suµÜ‹d_£‰šgs , cu¼’t_£‰šgs ; 98 `‹¡”_´št ("Read Info callback"); 99 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 101 ià( ¡©us || ! ·¿m ) { 102 `‹¡”_´e_£tup_çžed (); 106 `ba2¡r (& ½ -> bdaddr , addr ); 107 mªuçùu»r = `btohs ( ½ ->manufacturer); 108 suµÜ‹d_£‰šgs = `btohl ( ½ ->supported_settings); 109 cu¼’t_£‰šgs = `btohl ( ½ ->current_settings); 111 `‹¡”_´št (" Add»ss: %s", addr ); 112 `‹¡”_´št (" V”siÚ: 0x%02x", ½ -> v”siÚ ); 113 `‹¡”_´št (" Mªuçùu»r: 0x%04x", mªuçùu»r ); 114 `‹¡”_´št (" SuµÜ‹d s‘tšgs: 0x%08x", suµÜ‹d_£‰šgs ); 115 `‹¡”_´št (" Cu¼’ˆ£‰šgs: 0x%08x", cu¼’t_£‰šgs ); 116 `‹¡”_´št (" Class: 0x%02x%02x%02x", 117 ½ -> dev_þass [2],„p->dev_class[1],„p->dev_class[0]); 118 `‹¡”_´št (" Name: %s", ½ -> Çme ); 119 `‹¡”_´št (" Sh܈Çme: %s", ½ -> shÜt_Çme ); 121 ià( `¡rcmp ( `hc›mu_g‘_add»ss ( d©a -> hc›mu ), addr )) { 122 `‹¡”_´e_£tup_çžed (); 126 `‹¡”_´e_£tup_com¶‘e (); 127 } } 129  $šdex_added_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 130 cÚ¡ * ·¿m , * u£r_d©a ) 132  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 134 `‹¡”_´št ("Index Added callback"); 135 `‹¡”_´št (" Index: 0x%04x", šdex ); 137 d©a -> mgmt_šdex = šdex ; 139 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_INFO , d©a-> mgmt_šdex , 0, NULL , 140 »ad_šfo_ÿÎback , NULL , NULL); 141 } } 143  $šdex_»moved_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 144 cÚ¡ * ·¿m , * u£r_d©a ) 146  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 148 `‹¡”_´št ("Index Removed callback"); 149 `‹¡”_´št (" Index: 0x%04x", šdex ); 151 ià( šdex !ð d©a -> mgmt_šdex ) 154 `mgmt_uÄegi¡”_šdex ( d©a -> mgmt , d©a-> mgmt_šdex ); 156 `mgmt_uÄef ( d©a -> mgmt ); 157 d©a -> mgmt = NULL ; 159 `‹¡”_po¡_‹¬down_com¶‘e (); 160 } } 162  $»ad_šdex_li¡_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 163 cÚ¡ * ·¿m , * u£r_d©a ) 165  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 167 `‹¡”_´št ("Read Index List callback"); 168 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 170 ià( ¡©us || ! ·¿m ) { 171 `‹¡”_´e_£tup_çžed (); 175 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_INDEX_ADDED , MGMT_INDEX_NONE , 176 šdex_added_ÿÎback , NULL , NULL); 178 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_INDEX_REMOVED , MGMT_INDEX_NONE , 179 šdex_»moved_ÿÎback , NULL , NULL); 181 d©a -> hc›mu = `hc›mu_Ãw (d©a-> hc›mu_ty³ ); 182 ià(! d©a -> hc›mu ) { 183 `‹¡”_w¬n ("Failedo setup HCIƒmulation"); 184 `‹¡”_´e_£tup_çžed (); 188 `‹¡”_´št ("New hciemu instance created"); 189 } } 191  $‹¡_´e_£tup (cÚ¡ * d©a ) 193  ‹¡_d©a *‹¡_d©¨ð `‹¡”_g‘_d©a (); 195 ià(! `‹¡”_u£_debug ()) 196 `fþo£ ( ¡d”r ); 198 ‹¡_d©a -> mgmt = `mgmt_Ãw_deçuÉ (); 199 ià(! ‹¡_d©a -> mgmt ) { 200 `‹¡”_w¬n ("Failedo setup management interface"); 201 `‹¡”_´e_£tup_çžed (); 205 `mgmt_£nd ( ‹¡_d©a -> mgmt , MGMT_OP_READ_INDEX_LIST , MGMT_INDEX_NONE , 0, 206 NULL , »ad_šdex_li¡_ÿÎback , NULL, NULL); 207 } } 209  $‹¡_po¡_‹¬down (cÚ¡ * d©a ) 211  ‹¡_d©a *‹¡_d©¨ð `‹¡”_g‘_d©a (); 213 ià( ‹¡_d©a -> hc›mu ) { 214 `hc›mu_uÄef ( ‹¡_d©a -> hc›mu ); 215 ‹¡_d©a -> hc›mu = NULL ; 217 } } 219  $blu‘oÙhd_¡¬t ( hci_šdex ) 221  ´g_Çme [ PATH_MAX ]; 222  šdex [8]; 223 * ´g_¬gv [4]; 225 `¢´štf ( ´g_Çme , Õrg_Çme), "%s/%s", exec_dœ , "bluetoothd"); 226 `¢´štf ( šdex , (šdex), "%d", hci_šdex ); 228 ´g_¬gv [0] = ´g_Çme ; 229 ´g_¬gv [1] = "-i"; 230 ´g_¬gv [2] = šdex ; 231 ´g_¬gv [3] = NULL ; 233 ià(! `‹¡”_u£_debug ()) 234 `fþo£ ( ¡d”r ); 236 `execve ( ´g_¬gv [0],…rg_¬gv, NULL ); 237 } } 239  $emuÏtÜ ( pe ,  hci_šdex ) 241 cÚ¡  SYSTEM_SOCKET_PATH [] = "\0android_system"; 242  buf [1024]; 243  sockaddr_un addr ; 244  timev® tv ; 245  fd ; 246 ssize_t Ën ; 248 fd = `sock‘ ( PF_LOCAL , SOCK_DGRAM | SOCK_CLOEXEC , 0); 249 ià( fd < 0) 250  çžed ; 252 tv . tv_£c = WAIT_FOR_SIGNAL_TIME ; 253 tv . tv_u£c = 0; 254 `£tsockÝt ( fd , SOL_SOCKET , SO_RCVTIMEO , (*)& tv , (tv)); 256 `mem£t (& addr , 0, (addr)); 257 addr . sun_çmžy = AF_UNIX ; 258 `memýy ( addr . sun_·th , SYSTEM_SOCKET_PATH , (SYSTEM_SOCKET_PATH)); 260 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 261 `³¼Ü ("Failedo bind system socket"); 262  çžed ; 265 Ën = `wr™e ( pe , EMULATOR_SIGNAL , (EMULATOR_SIGNAL)); 267 ià( Ën !ð( EMULATOR_SIGNAL )) 268  çžed ; 270 `mem£t ( buf , 0, (buf)); 272 Ën = `»ad ( fd , buf , (buf)); 273 ià( Ën <ð0 || `¡rcmp ( buf , "ctl.start=bluetoothd")) 274  çžed ; 276 `þo£ ( pe ); 277 `þo£ ( fd ); 278  `blu‘oÙhd_¡¬t ( hci_šdex ); 280 çžed : 281 `þo£ ( pe ); 282 ià( fd >= 0) 283 `þo£ ( fd ); 284 } } 286  $acû±_cÚÃùiÚ ( sk ) 288  ”r ; 289  pÞlfd pfd ; 290  Ãw_sk ; 292 `mem£t (& pfd , 0 , (pfd)); 293 pfd . fd = sk ; 294 pfd . ev’ts = POLLIN ; 296 ”r = `pÞl (& pfd , 1, CONNECT_TIMEOUT ); 297 ià( ”r < 0) { 298 ”r = ”ºo ; 299 `‹¡”_w¬n ("FažedØpÞl: %d (%s)", ”r , `¡»¼Ü (err)); 300  - ”ºo ; 303 ià( ”r == 0) { 304 `‹¡”_w¬n ("bluetoothd connectimeout"); 305  - ”ºo ; 308 Ãw_sk = `acû± ( sk , NULL , NULL); 309 ià( Ãw_sk < 0) { 310 ”r = ”ºo ; 311 `‹¡”_w¬n ("Failedo‡ccept socket: %d (%s)", 312 ”r , `¡»¼Ü (err)); 313  - ”ºo ; 316  Ãw_sk ; 317 } } 319  boÞ $š™_c () 321  sockaddr_un addr ; 323  sk ; 324  ”r ; 326 sk = `sock‘ ( AF_LOCAL , SOCK_SEQPACKET , 0); 327 ià( sk < 0) { 328 ”r = ”ºo ; 329 `‹¡”_w¬n ("FažedØü—‹ sock‘: %d (%s)", ”r , 330 `¡»¼Ü ( ”r )); 331  çl£ ; 334 `mem£t (& addr , 0, (addr)); 335 addr . sun_çmžy = AF_UNIX ; 337 `memýy ( addr . sun_·th , BLUEZ_HAL_SK_PATH , (BLUEZ_HAL_SK_PATH)); 339 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 340 ”r = ”ºo ; 341 `‹¡”_w¬n ("FažedØbšd sock‘: %d (%s)", ”r , 342 `¡»¼Ü ( ”r )); 343 `þo£ ( sk ); 344  çl£ ; 347 ià( `li¡’ ( sk , 2) < 0) { 348 ”r = ”ºo ; 349 `‹¡”_w¬n ("FažedØli¡’ oÀsock‘: %d (%s)", ”r , 350 `¡»¼Ü ( ”r )); 351 `þo£ ( sk ); 352  çl£ ; 356 ià( `´Ý”ty_£t ("ùl.¡¬t", SERVICE_NAME ) < 0) { 357 `‹¡”_w¬n ("FažedØ¡¬ˆ£rviû %s", SERVICE_NAME ); 358 `þo£ ( sk ); 359  çl£ ; 362 cmd_sk = `acû±_cÚÃùiÚ ( sk ); 363 ià( cmd_sk < 0) { 364 `þo£ ( sk ); 365  çl£ ; 368 nÙif_sk = `acû±_cÚÃùiÚ ( sk ); 369 ià( nÙif_sk < 0) { 370 `þo£ ( sk ); 371 `þo£ ( cmd_sk ); 372 cmd_sk = -1; 373  çl£ ; 376 `‹¡”_´št ("bluetoothd connected"); 378 `þo£ ( sk ); 380  Œue ; 381 } } 383  $þ—nup_c () 385 ià( cmd_sk < 0) 388 `þo£ ( cmd_sk ); 389 cmd_sk = -1; 390 } } 392  gboÞ—n $check_fÜ_d«mÚ ( gpoš‹r u£r_d©a ) 394  ¡©us ; 395  ‹¡_d©a * d©a = u£r_d©a ; 397 ià(( `wa™pid ( d©a -> blu‘oÙhd_pid , & ¡©us , WNOHANG )) 398 !ð d©a -> blu‘oÙhd_pid ) 399  Œue ; 401 ià( d©a -> £tup_dÚe ) { 402 ià( `WIFEXITED ( ¡©us ) && 403 ( `WEXITSTATUS ( ¡©us è=ð EXIT_SUCCESS )) { 404 `‹¡”_‹¡_·s£d (); 405  çl£ ; 407 `‹¡”_‹¡_çžed (); 409 `‹¡”_£tup_çžed (); 410 `‹¡_po¡_‹¬down ( d©a ); 413 `‹¡”_w¬n ("UÃx³ùed D«mÚ shutdowÀw™h stu %d", ¡©us ); 414  çl£ ; 415 } } 417  boÞ $£tup_moduË ( £rviû_id ) 419  c_hdr »¥Ú£ ; 420  c_hdr ex³ùed_»¥Ú£ ; 422  »gmod_msg btmoduË_msg = { 423 . h—d” = { 424 . £rviû_id = HAL_SERVICE_ID_CORE , 425 . Ýcode = HAL_OP_REGISTER_MODULE , 426 . Ën = ( h®_cmd_»gi¡”_moduË ), 428 . cmd = { 429 . £rviû_id = service_id, 430 . mode = HAL_MODE_DEFAULT , 431 . max_þ›Ás = 1, 435 ià( `wr™e ( cmd_sk , & btmoduË_msg , (btmodule_msg)) < 0) 436  çž ; 438 ià( `»ad ( cmd_sk , & »¥Ú£ , (response)) < 0) 439  çž ; 441 ex³ùed_»¥Ú£ = btmoduË_msg . h—d” ; 442 ex³ùed_»¥Ú£ . Ën = 0; 444 ià( `memcmp (& »¥Ú£ , & ex³ùed_»¥Ú£ , (response)) == 0) 445  Œue ; 447 çž : 448 `‹¡”_w¬n ("Module„egistration failed."); 449  çl£ ; 450 } } 452  $£tup (cÚ¡ * d©a ) 454 cÚ¡  g’”ic_d©a *g’”ic_d©¨ð d©a ; 455  ‹¡_d©a *‹¡_d©¨ð `‹¡”_g‘_d©a (); 456  sigÇl_fd [2]; 457  buf [1024]; 458 pid_t pid ; 459  Ën ; 460  i ; 462 ià( `pe ( sigÇl_fd )) 463  çžed ; 465 pid = `fÜk (); 467 ià( pid < 0) { 468 `þo£ ( sigÇl_fd [0]); 469 `þo£ ( sigÇl_fd [1]); 470  çžed ; 473 ià( pid == 0) { 474 ià(! `‹¡”_u£_debug ()) 475 `fþo£ ( ¡d”r ); 477 `þo£ ( sigÇl_fd [0]); 478 `emuÏtÜ ( sigÇl_fd [1], ‹¡_d©a -> mgmt_šdex ); 479 `ex™ (0); 482 `þo£ ( sigÇl_fd [1]); 483 ‹¡_d©a -> blu‘oÙhd_pid = pid ; 485 Ën = `»ad ( sigÇl_fd [0], buf , (buf)); 486 ià( Ën <ð0 || ( `¡rcmp ( buf , EMULATOR_SIGNAL ))) { 487 `þo£ ( sigÇl_fd [0]); 488  çžed ; 491 `g_idË_add_fuÎ ( G_PRIORITY_DEFAULT_IDLE , check_fÜ_d«mÚ , ‹¡_d©a , 492 NULL ); 494 ià(! `š™_c ()) { 495 `‹¡”_w¬n ("Cannot initialize IPC mechanism!"); 496  çžed ; 498 `‹¡”_´št ("WžÈš™ %d s”viûs.", g’”ic_d©a -> num_£rviûs ); 500  i = 0; i < g’”ic_d©a -> num_£rviûs ; i++) 501 ià(! `£tup_moduË ( g’”ic_d©a -> š™_£rviûs [ i ])) { 502 `þ—nup_c (); 503  çžed ; 506 ‹¡_d©a -> £tup_dÚe = Œue ; 508 `‹¡”_£tup_com¶‘e (); 511 çžed : 512 `g_idË_»move_by_d©a ( ‹¡_d©a ); 513 `‹¡”_£tup_çžed (); 514 `‹¡_po¡_‹¬down ( d©a ); 515 } } 517  $‹¬down (cÚ¡ * d©a ) 519  ‹¡_d©a *‹¡_d©¨ð `‹¡”_g‘_d©a (); 521 `g_idË_»move_by_d©a ( ‹¡_d©a ); 522 `þ—nup_c (); 524 ià( ‹¡_d©a -> blu‘oÙhd_pid ) 525 `wa™pid ( ‹¡_d©a -> blu‘oÙhd_pid , NULL , 0); 527 `‹¡”_‹¬down_com¶‘e (); 528 } } 530  $c_£nd_tc (cÚ¡ * d©a ) 532 cÚ¡  g’”ic_d©a *g’”ic_d©¨ð d©a ; 533 cÚ¡  c_d©a *c_d©¨ð& g’”ic_d©a ->ipc_data; 535 ià( c_d©a -> Ën ) { 536 ià( `wr™e ( cmd_sk , c_d©a -> bufãr , ipc_d©a-> Ën ) < 0) 537 `‹¡”_‹¡_çžed (); 539 } } 541  #£rviû_d©a ( ¬gs ...è{‡rg } ) 543  #g’_d©a ( wr™–’ , wr™ebuf , £rviûli¡ ...) \ 545 . c_d©a = { \ 546 . bufãr = wr™ebuf , \ 547 . Ën = wr™–’ , \ 549 . š™_£rviûs = `£rviû_d©a ( £rviûli¡ ), \ 550 . num_£rviûs = ((const []) \ 551 `£rviû_d©a ( £rviûli¡ )) / \ 553 } ) 555  #‹¡_g’”ic ( Çme , ‹¡ , £tup , ‹¬down , bufãr , wr™–’ , \ 556 £rviûs ...) \ 558  ‹¡_d©a * u£r ; \ 559 cÚ¡  g’”ic_d©a d©a = \ 560 `g’_d©a ( wr™–’ , bufãr , £rviûs ); \ 561 u£r = `g_m®loc0 (( ‹¡_d©a )); \ 562 ià(! u£r ) \ 564 u£r -> hc›mu_ty³ = HCIEMU_TYPE_BREDRLE ; \ 565 `‹¡”_add_fuÎ ( Çme , & d©a , ‹¡_´e_£tup , £tup , \ 566 ‹¡ , ‹¬down , ‹¡_po¡_‹¬down , \ 567 3, u£r , g_ä“ ); \ 568 } 0) ) 570  #‹¡_Ýcode_v®id ( _Çme , _£rviû , _Ýcode , _Ën , _£rviûli¡ ...) \ 572  c_hdr hdr = { \ 573 . £rviû_id = _£rviû , \ 574 . Ýcode = _Ýcode , \ 575 . Ën = _Ën , \ 578 `‹¡_g’”ic ("Opcodouˆoà¿nge: " _Çme , \ 579 c_£nd_tc , £tup , ‹¬down , \ 580 & hdr , \ 581 ( hdr ), \ 582 _£rviûli¡ ); \ 583 } 0) ) 585  sv¬d©a { 586  c_hdr mhdr ; 587 ušt8_t mbuf [ IPC_MTU ]; 588 } __©Œibu‹__ (( ·cked )); 590  #‹¡_d©asize_v®id ( _Çme , _£rviû , _Ýcode , _hËn , _add©asize , \ 591 _£rviûli¡ ...) \ 593  v¬d©a vd©a = { \ 594 . hdr . £rviû_id = _£rviû , \ 595 . hdr . Ýcode = _Ýcode , \ 596 . hdr . Ën = ( _hËn è+ ( _add©asize ), \ 597 . buf = {}, \ 599 `‹¡_g’”ic ("D©¨siz" _Çme , \ 600 c_£nd_tc , £tup , ‹¬down , \ 601 & vd©a , \ 602 ( vd©a . hdr è+ ( _hËn è+ ( _add©asize ),\ 603 _£rviûli¡ ); \ 604 } 0) ) 606  »gmod_msg g»gi¡”_bt_msg = { 607 . h—d” = { 608 . £rviû_id = HAL_SERVICE_ID_CORE , 609 . gÝcode = HAL_OP_REGISTER_MODULE , 610 . gËn = ( h®_cmd_»gi¡”_moduË ), 612 . gcmd = { 613 . £rviû_id = HAL_SERVICE_ID_BLUETOOTH , 617  »gmod_msg g»gi¡”_bt_m®fÜmed_size_msg = { 618 . h—d” = { 619 . £rviû_id = HAL_SERVICE_ID_CORE , 620 . gÝcode = HAL_OP_REGISTER_MODULE , 622 . gËn = ( h®_cmd_»gi¡”_moduË ) - 1, 624 . gcmd = { 625 . £rviû_id = HAL_SERVICE_ID_CORE , 629  sm®fÜmed_d©a3_¡ruù { 630  »gmod_msg mv®id_msg ; 631  m»dundªt_d©a ; 632 } __©Œibu‹__ (( ·cked )); 634  m®fÜmed_d©a3_¡ruù gm®fÜmed_d©a3_msg = { 636 . v®id_msg = { 637 . h—d” = { 638 . £rviû_id = HAL_SERVICE_ID_CORE , 639 . gÝcode = HAL_OP_REGISTER_MODULE , 640 . gËn = ( h®_cmd_»gi¡”_moduË ), 642 . gcmd = { 643 . £rviû_id = HAL_SERVICE_ID_CORE , 647 . g»dundªt_d©a = 666, 650  c_hdr g’abË_unknown_£rviû_hdr = { 651 . £rviû_id = HAL_SERVICE_ID_MAX + 1, 652 . gÝcode = HAL_OP_REGISTER_MODULE , 653 . gËn = 0, 656  c_hdr g’abË_bt_£rviû_hdr = { 657 . £rviû_id = HAL_SERVICE_ID_BLUETOOTH , 658 . gÝcode = HAL_OP_ENABLE , 659 . gËn = 0, 662  sbt_£t_ad­‹r_´Ý_d©a { 663  c_hdr mhdr ; 664  h®_cmd_£t_ad­‹r_´Ý m´Ý ; 667 ušt8_t mbuf [ IPC_MTU - ( c_hdr ) - 668 ( h®_cmd_£t_ad­‹r_´Ý )]; 669 } __©Œibu‹__ (( ·cked )); 671  #£t_Çme "Ãw‚ame" ) 673  bt_£t_ad­‹r_´Ý_d©a gbt_£t_ad­‹r_´Ý_d©a_ov”s = { 674 . hdr . £rviû_id = HAL_SERVICE_ID_BLUETOOTH , 675 . ghdr . gÝcode = HAL_OP_SET_ADAPTER_PROP , 676 . ghdr . gËn = ( h®_cmd_£t_ad­‹r_´Ý è+ ( £t_Çme ), 678 . g´Ý . gty³ = HAL_PROP_ADAPTER_NAME , 680 . g´Ý . gËn = ( £t_Çme ) + 1, 682 . gbuf = £t_Çme , 685  bt_£t_ad­‹r_´Ý_d©a gbt_£t_ad­‹r_´Ý_d©a_und”s = { 686 . hdr . £rviû_id = HAL_SERVICE_ID_BLUETOOTH , 687 . ghdr . gÝcode = HAL_OP_SET_ADAPTER_PROP , 688 . ghdr . gËn = ( h®_cmd_£t_ad­‹r_´Ý è+ ( £t_Çme ), 690 . g´Ý . gty³ = HAL_PROP_ADAPTER_NAME , 692 . g´Ý . gËn = ( £t_Çme ) - 1, 694 . gbuf = £t_Çme , 697  sbt_£t_»mÙe_´Ý_d©a { 698  c_hdr mhdr ; 699  h®_cmd_£t_»mÙe_deviû_´Ý m´Ý ; 702 ušt8_t mbuf [ IPC_MTU - ( c_hdr ) - 703 ( h®_cmd_£t_»mÙe_deviû_´Ý )]; 704 } __©Œibu‹__ (( ·cked )); 706  bt_£t_»mÙe_´Ý_d©a gbt_£t_»mÙe_´Ý_d©a_ov”s = { 707 . hdr . £rviû_id = HAL_SERVICE_ID_BLUETOOTH , 708 . ghdr . gÝcode = HAL_OP_SET_REMOTE_DEVICE_PROP , 709 . ghdr . gËn = ( h®_cmd_£t_»mÙe_deviû_´Ý ) + 710 ( £t_Çme ), 712 . g´Ý . gbdaddr = {}, 713 . g´Ý . gty³ = HAL_PROP_DEVICE_NAME , 715 . g´Ý . gËn = ( £t_Çme ) + 1, 716 . gbuf = £t_Çme , 719  bt_£t_»mÙe_´Ý_d©a gbt_£t_»mÙe_´Ý_d©a_und”s = { 720 . hdr . £rviû_id = HAL_SERVICE_ID_BLUETOOTH , 721 . ghdr . gÝcode = HAL_OP_SET_REMOTE_DEVICE_PROP , 722 . ghdr . gËn = ( h®_cmd_£t_»mÙe_deviû_´Ý ) + 723 ( £t_Çme ), 725 . g´Ý . gbdaddr = {}, 726 . g´Ý . gty³ = HAL_PROP_DEVICE_NAME , 728 . g´Ý . gËn = ( £t_Çme ) - 1, 729 . gbuf = £t_Çme , 732  shidho¡_£t_šfo_d©a { 733  c_hdr mhdr ; 734  h®_cmd_hidho¡_£t_šfo mšfo ; 737 ušt8_t mbuf [ IPC_MTU - ( c_hdr ) - 738 ( h®_cmd_hidho¡_£t_šfo )]; 739 } __©Œibu‹__ (( ·cked )); 741  #£t_šfo_d©a "somdesütÜ" ) 743  hidho¡_£t_šfo_d©a ghidho¡_£t_šfo_d©a_ov”s = { 744 . hdr . £rviû_id = HAL_SERVICE_ID_HIDHOST , 745 . ghdr . gÝcode = HAL_OP_HIDHOST_SET_INFO , 746 . ghdr . gËn = ( h®_cmd_hidho¡_£t_šfo ) + 747 ( £t_šfo_d©a ), 750 . gšfo . gdesü_Ën = ( £t_šfo_d©a ) + 1, 752 . gbuf = £t_šfo_d©a , 755  hidho¡_£t_šfo_d©a ghidho¡_£t_šfo_d©a_und”s = { 756 . hdr . £rviû_id = HAL_SERVICE_ID_HIDHOST , 757 . ghdr . gÝcode = HAL_OP_HIDHOST_SET_INFO , 758 . ghdr . gËn = ( h®_cmd_hidho¡_£t_šfo ) + 759 ( £t_šfo_d©a ), 762 . gšfo . gdesü_Ën = ( £t_šfo_d©a ) - 1, 764 . gbuf = £t_šfo_d©a , 767  shidho¡_£t_»pÜt_d©a { 768  c_hdr mhdr ; 769  h®_cmd_hidho¡_£t_»pÜt m»pÜt ; 772 ušt8_t mbuf [ IPC_MTU - ( c_hdr ) - 773 ( h®_cmd_hidho¡_£t_»pÜt )]; 774 } __©Œibu‹__ (( ·cked )); 776  #£t_»p_d©a "1234567890" ) 778  hidho¡_£t_»pÜt_d©a ghidho¡_£t_»pÜt_d©a_ov”s = { 779 . hdr . £rviû_id = HAL_SERVICE_ID_HIDHOST , 780 . ghdr . gÝcode = HAL_OP_HIDHOST_SET_REPORT , 781 . ghdr . gËn = ( h®_cmd_hidho¡_£t_»pÜt ) + 782 ( £t_»p_d©a ), 785 . g»pÜt . gËn = ( £t_»p_d©a ) + 1, 787 . gbuf = £t_»p_d©a , 790  hidho¡_£t_»pÜt_d©a ghidho¡_£t_»pÜt_d©a_und”s = { 791 . hdr . £rviû_id = HAL_SERVICE_ID_HIDHOST , 792 . ghdr . gÝcode = HAL_OP_HIDHOST_SET_REPORT , 793 . ghdr . gËn = ( h®_cmd_hidho¡_£t_»pÜt ) + 794 ( £t_»p_d©a ), 797 . g»pÜt . gËn = ( £t_»p_d©a ) - 1, 799 . gbuf = £t_»p_d©a , 802  shidho¡_£nd_d©a_d©a { 803  c_hdr mhdr ; 804  h®_cmd_hidho¡_£nd_d©a mhidd©a ; 807 ušt8_t mbuf [ IPC_MTU - ( c_hdr ) - 808 ( h®_cmd_hidho¡_£nd_d©a )]; 809 } __©Œibu‹__ (( ·cked )); 811  #£nd_d©a_d©a "1234567890" ) 813  hidho¡_£nd_d©a_d©a ghidho¡_£nd_d©a_ov”s = { 814 . hdr . £rviû_id = HAL_SERVICE_ID_HIDHOST , 815 . ghdr . gÝcode = HAL_OP_HIDHOST_SEND_DATA , 816 . ghdr . gËn = ( h®_cmd_hidho¡_£nd_d©a ) + 817 ( £nd_d©a_d©a ), 820 . ghidd©a . gËn = ( £nd_d©a_d©a ) + 1, 822 . gbuf = £nd_d©a_d©a , 825  hidho¡_£nd_d©a_d©a ghidho¡_£nd_d©a_und”s = { 826 . hdr . £rviû_id = HAL_SERVICE_ID_HIDHOST , 827 . ghdr . gÝcode = HAL_OP_HIDHOST_SEND_DATA , 828 . ghdr . gËn = ( h®_cmd_hidho¡_£nd_d©a ) + 829 ( £nd_d©a_d©a ), 832 . ghidd©a . gËn = ( £nd_d©a_d©a ) - 1, 834 . gbuf = £nd_d©a_d©a , 837  #hå_numb” "#1234567890" ) 839  shå_dŸl_d©a { 840  c_hdr mhdr ; 841  h®_cmd_hf_þ›Á_dŸl md©a ; 843 ušt8_t mbuf [ IPC_MTU - ( c_hdr ) - 844 ( h®_cmd_hf_þ›Á_dŸl )]; 845 } __©Œibu‹__ (( ·cked )); 847  hå_dŸl_d©a ghå_dŸl_ov”s = { 848 . hdr . £rviû_id = HAL_SERVICE_ID_HANDSFREE_CLIENT , 849 . ghdr . gÝcode = HAL_OP_HF_CLIENT_DIAL , 850 . ghdr . gËn = ( h®_cmd_hf_þ›Á_dŸl è+ ( hå_numb” ), 852 . gd©a . gnumb”_Ën = ( hå_numb” ) + 1, 853 . gbuf = hå_numb” , 856  hå_dŸl_d©a ghå_dŸl_und”s = { 857 . hdr . £rviû_id = HAL_SERVICE_ID_HANDSFREE_CLIENT , 858 . ghdr . gÝcode = HAL_OP_HF_CLIENT_DIAL , 859 . ghdr . gËn = ( h®_cmd_hf_þ›Á_dŸl è+ ( hå_numb” ), 861 . gd©a . gnumb”_Ën = ( hå_numb” ) - 1, 862 . gbuf = hå_numb” , 865  $maš ( ¬gc , * ¬gv []) 867 `¢´štf ( exec_dœ , Óxec_dœ), "%s", `dœÇme ( ¬gv [0])); 869 `‹¡”_š™ (& ¬gc , & ¬gv ); 872 `‹¡_g’”ic ("Too small data", 873 c_£nd_tc , £tup , ‹¬down , 874 & »gi¡”_bt_msg , 1); 876 `‹¡_g’”ic ("Malformed data (wrong…ayload declared)", 877 c_£nd_tc , £tup , ‹¬down , 878 & »gi¡”_bt_m®fÜmed_size_msg , 879 ( »gi¡”_bt_m®fÜmed_size_msg ), 880 HAL_SERVICE_ID_BLUETOOTH ); 882 `‹¡_g’”ic ("Malformed data2 (undersized msg)", 883 c_£nd_tc , £tup , ‹¬down , 884 & »gi¡”_bt_msg , 885 ( »gi¡”_bt_msg ) - 1, 886 HAL_SERVICE_ID_BLUETOOTH ); 888 `‹¡_g’”ic ("Malformed data3 (oversized msg)", 889 c_£nd_tc , £tup , ‹¬down , 890 & m®fÜmed_d©a3_msg , 891 ( m®fÜmed_d©a3_msg ), 892 HAL_SERVICE_ID_BLUETOOTH ); 894 `‹¡_g’”ic ("Invalid service", 895 c_£nd_tc , £tup , ‹¬down , 896 & ’abË_unknown_£rviû_hdr , 897 ( ’abË_unknown_£rviû_hdr ), 898 HAL_SERVICE_ID_BLUETOOTH ); 900 `‹¡_g’”ic ("Enable unregistered service", 901 c_£nd_tc , £tup , ‹¬down , 902 & ’abË_bt_£rviû_hdr , 903 ( ’abË_bt_£rviû_hdr )); 906 `‹¡_Ýcode_v®id ("CORE", HAL_SERVICE_ID_CORE , 0x03, 0); 908 `‹¡_Ýcode_v®id ("BLUETOOTH", HAL_SERVICE_ID_BLUETOOTH , 0x15, 0, 909 HAL_SERVICE_ID_BLUETOOTH ); 911 `‹¡_Ýcode_v®id ("SOCK", HAL_SERVICE_ID_SOCKET , 0x03, 0, 912 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_SOCKET ); 914 `‹¡_Ýcode_v®id ("HIDHOST", HAL_SERVICE_ID_HIDHOST , 0x10, 0, 915 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 917 `‹¡_Ýcode_v®id ("PAN", HAL_SERVICE_ID_PAN , 0x05, 0, 918 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_PAN ); 920 `‹¡_Ýcode_v®id ("HANDSFREE", HAL_SERVICE_ID_HANDSFREE , 0x10, 0, 921 HAL_SERVICE_ID_BLUETOOTH , 922 HAL_SERVICE_ID_HANDSFREE ); 924 `‹¡_Ýcode_v®id ("A2DP", HAL_SERVICE_ID_A2DP , 0x03, 0, 925 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_A2DP ); 927 `‹¡_Ýcode_v®id ("HEALTH", HAL_SERVICE_ID_HEALTH , 0x06, 0, 928 HAL_SERVICE_ID_BLUETOOTH , 929 HAL_SERVICE_ID_HEALTH ); 931 `‹¡_Ýcode_v®id ("AVRCP", HAL_SERVICE_ID_AVRCP , 0x0b, 0, 932 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_AVRCP ); 934 `‹¡_Ýcode_v®id ("GATT", HAL_SERVICE_ID_GATT , 0x24, 0, 935 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_GATT ); 937 `‹¡_Ýcode_v®id ("HF_CLIENT", HAL_SERVICE_ID_HANDSFREE_CLIENT , 0x10, 0, 938 HAL_SERVICE_ID_BLUETOOTH , 939 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 941 `‹¡_Ýcode_v®id ("MAP_CLIENT", HAL_SERVICE_ID_MAP_CLIENT , 0x01, 0, 942 HAL_SERVICE_ID_BLUETOOTH , 943 HAL_SERVICE_ID_MAP_CLIENT ); 946 `‹¡_d©asize_v®id ("CORE Regi¡”+", HAL_SERVICE_ID_CORE , 947 HAL_OP_REGISTER_MODULE , 948 ( h®_cmd_»gi¡”_moduË ), 1); 949 `‹¡_d©asize_v®id ("CORE Regi¡”-", HAL_SERVICE_ID_CORE , 950 HAL_OP_REGISTER_MODULE , 951 ( h®_cmd_»gi¡”_moduË ), -1); 952 `‹¡_d©asize_v®id ("CORE UÄegi¡”+", HAL_SERVICE_ID_CORE , 953 HAL_OP_UNREGISTER_MODULE , 954 ( h®_cmd_uÄegi¡”_moduË ), 1); 955 `‹¡_d©asize_v®id ("CORE UÄegi¡”-", HAL_SERVICE_ID_CORE , 956 HAL_OP_UNREGISTER_MODULE , 957 ( h®_cmd_uÄegi¡”_moduË ), -1); 960 `‹¡_d©asize_v®id ("BT EÇbË+", HAL_SERVICE_ID_BLUETOOTH , 961 HAL_OP_ENABLE , 963 HAL_SERVICE_ID_BLUETOOTH ); 964 `‹¡_d©asize_v®id ("BT Di§bË+", HAL_SERVICE_ID_BLUETOOTH , 965 HAL_OP_DISABLE , 967 HAL_SERVICE_ID_BLUETOOTH ); 968 `‹¡_d©asize_v®id ("BT G‘ Ad­‹¸PrÝs+", HAL_SERVICE_ID_BLUETOOTH , 969 HAL_OP_GET_ADAPTER_PROPS , 971 HAL_SERVICE_ID_BLUETOOTH ); 972 `‹¡_d©asize_v®id ("BT G‘ Ad­‹¸PrÝ+", HAL_SERVICE_ID_BLUETOOTH , 973 HAL_OP_GET_ADAPTER_PROP , 974 ( h®_cmd_g‘_ad­‹r_´Ý ), 1, 975 HAL_SERVICE_ID_BLUETOOTH ); 976 `‹¡_d©asize_v®id ("BT G‘ Ad­‹¸PrÝ-", HAL_SERVICE_ID_BLUETOOTH , 977 HAL_OP_GET_ADAPTER_PROP , 978 ( h®_cmd_g‘_ad­‹r_´Ý ), -1, 979 HAL_SERVICE_ID_BLUETOOTH ); 980 `‹¡_d©asize_v®id ("BT S‘ Ad­‹¸PrÝ+", HAL_SERVICE_ID_BLUETOOTH , 981 HAL_OP_SET_ADAPTER_PROP , 982 ( h®_cmd_£t_ad­‹r_´Ý ), 1, 983 HAL_SERVICE_ID_BLUETOOTH ); 984 `‹¡_d©asize_v®id ("BT S‘ Ad­‹¸PrÝ-", HAL_SERVICE_ID_BLUETOOTH , 985 HAL_OP_SET_ADAPTER_PROP , 986 ( h®_cmd_£t_ad­‹r_´Ý ), -1, 987 HAL_SERVICE_ID_BLUETOOTH ); 988 `‹¡_g’”ic ("Data size BT Set Adapter Prop Vardata+", 989 c_£nd_tc , £tup , ‹¬down , 990 & bt_£t_ad­‹r_´Ý_d©a_ov”s , 991 (( c_hdr ) + 992 ( h®_cmd_£t_ad­‹r_´Ý ) + 993 ( £t_Çme )), 994 HAL_SERVICE_ID_BLUETOOTH ); 995 `‹¡_g’”ic ("Data size BT Set Adapter Prop Vardata+", 996 c_£nd_tc , £tup , ‹¬down , 997 & bt_£t_ad­‹r_´Ý_d©a_und”s , 998 (( c_hdr ) + 999 ( h®_cmd_£t_ad­‹r_´Ý ) + 1000 ( £t_Çme )), 1001 HAL_SERVICE_ID_BLUETOOTH ); 1002 `‹¡_d©asize_v®id ("BT G‘ RemÙPrÝs+", HAL_SERVICE_ID_BLUETOOTH , 1003 HAL_OP_GET_REMOTE_DEVICE_PROPS , 1004 ( h®_cmd_g‘_»mÙe_deviû_´Ýs ), 1, 1005 HAL_SERVICE_ID_BLUETOOTH ); 1006 `‹¡_d©asize_v®id ("BT G‘ RemÙPrÝs-", HAL_SERVICE_ID_BLUETOOTH , 1007 HAL_OP_GET_REMOTE_DEVICE_PROPS , 1008 ( h®_cmd_g‘_»mÙe_deviû_´Ýs ), -1, 1009 HAL_SERVICE_ID_BLUETOOTH ); 1010 `‹¡_d©asize_v®id ("BT G‘ RemÙPrÝ+", HAL_SERVICE_ID_BLUETOOTH , 1011 HAL_OP_GET_REMOTE_DEVICE_PROP , 1012 ( h®_cmd_g‘_»mÙe_deviû_´Ý ), 1, 1013 HAL_SERVICE_ID_BLUETOOTH ); 1014 `‹¡_d©asize_v®id ("BT G‘ RemÙPrÝ-", HAL_SERVICE_ID_BLUETOOTH , 1015 HAL_OP_GET_REMOTE_DEVICE_PROP , 1016 ( h®_cmd_g‘_»mÙe_deviû_´Ý ), -1, 1017 HAL_SERVICE_ID_BLUETOOTH ); 1018 `‹¡_d©asize_v®id ("BT S‘ RemÙPrÝ+", HAL_SERVICE_ID_BLUETOOTH , 1019 HAL_OP_SET_REMOTE_DEVICE_PROP , 1020 ( h®_cmd_£t_»mÙe_deviû_´Ý ), 1, 1021 HAL_SERVICE_ID_BLUETOOTH ); 1022 `‹¡_d©asize_v®id ("BT S‘ RemÙPrÝ-", HAL_SERVICE_ID_BLUETOOTH , 1023 HAL_OP_SET_REMOTE_DEVICE_PROP , 1024 ( h®_cmd_£t_»mÙe_deviû_´Ý ), -1, 1025 HAL_SERVICE_ID_BLUETOOTH ); 1026 `‹¡_g’”ic ("Data size BT Set Remote Prop Vardata+", 1027 c_£nd_tc , £tup , ‹¬down , 1028 & bt_£t_»mÙe_´Ý_d©a_ov”s , 1029 (( c_hdr ) + 1030 ( h®_cmd_£t_»mÙe_deviû_´Ý ) + 1031 ( £t_Çme )), 1032 HAL_SERVICE_ID_BLUETOOTH ); 1033 `‹¡_g’”ic ("Data size BT Set Remote Prop Vardata-", 1034 c_£nd_tc , £tup , ‹¬down , 1035 & bt_£t_»mÙe_´Ý_d©a_und”s , 1036 (( c_hdr ) + 1037 ( h®_cmd_£t_»mÙe_deviû_´Ý ) + 1038 ( £t_Çme )), 1039 HAL_SERVICE_ID_BLUETOOTH ); 1040 `‹¡_d©asize_v®id ("BT G‘ RemÙSV Rec+", HAL_SERVICE_ID_BLUETOOTH , 1041 HAL_OP_GET_REMOTE_SERVICE_REC , 1042 ( h®_cmd_g‘_»mÙe_£rviû_»c ), 1, 1043 HAL_SERVICE_ID_BLUETOOTH ); 1044 `‹¡_d©asize_v®id ("BT G‘ RemÙSV Rec-", HAL_SERVICE_ID_BLUETOOTH , 1045 HAL_OP_GET_REMOTE_SERVICE_REC , 1046 ( h®_cmd_g‘_»mÙe_£rviû_»c ), -1, 1047 HAL_SERVICE_ID_BLUETOOTH ); 1048 `‹¡_d©asize_v®id ("BT G‘ RemÙS”viûs+", HAL_SERVICE_ID_BLUETOOTH , 1049 HAL_OP_GET_REMOTE_SERVICES , 1050 ( h®_cmd_g‘_»mÙe_£rviûs ), 1, 1051 HAL_SERVICE_ID_BLUETOOTH ); 1052 `‹¡_d©asize_v®id ("BT G‘ RemÙS”viûs-", HAL_SERVICE_ID_BLUETOOTH , 1053 HAL_OP_GET_REMOTE_SERVICES , 1054 ( h®_cmd_g‘_»mÙe_£rviûs ), -1, 1055 HAL_SERVICE_ID_BLUETOOTH ); 1056 `‹¡_d©asize_v®id ("BT S¹ Discov”y+", HAL_SERVICE_ID_BLUETOOTH , 1057 HAL_OP_START_DISCOVERY , 1059 HAL_SERVICE_ID_BLUETOOTH ); 1060 `‹¡_d©asize_v®id ("BT CªûÈDiscov”y+", HAL_SERVICE_ID_BLUETOOTH , 1061 HAL_OP_CANCEL_DISCOVERY , 1063 HAL_SERVICE_ID_BLUETOOTH ); 1064 `‹¡_d©asize_v®id ("BT C»©BÚd+", HAL_SERVICE_ID_BLUETOOTH , 1065 HAL_OP_CREATE_BOND , 1066 ( h®_cmd_ü—‹_bÚd ), 1, 1067 HAL_SERVICE_ID_BLUETOOTH ); 1068 `‹¡_d©asize_v®id ("BT C»©BÚd-", HAL_SERVICE_ID_BLUETOOTH , 1069 HAL_OP_CREATE_BOND , 1070 ( h®_cmd_ü—‹_bÚd ), -1, 1071 HAL_SERVICE_ID_BLUETOOTH ); 1072 `‹¡_d©asize_v®id ("BT RemovBÚd+", HAL_SERVICE_ID_BLUETOOTH , 1073 HAL_OP_REMOVE_BOND , 1074 ( h®_cmd_»move_bÚd ), 1, 1075 HAL_SERVICE_ID_BLUETOOTH ); 1076 `‹¡_d©asize_v®id ("BT RemovBÚd-", HAL_SERVICE_ID_BLUETOOTH , 1077 HAL_OP_REMOVE_BOND , 1078 ( h®_cmd_»move_bÚd ), -1, 1079 HAL_SERVICE_ID_BLUETOOTH ); 1080 `‹¡_d©asize_v®id ("BT CªûÈBÚd+", HAL_SERVICE_ID_BLUETOOTH , 1081 HAL_OP_CANCEL_BOND , 1082 ( h®_cmd_ÿnûl_bÚd ), 1, 1083 HAL_SERVICE_ID_BLUETOOTH ); 1084 `‹¡_d©asize_v®id ("BT CªûÈBÚd-", HAL_SERVICE_ID_BLUETOOTH , 1085 HAL_OP_CANCEL_BOND , 1086 ( h®_cmd_ÿnûl_bÚd ), -1, 1087 HAL_SERVICE_ID_BLUETOOTH ); 1088 `‹¡_d©asize_v®id ("BT Pš R•ly+", HAL_SERVICE_ID_BLUETOOTH , 1089 HAL_OP_PIN_REPLY , 1090 ( h®_cmd_pš_»¶y ), 1, 1091 HAL_SERVICE_ID_BLUETOOTH ); 1092 `‹¡_d©asize_v®id ("BT Pš R•ly-", HAL_SERVICE_ID_BLUETOOTH , 1093 HAL_OP_PIN_REPLY , 1094 ( h®_cmd_pš_»¶y ), -1, 1095 HAL_SERVICE_ID_BLUETOOTH ); 1096 `‹¡_d©asize_v®id ("BT SSP R•ly+", HAL_SERVICE_ID_BLUETOOTH , 1097 HAL_OP_SSP_REPLY , 1098 ( h®_cmd_s¥_»¶y ), 1, 1099 HAL_SERVICE_ID_BLUETOOTH ); 1100 `‹¡_d©asize_v®id ("BT SSP R•ly-", HAL_SERVICE_ID_BLUETOOTH , 1101 HAL_OP_SSP_REPLY , 1102 ( h®_cmd_s¥_»¶y ), -1, 1103 HAL_SERVICE_ID_BLUETOOTH ); 1104 `‹¡_d©asize_v®id ("BT DUT ModCÚf+", HAL_SERVICE_ID_BLUETOOTH , 1105 HAL_OP_DUT_MODE_CONF , 1106 ( h®_cmd_dut_mode_cÚf ), 1, 1107 HAL_SERVICE_ID_BLUETOOTH ); 1108 `‹¡_d©asize_v®id ("BT DUT ModCÚf-", HAL_SERVICE_ID_BLUETOOTH , 1109 HAL_OP_DUT_MODE_CONF , 1110 ( h®_cmd_dut_mode_cÚf ), -1, 1111 HAL_SERVICE_ID_BLUETOOTH ); 1112 `‹¡_d©asize_v®id ("BT DUT ModS’d+", HAL_SERVICE_ID_BLUETOOTH , 1113 HAL_OP_DUT_MODE_SEND , 1114 ( h®_cmd_dut_mode_£nd ), 1, 1115 HAL_SERVICE_ID_BLUETOOTH ); 1116 `‹¡_d©asize_v®id ("BT DUT ModS’d-", HAL_SERVICE_ID_BLUETOOTH , 1117 HAL_OP_DUT_MODE_SEND , 1118 ( h®_cmd_dut_mode_£nd ), -1, 1119 HAL_SERVICE_ID_BLUETOOTH ); 1120 `‹¡_d©asize_v®id ("BT LE Te¡+", HAL_SERVICE_ID_BLUETOOTH , 1121 HAL_OP_LE_TEST_MODE , 1122 ( h®_cmd_Ë_‹¡_mode ), 1, 1123 HAL_SERVICE_ID_BLUETOOTH ); 1124 `‹¡_d©asize_v®id ("BT LE Te¡-", HAL_SERVICE_ID_BLUETOOTH , 1125 HAL_OP_LE_TEST_MODE , 1126 ( h®_cmd_Ë_‹¡_mode ), -1, 1127 HAL_SERVICE_ID_BLUETOOTH ); 1130 `‹¡_d©asize_v®id ("SOCKET Li¡’+", HAL_SERVICE_ID_SOCKET , 1131 HAL_OP_SOCKET_LISTEN , 1132 ( h®_cmd_sock‘_li¡’ ), 1, 1133 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_SOCKET ); 1134 `‹¡_d©asize_v®id ("SOCKET Li¡’-", HAL_SERVICE_ID_SOCKET , 1135 HAL_OP_SOCKET_LISTEN , 1136 ( h®_cmd_sock‘_li¡’ ), -1, 1137 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_SOCKET ); 1138 `‹¡_d©asize_v®id ("SOCKET CÚÃù+", HAL_SERVICE_ID_SOCKET , 1139 HAL_OP_SOCKET_CONNECT , 1140 ( h®_cmd_sock‘_cÚÃù ), 1, 1141 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_SOCKET ); 1142 `‹¡_d©asize_v®id ("SOCKET CÚÃù-", HAL_SERVICE_ID_SOCKET , 1143 HAL_OP_SOCKET_CONNECT , 1144 ( h®_cmd_sock‘_cÚÃù ), -1, 1145 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_SOCKET ); 1148 `‹¡_d©asize_v®id ("HIDHOST CÚÃù+", HAL_SERVICE_ID_HIDHOST , 1149 HAL_OP_HIDHOST_CONNECT , 1150 ( h®_cmd_hidho¡_cÚÃù ), 1, 1151 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1152 `‹¡_d©asize_v®id ("HIDHOST CÚÃù-", HAL_SERVICE_ID_HIDHOST , 1153 HAL_OP_HIDHOST_CONNECT , 1154 ( h®_cmd_hidho¡_cÚÃù ), -1, 1155 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1156 `‹¡_d©asize_v®id ("HIDHOST DiscÚÃù+", HAL_SERVICE_ID_HIDHOST , 1157 HAL_OP_HIDHOST_DISCONNECT , 1158 ( h®_cmd_hidho¡_discÚÃù ), 1, 1159 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1160 `‹¡_d©asize_v®id ("HIDHOST DiscÚÃù-", HAL_SERVICE_ID_HIDHOST , 1161 HAL_OP_HIDHOST_DISCONNECT , 1162 ( h®_cmd_hidho¡_discÚÃù ), -1, 1163 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1164 `‹¡_d©asize_v®id ("HIDHOST Vœt. UÅlug+", HAL_SERVICE_ID_HIDHOST , 1165 HAL_OP_HIDHOST_VIRTUAL_UNPLUG , 1166 ( h®_cmd_hidho¡_vœtu®_uÅlug ), 1, 1167 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1168 `‹¡_d©asize_v®id ("HIDHOST Vœt. UÅlug-", HAL_SERVICE_ID_HIDHOST , 1169 HAL_OP_HIDHOST_VIRTUAL_UNPLUG , 1170 ( h®_cmd_hidho¡_vœtu®_uÅlug ), -1, 1171 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1172 `‹¡_d©asize_v®id ("HIDHOST S‘ Info+", HAL_SERVICE_ID_HIDHOST , 1173 HAL_OP_HIDHOST_SET_INFO , 1174 ( h®_cmd_hidho¡_£t_šfo ), 1, 1175 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1176 `‹¡_d©asize_v®id ("HIDHOST S‘ Info-", HAL_SERVICE_ID_HIDHOST , 1177 HAL_OP_HIDHOST_SET_INFO , 1178 ( h®_cmd_hidho¡_£t_šfo ), -1, 1179 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1180 `‹¡_g’”ic ("Data size HIDHOST Set Info Vardata+", 1181 c_£nd_tc , £tup , ‹¬down , 1182 & hidho¡_£t_šfo_d©a_ov”s , 1183 (( c_hdr ) + 1184 ( h®_cmd_hidho¡_£t_šfo ) + 1185 ( £t_šfo_d©a )), 1186 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1187 `‹¡_g’”ic ("Data size HIDHOST Set Info Vardata-", 1188 c_£nd_tc , £tup , ‹¬down , 1189 & hidho¡_£t_šfo_d©a_und”s , 1190 (( c_hdr ) + 1191 ( h®_cmd_hidho¡_£t_šfo ) + 1192 ( £t_šfo_d©a )), 1193 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1194 `‹¡_d©asize_v®id ("HIDHOST G‘ PrÙocÞ+", HAL_SERVICE_ID_HIDHOST , 1195 HAL_OP_HIDHOST_GET_PROTOCOL , 1196 ( h®_cmd_hidho¡_g‘_´ÙocÞ ), 1, 1197 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1198 `‹¡_d©asize_v®id ("HIDHOST G‘ PrÙocÞ-", HAL_SERVICE_ID_HIDHOST , 1199 HAL_OP_HIDHOST_GET_PROTOCOL , 1200 ( h®_cmd_hidho¡_g‘_´ÙocÞ ), -1, 1201 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1202 `‹¡_d©asize_v®id ("HIDHOST S‘ PrÙocÞ+", HAL_SERVICE_ID_HIDHOST , 1203 HAL_OP_HIDHOST_SET_PROTOCOL , 1204 ( h®_cmd_hidho¡_£t_´ÙocÞ ), 1, 1205 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1206 `‹¡_d©asize_v®id ("HIDHOST S‘ PrÙocÞ-", HAL_SERVICE_ID_HIDHOST , 1207 HAL_OP_HIDHOST_SET_PROTOCOL , 1208 ( h®_cmd_hidho¡_£t_´ÙocÞ ), -1, 1209 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1210 `‹¡_d©asize_v®id ("HIDHOST G‘ R•Üt+", HAL_SERVICE_ID_HIDHOST , 1211 HAL_OP_HIDHOST_GET_REPORT , 1212 ( h®_cmd_hidho¡_g‘_»pÜt ), 1, 1213 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1214 `‹¡_d©asize_v®id ("HIDHOST G‘ R•Üt-", HAL_SERVICE_ID_HIDHOST , 1215 HAL_OP_HIDHOST_GET_REPORT , 1216 ( h®_cmd_hidho¡_g‘_»pÜt ), -1, 1217 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1218 `‹¡_d©asize_v®id ("HIDHOST S‘ R•Üt+", HAL_SERVICE_ID_HIDHOST , 1219 HAL_OP_HIDHOST_SET_REPORT , 1220 ( h®_cmd_hidho¡_£t_»pÜt ), 1, 1221 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1222 `‹¡_d©asize_v®id ("HIDHOST S‘ R•Üt-", HAL_SERVICE_ID_HIDHOST , 1223 HAL_OP_HIDHOST_SET_REPORT , 1224 ( h®_cmd_hidho¡_£t_»pÜt ), -1, 1225 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1226 `‹¡_g’”ic ("Data size HIDHOST Set Report Vardata+", 1227 c_£nd_tc , £tup , ‹¬down , 1228 & hidho¡_£t_»pÜt_d©a_ov”s , 1229 (( c_hdr ) + 1230 ( h®_cmd_hidho¡_£t_»pÜt ) + 1231 ( £t_»p_d©a )), 1232 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1233 `‹¡_g’”ic ("Data size HIDHOST Set Report Vardata-", 1234 c_£nd_tc , £tup , ‹¬down , 1235 & hidho¡_£t_»pÜt_d©a_und”s , 1236 (( c_hdr ) + 1237 ( h®_cmd_hidho¡_£t_»pÜt ) + 1238 ( £t_»p_d©a )), 1239 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1240 `‹¡_d©asize_v®id ("HIDHOST S’d D©a+", HAL_SERVICE_ID_HIDHOST , 1241 HAL_OP_HIDHOST_SEND_DATA , 1242 ( h®_cmd_hidho¡_£nd_d©a ), 1, 1243 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1244 `‹¡_d©asize_v®id ("HIDHOST S’d D©a-", HAL_SERVICE_ID_HIDHOST , 1245 HAL_OP_HIDHOST_SEND_DATA , 1246 ( h®_cmd_hidho¡_£nd_d©a ), -1, 1247 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1248 `‹¡_g’”ic ("Data size HIDHOST Send Vardata+", 1249 c_£nd_tc , £tup , ‹¬down , 1250 & hidho¡_£nd_d©a_ov”s , 1251 (( c_hdr ) + 1252 ( h®_cmd_hidho¡_£nd_d©a ) + 1253 ( £nd_d©a_d©a )), 1254 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1255 `‹¡_g’”ic ("Data size HIDHOST Send Vardata-", 1256 c_£nd_tc , £tup , ‹¬down , 1257 & hidho¡_£nd_d©a_und”s , 1258 (( c_hdr ) + 1259 ( h®_cmd_hidho¡_£nd_d©a ) + 1260 ( £nd_d©a_d©a )), 1261 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_HIDHOST ); 1264 `‹¡_d©asize_v®id ("PAN EÇbË+", HAL_SERVICE_ID_PAN , 1265 HAL_OP_PAN_ENABLE , 1266 ( h®_cmd_·n_’abË ), 1, 1267 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_PAN ); 1268 `‹¡_d©asize_v®id ("PAN EÇbË-", HAL_SERVICE_ID_PAN , 1269 HAL_OP_PAN_ENABLE , 1270 ( h®_cmd_·n_’abË ), -1, 1271 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_PAN ); 1272 `‹¡_d©asize_v®id ("PAN G‘ RÞe+", HAL_SERVICE_ID_PAN , 1273 HAL_OP_PAN_GET_ROLE , 1275 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_PAN ); 1276 `‹¡_d©asize_v®id ("PAN CÚÃù+", HAL_SERVICE_ID_PAN , 1277 HAL_OP_PAN_CONNECT , 1278 ( h®_cmd_·n_cÚÃù ), 1, 1279 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_PAN ); 1280 `‹¡_d©asize_v®id ("PAN CÚÃù-", HAL_SERVICE_ID_PAN , 1281 HAL_OP_PAN_CONNECT , 1282 ( h®_cmd_·n_cÚÃù ), -1, 1283 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_PAN ); 1284 `‹¡_d©asize_v®id ("PAN DiscÚÃù+", HAL_SERVICE_ID_PAN , 1285 HAL_OP_PAN_DISCONNECT , 1286 ( h®_cmd_·n_discÚÃù ), 1, 1287 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_PAN ); 1288 `‹¡_d©asize_v®id ("PAN DiscÚÃù-", HAL_SERVICE_ID_PAN , 1289 HAL_OP_PAN_DISCONNECT , 1290 ( h®_cmd_·n_discÚÃù ), -1, 1291 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_PAN ); 1294 `‹¡_d©asize_v®id ("A2DP CÚÃù+", HAL_SERVICE_ID_A2DP , 1295 HAL_OP_A2DP_CONNECT , 1296 ( h®_cmd_a2dp_cÚÃù ), 1, 1297 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_A2DP ); 1298 `‹¡_d©asize_v®id ("A2DP CÚÃù-", HAL_SERVICE_ID_A2DP , 1299 HAL_OP_A2DP_CONNECT , 1300 ( h®_cmd_a2dp_cÚÃù ), -1, 1301 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_A2DP ); 1302 `‹¡_d©asize_v®id ("A2DP DiscÚÃù+", HAL_SERVICE_ID_A2DP , 1303 HAL_OP_A2DP_DISCONNECT , 1304 ( h®_cmd_a2dp_discÚÃù ), 1, 1305 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_A2DP ); 1306 `‹¡_d©asize_v®id ("A2DP DiscÚÃù-", HAL_SERVICE_ID_A2DP , 1307 HAL_OP_A2DP_DISCONNECT , 1308 ( h®_cmd_a2dp_discÚÃù ), -1, 1309 HAL_SERVICE_ID_BLUETOOTH , HAL_SERVICE_ID_A2DP ); 1312 `‹¡_d©asize_v®id ("HF_CLIENT Connect+", 1313 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1314 HAL_OP_HF_CLIENT_CONNECT , 1315 ( h®_cmd_hf_þ›Á_cÚÃù ), 1, 1316 HAL_SERVICE_ID_BLUETOOTH , 1317 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1318 `‹¡_d©asize_v®id ("HF_CLIENT Connect-", 1319 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1320 HAL_OP_HF_CLIENT_CONNECT , 1321 ( h®_cmd_hf_þ›Á_cÚÃù ), -1, 1322 HAL_SERVICE_ID_BLUETOOTH , 1323 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1324 `‹¡_d©asize_v®id ("HF_CLIENT Disconnect+", 1325 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1326 HAL_OP_HF_CLIENT_DISCONNECT , 1327 ( h®_cmd_hf_þ›Á_discÚÃù ), 1, 1328 HAL_SERVICE_ID_BLUETOOTH , 1329 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1330 `‹¡_d©asize_v®id ("HF_CLIENT Disconnect-", 1331 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1332 HAL_OP_HF_CLIENT_DISCONNECT , 1333 ( h®_cmd_hf_þ›Á_discÚÃù ), -1, 1334 HAL_SERVICE_ID_BLUETOOTH , 1335 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1336 `‹¡_d©asize_v®id ("HF_CLIENT Connect Audio+", 1337 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1338 HAL_OP_HF_CLIENT_CONNECT_AUDIO , 1339 ( h®_cmd_hf_þ›Á_cÚÃù_audio ), 1, 1340 HAL_SERVICE_ID_BLUETOOTH , 1341 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1342 `‹¡_d©asize_v®id ("HF_CLIENT Connect Audio-", 1343 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1344 HAL_OP_HF_CLIENT_CONNECT_AUDIO , 1345 ( h®_cmd_hf_þ›Á_cÚÃù_audio ), -1, 1346 HAL_SERVICE_ID_BLUETOOTH , 1347 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1348 `‹¡_d©asize_v®id ("HF_CLIENT Disconnect Audio+", 1349 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1350 HAL_OP_HF_CLIENT_DISCONNECT_AUDIO , 1351 ( h®_cmd_hf_þ›Á_discÚÃù_audio ), 1, 1352 HAL_SERVICE_ID_BLUETOOTH , 1353 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1354 `‹¡_d©asize_v®id ("HF_CLIENT Disconnect Audio-", 1355 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1356 HAL_OP_HF_CLIENT_DISCONNECT_AUDIO , 1357 ( h®_cmd_hf_þ›Á_discÚÃù_audio ), -1, 1358 HAL_SERVICE_ID_BLUETOOTH , 1359 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1360 `‹¡_d©asize_v®id ("HF_CLIENT Start VR+", 1361 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1362 HAL_OP_HF_CLIENT_START_VR , 1364 HAL_SERVICE_ID_BLUETOOTH , 1365 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1366 `‹¡_d©asize_v®id ("HF_CLIENT Start VR-", 1367 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1368 HAL_OP_HF_CLIENT_START_VR , 1370 HAL_SERVICE_ID_BLUETOOTH , 1371 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1372 `‹¡_d©asize_v®id ("HF_CLIENT Stop VR+", 1373 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1374 HAL_OP_HF_CLIENT_STOP_VR , 1376 HAL_SERVICE_ID_BLUETOOTH , 1377 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1378 `‹¡_d©asize_v®id ("HF_CLIENT Stop VR-", 1379 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1380 HAL_OP_HF_CLIENT_STOP_VR , 1382 HAL_SERVICE_ID_BLUETOOTH , 1383 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1384 `‹¡_d©asize_v®id ("HF_CLIENT Vol Contr.+", 1385 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1386 HAL_OP_HF_CLIENT_VOLUME_CONTROL , 1387 ( h®_cmd_hf_þ›Á_vÞume_cÚŒÞ ), 1, 1388 HAL_SERVICE_ID_BLUETOOTH , 1389 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1390 `‹¡_d©asize_v®id ("HF_CLIENT Vol Contr.-", 1391 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1392 HAL_OP_HF_CLIENT_VOLUME_CONTROL , 1393 ( h®_cmd_hf_þ›Á_vÞume_cÚŒÞ ), -1, 1394 HAL_SERVICE_ID_BLUETOOTH , 1395 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1396 `‹¡_g’”ic ("Data size HF_CLIENT Dial Vardata+", 1397 c_£nd_tc , £tup , ‹¬down , 1398 & hå_dŸl_ov”s , 1399 (( c_hdr ) + 1400 ( h®_cmd_hf_þ›Á_dŸl ) + 1401 ( hå_numb” )), 1402 HAL_SERVICE_ID_BLUETOOTH , 1403 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1404 `‹¡_g’”ic ("Data size HF_CLIENT Dial Vardata-", 1405 c_£nd_tc , £tup , ‹¬down , 1406 & hå_dŸl_und”s , 1407 (( c_hdr ) + 1408 ( h®_cmd_hf_þ›Á_dŸl ) + 1409 ( hå_numb” )), 1410 HAL_SERVICE_ID_BLUETOOTH , 1411 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1412 `‹¡_d©asize_v®id ("HF_CLIENT Dial Memory+", 1413 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1414 HAL_OP_HF_CLIENT_DIAL_MEMORY , 1415 ( h®_cmd_hf_þ›Á_dŸl_memÜy ), 1, 1416 HAL_SERVICE_ID_BLUETOOTH , 1417 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1418 `‹¡_d©asize_v®id ("HF_CLIENT Dial Memory-", 1419 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1420 HAL_OP_HF_CLIENT_DIAL_MEMORY , 1421 ( h®_cmd_hf_þ›Á_dŸl_memÜy ), -1, 1422 HAL_SERVICE_ID_BLUETOOTH , 1423 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1424 `‹¡_d©asize_v®id ("HF_CLIENT Call Action+", 1425 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1426 HAL_OP_HF_CLIENT_CALL_ACTION , 1427 ( h®_cmd_hf_þ›Á_ÿÎ_aùiÚ ), 1, 1428 HAL_SERVICE_ID_BLUETOOTH , 1429 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1430 `‹¡_d©asize_v®id ("HF_CLIENT Call Action-", 1431 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1432 HAL_OP_HF_CLIENT_CALL_ACTION , 1433 ( h®_cmd_hf_þ›Á_ÿÎ_aùiÚ ), -1, 1434 HAL_SERVICE_ID_BLUETOOTH , 1435 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1436 `‹¡_d©asize_v®id ("HF_CLIENT Query Current Calls+", 1437 HAL_SERVICE_ID_BLUETOOTH , 1438 HAL_OP_HF_CLIENT_QUERY_CURRENT_CALLS , 1440 HAL_SERVICE_ID_BLUETOOTH , 1441 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1442 `‹¡_d©asize_v®id ("HF_CLIENT Query Current Calls-", 1443 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1444 HAL_OP_HF_CLIENT_QUERY_CURRENT_CALLS , 1446 HAL_SERVICE_ID_BLUETOOTH , 1447 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1448 `‹¡_d©asize_v®id ("HF_CLIENT Query Operator Name+", 1449 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1450 HAL_OP_HF_CLIENT_QUERY_OPERATOR_NAME , 1452 HAL_SERVICE_ID_BLUETOOTH , 1453 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1454 `‹¡_d©asize_v®id ("HF_CLIENT Query Operator Name-", 1455 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1456 HAL_OP_HF_CLIENT_QUERY_OPERATOR_NAME , 1458 HAL_SERVICE_ID_BLUETOOTH , 1459 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1460 `‹¡_d©asize_v®id ("HF_CLIENT Retrieve Subscrb. Info+", 1461 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1462 HAL_OP_HF_CLIENT_RETRIEVE_SUBSCR_INFO , 1464 HAL_SERVICE_ID_BLUETOOTH , 1465 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1466 `‹¡_d©asize_v®id ("HF_CLIENT Retrieve Subscrb. Info-", 1467 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1468 HAL_OP_HF_CLIENT_RETRIEVE_SUBSCR_INFO , 1470 HAL_SERVICE_ID_BLUETOOTH , 1471 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1472 `‹¡_d©asize_v®id ("HF_CLIENT Send DTMF+", 1473 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1474 HAL_OP_HF_CLIENT_SEND_DTMF , 1475 ( h®_cmd_hf_þ›Á_£nd_dtmf ), 1, 1476 HAL_SERVICE_ID_BLUETOOTH , 1477 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1478 `‹¡_d©asize_v®id ("HF_CLIENT Send DTMF-", 1479 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1480 HAL_OP_HF_CLIENT_SEND_DTMF , 1481 ( h®_cmd_hf_þ›Á_£nd_dtmf ), -1, 1482 HAL_SERVICE_ID_BLUETOOTH , 1483 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1484 `‹¡_d©asize_v®id ("HF_CLIENT Get Last Voice Tag+", 1485 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1486 HAL_OP_HF_CLIENT_GET_LAST_VOICE_TAG_NUM , 1488 HAL_SERVICE_ID_BLUETOOTH , 1489 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1490 `‹¡_d©asize_v®id ("HF_CLIENT Get Last Voice Tag-", 1491 HAL_SERVICE_ID_HANDSFREE_CLIENT , 1492 HAL_OP_HF_CLIENT_GET_LAST_VOICE_TAG_NUM , 1494 HAL_SERVICE_ID_BLUETOOTH , 1495 HAL_SERVICE_ID_HANDSFREE_CLIENT ); 1498 `‹¡_d©asize_v®id ("MAP CLIENT Get instances+", 1499 HAL_SERVICE_ID_MAP_CLIENT , 1500 HAL_OP_MAP_CLIENT_GET_INSTANCES , 1501 ( h®_cmd_m­_þ›Á_g‘_š¡ªûs ), 1502 1, HAL_SERVICE_ID_BLUETOOTH , 1503 HAL_SERVICE_ID_MAP_CLIENT ); 1504 `‹¡_d©asize_v®id ("MAP CLIENT Get instances-", 1505 HAL_SERVICE_ID_MAP_CLIENT , 1506 HAL_OP_MAP_CLIENT_GET_INSTANCES , 1507 ( h®_cmd_m­_þ›Á_g‘_š¡ªûs ), 1508 -1, HAL_SERVICE_ID_BLUETOOTH , 1509 HAL_SERVICE_ID_MAP_CLIENT ); 1511  `‹¡”_run (); 1512 } } @android/ipc.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡ddef.h > 29  ~<”ºo.h > 30  ~<¡dšt.h > 31  ~<¡ršg.h > 32  ~ 33  ~<¡dboÞ.h > 34  ~ 35  ~ 36  ~ 37  ~ 39  ~"c-commÚ.h " 40  ~"c.h " 41  ~"¤c/log.h " 43  s£rviû_hªdËr { 44 cÚ¡  c_hªdËr * mhªdËr ; 45 ušt8_t msize ; 48  sc { 49  £rviû_hªdËr * m£rviûs ; 50  m£rviû_max ; 52 cÚ¡ * m·th ; 53 size_t msize ; 55 GIOChªÃl * mcmd_io ; 56 gušt mcmd_w©ch ; 58 boÞ mnÙifiÿtiÚs ; 59 GIOChªÃl * mnÙif_io ; 60 gušt mnÙif_w©ch ; 62 c_discÚÃù_cb mdiscÚÃù_cb ; 63 * mdiscÚÃù_cb_d©a ; 66  $c_discÚÃù ( c *c, boÞ š_þ—nup ) 68 ià( c -> cmd_w©ch ) { 69 `g_sourû_»move ( c -> cmd_w©ch ); 70 c -> cmd_w©ch = 0; 73 ià( c -> cmd_io ) { 74 `g_io_chªÃl_shutdown ( c -> cmd_io , TRUE , NULL ); 75 `g_io_chªÃl_uÄef ( c -> cmd_io ); 76 c -> cmd_io = NULL ; 79 ià( c -> nÙif_w©ch ) { 80 `g_sourû_»move ( c -> nÙif_w©ch ); 81 c -> nÙif_w©ch = 0; 84 ià( c -> nÙif_io ) { 85 `g_io_chªÃl_shutdown ( c -> nÙif_io , TRUE , NULL ); 86 `g_io_chªÃl_uÄef ( c -> nÙif_io ); 87 c -> nÙif_io = NULL ; 90 ià( š_þ—nup ) 93 ià( c -> discÚÃù_cb ) 94 c -> `discÚÃù_cb (c-> discÚÃù_cb_d©a ); 95 } } 97  $c_hªdË_msg ( £rviû_hªdËr * hªdËrs , size_t max_šdex , 98 cÚ¡ * buf , ssize_t Ën ) 100 cÚ¡  c_hdr * msg = buf ; 101 cÚ¡  c_hªdËr * hªdËr ; 103 ià( Ën < ( ssize_t è(* msg )) { 104 `DBG ("mes§gtoØsm®È(%zd by‹s)", Ën ); 105  - EBADMSG ; 108 ià( Ën !ð( ssize_t è((* msg ) + msg->len)) { 109 `DBG ("mes§gm®fÜmed (%zd by‹s)", Ën ); 110  - EBADMSG ; 114 ià( msg -> £rviû_id > max_šdex ) { 115 `DBG ("unknowÀ£rviû (0x%x)", msg -> £rviû_id ); 116  - EOPNOTSUPP ; 120 ià(! hªdËrs [ msg -> £rviû_id ]. hªdËr ) { 121 `DBG ("£rviû‚Ù„egi¡”ed (0x%x)", msg -> £rviû_id ); 122  - EOPNOTSUPP ; 126 ià( msg -> Ýcode =ð IPC_OP_STATUS || 127 msg -> Ýcode > hªdËrs [msg-> £rviû_id ]. size ) { 128 `DBG ("šv®id opcod0x%x fÜ s”viû 0x%x", msg -> Ýcode , 129 msg -> £rviû_id ); 130  - EOPNOTSUPP ; 134 hªdËr = & hªdËrs [ msg -> £rviû_id ].hªdËr[msg-> Ýcode - 1]; 137 ià(( hªdËr -> v¬_Ën && hªdËr-> d©a_Ën > msg -> Ën ) || 138 (! hªdËr -> v¬_Ën && hªdËr-> d©a_Ën !ð msg -> Ën )) { 139 `DBG ("invalid size for opcode 0x%x service 0x%x", 140 msg -> Ýcode , msg-> £rviû_id ); 141  - EMSGSIZE ; 144 hªdËr -> `hªdËr ( msg -> ·ylßd , msg-> Ën ); 147 } } 149  gboÞ—n $cmd_w©ch_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 150 gpoš‹r u£r_d©a ) 152  c *øð u£r_d©a ; 154  buf [ IPC_MTU ]; 155 ssize_t »t ; 156  fd , ”r ; 158 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 159 `šfo ("IPC: command socket closed"); 161 c -> cmd_w©ch = 0; 162  çž ; 165 fd = `g_io_chªÃl_unix_g‘_fd ( io ); 167 »t = `»ad ( fd , buf , (buf)); 168 ià( »t < 0) { 169 `”rÜ ("IPC: commªd„—d fažed (%s)", `¡»¼Ü ( ”ºo )); 170  çž ; 173 ”r = `c_hªdË_msg ( c -> £rviûs , ipc-> £rviû_max , buf , »t ); 174 ià( ”r < 0) { 175 `”rÜ ("IPC: fažedØhªdË mes§g(%s)", `¡»¼Ü (- ”r )); 176  çž ; 179  TRUE ; 181 çž : 182 `c_discÚÃù ( c , çl£ ); 184  FALSE ; 185 } } 187  gboÞ—n $nÙif_w©ch_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 188 gpoš‹r u£r_d©a ) 190  c *øð u£r_d©a ; 192 `šfo ("IPC:‚otification socket closed"); 194 c -> nÙif_w©ch = 0; 196 `c_discÚÃù ( c , çl£ ); 198  FALSE ; 199 } } 201  GIOChªÃl * $c_cÚÃù (cÚ¡ * ·th , size_t size , 202 GIOFunc cÚÃù_cb , * u£r_d©a ) 204  sockaddr_un addr ; 205 GIOCÚd™iÚ cÚd ; 206 GIOChªÃl * io ; 207  sk ; 209 sk = `sock‘ ( PF_LOCAL , SOCK_SEQPACKET , 0); 210 ià( sk < 0) { 211 `”rÜ ("IPC: fažedØü—‹ sock‘: %d (%s)", ”ºo , 212 `¡»¼Ü ( ”ºo )); 213  NULL ; 216 io = `g_io_chªÃl_unix_Ãw ( sk ); 218 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 219 `g_io_chªÃl_£t_æags ( io , G_IO_FLAG_NONBLOCK , NULL ); 221 `mem£t (& addr , 0, (addr)); 222 addr . sun_çmžy = AF_UNIX ; 224 `memýy ( addr . sun_·th , ·th , size ); 226 `cÚÃù ( sk , ( sockaddr *è& addr , (addr)); 228 cÚd = G_IO_OUT | G_IO_ERR | G_IO_HUP | G_IO_NVAL ; 230 `g_io_add_w©ch ( io , cÚd , cÚÃù_cb , u£r_d©a ); 232  io ; 233 } } 235  gboÞ—n $nÙif_cÚÃù_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 236 gpoš‹r u£r_d©a ) 238  c *øð u£r_d©a ; 240 `DBG (""); 242 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 243 `”rÜ ("IPC:‚otification socket connect failed"); 245 `c_discÚÃù ( c , çl£ ); 247  FALSE ; 250 cÚd = G_IO_ERR | G_IO_HUP | G_IO_NVAL ; 252 c -> nÙif_w©ch = `g_io_add_w©ch ( io , cÚd , nÙif_w©ch_cb , ipc); 254 cÚd = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL ; 256 c -> cmd_w©ch = `g_io_add_w©ch (c-> cmd_io , cÚd , cmd_w©ch_cb , ipc); 258 `šfo ("IPC: successfully connected (with‚otifications)"); 260  FALSE ; 261 } } 263  gboÞ—n $cmd_cÚÃù_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 264 gpoš‹r u£r_d©a ) 266  c *øð u£r_d©a ; 268 `DBG (""); 270 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 271 `”rÜ ("IPC: command socket connect failed"); 272 `c_discÚÃù ( c , çl£ ); 274  FALSE ; 277 ià( c -> nÙifiÿtiÚs ) { 278 c -> nÙif_io = `c_cÚÃù (c-> ·th , ipc-> size , 279 nÙif_cÚÃù_cb , c ); 280 ià(! c -> nÙif_io ) 281 `c_discÚÃù ( c , çl£ ); 283  FALSE ; 286 cÚd = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL ; 288 c -> cmd_w©ch = `g_io_add_w©ch (c-> cmd_io , cÚd , cmd_w©ch_cb , ipc); 290 `šfo ("IPC: successfully connected (without‚otifications)"); 292  FALSE ; 293 } } 295  c * $c_š™ (cÚ¡ * ·th , size_t size ,  max_£rviû_id , 296 boÞ nÙifiÿtiÚs , 297 c_discÚÃù_cb cb , * cb_d©a ) 299  c *ipc; 301 c = `g_Ãw0 (ipc, 1); 303 c -> £rviûs = `g_Ãw0 ( £rviû_hªdËr , max_£rviû_id + 1); 304 c -> £rviû_max = max_£rviû_id ; 306 c -> ·th =…ath; 307 c -> size = size; 309 c -> nÙifiÿtiÚs =‚otifications; 311 c -> cmd_io = `c_cÚÃù ( ·th , size , cmd_cÚÃù_cb , ipc); 312 ià(! c -> cmd_io ) { 313 `g_ä“ ( c -> £rviûs ); 314 `g_ä“ ( c ); 315  NULL ; 318 c -> discÚÃù_cb = cb ; 319 c -> discÚÃù_cb_d©a = cb_d©a ; 321  c ; 322 } } 324  $c_þ—nup ( c *ipc) 326 `c_discÚÃù ( c , Œue ); 328 `g_ä“ ( c -> £rviûs ); 329 `g_ä“ ( c ); 330 } } 332  $c_£nd ( sk , ušt8_t £rviû_id , ušt8_ˆ Ýcode , ušt16_t Ën , 333 * ·¿m ,  fd ) 335  msghdr msg ; 336  iovec iv [2]; 337  c_hdr m ; 338  cmsgbuf [ `CMSG_SPACE (())]; 339  cmsghdr * cmsg ; 341 `mem£t (& msg , 0, (msg)); 342 `mem£t (& m , 0, (m)); 343 `mem£t ( cmsgbuf , 0, (cmsgbuf)); 345 m . £rviû_id = service_id; 346 m . Ýcode = opcode; 347 m . Ën =†en; 349 iv [0]. iov_ba£ = & m ; 350 iv [0]. iov_Ën = ( m ); 352 iv [1]. iov_ba£ = ·¿m ; 353 iv [1]. iov_Ën = Ën ; 355 msg . msg_iov = iv ; 356 msg . msg_iovËn = 2; 358 ià( fd >= 0) { 359 msg . msg_cÚŒÞ = cmsgbuf ; 360 msg . msg_cÚŒÞËn = ( cmsgbuf ); 362 cmsg = `CMSG_FIRSTHDR (& msg ); 363 cmsg -> cmsg_Ëv– = SOL_SOCKET ; 364 cmsg -> cmsg_ty³ = SCM_RIGHTS ; 365 cmsg -> cmsg_Ën = `CMSG_LEN (()); 368 `memýy ( `CMSG_DATA ( cmsg ), & fd , ()); 371 ià( `£ndmsg ( sk , & msg , 0) < 0) { 372 `”rÜ ("IPC s’d fažed :%s", `¡»¼Ü ( ”ºo )); 375 `¿i£ ( SIGTERM ); 377 } } 379  $c_£nd_r¥ ( c *c, ušt8_t £rviû_id , ušt8_ˆ Ýcode , 380 ušt8_t ¡©us ) 382  c_¡©us s ; 383  sk ; 385 sk = `g_io_chªÃl_unix_g‘_fd ( c -> cmd_io ); 387 ià( ¡©us =ð IPC_STATUS_SUCCESS ) { 388 `c_£nd ( sk , £rviû_id , Ýcode , 0, NULL , -1); 392 s . code = ¡©us ; 394 `c_£nd ( sk , £rviû_id , IPC_OP_STATUS , ( s ), &s, -1); 395 } } 397  $c_£nd_r¥_fuÎ ( c *c, ušt8_t £rviû_id , ušt8_ˆ Ýcode , 398 ušt16_t Ën , * ·¿m ,  fd ) 400 `c_£nd ( `g_io_chªÃl_unix_g‘_fd ( c -> cmd_io ), £rviû_id , Ýcode , Ën , 401 ·¿m , fd ); 402 } } 404  $c_£nd_nÙif ( c *c, ušt8_t £rviû_id , ušt8_ˆ Ýcode , 405 ušt16_t Ën , * ·¿m ) 407  `c_£nd_nÙif_w™h_fd ( c , £rviû_id , Ýcode , Ën , ·¿m , -1); 408 } } 410  $c_£nd_nÙif_w™h_fd ( c *c, ušt8_t £rviû_id , ušt8_ˆ Ýcode , 411 ušt16_t Ën , * ·¿m ,  fd ) 413 ià(! c || !c-> nÙif_io ) 416 `c_£nd ( `g_io_chªÃl_unix_g‘_fd ( c -> nÙif_io ), £rviû_id , Ýcode , 417 Ën , ·¿m , fd ); 418 } } 420  $c_»gi¡” ( c *c, ušt8_t £rviû , 421 cÚ¡  c_hªdËr * hªdËrs , ušt8_t size ) 423 ià( £rviû > c -> £rviû_max ) 426 c -> £rviûs [ £rviû ]. hªdËr = hªdËrs ; 427 c -> £rviûs [ £rviû ]. size = size; 428 } } 430  $c_uÄegi¡” ( c *c, ušt8_t £rviû ) 432 ià( £rviû > c -> £rviû_max ) 435 c -> £rviûs [ £rviû ]. hªdËr = NULL ; 436 c -> £rviûs [ £rviû ]. size = 0; 437 } } @android/ipc.h 24  sc_hªdËr { 25 (* mhªdËr è(cÚ¡ * mbuf , ušt16_t mËn ); 26 boÞ mv¬_Ën ; 27 size_t md©a_Ën ; 30  gc ; 32 (* tc_discÚÃù_cb è(* td©a ); 34  c * `c_š™ (cÚ¡ * ·th , size_t size ,  max_£rviû_id , 35 boÞ nÙifiÿtiÚs , 36 c_discÚÃù_cb cb , * cb_d©a ); 37  `c_þ—nup ( c *ipc); 39  `c_£nd_r¥ ( c *c, ušt8_t £rviû_id , ušt8_ˆ Ýcode , 40 ušt8_t ¡©us ); 41  `c_£nd_r¥_fuÎ ( c *c, ušt8_t £rviû_id , ušt8_ˆ Ýcode , 42 ušt16_t Ën , * ·¿m ,  fd ); 43  `c_£nd_nÙif ( c *c, ušt8_t £rviû_id , ušt8_ˆ Ýcode , 44 ušt16_t Ën , * ·¿m ); 45  `c_£nd_nÙif_w™h_fd ( c *c, ušt8_t £rviû_id , ušt8_ˆ Ýcode , 46 ušt16_t Ën , * ·¿m ,  fd ); 48  `c_»gi¡” ( c *c, ušt8_t £rviû , 49 cÚ¡  c_hªdËr * hªdËrs , ušt8_t size ); 50  `c_uÄegi¡” ( c *c, ušt8_t £rviû ); @android/log.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~ 28  ~<¡dio.h > 29  ~ 30  ~<¡dboÞ.h > 31  ~ 32  ~ 33  ~ 34  ~ 35  ~ 37  ~"¤c/log.h " 39  #LOG_TAG "blu‘oÙhd" ) 41  #LOG_DEBUG 3 ) 42  #LOG_INFO 4 ) 43  #LOG_WARN 5 ) 44  #LOG_ERR 6 ) 46  #LOG_ID_SYSTEM 3 ) 48  slogd_h—d” { 49 ušt8_t mid ; 50 ušt16_t mpid ; 51 ušt32_t m£c ; 52 ušt32_t mn£c ; 53 } __©Œibu‹__ (( ·cked )); 55  glog_fd = -1; 56  boÞ gËgacy_log = çl£ ; 58  $ªdroid_log ( Ëv– , cÚ¡ * fmt , va_li¡ ­ ) 60  logd_h—d” h—d” ; 61  iovec vec [4]; 62  út = 0; 63 * msg ; 64  pid_t pid = 0; 66 ià( log_fd < 0) 70 ià(! pid ) 71 pid = `g‘pid (); 73 ià( `va¥rštf (& msg , fmt , ­ ) < 0) 76 ià(! Ëgacy_log ) { 77  time¥ec ts ; 79 `þock_g‘time ( CLOCK_REALTIME , & ts ); 81 h—d” . id = LOG_ID_SYSTEM ; 82 h—d” . pid =…id; 83 h—d” . £c = ts . tv_£c ; 84 h—d” . n£c = ts . tv_n£c ; 86 vec [0]. iov_ba£ = & h—d” ; 87 vec [0]. iov_Ën = ( h—d” ); 89 út += 1; 92 vec [ út + 0]. iov_ba£ = & Ëv– ; 93 vec [ út + 0]. iov_Ën = ( Ëv– ); 94 vec [ út + 1]. iov_ba£ = LOG_TAG ; 95 vec [ út + 1]. iov_Ën = ( LOG_TAG ); 96 vec [ út + 2]. iov_ba£ = msg ; 97 vec [ út + 2]. iov_Ën = `¡¾’ ( msg ) + 1; 99 út += 3; 101 `wr™ev ( log_fd , vec , út ); 103 `ä“ ( msg ); 104 } } 106  $šfo (cÚ¡ * fÜm© , ...) 108 va_li¡ ­ ; 110 `va_¡¬t ( ­ , fÜm© ); 112 `ªdroid_log ( LOG_INFO , fÜm© , ­ ); 114 `va_’d ( ­ ); 115 } } 117  $w¬n (cÚ¡ * fÜm© , ...) 119 va_li¡ ­ ; 121 `va_¡¬t ( ­ , fÜm© ); 123 `ªdroid_log ( LOG_WARN , fÜm© , ­ ); 125 `va_’d ( ­ ); 126 } } 128  $”rÜ (cÚ¡ * fÜm© , ...) 130 va_li¡ ­ ; 132 `va_¡¬t ( ­ , fÜm© ); 134 `ªdroid_log ( LOG_ERR , fÜm© , ­ ); 136 `va_’d ( ­ ); 137 } } 139  $btd_debug (cÚ¡ * fÜm© , ...) 141 va_li¡ ­ ; 143 `va_¡¬t ( ­ , fÜm© ); 145 `ªdroid_log ( LOG_DEBUG , fÜm© , ­ ); 147 `va_’d ( ­ ); 148 } } 150  boÞ $š™_Ëgacy_log () 152 log_fd = `Ý’ ("/dev/log/sy¡em", O_WRONLY ); 153 ià( log_fd < 0) 154  çl£ ; 156 Ëgacy_log = Œue ; 158  Œue ; 159 } } 161  boÞ $š™_logd () 163  sockaddr_un addr ; 165 log_fd = `sock‘ ( PF_UNIX , SOCK_DGRAM | SOCK_CLOEXEC , 0); 166 ià( log_fd < 0) 167  çl£ ; 169 ià( `fúŽ ( log_fd , F_SETFL , O_NONBLOCK ) < 0) 170  çžed ; 172 `mem£t (& addr , 0, (addr)); 173 addr . sun_çmžy = AF_UNIX ; 174 `¡rýy ( addr . sun_·th , "/dev/socket/logdw"); 176 ià( `cÚÃù ( log_fd , ( sockaddr *)& addr , (addr)) < 0) 177  çžed ; 179  Œue ; 181 çžed : 182 `þo£ ( log_fd ); 183 log_fd = -1; 185  çl£ ; 186 } } 188  btd_debug_desc __¡¬t___debug []; 189  btd_debug_desc __¡Ý___debug []; 191  $__btd_log_š™ (cÚ¡ * debug ,  d‘ach ) 193 ià(! `š™_logd (è&& ! `š™_Ëgacy_log ()) 196 ià( debug ) { 197  btd_debug_desc * desc ; 199  desc = __¡¬t___debug ; desø< __¡Ý___debug ; desc++) 200 desc -> æags |ð BTD_DEBUG_FLAG_PRINT ; 203 `šfo ("Blu‘oÙh d«mÚ %s", VERSION ); 204 } } 206  $__btd_log_þ—nup () 208 ià( log_fd < 0) 211 `þo£ ( log_fd ); 212 log_fd = -1; 213 } } @android/main.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dboÞ.h > 29  ~ 30  ~<¡dšt.h > 31  ~<¡dio.h > 32  ~<¡dlib.h > 33  ~<¡dboÞ.h > 34  ~<¡ršg.h > 35  ~<”ºo.h > 36  ~ 38  ~ 39 #ià defšed ( ANDROID ) 40  ~ 41  ~ 44  ~ 46  ~"¤c/log.h " 47  ~"¤c/sdpd.h " 48  ~"¤c/sh¬ed/utž.h " 50  ~"lib/blu‘oÙh.h " 52  ~"c-commÚ.h " 53  ~"c.h " 54  ~"blu‘oÙh.h " 55  ~"sock‘.h " 56  ~"hidho¡.h " 57  ~"h®-msg.h " 58  ~"a2dp.h " 59  ~"·n.h " 60  ~"avrý.h " 61  ~"hªdsä“.h " 62  ~"g©t.h " 63  ~"h—Éh.h " 64  ~"hªdsä“-þ›Á.h " 65  ~"m­-þ›Á.h " 66  ~"utžs.h " 68  #DEFAULT_VENDOR "BlueZ" ) 69  #DEFAULT_MODEL "BlueZ fÜ Android" ) 70  #DEFAULT_NAME "BlueZ fÜ Android" ) 72  #STARTUP_GRACE_SECONDS 5 ) 73  #SHUTDOWN_GRACE_SECONDS 10 ) 75 * gcÚfig_v’dÜ = NULL ; 76 * gcÚfig_mod– = NULL ; 77 * gcÚfig_Çme = NULL ; 78 * gcÚfig_£rŸl = NULL ; 79 * gcÚfig_fw_»v = NULL ; 80 * gcÚfig_hw_»v = NULL ; 81  ušt64_t gcÚfig_sy¡em_id = 0; 82  ušt16_t gcÚfig_²p_sourû = 0x0002; 83  ušt16_t gcÚfig_²p_v’dÜ = 0x1d6b; 84  ušt16_t gcÚfig_²p_´oduù = 0x0247; 85  ušt16_t gcÚfig_²p_v”siÚ = 0x0000; 87  gušt gqu™_timeout = 0; 89  bdaddr_t gad­‹r_bdaddr ; 91  GMašLoÝ * gev’t_loÝ ; 93  c * gh®_c = NULL ; 95  boÞ g£rviûs [ HAL_SERVICE_ID_MAX + 1] = { çl£ }; 97 cÚ¡ * $bt_cÚfig_g‘_v’dÜ () 99 ià( cÚfig_v’dÜ ) 100  cÚfig_v’dÜ ; 102  DEFAULT_VENDOR ; 103 } } 105 cÚ¡ * $bt_cÚfig_g‘_Çme () 107 ià( cÚfig_Çme ) 108  cÚfig_Çme ; 110  DEFAULT_NAME ; 111 } } 113 cÚ¡ * $bt_cÚfig_g‘_mod– () 115 ià( cÚfig_mod– ) 116  cÚfig_mod– ; 118  DEFAULT_MODEL ; 119 } } 121 cÚ¡ * $bt_cÚfig_g‘_£rŸl () 123  cÚfig_£rŸl ; 124 } } 126 cÚ¡ * $bt_cÚfig_g‘_fw_»v () 128  cÚfig_fw_»v ; 129 } } 131 cÚ¡ * $bt_cÚfig_g‘_hw_»v () 133  cÚfig_hw_»v ; 134 } } 136 ušt64_t $bt_cÚfig_g‘_sy¡em_id () 138  cÚfig_sy¡em_id ; 139 } } 141 ušt16_t $bt_cÚfig_g‘_²p_sourû () 143  cÚfig_²p_sourû ; 144 } } 146 ušt16_t $bt_cÚfig_g‘_²p_v’dÜ () 148  cÚfig_²p_v’dÜ ; 149 } } 151 ušt16_t $bt_cÚfig_g‘_²p_´oduù () 153  cÚfig_²p_´oduù ; 154 } } 156 ušt16_t $bt_cÚfig_g‘_²p_v”siÚ () 158  cÚfig_²p_v”siÚ ; 159 } } 161  $£rviû_»gi¡” (cÚ¡ * buf , ušt16_t Ën ) 163 cÚ¡  h®_cmd_»gi¡”_moduË * m = buf ; 164 ušt8_t ¡©us ; 166 ià( m -> £rviû_id > HAL_SERVICE_ID_MAX || £rviûs [m->service_id]) { 167 ¡©us = HAL_STATUS_FAILED ; 168  çžed ; 171  m -> £rviû_id ) { 172  HAL_SERVICE_ID_BLUETOOTH : 173 ià(! `bt_blu‘oÙh_»gi¡” ( h®_c , m -> mode )) { 174 ¡©us = HAL_STATUS_FAILED ; 175  çžed ; 179  HAL_SERVICE_ID_SOCKET : 180 `bt_sock‘_»gi¡” ( h®_c , & ad­‹r_bdaddr , m -> mode ); 183  HAL_SERVICE_ID_HIDHOST : 184 ià(! `bt_hid_»gi¡” ( h®_c , & ad­‹r_bdaddr , m -> mode )) { 185 ¡©us = HAL_STATUS_FAILED ; 186  çžed ; 190  HAL_SERVICE_ID_A2DP : 191 ià(! `bt_a2dp_»gi¡” ( h®_c , & ad­‹r_bdaddr , m -> mode )) { 192 ¡©us = HAL_STATUS_FAILED ; 193  çžed ; 197  HAL_SERVICE_ID_PAN : 198 ià(! `bt_·n_»gi¡” ( h®_c , & ad­‹r_bdaddr , m -> mode )) { 199 ¡©us = HAL_STATUS_FAILED ; 200  çžed ; 204  HAL_SERVICE_ID_AVRCP : 205 ià(! `bt_avrý_»gi¡” ( h®_c , & ad­‹r_bdaddr , m -> mode )) { 206 ¡©us = HAL_STATUS_FAILED ; 207  çžed ; 211  HAL_SERVICE_ID_HANDSFREE : 212 ià(! `bt_hªdsä“_»gi¡” ( h®_c , & ad­‹r_bdaddr , m -> mode , 213 m -> max_þ›Ás )) { 214 ¡©us = HAL_STATUS_FAILED ; 215  çžed ; 219  HAL_SERVICE_ID_GATT : 220 ià(! `bt_g©t_»gi¡” ( h®_c , & ad­‹r_bdaddr )) { 221 ¡©us = HAL_STATUS_FAILED ; 222  çžed ; 226  HAL_SERVICE_ID_HEALTH : 227 ià(! `bt_h—Éh_»gi¡” ( h®_c , & ad­‹r_bdaddr , m -> mode )) { 228 ¡©us = HAL_STATUS_FAILED ; 229  çžed ; 233  HAL_SERVICE_ID_HANDSFREE_CLIENT : 234 ià(! `bt_hf_þ›Á_»gi¡” ( h®_c , & ad­‹r_bdaddr )) { 235 ¡©us = HAL_STATUS_FAILED ; 236  çžed ; 240  HAL_SERVICE_ID_MAP_CLIENT : 241 ià(! `bt_m­_þ›Á_»gi¡” ( h®_c , & ad­‹r_bdaddr , 242 m -> mode )) { 243 ¡©us = HAL_STATUS_FAILED ; 244  çžed ; 249 `DBG ("£rviû %u‚Ù suµÜ‹d", m -> £rviû_id ); 250 ¡©us = HAL_STATUS_FAILED ; 251  çžed ; 254 £rviûs [ m -> £rviû_id ] = Œue ; 256 ¡©us = HAL_STATUS_SUCCESS ; 258 `šfo ("S”viû ID=%u„egi¡”ed", m -> £rviû_id ); 260 çžed : 261 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_CORE , HAL_OP_REGISTER_MODULE , 262 ¡©us ); 263 } } 265  boÞ $uÄegi¡”_£rviû ( ušt8_t id ) 267 ià( id > HAL_SERVICE_ID_MAX || ! £rviûs [id]) 268  çl£ ; 270  id ) { 271  HAL_SERVICE_ID_BLUETOOTH : 272 `bt_blu‘oÙh_uÄegi¡” (); 274  HAL_SERVICE_ID_SOCKET : 275 `bt_sock‘_uÄegi¡” (); 277  HAL_SERVICE_ID_HIDHOST : 278 `bt_hid_uÄegi¡” (); 280  HAL_SERVICE_ID_A2DP : 281 `bt_a2dp_uÄegi¡” (); 283  HAL_SERVICE_ID_PAN : 284 `bt_·n_uÄegi¡” (); 286  HAL_SERVICE_ID_AVRCP : 287 `bt_avrý_uÄegi¡” (); 289  HAL_SERVICE_ID_HANDSFREE : 290 `bt_hªdsä“_uÄegi¡” (); 292  HAL_SERVICE_ID_GATT : 293 `bt_g©t_uÄegi¡” (); 295  HAL_SERVICE_ID_HEALTH : 296 `bt_h—Éh_uÄegi¡” (); 298  HAL_SERVICE_ID_HANDSFREE_CLIENT : 299 `bt_hf_þ›Á_uÄegi¡” (); 301  HAL_SERVICE_ID_MAP_CLIENT : 302 `bt_m­_þ›Á_uÄegi¡” (); 305 `DBG ("£rviû %u‚Ù suµÜ‹d", id ); 306  çl£ ; 309 £rviûs [ id ] = çl£ ; 311  Œue ; 312 } } 314  $£rviû_uÄegi¡” (cÚ¡ * buf , ušt16_t Ën ) 316 cÚ¡  h®_cmd_uÄegi¡”_moduË * m = buf ; 317 ušt8_t ¡©us ; 319 ià(! `uÄegi¡”_£rviû ( m -> £rviû_id )) { 320 ¡©us = HAL_STATUS_FAILED ; 321  çžed ; 324 ¡©us = HAL_STATUS_SUCCESS ; 326 `šfo ("S”viû ID=%u uÄegi¡”ed", m -> £rviû_id ); 328 çžed : 329 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_CORE , HAL_OP_UNREGISTER_MODULE , 330 ¡©us ); 331 } } 333 * $g‘_´Ý (* ´Ý , ušt16_t Ën , cÚ¡ ušt8_t * v® ) 336 `ä“ ( ´Ý ); 338 ´Ý = `m®loc0 ( Ën ); 339 ià(! ´Ý ) 340  NULL ; 342 `memýy ( ´Ý , v® , Ën ); 343 ´Ý [ Ën - 1] = '\0'; 345  ´Ý ; 346 } } 348  $·r£_²p_id ( ušt16_t Ën , cÚ¡ ušt8_t * v® ) 350  »suÉ ; 351 ušt16_t v’dÜ , ´oduù , v”siÚ , sourû ; 352 * ²p ; 355 v”siÚ = cÚfig_²p_v”siÚ ; 357 ²p = `g‘_´Ý ( NULL , Ën , v® ); 358 ià(! ²p ) 361 `DBG ("²p_id %s", ²p ); 363 »suÉ = `ssÿnf ( ²p , "bluetooth:%4hx:%4hx:%4hx", 364 & v’dÜ , & ´oduù , & v”siÚ ); 365 ià( »suÉ !ð EOF &&„esult >= 2) { 366 sourû = 0x0001; 367  dÚe ; 370 »suÉ = `ssÿnf ( ²p , "usb:%4hx:%4hx:%4hx", & v’dÜ , & ´oduù , & v”siÚ ); 371 ià( »suÉ !ð EOF &&„esult >= 2) { 372 sourû = 0x0002; 373  dÚe ; 376 `ä“ ( ²p ); 378 dÚe : 379 `ä“ ( ²p ); 381 cÚfig_²p_sourû = sourû ; 382 cÚfig_²p_v’dÜ = v’dÜ ; 383 cÚfig_²p_´oduù = ´oduù ; 384 cÚfig_²p_v”siÚ = v”siÚ ; 385 } } 387  $·r£_sy¡em_id ( ušt16_t Ën , cÚ¡ ušt8_t * v® ) 389 ušt64_t »s ; 390 * id ; 392 id = `g‘_´Ý ( NULL , Ën , v® ); 393 ià(! id ) 396 »s = `¡¹ouÎ ( id , NULL , 16); 397 ià( »s =ð ULLONG_MAX && ”ºo =ð ERANGE ) 398  dÚe ; 400 cÚfig_sy¡em_id = »s ; 401 dÚe : 402 `ä“ ( id ); 403 } } 405  $cÚfigu¿tiÚ (cÚ¡ * buf , ušt16_t Ën ) 407 cÚ¡  h®_cmd_cÚfigu¿tiÚ * cmd = buf ; 408 cÚ¡  h®_cÚfig_´Ý * ´Ý ; 409  i ; 411 buf +ð(* cmd ); 412 Ën -ð(* cmd ); 414  i = 0; i < cmd -> num ; i++) { 415 ´Ý = buf ; 417 ià( Ën < (* ´Ý ) ||†en < (*prop) +…rop->len) { 418 `”rÜ ("Invalid configuration command,erminating"); 419 `¿i£ ( SIGTERM ); 423  ´Ý -> ty³ ) { 424  HAL_CONFIG_VENDOR : 425 cÚfig_v’dÜ = `g‘_´Ý (cÚfig_v’dÜ, ´Ý -> Ën , 426 ´Ý -> v® ); 427 `DBG ("v’dÜ %s", cÚfig_v’dÜ ); 429  HAL_CONFIG_NAME : 430 cÚfig_Çme = `g‘_´Ý (cÚfig_Çme, ´Ý -> Ën , 431 ´Ý -> v® ); 432 `DBG ("Çm%s", cÚfig_Çme ); 434  HAL_CONFIG_MODEL : 435 cÚfig_mod– = `g‘_´Ý (cÚfig_mod–, ´Ý -> Ën , 436 ´Ý -> v® ); 437 `DBG ("mod– %s", cÚfig_mod– ); 439  HAL_CONFIG_SERIAL_NUMBER : 440 cÚfig_£rŸl = `g‘_´Ý (cÚfig_£rŸl, ´Ý -> Ën , 441 ´Ý -> v® ); 442 `DBG ("£rŸÈ%s", cÚfig_£rŸl ); 444  HAL_CONFIG_SYSTEM_ID : 445 `·r£_sy¡em_id ( ´Ý -> Ën ,…rÝ-> v® ); 447  HAL_CONFIG_PNP_ID : 448 `·r£_²p_id ( ´Ý -> Ën ,…rÝ-> v® ); 450  HAL_CONFIG_FW_REV : 451 cÚfig_fw_»v = `g‘_´Ý (cÚfig_fw_»v, ´Ý -> Ën , 452 ´Ý -> v® ); 453 `DBG ("fw_»v %s", cÚfig_fw_»v ); 455  HAL_CONFIG_HW_REV : 456 cÚfig_hw_»v = `g‘_´Ý (cÚfig_hw_»v, ´Ý -> Ën , 457 ´Ý -> v® ); 458 `DBG ("hw_»v %s", cÚfig_hw_»v ); 461 `”rÜ ("Invalid configuration option (%u),erminating", 462 ´Ý -> ty³ ); 463 `¿i£ ( SIGTERM ); 467 buf +ð(* ´Ý è+…rÝ-> Ën ; 468 Ën -ð(* ´Ý ) +…rop->len; 471 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_CORE , HAL_OP_CONFIGURATION , 472 HAL_STATUS_SUCCESS ); 473 } } 475 cÚ¡  c_hªdËr gcmd_hªdËrs [] = { 477 { £rviû_»gi¡” , çl£ , ( h®_cmd_»gi¡”_moduË ) }, 479 { £rviû_uÄegi¡” , çl£ , ( h®_cmd_uÄegi¡”_moduË ) }, 481 { cÚfigu¿tiÚ , Œue , ( h®_cmd_cÚfigu¿tiÚ ) }, 484  $blu‘oÙh_¡Ý³d () 486 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 487 } } 489  gboÞ—n $qu™_ev’ŽoÝ ( gpoš‹r u£r_d©a ) 491 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 493 qu™_timeout = 0; 495  FALSE ; 496 } } 498  $¡Ý_blu‘oÙh () 500  boÞ __¡Ý = çl£ ; 502 ià( __¡Ý ) 505 __¡Ý = Œue ; 507 ià(! `bt_blu‘oÙh_¡Ý ( blu‘oÙh_¡Ý³d )) { 508 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 512 qu™_timeout = `g_timeout_add_£cÚds ( SHUTDOWN_GRACE_SECONDS , 513 qu™_ev’ŽoÝ , NULL ); 514 } } 516  $c_discÚÃùed (* d©a ) 518 `¡Ý_blu‘oÙh (); 519 } } 521  $ad­‹r_»ady ( ”r , cÚ¡ bdaddr_t * addr ) 523 ià( ”r < 0) { 524 `”rÜ ("Ad­‹¸š™Ÿliz©iÚ fažed: %s", `¡»¼Ü (- ”r )); 525 `ex™ ( EXIT_FAILURE ); 528 `baýy (& ad­‹r_bdaddr , addr ); 530 ià( qu™_timeout > 0) { 531 `g_sourû_»move ( qu™_timeout ); 532 qu™_timeout = 0; 535 `šfo ("Adapter initialized"); 537 h®_c = `c_š™ ( BLUEZ_HAL_SK_PATH , (BLUEZ_HAL_SK_PATH), 538 HAL_SERVICE_ID_MAX , Œue , 539 c_discÚÃùed , NULL ); 540 ià(! h®_c ) { 541 `”rÜ ("Failedo initialize IPC"); 542 `ex™ ( EXIT_FAILURE ); 545 `c_»gi¡” ( h®_c , HAL_SERVICE_ID_CORE , cmd_hªdËrs , 546 `G_N_ELEMENTS ( cmd_hªdËrs )); 547 } } 549  gboÞ—n $sigÇl_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 550 gpoš‹r u£r_d©a ) 552  boÞ __‹rmš©ed = çl£ ; 553  sigÇlfd_sigšfo si ; 554 ssize_t »suÉ ; 555  fd ; 557 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) 558  FALSE ; 560 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 562 »suÉ = `»ad ( fd , & si , (si)); 563 ià( »suÉ !ð( si )) 564  FALSE ; 566  si . ssi_signo ) { 567  SIGINT : 568  SIGTERM : 569 ià(! __‹rmš©ed ) { 570 `šfo ("Terminating"); 571 `¡Ý_blu‘oÙh (); 574 __‹rmš©ed = Œue ; 578  TRUE ; 579 } } 581  gušt $£tup_sigÇlfd () 583 GIOChªÃl * chªÃl ; 584 gušt sourû ; 585 sig£t_t mask ; 586  fd ; 588 `sigem±y£t (& mask ); 589 `sigadd£t (& mask , SIGINT ); 590 `sigadd£t (& mask , SIGTERM ); 592 ià( `sig´ocmask ( SIG_BLOCK , & mask , NULL ) < 0) { 593 `³¼Ü ("Failedo set signal mask"); 597 fd = `sigÇlfd (-1, & mask , 0); 598 ià( fd < 0) { 599 `³¼Ü ("Failedo create signal descriptor"); 603 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 605 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 606 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 607 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 609 sourû = `g_io_add_w©ch ( chªÃl , 610 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 611 sigÇl_hªdËr , NULL ); 613 `g_io_chªÃl_uÄef ( chªÃl ); 615  sourû ; 616 } } 618  gboÞ—n gÝtiÚ_v”siÚ = FALSE ; 619  gšt gÝtiÚ_šdex = -1; 620  gboÞ—n gÝtiÚ_dbg = FALSE ; 621  gboÞ—n gÝtiÚ_mgmt_dbg = FALSE ; 623  GO±iÚEÁry gÝtiÚs [] = { 624 { "v”siÚ", 'v', 0, G_OPTION_ARG_NONE , & ÝtiÚ_v”siÚ , 625 "Show v”siÚ infÜm©iÚ‡ndƒx™", NULL }, 626 { "šdex", 'i', 0, G_OPTION_ARG_INT , & ÝtiÚ_šdex , 628 { "debug", 'd', 0, G_OPTION_ARG_NONE , & ÝtiÚ_dbg , 629 "EÇbË debug†ogs", NULL }, 630 { "mgmt-debug", 0, 0, G_OPTION_ARG_NONE , & ÝtiÚ_mgmt_dbg , 631 "EÇbË mgmˆdebug†ogs", NULL }, 633 { NULL } 636  $þ—nup_£rviûs () 638  i ; 640 `DBG (""); 642  i = HAL_SERVICE_ID_MAX ; i > HAL_SERVICE_ID_CORE ; i--) 643 `uÄegi¡”_£rviû ( i ); 644 } } 646  boÞ $£t_ÿ·bž™›s () 648 #ià `defšed ( ANDROID ) 649  __u£r_ÿp_h—d”_¡ruù h—d” ; 650  __u£r_ÿp_d©a_¡ruù ÿp ; 652 h—d” . v”siÚ = _LINUX_CAPABILITY_VERSION ; 653 h—d” . pid = 0; 660 ÿp . efãùive = c­. ³rm™‹d = 661 `CAP_TO_MASK ( CAP_NET_RAW ) | 662 `CAP_TO_MASK ( CAP_NET_ADMIN ) | 663 `CAP_TO_MASK ( CAP_NET_BIND_SERVICE ); 664 ÿp . šh”™abË = 0; 667 ià( `´ùl ( PR_SET_KEEPCAPS , 1) < 0) { 668 `”rÜ ("%s:…rùl(): %s", __func__ , `¡»¼Ü ( ”ºo )); 669  çl£ ; 673 ià( `£tuid (1002) < 0) { 674 `”rÜ ("%s: s‘uid(): %s", __func__ , `¡»¼Ü ( ”ºo )); 675  çl£ ; 679 ià( `ÿp£t (& h—d” , & ÿp ) < 0) { 680 `”rÜ ("%s: c­£t(): %s", __func__ , `¡»¼Ü ( ”ºo )); 681  çl£ ; 685 ià( `ÿpg‘ (& h—d” , & ÿp ) < 0) { 686 `”rÜ ("%s: c­g‘(): %s", __func__ , `¡»¼Ü ( ”ºo )); 687  çl£ ; 690 `DBG ("C­s:ƒff: 0x%x,…”m: 0x%x, inh: 0x%x", ÿp . efãùive , 691 ÿp . ³rm™‹d , c­. šh”™abË ); 694  Œue ; 695 } } 697  $£t_v”siÚ () 699 ušt8_t majÜ , mšÜ ; 701 ià( `ssÿnf ( VERSION , "%hhu.%hhu", & majÜ , & mšÜ ) != 2) 704 cÚfig_²p_v”siÚ = majÜ << 8 | mšÜ ; 705 } } 707  $maš ( ¬gc , * ¬gv []) 709 GO±iÚCÚ‹xt * cÚ‹xt ; 710 GE¼Ü * ”r = NULL ; 711 gušt sigÇl ; 713 `£t_v”siÚ (); 715 cÚ‹xt = `g_ÝtiÚ_cÚ‹xt_Ãw ( NULL ); 716 `g_ÝtiÚ_cÚ‹xt_add_maš_’Œ›s ( cÚ‹xt , ÝtiÚs , NULL ); 718 ià( `g_ÝtiÚ_cÚ‹xt_·r£ ( cÚ‹xt , & ¬gc , & ¬gv , & ”r è=ð FALSE ) { 719 ià( ”r !ð NULL ) { 720 `g_´š‹¼ ("%s\n", ”r -> mes§ge ); 721 `g_”rÜ_ä“ ( ”r ); 723 `g_´š‹¼ ("An unknownƒrror occurred\n"); 725 `ex™ ( EXIT_FAILURE ); 728 `g_ÝtiÚ_cÚ‹xt_ä“ ( cÚ‹xt ); 730 ià( ÝtiÚ_v”siÚ =ð TRUE ) { 731 `´štf ("%s\n", VERSION ); 732 `ex™ ( EXIT_SUCCESS ); 735 sigÇl = `£tup_sigÇlfd (); 736 ià(! sigÇl ) 737  EXIT_FAILURE ; 739 ià( ÝtiÚ_dbg || ÝtiÚ_mgmt_dbg ) 740 `__btd_log_š™ ("*", 0); 742 `__btd_log_š™ ( NULL , 0); 744 ià(! `£t_ÿ·bž™›s ()) { 745 `__btd_log_þ—nup (); 746 `g_sourû_»move ( sigÇl ); 747  EXIT_FAILURE ; 750 qu™_timeout = `g_timeout_add_£cÚds ( STARTUP_GRACE_SECONDS , 751 qu™_ev’ŽoÝ , NULL ); 752 ià( qu™_timeout == 0) { 753 `”rÜ ("Failedo init startupimeout"); 754 `__btd_log_þ—nup (); 755 `g_sourû_»move ( sigÇl ); 756  EXIT_FAILURE ; 759 ià(! `bt_blu‘oÙh_¡¬t ( ÝtiÚ_šdex , ÝtiÚ_mgmt_dbg , ad­‹r_»ady )) { 760 `__btd_log_þ—nup (); 761 `g_sourû_»move ( qu™_timeout ); 762 `g_sourû_»move ( sigÇl ); 763  EXIT_FAILURE ; 767 `¡¬t_sdp_£rv” (0, 0); 769 `DBG ("Entering main†oop"); 771 ev’t_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 773 `g_maš_loÝ_run ( ev’t_loÝ ); 775 `g_sourû_»move ( sigÇl ); 777 ià( qu™_timeout > 0) 778 `g_sourû_»move ( qu™_timeout ); 780 `þ—nup_£rviûs (); 782 `¡Ý_sdp_£rv” (); 783 `bt_blu‘oÙh_þ—nup (); 784 `g_maš_loÝ_uÄef ( ev’t_loÝ ); 787 ià( h®_c ) { 788 `c_uÄegi¡” ( h®_c , HAL_SERVICE_ID_CORE ); 789 `c_þ—nup ( h®_c ); 792 `šfo ("Exit"); 794 `__btd_log_þ—nup (); 796 `ä“ ( cÚfig_v’dÜ ); 797 `ä“ ( cÚfig_mod– ); 798 `ä“ ( cÚfig_Çme ); 799 `ä“ ( cÚfig_£rŸl ); 800 `ä“ ( cÚfig_fw_»v ); 801 `ä“ ( cÚfig_hw_»v ); 803  EXIT_SUCCESS ; 804 } } @android/map-client.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dboÞ.h > 29  ~<¡dlib.h > 30  ~<¡dšt.h > 31  ~ 33  ~"lib/sdp.h " 34  ~"lib/sdp_lib.h " 35  ~"¤c/sdp-þ›Á.h " 37  ~"c.h " 38  ~"lib/blu‘oÙh.h " 39  ~"m­-þ›Á.h " 40  ~"¤c/log.h " 41  ~"h®-msg.h " 42  ~"c-commÚ.h " 43  ~"utžs.h " 44  ~"¤c/sh¬ed/utž.h " 46  c * gh®_c = NULL ; 47  bdaddr_t gad­‹r_addr ; 49  $fžl_mû_š¡ (* buf , št32_t id , iÁ32_ˆ sú , iÁ32_ˆ msg_ty³ , 50 cÚ¡ * Çme , ušt8_t Çme_Ën ) 52  h®_m­_þ›Á_mas_š¡ªû * š¡ = buf ; 54 š¡ -> id = id; 55 š¡ -> sú = scn; 56 š¡ -> msg_ty³s = msg_ty³ ; 57 š¡ -> Çme_Ën =‚ame_len; 59 ià( Çme_Ën ) 60 `memýy ( š¡ -> Çme ,‚ame, Çme_Ën ); 62  (* š¡ è+ Çme_Ën ; 63 } } 65  $m­_þ›Á_sdp_£¬ch_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r d©a ) 67 ušt8_t buf [ IPC_MTU ]; 68  h®_ev_m­_þ›Á_»mÙe_mas_š¡ªûs * ev = (*è buf ; 69 bdaddr_t * d¡ = d©a ; 70 sdp_li¡_t * li¡ , * ´Ùos ; 71 ušt8_t ¡©us ; 72 št32_t id , sú , msg_ty³ , Çme_Ën , num_š¡ªûs = 0; 73 * Çme ; 74 size_t size ; 76 size = (* ev ); 77 `bdaddr2ªdroid ( d¡ , & ev -> bdaddr ); 79 ià( ”r < 0) { 80 `”rÜ ("mû: UÇbËØg‘ SDP„ecÜd: %s", `¡»¼Ü (- ”r )); 81 ¡©us = HAL_STATUS_FAILED ; 82  çž ; 85  li¡ = »cs ;†i¡ !ð NULL ;†i¡ =†i¡-> Ãxt ) { 86 sdp_»cÜd_t * »c = li¡ -> d©a ; 87 sdp_d©a_t * d©a ; 89 d©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_MAS_INSTANCE_ID ); 90 ià(! d©a ) { 91 `”rÜ ("mce: cannot get mas instance id"); 95 id = d©a -> v® . ušt8 ; 97 d©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_SVCNAME_PRIMARY ); 98 ià(! d©a ) { 99 `”rÜ ("mce: cannot get mas instance‚ame"); 103 Çme = d©a -> v® . ¡r ; 104 Çme_Ën = d©a -> un™Size ; 106 d©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_SUPPORTED_MESSAGE_TYPES ); 107 ià(! d©a ) { 108 `”rÜ ("mce: cannot get mas instance msgype"); 112 msg_ty³ = d©a -> v® . ušt8 ; 114 ià( `sdp_g‘_acûss_´Ùos ( »c , & ´Ùos ) < 0) { 115 `”rÜ ("mce: cannot get mas instance sdp…rotocol†ist"); 119 sú = `sdp_g‘_´Ùo_pÜt ( ´Ùos , RFCOMM_UUID ); 121 `sdp_li¡_fÜ—ch ( ´Ùos , ( sdp_li¡_func_t è sdp_li¡_ä“ , NULL ); 122 `sdp_li¡_ä“ ( ´Ùos , NULL ); 124 ià(! sú ) { 125 `”rÜ ("mce: cannot get mas instance„fcomm channel"); 129 size +ð `fžl_mû_š¡ ( buf + size, id , sú , msg_ty³ , Çme , 130 Çme_Ën ); 131 num_š¡ªûs ++; 134 ¡©us = HAL_STATUS_SUCCESS ; 136 çž : 137 ev -> num_š¡ªûs =‚um_instances; 138 ev -> ¡©us = status; 140 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_MAP_CLIENT , 141 HAL_EV_MAP_CLIENT_REMOTE_MAS_INSTANCES , size , buf ); 142 } } 144  $hªdË_g‘_š¡ªûs (cÚ¡ * buf , ušt16_t Ën ) 146 cÚ¡  h®_cmd_m­_þ›Á_g‘_š¡ªûs * cmd = buf ; 147 ušt8_t ¡©us ; 148 bdaddr_t * d¡ ; 149 uuid_t uuid ; 151 `DBG (""); 153 d¡ = `Ãw0 ( bdaddr_t , 1); 154 ià(! d¡ ) { 155 `”rÜ ("mce: Failo‡llocate cb data"); 156 ¡©us = HAL_STATUS_FAILED ; 157  çžed ; 160 `ªdroid2bdaddr (& cmd -> bdaddr , d¡ ); 161 `sdp_uuid16_ü—‹ (& uuid , MAP_MSE_SVCLASS_ID ); 163 ià( `bt_£¬ch_£rviû (& ad­‹r_addr , d¡ , & uuid , 164 m­_þ›Á_sdp_£¬ch_cb , d¡ , ä“ , 0)) { 165 `”rÜ ("mce: Failedo search SDP details"); 166 ¡©us = HAL_STATUS_FAILED ; 167  çžed ; 170 ¡©us = HAL_STATUS_SUCCESS ; 172 çžed : 173 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_MAP_CLIENT , 174 HAL_OP_MAP_CLIENT_GET_INSTANCES , ¡©us ); 175 } } 177 cÚ¡  c_hªdËr gcmd_hªdËrs [] = { 179 { hªdË_g‘_š¡ªûs , çl£ , 180 ( h®_cmd_m­_þ›Á_g‘_š¡ªûs ) }, 183 boÞ $bt_m­_þ›Á_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ) 185 `DBG (""); 187 `baýy (& ad­‹r_addr , addr ); 189 h®_c = c ; 191 `c_»gi¡” ( h®_c , HAL_SERVICE_ID_MAP_CLIENT , cmd_hªdËrs , 192 `G_N_ELEMENTS ( cmd_hªdËrs )); 194  Œue ; 195 } } 197  $bt_m­_þ›Á_uÄegi¡” () 199 `DBG (""); 201 `c_uÄegi¡” ( h®_c , HAL_SERVICE_ID_MAP_CLIENT ); 202 h®_c = NULL ; 203 } } @android/map-client.h 24 boÞ bt_m­_þ›Á_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , 25 ušt8_t mode ); 26  bt_m­_þ›Á_uÄegi¡” (); @android/pan.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dšt.h > 29  ~<¡dboÞ.h > 30  ~<”ºo.h > 31  ~ 32  ~ 33  ~ 34  ~ 35  ~ 36  ~ 37  ~ 38  ~<Ãt/if.h > 39  ~ 40  ~<Ãtš‘/š.h > 41  ~<Ãtš‘/6.h > 42  ~ 44  ~"btio/btio.h " 45  ~"lib/blu‘oÙh.h " 46  ~"lib/bÃp.h " 47  ~"lib/sdp.h " 48  ~"lib/sdp_lib.h " 49  ~"¤c/uuid-h–³r.h " 50  ~"´ofžes/ÃtwÜk/bÃp.h " 51  ~"¤c/log.h " 53  ~"h®-msg.h " 54  ~"c-commÚ.h " 55  ~"c.h " 56  ~"utžs.h " 57  ~"blu‘oÙh.h " 58  ~"·n.h " 60  #SVC_HINT_NETWORKING 0x02 ) 62  #BNEP_BRIDGE "bt-·n" ) 63  #BNEP_PANU_INTERFACE "bt-·n" ) 64  #BNEP_NAP_INTERFACE "bt-·n%d" ) 66  bdaddr_t gad­‹r_addr ; 67  GSLi¡ * gdeviûs = NULL ; 68  ušt8_t gloÿl_rÞe = HAL_PAN_ROLE_NONE ; 69  c * gh®_c = NULL ; 71  s·n_deviû { 72  miçû [16]; 73 bdaddr_t md¡ ; 74 ušt8_t mcÚn_¡©e ; 75 ušt8_t mrÞe ; 76 GIOChªÃl * mio ; 77  bÃp * m£ssiÚ ; 78 gušt mw©ch ; 82 ušt32_t m»cÜd_id ; 83 GIOChªÃl * mio ; 84 boÞ mbridge ; 85 } gÇp_dev = { 86 . »cÜd_id = 0, 87 . gio = NULL , 88 . gbridge = çl£ , 91  $£t_fÜw¬d_d–ay ( sk ) 93  ¬gs [4] = { BRCTL_SET_BRIDGE_FORWARD_DELAY , 0 , 0, 0 }; 94  iäeq iä ; 96 `mem£t (& iä , 0, (ifr)); 97 `¡ºýy ( iä . iä_Çme , BNEP_BRIDGE , IFNAMSIZ ); 98 iä . iä_d©a = (*è ¬gs ; 100 ià( `ioùl ( sk , SIOCDEVPRIVATE , & iä ) < 0) { 101 `”rÜ ("pan: setting forward delay failed: %d (%s)", 102 ”ºo , `¡»¼Ü (errno)); 107 } } 109  $Çp_ü—‹_bridge () 111  sk , ”r ; 113 `DBG ("%s", BNEP_BRIDGE ); 115 ià( Çp_dev . bridge ) 118 sk = `sock‘ ( AF_INET , SOCK_STREAM | SOCK_CLOEXEC , 0); 119 ià( sk < 0) 120  - EOPNOTSUPP ; 122 ià( `ioùl ( sk , SIOCBRADDBR , BNEP_BRIDGE ) < 0) { 123 ”r = - ”ºo ; 124 ià( ”r !ð- EEXIST ) { 125 `þo£ ( sk ); 126  - EOPNOTSUPP ; 130 ”r = `£t_fÜw¬d_d–ay ( sk ); 131 ià( ”r < 0) 132 `ioùl ( sk , SIOCBRDELBR , BNEP_BRIDGE ); 134 `þo£ ( sk ); 136 Çp_dev . bridge = ”r == 0; 138  ”r ; 139 } } 141  $bridge_if_down () 143  iäeq iä ; 144  sk , ”r ; 146 sk = `sock‘ ( AF_INET , SOCK_DGRAM , 0); 148 `mem£t (& iä , 0, (ifr)); 149 `¡ºýy ( iä . iä_Çme , BNEP_BRIDGE , IF_NAMESIZE - 1); 151 iä . iä_æags &ð~ IFF_UP ; 154 ”r = `ioùl ( sk , SIOCSIFFLAGS , ( ÿddr_t è& iä ); 156 `þo£ ( sk ); 158 ià( ”r < 0) { 159 `”rÜ ("·n: Could‚Ù bršg dowÀ%s", BNEP_BRIDGE ); 160  ”r ; 164 } } 166  $Çp_»move_bridge () 168  sk , ”r ; 170 `DBG ("%s", BNEP_BRIDGE ); 172 ià(! Çp_dev . bridge ) 175 `bridge_if_down (); 177 sk = `sock‘ ( AF_INET , SOCK_STREAM | SOCK_CLOEXEC , 0); 178 ià( sk < 0) 179  - EOPNOTSUPP ; 181 ”r = `ioùl ( sk , SIOCBRDELBR , BNEP_BRIDGE ); 182 ià( ”r < 0) 183 ”r = - ”ºo ; 185 `þo£ ( sk ); 187 ià( ”r < 0) 188  ”r ; 190 Çp_dev . bridge = çl£ ; 193 } } 195  $deviû_cmp ( gcÚ¡poš‹r s , gcÚ¡poš‹¸ u£r_d©a ) 197 cÚ¡  ·n_deviû * dev = s ; 198 cÚ¡ bdaddr_t * d¡ = u£r_d©a ; 200  `bacmp (& dev -> d¡ , dst); 201 } } 203  $·n_deviû_ä“ (* d©a ) 205  ·n_deviû * dev = d©a ; 207 ià( dev -> w©ch > 0) { 208 `bÃp_£rv”_d–‘e ( BNEP_BRIDGE , dev -> içû , &dev-> d¡ ); 209 `g_sourû_»move ( dev -> w©ch ); 212 ià( dev -> io ) { 213 `g_io_chªÃl_shutdown ( dev -> io , FALSE , NULL ); 214 `g_io_chªÃl_uÄef ( dev -> io ); 217 ià( dev -> £ssiÚ ) 218 `bÃp_ä“ ( dev -> £ssiÚ ); 220 `g_ä“ ( dev ); 221 } } 223  $·n_deviû_»move ( ·n_deviû * dev ) 225 deviûs = `g_¦i¡_»move (deviûs, dev ); 227 ià( `g_¦i¡_Ëngth ( deviûs ) == 0) { 228 loÿl_rÞe = HAL_PAN_ROLE_NONE ; 229 `Çp_»move_bridge (); 232 `·n_deviû_ä“ ( dev ); 233 } } 235  $bt_·n_nÙify_cÚn_¡©e ( ·n_deviû * dev , ušt8_t ¡©e ) 237  h®_ev_·n_cÚn_¡©e ev ; 238  addr [18]; 240 ià( dev -> cÚn_¡©e =ð ¡©e ) 243 dev -> cÚn_¡©e = ¡©e ; 244 `ba2¡r (& dev -> d¡ , addr ); 245 `DBG ("deviû % ¡©%u", addr , ¡©e ); 247 `bdaddr2ªdroid (& dev -> d¡ , ev . bdaddr ); 248 ev . ¡©e = state; 249 ev . loÿl_rÞe =†ocal_role; 250 ev . »mÙe_rÞe = dev -> rÞe ; 251 ev . ¡©us = HAL_STATUS_SUCCESS ; 253 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_PAN , HAL_EV_PAN_CONN_STATE , 254 ( ev ), &ev); 255 ià( dev -> cÚn_¡©e =ð HAL_PAN_STATE_DISCONNECTED ) 256 `·n_deviû_»move ( dev ); 257 } } 259  $bt_·n_nÙify_ù¾_¡©e ( ·n_deviû * dev , ušt8_t ¡©e , 260 ušt8_t ¡©us ) 262  h®_ev_·n_ù¾_¡©e ev ; 264 `DBG (""); 266 ev . ¡©e = state; 267 ev . loÿl_rÞe =†ocal_role; 268 ev . ¡©us = status; 270 `mem£t ( ev . Çme , 0, (ev.name)); 272 ià( loÿl_rÞe =ð HAL_PAN_ROLE_NAP ) 273 `memýy ( ev . Çme , BNEP_BRIDGE , (BNEP_BRIDGE)); 274 ià( loÿl_rÞe =ð HAL_PAN_ROLE_PANU ) 275 `memýy ( ev . Çme , dev -> içû , (dev->iface)); 277 `c_£nd_nÙif ( h®_c , HAL_SERVICE_ID_PAN , HAL_EV_PAN_CTRL_STATE , 278 ( ev ), &ev); 279 } } 281  $bÃp_discÚn_cb (* d©a ) 283  ·n_deviû * dev = d©a ; 285 `DBG ("% discÚÃùed", dev -> içû ); 287 `bt_·n_nÙify_cÚn_¡©e ( dev , HAL_PAN_STATE_DISCONNECTED ); 288 } } 290  $bÃp_cÚn_cb (* içû ,  ”r , * d©a ) 292  ·n_deviû * dev = d©a ; 294 `DBG (""); 296 ià( ”r < 0) { 297 `”rÜ ("bðcÚÃù„eq fažed: %s", `¡»¼Ü (- ”r )); 298 `bt_·n_nÙify_cÚn_¡©e ( dev , HAL_PAN_STATE_DISCONNECTED ); 302 `memýy ( dev -> içû , iface, (dev->iface)); 304 `DBG ("% cÚÃùed", dev -> içû ); 306 `bt_·n_nÙify_ù¾_¡©e ( dev , HAL_PAN_CTRL_ENABLED , HAL_STATUS_SUCCESS ); 307 `bt_·n_nÙify_cÚn_¡©e ( dev , HAL_PAN_STATE_CONNECTED ); 308 } } 310  $cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * ”r , gpoš‹r d©a ) 312  ·n_deviû * dev = d©a ; 313 ušt16_t l_rÞe , r_rÞe ; 314  ³¼ , sk ; 316 `DBG (""); 318 ià( ”r ) { 319 `”rÜ ("%s", ”r -> mes§ge ); 320  çž ; 323 l_rÞe = ( loÿl_rÞe =ð HAL_PAN_ROLE_NAP è? BNEP_SVC_NAP : 324 BNEP_SVC_PANU ; 325 r_rÞe = ( dev -> rÞe =ð HAL_PAN_ROLE_NAP è? BNEP_SVC_NAP : BNEP_SVC_PANU ; 327 sk = `g_io_chªÃl_unix_g‘_fd ( dev -> io ); 329 dev -> £ssiÚ = `bÃp_Ãw ( sk , l_rÞe , r_rÞe , BNEP_PANU_INTERFACE ); 330 ià(! dev -> £ssiÚ ) 331  çž ; 333 ³¼ = `bÃp_cÚÃù ( dev -> £ssiÚ , bÃp_cÚn_cb , dev); 334 ià( ³¼ < 0) { 335 `”rÜ ("bðcÚÃù„eq fažed: %s", `¡»¼Ü (- ³¼ )); 336  çž ; 339 `bÃp_£t_discÚÃù ( dev -> £ssiÚ , bÃp_discÚn_cb , dev); 341 ià( dev -> io ) { 342 `g_io_chªÃl_uÄef ( dev -> io ); 343 dev -> io = NULL ; 348 çž : 349 `bt_·n_nÙify_cÚn_¡©e ( dev , HAL_PAN_STATE_DISCONNECTED ); 350 } } 352  $bt_·n_cÚÃù (cÚ¡ * buf , ušt16_t Ën ) 354 cÚ¡  h®_cmd_·n_cÚÃù * cmd = buf ; 355  ·n_deviû * dev ; 356 ušt8_t ¡©us ; 357 bdaddr_t d¡ ; 358  addr [18]; 359 GSLi¡ * l ; 360 GE¼Ü * g”r = NULL ; 362 `DBG (""); 364  cmd -> loÿl_rÞe ) { 365  HAL_PAN_ROLE_NAP : 366 ià( cmd -> »mÙe_rÞe !ð HAL_PAN_ROLE_PANU ) { 367 ¡©us = HAL_STATUS_UNSUPPORTED ; 368  çžed ; 371  HAL_PAN_ROLE_PANU : 372 ià( cmd -> »mÙe_rÞe !ð HAL_PAN_ROLE_NAP && 373 cmd -> »mÙe_rÞe !ð HAL_PAN_ROLE_PANU ) { 374 ¡©us = HAL_STATUS_UNSUPPORTED ; 375  çžed ; 379 ¡©us = HAL_STATUS_UNSUPPORTED ; 380  çžed ; 383 `ªdroid2bdaddr (& cmd -> bdaddr , & d¡ ); 385 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 386 ià( l ) { 387 ¡©us = HAL_STATUS_FAILED ; 388  çžed ; 391 dev = `g_Ãw0 ( ·n_deviû , 1); 392 `baýy (& dev -> d¡ , &dst); 393 loÿl_rÞe = cmd ->local_role; 394 dev -> rÞe = cmd -> »mÙe_rÞe ; 396 `ba2¡r (& dev -> d¡ , addr ); 397 `DBG ("cÚÃùšgØ% %s", addr , dev -> içû ); 399 dev -> io = `bt_io_cÚÃù ( cÚÃù_cb , dev, NULL , & g”r , 400 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 401 BT_IO_OPT_DEST_BDADDR , & dev -> d¡ , 402 BT_IO_OPT_PSM , BNEP_PSM , 403 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 404 BT_IO_OPT_OMTU , BNEP_MTU , 405 BT_IO_OPT_IMTU , BNEP_MTU , 406 BT_IO_OPT_INVALID ); 407 ià(! dev -> io ) { 408 `”rÜ ("%s", g”r -> mes§ge ); 409 `g_”rÜ_ä“ ( g”r ); 410 `g_ä“ ( dev ); 411 ¡©us = HAL_STATUS_FAILED ; 412  çžed ; 415 deviûs = `g_¦i¡_­³nd (deviûs, dev ); 416 `bt_·n_nÙify_cÚn_¡©e ( dev , HAL_PAN_STATE_CONNECTING ); 418 ¡©us = HAL_STATUS_SUCCESS ; 420 çžed : 421 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_PAN , HAL_OP_PAN_CONNECT , ¡©us ); 422 } } 424  $bt_·n_discÚÃù (cÚ¡ * buf , ušt16_t Ën ) 426 cÚ¡  h®_cmd_·n_discÚÃù * cmd = buf ; 427  ·n_deviû * dev ; 428 ušt8_t ¡©us ; 429 GSLi¡ * l ; 430 bdaddr_t d¡ ; 432 `DBG (""); 434 `ªdroid2bdaddr (& cmd -> bdaddr , & d¡ ); 436 l = `g_¦i¡_fšd_cu¡om ( deviûs , & d¡ , deviû_cmp ); 437 ià(! l ) { 438 ¡©us = HAL_STATUS_FAILED ; 439  çžed ; 442 dev = l -> d©a ; 444 ià( dev -> cÚn_¡©e =ð HAL_PAN_STATE_CONNECTED && dev-> £ssiÚ ) 445 `bÃp_discÚÃù ( dev -> £ssiÚ ); 447 `bt_·n_nÙify_cÚn_¡©e ( dev , HAL_PAN_STATE_DISCONNECTED ); 448 ¡©us = HAL_STATUS_SUCCESS ; 450 çžed : 451 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_PAN , HAL_OP_PAN_DISCONNECT , 452 ¡©us ); 453 } } 455  gboÞ—n $Çp_w©chdog_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 456 gpoš‹r u£r_d©a ) 458  ·n_deviû * dev = u£r_d©a ; 460 `DBG ("disconnected"); 462 `bt_·n_nÙify_cÚn_¡©e ( dev , HAL_PAN_STATE_DISCONNECTED ); 464  FALSE ; 465 } } 466  gboÞ—n $Çp_£tup_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 467 gpoš‹r u£r_d©a ) 469  ·n_deviû * dev = u£r_d©a ; 470 ušt8_t ·ck‘ [ BNEP_MTU ]; 471  bÃp_£tup_cÚn_»q * »q = (*è ·ck‘ ; 472 ušt16_t ¤c_rÞe , d¡_rÞe , r¥ = BNEP_CONN_NOT_ALLOWED ; 473  sk , n , ”r ; 475 ià( cÚd & ( G_IO_ERR | G_IO_HUP | G_IO_NVAL )) { 476 `”rÜ ("Hangup orƒrror or inval on BNEP socket"); 477  FALSE ; 480 sk = `g_io_chªÃl_unix_g‘_fd ( chª ); 483 n = `»ad ( sk , ·ck‘ , (packet)); 484 ià( n < 0) { 485 `”rÜ ("»ad(): %s(%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 486  çžed ; 490 ià( »q -> ty³ =ð BNEP_CONTROL && 491 »q -> ù¾ > BNEP_FILTER_MULT_ADDR_RSP ) { 492 `”rÜ ("cmd‚ot understood"); 493 `bÃp_£nd_ù¾_r¥ ( sk , BNEP_CONTROL , BNEP_CMD_NOT_UNDERSTOOD , 494 »q -> ù¾ ); 495  çžed ; 498 ià( »q -> ty³ !ð BNEP_CONTROL ||„eq-> ù¾ !ð BNEP_SETUP_CONN_REQ ) { 499 `”rÜ ("cmd i nÙ BNEP_SETUP_CONN_REQ %02X %02X", »q -> ty³ , 500 »q -> ù¾ ); 501  çžed ; 504 r¥ = `bÃp_£tup_decode ( »q , & d¡_rÞe , & ¤c_rÞe ); 505 ià( r¥ ) { 506 `”rÜ ("bnep_setup_decode failed"); 507  çžed ; 510 r¥ = `bÃp_£tup_chk ( d¡_rÞe , ¤c_rÞe ); 511 ià( r¥ ) { 512 `”rÜ ("benp_setup_chk failed"); 513  çžed ; 516 ”r = `Çp_ü—‹_bridge (); 517 ià( ”r < 0) { 518 `”rÜ ("·n: FažedØü—‹ bridge: % (%d)", `¡»¼Ü (- ”r ), 519 - ”r ); 520  çžed ; 523 ià( `bÃp_£rv”_add ( sk , d¡_rÞe , BNEP_BRIDGE , dev -> içû , 524 & dev -> d¡ ) < 0) { 525 `Çp_»move_bridge (); 526 `”rÜ ("server_connadd failed"); 527 r¥ = BNEP_CONN_NOT_ALLOWED ; 528  çžed ; 531 r¥ = BNEP_SUCCESS ; 532 `bÃp_£nd_ù¾_r¥ ( sk , BNEP_CONTROL , BNEP_SETUP_CONN_RSP , r¥ ); 534 dev -> w©ch = `g_io_add_w©ch ( chª , G_IO_HUP | G_IO_ERR | G_IO_NVAL , 535 Çp_w©chdog_cb , dev ); 536 `g_io_chªÃl_uÄef ( dev -> io ); 537 dev -> io = NULL ; 539 `bt_·n_nÙify_ù¾_¡©e ( dev , HAL_PAN_CTRL_ENABLED , HAL_STATUS_SUCCESS ); 540 `bt_·n_nÙify_cÚn_¡©e ( dev , HAL_PAN_STATE_CONNECTED ); 542  FALSE ; 544 çžed : 545 `bÃp_£nd_ù¾_r¥ ( sk , BNEP_CONTROL , BNEP_SETUP_CONN_RSP , r¥ ); 546 `·n_deviû_»move ( dev ); 548  FALSE ; 549 } } 551  $Çp_cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 553  ·n_deviû * dev = u£r_d©a ; 555 `DBG (""); 557 ià( ”r ) { 558 `”rÜ ("%s", ”r -> mes§ge ); 559 `bt_·n_nÙify_cÚn_¡©e ( dev , HAL_PAN_STATE_DISCONNECTED ); 563 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chª , TRUE ); 564 dev -> w©ch = `g_io_add_w©ch ( chª , 565 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 566 Çp_£tup_cb , dev ); 567 } } 569  $Çp_cÚfœm_cb ( GIOChªÃl * chª , gpoš‹r d©a ) 571  ·n_deviû * dev ; 572 bdaddr_t d¡ ; 573  add»ss [18]; 574 GE¼Ü * ”r = NULL ; 576 `DBG (""); 578 `bt_io_g‘ ( chª , & ”r , BT_IO_OPT_DEST_BDADDR , & d¡ , 579 BT_IO_OPT_DEST , add»ss , BT_IO_OPT_INVALID ); 580 ià( ”r ) { 581 `”rÜ ("%s", ”r -> mes§ge ); 582 `g_”rÜ_ä“ ( ”r ); 586 `DBG ("šcomšg cÚÃù„eque¡ from %s", add»ss ); 587 dev = `g_Ãw0 ( ·n_deviû , 1); 588 `baýy (& dev -> d¡ , &dst); 589 loÿl_rÞe = HAL_PAN_ROLE_NAP ; 590 dev -> rÞe = HAL_PAN_ROLE_PANU ; 592 `¡ºýy ( dev -> içû , BNEP_NAP_INTERFACE , 16); 593 dev -> içû [15] = '\0'; 595 dev -> io = `g_io_chªÃl_»f ( chª ); 596 `g_io_chªÃl_£t_þo£_Ú_uÄef ( dev -> io , TRUE ); 598 ià(! `bt_io_acû± ( dev -> io , Çp_cÚÃù_cb , dev, NULL , & ”r )) { 599 `”rÜ ("bt_io_acû±: %s", ”r -> mes§ge ); 600 `g_”rÜ_ä“ ( ”r ); 601  çžed ; 604 deviûs = `g_¦i¡_­³nd (deviûs, dev ); 605 `bt_·n_nÙify_cÚn_¡©e ( dev , HAL_PAN_STATE_CONNECTING ); 609 çžed : 610 `bt_·n_nÙify_cÚn_¡©e ( dev , HAL_PAN_STATE_DISCONNECTED ); 611 } } 613  $de¡roy_Çp_deviû () 615 `DBG (""); 617 `Çp_»move_bridge (); 619 ià( Çp_dev . io ) { 620 `g_io_chªÃl_shutdown ( Çp_dev . io , FALSE , NULL ); 621 `g_io_chªÃl_uÄef ( Çp_dev . io ); 622 Çp_dev . io = NULL ; 624 } } 626  $»gi¡”_Çp_£rv” () 628 GE¼Ü * g”r = NULL ; 630 `DBG (""); 632 Çp_dev . io = `bt_io_li¡’ ( NULL , Çp_cÚfœm_cb , NULL, NULL, & g”r , 633 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 634 BT_IO_OPT_PSM , BNEP_PSM , 635 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 636 BT_IO_OPT_OMTU , BNEP_MTU , 637 BT_IO_OPT_IMTU , BNEP_MTU , 638 BT_IO_OPT_INVALID ); 640 ià(! Çp_dev . io ) { 641 `de¡roy_Çp_deviû (); 642 `”rÜ ("%s", g”r -> mes§ge ); 643 `g_”rÜ_ä“ ( g”r ); 644  - EINVAL ; 648 } } 650  $bt_·n_’abË (cÚ¡ * buf , ušt16_t Ën ) 652 cÚ¡  h®_cmd_·n_’abË * cmd = buf ; 653 ušt8_t ¡©us , ¡©e ; 654  ”r ; 656 `DBG (""); 658 ià( loÿl_rÞe =ð cmd ->local_role) { 659 ¡©us = HAL_STATUS_SUCCESS ; 660  »¶y ; 664 `de¡roy_Çp_deviû (); 666  cmd -> loÿl_rÞe ) { 667  HAL_PAN_ROLE_NAP : 669  HAL_PAN_ROLE_NONE : 670 loÿl_rÞe = HAL_PAN_ROLE_NONE ; 671 ¡©us = HAL_STATUS_SUCCESS ; 672 ¡©e = HAL_PAN_CTRL_DISABLED ; 673  nÙify ; 675 ¡©us = HAL_STATUS_UNSUPPORTED ; 676  »¶y ; 679 loÿl_rÞe = cmd ->local_role; 680 ”r = `»gi¡”_Çp_£rv” (); 681 ià( ”r < 0) { 682 ¡©us = HAL_STATUS_FAILED ; 683 `de¡roy_Çp_deviû (); 684  »¶y ; 687 ¡©us = HAL_STATUS_SUCCESS ; 688 ¡©e = HAL_PAN_CTRL_ENABLED ; 690 nÙify : 691 `bt_·n_nÙify_ù¾_¡©e ( NULL , ¡©e , ¡©us ); 693 »¶y : 694 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_PAN , HAL_OP_PAN_ENABLE , ¡©us ); 695 } } 697  $bt_·n_g‘_rÞe (cÚ¡ * buf , ušt16_t Ën ) 699  h®_r¥_·n_g‘_rÞe r¥ ; 701 `DBG (""); 703 r¥ . loÿl_rÞe =†ocal_role; 704 `c_£nd_r¥_fuÎ ( h®_c , HAL_SERVICE_ID_PAN , HAL_OP_PAN_GET_ROLE , 705 ( r¥ ), &rsp, -1); 706 } } 708 cÚ¡  c_hªdËr gcmd_hªdËrs [] = { 710 { bt_·n_’abË , çl£ , ( h®_cmd_·n_’abË ) }, 712 { bt_·n_g‘_rÞe , çl£ , 0 }, 714 { bt_·n_cÚÃù , çl£ , ( h®_cmd_·n_cÚÃù ) }, 716 { bt_·n_discÚÃù , çl£ , ( h®_cmd_·n_discÚÃù ) }, 719  sdp_»cÜd_t * $·n_»cÜd () 721 sdp_li¡_t * svþass , * pf£q , * ­£q , * roÙ , * ­rÙo ; 722 uuid_t roÙ_uuid , ·n , l2ÿp , bÃp ; 723 sdp_´ofže_desc_t ´ofže [1]; 724 sdp_li¡_t * ´Ùo [2]; 725 sdp_d©a_t * v , * p ; 726 ušt16_t psm = BNEP_PSM , v”siÚ = 0x0100; 727 ušt16_t £cur™y = 0x0001, ty³ = 0xfffe; 728 ušt32_t ¿‹ = 0; 729 cÚ¡ * desc = "N‘wÜk Acûs Pošt", * Çme = "Network Service"; 730 sdp_»cÜd_t * »cÜd ; 731 ušt16_t ±y³ [] = { 0x0800, 0x0806, }; 732 sdp_d©a_t * h—d , * p£q , * d©a ; 734 »cÜd = `sdp_»cÜd_®loc (); 735 ià(! »cÜd ) 736  NULL ; 738 »cÜd -> ©Œli¡ = NULL ; 739 »cÜd -> ·‰”n = NULL ; 741 `sdp_uuid16_ü—‹ (& ·n , NAP_SVCLASS_ID ); 742 svþass = `sdp_li¡_­³nd ( NULL , & ·n ); 743 `sdp_£t_£rviû_þas£s ( »cÜd , svþass ); 745 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , NAP_PROFILE_ID ); 746 ´ofže [0]. v”siÚ = 0x0100; 747 pf£q = `sdp_li¡_­³nd ( NULL , & ´ofže [0]); 748 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 749 `sdp_£t_šfo_©Œ ( »cÜd , Çme , NULL , desc ); 750 `sdp_©Œ_add_Ãw ( »cÜd , SDP_ATTR_NET_ACCESS_TYPE , SDP_UINT16 , & ty³ ); 751 `sdp_©Œ_add_Ãw ( »cÜd , SDP_ATTR_MAX_NET_ACCESSRATE , 752 SDP_UINT32 , & ¿‹ ); 754 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 755 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 756 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 758 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 759 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp ); 760 p = `sdp_d©a_®loc ( SDP_UINT16 , & psm ); 761 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], p ); 762 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 764 `sdp_uuid16_ü—‹ (& bÃp , BNEP_UUID ); 765 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & bÃp ); 766 v = `sdp_d©a_®loc ( SDP_UINT16 , & v”siÚ ); 767 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], v ); 769 h—d = `sdp_d©a_®loc ( SDP_UINT16 , & ±y³ [0]); 770 d©a = `sdp_d©a_®loc ( SDP_UINT16 , & ±y³ [1]); 771 `sdp_£q_­³nd ( h—d , d©a ); 773 p£q = `sdp_d©a_®loc ( SDP_SEQ16 , h—d ); 774 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], p£q ); 775 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 776 ­rÙo = `sdp_li¡_­³nd ( NULL , ­£q ); 777 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 778 `sdp_add_Ïng_©Œ ( »cÜd ); 779 `sdp_©Œ_add_Ãw ( »cÜd , SDP_ATTR_SECURITY_DESC , SDP_UINT16 , & £cur™y ); 781 `sdp_d©a_ä“ ( p ); 782 `sdp_d©a_ä“ ( v ); 783 `sdp_li¡_ä“ ( ­£q , NULL ); 784 `sdp_li¡_ä“ ( roÙ , NULL ); 785 `sdp_li¡_ä“ ( ­rÙo , NULL ); 786 `sdp_li¡_ä“ ( ´Ùo [0], NULL ); 787 `sdp_li¡_ä“ ( ´Ùo [1], NULL ); 788 `sdp_li¡_ä“ ( svþass , NULL ); 789 `sdp_li¡_ä“ ( pf£q , NULL ); 791  »cÜd ; 792 } } 794 boÞ $bt_·n_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ) 796 sdp_»cÜd_t * »c ; 797  ”r ; 799 `DBG (""); 801 `baýy (& ad­‹r_addr , addr ); 803 »c = `·n_»cÜd (); 804 ià(! »c ) { 805 `”rÜ ("Failedo‡llocate PAN„ecord"); 806  çl£ ; 809 ià( `bt_ad­‹r_add_»cÜd ( »c , SVC_HINT_NETWORKING ) < 0) { 810 `”rÜ ("Failedo„egister PAN„ecord"); 811 `sdp_»cÜd_ä“ ( »c ); 812  çl£ ; 815 ”r = `bÃp_š™ (); 816 ià( ”r < 0) { 817 `”rÜ ("bnep init failed"); 818 `bt_ad­‹r_»move_»cÜd ( »c -> hªdË ); 819  çl£ ; 822 ”r = `»gi¡”_Çp_£rv” (); 823 ià( ”r < 0) { 824 `”rÜ ("Failedo„egister NAP"); 825 `bt_ad­‹r_»move_»cÜd ( »c -> hªdË ); 826 `bÃp_þ—nup (); 827  çl£ ; 830 Çp_dev . »cÜd_id = »c -> hªdË ; 832 h®_c = c ; 833 `c_»gi¡” ( h®_c , HAL_SERVICE_ID_PAN , cmd_hªdËrs , 834 `G_N_ELEMENTS ( cmd_hªdËrs )); 836  Œue ; 837 } } 839  $bt_·n_uÄegi¡” () 841 `DBG (""); 843 `g_¦i¡_ä“_fuÎ ( deviûs , ·n_deviû_ä“ ); 844 deviûs = NULL ; 845 loÿl_rÞe = HAL_PAN_ROLE_NONE ; 847 `bÃp_þ—nup (); 849 `c_uÄegi¡” ( h®_c , HAL_SERVICE_ID_PAN ); 850 h®_c = NULL ; 852 `bt_ad­‹r_»move_»cÜd ( Çp_dev . »cÜd_id ); 853 Çp_dev . »cÜd_id = 0; 854 `de¡roy_Çp_deviû (); 855 } } @android/pan.h 24 boÞ bt_·n_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ); 25  bt_·n_uÄegi¡” (); @android/sco-msg.h 24 cÚ¡  gBLUEZ_SCO_SK_PATH [] = "\0bluez_sco_socket"; 26  #SCO_SERVICE_ID 0 ) 28  #SCO_STATUS_SUCCESS IPC_STATUS_SUCCESS ) 29  #SCO_STATUS_FAILED 0x01 ) 31  #SCO_OP_STATUS IPC_OP_STATUS ) 33  #SCO_OP_GET_FD 0x01 ) 34  ssco_cmd_g‘_fd { 35 ušt8_t mbdaddr [6]; 36 } __©Œibu‹__ (( ·cked )); 38  ssco_r¥_g‘_fd { 39 ušt16_t mmtu ; 40 } __©Œibu‹__ (( ·cked )); @android/sco.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<¡dlib.h > 28  ~<¡dboÞ.h > 29  ~<”ºo.h > 31  ~ 33  ~"lib/blu‘oÙh.h " 34  ~"btio/btio.h " 35  ~"¤c/log.h " 36  ~"¤c/sh¬ed/utž.h " 38  ~"sco.h " 40  sbt_sco { 41  m»f_couÁ ; 43 GIOChªÃl * m£rv”_io ; 45 GIOChªÃl * mio ; 46 gušt mw©ch ; 48 bdaddr_t mloÿl_addr ; 49 bdaddr_t m»mÙe_addr ; 51 bt_sco_cÚfœm_func_t mcÚfœm_cb ; 52 bt_sco_cÚn_func_t mcÚÃù_cb ; 53 bt_sco_discÚn_func_t mdiscÚÃù_cb ; 57  boÞ gsco_š_u£ = çl£ ; 59  $þ—r_»mÙe_add»ss ( bt_sco * sco ) 61 `mem£t (& sco -> »mÙe_addr , 0, ( bdaddr_t )); 62 } } 64  gboÞ—n $discÚÃù_w©ch ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 65 gpoš‹r u£r_d©a ) 67  bt_sco * sco = u£r_d©a ; 69 `g_io_chªÃl_shutdown ( sco -> io , TRUE , NULL ); 70 `g_io_chªÃl_uÄef ( sco -> io ); 71 sco -> io = NULL ; 73 `DBG (""); 75 sco -> w©ch = 0; 77 ià( sco -> discÚÃù_cb ) 78 sco -> `discÚÃù_cb (&sco-> »mÙe_addr ); 80 `þ—r_»mÙe_add»ss ( sco ); 82  FALSE ; 83 } } 85  $cÚÃù_sco_cb ( GIOChªÃl * chª , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 87  bt_sco * sco = u£r_d©a ; 89 `DBG (""); 92 ià( sco -> io ) { 93 `g_io_chªÃl_uÄef ( sco -> io ); 94 sco -> io = NULL ; 97 ià( ”r ) { 98 `”rÜ ("sco: AudiØcÚÃù fažed (%s)", ”r -> mes§ge ); 104 sco -> `cÚÃù_cb ( SCO_STATUS_ERROR , &sco-> »mÙe_addr ); 106 `þ—r_»mÙe_add»ss ( sco ); 111 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chª , TRUE ); 113 sco -> io = `g_io_chªÃl_»f ( chª ); 114 sco -> w©ch = `g_io_add_w©ch ( chª , G_IO_ERR | G_IO_HUP | G_IO_NVAL , 115 discÚÃù_w©ch , sco ); 118 sco -> `cÚÃù_cb ( SCO_STATUS_OK , &sco-> »mÙe_addr ); 119 } } 121  $cÚfœm_sco_cb ( GIOChªÃl * chª , gpoš‹r u£r_d©a ) 123  add»ss [18]; 124 bdaddr_t bdaddr ; 125 GE¼Ü * ”r = NULL ; 126  bt_sco * sco = u£r_d©a ; 127 ušt16_t voiû_£‰šgs ; 129 `DBG (""); 131 `bt_io_g‘ ( chª , & ”r , 132 BT_IO_OPT_DEST , add»ss , 133 BT_IO_OPT_DEST_BDADDR , & bdaddr , 134 BT_IO_OPT_INVALID ); 135 ià( ”r ) { 136 `”rÜ ("sco:‡udiØcÚfœm fažed (%s)", ”r -> mes§ge ); 137 `g_”rÜ_ä“ ( ”r ); 138  drÝ ; 141 ià(! sco -> cÚfœm_cb || !sco-> cÚÃù_cb ) { 142 `”rÜ ("sco: Connect‡nd/or confirm callback‚ot„egistered "); 143  drÝ ; 147 ià( sco -> io ) { 148 `”rÜ ("sco: SCO is in…rogress"); 149  drÝ ; 152 ià(! sco -> `cÚfœm_cb (& bdaddr , & voiû_£‰šgs )) { 153 `”rÜ ("sco: AudiØcÚÃùiÚ from % »jeùed", add»ss ); 154  drÝ ; 157 `baýy (& sco -> »mÙe_addr , & bdaddr ); 159 `DBG ("Incomšg SCO cÚÃùiÚ from %s, voiû s‘tšg 0x%x", add»ss , 160 voiû_£‰šgs ); 162 ”r = NULL ; 163 `bt_io_£t ( chª , & ”r , BT_IO_OPT_VOICE , voiû_£‰šgs , 164 BT_IO_OPT_INVALID ); 165 ià( ”r ) { 166 `”rÜ ("sco: Could‚Ù s‘ voiû s‘tšg (%s)", ”r -> mes§ge ); 167 `g_”rÜ_ä“ ( ”r ); 168  drÝ ; 171 ià(! `bt_io_acû± ( chª , cÚÃù_sco_cb , sco , NULL , NULL)) { 172 `”rÜ ("sco: Failedo‡ccept‡udio connection"); 173  drÝ ; 176 sco -> io = `g_io_chªÃl_»f ( chª ); 180 drÝ : 181 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 182 } } 184  boÞ $sco_li¡’ ( bt_sco * sco ) 186 GE¼Ü * ”r = NULL ; 188 ià(! sco ) 189  çl£ ; 191 sco -> £rv”_io = `bt_io_li¡’ ( NULL , cÚfœm_sco_cb , sco, NULL, & ”r , 192 BT_IO_OPT_SOURCE_BDADDR , 193 & sco -> loÿl_addr , 194 BT_IO_OPT_INVALID ); 195 ià(! sco -> £rv”_io ) { 196 `”rÜ ("sco: FažedØli¡’ oÀSCO: %s", ”r -> mes§ge ); 197 `g_”rÜ_ä“ ( ”r ); 198  çl£ ; 201  Œue ; 202 } } 204  bt_sco * $bt_sco_Ãw (cÚ¡ bdaddr_t * loÿl_bdaddr ) 206  bt_sco * sco ; 208 ià(! loÿl_bdaddr ) 209  NULL ; 212 ià( sco_š_u£ ) 213  NULL ; 215 sco = `Ãw0 ( bt_sco , 1); 216 ià(! sco ) 217  NULL ; 219 `baýy (& sco -> loÿl_addr , loÿl_bdaddr ); 221 ià(! `sco_li¡’ ( sco )) { 222 `ä“ ( sco ); 223  NULL ; 226 sco_š_u£ = Œue ; 228  `bt_sco_»f ( sco ); 229 } } 231  bt_sco * $bt_sco_»f ( bt_sco * sco ) 233 ià(! sco ) 234  NULL ; 236 `__sync_ãtch_ªd_add (& sco -> »f_couÁ , 1); 238  sco ; 239 } } 241  $sco_ä“ ( bt_sco * sco ) 243 ià( sco -> £rv”_io ) { 244 `g_io_chªÃl_shutdown ( sco -> £rv”_io , TRUE , NULL ); 245 `g_io_chªÃl_uÄef ( sco -> £rv”_io ); 248 ià( sco -> io ) { 249 `g_io_chªÃl_shutdown ( sco -> io , TRUE , NULL ); 250 `g_io_chªÃl_uÄef ( sco -> io ); 253 `g_ä“ ( sco ); 254 sco_š_u£ = çl£ ; 255 } } 257  $bt_sco_uÄef ( bt_sco * sco ) 259 `DBG (""); 261 ià(! sco ) 264 ià( `__sync_sub_ªd_ãtch (& sco -> »f_couÁ , 1)) 267 `sco_ä“ ( sco ); 268 } } 270 boÞ $bt_sco_cÚÃù ( bt_sco * sco , cÚ¡ bdaddr_t * addr , 271 ušt16_t voiû_£‰šgs ) 273 GIOChªÃl * io ; 274 GE¼Ü * g”r = NULL ; 276 `DBG (""); 278 ià(! sco || !sco-> cÚÃù_cb || ! addr ) { 279 `”rÜ ("sco: Incorrect…arameters or missing connect_cb"); 280  çl£ ; 284 ià( sco -> io ) { 285 `”rÜ ("sco: Connection‡lready in…rogress"); 286  çl£ ; 289 io = `bt_io_cÚÃù ( cÚÃù_sco_cb , sco , NULL , & g”r , 290 BT_IO_OPT_SOURCE_BDADDR , & sco -> loÿl_addr , 291 BT_IO_OPT_DEST_BDADDR , addr , 292 BT_IO_OPT_VOICE , voiû_£‰šgs , 293 BT_IO_OPT_INVALID ); 295 ià(! io ) { 296 `”rÜ ("sco: uÇbËØcÚÃù‡udio: %s", g”r -> mes§ge ); 297 `g_”rÜ_ä“ ( g”r ); 298  çl£ ; 301 sco -> io = io; 303 `baýy (& sco -> »mÙe_addr , addr ); 305  Œue ; 306 } } 308  $bt_sco_discÚÃù ( bt_sco * sco ) 310 ià(! sco ) 313 ià( sco -> io ) 314 `g_io_chªÃl_shutdown ( sco -> io , TRUE , NULL ); 315 } } 317 boÞ $bt_sco_g‘_fd_ªd_mtu ( bt_sco * sco , * fd , ušt16_t * mtu ) 319 GE¼Ü * ”r ; 321 ià(! sco -> io || ! fd || ! mtu ) 322  çl£ ; 324 ”r = NULL ; 325 ià(! `bt_io_g‘ ( sco -> io , & ”r , BT_IO_OPT_MTU , mtu , BT_IO_OPT_INVALID )) { 326 `”rÜ ("UÇbËØg‘ MTU: %s\n", ”r -> mes§ge ); 327 `g_þ—r_”rÜ (& ”r ); 328  çl£ ; 331 * fd = `g_io_chªÃl_unix_g‘_fd ( sco -> io ); 333  Œue ; 334 } } 336  $bt_sco_£t_cÚfœm_cb ( bt_sco * sco , 337 bt_sco_cÚfœm_func_t func ) 339 sco -> cÚfœm_cb = func ; 340 } } 342  $bt_sco_£t_cÚÃù_cb ( bt_sco * sco , bt_sco_cÚn_func_t func ) 344 sco -> cÚÃù_cb = func ; 345 } } 347  $bt_sco_£t_discÚÃù_cb ( bt_sco * sco , 348 bt_sco_discÚn_func_t func ) 350 sco -> discÚÃù_cb = func ; 351 } } @android/sco.h 24 esco_¡©us { 25 mSCO_STATUS_OK , 26 mSCO_STATUS_ERROR , 29  gbt_sco ; 31  bt_sco * bt_sco_Ãw (cÚ¡ bdaddr_t * loÿl_bdaddr ); 33  bt_sco * bt_sco_»f (bt_scØ* sco ); 34  bt_sco_uÄef ( bt_sco * sco ); 36 boÞ bt_sco_cÚÃù ( bt_sco * sco , cÚ¡ bdaddr_t * »mÙe_addr , 37 ušt16_t voiû_£‰šgs ); 38  bt_sco_discÚÃù ( bt_sco * sco ); 39 boÞ bt_sco_g‘_fd_ªd_mtu ( bt_sco * sco , * fd , ušt16_t * mtu ); 41  $boÞ (* tbt_sco_cÚfœm_func_t è(cÚ¡ tbdaddr_t * t»mÙe_addr , 42 tušt16_t * tvoiû_£‰šgs ); 43 (* tbt_sco_cÚn_func_t è( tsco_¡©us t¡©us , 44 cÚ¡ tbdaddr_t * taddr ); 45 (* tbt_sco_discÚn_func_t è(cÚ¡ tbdaddr_t * taddr ); 47  `bt_sco_£t_cÚfœm_cb ( bt_sco * sco , 48 bt_sco_cÚfœm_func_t func ); 49  `bt_sco_£t_cÚÃù_cb ( bt_sco * sco , bt_sco_cÚn_func_t func ); 50  `bt_sco_£t_discÚÃù_cb ( bt_sco * sco , 51 bt_sco_discÚn_func_t func ); @android/scpp.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dboÞ.h > 30  ~<”ºo.h > 32  ~ 34  ~"¤c/log.h " 36  ~"lib/uuid.h " 37  ~"¤c/sh¬ed/utž.h " 38  ~"¤c/sh¬ed/queue.h " 40  ~"©Œib/©t.h " 41  ~"©Œib/g©Œib.h " 42  ~"©Œib/g©t.h " 44  ~"ªdroid/sýp.h " 46  #SCAN_INTERVAL_WIN_UUID 0x2A4F ) 47  #SCAN_REFRESH_UUID 0x2A31 ) 49  #SCAN_INTERVAL 0x0060 ) 50  #SCAN_WINDOW 0x0030 ) 51  #SERVER_REQUIRES_REFRESH 0x00 ) 53  sbt_sýp { 54  m»f_couÁ ; 55 GA‰rib * m©Œib ; 56  g©t_´im¬y * m´im¬y ; 57 ušt16_t mš‹rv® ; 58 ušt16_t mwšdow ; 59 ušt16_t miwhªdË ; 60 ušt16_t m»äesh_hªdË ; 61 gušt m»äesh_cb_id ; 62  queue * mg©t_Ý ; 65  $discov”_ch¬ ( bt_sýp * sýp , GA‰rib * ©Œib , 66 ušt16_t ¡¬t , ušt16_ˆ ’d , 67 bt_uuid_t * uuid , g©t_cb_t func , 68 gpoš‹r u£r_d©a ) 70  id ; 72 id = `g©t_discov”_ch¬ ( ©Œib , ¡¬t , ’d , uuid , func , u£r_d©a ); 74 ià( `queue_push_h—d ( sýp -> g©t_Ý , `UINT_TO_PTR ( id ))) 77 `”rÜ ("scpp: Could‚ot discover characteristic"); 78 `g_©Œib_ÿnûl ( ©Œib , id ); 79 } } 81  $discov”_desc ( bt_sýp * sýp , GA‰rib * ©Œib , 82 ušt16_t ¡¬t , ušt16_ˆ ’d , bt_uuid_t * uuid , 83 g©t_cb_t func , gpoš‹r u£r_d©a ) 85  id ; 87 id = `g©t_discov”_desc ( ©Œib , ¡¬t , ’d , uuid , func , u£r_d©a ); 89 ià( `queue_push_h—d ( sýp -> g©t_Ý , `UINT_TO_PTR ( id ))) 92 `”rÜ ("scpp: Could‚ot discover descriptor"); 93 `g_©Œib_ÿnûl ( ©Œib , id ); 94 } } 96  $wr™e_ch¬ ( bt_sýp * sÿn , GA‰rib * ©Œib , ušt16_t hªdË , 97 cÚ¡ ušt8_t * v®ue , size_t vËn , 98 GA‰ribResuÉFunc func , 99 gpoš‹r u£r_d©a ) 101  id ; 103 id = `g©t_wr™e_ch¬ ( ©Œib , hªdË , v®ue , vËn , func , u£r_d©a ); 105 ià( `queue_push_h—d ( sÿn -> g©t_Ý , `UINT_TO_PTR ( id ))) 108 `”rÜ ("scpp: Could‚ot„ead char"); 109 `g_©Œib_ÿnûl ( ©Œib , id ); 110 } } 112  $sýp_ä“ ( bt_sýp * sÿn ) 114 `bt_sýp_d‘ach ( sÿn ); 116 `g_ä“ ( sÿn -> ´im¬y ); 117 `queue_de¡roy ( sÿn -> g©t_Ý , NULL ); 118 `g_ä“ ( sÿn ); 119 } } 121  bt_sýp * $bt_sýp_Ãw (* ´im¬y ) 123  bt_sýp * sÿn ; 125 sÿn = `g_Œy_Ãw0 ( bt_sýp , 1); 126 ià(! sÿn ) 127  NULL ; 129 sÿn -> š‹rv® = SCAN_INTERVAL ; 130 sÿn -> wšdow = SCAN_WINDOW ; 132 sÿn -> g©t_Ý = `queue_Ãw (); 133 ià(! sÿn -> g©t_Ý ) { 134 `sýp_ä“ ( sÿn ); 135  NULL ; 138 ià( ´im¬y ) 139 sÿn -> ´im¬y = `g_memdup (primary, (*scan->primary)); 141  `bt_sýp_»f ( sÿn ); 142 } } 144  bt_sýp * $bt_sýp_»f ( bt_sýp * sÿn ) 146 ià(! sÿn ) 147  NULL ; 149 `__sync_ãtch_ªd_add (& sÿn -> »f_couÁ , 1); 151  sÿn ; 152 } } 154  $bt_sýp_uÄef ( bt_sýp * sÿn ) 156 ià(! sÿn ) 159 ià( `__sync_sub_ªd_ãtch (& sÿn -> »f_couÁ , 1)) 162 `sýp_ä“ ( sÿn ); 163 } } 165  $wr™e_sÿn_·¿ms ( GA‰rib * ©Œib , ušt16_t hªdË , 166 ušt16_t š‹rv® , ušt16_ˆ wšdow ) 168 ušt8_t v®ue [4]; 170 `put_Ë16 ( š‹rv® , & v®ue [0]); 171 `put_Ë16 ( wšdow , & v®ue [2]); 173 `g©t_wr™e_cmd ( ©Œib , hªdË , v®ue , (v®ue), NULL , NULL); 174 } } 176  $»äesh_v®ue_cb (cÚ¡ ušt8_t * pdu , ušt16_t Ën , 177 gpoš‹r u£r_d©a ) 179  bt_sýp * sÿn = u£r_d©a ; 181 `DBG ("S”v”„equœe »äesh: %d", pdu [3]); 183 ià( pdu [3] =ð SERVER_REQUIRES_REFRESH ) 184 `wr™e_sÿn_·¿ms ( sÿn -> ©Œib , sÿn-> iwhªdË , sÿn-> š‹rv® , 185 sÿn -> wšdow ); 186 } } 188  $ccc_wr™‹n_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 189 gušt16 ¶’ , gpoš‹r u£r_d©a ) 191  bt_sýp * sÿn = u£r_d©a ; 193 ià( ¡©us != 0) { 194 `”rÜ ("Write Scan Refresh CCC failed: %s", 195 `©t_ecode2¡r ( ¡©us )); 199 `DBG ("Scan Refresh:‚otificationƒnabled"); 201 sÿn -> »äesh_cb_id = `g_©Œib_»gi¡” (sÿn-> ©Œib , 202 ATT_OP_HANDLE_NOTIFY , sÿn -> »äesh_hªdË , 203 »äesh_v®ue_cb , sÿn , NULL ); 204 } } 206  $wr™e_ccc ( bt_sýp * sÿn , GA‰rib * ©Œib , ušt16_t hªdË , 207 * u£r_d©a ) 209 ušt8_t v®ue [2]; 211 `put_Ë16 ( GATT_CLIENT_CHARAC_CFG_NOTIF_BIT , v®ue ); 213 `wr™e_ch¬ ( sÿn , ©Œib , hªdË , v®ue , (v®ue), ccc_wr™‹n_cb , 214 u£r_d©a ); 215 } } 217  $discov”_desütÜ_cb ( ušt8_t ¡©us , GSLi¡ * descs , 218 * u£r_d©a ) 220  bt_sýp * sÿn = u£r_d©a ; 221  g©t_desc * desc ; 223 ià( ¡©us != 0) { 224 `”rÜ ("Discov” desütÜ çžed: %s", `©t_ecode2¡r ( ¡©us )); 229 desc = descs -> d©a ; 231 `wr™e_ccc ( sÿn , sÿn-> ©Œib , desc -> hªdË , scan); 232 } } 234  $»äesh_discov”ed_cb ( ušt8_t ¡©us , GSLi¡ * ch¬s , 235 * u£r_d©a ) 237  bt_sýp * sÿn = u£r_d©a ; 238  g©t_ch¬ * chr ; 239 ušt16_t ¡¬t , ’d ; 240 bt_uuid_t uuid ; 242 ià( ¡©us ) { 243 `”rÜ ("SÿÀReäesh %s", `©t_ecode2¡r ( ¡©us )); 247 ià(! ch¬s ) { 248 `DBG ("Scan Refresh‚ot supported"); 252 chr = ch¬s -> d©a ; 254 `DBG ("SÿÀReäesh hªdË: 0x%04x", chr -> v®ue_hªdË ); 256 ¡¬t = chr -> v®ue_hªdË + 1; 257 ’d = sÿn -> ´im¬y -> ¿nge .end; 259 ià( ¡¬t > ’d ) 262 sÿn -> »äesh_hªdË = chr -> v®ue_hªdË ; 264 `bt_uuid16_ü—‹ (& uuid , GATT_CLIENT_CHARAC_CFG_UUID ); 266 `discov”_desc ( sÿn , sÿn-> ©Œib , ¡¬t , ’d , & uuid , 267 discov”_desütÜ_cb , u£r_d©a ); 268 } } 270  $iwš_discov”ed_cb ( ušt8_t ¡©us , GSLi¡ * ch¬s , * u£r_d©a ) 272  bt_sýp * sÿn = u£r_d©a ; 273  g©t_ch¬ * chr ; 275 ià( ¡©us ) { 276 `”rÜ ("Discover Scan Interval Window: %s", 277 `©t_ecode2¡r ( ¡©us )); 281 chr = ch¬s -> d©a ; 282 sÿn -> iwhªdË = chr -> v®ue_hªdË ; 284 `DBG ("SÿÀIÁ”v® Wšdow hªdË: 0x%04x", sÿn -> iwhªdË ); 286 `wr™e_sÿn_·¿ms ( sÿn -> ©Œib , sÿn-> iwhªdË , sÿn-> š‹rv® , 287 sÿn -> wšdow ); 288 } } 290 boÞ $bt_sýp_©ch ( bt_sýp * sÿn , * ©Œib ) 292 bt_uuid_t iwš_uuid , »äesh_uuid ; 294 ià(! sÿn || sÿn-> ©Œib || !sÿn-> ´im¬y ) 295  çl£ ; 297 sÿn -> ©Œib = `g_©Œib_»f (attrib); 299 ià( sÿn -> iwhªdË ) 300 `wr™e_sÿn_·¿ms ( sÿn -> ©Œib , sÿn-> iwhªdË , sÿn-> š‹rv® , 301 sÿn -> wšdow ); 303 `bt_uuid16_ü—‹ (& iwš_uuid , SCAN_INTERVAL_WIN_UUID ); 304 `discov”_ch¬ ( sÿn , sÿn-> ©Œib , sÿn-> ´im¬y -> ¿nge . ¡¬t , 305 sÿn -> ´im¬y -> ¿nge . ’d , & iwš_uuid , 306 iwš_discov”ed_cb , sÿn ); 309 ià( sÿn -> »äesh_hªdË ) 310 sÿn -> »äesh_cb_id = `g_©Œib_»gi¡” (sÿn-> ©Œib , 311 ATT_OP_HANDLE_NOTIFY , sÿn -> »äesh_hªdË , 312 »äesh_v®ue_cb , sÿn , NULL ); 314 `bt_uuid16_ü—‹ (& »äesh_uuid , SCAN_REFRESH_UUID ); 315 `discov”_ch¬ ( sÿn , sÿn-> ©Œib , sÿn-> ´im¬y -> ¿nge . ¡¬t , 316 sÿn -> ´im¬y -> ¿nge . ’d , & »äesh_uuid , 317 »äesh_discov”ed_cb , sÿn ); 320  Œue ; 321 } } 323  $ÿnûl_g©t_»q (* d©a , * u£r_d©a ) 325  id = `PTR_TO_UINT ( d©a ); 326  bt_sýp * sÿn = u£r_d©a ; 328 `g_©Œib_ÿnûl ( sÿn -> ©Œib , id ); 329 } } 331  $bt_sýp_d‘ach ( bt_sýp * sÿn ) 333 ià(! sÿn || !sÿn-> ©Œib ) 336 ià( sÿn -> »äesh_cb_id > 0) { 337 `g_©Œib_uÄegi¡” ( sÿn -> ©Œib , sÿn-> »äesh_cb_id ); 338 sÿn -> »äesh_cb_id = 0; 341 `queue_fÜ—ch ( sÿn -> g©t_Ý , ÿnûl_g©t_»q , scan); 342 `g_©Œib_uÄef ( sÿn -> ©Œib ); 343 sÿn -> ©Œib = NULL ; 344 } } 346 boÞ $bt_sýp_£t_š‹rv® ( bt_sýp * sÿn , ušt16_t v®ue ) 348 ià(! sÿn ) 349  çl£ ; 353 sÿn -> š‹rv® = v®ue ; 355  Œue ; 356 } } 358 boÞ $bt_sýp_£t_wšdow ( bt_sýp * sÿn , ušt16_t v®ue ) 360 ià(! sÿn ) 361  çl£ ; 365 sÿn -> wšdow = v®ue ; 367  Œue ; 368 } } @android/scpp.h 24  gbt_sýp ; 26  bt_sýp * bt_sýp_Ãw (* ´im¬y ); 28  bt_sýp * bt_sýp_»f (bt_sý°* sÿn ); 29  bt_sýp_uÄef ( bt_sýp * sÿn ); 31 boÞ bt_sýp_©ch ( bt_sýp * sÿn , * g©t ); 32  bt_sýp_d‘ach ( bt_sýp * sÿn ); 34 boÞ bt_sýp_£t_š‹rv® ( bt_sýp * sÿn , ušt16_t v®ue ); 35 boÞ bt_sýp_£t_wšdow ( bt_sýp * sÿn , ušt16_t v®ue ); @android/socket.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~<¡dboÞ.h > 30  ~ 31  ~<”ºo.h > 33  ~"lib/blu‘oÙh.h " 34  ~"btio/btio.h " 35  ~"lib/sdp.h " 36  ~"lib/sdp_lib.h " 37  ~"¤c/sdp-þ›Á.h " 38  ~"¤c/sdpd.h " 39  ~"¤c/log.h " 41  ~"h®-msg.h " 42  ~"c-commÚ.h " 43  ~"c.h " 44  ~"utžs.h " 45  ~"blu‘oÙh.h " 46  ~"sock‘.h " 48  #RFCOMM_CHANNEL_MAX 30 ) 50  #OPP_DEFAULT_CHANNEL 9 ) 51  #HSP_AG_DEFAULT_CHANNEL 12 ) 52  #HFP_AG_DEFAULT_CHANNEL 13 ) 53  #PBAP_DEFAULT_CHANNEL 15 ) 54  #MAP_MAS_DEFAULT_CHANNEL 16 ) 56  #SVC_HINT_OBEX 0x10 ) 59  #DEFAULT_MAS_INSTANCE 0x00 ) 61  #MAP_MSG_TYPE_SMS_GSM 0x02 ) 62  #MAP_MSG_TYPE_SMS_CDMA 0x04 ) 63  #DEFAULT_MAS_MSG_TYPE ( MAP_MSG_TYPE_SMS_GSM | MAP_MSG_TYPE_SMS_CDMA ) ) 65  c * gh®_c = NULL ; 66  srfcomm_sock { 67  mchªÃl ; 68 BtIOSecLev– m£c_Ëv– ; 71  mbt_sock ; 72 gušt mbt_w©ch ; 75  mjv_sock ; 76 gušt mjv_w©ch ; 78 bdaddr_t md¡ ; 79 ušt32_t m£rviû_hªdË ; 81 ušt8_t * mbuf ; 82  mbuf_size ; 85  srfcomm_chªÃl { 86 boÞ m»£rved ; 87  rfcomm_sock * mrfsock ; 90  bdaddr_t gad­‹r_addr ; 92  ušt8_t gh®_mode = HAL_MODE_SOCKET_DEFAULT ; 94 cÚ¡ ušt8_t gz”o_uuid [16] = { 0 }; 97  GLi¡ * gcÚÃùiÚs = NULL ; 99  rfcomm_chªÃl g£rv”s [ RFCOMM_CHANNEL_MAX + 1]; 101  $rfsock_£t_bufãr ( rfcomm_sock * rfsock ) 103 sockËn_t Ën = (); 104  rcv , ¢d , size , ”r ; 106 ”r = `g‘sockÝt ( rfsock -> bt_sock , SOL_SOCKET , SO_RCVBUF , & rcv , & Ën ); 107 ià( ”r < 0) { 108  ”r = - ”ºo ; 109 `”rÜ ("g‘sockÝt(SO_RCVBUF): %s", `¡»¼Ü (- ”r )); 110  ”r ; 113 ”r = `g‘sockÝt ( rfsock -> bt_sock , SOL_SOCKET , SO_SNDBUF , & ¢d , & Ën ); 114 ià( ”r < 0) { 115  ”r = - ”ºo ; 116 `”rÜ ("g‘sockÝt(SO_SNDBUF): %s", `¡»¼Ü (- ”r )); 117  ”r ; 120 size = `MAX ( rcv , ¢d ); 122 `DBG ("S‘ bufã¸siz%d", size ); 124 rfsock -> buf = `g_m®loc ( size ); 125 rfsock -> buf_size = size ; 128 } } 130  $þ—nup_rfsock ( gpoš‹r d©a ) 132  rfcomm_sock * rfsock = d©a ; 134 `DBG ("rfsock %°bt_sock %d jv_sock %d", rfsock ,„fsock-> bt_sock , 135 rfsock -> jv_sock ); 137 ià( rfsock -> jv_sock >= 0) 138 ià( `þo£ ( rfsock -> jv_sock ) < 0) 139 `”rÜ ("þo£(èfd %d fažed: %s", rfsock -> jv_sock , 140 `¡»¼Ü ( ”ºo )); 142 ià( rfsock -> bt_sock >= 0) 143 ià( `þo£ ( rfsock -> bt_sock ) < 0) 144 `”rÜ ("þo£(èfd %d: fažed: %s", rfsock -> bt_sock , 145 `¡»¼Ü ( ”ºo )); 147 ià( rfsock -> bt_w©ch > 0) 148 ià(! `g_sourû_»move ( rfsock -> bt_w©ch )) 149 `”rÜ ("bt_watch source was‚ot found"); 151 ià( rfsock -> jv_w©ch > 0) 152 ià(! `g_sourû_»move ( rfsock -> jv_w©ch )) 153 `”rÜ ("stack_watch source was‚ot found"); 155 ià( rfsock -> £rviû_hªdË ) 156 `bt_ad­‹r_»move_»cÜd ( rfsock -> £rviû_hªdË ); 158 ià( rfsock -> buf ) 159 `g_ä“ ( rfsock -> buf ); 161 `g_ä“ ( rfsock ); 162 } } 164  rfcomm_sock * $ü—‹_rfsock ( bt_sock , * h®_sock ) 166  fds [2] = {-1, -1}; 167  rfcomm_sock * rfsock ; 169 ià( `sock‘·œ ( AF_LOCAL , SOCK_STREAM , 0, fds ) < 0) { 170 `”rÜ ("sock‘·œ(): %s", `¡»¼Ü ( ”ºo )); 171 * h®_sock = -1; 172  NULL ; 175 rfsock = `g_Ãw0 ( rfcomm_sock , 1); 176 rfsock -> jv_sock = fds [0]; 177 * h®_sock = fds [1]; 178 rfsock -> bt_sock = bt_sock; 180 `DBG ("rfsock %p", rfsock ); 182 ià( bt_sock < 0) 183  rfsock ; 185 ià( `rfsock_£t_bufãr ( rfsock ) < 0) { 186 `þ—nup_rfsock ( rfsock ); 187  NULL ; 190  rfsock ; 191 } } 193  sdp_»cÜd_t * $ü—‹_rfcomm_»cÜd ( ušt8_t chª , uuid_t * uuid , 194 cÚ¡ * svc_Çme , 195 boÞ has_obex ) 197 sdp_li¡_t * svþass_id ; 198 sdp_li¡_t * £q , * ´Ùo_£q , * pbg_£q ; 199 sdp_li¡_t * ´Ùo [3]; 200 uuid_t l2ÿp_uuid , rfcomm_uuid , obex_uuid , pbg_uuid ; 201 sdp_d©a_t * chªÃl ; 202 sdp_»cÜd_t * »cÜd ; 204 »cÜd = `sdp_»cÜd_®loc (); 205 ià(! »cÜd ) 206  NULL ; 208 »cÜd -> hªdË = `sdp_Ãxt_hªdË (); 210 svþass_id = `sdp_li¡_­³nd ( NULL , uuid ); 211 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 213 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 214 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp_uuid ); 215 £q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 217 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 218 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & rfcomm_uuid ); 219 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & chª ); 220 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 221 £q = `sdp_li¡_­³nd (£q, ´Ùo [1]); 223 ià( has_obex ) { 224 `sdp_uuid16_ü—‹ (& obex_uuid , OBEX_UUID ); 225 ´Ùo [2] = `sdp_li¡_­³nd ( NULL , & obex_uuid ); 226 £q = `sdp_li¡_­³nd (£q, ´Ùo [2]); 229 ´Ùo_£q = `sdp_li¡_­³nd ( NULL , £q ); 230 `sdp_£t_acûss_´Ùos ( »cÜd , ´Ùo_£q ); 232 `sdp_uuid16_ü—‹ (& pbg_uuid , PUBLIC_BROWSE_GROUP ); 233 pbg_£q = `sdp_li¡_­³nd ( NULL , & pbg_uuid ); 234 `sdp_£t_brow£_groups ( »cÜd , pbg_£q ); 236 ià( svc_Çme ) 237 `sdp_£t_šfo_©Œ ( »cÜd , svc_Çme , NULL , NULL); 239 `sdp_d©a_ä“ ( chªÃl ); 240 `sdp_li¡_ä“ ( ´Ùo [0], NULL ); 241 `sdp_li¡_ä“ ( ´Ùo [1], NULL ); 242 ià( has_obex ) 243 `sdp_li¡_ä“ ( ´Ùo [2], NULL ); 244 `sdp_li¡_ä“ ( £q , NULL ); 245 `sdp_li¡_ä“ ( ´Ùo_£q , NULL ); 246 `sdp_li¡_ä“ ( pbg_£q , NULL ); 247 `sdp_li¡_ä“ ( svþass_id , NULL ); 249  »cÜd ; 250 } } 252  sdp_»cÜd_t * $ü—‹_Ýp_»cÜd ( ušt8_t chª , cÚ¡ * svc_Çme ) 254 ušt8_t fÜm©s [] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff }; 255 ušt8_t dtd = SDP_UINT8 ; 256 uuid_t uuid ; 257 sdp_li¡_t * £q ; 258 sdp_´ofže_desc_t ´ofže [1]; 259 * dtds [( fÜm©s )], * v®ues [(formats)]; 260 sdp_d©a_t * fÜm©s_li¡ ; 261 sdp_»cÜd_t * »cÜd ; 262 size_t i ; 264 `sdp_uuid16_ü—‹ (& uuid , OBEX_OBJPUSH_SVCLASS_ID ); 266 »cÜd = `ü—‹_rfcomm_»cÜd ( chª , & uuid , svc_Çme , Œue ); 267 ià(! »cÜd ) 268  NULL ; 270 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , OBEX_OBJPUSH_PROFILE_ID ); 271 ´ofže [0]. v”siÚ = 0x0100; 272 £q = `sdp_li¡_­³nd ( NULL , ´ofže ); 273 `sdp_£t_´ofže_descs ( »cÜd , £q ); 275  i = 0; i < ( fÜm©s ); i++) { 276 dtds [ i ] = & dtd ; 277 v®ues [ i ] = & fÜm©s [i]; 279 fÜm©s_li¡ = `sdp_£q_®loc ( dtds , v®ues , ( fÜm©s )); 280 `sdp_©Œ_add ( »cÜd , SDP_ATTR_SUPPORTED_FORMATS_LIST , fÜm©s_li¡ ); 282 `sdp_li¡_ä“ ( £q , NULL ); 284  »cÜd ; 285 } } 287  sdp_»cÜd_t * $ü—‹_pb­_»cÜd ( ušt8_t chª , cÚ¡ * svc_Çme ) 289 sdp_li¡_t * £q ; 290 sdp_´ofže_desc_t ´ofže [1]; 291 ušt8_t fÜm©s = 0x01; 292 sdp_»cÜd_t * »cÜd ; 293 uuid_t uuid ; 295 `sdp_uuid16_ü—‹ (& uuid , PBAP_PSE_SVCLASS_ID ); 297 »cÜd = `ü—‹_rfcomm_»cÜd ( chª , & uuid , svc_Çme , Œue ); 298 ià(! »cÜd ) 299  NULL ; 301 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , PBAP_PROFILE_ID ); 302 ´ofže [0]. v”siÚ = 0x0101; 303 £q = `sdp_li¡_­³nd ( NULL , ´ofže ); 304 `sdp_£t_´ofže_descs ( »cÜd , £q ); 306 `sdp_©Œ_add_Ãw ( »cÜd , SDP_ATTR_SUPPORTED_REPOSITORIES , SDP_UINT8 , 307 & fÜm©s ); 309 `sdp_li¡_ä“ ( £q , NULL ); 311  »cÜd ; 312 } } 314  sdp_»cÜd_t * $ü—‹_mas_»cÜd ( ušt8_t chª , cÚ¡ * svc_Çme ) 316 sdp_li¡_t * £q ; 317 sdp_´ofže_desc_t ´ofže [1]; 318 ušt8_t mš¡ , mty³ ; 319 sdp_»cÜd_t * »cÜd ; 320 uuid_t uuid ; 321  út , »t ; 323  h®_mode ) { 324  HAL_MODE_SOCKET_DYNAMIC_MAP : 330 »t = `ssÿnf ( svc_Çme , "%02hhx%02hhx%n", & mš¡ , & mty³ , & út ); 331 ià( »t !ð2 || út != 4) 332  NULL ; 334 svc_Çme += 4; 336  HAL_MODE_SOCKET_DEFAULT : 337 mš¡ = DEFAULT_MAS_INSTANCE ; 338 mty³ = DEFAULT_MAS_MSG_TYPE ; 341  NULL ; 344 `sdp_uuid16_ü—‹ (& uuid , MAP_MSE_SVCLASS_ID ); 346 »cÜd = `ü—‹_rfcomm_»cÜd ( chª , & uuid , svc_Çme , Œue ); 347 ià(! »cÜd ) 348  NULL ; 350 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , MAP_PROFILE_ID ); 351 ´ofže [0]. v”siÚ = 0x0101; 352 £q = `sdp_li¡_­³nd ( NULL , ´ofže ); 353 `sdp_£t_´ofže_descs ( »cÜd , £q ); 355 `sdp_©Œ_add_Ãw ( »cÜd , SDP_ATTR_MAS_INSTANCE_ID , SDP_UINT8 , & mš¡ ); 356 `sdp_©Œ_add_Ãw ( »cÜd , SDP_ATTR_SUPPORTED_MESSAGE_TYPES , SDP_UINT8 , 357 & mty³ ); 359 `sdp_li¡_ä“ ( £q , NULL ); 361  »cÜd ; 362 } } 364  sdp_»cÜd_t * $ü—‹_¥p_»cÜd ( ušt8_t chª , cÚ¡ * svc_Çme ) 366 sdp_»cÜd_t * »cÜd ; 367 uuid_t uuid ; 369 `sdp_uuid16_ü—‹ (& uuid , SERIAL_PORT_SVCLASS_ID ); 371 »cÜd = `ü—‹_rfcomm_»cÜd ( chª , & uuid , svc_Çme , çl£ ); 372 ià(! »cÜd ) 373  NULL ; 375  »cÜd ; 376 } } 378  sdp_»cÜd_t * $ü—‹_­p_»cÜd ( ušt8_t chª , 379 cÚ¡ ušt8_t * ­p_uuid , 380 cÚ¡ * svc_Çme ) 382 sdp_»cÜd_t * »cÜd ; 383 uuid_t uuid ; 385 `sdp_uuid128_ü—‹ (& uuid , ­p_uuid ); 386 `sdp_uuid128_to_uuid (& uuid ); 388 »cÜd = `ü—‹_rfcomm_»cÜd ( chª , & uuid , svc_Çme , çl£ ); 389 ià(! »cÜd ) 390  NULL ; 392  »cÜd ; 393 } } 395 cÚ¡  s´ofže_šfo { 396 ušt8_t muuid [16]; 397 ušt8_t mchªÃl ; 398 ušt8_t msvc_hšt ; 399 BtIOSecLev– m£c_Ëv– ; 400 msdp_»cÜd_t * (* mü—‹_»cÜd )( ušt8_t mchª , cÚ¡ * msvc_Çme ); 401 } g´ofžes [] = { 403 . uuid = { 407 . gchªÃl = HSP_AG_DEFAULT_CHANNEL , 408 . gsvc_hšt = 0, 409 . g£c_Ëv– = BT_IO_SEC_MEDIUM , 410 . gü—‹_»cÜd = NULL 412 . guuid = { 416 . gchªÃl = HFP_AG_DEFAULT_CHANNEL , 417 . gsvc_hšt = 0, 418 . g£c_Ëv– = BT_IO_SEC_MEDIUM , 419 . gü—‹_»cÜd = NULL 421 . guuid = { 425 . gchªÃl = PBAP_DEFAULT_CHANNEL , 426 . gsvc_hšt = SVC_HINT_OBEX , 427 . g£c_Ëv– = BT_IO_SEC_MEDIUM , 428 . gü—‹_»cÜd = ü—‹_pb­_»cÜd 430 . guuid = { 434 . gchªÃl = OPP_DEFAULT_CHANNEL , 435 . gsvc_hšt = SVC_HINT_OBEX , 436 . g£c_Ëv– = BT_IO_SEC_LOW , 437 . gü—‹_»cÜd = ü—‹_Ýp_»cÜd 439 . guuid = { 443 . gchªÃl = MAP_MAS_DEFAULT_CHANNEL , 444 . gsvc_hšt = SVC_HINT_OBEX , 445 . g£c_Ëv– = BT_IO_SEC_MEDIUM , 446 . gü—‹_»cÜd = ü—‹_mas_»cÜd 448 . guuid = { 452 . gchªÃl = 0, 453 . gsvc_hšt = 0, 454 . g£c_Ëv– = BT_IO_SEC_MEDIUM , 455 . gü—‹_»cÜd = ü—‹_¥p_»cÜd 459  ušt32_t $sdp_£rviû_»gi¡” ( ušt8_t chªÃl , cÚ¡ ušt8_ˆ* uuid , 460 cÚ¡  ´ofže_šfo * ´ofže , 461 cÚ¡ * svc_Çme ) 463 sdp_»cÜd_t * »cÜd = NULL ; 464 ušt8_t svc_hšt = 0; 466 ià( ´ofže &&…rofže-> ü—‹_»cÜd ) { 467 »cÜd = ´ofže -> `ü—‹_»cÜd ( chªÃl , svc_Çme ); 468 svc_hšt = ´ofže ->svc_hint; 469 } ià( uuid ) { 470 »cÜd = `ü—‹_­p_»cÜd ( chªÃl , uuid , svc_Çme ); 473 ià(! »cÜd ) 476 ià( `bt_ad­‹r_add_»cÜd ( »cÜd , svc_hšt ) < 0) { 477 `”rÜ ("Failedo„egister on SDP„ecord"); 478 `sdp_»cÜd_ä“ ( »cÜd ); 482  »cÜd -> hªdË ; 483 } } 485  $bt_sock_£nd_fd ( sock_fd , cÚ¡ * buf ,  Ën ,  £nd_fd ) 487 ssize_t »t ; 488  msghdr msg ; 489  cmsghdr * cmsg ; 490  iovec iv ; 491  cmsgbuf [ `CMSG_SPACE (())]; 493 `DBG ("ËÀ%d sock_fd %d s’d_fd %d", Ën , sock_fd , £nd_fd ); 495 ià( sock_fd =ð-1 || £nd_fd == -1) 498 `mem£t (& msg , 0, (msg)); 499 `mem£t ( cmsgbuf , 0, (cmsgbuf)); 501 msg . msg_cÚŒÞ = cmsgbuf ; 502 msg . msg_cÚŒÞËn = ( cmsgbuf ); 504 cmsg = `CMSG_FIRSTHDR (& msg ); 505 cmsg -> cmsg_Ëv– = SOL_SOCKET ; 506 cmsg -> cmsg_ty³ = SCM_RIGHTS ; 507 cmsg -> cmsg_Ën = `CMSG_LEN (( £nd_fd )); 509 `memýy ( `CMSG_DATA ( cmsg ), & £nd_fd , (send_fd)); 511 iv . iov_ba£ = (*è buf ; 512 iv . iov_Ën = Ën ; 514 msg . msg_iov = & iv ; 515 msg . msg_iovËn = 1; 517 »t = `£ndmsg ( sock_fd , & msg , MSG_NOSIGNAL ); 518 ià( »t < 0) { 519 `”rÜ ("sendmsg(): sock_fd %d send_fd %d: %s", 520 sock_fd , £nd_fd , `¡»¼Ü ( ”ºo )); 521  »t ; 524  »t ; 525 } } 527 cÚ¡  ´ofže_šfo * $g‘_´ofže_by_uuid (cÚ¡ ušt8_t * uuid ) 529  i ; 531  i = 0; i < `G_N_ELEMENTS ( ´ofžes ); i++) { 532 ià(! `memcmp ( ´ofžes [ i ]. uuid , uuid, 16)) 533  & ´ofžes [ i ]; 536  NULL ; 537 } } 539  $Œy_wr™e_®l ( fd , * buf ,  Ën ) 541  £Á = 0; 543  Ën > 0) { 544  wr™‹n ; 546 wr™‹n = `wr™e ( fd , buf , Ën ); 547 ià( wr™‹n < 0) { 548 ià( ”ºo =ð EINTR ||ƒ¼nØ=ð EAGAIN ) 553 ià(! wr™‹n ) 556 Ën -ð wr™‹n ; buf +ðwr™‹n; £Á += written; 559  £Á ; 560 } } 562  gboÞ—n $jv_sock_þ›Á_ev’t_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 563 gpoš‹r d©a ) 565  rfcomm_sock * rfsock = d©a ; 566  Ën , £Á ; 568 ià( cÚd & G_IO_HUP ) { 569 `DBG ("Sock‘ %d hªg up", `g_io_chªÃl_unix_g‘_fd ( io )); 570  çž ; 573 ià( cÚd & ( G_IO_ERR | G_IO_NVAL )) { 574 `”rÜ ("Sock‘ %dƒ¼Ü", `g_io_chªÃl_unix_g‘_fd ( io )); 575  çž ; 578 Ën = `»ad ( rfsock -> jv_sock ,„fsock-> buf ,„fsock-> buf_size ); 579 ià( Ën <= 0) { 580 `”rÜ ("»ad(): %s", `¡»¼Ü ( ”ºo )); 582  TRUE ; 585 £Á = `Œy_wr™e_®l ( rfsock -> bt_sock ,„fsock-> buf , Ën ); 586 ià( £Á < 0) { 587 `”rÜ ("wr™e(): %s", `¡»¼Ü ( ”ºo )); 588  çž ; 591  TRUE ; 592 çž : 593 `DBG ("rfsock %°jv_sock %d cÚd %d", rfsock ,„fsock-> jv_sock , cÚd ); 595 cÚÃùiÚs = `g_li¡_»move (cÚÃùiÚs, rfsock ); 596 `þ—nup_rfsock ( rfsock ); 598  FALSE ; 599 } } 601  gboÞ—n $bt_sock_ev’t_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 602 gpoš‹r d©a ) 604  rfcomm_sock * rfsock = d©a ; 605  Ën , £Á ; 607 ià( cÚd & G_IO_HUP ) { 608 `DBG ("Sock‘ %d hªg up", `g_io_chªÃl_unix_g‘_fd ( io )); 609  çž ; 612 ià( cÚd & ( G_IO_ERR | G_IO_NVAL )) { 613 `”rÜ ("Sock‘ %dƒ¼Ü", `g_io_chªÃl_unix_g‘_fd ( io )); 614  çž ; 617 Ën = `»ad ( rfsock -> bt_sock ,„fsock-> buf ,„fsock-> buf_size ); 618 ià( Ën <= 0) { 619 `”rÜ ("»ad(): %s", `¡»¼Ü ( ”ºo )); 621  TRUE ; 624 £Á = `Œy_wr™e_®l ( rfsock -> jv_sock ,„fsock-> buf , Ën ); 625 ià( £Á < 0) { 626 `”rÜ ("wr™e(): %s", `¡»¼Ü ( ”ºo )); 627  çž ; 630  TRUE ; 631 çž : 632 `DBG ("rfsock %°bt_sock %d cÚd %d", rfsock ,„fsock-> bt_sock , cÚd ); 634 cÚÃùiÚs = `g_li¡_»move (cÚÃùiÚs, rfsock ); 635 `þ—nup_rfsock ( rfsock ); 637  FALSE ; 638 } } 640  boÞ $sock_£nd_acû± ( rfcomm_sock * rfsock , bdaddr_t * bdaddr , 641  fd_acû±ed ) 643  h®_sock_cÚÃù_sigÇl cmd ; 644  Ën ; 646 `DBG (""); 648 cmd . size = (cmd); 649 `bdaddr2ªdroid ( bdaddr , cmd .bdaddr); 650 cmd . chªÃl = rfsock ->channel; 651 cmd . ¡©us = 0; 653 Ën = `bt_sock_£nd_fd ( rfsock -> jv_sock , & cmd , (cmd), fd_acû±ed ); 654 ià( Ën !ð( cmd )) { 655 `”rÜ ("Error sending‡ccept signal"); 656  çl£ ; 659  Œue ; 660 } } 662  gboÞ—n $jv_sock_£rv”_ev’t_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 663 gpoš‹r d©a ) 665  rfcomm_sock * rfsock = d©a ; 667 `DBG ("rfsock %°jv_sock %d cÚd %d", rfsock ,„fsock-> jv_sock , cÚd ); 669 ià( cÚd & G_IO_NVAL ) 670  FALSE ; 672 ià( cÚd & ( G_IO_ERR | G_IO_HUP )) { 673 £rv”s [ rfsock -> chªÃl ].rfsock = NULL ; 674 `þ—nup_rfsock ( rfsock ); 677  FALSE ; 678 } } 680  $acû±_cb ( GIOChªÃl * io , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 682  rfcomm_sock * rfsock = u£r_d©a ; 683  rfcomm_sock * Ãw_rfsock ; 684 GIOChªÃl * jv_io ; 685 GE¼Ü * g”r = NULL ; 686 bdaddr_t d¡ ; 687  add»ss [18]; 688  Ãw_sock ; 689  h®_sock ; 690 gušt id ; 691 GIOCÚd™iÚ cÚd ; 693 ià( ”r ) { 694 `”rÜ ("%s", ”r -> mes§ge ); 698 `bt_io_g‘ ( io , & g”r , 699 BT_IO_OPT_DEST_BDADDR , & d¡ , 700 BT_IO_OPT_INVALID ); 701 ià( g”r ) { 702 `”rÜ ("%s", g”r -> mes§ge ); 703 `g_”rÜ_ä“ ( g”r ); 704 `g_io_chªÃl_shutdown ( io , TRUE , NULL ); 708 `ba2¡r (& d¡ , add»ss ); 709 `DBG ("Incomšg cÚÃùiÚ from % Ú chªÃÈ%d (rfsock %p)", add»ss , 710 rfsock -> chªÃl ,„fsock); 712 Ãw_sock = `g_io_chªÃl_unix_g‘_fd ( io ); 713 Ãw_rfsock = `ü—‹_rfsock ( Ãw_sock , & h®_sock ); 714 ià(! Ãw_rfsock ) { 715 `g_io_chªÃl_shutdown ( io , TRUE , NULL ); 719 `DBG ("Ãw„fsock %°bt_sock %d jv_sock %d h®_sock %d", Ãw_rfsock , 720 Ãw_rfsock -> bt_sock ,‚ew_rfsock-> jv_sock , h®_sock ); 722 ià(! `sock_£nd_acû± ( rfsock , & d¡ , h®_sock )) { 723 `þ—nup_rfsock ( Ãw_rfsock ); 727 cÚÃùiÚs = `g_li¡_­³nd (cÚÃùiÚs, Ãw_rfsock ); 730 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 731 jv_io = `g_io_chªÃl_unix_Ãw ( Ãw_rfsock -> jv_sock ); 732 id = `g_io_add_w©ch ( jv_io , cÚd , jv_sock_þ›Á_ev’t_cb , Ãw_rfsock ); 733 `g_io_chªÃl_uÄef ( jv_io ); 735 Ãw_rfsock -> jv_w©ch = id ; 738 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 739 id = `g_io_add_w©ch ( io , cÚd , bt_sock_ev’t_cb , Ãw_rfsock ); 740 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , FALSE ); 742 Ãw_rfsock -> bt_w©ch = id ; 743 } } 745  $fšd_ä“_chªÃl () 747  ch ; 750  ch = 1; ch <ð RFCOMM_CHANNEL_MAX ; ch++) { 751  rfcomm_chªÃl * ¤v = & £rv”s [ ch ]; 753 ià(! ¤v -> »£rved && srv-> rfsock =ð NULL ) 754  ch ; 758 } } 760  BtIOSecLev– $g‘_£c_Ëv– ( ušt8_t æags ) 770  æags & HAL_SOCK_FLAG_ENCRYPT ? BT_IO_SEC_MEDIUM : 771 BT_IO_SEC_LOW ; 772 } } 774  ušt8_t $rfcomm_li¡’ ( chª , cÚ¡ ušt8_t * Çme , cÚ¡ ušt8_ˆ* uuid , 775 ušt8_t æags , * h®_sock ) 777 cÚ¡  ´ofže_šfo * ´ofže ; 778  rfcomm_sock * rfsock = NULL ; 779 BtIOSecLev– £c_Ëv– ; 780 GIOChªÃl * io , * jv_io ; 781 GIOCÚd™iÚ cÚd ; 782 GE¼Ü * ”r = NULL ; 783 gušt id ; 784 uuid_t uu ; 785  uuid_¡r [32]; 787 `sdp_uuid128_ü—‹ (& uu , uuid ); 788 `sdp_uuid2¡º (& uu , uuid_¡r , (uuid_str)); 790 `DBG ("chª %d fÏg 0x%02x uuid % Çm%s", chª , æags , uuid_¡r , 791 Çme ); 793 ià((! `memcmp ( uuid , z”o_uuid , (z”o_uuid)è&& chª <= 0) || 794 ( chª > RFCOMM_CHANNEL_MAX )) { 795 `”rÜ ("Invalid„fcomm†isten…arams"); 796  HAL_STATUS_INVALID ; 799 ´ofže = `g‘_´ofže_by_uuid ( uuid ); 800 ià(! ´ofže ) { 801 £c_Ëv– = `g‘_£c_Ëv– ( æags ); 803 ià(! ´ofže -> ü—‹_»cÜd ) 804  HAL_STATUS_INVALID ; 806 chª = ´ofže -> chªÃl ; 807 £c_Ëv– = ´ofže ->sec_level; 810 ià( chª <= 0) 811 chª = `fšd_ä“_chªÃl (); 813 ià(! chª ) { 814 `”rÜ ("No free channels"); 815  HAL_STATUS_BUSY ; 818 ià( £rv”s [ chª ]. rfsock !ð NULL ) { 819 `”rÜ ("ChªÃÈ®»ady„egi¡”ed (%d)", chª ); 820  HAL_STATUS_BUSY ; 823 `DBG ("chª %d sec_Ëv– %d", chª , £c_Ëv– ); 825 rfsock = `ü—‹_rfsock (-1, h®_sock ); 826 ià(! rfsock ) 827  HAL_STATUS_FAILED ; 829 rfsock -> chªÃl = chª ; 831 io = `bt_io_li¡’ ( acû±_cb , NULL , rfsock , NULL, & ”r , 832 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 833 BT_IO_OPT_CHANNEL , chª , 834 BT_IO_OPT_SEC_LEVEL , £c_Ëv– , 835 BT_IO_OPT_INVALID ); 836 ià(! io ) { 837 `”rÜ ("Fažed†i¡’: %s", ”r -> mes§ge ); 838 `g_”rÜ_ä“ ( ”r ); 839  çžed ; 842 rfsock -> bt_sock = `g_io_chªÃl_unix_g‘_fd ( io ); 844 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , FALSE ); 845 `g_io_chªÃl_uÄef ( io ); 848 cÚd = G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 849 jv_io = `g_io_chªÃl_unix_Ãw ( rfsock -> jv_sock ); 850 id = `g_io_add_w©ch_fuÎ ( jv_io , G_PRIORITY_HIGH , cÚd , 851 jv_sock_£rv”_ev’t_cb , rfsock , 852 NULL ); 853 `g_io_chªÃl_uÄef ( jv_io ); 855 rfsock -> jv_w©ch = id ; 857 `DBG ("rfsock %°bt_sock %d jv_sock %d h®_sock %d", rfsock , 858 rfsock -> bt_sock , 859 rfsock -> jv_sock , 860 * h®_sock ); 862 ià( `wr™e ( rfsock -> jv_sock , & chª , (chan)) != (chan)) { 863 `”rÜ ("Error sending RFCOMM channel"); 864  çžed ; 867 rfsock -> £rviû_hªdË = `sdp_£rviû_»gi¡” ( chª , uuid , ´ofže , 868 Çme ); 870 £rv”s [ chª ]. rfsock =„fsock; 872  HAL_STATUS_SUCCESS ; 874 çžed : 876 `þ—nup_rfsock ( rfsock ); 877 `þo£ (* h®_sock ); 878  HAL_STATUS_FAILED ; 879 } } 881  $hªdË_li¡’ (cÚ¡ * buf , ušt16_t Ën ) 883 cÚ¡  h®_cmd_sock‘_li¡’ * cmd = buf ; 884 ušt8_t ¡©us ; 885  h®_sock ; 887  cmd -> ty³ ) { 888  HAL_SOCK_RFCOMM : 889 ¡©us = `rfcomm_li¡’ ( cmd -> chªÃl , cmd-> Çme , cmd-> uuid , 890 cmd -> æags , & h®_sock ); 892  HAL_SOCK_SCO : 893  HAL_SOCK_L2CAP : 894 ¡©us = HAL_STATUS_UNSUPPORTED ; 897 ¡©us = HAL_STATUS_INVALID ; 901 ià( ¡©us !ð HAL_STATUS_SUCCESS ) 902  çžed ; 904 `c_£nd_r¥_fuÎ ( h®_c , HAL_SERVICE_ID_SOCKET , HAL_OP_SOCKET_LISTEN , 905 0, NULL , h®_sock ); 906 `þo£ ( h®_sock ); 909 çžed : 910 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_SOCKET , HAL_OP_SOCKET_LISTEN , 911 ¡©us ); 912 } } 914  boÞ $sock_£nd_cÚÃù ( rfcomm_sock * rfsock , bdaddr_t * bdaddr ) 916  h®_sock_cÚÃù_sigÇl cmd ; 917  Ën ; 919 `DBG (""); 921 `mem£t (& cmd , 0, (cmd)); 922 cmd . size = (cmd); 923 `bdaddr2ªdroid ( bdaddr , cmd .bdaddr); 924 cmd . chªÃl = rfsock ->channel; 925 cmd . ¡©us = 0; 927 Ën = `wr™e ( rfsock -> jv_sock , & cmd , (cmd)); 928 ià( Ën < 0) { 929 `”rÜ ("%s", `¡»¼Ü ( ”ºo )); 930  çl£ ; 933 ià( Ën !ð( cmd )) { 934 `”rÜ ("Error sending connect signal"); 935  çl£ ; 938  Œue ; 939 } } 941  $cÚÃù_cb ( GIOChªÃl * io , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 943  rfcomm_sock * rfsock = u£r_d©a ; 944 bdaddr_t * d¡ = & rfsock ->dst; 945 GIOChªÃl * jv_io ; 946  add»ss [18]; 947 gušt id ; 948 GIOCÚd™iÚ cÚd ; 950 ià( ”r ) { 951 `”rÜ ("%s", ”r -> mes§ge ); 952  çž ; 955 `ba2¡r ( d¡ , add»ss ); 956 `DBG ("CÚÃùedØ% Ú chªÃÈ%d (rfsock %p)", add»ss , 957 rfsock -> chªÃl ,„fsock); 959 ià(! `sock_£nd_cÚÃù ( rfsock , d¡ )) 960  çž ; 963 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 964 jv_io = `g_io_chªÃl_unix_Ãw ( rfsock -> jv_sock ); 965 id = `g_io_add_w©ch ( jv_io , cÚd , jv_sock_þ›Á_ev’t_cb , rfsock ); 966 `g_io_chªÃl_uÄef ( jv_io ); 968 rfsock -> jv_w©ch = id ; 971 cÚd = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL ; 972 id = `g_io_add_w©ch ( io , cÚd , bt_sock_ev’t_cb , rfsock ); 973 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , FALSE ); 975 rfsock -> bt_w©ch = id ; 978 çž : 979 cÚÃùiÚs = `g_li¡_»move (cÚÃùiÚs, rfsock ); 980 `þ—nup_rfsock ( rfsock ); 981 } } 983  boÞ $do_rfcomm_cÚÃù ( rfcomm_sock * rfsock ,  chª ) 985 GIOChªÃl * io ; 986 GE¼Ü * g”r = NULL ; 988 `DBG ("rfsock %°£c_Ëv– %d chª %d", rfsock ,„fsock-> £c_Ëv– , chª ); 990 io = `bt_io_cÚÃù ( cÚÃù_cb , rfsock , NULL , & g”r , 991 BT_IO_OPT_SOURCE_BDADDR , & ad­‹r_addr , 992 BT_IO_OPT_DEST_BDADDR , & rfsock -> d¡ , 993 BT_IO_OPT_CHANNEL , chª , 994 BT_IO_OPT_SEC_LEVEL , rfsock -> £c_Ëv– , 995 BT_IO_OPT_INVALID ); 996 ià(! io ) { 997 `”rÜ ("Fažed cÚÃù: %s", g”r -> mes§ge ); 998 `g_”rÜ_ä“ ( g”r ); 999  çl£ ; 1002 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , FALSE ); 1003 `g_io_chªÃl_uÄef ( io ); 1005 ià( `wr™e ( rfsock -> jv_sock , & chª , (chan)) != (chan)) { 1006 `”rÜ ("Error sending RFCOMM channel"); 1007  çl£ ; 1010 rfsock -> bt_sock = `g_io_chªÃl_unix_g‘_fd ( io ); 1011 `rfsock_£t_bufãr ( rfsock ); 1012 rfsock -> chªÃl = chª ; 1013 cÚÃùiÚs = `g_li¡_­³nd (cÚÃùiÚs, rfsock ); 1015  Œue ; 1016 } } 1018  $sdp_£¬ch_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r d©a ) 1020  rfcomm_sock * rfsock = d©a ; 1021 sdp_li¡_t * li¡ ; 1022  chª ; 1024 `DBG (""); 1026 ià( ”r < 0) { 1027 `”rÜ ("UÇbËØg‘ SDP„ecÜd: %s", `¡»¼Ü (- ”r )); 1028  çž ; 1031 ià(! »cs || !»cs-> d©a ) { 1032 `”rÜ ("No SDP„ecords found"); 1033  çž ; 1036  li¡ = »cs ;†i¡ !ð NULL ;†i¡ =†i¡-> Ãxt ) { 1037 sdp_»cÜd_t * »c = li¡ -> d©a ; 1038 sdp_li¡_t * ´Ùos ; 1040 ià( `sdp_g‘_acûss_´Ùos ( »c , & ´Ùos ) < 0) { 1041 `”rÜ ("Unableo get…roto†ist"); 1042  çž ; 1045 chª = `sdp_g‘_´Ùo_pÜt ( ´Ùos , RFCOMM_UUID ); 1047 `sdp_li¡_fÜ—ch ( ´Ùos , ( sdp_li¡_func_t è sdp_li¡_ä“ , 1048 NULL ); 1049 `sdp_li¡_ä“ ( ´Ùos , NULL ); 1051 ià( chª ) 1055 ià( chª <= 0) { 1056 `”rÜ ("Could‚Ù g‘ RFCOMM chªÃÈ%d", chª ); 1057  çž ; 1060 `DBG ("GÙ RFCOMM chªÃÈ%d", chª ); 1062 ià( `do_rfcomm_cÚÃù ( rfsock , chª )) 1064 çž : 1065 `þ—nup_rfsock ( rfsock ); 1066 } } 1068  ušt8_t $cÚÃù_rfcomm (cÚ¡ bdaddr_t * addr ,  chª , 1069 cÚ¡ ušt8_t * uuid , ušt8_ˆ æags , 1070 * h®_sock ) 1072  rfcomm_sock * rfsock ; 1073  add»ss [18]; 1074 uuid_t uu ; 1075  uuid_¡r [32]; 1077 `sdp_uuid128_ü—‹ (& uu , uuid ); 1078 `sdp_uuid2¡º (& uu , uuid_¡r , (uuid_str)); 1079 `ba2¡r ( addr , add»ss ); 1081 `DBG ("add¸% chª %d fÏg 0x%02x uuid %s", add»ss , chª , æags , 1082 uuid_¡r ); 1084 ià((! `memcmp ( uuid , z”o_uuid , (z”o_uuid)è&& chª <= 0) || 1085 ! `bacmp ( addr , BDADDR_ANY )) { 1086 `”rÜ ("Invalid„fcomm connect…arams"); 1087  HAL_STATUS_INVALID ; 1090 rfsock = `ü—‹_rfsock (-1, h®_sock ); 1091 ià(! rfsock ) 1092  HAL_STATUS_FAILED ; 1094 `DBG ("rfsock %°jv_sock %d h®_sock %d", rfsock ,„fsock-> jv_sock , 1095 * h®_sock ); 1097 rfsock -> £c_Ëv– = `g‘_£c_Ëv– ( æags ); 1099 `baýy (& rfsock -> d¡ , addr ); 1101 ià(! `memcmp ( uuid , z”o_uuid , (zero_uuid))) { 1102 ià(! `do_rfcomm_cÚÃù ( rfsock , chª )) 1103  çžed ; 1106 ià( `bt_£¬ch_£rviû (& ad­‹r_addr , & rfsock -> d¡ , & uu , 1107 sdp_£¬ch_cb , rfsock , NULL , 0) < 0) { 1108 `”rÜ ("Failedo search SDP„ecords"); 1109  çžed ; 1113  HAL_STATUS_SUCCESS ; 1115 çžed : 1116 `þ—nup_rfsock ( rfsock ); 1117 `þo£ (* h®_sock ); 1118  HAL_STATUS_FAILED ; 1119 } } 1121  $hªdË_cÚÃù (cÚ¡ * buf , ušt16_t Ën ) 1123 cÚ¡  h®_cmd_sock‘_cÚÃù * cmd = buf ; 1124 bdaddr_t bdaddr ; 1125 ušt8_t ¡©us ; 1126  h®_sock ; 1128 `DBG (""); 1130 `ªdroid2bdaddr ( cmd -> bdaddr , &bdaddr); 1132  cmd -> ty³ ) { 1133  HAL_SOCK_RFCOMM : 1134 ¡©us = `cÚÃù_rfcomm (& bdaddr , cmd -> chªÃl , cmd-> uuid , 1135 cmd -> æags , & h®_sock ); 1137  HAL_SOCK_SCO : 1138  HAL_SOCK_L2CAP : 1139 ¡©us = HAL_STATUS_UNSUPPORTED ; 1142 ¡©us = HAL_STATUS_INVALID ; 1146 ià( ¡©us !ð HAL_STATUS_SUCCESS ) 1147  çžed ; 1149 `c_£nd_r¥_fuÎ ( h®_c , HAL_SERVICE_ID_SOCKET , HAL_OP_SOCKET_CONNECT , 1150 0, NULL , h®_sock ); 1151 `þo£ ( h®_sock ); 1154 çžed : 1155 `c_£nd_r¥ ( h®_c , HAL_SERVICE_ID_SOCKET , HAL_OP_SOCKET_CONNECT , 1156 ¡©us ); 1158 } } 1160 cÚ¡  c_hªdËr gcmd_hªdËrs [] = { 1162 { hªdË_li¡’ , çl£ , ( h®_cmd_sock‘_li¡’ ) }, 1164 { hªdË_cÚÃù , çl£ , ( h®_cmd_sock‘_cÚÃù ) }, 1167  $bt_sock‘_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ) 1169 size_t i ; 1171 `DBG (""); 1173 h®_mode = mode ; 1179  i = 0; i < `G_N_ELEMENTS ( ´ofžes ); i++) 1180 ià( ´ofžes [ i ]. chªÃl ) 1181 £rv”s [ ´ofžes [ i ]. chªÃl ]. »£rved = Œue ; 1183 `baýy (& ad­‹r_addr , addr ); 1185 h®_c = c ; 1186 `c_»gi¡” ( h®_c , HAL_SERVICE_ID_SOCKET , cmd_hªdËrs , 1187 `G_N_ELEMENTS ( cmd_hªdËrs )); 1188 } } 1190  $bt_sock‘_uÄegi¡” () 1192  ch ; 1194 `DBG (""); 1196 `g_li¡_ä“_fuÎ ( cÚÃùiÚs , þ—nup_rfsock ); 1198  ch = 0; ch <ð RFCOMM_CHANNEL_MAX ; ch++) 1199 ià( £rv”s [ ch ]. rfsock ) 1200 `þ—nup_rfsock ( £rv”s [ ch ]. rfsock ); 1202 `mem£t ( £rv”s , 0, (servers)); 1204 `c_uÄegi¡” ( h®_c , HAL_SERVICE_ID_SOCKET ); 1205 h®_c = NULL ; 1206 } } @android/socket.h 24  sh®_sock_cÚÃù_sigÇl { 25  msize ; 26 ušt8_t mbdaddr [6]; 27  mchªÃl ; 28  m¡©us ; 29 } __©Œibu‹__ (( ·cked )); 31  bt_sock‘_»gi¡” ( c *c, cÚ¡ bdaddr_t * addr , ušt8_t mode ); 32  bt_sock‘_uÄegi¡” (); @android/system-emulator.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~ 33  ~<¡ršg.h > 34  ~ 35  ~ 36  ~ 37  ~ 38  ~ 39  ~ 40  ~ 41  ~ 43  ~"mÚ™Ü/mašloÝ.h " 45  gexec_dœ [ PATH_MAX ]; 47  pid_t gd«mÚ_pid = -1; 48  pid_t g¢oÝ_pid = -1; 50  $run_v®gršd (* ´g_Çme ) 52 * ´g_¬gv [6]; 53 * ´g_’vp [3]; 55 ´g_¬gv [0] = "/usr/bin/valgrind"; 56 ´g_¬gv [1] = "--leak-check=full"; 57 ´g_¬gv [2] = "--track-origins=yes"; 58 ´g_¬gv [3] = ´g_Çme ; 59 ´g_¬gv [4] = "-d"; 60 ´g_¬gv [5] = NULL ; 62 ´g_’vp [0] = "G_SLICE=always-malloc"; 63 ´g_’vp [1] = "G_DEBUG=gc-friendly"; 64 ´g_’vp [2] = NULL ; 66 `execve ( ´g_¬gv [0],…rg_¬gv, ´g_’vp ); 67 } } 69  $run_blu‘oÙhd (* ´g_Çme ) 71 * ´g_¬gv [3]; 72 * ´g_’vp [1]; 74 ´g_¬gv [0] = ´g_Çme ; 75 ´g_¬gv [1] = "-d"; 76 ´g_¬gv [2] = NULL ; 78 ´g_’vp [0] = NULL ; 80 `execve ( ´g_¬gv [0],…rg_¬gv, ´g_’vp ); 81 } } 83  $ùl_¡¬t () 85  ´g_Çme [ PATH_MAX ]; 86 pid_t pid ; 88 `¢´štf ( ´g_Çme , Õrg_Çme), "%s/%s", exec_dœ , "bluetoothd"); 90 `´štf ("S¹šg %s\n", ´g_Çme ); 92 pid = `fÜk (); 93 ià( pid < 0) { 94 `³¼Ü ("Failedo fork‚ew…rocess"); 98 ià( pid == 0) { 99 `run_v®gršd ( ´g_Çme ); 102 `run_blu‘oÙhd ( ´g_Çme ); 103 `ex™ (0); 106 `´štf ("New…roûs %d c»©ed\n", pid ); 108 d«mÚ_pid = pid ; 109 } } 111  $¢oÝ_¡¬t () 113  ´g_Çme [ PATH_MAX ]; 114 * ´g_¬gv [3]; 115 * ´g_’vp [1]; 116 pid_t pid ; 118 `¢´štf ( ´g_Çme , Õrg_Çme), "%s/%s", exec_dœ , 121 ´g_¬gv [0] = ´g_Çme ; 122 ´g_¬gv [1] = "/tmp/btsnoop_hci.log"; 123 ´g_¬gv [2] = NULL ; 125 ´g_’vp [0] = NULL ; 127 `´štf ("S¹šg %s\n", ´g_Çme ); 129 pid = `fÜk (); 130 ià( pid < 0) { 131 `³¼Ü ("Failedo fork‚ew…rocess"); 135 ià( pid == 0) { 136 `execve ( ´g_¬gv [0],…rg_¬gv, ´g_’vp ); 137 `ex™ (0); 140 `´štf ("New…roûs %d c»©ed\n", pid ); 142 ¢oÝ_pid = pid ; 143 } } 145  $¢oÝ_¡Ý () 147 `´štf ("StÝšg %s/%s\n", exec_dœ , "bluetoothd-snoop"); 149 `kžl ( ¢oÝ_pid , SIGTERM ); 150 } } 152  $sy¡em_sock‘_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 154  buf [4096]; 155 ssize_t Ën ; 157 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 158 `mašloÝ_»move_fd ( fd ); 162 Ën = `»ad ( fd , buf , (buf)); 163 ià( Ën < 0) 166 `´štf ("Reûived %s\n", buf ); 168 ià(! `¡rcmp ( buf , "bluetooth.start=daemon")) { 169 ià( d«mÚ_pid > 0) 172 `ùl_¡¬t (); 173 } ià(! `¡rcmp ( buf , "bluetooth.start=snoop")) { 174 ià( ¢oÝ_pid > 0) 177 `¢oÝ_¡¬t (); 178 } ià(! `¡rcmp ( buf , "bluetooth.stop=snoop")) { 179 ià( ¢oÝ_pid > 0) 180 `¢oÝ_¡Ý (); 182 } } 184  $sigÇl_ÿÎback ( signum , * u£r_d©a ) 186  signum ) { 187  SIGINT : 188  SIGTERM : 189 `mašloÝ_qu™ (); 191  SIGCHLD : 193 pid_t pid ; 194  ¡©us ; 196 pid = `wa™pid ( WAIT_ANY , & ¡©us , WNOHANG ); 197 ià( pid < 0 ||…id == 0) 200 `´štf ("Process %derminated with status=%d\n", 201 pid , ¡©us ); 203 ià( pid =ð d«mÚ_pid ) 204 d«mÚ_pid = -1; 205 ià( pid =ð ¢oÝ_pid ) 206 ¢oÝ_pid = -1; 210 } } 212  $maš ( ¬gc , * ¬gv []) 214 cÚ¡  SYSTEM_SOCKET_PATH [] = "\0android_system"; 215 sig£t_t mask ; 216  sockaddr_un addr ; 217  fd ; 219 `mašloÝ_š™ (); 221 `sigem±y£t (& mask ); 222 `sigadd£t (& mask , SIGINT ); 223 `sigadd£t (& mask , SIGTERM ); 224 `sigadd£t (& mask , SIGCHLD ); 226 `mašloÝ_£t_sigÇl (& mask , sigÇl_ÿÎback , NULL , NULL); 228 `´štf ("Android sy¡emƒmuÏtÜ v” %s\n", VERSION ); 230 `¢´štf ( exec_dœ , Óxec_dœ), "%s", `dœÇme ( ¬gv [0])); 232 fd = `sock‘ ( PF_LOCAL , SOCK_DGRAM | SOCK_CLOEXEC , 0); 233 ià( fd < 0) { 234 `³¼Ü ("Failedo create system socket"); 235  EXIT_FAILURE ; 238 `mem£t (& addr , 0, (addr)); 239 addr . sun_çmžy = AF_UNIX ; 240 `memýy ( addr . sun_·th , SYSTEM_SOCKET_PATH , (SYSTEM_SOCKET_PATH)); 242 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 243 `³¼Ü ("Failedo bind system socket"); 244 `þo£ ( fd ); 245  EXIT_FAILURE ; 248 `mašloÝ_add_fd ( fd , EPOLLIN , sy¡em_sock‘_ÿÎback , NULL , NULL); 251 `umask (0177); 253  `mašloÝ_run (); 254 } } @android/system/audio.h 18 #iâdeà ANDROID_AUDIO_CORE_H 19  #ANDROID_AUDIO_CORE_H ) 21  ~<¡dboÞ.h > 22  ~<¡dšt.h > 23  ~<¡dio.h > 24  ~ 25  ~ 27 g__BEGIN_DECLS 29  #pÝcouÁ __bužtš_pÝcouÁ ) 36  #AUDIO_REMOTE_SUBMIX_DEVICE_ADDRESS "0" ) 39  taudio_io_hªdË_t ; 40  #AUDIO_IO_HANDLE_NONE 0 ) 47 mAUDIO_STREAM_DEFAULT = -1, 48 mAUDIO_STREAM_MIN = 0, 49 mAUDIO_STREAM_VOICE_CALL = 0, 50 mAUDIO_STREAM_SYSTEM = 1, 51 mAUDIO_STREAM_RING = 2, 52 mAUDIO_STREAM_MUSIC = 3, 53 mAUDIO_STREAM_ALARM = 4, 54 mAUDIO_STREAM_NOTIFICATION = 5, 55 mAUDIO_STREAM_BLUETOOTH_SCO = 6, 56 mAUDIO_STREAM_ENFORCED_AUDIBLE = 7, 59 mAUDIO_STREAM_DTMF = 8, 60 mAUDIO_STREAM_TTS = 9, 62 mAUDIO_STREAM_CNT , 63 mAUDIO_STREAM_MAX = AUDIO_STREAM_CNT - 1, 64 } taudio_¡»am_ty³_t ; 70 mAUDIO_CONTENT_TYPE_UNKNOWN = 0, 71 mAUDIO_CONTENT_TYPE_SPEECH = 1, 72 mAUDIO_CONTENT_TYPE_MUSIC = 2, 73 mAUDIO_CONTENT_TYPE_MOVIE = 3, 74 mAUDIO_CONTENT_TYPE_SONIFICATION = 4, 76 mAUDIO_CONTENT_TYPE_CNT , 77 mAUDIO_CONTENT_TYPE_MAX = AUDIO_CONTENT_TYPE_CNT - 1, 78 } taudio_cÚ‹Á_ty³_t ; 84 mAUDIO_USAGE_UNKNOWN = 0, 85 mAUDIO_USAGE_MEDIA = 1, 86 mAUDIO_USAGE_VOICE_COMMUNICATION = 2, 87 mAUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING = 3, 88 mAUDIO_USAGE_ALARM = 4, 89 mAUDIO_USAGE_NOTIFICATION = 5, 90 mAUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE = 6, 91 mAUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7, 92 mAUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8, 93 mAUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9, 94 mAUDIO_USAGE_NOTIFICATION_EVENT = 10, 95 mAUDIO_USAGE_ASSISTANCE_ACCESSIBILITY = 11, 96 mAUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12, 97 mAUDIO_USAGE_ASSISTANCE_SONIFICATION = 13, 98 mAUDIO_USAGE_GAME = 14, 100 mAUDIO_USAGE_CNT , 101 mAUDIO_USAGE_MAX = AUDIO_USAGE_CNT - 1, 102 } taudio_u§ge_t ; 104  ušt32_t taudio_æags_mask_t ; 110 mAUDIO_FLAG_AUDIBILITY_ENFORCED = 0x1, 111 mAUDIO_FLAG_SECURE = 0x2, 112 mAUDIO_FLAG_SCO = 0x4, 113 mAUDIO_FLAG_BEACON = 0x8, 114 mAUDIO_FLAG_HW_AV_SYNC = 0x10, 115 mAUDIO_FLAG_HW_HOTWORD = 0x20, 124 mAUDIO_SOURCE_DEFAULT = 0, 125 mAUDIO_SOURCE_MIC = 1, 126 mAUDIO_SOURCE_VOICE_UPLINK = 2, 127 mAUDIO_SOURCE_VOICE_DOWNLINK = 3, 128 mAUDIO_SOURCE_VOICE_CALL = 4, 129 mAUDIO_SOURCE_CAMCORDER = 5, 130 mAUDIO_SOURCE_VOICE_RECOGNITION = 6, 131 mAUDIO_SOURCE_VOICE_COMMUNICATION = 7, 132 mAUDIO_SOURCE_REMOTE_SUBMIX = 8, 136 mAUDIO_SOURCE_CNT , 137 mAUDIO_SOURCE_MAX = AUDIO_SOURCE_CNT - 1, 138 mAUDIO_SOURCE_HOTWORD = 1999, 143 } taudio_sourû_t ; 146  #AUDIO_ATTRIBUTES_TAGS_MAX_SIZE 256 ) 148 audio_cÚ‹Á_ty³_t mcÚ‹Á_ty³ ; 149 audio_u§ge_t mu§ge ; 150 audio_sourû_t msourû ; 151 audio_æags_mask_t mæags ; 152  mgs [ AUDIO_ATTRIBUTES_TAGS_MAX_SIZE ]; 153 } taudio_©Œibu‹s_t ; 162 mAUDIO_SESSION_OUTPUT_STAGE = -1, 168 mAUDIO_SESSION_OUTPUT_MIX = 0, 175 mAUDIO_SESSION_ALLOCATE = 0, 176 } taudio_£ssiÚ_t ; 179  taudio_unique_id_t ; 181  #AUDIO_UNIQUE_ID_ALLOCATE AUDIO_SESSION_ALLOCATE ) 188 mAUDIO_FORMAT_PCM_SUB_16_BIT = 0x1, 189 mAUDIO_FORMAT_PCM_SUB_8_BIT = 0x2, 190 mAUDIO_FORMAT_PCM_SUB_32_BIT = 0x3, 191 mAUDIO_FORMAT_PCM_SUB_8_24_BIT = 0x4, 192 mAUDIO_FORMAT_PCM_SUB_FLOAT = 0x5, 193 mAUDIO_FORMAT_PCM_SUB_24_BIT_PACKED = 0x6, 194 } taudio_fÜm©_pcm_sub_fmt_t ; 202 mAUDIO_FORMAT_MP3_SUB_NONE = 0x0, 203 } taudio_fÜm©_mp3_sub_fmt_t ; 209 mAUDIO_FORMAT_AMR_SUB_NONE = 0x0, 210 } taudio_fÜm©_amr_sub_fmt_t ; 214 mAUDIO_FORMAT_AAC_SUB_MAIN = 0x1, 215 mAUDIO_FORMAT_AAC_SUB_LC = 0x2, 216 mAUDIO_FORMAT_AAC_SUB_SSR = 0x4, 217 mAUDIO_FORMAT_AAC_SUB_LTP = 0x8, 218 mAUDIO_FORMAT_AAC_SUB_HE_V1 = 0x10, 219 mAUDIO_FORMAT_AAC_SUB_SCALABLE = 0x20, 220 mAUDIO_FORMAT_AAC_SUB_ERLC = 0x40, 221 mAUDIO_FORMAT_AAC_SUB_LD = 0x80, 222 mAUDIO_FORMAT_AAC_SUB_HE_V2 = 0x100, 223 mAUDIO_FORMAT_AAC_SUB_ELD = 0x200, 224 } taudio_fÜm©_¯c_sub_fmt_t ; 228 mAUDIO_FORMAT_VORBIS_SUB_NONE = 0x0, 229 } taudio_fÜm©_vÜbis_sub_fmt_t ; 241 mAUDIO_FORMAT_INVALID = 0xFFFFFFFFUL, 242 mAUDIO_FORMAT_DEFAULT = 0, 243 mAUDIO_FORMAT_PCM = 0x00000000UL, 244 mAUDIO_FORMAT_MP3 = 0x01000000UL, 245 mAUDIO_FORMAT_AMR_NB = 0x02000000UL, 246 mAUDIO_FORMAT_AMR_WB = 0x03000000UL, 247 mAUDIO_FORMAT_AAC = 0x04000000UL, 248 mAUDIO_FORMAT_HE_AAC_V1 = 0x05000000UL, 249 mAUDIO_FORMAT_HE_AAC_V2 = 0x06000000UL, 250 mAUDIO_FORMAT_VORBIS = 0x07000000UL, 251 mAUDIO_FORMAT_OPUS = 0x08000000UL, 252 mAUDIO_FORMAT_AC3 = 0x09000000UL, 253 mAUDIO_FORMAT_E_AC3 = 0x0A000000UL, 254 mAUDIO_FORMAT_MAIN_MASK = 0xFF000000UL, 255 mAUDIO_FORMAT_SUB_MASK = 0x00FFFFFFUL, 259 mAUDIO_FORMAT_PCM_16_BIT = ( AUDIO_FORMAT_PCM | 260 AUDIO_FORMAT_PCM_SUB_16_BIT ), 262 mAUDIO_FORMAT_PCM_8_BIT = ( AUDIO_FORMAT_PCM | 263 AUDIO_FORMAT_PCM_SUB_8_BIT ), 264 mAUDIO_FORMAT_PCM_32_BIT = ( AUDIO_FORMAT_PCM | 265 AUDIO_FORMAT_PCM_SUB_32_BIT ), 266 mAUDIO_FORMAT_PCM_8_24_BIT = ( AUDIO_FORMAT_PCM | 267 AUDIO_FORMAT_PCM_SUB_8_24_BIT ), 268 mAUDIO_FORMAT_PCM_FLOAT = ( AUDIO_FORMAT_PCM | 269 AUDIO_FORMAT_PCM_SUB_FLOAT ), 270 mAUDIO_FORMAT_PCM_24_BIT_PACKED = ( AUDIO_FORMAT_PCM | 271 AUDIO_FORMAT_PCM_SUB_24_BIT_PACKED ), 272 mAUDIO_FORMAT_AAC_MAIN = ( AUDIO_FORMAT_AAC | 273 AUDIO_FORMAT_AAC_SUB_MAIN ), 274 mAUDIO_FORMAT_AAC_LC = ( AUDIO_FORMAT_AAC | 275 AUDIO_FORMAT_AAC_SUB_LC ), 276 mAUDIO_FORMAT_AAC_SSR = ( AUDIO_FORMAT_AAC | 277 AUDIO_FORMAT_AAC_SUB_SSR ), 278 mAUDIO_FORMAT_AAC_LTP = ( AUDIO_FORMAT_AAC | 279 AUDIO_FORMAT_AAC_SUB_LTP ), 280 mAUDIO_FORMAT_AAC_HE_V1 = ( AUDIO_FORMAT_AAC | 281 AUDIO_FORMAT_AAC_SUB_HE_V1 ), 282 mAUDIO_FORMAT_AAC_SCALABLE = ( AUDIO_FORMAT_AAC | 283 AUDIO_FORMAT_AAC_SUB_SCALABLE ), 284 mAUDIO_FORMAT_AAC_ERLC = ( AUDIO_FORMAT_AAC | 285 AUDIO_FORMAT_AAC_SUB_ERLC ), 286 mAUDIO_FORMAT_AAC_LD = ( AUDIO_FORMAT_AAC | 287 AUDIO_FORMAT_AAC_SUB_LD ), 288 mAUDIO_FORMAT_AAC_HE_V2 = ( AUDIO_FORMAT_AAC | 289 AUDIO_FORMAT_AAC_SUB_HE_V2 ), 290 mAUDIO_FORMAT_AAC_ELD = ( AUDIO_FORMAT_AAC | 291 AUDIO_FORMAT_AAC_SUB_ELD ), 292 } taudio_fÜm©_t ; 299 mAUDIO_CHANNEL_NONE = 0x0, 300 mAUDIO_CHANNEL_INVALID = 0xC0000000, 308 mAUDIO_CHANNEL_OUT_FRONT_LEFT = 0x1, 309 mAUDIO_CHANNEL_OUT_FRONT_RIGHT = 0x2, 310 mAUDIO_CHANNEL_OUT_FRONT_CENTER = 0x4, 311 mAUDIO_CHANNEL_OUT_LOW_FREQUENCY = 0x8, 312 mAUDIO_CHANNEL_OUT_BACK_LEFT = 0x10, 313 mAUDIO_CHANNEL_OUT_BACK_RIGHT = 0x20, 314 mAUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 0x40, 315 mAUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 0x80, 316 mAUDIO_CHANNEL_OUT_BACK_CENTER = 0x100, 317 mAUDIO_CHANNEL_OUT_SIDE_LEFT = 0x200, 318 mAUDIO_CHANNEL_OUT_SIDE_RIGHT = 0x400, 319 mAUDIO_CHANNEL_OUT_TOP_CENTER = 0x800, 320 mAUDIO_CHANNEL_OUT_TOP_FRONT_LEFT = 0x1000, 321 mAUDIO_CHANNEL_OUT_TOP_FRONT_CENTER = 0x2000, 322 mAUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT = 0x4000, 323 mAUDIO_CHANNEL_OUT_TOP_BACK_LEFT = 0x8000, 324 mAUDIO_CHANNEL_OUT_TOP_BACK_CENTER = 0x10000, 325 mAUDIO_CHANNEL_OUT_TOP_BACK_RIGHT = 0x20000, 329 mAUDIO_CHANNEL_OUT_MONO = AUDIO_CHANNEL_OUT_FRONT_LEFT , 330 mAUDIO_CHANNEL_OUT_STEREO = ( AUDIO_CHANNEL_OUT_FRONT_LEFT | 331 AUDIO_CHANNEL_OUT_FRONT_RIGHT ), 332 mAUDIO_CHANNEL_OUT_QUAD = ( AUDIO_CHANNEL_OUT_FRONT_LEFT | 333 AUDIO_CHANNEL_OUT_FRONT_RIGHT | 334 AUDIO_CHANNEL_OUT_BACK_LEFT | 335 AUDIO_CHANNEL_OUT_BACK_RIGHT ), 336 mAUDIO_CHANNEL_OUT_QUAD_BACK = AUDIO_CHANNEL_OUT_QUAD , 338 mAUDIO_CHANNEL_OUT_QUAD_SIDE = ( AUDIO_CHANNEL_OUT_FRONT_LEFT | 339 AUDIO_CHANNEL_OUT_FRONT_RIGHT | 340 AUDIO_CHANNEL_OUT_SIDE_LEFT | 341 AUDIO_CHANNEL_OUT_SIDE_RIGHT ), 342 mAUDIO_CHANNEL_OUT_5POINT1 = ( AUDIO_CHANNEL_OUT_FRONT_LEFT | 343 AUDIO_CHANNEL_OUT_FRONT_RIGHT | 344 AUDIO_CHANNEL_OUT_FRONT_CENTER | 345 AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 346 AUDIO_CHANNEL_OUT_BACK_LEFT | 347 AUDIO_CHANNEL_OUT_BACK_RIGHT ), 348 mAUDIO_CHANNEL_OUT_5POINT1_BACK = AUDIO_CHANNEL_OUT_5POINT1 , 350 mAUDIO_CHANNEL_OUT_5POINT1_SIDE = ( AUDIO_CHANNEL_OUT_FRONT_LEFT | 351 AUDIO_CHANNEL_OUT_FRONT_RIGHT | 352 AUDIO_CHANNEL_OUT_FRONT_CENTER | 353 AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 354 AUDIO_CHANNEL_OUT_SIDE_LEFT | 355 AUDIO_CHANNEL_OUT_SIDE_RIGHT ), 357 mAUDIO_CHANNEL_OUT_7POINT1 = ( AUDIO_CHANNEL_OUT_FRONT_LEFT | 358 AUDIO_CHANNEL_OUT_FRONT_RIGHT | 359 AUDIO_CHANNEL_OUT_FRONT_CENTER | 360 AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 361 AUDIO_CHANNEL_OUT_BACK_LEFT | 362 AUDIO_CHANNEL_OUT_BACK_RIGHT | 363 AUDIO_CHANNEL_OUT_SIDE_LEFT | 364 AUDIO_CHANNEL_OUT_SIDE_RIGHT ), 365 mAUDIO_CHANNEL_OUT_ALL = ( AUDIO_CHANNEL_OUT_FRONT_LEFT | 366 AUDIO_CHANNEL_OUT_FRONT_RIGHT | 367 AUDIO_CHANNEL_OUT_FRONT_CENTER | 368 AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 369 AUDIO_CHANNEL_OUT_BACK_LEFT | 370 AUDIO_CHANNEL_OUT_BACK_RIGHT | 371 AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER | 372 AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER | 373 AUDIO_CHANNEL_OUT_BACK_CENTER | 374 AUDIO_CHANNEL_OUT_SIDE_LEFT | 375 AUDIO_CHANNEL_OUT_SIDE_RIGHT | 376 AUDIO_CHANNEL_OUT_TOP_CENTER | 377 AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT | 378 AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER | 379 AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT | 380 AUDIO_CHANNEL_OUT_TOP_BACK_LEFT | 381 AUDIO_CHANNEL_OUT_TOP_BACK_CENTER | 382 AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT ), 387 mAUDIO_CHANNEL_IN_LEFT = 0x4, 388 mAUDIO_CHANNEL_IN_RIGHT = 0x8, 389 mAUDIO_CHANNEL_IN_FRONT = 0x10, 390 mAUDIO_CHANNEL_IN_BACK = 0x20, 391 mAUDIO_CHANNEL_IN_LEFT_PROCESSED = 0x40, 392 mAUDIO_CHANNEL_IN_RIGHT_PROCESSED = 0x80, 393 mAUDIO_CHANNEL_IN_FRONT_PROCESSED = 0x100, 394 mAUDIO_CHANNEL_IN_BACK_PROCESSED = 0x200, 395 mAUDIO_CHANNEL_IN_PRESSURE = 0x400, 396 mAUDIO_CHANNEL_IN_X_AXIS = 0x800, 397 mAUDIO_CHANNEL_IN_Y_AXIS = 0x1000, 398 mAUDIO_CHANNEL_IN_Z_AXIS = 0x2000, 399 mAUDIO_CHANNEL_IN_VOICE_UPLINK = 0x4000, 400 mAUDIO_CHANNEL_IN_VOICE_DNLINK = 0x8000, 404 mAUDIO_CHANNEL_IN_MONO = AUDIO_CHANNEL_IN_FRONT , 405 mAUDIO_CHANNEL_IN_STEREO = ( AUDIO_CHANNEL_IN_LEFT | AUDIO_CHANNEL_IN_RIGHT ), 406 mAUDIO_CHANNEL_IN_FRONT_BACK = ( AUDIO_CHANNEL_IN_FRONT | AUDIO_CHANNEL_IN_BACK ), 407 mAUDIO_CHANNEL_IN_ALL = ( AUDIO_CHANNEL_IN_LEFT | 408 AUDIO_CHANNEL_IN_RIGHT | 409 AUDIO_CHANNEL_IN_FRONT | 410 AUDIO_CHANNEL_IN_BACK | 411 AUDIO_CHANNEL_IN_LEFT_PROCESSED | 412 AUDIO_CHANNEL_IN_RIGHT_PROCESSED | 413 AUDIO_CHANNEL_IN_FRONT_PROCESSED | 414 AUDIO_CHANNEL_IN_BACK_PROCESSED | 415 AUDIO_CHANNEL_IN_PRESSURE | 416 AUDIO_CHANNEL_IN_X_AXIS | 417 AUDIO_CHANNEL_IN_Y_AXIS | 418 AUDIO_CHANNEL_IN_Z_AXIS | 419 AUDIO_CHANNEL_IN_VOICE_UPLINK | 420 AUDIO_CHANNEL_IN_VOICE_DNLINK ), 454  ušt32_t taudio_chªÃl_mask_t ; 457  #AUDIO_CHANNEL_COUNT_MAX 30 ) 460  #AUDIO_CHANNEL_REPRESENTATION_LOG2 2 ) 464 mAUDIO_CHANNEL_REPRESENTATION_POSITION = 0, 466 mAUDIO_CHANNEL_REPRESENTATION_INDEX = 2, 468 } taudio_chªÃl_»´e£Á©iÚ_t ; 471  šlše ušt32_t $audio_chªÃl_mask_g‘_b™s ( audio_chªÃl_mask_t chªÃl ) 473  chªÃl & ((1 << AUDIO_CHANNEL_COUNT_MAX ) - 1); 474 } } 477  šlše audio_chªÃl_»´e£Á©iÚ_t $audio_chªÃl_mask_g‘_»´e£Á©iÚ ( 478 audio_chªÃl_mask_t chªÃl ) 481  ( audio_chªÃl_»´e£Á©iÚ_t ) 482 (( chªÃl >> AUDIO_CHANNEL_COUNT_MAX è& ((1 << AUDIO_CHANNEL_REPRESENTATION_LOG2 ) - 1)); 483 } } 492  šlše boÞ $audio_chªÃl_mask_is_v®id ( audio_chªÃl_mask_t chªÃl ) 494 ušt32_t b™s = `audio_chªÃl_mask_g‘_b™s ( chªÃl ); 495 audio_chªÃl_»´e£Á©iÚ_t »´e£Á©iÚ = `audio_chªÃl_mask_g‘_»´e£Á©iÚ ( chªÃl ); 496  »´e£Á©iÚ ) { 497  AUDIO_CHANNEL_REPRESENTATION_POSITION : 498  AUDIO_CHANNEL_REPRESENTATION_INDEX : 501 b™s = 0; 504  b™s != 0; 505 } } 508  šlše audio_chªÃl_mask_t $audio_chªÃl_mask_äom_»´e£Á©iÚ_ªd_b™s ( 509 audio_chªÃl_»´e£Á©iÚ_t »´e£Á©iÚ , ušt32_t b™s ) 511  ( audio_chªÃl_mask_t è(( »´e£Á©iÚ << AUDIO_CHANNEL_COUNT_MAX è| b™s ); 512 } } 524 mAUDIO_INTERLEAVE_LEFT = 0, 525 mAUDIO_INTERLEAVE_RIGHT = 1, 529 mAUDIO_MODE_INVALID = -2, 530 mAUDIO_MODE_CURRENT = -1, 531 mAUDIO_MODE_NORMAL = 0, 532 mAUDIO_MODE_RINGTONE = 1, 533 mAUDIO_MODE_IN_CALL = 2, 534 mAUDIO_MODE_IN_COMMUNICATION = 3, 536 mAUDIO_MODE_CNT , 537 mAUDIO_MODE_MAX = AUDIO_MODE_CNT - 1, 538 } taudio_mode_t ; 542 mAUDIO_IN_ACOUSTICS_NONE = 0, 543 mAUDIO_IN_ACOUSTICS_AGC_ENABLE = 0x0001, 544 mAUDIO_IN_ACOUSTICS_AGC_DISABLE = 0, 545 mAUDIO_IN_ACOUSTICS_NS_ENABLE = 0x0002, 546 mAUDIO_IN_ACOUSTICS_NS_DISABLE = 0, 547 mAUDIO_IN_ACOUSTICS_TX_IIR_ENABLE = 0x0004, 548 mAUDIO_IN_ACOUSTICS_TX_DISABLE = 0, 549 } taudio_š_acou¡ics_t ; 552 mAUDIO_DEVICE_NONE = 0x0, 554 mAUDIO_DEVICE_BIT_IN = 0x80000000, 555 mAUDIO_DEVICE_BIT_DEFAULT = 0x40000000, 557 mAUDIO_DEVICE_OUT_EARPIECE = 0x1, 558 mAUDIO_DEVICE_OUT_SPEAKER = 0x2, 559 mAUDIO_DEVICE_OUT_WIRED_HEADSET = 0x4, 560 mAUDIO_DEVICE_OUT_WIRED_HEADPHONE = 0x8, 561 mAUDIO_DEVICE_OUT_BLUETOOTH_SCO = 0x10, 562 mAUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20, 563 mAUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40, 564 mAUDIO_DEVICE_OUT_BLUETOOTH_A2DP = 0x80, 565 mAUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100, 566 mAUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200, 567 mAUDIO_DEVICE_OUT_AUX_DIGITAL = 0x400, 568 mAUDIO_DEVICE_OUT_HDMI = AUDIO_DEVICE_OUT_AUX_DIGITAL , 570 mAUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800, 571 mAUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000, 573 mAUDIO_DEVICE_OUT_USB_ACCESSORY = 0x2000, 575 mAUDIO_DEVICE_OUT_USB_DEVICE = 0x4000, 576 mAUDIO_DEVICE_OUT_REMOTE_SUBMIX = 0x8000, 578 mAUDIO_DEVICE_OUT_TELEPHONY_TX = 0x10000, 580 mAUDIO_DEVICE_OUT_LINE = 0x20000, 582 mAUDIO_DEVICE_OUT_HDMI_ARC = 0x40000, 584 mAUDIO_DEVICE_OUT_SPDIF = 0x80000, 586 mAUDIO_DEVICE_OUT_FM = 0x100000, 588 mAUDIO_DEVICE_OUT_AUX_LINE = 0x200000, 590 mAUDIO_DEVICE_OUT_SPEAKER_SAFE = 0x400000, 591 mAUDIO_DEVICE_OUT_DEFAULT = AUDIO_DEVICE_BIT_DEFAULT , 592 mAUDIO_DEVICE_OUT_ALL = ( AUDIO_DEVICE_OUT_EARPIECE | 593 AUDIO_DEVICE_OUT_SPEAKER | 594 AUDIO_DEVICE_OUT_WIRED_HEADSET | 595 AUDIO_DEVICE_OUT_WIRED_HEADPHONE | 596 AUDIO_DEVICE_OUT_BLUETOOTH_SCO | 597 AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 598 AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT | 599 AUDIO_DEVICE_OUT_BLUETOOTH_A2DP | 600 AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 601 AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | 602 AUDIO_DEVICE_OUT_HDMI | 603 AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET | 604 AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET | 605 AUDIO_DEVICE_OUT_USB_ACCESSORY | 606 AUDIO_DEVICE_OUT_USB_DEVICE | 607 AUDIO_DEVICE_OUT_REMOTE_SUBMIX | 608 AUDIO_DEVICE_OUT_TELEPHONY_TX | 609 AUDIO_DEVICE_OUT_LINE | 610 AUDIO_DEVICE_OUT_HDMI_ARC | 611 AUDIO_DEVICE_OUT_SPDIF | 612 AUDIO_DEVICE_OUT_FM | 613 AUDIO_DEVICE_OUT_AUX_LINE | 614 AUDIO_DEVICE_OUT_SPEAKER_SAFE | 615 AUDIO_DEVICE_OUT_DEFAULT ), 616 mAUDIO_DEVICE_OUT_ALL_A2DP = ( AUDIO_DEVICE_OUT_BLUETOOTH_A2DP | 617 AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 618 AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER ), 619 mAUDIO_DEVICE_OUT_ALL_SCO = ( AUDIO_DEVICE_OUT_BLUETOOTH_SCO | 620 AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 621 AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT ), 622 mAUDIO_DEVICE_OUT_ALL_USB = ( AUDIO_DEVICE_OUT_USB_ACCESSORY | 623 AUDIO_DEVICE_OUT_USB_DEVICE ), 626 mAUDIO_DEVICE_IN_COMMUNICATION = AUDIO_DEVICE_BIT_IN | 0x1, 627 mAUDIO_DEVICE_IN_AMBIENT = AUDIO_DEVICE_BIT_IN | 0x2, 628 mAUDIO_DEVICE_IN_BUILTIN_MIC = AUDIO_DEVICE_BIT_IN | 0x4, 629 mAUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET = AUDIO_DEVICE_BIT_IN | 0x8, 630 mAUDIO_DEVICE_IN_WIRED_HEADSET = AUDIO_DEVICE_BIT_IN | 0x10, 631 mAUDIO_DEVICE_IN_AUX_DIGITAL = AUDIO_DEVICE_BIT_IN | 0x20, 632 mAUDIO_DEVICE_IN_HDMI = AUDIO_DEVICE_IN_AUX_DIGITAL , 634 mAUDIO_DEVICE_IN_VOICE_CALL = AUDIO_DEVICE_BIT_IN | 0x40, 635 mAUDIO_DEVICE_IN_TELEPHONY_RX = AUDIO_DEVICE_IN_VOICE_CALL , 636 mAUDIO_DEVICE_IN_BACK_MIC = AUDIO_DEVICE_BIT_IN | 0x80, 637 mAUDIO_DEVICE_IN_REMOTE_SUBMIX = AUDIO_DEVICE_BIT_IN | 0x100, 638 mAUDIO_DEVICE_IN_ANLG_DOCK_HEADSET = AUDIO_DEVICE_BIT_IN | 0x200, 639 mAUDIO_DEVICE_IN_DGTL_DOCK_HEADSET = AUDIO_DEVICE_BIT_IN | 0x400, 640 mAUDIO_DEVICE_IN_USB_ACCESSORY = AUDIO_DEVICE_BIT_IN | 0x800, 641 mAUDIO_DEVICE_IN_USB_DEVICE = AUDIO_DEVICE_BIT_IN | 0x1000, 643 mAUDIO_DEVICE_IN_FM_TUNER = AUDIO_DEVICE_BIT_IN | 0x2000, 645 mAUDIO_DEVICE_IN_TV_TUNER = AUDIO_DEVICE_BIT_IN | 0x4000, 647 mAUDIO_DEVICE_IN_LINE = AUDIO_DEVICE_BIT_IN | 0x8000, 649 mAUDIO_DEVICE_IN_SPDIF = AUDIO_DEVICE_BIT_IN | 0x10000, 650 mAUDIO_DEVICE_IN_BLUETOOTH_A2DP = AUDIO_DEVICE_BIT_IN | 0x20000, 651 mAUDIO_DEVICE_IN_LOOPBACK = AUDIO_DEVICE_BIT_IN | 0x40000, 652 mAUDIO_DEVICE_IN_DEFAULT = AUDIO_DEVICE_BIT_IN | AUDIO_DEVICE_BIT_DEFAULT , 654 mAUDIO_DEVICE_IN_ALL = ( AUDIO_DEVICE_IN_COMMUNICATION | 655 AUDIO_DEVICE_IN_AMBIENT | 656 AUDIO_DEVICE_IN_BUILTIN_MIC | 657 AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET | 658 AUDIO_DEVICE_IN_WIRED_HEADSET | 659 AUDIO_DEVICE_IN_HDMI | 660 AUDIO_DEVICE_IN_TELEPHONY_RX | 661 AUDIO_DEVICE_IN_BACK_MIC | 662 AUDIO_DEVICE_IN_REMOTE_SUBMIX | 663 AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET | 664 AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET | 665 AUDIO_DEVICE_IN_USB_ACCESSORY | 666 AUDIO_DEVICE_IN_USB_DEVICE | 667 AUDIO_DEVICE_IN_FM_TUNER | 668 AUDIO_DEVICE_IN_TV_TUNER | 669 AUDIO_DEVICE_IN_LINE | 670 AUDIO_DEVICE_IN_SPDIF | 671 AUDIO_DEVICE_IN_BLUETOOTH_A2DP | 672 AUDIO_DEVICE_IN_LOOPBACK | 673 AUDIO_DEVICE_IN_DEFAULT ), 674 mAUDIO_DEVICE_IN_ALL_SCO = AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET , 675 mAUDIO_DEVICE_IN_ALL_USB = ( AUDIO_DEVICE_IN_USB_ACCESSORY | 676 AUDIO_DEVICE_IN_USB_DEVICE ), 679  ušt32_t taudio_deviûs_t ; 691 mAUDIO_OUTPUT_FLAG_NONE = 0x0, 692 mAUDIO_OUTPUT_FLAG_DIRECT = 0x1, 694 mAUDIO_OUTPUT_FLAG_PRIMARY = 0x2, 699 mAUDIO_OUTPUT_FLAG_FAST = 0x4, 701 mAUDIO_OUTPUT_FLAG_DEEP_BUFFER = 0x8, 702 mAUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD = 0x10, 704 mAUDIO_OUTPUT_FLAG_NON_BLOCKING = 0x20, 705 mAUDIO_OUTPUT_FLAG_HW_AV_SYNC = 0x40 706 } taudio_ouut_æags_t ; 714 mAUDIO_INPUT_FLAG_NONE = 0x0, 715 mAUDIO_INPUT_FLAG_FAST = 0x1, 716 mAUDIO_INPUT_FLAG_HW_HOTWORD = 0x2, 717 } taudio_šput_æags_t ; 725 ušt16_t mv”siÚ ; 726 ušt16_t msize ; 727 ušt32_t m§m¶e_¿‹ ; 728 audio_chªÃl_mask_t mchªÃl_mask ; 729 audio_fÜm©_t mfÜm© ; 730 audio_¡»am_ty³_t m¡»am_ty³ ; 731 ušt32_t mb™_¿‹ ; 732 št64_t mdu¿tiÚ_us ; 733 boÞ mhas_video ; 734 boÞ mis_¡»amšg ; 735 } taudio_ofæßd_šfo_t ; 737  #AUDIO_MAKE_OFFLOAD_INFO_VERSION ( maj , mš ) \ 738 (((( maj è& 0xffè<< 8è| (( mš è& 0xff)) ) 740  #AUDIO_OFFLOAD_INFO_VERSION_0_1 `AUDIO_MAKE_OFFLOAD_INFO_VERSION (0, 1) ) 741  #AUDIO_OFFLOAD_INFO_VERSION_CURRENT AUDIO_OFFLOAD_INFO_VERSION_0_1 ) 743 cÚ¡ audio_ofæßd_šfo_t gAUDIO_INFO_INITIALIZER = { 744 v”siÚ : AUDIO_OFFLOAD_INFO_VERSION_CURRENT , 745 size : ( audio_ofæßd_šfo_t ), 746 §m¶e_¿‹ : 0, 747 chªÃl_mask : 0, 748 fÜm© : AUDIO_FORMAT_DEFAULT , 749 ¡»am_ty³ : AUDIO_STREAM_VOICE_CALL , 750 b™_¿‹ : 0, 751 du¿tiÚ_us : 0, 752 has_video : çl£ , 753 is_¡»amšg : çl£ 760  saudio_cÚfig { 761 ušt32_t m§m¶e_¿‹ ; 762 audio_chªÃl_mask_t mchªÃl_mask ; 763 audio_fÜm©_t mfÜm© ; 764 audio_ofæßd_šfo_t mofæßd_šfo ; 765 size_t mäame_couÁ ; 767  audio_cÚfig taudio_cÚfig_t ; 769 cÚ¡ audio_cÚfig_t gAUDIO_CONFIG_INITIALIZER = { 770 §m¶e_¿‹ : 0, 771 chªÃl_mask : AUDIO_CHANNEL_NONE , 772 fÜm© : AUDIO_FORMAT_DEFAULT , 773 ofæßd_šfo : { 774 v”siÚ : AUDIO_OFFLOAD_INFO_VERSION_CURRENT , 775 size : ( audio_ofæßd_šfo_t ), 776 §m¶e_¿‹ : 0, 777 chªÃl_mask : 0, 778 fÜm© : AUDIO_FORMAT_DEFAULT , 779 ¡»am_ty³ : AUDIO_STREAM_VOICE_CALL , 780 b™_¿‹ : 0, 781 du¿tiÚ_us : 0, 782 has_video : çl£ , 783 is_¡»amšg : çl£ 785 äame_couÁ : 0, 790  taudio_moduË_hªdË_t ; 802  #AUDIO_GAIN_MODE_JOINT 0x1 ) 803  #AUDIO_GAIN_MODE_CHANNELS 0x2 ) 804  #AUDIO_GAIN_MODE_RAMP 0x4 ) 806  ušt32_t taudio_gaš_mode_t ; 811  saudio_gaš { 812 audio_gaš_mode_t mmode ; 813 audio_chªÃl_mask_t mchªÃl_mask ; 815  mmš_v®ue ; 816  mmax_v®ue ; 817  mdeçuÉ_v®ue ; 818  m¡•_v®ue ; 819  mmš_¿mp_ms ; 820  mmax_¿mp_ms ; 825  saudio_gaš_cÚfig { 826  mšdex ; 828 audio_gaš_mode_t mmode ; 829 audio_chªÃl_mask_t mchªÃl_mask ; 831  mv®ues [( audio_chªÃl_mask_t ) * 8]; 835  m¿mp_du¿tiÚ_ms ; 850 mAUDIO_PORT_ROLE_NONE , 851 mAUDIO_PORT_ROLE_SOURCE , 852 mAUDIO_PORT_ROLE_SINK , 853 } taudio_pÜt_rÞe_t ; 859 mAUDIO_PORT_TYPE_NONE , 860 mAUDIO_PORT_TYPE_DEVICE , 861 mAUDIO_PORT_TYPE_MIX , 862 mAUDIO_PORT_TYPE_SESSION , 863 } taudio_pÜt_ty³_t ; 866  taudio_pÜt_hªdË_t ; 867  #AUDIO_PORT_HANDLE_NONE 0 ) 871  #AUDIO_DEVICE_MAX_ADDRESS_LEN 32 ) 875  saudio_pÜt_cÚfig_deviû_ext { 876 audio_moduË_hªdË_t mhw_moduË ; 877 audio_deviûs_t mty³ ; 878  madd»ss [ AUDIO_DEVICE_MAX_ADDRESS_LEN ]; 883  saudio_pÜt_cÚfig_mix_ext { 884 audio_moduË_hªdË_t mhw_moduË ; 885 audio_io_hªdË_t mhªdË ; 888 audio_¡»am_ty³_t m¡»am ; 889 audio_sourû_t msourû ; 890 } mu£ÿ£ ; 895  saudio_pÜt_cÚfig_£ssiÚ_ext { 896 audio_£ssiÚ_t m£ssiÚ ; 900  #AUDIO_PORT_CONFIG_SAMPLE_RATE 0x1 ) 901  #AUDIO_PORT_CONFIG_CHANNEL_MASK 0x2 ) 902  #AUDIO_PORT_CONFIG_FORMAT 0x4 ) 903  #AUDIO_PORT_CONFIG_GAIN 0x8 ) 904  #AUDIO_PORT_CONFIG_ALL ( AUDIO_PORT_CONFIG_SAMPLE_RATE | \ 905 AUDIO_PORT_CONFIG_CHANNEL_MASK | \ 906 AUDIO_PORT_CONFIG_FORMAT | \ 907 AUDIO_PORT_CONFIG_GAIN ) ) 911  saudio_pÜt_cÚfig { 912 audio_pÜt_hªdË_t mid ; 913 audio_pÜt_rÞe_t mrÞe ; 914 audio_pÜt_ty³_t mty³ ; 915  mcÚfig_mask ; 916  m§m¶e_¿‹ ; 917 audio_chªÃl_mask_t mchªÃl_mask ; 918 audio_fÜm©_t mfÜm© ; 919  audio_gaš_cÚfig mgaš ; 921  audio_pÜt_cÚfig_deviû_ext mdeviû ; 922  audio_pÜt_cÚfig_mix_ext mmix ; 923  audio_pÜt_cÚfig_£ssiÚ_ext m£ssiÚ ; 924 } mext ; 929  #AUDIO_PORT_MAX_SAMPLING_RATES 16 ) 931  #AUDIO_PORT_MAX_CHANNEL_MASKS 16 ) 933  #AUDIO_PORT_MAX_FORMATS 16 ) 935  #AUDIO_PORT_MAX_GAINS 16 ) 938  saudio_pÜt_deviû_ext { 939 audio_moduË_hªdË_t mhw_moduË ; 940 audio_deviûs_t mty³ ; 941  madd»ss [ AUDIO_DEVICE_MAX_ADDRESS_LEN ]; 946 mAUDIO_LATENCY_LOW , 947 mAUDIO_LATENCY_NORMAL , 948 } taudio_mix_Ï‹ncy_þass_t ; 951  saudio_pÜt_mix_ext { 952 audio_moduË_hªdË_t mhw_moduË ; 953 audio_io_hªdË_t mhªdË ; 954 audio_mix_Ï‹ncy_þass_t mÏ‹ncy_þass ; 959  saudio_pÜt_£ssiÚ_ext { 960 audio_£ssiÚ_t m£ssiÚ ; 964  saudio_pÜt { 965 audio_pÜt_hªdË_t mid ; 966 audio_pÜt_rÞe_t mrÞe ; 967 audio_pÜt_ty³_t mty³ ; 968  mnum_§m¶e_¿‹s ; 969  m§m¶e_¿‹s [ AUDIO_PORT_MAX_SAMPLING_RATES ]; 970  mnum_chªÃl_masks ; 971 audio_chªÃl_mask_t mchªÃl_masks [ AUDIO_PORT_MAX_CHANNEL_MASKS ]; 972  mnum_fÜm©s ; 973 audio_fÜm©_t mfÜm©s [ AUDIO_PORT_MAX_FORMATS ]; 974  mnum_gašs ; 975  audio_gaš mgašs [ AUDIO_PORT_MAX_GAINS ]; 976  audio_pÜt_cÚfig maùive_cÚfig ; 978  audio_pÜt_deviû_ext mdeviû ; 979  audio_pÜt_mix_ext mmix ; 980  audio_pÜt_£ssiÚ_ext m£ssiÚ ; 981 } mext ; 993  taudio_·tch_hªdË_t ; 994  #AUDIO_PATCH_HANDLE_NONE 0 ) 996  #AUDIO_PATCH_PORTS_MAX 16 ) 998  saudio_·tch { 999 audio_·tch_hªdË_t mid ; 1000  mnum_sourûs ; 1001  audio_pÜt_cÚfig msourûs [ AUDIO_PATCH_PORTS_MAX ]; 1002  mnum_sšks ; 1003  audio_pÜt_cÚfig msšks [ AUDIO_PATCH_PORTS_MAX ]; 1009  ušt32_t taudio_hw_sync_t ; 1012  #AUDIO_HW_SYNC_INVALID 0 ) 1014  šlše boÞ $audio_is_ouut_deviû ( audio_deviûs_t deviû ) 1016 ià((( deviû & AUDIO_DEVICE_BIT_IN ) == 0) && 1017 ( `pÝcouÁ ( deviû è=ð1è&& ((deviû & ~ AUDIO_DEVICE_OUT_ALL ) == 0)) 1018  Œue ; 1020  çl£ ; 1021 } } 1023  šlše boÞ $audio_is_šput_deviû ( audio_deviûs_t deviû ) 1025 ià(( deviû & AUDIO_DEVICE_BIT_IN ) != 0) { 1026 deviû &ð~ AUDIO_DEVICE_BIT_IN ; 1027 ià(( `pÝcouÁ ( deviû è=ð1è&& ((deviû & ~ AUDIO_DEVICE_IN_ALL ) == 0)) 1028  Œue ; 1030  çl£ ; 1031 } } 1033  šlše boÞ $audio_is_ouut_deviûs ( audio_deviûs_t deviû ) 1035  ( deviû & AUDIO_DEVICE_BIT_IN ) == 0; 1036 } } 1038  šlše boÞ $audio_is_a2dp_š_deviû ( audio_deviûs_t deviû ) 1040 ià(( deviû & AUDIO_DEVICE_BIT_IN ) != 0) { 1041 deviû &ð~ AUDIO_DEVICE_BIT_IN ; 1042 ià(( `pÝcouÁ ( deviû è=ð1è&& (deviû & AUDIO_DEVICE_IN_BLUETOOTH_A2DP )) 1043  Œue ; 1045  çl£ ; 1046 } } 1048  šlše boÞ $audio_is_a2dp_out_deviû ( audio_deviûs_t deviû ) 1050 ià(( `pÝcouÁ ( deviû è=ð1è&& (deviû & AUDIO_DEVICE_OUT_ALL_A2DP )) 1051  Œue ; 1053  çl£ ; 1054 } } 1057  šlše boÞ $audio_is_a2dp_deviû ( audio_deviûs_t deviû ) 1059  `audio_is_a2dp_out_deviû ( deviû ); 1060 } } 1062  šlše boÞ $audio_is_blu‘oÙh_sco_deviû ( audio_deviûs_t deviû ) 1064 ià(( deviû & AUDIO_DEVICE_BIT_IN ) == 0) { 1065 ià(( `pÝcouÁ ( deviû è=ð1è&& ((deviû & ~ AUDIO_DEVICE_OUT_ALL_SCO ) == 0)) 1066  Œue ; 1068 deviû &ð~ AUDIO_DEVICE_BIT_IN ; 1069 ià(( `pÝcouÁ ( deviû è=ð1è&& ((deviû & ~ AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET ) == 0)) 1070  Œue ; 1073  çl£ ; 1074 } } 1076  šlše boÞ $audio_is_usb_out_deviû ( audio_deviûs_t deviû ) 1078  (( `pÝcouÁ ( deviû è=ð1è&& (deviû & AUDIO_DEVICE_OUT_ALL_USB )); 1079 } } 1081  šlše boÞ $audio_is_usb_š_deviû ( audio_deviûs_t deviû ) 1083 ià(( deviû & AUDIO_DEVICE_BIT_IN ) != 0) { 1084 deviû &ð~ AUDIO_DEVICE_BIT_IN ; 1085 ià( `pÝcouÁ ( deviû è=ð1 && (deviû & AUDIO_DEVICE_IN_ALL_USB ) != 0) 1086  Œue ; 1088  çl£ ; 1089 } } 1092  šlše boÞ $audio_is_usb_deviû ( audio_deviûs_t deviû ) 1094  `audio_is_usb_out_deviû ( deviû ); 1095 } } 1097  šlše boÞ $audio_is_»mÙe_submix_deviû ( audio_deviûs_t deviû ) 1099 ià(( deviû & AUDIO_DEVICE_OUT_REMOTE_SUBMIX ) == AUDIO_DEVICE_OUT_REMOTE_SUBMIX 1100 || ( deviû & AUDIO_DEVICE_IN_REMOTE_SUBMIX ) == AUDIO_DEVICE_IN_REMOTE_SUBMIX) 1101  Œue ; 1103  çl£ ; 1104 } } 1112  šlše boÞ $audio_is_šput_chªÃl ( audio_chªÃl_mask_t chªÃl ) 1114 ušt32_t b™s = `audio_chªÃl_mask_g‘_b™s ( chªÃl ); 1115  `audio_chªÃl_mask_g‘_»´e£Á©iÚ ( chªÃl )) { 1116  AUDIO_CHANNEL_REPRESENTATION_POSITION : 1117 ià( b™s & ~ AUDIO_CHANNEL_IN_ALL ) { 1118 b™s = 0; 1121  AUDIO_CHANNEL_REPRESENTATION_INDEX : 1122  b™s != 0; 1124  çl£ ; 1126 } } 1134  šlše boÞ $audio_is_ouut_chªÃl ( audio_chªÃl_mask_t chªÃl ) 1136 ušt32_t b™s = `audio_chªÃl_mask_g‘_b™s ( chªÃl ); 1137  `audio_chªÃl_mask_g‘_»´e£Á©iÚ ( chªÃl )) { 1138  AUDIO_CHANNEL_REPRESENTATION_POSITION : 1139 ià( b™s & ~ AUDIO_CHANNEL_OUT_ALL ) { 1140 b™s = 0; 1143  AUDIO_CHANNEL_REPRESENTATION_INDEX : 1144  b™s != 0; 1146  çl£ ; 1148 } } 1156  šlše ušt32_t $audio_chªÃl_couÁ_äom_š_mask ( audio_chªÃl_mask_t chªÃl ) 1158 ušt32_t b™s = `audio_chªÃl_mask_g‘_b™s ( chªÃl ); 1159  `audio_chªÃl_mask_g‘_»´e£Á©iÚ ( chªÃl )) { 1160  AUDIO_CHANNEL_REPRESENTATION_POSITION : 1162 b™s &ð AUDIO_CHANNEL_IN_ALL ; 1164  AUDIO_CHANNEL_REPRESENTATION_INDEX : 1165  `pÝcouÁ ( b™s ); 1169 } } 1177  šlše ušt32_t $audio_chªÃl_couÁ_äom_out_mask ( audio_chªÃl_mask_t chªÃl ) 1179 ušt32_t b™s = `audio_chªÃl_mask_g‘_b™s ( chªÃl ); 1180  `audio_chªÃl_mask_g‘_»´e£Á©iÚ ( chªÃl )) { 1181  AUDIO_CHANNEL_REPRESENTATION_POSITION : 1183 b™s &ð AUDIO_CHANNEL_OUT_ALL ; 1185  AUDIO_CHANNEL_REPRESENTATION_INDEX : 1186  `pÝcouÁ ( b™s ); 1190 } } 1202  šlše audio_chªÃl_mask_t $audio_chªÃl_out_mask_äom_couÁ ( ušt32_t chªÃl_couÁ ) 1204 ušt32_t b™s ; 1205  chªÃl_couÁ ) { 1207  AUDIO_CHANNEL_NONE ; 1209 b™s = AUDIO_CHANNEL_OUT_MONO ; 1212 b™s = AUDIO_CHANNEL_OUT_STEREO ; 1215 b™s = AUDIO_CHANNEL_OUT_STEREO | AUDIO_CHANNEL_OUT_FRONT_CENTER ; 1218 b™s = AUDIO_CHANNEL_OUT_QUAD ; 1221 b™s = AUDIO_CHANNEL_OUT_QUAD | AUDIO_CHANNEL_OUT_FRONT_CENTER ; 1224 b™s = AUDIO_CHANNEL_OUT_5POINT1 ; 1227 b™s = AUDIO_CHANNEL_OUT_5POINT1 | AUDIO_CHANNEL_OUT_BACK_CENTER ; 1230 b™s = AUDIO_CHANNEL_OUT_7POINT1 ; 1233  AUDIO_CHANNEL_INVALID ; 1235  `audio_chªÃl_mask_äom_»´e£Á©iÚ_ªd_b™s ( 1236 AUDIO_CHANNEL_REPRESENTATION_POSITION , b™s ); 1237 } } 1246  šlše audio_chªÃl_mask_t $audio_chªÃl_š_mask_äom_couÁ ( ušt32_t chªÃl_couÁ ) 1248 ušt32_t b™s ; 1249  chªÃl_couÁ ) { 1251  AUDIO_CHANNEL_NONE ; 1253 b™s = AUDIO_CHANNEL_IN_MONO ; 1256 b™s = AUDIO_CHANNEL_IN_STEREO ; 1259  AUDIO_CHANNEL_INVALID ; 1261  `audio_chªÃl_mask_äom_»´e£Á©iÚ_ªd_b™s ( 1262 AUDIO_CHANNEL_REPRESENTATION_POSITION , b™s ); 1263 } } 1270  šlše audio_chªÃl_mask_t $audio_chªÃl_mask_fÜ_šdex_assignm’t_äom_couÁ ( 1271 ušt32_t chªÃl_couÁ ) 1273 ušt32_t b™s ; 1275 ià( chªÃl_couÁ == 0) { 1276  AUDIO_CHANNEL_NONE ; 1278 ià( chªÃl_couÁ > AUDIO_CHANNEL_COUNT_MAX ) { 1279  AUDIO_CHANNEL_INVALID ; 1281 b™s = (1 << chªÃl_couÁ ) - 1; 1282  `audio_chªÃl_mask_äom_»´e£Á©iÚ_ªd_b™s ( 1283 AUDIO_CHANNEL_REPRESENTATION_INDEX , b™s ); 1284 } } 1286  šlše boÞ $audio_is_v®id_fÜm© ( audio_fÜm©_t fÜm© ) 1288  fÜm© & AUDIO_FORMAT_MAIN_MASK ) { 1289  AUDIO_FORMAT_PCM : 1290  fÜm© ) { 1291  AUDIO_FORMAT_PCM_16_BIT : 1292  AUDIO_FORMAT_PCM_8_BIT : 1293  AUDIO_FORMAT_PCM_32_BIT : 1294  AUDIO_FORMAT_PCM_8_24_BIT : 1295  AUDIO_FORMAT_PCM_FLOAT : 1296  AUDIO_FORMAT_PCM_24_BIT_PACKED : 1297  Œue ; 1298  AUDIO_FORMAT_INVALID : 1299  AUDIO_FORMAT_DEFAULT : 1300  AUDIO_FORMAT_MP3 : 1301  AUDIO_FORMAT_AMR_NB : 1302  AUDIO_FORMAT_AMR_WB : 1303  AUDIO_FORMAT_AAC : 1304  AUDIO_FORMAT_HE_AAC_V1 : 1305  AUDIO_FORMAT_HE_AAC_V2 : 1306  AUDIO_FORMAT_VORBIS : 1307  AUDIO_FORMAT_OPUS : 1308  AUDIO_FORMAT_AC3 : 1309  AUDIO_FORMAT_E_AC3 : 1310  AUDIO_FORMAT_MAIN_MASK : 1311  AUDIO_FORMAT_SUB_MASK : 1312  AUDIO_FORMAT_AAC_MAIN : 1313  AUDIO_FORMAT_AAC_LC : 1314  AUDIO_FORMAT_AAC_SSR : 1315  AUDIO_FORMAT_AAC_LTP : 1316  AUDIO_FORMAT_AAC_HE_V1 : 1317  AUDIO_FORMAT_AAC_SCALABLE : 1318  AUDIO_FORMAT_AAC_ERLC : 1319  AUDIO_FORMAT_AAC_LD : 1320  AUDIO_FORMAT_AAC_HE_V2 : 1321  AUDIO_FORMAT_AAC_ELD : 1323  çl£ ; 1326  AUDIO_FORMAT_MP3 : 1327  AUDIO_FORMAT_AMR_NB : 1328  AUDIO_FORMAT_AMR_WB : 1329  AUDIO_FORMAT_AAC : 1330  AUDIO_FORMAT_HE_AAC_V1 : 1331  AUDIO_FORMAT_HE_AAC_V2 : 1332  AUDIO_FORMAT_VORBIS : 1333  AUDIO_FORMAT_OPUS : 1334  AUDIO_FORMAT_AC3 : 1335  AUDIO_FORMAT_E_AC3 : 1336  Œue ; 1338  çl£ ; 1340 } } 1342  šlše boÞ $audio_is_lš—r_pcm ( audio_fÜm©_t fÜm© ) 1344  (( fÜm© & AUDIO_FORMAT_MAIN_MASK è=ð AUDIO_FORMAT_PCM ); 1345 } } 1347  šlše size_t $audio_by‹s_³r_§m¶e ( audio_fÜm©_t fÜm© ) 1349 size_t size = 0; 1351  fÜm© ) { 1352  AUDIO_FORMAT_PCM_32_BIT : 1353  AUDIO_FORMAT_PCM_8_24_BIT : 1354 size = ( št32_t ); 1356  AUDIO_FORMAT_PCM_24_BIT_PACKED : 1357 size = ( ušt8_t ) * 3; 1359  AUDIO_FORMAT_PCM_16_BIT : 1360 size = ( št16_t ); 1362  AUDIO_FORMAT_PCM_8_BIT : 1363 size = ( ušt8_t ); 1365  AUDIO_FORMAT_PCM_FLOAT : 1366 size = (); 1368  AUDIO_FORMAT_INVALID : 1369  AUDIO_FORMAT_DEFAULT : 1370  AUDIO_FORMAT_MP3 : 1371  AUDIO_FORMAT_AMR_NB : 1372  AUDIO_FORMAT_AMR_WB : 1373  AUDIO_FORMAT_AAC : 1374  AUDIO_FORMAT_HE_AAC_V1 : 1375  AUDIO_FORMAT_HE_AAC_V2 : 1376  AUDIO_FORMAT_VORBIS : 1377  AUDIO_FORMAT_OPUS : 1378  AUDIO_FORMAT_AC3 : 1379  AUDIO_FORMAT_E_AC3 : 1380  AUDIO_FORMAT_MAIN_MASK : 1381  AUDIO_FORMAT_SUB_MASK : 1382  AUDIO_FORMAT_AAC_MAIN : 1383  AUDIO_FORMAT_AAC_LC : 1384  AUDIO_FORMAT_AAC_SSR : 1385  AUDIO_FORMAT_AAC_LTP : 1386  AUDIO_FORMAT_AAC_HE_V1 : 1387  AUDIO_FORMAT_AAC_SCALABLE : 1388  AUDIO_FORMAT_AAC_ERLC : 1389  AUDIO_FORMAT_AAC_LD : 1390  AUDIO_FORMAT_AAC_HE_V2 : 1391  AUDIO_FORMAT_AAC_ELD : 1395  size ; 1396 } } 1400 * $audio_deviû_add»ss_to_·¿m‘” ( audio_deviûs_t deviû , cÚ¡ * add»ss ) 1402 cÚ¡ size_t kSize = AUDIO_DEVICE_MAX_ADDRESS_LEN + ("a2dp_sink_address="); 1403  ·¿m [ kSize ]; 1405 ià( deviû & AUDIO_DEVICE_OUT_ALL_A2DP ) 1406 `¢´štf ( ·¿m , kSize , "%s=%s", "a2dp_sšk_add»ss", add»ss ); 1407 ià( deviû & AUDIO_DEVICE_OUT_REMOTE_SUBMIX ) 1408 `¢´štf ( ·¿m , kSize , "%s=%s", "mix", add»ss ); 1410 `¢´štf ( ·¿m , kSize , "%s", add»ss ); 1412  `¡rdup ( ·¿m ); 1413 } } 1416 g__END_DECLS @android/test-ipc.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡dboÞ.h > 33  ~<š‰y³s.h > 34  ~<¡ršg.h > 35  ~ 36  ~ 37  ~ 39  ~ 40  ~"¤c/sh¬ed/utž.h " 41  ~"¤c/log.h " 42  ~"ªdroid/c-commÚ.h " 43  ~"ªdroid/c.h " 45 cÚ¡  gHAL_SK_PATH [] = "\0test_hal_socket"; 47  #SERVICE_ID_MAX 10 ) 49  s‹¡_d©a { 50 boÞ mdiscÚÃù ; 51 cÚ¡ * mcmd ; 52 ušt16_t mcmd_size ; 53 ušt8_t m£rviû ; 54 cÚ¡  c_hªdËr * mhªdËrs ; 55 ušt8_t mhªdËrs_size ; 58  scÚ‹xt { 59 GMašLoÝ * mmaš_loÝ ; 61  msk ; 63 gušt msourû ; 64 gušt mcmd_sourû ; 65 gušt mnÙif_sourû ; 67 GIOChªÃl * mcmd_io ; 68 GIOChªÃl * mnÙif_io ; 70 cÚ¡  ‹¡_d©a * md©a ; 74  c * gc = NULL ; 76  $cÚ‹xt_qu™ ( cÚ‹xt *context) 78 `g_maš_loÝ_qu™ ( cÚ‹xt -> maš_loÝ ); 79 } } 81  gboÞ—n $cmd_w©ch ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 82 gpoš‹r u£r_d©a ) 84  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 85 cÚ¡  ‹¡_d©a *‹¡_d©¨ð cÚ‹xt -> d©a ; 86 cÚ¡  c_hdr * £Á_msg = ‹¡_d©a -> cmd ; 87 ušt8_t buf [128]; 88  sk ; 90  c_hdr sucûss_»¥ = { 91 . £rviû_id = £Á_msg ->service_id, 92 . Ýcode = £Á_msg ->opcode, 93 . Ën = 0, 96 ià( cÚd & ( G_IO_HUP | G_IO_ERR | G_IO_NVAL )) { 97 `g_as£¹ ( ‹¡_d©a -> discÚÃù ); 98  FALSE ; 101 `g_as£¹ (! ‹¡_d©a -> discÚÃù ); 103 sk = `g_io_chªÃl_unix_g‘_fd ( io ); 105 `g_as£¹ ( `»ad ( sk , buf , (buf)è=ð( c_hdr )); 106 `g_as£¹ (! `memcmp (& sucûss_»¥ , buf , ( c_hdr ))); 108 `cÚ‹xt_qu™ ( cÚ‹xt ); 110  TRUE ; 111 } } 113  gboÞ—n $nÙif_w©ch ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 114 gpoš‹r u£r_d©a ) 116  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 117 cÚ¡  ‹¡_d©a *‹¡_d©¨ð cÚ‹xt -> d©a ; 119 ià( cÚd & ( G_IO_HUP | G_IO_ERR | G_IO_NVAL )) { 120 `g_as£¹ ( ‹¡_d©a -> discÚÃù ); 121  FALSE ; 124 `g_as£¹ (! ‹¡_d©a -> discÚÃù ); 126  TRUE ; 127 } } 129  gboÞ—n $cÚÃù_hªdËr ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 130 gpoš‹r u£r_d©a ) 132  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 133 cÚ¡  ‹¡_d©a *‹¡_d©¨ð cÚ‹xt -> d©a ; 134 GIOChªÃl * Ãw_io ; 135 GIOCÚd™iÚ w©ch_cÚd ; 136  sk ; 138 ià( cÚd & ( G_IO_HUP | G_IO_ERR | G_IO_NVAL )) { 139 `g_as£¹ ( FALSE ); 140  FALSE ; 143 `g_as£¹ (! cÚ‹xt -> cmd_sourû || !cÚ‹xt-> nÙif_sourû ); 145 sk = `acû± ( cÚ‹xt ->sk, NULL , NULL); 146 `g_as£¹ ( sk >= 0); 148 Ãw_io = `g_io_chªÃl_unix_Ãw ( sk ); 150 w©ch_cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 152 ià( cÚ‹xt -> cmd_sourû && !cÚ‹xt-> nÙif_sourû ) { 153 cÚ‹xt -> nÙif_sourû = `g_io_add_w©ch ( Ãw_io , w©ch_cÚd , 154 nÙif_w©ch , cÚ‹xt ); 155 `g_as£¹ ( cÚ‹xt -> nÙif_sourû > 0); 156 cÚ‹xt -> nÙif_io = Ãw_io ; 159 ià(! cÚ‹xt -> cmd_sourû ) { 160 cÚ‹xt -> cmd_sourû = `g_io_add_w©ch ( Ãw_io , w©ch_cÚd , 161 cmd_w©ch , cÚ‹xt ); 162 cÚ‹xt -> cmd_io = Ãw_io ; 165 ià( cÚ‹xt -> cmd_sourû && cÚ‹xt-> nÙif_sourû && ! ‹¡_d©a -> cmd ) 166 `cÚ‹xt_qu™ ( cÚ‹xt ); 168  TRUE ; 169 } } 171  cÚ‹xt * $ü—‹_cÚ‹xt ( gcÚ¡poš‹r d©a ) 173  cÚ‹xt *cÚ‹xˆð `g_Ãw0 (context, 1); 174  sockaddr_un addr ; 175 GIOChªÃl * io ; 176  »t , sk ; 178 cÚ‹xt -> maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 179 `g_as£¹ ( cÚ‹xt -> maš_loÝ ); 181 sk = `sock‘ ( AF_LOCAL , SOCK_SEQPACKET , 0); 182 `g_as£¹ ( sk >= 0); 184 `mem£t (& addr , 0, (addr)); 185 addr . sun_çmžy = AF_UNIX ; 187 `memýy ( addr . sun_·th , HAL_SK_PATH , (HAL_SK_PATH)); 189 »t = `bšd ( sk , ( sockaddr *è& addr , (addr)); 190 `g_as£¹ ( »t == 0); 192 »t = `li¡’ ( sk , 5); 193 `g_as£¹ ( »t == 0); 195 io = `g_io_chªÃl_unix_Ãw ( sk ); 197 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 199 cÚ‹xt -> sourû = `g_io_add_w©ch ( io , 200 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 201 cÚÃù_hªdËr , cÚ‹xt ); 202 `g_as£¹ ( cÚ‹xt -> sourû > 0); 204 `g_io_chªÃl_uÄef ( io ); 206 cÚ‹xt -> sk = sk; 207 cÚ‹xt -> d©a = data; 209  cÚ‹xt ; 210 } } 212  $execu‹_cÚ‹xt ( cÚ‹xt *context) 214 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 216 `g_io_chªÃl_shutdown ( cÚ‹xt -> nÙif_io , TRUE , NULL ); 217 `g_io_chªÃl_shutdown ( cÚ‹xt -> cmd_io , TRUE , NULL ); 218 `g_io_chªÃl_uÄef ( cÚ‹xt -> cmd_io ); 219 `g_io_chªÃl_uÄef ( cÚ‹xt -> nÙif_io ); 221 `g_sourû_»move ( cÚ‹xt -> nÙif_sourû ); 222 `g_sourû_»move ( cÚ‹xt -> cmd_sourû ); 223 `g_sourû_»move ( cÚ‹xt -> sourû ); 225 `g_maš_loÝ_uÄef ( cÚ‹xt -> maš_loÝ ); 227 `g_ä“ ( cÚ‹xt ); 228 } } 230  $discÚÃùed (* d©a ) 232  cÚ‹xt *cÚ‹xˆð d©a ; 234 `g_as£¹ ( cÚ‹xt -> d©a -> discÚÃù ); 236 `cÚ‹xt_qu™ ( cÚ‹xt ); 237 } } 239  $‹¡_š™ ( gcÚ¡poš‹r d©a ) 241  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 243 c = `c_š™ ( HAL_SK_PATH , (HAL_SK_PATH), SERVICE_ID_MAX , 244 Œue , NULL , NULL); 246 `g_as£¹ ( c ); 248 `execu‹_cÚ‹xt ( cÚ‹xt ); 250 `c_þ—nup ( c ); 251 c = NULL ; 252 } } 254  gboÞ—n $£nd_cmd ( gpoš‹r u£r_d©a ) 256  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 257 cÚ¡  ‹¡_d©a *‹¡_d©¨ð cÚ‹xt -> d©a ; 258  sk ; 260 sk = `g_io_chªÃl_unix_g‘_fd ( cÚ‹xt -> cmd_io ); 261 `g_as£¹ ( sk >= 0); 263 `g_as£¹ ( `wr™e ( sk , ‹¡_d©a -> cmd ,e¡_d©a-> cmd_size ) == 264 ‹¡_d©a -> cmd_size ); 266  FALSE ; 267 } } 269  gboÞ—n $»gi¡”_£rviû ( gpoš‹r u£r_d©a ) 271  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 272 cÚ¡  ‹¡_d©a *‹¡_d©¨ð cÚ‹xt -> d©a ; 274 `c_»gi¡” ( c , ‹¡_d©a -> £rviû ,e¡_d©a-> hªdËrs , 275 ‹¡_d©a -> hªdËrs_size ); 277  FALSE ; 278 } } 280  gboÞ—n $uÄegi¡”_£rviû ( gpoš‹r u£r_d©a ) 282  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 283 cÚ¡  ‹¡_d©a *‹¡_d©¨ð cÚ‹xt -> d©a ; 285 `c_uÄegi¡” ( c , ‹¡_d©a -> £rviû ); 287  FALSE ; 288 } } 290  $‹¡_cmd ( gcÚ¡poš‹r d©a ) 292  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 294 c = `c_š™ ( HAL_SK_PATH , (HAL_SK_PATH), SERVICE_ID_MAX , 295 Œue , discÚÃùed , cÚ‹xt ); 297 `g_as£¹ ( c ); 299 `g_idË_add ( £nd_cmd , cÚ‹xt ); 301 `execu‹_cÚ‹xt ( cÚ‹xt ); 303 `c_þ—nup ( c ); 304 c = NULL ; 305 } } 307  $‹¡_cmd_»g ( gcÚ¡poš‹r d©a ) 309  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 310 cÚ¡  ‹¡_d©a *‹¡_d©¨ð cÚ‹xt -> d©a ; 312 c = `c_š™ ( HAL_SK_PATH , (HAL_SK_PATH), SERVICE_ID_MAX , 313 Œue , discÚÃùed , cÚ‹xt ); 315 `g_as£¹ ( c ); 317 `g_idË_add ( »gi¡”_£rviû , cÚ‹xt ); 318 `g_idË_add ( £nd_cmd , cÚ‹xt ); 320 `execu‹_cÚ‹xt ( cÚ‹xt ); 322 `c_uÄegi¡” ( c , ‹¡_d©a -> £rviû ); 324 `c_þ—nup ( c ); 325 c = NULL ; 326 } } 328  $‹¡_cmd_»g_1 ( gcÚ¡poš‹r d©a ) 330  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 332 c = `c_š™ ( HAL_SK_PATH , (HAL_SK_PATH), SERVICE_ID_MAX , 333 Œue , discÚÃùed , cÚ‹xt ); 335 `g_as£¹ ( c ); 337 `g_idË_add ( »gi¡”_£rviû , cÚ‹xt ); 338 `g_idË_add ( uÄegi¡”_£rviû , cÚ‹xt ); 339 `g_idË_add ( £nd_cmd , cÚ‹xt ); 341 `execu‹_cÚ‹xt ( cÚ‹xt ); 343 `c_þ—nup ( c ); 344 c = NULL ; 345 } } 347  $‹¡_cmd_hªdËr_1 (cÚ¡ * buf , ušt16_t Ën ) 349 `c_£nd_r¥ ( c , 0, 1, 0); 350 } } 352  $‹¡_cmd_hªdËr_2 (cÚ¡ * buf , ušt16_t Ën ) 354 `c_£nd_r¥ ( c , 0, 2, 0); 355 } } 357  $‹¡_cmd_hªdËr_šv®id (cÚ¡ * buf , ušt16_t Ën ) 359 `g_as£¹ ( çl£ ); 360 } } 362 cÚ¡  ‹¡_d©a g‹¡_š™_1 = {}; 364 cÚ¡  c_hdr g‹¡_cmd_1_hdr = { 365 . £rviû_id = 0, 366 . gÝcode = 1, 367 . gËn = 0 370 cÚ¡  c_hdr g‹¡_cmd_2_hdr = { 371 . £rviû_id = 0, 372 . gÝcode = 2, 373 . gËn = 0 376 cÚ¡  ‹¡_d©a g‹¡_cmd_£rviû_šv®id_1 = { 377 . cmd = & ‹¡_cmd_1_hdr , 378 . gcmd_size = ( ‹¡_cmd_1_hdr ), 379 . gdiscÚÃù = Œue , 382 cÚ¡  c_hªdËr gcmd_hªdËrs [] = { 383 { ‹¡_cmd_hªdËr_1 , çl£ , 0 } 386 cÚ¡  ‹¡_d©a g‹¡_cmd_£rviû_v®id_1 = { 387 . cmd = & ‹¡_cmd_1_hdr , 388 . gcmd_size = ( ‹¡_cmd_1_hdr ), 389 . g£rviû = 0, 390 . ghªdËrs = cmd_hªdËrs , 391 . ghªdËrs_size = 1 394 cÚ¡  ‹¡_d©a g‹¡_cmd_£rviû_šv®id_2 = { 395 . cmd = & ‹¡_cmd_1_hdr , 396 . gcmd_size = ( ‹¡_cmd_1_hdr ), 397 . g£rviû = 0, 398 . ghªdËrs = cmd_hªdËrs , 399 . ghªdËrs_size = 1, 400 . gdiscÚÃù = Œue , 403 cÚ¡  c_hªdËr gcmd_hªdËrs_šv®id_2 [] = { 404 { ‹¡_cmd_hªdËr_1 , çl£ , 0 }, 405 { ‹¡_cmd_hªdËr_šv®id , çl£ , 0 } 408 cÚ¡  c_hªdËr gcmd_hªdËrs_šv®id_1 [] = { 409 { ‹¡_cmd_hªdËr_šv®id , çl£ , 0 }, 410 { ‹¡_cmd_hªdËr_2 , çl£ , 0 }, 413 cÚ¡  ‹¡_d©a g‹¡_cmd_Ýcode_v®id_1 = { 414 . cmd = & ‹¡_cmd_1_hdr , 415 . gcmd_size = ( ‹¡_cmd_1_hdr ), 416 . g£rviû = 0, 417 . ghªdËrs = cmd_hªdËrs_šv®id_2 , 418 . ghªdËrs_size = 2, 421 cÚ¡  ‹¡_d©a g‹¡_cmd_Ýcode_v®id_2 = { 422 . cmd = & ‹¡_cmd_2_hdr , 423 . gcmd_size = ( ‹¡_cmd_2_hdr ), 424 . g£rviû = 0, 425 . ghªdËrs = cmd_hªdËrs_šv®id_1 , 426 . ghªdËrs_size = 2, 429 cÚ¡  ‹¡_d©a g‹¡_cmd_Ýcode_šv®id_1 = { 430 . cmd = & ‹¡_cmd_2_hdr , 431 . gcmd_size = ( ‹¡_cmd_2_hdr ), 432 . g£rviû = 0, 433 . ghªdËrs = cmd_hªdËrs , 434 . ghªdËrs_size = 1, 435 . gdiscÚÃù = Œue , 438 cÚ¡  ‹¡_d©a g‹¡_cmd_hdr_šv®id = { 439 . cmd = & ‹¡_cmd_1_hdr , 440 . gcmd_size = ( ‹¡_cmd_1_hdr ) - 1, 441 . g£rviû = 0, 442 . ghªdËrs = cmd_hªdËrs , 443 . ghªdËrs_size = 1, 444 . gdiscÚÃù = Œue , 447  #VARDATA_EX1 "somd©¨exam¶e" ) 449  sv¬d©a { 450  c_hdr mhdr ; 451 ušt8_t md©a [ IPC_MTU - ( c_hdr )]; 452 } __©Œibu‹__ (( ·cked )); 454 cÚ¡  v¬d©a g‹¡_cmd_v¬d©a = { 455 . hdr . £rviû_id = 0, 456 . ghdr . gÝcode = 1, 457 . ghdr . gËn = ( VARDATA_EX1 ), 458 . gd©a = VARDATA_EX1 , 461 cÚ¡  c_hªdËr gcmd_v¬d©a_hªdËrs [] = { 462 { ‹¡_cmd_hªdËr_1 , Œue , ( VARDATA_EX1 ) } 465 cÚ¡  ‹¡_d©a g‹¡_cmd_v¬d©a_v®id = { 466 . cmd = & ‹¡_cmd_v¬d©a , 467 . gcmd_size = ( c_hdr è+ ( VARDATA_EX1 ), 468 . g£rviû = 0, 469 . ghªdËrs = cmd_v¬d©a_hªdËrs , 470 . ghªdËrs_size = 1, 473 cÚ¡  c_hªdËr gcmd_v¬d©a_hªdËrs_v®id2 [] = { 474 { ‹¡_cmd_hªdËr_1 , Œue , ( VARDATA_EX1 ) - 1 } 477 cÚ¡  ‹¡_d©a g‹¡_cmd_v¬d©a_v®id_2 = { 478 . cmd = & ‹¡_cmd_v¬d©a , 479 . gcmd_size = ( c_hdr è+ ( VARDATA_EX1 ), 480 . g£rviû = 0, 481 . ghªdËrs = cmd_v¬d©a_hªdËrs_v®id2 , 482 . ghªdËrs_size = 1, 485 cÚ¡  ‹¡_d©a g‹¡_cmd_v¬d©a_šv®id_1 = { 486 . cmd = & ‹¡_cmd_v¬d©a , 487 . gcmd_size = ( c_hdr è+ ( VARDATA_EX1 ) - 1, 488 . g£rviû = 0, 489 . ghªdËrs = cmd_v¬d©a_hªdËrs , 490 . ghªdËrs_size = 1, 491 . gdiscÚÃù = Œue , 494 cÚ¡  c_hdr g‹¡_cmd_£rviû_ofäªge_hdr = { 495 . £rviû_id = SERVICE_ID_MAX + 1, 496 . gÝcode = 1, 497 . gËn = 0 500 cÚ¡  ‹¡_d©a g‹¡_cmd_£rviû_ofäªge = { 501 . cmd = & ‹¡_cmd_£rviû_ofäªge_hdr , 502 . gcmd_size = ( c_hdr ), 503 . g£rviû = 0, 504 . ghªdËrs = cmd_hªdËrs , 505 . ghªdËrs_size = 1, 506 . gdiscÚÃù = Œue , 509 cÚ¡  v¬d©a g‹¡_cmd_šv®id_d©a_1 = { 510 . hdr . £rviû_id = 0, 511 . ghdr . gÝcode = 1, 512 . ghdr . gËn = ( VARDATA_EX1 ), 513 . gd©a = VARDATA_EX1 , 516 cÚ¡  ‹¡_d©a g‹¡_cmd_msg_šv®id_1 = { 517 . cmd = & ‹¡_cmd_šv®id_d©a_1 , 518 . gcmd_size = ( c_hdr è+ ( VARDATA_EX1 ) - 1, 519 . g£rviû = 0, 520 . ghªdËrs = cmd_hªdËrs , 521 . ghªdËrs_size = 1, 522 . gdiscÚÃù = Œue , 525 cÚ¡  v¬d©a g‹¡_cmd_šv®id_d©a_2 = { 526 . hdr . £rviû_id = 0, 527 . ghdr . gÝcode = 1, 528 . ghdr . gËn = ( VARDATA_EX1 ) - 1, 529 . gd©a = VARDATA_EX1 , 532 cÚ¡  ‹¡_d©a g‹¡_cmd_msg_šv®id_2 = { 533 . cmd = & ‹¡_cmd_šv®id_d©a_2 , 534 . gcmd_size = ( c_hdr è+ ( VARDATA_EX1 ), 535 . g£rviû = 0, 536 . ghªdËrs = cmd_hªdËrs , 537 . ghªdËrs_size = 1, 538 . gdiscÚÃù = Œue , 541  $maš ( ¬gc , * ¬gv []) 543 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 545 ià( `g_‹¡_v”bo£ ()) 546 `__btd_log_š™ ("*", 0); 548 `g_‹¡_add_d©a_func ("/ªdroid_c/š™", & ‹¡_š™_1 , ‹¡_š™ ); 549 `g_‹¡_add_d©a_func ("/android_ipc/service_invalid_1", 550 & ‹¡_cmd_£rviû_šv®id_1 , ‹¡_cmd ); 551 `g_‹¡_add_d©a_func ("/android_ipc/service_valid_1", 552 & ‹¡_cmd_£rviû_v®id_1 , ‹¡_cmd_»g ); 553 `g_‹¡_add_d©a_func ("/android_ipc/service_invalid_2", 554 & ‹¡_cmd_£rviû_šv®id_2 , ‹¡_cmd_»g_1 ); 555 `g_‹¡_add_d©a_func ("/android_ipc/opcode_valid_1", 556 & ‹¡_cmd_Ýcode_v®id_1 , ‹¡_cmd_»g ); 557 `g_‹¡_add_d©a_func ("/android_ipc/opcode_valid_2", 558 & ‹¡_cmd_Ýcode_v®id_2 , ‹¡_cmd_»g ); 559 `g_‹¡_add_d©a_func ("/android_ipc/opcode_invalid_1", 560 & ‹¡_cmd_Ýcode_šv®id_1 , ‹¡_cmd_»g ); 561 `g_‹¡_add_d©a_func ("/android_ipc/vardata_valid", 562 & ‹¡_cmd_v¬d©a_v®id , ‹¡_cmd_»g ); 563 `g_‹¡_add_d©a_func ("/android_ipc/vardata_valid_2", 564 & ‹¡_cmd_v¬d©a_v®id_2 , ‹¡_cmd_»g ); 565 `g_‹¡_add_d©a_func ("/android_ipc/vardata_invalid_1", 566 & ‹¡_cmd_v¬d©a_šv®id_1 , ‹¡_cmd_»g ); 567 `g_‹¡_add_d©a_func ("/android_ipc/service_offrange", 568 & ‹¡_cmd_£rviû_ofäªge , ‹¡_cmd_»g ); 569 `g_‹¡_add_d©a_func ("/android_ipc/hdr_invalid", 570 & ‹¡_cmd_hdr_šv®id , ‹¡_cmd_»g ); 571 `g_‹¡_add_d©a_func ("/android_ipc/msg_invalid_1", 572 & ‹¡_cmd_msg_šv®id_1 , ‹¡_cmd_»g ); 573 `g_‹¡_add_d©a_func ("/android_ipc/msg_invalid_2", 574 & ‹¡_cmd_msg_šv®id_2 , ‹¡_cmd_»g ); 576  `g_‹¡_run (); 577 } } @android/tester-a2dp.c 18  ~<¡dboÞ.h > 20  ~"emuÏtÜ/btho¡.h " 21  ~"¤c/sh¬ed/utž.h " 22  ~"¤c/sh¬ed/‹¡”.h " 23  ~"¤c/sh¬ed/queue.h " 24  ~"lib/blu‘oÙh.h " 25  ~"ªdroid/utžs.h " 26  ~"‹¡”-maš.h " 28  queue * gli¡ ; 30  #»q_dsc 0x00, 0x01 ) 31  #r¥_dsc 0x02, 0x01, 0x04, 0x08 ) 32  #»q_g‘ 0x10, 0x02, 0x04 ) 33  #r¥_g‘ 0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, \ 34 0x00, 0xff, 0xff, 0x02, 0x40 ) 35  #»q_cfg 0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, \ 37 0x40 ) 38  #r¥_cfg 0x22, 0x03 ) 39  #»q_Ý’ 0x30, 0x06, 0x04 ) 40  #r¥_Ý’ 0x32, 0x06 ) 41  #»q_þo£ 0x40, 0x08, 0x04 ) 42  #r¥_þo£ 0x42, 0x08 ) 43  #»q_¡¬t 0x40, 0x07, 0x04 ) 44  #r¥_¡¬t 0x42, 0x07 ) 45  #»q_su¥’d 0x50, 0x09, 0x04 ) 46  #r¥_su¥’d 0x52, 0x09 ) 48 cÚ¡  pdu_£t gpdus [] = { 49 { ¿w_pdu ( »q_dsc ),„aw_pdu( r¥_dsc ) }, 50 { ¿w_pdu ( »q_g‘ ),„aw_pdu( r¥_g‘ ) }, 51 { ¿w_pdu ( »q_cfg ),„aw_pdu( r¥_cfg ) }, 52 { ¿w_pdu ( »q_Ý’ ),„aw_pdu( r¥_Ý’ ) }, 53 { ¿w_pdu ( »q_þo£ ),„aw_pdu( r¥_þo£ ) }, 54 { ¿w_pdu ( »q_¡¬t ),„aw_pdu( r¥_¡¬t ) }, 55 { ¿w_pdu ( »q_su¥’d ),„aw_pdu( r¥_su¥’d ) }, 56 { ’d_pdu ,ƒnd_pdu }, 59  emu_l2ÿp_cid_d©a gcid_d©a = { 60 . pdu = pdus , 63  $a2dp_cÚÃù_»que¡_cb ( ušt16_t hªdË , ušt16_ˆ cid , 64 * u£r_d©a ) 66  emu_l2ÿp_cid_d©a * cid_d©a = u£r_d©a ; 68 ià( cid_d©a -> hªdË ) 71 cid_d©a -> hªdË = handle; 72 cid_d©a -> cid = cid; 74 `‹¡”_hªdË_l2ÿp_d©a_exchªge ( cid_d©a ); 75 } } 77  emu_£t_l2ÿp_d©a gl2ÿp_£tup_d©a = { 78 . psm = 25, 79 . gfunc = a2dp_cÚÃù_»que¡_cb , 80 . gu£r_d©a = & cid_d©a , 83  $a2dp_cÚÃù_aùiÚ () 85  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 86 cÚ¡ ušt8_t * addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 87  ¡• *¡• = `g_Ãw0 (step, 1); 88 bt_bdaddr_t bdaddr ; 90 cid_d©a . hªdË = 0; 91 cid_d©a . cid = 0; 93 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è addr , & bdaddr ); 95 ¡• -> aùiÚ_¡©us = d©a -> if_a2dp -> `cÚÃù (& bdaddr ); 97 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 98 } } 100  $a2dp_discÚÃù_aùiÚ () 102  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 103 cÚ¡ ušt8_t * addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 104  ¡• *¡• = `g_Ãw0 (step, 1); 105 bt_bdaddr_t bdaddr ; 107 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è addr , & bdaddr ); 109 ¡• -> aùiÚ_¡©us = d©a -> if_a2dp -> `discÚÃù (& bdaddr ); 111 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 112 } } 114  $audio_»sume_aùiÚ () 116  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 117  ¡• *¡• = `g_Ãw0 (step, 1); 118  ”r ; 120 ”r = d©a -> audio -> `Ý’_ouut_¡»am (data->audio, 122 AUDIO_DEVICE_OUT_ALL_A2DP , 123 AUDIO_OUTPUT_FLAG_NONE , 124 NULL , 125 & d©a -> if_¡»am , NULL ); 126 ià( ”r < 0) { 127 ¡• -> aùiÚ_¡©us = BT_STATUS_FAIL ; 128  dÚe ; 132 d©a -> if_¡»am -> `wr™e (d©a->if_¡»am, & ”r , (err)); 134 dÚe : 135 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 136 } } 138  $audio_su¥’d_aùiÚ () 140  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 141  ¡• *¡• = `g_Ãw0 (step, 1); 143 d©a -> if_¡»am -> commÚ . `¡ªdby (&data->if_stream->common); 145 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 146 } } 148  ‹¡_ÿ£ g‹¡_ÿ£s [] = { 149 TEST_CASE_BREDRLE ("A2DP Init", 150 ACTION_SUCCESS ( dummy_aùiÚ , NULL ), 152 TEST_CASE_BREDRLE ("A2DP Connect - Success", 153 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 154 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 155 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 156 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 157 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 158 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & l2ÿp_£tup_d©a ), 159 ACTION_SUCCESS ( a2dp_cÚÃù_aùiÚ , NULL ), 160 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 161 BTAV_CONNECTION_STATE_CONNECTING ), 162 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 163 BTAV_CONNECTION_STATE_CONNECTED ), 164 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 165 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 166 BTAV_CONNECTION_STATE_DISCONNECTED ), 167 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 169 TEST_CASE_BREDRLE ("A2DP Disconnect - Success", 170 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 171 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 172 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 173 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 174 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 175 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & l2ÿp_£tup_d©a ), 176 ACTION_SUCCESS ( a2dp_cÚÃù_aùiÚ , NULL ), 177 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 178 BTAV_CONNECTION_STATE_CONNECTING ), 179 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 180 BTAV_CONNECTION_STATE_CONNECTED ), 181 ACTION_SUCCESS ( a2dp_discÚÃù_aùiÚ , NULL ), 182 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 183 BTAV_CONNECTION_STATE_DISCONNECTING ), 184 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 185 BTAV_CONNECTION_STATE_DISCONNECTED ), 186 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 187 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 189 TEST_CASE_BREDRLE ("A2DP Resume - Success", 190 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 191 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 192 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 193 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 194 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 195 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & l2ÿp_£tup_d©a ), 196 ACTION_SUCCESS ( a2dp_cÚÃù_aùiÚ , NULL ), 197 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 198 BTAV_CONNECTION_STATE_CONNECTING ), 199 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 200 BTAV_CONNECTION_STATE_CONNECTED ), 201 ACTION_SUCCESS ( audio_»sume_aùiÚ , NULL ), 202 CALLBACK_AV_AUDIO_STATE ( CB_A2DP_AUDIO_STATE , 203 BTAV_AUDIO_STATE_STARTED ), 204 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 205 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 206 BTAV_CONNECTION_STATE_DISCONNECTED ), 207 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 209 TEST_CASE_BREDRLE ("A2DP Suspend - Success", 210 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 211 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 212 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 213 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 214 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 215 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & l2ÿp_£tup_d©a ), 216 ACTION_SUCCESS ( a2dp_cÚÃù_aùiÚ , NULL ), 217 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 218 BTAV_CONNECTION_STATE_CONNECTING ), 219 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 220 BTAV_CONNECTION_STATE_CONNECTED ), 221 ACTION_SUCCESS ( audio_»sume_aùiÚ , NULL ), 222 CALLBACK_AV_AUDIO_STATE ( CB_A2DP_AUDIO_STATE , 223 BTAV_AUDIO_STATE_STARTED ), 224 ACTION_SUCCESS ( audio_su¥’d_aùiÚ , NULL ), 225 CALLBACK_AV_AUDIO_STATE ( CB_A2DP_AUDIO_STATE , 226 BTAV_AUDIO_STATE_STOPPED ), 227 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 228 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 229 BTAV_CONNECTION_STATE_DISCONNECTED ), 230 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 234  queue * $g‘_a2dp_‹¡s () 236 ušt16_t i = 0; 238 li¡ = `queue_Ãw (); 239 ià(! li¡ ) 240  NULL ; 242 ; i < ( ‹¡_ÿ£s ) / (test_cases[0]); ++i) 243 ià(! `queue_push_ž ( li¡ , & ‹¡_ÿ£s [ i ])) { 244 `queue_de¡roy ( li¡ , NULL ); 245  NULL ; 248  li¡ ; 249 } } 251  $»move_a2dp_‹¡s () 253 `queue_de¡roy ( li¡ , NULL ); 254 } } @android/tester-avrcp.c 18  ~<¡dboÞ.h > 20  ~"emuÏtÜ/btho¡.h " 21  ~"¤c/sh¬ed/utž.h " 22  ~"¤c/sh¬ed/‹¡”.h " 23  ~"¤c/sh¬ed/queue.h " 24  ~"lib/blu‘oÙh.h " 25  ~"ªdroid/utžs.h " 26  ~"‹¡”-maš.h " 28  queue * gli¡ ; 30  #AVRCP_GET_ELEMENT_ATTRIBUTES 0x20 ) 31  #AVRCP_GET_PLAY_STATUS 0x30 ) 32  #AVRCP_REGISTER_NOTIFICATION 0x31 ) 34  #sdp_r¥_pdu 0x07, \ 52 0x00 ) 54 cÚ¡  pdu_£t gsdp_pdus [] = { 55 { ’d_pdu , ¿w_pdu ( sdp_r¥_pdu ) }, 56 { ’d_pdu ,ƒnd_pdu }, 59  emu_l2ÿp_cid_d©a gsdp_d©a = { 60 . pdu = sdp_pdus , 61 . gis_sdp = TRUE , 64  #»q_dsc 0x00, 0x01 ) 65  #r¥_dsc 0x02, 0x01, 0x04, 0x08 ) 66  #»q_g‘ 0x10, 0x02, 0x04 ) 67  #r¥_g‘ 0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, \ 68 0x00, 0xff, 0xff, 0x02, 0x40 ) 69  #»q_cfg 0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, \ 71 0x40 ) 72  #r¥_cfg 0x22, 0x03 ) 73  #»q_Ý’ 0x30, 0x06, 0x04 ) 74  #r¥_Ý’ 0x32, 0x06 ) 75  #»q_þo£ 0x40, 0x08, 0x04 ) 76  #r¥_þo£ 0x42, 0x08 ) 77  #»q_¡¬t 0x40, 0x07, 0x04 ) 78  #r¥_¡¬t 0x42, 0x07 ) 79  #»q_su¥’d 0x50, 0x09, 0x04 ) 80  #r¥_su¥’d 0x52, 0x09 ) 82  #»q_¶ay_¡©us 0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 0x00, 0x19, 0x58, \ 83 0x30, 0x00, 0x00, 0x00 ) 84  #r¥_¶ay_¡©us 0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 0x00, 0x19, 0x58, \ 86 0x¯, 0x¯, 0x¯, 0x00 ) 88  #»q_Œack_nÙif 0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 0x00, 0x19, 0x58, \ 89 0x31, 0x00, 0x00, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00 ) 91  #r¥_Œack_nÙif 0x00, 0x11, 0x0e, 0x0F, 0x48, 0x00, 0x00, 0x19, 0x58, \ 93 0xFF, 0xFF, 0xFF, 0xFF ) 95  #»q_pos™iÚ_nÙif 0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 0x00, 0x19, \ 97 0x00, 0x00, 0x00 ) 99  #r¥_pos™iÚ_nÙif 0x00, 0x11, 0x0e, 0x0F, 0x48, 0x00, 0x00, 0x19, \ 101 0xFF, 0xFF, 0xFF ) 103  #»q_¡©us_nÙif 0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 0x00, 0x19, \ 105 0x00, 0x00, 0x00 ) 107  #r¥_¡©us_nÙif 0x00, 0x11, 0x0e, 0x0D, 0x48, 0x00, 0x00, 0x19, \ 108 0x58, 0x31, 0x00, 0x00, 0x01, 0x01, 0x00 ) 110  #»q_–e_©Œ 0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 0x00, 0x19, 0x58, \ 112 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07 ) 114  #r¥_–e_©Œ 0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 0x00, 0x19, 0x58, \ 120 0x30 ) 122 cÚ¡  pdu_£t gpdus [] = { 123 { ¿w_pdu ( »q_dsc ),„aw_pdu( r¥_dsc ) }, 124 { ¿w_pdu ( »q_g‘ ),„aw_pdu( r¥_g‘ ) }, 125 { ¿w_pdu ( »q_cfg ),„aw_pdu( r¥_cfg ) }, 126 { ¿w_pdu ( »q_Ý’ ),„aw_pdu( r¥_Ý’ ) }, 127 { ¿w_pdu ( »q_þo£ ),„aw_pdu( r¥_þo£ ) }, 128 { ¿w_pdu ( »q_¡¬t ),„aw_pdu( r¥_¡¬t ) }, 129 { ¿w_pdu ( »q_su¥’d ),„aw_pdu( r¥_su¥’d ) }, 130 { ’d_pdu ,ƒnd_pdu }, 133  emu_l2ÿp_cid_d©a ga2dp_d©a = { 134 . pdu = pdus , 137  emu_l2ÿp_cid_d©a gavrý_d©a ; 139  bŒc_–em’t_©Œ_v®_t g–e_©Œs [2] = { 141 . ©Œ_id = BTRC_MEDIA_ATTR_TITLE , 142 . g‹xt = {0x47, 0x69, 0x76, 0x65, 0x20, 0x50, 0x65, 0x61, 0x63, 0x65, 146 . g©Œ_id = BTRC_MEDIA_ATTR_PLAYING_TIME , 147 . g‹xt = {0x31, 0x30, 0x33, 0x30, 0x30, 0x30} 151  bŒc_–em’t_©Œ_v®_t gexp_©Œs [2]; 153  $´št_avrý (cÚ¡ * ¡r , * u£r_d©a ) 155 `‹¡”_debug ("avrý: %s", ¡r ); 156 } } 158  $avrý_cid_hook_cb (cÚ¡ * d©a , ušt16_t Ën , * u£r_d©a ) 160  ¡• *step; 161 ušt8_t pdu , ev’t ; 163 `utž_hexdump ('>', d©a , Ën , ´št_avrý , NULL ); 165 pdu = (( ušt8_t *è d©a )[9]; 166  pdu ) { 167  AVRCP_GET_PLAY_STATUS : 168 ¡• = `g_Ãw0 (step, 1); 169 ¡• -> ÿÎback = CB_AVRCP_PLAY_STATUS_RSP ; 170 ¡• -> ÿÎback_»suÉ . sÚg_Ëngth = `g‘_be32 ( d©a + 13); 171 ¡• -> ÿÎback_»suÉ . sÚg_pos™iÚ = `g‘_be32 ( d©a + 17); 172 ¡• -> ÿÎback_»suÉ . ¶ay_¡©us = (( ušt8_t *è d©a )[21]; 173 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 175  AVRCP_REGISTER_NOTIFICATION : 176 ev’t = (( ušt8_t *è d©a )[13]; 177  ev’t ) { 179 ¡• = `g_Ãw0 (step, 1); 180 ¡• -> ÿÎback = CB_AVRCP_REG_NOTIF_RSP ; 181 ¡• -> ÿÎback_»suÉ . ¶ay_¡©us = 182 (( ušt8_t *è d©a )[14]; 183 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 187 ¡• = `g_Ãw0 (step, 1); 188 ¡• -> ÿÎback = CB_AVRCP_REG_NOTIF_RSP ; 189 ¡• -> ÿÎback_»suÉ . rc_šdex = `g‘_be64 ( d©a + 14); 190 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 194 ¡• = `g_Ãw0 (step, 1); 195 ¡• -> ÿÎback = CB_AVRCP_REG_NOTIF_RSP ; 196 ¡• -> ÿÎback_»suÉ . sÚg_pos™iÚ = 197 `g‘_be32 ( d©a + 14); 198 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 202  AVRCP_GET_ELEMENT_ATTRIBUTES : 203 ¡• = `g_Ãw0 (step, 1); 204 ¡• -> ÿÎback = CB_AVRCP_GET_ATTR_RSP ; 205 ¡• -> ÿÎback_»suÉ . num_of_©Œs = (( ušt8_t *è d©a )[13]; 207 `mem£t ( exp_©Œs , 0, 2 * ( bŒc_–em’t_©Œ_v®_t )); 208 exp_©Œs [0]. ©Œ_id = `g‘_be16 ( d©a + 16); 209 `memýy ( exp_©Œs [0]. ‹xt , d©a + 22, 19); 210 exp_©Œs [1]. ©Œ_id = `g‘_be16 ( d©a + 43); 211 `memýy ( exp_©Œs [1]. ‹xt , d©a + 49, 6); 212 ¡• -> ÿÎback_»suÉ . ©Œs = exp_©Œs ; 213 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 216 } } 218  $avrý_cÚÃù_»que¡_cb ( ušt16_t hªdË , ušt16_ˆ cid , 219 * u£r_d©a ) 221  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 222  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 223  emu_l2ÿp_cid_d©a * cid_d©a = u£r_d©a ; 225 cid_d©a -> hªdË = handle; 226 cid_d©a -> cid = cid; 228 `btho¡_add_cid_hook ( btho¡ , hªdË , cid , avrý_cid_hook_cb , cid_d©a ); 229 } } 231  emu_£t_l2ÿp_d©a gavrý_£tup_d©a = { 232 . psm = 23, 233 . gfunc = avrý_cÚÃù_»que¡_cb , 234 . gu£r_d©a = & avrý_d©a , 237  $a2dp_cÚÃù_»que¡_cb ( ušt16_t hªdË , ušt16_ˆ cid , 238 * u£r_d©a ) 240  emu_l2ÿp_cid_d©a * cid_d©a = u£r_d©a ; 242 ià( cid_d©a -> hªdË ) 245 cid_d©a -> hªdË = handle; 246 cid_d©a -> cid = cid; 247 avrý_d©a . hªdË = handle; 248 avrý_d©a . cid = cid; 250 `‹¡”_hªdË_l2ÿp_d©a_exchªge ( cid_d©a ); 251 } } 253  emu_£t_l2ÿp_d©a ga2dp_£tup_d©a = { 254 . psm = 25, 255 . gfunc = a2dp_cÚÃù_»que¡_cb , 256 . gu£r_d©a = & a2dp_d©a , 259  emu_£t_l2ÿp_d©a gsdp_£tup_d©a = { 260 . psm = 1, 261 . gfunc = ‹¡”_g’”ic_cÚÃù_cb , 262 . gu£r_d©a = & sdp_d©a , 265  $avrý_cÚÃù_aùiÚ () 267  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 268 cÚ¡ ušt8_t * addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 269  ¡• *¡• = `g_Ãw0 (step, 1); 270 bt_bdaddr_t bdaddr ; 272 sdp_d©a . hªdË = 0; 273 sdp_d©a . cid = 0; 275 a2dp_d©a . hªdË = 0; 276 a2dp_d©a . cid = 0; 278 avrý_d©a . hªdË = 0; 279 avrý_d©a . cid = 0; 281 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è addr , & bdaddr ); 283 ¡• -> aùiÚ_¡©us = d©a -> if_a2dp -> `cÚÃù (& bdaddr ); 285 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 286 } } 288  $avrý_discÚÃù_aùiÚ () 290  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 291 cÚ¡ ušt8_t * addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 292  ¡• *¡• = `g_Ãw0 (step, 1); 293 bt_bdaddr_t bdaddr ; 295 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è addr , & bdaddr ); 297 ¡• -> aùiÚ_¡©us = d©a -> if_a2dp -> `discÚÃù (& bdaddr ); 299 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 300 } } 302  $avrý_g‘_¶ay_¡©us_»q () 304  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 305  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 306 cÚ¡  iovec pdu = `¿w_pdu ( »q_¶ay_¡©us ); 307  ¡• *¡• = `g_Ãw0 (step, 1); 309 `btho¡_£nd_cid_v ( btho¡ , avrý_d©a . hªdË ,‡vrý_d©a. cid , & pdu , 1); 310 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 311 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 312 } } 314  $avrý_g‘_¶ay_¡©us_r¥ () 316  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 317  ¡• *¡• = `g_Ãw0 (step, 1); 319 ¡• -> aùiÚ_¡©us = d©a -> if_avrý -> `g‘_¶ay_¡©us_r¥ (0x00, 321 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 322 } } 324  $avrý_»g_nÙif_Œack_chªged_»q () 326  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 327  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 328 cÚ¡  iovec pdu = `¿w_pdu ( »q_Œack_nÙif ); 329  ¡• *¡• = `g_Ãw0 (step, 1); 331 `btho¡_£nd_cid_v ( btho¡ , avrý_d©a . hªdË ,‡vrý_d©a. cid , & pdu , 1); 332 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 333 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 334 } } 336  $avrý_»g_nÙif_Œack_chªged_r¥ () 338  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 339  ¡• *¡• = `g_Ãw0 (step, 1); 340 ušt64_t Œack ; 341 bŒc_»gi¡”_nÙifiÿtiÚ_t »g ; 343 Œack = 0xffffffffffffffff; 344 `memýy ( »g . Œack , &Œack, ( bŒc_uid_t )); 345 ¡• -> aùiÚ_¡©us = d©a -> if_avrý -> `»gi¡”_nÙifiÿtiÚ_r¥ ( 346 BTRC_EVT_TRACK_CHANGE , 347 BTRC_NOTIFICATION_TYPE_INTERIM , & »g ); 349 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 350 } } 352  $avrý_»g_nÙif_¶ay_pos™iÚ_chªged_»q () 354  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 355  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 356 cÚ¡  iovec pdu = `¿w_pdu ( »q_pos™iÚ_nÙif ); 357  ¡• *¡• = `g_Ãw0 (step, 1); 359 `btho¡_£nd_cid_v ( btho¡ , avrý_d©a . hªdË ,‡vrý_d©a. cid , & pdu , 1); 360 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 361 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 362 } } 364  $avrý_»g_nÙif_¶ay_pos™iÚ_chªged_r¥ () 366  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 367  ¡• *¡• = `g_Ãw0 (step, 1); 368 bŒc_»gi¡”_nÙifiÿtiÚ_t »g ; 370 »g . sÚg_pos = 0xffffffff; 371 ¡• -> aùiÚ_¡©us = d©a -> if_avrý -> `»gi¡”_nÙifiÿtiÚ_r¥ ( 372 BTRC_EVT_PLAY_POS_CHANGED , 373 BTRC_NOTIFICATION_TYPE_INTERIM , & »g ); 375 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 376 } } 378  $avrý_»g_nÙif_¶ay_¡©us_chªged_»q () 380  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 381  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 382 cÚ¡  iovec pdu = `¿w_pdu ( »q_¡©us_nÙif ); 383  ¡• *¡• = `g_Ãw0 (step, 1); 385 `btho¡_£nd_cid_v ( btho¡ , avrý_d©a . hªdË ,‡vrý_d©a. cid , & pdu , 1); 386 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 387 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 388 } } 390  $avrý_»g_nÙif_¶ay_¡©us_chªged_r¥ () 392  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 393  ¡• *¡• = `g_Ãw0 (step, 1); 394 bŒc_»gi¡”_nÙifiÿtiÚ_t »g ; 396 »g . ¶ay_¡©us = BTRC_PLAYSTATE_STOPPED ; 397 ¡• -> aùiÚ_¡©us = d©a -> if_avrý -> `»gi¡”_nÙifiÿtiÚ_r¥ ( 398 BTRC_EVT_PLAY_STATUS_CHANGED , 399 BTRC_NOTIFICATION_TYPE_CHANGED , & »g ); 401 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 402 } } 404  $avrý_g‘_–em’t_©Œibu‹s_»q () 406  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 407  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 408 cÚ¡  iovec pdu = `¿w_pdu ( »q_–e_©Œ ); 409  ¡• *¡• = `g_Ãw0 (step, 1); 411 `btho¡_£nd_cid_v ( btho¡ , avrý_d©a . hªdË ,‡vrý_d©a. cid , & pdu , 1); 412 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 413 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 414 } } 416  $avrý_g‘_–em’t_©Œibu‹s_r¥ () 418  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 419  ¡• *¡• = `g_Ãw0 (step, 1); 421 ¡• -> aùiÚ_¡©us = d©a -> if_avrý -> `g‘_–em’t_©Œ_r¥ (2, 422 –e_©Œs ); 424 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 425 } } 427  ‹¡_ÿ£ g‹¡_ÿ£s [] = { 428 TEST_CASE_BREDRLE ("AVRCP Init", 429 ACTION_SUCCESS ( dummy_aùiÚ , NULL ), 431 TEST_CASE_BREDRLE ("AVRCP Connect - Success", 432 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 433 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 434 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 435 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 436 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 437 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & sdp_£tup_d©a ), 438 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & a2dp_£tup_d©a ), 439 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & avrý_£tup_d©a ), 440 ACTION_SUCCESS ( avrý_cÚÃù_aùiÚ , NULL ), 441 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 442 BTAV_CONNECTION_STATE_CONNECTING ), 443 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 444 BTAV_CONNECTION_STATE_CONNECTED ), 445 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 446 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 448 TEST_CASE_BREDRLE ("AVRCP Disconnect - Success", 449 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 450 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 451 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 452 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 453 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 454 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & sdp_£tup_d©a ), 455 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & a2dp_£tup_d©a ), 456 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & avrý_£tup_d©a ), 457 ACTION_SUCCESS ( avrý_cÚÃù_aùiÚ , NULL ), 458 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 459 BTAV_CONNECTION_STATE_CONNECTING ), 460 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 461 BTAV_CONNECTION_STATE_CONNECTED ), 462 ACTION_SUCCESS ( avrý_discÚÃù_aùiÚ , NULL ), 463 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 464 BTAV_CONNECTION_STATE_DISCONNECTING ), 465 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 466 BTAV_CONNECTION_STATE_DISCONNECTED ), 467 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 468 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 470 TEST_CASE_BREDRLE ("AVRCP GetPlayStatus - Success", 471 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 472 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 473 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 474 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 475 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 476 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & sdp_£tup_d©a ), 477 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & a2dp_£tup_d©a ), 478 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & avrý_£tup_d©a ), 479 ACTION_SUCCESS ( avrý_cÚÃù_aùiÚ , NULL ), 480 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 481 BTAV_CONNECTION_STATE_CONNECTING ), 482 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 483 BTAV_CONNECTION_STATE_CONNECTED ), 484 ACTION_SUCCESS ( avrý_g‘_¶ay_¡©us_»q , NULL ), 485 CALLBACK ( CB_AVRCP_PLAY_STATUS_REQ ), 486 ACTION_SUCCESS ( avrý_g‘_¶ay_¡©us_r¥ , NULL ), 487 CALLBACK_RC_PLAY_STATUS ( CB_AVRCP_PLAY_STATUS_RSP , 0xbbbbbbbb, 489 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 490 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 492 TEST_CASE_BREDRLE ("AVRCP RegNotifTrackChanged - Success", 493 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 494 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 495 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 496 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 497 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 498 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & sdp_£tup_d©a ), 499 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & a2dp_£tup_d©a ), 500 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & avrý_£tup_d©a ), 501 ACTION_SUCCESS ( avrý_cÚÃù_aùiÚ , NULL ), 502 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 503 BTAV_CONNECTION_STATE_CONNECTING ), 504 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 505 BTAV_CONNECTION_STATE_CONNECTED ), 506 ACTION_SUCCESS ( avrý_»g_nÙif_Œack_chªged_»q , NULL ), 507 CALLBACK ( CB_AVRCP_REG_NOTIF_REQ ), 508 ACTION_SUCCESS ( avrý_»g_nÙif_Œack_chªged_r¥ , NULL ), 509 CALLBACK_RC_REG_NOTIF_TRACK_CHANGED ( CB_AVRCP_REG_NOTIF_RSP , 511 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 512 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 514 TEST_CASE_BREDRLE ("AVRCP RegNotifPlayPositionChanged - Success", 515 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 516 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 517 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 518 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 519 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 520 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & sdp_£tup_d©a ), 521 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & a2dp_£tup_d©a ), 522 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & avrý_£tup_d©a ), 523 ACTION_SUCCESS ( avrý_cÚÃù_aùiÚ , NULL ), 524 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 525 BTAV_CONNECTION_STATE_CONNECTING ), 526 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 527 BTAV_CONNECTION_STATE_CONNECTED ), 528 ACTION_SUCCESS ( avrý_»g_nÙif_¶ay_pos™iÚ_chªged_»q , NULL ), 529 CALLBACK ( CB_AVRCP_REG_NOTIF_REQ ), 530 ACTION_SUCCESS ( avrý_»g_nÙif_¶ay_pos™iÚ_chªged_r¥ , NULL ), 531 CALLBACK_RC_REG_NOTIF_POSITION_CHANGED ( CB_AVRCP_REG_NOTIF_RSP , 533 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 534 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 536 TEST_CASE_BREDRLE ("AVRCP RegNotifPlayStatusChanged - Success", 537 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 538 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 539 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 540 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 541 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 542 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & sdp_£tup_d©a ), 543 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & a2dp_£tup_d©a ), 544 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & avrý_£tup_d©a ), 545 ACTION_SUCCESS ( avrý_cÚÃù_aùiÚ , NULL ), 546 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 547 BTAV_CONNECTION_STATE_CONNECTING ), 548 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 549 BTAV_CONNECTION_STATE_CONNECTED ), 550 ACTION_SUCCESS ( avrý_»g_nÙif_¶ay_¡©us_chªged_»q , NULL ), 551 CALLBACK ( CB_AVRCP_REG_NOTIF_REQ ), 552 ACTION_SUCCESS ( avrý_»g_nÙif_¶ay_¡©us_chªged_r¥ , NULL ), 553 CALLBACK_RC_REG_NOTIF_STATUS_CHANGED ( CB_AVRCP_REG_NOTIF_RSP , 555 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 556 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 558 TEST_CASE_BREDRLE ("AVRCP GetElementAttributes - Success", 559 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 560 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 561 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 562 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 563 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 564 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & sdp_£tup_d©a ), 565 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & a2dp_£tup_d©a ), 566 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & avrý_£tup_d©a ), 567 ACTION_SUCCESS ( avrý_cÚÃù_aùiÚ , NULL ), 568 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 569 BTAV_CONNECTION_STATE_CONNECTING ), 570 CALLBACK_AV_CONN_STATE ( CB_A2DP_CONN_STATE , 571 BTAV_CONNECTION_STATE_CONNECTED ), 572 ACTION_SUCCESS ( avrý_g‘_–em’t_©Œibu‹s_»q , NULL ), 573 CALLBACK ( CB_AVRCP_GET_ATTR_REQ ), 574 ACTION_SUCCESS ( avrý_g‘_–em’t_©Œibu‹s_r¥ , NULL ), 575 CALLBACK_RC_GET_ELEMENT_ATTRIBUTES ( CB_AVRCP_GET_ATTR_RSP , 2, 576 –e_©Œs ), 577 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 578 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 582  queue * $g‘_avrý_‹¡s () 584 ušt16_t i = 0; 586 li¡ = `queue_Ãw (); 587 ià(! li¡ ) 588  NULL ; 590 ; i < ( ‹¡_ÿ£s ) / (test_cases[0]); ++i) 591 ià(! `queue_push_ž ( li¡ , & ‹¡_ÿ£s [ i ])) { 592 `queue_de¡roy ( li¡ , NULL ); 593  NULL ; 596  li¡ ; 597 } } 599  $»move_avrý_‹¡s () 601 `queue_de¡roy ( li¡ , NULL ); 602 } } @android/tester-bluetooth.c 17  ~<¡dboÞ.h > 19  ~"emuÏtÜ/btho¡.h " 20  ~"¤c/sh¬ed/‹¡”.h " 21  ~"¤c/sh¬ed/queue.h " 22  ~"‹¡”-maš.h " 24  queue * gli¡ ; 26  bt_bdaddr_t gemu_bdaddr_v® = { 27 . add»ss = { 0x00, 0xaa, 0x01, 0x00, 0x00, 0x00 }, 29  bt_´Ý”ty_t g´Ý_emu_bdaddr = { 30 . ty³ = BT_PROPERTY_BDADDR , 31 . gv® = & emu_bdaddr_v® , 32 . gËn = ( emu_bdaddr_v® ), 35 cÚ¡  gemu_bdÇme_v® [] = "BlueZ for Android"; 36  bt_´Ý”ty_t g´Ý_emu_bdÇme = { 37 . ty³ = BT_PROPERTY_BDNAME , 38 . gv® = & emu_bdÇme_v® , 39 . gËn = ( emu_bdÇme_v® ) - 1, 42 cÚ¡  gemu_uuids_v® [] = { 50  bt_´Ý”ty_t g´Ý_emu_uuids = { 51 . ty³ = BT_PROPERTY_UUIDS , 52 . gv® = & emu_uuids_v® , 53 . gËn = ( emu_uuids_v® ), 56  ušt32_t gemu_cod_v® = 0x00020c; 57  bt_´Ý”ty_t g´Ý_emu_cod = { 58 . ty³ = BT_PROPERTY_CLASS_OF_DEVICE , 59 . gv® = & emu_cod_v® , 60 . gËn = ( emu_cod_v® ), 63  bt_deviû_ty³_t gemu_tod_du®_v® = BT_DEVICE_DEVTYPE_DUAL ; 64  bt_´Ý”ty_t g´Ý_emu_du®_tod = { 65 . ty³ = BT_PROPERTY_TYPE_OF_DEVICE , 66 . gv® = & emu_tod_du®_v® , 67 . gËn = ( emu_tod_du®_v® ), 70  bt_sÿn_mode_t gemu_sÿn_mode_v® = BT_SCAN_MODE_NONE ; 71  bt_´Ý”ty_t g´Ý_emu_sÿn_mode = { 72 . ty³ = BT_PROPERTY_ADAPTER_SCAN_MODE , 73 . gv® = & emu_sÿn_mode_v® , 74 . gËn = ( emu_sÿn_mode_v® ), 77  ušt32_t gemu_disc_timeout_v® = 120; 78  bt_´Ý”ty_t g´Ý_emu_disc_timeout = { 79 . ty³ = BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT , 80 . gv® = & emu_disc_timeout_v® , 81 . gËn = ( emu_disc_timeout_v® ), 84  bt_´Ý”ty_t g´Ý_emu_bÚded_devs = { 85 . ty³ = BT_PROPERTY_ADAPTER_BONDED_DEVICES , 86 . gv® = NULL , 87 . gËn = 0, 90  bt_bdaddr_t gemu_»mÙe_bdaddr_v® = { 91 . add»ss = { 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00 }, 93  bt_´Ý”ty_t g´Ý_emu_»mÙe_bdadr = { 94 . ty³ = BT_PROPERTY_BDADDR , 95 . gv® = & emu_»mÙe_bdaddr_v® , 96 . gËn = ( emu_»mÙe_bdaddr_v® ), 98  bt_aùiÚ_d©a g´Ý_emu_»mÙe_bË_bdaddr_»q = { 99 . addr = & emu_»mÙe_bdaddr_v® , 100 . g´Ý_ty³ = BT_PROPERTY_BDADDR , 103  ušt32_t gemu_»mÙe_ty³_v® = BT_DEVICE_DEVTYPE_BREDR ; 105  ušt32_t gemu_»mÙe_tod_bË_v® = BT_DEVICE_DEVTYPE_BLE ; 106  bt_´Ý”ty_t g´Ý_emu_»mÙe_bË_tod_´Ý = { 107 . ty³ = BT_PROPERTY_TYPE_OF_DEVICE , 108 . gv® = & emu_»mÙe_tod_bË_v® , 109 . gËn = ( emu_»mÙe_tod_bË_v® ), 111  bt_aùiÚ_d©a g´Ý_emu_»mÙe_bË_tod_»q = { 112 . addr = & emu_»mÙe_bdaddr_v® , 113 . g´Ý_ty³ = BT_PROPERTY_TYPE_OF_DEVICE , 116  št32_t gemu_»mÙe_rssi_v® = -60; 118  št32_t gemu_»mÙe_bË_rssi_v® = 127; 119  bt_´Ý”ty_t g´Ý_emu_»mÙe_bË_rssi_´Ý = { 120 . ty³ = BT_PROPERTY_REMOTE_RSSI , 121 . gv® = & emu_»mÙe_bË_rssi_v® , 122 . gËn = ( emu_»mÙe_bË_rssi_v® ), 124  bt_aùiÚ_d©a g´Ý_emu_»mÙe_bË_rssi_»q = { 125 . addr = & emu_»mÙe_bdaddr_v® , 126 . g´Ý_ty³ = BT_PROPERTY_REMOTE_RSSI , 129 cÚ¡  gemu_»mÙe_bdÇme_v® [] = "00:AA:01:01:00:00"; 130  bt_´Ý”ty_t g´Ý_emu_»mÙe_bË_bdÇme_´Ý = { 131 . ty³ = BT_PROPERTY_BDNAME , 132 . gv® = & emu_»mÙe_bdÇme_v® , 133 . gËn = ( emu_»mÙe_bdÇme_v® ) - 1, 135  bt_aùiÚ_d©a g´Ý_emu_»mÙe_bË_bdÇme_»q = { 136 . addr = & emu_»mÙe_bdaddr_v® , 137 . g´Ý_ty³ = BT_PROPERTY_BDNAME , 140  ušt32_t gemu_»mÙe_cod_v® = 0; 141  bt_´Ý”ty_t g´Ý_emu_»mÙe_bË_cod_´Ý = { 142 . ty³ = BT_PROPERTY_CLASS_OF_DEVICE , 143 . gv® = & emu_»mÙe_cod_v® , 144 . gËn = ( emu_»mÙe_cod_v® ), 146  bt_aùiÚ_d©a g´Ý_emu_»mÙe_bË_cod_»q = { 147 . addr = & emu_»mÙe_bdaddr_v® , 148 . g´Ý_ty³ = BT_PROPERTY_CLASS_OF_DEVICE , 151  bt_´Ý”ty_t g´Ý_emu_»mÙe_bË_uuids_´Ý = { 152 . ty³ = BT_PROPERTY_UUIDS , 153 . gv® = NULL , 154 . gËn = 0, 156  bt_aùiÚ_d©a g´Ý_emu_»mÙe_bË_uuids_»q = { 157 . addr = & emu_»mÙe_bdaddr_v® , 158 . g´Ý_ty³ = BT_PROPERTY_UUIDS , 161  bt_´Ý”ty_t g´Ý_emu_»mÙe_bË_time¡amp_´Ý = { 162 . ty³ = BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP , 163 . gv® = NULL , 164 . gËn = 4, 166  bt_aùiÚ_d©a g´Ý_emu_»mÙe_bË_time¡amp_»q = { 167 . addr = & emu_»mÙe_bdaddr_v® , 168 . g´Ý_ty³ = BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP , 171  bt_aùiÚ_d©a g´Ý_emu_»mÙe_bË_sÿn_mode_»q = { 172 . addr = & emu_»mÙe_bdaddr_v® , 173 . g´Ý_ty³ = BT_PROPERTY_ADAPTER_SCAN_MODE , 176  bt_aùiÚ_d©a g´Ý_emu_»mÙe_bË_bÚdeddev_»q = { 177 . addr = & emu_»mÙe_bdaddr_v® , 178 . g´Ý_ty³ = BT_PROPERTY_ADAPTER_BONDED_DEVICES , 181  bt_aùiÚ_d©a g´Ý_emu_»mÙe_bË_disùimeout_»q = { 182 . addr = & emu_»mÙe_bdaddr_v® , 183 . g´Ý_ty³ = BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT , 186  bt_aùiÚ_d©a g´Ý_emu_»mÙe_bË_v”šfo_»q = { 187 . addr = & emu_»mÙe_bdaddr_v® , 188 . g´Ý_ty³ = BT_PROPERTY_REMOTE_VERSION_INFO , 191 cÚ¡  g´Ý_‹¡_âame_v® [] = "FriendlyTestName"; 192  bt_´Ý”ty_t g´Ý_emu_»mÙe_bË_âame_´Ý = { 193 . ty³ = BT_PROPERTY_REMOTE_FRIENDLY_NAME , 194 . gv® = & ´Ý_‹¡_âame_v® , 195 . gËn = ( ´Ý_‹¡_âame_v® ) - 1, 197  bt_aùiÚ_d©a g´Ý_emu_»mÙe_bË_âame_»q = { 198 . addr = & emu_»mÙe_bdaddr_v® , 199 . g´Ý_ty³ = BT_PROPERTY_REMOTE_FRIENDLY_NAME , 200 . g´Ý = & ´Ý_emu_»mÙe_bË_âame_´Ý , 203  bt_pš_code_t gemu_pš_v®ue = { 204 . pš = { 0x30, 0x30, 0x30, 0x30 }, 206  bt_pš_code_t gemu_pš_šv®id_v®ue = { 207 . pš = { 0x30, 0x10, 0x30, 0x30 }, 209  bt_aùiÚ_d©a gemu_pš_£t_»q = { 210 . addr = & emu_»mÙe_bdaddr_v® , 211 . gpš = & emu_pš_v®ue , 212 . gpš_Ën = 4, 214  bt_aùiÚ_d©a gemu_pš_£t_šv®id_»q = { 215 . addr = & emu_»mÙe_bdaddr_v® , 216 . gpš = & emu_pš_šv®id_v®ue , 217 . gpš_Ën = 4, 220  bt_´Ý”ty_t g´Ý_emu_deçuÉ_£t [] = { 221 { BT_PROPERTY_BDADDR , ( emu_bdaddr_v® ), NULL }, 222 { BT_PROPERTY_BDNAME , ( emu_bdÇme_v® ) - 1, &emu_bdname_val }, 223 { BT_PROPERTY_CLASS_OF_DEVICE , ( ušt32_t ), NULL }, 224 { BT_PROPERTY_TYPE_OF_DEVICE , ( emu_tod_du®_v® ), 225 & emu_tod_du®_v® }, 226 { BT_PROPERTY_ADAPTER_SCAN_MODE , ( emu_sÿn_mode_v® ), 227 & emu_sÿn_mode_v® }, 228 { BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT , ( emu_disc_timeout_v® ), 229 & emu_disc_timeout_v® }, 230 { BT_PROPERTY_ADAPTER_BONDED_DEVICES , 0, NULL }, 231 { BT_PROPERTY_UUIDS , ( emu_uuids_v® ), &emu_uuids_val }, 234  bt_´Ý”ty_t g´Ý_emu_»mÙe_bËs_deçuÉ_£t [] = { 235 { BT_PROPERTY_BDADDR , ( emu_»mÙe_bdaddr_v® ), 236 & emu_»mÙe_bdaddr_v® }, 237 { BT_PROPERTY_TYPE_OF_DEVICE , ( emu_»mÙe_tod_bË_v® ), 238 & emu_»mÙe_tod_bË_v® }, 239 { BT_PROPERTY_REMOTE_RSSI , ( emu_»mÙe_bË_rssi_v® ), 240 & emu_»mÙe_bË_rssi_v® }, 243  bt_´Ý”ty_t g´Ý_emu_»mÙes_deçuÉ_£t [] = { 244 { BT_PROPERTY_BDADDR , ( emu_»mÙe_bdaddr_v® ), 245 & emu_»mÙe_bdaddr_v® }, 246 { BT_PROPERTY_TYPE_OF_DEVICE , ( emu_»mÙe_ty³_v® ), 247 & emu_»mÙe_ty³_v® }, 248 { BT_PROPERTY_REMOTE_RSSI , ( emu_»mÙe_rssi_v® ), 249 & emu_»mÙe_rssi_v® }, 252  bt_´Ý”ty_t g´Ý_emu_»mÙe_bËs_qu”y_£t [] = { 253 { BT_PROPERTY_TYPE_OF_DEVICE , ( emu_»mÙe_tod_bË_v® ), 254 & emu_»mÙe_tod_bË_v® }, 255 { BT_PROPERTY_CLASS_OF_DEVICE , ( emu_»mÙe_cod_v® ), 256 & emu_»mÙe_cod_v® }, 257 { BT_PROPERTY_REMOTE_RSSI , ( emu_»mÙe_bË_rssi_v® ), 258 & emu_»mÙe_bË_rssi_v® }, 259 { BT_PROPERTY_BDNAME , ( emu_»mÙe_bdÇme_v® ) - 1, 260 & emu_»mÙe_bdÇme_v® }, 261 { BT_PROPERTY_UUIDS , 0, NULL }, 262 { BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP , 4, NULL }, 265  bt_´Ý”ty_t g´Ý_emu_»mÙes_pš_»q_£t [] = { 266 { BT_PROPERTY_BDADDR , ( emu_»mÙe_bdaddr_v® ), 267 & emu_»mÙe_bdaddr_v® }, 268 { BT_PROPERTY_CLASS_OF_DEVICE , ( emu_»mÙe_cod_v® ), 269 & emu_»mÙe_cod_v® }, 270 { BT_PROPERTY_BDNAME , ( emu_»mÙe_bdÇme_v® ) - 1, 271 & emu_»mÙe_bdÇme_v® }, 274  g‹¡_bdÇme [] = "test_bdname"; 275  bt_´Ý”ty_t g´Ý_‹¡_bdÇme = { 276 . ty³ = BT_PROPERTY_BDNAME , 277 . gv® = ‹¡_bdÇme , 278 . gËn = ( ‹¡_bdÇme ) - 1, 280  bt_aùiÚ_d©a g´Ý_‹¡_»mÙe_bË_bdÇme_»q = { 281 . addr = & emu_»mÙe_bdaddr_v® , 282 . g´Ý_ty³ = BT_PROPERTY_BDNAME , 283 . g´Ý = & ´Ý_‹¡_bdÇme , 286  bt_sÿn_mode_t g‹¡_sÿn_mode_cÚÃùabË_discov”abË = 287 BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE ; 288  bt_´Ý”ty_t g´Ý_‹¡_sÿnmode_cÚn_discov = { 289 . ty³ = BT_PROPERTY_ADAPTER_SCAN_MODE , 290 . gv® = & ‹¡_sÿn_mode_cÚÃùabË_discov”abË , 291 . gËn = ( bt_sÿn_mode_t ), 294  ušt32_t g‹¡_disùimeout_v® = 600; 295  bt_´Ý”ty_t g´Ý_‹¡_disùimeout = { 296 . ty³ = BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT , 297 . gv® = & ‹¡_disùimeout_v® , 298 . gËn = ( ‹¡_disùimeout_v® ), 300  bt_aùiÚ_d©a g´Ý_‹¡_»mÙe_bË_disc_timeout_»q = { 301 . addr = & emu_»mÙe_bdaddr_v® , 302 . g´Ý_ty³ = BT_PROPERTY_ADAPTER_DISCOVERY_TIMEOUT , 303 . g´Ý = & ´Ý_‹¡_disùimeout , 306  g‹¡_uuids_v® [] = { 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 309  bt_´Ý”ty_t g´Ý_‹¡_uuid = { 310 . ty³ = BT_PROPERTY_UUIDS , 311 . gv® = & ‹¡_uuids_v® , 312 . gËn = ( ‹¡_uuids_v® ), 314  bt_aùiÚ_d©a g´Ý_‹¡_»mÙe_bË_uuids_»q = { 315 . addr = & emu_»mÙe_bdaddr_v® , 316 . g´Ý_ty³ = BT_PROPERTY_UUIDS , 317 . g´Ý = & ´Ý_‹¡_uuid , 320  ušt32_t g‹¡_cod_v® = 0; 321  bt_´Ý”ty_t g´Ý_‹¡_cod = { 322 . ty³ = BT_PROPERTY_CLASS_OF_DEVICE , 323 . gv® = & ‹¡_cod_v® , 324 . gËn = ( ‹¡_cod_v® ), 326  bt_aùiÚ_d©a g´Ý_‹¡_»mÙe_bË_cod_»q = { 327 . addr = & emu_»mÙe_bdaddr_v® , 328 . g´Ý_ty³ = BT_PROPERTY_CLASS_OF_DEVICE , 329 . g´Ý = & ´Ý_‹¡_cod , 332  ušt32_t g‹¡_tod_v® = BT_DEVICE_DEVTYPE_BLE ; 333  bt_´Ý”ty_t g´Ý_‹¡_tod = { 334 . ty³ = BT_PROPERTY_TYPE_OF_DEVICE , 335 . gv® = & ‹¡_tod_v® , 336 . gËn = ( ‹¡_tod_v® ), 338  bt_aùiÚ_d©a g´Ý_‹¡_»mÙe_bË_tod_»q = { 339 . addr = & emu_»mÙe_bdaddr_v® , 340 . g´Ý_ty³ = BT_PROPERTY_TYPE_OF_DEVICE , 341 . g´Ý = & ´Ý_‹¡_tod , 344  št32_t g‹¡_»mÙe_rssi_v® = -9; 345  bt_´Ý”ty_t g´Ý_‹¡_»mÙe_rssi = { 346 . ty³ = BT_PROPERTY_REMOTE_RSSI , 347 . gv® = & ‹¡_»mÙe_rssi_v® , 348 . gËn = ( ‹¡_»mÙe_rssi_v® ), 350  bt_aùiÚ_d©a g´Ý_‹¡_»mÙe_bË_rssi_»q = { 351 . addr = & emu_»mÙe_bdaddr_v® , 352 . g´Ý_ty³ = BT_PROPERTY_REMOTE_RSSI , 353 . g´Ý = & ´Ý_‹¡_»mÙe_rssi , 356  bt_£rviû_»cÜd_t g‹¡_¤vc_»cÜd_v® = { 357 . uuid = { {0x00} }, 358 . gchªÃl = 12, 359 . gÇme = "bt_name", 361  bt_´Ý”ty_t g´Ý_‹¡_¤vc_»cÜd = { 362 . ty³ = BT_PROPERTY_SERVICE_RECORD , 363 . gv® = & ‹¡_¤vc_»cÜd_v® , 364 . gËn = ( ‹¡_¤vc_»cÜd_v® ), 366  bt_aùiÚ_d©a g´Ý_‹¡_»mÙe_bË_¤vc_»cÜd_»q = { 367 . addr = & emu_»mÙe_bdaddr_v® , 368 . g´Ý_ty³ = BT_PROPERTY_SERVICE_RECORD , 369 . g´Ý = & ´Ý_‹¡_¤vc_»cÜd , 372  bt_bdaddr_t g‹¡_bdaddr_v® = { 373 . add»ss = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 375  bt_´Ý”ty_t g´Ý_‹¡_bdaddr = { 376 . ty³ = BT_PROPERTY_BDADDR , 377 . gv® = & ‹¡_bdaddr_v® , 378 . gËn = ( ‹¡_bdaddr_v® ), 380  bt_aùiÚ_d©a g´Ý_‹¡_»mÙe_bË_bdaddr_»q = { 381 . addr = & emu_»mÙe_bdaddr_v® , 382 . g´Ý_ty³ = BT_PROPERTY_BDADDR , 383 . g´Ý = & ´Ý_‹¡_bdaddr , 385  bt_aùiÚ_d©a g´Ý_‹¡_bdaddr_»q = { 386 . addr = & ‹¡_bdaddr_v® , 387 . g´Ý_ty³ = BT_PROPERTY_BDADDR , 388 . g´Ý = & ´Ý_‹¡_bdaddr , 391  bt_sÿn_mode_t g£rÝ_sÿn_mode_cÚn_v® = BT_SCAN_MODE_CONNECTABLE ; 393  bt_´Ý”ty_t g´Ý_‹¡_sÿn_mode_cÚn = { 394 . ty³ = BT_PROPERTY_ADAPTER_SCAN_MODE , 395 . gv® = & £rÝ_sÿn_mode_cÚn_v® , 396 . gËn = ( £rÝ_sÿn_mode_cÚn_v® ), 399  bt_sÿn_mode_t g‹¡_sÿn_mode_nÚe_v® = BT_SCAN_MODE_NONE ; 400  bt_´Ý”ty_t g´Ý_‹¡_sÿn_mode_nÚe = { 401 . ty³ = BT_PROPERTY_ADAPTER_SCAN_MODE , 402 . gv® = & ‹¡_sÿn_mode_nÚe_v® , 403 . gËn = ( ‹¡_sÿn_mode_nÚe_v® ), 405  bt_aùiÚ_d©a g´Ý_‹¡_»mÙe_bË_sÿnmode_»q = { 406 . addr = & emu_»mÙe_bdaddr_v® , 407 . g´Ý_ty³ = BT_PROPERTY_ADAPTER_SCAN_MODE , 408 . g´Ý = & ´Ý_‹¡_sÿn_mode_nÚe , 411  bt_bdaddr_t g‹¡_bÚded_dev_addr_v® = { 412 . add»ss = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 }, 414  bt_´Ý”ty_t g´Ý_‹¡_bÚded_dev_addr = { 415 . ty³ = BT_PROPERTY_ADAPTER_BONDED_DEVICES , 416 . gv® = & ‹¡_bÚded_dev_addr_v® , 417 . gËn = ( ‹¡_bÚded_dev_addr_v® ), 419  bt_aùiÚ_d©a g´Ý_‹¡_bË_bÚded_dev_»q = { 420 . addr = & emu_»mÙe_bdaddr_v® , 421 . g´Ý_ty³ = BT_PROPERTY_ADAPTER_BONDED_DEVICES , 422 . g´Ý = & ´Ý_‹¡_bÚded_dev_addr , 425  ušt32_t g‹¡_»mÙe_time¡amp_v® = 42; 426  bt_´Ý”ty_t g´Ý_‹¡_»mÙe_bË_time¡amp_´Ý = { 427 . ty³ = BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP , 428 . gv® = & ‹¡_»mÙe_time¡amp_v® , 429 . gËn = ( ‹¡_»mÙe_time¡amp_v® ), 431  bt_aùiÚ_d©a g´Ý_‹¡_»mÙe_bË_time¡amp_»q = { 432 . addr = & emu_»mÙe_bdaddr_v® , 433 . g´Ý_ty³ = BT_PROPERTY_REMOTE_DEVICE_TIMESTAMP , 434 . g´Ý = & ´Ý_‹¡_»mÙe_bË_time¡amp_´Ý , 437  bt_aùiÚ_d©a gs¥_cÚfœm_acû±_»¶y = { 438 . addr = & emu_»mÙe_bdaddr_v® , 439 . gs¥_v¬ŸÁ = BT_SSP_VARIANT_PASSKEY_CONFIRMATION , 440 . gacû± = TRUE , 443  bt_aùiÚ_d©a gs¥_cÚfœm_»jeù_»¶y = { 444 . addr = & emu_»mÙe_bdaddr_v® , 445 . gs¥_v¬ŸÁ = BT_SSP_VARIANT_PASSKEY_CONFIRMATION , 446 . gacû± = FALSE , 449  bt_aùiÚ_d©a gno_šput_no_ouut_io_ÿp = { 450 . io_ÿp = 0x03, 453  bt_aùiÚ_d©a gdi¥Ïy_yes_no_io_ÿp = { 454 . io_ÿp = 0x01, 457  ušt16_t g‹¡_cÚn_hªdË = 0; 459  $cÚn_cb ( ušt16_t hªdË , * u£r_d©a ) 461  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 462  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 464 `‹¡”_´št ("New cÚÃùiÚ w™h hªdË 0x%04x", hªdË ); 466 ‹¡_cÚn_hªdË = hªdË ; 468 `btho¡_»que¡_auth ( btho¡ , hªdË ); 469 } } 471  ‹¡_ÿ£ g‹¡_ÿ£s [] = { 472 TEST_CASE_BREDRLE ("Bluetooth Init", 473 ACTION_SUCCESS ( dummy_aùiÚ , NULL ), 475 TEST_CASE_BREDRLE ("Bluetooth Enable - Success", 476 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 477 CALLBACK_ADAPTER_PROPS ( ´Ý_emu_deçuÉ_£t , 8), 478 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 480 TEST_CASE_BREDRLE ("Bluetooth Enable - Success 2", 481 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 482 CALLBACK_ADAPTER_PROPS ( ´Ý_emu_deçuÉ_£t , 8), 483 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 484 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 486 TEST_CASE_BREDRLE ("Bluetooth Disable - Success", 487 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 488 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 489 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 490 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 492 TEST_CASE_BREDRLE ("Bluetooth Set BDNAME - Success", 493 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 494 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 495 ACTION_SUCCESS ( bt_£t_´Ý”ty_aùiÚ , & ´Ý_‹¡_bdÇme ), 496 CALLBACK_ADAPTER_PROPS (& ´Ý_‹¡_bdÇme , 1), 498 TEST_CASE_BREDRLE ("Bluetooth Set SCAN_MODE - Success", 499 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 500 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 501 ACTION_SUCCESS ( bt_£t_´Ý”ty_aùiÚ , 502 & ´Ý_‹¡_sÿnmode_cÚn_discov ), 503 CALLBACK_ADAPTER_PROPS (& ´Ý_‹¡_sÿnmode_cÚn_discov , 1), 505 TEST_CASE_BREDRLE ("Bluetooth Set DISCOVERY_TIMEOUT - Success", 506 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 507 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 508 ACTION_SUCCESS ( bt_£t_´Ý”ty_aùiÚ , & ´Ý_‹¡_disùimeout ), 509 CALLBACK_ADAPTER_PROPS (& ´Ý_‹¡_disùimeout , 1), 511 TEST_CASE_BREDRLE ("Bluetooth Get BDADDR - Success", 512 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 513 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 514 ACTION_SUCCESS ( bt_g‘_´Ý”ty_aùiÚ , & ´Ý_emu_bdaddr ), 515 CALLBACK_ADAPTER_PROPS (& ´Ý_emu_bdaddr , 1), 517 TEST_CASE_BREDRLE ("Bluetooth Get BDNAME - Success", 518 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 519 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 520 ACTION_SUCCESS ( bt_g‘_´Ý”ty_aùiÚ , & ´Ý_emu_bdÇme ), 521 CALLBACK_ADAPTER_PROPS (& ´Ý_emu_bdÇme , 1), 523 TEST_CASE_BREDRLE ("Bluetooth Set UUID - Fail", 524 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 525 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 526 ACTION_FAIL ( bt_£t_´Ý”ty_aùiÚ , & ´Ý_‹¡_uuid ), 528 TEST_CASE_BREDRLE ("Bluetooth Set CLASS_OF_DEVICE - Fail", 529 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 530 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 531 ACTION_FAIL ( bt_£t_´Ý”ty_aùiÚ , & ´Ý_‹¡_cod ), 533 TEST_CASE_BREDRLE ("Bluetooth Set TYPE_OF_DEVICE - Fail", 534 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 535 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 536 ACTION_FAIL ( bt_£t_´Ý”ty_aùiÚ , & ´Ý_‹¡_tod ), 538 TEST_CASE_BREDRLE ("Bluetooth Set REMOTE_RSSI - Fail", 539 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 540 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 541 ACTION_FAIL ( bt_£t_´Ý”ty_aùiÚ , & ´Ý_‹¡_»mÙe_rssi ), 543 TEST_CASE_BREDRLE ("Bluetooth Set SERVICE_RECORD - Fail", 544 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 545 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 546 ACTION_FAIL ( bt_£t_´Ý”ty_aùiÚ , & ´Ý_‹¡_¤vc_»cÜd ), 548 TEST_CASE_BREDRLE ("Bluetooth Set BDADDR - Fail", 549 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 550 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 551 ACTION_FAIL ( bt_£t_´Ý”ty_aùiÚ , & ´Ý_‹¡_bdaddr ), 553 TEST_CASE_BREDRLE ("Bluetooth Set SCAN_MODE_CONNECTABLE - Success", 554 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 555 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 556 ACTION_SUCCESS ( bt_£t_´Ý”ty_aùiÚ , 557 & ´Ý_‹¡_sÿn_mode_cÚn ), 558 CALLBACK_ADAPTER_PROPS (& ´Ý_‹¡_sÿn_mode_cÚn , 1), 560 TEST_CASE_BREDRLE ("Bluetooth Set BONDED_DEVICES - Fail", 561 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 562 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 563 ACTION_FAIL ( bt_£t_´Ý”ty_aùiÚ , & ´Ý_‹¡_bÚded_dev_addr ), 565 TEST_CASE_BREDRLE ("Bluetooth Get CLASS_OF_DEVICE - Success", 566 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 567 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 568 ACTION_SUCCESS ( bt_g‘_´Ý”ty_aùiÚ , & ´Ý_emu_cod ), 569 CALLBACK_ADAPTER_PROPS (& ´Ý_emu_cod , 1), 571 TEST_CASE_BREDRLE ("Bluetooth Get TYPE_OF_DEVICE - Success", 572 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 573 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 574 ACTION_SUCCESS ( bt_g‘_´Ý”ty_aùiÚ , & ´Ý_emu_du®_tod ), 575 CALLBACK_ADAPTER_PROPS (& ´Ý_emu_du®_tod , 1), 577 TEST_CASE_BREDRLE ("Bluetooth Get SCAN_MODE - Success", 578 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 579 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 580 ACTION_SUCCESS ( bt_g‘_´Ý”ty_aùiÚ , & ´Ý_emu_sÿn_mode ), 581 CALLBACK_ADAPTER_PROPS (& ´Ý_emu_sÿn_mode , 1), 583 TEST_CASE_BREDRLE ("Bluetooth Get DISCOVERY_TIMEOUT - Success", 584 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 585 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 586 ACTION_SUCCESS ( bt_g‘_´Ý”ty_aùiÚ , & ´Ý_emu_disc_timeout ), 587 CALLBACK_ADAPTER_PROPS (& ´Ý_emu_disc_timeout , 1), 589 TEST_CASE_BREDRLE ("Bluetooth Get UUIDS - Success", 590 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 591 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 592 ACTION_SUCCESS ( bt_g‘_´Ý”ty_aùiÚ , & ´Ý_emu_uuids ), 593 CALLBACK_ADAPTER_PROPS (& ´Ý_emu_uuids , 1), 595 TEST_CASE_BREDRLE ("Bluetooth Get BONDED_DEVICES - Success", 596 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 597 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 598 ACTION_SUCCESS ( bt_g‘_´Ý”ty_aùiÚ , & ´Ý_emu_bÚded_devs ), 599 CALLBACK_ADAPTER_PROPS (& ´Ý_emu_bÚded_devs , 1), 601 TEST_CASE_BREDRLE ("Bluetooth Set SCAN_MODE - Success 2", 602 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 603 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 604 ACTION_SUCCESS ( bt_£t_´Ý”ty_aùiÚ , 605 & ´Ý_‹¡_sÿn_mode_nÚe ), 606 CALLBACK_ADAPTER_PROPS (& ´Ý_‹¡_sÿn_mode_nÚe , 1), 608 TEST_CASE_BREDRLE ("Bluetooth Discovery Start - Success", 609 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 610 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 611 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 612 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 613 BT_DISCOVERY_STARTED ), 615 TEST_CASE_BREDRLE ("Bluetooth Discovery Start - Done", 616 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 617 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 618 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 619 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 620 BT_DISCOVERY_STARTED ), 621 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 623 TEST_CASE_BREDRLE ("Bluetooth Discovery Stop - Success", 624 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 625 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 626 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 627 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 628 BT_DISCOVERY_STARTED ), 629 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 630 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 631 BT_DISCOVERY_STOPPED ), 633 TEST_CASE_BREDRLE ("Bluetooth Discovery Stop - Done", 634 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 635 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 636 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 637 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 638 BT_DISCOVERY_STARTED ), 639 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 640 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 641 BT_DISCOVERY_STOPPED ), 642 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 644 TEST_CASE_BREDRLE ("Bluetooth Discovery Device Found", 645 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 646 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 647 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 648 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 649 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 650 BT_DISCOVERY_STARTED ), 651 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙe_bËs_deçuÉ_£t , 3), 652 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 653 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 654 BT_DISCOVERY_STOPPED ), 656 TEST_CASE_BREDRLE ("Bluetooth Device Get Props - Success", 657 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 658 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 659 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 660 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 661 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 662 BT_DISCOVERY_STARTED ), 663 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 664 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 665 BT_DISCOVERY_STOPPED ), 666 ACTION_SUCCESS ( bt_g‘_deviû_´Ýs_aùiÚ , 667 & emu_»mÙe_bdaddr_v® ), 668 CALLBACK_DEVICE_PROPS ( ´Ý_emu_»mÙe_bËs_qu”y_£t , 6), 670 TEST_CASE_BREDRLE ("Bluetooth Device Get BDNAME - Success", 671 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 672 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 673 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 674 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 675 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 676 BT_DISCOVERY_STARTED ), 677 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 678 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 679 BT_DISCOVERY_STOPPED ), 680 ACTION_SUCCESS ( bt_g‘_deviû_´Ý_aùiÚ , 681 & ´Ý_emu_»mÙe_bË_bdÇme_»q ), 682 CALLBACK_DEVICE_PROPS (& ´Ý_emu_»mÙe_bË_bdÇme_´Ý , 1), 684 TEST_CASE_BREDRLE ("Bluetooth Device Get UUIDS - Success", 685 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 686 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 687 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 688 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 689 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 690 BT_DISCOVERY_STARTED ), 691 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 692 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 693 BT_DISCOVERY_STOPPED ), 694 ACTION_SUCCESS ( bt_g‘_deviû_´Ý_aùiÚ , 695 & ´Ý_emu_»mÙe_bË_uuids_»q ), 696 CALLBACK_DEVICE_PROPS (& ´Ý_emu_»mÙe_bË_uuids_´Ý , 1), 698 TEST_CASE_BREDRLE ("Bluetooth Device Get COD - Success", 699 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 700 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 701 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 702 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 703 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 704 BT_DISCOVERY_STARTED ), 705 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 706 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 707 BT_DISCOVERY_STOPPED ), 708 ACTION_SUCCESS ( bt_g‘_deviû_´Ý_aùiÚ , 709 & ´Ý_emu_»mÙe_bË_cod_»q ), 710 CALLBACK_DEVICE_PROPS (& ´Ý_emu_»mÙe_bË_cod_´Ý , 1), 712 TEST_CASE_BREDRLE ("Bluetooth Device Get TOD - Success", 713 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 714 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 715 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 716 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 717 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 718 BT_DISCOVERY_STARTED ), 719 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 720 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 721 BT_DISCOVERY_STOPPED ), 722 ACTION_SUCCESS ( bt_g‘_deviû_´Ý_aùiÚ , 723 & ´Ý_emu_»mÙe_bË_tod_»q ), 724 CALLBACK_DEVICE_PROPS (& ´Ý_emu_»mÙe_bË_tod_´Ý , 1), 726 TEST_CASE_BREDRLE ("Bluetooth Device Get RSSI - Success", 727 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 728 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 729 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 730 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 731 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 732 BT_DISCOVERY_STARTED ), 733 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 734 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 735 BT_DISCOVERY_STOPPED ), 736 ACTION_SUCCESS ( bt_g‘_deviû_´Ý_aùiÚ , 737 & ´Ý_emu_»mÙe_bË_rssi_»q ), 738 CALLBACK_DEVICE_PROPS (& ´Ý_emu_»mÙe_bË_rssi_´Ý , 1), 740 TEST_CASE_BREDRLE ("Bluetooth Device Get TIMESTAMP - Success", 741 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 742 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 743 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 744 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 745 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 746 BT_DISCOVERY_STARTED ), 747 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 748 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 749 BT_DISCOVERY_STOPPED ), 750 ACTION_SUCCESS ( bt_g‘_deviû_´Ý_aùiÚ , 751 & ´Ý_emu_»mÙe_bË_time¡amp_»q ), 752 CALLBACK_DEVICE_PROPS (& ´Ý_emu_»mÙe_bË_time¡amp_´Ý , 1), 754 TEST_CASE_BREDRLE ("Bluetooth Device Get BDADDR - Fail", 755 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 756 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 757 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 758 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 759 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 760 BT_DISCOVERY_STARTED ), 761 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 762 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 763 BT_DISCOVERY_STOPPED ), 764 ACTION_FAIL ( bt_g‘_deviû_´Ý_aùiÚ , 765 & ´Ý_emu_»mÙe_bË_bdaddr_»q ), 767 TEST_CASE_BREDRLE ("Bluetooth Device Get SCAN_MODE - Fail", 768 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 769 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 770 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 771 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 772 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 773 BT_DISCOVERY_STARTED ), 774 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 775 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 776 BT_DISCOVERY_STOPPED ), 777 ACTION_FAIL ( bt_g‘_deviû_´Ý_aùiÚ , 778 & ´Ý_emu_»mÙe_bË_sÿn_mode_»q ), 780 TEST_CASE_BREDRLE ("Bluetooth Device Get BONDED_DEVICES - Fail", 781 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 782 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 783 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 784 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 785 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 786 BT_DISCOVERY_STARTED ), 787 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 788 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 789 BT_DISCOVERY_STOPPED ), 790 ACTION_FAIL ( bt_g‘_deviû_´Ý_aùiÚ , 791 & ´Ý_emu_»mÙe_bË_bÚdeddev_»q ), 793 TEST_CASE_BREDRLE ("Bluetooth Device Get DISCOVERY_TIMEOUT - Fail", 794 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 795 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 796 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 797 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 798 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 799 BT_DISCOVERY_STARTED ), 800 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 801 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 802 BT_DISCOVERY_STOPPED ), 803 ACTION_FAIL ( bt_g‘_deviû_´Ý_aùiÚ , 804 & ´Ý_emu_»mÙe_bË_disùimeout_»q ), 806 TEST_CASE_BREDRLE ("Bluetooth Device Get VERSION_INFO - Fail", 807 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 808 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 809 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 810 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 811 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 812 BT_DISCOVERY_STARTED ), 813 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 814 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 815 BT_DISCOVERY_STOPPED ), 816 ACTION_FAIL ( bt_g‘_deviû_´Ý_aùiÚ , 817 & ´Ý_emu_»mÙe_bË_v”šfo_»q ), 819 TEST_CASE_BREDRLE ("Bluetooth Device Get FRIENDLY_NAME - Fail", 820 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 821 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 822 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 823 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 824 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 825 BT_DISCOVERY_STARTED ), 826 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 827 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 828 BT_DISCOVERY_STOPPED ), 829 ACTION_FAIL ( bt_g‘_deviû_´Ý_aùiÚ , 830 & ´Ý_emu_»mÙe_bË_âame_»q ), 832 TEST_CASE_BREDRLE ("Bluetooth Device Set FRIENDLY_NAME - Success", 833 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 834 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 835 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 836 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 837 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 838 BT_DISCOVERY_STARTED ), 839 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 840 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 841 BT_DISCOVERY_STOPPED ), 842 ACTION_SUCCESS ( bt_£t_deviû_´Ý_aùiÚ , 843 & ´Ý_emu_»mÙe_bË_âame_»q ), 844 ACTION_SUCCESS ( bt_g‘_deviû_´Ý_aùiÚ , 845 & ´Ý_emu_»mÙe_bË_âame_»q ), 846 CALLBACK_DEVICE_PROPS (& ´Ý_emu_»mÙe_bË_âame_´Ý , 1), 848 TEST_CASE_BREDRLE ("Bluetooth Device Set BDNAME - Fail", 849 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 850 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 851 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 852 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 853 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 854 BT_DISCOVERY_STARTED ), 855 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 856 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 857 BT_DISCOVERY_STOPPED ), 858 ACTION_FAIL ( bt_£t_deviû_´Ý_aùiÚ , 859 & ´Ý_‹¡_»mÙe_bË_bdÇme_»q ), 861 TEST_CASE_BREDRLE ("Bluetooth Device Set UUIDS - Fail", 862 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 863 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 864 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 865 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 866 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 867 BT_DISCOVERY_STARTED ), 868 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 869 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 870 BT_DISCOVERY_STOPPED ), 871 ACTION_FAIL ( bt_£t_deviû_´Ý_aùiÚ , 872 & ´Ý_‹¡_»mÙe_bË_uuids_»q ), 874 TEST_CASE_BREDRLE ("Bluetooth Device Set COD - Fail", 875 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 876 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 877 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 878 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 879 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 880 BT_DISCOVERY_STARTED ), 881 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 882 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 883 BT_DISCOVERY_STOPPED ), 884 ACTION_FAIL ( bt_£t_deviû_´Ý_aùiÚ , 885 & ´Ý_‹¡_»mÙe_bË_cod_»q ), 887 TEST_CASE_BREDRLE ("Bluetooth Device Set TOD - Fail", 888 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 889 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 890 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 891 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 892 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 893 BT_DISCOVERY_STARTED ), 894 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 895 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 896 BT_DISCOVERY_STOPPED ), 897 ACTION_FAIL ( bt_£t_deviû_´Ý_aùiÚ , 898 & ´Ý_‹¡_»mÙe_bË_tod_»q ), 900 TEST_CASE_BREDRLE ("Bluetooth Device Set RSSI - Fail", 901 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 902 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 903 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 904 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 905 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 906 BT_DISCOVERY_STARTED ), 907 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 908 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 909 BT_DISCOVERY_STOPPED ), 910 ACTION_FAIL ( bt_£t_deviû_´Ý_aùiÚ , 911 & ´Ý_‹¡_»mÙe_bË_rssi_»q ), 913 TEST_CASE_BREDRLE ("Bluetooth Device Set TIMESTAMP - Fail", 914 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 915 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 916 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 917 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 918 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 919 BT_DISCOVERY_STARTED ), 920 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 921 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 922 BT_DISCOVERY_STOPPED ), 923 ACTION_FAIL ( bt_£t_deviû_´Ý_aùiÚ , 924 & ´Ý_‹¡_»mÙe_bË_time¡amp_»q ), 926 TEST_CASE_BREDRLE ("Bluetooth Device Set BDADDR - Fail", 927 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 928 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 929 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 930 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 931 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 932 BT_DISCOVERY_STARTED ), 933 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 934 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 935 BT_DISCOVERY_STOPPED ), 936 ACTION_FAIL ( bt_£t_deviû_´Ý_aùiÚ , 937 & ´Ý_‹¡_»mÙe_bË_bdaddr_»q ), 939 TEST_CASE_BREDRLE ("Bluetooth Device Set SERVICE_RECORD - Fail", 940 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 941 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 942 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 943 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 944 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 945 BT_DISCOVERY_STARTED ), 946 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 947 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 948 BT_DISCOVERY_STOPPED ), 949 ACTION_FAIL ( bt_£t_deviû_´Ý_aùiÚ , 950 & ´Ý_‹¡_»mÙe_bË_¤vc_»cÜd_»q ), 952 TEST_CASE_BREDRLE ("Bluetooth Device Set SCAN_MODE - Fail", 953 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 954 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 955 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 956 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 957 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 958 BT_DISCOVERY_STARTED ), 959 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 960 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 961 BT_DISCOVERY_STOPPED ), 962 ACTION_FAIL ( bt_£t_deviû_´Ý_aùiÚ , 963 & ´Ý_‹¡_»mÙe_bË_sÿnmode_»q ), 965 TEST_CASE_BREDRLE ("Bluetooth Device Set BONDED_DEVICES - Fail", 966 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 967 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 968 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 969 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 970 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 971 BT_DISCOVERY_STARTED ), 972 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 973 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 974 BT_DISCOVERY_STOPPED ), 975 ACTION_FAIL ( bt_£t_deviû_´Ý_aùiÚ , 976 & ´Ý_‹¡_bË_bÚded_dev_»q ), 978 TEST_CASE_BREDRLE ("Bluetooth Device Set DISCOVERY_TIMEOUT - Fail", 979 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 980 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 981 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 982 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 983 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 984 BT_DISCOVERY_STARTED ), 985 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 986 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 987 BT_DISCOVERY_STOPPED ), 988 ACTION_FAIL ( bt_£t_deviû_´Ý_aùiÚ , 989 & ´Ý_‹¡_»mÙe_bË_disc_timeout_»q ), 991 TEST_CASE_BREDR ("Bluetooth Create Bond PIN - Success", 992 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 993 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 994 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 995 ACTION_SUCCESS ( emu_£t_pš_code_aùiÚ , & emu_pš_£t_»q ), 996 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 997 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 998 BT_DISCOVERY_STARTED ), 999 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_£t , 3), 1000 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 1001 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 1002 BT_DISCOVERY_STOPPED ), 1003 ACTION_SUCCESS ( bt_ü—‹_bÚd_aùiÚ , 1004 & ´Ý_‹¡_»mÙe_bË_bdaddr_»q ), 1005 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDING , 1006 & ´Ý_emu_»mÙe_bdadr , 1), 1007 CALLBACK_PROPS ( CB_BT_PIN_REQUEST , ´Ý_emu_»mÙes_pš_»q_£t , 1009 ACTION_SUCCESS ( bt_pš_»¶y_acû±_aùiÚ , 1010 & emu_pš_£t_»q ), 1011 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDED , 1012 & ´Ý_emu_»mÙe_bdadr , 1), 1014 TEST_CASE_BREDR ("Bluetooth Create Bond PIN - Bad PIN", 1015 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 1016 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 1017 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 1018 ACTION_SUCCESS ( emu_£t_pš_code_aùiÚ , & emu_pš_£t_»q ), 1019 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 1020 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 1021 BT_DISCOVERY_STARTED ), 1022 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_£t , 3), 1023 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 1024 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 1025 BT_DISCOVERY_STOPPED ), 1026 ACTION_SUCCESS ( bt_ü—‹_bÚd_aùiÚ , 1027 & ´Ý_‹¡_»mÙe_bË_bdaddr_»q ), 1028 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDING , 1029 & ´Ý_emu_»mÙe_bdadr , 1), 1030 CALLBACK_PROPS ( CB_BT_PIN_REQUEST , ´Ý_emu_»mÙes_pš_»q_£t , 1032 ACTION_SUCCESS ( bt_pš_»¶y_acû±_aùiÚ , 1033 & emu_pš_£t_šv®id_»q ), 1034 CALLBACK_BOND_STATE_FAILED ( BT_BOND_STATE_NONE , 1035 & ´Ý_emu_»mÙe_bdadr , 1, 1036 BT_STATUS_AUTH_FAILURE ), 1038 TEST_CASE_BREDR ("Bluetooth Create Bond SSP -Success", 1039 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 1040 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 1041 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 1042 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 1043 ACTION_SUCCESS ( emu_£t_io_ÿp , & di¥Ïy_yes_no_io_ÿp ), 1044 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 1045 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 1046 BT_DISCOVERY_STARTED ), 1047 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_£t , 3), 1048 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 1049 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 1050 BT_DISCOVERY_STOPPED ), 1051 ACTION_SUCCESS ( bt_ü—‹_bÚd_aùiÚ , 1052 & ´Ý_‹¡_»mÙe_bË_bdaddr_»q ), 1053 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDING , 1054 & ´Ý_emu_»mÙe_bdadr , 1), 1055 CALLBACK_SSP_REQ ( BT_SSP_VARIANT_PASSKEY_CONFIRMATION , 1056 ´Ý_emu_»mÙes_pš_»q_£t , 2), 1057 ACTION_SUCCESS ( bt_s¥_»¶y_acû±_aùiÚ , 1058 & s¥_cÚfœm_acû±_»¶y ), 1059 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDED , 1060 & ´Ý_emu_»mÙe_bdadr , 1), 1062 TEST_CASE_BREDR ("Bluetooth Create Bond SSP - Negative„eply", 1063 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 1064 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 1065 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 1066 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 1067 ACTION_SUCCESS ( emu_£t_io_ÿp , & di¥Ïy_yes_no_io_ÿp ), 1068 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 1069 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 1070 BT_DISCOVERY_STARTED ), 1071 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_£t , 3), 1072 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 1073 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 1074 BT_DISCOVERY_STOPPED ), 1075 ACTION_SUCCESS ( bt_ü—‹_bÚd_aùiÚ , 1076 & ´Ý_‹¡_»mÙe_bË_bdaddr_»q ), 1077 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDING , 1078 & ´Ý_emu_»mÙe_bdadr , 1), 1079 CALLBACK_SSP_REQ ( BT_SSP_VARIANT_PASSKEY_CONFIRMATION , 1080 ´Ý_emu_»mÙes_pš_»q_£t , 2), 1081 ACTION_SUCCESS ( bt_s¥_»¶y_acû±_aùiÚ , 1082 & s¥_cÚfœm_»jeù_»¶y ), 1083 CALLBACK_BOND_STATE_FAILED ( BT_BOND_STATE_NONE , 1084 & ´Ý_emu_»mÙe_bdadr , 1, 1085 BT_STATUS_AUTH_FAILURE ), 1087 TEST_CASE_BREDR ("Bluetooth Create Bond - No Discovery", 1088 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 1089 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 1090 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 1091 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 1092 ACTION_SUCCESS ( emu_£t_io_ÿp , & di¥Ïy_yes_no_io_ÿp ), 1093 ACTION_SUCCESS ( bt_ü—‹_bÚd_aùiÚ , 1094 & ´Ý_‹¡_»mÙe_bË_bdaddr_»q ), 1095 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDING , 1096 & ´Ý_emu_»mÙe_bdadr , 1), 1097 CALLBACK_SSP_REQ ( BT_SSP_VARIANT_PASSKEY_CONFIRMATION , 1098 ´Ý_emu_»mÙes_pš_»q_£t , 2), 1099 ACTION_SUCCESS ( bt_s¥_»¶y_acû±_aùiÚ , 1100 & s¥_cÚfœm_acû±_»¶y ), 1101 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDED , 1102 & ´Ý_emu_»mÙe_bdadr , 1), 1103 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 1104 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 1106 TEST_CASE_BREDR ("Bluetooth Create Bond - Bad Address", 1107 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 1108 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 1109 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 1110 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 1111 ACTION_SUCCESS ( bt_ü—‹_bÚd_aùiÚ , & ´Ý_‹¡_bdaddr_»q ), 1112 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDING , 1113 & ´Ý_‹¡_bdaddr , 1), 1114 CALLBACK_BOND_STATE_FAILED ( BT_BOND_STATE_NONE , 1115 & ´Ý_‹¡_bdaddr , 1, 1116 BT_STATUS_FAIL ), 1117 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 1118 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 1120 TEST_CASE_BREDR ("Bluetooth Cancel Bonding - Success", 1121 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 1122 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 1123 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 1124 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 1125 ACTION_SUCCESS ( emu_£t_io_ÿp , & di¥Ïy_yes_no_io_ÿp ), 1126 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 1127 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 1128 BT_DISCOVERY_STARTED ), 1129 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_£t , 3), 1130 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 1131 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 1132 BT_DISCOVERY_STOPPED ), 1133 ACTION_SUCCESS ( bt_ü—‹_bÚd_aùiÚ , 1134 & ´Ý_‹¡_»mÙe_bË_bdaddr_»q ), 1135 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDING , 1136 & ´Ý_emu_»mÙe_bdadr , 1), 1137 CALLBACK_SSP_REQ ( BT_SSP_VARIANT_PASSKEY_CONFIRMATION , 1138 ´Ý_emu_»mÙes_pš_»q_£t , 2), 1139 ACTION_SUCCESS ( bt_ÿnûl_bÚd_aùiÚ , & emu_»mÙe_bdaddr_v® ), 1140 CALLBACK_BOND_STATE_FAILED ( BT_BOND_STATE_NONE , 1141 & ´Ý_emu_»mÙe_bdadr , 1, 1142 BT_STATUS_FAIL ), 1143 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 1144 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 1146 TEST_CASE_BREDR ("Bluetooth Remove Bond - Success", 1147 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 1148 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 1149 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 1150 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 1151 ACTION_SUCCESS ( emu_£t_io_ÿp , & di¥Ïy_yes_no_io_ÿp ), 1152 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 1153 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 1154 BT_DISCOVERY_STARTED ), 1155 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_£t , 3), 1156 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 1157 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 1158 BT_DISCOVERY_STOPPED ), 1159 ACTION_SUCCESS ( bt_ü—‹_bÚd_aùiÚ , 1160 & ´Ý_‹¡_»mÙe_bË_bdaddr_»q ), 1161 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDING , 1162 & ´Ý_emu_»mÙe_bdadr , 1), 1163 CALLBACK_SSP_REQ ( BT_SSP_VARIANT_PASSKEY_CONFIRMATION , 1164 ´Ý_emu_»mÙes_pš_»q_£t , 2), 1165 ACTION_SUCCESS ( bt_s¥_»¶y_acû±_aùiÚ , 1166 & s¥_cÚfœm_acû±_»¶y ), 1167 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDED , 1168 & ´Ý_emu_»mÙe_bdadr , 1), 1169 ACTION_SUCCESS ( bt_»move_bÚd_aùiÚ , & emu_»mÙe_bdaddr_v® ), 1170 CALLBACK_BOND_STATE ( BT_BOND_STATE_NONE , 1171 & ´Ý_emu_»mÙe_bdadr , 1), 1172 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 1173 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 1175 TEST_CASE_BREDR ("Bluetooth Accept Bond - Just Works - Success", 1176 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 1177 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 1178 ACTION_SUCCESS ( bt_£t_´Ý”ty_aùiÚ , 1179 & ´Ý_‹¡_sÿnmode_cÚn_discov ), 1180 CALLBACK_ADAPTER_PROPS (& ´Ý_‹¡_sÿnmode_cÚn_discov , 1), 1181 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 1182 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 1183 ACTION_SUCCESS ( emu_£t_io_ÿp , & no_šput_no_ouut_io_ÿp ), 1184 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , cÚn_cb ), 1185 ACTION_SUCCESS ( emu_»mÙe_cÚÃù_hci_aùiÚ , NULL ), 1186 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDING , 1187 & ´Ý_emu_»mÙe_bdadr , 1), 1188 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDED , 1189 & ´Ý_emu_»mÙe_bdadr , 1), 1190 ACTION_SUCCESS ( bt_»move_bÚd_aùiÚ , & emu_»mÙe_bdaddr_v® ), 1191 CALLBACK_BOND_STATE ( BT_BOND_STATE_NONE , 1192 & ´Ý_emu_»mÙe_bdadr , 1), 1193 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 1194 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 1196 TEST_CASE_BREDR ("Bluetooth Accept Bond - No Bond - Success", 1197 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 1198 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 1199 ACTION_SUCCESS ( bt_£t_´Ý”ty_aùiÚ , 1200 & ´Ý_‹¡_sÿnmode_cÚn_discov ), 1201 CALLBACK_ADAPTER_PROPS (& ´Ý_‹¡_sÿnmode_cÚn_discov , 1), 1202 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 1203 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 1204 ACTION_SUCCESS ( emu_£t_io_ÿp , & no_šput_no_ouut_io_ÿp ), 1205 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , cÚn_cb ), 1206 ACTION_SUCCESS ( emu_»mÙe_cÚÃù_hci_aùiÚ , NULL ), 1207 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDING , 1208 & ´Ý_emu_»mÙe_bdadr , 1), 1209 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDED , 1210 & ´Ý_emu_»mÙe_bdadr , 1), 1211 ACTION_SUCCESS ( emu_»mÙe_discÚÃù_hci_aùiÚ , 1212 & ‹¡_cÚn_hªdË ), 1213 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 1214 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDING , 1215 & ´Ý_emu_»mÙe_bdadr , 1), 1216 CALLBACK_BOND_STATE ( BT_BOND_STATE_NONE , 1217 & ´Ý_emu_»mÙe_bdadr , 1), 1218 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 1222  queue * $g‘_blu‘oÙh_‹¡s () 1224 ušt16_t i = 0; 1226 li¡ = `queue_Ãw (); 1227 ià(! li¡ ) 1228  NULL ; 1230 ; i < ( ‹¡_ÿ£s ) / (test_cases[0]); ++i) 1231 ià(! `queue_push_ž ( li¡ , & ‹¡_ÿ£s [ i ])) { 1232 `queue_de¡roy ( li¡ , NULL ); 1233  NULL ; 1236  li¡ ; 1237 } } 1239  $»move_blu‘oÙh_‹¡s () 1241 `queue_de¡roy ( li¡ , NULL ); 1242 } } @android/tester-gatt.c 18  ~<¡dboÞ.h > 20  ~"emuÏtÜ/btho¡.h " 21  ~"lib/blu‘oÙh.h " 22  ~"¤c/sh¬ed/utž.h " 23  ~"¤c/sh¬ed/‹¡”.h " 24  ~"¤c/sh¬ed/queue.h " 25  ~"‹¡”-maš.h " 27  #ATT_HANDLE_SIZE 2 ) 29  #L2CAP_ATT_EXCHANGE_MTU_REQ 0x02 ) 30  #L2CAP_ATT_EXCHANGE_MTU_RSP 0x03 ) 31  #L2CAP_ATT_READ_REQ 0x0a ) 32  #L2CAP_ATT_READ_RSP 0x0b ) 33  #L2CAP_ATT_WRITE_REQ 0x12 ) 34  #L2CAP_ATT_WRITE_RSP 0x13 ) 35  #L2CAP_ATT_HANDLE_VALUE_NOTIFY 0x1b ) 36  #L2CAP_ATT_HANDLE_VALUE_IND 0x1d ) 38  #GATT_STATUS_SUCCESS 0x00000000 ) 39  #GATT_STATUS_FAILURE 0x00000101 ) 40  #GATT_STATUS_INS_AUTH 0x08 ) 42  #GATT_SERVER_DISCONNECTED 0 ) 43  #GATT_SERVER_CONNECTED 1 ) 45  #APP1_ID 1 ) 46  #APP2_ID 2 ) 48  #CONN1_ID 1 ) 49  #CONN2_ID 2 ) 51  #TRANS1_ID 1 ) 53  #BT_TRANSPORT_UNKNOWN 0x00 ) 55  #GATT_SERVER_TRANSPORT_LE 0x01 ) 56  #GATT_SERVER_TRANSPORT_BREDR 0x02 ) 57  #GATT_SERVER_TRANSPORT_LE_BREDR (0x01 | 0x02) ) 59  #GATT_WRITE_TYPE_NO_RESPONSE 0x01 ) 60  #GATT_WRITE_TYPE_DEFAULT 0x02 ) 61  #GATT_WRITE_TYPE_PREPARE 0x03 ) 62  #GATT_WRITE_TYPE_SIGNED 0x04 ) 64  #CHAR_PROP_BROADCAST 0x01 ) 65  #CHAR_PROP_READ 0x02 ) 66  #CHAR_PROP_WRITE_WITHOUT_RESPONSE 0x04 ) 67  #CHAR_PROP_WRITE 0x08 ) 68  #CHAR_PROP_NOTIFY 0x10 ) 69  #CHAR_PROP_INDICATE 0x20 ) 70  #CHAR_PROP_AUTHENTICATED_SIGNED_WRITES 0x40 ) 71  #CHAR_PROP_EXTENDED_PROPERTIES 0x80 ) 73  #CHAR_PERM_READ 0x0001 ) 74  #CHAR_PERM_READ_ENCRYPTED 0x0002 ) 75  #CHAR_PERM_READ_ENCRYPTED_MITM 0x0004 ) 76  #CHAR_PERM_WRITE 0x0010 ) 77  #CHAR_PERM_WRITE_ENCRYPTED 0x0020 ) 78  #CHAR_PERM_WRITE_ENCRYPTED_MITM 0x0040 ) 79  #CHAR_PERM_WRITE_SIGNED 0x0080 ) 80  #CHAR_PERM_WRITE_SIGNED_MITM 0x0100 ) 82  queue * gli¡ ; 84  g¤vc1_hªdË ; 85  gšc_¤vc1_hªdË ; 86  gch¬1_hªdË ; 88  s£t_©t_d©a { 89 * mto ; 90 * mäom ; 91  mËn ; 94  s©t_wr™e_»q_d©a { 95 * m©Œ_hªdË ; 96 ušt8_t * mv®ue ; 99  bt_uuid_t g­p1_uuid = { 100 . uu = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 104  bt_uuid_t g­p2_uuid = { 105 . uu = { 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 109  ušt8_t gv®ue_1 [] = {0x01}; 111  ušt8_t g©t_wr™e_»q_v®ue_1 [] = {0x00, 0x01, 0x02, 0x03}; 113  sg©t_cÚÃù_d©a { 114 cÚ¡  m­p_id ; 115 cÚ¡  mcÚn_id ; 118  sg©t_£¬ch_£rviû_d©a { 119 cÚ¡  mcÚn_id ; 120 bt_uuid_t * mfž‹r_uuid ; 123  sg‘_ch¬_d©a { 124 cÚ¡  mcÚn_id ; 125 btg©t_¤vc_id_t * m£rviû ; 128  sg‘_desc_d©a { 129 cÚ¡  mcÚn_id ; 130 btg©t_¤vc_id_t * m£rviû ; 131 btg©t_g©t_id_t * mch¬aù”i¡ic ; 132 btg©t_g©t_id_t * mdesc ; 135  sg‘_šþ_d©a { 136 cÚ¡  mcÚn_id ; 137 btg©t_¤vc_id_t * m£rviû ; 138 btg©t_¤vc_id_t * m¡¬t_£rviû ; 141  s»ad_ch¬_d©a { 142 cÚ¡  mcÚn_id ; 143 btg©t_¤vc_id_t * m£rviû ; 144 btg©t_g©t_id_t * mch¬aù”i¡ic ; 145  mauth_»q ; 148  s»ad_desc_d©a { 149 cÚ¡  mcÚn_id ; 150 btg©t_¤vc_id_t * m£rviû ; 151 btg©t_g©t_id_t * mch¬aù”i¡ic ; 152 btg©t_g©t_id_t * mdesütÜ ; 153  mauth_»q ; 156  swr™e_ch¬_d©a { 157  mcÚn_id ; 158 btg©t_¤vc_id_t * m£rviû ; 159 btg©t_g©t_id_t * mch¬aù”i¡ic ; 160  mwr™e_ty³ ; 161  mËn ; 162  mauth_»q ; 163 * mp_v®ue ; 166  swr™e_desc_d©a { 167  mcÚn_id ; 168 btg©t_¤vc_id_t * m£rviû ; 169 btg©t_g©t_id_t * mch¬aù”i¡ic ; 170 btg©t_g©t_id_t * mdesütÜ ; 171  mwr™e_ty³ ; 172  mËn ; 173  mauth_»q ; 174 * mp_v®ue ; 177  snÙif_d©a { 178  mcÚn_id ; 179 cÚ¡ bt_bdaddr_t * mbdaddr ; 180 btg©t_¤vc_id_t * m£rviû ; 181 btg©t_g©t_id_t * mch¬ac ; 184  sadd_£rviû_d©a { 185  m­p_id ; 186 btg©t_¤vc_id_t * m£rviû ; 187  mnum_hªdËs ; 190  sadd_šþuded_£rviû_d©a { 191  m­p_id ; 192 * mšc_¤vc_hªdË ; 193 * m¤vc_hªdË ; 195  sadd_ch¬_d©a { 196  m­p_id ; 197 * m¤vc_hªdË ; 198 bt_uuid_t * muuid ; 199  m´Ý”t›s ; 200  m³rmissiÚs ; 203  sadd_desc_d©a { 204  m­p_id ; 205 * m¤vc_hªdË ; 206 bt_uuid_t * muuid ; 207  m³rmissiÚs ; 210  s¡¬t_¤vc_d©a { 211  m­p_id ; 212 * m¤vc_hªdË ; 213  mŒª¥Üt ; 216  s¡Ý_¤vc_d©a { 217  m­p_id ; 218 * m¤vc_hªdË ; 221  sd–‘e_¤vc_d©a { 222  m­p_id ; 223 * m¤vc_hªdË ; 226  s£nd_šdiÿtiÚ_d©a { 227  m­p_id ; 228 * m©Œ_hªdË ; 229  mcÚn_id ; 230  mËn ; 231  mcÚfœm ; 232 * mp_v®ue ; 235  s£nd_»¥_d©a { 236  mcÚn_id ; 237  mŒªs_id ; 238  m¡©us ; 239 btg©t_»¥Ú£_t * m»¥Ú£ ; 242  bt_bdaddr_t gemu_»mÙe_bdaddr_v® = { 243 . add»ss = { 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00 }, 245  bt_deviû_ty³_t gemu_»mÙe_bË_deviû_ty³ = BT_DEVICE_DEVTYPE_BLE ; 247  bt_´Ý”ty_t g´Ý_emu_»mÙes_deçuÉ_£t [] = { 248 { BT_PROPERTY_BDADDR , ( emu_»mÙe_bdaddr_v® ), 249 & emu_»mÙe_bdaddr_v® }, 251  bt_´Ý”ty_t g´Ý_emu_»mÙes_deçuÉ_Ë_£t [] = { 252 { BT_PROPERTY_BDADDR , ( emu_»mÙe_bdaddr_v® ), 253 & emu_»mÙe_bdaddr_v® }, 254 { BT_PROPERTY_TYPE_OF_DEVICE , ( bt_deviû_ty³_t ), 255 & emu_»mÙe_bË_deviû_ty³ }, 258  bt_sÿn_mode_t g£rÝ_sÿn_mode_cÚn_v® = 259 BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE ; 261  bt_´Ý”ty_t g´Ý_‹¡_sÿn_mode_cÚn = { 262 . ty³ = BT_PROPERTY_ADAPTER_SCAN_MODE , 263 . gv® = & £rÝ_sÿn_mode_cÚn_v® , 264 . gËn = ( £rÝ_sÿn_mode_cÚn_v® ), 267  emu_l2ÿp_cid_d©a gcid_d©a ; 269  g©t_cÚÃù_d©a g­p1_cÚn_»q = { 270 . ­p_id = APP1_ID , 271 . gcÚn_id = CONN1_ID , 274  g©t_cÚÃù_d©a g­p1_cÚn2_»q = { 275 . ­p_id = APP1_ID , 276 . gcÚn_id = CONN2_ID , 279  g©t_cÚÃù_d©a g­p2_cÚn_»q = { 280 . ­p_id = APP2_ID , 281 . gcÚn_id = CONN2_ID , 284  g©t_£¬ch_£rviû_d©a g£¬ch_£rviûs_1 = { 285 . cÚn_id = CONN1_ID , 286 . gfž‹r_uuid = NULL , 289 cÚ¡  iovec gexchªge_mtu_»q_pdu = ¿w_pdu (0x02, 0xa0, 0x02); 290 cÚ¡  iovec gexchªge_mtu_»¥_pdu = ¿w_pdu (0x03, 0xa0, 0x02); 292  bt_aùiÚ_d©a gb—»r_ty³ = { 293 . b—»r_ty³ = BDADDR_LE_PUBLIC , 296  btg©t_¤vc_id_t g£rviû_1 = { 297 . is_´im¬y = Œue , 298 . gid = { 299 . š¡_id = 0, 300 . guuid . guu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 305  btg©t_¤vc_id_t g£rviû_2 = { 306 . is_´im¬y = Œue , 307 . gid = { 308 . š¡_id = 1, 309 . guuid . guu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 314  btg©t_¤vc_id_t g£rviû_add_1 = { 315 . is_´im¬y = Œue , 316 . gid = { 317 . š¡_id = 0, 318 . guuid . guu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 323  btg©t_¤vc_id_t g£rviû_add_2 = { 324 . is_´im¬y = Œue , 325 . gid = { 326 . š¡_id = 1, 327 . guuid . guu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 332  btg©t_¤vc_id_t g£rviû_add_3 = { 333 . is_´im¬y = Œue , 334 . gid = { 335 . š¡_id = 2, 336 . guuid . guu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 341  btg©t_¤vc_id_t gšþuded_1 = { 342 . is_´im¬y = çl£ , 343 . gid = { 344 . š¡_id = 1, 345 . guuid . guu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 350  btg©t_¤vc_id_t gšþuded_2 = { 351 . is_´im¬y = çl£ , 352 . gid = { 353 . š¡_id = 1, 354 . guuid . guu = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 359  btg©t_g©t_id_t gch¬aù”i¡ic_1 = { 360 . š¡_id = 1, 361 . guuid . guu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 365  btg©t_g©t_id_t gdesc_1 = { 366 . š¡_id = 1, 367 . guuid . guu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 371  btg©t_g©t_id_t gdesc_2 = { 372 . š¡_id = 2, 373 . guuid . guu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 377  btg©t_»ad_·¿ms_t g»ad_·¿ms_1 ; 378  btg©t_wr™e_·¿ms_t gwr™e_·¿ms_1 ; 379  btg©t_nÙify_·¿ms_t gnÙify_·¿ms_1 ; 381  g‘_ch¬_d©a gg‘_ch¬_d©a_1 = { 382 . cÚn_id = CONN1_ID , 383 . g£rviû = & £rviû_1 386  g‘_ch¬_d©a gg‘_ch¬_d©a_2 = { 387 . cÚn_id = CONN1_ID , 388 . g£rviû = & £rviû_2 391  g‘_desc_d©a gg‘_desc_d©a_1 = { 392 . cÚn_id = CONN1_ID , 393 . g£rviû = & £rviû_1 , 394 . gch¬aù”i¡ic = & ch¬aù”i¡ic_1 , 397  g‘_desc_d©a gg‘_desc_d©a_2 = { 398 . cÚn_id = CONN1_ID , 399 . g£rviû = & £rviû_1 , 400 . gch¬aù”i¡ic = & ch¬aù”i¡ic_1 , 401 . gdesc = & desc_1 , 404  »ad_ch¬_d©a g»ad_ch¬_d©a_1 = { 405 . cÚn_id = CONN1_ID , 406 . g£rviû = & £rviû_1 , 407 . gch¬aù”i¡ic = & ch¬aù”i¡ic_1 , 410  »ad_ch¬_d©a g»ad_ch¬_d©a_2 = { 411 . cÚn_id = CONN1_ID , 412 . g£rviû = & £rviû_2 , 413 . gch¬aù”i¡ic = & ch¬aù”i¡ic_1 , 416  »ad_desc_d©a g»ad_desc_d©a_1 = { 417 . cÚn_id = CONN1_ID , 418 . g£rviû = & £rviû_1 , 419 . gch¬aù”i¡ic = & ch¬aù”i¡ic_1 , 420 . gdesütÜ = & desc_1 , 423  »ad_desc_d©a g»ad_desc_d©a_2 = { 424 . cÚn_id = CONN1_ID , 425 . g£rviû = & £rviû_1 , 426 . gch¬aù”i¡ic = & ch¬aù”i¡ic_1 , 427 . gdesütÜ = & desc_2 , 430  g‘_šþ_d©a gg‘_šþ_d©a_1 = { 431 . cÚn_id = CONN1_ID , 432 . g£rviû = & £rviû_1 435  gv®ue_2 [] = {0x00, 0x01, 0x02, 0x03}; 437  wr™e_ch¬_d©a gwr™e_ch¬_d©a_1 = { 438 . cÚn_id = CONN1_ID , 439 . g£rviû = & £rviû_1 , 440 . gch¬aù”i¡ic = & ch¬aù”i¡ic_1 , 441 . gwr™e_ty³ = GATT_WRITE_TYPE_NO_RESPONSE , 442 . gËn = ( v®ue_2 ), 443 . gp_v®ue = v®ue_2 , 444 . gauth_»q = 0 447  wr™e_ch¬_d©a gwr™e_ch¬_d©a_2 = { 448 . cÚn_id = CONN1_ID , 449 . g£rviû = & £rviû_1 , 450 . gch¬aù”i¡ic = & ch¬aù”i¡ic_1 , 451 . gwr™e_ty³ = GATT_WRITE_TYPE_DEFAULT , 452 . gËn = ( v®ue_2 ), 453 . gp_v®ue = v®ue_2 , 454 . gauth_»q = 0 457  wr™e_desc_d©a gwr™e_desc_d©a_1 = { 458 . cÚn_id = CONN1_ID , 459 . g£rviû = & £rviû_1 , 460 . gch¬aù”i¡ic = & ch¬aù”i¡ic_1 , 461 . gdesütÜ = & desc_1 , 462 . gwr™e_ty³ = 2, 463 . gËn = ( v®ue_2 ), 464 . gauth_»q = 0, 465 . gp_v®ue = v®ue_2 , 468  wr™e_desc_d©a gwr™e_desc_d©a_2 = { 469 . cÚn_id = CONN1_ID , 470 . g£rviû = & £rviû_1 , 471 . gch¬aù”i¡ic = & ch¬aù”i¡ic_1 , 472 . gdesütÜ = & desc_2 , 473 . gwr™e_ty³ = 2, 474 . gËn = ( v®ue_2 ), 475 . gauth_»q = 0, 476 . gp_v®ue = v®ue_2 , 479  nÙif_d©a gnÙif_d©a_1 = { 480 . cÚn_id = CONN1_ID , 481 . g£rviû = & £rviû_1 , 482 . gch¬ac = & ch¬aù”i¡ic_1 , 483 . gbdaddr = & emu_»mÙe_bdaddr_v® , 486  add_£rviû_d©a gadd_£rviû_d©a_1 = { 487 . ­p_id = APP1_ID , 488 . g£rviû = & £rviû_add_1 , 489 . gnum_hªdËs = 1 492  add_£rviû_d©a gadd_£rviû_d©a_2 = { 493 . ­p_id = APP1_ID , 494 . g£rviû = & £rviû_add_2 , 495 . gnum_hªdËs = 1 498  add_£rviû_d©a gadd_£rviû_d©a_3 = { 499 . ­p_id = APP1_ID , 500 . g£rviû = & £rviû_add_3 , 501 . gnum_hªdËs = 1 504  add_£rviû_d©a gadd_£rviû_d©a_4 = { 505 . ­p_id = APP1_ID , 506 . g£rviû = & £rviû_add_1 , 507 . gnum_hªdËs = 2 510  add_£rviû_d©a gadd_£rviû_d©a_5 = { 511 . ­p_id = APP1_ID , 512 . g£rviû = & £rviû_add_1 , 513 . gnum_hªdËs = 3 516  add_£rviû_d©a gadd_£rviû_d©a_6 = { 517 . ­p_id = APP1_ID , 518 . g£rviû = & £rviû_add_1 , 519 . gnum_hªdËs = 4 522  add_£rviû_d©a gadd_bad_£rviû_d©a_1 = { 523 . ­p_id = APP1_ID , 524 . g£rviû = & £rviû_add_1 , 525 . gnum_hªdËs = 0 528  add_£rviû_d©a gadd_£c_£rviû_d©a_1 = { 529 . ­p_id = APP1_ID , 530 . g£rviû = & šþuded_1 , 531 . gnum_hªdËs = 1 534  g¤vc_bad_hªdË = -1; 536  add_šþuded_£rviû_d©a gadd_šc_£rviû_d©a_1 = { 537 . ­p_id = APP1_ID , 538 . gšc_¤vc_hªdË = & šc_¤vc1_hªdË , 539 . g¤vc_hªdË = & ¤vc1_hªdË 542  add_šþuded_£rviû_d©a gadd_bad_šc_£rviû_d©a_1 = { 543 . ­p_id = APP1_ID , 544 . gšc_¤vc_hªdË = & ¤vc_bad_hªdË , 545 . g¤vc_hªdË = & ¤vc1_hªdË 548  add_ch¬_d©a gadd_ch¬_d©a_1 = { 549 . ­p_id = APP1_ID , 550 . g¤vc_hªdË = & ¤vc1_hªdË , 551 . guuid = & ­p1_uuid , 552 . g´Ý”t›s = 0, 553 . g³rmissiÚs = 0 556  add_ch¬_d©a gadd_ch¬_d©a_2 = { 557 . ­p_id = APP1_ID , 558 . g¤vc_hªdË = & ¤vc1_hªdË , 559 . guuid = & ­p1_uuid , 560 . g´Ý”t›s = CHAR_PROP_WRITE , 561 . g³rmissiÚs = CHAR_PERM_WRITE 564  add_ch¬_d©a gadd_bad_ch¬_d©a_1 = { 565 . ­p_id = APP1_ID , 566 . g¤vc_hªdË = & ¤vc_bad_hªdË , 567 . guuid = & ­p1_uuid , 568 . g´Ý”t›s = 0, 569 . g³rmissiÚs = 0 572  add_desc_d©a gadd_bad_desc_d©a_1 = { 573 . ­p_id = APP1_ID , 574 . g¤vc_hªdË = & ¤vc_bad_hªdË , 575 . guuid = & ­p2_uuid , 576 . g³rmissiÚs = 0 579  add_desc_d©a gadd_bad_desc_d©a_2 = { 580 . ­p_id = APP2_ID , 581 . g¤vc_hªdË = & ¤vc1_hªdË , 582 . guuid = & ­p2_uuid , 583 . g³rmissiÚs = 0 586  add_desc_d©a gadd_desc_d©a_1 = { 587 . ­p_id = APP1_ID , 588 . g¤vc_hªdË = & ¤vc1_hªdË , 589 . guuid = & ­p2_uuid , 590 . g³rmissiÚs = 0 593  ¡¬t_¤vc_d©a g¡¬t_¤vc_d©a_1 = { 594 . ­p_id = APP1_ID , 595 . g¤vc_hªdË = & ¤vc1_hªdË , 596 . gŒª¥Üt = GATT_SERVER_TRANSPORT_LE_BREDR 599  ¡¬t_¤vc_d©a g¡¬t_¤vc_d©a_2 = { 600 . ­p_id = APP1_ID , 601 . g¤vc_hªdË = & ¤vc1_hªdË , 602 . gŒª¥Üt = GATT_SERVER_TRANSPORT_LE 605  ¡¬t_¤vc_d©a g¡¬t_bad_¤vc_d©a_1 = { 606 . ­p_id = APP1_ID , 607 . g¤vc_hªdË = & ¤vc_bad_hªdË , 608 . gŒª¥Üt = GATT_SERVER_TRANSPORT_LE 611  ¡¬t_¤vc_d©a g¡¬t_bad_¤vc_d©a_2 = { 612 . ­p_id = APP1_ID , 613 . g¤vc_hªdË = & ¤vc1_hªdË , 614 . gŒª¥Üt = 0 617  ¡Ý_¤vc_d©a g¡Ý_¤vc_d©a_1 = { 618 . ­p_id = APP1_ID , 619 . g¤vc_hªdË = & ¤vc1_hªdË 622  ¡Ý_¤vc_d©a g¡Ý_bad_¤vc_d©a_1 = { 623 . ­p_id = APP1_ID , 624 . g¤vc_hªdË = & ¤vc_bad_hªdË 627  d–‘e_¤vc_d©a gd–‘e_¤vc_d©a_1 = { 628 . ­p_id = APP1_ID , 629 . g¤vc_hªdË = & ¤vc1_hªdË 632  d–‘e_¤vc_d©a gd–‘e_bad_¤vc_d©a_1 = { 633 . ­p_id = APP1_ID , 634 . g¤vc_hªdË = & ¤vc_bad_hªdË 637  g¤vc_šdiÿtiÚ_hªdË_1 = 0x01; 639  £nd_šdiÿtiÚ_d©a g£nd_šdiÿtiÚ_d©a_1 = { 640 . ­p_id = APP1_ID , 641 . g©Œ_hªdË = & ¤vc_šdiÿtiÚ_hªdË_1 , 642 . gcÚn_id = CONN1_ID , 643 . gËn = ( v®ue_2 ), 644 . gp_v®ue = v®ue_2 , 645 . gcÚfœm = 1 648  £nd_šdiÿtiÚ_d©a g£nd_šdiÿtiÚ_d©a_2 = { 649 . ­p_id = APP1_ID , 650 . g©Œ_hªdË = & ¤vc_šdiÿtiÚ_hªdË_1 , 651 . gcÚn_id = CONN1_ID , 652 . gËn = ( v®ue_2 ), 653 . gp_v®ue = v®ue_2 , 654 . gcÚfœm = 0 657  £nd_šdiÿtiÚ_d©a g£nd_bad_šdiÿtiÚ_d©a_1 = { 658 . ­p_id = APP1_ID , 659 . g©Œ_hªdË = & ¤vc_šdiÿtiÚ_hªdË_1 , 660 . gcÚn_id = CONN2_ID , 661 . gËn = ( v®ue_2 ), 662 . gp_v®ue = v®ue_2 , 663 . gcÚfœm = 0 666  s£t_»ad_·¿ms { 667 btg©t_»ad_·¿ms_t * m·¿ms ; 668 btg©t_¤vc_id_t * m¤vc_id ; 669 btg©t_g©t_id_t * mch¬_id ; 670 btg©t_g©t_id_t * mdesü_id ; 671 ušt8_t * mv®ue ; 672 ušt16_t mËn ; 673 ušt16_t mv®ue_ty³ ; 674 ušt8_t m¡©us ; 677  s£t_wr™e_·¿ms { 678 btg©t_wr™e_·¿ms_t * m·¿ms ; 679 btg©t_¤vc_id_t * m¤vc_id ; 680 btg©t_g©t_id_t * mch¬_id ; 681 btg©t_g©t_id_t * mdesü_id ; 682 ušt8_t m¡©us ; 685  s£t_nÙify_·¿ms { 686 btg©t_nÙify_·¿ms_t * m·¿ms ; 687 ušt8_t * mv®ue ; 688 ušt16_t mËn ; 689 ušt8_t mis_nÙify ; 690 btg©t_¤vc_id_t * m¤vc_id ; 691 btg©t_g©t_id_t * mch¬_id ; 692 bt_bdaddr_t * mbdaddr ; 695  £t_»ad_·¿ms g£t_»ad_·¿m_1 = { 696 . ·¿ms = & »ad_·¿ms_1 , 697 . g¤vc_id = & £rviû_1 , 698 . gch¬_id = & ch¬aù”i¡ic_1 , 699 . gv®ue = v®ue_1 , 700 . gËn = ( v®ue_1 ), 701 . g¡©us = BT_STATUS_SUCCESS 704  £t_»ad_·¿ms g£t_»ad_·¿m_2 = { 705 . ·¿ms = & »ad_·¿ms_1 , 706 . g¤vc_id = & £rviû_1 , 707 . gch¬_id = & ch¬aù”i¡ic_1 , 708 . g¡©us = GATT_STATUS_INS_AUTH 711  £t_»ad_·¿ms g£t_»ad_·¿m_3 = { 712 . ·¿ms = & »ad_·¿ms_1 , 713 . g¤vc_id = & £rviû_2 , 714 . gch¬_id = & ch¬aù”i¡ic_1 , 715 . g¡©us = BT_STATUS_FAIL 718  £t_»ad_·¿ms g£t_»ad_·¿m_4 = { 719 . ·¿ms = & »ad_·¿ms_1 , 720 . g¤vc_id = & £rviû_1 , 721 . gch¬_id = & ch¬aù”i¡ic_1 , 722 . gdesü_id = & desc_1 , 723 . gv®ue = v®ue_1 , 724 . gËn = ( v®ue_1 ), 725 . g¡©us = BT_STATUS_SUCCESS 728  £t_»ad_·¿ms g£t_»ad_·¿m_5 = { 729 . ·¿ms = & »ad_·¿ms_1 , 730 . g¤vc_id = & £rviû_1 , 731 . gch¬_id = & ch¬aù”i¡ic_1 , 732 . gdesü_id = & desc_1 , 733 . g¡©us = GATT_STATUS_INS_AUTH 736  £t_»ad_·¿ms g£t_»ad_·¿m_6 = { 737 . ·¿ms = & »ad_·¿ms_1 , 738 . g¤vc_id = & £rviû_1 , 739 . gch¬_id = & ch¬aù”i¡ic_1 , 740 . gdesü_id = & desc_2 , 741 . g¡©us = BT_STATUS_FAIL 744  £t_wr™e_·¿ms g£t_wr™e_·¿m_1 = { 745 . ·¿ms = & wr™e_·¿ms_1 , 746 . g¤vc_id = & £rviû_1 , 747 . gch¬_id = & ch¬aù”i¡ic_1 , 748 . g¡©us = BT_STATUS_SUCCESS 751  £t_wr™e_·¿ms g£t_wr™e_·¿m_2 = { 752 . ·¿ms = & wr™e_·¿ms_1 , 753 . g¤vc_id = & £rviû_1 , 754 . gch¬_id = & ch¬aù”i¡ic_1 , 755 . g¡©us = GATT_STATUS_INS_AUTH 758  £t_wr™e_·¿ms g£t_wr™e_·¿m_3 = { 759 . ·¿ms = & wr™e_·¿ms_1 , 760 . g¤vc_id = & £rviû_1 , 761 . gch¬_id = & ch¬aù”i¡ic_1 , 762 . g¡©us = BT_STATUS_FAIL 765  £t_wr™e_·¿ms g£t_wr™e_·¿m_4 = { 766 . ·¿ms = & wr™e_·¿ms_1 , 767 . g¤vc_id = & £rviû_1 , 768 . gch¬_id = & ch¬aù”i¡ic_1 , 769 . gdesü_id = & desc_1 , 770 . g¡©us = BT_STATUS_SUCCESS 773  £t_wr™e_·¿ms g£t_wr™e_·¿m_5 = { 774 . ·¿ms = & wr™e_·¿ms_1 , 775 . g¤vc_id = & £rviû_1 , 776 . gch¬_id = & ch¬aù”i¡ic_1 , 777 . gdesü_id = & desc_2 , 778 . g¡©us = BT_STATUS_FAIL 781  £t_wr™e_·¿ms g£t_wr™e_·¿m_6 = { 782 . ·¿ms = & wr™e_·¿ms_1 , 783 . g¤vc_id = & £rviû_1 , 784 . gch¬_id = & ch¬aù”i¡ic_1 , 785 . gdesü_id = & desc_1 , 786 . g¡©us = GATT_STATUS_INS_AUTH 789  £t_nÙify_·¿ms g£t_nÙify_·¿m_1 = { 790 . ·¿ms = & nÙify_·¿ms_1 , 791 . gv®ue = v®ue_1 , 792 . gËn = ( v®ue_1 ), 793 . gis_nÙify = 0, 794 . g¤vc_id = & £rviû_1 , 795 . gch¬_id = & ch¬aù”i¡ic_1 , 796 . gbdaddr = & emu_»mÙe_bdaddr_v® 799  £t_nÙify_·¿ms g£t_nÙify_·¿m_2 = { 800 . ·¿ms = & nÙify_·¿ms_1 , 801 . gv®ue = v®ue_1 , 802 . gËn = ( v®ue_1 ), 803 . gis_nÙify = 1, 804 . g¤vc_id = & £rviû_1 , 805 . gch¬_id = & ch¬aù”i¡ic_1 , 806 . gbdaddr = & emu_»mÙe_bdaddr_v® 809  btg©t_»¥Ú£_t g»¥Ú£_1 = { 810 . hªdË = 0x1c, 811 . g©Œ_v®ue . gauth_»q = 0, 812 . g©Œ_v®ue . ghªdË = 0x1d, 813 . g©Œ_v®ue . gËn = 0, 814 . g©Œ_v®ue . goff£t = 0, 817  btg©t_»¥Ú£_t g»¥Ú£_2 = { 818 . hªdË = 0x1c, 819 . g©Œ_v®ue . gauth_»q = 0, 820 . g©Œ_v®ue . ghªdË = 0x1d, 821 . g©Œ_v®ue . gËn = ( ©t_wr™e_»q_v®ue_1 ), 822 . g©Œ_v®ue . goff£t = 0, 825  £nd_»¥_d©a g£nd_»¥_d©a_1 = { 826 . cÚn_id = CONN1_ID , 827 . gŒªs_id = TRANS1_ID , 828 . g¡©us = BT_STATUS_SUCCESS , 829 . g»¥Ú£ = & »¥Ú£_1 , 832  £nd_»¥_d©a g£nd_»¥_d©a_2 = { 833 . cÚn_id = CONN1_ID , 834 . gŒªs_id = TRANS1_ID , 835 . g¡©us = BT_STATUS_SUCCESS , 836 . g»¥Ú£ = & »¥Ú£_2 , 839  #SEARCH_SERVICE_SINGLE_SUCCESS_PDUS \ 840 `¿w_pdu (0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), \ 841 `¿w_pdu (0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18), \ 842 `¿w_pdu (0x10, 0x11, 0x00, 0xff, 0xff, 0x00, 0x28), \ 843 `¿w_pdu (0x01, 0x10, 0x11, 0x00, 0x0a) ) 845  #READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS \ 846 `¿w_pdu (0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28), \ 847 `¿w_pdu (0x09, 0x07, 0x02, 0x00, 0x04, 0x00, 0x00, 0x19, 0x00), \ 848 `¿w_pdu (0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28), \ 849 `¿w_pdu (0x01, 0x08, 0x03, 0x00, 0x0a) ) 851  iovec g£¬ch_£rviû [] = { 852 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 853 ’d_pdu 856  iovec g£¬ch_£rviû_2 [] = { 857 ¿w_pdu (0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), 858 ¿w_pdu (0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18), 859 ¿w_pdu (0x10, 0x11, 0x00, 0xff, 0xff, 0x00, 0x28), 860 ¿w_pdu (0x11, 0x06, 0x11, 0x00, 0x20, 0x00, 0x01, 0x18), 861 ¿w_pdu (0x10, 0x21, 0x00, 0xff, 0xff, 0x00, 0x28), 862 ¿w_pdu (0x01, 0x10, 0x21, 0x00, 0x0a), 863 ’d_pdu 866  iovec g£¬ch_£rviû_3 [] = { 867 ¿w_pdu (0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), 868 ¿w_pdu (0x01, 0x08, 0x01, 0x00, 0x0a), 869 ’d_pdu 872  iovec gg‘_ch¬aù”i¡ic_1 [] = { 873 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 874 READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS , 875 ’d_pdu 878  iovec gg‘_desütÜ_1 [] = { 879 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 880 READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS , 881 ¿w_pdu (0x04, 0x01, 0x00, 0x10, 0x00), 882 ¿w_pdu (0x05, 0x01, 0x04, 0x00, 0x00, 0x29), 883 ¿w_pdu (0x04, 0x05, 0x00, 0x10, 0x00), 884 ¿w_pdu (0x01, 0x04, 0x05, 0x00, 0x0a), 885 ’d_pdu 888  iovec gg‘_desütÜ_2 [] = { 889 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 890 READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS , 891 ¿w_pdu (0x04, 0x01, 0x00, 0x10, 0x00), 892 ¿w_pdu (0x05, 0x01, 0x04, 0x00, 0x00, 0x29, 0x05, 0x00, 0x01, 0x29), 893 ¿w_pdu (0x04, 0x06, 0x00, 0x10, 0x00), 894 ¿w_pdu (0x01, 0x04, 0x06, 0x00, 0x0a), 895 ’d_pdu 898  iovec gg‘_desütÜ_3 [] = { 899 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 900 READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS , 901 ¿w_pdu (0x04, 0x01, 0x00, 0x10, 0x00), 902 ¿w_pdu (0x01, 0x04, 0x01, 0x00, 0x0a), 903 ’d_pdu 906  iovec gg‘_šþuded_1 [] = { 907 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 908 ¿w_pdu (0x08, 0x01, 0x00, 0x10, 0x00, 0x02, 0x28), 909 ¿w_pdu (0x09, 0x08, 0x02, 0x00, 0x15, 0x00, 0x19, 0x00, 0xff, 0xfe), 910 ¿w_pdu (0x08, 0x03, 0x00, 0x10, 0x00, 0x02, 0x28), 911 ¿w_pdu (0x01, 0x08, 0x03, 0x00, 0x0a), 912 ’d_pdu 915  iovec gg‘_šþuded_2 [] = { 916 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 917 ¿w_pdu (0x08, 0x01, 0x00, 0x10, 0x00, 0x02, 0x28), 918 ¿w_pdu (0x09, 0x06, 0x02, 0x00, 0x15, 0x00, 0x19, 0x00), 919 ¿w_pdu (0x0a, 0x15, 0x00), 920 ¿w_pdu (0x0b, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 922 ¿w_pdu (0x08, 0x03, 0x00, 0x10, 0x00, 0x02, 0x28), 923 ¿w_pdu (0x01, 0x08, 0x03, 0x00, 0x0a), 924 ’d_pdu 927  iovec gg‘_šþuded_3 [] = { 928 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 929 ¿w_pdu (0x08, 0x01, 0x00, 0x10, 0x00, 0x02, 0x28), 930 ¿w_pdu (0x01, 0x08, 0x01, 0x00, 0x0a), 931 ’d_pdu 934  iovec g»ad_ch¬aù”i¡ic_1 [] = { 935 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 936 ¿w_pdu (0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28), 937 ¿w_pdu (0x09, 0x07, 0x02, 0x00, 0x04, 0x03, 0x00, 0x19, 0x00), 938 ¿w_pdu (0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28), 939 ¿w_pdu (0x01, 0x08, 0x03, 0x00, 0x0a), 940 ¿w_pdu (0x0a, 0x03, 0x00), 941 ¿w_pdu (0x0b, 0x01), 942 ’d_pdu 945  iovec g»ad_ch¬aù”i¡ic_2 [] = { 946 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 947 ¿w_pdu (0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28), 948 ¿w_pdu (0x09, 0x07, 0x02, 0x00, 0x04, 0x03, 0x00, 0x19, 0x00), 949 ¿w_pdu (0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28), 950 ¿w_pdu (0x01, 0x08, 0x03, 0x00, 0x0a), 951 ¿w_pdu (0x0a, 0x03, 0x00), 952 ¿w_pdu (0x01, 0x0a, 0x03, 0x00, 0x08), 953 ’d_pdu 956  iovec g»ad_desütÜ_1 [] = { 957 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 958 READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS , 959 ¿w_pdu (0x04, 0x01, 0x00, 0x10, 0x00), 960 ¿w_pdu (0x05, 0x01, 0x04, 0x00, 0x00, 0x29), 961 ¿w_pdu (0x04, 0x05, 0x00, 0x10, 0x00), 962 ¿w_pdu (0x01, 0x04, 0x05, 0x00, 0x0a), 963 ¿w_pdu (0x0a, 0x04, 0x00), 964 ¿w_pdu (0x0b, 0x01), 965 ’d_pdu 968  iovec g»ad_desütÜ_2 [] = { 969 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 970 READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS , 971 ¿w_pdu (0x04, 0x01, 0x00, 0x10, 0x00), 972 ¿w_pdu (0x05, 0x01, 0x04, 0x00, 0x00, 0x29), 973 ¿w_pdu (0x04, 0x05, 0x00, 0x10, 0x00), 974 ¿w_pdu (0x01, 0x04, 0x05, 0x00, 0x0a), 975 ¿w_pdu (0x0a, 0x04, 0x00), 976 ¿w_pdu (0x01, 0x0a, 0x04, 0x00, 0x08), 977 ’d_pdu 980  iovec gwr™e_ch¬aù”i¡ic_1 [] = { 981 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 982 ¿w_pdu (0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28), 983 ¿w_pdu (0x09, 0x07, 0x02, 0x00, 0x04, 0x03, 0x00, 0x19, 0x00), 984 ¿w_pdu (0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28), 985 ¿w_pdu (0x01, 0x08, 0x03, 0x00, 0x0a), 986 ¿w_pdu (0x52, 0x03, 0x00, 0x00, 0x01, 0x02, 0x03), 987 ’d_pdu 990  iovec gwr™e_ch¬aù”i¡ic_2 [] = { 991 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 992 ¿w_pdu (0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28), 993 ¿w_pdu (0x09, 0x07, 0x02, 0x00, 0x04, 0x03, 0x00, 0x19, 0x00), 994 ¿w_pdu (0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28), 995 ¿w_pdu (0x01, 0x08, 0x03, 0x00, 0x0a), 996 ¿w_pdu (0x12, 0x03, 0x00, 0x00, 0x01, 0x02, 0x03), 997 ¿w_pdu (0x13), 998 ’d_pdu 1001  iovec gwr™e_ch¬aù”i¡ic_3 [] = { 1002 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 1003 ¿w_pdu (0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28), 1004 ¿w_pdu (0x09, 0x07, 0x02, 0x00, 0x04, 0x03, 0x00, 0x19, 0x00), 1005 ¿w_pdu (0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28), 1006 ¿w_pdu (0x01, 0x08, 0x03, 0x00, 0x0a), 1007 ¿w_pdu (0x12, 0x03, 0x00, 0x00, 0x01, 0x02, 0x03), 1008 ¿w_pdu (0x01, 0x12, 0x03, 0x00, 0x08), 1009 ’d_pdu 1012  iovec gwr™e_desütÜ_1 [] = { 1013 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 1014 READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS , 1015 ¿w_pdu (0x04, 0x01, 0x00, 0x10, 0x00), 1016 ¿w_pdu (0x05, 0x01, 0x04, 0x00, 0x00, 0x29), 1017 ¿w_pdu (0x04, 0x05, 0x00, 0x10, 0x00), 1018 ¿w_pdu (0x01, 0x04, 0x05, 0x00, 0x0a), 1019 ¿w_pdu (0x12, 0x04, 0x00, 0x00, 0x01, 0x02, 0x03), 1020 ¿w_pdu (0x13), 1021 ’d_pdu 1024  iovec gwr™e_desütÜ_2 [] = { 1025 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 1026 READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS , 1027 ¿w_pdu (0x04, 0x01, 0x00, 0x10, 0x00), 1028 ¿w_pdu (0x05, 0x01, 0x04, 0x00, 0x00, 0x29), 1029 ¿w_pdu (0x04, 0x05, 0x00, 0x10, 0x00), 1030 ¿w_pdu (0x01, 0x04, 0x05, 0x00, 0x0a), 1031 ¿w_pdu (0x12, 0x04, 0x00, 0x00, 0x01, 0x02, 0x03), 1032 ¿w_pdu (0x01, 0x12, 0x04, 0x00, 0x08), 1033 ’d_pdu 1036  iovec gnÙifiÿtiÚ_1 [] = { 1037 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 1038 READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS , 1039 ’d_pdu 1042  iovec gnÙifiÿtiÚ_2 [] = { 1043 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 1044 READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS , 1045 ¿w_pdu (0x1d, 0x03, 0x00, 0x01), 1046 ¿w_pdu (0x1e), 1047 ’d_pdu 1050  iovec gnÙifiÿtiÚ_3 [] = { 1051 SEARCH_SERVICE_SINGLE_SUCCESS_PDUS , 1052 READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS , 1053 ¿w_pdu (0x1b, 0x03, 0x00, 0x01), 1054 ’d_pdu 1057  iovec g£nd_šdiÿtiÚ_1 [] = { 1058 ¿w_pdu (0x1d, 0x01, 0x00, 0x00, 0x01, 0x02, 0x03), 1059 ¿w_pdu (0x1e), 1060 ’d_pdu 1063  iovec g£nd_nÙifiÿtiÚ_1 [] = { 1064 ¿w_pdu (0x1b, 0x01, 0x00, 0x00, 0x01, 0x02, 0x03), 1065 ’d_pdu 1068  ©t_wr™e_»q_d©a g©t_wr™e_»q_d©a_1 = { 1069 . ©Œ_hªdË = & ch¬1_hªdË , 1070 . gv®ue = ©t_wr™e_»q_v®ue_1 , 1074  iovec g©t_»ad_»q = ¿w_pdu (0x0a, 0x00, 0x00); 1075  iovec g©t_wr™e_»q_1 = ¿w_pdu (0x12, 0x00, 0x00, 0x00, 0x00, 1078  $g©t_©t_pdu_modify () 1080  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1081  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1082  iovec * ¡Üe_pdu = cu¼’t_d©a_¡• -> £t_d©a_to ; 1083  ¡• *¡• = `g_Ãw0 (step, 1); 1084 * ¿w_pdu = ¡Üe_pdu -> iov_ba£ ; 1085  £t_d©a_Ën = cu¼’t_d©a_¡• ->set_data_len; 1087  ¿w_pdu [0]) { 1088  L2CAP_ATT_READ_REQ : { 1089 ušt16_t hªdË = *((*) cu¼’t_d©a_¡• -> £t_d©a ); 1091 `memýy ( ¿w_pdu + 1, & hªdË , £t_d©a_Ën ); 1092 `‹¡”_debug ("gatt: modify…du„ead„equest handleo 0x%02x", 1093 hªdË ); 1098  L2CAP_ATT_WRITE_REQ : { 1099  ©t_wr™e_»q_d©a * pdu_£t_d©a = 1100 cu¼’t_d©a_¡• -> £t_d©a ; 1101 ušt16_t hªdË = *((*)( pdu_£t_d©a -> ©Œ_hªdË )); 1102 ušt8_t * v®ue = pdu_£t_d©a ->value; 1104 `memýy ( ¿w_pdu + 1, & hªdË , (handle)); 1105 `memýy ( ¿w_pdu + 3, v®ue , £t_d©a_Ën - ( hªdË )); 1107 `‹¡”_debug ("gatt: modify…du write„equest handleo 0x%02x", 1108 hªdË ); 1113 `‹¡”_debug ("modify‡tt…du with opcode 0x%02x‚ot handled", 1114 ¿w_pdu [0]); 1119 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1120 } } 1122  $g©t_þ›Á_»gi¡”_aùiÚ () 1124  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1125  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1126 bt_uuid_t * ­p_uuid = cu¼’t_d©a_¡• -> £t_d©a ; 1127  ¡• *¡• = `g_Ãw0 (step, 1); 1129 ià(! ­p_uuid ) { 1130 `‹¡”_w¬n ("No‡pp uuid…rovided for„egister‡ction."); 1134 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> þ›Á -> `»gi¡”_þ›Á ( ­p_uuid ); 1136 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1137 } } 1139  $g©t_þ›Á_uÄegi¡”_aùiÚ () 1141  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1142  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1143 št32_t þ_id = `PTR_TO_INT ( cu¼’t_d©a_¡• -> £t_d©a ); 1144  ¡• *¡• = `g_Ãw0 (step, 1); 1146 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> þ›Á -> `uÄegi¡”_þ›Á ( þ_id ); 1148 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1149 } } 1151  $g©t_þ›Á_¡¬t_sÿn_aùiÚ () 1153  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1154  ¡• *¡• = `g_Ãw0 (step, 1); 1156 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> þ›Á -> `sÿn ( TRUE ); 1158 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1159 } } 1161  $g©t_þ›Á_¡Ý_sÿn_aùiÚ () 1163  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1164  ¡• *¡• = `g_Ãw0 (step, 1); 1166 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> þ›Á -> `sÿn ( FALSE ); 1168 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1169 } } 1171  $g©t_þ›Á_cÚÃù_aùiÚ () 1173  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1174  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1175  g©t_cÚÃù_d©a * cÚn_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 1176  ¡• *¡• = `g_Ãw0 (step, 1); 1178 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> þ›Á -> `cÚÃù ( 1179 cÚn_d©a -> ­p_id , 1180 & emu_»mÙe_bdaddr_v® , 0, 1181 BT_TRANSPORT_UNKNOWN ); 1183 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1184 } } 1186  $g©t_þ›Á_discÚÃù_aùiÚ () 1188  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1189  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1190  g©t_cÚÃù_d©a * cÚn_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 1191  ¡• *¡• = `g_Ãw0 (step, 1); 1193 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> þ›Á -> `discÚÃù ( 1194 cÚn_d©a -> ­p_id , 1195 & emu_»mÙe_bdaddr_v® , 1196 cÚn_d©a -> cÚn_id ); 1198 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1199 } } 1201  $g©t_þ›Á_do_li¡’_aùiÚ () 1203  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1204  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1205  g©t_cÚÃù_d©a * cÚn_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 1206  ¡• *¡• = `g_Ãw0 (step, 1); 1208 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> þ›Á -> `li¡’ ( 1209 cÚn_d©a -> ­p_id , 1212 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1213 } } 1215  $g©t_þ›Á_¡Ý_li¡’_aùiÚ () 1217  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1218  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1219  g©t_cÚÃù_d©a * cÚn_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 1220  ¡• *¡• = `g_Ãw0 (step, 1); 1222 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> þ›Á -> `li¡’ ( 1223 cÚn_d©a -> ­p_id , 1226 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1227 } } 1229  $g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ () 1231  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1232  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1233  g‘_ch¬_d©a * g‘_ch¬ = cu¼’t_d©a_¡• -> £t_d©a ; 1234 cÚ¡ btg©t_þ›Á_š‹rçû_t * þ›Á = d©a -> if_g©t ->client; 1235  ¡• *¡• = `g_Ãw0 (step, 1); 1236  ¡©us ; 1238 ¡©us = þ›Á -> `g‘_ch¬aù”i¡ic ( g‘_ch¬ -> cÚn_id , 1239 g‘_ch¬ -> £rviû , NULL ); 1240 ¡• -> aùiÚ_¡©us = ¡©us ; 1242 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1243 } } 1245  $g©t_þ›Á_g‘_desütÜ_aùiÚ () 1247  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1248  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1249  g‘_desc_d©a * g‘_desc = cu¼’t_d©a_¡• -> £t_d©a ; 1250 cÚ¡ btg©t_þ›Á_š‹rçû_t * þ›Á = d©a -> if_g©t ->client; 1251  ¡• *¡• = `g_Ãw0 (step, 1); 1252  ¡©us ; 1254 ¡©us = þ›Á -> `g‘_desütÜ ( g‘_desc -> cÚn_id , g‘_desc-> £rviû , 1255 g‘_desc -> ch¬aù”i¡ic , 1256 g‘_desc -> desc ); 1257 ¡• -> aùiÚ_¡©us = ¡©us ; 1259 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1260 } } 1262  $g©t_þ›Á_g‘_šþuded_aùiÚ () 1264  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1265  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1266  g‘_šþ_d©a * g‘_šþ = cu¼’t_d©a_¡• -> £t_d©a ; 1267 cÚ¡ btg©t_þ›Á_š‹rçû_t * þ›Á = d©a -> if_g©t ->client; 1268  ¡• *¡• = `g_Ãw0 (step, 1); 1269  ¡©us ; 1271 ¡©us = þ›Á -> `g‘_šþuded_£rviû ( g‘_šþ -> cÚn_id , 1272 g‘_šþ -> £rviû , g‘_šþ-> ¡¬t_£rviû ); 1274 ¡• -> aùiÚ_¡©us = ¡©us ; 1276 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1277 } } 1279  $g©t_þ›Á_»ad_ch¬aù”i¡ic_aùiÚ () 1281  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1282  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1283  »ad_ch¬_d©a *»ad_ch¬_d©¨ð cu¼’t_d©a_¡• -> £t_d©a ; 1284 cÚ¡ btg©t_þ›Á_š‹rçû_t * þ›Á = d©a -> if_g©t ->client; 1285  ¡• *¡• = `g_Ãw0 (step, 1); 1286  ¡©us ; 1288 ¡©us = þ›Á -> `»ad_ch¬aù”i¡ic ( »ad_ch¬_d©a -> cÚn_id , 1289 »ad_ch¬_d©a -> £rviû ,„—d_ch¬_d©a-> ch¬aù”i¡ic , 1290 »ad_ch¬_d©a -> auth_»q ); 1292 ¡• -> aùiÚ_¡©us = ¡©us ; 1294 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1295 } } 1297  $g©t_þ›Á_»ad_desütÜ_aùiÚ () 1299  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1300  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1301  »ad_desc_d©a *»ad_desc_d©¨ð cu¼’t_d©a_¡• -> £t_d©a ; 1302 cÚ¡ btg©t_þ›Á_š‹rçû_t * þ›Á = d©a -> if_g©t ->client; 1303  ¡• *¡• = `g_Ãw0 (step, 1); 1304  ¡©us ; 1306 ¡©us = þ›Á -> `»ad_desütÜ ( »ad_desc_d©a -> cÚn_id , 1307 »ad_desc_d©a -> £rviû ,„—d_desc_d©a-> ch¬aù”i¡ic , 1308 »ad_desc_d©a -> desütÜ , 1309 »ad_desc_d©a -> auth_»q ); 1311 ¡• -> aùiÚ_¡©us = ¡©us ; 1313 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1314 } } 1316  $g©t_þ›Á_wr™e_ch¬aù”i¡ic_aùiÚ () 1318  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1319  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1320  wr™e_ch¬_d©a *wr™e_ch¬_d©¨ð cu¼’t_d©a_¡• -> £t_d©a ; 1321 cÚ¡ btg©t_þ›Á_š‹rçû_t * þ›Á = d©a -> if_g©t ->client; 1322  ¡• *¡• = `g_Ãw0 (step, 1); 1323  ¡©us ; 1325 ¡©us = þ›Á -> `wr™e_ch¬aù”i¡ic ( wr™e_ch¬_d©a -> cÚn_id , 1326 wr™e_ch¬_d©a -> £rviû , 1327 wr™e_ch¬_d©a -> ch¬aù”i¡ic , 1328 wr™e_ch¬_d©a -> wr™e_ty³ , 1329 wr™e_ch¬_d©a -> Ën , 1330 wr™e_ch¬_d©a -> auth_»q , 1331 wr™e_ch¬_d©a -> p_v®ue ); 1333 ¡• -> aùiÚ_¡©us = ¡©us ; 1335 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1336 } } 1338  $g©t_þ›Á_»gi¡”_fÜ_nÙifiÿtiÚ_aùiÚ () 1340  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1341  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1342  nÙif_d©a *nÙif_d©¨ð cu¼’t_d©a_¡• -> £t_d©a ; 1343 cÚ¡ btg©t_þ›Á_š‹rçû_t * þ›Á = d©a -> if_g©t ->client; 1344  ¡• *¡• = `g_Ãw0 (step, 1); 1345  ¡©us ; 1347 ¡©us = þ›Á -> `»gi¡”_fÜ_nÙifiÿtiÚ ( nÙif_d©a -> cÚn_id , 1348 nÙif_d©a -> bdaddr , 1349 nÙif_d©a -> £rviû , 1350 nÙif_d©a -> ch¬ac ); 1351 ¡• -> aùiÚ_¡©us = ¡©us ; 1353 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1354 } } 1356  $g©t_þ›Á_d”egi¡”_fÜ_nÙifiÿtiÚ_aùiÚ () 1358  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1359  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1360  nÙif_d©a *nÙif_d©¨ð cu¼’t_d©a_¡• -> £t_d©a ; 1361 cÚ¡ btg©t_þ›Á_š‹rçû_t * þ›Á = d©a -> if_g©t ->client; 1362  ¡• *¡• = `g_Ãw0 (step, 1); 1363  ¡©us ; 1365 ¡©us = þ›Á -> `d”egi¡”_fÜ_nÙifiÿtiÚ ( nÙif_d©a -> cÚn_id , 1366 nÙif_d©a -> bdaddr , 1367 nÙif_d©a -> £rviû , 1368 nÙif_d©a -> ch¬ac ); 1369 ¡• -> aùiÚ_¡©us = ¡©us ; 1371 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1372 } } 1374  $g©t_£rv”_»gi¡”_aùiÚ () 1376  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1377  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1378 bt_uuid_t * ­p_uuid = cu¼’t_d©a_¡• -> £t_d©a ; 1379  ¡• *¡• = `g_Ãw0 (step, 1); 1381 ià(! ­p_uuid ) { 1382 `‹¡”_w¬n ("No‡pp uuid…rovided for„egister‡ction."); 1386 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> £rv” -> `»gi¡”_£rv” ( ­p_uuid ); 1388 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1389 } } 1391  $g©t_£rv”_uÄegi¡”_aùiÚ () 1393  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1394  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1395 št32_t ¤_id = `PTR_TO_INT ( cu¼’t_d©a_¡• -> £t_d©a ); 1396  ¡• *¡• = `g_Ãw0 (step, 1); 1398 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> £rv” -> `uÄegi¡”_£rv” ( ¤_id ); 1400 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1401 } } 1403  $g©t_£rv”_cÚÃù_aùiÚ () 1405  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1406  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1407  g©t_cÚÃù_d©a * cÚn_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 1408  ¡• *¡• = `g_Ãw0 (step, 1); 1410 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> £rv” -> `cÚÃù ( 1411 cÚn_d©a -> ­p_id , 1412 & emu_»mÙe_bdaddr_v® , 0, 1413 BT_TRANSPORT_UNKNOWN ); 1415 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1416 } } 1418  $g©t_£rv”_discÚÃù_aùiÚ () 1420  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1421  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1422  g©t_cÚÃù_d©a * cÚn_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 1423  ¡• *¡• = `g_Ãw0 (step, 1); 1425 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> £rv” -> `discÚÃù ( 1426 cÚn_d©a -> ­p_id , 1427 & emu_»mÙe_bdaddr_v® , 1428 cÚn_d©a -> cÚn_id ); 1430 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1431 } } 1433  $g©t_£rv”_add_£rviû_aùiÚ () 1435  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1436  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1437  add_£rviû_d©a * add_¤vc_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 1438  ¡• *¡• = `g_Ãw0 (step, 1); 1440 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> £rv” -> `add_£rviû ( 1441 add_¤vc_d©a -> ­p_id , 1442 add_¤vc_d©a -> £rviû , 1443 add_¤vc_d©a -> num_hªdËs ); 1445 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1446 } } 1448  $g©t_£rv”_add_šc_£rviû_aùiÚ () 1450  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1451  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1452  add_šþuded_£rviû_d©a * add_šc_¤vc_d©a = 1453 cu¼’t_d©a_¡• -> £t_d©a ; 1454  ¡• *¡• = `g_Ãw0 (step, 1); 1456 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> £rv” -> `add_šþuded_£rviû ( 1457 add_šc_¤vc_d©a -> ­p_id , 1458 * add_šc_¤vc_d©a -> ¤vc_hªdË , 1459 * add_šc_¤vc_d©a -> šc_¤vc_hªdË ); 1461 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1462 } } 1464  $g©t_£rv”_add_ch¬_aùiÚ () 1466  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1467  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1468  add_ch¬_d©a *add_ch¬_d©¨ð cu¼’t_d©a_¡• -> £t_d©a ; 1469  ¡• *¡• = `g_Ãw0 (step, 1); 1471 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> £rv” -> `add_ch¬aù”i¡ic ( 1472 add_ch¬_d©a -> ­p_id , 1473 * add_ch¬_d©a -> ¤vc_hªdË , 1474 add_ch¬_d©a -> uuid , 1475 add_ch¬_d©a -> ´Ý”t›s , 1476 add_ch¬_d©a -> ³rmissiÚs ); 1478 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1479 } } 1481  $g©t_£rv”_add_desc_aùiÚ () 1483  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1484  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1485  add_desc_d©a *add_desc_d©¨ð cu¼’t_d©a_¡• -> £t_d©a ; 1486  ¡• *¡• = `g_Ãw0 (step, 1); 1488 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> £rv” -> `add_desütÜ ( 1489 add_desc_d©a -> ­p_id , 1490 * add_desc_d©a -> ¤vc_hªdË , 1491 add_desc_d©a -> uuid , 1492 add_desc_d©a -> ³rmissiÚs ); 1494 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1495 } } 1497  $g©t_þ›Á_wr™e_desütÜ_aùiÚ () 1499  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1500  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1501  wr™e_desc_d©a *wr™e_desc_d©¨ð cu¼’t_d©a_¡• -> £t_d©a ; 1502 cÚ¡ btg©t_þ›Á_š‹rçû_t * þ›Á = d©a -> if_g©t ->client; 1503  ¡• *¡• = `g_Ãw0 (step, 1); 1504  ¡©us ; 1506 ¡©us = þ›Á -> `wr™e_desütÜ ( wr™e_desc_d©a -> cÚn_id , 1507 wr™e_desc_d©a -> £rviû , 1508 wr™e_desc_d©a -> ch¬aù”i¡ic , 1509 wr™e_desc_d©a -> desütÜ , 1510 wr™e_desc_d©a -> wr™e_ty³ , 1511 wr™e_desc_d©a -> Ën , 1512 wr™e_desc_d©a -> auth_»q , 1513 wr™e_desc_d©a -> p_v®ue ); 1515 ¡• -> aùiÚ_¡©us = ¡©us ; 1517 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1518 } } 1520  $g©t_£rv”_¡¬t_¤vc_aùiÚ () 1522  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1523  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1524  ¡¬t_¤vc_d©a *¡¬t_¤vc_d©¨ð cu¼’t_d©a_¡• -> £t_d©a ; 1525  ¡• *¡• = `g_Ãw0 (step, 1); 1527 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> £rv” -> `¡¬t_£rviû ( 1528 ¡¬t_¤vc_d©a -> ­p_id , 1529 * ¡¬t_¤vc_d©a -> ¤vc_hªdË , 1530 ¡¬t_¤vc_d©a -> Œª¥Üt ); 1532 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1533 } } 1535  $g©t_£rv”_¡Ý_¤vc_aùiÚ () 1537  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1538  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1539  ¡Ý_¤vc_d©a *¡Ý_¤vc_d©¨ð cu¼’t_d©a_¡• -> £t_d©a ; 1540  ¡• *¡• = `g_Ãw0 (step, 1); 1542 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> £rv” -> `¡Ý_£rviû ( 1543 ¡Ý_¤vc_d©a -> ­p_id , 1544 * ¡Ý_¤vc_d©a -> ¤vc_hªdË ); 1546 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1547 } } 1549  $g©t_£rv”_d–‘e_¤vc_aùiÚ () 1551  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1552  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1553  d–‘e_¤vc_d©a *d–‘e_¤vc_d©¨ð cu¼’t_d©a_¡• -> £t_d©a ; 1554  ¡• *¡• = `g_Ãw0 (step, 1); 1556 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> £rv” -> `d–‘e_£rviû ( 1557 d–‘e_¤vc_d©a -> ­p_id , 1558 * d–‘e_¤vc_d©a -> ¤vc_hªdË ); 1560 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1561 } } 1563  $g©t_£rv”_£nd_šdiÿtiÚ_aùiÚ () 1565  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1566  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1567  £nd_šdiÿtiÚ_d©a *send_indication_data = 1568 cu¼’t_d©a_¡• -> £t_d©a ; 1569  ¡• *¡• = `g_Ãw0 (step, 1); 1571 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> £rv” -> `£nd_šdiÿtiÚ ( 1572 £nd_šdiÿtiÚ_d©a -> ­p_id , 1573 * £nd_šdiÿtiÚ_d©a -> ©Œ_hªdË , 1574 £nd_šdiÿtiÚ_d©a -> cÚn_id , 1575 £nd_šdiÿtiÚ_d©a -> Ën , 1576 £nd_šdiÿtiÚ_d©a -> cÚfœm , 1577 £nd_šdiÿtiÚ_d©a -> p_v®ue ); 1579 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1580 } } 1582  $g©t_£rv”_£nd_»¥Ú£_aùiÚ () 1584  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1585  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1586  £nd_»¥_d©a *£nd_»¥_d©¨ð cu¼’t_d©a_¡• -> £t_d©a ; 1587  ¡• *¡• = `g_Ãw0 (step, 1); 1589 ¡• -> aùiÚ_¡©us = d©a -> if_g©t -> £rv” -> `£nd_»¥Ú£ ( 1590 £nd_»¥_d©a -> cÚn_id , 1591 £nd_»¥_d©a -> Œªs_id , 1592 £nd_»¥_d©a -> ¡©us , 1593 £nd_»¥_d©a -> »¥Ú£ ); 1595 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1596 } } 1598  $g©t_cid_hook_cb (cÚ¡ * d©a , ušt16_t Ën , * u£r_d©a ) 1600  ‹¡_d©a * t_d©a = `‹¡”_g‘_d©a (); 1601  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( t_d©a -> hc›mu ); 1602  emu_l2ÿp_cid_d©a * cid_d©a = u£r_d©a ; 1603 cÚ¡ ušt8_t * pdu = d©a ; 1604  iovec * g©t_pdu = `queue_³ek_h—d ( t_d©a -> pdus ); 1605  ¡• *step; 1607 `‹¡”_debug ("Reûived‡‰…du w™h opcod0x%02x", pdu [0]); 1609  pdu [0]) { 1610  L2CAP_ATT_EXCHANGE_MTU_REQ : 1611 `‹¡”_´št ("Exchange MTU„equest„eceived."); 1613 ià(! `memcmp ( exchªge_mtu_»q_pdu . iov_ba£ , pdu , Ën )) 1614 `btho¡_£nd_cid_v ( btho¡ , cid_d©a -> hªdË , 1615 cid_d©a -> cid , 1616 & exchªge_mtu_»¥_pdu , 1); 1619  L2CAP_ATT_EXCHANGE_MTU_RSP : 1620 `‹¡”_´št ("Exchange MTU„esponse„eceived."); 1623  L2CAP_ATT_HANDLE_VALUE_IND : 1624 ¡• = `g_Ãw0 (step, 1); 1626 ¡• -> ÿÎback = CB_EMU_VALUE_INDICATION ; 1628 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1630  L2CAP_ATT_HANDLE_VALUE_NOTIFY : 1631 ¡• = `g_Ãw0 (step, 1); 1633 ¡• -> ÿÎback = CB_EMU_VALUE_NOTIFICATION ; 1635 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1637  L2CAP_ATT_READ_RSP : 1639 ¡• = `g_Ãw0 (step, 1); 1641 ¡• -> ÿÎback = CB_EMU_READ_RESPONSE ; 1643 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1645  L2CAP_ATT_WRITE_RSP : 1647 ¡• = `g_Ãw0 (step, 1); 1649 ¡• -> ÿÎback = CB_EMU_WRITE_RESPONSE ; 1651 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1654 ià(! g©t_pdu || !g©t_pdu-> iov_ba£ ) { 1655 `‹¡”_´št ("Unknown ATT…acket."); 1659 ià( g©t_pdu -> iov_Ën !ð Ën ) { 1660 `‹¡”_´št ("Size of incoming frame is‚ot valid"); 1661 `‹¡”_´št ("Expected size = %zd incoming size = %d", 1662 g©t_pdu -> iov_Ën , Ën ); 1666 ià( `memcmp ( g©t_pdu -> iov_ba£ , d©a , Ën )) { 1667 `‹¡”_´št ("Incoming data mismatch"); 1670 `queue_pÝ_h—d ( t_d©a -> pdus ); 1671 g©t_pdu = `queue_pÝ_h—d ( t_d©a -> pdus ); 1672 ià(! g©t_pdu || !g©t_pdu-> iov_ba£ ) 1675 `btho¡_£nd_cid_v ( btho¡ , cid_d©a -> hªdË , cid_d©a-> cid , 1676 g©t_pdu , 1); 1680 } } 1682  $g©t_»mÙe_£nd_äame_aùiÚ () 1684  ‹¡_d©a * t_d©a = `‹¡”_g‘_d©a (); 1685  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( t_d©a -> hc›mu ); 1686  iovec * g©t_pdu = `queue_pÝ_h—d ( t_d©a -> pdus ); 1687  ¡• *¡• = `g_Ãw0 (step, 1); 1689 ià(! g©t_pdu ) { 1690 `‹¡”_´št ("No frameo send"); 1691 ¡• -> aùiÚ_¡©us = BT_STATUS_FAIL ; 1693 `btho¡_£nd_cid_v ( btho¡ , cid_d©a . hªdË , cid_d©a. cid , 1694 g©t_pdu , 1); 1695 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 1698 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1699 } } 1701  $g©t_»mÙe_£nd_¿w_pdu_aùiÚ () 1703  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1704  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 1705  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1706  iovec * pdu = cu¼’t_d©a_¡• -> £t_d©a ; 1707  ¡• *¡• = `g_Ãw0 (step, 1); 1709 ià( cid_d©a . hªdË && cid_d©a. cid ) { 1710 `btho¡_£nd_cid_v ( btho¡ , cid_d©a . hªdË , cid_d©a. cid , 1711 pdu , 1); 1712 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 1714 `‹¡”_debug ("No connection set up"); 1715 ¡• -> aùiÚ_¡©us = BT_STATUS_FAIL ; 1718 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1719 } } 1721  $g©t_cÚn_cb ( ušt16_t hªdË , * u£r_d©a ) 1723  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1724  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 1726 `‹¡”_´št ("New cÚÃùiÚ w™h hªdË 0x%04x", hªdË ); 1728 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_BREDR ) { 1729 `‹¡”_w¬n ("Not handled deviceype."); 1733 cid_d©a . cid = 0x0004; 1734 cid_d©a . hªdË = handle; 1736 `btho¡_add_cid_hook ( btho¡ , hªdË , cid_d©a . cid , g©t_cid_hook_cb , 1737 & cid_d©a ); 1738 } } 1740  $g©t_þ›Á_£¬ch_£rviûs () 1742  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1743  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1744  ¡• *¡• = `g_Ãw0 (step, 1); 1745  g©t_£¬ch_£rviû_d©a * £¬ch_d©a ; 1746  ¡©us ; 1748 £¬ch_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 1750 ¡©us = d©a -> if_g©t -> þ›Á -> `£¬ch_£rviû ( £¬ch_d©a -> cÚn_id , 1751 £¬ch_d©a -> fž‹r_uuid ); 1752 ¡• -> aùiÚ_¡©us = ¡©us ; 1754 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1755 } } 1757  $š™_pdus () 1759  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1760  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1761  ¡• *¡• = `g_Ãw0 (step, 1); 1762  iovec * pdu = cu¼’t_d©a_¡• -> £t_d©a ; 1764  pdu -> iov_ba£ ) { 1765 `queue_push_ž ( d©a -> pdus , pdu ); 1766 pdu ++; 1769 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 1771 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1772 } } 1774  $š™_»ad_·¿ms_aùiÚ () 1776  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1777  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1778  ¡• *¡• = `g_Ãw0 (step, 1); 1779  £t_»ad_·¿ms * £t_·¿m_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 1780 btg©t_»ad_·¿ms_t * ·¿m = £t_·¿m_d©a -> ·¿ms ; 1782 `mem£t ( ·¿m , 0, (*param)); 1784 ià( £t_·¿m_d©a -> ¤vc_id ) 1785 `memýy (& ·¿m -> ¤vc_id , £t_·¿m_d©a ->srvc_id, 1786 ( btg©t_¤vc_id_t )); 1788 ià( £t_·¿m_d©a -> ch¬_id ) 1789 `memýy (& ·¿m -> ch¬_id , £t_·¿m_d©a ->char_id, 1790 ( btg©t_g©t_id_t )); 1792 ià( £t_·¿m_d©a -> desü_id ) 1793 `memýy (& ·¿m -> desü_id , £t_·¿m_d©a ->descr_id, 1794 ( btg©t_g©t_id_t )); 1796 ·¿m -> v®ue_ty³ = £t_·¿m_d©a ->value_type; 1797 ·¿m -> ¡©us = £t_·¿m_d©a ->status; 1798 ·¿m -> v®ue . Ën = £t_·¿m_d©a ->len; 1800 ià( ·¿m -> v®ue . Ën != 0) 1801 `memýy (& ·¿m -> v®ue .v®ue, £t_·¿m_d©a ->value, 1802 ·¿m -> v®ue . Ën ); 1804 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 1806 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1807 } } 1809  $š™_wr™e_·¿ms_aùiÚ () 1811  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1812  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1813  ¡• *¡• = `g_Ãw0 (step, 1); 1814  £t_wr™e_·¿ms * £t_·¿m_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 1815 btg©t_wr™e_·¿ms_t * ·¿m = £t_·¿m_d©a -> ·¿ms ; 1817 `mem£t ( ·¿m , 0, (*param)); 1819 ià( £t_·¿m_d©a -> ¤vc_id ) 1820 `memýy (& ·¿m -> ¤vc_id , £t_·¿m_d©a ->srvc_id, 1821 ( btg©t_¤vc_id_t )); 1823 ià( £t_·¿m_d©a -> ch¬_id ) 1824 `memýy (& ·¿m -> ch¬_id , £t_·¿m_d©a ->char_id, 1825 ( btg©t_g©t_id_t )); 1827 ià( £t_·¿m_d©a -> desü_id ) 1828 `memýy (& ·¿m -> desü_id , £t_·¿m_d©a ->descr_id, 1829 ( btg©t_g©t_id_t )); 1831 ·¿m -> ¡©us = £t_·¿m_d©a ->status; 1833 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 1835 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1836 } } 1838  $š™_nÙify_·¿ms_aùiÚ () 1840  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1841  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1842  ¡• *¡• = `g_Ãw0 (step, 1); 1843  £t_nÙify_·¿ms * £t_·¿m_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 1844 btg©t_nÙify_·¿ms_t * ·¿m = £t_·¿m_d©a -> ·¿ms ; 1846 `mem£t ( ·¿m , 0, (*param)); 1848 ià( £t_·¿m_d©a -> ¤vc_id ) 1849 `memýy (& ·¿m -> ¤vc_id , £t_·¿m_d©a ->srvc_id, 1850 ( btg©t_¤vc_id_t )); 1852 ià( £t_·¿m_d©a -> ch¬_id ) 1853 `memýy (& ·¿m -> ch¬_id , £t_·¿m_d©a ->char_id, 1854 ( btg©t_g©t_id_t )); 1856 ·¿m -> Ën = £t_·¿m_d©a ->len; 1857 ·¿m -> is_nÙify = £t_·¿m_d©a ->is_notify; 1859 `memýy (& ·¿m -> bda , £t_·¿m_d©a -> bdaddr , ( bt_bdaddr_t )); 1860 ià( ·¿m -> Ën != 0) 1861 `memýy (& ·¿m -> v®ue , £t_·¿m_d©a ->v®ue,…¬am-> Ën ); 1863 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 1865 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 1866 } } 1868  ‹¡_ÿ£ g‹¡_ÿ£s [] = { 1869 TEST_CASE_BREDRLE ("Gatt Init", 1870 ACTION_SUCCESS ( dummy_aùiÚ , NULL ), 1872 TEST_CASE_BREDRLE ("Gatt Client - Register", 1873 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 1874 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 1876 TEST_CASE_BREDRLE ("Gatt Client - Unregister", 1877 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 1878 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 1879 ACTION_SUCCESS ( g©t_þ›Á_uÄegi¡”_aùiÚ , 1880 INT_TO_PTR ( APP1_ID )), 1881 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 1882 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 1884 TEST_CASE_BREDRLE ("Gatt Client - Scan", 1885 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 1886 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 1887 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 1888 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 1889 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 1890 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 1891 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 1892 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_Ë_£t , 2), 1893 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 1894 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 1895 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 1896 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 1898 TEST_CASE_BREDRLE ("Gatt Client - LE Connect", 1899 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 1900 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 1901 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 1902 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 1903 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 1904 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 1905 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 1906 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 1907 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_Ë_£t , 2), 1908 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 1909 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 1910 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 1911 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 1912 ´Ý_emu_»mÙes_deçuÉ_£t , 1913 CONN1_ID , APP1_ID ), 1914 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 1915 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 1917 TEST_CASE_BREDRLE ("Gatt Client - LE Disconnect", 1918 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 1919 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 1920 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 1921 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 1922 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 1923 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 1924 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 1925 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 1926 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_Ë_£t , 2), 1927 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 1928 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 1929 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 1930 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 1931 ´Ý_emu_»mÙes_deçuÉ_£t , 1932 CONN1_ID , APP1_ID ), 1933 ACTION_SUCCESS ( g©t_þ›Á_discÚÃù_aùiÚ , 1934 & ­p1_cÚn_»q ), 1935 CALLBACK_GATTC_DISCONNECT ( GATT_STATUS_SUCCESS , 1936 ´Ý_emu_»mÙes_deçuÉ_£t , 1937 CONN1_ID , APP1_ID ), 1938 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 1939 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 1941 TEST_CASE_BREDRLE ("Gatt Client - LE Multiple Client Conn./Disc.", 1942 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 1943 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 1944 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 1945 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 1946 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 1947 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 1948 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 1949 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p2_uuid ), 1950 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 1951 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 1952 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 1953 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 1954 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 1955 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 1956 ´Ý_emu_»mÙes_deçuÉ_£t , 1957 CONN1_ID , APP1_ID ), 1958 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p2_cÚn_»q ), 1959 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 1960 ´Ý_emu_»mÙes_deçuÉ_£t , 1961 CONN2_ID , APP2_ID ), 1962 ACTION_SUCCESS ( g©t_þ›Á_discÚÃù_aùiÚ , 1963 & ­p2_cÚn_»q ), 1964 CALLBACK_GATTC_DISCONNECT ( GATT_STATUS_SUCCESS , 1965 ´Ý_emu_»mÙes_deçuÉ_£t , 1966 CONN2_ID , APP2_ID ), 1967 ACTION_SUCCESS ( g©t_þ›Á_discÚÃù_aùiÚ , 1968 & ­p1_cÚn_»q ), 1969 CALLBACK_GATTC_DISCONNECT ( GATT_STATUS_SUCCESS , 1970 ´Ý_emu_»mÙes_deçuÉ_£t , 1971 CONN1_ID , APP1_ID ), 1972 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 1973 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 1975 TEST_CASE_BREDRLE ("Gatt Client - Listen‡nd Disconnect", 1976 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 1977 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 1978 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 1979 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 1980 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 1981 ACTION_SUCCESS ( bt_£t_´Ý”ty_aùiÚ , 1982 & ´Ý_‹¡_sÿn_mode_cÚn ), 1983 CALLBACK_ADAPTER_PROPS (& ´Ý_‹¡_sÿn_mode_cÚn , 1), 1984 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 1985 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 1986 ACTION_SUCCESS ( g©t_þ›Á_do_li¡’_aùiÚ , & ­p1_cÚn_»q ), 1987 CALLBACK_STATUS ( CB_GATTC_LISTEN , GATT_STATUS_SUCCESS ), 1988 ACTION_SUCCESS ( emu_»mÙe_cÚÃù_hci_aùiÚ , & b—»r_ty³ ), 1989 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 1990 ´Ý_emu_»mÙes_deçuÉ_£t , 1991 CONN1_ID , APP1_ID ), 1992 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_li¡’_aùiÚ , 1993 & ­p1_cÚn_»q ), 1994 CALLBACK_STATUS ( CB_GATTC_LISTEN , GATT_STATUS_SUCCESS ), 1995 ACTION_SUCCESS ( g©t_þ›Á_discÚÃù_aùiÚ , 1996 & ­p1_cÚn_»q ), 1997 CALLBACK_GATTC_DISCONNECT ( GATT_STATUS_SUCCESS , 1998 ´Ý_emu_»mÙes_deçuÉ_£t , 1999 CONN1_ID , APP1_ID ), 2000 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2001 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2003 TEST_CASE_BREDRLE ("Gatt Client - Double Listen", 2004 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2005 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2006 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2007 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2008 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2009 ACTION_SUCCESS ( bt_£t_´Ý”ty_aùiÚ , 2010 & ´Ý_‹¡_sÿn_mode_cÚn ), 2011 CALLBACK_ADAPTER_PROPS (& ´Ý_‹¡_sÿn_mode_cÚn , 1), 2012 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2013 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2014 ACTION_SUCCESS ( g©t_þ›Á_do_li¡’_aùiÚ , & ­p1_cÚn_»q ), 2015 CALLBACK_STATUS ( CB_GATTC_LISTEN , GATT_STATUS_SUCCESS ), 2016 ACTION_SUCCESS ( emu_»mÙe_cÚÃù_hci_aùiÚ , & b—»r_ty³ ), 2017 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2018 ´Ý_emu_»mÙes_deçuÉ_£t , 2019 CONN1_ID , APP1_ID ), 2020 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_li¡’_aùiÚ , 2021 & ­p1_cÚn_»q ), 2022 CALLBACK_STATUS ( CB_GATTC_LISTEN , GATT_STATUS_SUCCESS ), 2023 ACTION_SUCCESS ( g©t_þ›Á_discÚÃù_aùiÚ , 2024 & ­p1_cÚn_»q ), 2025 CALLBACK_GATTC_DISCONNECT ( GATT_STATUS_SUCCESS , 2026 ´Ý_emu_»mÙes_deçuÉ_£t , 2027 CONN1_ID , APP1_ID ), 2029 ACTION_SUCCESS ( emu_»mÙe_discÚÃù_hci_aùiÚ , 2030 & cid_d©a . hªdË ), 2031 CALLBACK_STATE ( CB_BT_ACL_STATE_CHANGED , 2032 BT_ACL_STATE_DISCONNECTED ), 2033 ACTION_SUCCESS ( g©t_þ›Á_do_li¡’_aùiÚ , & ­p1_cÚn_»q ), 2034 CALLBACK_STATUS ( CB_GATTC_LISTEN , GATT_STATUS_SUCCESS ), 2035 ACTION_SUCCESS ( emu_»mÙe_cÚÃù_hci_aùiÚ , & b—»r_ty³ ), 2036 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2037 ´Ý_emu_»mÙes_deçuÉ_£t , 2038 CONN2_ID , APP1_ID ), 2039 ACTION_SUCCESS ( g©t_þ›Á_discÚÃù_aùiÚ , 2040 & ­p1_cÚn2_»q ), 2041 CALLBACK_GATTC_DISCONNECT ( GATT_STATUS_SUCCESS , 2042 ´Ý_emu_»mÙes_deçuÉ_£t , 2043 CONN2_ID , APP1_ID ), 2044 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_li¡’_aùiÚ , 2045 & ­p1_cÚn_»q ), 2046 CALLBACK_STATUS ( CB_GATTC_LISTEN , GATT_STATUS_SUCCESS ), 2047 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2048 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2050 TEST_CASE_BREDRLE ("Gatt Client - Search Service - Single", 2051 ACTION_SUCCESS ( š™_pdus , £¬ch_£rviû ), 2052 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2053 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2054 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2055 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2056 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2057 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2058 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2059 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2060 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2061 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2062 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2063 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2064 ´Ý_emu_»mÙes_deçuÉ_£t , 2065 CONN1_ID , APP1_ID ), 2066 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2067 CALLBACK_GATTC_SEARCH_RESULT ( CONN1_ID , & £rviû_1 ), 2068 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2069 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2070 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2072 TEST_CASE_BREDRLE ("Gatt Client - Search Service - Multiple", 2073 ACTION_SUCCESS ( š™_pdus , £¬ch_£rviû_2 ), 2074 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2075 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2076 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2077 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2078 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2079 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2080 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2081 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2082 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2083 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2084 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2085 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2086 ´Ý_emu_»mÙes_deçuÉ_£t , 2087 CONN1_ID , APP1_ID ), 2088 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2089 CALLBACK_GATTC_SEARCH_RESULT ( CONN1_ID , & £rviû_1 ), 2090 CALLBACK_GATTC_SEARCH_RESULT ( CONN1_ID , & £rviû_2 ), 2091 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2092 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2093 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2095 TEST_CASE_BREDRLE ("Gatt Client - Search Service - None", 2096 ACTION_SUCCESS ( š™_pdus , £¬ch_£rviû_3 ), 2097 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2098 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2099 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2100 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2101 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2102 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2103 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2104 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2105 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2106 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2107 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2108 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2109 ´Ý_emu_»mÙes_deçuÉ_£t , 2110 CONN1_ID , APP1_ID ), 2111 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2112 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2113 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2114 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2116 TEST_CASE_BREDRLE ("Gatt Client - Get Characteristic - Single", 2117 ACTION_SUCCESS ( š™_pdus , g‘_ch¬aù”i¡ic_1 ), 2118 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2119 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2120 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2121 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2122 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2123 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2124 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2125 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2126 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2127 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2128 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2129 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2130 ´Ý_emu_»mÙes_deçuÉ_£t , 2131 CONN1_ID , APP1_ID ), 2132 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2133 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2134 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2135 & g‘_ch¬_d©a_1 ), 2136 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2137 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2138 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2139 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2141 TEST_CASE_BREDRLE ("Gatt Client - Get Characteristic - None", 2142 ACTION_SUCCESS ( š™_pdus , g‘_ch¬aù”i¡ic_1 ), 2143 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2144 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2145 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2146 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2147 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2148 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2149 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2150 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2151 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2152 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2153 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2154 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2155 ´Ý_emu_»mÙes_deçuÉ_£t , 2156 CONN1_ID , APP1_ID ), 2157 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2158 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2159 ACTION_FAIL ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2160 & g‘_ch¬_d©a_2 ), 2161 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_FAILURE , 2162 CONN1_ID , & £rviû_2 , 2163 NULL , 0), 2164 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2165 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2167 TEST_CASE_BREDRLE ("Gatt Client - Get Descriptor - Single", 2168 ACTION_SUCCESS ( š™_pdus , g‘_desütÜ_1 ), 2169 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2170 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2171 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2172 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2173 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2174 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2175 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2176 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2177 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2178 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2179 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2180 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2181 ´Ý_emu_»mÙes_deçuÉ_£t , 2182 CONN1_ID , APP1_ID ), 2183 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2184 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2185 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2186 & g‘_ch¬_d©a_1 ), 2187 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2188 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2189 ACTION_SUCCESS ( g©t_þ›Á_g‘_desütÜ_aùiÚ , 2190 & g‘_desc_d©a_1 ), 2191 CALLBACK_GATTC_GET_DESCRIPTOR ( GATT_STATUS_SUCCESS , CONN1_ID , 2192 & £rviû_1 , & ch¬aù”i¡ic_1 , & desc_1 ), 2193 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2194 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2196 TEST_CASE_BREDRLE ("Gatt Client - Get Descriptor - Multiple", 2197 ACTION_SUCCESS ( š™_pdus , g‘_desütÜ_2 ), 2198 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2199 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2200 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2201 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2202 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2203 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2204 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2205 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2206 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2207 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2208 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2209 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2210 ´Ý_emu_»mÙes_deçuÉ_£t , 2211 CONN1_ID , APP1_ID ), 2212 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2213 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2214 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2215 & g‘_ch¬_d©a_1 ), 2216 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2217 CONN1_ID , & £rviû_1 , 2218 & ch¬aù”i¡ic_1 , 4), 2219 ACTION_SUCCESS ( g©t_þ›Á_g‘_desütÜ_aùiÚ , 2220 & g‘_desc_d©a_1 ), 2221 CALLBACK_GATTC_GET_DESCRIPTOR ( GATT_STATUS_SUCCESS , CONN1_ID , 2222 & £rviû_1 , & ch¬aù”i¡ic_1 , 2223 & desc_1 ), 2224 ACTION_SUCCESS ( g©t_þ›Á_g‘_desütÜ_aùiÚ , 2225 & g‘_desc_d©a_2 ), 2226 CALLBACK_GATTC_GET_DESCRIPTOR ( GATT_STATUS_SUCCESS , CONN1_ID , 2227 & £rviû_1 , & ch¬aù”i¡ic_1 , 2228 & desc_2 ), 2229 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2230 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2232 TEST_CASE_BREDRLE ("Gatt Client - Get Descriptor - None", 2233 ACTION_SUCCESS ( š™_pdus , g‘_desütÜ_3 ), 2234 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2235 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2236 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2237 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2238 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2239 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2240 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2241 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2242 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2243 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2244 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2245 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2246 ´Ý_emu_»mÙes_deçuÉ_£t , 2247 CONN1_ID , APP1_ID ), 2248 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2249 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2250 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2251 & g‘_ch¬_d©a_1 ), 2252 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2253 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2254 ACTION_SUCCESS ( g©t_þ›Á_g‘_desütÜ_aùiÚ , 2255 & g‘_desc_d©a_1 ), 2256 CALLBACK_GATTC_GET_DESCRIPTOR ( GATT_STATUS_FAILURE , CONN1_ID , 2257 & £rviû_1 , & ch¬aù”i¡ic_1 , NULL ), 2258 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2259 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2261 TEST_CASE_BREDRLE ("Gatt Client - Get Included Service - 16 UUID", 2262 ACTION_SUCCESS ( š™_pdus , g‘_šþuded_1 ), 2263 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2264 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2265 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2266 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2267 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2268 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2269 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2270 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2271 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2272 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2273 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2274 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2275 ´Ý_emu_»mÙes_deçuÉ_£t , 2276 CONN1_ID , APP1_ID ), 2277 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2278 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2279 ACTION_SUCCESS ( g©t_þ›Á_g‘_šþuded_aùiÚ , 2280 & g‘_šþ_d©a_1 ), 2281 CALLBACK_GATTC_GET_INCLUDED ( GATT_STATUS_SUCCESS , CONN1_ID , 2282 & £rviû_1 , & šþuded_1 ), 2283 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2284 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2286 TEST_CASE_BREDRLE ("Gatt Client - Get Included Service - 128 UUID", 2287 ACTION_SUCCESS ( š™_pdus , g‘_šþuded_2 ), 2288 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2289 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2290 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2291 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2292 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2293 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2294 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2295 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2296 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2297 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2298 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2299 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2300 ´Ý_emu_»mÙes_deçuÉ_£t , 2301 CONN1_ID , APP1_ID ), 2302 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2303 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2304 ACTION_SUCCESS ( g©t_þ›Á_g‘_šþuded_aùiÚ , 2305 & g‘_šþ_d©a_1 ), 2306 CALLBACK_GATTC_GET_INCLUDED ( GATT_STATUS_SUCCESS , CONN1_ID , 2307 & £rviû_1 , & šþuded_2 ), 2308 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2309 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2311 TEST_CASE_BREDRLE ("Gatt Client - Get Included Service - None", 2312 ACTION_SUCCESS ( š™_pdus , g‘_šþuded_3 ), 2313 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2314 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2315 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2316 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2317 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2318 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2319 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2320 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2321 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2322 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2323 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2324 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2325 ´Ý_emu_»mÙes_deçuÉ_£t , 2326 CONN1_ID , APP1_ID ), 2327 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2328 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2329 ACTION_SUCCESS ( g©t_þ›Á_g‘_šþuded_aùiÚ , 2330 & g‘_šþ_d©a_1 ), 2331 CALLBACK_GATTC_GET_INCLUDED ( GATT_STATUS_FAILURE , CONN1_ID , 2332 & £rviû_1 , NULL ), 2333 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2334 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2336 TEST_CASE_BREDRLE ("Gatt Client - Read Characteristic - Success", 2337 ACTION_SUCCESS ( š™_pdus , »ad_ch¬aù”i¡ic_1 ), 2338 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2339 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2340 ACTION_SUCCESS ( š™_»ad_·¿ms_aùiÚ , & £t_»ad_·¿m_1 ), 2341 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2342 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2343 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2344 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2345 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2346 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2347 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2348 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2349 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2350 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2351 ´Ý_emu_»mÙes_deçuÉ_£t , 2352 CONN1_ID , APP1_ID ), 2353 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2354 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2355 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2356 & g‘_ch¬_d©a_1 ), 2357 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2358 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2359 ACTION_SUCCESS ( g©t_þ›Á_»ad_ch¬aù”i¡ic_aùiÚ , 2360 & »ad_ch¬_d©a_1 ), 2361 CALLBACK_GATTC_READ_CHARACTERISTIC ( GATT_STATUS_SUCCESS , 2362 CONN1_ID , & »ad_·¿ms_1 ), 2363 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2364 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2367 TEST_CASE_BREDRLE ("Gatt Client - Read Characteristic - Insuf. Auth.", 2368 ACTION_SUCCESS ( š™_pdus , »ad_ch¬aù”i¡ic_2 ), 2369 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2370 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2371 ACTION_SUCCESS ( š™_»ad_·¿ms_aùiÚ , & £t_»ad_·¿m_2 ), 2372 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2373 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2374 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2375 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2376 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2377 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2378 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2379 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2380 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2381 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2382 ´Ý_emu_»mÙes_deçuÉ_£t , 2383 CONN1_ID , APP1_ID ), 2384 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2385 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2386 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2387 & g‘_ch¬_d©a_1 ), 2388 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2389 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2390 ACTION_SUCCESS ( g©t_þ›Á_»ad_ch¬aù”i¡ic_aùiÚ , 2391 & »ad_ch¬_d©a_1 ), 2392 CALLBACK_GATTC_READ_CHARACTERISTIC ( GATT_STATUS_INS_AUTH , 2393 CONN1_ID , & »ad_·¿ms_1 ), 2394 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2395 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2397 TEST_CASE_BREDRLE ("Gatt Client - Read Characteristic - Wrong…arams", 2398 ACTION_SUCCESS ( š™_pdus , »ad_ch¬aù”i¡ic_2 ), 2399 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2400 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2401 ACTION_SUCCESS ( š™_»ad_·¿ms_aùiÚ , & £t_»ad_·¿m_3 ), 2402 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2403 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2404 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2405 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2406 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2407 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2408 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2409 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2410 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2411 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2412 ´Ý_emu_»mÙes_deçuÉ_£t , 2413 CONN1_ID , APP1_ID ), 2414 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2415 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2416 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2417 & g‘_ch¬_d©a_1 ), 2418 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2419 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2420 ACTION_FAIL ( g©t_þ›Á_»ad_ch¬aù”i¡ic_aùiÚ , 2421 & »ad_ch¬_d©a_2 ), 2422 CALLBACK_GATTC_READ_CHARACTERISTIC ( GATT_STATUS_FAILURE , 2423 CONN1_ID , & »ad_·¿ms_1 ), 2424 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2425 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2427 TEST_CASE_BREDRLE ("Gatt Client - Read Descriptor - Success", 2428 ACTION_SUCCESS ( š™_pdus , »ad_desütÜ_1 ), 2429 ACTION_SUCCESS ( š™_»ad_·¿ms_aùiÚ , & £t_»ad_·¿m_4 ), 2430 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2431 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2432 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2433 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2434 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2435 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2436 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2437 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2438 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2439 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2440 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2441 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2442 ´Ý_emu_»mÙes_deçuÉ_£t , 2443 CONN1_ID , APP1_ID ), 2444 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2445 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2446 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2447 & g‘_ch¬_d©a_1 ), 2448 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2449 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2450 ACTION_SUCCESS ( g©t_þ›Á_g‘_desütÜ_aùiÚ , 2451 & g‘_desc_d©a_1 ), 2452 CALLBACK_GATTC_GET_DESCRIPTOR ( GATT_STATUS_SUCCESS , CONN1_ID , 2453 & £rviû_1 , & ch¬aù”i¡ic_1 , & desc_1 ), 2454 ACTION_SUCCESS ( g©t_þ›Á_»ad_desütÜ_aùiÚ , 2455 & »ad_desc_d©a_1 ), 2456 CALLBACK_GATTC_READ_DESCRIPTOR ( GATT_STATUS_SUCCESS , 2457 CONN1_ID , & »ad_·¿ms_1 ), 2458 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2459 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2461 TEST_CASE_BREDRLE ("Gatt Client - Read Descriptor - Insuf. Auth.", 2462 ACTION_SUCCESS ( š™_pdus , »ad_desütÜ_2 ), 2463 ACTION_SUCCESS ( š™_»ad_·¿ms_aùiÚ , & £t_»ad_·¿m_5 ), 2464 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2465 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2466 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2467 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2468 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2469 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2470 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2471 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2472 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2473 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2474 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2475 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2476 ´Ý_emu_»mÙes_deçuÉ_£t , 2477 CONN1_ID , APP1_ID ), 2478 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2479 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2480 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2481 & g‘_ch¬_d©a_1 ), 2482 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2483 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2484 ACTION_SUCCESS ( g©t_þ›Á_g‘_desütÜ_aùiÚ , 2485 & g‘_desc_d©a_1 ), 2486 CALLBACK_GATTC_GET_DESCRIPTOR ( GATT_STATUS_SUCCESS , CONN1_ID , 2487 & £rviû_1 , & ch¬aù”i¡ic_1 , & desc_1 ), 2488 ACTION_SUCCESS ( g©t_þ›Á_»ad_desütÜ_aùiÚ , 2489 & »ad_desc_d©a_1 ), 2490 CALLBACK_GATTC_READ_DESCRIPTOR ( GATT_STATUS_INS_AUTH , 2491 CONN1_ID , & »ad_·¿ms_1 ), 2492 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2493 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2495 TEST_CASE_BREDRLE ("Gatt Client - Read Descriptor - Wrong…arams", 2496 ACTION_SUCCESS ( š™_pdus , »ad_desütÜ_2 ), 2497 ACTION_SUCCESS ( š™_»ad_·¿ms_aùiÚ , & £t_»ad_·¿m_6 ), 2498 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2499 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2500 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2501 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2502 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2503 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2504 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2505 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2506 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2507 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2508 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2509 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2510 ´Ý_emu_»mÙes_deçuÉ_£t , 2511 CONN1_ID , APP1_ID ), 2512 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2513 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2514 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2515 & g‘_ch¬_d©a_1 ), 2516 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2517 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2518 ACTION_SUCCESS ( g©t_þ›Á_g‘_desütÜ_aùiÚ , 2519 & g‘_desc_d©a_1 ), 2520 CALLBACK_GATTC_GET_DESCRIPTOR ( GATT_STATUS_SUCCESS , CONN1_ID , 2521 & £rviû_1 , & ch¬aù”i¡ic_1 , & desc_1 ), 2522 ACTION_FAIL ( g©t_þ›Á_»ad_desütÜ_aùiÚ , 2523 & »ad_desc_d©a_2 ), 2524 CALLBACK_GATTC_READ_DESCRIPTOR ( GATT_STATUS_FAILURE , 2525 CONN1_ID , & »ad_·¿ms_1 ), 2526 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2527 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2529 TEST_CASE_BREDRLE ("Gatt Client - Write Characteristic Cmd - Success", 2530 ACTION_SUCCESS ( š™_pdus , wr™e_ch¬aù”i¡ic_1 ), 2531 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2532 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2533 ACTION_SUCCESS ( š™_wr™e_·¿ms_aùiÚ , & £t_wr™e_·¿m_1 ), 2534 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2535 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2536 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2537 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2538 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2539 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2540 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2541 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2542 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2543 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2544 ´Ý_emu_»mÙes_deçuÉ_£t , 2545 CONN1_ID , APP1_ID ), 2546 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2547 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2548 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2549 & g‘_ch¬_d©a_1 ), 2550 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2551 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2552 ACTION_SUCCESS ( g©t_þ›Á_wr™e_ch¬aù”i¡ic_aùiÚ , 2553 & wr™e_ch¬_d©a_1 ), 2554 CALLBACK_GATTC_WRITE_CHARACTERISTIC ( GATT_STATUS_SUCCESS , 2555 CONN1_ID , & wr™e_·¿ms_1 ), 2556 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2557 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2559 TEST_CASE_BREDRLE ("Gatt Client - Write Characteristic Req - Success", 2560 ACTION_SUCCESS ( š™_pdus , wr™e_ch¬aù”i¡ic_2 ), 2561 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2562 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2563 ACTION_SUCCESS ( š™_wr™e_·¿ms_aùiÚ , & £t_wr™e_·¿m_1 ), 2564 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2565 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2566 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2567 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2568 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2569 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2570 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2571 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2572 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2573 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2574 ´Ý_emu_»mÙes_deçuÉ_£t , 2575 CONN1_ID , APP1_ID ), 2576 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2577 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2578 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2579 & g‘_ch¬_d©a_1 ), 2580 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2581 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2582 ACTION_SUCCESS ( g©t_þ›Á_wr™e_ch¬aù”i¡ic_aùiÚ , 2583 & wr™e_ch¬_d©a_2 ), 2584 CALLBACK_GATTC_WRITE_CHARACTERISTIC ( GATT_STATUS_SUCCESS , 2585 CONN1_ID , & wr™e_·¿ms_1 ), 2586 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2587 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2589 TEST_CASE_BREDRLE ("Gatt Client - Write Characteristic - Insuf. Auth.", 2590 ACTION_SUCCESS ( š™_pdus , wr™e_ch¬aù”i¡ic_3 ), 2591 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2592 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2593 ACTION_SUCCESS ( š™_wr™e_·¿ms_aùiÚ , & £t_wr™e_·¿m_2 ), 2594 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2595 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2596 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2597 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2598 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2599 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2600 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2601 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2602 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2603 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2604 ´Ý_emu_»mÙes_deçuÉ_£t , 2605 CONN1_ID , APP1_ID ), 2606 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2607 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2608 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2609 & g‘_ch¬_d©a_1 ), 2610 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2611 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2612 ACTION_SUCCESS ( g©t_þ›Á_wr™e_ch¬aù”i¡ic_aùiÚ , 2613 & wr™e_ch¬_d©a_2 ), 2614 CALLBACK_GATTC_WRITE_CHARACTERISTIC ( GATT_STATUS_INS_AUTH , 2615 CONN1_ID , & wr™e_·¿ms_1 ), 2616 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2617 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2619 TEST_CASE_BREDRLE ("Gatt Client - Write Characteristic - Wrong Params", 2620 ACTION_SUCCESS ( š™_pdus , wr™e_ch¬aù”i¡ic_3 ), 2621 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2622 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2623 ACTION_SUCCESS ( š™_wr™e_·¿ms_aùiÚ , & £t_wr™e_·¿m_3 ), 2624 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2625 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2626 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2627 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2628 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2629 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2630 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2631 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2632 ACTION_FAIL ( g©t_þ›Á_wr™e_ch¬aù”i¡ic_aùiÚ , 2633 & wr™e_ch¬_d©a_2 ), 2634 CALLBACK_GATTC_WRITE_CHARACTERISTIC ( GATT_STATUS_FAILURE , 2635 CONN1_ID , & wr™e_·¿ms_1 ), 2636 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2637 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2639 TEST_CASE_BREDRLE ("Gatt Client - Register For Notification - Success", 2640 ACTION_SUCCESS ( š™_pdus , nÙifiÿtiÚ_1 ), 2641 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2642 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2643 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2644 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2645 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2646 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2647 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2648 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2649 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2650 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2651 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2652 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2653 ´Ý_emu_»mÙes_deçuÉ_£t , 2654 CONN1_ID , APP1_ID ), 2655 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2656 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2657 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2658 & g‘_ch¬_d©a_1 ), 2659 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2660 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2661 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_fÜ_nÙifiÿtiÚ_aùiÚ , 2662 & nÙif_d©a_1 ), 2663 CALLBACK_GATTC_REGISTER_FOR_NOTIF ( GATT_STATUS_SUCCESS , CONN1_ID , 2664 & ch¬aù”i¡ic_1 , 2665 & £rviû_1 , 1), 2666 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2667 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2669 TEST_CASE_BREDRLE ("Gatt Client - Deregister For Notification - Success", 2670 ACTION_SUCCESS ( š™_pdus , nÙifiÿtiÚ_1 ), 2671 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2672 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2673 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2674 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2675 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2676 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2677 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2678 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2679 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2680 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2681 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2682 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2683 ´Ý_emu_»mÙes_deçuÉ_£t , 2684 CONN1_ID , APP1_ID ), 2685 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2686 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2687 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2688 & g‘_ch¬_d©a_1 ), 2689 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2690 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2691 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_fÜ_nÙifiÿtiÚ_aùiÚ , 2692 & nÙif_d©a_1 ), 2693 CALLBACK_GATTC_REGISTER_FOR_NOTIF ( GATT_STATUS_SUCCESS , CONN1_ID , 2694 & ch¬aù”i¡ic_1 , 2695 & £rviû_1 , 1), 2696 ACTION_SUCCESS ( g©t_þ›Á_d”egi¡”_fÜ_nÙifiÿtiÚ_aùiÚ , 2697 & nÙif_d©a_1 ), 2698 CALLBACK_GATTC_REGISTER_FOR_NOTIF ( GATT_STATUS_SUCCESS , CONN1_ID , 2699 & ch¬aù”i¡ic_1 , 2700 & £rviû_1 , 0), 2701 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2702 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2704 TEST_CASE_BREDRLE ("Gatt Client - Register For Notification - Indicate", 2705 ACTION_SUCCESS ( š™_pdus , nÙifiÿtiÚ_2 ), 2706 ACTION_SUCCESS ( š™_nÙify_·¿ms_aùiÚ , & £t_nÙify_·¿m_1 ), 2707 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2708 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2709 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2710 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2711 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2712 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2713 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2714 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2715 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2716 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2717 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2718 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2719 ´Ý_emu_»mÙes_deçuÉ_£t , 2720 CONN1_ID , APP1_ID ), 2721 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2722 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2723 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2724 & g‘_ch¬_d©a_1 ), 2725 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2726 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2727 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_fÜ_nÙifiÿtiÚ_aùiÚ , 2728 & nÙif_d©a_1 ), 2729 CALLBACK_GATTC_REGISTER_FOR_NOTIF ( GATT_STATUS_SUCCESS , CONN1_ID , 2730 & ch¬aù”i¡ic_1 , 2731 & £rviû_1 , 1), 2732 ACTION_SUCCESS ( g©t_»mÙe_£nd_äame_aùiÚ , NULL ), 2733 CALLBACK_GATTC_NOTIFY ( CONN1_ID , & nÙify_·¿ms_1 ), 2734 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2735 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2737 TEST_CASE_BREDRLE ("Gatt Client - Register For Notification - Notify", 2738 ACTION_SUCCESS ( š™_pdus , nÙifiÿtiÚ_3 ), 2739 ACTION_SUCCESS ( š™_nÙify_·¿ms_aùiÚ , & £t_nÙify_·¿m_2 ), 2740 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2741 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2742 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2743 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2744 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2745 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2746 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2747 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2748 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2749 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2750 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2751 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2752 ´Ý_emu_»mÙes_deçuÉ_£t , 2753 CONN1_ID , APP1_ID ), 2754 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2755 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2756 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2757 & g‘_ch¬_d©a_1 ), 2758 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2759 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2760 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_fÜ_nÙifiÿtiÚ_aùiÚ , 2761 & nÙif_d©a_1 ), 2762 CALLBACK_GATTC_REGISTER_FOR_NOTIF ( GATT_STATUS_SUCCESS , CONN1_ID , 2763 & ch¬aù”i¡ic_1 , 2764 & £rviû_1 , 1), 2765 ACTION_SUCCESS ( g©t_»mÙe_£nd_äame_aùiÚ , NULL ), 2766 CALLBACK_GATTC_NOTIFY ( CONN1_ID , & nÙify_·¿ms_1 ), 2767 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2768 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2770 TEST_CASE_BREDRLE ("Gatt Client - Write Descriptor - Success", 2771 ACTION_SUCCESS ( š™_pdus , wr™e_desütÜ_1 ), 2772 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2773 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2774 ACTION_SUCCESS ( š™_wr™e_·¿ms_aùiÚ , & £t_wr™e_·¿m_4 ), 2775 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2776 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2777 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2778 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2779 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2780 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2781 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2782 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2783 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2784 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2785 ´Ý_emu_»mÙes_deçuÉ_£t , 2786 CONN1_ID , APP1_ID ), 2787 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2788 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2789 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2790 & g‘_ch¬_d©a_1 ), 2791 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2792 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2793 ACTION_SUCCESS ( g©t_þ›Á_g‘_desütÜ_aùiÚ , 2794 & g‘_desc_d©a_1 ), 2795 CALLBACK_GATTC_GET_DESCRIPTOR ( GATT_STATUS_SUCCESS , CONN1_ID , 2796 & £rviû_1 , & ch¬aù”i¡ic_1 , & desc_1 ), 2797 ACTION_SUCCESS ( g©t_þ›Á_wr™e_desütÜ_aùiÚ , 2798 & wr™e_desc_d©a_1 ), 2799 CALLBACK_GATTC_WRITE_DESCRIPTOR ( GATT_STATUS_SUCCESS , 2800 CONN1_ID , & wr™e_·¿ms_1 ), 2801 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2802 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2804 TEST_CASE_BREDRLE ("Gatt Client - Write Descriptor - Insuf. Auth.", 2805 ACTION_SUCCESS ( š™_pdus , wr™e_desütÜ_2 ), 2806 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2807 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2808 ACTION_SUCCESS ( š™_wr™e_·¿ms_aùiÚ , & £t_wr™e_·¿m_6 ), 2809 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2810 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2811 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2812 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2813 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2814 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2815 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2816 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2817 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2818 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2819 ´Ý_emu_»mÙes_deçuÉ_£t , 2820 CONN1_ID , APP1_ID ), 2821 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2822 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2823 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2824 & g‘_ch¬_d©a_1 ), 2825 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2826 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2827 ACTION_SUCCESS ( g©t_þ›Á_g‘_desütÜ_aùiÚ , 2828 & g‘_desc_d©a_1 ), 2829 CALLBACK_GATTC_GET_DESCRIPTOR ( GATT_STATUS_SUCCESS , CONN1_ID , 2830 & £rviû_1 , & ch¬aù”i¡ic_1 , & desc_1 ), 2831 ACTION_SUCCESS ( g©t_þ›Á_wr™e_desütÜ_aùiÚ , 2832 & wr™e_desc_d©a_1 ), 2833 CALLBACK_GATTC_WRITE_DESCRIPTOR ( GATT_STATUS_INS_AUTH , 2834 CONN1_ID , & wr™e_·¿ms_1 ), 2835 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2836 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2838 TEST_CASE_BREDRLE ("Gatt Client - Write Descriptor - Wrong Param", 2839 ACTION_SUCCESS ( š™_pdus , wr™e_desütÜ_1 ), 2840 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2841 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2842 ACTION_SUCCESS ( š™_wr™e_·¿ms_aùiÚ , & £t_wr™e_·¿m_5 ), 2843 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2844 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2845 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2846 ACTION_SUCCESS ( g©t_þ›Á_»gi¡”_aùiÚ , & ­p1_uuid ), 2847 CALLBACK_STATUS ( CB_GATTC_REGISTER_CLIENT , BT_STATUS_SUCCESS ), 2848 ACTION_SUCCESS ( g©t_þ›Á_¡¬t_sÿn_aùiÚ , NULL ), 2849 CLLBACK_GATTC_SCAN_RES ( ´Ý_emu_»mÙes_deçuÉ_£t , 1, TRUE ), 2850 ACTION_SUCCESS ( g©t_þ›Á_¡Ý_sÿn_aùiÚ , NULL ), 2851 ACTION_SUCCESS ( g©t_þ›Á_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2852 CALLBACK_GATTC_CONNECT ( GATT_STATUS_SUCCESS , 2853 ´Ý_emu_»mÙes_deçuÉ_£t , 2854 CONN1_ID , APP1_ID ), 2855 ACTION_SUCCESS ( g©t_þ›Á_£¬ch_£rviûs , & £¬ch_£rviûs_1 ), 2856 CALLBACK_GATTC_SEARCH_COMPLETE ( GATT_STATUS_SUCCESS , CONN1_ID ), 2857 ACTION_SUCCESS ( g©t_þ›Á_g‘_ch¬aù”i¡ic_aùiÚ , 2858 & g‘_ch¬_d©a_1 ), 2859 CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( GATT_STATUS_SUCCESS , 2860 CONN1_ID , & £rviû_1 , & ch¬aù”i¡ic_1 , 4), 2861 ACTION_SUCCESS ( g©t_þ›Á_g‘_desütÜ_aùiÚ , 2862 & g‘_desc_d©a_1 ), 2863 CALLBACK_GATTC_GET_DESCRIPTOR ( GATT_STATUS_SUCCESS , CONN1_ID , 2864 & £rviû_1 , & ch¬aù”i¡ic_1 , & desc_1 ), 2865 ACTION_FAIL ( g©t_þ›Á_wr™e_desütÜ_aùiÚ , 2866 & wr™e_desc_d©a_2 ), 2867 CALLBACK_GATTC_WRITE_DESCRIPTOR ( GATT_STATUS_FAILURE , 2868 CONN1_ID , & wr™e_·¿ms_1 ), 2869 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2870 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2872 TEST_CASE_BREDRLE ("Gatt Server - Register", 2873 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 2874 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 2876 TEST_CASE_BREDRLE ("Gatt Server - Unregister", 2877 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 2878 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 2879 ACTION_SUCCESS ( g©t_£rv”_uÄegi¡”_aùiÚ , 2880 INT_TO_PTR ( APP1_ID )), 2881 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 2882 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 2884 TEST_CASE_BREDRLE ("Gatt Server - LE Connect", 2885 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2886 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2887 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2888 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2889 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2890 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 2891 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 2892 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 2893 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 2894 BT_DISCOVERY_STARTED ), 2895 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_Ë_£t , 2), 2896 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 2897 ACTION_SUCCESS ( g©t_£rv”_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2898 CALLBACK_GATTS_CONNECTION ( GATT_SERVER_CONNECTED , 2899 ´Ý_emu_»mÙes_deçuÉ_£t , 2900 CONN1_ID , APP1_ID ), 2901 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2902 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2904 TEST_CASE_BREDRLE ("Gatt Server - LE Disconnect", 2905 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2906 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2907 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2908 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2909 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2910 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 2911 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 2912 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 2913 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 2914 BT_DISCOVERY_STARTED ), 2915 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_Ë_£t , 2), 2916 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 2917 ACTION_SUCCESS ( g©t_£rv”_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2918 CALLBACK_GATTS_CONNECTION ( GATT_SERVER_CONNECTED , 2919 ´Ý_emu_»mÙes_deçuÉ_£t , 2920 CONN1_ID , APP1_ID ), 2921 ACTION_SUCCESS ( g©t_£rv”_discÚÃù_aùiÚ , 2922 & ­p1_cÚn_»q ), 2923 CALLBACK_GATTS_CONNECTION ( GATT_SERVER_DISCONNECTED , 2924 ´Ý_emu_»mÙes_deçuÉ_£t , 2925 CONN1_ID , APP1_ID ), 2926 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2927 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2929 TEST_CASE_BREDRLE ("Gatt Server - LE Multiple Server Conn./Disc", 2930 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 2931 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 2932 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 2933 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 2934 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 2935 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 2936 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 2937 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p2_uuid ), 2938 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 2939 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 2940 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 2941 BT_DISCOVERY_STARTED ), 2942 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_Ë_£t , 2), 2943 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 2944 ACTION_SUCCESS ( g©t_£rv”_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2945 CALLBACK_GATTS_CONNECTION ( GATT_SERVER_CONNECTED , 2946 ´Ý_emu_»mÙes_deçuÉ_£t , 2947 CONN1_ID , APP1_ID ), 2948 ACTION_SUCCESS ( g©t_£rv”_cÚÃù_aùiÚ , & ­p2_cÚn_»q ), 2949 CALLBACK_GATTS_CONNECTION ( GATT_SERVER_CONNECTED , 2950 ´Ý_emu_»mÙes_deçuÉ_£t , 2951 CONN2_ID , APP2_ID ), 2952 ACTION_SUCCESS ( g©t_£rv”_discÚÃù_aùiÚ , & ­p2_cÚn_»q ), 2953 CALLBACK_GATTS_CONNECTION ( GATT_SERVER_DISCONNECTED , 2954 ´Ý_emu_»mÙes_deçuÉ_£t , 2955 CONN2_ID , APP2_ID ), 2956 ACTION_SUCCESS ( g©t_£rv”_discÚÃù_aùiÚ , & ­p1_cÚn_»q ), 2957 CALLBACK_GATTS_CONNECTION ( GATT_SERVER_DISCONNECTED , 2958 ´Ý_emu_»mÙes_deçuÉ_£t , 2959 CONN1_ID , APP1_ID ), 2960 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 2961 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 2963 TEST_CASE_BREDRLE ("Gatt Server - Add Single Service Successful", 2964 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 2965 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 2966 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 2967 & add_£rviû_d©a_1 ), 2968 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 2969 & £rviû_add_1 , NULL , NULL), 2971 TEST_CASE_BREDRLE ("Gatt Server - Add Multiple Services Successful", 2972 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 2973 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 2974 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 2975 & add_£rviû_d©a_1 ), 2976 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 2977 & £rviû_add_1 , NULL , NULL), 2978 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 2979 & add_£rviû_d©a_2 ), 2980 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 2981 & £rviû_add_2 , NULL , NULL), 2982 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 2983 & add_£rviû_d©a_3 ), 2984 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 2985 & £rviû_add_3 , NULL , NULL), 2987 TEST_CASE_BREDRLE ("Gatt Server - Add Service with 0 handles", 2988 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 2989 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 2990 ACTION_FAIL ( g©t_£rv”_add_£rviû_aùiÚ , 2991 & add_bad_£rviû_d©a_1 ), 2992 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_FAILURE , APP1_ID , 2993 & £rviû_add_1 , NULL , NULL), 2995 TEST_CASE_BREDRLE ("Gatt Server - Add Secondary Service", 2996 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 2997 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 2998 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 2999 & add_£c_£rviû_d©a_1 ), 3000 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3001 & šþuded_1 , NULL , NULL), 3003 TEST_CASE_BREDRLE ("Gatt Server - Add Included Service Successful", 3004 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3005 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3006 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3007 & add_£rviû_d©a_4 ), 3008 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3009 & £rviû_add_1 , NULL , 3010 & ¤vc1_hªdË ), 3011 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3012 & add_£rviû_d©a_4 ), 3013 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3014 & £rviû_add_1 , NULL , 3015 & šc_¤vc1_hªdË ), 3016 ACTION_SUCCESS ( g©t_£rv”_add_šc_£rviû_aùiÚ , 3017 & add_šc_£rviû_d©a_1 ), 3018 CALLBACK_GATTS_INC_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3019 & ¤vc1_hªdË , NULL ), 3021 TEST_CASE_BREDRLE ("Gatt Server - Add Inc. Service with wrong handle", 3022 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3023 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3024 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3025 & add_£rviû_d©a_4 ), 3026 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3027 & £rviû_add_1 , NULL , 3028 & ¤vc1_hªdË ), 3029 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3030 & add_£rviû_d©a_4 ), 3031 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3032 & £rviû_add_1 , NULL , NULL), 3033 ACTION_FAIL ( g©t_£rv”_add_šc_£rviû_aùiÚ , 3034 & add_bad_šc_£rviû_d©a_1 ), 3035 CALLBACK_GATTS_INC_SERVICE_ADDED ( GATT_STATUS_FAILURE , APP1_ID , 3036 & ¤vc1_hªdË , NULL ), 3038 TEST_CASE_BREDRLE ("Gatt Server - Add Single Characteristic Successful", 3039 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3040 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3041 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3042 & add_£rviû_d©a_5 ), 3043 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3044 & £rviû_add_1 , NULL , 3045 & ¤vc1_hªdË ), 3046 ACTION_SUCCESS ( g©t_£rv”_add_ch¬_aùiÚ , & add_ch¬_d©a_1 ), 3047 CALLBACK_GATTS_CHARACTERISTIC_ADDED ( GATT_STATUS_SUCCESS , 3048 APP1_ID , & ­p1_uuid , 3049 & ¤vc1_hªdË , NULL , 3050 NULL ), 3052 TEST_CASE_BREDRLE ("Gatt Server - Add Char. wrong service handle", 3053 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3054 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3055 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3056 & add_£rviû_d©a_5 ), 3057 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3058 & £rviû_add_1 , NULL , 3059 & ¤vc1_hªdË ), 3060 ACTION_FAIL ( g©t_£rv”_add_ch¬_aùiÚ , & add_bad_ch¬_d©a_1 ), 3061 CALLBACK_GATTS_CHARACTERISTIC_ADDED ( GATT_STATUS_FAILURE , 3062 APP1_ID , & ­p1_uuid , 3063 NULL , NULL, NULL), 3065 TEST_CASE_BREDRLE ("Gatt Server - Add Single Descriptor Successful", 3066 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3067 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3068 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3069 & add_£rviû_d©a_6 ), 3070 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3071 & £rviû_add_1 , NULL , 3072 & ¤vc1_hªdË ), 3073 ACTION_SUCCESS ( g©t_£rv”_add_ch¬_aùiÚ , & add_ch¬_d©a_1 ), 3074 CALLBACK_GATTS_CHARACTERISTIC_ADDED ( GATT_STATUS_SUCCESS , 3075 APP1_ID , & ­p1_uuid , 3076 & ¤vc1_hªdË , NULL , 3077 NULL ), 3078 ACTION_SUCCESS ( g©t_£rv”_add_desc_aùiÚ , & add_desc_d©a_1 ), 3079 CALLBACK_GATTS_DESCRIPTOR_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3080 & ­p2_uuid , & ¤vc1_hªdË , 3081 NULL , NULL), 3083 TEST_CASE_BREDRLE ("Gatt Server - Add Desc. wrong service handle", 3084 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3085 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3086 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3087 & add_£rviû_d©a_6 ), 3088 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3089 & £rviû_add_1 , NULL , 3090 & ¤vc1_hªdË ), 3091 ACTION_SUCCESS ( g©t_£rv”_add_ch¬_aùiÚ , & add_ch¬_d©a_1 ), 3092 CALLBACK_GATTS_CHARACTERISTIC_ADDED ( GATT_STATUS_SUCCESS , 3093 APP1_ID , & ­p1_uuid , 3094 & ¤vc1_hªdË , NULL , 3095 NULL ), 3096 ACTION_FAIL ( g©t_£rv”_add_desc_aùiÚ , & add_bad_desc_d©a_1 ), 3097 CALLBACK_GATTS_DESCRIPTOR_ADDED ( GATT_STATUS_FAILURE , APP1_ID , 3098 & ­p2_uuid , NULL , NULL, NULL), 3100 TEST_CASE_BREDRLE ("Gatt Server - Add Desc. wrong‡pp ID", 3101 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3102 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3103 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3104 & add_£rviû_d©a_6 ), 3105 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3106 & £rviû_add_1 , NULL , 3107 & ¤vc1_hªdË ), 3108 ACTION_SUCCESS ( g©t_£rv”_add_ch¬_aùiÚ , & add_ch¬_d©a_1 ), 3109 CALLBACK_GATTS_CHARACTERISTIC_ADDED ( GATT_STATUS_SUCCESS , 3110 APP1_ID , & ­p1_uuid , 3111 & ¤vc1_hªdË , NULL , 3112 NULL ), 3113 ACTION_FAIL ( g©t_£rv”_add_desc_aùiÚ , & add_bad_desc_d©a_2 ), 3114 CALLBACK_GATTS_DESCRIPTOR_ADDED ( GATT_STATUS_FAILURE , APP2_ID , 3115 & ­p2_uuid , NULL , NULL, NULL), 3117 TEST_CASE_BREDRLE ("Gatt Server - Start Service Successful BREDRLE", 3118 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3119 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3120 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3121 & add_£rviû_d©a_1 ), 3122 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3123 & £rviû_add_1 , NULL , 3124 & ¤vc1_hªdË ), 3125 ACTION_SUCCESS ( g©t_£rv”_¡¬t_¤vc_aùiÚ , 3126 & ¡¬t_¤vc_d©a_1 ), 3127 CALLBACK_GATTS_SERVICE_STARTED ( GATT_STATUS_SUCCESS , APP1_ID , 3128 & ¤vc1_hªdË ), 3130 TEST_CASE_BREDRLE ("Gatt Server - Start Service Successful LE", 3131 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3132 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3133 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3134 & add_£rviû_d©a_1 ), 3135 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3136 & £rviû_add_1 , NULL , 3137 & ¤vc1_hªdË ), 3138 ACTION_SUCCESS ( g©t_£rv”_¡¬t_¤vc_aùiÚ , 3139 & ¡¬t_¤vc_d©a_2 ), 3140 CALLBACK_GATTS_SERVICE_STARTED ( GATT_STATUS_SUCCESS , APP1_ID , 3141 & ¤vc1_hªdË ), 3143 TEST_CASE_BREDRLE ("Gatt Server - Start Service wrong service handle", 3144 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3145 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3146 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3147 & add_£rviû_d©a_1 ), 3148 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3149 & £rviû_add_1 , NULL , NULL), 3150 ACTION_FAIL ( g©t_£rv”_¡¬t_¤vc_aùiÚ , 3151 & ¡¬t_bad_¤vc_d©a_1 ), 3152 CALLBACK_GATTS_SERVICE_STARTED ( GATT_STATUS_FAILURE , APP1_ID , 3153 NULL ), 3155 TEST_CASE_BREDRLE ("Gatt Server - Start Service wrong serverransport", 3156 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3157 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3158 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3159 & add_£rviû_d©a_1 ), 3160 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3161 & £rviû_add_1 , NULL , 3162 & ¤vc1_hªdË ), 3163 ACTION_FAIL ( g©t_£rv”_¡¬t_¤vc_aùiÚ , 3164 & ¡¬t_bad_¤vc_d©a_2 ), 3165 CALLBACK_GATTS_SERVICE_STARTED ( GATT_STATUS_FAILURE , APP1_ID , 3166 & ¤vc1_hªdË ), 3168 TEST_CASE_BREDRLE ("Gatt Server - Stop Service Successful", 3169 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3170 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3171 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3172 & add_£rviû_d©a_1 ), 3173 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3174 & £rviû_add_1 , NULL , 3175 & ¤vc1_hªdË ), 3176 ACTION_SUCCESS ( g©t_£rv”_¡¬t_¤vc_aùiÚ , 3177 & ¡¬t_¤vc_d©a_1 ), 3178 CALLBACK_GATTS_SERVICE_STARTED ( GATT_STATUS_SUCCESS , APP1_ID , 3179 & ¤vc1_hªdË ), 3180 ACTION_SUCCESS ( g©t_£rv”_¡Ý_¤vc_aùiÚ , & ¡Ý_¤vc_d©a_1 ), 3181 CALLBACK_GATTS_SERVICE_STOPPED ( GATT_STATUS_SUCCESS , APP1_ID , 3182 & ¤vc1_hªdË ), 3184 TEST_CASE_BREDRLE ("Gatt Server - Stop Service wrong service handle", 3185 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3186 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3187 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3188 & add_£rviû_d©a_1 ), 3189 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3190 & £rviû_add_1 , NULL , 3191 & ¤vc1_hªdË ), 3192 ACTION_SUCCESS ( g©t_£rv”_¡¬t_¤vc_aùiÚ , 3193 & ¡¬t_¤vc_d©a_1 ), 3194 CALLBACK_GATTS_SERVICE_STARTED ( GATT_STATUS_SUCCESS , APP1_ID , 3195 & ¤vc1_hªdË ), 3196 ACTION_FAIL ( g©t_£rv”_¡Ý_¤vc_aùiÚ , 3197 & ¡Ý_bad_¤vc_d©a_1 ), 3198 CALLBACK_GATTS_SERVICE_STOPPED ( GATT_STATUS_FAILURE , APP1_ID , 3199 NULL ), 3201 TEST_CASE_BREDRLE ("Gatt Server - Delete Service Successful", 3202 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3203 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3204 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3205 & add_£rviû_d©a_1 ), 3206 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3207 & £rviû_add_1 , NULL , 3208 & ¤vc1_hªdË ), 3209 ACTION_SUCCESS ( g©t_£rv”_d–‘e_¤vc_aùiÚ , 3210 & d–‘e_¤vc_d©a_1 ), 3211 CALLBACK_GATTS_SERVICE_DELETED ( GATT_STATUS_SUCCESS , APP1_ID , 3212 & ¤vc1_hªdË ), 3214 TEST_CASE_BREDRLE ("Gatt Server - Delete Service wrong handle", 3215 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3216 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3217 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3218 & add_£rviû_d©a_1 ), 3219 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3220 & £rviû_add_1 , NULL , 3221 & ¤vc1_hªdË ), 3222 ACTION_FAIL ( g©t_£rv”_d–‘e_¤vc_aùiÚ , 3223 & d–‘e_bad_¤vc_d©a_1 ), 3224 CALLBACK_GATTS_SERVICE_DELETED ( GATT_STATUS_FAILURE , APP1_ID , 3225 NULL ), 3227 TEST_CASE_BREDRLE ("Gatt Server - Send Indication", 3228 ACTION_SUCCESS ( š™_pdus , £nd_šdiÿtiÚ_1 ), 3229 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 3230 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 3231 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 3232 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 3233 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 3234 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3235 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3236 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 3237 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 3238 BT_DISCOVERY_STARTED ), 3239 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_Ë_£t , 2), 3240 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 3241 ACTION_SUCCESS ( g©t_£rv”_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 3242 CALLBACK_GATTS_CONNECTION ( GATT_SERVER_CONNECTED , 3243 ´Ý_emu_»mÙes_deçuÉ_£t , 3244 CONN1_ID , APP1_ID ), 3245 ACTION_SUCCESS ( g©t_£rv”_£nd_šdiÿtiÚ_aùiÚ , 3246 & £nd_šdiÿtiÚ_d©a_1 ), 3247 CALLBACK ( CB_EMU_VALUE_INDICATION ), 3248 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 3249 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 3251 TEST_CASE_BREDRLE ("Gatt Server - Send Notification", 3252 ACTION_SUCCESS ( š™_pdus , £nd_nÙifiÿtiÚ_1 ), 3253 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 3254 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 3255 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 3256 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 3257 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 3258 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3259 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3260 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 3261 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 3262 BT_DISCOVERY_STARTED ), 3263 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_Ë_£t , 2), 3264 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 3265 ACTION_SUCCESS ( g©t_£rv”_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 3266 CALLBACK_GATTS_CONNECTION ( GATT_SERVER_CONNECTED , 3267 ´Ý_emu_»mÙes_deçuÉ_£t , 3268 CONN1_ID , APP1_ID ), 3269 ACTION_SUCCESS ( g©t_£rv”_£nd_šdiÿtiÚ_aùiÚ , 3270 & £nd_šdiÿtiÚ_d©a_2 ), 3271 CALLBACK ( CB_EMU_VALUE_NOTIFICATION ), 3272 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 3273 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 3275 TEST_CASE_BREDRLE ("Gatt Server - Send Notification, wrong conn id", 3276 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 3277 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 3278 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 3279 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 3280 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 3281 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3282 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3283 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 3284 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 3285 BT_DISCOVERY_STARTED ), 3286 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_Ë_£t , 2), 3287 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 3288 ACTION_SUCCESS ( g©t_£rv”_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 3289 CALLBACK_GATTS_CONNECTION ( GATT_SERVER_CONNECTED , 3290 ´Ý_emu_»mÙes_deçuÉ_£t , 3291 CONN1_ID , APP1_ID ), 3292 ACTION_FAIL ( g©t_£rv”_£nd_šdiÿtiÚ_aùiÚ , 3293 & £nd_bad_šdiÿtiÚ_d©a_1 ), 3294 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 3295 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 3297 TEST_CASE_BREDRLE ("Gatt Server - Send„esponseo„ead char„equest", 3298 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 3299 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 3300 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 3301 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 3302 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 3303 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3304 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3305 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3306 & add_£rviû_d©a_5 ), 3307 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3308 & £rviû_add_1 , NULL , 3309 & ¤vc1_hªdË ), 3310 ACTION_SUCCESS ( g©t_£rv”_add_ch¬_aùiÚ , & add_ch¬_d©a_1 ), 3311 CALLBACK_GATTS_CHARACTERISTIC_ADDED ( GATT_STATUS_SUCCESS , 3312 APP1_ID , & ­p1_uuid , 3313 & ¤vc1_hªdË , NULL , 3314 & ch¬1_hªdË ), 3315 ACTION_SUCCESS ( g©t_£rv”_¡¬t_¤vc_aùiÚ , 3316 & ¡¬t_¤vc_d©a_2 ), 3317 CALLBACK_GATTS_SERVICE_STARTED ( GATT_STATUS_SUCCESS , APP1_ID , 3318 & ¤vc1_hªdË ), 3319 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 3320 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 3321 BT_DISCOVERY_STARTED ), 3322 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_Ë_£t , 2), 3323 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 3324 ACTION_SUCCESS ( g©t_£rv”_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 3325 CALLBACK_GATTS_CONNECTION ( GATT_SERVER_CONNECTED , 3326 ´Ý_emu_»mÙes_deçuÉ_£t , 3327 CONN1_ID , APP1_ID ), 3328 MODIFY_DATA ( GATT_STATUS_SUCCESS , g©t_©t_pdu_modify , 3329 & ch¬1_hªdË , & ©t_»ad_»q , 3330 ATT_HANDLE_SIZE ), 3331 ACTION_SUCCESS ( g©t_»mÙe_£nd_¿w_pdu_aùiÚ , & ©t_»ad_»q ), 3332 CALLBACK_GATTS_REQUEST_READ ( CONN1_ID , TRANS1_ID , 3333 ´Ý_emu_»mÙes_deçuÉ_£t , 3334 & ch¬1_hªdË , 0, çl£ ), 3335 ACTION_SUCCESS ( g©t_£rv”_£nd_»¥Ú£_aùiÚ , 3336 & £nd_»¥_d©a_1 ), 3337 CALLBACK ( CB_EMU_READ_RESPONSE ), 3338 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 3339 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 3341 TEST_CASE_BREDRLE ("Gatt Server - Send„esponseo write char„equest", 3342 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 3343 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 3344 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 3345 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 3346 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , g©t_cÚn_cb ), 3347 ACTION_SUCCESS ( g©t_£rv”_»gi¡”_aùiÚ , & ­p1_uuid ), 3348 CALLBACK_STATUS ( CB_GATTS_REGISTER_SERVER , BT_STATUS_SUCCESS ), 3349 ACTION_SUCCESS ( g©t_£rv”_add_£rviû_aùiÚ , 3350 & add_£rviû_d©a_5 ), 3351 CALLBACK_GATTS_SERVICE_ADDED ( GATT_STATUS_SUCCESS , APP1_ID , 3352 & £rviû_add_1 , NULL , 3353 & ¤vc1_hªdË ), 3354 ACTION_SUCCESS ( g©t_£rv”_add_ch¬_aùiÚ , & add_ch¬_d©a_2 ), 3355 CALLBACK_GATTS_CHARACTERISTIC_ADDED ( GATT_STATUS_SUCCESS , 3356 APP1_ID , & ­p1_uuid , 3357 & ¤vc1_hªdË , NULL , 3358 & ch¬1_hªdË ), 3359 ACTION_SUCCESS ( g©t_£rv”_¡¬t_¤vc_aùiÚ , 3360 & ¡¬t_¤vc_d©a_2 ), 3361 CALLBACK_GATTS_SERVICE_STARTED ( GATT_STATUS_SUCCESS , APP1_ID , 3362 & ¤vc1_hªdË ), 3363 ACTION_SUCCESS ( bt_¡¬t_discov”y_aùiÚ , NULL ), 3364 CALLBACK_STATE ( CB_BT_DISCOVERY_STATE_CHANGED , 3365 BT_DISCOVERY_STARTED ), 3366 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_Ë_£t , 2), 3367 ACTION_SUCCESS ( bt_ÿnûl_discov”y_aùiÚ , NULL ), 3368 ACTION_SUCCESS ( g©t_£rv”_cÚÃù_aùiÚ , & ­p1_cÚn_»q ), 3369 CALLBACK_GATTS_CONNECTION ( GATT_SERVER_CONNECTED , 3370 ´Ý_emu_»mÙes_deçuÉ_£t , 3371 CONN1_ID , APP1_ID ), 3372 MODIFY_DATA ( GATT_STATUS_SUCCESS , g©t_©t_pdu_modify , 3373 & ©t_wr™e_»q_d©a_1 , & ©t_wr™e_»q_1 , 3374 ( ©t_wr™e_»q_v®ue_1 ) + 3375 ATT_HANDLE_SIZE ), 3376 ACTION_SUCCESS ( g©t_»mÙe_£nd_¿w_pdu_aùiÚ , 3377 & ©t_wr™e_»q_1 ), 3378 CALLBACK_GATTS_REQUEST_WRITE ( CONN1_ID , TRANS1_ID , 3379 ´Ý_emu_»mÙes_deçuÉ_£t , 3380 & ch¬1_hªdË , 0, 3381 ( ©t_wr™e_»q_v®ue_1 ), 3382 Œue , çl£ , 3383 ©t_wr™e_»q_v®ue_1 ), 3384 ACTION_SUCCESS ( g©t_£rv”_£nd_»¥Ú£_aùiÚ , 3385 & £nd_»¥_d©a_2 ), 3386 CALLBACK ( CB_EMU_WRITE_RESPONSE ), 3387 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 3388 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 3392  queue * $g‘_g©t_‹¡s () 3394 ušt16_t i = 0; 3396 li¡ = `queue_Ãw (); 3397 ià(! li¡ ) 3398  NULL ; 3400 ; i < ( ‹¡_ÿ£s ) / (test_cases[0]); ++i) 3401 ià(! `queue_push_ž ( li¡ , & ‹¡_ÿ£s [ i ])) { 3402 `queue_de¡roy ( li¡ , NULL ); 3403  NULL ; 3406  li¡ ; 3407 } } 3409  $»move_g©t_‹¡s () 3411 `queue_de¡roy ( li¡ , NULL ); 3412 } } @android/tester-hdp.c 18  ~<¡dlib.h > 19  ~<¡dboÞ.h > 21  ~"emuÏtÜ/btho¡.h " 22  ~"lib/blu‘oÙh.h " 23  ~"ªdroid/utžs.h " 24  ~"¤c/sh¬ed/‹¡”.h " 25  ~"¤c/sh¬ed/queue.h " 26  ~"‹¡”-maš.h " 29 mHDP_APP_SINK_RELIABLE , 30 mHDP_APP_SINK_STREAM , 31 mHDP_APP_SOURCE_RELIABLE , 32 mHDP_APP_SOURCE_STREAM , 33 } thdp_­p_»g_ty³ ; 35  #hdp_r¥_pdu 0x07, \ 90 0x00 ) 92 cÚ¡  pdu_£t gsdp_pdus [] = { 93 { ’d_pdu , ¿w_pdu ( hdp_r¥_pdu ) }, 94 { ’d_pdu ,ƒnd_pdu }, 97  emu_l2ÿp_cid_d©a gsdp_cid_d©a = { 98 . pdu = sdp_pdus , 99 . gis_sdp = TRUE , 102  emu_l2ÿp_cid_d©a gù¾_cid_d©a ; 103  emu_l2ÿp_cid_d©a gd©a_cid_d©a ; 105  queue * gli¡ ; 107  bthl_»g_·¿m_t * $ü—‹_­p ( hdp_­p_»g_ty³ ty³ ) 109 bthl_»g_·¿m_t * »g ; 110 bthl_md•_cfg_t md•1 , md•2 ; 112 »g = `m®loc (( bthl_»g_·¿m_t )); 113 »g -> ­¶iÿtiÚ_Çme = "bluez-android"; 114 »g -> ´ovid”_Çme = "Bluez"; 115 »g -> ¤v_Çme = "bluez-hdp"; 116 »g -> ¤v_de¥ = "health-device-profile"; 118 md•1 . d©a_ty³ = 4100; 119 md•1 . md•_desütiÚ = "pulse-oximeter"; 121 md•2 . d©a_ty³ = 4100; 122 md•2 . md•_desütiÚ = "pulse-oximeter"; 124  ty³ ) { 125  HDP_APP_SINK_RELIABLE : 126 »g -> numb”_of_md•s = 1; 127 md•1 . md•_rÞe = BTHL_MDEP_ROLE_SINK ; 128 md•1 . chªÃl_ty³ = BTHL_CHANNEL_TYPE_RELIABLE ; 129 »g -> md•_cfg = `m®loc Ôeg-> numb”_of_md•s * 130 ( bthl_md•_cfg_t )); 131 »g -> md•_cfg [0] = md•1 ; 134  HDP_APP_SINK_STREAM : 135 »g -> numb”_of_md•s = 2; 137 md•1 . md•_rÞe = BTHL_MDEP_ROLE_SINK ; 138 md•1 . chªÃl_ty³ = BTHL_CHANNEL_TYPE_RELIABLE ; 140 md•2 . md•_rÞe = BTHL_MDEP_ROLE_SINK ; 141 md•2 . chªÃl_ty³ = BTHL_CHANNEL_TYPE_STREAMING ; 143 »g -> md•_cfg = `m®loc Ôeg-> numb”_of_md•s * 144 ( bthl_md•_cfg_t )); 145 »g -> md•_cfg [0] = md•1 ; 146 »g -> md•_cfg [1] = md•2 ; 149  HDP_APP_SOURCE_RELIABLE : 150 »g -> numb”_of_md•s = 1; 152 md•1 . md•_rÞe = BTHL_MDEP_ROLE_SOURCE ; 153 md•1 . chªÃl_ty³ = BTHL_CHANNEL_TYPE_RELIABLE ; 155 »g -> md•_cfg = `m®loc Ôeg-> numb”_of_md•s * 156 ( bthl_md•_cfg_t )); 157 »g -> md•_cfg [0] = md•1 ; 160  HDP_APP_SOURCE_STREAM : 161 »g -> numb”_of_md•s = 2; 163 md•1 . md•_rÞe = BTHL_MDEP_ROLE_SOURCE ; 164 md•1 . chªÃl_ty³ = BTHL_CHANNEL_TYPE_RELIABLE ; 166 md•2 . md•_rÞe = BTHL_MDEP_ROLE_SOURCE ; 167 md•2 . chªÃl_ty³ = BTHL_CHANNEL_TYPE_STREAMING ; 169 »g -> md•_cfg = `m®loc Ôeg-> numb”_of_md•s * 170 ( bthl_md•_cfg_t )); 171 »g -> md•_cfg [0] = md•1 ; 172 »g -> md•_cfg [1] = md•2 ; 177  »g ; 178 } } 180  $hdp_»gi¡”_sšk_»lŸbË_­p_aùiÚ () 182  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 183  ¡• *¡• = `g_Ãw0 (step, 1); 184  ­p_id = 0; 185 bthl_»g_·¿m_t * »g ; 187 »g = `ü—‹_­p ( HDP_APP_SINK_RELIABLE ); 188 ¡• -> aùiÚ_¡©us = d©a -> if_hdp -> `»gi¡”_­¶iÿtiÚ ( »g , & ­p_id ); 190 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 191 `ä“ ( »g -> md•_cfg ); 192 `ä“ ( »g ); 193 } } 195  $hdp_»gi¡”_sšk_¡»am_­p_aùiÚ () 197  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 198  ¡• *¡• = `g_Ãw0 (step, 1); 199  ­p_id = 0; 200 bthl_»g_·¿m_t * »g ; 202 »g = `ü—‹_­p ( HDP_APP_SINK_STREAM ); 203 ¡• -> aùiÚ_¡©us = d©a -> if_hdp -> `»gi¡”_­¶iÿtiÚ ( »g , & ­p_id ); 205 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 206 `ä“ ( »g -> md•_cfg ); 207 `ä“ ( »g ); 208 } } 210  $hdp_»gi¡”_sourû_»lŸbË_­p_aùiÚ () 212  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 213  ¡• *¡• = `g_Ãw0 (step, 1); 214  ­p_id = 0; 215 bthl_»g_·¿m_t * »g ; 217 »g = `ü—‹_­p ( HDP_APP_SOURCE_RELIABLE ); 218 ¡• -> aùiÚ_¡©us = d©a -> if_hdp -> `»gi¡”_­¶iÿtiÚ ( »g , & ­p_id ); 220 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 221 `ä“ ( »g -> md•_cfg ); 222 `ä“ ( »g ); 223 } } 225  $hdp_»gi¡”_sourû_¡»am_­p_aùiÚ () 227  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 228  ¡• *¡• = `g_Ãw0 (step, 1); 229  ­p_id = 0; 230 bthl_»g_·¿m_t * »g ; 232 »g = `ü—‹_­p ( HDP_APP_SOURCE_STREAM ); 233 ¡• -> aùiÚ_¡©us = d©a -> if_hdp -> `»gi¡”_­¶iÿtiÚ ( »g , & ­p_id ); 235 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 236 `ä“ ( »g -> md•_cfg ); 237 `ä“ ( »g ); 238 } } 240  $hdp_uÄegi¡”_­p_aùiÚ () 242  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 243  ¡• *¡• = `g_Ãw0 (step, 1); 245 ¡• -> aùiÚ_¡©us = d©a -> if_hdp -> `uÄegi¡”_­¶iÿtiÚ (1); 247 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 248 } } 250  $mÿp_ù¾_cid_hook_cb (cÚ¡ * d©a , ušt16_t Ën , 251 * u£r_d©a ) 253  ‹¡_d©a * t_d©a = `‹¡”_g‘_d©a (); 254  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( t_d©a -> hc›mu ); 255  emu_l2ÿp_cid_d©a * cid_d©a = u£r_d©a ; 256 ušt8_t üt_r¥ [5], d–_r¥ [4], cÚfig ; 257 ušt8_t Ýcode = ((ušt8_ˆ*è d©a )[0]; 258  boÞ »lŸbË = çl£ ; 260  Ýcode ) { 262 üt_r¥ [0] = 0x02; 263 üt_r¥ [1] = 0x00; 264 üt_r¥ [2] = (( ušt8_t *è d©a )[1]; 265 üt_r¥ [3] = (( ušt8_t *è d©a )[2]; 266 cÚfig = (( ušt8_t *è d©a )[4]; 268 ià( cÚfig == 0x00) { 269 ià(! »lŸbË ) { 270 üt_r¥ [4] = 0x01; 271 »lŸbË = Œue ; 273 üt_r¥ [4] = 0x02; 274 »lŸbË = çl£ ; 277 üt_r¥ [4] = cÚfig ; 280 `btho¡_£nd_cid ( btho¡ , cid_d©a -> hªdË , 281 cid_d©a -> cid , 282 üt_r¥ , (crt_rsp)); 288 d–_r¥ [0] = 0x08; 289 d–_r¥ [1] = 0x00; 290 d–_r¥ [2] = (( ušt8_t *è d©a )[1]; 291 d–_r¥ [3] = (( ušt8_t *è d©a )[2]; 292 `btho¡_£nd_cid ( btho¡ , cid_d©a -> hªdË , 293 cid_d©a -> cid , 294 d–_r¥ , (del_rsp)); 297 } } 299  $mÿp_ù¾_cÚÃù_cb ( ušt16_t hªdË , ušt16_ˆ cid , * u£r_d©a ) 301  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 302  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 303  emu_l2ÿp_cid_d©a * cid_d©a = u£r_d©a ; 305 cid_d©a -> hªdË = handle; 306 cid_d©a -> cid = cid; 308 `btho¡_add_cid_hook ( btho¡ , hªdË , cid , mÿp_ù¾_cid_hook_cb , 309 cid_d©a ); 310 } } 313  emu_£t_l2ÿp_d©a gl2ÿp_£tup_sdp_d©a = { 314 . psm = 1, 315 . gfunc = ‹¡”_g’”ic_cÚÃù_cb , 316 . gu£r_d©a = & sdp_cid_d©a , 320  emu_£t_l2ÿp_d©a gl2ÿp_£tup_cc_d©a = { 321 . psm = 0x1001, 322 . gfunc = mÿp_ù¾_cÚÃù_cb , 323 . gu£r_d©a = & ù¾_cid_d©a , 327  emu_£t_l2ÿp_d©a gl2ÿp_£tup_dc_d©a = { 328 . psm = 0x1003, 329 . gfunc = ‹¡”_g’”ic_cÚÃù_cb , 330 . gu£r_d©a = & d©a_cid_d©a , 333  $hdp_cÚÃù_sourû_»lŸbË_aùiÚ () 335  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 336 cÚ¡ ušt8_t * hid_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 337  ¡• *¡• = `g_Ãw0 (step, 1); 338 bt_bdaddr_t bdaddr ; 339  ­p_id , chªÃl_id , md•_cfg_šdex ; 341 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è hid_addr , & bdaddr ); 342 ­p_id = 1; 343 md•_cfg_šdex = 0; 344 chªÃl_id = 0; 345 ¡• -> aùiÚ_¡©us = d©a -> if_hdp -> `cÚÃù_chªÃl ( ­p_id , & bdaddr , 346 md•_cfg_šdex , & chªÃl_id ); 348 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 349 } } 351  $hdp_de¡roy_sourû_»lŸbË_aùiÚ () 353  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 354  ¡• *¡• = `g_Ãw0 (step, 1); 356 ¡• -> aùiÚ_¡©us = d©a -> if_hdp -> `de¡roy_chªÃl (1); 357 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 358 } } 360  $hdp_cÚÃù_sšk_»lŸbË_aùiÚ () 362  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 363 cÚ¡ ušt8_t * hid_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 364  ¡• *¡• = `g_Ãw0 (step, 1); 365 bt_bdaddr_t bdaddr ; 366  ­p_id , chªÃl_id , md•_cfg_šdex ; 368 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è hid_addr , & bdaddr ); 369 ­p_id = 1; 370 md•_cfg_šdex = 0; 371 chªÃl_id = 0; 372 ¡• -> aùiÚ_¡©us = d©a -> if_hdp -> `cÚÃù_chªÃl ( ­p_id , & bdaddr , 373 md•_cfg_šdex , & chªÃl_id ); 375 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 376 } } 378  $hdp_cÚÃù_sšk_¡»am_aùiÚ () 380  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 381 cÚ¡ ušt8_t * hid_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 382  ¡• *¡• = `g_Ãw0 (step, 1); 383 bt_bdaddr_t bdaddr ; 384  ­p_id , chªÃl_id , md•_cfg_šdex ; 386 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è hid_addr , & bdaddr ); 387 ­p_id = 1; 388 md•_cfg_šdex = 1; 389 chªÃl_id = 0; 390 ¡• -> aùiÚ_¡©us = d©a -> if_hdp -> `cÚÃù_chªÃl ( ­p_id , & bdaddr , 391 md•_cfg_šdex , & chªÃl_id ); 393 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 394 } } 396  $hdp_de¡roy_sšk_»lŸbË_aùiÚ () 398  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 399  ¡• *¡• = `g_Ãw0 (step, 1); 401 ¡• -> aùiÚ_¡©us = d©a -> if_hdp -> `de¡roy_chªÃl (1); 402 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 403 } } 405  $hdp_de¡roy_sšk_¡»am_aùiÚ () 407  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 408  ¡• *¡• = `g_Ãw0 (step, 1); 410 ¡• -> aùiÚ_¡©us = d©a -> if_hdp -> `de¡roy_chªÃl (2); 411 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 412 } } 414  ‹¡_ÿ£ g‹¡_ÿ£s [] = { 415 TEST_CASE_BREDRLE ("HDP Init", 416 ACTION_SUCCESS ( dummy_aùiÚ , NULL ), 418 TEST_CASE_BREDRLE ("HDP Register Sink Reliable Application", 419 ACTION_SUCCESS ( hdp_»gi¡”_sšk_»lŸbË_­p_aùiÚ , NULL ), 420 CALLBACK_HDP_APP_REG_STATE ( CB_HDP_APP_REG_STATE , 1, 421 BTHL_APP_REG_STATE_REG_SUCCESS ), 423 TEST_CASE_BREDRLE ("HDP Register Sink Stream Application", 424 ACTION_SUCCESS ( hdp_»gi¡”_sšk_¡»am_­p_aùiÚ , NULL ), 425 CALLBACK_HDP_APP_REG_STATE ( CB_HDP_APP_REG_STATE , 1, 426 BTHL_APP_REG_STATE_REG_SUCCESS ), 428 TEST_CASE_BREDRLE ("HDP Register Source Reliable Application", 429 ACTION_SUCCESS ( hdp_»gi¡”_sourû_»lŸbË_­p_aùiÚ , NULL ), 430 CALLBACK_HDP_APP_REG_STATE ( CB_HDP_APP_REG_STATE , 1, 431 BTHL_APP_REG_STATE_REG_SUCCESS ), 433 TEST_CASE_BREDRLE ("HDP Register Source Stream Application", 434 ACTION_SUCCESS ( hdp_»gi¡”_sourû_¡»am_­p_aùiÚ , NULL ), 435 CALLBACK_HDP_APP_REG_STATE ( CB_HDP_APP_REG_STATE , 1, 436 BTHL_APP_REG_STATE_REG_SUCCESS ), 438 TEST_CASE_BREDRLE ("HDP Unegister Application", 439 ACTION_SUCCESS ( hdp_»gi¡”_sourû_¡»am_­p_aùiÚ , NULL ), 440 CALLBACK_HDP_APP_REG_STATE ( CB_HDP_APP_REG_STATE , 1, 441 BTHL_APP_REG_STATE_REG_SUCCESS ), 442 ACTION_SUCCESS ( hdp_uÄegi¡”_­p_aùiÚ , NULL ), 443 CALLBACK_HDP_APP_REG_STATE ( CB_HDP_APP_REG_STATE , 1, 444 BTHL_APP_REG_STATE_DEREG_SUCCESS ), 446 TEST_CASE_BREDRLE ("HDP Connect Source Reliable Channel", 447 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 448 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 449 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 450 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 451 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 452 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 453 & l2ÿp_£tup_sdp_d©a ), 454 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 455 & l2ÿp_£tup_cc_d©a ), 456 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 457 & l2ÿp_£tup_dc_d©a ), 458 ACTION_SUCCESS ( hdp_»gi¡”_sourû_»lŸbË_­p_aùiÚ , NULL ), 459 CALLBACK_HDP_APP_REG_STATE ( CB_HDP_APP_REG_STATE , 1, 460 BTHL_APP_REG_STATE_REG_SUCCESS ), 461 ACTION_SUCCESS ( hdp_cÚÃù_sourû_»lŸbË_aùiÚ , NULL ), 462 CALLBACK_HDP_CHANNEL_STATE ( CB_HDP_CHANNEL_STATE , 1, 1, 0, 463 BTHL_CONN_STATE_CONNECTING ), 464 CALLBACK_HDP_CHANNEL_STATE ( CB_HDP_CHANNEL_STATE , 1, 1, 0, 465 BTHL_CONN_STATE_CONNECTED ), 467 TEST_CASE_BREDRLE ("HDP Destroy Source Reliable Channel", 468 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 469 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 470 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 471 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 472 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 473 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 474 & l2ÿp_£tup_sdp_d©a ), 475 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 476 & l2ÿp_£tup_cc_d©a ), 477 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 478 & l2ÿp_£tup_dc_d©a ), 479 ACTION_SUCCESS ( hdp_»gi¡”_sourû_»lŸbË_­p_aùiÚ , NULL ), 480 CALLBACK_HDP_APP_REG_STATE ( CB_HDP_APP_REG_STATE , 1, 481 BTHL_APP_REG_STATE_REG_SUCCESS ), 482 ACTION_SUCCESS ( hdp_cÚÃù_sourû_»lŸbË_aùiÚ , NULL ), 483 CALLBACK_HDP_CHANNEL_STATE ( CB_HDP_CHANNEL_STATE , 1, 1, 0, 484 BTHL_CONN_STATE_CONNECTING ), 485 CALLBACK_HDP_CHANNEL_STATE ( CB_HDP_CHANNEL_STATE , 1, 1, 0, 486 BTHL_CONN_STATE_CONNECTED ), 487 ACTION_SUCCESS ( hdp_de¡roy_sourû_»lŸbË_aùiÚ , NULL ), 488 CALLBACK_HDP_CHANNEL_STATE ( CB_HDP_CHANNEL_STATE , 1, 1, 0, 489 BTHL_CONN_STATE_DESTROYED ), 491 TEST_CASE_BREDRLE ("HDP Connect Sink Streaming Channel", 492 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 493 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 494 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 495 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 496 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 497 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 498 & l2ÿp_£tup_sdp_d©a ), 499 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 500 & l2ÿp_£tup_cc_d©a ), 501 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 502 & l2ÿp_£tup_dc_d©a ), 503 ACTION_SUCCESS ( hdp_»gi¡”_sšk_¡»am_­p_aùiÚ , NULL ), 504 CALLBACK_HDP_APP_REG_STATE ( CB_HDP_APP_REG_STATE , 1, 505 BTHL_APP_REG_STATE_REG_SUCCESS ), 506 ACTION_SUCCESS ( hdp_cÚÃù_sšk_»lŸbË_aùiÚ , NULL ), 507 CALLBACK_HDP_CHANNEL_STATE ( CB_HDP_CHANNEL_STATE , 1, 1, 0, 508 BTHL_CONN_STATE_CONNECTING ), 509 CALLBACK_HDP_CHANNEL_STATE ( CB_HDP_CHANNEL_STATE , 1, 1, 0, 510 BTHL_CONN_STATE_CONNECTED ), 511 ACTION_SUCCESS ( hdp_cÚÃù_sšk_¡»am_aùiÚ , NULL ), 512 CALLBACK_HDP_CHANNEL_STATE ( CB_HDP_CHANNEL_STATE , 1, 2, 1, 513 BTHL_CONN_STATE_CONNECTED ), 515 TEST_CASE_BREDRLE ("HDP Destroy Sink Streaming Channel", 516 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 517 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 518 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 519 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 520 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 521 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 522 & l2ÿp_£tup_sdp_d©a ), 523 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 524 & l2ÿp_£tup_cc_d©a ), 525 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 526 & l2ÿp_£tup_dc_d©a ), 527 ACTION_SUCCESS ( hdp_»gi¡”_sšk_¡»am_­p_aùiÚ , NULL ), 528 CALLBACK_HDP_APP_REG_STATE ( CB_HDP_APP_REG_STATE , 1, 529 BTHL_APP_REG_STATE_REG_SUCCESS ), 530 ACTION_SUCCESS ( hdp_cÚÃù_sšk_»lŸbË_aùiÚ , NULL ), 531 CALLBACK_HDP_CHANNEL_STATE ( CB_HDP_CHANNEL_STATE , 1, 1, 0, 532 BTHL_CONN_STATE_CONNECTING ), 533 CALLBACK_HDP_CHANNEL_STATE ( CB_HDP_CHANNEL_STATE , 1, 1, 0, 534 BTHL_CONN_STATE_CONNECTED ), 535 ACTION_SUCCESS ( hdp_cÚÃù_sšk_¡»am_aùiÚ , NULL ), 536 CALLBACK_HDP_CHANNEL_STATE ( CB_HDP_CHANNEL_STATE , 1, 2, 1, 537 BTHL_CONN_STATE_CONNECTED ), 538 ACTION_SUCCESS ( hdp_de¡roy_sšk_»lŸbË_aùiÚ , NULL ), 539 CALLBACK_HDP_CHANNEL_STATE ( CB_HDP_CHANNEL_STATE , 1, 1, 0, 540 BTHL_CONN_STATE_DESTROYED ), 541 ACTION_SUCCESS ( hdp_de¡roy_sšk_¡»am_aùiÚ , NULL ), 542 CALLBACK_HDP_CHANNEL_STATE ( CB_HDP_CHANNEL_STATE , 1, 2, 1, 543 BTHL_CONN_STATE_DESTROYED ), 547  queue * $g‘_hdp_‹¡s () 549 ušt16_t i = 0; 551 li¡ = `queue_Ãw (); 552 ià(! li¡ ) 553  NULL ; 555 ; i < ( ‹¡_ÿ£s ) / (test_cases[0]); ++i) 556 ià(! `queue_push_ž ( li¡ , & ‹¡_ÿ£s [ i ])) { 557 `queue_de¡roy ( li¡ , NULL ); 558  NULL ; 561  li¡ ; 562 } } 564  $»move_hdp_‹¡s () 566 `queue_de¡roy ( li¡ , NULL ); 567 } } @android/tester-hidhost.c 18  ~<¡dboÞ.h > 20  ~"emuÏtÜ/btho¡.h " 21  ~"¤c/sh¬ed/‹¡”.h " 22  ~"¤c/sh¬ed/queue.h " 23  ~"lib/blu‘oÙh.h " 24  ~"ªdroid/utžs.h " 25  ~"‹¡”-maš.h " 27  #HID_GET_REPORT_PROTOCOL 0x60 ) 28  #HID_GET_BOOT_PROTOCOL 0x61 ) 29  #HID_SET_REPORT_PROTOCOL 0x70 ) 30  #HID_SET_BOOT_PROTOCOL 0x71 ) 32  #HID_SET_INPUT_REPORT 0x51 ) 33  #HID_SET_OUTPUT_REPORT 0x52 ) 34  #HID_SET_FEATURE_REPORT 0x53 ) 36  #HID_SEND_DATA 0xa2 ) 38  #HID_GET_INPUT_REPORT 0x49 ) 39  #HID_GET_OUTPUT_REPORT 0x4a ) 40  #HID_GET_FEATURE_REPORT 0x4b ) 42  #HID_MODE_DEFAULT 0x00 ) 43  #HID_MODE_BREDR 0x01 ) 44  #HID_MODE_LE 0x02 ) 46  #HID_EXPECTED_REPORT_SIZE 0x02 ) 48  #HID_VIRTUAL_CABLE_UNPLUG 0x15 ) 50  queue * gli¡ ; 52  #did_»q_pdu 0x06, \ 57 0x00, 0xff, 0xff, 0x00 ) 59  #did_r¥_pdu 0x07, \ 72 0x00 ) 74  #hid_»q_pdu 0x06, \ 79 0x00, 0xff, 0xff, 0x00 ) 81  #hid_r¥_pdu 0x07, \ 126 0x00 ) 128 cÚ¡  pdu_£t gsdp_pdus [] = { 129 { ¿w_pdu ( did_»q_pdu ),„aw_pdu( did_r¥_pdu ) }, 130 { ¿w_pdu ( hid_»q_pdu ),„aw_pdu( hid_r¥_pdu ) }, 131 { ’d_pdu ,ƒnd_pdu }, 134  emu_l2ÿp_cid_d©a gsdp_cid_d©a = { 135 . pdu = sdp_pdus , 136 . gis_sdp = TRUE , 139  #hid_keybßrd_r¥_pdu 0x07, \ 200 0x00 ) 202 cÚ¡  pdu_£t gsdp_kb_pdus [] = { 203 { ¿w_pdu ( did_»q_pdu ),„aw_pdu( did_r¥_pdu ) }, 204 { ¿w_pdu ( hid_»q_pdu ),„aw_pdu( hid_keybßrd_r¥_pdu ) }, 205 { ’d_pdu ,ƒnd_pdu }, 208  emu_l2ÿp_cid_d©a gsdp_kb_cid_d©a = { 209 . pdu = sdp_kb_pdus , 210 . gis_sdp = TRUE , 213  emu_l2ÿp_cid_d©a gù¾_cid_d©a ; 214  emu_l2ÿp_cid_d©a gšŒ_cid_d©a ; 216  $hid_´•¬e_»¶y_´ÙocÞ_mode ( emu_l2ÿp_cid_d©a * cid_d©a ) 218  ‹¡_d©a * t_d©a = `‹¡”_g‘_d©a (); 219  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( t_d©a -> hc›mu ); 220 cÚ¡  iovec pdu = `¿w_pdu (0xa0, 0x00); 222 `btho¡_£nd_cid_v ( btho¡ , cid_d©a -> hªdË , cid_d©a-> cid , & pdu , 1); 223 } } 225  $hid_´•¬e_»¶y_»pÜt ( emu_l2ÿp_cid_d©a * cid_d©a ) 227  ‹¡_d©a * t_d©a = `‹¡”_g‘_d©a (); 228  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( t_d©a -> hc›mu ); 229 cÚ¡  iovec pdu = `¿w_pdu (0xa2, 0x01, 0x00); 231 `btho¡_£nd_cid_v ( btho¡ , cid_d©a -> hªdË , cid_d©a-> cid , & pdu , 1); 232 } } 234  $hid_ù¾_cid_hook_cb (cÚ¡ * d©a , ušt16_t Ën , 235 * u£r_d©a ) 237  emu_l2ÿp_cid_d©a * cid_d©a = u£r_d©a ; 238 ušt8_t h—d” = ((ušt8_ˆ*è d©a )[0]; 239  ¡• *step; 241  h—d” ) { 242  HID_GET_REPORT_PROTOCOL : 243  HID_GET_BOOT_PROTOCOL : 244  HID_SET_REPORT_PROTOCOL : 245  HID_SET_BOOT_PROTOCOL : 246 `hid_´•¬e_»¶y_´ÙocÞ_mode ( cid_d©a ); 248  HID_GET_INPUT_REPORT : 249  HID_GET_OUTPUT_REPORT : 250  HID_GET_FEATURE_REPORT : 251 `hid_´•¬e_»¶y_»pÜt ( cid_d©a ); 257  HID_SET_INPUT_REPORT : 258  HID_SET_OUTPUT_REPORT : 259  HID_SET_FEATURE_REPORT : 260  HID_SEND_DATA : 262 ¡• = `g_Ãw0 (step, 1); 264 ¡• -> ÿÎback = CB_EMU_CONFIRM_SEND_DATA ; 266 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 268  HID_VIRTUAL_CABLE_UNPLUG : 269 ¡• = `g_Ãw0 (step, 1); 271 ¡• -> ÿÎback = CB_EMU_CONNECTION_REJECTED ; 273 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 276 } } 277  $hid_ù¾_cÚÃù_cb ( ušt16_t hªdË , ušt16_ˆ cid , * u£r_d©a ) 279  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 280  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 281  emu_l2ÿp_cid_d©a * cid_d©a = u£r_d©a ; 283 cid_d©a -> hªdË = handle; 284 cid_d©a -> cid = cid; 286 `btho¡_add_cid_hook ( btho¡ , hªdË , cid , hid_ù¾_cid_hook_cb , 287 cid_d©a ); 288 } } 290  $hid_šŒ_cid_hook_cb (cÚ¡ * d©a , ušt16_t Ën , 291 * u£r_d©a ) 293 ušt8_t h—d” = ((ušt8_ˆ*è d©a )[0]; 294  ¡• *step; 296  h—d” ) { 297  HID_SEND_DATA : 299 ¡• = `g_Ãw0 (step, 1); 301 ¡• -> ÿÎback = CB_EMU_CONFIRM_SEND_DATA ; 303 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 306 } } 307  $hid_šŒ_cÚÃù_cb ( ušt16_t hªdË , ušt16_ˆ cid , * u£r_d©a ) 309  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 310  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 311  emu_l2ÿp_cid_d©a * cid_d©a = u£r_d©a ; 313 cid_d©a -> hªdË = handle; 314 cid_d©a -> cid = cid; 316 `btho¡_add_cid_hook ( btho¡ , hªdË , cid , hid_šŒ_cid_hook_cb , 317 cid_d©a ); 318 } } 320  bt_sÿn_mode_t g£rÝ_sÿn_mode_cÚn_v® = BT_SCAN_MODE_CONNECTABLE ; 322  bt_´Ý”ty_t g´Ý_‹¡_sÿn_mode_cÚn = { 323 . ty³ = BT_PROPERTY_ADAPTER_SCAN_MODE , 324 . gv® = & £rÝ_sÿn_mode_cÚn_v® , 325 . gËn = ( £rÝ_sÿn_mode_cÚn_v® ), 329  emu_£t_l2ÿp_d©a gl2ÿp_£tup_sdp_d©a = { 330 . psm = 1, 331 . gfunc = ‹¡”_g’”ic_cÚÃù_cb , 332 . gu£r_d©a = & sdp_cid_d©a , 335  emu_£t_l2ÿp_d©a gl2ÿp_£tup_kb_sdp_d©a = { 336 . psm = 1, 337 . gfunc = ‹¡”_g’”ic_cÚÃù_cb , 338 . gu£r_d©a = & sdp_kb_cid_d©a , 342  emu_£t_l2ÿp_d©a gl2ÿp_£tup_cc_d©a = { 343 . psm = 17, 344 . gfunc = hid_ù¾_cÚÃù_cb , 345 . gu£r_d©a = & ù¾_cid_d©a , 349  emu_£t_l2ÿp_d©a gl2ÿp_£tup_ic_d©a = { 350 . psm = 19, 351 . gfunc = hid_šŒ_cÚÃù_cb , 352 . gu£r_d©a = & šŒ_cid_d©a , 355  $hidho¡_cÚÃù_aùiÚ () 357  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 358 cÚ¡ ušt8_t * hid_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 359  ¡• *¡• = `g_Ãw0 (step, 1); 360 bt_bdaddr_t bdaddr ; 362 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è hid_addr , & bdaddr ); 364 ¡• -> aùiÚ_¡©us = d©a -> if_hid -> `cÚÃù (& bdaddr ); 366 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 367 } } 369  $hidho¡_discÚÃù_aùiÚ () 371  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 372 cÚ¡ ušt8_t * hid_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 373  ¡• *¡• = `g_Ãw0 (step, 1); 374 bt_bdaddr_t bdaddr ; 376 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è hid_addr , & bdaddr ); 378 ¡• -> aùiÚ_¡©us = d©a -> if_hid -> `discÚÃù (& bdaddr ); 380 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 381 } } 383  $hidho¡_vœtu®_uÅlug_aùiÚ () 385  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 386 cÚ¡ ušt8_t * hid_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 387  ¡• *¡• = `g_Ãw0 (step, 1); 388 bt_bdaddr_t bdaddr ; 390 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è hid_addr , & bdaddr ); 392 ¡• -> aùiÚ_¡©us = d©a -> if_hid -> `vœtu®_uÅlug (& bdaddr ); 394 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 395 } } 397  $hidho¡_g‘_´ÙocÞ_aùiÚ () 399  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 400 cÚ¡ ušt8_t * hid_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 401  ¡• *¡• = `g_Ãw0 (step, 1); 402 bt_bdaddr_t bdaddr ; 404 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è hid_addr , & bdaddr ); 406 ¡• -> aùiÚ_¡©us = d©a -> if_hid -> `g‘_´ÙocÞ (& bdaddr , 407 BTHH_REPORT_MODE ); 409 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 410 } } 412  $hidho¡_£t_´ÙocÞ_aùiÚ () 414  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 415 cÚ¡ ušt8_t * hid_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 416  ¡• *¡• = `g_Ãw0 (step, 1); 417 bt_bdaddr_t bdaddr ; 419 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è hid_addr , & bdaddr ); 421 ¡• -> aùiÚ_¡©us = d©a -> if_hid -> `£t_´ÙocÞ (& bdaddr , 422 BTHH_REPORT_MODE ); 424 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 425 } } 427  $hidho¡_g‘_»pÜt_aùiÚ () 429  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 430 cÚ¡ ušt8_t * hid_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 431  ¡• *¡• = `g_Ãw0 (step, 1); 432 bt_bdaddr_t bdaddr ; 434 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è hid_addr , & bdaddr ); 436 ¡• -> aùiÚ_¡©us = d©a -> if_hid -> `g‘_»pÜt (& bdaddr , 437 BTHH_INPUT_REPORT , 1, 440 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 441 } } 443  $hidho¡_£t_»pÜt_aùiÚ () 445  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 446 cÚ¡ ušt8_t * hid_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 447  ¡• *¡• = `g_Ãw0 (step, 1); 448 * buf = "fe0201"; 449 bt_bdaddr_t bdaddr ; 451 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è hid_addr , & bdaddr ); 453 ¡• -> aùiÚ_¡©us = d©a -> if_hid -> `£nd_d©a (& bdaddr , buf ); 454 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 455 } } 457  $hidho¡_£nd_d©a_aùiÚ () 459  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 460 cÚ¡ ušt8_t * hid_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 461  ¡• *¡• = `g_Ãw0 (step, 1); 462 * buf = "010101"; 463 bt_bdaddr_t bdaddr ; 465 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è hid_addr , & bdaddr ); 467 ¡• -> aùiÚ_¡©us = d©a -> if_hid -> `£t_»pÜt (& bdaddr , 468 BTHH_INPUT_REPORT , buf ); 469 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 470 } } 472  $þ›Á_l2ÿp_r¥ ( ušt8_t code , cÚ¡ * d©a , ušt16_t Ën , 473 * u£r_d©a ) 475  ‹¡_d©a * t_d©a = `‹¡”_g‘_d©a (); 476  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( t_d©a -> hc›mu ); 477  emu_l2ÿp_cid_d©a * cid_d©a = u£r_d©a ; 478 cÚ¡ ušt16_t * psm = d©a ; 479 cÚ¡  iovec cÚ_»q = `¿w_pdu (0x13, 0x00, 482 ià( Ën < (* psm )) { 483 `‹¡”_w¬n ("Invalid†2cap„esponse."); 487 * psm ) { 489 `btho¡_add_cid_hook ( btho¡ , cid_d©a -> hªdË , 0x40, 490 hid_ù¾_cid_hook_cb , cid_d©a ); 492 `btho¡_l2ÿp_»q ( btho¡ , cid_d©a -> hªdË , 0x02, 493 cÚ_»q . iov_ba£ , cÚ_»q. iov_Ën , 494 þ›Á_l2ÿp_r¥ , cid_d©a ); 497 `btho¡_add_cid_hook ( btho¡ , cid_d©a -> hªdË , 0x41, 498 hid_šŒ_cid_hook_cb , cid_d©a ); 503 } } 505  $hidho¡_cÚn_cb ( ušt16_t hªdË , * u£r_d©a ) 507 cÚ¡  iovec cÚ_»q = `¿w_pdu (0x11, 0x00, 510  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 511  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 513 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_BREDR ) { 514 `‹¡”_w¬n ("Not handled deviceype."); 518 ù¾_cid_d©a . cid = 0x40; 519 ù¾_cid_d©a . hªdË = handle; 521 `‹¡”_´št ("Sending L2CAP Request from„emote"); 523 `btho¡_l2ÿp_»q ( btho¡ , hªdË , 0x02, cÚ_»q . iov_ba£ , 524 cÚ_»q . iov_Ën , þ›Á_l2ÿp_r¥ , 525 & ù¾_cid_d©a ); 526 } } 528  ‹¡_ÿ£ g‹¡_ÿ£s [] = { 529 TEST_CASE_BREDRLE ("HidHost Init", 530 ACTION_SUCCESS ( dummy_aùiÚ , NULL ), 532 TEST_CASE_BREDRLE ("HidHost Connect Success", 533 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 534 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 535 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 536 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 537 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 538 & l2ÿp_£tup_sdp_d©a ), 539 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 540 & l2ÿp_£tup_cc_d©a ), 541 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 542 & l2ÿp_£tup_ic_d©a ), 543 ACTION_SUCCESS ( hidho¡_cÚÃù_aùiÚ , NULL ), 544 CALLBACK_STATE ( CB_HH_CONNECTION_STATE , 545 BTHH_CONN_STATE_CONNECTED ), 546 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 547 CALLBACK_STATE ( CB_HH_CONNECTION_STATE , 548 BTHH_CONN_STATE_DISCONNECTED ), 549 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 551 TEST_CASE_BREDRLE ("HidHost Disconnect Success", 552 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 553 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 554 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 555 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 556 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 557 & l2ÿp_£tup_sdp_d©a ), 558 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 559 & l2ÿp_£tup_cc_d©a ), 560 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 561 & l2ÿp_£tup_ic_d©a ), 562 ACTION_SUCCESS ( hidho¡_cÚÃù_aùiÚ , NULL ), 563 CALLBACK_STATE ( CB_HH_CONNECTION_STATE , 564 BTHH_CONN_STATE_CONNECTED ), 565 ACTION_SUCCESS ( hidho¡_discÚÃù_aùiÚ , NULL ), 566 CALLBACK_STATE ( CB_HH_CONNECTION_STATE , 567 BTHH_CONN_STATE_DISCONNECTED ), 569 TEST_CASE_BREDRLE ("HidHost VirtualUnplug Success", 570 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 571 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 572 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 573 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 574 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 575 & l2ÿp_£tup_sdp_d©a ), 576 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 577 & l2ÿp_£tup_cc_d©a ), 578 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 579 & l2ÿp_£tup_ic_d©a ), 580 ACTION_SUCCESS ( hidho¡_cÚÃù_aùiÚ , NULL ), 581 CALLBACK_STATE ( CB_HH_CONNECTION_STATE , 582 BTHH_CONN_STATE_CONNECTED ), 583 ACTION_SUCCESS ( hidho¡_vœtu®_uÅlug_aùiÚ , NULL ), 584 CALLBACK_STATE ( CB_HH_CONNECTION_STATE , 585 BTHH_CONN_STATE_DISCONNECTED ), 587 TEST_CASE_BREDRLE ("HidHost GetProtocol Success", 588 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 589 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 590 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 591 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 592 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 593 & l2ÿp_£tup_sdp_d©a ), 594 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 595 & l2ÿp_£tup_cc_d©a ), 596 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 597 & l2ÿp_£tup_ic_d©a ), 598 ACTION_SUCCESS ( hidho¡_cÚÃù_aùiÚ , NULL ), 599 CALLBACK_STATE ( CB_HH_CONNECTION_STATE , 600 BTHH_CONN_STATE_CONNECTED ), 601 ACTION_SUCCESS ( hidho¡_g‘_´ÙocÞ_aùiÚ , NULL ), 602 CALLBACK_HH_MODE ( CB_HH_PROTOCOL_MODE , BTHH_OK , HID_MODE_BREDR ), 604 TEST_CASE_BREDRLE ("HidHost SetProtocol Success", 605 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 606 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 607 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 608 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 609 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 610 & l2ÿp_£tup_sdp_d©a ), 611 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 612 & l2ÿp_£tup_cc_d©a ), 613 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 614 & l2ÿp_£tup_ic_d©a ), 615 ACTION_SUCCESS ( hidho¡_cÚÃù_aùiÚ , NULL ), 616 CALLBACK_STATE ( CB_HH_CONNECTION_STATE , 617 BTHH_CONN_STATE_CONNECTED ), 618 ACTION_SUCCESS ( hidho¡_£t_´ÙocÞ_aùiÚ , NULL ), 619 CALLBACK_HH_MODE ( CB_HH_PROTOCOL_MODE , BTHH_OK , HID_MODE_BREDR ), 621 TEST_CASE_BREDRLE ("HidHost GetReport Success", 622 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 623 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 624 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 625 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 626 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 627 & l2ÿp_£tup_sdp_d©a ), 628 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 629 & l2ÿp_£tup_cc_d©a ), 630 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 631 & l2ÿp_£tup_ic_d©a ), 632 ACTION_SUCCESS ( hidho¡_cÚÃù_aùiÚ , NULL ), 633 CALLBACK_STATE ( CB_HH_CONNECTION_STATE , 634 BTHH_CONN_STATE_CONNECTED ), 635 ACTION_SUCCESS ( hidho¡_g‘_»pÜt_aùiÚ , NULL ), 636 CALLBACK_HHREPORT ( CB_HH_GET_REPORT , BTHH_OK , 637 HID_EXPECTED_REPORT_SIZE ), 639 TEST_CASE_BREDRLE ("HidHost SetReport Success", 640 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 641 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 642 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 643 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 644 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 645 & l2ÿp_£tup_sdp_d©a ), 646 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 647 & l2ÿp_£tup_cc_d©a ), 648 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 649 & l2ÿp_£tup_ic_d©a ), 650 ACTION_SUCCESS ( hidho¡_cÚÃù_aùiÚ , NULL ), 651 CALLBACK_STATE ( CB_HH_CONNECTION_STATE , 652 BTHH_CONN_STATE_CONNECTING ), 653 CALLBACK_STATE ( CB_HH_CONNECTION_STATE , 654 BTHH_CONN_STATE_CONNECTED ), 655 ACTION_SUCCESS ( hidho¡_£t_»pÜt_aùiÚ , NULL ), 656 CALLBACK ( CB_EMU_CONFIRM_SEND_DATA ), 658 TEST_CASE_BREDRLE ("HidHost SendData Success", 659 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 660 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 661 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 662 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 663 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 664 & l2ÿp_£tup_sdp_d©a ), 665 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 666 & l2ÿp_£tup_cc_d©a ), 667 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 668 & l2ÿp_£tup_ic_d©a ), 669 ACTION_SUCCESS ( hidho¡_cÚÃù_aùiÚ , NULL ), 670 CALLBACK_STATE ( CB_HH_CONNECTION_STATE , 671 BTHH_CONN_STATE_CONNECTED ), 672 ACTION_SUCCESS ( hidho¡_£nd_d©a_aùiÚ , NULL ), 673 CALLBACK ( CB_EMU_CONFIRM_SEND_DATA ), 675 TEST_CASE_BREDRLE ("HidHost Connect Encrypted Success", 676 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 677 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 678 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 679 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 680 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 681 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 682 & l2ÿp_£tup_kb_sdp_d©a ), 683 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 684 & l2ÿp_£tup_cc_d©a ), 685 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 686 & l2ÿp_£tup_ic_d©a ), 687 ACTION_SUCCESS ( hidho¡_cÚÃù_aùiÚ , NULL ), 688 CALLBACK ( CB_EMU_ENCRYPTION_ENABLED ), 689 CALLBACK_STATE ( CB_HH_CONNECTION_STATE , 690 BTHH_CONN_STATE_CONNECTED ), 691 ACTION_SUCCESS ( hidho¡_£nd_d©a_aùiÚ , NULL ), 692 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 693 CALLBACK_STATE ( CB_HH_CONNECTION_STATE , 694 BTHH_CONN_STATE_DISCONNECTED ), 695 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 697 TEST_CASE_BREDRLE ("HidHost Reject Unknown Remote Connection", 698 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 699 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 700 ACTION_SUCCESS ( bt_£t_´Ý”ty_aùiÚ , 701 & ´Ý_‹¡_sÿn_mode_cÚn ), 702 CALLBACK_ADAPTER_PROPS (& ´Ý_‹¡_sÿn_mode_cÚn , 1), 703 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 704 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 705 & l2ÿp_£tup_kb_sdp_d©a ), 706 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 707 & l2ÿp_£tup_cc_d©a ), 708 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 709 & l2ÿp_£tup_ic_d©a ), 711 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , hidho¡_cÚn_cb ), 712 ACTION_SUCCESS ( emu_»mÙe_cÚÃù_hci_aùiÚ , NULL ), 713 CALLBACK ( CB_EMU_CONNECTION_REJECTED ), 717  queue * $g‘_hidho¡_‹¡s () 719 ušt16_t i = 0; 721 li¡ = `queue_Ãw (); 722 ià(! li¡ ) 723  NULL ; 725 ; i < ( ‹¡_ÿ£s ) / (test_cases[0]); ++i) 726 ià(! `queue_push_ž ( li¡ , & ‹¡_ÿ£s [ i ])) { 727 `queue_de¡roy ( li¡ , NULL ); 728  NULL ; 731  li¡ ; 732 } } 734  $»move_hidho¡_‹¡s () 736 `queue_de¡roy ( li¡ , NULL ); 737 } } @android/tester-main.c 17  ~<¡dboÞ.h > 18  ~ 19  ~ 21  ~ 22  ~ 23  ~ 25  ~"lib/blu‘oÙh.h " 26  ~"lib/mgmt.h " 27  ~"¤c/sh¬ed/utž.h " 28  ~"¤c/sh¬ed/‹¡”.h " 29  ~"¤c/sh¬ed/mgmt.h " 30  ~"¤c/sh¬ed/queue.h " 31  ~"emuÏtÜ/btho¡.h " 32  ~"mÚ™Ü/bt.h " 33  ~"‹¡”-maš.h " 35  gexec_dœ [ PATH_MAX + 1]; 37  gšt gscheduËd_cbacks_num ; 39  #EMULATOR_SIGNAL_TIMEOUT 2 ) 40  #EMULATOR_SIGNAL "emuÏtÜ_¡¬‹d" ) 42  #BT_TRANSPORT_UNKNOWN 0x00 ) 45 ušt16_t mcb_num ; 46 cÚ¡ * m¡r ; 47 } gcb_bË [] = { 48 DBG_CB ( CB_BT_NONE ), 49 DBG_CB ( CB_BT_ADAPTER_STATE_CHANGED ), 50 DBG_CB ( CB_BT_ADAPTER_PROPERTIES ), 51 DBG_CB ( CB_BT_REMOTE_DEVICE_PROPERTIES ), 52 DBG_CB ( CB_BT_DEVICE_FOUND ), 53 DBG_CB ( CB_BT_DISCOVERY_STATE_CHANGED ), 54 DBG_CB ( CB_BT_PIN_REQUEST ), 55 DBG_CB ( CB_BT_SSP_REQUEST ), 56 DBG_CB ( CB_BT_BOND_STATE_CHANGED ), 57 DBG_CB ( CB_BT_ACL_STATE_CHANGED ), 58 DBG_CB ( CB_BT_THREAD_EVT ), 59 DBG_CB ( CB_BT_DUT_MODE_RECV ), 60 DBG_CB ( CB_BT_LE_TEST_MODE ), 63 DBG_CB ( CB_HH_CONNECTION_STATE ), 64 DBG_CB ( CB_HH_HID_INFO ), 65 DBG_CB ( CB_HH_PROTOCOL_MODE ), 66 DBG_CB ( CB_HH_IDLE_TIME ), 67 DBG_CB ( CB_HH_GET_REPORT ), 68 DBG_CB ( CB_HH_VIRTUAL_UNPLUG ), 71 DBG_CB ( CB_PAN_CONTROL_STATE ), 72 DBG_CB ( CB_PAN_CONNECTION_STATE ), 75 DBG_CB ( CB_HDP_APP_REG_STATE ), 76 DBG_CB ( CB_HDP_CHANNEL_STATE ), 79 DBG_CB ( CB_A2DP_CONN_STATE ), 80 DBG_CB ( CB_A2DP_AUDIO_STATE ), 83 DBG_CB ( CB_AVRCP_PLAY_STATUS_REQ ), 84 DBG_CB ( CB_AVRCP_PLAY_STATUS_RSP ), 85 DBG_CB ( CB_AVRCP_REG_NOTIF_REQ ), 86 DBG_CB ( CB_AVRCP_REG_NOTIF_RSP ), 87 DBG_CB ( CB_AVRCP_GET_ATTR_REQ ), 88 DBG_CB ( CB_AVRCP_GET_ATTR_RSP ), 91 DBG_CB ( CB_GATTC_REGISTER_CLIENT ), 92 DBG_CB ( CB_GATTC_SCAN_RESULT ), 93 DBG_CB ( CB_GATTC_OPEN ), 94 DBG_CB ( CB_GATTC_CLOSE ), 95 DBG_CB ( CB_GATTC_SEARCH_COMPLETE ), 96 DBG_CB ( CB_GATTC_SEARCH_RESULT ), 97 DBG_CB ( CB_GATTC_GET_CHARACTERISTIC ), 98 DBG_CB ( CB_GATTC_GET_DESCRIPTOR ), 99 DBG_CB ( CB_GATTC_GET_INCLUDED_SERVICE ), 100 DBG_CB ( CB_GATTC_REGISTER_FOR_NOTIFICATION ), 101 DBG_CB ( CB_GATTC_NOTIFY ), 102 DBG_CB ( CB_GATTC_READ_CHARACTERISTIC ), 103 DBG_CB ( CB_GATTC_WRITE_CHARACTERISTIC ), 104 DBG_CB ( CB_GATTC_READ_DESCRIPTOR ), 105 DBG_CB ( CB_GATTC_WRITE_DESCRIPTOR ), 106 DBG_CB ( CB_GATTC_EXECUTE_WRITE ), 107 DBG_CB ( CB_GATTC_READ_REMOTE_RSSI ), 108 DBG_CB ( CB_GATTC_LISTEN ), 111 DBG_CB ( CB_GATTS_REGISTER_SERVER ), 112 DBG_CB ( CB_GATTS_CONNECTION ), 113 DBG_CB ( CB_GATTS_SERVICE_ADDED ), 114 DBG_CB ( CB_GATTS_INCLUDED_SERVICE_ADDED ), 115 DBG_CB ( CB_GATTS_CHARACTERISTIC_ADDED ), 116 DBG_CB ( CB_GATTS_DESCRIPTOR_ADDED ), 117 DBG_CB ( CB_GATTS_SERVICE_STARTED ), 118 DBG_CB ( CB_GATTS_SERVICE_STOPPED ), 119 DBG_CB ( CB_GATTS_SERVICE_DELETED ), 120 DBG_CB ( CB_GATTS_REQUEST_READ ), 121 DBG_CB ( CB_GATTS_REQUEST_WRITE ), 122 DBG_CB ( CB_GATTS_REQUEST_EXEC_WRITE ), 123 DBG_CB ( CB_GATTS_RESPONSE_CONFIRMATION ), 126 DBG_CB ( CB_MAP_CLIENT_REMOTE_MAS_INSTANCES ), 129 DBG_CB ( CB_EMU_CONFIRM_SEND_DATA ), 130 DBG_CB ( CB_EMU_ENCRYPTION_ENABLED ), 131 DBG_CB ( CB_EMU_ENCRYPTION_DISABLED ), 132 DBG_CB ( CB_EMU_CONNECTION_REJECTED ), 133 DBG_CB ( CB_EMU_VALUE_INDICATION ), 134 DBG_CB ( CB_EMU_VALUE_NOTIFICATION ), 135 DBG_CB ( CB_EMU_READ_RESPONSE ), 136 DBG_CB ( CB_EMU_WRITE_RESPONSE ), 139  gboÞ—n $check_ÿÎbacks_ÿÎed ( gpoš‹r u£r_d©a ) 147 ià( `g_©omic_št_g‘ (& scheduËd_cbacks_num ) == 0) { 148 `‹¡”_‹¬down_com¶‘e (); 149  FALSE ; 150 } ià( scheduËd_cbacks_num < 0) { 151 `‹¡”_w¬n ("Unscheduled callback called!"); 152  FALSE ; 155  TRUE ; 156 } } 158  $check_d«mÚ_‹rm () 160  ¡©us ; 161 pid_t pid ; 162  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 164 ià(! d©a ) 167 pid = `wa™pid ( d©a -> blu‘oÙhd_pid , & ¡©us , WNOHANG ); 168 ià( pid !ð d©a -> blu‘oÙhd_pid ) 171 d©a -> blu‘oÙhd_pid = 0; 173 ià( `WIFEXITED ( ¡©us è&& ( `WEXITSTATUS (¡©usè=ð EXIT_SUCCESS )) { 174 `g_idË_add ( check_ÿÎbacks_ÿÎed , NULL ); 178 `‹¡”_w¬n ("UÃx³ùed D«mÚ shutdowÀw™h stu %d", ¡©us ); 179 } } 181  gboÞ—n $sigÇl_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 182 gpoš‹r u£r_d©a ) 184  sigÇlfd_sigšfo si ; 185 ssize_t »suÉ ; 186  fd ; 188 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) 189  FALSE ; 191 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 193 »suÉ = `»ad ( fd , & si , (si)); 194 ià( »suÉ !ð( si )) 195  FALSE ; 197  si . ssi_signo ) { 198  SIGCHLD : 199 `check_d«mÚ_‹rm (); 203  TRUE ; 204 } } 206  gušt $£tup_sigÇlfd () 208 GIOChªÃl * chªÃl ; 209 gušt sourû ; 210 sig£t_t mask ; 211  fd ; 213 `sigem±y£t (& mask ); 214 `sigadd£t (& mask , SIGCHLD ); 216 ià( `sig´ocmask ( SIG_BLOCK , & mask , NULL ) < 0) 219 fd = `sigÇlfd (-1, & mask , 0); 220 ià( fd < 0) 223 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 225 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 226 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 227 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 229 sourû = `g_io_add_w©ch ( chªÃl , 230 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 231 sigÇl_hªdËr , NULL ); 233 `g_io_chªÃl_uÄef ( chªÃl ); 235  sourû ; 236 } } 238  $‹¡_po¡_‹¬down (cÚ¡ * ‹¡_d©a ) 240  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 243 `hc›mu_d–_hook ( d©a -> hc›mu , HCIEMU_HOOK_POST_EVT , 0x08); 245 `hc›mu_uÄef ( d©a -> hc›mu ); 246 d©a -> hc›mu = NULL ; 248 `g_sourû_»move ( d©a -> sigÇlfd ); 249 d©a -> sigÇlfd = 0; 250 } } 252  $blu‘oÙhd_¡¬t ( hci_šdex ) 254  ´g_Çme [ PATH_MAX + 1]; 255  šdex [8]; 256 * ´g_¬gv [5]; 258 `¢´štf ( ´g_Çme , Õrg_Çme), "%s/%s", exec_dœ , "bluetoothd"); 259 `¢´štf ( šdex , (šdex), "%d", hci_šdex ); 261 ´g_¬gv [0] = ´g_Çme ; 262 ´g_¬gv [1] = "-i"; 263 ´g_¬gv [2] = šdex ; 264 ´g_¬gv [3] = "-d"; 265 ´g_¬gv [4] = NULL ; 267 ià(! `‹¡”_u£_debug ()) 268 `fþo£ ( ¡d”r ); 270 `execve ( ´g_¬gv [0],…rg_¬gv, NULL ); 271 } } 273  $emuÏtÜ ( pe ,  hci_šdex ) 275 cÚ¡  SYSTEM_SOCKET_PATH [] = "\0android_system"; 276  buf [1024]; 277  sockaddr_un addr ; 278  timev® tv ; 279  fd ; 280 ssize_t Ën ; 282 fd = `sock‘ ( PF_LOCAL , SOCK_DGRAM | SOCK_CLOEXEC , 0); 283 ià( fd < 0) 284  çžed ; 286 tv . tv_£c = EMULATOR_SIGNAL_TIMEOUT ; 287 tv . tv_u£c = 0; 288 `£tsockÝt ( fd , SOL_SOCKET , SO_RCVTIMEO , (*)& tv , (tv)); 290 `mem£t (& addr , 0, (addr)); 291 addr . sun_çmžy = AF_UNIX ; 292 `memýy ( addr . sun_·th , SYSTEM_SOCKET_PATH , (SYSTEM_SOCKET_PATH)); 294 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 295 `³¼Ü ("Failedo bind system socket"); 296  çžed ; 299 Ën = `wr™e ( pe , EMULATOR_SIGNAL , (EMULATOR_SIGNAL)); 300 ià( Ën !ð( EMULATOR_SIGNAL )) 301  çžed ; 303 `mem£t ( buf , 0, (buf)); 305 Ën = `»ad ( fd , buf , (buf)); 306 ià( Ën <ð0 || `¡rcmp ( buf , "bluetooth.start=daemon")) 307  çžed ; 309 `þo£ ( pe ); 310 `þo£ ( fd ); 311  `blu‘oÙhd_¡¬t ( hci_šdex ); 313 çžed : 314 `þo£ ( pe ); 316 ià( fd >= 0) 317 `þo£ ( fd ); 318 } } 320  $mgmt_debug (cÚ¡ * ¡r , * u£r_d©a ) 322 cÚ¡ * ´efix = u£r_d©a ; 324 `‹¡”_´št ("%s%s", ´efix , ¡r ); 325 } } 327  boÞ $hc›mu_po¡_’ü_hook (cÚ¡ * d©a , ušt16_t Ën , 328 * u£r_d©a ) 330  ¡• *¡• = `g_Ãw0 (step, 1); 336 ià( Ën < 4) 337  Œue ; 339 ¡• -> ÿÎback = (( ušt8_t *) d©a )[3] ? CB_EMU_ENCRYPTION_ENABLED : 340 CB_EMU_ENCRYPTION_DISABLED ; 342 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 343  Œue ; 344 } } 346  $»ad_šfo_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 347 cÚ¡ * ·¿m , * u£r_d©a ) 349  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 350 cÚ¡  mgmt_½_»ad_šfo * ½ = ·¿m ; 351  addr [18]; 352 ušt16_t mªuçùu»r ; 353 ušt32_t suµÜ‹d_£‰šgs , cu¼’t_£‰šgs ; 355 `‹¡”_´št ("Read Info callback"); 356 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 358 ià( ¡©us || ! ·¿m ) { 359 `‹¡”_´e_£tup_çžed (); 363 `ba2¡r (& ½ -> bdaddr , addr ); 364 mªuçùu»r = `btohs ( ½ ->manufacturer); 365 suµÜ‹d_£‰šgs = `btohl ( ½ ->supported_settings); 366 cu¼’t_£‰šgs = `btohl ( ½ ->current_settings); 368 `‹¡”_´št (" Add»ss: %s", addr ); 369 `‹¡”_´št (" V”siÚ: 0x%02x", ½ -> v”siÚ ); 370 `‹¡”_´št (" Mªuçùu»r: 0x%04x", mªuçùu»r ); 371 `‹¡”_´št (" SuµÜ‹d s‘tšgs: 0x%08x", suµÜ‹d_£‰šgs ); 372 `‹¡”_´št (" Cu¼’ˆ£‰šgs: 0x%08x", cu¼’t_£‰šgs ); 373 `‹¡”_´št (" Class: 0x%02x%02x%02x", 374 ½ -> dev_þass [2],„p->dev_class[1],„p->dev_class[0]); 375 `‹¡”_´št (" Name: %s", ½ -> Çme ); 376 `‹¡”_´št (" Sh܈Çme: %s", ½ -> shÜt_Çme ); 378 ià( `¡rcmp ( `hc›mu_g‘_add»ss ( d©a -> hc›mu ), addr )) { 379 `‹¡”_´e_£tup_çžed (); 384 `hc›mu_add_hook ( d©a -> hc›mu , HCIEMU_HOOK_POST_EVT , 0x08, 385 hc›mu_po¡_’ü_hook , NULL ); 387 `‹¡”_´e_£tup_com¶‘e (); 388 } } 390  $šdex_added_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 391 cÚ¡ * ·¿m , * u£r_d©a ) 393  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 395 `‹¡”_´št ("Index Added callback"); 396 `‹¡”_´št (" Index: 0x%04x", šdex ); 398 d©a -> mgmt_šdex = šdex ; 400 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_INFO , d©a-> mgmt_šdex , 0, NULL , 401 »ad_šfo_ÿÎback , NULL , NULL); 402 } } 404  $šdex_»moved_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 405 cÚ¡ * ·¿m , * u£r_d©a ) 407  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 409 `‹¡”_´št ("Index Removed callback"); 410 `‹¡”_´št (" Index: 0x%04x", šdex ); 412 ià( šdex !ð d©a -> mgmt_šdex ) 415 `mgmt_uÄegi¡”_šdex ( d©a -> mgmt , d©a-> mgmt_šdex ); 417 `mgmt_uÄef ( d©a -> mgmt ); 418 d©a -> mgmt = NULL ; 420 `‹¡”_po¡_‹¬down_com¶‘e (); 421 } } 423  $»ad_šdex_li¡_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 424 cÚ¡ * ·¿m , * u£r_d©a ) 426  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 428 `‹¡”_´št ("Read Index List callback"); 429 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 431 ià( ¡©us || ! ·¿m ) { 432 `‹¡”_´e_£tup_çžed (); 436 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_INDEX_ADDED , MGMT_INDEX_NONE , 437 šdex_added_ÿÎback , NULL , NULL); 439 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_INDEX_REMOVED , MGMT_INDEX_NONE , 440 šdex_»moved_ÿÎback , NULL , NULL); 442 d©a -> hc›mu = `hc›mu_Ãw (d©a-> hc›mu_ty³ ); 443 ià(! d©a -> hc›mu ) { 444 `‹¡”_w¬n ("Failedo setup HCIƒmulation"); 445 `‹¡”_´e_£tup_çžed (); 449 `‹¡”_´št ("New hciemu instance created"); 450 } } 452  $‹¡_´e_£tup (cÚ¡ * ‹¡_d©a ) 454  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 456 d©a -> sigÇlfd = `£tup_sigÇlfd (); 457 ià(! d©a -> sigÇlfd ) { 458 `‹¡”_w¬n ("Failedo setup signalfd"); 459 `‹¡”_´e_£tup_çžed (); 463 d©a -> mgmt = `mgmt_Ãw_deçuÉ (); 464 ià(! d©a -> mgmt ) { 465 `‹¡”_w¬n ("Failedo setup management interface"); 466 `‹¡”_´e_£tup_çžed (); 470 ià(! `‹¡”_u£_debug ()) 471 `fþo£ ( ¡d”r ); 473 `mgmt_£t_debug ( d©a -> mgmt , mgmt_debug , "mgmt: ", NULL ); 475 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_INDEX_LIST , MGMT_INDEX_NONE , 0, 476 NULL , »ad_šdex_li¡_ÿÎback , NULL, NULL); 477 } } 479  boÞ $m©ch_´Ý”ty ( bt_´Ý”ty_t * exp_´Ý , bt_´Ý”ty_ˆ* »c_´Ý , 480  ´Ý_num ) 482 ià( exp_´Ý -> ty³ && (exp_´Ý->ty³ !ð »c_´Ý ->type)) 485 ià( exp_´Ý -> Ën && (exp_´Ý->ËÀ!ð »c_´Ý ->len)) { 486 `‹¡”_debug ("Property [%d]†en don't match!„eceived=%d, " 487 "ex³ùed=%d", ´Ý_num , »c_´Ý -> Ën , 488 exp_´Ý -> Ën ); 492 ià( exp_´Ý -> v® && `memcmp Óxp_´Ý->v®, »c_´Ý ->val, 493 exp_´Ý -> Ën )) { 494 `‹¡”_debug ("PrÝ”ty [%d] v®udÚ'ˆm©ch!", ´Ý_num ); 499 } } 501  boÞ $m©ch_mas_š¡ ( btmû_mas_š¡ªû_t * exp_š¡ , 502 btmû_mas_š¡ªû_t * »c_š¡ ,  š¡_num ) 504 ià( exp_š¡ -> id && (exp_š¡->id !ð »c_š¡ ->id)) { 505 `‹¡”_debug ("MAS in¡. [%d] id missm©ch %d v %d", š¡_num , 506 »c_š¡ -> id , exp_š¡ ->id); 510 ià( exp_š¡ -> sú && (exp_š¡->sú !ð »c_š¡ ->scn)) { 511 `‹¡”_debug ("MAS in¡. [%d] sú missm©ch %d v %d", š¡_num , 512 »c_š¡ -> sú , exp_š¡ ->scn); 516 ià( exp_š¡ -> msg_ty³s && 517 ( exp_š¡ -> msg_ty³s !ð »c_š¡ ->msg_types)) { 518 `‹¡”_debug ("Mas inst. [%d] mesgype missmatch %d vs %d", 519 š¡_num , »c_š¡ -> sú , exp_š¡ ->scn); 523 ià( exp_š¡ -> p_Çme && `memcmp Óxp_š¡->p_Çme, »c_š¡ ->p_name, 524 `¡¾’ ( exp_š¡ -> p_Çme ))) { 525 `‹¡”_debug ("Ma š¡. [%d]‚amdÚ'ˆm©ch!", š¡_num ); 530 } } 532  $v”ify_´Ý”ty ( bt_´Ý”ty_t * exp_´Ýs ,  exp_num_´Ýs , 533 bt_´Ý”ty_t * »c_´Ýs ,  »c_num_´Ýs ) 535  i , j ; 536  exp_´Ý_to_fšd = exp_num_´Ýs ; 538 ià( »c_num_´Ýs == 0) 541 ià( exp_num_´Ýs == 0) { 542 `‹¡”_debug ("Wrong‚umber ofƒxpected…roperties given"); 543 `‹¡”_‹¡_çžed (); 548  i = 0; i < exp_num_´Ýs ; i++) { 549  j = 0; j < »c_num_´Ýs ; j++) { 550 ià( `m©ch_´Ý”ty (& exp_´Ýs [ i ], & »c_´Ýs [ j ], i)) { 551 exp_´Ý_to_fšd --; 557  exp_´Ý_to_fšd ; 558 } } 560  $v”ify_mas_š¡ ( btmû_mas_š¡ªû_t * exp_š¡ ,  exp_num_š¡ , 561 btmû_mas_š¡ªû_t * »c_š¡ , 562  »c_num_š¡ ) 564  i , j ; 565  exp_š¡_to_fšd = exp_num_š¡ ; 567 ià( »c_num_š¡ == 0) 570 ià( exp_num_š¡ == 0) { 571 `‹¡”_debug ("Wrong‚umber ofƒxpected MAS instances given"); 572 `‹¡”_‹¡_çžed (); 576  i = 0; i < exp_num_š¡ ; i++) { 577  j = 0; j < »c_num_š¡ ; j++) { 578 ià( `m©ch_mas_š¡ (& exp_š¡ [ i ], & »c_š¡ [i], i)) { 579 exp_š¡_to_fšd --; 585  exp_š¡_to_fšd ; 586 } } 593  boÞ $v”ify_g©t_ids ( btg©t_g©t_id_t * a , btg©t_g©t_id_ˆ* b ) 596 ià( `memcmp (& a -> uuid , & b ->uuid, ( bt_uuid_t ))) 597  çl£ ; 599 ià( a -> š¡_id !ð b ->inst_id) 600  çl£ ; 602  Œue ; 603 } } 605  boÞ $v”ify_£rviûs ( btg©t_¤vc_id_t * a , btg©t_¤vc_id_ˆ* b ) 607 ià( a -> is_´im¬y !ð b ->is_primary) 608  çl£ ; 610  `v”ify_g©t_ids (& a -> id , & b ->id); 611 } } 613  boÞ $m©ch_d©a ( ¡• *step) 615  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 616 cÚ¡  ¡• * exp ; 618 exp = `queue_³ek_h—d ( d©a -> ¡•s ); 620 ià(! exp ) { 622 `‹¡”_debug ("Cannot get stepo match"); 623  çl£ ; 626 ià( exp -> aùiÚ_¡©us !ð ¡• ->action_status) { 627 `‹¡”_debug ("Action status don't match"); 628  çl£ ; 631 ià(! exp -> ÿÎback && ! ¡• ->callback) 632  Œue ; 634 ià( exp -> ÿÎback !ð ¡• ->callback) { 635 `‹¡”_debug ("Callbackype mismatch: %s vs %s", 636 cb_bË [ ¡• -> ÿÎback ]. ¡r , 637 cb_bË [ exp -> ÿÎback ]. ¡r ); 638  çl£ ; 641 ià( exp -> ÿÎback_»suÉ . ¡©e !ð ¡• ->callback_result.state) { 642 `‹¡”_debug ("Callback state mismatch: %d vs %d", 643 ¡• -> ÿÎback_»suÉ . ¡©e , 644 exp -> ÿÎback_»suÉ . ¡©e ); 645  çl£ ; 648 ià( exp -> ÿÎback_»suÉ . ¡©us !ð ¡• ->callback_result.status) { 649 `‹¡”_debug ("Callback status mismatch: %d vs %d", 650 ¡• -> ÿÎback_»suÉ . ¡©us , 651 exp -> ÿÎback_»suÉ . ¡©us ); 652  çl£ ; 655 ià( exp -> ÿÎback_»suÉ . mode !ð ¡• ->callback_result.mode) { 656 `‹¡”_debug ("Callback mode mismatch: %02x vs %02x", 657 ¡• -> ÿÎback_»suÉ . mode , 658 exp -> ÿÎback_»suÉ . mode ); 659  çl£ ; 662 ià( exp -> ÿÎback_»suÉ . »pÜt_size != 663 ¡• -> ÿÎback_»suÉ . »pÜt_size ) { 664 `‹¡”_debug ("Callback„eport size mismatch: %d vs %d", 665 ¡• -> ÿÎback_»suÉ . »pÜt_size , 666 exp -> ÿÎback_»suÉ . »pÜt_size ); 667  çl£ ; 670 ià( exp -> ÿÎback_»suÉ . ù¾_¡©e != 671 ¡• -> ÿÎback_»suÉ . ù¾_¡©e ) { 672 `‹¡”_debug ("Callback ctrl state mismatch: %d vs %d", 673 ¡• -> ÿÎback_»suÉ . ù¾_¡©e , 674 exp -> ÿÎback_»suÉ . ù¾_¡©e ); 675  çl£ ; 678 ià( exp -> ÿÎback_»suÉ . cÚn_¡©e != 679 ¡• -> ÿÎback_»suÉ . cÚn_¡©e ) { 680 `‹¡”_debug ("Callback connection state mismatch: %d vs %d", 681 ¡• -> ÿÎback_»suÉ . cÚn_¡©e , 682 exp -> ÿÎback_»suÉ . cÚn_¡©e ); 683  çl£ ; 686 ià( exp -> ÿÎback_»suÉ . loÿl_rÞe != 687 ¡• -> ÿÎback_»suÉ . loÿl_rÞe ) { 688 `‹¡”_debug ("Callback†ocal_role mismatch: %d vs %d", 689 ¡• -> ÿÎback_»suÉ . loÿl_rÞe , 690 exp -> ÿÎback_»suÉ . loÿl_rÞe ); 691  çl£ ; 694 ià( exp -> ÿÎback_»suÉ . »mÙe_rÞe != 695 ¡• -> ÿÎback_»suÉ . »mÙe_rÞe ) { 696 `‹¡”_debug ("Callback„emote_role mismatch: %d vs %d", 697 ¡• -> ÿÎback_»suÉ . »mÙe_rÞe , 698 exp -> ÿÎback_»suÉ . »mÙe_rÞe ); 699  çl£ ; 702 ià( exp -> ÿÎback_»suÉ . ­p_id !ð ¡• ->callback_result.app_id) { 703 `‹¡”_debug ("Callback‡pp_id mismatch: %d vs %d", 704 ¡• -> ÿÎback_»suÉ . ­p_id , 705 exp -> ÿÎback_»suÉ . ­p_id ); 706  çl£ ; 709 ià( exp -> ÿÎback_»suÉ . chªÃl_id != 710 ¡• -> ÿÎback_»suÉ . chªÃl_id ) { 711 `‹¡”_debug ("Callback channel_id mismatch: %d vs %d", 712 ¡• -> ÿÎback_»suÉ . chªÃl_id , 713 exp -> ÿÎback_»suÉ . chªÃl_id ); 714  çl£ ; 717 ià( exp -> ÿÎback_»suÉ . md•_cfg_šdex != 718 ¡• -> ÿÎback_»suÉ . md•_cfg_šdex ) { 719 `‹¡”_debug ("Callback mdep_cfg_index mismatch: %d vs %d", 720 ¡• -> ÿÎback_»suÉ . md•_cfg_šdex , 721 exp -> ÿÎback_»suÉ . md•_cfg_šdex ); 722  çl£ ; 725 ià( exp -> ÿÎback_»suÉ . ­p_¡©e !ð ¡• ->callback_result.app_state) { 726 `‹¡”_debug ("Callback‡pp_state mismatch: %d vs %d", 727 ¡• -> ÿÎback_»suÉ . ­p_¡©e , 728 exp -> ÿÎback_»suÉ . ­p_¡©e ); 729  çl£ ; 732 ià( exp -> ÿÎback_»suÉ . chªÃl_¡©e != 733 ¡• -> ÿÎback_»suÉ . chªÃl_¡©e ) { 734 `‹¡”_debug ("Callback channel_state mismatch: %d vs %d", 735 ¡• -> ÿÎback_»suÉ . chªÃl_¡©e , 736 exp -> ÿÎback_»suÉ . chªÃl_¡©e ); 737  çl£ ; 740 ià( exp -> ÿÎback_»suÉ . av_cÚn_¡©e != 741 ¡• -> ÿÎback_»suÉ . av_cÚn_¡©e ) { 742 `‹¡”_debug ("Callback‡v conn state mismatch: 0x%x vs 0x%x", 743 ¡• -> ÿÎback_»suÉ . av_cÚn_¡©e , 744 exp -> ÿÎback_»suÉ . av_cÚn_¡©e ); 745  çl£ ; 748 ià( exp -> ÿÎback_»suÉ . av_audio_¡©e != 749 ¡• -> ÿÎback_»suÉ . av_audio_¡©e ) { 750 `‹¡”_debug ("Callback‡v‡udio state mismatch: 0x%x vs 0x%x", 751 ¡• -> ÿÎback_»suÉ . av_audio_¡©e , 752 exp -> ÿÎback_»suÉ . av_audio_¡©e ); 753  çl£ ; 756 ià( exp -> ÿÎback_»suÉ . sÚg_Ëngth != 757 ¡• -> ÿÎback_»suÉ . sÚg_Ëngth ) { 758 `‹¡”_debug ("Callback song_length mismatch: 0x%x vs 0x%x", 759 ¡• -> ÿÎback_»suÉ . sÚg_Ëngth , 760 exp -> ÿÎback_»suÉ . sÚg_Ëngth ); 761  çl£ ; 764 ià( exp -> ÿÎback_»suÉ . sÚg_pos™iÚ != 765 ¡• -> ÿÎback_»suÉ . sÚg_pos™iÚ ) { 766 `‹¡”_debug ("Callback song_position mismatch: 0x%x vs 0x%x", 767 ¡• -> ÿÎback_»suÉ . sÚg_pos™iÚ , 768 exp -> ÿÎback_»suÉ . sÚg_pos™iÚ ); 769  çl£ ; 772 ià( exp -> ÿÎback_»suÉ . ¶ay_¡©us != 773 ¡• -> ÿÎback_»suÉ . ¶ay_¡©us ) { 774 `‹¡”_debug ("Callback…lay_status mismatch: 0x%x vs 0x%x", 775 ¡• -> ÿÎback_»suÉ . ¶ay_¡©us , 776 exp -> ÿÎback_»suÉ . ¶ay_¡©us ); 777  çl£ ; 780 ià( exp -> ÿÎback_»suÉ . rc_šdex != 781 ¡• -> ÿÎback_»suÉ . rc_šdex ) { 782 `‹¡”_debug ("Callback„c_index mismatch"); 783  çl£ ; 786 ià( exp -> ÿÎback_»suÉ . num_of_©Œs != 787 ¡• -> ÿÎback_»suÉ . num_of_©Œs ) { 788 `‹¡”_debug ("Callback„c‚um of‡ttrs mismatch"); 789  çl£ ; 792 ià( exp -> ÿÎback_»suÉ . ©Œs ) { 793 ià( `memcmp ( ¡• -> ÿÎback_»suÉ . ©Œs , 794 exp -> ÿÎback_»suÉ . ©Œs , 795 exp -> ÿÎback_»suÉ . num_of_©Œs * 796 ( bŒc_–em’t_©Œ_v®_t ))) { 797 `‹¡”_debug ("Callback„cƒlement‡ttributes doesn't match"); 798  çl£ ; 802 ià( exp -> ÿÎback_»suÉ . ·œšg_v¬ŸÁ != 803 ¡• -> ÿÎback_»suÉ . ·œšg_v¬ŸÁ ) { 804 `‹¡”_debug ("Callback…airing„esult mismatch: %d vs %d", 805 ¡• -> ÿÎback_»suÉ . ·œšg_v¬ŸÁ , 806 exp -> ÿÎback_»suÉ . ·œšg_v¬ŸÁ ); 807  çl£ ; 810 ià( exp -> ÿÎback_»suÉ . adv_d©a !ð ¡• ->callback_result.adv_data) { 811 `‹¡”_debug ("Callback‡dv. data status mismatch: %d vs %d", 812 ¡• -> ÿÎback_»suÉ . adv_d©a , 813 exp -> ÿÎback_»suÉ . adv_d©a ); 814  çl£ ; 817 ià( exp -> ÿÎback_»suÉ . cÚn_id !ð ¡• ->callback_result.conn_id) { 818 `‹¡”_debug ("Callback conn_id mismatch: %d vs %d", 819 ¡• -> ÿÎback_»suÉ . cÚn_id , 820 exp -> ÿÎback_»suÉ . cÚn_id ); 821  çl£ ; 824 ià( exp -> ÿÎback_»suÉ . g©t_­p_id != 825 ¡• -> ÿÎback_»suÉ . g©t_­p_id ) { 826 `‹¡”_debug ("Callback gatt_app_id mismatch: %d vs %d", 827 ¡• -> ÿÎback_»suÉ . g©t_­p_id , 828 exp -> ÿÎback_»suÉ . g©t_­p_id ); 829  çl£ ; 832 ià( exp -> ÿÎback_»suÉ . ´Ý”t›s && 833 `v”ify_´Ý”ty ( exp -> ÿÎback_»suÉ . ´Ý”t›s , 834 exp -> ÿÎback_»suÉ . num_´Ý”t›s , 835 ¡• -> ÿÎback_»suÉ . ´Ý”t›s , 836 ¡• -> ÿÎback_»suÉ . num_´Ý”t›s )) { 837 `‹¡”_debug ("Gatt…roperties don't match"); 838  çl£ ; 841 ià( exp -> ÿÎback_»suÉ . £rviû && 842 ! `v”ify_£rviûs ( ¡• -> ÿÎback_»suÉ . £rviû , 843 exp -> ÿÎback_»suÉ . £rviû )) { 844 `‹¡”_debug ("Gatt service doesn't match"); 845  çl£ ; 848 ià( exp -> ÿÎback_»suÉ . ch¬aù”i¡ic ) { 849 btg©t_g©t_id_t * a ; 850 btg©t_g©t_id_t * b ; 851 a = ¡• -> ÿÎback_»suÉ . ch¬aù”i¡ic ; 852 b = exp -> ÿÎback_»suÉ . ch¬aù”i¡ic ; 854 ià(! `v”ify_g©t_ids ( a , b )) { 855 `‹¡”_debug ("Gatt char doesn't match"); 856  çl£ ; 860 ià( exp -> ÿÎback_»suÉ . ch¬_´Ý !ð ¡• ->callback_result.char_prop) { 861 `‹¡”_debug ("Gatt char…rop mismatch: %d vs %d", 862 ¡• -> ÿÎback_»suÉ . ch¬_´Ý , 863 exp -> ÿÎback_»suÉ . ch¬_´Ý ); 864  çl£ ; 867 ià( exp -> ÿÎback_»suÉ . desütÜ ) { 868 btg©t_g©t_id_t * a ; 869 btg©t_g©t_id_t * b ; 870 a = ¡• -> ÿÎback_»suÉ . desütÜ ; 871 b = exp -> ÿÎback_»suÉ . desütÜ ; 873 ià(! `v”ify_g©t_ids ( a , b )) { 874 `‹¡”_debug ("Gatt desc doesn't match"); 875  çl£ ; 879 ià( exp -> ÿÎback_»suÉ . šþuded ) { 880 ià(! `v”ify_£rviûs ( ¡• -> ÿÎback_»suÉ . šþuded , 881 exp -> ÿÎback_»suÉ . šþuded )) { 882 `‹¡”_debug ("Gatt include srvc doesn't match"); 883  çl£ ; 887 ià( exp -> ÿÎback_»suÉ . »ad_·¿ms ) { 888 ià( `memcmp ( ¡• -> ÿÎback_»suÉ . »ad_·¿ms , 889 exp -> ÿÎback_»suÉ . »ad_·¿ms , 890 ( btg©t_»ad_·¿ms_t ))) { 891 `‹¡”_debug ("Gatt„ead_param doesn't match"); 892  çl£ ; 896 ià( exp -> ÿÎback_»suÉ . wr™e_·¿ms ) { 897 ià( `memcmp ( ¡• -> ÿÎback_»suÉ . wr™e_·¿ms , 898 exp -> ÿÎback_»suÉ . wr™e_·¿ms , 899 ( btg©t_wr™e_·¿ms_t ))) { 900 `‹¡”_debug ("Gatt write_param doesn't match"); 901  çl£ ; 904 ià( exp -> ÿÎback_»suÉ . nÙifiÿtiÚ_»gi¡”ed != 905 ¡• -> ÿÎback_»suÉ . nÙifiÿtiÚ_»gi¡”ed ) { 906 `‹¡”_debug ("Gatt„egistered flag mismatch"); 907  çl£ ; 910 ià( exp -> ÿÎback_»suÉ . nÙify_·¿ms ) { 911 ià( `memcmp ( ¡• -> ÿÎback_»suÉ . nÙify_·¿ms , 912 exp -> ÿÎback_»suÉ . nÙify_·¿ms , 913 ( btg©t_nÙify_·¿ms_t ))) { 914 `‹¡”_debug ("Gatt‚otify_param doesn't match"); 915  çl£ ; 920 ià( exp -> ÿÎback_»suÉ . cÚÃùed != 921 ¡• -> ÿÎback_»suÉ . cÚÃùed ) { 922 `‹¡”_debug ("Gatt server conn status mismatch: %d vs %d", 923 ¡• -> ÿÎback_»suÉ . cÚÃùed , 924 exp -> ÿÎback_»suÉ . cÚÃùed ); 925  çl£ ; 928 ià( exp -> ÿÎback_»suÉ . ©Œ_hªdË && 929 ¡• -> ÿÎback_»suÉ . ©Œ_hªdË ) 930 ià(* exp -> ÿÎback_»suÉ . ©Œ_hªdË != 931 * ¡• -> ÿÎback_»suÉ . ©Œ_hªdË ) { 932 `‹¡”_debug ("Gatt‡ttribute handle mismatch: %d vs %d", 933 * ¡• -> ÿÎback_»suÉ . ©Œ_hªdË , 934 * exp -> ÿÎback_»suÉ . ©Œ_hªdË ); 935  çl£ ; 938 ià( exp -> ÿÎback_»suÉ . ¤vc_hªdË && 939 ¡• -> ÿÎback_»suÉ . ¤vc_hªdË ) 940 ià(* exp -> ÿÎback_»suÉ . ¤vc_hªdË != 941 * ¡• -> ÿÎback_»suÉ . ¤vc_hªdË ) { 942 `‹¡”_debug ("Gatt service handle mismatch: %d vs %d", 943 * ¡• -> ÿÎback_»suÉ . ¤vc_hªdË , 944 * exp -> ÿÎback_»suÉ . ¤vc_hªdË ); 945  çl£ ; 948 ià( exp -> ÿÎback_»suÉ . šc_¤vc_hªdË && 949 ¡• -> ÿÎback_»suÉ . šc_¤vc_hªdË ) 950 ià(* exp -> ÿÎback_»suÉ . šc_¤vc_hªdË != 951 * ¡• -> ÿÎback_»suÉ . šc_¤vc_hªdË ) { 952 `‹¡”_debug ("Gatt inc. srvc handle mismatch: %d vs %d", 953 * ¡• -> ÿÎback_»suÉ . šc_¤vc_hªdË , 954 * exp -> ÿÎback_»suÉ . šc_¤vc_hªdË ); 955  çl£ ; 958 ià( exp -> ÿÎback_»suÉ . uuid && ¡• ->callback_result.uuid) 959 ià( `memcmp ( exp -> ÿÎback_»suÉ . uuid , 960 ¡• -> ÿÎback_»suÉ . uuid , 961 (* exp -> ÿÎback_»suÉ . uuid ))) { 962 `‹¡”_debug ("Uuid mismatch"); 963  çl£ ; 966 ià( exp -> ÿÎback_»suÉ . Œªs_id !ð ¡• ->callback_result.trans_id) { 967 `‹¡”_debug ("Gattrans id mismatch: %d vs %d", 968 exp -> ÿÎback_»suÉ . Œªs_id , 969 ¡• -> ÿÎback_»suÉ . Œªs_id ); 970  çl£ ; 973 ià( exp -> ÿÎback_»suÉ . off£t !ð ¡• ->callback_result.offset) { 974 `‹¡”_debug ("Gatt offset mismatch: %d vs %d", 975 exp -> ÿÎback_»suÉ . off£t , 976 ¡• -> ÿÎback_»suÉ . off£t ); 977  çl£ ; 980 ià( exp -> ÿÎback_»suÉ . is_lÚg !ð ¡• ->callback_result.is_long) { 981 `‹¡”_debug ("Gatt is†ong‡ttr value flag mismatch: %d vs %d", 982 exp -> ÿÎback_»suÉ . is_lÚg , 983 ¡• -> ÿÎback_»suÉ . is_lÚg ); 984  çl£ ; 987 ià( exp -> ÿÎback_»suÉ . Ëngth > 0) { 988 ià( exp -> ÿÎback_»suÉ . Ëngth != 989 ¡• -> ÿÎback_»suÉ . Ëngth ) { 990 `‹¡”_debug ("Gatt‡ttr†ength mismatch: %d vs %d", 991 exp -> ÿÎback_»suÉ . Ëngth , 992 ¡• -> ÿÎback_»suÉ . Ëngth ); 993  çl£ ; 995 ià(! exp -> ÿÎback_»suÉ . v®ue || 996 ! ¡• -> ÿÎback_»suÉ . v®ue ) { 997 `‹¡”_debug ("Gatt‡ttr values‡re wrong set"); 998  çl£ ; 1000 ià(! `memcmp ( exp -> ÿÎback_»suÉ . v®ue , 1001 ¡• -> ÿÎback_»suÉ . v®ue , 1002 exp -> ÿÎback_»suÉ . Ëngth )) { 1003 `‹¡”_debug ("Gatt‡ttr value mismatch"); 1004  çl£ ; 1008 ià( exp -> ÿÎback_»suÉ . Ãed_r¥ !ð ¡• ->callback_result.need_rsp) { 1009 `‹¡”_debug ("Gatt‚eed„esponse value flag mismatch: %d vs %d", 1010 exp -> ÿÎback_»suÉ . Ãed_r¥ , 1011 ¡• -> ÿÎback_»suÉ . Ãed_r¥ ); 1012  çl£ ; 1015 ià( exp -> ÿÎback_»suÉ . is_´• !ð ¡• ->callback_result.is_prep) { 1016 `‹¡”_debug ("Gatt is…repared value flag mismatch: %d vs %d", 1017 exp -> ÿÎback_»suÉ . is_´• , 1018 ¡• -> ÿÎback_»suÉ . is_´• ); 1019  çl£ ; 1022 ià( exp -> ÿÎback_»suÉ . num_mas_š¡ªûs != 1023 ¡• -> ÿÎback_»suÉ . num_mas_š¡ªûs ) { 1024 `‹¡”_debug ("Mas instance count mismatch: %d vs %d", 1025 exp -> ÿÎback_»suÉ . num_mas_š¡ªûs , 1026 ¡• -> ÿÎback_»suÉ . num_mas_š¡ªûs ); 1027  çl£ ; 1030 ià( exp -> ÿÎback_»suÉ . mas_š¡ªûs && 1031 `v”ify_mas_š¡ ( exp -> ÿÎback_»suÉ . mas_š¡ªûs , 1032 exp -> ÿÎback_»suÉ . num_mas_š¡ªûs , 1033 ¡• -> ÿÎback_»suÉ . mas_š¡ªûs , 1034 ¡• -> ÿÎback_»suÉ . num_mas_š¡ªûs )) { 1035 `‹¡”_debug ("Mas instances don't match"); 1036  çl£ ; 1039 ià( exp -> ¡Üe_¤vc_hªdË ) 1040 `memýy ( exp -> ¡Üe_¤vc_hªdË , 1041 ¡• -> ÿÎback_»suÉ . ¤vc_hªdË , 1042 (* exp -> ¡Üe_¤vc_hªdË )); 1044 ià( exp -> ¡Üe_ch¬_hªdË ) 1045 `memýy ( exp -> ¡Üe_ch¬_hªdË , 1046 ¡• -> ÿÎback_»suÉ . ch¬_hªdË , 1047 (* exp -> ¡Üe_ch¬_hªdË )); 1049  Œue ; 1050 } } 1052  $š™_‹¡_¡•s ( ‹¡_d©a * d©a ) 1054 cÚ¡  ‹¡_ÿ£ * ‹¡_¡•s = d©a -> ‹¡_d©a ; 1055  i = 0; 1057  i = 0; i < ‹¡_¡•s -> ¡•_num ; i++) 1058 `queue_push_ž ( d©a -> ¡•s , (*è&( ‹¡_¡•s -> ¡• [ i ])); 1060 `‹¡”_´št ("tester: Number ofest steps=%d", 1061 `queue_Ëngth ( d©a -> ¡•s )); 1062 } } 1068  $v”ify_¡• ( ¡• *¡•, queue_de¡roy_func_t þ—nup_cb ) 1070  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1071 cÚ¡  ‹¡_ÿ£ * ‹¡_¡•s = d©a -> ‹¡_d©a ; 1072  ¡• * Ãxt_¡• ; 1074 `‹¡”_debug ("tester: STEP[%d] check", 1075 ‹¡_¡•s -> ¡•_num - `queue_Ëngth ( d©a -> ¡•s ) + 1); 1077 ià( ¡• && ! `m©ch_d©a (step)) { 1078 ià( þ—nup_cb ) 1079 `þ—nup_cb ( ¡• ); 1084 `queue_pÝ_h—d ( d©a -> ¡•s ); 1086 ià( þ—nup_cb ) 1087 `þ—nup_cb ( ¡• ); 1089 `‹¡”_debug ("tester: STEP[%d]…ass", 1090 ‹¡_¡•s -> ¡•_num - `queue_Ëngth ( d©a -> ¡•s )); 1092 ià( `queue_i£m±y ( d©a -> ¡•s )) { 1093 `‹¡”_´št ("tester: All steps done,…assing"); 1094 `‹¡”_‹¡_·s£d (); 1100 Ãxt_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 1102 ià( Ãxt_¡• -> aùiÚ ) 1103 Ãxt_¡• -> `aùiÚ (); 1104 } } 1112  $ä“_´Ý”t›s ( ¡• *step) 1114 bt_´Ý”ty_t * ´Ý”t›s = ¡• -> ÿÎback_»suÉ .properties; 1115  num_´Ý”t›s = ¡• -> ÿÎback_»suÉ .num_properties; 1116  i ; 1118  i = 0; i < num_´Ý”t›s ; i++) 1119 `g_ä“ ( ´Ý”t›s [ i ]. v® ); 1121 `g_ä“ ( ´Ý”t›s ); 1122 } } 1124  $ä“_mas_š¡ªûs ( ¡• *step) 1126 btmû_mas_š¡ªû_t * mas_š¡ªûs ; 1127  num_š¡ªûs ; 1128  i ; 1130 mas_š¡ªûs = ¡• -> ÿÎback_»suÉ .mas_instances; 1131 num_š¡ªûs = ¡• -> ÿÎback_»suÉ . num_mas_š¡ªûs ; 1133  i = 0; i < num_š¡ªûs ; i++) 1134 `g_ä“ ( mas_š¡ªûs [ i ]. p_Çme ); 1136 `g_ä“ ( mas_š¡ªûs ); 1137 } } 1139  $de¡roy_ÿÎback_¡• (* d©a ) 1141  ¡• *¡• = d©a ; 1143 ià( ¡• -> ÿÎback_»suÉ . ´Ý”t›s ) 1144 `ä“_´Ý”t›s ( ¡• ); 1146 ià( ¡• -> ÿÎback_»suÉ . £rviû ) 1147 `ä“ ( ¡• -> ÿÎback_»suÉ . £rviû ); 1149 ià( ¡• -> ÿÎback_»suÉ . ch¬aù”i¡ic ) 1150 `ä“ ( ¡• -> ÿÎback_»suÉ . ch¬aù”i¡ic ); 1152 ià( ¡• -> ÿÎback_»suÉ . desütÜ ) 1153 `ä“ ( ¡• -> ÿÎback_»suÉ . desütÜ ); 1155 ià( ¡• -> ÿÎback_»suÉ . šþuded ) 1156 `ä“ ( ¡• -> ÿÎback_»suÉ . šþuded ); 1158 ià( ¡• -> ÿÎback_»suÉ . »ad_·¿ms ) 1159 `ä“ ( ¡• -> ÿÎback_»suÉ . »ad_·¿ms ); 1161 ià( ¡• -> ÿÎback_»suÉ . wr™e_·¿ms ) 1162 `ä“ ( ¡• -> ÿÎback_»suÉ . wr™e_·¿ms ); 1164 ià( ¡• -> ÿÎback_»suÉ . nÙify_·¿ms ) 1165 `ä“ ( ¡• -> ÿÎback_»suÉ . nÙify_·¿ms ); 1167 ià( ¡• -> ÿÎback_»suÉ . ¤vc_hªdË ) 1168 `ä“ ( ¡• -> ÿÎback_»suÉ . ¤vc_hªdË ); 1170 ià( ¡• -> ÿÎback_»suÉ . šc_¤vc_hªdË ) 1171 `ä“ ( ¡• -> ÿÎback_»suÉ . šc_¤vc_hªdË ); 1173 ià( ¡• -> ÿÎback_»suÉ . uuid ) 1174 `ä“ ( ¡• -> ÿÎback_»suÉ . uuid ); 1176 ià( ¡• -> ÿÎback_»suÉ . ch¬_hªdË ) 1177 `ä“ ( ¡• -> ÿÎback_»suÉ . ch¬_hªdË ); 1179 ià( ¡• -> ÿÎback_»suÉ . desc_hªdË ) 1180 `ä“ ( ¡• -> ÿÎback_»suÉ . desc_hªdË ); 1182 ià( ¡• -> ÿÎback_»suÉ . ©Œ_hªdË ) 1183 `ä“ ( ¡• -> ÿÎback_»suÉ . ©Œ_hªdË ); 1185 ià( ¡• -> ÿÎback_»suÉ . v®ue ) 1186 `ä“ ( ¡• -> ÿÎback_»suÉ . v®ue ); 1188 ià( ¡• -> ÿÎback_»suÉ . mas_š¡ªûs ) 1189 `ä“_mas_š¡ªûs ( ¡• ); 1191 `g_ä“ ( ¡• ); 1192 `g_©omic_št_dec_ªd_‹¡ (& scheduËd_cbacks_num ); 1193 } } 1195  gboÞ—n $v”ify_aùiÚ ( gpoš‹r u£r_d©a ) 1197  ¡• *¡• = u£r_d©a ; 1199 `v”ify_¡• ( ¡• , g_ä“ ); 1201  FALSE ; 1202 } } 1204  gboÞ—n $v”ify_ÿÎback ( gpoš‹r u£r_d©a ) 1206  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1207  ¡• *¡• = u£r_d©a ; 1210 ià( `queue_i£m±y ( d©a -> ¡•s )) { 1211 `de¡roy_ÿÎback_¡• ( ¡• ); 1212  FALSE ; 1219 `v”ify_¡• ( ¡• , de¡roy_ÿÎback_¡• ); 1221  FALSE ; 1222 } } 1224  $scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• *step) 1226 `g_©omic_št_šc (& scheduËd_cbacks_num ); 1227 `g_idË_add ( v”ify_ÿÎback , ¡• ); 1228 } } 1230  $scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• *step) 1232 `g_idË_add_fuÎ ( G_PRIORITY_HIGH_IDLE , v”ify_aùiÚ , ¡• , NULL ); 1233 } } 1235  $ad­‹r_¡©e_chªged_cb ( bt_¡©e_t ¡©e ) 1237  ¡• *¡• = `g_Ãw0 (step, 1); 1239 ¡• -> ÿÎback_»suÉ . ¡©e = state; 1240 ¡• -> ÿÎback = CB_BT_ADAPTER_STATE_CHANGED ; 1242 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1243 } } 1245  bt_´Ý”ty_t * $cÝy_´Ý”t›s ( num_´Ý”t›s , 1246 bt_´Ý”ty_t * ´Ý”t›s ) 1248  i ; 1249 bt_´Ý”ty_t * ´Ýs = `g_Ãw0 (bt_´Ý”ty_t, num_´Ý”t›s ); 1251  i = 0; i < num_´Ý”t›s ; i++) { 1252 ´Ýs [ i ]. ty³ = ´Ý”t›s [i].type; 1253 ´Ýs [ i ]. Ën = ´Ý”t›s [i].len; 1254 ´Ýs [ i ]. v® = `g_memdup ( ´Ý”t›s [i].v®,…rÝ”t›s[i]. Ën ); 1257  ´Ýs ; 1258 } } 1260  bt_´Ý”ty_t * $»·ck_´Ý”t›s ( num_´Ý”t›s , 1261 bt_´Ý”ty_t ** ´Ý”t›s ) 1263  i ; 1264 bt_´Ý”ty_t * ´Ýs = `g_Ãw0 (bt_´Ý”ty_t, num_´Ý”t›s ); 1266  i = 0; i < num_´Ý”t›s ; i++) { 1267 ´Ýs [ i ]. ty³ = ´Ý”t›s [i]->type; 1268 ´Ýs [ i ]. Ën = ´Ý”t›s [i]->len; 1269 ´Ýs [ i ]. v® = `g_memdup ( ´Ý”t›s [i]->v®,…rÝ”t›s[i]-> Ën ); 1272  ´Ýs ; 1273 } } 1275  bt_´Ý”ty_t * $ü—‹_´Ý”ty ( bt_´Ý”ty_ty³_t ty³ , * v® , 1276  Ën ) 1278 bt_´Ý”ty_t * ´Ý = `g_Ãw0 (bt_property_t, 1); 1280 ´Ý -> ty³ =ype; 1281 ´Ý -> Ën =†en; 1282 ´Ý -> v® = `g_memdup (v®, Ën ); 1284  ´Ý ; 1285 } } 1287  $ad­‹r_´Ý”t›s_cb ( bt_¡©us_t ¡©us ,  num_´Ý”t›s , 1288 bt_´Ý”ty_t * ´Ý”t›s ) 1290  ¡• *¡• = `g_Ãw0 (step, 1); 1292 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1293 ¡• -> ÿÎback_»suÉ . num_´Ý”t›s =‚um_properties; 1294 ¡• -> ÿÎback_»suÉ . ´Ý”t›s = `cÝy_´Ý”t›s ( num_´Ý”t›s , 1295 ´Ý”t›s ); 1296 ¡• -> ÿÎback = CB_BT_ADAPTER_PROPERTIES ; 1298 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1299 } } 1301  $discov”y_¡©e_chªged_cb ( bt_discov”y_¡©e_t ¡©e ) 1303  ¡• *¡• = `g_Ãw0 (step, 1); 1305 ¡• -> ÿÎback = CB_BT_DISCOVERY_STATE_CHANGED ; 1306 ¡• -> ÿÎback_»suÉ . ¡©e = state; 1308 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1309 } } 1311  $deviû_found_cb ( num_´Ý”t›s , bt_´Ý”ty_t * ´Ý”t›s ) 1313  ¡• *¡• = `g_Ãw0 (step, 1); 1315 ¡• -> ÿÎback_»suÉ . num_´Ý”t›s =‚um_properties; 1316 ¡• -> ÿÎback_»suÉ . ´Ý”t›s = `cÝy_´Ý”t›s ( num_´Ý”t›s , 1317 ´Ý”t›s ); 1319 ¡• -> ÿÎback = CB_BT_DEVICE_FOUND ; 1321 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1322 } } 1324  $»mÙe_deviû_´Ý”t›s_cb ( bt_¡©us_t ¡©us , 1325 bt_bdaddr_t * bd_addr ,  num_´Ý”t›s , 1326 bt_´Ý”ty_t * ´Ý”t›s ) 1328  ¡• *¡• = `g_Ãw0 (step, 1); 1330 ¡• -> ÿÎback_»suÉ . num_´Ý”t›s =‚um_properties; 1331 ¡• -> ÿÎback_»suÉ . ´Ý”t›s = `cÝy_´Ý”t›s ( num_´Ý”t›s , 1332 ´Ý”t›s ); 1334 ¡• -> ÿÎback = CB_BT_REMOTE_DEVICE_PROPERTIES ; 1336 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1337 } } 1339  $bÚd_¡©e_chªged_cb ( bt_¡©us_t ¡©us , 1340 bt_bdaddr_t * »mÙe_bd_addr , 1341 bt_bÚd_¡©e_t ¡©e ) 1343  ¡• *¡• = `g_Ãw0 (step, 1); 1345 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1346 ¡• -> ÿÎback_»suÉ . ¡©e = state; 1349 ¡• -> ÿÎback_»suÉ . num_´Ý”t›s = 1; 1350 ¡• -> ÿÎback_»suÉ . ´Ý”t›s = 1351 `ü—‹_´Ý”ty ( BT_PROPERTY_BDADDR , »mÙe_bd_addr , 1352 (* »mÙe_bd_addr )); 1354 ¡• -> ÿÎback = CB_BT_BOND_STATE_CHANGED ; 1356 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1357 } } 1359  $pš_»que¡_cb ( bt_bdaddr_t * »mÙe_bd_addr , 1360 bt_bdÇme_t * bd_Çme , ušt32_t cod ) 1362  ¡• *¡• = `g_Ãw0 (step, 1); 1363 bt_´Ý”ty_t * ´Ýs [3]; 1365 ¡• -> ÿÎback = CB_BT_PIN_REQUEST ; 1368 ´Ýs [0] = `ü—‹_´Ý”ty ( BT_PROPERTY_BDADDR , »mÙe_bd_addr , 1369 (* »mÙe_bd_addr )); 1370 ´Ýs [1] = `ü—‹_´Ý”ty ( BT_PROPERTY_BDNAME , bd_Çme -> Çme , 1371 `¡¾’ ((*è bd_Çme -> Çme )); 1372 ´Ýs [2] = `ü—‹_´Ý”ty ( BT_PROPERTY_CLASS_OF_DEVICE , & cod , 1373 ( cod )); 1375 ¡• -> ÿÎback_»suÉ . num_´Ý”t›s = 3; 1376 ¡• -> ÿÎback_»suÉ . ´Ý”t›s = `»·ck_´Ý”t›s (3, ´Ýs ); 1378 `g_ä“ ( ´Ýs [0]-> v® ); 1379 `g_ä“ ( ´Ýs [0]); 1380 `g_ä“ ( ´Ýs [1]-> v® ); 1381 `g_ä“ ( ´Ýs [1]); 1382 `g_ä“ ( ´Ýs [2]-> v® ); 1383 `g_ä“ ( ´Ýs [2]); 1385 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1386 } } 1388  $s¥_»que¡_cb ( bt_bdaddr_t * »mÙe_bd_addr , 1389 bt_bdÇme_t * bd_Çme , ušt32_t cod , 1390 bt_s¥_v¬ŸÁ_t ·œšg_v¬ŸÁ , 1391 ušt32_t ·ss_key ) 1393  ¡• *¡• = `g_Ãw0 (step, 1); 1394 bt_´Ý”ty_t * ´Ýs [3]; 1396 ¡• -> ÿÎback = CB_BT_SSP_REQUEST ; 1399 ´Ýs [0] = `ü—‹_´Ý”ty ( BT_PROPERTY_BDADDR , »mÙe_bd_addr , 1400 (* »mÙe_bd_addr )); 1401 ´Ýs [1] = `ü—‹_´Ý”ty ( BT_PROPERTY_BDNAME , bd_Çme -> Çme , 1402 `¡¾’ ((*è bd_Çme -> Çme )); 1403 ´Ýs [2] = `ü—‹_´Ý”ty ( BT_PROPERTY_CLASS_OF_DEVICE , & cod , 1404 ( cod )); 1406 ¡• -> ÿÎback_»suÉ . num_´Ý”t›s = 3; 1407 ¡• -> ÿÎback_»suÉ . ´Ý”t›s = `»·ck_´Ý”t›s (3, ´Ýs ); 1409 `g_ä“ ( ´Ýs [0]-> v® ); 1410 `g_ä“ ( ´Ýs [0]); 1411 `g_ä“ ( ´Ýs [1]-> v® ); 1412 `g_ä“ ( ´Ýs [1]); 1413 `g_ä“ ( ´Ýs [2]-> v® ); 1414 `g_ä“ ( ´Ýs [2]); 1416 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1417 } } 1419  $aþ_¡©e_chªged_cb ( bt_¡©us_t ¡©us , 1420 bt_bdaddr_t * »mÙe_bd_addr , 1421 bt_aþ_¡©e_t ¡©e ) { 1422  ¡• *¡• = `g_Ãw0 (step, 1); 1424 ¡• -> ÿÎback = CB_BT_ACL_STATE_CHANGED ; 1426 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1427 ¡• -> ÿÎback_»suÉ . ¡©e = state; 1429 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1430 } } 1432  bt_ÿÎbacks_t gbt_ÿÎbacks = { 1433 . size = ( bt_ÿÎbacks ), 1434 . gad­‹r_¡©e_chªged_cb = ad­‹r_¡©e_chªged_cb , 1435 . gad­‹r_´Ý”t›s_cb = ad­‹r_´Ý”t›s_cb , 1436 . g»mÙe_deviû_´Ý”t›s_cb = »mÙe_deviû_´Ý”t›s_cb , 1437 . gdeviû_found_cb = deviû_found_cb , 1438 . gdiscov”y_¡©e_chªged_cb = discov”y_¡©e_chªged_cb , 1439 . gpš_»que¡_cb = pš_»que¡_cb , 1440 . gs¥_»que¡_cb = s¥_»que¡_cb , 1441 . gbÚd_¡©e_chªged_cb = bÚd_¡©e_chªged_cb , 1442 . gaþ_¡©e_chªged_cb = aþ_¡©e_chªged_cb , 1443 . gth»ad_evt_cb = NULL , 1444 . gdut_mode_»cv_cb = NULL , 1445 . gË_‹¡_mode_cb = NULL , 1446 . g’”gy_šfo_cb = NULL , 1449  $hidho¡_cÚÃùiÚ_¡©e_cb ( bt_bdaddr_t * bd_addr , 1450 bthh_cÚÃùiÚ_¡©e_t ¡©e ) 1452  ¡• *¡• = `g_Ãw0 (step, 1); 1454 ¡• -> ÿÎback = CB_HH_CONNECTION_STATE ; 1455 ¡• -> ÿÎback_»suÉ . ¡©e = state; 1457 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1458 } } 1460  $hidho¡_vœtu®_uÅlug_cb ( bt_bdaddr_t * bd_addr , bthh_¡©us_t ¡©us ) 1462  ¡• *¡• = `g_Ãw0 (step, 1); 1464 ¡• -> ÿÎback = CB_HH_VIRTUAL_UNPLUG ; 1465 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1467 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1468 } } 1470  $hidho¡_´ÙocÞ_mode_cb ( bt_bdaddr_t * bd_addr , 1471 bthh_¡©us_t ¡©us , 1472 bthh_´ÙocÞ_mode_t mode ) 1474  ¡• *¡• = `g_Ãw0 (step, 1); 1476 ¡• -> ÿÎback = CB_HH_PROTOCOL_MODE ; 1477 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1478 ¡• -> ÿÎback_»suÉ . mode = mode; 1482 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1483 } } 1485  $hidho¡_hid_šfo_cb ( bt_bdaddr_t * bd_addr , bthh_hid_šfo_t hid ) 1487  ¡• *¡• = `g_Ãw0 (step, 1); 1489 ¡• -> ÿÎback = CB_HH_HID_INFO ; 1491 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1492 } } 1494  $hidho¡_g‘_»pÜt_cb ( bt_bdaddr_t * bd_addr , bthh_¡©us_t ¡©us , 1495 ušt8_t * »pÜt ,  size ) 1497  ¡• *¡• = `g_Ãw0 (step, 1); 1499 ¡• -> ÿÎback = CB_HH_GET_REPORT ; 1501 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1502 ¡• -> ÿÎback_»suÉ . »pÜt_size = size ; 1504 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1505 } } 1507  bthh_ÿÎbacks_t gbthh_ÿÎbacks = { 1508 . size = ( bthh_ÿÎbacks ), 1509 . gcÚÃùiÚ_¡©e_cb = hidho¡_cÚÃùiÚ_¡©e_cb , 1510 . ghid_šfo_cb = hidho¡_hid_šfo_cb , 1511 . g´ÙocÞ_mode_cb = hidho¡_´ÙocÞ_mode_cb , 1512 . gidË_time_cb = NULL , 1513 . gg‘_»pÜt_cb = hidho¡_g‘_»pÜt_cb , 1514 . gvœtu®_uÅlug_cb = hidho¡_vœtu®_uÅlug_cb , 1515 . ghªdshake_cb = NULL , 1518  $g©tc_»gi¡”_þ›Á_cb ( ¡©us ,  þ›Á_if , 1519 bt_uuid_t * ­p_uuid ) 1521  ¡• *¡• = `g_Ãw0 (step, 1); 1523 ¡• -> ÿÎback = CB_GATTC_REGISTER_CLIENT ; 1525 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1527 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1528 } } 1530  $g©tc_sÿn_»suÉ_cb ( bt_bdaddr_t * bda ,  rssi , ušt8_t * adv_d©a ) 1532  ¡• *¡• = `g_Ãw0 (step, 1); 1533 bt_´Ý”ty_t * ´Ýs [2]; 1535 ¡• -> ÿÎback = CB_GATTC_SCAN_RESULT ; 1536 ¡• -> ÿÎback_»suÉ . adv_d©a =‡dv_d©¨? TRUE : FALSE ; 1539 ´Ýs [0] = `ü—‹_´Ý”ty ( BT_PROPERTY_BDADDR , bda , (*bda)); 1540 ´Ýs [1] = `ü—‹_´Ý”ty ( BT_PROPERTY_REMOTE_RSSI , & rssi , 1541 ( rssi )); 1543 ¡• -> ÿÎback_»suÉ . num_´Ý”t›s = 2; 1544 ¡• -> ÿÎback_»suÉ . ´Ý”t›s = `»·ck_´Ý”t›s (2, ´Ýs ); 1546 `g_ä“ ( ´Ýs [0]-> v® ); 1547 `g_ä“ ( ´Ýs [0]); 1548 `g_ä“ ( ´Ýs [1]-> v® ); 1549 `g_ä“ ( ´Ýs [1]); 1551 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1552 } } 1554  $g©tc_cÚÃù_cb ( cÚn_id ,  ¡©us ,  þ›Á_if , 1555 bt_bdaddr_t * bda ) 1557  ¡• *¡• = `g_Ãw0 (step, 1); 1558 bt_´Ý”ty_t * ´Ýs [1]; 1560 ¡• -> ÿÎback = CB_GATTC_OPEN ; 1561 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1562 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1563 ¡• -> ÿÎback_»suÉ . g©t_­p_id = þ›Á_if ; 1566 ´Ýs [0] = `ü—‹_´Ý”ty ( BT_PROPERTY_BDADDR , bda , (*bda)); 1568 ¡• -> ÿÎback_»suÉ . num_´Ý”t›s = 1; 1569 ¡• -> ÿÎback_»suÉ . ´Ý”t›s = `»·ck_´Ý”t›s (1, ´Ýs ); 1571 `g_ä“ ( ´Ýs [0]-> v® ); 1572 `g_ä“ ( ´Ýs [0]); 1574 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1575 } } 1577  $g©tc_discÚÃù_cb ( cÚn_id ,  ¡©us ,  þ›Á_if , 1578 bt_bdaddr_t * bda ) 1580  ¡• *¡• = `g_Ãw0 (step, 1); 1581 bt_´Ý”ty_t * ´Ýs [1]; 1583 ¡• -> ÿÎback = CB_GATTC_CLOSE ; 1584 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1585 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1586 ¡• -> ÿÎback_»suÉ . g©t_­p_id = þ›Á_if ; 1589 ´Ýs [0] = `ü—‹_´Ý”ty ( BT_PROPERTY_BDADDR , bda , (*bda)); 1591 ¡• -> ÿÎback_»suÉ . num_´Ý”t›s = 1; 1592 ¡• -> ÿÎback_»suÉ . ´Ý”t›s = `»·ck_´Ý”t›s (1, ´Ýs ); 1594 `g_ä“ ( ´Ýs [0]-> v® ); 1595 `g_ä“ ( ´Ýs [0]); 1597 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1598 } } 1600  $g©tc_li¡’_cb ( ¡©us ,  £rv”_if ) 1602  ¡• *¡• = `g_Ãw0 (step, 1); 1604 ¡• -> ÿÎback = CB_GATTC_LISTEN ; 1605 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1607 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1608 } } 1610  $g©tc_£¬ch_»suÉ_cb ( cÚn_id , btg©t_¤vc_id_t * ¤vc_id ) 1612  ¡• *¡• = `g_Ãw0 (step, 1); 1614 ¡• -> ÿÎback = CB_GATTC_SEARCH_RESULT ; 1615 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1616 ¡• -> ÿÎback_»suÉ . £rviû = `g_memdup ( ¤vc_id , (*srvc_id)); 1618 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1619 } } 1621  $g©tc_£¬ch_com¶‘e_cb ( cÚn_id ,  ¡©us ) 1623  ¡• *¡• = `g_Ãw0 (step, 1); 1625 ¡• -> ÿÎback = CB_GATTC_SEARCH_COMPLETE ; 1626 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1628 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1629 } } 1631  $g©tc_g‘_ch¬aù”i¡ic_cb ( cÚn_id ,  ¡©us , 1632 btg©t_¤vc_id_t * ¤vc_id , btg©t_g©t_id_t * ch¬_id , 1633  ch¬_´Ý ) 1635  ¡• *¡• = `g_Ãw0 (step, 1); 1637 ¡• -> ÿÎback = CB_GATTC_GET_CHARACTERISTIC ; 1638 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1639 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1640 ¡• -> ÿÎback_»suÉ . £rviû = `g_memdup ( ¤vc_id , (*srvc_id)); 1641 ¡• -> ÿÎback_»suÉ . ch¬aù”i¡ic = `g_memdup ( ch¬_id , 1642 (* ch¬_id )); 1643 ¡• -> ÿÎback_»suÉ . ch¬_´Ý = char_prop; 1645 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1646 } } 1648  $g©tc_g‘_desütÜ_cb ( cÚn_id ,  ¡©us , 1649 btg©t_¤vc_id_t * ¤vc_id , btg©t_g©t_id_t * ch¬_id , 1650 btg©t_g©t_id_t * desü_id ) 1652  ¡• *¡• = `g_Ãw0 (step, 1); 1654 ¡• -> ÿÎback = CB_GATTC_GET_DESCRIPTOR ; 1655 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1656 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1657 ¡• -> ÿÎback_»suÉ . £rviû = `g_memdup ( ¤vc_id , (*srvc_id)); 1658 ¡• -> ÿÎback_»suÉ . ch¬aù”i¡ic = `g_memdup ( ch¬_id , 1659 (* ch¬_id )); 1660 ¡• -> ÿÎback_»suÉ . desütÜ = `g_memdup ( desü_id , 1661 (* desü_id )); 1663 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1664 } } 1666  $g©tc_g‘_šþuded_£rviû_cb ( cÚn_id ,  ¡©us , 1667 btg©t_¤vc_id_t * ¤vc_id , btg©t_¤vc_id_ˆ* šþ_¤vc_id ) 1669  ¡• *¡• = `g_Ãw0 (step, 1); 1671 ¡• -> ÿÎback = CB_GATTC_GET_INCLUDED_SERVICE ; 1672 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1673 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1674 ¡• -> ÿÎback_»suÉ . £rviû = `g_memdup ( ¤vc_id , (*srvc_id)); 1675 ¡• -> ÿÎback_»suÉ . šþuded = `g_memdup ( šþ_¤vc_id , 1676 (* ¤vc_id )); 1678 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1679 } } 1681  $g©tc_»ad_ch¬aù”i¡ic_cb ( cÚn_id ,  ¡©us , 1682 btg©t_»ad_·¿ms_t * p_d©a ) 1684  ¡• *¡• = `g_Ãw0 (step, 1); 1686 ¡• -> ÿÎback = CB_GATTC_READ_CHARACTERISTIC ; 1687 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1688 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1689 ¡• -> ÿÎback_»suÉ . »ad_·¿ms = `g_memdup ( p_d©a , (*p_data)); 1691 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1692 } } 1694  $g©tc_»ad_desütÜ_cb ( cÚn_id ,  ¡©us , 1695 btg©t_»ad_·¿ms_t * p_d©a ) 1697  ¡• *¡• = `g_Ãw0 (step, 1); 1699 ¡• -> ÿÎback = CB_GATTC_READ_DESCRIPTOR ; 1700 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1701 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1702 ¡• -> ÿÎback_»suÉ . »ad_·¿ms = `g_memdup ( p_d©a , (*p_data)); 1704 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1705 } } 1707  $g©tc_wr™e_ch¬aù”i¡ic_cb ( cÚn_id ,  ¡©us , 1708 btg©t_wr™e_·¿ms_t * p_d©a ) 1710  ¡• *¡• = `g_Ãw0 (step, 1); 1712 ¡• -> ÿÎback = CB_GATTC_WRITE_CHARACTERISTIC ; 1713 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1714 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1715 ¡• -> ÿÎback_»suÉ . wr™e_·¿ms = `g_memdup ( p_d©a , (*p_data)); 1717 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1718 } } 1720  $g©tc_wr™e_desütÜ_cb ( cÚn_id ,  ¡©us , 1721 btg©t_wr™e_·¿ms_t * p_d©a ) 1723  ¡• *¡• = `g_Ãw0 (step, 1); 1725 ¡• -> ÿÎback = CB_GATTC_WRITE_DESCRIPTOR ; 1726 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1727 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1728 ¡• -> ÿÎback_»suÉ . wr™e_·¿ms = `g_memdup ( p_d©a , (*p_data)); 1730 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1731 } } 1733  $g©tc_»gi¡”_fÜ_nÙifiÿtiÚ_cb ( cÚn_id ,  »gi¡”ed , 1734  ¡©us , 1735 btg©t_¤vc_id_t * ¤vc_id , 1736 btg©t_g©t_id_t * ch¬_id ) 1738  ¡• *¡• = `g_Ãw0 (step, 1); 1740 ¡• -> ÿÎback = CB_GATTC_REGISTER_FOR_NOTIFICATION ; 1741 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1742 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1743 ¡• -> ÿÎback_»suÉ . £rviû = `g_memdup ( ¤vc_id , (*srvc_id)); 1744 ¡• -> ÿÎback_»suÉ . ch¬aù”i¡ic = `g_memdup ( ch¬_id , 1745 (* ch¬_id )); 1746 ¡• -> ÿÎback_»suÉ . nÙifiÿtiÚ_»gi¡”ed = »gi¡”ed ; 1748 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1749 } } 1751  $g©tc_nÙif_cb ( cÚn_id , btg©t_nÙify_·¿ms_t * p_d©a ) 1753  ¡• *¡• = `g_Ãw0 (step, 1); 1755 ¡• -> ÿÎback = CB_GATTC_NOTIFY ; 1756 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1757 ¡• -> ÿÎback_»suÉ . nÙify_·¿ms = `g_memdup ( p_d©a , (*p_data)); 1759 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1760 } } 1762 cÚ¡ btg©t_þ›Á_ÿÎbacks_t gbtg©t_þ›Á_ÿÎbacks = { 1763 . »gi¡”_þ›Á_cb = g©tc_»gi¡”_þ›Á_cb , 1764 . gsÿn_»suÉ_cb = g©tc_sÿn_»suÉ_cb , 1765 . gÝ’_cb = g©tc_cÚÃù_cb , 1766 . gþo£_cb = g©tc_discÚÃù_cb , 1767 . g£¬ch_com¶‘e_cb = g©tc_£¬ch_com¶‘e_cb , 1768 . g£¬ch_»suÉ_cb = g©tc_£¬ch_»suÉ_cb , 1769 . gg‘_ch¬aù”i¡ic_cb = g©tc_g‘_ch¬aù”i¡ic_cb , 1770 . gg‘_desütÜ_cb = g©tc_g‘_desütÜ_cb , 1771 . gg‘_šþuded_£rviû_cb = g©tc_g‘_šþuded_£rviû_cb , 1772 . g»gi¡”_fÜ_nÙifiÿtiÚ_cb = g©tc_»gi¡”_fÜ_nÙifiÿtiÚ_cb , 1773 . gnÙify_cb = g©tc_nÙif_cb , 1774 . g»ad_ch¬aù”i¡ic_cb = g©tc_»ad_ch¬aù”i¡ic_cb , 1775 . gwr™e_ch¬aù”i¡ic_cb = g©tc_wr™e_ch¬aù”i¡ic_cb , 1776 . g»ad_desütÜ_cb = g©tc_»ad_desütÜ_cb , 1777 . gwr™e_desütÜ_cb = g©tc_wr™e_desütÜ_cb , 1778 . gexecu‹_wr™e_cb = NULL , 1779 . g»ad_»mÙe_rssi_cb = NULL , 1780 . gli¡’_cb = g©tc_li¡’_cb 1783  $g©ts_»gi¡”_£rv”_cb ( ¡©us ,  £rv”_if , 1784 bt_uuid_t * ­p_uuid ) 1786  ¡• *¡• = `g_Ãw0 (step, 1); 1788 ¡• -> ÿÎback = CB_GATTS_REGISTER_SERVER ; 1790 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1792 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1793 } } 1795  $g©ts_cÚÃùiÚ_cb ( cÚn_id ,  £rv”_if ,  cÚÃùed , 1796 bt_bdaddr_t * bda ) 1798  ¡• *¡• = `g_Ãw0 (step, 1); 1799 bt_´Ý”ty_t * ´Ýs [1]; 1801 ¡• -> ÿÎback = CB_GATTS_CONNECTION ; 1802 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1803 ¡• -> ÿÎback_»suÉ . g©t_­p_id = £rv”_if ; 1804 ¡• -> ÿÎback_»suÉ . cÚÃùed = connected; 1807 ´Ýs [0] = `ü—‹_´Ý”ty ( BT_PROPERTY_BDADDR , bda , (*bda)); 1809 ¡• -> ÿÎback_»suÉ . num_´Ý”t›s = 1; 1810 ¡• -> ÿÎback_»suÉ . ´Ý”t›s = `»·ck_´Ý”t›s (1, ´Ýs ); 1812 `g_ä“ ( ´Ýs [0]-> v® ); 1813 `g_ä“ ( ´Ýs [0]); 1815 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1816 } } 1818  $g©ts_£rviû_added_cb ( ¡©us ,  £rv”_if , 1819 btg©t_¤vc_id_t * ¤vc_id , 1820  ¤vc_hªdË ) 1822  ¡• *¡• = `g_Ãw0 (step, 1); 1824 ¡• -> ÿÎback = CB_GATTS_SERVICE_ADDED ; 1826 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1827 ¡• -> ÿÎback_»suÉ . g©t_­p_id = £rv”_if ; 1828 ¡• -> ÿÎback_»suÉ . £rviû = `g_memdup ( ¤vc_id , (*srvc_id)); 1829 ¡• -> ÿÎback_»suÉ . ¤vc_hªdË = `g_memdup (&srvc_handle, 1830 ( ¤vc_hªdË )); 1832 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1833 } } 1835  $g©ts_šþuded_£rviû_added_cb ( ¡©us ,  £rv”_if , 1836  ¤vc_hªdË , 1837  šc_¤vc_hªdË ) 1839  ¡• *¡• = `g_Ãw0 (step, 1); 1841 ¡• -> ÿÎback = CB_GATTS_INCLUDED_SERVICE_ADDED ; 1843 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1844 ¡• -> ÿÎback_»suÉ . g©t_­p_id = £rv”_if ; 1845 ¡• -> ÿÎback_»suÉ . ¤vc_hªdË = `g_memdup (&srvc_handle, 1846 ( ¤vc_hªdË )); 1847 ¡• -> ÿÎback_»suÉ . šc_¤vc_hªdË = `g_memdup (&inc_srvc_handle, 1848 ( šc_¤vc_hªdË )); 1850 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1851 } } 1853  $g©ts_ch¬aù”i¡ic_added_cb ( ¡©us ,  £rv”_if , 1854 bt_uuid_t * uuid , 1855  ¤vc_hªdË , 1856  ch¬_hªdË ) 1858  ¡• *¡• = `g_Ãw0 (step, 1); 1860 ¡• -> ÿÎback = CB_GATTS_CHARACTERISTIC_ADDED ; 1862 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1863 ¡• -> ÿÎback_»suÉ . g©t_­p_id = £rv”_if ; 1864 ¡• -> ÿÎback_»suÉ . ¤vc_hªdË = `g_memdup (&srvc_handle, 1865 ( ¤vc_hªdË )); 1866 ¡• -> ÿÎback_»suÉ . uuid = `g_memdup (uuid, (*uuid)); 1867 ¡• -> ÿÎback_»suÉ . ch¬_hªdË = `g_memdup (&char_handle, 1868 ( ch¬_hªdË )); 1870 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1871 } } 1873  $g©ts_desütÜ_added_cb ( ¡©us ,  £rv”_if , 1874 bt_uuid_t * uuid , 1875  ¤vc_hªdË , 1876  desc_hªdË ) 1878  ¡• *¡• = `g_Ãw0 (step, 1); 1880 ¡• -> ÿÎback = CB_GATTS_DESCRIPTOR_ADDED ; 1882 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1883 ¡• -> ÿÎback_»suÉ . g©t_­p_id = £rv”_if ; 1884 ¡• -> ÿÎback_»suÉ . ¤vc_hªdË = `g_memdup (&srvc_handle, 1885 ( ¤vc_hªdË )); 1886 ¡• -> ÿÎback_»suÉ . uuid = `g_memdup (uuid, (*uuid)); 1887 ¡• -> ÿÎback_»suÉ . desc_hªdË = `g_memdup (&desc_handle, 1888 ( desc_hªdË )); 1890 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1891 } } 1893  $g©ts_£rviû_¡¬‹d_cb ( ¡©us ,  £rv”_if ,  ¤vc_hªdË ) 1895  ¡• *¡• = `g_Ãw0 (step, 1); 1897 ¡• -> ÿÎback = CB_GATTS_SERVICE_STARTED ; 1899 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1900 ¡• -> ÿÎback_»suÉ . g©t_­p_id = £rv”_if ; 1901 ¡• -> ÿÎback_»suÉ . ¤vc_hªdË = `g_memdup (&srvc_handle, 1902 ( ¤vc_hªdË )); 1904 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1905 } } 1907  $g©ts_£rviû_¡Ý³d_cb ( ¡©us ,  £rv”_if ,  ¤vc_hªdË ) 1909  ¡• *¡• = `g_Ãw0 (step, 1); 1911 ¡• -> ÿÎback = CB_GATTS_SERVICE_STOPPED ; 1913 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1914 ¡• -> ÿÎback_»suÉ . g©t_­p_id = £rv”_if ; 1915 ¡• -> ÿÎback_»suÉ . ¤vc_hªdË = `g_memdup (&srvc_handle, 1916 ( ¤vc_hªdË )); 1918 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1919 } } 1921  $g©ts_£rviû_d–‘ed_cb ( ¡©us ,  £rv”_if ,  ¤vc_hªdË ) 1923  ¡• *¡• = `g_Ãw0 (step, 1); 1925 ¡• -> ÿÎback = CB_GATTS_SERVICE_DELETED ; 1927 ¡• -> ÿÎback_»suÉ . ¡©us = status; 1928 ¡• -> ÿÎback_»suÉ . g©t_­p_id = £rv”_if ; 1929 ¡• -> ÿÎback_»suÉ . ¤vc_hªdË = `g_memdup (&srvc_handle, 1930 ( ¤vc_hªdË )); 1932 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1933 } } 1935  $g©ts_»que¡_»ad_cb ( cÚn_id ,  Œªs_id , bt_bdaddr_t * bda , 1936  ©Œ_hªdË ,  off£t , 1937 boÞ is_lÚg ) 1939  ¡• *¡• = `g_Ãw0 (step, 1); 1940 bt_´Ý”ty_t * ´Ýs [1]; 1942 ¡• -> ÿÎback = CB_GATTS_REQUEST_READ ; 1944 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1945 ¡• -> ÿÎback_»suÉ . Œªs_id =rans_id; 1946 ¡• -> ÿÎback_»suÉ . ©Œ_hªdË = `g_memdup (&attr_handle, 1947 ( ©Œ_hªdË )); 1948 ¡• -> ÿÎback_»suÉ . off£t = offset; 1949 ¡• -> ÿÎback_»suÉ . is_lÚg = is_long; 1952 ´Ýs [0] = `ü—‹_´Ý”ty ( BT_PROPERTY_BDADDR , bda , (*bda)); 1954 ¡• -> ÿÎback_»suÉ . num_´Ý”t›s = 1; 1955 ¡• -> ÿÎback_»suÉ . ´Ý”t›s = `»·ck_´Ý”t›s (1, ´Ýs ); 1957 `g_ä“ ( ´Ýs [0]-> v® ); 1958 `g_ä“ ( ´Ýs [0]); 1960 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1961 } } 1963  $g©ts_»que¡_wr™e_cb ( cÚn_id ,  Œªs_id , bt_bdaddr_t * bda , 1964  ©Œ_hªdË ,  off£t , 1965  Ëngth , boÞ Ãed_r¥ , 1966 boÞ is_´• , ušt8_t * v®ue ) 1968  ¡• *¡• = `g_Ãw0 (step, 1); 1969 bt_´Ý”ty_t * ´Ýs [1]; 1971 ¡• -> ÿÎback = CB_GATTS_REQUEST_WRITE ; 1973 ¡• -> ÿÎback_»suÉ . cÚn_id = conn_id; 1974 ¡• -> ÿÎback_»suÉ . Œªs_id =rans_id; 1975 ¡• -> ÿÎback_»suÉ . ©Œ_hªdË = `g_memdup (&attr_handle, 1976 ( ©Œ_hªdË )); 1977 ¡• -> ÿÎback_»suÉ . off£t = offset; 1978 ¡• -> ÿÎback_»suÉ . Ëngth =†ength; 1979 ¡• -> ÿÎback_»suÉ . Ãed_r¥ =‚eed_rsp; 1980 ¡• -> ÿÎback_»suÉ . is_´• = is_prep; 1981 ¡• -> ÿÎback_»suÉ . v®ue = `g_memdup (&v®ue, Ëngth ); 1984 ´Ýs [0] = `ü—‹_´Ý”ty ( BT_PROPERTY_BDADDR , bda , (*bda)); 1986 ¡• -> ÿÎback_»suÉ . num_´Ý”t›s = 1; 1987 ¡• -> ÿÎback_»suÉ . ´Ý”t›s = `»·ck_´Ý”t›s (1, ´Ýs ); 1989 `g_ä“ ( ´Ýs [0]-> v® ); 1990 `g_ä“ ( ´Ýs [0]); 1992 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 1993 } } 1995 cÚ¡ btg©t_£rv”_ÿÎbacks_t gbtg©t_£rv”_ÿÎbacks = { 1996 . »gi¡”_£rv”_cb = g©ts_»gi¡”_£rv”_cb , 1997 . gcÚÃùiÚ_cb = g©ts_cÚÃùiÚ_cb , 1998 . g£rviû_added_cb = g©ts_£rviû_added_cb , 1999 . gšþuded_£rviû_added_cb = g©ts_šþuded_£rviû_added_cb , 2000 . gch¬aù”i¡ic_added_cb = g©ts_ch¬aù”i¡ic_added_cb , 2001 . gdesütÜ_added_cb = g©ts_desütÜ_added_cb , 2002 . g£rviû_¡¬‹d_cb = g©ts_£rviû_¡¬‹d_cb , 2003 . g£rviû_¡Ý³d_cb = g©ts_£rviû_¡Ý³d_cb , 2004 . g£rviû_d–‘ed_cb = g©ts_£rviû_d–‘ed_cb , 2005 . g»que¡_»ad_cb = g©ts_»que¡_»ad_cb , 2006 . g»que¡_wr™e_cb = g©ts_»que¡_wr™e_cb , 2007 . g»que¡_exec_wr™e_cb = NULL , 2008 . g»¥Ú£_cÚfœm©iÚ_cb = NULL 2011 cÚ¡ btg©t_ÿÎbacks_t gbtg©t_ÿÎbacks = { 2012 . size = ( btg©t_ÿÎbacks ), 2013 . gþ›Á = & btg©t_þ›Á_ÿÎbacks , 2014 . g£rv” = & btg©t_£rv”_ÿÎbacks 2017  $·n_cÚŒÞ_¡©e_cb ( bª_cÚŒÞ_¡©e_t ¡©e ,  loÿl_rÞe , 2018 bt_¡©us_t ”rÜ , cÚ¡ * iâame ) 2020  ¡• *¡• = `g_Ãw0 (step, 1); 2022 ¡• -> ÿÎback = CB_PAN_CONTROL_STATE ; 2023 ¡• -> ÿÎback_»suÉ . ¡©e = ”rÜ ; 2024 ¡• -> ÿÎback_»suÉ . ù¾_¡©e = ¡©e ; 2025 ¡• -> ÿÎback_»suÉ . loÿl_rÞe =†ocal_role; 2027 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 2028 } } 2030  $·n_cÚÃùiÚ_¡©e_cb ( bª_cÚÃùiÚ_¡©e_t ¡©e , 2031 bt_¡©us_t ”rÜ , 2032 cÚ¡ bt_bdaddr_t * bd_addr , 2033  loÿl_rÞe ,  »mÙe_rÞe ) 2035  ¡• *¡• = `g_Ãw0 (step, 1); 2037 ¡• -> ÿÎback = CB_PAN_CONNECTION_STATE ; 2038 ¡• -> ÿÎback_»suÉ . ¡©e = ”rÜ ; 2039 ¡• -> ÿÎback_»suÉ . cÚn_¡©e = ¡©e ; 2040 ¡• -> ÿÎback_»suÉ . loÿl_rÞe =†ocal_role; 2041 ¡• -> ÿÎback_»suÉ . »mÙe_rÞe =„emote_role; 2043 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 2044 } } 2046  bª_ÿÎbacks_t gbª_ÿÎbacks = { 2047 . size = ( bª_ÿÎbacks ), 2048 . gcÚŒÞ_¡©e_cb = ·n_cÚŒÞ_¡©e_cb , 2049 . gcÚÃùiÚ_¡©e_cb = ·n_cÚÃùiÚ_¡©e_cb , 2052  $hdp_­p_»g_¡©e_cb ( ­p_id , bthl_­p_»g_¡©e_t ¡©e ) 2054  ¡• *¡• = `g_Ãw0 (step, 1); 2056 ¡• -> ÿÎback = CB_HDP_APP_REG_STATE ; 2057 ¡• -> ÿÎback_»suÉ . ­p_id =‡pp_id; 2058 ¡• -> ÿÎback_»suÉ . ­p_¡©e = ¡©e ; 2060 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 2061 } } 2063  $hdp_chªÃl_¡©e_cb ( ­p_id , bt_bdaddr_t * bd_addr , 2064  md•_cfg_šdex ,  chªÃl_id , 2065 bthl_chªÃl_¡©e_t ¡©e ,  fd ) 2067  ¡• *¡• = `g_Ãw0 (step, 1); 2069 ¡• -> ÿÎback = CB_HDP_CHANNEL_STATE ; 2070 ¡• -> ÿÎback_»suÉ . ­p_id =‡pp_id; 2071 ¡• -> ÿÎback_»suÉ . chªÃl_id = channel_id; 2072 ¡• -> ÿÎback_»suÉ . md•_cfg_šdex = mdep_cfg_index; 2073 ¡• -> ÿÎback_»suÉ . chªÃl_¡©e = ¡©e ; 2075 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 2076 } } 2078  bthl_ÿÎbacks_t gbthl_ÿÎbacks = { 2079 . size = ( bthl_ÿÎbacks ), 2080 . g­p_»g_¡©e_cb = hdp_­p_»g_¡©e_cb , 2081 . gchªÃl_¡©e_cb = hdp_chªÃl_¡©e_cb , 2084  $a2dp_cÚÃùiÚ_¡©e_cb ( bv_cÚÃùiÚ_¡©e_t ¡©e , 2085 bt_bdaddr_t * bd_addr ) 2087  ¡• *¡• = `g_Ãw0 (step, 1); 2089 ¡• -> ÿÎback = CB_A2DP_CONN_STATE ; 2090 ¡• -> ÿÎback_»suÉ . av_cÚn_¡©e = ¡©e ; 2092 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 2093 } } 2095  $a2dp_audio_¡©e_cb ( bv_audio_¡©e_t ¡©e , bt_bdaddr_t * bd_addr ) 2097  ¡• *¡• = `g_Ãw0 (step, 1); 2099 ¡• -> ÿÎback = CB_A2DP_AUDIO_STATE ; 2100 ¡• -> ÿÎback_»suÉ . av_audio_¡©e = ¡©e ; 2102 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 2103 } } 2105  bv_ÿÎbacks_t gb2dp_ÿÎbacks = { 2106 . size = ( b2dp_ÿÎbacks ), 2107 . gcÚÃùiÚ_¡©e_cb = a2dp_cÚÃùiÚ_¡©e_cb , 2108 . gaudio_¡©e_cb = a2dp_audio_¡©e_cb , 2111  $avrý_g‘_¶ay_¡©us_cb () 2113  ¡• *¡• = `g_Ãw0 (step, 1); 2115 ¡• -> ÿÎback = CB_AVRCP_PLAY_STATUS_REQ ; 2116 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 2117 } } 2119  $avrý_»gi¡”_nÙifiÿtiÚ_cb ( bŒc_ev’t_id_t ev’t_id , 2120 ušt32_t ·¿m ) 2122  ¡• *¡• = `g_Ãw0 (step, 1); 2124 ¡• -> ÿÎback = CB_AVRCP_REG_NOTIF_REQ ; 2125 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 2126 } } 2128  $avrý_g‘_–em’t_©Œ_cb ( ušt8_t num_©Œ , 2129 bŒc_medŸ_©Œ_t * p_©Œs ) 2131  ¡• *¡• = `g_Ãw0 (step, 1); 2133 ¡• -> ÿÎback = CB_AVRCP_GET_ATTR_REQ ; 2134 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 2135 } } 2137  bŒc_ÿÎbacks_t gbvrý_ÿÎbacks = { 2138 . size = ( bvrý_ÿÎbacks ), 2139 . gg‘_¶ay_¡©us_cb = avrý_g‘_¶ay_¡©us_cb , 2140 . g»gi¡”_nÙifiÿtiÚ_cb = avrý_»gi¡”_nÙifiÿtiÚ_cb , 2141 . gg‘_–em’t_©Œ_cb = avrý_g‘_–em’t_©Œ_cb , 2144  btmû_mas_š¡ªû_t * $cÝy_mas_š¡ªûs ( num_š¡ªûs , 2145 btmû_mas_š¡ªû_t * š¡ªûs ) 2147  i ; 2148 btmû_mas_š¡ªû_t * š¡ ; 2150 š¡ = `g_Ãw0 ( btmû_mas_š¡ªû_t , num_š¡ªûs ); 2152  i = 0; i < num_š¡ªûs ; i++) { 2153 š¡ [ i ]. id = š¡ªûs [i].id; 2154 š¡ [ i ]. sú = š¡ªûs [i].scn; 2155 š¡ [ i ]. msg_ty³s = š¡ªûs [i].msg_types; 2156 š¡ [ i ]. p_Çme = `g_memdup ( š¡ªûs [i].p_name, 2157 `¡¾’ ( š¡ªûs [ i ]. p_Çme )); 2160  š¡ ; 2161 } } 2163  $m­_þ›Á_g‘_»mÙe_mas_š¡ªûs_cb ( bt_¡©us_t ¡©us , 2164 bt_bdaddr_t * bd_addr , 2165  num_š¡ªûs , 2166 btmû_mas_š¡ªû_t 2167 * š¡ªûs ) 2169  ¡• *¡• = `g_Ãw0 (step, 1); 2171 ¡• -> ÿÎback_»suÉ . ¡©us = status; 2172 ¡• -> ÿÎback_»suÉ . num_mas_š¡ªûs = num_š¡ªûs ; 2173 ¡• -> ÿÎback_»suÉ . mas_š¡ªûs = `cÝy_mas_š¡ªûs ( num_š¡ªûs , 2174 š¡ªûs ); 2176 ¡• -> ÿÎback = CB_MAP_CLIENT_REMOTE_MAS_INSTANCES ; 2178 `scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• ); 2179 } } 2181  btmû_ÿÎbacks_t gbtm­_þ›Á_ÿÎbacks = { 2182 . size = ( btm­_þ›Á_ÿÎbacks ), 2183 . g»mÙe_mas_š¡ªûs_cb = m­_þ›Á_g‘_»mÙe_mas_š¡ªûs_cb , 2186  boÞ $£tup_ba£ ( ‹¡_d©a * d©a ) 2188 cÚ¡ hw_moduË_t * moduË ; 2189 hw_deviû_t * deviû ; 2190  sigÇl_fd [2]; 2191  buf [1024]; 2192 pid_t pid ; 2193  Ën ; 2194  ”r ; 2196 ià( `pe ( sigÇl_fd )) 2197  çl£ ; 2199 pid = `fÜk (); 2201 ià( pid < 0) { 2202 `þo£ ( sigÇl_fd [0]); 2203 `þo£ ( sigÇl_fd [1]); 2204  çl£ ; 2207 ià( pid == 0) { 2208 ià(! `‹¡”_u£_debug ()) 2209 `fþo£ ( ¡d”r ); 2211 `þo£ ( sigÇl_fd [0]); 2212 `emuÏtÜ ( sigÇl_fd [1], d©a -> mgmt_šdex ); 2213 `ex™ (0); 2216 `þo£ ( sigÇl_fd [1]); 2217 d©a -> blu‘oÙhd_pid = pid ; 2219 Ën = `»ad ( sigÇl_fd [0], buf , (buf)); 2220 ià( Ën <ð0 || `¡rcmp ( buf , EMULATOR_SIGNAL )) { 2221 `þo£ ( sigÇl_fd [0]); 2222  çl£ ; 2225 `þo£ ( sigÇl_fd [0]); 2227 ”r = `hw_g‘_moduË_by_þass ( AUDIO_HARDWARE_MODULE_ID , 2228 AUDIO_HARDWARE_MODULE_ID_A2DP , & moduË ); 2229 ià( ”r ) 2230  çl£ ; 2232 ”r = `audio_hw_deviû_Ý’ ( moduË , & d©a -> audio ); 2233 ià( ”r ) 2234  çl£ ; 2236 ”r = `hw_g‘_moduË ( BT_HARDWARE_MODULE_ID , & moduË ); 2237 ià( ”r ) 2238  çl£ ; 2240 ”r = moduË -> m‘hods -> `Ý’ (moduË, BT_HARDWARE_MODULE_ID , & deviû ); 2241 ià( ”r ) 2242  çl£ ; 2244 d©a -> deviû = device; 2246 d©a -> if_blu‘oÙh = (( blu‘oÙh_deviû_t *) 2247 deviû )-> `g‘_blu‘oÙh_š‹rçû (); 2248 ià(! d©a -> if_blu‘oÙh ) 2249  çl£ ; 2251 ià(!( d©a -> ¡•s = `queue_Ãw ())) 2252  çl£ ; 2254 d©a -> pdus = `queue_Ãw (); 2255 ià(! d©a -> pdus ) { 2256 `queue_de¡roy ( d©a -> ¡•s , NULL ); 2257  çl£ ; 2260  Œue ; 2261 } } 2263  $£tup (cÚ¡ * ‹¡_d©a ) 2265  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2266 bt_¡©us_t ¡©us ; 2268 ià(! `£tup_ba£ ( d©a )) { 2269 `‹¡”_£tup_çžed (); 2273 ¡©us = d©a -> if_blu‘oÙh -> `š™ (& bt_ÿÎbacks ); 2274 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2275 d©a -> if_blu‘oÙh = NULL ; 2276 `‹¡”_£tup_çžed (); 2280 `‹¡”_£tup_com¶‘e (); 2281 } } 2283  $£tup_sock‘ (cÚ¡ * ‹¡_d©a ) 2285  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2286 bt_¡©us_t ¡©us ; 2287 cÚ¡ * sock ; 2289 ià(! `£tup_ba£ ( d©a )) { 2290 `‹¡”_£tup_çžed (); 2294 ¡©us = d©a -> if_blu‘oÙh -> `š™ (& bt_ÿÎbacks ); 2295 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2296 d©a -> if_blu‘oÙh = NULL ; 2297 `‹¡”_£tup_çžed (); 2301 sock = d©a -> if_blu‘oÙh -> `g‘_´ofže_š‹rçû ( BT_PROFILE_SOCKETS_ID ); 2302 ià(! sock ) { 2303 `‹¡”_£tup_çžed (); 2307 d©a -> if_sock = sock ; 2309 `‹¡”_£tup_com¶‘e (); 2310 } } 2312  $£tup_hidho¡ (cÚ¡ * ‹¡_d©a ) 2314  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2315 bt_¡©us_t ¡©us ; 2316 cÚ¡ * hid ; 2318 ià(! `£tup_ba£ ( d©a )) { 2319 `‹¡”_£tup_çžed (); 2323 ¡©us = d©a -> if_blu‘oÙh -> `š™ (& bt_ÿÎbacks ); 2324 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2325 d©a -> if_blu‘oÙh = NULL ; 2326 `‹¡”_£tup_çžed (); 2330 hid = d©a -> if_blu‘oÙh -> `g‘_´ofže_š‹rçû ( BT_PROFILE_HIDHOST_ID ); 2331 ià(! hid ) { 2332 `‹¡”_£tup_çžed (); 2336 d©a -> if_hid = hid ; 2338 ¡©us = d©a -> if_hid -> `š™ (& bthh_ÿÎbacks ); 2339 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2340 d©a -> if_hid = NULL ; 2341 `‹¡”_£tup_çžed (); 2345 `‹¡”_£tup_com¶‘e (); 2346 } } 2348  $£tup_·n (cÚ¡ * ‹¡_d©a ) 2350  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2351 bt_¡©us_t ¡©us ; 2352 cÚ¡ * ·n ; 2354 ià(! `£tup_ba£ ( d©a )) { 2355 `‹¡”_£tup_çžed (); 2359 ¡©us = d©a -> if_blu‘oÙh -> `š™ (& bt_ÿÎbacks ); 2360 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2361 d©a -> if_blu‘oÙh = NULL ; 2362 `‹¡”_£tup_çžed (); 2366 ·n = d©a -> if_blu‘oÙh -> `g‘_´ofže_š‹rçû ( BT_PROFILE_PAN_ID ); 2367 ià(! ·n ) { 2368 `‹¡”_£tup_çžed (); 2372 d©a -> if_·n = ·n ; 2374 ¡©us = d©a -> if_·n -> `š™ (& bª_ÿÎbacks ); 2375 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2376 d©a -> if_·n = NULL ; 2377 `‹¡”_£tup_çžed (); 2381 `‹¡”_£tup_com¶‘e (); 2382 } } 2384  $£tup_hdp (cÚ¡ * ‹¡_d©a ) 2386  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2387 bt_¡©us_t ¡©us ; 2388 cÚ¡ * hdp ; 2390 ià(! `£tup_ba£ ( d©a )) { 2391 `‹¡”_£tup_çžed (); 2395 ¡©us = d©a -> if_blu‘oÙh -> `š™ (& bt_ÿÎbacks ); 2396 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2397 d©a -> if_blu‘oÙh = NULL ; 2398 `‹¡”_£tup_çžed (); 2402 hdp = d©a -> if_blu‘oÙh -> `g‘_´ofže_š‹rçû ( BT_PROFILE_HEALTH_ID ); 2403 ià(! hdp ) { 2404 `‹¡”_£tup_çžed (); 2408 d©a -> if_hdp = hdp ; 2410 ¡©us = d©a -> if_hdp -> `š™ (& bthl_ÿÎbacks ); 2411 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2412 d©a -> if_hdp = NULL ; 2413 `‹¡”_£tup_çžed (); 2417 `‹¡”_£tup_com¶‘e (); 2418 } } 2420  $£tup_a2dp (cÚ¡ * ‹¡_d©a ) 2422  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2423 cÚ¡ bt_š‹rçû_t * if_bt ; 2424 bt_¡©us_t ¡©us ; 2425 cÚ¡ * a2dp ; 2427 ià(! `£tup_ba£ ( d©a )) { 2428 `‹¡”_£tup_çžed (); 2432 if_bt = d©a -> if_blu‘oÙh ; 2434 ¡©us = if_bt -> `š™ (& bt_ÿÎbacks ); 2435 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2436 d©a -> if_blu‘oÙh = NULL ; 2437 `‹¡”_£tup_çžed (); 2441 a2dp = if_bt -> `g‘_´ofže_š‹rçû ( BT_PROFILE_ADVANCED_AUDIO_ID ); 2442 ià(! a2dp ) { 2443 `‹¡”_£tup_çžed (); 2447 d©a -> if_a2dp = a2dp ; 2449 ¡©us = d©a -> if_a2dp -> `š™ (& b2dp_ÿÎbacks ); 2450 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2451 d©a -> if_a2dp = NULL ; 2452 `‹¡”_£tup_çžed (); 2456 `‹¡”_£tup_com¶‘e (); 2457 } } 2459  $£tup_avrý (cÚ¡ * ‹¡_d©a ) 2461  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2462 cÚ¡ bt_š‹rçû_t * if_bt ; 2463 bt_¡©us_t ¡©us ; 2464 cÚ¡ * a2dp , * avrý ; 2466 ià(! `£tup_ba£ ( d©a )) { 2467 `‹¡”_£tup_çžed (); 2471 if_bt = d©a -> if_blu‘oÙh ; 2473 ¡©us = if_bt -> `š™ (& bt_ÿÎbacks ); 2474 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2475 d©a -> if_blu‘oÙh = NULL ; 2476 `‹¡”_£tup_çžed (); 2480 a2dp = if_bt -> `g‘_´ofže_š‹rçû ( BT_PROFILE_ADVANCED_AUDIO_ID ); 2481 ià(! a2dp ) { 2482 `‹¡”_£tup_çžed (); 2486 d©a -> if_a2dp = a2dp ; 2488 ¡©us = d©a -> if_a2dp -> `š™ (& b2dp_ÿÎbacks ); 2489 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2490 d©a -> if_a2dp = NULL ; 2491 `‹¡”_£tup_çžed (); 2495 avrý = if_bt -> `g‘_´ofže_š‹rçû ( BT_PROFILE_AV_RC_ID ); 2496 ià(! avrý ) { 2497 `‹¡”_£tup_çžed (); 2501 d©a -> if_avrý = avrý ; 2503 ¡©us = d©a -> if_avrý -> `š™ (& bvrý_ÿÎbacks ); 2504 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2505 d©a -> if_avrý = NULL ; 2506 `‹¡”_£tup_çžed (); 2510 `‹¡”_£tup_com¶‘e (); 2511 } } 2513  $£tup_g©t (cÚ¡ * ‹¡_d©a ) 2515  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2516 bt_¡©us_t ¡©us ; 2517 cÚ¡ * g©t ; 2519 ià(! `£tup_ba£ ( d©a )) { 2520 `‹¡”_£tup_çžed (); 2524 ¡©us = d©a -> if_blu‘oÙh -> `š™ (& bt_ÿÎbacks ); 2525 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2526 d©a -> if_blu‘oÙh = NULL ; 2527 `‹¡”_£tup_çžed (); 2531 g©t = d©a -> if_blu‘oÙh -> `g‘_´ofže_š‹rçû ( BT_PROFILE_GATT_ID ); 2532 ià(! g©t ) { 2533 `‹¡”_£tup_çžed (); 2537 d©a -> if_g©t = g©t ; 2539 ¡©us = d©a -> if_g©t -> `š™ (& btg©t_ÿÎbacks ); 2540 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2541 d©a -> if_g©t = NULL ; 2543 `‹¡”_£tup_çžed (); 2547 `‹¡”_£tup_com¶‘e (); 2548 } } 2550  $£tup_m­_þ›Á (cÚ¡ * ‹¡_d©a ) 2552  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2553 bt_¡©us_t ¡©us ; 2554 cÚ¡ * m­_þ›Á ; 2556 ià(! `£tup_ba£ ( d©a )) { 2557 `‹¡”_£tup_çžed (); 2561 ¡©us = d©a -> if_blu‘oÙh -> `š™ (& bt_ÿÎbacks ); 2562 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2563 d©a -> if_blu‘oÙh = NULL ; 2564 `‹¡”_£tup_çžed (); 2568 m­_þ›Á = d©a -> if_blu‘oÙh -> `g‘_´ofže_š‹rçû ( 2569 BT_PROFILE_MAP_CLIENT_ID ); 2570 ià(! m­_þ›Á ) { 2571 `‹¡”_£tup_çžed (); 2575 d©a -> if_m­_þ›Á = m­_þ›Á ; 2577 ¡©us = d©a -> if_m­_þ›Á -> `š™ (& btm­_þ›Á_ÿÎbacks ); 2578 ià( ¡©us !ð BT_STATUS_SUCCESS ) { 2579 d©a -> if_m­_þ›Á = NULL ; 2581 `‹¡”_£tup_çžed (); 2585 `‹¡”_£tup_com¶‘e (); 2586 } } 2588  $‹¬down (cÚ¡ * ‹¡_d©a ) 2590  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2592 `queue_de¡roy ( d©a -> ¡•s , NULL ); 2593 d©a -> ¡•s = NULL ; 2595 `queue_de¡roy ( d©a -> pdus , NULL ); 2596 d©a -> pdus = NULL ; 2599 d©a -> if_m­_þ›Á = NULL ; 2601 ià( d©a -> if_g©t ) { 2602 d©a -> if_g©t -> `þ—nup (); 2603 d©a -> if_g©t = NULL ; 2606 ià( d©a -> if_hid ) { 2607 d©a -> if_hid -> `þ—nup (); 2608 d©a -> if_hid = NULL ; 2611 ià( d©a -> if_·n ) { 2612 d©a -> if_·n -> `þ—nup (); 2613 d©a -> if_·n = NULL ; 2616 ià( d©a -> if_hdp ) { 2617 d©a -> if_hdp -> `þ—nup (); 2618 d©a -> if_hdp = NULL ; 2621 ià( d©a -> if_¡»am ) { 2622 d©a -> audio -> `þo£_ouut_¡»am (d©a->audio, d©a-> if_¡»am ); 2623 d©a -> if_¡»am = NULL ; 2626 ià( d©a -> if_a2dp ) { 2627 d©a -> if_a2dp -> `þ—nup (); 2628 d©a -> if_a2dp = NULL ; 2631 ià( d©a -> if_avrý ) { 2632 d©a -> if_avrý -> `þ—nup (); 2633 d©a -> if_avrý = NULL ; 2636 ià( d©a -> if_blu‘oÙh ) { 2637 d©a -> if_blu‘oÙh -> `þ—nup (); 2638 d©a -> if_blu‘oÙh = NULL ; 2641 d©a -> deviû -> `þo£ (data->device); 2642 `audio_hw_deviû_þo£ ( d©a -> audio ); 2648 bt_ÿÎbacks . s¥_»que¡_cb = ssp_request_cb; 2650 ià(! d©a -> blu‘oÙhd_pid ) 2651 `‹¡”_‹¬down_com¶‘e (); 2652 } } 2654  $emu_cÚÃùabË_com¶‘e ( ušt16_t Ýcode , ušt8_t ¡©us , 2655 cÚ¡ * ·¿m , ušt8_t Ën , 2656 * u£r_d©a ) 2658  ¡• *step; 2659  ‹¡_d©a * d©a = u£r_d©a ; 2661  Ýcode ) { 2662  BT_HCI_CMD_WRITE_SCAN_ENABLE : 2664  BT_HCI_CMD_LE_SET_ADV_ENABLE : 2669 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_BREDRLE ) 2677 ¡• = `g_Ãw0 (step, 1); 2679 ià( ¡©us ) { 2680 `‹¡”_w¬n ("Emulated„emote setup failed."); 2681 ¡• -> aùiÚ_¡©us = BT_STATUS_FAIL ; 2683 `‹¡”_debug ("Emulated„emote setup done."); 2684 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 2687 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 2688 } } 2690  $emu_£tup_pow”ed_»mÙe_aùiÚ () 2692  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2693  btho¡ *bthost; 2695 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 2696 `btho¡_£t_cmd_com¶‘e_cb ( btho¡ , emu_cÚÃùabË_com¶‘e , d©a ); 2698 ià(( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_LE ) || 2699 ( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_BREDRLE )) 2700 `btho¡_£t_adv_’abË ( btho¡ , 0x01, 0x02); 2702 ià( d©a -> hc›mu_ty³ !ð HCIEMU_TYPE_LE ) 2703 `btho¡_wr™e_sÿn_’abË ( btho¡ , 0x03); 2704 } } 2706  $emu_£t_pš_code_aùiÚ () 2708  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2709  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 2710  bt_aùiÚ_d©a * aùiÚ_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 2711  btho¡ *bthost; 2712  ¡• *¡• = `g_Ãw0 (step, 1); 2714 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 2716 `btho¡_£t_pš_code ( btho¡ , aùiÚ_d©a -> pš ->pin, 2717 aùiÚ_d©a -> pš_Ën ); 2719 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 2721 `‹¡”_´št ("Settingƒmu…in done."); 2723 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 2724 } } 2726  $emu_£t_s¥_mode_aùiÚ () 2728  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2729  btho¡ *bthost; 2730  ¡• *¡• = `g_Ãw0 (step, 1); 2732 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 2734 `btho¡_wr™e_s¥_mode ( btho¡ , 0x01); 2736 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 2738 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 2739 } } 2741  $emu_£t_cÚÃù_cb_aùiÚ () 2743  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2744  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 2745  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 2746 * cb = cu¼’t_d©a_¡• -> £t_d©a ; 2747  ¡• *¡• = `g_Ãw0 (step, 1); 2749 `btho¡_£t_cÚÃù_cb ( btho¡ , cb , d©a ); 2751 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 2753 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 2754 } } 2756  $emu_»mÙe_cÚÃù_hci_aùiÚ () 2758  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2759  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 2760  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 2761  bt_aùiÚ_d©a * aùiÚ_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 2762  ¡• *¡• = `g_Ãw0 (step, 1); 2763 cÚ¡ ušt8_t * ma¡”_addr ; 2765 ma¡”_addr = `hc›mu_g‘_ma¡”_bdaddr ( d©a -> hc›mu ); 2767 `‹¡”_´št ("Tryingo connect hci"); 2769 ià( aùiÚ_d©a ) 2770 `btho¡_hci_cÚÃù ( btho¡ , ma¡”_addr , 2771 aùiÚ_d©a -> b—»r_ty³ ); 2773 `btho¡_hci_cÚÃù ( btho¡ , ma¡”_addr , BDADDR_BREDR ); 2775 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 2777 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 2778 } } 2780  $emu_»mÙe_discÚÃù_hci_aùiÚ () 2782  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2783  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 2784  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 2785 ušt16_t * hªdË = cu¼’t_d©a_¡• -> £t_d©a ; 2786  ¡• *¡• = `g_Ãw0 (step, 1); 2788 ià( hªdË ) { 2789 `btho¡_hci_discÚÃù ( btho¡ , * hªdË , 0x13); 2790 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 2792 ¡• -> aùiÚ_¡©us = BT_STATUS_FAIL ; 2795 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 2796 } } 2798  $emu_£t_io_ÿp () 2800  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2801  btho¡ *bthost; 2802  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 2803  bt_aùiÚ_d©a * aùiÚ_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 2804  ¡• *¡• = `g_Ãw0 (step, 1); 2806 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 2808 ià( aùiÚ_d©a ) 2809 `btho¡_£t_io_ÿ·bž™y ( btho¡ , aùiÚ_d©a -> io_ÿp ); 2811 `btho¡_£t_io_ÿ·bž™y ( btho¡ , 0x01); 2813 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 2815 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 2816 } } 2818  $emu_add_l2ÿp_£rv”_aùiÚ () 2820  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2821  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 2822  emu_£t_l2ÿp_d©a * l2ÿp_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 2823  btho¡ *bthost; 2824  ¡• *¡• = `g_Ãw0 (step, 1); 2826 ià(! l2ÿp_d©a ) { 2827 `‹¡”_w¬n ("Invalid†2cap_data…arams"); 2828 ¡• -> aùiÚ_¡©us = BT_STATUS_FAIL ; 2829  dÚe ; 2832 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 2834 `btho¡_add_l2ÿp_£rv” ( btho¡ , l2ÿp_d©a -> psm ,†2ÿp_d©a-> func , 2835 l2ÿp_d©a -> u£r_d©a ); 2837 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 2839 dÚe : 2840 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 2841 } } 2843  $´št_d©a (cÚ¡ * ¡r , * u£r_d©a ) 2845 `‹¡”_debug ("‹¡”: %s", ¡r ); 2846 } } 2848  $emu_g’”ic_cid_hook_cb (cÚ¡ * d©a , ušt16_t Ën , 2849 * u£r_d©a ) 2851  ‹¡_d©a * t_d©a = `‹¡”_g‘_d©a (); 2852  emu_l2ÿp_cid_d©a * cid_d©a = u£r_d©a ; 2853 cÚ¡  pdu_£t * pdus = cid_d©a -> pdu ; 2854  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( t_d©a -> hc›mu ); 2855  i ; 2857  i = 0; pdus [i]. r¥ . iov_ba£ ; i++) { 2858 ià( pdus [ i ]. »q . iov_ba£ ) { 2859 ià( pdus [ i ]. »q . iov_Ën !ð Ën ) 2862 ià( `memcmp ( pdus [ i ]. »q . iov_ba£ , d©a , Ën )) 2866 ià( pdus [ i ]. r¥ . iov_ba£ ) { 2867 `utž_hexdump ('>', pdus [ i ]. r¥ . iov_ba£ , 2868 pdus [ i ]. r¥ . iov_Ën , ´št_d©a , NULL ); 2871 ià( cid_d©a -> is_sdp ) { 2872  iovec r¥ [3]; 2874 r¥ [0]. iov_ba£ = pdus [ i ].rsp.iov_base; 2875 r¥ [0]. iov_Ën = 1; 2877 r¥ [1]. iov_ba£ = (( ušt8_t *è d©a ) + 1; 2878 r¥ [1]. iov_Ën = 2; 2880 r¥ [2]. iov_ba£ = pdus [ i ].rsp.iov_base + 3; 2881 r¥ [2]. iov_Ën = pdus [ i ].rsp.iov_len - 3; 2883 `btho¡_£nd_cid_v ( btho¡ , cid_d©a -> hªdË , 2884 cid_d©a -> cid , r¥ , 3); 2886 `btho¡_£nd_cid_v ( btho¡ , cid_d©a -> hªdË , 2887 cid_d©a -> cid , & pdus [ i ]. r¥ , 1); 2892 } } 2894  $‹¡”_hªdË_l2ÿp_d©a_exchªge ( emu_l2ÿp_cid_d©a * cid_d©a ) 2896  ‹¡_d©a * t_d©a = `‹¡”_g‘_d©a (); 2897  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( t_d©a -> hc›mu ); 2899 `btho¡_add_cid_hook ( btho¡ , cid_d©a -> hªdË , cid_d©a-> cid , 2900 emu_g’”ic_cid_hook_cb , cid_d©a ); 2901 } } 2903  $‹¡”_g’”ic_cÚÃù_cb ( ušt16_t hªdË , ušt16_ˆ cid , * u£r_d©a ) 2905  emu_l2ÿp_cid_d©a * cid_d©a = u£r_d©a ; 2907 cid_d©a -> hªdË = handle; 2908 cid_d©a -> cid = cid; 2910 `‹¡”_hªdË_l2ÿp_d©a_exchªge ( cid_d©a ); 2911 } } 2913  $rfcomm_cÚÃù_cb ( ušt16_t hªdË , ušt16_ˆ cid , * u£r_d©a , 2914 boÞ ¡©us ) 2916  ¡• *¡• = `g_Ãw0 (step, 1); 2918 `‹¡”_´št ("CÚÃù hªdË %d, cid %d cb stus: %d", hªdË , cid , 2919 ¡©us ); 2921 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 2923 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 2924 } } 2926  $emu_add_rfcomm_£rv”_aùiÚ () 2928  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2929  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 2930  bt_aùiÚ_d©a * rfcomm_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 2931  btho¡ *bthost; 2932  ¡• *¡• = `g_Ãw0 (step, 1); 2934 ià(! rfcomm_d©a ) { 2935 `‹¡”_w¬n ("Invalid†2cap_data…arams"); 2939 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 2941 `btho¡_add_rfcomm_£rv” ( btho¡ , rfcomm_d©a -> chªÃl , 2942 rfcomm_cÚÃù_cb , d©a ); 2944 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 2946 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 2947 } } 2949  $dummy_aùiÚ () 2951  ¡• *¡• = `g_Ãw0 (step, 1); 2953 ¡• -> aùiÚ = dummy_aùiÚ ; 2955 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 2956 } } 2958  $blu‘oÙh_’abË_aùiÚ () 2960  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2961  ¡• *¡• = `g_Ãw0 (step, 1); 2963 ¡• -> aùiÚ_¡©us = d©a -> if_blu‘oÙh -> `’abË (); 2965 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 2966 } } 2968  $blu‘oÙh_di§bË_aùiÚ () 2970  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2971  ¡• *¡• = `g_Ãw0 (step, 1); 2973 ¡• -> aùiÚ_¡©us = d©a -> if_blu‘oÙh -> `di§bË (); 2975 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 2976 } } 2978  $bt_£t_´Ý”ty_aùiÚ () 2980  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2981  ¡• *¡• = `g_Ãw0 (step, 1); 2982  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 2983 bt_´Ý”ty_t * ´Ý ; 2985 ià(! cu¼’t_d©a_¡• -> £t_d©a ) { 2986 `‹¡”_debug ("BT…roperty‚ot set for step"); 2987 `‹¡”_‹¡_çžed (); 2991 ´Ý = ( bt_´Ý”ty_t *) cu¼’t_d©a_¡• -> £t_d©a ; 2993 ¡• -> aùiÚ_¡©us = d©a -> if_blu‘oÙh -> `£t_ad­‹r_´Ý”ty ( ´Ý ); 2995 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 2996 } } 2998  $bt_g‘_´Ý”ty_aùiÚ () 3000  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3001  ¡• *¡• = `g_Ãw0 (step, 1); 3002  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 3003 bt_´Ý”ty_t * ´Ý ; 3005 ià(! cu¼’t_d©a_¡• -> £t_d©a ) { 3006 `‹¡”_debug ("BT…ropertyo get‚ot defined"); 3007 `‹¡”_‹¡_çžed (); 3011 ´Ý = ( bt_´Ý”ty_t *) cu¼’t_d©a_¡• -> £t_d©a ; 3013 ¡• -> aùiÚ_¡©us = d©a -> if_blu‘oÙh -> `g‘_ad­‹r_´Ý”ty ( 3014 ´Ý -> ty³ ); 3016 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 3017 } } 3019  $bt_¡¬t_discov”y_aùiÚ () 3021  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3022  ¡• *¡• = `g_Ãw0 (step, 1); 3024 ¡• -> aùiÚ_¡©us = d©a -> if_blu‘oÙh -> `¡¬t_discov”y (); 3026 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 3027 } } 3029  $bt_ÿnûl_discov”y_aùiÚ () 3031  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3032  ¡• *¡• = `g_Ãw0 (step, 1); 3034 ¡• -> aùiÚ_¡©us = d©a -> if_blu‘oÙh -> `ÿnûl_discov”y (); 3036 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 3037 } } 3039  $bt_g‘_deviû_´Ýs_aùiÚ () 3041  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3042  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 3043  ¡• *¡• = `g_Ãw0 (step, 1); 3045 ià(! cu¼’t_d©a_¡• -> £t_d©a ) { 3046 `‹¡”_debug ("bdaddr‚ot defined"); 3047 `‹¡”_‹¡_çžed (); 3051 ¡• -> aùiÚ_¡©us = 3052 d©a -> if_blu‘oÙh -> `g‘_»mÙe_deviû_´Ý”t›s ( 3053 cu¼’t_d©a_¡• -> £t_d©a ); 3055 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 3056 } } 3058  $bt_g‘_deviû_´Ý_aùiÚ () 3060  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3061  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 3062  bt_aùiÚ_d©a * aùiÚ_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 3063  ¡• *¡• = `g_Ãw0 (step, 1); 3065 ià(! aùiÚ_d©a ) { 3066 `‹¡”_w¬n ("No‡rguments for 'get„emote device…rop'„eq."); 3067 `‹¡”_‹¡_çžed (); 3071 ¡• -> aùiÚ_¡©us = d©a -> if_blu‘oÙh -> `g‘_»mÙe_deviû_´Ý”ty ( 3072 aùiÚ_d©a -> addr , 3073 aùiÚ_d©a -> ´Ý_ty³ ); 3075 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 3076 } } 3078  $bt_£t_deviû_´Ý_aùiÚ () 3080  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3081  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 3082  bt_aùiÚ_d©a * aùiÚ_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 3083  ¡• *¡• = `g_Ãw0 (step, 1); 3085 ià(! aùiÚ_d©a ) { 3086 `‹¡”_w¬n ("No‡rguments for 'set„emote device…rop'„eq."); 3087 `‹¡”_‹¡_çžed (); 3091 ¡• -> aùiÚ_¡©us = d©a -> if_blu‘oÙh -> `£t_»mÙe_deviû_´Ý”ty ( 3092 aùiÚ_d©a -> addr , 3093 aùiÚ_d©a -> ´Ý ); 3095 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 3096 } } 3098  $bt_ü—‹_bÚd_aùiÚ () 3100  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3101  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 3102  bt_aùiÚ_d©a * aùiÚ_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 3103  ¡• *¡• = `g_Ãw0 (step, 1); 3105 ià(! aùiÚ_d©a || !aùiÚ_d©a-> addr ) { 3106 `‹¡”_w¬n ("Bad‡rguments for 'create bond'„eq."); 3107 `‹¡”_‹¡_çžed (); 3111 ¡• -> aùiÚ_¡©us = 3112 d©a -> if_blu‘oÙh -> `ü—‹_bÚd ( aùiÚ_d©a -> addr , 3113 aùiÚ_d©a -> Œª¥Üt_ty³ ? 3114 aùiÚ_d©a -> Œª¥Üt_ty³ : 3115 BT_TRANSPORT_UNKNOWN ); 3117 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 3118 } } 3120  $bt_pš_»¶y_acû±_aùiÚ () 3122  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3123  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 3124  bt_aùiÚ_d©a * aùiÚ_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 3125  ¡• *¡• = `g_Ãw0 (step, 1); 3127 ià(! aùiÚ_d©a || !aùiÚ_d©a-> addr || !aùiÚ_d©a-> pš ) { 3128 `‹¡”_w¬n ("Bad‡rguments for 'pin„eply'„eq."); 3129 `‹¡”_‹¡_çžed (); 3133 ¡• -> aùiÚ_¡©us = d©a -> if_blu‘oÙh -> `pš_»¶y ( aùiÚ_d©a -> addr , 3134 TRUE , 3135 aùiÚ_d©a -> pš_Ën , 3136 aùiÚ_d©a -> pš ); 3138 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 3139 } } 3141  $bt_s¥_»¶y_acû±_aùiÚ () 3143  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3144  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 3145  bt_aùiÚ_d©a * aùiÚ_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 3146  ¡• *¡• = `g_Ãw0 (step, 1); 3148 ¡• -> aùiÚ_¡©us = d©a -> if_blu‘oÙh -> `s¥_»¶y ( aùiÚ_d©a -> addr , 3149 aùiÚ_d©a -> s¥_v¬ŸÁ , 3150 aùiÚ_d©a -> acû± , 0); 3152 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 3153 } } 3155  $bt_ÿnûl_bÚd_aùiÚ () 3157  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3158  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 3159 bt_bdaddr_t * addr = cu¼’t_d©a_¡• -> £t_d©a ; 3160  ¡• *¡• = `g_Ãw0 (step, 1); 3162 ¡• -> aùiÚ_¡©us = d©a -> if_blu‘oÙh -> `ÿnûl_bÚd ( addr ); 3164 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 3165 } } 3167  $bt_»move_bÚd_aùiÚ () 3169  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3170  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 3171 bt_bdaddr_t * addr = cu¼’t_d©a_¡• -> £t_d©a ; 3172  ¡• *¡• = `g_Ãw0 (step, 1); 3174 ¡• -> aùiÚ_¡©us = d©a -> if_blu‘oÙh -> `»move_bÚd ( addr ); 3176 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 3177 } } 3179  $deçuÉ_s¥_»q_cb ( bt_bdaddr_t * »mÙe_bd_addr , bt_bdÇme_t * Çme , 3180 ušt32_t cod , bt_s¥_v¬ŸÁ_t ·œšg_v¬ŸÁ , 3181 ušt32_t ·ss_key ) 3183  ‹¡_d©a * t_d©a = `‹¡”_g‘_d©a (); 3185 t_d©a -> if_blu‘oÙh -> `s¥_»¶y ( »mÙe_bd_addr , ·œšg_v¬ŸÁ , Œue , 3186 ·ss_key ); 3187 } } 3189  $£t_deçuÉ_s¥_»que¡_hªdËr () 3191  ¡• *¡• = `g_Ãw0 (step, 1); 3193 bt_ÿÎbacks . s¥_»que¡_cb = deçuÉ_s¥_»q_cb ; 3195 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 3197 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 3198 } } 3200  $g’”ic_‹¡_funùiÚ (cÚ¡ * ‹¡_d©a ) 3202  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3203  ¡• * fœ¡_¡• ; 3205 `š™_‹¡_¡•s ( d©a ); 3208 fœ¡_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 3209 ià(! fœ¡_¡• -> aùiÚ ) { 3210 `‹¡”_´št ("tester: No initial‡ction declared"); 3211 `‹¡”_‹¡_çžed (); 3214 fœ¡_¡• -> `aùiÚ (); 3215 } } 3217  #‹¡ ( d©a , ‹¡_£tup , ‹¡ , ‹¡_‹¬down ) \ 3219  ‹¡_d©a * u£r ; \ 3220 u£r = `g_m®loc0 (( ‹¡_d©a )); \ 3221 ià(! u£r ) \ 3223 u£r -> hc›mu_ty³ = d©a -> emu_ty³ ; \ 3224 u£r -> ‹¡_d©a = d©a ; \ 3225 `‹¡”_add_fuÎ ( d©a -> t™Ë , d©a, ‹¡_´e_£tup , \ 3226 ‹¡_£tup , ‹¡ , ‹¡_‹¬down , \ 3227 ‹¡_po¡_‹¬down , 3, u£r , g_ä“ ); \ 3228 } 0) ) 3230  $‹¡”_‹¡ÿ£s_þ—nup () 3232 `»move_blu‘oÙh_‹¡s (); 3233 `»move_sock‘_‹¡s (); 3234 `»move_hidho¡_‹¡s (); 3235 `»move_g©t_‹¡s (); 3236 `»move_a2dp_‹¡s (); 3237 `»move_avrý_‹¡s (); 3238 `»move_hdp_‹¡s (); 3239 `»move_·n_‹¡s (); 3240 } } 3242  $add_blu‘oÙh_‹¡s (* d©a , * u£r_d©a ) 3244  ‹¡_ÿ£ * tc = d©a ; 3246 `‹¡ ( tc , £tup , g’”ic_‹¡_funùiÚ , ‹¬down ); 3247 } } 3249  $add_sock‘_‹¡s (* d©a , * u£r_d©a ) 3251  ‹¡_ÿ£ * tc = d©a ; 3253 `‹¡ ( tc , £tup_sock‘ , g’”ic_‹¡_funùiÚ , ‹¬down ); 3254 } } 3256  $add_hidho¡_‹¡s (* d©a , * u£r_d©a ) 3258  ‹¡_ÿ£ * tc = d©a ; 3260 `‹¡ ( tc , £tup_hidho¡ , g’”ic_‹¡_funùiÚ , ‹¬down ); 3261 } } 3263  $add_·n_‹¡s (* d©a , * u£r_d©a ) 3265  ‹¡_ÿ£ * tc = d©a ; 3267 `‹¡ ( tc , £tup_·n , g’”ic_‹¡_funùiÚ , ‹¬down ); 3268 } } 3270  $add_hdp_‹¡s (* d©a , * u£r_d©a ) 3272  ‹¡_ÿ£ * tc = d©a ; 3274 `‹¡ ( tc , £tup_hdp , g’”ic_‹¡_funùiÚ , ‹¬down ); 3275 } } 3277  $add_a2dp_‹¡s (* d©a , * u£r_d©a ) 3279  ‹¡_ÿ£ * tc = d©a ; 3281 `‹¡ ( tc , £tup_a2dp , g’”ic_‹¡_funùiÚ , ‹¬down ); 3282 } } 3284  $add_avrý_‹¡s (* d©a , * u£r_d©a ) 3286  ‹¡_ÿ£ * tc = d©a ; 3288 `‹¡ ( tc , £tup_avrý , g’”ic_‹¡_funùiÚ , ‹¬down ); 3289 } } 3291  $add_g©t_‹¡s (* d©a , * u£r_d©a ) 3293  ‹¡_ÿ£ * tc = d©a ; 3295 `‹¡ ( tc , £tup_g©t , g’”ic_‹¡_funùiÚ , ‹¬down ); 3296 } } 3298  $add_m­_þ›Á_‹¡s (* d©a , * u£r_d©a ) 3300  ‹¡_ÿ£ * tc = d©a ; 3302 `‹¡ ( tc , £tup_m­_þ›Á , g’”ic_‹¡_funùiÚ , ‹¬down ); 3303 } } 3305  $maš ( ¬gc , * ¬gv []) 3307 `¢´štf ( exec_dœ , Óxec_dœ), "%s", `dœÇme ( ¬gv [0])); 3309 `‹¡”_š™ (& ¬gc , & ¬gv ); 3311 `queue_fÜ—ch ( `g‘_blu‘oÙh_‹¡s (), add_blu‘oÙh_‹¡s , NULL ); 3312 `queue_fÜ—ch ( `g‘_sock‘_‹¡s (), add_sock‘_‹¡s , NULL ); 3313 `queue_fÜ—ch ( `g‘_hidho¡_‹¡s (), add_hidho¡_‹¡s , NULL ); 3314 `queue_fÜ—ch ( `g‘_·n_‹¡s (), add_·n_‹¡s , NULL ); 3315 `queue_fÜ—ch ( `g‘_hdp_‹¡s (), add_hdp_‹¡s , NULL ); 3316 `queue_fÜ—ch ( `g‘_a2dp_‹¡s (), add_a2dp_‹¡s , NULL ); 3317 `queue_fÜ—ch ( `g‘_avrý_‹¡s (), add_avrý_‹¡s , NULL ); 3318 `queue_fÜ—ch ( `g‘_g©t_‹¡s (), add_g©t_‹¡s , NULL ); 3319 `queue_fÜ—ch ( `g‘_m­_þ›Á_‹¡s (), add_m­_þ›Á_‹¡s , NULL ); 3321 ià( `‹¡”_run ()) 3324 `‹¡”_‹¡ÿ£s_þ—nup (); 3327 } } @android/tester-main.h 24  ~ 25  ~ 26  ~ 27  ~ 28  ~ 29  ~ 30  ~ 31  ~ 32  ~ 33  ~ 35  ~"emuÏtÜ/hc›mu.h " 36  ~ 38  spdu_£t { 39  iovec m»q ; 40  iovec mr¥ ; 43  #¿w_d©a ( ¬gs ...è(([]è{‡rg }) ) 45  #¿w_pdu ( ¬gs ...) \ 47 . iov_ba£ = `¿w_d©a ( ¬gs ), \ 48 . iov_Ën = ( `¿w_d©a ( ¬gs )), \ 49 } ) 51  #’d_pdu { . iov_ba£ = NULL } ) 53  #TEST_CASE_BREDR ( ‹xt , ...) { \ 54 HCIEMU_TYPE_BREDR , \ 55 ‹xt , \ 56 (( ¡• []è{ __VA_ARGS__ }) / (step), \ 57 ( ¡• []è{ __VA_ARGS__ }, \ 58 } ) 60  #TEST_CASE_BREDRLE ( ‹xt , ...) { \ 61 HCIEMU_TYPE_BREDRLE , \ 62 ‹xt , \ 63 (( ¡• []è{ __VA_ARGS__ }) / (step), \ 64 ( ¡• []è{ __VA_ARGS__ }, \ 65 } ) 67  #MODIFY_DATA ( ¡©us , modif_fun , äom , to , Ën ) { \ 68 . aùiÚ_¡©us = ¡©us , \ 69 . aùiÚ = modif_fun , \ 70 . £t_d©a = äom , \ 71 . £t_d©a_to = to , \ 72 . £t_d©a_Ën = Ën , \ 73 } ) 75  #ACTION ( ¡©us , aù_fun , d©a_£t ) { \ 76 . aùiÚ_¡©us = ¡©us , \ 77 . aùiÚ = aù_fun , \ 78 . £t_d©a = d©a_£t , \ 79 } ) 81  #ACTION_FAIL ( aù_fun , d©a_£t ) \ 82 `ACTION ( BT_STATUS_FAIL , aù_fun , d©a_£t ) ) 84  #ACTION_SUCCESS ( aù_fun , d©a_£t ) \ 85 `ACTION ( BT_STATUS_SUCCESS , aù_fun , d©a_£t ) ) 87  #CALLBACK ( cb ) { \ 88 . ÿÎback = cb , \ 89 } ) 91  #CALLBACK_STATE ( cb , cb_»s ) { \ 92 . ÿÎback = cb , \ 93 . ÿÎback_»suÉ . ¡©e = cb_»s , \ 94 } ) 96  #CALLBACK_STATUS ( cb , cb_»s ) { \ 97 . ÿÎback = cb , \ 98 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 99 } ) 101  #CALLBACK_ADAPTER_PROPS ( ´Ýs , ´Ý_út ) { \ 102 . ÿÎback = CB_BT_ADAPTER_PROPERTIES , \ 103 . ÿÎback_»suÉ . ´Ý”t›s = ´Ýs , \ 104 . ÿÎback_»suÉ . num_´Ý”t›s = ´Ý_út , \ 105 } ) 107  #CALLBACK_PROPS ( cb , ´Ýs , ´Ý_út ) { \ 108 . ÿÎback = cb , \ 109 . ÿÎback_»suÉ . ´Ý”t›s = ´Ýs , \ 110 . ÿÎback_»suÉ . num_´Ý”t›s = ´Ý_út , \ 111 } ) 113  #CALLBACK_HH_MODE ( cb , cb_»s , cb_mode ) { \ 114 . ÿÎback = cb , \ 115 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 116 . ÿÎback_»suÉ . mode = cb_mode , \ 117 } ) 119  #CALLBACK_HHREPORT ( cb , cb_»s , cb_»p_size ) { \ 120 . ÿÎback = cb , \ 121 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 122 . ÿÎback_»suÉ . »pÜt_size = cb_»p_size , \ 123 } ) 125  #CLLBACK_GATTC_SCAN_RES ( ´Ýs , ´Ý_út , cb_adv_d©a ) {\ 126 . ÿÎback = CB_GATTC_SCAN_RESULT , \ 127 . ÿÎback_»suÉ . ´Ý”t›s = ´Ýs , \ 128 . ÿÎback_»suÉ . num_´Ý”t›s = ´Ý_út , \ 129 . ÿÎback_»suÉ . adv_d©a = cb_adv_d©a , \ 130 } ) 132  #CALLBACK_GATTC_CONNECT ( cb_»s , cb_´Ý , cb_cÚn_id , cb_þ›Á_id ) { \ 133 . ÿÎback = CB_GATTC_OPEN , \ 134 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 135 . ÿÎback_»suÉ . ´Ý”t›s = cb_´Ý , \ 136 . ÿÎback_»suÉ . num_´Ý”t›s = 1, \ 137 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 138 . ÿÎback_»suÉ . g©t_­p_id = cb_þ›Á_id , \ 139 } ) 141  #CALLBACK_GATTC_SEARCH_RESULT ( cb_cÚn_id , cb_£rviû ) { \ 142 . ÿÎback = CB_GATTC_SEARCH_RESULT , \ 143 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 144 . ÿÎback_»suÉ . £rviû = cb_£rviû \ 145 } ) 147  #CALLBACK_GATTC_SEARCH_COMPLETE ( cb_»s , cb_cÚn_id ) { \ 148 . ÿÎback = CB_GATTC_SEARCH_COMPLETE , \ 149 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id \ 150 } ) 151  #CALLBACK_GATTC_GET_CHARACTERISTIC_CB ( cb_»s , cb_cÚn_id , cb_£rviû , \ 152 cb_ch¬ , cb_ch¬_´Ý ) { \ 153 . ÿÎback = CB_GATTC_GET_CHARACTERISTIC , \ 154 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 155 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 156 . ÿÎback_»suÉ . £rviû = cb_£rviû , \ 157 . ÿÎback_»suÉ . ch¬aù”i¡ic = cb_ch¬ , \ 158 . ÿÎback_»suÉ . ch¬_´Ý = cb_ch¬_´Ý \ 159 } ) 161  #CALLBACK_GATTC_GET_DESCRIPTOR ( cb_»s , cb_cÚn_id , cb_£rviû , \ 162 cb_ch¬ , cb_desc ) { \ 163 . ÿÎback = CB_GATTC_GET_DESCRIPTOR , \ 164 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 165 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 166 . ÿÎback_»suÉ . £rviû = cb_£rviû , \ 167 . ÿÎback_»suÉ . ch¬aù”i¡ic = cb_ch¬ , \ 168 . ÿÎback_»suÉ . desütÜ = cb_desc \ 169 } ) 171  #CALLBACK_GATTC_GET_INCLUDED ( cb_»s , cb_cÚn_id , cb_£rviû , \ 172 cb_šþ ) { \ 173 . ÿÎback = CB_GATTC_GET_INCLUDED_SERVICE , \ 174 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 175 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 176 . ÿÎback_»suÉ . £rviû = cb_£rviû , \ 177 . ÿÎback_»suÉ . šþuded = cb_šþ , \ 178 } ) 180  #CALLBACK_GATTC_READ_CHARACTERISTIC ( cb_»s , cb_cÚn_id , cb_»ad_d©a ) { \ 181 . ÿÎback = CB_GATTC_READ_CHARACTERISTIC , \ 182 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 183 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 184 . ÿÎback_»suÉ . »ad_·¿ms = cb_»ad_d©a , \ 185 } ) 187  #CALLBACK_GATTC_READ_DESCRIPTOR ( cb_»s , cb_cÚn_id , cb_»ad_d©a ) { \ 188 . ÿÎback = CB_GATTC_READ_DESCRIPTOR , \ 189 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 190 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 191 . ÿÎback_»suÉ . »ad_·¿ms = cb_»ad_d©a , \ 192 } ) 194  #CALLBACK_GATTC_WRITE_DESCRIPTOR ( cb_»s , cb_cÚn_id , cb_wr™e_d©a ) { \ 195 . ÿÎback = CB_GATTC_WRITE_DESCRIPTOR , \ 196 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 197 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 198 . ÿÎback_»suÉ . wr™e_·¿ms = cb_wr™e_d©a , \ 199 } ) 201  #CALLBACK_GATTC_WRITE_CHARACTERISTIC ( cb_»s , cb_cÚn_id , \ 202 cb_wr™e_d©a ) { \ 203 . ÿÎback = CB_GATTC_WRITE_CHARACTERISTIC , \ 204 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 205 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 206 . ÿÎback_»suÉ . wr™e_·¿ms = cb_wr™e_d©a , \ 207 } ) 209  #CALLBACK_GATTC_REGISTER_FOR_NOTIF ( cb_»s , cb_cÚn_id , cb_ch¬ ,\ 210 cb_£rviû , cb_»gi¡”ed ) { \ 211 . ÿÎback = CB_GATTC_REGISTER_FOR_NOTIFICATION , \ 212 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 213 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 214 . ÿÎback_»suÉ . £rviû = cb_£rviû , \ 215 . ÿÎback_»suÉ . ch¬aù”i¡ic = cb_ch¬ , \ 216 . ÿÎback_»suÉ . nÙifiÿtiÚ_»gi¡”ed = cb_»gi¡”ed \ 217 } ) 219  #CALLBACK_GATTC_NOTIFY ( cb_cÚn_id , cb_nÙify ) { \ 220 . ÿÎback = CB_GATTC_NOTIFY , \ 221 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 222 . ÿÎback_»suÉ . nÙify_·¿ms = cb_nÙify \ 223 } ) 225  #CALLBACK_GATTC_DISCONNECT ( cb_»s , cb_´Ý , cb_cÚn_id , cb_þ›Á_id ) { \ 226 . ÿÎback = CB_GATTC_CLOSE , \ 227 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 228 . ÿÎback_»suÉ . ´Ý”t›s = cb_´Ý , \ 229 . ÿÎback_»suÉ . num_´Ý”t›s = 1, \ 230 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 231 . ÿÎback_»suÉ . g©t_­p_id = cb_þ›Á_id , \ 232 } ) 234  #CALLBACK_GATTS_CONNECTION ( cb_»s , cb_´Ý , cb_cÚn_id , cb_£rv”_id ) { \ 235 . ÿÎback = CB_GATTS_CONNECTION , \ 236 . ÿÎback_»suÉ . cÚÃùed = cb_»s , \ 237 . ÿÎback_»suÉ . ´Ý”t›s = cb_´Ý , \ 238 . ÿÎback_»suÉ . num_´Ý”t›s = 1, \ 239 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 240 . ÿÎback_»suÉ . g©t_­p_id = cb_£rv”_id , \ 241 } ) 243  #CALLBACK_GATTS_SERVICE_ADDED ( cb_»s , cb_£rv”_id , cb_£rviû , \ 244 cb_¤vc_hªdË , \ 245 cb_¡Üe_¤vc_hªdË ) { \ 246 . ÿÎback = CB_GATTS_SERVICE_ADDED , \ 247 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 248 . ÿÎback_»suÉ . g©t_­p_id = cb_£rv”_id , \ 249 . ÿÎback_»suÉ . £rviû = cb_£rviû , \ 250 . ÿÎback_»suÉ . ¤vc_hªdË = cb_¤vc_hªdË , \ 251 . ¡Üe_¤vc_hªdË = cb_¡Üe_¤vc_hªdË , \ 252 } ) 254  #CALLBACK_GATTS_INC_SERVICE_ADDED ( cb_»s , cb_£rv”_id , cb_¤vc_hªdË , \ 255 cb_šc_¤vc_hªdË ) { \ 256 . ÿÎback = CB_GATTS_INCLUDED_SERVICE_ADDED , \ 257 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 258 . ÿÎback_»suÉ . g©t_­p_id = cb_£rv”_id , \ 259 . ÿÎback_»suÉ . ¤vc_hªdË = cb_¤vc_hªdË , \ 260 . ÿÎback_»suÉ . šc_¤vc_hªdË = cb_šc_¤vc_hªdË , \ 261 } ) 263  #CALLBACK_GATTS_CHARACTERISTIC_ADDED ( cb_»s , cb_£rv”_id , cb_uuid , \ 264 cb_¤vc_hªdË , \ 265 cb_ch¬_hªdË , \ 266 cb_¡Üe_ch¬_hªdË ) { \ 267 . ÿÎback = CB_GATTS_CHARACTERISTIC_ADDED , \ 268 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 269 . ÿÎback_»suÉ . g©t_­p_id = cb_£rv”_id , \ 270 . ÿÎback_»suÉ . uuid = cb_uuid , \ 271 . ÿÎback_»suÉ . ¤vc_hªdË = cb_¤vc_hªdË , \ 272 . ÿÎback_»suÉ . ch¬_hªdË = cb_ch¬_hªdË , \ 273 . ¡Üe_ch¬_hªdË = cb_¡Üe_ch¬_hªdË , \ 274 } ) 276  #CALLBACK_GATTS_DESCRIPTOR_ADDED ( cb_»s , cb_£rv”_id , cb_uuid , \ 277 cb_¤vc_hªdË , cb_desc_hªdË , \ 278 cb_¡Üe_desc_hªdË ) { \ 279 . ÿÎback = CB_GATTS_DESCRIPTOR_ADDED , \ 280 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 281 . ÿÎback_»suÉ . g©t_­p_id = cb_£rv”_id , \ 282 . ÿÎback_»suÉ . uuid = cb_uuid , \ 283 . ÿÎback_»suÉ . ¤vc_hªdË = cb_¤vc_hªdË , \ 284 . ÿÎback_»suÉ . desc_hªdË = cb_desc_hªdË , \ 285 . ¡Üe_desc_hªdË = cb_¡Üe_desc_hªdË , \ 286 } ) 288  #CALLBACK_GATTS_SERVICE_STARTED ( cb_»s , cb_£rv”_id , cb_¤vc_hªdË ) { \ 289 . ÿÎback = CB_GATTS_SERVICE_STARTED , \ 290 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 291 . ÿÎback_»suÉ . g©t_­p_id = cb_£rv”_id , \ 292 . ÿÎback_»suÉ . ¤vc_hªdË = cb_¤vc_hªdË , \ 293 } ) 295  #CALLBACK_GATTS_SERVICE_STOPPED ( cb_»s , cb_£rv”_id , cb_¤vc_hªdË ) { \ 296 . ÿÎback = CB_GATTS_SERVICE_STOPPED , \ 297 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 298 . ÿÎback_»suÉ . g©t_­p_id = cb_£rv”_id , \ 299 . ÿÎback_»suÉ . ¤vc_hªdË = cb_¤vc_hªdË , \ 300 } ) 302  #CALLBACK_GATTS_SERVICE_DELETED ( cb_»s , cb_£rv”_id , cb_¤vc_hªdË ) { \ 303 . ÿÎback = CB_GATTS_SERVICE_DELETED , \ 304 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 305 . ÿÎback_»suÉ . g©t_­p_id = cb_£rv”_id , \ 306 . ÿÎback_»suÉ . ¤vc_hªdË = cb_¤vc_hªdË , \ 307 } ) 309  #CALLBACK_GATTS_REQUEST_READ ( cb_cÚn_id , cb_Œªs_id , cb_´Ý , \ 310 cb_©Œ_hªdË , cb_off£t , \ 311 cb_is_lÚg ) { \ 312 . ÿÎback = CB_GATTS_REQUEST_READ , \ 313 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 314 . ÿÎback_»suÉ . Œªs_id = cb_Œªs_id , \ 315 . ÿÎback_»suÉ . ´Ý”t›s = cb_´Ý , \ 316 . ÿÎback_»suÉ . num_´Ý”t›s = 1, \ 317 . ÿÎback_»suÉ . ©Œ_hªdË = cb_©Œ_hªdË , \ 318 . ÿÎback_»suÉ . off£t = cb_off£t , \ 319 . ÿÎback_»suÉ . is_lÚg = cb_is_lÚg , \ 320 } ) 322  #CALLBACK_GATTS_REQUEST_WRITE ( cb_cÚn_id , cb_Œªs_id , cb_´Ý , \ 323 cb_©Œ_hªdË , cb_off£t , \ 324 cb_Ëngth , cb_Ãed_r¥ , \ 325 cb_is_´• , cb_v®ue ) { \ 326 . ÿÎback = CB_GATTS_REQUEST_WRITE , \ 327 . ÿÎback_»suÉ . cÚn_id = cb_cÚn_id , \ 328 . ÿÎback_»suÉ . Œªs_id = cb_Œªs_id , \ 329 . ÿÎback_»suÉ . ´Ý”t›s = cb_´Ý , \ 330 . ÿÎback_»suÉ . num_´Ý”t›s = 1, \ 331 . ÿÎback_»suÉ . ©Œ_hªdË = cb_©Œ_hªdË , \ 332 . ÿÎback_»suÉ . off£t = cb_off£t , \ 333 . ÿÎback_»suÉ . Ëngth = cb_Ëngth , \ 334 . ÿÎback_»suÉ . Ãed_r¥ = cb_Ãed_r¥ , \ 335 . ÿÎback_»suÉ . is_´• = cb_is_´• , \ 336 . ÿÎback_»suÉ . v®ue = cb_v®ue , \ 337 } ) 339  #CALLBACK_MAP_CLIENT_REMOTE_MAS_INSTANCE ( cb_¡©us , cb_´Ý , \ 340 cb_num_š¡ , cb_š¡ªûs ) { \ 341 . ÿÎback = CB_MAP_CLIENT_REMOTE_MAS_INSTANCES , \ 342 . ÿÎback_»suÉ . ´Ý”t›s = cb_´Ý , \ 343 . ÿÎback_»suÉ . num_´Ý”t›s = 1, \ 344 . ÿÎback_»suÉ . ¡©us = cb_¡©us , \ 345 . ÿÎback_»suÉ . num_mas_š¡ªûs = cb_num_š¡ , \ 346 . ÿÎback_»suÉ . mas_š¡ªûs = cb_š¡ªûs , \ 347 } ) 349  #CALLBACK_PAN_CTRL_STATE ( cb , cb_»s , cb_¡©e , cb_loÿl_rÞe ) { \ 350 . ÿÎback = cb , \ 351 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 352 . ÿÎback_»suÉ . ù¾_¡©e = cb_¡©e , \ 353 . ÿÎback_»suÉ . loÿl_rÞe = cb_loÿl_rÞe , \ 354 } ) 356  #CALLBACK_PAN_CONN_STATE ( cb , cb_»s , cb_¡©e , cb_loÿl_rÞe , \ 357 cb_»mÙe_rÞe ) { \ 358 . ÿÎback = cb , \ 359 . ÿÎback_»suÉ . ¡©us = cb_»s , \ 360 . ÿÎback_»suÉ . cÚn_¡©e = cb_¡©e , \ 361 . ÿÎback_»suÉ . loÿl_rÞe = cb_loÿl_rÞe , \ 362 . ÿÎback_»suÉ . »mÙe_rÞe = cb_»mÙe_rÞe , \ 363 } ) 365  #CALLBACK_HDP_APP_REG_STATE ( cb , cb_­p_id , cb_¡©e ) { \ 366 . ÿÎback = cb , \ 367 . ÿÎback_»suÉ . ­p_id = cb_­p_id , \ 368 . ÿÎback_»suÉ . ­p_¡©e = cb_¡©e , \ 369 } ) 371  #CALLBACK_HDP_CHANNEL_STATE ( cb , cb_­p_id , cb_chªÃl_id , \ 372 cb_md•_cfg_šdex , cb_¡©e ) { \ 373 . ÿÎback = cb , \ 374 . ÿÎback_»suÉ . ­p_id = cb_­p_id , \ 375 . ÿÎback_»suÉ . chªÃl_id = cb_chªÃl_id , \ 376 . ÿÎback_»suÉ . md•_cfg_šdex = cb_md•_cfg_šdex , \ 377 . ÿÎback_»suÉ . chªÃl_¡©e = cb_¡©e , \ 378 } ) 380  #CALLBACK_AV_CONN_STATE ( cb , cb_av_cÚn_¡©e ) { \ 381 . ÿÎback = cb , \ 382 . ÿÎback_»suÉ . av_cÚn_¡©e = cb_av_cÚn_¡©e , \ 383 } ) 385  #CALLBACK_AV_AUDIO_STATE ( cb , cb_av_audio_¡©e ) { \ 386 . ÿÎback = cb , \ 387 . ÿÎback_»suÉ . av_audio_¡©e = cb_av_audio_¡©e , \ 388 } ) 390  #CALLBACK_RC_PLAY_STATUS ( cb , cb_Ëngth , cb_pos™iÚ , cb_¡©us ) { \ 391 . ÿÎback = cb , \ 392 . ÿÎback_»suÉ . sÚg_Ëngth = cb_Ëngth , \ 393 . ÿÎback_»suÉ . sÚg_pos™iÚ = cb_pos™iÚ , \ 394 . ÿÎback_»suÉ . ¶ay_¡©us = cb_¡©us , \ 395 } ) 397  #CALLBACK_RC_REG_NOTIF_TRACK_CHANGED ( cb , cb_šdex ) { \ 398 . ÿÎback = cb , \ 399 . ÿÎback_»suÉ . rc_šdex = cb_šdex , \ 400 } ) 402  #CALLBACK_RC_REG_NOTIF_POSITION_CHANGED ( cb , cb_pos™iÚ ) { \ 403 . ÿÎback = cb , \ 404 . ÿÎback_»suÉ . sÚg_pos™iÚ = cb_pos™iÚ , \ 405 } ) 407  #CALLBACK_RC_REG_NOTIF_STATUS_CHANGED ( cb , cb_¡©us ) { \ 408 . ÿÎback = cb , \ 409 . ÿÎback_»suÉ . ¶ay_¡©us = cb_¡©us , \ 410 } ) 412  #CALLBACK_RC_GET_ELEMENT_ATTRIBUTES ( cb , cb_num_of_©Œs , cb_©Œs ) { \ 413 . ÿÎback = cb , \ 414 . ÿÎback_»suÉ . num_of_©Œs = cb_num_of_©Œs , \ 415 . ÿÎback_»suÉ . ©Œs = cb_©Œs , \ 416 } ) 418  #CALLBACK_DEVICE_PROPS ( ´Ýs , ´Ý_út ) \ 419 `CALLBACK_PROPS ( CB_BT_REMOTE_DEVICE_PROPERTIES , ´Ýs , ´Ý_út ) ) 421  #CALLBACK_DEVICE_FOUND ( ´Ýs , ´Ý_út ) \ 422 `CALLBACK_PROPS ( CB_BT_DEVICE_FOUND , ´Ýs , ´Ý_út ) ) 424  #CALLBACK_BOND_STATE ( cb_»s , ´Ýs , ´Ý_út ) { \ 425 . ÿÎback = CB_BT_BOND_STATE_CHANGED , \ 426 . ÿÎback_»suÉ . ¡©e = cb_»s , \ 427 . ÿÎback_»suÉ . ´Ý”t›s = ´Ýs , \ 428 . ÿÎback_»suÉ . num_´Ý”t›s = ´Ý_út , \ 429 } ) 431  #CALLBACK_BOND_STATE_FAILED ( cb_»s , ´Ýs , ´Ý_út , »asÚ ) { \ 432 . ÿÎback = CB_BT_BOND_STATE_CHANGED , \ 433 . ÿÎback_»suÉ . ¡©e = cb_»s , \ 434 . ÿÎback_»suÉ . ¡©us = »asÚ , \ 435 . ÿÎback_»suÉ . ´Ý”t›s = ´Ýs , \ 436 . ÿÎback_»suÉ . num_´Ý”t›s = ´Ý_út , \ 437 } ) 439  #CALLBACK_SSP_REQ ( ·œ_v¬ , ´Ýs , ´Ý_út ) { \ 440 . ÿÎback = CB_BT_SSP_REQUEST , \ 441 . ÿÎback_»suÉ . ·œšg_v¬ŸÁ = ·œ_v¬ , \ 442 . ÿÎback_»suÉ . ´Ý”t›s = ´Ýs , \ 443 . ÿÎback_»suÉ . num_´Ý”t›s = ´Ý_út , \ 444 } ) 446  #DBG_CB ( cb è{ cb, #cb } ) 454 mCB_BT_NONE , 455 mCB_BT_ADAPTER_STATE_CHANGED , 456 mCB_BT_ADAPTER_PROPERTIES , 457 mCB_BT_REMOTE_DEVICE_PROPERTIES , 458 mCB_BT_DEVICE_FOUND , 459 mCB_BT_DISCOVERY_STATE_CHANGED , 460 mCB_BT_PIN_REQUEST , 461 mCB_BT_SSP_REQUEST , 462 mCB_BT_BOND_STATE_CHANGED , 463 mCB_BT_ACL_STATE_CHANGED , 464 mCB_BT_THREAD_EVT , 465 mCB_BT_DUT_MODE_RECV , 466 mCB_BT_LE_TEST_MODE , 469 mCB_HH_CONNECTION_STATE , 470 mCB_HH_HID_INFO , 471 mCB_HH_PROTOCOL_MODE , 472 mCB_HH_IDLE_TIME , 473 mCB_HH_GET_REPORT , 474 mCB_HH_VIRTUAL_UNPLUG , 477 mCB_PAN_CONTROL_STATE , 478 mCB_PAN_CONNECTION_STATE , 481 mCB_HDP_APP_REG_STATE , 482 mCB_HDP_CHANNEL_STATE , 485 mCB_A2DP_CONN_STATE , 486 mCB_A2DP_AUDIO_STATE , 489 mCB_AVRCP_PLAY_STATUS_REQ , 490 mCB_AVRCP_PLAY_STATUS_RSP , 491 mCB_AVRCP_REG_NOTIF_REQ , 492 mCB_AVRCP_REG_NOTIF_RSP , 493 mCB_AVRCP_GET_ATTR_REQ , 494 mCB_AVRCP_GET_ATTR_RSP , 497 mCB_GATTC_REGISTER_CLIENT , 498 mCB_GATTC_SCAN_RESULT , 499 mCB_GATTC_OPEN , 500 mCB_GATTC_CLOSE , 501 mCB_GATTC_SEARCH_COMPLETE , 502 mCB_GATTC_SEARCH_RESULT , 503 mCB_GATTC_GET_CHARACTERISTIC , 504 mCB_GATTC_GET_DESCRIPTOR , 505 mCB_GATTC_GET_INCLUDED_SERVICE , 506 mCB_GATTC_REGISTER_FOR_NOTIFICATION , 507 mCB_GATTC_NOTIFY , 508 mCB_GATTC_READ_CHARACTERISTIC , 509 mCB_GATTC_WRITE_CHARACTERISTIC , 510 mCB_GATTC_READ_DESCRIPTOR , 511 mCB_GATTC_WRITE_DESCRIPTOR , 512 mCB_GATTC_EXECUTE_WRITE , 513 mCB_GATTC_READ_REMOTE_RSSI , 514 mCB_GATTC_LISTEN , 517 mCB_GATTS_REGISTER_SERVER , 518 mCB_GATTS_CONNECTION , 519 mCB_GATTS_SERVICE_ADDED , 520 mCB_GATTS_INCLUDED_SERVICE_ADDED , 521 mCB_GATTS_CHARACTERISTIC_ADDED , 522 mCB_GATTS_DESCRIPTOR_ADDED , 523 mCB_GATTS_SERVICE_STARTED , 524 mCB_GATTS_SERVICE_STOPPED , 525 mCB_GATTS_SERVICE_DELETED , 526 mCB_GATTS_REQUEST_READ , 527 mCB_GATTS_REQUEST_WRITE , 528 mCB_GATTS_REQUEST_EXEC_WRITE , 529 mCB_GATTS_RESPONSE_CONFIRMATION , 532 mCB_MAP_CLIENT_REMOTE_MAS_INSTANCES , 535 mCB_EMU_CONFIRM_SEND_DATA , 536 mCB_EMU_ENCRYPTION_ENABLED , 537 mCB_EMU_ENCRYPTION_DISABLED , 538 mCB_EMU_CONNECTION_REJECTED , 539 mCB_EMU_VALUE_INDICATION , 540 mCB_EMU_VALUE_NOTIFICATION , 541 mCB_EMU_READ_RESPONSE , 542 mCB_EMU_WRITE_RESPONSE , 543 } tex³ùed_bt_ÿÎback_t ; 545  s‹¡_d©a { 546  mgmt * mmgmt ; 547 audio_hw_deviû_t * maudio ; 548  hw_deviû_t * mdeviû ; 549  hc›mu * mhc›mu ; 550 hc›mu_ty³ mhc›mu_ty³ ; 552 cÚ¡ bt_š‹rçû_t * mif_blu‘oÙh ; 553 cÚ¡ btsock_š‹rçû_t * mif_sock ; 554 cÚ¡ bthh_š‹rçû_t * mif_hid ; 555 cÚ¡ bª_š‹rçû_t * mif_·n ; 556 cÚ¡ bthl_š‹rçû_t * mif_hdp ; 557 cÚ¡ bv_š‹rçû_t * mif_a2dp ; 558  audio_¡»am_out * mif_¡»am ; 559 cÚ¡ bŒc_š‹rçû_t * mif_avrý ; 560 cÚ¡ btg©t_š‹rçû_t * mif_g©t ; 561 cÚ¡ btmû_š‹rçû_t * mif_m­_þ›Á ; 563 cÚ¡ * m‹¡_d©a ; 564  queue * m¡•s ; 566 gušt msigÇlfd ; 567 ušt16_t mmgmt_šdex ; 568 pid_t mblu‘oÙhd_pid ; 570  queue * mpdus ; 576  sbt_aùiÚ_d©a { 577 bt_bdaddr_t * maddr ; 580 cÚ¡  m´Ý_ty³ ; 581 cÚ¡ bt_´Ý”ty_t * m´Ý ; 584 bt_pš_code_t * mpš ; 585 cÚ¡ ušt8_t mpš_Ën ; 586 cÚ¡ ušt8_t ms¥_v¬ŸÁ ; 587 cÚ¡ boÞ macû± ; 588 cÚ¡ ušt16_t mio_ÿp ; 591 cÚ¡ btsock_ty³_t msock_ty³ ; 592 cÚ¡  mchªÃl ; 593 cÚ¡ ušt8_t * m£rviû_uuid ; 594 cÚ¡ * m£rviû_Çme ; 595 cÚ¡  mæags ; 596 * mfd ; 599 cÚ¡  m»pÜt_size ; 602 cÚ¡ ušt8_t mb—»r_ty³ ; 603 cÚ¡ ušt8_t mŒª¥Üt_ty³ ; 607  semu_£t_l2ÿp_d©a { 608 cÚ¡ ušt16_t mpsm ; 609 cÚ¡ btho¡_l2ÿp_cÚÃù_cb mfunc ; 610 * mu£r_d©a ; 613  semu_l2ÿp_cid_d©a { 614 cÚ¡  pdu_£t * mpdu ; 616 ušt16_t mhªdË ; 617 ušt16_t mcid ; 618 boÞ mis_sdp ; 621  sm­_š¡_d©a { 622 št32_t mid ; 623 št32_t msú ; 624 št32_t mmsg_ty³s ; 625 št32_t mÇme_Ën ; 626 ušt8_t * mÇme ; 634  sbt_ÿÎback_d©a { 635 bt_¡©e_t m¡©e ; 636 bt_¡©us_t m¡©us ; 637  mnum_´Ý”t›s ; 638 bt_´Ý”ty_t * m´Ý”t›s ; 639 bt_uuid_t * muuid ; 641 bt_s¥_v¬ŸÁ_t m·œšg_v¬ŸÁ ; 643 bthh_´ÙocÞ_mode_t mmode ; 644  m»pÜt_size ; 646 boÞ madv_d©a ; 648  mg©t_­p_id ; 649  mcÚn_id ; 650  mŒªs_id ; 651  moff£t ; 652 boÞ mis_lÚg ; 653  mcÚÃùed ; 654 * m©Œ_hªdË ; 655 * m¤vc_hªdË ; 656 * mšc_¤vc_hªdË ; 657 * mch¬_hªdË ; 658 * mdesc_hªdË ; 659 btg©t_¤vc_id_t * m£rviû ; 660 btg©t_g©t_id_t * mch¬aù”i¡ic ; 661 btg©t_g©t_id_t * mdesütÜ ; 662 btg©t_¤vc_id_t * mšþuded ; 663 btg©t_»ad_·¿ms_t * m»ad_·¿ms ; 664 btg©t_wr™e_·¿ms_t * mwr™e_·¿ms ; 665 btg©t_nÙify_·¿ms_t * mnÙify_·¿ms ; 666  mnÙifiÿtiÚ_»gi¡”ed ; 667  mch¬_´Ý ; 668  mËngth ; 669 ušt8_t * mv®ue ; 670 boÞ mÃed_r¥ ; 671 boÞ mis_´• ; 673 bª_cÚŒÞ_¡©e_t mù¾_¡©e ; 674 bª_cÚÃùiÚ_¡©e_t mcÚn_¡©e ; 675  mloÿl_rÞe ; 676  m»mÙe_rÞe ; 678  m­p_id ; 679  mchªÃl_id ; 680  mmd•_cfg_šdex ; 681 bthl_­p_»g_¡©e_t m­p_¡©e ; 682 bthl_chªÃl_¡©e_t mchªÃl_¡©e ; 684 bv_cÚÃùiÚ_¡©e_t mav_cÚn_¡©e ; 685 bv_audio_¡©e_t mav_audio_¡©e ; 686 ušt32_t msÚg_Ëngth ; 687 ušt32_t msÚg_pos™iÚ ; 688 bŒc_¶ay_¡©us_t m¶ay_¡©us ; 689 ušt64_t mrc_šdex ; 690 ušt8_t mnum_of_©Œs ; 691 bŒc_–em’t_©Œ_v®_t * m©Œs ; 693  mnum_mas_š¡ªûs ; 694 btmû_mas_š¡ªû_t * mmas_š¡ªûs ; 701  s¡• { 702 (* maùiÚ )(); 703  maùiÚ_¡©us ; 705 ex³ùed_bt_ÿÎback_t mÿÎback ; 706  bt_ÿÎback_d©a mÿÎback_»suÉ ; 708 * m£t_d©a ; 709 * m£t_d©a_to ; 710  m£t_d©a_Ën ; 712 * m¡Üe_¤vc_hªdË ; 713 * m¡Üe_ch¬_hªdË ; 714 * m¡Üe_desc_hªdË ; 717  s‹¡_ÿ£ { 718 cÚ¡ ušt8_t memu_ty³ ; 719 cÚ¡ * mt™Ë ; 720 cÚ¡ ušt16_t m¡•_num ; 721 cÚ¡  ¡• * m¡• ; 724  ‹¡”_hªdË_l2ÿp_d©a_exchªge ( emu_l2ÿp_cid_d©a * cid_d©a ); 725  ‹¡”_g’”ic_cÚÃù_cb ( ušt16_t hªdË , ušt16_ˆ cid , * u£r_d©a ); 728  queue * g‘_blu‘oÙh_‹¡s (); 729  »move_blu‘oÙh_‹¡s (); 730  queue * g‘_sock‘_‹¡s (); 731  »move_sock‘_‹¡s (); 732  queue * g‘_hidho¡_‹¡s (); 733  »move_hidho¡_‹¡s (); 734  queue * g‘_·n_‹¡s (); 735  »move_·n_‹¡s (); 736  queue * g‘_hdp_‹¡s (); 737  »move_hdp_‹¡s (); 738  queue * g‘_a2dp_‹¡s (); 739  »move_a2dp_‹¡s (); 740  queue * g‘_avrý_‹¡s (); 741  »move_avrý_‹¡s (); 742  queue * g‘_g©t_‹¡s (); 743  »move_g©t_‹¡s (); 744  queue * g‘_m­_þ›Á_‹¡s (); 745  »move_m­_þ›Á_‹¡s (); 748  scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• *step); 749  scheduË_ÿÎback_v”ifiÿtiÚ ( ¡• *step); 752  emu_£tup_pow”ed_»mÙe_aùiÚ (); 753  emu_£t_pš_code_aùiÚ (); 754  emu_£t_s¥_mode_aùiÚ (); 755  emu_£t_cÚÃù_cb_aùiÚ (); 756  emu_»mÙe_cÚÃù_hci_aùiÚ (); 757  emu_»mÙe_discÚÃù_hci_aùiÚ (); 758  emu_£t_io_ÿp (); 759  emu_add_l2ÿp_£rv”_aùiÚ (); 760  emu_add_rfcomm_£rv”_aùiÚ (); 763  dummy_aùiÚ (); 764  blu‘oÙh_’abË_aùiÚ (); 765  blu‘oÙh_di§bË_aùiÚ (); 766  bt_£t_´Ý”ty_aùiÚ (); 767  bt_g‘_´Ý”ty_aùiÚ (); 768  bt_¡¬t_discov”y_aùiÚ (); 769  bt_ÿnûl_discov”y_aùiÚ (); 770  bt_g‘_deviû_´Ýs_aùiÚ (); 771  bt_g‘_deviû_´Ý_aùiÚ (); 772  bt_£t_deviû_´Ý_aùiÚ (); 773  bt_ü—‹_bÚd_aùiÚ (); 774  bt_pš_»¶y_acû±_aùiÚ (); 775  bt_s¥_»¶y_acû±_aùiÚ (); 776  bt_ÿnûl_bÚd_aùiÚ (); 777  bt_»move_bÚd_aùiÚ (); 778  £t_deçuÉ_s¥_»que¡_hªdËr (); @android/tester-map-client.c 18  ~<¡dboÞ.h > 20  ~"emuÏtÜ/btho¡.h " 21  ~"¤c/sh¬ed/‹¡”.h " 22  ~"¤c/sh¬ed/queue.h " 23  ~"‹¡”-maš.h " 25  queue * gli¡ = NULL ; 27  #INST0_ID 0 ) 28  #INST1_ID 1 ) 30  #sdp_r¥_pdu 0x07, \ 54 0x00 ) 56 cÚ¡  pdu_£t gpdus [] = { 57 { ’d_pdu , ¿w_pdu ( sdp_r¥_pdu ) }, 58 { ’d_pdu ,ƒnd_pdu }, 61  emu_l2ÿp_cid_d©a gcid_d©a = { 62 . pdu = pdus , 65  bt_bdaddr_t gemu_»mÙe_bdaddr_v® = { 66 . add»ss = { 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00 }, 69  emu_£t_l2ÿp_d©a gl2ÿp_sdp_£tup_d©a = { 70 . psm = 1, 71 . gfunc = ‹¡”_g’”ic_cÚÃù_cb , 72 . gu£r_d©a = & cid_d©a , 76  btmû_mas_š¡ªû_t g»mÙe_m­_š¡_sms_mms_emaž_v® [] = { 77 { INST0_ID , 4, 14, "MAP SMS/MMS" }, 78 { INST1_ID , 5, 1, "MAP EMAIL" }, 81  $m­_þ›Á_cid_hook_cb (cÚ¡ * d©a , ušt16_t Ën , 82 * u£r_d©a ) 85 } } 87  $m­_þ›Á_cÚn_cb ( ušt16_t hªdË , * u£r_d©a ) 89  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 90  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 92 `‹¡”_´št ("New cÚÃùiÚ w™h hªdË 0x%04x", hªdË ); 94 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_BREDR ) { 95 `‹¡”_w¬n ("Not handled deviceype."); 99 cid_d©a . cid = 0x0040; 100 cid_d©a . hªdË = handle; 102 `btho¡_add_cid_hook ( btho¡ , hªdË , cid_d©a . cid , 103 m­_þ›Á_cid_hook_cb , & cid_d©a ); 104 } } 106  $m­_þ›Á_g‘_š¡ªûs_aùiÚ () 108  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 109  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 110 bt_bdaddr_t * bd_addr = cu¼’t_d©a_¡• -> £t_d©a ; 111  ¡• *¡• = `g_Ãw0 (step, 1); 113 ¡• -> aùiÚ_¡©us = 114 d©a -> if_m­_þ›Á -> `g‘_»mÙe_mas_š¡ªûs ( bd_addr ); 116 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 117 } } 119  ‹¡_ÿ£ g‹¡_ÿ£s [] = { 120 TEST_CASE_BREDRLE ("MAP Cl›Á In™", ACTION_SUCCESS ( dummy_aùiÚ , NULL ), 122 TEST_CASE_BREDRLE ("MAP Client - Get mas instances success", 123 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 124 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 125 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 126 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , 127 & l2ÿp_sdp_£tup_d©a ), 128 ACTION_SUCCESS ( emu_£t_cÚÃù_cb_aùiÚ , m­_þ›Á_cÚn_cb ), 129 ACTION_SUCCESS ( m­_þ›Á_g‘_š¡ªûs_aùiÚ , 130 & emu_»mÙe_bdaddr_v® ), 131 CALLBACK_MAP_CLIENT_REMOTE_MAS_INSTANCE ( BT_STATUS_SUCCESS , NULL , 132 2, »mÙe_m­_š¡_sms_mms_emaž_v® ), 133 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 134 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 138  queue * $g‘_m­_þ›Á_‹¡s () 140 ušt16_t i = 0; 142 li¡ = `queue_Ãw (); 143 ià(! li¡ ) 144  NULL ; 146 ; i < ( ‹¡_ÿ£s ) / (test_cases[0]); ++i) 147 ià(! `queue_push_ž ( li¡ , & ‹¡_ÿ£s [ i ])) { 148 `queue_de¡roy ( li¡ , NULL ); 149  NULL ; 152  li¡ ; 153 } } 155  $»move_m­_þ›Á_‹¡s () 157 `queue_de¡roy ( li¡ , NULL ); 158 } } @android/tester-pan.c 18  ~<¡dboÞ.h > 20  ~"emuÏtÜ/btho¡.h " 21  ~"lib/blu‘oÙh.h " 22  ~"ªdroid/utžs.h " 23  ~"¤c/sh¬ed/‹¡”.h " 24  ~"¤c/sh¬ed/queue.h " 25  ~"‹¡”-maš.h " 27  queue * gli¡ ; 29  #·n_cÚn_»q_pdu 0x01, 0x01, 0x02, 0x11, 0x16, 0x11, 0x15 ) 30  #·n_cÚn_r¥_pdu 0x01, 0x02, 0x00, 0x00 ) 32 cÚ¡  pdu_£t gpdus [] = { 33 { ¿w_pdu ( ·n_cÚn_»q_pdu ),„aw_pdu( ·n_cÚn_r¥_pdu ) }, 34 { ’d_pdu ,ƒnd_pdu }, 37  emu_l2ÿp_cid_d©a gcid_d©a = { 38 . pdu = pdus , 41  emu_£t_l2ÿp_d©a gl2ÿp_£tup_d©a = { 42 . psm = 15, 43 . gfunc = ‹¡”_g’”ic_cÚÃù_cb , 44 . gu£r_d©a = & cid_d©a , 47  $·n_cÚÃù_aùiÚ () 49  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 50 cÚ¡ ušt8_t * ·n_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 51  ¡• *¡• = `g_Ãw0 (step, 1); 52 bt_bdaddr_t bdaddr ; 54 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è ·n_addr , & bdaddr ); 56 ¡• -> aùiÚ_¡©us = d©a -> if_·n -> `cÚÃù (& bdaddr , 57 BTPAN_ROLE_PANU , BTPAN_ROLE_PANNAP ); 59 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 60 } } 62  $·n_discÚÃù_aùiÚ () 64  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 65 cÚ¡ ušt8_t * ·n_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 66  ¡• *¡• = `g_Ãw0 (step, 1); 67 bt_bdaddr_t bdaddr ; 69 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è ·n_addr , & bdaddr ); 71 ¡• -> aùiÚ_¡©us = d©a -> if_·n -> `discÚÃù (& bdaddr ); 73 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 74 } } 76  $·n_g‘_loÿl_rÞe_aùiÚ () 78  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 79 cÚ¡ ušt8_t * ·n_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 80  ¡• *¡• = `g_Ãw0 (step, 1); 81 bt_bdaddr_t bdaddr ; 82  rÞe ; 84 `bdaddr2ªdroid ((cÚ¡ bdaddr_t *è ·n_addr , & bdaddr ); 86 rÞe = d©a -> if_·n -> `g‘_loÿl_rÞe (); 87 ià( rÞe =ð BTPAN_ROLE_PANU ) 88 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 90 ¡• -> aùiÚ_¡©us = BT_STATUS_FAIL ; 92 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 93 } } 95  $·n_’abË_Çp_aùiÚ () 97  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 98  ¡• *¡• = `g_Ãw0 (step, 1); 100 ¡• -> aùiÚ_¡©us = d©a -> if_·n -> `’abË ( BTPAN_ROLE_PANNAP ); 102 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 103 } } 105  $·n_’abË_·nu_aùiÚ () 107  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 108  ¡• *¡• = `g_Ãw0 (step, 1); 110 ¡• -> aùiÚ_¡©us = d©a -> if_·n -> `’abË ( BTPAN_ROLE_PANU ); 112 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 113 } } 115  $·n_’abË_nÚe_aùiÚ () 117  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 118  ¡• *¡• = `g_Ãw0 (step, 1); 120 ¡• -> aùiÚ_¡©us = d©a -> if_·n -> `’abË ( BTPAN_ROLE_NONE ); 122 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 123 } } 125  ‹¡_ÿ£ g‹¡_ÿ£s [] = { 126 TEST_CASE_BREDRLE ("PAN Init", 127 ACTION_SUCCESS ( dummy_aùiÚ , NULL ), 129 TEST_CASE_BREDRLE ("PAN Connect - Success", 130 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 131 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 132 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 133 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 134 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 135 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & l2ÿp_£tup_d©a ), 136 ACTION_SUCCESS ( ·n_cÚÃù_aùiÚ , NULL ), 137 CALLBACK_PAN_CONN_STATE ( CB_PAN_CONNECTION_STATE , 138 BT_STATUS_SUCCESS , 139 BTPAN_STATE_CONNECTING , 140 BTPAN_ROLE_PANU , BTPAN_ROLE_PANNAP ), 141 CALLBACK_PAN_CTRL_STATE ( CB_PAN_CONTROL_STATE , BT_STATUS_SUCCESS , 142 BTPAN_STATE_ENABLED , BTPAN_ROLE_PANU ), 143 CALLBACK_PAN_CONN_STATE ( CB_PAN_CONNECTION_STATE , 144 BT_STATUS_SUCCESS , 145 BTPAN_STATE_CONNECTED , 146 BTPAN_ROLE_PANU , BTPAN_ROLE_PANNAP ), 147 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 148 CALLBACK_PAN_CONN_STATE ( CB_PAN_CONNECTION_STATE , 149 BT_STATUS_SUCCESS , 150 BTPAN_STATE_DISCONNECTED , 151 BTPAN_ROLE_PANU , BTPAN_ROLE_PANNAP ), 152 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 154 TEST_CASE_BREDRLE ("PAN Disconnect - Success", 155 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 156 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 157 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 158 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 159 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 160 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & l2ÿp_£tup_d©a ), 161 ACTION_SUCCESS ( ·n_cÚÃù_aùiÚ , NULL ), 162 CALLBACK_PAN_CONN_STATE ( CB_PAN_CONNECTION_STATE , 163 BT_STATUS_SUCCESS , 164 BTPAN_STATE_CONNECTING , 165 BTPAN_ROLE_PANU , BTPAN_ROLE_PANNAP ), 166 CALLBACK_PAN_CTRL_STATE ( CB_PAN_CONTROL_STATE , BT_STATUS_SUCCESS , 167 BTPAN_STATE_ENABLED , BTPAN_ROLE_PANU ), 168 CALLBACK_PAN_CONN_STATE ( CB_PAN_CONNECTION_STATE , 169 BT_STATUS_SUCCESS , 170 BTPAN_STATE_CONNECTED , 171 BTPAN_ROLE_PANU , BTPAN_ROLE_PANNAP ), 172 ACTION_SUCCESS ( ·n_discÚÃù_aùiÚ , NULL ), 173 CALLBACK_PAN_CONN_STATE ( CB_PAN_CONNECTION_STATE , 174 BT_STATUS_SUCCESS , 175 BTPAN_STATE_DISCONNECTED , 176 BTPAN_ROLE_PANU , BTPAN_ROLE_PANNAP ), 177 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 178 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 180 TEST_CASE_BREDRLE ("PAN GetLocalRole - Success", 181 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 182 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 183 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 184 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 185 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 186 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & l2ÿp_£tup_d©a ), 187 ACTION_SUCCESS ( ·n_cÚÃù_aùiÚ , NULL ), 188 CALLBACK_PAN_CONN_STATE ( CB_PAN_CONNECTION_STATE , 189 BT_STATUS_SUCCESS , 190 BTPAN_STATE_CONNECTING , 191 BTPAN_ROLE_PANU , BTPAN_ROLE_PANNAP ), 192 CALLBACK_PAN_CTRL_STATE ( CB_PAN_CONTROL_STATE , BT_STATUS_SUCCESS , 193 BTPAN_STATE_ENABLED , BTPAN_ROLE_PANU ), 194 CALLBACK_PAN_CONN_STATE ( CB_PAN_CONNECTION_STATE , 195 BT_STATUS_SUCCESS , 196 BTPAN_STATE_CONNECTED , 197 BTPAN_ROLE_PANU , BTPAN_ROLE_PANNAP ), 198 ACTION_SUCCESS ( ·n_g‘_loÿl_rÞe_aùiÚ , NULL ), 199 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 200 CALLBACK_PAN_CONN_STATE ( CB_PAN_CONNECTION_STATE , 201 BT_STATUS_SUCCESS , 202 BTPAN_STATE_DISCONNECTED , 203 BTPAN_ROLE_PANU , BTPAN_ROLE_PANNAP ), 204 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 206 TEST_CASE_BREDRLE ("PAN Enable NAP - Success", 207 ACTION_SUCCESS ( ·n_’abË_Çp_aùiÚ , NULL ), 208 CALLBACK_PAN_CTRL_STATE ( CB_PAN_CONTROL_STATE , BT_STATUS_SUCCESS , 209 BTPAN_STATE_ENABLED , BTPAN_ROLE_PANNAP ), 211 TEST_CASE_BREDRLE ("PAN Enable PANU - Success", 212 ACTION ( BT_STATUS_UNSUPPORTED , ·n_’abË_·nu_aùiÚ , NULL ), 214 TEST_CASE_BREDRLE ("PAN Enable NONE - Success", 215 ACTION_SUCCESS ( ·n_’abË_Çp_aùiÚ , NULL ), 216 CALLBACK_PAN_CTRL_STATE ( CB_PAN_CONTROL_STATE , BT_STATUS_SUCCESS , 217 BTPAN_STATE_ENABLED , BTPAN_ROLE_PANNAP ), 218 ACTION_SUCCESS ( ·n_’abË_nÚe_aùiÚ , NULL ), 219 CALLBACK_PAN_CTRL_STATE ( CB_PAN_CONTROL_STATE , BT_STATUS_SUCCESS , 220 BTPAN_STATE_DISABLED , BTPAN_ROLE_NONE ), 224  queue * $g‘_·n_‹¡s () 226 ušt16_t i = 0; 228 li¡ = `queue_Ãw (); 229 ià(! li¡ ) 230  NULL ; 232 ; i < ( ‹¡_ÿ£s ) / (test_cases[0]); ++i) 233 ià(! `queue_push_ž ( li¡ , & ‹¡_ÿ£s [ i ])) { 234 `queue_de¡roy ( li¡ , NULL ); 235  NULL ; 238  li¡ ; 239 } } 241  $»move_·n_‹¡s () 243 `queue_de¡roy ( li¡ , NULL ); 244 } } @android/tester-socket.c 18  ~ 19  ~ 20  ~<¡dboÞ.h > 22  ~"emuÏtÜ/btho¡.h " 23  ~"¤c/sh¬ed/‹¡”.h " 24  ~"¤c/sh¬ed/queue.h " 25  ~"‹¡”-maš.h " 27  queue * gli¡ ; 29  bt_bdaddr_t gbdaddr_dummy = { 30 . add»ss = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55} 33  ggÙ_fd_»suÉ = -1; 35  bt_aùiÚ_d©a gbtsock_·¿m_sockty³_0 = { 36 . addr = & bdaddr_dummy , 37 . gsock_ty³ = 0, 38 . gchªÃl = 1, 39 . g£rviû_uuid = NULL , 40 . g£rviû_Çme = "Test service", 41 . gæags = 0, 42 . gfd = & gÙ_fd_»suÉ , 45  bt_aùiÚ_d©a gbtsock_·¿m_sockty³_l2ÿp = { 46 . addr = & bdaddr_dummy , 47 . gsock_ty³ = BTSOCK_L2CAP , 48 . gchªÃl = 1, 49 . g£rviû_uuid = NULL , 50 . g£rviû_Çme = "Test service", 51 . gæags = 0, 52 . gfd = & gÙ_fd_»suÉ , 55  bt_aùiÚ_d©a gbtsock_·¿m_chªÃl_0 = { 56 . addr = & bdaddr_dummy , 57 . gsock_ty³ = BTSOCK_RFCOMM , 58 . gchªÃl = 0, 59 . g£rviû_uuid = NULL , 60 . g£rviû_Çme = "Test service", 61 . gæags = 0, 62 . gfd = & gÙ_fd_»suÉ , 65  bt_aùiÚ_d©a gbtsock_·¿m = { 66 . addr = & bdaddr_dummy , 67 . gsock_ty³ = BTSOCK_RFCOMM , 68 . gchªÃl = 1, 69 . g£rviû_uuid = NULL , 70 . g£rviû_Çme = "Test service", 71 . gæags = 0, 72 . gfd = & gÙ_fd_»suÉ , 75  bt_aùiÚ_d©a gbtsock_·¿m_šv_bdaddr = { 76 . addr = NULL , 77 . gsock_ty³ = BTSOCK_RFCOMM , 78 . gchªÃl = 1, 79 . g£rviû_uuid = NULL , 80 . g£rviû_Çme = "Test service", 81 . gæags = 0, 82 . gfd = & gÙ_fd_»suÉ , 85  bt_bdaddr_t gemu_»mÙe_bdaddr_v® = { 86 . add»ss = { 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00 }, 88  bt_´Ý”ty_t g´Ý_emu_»mÙe_bdadr = { 89 . ty³ = BT_PROPERTY_BDADDR , 90 . gv® = & emu_»mÙe_bdaddr_v® , 91 . gËn = ( emu_»mÙe_bdaddr_v® ), 93  bt_´Ý”ty_t g´Ý_emu_»mÙes_deçuÉ_£t [] = { 94 { BT_PROPERTY_BDADDR , ( emu_»mÙe_bdaddr_v® ), 95 & emu_»mÙe_bdaddr_v® }, 98  bt_aùiÚ_d©a gbtsock_·¿m_emu_bdaddr = { 99 . addr = & emu_»mÙe_bdaddr_v® , 100 . gsock_ty³ = BTSOCK_RFCOMM , 101 . gchªÃl = 1, 102 . g£rviû_uuid = NULL , 103 . g£rviû_Çme = "Test service", 104 . gæags = 0, 105 . gfd = & gÙ_fd_»suÉ , 108  emu_£t_l2ÿp_d©a gl2ÿp_£tup_d©a = { 109 . psm = 0x0003, 110 . gfunc = NULL , 111 . gu£r_d©a = NULL , 114  bt_aùiÚ_d©a g´Ý_emu_»mÙe_bdaddr_»q = { 115 . addr = & emu_»mÙe_bdaddr_v® , 116 . g´Ý_ty³ = BT_PROPERTY_BDADDR , 117 . g´Ý = & ´Ý_emu_»mÙe_bdadr , 120  $sock‘_li¡’_aùiÚ () 122  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 123  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 124  bt_aùiÚ_d©a * aùiÚ_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 125  ¡• *¡• = `g_Ãw0 (step, 1); 127 * aùiÚ_d©a -> fd = -1; 129 ¡• -> aùiÚ_¡©us = d©a -> if_sock -> `li¡’ ( aùiÚ_d©a -> sock_ty³ , 130 aùiÚ_d©a -> £rviû_Çme , 131 aùiÚ_d©a -> £rviû_uuid , 132 aùiÚ_d©a -> chªÃl , 133 aùiÚ_d©a -> fd , 134 aùiÚ_d©a -> æags ); 136 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 137 } } 139  $sock‘_cÚÃù_aùiÚ () 141  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 142  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 143  bt_aùiÚ_d©a * aùiÚ_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 144  ¡• *step; 145  ¡©us ; 147 * aùiÚ_d©a -> fd = -1; 149 ¡©us = d©a -> if_sock -> `cÚÃù ( aùiÚ_d©a -> addr , 150 aùiÚ_d©a -> sock_ty³ , 151 aùiÚ_d©a -> £rviû_uuid , 152 aùiÚ_d©a -> chªÃl , 153 aùiÚ_d©a -> fd , 154 aùiÚ_d©a -> æags ); 156 `‹¡”_´št ("¡©u %d sock_fd %d", ¡©us , * aùiÚ_d©a -> fd ); 158 ià(! ¡©us ) 161 ¡• = `g_Ãw0 (step, 1); 162 ¡• -> aùiÚ_¡©us = ¡©us ; 164 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 165 } } 167  gboÞ—n $sock‘_chª_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 168 gpoš‹r u£r_d©a ) 170  sock_fd = `g_io_chªÃl_unix_g‘_fd ( io ); 171  ¡• *¡• = `g_Ãw0 (step, 1); 172  chªÃl , Ën ; 174 `‹¡”_´št ("%s", __func__ ); 176 ià( cÚd & G_IO_HUP ) { 177 `‹¡”_w¬n ("Sock‘ %d hªg up", sock_fd ); 179 ¡• -> aùiÚ_¡©us = BT_STATUS_FAIL ; 180  dÚe ; 183 ià( cÚd & ( G_IO_ERR | G_IO_NVAL )) { 184 `‹¡”_w¬n ("Sock‘ƒ¼Ü: sock %d cÚd %d", sock_fd , cÚd ); 186 ¡• -> aùiÚ_¡©us = BT_STATUS_FAIL ; 187  dÚe ; 190 Ën = `»ad ( sock_fd , & chªÃl , (channel)); 191 ià( Ën !ð( chªÃl )) { 192 `‹¡”_w¬n ("Socket„ead failed"); 194 ¡• -> aùiÚ_¡©us = BT_STATUS_FAIL ; 195  dÚe ; 198 `‹¡”_´št ("»ad cÜ»ù chªÃl: %d", chªÃl ); 200 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 202 dÚe : 203 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 204  FALSE ; 205 } } 207  $sock‘_»ad_fd_aùiÚ () 209  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 210  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 211  bt_aùiÚ_d©a * aùiÚ_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 212 GIOChªÃl * io ; 214 io = `g_io_chªÃl_unix_Ãw (* aùiÚ_d©a -> fd ); 215 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 217 `g_io_add_w©ch ( io , G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 218 sock‘_chª_cb , NULL ); 220 `g_io_chªÃl_uÄef ( io ); 221 } } 223  $sock‘_v”ify_fd_aùiÚ () 225  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 226  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 227  bt_aùiÚ_d©a * aùiÚ_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 228  ¡• *¡• = `g_Ãw0 (step, 1); 230 ià(!* aùiÚ_d©a -> fd ) { 231 ¡• -> aùiÚ_¡©us = BT_STATUS_FAIL ; 232  dÚe ; 235 ¡• -> aùiÚ_¡©us = ( `fúŽ (* aùiÚ_d©a -> fd , F_GETFD ) < 0) ? 236 BT_STATUS_FAIL : BT_STATUS_SUCCESS ; 238 dÚe : 239 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 240 } } 242  $sock‘_v”ify_chªÃl_aùiÚ () 244  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 245  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 246  bt_aùiÚ_d©a * aùiÚ_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 247  chªÃl , Ën ; 248  ¡• *¡• = `g_Ãw0 (step, 1); 250 ià(!* aùiÚ_d©a -> fd ) { 251 `‹¡”_w¬n ("Ups‚o‡ction_data->fd"); 253 ¡• -> aùiÚ_¡©us = BT_STATUS_FAIL ; 254  dÚe ; 257 Ën = `»ad (* aùiÚ_d©a -> fd , & chªÃl , (channel)); 258 ià( Ën !ð( chªÃl è|| chªÃÈ!ð aùiÚ_d©a ->channel) { 259 `‹¡”_w¬n ("Ups bad channel"); 261 ¡• -> aùiÚ_¡©us = BT_STATUS_FAIL ; 262  dÚe ; 265 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 267 dÚe : 268 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 269 } } 271  $sock‘_þo£_chªÃl_aùiÚ () 273  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 274  ¡• * cu¼’t_d©a_¡• = `queue_³ek_h—d ( d©a -> ¡•s ); 275  bt_aùiÚ_d©a * aùiÚ_d©a = cu¼’t_d©a_¡• -> £t_d©a ; 276  ¡• *¡• = `g_Ãw0 (step, 1); 278 ià(!* aùiÚ_d©a -> fd ) { 279 `‹¡”_w¬n ("Ups‚o‡ction_data->fd"); 281 ¡• -> aùiÚ_¡©us = BT_STATUS_FAIL ; 282  dÚe ; 285 `þo£ (* aùiÚ_d©a -> fd ); 286 * aùiÚ_d©a -> fd = -1; 288 ¡• -> aùiÚ_¡©us = BT_STATUS_SUCCESS ; 290 dÚe : 291 `scheduË_aùiÚ_v”ifiÿtiÚ ( ¡• ); 292 } } 294  ‹¡_ÿ£ g‹¡_ÿ£s [] = { 295 TEST_CASE_BREDRLE ("Socket Init", 296 ACTION_SUCCESS ( dummy_aùiÚ , NULL ), 298 TEST_CASE_BREDRLE ("Socket Listen - Invalid: sock_type 0", 299 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 300 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 301 ACTION ( BT_STATUS_PARM_INVALID , sock‘_li¡’_aùiÚ , 302 & btsock_·¿m_sockty³_0 ), 303 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 304 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 306 TEST_CASE_BREDRLE ("Socket Listen - Invalid: sock_type L2CAP", 307 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 308 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 309 ACTION ( BT_STATUS_UNSUPPORTED , sock‘_li¡’_aùiÚ , 310 & btsock_·¿m_sockty³_l2ÿp ), 311 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 312 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 314 TEST_CASE_BREDRLE ("Socket Listen - Invalid: chan, uuid", 315 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 316 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 317 ACTION ( BT_STATUS_PARM_INVALID , sock‘_li¡’_aùiÚ , 318 & btsock_·¿m_chªÃl_0 ), 319 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 320 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 322 TEST_CASE_BREDRLE ("Socket Listen - Check„eturned fd valid", 323 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 324 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 325 ACTION_SUCCESS ( sock‘_li¡’_aùiÚ , & btsock_·¿m ), 326 ACTION_SUCCESS ( sock‘_v”ify_fd_aùiÚ , & btsock_·¿m ), 327 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 328 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 330 TEST_CASE_BREDRLE ("Socket Listen - Check„eturned channel", 331 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 332 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 333 ACTION_SUCCESS ( sock‘_li¡’_aùiÚ , & btsock_·¿m ), 334 ACTION_SUCCESS ( sock‘_v”ify_fd_aùiÚ , & btsock_·¿m ), 335 ACTION_SUCCESS ( sock‘_v”ify_chªÃl_aùiÚ , & btsock_·¿m ), 336 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 337 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 339 TEST_CASE_BREDRLE ("Socket Listen - Close‡nd Listen‡gain", 340 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 341 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 342 ACTION_SUCCESS ( sock‘_li¡’_aùiÚ , & btsock_·¿m ), 343 ACTION_SUCCESS ( sock‘_v”ify_fd_aùiÚ , & btsock_·¿m ), 344 ACTION_SUCCESS ( sock‘_v”ify_chªÃl_aùiÚ , & btsock_·¿m ), 345 ACTION_SUCCESS ( sock‘_þo£_chªÃl_aùiÚ , & btsock_·¿m ), 346 ACTION_SUCCESS ( sock‘_li¡’_aùiÚ , & btsock_·¿m ), 347 ACTION_SUCCESS ( sock‘_v”ify_fd_aùiÚ , & btsock_·¿m ), 348 ACTION_SUCCESS ( sock‘_v”ify_chªÃl_aùiÚ , & btsock_·¿m ), 349 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 350 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 352 TEST_CASE_BREDRLE ("Socket Listen - Invalid: double Listen", 353 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 354 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 355 ACTION_SUCCESS ( sock‘_li¡’_aùiÚ , & btsock_·¿m ), 356 ACTION_SUCCESS ( sock‘_v”ify_fd_aùiÚ , & btsock_·¿m ), 357 ACTION_SUCCESS ( sock‘_v”ify_chªÃl_aùiÚ , & btsock_·¿m ), 358 ACTION ( BT_STATUS_BUSY , sock‘_li¡’_aùiÚ , & btsock_·¿m ), 359 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 360 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 362 TEST_CASE_BREDRLE ("Socket Connect - Invalid: sock_type 0", 363 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 364 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 365 ACTION ( BT_STATUS_PARM_INVALID , sock‘_cÚÃù_aùiÚ , 366 & btsock_·¿m_sockty³_0 ), 367 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 368 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 370 TEST_CASE_BREDRLE ("Socket Connect - Invalid: sock_type L2CAP", 371 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 372 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 373 ACTION ( BT_STATUS_UNSUPPORTED , sock‘_cÚÃù_aùiÚ , 374 & btsock_·¿m_sockty³_l2ÿp ), 375 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 376 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 378 TEST_CASE_BREDRLE ("Socket Connect - Invalid: chan, uuid", 379 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 380 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 381 ACTION ( BT_STATUS_PARM_INVALID , sock‘_cÚÃù_aùiÚ , 382 & btsock_·¿m_chªÃl_0 ), 383 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 384 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 386 TEST_CASE_BREDRLE ("Socket Connect - Invalid: bdaddr", 387 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 388 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 389 ACTION ( BT_STATUS_PARM_INVALID , sock‘_cÚÃù_aùiÚ , 390 & btsock_·¿m_šv_bdaddr ), 391 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 392 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 394 TEST_CASE_BREDRLE ("Socket Connect - Check„eturned fd valid", 395 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 396 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 397 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 398 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 399 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 400 ACTION_SUCCESS ( bt_ü—‹_bÚd_aùiÚ , 401 & ´Ý_emu_»mÙe_bdaddr_»q ), 402 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDING , 403 & ´Ý_emu_»mÙe_bdadr , 1), 404 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_£t , 1), 405 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDED , 406 & ´Ý_emu_»mÙe_bdadr , 1), 407 CALLBACK_DEVICE_PROPS ( NULL , 0), 408 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & l2ÿp_£tup_d©a ), 409 ACTION_SUCCESS ( emu_add_rfcomm_£rv”_aùiÚ , 410 & btsock_·¿m_emu_bdaddr ), 411 ACTION_SUCCESS ( sock‘_cÚÃù_aùiÚ , & btsock_·¿m_emu_bdaddr ), 412 ACTION_SUCCESS ( sock‘_v”ify_fd_aùiÚ , 413 & btsock_·¿m_emu_bdaddr ), 414 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 415 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 417 TEST_CASE_BREDRLE ("Socket Connect - Check„eturned chann", 418 ACTION_SUCCESS ( £t_deçuÉ_s¥_»que¡_hªdËr , NULL ), 419 ACTION_SUCCESS ( blu‘oÙh_’abË_aùiÚ , NULL ), 420 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_ON ), 421 ACTION_SUCCESS ( emu_£tup_pow”ed_»mÙe_aùiÚ , NULL ), 422 ACTION_SUCCESS ( emu_£t_s¥_mode_aùiÚ , NULL ), 423 ACTION_SUCCESS ( bt_ü—‹_bÚd_aùiÚ , 424 & ´Ý_emu_»mÙe_bdaddr_»q ), 425 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDING , 426 & ´Ý_emu_»mÙe_bdadr , 1), 427 CALLBACK_DEVICE_FOUND ( ´Ý_emu_»mÙes_deçuÉ_£t , 1), 428 CALLBACK_BOND_STATE ( BT_BOND_STATE_BONDED , 429 & ´Ý_emu_»mÙe_bdadr , 1), 430 CALLBACK_DEVICE_PROPS ( NULL , 0), 431 ACTION_SUCCESS ( emu_add_l2ÿp_£rv”_aùiÚ , & l2ÿp_£tup_d©a ), 432 ACTION_SUCCESS ( emu_add_rfcomm_£rv”_aùiÚ , 433 & btsock_·¿m_emu_bdaddr ), 434 ACTION_SUCCESS ( sock‘_cÚÃù_aùiÚ , & btsock_·¿m_emu_bdaddr ), 435 ACTION_SUCCESS ( sock‘_v”ify_fd_aùiÚ , 436 & btsock_·¿m_emu_bdaddr ), 437 ACTION_SUCCESS ( sock‘_v”ify_chªÃl_aùiÚ , 438 & btsock_·¿m_emu_bdaddr ), 439 ACTION_SUCCESS ( sock‘_»ad_fd_aùiÚ , & btsock_·¿m_emu_bdaddr ), 440 ACTION_SUCCESS ( blu‘oÙh_di§bË_aùiÚ , NULL ), 441 CALLBACK_STATE ( CB_BT_ADAPTER_STATE_CHANGED , BT_STATE_OFF ), 445  queue * $g‘_sock‘_‹¡s () 447 ušt16_t i = 0; 449 li¡ = `queue_Ãw (); 450 ià(! li¡ ) 451  NULL ; 453 ; i < ( ‹¡_ÿ£s ) / (test_cases[0]); ++i) 454 ià(! `queue_push_ž ( li¡ , & ‹¡_ÿ£s [ i ])) { 455 `queue_de¡roy ( li¡ , NULL ); 456  NULL ; 459  li¡ ; 460 } } 462  $»move_sock‘_‹¡s () 464 `queue_de¡roy ( li¡ , NULL ); 465 } } @android/utils.h 24  šlše  $ªdroid2bdaddr (cÚ¡ * buf , bdaddr_t * d¡ ) 26 `basw­ ( d¡ , buf ); 27 } } 29  šlše  $bdaddr2ªdroid (cÚ¡ bdaddr_t * ¤c , * buf ) 31 `basw­ ( buf , ¤c ); 32 } } 34 cÚ¡ * bt_cÚfig_g‘_v’dÜ (); 35 cÚ¡ * bt_cÚfig_g‘_mod– (); 36 cÚ¡ * bt_cÚfig_g‘_Çme (); 37 cÚ¡ * bt_cÚfig_g‘_£rŸl (); 38 cÚ¡ * bt_cÚfig_g‘_fw_»v (); 39 cÚ¡ * bt_cÚfig_g‘_hw_»v (); 40 ušt64_t bt_cÚfig_g‘_sy¡em_id (); 41 ušt16_t bt_cÚfig_g‘_²p_sourû (); 42 ušt16_t bt_cÚfig_g‘_²p_v’dÜ (); 43 ušt16_t bt_cÚfig_g‘_²p_´oduù (); 44 ušt16_t bt_cÚfig_g‘_²p_v”siÚ (); @attrib/att-database.h 25 mATT_NONE , 26 mATT_AUTHENTICATION , 27 mATT_AUTHORIZATION , 28 mATT_NOT_PERMITTED , 31  s©Œibu‹ { 32 ušt16_t mhªdË ; 33 bt_uuid_t muuid ; 34  m»ad_»q ; 35  mwr™e_»q ; 36 ušt8_t (* »ad_cb )( ©Œibu‹ * ma ,  btd_deviû * mdeviû , 37 gpoš‹r mu£r_d©a ); 38 ušt8_t (* wr™e_cb )( ©Œibu‹ * ma ,  btd_deviû * mdeviû , 39 gpoš‹r mu£r_d©a ); 40 gpoš‹r mcb_u£r_d©a ; 41 size_t mËn ; 42 ušt8_t * md©a ; @attrib/att.c 25 #ifdeà HAVE_CONFIG_H 26  ~"cÚfig.h " 29  ~<”ºo.h > 30  ~<¡dšt.h > 31  ~<¡dlib.h > 33  ~ 35  ~ 37  ~"¤c/sh¬ed/utž.h " 38  ~"lib/uuid.h " 39  ~"©t.h " 41  šlše  $put_uuid_Ë (cÚ¡ bt_uuid_t * ¤c , * d¡ ) 43 ià( ¤c -> ty³ =ð BT_UUID16 ) 44 `put_Ë16 ( ¤c -> v®ue . u16 , d¡ ); 47 `bsw­_128 (& ¤c -> v®ue . u128 , d¡ ); 48 } } 50 cÚ¡ * $©t_ecode2¡r ( ušt8_t ¡©us ) 52  ¡©us ) { 53  ATT_ECODE_INVALID_HANDLE : 55  ATT_ECODE_READ_NOT_PERM : 57  ATT_ECODE_WRITE_NOT_PERM : 59  ATT_ECODE_INVALID_PDU : 61  ATT_ECODE_AUTHENTICATION : 63  ATT_ECODE_REQ_NOT_SUPP : 65  ATT_ECODE_INVALID_OFFSET : 67  ATT_ECODE_AUTHORIZATION : 69  ATT_ECODE_PREP_QUEUE_FULL : 71  ATT_ECODE_ATTR_NOT_FOUND : 73  ATT_ECODE_ATTR_NOT_LONG : 75  ATT_ECODE_INSUFF_ENCR_KEY_SIZE : 77  ATT_ECODE_INVAL_ATTR_VALUE_LEN : 79  ATT_ECODE_UNLIKELY : 81  ATT_ECODE_INSUFF_ENC : 83  ATT_ECODE_UNSUPP_GRP_TYPE : 85  ATT_ECODE_INSUFF_RESOURCES : 87  ATT_ECODE_IO : 89  ATT_ECODE_TIMEOUT : 91  ATT_ECODE_ABORTED : 96 } } 98  $©t_d©a_li¡_ä“ ( ©t_d©a_li¡ * li¡ ) 100 ià( li¡ =ð NULL ) 103 ià( li¡ -> d©a ) { 104  i ; 105  i = 0; i < li¡ -> num ; i++) 106 `g_ä“ ( li¡ -> d©a [ i ]); 109 `g_ä“ ( li¡ -> d©a ); 110 `g_ä“ ( li¡ ); 111 } } 113  ©t_d©a_li¡ * $©t_d©a_li¡_®loc ( ušt16_t num , ušt16_ˆ Ën ) 115  ©t_d©a_li¡ * li¡ ; 116  i ; 118 ià( Ën > UINT8_MAX ) 119  NULL ; 121 li¡ = `g_Ãw0 ( ©t_d©a_li¡ , 1); 122 li¡ -> Ën =†en; 123 li¡ -> num =‚um; 125 li¡ -> d©a = `g_m®loc0 (( ušt8_t *è* num ); 127  i = 0; i < num ; i++) 128 li¡ -> d©a [ i ] = `g_m®loc0 (( ušt8_t è* Ën ); 130  li¡ ; 131 } } 132 #ifdeà __TIZEN_PATCH__ 133  $g‘_uuid ( ušt8_t ty³ , cÚ¡ * v® , bt_uuid_t * uuid ) 135  $g‘_uuid ( ušt8_t ty³ , cÚ¡ * v® , bt_uuid_t * uuid ) 138 ià( ty³ =ð BT_UUID16 ) 139 `bt_uuid16_ü—‹ ( uuid , `g‘_Ë16 ( v® )); 140 #ifdeà __TIZEN_PATCH__ 141 ià( ty³ =ð BT_UUID32 ) 142 `bt_uuid32_ü—‹ ( uuid , `g‘_Ë32 ( v® )); 145 ušt128_t u128 ; 148 `bsw­_128 ( v® , & u128 ); 149 `bt_uuid128_ü—‹ ( uuid , u128 ); 151 } } 153 ušt16_t $’c_»ad_by_g½_»q ( ušt16_t ¡¬t , ušt16_ˆ ’d , bt_uuid_t * uuid , 154 ušt8_t * pdu , size_t Ën ) 156 ušt16_t uuid_Ën ; 158 ià(! uuid ) 161 ià( uuid -> ty³ =ð BT_UUID16 ) 162 uuid_Ën = 2; 163 #ifdeà __TIZEN_PATCH__ 164 ià( uuid -> ty³ =ð BT_UUID32 ) 165 uuid_Ën = 4; 167 ià( uuid -> ty³ =ð BT_UUID128 ) 168 uuid_Ën = 16; 173 pdu [0] = ATT_OP_READ_BY_GROUP_REQ ; 175 `put_Ë16 ( ¡¬t , & pdu [1]); 177 `put_Ë16 ( ’d , & pdu [3]); 179 `put_uuid_Ë ( uuid , & pdu [5]); 181  5 + uuid_Ën ; 182 } } 184 ušt16_t $dec_»ad_by_g½_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_t * ¡¬t , 185 ušt16_t * ’d , bt_uuid_t * uuid ) 187 cÚ¡ size_t mš_Ën = ( pdu [0]è+ (* ¡¬t è+ (* ’d ); 188 ušt8_t ty³ ; 190 ià( pdu =ð NULL ) 193 ià( ¡¬t =ð NULL || ’d =ðNULL || uuid == NULL) 196 ià( pdu [0] !ð ATT_OP_READ_BY_GROUP_REQ ) 199 ià( Ën =ð( mš_Ën + 2)) 200 ty³ = BT_UUID16 ; 201 #ifdeà __TIZEN_PATCH__ 202 ià( Ën =ð( mš_Ën + 4)) 203 ty³ = BT_UUID32 ; 205 ià( Ën =ð( mš_Ën + 16)) 206 ty³ = BT_UUID128 ; 210 * ¡¬t = `g‘_Ë16 (& pdu [1]); 211 * ’d = `g‘_Ë16 (& pdu [3]); 213 `g‘_uuid ( ty³ , & pdu [5], uuid ); 215  Ën ; 216 } } 218 ušt16_t $’c_»ad_by_g½_»¥ ( ©t_d©a_li¡ * li¡ , ušt8_t * pdu , 219 size_t Ën ) 221  i ; 222 ušt16_t w ; 223 ušt8_t * ±r ; 225 ià( li¡ =ð NULL ) 228 ià( Ën < li¡ ->ËÀ+ ( ušt8_t ) * 2) 231 pdu [0] = ATT_OP_READ_BY_GROUP_RESP ; 232 pdu [1] = li¡ -> Ën ; 234 ±r = & pdu [2]; 236  i = 0, w = 2; i < li¡ -> num && w +†i¡-> Ën <=†en; i++) { 237 `memýy ( ±r , li¡ -> d©a [ i ],†i¡-> Ën ); 238 ±r +ð li¡ -> Ën ; 239 w +ð li¡ -> Ën ; 242  w ; 243 } } 245  ©t_d©a_li¡ * $dec_»ad_by_g½_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën ) 247  ©t_d©a_li¡ * li¡ ; 248 cÚ¡ ušt8_t * ±r ; 249 ušt16_t –’ , num ; 250  i ; 252 ià( pdu [0] !ð ATT_OP_READ_BY_GROUP_RESP ) 253  NULL ; 262 ià( Ën < 7) 263  NULL ; 265 –’ = pdu [1]; 267 ià( –’ < 5) 268  NULL ; 271 ià(( Ën - 2è% –’ ) 272  NULL ; 274 num = ( Ën - 2è/ –’ ; 275 li¡ = `©t_d©a_li¡_®loc ( num , –’ ); 276 ià( li¡ =ð NULL ) 277  NULL ; 279 ±r = & pdu [2]; 281  i = 0; i < num ; i++) { 282 `memýy ( li¡ -> d©a [ i ], ±r ,†i¡-> Ën ); 283 ±r +ð li¡ -> Ën ; 286  li¡ ; 287 } } 289 ušt16_t $’c_fšd_by_ty³_»q ( ušt16_t ¡¬t , ušt16_ˆ ’d , bt_uuid_t * uuid , 290 cÚ¡ ušt8_t * v®ue , size_t vËn , 291 ušt8_t * pdu , size_t Ën ) 293 ušt16_t mš_Ën = ( pdu [0]è+ ( ¡¬t è+ ( ’d ) + 294 ( ušt16_t ); 296 ià( pdu =ð NULL ) 299 ià(! uuid ) 302 ià( uuid -> ty³ !ð BT_UUID16 ) 305 ià( vËn > Ën - mš_Ën ) 306 vËn = Ën - mš_Ën ; 308 pdu [0] = ATT_OP_FIND_BY_TYPE_REQ ; 309 `put_Ë16 ( ¡¬t , & pdu [1]); 310 `put_Ë16 ( ’d , & pdu [3]); 311 `put_Ë16 ( uuid -> v®ue . u16 , & pdu [5]); 313 ià( vËn > 0) { 314 `memýy (& pdu [7], v®ue , vËn ); 315  mš_Ën + vËn ; 318  mš_Ën ; 319 } } 321 ušt16_t $dec_fšd_by_ty³_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_t * ¡¬t , 322 ušt16_t * ’d , bt_uuid_t * uuid , 323 ušt8_t * v®ue , size_t * vËn ) 325 ià( pdu =ð NULL ) 328 ià( Ën < 7) 332 ià( pdu [0] !ð ATT_OP_FIND_BY_TYPE_REQ ) 336 * ¡¬t = `g‘_Ë16 (& pdu [1]); 338 * ’d = `g‘_Ë16 (& pdu [3]); 340 `bt_uuid16_ü—‹ ( uuid , `g‘_Ë16 (& pdu [5])); 343 * vËn = Ën - 7; 344 ià(* vËn > 0) 345 `memýy ( v®ue , pdu + 7, * vËn ); 347  Ën ; 348 } } 350 ušt16_t $’c_fšd_by_ty³_»¥ ( GSLi¡ * m©ches , ušt8_t * pdu , size_t Ën ) 352 GSLi¡ * l ; 353 ušt16_t off£t ; 355 ià(! pdu ) 358 pdu [0] = ATT_OP_FIND_BY_TYPE_RESP ; 360  l = m©ches , off£t = 1; 361 l && Ën >ð( off£t + ( ušt16_t ) * 2); 362 l =†-> Ãxt , off£t +ð( ušt16_t ) * 2) { 363  ©t_¿nge * ¿nge = l -> d©a ; 365 `put_Ë16 ( ¿nge -> ¡¬t , & pdu [ off£t ]); 366 `put_Ë16 ( ¿nge -> ’d , & pdu [ off£t + 2]); 369  off£t ; 370 } } 372 GSLi¡ * $dec_fšd_by_ty³_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën ) 374  ©t_¿nge * ¿nge ; 375 GSLi¡ * m©ches ; 376 off_t off£t ; 383 ià( pdu =ð NULL || Ën < 5) 384  NULL ; 386 ià( pdu [0] !ð ATT_OP_FIND_BY_TYPE_RESP ) 387  NULL ; 390 ià(( Ën - 1) % 4) 391  NULL ; 393  off£t = 1, m©ches = NULL ; 394 Ën >ð( off£t + ( ušt16_t ) * 2); 395 off£t +ð( ušt16_t ) * 2) { 396 ¿nge = `g_Ãw0 ( ©t_¿nge , 1); 397 ¿nge -> ¡¬t = `g‘_Ë16 (& pdu [ off£t ]); 398 ¿nge -> ’d = `g‘_Ë16 (& pdu [ off£t + 2]); 400 m©ches = `g_¦i¡_­³nd (m©ches, ¿nge ); 403  m©ches ; 404 } } 406 ušt16_t $’c_»ad_by_ty³_»q ( ušt16_t ¡¬t , ušt16_ˆ ’d , bt_uuid_t * uuid , 407 ušt8_t * pdu , size_t Ën ) 409 ušt16_t uuid_Ën ; 411 ià(! uuid ) 414 ià( uuid -> ty³ =ð BT_UUID16 ) 415 uuid_Ën = 2; 416 ià( uuid -> ty³ =ð BT_UUID128 ) 417 uuid_Ën = 16; 422 pdu [0] = ATT_OP_READ_BY_TYPE_REQ ; 424 `put_Ë16 ( ¡¬t , & pdu [1]); 426 `put_Ë16 ( ’d , & pdu [3]); 428 `put_uuid_Ë ( uuid , & pdu [5]); 430  5 + uuid_Ën ; 431 } } 433 ušt16_t $dec_»ad_by_ty³_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_t * ¡¬t , 434 ušt16_t * ’d , bt_uuid_t * uuid ) 436 cÚ¡ size_t mš_Ën = ( pdu [0]è+ (* ¡¬t è+ (* ’d ); 437 ušt8_t ty³ ; 439 ià( pdu =ð NULL ) 442 ià( ¡¬t =ð NULL || ’d =ðNULL || uuid == NULL) 445 ià( Ën =ð( mš_Ën + 2)) 446 ty³ = BT_UUID16 ; 447 ià( Ën =ð( mš_Ën + 16)) 448 ty³ = BT_UUID128 ; 452 ià( pdu [0] !ð ATT_OP_READ_BY_TYPE_REQ ) 455 * ¡¬t = `g‘_Ë16 (& pdu [1]); 456 * ’d = `g‘_Ë16 (& pdu [3]); 458 `g‘_uuid ( ty³ , & pdu [5], uuid ); 460  Ën ; 461 } } 463 ušt16_t $’c_»ad_by_ty³_»¥ ( ©t_d©a_li¡ * li¡ , ušt8_t * pdu , 464 size_t Ën ) 466 ušt8_t * ±r ; 467 size_t i , w , l ; 469 ià( li¡ =ð NULL ) 472 ià( pdu =ð NULL ) 475 l = `MIN ( Ën - 2, li¡ ->len); 477 pdu [0] = ATT_OP_READ_BY_TYPE_RESP ; 478 pdu [1] = l ; 479 ±r = & pdu [2]; 481  i = 0, w = 2; i < li¡ -> num && w + l <ð Ën ; i++) { 482 `memýy ( ±r , li¡ -> d©a [ i ], l ); 483 ±r +ð l ; 484 w +ð l ; 487  w ; 488 } } 490  ©t_d©a_li¡ * $dec_»ad_by_ty³_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën ) 492  ©t_d©a_li¡ * li¡ ; 493 cÚ¡ ušt8_t * ±r ; 494 ušt16_t –’ , num ; 495  i ; 497 ià( pdu [0] !ð ATT_OP_READ_BY_TYPE_RESP ) 498  NULL ; 506 ià( Ën < 5) 507  NULL ; 509 –’ = pdu [1]; 511 ià( –’ < 3) 512  NULL ; 515 ià(( Ën - 2è% –’ ) 516  NULL ; 518 num = ( Ën - 2è/ –’ ; 519 li¡ = `©t_d©a_li¡_®loc ( num , –’ ); 520 ià( li¡ =ð NULL ) 521  NULL ; 523 ±r = & pdu [2]; 525  i = 0; i < num ; i++) { 526 `memýy ( li¡ -> d©a [ i ], ±r ,†i¡-> Ën ); 527 ±r +ð li¡ -> Ën ; 530  li¡ ; 531 } } 533 ušt16_t $’c_wr™e_cmd ( ušt16_t hªdË , cÚ¡ ušt8_t * v®ue , size_t vËn , 534 ušt8_t * pdu , size_t Ën ) 536 cÚ¡ ušt16_t mš_Ën = ( pdu [0]è+ ( hªdË ); 538 ià( pdu =ð NULL ) 541 ià( vËn > Ën - mš_Ën ) 542 vËn = Ën - mš_Ën ; 544 pdu [0] = ATT_OP_WRITE_CMD ; 545 `put_Ë16 ( hªdË , & pdu [1]); 547 ià( vËn > 0) { 548 `memýy (& pdu [3], v®ue , vËn ); 549  mš_Ën + vËn ; 552  mš_Ën ; 553 } } 555 ušt16_t $dec_wr™e_cmd (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_t * hªdË , 556 ušt8_t * v®ue , size_t * vËn ) 558 cÚ¡ ušt16_t mš_Ën = ( pdu [0]è+ (* hªdË ); 560 ià( pdu =ð NULL ) 563 ià( v®ue =ð NULL || vËn =ðNULL || hªdË == NULL) 566 ià( Ën < mš_Ën ) 569 ià( pdu [0] !ð ATT_OP_WRITE_CMD ) 572 * hªdË = `g‘_Ë16 (& pdu [1]); 573 `memýy ( v®ue , pdu + mš_Ën , Ën - min_len); 574 * vËn = Ën - mš_Ën ; 576  Ën ; 577 } } 579 ušt16_t $’c_sigÃd_wr™e_cmd ( ušt16_t hªdË , cÚ¡ ušt8_t * v®ue , 580 size_t vËn ,  bt_üy±o * üy±o , 581 cÚ¡ ušt8_t c¤k [16], 582 ušt32_t sign_út , 583 ušt8_t * pdu , size_t Ën ) 585 cÚ¡ ušt16_t hdr_Ën = ( pdu [0]è+ ( hªdË ); 586 cÚ¡ ušt16_t mš_Ën = hdr_Ën + ATT_SIGNATURE_LEN ; 588 ià( pdu =ð NULL ) 591 ià( vËn > Ën - mš_Ën ) 592 vËn = Ën - mš_Ën ; 594 pdu [0] = ATT_OP_SIGNED_WRITE_CMD ; 595 `put_Ë16 ( hªdË , & pdu [1]); 597 ià( vËn > 0) 598 `memýy (& pdu [ hdr_Ën ], v®ue , vËn ); 600 ià(! `bt_üy±o_sign_©t ( üy±o , c¤k , pdu , hdr_Ën + vËn , sign_út , 601 & pdu [ hdr_Ën + vËn ])) 604  mš_Ën + vËn ; 605 } } 607 ušt16_t $dec_sigÃd_wr™e_cmd (cÚ¡ ušt8_t * pdu , size_t Ën , 608 ušt16_t * hªdË , 609 ušt8_t * v®ue , size_t * vËn , 610 ušt8_t sigÇtu» [12]) 612 cÚ¡ ušt16_t hdr_Ën = ( pdu [0]è+ (* hªdË ); 613 cÚ¡ ušt16_t mš_Ën = hdr_Ën + ATT_SIGNATURE_LEN ; 616 ià( pdu =ð NULL ) 619 ià( v®ue =ð NULL || vËn =ðNULL || hªdË == NULL) 622 ià( Ën < mš_Ën ) 625 ià( pdu [0] !ð ATT_OP_SIGNED_WRITE_CMD ) 628 * vËn = Ën - mš_Ën ; 629 * hªdË = `g‘_Ë16 (& pdu [1]); 630 `memýy ( v®ue , pdu + hdr_Ën , * vËn ); 632 `memýy ( sigÇtu» , pdu + hdr_Ën + * vËn , ATT_SIGNATURE_LEN ); 634  Ën ; 635 } } 637 ušt16_t $’c_wr™e_»q ( ušt16_t hªdË , cÚ¡ ušt8_t * v®ue , size_t vËn , 638 ušt8_t * pdu , size_t Ën ) 640 cÚ¡ ušt16_t mš_Ën = ( pdu [0]è+ ( hªdË ); 642 ià( pdu =ð NULL ) 645 ià( vËn > Ën - mš_Ën ) 646 vËn = Ën - mš_Ën ; 648 pdu [0] = ATT_OP_WRITE_REQ ; 649 `put_Ë16 ( hªdË , & pdu [1]); 651 ià( vËn > 0) { 652 `memýy (& pdu [3], v®ue , vËn ); 653  mš_Ën + vËn ; 656  mš_Ën ; 657 } } 659 ušt16_t $dec_wr™e_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_t * hªdË , 660 ušt8_t * v®ue , size_t * vËn ) 662 cÚ¡ ušt16_t mš_Ën = ( pdu [0]è+ (* hªdË ); 664 ià( pdu =ð NULL ) 667 ià( v®ue =ð NULL || vËn =ðNULL || hªdË == NULL) 670 ià( Ën < mš_Ën ) 673 ià( pdu [0] !ð ATT_OP_WRITE_REQ ) 676 * hªdË = `g‘_Ë16 (& pdu [1]); 677 * vËn = Ën - mš_Ën ; 678 ià(* vËn > 0) 679 `memýy ( v®ue , pdu + mš_Ën , * vËn ); 681  Ën ; 682 } } 684 ušt16_t $’c_wr™e_»¥ ( ušt8_t * pdu ) 686 ià( pdu =ð NULL ) 689 pdu [0] = ATT_OP_WRITE_RESP ; 691  ( pdu [0]); 692 } } 694 ušt16_t $dec_wr™e_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën ) 696 ià( pdu =ð NULL ) 699 ià( pdu [0] !ð ATT_OP_WRITE_RESP ) 702  Ën ; 703 } } 705 ušt16_t $’c_»ad_»q ( ušt16_t hªdË , ušt8_t * pdu , size_t Ën ) 707 ià( pdu =ð NULL ) 711 pdu [0] = ATT_OP_READ_REQ ; 713 `put_Ë16 ( hªdË , & pdu [1]); 716 } } 718 ušt16_t $’c_»ad_blob_»q ( ušt16_t hªdË , ušt16_ˆ off£t , ušt8_t * pdu , 719 size_t Ën ) 721 ià( pdu =ð NULL ) 725 pdu [0] = ATT_OP_READ_BLOB_REQ ; 727 `put_Ë16 ( hªdË , & pdu [1]); 729 `put_Ë16 ( off£t , & pdu [3]); 732 } } 734 ušt16_t $dec_»ad_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_t * hªdË ) 736 cÚ¡ ušt16_t mš_Ën = ( pdu [0]è+ (* hªdË ); 738 ià( pdu =ð NULL ) 741 ià( hªdË =ð NULL ) 744 ià( Ën < mš_Ën ) 747 ià( pdu [0] !ð ATT_OP_READ_REQ ) 750 * hªdË = `g‘_Ë16 (& pdu [1]); 752  mš_Ën ; 753 } } 755 ušt16_t $dec_»ad_blob_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_t * hªdË , 756 ušt16_t * off£t ) 758 cÚ¡ ušt16_t mš_Ën = ( pdu [0]è+ (* hªdË ) + 759 (* off£t ); 761 ià( pdu =ð NULL ) 764 ià( hªdË =ð NULL ) 767 ià( off£t =ð NULL ) 770 ià( Ën < mš_Ën ) 773 ià( pdu [0] !ð ATT_OP_READ_BLOB_REQ ) 776 * hªdË = `g‘_Ë16 (& pdu [1]); 777 * off£t = `g‘_Ë16 (& pdu [3]); 779  mš_Ën ; 780 } } 782 ušt16_t $’c_»ad_»¥ ( ušt8_t * v®ue , size_t vËn , ušt8_ˆ* pdu , size_ˆ Ën ) 784 ià( pdu =ð NULL ) 790 ià( vËn > Ën - 1) 791 vËn = Ën - 1; 793 pdu [0] = ATT_OP_READ_RESP ; 795 `memýy ( pdu + 1, v®ue , vËn ); 797  vËn + 1; 798 } } 800 ušt16_t $’c_»ad_blob_»¥ ( ušt8_t * v®ue , size_t vËn , ušt16_t off£t , 801 ušt8_t * pdu , size_t Ën ) 803 ià( pdu =ð NULL ) 806 vËn -ð off£t ; 807 ià( vËn > Ën - 1) 808 vËn = Ën - 1; 810 pdu [0] = ATT_OP_READ_BLOB_RESP ; 812 `memýy ( pdu + 1, & v®ue [ off£t ], vËn ); 814  vËn + 1; 815 } } 817 ssize_t $dec_»ad_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën , ušt8_ˆ* v®ue , 818 size_t vËn ) 820 ià( pdu =ð NULL ) 821  - EINVAL ; 823 ià( pdu [0] !ð ATT_OP_READ_RESP ) 824  - EINVAL ; 826 ià( v®ue =ð NULL ) 827  Ën - 1; 829 ià( vËn < ( Ën - 1)) 830  - ENOBUFS ; 832 `memýy ( v®ue , pdu + 1, Ën - 1); 834  Ën - 1; 835 } } 837 ušt16_t $’c_”rÜ_»¥ ( ušt8_t Ýcode , ušt16_t hªdË , ušt8_ˆ ¡©us , 838 ušt8_t * pdu , size_t Ën ) 841 pdu [0] = ATT_OP_ERROR ; 843 pdu [1] = Ýcode ; 845 `put_Ë16 ( hªdË , & pdu [2]); 847 pdu [4] = ¡©us ; 850 } } 852 ušt16_t $’c_fšd_šfo_»q ( ušt16_t ¡¬t , ušt16_ˆ ’d , ušt8_t * pdu , 853 size_t Ën ) 855 ià( pdu =ð NULL ) 859 pdu [0] = ATT_OP_FIND_INFO_REQ ; 861 `put_Ë16 ( ¡¬t , & pdu [1]); 863 `put_Ë16 ( ’d , & pdu [3]); 866 } } 868 ušt16_t $dec_fšd_šfo_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_t * ¡¬t , 869 ušt16_t * ’d ) 871 cÚ¡ ušt16_t mš_Ën = ( pdu [0]è+ (* ¡¬t è+ (* ’d ); 873 ià( pdu =ð NULL ) 876 ià( Ën < mš_Ën ) 879 ià( ¡¬t =ð NULL || ’d == NULL) 882 ià( pdu [0] !ð ATT_OP_FIND_INFO_REQ ) 885 * ¡¬t = `g‘_Ë16 (& pdu [1]); 886 * ’d = `g‘_Ë16 (& pdu [3]); 888  mš_Ën ; 889 } } 891 ušt16_t $’c_fšd_šfo_»¥ ( ušt8_t fÜm© ,  ©t_d©a_li¡ * li¡ , 892 ušt8_t * pdu , size_t Ën ) 894 ušt8_t * ±r ; 895 size_t i , w ; 897 ià( pdu =ð NULL ) 900 ià( li¡ =ð NULL ) 903 ià( Ën < li¡ ->ËÀ+ ( ušt8_t ) * 2) 906 pdu [0] = ATT_OP_FIND_INFO_RESP ; 907 pdu [1] = fÜm© ; 908 ±r = (*è& pdu [2]; 910  i = 0, w = 2; i < li¡ -> num && w +†i¡-> Ën <=†en; i++) { 911 `memýy ( ±r , li¡ -> d©a [ i ],†i¡-> Ën ); 912 ±r +ð li¡ -> Ën ; 913 w +ð li¡ -> Ën ; 916  w ; 917 } } 919  ©t_d©a_li¡ * $dec_fšd_šfo_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën , 920 ušt8_t * fÜm© ) 922  ©t_d©a_li¡ * li¡ ; 923 ušt8_t * ±r ; 924 ušt16_t –’ , num ; 925  i ; 927 ià( pdu =ð NULL ) 930 ià( fÜm© =ð NULL ) 933 ià( pdu [0] !ð ATT_OP_FIND_INFO_RESP ) 936 * fÜm© = pdu [1]; 937 –’ = ( pdu [0]è+ (* fÜm© ); 938 ià(* fÜm© == 0x01) 939 –’ += 2; 940 ià(* fÜm© == 0x02) 941 –’ += 16; 943 num = ( Ën - 2è/ –’ ; 945 ±r = (*è& pdu [2]; 947 li¡ = `©t_d©a_li¡_®loc ( num , –’ ); 948 ià( li¡ =ð NULL ) 949  NULL ; 951  i = 0; i < num ; i++) { 952 `memýy ( li¡ -> d©a [ i ], ±r ,†i¡-> Ën ); 953 ±r +ð li¡ -> Ën ; 956  li¡ ; 957 } } 959 ušt16_t $’c_nÙifiÿtiÚ ( ušt16_t hªdË , ušt8_t * v®ue , size_t vËn , 960 ušt8_t * pdu , size_t Ën ) 962 cÚ¡ ušt16_t mš_Ën = ( pdu [0]) + (uint16_t); 964 ià( pdu =ð NULL ) 967 ià( Ën < ( vËn + mš_Ën )) 970 pdu [0] = ATT_OP_HANDLE_NOTIFY ; 971 `put_Ë16 ( hªdË , & pdu [1]); 972 `memýy (& pdu [3], v®ue , vËn ); 974  vËn + mš_Ën ; 975 } } 977 ušt16_t $’c_šdiÿtiÚ ( ušt16_t hªdË , ušt8_t * v®ue , size_t vËn , 978 ušt8_t * pdu , size_t Ën ) 980 cÚ¡ ušt16_t mš_Ën = ( pdu [0]) + (uint16_t); 982 ià( pdu =ð NULL ) 985 ià( Ën < ( vËn + mš_Ën )) 988 pdu [0] = ATT_OP_HANDLE_IND ; 989 `put_Ë16 ( hªdË , & pdu [1]); 990 `memýy (& pdu [3], v®ue , vËn ); 992  vËn + mš_Ën ; 993 } } 995 ušt16_t $dec_šdiÿtiÚ (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_t * hªdË , 996 ušt8_t * v®ue , size_t vËn ) 998 cÚ¡ ušt16_t mš_Ën = ( pdu [0]) + (uint16_t); 999 ušt16_t dËn ; 1001 ià( pdu =ð NULL ) 1004 ià( pdu [0] !ð ATT_OP_HANDLE_IND ) 1007 ià( Ën < mš_Ën ) 1010 dËn = `MIN ( Ën - mš_Ën , vËn ); 1012 ià( hªdË ) 1013 * hªdË = `g‘_Ë16 (& pdu [1]); 1015 `memýy ( v®ue , & pdu [3], dËn ); 1017  dËn ; 1018 } } 1020 ušt16_t $’c_cÚfœm©iÚ ( ušt8_t * pdu , size_t Ën ) 1022 ià( pdu =ð NULL ) 1026 pdu [0] = ATT_OP_HANDLE_CNF ; 1029 } } 1031 ušt16_t $’c_mtu_»q ( ušt16_t mtu , ušt8_t * pdu , size_t Ën ) 1033 ià( pdu =ð NULL ) 1037 pdu [0] = ATT_OP_MTU_REQ ; 1039 `put_Ë16 ( mtu , & pdu [1]); 1042 } } 1044 ušt16_t $dec_mtu_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_t * mtu ) 1046 cÚ¡ ušt16_t mš_Ën = ( pdu [0]è+ (* mtu ); 1048 ià( pdu =ð NULL ) 1051 ià( mtu =ð NULL ) 1054 ià( Ën < mš_Ën ) 1057 ià( pdu [0] !ð ATT_OP_MTU_REQ ) 1060 * mtu = `g‘_Ë16 (& pdu [1]); 1062  mš_Ën ; 1063 } } 1065 ušt16_t $’c_mtu_»¥ ( ušt16_t mtu , ušt8_t * pdu , size_t Ën ) 1067 ià( pdu =ð NULL ) 1071 pdu [0] = ATT_OP_MTU_RESP ; 1073 `put_Ë16 ( mtu , & pdu [1]); 1076 } } 1078 ušt16_t $dec_mtu_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_t * mtu ) 1080 cÚ¡ ušt16_t mš_Ën = ( pdu [0]è+ (* mtu ); 1082 ià( pdu =ð NULL ) 1085 ià( mtu =ð NULL ) 1088 ià( Ën < mš_Ën ) 1091 ià( pdu [0] !ð ATT_OP_MTU_RESP ) 1094 * mtu = `g‘_Ë16 (& pdu [1]); 1096  mš_Ën ; 1097 } } 1099 ušt16_t $’c_´•_wr™e_»q ( ušt16_t hªdË , ušt16_ˆ off£t , 1100 cÚ¡ ušt8_t * v®ue , size_t vËn , 1101 ušt8_t * pdu , size_t Ën ) 1103 cÚ¡ ušt16_t mš_Ën = ( pdu [0]è+ ( hªdË ) + 1104 ( off£t ); 1106 ià( pdu =ð NULL ) 1109 ià( vËn > Ën - mš_Ën ) 1110 vËn = Ën - mš_Ën ; 1112 pdu [0] = ATT_OP_PREP_WRITE_REQ ; 1113 `put_Ë16 ( hªdË , & pdu [1]); 1114 `put_Ë16 ( off£t , & pdu [3]); 1116 ià( vËn > 0) { 1117 `memýy (& pdu [5], v®ue , vËn ); 1118  mš_Ën + vËn ; 1121  mš_Ën ; 1122 } } 1124 ušt16_t $dec_´•_wr™e_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_t * hªdË , 1125 ušt16_t * off£t , ušt8_t * v®ue , size_t * vËn ) 1127 cÚ¡ ušt16_t mš_Ën = ( pdu [0]è+ (* hªdË ) + 1128 (* off£t ); 1130 ià( pdu =ð NULL ) 1133 ià( hªdË =ð NULL || off£t =ðNULL || v®ue =ðNULL || vËn == NULL) 1136 ià( Ën < mš_Ën ) 1139 ià( pdu [0] !ð ATT_OP_PREP_WRITE_REQ ) 1142 * hªdË = `g‘_Ë16 (& pdu [1]); 1143 * off£t = `g‘_Ë16 (& pdu [3]); 1145 * vËn = Ën - mš_Ën ; 1146 ià(* vËn > 0) 1147 `memýy ( v®ue , pdu + mš_Ën , * vËn ); 1149  Ën ; 1150 } } 1152 ušt16_t $’c_´•_wr™e_»¥ ( ušt16_t hªdË , ušt16_ˆ off£t , 1153 cÚ¡ ušt8_t * v®ue , size_t vËn , 1154 ušt8_t * pdu , size_t Ën ) 1156 cÚ¡ ušt16_t mš_Ën = ( pdu [0]è+ ( hªdË ) + 1157 ( off£t ); 1159 ià( pdu =ð NULL ) 1162 ià( vËn > Ën - mš_Ën ) 1163 vËn = Ën - mš_Ën ; 1165 pdu [0] = ATT_OP_PREP_WRITE_RESP ; 1166 `put_Ë16 ( hªdË , & pdu [1]); 1167 `put_Ë16 ( off£t , & pdu [3]); 1169 ià( vËn > 0) { 1170 `memýy (& pdu [5], v®ue , vËn ); 1171  mš_Ën + vËn ; 1174  mš_Ën ; 1175 } } 1177 ušt16_t $dec_´•_wr™e_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_t * hªdË , 1178 ušt16_t * off£t , ušt8_t * v®ue , size_t * vËn ) 1180 cÚ¡ ušt16_t mš_Ën = ( pdu [0]è+ (* hªdË ) + 1181 (* off£t ); 1183 ià( pdu =ð NULL ) 1186 ià( hªdË =ð NULL || off£t =ðNULL || v®ue =ðNULL || vËn == NULL) 1189 ià( Ën < mš_Ën ) 1192 ià( pdu [0] !ð ATT_OP_PREP_WRITE_REQ ) 1195 * hªdË = `g‘_Ë16 (& pdu [1]); 1196 * off£t = `g‘_Ë16 (& pdu [3]); 1197 * vËn = Ën - mš_Ën ; 1198 ià(* vËn > 0) 1199 `memýy ( v®ue , pdu + mš_Ën , * vËn ); 1201  Ën ; 1202 } } 1204 ušt16_t $’c_exec_wr™e_»q ( ušt8_t æags , ušt8_ˆ* pdu , size_t Ën ) 1206 ià( pdu =ð NULL ) 1209 ià( æags > 1) 1213 pdu [0] = ATT_OP_EXEC_WRITE_REQ ; 1215 pdu [1] = æags ; 1218 } } 1220 ušt16_t $dec_exec_wr™e_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt8_ˆ* æags ) 1222 cÚ¡ ušt16_t mš_Ën = ( pdu [0]è+ (* æags ); 1224 ià( pdu =ð NULL ) 1227 ià( æags =ð NULL ) 1230 ià( Ën < mš_Ën ) 1233 ià( pdu [0] !ð ATT_OP_EXEC_WRITE_REQ ) 1236 * æags = pdu [1]; 1238  mš_Ën ; 1239 } } 1241 ušt16_t $’c_exec_wr™e_»¥ ( ušt8_t * pdu ) 1243 ià( pdu =ð NULL ) 1247 pdu [0] = ATT_OP_EXEC_WRITE_RESP ; 1250 } } 1252 ušt16_t $dec_exec_wr™e_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën ) 1254 cÚ¡ ušt16_t mš_Ën = ( pdu [0]); 1256 ià( pdu =ð NULL ) 1259 ià( Ën < mš_Ën ) 1262 ià( pdu [0] !ð ATT_OP_EXEC_WRITE_RESP ) 1265  Ën ; 1266 } } @attrib/att.h 25  ~"¤c/sh¬ed/üy±o.h " 28  #ATT_SIGNATURE_LEN 12 ) 31  #ATT_OP_ERROR 0x01 ) 32  #ATT_OP_MTU_REQ 0x02 ) 33  #ATT_OP_MTU_RESP 0x03 ) 34  #ATT_OP_FIND_INFO_REQ 0x04 ) 35  #ATT_OP_FIND_INFO_RESP 0x05 ) 36  #ATT_OP_FIND_BY_TYPE_REQ 0x06 ) 37  #ATT_OP_FIND_BY_TYPE_RESP 0x07 ) 38  #ATT_OP_READ_BY_TYPE_REQ 0x08 ) 39  #ATT_OP_READ_BY_TYPE_RESP 0x09 ) 40  #ATT_OP_READ_REQ 0x0A ) 41  #ATT_OP_READ_RESP 0x0B ) 42  #ATT_OP_READ_BLOB_REQ 0x0C ) 43  #ATT_OP_READ_BLOB_RESP 0x0D ) 44  #ATT_OP_READ_MULTI_REQ 0x0E ) 45  #ATT_OP_READ_MULTI_RESP 0x0F ) 46  #ATT_OP_READ_BY_GROUP_REQ 0x10 ) 47  #ATT_OP_READ_BY_GROUP_RESP 0x11 ) 48  #ATT_OP_WRITE_REQ 0x12 ) 49  #ATT_OP_WRITE_RESP 0x13 ) 50  #ATT_OP_WRITE_CMD 0x52 ) 51  #ATT_OP_PREP_WRITE_REQ 0x16 ) 52  #ATT_OP_PREP_WRITE_RESP 0x17 ) 53  #ATT_OP_EXEC_WRITE_REQ 0x18 ) 54  #ATT_OP_EXEC_WRITE_RESP 0x19 ) 55  #ATT_OP_HANDLE_NOTIFY 0x1B ) 56  #ATT_OP_HANDLE_IND 0x1D ) 57  #ATT_OP_HANDLE_CNF 0x1E ) 58  #ATT_OP_SIGNED_WRITE_CMD 0xD2 ) 61  #ATT_ECODE_INVALID_HANDLE 0x01 ) 62  #ATT_ECODE_READ_NOT_PERM 0x02 ) 63  #ATT_ECODE_WRITE_NOT_PERM 0x03 ) 64  #ATT_ECODE_INVALID_PDU 0x04 ) 65  #ATT_ECODE_AUTHENTICATION 0x05 ) 66  #ATT_ECODE_REQ_NOT_SUPP 0x06 ) 67  #ATT_ECODE_INVALID_OFFSET 0x07 ) 68  #ATT_ECODE_AUTHORIZATION 0x08 ) 69  #ATT_ECODE_PREP_QUEUE_FULL 0x09 ) 70  #ATT_ECODE_ATTR_NOT_FOUND 0x0A ) 71  #ATT_ECODE_ATTR_NOT_LONG 0x0B ) 72  #ATT_ECODE_INSUFF_ENCR_KEY_SIZE 0x0C ) 73  #ATT_ECODE_INVAL_ATTR_VALUE_LEN 0x0D ) 74  #ATT_ECODE_UNLIKELY 0x0E ) 75  #ATT_ECODE_INSUFF_ENC 0x0F ) 76  #ATT_ECODE_UNSUPP_GRP_TYPE 0x10 ) 77  #ATT_ECODE_INSUFF_RESOURCES 0x11 ) 79  #ATT_ECODE_IO 0x80 ) 80  #ATT_ECODE_TIMEOUT 0x81 ) 81  #ATT_ECODE_ABORTED 0x82 ) 83  #ATT_MAX_VALUE_LEN 512 ) 84  #ATT_DEFAULT_L2CAP_MTU 48 ) 85  #ATT_DEFAULT_LE_MTU 23 ) 87  #ATT_CID 4 ) 88  #ATT_PSM 31 ) 91  #ATT_CANCEL_ALL_PREP_WRITES 0x00 ) 92  #ATT_WRITE_ALL_PREP_WRITES 0x01 ) 95  #ATT_FIND_INFO_RESP_FMT_16BIT 0x01 ) 96  #ATT_FIND_INFO_RESP_FMT_128BIT 0x02 ) 98  s©t_d©a_li¡ { 99 ušt16_t mnum ; 100 ušt16_t mËn ; 101 ušt8_t ** md©a ; 104  s©t_¿nge { 105 ušt16_t m¡¬t ; 106 ušt16_t m’d ; 109 #ifdeà __TIZEN_PATCH__ 110  šlše bt_uuid_t $©t_g‘_uuid (cÚ¡ * ±r , ušt8_t Ën ) 112 bt_uuid_t uuid ; 113 ià( Ën == 2) { 115 `g‘_uuid ( BT_UUID16 , ±r , & uuid ); 116 } ià( Ën == 4) { 118 `g‘_uuid ( BT_UUID32 , ±r , & uuid ); 121 `g‘_uuid ( BT_UUID128 , ±r , & uuid ); 123  uuid ; 124 } } 127  ©t_d©a_li¡ * ©t_d©a_li¡_®loc ( ušt16_t num , ušt16_ˆ Ën ); 128  ©t_d©a_li¡_ä“ ( ©t_d©a_li¡ * li¡ ); 130 cÚ¡ * ©t_ecode2¡r ( ušt8_t ¡©us ); 131 ušt16_t ’c_»ad_by_g½_»q (ušt16_ˆ ¡¬t , ušt16_ˆ ’d , bt_uuid_t * uuid , 132 ušt8_t * pdu , size_t Ën ); 133 ušt16_t dec_»ad_by_g½_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_ˆ* ¡¬t , 134 ušt16_t * ’d , bt_uuid_t * uuid ); 135 ušt16_t ’c_»ad_by_g½_»¥ ( ©t_d©a_li¡ * li¡ , ušt8_t * pdu , 136 size_t Ën ); 137 ušt16_t ’c_fšd_by_ty³_»q (ušt16_ˆ ¡¬t , ušt16_ˆ ’d , bt_uuid_t * uuid , 138 cÚ¡ ušt8_t * v®ue , size_t vËn , ušt8_ˆ* pdu , 139 size_t Ën ); 140 ušt16_t dec_fšd_by_ty³_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_ˆ* ¡¬t , 141 ušt16_t * ’d , bt_uuid_t * uuid , ušt8_t * v®ue , size_t * vËn ); 142 ušt16_t ’c_fšd_by_ty³_»¥ ( GSLi¡ * ¿nges , ušt8_t * pdu , size_t Ën ); 143 GSLi¡ * dec_fšd_by_ty³_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën ); 144  ©t_d©a_li¡ * dec_»ad_by_g½_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën ); 145 ušt16_t ’c_»ad_by_ty³_»q (ušt16_ˆ ¡¬t , ušt16_ˆ ’d , bt_uuid_t * uuid , 146 ušt8_t * pdu , size_t Ën ); 147 ušt16_t dec_»ad_by_ty³_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_ˆ* ¡¬t , 148 ušt16_t * ’d , bt_uuid_t * uuid ); 149 ušt16_t ’c_»ad_by_ty³_»¥ ( ©t_d©a_li¡ * li¡ , ušt8_t * pdu , 150 size_t Ën ); 151 ušt16_t ’c_wr™e_cmd (ušt16_ˆ hªdË , cÚ¡ ušt8_t * v®ue , size_t vËn , 152 ušt8_t * pdu , size_t Ën ); 153 ušt16_t dec_wr™e_cmd (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_ˆ* hªdË , 154 ušt8_t * v®ue , size_t * vËn ); 155 ušt16_t ’c_sigÃd_wr™e_cmd (ušt16_ˆ hªdË , 156 cÚ¡ ušt8_t * v®ue , size_t vËn , 157  bt_üy±o * üy±o , 158 cÚ¡ ušt8_t c¤k [16], 159 ušt32_t sign_út , 160 ušt8_t * pdu , size_t Ën ); 161 ušt16_t dec_sigÃd_wr™e_cmd (cÚ¡ ušt8_t * pdu , size_t Ën , 162 ušt16_t * hªdË , 163 ušt8_t * v®ue , size_t * vËn , 164 ušt8_t sigÇtu» [12]); 165  ©t_d©a_li¡ * dec_»ad_by_ty³_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën ); 166 ušt16_t ’c_wr™e_»q (ušt16_ˆ hªdË , cÚ¡ ušt8_t * v®ue , size_t vËn , 167 ušt8_t * pdu , size_t Ën ); 168 ušt16_t dec_wr™e_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_ˆ* hªdË , 169 ušt8_t * v®ue , size_t * vËn ); 170 ušt16_t ’c_wr™e_»¥ ( ušt8_t * pdu ); 171 ušt16_t dec_wr™e_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën ); 172 ušt16_t ’c_»ad_»q (ušt16_ˆ hªdË , ušt8_t * pdu , size_t Ën ); 173 ušt16_t ’c_»ad_blob_»q (ušt16_ˆ hªdË , ušt16_ˆ off£t , ušt8_t * pdu , 174 size_t Ën ); 175 ušt16_t dec_»ad_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_ˆ* hªdË ); 176 ušt16_t dec_»ad_blob_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_ˆ* hªdË , 177 ušt16_t * off£t ); 178 ušt16_t ’c_»ad_»¥ ( ušt8_t * v®ue , size_t vËn , ušt8_ˆ* pdu , size_ˆ Ën ); 179 ušt16_t ’c_»ad_blob_»¥ ( ušt8_t * v®ue , size_t vËn , ušt16_ˆ off£t , 180 ušt8_t * pdu , size_t Ën ); 181 ssize_t dec_»ad_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën , ušt8_ˆ* v®ue , 182 size_t vËn ); 183 ušt16_t ’c_”rÜ_»¥ ( ušt8_t Ýcode , ušt16_ˆ hªdË , ušt8_ˆ ¡©us , 184 ušt8_t * pdu , size_t Ën ); 185 ušt16_t ’c_fšd_šfo_»q (ušt16_ˆ ¡¬t , ušt16_ˆ ’d , ušt8_t * pdu , 186 size_t Ën ); 187 ušt16_t dec_fšd_šfo_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_ˆ* ¡¬t , 188 ušt16_t * ’d ); 189 ušt16_t ’c_fšd_šfo_»¥ ( ušt8_t fÜm© ,  ©t_d©a_li¡ * li¡ , 190 ušt8_t * pdu , size_t Ën ); 191  ©t_d©a_li¡ * dec_fšd_šfo_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën , 192 ušt8_t * fÜm© ); 193 ušt16_t ’c_nÙifiÿtiÚ (ušt16_ˆ hªdË , ušt8_t * v®ue , size_t vËn , 194 ušt8_t * pdu , size_t Ën ); 195 ušt16_t ’c_šdiÿtiÚ (ušt16_ˆ hªdË , ušt8_t * v®ue , size_t vËn , 196 ušt8_t * pdu , size_t Ën ); 197 ušt16_t dec_šdiÿtiÚ (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_ˆ* hªdË , 198 ušt8_t * v®ue , size_t vËn ); 199 ušt16_t ’c_cÚfœm©iÚ ( ušt8_t * pdu , size_t Ën ); 201 ušt16_t ’c_mtu_»q (ušt16_ˆ mtu , ušt8_t * pdu , size_t Ën ); 202 ušt16_t dec_mtu_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_ˆ* mtu ); 203 ušt16_t ’c_mtu_»¥ (ušt16_ˆ mtu , ušt8_t * pdu , size_t Ën ); 204 ušt16_t dec_mtu_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_ˆ* mtu ); 206 ušt16_t ’c_´•_wr™e_»q (ušt16_ˆ hªdË , ušt16_ˆ off£t , 207 cÚ¡ ušt8_t * v®ue , size_t vËn , 208 ušt8_t * pdu , size_t Ën ); 209 ušt16_t dec_´•_wr™e_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_ˆ* hªdË , 210 ušt16_t * off£t , ušt8_t * v®ue , size_t * vËn ); 211 ušt16_t ’c_´•_wr™e_»¥ (ušt16_ˆ hªdË , ušt16_ˆ off£t , 212 cÚ¡ ušt8_t * v®ue , size_t vËn , 213 ušt8_t * pdu , size_t Ën ); 214 ušt16_t dec_´•_wr™e_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën , ušt16_ˆ* hªdË , 215 ušt16_t * off£t , ušt8_t * v®ue , 216 size_t * vËn ); 217 ušt16_t ’c_exec_wr™e_»q ( ušt8_t æags , ušt8_ˆ* pdu , size_t Ën ); 218 ušt16_t dec_exec_wr™e_»q (cÚ¡ ušt8_t * pdu , size_t Ën , ušt8_ˆ* æags ); 219 ušt16_t ’c_exec_wr™e_»¥ ( ušt8_t * pdu ); 220 ušt16_t dec_exec_wr™e_»¥ (cÚ¡ ušt8_t * pdu , size_t Ën ); 221 #ifdeà __TIZEN_PATCH__ 222  g‘_uuid ( ušt8_t ty³ , cÚ¡ * v® , bt_uuid_t * uuid ); @attrib/client.c 25 #ifdeà __TIZEN_PATCH__ 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<”ºo.h > 31  ~<¡dlib.h > 32  ~<¡dio.h > 33  ~<¡dšt.h > 34  ~<¡dboÞ.h > 35  ~<¡ršg.h > 36  ~ 38  ~ 40  ~"lib/uuid.h " 41  ~"¤c/ad­‹r.h " 42  ~"¤c/deviû.h " 43  ~"¤c/log.h " 44  ~"gdbus/gdbus.h " 45  ~"¤c/”rÜ.h " 46  ~"¤c/dbus-commÚ.h " 47  ~"btio/btio.h " 48  ~"¤c/¡Üage.h " 51  ~"©t.h " 52  ~"g©Œib.h " 53  ~"¤c/©tio.h " 54  ~"g©t.h " 55  ~"þ›Á.h " 56  ~"¤c/sh¬ed/utž.h " 58  #CHAR_INTERFACE "Üg.bluez.Ch¬aù”i¡ic" ) 60  #ATT_MAX_MTU 256 ) 61  sfÜm© { 62 gušt8 mfÜm© ; 63 gušt8 mexpÚ’t ; 64 gušt16 mun™ ; 65 gušt8 mÇme¥aû ; 66 gušt16 mdesc ; 67 } __©Œibu‹__ (( ·cked )); 69  squ”y { 70 DBusMes§ge * mmsg ; 71 GSLi¡ * mli¡ ; 74  sg©t_£rviû { 75  btd_deviû * mdev ; 76  g©t_´im¬y * m´im ; 77 DBusCÚÃùiÚ * mcÚn ; 78 GA‰rib * m©Œib ; 79 gušt m©tioid ; 80  mpsm ; 81 * m·th ; 82 GSLi¡ * mch¬s ; 83 GSLi¡ * mofæše_ch¬s ; 84 GSLi¡ * mw©ch”s ; 85  qu”y * mqu”y ; 88  sch¬aù”i¡ic { 89  g©t_£rviû * mg©t ; 90 * m·th ; 91 ušt16_t mhªdË ; 92 ušt16_t m’d ; 93 ušt8_t m³rm ; 94  mty³ [ MAX_LEN_UUID_STR + 1]; 95 * mÇme ; 96 * mdesc ; 97  fÜm© * mfÜm© ; 98 ušt8_t * mv®ue ; 99 size_t mvËn ; 102  squ”y_d©a { 103  g©t_£rviû * mg©t ; 104  ch¬aù”i¡ic * mchr ; 105 ušt16_t mhªdË ; 108  sw©ch” { 109 gušt mid ; 110 * mÇme ; 111 * m·th ; 112  g©t_£rviû * mg©t ; 116 mBT_IO_L2CAP , 117 } tBtIOTy³ ; 119  sdiscov”_ch¬eù”i¡ics { 120 GA‰rib * m©Œib ; 121 bt_uuid_t * muuid ; 122 ušt16_t m’d ; 123 GSLi¡ * mch¬aù”i¡ics ; 124 g©t_cb_t mcb ; 125 * mu£r_d©a ; 128  GSLi¡ * gg©t_£rviûs = NULL ; 130  $ch¬aù”i¡ic_ä“ (* u£r_d©a ) 132  ch¬aù”i¡ic * chr = u£r_d©a ; 134 `g_ä“ ( chr -> ·th ); 135 `g_ä“ ( chr -> desc ); 136 `g_ä“ ( chr -> fÜm© ); 137 `g_ä“ ( chr -> v®ue ); 138 `g_ä“ ( chr -> Çme ); 139 `g_ä“ ( chr ); 140 } } 142  $w©ch”_ä“ (* u£r_d©a ) 144  w©ch” *w©ch” = u£r_d©a ; 146 `g_ä“ ( w©ch” -> ·th ); 147 `g_ä“ ( w©ch” -> Çme ); 148 `g_ä“ ( w©ch” ); 149 } } 151  $g©t_£rviû_ä“ ( g©t_£rviû * g©t ) 153 `g_¦i¡_ä“_fuÎ ( g©t -> w©ch”s , w©ch”_ä“ ); 154 `g_¦i¡_ä“_fuÎ ( g©t -> ch¬s , ch¬aù”i¡ic_ä“ ); 155 `g_¦i¡_ä“ ( g©t -> ofæše_ch¬s ); 156 `g_ä“ ( g©t -> ·th ); 157 `btd_deviû_uÄef ( g©t -> dev ); 158 `dbus_cÚÃùiÚ_uÄef ( g©t -> cÚn ); 159 `g_ä“ ( g©t ); 160 } } 162  $»move_©tio ( g©t_£rviû * g©t ) 164 ià( g©t -> ofæše_ch¬s || g©t-> w©ch”s || g©t-> qu”y ) 167 ià( g©t -> ©tioid ) { 168 `btd_deviû_»move_©tio_ÿÎback ( g©t -> dev , g©t-> ©tioid ); 169 g©t -> ©tioid = 0; 171 } } 173  $g©t_g‘_add»ss ( g©t_£rviû * g©t , bdaddr_t * sba , 174 bdaddr_t * dba , ušt8_t * bdaddr_ty³ ) 176  btd_deviû * deviû = g©t -> dev ; 177  btd_ad­‹r * ad­‹r ; 179 ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 180 sba = ( bdaddr_t *) `btd_ad­‹r_g‘_add»ss ( ad­‹r ); 181 dba = ( bdaddr_t *) `deviû_g‘_add»ss ( deviû ); 182 * bdaddr_ty³ = `btd_deviû_g‘_bdaddr_ty³ ( deviû ); 183 } } 185  $ch¬aù”i¡ic_hªdË_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 187 cÚ¡  ch¬aù”i¡ic * chr = a ; 188 ušt16_t hªdË = `GPOINTER_TO_UINT ( b ); 190  chr -> hªdË - handle; 191 } } 193  $w©ch”_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 195 cÚ¡  w©ch” *w©ch” = a ; 196 cÚ¡  w©ch” * m©ch = b ; 197  »t ; 199 »t = `g_¡rcmp0 ( w©ch” -> Çme , m©ch ->name); 200 ià( »t != 0) 201  »t ; 203  `g_¡rcmp0 ( w©ch” -> ·th , m©ch ->path); 204 } } 207  $w©ch”_ex™ ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 209  w©ch” *w©ch” = u£r_d©a ; 210  g©t_£rviû * g©t = w©ch” ->gatt; 212 `DBG ("% w©ch” % ex™ed", g©t -> ·th , w©ch” -> Çme ); 214 g©t -> w©ch”s = `g_¦i¡_»move (g©t->w©ch”s, w©ch” ); 215 `g_dbus_»move_w©ch ( g©t -> cÚn , w©ch” -> id ); 216 `»move_©tio ( g©t ); 217 } } 219  $ch¬aù”i¡ic_£t_v®ue ( ch¬aù”i¡ic * chr , 220 cÚ¡ ušt8_t * v®ue , size_t vËn ) 222 chr -> v®ue = `g_Œy_»®loc (chr->v®ue, vËn ); 223 ià( chr -> v®ue =ð NULL ) 224  - ENOMEM ; 226 `memýy ( chr -> v®ue , v®ue, vËn ); 227 chr -> vËn = vlen; 230 } } 232  $upd©e_w©ch”s ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 234  w©ch” * w = d©a ; 235  ch¬aù”i¡ic * chr = u£r_d©a ; 236 DBusCÚÃùiÚ * cÚn = w -> g©t ->conn; 237 DBusMes§ge * msg ; 239 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( w -> Çme , w-> ·th , 241 ià( msg =ð NULL ) 244 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_OBJECT_PATH , & chr -> ·th , 245 DBUS_TYPE_ARRAY , DBUS_TYPE_BYTE , 246 & chr -> v®ue , chr-> vËn , DBUS_TYPE_INVALID ); 248 `dbus_mes§ge_£t_no_»¶y ( msg , TRUE ); 249 `g_dbus_£nd_mes§ge ( cÚn , msg ); 250 } } 252  $ev’ts_hªdËr (cÚ¡ ušt8_t * pdu , ušt16_t Ën , 253 gpoš‹r u£r_d©a ) 255  g©t_£rviû * g©t = u£r_d©a ; 256  ch¬aù”i¡ic * chr ; 257 GSLi¡ * l ; 258 ušt8_t Ýdu [ ATT_MAX_MTU ]; 259 gušt hªdË ; 260 ušt16_t Þ’ ; 262 ià( Ën < 3) { 263 `DBG ("Malformed‚otification/indication…acket (opcode 0x%02x)", 264 pdu [0]); 268 hªdË = `g‘_Ë16 (& pdu [1]); 270 l = `g_¦i¡_fšd_cu¡om ( g©t -> ch¬s , `GUINT_TO_POINTER ( hªdË ), 271 ch¬aù”i¡ic_hªdË_cmp ); 272 ià(! l ) 275 chr = l -> d©a ; 277 ià( chr =ð NULL ) { 278 `DBG ("A‰ribu‹ hªdË 0x%02x‚Ù found", hªdË ); 282  pdu [0]) { 283  ATT_OP_HANDLE_IND : 284 Þ’ = `’c_cÚfœm©iÚ ( Ýdu , (opdu)); 285 `g_©Œib_£nd ( g©t -> ©Œib , 0, Ýdu , Þ’ , 286 NULL , NULL, NULL); 287  ATT_OP_HANDLE_NOTIFY : 288 ià( `ch¬aù”i¡ic_£t_v®ue ( chr , & pdu [3], Ën - 3) < 0) 289 `DBG ("Cª'ˆchªgCh¬aù”i¡iø0x%02x", hªdË ); 291 `g_¦i¡_fÜ—ch ( g©t -> w©ch”s , upd©e_w©ch”s , chr ); 294 } } 296  $ofæše_ch¬_wr™‹n ( gpoš‹r u£r_d©a ) 298  ch¬aù”i¡ic * chr = u£r_d©a ; 299  g©t_£rviû * g©t = chr ->gatt; 301 g©t -> ofæše_ch¬s = `g_¦i¡_»move (g©t->ofæše_ch¬s, chr ); 303 `»move_©tio ( g©t ); 304 } } 306  $ofæše_ch¬_wr™e ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 308  ch¬aù”i¡ic * chr = d©a ; 309 GA‰rib * ©Œib = u£r_d©a ; 311 `g©t_wr™e_cmd ( ©Œib , chr -> hªdË , chr-> v®ue , chr-> vËn , 312 ofæše_ch¬_wr™‹n , chr ); 313 } } 315  ch¬_discov”ed_cb ( ušt8_t ¡©us , GSLi¡ * ch¬aù”i¡ics , 316 * u£r_d©a ); 318  $©tio_cÚÃùed ( GA‰rib * ©Œib , gpoš‹r u£r_d©a ) 320  g©t_£rviû * g©t = u£r_d©a ; 322 g©t -> ©Œib = `g_©Œib_»f (attrib); 324 `g_©Œib_»gi¡” ( g©t -> ©Œib , ATT_OP_HANDLE_NOTIFY , GATTRIB_ALL_HANDLES , 325 ev’ts_hªdËr , g©t , NULL ); 326 `g_©Œib_»gi¡” ( g©t -> ©Œib , ATT_OP_HANDLE_IND , GATTRIB_ALL_HANDLES , 327 ev’ts_hªdËr , g©t , NULL ); 329 `g_¦i¡_fÜ—ch ( g©t -> ofæše_ch¬s , ofæše_ch¬_wr™e , ©Œib ); 331 ià( g©t -> qu”y ) { 332  g©t_´im¬y * ´im = g©t ->prim; 333  qu”y_d©a * qchr ; 335 qchr = `g_¦i¡_Áh_d©a ( g©t -> qu”y -> li¡ , 0); 336 `g©t_discov”_ch¬ ( g©t -> ©Œib , ´im -> ¿nge . ¡¬t , 337 ´im -> ¿nge . ’d , NULL , 338 ch¬_discov”ed_cb , qchr ); 340 } } 342  $©tio_discÚÃùed ( gpoš‹r u£r_d©a ) 344  g©t_£rviû * g©t = u£r_d©a ; 346 ià( g©t -> qu”y && g©t->qu”y-> msg ) { 347 DBusMes§ge * »¶y ; 349 »¶y = `btd_”rÜ_çžed ( g©t -> qu”y -> msg , 351 `g_dbus_£nd_mes§ge ( g©t -> cÚn , »¶y ); 352 `dbus_mes§ge_uÄef ( g©t -> qu”y -> msg ); 355 ià( g©t -> qu”y ) { 356 `g_¦i¡_ä“_fuÎ ( g©t -> qu”y -> li¡ , g_ä“ ); 357 g©t -> qu”y = NULL ; 360 ià( g©t -> ©Œib ) { 361 `g_©Œib_uÄef ( g©t -> ©Œib ); 362 g©t -> ©Œib = NULL ; 364 } } 366  DBusMes§ge * $»gi¡”_w©ch” ( DBusCÚÃùiÚ * cÚn , 367 DBusMes§ge * msg , * d©a ) 369 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 370  g©t_£rviû * g©t = d©a ; 371  w©ch” *watcher; 372 * ·th ; 374 `DBG ("register_watcher"); 375 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 376 DBUS_TYPE_INVALID )) 377  `btd_”rÜ_šv®id_¬gs ( msg ); 379 w©ch” = `g_Ãw0 (watcher, 1); 380 w©ch” -> Çme = `g_¡rdup ( £nd” ); 381 w©ch” -> g©t = gatt; 382 w©ch” -> ·th = `g_¡rdup (path); 383 w©ch” -> id = `g_dbus_add_discÚÃù_w©ch ( cÚn , £nd” , w©ch”_ex™ , 384 w©ch” , w©ch”_ä“ ); 386 ià( g©t -> ©tioid == 0) 387 g©t -> ©tioid = `btd_deviû_add_©tio_ÿÎback (g©t-> dev , 388 ©tio_cÚÃùed , 389 ©tio_discÚÃùed , 390 g©t ); 392 g©t -> w©ch”s = `g_¦i¡_­³nd (g©t->w©ch”s, w©ch” ); 394  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 395 } } 397  DBusMes§ge * $uÄegi¡”_w©ch” ( DBusCÚÃùiÚ * cÚn , 398 DBusMes§ge * msg , * d©a ) 400 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 401  g©t_£rviû * g©t = d©a ; 402  w©ch” *w©ch”, * m©ch ; 403 GSLi¡ * l ; 404 * ·th ; 405 `DBG ("unregister_watcher"); 407 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 408 DBUS_TYPE_INVALID )) 409  `btd_”rÜ_šv®id_¬gs ( msg ); 411 m©ch = `g_Ãw0 ( w©ch” , 1); 412 m©ch -> Çme = `g_¡rdup ( £nd” ); 413 m©ch -> ·th = `g_¡rdup (path); 414 l = `g_¦i¡_fšd_cu¡om ( g©t -> w©ch”s , m©ch , w©ch”_cmp ); 415 `w©ch”_ä“ ( m©ch ); 416 ià(! l ) 417  `btd_”rÜ_nÙ_authÜized ( msg ); 419 w©ch” = l -> d©a ; 420 g©t -> w©ch”s = `g_¦i¡_»move (g©t->w©ch”s, w©ch” ); 421 `g_dbus_»move_w©ch ( cÚn , w©ch” -> id ); 422 `»move_©tio ( g©t ); 424  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 425 } } 427  $wr™e_ch¬_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 428 gpoš‹r u£r_d©a ) 430  ch¬aù”i¡ic * chr = u£r_d©a ; 431  g©t_£rviû * g©t = chr ->gatt; 432 DBusMes§ge * »¶y ; 434 ià( ¡©us != 0) { 435 cÚ¡ * ¡r = `©t_ecode2¡r ( ¡©us ); 436 `g_´š‹¼ ("Ch¬aù”i¡iøwr™çžed: %s\n", ¡r ); 438 »¶y = `btd_”rÜ_çžed ( g©t -> qu”y -> msg , ¡r ); 439  dÚe ; 442 ià(! `dec_wr™e_»¥ ( pdu , ¶’ )) { 443 `g_´š‹¼ ("Protocolƒrror\n"); 444 »¶y = `btd_”rÜ_çžed ( g©t -> qu”y -> msg , 446  dÚe ; 449 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( g©t -> qu”y -> msg ); 451 dÚe : 452 `dbus_cÚÃùiÚ_£nd ( g©t -> cÚn , »¶y , NULL ); 453 `dbus_cÚÃùiÚ_æush ( g©t -> cÚn ); 454 `dbus_mes§ge_uÄef ( »¶y ); 455 `g_ä“ ( g©t -> qu”y ); 456 g©t -> qu”y = NULL ; 459 } } 461  DBusMes§ge * $£t_v®ue ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 462 DBusMes§geI‹r * ™” ,  ch¬aù”i¡ic * chr ) 464  g©t_£rviû * g©t = chr ->gatt; 465 DBusMes§geI‹r sub ; 466 ušt8_t * v®ue ; 467  Ën ; 469 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY || 470 `dbus_mes§ge_™”_g‘_–em’t_ty³ ( ™” è!ð DBUS_TYPE_BYTE ) 471  `btd_”rÜ_šv®id_¬gs ( msg ); 473 `dbus_mes§ge_™”_»cur£ ( ™” , & sub ); 475 `dbus_mes§ge_™”_g‘_fixed_¬¿y (& sub , & v®ue , & Ën ); 477 `ch¬aù”i¡ic_£t_v®ue ( chr , v®ue , Ën ); 479 ià( g©t -> ©Œib ) 480 `g©t_wr™e_cmd ( g©t -> ©Œib , chr -> hªdË , v®ue , Ën , 481 NULL , NULL); 483 g©t -> ofæše_ch¬s = `g_¦i¡_­³nd (g©t->ofæše_ch¬s, chr ); 485  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 486 } } 488  DBusMes§ge * $£t_´Ý”ty ( DBusCÚÃùiÚ * cÚn , 489 DBusMes§ge * msg , * d©a ) 491  ch¬aù”i¡ic * chr = d©a ; 492 DBusMes§geI‹r ™” ; 493 DBusMes§geI‹r sub ; 494 cÚ¡ * ´Ý”ty ; 496 ià(! `dbus_mes§ge_™”_š™ ( msg , & ™” )) 497  `btd_”rÜ_šv®id_¬gs ( msg ); 499 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_STRING ) 500  `btd_”rÜ_šv®id_¬gs ( msg ); 502 `dbus_mes§ge_™”_g‘_basic (& ™” , & ´Ý”ty ); 503 `dbus_mes§ge_™”_Ãxt (& ™” ); 505 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_VARIANT ) 506  `btd_”rÜ_šv®id_¬gs ( msg ); 508 `dbus_mes§ge_™”_»cur£ (& ™” , & sub ); 509 `dbus_mes§ge_™”_Ãxt (& ™” ); 511 ià( `g_¡r_equ® ("V®ue", ´Ý”ty )) 512  `£t_v®ue ( cÚn , msg , & sub , chr ); 514  `btd_”rÜ_šv®id_¬gs ( msg ); 515 } } 517  DBusMes§ge * $£t_v®ue_»que¡ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 518 DBusMes§geI‹r * ™” ,  ch¬aù”i¡ic * chr ) 520  g©t_£rviû * g©t = chr ->gatt; 521 DBusMes§geI‹r sub ; 522 ušt8_t * v®ue ; 523  Ën ; 524  qu”y *query; 526 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY || 527 `dbus_mes§ge_™”_g‘_–em’t_ty³ ( ™” è!ð DBUS_TYPE_BYTE ) 528  `btd_”rÜ_šv®id_¬gs ( msg ); 530 `dbus_mes§ge_™”_»cur£ ( ™” , & sub ); 532 `dbus_mes§ge_™”_g‘_fixed_¬¿y (& sub , & v®ue , & Ën ); 534 `ch¬aù”i¡ic_£t_v®ue ( chr , v®ue , Ën ); 536 ià( g©t -> ©Œib ) { 537 qu”y = `g_Ãw0 (query, 1); 538 qu”y -> msg = `dbus_mes§ge_»f (msg); 539 g©t -> qu”y = query; 540 `g©t_wr™e_ch¬ ( g©t -> ©Œib , chr -> hªdË , v®ue , Ën , 541 wr™e_ch¬_cb , chr ); 543 g©t -> ofæše_ch¬s = `g_¦i¡_­³nd (g©t->ofæše_ch¬s, chr ); 546  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 547 } } 549  DBusMes§ge * $£t_´Ý”ty_»que¡ ( DBusCÚÃùiÚ * cÚn , 550 DBusMes§ge * msg , * d©a ) 552  ch¬aù”i¡ic * chr = d©a ; 553 DBusMes§geI‹r ™” ; 554 DBusMes§geI‹r sub ; 555 cÚ¡ * ´Ý”ty ; 557 ià(! `dbus_mes§ge_™”_š™ ( msg , & ™” )) 558  `btd_”rÜ_šv®id_¬gs ( msg ); 560 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_STRING ) 561  `btd_”rÜ_šv®id_¬gs ( msg ); 563 `dbus_mes§ge_™”_g‘_basic (& ™” , & ´Ý”ty ); 564 `dbus_mes§ge_™”_Ãxt (& ™” ); 566 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_VARIANT ) 567  `btd_”rÜ_šv®id_¬gs ( msg ); 569 `dbus_mes§ge_™”_»cur£ (& ™” , & sub ); 570 `dbus_mes§ge_™”_Ãxt (& ™” ); 572 ià( `g_¡r_equ® ("V®ue", ´Ý”ty )) 573  `£t_v®ue_»que¡ ( cÚn , msg , & sub , chr ); 575  `btd_”rÜ_šv®id_¬gs ( msg ); 576 } } 578  $­³nd_ch¬_diù ( DBusMes§geI‹r * ™” ,  ch¬aù”i¡ic * chr ) 580 DBusMes§geI‹r diù ; 581 cÚ¡ * Çme = ""; 582 * uuid ; 583 ušt16_t ³rmissiÚ ; 585 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 586 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 587 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 588 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 590 uuid = `g_¡rdup ( chr -> ty³ ); 591 `diù_­³nd_’Œy (& diù , "UUID", DBUS_TYPE_STRING , & uuid ); 592 `g_ä“ ( uuid ); 595 `diù_­³nd_’Œy (& diù , "Name", DBUS_TYPE_STRING , & Çme ); 597 ià( chr -> desc ) 598 `diù_­³nd_’Œy (& diù , "DesütiÚ", DBUS_TYPE_STRING , 599 & chr -> desc ); 601 ià( chr -> v®ue ) 602 `diù_­³nd_¬¿y (& diù , "V®ue", DBUS_TYPE_BYTE , & chr -> v®ue , 603 chr -> vËn ); 605 ià( chr -> ³rm ) { 606 ³rmissiÚ = chr -> ³rm ; 607 `diù_­³nd_’Œy (& diù , "P”missiÚ", DBUS_TYPE_UINT16 , & ³rmissiÚ ); 612 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 613 } } 615  DBusMes§ge * $g‘_´Ý”t›s ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 616 * d©a ) 618  ch¬aù”i¡ic * chr = d©a ; 619 DBusMes§ge * »¶y ; 620 DBusMes§geI‹r ™” ; 622 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 623 ià(! »¶y ) 624  NULL ; 626 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 628 `­³nd_ch¬_diù (& ™” , chr ); 630  »¶y ; 631 } } 633  $»ad_ch¬_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 634 gpoš‹r u£r_d©a ) 636  ch¬aù”i¡ic * chr = u£r_d©a ; 637  g©t_£rviû * g©t = chr ->gatt; 638 DBusMes§ge * »¶y ; 639 ušt8_t * v®ue = NULL ; 640  vËn ; 642 ià( ¡©us != 0) { 643 cÚ¡ * ¡r = `©t_ecode2¡r ( ¡©us ); 644 `g_´š‹¼ ("Characteristic value/descriptor„ead failed: %s\n", 645 ¡r ); 646 »¶y = `btd_”rÜ_çžed ( g©t -> qu”y -> msg , ¡r ); 647  dÚe ; 650 v®ue = `g_m®loc ( ATT_MAX_MTU * ()); 652 vËn = `dec_»ad_»¥ ( pdu , ¶’ , v®ue , ATT_MAX_MTU ); 653 ià( vËn <= 0) { 654 `g_´š‹¼ ("Attribute Protocol Error\n"); 655 »¶y = `btd_”rÜ_çžed ( g©t -> qu”y -> msg , 657  dÚe ; 660 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( g©t -> qu”y -> msg ); 661 `dbus_mes§ge_­³nd_¬gs ( »¶y , 662 DBUS_TYPE_ARRAY , DBUS_TYPE_BYTE , & v®ue , vËn , 663 DBUS_TYPE_INVALID ); 664 dÚe : 665 `dbus_cÚÃùiÚ_£nd ( g©t -> cÚn , »¶y , NULL ); 666 `dbus_cÚÃùiÚ_æush ( g©t -> cÚn ); 667 `dbus_mes§ge_uÄef ( »¶y ); 668 `g_ä“ ( g©t -> qu”y ); 669 g©t -> qu”y = NULL ; 671 ià( v®ue ) 672 `g_ä“ ( v®ue ); 674 } } 676  DBusMes§ge * $»ad_ch¬ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 677 * d©a ) 679  qu”y *query; 681  ch¬aù”i¡ic * chr = d©a ; 682  g©t_£rviû * g©t = chr ->gatt; 684 qu”y = `g_Ãw0 (query, 1); 685 qu”y -> msg = `dbus_mes§ge_»f (msg); 686 g©t -> qu”y = query; 688 `g©t_»ad_ch¬ ( g©t -> ©Œib , chr -> hªdË , »ad_ch¬_cb , chr); 690  NULL ; 691 } } 693  $discov”_ch¬_desütÜ_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 694 gpoš‹r u£r_d©a ) 696  ch¬aù”i¡ic * chr = u£r_d©a ; 697  g©t_£rviû * g©t = chr ->gatt; 698 DBusMes§ge * »¶y ; 699 gušt8 fÜm© ; 700 ušt8_t * d©a ; 702 ià( ¡©us != 0) { 703 cÚ¡ * ¡r = `©t_ecode2¡r ( ¡©us ); 705 `g_´š‹¼ ("Discov” Ch¬aù”i¡iøDesütÜ fažed: %s\n", ¡r ); 707 »¶y = `btd_”rÜ_çžed ( g©t -> qu”y -> msg , ¡r ); 708  dÚe ; 711 ià(! `dec_fšd_šfo_»¥ ( pdu , ¶’ , & fÜm© )) { 712 `g_´š‹¼ ("Att Protocolƒrror\n"); 714 »¶y = `btd_”rÜ_çžed ( g©t -> qu”y -> msg , 716  dÚe ; 719 d©a = ( ušt8_t *) pdu + GATT_FIND_INFO_RESP_OPCODE_LEN ; 723 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( g©t -> qu”y -> msg ); 725 `dbus_mes§ge_­³nd_¬gs ( »¶y , DBUS_TYPE_ARRAY , DBUS_TYPE_BYTE , 726 & d©a , ( ¶’ - GATT_FIND_INFO_RESP_OPCODE_LEN ), DBUS_TYPE_INVALID ); 728 dÚe : 729 `dbus_cÚÃùiÚ_£nd ( g©t -> cÚn , »¶y , NULL ); 730 `dbus_cÚÃùiÚ_æush ( g©t -> cÚn ); 731 `dbus_mes§ge_uÄef ( »¶y ); 732 `dbus_mes§ge_uÄef ( g©t -> qu”y -> msg ); 733 `g_ä“ ( g©t -> qu”y ); 734 g©t -> qu”y = NULL ; 737 } } 739  DBusMes§ge * $discov”_ch¬_desütÜ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 740 * d©a ) 742  ch¬aù”i¡ic * chr = d©a ; 743  g©t_£rviû * g©t = chr ->gatt; 744  qu”y *query; 746 ià( g©t -> qu”y ) 747  `btd_”rÜ_busy ( msg ); 749 qu”y = `g_Ãw0 (query, 1); 750 qu”y -> msg = `dbus_mes§ge_»f (msg); 751 g©t -> qu”y = query; 753 ià( g©t -> ©tioid == 0) { 754 g©t -> ©tioid = `btd_deviû_add_©tio_ÿÎback (g©t-> dev , 755 NULL , ©tio_discÚÃùed , g©t ); 758 ià( g©t -> ©Œib ) { 759 `g©t_fšd_šfo ( g©t -> ©Œib , chr -> hªdË +1, 760 chr -> ’d , discov”_ch¬_desütÜ_cb , chr); 763  NULL ; 764 } } 766 cÚ¡ GDBusM‘hodTabË gch¬_m‘hods [] = { 767 { GDBUS_METHOD ("GetProperties", 768 NULL , GDBUS_ARGS ({ "properties", "a{sv}" }), 769 g‘_´Ý”t›s ) }, 770 { GDBUS_METHOD ("SetProperty", 771 GDBUS_ARGS ({ "Çme", "s" }, { "v®ue", "v" }), NULL , 772 £t_´Ý”ty ) }, 773 { GDBUS_METHOD ("SetPropertyRequest", 774 GDBUS_ARGS ({ "Çme", "s" }, { "v®ue", "v" }), NULL , 775 £t_´Ý”ty_»que¡ ) }, 776 { GDBUS_ASYNC_METHOD ("R—dCh¬aù”i¡ic", NULL , 777 GDBUS_ARGS ({ "value", "ay" }), 778 »ad_ch¬ ) }, 779 { GDBUS_ASYNC_METHOD ("DiscoverCharacteristicsDescriptor", 780 NULL , GDBUS_ARGS ({ "CharacteristicsDescriptors", "ay" }), 781 discov”_ch¬_desütÜ )}, 785 * $ch¬aù”i¡ic_li¡_to_¡ršg ( GSLi¡ * ch¬s ) 787 GSŒšg * ch¬aù”i¡ics ; 788 GSLi¡ * l ; 790 ch¬aù”i¡ics = `g_¡ršg_Ãw ( NULL ); 792  l = ch¬s ;†;† =†-> Ãxt ) { 793  ch¬aù”i¡ic * chr = l -> d©a ; 794  chr_¡r [64]; 796 `mem£t ( chr_¡r , 0, (chr_str)); 798 `¢´štf ( chr_¡r , (chr_str), "%04X#%02X#%04X#%s ", 799 chr -> hªdË , chr-> ³rm , chr-> ’d , chr-> ty³ ); 801 ch¬aù”i¡ics = `g_¡ršg_­³nd (ch¬aù”i¡ics, chr_¡r ); 804  `g_¡ršg_ä“ ( ch¬aù”i¡ics , FALSE ); 805 } } 807  $¡Üe_ch¬aù”i¡ics (cÚ¡ bdaddr_t * sba , cÚ¡ bdaddr_ˆ* dba , 808 ušt8_t bdaddr_ty³ , ušt16_t ¡¬t , 809 GSLi¡ * ch¬s ) 811 * ch¬aù”i¡ics ; 813 ch¬aù”i¡ics = `ch¬aù”i¡ic_li¡_to_¡ršg ( ch¬s ); 815 `wr™e_deviû_ch¬aù”i¡ics ( sba , dba , bdaddr_ty³ , ¡¬t , 816 ch¬aù”i¡ics ); 818 `g_ä“ ( ch¬aù”i¡ics ); 819 } } 821  $»gi¡”_ch¬aù”i¡ic ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 823  ch¬aù”i¡ic * chr = d©a ; 824 DBusCÚÃùiÚ * cÚn = chr -> g©t ->conn; 825 cÚ¡ * g©t_·th = u£r_d©a ; 826 `DBG ("register_characteristic"); 828 chr -> ·th = `g_¡rdup_´štf ("%s/ch¬aù”i¡ic%04x", g©t_·th , 829 chr -> hªdË ); 831 `g_dbus_»gi¡”_š‹rçû ( cÚn , chr -> ·th , CHAR_INTERFACE , 832 ch¬_m‘hods , NULL , NULL, chr , NULL); 834 `DBG ("Regi¡”ed: %s", chr -> ·th ); 835 } } 837  GSLi¡ * $¡ršg_to_ch¬aù”i¡ic_li¡ ( g©t_£rviû * g©t , 838 cÚ¡ * ¡r ) 840 GSLi¡ * l = NULL ; 841 ** ch¬s ; 842  i ; 844 ià( ¡r =ð NULL ) 845  NULL ; 847 ch¬s = `g_¡r¥l™ ( ¡r , " ", 0); 848 ià( ch¬s =ð NULL ) 849  NULL ; 851  i = 0; ch¬s [i]; i++) { 852  ch¬aù”i¡ic * chr ; 853  »t ; 855 chr = `g_Ãw0 ( ch¬aù”i¡ic , 1); 857 »t = `ssÿnf ( ch¬s [ i ], "%04hX#%02hhX#%04hX#%s", & chr -> hªdË , 858 & chr -> ³rm , &chr-> ’d , chr-> ty³ ); 859 ià( »t < 4) { 860 `g_ä“ ( chr ); 864 chr -> g©t = gatt; 865 l = `g_¦i¡_­³nd Ö, chr ); 868 `g_¡rä“v ( ch¬s ); 870  l ; 871 } } 873  GSLi¡ * $lßd_ch¬aù”i¡ics ( g©t_£rviû * g©t , ušt16_t ¡¬t ) 875 GSLi¡ * chrs_li¡ ; 876 bdaddr_t sba , dba ; 877 ušt8_t bdaddr_ty³ = BDADDR_LE_PUBLIC ; 878 * ¡r ; 880 `g©t_g‘_add»ss ( g©t , & sba , & dba , & bdaddr_ty³ ); 881 `DBG ("load_characteristics"); 883 ¡r = `»ad_deviû_ch¬aù”i¡ics (& sba , & dba , bdaddr_ty³ , ¡¬t ); 884 ià( ¡r =ð NULL ) 885  NULL ; 887 chrs_li¡ = `¡ršg_to_ch¬aù”i¡ic_li¡ ( g©t , ¡r ); 889 `ä“ ( ¡r ); 891  chrs_li¡ ; 892 } } 894  $¡Üe_©Œibu‹ ( g©t_£rviû * g©t , ušt16_t hªdË , 895 ušt16_t ty³ , ušt8_t * v®ue , gsize Ën ) 897  btd_deviû * deviû = g©t -> dev ; 898 bdaddr_t sba , dba ; 899 ušt8_t bdaddr_ty³ ; 900 bt_uuid_t uuid ; 901 * ¡r , * tmp ; 902 gušt i ; 904 ¡r = `g_m®loc0 ( MAX_LEN_UUID_STR + Ën * 2 + 1); 906 `bt_uuid16_ü—‹ (& uuid , ty³ ); 907 `bt_uuid_to_¡ršg (& uuid , ¡r , MAX_LEN_UUID_STR ); 909 ¡r [ MAX_LEN_UUID_STR - 1] = '#'; 911  i = 0, tmp = ¡r + MAX_LEN_UUID_STR ; i < Ën ; i++,mp += 2) 912 `¥rštf ( tmp , "%02X", v®ue [ i ]); 914 `g©t_g‘_add»ss ( g©t , & sba , & dba , NULL ); 916 bdaddr_ty³ = `btd_deviû_g‘_bdaddr_ty³ ( deviû ); 918 `wr™e_deviû_©Œibu‹ (& sba , & dba , bdaddr_ty³ , hªdË , ¡r ); 920 `g_ä“ ( ¡r ); 921 } } 923  $qu”y_li¡_­³nd ( g©t_£rviû * g©t ,  qu”y_d©a * d©a ) 925  qu”y *qu”y = g©t ->query; 927 qu”y -> li¡ = `g_¦i¡_­³nd (qu”y->li¡, d©a ); 928 } } 930  $qu”y_li¡_»move ( g©t_£rviû * g©t ,  qu”y_d©a * d©a ) 932  qu”y *qu”y = g©t ->query; 934 qu”y -> li¡ = `g_¦i¡_»move (qu”y->li¡, d©a ); 935 ià( qu”y -> li¡ !ð NULL ) 938 `g_ä“ ( qu”y ); 939 g©t -> qu”y = NULL ; 941 `»move_©tio ( g©t ); 942 } } 944  $upd©e_ch¬_desc ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 945 gpoš‹r u£r_d©a ) 947  qu”y_d©a * cu¼’t = u£r_d©a ; 948  g©t_£rviû * g©t = cu¼’t ->gatt; 949  ch¬aù”i¡ic * chr = cu¼’t ->chr; 951 ià( ¡©us == 0) { 953 `g_ä“ ( chr -> desc ); 955 chr -> desc = `g_m®loc ( Ën ); 956 `memýy ( chr -> desc , pdu + 1, Ën - 1); 957 chr -> desc [ Ën - 1] = '\0'; 959 `¡Üe_©Œibu‹ ( g©t , cu¼’t -> hªdË , 960 GATT_CHARAC_USER_DESC_UUID , 961 (*è chr -> desc , Ën ); 962 } ià( ¡©us =ð ATT_ECODE_INSUFF_ENC ) { 963 GIOChªÃl * io = `g_©Œib_g‘_chªÃl ( g©t -> ©Œib ); 964 BtIOSecLev– Ëv– = BT_IO_SEC_HIGH ; 966 `bt_io_g‘ ( io , BT_IO_L2CAP , 967 BT_IO_OPT_SEC_LEVEL , & Ëv– , 968 BT_IO_OPT_INVALID ); 970 ià( Ëv– < BT_IO_SEC_HIGH ) 971 Ëv– ++; 973 ià( `bt_io_£t ( io , BT_IO_L2CAP , 974 BT_IO_OPT_SEC_LEVEL , Ëv– , 975 BT_IO_OPT_INVALID )) { 976 `g©t_»ad_ch¬ ( g©t -> ©Œib , cu¼’t -> hªdË , 977 upd©e_ch¬_desc , cu¼’t ); 982 `qu”y_li¡_»move ( g©t , cu¼’t ); 983 `g_ä“ ( cu¼’t ); 984 } } 986  $upd©e_ch¬_fÜm© ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 987 gpoš‹r u£r_d©a ) 989  qu”y_d©a * cu¼’t = u£r_d©a ; 990  g©t_£rviû * g©t = cu¼’t ->gatt; 991  ch¬aù”i¡ic * chr = cu¼’t ->chr; 993 ià( ¡©us != 0) 994  dÚe ; 996 ià( Ën < 8) 997  dÚe ; 999 `g_ä“ ( chr -> fÜm© ); 1001 chr -> fÜm© = `g_Ãw0 (format, 1); 1002 `memýy ( chr -> fÜm© , pdu + 1, 7); 1004 `¡Üe_©Œibu‹ ( g©t , cu¼’t -> hªdË , GATT_CHARAC_FMT_UUID , 1005 (*è chr -> fÜm© , (*chr->format)); 1007 dÚe : 1008 `qu”y_li¡_»move ( g©t , cu¼’t ); 1009 `g_ä“ ( cu¼’t ); 1010 } } 1012  $upd©e_ch¬_v®ue ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 1013 gušt16 Ën , gpoš‹r u£r_d©a ) 1015  qu”y_d©a * cu¼’t = u£r_d©a ; 1016  g©t_£rviû * g©t = cu¼’t ->gatt; 1017  ch¬aù”i¡ic * chr = cu¼’t ->chr; 1019 ià( ¡©us == 0) 1020 `ch¬aù”i¡ic_£t_v®ue ( chr , pdu + 1, Ën - 1); 1021 ià( ¡©us =ð ATT_ECODE_INSUFF_ENC ) { 1022 GIOChªÃl * io = `g_©Œib_g‘_chªÃl ( g©t -> ©Œib ); 1024 ià( `bt_io_£t ( io , BT_IO_L2CAP , 1025 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_HIGH , 1026 BT_IO_OPT_INVALID )) { 1027 `g©t_»ad_ch¬ ( g©t -> ©Œib , chr -> hªdË , 1028 upd©e_ch¬_v®ue , cu¼’t ); 1033 `qu”y_li¡_»move ( g©t , cu¼’t ); 1034 `g_ä“ ( cu¼’t ); 1035 } } 1037  $uuid_desc16_cmp ( bt_uuid_t * uuid , gušt16 desc ) 1039 bt_uuid_t u16 ; 1041 `bt_uuid16_ü—‹ (& u16 , desc ); 1043  `bt_uuid_cmp ( uuid , & u16 ); 1044 } } 1046  $desütÜ_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 1047 gpoš‹r u£r_d©a ) 1049  qu”y_d©a * cu¼’t = u£r_d©a ; 1050  g©t_£rviû * g©t = cu¼’t ->gatt; 1051  ©t_d©a_li¡ * li¡ ; 1052 gušt8 fÜm© ; 1053  i ; 1055 ià( ¡©us != 0) 1056  dÚe ; 1058 `DBG ("Find Information Response„eceived"); 1060 li¡ = `dec_fšd_šfo_»¥ ( pdu , ¶’ , & fÜm© ); 1061 ià( li¡ =ð NULL ) 1062  dÚe ; 1064  i = 0; i < li¡ -> num ; i++) { 1065 gušt16 hªdË ; 1066 bt_uuid_t uuid ; 1067 ušt8_t * šfo = li¡ -> d©a [ i ]; 1068  qu”y_d©a * qfmt ; 1070 hªdË = `g‘_Ë16 ( šfo ); 1072 ià( fÜm© == 0x01) { 1073 `g‘_uuid ( BT_UUID16 , & šfo [2], & uuid ); 1083 qfmt = `g_Ãw0 ( qu”y_d©a , 1); 1084 qfmt -> g©t = cu¼’t ->gatt; 1085 qfmt -> chr = cu¼’t ->chr; 1086 qfmt -> hªdË = handle; 1088 ià( `uuid_desc16_cmp (& uuid , GATT_CHARAC_USER_DESC_UUID ) == 0) { 1089 `qu”y_li¡_­³nd ( g©t , qfmt ); 1090 `g©t_»ad_ch¬ ( g©t -> ©Œib , hªdË , upd©e_ch¬_desc , 1091 qfmt ); 1092 } ià( `uuid_desc16_cmp (& uuid , GATT_CHARAC_FMT_UUID ) == 0) { 1093 `qu”y_li¡_­³nd ( g©t , qfmt ); 1094 `g©t_»ad_ch¬ ( g©t -> ©Œib , hªdË , 1095 upd©e_ch¬_fÜm© , qfmt ); 1097 `g_ä“ ( qfmt ); 1100 `©t_d©a_li¡_ä“ ( li¡ ); 1101 dÚe : 1102 `qu”y_li¡_»move ( g©t , cu¼’t ); 1103 `g_ä“ ( cu¼’t ); 1104 } } 1106  $upd©e_®l_ch¬s ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 1108  qu”y_d©a * qdesc , * qv®ue ; 1109  ch¬aù”i¡ic * chr = d©a ; 1110  g©t_£rviû * g©t = u£r_d©a ; 1112 qdesc = `g_Ãw0 ( qu”y_d©a , 1); 1113 qdesc -> g©t = gatt; 1114 qdesc -> chr = chr; 1116 `qu”y_li¡_­³nd ( g©t , qdesc ); 1118 `g©t_fšd_šfo ( g©t -> ©Œib , chr -> hªdË + 1, chr-> ’d , desütÜ_cb , 1119 qdesc ); 1121 qv®ue = `g_Ãw0 ( qu”y_d©a , 1); 1122 qv®ue -> g©t = gatt; 1123 qv®ue -> chr = chr; 1125 `qu”y_li¡_­³nd ( g©t , qv®ue ); 1127 `g©t_»ad_ch¬ ( g©t -> ©Œib , chr -> hªdË , upd©e_ch¬_v®ue , qv®ue ); 1128 } } 1130  DBusMes§ge * $ü—‹_discov”_ch¬_»¶y ( DBusMes§ge * msg , GSLi¡ * ch¬s ) 1132 DBusMes§ge * »¶y ; 1133 DBusMes§geI‹r ™” , ¬¿y_™” ; 1134 GSLi¡ * l ; 1136 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 1138 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 1140 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 1141 DBUS_TYPE_OBJECT_PATH_AS_STRING , & ¬¿y_™” ); 1143  l = ch¬s ;†;† =†-> Ãxt ) { 1144  ch¬aù”i¡ic * chr = l -> d©a ; 1146 `dbus_mes§ge_™”_­³nd_basic (& ¬¿y_™” , 1147 DBUS_TYPE_OBJECT_PATH , & chr -> ·th ); 1150 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & ¬¿y_™” ); 1152  »¶y ; 1153 } } 1155  $ch¬_discov”ed_cb ( ušt8_t ¡©us , GSLi¡ * ch¬aù”i¡ics , 1156 * u£r_d©a ) 1158 DBusMes§ge * »¶y ; 1159  qu”y_d©a * cu¼’t = u£r_d©a ; 1160  g©t_£rviû * g©t = cu¼’t ->gatt; 1161  g©t_´im¬y * ´im = g©t ->prim; 1162 ušt16_t * ´evious_’d = NULL ; 1163 GSLi¡ * l ; 1164 bdaddr_t sba , dba ; 1165 ušt8_t bdaddr_ty³ = BDADDR_LE_PUBLIC ; 1167 `DBG ("ch¬_discov”ed_cb stu %d", ¡©us ); 1168 ià( ¡©us != 0) { 1169 cÚ¡ * ¡r = `©t_ecode2¡r ( ¡©us ); 1171 `DBG ("Discov”‡Î ch¬aù”i¡ic çžed: %s", ¡r ); 1172 »¶y = `btd_”rÜ_çžed ( g©t -> qu”y -> msg , ¡r ); 1173  çž ; 1176  l = ch¬aù”i¡ics ;†;† =†-> Ãxt ) { 1177  g©t_ch¬ * cu¼’t_chr = l -> d©a ; 1178  ch¬aù”i¡ic * chr ; 1179 gušt hªdË = cu¼’t_chr -> v®ue_hªdË ; 1180 GSLi¡ * lchr ; 1182 lchr = `g_¦i¡_fšd_cu¡om ( g©t -> ch¬s , 1183 `GUINT_TO_POINTER ( hªdË ), ch¬aù”i¡ic_hªdË_cmp ); 1184 ià( lchr ) 1187 chr = `g_Ãw0 ( ch¬aù”i¡ic , 1); 1188 chr -> g©t = gatt; 1189 chr -> ³rm = cu¼’t_chr -> ´Ý”t›s ; 1190 chr -> hªdË = cu¼’t_chr -> v®ue_hªdË ; 1191 `¡ºýy ( chr -> ty³ , cu¼’t_chr -> uuid , (chr->type)); 1193 ià( ´evious_’d ) 1194 * ´evious_’d = cu¼’t_chr -> hªdË ; 1196 ´evious_’d = & chr -> ’d ; 1198 g©t -> ch¬s = `g_¦i¡_­³nd (g©t->ch¬s, chr ); 1199 `»gi¡”_ch¬aù”i¡ic ( chr , g©t -> ·th ); 1202 ià( ´evious_’d ) 1203 * ´evious_’d = ´im -> ¿nge . ’d ; 1205 `g©t_g‘_add»ss ( g©t , & sba , & dba , & bdaddr_ty³ ); 1206 `¡Üe_ch¬aù”i¡ics (& sba , & dba , bdaddr_ty³ , ´im -> ¿nge . ¡¬t , 1207 g©t -> ch¬s ); 1209 `g_¦i¡_fÜ—ch ( g©t -> ch¬s , upd©e_®l_ch¬s , gatt); 1211 »¶y = `ü—‹_discov”_ch¬_»¶y ( g©t -> qu”y -> msg , g©t-> ch¬s ); 1213 çž : 1214 `dbus_mes§ge_uÄef ( g©t -> qu”y -> msg ); 1215 g©t -> qu”y -> msg = NULL ; 1217 `g_dbus_£nd_mes§ge ( g©t -> cÚn , »¶y ); 1218 `qu”y_li¡_»move ( g©t , cu¼’t ); 1219 `g_ä“ ( cu¼’t ); 1220 } } 1222  DBusMes§ge * $discov”_ch¬ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 1223 * d©a ) 1225  g©t_£rviû * g©t = d©a ; 1226  qu”y *query; 1227  qu”y_d©a * qchr ; 1229 ià( g©t -> qu”y ) 1230  `btd_”rÜ_busy ( msg ); 1232 `DBG ("discover_char BP0"); 1234 qu”y = `g_Ãw0 (query, 1); 1236 qchr = `g_Ãw0 ( qu”y_d©a , 1); 1237 qchr -> g©t = gatt; 1239 qu”y -> msg = `dbus_mes§ge_»f (msg); 1241 ià( g©t -> ©tioid == 0) { 1242 g©t -> ©tioid = `btd_deviû_add_©tio_ÿÎback (g©t-> dev , 1243 ©tio_cÚÃùed , 1244 ©tio_discÚÃùed , 1245 g©t ); 1246 } ià( g©t -> ©Œib ) { 1247  g©t_´im¬y * ´im = g©t ->prim; 1248 `g©t_discov”_ch¬ ( g©t -> ©Œib , ´im -> ¿nge . ¡¬t , 1249 ´im -> ¿nge . ’d , NULL , 1250 ch¬_discov”ed_cb , qchr ); 1253 g©t -> qu”y = query; 1255 `qu”y_li¡_­³nd ( g©t , qchr ); 1257  NULL ; 1258 } } 1260  DBusMes§ge * $´im_g‘_´Ý”t›s ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 1261 * d©a ) 1263  g©t_£rviû * g©t = d©a ; 1264 DBusMes§ge * »¶y ; 1265 DBusMes§geI‹r ™” ; 1266 DBusMes§geI‹r diù ; 1267 GSLi¡ * l ; 1268 ** ch¬s ; 1269 cÚ¡ * uuid ; 1270  i ; 1272 `DBG ("prim_get_properties"); 1274 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 1275 ià(! »¶y ) 1276  NULL ; 1278 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 1280 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 1281 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1282 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 1283 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 1285 ch¬s = `g_Ãw0 (*, `g_¦i¡_Ëngth ( g©t ->chars) + 1); 1287  i = 0, l = g©t -> ch¬s ;†;† =†-> Ãxt , i++) { 1288  ch¬aù”i¡ic * chr = l -> d©a ; 1289 ch¬s [ i ] = chr -> ·th ; 1292 `diù_­³nd_¬¿y (& diù , "Ch¬aù”i¡ics", DBUS_TYPE_OBJECT_PATH , 1293 & ch¬s , i ); 1294 uuid = g©t -> ´im ->uuid; 1295 `diù_­³nd_’Œy (& diù , "UUID", DBUS_TYPE_STRING , & uuid ); 1297 `g_ä“ ( ch¬s ); 1299 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & diù ); 1301  »¶y ; 1302 } } 1304 cÚ¡ GDBusM‘hodTabË g´im_m‘hods [] = { 1305 { GDBUS_ASYNC_METHOD ("DiscoverCharacteristics", 1306 NULL , GDBUS_ARGS ({ "characteristics", "ao" }), 1307 discov”_ch¬ ) }, 1308 { GDBUS_METHOD ("RegisterCharacteristicsWatcher", 1309 GDBUS_ARGS ({ "ag’t", "o" }), NULL , 1310 »gi¡”_w©ch” ) }, 1311 { GDBUS_METHOD ("UnregisterCharacteristicsWatcher", 1312 GDBUS_ARGS ({ "ag’t", "o" }), NULL , 1313 uÄegi¡”_w©ch” ) }, 1314 { GDBUS_METHOD ("GetProperties", 1315 NULL , GDBUS_ARGS ({ "properties", "a{sv}" }), 1316 ´im_g‘_´Ý”t›s ) }, 1320  g©t_£rviû * $´im¬y_»gi¡” ( DBusCÚÃùiÚ * cÚn , 1321  btd_deviû * deviû , 1322  g©t_´im¬y * ´im , 1323  psm ) 1325  g©t_£rviû * g©t ; 1326 cÚ¡ * deviû_·th ; 1328 deviû_·th = `deviû_g‘_·th ( deviû ); 1330 g©t = `g_Ãw0 ( g©t_£rviû , 1); 1331 g©t -> dev = `btd_deviû_»f ( deviû ); 1332 g©t -> ´im =…rim; 1333 g©t -> psm =…sm; 1334 g©t -> cÚn = `dbus_cÚÃùiÚ_»f (conn); 1335 g©t -> ·th = `g_¡rdup_´štf ("%s/£rviû%04x", deviû_·th , 1336 ´im -> ¿nge . ¡¬t ); 1338 `g_dbus_»gi¡”_š‹rçû ( g©t -> cÚn , g©t-> ·th , 1339 CHAR_INTERFACE , ´im_m‘hods , 1340 NULL , NULL, g©t , NULL); 1342 g©t -> ch¬s = `lßd_ch¬aù”i¡ics (g©t, ´im -> ¿nge . ¡¬t ); 1343 `g_¦i¡_fÜ—ch ( g©t -> ch¬s , »gi¡”_ch¬aù”i¡ic , g©t-> ·th ); 1345  g©t ; 1346 } } 1348 GSLi¡ * $©Œib_þ›Á_»gi¡” ( DBusCÚÃùiÚ * cÚÃùiÚ , 1349  btd_deviû * deviû ,  psm , 1350 GA‰rib * ©Œib , GSLi¡ * ´im¬›s ) 1352 GSLi¡ * l , * £rviûs ; 1354  l = ´im¬›s , £rviûs = NULL ;†;† =†-> Ãxt ) { 1355  g©t_´im¬y * ´im = l -> d©a ; 1356  g©t_£rviû * g©t ; 1358 g©t = `´im¬y_»gi¡” ( cÚÃùiÚ , deviû , ´im , psm ); 1360 `DBG ("Regi¡”ed: %s", g©t -> ·th ); 1362 £rviûs = `g_¦i¡_­³nd (£rviûs, `g_¡rdup ( g©t -> ·th )); 1363 g©t_£rviûs = `g_¦i¡_­³nd (g©t_£rviûs, g©t ); 1366  £rviûs ; 1367 } } 1369  $´im¬y_uÄegi¡” ( g©t_£rviû * g©t ) 1371 GSLi¡ * l ; 1373  l = g©t -> ch¬s ;†;† =†-> Ãxt ) { 1374  ch¬aù”i¡ic * chr = l -> d©a ; 1375 `g_dbus_uÄegi¡”_š‹rçû ( g©t -> cÚn , chr -> ·th , 1376 CHAR_INTERFACE ); 1379 `g_dbus_uÄegi¡”_š‹rçû ( g©t -> cÚn , g©t-> ·th , CHAR_INTERFACE ); 1381 `»move_©tio ( g©t ); 1382 } } 1384  $·th_cmp ( gcÚ¡poš‹r d©a , gcÚ¡poš‹¸ u£r_d©a ) 1386 cÚ¡ * ·th = d©a ; 1387 cÚ¡ * g©t_·th = u£r_d©a ; 1389  `g_¡rcmp0 ( ·th , g©t_·th ); 1390 } } 1392  $©Œib_þ›Á_uÄegi¡” ( GSLi¡ * £rviûs ) 1394 GSLi¡ * l , * Ëá ; 1396  l = g©t_£rviûs , Ëá = NULL ;†;† =†-> Ãxt ) { 1397  g©t_£rviû * g©t = l -> d©a ; 1399 ià(! `g_¦i¡_fšd_cu¡om ( £rviûs , g©t -> ·th , ·th_cmp )) { 1400 Ëá = `g_¦i¡_­³nd Öeá, g©t ); 1404 `´im¬y_uÄegi¡” ( g©t ); 1405 `g©t_£rviû_ä“ ( g©t ); 1408 `g_¦i¡_ä“ ( g©t_£rviûs ); 1409 g©t_£rviûs = Ëá ; 1410 } } @attrib/client.h 25 #ifdeà __TIZEN_PATCH__ 26 GSLi¡ * ©Œib_þ›Á_»gi¡” ( DBusCÚÃùiÚ * cÚÃùiÚ , 27  btd_deviû * deviû ,  psm , 28 GA‰rib * ©Œib , GSLi¡ * ´im¬›s ); 29  ©Œib_þ›Á_uÄegi¡” ( GSLi¡ * £rviûs ); 31  #GATT_FIND_INFO_RESP_OPCODE_LEN 1 ) @attrib/gatt-service.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~ 31  ~"¤c/ad­‹r.h " 32  ~"¤c/sh¬ed/utž.h " 33  ~"lib/uuid.h " 34  ~"©Œib/g©Œib.h " 35  ~"©Œib/©t.h " 36  ~"©Œib/g©t.h " 37  ~"©Œib/©t-d©aba£.h " 38  ~"¤c/©Œib-£rv”.h " 39  ~"©Œib/g©t-£rviû.h " 40  ~"¤c/log.h " 41 #ifdeà __TIZEN_PATCH__ 42  ~"¤c/deviû.h " 45  sg©t_šfo { 46 bt_uuid_t muuid ; 47 ušt8_t m´Ýs ; 48  mauth’tiÿtiÚ ; 49  mauthÜiz©iÚ ; 50 GSLi¡ * mÿÎbacks ; 51  mnum_©Œs ; 52 ušt16_t * mv®ue_hªdË ; 53 ušt16_t * mccc_hªdË ; 56  s©Œib_cb { 57 ©Œib_ev’t_t mev’t ; 58 * mâ ; 59 * mu£r_d©a ; 62  šlše  $put_uuid_Ë (cÚ¡ bt_uuid_t * ¤c , * d¡ ) 64 ià( ¤c -> ty³ =ð BT_UUID16 ) 65 `put_Ë16 ( ¤c -> v®ue . u16 , d¡ ); 68 `bsw­_128 (& ¤c -> v®ue . u128 , d¡ ); 69 } } 71  GSLi¡ * $·r£_Ýts ( g©t_ÝtiÚ Ýt1 , va_li¡ ¬gs ) 73 g©t_ÝtiÚ Ýt = Ýt1 ; 74  g©t_šfo * šfo ; 75  ©Œib_cb * cb ; 76 GSLi¡ * l = NULL ; 78 šfo = `g_Ãw0 ( g©t_šfo , 1); 79 l = `g_¦i¡_­³nd Ö, šfo ); 81  Ýt !ð GATT_OPT_INVALID ) { 82  Ýt ) { 83  GATT_OPT_CHR_UUID16 : 84 #ifdeà __TIZEN_PATCH__ 85  GATT_OPT_DESC_UUID16 : 87 `bt_uuid16_ü—‹ (& šfo -> uuid , `va_¬g ( ¬gs , )); 89 šfo -> num_©Œs += 2; 91  GATT_OPT_CHR_UUID : 92 #ifdeà __TIZEN_PATCH__ 93  GATT_OPT_DESC_UUID : 95 `memýy (& šfo -> uuid , `va_¬g ( ¬gs , bt_uuid_t *), 96 ( bt_uuid_t )); 98 šfo -> num_©Œs += 2; 100  GATT_OPT_CHR_PROPS : 101 #ifdeà __TIZEN_PATCH__ 102  GATT_OPT_DESC_PROPS : 104 šfo -> ´Ýs = `va_¬g ( ¬gs , ); 106 ià( šfo -> ´Ýs & ( GATT_CHR_PROP_NOTIFY | 107 GATT_CHR_PROP_INDICATE )) 109 šfo -> num_©Œs += 1; 114  GATT_OPT_CHR_VALUE_CB : 115 #ifdeà __TIZEN_PATCH__ 116  GATT_OPT_DESC_VALUE_CB : 118 cb = `g_Ãw0 ( ©Œib_cb , 1); 119 cb -> ev’t = `va_¬g ( ¬gs , ©Œib_ev’t_t ); 120 cb -> â = `va_¬g ( ¬gs , *); 121 cb -> u£r_d©a = `va_¬g ( ¬gs , *); 122 šfo -> ÿÎbacks = `g_¦i¡_­³nd (šfo->ÿÎbacks, cb ); 124  GATT_OPT_CHR_VALUE_GET_HANDLE : 125 šfo -> v®ue_hªdË = `va_¬g ( ¬gs , *); 127  GATT_OPT_CCC_GET_HANDLE : 128 šfo -> ccc_hªdË = `va_¬g ( ¬gs , *); 130  GATT_OPT_CHR_AUTHENTICATION : 131 šfo -> auth’tiÿtiÚ = `va_¬g ( ¬gs , g©t_ÝtiÚ ); 133  GATT_OPT_CHR_AUTHORIZATION : 134 šfo -> authÜiz©iÚ = `va_¬g ( ¬gs , g©t_ÝtiÚ ); 136  GATT_CHR_VALUE_READ : 137  GATT_CHR_VALUE_WRITE : 138  GATT_CHR_VALUE_BOTH : 139  GATT_OPT_INVALID : 141 `”rÜ ("Inv®id o±iÚ: %d", Ýt ); 144 Ýt = `va_¬g ( ¬gs , g©t_ÝtiÚ ); 145 #ifdeà __TIZEN_PATCH__ 146 ià( Ýt =ð GATT_OPT_CHR_UUID16 || o± =ð GATT_OPT_CHR_UUID || 147 Ýt =ð GATT_OPT_DESC_UUID16 || o± =ð GATT_OPT_DESC_UUID ) { 149 ià( Ýt =ð GATT_OPT_CHR_UUID16 || o± =ð GATT_OPT_CHR_UUID ) { 151 šfo = `g_Ãw0 ( g©t_šfo , 1); 152 l = `g_¦i¡_­³nd Ö, šfo ); 156  l ; 157 } } 159  ©Œibu‹ * $add_£rviû_deþ¬©iÚ ( btd_ad­‹r * ad­‹r , 160 ušt16_t hªdË , ušt16_ˆ svc , bt_uuid_t * uuid ) 162 bt_uuid_t bt_uuid ; 163 ušt8_t ©v® [16]; 164  Ën ; 166 `put_uuid_Ë ( uuid , & ©v® [0]); 167 Ën = `bt_uuid_Ën ( uuid ); 169 `bt_uuid16_ü—‹ (& bt_uuid , svc ); 171  `©Œib_db_add ( ad­‹r , hªdË , & bt_uuid , ATT_NONE , 172 ATT_NOT_PERMITTED , ©v® , Ën ); 173 } } 175  $©t_»ad_»q ( authÜiz©iÚ ,  auth’tiÿtiÚ , ušt8_t ´Ýs ) 177 ià( authÜiz©iÚ =ð GATT_CHR_VALUE_READ || 178 authÜiz©iÚ =ð GATT_CHR_VALUE_BOTH ) 179  ATT_AUTHORIZATION ; 180 ià( auth’tiÿtiÚ =ð GATT_CHR_VALUE_READ || 181 auth’tiÿtiÚ =ð GATT_CHR_VALUE_BOTH ) 182  ATT_AUTHENTICATION ; 183 ià(!( ´Ýs & GATT_CHR_PROP_READ )) 184  ATT_NOT_PERMITTED ; 186  ATT_NONE ; 187 } } 189  $©t_wr™e_»q ( authÜiz©iÚ ,  auth’tiÿtiÚ , ušt8_t ´Ýs ) 191 ià( authÜiz©iÚ =ð GATT_CHR_VALUE_WRITE || 192 authÜiz©iÚ =ð GATT_CHR_VALUE_BOTH ) 193  ATT_AUTHORIZATION ; 194 ià( auth’tiÿtiÚ =ð GATT_CHR_VALUE_WRITE || 195 auth’tiÿtiÚ =ð GATT_CHR_VALUE_BOTH ) 196  ATT_AUTHENTICATION ; 197 ià(!( ´Ýs & ( GATT_CHR_PROP_WRITE | 198 GATT_CHR_PROP_WRITE_WITHOUT_RESP ))) 199  ATT_NOT_PERMITTED ; 201  ATT_NONE ; 202 } } 204  $fšd_ÿÎback ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 206 cÚ¡  ©Œib_cb * cb = a ; 207  ev’t = `GPOINTER_TO_UINT ( b ); 209  cb -> ev’t -ƒvent; 210 } } 212 #ifdeà __TIZEN_PATCH__ 213  gboÞ—n $add_desütÜ ( btd_ad­‹r * ad­‹r , 214 ušt16_t * hªdË ,  g©t_šfo * šfo ) 216 ušt16_t h = * hªdË ; 217  ©Œibu‹ * a ; 218 bt_uuid_t bt_uuid ; 219 ušt8_t ©v® [ ATT_MAX_VALUE_LEN ]; 220 GSLi¡ * l ; 222 ià( šfo -> uuid . ty³ !ð BT_UUID16 && info->uuid.ty³ !ð BT_UUID128 ) { 223 `”rÜ ("Discriptors UUID or…roperties‡re missing"); 224  FALSE ; 228 ià( šfo -> uuid . ty³ =ð BT_UUID16 ) 229 `bt_uuid16_ü—‹ (& bt_uuid , šfo -> uuid . v®ue . u16 ); 231 `bt_uuid128_ü—‹ (& bt_uuid , šfo -> uuid . v®ue . u128 ); 233 `put_uuid_Ë (& šfo -> uuid , & ©v® [0]); 237 a = `©Œib_db_add ( ad­‹r , h ++, & bt_uuid , ATT_NONE , ATT_NOT_PERMITTED , 238 ©v® , šfo -> uuid . ty³ / 8); 240 ià( a =ð NULL ) { 241  FALSE ; 244  l = šfo -> ÿÎbacks ;† !ð NULL ;† =†-> Ãxt ) { 245  ©Œib_cb * cb = l -> d©a ; 247  cb -> ev’t ) { 248  ATTRIB_READ : 249 a -> »ad_cb = cb -> â ; 251  ATTRIB_WRITE : 252 a -> wr™e_cb = cb -> â ; 256 a -> cb_u£r_d©a = cb -> u£r_d©a ; 259 ià( šfo -> v®ue_hªdË !ð NULL ) 260 * šfo -> v®ue_hªdË = a -> hªdË ; 262 * hªdË = h ; 264  TRUE ; 265 } } 268  gboÞ—n $add_ch¬aù”i¡ic ( btd_ad­‹r * ad­‹r , 269 ušt16_t * hªdË ,  g©t_šfo * šfo ) 271  »ad_»q , wr™e_»q ; 272 ušt16_t h = * hªdË ; 273  ©Œibu‹ * a ; 274 bt_uuid_t bt_uuid ; 275 ušt8_t ©v® [ ATT_MAX_VALUE_LEN ]; 276 GSLi¡ * l ; 278 ià(( šfo -> uuid . ty³ !ð BT_UUID16 && info->uuid.ty³ !ð BT_UUID128 ) || 279 ! šfo -> ´Ýs ) { 280 `”rÜ ("Characteristic UUID or…roperties‡re missing"); 281  FALSE ; 284 »ad_»q = `©t_»ad_»q ( šfo -> authÜiz©iÚ , info-> auth’tiÿtiÚ , 285 šfo -> ´Ýs ); 286 wr™e_»q = `©t_wr™e_»q ( šfo -> authÜiz©iÚ , info-> auth’tiÿtiÚ , 287 šfo -> ´Ýs ); 291 ià( »ad_»q !ð ATT_NOT_PERMITTED ) { 292 gpoš‹r »qs = `GUINT_TO_POINTER ( ATTRIB_READ ); 294 ià(! `g_¦i¡_fšd_cu¡om ( šfo -> ÿÎbacks , »qs , 295 fšd_ÿÎback )) { 296 `”rÜ ("Callback for„ead„equired"); 297  FALSE ; 301 ià( wr™e_»q !ð ATT_NOT_PERMITTED ) { 302 gpoš‹r »qs = `GUINT_TO_POINTER ( ATTRIB_WRITE ); 304 ià(! `g_¦i¡_fšd_cu¡om ( šfo -> ÿÎbacks , »qs , 305 fšd_ÿÎback )) { 306 `”rÜ ("Callback for write„equired"); 307  FALSE ; 312 `bt_uuid16_ü—‹ (& bt_uuid , GATT_CHARAC_UUID ); 313 ©v® [0] = šfo -> ´Ýs ; 314 `put_Ë16 ( h + 1, & ©v® [1]); 315 `put_uuid_Ë (& šfo -> uuid , & ©v® [3]); 316 ià( `©Œib_db_add ( ad­‹r , h ++, & bt_uuid , ATT_NONE , ATT_NOT_PERMITTED , 317 ©v® , 3 + šfo -> uuid . ty³ / 8è=ð NULL ) 318  FALSE ; 321 a = `©Œib_db_add ( ad­‹r , h ++, & šfo -> uuid , »ad_»q , wr™e_»q , 322 NULL , 0); 323 ià( a =ð NULL ) 324  FALSE ; 326  l = šfo -> ÿÎbacks ;† !ð NULL ;† =†-> Ãxt ) { 327  ©Œib_cb * cb = l -> d©a ; 329  cb -> ev’t ) { 330  ATTRIB_READ : 331 a -> »ad_cb = cb -> â ; 333  ATTRIB_WRITE : 334 a -> wr™e_cb = cb -> â ; 338 a -> cb_u£r_d©a = cb -> u£r_d©a ; 341 ià( šfo -> v®ue_hªdË !ð NULL ) 342 * šfo -> v®ue_hªdË = a -> hªdË ; 344 #iâdeà __TIZEN_PATCH__ 349 ià( šfo -> ´Ýs & ( GATT_CHR_PROP_NOTIFY | GATT_CHR_PROP_INDICATE )) { 350 ušt8_t cfg_v® [2]; 352 `bt_uuid16_ü—‹ (& bt_uuid , GATT_CLIENT_CHARAC_CFG_UUID ); 353 cfg_v® [0] = 0x00; 354 cfg_v® [1] = 0x00; 355 a = `©Œib_db_add ( ad­‹r , h ++, & bt_uuid , ATT_NONE , 356 ATT_AUTHENTICATION , cfg_v® , (cfg_val)); 357 ià( a =ð NULL ) 358  FALSE ; 360 ià( šfo -> ccc_hªdË !ð NULL ) 361 * šfo -> ccc_hªdË = a -> hªdË ; 365 * hªdË = h ; 367  TRUE ; 368 } } 370  $ä“_g©t_šfo (* d©a ) 372  g©t_šfo * šfo = d©a ; 374 `g_¦i¡_ä“_fuÎ ( šfo -> ÿÎbacks , g_ä“ ); 375 `g_ä“ ( šfo ); 376 } } 378  $£rviû_©Œ_d– ( btd_ad­‹r * ad­‹r , ušt16_t ¡¬t_hªdË , 379 ušt16_t ’d_hªdË ) 381 ušt16_t hªdË ; 389 #ifdeà __TIZEN_PATCH__ 390  hªdË = ¡¬t_hªdË ; (hªdË !ð0 && hªdË <ð ’d_hªdË ); handle++) 392  hªdË = ¡¬t_hªdË ; hªdË <ð ’d_hªdË ; handle++) 394 ià( `©Œib_db_d– ( ad­‹r , hªdË ) < 0) 395 `”rÜ ("Cª'ˆd–‘hªdË 0x%04x", hªdË ); 396 } } 398 #ifdeà __TIZEN_PATCH__ 399  $is_g©t_cÚÃùed ( gcÚ¡poš‹r a1 , gcÚ¡poš‹¸ a2 ) 401 cÚ¡  btd_deviû * dev = a1 ; 403 ià( `deviû_g‘_g©t_cÚÃùed ( dev )) 407 } } 409 boÞ $g©t_£nd_nÙy_šd ( btd_ad­‹r * ad­‹r , bt_uuid_t * uuid , 410 ušt8_t * v®ue , size_t Ën ) 412  ©Œibu‹ * a ; 413 GA‰rib * ©Œib ; 414 GLi¡ * l , * cÚÃùiÚs ; 415  btd_deviû * dev ; 416 ušt16_t desc_hªdË ; 418 a = `©Œibu‹_fšd ( ad­‹r , uuid ); 419 ià(! a ) 420  FALSE ; 422 desc_hªdË = a -> hªdË + 1; 424 cÚÃùiÚs = ( GLi¡ *) `btd_ad­‹r_g‘_cÚÃùiÚs ( ad­‹r ); 427 l = `g_li¡_fšd_cu¡om ( cÚÃùiÚs , `GUINT_TO_POINTER ( NULL ), 428 is_g©t_cÚÃùed ); 429 ià( l ) { 430 dev = l -> d©a ; 431 ©Œib = `©Œib_äom_deviû ( dev ); 432 ià( ©Œib ) { 435 `©Œib_£nd_nÙy_šd ( dev , ©Œib , a -> hªdË , 436 desc_hªdË , v®ue , Ën ); 437 `g_©Œib_uÄef ( ©Œib ); 439 cÚÃùiÚs = ( GLi¡ *) `g_¦i¡_Ãxt (connections); 442 }  l ); 444  TRUE ; 445 } } 447 boÞ $g©t_upd©e_db ( btd_ad­‹r * ad­‹r , cÚ¡ bt_uuid_t * uuid , 448 ušt8_t * v®ue , size_t Ën ) 450  ©Œibu‹ * a ; 451 ušt8_t ¡©us ; 453 a = `©Œibu‹_fšd ( ad­‹r , uuid ); 454 ià(! a ) 455  FALSE ; 456 ¡©us = `©Œib_db_upd©e ( ad­‹r , a -> hªdË , NULL , v®ue , Ën , NULL); 458 ià( ¡©us ) 459  FALSE ; 461  TRUE ; 462 } } 464 boÞ $g©t_add_desütÜ ( btd_ad­‹r * ad­‹r , ušt16_t * hªdË , 465 ušt16_t ¡¬t_hªdË , g©t_ÝtiÚ Ýt1 , ...) 467 va_li¡ ¬gs ; 468 GSLi¡ * disc , * l ; 469 ušt16_t disc_hªdË = * hªdË ; 471 `va_¡¬t ( ¬gs , Ýt1 ); 472 disc = `·r£_Ýts ( Ýt1 , ¬gs ); 473 `va_’d ( ¬gs ); 475  l = disc ;† !ð NULL ;† =†-> Ãxt ) { 476  g©t_šfo * šfo = l -> d©a ; 478 `DBG ("New Descriptor: handle 0x%04x, start handle 0x%04x", 479 disc_hªdË , ¡¬t_hªdË ); 480 ià(! `add_desütÜ ( ad­‹r , & disc_hªdË , šfo )) { 481  çž ; 485 `g_¦i¡_ä“_fuÎ ( disc , ä“_g©t_šfo ); 486 * hªdË = disc_hªdË ; 488  TRUE ; 490 çž : 491 `g_¦i¡_ä“_fuÎ ( disc , ä“_g©t_šfo ); 492  FALSE ; 493 } } 495 boÞ $g©t_add_ch¬aù”i¡ic ( btd_ad­‹r * ad­‹r , 496 ušt16_t * hªdË , ušt16_ˆ ¡¬t_hªdË , 497 g©t_ÝtiÚ Ýt1 , ...) 499 va_li¡ ¬gs ; 500 GSLi¡ * chrs , * l ; 501 ušt16_t ch¬_hªdË = * hªdË ; 503 `va_¡¬t ( ¬gs , Ýt1 ); 504 chrs = `·r£_Ýts ( Ýt1 , ¬gs ); 505 `va_’d ( ¬gs ); 507  l = chrs ;† !ð NULL ;† =†-> Ãxt ) { 508  g©t_šfo * šfo = l -> d©a ; 510 `DBG ("New characteristic: handle 0x%04x, start handle 0x%04x", 511 ch¬_hªdË , ¡¬t_hªdË ); 512 ià(! `add_ch¬aù”i¡ic ( ad­‹r , & ch¬_hªdË , šfo )) { 513 `£rviû_©Œ_d– ( ad­‹r , ¡¬t_hªdË , 514 ch¬_hªdË - 1); 515  çž ; 519 `g_¦i¡_ä“_fuÎ ( chrs , ä“_g©t_šfo ); 520 * hªdË = ch¬_hªdË ; 522  TRUE ; 524 çž : 525 `g_¦i¡_ä“_fuÎ ( chrs , ä“_g©t_šfo ); 526  FALSE ; 527 } } 529  $©Œib_»move_£rviû ( btd_ad­‹r * ad­‹r , ušt16_t ¡¬t_hªdË , 530 ušt16_t ’d_hªdË ) 532 `DBG ("gatt_remove_service"); 533 `£rviû_©Œ_d– ( ad­‹r , ¡¬t_hªdË , ’d_hªdË ); 534 } } 536 ušt16_t $g©t_´im_£rviû_add ( btd_ad­‹r * ad­‹r , ušt16_t uuid , 537 bt_uuid_t * svc_uuid ,  size , 538 ušt16_t * ¡¬t_hªdË ) 540  uuid¡r [ MAX_LEN_UUID_STR ]; 541 ušt16_t hªdË , h ; 543 `bt_uuid_to_¡ršg ( svc_uuid , uuid¡r , MAX_LEN_UUID_STR ); 544 ià( svc_uuid -> ty³ !ð BT_UUID16 && svc_uuid->ty³ !ð BT_UUID128 ) { 545 `”rÜ ("Inv®id s”viû uuid: %s", uuid¡r ); 546  FALSE ; 549 hªdË = `©Œib_db_fšd_avaž ( ad­‹r , svc_uuid , size ); 550 ià( hªdË == 0) { 551 `”rÜ ("Notƒnough free handleso„egister service"); 552  çž ; 555 `DBG ("New service: handle 0x%04x, UUID %s, %d‡ttributes", 556 hªdË , uuid¡r , size ); 559 h = hªdË ; 560 * ¡¬t_hªdË = hªdË ; 561 ià( `add_£rviû_deþ¬©iÚ ( ad­‹r , h ++, uuid , svc_uuid è=ð NULL ) 562  çž ; 564  h ; 566 çž : 568 } } 571 gboÞ—n $g©t_£rviû_add ( btd_ad­‹r * ad­‹r , ušt16_t uuid , 572 bt_uuid_t * svc_uuid , g©t_ÝtiÚ Ýt1 , ...) 574  uuid¡r [ MAX_LEN_UUID_STR ]; 575 ušt16_t ¡¬t_hªdË , h ; 576  size ; 577 va_li¡ ¬gs ; 578 GSLi¡ * chrs , * l ; 580 `bt_uuid_to_¡ršg ( svc_uuid , uuid¡r , MAX_LEN_UUID_STR ); 582 ià( svc_uuid -> ty³ !ð BT_UUID16 && svc_uuid->ty³ !ð BT_UUID128 ) { 583 `”rÜ ("Inv®id s”viû uuid: %s", uuid¡r ); 584  FALSE ; 587 `va_¡¬t ( ¬gs , Ýt1 ); 588 chrs = `·r£_Ýts ( Ýt1 , ¬gs ); 589 `va_’d ( ¬gs ); 592  l = chrs , size = 1;† !ð NULL ;† =†-> Ãxt ) { 593  g©t_šfo * šfo = l -> d©a ; 594 size +ð šfo -> num_©Œs ; 597 ¡¬t_hªdË = `©Œib_db_fšd_avaž ( ad­‹r , svc_uuid , size ); 598 ià( ¡¬t_hªdË == 0) { 599 `”rÜ ("Notƒnough free handleso„egister service"); 600  çž ; 603 `DBG ("New service: handle 0x%04x, UUID %s, %d‡ttributes", 604 ¡¬t_hªdË , uuid¡r , size ); 607 h = ¡¬t_hªdË ; 608 ià( `add_£rviû_deþ¬©iÚ ( ad­‹r , h ++, uuid , svc_uuid è=ð NULL ) 609  çž ; 611  l = chrs ;† !ð NULL ;† =†-> Ãxt ) { 612  g©t_šfo * šfo = l -> d©a ; 614 `DBG ("New ch¬aù”i¡ic: hªdË 0x%04x", h ); 615 ià(! `add_ch¬aù”i¡ic ( ad­‹r , & h , šfo )) { 616 `£rviû_©Œ_d– ( ad­‹r , ¡¬t_hªdË , h - 1); 617  çž ; 621 `g_as£¹ ( size < USHRT_MAX ); 622 `g_as£¹ ( h =ð0 || (h - ¡¬t_hªdË =ð( ušt16_t è size )); 623 `g_¦i¡_ä“_fuÎ ( chrs , ä“_g©t_šfo ); 625  TRUE ; 627 çž : 628 `g_¦i¡_ä“_fuÎ ( chrs , ä“_g©t_šfo ); 629  FALSE ; 630 } } 633 gušt $g©t_ch¬_v®ue_nÙify ( GA‰rib * ©Œib , ušt16_t hªdË , ušt8_t * v®ue , 634  vËn , GA‰ribResuÉFunc func , gpoš‹r u£r_d©a ) 636 size_t buæ’ ; 637 ušt8_t * buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 638 gušt16 ¶’ ; 640 ¶’ = `’c_nÙifiÿtiÚ ( hªdË , v®ue , vËn , buf , buæ’ ); 641 ià( ¶’ == 0) 644  `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , func , u£r_d©a , NULL ); 645 } } 647 gušt $g©t_ch¬_v®ue_šdiÿ‹ ( GA‰rib * ©Œib , ušt16_t hªdË , ušt8_t * v®ue , 648  vËn , GA‰ribResuÉFunc func , gpoš‹r u£r_d©a ) 650 size_t buæ’ ; 651 ušt8_t * buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 652 gušt16 ¶’ ; 654 ¶’ = `’c_šdiÿtiÚ ( hªdË , v®ue , vËn , buf , buæ’ ); 655 ià( ¶’ == 0) 658  `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , func , u£r_d©a , NULL ); 659 } } @attrib/gatt-service.h 26 mGATT_OPT_INVALID = 0, 29 mGATT_OPT_CHR_UUID , 32 mGATT_OPT_CHR_UUID16 , 34 #ifdeà __TIZEN_PATCH__ 36 mGATT_OPT_DESC_UUID , 39 mGATT_OPT_DESC_UUID16 , 42 mGATT_OPT_CHR_PROPS , 43 mGATT_OPT_CHR_VALUE_CB , 44 #ifdeà __TIZEN_PATCH__ 45 mGATT_OPT_DESC_PROPS , 46 mGATT_OPT_DESC_VALUE_CB , 48 mGATT_OPT_CHR_AUTHENTICATION , 49 mGATT_OPT_CHR_AUTHORIZATION , 52 mGATT_OPT_CHR_VALUE_GET_HANDLE , 55 mGATT_OPT_CCC_GET_HANDLE , 58 mGATT_CHR_VALUE_READ , 59 mGATT_CHR_VALUE_WRITE , 60 mGATT_CHR_VALUE_BOTH , 61 } tg©t_ÝtiÚ ; 64 mATTRIB_READ , 65 mATTRIB_WRITE , 66 } t©Œib_ev’t_t ; 68 gboÞ—n g©t_£rviû_add ( btd_ad­‹r * ad­‹r , ušt16_t uuid , 69 bt_uuid_t * svc_uuid , g©t_ÝtiÚ Ýt1 , ...); 70 #ifdeà __TIZEN_PATCH__ 71 boÞ g©t_add_desütÜ ( btd_ad­‹r * ad­‹r , ušt16_t * hªdË , 72 ušt16_t ¡¬t_hªdË , g©t_ÝtiÚ Ýt1 , ...); 73 boÞ g©t_add_ch¬aù”i¡ic ( btd_ad­‹r * ad­‹r , 74 ušt16_t * hªdË , ušt16_ˆ ¡¬t_hªdË , 75 g©t_ÝtiÚ Ýt1 , ...); 76 ušt16_t g©t_´im_£rviû_add ( btd_ad­‹r * ad­‹r , ušt16_ˆ uuid , 77 bt_uuid_t * svc_uuid ,  size , 78 ušt16_t * ¡¬t_hªdË ); 79  ©Œib_»move_£rviû ( btd_ad­‹r * ad­‹r , ušt16_t ¡¬t_hªdË , 80 ušt16_t ’d_hªdË ); 81 boÞ g©t_upd©e_db ( btd_ad­‹r * ad­‹r , cÚ¡ bt_uuid_t * uuid , 82 ušt8_t * v®ue , size_t Ën ); 83 boÞ g©t_£nd_nÙy_šd ( btd_ad­‹r * ad­‹r , bt_uuid_t * uuid , 84 ušt8_t * v®ue , size_t Ën ); 85 boÞ g©t_£nd_£rviû_chªged_šd ( btd_ad­‹r * ad­‹r , bt_uuid_t * uuid , 86 ušt16_t ¡¬t_hªdË , ušt16_ˆ ’d_hªdË ); 89 gušt g©t_ch¬_v®ue_nÙify ( GA‰rib * ©Œib , ušt16_t hªdË , ušt8_t * v®ue , 90  vËn , GA‰ribResuÉFunc func , gpoš‹r u£r_d©a ); 91 gušt g©t_ch¬_v®ue_šdiÿ‹ ( GA‰rib * ©Œib , ušt16_t hªdË , ušt8_t * v®ue , 92  vËn , GA‰ribResuÉFunc func , gpoš‹r u£r_d©a ); @attrib/gatt.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dšt.h > 30  ~<¡dlib.h > 31  ~ 32  ~ 33  ~ 35  ~"¤c/sh¬ed/utž.h " 36  ~"lib/uuid.h " 37  ~"©t.h " 38  ~"g©Œib.h " 39  ~"g©t.h " 41  sdiscov”_´im¬y { 42  m»f ; 43 GA‰rib * m©Œib ; 44  mid ; 45 bt_uuid_t muuid ; 46 GSLi¡ * m´im¬›s ; 47 g©t_cb_t mcb ; 48 * mu£r_d©a ; 52  sšþuded_discov”y { 53 GA‰rib * m©Œib ; 54  mid ; 55  m»fs ; 56  m”r ; 57 ušt16_t m’d_hªdË ; 58 GSLi¡ * mšþudes ; 59 g©t_cb_t mcb ; 60 * mu£r_d©a ; 63  sšþuded_uuid_qu”y { 64  šþuded_discov”y * misd ; 65  g©t_šþuded * mšþuded ; 68  sdiscov”_ch¬ { 69  m»f ; 70 GA‰rib * m©Œib ; 71  mid ; 72 bt_uuid_t * muuid ; 73 ušt16_t m’d ; 74 GSLi¡ * mch¬aù”i¡ics ; 75 g©t_cb_t mcb ; 76 * mu£r_d©a ; 79  sdiscov”_desc { 80  m»f ; 81 GA‰rib * m©Œib ; 82  mid ; 83 bt_uuid_t * muuid ; 84 ušt16_t m’d ; 85 GSLi¡ * mdesütÜs ; 86 g©t_cb_t mcb ; 87 * mu£r_d©a ; 90  $discov”_´im¬y_uÄef (* d©a ) 92  discov”_´im¬y * dp = d©a ; 94 dp -> »f --; 96 ià( dp -> »f > 0) 99 `g_¦i¡_ä“_fuÎ ( dp -> ´im¬›s , g_ä“ ); 100 `g_©Œib_uÄef ( dp -> ©Œib ); 101 `g_ä“ ( dp ); 102 } } 104  discov”_´im¬y * $discov”_´im¬y_»f ( 105  discov”_´im¬y * dp ) 107 dp -> »f ++; 109  dp ; 110 } } 112  šþuded_discov”y * $isd_»f ( šþuded_discov”y * isd ) 114 `__sync_ãtch_ªd_add (& isd -> »fs , 1); 116  isd ; 117 } } 119  $isd_uÄef ( šþuded_discov”y * isd ) 121 ià( `__sync_sub_ªd_ãtch (& isd -> »fs , 1) > 0) 124 ià( isd -> ”r ) 125 isd -> `cb (isd-> ”r , NULL , isd-> u£r_d©a ); 127 isd -> `cb (isd-> ”r , isd-> šþudes , isd-> u£r_d©a ); 129 `g_¦i¡_ä“_fuÎ ( isd -> šþudes , g_ä“ ); 130 `g_©Œib_uÄef ( isd -> ©Œib ); 131 `g_ä“ ( isd ); 132 } } 134  $discov”_ch¬_uÄef (* d©a ) 136  discov”_ch¬ * dc = d©a ; 138 dc -> »f --; 140 ià( dc -> »f > 0) 143 `g_¦i¡_ä“_fuÎ ( dc -> ch¬aù”i¡ics , g_ä“ ); 144 `g_©Œib_uÄef ( dc -> ©Œib ); 145 `g_ä“ ( dc -> uuid ); 146 `g_ä“ ( dc ); 147 } } 149  discov”_ch¬ * $discov”_ch¬_»f ( discov”_ch¬ * dc ) 151 dc -> »f ++; 153  dc ; 154 } } 156  $discov”_desc_uÄef (* d©a ) 158  discov”_desc * dd = d©a ; 160 dd -> »f --; 162 ià( dd -> »f > 0) 165 `g_¦i¡_ä“_fuÎ ( dd -> desütÜs , g_ä“ ); 166 `g_©Œib_uÄef ( dd -> ©Œib ); 167 `g_ä“ ( dd -> uuid ); 168 `g_ä“ ( dd ); 169 } } 171  discov”_desc * $discov”_desc_»f ( discov”_desc * dd ) 173 dd -> »f ++; 175  dd ; 176 } } 178  $put_uuid_Ë (cÚ¡ bt_uuid_t * uuid , * d¡ ) 180 ià( uuid -> ty³ =ð BT_UUID16 ) 181 `put_Ë16 ( uuid -> v®ue . u16 , d¡ ); 182 #ifdeà __TIZEN_PATCH__ 183 ià( uuid -> ty³ =ð BT_UUID32 ) 184 `put_Ë32 ( uuid -> v®ue . u32 , d¡ ); 188 `bsw­_128 (& uuid -> v®ue . u128 , d¡ ); 189 } } 191  $g‘_uuid128 ( ušt8_t ty³ , cÚ¡ * v® , bt_uuid_t * uuid ) 193 ià( ty³ =ð BT_UUID16 ) { 194 bt_uuid_t uuid16 ; 196 `bt_uuid16_ü—‹ (& uuid16 , `g‘_Ë16 ( v® )); 197 `bt_uuid_to_uuid128 (& uuid16 , uuid ); 198 #ifdeà __TIZEN_PATCH__ 199 } ià( ty³ =ð BT_UUID32 ) { 200 bt_uuid_t uuid32 ; 202 `bt_uuid32_ü—‹ (& uuid32 , `g‘_Ë32 ( v® )); 203 `bt_uuid_to_uuid128 (& uuid32 , uuid ); 206 ušt128_t u128 ; 209 `bsw­_128 ( v® , & u128 ); 210 `bt_uuid128_ü—‹ ( uuid , u128 ); 212 } } 214  gušt16 $’code_discov”_´im¬y ( ušt16_t ¡¬t , ušt16_ˆ ’d , 215 bt_uuid_t * uuid , ušt8_t * pdu , size_t Ën ) 217 bt_uuid_t ´im ; 218 gušt16 ¶’ ; 220 `bt_uuid16_ü—‹ (& ´im , GATT_PRIM_SVC_UUID ); 222 ià( uuid =ð NULL ) { 224 ¶’ = `’c_»ad_by_g½_»q ( ¡¬t , ’d , & ´im , pdu , Ën ); 226 ušt8_t v®ue [16]; 227 size_t vËn ; 230 `put_uuid_Ë ( uuid , v®ue ); 231 vËn = `bt_uuid_Ën ( uuid ); 233 ¶’ = `’c_fšd_by_ty³_»q ( ¡¬t , ’d , & ´im , v®ue , vËn , 234 pdu , Ën ); 237  ¶’ ; 238 } } 240  $´im¬y_by_uuid_cb ( gušt8 ¡©us , cÚ¡ gušt8 * du , 241 gušt16 Ën , gpoš‹r u£r_d©a ) 244  discov”_´im¬y * dp = u£r_d©a ; 245 GSLi¡ * ¿nges , * Ï¡ ; 246  ©t_¿nge * ¿nge ; 247 ušt8_t * buf ; 248 gušt16 ÝËn ; 249  ”r = 0; 250 size_t buæ’ ; 252 ià( ¡©us ) { 253 ”r = ¡©us =ð ATT_ECODE_ATTR_NOT_FOUND ? 0 : status; 254  dÚe ; 257 ¿nges = `dec_fšd_by_ty³_»¥ ( du , Ën ); 258 ià( ¿nges =ð NULL ) 259  dÚe ; 261 dp -> ´im¬›s = `g_¦i¡_cÚÿt (dp->´im¬›s, ¿nges ); 263 Ï¡ = `g_¦i¡_Ï¡ ( ¿nges ); 264 ¿nge = Ï¡ -> d©a ; 266 ià( ¿nge -> ’d == 0xffff) 267  dÚe ; 269 buf = `g_©Œib_g‘_bufãr ( dp -> ©Œib , & buæ’ ); 270 ÝËn = `’code_discov”_´im¬y ( ¿nge -> ’d + 1, 0xffff, & dp -> uuid , 271 buf , buæ’ ); 273 ià( ÝËn == 0) 274  dÚe ; 276 `g_©Œib_£nd ( dp -> ©Œib , dp-> id , buf , ÝËn , ´im¬y_by_uuid_cb , 277 `discov”_´im¬y_»f ( dp ), discov”_´im¬y_uÄef ); 280 dÚe : 281 dp -> `cb ( ”r , dp-> ´im¬›s , dp-> u£r_d©a ); 282 } } 284  $´im¬y_®l_cb ( gušt8 ¡©us , cÚ¡ gušt8 * du , gušt16 Ën , 285 gpoš‹r u£r_d©a ) 287  discov”_´im¬y * dp = u£r_d©a ; 288  ©t_d©a_li¡ * li¡ ; 289  i , ”r ; 290 ušt16_t ¡¬t , ’d ; 291 ušt8_t ty³ ; 293 ià( ¡©us ) { 294 ”r = ¡©us =ð ATT_ECODE_ATTR_NOT_FOUND ? 0 : status; 295  dÚe ; 298 li¡ = `dec_»ad_by_g½_»¥ ( du , Ën ); 299 ià( li¡ =ð NULL ) { 300 ”r = ATT_ECODE_IO ; 301  dÚe ; 304 ià( li¡ -> Ën == 6) 305 ty³ = BT_UUID16 ; 306 ià( li¡ -> Ën == 20) 307 ty³ = BT_UUID128 ; 309 `©t_d©a_li¡_ä“ ( li¡ ); 310 ”r = ATT_ECODE_INVALID_PDU ; 311  dÚe ; 314  i = 0, ’d = 0; i < li¡ -> num ; i++) { 315 cÚ¡ ušt8_t * d©a = li¡ ->d©a[ i ]; 316  g©t_´im¬y * ´im¬y ; 317 bt_uuid_t uuid128 ; 319 ¡¬t = `g‘_Ë16 (& d©a [0]); 320 ’d = `g‘_Ë16 (& d©a [2]); 322 `g‘_uuid128 ( ty³ , & d©a [4], & uuid128 ); 324 ´im¬y = `g_Œy_Ãw0 ( g©t_´im¬y , 1); 325 ià(! ´im¬y ) { 326 `©t_d©a_li¡_ä“ ( li¡ ); 327 ”r = ATT_ECODE_INSUFF_RESOURCES ; 328  dÚe ; 330 ´im¬y -> ¿nge . ¡¬t = start; 331 ´im¬y -> ¿nge . ’d =ƒnd; 332 `bt_uuid_to_¡ršg (& uuid128 , ´im¬y -> uuid , (primary->uuid)); 333 dp -> ´im¬›s = `g_¦i¡_­³nd (dp->´im¬›s, ´im¬y ); 336 `©t_d©a_li¡_ä“ ( li¡ ); 337 ”r = 0; 339 ià( ’d != 0xffff) { 340 size_t buæ’ ; 341 ušt8_t * buf = `g_©Œib_g‘_bufãr ( dp -> ©Œib , & buæ’ ); 342 gušt16 ÝËn = `’code_discov”_´im¬y ( ’d + 1, 0xffff, NULL , 343 buf , buæ’ ); 345 `g_©Œib_£nd ( dp -> ©Œib , dp-> id , buf , ÝËn , ´im¬y_®l_cb , 346 `discov”_´im¬y_»f ( dp ), 347 discov”_´im¬y_uÄef ); 352 dÚe : 353 dp -> `cb ( ”r , dp-> ´im¬›s , dp-> u£r_d©a ); 354 } } 356 gušt $g©t_discov”_´im¬y ( GA‰rib * ©Œib , bt_uuid_t * uuid , g©t_cb_t func , 357 gpoš‹r u£r_d©a ) 359  discov”_´im¬y * dp ; 360 size_t buæ’ ; 361 ušt8_t * buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 362 GA‰ribResuÉFunc cb ; 363 gušt16 ¶’ ; 365 ¶’ = `’code_discov”_´im¬y (0x0001, 0xffff, uuid , buf , buæ’ ); 366 ià( ¶’ == 0) 369 dp = `g_Œy_Ãw0 ( discov”_´im¬y , 1); 370 ià( dp =ð NULL ) 373 dp -> ©Œib = `g_©Œib_»f (attrib); 374 dp -> cb = func ; 375 dp -> u£r_d©a = user_data; 377 ià( uuid ) { 378 dp -> uuid = *uuid; 379 cb = ´im¬y_by_uuid_cb ; 381 cb = ´im¬y_®l_cb ; 383 dp -> id = `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , cb , 384 `discov”_´im¬y_»f ( dp ), 385 discov”_´im¬y_uÄef ); 387  dp -> id ; 388 } } 390  $»sÞve_šþuded_uuid_cb ( ušt8_t ¡©us , cÚ¡ ušt8_ˆ* pdu , 391 ušt16_t Ën , gpoš‹r u£r_d©a ) 393  šþuded_uuid_qu”y * qu”y = u£r_d©a ; 394  šþuded_discov”y * isd = qu”y ->isd; 395  g©t_šþuded * šþ = qu”y -> šþuded ; 396  ”r = ¡©us ; 397 bt_uuid_t uuid128 ; 398 size_t buæ’ ; 399 ušt8_t * buf ; 401 ià( ”r ) 402  dÚe ; 404 buf = `g_©Œib_g‘_bufãr ( isd -> ©Œib , & buæ’ ); 405 ià( `dec_»ad_»¥ ( pdu , Ën , buf , buæ’ ) != 16) { 406 ”r = ATT_ECODE_IO ; 407  dÚe ; 410 `g‘_uuid128 ( BT_UUID128 , buf , & uuid128 ); 412 `bt_uuid_to_¡ršg (& uuid128 , šþ -> uuid , (incl->uuid)); 413 isd -> šþudes = `g_¦i¡_­³nd (isd->šþudes, šþ ); 414 qu”y -> šþuded = NULL ; 416 dÚe : 417 ià( isd -> ”r == 0) 418 isd -> ”r =ƒrr; 419 } } 421  $šc_qu”y_ä“ (* d©a ) 423  šþuded_uuid_qu”y * qu”y = d©a ; 425 `isd_uÄef ( qu”y -> isd ); 426 `g_ä“ ( qu”y -> šþuded ); 427 `g_ä“ ( qu”y ); 428 } } 430  gušt $»sÞve_šþuded_uuid ( šþuded_discov”y * isd , 431  g©t_šþuded * šþ ) 433  šþuded_uuid_qu”y * qu”y ; 434 size_t buæ’ ; 435 ušt8_t * buf = `g_©Œib_g‘_bufãr ( isd -> ©Œib , & buæ’ ); 436 gušt16 ÝËn = `’c_»ad_»q ( šþ -> ¿nge . ¡¬t , buf , buæ’ ); 438 qu”y = `g_Ãw0 ( šþuded_uuid_qu”y , 1); 439 qu”y -> isd = `isd_»f (isd); 440 qu”y -> šþuded = šþ ; 442  `g_©Œib_£nd ( isd -> ©Œib , qu”y ->isd-> id , buf , ÝËn , 443 »sÞve_šþuded_uuid_cb , qu”y , 444 šc_qu”y_ä“ ); 445 } } 447  g©t_šþuded * $šþuded_äom_buf (cÚ¡ ušt8_t * buf , gsize Ën ) 449  g©t_šþuded * šþ = `g_Ãw0 (gatt_included, 1); 451 šþ -> hªdË = `g‘_Ë16 (& buf [0]); 452 šþ -> ¿nge . ¡¬t = `g‘_Ë16 (& buf [2]); 453 šþ -> ¿nge . ’d = `g‘_Ë16 (& buf [4]); 455 ià( Ën == 8) { 456 bt_uuid_t uuid128 ; 458 `g‘_uuid128 ( BT_UUID16 , & buf [6], & uuid128 ); 459 `bt_uuid_to_¡ršg (& uuid128 , šþ -> uuid , (incl->uuid)); 462  šþ ; 463 } } 465  fšd_šþuded_cb ( ušt8_t ¡©us , cÚ¡ ušt8_ˆ* pdu , ušt16_t Ën , 466 gpoš‹r u£r_d©a ); 468  gušt $fšd_šþuded ( šþuded_discov”y * isd , ušt16_t ¡¬t ) 470 bt_uuid_t uuid ; 471 size_t buæ’ ; 472 ušt8_t * buf = `g_©Œib_g‘_bufãr ( isd -> ©Œib , & buæ’ ); 473 gušt16 ÝËn ; 475 `bt_uuid16_ü—‹ (& uuid , GATT_INCLUDE_UUID ); 476 ÝËn = `’c_»ad_by_ty³_»q ( ¡¬t , isd -> ’d_hªdË , & uuid , 477 buf , buæ’ ); 480 ià( isd -> id ) 481  `g_©Œib_£nd ( isd -> ©Œib , isd-> id , buf , ÝËn , 482 fšd_šþuded_cb , `isd_»f ( isd ), 483 ( GDe¡royNÙify è isd_uÄef ); 486 isd -> id = `g_©Œib_£nd (isd-> ©Œib , 0, buf , ÝËn , fšd_šþuded_cb , 487 `isd_»f ( isd ), ( GDe¡royNÙify è isd_uÄef ); 489  isd -> id ; 490 } } 492  $fšd_šþuded_cb ( ušt8_t ¡©us , cÚ¡ ušt8_ˆ* pdu , ušt16_t Ën , 493 gpoš‹r u£r_d©a ) 495  šþuded_discov”y * isd = u£r_d©a ; 496 ušt16_t Ï¡_hªdË = isd -> ’d_hªdË ; 497  ”r = ¡©us ; 498  ©t_d©a_li¡ * li¡ ; 499  i ; 501 ià( ”r =ð ATT_ECODE_ATTR_NOT_FOUND ) 502 ”r = 0; 504 ià( ¡©us ) 505  dÚe ; 507 li¡ = `dec_»ad_by_ty³_»¥ ( pdu , Ën ); 508 ià( li¡ =ð NULL ) { 509 ”r = ATT_ECODE_IO ; 510  dÚe ; 513 ià( li¡ -> Ën != 6 &&†ist->len != 8) { 514 ”r = ATT_ECODE_IO ; 515 `©t_d©a_li¡_ä“ ( li¡ ); 516  dÚe ; 519  i = 0; i < li¡ -> num ; i++) { 520  g©t_šþuded * šþ ; 522 šþ = `šþuded_äom_buf ( li¡ -> d©a [ i ],†i¡-> Ën ); 523 Ï¡_hªdË = šþ -> hªdË ; 526 ià( li¡ -> Ën == 6) { 527 `»sÞve_šþuded_uuid ( isd , šþ ); 531 isd -> šþudes = `g_¦i¡_­³nd (isd->šþudes, šþ ); 534 `©t_d©a_li¡_ä“ ( li¡ ); 536 ià( Ï¡_hªdË < isd -> ’d_hªdË ) 537 `fšd_šþuded ( isd , Ï¡_hªdË + 1); 539 dÚe : 540 ià( isd -> ”r == 0) 541 isd -> ”r =ƒrr; 542 } } 544  $g©t_fšd_šþuded ( GA‰rib * ©Œib , ušt16_t ¡¬t , ušt16_ˆ ’d , 545 g©t_cb_t func , gpoš‹r u£r_d©a ) 547  šþuded_discov”y * isd ; 549 isd = `g_Ãw0 ( šþuded_discov”y , 1); 550 isd -> ©Œib = `g_©Œib_»f (attrib); 551 isd -> ’d_hªdË = ’d ; 552 isd -> cb = func ; 553 isd -> u£r_d©a = user_data; 555  `fšd_šþuded ( isd , ¡¬t ); 556 } } 558  $ch¬_discov”ed_cb ( gušt8 ¡©us , cÚ¡ gušt8 * du , gušt16 Ën , 559 gpoš‹r u£r_d©a ) 561  discov”_ch¬ * dc = u£r_d©a ; 562  ©t_d©a_li¡ * li¡ ; 563  i , ”r = ATT_ECODE_ATTR_NOT_FOUND ; 564 ušt16_t Ï¡ = 0; 565 ušt8_t ty³ ; 567 ià( ¡©us ) { 568 ”r = ¡©us ; 569  dÚe ; 572 li¡ = `dec_»ad_by_ty³_»¥ ( du , Ën ); 573 ià( li¡ =ð NULL ) { 574 ”r = ATT_ECODE_IO ; 575  dÚe ; 578 ià( li¡ -> Ën == 7) 579 ty³ = BT_UUID16 ; 581 ty³ = BT_UUID128 ; 583  i = 0; i < li¡ -> num ; i++) { 584 ušt8_t * v®ue = li¡ -> d©a [ i ]; 585  g©t_ch¬ * ch¬s ; 586 bt_uuid_t uuid128 ; 588 Ï¡ = `g‘_Ë16 ( v®ue ); 590 `g‘_uuid128 ( ty³ , & v®ue [5], & uuid128 ); 592 ià( dc -> uuid && `bt_uuid_cmp (dc->uuid, & uuid128 )) 595 ch¬s = `g_Œy_Ãw0 ( g©t_ch¬ , 1); 596 ià(! ch¬s ) { 597 `©t_d©a_li¡_ä“ ( li¡ ); 598 ”r = ATT_ECODE_INSUFF_RESOURCES ; 599  dÚe ; 602 ch¬s -> hªdË = Ï¡ ; 603 ch¬s -> ´Ý”t›s = v®ue [2]; 604 ch¬s -> v®ue_hªdË = `g‘_Ë16 (& v®ue [3]); 605 `bt_uuid_to_¡ršg (& uuid128 , ch¬s -> uuid , (chars->uuid)); 606 dc -> ch¬aù”i¡ics = `g_¦i¡_­³nd (dc->characteristics, 607 ch¬s ); 610 `©t_d©a_li¡_ä“ ( li¡ ); 612 ià( Ï¡ !ð0 && (Ï¡ + 1 < dc -> ’d )) { 613 bt_uuid_t uuid ; 614 gušt16 ÝËn ; 615 size_t buæ’ ; 616 ušt8_t * buf ; 618 buf = `g_©Œib_g‘_bufãr ( dc -> ©Œib , & buæ’ ); 620 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_UUID ); 622 ÝËn = `’c_»ad_by_ty³_»q ( Ï¡ + 1, dc -> ’d , & uuid , buf , 623 buæ’ ); 625 ià( ÝËn == 0) 628 `g_©Œib_£nd ( dc -> ©Œib , dc-> id , buf , ÝËn , 629 ch¬_discov”ed_cb , `discov”_ch¬_»f ( dc ), 630 discov”_ch¬_uÄef ); 635 dÚe : 636 ”r = ( dc -> ch¬aù”i¡ics ? 0 :ƒrr); 637 dc -> `cb ( ”r , dc-> ch¬aù”i¡ics , dc-> u£r_d©a ); 638 } } 640 gušt $g©t_discov”_ch¬ ( GA‰rib * ©Œib , ušt16_t ¡¬t , ušt16_ˆ ’d , 641 bt_uuid_t * uuid , g©t_cb_t func , 642 gpoš‹r u£r_d©a ) 644 size_t buæ’ ; 645 ušt8_t * buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 646  discov”_ch¬ * dc ; 647 bt_uuid_t ty³_uuid ; 648 gušt16 ¶’ ; 650 `bt_uuid16_ü—‹ (& ty³_uuid , GATT_CHARAC_UUID ); 652 ¶’ = `’c_»ad_by_ty³_»q ( ¡¬t , ’d , & ty³_uuid , buf , buæ’ ); 653 ià( ¶’ == 0) 656 dc = `g_Œy_Ãw0 ( discov”_ch¬ , 1); 657 ià( dc =ð NULL ) 660 dc -> ©Œib = `g_©Œib_»f (attrib); 661 dc -> cb = func ; 662 dc -> u£r_d©a = user_data; 663 dc -> ’d =ƒnd; 664 dc -> uuid = `g_memdup (uuid, ( bt_uuid_t )); 666 dc -> id = `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , ch¬_discov”ed_cb , 667 `discov”_ch¬_»f ( dc ), discov”_ch¬_uÄef ); 669  dc -> id ; 670 } } 672 gušt $g©t_»ad_ch¬_by_uuid ( GA‰rib * ©Œib , ušt16_t ¡¬t , ušt16_ˆ ’d , 673 bt_uuid_t * uuid , GA‰ribResuÉFunc func , 674 gpoš‹r u£r_d©a ) 676 size_t buæ’ ; 677 ušt8_t * buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 678 gušt16 ¶’ ; 680 ¶’ = `’c_»ad_by_ty³_»q ( ¡¬t , ’d , uuid , buf , buæ’ ); 681 ià( ¶’ == 0) 684  `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , func , u£r_d©a , NULL ); 685 } } 687  s»ad_lÚg_d©a { 688 GA‰rib * m©Œib ; 689 GA‰ribResuÉFunc mfunc ; 690 gpoš‹r mu£r_d©a ; 691 gušt8 * mbufãr ; 692 gušt16 msize ; 693 gušt16 mhªdË ; 694 gušt mid ; 695  m»f ; 698  $»ad_lÚg_de¡roy ( gpoš‹r u£r_d©a ) 700  »ad_lÚg_d©a * lÚg_»ad = u£r_d©a ; 702 ià( `__sync_sub_ªd_ãtch (& lÚg_»ad -> »f , 1) > 0) 705 `g_©Œib_uÄef ( lÚg_»ad -> ©Œib ); 707 ià( lÚg_»ad -> bufãr !ð NULL ) 708 `g_ä“ ( lÚg_»ad -> bufãr ); 710 `g_ä“ ( lÚg_»ad ); 711 } } 713  $»ad_blob_h–³r ( gušt8 ¡©us , cÚ¡ gušt8 * ½du , gušt16 ¾’ , 714 gpoš‹r u£r_d©a ) 716  »ad_lÚg_d©a * lÚg_»ad = u£r_d©a ; 717 ušt8_t * buf ; 718 size_t buæ’ ; 719 gušt8 * tmp ; 720 gušt16 ¶’ ; 721 gušt id ; 723 ià( ¡©us !ð0 || ¾’ == 1) { 724 ¡©us = 0; 725  dÚe ; 728 tmp = `g_Œy_»®loc ( lÚg_»ad -> bufãr ,†Úg_»ad-> size + ¾’ - 1); 730 ià( tmp =ð NULL ) { 731 ¡©us = ATT_ECODE_INSUFF_RESOURCES ; 732  dÚe ; 735 `memýy (& tmp [ lÚg_»ad -> size ], & ½du [1], ¾’ - 1); 736 lÚg_»ad -> bufãr = tmp ; 737 lÚg_»ad -> size +ð ¾’ - 1; 739 buf = `g_©Œib_g‘_bufãr ( lÚg_»ad -> ©Œib , & buæ’ ); 740 ià( ¾’ < buæ’ ) 741  dÚe ; 743 ¶’ = `’c_»ad_blob_»q ( lÚg_»ad -> hªdË ,†Úg_»ad-> size - 1, 744 buf , buæ’ ); 745 id = `g_©Œib_£nd ( lÚg_»ad -> ©Œib ,†Úg_»ad->id, buf , ¶’ , 746 »ad_blob_h–³r , lÚg_»ad , »ad_lÚg_de¡roy ); 748 ià( id != 0) { 749 `__sync_ãtch_ªd_add (& lÚg_»ad -> »f , 1); 753 ¡©us = ATT_ECODE_IO ; 755 dÚe : 756 lÚg_»ad -> `func ( ¡©us ,†Úg_»ad-> bufãr ,†Úg_»ad-> size , 757 lÚg_»ad -> u£r_d©a ); 758 } } 760  $»ad_ch¬_h–³r ( gušt8 ¡©us , cÚ¡ gušt8 * ½du , 761 gušt16 ¾’ , gpoš‹r u£r_d©a ) 763  »ad_lÚg_d©a * lÚg_»ad = u£r_d©a ; 764 size_t buæ’ ; 765 ušt8_t * buf = `g_©Œib_g‘_bufãr ( lÚg_»ad -> ©Œib , & buæ’ ); 766 gušt16 ¶’ ; 767 gušt id ; 769 ià( ¡©us !ð0 || ¾’ < buæ’ ) 770  dÚe ; 772 lÚg_»ad -> bufãr = `g_m®loc ( ¾’ ); 773 ià( lÚg_»ad -> bufãr =ð NULL ) { 774 ¡©us = ATT_ECODE_INSUFF_RESOURCES ; 775  dÚe ; 778 `memýy ( lÚg_»ad -> bufãr , ½du , ¾’ ); 779 lÚg_»ad -> size = ¾’ ; 781 ¶’ = `’c_»ad_blob_»q ( lÚg_»ad -> hªdË , ¾’ - 1, buf , buæ’ ); 783 id = `g_©Œib_£nd ( lÚg_»ad -> ©Œib ,†Úg_»ad->id, buf , ¶’ , 784 »ad_blob_h–³r , lÚg_»ad , »ad_lÚg_de¡roy ); 785 ià( id != 0) { 786 `__sync_ãtch_ªd_add (& lÚg_»ad -> »f , 1); 790 ¡©us = ATT_ECODE_IO ; 792 dÚe : 793 lÚg_»ad -> `func ( ¡©us , ½du , ¾’ ,†Úg_»ad-> u£r_d©a ); 794 } } 796 #ifdeà __TIZEN_PATCH__ 797 gušt $g©t_»ad_ch¬_by_off£t ( GA‰rib * ©Œib , ušt16_t hªdË , ušt16_ˆ off£t , 798 GA‰ribResuÉFunc func , gpoš‹r u£r_d©a ) 800 ušt8_t * buf ; 801 size_t buæ’ ; 802 gušt16 ¶’ ; 803 gušt id ; 804  »ad_lÚg_d©a * lÚg_»ad ; 806 lÚg_»ad = `g_Œy_Ãw0 ( »ad_lÚg_d©a , 1); 808 ià( lÚg_»ad =ð NULL ) 811 lÚg_»ad -> ©Œib =‡ttrib; 812 lÚg_»ad -> func = func; 813 lÚg_»ad -> u£r_d©a = user_data; 814 lÚg_»ad -> hªdË = handle; 816 buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 817 ià( off£t > 0) 818 ¶’ = `’c_»ad_blob_»q ( hªdË , off£t , buf , buæ’ ); 820 ¶’ = `’c_»ad_»q ( hªdË , buf , buæ’ ); 822 id = `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , »ad_ch¬_h–³r , 823 lÚg_»ad , »ad_lÚg_de¡roy ); 824 ià( id == 0) 825 `g_ä“ ( lÚg_»ad ); 827 `__sync_ãtch_ªd_add (& lÚg_»ad -> »f , 1); 828 lÚg_»ad -> id = id; 831  id ; 832 } } 835 gušt $g©t_»ad_ch¬ ( GA‰rib * ©Œib , ušt16_t hªdË , GA‰ribResuÉFunc func , 836 gpoš‹r u£r_d©a ) 838 ušt8_t * buf ; 839 size_t buæ’ ; 840 gušt16 ¶’ ; 841 gušt id ; 842  »ad_lÚg_d©a * lÚg_»ad ; 844 lÚg_»ad = `g_Œy_Ãw0 ( »ad_lÚg_d©a , 1); 846 ià( lÚg_»ad =ð NULL ) 849 lÚg_»ad -> ©Œib = `g_©Œib_»f (attrib); 850 lÚg_»ad -> func = func; 851 lÚg_»ad -> u£r_d©a = user_data; 852 lÚg_»ad -> hªdË = handle; 854 buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 855 ¶’ = `’c_»ad_»q ( hªdË , buf , buæ’ ); 856 id = `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , »ad_ch¬_h–³r , 857 lÚg_»ad , »ad_lÚg_de¡roy ); 858 ià( id == 0) { 859 `g_©Œib_uÄef ( lÚg_»ad -> ©Œib ); 860 `g_ä“ ( lÚg_»ad ); 862 `__sync_ãtch_ªd_add (& lÚg_»ad -> »f , 1); 863 lÚg_»ad -> id = id; 866  id ; 867 } } 869  swr™e_lÚg_d©a { 870 GA‰rib * m©Œib ; 871 GA‰ribResuÉFunc mfunc ; 872 gpoš‹r mu£r_d©a ; 873 gušt16 mhªdË ; 874 ušt16_t moff£t ; 875 ušt8_t * mv®ue ; 876 size_t mvËn ; 879  gušt $execu‹_wr™e ( GA‰rib * ©Œib , ušt8_t æags , 880 GA‰ribResuÉFunc func , gpoš‹r u£r_d©a ) 882 ušt8_t * buf ; 883 size_t buæ’ ; 884 gušt16 ¶’ ; 886 buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 887 ¶’ = `’c_exec_wr™e_»q ( æags , buf , buæ’ ); 888 ià( ¶’ == 0) 891  `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , func , u£r_d©a , NULL ); 892 } } 894  gušt ´•¬e_wr™e ( wr™e_lÚg_d©a * lÚg_wr™e ); 896  $´•¬e_wr™e_cb ( gušt8 ¡©us , cÚ¡ gušt8 * ½du , gušt16 ¾’ , 897 gpoš‹r u£r_d©a ) 899  wr™e_lÚg_d©a * lÚg_wr™e = u£r_d©a ; 901 ià( ¡©us != 0) { 902 lÚg_wr™e -> `func ( ¡©us , ½du , ¾’ ,†Úg_wr™e-> u£r_d©a ); 907 lÚg_wr™e -> off£t +ð ¾’ - 5; 909 ià( lÚg_wr™e -> off£t =ðlÚg_wr™e-> vËn ) { 910 `execu‹_wr™e ( lÚg_wr™e -> ©Œib , ATT_WRITE_ALL_PREP_WRITES , 911 lÚg_wr™e -> func ,†Úg_wr™e-> u£r_d©a ); 912 `g_ä“ ( lÚg_wr™e -> v®ue ); 913 `g_ä“ ( lÚg_wr™e ); 918 `´•¬e_wr™e ( lÚg_wr™e ); 919 } } 921  gušt $´•¬e_wr™e ( wr™e_lÚg_d©a * lÚg_wr™e ) 923 GA‰rib * ©Œib = lÚg_wr™e ->attrib; 924 ušt16_t hªdË = lÚg_wr™e ->handle; 925 ušt16_t off£t = lÚg_wr™e ->offset; 926 ušt8_t * buf , * v®ue = lÚg_wr™e ->v®u+ off£t ; 927 size_t buæ’ , vËn = lÚg_wr™e ->vËÀ- off£t ; 928 gušt16 ¶’ ; 930 buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 932 ¶’ = `’c_´•_wr™e_»q ( hªdË , off£t , v®ue , vËn , buf , buæ’ ); 933 ià( ¶’ == 0) 936  `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , ´•¬e_wr™e_cb , lÚg_wr™e , 937 NULL ); 938 } } 940 gušt $g©t_wr™e_ch¬ ( GA‰rib * ©Œib , ušt16_t hªdË , cÚ¡ ušt8_t * v®ue , 941 size_t vËn , GA‰ribResuÉFunc func , gpoš‹r u£r_d©a ) 943 ušt8_t * buf ; 944 size_t buæ’ ; 945  wr™e_lÚg_d©a * lÚg_wr™e ; 947 buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 951 ià( vËn <ð buæ’ - 3) { 952 ušt16_t ¶’ ; 954 ¶’ = `’c_wr™e_»q ( hªdË , v®ue , vËn , buf , buæ’ ); 955 ià( ¶’ == 0) 958  `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , func , u£r_d©a , 959 NULL ); 963 lÚg_wr™e = `g_Œy_Ãw0 ( wr™e_lÚg_d©a , 1); 964 ià( lÚg_wr™e =ð NULL ) 967 lÚg_wr™e -> ©Œib =‡ttrib; 968 lÚg_wr™e -> func = func; 969 lÚg_wr™e -> u£r_d©a = user_data; 970 lÚg_wr™e -> hªdË = handle; 971 lÚg_wr™e -> v®ue = `g_memdup (v®ue, vËn ); 972 lÚg_wr™e -> vËn = vlen; 974  `´•¬e_wr™e ( lÚg_wr™e ); 975 } } 977 gušt $g©t_execu‹_wr™e ( GA‰rib * ©Œib , ušt8_t æags , 978 GA‰ribResuÉFunc func , gpoš‹r u£r_d©a ) 980  `execu‹_wr™e ( ©Œib , æags , func , u£r_d©a ); 981 } } 983 gušt $g©t_»lŸbË_wr™e_ch¬ ( GA‰rib * ©Œib , ušt16_t hªdË , 984 cÚ¡ ušt8_t * v®ue , size_t vËn , 985 GA‰ribResuÉFunc func , 986 gpoš‹r u£r_d©a ) 988 ušt8_t * buf ; 989 gušt16 ¶’ ; 990 size_t buæ’ ; 992 buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 994 ¶’ = `’c_´•_wr™e_»q ( hªdË , 0, v®ue , vËn , buf , buæ’ ); 995 ià(! ¶’ ) 998  `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , func , u£r_d©a , NULL ); 999 } } 1001 gušt $g©t_exchªge_mtu ( GA‰rib * ©Œib , ušt16_t mtu , GA‰ribResuÉFunc func , 1002 gpoš‹r u£r_d©a ) 1004 ušt8_t * buf ; 1005 size_t buæ’ ; 1006 gušt16 ¶’ ; 1008 buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 1009 ¶’ = `’c_mtu_»q ( mtu , buf , buæ’ ); 1010  `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , func , u£r_d©a , NULL ); 1011 } } 1013  $desc_discov”ed_cb ( gušt8 ¡©us , cÚ¡ gušt8 * du , 1014 gušt16 Ën , gpoš‹r u£r_d©a ) 1016  discov”_desc * dd = u£r_d©a ; 1017  ©t_d©a_li¡ * li¡ ; 1018  i , ”r = ATT_ECODE_ATTR_NOT_FOUND ; 1019 gušt8 fÜm© ; 1020 ušt16_t Ï¡ = 0xffff; 1021 ušt8_t ty³ ; 1022 gboÞ—n uuid_found = FALSE ; 1024 ià( ¡©us ) { 1025 ”r = ¡©us ; 1026  dÚe ; 1029 li¡ = `dec_fšd_šfo_»¥ ( du , Ën , & fÜm© ); 1030 ià(! li¡ ) { 1031 ”r = ATT_ECODE_IO ; 1032  dÚe ; 1035 ià( fÜm© =ð ATT_FIND_INFO_RESP_FMT_16BIT ) 1036 ty³ = BT_UUID16 ; 1038 ty³ = BT_UUID128 ; 1040  i = 0; i < li¡ -> num ; i++) { 1041 ušt8_t * v®ue = li¡ -> d©a [ i ]; 1042  g©t_desc * desc ; 1043 bt_uuid_t uuid128 ; 1045 Ï¡ = `g‘_Ë16 ( v®ue ); 1047 `g‘_uuid128 ( ty³ , & v®ue [2], & uuid128 ); 1049 ià( dd -> uuid ) { 1050 ià( `bt_uuid_cmp ( dd -> uuid , & uuid128 )) 1053 uuid_found = TRUE ; 1056 desc = `g_Œy_Ãw0 ( g©t_desc , 1); 1057 ià(! desc ) { 1058 `©t_d©a_li¡_ä“ ( li¡ ); 1059 ”r = ATT_ECODE_INSUFF_RESOURCES ; 1060  dÚe ; 1063 `bt_uuid_to_¡ršg (& uuid128 , desc -> uuid , (desc->uuid)); 1064 desc -> hªdË = Ï¡ ; 1066 ià( ty³ =ð BT_UUID16 ) 1067 desc -> uuid16 = `g‘_Ë16 (& v®ue [2]); 1069 dd -> desütÜs = `g_¦i¡_­³nd (dd->desütÜs, desc ); 1071 ià( uuid_found ) 1075 `©t_d©a_li¡_ä“ ( li¡ ); 1077 ià( Ï¡ < dd -> ’d && ! uuid_found ) { 1078 gušt16 ÝËn ; 1079 size_t buæ’ ; 1080 ušt8_t * buf ; 1082 buf = `g_©Œib_g‘_bufãr ( dd -> ©Œib , & buæ’ ); 1084 ÝËn = `’c_fšd_šfo_»q ( Ï¡ + 1, dd -> ’d , buf , buæ’ ); 1085 ià( ÝËn == 0) 1088 `g_©Œib_£nd ( dd -> ©Œib , dd-> id , buf , ÝËn , 1089 desc_discov”ed_cb , `discov”_desc_»f ( dd ), 1090 discov”_desc_uÄef ); 1095 dÚe : 1096 ”r = ( dd -> desütÜs ? 0 :ƒrr); 1097 dd -> `cb ( ”r , dd-> desütÜs , dd-> u£r_d©a ); 1098 } } 1100 gušt $g©t_discov”_desc ( GA‰rib * ©Œib , ušt16_t ¡¬t , ušt16_ˆ ’d , 1101 bt_uuid_t * uuid , g©t_cb_t func , 1102 gpoš‹r u£r_d©a ) 1104 size_t buæ’ ; 1105 ušt8_t * buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 1106  discov”_desc * dd ; 1107 gušt16 ¶’ ; 1109 ¶’ = `’c_fšd_šfo_»q ( ¡¬t , ’d , buf , buæ’ ); 1110 ià( ¶’ == 0) 1113 dd = `g_Œy_Ãw0 ( discov”_desc , 1); 1114 ià( dd =ð NULL ) 1117 dd -> ©Œib = `g_©Œib_»f (attrib); 1118 dd -> cb = func ; 1119 dd -> u£r_d©a = user_data; 1120 dd -> ’d =ƒnd; 1121 dd -> uuid = `g_memdup (uuid, ( bt_uuid_t )); 1123 dd -> id = `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , desc_discov”ed_cb , 1124 `discov”_desc_»f ( dd ), discov”_desc_uÄef ); 1126  dd -> id ; 1127 } } 1129 #ifdeà __TIZEN_PATCH__ 1130 gušt $g©t_fšd_šfo ( GA‰rib * ©Œib , ušt16_t ¡¬t , ušt16_ˆ ’d , 1131 GA‰ribResuÉFunc func , gpoš‹r u£r_d©a ) 1133 ušt8_t * buf ; 1134 size_t buæ’ ; 1135 gušt16 ¶’ ; 1137 buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 1138 ¶’ = `’c_fšd_šfo_»q ( ¡¬t , ’d , buf , buæ’ ); 1139 ià( ¶’ == 0) 1142  `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , func , u£r_d©a , NULL ); 1143 } } 1146 gušt $g©t_wr™e_cmd ( GA‰rib * ©Œib , ušt16_t hªdË , cÚ¡ ušt8_t * v®ue , 1147  vËn , GDe¡royNÙify nÙify , gpoš‹r u£r_d©a ) 1149 ušt8_t * buf ; 1150 size_t buæ’ ; 1151 gušt16 ¶’ ; 1153 buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 1154 ¶’ = `’c_wr™e_cmd ( hªdË , v®ue , vËn , buf , buæ’ ); 1155  `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , NULL , u£r_d©a , nÙify ); 1156 } } 1158 gušt $g©t_sigÃd_wr™e_cmd ( GA‰rib * ©Œib , ušt16_t hªdË , 1159 cÚ¡ ušt8_t * v®ue ,  vËn , 1160  bt_üy±o * üy±o , 1161 cÚ¡ ušt8_t c¤k [16], 1162 ušt32_t sign_út , 1163 GDe¡royNÙify nÙify , 1164 gpoš‹r u£r_d©a ) 1166 ušt8_t * buf ; 1167 size_t buæ’ ; 1168 gušt16 ¶’ ; 1170 buf = `g_©Œib_g‘_bufãr ( ©Œib , & buæ’ ); 1171 ¶’ = `’c_sigÃd_wr™e_cmd ( hªdË , v®ue , vËn , üy±o , c¤k , sign_út , 1172 buf , buæ’ ); 1173 ià( ¶’ == 0) 1176  `g_©Œib_£nd ( ©Œib , 0, buf , ¶’ , NULL , u£r_d©a , nÙify ); 1177 } } 1179  sdp_d©a_t * $´Ùo_£q_fšd ( sdp_li¡_t * ´Ùo_li¡ ) 1181 sdp_li¡_t * li¡ ; 1182 uuid_t ´Ùo ; 1184 `sdp_uuid16_ü—‹ (& ´Ùo , ATT_UUID ); 1186  li¡ = ´Ùo_li¡ ;†i¡;†i¡ =†i¡-> Ãxt ) { 1187 sdp_li¡_t * p ; 1188  p = li¡ -> d©a ;…;… =…-> Ãxt ) { 1189 sdp_d©a_t * £q = p -> d©a ; 1190 ià( £q && seq-> dtd =ð SDP_UUID16 && 1191 `sdp_uuid16_cmp (& ´Ùo , & £q -> v® . uuid ) == 0) 1192  £q -> Ãxt ; 1196  NULL ; 1197 } } 1199  gboÞ—n $·r£_´Ùo_·¿ms ( sdp_li¡_t * ´Ùo_li¡ , ušt16_t * psm , 1200 ušt16_t * ¡¬t , ušt16_ˆ* ’d ) 1202 sdp_d©a_t * £q1 , * £q2 ; 1204 ià( psm ) 1205 * psm = `sdp_g‘_´Ùo_pÜt ( ´Ùo_li¡ , L2CAP_UUID ); 1208 £q1 = `´Ùo_£q_fšd ( ´Ùo_li¡ ); 1209 ià(! £q1 || seq1-> dtd !ð SDP_UINT16 ) 1210  FALSE ; 1212 £q2 = £q1 -> Ãxt ; 1213 ià(! £q2 || seq2-> dtd !ð SDP_UINT16 ) 1214  FALSE ; 1216 ià( ¡¬t ) 1217 * ¡¬t = £q1 -> v® . ušt16 ; 1219 ià( ’d ) 1220 * ’d = £q2 -> v® . ušt16 ; 1222  TRUE ; 1223 } } 1225 gboÞ—n $g©t_·r£_»cÜd (cÚ¡ sdp_»cÜd_t * »c , 1226 uuid_t * ´im_uuid , ušt16_t * psm , 1227 ušt16_t * ¡¬t , ušt16_ˆ* ’d ) 1229 sdp_li¡_t * li¡ ; 1230 uuid_t uuid ; 1231 gboÞ—n »t ; 1233 ià( `sdp_g‘_£rviû_þas£s ( »c , & li¡ ) < 0) 1234  FALSE ; 1236 `memýy (& uuid , li¡ -> d©a , (uuid)); 1237 `sdp_li¡_ä“ ( li¡ , ä“ ); 1239 ià( `sdp_g‘_acûss_´Ùos ( »c , & li¡ ) < 0) 1240  FALSE ; 1242 »t = `·r£_´Ùo_·¿ms ( li¡ , psm , ¡¬t , ’d ); 1244 `sdp_li¡_fÜ—ch ( li¡ , ( sdp_li¡_func_t è sdp_li¡_ä“ , NULL ); 1245 `sdp_li¡_ä“ ( li¡ , NULL ); 1248 ià( »t && ´im_uuid ) 1249 `memýy ( ´im_uuid , & uuid , ( uuid_t )); 1251  »t ; 1252 } } @attrib/gatt.h 25  ~ 36  #GATT_CHR_PROP_BROADCAST 0x01 ) 37  #GATT_CHR_PROP_READ 0x02 ) 38  #GATT_CHR_PROP_WRITE_WITHOUT_RESP 0x04 ) 39  #GATT_CHR_PROP_WRITE 0x08 ) 40  #GATT_CHR_PROP_NOTIFY 0x10 ) 41  #GATT_CHR_PROP_INDICATE 0x20 ) 42  #GATT_CHR_PROP_AUTH 0x40 ) 43  #GATT_CHR_PROP_EXT_PROP 0x80 ) 46  #GATT_CLIENT_CHARAC_CFG_NOTIF_BIT 0x0001 ) 47  #GATT_CLIENT_CHARAC_CFG_IND_BIT 0x0002 ) 49 (* tg©t_cb_t è( tušt8_t t¡©us , tGSLi¡ * tl , * tu£r_d©a ); 51  sg©t_´im¬y { 52  uuid [ MAX_LEN_UUID_STR + 1]; 53 gboÞ—n chªged ; 54  ©t_¿nge ¿nge ; 57  sg©t_šþuded { 58  uuid [ MAX_LEN_UUID_STR + 1]; 59 ušt16_t hªdË ; 60  ©t_¿nge ¿nge ; 63  sg©t_ch¬ { 64  uuid [ MAX_LEN_UUID_STR + 1]; 65 ušt16_t hªdË ; 66 ušt8_t ´Ý”t›s ; 67 ušt16_t v®ue_hªdË ; 70  sg©t_desc { 71  uuid [ MAX_LEN_UUID_STR + 1]; 72 ušt16_t hªdË ; 73 ušt16_t uuid16 ; 76 gušt `g©t_discov”_´im¬y ( GA‰rib * ©Œib , bt_uuid_t * uuid , g©t_cb_t func , 77 gpoš‹r u£r_d©a ); 79  `g©t_fšd_šþuded ( GA‰rib * ©Œib , ušt16_t ¡¬t , ušt16_ˆ ’d , 80 g©t_cb_t func , gpoš‹r u£r_d©a ); 82 gušt `g©t_discov”_ch¬ ( GA‰rib * ©Œib , ušt16_t ¡¬t , ušt16_ˆ ’d , 83 bt_uuid_t * uuid , g©t_cb_t func , 84 gpoš‹r u£r_d©a ); 86 gušt `g©t_»ad_ch¬ ( GA‰rib * ©Œib , ušt16_t hªdË , GA‰ribResuÉFunc func , 87 gpoš‹r u£r_d©a ); 89 gušt `g©t_wr™e_ch¬ ( GA‰rib * ©Œib , ušt16_t hªdË , cÚ¡ ušt8_t * v®ue , 90 size_t vËn , GA‰ribResuÉFunc func , 91 gpoš‹r u£r_d©a ); 93 gušt `g©t_discov”_desc ( GA‰rib * ©Œib , ušt16_t ¡¬t , ušt16_ˆ ’d , 94 bt_uuid_t * uuid , g©t_cb_t func , 95 gpoš‹r u£r_d©a ); 97 gušt `g©t_»lŸbË_wr™e_ch¬ ( GA‰rib * ©Œib , ušt16_t hªdË , 98 cÚ¡ ušt8_t * v®ue , size_t vËn , 99 GA‰ribResuÉFunc func , 100 gpoš‹r u£r_d©a ); 102 gušt `g©t_execu‹_wr™e ( GA‰rib * ©Œib , ušt8_t æags , 103 GA‰ribResuÉFunc func , gpoš‹r u£r_d©a ); 105 gušt `g©t_wr™e_cmd ( GA‰rib * ©Œib , ušt16_t hªdË , cÚ¡ ušt8_t * v®ue , 106  vËn , GDe¡royNÙify nÙify , gpoš‹r u£r_d©a ); 108 gušt `g©t_sigÃd_wr™e_cmd ( GA‰rib * ©Œib , ušt16_t hªdË , 109 cÚ¡ ušt8_t * v®ue ,  vËn , 110  bt_üy±o * üy±o , 111 cÚ¡ ušt8_t c¤k [16], 112 ušt32_t sign_út , 113 GDe¡royNÙify nÙify , 114 gpoš‹r u£r_d©a ); 115 gušt `g©t_»ad_ch¬_by_uuid ( GA‰rib * ©Œib , ušt16_t ¡¬t , ušt16_ˆ ’d , 116 bt_uuid_t * uuid , GA‰ribResuÉFunc func , 117 gpoš‹r u£r_d©a ); 119 gušt `g©t_exchªge_mtu ( GA‰rib * ©Œib , ušt16_t mtu , GA‰ribResuÉFunc func , 120 gpoš‹r u£r_d©a ); 122 gboÞ—n `g©t_·r£_»cÜd (cÚ¡ sdp_»cÜd_t * »c , 123 uuid_t * ´im_uuid , ušt16_t * psm , 124 ušt16_t * ¡¬t , ušt16_ˆ* ’d ); 126 #ifdeà __TIZEN_PATCH__ 127 gušt `g©t_fšd_šfo ( GA‰rib * ©Œib , ušt16_t ¡¬t , ušt16_ˆ ’d , 128 GA‰ribResuÉFunc func , gpoš‹r u£r_d©a ); @attrib/gattrib.c 25 #ifdeà HAVE_CONFIG_H 26  ~"cÚfig.h " 29  ~<¡dšt.h > 30  ~<¡dboÞ.h > 31  ~<¡ršg.h > 32  ~ 34  ~<¡dio.h > 36  ~ 38  ~"btio/btio.h " 39  ~"¤c/log.h " 40  ~"¤c/sh¬ed/utž.h " 41  ~"¤c/sh¬ed/©t.h " 42  ~"¤c/sh¬ed/queue.h " 43  ~"©Œib/g©Œib.h " 45  s_GA‰rib { 46  m»f_couÁ ; 47  bt_©t * m©t ; 48 GIOChªÃl * mio ; 49 GDe¡royNÙify mde¡roy ; 50 gpoš‹r mde¡roy_u£r_d©a ; 51  queue * mÿÎbacks ; 52 ušt8_t * mbuf ; 53  mbuæ’ ; 54  queue * mŒack_ids ; 57  sid_·œ { 58  mÜg_id ; 59  m³nd_id ; 62  s©Œib_ÿÎbacks { 63  id_·œ * mid ; 64 GA‰ribResuÉFunc m»suÉ_func ; 65 GA‰ribNÙifyFunc mnÙify_func ; 66 GDe¡royNÙify mde¡roy_func ; 67 gpoš‹r mu£r_d©a ; 68 GA‰rib * m·»Á ; 69 ušt16_t mnÙify_hªdË ; 72  boÞ $fšd_w™h_Üg_id (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 74 cÚ¡  id_·œ * p = d©a ; 75  Üig_id = `PTR_TO_UINT ( u£r_d©a ); 77  ( p -> Üg_id =ð Üig_id ); 78 } } 80  id_·œ * $¡Üe_id ( GA‰rib * ©Œib ,  Üg_id , 81  ³nd_id ) 83  id_·œ * t ; 85 t = `Ãw0 ( id_·œ , 1); 86 ià(! t ) 87  NULL ; 89 t -> Üg_id = org_id; 90 t -> ³nd_id =…end_id; 92 ià( `queue_push_ž ( ©Œib -> Œack_ids , t )) 93  t ; 95  NULL ; 96 } } 98 GA‰rib * $g_©Œib_Ãw ( GIOChªÃl * io , gušt16 mtu ) 100 gšt fd ; 101 GA‰rib * ©Œ ; 103 ià(! io ) 104  NULL ; 106 fd = `g_io_chªÃl_unix_g‘_fd ( io ); 107 ©Œ = `Ãw0 ( GA‰rib , 1); 108 ià(! ©Œ ) 109  NULL ; 111 `g_io_chªÃl_»f ( io ); 112 ©Œ -> io = io; 114 ©Œ -> ©t = `bt_©t_Ãw ( fd ); 115 ià(! ©Œ -> ©t ) 116  çž ; 118 ià(! `bt_©t_£t_mtu ( ©Œ -> ©t , mtu )) 119  çž ; 121 ©Œ -> buf = `m®loc0 ( mtu ); 122 ©Œ -> buæ’ = mtu ; 123 ià(! ©Œ -> buf ) 124  çž ; 126 ©Œ -> ÿÎbacks = `queue_Ãw (); 127 ià(! ©Œ -> ÿÎbacks ) 128  çž ; 130 ©Œ -> Œack_ids = `queue_Ãw (); 131 ià(! ©Œ -> Œack_ids ) 132  çž ; 134  `g_©Œib_»f ( ©Œ ); 136 çž : 137 `ä“ ( ©Œ -> buf ); 138 `bt_©t_uÄef ( ©Œ -> ©t ); 139 `g_io_chªÃl_uÄef ( io ); 140 `ä“ ( ©Œ ); 141  NULL ; 142 } } 144 GA‰rib * $g_©Œib_»f ( GA‰rib * ©Œib ) 146 ià(! ©Œib ) 147  NULL ; 149 `__sync_ãtch_ªd_add (& ©Œib -> »f_couÁ , 1); 151 `DBG ("%p: g_©Œib_»f=%d ", ©Œib ,‡‰rib-> »f_couÁ ); 153  ©Œib ; 154 } } 156  $©Œib_ÿÎbacks_de¡roy (* d©a ) 158  ©Œib_ÿÎbacks * cb = d©a ; 160 ià( cb -> de¡roy_func ) 161 cb -> `de¡roy_func (cb-> u£r_d©a ); 163 ià( `queue_»move ( cb -> ·»Á -> Œack_ids , cb-> id )) 164 `ä“ ( cb -> id ); 166 `ä“ ( d©a ); 167 } } 169  $©Œib_ÿÎbacks_»move (* d©a ) 171  ©Œib_ÿÎbacks * cb = d©a ; 173 ià(! d©a || ! `queue_»move ( cb -> ·»Á -> ÿÎbacks , data)) 176 `©Œib_ÿÎbacks_de¡roy ( d©a ); 177 } } 179  $g_©Œib_uÄef ( GA‰rib * ©Œib ) 181 ià(! ©Œib ) 184 `DBG ("%p: g_©Œib_uÄef=%d ", ©Œib ,‡‰rib-> »f_couÁ - 1); 186 ià( `__sync_sub_ªd_ãtch (& ©Œib -> »f_couÁ , 1)) 189 ià( ©Œib -> de¡roy ) 190 ©Œib -> `de¡roy ׉rib-> de¡roy_u£r_d©a ); 192 `bt_©t_uÄef ( ©Œib -> ©t ); 194 `queue_de¡roy ( ©Œib -> ÿÎbacks , ©Œib_ÿÎbacks_de¡roy ); 195 `queue_de¡roy ( ©Œib -> Œack_ids , ä“ ); 197 `ä“ ( ©Œib -> buf ); 199 `g_io_chªÃl_uÄef ( ©Œib -> io ); 201 `ä“ ( ©Œib ); 202 } } 204 GIOChªÃl * $g_©Œib_g‘_chªÃl ( GA‰rib * ©Œib ) 206 ià(! ©Œib ) 207  NULL ; 209  ©Œib -> io ; 210 } } 212  bt_©t * $g_©Œib_g‘_©t ( GA‰rib * ©Œib ) 214 ià(! ©Œib ) 215  NULL ; 217  ©Œib -> ©t ; 218 } } 220 #ifdeà __TIZEN_PATCH__ 221  $g_©Œib_chªÃl_uÄef ( GA‰rib * ©Œib ) 223 ià( ©Œib -> io ) { 224 `g_io_chªÃl_shutdown ( ©Œib -> io , FALSE , NULL ); 225 `g_io_chªÃl_uÄef ( ©Œib -> io ); 226 ©Œib -> io = NULL ; 228 } } 231 gboÞ—n $g_©Œib_£t_de¡roy_funùiÚ ( GA‰rib * ©Œib , 232 GDe¡royNÙify de¡roy , gpoš‹r u£r_d©a ) 234 ià(! ©Œib ) 235  FALSE ; 237 ©Œib -> de¡roy = destroy; 238 ©Œib -> de¡roy_u£r_d©a = u£r_d©a ; 240  TRUE ; 241 } } 244  ušt8_t * $cÚ¡ruù_fuÎ_pdu ( ušt8_t Ýcode , cÚ¡ * pdu , 245 ušt16_t Ëngth ) 247 ušt8_t * buf = `m®loc0 ( Ëngth + 1); 249 ià(! buf ) 250  NULL ; 252 buf [0] = Ýcode ; 253 `memýy ( buf + 1, pdu , Ëngth ); 255  buf ; 256 } } 258  $©Œib_ÿÎback_»suÉ ( ušt8_t Ýcode , cÚ¡ * pdu , 259 ušt16_t Ëngth , * u£r_d©a ) 261 ušt8_t * buf ; 262  ©Œib_ÿÎbacks * cb = u£r_d©a ; 263 gušt8 ¡©us = 0; 265 ià(! cb ) 268 buf = `cÚ¡ruù_fuÎ_pdu ( Ýcode , pdu , Ëngth ); 269 ià(! buf ) 272 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 274 ià( Ëngth < 4) 275 ¡©us = BT_ATT_ERROR_UNLIKELY ; 277 ¡©us = (( gušt8 *) pdu )[3]; 280 ià( cb -> »suÉ_func ) 281 cb -> `»suÉ_func ( ¡©us , buf , Ëngth + 1, cb-> u£r_d©a ); 283 `ä“ ( buf ); 284 } } 286  $©Œib_ÿÎback_nÙify ( ušt8_t Ýcode , cÚ¡ * pdu , 287 ušt16_t Ëngth , * u£r_d©a ) 289 ušt8_t * buf ; 290  ©Œib_ÿÎbacks * cb = u£r_d©a ; 292 ià(! cb || !cb-> nÙify_func ) 295 ià( cb -> nÙify_hªdË !ð GATTRIB_ALL_HANDLES && Ëngth < 2) 298 ià( cb -> nÙify_hªdË !ð GATTRIB_ALL_HANDLES && 299 cb -> nÙify_hªdË !ð `g‘_Ë16 ( pdu )) 302 buf = `cÚ¡ruù_fuÎ_pdu ( Ýcode , pdu , Ëngth ); 303 ià(! buf ) 306 cb -> `nÙify_func ( buf , Ëngth + 1, cb-> u£r_d©a ); 308 `ä“ ( buf ); 309 } } 311 gušt $g_©Œib_£nd ( GA‰rib * ©Œib , gušt id , cÚ¡ gušt8 * pdu , gušt16 Ën , 312 GA‰ribResuÉFunc func , gpoš‹r u£r_d©a , 313 GDe¡royNÙify nÙify ) 315  ©Œib_ÿÎbacks * cb = NULL ; 316 bt_©t_»¥Ú£_func_t »¥Ú£_cb = NULL ; 317 bt_©t_de¡roy_func_t de¡roy_cb = NULL ; 318  ³nd_id ; 320 ià(! ©Œib ) 323 ià(! pdu || ! Ën ) 326 ià( func || nÙify ) { 327 cb = `Ãw0 ( ©Œib_ÿÎbacks , 1); 328 ià(! cb ) 330 cb -> »suÉ_func = func ; 331 cb -> u£r_d©a = user_data; 332 cb -> de¡roy_func = nÙify ; 333 cb -> ·»Á = ©Œib ; 334 `queue_push_h—d ( ©Œib -> ÿÎbacks , cb ); 335 »¥Ú£_cb = ©Œib_ÿÎback_»suÉ ; 336 de¡roy_cb = ©Œib_ÿÎbacks_»move ; 340 ³nd_id = `bt_©t_£nd ( ©Œib -> ©t , pdu [0], (*èpdu + 1, Ën - 1, 341 »¥Ú£_cb , cb , de¡roy_cb ); 347 ià( id == 0) 348 id = ³nd_id ; 354 ià( cb ) 355 cb -> id = `¡Üe_id ( ©Œib , id, ³nd_id ); 357  id ; 358 } } 360 gboÞ—n $g_©Œib_ÿnûl ( GA‰rib * ©Œib , gušt id ) 362  id_·œ * p ; 364 ià(! ©Œib ) 365  FALSE ; 379 p = `queue_»move_if ( ©Œib -> Œack_ids , fšd_w™h_Üg_id , 380 `UINT_TO_PTR ( id )); 381 ià(! p ) 382  FALSE ; 384 id = p -> ³nd_id ; 385 `ä“ ( p ); 387  `bt_©t_ÿnûl ( ©Œib -> ©t , id ); 388 } } 390  $ÿnûl_»que¡ (* d©a , * u£r_d©a ) 392  id_·œ * p = d©a ; 393 GA‰rib * ©Œib = u£r_d©a ; 395 `bt_©t_ÿnûl ( ©Œib -> ©t , p -> ³nd_id ); 396 } } 398 gboÞ—n $g_©Œib_ÿnûl_®l ( GA‰rib * ©Œib ) 400 ià(! ©Œib ) 401  FALSE ; 404 `queue_fÜ—ch ( ©Œib -> Œack_ids , ÿnûl_»que¡ ,‡ttrib); 405 `queue_»move_®l ( ©Œib -> Œack_ids , NULL , NULL, ä“ ); 407  TRUE ; 408 } } 410 gušt $g_©Œib_»gi¡” ( GA‰rib * ©Œib , gušt8 Ýcode , gušt16 hªdË , 411 GA‰ribNÙifyFunc func , gpoš‹r u£r_d©a , 412 GDe¡royNÙify nÙify ) 414  ©Œib_ÿÎbacks * cb = NULL ; 416 ià(! ©Œib ) 419 ià( func || nÙify ) { 420 cb = `Ãw0 ( ©Œib_ÿÎbacks , 1); 421 ià(! cb ) 423 cb -> nÙify_func = func ; 424 cb -> nÙify_hªdË = hªdË ; 425 cb -> u£r_d©a = user_data; 426 cb -> de¡roy_func = nÙify ; 427 cb -> ·»Á = ©Œib ; 428 `queue_push_h—d ( ©Œib -> ÿÎbacks , cb ); 431 ià( Ýcode =ð GATTRIB_ALL_REQS ) 432 Ýcode = BT_ATT_ALL_REQUESTS ; 434  `bt_©t_»gi¡” ( ©Œib -> ©t , Ýcode , ©Œib_ÿÎback_nÙify , 435 cb , ©Œib_ÿÎbacks_»move ); 436 } } 438 ušt8_t * $g_©Œib_g‘_bufãr ( GA‰rib * ©Œib , size_t * Ën ) 440 ià(! ©Œib || ! Ën ) 441  NULL ; 443 * Ën = ©Œib -> buæ’ ; 444  ©Œib -> buf ; 445 } } 447 gboÞ—n $g_©Œib_£t_mtu ( GA‰rib * ©Œib ,  mtu ) 449 ià(! ©Œib ) 450  FALSE ; 459 ià( mtu > ©Œib -> buæ’ ) 460 ©Œib -> buf = `g_»®loc ׉rib->buf, mtu ); 462 ©Œib -> buæ’ = mtu ; 464  `bt_©t_£t_mtu ( ©Œib -> ©t , mtu ); 465 } } 467 gboÞ—n $g_©Œib_uÄegi¡” ( GA‰rib * ©Œib , gušt id ) 469 ià(! ©Œib ) 470  FALSE ; 472  `bt_©t_uÄegi¡” ( ©Œib -> ©t , id ); 473 } } 475 gboÞ—n $g_©Œib_uÄegi¡”_®l ( GA‰rib * ©Œib ) 477 ià(! ©Œib ) 478  çl£ ; 480  `bt_©t_uÄegi¡”_®l ( ©Œib -> ©t ); 481 } } @attrib/gattrib.h 24 #iâdeà __GATTRIB_H 25  #__GATTRIB_H ) 27 #ifdeà __ýlu¥lus 31  #GATTRIB_ALL_REQS 0xFE ) 32  #GATTRIB_ALL_HANDLES 0x0000 ) 34  bt_©t ; 35  _GA‰rib ; 36  _GA‰rib tGA‰rib ; 38 (* GA‰ribResuÉFunc è( tgušt8 t¡©us , cÚ¡ gušt8 * tpdu , 39 tgušt16 tËn , tgpoš‹r tu£r_d©a ); 40 (* GA‰ribDiscÚÃùFunc )( tgpoš‹r tu£r_d©a ); 41 (* GA‰ribDebugFunc )(cÚ¡ * t¡r , tgpoš‹r tu£r_d©a ); 42 (* GA‰ribNÙifyFunc )(cÚ¡ tgušt8 * tpdu , tgušt16 tËn , 43 tgpoš‹r tu£r_d©a ); 45 GA‰rib * g_©Œib_Ãw ( GIOChªÃl * io , gušt16 mtu ); 46 GA‰rib * g_©Œib_»f (GA‰rib * ©Œib ); 47  g_©Œib_uÄef ( GA‰rib * ©Œib ); 49 GIOChªÃl * g_©Œib_g‘_chªÃl ( GA‰rib * ©Œib ); 51 #ifdeà __TIZEN_PATCH__ 52  g_©Œib_chªÃl_uÄef ( GA‰rib * ©Œib ); 55 gboÞ—n g_©Œib_£t_de¡roy_funùiÚ ( GA‰rib * ©Œib , 56 GDe¡royNÙify de¡roy , gpoš‹r u£r_d©a ); 58 gušt g_©Œib_£nd ( GA‰rib * ©Œib , gušˆ id , cÚ¡ gušt8 * pdu , gušt16 Ën , 59 GA‰ribResuÉFunc func , gpoš‹r u£r_d©a , 60 GDe¡royNÙify nÙify ); 62 gboÞ—n g_©Œib_ÿnûl ( GA‰rib * ©Œib , gušt id ); 63 gboÞ—n g_©Œib_ÿnûl_®l ( GA‰rib * ©Œib ); 65 gušt g_©Œib_»gi¡” ( GA‰rib * ©Œib , gušt8 Ýcode , gušt16 hªdË , 66 GA‰ribNÙifyFunc func , gpoš‹r u£r_d©a , 67 GDe¡royNÙify nÙify ); 69 ušt8_t * g_©Œib_g‘_bufãr ( GA‰rib * ©Œib , size_t * Ën ); 70 gboÞ—n g_©Œib_£t_mtu ( GA‰rib * ©Œib ,  mtu ); 72 gboÞ—n g_©Œib_uÄegi¡” ( GA‰rib * ©Œib , gušt id ); 73 gboÞ—n g_©Œib_uÄegi¡”_®l ( GA‰rib * ©Œib ); 75 #ifdeà __ýlu¥lus @attrib/gatttool.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~ 34  ~ 35  ~ 36  ~ 38  ~"¤c/sh¬ed/utž.h " 39  ~"lib/uuid.h " 40  ~"©t.h " 41  ~"btio/btio.h " 42  ~"g©Œib.h " 43  ~"g©t.h " 44  ~"g©‰oÞ.h " 46 * gÝt_¤c = NULL ; 47 * gÝt_d¡ = NULL ; 48 * gÝt_d¡_ty³ = NULL ; 49 * gÝt_v®ue = NULL ; 50 * gÝt_£c_Ëv– = NULL ; 51  bt_uuid_t * gÝt_uuid = NULL ; 52  gÝt_¡¬t = 0x0001; 53  gÝt_’d = 0xffff; 54  gÝt_hªdË = -1; 55  gÝt_mtu = 0; 56  gÝt_psm = 0; 57  gboÞ—n gÝt_´im¬y = FALSE ; 58  gboÞ—n gÝt_ch¬aù”i¡ics = FALSE ; 59  gboÞ—n gÝt_ch¬_»ad = FALSE ; 60  gboÞ—n gÝt_li¡’ = FALSE ; 61  gboÞ—n gÝt_ch¬_desc = FALSE ; 62  gboÞ—n gÝt_ch¬_wr™e = FALSE ; 63  gboÞ—n gÝt_ch¬_wr™e_»q = FALSE ; 64  gboÞ—n gÝt_š‹¿ùive = FALSE ; 65  GMašLoÝ * gev’t_loÝ ; 66  gboÞ—n ggÙ_”rÜ = FALSE ; 67  GSourûFunc gÝ”©iÚ ; 69  sch¬aù”i¡ic_d©a { 70 GA‰rib * m©Œib ; 71 ušt16_t m¡¬t ; 72 ušt16_t m’d ; 75  $ev’ts_hªdËr (cÚ¡ ušt8_t * pdu , ušt16_t Ën , gpoš‹r u£r_d©a ) 77 GA‰rib * ©Œib = u£r_d©a ; 78 ušt8_t * Ýdu ; 79 ušt16_t hªdË , i , Þ’ = 0; 80 size_t ¶’ ; 82 hªdË = `g‘_Ë16 (& pdu [1]); 84  pdu [0]) { 85  ATT_OP_HANDLE_NOTIFY : 86 `g_´št ("NÙifiÿtiÚ hªdË = 0x%04x v®ue: ", hªdË ); 88  ATT_OP_HANDLE_IND : 89 `g_´št ("IndiÿtiÚ hªdË = 0x%04x v®ue: ", hªdË ); 92 `g_´št ("Invalid opcode\n"); 96  i = 3; i < Ën ; i++) 97 `g_´št ("%02x ", pdu [ i ]); 99 `g_´št ("\n"); 101 ià( pdu [0] =ð ATT_OP_HANDLE_NOTIFY ) 104 Ýdu = `g_©Œib_g‘_bufãr ( ©Œib , & ¶’ ); 105 Þ’ = `’c_cÚfœm©iÚ ( Ýdu , ¶’ ); 107 ià( Þ’ > 0) 108 `g_©Œib_£nd ( ©Œib , 0, Ýdu , Þ’ , NULL , NULL, NULL); 109 } } 111  gboÞ—n $li¡’_¡¬t ( gpoš‹r u£r_d©a ) 113 GA‰rib * ©Œib = u£r_d©a ; 115 `g_©Œib_»gi¡” ( ©Œib , ATT_OP_HANDLE_NOTIFY , GATTRIB_ALL_HANDLES , 116 ev’ts_hªdËr , ©Œib , NULL ); 117 `g_©Œib_»gi¡” ( ©Œib , ATT_OP_HANDLE_IND , GATTRIB_ALL_HANDLES , 118 ev’ts_hªdËr , ©Œib , NULL ); 120  FALSE ; 121 } } 123  $cÚÃù_cb ( GIOChªÃl * io , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 125 GA‰rib * ©Œib ; 126 ušt16_t mtu ; 127 ušt16_t cid ; 128 GE¼Ü * g”r = NULL ; 130 ià( ”r ) { 131 `g_´š‹¼ ("%s\n", ”r -> mes§ge ); 132 gÙ_”rÜ = TRUE ; 133 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 136 `bt_io_g‘ ( io , & g”r , BT_IO_OPT_IMTU , & mtu , 137 BT_IO_OPT_CID , & cid , BT_IO_OPT_INVALID ); 139 ià( g”r ) { 140 `g_´š‹¼ ("Can't detect MTU, using default: %s", 141 g”r -> mes§ge ); 142 `g_”rÜ_ä“ ( g”r ); 143 mtu = ATT_DEFAULT_LE_MTU ; 146 ià( cid =ð ATT_CID ) 147 mtu = ATT_DEFAULT_LE_MTU ; 149 ©Œib = `g_©Œib_Ãw ( io , mtu ); 151 ià( Ýt_li¡’ ) 152 `g_idË_add ( li¡’_¡¬t , ©Œib ); 154 `Ý”©iÚ ( ©Œib ); 155 } } 157  $´im¬y_®l_cb ( ušt8_t ¡©us , GSLi¡ * £rviûs , * u£r_d©a ) 159 GSLi¡ * l ; 161 ià( ¡©us ) { 162 `g_´š‹¼ ("Discover‡ll…rimary services failed: %s\n", 163 `©t_ecode2¡r ( ¡©us )); 164  dÚe ; 167  l = £rviûs ;†;† =†-> Ãxt ) { 168  g©t_´im¬y * ´im = l -> d©a ; 169 `g_´št ("attr handle = 0x%04x,ƒnd grp handle = 0x%04x " 170 "uuid: %s\n", ´im -> ¿nge . ¡¬t ,…rim->¿nge. ’d ,…rim-> uuid ); 173 dÚe : 174 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 175 } } 177  $´im¬y_by_uuid_cb ( ušt8_t ¡©us , GSLi¡ * ¿nges , * u£r_d©a ) 179 GSLi¡ * l ; 181 ià( ¡©us != 0) { 182 `g_´š‹¼ ("Discover…rimary services by UUID failed: %s\n", 183 `©t_ecode2¡r ( ¡©us )); 184  dÚe ; 187  l = ¿nges ;†;† =†-> Ãxt ) { 188  ©t_¿nge * ¿nge = l -> d©a ; 189 `g_´št ("Starting handle: %04x Ending handle: %04x\n", 190 ¿nge -> ¡¬t ,„ªge-> ’d ); 193 dÚe : 194 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 195 } } 197  gboÞ—n $´im¬y ( gpoš‹r u£r_d©a ) 199 GA‰rib * ©Œib = u£r_d©a ; 201 ià( Ýt_uuid ) 202 `g©t_discov”_´im¬y ( ©Œib , Ýt_uuid , ´im¬y_by_uuid_cb , 203 NULL ); 205 `g©t_discov”_´im¬y ( ©Œib , NULL , ´im¬y_®l_cb , NULL); 207  FALSE ; 208 } } 210  $ch¬_discov”ed_cb ( ušt8_t ¡©us , GSLi¡ * ch¬aù”i¡ics , 211 * u£r_d©a ) 213 GSLi¡ * l ; 215 ià( ¡©us ) { 216 `g_´š‹¼ ("Discover‡ll characteristics failed: %s\n", 217 `©t_ecode2¡r ( ¡©us )); 218  dÚe ; 221  l = ch¬aù”i¡ics ;†;† =†-> Ãxt ) { 222  g©t_ch¬ * ch¬s = l -> d©a ; 224 `g_´št ("handle = 0x%04x, char…roperties = 0x%02x, char value " 225 "hªdË = 0x%04x, uuid = %s\n", ch¬s -> hªdË , 226 ch¬s -> ´Ý”t›s , ch¬s-> v®ue_hªdË , ch¬s-> uuid ); 229 dÚe : 230 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 231 } } 233  gboÞ—n $ch¬aù”i¡ics ( gpoš‹r u£r_d©a ) 235 GA‰rib * ©Œib = u£r_d©a ; 237 `g©t_discov”_ch¬ ( ©Œib , Ýt_¡¬t , Ýt_’d , Ýt_uuid , 238 ch¬_discov”ed_cb , NULL ); 240  FALSE ; 241 } } 243  $ch¬_»ad_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 244 gpoš‹r u£r_d©a ) 246 ušt8_t v®ue [ ¶’ ]; 247 ssize_t vËn ; 248  i ; 250 ià( ¡©us != 0) { 251 `g_´š‹¼ ("Characteristic value/descriptor„ead failed: %s\n", 252 `©t_ecode2¡r ( ¡©us )); 253  dÚe ; 256 vËn = `dec_»ad_»¥ ( pdu , ¶’ , v®ue , (value)); 257 ià( vËn < 0) { 258 `g_´š‹¼ ("Protocolƒrror\n"); 259  dÚe ; 261 `g_´št ("Characteristic value/descriptor: "); 262  i = 0; i < vËn ; i++) 263 `g_´št ("%02x ", v®ue [ i ]); 264 `g_´št ("\n"); 266 dÚe : 267 ià(! Ýt_li¡’ ) 268 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 269 } } 271  $ch¬_»ad_by_uuid_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 272 gušt16 ¶’ , gpoš‹r u£r_d©a ) 274  ©t_d©a_li¡ * li¡ ; 275  i ; 277 ià( ¡©us != 0) { 278 `g_´š‹¼ ("Read characteristics by UUID failed: %s\n", 279 `©t_ecode2¡r ( ¡©us )); 280  dÚe ; 283 li¡ = `dec_»ad_by_ty³_»¥ ( pdu , ¶’ ); 284 ià( li¡ =ð NULL ) 285  dÚe ; 287  i = 0; i < li¡ -> num ; i++) { 288 ušt8_t * v®ue = li¡ -> d©a [ i ]; 289  j ; 291 `g_´št ("hªdË: 0x%04x \ˆv®ue: ", `g‘_Ë16 ( v®ue )); 292 v®ue += 2; 293  j = 0; j < li¡ -> Ën - 2; j++, v®ue ++) 294 `g_´št ("%02x ", * v®ue ); 295 `g_´št ("\n"); 298 `©t_d©a_li¡_ä“ ( li¡ ); 300 dÚe : 301 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 302 } } 304  gboÞ—n $ch¬aù”i¡ics_»ad ( gpoš‹r u£r_d©a ) 306 GA‰rib * ©Œib = u£r_d©a ; 308 ià( Ýt_uuid !ð NULL ) { 310 `g©t_»ad_ch¬_by_uuid ( ©Œib , Ýt_¡¬t , Ýt_’d , Ýt_uuid , 311 ch¬_»ad_by_uuid_cb , NULL ); 313  FALSE ; 316 ià( Ýt_hªdË <= 0) { 317 `g_´š‹¼ ("A valid handle is„equired\n"); 318 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 319  FALSE ; 322 `g©t_»ad_ch¬ ( ©Œib , Ýt_hªdË , ch¬_»ad_cb ,‡ttrib); 324  FALSE ; 325 } } 327  $mašloÝ_qu™ ( gpoš‹r u£r_d©a ) 329 ušt8_t * v®ue = u£r_d©a ; 331 `g_ä“ ( v®ue ); 332 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 333 } } 335  gboÞ—n $ch¬aù”i¡ics_wr™e ( gpoš‹r u£r_d©a ) 337 GA‰rib * ©Œib = u£r_d©a ; 338 ušt8_t * v®ue ; 339 size_t Ën ; 341 ià( Ýt_hªdË <= 0) { 342 `g_´š‹¼ ("A valid handle is„equired\n"); 343  ”rÜ ; 346 ià( Ýt_v®ue =ð NULL || opt_value[0] == '\0') { 347 `g_´š‹¼ ("A value is„equired\n"); 348  ”rÜ ; 351 Ën = `g©t_©Œ_d©a_äom_¡ršg ( Ýt_v®ue , & v®ue ); 352 ià( Ën == 0) { 353 `g_´š‹¼ ("Invalid value\n"); 354  ”rÜ ; 357 `g©t_wr™e_cmd ( ©Œib , Ýt_hªdË , v®ue , Ën , mašloÝ_qu™ , value); 359 `g_ä“ ( v®ue ); 360  FALSE ; 362 ”rÜ : 363 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 364  FALSE ; 365 } } 367  $ch¬_wr™e_»q_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 368 gpoš‹r u£r_d©a ) 370 ià( ¡©us != 0) { 371 `g_´š‹¼ ("Characteristic Write Request failed: " 372 "%s\n", `©t_ecode2¡r ( ¡©us )); 373  dÚe ; 376 ià(! `dec_wr™e_»¥ ( pdu , ¶’ è&& ! `dec_exec_wr™e_»¥ (pdu,…len)) { 377 `g_´š‹¼ ("Protocolƒrror\n"); 378  dÚe ; 381 `g_´št ("Characteristic value was written successfully\n"); 383 dÚe : 384 ià(! Ýt_li¡’ ) 385 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 386 } } 388  gboÞ—n $ch¬aù”i¡ics_wr™e_»q ( gpoš‹r u£r_d©a ) 390 GA‰rib * ©Œib = u£r_d©a ; 391 ušt8_t * v®ue ; 392 size_t Ën ; 394 ià( Ýt_hªdË <= 0) { 395 `g_´š‹¼ ("A valid handle is„equired\n"); 396  ”rÜ ; 399 ià( Ýt_v®ue =ð NULL || opt_value[0] == '\0') { 400 `g_´š‹¼ ("A value is„equired\n"); 401  ”rÜ ; 404 Ën = `g©t_©Œ_d©a_äom_¡ršg ( Ýt_v®ue , & v®ue ); 405 ià( Ën == 0) { 406 `g_´š‹¼ ("Invalid value\n"); 407  ”rÜ ; 410 `g©t_wr™e_ch¬ ( ©Œib , Ýt_hªdË , v®ue , Ën , ch¬_wr™e_»q_cb , 411 NULL ); 413 `g_ä“ ( v®ue ); 414  FALSE ; 416 ”rÜ : 417 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 418  FALSE ; 419 } } 421  $ch¬_desc_cb ( ušt8_t ¡©us , GSLi¡ * desütÜs , * u£r_d©a ) 423 GSLi¡ * l ; 425 ià( ¡©us ) { 426 `g_´š‹¼ ("Discover descriptors failed: %s\n", 427 `©t_ecode2¡r ( ¡©us )); 431  l = desütÜs ;†;† =†-> Ãxt ) { 432  g©t_desc * desc = l -> d©a ; 434 `g_´št ("hªdË = 0x%04x, uuid = %s\n", desc -> hªdË , 435 desc -> uuid ); 438 ià(! Ýt_li¡’ ) 439 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 440 } } 442  gboÞ—n $ch¬aù”i¡ics_desc ( gpoš‹r u£r_d©a ) 444 GA‰rib * ©Œib = u£r_d©a ; 446 `g©t_discov”_desc ( ©Œib , Ýt_¡¬t , Ýt_’d , NULL , ch¬_desc_cb , 447 NULL ); 449  FALSE ; 450 } } 452  gboÞ—n $·r£_uuid (cÚ¡ * key , cÚ¡ * v®ue , 453 gpoš‹r u£r_d©a , GE¼Ü ** ”rÜ ) 455 ià(! v®ue ) 456  FALSE ; 458 Ýt_uuid = `g_Œy_m®loc (( bt_uuid_t )); 459 ià( Ýt_uuid =ð NULL ) 460  FALSE ; 462 ià( `bt_¡ršg_to_uuid ( Ýt_uuid , v®ue ) < 0) 463  FALSE ; 465  TRUE ; 466 } } 468  GO±iÚEÁry g´im¬y_ch¬_ÝtiÚs [] = { 469 { "¡¬t", 's' , 0, G_OPTION_ARG_INT , & Ýt_¡¬t , 471 { "’d", 'e' , 0, G_OPTION_ARG_INT , & Ýt_’d , 473 { "uuid", 'u', G_OPTION_FLAG_OPTIONAL_ARG , G_OPTION_ARG_CALLBACK , 474 ·r£_uuid , "UUID16 or UUID128(optional)", "0x1801"}, 475 { NULL }, 478  GO±iÚEÁry gch¬_rw_ÝtiÚs [] = { 479 { "hªdË", 'a' , 0, G_OPTION_ARG_INT , & Ýt_hªdË , 481 { "v®ue", 'n' , 0, G_OPTION_ARG_STRING , & Ýt_v®ue , 484 { NULL }, 487  GO±iÚEÁry gg©t_ÝtiÚs [] = { 488 { "´im¬y", 0, 0, G_OPTION_ARG_NONE , & Ýt_´im¬y , 489 "Prim¬y S”viû Discov”y", NULL }, 490 { "ch¬aù”i¡ics", 0, 0, G_OPTION_ARG_NONE , & Ýt_ch¬aù”i¡ics , 491 "Ch¬aù”i¡ic Discov”y", NULL }, 492 { "ch¬-»ad", 0, 0, G_OPTION_ARG_NONE , & Ýt_ch¬_»ad , 493 "Ch¬aù”i¡ic V®ue/DesütÜ R—d", NULL }, 494 { "ch¬-wr™e", 0, 0, G_OPTION_ARG_NONE , & Ýt_ch¬_wr™e , 496 NULL }, 497 { "ch¬-wr™e-»q", 0, 0, G_OPTION_ARG_NONE , & Ýt_ch¬_wr™e_»q , 498 "Ch¬aù”i¡ic V®uWr™(Wr™Reque¡)", NULL }, 499 { "ch¬-desc", 0, 0, G_OPTION_ARG_NONE , & Ýt_ch¬_desc , 500 "Ch¬aù”i¡ic DesütÜ Discov”y", NULL }, 501 { "li¡’", 0, 0, G_OPTION_ARG_NONE , & Ýt_li¡’ , 502 "Li¡’ fÜ‚ÙifiÿtiÚ ªd indiÿtiÚs", NULL }, 503 { "š‹¿ùive", 'I', G_OPTION_FLAG_IN_MAIN , G_OPTION_ARG_NONE , 504 & Ýt_š‹¿ùive , "U£ iÁ”aùivmode", NULL }, 505 { NULL }, 508  GO±iÚEÁry gÝtiÚs [] = { 509 { "ad­‹r", 'i', 0, G_OPTION_ARG_STRING , & Ýt_¤c , 511 { "deviû", 'b', 0, G_OPTION_ARG_STRING , & Ýt_d¡ , 513 { "addr-ty³", 't', 0, G_OPTION_ARG_STRING , & Ýt_d¡_ty³ , 515 { "mtu", 'm', 0, G_OPTION_ARG_INT , & Ýt_mtu , 517 { "psm", 'p', 0, G_OPTION_ARG_INT , & Ýt_psm , 519 { "£c-Ëv–", 'l', 0, G_OPTION_ARG_STRING , & Ýt_£c_Ëv– , 521 { NULL }, 524  $maš ( ¬gc , * ¬gv []) 526 GO±iÚCÚ‹xt * cÚ‹xt ; 527 GO±iÚGroup * g©t_group , * ·¿ms_group , * ch¬_rw_group ; 528 GE¼Ü * g”r = NULL ; 529 GIOChªÃl * chª ; 531 Ýt_d¡_ty³ = `g_¡rdup ("public"); 532 Ýt_£c_Ëv– = `g_¡rdup ("low"); 534 cÚ‹xt = `g_ÝtiÚ_cÚ‹xt_Ãw ( NULL ); 535 `g_ÝtiÚ_cÚ‹xt_add_maš_’Œ›s ( cÚ‹xt , ÝtiÚs , NULL ); 538 g©t_group = `g_ÝtiÚ_group_Ãw ("gatt", "GATT commands", 539 "Show‡Î GATT commªds", NULL , NULL); 540 `g_ÝtiÚ_cÚ‹xt_add_group ( cÚ‹xt , g©t_group ); 541 `g_ÝtiÚ_group_add_’Œ›s ( g©t_group , g©t_ÝtiÚs ); 544 ·¿ms_group = `g_ÝtiÚ_group_Ãw ("params", 547 NULL , NULL); 548 `g_ÝtiÚ_cÚ‹xt_add_group ( cÚ‹xt , ·¿ms_group ); 549 `g_ÝtiÚ_group_add_’Œ›s ( ·¿ms_group , ´im¬y_ch¬_ÝtiÚs ); 552 ch¬_rw_group = `g_ÝtiÚ_group_Ãw ("char-read-write", 556 NULL , NULL); 557 `g_ÝtiÚ_cÚ‹xt_add_group ( cÚ‹xt , ch¬_rw_group ); 558 `g_ÝtiÚ_group_add_’Œ›s ( ch¬_rw_group , ch¬_rw_ÝtiÚs ); 560 ià(! `g_ÝtiÚ_cÚ‹xt_·r£ ( cÚ‹xt , & ¬gc , & ¬gv , & g”r )) { 561 `g_´š‹¼ ("%s\n", g”r -> mes§ge ); 562 `g_þ—r_”rÜ (& g”r ); 565 ià( Ýt_š‹¿ùive ) { 566 `š‹¿ùive ( Ýt_¤c , Ýt_d¡ , Ýt_d¡_ty³ , Ýt_psm ); 567  dÚe ; 570 ià( Ýt_´im¬y ) 571 Ý”©iÚ = ´im¬y ; 572 ià( Ýt_ch¬aù”i¡ics ) 573 Ý”©iÚ = ch¬aù”i¡ics ; 574 ià( Ýt_ch¬_»ad ) 575 Ý”©iÚ = ch¬aù”i¡ics_»ad ; 576 ià( Ýt_ch¬_wr™e ) 577 Ý”©iÚ = ch¬aù”i¡ics_wr™e ; 578 ià( Ýt_ch¬_wr™e_»q ) 579 Ý”©iÚ = ch¬aù”i¡ics_wr™e_»q ; 580 ià( Ýt_ch¬_desc ) 581 Ý”©iÚ = ch¬aù”i¡ics_desc ; 583 * h–p = `g_ÝtiÚ_cÚ‹xt_g‘_h–p ( cÚ‹xt , TRUE , NULL ); 584 `g_´št ("%s\n", h–p ); 585 `g_ä“ ( h–p ); 586 gÙ_”rÜ = TRUE ; 587  dÚe ; 590 ià( Ýt_d¡ =ð NULL ) { 591 `g_´št ("Remote Bluetooth‡ddress„equired\n"); 592 gÙ_”rÜ = TRUE ; 593  dÚe ; 596 chª = `g©t_cÚÃù ( Ýt_¤c , Ýt_d¡ , Ýt_d¡_ty³ , Ýt_£c_Ëv– , 597 Ýt_psm , Ýt_mtu , cÚÃù_cb , & g”r ); 598 ià( chª =ð NULL ) { 599 `g_´š‹¼ ("%s\n", g”r -> mes§ge ); 600 `g_þ—r_”rÜ (& g”r ); 601 gÙ_”rÜ = TRUE ; 602  dÚe ; 605 ev’t_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 607 `g_maš_loÝ_run ( ev’t_loÝ ); 609 `g_maš_loÝ_uÄef ( ev’t_loÝ ); 611 dÚe : 612 `g_ÝtiÚ_cÚ‹xt_ä“ ( cÚ‹xt ); 613 `g_ä“ ( Ýt_¤c ); 614 `g_ä“ ( Ýt_d¡ ); 615 `g_ä“ ( Ýt_uuid ); 616 `g_ä“ ( Ýt_£c_Ëv– ); 618 ià( gÙ_”rÜ ) 619 `ex™ ( EXIT_FAILURE ); 621 `ex™ ( EXIT_SUCCESS ); 622 } } @attrib/gatttool.h 24  š‹¿ùive (cÚ¡ * ¤c , cÚ¡ * d¡ , cÚ¡ * d¡_ty³ , 25  psm ); 26 GIOChªÃl * g©t_cÚÃù (cÚ¡ * ¤c , cÚ¡ * d¡ , 27 cÚ¡ * d¡_ty³ , cÚ¡ * £c_Ëv– , 28  psm ,  mtu , BtIOCÚÃù cÚÃù_cb , 29 GE¼Ü ** g”r ); 30 size_t g©t_©Œ_d©a_äom_¡ršg (cÚ¡ * ¡r , ušt8_t ** d©a ); @attrib/interactive.c 24 #ifdeà HAVE_CONFIG_H 25  ~"cÚfig.h " 28  ~<¡ršg.h > 29  ~<¡dlib.h > 30  ~<¡d¬g.h > 31  ~<”ºo.h > 32  ~<¡dio.h > 33  ~ 34  ~ 35  ~ 36  ~ 38  ~<»adlše/»adlše.h > 39  ~<»adlše/hi¡Üy.h > 41  ~"¤c/sh¬ed/utž.h " 42  ~"lib/uuid.h " 43  ~"btio/btio.h " 44  ~"©t.h " 45  ~"g©Œib.h " 46  ~"g©t.h " 47  ~"g©‰oÞ.h " 48  ~"þ›Á/di¥Ïy.h " 50  GIOChªÃl * giochªÃl = NULL ; 51  GA‰rib * g©Œib = NULL ; 52  GMašLoÝ * gev’t_loÝ ; 53  GSŒšg * g´om± ; 55 * gÝt_¤c = NULL ; 56 * gÝt_d¡ = NULL ; 57 * gÝt_d¡_ty³ = NULL ; 58 * gÝt_£c_Ëv– = NULL ; 59  gÝt_psm = 0; 60  gÝt_mtu = 0; 61  g¡¬t ; 62  g’d ; 64  cmd_h–p ( ¬gý , ** ¬gvp ); 66  e¡©e { 67 mSTATE_DISCONNECTED , 68 mSTATE_CONNECTING , 69 mSTATE_CONNECTED 70 } gcÚn_¡©e ; 72  #”rÜ ( fmt , ¬g ...) \ 73 `¾_´štf ( COLOR_RED "E¼Ü: " COLOR_OFF fmt , ## ¬g ) ) 75  #çžed ( fmt , ¬g ...) \ 76 `¾_´štf ( COLOR_RED "Commªd Fažed: " COLOR_OFF fmt , ## ¬g ) ) 78 * $g‘_´om± () 80 ià( cÚn_¡©e =ð STATE_CONNECTED ) 81 `g_¡ršg_assign ( ´om± , COLOR_BLUE ); 83 `g_¡ršg_assign ( ´om± , ""); 85 ià( Ýt_d¡ ) 86 `g_¡ršg_­³nd_´štf ( ´om± , "[%17s]", Ýt_d¡ ); 88 `g_¡ršg_­³nd_´štf ( ´om± , "[%17s]", ""); 90 ià( cÚn_¡©e =ð STATE_CONNECTED ) 91 `g_¡ršg_­³nd ( ´om± , COLOR_OFF ); 93 ià( Ýt_psm ) 94 `g_¡ršg_­³nd ( ´om± , "[BR]"); 96 `g_¡ršg_­³nd ( ´om± , "[LE]"); 98 `g_¡ršg_­³nd ( ´om± , "> "); 100  ´om± -> ¡r ; 101 } } 104  $£t_¡©e ( ¡©e ¡ ) 106 cÚn_¡©e = ¡ ; 107 `¾_£t_´om± ( `g‘_´om± ()); 108 } } 110  $ev’ts_hªdËr (cÚ¡ ušt8_t * pdu , ušt16_t Ën , gpoš‹r u£r_d©a ) 112 ušt8_t * Ýdu ; 113 ušt16_t hªdË , i , Þ’ ; 114 size_t ¶’ ; 115 GSŒšg * s ; 117 hªdË = `g‘_Ë16 (& pdu [1]); 119  pdu [0]) { 120  ATT_OP_HANDLE_NOTIFY : 121 s = `g_¡ršg_Ãw ( NULL ); 122 `g_¡ršg_´štf ( s , "Notification handle = 0x%04x value: ", 123 hªdË ); 125  ATT_OP_HANDLE_IND : 126 s = `g_¡ršg_Ãw ( NULL ); 127 `g_¡ršg_´štf ( s , "Indication handle = 0x%04x value: ", 128 hªdË ); 131 `”rÜ ("Invalid opcode\n"); 135  i = 3; i < Ën ; i++) 136 `g_¡ršg_­³nd_´štf ( s , "%02x ", pdu [ i ]); 138 `¾_´štf ("%s\n", s -> ¡r ); 139 `g_¡ršg_ä“ ( s , TRUE ); 141 ià( pdu [0] =ð ATT_OP_HANDLE_NOTIFY ) 144 Ýdu = `g_©Œib_g‘_bufãr ( ©Œib , & ¶’ ); 145 Þ’ = `’c_cÚfœm©iÚ ( Ýdu , ¶’ ); 147 ià( Þ’ > 0) 148 `g_©Œib_£nd ( ©Œib , 0, Ýdu , Þ’ , NULL , NULL, NULL); 149 } } 151  $cÚÃù_cb ( GIOChªÃl * io , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 153 ušt16_t mtu ; 154 ušt16_t cid ; 156 ià( ”r ) { 157 `£t_¡©e ( STATE_DISCONNECTED ); 158 `”rÜ ("%s\n", ”r -> mes§ge ); 162 `bt_io_g‘ ( io , & ”r , BT_IO_OPT_IMTU , & mtu , 163 BT_IO_OPT_CID , & cid , BT_IO_OPT_INVALID ); 165 ià( ”r ) { 166 `g_´š‹¼ ("Cª'ˆd‘eù MTU, usšg deçuÉ: %s", ”r -> mes§ge ); 167 `g_”rÜ_ä“ ( ”r ); 168 mtu = ATT_DEFAULT_LE_MTU ; 171 ià( cid =ð ATT_CID ) 172 mtu = ATT_DEFAULT_LE_MTU ; 174 ©Œib = `g_©Œib_Ãw ( iochªÃl , mtu ); 175 `g_©Œib_»gi¡” ( ©Œib , ATT_OP_HANDLE_NOTIFY , GATTRIB_ALL_HANDLES , 176 ev’ts_hªdËr , ©Œib , NULL ); 177 `g_©Œib_»gi¡” ( ©Œib , ATT_OP_HANDLE_IND , GATTRIB_ALL_HANDLES , 178 ev’ts_hªdËr , ©Œib , NULL ); 179 `£t_¡©e ( STATE_CONNECTED ); 180 `¾_´štf ("Connection successful\n"); 181 } } 183  $discÚÃù_io () 185 ià( cÚn_¡©e =ð STATE_DISCONNECTED ) 188 `g_©Œib_uÄef ( ©Œib ); 189 ©Œib = NULL ; 190 Ýt_mtu = 0; 192 `g_io_chªÃl_shutdown ( iochªÃl , FALSE , NULL ); 193 `g_io_chªÃl_uÄef ( iochªÃl ); 194 iochªÃl = NULL ; 196 `£t_¡©e ( STATE_DISCONNECTED ); 197 } } 199  $´im¬y_®l_cb ( ušt8_t ¡©us , GSLi¡ * £rviûs , * u£r_d©a ) 201 GSLi¡ * l ; 203 ià( ¡©us ) { 204 `”rÜ ("Discover‡ll…rimary services failed: %s\n", 205 `©t_ecode2¡r ( ¡©us )); 209 ià( £rviûs =ð NULL ) { 210 `”rÜ ("No…rimary service found\n"); 214  l = £rviûs ;†;† =†-> Ãxt ) { 215  g©t_´im¬y * ´im = l -> d©a ; 216 `¾_´štf ("attr handle: 0x%04x,ƒnd grp handle: 0x%04x uuid: %s\n", 217 ´im -> ¿nge . ¡¬t ,…rim->¿nge. ’d ,…rim-> uuid ); 219 } } 221  $´im¬y_by_uuid_cb ( ušt8_t ¡©us , GSLi¡ * ¿nges , * u£r_d©a ) 223 GSLi¡ * l ; 225 ià( ¡©us ) { 226 `”rÜ ("Discover…rimary services by UUID failed: %s\n", 227 `©t_ecode2¡r ( ¡©us )); 231 ià( ¿nges =ð NULL ) { 232 `”rÜ ("No service UUID found\n"); 236  l = ¿nges ;†;† =†-> Ãxt ) { 237  ©t_¿nge * ¿nge = l -> d©a ; 238 `¾_´štf ("Starting handle: 0x%04x Ending handle: 0x%04x\n", 239 ¿nge -> ¡¬t ,„ªge-> ’d ); 241 } } 243  $šþuded_cb ( ušt8_t ¡©us , GSLi¡ * šþudes , * u£r_d©a ) 245 GSLi¡ * l ; 247 ià( ¡©us ) { 248 `”rÜ ("Find included services failed: %s\n", 249 `©t_ecode2¡r ( ¡©us )); 253 ià( šþudes =ð NULL ) { 254 `¾_´štf ("No included services found forhis„ange\n"); 258  l = šþudes ;†;† =†-> Ãxt ) { 259  g©t_šþuded * šþ = l -> d©a ; 260 `¾_´štf ("handle: 0x%04x, start handle: 0x%04x, " 262 šþ -> hªdË , inþ-> ¿nge . ¡¬t , 263 šþ -> ¿nge . ’d , inþ-> uuid ); 265 } } 267  $ch¬_cb ( ušt8_t ¡©us , GSLi¡ * ch¬aù”i¡ics , * u£r_d©a ) 269 GSLi¡ * l ; 271 ià( ¡©us ) { 272 `”rÜ ("Discover‡ll characteristics failed: %s\n", 273 `©t_ecode2¡r ( ¡©us )); 277  l = ch¬aù”i¡ics ;†;† =†-> Ãxt ) { 278  g©t_ch¬ * ch¬s = l -> d©a ; 280 `¾_´štf ("handle: 0x%04x, char…roperties: 0x%02x, char value " 281 "hªdË: 0x%04x, uuid: %s\n", ch¬s -> hªdË , 282 ch¬s -> ´Ý”t›s , ch¬s-> v®ue_hªdË , 283 ch¬s -> uuid ); 285 } } 287  $ch¬_desc_cb ( ušt8_t ¡©us , GSLi¡ * desütÜs , * u£r_d©a ) 289 GSLi¡ * l ; 291 ià( ¡©us ) { 292 `”rÜ ("Discover descriptors failed: %s\n", 293 `©t_ecode2¡r ( ¡©us )); 297  l = desütÜs ;†;† =†-> Ãxt ) { 298  g©t_desc * desc = l -> d©a ; 300 `¾_´štf ("hªdË: 0x%04x, uuid: %s\n", desc -> hªdË , 301 desc -> uuid ); 303 } } 305  $ch¬_»ad_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 306 gpoš‹r u£r_d©a ) 308 ušt8_t v®ue [ ¶’ ]; 309 ssize_t vËn ; 310  i ; 311 GSŒšg * s ; 313 ià( ¡©us != 0) { 314 `”rÜ ("Characteristic value/descriptor„ead failed: %s\n", 315 `©t_ecode2¡r ( ¡©us )); 319 vËn = `dec_»ad_»¥ ( pdu , ¶’ , v®ue , (value)); 320 ià( vËn < 0) { 321 `”rÜ ("Protocolƒrror\n"); 325 s = `g_¡ršg_Ãw ("Characteristic value/descriptor: "); 326  i = 0; i < vËn ; i++) 327 `g_¡ršg_­³nd_´štf ( s , "%02x ", v®ue [ i ]); 329 `¾_´štf ("%s\n", s -> ¡r ); 330 `g_¡ršg_ä“ ( s , TRUE ); 331 } } 333  $ch¬_»ad_by_uuid_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 334 gušt16 ¶’ , gpoš‹r u£r_d©a ) 336  ©t_d©a_li¡ * li¡ ; 337  i ; 338 GSŒšg * s ; 340 ià( ¡©us != 0) { 341 `”rÜ ("Read characteristics by UUID failed: %s\n", 342 `©t_ecode2¡r ( ¡©us )); 346 li¡ = `dec_»ad_by_ty³_»¥ ( pdu , ¶’ ); 347 ià( li¡ =ð NULL ) 350 s = `g_¡ršg_Ãw ( NULL ); 351  i = 0; i < li¡ -> num ; i++) { 352 ušt8_t * v®ue = li¡ -> d©a [ i ]; 353  j ; 355 `g_¡ršg_´štf ( s , "handle: 0x%04x \t value: ", 356 `g‘_Ë16 ( v®ue )); 357 v®ue += 2; 358  j = 0; j < li¡ -> Ën - 2; j++, v®ue ++) 359 `g_¡ršg_­³nd_´štf ( s , "%02x ", * v®ue ); 361 `¾_´štf ("%s\n", s -> ¡r ); 364 `©t_d©a_li¡_ä“ ( li¡ ); 365 `g_¡ršg_ä“ ( s , TRUE ); 366 } } 368  $cmd_ex™ ( ¬gý , ** ¬gvp ) 370 `¾_ÿÎback_hªdËr_»move (); 371 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 372 } } 374  gboÞ—n $chªÃl_w©ch” ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 375 gpoš‹r u£r_d©a ) 377 `discÚÃù_io (); 379  FALSE ; 380 } } 382  $cmd_cÚÃù ( ¬gý , ** ¬gvp ) 384 GE¼Ü * g”r = NULL ; 386 ià( cÚn_¡©e !ð STATE_DISCONNECTED ) 389 ià( ¬gý > 1) { 390 `g_ä“ ( Ýt_d¡ ); 391 Ýt_d¡ = `g_¡rdup ( ¬gvp [1]); 393 `g_ä“ ( Ýt_d¡_ty³ ); 394 ià( ¬gý > 2) 395 Ýt_d¡_ty³ = `g_¡rdup ( ¬gvp [2]); 397 Ýt_d¡_ty³ = `g_¡rdup ("public"); 400 ià( Ýt_d¡ =ð NULL ) { 401 `”rÜ ("Remote Bluetooth‡ddress„equired\n"); 405 `¾_´štf ("A‰em±šgØcÚÃùØ%s\n", Ýt_d¡ ); 406 `£t_¡©e ( STATE_CONNECTING ); 407 iochªÃl = `g©t_cÚÃù ( Ýt_¤c , Ýt_d¡ , Ýt_d¡_ty³ , Ýt_£c_Ëv– , 408 Ýt_psm , Ýt_mtu , cÚÃù_cb , & g”r ); 409 ià( iochªÃl =ð NULL ) { 410 `£t_¡©e ( STATE_DISCONNECTED ); 411 `”rÜ ("%s\n", g”r -> mes§ge ); 412 `g_”rÜ_ä“ ( g”r ); 414 `g_io_add_w©ch ( iochªÃl , G_IO_HUP , chªÃl_w©ch” , NULL ); 415 } } 417  $cmd_discÚÃù ( ¬gý , ** ¬gvp ) 419 `discÚÃù_io (); 420 } } 422  $cmd_´im¬y ( ¬gý , ** ¬gvp ) 424 bt_uuid_t uuid ; 426 ià( cÚn_¡©e !ð STATE_CONNECTED ) { 427 `çžed ("Disconnected\n"); 431 ià( ¬gý == 1) { 432 `g©t_discov”_´im¬y ( ©Œib , NULL , ´im¬y_®l_cb , NULL); 436 ià( `bt_¡ršg_to_uuid (& uuid , ¬gvp [1]) < 0) { 437 `”rÜ ("Invalid UUID\n"); 441 `g©t_discov”_´im¬y ( ©Œib , & uuid , ´im¬y_by_uuid_cb , NULL ); 442 } } 444  $¡¹ohªdË (cÚ¡ * ¤c ) 446 * e ; 447  d¡ ; 449 ”ºo = 0; 450 d¡ = `¡¹Þl ( ¤c , & e , 16); 451 ià( ”ºo !ð0 || * e != '\0') 452  - EINVAL ; 454  d¡ ; 455 } } 457  $cmd_šþuded ( ¬gý , ** ¬gvp ) 459  ¡¬t = 0x0001; 460  ’d = 0xffff; 462 ià( cÚn_¡©e !ð STATE_CONNECTED ) { 463 `çžed ("Disconnected\n"); 467 ià( ¬gý > 1) { 468 ¡¬t = `¡¹ohªdË ( ¬gvp [1]); 469 ià( ¡¬t < 0) { 470 `”rÜ ("Inv®id s¹ hªdË: %s\n", ¬gvp [1]); 473 ’d = ¡¬t ; 476 ià( ¬gý > 2) { 477 ’d = `¡¹ohªdË ( ¬gvp [2]); 478 ià( ’d < 0) { 479 `”rÜ ("Inv®idƒnd hªdË: %s\n", ¬gvp [2]); 484 `g©t_fšd_šþuded ( ©Œib , ¡¬t , ’d , šþuded_cb , NULL ); 485 } } 487  $cmd_ch¬ ( ¬gý , ** ¬gvp ) 489  ¡¬t = 0x0001; 490  ’d = 0xffff; 492 ià( cÚn_¡©e !ð STATE_CONNECTED ) { 493 `çžed ("Disconnected\n"); 497 ià( ¬gý > 1) { 498 ¡¬t = `¡¹ohªdË ( ¬gvp [1]); 499 ià( ¡¬t < 0) { 500 `”rÜ ("Inv®id s¹ hªdË: %s\n", ¬gvp [1]); 505 ià( ¬gý > 2) { 506 ’d = `¡¹ohªdË ( ¬gvp [2]); 507 ià( ’d < 0) { 508 `”rÜ ("Inv®idƒnd hªdË: %s\n", ¬gvp [2]); 513 ià( ¬gý > 3) { 514 bt_uuid_t uuid ; 516 ià( `bt_¡ršg_to_uuid (& uuid , ¬gvp [3]) < 0) { 517 `”rÜ ("Invalid UUID\n"); 521 `g©t_discov”_ch¬ ( ©Œib , ¡¬t , ’d , & uuid , ch¬_cb , NULL ); 525 `g©t_discov”_ch¬ ( ©Œib , ¡¬t , ’d , NULL , ch¬_cb , NULL); 526 } } 528  $cmd_ch¬_desc ( ¬gý , ** ¬gvp ) 530 ià( cÚn_¡©e !ð STATE_CONNECTED ) { 531 `çžed ("Disconnected\n"); 535 ià( ¬gý > 1) { 536 ¡¬t = `¡¹ohªdË ( ¬gvp [1]); 537 ià( ¡¬t < 0) { 538 `”rÜ ("Inv®id s¹ hªdË: %s\n", ¬gvp [1]); 542 ¡¬t = 0x0001; 544 ià( ¬gý > 2) { 545 ’d = `¡¹ohªdË ( ¬gvp [2]); 546 ià( ’d < 0) { 547 `”rÜ ("Inv®idƒnd hªdË: %s\n", ¬gvp [2]); 551 ’d = 0xffff; 553 `g©t_discov”_desc ( ©Œib , ¡¬t , ’d , NULL , ch¬_desc_cb , NULL); 554 } } 556  $cmd_»ad_hnd ( ¬gý , ** ¬gvp ) 558  hªdË ; 559 #ifdeà __TIZEN_PATCH__ 560  off£t = 0; 562 ià( cÚn_¡©e !ð STATE_CONNECTED ) { 563 `çžed ("Disconnected\n"); 567 ià( ¬gý < 2) { 568 `”rÜ ("Missing‡rgument: handle\n"); 572 hªdË = `¡¹ohªdË ( ¬gvp [1]); 573 ià( hªdË < 0) { 574 `”rÜ ("Inv®id hªdË: %s\n", ¬gvp [1]); 577 #ifdeà __TIZEN_PATCH__ 578 ià( ¬gý > 2) { 579 off£t = `¡¹ohªdË ( ¬gvp [2]); 580 ià( off£t < 0) { 581 `”rÜ ("Inv®id Off£t: %s\n", ¬gvp [2]); 585 `g©t_»ad_ch¬_by_off£t ( ©Œib , hªdË , off£t , ch¬_»ad_cb ,‡ttrib); 587 `g©t_»ad_ch¬ ( ©Œib , hªdË , ch¬_»ad_cb ,‡ttrib); 589 } } 591  $cmd_»ad_uuid ( ¬gý , ** ¬gvp ) 593  ¡¬t = 0x0001; 594  ’d = 0xffff; 595 bt_uuid_t uuid ; 597 ià( cÚn_¡©e !ð STATE_CONNECTED ) { 598 `çžed ("Disconnected\n"); 602 ià( ¬gý < 2) { 603 `”rÜ ("Missing‡rgument: UUID\n"); 607 ià( `bt_¡ršg_to_uuid (& uuid , ¬gvp [1]) < 0) { 608 `”rÜ ("Invalid UUID\n"); 612 ià( ¬gý > 2) { 613 ¡¬t = `¡¹ohªdË ( ¬gvp [2]); 614 ià( ¡¬t < 0) { 615 `”rÜ ("Inv®id s¹ hªdË: %s\n", ¬gvp [1]); 620 ià( ¬gý > 3) { 621 ’d = `¡¹ohªdË ( ¬gvp [3]); 622 ià( ’d < 0) { 623 `”rÜ ("Inv®idƒnd hªdË: %s\n", ¬gvp [2]); 628 `g©t_»ad_ch¬_by_uuid ( ©Œib , ¡¬t , ’d , & uuid , ch¬_»ad_by_uuid_cb , 629 NULL ); 630 } } 632  $ch¬_wr™e_»q_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 633 gpoš‹r u£r_d©a ) 635 ià( ¡©us != 0) { 636 `”rÜ ("Characteristic Write Request failed: " 637 "%s\n", `©t_ecode2¡r ( ¡©us )); 641 ià(! `dec_wr™e_»¥ ( pdu , ¶’ è&& ! `dec_exec_wr™e_»¥ (pdu,…len)) { 642 `”rÜ ("Protocolƒrror\n"); 646 `¾_´štf ("Characteristic value was written successfully\n"); 647 } } 649  $cmd_ch¬_wr™e ( ¬gý , ** ¬gvp ) 651 ušt8_t * v®ue ; 652 size_t ¶’ ; 653  hªdË ; 655 ià( cÚn_¡©e !ð STATE_CONNECTED ) { 656 `çžed ("Disconnected\n"); 660 ià( ¬gý < 3) { 661 `¾_´štf ("U§ge: %  <Ãw v®ue>\n", ¬gvp [0]); 665 hªdË = `¡¹ohªdË ( ¬gvp [1]); 666 ià( hªdË <= 0) { 667 `”rÜ ("A valid handle is„equired\n"); 671 ¶’ = `g©t_©Œ_d©a_äom_¡ršg ( ¬gvp [2], & v®ue ); 672 ià( ¶’ == 0) { 673 `”rÜ ("Invalid value\n"); 677 ià( `g_¡rcmp0 ("ch¬-wr™e-»q", ¬gvp [0]) == 0) 678 `g©t_wr™e_ch¬ ( ©Œib , hªdË , v®ue , ¶’ , 679 ch¬_wr™e_»q_cb , NULL ); 681 `g©t_wr™e_cmd ( ©Œib , hªdË , v®ue , ¶’ , NULL , NULL); 683 `g_ä“ ( v®ue ); 684 } } 686  $cmd_£c_Ëv– ( ¬gý , ** ¬gvp ) 688 GE¼Ü * g”r = NULL ; 689 BtIOSecLev– £c_Ëv– ; 691 ià( ¬gý < 2) { 692 `¾_´štf ("£c-Ëv–: %s\n", Ýt_£c_Ëv– ); 696 ià( `¡rÿ£cmp ( ¬gvp [1], "medium") == 0) 697 £c_Ëv– = BT_IO_SEC_MEDIUM ; 698 ià( `¡rÿ£cmp ( ¬gvp [1], "high") == 0) 699 £c_Ëv– = BT_IO_SEC_HIGH ; 700 ià( `¡rÿ£cmp ( ¬gvp [1], "low") == 0) 701 £c_Ëv– = BT_IO_SEC_LOW ; 703 `¾_´štf ("Allowed values:†ow | medium | high\n"); 707 `g_ä“ ( Ýt_£c_Ëv– ); 708 Ýt_£c_Ëv– = `g_¡rdup ( ¬gvp [1]); 710 ià( cÚn_¡©e !ð STATE_CONNECTED ) 713 ià( Ýt_psm ) { 714 `¾_´štf ("Change willakeƒffect on„econnection\n"); 718 `bt_io_£t ( iochªÃl , & g”r , 719 BT_IO_OPT_SEC_LEVEL , £c_Ëv– , 720 BT_IO_OPT_INVALID ); 721 ià( g”r ) { 722 `”rÜ ("%s\n", g”r -> mes§ge ); 723 `g_”rÜ_ä“ ( g”r ); 725 } } 727  $exchªge_mtu_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 728 gpoš‹r u£r_d©a ) 730 ušt16_t mtu ; 732 ià( ¡©us != 0) { 733 `”rÜ ("Exchange MTU Request failed: %s\n", 734 `©t_ecode2¡r ( ¡©us )); 738 ià(! `dec_mtu_»¥ ( pdu , ¶’ , & mtu )) { 739 `”rÜ ("Protocolƒrror\n"); 743 mtu = `MIN (mtu, Ýt_mtu ); 745 ià( `g_©Œib_£t_mtu ( ©Œib , mtu )) 746 `¾_´štf ("MTU wa exchªged sucûssfuÎy: %d\n", mtu ); 748 `”rÜ ("Errorƒxchanging MTU\n"); 749 } } 751  $cmd_mtu ( ¬gý , ** ¬gvp ) 753 ià( cÚn_¡©e !ð STATE_CONNECTED ) { 754 `çžed ("Disconnected\n"); 758 ià( Ýt_psm ) { 759 `çžed ("Operation is only‡vailable for LEransport.\n"); 763 ià( ¬gý < 2) { 764 `¾_´štf ("Usage: mtu \n"); 768 ià( Ýt_mtu ) { 769 `çžed ("MTUƒxchange can only occur once…er connection.\n"); 773 ”ºo = 0; 774 Ýt_mtu = `¡¹Þl ( ¬gvp [1], NULL , 0); 775 ià( ”ºo !ð0 || Ýt_mtu < ATT_DEFAULT_LE_MTU ) { 776 `”rÜ ("Invalid value. Minimum MTU size is %d\n", 777 ATT_DEFAULT_LE_MTU ); 781 `g©t_exchªge_mtu ( ©Œib , Ýt_mtu , exchªge_mtu_cb , NULL ); 782 } } 785 cÚ¡ * mcmd ; 786 (* mfunc )( m¬gý , ** m¬gvp ); 787 cÚ¡ * m·¿ms ; 788 cÚ¡ * mdesc ; 789 } gcommªds [] = { 790 { "h–p", cmd_h–p , "", 792 { "ex™", cmd_ex™ , "", 794 { "qu™", cmd_ex™ , "", 796 { "cÚÃù", cmd_cÚÃù , "[address [addressype]]", 798 { "discÚÃù", cmd_discÚÃù , "", 800 { "´im¬y", cmd_´im¬y , "[UUID]", 802 { "šþuded", cmd_šþuded , "[start hnd [end hnd]]", 804 { "ch¬aù”i¡ics", cmd_ch¬ , "[start hnd [end hnd [UUID]]]", 806 { "ch¬-desc", cmd_ch¬_desc , "[start hnd] [end hnd]", 808 { "ch¬-»ad-hnd", cmd_»ad_hnd , "", 810 { "ch¬-»ad-uuid", cmd_»ad_uuid , " [start hnd] [end hnd]", 812 { "ch¬-wr™e-»q", cmd_ch¬_wr™e , " ", 814 { "ch¬-wr™e-cmd", cmd_ch¬_wr™e , " ", 816 { "£c-Ëv–", cmd_£c_Ëv– , "[low | medium | high]", 818 { "mtu", cmd_mtu , "", 820 { NULL , NULL, NULL} 823  $cmd_h–p ( ¬gý , ** ¬gvp ) 825  i ; 827  i = 0; commªds [i]. cmd ; i++) 828 `¾_´štf ("%-15 %-30 %s\n", commªds [ i ]. cmd , 829 commªds [ i ]. ·¿ms , commªds[i]. desc ); 830 } } 832  $·r£_lše (* lše_»ad ) 834 ** ¬gvp ; 835  ¬gý ; 836  i ; 838 ià( lše_»ad =ð NULL ) { 839 `¾_´štf ("\n"); 840 `cmd_ex™ (0, NULL ); 844 lše_»ad = `g_¡r¡r (line_read); 846 ià(* lše_»ad == '\0') 847  dÚe ; 849 `add_hi¡Üy ( lše_»ad ); 851 ià( `g_sh–l_·r£_¬gv ( lše_»ad , & ¬gý , & ¬gvp , NULL è=ð FALSE ) 852  dÚe ; 854  i = 0; commªds [i]. cmd ; i++) 855 ià( `¡rÿ£cmp ( commªds [ i ]. cmd , ¬gvp [0]) == 0) 858 ià( commªds [ i ]. cmd ) 859 commªds [ i ]. `func ( ¬gý , ¬gvp ); 861 `”rÜ ("%s: commªd‚Ù found\n", ¬gvp [0]); 863 `g_¡rä“v ( ¬gvp ); 865 dÚe : 866 `ä“ ( lše_»ad ); 867 } } 869  gboÞ—n $´om±_»ad ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 870 gpoš‹r u£r_d©a ) 872 ià( cÚd & ( G_IO_HUP | G_IO_ERR | G_IO_NVAL )) { 873 `g_io_chªÃl_uÄef ( chª ); 874  FALSE ; 877 `¾_ÿÎback_»ad_ch¬ (); 879  TRUE ; 880 } } 882 * $com¶‘iÚ_g’”©Ü (cÚ¡ * ‹xt ,  ¡©e ) 884  šdex = 0, Ën = 0; 885 cÚ¡ * cmd = NULL ; 887 ià( ¡©e == 0) { 888 šdex = 0; 889 Ën = `¡¾’ ( ‹xt ); 892 ( cmd = commªds [ šdex ].cmdè!ð NULL ) { 893 šdex ++; 894 ià( `¡ºcmp ( cmd , ‹xt , Ën ) == 0) 895  `¡rdup ( cmd ); 898  NULL ; 899 } } 901 ** $commªds_com¶‘iÚ (cÚ¡ * ‹xt ,  ¡¬t ,  ’d ) 903 ià( ¡¬t == 0) 904  `¾_com¶‘iÚ_m©ches ( ‹xt , & com¶‘iÚ_g’”©Ü ); 906  NULL ; 907 } } 909  gušt $£tup_¡ªd¬d_šput () 911 GIOChªÃl * chªÃl ; 912 gušt sourû ; 914 chªÃl = `g_io_chªÃl_unix_Ãw ( `fž’o ( ¡dš )); 916 sourû = `g_io_add_w©ch ( chªÃl , 917 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 918 ´om±_»ad , NULL ); 920 `g_io_chªÃl_uÄef ( chªÃl ); 922  sourû ; 923 } } 925  gboÞ—n $sigÇl_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd™iÚ , 926 gpoš‹r u£r_d©a ) 928  __‹rmš©ed = 0; 929  sigÇlfd_sigšfo si ; 930 ssize_t »suÉ ; 931  fd ; 933 ià( cÚd™iÚ & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 934 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 935  FALSE ; 938 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 940 »suÉ = `»ad ( fd , & si , (si)); 941 ià( »suÉ !ð( si )) 942  FALSE ; 944  si . ssi_signo ) { 945  SIGINT : 946 `¾_»¶aû_lše ("", 0); 947 `¾_ülf (); 948 `¾_Ú_Ãw_lše (); 949 `¾_»di¥Ïy (); 951  SIGTERM : 952 ià( __‹rmš©ed == 0) { 953 `¾_»¶aû_lše ("", 0); 954 `¾_ülf (); 955 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 958 __‹rmš©ed = 1; 962  TRUE ; 963 } } 965  gušt $£tup_sigÇlfd () 967 GIOChªÃl * chªÃl ; 968 gušt sourû ; 969 sig£t_t mask ; 970  fd ; 972 `sigem±y£t (& mask ); 973 `sigadd£t (& mask , SIGINT ); 974 `sigadd£t (& mask , SIGTERM ); 976 ià( `sig´ocmask ( SIG_BLOCK , & mask , NULL ) < 0) { 977 `³¼Ü ("Failedo set signal mask"); 981 fd = `sigÇlfd (-1, & mask , 0); 982 ià( fd < 0) { 983 `³¼Ü ("Failedo create signal descriptor"); 987 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 989 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 990 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 991 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 993 sourû = `g_io_add_w©ch ( chªÃl , 994 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 995 sigÇl_hªdËr , NULL ); 997 `g_io_chªÃl_uÄef ( chªÃl ); 999  sourû ; 1000 } } 1002  $š‹¿ùive (cÚ¡ * ¤c , cÚ¡ * d¡ , 1003 cÚ¡ * d¡_ty³ ,  psm ) 1005 gušt šput ; 1006 gušt sigÇl ; 1008 Ýt_£c_Ëv– = `g_¡rdup ("low"); 1010 Ýt_¤c = `g_¡rdup ( ¤c ); 1011 Ýt_d¡ = `g_¡rdup ( d¡ ); 1012 Ýt_d¡_ty³ = `g_¡rdup ( d¡_ty³ ); 1013 Ýt_psm = psm ; 1015 ´om± = `g_¡ršg_Ãw ( NULL ); 1017 ev’t_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1019 šput = `£tup_¡ªd¬d_šput (); 1020 sigÇl = `£tup_sigÇlfd (); 1022 ¾_©‹m±ed_com¶‘iÚ_funùiÚ = commªds_com¶‘iÚ ; 1023 ¾_”a£_em±y_lše = 1; 1024 `¾_ÿÎback_hªdËr_š¡®l ( `g‘_´om± (), ·r£_lše ); 1026 `g_maš_loÝ_run ( ev’t_loÝ ); 1028 `¾_ÿÎback_hªdËr_»move (); 1029 `cmd_discÚÃù (0, NULL ); 1030 `g_sourû_»move ( šput ); 1031 `g_sourû_»move ( sigÇl ); 1032 `g_maš_loÝ_uÄef ( ev’t_loÝ ); 1033 `g_¡ršg_ä“ ( ´om± , TRUE ); 1035 `g_ä“ ( Ýt_¤c ); 1036 `g_ä“ ( Ýt_d¡ ); 1037 `g_ä“ ( Ýt_£c_Ëv– ); 1040 } } @attrib/utils.c 24 #ifdeà HAVE_CONFIG_H 25  ~"cÚfig.h " 28  ~<¡dlib.h > 29  ~ 31  ~ 32  ~ 33  ~ 35  ~"lib/uuid.h " 36  ~"btio/btio.h " 37  ~"©t.h " 38  ~"g©Œib.h " 39  ~"g©t.h " 40  ~"g©‰oÞ.h " 42 GIOChªÃl * $g©t_cÚÃù (cÚ¡ * ¤c , cÚ¡ * d¡ , 43 cÚ¡ * d¡_ty³ , cÚ¡ * £c_Ëv– , 44  psm ,  mtu , BtIOCÚÃù cÚÃù_cb , 45 GE¼Ü ** g”r ) 47 GIOChªÃl * chª ; 48 bdaddr_t sba , dba ; 49 ušt8_t de¡_ty³ ; 50 GE¼Ü * tmp_”r = NULL ; 51 BtIOSecLev– £c ; 53 `¡r2ba ( d¡ , & dba ); 56 ià( ¤c !ð NULL ) { 57 ià(! `¡ºcmp ( ¤c , "hci", 3)) 58 `hci_devba ( `©oi ( ¤c + 3), & sba ); 60 `¡r2ba ( ¤c , & sba ); 62 `baýy (& sba , BDADDR_ANY ); 65 ià( `¡rcmp ( d¡_ty³ , "random") == 0) 66 de¡_ty³ = BDADDR_LE_RANDOM ; 68 de¡_ty³ = BDADDR_LE_PUBLIC ; 70 ià( `¡rcmp ( £c_Ëv– , "medium") == 0) 71 £c = BT_IO_SEC_MEDIUM ; 72 ià( `¡rcmp ( £c_Ëv– , "high") == 0) 73 £c = BT_IO_SEC_HIGH ; 75 £c = BT_IO_SEC_LOW ; 77 ià( psm == 0) 78 chª = `bt_io_cÚÃù ( cÚÃù_cb , NULL , NULL, & tmp_”r , 79 BT_IO_OPT_SOURCE_BDADDR , & sba , 80 BT_IO_OPT_SOURCE_TYPE , BDADDR_LE_PUBLIC , 81 BT_IO_OPT_DEST_BDADDR , & dba , 82 BT_IO_OPT_DEST_TYPE , de¡_ty³ , 83 BT_IO_OPT_CID , ATT_CID , 84 BT_IO_OPT_SEC_LEVEL , £c , 85 BT_IO_OPT_INVALID ); 87 chª = `bt_io_cÚÃù ( cÚÃù_cb , NULL , NULL, & tmp_”r , 88 BT_IO_OPT_SOURCE_BDADDR , & sba , 89 BT_IO_OPT_DEST_BDADDR , & dba , 90 BT_IO_OPT_PSM , psm , 91 BT_IO_OPT_IMTU , mtu , 92 BT_IO_OPT_SEC_LEVEL , £c , 93 BT_IO_OPT_INVALID ); 95 ià( tmp_”r ) { 96 `g_´Ýag©e_”rÜ ( g”r , tmp_”r ); 97  NULL ; 100  chª ; 101 } } 103 size_t $g©t_©Œ_d©a_äom_¡ršg (cÚ¡ * ¡r , ušt8_t ** d©a ) 105  tmp [3]; 106 size_t size , i ; 108 size = `¡¾’ ( ¡r ) / 2; 109 * d©a = `g_Œy_m®loc0 ( size ); 110 ià(* d©a =ð NULL ) 113 tmp [2] = '\0'; 114  i = 0; i < size ; i++) { 115 `memýy ( tmp , ¡r + ( i * 2), 2); 116 (* d©a )[ i ] = ( ušt8_t è `¡¹Þ ( tmp , NULL , 16); 119  size ; 120 } } @btio/btio.c 25 #ifdeà HAVE_CONFIG_H 26  ~"cÚfig.h " 29  ~<¡d¬g.h > 30  ~<¡dlib.h > 31  ~ 32  ~<”ºo.h > 33  ~ 34  ~ 35  ~ 37  ~ 38  ~ 39  ~ 40  ~ 42  ~ 44  ~"btio.h " 46 #iâdeà BT_FLUSHABLE 47  #BT_FLUSHABLE 8 ) 50  #ERROR_FAILED ( g”r , ¡r , ”r ) \ 51 `g_£t_”rÜ ( g”r , BT_IO_ERROR , ”r , \ 52 ¡r ": % (%d)", `¡»¼Ü ( ”r ),ƒ¼) ) 54  #DEFAULT_DEFER_TIMEOUT 30 ) 57 mBT_IO_L2CAP , 58 mBT_IO_RFCOMM , 59 mBT_IO_SCO , 60 mBT_IO_INVALID , 61 } tBtIOTy³ ; 63  s£t_Ýts { 64 bdaddr_t m¤c ; 65 bdaddr_t md¡ ; 66 BtIOTy³ mty³ ; 67 ušt8_t m¤c_ty³ ; 68 ušt8_t md¡_ty³ ; 69  mdeãr ; 70  m£c_Ëv– ; 71 ušt8_t mchªÃl ; 72 ušt16_t mpsm ; 73 ušt16_t mcid ; 74 ušt16_t mmtu ; 75 ušt16_t mimtu ; 76 ušt16_t momtu ; 77  mma¡” ; 78 ušt8_t mmode ; 79  mæushabË ; 80 ušt32_t m´iÜ™y ; 81 ušt16_t mvoiû ; 84  scÚÃù { 85 BtIOCÚÃù mcÚÃù ; 86 gpoš‹r mu£r_d©a ; 87 GDe¡royNÙify mde¡roy ; 90  sacû± { 91 BtIOCÚÃù mcÚÃù ; 92 gpoš‹r mu£r_d©a ; 93 GDe¡royNÙify mde¡roy ; 96  s£rv” { 97 BtIOCÚÃù mcÚÃù ; 98 BtIOCÚfœm mcÚfœm ; 99 gpoš‹r mu£r_d©a ; 100 GDe¡royNÙify mde¡roy ; 103  BtIOTy³ $bt_io_g‘_ty³ ( GIOChªÃl * io , GE¼Ü ** g”r ) 105  sk = `g_io_chªÃl_unix_g‘_fd ( io ); 106  domaš , ´Ùo , ”r ; 107 sockËn_t Ën ; 109 domaš = 0; 110 Ën = ( domaš ); 111 ”r = `g‘sockÝt ( sk , SOL_SOCKET , SO_DOMAIN , & domaš , & Ën ); 112 ià( ”r < 0) { 113 `ERROR_FAILED ( g”r , "g‘sockÝt(SO_DOMAIN)", ”ºo ); 114  BT_IO_INVALID ; 117 ià( domaš !ð AF_BLUETOOTH ) { 118 `g_£t_”rÜ ( g”r , BT_IO_ERROR , EINVAL , 120  BT_IO_INVALID ; 123 ´Ùo = 0; 124 Ën = ( ´Ùo ); 125 ”r = `g‘sockÝt ( sk , SOL_SOCKET , SO_PROTOCOL , & ´Ùo , & Ën ); 126 ià( ”r < 0) { 127 `ERROR_FAILED ( g”r , "g‘sockÝt(SO_PROTOCOL)", ”ºo ); 128  BT_IO_INVALID ; 131  ´Ùo ) { 132  BTPROTO_RFCOMM : 133  BT_IO_RFCOMM ; 134  BTPROTO_SCO : 135  BT_IO_SCO ; 136  BTPROTO_L2CAP : 137  BT_IO_L2CAP ; 139 `g_£t_”rÜ ( g”r , BT_IO_ERROR , EINVAL , 141  BT_IO_INVALID ; 143 } } 145  $£rv”_»move ( £rv” *server) 147 ià( £rv” -> de¡roy ) 148 £rv” -> `de¡roy (£rv”-> u£r_d©a ); 149 `g_ä“ ( £rv” ); 150 } } 152  $cÚÃù_»move ( cÚÃù * cÚn ) 154 ià( cÚn -> de¡roy ) 155 cÚn -> `de¡roy (cÚn-> u£r_d©a ); 156 `g_ä“ ( cÚn ); 157 } } 159  $acû±_»move ( acû± *accept) 161 ià( acû± -> de¡roy ) 162 acû± -> `de¡roy ×cû±-> u£r_d©a ); 163 `g_ä“ ( acû± ); 164 } } 166  gboÞ—n $check_nv® ( GIOChªÃl * io ) 168  pÞlfd fds ; 170 `mem£t (& fds , 0, (fds)); 171 fds . fd = `g_io_chªÃl_unix_g‘_fd ( io ); 172 fds . ev’ts = POLLNVAL ; 174 ià( `pÞl (& fds , 1, 0è> 0 && (fds. »v’ts & POLLNVAL )) 175  TRUE ; 177  FALSE ; 178 } } 180  gboÞ—n $acû±_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 181 gpoš‹r u£r_d©a ) 183  acû± *acû± = u£r_d©a ; 184 GE¼Ü * g”r = NULL ; 187 ià(( cÚd & G_IO_NVAL è|| `check_nv® ( io )) 188  FALSE ; 190 ià( cÚd & ( G_IO_HUP | G_IO_ERR )) { 191  ”r , sk_”r , sock = `g_io_chªÃl_unix_g‘_fd ( io ); 192 sockËn_t Ën = ( sk_”r ); 194 ià( `g‘sockÝt ( sock , SOL_SOCKET , SO_ERROR , & sk_”r , & Ën ) < 0) 195 ”r = - ”ºo ; 197 ”r = - sk_”r ; 199 ià( ”r < 0) 200 `ERROR_FAILED (& g”r , "HUP o¸ERR oÀsock‘", - ”r ); 203 acû± -> `cÚÃù ( io , g”r ,‡cû±-> u£r_d©a ); 205 `g_þ—r_”rÜ (& g”r ); 207  FALSE ; 208 } } 210  gboÞ—n $cÚÃù_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 211 gpoš‹r u£r_d©a ) 213  cÚÃù * cÚn = u£r_d©a ; 214 GE¼Ü * g”r = NULL ; 215  ”r , sk_”r , sock ; 216 sockËn_t Ën = ( sk_”r ); 219 ià(( cÚd & G_IO_NVAL è|| `check_nv® ( io )) 220  FALSE ; 222 sock = `g_io_chªÃl_unix_g‘_fd ( io ); 224 ià( `g‘sockÝt ( sock , SOL_SOCKET , SO_ERROR , & sk_”r , & Ën ) < 0) 225 ”r = - ”ºo ; 227 ”r = - sk_”r ; 229 ià( ”r < 0) 230 `ERROR_FAILED (& g”r , "cÚÃùƒ¼Ü", - ”r ); 232 cÚn -> `cÚÃù ( io , g”r , cÚn-> u£r_d©a ); 234 `g_þ—r_”rÜ (& g”r ); 236  FALSE ; 237 } } 239  gboÞ—n $£rv”_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 240 gpoš‹r u£r_d©a ) 242  £rv” *£rv” = u£r_d©a ; 243  ¤v_sock , þi_sock ; 244 GIOChªÃl * þi_io ; 247 ià(( cÚd & G_IO_NVAL è|| `check_nv® ( io )) 248  FALSE ; 250 ¤v_sock = `g_io_chªÃl_unix_g‘_fd ( io ); 252 þi_sock = `acû± ( ¤v_sock , NULL , NULL); 253 ià( þi_sock < 0) 254  TRUE ; 256 þi_io = `g_io_chªÃl_unix_Ãw ( þi_sock ); 258 `g_io_chªÃl_£t_þo£_Ú_uÄef ( þi_io , TRUE ); 259 `g_io_chªÃl_£t_æags ( þi_io , G_IO_FLAG_NONBLOCK , NULL ); 261 ià( £rv” -> cÚfœm ) 262 £rv” -> `cÚfœm ( þi_io , s”v”-> u£r_d©a ); 264 £rv” -> `cÚÃù ( þi_io , NULL , s”v”-> u£r_d©a ); 266 `g_io_chªÃl_uÄef ( þi_io ); 268  TRUE ; 269 } } 271  $£rv”_add ( GIOChªÃl * io , BtIOCÚÃù cÚÃù , 272 BtIOCÚfœm cÚfœm , gpoš‹r u£r_d©a , 273 GDe¡royNÙify de¡roy ) 275  £rv” *server; 276 GIOCÚd™iÚ cÚd ; 278 £rv” = `g_Ãw0 (server, 1); 279 £rv” -> cÚÃù = connect; 280 £rv” -> cÚfœm = confirm; 281 £rv” -> u£r_d©a = user_data; 282 £rv” -> de¡roy = destroy; 284 cÚd = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL ; 285 `g_io_add_w©ch_fuÎ ( io , G_PRIORITY_DEFAULT , cÚd , £rv”_cb , £rv” , 286 ( GDe¡royNÙify è £rv”_»move ); 287 } } 289  $cÚÃù_add ( GIOChªÃl * io , BtIOCÚÃù cÚÃù , 290 gpoš‹r u£r_d©a , GDe¡royNÙify de¡roy ) 292  cÚÃù * cÚn ; 293 GIOCÚd™iÚ cÚd ; 295 cÚn = `g_Ãw0 ( cÚÃù , 1); 296 cÚn -> cÚÃù = connect; 297 cÚn -> u£r_d©a = user_data; 298 cÚn -> de¡roy = destroy; 300 cÚd = G_IO_OUT | G_IO_ERR | G_IO_HUP | G_IO_NVAL ; 301 `g_io_add_w©ch_fuÎ ( io , G_PRIORITY_DEFAULT , cÚd , cÚÃù_cb , cÚn , 302 ( GDe¡royNÙify è cÚÃù_»move ); 303 } } 305  $acû±_add ( GIOChªÃl * io , BtIOCÚÃù cÚÃù , gpoš‹r u£r_d©a , 306 GDe¡royNÙify de¡roy ) 308  acû± *accept; 309 GIOCÚd™iÚ cÚd ; 311 acû± = `g_Ãw0 (accept, 1); 312 acû± -> cÚÃù = connect; 313 acû± -> u£r_d©a = user_data; 314 acû± -> de¡roy = destroy; 316 cÚd = G_IO_OUT | G_IO_ERR | G_IO_HUP | G_IO_NVAL ; 317 `g_io_add_w©ch_fuÎ ( io , G_PRIORITY_DEFAULT , cÚd , acû±_cb , acû± , 318 ( GDe¡royNÙify è acû±_»move ); 319 } } 321  $l2ÿp_bšd ( sock , cÚ¡ bdaddr_t * ¤c , ušt8_t ¤c_ty³ , 322 ušt16_t psm , ušt16_ˆ cid , GE¼Ü ** ”r ) 324  sockaddr_l2 addr ; 326 `mem£t (& addr , 0, (addr)); 327 addr . l2_çmžy = AF_BLUETOOTH ; 328 `baýy (& addr . l2_bdaddr , ¤c ); 330 ià( cid ) 331 addr . l2_cid = `htobs ( cid ); 333 addr . l2_psm = `htobs ( psm ); 335 addr . l2_bdaddr_ty³ = ¤c_ty³ ; 337 ià( `bšd ( sock , ( sockaddr *è& addr , (addr)) < 0) { 338  ”rÜ = - ”ºo ; 339 `ERROR_FAILED ( ”r , "l2ÿp_bšd", ”ºo ); 340  ”rÜ ; 344 } } 346  $l2ÿp_cÚÃù ( sock , cÚ¡ bdaddr_t * d¡ , ušt8_t d¡_ty³ , 347 ušt16_t psm , ušt16_ˆ cid ) 349  ”r ; 350  sockaddr_l2 addr ; 352 `mem£t (& addr , 0, (addr)); 353 addr . l2_çmžy = AF_BLUETOOTH ; 354 `baýy (& addr . l2_bdaddr , d¡ ); 355 ià( cid ) 356 addr . l2_cid = `htobs ( cid ); 358 addr . l2_psm = `htobs ( psm ); 360 addr . l2_bdaddr_ty³ = d¡_ty³ ; 362 ”r = `cÚÃù ( sock , ( sockaddr *è& addr , (addr)); 363 ià( ”r < 0 && !( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINPROGRESS )) 364  - ”ºo ; 367 } } 369  $l2ÿp_£t_ma¡” ( sock ,  ma¡” ) 371  æags ; 372 sockËn_t Ën ; 374 Ën = ( æags ); 375 ià( `g‘sockÝt ( sock , SOL_L2CAP , L2CAP_LM , & æags , & Ën ) < 0) 376  - ”ºo ; 378 ià( ma¡” ) { 379 ià( æags & L2CAP_LM_MASTER ) 381 æags |ð L2CAP_LM_MASTER ; 383 ià(!( æags & L2CAP_LM_MASTER )) 385 æags &ð~ L2CAP_LM_MASTER ; 388 ià( `£tsockÝt ( sock , SOL_L2CAP , L2CAP_LM , & æags , (flags)) < 0) 389  - ”ºo ; 392 } } 394  $rfcomm_£t_ma¡” ( sock ,  ma¡” ) 396  æags ; 397 sockËn_t Ën ; 399 Ën = ( æags ); 400 ià( `g‘sockÝt ( sock , SOL_RFCOMM , RFCOMM_LM , & æags , & Ën ) < 0) 401  - ”ºo ; 403 ià( ma¡” ) { 404 ià( æags & RFCOMM_LM_MASTER ) 406 æags |ð RFCOMM_LM_MASTER ; 408 ià(!( æags & RFCOMM_LM_MASTER )) 410 æags &ð~ RFCOMM_LM_MASTER ; 413 ià( `£tsockÝt ( sock , SOL_RFCOMM , RFCOMM_LM , & æags , (flags)) < 0) 414  - ”ºo ; 417 } } 419  $l2ÿp_£t_lm ( sock ,  Ëv– ) 421  lm_m­ [] = { 423 L2CAP_LM_AUTH , 424 L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT , 425 L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT | L2CAP_LM_SECURE , 426 }, Ýt = lm_m­ [ Ëv– ]; 428 ià( `£tsockÝt ( sock , SOL_L2CAP , L2CAP_LM , & Ýt , (opt)) < 0) 429  - ”ºo ; 432 } } 434  $rfcomm_£t_lm ( sock ,  Ëv– ) 436  lm_m­ [] = { 438 RFCOMM_LM_AUTH , 439 RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT , 440 RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT | RFCOMM_LM_SECURE , 441 }, Ýt = lm_m­ [ Ëv– ]; 443 ià( `£tsockÝt ( sock , SOL_RFCOMM , RFCOMM_LM , & Ýt , (opt)) < 0) 444  - ”ºo ; 447 } } 449  gboÞ—n $£t_£c_Ëv– ( sock , BtIOTy³ ty³ ,  Ëv– , GE¼Ü ** ”r ) 451  bt_£cur™y £c ; 452  »t ; 454 ià( Ëv– < BT_SECURITY_LOW ||†ev– > BT_SECURITY_HIGH ) { 455 `g_£t_”rÜ ( ”r , BT_IO_ERROR , EINVAL , 457 BT_SECURITY_LOW , BT_SECURITY_HIGH ); 458  FALSE ; 461 `mem£t (& £c , 0, (sec)); 462 £c . Ëv– =†evel; 464 ià( `£tsockÝt ( sock , SOL_BLUETOOTH , BT_SECURITY , & £c , 465 ( £c )) == 0) 466  TRUE ; 468 ià( ”ºo !ð ENOPROTOOPT ) { 469 `ERROR_FAILED ( ”r , "£tsockÝt(BT_SECURITY)", ”ºo ); 470  FALSE ; 473 ià( ty³ =ð BT_IO_L2CAP ) 474 »t = `l2ÿp_£t_lm ( sock , Ëv– ); 476 »t = `rfcomm_£t_lm ( sock , Ëv– ); 478 ià( »t < 0) { 479 `ERROR_FAILED ( ”r , "£tsockÝt(LM)", - »t ); 480  FALSE ; 483  TRUE ; 484 } } 486  $l2ÿp_g‘_lm ( sock , * £c_Ëv– ) 488  Ýt ; 489 sockËn_t Ën ; 491 Ën = ( Ýt ); 492 ià( `g‘sockÝt ( sock , SOL_L2CAP , L2CAP_LM , & Ýt , & Ën ) < 0) 493  - ”ºo ; 495 * £c_Ëv– = 0; 497 ià( Ýt & L2CAP_LM_AUTH ) 498 * £c_Ëv– = BT_SECURITY_LOW ; 499 ià( Ýt & L2CAP_LM_ENCRYPT ) 500 * £c_Ëv– = BT_SECURITY_MEDIUM ; 501 ià( Ýt & L2CAP_LM_SECURE ) 502 * £c_Ëv– = BT_SECURITY_HIGH ; 505 } } 507  $rfcomm_g‘_lm ( sock , * £c_Ëv– ) 509  Ýt ; 510 sockËn_t Ën ; 512 Ën = ( Ýt ); 513 ià( `g‘sockÝt ( sock , SOL_RFCOMM , RFCOMM_LM , & Ýt , & Ën ) < 0) 514  - ”ºo ; 516 * £c_Ëv– = 0; 518 ià( Ýt & RFCOMM_LM_AUTH ) 519 * £c_Ëv– = BT_SECURITY_LOW ; 520 ià( Ýt & RFCOMM_LM_ENCRYPT ) 521 * £c_Ëv– = BT_SECURITY_MEDIUM ; 522 ià( Ýt & RFCOMM_LM_SECURE ) 523 * £c_Ëv– = BT_SECURITY_HIGH ; 526 } } 528  gboÞ—n $g‘_£c_Ëv– ( sock , BtIOTy³ ty³ , * Ëv– , 529 GE¼Ü ** ”r ) 531  bt_£cur™y £c ; 532 sockËn_t Ën ; 533  »t ; 535 `mem£t (& £c , 0, (sec)); 536 Ën = ( £c ); 537 ià( `g‘sockÝt ( sock , SOL_BLUETOOTH , BT_SECURITY , & £c , & Ën ) == 0) { 538 * Ëv– = £c .level; 539  TRUE ; 542 ià( ”ºo !ð ENOPROTOOPT ) { 543 `ERROR_FAILED ( ”r , "g‘sockÝt(BT_SECURITY)", ”ºo ); 544  FALSE ; 547 ià( ty³ =ð BT_IO_L2CAP ) 548 »t = `l2ÿp_g‘_lm ( sock , Ëv– ); 550 »t = `rfcomm_g‘_lm ( sock , Ëv– ); 552 ià( »t < 0) { 553 `ERROR_FAILED ( ”r , "g‘sockÝt(LM)", - »t ); 554  FALSE ; 557  TRUE ; 558 } } 560  $l2ÿp_£t_æushabË ( sock , gboÞ—n æushabË ) 562  f ; 564 f = æushabË ; 565 ià( `£tsockÝt ( sock , SOL_BLUETOOTH , BT_FLUSHABLE , & f , (f)) < 0) 566  - ”ºo ; 569 } } 571  $£t_´iÜ™y ( sock , ušt32_t ´io ) 573 ià( `£tsockÝt ( sock , SOL_SOCKET , SO_PRIORITY , & ´io , (prio)) < 0) 574  - ”ºo ; 577 } } 579  gboÞ—n $g‘_key_size ( sock , * size , GE¼Ü ** ”r ) 581  bt_£cur™y £c ; 582 sockËn_t Ën ; 584 `mem£t (& £c , 0, (sec)); 585 Ën = ( £c ); 586 ià( `g‘sockÝt ( sock , SOL_BLUETOOTH , BT_SECURITY , & £c , & Ën ) == 0) { 587 * size = £c . key_size ; 588  TRUE ; 591  FALSE ; 592 } } 594  gboÞ—n $£t_l2Ýts ( sock , ušt16_t imtu , ušt16_ˆ omtu , 595 ušt8_t mode , GE¼Ü ** ”r ) 597  l2ÿp_ÝtiÚs l2o ; 598 sockËn_t Ën ; 600 `mem£t (& l2o , 0, (l2o)); 601 Ën = ( l2o ); 602 ià( `g‘sockÝt ( sock , SOL_L2CAP , L2CAP_OPTIONS , & l2o , & Ën ) < 0) { 603 `ERROR_FAILED ( ”r , "g‘sockÝt(L2CAP_OPTIONS)", ”ºo ); 604  FALSE ; 607 ià( imtu ) 608 l2o . imtu = imtu; 609 ià( omtu ) 610 l2o . omtu = omtu; 611 ià( mode ) 612 l2o . mode = mode; 614 ià( `£tsockÝt ( sock , SOL_L2CAP , L2CAP_OPTIONS , & l2o , (l2o)) < 0) { 615 `ERROR_FAILED ( ”r , "£tsockÝt(L2CAP_OPTIONS)", ”ºo ); 616  FALSE ; 619  TRUE ; 620 } } 622  gboÞ—n $£t_Ë_imtu ( sock , ušt16_t imtu , GE¼Ü ** ”r ) 624 ià( `£tsockÝt ( sock , SOL_BLUETOOTH , BT_RCVMTU , & imtu , 625 ( imtu )) < 0) { 626 `ERROR_FAILED ( ”r , "£tsockÝt(BT_RCVMTU)", ”ºo ); 627  FALSE ; 630  TRUE ; 631 } } 633  gboÞ—n $l2ÿp_£t ( sock , ušt8_t ¤c_ty³ ,  £c_Ëv– , 634 ušt16_t imtu , ušt16_ˆ omtu , ušt8_t mode , 635  ma¡” ,  æushabË , ušt32_t ´iÜ™y , 636 GE¼Ü ** ”r ) 638 ià( imtu || omtu || mode ) { 639 gboÞ—n »t ; 641 ià( ¤c_ty³ =ð BDADDR_BREDR ) 642 »t = `£t_l2Ýts ( sock , imtu , omtu , mode , ”r ); 644 »t = `£t_Ë_imtu ( sock , imtu , ”r ); 646 ià(! »t ) 647  »t ; 650 ià( ma¡” >ð0 && `l2ÿp_£t_ma¡” ( sock , master) < 0) { 651 `ERROR_FAILED ( ”r , "l2ÿp_£t_ma¡”", ”ºo ); 652  FALSE ; 655 ià( æushabË >ð0 && `l2ÿp_£t_æushabË ( sock , flushable) < 0) { 656 `ERROR_FAILED ( ”r , "l2ÿp_£t_æushabË", ”ºo ); 657  FALSE ; 660 ià( ´iÜ™y > 0 && `£t_´iÜ™y ( sock ,…riority) < 0) { 661 `ERROR_FAILED ( ”r , "£t_´iÜ™y", ”ºo ); 662  FALSE ; 665 ià( £c_Ëv– && ! `£t_£c_Ëv– ( sock , BT_IO_L2CAP , sec_Ëv–, ”r )) 666  FALSE ; 668  TRUE ; 669 } } 671  $rfcomm_bšd ( sock , 672 cÚ¡ bdaddr_t * ¤c , ušt8_t chªÃl , GE¼Ü ** ”r ) 674  sockaddr_rc addr ; 676 `mem£t (& addr , 0, (addr)); 677 addr . rc_çmžy = AF_BLUETOOTH ; 678 `baýy (& addr . rc_bdaddr , ¤c ); 679 addr . rc_chªÃl = chªÃl ; 681 ià( `bšd ( sock , ( sockaddr *è& addr , (addr)) < 0) { 682  ”rÜ = - ”ºo ; 683 `ERROR_FAILED ( ”r , "rfcomm_bšd", ”ºo ); 684  ”rÜ ; 688 } } 690  $rfcomm_cÚÃù ( sock , cÚ¡ bdaddr_t * d¡ , ušt8_t chªÃl ) 692  ”r ; 693  sockaddr_rc addr ; 695 `mem£t (& addr , 0, (addr)); 696 addr . rc_çmžy = AF_BLUETOOTH ; 697 `baýy (& addr . rc_bdaddr , d¡ ); 698 addr . rc_chªÃl = chªÃl ; 700 ”r = `cÚÃù ( sock , ( sockaddr *è& addr , (addr)); 701 ià( ”r < 0 && !( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINPROGRESS )) 702  - ”ºo ; 705 } } 707  gboÞ—n $rfcomm_£t ( sock ,  £c_Ëv– ,  ma¡” , GE¼Ü ** ”r ) 709 ià( £c_Ëv– && ! `£t_£c_Ëv– ( sock , BT_IO_RFCOMM , sec_Ëv–, ”r )) 710  FALSE ; 712 ià( ma¡” >ð0 && `rfcomm_£t_ma¡” ( sock , master) < 0) { 713 `ERROR_FAILED ( ”r , "rfcomm_£t_ma¡”", ”ºo ); 714  FALSE ; 717  TRUE ; 718 } } 720  $sco_bšd ( sock , cÚ¡ bdaddr_t * ¤c , GE¼Ü ** ”r ) 722  sockaddr_sco addr ; 724 `mem£t (& addr , 0, (addr)); 725 addr . sco_çmžy = AF_BLUETOOTH ; 726 `baýy (& addr . sco_bdaddr , ¤c ); 728 ià( `bšd ( sock , ( sockaddr *è& addr , (addr)) < 0) { 729  ”rÜ = - ”ºo ; 730 `ERROR_FAILED ( ”r , "sco_bšd", ”ºo ); 731  ”rÜ ; 735 } } 737  $sco_cÚÃù ( sock , cÚ¡ bdaddr_t * d¡ ) 739  sockaddr_sco addr ; 740  ”r ; 742 `mem£t (& addr , 0, (addr)); 743 addr . sco_çmžy = AF_BLUETOOTH ; 744 `baýy (& addr . sco_bdaddr , d¡ ); 746 ”r = `cÚÃù ( sock , ( sockaddr *è& addr , (addr)); 747 ià( ”r < 0 && !( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINPROGRESS )) 748  - ”ºo ; 751 } } 753  gboÞ—n $sco_£t ( sock , ušt16_t mtu , ušt16_ˆ voiû , GE¼Ü ** ”r ) 755  sco_ÝtiÚs sco_Ýt ; 756  bt_voiû bt_voice; 757 sockËn_t Ën ; 759 ià(! mtu ) 760  voiû ; 762 Ën = ( sco_Ýt ); 763 `mem£t (& sco_Ýt , 0, Ën ); 764 ià( `g‘sockÝt ( sock , SOL_SCO , SCO_OPTIONS , & sco_Ýt , & Ën ) < 0) { 765 `ERROR_FAILED ( ”r , "g‘sockÝt(SCO_OPTIONS)", ”ºo ); 766  FALSE ; 769 sco_Ýt . mtu = mtu; 770 ià( `£tsockÝt ( sock , SOL_SCO , SCO_OPTIONS , & sco_Ýt , 771 ( sco_Ýt )) < 0) { 772 `ERROR_FAILED ( ”r , "£tsockÝt(SCO_OPTIONS)", ”ºo ); 773  FALSE ; 776 voiû : 777 ià(! voiû ) 778  TRUE ; 780 `mem£t (& bt_voiû , 0, (bt_voice)); 781 bt_voiû . £‰šg = voiû ; 782 ià( `£tsockÝt ( sock , SOL_BLUETOOTH , BT_VOICE , & bt_voiû , 783 ( bt_voiû )) < 0) { 784 `ERROR_FAILED ( ”r , "£tsockÝt(BT_VOICE)", ”ºo ); 785  FALSE ; 788  TRUE ; 789 } } 791  gboÞ—n $·r£_£t_Ýts ( £t_Ýts * Ýts , GE¼Ü ** ”r , 792 BtIOO±iÚ Ýt1 , va_li¡ ¬gs ) 794 BtIOO±iÚ Ýt = Ýt1 ; 795 cÚ¡ * ¡r ; 797 `mem£t ( Ýts , 0, (*opts)); 800 Ýts -> ty³ = BT_IO_SCO ; 801 Ýts -> deãr = DEFAULT_DEFER_TIMEOUT ; 802 Ýts -> ma¡” = -1; 803 Ýts -> mode = L2CAP_MODE_BASIC ; 804 Ýts -> æushabË = -1; 805 Ýts -> ´iÜ™y = 0; 806 Ýts -> ¤c_ty³ = BDADDR_BREDR ; 807 Ýts -> d¡_ty³ = BDADDR_BREDR ; 809  Ýt !ð BT_IO_OPT_INVALID ) { 810  Ýt ) { 811  BT_IO_OPT_SOURCE : 812 ¡r = `va_¬g ( ¬gs , const *); 813 `¡r2ba ( ¡r , & Ýts -> ¤c ); 815  BT_IO_OPT_SOURCE_BDADDR : 816 `baýy (& Ýts -> ¤c , `va_¬g ( ¬gs , cÚ¡ bdaddr_t *)); 818  BT_IO_OPT_SOURCE_TYPE : 819 Ýts -> ¤c_ty³ = `va_¬g ( ¬gs , ); 821  BT_IO_OPT_DEST : 822 `¡r2ba ( `va_¬g ( ¬gs , cÚ¡ *), & Ýts -> d¡ ); 824  BT_IO_OPT_DEST_BDADDR : 825 `baýy (& Ýts -> d¡ , `va_¬g ( ¬gs , cÚ¡ bdaddr_t *)); 827  BT_IO_OPT_DEST_TYPE : 828 Ýts -> d¡_ty³ = `va_¬g ( ¬gs , ); 830  BT_IO_OPT_DEFER_TIMEOUT : 831 Ýts -> deãr = `va_¬g ( ¬gs , ); 833  BT_IO_OPT_SEC_LEVEL : 834 Ýts -> £c_Ëv– = `va_¬g ( ¬gs , ); 836  BT_IO_OPT_CHANNEL : 837 Ýts -> ty³ = BT_IO_RFCOMM ; 838 Ýts -> chªÃl = `va_¬g ( ¬gs , ); 840  BT_IO_OPT_PSM : 841 Ýts -> ty³ = BT_IO_L2CAP ; 842 Ýts -> psm = `va_¬g ( ¬gs , ); 844  BT_IO_OPT_CID : 845 Ýts -> ty³ = BT_IO_L2CAP ; 846 Ýts -> cid = `va_¬g ( ¬gs , ); 848  BT_IO_OPT_MTU : 849 Ýts -> mtu = `va_¬g ( ¬gs , ); 850 Ýts -> imtu = o±s-> mtu ; 851 Ýts -> omtu = o±s-> mtu ; 853  BT_IO_OPT_OMTU : 854 Ýts -> omtu = `va_¬g ( ¬gs , ); 855 ià(! Ýts -> mtu ) 856 Ýts -> mtu = o±s-> omtu ; 858  BT_IO_OPT_IMTU : 859 Ýts -> imtu = `va_¬g ( ¬gs , ); 860 ià(! Ýts -> mtu ) 861 Ýts -> mtu = o±s-> imtu ; 863  BT_IO_OPT_MASTER : 864 Ýts -> ma¡” = `va_¬g ( ¬gs , gboÞ—n ); 866  BT_IO_OPT_MODE : 867 Ýts -> mode = `va_¬g ( ¬gs , ); 869  BT_IO_OPT_FLUSHABLE : 870 Ýts -> æushabË = `va_¬g ( ¬gs , gboÞ—n ); 872  BT_IO_OPT_PRIORITY : 873 Ýts -> ´iÜ™y = `va_¬g ( ¬gs , ); 875  BT_IO_OPT_VOICE : 876 Ýts -> voiû = `va_¬g ( ¬gs , ); 878  BT_IO_OPT_INVALID : 879  BT_IO_OPT_KEY_SIZE : 880  BT_IO_OPT_SOURCE_CHANNEL : 881  BT_IO_OPT_DEST_CHANNEL : 882  BT_IO_OPT_HANDLE : 883  BT_IO_OPT_CLASS : 885 `g_£t_”rÜ ( ”r , BT_IO_ERROR , EINVAL , 886 "UnknowÀÝtiÚ %d", Ýt ); 887  FALSE ; 890 Ýt = `va_¬g ( ¬gs , ); 893  TRUE ; 894 } } 896  gboÞ—n $g‘_¤c ( sock , * ¤c , sockËn_t Ën , GE¼Ü ** ”r ) 898 sockËn_t Þ’ ; 900 `mem£t ( ¤c , 0, Ën ); 901 Þ’ = Ën ; 902 ià( `g‘sockÇme ( sock , ¤c , & Þ’ ) < 0) { 903 `ERROR_FAILED ( ”r , "g‘sockÇme", ”ºo ); 904  FALSE ; 907  TRUE ; 908 } } 910  gboÞ—n $g‘_d¡ ( sock , * d¡ , sockËn_t Ën , GE¼Ü ** ”r ) 912 sockËn_t Þ’ ; 914 `mem£t ( d¡ , 0, Ën ); 915 Þ’ = Ën ; 916 ià( `g‘³”Çme ( sock , d¡ , & Þ’ ) < 0) { 917 `ERROR_FAILED ( ”r , "g‘³”Çme", ”ºo ); 918  FALSE ; 921  TRUE ; 922 } } 924  $l2ÿp_g‘_šfo ( sock , ušt16_t * hªdË , ušt8_t * dev_þass ) 926  l2ÿp_cÚnšfo šfo ; 927 sockËn_t Ën ; 929 Ën = ( šfo ); 930 ià( `g‘sockÝt ( sock , SOL_L2CAP , L2CAP_CONNINFO , & šfo , & Ën ) < 0) 931  - ”ºo ; 933 ià( hªdË ) 934 * hªdË = šfo . hci_hªdË ; 936 ià( dev_þass ) 937 `memýy ( dev_þass , šfo .dev_class, 3); 940 } } 942  $l2ÿp_g‘_æushabË ( sock , gboÞ—n * æushabË ) 944  f ; 945 sockËn_t Ën ; 947 f = 0; 948 Ën = ( f ); 949 ià( `g‘sockÝt ( sock , SOL_BLUETOOTH , BT_FLUSHABLE , & f , & Ën ) < 0) 950  - ”ºo ; 952 ià( f ) 953 * æushabË = TRUE ; 955 * æushabË = FALSE ; 958 } } 960  $g‘_´iÜ™y ( sock , ušt32_t * ´io ) 962 sockËn_t Ën ; 964 Ën = (* ´io ); 965 ià( `g‘sockÝt ( sock , SOL_SOCKET , SO_PRIORITY , ´io , & Ën ) < 0) 966  - ”ºo ; 969 } } 971  gboÞ—n $l2ÿp_g‘ ( sock , GE¼Ü ** ”r , BtIOO±iÚ Ýt1 , 972 va_li¡ ¬gs ) 974 BtIOO±iÚ Ýt = Ýt1 ; 975  sockaddr_l2 ¤c , d¡ ; 976  l2ÿp_ÝtiÚs l2o ; 977  æags ; 978 ušt8_t dev_þass [3]; 979 ušt16_t hªdË = 0; 980 sockËn_t Ën ; 981 gboÞ—n æushabË = FALSE , have_d¡ = FALSE; 982 ušt32_t ´iÜ™y ; 984 ià(! `g‘_¤c ( sock , & ¤c , (¤c), ”r )) 985  FALSE ; 987 `mem£t (& l2o , 0, (l2o)); 989 ià( ¤c . l2_bdaddr_ty³ !ð BDADDR_BREDR ) { 990 Ën = ( l2o . imtu ); 991 ià( `g‘sockÝt ( sock , SOL_BLUETOOTH , BT_RCVMTU , 992 & l2o . imtu , & Ën ) == 0) 993  ·r£_Ýts ; 998 ià( ”ºo !ð EPROTONOSUPPORT &&ƒ¼nØ!ð ENOPROTOOPT ) { 999 `ERROR_FAILED ( ”r , "g‘sockÝt(BT_RCVMTU)", ”ºo ); 1000  FALSE ; 1004 Ën = ( l2o ); 1005 ià( `g‘sockÝt ( sock , SOL_L2CAP , L2CAP_OPTIONS , & l2o , & Ën ) < 0) { 1006 `ERROR_FAILED ( ”r , "g‘sockÝt(L2CAP_OPTIONS)", ”ºo ); 1007  FALSE ; 1010 ·r£_Ýts : 1011  Ýt !ð BT_IO_OPT_INVALID ) { 1012  Ýt ) { 1013  BT_IO_OPT_SOURCE : 1014 `ba2¡r (& ¤c . l2_bdaddr , `va_¬g ( ¬gs , *)); 1016  BT_IO_OPT_SOURCE_BDADDR : 1017 `baýy ( `va_¬g ( ¬gs , bdaddr_t *), & ¤c . l2_bdaddr ); 1019  BT_IO_OPT_DEST : 1020 ià(! have_d¡ ) 1021 have_d¡ = `g‘_d¡ ( sock , & d¡ , (dst), 1022 ”r ); 1023 ià(! have_d¡ ) 1024  FALSE ; 1025 `ba2¡r (& d¡ . l2_bdaddr , `va_¬g ( ¬gs , *)); 1027  BT_IO_OPT_DEST_BDADDR : 1028 ià(! have_d¡ ) 1029 have_d¡ = `g‘_d¡ ( sock , & d¡ , (dst), 1030 ”r ); 1031 ià(! have_d¡ ) 1032  FALSE ; 1033 `baýy ( `va_¬g ( ¬gs , bdaddr_t *), & d¡ . l2_bdaddr ); 1035  BT_IO_OPT_DEST_TYPE : 1036 ià(! have_d¡ ) 1037 have_d¡ = `g‘_d¡ ( sock , & d¡ , (dst), 1038 ”r ); 1039 ià(! have_d¡ ) 1040  FALSE ; 1041 *( `va_¬g ( ¬gs , ušt8_t *)èð d¡ . l2_bdaddr_ty³ ; 1043  BT_IO_OPT_DEFER_TIMEOUT : 1044 Ën = (); 1045 ià( `g‘sockÝt ( sock , SOL_BLUETOOTH , BT_DEFER_SETUP , 1046 `va_¬g ( ¬gs , *), & Ën ) < 0) { 1047 `ERROR_FAILED ( ”r , "getsockopt(DEFER_SETUP)", 1048 ”ºo ); 1049  FALSE ; 1052  BT_IO_OPT_SEC_LEVEL : 1053 ià(! `g‘_£c_Ëv– ( sock , BT_IO_L2CAP , 1054 `va_¬g ( ¬gs , *), ”r )) 1055  FALSE ; 1057  BT_IO_OPT_KEY_SIZE : 1058 ià(! `g‘_key_size ( sock , `va_¬g ( ¬gs , *), ”r )) 1059  FALSE ; 1061  BT_IO_OPT_PSM : 1062 ià( ¤c . l2_psm ) { 1063 *( `va_¬g ( ¬gs , ušt16_t *)èð `btohs ( ¤c . l2_psm ); 1067 ià(! have_d¡ ) 1068 have_d¡ = `g‘_d¡ ( sock , & d¡ , (dst), 1069 ”r ); 1070 ià(! have_d¡ ) 1071  FALSE ; 1073 *( `va_¬g ( ¬gs , ušt16_t *)èð `btohs ( d¡ . l2_psm ); 1075  BT_IO_OPT_CID : 1076 ià( ¤c . l2_cid ) { 1077 *( `va_¬g ( ¬gs , ušt16_t *)èð `btohs ( ¤c . l2_cid ); 1081 ià(! have_d¡ ) 1082 have_d¡ = `g‘_d¡ ( sock , & d¡ , (dst), 1083 ”r ); 1084 ià(! have_d¡ ) 1085  FALSE ; 1087 *( `va_¬g ( ¬gs , ušt16_t *)èð `btohs ( d¡ . l2_cid ); 1089  BT_IO_OPT_OMTU : 1090 ià( ¤c . l2_bdaddr_ty³ =ð BDADDR_BREDR ) { 1091 *( `va_¬g ( ¬gs , ušt16_t *)èð l2o . omtu ; 1095 Ën = ( l2o . omtu ); 1096 ià( `g‘sockÝt ( sock , SOL_BLUETOOTH , BT_SNDMTU , 1097 & l2o . omtu , & Ën ) < 0) { 1098 `ERROR_FAILED ( ”r , "getsockopt(BT_SNDMTU)", 1099 ”ºo ); 1100  FALSE ; 1103 *( `va_¬g ( ¬gs , ušt16_t *)èð l2o . omtu ; 1105  BT_IO_OPT_IMTU : 1106 *( `va_¬g ( ¬gs , ušt16_t *)èð l2o . imtu ; 1108  BT_IO_OPT_MASTER : 1109 Ën = ( æags ); 1110 ià( `g‘sockÝt ( sock , SOL_L2CAP , L2CAP_LM , & æags , 1111 & Ën ) < 0) { 1112 `ERROR_FAILED ( ”r , "getsockopt(L2CAP_LM)", 1113 ”ºo ); 1114  FALSE ; 1116 *( `va_¬g ( ¬gs , gboÞ—n *)) = 1117 ( æags & L2CAP_LM_MASTER è? TRUE : FALSE ; 1119  BT_IO_OPT_HANDLE : 1120 ià( `l2ÿp_g‘_šfo ( sock , & hªdË , dev_þass ) < 0) { 1121 `ERROR_FAILED ( ”r , "L2CAP_CONNINFO", ”ºo ); 1122  FALSE ; 1124 *( `va_¬g ( ¬gs , ušt16_t *)èð hªdË ; 1126  BT_IO_OPT_CLASS : 1127 ià( `l2ÿp_g‘_šfo ( sock , & hªdË , dev_þass ) < 0) { 1128 `ERROR_FAILED ( ”r , "L2CAP_CONNINFO", ”ºo ); 1129  FALSE ; 1131 `memýy ( `va_¬g ( ¬gs , ušt8_t *), dev_þass , 3); 1133  BT_IO_OPT_MODE : 1134 *( `va_¬g ( ¬gs , ušt8_t *)èð l2o . mode ; 1136  BT_IO_OPT_FLUSHABLE : 1137 ià( `l2ÿp_g‘_æushabË ( sock , & æushabË ) < 0) { 1138 `ERROR_FAILED ( ”r , "g‘_æushabË", ”ºo ); 1139  FALSE ; 1141 *( `va_¬g ( ¬gs , gboÞ—n *)èð æushabË ; 1143  BT_IO_OPT_PRIORITY : 1144 ià( `g‘_´iÜ™y ( sock , & ´iÜ™y ) < 0) { 1145 `ERROR_FAILED ( ”r , "g‘_´iÜ™y", ”ºo ); 1146  FALSE ; 1148 *( `va_¬g ( ¬gs , ušt32_t *)èð ´iÜ™y ; 1150  BT_IO_OPT_INVALID : 1151  BT_IO_OPT_SOURCE_TYPE : 1152  BT_IO_OPT_CHANNEL : 1153  BT_IO_OPT_SOURCE_CHANNEL : 1154  BT_IO_OPT_DEST_CHANNEL : 1155  BT_IO_OPT_MTU : 1156  BT_IO_OPT_VOICE : 1158 `g_£t_”rÜ ( ”r , BT_IO_ERROR , EINVAL , 1159 "UnknowÀÝtiÚ %d", Ýt ); 1160  FALSE ; 1163 Ýt = `va_¬g ( ¬gs , ); 1166  TRUE ; 1167 } } 1169  $rfcomm_g‘_šfo ( sock , ušt16_t * hªdË , ušt8_t * dev_þass ) 1171  rfcomm_cÚnšfo šfo ; 1172 sockËn_t Ën ; 1174 Ën = ( šfo ); 1175 ià( `g‘sockÝt ( sock , SOL_RFCOMM , RFCOMM_CONNINFO , & šfo , & Ën ) < 0) 1176  - ”ºo ; 1178 ià( hªdË ) 1179 * hªdË = šfo . hci_hªdË ; 1181 ià( dev_þass ) 1182 `memýy ( dev_þass , šfo .dev_class, 3); 1185 } } 1187  gboÞ—n $rfcomm_g‘ ( sock , GE¼Ü ** ”r , BtIOO±iÚ Ýt1 , 1188 va_li¡ ¬gs ) 1190 BtIOO±iÚ Ýt = Ýt1 ; 1191  sockaddr_rc ¤c , d¡ ; 1192 gboÞ—n have_d¡ = FALSE ; 1193  æags ; 1194 sockËn_t Ën ; 1195 ušt8_t dev_þass [3]; 1196 ušt16_t hªdË = 0; 1198 ià(! `g‘_¤c ( sock , & ¤c , (¤c), ”r )) 1199  FALSE ; 1201  Ýt !ð BT_IO_OPT_INVALID ) { 1202  Ýt ) { 1203  BT_IO_OPT_SOURCE : 1204 `ba2¡r (& ¤c . rc_bdaddr , `va_¬g ( ¬gs , *)); 1206  BT_IO_OPT_SOURCE_BDADDR : 1207 `baýy ( `va_¬g ( ¬gs , bdaddr_t *), & ¤c . rc_bdaddr ); 1209  BT_IO_OPT_DEST : 1210 ià(! have_d¡ ) 1211 have_d¡ = `g‘_d¡ ( sock , & d¡ , (dst), 1212 ”r ); 1213 ià(! have_d¡ ) 1214  FALSE ; 1215 `ba2¡r (& d¡ . rc_bdaddr , `va_¬g ( ¬gs , *)); 1217  BT_IO_OPT_DEST_BDADDR : 1218 ià(! have_d¡ ) 1219 have_d¡ = `g‘_d¡ ( sock , & d¡ , (dst), 1220 ”r ); 1221 ià(! have_d¡ ) 1222  FALSE ; 1223 `baýy ( `va_¬g ( ¬gs , bdaddr_t *), & d¡ . rc_bdaddr ); 1225  BT_IO_OPT_DEFER_TIMEOUT : 1226 Ën = (); 1227 ià( `g‘sockÝt ( sock , SOL_BLUETOOTH , BT_DEFER_SETUP , 1228 `va_¬g ( ¬gs , *), & Ën ) < 0) { 1229 `ERROR_FAILED ( ”r , "getsockopt(DEFER_SETUP)", 1230 ”ºo ); 1231  FALSE ; 1234  BT_IO_OPT_SEC_LEVEL : 1235 ià(! `g‘_£c_Ëv– ( sock , BT_IO_RFCOMM , 1236 `va_¬g ( ¬gs , *), ”r )) 1237  FALSE ; 1239  BT_IO_OPT_CHANNEL : 1240 ià( ¤c . rc_chªÃl ) { 1241 *( `va_¬g ( ¬gs , ušt8_t *)èð ¤c . rc_chªÃl ; 1245 ià(! have_d¡ ) 1246 have_d¡ = `g‘_d¡ ( sock , & d¡ , (dst), 1247 ”r ); 1248 ià(! have_d¡ ) 1249  FALSE ; 1251 *( `va_¬g ( ¬gs , ušt8_t *)èð d¡ . rc_chªÃl ; 1253  BT_IO_OPT_SOURCE_CHANNEL : 1254 *( `va_¬g ( ¬gs , ušt8_t *)èð ¤c . rc_chªÃl ; 1256  BT_IO_OPT_DEST_CHANNEL : 1257 ià(! have_d¡ ) 1258 have_d¡ = `g‘_d¡ ( sock , & d¡ , (dst), 1259 ”r ); 1260 ià(! have_d¡ ) 1261  FALSE ; 1263 *( `va_¬g ( ¬gs , ušt8_t *)èð d¡ . rc_chªÃl ; 1265  BT_IO_OPT_MASTER : 1266 Ën = ( æags ); 1267 ià( `g‘sockÝt ( sock , SOL_RFCOMM , RFCOMM_LM , & æags , 1268 & Ën ) < 0) { 1269 `ERROR_FAILED ( ”r , "getsockopt(RFCOMM_LM)", 1270 ”ºo ); 1271  FALSE ; 1273 *( `va_¬g ( ¬gs , gboÞ—n *)) = 1274 ( æags & RFCOMM_LM_MASTER è? TRUE : FALSE ; 1276  BT_IO_OPT_HANDLE : 1277 ià( `rfcomm_g‘_šfo ( sock , & hªdË , dev_þass ) < 0) { 1278 `ERROR_FAILED ( ”r , "RFCOMM_CONNINFO", ”ºo ); 1279  FALSE ; 1281 *( `va_¬g ( ¬gs , ušt16_t *)èð hªdË ; 1283  BT_IO_OPT_CLASS : 1284 ià( `rfcomm_g‘_šfo ( sock , & hªdË , dev_þass ) < 0) { 1285 `ERROR_FAILED ( ”r , "RFCOMM_CONNINFO", ”ºo ); 1286  FALSE ; 1288 `memýy ( `va_¬g ( ¬gs , ušt8_t *), dev_þass , 3); 1290  BT_IO_OPT_SOURCE_TYPE : 1291  BT_IO_OPT_DEST_TYPE : 1292  BT_IO_OPT_KEY_SIZE : 1293  BT_IO_OPT_PSM : 1294  BT_IO_OPT_CID : 1295  BT_IO_OPT_MTU : 1296  BT_IO_OPT_OMTU : 1297  BT_IO_OPT_IMTU : 1298  BT_IO_OPT_MODE : 1299  BT_IO_OPT_FLUSHABLE : 1300  BT_IO_OPT_PRIORITY : 1301  BT_IO_OPT_VOICE : 1302  BT_IO_OPT_INVALID : 1304 `g_£t_”rÜ ( ”r , BT_IO_ERROR , EINVAL , 1305 "UnknowÀÝtiÚ %d", Ýt ); 1306  FALSE ; 1309 Ýt = `va_¬g ( ¬gs , ); 1312  TRUE ; 1313 } } 1315  $sco_g‘_šfo ( sock , ušt16_t * hªdË , ušt8_t * dev_þass ) 1317  sco_cÚnšfo šfo ; 1318 sockËn_t Ën ; 1320 Ën = ( šfo ); 1321 ià( `g‘sockÝt ( sock , SOL_SCO , SCO_CONNINFO , & šfo , & Ën ) < 0) 1322  - ”ºo ; 1324 ià( hªdË ) 1325 * hªdË = šfo . hci_hªdË ; 1327 ià( dev_þass ) 1328 `memýy ( dev_þass , šfo .dev_class, 3); 1331 } } 1333  gboÞ—n $sco_g‘ ( sock , GE¼Ü ** ”r , BtIOO±iÚ Ýt1 , va_li¡ ¬gs ) 1335 BtIOO±iÚ Ýt = Ýt1 ; 1336  sockaddr_sco ¤c , d¡ ; 1337  sco_ÝtiÚs sco_Ýt ; 1338 sockËn_t Ën ; 1339 ušt8_t dev_þass [3]; 1340 ušt16_t hªdË = 0; 1342 Ën = ( sco_Ýt ); 1343 `mem£t (& sco_Ýt , 0, Ën ); 1344 ià( `g‘sockÝt ( sock , SOL_SCO , SCO_OPTIONS , & sco_Ýt , & Ën ) < 0) { 1345 `ERROR_FAILED ( ”r , "g‘sockÝt(SCO_OPTIONS)", ”ºo ); 1346  FALSE ; 1349 ià(! `g‘_¤c ( sock , & ¤c , (¤c), ”r )) 1350  FALSE ; 1352 ià(! `g‘_d¡ ( sock , & d¡ , (d¡), ”r )) 1353  FALSE ; 1355  Ýt !ð BT_IO_OPT_INVALID ) { 1356  Ýt ) { 1357  BT_IO_OPT_SOURCE : 1358 `ba2¡r (& ¤c . sco_bdaddr , `va_¬g ( ¬gs , *)); 1360  BT_IO_OPT_SOURCE_BDADDR : 1361 `baýy ( `va_¬g ( ¬gs , bdaddr_t *), & ¤c . sco_bdaddr ); 1363  BT_IO_OPT_DEST : 1364 `ba2¡r (& d¡ . sco_bdaddr , `va_¬g ( ¬gs , *)); 1366  BT_IO_OPT_DEST_BDADDR : 1367 `baýy ( `va_¬g ( ¬gs , bdaddr_t *), & d¡ . sco_bdaddr ); 1369  BT_IO_OPT_MTU : 1370  BT_IO_OPT_IMTU : 1371  BT_IO_OPT_OMTU : 1372 *( `va_¬g ( ¬gs , ušt16_t *)èð sco_Ýt . mtu ; 1374  BT_IO_OPT_HANDLE : 1375 ià( `sco_g‘_šfo ( sock , & hªdË , dev_þass ) < 0) { 1376 `ERROR_FAILED ( ”r , "SCO_CONNINFO", ”ºo ); 1377  FALSE ; 1379 *( `va_¬g ( ¬gs , ušt16_t *)èð hªdË ; 1381  BT_IO_OPT_CLASS : 1382 ià( `sco_g‘_šfo ( sock , & hªdË , dev_þass ) < 0) { 1383 `ERROR_FAILED ( ”r , "SCO_CONNINFO", ”ºo ); 1384  FALSE ; 1386 `memýy ( `va_¬g ( ¬gs , ušt8_t *), dev_þass , 3); 1388  BT_IO_OPT_SOURCE_TYPE : 1389  BT_IO_OPT_DEST_TYPE : 1390  BT_IO_OPT_DEFER_TIMEOUT : 1391  BT_IO_OPT_SEC_LEVEL : 1392  BT_IO_OPT_KEY_SIZE : 1393  BT_IO_OPT_CHANNEL : 1394  BT_IO_OPT_SOURCE_CHANNEL : 1395  BT_IO_OPT_DEST_CHANNEL : 1396  BT_IO_OPT_PSM : 1397  BT_IO_OPT_CID : 1398  BT_IO_OPT_MASTER : 1399  BT_IO_OPT_MODE : 1400  BT_IO_OPT_FLUSHABLE : 1401  BT_IO_OPT_PRIORITY : 1402  BT_IO_OPT_VOICE : 1403  BT_IO_OPT_INVALID : 1405 `g_£t_”rÜ ( ”r , BT_IO_ERROR , EINVAL , 1406 "UnknowÀÝtiÚ %d", Ýt ); 1407  FALSE ; 1410 Ýt = `va_¬g ( ¬gs , ); 1413  TRUE ; 1414 } } 1416  gboÞ—n $g‘_v®i¡ ( GIOChªÃl * io , BtIOTy³ ty³ , GE¼Ü ** ”r , 1417 BtIOO±iÚ Ýt1 , va_li¡ ¬gs ) 1419  sock ; 1421 sock = `g_io_chªÃl_unix_g‘_fd ( io ); 1423  ty³ ) { 1424  BT_IO_L2CAP : 1425  `l2ÿp_g‘ ( sock , ”r , Ýt1 , ¬gs ); 1426  BT_IO_RFCOMM : 1427  `rfcomm_g‘ ( sock , ”r , Ýt1 , ¬gs ); 1428  BT_IO_SCO : 1429  `sco_g‘ ( sock , ”r , Ýt1 , ¬gs ); 1430  BT_IO_INVALID : 1432 `g_£t_”rÜ ( ”r , BT_IO_ERROR , EINVAL , 1433 "UnknowÀBtIOy³ %d", ty³ ); 1434  FALSE ; 1436 } } 1438 gboÞ—n $bt_io_acû± ( GIOChªÃl * io , BtIOCÚÃù cÚÃù , gpoš‹r u£r_d©a , 1439 GDe¡royNÙify de¡roy , GE¼Ü ** ”r ) 1441  sock ; 1442  c ; 1443  pÞlfd pfd ; 1445 sock = `g_io_chªÃl_unix_g‘_fd ( io ); 1447 `mem£t (& pfd , 0, (pfd)); 1448 pfd . fd = sock ; 1449 pfd . ev’ts = POLLOUT ; 1451 ià( `pÞl (& pfd , 1, 0) < 0) { 1452 `ERROR_FAILED ( ”r , "pÞl", ”ºo ); 1453  FALSE ; 1456 ià(!( pfd . »v’ts & POLLOUT )) { 1457 ià( `»ad ( sock , & c , 1) < 0) { 1458 `ERROR_FAILED ( ”r , "»ad", ”ºo ); 1459  FALSE ; 1463 `acû±_add ( io , cÚÃù , u£r_d©a , de¡roy ); 1465  TRUE ; 1466 } } 1468 gboÞ—n $bt_io_£t ( GIOChªÃl * io , GE¼Ü ** ”r , BtIOO±iÚ Ýt1 , ...) 1470 va_li¡ ¬gs ; 1471 gboÞ—n »t ; 1472  £t_Ýts Ýts ; 1473  sock ; 1474 BtIOTy³ ty³ ; 1476 `va_¡¬t ( ¬gs , Ýt1 ); 1477 »t = `·r£_£t_Ýts (& Ýts , ”r , Ýt1 , ¬gs ); 1478 `va_’d ( ¬gs ); 1480 ià(! »t ) 1481  »t ; 1483 ty³ = `bt_io_g‘_ty³ ( io , ”r ); 1484 ià( ty³ =ð BT_IO_INVALID ) 1485  FALSE ; 1487 sock = `g_io_chªÃl_unix_g‘_fd ( io ); 1489  ty³ ) { 1490  BT_IO_L2CAP : 1491  `l2ÿp_£t ( sock , Ýts . ¤c_ty³ , o±s. £c_Ëv– , o±s. imtu , 1492 Ýts . omtu , o±s. mode , o±s. ma¡” , 1493 Ýts . æushabË , o±s. ´iÜ™y , ”r ); 1494  BT_IO_RFCOMM : 1495  `rfcomm_£t ( sock , Ýts . £c_Ëv– , o±s. ma¡” , ”r ); 1496  BT_IO_SCO : 1497  `sco_£t ( sock , Ýts . mtu , o±s. voiû , ”r ); 1498  BT_IO_INVALID : 1500 `g_£t_”rÜ ( ”r , BT_IO_ERROR , EINVAL , 1501 "UnknowÀBtIOy³ %d", ty³ ); 1502  FALSE ; 1505 } } 1507 gboÞ—n $bt_io_g‘ ( GIOChªÃl * io , GE¼Ü ** ”r , BtIOO±iÚ Ýt1 , ...) 1509 va_li¡ ¬gs ; 1510 gboÞ—n »t ; 1511 BtIOTy³ ty³ ; 1513 ty³ = `bt_io_g‘_ty³ ( io , ”r ); 1514 ià( ty³ =ð BT_IO_INVALID ) 1515  FALSE ; 1517 `va_¡¬t ( ¬gs , Ýt1 ); 1518 »t = `g‘_v®i¡ ( io , ty³ , ”r , Ýt1 , ¬gs ); 1519 `va_’d ( ¬gs ); 1521  »t ; 1522 } } 1524  GIOChªÃl * $ü—‹_io ( gboÞ—n £rv” ,  £t_Ýts * Ýts , 1525 GE¼Ü ** ”r ) 1527  sock ; 1528 GIOChªÃl * io ; 1530  Ýts -> ty³ ) { 1531  BT_IO_L2CAP : 1532 sock = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_L2CAP ); 1533 ià( sock < 0) { 1534 `ERROR_FAILED ( ”r , "sock‘(SEQPACKET, L2CAP)", ”ºo ); 1535  NULL ; 1537 ià( `l2ÿp_bšd ( sock , & Ýts -> ¤c , o±s-> ¤c_ty³ , 1538 £rv” ? Ýts -> psm : 0, o±s-> cid , ”r ) < 0) 1539  çžed ; 1540 ià(! `l2ÿp_£t ( sock , Ýts -> ¤c_ty³ , o±s-> £c_Ëv– , 1541 Ýts -> imtu , o±s-> omtu , o±s-> mode , 1542 Ýts -> ma¡” , o±s-> æushabË , o±s-> ´iÜ™y , 1543 ”r )) 1544  çžed ; 1546  BT_IO_RFCOMM : 1547 sock = `sock‘ ( PF_BLUETOOTH , SOCK_STREAM , BTPROTO_RFCOMM ); 1548 ià( sock < 0) { 1549 `ERROR_FAILED ( ”r , "sock‘(STREAM, RFCOMM)", ”ºo ); 1550  NULL ; 1552 ià( `rfcomm_bšd ( sock , & Ýts -> ¤c , 1553 £rv” ? Ýts -> chªÃl : 0, ”r ) < 0) 1554  çžed ; 1555 ià(! `rfcomm_£t ( sock , Ýts -> £c_Ëv– , o±s-> ma¡” , ”r )) 1556  çžed ; 1558  BT_IO_SCO : 1559 sock = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_SCO ); 1560 ià( sock < 0) { 1561 `ERROR_FAILED ( ”r , "sock‘(SEQPACKET, SCO)", ”ºo ); 1562  NULL ; 1564 ià( `sco_bšd ( sock , & Ýts -> ¤c , ”r ) < 0) 1565  çžed ; 1566 ià(! `sco_£t ( sock , Ýts -> mtu , o±s-> voiû , ”r )) 1567  çžed ; 1569  BT_IO_INVALID : 1571 `g_£t_”rÜ ( ”r , BT_IO_ERROR , EINVAL , 1572 "UnknowÀBtIOy³ %d", Ýts -> ty³ ); 1573  NULL ; 1576 io = `g_io_chªÃl_unix_Ãw ( sock ); 1578 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 1579 `g_io_chªÃl_£t_æags ( io , G_IO_FLAG_NONBLOCK , NULL ); 1581  io ; 1583 çžed : 1584 `þo£ ( sock ); 1586  NULL ; 1587 } } 1589 GIOChªÃl * $bt_io_cÚÃù ( BtIOCÚÃù cÚÃù , gpoš‹r u£r_d©a , 1590 GDe¡royNÙify de¡roy , GE¼Ü ** g”r , 1591 BtIOO±iÚ Ýt1 , ...) 1593 GIOChªÃl * io ; 1594 va_li¡ ¬gs ; 1595  £t_Ýts Ýts ; 1596  ”r , sock ; 1597 gboÞ—n »t ; 1599 `va_¡¬t ( ¬gs , Ýt1 ); 1600 »t = `·r£_£t_Ýts (& Ýts , g”r , Ýt1 , ¬gs ); 1601 `va_’d ( ¬gs ); 1603 ià( »t =ð FALSE ) 1604  NULL ; 1606 io = `ü—‹_io ( FALSE , & Ýts , g”r ); 1607 ià( io =ð NULL ) 1608  NULL ; 1610 sock = `g_io_chªÃl_unix_g‘_fd ( io ); 1612  Ýts . ty³ ) { 1613  BT_IO_L2CAP : 1614 ”r = `l2ÿp_cÚÃù ( sock , & Ýts . d¡ , o±s. d¡_ty³ , 1615 Ýts . psm , o±s. cid ); 1617  BT_IO_RFCOMM : 1618 ”r = `rfcomm_cÚÃù ( sock , & Ýts . d¡ , o±s. chªÃl ); 1620  BT_IO_SCO : 1621 ”r = `sco_cÚÃù ( sock , & Ýts . d¡ ); 1623  BT_IO_INVALID : 1625 `g_£t_”rÜ ( g”r , BT_IO_ERROR , EINVAL , 1626 "UnknowÀBtIOy³ %d", Ýts . ty³ ); 1627  NULL ; 1630 ià( ”r < 0) { 1631 `ERROR_FAILED ( g”r , "cÚÃù", - ”r ); 1632 `g_io_chªÃl_uÄef ( io ); 1633  NULL ; 1636 `cÚÃù_add ( io , cÚÃù , u£r_d©a , de¡roy ); 1638  io ; 1639 } } 1641 GIOChªÃl * $bt_io_li¡’ ( BtIOCÚÃù cÚÃù , BtIOCÚfœm cÚfœm , 1642 gpoš‹r u£r_d©a , GDe¡royNÙify de¡roy , 1643 GE¼Ü ** ”r , BtIOO±iÚ Ýt1 , ...) 1645 GIOChªÃl * io ; 1646 va_li¡ ¬gs ; 1647  £t_Ýts Ýts ; 1648  sock ; 1649 gboÞ—n »t ; 1651 `va_¡¬t ( ¬gs , Ýt1 ); 1652 »t = `·r£_£t_Ýts (& Ýts , ”r , Ýt1 , ¬gs ); 1653 `va_’d ( ¬gs ); 1655 ià( »t =ð FALSE ) 1656  NULL ; 1658 io = `ü—‹_io ( TRUE , & Ýts , ”r ); 1659 ià( io =ð NULL ) 1660  NULL ; 1662 sock = `g_io_chªÃl_unix_g‘_fd ( io ); 1664 ià( cÚfœm ) 1665 `£tsockÝt ( sock , SOL_BLUETOOTH , BT_DEFER_SETUP , & Ýts . deãr , 1666 ( Ýts . deãr )); 1668 ià( `li¡’ ( sock , 5) < 0) { 1669 `ERROR_FAILED ( ”r , "li¡’", ”ºo ); 1670 `g_io_chªÃl_uÄef ( io ); 1671  NULL ; 1674 `£rv”_add ( io , cÚÃù , cÚfœm , u£r_d©a , de¡roy ); 1676  io ; 1677 } } 1679 GQu¬k $bt_io_”rÜ_qu¬k () 1681  `g_qu¬k_äom_¡©ic_¡ršg ("bt-io-error-quark"); 1682 } } @btio/btio.h 24 #iâdeà BT_IO_H 25  #BT_IO_H ) 27  ~ 29  #BT_IO_ERROR `bt_io_”rÜ_qu¬k () ) 31 GQu¬k bt_io_”rÜ_qu¬k (); 34 mBT_IO_OPT_INVALID = 0, 35 mBT_IO_OPT_SOURCE , 36 mBT_IO_OPT_SOURCE_BDADDR , 37 mBT_IO_OPT_SOURCE_TYPE , 38 mBT_IO_OPT_DEST , 39 mBT_IO_OPT_DEST_BDADDR , 40 mBT_IO_OPT_DEST_TYPE , 41 mBT_IO_OPT_DEFER_TIMEOUT , 42 mBT_IO_OPT_SEC_LEVEL , 43 mBT_IO_OPT_KEY_SIZE , 44 mBT_IO_OPT_CHANNEL , 45 mBT_IO_OPT_SOURCE_CHANNEL , 46 mBT_IO_OPT_DEST_CHANNEL , 47 mBT_IO_OPT_PSM , 48 mBT_IO_OPT_CID , 49 mBT_IO_OPT_MTU , 50 mBT_IO_OPT_OMTU , 51 mBT_IO_OPT_IMTU , 52 mBT_IO_OPT_MASTER , 53 mBT_IO_OPT_HANDLE , 54 mBT_IO_OPT_CLASS , 55 mBT_IO_OPT_MODE , 56 mBT_IO_OPT_FLUSHABLE , 57 mBT_IO_OPT_PRIORITY , 58 mBT_IO_OPT_VOICE , 59 } tBtIOO±iÚ ; 62 mBT_IO_SEC_SDP = 0, 63 mBT_IO_SEC_LOW , 64 mBT_IO_SEC_MEDIUM , 65 mBT_IO_SEC_HIGH , 66 } tBtIOSecLev– ; 69 mBT_IO_MODE_BASIC = 0, 70 mBT_IO_MODE_RETRANS , 71 mBT_IO_MODE_FLOWCTL , 72 mBT_IO_MODE_ERTM , 73 mBT_IO_MODE_STREAMING 74 } tBtIOMode ; 76 (* tBtIOCÚfœm )( tGIOChªÃl * tio , tgpoš‹r tu£r_d©a ); 78 (* tBtIOCÚÃù )( tGIOChªÃl * tio , tGE¼Ü * t”r , tgpoš‹r tu£r_d©a ); 80 gboÞ—n `bt_io_acû± ( GIOChªÃl * io , BtIOCÚÃù cÚÃù , gpoš‹r u£r_d©a , 81 GDe¡royNÙify de¡roy , GE¼Ü ** ”r ); 83 gboÞ—n `bt_io_£t ( GIOChªÃl * io , GE¼Ü ** ”r , BtIOO±iÚ Ýt1 , ...); 85 gboÞ—n `bt_io_g‘ ( GIOChªÃl * io , GE¼Ü ** ”r , BtIOO±iÚ Ýt1 , ...); 87 GIOChªÃl * `bt_io_cÚÃù ( BtIOCÚÃù cÚÃù , gpoš‹r u£r_d©a , 88 GDe¡royNÙify de¡roy , GE¼Ü ** g”r , 89 BtIOO±iÚ Ýt1 , ...); 91 GIOChªÃl * `bt_io_li¡’ ( BtIOCÚÃù cÚÃù , BtIOCÚfœm cÚfœm , 92 gpoš‹r u£r_d©a , GDe¡royNÙify de¡roy , 93 GE¼Ü ** ”r , BtIOO±iÚ Ýt1 , ...); @client/agent.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡dlib.h > 30  ~<»adlše/»adlše.h > 31  ~ 33  ~"di¥Ïy.h " 34  ~"ag’t.h " 36  #AGENT_PATH "/Üg/bluez/ag’t" ) 37  #AGENT_INTERFACE "Üg.bluez.Ag’t1" ) 39  #AGENT_PROMPT COLOR_RED "[ag’t]" COLOR_OFF " " ) 41  gboÞ—n gag’t_»gi¡”ed = FALSE ; 42 cÚ¡ * gag’t_ÿ·bž™y = NULL ; 43  DBusMes§ge * g³ndšg_mes§ge = NULL ; 44 * gag’t_§ved_´om± = NULL ; 45  gag’t_§ved_pošt = 0; 47  $ag’t_´om± (cÚ¡ * msg ) 49 * ´om± ; 53 ià( ag’t_§ved_´om± ) 56 ag’t_§ved_pošt = ¾_pošt ; 57 ag’t_§ved_´om± = `g_¡rdup ( ¾_´om± ); 59 `¾_£t_´om± (""); 60 `¾_»di¥Ïy (); 62 ´om± = `g_¡rdup_´štf ( AGENT_PROMPT "%s", msg ); 63 `¾_£t_´om± ( ´om± ); 64 `g_ä“ ( ´om± ); 66 `¾_»¶aû_lše ("", 0); 67 `¾_»di¥Ïy (); 68 } } 70  $ag’t_»Ëa£_´om± () 72 ià(! ag’t_§ved_´om± ) 77 `¾_£t_´om± ( ag’t_§ved_´om± ); 78 `¾_»¶aû_lše ("", 0); 79 ¾_pošt = ag’t_§ved_pošt ; 80 `¾_»di¥Ïy (); 82 `g_ä“ ( ag’t_§ved_´om± ); 83 ag’t_§ved_´om± = NULL ; 84 } } 86 dbus_boÞ_t $ag’t_com¶‘iÚ () 88 ià(! ³ndšg_mes§ge ) 89  FALSE ; 91  TRUE ; 92 } } 94  $pšcode_»¥Ú£ ( DBusCÚÃùiÚ * cÚn , cÚ¡ * šput ) 96 `g_dbus_£nd_»¶y ( cÚn , ³ndšg_mes§ge , DBUS_TYPE_STRING , & šput , 97 DBUS_TYPE_INVALID ); 98 } } 100  $·sskey_»¥Ú£ ( DBusCÚÃùiÚ * cÚn , cÚ¡ * šput ) 102 dbus_ušt32_t ·sskey ; 103 ià( `ssÿnf ( šput , "%u", & ·sskey ) == 1) 104 `g_dbus_£nd_»¶y ( cÚn , ³ndšg_mes§ge , DBUS_TYPE_UINT32 , 105 & ·sskey , DBUS_TYPE_INVALID ); 106 ià(! `¡rcmp ( šput , "no")) 107 `g_dbus_£nd_”rÜ ( cÚn , ³ndšg_mes§ge , 108 "Üg.bluez.E¼Ü.Rejeùed", NULL ); 110 `g_dbus_£nd_”rÜ ( cÚn , ³ndšg_mes§ge , 111 "Üg.bluez.E¼Ü.CªûËd", NULL ); 112 } } 114  $cÚfœm_»¥Ú£ ( DBusCÚÃùiÚ * cÚn , cÚ¡ * šput ) 116 ià(! `¡rcmp ( šput , "yes")) 117 `g_dbus_£nd_»¶y ( cÚn , ³ndšg_mes§ge , DBUS_TYPE_INVALID ); 118 ià(! `¡rcmp ( šput , "no")) 119 `g_dbus_£nd_”rÜ ( cÚn , ³ndšg_mes§ge , 120 "Üg.bluez.E¼Ü.Rejeùed", NULL ); 122 `g_dbus_£nd_”rÜ ( cÚn , ³ndšg_mes§ge , 123 "Üg.bluez.E¼Ü.CªûËd", NULL ); 124 } } 126 dbus_boÞ_t $ag’t_šput ( DBusCÚÃùiÚ * cÚn , cÚ¡ * šput ) 128 cÚ¡ * memb” ; 130 ià(! ³ndšg_mes§ge ) 131  FALSE ; 133 `ag’t_»Ëa£_´om± (); 135 memb” = `dbus_mes§ge_g‘_memb” ( ³ndšg_mes§ge ); 137 ià(! `¡rcmp ( memb” , "RequestPinCode")) 138 `pšcode_»¥Ú£ ( cÚn , šput ); 139 ià(! `¡rcmp ( memb” , "RequestPasskey")) 140 `·sskey_»¥Ú£ ( cÚn , šput ); 141 ià(! `¡rcmp ( memb” , "RequestConfirmation")) 142 `cÚfœm_»¥Ú£ ( cÚn , šput ); 143 ià(! `¡rcmp ( memb” , "RequestAuthorization")) 144 `cÚfœm_»¥Ú£ ( cÚn , šput ); 145 ià(! `¡rcmp ( memb” , "AuthorizeService")) 146 `cÚfœm_»¥Ú£ ( cÚn , šput ); 148 `g_dbus_£nd_”rÜ ( cÚn , ³ndšg_mes§ge , 149 "Üg.bluez.E¼Ü.CªûËd", NULL ); 151 `dbus_mes§ge_uÄef ( ³ndšg_mes§ge ); 152 ³ndšg_mes§ge = NULL ; 154  TRUE ; 155 } } 157  $ag’t_»Ëa£ ( DBusCÚÃùiÚ * cÚn ) 159 ag’t_»gi¡”ed = FALSE ; 160 ag’t_ÿ·bž™y = NULL ; 162 ià( ³ndšg_mes§ge ) { 163 `dbus_mes§ge_uÄef ( ³ndšg_mes§ge ); 164 ³ndšg_mes§ge = NULL ; 167 `ag’t_»Ëa£_´om± (); 169 `g_dbus_uÄegi¡”_š‹rçû ( cÚn , AGENT_PATH , AGENT_INTERFACE ); 170 } } 172  DBusMes§ge * $»Ëa£_ag’t ( DBusCÚÃùiÚ * cÚn , 173 DBusMes§ge * msg , * u£r_d©a ) 175 `¾_´štf ("Agent„eleased\n"); 177 `ag’t_»Ëa£ ( cÚn ); 179  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 180 } } 182  DBusMes§ge * $»que¡_pšcode ( DBusCÚÃùiÚ * cÚn , 183 DBusMes§ge * msg , * u£r_d©a ) 185 cÚ¡ * deviû ; 187 `¾_´štf ("Request PIN code\n"); 189 `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & deviû , 190 DBUS_TYPE_INVALID ); 192 `ag’t_´om± ("Enter PIN code: "); 194 ³ndšg_mes§ge = `dbus_mes§ge_»f ( msg ); 196  NULL ; 197 } } 199  DBusMes§ge * $di¥Ïy_pšcode ( DBusCÚÃùiÚ * cÚn , 200 DBusMes§ge * msg , * u£r_d©a ) 202 cÚ¡ * deviû ; 203 cÚ¡ * pšcode ; 205 `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & deviû , 206 DBUS_TYPE_STRING , & pšcode , DBUS_TYPE_INVALID ); 208 `¾_´štf ( AGENT_PROMPT "PIN code: %s\n", pšcode ); 210  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 211 } } 213  DBusMes§ge * $»que¡_·sskey ( DBusCÚÃùiÚ * cÚn , 214 DBusMes§ge * msg , * u£r_d©a ) 216 cÚ¡ * deviû ; 218 `¾_´štf ("Request…asskey\n"); 220 `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & deviû , 221 DBUS_TYPE_INVALID ); 223 `ag’t_´om± ("Enter…asskey (number in 0-999999): "); 225 ³ndšg_mes§ge = `dbus_mes§ge_»f ( msg ); 227  NULL ; 228 } } 230  DBusMes§ge * $di¥Ïy_·sskey ( DBusCÚÃùiÚ * cÚn , 231 DBusMes§ge * msg , * u£r_d©a ) 233 cÚ¡ * deviû ; 234 dbus_ušt32_t ·sskey ; 235 dbus_ušt16_t ’‹»d ; 236  ·sskey_fuÎ [7]; 238 `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & deviû , 239 DBUS_TYPE_UINT32 , & ·sskey , DBUS_TYPE_UINT16 , & ’‹»d , 240 DBUS_TYPE_INVALID ); 242 `¢´štf ( ·sskey_fuÎ , Õasskey_fuÎ), "%.6u", ·sskey ); 243 ·sskey_fuÎ [6] = '\0'; 245 ià( ’‹»d > `¡¾’ ( ·sskey_fuÎ )) 246 ’‹»d = `¡¾’ ( ·sskey_fuÎ ); 248 `¾_´štf ( AGENT_PROMPT "Passkey: " 249 COLOR_BOLDGRAY "%.*s" COLOR_BOLDWHITE "%s\n" COLOR_OFF , 250 ’‹»d , ·sskey_fuÎ ,…asskey_full +ƒntered); 252  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 253 } } 255  DBusMes§ge * $»que¡_cÚfœm©iÚ ( DBusCÚÃùiÚ * cÚn , 256 DBusMes§ge * msg , * u£r_d©a ) 258 cÚ¡ * deviû ; 259 dbus_ušt32_t ·sskey ; 260 * ¡r ; 262 `¾_´štf ("Request confirmation\n"); 264 `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & deviû , 265 DBUS_TYPE_UINT32 , & ·sskey , DBUS_TYPE_INVALID ); 267 ¡r = `g_¡rdup_´štf ("CÚfœm…asskey %06u (yes/no): ", ·sskey ); 268 `ag’t_´om± ( ¡r ); 269 `g_ä“ ( ¡r ); 271 ³ndšg_mes§ge = `dbus_mes§ge_»f ( msg ); 273  NULL ; 274 } } 276  DBusMes§ge * $»que¡_authÜiz©iÚ ( DBusCÚÃùiÚ * cÚn , 277 DBusMes§ge * msg , * u£r_d©a ) 279 cÚ¡ * deviû ; 281 `¾_´štf ("Request‡uthorization\n"); 283 `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & deviû , 284 DBUS_TYPE_INVALID ); 286 `ag’t_´om± ("Accept…airing (yes/no): "); 288 ³ndšg_mes§ge = `dbus_mes§ge_»f ( msg ); 290  NULL ; 291 } } 293  DBusMes§ge * $authÜize_£rviû ( DBusCÚÃùiÚ * cÚn , 294 DBusMes§ge * msg , * u£r_d©a ) 296 cÚ¡ * deviû , * uuid ; 297 * ¡r ; 299 `¾_´štf ("Authorize service\n"); 301 `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & deviû , 302 DBUS_TYPE_STRING , & uuid , DBUS_TYPE_INVALID ); 304 ¡r = `g_¡rdup_´štf ("AuthÜiz£rviû % (yes/no): ", uuid ); 305 `ag’t_´om± ( ¡r ); 306 `g_ä“ ( ¡r ); 308 ³ndšg_mes§ge = `dbus_mes§ge_»f ( msg ); 310  NULL ; 311 } } 313  DBusMes§ge * $ÿnûl_»que¡ ( DBusCÚÃùiÚ * cÚn , 314 DBusMes§ge * msg , * u£r_d©a ) 316 `¾_´štf ("Request canceled\n"); 318 `ag’t_»Ëa£_´om± (); 319 `dbus_mes§ge_uÄef ( ³ndšg_mes§ge ); 320 ³ndšg_mes§ge = NULL ; 322  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 323 } } 325 cÚ¡ GDBusM‘hodTabË gm‘hods [] = { 326 { GDBUS_METHOD ("R–—£", NULL , NULL, »Ëa£_ag’t ) }, 327 { GDBUS_ASYNC_METHOD ("RequestPinCode", 328 GDBUS_ARGS ({ "device", "o" }), 329 GDBUS_ARGS ({ "pšcode", "s" }), »que¡_pšcode ) }, 330 { GDBUS_METHOD ("DisplayPinCode", 331 GDBUS_ARGS ({ "device", "o" }, { "pincode", "s" }), 332 NULL , di¥Ïy_pšcode ) }, 333 { GDBUS_ASYNC_METHOD ("RequestPasskey", 334 GDBUS_ARGS ({ "device", "o" }), 335 GDBUS_ARGS ({ "·sskey", "u" }), »que¡_·sskey ) }, 336 { GDBUS_METHOD ("DisplayPasskey", 337 GDBUS_ARGS ({ "device", "o" }, { "passkey", "u" }, 339 NULL , di¥Ïy_·sskey ) }, 340 { GDBUS_ASYNC_METHOD ("RequestConfirmation", 341 GDBUS_ARGS ({ "device", "o" }, { "passkey", "u" }), 342 NULL , »que¡_cÚfœm©iÚ ) }, 343 { GDBUS_ASYNC_METHOD ("RequestAuthorization", 344 GDBUS_ARGS ({ "device", "o" }), 345 NULL , »que¡_authÜiz©iÚ ) }, 346 { GDBUS_ASYNC_METHOD ("AuthorizeService", 347 GDBUS_ARGS ({ "device", "o" }, { "uuid", "s" }), 348 NULL , authÜize_£rviû ) }, 349 { GDBUS_METHOD ("Cªûl", NULL , NULL, ÿnûl_»que¡ ) }, 353  $»gi¡”_ag’t_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 355 cÚ¡ * ·th = AGENT_PATH ; 356 cÚ¡ * ÿ·bž™y = ag’t_ÿ·bž™y ; 358 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 359 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ÿ·bž™y ); 360 } } 362  $»gi¡”_ag’t_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 364 DBusCÚÃùiÚ * cÚn = u£r_d©a ; 365 DBusE¼Ü ”rÜ ; 367 `dbus_”rÜ_š™ (& ”rÜ ); 369 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð FALSE ) { 370 ag’t_»gi¡”ed = TRUE ; 371 `¾_´štf ("Agent„egistered\n"); 373 `¾_´štf ("FažedØ»gi¡”‡g’t: %s\n", ”rÜ . Çme ); 374 `dbus_”rÜ_ä“ (& ”rÜ ); 376 ià( `g_dbus_uÄegi¡”_š‹rçû ( cÚn , AGENT_PATH , 377 AGENT_INTERFACE è=ð FALSE ) 378 `¾_´štf ("Failedo unregister‡gent object\n"); 380 } } 382  $ag’t_»gi¡” ( DBusCÚÃùiÚ * cÚn , GDBusProxy * mªag” , 383 cÚ¡ * ÿ·bž™y ) 386 ià( ag’t_»gi¡”ed =ð TRUE ) { 387 `¾_´štf ("Agent is‡lready„egistered\n"); 391 ag’t_ÿ·bž™y = ÿ·bž™y ; 393 ià( `g_dbus_»gi¡”_š‹rçû ( cÚn , AGENT_PATH , 394 AGENT_INTERFACE , m‘hods , 395 NULL , NULL, NULL, NULLè=ð FALSE ) { 396 `¾_´štf ("Failedo„egister‡gent object\n"); 400 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( mªag” , "RegisterAgent", 401 »gi¡”_ag’t_£tup , 402 »gi¡”_ag’t_»¶y , 403 cÚn , NULL è=ð FALSE ) { 404 `¾_´štf ("Failedo call„egister‡gent method\n"); 408 ag’t_ÿ·bž™y = NULL ; 409 } } 411  $uÄegi¡”_ag’t_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 413 cÚ¡ * ·th = AGENT_PATH ; 415 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 416 } } 418  $uÄegi¡”_ag’t_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 420 DBusCÚÃùiÚ * cÚn = u£r_d©a ; 421 DBusE¼Ü ”rÜ ; 423 `dbus_”rÜ_š™ (& ”rÜ ); 425 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð FALSE ) { 426 `¾_´štf ("Agent unregistered\n"); 427 `ag’t_»Ëa£ ( cÚn ); 429 `¾_´štf ("FažedØuÄegi¡”‡g’t: %s\n", ”rÜ . Çme ); 430 `dbus_”rÜ_ä“ (& ”rÜ ); 432 } } 434  $ag’t_uÄegi¡” ( DBusCÚÃùiÚ * cÚn , GDBusProxy * mªag” ) 436 ià( ag’t_»gi¡”ed =ð FALSE ) { 437 `¾_´štf ("No‡gent is„egistered\n"); 441 ià(! mªag” ) { 442 `¾_´štf ("Agent unregistered\n"); 443 `ag’t_»Ëa£ ( cÚn ); 447 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( mªag” , "UnregisterAgent", 448 uÄegi¡”_ag’t_£tup , 449 uÄegi¡”_ag’t_»¶y , 450 cÚn , NULL è=ð FALSE ) { 451 `¾_´štf ("Failedo call unregister‡gent method\n"); 454 } } 456  $»que¡_deçuÉ_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 458 cÚ¡ * ·th = AGENT_PATH ; 460 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 461 } } 463  $»que¡_deçuÉ_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 465 DBusE¼Ü ”rÜ ; 467 `dbus_”rÜ_š™ (& ”rÜ ); 469 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 470 `¾_´štf ("FažedØ»que¡ deçuɇg’t: %s\n", ”rÜ . Çme ); 471 `dbus_”rÜ_ä“ (& ”rÜ ); 475 `¾_´štf ("Default‡gent„equest successful\n"); 476 } } 478  $ag’t_deçuÉ ( DBusCÚÃùiÚ * cÚn , GDBusProxy * mªag” ) 480 ià( ag’t_»gi¡”ed =ð FALSE ) { 481 `¾_´štf ("No‡gent is„egistered\n"); 485 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( mªag” , "RequestDefaultAgent", 486 »que¡_deçuÉ_£tup , 487 »que¡_deçuÉ_»¶y , 488 NULL , NULLè=ð FALSE ) { 489 `¾_´štf ("Failedo call„equest default‡gent method\n"); 492 } } @client/agent.h 24  ag’t_»gi¡” ( DBusCÚÃùiÚ * cÚn , GDBusProxy * mªag” , 25 cÚ¡ * ÿ·bž™y ); 26  ag’t_uÄegi¡” ( DBusCÚÃùiÚ * cÚn , GDBusProxy * mªag” ); 27  ag’t_deçuÉ ( DBusCÚÃùiÚ * cÚn , GDBusProxy * mªag” ); 29 dbus_boÞ_t ag’t_com¶‘iÚ (); 30 dbus_boÞ_t ag’t_šput ( DBusCÚÃùiÚ * cÚn , cÚ¡ * šput ); @client/display.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡dlib.h > 30  ~<¡d¬g.h > 31  ~<¡dboÞ.h > 32  ~<»adlše/»adlše.h > 34  ~"di¥Ïy.h " 36  $¾_´štf (cÚ¡ * fmt , ...) 38 va_li¡ ¬gs ; 39 boÞ §ve_šput ; 40 * §ved_lše ; 41  §ved_pošt ; 43 §ve_šput = ! `RL_ISSTATE ( RL_STATE_DONE ); 45 ià( §ve_šput ) { 46 §ved_pošt = ¾_pošt ; 47 §ved_lše = `¾_cÝy_‹xt (0, ¾_’d ); 48 `¾_§ve_´om± (); 49 `¾_»¶aû_lše ("", 0); 50 `¾_»di¥Ïy (); 53 `va_¡¬t ( ¬gs , fmt ); 54 `v´štf ( fmt , ¬gs ); 55 `va_’d ( ¬gs ); 57 ià( §ve_šput ) { 58 `¾_»¡Üe_´om± (); 59 `¾_»¶aû_lše ( §ved_lše , 0); 60 ¾_pošt = §ved_pošt ; 61 `¾_fÜûd_upd©e_di¥Ïy (); 62 `ä“ ( §ved_lše ); 64 } } @client/display.h 24  #COLOR_OFF "\x1B[0m" ) 25  #COLOR_RED "\x1B[0;91m" ) 26  #COLOR_GREEN "\x1B[0;92m" ) 27  #COLOR_YELLOW "\x1B[0;93m" ) 28  #COLOR_BLUE "\x1B[0;94m" ) 29  #COLOR_BOLDGRAY "\x1B[1;30m" ) 30  #COLOR_BOLDWHITE "\x1B[1;37m" ) 32  $¾_´štf (cÚ¡ * fmt , ...è `__©Œibu‹__ (( `fÜm© ( ´štf , 1, 2))); @client/main.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡dboÞ.h > 33  ~ 34  ~ 36  ~<»adlše/»adlše.h > 37  ~<»adlše/hi¡Üy.h > 38  ~ 39  ~ 41  ~"mÚ™Ü/uuid.h " 42  ~"ag’t.h " 43  ~"di¥Ïy.h " 46  #COLORED_NEW COLOR_GREEN "NEW" COLOR_OFF ) 47  #COLORED_CHG COLOR_YELLOW "CHG" COLOR_OFF ) 48  #COLORED_DEL COLOR_RED "DEL" COLOR_OFF ) 50  #PROMPT_ON COLOR_BLUE "[blu‘oÙh]" COLOR_OFF "# " ) 51  #PROMPT_OFF "[blu‘oÙh]# " ) 53  GMašLoÝ * gmaš_loÝ ; 54  DBusCÚÃùiÚ * gdbus_cÚn ; 56  GDBusProxy * gag’t_mªag” ; 57 * gauto_»gi¡”_ag’t = NULL ; 59  GDBusProxy * gdeçuÉ_ù¾ ; 60  GLi¡ * gù¾_li¡ ; 61  GLi¡ * gdev_li¡ ; 63  gušt gšput = 0; 65 cÚ¡ * cÚ¡ gag’t_¬gum’ts [] = { 73 NULL 76  $´oxy_Ëak ( gpoš‹r d©a ) 78 `´štf ("L—kšg…roxy %p\n", d©a ); 79 } } 81  $cÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 83 `¾_£t_´om± ( PROMPT_ON ); 84 `´štf ("\r"); 85 `¾_Ú_Ãw_lše (); 86 `¾_»di¥Ïy (); 87 } } 89  $discÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 91 `¾_£t_´om± ( PROMPT_OFF ); 92 `´štf ("\r"); 93 `¾_Ú_Ãw_lše (); 94 `¾_»di¥Ïy (); 96 `g_li¡_ä“ ( ù¾_li¡ ); 97 ù¾_li¡ = NULL ; 99 deçuÉ_ù¾ = NULL ; 101 `g_li¡_ä“ ( dev_li¡ ); 102 dev_li¡ = NULL ; 103 } } 105  $´št_ad­‹r ( GDBusProxy * ´oxy , cÚ¡ * desütiÚ ) 107 DBusMes§geI‹r ™” ; 108 cÚ¡ * add»ss , * Çme ; 110 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Add»ss", & ™” è=ð FALSE ) 113 `dbus_mes§ge_™”_g‘_basic (& ™” , & add»ss ); 115 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "AlŸs", & ™” è=ð TRUE ) 116 `dbus_mes§ge_™”_g‘_basic (& ™” , & Çme ); 118 Çme = ""; 120 `¾_´štf ("%s%s%sController %s %s %s\n", 121 desütiÚ ? "[" : "", 122 desütiÚ ? : "", 123 desütiÚ ? "] " : "", 124 add»ss , Çme , 125 deçuÉ_ù¾ =ð ´oxy ? "[default]" : ""); 127 } } 129  $´št_deviû ( GDBusProxy * ´oxy , cÚ¡ * desütiÚ ) 131 DBusMes§geI‹r ™” ; 132 cÚ¡ * add»ss , * Çme ; 134 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Add»ss", & ™” è=ð FALSE ) 137 `dbus_mes§ge_™”_g‘_basic (& ™” , & add»ss ); 139 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "AlŸs", & ™” è=ð TRUE ) 140 `dbus_mes§ge_™”_g‘_basic (& ™” , & Çme ); 142 Çme = ""; 144 `¾_´štf ("%s%s%sDevice %s %s\n", 145 desütiÚ ? "[" : "", 146 desütiÚ ? : "", 147 desütiÚ ? "] " : "", 148 add»ss , Çme ); 149 } } 151  $´št_™” (cÚ¡ * Ïb– , cÚ¡ * Çme , 152 DBusMes§geI‹r * ™” ) 154 dbus_boÞ_t v®boÞ ; 155 dbus_ušt32_t v®u32 ; 156 dbus_ušt16_t v®u16 ; 157 dbus_št16_t v®s16 ; 158 cÚ¡ * v®¡r ; 159 DBusMes§geI‹r sub™” ; 160  ty³ ; 162 ià( ™” =ð NULL ) { 163 `¾_´štf ("%s% i nž\n", Ïb– , Çme ); 167  `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” )) { 168  DBUS_TYPE_INVALID : 169 `¾_´štf ("%s% i šv®id\n", Ïb– , Çme ); 171  DBUS_TYPE_STRING : 172  DBUS_TYPE_OBJECT_PATH : 173 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®¡r ); 174 `¾_´štf ("%s%s: %s\n", Ïb– , Çme , v®¡r ); 176  DBUS_TYPE_BOOLEAN : 177 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®boÞ ); 178 `¾_´štf ("%s%s: %s\n", Ïb– , Çme , 179 v®boÞ =ð TRUE ? "yes" : "no"); 181  DBUS_TYPE_UINT32 : 182 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®u32 ); 183 `¾_´štf ("%s%s: 0x%06x\n", Ïb– , Çme , v®u32 ); 185  DBUS_TYPE_UINT16 : 186 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®u16 ); 187 `¾_´štf ("%s%s: 0x%04x\n", Ïb– , Çme , v®u16 ); 189  DBUS_TYPE_INT16 : 190 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®s16 ); 191 `¾_´štf ("%s%s: %d\n", Ïb– , Çme , v®s16 ); 193  DBUS_TYPE_ARRAY : 194 `dbus_mes§ge_™”_»cur£ ( ™” , & sub™” ); 195 `¾_´štf ("%s%s:\n", Ïb– , Çme ); 198 ty³ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& sub™” ); 199 ià( ty³ =ð DBUS_TYPE_INVALID ) 202 ià( ty³ =ð DBUS_TYPE_STRING ) { 203 `dbus_mes§ge_™”_g‘_basic (& sub™” , & v®¡r ); 204 `¾_´štf ("\t%s\n", v®¡r ); 207 `dbus_mes§ge_™”_Ãxt (& sub™” ); 208 }  Œue ); 212 `¾_´štf ("%s% ha unsuµÜ‹dy³\n", Ïb– , Çme ); 215 } } 217  $´št_´Ý”ty ( GDBusProxy * ´oxy , cÚ¡ * Çme ) 219 DBusMes§geI‹r ™” ; 221 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , Çme , & ™” è=ð FALSE ) 224 `´št_™” ("\t", Çme , & ™” ); 225 } } 227  $´št_uuids ( GDBusProxy * ´oxy ) 229 DBusMes§geI‹r ™” , v®ue ; 231 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "UUIDs", & ™” è=ð FALSE ) 234 `dbus_mes§ge_™”_»cur£ (& ™” , & v®ue ); 236  `dbus_mes§ge_™”_g‘_¬g_ty³ (& v®ue è=ð DBUS_TYPE_STRING ) { 237 cÚ¡ * uuid , * ‹xt ; 239 `dbus_mes§ge_™”_g‘_basic (& v®ue , & uuid ); 241 ‹xt = `uuid¡r_to_¡r ( uuid ); 242 ià( ‹xt ) { 243  ¡r [26]; 244  n ; 246 ¡r [(str) - 1] = '\0'; 248 n = `¢´štf ( ¡r , (¡r), "%s", ‹xt ); 249 ià( n > ( ¡r ) - 1) { 250 ¡r [(str) - 2] = '.'; 251 ¡r [(str) - 3] = '.'; 252 ià( ¡r [(str) - 4] == ' ') 253 ¡r [(str) - 4] = '.'; 255 n = ( ¡r ) - 1; 258 `¾_´štf ("\tUUID: %s%*c(%s)\n", 259 ¡r , 26 - n , ' ', uuid ); 261 `¾_´štf ("\tUUID: %*c(%s)\n", 26, ' ', uuid ); 263 `dbus_mes§ge_™”_Ãxt (& v®ue ); 265 } } 267  gboÞ—n $deviû_is_chžd ( GDBusProxy * deviû , GDBusProxy * ma¡” ) 269 DBusMes§geI‹r ™” ; 270 cÚ¡ * ad­‹r , * ·th ; 272 ià(! ma¡” ) 273  FALSE ; 275 ià( `g_dbus_´oxy_g‘_´Ý”ty ( deviû , "Ad­‹r", & ™” è=ð FALSE ) 276  FALSE ; 278 `dbus_mes§ge_™”_g‘_basic (& ™” , & ad­‹r ); 279 ·th = `g_dbus_´oxy_g‘_·th ( ma¡” ); 281 ià(! `¡rcmp ( ·th , ad­‹r )) 282  TRUE ; 284  FALSE ; 285 } } 287  $´oxy_added ( GDBusProxy * ´oxy , * u£r_d©a ) 289 cÚ¡ * š‹rçû ; 291 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 293 ià(! `¡rcmp ( š‹rçû , "org.bluez.Device1")) { 294 ià( `deviû_is_chžd ( ´oxy , deçuÉ_ù¾ è=ð TRUE ) { 295 dev_li¡ = `g_li¡_­³nd (dev_li¡, ´oxy ); 297 `´št_deviû ( ´oxy , COLORED_NEW ); 299 } ià(! `¡rcmp ( š‹rçû , "org.bluez.Adapter1")) { 300 ù¾_li¡ = `g_li¡_­³nd (ù¾_li¡, ´oxy ); 302 ià(! deçuÉ_ù¾ ) 303 deçuÉ_ù¾ = ´oxy ; 305 `´št_ad­‹r ( ´oxy , COLORED_NEW ); 306 } ià(! `¡rcmp ( š‹rçû , "org.bluez.AgentManager1")) { 307 ià(! ag’t_mªag” ) { 308 ag’t_mªag” = ´oxy ; 310 ià( auto_»gi¡”_ag’t ) 311 `ag’t_»gi¡” ( dbus_cÚn , ag’t_mªag” , 312 auto_»gi¡”_ag’t ); 315 } } 317  $´oxy_»moved ( GDBusProxy * ´oxy , * u£r_d©a ) 319 cÚ¡ * š‹rçû ; 321 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 323 ià(! `¡rcmp ( š‹rçû , "org.bluez.Device1")) { 324 ià( `deviû_is_chžd ( ´oxy , deçuÉ_ù¾ è=ð TRUE ) { 325 dev_li¡ = `g_li¡_»move (dev_li¡, ´oxy ); 327 `´št_deviû ( ´oxy , COLORED_DEL ); 329 } ià(! `¡rcmp ( š‹rçû , "org.bluez.Adapter1")) { 330 ù¾_li¡ = `g_li¡_»move (ù¾_li¡, ´oxy ); 332 `´št_ad­‹r ( ´oxy , COLORED_DEL ); 334 ià( deçuÉ_ù¾ =ð ´oxy ) { 335 deçuÉ_ù¾ = NULL ; 337 `g_li¡_ä“ ( dev_li¡ ); 338 dev_li¡ = NULL ; 340 } ià(! `¡rcmp ( š‹rçû , "org.bluez.AgentManager1")) { 341 ià( ag’t_mªag” =ð ´oxy ) { 342 ag’t_mªag” = NULL ; 343 ià( auto_»gi¡”_ag’t ) 344 `ag’t_uÄegi¡” ( dbus_cÚn , NULL ); 347 } } 349  $´Ý”ty_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 350 DBusMes§geI‹r * ™” , * u£r_d©a ) 352 cÚ¡ * š‹rçû ; 354 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 356 ià(! `¡rcmp ( š‹rçû , "org.bluez.Device1")) { 357 ià( `deviû_is_chžd ( ´oxy , deçuÉ_ù¾ è=ð TRUE ) { 358 DBusMes§geI‹r addr_™” ; 359 * ¡r ; 361 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Address", 362 & addr_™” è=ð TRUE ) { 363 cÚ¡ * add»ss ; 365 `dbus_mes§ge_™”_g‘_basic (& addr_™” , 366 & add»ss ); 367 ¡r = `g_¡rdup_´štf ("[" COLORED_CHG 368 "] Deviû % ", add»ss ); 370 ¡r = `g_¡rdup (""); 372 `´št_™” ( ¡r , Çme , ™” ); 373 `g_ä“ ( ¡r ); 375 } ià(! `¡rcmp ( š‹rçû , "org.bluez.Adapter1")) { 376 DBusMes§geI‹r addr_™” ; 377 * ¡r ; 379 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Address", 380 & addr_™” è=ð TRUE ) { 381 cÚ¡ * add»ss ; 383 `dbus_mes§ge_™”_g‘_basic (& addr_™” , & add»ss ); 384 ¡r = `g_¡rdup_´štf ("[" COLORED_CHG 385 "] CÚŒÞ˸% ", add»ss ); 387 ¡r = `g_¡rdup (""); 389 `´št_™” ( ¡r , Çme , ™” ); 390 `g_ä“ ( ¡r ); 392 } } 394  $mes§ge_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , 395 DBusMes§ge * mes§ge , * u£r_d©a ) 397 `¾_´štf ("[SIGNAL] %s.%s\n", `dbus_mes§ge_g‘_š‹rçû ( mes§ge ), 398 `dbus_mes§ge_g‘_memb” ( mes§ge )); 399 } } 401  GDBusProxy * $fšd_´oxy_by_add»ss ( GLi¡ * sourû , cÚ¡ * add»ss ) 403 GLi¡ * li¡ ; 405  li¡ = `g_li¡_fœ¡ ( sourû );†i¡;†i¡ = `g_li¡_Ãxt (list)) { 406 GDBusProxy * ´oxy = li¡ -> d©a ; 407 DBusMes§geI‹r ™” ; 408 cÚ¡ * ¡r ; 410 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Add»ss", & ™” è=ð FALSE ) 413 `dbus_mes§ge_™”_g‘_basic (& ™” , & ¡r ); 415 ià(! `¡rcmp ( ¡r , add»ss )) 416  ´oxy ; 419  NULL ; 420 } } 422  gboÞ—n $check_deçuÉ_ù¾ () 424 ià(! deçuÉ_ù¾ ) { 425 `¾_´štf ("No default controller‡vailable\n"); 426  FALSE ; 429  TRUE ; 430 } } 432  gboÞ—n $·r£_¬gum’t_Ú_off (cÚ¡ * ¬g , dbus_boÞ_t * v®ue ) 434 ià(! ¬g || ! `¡¾’ (arg)) { 435 `¾_´štf ("Missing on/off‡rgument\n"); 436  FALSE ; 439 ià(! `¡rcmp ( ¬g , "on") || !strcmp(arg, "yes")) { 440 * v®ue = TRUE ; 441  TRUE ; 444 ià(! `¡rcmp ( ¬g , "off") || !strcmp(arg, "no")) { 445 * v®ue = FALSE ; 446  TRUE ; 449 `¾_´štf ("Inv®id‡rgum’ˆ%s\n", ¬g ); 450  FALSE ; 451 } } 453  gboÞ—n $·r£_¬gum’t_ag’t (cÚ¡ * ¬g , dbus_boÞ_t * v®ue , 454 cÚ¡ ** ÿ·bž™y ) 456 cÚ¡ * cÚ¡ * Ýt ; 458 ià( ¬g =ð NULL || `¡¾’ (arg) == 0) { 459 `¾_´štf ("Missing on/off/capability‡rgument\n"); 460  FALSE ; 463 ià( `¡rcmp ( ¬g , "on") == 0 || strcmp(arg, "yes") == 0) { 464 * v®ue = TRUE ; 465 * ÿ·bž™y = ""; 466  TRUE ; 469 ià( `¡rcmp ( ¬g , "off") == 0 || strcmp(arg, "no") == 0) { 470 * v®ue = FALSE ; 471  TRUE ; 474  Ýt = ag’t_¬gum’ts ; *opt; opt++) { 475 ià( `¡rcmp ( ¬g , * Ýt ) == 0) { 476 * v®ue = TRUE ; 477 * ÿ·bž™y = * Ýt ; 478  TRUE ; 482 `¾_´štf ("Inv®id‡rgum’ˆ%s\n", ¬g ); 483  FALSE ; 484 } } 486  $cmd_li¡ (cÚ¡ * ¬g ) 488 GLi¡ * li¡ ; 490  li¡ = `g_li¡_fœ¡ ( ù¾_li¡ );†i¡;†i¡ = `g_li¡_Ãxt (list)) { 491 GDBusProxy * ´oxy = li¡ -> d©a ; 492 `´št_ad­‹r ( ´oxy , NULL ); 494 } } 496  $cmd_show (cÚ¡ * ¬g ) 498 GDBusProxy * ´oxy ; 499 DBusMes§geI‹r ™” ; 500 cÚ¡ * add»ss ; 502 ià(! ¬g || ! `¡¾’ (arg)) { 503 ià( `check_deçuÉ_ù¾ (è=ð FALSE ) 506 ´oxy = deçuÉ_ù¾ ; 508 ´oxy = `fšd_´oxy_by_add»ss ( ù¾_li¡ , ¬g ); 509 ià(! ´oxy ) { 510 `¾_´štf ("CÚŒÞ˸% nÙ‡važabË\n", ¬g ); 515 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Add»ss", & ™” è=ð FALSE ) 518 `dbus_mes§ge_™”_g‘_basic (& ™” , & add»ss ); 519 `¾_´štf ("CÚŒÞ˸%s\n", add»ss ); 521 `´št_´Ý”ty ( ´oxy , "Name"); 522 `´št_´Ý”ty ( ´oxy , "Alias"); 523 `´št_´Ý”ty ( ´oxy , "Class"); 524 `´št_´Ý”ty ( ´oxy , "Powered"); 525 `´št_´Ý”ty ( ´oxy , "Discoverable"); 526 `´št_´Ý”ty ( ´oxy , "Pairable"); 527 `´št_uuids ( ´oxy ); 528 `´št_´Ý”ty ( ´oxy , "Modalias"); 529 `´št_´Ý”ty ( ´oxy , "Discovering"); 530 #ifdeà __TIZEN_PATCH__ 531 `´št_´Ý”ty ( ´oxy , "Advertising"); 533 } } 535  $cmd_£Ëù (cÚ¡ * ¬g ) 537 GDBusProxy * ´oxy ; 539 ià(! ¬g || ! `¡¾’ (arg)) { 540 `¾_´štf ("Missing controller‡ddress‡rgument\n"); 544 ´oxy = `fšd_´oxy_by_add»ss ( ù¾_li¡ , ¬g ); 545 ià(! ´oxy ) { 546 `¾_´štf ("CÚŒÞ˸% nÙ‡važabË\n", ¬g ); 550 ià( deçuÉ_ù¾ =ð ´oxy ) 553 deçuÉ_ù¾ = ´oxy ; 554 `´št_ad­‹r ( ´oxy , NULL ); 556 `g_li¡_ä“ ( dev_li¡ ); 557 dev_li¡ = NULL ; 558 } } 560  $cmd_deviûs (cÚ¡ * ¬g ) 562 GLi¡ * li¡ ; 564  li¡ = `g_li¡_fœ¡ ( dev_li¡ );†i¡;†i¡ = `g_li¡_Ãxt (list)) { 565 GDBusProxy * ´oxy = li¡ -> d©a ; 566 `´št_deviû ( ´oxy , NULL ); 568 } } 570  $cmd_·œed_deviûs (cÚ¡ * ¬g ) 572 GLi¡ * li¡ ; 574  li¡ = `g_li¡_fœ¡ ( dev_li¡ );†i¡;†i¡ = `g_li¡_Ãxt (list)) { 575 GDBusProxy * ´oxy = li¡ -> d©a ; 576 DBusMes§geI‹r ™” ; 577 dbus_boÞ_t ·œed ; 579 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Paœed", & ™” è=ð FALSE ) 582 `dbus_mes§ge_™”_g‘_basic (& ™” , & ·œed ); 583 ià(! ·œed ) 586 `´št_deviû ( ´oxy , NULL ); 588 } } 590  $g’”ic_ÿÎback (cÚ¡ DBusE¼Ü * ”rÜ , * u£r_d©a ) 592 * ¡r = u£r_d©a ; 594 ià( `dbus_”rÜ_is_£t ( ”rÜ )) 595 `¾_´štf ("FažedØ£ˆ%s: %s\n", ¡r , ”rÜ -> Çme ); 597 `¾_´štf ("Chªgšg % sucûeded\n", ¡r ); 598 } } 600  $cmd_sy¡em_®Ÿs (cÚ¡ * ¬g ) 602 * Çme ; 604 ià(! ¬g || ! `¡¾’ (arg)) { 605 `¾_´štf ("Missing‚ame‡rgument\n"); 609 ià( `check_deçuÉ_ù¾ (è=ð FALSE ) 612 Çme = `g_¡rdup ( ¬g ); 614 ià( `g_dbus_´oxy_£t_´Ý”ty_basic ( deçuÉ_ù¾ , "Alias", 615 DBUS_TYPE_STRING , & Çme , 616 g’”ic_ÿÎback , Çme , g_ä“ è=ð TRUE ) 619 `g_ä“ ( Çme ); 620 } } 622  $cmd_»£t_®Ÿs (cÚ¡ * ¬g ) 624 * Çme ; 626 ià( `check_deçuÉ_ù¾ (è=ð FALSE ) 629 Çme = `g_¡rdup (""); 631 ià( `g_dbus_´oxy_£t_´Ý”ty_basic ( deçuÉ_ù¾ , "Alias", 632 DBUS_TYPE_STRING , & Çme , 633 g’”ic_ÿÎback , Çme , g_ä“ è=ð TRUE ) 636 `g_ä“ ( Çme ); 637 } } 639  $cmd_pow” (cÚ¡ * ¬g ) 641 dbus_boÞ_t pow”ed ; 642 * ¡r ; 644 ià( `·r£_¬gum’t_Ú_off ( ¬g , & pow”ed è=ð FALSE ) 647 ià( `check_deçuÉ_ù¾ (è=ð FALSE ) 650 ¡r = `g_¡rdup_´štf ("pow” %s", pow”ed =ð TRUE ? "on" : "off"); 652 ià( `g_dbus_´oxy_£t_´Ý”ty_basic ( deçuÉ_ù¾ , "Powered", 653 DBUS_TYPE_BOOLEAN , & pow”ed , 654 g’”ic_ÿÎback , ¡r , g_ä“ è=ð TRUE ) 657 `g_ä“ ( ¡r ); 658 } } 660  $cmd_·œabË (cÚ¡ * ¬g ) 662 dbus_boÞ_t ·œabË ; 663 * ¡r ; 665 ià( `·r£_¬gum’t_Ú_off ( ¬g , & ·œabË è=ð FALSE ) 668 ià( `check_deçuÉ_ù¾ (è=ð FALSE ) 671 ¡r = `g_¡rdup_´štf ("·œabË %s", ·œabË =ð TRUE ? "on" : "off"); 673 ià( `g_dbus_´oxy_£t_´Ý”ty_basic ( deçuÉ_ù¾ , "Pairable", 674 DBUS_TYPE_BOOLEAN , & ·œabË , 675 g’”ic_ÿÎback , ¡r , g_ä“ è=ð TRUE ) 678 `g_ä“ ( ¡r ); 679 } } 681  $cmd_discov”abË (cÚ¡ * ¬g ) 683 dbus_boÞ_t discov”abË ; 684 * ¡r ; 686 ià( `·r£_¬gum’t_Ú_off ( ¬g , & discov”abË è=ð FALSE ) 689 ià( `check_deçuÉ_ù¾ (è=ð FALSE ) 692 ¡r = `g_¡rdup_´štf ("discoverable %s", 693 discov”abË =ð TRUE ? "on" : "off"); 695 ià( `g_dbus_´oxy_£t_´Ý”ty_basic ( deçuÉ_ù¾ , "Discoverable", 696 DBUS_TYPE_BOOLEAN , & discov”abË , 697 g’”ic_ÿÎback , ¡r , g_ä“ è=ð TRUE ) 700 `g_ä“ ( ¡r ); 701 } } 703  $cmd_ag’t (cÚ¡ * ¬g ) 705 dbus_boÞ_t ’abË ; 706 cÚ¡ * ÿ·bž™y ; 708 ià( `·r£_¬gum’t_ag’t ( ¬g , & ’abË , & ÿ·bž™y è=ð FALSE ) 711 ià( ’abË =ð TRUE ) { 712 `g_ä“ ( auto_»gi¡”_ag’t ); 713 auto_»gi¡”_ag’t = `g_¡rdup ( ÿ·bž™y ); 715 ià( ag’t_mªag” ) 716 `ag’t_»gi¡” ( dbus_cÚn , ag’t_mªag” , 717 auto_»gi¡”_ag’t ); 719 `¾_´štf ("Agent„egistrationƒnabled\n"); 721 `g_ä“ ( auto_»gi¡”_ag’t ); 722 auto_»gi¡”_ag’t = NULL ; 724 ià( ag’t_mªag” ) 725 `ag’t_uÄegi¡” ( dbus_cÚn , ag’t_mªag” ); 727 `¾_´štf ("Agent„egistration disabled\n"); 729 } } 731  $cmd_deçuÉ_ag’t (cÚ¡ * ¬g ) 733 `ag’t_deçuÉ ( dbus_cÚn , ag’t_mªag” ); 734 } } 736  $¡¬t_discov”y_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 738 dbus_boÞ_t ’abË = `GPOINTER_TO_UINT ( u£r_d©a ); 739 DBusE¼Ü ”rÜ ; 741 `dbus_”rÜ_š™ (& ”rÜ ); 743 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 744 `¾_´štf ("Failedo %s discovery: %s\n", 745 ’abË =ð TRUE ? "¡¬t" : "¡Ý", ”rÜ . Çme ); 746 `dbus_”rÜ_ä“ (& ”rÜ ); 750 `¾_´štf ("Discov”y %s\n", ’abË =ð TRUE ? "started" : "stopped"); 751 } } 753  $cmd_sÿn (cÚ¡ * ¬g ) 755 dbus_boÞ_t ’abË ; 756 cÚ¡ * m‘hod ; 758 ià( `·r£_¬gum’t_Ú_off ( ¬g , & ’abË è=ð FALSE ) 761 ià( `check_deçuÉ_ù¾ (è=ð FALSE ) 764 ià( ’abË =ð TRUE ) 765 m‘hod = "StartDiscovery"; 767 m‘hod = "StopDiscovery"; 769 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( deçuÉ_ù¾ , m‘hod , 770 NULL , ¡¬t_discov”y_»¶y , 771 `GUINT_TO_POINTER ( ’abË ), NULL è=ð FALSE ) { 772 `¾_´štf ("Failedo %s discovery\n", 773 ’abË =ð TRUE ? "start" : "stop"); 776 } } 778  $cmd_šfo (cÚ¡ * ¬g ) 780 GDBusProxy * ´oxy ; 781 DBusMes§geI‹r ™” ; 782 cÚ¡ * add»ss ; 784 ià(! ¬g || ! `¡¾’ (arg)) { 785 `¾_´štf ("Missing device‡ddress‡rgument\n"); 789 ´oxy = `fšd_´oxy_by_add»ss ( dev_li¡ , ¬g ); 790 ià(! ´oxy ) { 791 `¾_´štf ("Deviû % nÙ‡važabË\n", ¬g ); 795 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Add»ss", & ™” è=ð FALSE ) 798 `dbus_mes§ge_™”_g‘_basic (& ™” , & add»ss ); 799 `¾_´štf ("Deviû %s\n", add»ss ); 801 `´št_´Ý”ty ( ´oxy , "Name"); 802 `´št_´Ý”ty ( ´oxy , "Alias"); 803 `´št_´Ý”ty ( ´oxy , "Class"); 804 `´št_´Ý”ty ( ´oxy , "Appearance"); 805 `´št_´Ý”ty ( ´oxy , "Icon"); 806 `´št_´Ý”ty ( ´oxy , "Paired"); 807 `´št_´Ý”ty ( ´oxy , "Trusted"); 808 `´št_´Ý”ty ( ´oxy , "Blocked"); 809 `´št_´Ý”ty ( ´oxy , "Connected"); 810 `´št_´Ý”ty ( ´oxy , "LegacyPairing"); 811 `´št_uuids ( ´oxy ); 812 `´št_´Ý”ty ( ´oxy , "Modalias"); 813 #ifdeà __TIZEN_PATCH__ 814 `´št_´Ý”ty ( ´oxy , "Flag"); 815 `´št_´Ý”ty ( ´oxy , "ManufacturerDataLen"); 816 `´št_´Ý”ty ( ´oxy , "ManufacturerData"); 818 } } 820  $·œ_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 822 DBusE¼Ü ”rÜ ; 824 `dbus_”rÜ_š™ (& ”rÜ ); 826 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 827 `¾_´štf ("FažedØ·œ: %s\n", ”rÜ . Çme ); 828 `dbus_”rÜ_ä“ (& ”rÜ ); 832 `¾_´štf ("Pairing successful\n"); 833 } } 835  $cmd_·œ (cÚ¡ * ¬g ) 837 GDBusProxy * ´oxy ; 839 ià(! ¬g || ! `¡¾’ (arg)) { 840 `¾_´štf ("Missing device‡ddress‡rgument\n"); 844 ´oxy = `fšd_´oxy_by_add»ss ( dev_li¡ , ¬g ); 845 ià(! ´oxy ) { 846 `¾_´štf ("Deviû % nÙ‡važabË\n", ¬g ); 850 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "Paœ", NULL , ·œ_»¶y , 851 NULL , NULLè=ð FALSE ) { 852 `¾_´štf ("Failedo…air\n"); 856 `¾_´štf ("A‰em±šgØ·œ w™h %s\n", ¬g ); 857 } } 859  $cmd_Œu¡ (cÚ¡ * ¬g ) 861 GDBusProxy * ´oxy ; 862 dbus_boÞ_t Œu¡ed ; 863 * ¡r ; 865 ià(! ¬g || ! `¡¾’ (arg)) { 866 `¾_´štf ("Missing device‡ddress‡rgument\n"); 870 ´oxy = `fšd_´oxy_by_add»ss ( dev_li¡ , ¬g ); 871 ià(! ´oxy ) { 872 `¾_´štf ("Deviû % nÙ‡važabË\n", ¬g ); 876 Œu¡ed = TRUE ; 878 ¡r = `g_¡rdup_´štf ("% Œu¡", ¬g ); 880 ià( `g_dbus_´oxy_£t_´Ý”ty_basic ( ´oxy , "Trusted", 881 DBUS_TYPE_BOOLEAN , & Œu¡ed , 882 g’”ic_ÿÎback , ¡r , g_ä“ è=ð TRUE ) 885 `g_ä“ ( ¡r ); 886 } } 888  $cmd_uÁru¡ (cÚ¡ * ¬g ) 890 GDBusProxy * ´oxy ; 891 dbus_boÞ_t Œu¡ed ; 892 * ¡r ; 894 ià(! ¬g || ! `¡¾’ (arg)) { 895 `¾_´štf ("Missing device‡ddress‡rgument\n"); 899 ´oxy = `fšd_´oxy_by_add»ss ( dev_li¡ , ¬g ); 900 ià(! ´oxy ) { 901 `¾_´štf ("Deviû % nÙ‡važabË\n", ¬g ); 905 Œu¡ed = FALSE ; 907 ¡r = `g_¡rdup_´štf ("% uÁru¡", ¬g ); 909 ià( `g_dbus_´oxy_£t_´Ý”ty_basic ( ´oxy , "Trusted", 910 DBUS_TYPE_BOOLEAN , & Œu¡ed , 911 g’”ic_ÿÎback , ¡r , g_ä“ è=ð TRUE ) 914 `g_ä“ ( ¡r ); 915 } } 917  $cmd_block (cÚ¡ * ¬g ) 919 GDBusProxy * ´oxy ; 920 dbus_boÞ_t blocked ; 921 * ¡r ; 923 ià(! ¬g || ! `¡¾’ (arg)) { 924 `¾_´štf ("Missing device‡ddress‡rgument\n"); 928 ´oxy = `fšd_´oxy_by_add»ss ( dev_li¡ , ¬g ); 929 ià(! ´oxy ) { 930 `¾_´štf ("Deviû % nÙ‡važabË\n", ¬g ); 934 blocked = TRUE ; 936 ¡r = `g_¡rdup_´štf ("% block", ¬g ); 938 ià( `g_dbus_´oxy_£t_´Ý”ty_basic ( ´oxy , "Blocked", 939 DBUS_TYPE_BOOLEAN , & blocked , 940 g’”ic_ÿÎback , ¡r , g_ä“ è=ð TRUE ) 943 `g_ä“ ( ¡r ); 944 } } 946  $cmd_unblock (cÚ¡ * ¬g ) 948 GDBusProxy * ´oxy ; 949 dbus_boÞ_t blocked ; 950 * ¡r ; 952 ià(! ¬g || ! `¡¾’ (arg)) { 953 `¾_´štf ("Missing device‡ddress‡rgument\n"); 957 ´oxy = `fšd_´oxy_by_add»ss ( dev_li¡ , ¬g ); 958 ià(! ´oxy ) { 959 `¾_´štf ("Deviû % nÙ‡važabË\n", ¬g ); 963 blocked = FALSE ; 965 ¡r = `g_¡rdup_´štf ("% unblock", ¬g ); 967 ià( `g_dbus_´oxy_£t_´Ý”ty_basic ( ´oxy , "Blocked", 968 DBUS_TYPE_BOOLEAN , & blocked , 969 g’”ic_ÿÎback , ¡r , g_ä“ è=ð TRUE ) 972 `g_ä“ ( ¡r ); 973 } } 975  $»move_deviû_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 977 DBusE¼Ü ”rÜ ; 979 `dbus_”rÜ_š™ (& ”rÜ ); 981 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 982 `¾_´štf ("FažedØ»movdeviû: %s\n", ”rÜ . Çme ); 983 `dbus_”rÜ_ä“ (& ”rÜ ); 987 `¾_´štf ("Device has been„emoved\n"); 988 } } 990  $»move_deviû_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 992 cÚ¡ * ·th = u£r_d©a ; 994 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 995 } } 997  $cmd_»move (cÚ¡ * ¬g ) 999 GDBusProxy * ´oxy ; 1000 * ·th ; 1002 ià(! ¬g || ! `¡¾’ (arg)) { 1003 `¾_´štf ("Missing device‡ddress‡rgument\n"); 1007 ià( `check_deçuÉ_ù¾ (è=ð FALSE ) 1010 ´oxy = `fšd_´oxy_by_add»ss ( dev_li¡ , ¬g ); 1011 ià(! ´oxy ) { 1012 `¾_´štf ("Deviû % nÙ‡važabË\n", ¬g ); 1016 ·th = `g_¡rdup ( `g_dbus_´oxy_g‘_·th ( ´oxy )); 1018 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( deçuÉ_ù¾ , "RemoveDevice", 1019 »move_deviû_£tup , 1020 »move_deviû_»¶y , 1021 ·th , g_ä“ è=ð FALSE ) { 1022 `¾_´štf ("Failedo„emove device\n"); 1023 `g_ä“ ( ·th ); 1026 } } 1028  $cÚÃù_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1030 DBusE¼Ü ”rÜ ; 1032 `dbus_”rÜ_š™ (& ”rÜ ); 1034 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1035 `¾_´štf ("FažedØcÚÃù: %s\n", ”rÜ . Çme ); 1036 `dbus_”rÜ_ä“ (& ”rÜ ); 1040 `¾_´štf ("Connection successful\n"); 1041 } } 1043  $cmd_cÚÃù (cÚ¡ * ¬g ) 1045 GDBusProxy * ´oxy ; 1047 ià(! ¬g || ! `¡¾’ (arg)) { 1048 `¾_´štf ("Missing device‡ddress‡rgument\n"); 1052 ´oxy = `fšd_´oxy_by_add»ss ( dev_li¡ , ¬g ); 1053 ià(! ´oxy ) { 1054 `¾_´štf ("Deviû % nÙ‡važabË\n", ¬g ); 1058 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "CÚÃù", NULL , cÚÃù_»¶y , 1059 NULL , NULLè=ð FALSE ) { 1060 `¾_´štf ("Failedo connect\n"); 1064 `¾_´štf ("A‰em±šgØcÚÃùØ%s\n", ¬g ); 1065 } } 1067  $discÚn_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1069 DBusE¼Ü ”rÜ ; 1071 `dbus_”rÜ_š™ (& ”rÜ ); 1073 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1074 `¾_´štf ("FažedØdiscÚÃù: %s\n", ”rÜ . Çme ); 1075 `dbus_”rÜ_ä“ (& ”rÜ ); 1079 `¾_´štf ("Successful disconnected\n"); 1080 } } 1082  $cmd_discÚn (cÚ¡ * ¬g ) 1084 GDBusProxy * ´oxy ; 1086 ià(! ¬g || ! `¡¾’ (arg)) { 1087 `¾_´štf ("Missing device‡ddress‡rgument\n"); 1091 ´oxy = `fšd_´oxy_by_add»ss ( dev_li¡ , ¬g ); 1092 ià(! ´oxy ) { 1093 `¾_´štf ("Deviû % nÙ‡važabË\n", ¬g ); 1097 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "DiscÚÃù", NULL , discÚn_»¶y , 1098 NULL , NULLè=ð FALSE ) { 1099 `¾_´štf ("Failedo disconnect\n"); 1103 `¾_´štf ("A‰em±šgØdiscÚÃù from %s\n", ¬g ); 1104 } } 1106  $cmd_v”siÚ (cÚ¡ * ¬g ) 1108 `¾_´štf ("V”siÚ %s\n", VERSION ); 1109 } } 1111  $cmd_qu™ (cÚ¡ * ¬g ) 1113 `g_maš_loÝ_qu™ ( maš_loÝ ); 1114 } } 1116 * $g’”ic_g’”©Ü (cÚ¡ * ‹xt ,  ¡©e , 1117 GLi¡ * sourû , cÚ¡ * ´Ý”ty ) 1119  šdex , Ën ; 1120 GLi¡ * li¡ ; 1122 ià(! ¡©e ) { 1123 šdex = 0; 1124 Ën = `¡¾’ ( ‹xt ); 1127  li¡ = `g_li¡_Áh ( sourû , šdex );†ist; 1128 li¡ = `g_li¡_Ãxt (list)) { 1129 GDBusProxy * ´oxy = li¡ -> d©a ; 1130 DBusMes§geI‹r ™” ; 1131 cÚ¡ * ¡r ; 1133 šdex ++; 1135 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , ´Ý”ty , & ™” è=ð FALSE ) 1138 `dbus_mes§ge_™”_g‘_basic (& ™” , & ¡r ); 1140 ià(! `¡ºcmp ( ¡r , ‹xt , Ën )) 1141  `¡rdup ( ¡r ); 1144  NULL ; 1145 } } 1147 * $ù¾_g’”©Ü (cÚ¡ * ‹xt ,  ¡©e ) 1149  `g’”ic_g’”©Ü ( ‹xt , ¡©e , ù¾_li¡ , "Address"); 1150 } } 1152 * $dev_g’”©Ü (cÚ¡ * ‹xt ,  ¡©e ) 1154  `g’”ic_g’”©Ü ( ‹xt , ¡©e , dev_li¡ , "Address"); 1155 } } 1157 * $ÿ·bž™y_g’”©Ü (cÚ¡ * ‹xt ,  ¡©e ) 1159  šdex , Ën ; 1160 cÚ¡ * ¬g ; 1162 ià(! ¡©e ) { 1163 šdex = 0; 1164 Ën = `¡¾’ ( ‹xt ); 1167 ( ¬g = ag’t_¬gum’ts [ šdex ])) { 1168 šdex ++; 1170 ià(! `¡ºcmp ( ¬g , ‹xt , Ën )) 1171  `¡rdup ( ¬g ); 1174  NULL ; 1175 } } 1178 cÚ¡ * mcmd ; 1179 cÚ¡ * m¬g ; 1180 (* mfunc è(cÚ¡ * m¬g ); 1181 cÚ¡ * mdesc ; 1182 * (* mg’ è(cÚ¡ * m‹xt ,  m¡©e ); 1183 (* mdi¥ è(** mm©ches ,  mnum_m©ches ,  mmax_Ëngth ); 1184 } gcmd_bË [] = { 1185 { "li¡", NULL , cmd_li¡ , "List‡vailable controllers" }, 1186 { "show", "[ù¾]", cmd_show , "Controller information", 1187 ù¾_g’”©Ü }, 1188 { "£Ëù", "<ù¾>", cmd_£Ëù , "Select default controller", 1189 ù¾_g’”©Ü }, 1190 { "deviûs", NULL , cmd_deviûs , "List‡vailable devices" }, 1191 { "·œed-deviûs", NULL , cmd_·œed_deviûs , 1193 { "sy¡em-®Ÿs", "<Çme>", cmd_sy¡em_®Ÿs }, 1194 { "»£t-®Ÿs", NULL , cmd_»£t_®Ÿs }, 1195 { "pow”", "<Ú/off>", cmd_pow” , "Set controller…ower" }, 1196 { "·œabË", "<Ú/off>", cmd_·œabË , 1198 { "discov”abË", "<Ú/off>", cmd_discov”abË , 1200 { "ag’t", "<Ú/off/ÿ·bž™y>", cmd_ag’t , 1202 ÿ·bž™y_g’”©Ü }, 1203 { "deçuÉ-ag’t", NULL , cmd_deçuÉ_ag’t , 1205 { "sÿn", "<Ú/off>", cmd_sÿn , "Scan for devices" }, 1206 { "šfo", "", cmd_šfo , "Device information", 1207 dev_g’”©Ü }, 1208 { "·œ", "", cmd_·œ , "Pair with device", 1209 dev_g’”©Ü }, 1210 { "Œu¡", "", cmd_Œu¡ , "Trust device", 1211 dev_g’”©Ü }, 1212 { "uÁru¡", "", cmd_uÁru¡ , "Untrust device", 1213 dev_g’”©Ü }, 1214 { "block", "", cmd_block , "Block device", 1215 dev_g’”©Ü }, 1216 { "unblock", "", cmd_unblock , "Unblock device", 1217 dev_g’”©Ü }, 1218 { "»move", "", cmd_»move , "Remove device", 1219 dev_g’”©Ü }, 1220 { "cÚÃù", "", cmd_cÚÃù , "Connect device", 1221 dev_g’”©Ü }, 1222 { "discÚÃù", "", cmd_discÚn , "Disconnect device", 1223 dev_g’”©Ü }, 1224 { "v”siÚ", NULL , cmd_v”siÚ , "Display version" }, 1225 { "qu™", NULL , cmd_qu™ , "Quit…rogram" }, 1226 { "ex™", NULL , cmd_qu™ }, 1231 * $cmd_g’”©Ü (cÚ¡ * ‹xt ,  ¡©e ) 1233  šdex , Ën ; 1234 cÚ¡ * cmd ; 1236 ià(! ¡©e ) { 1237 šdex = 0; 1238 Ën = `¡¾’ ( ‹xt ); 1241 ( cmd = cmd_bË [ šdex ].cmd)) { 1242 šdex ++; 1244 ià(! `¡ºcmp ( cmd , ‹xt , Ën )) 1245  `¡rdup ( cmd ); 1248  NULL ; 1249 } } 1251 ** $cmd_com¶‘iÚ (cÚ¡ * ‹xt ,  ¡¬t ,  ’d ) 1253 ** m©ches = NULL ; 1255 ià( `ag’t_com¶‘iÚ (è=ð TRUE ) { 1256 ¾_©‹m±ed_com¶‘iÚ_ov” = 1; 1257  NULL ; 1260 ià( ¡¬t > 0) { 1261  i ; 1263  i = 0; cmd_bË [i]. cmd ; i++) { 1264 ià( `¡ºcmp ( cmd_bË [ i ]. cmd , 1265 ¾_lše_bufãr , ¡¬t - 1)) 1268 ià(! cmd_bË [ i ]. g’ ) 1271 ¾_com¶‘iÚ_di¥Ïy_m©ches_hook = cmd_bË [ i ]. di¥ ; 1272 m©ches = `¾_com¶‘iÚ_m©ches ( ‹xt , cmd_bË [ i ]. g’ ); 1276 ¾_com¶‘iÚ_di¥Ïy_m©ches_hook = NULL ; 1277 m©ches = `¾_com¶‘iÚ_m©ches ( ‹xt , cmd_g’”©Ü ); 1280 ià(! m©ches ) 1281 ¾_©‹m±ed_com¶‘iÚ_ov” = 1; 1283  m©ches ; 1284 } } 1286  $¾_hªdËr (* šput ) 1288 * cmd , * ¬g ; 1289  i ; 1291 ià(! šput ) { 1292 `¾_š£¹_‹xt ("quit"); 1293 `¾_»di¥Ïy (); 1294 `¾_ülf (); 1295 `g_maš_loÝ_qu™ ( maš_loÝ ); 1299 ià(! `¡¾’ ( šput )) 1300  dÚe ; 1302 ià( `ag’t_šput ( dbus_cÚn , šput è=ð TRUE ) 1303  dÚe ; 1305 `add_hi¡Üy ( šput ); 1307 cmd = `¡¹ok_r ( šput , " ", & ¬g ); 1308 ià(! cmd ) 1309  dÚe ; 1311 ià( ¬g ) { 1312  Ën = `¡¾’ ( ¬g ); 1313 ià( Ën > 0 && ¬g [len - 1] == ' ') 1314 ¬g [ Ën - 1] = '\0'; 1317  i = 0; cmd_bË [i]. cmd ; i++) { 1318 ià( `¡rcmp ( cmd , cmd_bË [ i ].cmd)) 1321 ià( cmd_bË [ i ]. func ) { 1322 cmd_bË [ i ]. `func ( ¬g ); 1323  dÚe ; 1327 ià( `¡rcmp ( cmd , "help")) { 1328 `´štf ("Invalid command\n"); 1329  dÚe ; 1332 `´štf ("Available commands:\n"); 1334  i = 0; cmd_bË [i]. cmd ; i++) { 1335 ià( cmd_bË [ i ]. desc ) 1336 `´štf (" % %-* %s\n", cmd_bË [ i ]. cmd , 1337 ()(25 - `¡¾’ ( cmd_bË [ i ]. cmd )), 1338 cmd_bË [ i ]. ¬g ? : "", 1339 cmd_bË [ i ]. desc ? : ""); 1342 dÚe : 1343 `ä“ ( šput ); 1344 } } 1346  gboÞ—n $šput_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd™iÚ , 1347 gpoš‹r u£r_d©a ) 1349 ià( cÚd™iÚ & G_IO_IN ) { 1350 `¾_ÿÎback_»ad_ch¬ (); 1351  TRUE ; 1354 ià( cÚd™iÚ & ( G_IO_HUP | G_IO_ERR | G_IO_NVAL )) { 1355 `g_maš_loÝ_qu™ ( maš_loÝ ); 1356  FALSE ; 1359  TRUE ; 1360 } } 1362  gušt $£tup_¡ªd¬d_šput () 1364 GIOChªÃl * chªÃl ; 1365 gušt sourû ; 1367 chªÃl = `g_io_chªÃl_unix_Ãw ( `fž’o ( ¡dš )); 1369 sourû = `g_io_add_w©ch ( chªÃl , 1370 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 1371 šput_hªdËr , NULL ); 1373 `g_io_chªÃl_uÄef ( chªÃl ); 1375  sourû ; 1376 } } 1378  gboÞ—n $sigÇl_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd™iÚ , 1379 gpoš‹r u£r_d©a ) 1381  __‹rmš©ed = 0; 1382  sigÇlfd_sigšfo si ; 1383 ssize_t »suÉ ; 1384  fd ; 1386 ià( cÚd™iÚ & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 1387 `g_maš_loÝ_qu™ ( maš_loÝ ); 1388  FALSE ; 1391 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 1393 »suÉ = `»ad ( fd , & si , (si)); 1394 ià( »suÉ !ð( si )) 1395  FALSE ; 1397  si . ssi_signo ) { 1398  SIGINT : 1399 ià( šput ) { 1400 `¾_»¶aû_lše ("", 0); 1401 `¾_ülf (); 1402 `¾_Ú_Ãw_lše (); 1403 `¾_»di¥Ïy (); 1413  SIGTERM : 1414 ià( __‹rmš©ed == 0) { 1415 `¾_»¶aû_lše ("", 0); 1416 `¾_ülf (); 1417 `g_maš_loÝ_qu™ ( maš_loÝ ); 1420 __‹rmš©ed = 1; 1424  TRUE ; 1425 } } 1427  gušt $£tup_sigÇlfd () 1429 GIOChªÃl * chªÃl ; 1430 gušt sourû ; 1431 sig£t_t mask ; 1432  fd ; 1434 `sigem±y£t (& mask ); 1435 `sigadd£t (& mask , SIGINT ); 1436 `sigadd£t (& mask , SIGTERM ); 1438 ià( `sig´ocmask ( SIG_BLOCK , & mask , NULL ) < 0) { 1439 `³¼Ü ("Failedo set signal mask"); 1443 fd = `sigÇlfd (-1, & mask , 0); 1444 ià( fd < 0) { 1445 `³¼Ü ("Failedo create signal descriptor"); 1449 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 1451 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 1452 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 1453 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 1455 sourû = `g_io_add_w©ch ( chªÃl , 1456 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 1457 sigÇl_hªdËr , NULL ); 1459 `g_io_chªÃl_uÄef ( chªÃl ); 1461  sourû ; 1462 } } 1464  gboÞ—n gÝtiÚ_v”siÚ = FALSE ; 1466  gboÞ—n $·r£_ag’t (cÚ¡ * key , cÚ¡ * v®ue , 1467 gpoš‹r u£r_d©a , GE¼Ü ** ”rÜ ) 1469 ià( v®ue ) 1470 auto_»gi¡”_ag’t = `g_¡rdup ( v®ue ); 1472 auto_»gi¡”_ag’t = `g_¡rdup (""); 1474  TRUE ; 1475 } } 1477  GO±iÚEÁry gÝtiÚs [] = { 1478 { "v”siÚ", 'v', 0, G_OPTION_ARG_NONE , & ÝtiÚ_v”siÚ , 1480 { "ag’t", 'a', G_OPTION_FLAG_OPTIONAL_ARG , 1481 G_OPTION_ARG_CALLBACK , ·r£_ag’t , 1483 { NULL }, 1486  $þ›Á_»ady ( GDBusCl›Á * þ›Á , * u£r_d©a ) 1488 gušt * šput = u£r_d©a ; 1490 * šput = `£tup_¡ªd¬d_šput (); 1491 } } 1493  $maš ( ¬gc , * ¬gv []) 1495 GO±iÚCÚ‹xt * cÚ‹xt ; 1496 GE¼Ü * ”rÜ = NULL ; 1497 GDBusCl›Á * þ›Á ; 1498 gušt sigÇl ; 1500 cÚ‹xt = `g_ÝtiÚ_cÚ‹xt_Ãw ( NULL ); 1501 `g_ÝtiÚ_cÚ‹xt_add_maš_’Œ›s ( cÚ‹xt , ÝtiÚs , NULL ); 1503 ià( `g_ÝtiÚ_cÚ‹xt_·r£ ( cÚ‹xt , & ¬gc , & ¬gv , & ”rÜ è=ð FALSE ) { 1504 ià( ”rÜ !ð NULL ) { 1505 `g_´š‹¼ ("%s\n", ”rÜ -> mes§ge ); 1506 `g_”rÜ_ä“ ( ”rÜ ); 1508 `g_´š‹¼ ("An unknownƒrror occurred\n"); 1509 `ex™ (1); 1512 `g_ÝtiÚ_cÚ‹xt_ä“ ( cÚ‹xt ); 1514 ià( ÝtiÚ_v”siÚ =ð TRUE ) { 1515 `´štf ("%s\n", VERSION ); 1516 `ex™ (0); 1519 maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1520 dbus_cÚn = `g_dbus_£tup_bus ( DBUS_BUS_SYSTEM , NULL , NULL); 1522 ¾_©‹m±ed_com¶‘iÚ_funùiÚ = cmd_com¶‘iÚ ; 1524 ¾_”a£_em±y_lše = 1; 1525 `¾_ÿÎback_hªdËr_š¡®l ( NULL , ¾_hªdËr ); 1527 `¾_£t_´om± ( PROMPT_OFF ); 1528 `¾_»di¥Ïy (); 1530 sigÇl = `£tup_sigÇlfd (); 1531 þ›Á = `g_dbus_þ›Á_Ãw ( dbus_cÚn , "org.bluez", "/org/bluez"); 1533 `g_dbus_þ›Á_£t_cÚÃù_w©ch ( þ›Á , cÚÃù_hªdËr , NULL ); 1534 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( þ›Á , discÚÃù_hªdËr , NULL ); 1535 `g_dbus_þ›Á_£t_sigÇl_w©ch ( þ›Á , mes§ge_hªdËr , NULL ); 1537 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( þ›Á , ´oxy_added , ´oxy_»moved , 1538 ´Ý”ty_chªged , NULL ); 1540 šput = 0; 1541 `g_dbus_þ›Á_£t_»ady_w©ch ( þ›Á , þ›Á_»ady , & šput ); 1543 `g_maš_loÝ_run ( maš_loÝ ); 1545 `g_dbus_þ›Á_uÄef ( þ›Á ); 1546 `g_sourû_»move ( sigÇl ); 1547 ià( šput > 0) 1548 `g_sourû_»move ( šput ); 1550 `¾_mes§ge (""); 1551 `¾_ÿÎback_hªdËr_»move (); 1553 `dbus_cÚÃùiÚ_uÄef ( dbus_cÚn ); 1554 `g_maš_loÝ_uÄef ( maš_loÝ ); 1556 `g_li¡_ä“_fuÎ ( ù¾_li¡ , ´oxy_Ëak ); 1557 `g_li¡_ä“_fuÎ ( dev_li¡ , ´oxy_Ëak ); 1559 `g_ä“ ( auto_»gi¡”_ag’t ); 1562 } } @emulator/amp.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~ 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 33  ~ 34  ~ 36  ~ 37  ~ 39  ~"¤c/sh¬ed/utž.h " 40  ~"mÚ™Ü/mašloÝ.h " 41  ~"mÚ™Ü/bt.h " 43  ~"amp.h " 45  #PHY_MODE_IDLE 0x00 ) 46  #PHY_MODE_INITIATOR 0x01 ) 47  #PHY_MODE_ACCEPTOR 0x02 ) 49  #MAX_ASSOC_LEN 672 ) 51  sbt_amp { 52 vÞ©ž m»f_couÁ ; 53  mvhci_fd ; 55  mphylšk_·th [32]; 56  mphylšk_fd ; 58 ušt8_t mev’t_mask [16]; 59 ušt16_t mmªuçùu»r ; 60 ušt8_t mcommªds [64]; 61 ušt8_t mã©u»s [8]; 63 ušt8_t mamp_¡©us ; 64 ušt8_t mamp_ty³ ; 65 ušt8_t mloÿl_assoc [ MAX_ASSOC_LEN ]; 66 ušt16_t mloÿl_assoc_Ën ; 67 ušt8_t m»mÙe_assoc [ MAX_ASSOC_LEN ]; 68 ušt16_t m»mÙe_assoc_Ën ; 70 ušt8_t mphy_mode ; 71 ušt8_t mphy_hªdË ; 72 ušt16_t mlogic_hªdË ; 75  $»£t_deçuÉs ( bt_amp * amp ) 77 `mem£t ( amp -> ev’t_mask , 0, (amp->event_mask)); 78 amp -> ev’t_mask [1] |= 0x20; 79 amp -> ev’t_mask [1] |= 0x40; 80 amp -> ev’t_mask [1] |= 0x80; 81 amp -> ev’t_mask [2] |= 0x01; 82 amp -> ev’t_mask [2] |= 0x04; 83 amp -> ev’t_mask [3] |= 0x02; 84 amp -> ev’t_mask [3] |= 0x20; 85 amp -> ev’t_mask [7] |= 0x01; 87 amp -> ev’t_mask [8] |= 0x01; 88 amp -> ev’t_mask [8] |= 0x02; 89 amp -> ev’t_mask [8] |= 0x04; 90 amp -> ev’t_mask [8] |= 0x08; 91 amp -> ev’t_mask [8] |= 0x10; 92 amp -> ev’t_mask [8] |= 0x20; 93 amp -> ev’t_mask [8] |= 0x40; 94 amp -> ev’t_mask [8] |= 0x80; 95 amp -> ev’t_mask [9] |= 0x01; 96 amp -> ev’t_mask [9] |= 0x02; 97 amp -> ev’t_mask [9] |= 0x04; 98 amp -> ev’t_mask [9] |= 0x08; 99 amp -> ev’t_mask [9] |= 0x10; 100 amp -> ev’t_mask [9] |= 0x20; 102 amp -> mªuçùu»r = 0x003f; 104 `mem£t ( amp -> commªds , 0, (amp->commands)); 105 amp -> commªds [5] |= 0x40; 106 amp -> commªds [5] |= 0x80; 113 amp -> commªds [14] |= 0x08; 114 amp -> commªds [14] |= 0x10; 115 amp -> commªds [14] |= 0x20; 116 amp -> commªds [14] |= 0x80; 124 amp -> commªds [21] |= 0x01; 125 amp -> commªds [21] |= 0x02; 126 amp -> commªds [21] |= 0x04; 127 amp -> commªds [21] |= 0x08; 128 amp -> commªds [21] |= 0x10; 129 amp -> commªds [21] |= 0x20; 130 amp -> commªds [21] |= 0x40; 134 amp -> commªds [22] |= 0x04; 135 amp -> commªds [22] |= 0x08; 136 amp -> commªds [22] |= 0x10; 137 amp -> commªds [22] |= 0x20; 138 amp -> commªds [22] |= 0x40; 139 amp -> commªds [22] |= 0x80; 140 amp -> commªds [23] |= 0x01; 141 amp -> commªds [23] |= 0x02; 142 amp -> commªds [23] |= 0x04; 150 `mem£t ( amp -> ã©u»s , 0, (amp->features)); 152 amp -> amp_¡©us = 0x01; 153 amp -> amp_ty³ = 0x42; 155 `mem£t ( amp -> loÿl_assoc , 0, (amp->local_assoc)); 156 amp -> loÿl_assoc_Ën = 0; 158 `mem£t ( amp -> »mÙe_assoc , 0, (amp->remote_assoc)); 159 amp -> »mÙe_assoc_Ën = 0; 161 amp -> phy_mode = PHY_MODE_IDLE ; 162 amp -> phy_hªdË = 0x00; 163 amp -> logic_hªdË = 0x0000; 164 } } 166  $£nd_·ck‘ ( bt_amp * amp , cÚ¡ * d©a , ušt16_t Ën ) 168 ià( `wr™e ( amp -> vhci_fd , d©a , Ën ) < 0) 169 `årštf ( ¡d”r , "Writeo /dev/vhci failed\n"); 170 } } 172  $£nd_ev’t ( bt_amp * amp , ušt8_t ev’t , 173 cÚ¡ * d©a , ušt8_t Ën ) 175  bt_hci_evt_hdr * hdr ; 176 ušt16_t pkt_Ën ; 177 * pkt_d©a ; 179 pkt_Ën = 1 + (* hdr è+ Ën ; 181 pkt_d©a = `®loÿ ( pkt_Ën ); 182 ià(! pkt_d©a ) 185 (( ušt8_t *è pkt_d©a )[0] = BT_H4_EVT_PKT ; 187 hdr = pkt_d©a + 1; 188 hdr -> evt = ev’t ; 189 hdr -> ¶’ = Ën ; 191 ià( Ën > 0) 192 `memýy ( pkt_d©a + 1 + (* hdr ), d©a , Ën ); 194 `£nd_·ck‘ ( amp , pkt_d©a , pkt_Ën ); 195 } } 197  $cmd_com¶‘e ( bt_amp * amp , ušt16_t Ýcode , 198 cÚ¡ * d©a , ušt8_t Ën ) 200  bt_hci_evt_hdr * hdr ; 201  bt_hci_evt_cmd_com¶‘e * cc ; 202 ušt16_t pkt_Ën ; 203 * pkt_d©a ; 205 pkt_Ën = 1 + (* hdr è+ (* cc è+ Ën ; 207 pkt_d©a = `®loÿ ( pkt_Ën ); 208 ià(! pkt_d©a ) 211 (( ušt8_t *è pkt_d©a )[0] = BT_H4_EVT_PKT ; 213 hdr = pkt_d©a + 1; 214 hdr -> evt = BT_HCI_EVT_CMD_COMPLETE ; 215 hdr -> ¶’ = (* cc è+ Ën ; 217 cc = pkt_d©a + 1 + (* hdr ); 218 cc -> ncmd = 0x01; 219 cc -> Ýcode = `ýu_to_Ë16 (opcode); 221 ià( Ën > 0) 222 `memýy ( pkt_d©a + 1 + (* hdr è+ (* cc ), d©a , Ën ); 224 `£nd_·ck‘ ( amp , pkt_d©a , pkt_Ën ); 225 } } 227  $cmd_¡©us ( bt_amp * amp , ušt8_t ¡©us , ušt16_t Ýcode ) 229  bt_hci_evt_hdr * hdr ; 230  bt_hci_evt_cmd_¡©us * cs ; 231 ušt16_t pkt_Ën ; 232 * pkt_d©a ; 234 pkt_Ën = 1 + (* hdr è+ (* cs ); 236 pkt_d©a = `®loÿ ( pkt_Ën ); 237 ià(! pkt_d©a ) 240 (( ušt8_t *è pkt_d©a )[0] = BT_H4_EVT_PKT ; 242 hdr = pkt_d©a + 1; 243 hdr -> evt = BT_HCI_EVT_CMD_STATUS ; 244 hdr -> ¶’ = (* cs ); 246 cs = pkt_d©a + 1 + (* hdr ); 247 cs -> ¡©us = status; 248 cs -> ncmd = 0x01; 249 cs -> Ýcode = `ýu_to_Ë16 (opcode); 251 `£nd_·ck‘ ( amp , pkt_d©a , pkt_Ën ); 252 } } 254  $cmd_£t_ev’t_mask ( bt_amp * amp , 255 cÚ¡ * d©a , ušt8_t size ) 257 cÚ¡  bt_hci_cmd_£t_ev’t_mask * cmd = d©a ; 258 ušt8_t ¡©us ; 260 `memýy ( amp -> ev’t_mask , cmd -> mask , 8); 262 ¡©us = BT_HCI_ERR_SUCCESS ; 263 `cmd_com¶‘e ( amp , BT_HCI_CMD_SET_EVENT_MASK , & ¡©us , (status)); 264 } } 266  $cmd_»£t ( bt_amp * amp , cÚ¡ * d©a , ušt8_t size ) 268 ušt8_t ¡©us ; 270 `»£t_deçuÉs ( amp ); 272 amp -> loÿl_assoc [0] = 0x00; 273 amp -> loÿl_assoc_Ën = 1; 275 ¡©us = BT_HCI_ERR_SUCCESS ; 276 `cmd_com¶‘e ( amp , BT_HCI_CMD_RESET , & ¡©us , (status)); 277 } } 279  $cmd_»ad_loÿl_v”siÚ ( bt_amp * amp , 280 cÚ¡ * d©a , ušt8_t size ) 282  bt_hci_r¥_»ad_loÿl_v”siÚ r¥ ; 284 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 285 r¥ . hci_v” = 0x05; 286 r¥ . hci_»v = `ýu_to_Ë16 (0x0000); 287 r¥ . lmp_v” = 0x01; 288 r¥ . mªuçùu»r = `ýu_to_Ë16 ( amp ->manufacturer); 289 r¥ . lmp_subv” = `ýu_to_Ë16 (0x0000); 291 `cmd_com¶‘e ( amp , BT_HCI_CMD_READ_LOCAL_VERSION , & r¥ , (rsp)); 292 } } 294  $cmd_»ad_loÿl_commªds ( bt_amp * amp , 295 cÚ¡ * d©a , ušt8_t size ) 297  bt_hci_r¥_»ad_loÿl_commªds r¥ ; 299 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 300 `memýy ( r¥ . commªds , amp ->commands, 64); 302 `cmd_com¶‘e ( amp , BT_HCI_CMD_READ_LOCAL_COMMANDS , & r¥ , (rsp)); 303 } } 305  $cmd_»ad_loÿl_ã©u»s ( bt_amp * amp , 306 cÚ¡ * d©a , ušt8_t size ) 308  bt_hci_r¥_»ad_loÿl_ã©u»s r¥ ; 310 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 311 `memýy ( r¥ . ã©u»s , amp ->features, 8); 313 `cmd_com¶‘e ( amp , BT_HCI_CMD_READ_LOCAL_FEATURES , & r¥ , (rsp)); 314 } } 316  $cmd_»ad_bufãr_size ( bt_amp * amp , 317 cÚ¡ * d©a , ušt8_t size ) 319  bt_hci_r¥_»ad_bufãr_size r¥ ; 321 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 322 r¥ . aþ_mtu = `ýu_to_Ë16 (0x0000); 323 r¥ . sco_mtu = 0x00; 324 r¥ . aþ_max_pkt = `ýu_to_Ë16 (0x0000); 325 r¥ . sco_max_pkt = `ýu_to_Ë16 (0x0000); 327 `cmd_com¶‘e ( amp , BT_HCI_CMD_READ_BUFFER_SIZE , & r¥ , (rsp)); 328 } } 330  $evt_phy_lšk_com¶‘e ( bt_amp * amp ) 332  bt_hci_evt_phy_lšk_com¶‘e evt ; 334 evt . ¡©us = BT_HCI_ERR_SUCCESS ; 335 evt . phy_hªdË = amp ->phy_handle; 337 `£nd_ev’t ( amp , BT_HCI_EVT_PHY_LINK_COMPLETE , & evt , (evt)); 338 } } 340  $evt_discÚn_phy_lšk_com¶‘e ( bt_amp * amp , ušt8_t »asÚ ) 342  bt_hci_evt_discÚn_phy_lšk_com¶‘e evt ; 344 evt . ¡©us = BT_HCI_ERR_SUCCESS ; 345 evt . phy_hªdË = amp ->phy_handle; 346 evt . »asÚ =„eason; 348 `£nd_ev’t ( amp , BT_HCI_EVT_DISCONN_PHY_LINK_COMPLETE , 349 & evt , (evt)); 350 } } 352  $lšk_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 354  bt_amp * amp = u£r_d©a ; 356 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 357 `þo£ ( fd ); 358 `mašloÝ_»move_fd ( fd ); 360 `evt_discÚn_phy_lšk_com¶‘e ( amp , 0x13); 362 amp -> phy_mode = PHY_MODE_IDLE ; 363 amp -> phy_hªdË = 0x00; 366 } } 368  $cmd_ü—‹_phy_lšk ( bt_amp * amp , 369 cÚ¡ * d©a , ušt8_t size ) 371 cÚ¡  bt_hci_cmd_ü—‹_phy_lšk * cmd = d©a ; 373 ià( cmd -> phy_hªdË == 0x00) { 374 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , 375 BT_HCI_CMD_CREATE_PHY_LINK ); 379 ià( amp -> phy_mode !ð PHY_MODE_IDLE ) { 380 `cmd_¡©us ( amp , BT_HCI_ERR_COMMAND_DISALLOWED , 381 BT_HCI_CMD_CREATE_PHY_LINK ); 385 amp -> phy_mode = PHY_MODE_INITIATOR ; 386 amp -> phy_hªdË = cmd ->phy_handle; 388 `cmd_¡©us ( amp , BT_HCI_ERR_SUCCESS , BT_HCI_CMD_CREATE_PHY_LINK ); 389 } } 391  $cmd_acû±_phy_lšk ( bt_amp * amp , 392 cÚ¡ * d©a , ušt8_t size ) 394 cÚ¡  bt_hci_cmd_acû±_phy_lšk * cmd = d©a ; 396 ià( cmd -> phy_hªdË == 0x00) { 397 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , 398 BT_HCI_CMD_ACCEPT_PHY_LINK ); 402 ià( amp -> phy_mode !ð PHY_MODE_IDLE ) { 403 `cmd_¡©us ( amp , BT_HCI_ERR_COMMAND_DISALLOWED , 404 BT_HCI_CMD_ACCEPT_PHY_LINK ); 408 amp -> phy_mode = PHY_MODE_ACCEPTOR ; 409 amp -> phy_hªdË = cmd ->phy_handle; 411 `cmd_¡©us ( amp , BT_HCI_ERR_SUCCESS , BT_HCI_CMD_ACCEPT_PHY_LINK ); 412 } } 414  $cmd_discÚn_phy_lšk ( bt_amp * amp , 415 cÚ¡ * d©a , ušt8_t size ) 417 cÚ¡  bt_hci_cmd_discÚn_phy_lšk * cmd = d©a ; 419 ià( cmd -> phy_hªdË == 0x00) { 420 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , 421 BT_HCI_CMD_DISCONN_PHY_LINK ); 425 ià( amp -> phy_mode =ð PHY_MODE_IDLE ) { 426 `cmd_¡©us ( amp , BT_HCI_ERR_COMMAND_DISALLOWED , 427 BT_HCI_CMD_DISCONN_PHY_LINK ); 431 ià( cmd -> phy_hªdË !ð amp ->phy_handle) { 432 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , 433 BT_HCI_CMD_DISCONN_PHY_LINK ); 437 `cmd_¡©us ( amp , BT_HCI_ERR_SUCCESS , BT_HCI_CMD_DISCONN_PHY_LINK ); 439 `mašloÝ_»move_fd ( amp -> phylšk_fd ); 440 `þo£ ( amp -> phylšk_fd ); 442 `evt_discÚn_phy_lšk_com¶‘e ( amp , cmd -> »asÚ ); 444 amp -> phy_mode = PHY_MODE_IDLE ; 445 amp -> phy_hªdË = 0x00; 446 } } 448  $evt_logic_lšk_com¶‘e ( bt_amp * amp ) 450  bt_hci_evt_logic_lšk_com¶‘e evt ; 452 evt . ¡©us = BT_HCI_ERR_SUCCESS ; 453 evt . hªdË = `htobs ( amp -> logic_hªdË ); 454 evt . phy_hªdË = amp ->phy_handle; 455 evt . æow_¥ec = 0x00; 457 `£nd_ev’t ( amp , BT_HCI_EVT_LOGIC_LINK_COMPLETE , & evt , (evt)); 458 } } 460  $evt_discÚn_logic_lšk_com¶‘e ( bt_amp * amp , ušt8_t »asÚ ) 462  bt_hci_evt_discÚn_logic_lšk_com¶‘e evt ; 464 evt . ¡©us = BT_HCI_ERR_SUCCESS ; 465 evt . hªdË = `htobs ( amp -> logic_hªdË ); 466 evt . »asÚ =„eason; 468 `£nd_ev’t ( amp , BT_HCI_EVT_DISCONN_LOGIC_LINK_COMPLETE , 469 & evt , (evt)); 470 } } 472  $cmd_ü—‹_logic_lšk ( bt_amp * amp , 473 cÚ¡ * d©a , ušt8_t size ) 475 cÚ¡  bt_hci_cmd_ü—‹_logic_lšk * cmd = d©a ; 477 ià( cmd -> phy_hªdË == 0x00) { 478 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , 479 BT_HCI_CMD_CREATE_LOGIC_LINK ); 483 ià( amp -> phy_mode !ð PHY_MODE_IDLE ) { 484 `cmd_¡©us ( amp , BT_HCI_ERR_COMMAND_DISALLOWED , 485 BT_HCI_CMD_CREATE_LOGIC_LINK ); 489 ià( amp -> logic_hªdË != 0x00) { 490 `cmd_¡©us ( amp , BT_HCI_ERR_COMMAND_DISALLOWED , 491 BT_HCI_CMD_CREATE_LOGIC_LINK ); 495 `cmd_¡©us ( amp , BT_HCI_ERR_SUCCESS , BT_HCI_CMD_CREATE_LOGIC_LINK ); 497 amp -> logic_hªdË = 0x0042; 499 `evt_logic_lšk_com¶‘e ( amp ); 500 } } 502  $cmd_acû±_logic_lšk ( bt_amp * amp , 503 cÚ¡ * d©a , ušt8_t size ) 505 cÚ¡  bt_hci_cmd_acû±_logic_lšk * cmd = d©a ; 507 ià( cmd -> phy_hªdË == 0x00) { 508 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , 509 BT_HCI_CMD_ACCEPT_LOGIC_LINK ); 513 ià( amp -> phy_mode !ð PHY_MODE_IDLE ) { 514 `cmd_¡©us ( amp , BT_HCI_ERR_COMMAND_DISALLOWED , 515 BT_HCI_CMD_ACCEPT_LOGIC_LINK ); 519 ià( amp -> logic_hªdË != 0x00) { 520 `cmd_¡©us ( amp , BT_HCI_ERR_COMMAND_DISALLOWED , 521 BT_HCI_CMD_ACCEPT_LOGIC_LINK ); 525 `cmd_¡©us ( amp , BT_HCI_ERR_SUCCESS , BT_HCI_CMD_ACCEPT_LOGIC_LINK ); 527 amp -> logic_hªdË = 0x0023; 529 `evt_logic_lšk_com¶‘e ( amp ); 530 } } 532  $cmd_discÚn_logic_lšk ( bt_amp * amp , 533 cÚ¡ * d©a , ušt8_t size ) 535 cÚ¡  bt_hci_cmd_discÚn_logic_lšk * cmd = d©a ; 537 ià( cmd -> hªdË == 0x00) { 538 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , 539 BT_HCI_CMD_DISCONN_LOGIC_LINK ); 543 ià( cmd -> hªdË !ð amp -> logic_hªdË ) { 544 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , 545 BT_HCI_CMD_DISCONN_LOGIC_LINK ); 549 `cmd_¡©us ( amp , BT_HCI_ERR_SUCCESS , BT_HCI_CMD_DISCONN_LOGIC_LINK ); 551 `evt_discÚn_logic_lšk_com¶‘e ( amp , 0x13); 553 amp -> logic_hªdË = 0x0000; 554 } } 556  $cmd_logic_lšk_ÿnûl ( bt_amp * amp , 557 cÚ¡ * d©a , ušt8_t size ) 559 cÚ¡  bt_hci_cmd_logic_lšk_ÿnûl * cmd = d©a ; 560  bt_hci_r¥_logic_lšk_ÿnûl r¥ ; 562 ià( cmd -> phy_hªdË == 0x00) { 563 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , 564 BT_HCI_CMD_LOGIC_LINK_CANCEL ); 568 ià( amp -> phy_mode !ð PHY_MODE_IDLE ) { 569 `cmd_¡©us ( amp , BT_HCI_ERR_COMMAND_DISALLOWED , 570 BT_HCI_CMD_LOGIC_LINK_CANCEL ); 574 amp -> logic_hªdË = 0x0000; 576 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 577 r¥ . phy_hªdË = amp ->phy_handle; 578 r¥ . æow_¥ec = 0x00; 580 `cmd_com¶‘e ( amp , BT_HCI_CMD_LOGIC_LINK_CANCEL , & r¥ , (rsp)); 581 } } 583  $cmd_£t_ev’t_mask_·ge2 ( bt_amp * amp , 584 cÚ¡ * d©a , ušt8_t size ) 586 cÚ¡  bt_hci_cmd_£t_ev’t_mask_·ge2 * cmd = d©a ; 587 ušt8_t ¡©us ; 589 `memýy ( amp -> ev’t_mask + 8, cmd -> mask , 8); 591 ¡©us = BT_HCI_ERR_SUCCESS ; 592 `cmd_com¶‘e ( amp , BT_HCI_CMD_SET_EVENT_MASK_PAGE2 , 593 & ¡©us , (status)); 594 } } 596  $cmd_»ad_loÿtiÚ_d©a ( bt_amp * amp , 597 cÚ¡ * d©a , ušt8_t size ) 599  bt_hci_r¥_»ad_loÿtiÚ_d©a r¥ ; 601 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 602 r¥ . domaš_aw¬e = 0x00; 603 r¥ . domaš [0] = 0x58; 604 r¥ . domaš [1] = 0x58; 605 r¥ . domaš_ÝtiÚs = 0x58; 606 r¥ . ÝtiÚs = 0x00; 608 `cmd_com¶‘e ( amp , BT_HCI_CMD_READ_LOCATION_DATA , & r¥ , (rsp)); 609 } } 611  $cmd_wr™e_loÿtiÚ_d©a ( bt_amp * amp , 612 cÚ¡ * d©a , ušt8_t size ) 614 cÚ¡  bt_hci_cmd_wr™e_loÿtiÚ_d©a * cmd = d©a ; 615 ušt8_t ¡©us ; 617 ià( cmd -> domaš_aw¬e > 0x01) { 618 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , 619 BT_HCI_CMD_WRITE_LOCATION_DATA ); 623 ¡©us = BT_HCI_ERR_SUCCESS ; 624 `cmd_com¶‘e ( amp , BT_HCI_CMD_WRITE_LOCATION_DATA , 625 & ¡©us , (status)); 626 } } 628  $cmd_»ad_æow_cÚŒÞ_mode ( bt_amp * amp , 629 cÚ¡ * d©a , ušt8_t size ) 631  bt_hci_r¥_»ad_æow_cÚŒÞ_mode r¥ ; 633 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 634 r¥ . mode = 0x01; 636 `cmd_com¶‘e ( amp , BT_HCI_CMD_READ_FLOW_CONTROL_MODE , 637 & r¥ , (rsp)); 638 } } 640  $cmd_wr™e_æow_cÚŒÞ_mode ( bt_amp * amp , 641 cÚ¡ * d©a , ušt8_t size ) 643 cÚ¡  bt_hci_cmd_wr™e_æow_cÚŒÞ_mode * cmd = d©a ; 644 ušt8_t ¡©us ; 646 ià( cmd -> mode != 0x01) { 647 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , 648 BT_HCI_CMD_WRITE_FLOW_CONTROL_MODE ); 652 ¡©us = BT_HCI_ERR_SUCCESS ; 653 `cmd_com¶‘e ( amp , BT_HCI_CMD_WRITE_FLOW_CONTROL_MODE , 654 & ¡©us , (status)); 655 } } 657  $cmd_»ad_d©a_block_size ( bt_amp * amp , 658 cÚ¡ * d©a , ušt8_t size ) 660  bt_hci_r¥_»ad_d©a_block_size r¥ ; 662 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 663 r¥ . max_aþ_Ën = `ýu_to_Ë16 (1492); 664 r¥ . block_Ën = `ýu_to_Ë16 (1492); 665 r¥ . num_blocks = `ýu_to_Ë16 (1); 667 `cmd_com¶‘e ( amp , BT_HCI_CMD_READ_DATA_BLOCK_SIZE , & r¥ , (rsp)); 668 } } 670  $cmd_»ad_loÿl_amp_šfo ( bt_amp * amp , 671 cÚ¡ * d©a , ušt8_t size ) 673  bt_hci_r¥_»ad_loÿl_amp_šfo r¥ ; 675 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 676 r¥ . amp_¡©us = amp ->amp_status; 677 r¥ . tÙ®_bw = `ýu_to_Ë32 (24000); 678 r¥ . max_bw = `ýu_to_Ë32 (24000); 679 r¥ . mš_Ï‹ncy = `ýu_to_Ë32 (100); 680 r¥ . max_pdu = `ýu_to_Ë32 (1492); 681 r¥ . amp_ty³ = amp ->amp_type; 682 r¥ . ·l_ÿp = `ýu_to_Ë16 (0x0001); 683 r¥ . max_assoc_Ën = `ýu_to_Ë16 ( MAX_ASSOC_LEN ); 684 r¥ . max_æush_to = `ýu_to_Ë32 (20000); 685 r¥ . be_æush_to = `ýu_to_Ë32 (20000); 687 `cmd_com¶‘e ( amp , BT_HCI_CMD_READ_LOCAL_AMP_INFO , & r¥ , (rsp)); 688 } } 690  $cmd_»ad_loÿl_amp_assoc ( bt_amp * amp , 691 cÚ¡ * d©a , ušt8_t size ) 693 cÚ¡  bt_hci_cmd_»ad_loÿl_amp_assoc * cmd = d©a ; 694  bt_hci_r¥_»ad_loÿl_amp_assoc r¥ ; 695 ušt16_t Ën_so_çr , »maš_assoc_Ën , äagm’t_Ën ; 697 ià( cmd -> phy_hªdË !ð amp ->phy_handle) { 698 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , 699 BT_HCI_CMD_READ_LOCAL_AMP_ASSOC ); 703 Ën_so_çr = `Ë16_to_ýu ( cmd ->len_so_far); 704 »maš_assoc_Ën = amp -> loÿl_assoc_Ën - Ën_so_çr ; 705 äagm’t_Ën = »maš_assoc_Ën > 248 ? 248 :„emain_assoc_len; 707 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 708 r¥ . phy_hªdË = cmd ->phy_handle; 709 r¥ . »maš_assoc_Ën = `ýu_to_Ë16 (remain_assoc_len); 710 `memýy ( r¥ . assoc_äagm’t , amp -> loÿl_assoc + Ën_so_çr , 711 äagm’t_Ën ); 713 `cmd_com¶‘e ( amp , BT_HCI_CMD_READ_LOCAL_AMP_ASSOC , 714 & r¥ , 4 + äagm’t_Ën ); 715 } } 717  $ü—‹_unix_£rv” (cÚ¡ * ·th ) 719  sockaddr_un addr ; 720  fd ; 722 fd = `sock‘ ( PF_UNIX , SOCK_SEQPACKET , 0); 723 ià( fd < 0) 726 `mem£t (& addr , 0, (addr)); 727 addr . sun_çmžy = AF_UNIX ; 728 addr . sun_·th [0] = '\0'; 729 `¡rýy ( addr . sun_·th + 1, ·th ); 731 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 732 `þo£ ( fd ); 736 ià( `li¡’ ( fd , 1) < 0) { 737 `þo£ ( fd ); 741  fd ; 742 } } 744  $cÚÃù_unix_þ›Á (cÚ¡ * ·th ) 746  sockaddr_un addr ; 747  fd ; 749 fd = `sock‘ ( PF_UNIX , SOCK_SEQPACKET | SOCK_CLOEXEC | SOCK_NONBLOCK , 0); 750 ià( fd < 0) 753 `mem£t (& addr , 0, (addr)); 754 addr . sun_çmžy = AF_UNIX ; 755 addr . sun_·th [0] = '\0'; 756 `¡rýy ( addr . sun_·th + 1, ·th ); 758 ià( `cÚÃù ( fd , ( sockaddr *è& addr , (addr)) < 0) { 759 `þo£ ( fd ); 763  fd ; 764 } } 766  $acû±_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 768  bt_amp * amp = u£r_d©a ; 769  sockaddr_un addr ; 770 sockËn_t Ën ; 771  Ãw_fd ; 773 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 774 `mašloÝ_»move_fd ( fd ); 778 `mem£t (& addr , 0, (addr)); 779 Ën = ( addr ); 781 Ãw_fd = `acû±4 ( fd , ( sockaddr *è& addr , & Ën , 782 SOCK_CLOEXEC | SOCK_NONBLOCK ); 783 ià( Ãw_fd < 0) 786 `mašloÝ_»move_fd ( fd ); 787 `þo£ ( fd ); 789 amp -> phylšk_fd = Ãw_fd ; 791 `evt_phy_lšk_com¶‘e ( amp ); 793 `mašloÝ_add_fd ( Ãw_fd , EPOLLIN , lšk_ÿÎback , amp , NULL ); 794 } } 796  $cÚÃù_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 798  bt_amp * amp = u£r_d©a ; 800 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 801 `mašloÝ_»move_fd ( fd ); 805 `mašloÝ_»move_fd ( fd ); 807 `evt_phy_lšk_com¶‘e ( amp ); 809 `mašloÝ_add_fd ( fd , EPOLLIN , lšk_ÿÎback , amp , NULL ); 810 } } 812  $cmd_wr™e_»mÙe_amp_assoc ( bt_amp * amp , 813 cÚ¡ * d©a , ušt8_t size ) 815 cÚ¡  bt_hci_cmd_wr™e_»mÙe_amp_assoc * cmd = d©a ; 816  bt_hci_r¥_wr™e_»mÙe_amp_assoc r¥ ; 817  fd ; 819 ià( cmd -> phy_hªdË == 0x00) { 820 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , 821 BT_HCI_CMD_WRITE_REMOTE_AMP_ASSOC ); 825 ià( cmd -> phy_hªdË !ð amp ->phy_handle) { 826 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , 827 BT_HCI_CMD_WRITE_REMOTE_AMP_ASSOC ); 831  amp -> phy_mode ) { 832  PHY_MODE_INITIATOR : 833 `¡rýy ( amp -> phylšk_·th , "amp"); 835 fd = `ü—‹_unix_£rv” ( amp -> phylšk_·th ); 836 ià( fd < 0) { 837 `cmd_¡©us ( amp , BT_HCI_ERR_UNSPECIFIED_ERROR , 838 BT_HCI_CMD_WRITE_REMOTE_AMP_ASSOC ); 842 amp -> loÿl_assoc [0] = 0x01; 843 `memýy ( amp -> loÿl_assoc + 1,‡mp-> phylšk_·th , 844 `¡¾’ ( amp -> phylšk_·th ) + 1); 845 amp -> loÿl_assoc_Ën = `¡¾’ ×mp-> phylšk_·th ) + 2; 847 `mašloÝ_add_fd ( fd , EPOLLIN , acû±_ÿÎback , amp , NULL ); 849 amp -> phylšk_fd = fd ; 852  PHY_MODE_ACCEPTOR : 853 ià( cmd -> assoc_äagm’t [0] != 0x01) { 854 `cmd_¡©us ( amp , BT_HCI_ERR_UNSPECIFIED_ERROR , 855 BT_HCI_CMD_WRITE_REMOTE_AMP_ASSOC ); 859 `memýy ( amp -> phylšk_·th , cmd -> assoc_äagm’t + 1, 860 cmd -> »maš_assoc_Ën - 1); 862 fd = `cÚÃù_unix_þ›Á ( amp -> phylšk_·th ); 863 ià( fd < 0) { 864 `cmd_¡©us ( amp , BT_HCI_ERR_UNSPECIFIED_ERROR , 865 BT_HCI_CMD_WRITE_REMOTE_AMP_ASSOC ); 869 `mašloÝ_add_fd ( fd , EPOLLOUT , cÚÃù_ÿÎback , amp , NULL ); 871 amp -> phylšk_fd = fd ; 875 `cmd_¡©us ( amp , BT_HCI_ERR_COMMAND_DISALLOWED , 876 BT_HCI_CMD_WRITE_REMOTE_AMP_ASSOC ); 880 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 881 r¥ . phy_hªdË = amp ->phy_handle; 883 `cmd_com¶‘e ( amp , BT_HCI_CMD_WRITE_REMOTE_AMP_ASSOC , & r¥ , (rsp)); 885 ià( amp -> phy_mode =ð PHY_MODE_INITIATOR ) { 886  bt_hci_evt_chªÃl_£Ëùed evt ; 888 evt . phy_hªdË = amp ->phy_handle; 890 `£nd_ev’t ( amp , BT_HCI_EVT_CHANNEL_SELECTED , & evt , (evt)); 892 } } 895 ušt16_t mÝcode ; 896 (* mfunc è( bt_amp * mamp , cÚ¡ * md©a , ušt8_t msize ); 897 ušt8_t msize ; 898 boÞ mfixed ; 899 } gcmd_bË [] = { 900 { BT_HCI_CMD_SET_EVENT_MASK , cmd_£t_ev’t_mask , 8, Œue }, 901 { BT_HCI_CMD_RESET , cmd_»£t , 0, Œue }, 902 { BT_HCI_CMD_READ_LOCAL_VERSION , cmd_»ad_loÿl_v”siÚ , 0, Œue }, 903 { BT_HCI_CMD_READ_LOCAL_COMMANDS , cmd_»ad_loÿl_commªds , 0, Œue }, 904 { BT_HCI_CMD_READ_LOCAL_FEATURES , cmd_»ad_loÿl_ã©u»s , 0, Œue }, 905 { BT_HCI_CMD_READ_BUFFER_SIZE , cmd_»ad_bufãr_size , 0, Œue }, 907 { BT_HCI_CMD_CREATE_PHY_LINK , 908 cmd_ü—‹_phy_lšk , 3, çl£ }, 909 { BT_HCI_CMD_ACCEPT_PHY_LINK , 910 cmd_acû±_phy_lšk , 3, çl£ }, 911 { BT_HCI_CMD_DISCONN_PHY_LINK , 912 cmd_discÚn_phy_lšk , 2, Œue }, 913 { BT_HCI_CMD_CREATE_LOGIC_LINK , 914 cmd_ü—‹_logic_lšk , 33, Œue }, 915 { BT_HCI_CMD_ACCEPT_LOGIC_LINK , 916 cmd_acû±_logic_lšk , 33, Œue }, 917 { BT_HCI_CMD_DISCONN_LOGIC_LINK , 918 cmd_discÚn_logic_lšk , 2, Œue }, 919 { BT_HCI_CMD_LOGIC_LINK_CANCEL , 920 cmd_logic_lšk_ÿnûl , 2, Œue }, 921 { BT_HCI_CMD_SET_EVENT_MASK_PAGE2 , 922 cmd_£t_ev’t_mask_·ge2 , 8, Œue }, 923 { BT_HCI_CMD_READ_LOCATION_DATA , 924 cmd_»ad_loÿtiÚ_d©a , 0, Œue }, 925 { BT_HCI_CMD_WRITE_LOCATION_DATA , 926 cmd_wr™e_loÿtiÚ_d©a , 5, Œue }, 927 { BT_HCI_CMD_READ_FLOW_CONTROL_MODE , 928 cmd_»ad_æow_cÚŒÞ_mode , 0, Œue }, 929 { BT_HCI_CMD_WRITE_FLOW_CONTROL_MODE , 930 cmd_wr™e_æow_cÚŒÞ_mode , 1, Œue }, 931 { BT_HCI_CMD_READ_DATA_BLOCK_SIZE , 932 cmd_»ad_d©a_block_size , 0, Œue }, 933 { BT_HCI_CMD_READ_LOCAL_AMP_INFO , 934 cmd_»ad_loÿl_amp_šfo , 0, Œue }, 935 { BT_HCI_CMD_READ_LOCAL_AMP_ASSOC , 936 cmd_»ad_loÿl_amp_assoc , 5, Œue }, 937 { BT_HCI_CMD_WRITE_REMOTE_AMP_ASSOC , 938 cmd_wr™e_»mÙe_amp_assoc , 6, çl£ }, 942  $´oûss_commªd ( bt_amp * amp , cÚ¡ * d©a , size_t size ) 944 cÚ¡  bt_hci_cmd_hdr * hdr = d©a ; 945 ušt16_t Ýcode ; 946  i ; 948 ià( size < (* hdr )) 951 d©a +ð(* hdr ); 952 size -ð(* hdr ); 954 Ýcode = `Ë16_to_ýu ( hdr ->opcode); 956 ià( hdr -> ¶’ !ð size ) { 957 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , Ýcode ); 961  i = 0; cmd_bË [i]. func ; i++) { 962 ià( cmd_bË [ i ]. Ýcode != opcode) 965 ià(( cmd_bË [ i ]. fixed && size != cmd_table[i].size) || 966 size < cmd_bË [ i ].size) { 967 `cmd_¡©us ( amp , BT_HCI_ERR_INVALID_PARAMETERS , Ýcode ); 971 cmd_bË [ i ]. `func ( amp , d©a , size ); 975 `cmd_¡©us ( amp , BT_HCI_ERR_UNKNOWN_COMMAND , Ýcode ); 976 } } 978  $vhci_»ad_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 980  bt_amp * amp = u£r_d©a ; 981  buf [4096]; 982 ssize_t Ën ; 984 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) 987 Ën = `»ad ( amp -> vhci_fd , buf , (buf)); 988 ià( Ën < 1) 991  buf [0]) { 992  BT_H4_CMD_PKT : 993 `´oûss_commªd ( amp , buf + 1, Ën - 1); 996 } } 998  bt_amp * $bt_amp_Ãw () 1000  £tup_cmd [2]; 1001  bt_amp * amp ; 1003 amp = `ÿÎoc (1, (*amp)); 1004 ià(! amp ) 1005  NULL ; 1007 `»£t_deçuÉs ( amp ); 1009 amp -> vhci_fd = `Ý’ ("/dev/vhci", O_RDWR ); 1010 ià( amp -> vhci_fd < 0) { 1011 `ä“ ( amp ); 1012  NULL ; 1015 £tup_cmd [0] = HCI_VENDOR_PKT ; 1016 £tup_cmd [1] = HCI_AMP ; 1018 ià( `wr™e ( amp -> vhci_fd , £tup_cmd , (setup_cmd)) < 0) { 1019 `þo£ ( amp -> vhci_fd ); 1020 `ä“ ( amp ); 1021  NULL ; 1024 `mašloÝ_add_fd ( amp -> vhci_fd , EPOLLIN , vhci_»ad_ÿÎback ,‡mp, NULL ); 1026  `bt_amp_»f ( amp ); 1027 } } 1029  bt_amp * $bt_amp_»f ( bt_amp * amp ) 1031 ià(! amp ) 1032  NULL ; 1034 `__sync_ãtch_ªd_add (& amp -> »f_couÁ , 1); 1036  amp ; 1037 } } 1039  $bt_amp_uÄef ( bt_amp * amp ) 1041 ià(! amp ) 1044 ià( `__sync_sub_ªd_ãtch (& amp -> »f_couÁ , 1)) 1047 `mašloÝ_»move_fd ( amp -> vhci_fd ); 1049 `þo£ ( amp -> vhci_fd ); 1051 `ä“ ( amp ); 1052 } } @emulator/amp.h 25  ~<¡dboÞ.h > 27  gbt_amp ; 29  bt_amp * bt_amp_Ãw (); 31  bt_amp * bt_amp_»f (bt_am°* amp ); 32  bt_amp_uÄef ( bt_amp * amp ); @emulator/b1ee.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 36  ~<Ãtdb.h > 37  ~<¬·/š‘.h > 39  ~ 40  ~ 42  ~"mÚ™Ü/mašloÝ.h " 44  #DEFAULT_SERVER "b1“.com" ) 45  #DEFAULT_HOST_PORT "45550" ) 46  #DEFAULT_SNIFFER_PORT "45551" ) 48  g¢ifãr_fd ; 49  g£rv”_fd ; 50  gvhci_fd ; 52  $¢ifãr_»ad_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 54  ušt8_t buf [4096]; 55 ssize_t Ën ; 57 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) 60 agaš : 61 Ën = `»cv ( fd , buf , (buf), MSG_DONTWAIT ); 62 ià( Ën < 0) { 63 ià( ”ºo =ð EAGAIN ) 64  agaš ; 68 `´štf ("Snif㸻ûived: %z˜by‹s\n", Ën ); 69 } } 71  ušt8_t * g£rv”_pkt_d©a ; 72  ušt8_t g£rv”_pkt_ty³ ; 73  ušt16_t g£rv”_pkt_ex³ù ; 74  ušt16_t g£rv”_pkt_Ën ; 75  ušt16_t g£rv”_pkt_off£t ; 77  $£rv”_»ad_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 79  ušt8_t buf [4096]; 80 ušt8_t * ±r = buf ; 81 ssize_t Ën ; 82 ušt16_t couÁ ; 84 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) 87 agaš : 88 Ën = `»cv ( fd , buf + £rv”_pkt_off£t , 89 ( buf è- £rv”_pkt_off£t , MSG_DONTWAIT ); 90 ià( Ën < 0) { 91 ià( ”ºo =ð EAGAIN ) 92  agaš ; 96 couÁ = £rv”_pkt_off£t + Ën ; 98  couÁ > 0) { 99 hci_ev’t_hdr * evt_hdr ; 101 ià(! £rv”_pkt_d©a ) { 102 £rv”_pkt_ty³ = ±r [0]; 104  £rv”_pkt_ty³ ) { 105  HCI_EVENT_PKT : 106 ià( couÁ < HCI_EVENT_HDR_SIZE + 1) { 107 £rv”_pkt_off£t +ð Ën ; 110 evt_hdr = ( hci_ev’t_hdr *è( ±r + 1); 111 £rv”_pkt_ex³ù = HCI_EVENT_HDR_SIZE + 112 evt_hdr -> ¶’ + 1; 113 £rv”_pkt_d©a = `m®loc ( £rv”_pkt_ex³ù ); 114 £rv”_pkt_Ën = 0; 117 `årštf ( ¡d”r , "Unknown…acket from server\n"); 121 £rv”_pkt_off£t = 0; 124 ià( couÁ >ð £rv”_pkt_ex³ù ) { 125 ssize_t wr™‹n ; 127 `memýy ( £rv”_pkt_d©a + £rv”_pkt_Ën , 128 ±r , £rv”_pkt_ex³ù ); 129 ±r +ð £rv”_pkt_ex³ù ; 130 couÁ -ð £rv”_pkt_ex³ù ; 132 wr™‹n = `wr™e ( vhci_fd , £rv”_pkt_d©a , 133 £rv”_pkt_Ën + £rv”_pkt_ex³ù ); 134 ià( wr™‹n !ð £rv”_pkt_Ën + £rv”_pkt_ex³ù ) 135 `årštf ( ¡d”r , "Writeo /dev/vhci failed\n"); 137 `ä“ ( £rv”_pkt_d©a ); 138 £rv”_pkt_d©a = NULL ; 140 `memýy ( £rv”_pkt_d©a + £rv”_pkt_Ën , ±r , couÁ ); 141 £rv”_pkt_Ën +ð couÁ ; 142 £rv”_pkt_ex³ù -ð couÁ ; 143 couÁ = 0; 146 } } 148  $vhci_»ad_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 150  buf [4096]; 151 ssize_t Ën , wr™‹n ; 153 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) 156 Ën = `»ad ( fd , buf , (buf)); 157 ià( Ën < 0) 160 wr™‹n = `wr™e ( £rv”_fd , buf , Ën ); 161 ià( wr™‹n !ð Ën ) 162 `årštf ( ¡d”r , "Writeo server failed\n"); 163 } } 165  $sigÇl_ÿÎback ( signum , * u£r_d©a ) 167  signum ) { 168  SIGINT : 169  SIGTERM : 170 `mašloÝ_qu™ (); 173 } } 175  $do_cÚÃù (cÚ¡ * node , cÚ¡ * £rviû ) 177  addršfo hšts ; 178  addršfo * šfo , * »s ; 179  ”r , fd = -1; 181 `mem£t (& hšts , 0, (hints)); 182 hšts . ai_çmžy = PF_UNSPEC ; 183 hšts . ai_sockty³ = SOCK_STREAM ; 185 ”r = `g‘addršfo ( DEFAULT_SERVER , DEFAULT_HOST_PORT , & hšts , & »s ); 186 ià( ”r ) { 187 `³¼Ü ( `gai_¡»¼Ü ( ”r )); 188 `ex™ (1); 191  šfo = »s ; info; infØðšfo-> ai_Ãxt ) { 192  ¡r [ INET6_ADDRSTRLEN ]; 194 `š‘_ÁÝ ( šfo -> ai_çmžy , info-> ai_addr -> §_d©a , 195 ¡r , (str)); 197 fd = `sock‘ ( šfo -> ai_çmžy , info-> ai_sockty³ , 198 šfo -> ai_´ÙocÞ ); 199 ià( fd < 0) 202 `´štf ("TryšgØcÚÃùØ% Ú…܈%s\n", ¡r , £rviû ); 204 ià( `cÚÃù ( fd , »s -> ai_addr ,„es-> ai_add¾’ ) < 0) { 205 `³¼Ü ("Failedo connect"); 206 `þo£ ( fd ); 210 `´štf ("Successfully connectedo %s on…ort %s\n", 211 ¡r , £rviû ); 215 `ä“addršfo ( »s ); 217 ià( »s =ð NULL ) 218 `ex™ (1); 220  fd ; 221 } } 223  $maš ( ¬gc , * ¬gv []) 225 cÚ¡  ¢iff_cmd [] = { 0x01, 0x00, 227 ssize_t wr™‹n ; 228 sig£t_t mask ; 230 £rv”_fd = `do_cÚÃù ( DEFAULT_SERVER , DEFAULT_HOST_PORT ); 231 ¢ifãr_fd = `do_cÚÃù ( DEFAULT_SERVER , DEFAULT_SNIFFER_PORT ); 233 wr™‹n = `wr™e ( ¢ifãr_fd , ¢iff_cmd , (sniff_cmd)); 234 ià( wr™‹n < 0) 235 `³¼Ü ("Failedoƒnable sniffer"); 237 vhci_fd = `Ý’ ("/dev/vhci", O_RDWR | O_NONBLOCK ); 238 ià( vhci_fd < 0) { 239 `³¼Ü ("Failedo /dev/vhci"); 240 `þo£ ( £rv”_fd ); 241 `ex™ (1); 244 `mašloÝ_š™ (); 246 `sigem±y£t (& mask ); 247 `sigadd£t (& mask , SIGINT ); 248 `sigadd£t (& mask , SIGTERM ); 250 `mašloÝ_£t_sigÇl (& mask , sigÇl_ÿÎback , NULL , NULL); 252 `mašloÝ_add_fd ( ¢ifãr_fd , EPOLLIN , ¢ifãr_»ad_ÿÎback , NULL , NULL); 253 `mašloÝ_add_fd ( £rv”_fd , EPOLLIN , £rv”_»ad_ÿÎback , NULL , NULL); 254 `mašloÝ_add_fd ( vhci_fd , EPOLLIN , vhci_»ad_ÿÎback , NULL , NULL); 256  `mašloÝ_run (); 257 } } @emulator/btdev.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<ùy³.h > 31  ~<¡dlib.h > 32  ~<¡ršg.h > 33  ~<®loÿ.h > 34  ~ 36  ~"¤c/sh¬ed/utž.h " 37  ~"¤c/sh¬ed/timeout.h " 38  ~"mÚ™Ü/bt.h " 39  ~"btdev.h " 41  #has_b»dr ( btdev è(!((btdev)-> ã©u»s [4] & 0x20)) ) 42  #has_Ë ( btdev è(!!((btdev)-> ã©u»s [4] & 0x40)) ) 44  shook { 45 btdev_hook_func mhªdËr ; 46 * mu£r_d©a ; 47 btdev_hook_ty³ mty³ ; 48 ušt16_t mÝcode ; 51  #MAX_HOOK_ENTRIES 16 ) 53  sbtdev { 54 btdev_ty³ mty³ ; 56  btdev * mcÚn ; 58 boÞ mauth_š™ ; 59 ušt8_t mlšk_key [16]; 60 ušt16_t mpš [16]; 61 ušt8_t mpš_Ën ; 62 ušt8_t mio_ÿp ; 63 ušt8_t mauth_»q ; 64 boÞ ms¥_auth_com¶‘e ; 65 ušt8_t ms¥_¡©us ; 67 btdev_commªd_func mcommªd_hªdËr ; 68 * mcommªd_d©a ; 70 btdev_£nd_func m£nd_hªdËr ; 71 * m£nd_d©a ; 73  mšquœy_id ; 74  mšquœy_timeout_id ; 76  hook * mhook_li¡ [ MAX_HOOK_ENTRIES ]; 78 ušt16_t mmªuçùu»r ; 79 ušt8_t mv”siÚ ; 80 ušt16_t m»visiÚ ; 81 ušt8_t mcommªds [64]; 82 ušt8_t mmax_·ge ; 83 ušt8_t mã©u»s [8]; 84 ušt8_t mã©_·ge_2 [8]; 85 ušt16_t maþ_mtu ; 86 ušt16_t maþ_max_pkt ; 87 ušt8_t mcouÁry_code ; 88 ušt8_t mbdaddr [6]; 89 ušt8_t m¿ndom_addr [6]; 90 ušt8_t mË_ã©u»s [8]; 91 ušt8_t mË_¡©es [8]; 93 ušt16_t mdeçuÉ_lšk_pÞicy ; 94 ušt8_t mev’t_mask [8]; 95 ušt8_t mev’t_mask_·ge2 [8]; 96 ušt8_t mev’t_fž‹r ; 97 ušt8_t mÇme [248]; 98 ušt8_t mdev_þass [3]; 99 ušt16_t mvoiû_£‰šg ; 100 ušt16_t mcÚn_acû±_timeout ; 101 ušt16_t m·ge_timeout ; 102 ušt8_t msÿn_’abË ; 103 ušt16_t m·ge_sÿn_š‹rv® ; 104 ušt16_t m·ge_sÿn_wšdow ; 105 ušt16_t m·ge_sÿn_ty³ ; 106 ušt8_t mauth_’abË ; 107 ušt16_t mšquœy_sÿn_š‹rv® ; 108 ušt16_t mšquœy_sÿn_wšdow ; 109 ušt8_t mšquœy_mode ; 110 ušt8_t mafh_as£ssm’t_mode ; 111 ušt8_t mext_šquœy_ãc ; 112 ušt8_t mext_šquœy_r¥ [240]; 113 ušt8_t msim¶e_·œšg_mode ; 114 ušt8_t ms¥_debug_mode ; 115 ušt8_t m£cu»_cÚn_suµÜt ; 116 ušt8_t mË_suµÜ‹d ; 117 ušt8_t mË_simuɪeous ; 118 ušt8_t mË_ev’t_mask [8]; 119 ušt8_t mË_adv_d©a [31]; 120 ušt8_t mË_adv_d©a_Ën ; 121 ušt8_t mË_adv_ty³ ; 122 ušt8_t mË_adv_own_addr ; 123 ušt8_t mË_adv_dœeù_addr_ty³ ; 124 ušt8_t mË_adv_dœeù_addr [6]; 125 ušt8_t mË_sÿn_d©a [31]; 126 ušt8_t mË_sÿn_d©a_Ën ; 127 ušt8_t mË_sÿn_’abË ; 128 ušt8_t mË_sÿn_ty³ ; 129 ušt8_t mË_sÿn_own_addr_ty³ ; 130 ušt8_t mË_fž‹r_dup ; 131 ušt8_t mË_adv_’abË ; 132 ušt8_t mË_Ék [16]; 134 ušt16_t msync_Œaš_š‹rv® ; 135 ušt32_t msync_Œaš_timeout ; 136 ušt8_t msync_Œaš_£rviû_d©a ; 139  sšquœy_d©a { 140  btdev * mbtdev ; 141  mnum_»¥ ; 143  m£Á_couÁ ; 144  m™” ; 147  #DEFAULT_INQUIRY_INTERVAL 100 ) 149  #MAX_BTDEV_ENTRIES 16 ) 151 cÚ¡ ušt8_t gLINK_KEY_NONE [16] = { 0 }; 152 cÚ¡ ušt8_t gLINK_KEY_DUMMY [16] = { 0, 1, 2, 3, 4, 5, 6, 7, 155  btdev * gbtdev_li¡ [ MAX_BTDEV_ENTRIES ] = { }; 157  $g‘_hook_šdex ( btdev *btdev, btdev_hook_ty³ ty³ , 158 ušt16_t Ýcode ) 160  i ; 162  i = 0; i < MAX_HOOK_ENTRIES ; i++) { 163 ià( btdev -> hook_li¡ [ i ] =ð NULL ) 166 ià( btdev -> hook_li¡ [ i ]-> ty³ ==ype && 167 btdev -> hook_li¡ [ i ]-> Ýcode == opcode) 168  i ; 172 } } 174  boÞ $run_hooks ( btdev *btdev, btdev_hook_ty³ ty³ , 175 ušt16_t Ýcode , cÚ¡ * d©a , ušt16_ˆ Ën ) 177  šdex = `g‘_hook_šdex ( btdev , ty³ , Ýcode ); 178 ià( šdex < 0) 179  Œue ; 181  btdev -> hook_li¡ [ šdex ]-> `hªdËr ( d©a , Ën , 182 btdev -> hook_li¡ [ šdex ]-> u£r_d©a ); 183 } } 185  šlše  $add_btdev ( btdev *btdev) 187  i , šdex = -1; 189  i = 0; i < MAX_BTDEV_ENTRIES ; i++) { 190 ià( btdev_li¡ [ i ] =ð NULL ) { 191 šdex = i ; 192 btdev_li¡ [ šdex ] = btdev ; 197  šdex ; 198 } } 200  šlše  $d–_btdev ( btdev *btdev) 202  i , šdex = -1; 204  i = 0; i < MAX_BTDEV_ENTRIES ; i++) { 205 ià( btdev_li¡ [ i ] =ð btdev ) { 206 šdex = i ; 207 btdev_li¡ [ šdex ] = NULL ; 212  šdex ; 213 } } 215  šlše  btdev * $fšd_btdev_by_bdaddr (cÚ¡ ušt8_t * bdaddr ) 217  i ; 219  i = 0; i < MAX_BTDEV_ENTRIES ; i++) { 220 ià( btdev_li¡ [ i ] && ! `memcmp (btdev_li¡[i]-> bdaddr , bdaddr, 6)) 221  btdev_li¡ [ i ]; 224  NULL ; 225 } } 227  šlše  btdev * $fšd_btdev_by_bdaddr_ty³ (cÚ¡ ušt8_t * bdaddr , 228 ušt8_t bdaddr_ty³ ) 230  i ; 232  i = 0; i < MAX_BTDEV_ENTRIES ; i++) { 233  cmp ; 235 ià(! btdev_li¡ [ i ]) 238 ià( bdaddr_ty³ == 0x01) 239 cmp = `memcmp ( btdev_li¡ [ i ]-> ¿ndom_addr , bdaddr , 6); 241 cmp = `memcmp ( btdev_li¡ [ i ]-> bdaddr , bdaddr, 6); 243 ià(! cmp ) 244  btdev_li¡ [ i ]; 247  NULL ; 248 } } 250  $hexdump (cÚ¡ * buf , ušt16_t Ën ) 252 cÚ¡  hexdig™s [] = "0123456789abcdef"; 253  ¡r [68]; 254 ušt16_t i ; 256 ià(! Ën ) 259  i = 0; i < Ën ; i++) { 260 ¡r [(( i % 16è* 3è+ 0] = hexdig™s [ buf [i] >> 4]; 261 ¡r [(( i % 16è* 3è+ 1] = hexdig™s [ buf [i] & 0xf]; 262 ¡r [(( i % 16) * 3) + 2] = ' '; 263 ¡r [( i % 16è+ 49] = `i¥ršt ( buf [i]) ? buf[i] : '.'; 265 ià(( i + 1) % 16 == 0) { 266 ¡r [47] = ' '; 267 ¡r [48] = ' '; 268 ¡r [65] = '\0'; 269 `´štf ("%-12c%s\n", ' ', ¡r ); 270 ¡r [0] = ' '; 274 ià( i % 16 > 0) { 275 ušt16_t j ; 276  j = ( i % 16); j < 16; j++) { 277 ¡r [( j * 3) + 0] = ' '; 278 ¡r [( j * 3) + 1] = ' '; 279 ¡r [( j * 3) + 2] = ' '; 280 ¡r [ j + 49] = ' '; 282 ¡r [47] = ' '; 283 ¡r [48] = ' '; 284 ¡r [65] = '\0'; 285 `´štf ("%-12c%s\n", ' ', ¡r ); 287 } } 289  $g‘_bdaddr ( ušt16_t id , ušt8_t šdex , ušt8_ˆ* bdaddr ) 291 bdaddr [0] = id & 0xff; 292 bdaddr [1] = id >> 8; 293 bdaddr [2] = šdex ; 294 bdaddr [3] = 0x01; 295 bdaddr [4] = 0xaa; 296 bdaddr [5] = 0x00; 297 } } 299  $£t_commÚ_commªds_®l ( btdev *btdev) 301 btdev -> commªds [5] |= 0x40; 302 btdev -> commªds [5] |= 0x80; 303 btdev -> commªds [14] |= 0x08; 304 btdev -> commªds [14] |= 0x10; 305 btdev -> commªds [14] |= 0x20; 306 btdev -> commªds [14] |= 0x80; 307 } } 309  $£t_commÚ_commªds_b»d¾e ( btdev *btdev) 311 btdev -> commªds [0] |= 0x20; 312 btdev -> commªds [2] |= 0x80; 313 btdev -> commªds [10] |= 0x40; 314 btdev -> commªds [15] |= 0x02; 315 } } 317  $£t_b»dr_commªds ( btdev *btdev) 319 `£t_commÚ_commªds_®l ( btdev ); 320 `£t_commÚ_commªds_b»d¾e ( btdev ); 322 btdev -> commªds [0] |= 0x01; 323 btdev -> commªds [0] |= 0x02; 324 btdev -> commªds [0] |= 0x10; 325 btdev -> commªds [0] |= 0x40; 326 btdev -> commªds [0] |= 0x80; 327 btdev -> commªds [1] |= 0x01; 328 btdev -> commªds [1] |= 0x02; 329 btdev -> commªds [1] |= 0x04; 330 btdev -> commªds [1] |= 0x08; 331 btdev -> commªds [1] |= 0x10; 332 btdev -> commªds [1] |= 0x20; 333 btdev -> commªds [1] |= 0x80; 334 btdev -> commªds [2] |= 0x01; 335 btdev -> commªds [2] |= 0x08; 336 btdev -> commªds [2] |= 0x10; 337 btdev -> commªds [2] |= 0x20; 338 btdev -> commªds [2] |= 0x40; 339 btdev -> commªds [3] |= 0x01; 340 btdev -> commªds [5] |= 0x08; 341 btdev -> commªds [5] |= 0x10; 342 btdev -> commªds [6] |= 0x01; 343 btdev -> commªds [6] |= 0x20; 344 btdev -> commªds [6] |= 0x40; 345 btdev -> commªds [6] |= 0x80; 346 btdev -> commªds [7] |= 0x01; 347 btdev -> commªds [7] |= 0x02; 348 btdev -> commªds [7] |= 0x04; 349 btdev -> commªds [7] |= 0x08; 350 btdev -> commªds [7] |= 0x10; 351 btdev -> commªds [7] |= 0x20; 352 btdev -> commªds [7] |= 0x40; 353 btdev -> commªds [7] |= 0x80; 354 btdev -> commªds [8] |= 0x01; 355 btdev -> commªds [8] |= 0x02; 356 btdev -> commªds [8] |= 0x04; 357 btdev -> commªds [8] |= 0x08; 358 btdev -> commªds [8] |= 0x10; 359 btdev -> commªds [8] |= 0x20; 360 btdev -> commªds [9] |= 0x01; 361 btdev -> commªds [9] |= 0x02; 362 btdev -> commªds [9] |= 0x04; 363 btdev -> commªds [9] |= 0x08; 364 btdev -> commªds [11] |= 0x10; 365 btdev -> commªds [12] |= 0x40; 366 btdev -> commªds [12] |= 0x80; 367 btdev -> commªds [13] |= 0x01; 368 btdev -> commªds [13] |= 0x02; 369 btdev -> commªds [13] |= 0x04; 370 btdev -> commªds [13] |= 0x08; 371 btdev -> commªds [14] |= 0x40; 372 btdev -> commªds [15] |= 0x01; 373 btdev -> commªds [16] |= 0x04; 374 btdev -> commªds [16] |= 0x08; 375 btdev -> commªds [17] |= 0x01; 376 btdev -> commªds [17] |= 0x02; 377 btdev -> commªds [17] |= 0x20; 378 btdev -> commªds [17] |= 0x40; 379 btdev -> commªds [17] |= 0x80; 380 btdev -> commªds [18] |= 0x01; 381 btdev -> commªds [18] |= 0x02; 382 btdev -> commªds [18] |= 0x80; 383 btdev -> commªds [23] |= 0x04; 384 btdev -> commªds [29] |= 0x20; 385 btdev -> commªds [30] |= 0x08; 386 } } 388  $£t_Ë_commªds ( btdev *btdev) 390 `£t_commÚ_commªds_®l ( btdev ); 391 `£t_commÚ_commªds_b»d¾e ( btdev ); 393 btdev -> commªds [24] |= 0x20; 394 btdev -> commªds [24] |= 0x20; 395 btdev -> commªds [25] |= 0x01; 396 btdev -> commªds [25] |= 0x02; 397 btdev -> commªds [25] |= 0x04; 398 btdev -> commªds [25] |= 0x20; 399 btdev -> commªds [25] |= 0x40; 400 btdev -> commªds [25] |= 0x80; 401 btdev -> commªds [26] |= 0x02; 402 btdev -> commªds [26] |= 0x04; 403 btdev -> commªds [26] |= 0x08; 404 btdev -> commªds [26] |= 0x40; 405 btdev -> commªds [27] |= 0x80; 406 btdev -> commªds [28] |= 0x08; 407 btdev -> commªds [28] |= 0x10; 408 btdev -> commªds [28] |= 0x20; 409 btdev -> commªds [28] |= 0x40; 410 } } 412  $£t_b»d¾e_commªds ( btdev *btdev) 414 `£t_b»dr_commªds ( btdev ); 415 `£t_Ë_commªds ( btdev ); 420 btdev -> commªds [22] |= 0x04; 421 btdev -> commªds [31] |= 0x80; 422 btdev -> commªds [32] |= 0x04; 423 btdev -> commªds [32] |= 0x08; 424 btdev -> commªds [32] |= 0x10; 425 btdev -> commªds [32] |= 0x20; 426 btdev -> commªds [32] |= 0x40; 427 } } 429  $£t_amp_commªds ( btdev *btdev) 431 `£t_commÚ_commªds_®l ( btdev ); 433 btdev -> commªds [22] |= 0x20; 434 } } 436  $£t_b»d¾e_ã©u»s ( btdev *btdev) 438 btdev -> ã©u»s [0] |= 0x04; 439 btdev -> ã©u»s [0] |= 0x20; 440 btdev -> ã©u»s [0] |= 0x80; 441 btdev -> ã©u»s [1] |= 0x08; 442 btdev -> ã©u»s [2] |= 0x08; 443 btdev -> ã©u»s [3] |= 0x40; 444 btdev -> ã©u»s [3] |= 0x80; 445 btdev -> ã©u»s [4] |= 0x08; 446 btdev -> ã©u»s [4] |= 0x10; 447 btdev -> ã©u»s [4] |= 0x40; 448 btdev -> ã©u»s [5] |= 0x02; 449 btdev -> ã©u»s [5] |= 0x04; 450 btdev -> ã©u»s [5] |= 0x08; 451 btdev -> ã©u»s [5] |= 0x10; 452 btdev -> ã©u»s [6] |= 0x01; 453 btdev -> ã©u»s [6] |= 0x02; 454 btdev -> ã©u»s [6] |= 0x08; 455 btdev -> ã©u»s [6] |= 0x10; 456 btdev -> ã©u»s [6] |= 0x20; 457 btdev -> ã©u»s [6] |= 0x40; 458 btdev -> ã©u»s [7] |= 0x01; 459 btdev -> ã©u»s [7] |= 0x02; 460 btdev -> ã©u»s [7] |= 0x80; 462 btdev -> ã©_·ge_2 [0] |= 0x01; 463 btdev -> ã©_·ge_2 [0] |= 0x02; 464 btdev -> ã©_·ge_2 [0] |= 0x04; 465 btdev -> ã©_·ge_2 [0] |= 0x08; 466 btdev -> ã©_·ge_2 [0] |= 0x10; 467 btdev -> ã©_·ge_2 [1] |= 0x01; 468 btdev -> ã©_·ge_2 [1] |= 0x02; 470 btdev -> max_·ge = 2; 471 } } 473  $£t_b»dr_ã©u»s ( btdev *btdev) 475 btdev -> ã©u»s [0] |= 0x04; 476 btdev -> ã©u»s [0] |= 0x20; 477 btdev -> ã©u»s [0] |= 0x80; 478 btdev -> ã©u»s [1] |= 0x08; 479 btdev -> ã©u»s [3] |= 0x40; 480 btdev -> ã©u»s [3] |= 0x80; 481 btdev -> ã©u»s [4] |= 0x08; 482 btdev -> ã©u»s [4] |= 0x10; 483 btdev -> ã©u»s [5] |= 0x02; 484 btdev -> ã©u»s [5] |= 0x04; 485 btdev -> ã©u»s [5] |= 0x08; 486 btdev -> ã©u»s [5] |= 0x10; 487 btdev -> ã©u»s [6] |= 0x01; 488 btdev -> ã©u»s [6] |= 0x08; 489 btdev -> ã©u»s [6] |= 0x10; 490 btdev -> ã©u»s [6] |= 0x20; 491 btdev -> ã©u»s [6] |= 0x40; 492 btdev -> ã©u»s [7] |= 0x01; 493 btdev -> ã©u»s [7] |= 0x02; 494 btdev -> ã©u»s [7] |= 0x80; 496 btdev -> max_·ge = 1; 497 } } 499  $£t_Ë_ã©u»s ( btdev *btdev) 501 btdev -> ã©u»s [4] |= 0x20; 502 btdev -> ã©u»s [4] |= 0x40; 504 btdev -> max_·ge = 1; 505 } } 507  $£t_amp_ã©u»s ( btdev *btdev) 509 } } 511  btdev * $btdev_ü—‹ ( btdev_ty³ ty³ , ušt16_t id ) 513  btdev *btdev; 514  šdex ; 516 btdev = `m®loc ((*btdev)); 517 ià(! btdev ) 518  NULL ; 520 `mem£t ( btdev , 0, (*btdev)); 521 btdev -> ty³ =ype; 523 btdev -> mªuçùu»r = 63; 525 ià( ty³ =ð BTDEV_TYPE_BREDR ) 526 btdev -> v”siÚ = 0x05; 528 btdev -> v”siÚ = 0x08; 530 btdev -> »visiÚ = 0x0000; 532  btdev -> ty³ ) { 533  BTDEV_TYPE_BREDRLE : 534 `£t_b»d¾e_ã©u»s ( btdev ); 535 `£t_b»d¾e_commªds ( btdev ); 537  BTDEV_TYPE_BREDR : 538 `£t_b»dr_ã©u»s ( btdev ); 539 `£t_b»dr_commªds ( btdev ); 541  BTDEV_TYPE_LE : 542 `£t_Ë_ã©u»s ( btdev ); 543 `£t_Ë_commªds ( btdev ); 545  BTDEV_TYPE_AMP : 546 `£t_amp_ã©u»s ( btdev ); 547 `£t_amp_commªds ( btdev ); 551 btdev -> ·ge_sÿn_š‹rv® = 0x0800; 552 btdev -> ·ge_sÿn_wšdow = 0x0012; 553 btdev -> ·ge_sÿn_ty³ = 0x00; 555 btdev -> sync_Œaš_š‹rv® = 0x0080; 556 btdev -> sync_Œaš_timeout = 0x0002ee00; 557 btdev -> sync_Œaš_£rviû_d©a = 0x00; 559 btdev -> aþ_mtu = 192; 560 btdev -> aþ_max_pkt = 1; 562 btdev -> couÁry_code = 0x00; 564 šdex = `add_btdev ( btdev ); 565 ià( šdex < 0) { 566 `ä“ ( btdev ); 567  NULL ; 570 `g‘_bdaddr ( id , šdex , btdev -> bdaddr ); 572  btdev ; 573 } } 575  $btdev_de¡roy ( btdev *btdev) 577 ià(! btdev ) 580 ià( btdev -> šquœy_id > 0) 581 `timeout_»move ( btdev -> šquœy_id ); 583 `d–_btdev ( btdev ); 585 `ä“ ( btdev ); 586 } } 588 cÚ¡ ušt8_t * $btdev_g‘_bdaddr ( btdev *btdev) 590  btdev -> bdaddr ; 591 } } 593 ušt8_t * $btdev_g‘_ã©u»s ( btdev *btdev) 595  btdev -> ã©u»s ; 596 } } 598  boÞ $u£_s¥ ( btdev * btdev1 , btdev * btdev2 ) 600 ià( btdev1 -> auth_’abË || btdev2 ->auth_enable) 601  çl£ ; 603  ( btdev1 -> sim¶e_·œšg_mode && btdev2 ->simple_pairing_mode); 604 } } 606  $btdev_£t_commªd_hªdËr ( btdev *btdev, btdev_commªd_func hªdËr , 607 * u£r_d©a ) 609 ià(! btdev ) 612 btdev -> commªd_hªdËr = hªdËr ; 613 btdev -> commªd_d©a = u£r_d©a ; 614 } } 616  $btdev_£t_£nd_hªdËr ( btdev *btdev, btdev_£nd_func hªdËr , 617 * u£r_d©a ) 619 ià(! btdev ) 622 btdev -> £nd_hªdËr = hªdËr ; 623 btdev -> £nd_d©a = u£r_d©a ; 624 } } 626  $£nd_·ck‘ ( btdev *btdev, cÚ¡  iovec * iov , 627  iovËn ) 629 ià(! btdev -> £nd_hªdËr ) 632 btdev -> `£nd_hªdËr ( iov , iovËn , btdev-> £nd_d©a ); 633 } } 635  $£nd_ev’t ( btdev *btdev, ušt8_t ev’t , 636 cÚ¡ * d©a , ušt8_t Ën ) 638  bt_hci_evt_hdr hdr ; 639  iovec iov [3]; 640 ušt8_t pkt = BT_H4_EVT_PKT ; 642 iov [0]. iov_ba£ = & pkt ; 643 iov [0]. iov_Ën = ( pkt ); 645 hdr . evt = ev’t ; 646 hdr . ¶’ = Ën ; 648 iov [1]. iov_ba£ = & hdr ; 649 iov [1]. iov_Ën = ( hdr ); 651 ià( Ën > 0) { 652 iov [2]. iov_ba£ = (*è d©a ; 653 iov [2]. iov_Ën = Ën ; 656 ià( `run_hooks ( btdev , BTDEV_HOOK_POST_EVT , ev’t , d©a , Ën )) 657 `£nd_·ck‘ ( btdev , iov , Ën > 0 ? 3 : 2); 658 } } 660  $£nd_cmd ( btdev *btdev, ušt8_t evt , ušt16_t Ýcode , 661 cÚ¡  iovec * iov ,  iovËn ) 663  bt_hci_evt_hdr hdr ; 664  iovec iov2 [2 + iovËn ]; 665 ušt8_t pkt = BT_H4_EVT_PKT ; 666  i ; 668 iov2 [0]. iov_ba£ = & pkt ; 669 iov2 [0]. iov_Ën = ( pkt ); 671 hdr . evt =ƒvt; 672 hdr . ¶’ = 0; 674 iov2 [1]. iov_ba£ = & hdr ; 675 iov2 [1]. iov_Ën = ( hdr ); 677  i = 0; i < iovËn ; i++) { 678 hdr . ¶’ +ð iov [ i ]. iov_Ën ; 679 iov2 [2 + i ]. iov_ba£ = iov [i].iov_base; 680 iov2 [2 + i ]. iov_Ën = iov [i].iov_len; 683 ià( `run_hooks ( btdev , BTDEV_HOOK_POST_CMD , Ýcode , iov [ i -1]. iov_ba£ , 684 iov [ i -1]. iov_Ën )) 685 `£nd_·ck‘ ( btdev , iov2 , 2 + iovËn ); 686 } } 688  $cmd_com¶‘e ( btdev *btdev, ušt16_t Ýcode , 689 cÚ¡ * d©a , ušt8_t Ën ) 691  bt_hci_evt_cmd_com¶‘e cc ; 692  iovec iov [2]; 694 cc . ncmd = 0x01; 695 cc . Ýcode = `ýu_to_Ë16 (opcode); 697 iov [0]. iov_ba£ = & cc ; 698 iov [0]. iov_Ën = ( cc ); 700 iov [1]. iov_ba£ = (*è d©a ; 701 iov [1]. iov_Ën = Ën ; 703 `£nd_cmd ( btdev , BT_HCI_EVT_CMD_COMPLETE , Ýcode , iov , 2); 704 } } 706  $cmd_¡©us ( btdev *btdev, ušt8_t ¡©us , ušt16_t Ýcode ) 708  bt_hci_evt_cmd_¡©us cs ; 709  iovec iov ; 711 cs . ¡©us = status; 712 cs . ncmd = 0x01; 713 cs . Ýcode = `ýu_to_Ë16 (opcode); 715 iov . iov_ba£ = & cs ; 716 iov . iov_Ën = ( cs ); 718 `£nd_cmd ( btdev , BT_HCI_EVT_CMD_STATUS , Ýcode , & iov , 1); 719 } } 721  $num_com¶‘ed_·ck‘s ( btdev *btdev) 723 ià( btdev -> cÚn ) { 724  bt_hci_evt_num_com¶‘ed_·ck‘s ný ; 726 ný . num_hªdËs = 1; 727 ný . hªdË = `ýu_to_Ë16 (42); 728 ný . couÁ = `ýu_to_Ë16 (1); 730 `£nd_ev’t ( btdev , BT_HCI_EVT_NUM_COMPLETED_PACKETS , 731 & ný , (ncp)); 733 } } 735  boÞ $šquœy_ÿÎback (* u£r_d©a ) 737  šquœy_d©a * d©a = u£r_d©a ; 738  btdev *btdev = d©a ->btdev; 739  bt_hci_evt_šquœy_com¶‘e ic ; 740  £Á = d©a -> £Á_couÁ ; 741  i ; 744 ià( d©a -> ™” =ð MAX_BTDEV_ENTRIES ) 745  Œue ; 747  i = d©a -> ™” ; i < MAX_BTDEV_ENTRIES ; i++) { 749 ià( £Á + 10 =ð d©a -> £Á_couÁ ) 752 ià(! btdev_li¡ [ i ] || btdev_li¡[i] =ð btdev ) 755 ià(!( btdev_li¡ [ i ]-> sÿn_’abË & 0x02)) 758 ià( btdev -> šquœy_mode == 0x02 && 759 btdev_li¡ [ i ]-> ext_šquœy_r¥ [0]) { 760  bt_hci_evt_ext_šquœy_»suÉ œ ; 762 œ . num_»¥ = 0x01; 763 `memýy ( œ . bdaddr , btdev_li¡ [ i ]->bdaddr, 6); 764 œ . psÿn_»p_mode = 0x00; 765 œ . psÿn_³riod_mode = 0x00; 766 `memýy ( œ . dev_þass , btdev_li¡ [ i ]->dev_class, 3); 767 œ . þock_off£t = 0x0000; 768 œ . rssi = -60; 769 `memýy ( œ . d©a , btdev_li¡ [ i ]-> ext_šquœy_r¥ , 240); 771 `£nd_ev’t ( btdev , BT_HCI_EVT_EXT_INQUIRY_RESULT , 772 & œ , (ir)); 773 d©a -> £Á_couÁ ++; 777 ià( btdev -> šquœy_mode > 0x00) { 778  bt_hci_evt_šquœy_»suÉ_w™h_rssi œ ; 780 œ . num_»¥ = 0x01; 781 `memýy ( œ . bdaddr , btdev_li¡ [ i ]->bdaddr, 6); 782 œ . psÿn_»p_mode = 0x00; 783 œ . psÿn_³riod_mode = 0x00; 784 `memýy ( œ . dev_þass , btdev_li¡ [ i ]->dev_class, 3); 785 œ . þock_off£t = 0x0000; 786 œ . rssi = -60; 788 `£nd_ev’t ( btdev , BT_HCI_EVT_INQUIRY_RESULT_WITH_RSSI , 789 & œ , (ir)); 790 d©a -> £Á_couÁ ++; 792  bt_hci_evt_šquœy_»suÉ œ ; 794 œ . num_»¥ = 0x01; 795 `memýy ( œ . bdaddr , btdev_li¡ [ i ]->bdaddr, 6); 796 œ . psÿn_»p_mode = 0x00; 797 œ . psÿn_³riod_mode = 0x00; 798 œ . psÿn_mode = 0x00; 799 `memýy ( œ . dev_þass , btdev_li¡ [ i ]->dev_class, 3); 800 œ . þock_off£t = 0x0000; 802 `£nd_ev’t ( btdev , BT_HCI_EVT_INQUIRY_RESULT , 803 & œ , (ir)); 804 d©a -> £Á_couÁ ++; 807 d©a -> ™” = i ; 810 ià( d©a -> num_»¥ && d©a-> £Á_couÁ == data->num_resp) 811  fšish ; 813  Œue ; 815 fšish : 817 ic . ¡©us = BT_HCI_ERR_SUCCESS ; 818 `£nd_ev’t ( btdev , BT_HCI_EVT_INQUIRY_COMPLETE , & ic , (ic)); 820  çl£ ; 821 } } 823  $šquœy_de¡roy (* u£r_d©a ) 825  šquœy_d©a * d©a = u£r_d©a ; 826  btdev *btdev = d©a ->btdev; 828 ià(! btdev ) 829  fšish ; 831 btdev -> šquœy_id = 0; 833 ià( btdev -> šquœy_timeout_id > 0) { 834 `timeout_»move ( btdev -> šquœy_timeout_id ); 835 btdev -> šquœy_timeout_id = 0; 838 fšish : 839 `ä“ ( d©a ); 840 } } 842  boÞ $šquœy_timeout (* u£r_d©a ) 844  šquœy_d©a * d©a = u£r_d©a ; 845  btdev *btdev = d©a ->btdev; 846  bt_hci_evt_šquœy_com¶‘e ic ; 848 `timeout_»move ( btdev -> šquœy_id ); 849 btdev -> šquœy_timeout_id = 0; 852 ic . ¡©us = BT_HCI_ERR_SUCCESS ; 853 `£nd_ev’t ( btdev , BT_HCI_EVT_INQUIRY_COMPLETE , & ic , (ic)); 855  çl£ ; 856 } } 858  $šquœy_cmd ( btdev *btdev, cÚ¡ * cmd ) 860 cÚ¡  bt_hci_cmd_šquœy * šq_cmd = cmd ; 861  šquœy_d©a * d©a ; 862  bt_hci_evt_šquœy_com¶‘e ic ; 863  ¡©us = BT_HCI_ERR_HARDWARE_FAILURE ; 864  šquœy_Ën_ms ; 866 ià( btdev -> šquœy_id > 0) { 867 ¡©us = BT_HCI_ERR_COMMAND_DISALLOWED ; 868  çžed ; 871 d©a = `m®loc ((*data)); 872 ià(! d©a ) 873  çžed ; 875 `mem£t ( d©a , 0, (*data)); 876 d©a -> btdev = btdev; 877 d©a -> num_»¥ = šq_cmd ->num_resp; 880 šquœy_Ën_ms = 1280 * šq_cmd -> Ëngth ; 881 ià( šquœy_Ën_ms ) 882 btdev -> šquœy_timeout_id = `timeout_add ( šquœy_Ën_ms , 883 šquœy_timeout , 884 d©a , NULL ); 886 btdev -> šquœy_id = `timeout_add ( DEFAULT_INQUIRY_INTERVAL , 887 šquœy_ÿÎback , d©a , 888 šquœy_de¡roy ); 890 ià( btdev -> šquœy_id > 0) 893 çžed : 894 ic . ¡©us = status; 895 `£nd_ev’t ( btdev , BT_HCI_EVT_INQUIRY_COMPLETE , & ic , (ic)); 896 } } 898  $šquœy_ÿnûl ( btdev *btdev) 900 ušt8_t ¡©us ; 902 ià(! btdev -> šquœy_id ) { 903 ¡©us = BT_HCI_ERR_COMMAND_DISALLOWED ; 904 `cmd_com¶‘e ( btdev , BT_HCI_CMD_INQUIRY_CANCEL , & ¡©us , 905 ( ¡©us )); 909 `timeout_»move ( btdev -> šquœy_timeout_id ); 910 btdev -> šquœy_timeout_id = 0; 911 `timeout_»move ( btdev -> šquœy_id ); 912 btdev -> šquœy_id = 0; 914 ¡©us = BT_HCI_ERR_SUCCESS ; 915 `cmd_com¶‘e ( btdev , BT_HCI_CMD_INQUIRY_CANCEL , & ¡©us , 916 ( ¡©us )); 917 } } 919  $cÚn_com¶‘e ( btdev *btdev, 920 cÚ¡ ušt8_t * bdaddr , ušt8_ˆ ¡©us ) 922  bt_hci_evt_cÚn_com¶‘e cc ; 924 ià(! ¡©us ) { 925  btdev * »mÙe = `fšd_btdev_by_bdaddr ( bdaddr ); 927 btdev -> cÚn = »mÙe ; 928 »mÙe -> cÚn = btdev ; 930 cc . ¡©us = status; 931 `memýy ( cc . bdaddr , btdev ->bdaddr, 6); 932 cc . ’ü_mode = 0x00; 934 cc . hªdË = `ýu_to_Ë16 (42); 935 cc . lšk_ty³ = 0x01; 937 `£nd_ev’t ( »mÙe , BT_HCI_EVT_CONN_COMPLETE , & cc , (cc)); 939 cc . hªdË = `ýu_to_Ë16 (42); 940 cc . lšk_ty³ = 0x01; 942 cc . hªdË = `ýu_to_Ë16 (0x0000); 943 cc . lšk_ty³ = 0x01; 946 cc . ¡©us = status; 947 `memýy ( cc . bdaddr , bdaddr, 6); 948 cc . ’ü_mode = 0x00; 950 `£nd_ev’t ( btdev , BT_HCI_EVT_CONN_COMPLETE , & cc , (cc)); 951 } } 953  $acû±_cÚn_»que¡_com¶‘e ( btdev *btdev, 954 cÚ¡ ušt8_t * bdaddr ) 956  btdev * »mÙe = `fšd_btdev_by_bdaddr ( bdaddr ); 958 ià(! »mÙe ) 961 ià( btdev -> auth_’abË || »mÙe ->auth_enable) 962 `£nd_ev’t ( »mÙe , BT_HCI_EVT_LINK_KEY_REQUEST , 963 btdev -> bdaddr , 6); 965 `cÚn_com¶‘e ( btdev , bdaddr , BT_HCI_ERR_SUCCESS ); 966 } } 968  $sync_cÚn_com¶‘e ( btdev *btdev, ušt16_t voiû_£‰šg , 969 ušt8_t ¡©us ) 971  bt_hci_evt_sync_cÚn_com¶‘e cc ; 973 ià(! btdev -> cÚn ) 976 cc . ¡©us = status; 977 `memýy ( cc . bdaddr , btdev -> cÚn ->bdaddr, 6); 979 cc . hªdË = `ýu_to_Ë16 ( ¡©us =ð BT_HCI_ERR_SUCCESS ? 257 : 0); 980 cc . lšk_ty³ = 0x02; 981 cc . tx_š‹rv® = 0x000c; 982 cc . »Œªs_wšdow = 0x06; 983 cc . rx_pkt_Ën = 60; 984 cc . tx_pkt_Ën = 60; 985 cc . aœ_mode = ( voiû_£‰šg == 0x0060) ? 0x02 : 0x03; 987 `£nd_ev’t ( btdev , BT_HCI_EVT_SYNC_CONN_COMPLETE , & cc , (cc)); 988 } } 990  $sco_cÚn_com¶‘e ( btdev *btdev, ušt8_t ¡©us ) 992  bt_hci_evt_cÚn_com¶‘e cc ; 994 ià(! btdev -> cÚn ) 997 cc . ¡©us = status; 998 `memýy ( cc . bdaddr , btdev -> cÚn ->bdaddr, 6); 999 cc . hªdË = `ýu_to_Ë16 ( ¡©us =ð BT_HCI_ERR_SUCCESS ? 257 : 0); 1000 cc . lšk_ty³ = 0x00; 1001 cc . ’ü_mode = 0x00; 1003 `£nd_ev’t ( btdev , BT_HCI_EVT_CONN_COMPLETE , & cc , (cc)); 1004 } } 1006  $Ë_cÚn_com¶‘e ( btdev *btdev, 1007 cÚ¡ ušt8_t * bdaddr , ušt8_ˆ bdaddr_ty³ , 1008 ušt8_t ¡©us ) 1010  buf [1 + ( bt_hci_evt_Ë_cÚn_com¶‘e )]; 1011  bt_hci_evt_Ë_cÚn_com¶‘e * cc = (*è& buf [1]; 1013 `mem£t ( buf , 0, (buf)); 1015 buf [0] = BT_HCI_EVT_LE_CONN_COMPLETE ; 1017 ià(! ¡©us ) { 1018  btdev * »mÙe = `fšd_btdev_by_bdaddr_ty³ ( bdaddr , 1019 bdaddr_ty³ ); 1021 btdev -> cÚn = »mÙe ; 1022 btdev -> Ë_adv_’abË = 0; 1023 »mÙe -> cÚn = btdev ; 1024 »mÙe -> Ë_adv_’abË = 0; 1026 cc -> ¡©us = status; 1027 cc -> ³”_addr_ty³ = btdev -> Ë_sÿn_own_addr_ty³ ; 1028 ià( cc -> ³”_addr_ty³ == 0x01) 1029 `memýy ( cc -> ³”_addr , btdev -> ¿ndom_addr , 6); 1031 `memýy ( cc -> ³”_addr , btdev -> bdaddr , 6); 1033 cc -> rÞe = 0x01; 1034 cc -> hªdË = `ýu_to_Ë16 (42); 1036 `£nd_ev’t ( »mÙe , BT_HCI_EVT_LE_META_EVENT , buf , (buf)); 1038 cc -> hªdË = `ýu_to_Ë16 (42); 1041 cc -> ¡©us = status; 1042 cc -> ³”_addr_ty³ = bdaddr_ty³ ; 1043 `memýy ( cc -> ³”_addr , bdaddr , 6); 1044 cc -> rÞe = 0x00; 1046 `£nd_ev’t ( btdev , BT_HCI_EVT_LE_META_EVENT , buf , (buf)); 1047 } } 1049 cÚ¡ ušt8_t * $sÿn_addr (cÚ¡  btdev *btdev) 1051 ià( btdev -> Ë_sÿn_own_addr_ty³ == 0x01) 1052  btdev -> ¿ndom_addr ; 1054  btdev -> bdaddr ; 1055 } } 1057 cÚ¡ ušt8_t * $adv_addr (cÚ¡  btdev *btdev) 1059 ià( btdev -> Ë_adv_own_addr == 0x01) 1060  btdev -> ¿ndom_addr ; 1062  btdev -> bdaddr ; 1063 } } 1065  boÞ $adv_m©ch ( btdev * sÿn , btdev * adv ) 1068 ià( adv -> Ë_adv_ty³ != 0x01 &&‡dv->le_adv_type != 0x04) 1069  Œue ; 1071 ià( sÿn -> Ë_sÿn_own_addr_ty³ !ð adv -> Ë_adv_dœeù_addr_ty³ ) 1072  çl£ ; 1074  ! `memcmp ( `sÿn_addr ( sÿn ), adv -> Ë_adv_dœeù_addr , 6); 1075 } } 1077  boÞ $adv_cÚÃùabË ( btdev *btdev) 1079 ià(! btdev -> Ë_adv_’abË ) 1080  çl£ ; 1082  btdev -> Ë_adv_ty³ != 0x03; 1083 } } 1085  $Ë_cÚn_»que¡ ( btdev *btdev, cÚ¡ ušt8_t * bdaddr , 1086 ušt8_t bdaddr_ty³ ) 1088  btdev * »mÙe = `fšd_btdev_by_bdaddr_ty³ ( bdaddr , bdaddr_ty³ ); 1090 ià( »mÙe && `adv_cÚÃùabË ÔemÙeè&& `adv_m©ch ( btdev ,„emote) && 1091 »mÙe -> Ë_adv_own_addr =ð bdaddr_ty³ ) 1092 `Ë_cÚn_com¶‘e ( btdev , bdaddr , bdaddr_ty³ , 0); 1094 `Ë_cÚn_com¶‘e ( btdev , bdaddr , bdaddr_ty³ , 1095 BT_HCI_ERR_CONN_FAILED_TO_ESTABLISH ); 1096 } } 1098  $cÚn_»que¡ ( btdev *btdev, cÚ¡ ušt8_t * bdaddr ) 1100  btdev * »mÙe = `fšd_btdev_by_bdaddr ( bdaddr ); 1102 ià( »mÙe &&„emÙe-> sÿn_’abË & 0x02) { 1103  bt_hci_evt_cÚn_»que¡ ü ; 1105 `memýy ( ü . bdaddr , btdev ->bdaddr, 6); 1106 `memýy ( ü . dev_þass , btdev ->dev_class, 3); 1107 ü . lšk_ty³ = 0x01; 1109 `£nd_ev’t ( »mÙe , BT_HCI_EVT_CONN_REQUEST , & ü , (cr)); 1111 `cÚn_com¶‘e ( btdev , bdaddr , BT_HCI_ERR_PAGE_TIMEOUT ); 1113 } } 1115  $Ë_cÚn_upd©e ( btdev *btdev, ušt16_t hªdË , 1116 ušt16_t max_š‹rv® , ušt16_ˆ mš_š‹rv® , 1117 ušt16_t Ï‹ncy , ušt16_ˆ supv_timeout , 1118 ušt16_t mš_Ëngth , ušt16_ˆ max_Ëngth ) 1120  btdev * »mÙe = btdev-> cÚn ; 1121  s__·cked { 1122 ušt8_t subev’t ; 1123  bt_hci_evt_Ë_cÚn_upd©e_com¶‘e ev ; 1124 } ev ; 1126 ev . subev’t = BT_HCI_EVT_LE_CONN_UPDATE_COMPLETE ; 1127 ev .ev. hªdË = `ýu_to_Ë16 (handle); 1128 ev .ev. š‹rv® = `ýu_to_Ë16 ( mš_š‹rv® ); 1129 ev .ev. Ï‹ncy = `ýu_to_Ë16 (latency); 1130 ev .ev. supv_timeout = `ýu_to_Ë16 (supv_timeout); 1132 ià( »mÙe ) 1133 ev .ev. ¡©us = BT_HCI_ERR_SUCCESS ; 1135 ev .ev. ¡©us = BT_HCI_ERR_UNKNOWN_CONN_ID ; 1137 `£nd_ev’t ( btdev , BT_HCI_EVT_LE_META_EVENT , & ev , (ev)); 1139 ià( »mÙe ) 1140 `£nd_ev’t ( »mÙe , BT_HCI_EVT_LE_META_EVENT , & ev , (ev)); 1141 } } 1143  $discÚÃù_com¶‘e ( btdev *btdev, ušt16_t hªdË , 1144 ušt8_t »asÚ ) 1146  bt_hci_evt_discÚÃù_com¶‘e dc ; 1147  btdev * »mÙe = btdev-> cÚn ; 1149 ià(! »mÙe ) { 1150 dc . ¡©us = BT_HCI_ERR_UNKNOWN_CONN_ID ; 1151 dc . hªdË = `ýu_to_Ë16 (handle); 1152 dc . »asÚ = 0x00; 1154 `£nd_ev’t ( btdev , BT_HCI_EVT_DISCONNECT_COMPLETE , 1155 & dc , (dc)); 1159 dc . ¡©us = BT_HCI_ERR_SUCCESS ; 1160 dc . hªdË = `ýu_to_Ë16 (handle); 1161 dc . »asÚ =„eason; 1163 btdev -> cÚn = NULL ; 1164 »mÙe -> cÚn = NULL ; 1166 `£nd_ev’t ( btdev , BT_HCI_EVT_DISCONNECT_COMPLETE , & dc , (dc)); 1167 `£nd_ev’t ( »mÙe , BT_HCI_EVT_DISCONNECT_COMPLETE , & dc , (dc)); 1168 } } 1170  $lšk_key_»q_»¶y_com¶‘e ( btdev *btdev, 1171 cÚ¡ ušt8_t * bdaddr , 1172 cÚ¡ ušt8_t * lšk_key ) 1174  btdev * »mÙe = btdev-> cÚn ; 1175  bt_hci_evt_auth_com¶‘e ev ; 1177 `memýy ( btdev -> lšk_key ,†ink_key, 16); 1179 ià(! »mÙe ) { 1180 »mÙe = `fšd_btdev_by_bdaddr ( bdaddr ); 1181 ià(! »mÙe ) 1185 ià(! `memcmp ( »mÙe -> lšk_key , LINK_KEY_NONE , 16)) { 1186 `£nd_ev’t ( »mÙe , BT_HCI_EVT_LINK_KEY_REQUEST , 1187 btdev -> bdaddr , 6); 1191 ev . hªdË = `ýu_to_Ë16 (42); 1193 ià(! `memcmp ( btdev -> lšk_key , »mÙe ->link_key, 16)) 1194 ev . ¡©us = BT_HCI_ERR_SUCCESS ; 1196 ev . ¡©us = BT_HCI_ERR_AUTH_FAILURE ; 1198 `£nd_ev’t ( btdev , BT_HCI_EVT_AUTH_COMPLETE , & ev , (ev)); 1199 `£nd_ev’t ( »mÙe , BT_HCI_EVT_AUTH_COMPLETE , & ev , (ev)); 1200 } } 1202  $lšk_key_»q_Ãg_»¶y_com¶‘e ( btdev *btdev, 1203 cÚ¡ ušt8_t * bdaddr ) 1205  btdev * »mÙe = btdev-> cÚn ; 1207 ià(! »mÙe ) { 1208 »mÙe = `fšd_btdev_by_bdaddr ( bdaddr ); 1209 ià(! »mÙe ) 1213 ià( `u£_s¥ ( btdev , »mÙe )) { 1214  bt_hci_evt_io_ÿ·bž™y_»que¡ io_»q ; 1216 `memýy ( io_»q . bdaddr , bdaddr, 6); 1217 `£nd_ev’t ( btdev , BT_HCI_EVT_IO_CAPABILITY_REQUEST , & io_»q , 1218 ( io_»q )); 1220  bt_hci_evt_pš_code_»que¡ pš_»q ; 1222 `memýy ( pš_»q . bdaddr , bdaddr, 6); 1223 `£nd_ev’t ( btdev , BT_HCI_EVT_PIN_CODE_REQUEST , & pš_»q , 1224 ( pš_»q )); 1226 } } 1228  ušt8_t $g‘_lšk_key_ty³ ( btdev *btdev) 1230  btdev * »mÙe = btdev-> cÚn ; 1231 ušt8_t auth , uÇuth ; 1233 ià(! »mÙe ) 1236 ià(! btdev -> sim¶e_·œšg_mode ) 1239 ià( btdev -> s¥_debug_mode || »mÙe ->ssp_debug_mode) 1242 ià( btdev -> £cu»_cÚn_suµÜt && »mÙe ->secure_conn_support) { 1243 uÇuth = 0x07; 1244 auth = 0x08; 1246 uÇuth = 0x04; 1247 auth = 0x05; 1250 ià( btdev -> io_ÿp =ð0x03 || »mÙe ->io_cap == 0x03) 1251  uÇuth ; 1253 ià(!( btdev -> auth_»q & 0x01è&& !( »mÙe ->auth_req & 0x01)) 1254  uÇuth ; 1257 ià( btdev -> io_ÿp =ð0x00 && »mÙe ->io_cap != 0x02) 1258  uÇuth ; 1261 ià( »mÙe -> io_ÿp =ð0x00 && btdev ->io_cap != 0x02) 1262  uÇuth ; 1264  auth ; 1265 } } 1267  $lšk_key_nÙify ( btdev *btdev, cÚ¡ ušt8_t * bdaddr , 1268 cÚ¡ ušt8_t * key ) 1270  bt_hci_evt_lšk_key_nÙify ev ; 1272 `memýy ( btdev -> lšk_key , key , 16); 1274 `memýy ( ev . bdaddr , bdaddr, 6); 1275 `memýy ( ev . lšk_key , key , 16); 1276 ev . key_ty³ = `g‘_lšk_key_ty³ ( btdev ); 1278 `£nd_ev’t ( btdev , BT_HCI_EVT_LINK_KEY_NOTIFY , & ev , (ev)); 1279 } } 1281  $’üy±_chªge ( btdev *btdev, ušt8_t mode , ušt8_ˆ ¡©us ) 1283  bt_hci_evt_’üy±_chªge ev ; 1285 ev . ¡©us = status; 1286 ev . hªdË = `ýu_to_Ë16 (42); 1287 ev . ’ü_mode = mode ; 1289 `£nd_ev’t ( btdev , BT_HCI_EVT_ENCRYPT_CHANGE , & ev , (ev)); 1290 } } 1292  $pš_code_»q_»¶y_com¶‘e ( btdev *btdev, 1293 cÚ¡ ušt8_t * bdaddr , ušt8_ˆ pš_Ën , 1294 cÚ¡ ušt8_t * pš_code ) 1296  bt_hci_evt_auth_com¶‘e ev ; 1297  btdev * »mÙe = btdev-> cÚn ; 1299 ià(! »mÙe ) { 1300 »mÙe = `fšd_btdev_by_bdaddr ( bdaddr ); 1301 ià(! »mÙe ) 1305 `memýy ( btdev -> pš , pš_code , pš_Ën ); 1306 btdev -> pš_Ën =…in_len; 1308 ià(! »mÙe -> pš_Ën ) { 1309  bt_hci_evt_pš_code_»que¡ pš_»q ; 1311 `memýy ( pš_»q . bdaddr , btdev ->bdaddr, 6); 1312 `£nd_ev’t ( »mÙe , BT_HCI_EVT_PIN_CODE_REQUEST , & pš_»q , 1313 ( pš_»q )); 1317 ià( btdev -> pš_Ën =ð »mÙe ->pin_len && 1318 ! `memcmp ( btdev -> pš , »mÙe ->pš, btdev-> pš_Ën )) { 1319 `lšk_key_nÙify ( btdev , »mÙe -> bdaddr , LINK_KEY_DUMMY ); 1320 `lšk_key_nÙify ( »mÙe , btdev -> bdaddr , LINK_KEY_DUMMY ); 1321 ev . ¡©us = BT_HCI_ERR_SUCCESS ; 1323 ev . ¡©us = BT_HCI_ERR_AUTH_FAILURE ; 1326 ià( »mÙe -> cÚn ) { 1327 ev . hªdË = `ýu_to_Ë16 (42); 1328 `£nd_ev’t ( »mÙe , BT_HCI_EVT_AUTH_COMPLETE , & ev , (ev)); 1330 `cÚn_com¶‘e ( »mÙe , btdev -> bdaddr , ev . ¡©us ); 1333 btdev -> pš_Ën = 0; 1334 »mÙe -> pš_Ën = 0; 1335 } } 1337  $pš_code_»q_Ãg_»¶y_com¶‘e ( btdev *btdev, 1338 cÚ¡ ušt8_t * bdaddr ) 1340  bt_hci_evt_auth_com¶‘e ev ; 1341  btdev * »mÙe = btdev-> cÚn ; 1343 ià(! »mÙe ) { 1344 »mÙe = `fšd_btdev_by_bdaddr ( bdaddr ); 1345 ià(! »mÙe ) 1349 ev . ¡©us = BT_HCI_ERR_PIN_OR_KEY_MISSING ; 1350 ev . hªdË = `ýu_to_Ë16 (42); 1352 ià( btdev -> cÚn ) 1353 `£nd_ev’t ( btdev , BT_HCI_EVT_AUTH_COMPLETE , & ev , (ev)); 1355 `cÚn_com¶‘e ( btdev , bdaddr , BT_HCI_ERR_PIN_OR_KEY_MISSING ); 1357 ià( »mÙe -> cÚn ) { 1358 ià( »mÙe -> pš_Ën ) 1359 `£nd_ev’t ( »mÙe , BT_HCI_EVT_AUTH_COMPLETE , & ev , 1360 ( ev )); 1362 `cÚn_com¶‘e ( »mÙe , btdev -> bdaddr , 1363 BT_HCI_ERR_PIN_OR_KEY_MISSING ); 1365 } } 1367  $auth_»que¡_com¶‘e ( btdev *btdev, ušt16_t hªdË ) 1369  btdev * »mÙe = btdev-> cÚn ; 1371 ià(! »mÙe ) { 1372  bt_hci_evt_auth_com¶‘e ev ; 1374 ev . ¡©us = BT_HCI_ERR_UNKNOWN_CONN_ID ; 1375 ev . hªdË = `ýu_to_Ë16 (handle); 1377 `£nd_ev’t ( btdev , BT_HCI_EVT_AUTH_COMPLETE , & ev , (ev)); 1382 btdev -> auth_š™ = Œue ; 1384 `£nd_ev’t ( btdev , BT_HCI_EVT_LINK_KEY_REQUEST , »mÙe -> bdaddr , 6); 1385 } } 1387  $Çme_»que¡_com¶‘e ( btdev *btdev, 1388 cÚ¡ ušt8_t * bdaddr , ušt8_ˆ ¡©us ) 1390  bt_hci_evt_»mÙe_Çme_»que¡_com¶‘e nc ; 1392 nc . ¡©us = status; 1393 `memýy ( nc . bdaddr , bdaddr, 6); 1394 `mem£t ( nc . Çme , 0, 248); 1396 ià(! ¡©us ) { 1397  btdev * »mÙe = `fšd_btdev_by_bdaddr ( bdaddr ); 1399 ià( »mÙe ) 1400 `memýy ( nc . Çme , »mÙe ->name, 248); 1402 nc . ¡©us = BT_HCI_ERR_UNKNOWN_CONN_ID ; 1405 `£nd_ev’t ( btdev , BT_HCI_EVT_REMOTE_NAME_REQUEST_COMPLETE , 1406 & nc , (nc)); 1407 } } 1409  $»mÙe_ã©u»s_com¶‘e ( btdev *btdev, ušt16_t hªdË ) 1411  bt_hci_evt_»mÙe_ã©u»s_com¶‘e rfc ; 1413 ià( btdev -> cÚn ) { 1414 rfc . ¡©us = BT_HCI_ERR_SUCCESS ; 1415 rfc . hªdË = `ýu_to_Ë16 (handle); 1416 `memýy ( rfc . ã©u»s , btdev -> cÚn ->features, 8); 1418 rfc . ¡©us = BT_HCI_ERR_UNKNOWN_CONN_ID ; 1419 rfc . hªdË = `ýu_to_Ë16 (handle); 1420 `mem£t ( rfc . ã©u»s , 0, 8); 1423 `£nd_ev’t ( btdev , BT_HCI_EVT_REMOTE_FEATURES_COMPLETE , 1424 & rfc , (rfc)); 1425 } } 1427  $btdev_g‘_ho¡_ã©u»s ( btdev *btdev, ušt8_t ã©u»s [8]) 1429 `mem£t ( ã©u»s , 0, 8); 1430 ià( btdev -> sim¶e_·œšg_mode ) 1431 ã©u»s [0] |= 0x01; 1432 ià( btdev -> Ë_suµÜ‹d ) 1433 ã©u»s [0] |= 0x02; 1434 ià( btdev -> Ë_simuɪeous ) 1435 ã©u»s [0] |= 0x04; 1436 ià( btdev -> £cu»_cÚn_suµÜt ) 1437 ã©u»s [0] |= 0x08; 1438 } } 1440  $»mÙe_ext_ã©u»s_com¶‘e ( btdev *btdev, ušt16_t hªdË , 1441 ušt8_t ·ge ) 1443  bt_hci_evt_»mÙe_ext_ã©u»s_com¶‘e »fc ; 1445 ià( btdev -> cÚn && ·ge < 0x02) { 1446 »fc . hªdË = `ýu_to_Ë16 (handle); 1447 »fc . ·ge =…age; 1448 »fc . max_·ge = 0x01; 1450  ·ge ) { 1452 »fc . ¡©us = BT_HCI_ERR_SUCCESS ; 1453 `memýy ( »fc . ã©u»s , btdev -> cÚn ->features, 8); 1456 »fc . ¡©us = BT_HCI_ERR_SUCCESS ; 1457 `btdev_g‘_ho¡_ã©u»s ( btdev -> cÚn , »fc . ã©u»s ); 1460 »fc . ¡©us = BT_HCI_ERR_INVALID_PARAMETERS ; 1461 `mem£t ( »fc . ã©u»s , 0, 8); 1465 »fc . ¡©us = BT_HCI_ERR_UNKNOWN_CONN_ID ; 1466 »fc . hªdË = `ýu_to_Ë16 (handle); 1467 »fc . ·ge =…age; 1468 »fc . max_·ge = 0x01; 1469 `mem£t ( »fc . ã©u»s , 0, 8); 1472 `£nd_ev’t ( btdev , BT_HCI_EVT_REMOTE_EXT_FEATURES_COMPLETE , 1473 & »fc , (refc)); 1474 } } 1476  $»mÙe_v”siÚ_com¶‘e ( btdev *btdev, ušt16_t hªdË ) 1478  bt_hci_evt_»mÙe_v”siÚ_com¶‘e rvc ; 1480 ià( btdev -> cÚn ) { 1481 rvc . ¡©us = BT_HCI_ERR_SUCCESS ; 1482 rvc . hªdË = `ýu_to_Ë16 (handle); 1483 rvc . lmp_v” = btdev -> cÚn -> v”siÚ ; 1484 rvc . mªuçùu»r = `ýu_to_Ë16 ( btdev -> cÚn ->manufacturer); 1485 rvc . lmp_subv” = `ýu_to_Ë16 ( btdev -> cÚn -> »visiÚ ); 1487 rvc . ¡©us = BT_HCI_ERR_UNKNOWN_CONN_ID ; 1488 rvc . hªdË = `ýu_to_Ë16 (handle); 1489 rvc . lmp_v” = 0x00; 1490 rvc . mªuçùu»r = `ýu_to_Ë16 (0); 1491 rvc . lmp_subv” = `ýu_to_Ë16 (0); 1494 `£nd_ev’t ( btdev , BT_HCI_EVT_REMOTE_VERSION_COMPLETE , 1495 & rvc , (rvc)); 1496 } } 1498  $»mÙe_þock_off£t_com¶‘e ( btdev *btdev, ušt16_t hªdË ) 1500  bt_hci_evt_þock_off£t_com¶‘e coc ; 1502 ià( btdev -> cÚn ) { 1503 coc . ¡©us = BT_HCI_ERR_SUCCESS ; 1504 coc . hªdË = `ýu_to_Ë16 (handle); 1505 coc . þock_off£t = 0; 1507 coc . ¡©us = BT_HCI_ERR_UNKNOWN_CONN_ID ; 1508 coc . hªdË = `ýu_to_Ë16 (handle); 1509 coc . þock_off£t = 0; 1512 `£nd_ev’t ( btdev , BT_HCI_EVT_CLOCK_OFFSET_COMPLETE , 1513 & coc , (coc)); 1514 } } 1516  $io_ÿp_»q_»¶y_com¶‘e ( btdev *btdev, 1517 cÚ¡ ušt8_t * bdaddr , 1518 ušt8_t ÿ·bž™y , ušt8_ˆ oob_d©a , 1519 ušt8_t auth’tiÿtiÚ ) 1521  btdev * »mÙe = btdev-> cÚn ; 1522  bt_hci_evt_io_ÿ·bž™y_»¥Ú£ ev ; 1523  bt_hci_r¥_io_ÿ·bž™y_»que¡_»¶y r¥ ; 1524 ušt8_t ¡©us ; 1526 ià(! »mÙe ) { 1527 ¡©us = BT_HCI_ERR_UNKNOWN_CONN_ID ; 1528  dÚe ; 1531 ¡©us = BT_HCI_ERR_SUCCESS ; 1533 btdev -> io_ÿp = ÿ·bž™y ; 1534 btdev -> auth_»q = auth’tiÿtiÚ ; 1536 `memýy ( ev . bdaddr , btdev ->bdaddr, 6); 1537 ev . ÿ·bž™y = capability; 1538 ev . oob_d©a = oob_data; 1539 ev . auth’tiÿtiÚ =‡uthentication; 1541 `£nd_ev’t ( »mÙe , BT_HCI_EVT_IO_CAPABILITY_RESPONSE , & ev , (ev)); 1543 ià( »mÙe -> io_ÿp ) { 1544  bt_hci_evt_u£r_cÚfœm_»que¡ cfm ; 1546 `memýy ( cfm . bdaddr , btdev ->bdaddr, 6); 1547 cfm . ·sskey = 0; 1549 `£nd_ev’t ( »mÙe , BT_HCI_EVT_USER_CONFIRM_REQUEST , 1550 & cfm , (cfm)); 1552 `memýy ( cfm . bdaddr , bdaddr, 6); 1553 `£nd_ev’t ( btdev , BT_HCI_EVT_USER_CONFIRM_REQUEST , 1554 & cfm , (cfm)); 1556 `£nd_ev’t ( »mÙe , BT_HCI_EVT_IO_CAPABILITY_REQUEST , 1557 btdev -> bdaddr , 6); 1560 dÚe : 1561 r¥ . ¡©us = status; 1562 `memýy ( r¥ . bdaddr , bdaddr, 6); 1563 `cmd_com¶‘e ( btdev , BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY , 1564 & r¥ , (rsp)); 1565 } } 1567  $io_ÿp_»q_Ãg_»¶y_com¶‘e ( btdev *btdev, 1568 cÚ¡ ušt8_t * bdaddr ) 1570  bt_hci_r¥_io_ÿ·bž™y_»que¡_Ãg_»¶y r¥ ; 1572 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 1573 `memýy ( r¥ . bdaddr , bdaddr, 6); 1574 `cmd_com¶‘e ( btdev , BT_HCI_CMD_IO_CAPABILITY_REQUEST_NEG_REPLY , 1575 & r¥ , (rsp)); 1576 } } 1578  $s¥_com¶‘e ( btdev *btdev, cÚ¡ ušt8_t * bdaddr , 1579 ušt8_t ¡©us , boÞ wa™ ) 1581  bt_hci_evt_sim¶e_·œšg_com¶‘e ›v , «v ; 1582  bt_hci_evt_auth_com¶‘e auth ; 1583  btdev * »mÙe = btdev-> cÚn ; 1584  btdev * š™ , * acý ; 1586 ià(! »mÙe ) 1589 btdev -> s¥_¡©us = ¡©us ; 1590 btdev -> s¥_auth_com¶‘e = Œue ; 1592 ià(! »mÙe -> s¥_auth_com¶‘e && wa™ ) 1595 ià( ¡©us =ð BT_HCI_ERR_SUCCESS && 1596 »mÙe -> s¥_¡©us !ð BT_HCI_ERR_SUCCESS ) 1597 ¡©us = »mÙe -> s¥_¡©us ; 1599 ›v . ¡©us = status; 1600 «v . ¡©us = status; 1602 ià( btdev -> auth_š™ ) { 1603 š™ = btdev ; 1604 acý = »mÙe ; 1605 `memýy ( ›v . bdaddr , bdaddr, 6); 1606 `memýy ( «v . bdaddr , btdev ->bdaddr, 6); 1608 š™ = »mÙe ; 1609 acý = btdev ; 1610 `memýy ( ›v . bdaddr , btdev ->bdaddr, 6); 1611 `memýy ( «v . bdaddr , bdaddr, 6); 1614 `£nd_ev’t ( š™ , BT_HCI_EVT_SIMPLE_PAIRING_COMPLETE , & ›v , 1615 ( ›v )); 1616 `£nd_ev’t ( acý , BT_HCI_EVT_SIMPLE_PAIRING_COMPLETE , & «v , 1617 ( «v )); 1619 ià( ¡©us =ð BT_HCI_ERR_SUCCESS ) { 1620 `lšk_key_nÙify ( š™ , ›v . bdaddr , LINK_KEY_DUMMY ); 1621 `lšk_key_nÙify ( acý , «v . bdaddr , LINK_KEY_DUMMY ); 1624 auth . ¡©us = status; 1625 auth . hªdË = `ýu_to_Ë16 (42); 1626 `£nd_ev’t ( š™ , BT_HCI_EVT_AUTH_COMPLETE , & auth , (auth)); 1627 } } 1629  $Ë_£nd_adv_»pÜt ( btdev *btdev, cÚ¡ btdev * »mÙe , 1630 ušt8_t ty³ ) 1632  s__·cked { 1633 ušt8_t subev’t ; 1635  bt_hci_evt_Ë_adv_»pÜt Ïr ; 1636 ušt8_t ¿w [10 + 31 + 1]; 1638 } m‘a_ev’t ; 1640 m‘a_ev’t . subev’t = BT_HCI_EVT_LE_ADV_REPORT ; 1642 `mem£t (& m‘a_ev’t . Ïr , 0, (meta_event.lar)); 1643 m‘a_ev’t . Ïr . num_»pÜts = 1; 1644 m‘a_ev’t . Ïr . ev’t_ty³ = ty³ ; 1645 m‘a_ev’t . Ïr . addr_ty³ = »mÙe -> Ë_adv_own_addr ; 1646 `memýy ( m‘a_ev’t . Ïr . addr , `adv_addr ( »mÙe ), 6); 1649 ià( ty³ == 0x04) { 1650 m‘a_ev’t . Ïr . d©a_Ën = »mÙe -> Ë_sÿn_d©a_Ën ; 1651 `memýy ( m‘a_ev’t . Ïr . d©a , »mÙe -> Ë_sÿn_d©a , 1652 m‘a_ev’t . Ïr . d©a_Ën ); 1654 m‘a_ev’t . Ïr . d©a_Ën = »mÙe -> Ë_adv_d©a_Ën ; 1655 `memýy ( m‘a_ev’t . Ïr . d©a , »mÙe -> Ë_adv_d©a , 1656 m‘a_ev’t . Ïr . d©a_Ën ); 1659 m‘a_ev’t . ¿w [10 + m‘a_ev’t. Ïr . d©a_Ën ] = 127; 1660 `£nd_ev’t ( btdev , BT_HCI_EVT_LE_META_EVENT , & m‘a_ev’t , 1661 1 + 10 + m‘a_ev’t . Ïr . d©a_Ën + 1); 1662 } } 1664  ušt8_t $g‘_adv_»pÜt_ty³ ( ušt8_t adv_ty³ ) 1670 ià( adv_ty³ == 0x04) 1673  adv_ty³ ; 1674 } } 1676  $Ë_£t_adv_’abË_com¶‘e ( btdev *btdev) 1678 ušt8_t »pÜt_ty³ ; 1679  i ; 1681 »pÜt_ty³ = `g‘_adv_»pÜt_ty³ ( btdev -> Ë_adv_ty³ ); 1683  i = 0; i < MAX_BTDEV_ENTRIES ; i++) { 1684 ià(! btdev_li¡ [ i ] || btdev_li¡[i] =ð btdev ) 1687 ià(! btdev_li¡ [ i ]-> Ë_sÿn_’abË ) 1690 ià(! `adv_m©ch ( btdev_li¡ [ i ], btdev )) 1693 `Ë_£nd_adv_»pÜt ( btdev_li¡ [ i ], btdev , »pÜt_ty³ ); 1695 ià( btdev_li¡ [ i ]-> Ë_sÿn_ty³ != 0x01) 1699 ià( btdev -> Ë_adv_ty³ == 0x00 || btdev->le_adv_type == 0x02) 1700 `Ë_£nd_adv_»pÜt ( btdev_li¡ [ i ], btdev , 0x04); 1702 } } 1704  $Ë_£t_sÿn_’abË_com¶‘e ( btdev *btdev) 1706  i ; 1708  i = 0; i < MAX_BTDEV_ENTRIES ; i++) { 1709 ušt8_t »pÜt_ty³ ; 1711 ià(! btdev_li¡ [ i ] || btdev_li¡[i] =ð btdev ) 1714 ià(! btdev_li¡ [ i ]-> Ë_adv_’abË ) 1717 ià(! `adv_m©ch ( btdev , btdev_li¡ [ i ])) 1720 »pÜt_ty³ = `g‘_adv_»pÜt_ty³ ( btdev_li¡ [ i ]-> Ë_adv_ty³ ); 1721 `Ë_£nd_adv_»pÜt ( btdev , btdev_li¡ [ i ], »pÜt_ty³ ); 1723 ià( btdev -> Ë_sÿn_ty³ != 0x01) 1727 ià( btdev_li¡ [ i ]-> Ë_adv_ty³ == 0x00 || 1728 btdev_li¡ [ i ]-> Ë_adv_ty³ == 0x02) 1729 `Ë_£nd_adv_»pÜt ( btdev , btdev_li¡ [ i ], 0x04); 1731 } } 1733  $Ë_¡¬t_’üy±_com¶‘e ( btdev *btdev) 1735  buf [1 + ( bt_hci_evt_Ë_lÚg_‹rm_key_»que¡ )]; 1736  bt_hci_evt_Ë_lÚg_‹rm_key_»que¡ * ev = (*è& buf [1]; 1737  btdev * »mÙe = btdev-> cÚn ; 1739 ià(! »mÙe ) { 1740 `cmd_¡©us ( btdev , BT_HCI_ERR_UNKNOWN_CONN_ID , 1741 BT_HCI_CMD_LE_START_ENCRYPT ); 1745 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , BT_HCI_CMD_LE_START_ENCRYPT ); 1747 `mem£t ( buf , 0, (buf)); 1748 buf [0] = BT_HCI_EVT_LE_LONG_TERM_KEY_REQUEST ; 1749 ev -> hªdË = `ýu_to_Ë16 (42); 1751 `£nd_ev’t ( »mÙe , BT_HCI_EVT_LE_META_EVENT , buf , (buf)); 1752 } } 1754  $Ë_’üy±_com¶‘e ( btdev *btdev) 1756  bt_hci_evt_’üy±_chªge ev ; 1757  bt_hci_r¥_Ë_Ék_»q_»¶y ½ ; 1758  btdev * »mÙe = btdev-> cÚn ; 1760 `mem£t (& ½ , 0, (rp)); 1761 ½ . hªdË = `ýu_to_Ë16 (42); 1763 ià(! »mÙe ) { 1764 ½ . ¡©us = BT_HCI_ERR_UNKNOWN_CONN_ID ; 1765 `cmd_com¶‘e ( btdev , BT_HCI_CMD_LE_LTK_REQ_REPLY , & ½ , 1766 ( ½ )); 1770 ½ . ¡©us = BT_HCI_ERR_SUCCESS ; 1771 `cmd_com¶‘e ( btdev , BT_HCI_CMD_LE_LTK_REQ_REPLY , & ½ , (rp)); 1773 `mem£t (& ev , 0, (ev)); 1775 ià( `memcmp ( btdev -> Ë_Ék , »mÙe ->le_ltk, 16)) { 1776 ev . ¡©us = BT_HCI_ERR_AUTH_FAILURE ; 1777 ev . ’ü_mode = 0x00; 1779 ev . ¡©us = BT_HCI_ERR_SUCCESS ; 1780 ev . ’ü_mode = 0x01; 1783 ev . hªdË = `ýu_to_Ë16 (42); 1785 `£nd_ev’t ( btdev , BT_HCI_EVT_ENCRYPT_CHANGE , & ev , (ev)); 1786 `£nd_ev’t ( »mÙe , BT_HCI_EVT_ENCRYPT_CHANGE , & ev , (ev)); 1787 } } 1789  $Ék_Ãg_»¶y_com¶‘e ( btdev *btdev) 1791  bt_hci_r¥_Ë_Ék_»q_Ãg_»¶y ½ ; 1792  bt_hci_evt_’üy±_chªge ev ; 1793  btdev * »mÙe = btdev-> cÚn ; 1795 `mem£t (& ½ , 0, (rp)); 1796 ½ . hªdË = `ýu_to_Ë16 (42); 1798 ià(! »mÙe ) { 1799 ½ . ¡©us = BT_HCI_ERR_UNKNOWN_CONN_ID ; 1800 `cmd_com¶‘e ( btdev , BT_HCI_CMD_LE_LTK_REQ_NEG_REPLY , & ½ , 1801 ( ½ )); 1805 ½ . ¡©us = BT_HCI_ERR_SUCCESS ; 1806 `cmd_com¶‘e ( btdev , BT_HCI_CMD_LE_LTK_REQ_NEG_REPLY , & ½ , (rp)); 1808 `mem£t (& ev , 0, (ev)); 1809 ev . ¡©us = BT_HCI_ERR_PIN_OR_KEY_MISSING ; 1810 ev . hªdË = `ýu_to_Ë16 (42); 1812 `£nd_ev’t ( »mÙe , BT_HCI_EVT_ENCRYPT_CHANGE , & ev , (ev)); 1813 } } 1815  $deçuÉ_cmd ( btdev *btdev, ušt16_t Ýcode , 1816 cÚ¡ * d©a , ušt8_t Ën ) 1818 cÚ¡  bt_hci_cmd_»mÙe_Çme_»que¡_ÿnûl * ºrc ; 1819 cÚ¡  bt_hci_cmd_wr™e_deçuÉ_lšk_pÞicy * wdÍ ; 1820 cÚ¡  bt_hci_cmd_£t_ev’t_mask * £m ; 1821 cÚ¡  bt_hci_cmd_£t_ev’t_fž‹r * £f ; 1822 cÚ¡  bt_hci_cmd_wr™e_loÿl_Çme * wÊ ; 1823 cÚ¡  bt_hci_cmd_wr™e_cÚn_acû±_timeout * wÿt ; 1824 cÚ¡  bt_hci_cmd_wr™e_·ge_timeout * w± ; 1825 cÚ¡  bt_hci_cmd_wr™e_sÿn_’abË * w£ ; 1826 cÚ¡  bt_hci_cmd_wr™e_·ge_sÿn_aùiv™y * wp§ ; 1827 cÚ¡  bt_hci_cmd_wr™e_šquœy_sÿn_aùiv™y * wi§ ; 1828 cÚ¡  bt_hci_cmd_wr™e_·ge_sÿn_ty³ * wp¡ ; 1829 cÚ¡  bt_hci_cmd_wr™e_auth_’abË * w« ; 1830 cÚ¡  bt_hci_cmd_wr™e_þass_of_dev * wcod ; 1831 cÚ¡  bt_hci_cmd_wr™e_voiû_£‰šg * wvs ; 1832 cÚ¡  bt_hci_cmd_wr™e_šquœy_mode * wim ; 1833 cÚ¡  bt_hci_cmd_wr™e_afh_as£ssm’t_mode * w¯m ; 1834 cÚ¡  bt_hci_cmd_wr™e_ext_šquœy_»¥Ú£ * weœ ; 1835 cÚ¡  bt_hci_cmd_wr™e_sim¶e_·œšg_mode * w¥m ; 1836 cÚ¡  bt_hci_cmd_io_ÿ·bž™y_»que¡_»¶y * iür ; 1837 cÚ¡  bt_hci_cmd_io_ÿ·bž™y_»que¡_»¶y * iüÄ ; 1838 cÚ¡  bt_hci_cmd_wr™e_Ë_ho¡_suµÜ‹d * wlhs ; 1839 cÚ¡  bt_hci_cmd_wr™e_£cu»_cÚn_suµÜt * wscs ; 1840 cÚ¡  bt_hci_cmd_£t_ev’t_mask_·ge2 * £mp2 ; 1841 cÚ¡  bt_hci_cmd_Ë_£t_ev’t_mask * l£m ; 1842 cÚ¡  bt_hci_cmd_Ë_£t_¿ndom_add»ss * l¤a ; 1843 cÚ¡  bt_hci_cmd_Ë_£t_adv_·¿m‘”s * l§p ; 1844 cÚ¡  bt_hci_cmd_Ë_£t_adv_d©a * l§d ; 1845 cÚ¡  bt_hci_cmd_Ë_£t_sÿn_r¥_d©a * ls¤d ; 1846 cÚ¡  bt_hci_cmd_£tup_sync_cÚn * ssc ; 1847 cÚ¡  bt_hci_cmd_wr™e_s¥_debug_mode * wsdm ; 1848 cÚ¡  bt_hci_cmd_Ë_£t_adv_’abË * l§e ; 1849 cÚ¡  bt_hci_cmd_Ë_£t_sÿn_·¿m‘”s * ls¥ ; 1850 cÚ¡  bt_hci_cmd_Ë_£t_sÿn_’abË * ls£ ; 1851 cÚ¡  bt_hci_cmd_Ë_¡¬t_’üy± * l£ ; 1852 cÚ¡  bt_hci_cmd_Ë_Ék_»q_»¶y * μ ; 1853 cÚ¡  bt_hci_cmd_»ad_loÿl_amp_assoc * ¾¯_cmd ; 1854 cÚ¡  bt_hci_cmd_»ad_rssi * ¼ssi ; 1855 cÚ¡  bt_hci_cmd_»ad_tx_pow” * ¹xp ; 1856  bt_hci_r¥_»ad_deçuÉ_lšk_pÞicy rdÍ ; 1857  bt_hci_r¥_»ad_¡Üed_lšk_key r¦k ; 1858  bt_hci_r¥_wr™e_¡Üed_lšk_key w¦k ; 1859  bt_hci_r¥_d–‘e_¡Üed_lšk_key d¦k ; 1860  bt_hci_r¥_»ad_loÿl_Çme ¾n ; 1861  bt_hci_r¥_»ad_cÚn_acû±_timeout rÿt ; 1862  bt_hci_r¥_»ad_·ge_timeout ½t ; 1863  bt_hci_r¥_»ad_sÿn_’abË r£ ; 1864  bt_hci_r¥_»ad_·ge_sÿn_aùiv™y ½§ ; 1865  bt_hci_r¥_»ad_šquœy_sÿn_aùiv™y ri§ ; 1866  bt_hci_r¥_»ad_·ge_sÿn_ty³ ½¡ ; 1867  bt_hci_r¥_»ad_auth_’abË ¿e ; 1868  bt_hci_r¥_»ad_þass_of_dev rcod ; 1869  bt_hci_r¥_»ad_voiû_£‰šg rvs ; 1870  bt_hci_r¥_»ad_num_suµÜ‹d_Ÿc ºsi ; 1871  bt_hci_r¥_»ad_cu¼’t_Ÿc_Ïp * rcž ; 1872  bt_hci_r¥_»ad_šquœy_mode rim ; 1873  bt_hci_r¥_»ad_afh_as£ssm’t_mode ¿am ; 1874  bt_hci_r¥_»ad_ext_šquœy_»¥Ú£ »œ ; 1875  bt_hci_r¥_»ad_sim¶e_·œšg_mode r¥m ; 1876  bt_hci_r¥_»ad_loÿl_oob_d©a ¾od ; 1877  bt_hci_r¥_»ad_šquœy_»¥_tx_pow” rœ ; 1878  bt_hci_r¥_»ad_Ë_ho¡_suµÜ‹d ¾hs ; 1879  bt_hci_r¥_»ad_£cu»_cÚn_suµÜt rscs ; 1880  bt_hci_r¥_»ad_loÿl_oob_ext_d©a ¾Ûd ; 1881  bt_hci_r¥_»ad_sync_Œaš_·¿ms r¡p ; 1882  bt_hci_r¥_»ad_loÿl_v”siÚ ¾v ; 1883  bt_hci_r¥_»ad_loÿl_commªds ¾c ; 1884  bt_hci_r¥_»ad_loÿl_ã©u»s ¾f ; 1885  bt_hci_r¥_»ad_loÿl_ext_ã©u»s ¾ef ; 1886  bt_hci_r¥_»ad_bufãr_size rbs ; 1887  bt_hci_r¥_»ad_couÁry_code rcc ; 1888  bt_hci_r¥_»ad_bd_addr rba ; 1889  bt_hci_r¥_»ad_d©a_block_size rdbs ; 1890  bt_hci_r¥_»ad_loÿl_codecs * ¾sc ; 1891  bt_hci_r¥_»ad_loÿl_amp_šfo ¾ai ; 1892  bt_hci_r¥_»ad_loÿl_amp_assoc ¾¯_r¥ ; 1893  bt_hci_r¥_g‘_mws_Œª¥Üt_cÚfig * gmtc ; 1894  bt_hci_r¥_Ë_»ad_bufãr_size Ìbs ; 1895  bt_hci_r¥_Ë_»ad_loÿl_ã©u»s Ìlf ; 1896  bt_hci_r¥_Ë_»ad_adv_tx_pow” Ì©p ; 1897  bt_hci_r¥_Ë_»ad_suµÜ‹d_¡©es Ìss ; 1898  bt_hci_r¥_Ë_»ad_wh™e_li¡_size Ìwls ; 1899  bt_hci_r¥_Ë_¿nd Ì ; 1900  bt_hci_r¥_Ë_‹¡_’d Ée ; 1901  bt_hci_r¥_»mÙe_Çme_»que¡_ÿnûl ºrc_r¥ ; 1902  bt_hci_r¥_lšk_key_»que¡_»¶y lk¼_r¥ ; 1903  bt_hci_r¥_lšk_key_»que¡_Ãg_»¶y lkºr_r¥ ; 1904  bt_hci_r¥_pš_code_»que¡_Ãg_»¶y pür_r¥ ; 1905  bt_hci_r¥_pš_code_»que¡_Ãg_»¶y püÄ_r¥ ; 1906  bt_hci_r¥_u£r_cÚfœm_»que¡_»¶y uür_r¥ ; 1907  bt_hci_r¥_u£r_cÚfœm_»que¡_Ãg_»¶y uüÄ_r¥ ; 1908  bt_hci_r¥_»ad_rssi ¼ssi_r¥ ; 1909  bt_hci_r¥_»ad_tx_pow” ¹xp_r¥ ; 1910 ušt8_t ¡©us , ·ge ; 1912  Ýcode ) { 1913  BT_HCI_CMD_INQUIRY : 1914 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 1915  unsuµÜ‹d ; 1916 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 1919  BT_HCI_CMD_INQUIRY_CANCEL : 1920 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 1921  unsuµÜ‹d ; 1922 `šquœy_ÿnûl ( btdev ); 1925  BT_HCI_CMD_CREATE_CONN : 1926 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 1927  unsuµÜ‹d ; 1928 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 1931  BT_HCI_CMD_DISCONNECT : 1932 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 1935  BT_HCI_CMD_CREATE_CONN_CANCEL : 1936 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 1937  unsuµÜ‹d ; 1938 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 1941  BT_HCI_CMD_ACCEPT_CONN_REQUEST : 1942 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 1943  unsuµÜ‹d ; 1944 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 1947  BT_HCI_CMD_REJECT_CONN_REQUEST : 1948 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 1949  unsuµÜ‹d ; 1950 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 1953  BT_HCI_CMD_LINK_KEY_REQUEST_REPLY : 1954 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 1955  unsuµÜ‹d ; 1956 lk¼_r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 1957 `memýy ( lk¼_r¥ . bdaddr , d©a , 6); 1958 `cmd_com¶‘e ( btdev , Ýcode , & lk¼_r¥ , (lkrr_rsp)); 1961  BT_HCI_CMD_LINK_KEY_REQUEST_NEG_REPLY : 1962 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 1963  unsuµÜ‹d ; 1964 lkºr_r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 1965 `memýy ( lkºr_r¥ . bdaddr , d©a , 6); 1966 `cmd_com¶‘e ( btdev , Ýcode , & lkºr_r¥ , (lkrnr_rsp)); 1969  BT_HCI_CMD_PIN_CODE_REQUEST_REPLY : 1970 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 1971  unsuµÜ‹d ; 1972 pür_r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 1973 `memýy ( pür_r¥ . bdaddr , d©a , 6); 1974 `cmd_com¶‘e ( btdev , Ýcode , & pür_r¥ , (pcrr_rsp)); 1977  BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY : 1978 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 1979  unsuµÜ‹d ; 1980 püÄ_r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 1981 `memýy ( püÄ_r¥ . bdaddr , d©a , 6); 1982 `cmd_com¶‘e ( btdev , Ýcode , & püÄ_r¥ , (pcrnr_rsp)); 1985  BT_HCI_CMD_AUTH_REQUESTED : 1986 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 1987  unsuµÜ‹d ; 1988 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 1991  BT_HCI_CMD_SET_CONN_ENCRYPT : 1992 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 1993  unsuµÜ‹d ; 1994 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 1997  BT_HCI_CMD_REMOTE_NAME_REQUEST : 1998 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 1999  unsuµÜ‹d ; 2000 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 2003  BT_HCI_CMD_REMOTE_NAME_REQUEST_CANCEL : 2004 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2005  unsuµÜ‹d ; 2006 ºrc = d©a ; 2007 ºrc_r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 2008 `memýy ( ºrc_r¥ . bdaddr , ºrc ->bdaddr, 6); 2009 `cmd_com¶‘e ( btdev , Ýcode , & ºrc_r¥ , (rnrc_rsp)); 2012  BT_HCI_CMD_READ_REMOTE_FEATURES : 2013 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2014  unsuµÜ‹d ; 2015 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 2018  BT_HCI_CMD_READ_REMOTE_EXT_FEATURES : 2019 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2020  unsuµÜ‹d ; 2021 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 2024  BT_HCI_CMD_READ_REMOTE_VERSION : 2025 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 2028  BT_HCI_CMD_READ_CLOCK_OFFSET : 2029 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2030  unsuµÜ‹d ; 2031 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 2034  BT_HCI_CMD_READ_DEFAULT_LINK_POLICY : 2035 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2036  unsuµÜ‹d ; 2037 rdÍ . ¡©us = BT_HCI_ERR_SUCCESS ; 2038 rdÍ . pÞicy = `ýu_to_Ë16 ( btdev -> deçuÉ_lšk_pÞicy ); 2039 `cmd_com¶‘e ( btdev , Ýcode , & rdÍ , (rdlp)); 2042  BT_HCI_CMD_WRITE_DEFAULT_LINK_POLICY : 2043 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2044  unsuµÜ‹d ; 2045 wdÍ = d©a ; 2046 btdev -> deçuÉ_lšk_pÞicy = `Ë16_to_ýu ( wdÍ -> pÞicy ); 2047 ¡©us = BT_HCI_ERR_SUCCESS ; 2048 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2051  BT_HCI_CMD_SET_EVENT_MASK : 2052 £m = d©a ; 2053 `memýy ( btdev -> ev’t_mask , £m -> mask , 8); 2054 ¡©us = BT_HCI_ERR_SUCCESS ; 2055 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2058  BT_HCI_CMD_RESET : 2059 ¡©us = BT_HCI_ERR_SUCCESS ; 2060 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2063  BT_HCI_CMD_SET_EVENT_FILTER : 2064 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2065  unsuµÜ‹d ; 2066 £f = d©a ; 2067 btdev -> ev’t_fž‹r = £f -> ty³ ; 2068 ¡©us = BT_HCI_ERR_SUCCESS ; 2069 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2072  BT_HCI_CMD_READ_STORED_LINK_KEY : 2073 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2074  unsuµÜ‹d ; 2075 r¦k . ¡©us = BT_HCI_ERR_SUCCESS ; 2076 r¦k . max_num_keys = `ýu_to_Ë16 (0); 2077 r¦k . num_keys = `ýu_to_Ë16 (0); 2078 `cmd_com¶‘e ( btdev , Ýcode , & r¦k , (rslk)); 2081  BT_HCI_CMD_WRITE_STORED_LINK_KEY : 2082 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2083  unsuµÜ‹d ; 2084 w¦k . ¡©us = BT_HCI_ERR_SUCCESS ; 2085 w¦k . num_keys = 0; 2086 `cmd_com¶‘e ( btdev , Ýcode , & w¦k , (wslk)); 2089  BT_HCI_CMD_DELETE_STORED_LINK_KEY : 2090 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2091  unsuµÜ‹d ; 2092 d¦k . ¡©us = BT_HCI_ERR_SUCCESS ; 2093 d¦k . num_keys = `ýu_to_Ë16 (0); 2094 `cmd_com¶‘e ( btdev , Ýcode , & d¦k , (dslk)); 2097  BT_HCI_CMD_WRITE_LOCAL_NAME : 2098 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2099  unsuµÜ‹d ; 2100 wÊ = d©a ; 2101 `memýy ( btdev -> Çme , wÊ ->name, 248); 2102 ¡©us = BT_HCI_ERR_SUCCESS ; 2103 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2106  BT_HCI_CMD_READ_LOCAL_NAME : 2107 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2108  unsuµÜ‹d ; 2109 ¾n . ¡©us = BT_HCI_ERR_SUCCESS ; 2110 `memýy ( ¾n . Çme , btdev ->name, 248); 2111 `cmd_com¶‘e ( btdev , Ýcode , & ¾n , (rln)); 2114  BT_HCI_CMD_READ_CONN_ACCEPT_TIMEOUT : 2115 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2116  unsuµÜ‹d ; 2117 rÿt . ¡©us = BT_HCI_ERR_SUCCESS ; 2118 rÿt . timeout = `ýu_to_Ë16 ( btdev -> cÚn_acû±_timeout ); 2119 `cmd_com¶‘e ( btdev , Ýcode , & rÿt , (rcat)); 2122  BT_HCI_CMD_WRITE_CONN_ACCEPT_TIMEOUT : 2123 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2124  unsuµÜ‹d ; 2125 wÿt = d©a ; 2126 btdev -> cÚn_acû±_timeout = `Ë16_to_ýu ( wÿt -> timeout ); 2127 ¡©us = BT_HCI_ERR_SUCCESS ; 2128 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2131  BT_HCI_CMD_READ_PAGE_TIMEOUT : 2132 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2133  unsuµÜ‹d ; 2134 ½t . ¡©us = BT_HCI_ERR_SUCCESS ; 2135 ½t . timeout = `ýu_to_Ë16 ( btdev -> ·ge_timeout ); 2136 `cmd_com¶‘e ( btdev , Ýcode , & ½t , (rpt)); 2139  BT_HCI_CMD_WRITE_PAGE_TIMEOUT : 2140 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2141  unsuµÜ‹d ; 2142 w± = d©a ; 2143 btdev -> ·ge_timeout = `Ë16_to_ýu ( w± -> timeout ); 2144 ¡©us = BT_HCI_ERR_SUCCESS ; 2145 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2148  BT_HCI_CMD_READ_SCAN_ENABLE : 2149 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2150  unsuµÜ‹d ; 2151 r£ . ¡©us = BT_HCI_ERR_SUCCESS ; 2152 r£ . ’abË = btdev -> sÿn_’abË ; 2153 `cmd_com¶‘e ( btdev , Ýcode , & r£ , (rse)); 2156  BT_HCI_CMD_WRITE_SCAN_ENABLE : 2157 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2158  unsuµÜ‹d ; 2159 w£ = d©a ; 2160 btdev -> sÿn_’abË = w£ -> ’abË ; 2161 ¡©us = BT_HCI_ERR_SUCCESS ; 2162 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2165  BT_HCI_CMD_READ_PAGE_SCAN_ACTIVITY : 2166 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2167  unsuµÜ‹d ; 2168 ½§ . ¡©us = BT_HCI_ERR_SUCCESS ; 2169 ½§ . š‹rv® = `ýu_to_Ë16 ( btdev -> ·ge_sÿn_š‹rv® ); 2170 ½§ . wšdow = `ýu_to_Ë16 ( btdev -> ·ge_sÿn_wšdow ); 2171 `cmd_com¶‘e ( btdev , Ýcode , & ½§ , (rpsa)); 2174  BT_HCI_CMD_WRITE_PAGE_SCAN_ACTIVITY : 2175 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2176  unsuµÜ‹d ; 2177 wp§ = d©a ; 2178 btdev -> ·ge_sÿn_š‹rv® = `Ë16_to_ýu ( wp§ -> š‹rv® ); 2179 btdev -> ·ge_sÿn_wšdow = `Ë16_to_ýu ( wp§ -> wšdow ); 2180 ¡©us = BT_HCI_ERR_SUCCESS ; 2181 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2184  BT_HCI_CMD_READ_INQUIRY_SCAN_ACTIVITY : 2185 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2186  unsuµÜ‹d ; 2187 ri§ . ¡©us = BT_HCI_ERR_SUCCESS ; 2188 ri§ . š‹rv® = `ýu_to_Ë16 ( btdev -> šquœy_sÿn_š‹rv® ); 2189 ri§ . wšdow = `ýu_to_Ë16 ( btdev -> šquœy_sÿn_wšdow ); 2190 `cmd_com¶‘e ( btdev , Ýcode , & ri§ , (risa)); 2193  BT_HCI_CMD_WRITE_INQUIRY_SCAN_ACTIVITY : 2194 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2195  unsuµÜ‹d ; 2196 wi§ = d©a ; 2197 btdev -> šquœy_sÿn_š‹rv® = `Ë16_to_ýu ( wi§ -> š‹rv® ); 2198 btdev -> šquœy_sÿn_wšdow = `Ë16_to_ýu ( wi§ -> wšdow ); 2199 ¡©us = BT_HCI_ERR_SUCCESS ; 2200 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2203  BT_HCI_CMD_READ_PAGE_SCAN_TYPE : 2204 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2205  unsuµÜ‹d ; 2206 ½¡ . ¡©us = BT_HCI_ERR_SUCCESS ; 2207 ½¡ . ty³ = btdev -> ·ge_sÿn_ty³ ; 2208 `cmd_com¶‘e ( btdev , Ýcode , & ½¡ , (rpst)); 2211  BT_HCI_CMD_WRITE_PAGE_SCAN_TYPE : 2212 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2213  unsuµÜ‹d ; 2214 wp¡ = d©a ; 2215 btdev -> ·ge_sÿn_ty³ = wp¡ -> ty³ ; 2216 ¡©us = BT_HCI_ERR_SUCCESS ; 2217 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2220  BT_HCI_CMD_READ_AUTH_ENABLE : 2221 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2222  unsuµÜ‹d ; 2223 ¿e . ¡©us = BT_HCI_ERR_SUCCESS ; 2224 ¿e . ’abË = btdev -> auth_’abË ; 2225 `cmd_com¶‘e ( btdev , Ýcode , & ¿e , (rae)); 2228  BT_HCI_CMD_WRITE_AUTH_ENABLE : 2229 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2230  unsuµÜ‹d ; 2231 w« = d©a ; 2232 btdev -> auth_’abË = w« -> ’abË ; 2233 ¡©us = BT_HCI_ERR_SUCCESS ; 2234 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2237  BT_HCI_CMD_READ_CLASS_OF_DEV : 2238 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2239  unsuµÜ‹d ; 2240 rcod . ¡©us = BT_HCI_ERR_SUCCESS ; 2241 `memýy ( rcod . dev_þass , btdev ->dev_class, 3); 2242 `cmd_com¶‘e ( btdev , Ýcode , & rcod , (rcod)); 2245  BT_HCI_CMD_WRITE_CLASS_OF_DEV : 2246 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2247  unsuµÜ‹d ; 2248 wcod = d©a ; 2249 `memýy ( btdev -> dev_þass , wcod ->dev_class, 3); 2250 ¡©us = BT_HCI_ERR_SUCCESS ; 2251 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2254  BT_HCI_CMD_READ_VOICE_SETTING : 2255 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2256  unsuµÜ‹d ; 2257 rvs . ¡©us = BT_HCI_ERR_SUCCESS ; 2258 rvs . £‰šg = `ýu_to_Ë16 ( btdev -> voiû_£‰šg ); 2259 `cmd_com¶‘e ( btdev , Ýcode , & rvs , (rvs)); 2262  BT_HCI_CMD_WRITE_VOICE_SETTING : 2263 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2264  unsuµÜ‹d ; 2265 wvs = d©a ; 2266 btdev -> voiû_£‰šg = `Ë16_to_ýu ( wvs -> £‰šg ); 2267 ¡©us = BT_HCI_ERR_SUCCESS ; 2268 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2271  BT_HCI_CMD_HOST_BUFFER_SIZE : 2272 ¡©us = BT_HCI_ERR_SUCCESS ; 2273 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2276  BT_HCI_CMD_READ_NUM_SUPPORTED_IAC : 2277 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2278  unsuµÜ‹d ; 2279 ºsi . ¡©us = BT_HCI_ERR_SUCCESS ; 2280 ºsi . num_Ÿc = 0x01; 2281 `cmd_com¶‘e ( btdev , Ýcode , & ºsi , (rnsi)); 2284  BT_HCI_CMD_READ_CURRENT_IAC_LAP : 2285 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2286  unsuµÜ‹d ; 2287 rcž = `®loÿ ((*rcil) + 3); 2288 rcž -> ¡©us = BT_HCI_ERR_SUCCESS ; 2289 rcž -> num_Ÿc = 0x01; 2290 rcž -> Ÿc_Ïp [0] = 0x33; 2291 rcž -> Ÿc_Ïp [1] = 0x8b; 2292 rcž -> Ÿc_Ïp [2] = 0x9e; 2293 `cmd_com¶‘e ( btdev , Ýcode , rcž , (*rcil) + 3); 2296  BT_HCI_CMD_WRITE_CURRENT_IAC_LAP : 2297 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2298  unsuµÜ‹d ; 2299 ¡©us = BT_HCI_ERR_SUCCESS ; 2300 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2303  BT_HCI_CMD_READ_INQUIRY_MODE : 2304 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2305  unsuµÜ‹d ; 2306 rim . ¡©us = BT_HCI_ERR_SUCCESS ; 2307 rim . mode = btdev -> šquœy_mode ; 2308 `cmd_com¶‘e ( btdev , Ýcode , & rim , (rim)); 2311  BT_HCI_CMD_WRITE_INQUIRY_MODE : 2312 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2313  unsuµÜ‹d ; 2314 wim = d©a ; 2315 btdev -> šquœy_mode = wim -> mode ; 2316 ¡©us = BT_HCI_ERR_SUCCESS ; 2317 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2320  BT_HCI_CMD_READ_AFH_ASSESSMENT_MODE : 2321 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2322  unsuµÜ‹d ; 2323 ¿am . ¡©us = BT_HCI_ERR_SUCCESS ; 2324 ¿am . mode = btdev -> afh_as£ssm’t_mode ; 2325 `cmd_com¶‘e ( btdev , Ýcode , & ¿am , (raam)); 2328  BT_HCI_CMD_WRITE_AFH_ASSESSMENT_MODE : 2329 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2330  unsuµÜ‹d ; 2331 w¯m = d©a ; 2332 btdev -> afh_as£ssm’t_mode = w¯m -> mode ; 2333 ¡©us = BT_HCI_ERR_SUCCESS ; 2334 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2337  BT_HCI_CMD_READ_EXT_INQUIRY_RESPONSE : 2338 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2339  unsuµÜ‹d ; 2340 »œ . ¡©us = BT_HCI_ERR_SUCCESS ; 2341 »œ . ãc = btdev -> ext_šquœy_ãc ; 2342 `memýy ( »œ . d©a , btdev -> ext_šquœy_r¥ , 240); 2343 `cmd_com¶‘e ( btdev , Ýcode , & »œ , (reir)); 2346  BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE : 2347 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2348  unsuµÜ‹d ; 2349 weœ = d©a ; 2350 btdev -> ext_šquœy_ãc = weœ -> ãc ; 2351 `memýy ( btdev -> ext_šquœy_r¥ , weœ -> d©a , 240); 2352 ¡©us = BT_HCI_ERR_SUCCESS ; 2353 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2356  BT_HCI_CMD_READ_SIMPLE_PAIRING_MODE : 2357 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2358  unsuµÜ‹d ; 2359 r¥m . ¡©us = BT_HCI_ERR_SUCCESS ; 2360 r¥m . mode = btdev -> sim¶e_·œšg_mode ; 2361 `cmd_com¶‘e ( btdev , Ýcode , & r¥m , (rspm)); 2364  BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE : 2365 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2366  unsuµÜ‹d ; 2367 w¥m = d©a ; 2368 btdev -> sim¶e_·œšg_mode = w¥m -> mode ; 2369 ¡©us = BT_HCI_ERR_SUCCESS ; 2370 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2373  BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY : 2374 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2375  unsuµÜ‹d ; 2376 iür = d©a ; 2377 `io_ÿp_»q_»¶y_com¶‘e ( btdev , iür -> bdaddr , 2378 iür -> ÿ·bž™y , 2379 iür -> oob_d©a , 2380 iür -> auth’tiÿtiÚ ); 2383  BT_HCI_CMD_IO_CAPABILITY_REQUEST_NEG_REPLY : 2384 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2385  unsuµÜ‹d ; 2386 iüÄ = d©a ; 2387 `io_ÿp_»q_Ãg_»¶y_com¶‘e ( btdev , iüÄ -> bdaddr ); 2388 `s¥_com¶‘e ( btdev , iüÄ -> bdaddr , BT_HCI_ERR_AUTH_FAILURE , 2389 çl£ ); 2392  BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY : 2393 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2394  unsuµÜ‹d ; 2395 uür_r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 2396 `memýy ( uür_r¥ . bdaddr , d©a , 6); 2397 `cmd_com¶‘e ( btdev , Ýcode , & uür_r¥ , (ucrr_rsp)); 2398 `s¥_com¶‘e ( btdev , d©a , BT_HCI_ERR_SUCCESS , Œue ); 2401  BT_HCI_CMD_USER_CONFIRM_REQUEST_NEG_REPLY : 2402 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2403  unsuµÜ‹d ; 2404 uüÄ_r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 2405 `memýy ( uüÄ_r¥ . bdaddr , d©a , 6); 2406 `cmd_com¶‘e ( btdev , Ýcode , & uüÄ_r¥ , (ucrnr_rsp)); 2407 `s¥_com¶‘e ( btdev , d©a , BT_HCI_ERR_AUTH_FAILURE , Œue ); 2410  BT_HCI_CMD_READ_LOCAL_OOB_DATA : 2411 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2412  unsuµÜ‹d ; 2413 ¾od . ¡©us = BT_HCI_ERR_SUCCESS ; 2414 `cmd_com¶‘e ( btdev , Ýcode , & ¾od , (rlod)); 2417  BT_HCI_CMD_READ_INQUIRY_RESP_TX_POWER : 2418 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2419  unsuµÜ‹d ; 2420 rœ . ¡©us = BT_HCI_ERR_SUCCESS ; 2421 rœ . Ëv– = 0; 2422 `cmd_com¶‘e ( btdev , Ýcode , & rœ , (rirtp)); 2425  BT_HCI_CMD_READ_LE_HOST_SUPPORTED : 2426 ià( btdev -> ty³ !ð BTDEV_TYPE_BREDRLE ) 2427  unsuµÜ‹d ; 2428 ¾hs . ¡©us = BT_HCI_ERR_SUCCESS ; 2429 ¾hs . suµÜ‹d = btdev -> Ë_suµÜ‹d ; 2430 ¾hs . simuɪeous = btdev -> Ë_simuɪeous ; 2431 `cmd_com¶‘e ( btdev , Ýcode , & ¾hs , (rlhs)); 2434  BT_HCI_CMD_WRITE_LE_HOST_SUPPORTED : 2435 ià( btdev -> ty³ !ð BTDEV_TYPE_BREDRLE ) 2436  unsuµÜ‹d ; 2437 wlhs = d©a ; 2438 btdev -> Ë_suµÜ‹d = wlhs -> suµÜ‹d ; 2439 btdev -> Ë_simuɪeous = wlhs -> simuɪeous ; 2440 ¡©us = BT_HCI_ERR_SUCCESS ; 2441 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2444  BT_HCI_CMD_READ_SECURE_CONN_SUPPORT : 2445 ià( btdev -> ty³ !ð BTDEV_TYPE_BREDRLE ) 2446  unsuµÜ‹d ; 2447 rscs . ¡©us = BT_HCI_ERR_SUCCESS ; 2448 rscs . suµÜt = btdev -> £cu»_cÚn_suµÜt ; 2449 `cmd_com¶‘e ( btdev , Ýcode , & rscs , (rscs)); 2452  BT_HCI_CMD_WRITE_SECURE_CONN_SUPPORT : 2453 ià( btdev -> ty³ !ð BTDEV_TYPE_BREDRLE ) 2454  unsuµÜ‹d ; 2455 wscs = d©a ; 2456 btdev -> £cu»_cÚn_suµÜt = wscs -> suµÜt ; 2457 ¡©us = BT_HCI_ERR_SUCCESS ; 2458 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2461  BT_HCI_CMD_READ_LOCAL_OOB_EXT_DATA : 2462 ià( btdev -> ty³ !ð BTDEV_TYPE_BREDRLE ) 2463  unsuµÜ‹d ; 2464 ¾Ûd . ¡©us = BT_HCI_ERR_SUCCESS ; 2465 `cmd_com¶‘e ( btdev , Ýcode , & ¾Ûd , (rloed)); 2468  BT_HCI_CMD_READ_SYNC_TRAIN_PARAMS : 2469 ià( btdev -> ty³ !ð BTDEV_TYPE_BREDRLE ) 2470  unsuµÜ‹d ; 2471 r¡p . ¡©us = BT_HCI_ERR_SUCCESS ; 2472 r¡p . š‹rv® = `ýu_to_Ë16 ( btdev -> sync_Œaš_š‹rv® ); 2473 r¡p . timeout = `ýu_to_Ë32 ( btdev -> sync_Œaš_timeout ); 2474 r¡p . £rviû_d©a = btdev -> sync_Œaš_£rviû_d©a ; 2475 `cmd_com¶‘e ( btdev , Ýcode , & r¡p , (rstp)); 2478  BT_HCI_CMD_READ_LOCAL_VERSION : 2479 ¾v . ¡©us = BT_HCI_ERR_SUCCESS ; 2480 ¾v . hci_v” = btdev -> v”siÚ ; 2481 ¾v . hci_»v = `ýu_to_Ë16 ( btdev -> »visiÚ ); 2482 ¾v . lmp_v” = btdev -> v”siÚ ; 2483 ¾v . mªuçùu»r = `ýu_to_Ë16 ( btdev ->manufacturer); 2484 ¾v . lmp_subv” = `ýu_to_Ë16 ( btdev -> »visiÚ ); 2485 `cmd_com¶‘e ( btdev , Ýcode , & ¾v , (rlv)); 2488  BT_HCI_CMD_READ_LOCAL_COMMANDS : 2489 ¾c . ¡©us = BT_HCI_ERR_SUCCESS ; 2490 `memýy ( ¾c . commªds , btdev ->commands, 64); 2491 `cmd_com¶‘e ( btdev , Ýcode , & ¾c , (rlc)); 2494  BT_HCI_CMD_READ_LOCAL_FEATURES : 2495 ¾f . ¡©us = BT_HCI_ERR_SUCCESS ; 2496 `memýy ( ¾f . ã©u»s , btdev ->features, 8); 2497 `cmd_com¶‘e ( btdev , Ýcode , & ¾f , (rlf)); 2500  BT_HCI_CMD_READ_LOCAL_EXT_FEATURES : 2501 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2502  unsuµÜ‹d ; 2504 ·ge = ((cÚ¡ ušt8_t *è d©a )[0]; 2506 ¾ef . ·ge =…age; 2507 ¾ef . max_·ge = btdev ->max_page; 2509 ià( ·ge > btdev -> max_·ge ) { 2510 ¾ef . ¡©us = BT_HCI_ERR_INVALID_PARAMETERS ; 2511 `mem£t ( ¾ef . ã©u»s , 0, 8); 2512 `cmd_com¶‘e ( btdev , Ýcode , & ¾ef , (rlef)); 2516  ·ge ) { 2518 ¾ef . ¡©us = BT_HCI_ERR_SUCCESS ; 2519 `memýy ( ¾ef . ã©u»s , btdev ->features, 8); 2522 ¾ef . ¡©us = BT_HCI_ERR_SUCCESS ; 2523 `btdev_g‘_ho¡_ã©u»s ( btdev , ¾ef . ã©u»s ); 2526 ¾ef . ¡©us = BT_HCI_ERR_SUCCESS ; 2527 `memýy ( ¾ef . ã©u»s , btdev -> ã©_·ge_2 , 8); 2530 ¾ef . ¡©us = BT_HCI_ERR_INVALID_PARAMETERS ; 2531 `mem£t ( ¾ef . ã©u»s , 0, 8); 2534 `cmd_com¶‘e ( btdev , Ýcode , & ¾ef , (rlef)); 2537  BT_HCI_CMD_READ_BUFFER_SIZE : 2538 rbs . ¡©us = BT_HCI_ERR_SUCCESS ; 2539 rbs . aþ_mtu = `ýu_to_Ë16 ( btdev ->acl_mtu); 2540 rbs . sco_mtu = 0; 2541 rbs . aþ_max_pkt = `ýu_to_Ë16 ( btdev ->acl_max_pkt); 2542 rbs . sco_max_pkt = `ýu_to_Ë16 (0); 2543 `cmd_com¶‘e ( btdev , Ýcode , & rbs , (rbs)); 2546  BT_HCI_CMD_READ_COUNTRY_CODE : 2547 rcc . ¡©us = BT_HCI_ERR_SUCCESS ; 2548 rcc . code = btdev -> couÁry_code ; 2549 `cmd_com¶‘e ( btdev , Ýcode , & rcc , (rcc)); 2552  BT_HCI_CMD_READ_BD_ADDR : 2553 rba . ¡©us = BT_HCI_ERR_SUCCESS ; 2554 `memýy ( rba . bdaddr , btdev ->bdaddr, 6); 2555 `cmd_com¶‘e ( btdev , Ýcode , & rba , (rba)); 2558  BT_HCI_CMD_READ_DATA_BLOCK_SIZE : 2559 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2560  unsuµÜ‹d ; 2561 rdbs . ¡©us = BT_HCI_ERR_SUCCESS ; 2562 rdbs . max_aþ_Ën = `ýu_to_Ë16 ( btdev -> aþ_mtu ); 2563 rdbs . block_Ën = `ýu_to_Ë16 ( btdev -> aþ_mtu ); 2564 rdbs . num_blocks = `ýu_to_Ë16 ( btdev -> aþ_max_pkt ); 2565 `cmd_com¶‘e ( btdev , Ýcode , & rdbs , (rdbs)); 2568  BT_HCI_CMD_READ_LOCAL_CODECS : 2569 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2570  unsuµÜ‹d ; 2571 ¾sc = `®loÿ ((*rlsc) + 7); 2572 ¾sc -> ¡©us = BT_HCI_ERR_SUCCESS ; 2573 ¾sc -> num_codecs = 0x06; 2574 ¾sc -> codec [0] = 0x00; 2575 ¾sc -> codec [1] = 0x01; 2576 ¾sc -> codec [2] = 0x02; 2577 ¾sc -> codec [3] = 0x03; 2578 ¾sc -> codec [4] = 0x04; 2579 ¾sc -> codec [5] = 0x05; 2580 ¾sc -> codec [6] = 0x00; 2581 `cmd_com¶‘e ( btdev , Ýcode , ¾sc , (*rlsc) + 7); 2584  BT_HCI_CMD_READ_RSSI : 2585 ¼ssi = d©a ; 2587 ¼ssi_r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 2588 ¼ssi_r¥ . hªdË = ¼ssi ->handle; 2589 ¼ssi_r¥ . rssi = -1; 2590 `cmd_com¶‘e ( btdev , Ýcode , & ¼ssi_r¥ , (rrssi_rsp)); 2593  BT_HCI_CMD_READ_TX_POWER : 2594 ¹xp = d©a ; 2596  ¹xp -> ty³ ) { 2598 ¹xp_r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 2599 ¹xp_r¥ . Ëv– = -1; 2603 ¹xp_r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 2604 ¹xp_r¥ . Ëv– = 4; 2608 ¹xp_r¥ . Ëv– = 0; 2609 ¹xp_r¥ . ¡©us = BT_HCI_ERR_INVALID_PARAMETERS ; 2613 ¹xp_r¥ . hªdË = ¹xp ->handle; 2614 `cmd_com¶‘e ( btdev , Ýcode , & ¹xp_r¥ , (rtxp_rsp)); 2617  BT_HCI_CMD_READ_LOCAL_AMP_INFO : 2618 ià( btdev -> ty³ !ð BTDEV_TYPE_AMP ) 2619  unsuµÜ‹d ; 2620 ¾ai . ¡©us = BT_HCI_ERR_SUCCESS ; 2621 ¾ai . amp_¡©us = 0x01; 2622 ¾ai . tÙ®_bw = `ýu_to_Ë32 (0); 2623 ¾ai . max_bw = `ýu_to_Ë32 (0); 2624 ¾ai . mš_Ï‹ncy = `ýu_to_Ë32 (0); 2625 ¾ai . max_pdu = `ýu_to_Ë32 (672); 2626 ¾ai . amp_ty³ = 0x01; 2627 ¾ai . ·l_ÿp = `ýu_to_Ë16 (0x0000); 2628 ¾ai . max_assoc_Ën = `ýu_to_Ë16 (672); 2629 ¾ai . max_æush_to = `ýu_to_Ë32 (0xffffffff); 2630 ¾ai . be_æush_to = `ýu_to_Ë32 (0xffffffff); 2631 `cmd_com¶‘e ( btdev , Ýcode , & ¾ai , (rlai)); 2634  BT_HCI_CMD_READ_LOCAL_AMP_ASSOC : 2635 ià( btdev -> ty³ !ð BTDEV_TYPE_AMP ) 2636  unsuµÜ‹d ; 2637 ¾¯_cmd = d©a ; 2638 ¾¯_r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 2639 ¾¯_r¥ . phy_hªdË = ¾¯_cmd ->phy_handle; 2640 ¾¯_r¥ . »maš_assoc_Ën = `ýu_to_Ë16 (1); 2641 ¾¯_r¥ . assoc_äagm’t [0] = 0x42; 2642 `mem£t ( ¾¯_r¥ . assoc_äagm’t + 1, 0, 2643 ( ¾¯_r¥ . assoc_äagm’t ) - 1); 2644 `cmd_com¶‘e ( btdev , Ýcode , & ¾¯_r¥ , (rlaa_rsp)); 2647  BT_HCI_CMD_GET_MWS_TRANSPORT_CONFIG : 2648 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2649  unsuµÜ‹d ; 2650 gmtc = `®loÿ ((*gmtc)); 2651 gmtc -> ¡©us = BT_HCI_ERR_SUCCESS ; 2652 gmtc -> num_Œª¥Üts = 0x00; 2653 `cmd_com¶‘e ( btdev , Ýcode , gmtc , (*gmtc)); 2656  BT_HCI_CMD_SET_EVENT_MASK_PAGE2 : 2657 ià( btdev -> ty³ !ð BTDEV_TYPE_BREDRLE ) 2658  unsuµÜ‹d ; 2659 £mp2 = d©a ; 2660 `memýy ( btdev -> ev’t_mask_·ge2 , £mp2 -> mask , 8); 2661 ¡©us = BT_HCI_ERR_SUCCESS ; 2662 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2665  BT_HCI_CMD_LE_SET_EVENT_MASK : 2666 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2667  unsuµÜ‹d ; 2668 l£m = d©a ; 2669 `memýy ( btdev -> Ë_ev’t_mask , l£m -> mask , 8); 2670 ¡©us = BT_HCI_ERR_SUCCESS ; 2671 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2674  BT_HCI_CMD_LE_READ_BUFFER_SIZE : 2675 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2676  unsuµÜ‹d ; 2677 Ìbs . ¡©us = BT_HCI_ERR_SUCCESS ; 2678 Ìbs . Ë_mtu = `ýu_to_Ë16 ( btdev -> aþ_mtu ); 2679 Ìbs . Ë_max_pkt = btdev -> aþ_max_pkt ; 2680 `cmd_com¶‘e ( btdev , Ýcode , & Ìbs , (lrbs)); 2683  BT_HCI_CMD_LE_READ_LOCAL_FEATURES : 2684 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2685  unsuµÜ‹d ; 2686 Ìlf . ¡©us = BT_HCI_ERR_SUCCESS ; 2687 `memýy ( Ìlf . ã©u»s , btdev -> Ë_ã©u»s , 8); 2688 `cmd_com¶‘e ( btdev , Ýcode , & Ìlf , (lrlf)); 2691  BT_HCI_CMD_LE_SET_RANDOM_ADDRESS : 2692 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2693  unsuµÜ‹d ; 2694 l¤a = d©a ; 2695 `memýy ( btdev -> ¿ndom_addr , l¤a -> addr , 6); 2696 ¡©us = BT_HCI_ERR_SUCCESS ; 2697 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2700  BT_HCI_CMD_LE_SET_ADV_PARAMETERS : 2701 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2702  unsuµÜ‹d ; 2704 ià( btdev -> Ë_adv_’abË ) { 2705 ¡©us = BT_HCI_ERR_COMMAND_DISALLOWED ; 2706 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2710 l§p = d©a ; 2711 btdev -> Ë_adv_ty³ = l§p -> ty³ ; 2712 btdev -> Ë_adv_own_addr = l§p -> own_addr_ty³ ; 2713 btdev -> Ë_adv_dœeù_addr_ty³ = l§p -> dœeù_addr_ty³ ; 2714 `memýy ( btdev -> Ë_adv_dœeù_addr , l§p -> dœeù_addr , 6); 2716 ¡©us = BT_HCI_ERR_SUCCESS ; 2717 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2720  BT_HCI_CMD_LE_READ_ADV_TX_POWER : 2721 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2722  unsuµÜ‹d ; 2723 Ì©p . ¡©us = BT_HCI_ERR_SUCCESS ; 2724 Ì©p . Ëv– = 0; 2725 `cmd_com¶‘e ( btdev , Ýcode , & Ì©p , (lratp)); 2728  BT_HCI_CMD_LE_SET_ADV_ENABLE : 2729 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2730  unsuµÜ‹d ; 2731 l§e = d©a ; 2732 ià( btdev -> Ë_adv_’abË =ð l§e -> ’abË ) 2733 ¡©us = BT_HCI_ERR_COMMAND_DISALLOWED ; 2735 btdev -> Ë_adv_’abË = l§e -> ’abË ; 2736 ¡©us = BT_HCI_ERR_SUCCESS ; 2738 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2739 ià( ¡©us =ð BT_HCI_ERR_SUCCESS && btdev -> Ë_adv_’abË ) 2740 `Ë_£t_adv_’abË_com¶‘e ( btdev ); 2743  BT_HCI_CMD_LE_SET_SCAN_PARAMETERS : 2744 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2745  unsuµÜ‹d ; 2747 ls¥ = d©a ; 2749 ià( btdev -> Ë_sÿn_’abË ) 2750 ¡©us = BT_HCI_ERR_COMMAND_DISALLOWED ; 2752 ¡©us = BT_HCI_ERR_SUCCESS ; 2753 btdev -> Ë_sÿn_ty³ = ls¥ -> ty³ ; 2754 btdev -> Ë_sÿn_own_addr_ty³ = ls¥ -> own_addr_ty³ ; 2757 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2760  BT_HCI_CMD_LE_SET_SCAN_ENABLE : 2761 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2762  unsuµÜ‹d ; 2763 ls£ = d©a ; 2764 ià( btdev -> Ë_sÿn_’abË =ð ls£ -> ’abË ) 2765 ¡©us = BT_HCI_ERR_COMMAND_DISALLOWED ; 2767 btdev -> Ë_sÿn_’abË = ls£ -> ’abË ; 2768 btdev -> Ë_fž‹r_dup = ls£ -> fž‹r_dup ; 2769 ¡©us = BT_HCI_ERR_SUCCESS ; 2771 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2772 ià( ¡©us =ð BT_HCI_ERR_SUCCESS && btdev -> Ë_sÿn_’abË ) 2773 `Ë_£t_sÿn_’abË_com¶‘e ( btdev ); 2776  BT_HCI_CMD_LE_CREATE_CONN : 2777 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2778  unsuµÜ‹d ; 2779 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 2782  BT_HCI_CMD_LE_READ_WHITE_LIST_SIZE : 2783 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2784  unsuµÜ‹d ; 2785 Ìwls . ¡©us = BT_HCI_ERR_SUCCESS ; 2786 Ìwls . size = 0; 2787 `cmd_com¶‘e ( btdev , Ýcode , & Ìwls , (lrwls)); 2790  BT_HCI_CMD_LE_CONN_UPDATE : 2791 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2792  unsuµÜ‹d ; 2793 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 2796  BT_HCI_CMD_LE_CLEAR_WHITE_LIST : 2797 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2798  unsuµÜ‹d ; 2799 ¡©us = BT_HCI_ERR_SUCCESS ; 2800 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2803  BT_HCI_CMD_LE_READ_SUPPORTED_STATES : 2804 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2805  unsuµÜ‹d ; 2806 Ìss . ¡©us = BT_HCI_ERR_SUCCESS ; 2807 `memýy ( Ìss . ¡©es , btdev -> Ë_¡©es , 8); 2808 `cmd_com¶‘e ( btdev , Ýcode , & Ìss , (lrss)); 2811  BT_HCI_CMD_LE_SET_ADV_DATA : 2812 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2813  unsuµÜ‹d ; 2814 l§d = d©a ; 2815 btdev -> Ë_adv_d©a_Ën = l§d -> Ën ; 2816 `memýy ( btdev -> Ë_adv_d©a , l§d -> d©a , 31); 2817 ¡©us = BT_HCI_ERR_SUCCESS ; 2818 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2821  BT_HCI_CMD_LE_SET_SCAN_RSP_DATA : 2822 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2823  unsuµÜ‹d ; 2824 ls¤d = d©a ; 2825 btdev -> Ë_sÿn_d©a_Ën = ls¤d -> Ën ; 2826 `memýy ( btdev -> Ë_sÿn_d©a , ls¤d -> d©a , 31); 2827 ¡©us = BT_HCI_ERR_SUCCESS ; 2828 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2831  BT_HCI_CMD_LE_RAND : 2832 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2833  unsuµÜ‹d ; 2834 Ì . ¡©us = BT_HCI_ERR_SUCCESS ; 2835 Ì . numb” = `¿nd (); 2836 `cmd_com¶‘e ( btdev , Ýcode , & Ì , (lr)); 2839  BT_HCI_CMD_LE_START_ENCRYPT : 2840 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2841  unsuµÜ‹d ; 2842 l£ = d©a ; 2843 `memýy ( btdev -> Ë_Ék , l£ -> Ék , 16); 2844 `Ë_¡¬t_’üy±_com¶‘e ( btdev ); 2847  BT_HCI_CMD_LE_LTK_REQ_REPLY : 2848 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2849  unsuµÜ‹d ; 2850 μ = d©a ; 2851 `memýy ( btdev -> Ë_Ék , μ -> Ék , 16); 2852 `Ë_’üy±_com¶‘e ( btdev ); 2855  BT_HCI_CMD_LE_LTK_REQ_NEG_REPLY : 2856 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2857  unsuµÜ‹d ; 2858 `Ék_Ãg_»¶y_com¶‘e ( btdev ); 2861  BT_HCI_CMD_SETUP_SYNC_CONN : 2862 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2863  unsuµÜ‹d ; 2864 ssc = d©a ; 2865 ¡©us = BT_HCI_ERR_SUCCESS ; 2866 `cmd_¡©us ( btdev , BT_HCI_ERR_SUCCESS , Ýcode ); 2867 `sync_cÚn_com¶‘e ( btdev , ssc -> voiû_£‰šg , 2868 BT_HCI_ERR_SUCCESS ); 2871  BT_HCI_CMD_ADD_SCO_CONN : 2872 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2873  unsuµÜ‹d ; 2874 `sco_cÚn_com¶‘e ( btdev , BT_HCI_ERR_SUCCESS ); 2877  BT_HCI_CMD_ENABLE_DUT_MODE : 2878 ¡©us = BT_HCI_ERR_SUCCESS ; 2879 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2882  BT_HCI_CMD_WRITE_SSP_DEBUG_MODE : 2883 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2884  unsuµÜ‹d ; 2885 wsdm = d©a ; 2886 btdev -> s¥_debug_mode = wsdm -> mode ; 2887 ¡©us = BT_HCI_ERR_SUCCESS ; 2888 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2891  BT_HCI_CMD_LE_RECEIVER_TEST : 2892 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2893  unsuµÜ‹d ; 2894 ¡©us = BT_HCI_ERR_SUCCESS ; 2895 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2898  BT_HCI_CMD_LE_TRANSMITTER_TEST : 2899 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2900  unsuµÜ‹d ; 2901 ¡©us = BT_HCI_ERR_SUCCESS ; 2902 `cmd_com¶‘e ( btdev , Ýcode , & ¡©us , (status)); 2905  BT_HCI_CMD_LE_TEST_END : 2906 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 2907  unsuµÜ‹d ; 2908 Ée . ¡©us = BT_HCI_ERR_SUCCESS ; 2909 Ée . num_·ck‘s = 0; 2910 `cmd_com¶‘e ( btdev , Ýcode , & Ée , (lte)); 2914  unsuµÜ‹d ; 2919 unsuµÜ‹d : 2920 `´štf ("UnsuµÜ‹d commªd 0x%4.4x\n", Ýcode ); 2921 `hexdump ( d©a , Ën ); 2922 `cmd_¡©us ( btdev , BT_HCI_ERR_UNKNOWN_COMMAND , Ýcode ); 2923 } } 2925  $deçuÉ_cmd_com¶‘iÚ ( btdev *btdev, ušt16_t Ýcode , 2926 cÚ¡ * d©a , ušt8_t Ën ) 2928 cÚ¡  bt_hci_cmd_ü—‹_cÚn * cc ; 2929 cÚ¡  bt_hci_cmd_discÚÃù * dc ; 2930 cÚ¡  bt_hci_cmd_ü—‹_cÚn_ÿnûl * ccc ; 2931 cÚ¡  bt_hci_cmd_acû±_cÚn_»que¡ * aü ; 2932 cÚ¡  bt_hci_cmd_»jeù_cÚn_»que¡ * rü ; 2933 cÚ¡  bt_hci_cmd_auth_»que¡ed * ¬ ; 2934 cÚ¡  bt_hci_cmd_£t_cÚn_’üy± * sû ; 2935 cÚ¡  bt_hci_cmd_lšk_key_»que¡_»¶y * lk¼ ; 2936 cÚ¡  bt_hci_cmd_lšk_key_»que¡_Ãg_»¶y * lkºr ; 2937 cÚ¡  bt_hci_cmd_pš_code_»que¡_Ãg_»¶y * püÄ ; 2938 cÚ¡  bt_hci_cmd_pš_code_»que¡_»¶y * pür ; 2939 cÚ¡  bt_hci_cmd_»mÙe_Çme_»que¡ * ºr ; 2940 cÚ¡  bt_hci_cmd_»mÙe_Çme_»que¡_ÿnûl * ºrc ; 2941 cÚ¡  bt_hci_cmd_»ad_»mÙe_ã©u»s * ¼f ; 2942 cÚ¡  bt_hci_cmd_»ad_»mÙe_ext_ã©u»s * ¼ef ; 2943 cÚ¡  bt_hci_cmd_»ad_»mÙe_v”siÚ * ¼v ; 2944 cÚ¡  bt_hci_cmd_»ad_þock_off£t * rco ; 2945 cÚ¡  bt_hci_cmd_Ë_ü—‹_cÚn * Ëcc ; 2946 cÚ¡  bt_hci_cmd_Ë_cÚn_upd©e * Ëcu ; 2948  Ýcode ) { 2949  BT_HCI_CMD_INQUIRY : 2950 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2952 `šquœy_cmd ( btdev , d©a ); 2955  BT_HCI_CMD_CREATE_CONN : 2956 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2958 cc = d©a ; 2959 `cÚn_»que¡ ( btdev , cc -> bdaddr ); 2962  BT_HCI_CMD_DISCONNECT : 2963 dc = d©a ; 2964 `discÚÃù_com¶‘e ( btdev , `Ë16_to_ýu ( dc -> hªdË ), dc-> »asÚ ); 2967  BT_HCI_CMD_CREATE_CONN_CANCEL : 2968 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2970 ccc = d©a ; 2971 `cÚn_com¶‘e ( btdev , ccc -> bdaddr , BT_HCI_ERR_UNKNOWN_CONN_ID ); 2974  BT_HCI_CMD_ACCEPT_CONN_REQUEST : 2975 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2977 aü = d©a ; 2978 `acû±_cÚn_»que¡_com¶‘e ( btdev , aü -> bdaddr ); 2981  BT_HCI_CMD_REJECT_CONN_REQUEST : 2982 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2984 rü = d©a ; 2985 `cÚn_com¶‘e ( btdev , rü -> bdaddr , BT_HCI_ERR_UNKNOWN_CONN_ID ); 2988  BT_HCI_CMD_LINK_KEY_REQUEST_REPLY : 2989 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2991 lk¼ = d©a ; 2992 `lšk_key_»q_»¶y_com¶‘e ( btdev , lk¼ -> bdaddr ,†k¼-> lšk_key ); 2995  BT_HCI_CMD_LINK_KEY_REQUEST_NEG_REPLY : 2996 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 2998 lkºr = d©a ; 2999 `lšk_key_»q_Ãg_»¶y_com¶‘e ( btdev , lkºr -> bdaddr ); 3002  BT_HCI_CMD_PIN_CODE_REQUEST_REPLY : 3003 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 3005 pür = d©a ; 3006 `pš_code_»q_»¶y_com¶‘e ( btdev , pür -> bdaddr ,…ür-> pš_Ën , 3007 pür -> pš_code ); 3010  BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY : 3011 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 3013 püÄ = d©a ; 3014 `pš_code_»q_Ãg_»¶y_com¶‘e ( btdev , püÄ -> bdaddr ); 3017  BT_HCI_CMD_AUTH_REQUESTED : 3018 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 3020 ¬ = d©a ; 3021 `auth_»que¡_com¶‘e ( btdev , `Ë16_to_ýu ( ¬ -> hªdË )); 3024  BT_HCI_CMD_SET_CONN_ENCRYPT : 3025 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 3027 sû = d©a ; 3028 ià( btdev -> cÚn ) { 3029 ušt8_t mode ; 3031 ià(! sû -> ’ü_mode ) 3032 mode = 0x00; 3033 ià( btdev -> £cu»_cÚn_suµÜt && 3034 btdev -> cÚn -> £cu»_cÚn_suµÜt ) 3035 mode = 0x02; 3037 mode = 0x01; 3039 `’üy±_chªge ( btdev , mode , BT_HCI_ERR_SUCCESS ); 3040 `’üy±_chªge ( btdev -> cÚn , mode , BT_HCI_ERR_SUCCESS ); 3044  BT_HCI_CMD_REMOTE_NAME_REQUEST : 3045 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 3047 ºr = d©a ; 3048 `Çme_»que¡_com¶‘e ( btdev , ºr -> bdaddr , BT_HCI_ERR_SUCCESS ); 3051  BT_HCI_CMD_REMOTE_NAME_REQUEST_CANCEL : 3052 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 3054 ºrc = d©a ; 3055 `Çme_»que¡_com¶‘e ( btdev , ºrc -> bdaddr , 3056 BT_HCI_ERR_UNKNOWN_CONN_ID ); 3059  BT_HCI_CMD_READ_REMOTE_FEATURES : 3060 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 3062 ¼f = d©a ; 3063 `»mÙe_ã©u»s_com¶‘e ( btdev , `Ë16_to_ýu ( ¼f -> hªdË )); 3066  BT_HCI_CMD_READ_REMOTE_EXT_FEATURES : 3067 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 3069 ¼ef = d©a ; 3070 `»mÙe_ext_ã©u»s_com¶‘e ( btdev , `Ë16_to_ýu ( ¼ef -> hªdË ), 3071 ¼ef -> ·ge ); 3074  BT_HCI_CMD_READ_REMOTE_VERSION : 3075 ¼v = d©a ; 3076 `»mÙe_v”siÚ_com¶‘e ( btdev , `Ë16_to_ýu ( ¼v -> hªdË )); 3079  BT_HCI_CMD_READ_CLOCK_OFFSET : 3080 ià( btdev -> ty³ =ð BTDEV_TYPE_LE ) 3082 rco = d©a ; 3083 `»mÙe_þock_off£t_com¶‘e ( btdev , `Ë16_to_ýu ( rco -> hªdË )); 3086  BT_HCI_CMD_LE_CREATE_CONN : 3087 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 3089 Ëcc = d©a ; 3090 btdev -> Ë_sÿn_own_addr_ty³ = Ëcc -> own_addr_ty³ ; 3091 `Ë_cÚn_»que¡ ( btdev , Ëcc -> ³”_addr ,†ecc-> ³”_addr_ty³ ); 3094  BT_HCI_CMD_LE_CONN_UPDATE : 3095 ià( btdev -> ty³ =ð BTDEV_TYPE_BREDR ) 3097 Ëcu = d©a ; 3098 `Ë_cÚn_upd©e ( btdev , `Ë16_to_ýu ( Ëcu -> hªdË ), 3099 `Ë16_to_ýu ( Ëcu -> mš_š‹rv® ), 3100 `Ë16_to_ýu ( Ëcu -> max_š‹rv® ), 3101 `Ë16_to_ýu ( Ëcu -> Ï‹ncy ), 3102 `Ë16_to_ýu ( Ëcu -> supv_timeout ), 3103 `Ë16_to_ýu ( Ëcu -> mš_Ëngth ), 3104 `Ë16_to_ýu ( Ëcu -> max_Ëngth )); 3107 } } 3109  sbtdev_ÿÎback { 3110 (* mfunùiÚ )( btdev_ÿÎback mÿÎback , ušt8_t m»¥Ú£ , 3111 ušt8_t m¡©us , cÚ¡ * md©a , ušt8_ˆ mËn ); 3112 * mu£r_d©a ; 3113 ušt16_t mÝcode ; 3114 cÚ¡ * md©a ; 3115 ušt8_t mËn ; 3118  $btdev_commªd_»¥Ú£ ( btdev_ÿÎback ÿÎback , ušt8_t »¥Ú£ , 3119 ušt8_t ¡©us , cÚ¡ * d©a , ušt8_ˆ Ën ) 3121 ÿÎback -> `funùiÚ (ÿÎback, »¥Ú£ , ¡©us , d©a , Ën ); 3122 } } 3124  $hªdËr_ÿÎback ( btdev_ÿÎback ÿÎback , ušt8_t »¥Ú£ , 3125 ušt8_t ¡©us , cÚ¡ * d©a , ušt8_ˆ Ën ) 3127  btdev *btdev = ÿÎback -> u£r_d©a ; 3129  »¥Ú£ ) { 3130  BTDEV_RESPONSE_DEFAULT : 3131 ià(! `run_hooks ( btdev , BTDEV_HOOK_PRE_CMD , ÿÎback -> Ýcode , 3132 ÿÎback -> d©a , c®lback-> Ën )) 3134 `deçuÉ_cmd ( btdev , ÿÎback -> Ýcode , 3135 ÿÎback -> d©a , c®lback-> Ën ); 3137 ià(! `run_hooks ( btdev , BTDEV_HOOK_PRE_EVT , ÿÎback -> Ýcode , 3138 ÿÎback -> d©a , c®lback-> Ën )) 3140 `deçuÉ_cmd_com¶‘iÚ ( btdev , ÿÎback -> Ýcode , 3141 ÿÎback -> d©a , c®lback-> Ën ); 3143  BTDEV_RESPONSE_COMMAND_STATUS : 3144 `cmd_¡©us ( btdev , ¡©us , ÿÎback -> Ýcode ); 3146  BTDEV_RESPONSE_COMMAND_COMPLETE : 3147 `cmd_com¶‘e ( btdev , ÿÎback -> Ýcode , d©a , Ën ); 3150 `cmd_¡©us ( btdev , BT_HCI_ERR_UNKNOWN_COMMAND , 3151 ÿÎback -> Ýcode ); 3154 } } 3156  $´oûss_cmd ( btdev *btdev, cÚ¡ * d©a , ušt16_t Ën ) 3158  btdev_ÿÎback ÿÎback ; 3159 cÚ¡  bt_hci_cmd_hdr * hdr = d©a ; 3161 ià( Ën < (* hdr )) 3164 ÿÎback . funùiÚ = hªdËr_ÿÎback ; 3165 ÿÎback . u£r_d©a = btdev ; 3166 ÿÎback . Ýcode = `Ë16_to_ýu ( hdr ->opcode); 3167 ÿÎback . d©a = d©¨+ (* hdr ); 3168 ÿÎback . Ën = hdr -> ¶’ ; 3170 ià( btdev -> commªd_hªdËr ) 3171 btdev -> `commªd_hªdËr ( ÿÎback . Ýcode , 3172 ÿÎback . d©a , c®lback. Ën , 3173 & ÿÎback , btdev -> commªd_d©a ); 3175 ià(! `run_hooks ( btdev , BTDEV_HOOK_PRE_CMD , ÿÎback . Ýcode , 3176 ÿÎback . d©a , c®lback. Ën )) 3178 `deçuÉ_cmd ( btdev , ÿÎback . Ýcode , 3179 ÿÎback . d©a , c®lback. Ën ); 3181 ià(! `run_hooks ( btdev , BTDEV_HOOK_PRE_EVT , ÿÎback . Ýcode , 3182 ÿÎback . d©a , c®lback. Ën )) 3184 `deçuÉ_cmd_com¶‘iÚ ( btdev , ÿÎback . Ýcode , 3185 ÿÎback . d©a , c®lback. Ën ); 3187 } } 3189  $btdev_»ûive_h4 ( btdev *btdev, cÚ¡ * d©a , ušt16_t Ën ) 3191 ušt8_t pkt_ty³ ; 3192  iovec iov ; 3194 ià(! btdev ) 3197 ià( Ën < 1) 3200 pkt_ty³ = ((cÚ¡ ušt8_t *è d©a )[0]; 3202  pkt_ty³ ) { 3203  BT_H4_CMD_PKT : 3204 `´oûss_cmd ( btdev , d©a + 1, Ën - 1); 3206  BT_H4_ACL_PKT : 3207 ià( btdev -> cÚn ) { 3208 iov . iov_ba£ = (*è d©a ; 3209 iov . iov_Ën = Ën ; 3210 `£nd_·ck‘ ( btdev -> cÚn , & iov , 1); 3212 `num_com¶‘ed_·ck‘s ( btdev ); 3215 `´štf ("UnsuµÜ‹d…ack‘ 0x%2.2x\n", pkt_ty³ ); 3218 } } 3220  $btdev_add_hook ( btdev *btdev, btdev_hook_ty³ ty³ , 3221 ušt16_t Ýcode , btdev_hook_func hªdËr , 3222 * u£r_d©a ) 3224  i ; 3226 ià(! btdev ) 3229 ià( `g‘_hook_šdex ( btdev , ty³ , Ýcode ) > 0) 3232  i = 0; i < MAX_HOOK_ENTRIES ; i++) { 3233 ià( btdev -> hook_li¡ [ i ] =ð NULL ) { 3234 btdev -> hook_li¡ [ i ] = `m®loc (( hook )); 3235 ià( btdev -> hook_li¡ [ i ] =ð NULL ) 3238 btdev -> hook_li¡ [ i ]-> hªdËr = handler; 3239 btdev -> hook_li¡ [ i ]-> u£r_d©a = user_data; 3240 btdev -> hook_li¡ [ i ]-> Ýcode = opcode; 3241 btdev -> hook_li¡ [ i ]-> ty³ =ype; 3242  i ; 3247 } } 3249 boÞ $btdev_d–_hook ( btdev *btdev, btdev_hook_ty³ ty³ , 3250 ušt16_t Ýcode ) 3252  i ; 3254 ià(! btdev ) 3255  çl£ ; 3257  i = 0; i < MAX_HOOK_ENTRIES ; i++) { 3258 ià( btdev -> hook_li¡ [ i ] =ð NULL ) 3261 ià( btdev -> hook_li¡ [ i ]-> ty³ !=ype || 3262 btdev -> hook_li¡ [ i ]-> Ýcode != opcode) 3265 `ä“ ( btdev -> hook_li¡ [ i ]); 3266 btdev -> hook_li¡ [ i ] = NULL ; 3268  Œue ; 3271  çl£ ; 3272 } } @emulator/btdev.h 25  ~<¡dšt.h > 26  ~<¡dboÞ.h > 28  #BTDEV_RESPONSE_DEFAULT 0 ) 29  #BTDEV_RESPONSE_COMMAND_STATUS 1 ) 30  #BTDEV_RESPONSE_COMMAND_COMPLETE 2 ) 32  btdev_ÿÎback * tbtdev_ÿÎback ; 34  btdev_commªd_»¥Ú£ ( btdev_ÿÎback ÿÎback , ušt8_t »¥Ú£ , 35 ušt8_t ¡©us , cÚ¡ * d©a , ušt8_ˆ Ën ); 37  #btdev_commªd_deçuÉ ( ÿÎback ) \ 38 `btdev_commªd_»¥Ú£ ( ÿÎback , \ 39 BTDEV_RESPONSE_DEFAULT , 0x00, NULL , 0); ) 41  #btdev_commªd_¡©us ( ÿÎback , ¡©us ) \ 42 `btdev_commªd_»¥Ú£ ( ÿÎback , \ 43 BTDEV_RESPONSE_COMMAND_STATUS , ¡©us , NULL , 0); ) 45  #btdev_commªd_com¶‘e ( ÿÎback , d©a , Ën ) \ 46 `btdev_commªd_»¥Ú£ ( ÿÎback , \ 47 BTDEV_RESPONSE_COMMAND_COMPLETE , 0x00, d©a , Ën ); ) 50 (* tbtdev_commªd_func è( tušt16_t tÝcode , 51 cÚ¡ * td©a , tušt8_t tËn , 52 tbtdev_ÿÎback tÿÎback , * tu£r_d©a ); 54 (* tbtdev_£nd_func è(cÚ¡  tiovec * tiov ,  tiovËn , 55 * tu£r_d©a ); 57  $boÞ (* tbtdev_hook_func è(cÚ¡ * td©a , tušt16_t tËn , 58 * tu£r_d©a ); 60 ebtdev_ty³ { 61 BTDEV_TYPE_BREDRLE , 62 BTDEV_TYPE_BREDR , 63 BTDEV_TYPE_LE , 64 BTDEV_TYPE_AMP , 67 ebtdev_hook_ty³ { 68 BTDEV_HOOK_PRE_CMD , 69 BTDEV_HOOK_POST_CMD , 70 BTDEV_HOOK_PRE_EVT , 71 BTDEV_HOOK_POST_EVT , 74  btdev ; 76  btdev * `btdev_ü—‹ ( btdev_ty³ ty³ , ušt16_t id ); 77  `btdev_de¡roy ( btdev *btdev); 79 cÚ¡ ušt8_t * `btdev_g‘_bdaddr ( btdev *btdev); 80 ušt8_t * `btdev_g‘_ã©u»s ( btdev *btdev); 82  `btdev_£t_commªd_hªdËr ( btdev *btdev, btdev_commªd_func hªdËr , 83 * u£r_d©a ); 85  `btdev_£t_£nd_hªdËr ( btdev *btdev, btdev_£nd_func hªdËr , 86 * u£r_d©a ); 88  `btdev_»ûive_h4 ( btdev *btdev, cÚ¡ * d©a , ušt16_t Ën ); 90  `btdev_add_hook ( btdev *btdev, btdev_hook_ty³ ty³ , 91 ušt16_t Ýcode , btdev_hook_func hªdËr , 92 * u£r_d©a ); 94 boÞ `btdev_d–_hook ( btdev *btdev, btdev_hook_ty³ ty³ , 95 ušt16_t Ýcode ); @emulator/bthost.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<ùy³.h > 31  ~<¡dlib.h > 32  ~<¡ršg.h > 33  ~<’dŸn.h > 34  ~<¡dboÞ.h > 36  ~"blu‘oÙh/blu‘oÙh.h " 38  ~"¤c/sh¬ed/utž.h " 39  ~"mÚ™Ü/bt.h " 40  ~"mÚ™Ü/rfcomm.h " 41  ~"btho¡.h " 43  #lmp_b»dr_ÿ·bË ( btho¡ è(!((btho¡)-> ã©u»s [4] & 0x20)) ) 46  #aþ_hªdË_·ck ( h , f è( ušt16_t )((h & 0x0fff)|(à<< 12)) ) 47  #aþ_hªdË ( h è(h & 0x0fff) ) 48  #aþ_æags ( h è(h >> 12) ) 50  #L2CAP_FEAT_FIXED_CHAN 0x00000080 ) 51  #L2CAP_FC_SIG_BREDR 0x02 ) 52  #L2CAP_FC_SMP_BREDR 0x80 ) 53  #L2CAP_IT_FEAT_MASK 0x0002 ) 54  #L2CAP_IT_FIXED_CHAN 0x0003 ) 57  #RFCOMM_ADDR ( ü , dlci è(((dlc˜& 0x3fè<< 2è| (ü << 1è| 0x01) ) 58  #RFCOMM_CTRL ( ty³ , pf è((Ñy³ & 0xefè| (pà<< 4))) ) 59  #RFCOMM_LEN8 ( Ën è((Ö’è<< 1è| 1) ) 60  #RFCOMM_LEN16 ( Ën è(Ö’è<< 1) ) 61  #RFCOMM_MCC_TYPE ( ü , ty³ è((Ñy³ << 2è| (ü << 1è| 0x01)) ) 64  #CRC ( d©a è( rfcomm_üc_bË [rfcomm_üc_bË[0xfà^ d©a[0]] ^ d©a[1]]) ) 66  grfcomm_üc_bË [256] = { 108  ušt8_t $rfcomm_fcs2 ( ušt8_t * d©a ) 110  0xfà- rfcomm_üc_bË [ `CRC ( d©a ) ^ data[2]]; 111 } } 113  ušt8_t $rfcomm_fcs ( ušt8_t * d©a ) 115  0xfà- `CRC ( d©a ); 116 } } 118  scmd { 119  cmd * mÃxt ; 120  cmd * m´ev ; 121 ušt8_t md©a [256 + ( bt_hci_cmd_hdr )]; 122 ušt16_t mËn ; 125  scmd_queue { 126  cmd * mh—d ; 127  cmd * mž ; 130  scid_hook { 131 ušt16_t mcid ; 132 btho¡_cid_hook_func_t mfunc ; 133 * mu£r_d©a ; 134  cid_hook * mÃxt ; 137  srfcomm_chª_hook { 138 ušt8_t mchªÃl ; 139 btho¡_rfcomm_chª_hook_func_t mfunc ; 140 * mu£r_d©a ; 141  rfcomm_chª_hook * mÃxt ; 144  sbtcÚn { 145 ušt16_t mhªdË ; 146 ušt8_t mbdaddr [6]; 147 ušt8_t maddr_ty³ ; 148 ušt8_t m’ü_mode ; 149 ušt16_t mÃxt_cid ; 150  l2cÚn * ml2cÚns ; 151  rccÚn * mrccÚns ; 152  cid_hook * mcid_hooks ; 153  rfcomm_chª_hook * mrfcomm_chª_hooks ; 154  btcÚn * mÃxt ; 155 * msmp_d©a ; 158  sl2cÚn { 159 ušt16_t mscid ; 160 ušt16_t mdcid ; 161 ušt16_t mpsm ; 162  l2cÚn * mÃxt ; 165  srccÚn { 166 ušt8_t mchªÃl ; 167 ušt16_t mscid ; 168  rccÚn * mÃxt ; 171  sl2ÿp_³ndšg_»q { 172 ušt8_t mid’t ; 173 btho¡_l2ÿp_r¥_cb mcb ; 174 * mu£r_d©a ; 175  l2ÿp_³ndšg_»q * mÃxt ; 178  sl2ÿp_cÚn_cb_d©a { 179 ušt16_t mpsm ; 180 btho¡_l2ÿp_cÚÃù_cb mfunc ; 181 * mu£r_d©a ; 182  l2ÿp_cÚn_cb_d©a * mÃxt ; 185  srfcomm_cÚn_cb_d©a { 186 ušt8_t mchªÃl ; 187 btho¡_rfcomm_cÚÃù_cb mfunc ; 188 * mu£r_d©a ; 189  rfcomm_cÚn_cb_d©a * mÃxt ; 192  srfcomm_cÚÃùiÚ_d©a { 193 ušt8_t mchªÃl ; 194  btcÚn * mcÚn ; 195 btho¡_rfcomm_cÚÃù_cb mcb ; 196 * mu£r_d©a ; 199  sbtho¡ { 200 boÞ m»ady ; 201 btho¡_»ady_cb m»ady_cb ; 202 ušt8_t mbdaddr [6]; 203 ušt8_t mã©u»s [8]; 204 btho¡_£nd_func m£nd_hªdËr ; 205 * m£nd_d©a ; 206  cmd_queue mcmd_q ; 207 ušt8_t mncmd ; 208  btcÚn * mcÚns ; 209 btho¡_cmd_com¶‘e_cb mcmd_com¶‘e_cb ; 210 * mcmd_com¶‘e_d©a ; 211 btho¡_Ãw_cÚn_cb mÃw_cÚn_cb ; 212 * mÃw_cÚn_d©a ; 213  rfcomm_cÚÃùiÚ_d©a * mrfcomm_cÚn_d©a ; 214  l2ÿp_cÚn_cb_d©a * mÃw_l2ÿp_cÚn_d©a ; 215  rfcomm_cÚn_cb_d©a * mÃw_rfcomm_cÚn_d©a ; 216  l2ÿp_³ndšg_»q * ml2»qs ; 217 ušt8_t mpš [16]; 218 ušt8_t mpš_Ën ; 219 ušt8_t mio_ÿ·bž™y ; 220 ušt8_t mauth_»q ; 221 boÞ m»jeù_u£r_cÚfœm ; 222 * msmp_d©a ; 223 boÞ mcÚn_š™ ; 224 boÞ mË ; 225 boÞ msc ; 228  btho¡ * $btho¡_ü—‹ () 230  btho¡ *bthost; 232 btho¡ = `Ãw0 (bthost, 1); 233 ià(! btho¡ ) 234  NULL ; 236 btho¡ -> smp_d©a = `smp_¡¬t (bthost); 237 ià(! btho¡ -> smp_d©a ) { 238 `ä“ ( btho¡ ); 239  NULL ; 243 btho¡ -> io_ÿ·bž™y = 0x03; 245  btho¡ ; 246 } } 248  $l2cÚn_ä“ ( l2cÚn * cÚn ) 250 `ä“ ( cÚn ); 251 } } 253  $btcÚn_ä“ ( btcÚn * cÚn ) 255 ià( cÚn -> smp_d©a ) 256 `smp_cÚn_d– ( cÚn -> smp_d©a ); 258  cÚn -> l2cÚns ) { 259  l2cÚn *l2cÚÀð cÚn -> l2cÚns ; 261 cÚn -> l2cÚns = l2cÚn -> Ãxt ; 262 `l2cÚn_ä“ ( l2cÚn ); 265  cÚn -> cid_hooks ) { 266  cid_hook * hook = cÚn -> cid_hooks ; 268 cÚn -> cid_hooks = hook -> Ãxt ; 269 `ä“ ( hook ); 272  cÚn -> rccÚns ) { 273  rccÚn *rccÚÀð cÚn -> rccÚns ; 275 cÚn -> rccÚns = rccÚn -> Ãxt ; 276 `ä“ ( rccÚn ); 279  cÚn -> rfcomm_chª_hooks ) { 280  rfcomm_chª_hook * hook = cÚn -> rfcomm_chª_hooks ; 282 cÚn -> rfcomm_chª_hooks = hook -> Ãxt ; 283 `ä“ ( hook ); 286 `ä“ ( cÚn ); 287 } } 289  btcÚn * $btho¡_fšd_cÚn ( btho¡ *btho¡, ušt16_t hªdË ) 291  btcÚn * cÚn ; 293  cÚn = btho¡ -> cÚns ; cÚÀ!ð NULL ; cÚÀðcÚn-> Ãxt ) { 294 ià( cÚn -> hªdË == handle) 295  cÚn ; 298  NULL ; 299 } } 301  btcÚn * $btho¡_fšd_cÚn_by_bdaddr ( btho¡ *bthost, 302 cÚ¡ ušt8_t * bdaddr ) 304  btcÚn * cÚn ; 306  cÚn = btho¡ -> cÚns ; cÚÀ!ð NULL ; cÚÀðcÚn-> Ãxt ) { 307 ià(! `memcmp ( cÚn -> bdaddr , bdaddr, 6)) 308  cÚn ; 311  NULL ; 312 } } 314  l2cÚn * $btho¡_add_l2ÿp_cÚn ( btho¡ *bthost, 315  btcÚn * cÚn , 316 ušt16_t scid , ušt16_ˆ dcid , 317 ušt16_t psm ) 319  l2cÚn *l2conn; 321 l2cÚn = `m®loc ((*l2conn)); 322 ià(! l2cÚn ) 323  NULL ; 325 `mem£t ( l2cÚn , 0, (*l2conn)); 327 l2cÚn -> psm =…sm; 328 l2cÚn -> scid = scid; 329 l2cÚn -> dcid = dcid; 331 l2cÚn -> Ãxt = cÚn -> l2cÚns ; 332 cÚn -> l2cÚns = l2cÚn ; 334  l2cÚn ; 335 } } 337  rccÚn * $btho¡_add_rfcomm_cÚn ( btho¡ *bthost, 338  btcÚn * cÚn , 339  l2cÚn *l2conn, 340 ušt8_t chªÃl ) 342  rccÚn *rcconn; 344 rccÚn = `m®loc ((*rcconn)); 345 ià(! rccÚn ) 346  NULL ; 348 `mem£t ( rccÚn , 0, (*rcconn)); 350 rccÚn -> chªÃl = channel; 351 rccÚn -> scid = l2cÚn ->scid; 353 rccÚn -> Ãxt = cÚn -> rccÚns ; 354 cÚn -> rccÚns = rccÚn ; 356  rccÚn ; 357 } } 359  rccÚn * $btcÚn_fšd_rfcomm_cÚn_by_chªÃl ( btcÚn * cÚn , 360 ušt8_t chª ) 362  rccÚn *rcconn; 364  rccÚn = cÚn -> rccÚns ;„ccÚÀ!ð NULL ;„ccÚÀðrccÚn-> Ãxt ) { 365 ià( rccÚn -> chªÃl =ð chª ) 366  rccÚn ; 369  NULL ; 370 } } 372  l2cÚn * $btcÚn_fšd_l2ÿp_cÚn_by_scid ( btcÚn * cÚn , 373 ušt16_t scid ) 375  l2cÚn *l2conn; 377  l2cÚn = cÚn -> l2cÚns ;†2cÚÀ!ð NULL ;†2cÚÀðl2cÚn-> Ãxt ) { 378 ià( l2cÚn -> scid == scid) 379  l2cÚn ; 382  NULL ; 383 } } 385  l2ÿp_cÚn_cb_d©a * $btho¡_fšd_l2ÿp_cb_by_psm ( 386  btho¡ *btho¡, ušt16_t psm ) 388  l2ÿp_cÚn_cb_d©a * cb ; 390  cb = btho¡ -> Ãw_l2ÿp_cÚn_d©a ; cb !ð NULL ; cb = cb-> Ãxt ) { 391 ià( cb -> psm ==…sm) 392  cb ; 395  NULL ; 396 } } 398  rfcomm_cÚn_cb_d©a * $btho¡_fšd_rfcomm_cb_by_chªÃl ( 399  btho¡ *btho¡, ušt8_t chªÃl ) 401  rfcomm_cÚn_cb_d©a * cb ; 403  cb = btho¡ -> Ãw_rfcomm_cÚn_d©a ; cb !ð NULL ; cb = cb-> Ãxt ) { 404 ià( cb -> chªÃl == channel) 405  cb ; 408  NULL ; 409 } } 411  $btho¡_de¡roy ( btho¡ *bthost) 413 ià(! btho¡ ) 416  btho¡ -> cmd_q . ž ) { 417  cmd *cmd = btho¡ -> cmd_q . ž ; 419 btho¡ -> cmd_q . ž = cmd -> ´ev ; 420 `ä“ ( cmd ); 423  btho¡ -> cÚns ) { 424  btcÚn * cÚn = btho¡ -> cÚns ; 426 btho¡ -> cÚns = cÚn -> Ãxt ; 427 `btcÚn_ä“ ( cÚn ); 430  btho¡ -> l2»qs ) { 431  l2ÿp_³ndšg_»q * »q = btho¡ -> l2»qs ; 433 btho¡ -> l2»qs = »q -> Ãxt ; 434 »q -> `cb (0, NULL , 0,„eq-> u£r_d©a ); 435 `ä“ ( »q ); 438  btho¡ -> Ãw_l2ÿp_cÚn_d©a ) { 439  l2ÿp_cÚn_cb_d©a * cb = btho¡ -> Ãw_l2ÿp_cÚn_d©a ; 441 btho¡ -> Ãw_l2ÿp_cÚn_d©a = cb -> Ãxt ; 442 `ä“ ( cb ); 445  btho¡ -> Ãw_rfcomm_cÚn_d©a ) { 446  rfcomm_cÚn_cb_d©a * cb = btho¡ -> Ãw_rfcomm_cÚn_d©a ; 448 btho¡ -> Ãw_rfcomm_cÚn_d©a = cb -> Ãxt ; 449 `ä“ ( cb ); 452 ià( btho¡ -> rfcomm_cÚn_d©a ) 453 `ä“ ( btho¡ -> rfcomm_cÚn_d©a ); 455 `smp_¡Ý ( btho¡ -> smp_d©a ); 457 `ä“ ( btho¡ ); 458 } } 460  $btho¡_£t_£nd_hªdËr ( btho¡ *btho¡, btho¡_£nd_func hªdËr , 461 * u£r_d©a ) 463 ià(! btho¡ ) 466 btho¡ -> £nd_hªdËr = hªdËr ; 467 btho¡ -> £nd_d©a = u£r_d©a ; 468 } } 470  $queue_commªd ( btho¡ *btho¡, cÚ¡  iovec * iov , 471  iovËn ) 473  cmd_queue * cmd_q = & btho¡ ->cmd_q; 474  cmd *cmd; 475  i ; 477 cmd = `m®loc ((*cmd)); 478 ià(! cmd ) 481 `mem£t ( cmd , 0, (*cmd)); 483  i = 0; i < iovËn ; i++) { 484 `memýy ( cmd -> d©a + cmd-> Ën , iov [ i ]. iov_ba£ , iov[i]. iov_Ën ); 485 cmd -> Ën +ð iov [ i ]. iov_Ën ; 488 ià( cmd_q -> ž ) 489 cmd_q -> ž -> Ãxt = cmd ; 491 cmd_q -> h—d = cmd ; 493 cmd -> ´ev = cmd_q -> ž ; 494 cmd_q -> ž = cmd ; 495 } } 497  $£nd_·ck‘ ( btho¡ *btho¡, cÚ¡  iovec * iov , 498  iovËn ) 500 ià(! btho¡ -> £nd_hªdËr ) 503 btho¡ -> `£nd_hªdËr ( iov , iovËn , btho¡-> £nd_d©a ); 504 } } 506  $£nd_iov ( btho¡ *btho¡, ušt16_t hªdË , ušt16_ˆ cid , 507 cÚ¡  iovec * iov ,  iovút ) 509  bt_hci_aþ_hdr aþ_hdr ; 510  bt_l2ÿp_hdr l2_hdr ; 511 ušt8_t pkt = BT_H4_ACL_PKT ; 512  iovec pdu [3 + iovút ]; 513  i , Ën = 0; 515  i = 0; i < iovút ; i++) { 516 pdu [3 + i ]. iov_ba£ = iov [i].iov_base; 517 pdu [3 + i ]. iov_Ën = iov [i].iov_len; 518 Ën +ð iov [ i ]. iov_Ën ; 521 pdu [0]. iov_ba£ = & pkt ; 522 pdu [0]. iov_Ën = ( pkt ); 524 aþ_hdr . hªdË = `aþ_hªdË_·ck (handle, 0); 525 aþ_hdr . dËn = `ýu_to_Ë16 ( Ën + ( l2_hdr )); 527 pdu [1]. iov_ba£ = & aþ_hdr ; 528 pdu [1]. iov_Ën = ( aþ_hdr ); 530 l2_hdr . cid = `ýu_to_Ë16 (cid); 531 l2_hdr . Ën = `ýu_to_Ë16 (len); 533 pdu [2]. iov_ba£ = & l2_hdr ; 534 pdu [2]. iov_Ën = ( l2_hdr ); 536 `£nd_·ck‘ ( btho¡ , pdu , 3 + iovút ); 537 } } 539  $£nd_aþ ( btho¡ *btho¡, ušt16_t hªdË , ušt16_ˆ cid , 540 cÚ¡ * d©a , ušt16_t Ën ) 542  iovec iov ; 544 iov . iov_ba£ = (*è d©a ; 545 iov . iov_Ën = Ën ; 547 `£nd_iov ( btho¡ , hªdË , cid , & iov , 1); 548 } } 550  ušt8_t $l2ÿp_sig_£nd ( btho¡ *btho¡,  btcÚn * cÚn , 551 ušt8_t code , ušt8_ˆ id’t , 552 cÚ¡ * d©a , ušt16_t Ën ) 554  ušt8_t Ãxt_id’t = 1; 555  bt_l2ÿp_hdr_sig hdr ; 556 ušt16_t cid ; 557  iovec iov [2]; 559 ià(! id’t ) { 560 id’t = Ãxt_id’t ++; 561 ià(! id’t ) 562 id’t = Ãxt_id’t ++; 565 hdr . code = code; 566 hdr . id’t = ident; 567 hdr . Ën = `ýu_to_Ë16 (len); 569 iov [0]. iov_ba£ = & hdr ; 570 iov [0]. iov_Ën = ( hdr ); 572 ià( cÚn -> addr_ty³ =ð BDADDR_BREDR ) 573 cid = 0x0001; 575 cid = 0x0005; 577 ià( Ën == 0) { 578 `£nd_iov ( btho¡ , cÚn -> hªdË , cid , iov , 1); 579  id’t ; 582 iov [1]. iov_ba£ = (*è d©a ; 583 iov [1]. iov_Ën = Ën ; 585 `£nd_iov ( btho¡ , cÚn -> hªdË , cid , iov , 2); 587  id’t ; 588 } } 590  $btho¡_add_cid_hook ( btho¡ *btho¡, ušt16_t hªdË , ušt16_ˆ cid , 591 btho¡_cid_hook_func_t func , * u£r_d©a ) 593  cid_hook * hook ; 594  btcÚn * cÚn ; 596 cÚn = `btho¡_fšd_cÚn ( btho¡ , hªdË ); 597 ià(! cÚn ) 600 hook = `m®loc ((*hook)); 601 ià(! hook ) 604 `mem£t ( hook , 0, (*hook)); 606 hook -> cid = cid; 607 hook -> func = func; 608 hook -> u£r_d©a = user_data; 610 hook -> Ãxt = cÚn -> cid_hooks ; 611 cÚn -> cid_hooks = hook ; 612 } } 614  $btho¡_£nd_cid ( btho¡ *btho¡, ušt16_t hªdË , ušt16_ˆ cid , 615 cÚ¡ * d©a , ušt16_t Ën ) 617  btcÚn * cÚn ; 619 cÚn = `btho¡_fšd_cÚn ( btho¡ , hªdË ); 620 ià(! cÚn ) 623 `£nd_aþ ( btho¡ , hªdË , cid , d©a , Ën ); 624 } } 626  $btho¡_£nd_cid_v ( btho¡ *btho¡, ušt16_t hªdË , ušt16_ˆ cid , 627 cÚ¡  iovec * iov ,  iovút ) 629  btcÚn * cÚn ; 631 cÚn = `btho¡_fšd_cÚn ( btho¡ , hªdË ); 632 ià(! cÚn ) 635 `£nd_iov ( btho¡ , hªdË , cid , iov , iovút ); 636 } } 638 boÞ $btho¡_l2ÿp_»q ( btho¡ *btho¡, ušt16_t hªdË , ušt8_t code , 639 cÚ¡ * d©a , ušt16_t Ën , 640 btho¡_l2ÿp_r¥_cb cb , * u£r_d©a ) 642  l2ÿp_³ndšg_»q * »q ; 643  btcÚn * cÚn ; 644 ušt8_t id’t ; 646 cÚn = `btho¡_fšd_cÚn ( btho¡ , hªdË ); 647 ià(! cÚn ) 648  çl£ ; 650 ià( code =ð BT_L2CAP_PDU_CONN_REQ && 651 Ën =ð( bt_l2ÿp_pdu_cÚn_»q )) { 652 cÚ¡  bt_l2ÿp_pdu_cÚn_»q * »q = d©a ; 654 `btho¡_add_l2ÿp_cÚn ( btho¡ , cÚn , `Ë16_to_ýu ( »q -> scid ), 655 `Ë16_to_ýu ( »q -> scid ), 656 `Ë16_to_ýu ( »q -> psm )); 659 id’t = `l2ÿp_sig_£nd ( btho¡ , cÚn , code , 0, d©a , Ën ); 660 ià(! id’t ) 661  çl£ ; 663 ià(! cb ) 664  Œue ; 666 »q = `m®loc ((*req)); 667 ià(! »q ) 668  çl£ ; 670 `mem£t ( »q , 0, (*req)); 671 »q -> id’t = ident; 672 »q -> cb = cb; 673 »q -> u£r_d©a = user_data; 675 »q -> Ãxt = btho¡ -> l2»qs ; 676 btho¡ -> l2»qs = »q ; 678  Œue ; 679 } } 681  $£nd_commªd ( btho¡ *btho¡, ušt16_t Ýcode , 682 cÚ¡ * d©a , ušt8_t Ën ) 684  bt_hci_cmd_hdr hdr ; 685 ušt8_t pkt = BT_H4_CMD_PKT ; 686  iovec iov [3]; 688 iov [0]. iov_ba£ = & pkt ; 689 iov [0]. iov_Ën = ( pkt ); 691 hdr . Ýcode = `ýu_to_Ë16 (opcode); 692 hdr . ¶’ = Ën ; 694 iov [1]. iov_ba£ = & hdr ; 695 iov [1]. iov_Ën = ( hdr ); 697 ià( Ën > 0) { 698 iov [2]. iov_ba£ = (*è d©a ; 699 iov [2]. iov_Ën = Ën ; 702 ià( btho¡ -> ncmd ) { 703 `£nd_·ck‘ ( btho¡ , iov , Ën > 0 ? 3 : 2); 704 btho¡ -> ncmd --; 706 `queue_commªd ( btho¡ , iov , Ën > 0 ? 3 : 2); 708 } } 710  $Ãxt_cmd ( btho¡ *bthost) 712  cmd_queue * cmd_q = & btho¡ ->cmd_q; 713  cmd *cmd = cmd_q -> h—d ; 714  cmd * Ãxt ; 715  iovec iov ; 717 ià(! cmd ) 720 Ãxt = cmd ->next; 722 ià(! btho¡ -> ncmd ) 725 iov . iov_ba£ = cmd -> d©a ; 726 iov . iov_Ën = cmd -> Ën ; 728 `£nd_·ck‘ ( btho¡ , & iov , 1); 729 btho¡ -> ncmd --; 731 ià( Ãxt ) 732 Ãxt -> ´ev = NULL ; 734 cmd_q -> ž = NULL ; 736 cmd_q -> h—d = Ãxt ; 738 `ä“ ( cmd ); 739 } } 741  $»ad_bd_addr_com¶‘e ( btho¡ *btho¡, cÚ¡ * d©a , 742 ušt8_t Ën ) 744 cÚ¡  bt_hci_r¥_»ad_bd_addr * ev = d©a ; 746 ià( Ën < (* ev )) 749 ià( ev -> ¡©us ) 752 `memýy ( btho¡ -> bdaddr , ev ->bdaddr, 6); 754 btho¡ -> »ady = Œue ; 756 ià( btho¡ -> »ady_cb ) { 757 btho¡ -> `»ady_cb (); 758 btho¡ -> »ady_cb = NULL ; 760 } } 762  $btho¡_nÙify_»ady ( btho¡ *btho¡, btho¡_»ady_cb cb ) 764 ià( btho¡ -> »ady ) { 765 `cb (); 769 btho¡ -> »ady_cb = cb ; 770 } } 772  $»ad_loÿl_ã©u»s_com¶‘e ( btho¡ *bthost, 773 cÚ¡ * d©a , ušt8_t Ën ) 775 cÚ¡  bt_hci_r¥_»ad_loÿl_ã©u»s * ev = d©a ; 777 ià( Ën < (* ev )) 780 ià( ev -> ¡©us ) 783 `memýy ( btho¡ -> ã©u»s , ev ->features, 8); 784 } } 786  $evt_cmd_com¶‘e ( btho¡ *btho¡, cÚ¡ * d©a , 787 ušt8_t Ën ) 789 cÚ¡  bt_hci_evt_cmd_com¶‘e * ev = d©a ; 790 cÚ¡ * ·¿m ; 791 ušt16_t Ýcode ; 793 ià( Ën < (* ev )) 796 ·¿m = d©a + (* ev ); 798 btho¡ -> ncmd = ev ->ncmd; 800 Ýcode = `Ë16toh ( ev ->opcode); 802  Ýcode ) { 803  BT_HCI_CMD_RESET : 805  BT_HCI_CMD_READ_LOCAL_FEATURES : 806 `»ad_loÿl_ã©u»s_com¶‘e ( btho¡ , ·¿m , Ën - (* ev )); 808  BT_HCI_CMD_READ_BD_ADDR : 809 `»ad_bd_addr_com¶‘e ( btho¡ , ·¿m , Ën - (* ev )); 811  BT_HCI_CMD_WRITE_SCAN_ENABLE : 813  BT_HCI_CMD_LE_SET_ADV_ENABLE : 815  BT_HCI_CMD_LE_SET_ADV_PARAMETERS : 817  BT_HCI_CMD_PIN_CODE_REQUEST_REPLY : 819  BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY : 821  BT_HCI_CMD_LINK_KEY_REQUEST_NEG_REPLY : 823  BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE : 825  BT_HCI_CMD_WRITE_LE_HOST_SUPPORTED : 827  BT_HCI_CMD_WRITE_SECURE_CONN_SUPPORT : 829  BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY : 831  BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY : 833  BT_HCI_CMD_USER_CONFIRM_REQUEST_NEG_REPLY : 835  BT_HCI_CMD_LE_LTK_REQ_REPLY : 837  BT_HCI_CMD_LE_LTK_REQ_NEG_REPLY : 839  BT_HCI_CMD_LE_SET_ADV_DATA : 842 `´štf ("UnhªdËd cmd_com¶‘Ýcod0x%04x\n", Ýcode ); 846 ià( btho¡ -> cmd_com¶‘e_cb ) 847 btho¡ -> `cmd_com¶‘e_cb ( Ýcode , 0, ·¿m , Ën - (* ev ), 848 btho¡ -> cmd_com¶‘e_d©a ); 850 `Ãxt_cmd ( btho¡ ); 851 } } 853  $evt_cmd_¡©us ( btho¡ *btho¡, cÚ¡ * d©a , 854 ušt8_t Ën ) 856 cÚ¡  bt_hci_evt_cmd_¡©us * ev = d©a ; 857 ušt16_t Ýcode ; 859 ià( Ën < (* ev )) 862 btho¡ -> ncmd = ev ->ncmd; 864 Ýcode = `Ë16toh ( ev ->opcode); 866 ià( ev -> ¡©us && btho¡ -> cmd_com¶‘e_cb ) 867 btho¡ -> `cmd_com¶‘e_cb ( Ýcode , ev -> ¡©us , NULL , 0, 868 btho¡ -> cmd_com¶‘e_d©a ); 870 `Ãxt_cmd ( btho¡ ); 871 } } 873  $evt_cÚn_»que¡ ( btho¡ *btho¡, cÚ¡ * d©a , 874 ušt8_t Ën ) 876 cÚ¡  bt_hci_evt_cÚn_»que¡ * ev = d©a ; 877  bt_hci_cmd_acû±_cÚn_»que¡ cmd ; 879 ià( Ën < (* ev )) 882 `mem£t (& cmd , 0, (cmd)); 883 `memýy ( cmd . bdaddr , ev ->bdaddr, (ev->bdaddr)); 885 `£nd_commªd ( btho¡ , BT_HCI_CMD_ACCEPT_CONN_REQUEST , & cmd , 886 ( cmd )); 887 } } 889  $š™_cÚn ( btho¡ *btho¡, ušt16_t hªdË , 890 cÚ¡ ušt8_t * bdaddr , ušt8_ˆ addr_ty³ ) 892  btcÚn * cÚn ; 893 cÚ¡ ušt8_t * Ÿ , * ¿ ; 895 cÚn = `m®loc ((*conn)); 896 ià(! cÚn ) 899 `mem£t ( cÚn , 0, (*conn)); 900 cÚn -> hªdË = handle; 901 `memýy ( cÚn -> bdaddr , bdaddr, 6); 902 cÚn -> addr_ty³ =‡ddr_type; 903 cÚn -> Ãxt_cid = 0x0040; 905 cÚn -> Ãxt = btho¡ -> cÚns ; 906 btho¡ -> cÚns = cÚn ; 908 ià( btho¡ -> cÚn_š™ ) { 909 Ÿ = btho¡ -> bdaddr ; 910 ¿ = cÚn -> bdaddr ; 912 Ÿ = cÚn -> bdaddr ; 913 ¿ = btho¡ -> bdaddr ; 916 cÚn -> smp_d©a = `smp_cÚn_add ( btho¡ ->smp_d©a, hªdË , Ÿ , ¿ , 917 addr_ty³ , btho¡ -> cÚn_š™ ); 919 ià( btho¡ -> Ãw_cÚn_cb ) 920 btho¡ -> `Ãw_cÚn_cb ( cÚn -> hªdË , btho¡-> Ãw_cÚn_d©a ); 921 } } 923  $evt_cÚn_com¶‘e ( btho¡ *btho¡, cÚ¡ * d©a , 924 ušt8_t Ën ) 926 cÚ¡  bt_hci_evt_cÚn_com¶‘e * ev = d©a ; 928 ià( Ën < (* ev )) 931 ià( ev -> ¡©us ) 934 `š™_cÚn ( btho¡ , `Ë16_to_ýu ( ev -> hªdË ),ƒv-> bdaddr , BDADDR_BREDR ); 935 } } 937  $evt_discÚn_com¶‘e ( btho¡ *btho¡, cÚ¡ * d©a , 938 ušt8_t Ën ) 940 cÚ¡  bt_hci_evt_discÚÃù_com¶‘e * ev = d©a ; 941  btcÚn ** cu¼ ; 942 ušt16_t hªdË ; 944 ià( Ën < (* ev )) 947 ià( ev -> ¡©us ) 950 hªdË = `Ë16_to_ýu ( ev ->handle); 952  cu¼ = & btho¡ -> cÚns ; *curr;) { 953  btcÚn * cÚn = * cu¼ ; 955 ià( cÚn -> hªdË == handle) { 956 * cu¼ = cÚn -> Ãxt ; 957 `btcÚn_ä“ ( cÚn ); 959 cu¼ = & cÚn -> Ãxt ; 962 } } 964  $evt_num_com¶‘ed_·ck‘s ( btho¡ *btho¡, cÚ¡ * d©a , 965 ušt8_t Ën ) 967 cÚ¡  bt_hci_evt_num_com¶‘ed_·ck‘s * ev = d©a ; 969 ià( Ën < (* ev )) 971 } } 973  $evt_auth_com¶‘e ( btho¡ *btho¡, cÚ¡ * d©a , 974 ušt8_t Ën ) 976 cÚ¡  bt_hci_evt_auth_com¶‘e * ev = d©a ; 977  bt_hci_cmd_£t_cÚn_’üy± ý ; 979 ià( Ën < (* ev )) 982 ià( ev -> ¡©us ) 985 ý . hªdË = ev ->handle; 986 ý . ’ü_mode = 0x01; 988 `£nd_commªd ( btho¡ , BT_HCI_CMD_SET_CONN_ENCRYPT , & ý , (cp)); 989 } } 991  $evt_pš_code_»que¡ ( btho¡ *btho¡, cÚ¡ * d©a , 992 ušt8_t Ën ) 994 cÚ¡  bt_hci_evt_pš_code_»que¡ * ev = d©a ; 996 ià( Ën < (* ev )) 999 ià( btho¡ -> pš_Ën > 0) { 1000  bt_hci_cmd_pš_code_»que¡_»¶y ý ; 1002 `mem£t (& ý , 0, (cp)); 1003 `memýy ( ý . bdaddr , ev ->bdaddr, 6); 1004 ý . pš_Ën = btho¡ ->pin_len; 1005 `memýy ( ý . pš_code , btho¡ -> pš , btho¡-> pš_Ën ); 1007 `£nd_commªd ( btho¡ , BT_HCI_CMD_PIN_CODE_REQUEST_REPLY , 1008 & ý , (cp)); 1010  bt_hci_cmd_pš_code_»que¡_Ãg_»¶y ý ; 1012 `memýy ( ý . bdaddr , ev ->bdaddr, 6); 1013 `£nd_commªd ( btho¡ , BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY , 1014 & ý , (cp)); 1016 } } 1018  $evt_lšk_key_»que¡ ( btho¡ *btho¡, cÚ¡ * d©a , 1019 ušt8_t Ën ) 1021 cÚ¡  bt_hci_evt_lšk_key_»que¡ * ev = d©a ; 1022  bt_hci_cmd_lšk_key_»que¡_Ãg_»¶y ý ; 1024 ià( Ën < (* ev )) 1027 `mem£t (& ý , 0, (cp)); 1028 `memýy ( ý . bdaddr , ev ->bdaddr, 6); 1030 `£nd_commªd ( btho¡ , BT_HCI_CMD_LINK_KEY_REQUEST_NEG_REPLY , 1031 & ý , (cp)); 1032 } } 1034  $evt_lšk_key_nÙify ( btho¡ *btho¡, cÚ¡ * d©a , 1035 ušt8_t Ën ) 1037 cÚ¡  bt_hci_evt_lšk_key_nÙify * ev = d©a ; 1039 ià( Ën < (* ev )) 1041 } } 1043  $evt_’üy±_chªge ( btho¡ *btho¡, cÚ¡ * d©a , 1044 ušt8_t Ën ) 1046 cÚ¡  bt_hci_evt_’üy±_chªge * ev = d©a ; 1047  btcÚn * cÚn ; 1048 ušt16_t hªdË ; 1050 ià( Ën < (* ev )) 1053 hªdË = `aþ_hªdË ( ev ->handle); 1054 cÚn = `btho¡_fšd_cÚn ( btho¡ , hªdË ); 1055 ià(! cÚn ) 1058 ià( ev -> ¡©us ) 1061 cÚn -> ’ü_mode = ev ->encr_mode; 1063 ià( cÚn -> smp_d©a ) 1064 `smp_cÚn_’üy±ed ( cÚn -> smp_d©a , cÚn-> ’ü_mode ); 1065 } } 1067  $evt_io_ÿp_»¥Ú£ ( btho¡ *btho¡, cÚ¡ * d©a , 1068 ušt8_t Ën ) 1070 cÚ¡  bt_hci_evt_io_ÿ·bž™y_»¥Ú£ * ev = d©a ; 1071  btcÚn * cÚn ; 1073 ià( Ën < (* ev )) 1076 cÚn = `btho¡_fšd_cÚn_by_bdaddr ( btho¡ , ev -> bdaddr ); 1077 ià(! cÚn ) 1079 } } 1081  $evt_io_ÿp_»que¡ ( btho¡ *btho¡, cÚ¡ * d©a , 1082 ušt8_t Ën ) 1084 cÚ¡  bt_hci_evt_io_ÿ·bž™y_»que¡ * ev = d©a ; 1085  bt_hci_cmd_io_ÿ·bž™y_»que¡_»¶y ý ; 1086  btcÚn * cÚn ; 1088 ià( Ën < (* ev )) 1091 cÚn = `btho¡_fšd_cÚn_by_bdaddr ( btho¡ , ev -> bdaddr ); 1092 ià(! cÚn ) 1095 `memýy ( ý . bdaddr , ev ->bdaddr, 6); 1096 ý . ÿ·bž™y = btho¡ -> io_ÿ·bž™y ; 1097 ý . oob_d©a = 0x00; 1098 ý . auth’tiÿtiÚ = btho¡ -> auth_»q ; 1100 `£nd_commªd ( btho¡ , BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY , 1101 & ý , (cp)); 1102 } } 1104  $evt_u£r_cÚfœm_»que¡ ( btho¡ *btho¡, cÚ¡ * d©a , 1105 ušt8_t Ën ) 1107 cÚ¡  bt_hci_evt_u£r_cÚfœm_»que¡ * ev = d©a ; 1108  btcÚn * cÚn ; 1110 ià( Ën < (* ev )) 1113 cÚn = `btho¡_fšd_cÚn_by_bdaddr ( btho¡ , ev -> bdaddr ); 1114 ià(! cÚn ) 1117 ià( btho¡ -> »jeù_u£r_cÚfœm ) { 1118 `£nd_commªd ( btho¡ , BT_HCI_CMD_USER_CONFIRM_REQUEST_NEG_REPLY , 1119 ev -> bdaddr , 6); 1123 `£nd_commªd ( btho¡ , BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY , 1124 ev -> bdaddr , 6); 1125 } } 1127  $evt_sim¶e_·œšg_com¶‘e ( btho¡ *btho¡, cÚ¡ * d©a , 1128 ušt8_t Ën ) 1130 cÚ¡  bt_hci_evt_sim¶e_·œšg_com¶‘e * ev = d©a ; 1132 ià( Ën < (* ev )) 1134 } } 1136  $evt_Ë_cÚn_com¶‘e ( btho¡ *btho¡, cÚ¡ * d©a , 1137 ušt8_t Ën ) 1139 cÚ¡  bt_hci_evt_Ë_cÚn_com¶‘e * ev = d©a ; 1140 ušt8_t addr_ty³ ; 1142 ià( Ën < (* ev )) 1145 ià( ev -> ¡©us ) 1148 ià( ev -> ³”_addr_ty³ == 0x00) 1149 addr_ty³ = BDADDR_LE_PUBLIC ; 1151 addr_ty³ = BDADDR_LE_RANDOM ; 1153 `š™_cÚn ( btho¡ , `Ë16_to_ýu ( ev -> hªdË ),ƒv-> ³”_addr , addr_ty³ ); 1154 } } 1156  $evt_Ë_Ék_»que¡ ( btho¡ *btho¡, cÚ¡ * d©a , 1157 ušt8_t Ën ) 1159 cÚ¡  bt_hci_evt_Ë_lÚg_‹rm_key_»que¡ * ev = d©a ; 1160  bt_hci_cmd_Ë_Ék_»q_»¶y ý ; 1161  bt_hci_cmd_Ë_Ék_»q_Ãg_»¶y * Ãg_ý = (*è& ý ; 1162 ušt16_t hªdË , ediv ; 1163 ušt64_t ¿nd ; 1164  btcÚn * cÚn ; 1165  ”r ; 1167 ià( Ën < (* ev )) 1170 hªdË = `aþ_hªdË ( ev ->handle); 1171 cÚn = `btho¡_fšd_cÚn ( btho¡ , hªdË ); 1172 ià(! cÚn ) 1175 ¿nd = `Ë64_to_ýu ( ev ->rand); 1176 ediv = `Ë16_to_ýu ( ev ->ediv); 1178 ý . hªdË = ev ->handle; 1180 ”r = `smp_g‘_Ék ( cÚn -> smp_d©a , ¿nd , ediv , ý . Ék ); 1181 ià( ”r < 0) 1182 `£nd_commªd ( btho¡ , BT_HCI_CMD_LE_LTK_REQ_NEG_REPLY , 1183 Ãg_ý , (*neg_cp)); 1185 `£nd_commªd ( btho¡ , BT_HCI_CMD_LE_LTK_REQ_REPLY , & ý , 1186 ( ý )); 1187 } } 1189  $evt_Ë_m‘a_ev’t ( btho¡ *btho¡, cÚ¡ * d©a , 1190 ušt8_t Ën ) 1192 cÚ¡ ušt8_t * ev’t = d©a ; 1193 cÚ¡ * evt_d©a = d©a + 1; 1195 ià( Ën < 1) 1198 * ev’t ) { 1199  BT_HCI_EVT_LE_CONN_COMPLETE : 1200 `evt_Ë_cÚn_com¶‘e ( btho¡ , evt_d©a , Ën - 1); 1202  BT_HCI_EVT_LE_LONG_TERM_KEY_REQUEST : 1203 `evt_Ë_Ék_»que¡ ( btho¡ , evt_d©a , Ën - 1); 1206 `´štf ("UnsuµÜ‹d LE M‘¨ev’ˆ0x%2.2x\n", * ev’t ); 1209 } } 1211  $´oûss_evt ( btho¡ *btho¡, cÚ¡ * d©a , ušt16_t Ën ) 1213 cÚ¡  bt_hci_evt_hdr * hdr = d©a ; 1214 cÚ¡ * ·¿m ; 1216 ià( Ën < (* hdr )) 1219 ià((* hdr è+ hdr-> ¶’ !ð Ën ) 1222 ·¿m = d©a + (* hdr ); 1224  hdr -> evt ) { 1225  BT_HCI_EVT_CMD_COMPLETE : 1226 `evt_cmd_com¶‘e ( btho¡ , ·¿m , hdr -> ¶’ ); 1229  BT_HCI_EVT_CMD_STATUS : 1230 `evt_cmd_¡©us ( btho¡ , ·¿m , hdr -> ¶’ ); 1233  BT_HCI_EVT_CONN_REQUEST : 1234 `evt_cÚn_»que¡ ( btho¡ , ·¿m , hdr -> ¶’ ); 1237  BT_HCI_EVT_CONN_COMPLETE : 1238 `evt_cÚn_com¶‘e ( btho¡ , ·¿m , hdr -> ¶’ ); 1241  BT_HCI_EVT_DISCONNECT_COMPLETE : 1242 `evt_discÚn_com¶‘e ( btho¡ , ·¿m , hdr -> ¶’ ); 1245  BT_HCI_EVT_NUM_COMPLETED_PACKETS : 1246 `evt_num_com¶‘ed_·ck‘s ( btho¡ , ·¿m , hdr -> ¶’ ); 1249  BT_HCI_EVT_AUTH_COMPLETE : 1250 `evt_auth_com¶‘e ( btho¡ , ·¿m , hdr -> ¶’ ); 1253  BT_HCI_EVT_PIN_CODE_REQUEST : 1254 `evt_pš_code_»que¡ ( btho¡ , ·¿m , hdr -> ¶’ ); 1257  BT_HCI_EVT_LINK_KEY_REQUEST : 1258 `evt_lšk_key_»que¡ ( btho¡ , ·¿m , hdr -> ¶’ ); 1261  BT_HCI_EVT_LINK_KEY_NOTIFY : 1262 `evt_lšk_key_nÙify ( btho¡ , ·¿m , hdr -> ¶’ ); 1265  BT_HCI_EVT_ENCRYPT_CHANGE : 1266 `evt_’üy±_chªge ( btho¡ , ·¿m , hdr -> ¶’ ); 1269  BT_HCI_EVT_IO_CAPABILITY_RESPONSE : 1270 `evt_io_ÿp_»¥Ú£ ( btho¡ , ·¿m , hdr -> ¶’ ); 1273  BT_HCI_EVT_IO_CAPABILITY_REQUEST : 1274 `evt_io_ÿp_»que¡ ( btho¡ , ·¿m , hdr -> ¶’ ); 1277  BT_HCI_EVT_USER_CONFIRM_REQUEST : 1278 `evt_u£r_cÚfœm_»que¡ ( btho¡ , ·¿m , hdr -> ¶’ ); 1281  BT_HCI_EVT_SIMPLE_PAIRING_COMPLETE : 1282 `evt_sim¶e_·œšg_com¶‘e ( btho¡ , ·¿m , hdr -> ¶’ ); 1285  BT_HCI_EVT_LE_META_EVENT : 1286 `evt_Ë_m‘a_ev’t ( btho¡ , ·¿m , hdr -> ¶’ ); 1290 `´štf ("UnsuµÜ‹dƒv’ˆ0x%2.2x\n", hdr -> evt ); 1293 } } 1295  boÞ $l2ÿp_cmd_»j ( btho¡ *btho¡,  btcÚn * cÚn , 1296 ušt8_t id’t , cÚ¡ * d©a , ušt16_t Ën ) 1298 cÚ¡  bt_l2ÿp_pdu_cmd_»jeù * r¥ = d©a ; 1300 ià( Ën < (* r¥ )) 1301  çl£ ; 1303  Œue ; 1304 } } 1306  boÞ $l2ÿp_cÚn_»q ( btho¡ *btho¡,  btcÚn * cÚn , 1307 ušt8_t id’t , cÚ¡ * d©a , ušt16_t Ën ) 1309 cÚ¡  bt_l2ÿp_pdu_cÚn_»q * »q = d©a ; 1310  l2ÿp_cÚn_cb_d©a * cb_d©a ; 1311  bt_l2ÿp_pdu_cÚn_r¥ r¥ ; 1312 ušt16_t psm ; 1314 ià( Ën < (* »q )) 1315  çl£ ; 1317 psm = `Ë16_to_ýu ( »q ->psm); 1319 `mem£t (& r¥ , 0, (rsp)); 1320 r¥ . scid = »q ->scid; 1322 cb_d©a = `btho¡_fšd_l2ÿp_cb_by_psm ( btho¡ , psm ); 1323 ià( cb_d©a ) 1324 r¥ . dcid =„¥. scid ; 1326 r¥ . »suÉ = `ýu_to_Ë16 (0x0002); 1328 `l2ÿp_sig_£nd ( btho¡ , cÚn , BT_L2CAP_PDU_CONN_RSP , id’t , & r¥ , 1329 ( r¥ )); 1331 ià(! r¥ . »suÉ ) { 1332  bt_l2ÿp_pdu_cÚfig_»q cÚf_»q ; 1333  l2cÚn *l2conn; 1335 l2cÚn = `btho¡_add_l2ÿp_cÚn ( btho¡ , cÚn , 1336 `Ë16_to_ýu ( r¥ . dcid ), 1337 `Ë16_to_ýu ( r¥ . scid ), 1338 `Ë16_to_ýu ( psm )); 1340 `mem£t (& cÚf_»q , 0, (conf_req)); 1341 cÚf_»q . dcid = r¥ . scid ; 1343 `l2ÿp_sig_£nd ( btho¡ , cÚn , BT_L2CAP_PDU_CONFIG_REQ , 0, 1344 & cÚf_»q , (conf_req)); 1346 ià( cb_d©a && l2cÚn -> psm =ðcb_d©a->psm && cb_d©a-> func ) 1347 cb_d©a -> `func ( cÚn -> hªdË , l2cÚn -> dcid , 1348 cb_d©a -> u£r_d©a ); 1351  Œue ; 1352 } } 1354  $rfcomm_§bm_£nd ( btho¡ *btho¡,  btcÚn * cÚn , 1355  l2cÚn *l2cÚn, ušt8_t ü , ušt8_ˆ dlci ) 1357  rfcomm_cmd cmd ; 1359 cmd . add»ss = `RFCOMM_ADDR ( ü , dlci ); 1360 cmd . cÚŒÞ = `RFCOMM_CTRL ( RFCOMM_SABM , 1); 1361 cmd . Ëngth = `RFCOMM_LEN8 (0); 1362 cmd . fcs = `rfcomm_fcs2 (( ušt8_t *)&cmd); 1364 `£nd_aþ ( btho¡ , cÚn -> hªdË , l2cÚn -> dcid , & cmd , (cmd)); 1365 } } 1367  boÞ $l2ÿp_cÚn_r¥ ( btho¡ *btho¡,  btcÚn * cÚn , 1368 ušt8_t id’t , cÚ¡ * d©a , ušt16_t Ën ) 1370 cÚ¡  bt_l2ÿp_pdu_cÚn_r¥ * r¥ = d©a ; 1371  l2cÚn *l2conn; 1373 ià( Ën < (* r¥ )) 1374  çl£ ; 1376 l2cÚn = `btcÚn_fšd_l2ÿp_cÚn_by_scid ( cÚn , `Ë16_to_ýu ( r¥ -> scid )); 1377 ià( l2cÚn ) 1378 l2cÚn -> dcid = `Ë16_to_ýu ( r¥ ->dcid); 1380  çl£ ; 1382 ià( `Ë16_to_ýu ( r¥ -> »suÉ ) == 0x0001) { 1383  bt_l2ÿp_pdu_cÚfig_»q »q ; 1385 `mem£t (& »q , 0, (req)); 1386 »q . dcid = r¥ ->dcid; 1388 `l2ÿp_sig_£nd ( btho¡ , cÚn , BT_L2CAP_PDU_CONFIG_REQ , 0, 1389 & »q , (req)); 1390 } ià( l2cÚn -> psm =ð0x0003 && ! r¥ -> »suÉ && !r¥-> ¡©us && 1391 btho¡ -> rfcomm_cÚn_d©a ) { 1392 `rfcomm_§bm_£nd ( btho¡ , cÚn , l2cÚn , 1, 0); 1395  Œue ; 1396 } } 1398  boÞ $l2ÿp_cÚfig_»q ( btho¡ *btho¡,  btcÚn * cÚn , 1399 ušt8_t id’t , cÚ¡ * d©a , ušt16_t Ën ) 1401 cÚ¡  bt_l2ÿp_pdu_cÚfig_»q * »q = d©a ; 1402  bt_l2ÿp_pdu_cÚfig_r¥ r¥ ; 1403  l2cÚn *l2conn; 1404 ušt16_t dcid ; 1406 ià( Ën < (* »q )) 1407  çl£ ; 1409 dcid = `Ë16_to_ýu ( »q ->dcid); 1411 l2cÚn = `btcÚn_fšd_l2ÿp_cÚn_by_scid ( cÚn , dcid ); 1412 ià(! l2cÚn ) 1413  çl£ ; 1415 `mem£t (& r¥ , 0, (rsp)); 1416 r¥ . scid = `ýu_to_Ë16 ( l2cÚn -> dcid ); 1417 r¥ . æags = »q ->flags; 1419 `l2ÿp_sig_£nd ( btho¡ , cÚn , BT_L2CAP_PDU_CONFIG_RSP , id’t , & r¥ , 1420 ( r¥ )); 1422  Œue ; 1423 } } 1425  boÞ $l2ÿp_cÚfig_r¥ ( btho¡ *btho¡,  btcÚn * cÚn , 1426 ušt8_t id’t , cÚ¡ * d©a , ušt16_t Ën ) 1428 cÚ¡  bt_l2ÿp_pdu_cÚfig_r¥ * r¥ = d©a ; 1430 ià( Ën < (* r¥ )) 1431  çl£ ; 1433  Œue ; 1434 } } 1436  boÞ $l2ÿp_discÚn_»q ( btho¡ *btho¡,  btcÚn * cÚn , 1437 ušt8_t id’t , cÚ¡ * d©a , ušt16_t Ën ) 1439 cÚ¡  bt_l2ÿp_pdu_discÚn_»q * »q = d©a ; 1440  bt_l2ÿp_pdu_discÚn_r¥ r¥ ; 1442 ià( Ën < (* »q )) 1443  çl£ ; 1445 `mem£t (& r¥ , 0, (rsp)); 1446 r¥ . dcid = »q ->dcid; 1447 r¥ . scid = »q ->scid; 1449 `l2ÿp_sig_£nd ( btho¡ , cÚn , BT_L2CAP_PDU_DISCONN_RSP , id’t , & r¥ , 1450 ( r¥ )); 1452  Œue ; 1453 } } 1455  boÞ $l2ÿp_šfo_»q ( btho¡ *btho¡,  btcÚn * cÚn , 1456 ušt8_t id’t , cÚ¡ * d©a , ušt16_t Ën ) 1458 cÚ¡  bt_l2ÿp_pdu_šfo_»q * »q = d©a ; 1459 ušt64_t fixed_chª ; 1460 ušt16_t ty³ ; 1461 ušt8_t buf [12]; 1462  bt_l2ÿp_pdu_šfo_r¥ * r¥ = (*è buf ; 1464 ià( Ën < (* »q )) 1465  çl£ ; 1467 `mem£t ( buf , 0, (buf)); 1468 r¥ -> ty³ = »q ->type; 1470 ty³ = `Ë16_to_ýu ( »q ->type); 1472  ty³ ) { 1473  L2CAP_IT_FEAT_MASK : 1474 r¥ -> »suÉ = 0x0000; 1475 `put_Ë32 ( L2CAP_FEAT_FIXED_CHAN , r¥ -> d©a ); 1476 `l2ÿp_sig_£nd ( btho¡ , cÚn , BT_L2CAP_PDU_INFO_RSP , id’t , 1477 r¥ , (*rsp) + 4); 1479  L2CAP_IT_FIXED_CHAN : 1480 r¥ -> »suÉ = 0x0000; 1481 fixed_chª = L2CAP_FC_SIG_BREDR ; 1482 ià( btho¡ -> sc && btho¡-> Ë ) 1483 fixed_chª |ð L2CAP_FC_SMP_BREDR ; 1484 `put_Ë64 ( fixed_chª , r¥ -> d©a ); 1485 `l2ÿp_sig_£nd ( btho¡ , cÚn , BT_L2CAP_PDU_INFO_RSP , id’t , 1486 r¥ , (*r¥è+ ( fixed_chª )); 1489 r¥ -> »suÉ = `ýu_to_Ë16 (0x0001); 1490 `l2ÿp_sig_£nd ( btho¡ , cÚn , BT_L2CAP_PDU_INFO_RSP , id’t , 1491 r¥ , (*rsp)); 1495  Œue ; 1496 } } 1498  $hªdË_³ndšg_l2»qs ( btho¡ *btho¡,  btcÚn * cÚn , 1499 ušt8_t id’t , ušt8_ˆ code , 1500 cÚ¡ * d©a , ušt16_t Ën ) 1502  l2ÿp_³ndšg_»q ** cu¼ ; 1504  cu¼ = & btho¡ -> l2»qs ; *cu¼ !ð NULL ;) { 1505  l2ÿp_³ndšg_»q * »q = * cu¼ ; 1507 ià( »q -> id’t != ident) { 1508 cu¼ = & »q -> Ãxt ; 1512 * cu¼ = »q -> Ãxt ; 1513 »q -> `cb ( code , d©a , Ën ,„eq-> u£r_d©a ); 1514 `ä“ ( »q ); 1516 } } 1518  $l2ÿp_sig ( btho¡ *btho¡,  btcÚn * cÚn , 1519 cÚ¡ * d©a , ušt16_t Ën ) 1521 cÚ¡  bt_l2ÿp_hdr_sig * hdr = d©a ; 1522  bt_l2ÿp_pdu_cmd_»jeù »j ; 1523 ušt16_t hdr_Ën ; 1524 boÞ »t ; 1526 ià( Ën < (* hdr )) 1527  »jeù ; 1529 hdr_Ën = `Ë16_to_ýu ( hdr -> Ën ); 1531 ià((* hdr è+ hdr_Ën !ð Ën ) 1532  »jeù ; 1534  hdr -> code ) { 1535  BT_L2CAP_PDU_CMD_REJECT : 1536 »t = `l2ÿp_cmd_»j ( btho¡ , cÚn , hdr -> id’t , 1537 d©a + (* hdr ), hdr_Ën ); 1540  BT_L2CAP_PDU_CONN_REQ : 1541 »t = `l2ÿp_cÚn_»q ( btho¡ , cÚn , hdr -> id’t , 1542 d©a + (* hdr ), hdr_Ën ); 1545  BT_L2CAP_PDU_CONN_RSP : 1546 »t = `l2ÿp_cÚn_r¥ ( btho¡ , cÚn , hdr -> id’t , 1547 d©a + (* hdr ), hdr_Ën ); 1550  BT_L2CAP_PDU_CONFIG_REQ : 1551 »t = `l2ÿp_cÚfig_»q ( btho¡ , cÚn , hdr -> id’t , 1552 d©a + (* hdr ), hdr_Ën ); 1555  BT_L2CAP_PDU_CONFIG_RSP : 1556 »t = `l2ÿp_cÚfig_r¥ ( btho¡ , cÚn , hdr -> id’t , 1557 d©a + (* hdr ), hdr_Ën ); 1560  BT_L2CAP_PDU_DISCONN_REQ : 1561 »t = `l2ÿp_discÚn_»q ( btho¡ , cÚn , hdr -> id’t , 1562 d©a + (* hdr ), hdr_Ën ); 1565  BT_L2CAP_PDU_INFO_REQ : 1566 »t = `l2ÿp_šfo_»q ( btho¡ , cÚn , hdr -> id’t , 1567 d©a + (* hdr ), hdr_Ën ); 1571 `´štf ("UnknowÀL2CAP cod0x%02x\n", hdr -> code ); 1572 »t = çl£ ; 1575 `hªdË_³ndšg_l2»qs ( btho¡ , cÚn , hdr -> id’t , hdr-> code , 1576 d©a + (* hdr ), hdr_Ën ); 1578 ià( »t ) 1581 »jeù : 1582 `mem£t (& »j , 0, (rej)); 1583 `l2ÿp_sig_£nd ( btho¡ , cÚn , BT_L2CAP_PDU_CMD_REJECT , 0, 1584 & »j , (rej)); 1585 } } 1587  boÞ $l2ÿp_cÚn_·¿m_»q ( btho¡ *btho¡,  btcÚn * cÚn , 1588 ušt8_t id’t , cÚ¡ * d©a , ušt16_t Ën ) 1590 cÚ¡  bt_l2ÿp_pdu_cÚn_·¿m_»q * »q = d©a ; 1591  bt_l2ÿp_pdu_cÚn_·¿m_r¥ r¥ ; 1592  bt_hci_cmd_Ë_cÚn_upd©e hci_cmd ; 1594 ià( Ën < (* »q )) 1595  çl£ ; 1597 `mem£t (& hci_cmd , 0, (hci_cmd)); 1598 hci_cmd . hªdË = `ýu_to_Ë16 ( cÚn ->handle); 1599 hci_cmd . mš_š‹rv® = »q ->min_interval; 1600 hci_cmd . max_š‹rv® = »q ->max_interval; 1601 hci_cmd . Ï‹ncy = »q ->latency; 1602 hci_cmd . supv_timeout = »q -> timeout ; 1603 hci_cmd . mš_Ëngth = `ýu_to_Ë16 (0x0001); 1604 hci_cmd . max_Ëngth = `ýu_to_Ë16 (0x0001); 1606 `£nd_commªd ( btho¡ , BT_HCI_CMD_LE_CONN_UPDATE , 1607 & hci_cmd , (hci_cmd)); 1609 `mem£t (& r¥ , 0, (rsp)); 1610 `l2ÿp_sig_£nd ( btho¡ , cÚn , BT_L2CAP_PDU_CONN_PARAM_RSP , id’t , 1611 & r¥ , (rsp)); 1613  Œue ; 1614 } } 1616  boÞ $l2ÿp_cÚn_·¿m_r¥ ( btho¡ *btho¡,  btcÚn * cÚn , 1617 ušt8_t id’t , cÚ¡ * d©a , ušt16_t Ën ) 1619 cÚ¡  bt_l2ÿp_pdu_cÚn_·¿m_»q * r¥ = d©a ; 1621 ià( Ën < (* r¥ )) 1622  çl£ ; 1624  Œue ; 1625 } } 1627  boÞ $l2ÿp_Ë_cÚn_»q ( btho¡ *btho¡,  btcÚn * cÚn , 1628 ušt8_t id’t , cÚ¡ * d©a , ušt16_t Ën ) 1630 cÚ¡  bt_l2ÿp_pdu_Ë_cÚn_»q * »q = d©a ; 1631  bt_l2ÿp_pdu_Ë_cÚn_r¥ r¥ ; 1632 ušt16_t psm ; 1634 ià( Ën < (* »q )) 1635  çl£ ; 1637 psm = `Ë16_to_ýu ( »q ->psm); 1639 `mem£t (& r¥ , 0, (rsp)); 1641 r¥ . mtu = 23; 1642 r¥ . mps = 23; 1643 r¥ . üed™s = 1; 1645 ià( `btho¡_fšd_l2ÿp_cb_by_psm ( btho¡ , psm )) 1646 r¥ . dcid = `ýu_to_Ë16 ( cÚn -> Ãxt_cid ++); 1648 r¥ . »suÉ = `ýu_to_Ë16 (0x0002); 1650 `l2ÿp_sig_£nd ( btho¡ , cÚn , BT_L2CAP_PDU_LE_CONN_RSP , id’t , & r¥ , 1651 ( r¥ )); 1653  Œue ; 1654 } } 1656  boÞ $l2ÿp_Ë_cÚn_r¥ ( btho¡ *btho¡,  btcÚn * cÚn , 1657 ušt8_t id’t , cÚ¡ * d©a , ušt16_t Ën ) 1659 cÚ¡  bt_l2ÿp_pdu_Ë_cÚn_r¥ * r¥ = d©a ; 1661 ià( Ën < (* r¥ )) 1662  çl£ ; 1664 `btho¡_add_l2ÿp_cÚn ( btho¡ , cÚn , 0, `Ë16_to_ýu ( r¥ -> dcid ), 0); 1666  Œue ; 1667 } } 1669  $l2ÿp_Ë_sig ( btho¡ *btho¡,  btcÚn * cÚn , 1670 cÚ¡ * d©a , ušt16_t Ën ) 1672 cÚ¡  bt_l2ÿp_hdr_sig * hdr = d©a ; 1673  bt_l2ÿp_pdu_cmd_»jeù »j ; 1674 ušt16_t hdr_Ën ; 1675 boÞ »t ; 1677 ià( Ën < (* hdr )) 1678  »jeù ; 1680 hdr_Ën = `Ë16_to_ýu ( hdr -> Ën ); 1682 ià((* hdr è+ hdr_Ën !ð Ën ) 1683  »jeù ; 1685  hdr -> code ) { 1686  BT_L2CAP_PDU_CMD_REJECT : 1687 »t = `l2ÿp_cmd_»j ( btho¡ , cÚn , hdr -> id’t , 1688 d©a + (* hdr ), hdr_Ën ); 1691  BT_L2CAP_PDU_DISCONN_REQ : 1692 »t = `l2ÿp_discÚn_»q ( btho¡ , cÚn , hdr -> id’t , 1693 d©a + (* hdr ), hdr_Ën ); 1696  BT_L2CAP_PDU_CONN_PARAM_REQ : 1697 »t = `l2ÿp_cÚn_·¿m_»q ( btho¡ , cÚn , hdr -> id’t , 1698 d©a + (* hdr ), hdr_Ën ); 1701  BT_L2CAP_PDU_CONN_PARAM_RSP : 1702 »t = `l2ÿp_cÚn_·¿m_r¥ ( btho¡ , cÚn , hdr -> id’t , 1703 d©a + (* hdr ), hdr_Ën ); 1706  BT_L2CAP_PDU_LE_CONN_REQ : 1707 »t = `l2ÿp_Ë_cÚn_»q ( btho¡ , cÚn , hdr -> id’t , 1708 d©a + (* hdr ), hdr_Ën ); 1711  BT_L2CAP_PDU_LE_CONN_RSP : 1712 »t = `l2ÿp_Ë_cÚn_r¥ ( btho¡ , cÚn , hdr -> id’t , 1713 d©a + (* hdr ), hdr_Ën ); 1717 `´štf ("UnknowÀL2CAP cod0x%02x\n", hdr -> code ); 1718 »t = çl£ ; 1721 `hªdË_³ndšg_l2»qs ( btho¡ , cÚn , hdr -> id’t , hdr-> code , 1722 d©a + (* hdr ), hdr_Ën ); 1724 ià( »t ) 1727 »jeù : 1728 `mem£t (& »j , 0, (rej)); 1729 `l2ÿp_sig_£nd ( btho¡ , cÚn , BT_L2CAP_PDU_CMD_REJECT , 0, 1730 & »j , (rej)); 1731 } } 1733  cid_hook * $fšd_cid_hook ( btcÚn * cÚn , ušt16_t cid ) 1735  cid_hook * hook ; 1737  hook = cÚn -> cid_hooks ; hook !ð NULL ; hook = hook-> Ãxt ) { 1738 ià( hook -> cid == cid) 1739  hook ; 1742  NULL ; 1743 } } 1745  rfcomm_chª_hook * $fšd_rfcomm_chª_hook ( btcÚn * cÚn , 1746 ušt8_t chªÃl ) 1748  rfcomm_chª_hook * hook ; 1750  hook = cÚn -> rfcomm_chª_hooks ; hook !ð NULL ; hook = hook-> Ãxt ) 1751 ià( hook -> chªÃl == channel) 1752  hook ; 1754  NULL ; 1755 } } 1757  $rfcomm_ua_£nd ( btho¡ *btho¡,  btcÚn * cÚn , 1758  l2cÚn *l2cÚn, ušt8_t ü , ušt8_ˆ dlci ) 1760  rfcomm_cmd cmd ; 1762 cmd . add»ss = `RFCOMM_ADDR ( ü , dlci ); 1763 cmd . cÚŒÞ = `RFCOMM_CTRL ( RFCOMM_UA , 1); 1764 cmd . Ëngth = `RFCOMM_LEN8 (0); 1765 cmd . fcs = `rfcomm_fcs2 (( ušt8_t *)&cmd); 1767 `£nd_aþ ( btho¡ , cÚn -> hªdË , l2cÚn -> dcid , & cmd , (cmd)); 1768 } } 1770  $rfcomm_dm_£nd ( btho¡ *btho¡,  btcÚn * cÚn , 1771  l2cÚn *l2cÚn, ušt8_t ü , ušt8_ˆ dlci ) 1773  rfcomm_cmd cmd ; 1775 cmd . add»ss = `RFCOMM_ADDR ( ü , dlci ); 1776 cmd . cÚŒÞ = `RFCOMM_CTRL ( RFCOMM_DM , 1); 1777 cmd . Ëngth = `RFCOMM_LEN8 (0); 1778 cmd . fcs = `rfcomm_fcs2 (( ušt8_t *)&cmd); 1780 `£nd_aþ ( btho¡ , cÚn -> hªdË , l2cÚn -> dcid , & cmd , (cmd)); 1781 } } 1783  $rfcomm_§bm_»cv ( btho¡ *btho¡,  btcÚn * cÚn , 1784  l2cÚn *l2cÚn, cÚ¡ * d©a , 1785 ušt16_t Ën ) 1787 cÚ¡  rfcomm_cmd * hdr = d©a ; 1788 ušt8_t dlci ; 1789  rfcomm_cÚn_cb_d©a * cb ; 1790 ušt8_t chª ; 1792 ià( Ën < (* hdr )) 1795 chª = `RFCOMM_GET_CHANNEL ( hdr -> add»ss ); 1796 dlci = `RFCOMM_GET_DLCI ( hdr -> add»ss ); 1798 cb = `btho¡_fšd_rfcomm_cb_by_chªÃl ( btho¡ , chª ); 1799 ià(! dlci || cb ) { 1800 `btho¡_add_rfcomm_cÚn ( btho¡ , cÚn , l2cÚn , chª ); 1801 `rfcomm_ua_£nd ( btho¡ , cÚn , l2cÚn , 1, dlci ); 1802 ià( cb && cb-> func ) 1803 cb -> `func ( cÚn -> hªdË , l2cÚn -> scid , cb-> u£r_d©a , 1804 Œue ); 1806 `rfcomm_dm_£nd ( btho¡ , cÚn , l2cÚn , 1, dlci ); 1808 } } 1810  $rfcomm_disc_»cv ( btho¡ *btho¡,  btcÚn * cÚn , 1811  l2cÚn *l2cÚn, cÚ¡ * d©a , 1812 ušt16_t Ën ) 1814 cÚ¡  rfcomm_cmd * hdr = d©a ; 1815 ušt8_t dlci ; 1817 ià( Ën < (* hdr )) 1820 dlci = `RFCOMM_GET_DLCI ( hdr -> add»ss ); 1822 `rfcomm_ua_£nd ( btho¡ , cÚn , l2cÚn , 0, dlci ); 1823 } } 1825  $rfcomm_uih_£nd ( btho¡ *btho¡,  btcÚn * cÚn , 1826  l2cÚn *l2cÚn, ušt8_t add»ss , 1827 ušt8_t ty³ , cÚ¡ * d©a , ušt16_t Ën ) 1829  rfcomm_hdr hdr ; 1830  rfcomm_mcc mcc ; 1831 ušt8_t fcs ; 1832  iovec iov [4]; 1834 hdr . add»ss =‡ddress; 1835 hdr . cÚŒÞ = `RFCOMM_CTRL ( RFCOMM_UIH , 0); 1836 hdr . Ëngth = `RFCOMM_LEN8 (( mcc è+ Ën ); 1838 iov [0]. iov_ba£ = & hdr ; 1839 iov [0]. iov_Ën = ( hdr ); 1841 mcc . ty³ =ype; 1842 mcc . Ëngth = `RFCOMM_LEN8 ( Ën ); 1844 iov [1]. iov_ba£ = & mcc ; 1845 iov [1]. iov_Ën = ( mcc ); 1847 iov [2]. iov_ba£ = (*è d©a ; 1848 iov [2]. iov_Ën = Ën ; 1850 fcs = `rfcomm_fcs (( ušt8_t *è& hdr ); 1852 iov [3]. iov_ba£ = & fcs ; 1853 iov [3]. iov_Ën = ( fcs ); 1855 `£nd_iov ( btho¡ , cÚn -> hªdË , l2cÚn -> dcid , iov , 4); 1856 } } 1858  $rfcomm_ua_»cv ( btho¡ *btho¡,  btcÚn * cÚn , 1859  l2cÚn *l2cÚn, cÚ¡ * d©a , 1860 ušt16_t Ën ) 1862 cÚ¡  rfcomm_cmd * ua_hdr = d©a ; 1863 ušt8_t chªÃl ; 1864  rfcomm_cÚÃùiÚ_d©a * cÚn_d©a = btho¡ -> rfcomm_cÚn_d©a ; 1865 ušt8_t ty³ ; 1866  rfcomm_² ²_cmd ; 1868 ià( Ën < (* ua_hdr )) 1871 chªÃl = `RFCOMM_GET_CHANNEL ( ua_hdr -> add»ss ); 1872 ty³ = `RFCOMM_GET_TYPE ( ua_hdr -> cÚŒÞ ); 1874 ià( chªÃl && cÚn_d©a && conn_data->channel == channel) { 1875 `btho¡_add_rfcomm_cÚn ( btho¡ , cÚn , l2cÚn , chªÃl ); 1876 ià( cÚn_d©a -> cb ) 1877 cÚn_d©a -> `cb ( cÚn -> hªdË , l2cÚn -> scid , 1878 cÚn_d©a -> u£r_d©a , Œue ); 1879 `ä“ ( btho¡ -> rfcomm_cÚn_d©a ); 1880 btho¡ -> rfcomm_cÚn_d©a = NULL ; 1884 ià(! cÚn_d©a || ! `RFCOMM_TEST_CR ( ty³ )) 1887 `btho¡_add_rfcomm_cÚn ( btho¡ , cÚn , l2cÚn , chªÃl ); 1889 ²_cmd . dlci = cÚn_d©a -> chªÃl * 2; 1890 ²_cmd . ´iÜ™y = 7; 1891 ²_cmd . ack_tim” = 0; 1892 ²_cmd . max_»Œªs = 0; 1893 ²_cmd . mtu = 667; 1894 ²_cmd . üed™s = 7; 1896 `rfcomm_uih_£nd ( btho¡ , cÚn , l2cÚn , `RFCOMM_ADDR (1, 0), 1897 `RFCOMM_MCC_TYPE (1, RFCOMM_PN ), & ²_cmd , (pn_cmd)); 1898 } } 1900  $rfcomm_dm_»cv ( btho¡ *btho¡,  btcÚn * cÚn , 1901  l2cÚn *l2cÚn, cÚ¡ * d©a , 1902 ušt16_t Ën ) 1904 cÚ¡  rfcomm_cmd * hdr = d©a ; 1905 ušt8_t chªÃl ; 1906  rfcomm_cÚÃùiÚ_d©a * cÚn_d©a = btho¡ -> rfcomm_cÚn_d©a ; 1908 ià( Ën < (* hdr )) 1911 chªÃl = `RFCOMM_GET_CHANNEL ( hdr -> add»ss ); 1913 ià( cÚn_d©a && cÚn_d©a-> chªÃl == channel) { 1914 ià( cÚn_d©a -> cb ) 1915 cÚn_d©a -> `cb ( cÚn -> hªdË , l2cÚn -> scid , 1916 cÚn_d©a -> u£r_d©a , çl£ ); 1917 `ä“ ( btho¡ -> rfcomm_cÚn_d©a ); 1918 btho¡ -> rfcomm_cÚn_d©a = NULL ; 1920 } } 1922  $rfcomm_msc_»cv ( btho¡ *btho¡,  btcÚn * cÚn , 1923  l2cÚn *l2cÚn, ušt8_t ü , 1924 cÚ¡  rfcomm_msc * msc ) 1926  rfcomm_msc msc_cmd ; 1928 msc_cmd . dlci = msc ->dlci; 1929 msc_cmd . v24_sig = msc ->v24_sig; 1931 `rfcomm_uih_£nd ( btho¡ , cÚn , l2cÚn , `RFCOMM_ADDR (0, 0), 1932 `RFCOMM_MCC_TYPE ( ü , RFCOMM_MSC ), & msc_cmd , 1933 ( msc_cmd )); 1934 } } 1936  $rfcomm_²_»cv ( btho¡ *btho¡,  btcÚn * cÚn , 1937  l2cÚn *l2cÚn, ušt8_t ü , 1938 cÚ¡  rfcomm_² * ² ) 1940  rfcomm_² ²_cmd ; 1942 ià(! ü ) { 1943 `rfcomm_§bm_£nd ( btho¡ , cÚn , l2cÚn , 1, 1944 btho¡ -> rfcomm_cÚn_d©a -> chªÃl * 2); 1948 ²_cmd . dlci = ² ->dlci; 1949 ²_cmd . æow_ù¾ = ² ->flow_ctrl; 1950 ²_cmd . ´iÜ™y = ² ->priority; 1951 ²_cmd . ack_tim” = ² ->ack_timer; 1952 ²_cmd . max_»Œªs = ² ->max_retrans; 1953 ²_cmd . mtu = ² ->mtu; 1954 ²_cmd . üed™s = ² ->credits; 1956 `rfcomm_uih_£nd ( btho¡ , cÚn , l2cÚn , `RFCOMM_ADDR (1, 0), 1957 `RFCOMM_MCC_TYPE (0, RFCOMM_PN ), & ²_cmd , (pn_cmd)); 1958 } } 1960  $rfcomm_mcc_»cv ( btho¡ *btho¡,  btcÚn * cÚn , 1961  l2cÚn *l2cÚn, cÚ¡ * d©a , ušt16_t Ën ) 1963 cÚ¡  rfcomm_mcc * mcc = d©a ; 1964 cÚ¡  rfcomm_msc * msc ; 1965 cÚ¡  rfcomm_² * ² ; 1967 ià( Ën < (* mcc )) 1970  `RFCOMM_GET_MCC_TYPE ( mcc -> ty³ )) { 1971  RFCOMM_MSC : 1972 ià( Ën - (* mcc è< (* msc )) 1975 msc = d©a + (* mcc ); 1977 `rfcomm_msc_»cv ( btho¡ , cÚn , l2cÚn , 1978 `RFCOMM_TEST_CR ( mcc -> ty³ è/ 2, msc ); 1980  RFCOMM_PN : 1981 ià( Ën - (* mcc è< (* ² )) 1984 ² = d©a + (* mcc ); 1986 `rfcomm_²_»cv ( btho¡ , cÚn , l2cÚn , 1987 `RFCOMM_TEST_CR ( mcc -> ty³ è/ 2, ² ); 1992 } } 1994  $rfcomm_uih_»cv ( btho¡ *btho¡,  btcÚn * cÚn , 1995  l2cÚn *l2cÚn, cÚ¡ * d©a , 1996 ušt16_t Ën ) 1998 cÚ¡  rfcomm_hdr * hdr = d©a ; 1999 ušt16_t hdr_Ën ; 2000 cÚ¡ * p ; 2002 ià( Ën < (* hdr )) 2005 ià( `RFCOMM_TEST_EA ( hdr -> Ëngth )) 2006 hdr_Ën = (* hdr ); 2008 hdr_Ën = (* hdr è+ ( ušt8_t ); 2010 ià( Ën < hdr_Ën ) 2013 p = d©a + hdr_Ën ; 2015 ià( `RFCOMM_GET_DLCI ( hdr -> add»ss )) { 2016  rfcomm_chª_hook * hook ; 2018 hook = `fšd_rfcomm_chª_hook ( cÚn , 2019 `RFCOMM_GET_CHANNEL ( hdr -> add»ss )); 2020 ià(! hook ) 2023 hook -> `func ( p , Ën - hdr_Ën - ( ušt8_t ), 2024 hook -> u£r_d©a ); 2026 `rfcomm_mcc_»cv ( btho¡ , cÚn , l2cÚn , p , Ën - hdr_Ën ); 2028 } } 2030  $´oûss_rfcomm ( btho¡ *btho¡,  btcÚn * cÚn , 2031  l2cÚn *l2cÚn, cÚ¡ * d©a , 2032 ušt16_t Ën ) 2034 cÚ¡  rfcomm_hdr * hdr = d©a ; 2036  `RFCOMM_GET_TYPE ( hdr -> cÚŒÞ )) { 2037  RFCOMM_SABM : 2038 `rfcomm_§bm_»cv ( btho¡ , cÚn , l2cÚn , d©a , Ën ); 2040  RFCOMM_DISC : 2041 `rfcomm_disc_»cv ( btho¡ , cÚn , l2cÚn , d©a , Ën ); 2043  RFCOMM_UA : 2044 `rfcomm_ua_»cv ( btho¡ , cÚn , l2cÚn , d©a , Ën ); 2046  RFCOMM_DM : 2047 `rfcomm_dm_»cv ( btho¡ , cÚn , l2cÚn , d©a , Ën ); 2049  RFCOMM_UIH : 2050 `rfcomm_uih_»cv ( btho¡ , cÚn , l2cÚn , d©a , Ën ); 2053 `´štf ("Unknown frameype\n"); 2056 } } 2058  $´oûss_aþ ( btho¡ *btho¡, cÚ¡ * d©a , ušt16_t Ën ) 2060 cÚ¡  bt_hci_aþ_hdr * aþ_hdr = d©a ; 2061 cÚ¡  bt_l2ÿp_hdr * l2_hdr = d©a + (* aþ_hdr ); 2062 ušt16_t hªdË , cid , aþ_Ën , l2_Ën ; 2063  cid_hook * hook ; 2064  btcÚn * cÚn ; 2065  l2cÚn *l2conn; 2066 cÚ¡ * l2_d©a ; 2068 ià( Ën < (* aþ_hdr è+ (* l2_hdr )) 2071 aþ_Ën = `Ë16_to_ýu ( aþ_hdr -> dËn ); 2072 ià( Ën !ð(* aþ_hdr è+ aþ_Ën ) 2075 hªdË = `aþ_hªdË ( aþ_hdr ->handle); 2076 cÚn = `btho¡_fšd_cÚn ( btho¡ , hªdË ); 2077 ià(! cÚn ) { 2078 `´štf ("ACL d©¨fÜ unknowÀhªdË 0x%04x\n", hªdË ); 2082 l2_Ën = `Ë16_to_ýu ( l2_hdr -> Ën ); 2083 ià( Ën - (* aþ_hdr è!ð(* l2_hdr è+ l2_Ën ) 2086 l2_d©a = d©a + (* aþ_hdr è+ (* l2_hdr ); 2088 cid = `Ë16_to_ýu ( l2_hdr ->cid); 2090 hook = `fšd_cid_hook ( cÚn , cid ); 2091 ià( hook ) { 2092 hook -> `func ( l2_d©a , l2_Ën , hook-> u£r_d©a ); 2096  cid ) { 2098 `l2ÿp_sig ( btho¡ , cÚn , l2_d©a , l2_Ën ); 2101 `l2ÿp_Ë_sig ( btho¡ , cÚn , l2_d©a , l2_Ën ); 2104 `smp_d©a ( cÚn -> smp_d©a , l2_d©a , l2_Ën ); 2107 `smp_b»dr_d©a ( cÚn -> smp_d©a , l2_d©a , l2_Ën ); 2110 l2cÚn = `btcÚn_fšd_l2ÿp_cÚn_by_scid ( cÚn , cid ); 2111 ià( l2cÚn &&†2cÚn-> psm == 0x0003) 2112 `´oûss_rfcomm ( btho¡ , cÚn , l2cÚn , l2_d©a , l2_Ën ); 2114 `´štf ("Pack‘ fÜ unknowÀCID 0x%04x (%u)\n", cid , 2115 cid ); 2118 } } 2120  $btho¡_»ûive_h4 ( btho¡ *btho¡, cÚ¡ * d©a , ušt16_t Ën ) 2122 ušt8_t pkt_ty³ ; 2124 ià(! btho¡ ) 2127 ià( Ën < 1) 2130 pkt_ty³ = ((cÚ¡ ušt8_t *è d©a )[0]; 2132  pkt_ty³ ) { 2133  BT_H4_EVT_PKT : 2134 `´oûss_evt ( btho¡ , d©a + 1, Ën - 1); 2136  BT_H4_ACL_PKT : 2137 `´oûss_aþ ( btho¡ , d©a + 1, Ën - 1); 2140 `´štf ("UnsuµÜ‹d…ack‘ 0x%2.2x\n", pkt_ty³ ); 2143 } } 2145  $btho¡_£t_cmd_com¶‘e_cb ( btho¡ *bthost, 2146 btho¡_cmd_com¶‘e_cb cb , * u£r_d©a ) 2148 btho¡ -> cmd_com¶‘e_cb = cb ; 2149 btho¡ -> cmd_com¶‘e_d©a = u£r_d©a ; 2150 } } 2152  $btho¡_£t_cÚÃù_cb ( btho¡ *btho¡, btho¡_Ãw_cÚn_cb cb , 2153 * u£r_d©a ) 2155 btho¡ -> Ãw_cÚn_cb = cb ; 2156 btho¡ -> Ãw_cÚn_d©a = u£r_d©a ; 2157 } } 2159  $btho¡_hci_cÚÃù ( btho¡ *btho¡, cÚ¡ ušt8_t * bdaddr , 2160 ušt8_t addr_ty³ ) 2162 btho¡ -> cÚn_š™ = Œue ; 2164 ià( addr_ty³ =ð BDADDR_BREDR ) { 2165  bt_hci_cmd_ü—‹_cÚn cc ; 2167 `mem£t (& cc , 0, (cc)); 2168 `memýy ( cc . bdaddr , bdaddr, (cc.bdaddr)); 2170 `£nd_commªd ( btho¡ , BT_HCI_CMD_CREATE_CONN , & cc , (cc)); 2172  bt_hci_cmd_Ë_ü—‹_cÚn cc ; 2174 `mem£t (& cc , 0, (cc)); 2175 `memýy ( cc . ³”_addr , bdaddr , (cc.peer_addr)); 2177 ià( addr_ty³ =ð BDADDR_LE_RANDOM ) 2178 cc . ³”_addr_ty³ = 0x01; 2180 `£nd_commªd ( btho¡ , BT_HCI_CMD_LE_CREATE_CONN , 2181 & cc , (cc)); 2183 } } 2185  $btho¡_hci_discÚÃù ( btho¡ *btho¡, ušt16_t hªdË , 2186 ušt8_t »asÚ ) 2188  bt_hci_cmd_discÚÃù disc ; 2190 disc . hªdË = `ýu_to_Ë16 (handle); 2191 disc . »asÚ =„eason; 2193 `£nd_commªd ( btho¡ , BT_HCI_CMD_DISCONNECT , & disc , (disc)); 2194 } } 2196  $btho¡_wr™e_sÿn_’abË ( btho¡ *btho¡, ušt8_t sÿn ) 2198 `£nd_commªd ( btho¡ , BT_HCI_CMD_WRITE_SCAN_ENABLE , & sÿn , 1); 2199 } } 2201  $btho¡_£t_adv_’abË ( btho¡ *btho¡, ušt8_t ’abË , ušt8_ˆ æags ) 2203  bt_hci_cmd_Ë_£t_adv_·¿m‘”s ý ; 2205 `mem£t (& ý , 0, (cp)); 2206 `£nd_commªd ( btho¡ , BT_HCI_CMD_LE_SET_ADV_PARAMETERS , 2207 & ý , (cp)); 2209 ià( æags ) { 2210  bt_hci_cmd_Ë_£t_adv_d©a adv_ý ; 2212 `mem£t ( adv_ý . d©a , 0, 31); 2214 adv_ý . d©a [0] = 0x02; 2215 adv_ý . d©a [1] = 0x01; 2216 adv_ý . d©a [2] = æags ; 2218 adv_ý . d©a [3] = 0x00; 2220 adv_ý . Ën = 1 +‡dv_ý. d©a [0]; 2222 `£nd_commªd ( btho¡ , BT_HCI_CMD_LE_SET_ADV_DATA , & adv_ý , 2223 ( adv_ý )); 2226 `£nd_commªd ( btho¡ , BT_HCI_CMD_LE_SET_ADV_ENABLE , & ’abË , 1); 2227 } } 2229  $btho¡_wr™e_s¥_mode ( btho¡ *btho¡, ušt8_t mode ) 2231 `£nd_commªd ( btho¡ , BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE , & mode , 1); 2232 } } 2234  $btho¡_wr™e_Ë_ho¡_suµÜ‹d ( btho¡ *btho¡, ušt8_t mode ) 2236  bt_hci_cmd_wr™e_Ë_ho¡_suµÜ‹d cmd ; 2238 btho¡ -> Ë = mode ; 2240 `mem£t (& cmd , 0, (cmd)); 2241 cmd . suµÜ‹d = mode ; 2242 `£nd_commªd ( btho¡ , BT_HCI_CMD_WRITE_LE_HOST_SUPPORTED , 2243 & cmd , (cmd)); 2244 } } 2246  $btho¡_»que¡_auth ( btho¡ *btho¡, ušt16_t hªdË ) 2248  btcÚn * cÚn ; 2250 cÚn = `btho¡_fšd_cÚn ( btho¡ , hªdË ); 2251 ià(! cÚn ) 2254 ià( cÚn -> addr_ty³ =ð BDADDR_BREDR ) { 2255  bt_hci_cmd_auth_»que¡ed ý ; 2257 ý . hªdË = `ýu_to_Ë16 (handle); 2258 `£nd_commªd ( btho¡ , BT_HCI_CMD_AUTH_REQUESTED , & ý , (cp)); 2260 ušt8_t auth_»q = btho¡ ->auth_req; 2262 ià( btho¡ -> sc ) 2263 auth_»q |= 0x08; 2265 `smp_·œ ( cÚn -> smp_d©a , btho¡ -> io_ÿ·bž™y , auth_»q ); 2267 } } 2269  $btho¡_Ë_¡¬t_’üy± ( btho¡ *btho¡, ušt16_t hªdË , 2270 cÚ¡ ušt8_t Ék [16]) 2272  bt_hci_cmd_Ë_¡¬t_’üy± cmd ; 2274 `mem£t (& cmd , 0, (cmd)); 2275 cmd . hªdË = `htobs (handle); 2276 `memýy ( cmd . Ék ,†tk, 16); 2278 `£nd_commªd ( btho¡ , BT_HCI_CMD_LE_START_ENCRYPT , & cmd , (cmd)); 2279 } } 2281  $btho¡_add_l2ÿp_£rv” ( btho¡ *btho¡, ušt16_t psm , 2282 btho¡_l2ÿp_cÚÃù_cb func , * u£r_d©a ) 2284  l2ÿp_cÚn_cb_d©a * d©a ; 2286 d©a = `m®loc (( l2ÿp_cÚn_cb_d©a )); 2287 ià(! d©a ) 2290 d©a -> psm =…sm; 2291 d©a -> u£r_d©a = user_data; 2292 d©a -> func = func; 2293 d©a -> Ãxt = btho¡ -> Ãw_l2ÿp_cÚn_d©a ; 2295 btho¡ -> Ãw_l2ÿp_cÚn_d©a = d©a ; 2296 } } 2298  $btho¡_£t_sc_suµÜt ( btho¡ *btho¡, boÞ ’abË ) 2300  bt_hci_cmd_wr™e_£cu»_cÚn_suµÜt cmd ; 2302 btho¡ -> sc = ’abË ; 2304 ià(! `lmp_b»dr_ÿ·bË ( btho¡ )) 2307 cmd . suµÜt = ’abË ; 2308 `£nd_commªd ( btho¡ , BT_HCI_CMD_WRITE_SECURE_CONN_SUPPORT , 2309 & cmd , (cmd)); 2310 } } 2312  $btho¡_£t_pš_code ( btho¡ *btho¡, cÚ¡ ušt8_t * pš , 2313 ušt8_t pš_Ën ) 2315 `memýy ( btho¡ -> pš ,…š, pš_Ën ); 2316 btho¡ -> pš_Ën =…in_len; 2317 } } 2319  $btho¡_£t_io_ÿ·bž™y ( btho¡ *btho¡, ušt8_t io_ÿ·bž™y ) 2321 btho¡ -> io_ÿ·bž™y = io_capability; 2322 } } 2324 ušt8_t $btho¡_g‘_io_ÿ·bž™y ( btho¡ *bthost) 2326  btho¡ -> io_ÿ·bž™y ; 2327 } } 2329  $btho¡_£t_auth_»q ( btho¡ *btho¡, ušt8_t auth_»q ) 2331 btho¡ -> auth_»q =‡uth_req; 2332 } } 2334 ušt8_t $btho¡_g‘_auth_»q ( btho¡ *bthost) 2336 ušt8_t auth_»q = btho¡ ->auth_req; 2338 ià( btho¡ -> sc ) 2339 auth_»q |= 0x08; 2341  auth_»q ; 2342 } } 2344  $btho¡_£t_»jeù_u£r_cÚfœm ( btho¡ *btho¡, boÞ »jeù ) 2346 btho¡ -> »jeù_u£r_cÚfœm = »jeù ; 2347 } } 2349 boÞ $btho¡_g‘_»jeù_u£r_cÚfœm ( btho¡ *bthost) 2351  btho¡ -> »jeù_u£r_cÚfœm ; 2352 } } 2354  $btho¡_add_rfcomm_£rv” ( btho¡ *btho¡, ušt8_t chªÃl , 2355 btho¡_rfcomm_cÚÃù_cb func , * u£r_d©a ) 2357  rfcomm_cÚn_cb_d©a * d©a ; 2359 d©a = `m®loc (( rfcomm_cÚn_cb_d©a )); 2360 ià(! d©a ) 2363 d©a -> chªÃl = channel; 2364 d©a -> u£r_d©a = user_data; 2365 d©a -> func = func; 2366 d©a -> Ãxt = btho¡ -> Ãw_rfcomm_cÚn_d©a ; 2368 btho¡ -> Ãw_rfcomm_cÚn_d©a = d©a ; 2369 } } 2371  $btho¡_¡¬t ( btho¡ *bthost) 2373 ià(! btho¡ ) 2376 btho¡ -> ncmd = 1; 2378 `£nd_commªd ( btho¡ , BT_HCI_CMD_RESET , NULL , 0); 2380 `£nd_commªd ( btho¡ , BT_HCI_CMD_READ_LOCAL_FEATURES , NULL , 0); 2381 `£nd_commªd ( btho¡ , BT_HCI_CMD_READ_BD_ADDR , NULL , 0); 2382 } } 2384 boÞ $btho¡_cÚÃù_rfcomm ( btho¡ *btho¡, ušt16_t hªdË , 2385 ušt8_t chªÃl , btho¡_rfcomm_cÚÃù_cb func , 2386 * u£r_d©a ) 2388  rfcomm_cÚÃùiÚ_d©a * d©a ; 2389  bt_l2ÿp_pdu_cÚn_»q »q ; 2390  btcÚn * cÚn ; 2392 ià( btho¡ -> rfcomm_cÚn_d©a ) 2393  çl£ ; 2395 cÚn = `btho¡_fšd_cÚn ( btho¡ , hªdË ); 2396 ià(! cÚn ) 2397  çl£ ; 2399 d©a = `m®loc (( rfcomm_cÚÃùiÚ_d©a )); 2400 ià(! d©a ) 2401  çl£ ; 2403 d©a -> chªÃl = channel; 2404 d©a -> cÚn = conn; 2405 d©a -> cb = func ; 2406 d©a -> u£r_d©a = user_data; 2408 btho¡ -> rfcomm_cÚn_d©a = d©a ; 2410 »q . psm = `ýu_to_Ë16 (0x0003); 2411 »q . scid = `ýu_to_Ë16 ( cÚn -> Ãxt_cid ++); 2413  `btho¡_l2ÿp_»q ( btho¡ , hªdË , BT_L2CAP_PDU_CONN_REQ , 2414 & »q , Ôeq), NULL , NULL); 2415 } } 2417  $btho¡_add_rfcomm_chª_hook ( btho¡ *btho¡, ušt16_t hªdË , 2418 ušt8_t chªÃl , 2419 btho¡_rfcomm_chª_hook_func_t func , 2420 * u£r_d©a ) 2422  rfcomm_chª_hook * hook ; 2423  btcÚn * cÚn ; 2425 cÚn = `btho¡_fšd_cÚn ( btho¡ , hªdË ); 2426 ià(! cÚn ) 2429 hook = `m®loc ((*hook)); 2430 ià(! hook ) 2433 `mem£t ( hook , 0, (*hook)); 2435 hook -> chªÃl = channel; 2436 hook -> func = func; 2437 hook -> u£r_d©a = user_data; 2439 hook -> Ãxt = cÚn -> rfcomm_chª_hooks ; 2440 cÚn -> rfcomm_chª_hooks = hook ; 2441 } } 2443  $btho¡_£nd_rfcomm_d©a ( btho¡ *btho¡, ušt16_t hªdË , 2444 ušt8_t chªÃl , cÚ¡ * d©a , 2445 ušt16_t Ën ) 2447  btcÚn * cÚn ; 2448  rccÚn *rcconn; 2449  rfcomm_hdr * hdr ; 2450 ušt8_t * uih_äame ; 2451 ušt16_t uih_Ën ; 2453 cÚn = `btho¡_fšd_cÚn ( btho¡ , hªdË ); 2454 ià(! cÚn ) 2457 rccÚn = `btcÚn_fšd_rfcomm_cÚn_by_chªÃl ( cÚn , chªÃl ); 2458 ià(! rccÚn ) 2461 ià( Ën > 127) 2462 uih_Ën = Ën + ( rfcomm_cmd è+ ( ušt8_t ); 2464 uih_Ën = Ën + ( rfcomm_cmd ); 2466 uih_äame = `m®loc ( uih_Ën ); 2467 ià(! uih_äame ) 2470 hdr = ( rfcomm_hdr *è uih_äame ; 2471 hdr -> add»ss = `RFCOMM_ADDR (1, chªÃl * 2); 2472 hdr -> cÚŒÞ = `RFCOMM_CTRL ( RFCOMM_UIH , 0); 2473 ià( Ën > 127) { 2474 hdr -> Ëngth = `RFCOMM_LEN16 ( `ýu_to_Ë16 ((*hdrè+ Ën )); 2475 `memýy ( uih_äame + (* hdr è+ 1, d©a , Ën ); 2477 hdr -> Ëngth = `RFCOMM_LEN8 ((*hdrè+ Ën ); 2478 `memýy ( uih_äame + (* hdr ), d©a , Ën ); 2481 uih_äame [ uih_Ën - 1] = `rfcomm_fcs ((*) hdr ); 2482 `£nd_aþ ( btho¡ , hªdË , rccÚn -> scid , uih_äame , uih_Ën ); 2484 `ä“ ( uih_äame ); 2485 } } @emulator/bthost.h 25  ~<¡dšt.h > 26  ~ 28 (* tbtho¡_£nd_func è(cÚ¡  tiovec * tiov ,  tiovËn , 29 * tu£r_d©a ); 31  btho¡ ; 33  btho¡ * `btho¡_ü—‹ (); 34  `btho¡_de¡roy ( btho¡ *bthost); 36 (* tbtho¡_»ady_cb ) (); 37  `btho¡_nÙify_»ady ( btho¡ *btho¡, btho¡_»ady_cb cb ); 39  `btho¡_£t_£nd_hªdËr ( btho¡ *btho¡, btho¡_£nd_func hªdËr , 40 * u£r_d©a ); 42  `btho¡_»ûive_h4 ( btho¡ *btho¡, cÚ¡ * d©a , ušt16_t Ën ); 44 (* tbtho¡_cmd_com¶‘e_cb è( tušt16_t tÝcode , tušt8_t t¡©us , 45 cÚ¡ * t·¿m , tušt8_t tËn , 46 * tu£r_d©a ); 48  `btho¡_£t_cmd_com¶‘e_cb ( btho¡ *bthost, 49 btho¡_cmd_com¶‘e_cb cb , * u£r_d©a ); 51 (* tbtho¡_Ãw_cÚn_cb è( tušt16_t thªdË , * tu£r_d©a ); 53  `btho¡_£t_cÚÃù_cb ( btho¡ *btho¡, btho¡_Ãw_cÚn_cb cb , 54 * u£r_d©a ); 56  `btho¡_hci_cÚÃù ( btho¡ *btho¡, cÚ¡ ušt8_t * bdaddr , 57 ušt8_t addr_ty³ ); 59  `btho¡_hci_discÚÃù ( btho¡ *btho¡, ušt16_t hªdË , 60 ušt8_t »asÚ ); 62 (* tbtho¡_cid_hook_func_t )(cÚ¡ * td©a , tušt16_t tËn , 63 * tu£r_d©a ); 65  `btho¡_add_cid_hook ( btho¡ *btho¡, ušt16_t hªdË , ušt16_ˆ cid , 66 btho¡_cid_hook_func_t func , * u£r_d©a ); 68  `btho¡_£nd_cid ( btho¡ *btho¡, ušt16_t hªdË , ušt16_ˆ cid , 69 cÚ¡ * d©a , ušt16_t Ën ); 70  `btho¡_£nd_cid_v ( btho¡ *btho¡, ušt16_t hªdË , ušt16_ˆ cid , 71 cÚ¡  iovec * iov ,  iovút ); 73 (* tbtho¡_l2ÿp_r¥_cb è( tušt8_t tcode , cÚ¡ * td©a , 74 tušt16_t tËn , * tu£r_d©a ); 76 boÞ `btho¡_l2ÿp_»q ( btho¡ *btho¡, ušt16_t hªdË , ušt8_t »q , 77 cÚ¡ * d©a , ušt16_t Ën , 78 btho¡_l2ÿp_r¥_cb cb , * u£r_d©a ); 80  `btho¡_wr™e_sÿn_’abË ( btho¡ *btho¡, ušt8_t sÿn ); 82  `btho¡_£t_adv_’abË ( btho¡ *btho¡, ušt8_t ’abË , 83 ušt8_t æags ); 85  `btho¡_wr™e_s¥_mode ( btho¡ *btho¡, ušt8_t mode ); 87  `btho¡_wr™e_Ë_ho¡_suµÜ‹d ( btho¡ *btho¡, ušt8_t mode ); 89  `btho¡_»que¡_auth ( btho¡ *btho¡, ušt16_t hªdË ); 91  `btho¡_Ë_¡¬t_’üy± ( btho¡ *btho¡, ušt16_t hªdË , 92 cÚ¡ ušt8_t Ék [16]); 93 (* tbtho¡_l2ÿp_cÚÃù_cb è( tušt16_t thªdË , ušt16_ˆ tcid , 94 * tu£r_d©a ); 96  `btho¡_add_l2ÿp_£rv” ( btho¡ *btho¡, ušt16_t psm , 97 btho¡_l2ÿp_cÚÃù_cb func , * u£r_d©a ); 99  `btho¡_£t_sc_suµÜt ( btho¡ *btho¡, boÞ ’abË ); 101  `btho¡_£t_pš_code ( btho¡ *btho¡, cÚ¡ ušt8_t * pš , 102 ušt8_t pš_Ën ); 103  `btho¡_£t_io_ÿ·bž™y ( btho¡ *btho¡, ušt8_t io_ÿ·bž™y ); 104 ušt8_t `btho¡_g‘_io_ÿ·bž™y ( btho¡ *bthost); 105  `btho¡_£t_auth_»q ( btho¡ *btho¡, ušt8_t auth_»q ); 106 ušt8_t `btho¡_g‘_auth_»q ( btho¡ *bthost); 107  `btho¡_£t_»jeù_u£r_cÚfœm ( btho¡ *btho¡, boÞ »jeù ); 108 boÞ `btho¡_g‘_»jeù_u£r_cÚfœm ( btho¡ *bthost); 110 (* tbtho¡_rfcomm_cÚÃù_cb è( tušt16_t thªdË , ušt16_ˆ tcid , 111 * tu£r_d©a , tboÞ t¡©us ); 113  `btho¡_add_rfcomm_£rv” ( btho¡ *btho¡, ušt8_t chªÃl , 114 btho¡_rfcomm_cÚÃù_cb func , * u£r_d©a ); 116 boÞ `btho¡_cÚÃù_rfcomm ( btho¡ *btho¡, ušt16_t hªdË , 117 ušt8_t chªÃl , btho¡_rfcomm_cÚÃù_cb func , 118 * u£r_d©a ); 120 (* tbtho¡_rfcomm_chª_hook_func_t è(cÚ¡ * td©a , tušt16_t tËn , 121 * tu£r_d©a ); 123  `btho¡_add_rfcomm_chª_hook ( btho¡ *btho¡, ušt16_t hªdË , 124 ušt8_t chªÃl , 125 btho¡_rfcomm_chª_hook_func_t func , 126 * u£r_d©a ); 128  `btho¡_£nd_rfcomm_d©a ( btho¡ *btho¡, ušt16_t hªdË , 129 ušt8_t chªÃl , cÚ¡ * d©a , 130 ušt16_t Ën ); 132  `btho¡_¡¬t ( btho¡ *bthost); 136 * `smp_¡¬t ( btho¡ *bthost); 137  `smp_¡Ý (* smp_d©a ); 138 * `smp_cÚn_add (* smp_d©a , ušt16_t hªdË , cÚ¡ ušt8_t * Ÿ , 139 cÚ¡ ušt8_t * ¿ , ušt8_ˆ addr_ty³ , boÞ cÚn_š™ ); 140  `smp_cÚn_d– (* cÚn_d©a ); 141  `smp_cÚn_’üy±ed (* cÚn_d©a , ušt8_t ’üy± ); 142  `smp_d©a (* cÚn_d©a , cÚ¡ * d©a , ušt16_t Ën ); 143  `smp_b»dr_d©a (* cÚn_d©a , cÚ¡ * d©a , ušt16_t Ën ); 144  `smp_g‘_Ék (* smp_d©a , ušt64_t ¿nd , ušt16_t ediv , ušt8_t * Ék ); 145  `smp_·œ (* cÚn_d©a , ušt8_t io_ÿp , ušt8_ˆ auth_»q ); @emulator/hciemu.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~ 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 33  ~<¡dboÞ.h > 34  ~<”ºo.h > 35  ~ 37  ~ 39  ~ 40  ~ 42  ~"mÚ™Ü/bt.h " 43  ~"emuÏtÜ/btdev.h " 44  ~"emuÏtÜ/btho¡.h " 45  ~"¤c/sh¬ed/utž.h " 46  ~"¤c/sh¬ed/queue.h " 47  ~"emuÏtÜ/hc›mu.h " 49  shc›mu { 50  m»f_couÁ ; 51 btdev_ty³ mbtdev_ty³ ; 52  btho¡ * mho¡_¡ack ; 53  btdev * mma¡”_dev ; 54  btdev * mþ›Á_dev ; 55 gušt mho¡_sourû ; 56 gušt mma¡”_sourû ; 57 gušt mþ›Á_sourû ; 58  queue * mpo¡_commªd_hooks ; 59  mbdaddr_¡r [18]; 62  shc›mu_commªd_hook { 63 hc›mu_commªd_func_t mfunùiÚ ; 64 * mu£r_d©a ; 67  $de¡roy_commªd_hook (* d©a ) 69  hc›mu_commªd_hook * hook = d©a ; 71 `ä“ ( hook ); 72 } } 74  srun_d©a { 75 ušt16_t mÝcode ; 76 cÚ¡ * md©a ; 77 ušt8_t mËn ; 80  $run_commªd_hook (* d©a , * u£r_d©a ) 82  hc›mu_commªd_hook * hook = d©a ; 83  run_d©a *run_d©¨ð u£r_d©a ; 85 ià( hook -> funùiÚ ) 86 hook -> `funùiÚ ( run_d©a -> Ýcode ,„un_d©a-> d©a , 87 run_d©a -> Ën , hook -> u£r_d©a ); 88 } } 90  $ma¡”_commªd_ÿÎback ( ušt16_t Ýcode , 91 cÚ¡ * d©a , ušt8_t Ën , 92 btdev_ÿÎback ÿÎback , * u£r_d©a ) 94  hc›mu *hc›mu = u£r_d©a ; 95  run_d©a „un_d©¨ð{ . Ýcode = opcode, 96 . d©a = d©a, . Ën =†en }; 98 `btdev_commªd_deçuÉ ( ÿÎback ); 100 `queue_fÜ—ch ( hc›mu -> po¡_commªd_hooks , run_commªd_hook , & run_d©a ); 101 } } 103  $þ›Á_commªd_ÿÎback ( ušt16_t Ýcode , 104 cÚ¡ * d©a , ušt8_t Ën , 105 btdev_ÿÎback ÿÎback , * u£r_d©a ) 107 `btdev_commªd_deçuÉ ( ÿÎback ); 108 } } 110  $wr™ev_ÿÎback (cÚ¡  iovec * iov ,  iovËn , 111 * u£r_d©a ) 113 GIOChªÃl * chªÃl = u£r_d©a ; 114 ssize_t wr™‹n ; 115  fd ; 117 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 119 wr™‹n = `wr™ev ( fd , iov , iovËn ); 120 ià( wr™‹n < 0) 122 } } 124  gboÞ—n $»ûive_btho¡ ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd™iÚ , 125 gpoš‹r u£r_d©a ) 127  btho¡ *btho¡ = u£r_d©a ; 128  buf [4096]; 129 ssize_t Ën ; 130  fd ; 132 ià( cÚd™iÚ & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) 133  FALSE ; 135 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 137 Ën = `»ad ( fd , buf , (buf)); 138 ià( Ën < 0) 139  FALSE ; 141 `btho¡_»ûive_h4 ( btho¡ , buf , Ën ); 143  TRUE ; 144 } } 146  gušt $ü—‹_sourû_btho¡ ( fd ,  btho¡ *bthost) 148 GIOChªÃl * chªÃl ; 149 gušt sourû ; 151 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 153 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 154 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 155 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 157 `btho¡_£t_£nd_hªdËr ( btho¡ , wr™ev_ÿÎback , chªÃl ); 159 sourû = `g_io_add_w©ch_fuÎ ( chªÃl , G_PRIORITY_DEFAULT , 160 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 161 »ûive_btho¡ , btho¡ , NULL ); 163 `g_io_chªÃl_uÄef ( chªÃl ); 165  sourû ; 166 } } 168  gboÞ—n $»ûive_btdev ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd™iÚ , 169 gpoš‹r u£r_d©a ) 171  btdev *btdev = u£r_d©a ; 172  buf [4096]; 173 ssize_t Ën ; 174  fd ; 176 ià( cÚd™iÚ & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) 177  FALSE ; 179 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 181 Ën = `»ad ( fd , buf , (buf)); 182 ià( Ën < 0) { 183 ià( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINTR ) 184  TRUE ; 186  FALSE ; 189 ià( Ën < 1) 190  FALSE ; 192  buf [0]) { 193  BT_H4_CMD_PKT : 194  BT_H4_ACL_PKT : 195  BT_H4_SCO_PKT : 196 `btdev_»ûive_h4 ( btdev , buf , Ën ); 200  TRUE ; 201 } } 203  gušt $ü—‹_sourû_btdev ( fd ,  btdev *btdev) 205 GIOChªÃl * chªÃl ; 206 gušt sourû ; 208 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 210 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 211 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 212 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 214 `btdev_£t_£nd_hªdËr ( btdev , wr™ev_ÿÎback , chªÃl ); 216 sourû = `g_io_add_w©ch_fuÎ ( chªÃl , G_PRIORITY_DEFAULT , 217 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 218 »ûive_btdev , btdev , NULL ); 220 `g_io_chªÃl_uÄef ( chªÃl ); 222  sourû ; 223 } } 225  boÞ $ü—‹_vhci ( hc›mu *hciemu) 227  btdev *btdev; 228 ušt8_t ü—‹_»q [2]; 229 ssize_t wr™‹n ; 230  fd ; 232 btdev = `btdev_ü—‹ ( hc›mu -> btdev_ty³ , 0x00); 233 ià(! btdev ) 234  çl£ ; 236 `btdev_£t_commªd_hªdËr ( btdev , ma¡”_commªd_ÿÎback , hc›mu ); 238 fd = `Ý’ ("/dev/vhci", O_RDWR | O_NONBLOCK | O_CLOEXEC ); 239 ià( fd < 0) { 240 `³¼Ü ("Opening /dev/vhci failed"); 241 `btdev_de¡roy ( btdev ); 242  çl£ ; 245 ü—‹_»q [0] = HCI_VENDOR_PKT ; 246 ü—‹_»q [1] = HCI_BREDR ; 247 wr™‹n = `wr™e ( fd , ü—‹_»q , (create_req)); 248 ià( wr™‹n < 0) { 249 `þo£ ( fd ); 250 `btdev_de¡roy ( btdev ); 251  çl£ ; 254 hc›mu -> ma¡”_dev = btdev ; 256 hc›mu -> ma¡”_sourû = `ü—‹_sourû_btdev ( fd , btdev ); 258  Œue ; 259 } } 261  btho¡ * $hc›mu_þ›Á_g‘_ho¡ ( hc›mu *hciemu) 263 ià(! hc›mu ) 264  NULL ; 266  hc›mu -> ho¡_¡ack ; 267 } } 269  boÞ $ü—‹_¡ack ( hc›mu *hciemu) 271  btdev *btdev; 272  btho¡ *bthost; 273  sv [2]; 275 btdev = `btdev_ü—‹ ( hc›mu -> btdev_ty³ , 0x00); 276 ià(! btdev ) 277  çl£ ; 279 btho¡ = `btho¡_ü—‹ (); 280 ià(! btho¡ ) { 281 `btdev_de¡roy ( btdev ); 282  çl£ ; 285 `btdev_£t_commªd_hªdËr ( btdev , þ›Á_commªd_ÿÎback , hc›mu ); 287 ià( `sock‘·œ ( AF_UNIX , SOCK_SEQPACKET | SOCK_NONBLOCK | SOCK_CLOEXEC , 288 0, sv ) < 0) { 289 `btho¡_de¡roy ( btho¡ ); 290 `btdev_de¡roy ( btdev ); 291  çl£ ; 294 hc›mu -> þ›Á_dev = btdev ; 295 hc›mu -> ho¡_¡ack = btho¡ ; 297 hc›mu -> þ›Á_sourû = `ü—‹_sourû_btdev ( sv [0], btdev ); 298 hc›mu -> ho¡_sourû = `ü—‹_sourû_btho¡ ( sv [1], btho¡ ); 300  Œue ; 301 } } 303  gboÞ—n $¡¬t_¡ack ( gpoš‹r u£r_d©a ) 305  hc›mu *hc›mu = u£r_d©a ; 307 `btho¡_¡¬t ( hc›mu -> ho¡_¡ack ); 309  FALSE ; 310 } } 312  hc›mu * $hc›mu_Ãw ( hc›mu_ty³ ty³ ) 314  hc›mu *hciemu; 316 hc›mu = `Ãw0 (hciemu, 1); 317 ià(! hc›mu ) 318  NULL ; 320  ty³ ) { 321  HCIEMU_TYPE_BREDRLE : 322 hc›mu -> btdev_ty³ = BTDEV_TYPE_BREDRLE ; 324  HCIEMU_TYPE_BREDR : 325 hc›mu -> btdev_ty³ = BTDEV_TYPE_BREDR ; 327  HCIEMU_TYPE_LE : 328 hc›mu -> btdev_ty³ = BTDEV_TYPE_LE ; 331  NULL ; 334 hc›mu -> po¡_commªd_hooks = `queue_Ãw (); 335 ià(! hc›mu -> po¡_commªd_hooks ) { 336 `ä“ ( hc›mu ); 337  NULL ; 340 ià(! `ü—‹_vhci ( hc›mu )) { 341 `queue_de¡roy ( hc›mu -> po¡_commªd_hooks , NULL ); 342 `ä“ ( hc›mu ); 343  NULL ; 346 ià(! `ü—‹_¡ack ( hc›mu )) { 347 `g_sourû_»move ( hc›mu -> ma¡”_sourû ); 348 `btdev_de¡roy ( hc›mu -> ma¡”_dev ); 349 `queue_de¡roy ( hc›mu -> po¡_commªd_hooks , NULL ); 350 `ä“ ( hc›mu ); 351  NULL ; 354 `g_idË_add ( ¡¬t_¡ack , hc›mu ); 356  `hc›mu_»f ( hc›mu ); 357 } } 359  hc›mu * $hc›mu_»f ( hc›mu *hciemu) 361 ià(! hc›mu ) 362  NULL ; 364 `__sync_ãtch_ªd_add (& hc›mu -> »f_couÁ , 1); 366  hc›mu ; 367 } } 369  $hc›mu_uÄef ( hc›mu *hciemu) 371 ià(! hc›mu ) 374 ià( `__sync_sub_ªd_ãtch (& hc›mu -> »f_couÁ , 1)) 377 `queue_de¡roy ( hc›mu -> po¡_commªd_hooks , de¡roy_commªd_hook ); 379 `g_sourû_»move ( hc›mu -> ho¡_sourû ); 380 `g_sourû_»move ( hc›mu -> þ›Á_sourû ); 381 `g_sourû_»move ( hc›mu -> ma¡”_sourû ); 383 `btho¡_de¡roy ( hc›mu -> ho¡_¡ack ); 384 `btdev_de¡roy ( hc›mu -> þ›Á_dev ); 385 `btdev_de¡roy ( hc›mu -> ma¡”_dev ); 387 `ä“ ( hc›mu ); 388 } } 390 cÚ¡ * $hc›mu_g‘_add»ss ( hc›mu *hciemu) 392 cÚ¡ ušt8_t * addr ; 394 ià(! hc›mu || !hc›mu-> ma¡”_dev ) 395  NULL ; 397 addr = `btdev_g‘_bdaddr ( hc›mu -> ma¡”_dev ); 398 `¥rštf ( hc›mu -> bdaddr_¡r , "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", 399 addr [5],‡ddr[4],‡ddr[3],‡ddr[2],‡ddr[1],‡ddr[0]); 400  hc›mu -> bdaddr_¡r ; 401 } } 403 ušt8_t * $hc›mu_g‘_ã©u»s ( hc›mu *hciemu) 405 ià(! hc›mu || !hc›mu-> ma¡”_dev ) 406  NULL ; 408  `btdev_g‘_ã©u»s ( hc›mu -> ma¡”_dev ); 409 } } 411 cÚ¡ ušt8_t * $hc›mu_g‘_ma¡”_bdaddr ( hc›mu *hciemu) 413 ià(! hc›mu || !hc›mu-> ma¡”_dev ) 414  NULL ; 416  `btdev_g‘_bdaddr ( hc›mu -> ma¡”_dev ); 417 } } 419 cÚ¡ ušt8_t * $hc›mu_g‘_þ›Á_bdaddr ( hc›mu *hciemu) 421 ià(! hc›mu || !hc›mu-> þ›Á_dev ) 422  NULL ; 424  `btdev_g‘_bdaddr ( hc›mu -> þ›Á_dev ); 425 } } 427 boÞ $hc›mu_add_ma¡”_po¡_commªd_hook ( hc›mu *hciemu, 428 hc›mu_commªd_func_t funùiÚ , * u£r_d©a ) 430  hc›mu_commªd_hook * hook ; 432 ià(! hc›mu ) 433  çl£ ; 435 hook = `Ãw0 ( hc›mu_commªd_hook , 1); 436 ià(! hook ) 437  çl£ ; 439 hook -> funùiÚ = function; 440 hook -> u£r_d©a = user_data; 442 ià(! `queue_push_ž ( hc›mu -> po¡_commªd_hooks , hook )) { 443 `ä“ ( hook ); 444  çl£ ; 447  Œue ; 448 } } 450  $hc›mu_add_hook ( hc›mu *hc›mu, hc›mu_hook_ty³ ty³ , 451 ušt16_t Ýcode , hc›mu_hook_func_t funùiÚ , 452 * u£r_d©a ) 454 btdev_hook_ty³ hook_ty³ ; 456 ià(! hc›mu ) 459  ty³ ) { 460  HCIEMU_HOOK_PRE_CMD : 461 hook_ty³ = BTDEV_HOOK_PRE_CMD ; 463  HCIEMU_HOOK_POST_CMD : 464 hook_ty³ = BTDEV_HOOK_POST_CMD ; 466  HCIEMU_HOOK_PRE_EVT : 467 hook_ty³ = BTDEV_HOOK_PRE_EVT ; 469  HCIEMU_HOOK_POST_EVT : 470 hook_ty³ = BTDEV_HOOK_POST_EVT ; 476  `btdev_add_hook ( hc›mu -> ma¡”_dev , hook_ty³ , Ýcode , funùiÚ , 477 u£r_d©a ); 478 } } 480 boÞ $hc›mu_d–_hook ( hc›mu *hc›mu, hc›mu_hook_ty³ ty³ , 481 ušt16_t Ýcode ) 483 btdev_hook_ty³ hook_ty³ ; 485 ià(! hc›mu ) 486  çl£ ; 488  ty³ ) { 489  HCIEMU_HOOK_PRE_CMD : 490 hook_ty³ = BTDEV_HOOK_PRE_CMD ; 492  HCIEMU_HOOK_POST_CMD : 493 hook_ty³ = BTDEV_HOOK_POST_CMD ; 495  HCIEMU_HOOK_PRE_EVT : 496 hook_ty³ = BTDEV_HOOK_PRE_EVT ; 498  HCIEMU_HOOK_POST_EVT : 499 hook_ty³ = BTDEV_HOOK_POST_EVT ; 502  çl£ ; 505  `btdev_d–_hook ( hc›mu -> ma¡”_dev , hook_ty³ , Ýcode ); 506 } } @emulator/hciemu.h 24  ~<¡dboÞ.h > 25  ~<¡dšt.h > 27  ghc›mu ; 29 ehc›mu_ty³ { 30 mHCIEMU_TYPE_BREDRLE , 31 mHCIEMU_TYPE_BREDR , 32 mHCIEMU_TYPE_LE , 35 ehc›mu_hook_ty³ { 36 mHCIEMU_HOOK_PRE_CMD , 37 mHCIEMU_HOOK_POST_CMD , 38 mHCIEMU_HOOK_PRE_EVT , 39 mHCIEMU_HOOK_POST_EVT , 42  hc›mu * hc›mu_Ãw ( hc›mu_ty³ ty³ ); 44  hc›mu * hc›mu_»f (hciemu *hciemu); 45  hc›mu_uÄef ( hc›mu *hciemu); 47  btho¡ * hc›mu_þ›Á_g‘_ho¡ ( hc›mu *hciemu); 49 cÚ¡ * hc›mu_g‘_add»ss ( hc›mu *hciemu); 50 ušt8_t * hc›mu_g‘_ã©u»s ( hc›mu *hciemu); 52 cÚ¡ ušt8_t * hc›mu_g‘_ma¡”_bdaddr ( hc›mu *hciemu); 53 cÚ¡ ušt8_t * hc›mu_g‘_þ›Á_bdaddr ( hc›mu *hciemu); 55 (* thc›mu_commªd_func_t )( tušt16_t tÝcode , cÚ¡ * td©a , 56 tušt8_t tËn , * tu£r_d©a ); 58  $boÞ (* thc›mu_hook_func_t )(cÚ¡ * td©a , tušt16_t tËn , 59 * tu£r_d©a ); 61 boÞ `hc›mu_add_ma¡”_po¡_commªd_hook ( hc›mu *hciemu, 62 hc›mu_commªd_func_t funùiÚ , * u£r_d©a ); 64  `hc›mu_add_hook ( hc›mu *hc›mu, hc›mu_hook_ty³ ty³ , 65 ušt16_t Ýcode , hc›mu_hook_func_t funùiÚ , 66 * u£r_d©a ); 68 boÞ `hc›mu_d–_hook ( hc›mu *hc›mu, hc›mu_hook_ty³ ty³ , 69 ušt16_t Ýcode ); @emulator/hfp.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~<¡dlib.h > 33  ~ 34  ~ 36  ~"mÚ™Ü/mašloÝ.h " 37  ~"¤c/sh¬ed/hå.h " 39  $hå_debug (cÚ¡ * ¡r , * u£r_d©a ) 41 cÚ¡ * ´efix = u£r_d©a ; 43 `´štf ("%s%s\n", ´efix , ¡r ); 44 } } 46  $commªd_hªdËr (cÚ¡ * commªd , * u£r_d©a ) 48  hå_gw * hå = u£r_d©a ; 50 `´štf ("Commªd: %s\n", commªd ); 52 `hå_gw_£nd_»suÉ ( hå , HFP_RESULT_ERROR ); 53 } } 55  boÞ $Ý’_cÚÃùiÚ () 57 cÚ¡  SOCKET_PATH [] = "\0hfp-headset"; 58  hå_gw * hå ; 59  sockaddr_un addr ; 60  fd ; 62 fd = `sock‘ ( PF_LOCAL , SOCK_STREAM | SOCK_CLOEXEC , 0); 63 ià( fd < 0) { 64 `³¼Ü ("Failedo create Unix socket"); 65  çl£ ; 68 `mem£t (& addr , 0, (addr)); 69 addr . sun_çmžy = AF_UNIX ; 70 `memýy ( addr . sun_·th , SOCKET_PATH , (SOCKET_PATH)); 72 ià( `cÚÃù ( fd , ( sockaddr *è& addr , (addr)) < 0) { 73 `³¼Ü ("Failedo connect Unix socket"); 74 `þo£ ( fd ); 75  çl£ ; 78 hå = `hå_gw_Ãw ( fd ); 79 ià(! hå ) { 80 `þo£ ( fd ); 81  çl£ ; 84 `hå_gw_£t_þo£_Ú_uÄef ( hå , Œue ); 86 `hå_gw_£t_debug ( hå , hå_debug , "HFP: ", NULL ); 88 `hå_gw_£t_commªd_hªdËr ( hå , commªd_hªdËr , hå, NULL ); 90  Œue ; 91 } } 93  $sigÇl_ÿÎback ( signum , * u£r_d©a ) 95  signum ) { 96  SIGINT : 97  SIGTERM : 98 `mašloÝ_qu™ (); 101 } } 103  $maš ( ¬gc , * ¬gv []) 105 sig£t_t mask ; 107 `mašloÝ_š™ (); 109 `sigem±y£t (& mask ); 110 `sigadd£t (& mask , SIGINT ); 111 `sigadd£t (& mask , SIGTERM ); 113 `mašloÝ_£t_sigÇl (& mask , sigÇl_ÿÎback , NULL , NULL); 115 ià(! `Ý’_cÚÃùiÚ ()) 116  EXIT_FAILURE ; 118  `mašloÝ_run (); 119 } } @emulator/le.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~ 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 33  ~ 34  ~ 36  ~ 37  ~ 39  ~"¤c/sh¬ed/utž.h " 40  ~"¤c/sh¬ed/üy±o.h " 41  ~"¤c/sh¬ed/ecc.h " 42  ~"mÚ™Ü/mašloÝ.h " 43  ~"mÚ™Ü/bt.h " 45  ~"phy.h " 46  ~"Ë.h " 48  #WHITE_LIST_SIZE 16 ) 49  #RESOLV_LIST_SIZE 16 ) 50  #SCAN_CACHE_SIZE 64 ) 52  #DEFAULT_TX_LEN 0x001b ) 53  #DEFAULT_TX_TIME 0x0148 ) 54  #MAX_TX_LEN 0x00fb ) 55  #MAX_TX_TIME 0x0848 ) 56  #MAX_RX_LEN 0x00fb ) 57  #MAX_RX_TIME 0x0848 ) 59  sbt_³” { 60 ušt8_t maddr_ty³ ; 61 ušt8_t maddr [6]; 64  sbt_Ë { 65 vÞ©ž m»f_couÁ ; 66  mvhci_fd ; 67  bt_phy * mphy ; 68  bt_üy±o * müy±o ; 69  madv_timeout_id ; 71 ušt8_t mev’t_mask [16]; 72 ušt16_t mmªuçùu»r ; 73 ušt8_t mcommªds [64]; 74 ušt8_t mã©u»s [8]; 75 ušt8_t mbdaddr [6]; 77 ušt8_t mË_ev’t_mask [8]; 78 ušt16_t mË_mtu ; 79 ušt8_t mË_max_pkt ; 80 ušt8_t mË_ã©u»s [8]; 81 ušt8_t mË_¿ndom_addr [6]; 82 ušt16_t mË_adv_mš_š‹rv® ; 83 ušt16_t mË_adv_max_š‹rv® ; 84 ušt8_t mË_adv_ty³ ; 85 ušt8_t mË_adv_own_addr_ty³ ; 86 ušt8_t mË_adv_dœeù_addr_ty³ ; 87 ušt8_t mË_adv_dœeù_addr [6]; 88 ušt8_t mË_adv_chªÃl_m­ ; 89 ušt8_t mË_adv_fž‹r_pÞicy ; 90 št8_t mË_adv_tx_pow” ; 91 ušt8_t mË_adv_d©a_Ën ; 92 ušt8_t mË_adv_d©a [31]; 93 ušt8_t mË_sÿn_r¥_d©a_Ën ; 94 ušt8_t mË_sÿn_r¥_d©a [31]; 95 ušt8_t mË_adv_’abË ; 96 ušt8_t mË_sÿn_ty³ ; 97 ušt16_t mË_sÿn_š‹rv® ; 98 ušt16_t mË_sÿn_wšdow ; 99 ušt8_t mË_sÿn_own_addr_ty³ ; 100 ušt8_t mË_sÿn_fž‹r_pÞicy ; 101 ušt8_t mË_sÿn_’abË ; 102 ušt8_t mË_sÿn_fž‹r_dup ; 104 ušt8_t mË_cÚn_³”_addr_ty³ ; 105 ušt8_t mË_cÚn_³”_addr [6]; 106 ušt8_t mË_cÚn_own_addr_ty³ ; 107 ušt8_t mË_cÚn_’abË ; 109 ušt8_t mË_wh™e_li¡_size ; 110 ušt8_t mË_wh™e_li¡ [ WHITE_LIST_SIZE ][7]; 111 ušt8_t mË_¡©es [8]; 113 ušt16_t mË_deçuÉ_tx_Ën ; 114 ušt16_t mË_deçuÉ_tx_time ; 115 ušt8_t mË_loÿl_sk256 [32]; 116 ušt8_t mË_»sÞv_li¡ [ RESOLV_LIST_SIZE ][39]; 117 ušt8_t mË_»sÞv_li¡_size ; 118 ušt8_t mË_»sÞv_’abË ; 119 ušt16_t mË_»sÞv_timeout ; 121  bt_³” msÿn_ÿche [ SCAN_CACHE_SIZE ]; 122 ušt8_t msÿn_ÿche_couÁ ; 125  boÞ $is_š_wh™e_li¡ ( bt_Ë * hci , ušt8_t addr_ty³ , 126 cÚ¡ ušt8_t addr [6]) 128  i ; 130  i = 0; i < hci -> Ë_wh™e_li¡_size ; i++) { 131 ià( hci -> Ë_wh™e_li¡ [ i ][0] =ð addr_ty³ && 132 ! `memcmp (& hci -> Ë_wh™e_li¡ [ i ][1], addr , 6)) 133  Œue ; 136  çl£ ; 137 } } 139  $þ—r_wh™e_li¡ ( bt_Ë * hci ) 141  i ; 143  i = 0; i < hci -> Ë_wh™e_li¡_size ; i++) { 144 hci -> Ë_wh™e_li¡ [ i ][0] = 0xff; 145 `mem£t (& hci -> Ë_wh™e_li¡ [ i ][1], 0, 6); 147 } } 149  $»sÞve_³”_addr ( bt_Ë * hci , ušt8_t ³”_addr_ty³ , 150 cÚ¡ ušt8_t ³”_addr [6], 151 ušt8_t * addr_ty³ , ušt8_ˆ addr [6]) 153  i ; 155 ià(! hci -> Ë_»sÞv_’abË ) 156  dÚe ; 158 ià( ³”_addr_ty³ != 0x01) 159  dÚe ; 161 ià(( ³”_addr [5] & 0xc0) != 0x40) 162  dÚe ; 164  i = 0; i < hci -> Ë_»sÞv_li¡_size ; i++) { 165 ušt8_t loÿl_hash [3]; 167 ià( hci -> Ë_»sÞv_li¡ [ i ][0] == 0xff) 170 `bt_üy±o_ah ( hci -> üy±o , &hci-> Ë_»sÞv_li¡ [ i ][7], 171 ³”_addr + 3, loÿl_hash ); 173 ià(! `memcmp ( ³”_addr , loÿl_hash , 3)) { 174  hci -> Ë_»sÞv_li¡ [ i ][0]) { 176 * addr_ty³ = 0x02; 179 * addr_ty³ = 0x03; 184 `memýy ( addr , & hci -> Ë_»sÞv_li¡ [ i ][1], 6); 189 dÚe : 190 * addr_ty³ = ³”_addr_ty³ ; 191 `memýy ( addr , ³”_addr , 6); 192 } } 194  $þ—r_»sÞv_li¡ ( bt_Ë * hci ) 196  i ; 198  i = 0; i < hci -> Ë_»sÞv_li¡_size ; i++) { 199 hci -> Ë_»sÞv_li¡ [ i ][0] = 0xff; 200 `mem£t (& hci -> Ë_»sÞv_li¡ [ i ][1], 0, 38); 202 } } 204  $»£t_deçuÉs ( bt_Ë * hci ) 206 `mem£t ( hci -> ev’t_mask , 0, (hci->event_mask)); 207 hci -> ev’t_mask [0] |= 0x10; 208 hci -> ev’t_mask [0] |= 0x80; 209 hci -> ev’t_mask [1] |= 0x08; 210 hci -> ev’t_mask [1] |= 0x20; 211 hci -> ev’t_mask [1] |= 0x40; 212 hci -> ev’t_mask [1] |= 0x80; 213 hci -> ev’t_mask [2] |= 0x04; 214 hci -> ev’t_mask [3] |= 0x02; 215 hci -> ev’t_mask [5] |= 0x80; 218 hci -> mªuçùu»r = 0x003f; 220 `mem£t ( hci -> commªds , 0, (hci->commands)); 221 hci -> commªds [0] |= 0x20; 223 hci -> commªds [5] |= 0x40; 224 hci -> commªds [5] |= 0x80; 226 hci -> commªds [14] |= 0x08; 227 hci -> commªds [14] |= 0x10; 228 hci -> commªds [14] |= 0x20; 229 hci -> commªds [14] |= 0x80; 230 hci -> commªds [15] |= 0x02; 232 hci -> commªds [22] |= 0x04; 233 hci -> commªds [25] |= 0x01; 234 hci -> commªds [25] |= 0x02; 235 hci -> commªds [25] |= 0x04; 236 hci -> commªds [25] |= 0x10; 237 hci -> commªds [25] |= 0x20; 238 hci -> commªds [25] |= 0x40; 239 hci -> commªds [25] |= 0x80; 240 hci -> commªds [26] |= 0x01; 241 hci -> commªds [26] |= 0x02; 242 hci -> commªds [26] |= 0x04; 243 hci -> commªds [26] |= 0x08; 244 hci -> commªds [26] |= 0x10; 245 hci -> commªds [26] |= 0x20; 246 hci -> commªds [26] |= 0x40; 247 hci -> commªds [26] |= 0x80; 248 hci -> commªds [27] |= 0x01; 249 hci -> commªds [27] |= 0x02; 254 hci -> commªds [27] |= 0x40; 255 hci -> commªds [27] |= 0x80; 259 hci -> commªds [28] |= 0x08; 265 hci -> commªds [33] |= 0x40; 266 hci -> commªds [33] |= 0x80; 267 hci -> commªds [34] |= 0x01; 268 hci -> commªds [34] |= 0x02; 269 hci -> commªds [34] |= 0x04; 270 hci -> commªds [34] |= 0x08; 271 hci -> commªds [34] |= 0x10; 272 hci -> commªds [34] |= 0x20; 273 hci -> commªds [34] |= 0x40; 274 hci -> commªds [34] |= 0x80; 275 hci -> commªds [35] |= 0x01; 276 hci -> commªds [35] |= 0x02; 277 hci -> commªds [35] |= 0x04; 278 hci -> commªds [35] |= 0x08; 280 `mem£t ( hci -> ã©u»s , 0, (hci->features)); 281 hci -> ã©u»s [4] |= 0x20; 282 hci -> ã©u»s [4] |= 0x40; 284 `mem£t ( hci -> bdaddr , 0, (hci->bdaddr)); 286 `mem£t ( hci -> Ë_ev’t_mask , 0, (hci->le_event_mask)); 287 hci -> Ë_ev’t_mask [0] |= 0x01; 288 hci -> Ë_ev’t_mask [0] |= 0x02; 289 hci -> Ë_ev’t_mask [0] |= 0x04; 290 hci -> Ë_ev’t_mask [0] |= 0x08; 291 hci -> Ë_ev’t_mask [0] |= 0x10; 299 hci -> Ë_mtu = 64; 300 hci -> Ë_max_pkt = 1; 302 `mem£t ( hci -> Ë_ã©u»s , 0, (hci->le_features)); 303 hci -> Ë_ã©u»s [0] |= 0x01; 307 hci -> Ë_ã©u»s [0] |= 0x10; 308 hci -> Ë_ã©u»s [0] |= 0x20; 309 hci -> Ë_ã©u»s [0] |= 0x40; 310 hci -> Ë_ã©u»s [0] |= 0x80; 312 `mem£t ( hci -> Ë_¿ndom_addr , 0, (hci->le_random_addr)); 314 hci -> Ë_adv_mš_š‹rv® = 0x0800; 315 hci -> Ë_adv_max_š‹rv® = 0x0800; 316 hci -> Ë_adv_ty³ = 0x00; 317 hci -> Ë_adv_own_addr_ty³ = 0x00; 318 hci -> Ë_adv_dœeù_addr_ty³ = 0x00; 319 `mem£t ( hci -> Ë_adv_dœeù_addr , 0, 6); 320 hci -> Ë_adv_chªÃl_m­ = 0x07; 321 hci -> Ë_adv_fž‹r_pÞicy = 0x00; 323 hci -> Ë_adv_tx_pow” = 0; 325 `mem£t ( hci -> Ë_adv_d©a , 0, (hci->le_adv_data)); 326 hci -> Ë_adv_d©a_Ën = 0; 328 `mem£t ( hci -> Ë_sÿn_r¥_d©a , 0, (hci->le_scan_rsp_data)); 329 hci -> Ë_sÿn_r¥_d©a_Ën = 0; 331 hci -> Ë_adv_’abË = 0x00; 333 hci -> Ë_sÿn_ty³ = 0x00; 334 hci -> Ë_sÿn_š‹rv® = 0x0010; 335 hci -> Ë_sÿn_wšdow = 0x0010; 336 hci -> Ë_sÿn_own_addr_ty³ = 0x00; 337 hci -> Ë_sÿn_fž‹r_pÞicy = 0x00; 338 hci -> Ë_sÿn_’abË = 0x00; 339 hci -> Ë_sÿn_fž‹r_dup = 0x00; 341 hci -> Ë_cÚn_’abË = 0x00; 343 hci -> Ë_wh™e_li¡_size = WHITE_LIST_SIZE ; 344 `þ—r_wh™e_li¡ ( hci ); 346 `mem£t ( hci -> Ë_¡©es , 0, (hci->le_states)); 347 hci -> Ë_¡©es [0] |= 0x01; 348 hci -> Ë_¡©es [0] |= 0x02; 349 hci -> Ë_¡©es [0] |= 0x04; 350 hci -> Ë_¡©es [0] |= 0x08; 351 hci -> Ë_¡©es [0] |= 0x10; 352 hci -> Ë_¡©es [0] |= 0x20; 353 hci -> Ë_¡©es [0] |= 0x40; 354 hci -> Ë_¡©es [0] |= 0x80; 355 hci -> Ë_¡©es [1] |= 0x01; 358 hci -> Ë_deçuÉ_tx_Ën = DEFAULT_TX_LEN ; 359 hci -> Ë_deçuÉ_tx_time = DEFAULT_TX_TIME ; 361 `mem£t ( hci -> Ë_loÿl_sk256 , 0, (hci->le_local_sk256)); 363 hci -> Ë_»sÞv_li¡_size = RESOLV_LIST_SIZE ; 364 `þ—r_»sÞv_li¡ ( hci ); 365 hci -> Ë_»sÞv_’abË = 0x00; 366 hci -> Ë_»sÞv_timeout = 0x0384; 367 } } 369  $þ—r_sÿn_ÿche ( bt_Ë * hci ) 371 `mem£t ( hci -> sÿn_ÿche , 0, (hci->scan_cache)); 372 hci -> sÿn_ÿche_couÁ = 0; 373 } } 375  boÞ $add_to_sÿn_ÿche ( bt_Ë * hci , ušt8_t addr_ty³ , 376 cÚ¡ ušt8_t addr [6]) 378  i ; 380  i = 0; i < hci -> sÿn_ÿche_couÁ ; i++) { 381 ià( hci -> sÿn_ÿche [ i ]. addr_ty³ ==‡ddr_type && 382 ! `memcmp ( hci -> sÿn_ÿche [ i ]. addr ,‡ddr, 6)) 383  çl£ ; 386 ià( hci -> sÿn_ÿche_couÁ >ð SCAN_CACHE_SIZE ) 387  Œue ; 389 hci -> sÿn_ÿche [hci-> sÿn_ÿche_couÁ ]. addr_ty³ =‡ddr_type; 390 `memýy ( hci -> sÿn_ÿche [hci-> sÿn_ÿche_couÁ ]. addr ,‡ddr, 6); 391 hci -> sÿn_ÿche_couÁ ++; 393  Œue ; 394 } } 396  $£nd_ev’t ( bt_Ë * hci , ušt8_t ev’t , 397 * d©a , ušt8_t size ) 399 ušt8_t ty³ = BT_H4_EVT_PKT ; 400  bt_hci_evt_hdr hdr ; 401  iovec iov [3]; 402  iovút ; 404 hdr . evt = ev’t ; 405 hdr . ¶’ = size ; 407 iov [0]. iov_ba£ = & ty³ ; 408 iov [0]. iov_Ën = 1; 409 iov [1]. iov_ba£ = & hdr ; 410 iov [1]. iov_Ën = ( hdr ); 412 ià( size > 0) { 413 iov [2]. iov_ba£ = d©a ; 414 iov [2]. iov_Ën = size ; 415 iovút = 3; 417 iovút = 2; 419 ià( `wr™ev ( hci -> vhci_fd , iov , iovút ) < 0) 420 `årštf ( ¡d”r , "Writeo /dev/vhci failed (%m)\n"); 421 } } 423  $£nd_adv_pkt ( bt_Ë * hci ) 425  bt_phy_pkt_adv pkt ; 427 `mem£t (& pkt , 0, (pkt)); 428 pkt . pdu_ty³ = hci -> Ë_adv_ty³ ; 429 pkt . tx_addr_ty³ = hci -> Ë_adv_own_addr_ty³ ; 430  hci -> Ë_adv_own_addr_ty³ ) { 433 `memýy ( pkt . tx_addr , hci -> bdaddr , 6); 437 `memýy ( pkt . tx_addr , hci -> Ë_¿ndom_addr , 6); 440 pkt . rx_addr_ty³ = hci -> Ë_adv_dœeù_addr_ty³ ; 441 `memýy ( pkt . rx_addr , hci -> Ë_adv_dœeù_addr , 6); 442 pkt . adv_d©a_Ën = hci -> Ë_adv_d©a_Ën ; 443 pkt . sÿn_r¥_Ën = hci -> Ë_sÿn_r¥_d©a_Ën ; 445 `bt_phy_£nd_veùÜ ( hci -> phy , BT_PHY_PKT_ADV , & pkt , (pkt), 446 hci -> Ë_adv_d©a , pkt . adv_d©a_Ën , 447 hci -> Ë_sÿn_r¥_d©a , pkt . sÿn_r¥_Ën ); 448 } } 450  $adv_timeout_ÿÎback ( id , * u£r_d©a ) 452  bt_Ë * hci = u£r_d©a ; 453  mš_m£c , max_m£c ; 455 `£nd_adv_pkt ( hci ); 457 mš_m£c = ( hci -> Ë_adv_mš_š‹rv® * 625) / 1000; 458 max_m£c = ( hci -> Ë_adv_max_š‹rv® * 625) / 1000; 460 ià( `mašloÝ_modify_timeout ( id , ( mš_m£c + max_m£c ) / 2) < 0) { 461 `årštf ( ¡d”r , "Setting‡dvertisingimeout failed\n"); 462 hci -> Ë_adv_’abË = 0x00; 464 } } 466  boÞ $¡¬t_adv ( bt_Ë * hci ) 468  m£c ; 470 ià( hci -> adv_timeout_id >= 0) 471  çl£ ; 473 m£c = ( hci -> Ë_adv_mš_š‹rv® * 625) / 1000; 475 hci -> adv_timeout_id = `mašloÝ_add_timeout ( m£c , adv_timeout_ÿÎback , 476 hci , NULL ); 477 ià( hci -> adv_timeout_id < 0) 478  çl£ ; 480  Œue ; 481 } } 483  boÞ $¡Ý_adv ( bt_Ë * hci ) 485 ià( hci -> adv_timeout_id < 0) 486  çl£ ; 488 `mašloÝ_»move_timeout ( hci -> adv_timeout_id ); 489 hci -> adv_timeout_id = -1; 491  Œue ; 492 } } 494  $cmd_com¶‘e ( bt_Ë * hci , ušt16_t Ýcode , 495 cÚ¡ * d©a , ušt8_t Ën ) 497  bt_hci_evt_cmd_com¶‘e * cc ; 498 * pkt_d©a ; 500 pkt_d©a = `®loÿ ((* cc è+ Ën ); 501 ià(! pkt_d©a ) 504 cc = pkt_d©a ; 505 cc -> ncmd = 0x01; 506 cc -> Ýcode = `ýu_to_Ë16 (opcode); 508 ià( Ën > 0) 509 `memýy ( pkt_d©a + (* cc ), d©a , Ën ); 511 `£nd_ev’t ( hci , BT_HCI_EVT_CMD_COMPLETE , pkt_d©a , (* cc è+ Ën ); 512 } } 514  $cmd_¡©us ( bt_Ë * hci , ušt8_t ¡©us , ušt16_t Ýcode ) 516  bt_hci_evt_cmd_¡©us cs ; 518 cs . ¡©us = status; 519 cs . ncmd = 0x01; 520 cs . Ýcode = `ýu_to_Ë16 (opcode); 522 `£nd_ev’t ( hci , BT_HCI_EVT_CMD_STATUS , & cs , (cs)); 523 } } 525  $Ë_m‘a_ev’t ( bt_Ë * hci , ušt8_t ev’t , 526 * d©a , ušt8_t Ën ) 528 * pkt_d©a ; 530 ià(!( hci -> ev’t_mask [7] & 0x20)) 533 pkt_d©a = `®loÿ (1 + Ën ); 534 ià(! pkt_d©a ) 537 (( ušt8_t *è pkt_d©a )[0] = ev’t ; 539 ià( Ën > 0) 540 `memýy ( pkt_d©a + 1, d©a , Ën ); 542 `£nd_ev’t ( hci , BT_HCI_EVT_LE_META_EVENT , pkt_d©a , 1 + Ën ); 543 } } 545  $cmd_discÚÃù ( bt_Ë * hci , cÚ¡ * d©a , ušt8_t size ) 547 `cmd_¡©us ( hci , BT_HCI_ERR_UNKNOWN_CONN_ID , BT_HCI_CMD_DISCONNECT ); 548 } } 550  $cmd_£t_ev’t_mask ( bt_Ë * hci , 551 cÚ¡ * d©a , ušt8_t size ) 553 cÚ¡  bt_hci_cmd_£t_ev’t_mask * cmd = d©a ; 554 ušt8_t ¡©us ; 556 `memýy ( hci -> ev’t_mask , cmd -> mask , 8); 558 ¡©us = BT_HCI_ERR_SUCCESS ; 559 `cmd_com¶‘e ( hci , BT_HCI_CMD_SET_EVENT_MASK , & ¡©us , (status)); 560 } } 562  $cmd_»£t ( bt_Ë * hci , cÚ¡ * d©a , ušt8_t size ) 564 ušt8_t ¡©us ; 566 `¡Ý_adv ( hci ); 567 `»£t_deçuÉs ( hci ); 569 ¡©us = BT_HCI_ERR_SUCCESS ; 570 `cmd_com¶‘e ( hci , BT_HCI_CMD_RESET , & ¡©us , (status)); 571 } } 573  $cmd_£t_ev’t_mask_·ge2 ( bt_Ë * hci , 574 cÚ¡ * d©a , ušt8_t size ) 576 cÚ¡  bt_hci_cmd_£t_ev’t_mask_·ge2 * cmd = d©a ; 577 ušt8_t ¡©us ; 579 `memýy ( hci -> ev’t_mask + 8, cmd -> mask , 8); 581 ¡©us = BT_HCI_ERR_SUCCESS ; 582 `cmd_com¶‘e ( hci , BT_HCI_CMD_SET_EVENT_MASK_PAGE2 , 583 & ¡©us , (status)); 584 } } 586  $cmd_»ad_loÿl_v”siÚ ( bt_Ë * hci , 587 cÚ¡ * d©a , ušt8_t size ) 589  bt_hci_r¥_»ad_loÿl_v”siÚ r¥ ; 591 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 592 r¥ . hci_v” = 0x08; 593 r¥ . hci_»v = `ýu_to_Ë16 (0x0000); 594 r¥ . lmp_v” = 0x08; 595 r¥ . mªuçùu»r = `ýu_to_Ë16 ( hci ->manufacturer); 596 r¥ . lmp_subv” = `ýu_to_Ë16 (0x0000); 598 `cmd_com¶‘e ( hci , BT_HCI_CMD_READ_LOCAL_VERSION , & r¥ , (rsp)); 599 } } 601  $cmd_»ad_loÿl_commªds ( bt_Ë * hci , 602 cÚ¡ * d©a , ušt8_t size ) 604  bt_hci_r¥_»ad_loÿl_commªds r¥ ; 606 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 607 `memýy ( r¥ . commªds , hci ->commands, 64); 609 `cmd_com¶‘e ( hci , BT_HCI_CMD_READ_LOCAL_COMMANDS , & r¥ , (rsp)); 610 } } 612  $cmd_»ad_loÿl_ã©u»s ( bt_Ë * hci , 613 cÚ¡ * d©a , ušt8_t size ) 615  bt_hci_r¥_»ad_loÿl_ã©u»s r¥ ; 617 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 618 `memýy ( r¥ . ã©u»s , hci ->features, 8); 620 `cmd_com¶‘e ( hci , BT_HCI_CMD_READ_LOCAL_FEATURES , & r¥ , (rsp)); 621 } } 623  $cmd_»ad_bufãr_size ( bt_Ë * hci , 624 cÚ¡ * d©a , ušt8_t size ) 626  bt_hci_r¥_»ad_bufãr_size r¥ ; 628 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 629 r¥ . aþ_mtu = `ýu_to_Ë16 (0x0000); 630 r¥ . sco_mtu = 0x00; 631 r¥ . aþ_max_pkt = `ýu_to_Ë16 (0x0000); 632 r¥ . sco_max_pkt = `ýu_to_Ë16 (0x0000); 634 `cmd_com¶‘e ( hci , BT_HCI_CMD_READ_BUFFER_SIZE , & r¥ , (rsp)); 635 } } 637  $cmd_»ad_bd_addr ( bt_Ë * hci , cÚ¡ * d©a , ušt8_t size ) 639  bt_hci_r¥_»ad_bd_addr r¥ ; 641 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 642 `memýy ( r¥ . bdaddr , hci ->bdaddr, 6); 644 `cmd_com¶‘e ( hci , BT_HCI_CMD_READ_BD_ADDR , & r¥ , (rsp)); 645 } } 647  $cmd_Ë_£t_ev’t_mask ( bt_Ë * hci , 648 cÚ¡ * d©a , ušt8_t size ) 650 cÚ¡  bt_hci_cmd_Ë_£t_ev’t_mask * cmd = d©a ; 651 ušt8_t ¡©us ; 653 `memýy ( hci -> Ë_ev’t_mask , cmd -> mask , 8); 655 ¡©us = BT_HCI_ERR_SUCCESS ; 656 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_SET_EVENT_MASK , 657 & ¡©us , (status)); 658 } } 660  $cmd_Ë_»ad_bufãr_size ( bt_Ë * hci , 661 cÚ¡ * d©a , ušt8_t size ) 663  bt_hci_r¥_Ë_»ad_bufãr_size r¥ ; 665 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 666 r¥ . Ë_mtu = `ýu_to_Ë16 ( hci ->le_mtu); 667 r¥ . Ë_max_pkt = hci ->le_max_pkt; 669 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_READ_BUFFER_SIZE , & r¥ , (rsp)); 670 } } 672  $cmd_Ë_»ad_loÿl_ã©u»s ( bt_Ë * hci , 673 cÚ¡ * d©a , ušt8_t size ) 675  bt_hci_r¥_Ë_»ad_loÿl_ã©u»s r¥ ; 677 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 678 `memýy ( r¥ . ã©u»s , hci -> Ë_ã©u»s , 8); 680 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_READ_LOCAL_FEATURES , 681 & r¥ , (rsp)); 682 } } 684  $cmd_Ë_£t_¿ndom_add»ss ( bt_Ë * hci , 685 cÚ¡ * d©a , ušt8_t size ) 687 cÚ¡  bt_hci_cmd_Ë_£t_¿ndom_add»ss * cmd = d©a ; 688 ušt8_t ¡©us ; 690 `memýy ( hci -> Ë_¿ndom_addr , cmd -> addr , 6); 692 ¡©us = BT_HCI_ERR_SUCCESS ; 693 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_SET_RANDOM_ADDRESS , 694 & ¡©us , (status)); 695 } } 697  $cmd_Ë_£t_adv_·¿m‘”s ( bt_Ë * hci , 698 cÚ¡ * d©a , ušt8_t size ) 700 cÚ¡  bt_hci_cmd_Ë_£t_adv_·¿m‘”s * cmd = d©a ; 701 ušt16_t mš_š‹rv® , max_š‹rv® ; 702 ušt8_t ¡©us ; 704 ià( hci -> Ë_adv_’abË == 0x01) { 705 `cmd_¡©us ( hci , BT_HCI_ERR_COMMAND_DISALLOWED , 706 BT_HCI_CMD_LE_SET_ADV_PARAMETERS ); 710 mš_š‹rv® = `Ë16_to_ýu ( cmd ->min_interval); 711 max_š‹rv® = `Ë16_to_ýu ( cmd ->max_interval); 714  cmd -> ty³ ) { 717 ià( mš_š‹rv® < 0x0020 || min_interval > 0x4000) { 718 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 719 BT_HCI_CMD_LE_SET_ADV_PARAMETERS ); 723 ià( max_š‹rv® < 0x0020 || max_interval > 0x4000) { 724 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 725 BT_HCI_CMD_LE_SET_ADV_PARAMETERS ); 729 ià( mš_š‹rv® > max_š‹rv® ) { 730 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 731 BT_HCI_CMD_LE_SET_ADV_PARAMETERS ); 738 ià( cmd -> dœeù_addr_ty³ > 0x01) { 739 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 740 BT_HCI_CMD_LE_SET_ADV_PARAMETERS ); 748 ià( mš_š‹rv® < 0x00a0 || min_interval > 0x4000) { 749 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 750 BT_HCI_CMD_LE_SET_ADV_PARAMETERS ); 754 ià( max_š‹rv® < 0x00a0 || max_interval > 0x4000) { 755 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 756 BT_HCI_CMD_LE_SET_ADV_PARAMETERS ); 760 ià( mš_š‹rv® > max_š‹rv® ) { 761 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 762 BT_HCI_CMD_LE_SET_ADV_PARAMETERS ); 768 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 769 BT_HCI_CMD_LE_SET_ADV_PARAMETERS ); 774 ià( cmd -> own_addr_ty³ > 0x03) { 775 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 776 BT_HCI_CMD_LE_SET_ADV_PARAMETERS ); 781 ià( cmd -> chªÃl_m­ < 0x01 || cmd->channel_map > 0x07) { 782 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 783 BT_HCI_CMD_LE_SET_ADV_PARAMETERS ); 788 ià( cmd -> fž‹r_pÞicy > 0x03) { 789 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 790 BT_HCI_CMD_LE_SET_ADV_PARAMETERS ); 794 hci -> Ë_adv_mš_š‹rv® = mš_š‹rv® ; 795 hci -> Ë_adv_max_š‹rv® = max_š‹rv® ; 796 hci -> Ë_adv_ty³ = cmd -> ty³ ; 797 hci -> Ë_adv_own_addr_ty³ = cmd -> own_addr_ty³ ; 798 hci -> Ë_adv_dœeù_addr_ty³ = cmd -> dœeù_addr_ty³ ; 799 `memýy ( hci -> Ë_adv_dœeù_addr , cmd -> dœeù_addr , 6); 800 hci -> Ë_adv_chªÃl_m­ = cmd -> chªÃl_m­ ; 801 hci -> Ë_adv_fž‹r_pÞicy = cmd -> fž‹r_pÞicy ; 803 ¡©us = BT_HCI_ERR_SUCCESS ; 804 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_SET_ADV_PARAMETERS , 805 & ¡©us , (status)); 806 } } 808  $cmd_Ë_»ad_adv_tx_pow” ( bt_Ë * hci , 809 cÚ¡ * d©a , ušt8_t size ) 811  bt_hci_r¥_Ë_»ad_adv_tx_pow” r¥ ; 813 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 814 r¥ . Ëv– = hci -> Ë_adv_tx_pow” ; 816 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_READ_ADV_TX_POWER , & r¥ , (rsp)); 817 } } 819  $cmd_Ë_£t_adv_d©a ( bt_Ë * hci , 820 cÚ¡ * d©a , ušt8_t size ) 822 cÚ¡  bt_hci_cmd_Ë_£t_adv_d©a * cmd = d©a ; 823 ušt8_t ¡©us ; 826 ià( cmd -> Ën > 0x1f) { 827 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 828 BT_HCI_CMD_LE_SET_ADV_DATA ); 832 hci -> Ë_adv_d©a_Ën = cmd -> Ën ; 833 `memýy ( hci -> Ë_adv_d©a , cmd -> d©a , 31); 835 ¡©us = BT_HCI_ERR_SUCCESS ; 836 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_SET_ADV_DATA , & ¡©us , (status)); 837 } } 839  $cmd_Ë_£t_sÿn_r¥_d©a ( bt_Ë * hci , 840 cÚ¡ * d©a , ušt8_t size ) 842 cÚ¡  bt_hci_cmd_Ë_£t_sÿn_r¥_d©a * cmd = d©a ; 843 ušt8_t ¡©us ; 846 ià( cmd -> Ën > 0x1f) { 847 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 848 BT_HCI_CMD_LE_SET_SCAN_RSP_DATA ); 852 hci -> Ë_sÿn_r¥_d©a_Ën = cmd -> Ën ; 853 `memýy ( hci -> Ë_sÿn_r¥_d©a , cmd -> d©a , 31); 855 ¡©us = BT_HCI_ERR_SUCCESS ; 856 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_SET_SCAN_RSP_DATA , 857 & ¡©us , (status)); 858 } } 860  $cmd_Ë_£t_adv_’abË ( bt_Ë * hci , 861 cÚ¡ * d©a , ušt8_t size ) 863 cÚ¡  bt_hci_cmd_Ë_£t_adv_’abË * cmd = d©a ; 864 ušt8_t ¡©us ; 865 boÞ »suÉ ; 868 ià( cmd -> ’abË > 0x01) { 869 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 870 BT_HCI_CMD_LE_SET_ADV_ENABLE ); 874 ià( cmd -> ’abË =ð hci -> Ë_adv_’abË ) { 875 `cmd_¡©us ( hci , BT_HCI_ERR_COMMAND_DISALLOWED , 876 BT_HCI_CMD_LE_SET_ADV_ENABLE ); 880 ià( cmd -> ’abË == 0x01) 881 »suÉ = `¡¬t_adv ( hci ); 883 »suÉ = `¡Ý_adv ( hci ); 885 ià(! »suÉ ) { 886 `cmd_¡©us ( hci , BT_HCI_ERR_UNSPECIFIED_ERROR , 887 BT_HCI_CMD_LE_SET_ADV_ENABLE ); 891 hci -> Ë_adv_’abË = cmd -> ’abË ; 893 ¡©us = BT_HCI_ERR_SUCCESS ; 894 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_SET_ADV_ENABLE , 895 & ¡©us , (status)); 896 } } 898  $cmd_Ë_£t_sÿn_·¿m‘”s ( bt_Ë * hci , 899 cÚ¡ * d©a , ušt8_t size ) 901 cÚ¡  bt_hci_cmd_Ë_£t_sÿn_·¿m‘”s * cmd = d©a ; 902 ušt16_t š‹rv® , wšdow ; 903 ušt8_t ¡©us ; 905 ià( hci -> Ë_sÿn_’abË == 0x01) { 906 `cmd_¡©us ( hci , BT_HCI_ERR_COMMAND_DISALLOWED , 907 BT_HCI_CMD_LE_SET_SCAN_PARAMETERS ); 911 š‹rv® = `Ë16_to_ýu ( cmd ->interval); 912 wšdow = `Ë16_to_ýu ( cmd ->window); 915 ià( cmd -> ty³ > 0x01) { 916 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 917 BT_HCI_CMD_LE_SET_SCAN_PARAMETERS ); 922 ià( š‹rv® < 0x0004 || interval > 0x4000) { 923 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 924 BT_HCI_CMD_LE_SET_SCAN_PARAMETERS ); 929 ià( wšdow < 0x0004 || window > 0x4000) { 930 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 931 BT_HCI_CMD_LE_SET_SCAN_PARAMETERS ); 936 ià( wšdow > š‹rv® ) { 937 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 938 BT_HCI_CMD_LE_SET_SCAN_PARAMETERS ); 943 ià( cmd -> own_addr_ty³ > 0x03) { 944 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 945 BT_HCI_CMD_LE_SET_SCAN_PARAMETERS ); 950 ià( cmd -> fž‹r_pÞicy > 0x03) { 951 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 952 BT_HCI_CMD_LE_SET_SCAN_PARAMETERS ); 956 hci -> Ë_sÿn_ty³ = cmd -> ty³ ; 957 hci -> Ë_sÿn_š‹rv® = š‹rv® ; 958 hci -> Ë_sÿn_wšdow = wšdow ; 959 hci -> Ë_sÿn_own_addr_ty³ = cmd -> own_addr_ty³ ; 960 hci -> Ë_sÿn_fž‹r_pÞicy = cmd -> fž‹r_pÞicy ; 962 ¡©us = BT_HCI_ERR_SUCCESS ; 963 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_SET_SCAN_PARAMETERS , 964 & ¡©us , (status)); 965 } } 967  $cmd_Ë_£t_sÿn_’abË ( bt_Ë * hci , 968 cÚ¡ * d©a , ušt8_t size ) 970 cÚ¡  bt_hci_cmd_Ë_£t_sÿn_’abË * cmd = d©a ; 971 ušt8_t ¡©us ; 974 ià( cmd -> ’abË > 0x01) { 975 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 976 BT_HCI_CMD_LE_SET_SCAN_ENABLE ); 981 ià( cmd -> fž‹r_dup > 0x01) { 982 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 983 BT_HCI_CMD_LE_SET_SCAN_ENABLE ); 987 ià( cmd -> ’abË =ð hci -> Ë_sÿn_’abË ) { 988 `cmd_¡©us ( hci , BT_HCI_ERR_COMMAND_DISALLOWED , 989 BT_HCI_CMD_LE_SET_SCAN_ENABLE ); 993 `þ—r_sÿn_ÿche ( hci ); 995 hci -> Ë_sÿn_’abË = cmd -> ’abË ; 996 hci -> Ë_sÿn_fž‹r_dup = cmd -> fž‹r_dup ; 998 ¡©us = BT_HCI_ERR_SUCCESS ; 999 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_SET_SCAN_ENABLE , 1000 & ¡©us , (status)); 1001 } } 1003  $cmd_Ë_ü—‹_cÚn ( bt_Ë * hci , 1004 cÚ¡ * d©a , ušt8_t size ) 1006 cÚ¡  bt_hci_cmd_Ë_ü—‹_cÚn * cmd = d©a ; 1008 ià( hci -> Ë_cÚn_’abË == 0x01) { 1009 `cmd_¡©us ( hci , BT_HCI_ERR_COMMAND_DISALLOWED , 1010 BT_HCI_CMD_LE_CREATE_CONN ); 1015 ià( cmd -> ³”_addr_ty³ > 0x03) { 1016 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1017 BT_HCI_CMD_LE_CREATE_CONN ); 1022 ià( cmd -> own_addr_ty³ > 0x03) { 1023 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1024 BT_HCI_CMD_LE_CREATE_CONN ); 1028 hci -> Ë_cÚn_³”_addr_ty³ = cmd -> ³”_addr_ty³ ; 1029 `memýy ( hci -> Ë_cÚn_³”_addr , cmd -> ³”_addr , 6); 1030 hci -> Ë_cÚn_own_addr_ty³ = cmd -> own_addr_ty³ ; 1031 hci -> Ë_cÚn_’abË = 0x01; 1033 `cmd_¡©us ( hci , BT_HCI_ERR_SUCCESS , BT_HCI_CMD_LE_CREATE_CONN ); 1034 } } 1036  $cmd_Ë_ü—‹_cÚn_ÿnûl ( bt_Ë * hci , 1037 cÚ¡ * d©a , ušt8_t size ) 1039  bt_hci_evt_Ë_cÚn_com¶‘e evt ; 1040 ušt8_t ¡©us ; 1042 ià( hci -> Ë_cÚn_’abË == 0x00) { 1043 `cmd_¡©us ( hci , BT_HCI_ERR_COMMAND_DISALLOWED , 1044 BT_HCI_CMD_LE_CREATE_CONN_CANCEL ); 1048 hci -> Ë_cÚn_’abË = 0x00; 1050 ¡©us = BT_HCI_ERR_SUCCESS ; 1051 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_CREATE_CONN_CANCEL , 1052 & ¡©us , (status)); 1054 evt . ¡©us = BT_HCI_ERR_UNKNOWN_CONN_ID ; 1055 evt . hªdË = `ýu_to_Ë16 (0x0000); 1056 evt . rÞe = 0x00; 1057 evt . ³”_addr_ty³ = 0x00; 1058 `mem£t ( evt . ³”_addr , 0, 6); 1059 evt . š‹rv® = `ýu_to_Ë16 (0x0000); 1060 evt . Ï‹ncy = `ýu_to_Ë16 (0x0000); 1061 evt . supv_timeout = `ýu_to_Ë16 (0x0000); 1062 evt . þock_accu¿cy = 0x00; 1064 ià( hci -> Ë_ev’t_mask [0] & 0x01) 1065 `Ë_m‘a_ev’t ( hci , BT_HCI_EVT_LE_CONN_COMPLETE , 1066 & evt , (evt)); 1067 } } 1069  $cmd_Ë_»ad_wh™e_li¡_size ( bt_Ë * hci , 1070 cÚ¡ * d©a , ušt8_t size ) 1072  bt_hci_r¥_Ë_»ad_wh™e_li¡_size r¥ ; 1074 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 1075 r¥ . size = hci -> Ë_wh™e_li¡_size ; 1077 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_READ_WHITE_LIST_SIZE , 1078 & r¥ , (rsp)); 1079 } } 1081  $cmd_Ë_þ—r_wh™e_li¡ ( bt_Ë * hci , 1082 cÚ¡ * d©a , ušt8_t size ) 1084 ušt8_t ¡©us ; 1086 `þ—r_wh™e_li¡ ( hci ); 1088 ¡©us = BT_HCI_ERR_SUCCESS ; 1089 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_CLEAR_WHITE_LIST , 1090 & ¡©us , (status)); 1091 } } 1093  $cmd_Ë_add_to_wh™e_li¡ ( bt_Ë * hci , 1094 cÚ¡ * d©a , ušt8_t size ) 1096 cÚ¡  bt_hci_cmd_Ë_add_to_wh™e_li¡ * cmd = d©a ; 1097 ušt8_t ¡©us ; 1098 boÞ exi¡s = çl£ ; 1099  i , pos = -1; 1102 ià( cmd -> addr_ty³ > 0x01) { 1103 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1104 BT_HCI_CMD_LE_ADD_TO_WHITE_LIST ); 1108  i = 0; i < hci -> Ë_wh™e_li¡_size ; i++) { 1109 ià( hci -> Ë_wh™e_li¡ [ i ][0] =ð cmd -> addr_ty³ && 1110 ! `memcmp (& hci -> Ë_wh™e_li¡ [ i ][1], 1111 cmd -> addr , 6)) { 1112 exi¡s = Œue ; 1114 } ià( pos < 0 && hci -> Ë_wh™e_li¡ [ i ][0] == 0xff) 1115 pos = i ; 1118 ià( exi¡s ) { 1119 `cmd_¡©us ( hci , BT_HCI_ERR_UNSPECIFIED_ERROR , 1120 BT_HCI_CMD_LE_ADD_TO_WHITE_LIST ); 1124 ià( pos < 0) { 1125 `cmd_¡©us ( hci , BT_HCI_ERR_MEM_CAPACITY_EXCEEDED , 1126 BT_HCI_CMD_LE_ADD_TO_WHITE_LIST ); 1130 hci -> Ë_wh™e_li¡ [ pos ][0] = cmd -> addr_ty³ ; 1131 `memýy (& hci -> Ë_wh™e_li¡ [ pos ][1], cmd -> addr , 6); 1133 ¡©us = BT_HCI_ERR_SUCCESS ; 1134 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_ADD_TO_WHITE_LIST , 1135 & ¡©us , (status)); 1136 } } 1138  $cmd_Ë_»move_äom_wh™e_li¡ ( bt_Ë * hci , 1139 cÚ¡ * d©a , ušt8_t size ) 1141 cÚ¡  bt_hci_cmd_Ë_»move_äom_wh™e_li¡ * cmd = d©a ; 1142 ušt8_t ¡©us ; 1143  i , pos = -1; 1146 ià( cmd -> addr_ty³ > 0x01) { 1147 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1148 BT_HCI_CMD_LE_REMOVE_FROM_WHITE_LIST ); 1152  i = 0; i < hci -> Ë_wh™e_li¡_size ; i++) { 1153 ià( hci -> Ë_wh™e_li¡ [ i ][0] =ð cmd -> addr_ty³ && 1154 ! `memcmp (& hci -> Ë_wh™e_li¡ [ i ][1], 1155 cmd -> addr , 6)) { 1156 pos = i ; 1161 ià( pos < 0) { 1162 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1163 BT_HCI_CMD_LE_REMOVE_FROM_WHITE_LIST ); 1167 hci -> Ë_wh™e_li¡ [ pos ][0] = 0xff; 1168 `mem£t (& hci -> Ë_wh™e_li¡ [ pos ][1], 0, 6); 1170 ¡©us = BT_HCI_ERR_SUCCESS ; 1171 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_REMOVE_FROM_WHITE_LIST , 1172 & ¡©us , (status)); 1173 } } 1175  $cmd_Ë_’üy± ( bt_Ë * hci , cÚ¡ * d©a , ušt8_t size ) 1177 cÚ¡  bt_hci_cmd_Ë_’üy± * cmd = d©a ; 1178  bt_hci_r¥_Ë_’üy± r¥ ; 1180 ià(! `bt_üy±o_e ( hci -> üy±o , cmd -> key , cmd-> ¶aš‹xt , r¥ . d©a )) { 1181 `cmd_¡©us ( hci , BT_HCI_ERR_COMMAND_DISALLOWED , 1182 BT_HCI_CMD_LE_ENCRYPT ); 1186 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 1188 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_ENCRYPT , & r¥ , (rsp)); 1189 } } 1191  $cmd_Ë_¿nd ( bt_Ë * hci , cÚ¡ * d©a , ušt8_t size ) 1193  bt_hci_r¥_Ë_¿nd r¥ ; 1194 ušt8_t v®ue [8]; 1196 ià(! `bt_üy±o_¿ndom_by‹s ( hci -> üy±o , v®ue , 8)) { 1197 `cmd_¡©us ( hci , BT_HCI_ERR_COMMAND_DISALLOWED , 1198 BT_HCI_CMD_LE_RAND ); 1202 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 1203 `memýy (& r¥ . numb” , v®ue , 8); 1205 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_RAND , & r¥ , (rsp)); 1206 } } 1208  $cmd_Ë_»ad_suµÜ‹d_¡©es ( bt_Ë * hci , 1209 cÚ¡ * d©a , ušt8_t size ) 1211  bt_hci_r¥_Ë_»ad_suµÜ‹d_¡©es r¥ ; 1213 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 1214 `memýy ( r¥ . ¡©es , hci -> Ë_¡©es , 8); 1216 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_READ_SUPPORTED_STATES , 1217 & r¥ , (rsp)); 1218 } } 1220  $cmd_Ë_£t_d©a_Ëngth ( bt_Ë * hci , 1221 cÚ¡ * d©a , ušt8_t size ) 1223 cÚ¡  bt_hci_cmd_Ë_£t_d©a_Ëngth * cmd = d©a ; 1224  bt_hci_r¥_Ë_£t_d©a_Ëngth r¥ ; 1225 ušt16_t hªdË , tx_Ën , tx_time ; 1227 hªdË = `Ë16_to_ýu ( cmd ->handle); 1228 tx_Ën = `Ë16_to_ýu ( cmd ->tx_len); 1229 tx_time = `Ë16_to_ýu ( cmd ->tx_time); 1232 ià( hªdË > 0x0eff) { 1233 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1234 BT_HCI_CMD_LE_SET_DATA_LENGTH ); 1239 ià( tx_Ën < 0x001b ||x_len > 0x00fb) { 1240 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1241 BT_HCI_CMD_LE_SET_DATA_LENGTH ); 1246 ià( tx_time < 0x0148 ||x_time > 0x0848) { 1247 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1248 BT_HCI_CMD_LE_SET_DATA_LENGTH ); 1253 ià( tx_Ën > MAX_TX_LEN || tx_time > MAX_TX_TIME ) { 1254 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1255 BT_HCI_CMD_LE_SET_DATA_LENGTH ); 1259 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 1260 r¥ . hªdË = `ýu_to_Ë16 (handle); 1262 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_SET_DATA_LENGTH , & r¥ , (rsp)); 1263 } } 1265  $cmd_Ë_»ad_deçuÉ_d©a_Ëngth ( bt_Ë * hci , 1266 cÚ¡ * d©a , ušt8_t size ) 1268  bt_hci_r¥_Ë_»ad_deçuÉ_d©a_Ëngth r¥ ; 1270 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 1271 r¥ . tx_Ën = `ýu_to_Ë16 ( hci -> Ë_deçuÉ_tx_Ën ); 1272 r¥ . tx_time = `ýu_to_Ë16 ( hci -> Ë_deçuÉ_tx_time ); 1274 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_READ_DEFAULT_DATA_LENGTH , 1275 & r¥ , (rsp)); 1276 } } 1278  $cmd_Ë_wr™e_deçuÉ_d©a_Ëngth ( bt_Ë * hci , 1279 cÚ¡ * d©a , ušt8_t size ) 1281 cÚ¡  bt_hci_cmd_Ë_wr™e_deçuÉ_d©a_Ëngth * cmd = d©a ; 1282 ušt16_t tx_Ën , tx_time ; 1283 ušt8_t ¡©us ; 1285 tx_Ën = `Ë16_to_ýu ( cmd ->tx_len); 1286 tx_time = `Ë16_to_ýu ( cmd ->tx_time); 1289 ià( tx_Ën < 0x001b ||x_len > 0x00fb) { 1290 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1291 BT_HCI_CMD_LE_WRITE_DEFAULT_DATA_LENGTH ); 1296 ià( tx_time < 0x0148 ||x_time > 0x0848) { 1297 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1298 BT_HCI_CMD_LE_WRITE_DEFAULT_DATA_LENGTH ); 1303 ià( tx_Ën > MAX_TX_LEN || tx_time > MAX_TX_TIME ) { 1304 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1305 BT_HCI_CMD_LE_WRITE_DEFAULT_DATA_LENGTH ); 1309 hci -> Ë_deçuÉ_tx_Ën = tx_Ën ; 1310 hci -> Ë_deçuÉ_tx_time = tx_time ; 1312 ¡©us = BT_HCI_ERR_SUCCESS ; 1313 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_WRITE_DEFAULT_DATA_LENGTH , 1314 & ¡©us , (status)); 1315 } } 1317  $cmd_Ë_»ad_loÿl_pk256 ( bt_Ë * hci , 1318 cÚ¡ * d©a , ušt8_t size ) 1320  bt_hci_evt_Ë_»ad_loÿl_pk256_com¶‘e evt ; 1322 `cmd_¡©us ( hci , BT_HCI_ERR_SUCCESS , BT_HCI_CMD_LE_READ_LOCAL_PK256 ); 1324 evt . ¡©us = BT_HCI_ERR_SUCCESS ; 1325 `ecc_make_key ( evt . loÿl_pk256 , hci -> Ë_loÿl_sk256 ); 1327 ià( hci -> Ë_ev’t_mask [0] & 0x80) 1328 `Ë_m‘a_ev’t ( hci , BT_HCI_EVT_LE_READ_LOCAL_PK256_COMPLETE , 1329 & evt , (evt)); 1330 } } 1332  $cmd_Ë_g’”©e_dhkey ( bt_Ë * hci , 1333 cÚ¡ * d©a , ušt8_t size ) 1335 cÚ¡  bt_hci_cmd_Ë_g’”©e_dhkey * cmd = d©a ; 1336  bt_hci_evt_Ë_g’”©e_dhkey_com¶‘e evt ; 1338 `cmd_¡©us ( hci , BT_HCI_ERR_SUCCESS , BT_HCI_CMD_LE_GENERATE_DHKEY ); 1340 evt . ¡©us = BT_HCI_ERR_SUCCESS ; 1341 `ecdh_sh¬ed_£ü‘ ( cmd -> »mÙe_pk256 , hci -> Ë_loÿl_sk256 , evt . dhkey ); 1343 ià( hci -> Ë_ev’t_mask [1] & 0x01) 1344 `Ë_m‘a_ev’t ( hci , BT_HCI_EVT_LE_GENERATE_DHKEY_COMPLETE , 1345 & evt , (evt)); 1346 } } 1348  $cmd_Ë_add_to_»sÞv_li¡ ( bt_Ë * hci , 1349 cÚ¡ * d©a , ušt8_t size ) 1351 cÚ¡  bt_hci_cmd_Ë_add_to_»sÞv_li¡ * cmd = d©a ; 1352 ušt8_t ¡©us ; 1353 boÞ exi¡s = çl£ ; 1354  i , pos = -1; 1357 ià( cmd -> addr_ty³ > 0x01) { 1358 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1359 BT_HCI_CMD_LE_ADD_TO_RESOLV_LIST ); 1363  i = 0; i < hci -> Ë_»sÞv_li¡_size ; i++) { 1364 ià( hci -> Ë_»sÞv_li¡ [ i ][0] =ð cmd -> addr_ty³ && 1365 ! `memcmp (& hci -> Ë_»sÞv_li¡ [ i ][1], 1366 cmd -> addr , 6)) { 1367 exi¡s = Œue ; 1369 } ià( pos < 0 && hci -> Ë_»sÞv_li¡ [ i ][0] == 0xff) 1370 pos = i ; 1373 ià( exi¡s ) { 1374 `cmd_¡©us ( hci , BT_HCI_ERR_UNSPECIFIED_ERROR , 1375 BT_HCI_CMD_LE_ADD_TO_RESOLV_LIST ); 1379 ià( pos < 0) { 1380 `cmd_¡©us ( hci , BT_HCI_ERR_MEM_CAPACITY_EXCEEDED , 1381 BT_HCI_CMD_LE_ADD_TO_RESOLV_LIST ); 1385 hci -> Ë_»sÞv_li¡ [ pos ][0] = cmd -> addr_ty³ ; 1386 `memýy (& hci -> Ë_»sÞv_li¡ [ pos ][1], cmd -> addr , 6); 1387 `memýy (& hci -> Ë_»sÞv_li¡ [ pos ][7], cmd -> ³”_œk , 16); 1388 `memýy (& hci -> Ë_»sÞv_li¡ [ pos ][23], cmd -> loÿl_œk , 16); 1390 ¡©us = BT_HCI_ERR_SUCCESS ; 1391 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_ADD_TO_RESOLV_LIST , 1392 & ¡©us , (status)); 1393 } } 1395  $cmd_Ë_»move_äom_»sÞv_li¡ ( bt_Ë * hci , 1396 cÚ¡ * d©a , ušt8_t size ) 1398 cÚ¡  bt_hci_cmd_Ë_»move_äom_»sÞv_li¡ * cmd = d©a ; 1399 ušt8_t ¡©us ; 1400  i , pos = -1; 1403 ià( cmd -> addr_ty³ > 0x01) { 1404 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1405 BT_HCI_CMD_LE_REMOVE_FROM_RESOLV_LIST ); 1409  i = 0; i < hci -> Ë_»sÞv_li¡_size ; i++) { 1410 ià( hci -> Ë_»sÞv_li¡ [ i ][0] =ð cmd -> addr_ty³ && 1411 ! `memcmp (& hci -> Ë_»sÞv_li¡ [ i ][1], 1412 cmd -> addr , 6)) { 1413 pos = i ; 1418 ià( pos < 0) { 1419 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1420 BT_HCI_CMD_LE_REMOVE_FROM_RESOLV_LIST ); 1424 hci -> Ë_»sÞv_li¡ [ pos ][0] = 0xff; 1425 `mem£t (& hci -> Ë_»sÞv_li¡ [ pos ][1], 0, 38); 1427 ¡©us = BT_HCI_ERR_SUCCESS ; 1428 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_REMOVE_FROM_RESOLV_LIST , 1429 & ¡©us , (status)); 1430 } } 1432  $cmd_Ë_þ—r_»sÞv_li¡ ( bt_Ë * hci , 1433 cÚ¡ * d©a , ušt8_t size ) 1435 ušt8_t ¡©us ; 1437 `þ—r_»sÞv_li¡ ( hci ); 1439 ¡©us = BT_HCI_ERR_SUCCESS ; 1440 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_CLEAR_RESOLV_LIST , 1441 & ¡©us , (status)); 1442 } } 1444  $cmd_Ë_»ad_»sÞv_li¡_size ( bt_Ë * hci , 1445 cÚ¡ * d©a , ušt8_t size ) 1447  bt_hci_r¥_Ë_»ad_»sÞv_li¡_size r¥ ; 1449 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 1450 r¥ . size = hci -> Ë_»sÞv_li¡_size ; 1452 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_READ_RESOLV_LIST_SIZE , 1453 & r¥ , (rsp)); 1454 } } 1456  $cmd_Ë_»ad_³”_»sÞv_addr ( bt_Ë * hci , 1457 cÚ¡ * d©a , ušt8_t size ) 1459 cÚ¡  bt_hci_cmd_Ë_»ad_³”_»sÞv_addr * cmd = d©a ; 1460  bt_hci_r¥_Ë_»ad_³”_»sÞv_addr r¥ ; 1463 ià( cmd -> addr_ty³ > 0x01) { 1464 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1465 BT_HCI_CMD_LE_READ_PEER_RESOLV_ADDR ); 1469 r¥ . ¡©us = BT_HCI_ERR_UNKNOWN_CONN_ID ; 1470 `mem£t ( r¥ . addr , 0, 6); 1472 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_READ_PEER_RESOLV_ADDR , 1473 & r¥ , (rsp)); 1474 } } 1476  $cmd_Ë_»ad_loÿl_»sÞv_addr ( bt_Ë * hci , 1477 cÚ¡ * d©a , ušt8_t size ) 1479 cÚ¡  bt_hci_cmd_Ë_»ad_loÿl_»sÞv_addr * cmd = d©a ; 1480  bt_hci_r¥_Ë_»ad_loÿl_»sÞv_addr r¥ ; 1483 ià( cmd -> addr_ty³ > 0x01) { 1484 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1485 BT_HCI_CMD_LE_READ_LOCAL_RESOLV_ADDR ); 1489 r¥ . ¡©us = BT_HCI_ERR_UNKNOWN_CONN_ID ; 1490 `mem£t ( r¥ . addr , 0, 6); 1492 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_READ_LOCAL_RESOLV_ADDR , 1493 & r¥ , (rsp)); 1494 } } 1496  $cmd_Ë_£t_»sÞv_’abË ( bt_Ë * hci , 1497 cÚ¡ * d©a , ušt8_t size ) 1499 cÚ¡  bt_hci_cmd_Ë_£t_»sÞv_’abË * cmd = d©a ; 1500 ušt8_t ¡©us ; 1503 ià( cmd -> ’abË > 0x01) { 1504 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1505 BT_HCI_CMD_LE_SET_RESOLV_ENABLE ); 1509 hci -> Ë_»sÞv_’abË = cmd -> ’abË ; 1511 ¡©us = BT_HCI_ERR_SUCCESS ; 1512 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_SET_RESOLV_ENABLE , 1513 & ¡©us , (status)); 1514 } } 1516  $cmd_Ë_£t_»sÞv_timeout ( bt_Ë * hci , 1517 cÚ¡ * d©a , ušt8_t size ) 1519 cÚ¡  bt_hci_cmd_Ë_£t_»sÞv_timeout * cmd = d©a ; 1520 ušt16_t timeout ; 1521 ušt8_t ¡©us ; 1523 timeout = `Ë16_to_ýu ( cmd ->timeout); 1526 ià( timeout < 0x0001 ||imeout > 0xa1b8) { 1527 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , 1528 BT_HCI_CMD_LE_SET_RESOLV_TIMEOUT ); 1532 hci -> Ë_»sÞv_timeout = timeout ; 1534 ¡©us = BT_HCI_ERR_SUCCESS ; 1535 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_SET_RESOLV_TIMEOUT , 1536 & ¡©us , (status)); 1537 } } 1539  $cmd_Ë_»ad_max_d©a_Ëngth ( bt_Ë * hci , 1540 cÚ¡ * d©a , ušt8_t size ) 1542  bt_hci_r¥_Ë_»ad_max_d©a_Ëngth r¥ ; 1544 r¥ . ¡©us = BT_HCI_ERR_SUCCESS ; 1545 r¥ . max_tx_Ën = `ýu_to_Ë16 ( MAX_TX_LEN ); 1546 r¥ . max_tx_time = `ýu_to_Ë16 ( MAX_TX_TIME ); 1547 r¥ . max_rx_Ën = `ýu_to_Ë16 ( MAX_RX_LEN ); 1548 r¥ . max_rx_time = `ýu_to_Ë16 ( MAX_RX_TIME ); 1550 `cmd_com¶‘e ( hci , BT_HCI_CMD_LE_READ_MAX_DATA_LENGTH , 1551 & r¥ , (rsp)); 1552 } } 1555 ušt16_t mÝcode ; 1556 (* mfunc è( bt_Ë * mhci , cÚ¡ * md©a , ušt8_t msize ); 1557 ušt8_t msize ; 1558 boÞ mfixed ; 1559 } gcmd_bË [] = { 1560 { BT_HCI_CMD_DISCONNECT , cmd_discÚÃù , 3, Œue }, 1562 { BT_HCI_CMD_SET_EVENT_MASK , cmd_£t_ev’t_mask , 8, Œue }, 1563 { BT_HCI_CMD_RESET , cmd_»£t , 0, Œue }, 1564 { BT_HCI_CMD_SET_EVENT_MASK_PAGE2 , cmd_£t_ev’t_mask_·ge2 , 8, Œue }, 1566 { BT_HCI_CMD_READ_LOCAL_VERSION , cmd_»ad_loÿl_v”siÚ , 0, Œue }, 1567 { BT_HCI_CMD_READ_LOCAL_COMMANDS , cmd_»ad_loÿl_commªds , 0, Œue }, 1568 { BT_HCI_CMD_READ_LOCAL_FEATURES , cmd_»ad_loÿl_ã©u»s , 0, Œue }, 1569 { BT_HCI_CMD_READ_BUFFER_SIZE , cmd_»ad_bufãr_size , 0, Œue }, 1570 { BT_HCI_CMD_READ_BD_ADDR , cmd_»ad_bd_addr , 0, Œue }, 1572 { BT_HCI_CMD_LE_SET_EVENT_MASK , 1573 cmd_Ë_£t_ev’t_mask , 8, Œue }, 1574 { BT_HCI_CMD_LE_READ_BUFFER_SIZE , 1575 cmd_Ë_»ad_bufãr_size , 0, Œue }, 1576 { BT_HCI_CMD_LE_READ_LOCAL_FEATURES , 1577 cmd_Ë_»ad_loÿl_ã©u»s , 0, Œue }, 1578 { BT_HCI_CMD_LE_SET_RANDOM_ADDRESS , 1579 cmd_Ë_£t_¿ndom_add»ss , 6, Œue }, 1580 { BT_HCI_CMD_LE_SET_ADV_PARAMETERS , 1581 cmd_Ë_£t_adv_·¿m‘”s , 15, Œue }, 1582 { BT_HCI_CMD_LE_READ_ADV_TX_POWER , 1583 cmd_Ë_»ad_adv_tx_pow” , 0, Œue }, 1584 { BT_HCI_CMD_LE_SET_ADV_DATA , 1585 cmd_Ë_£t_adv_d©a , 32, Œue }, 1586 { BT_HCI_CMD_LE_SET_SCAN_RSP_DATA , 1587 cmd_Ë_£t_sÿn_r¥_d©a , 32, Œue }, 1588 { BT_HCI_CMD_LE_SET_ADV_ENABLE , 1589 cmd_Ë_£t_adv_’abË , 1, Œue }, 1590 { BT_HCI_CMD_LE_SET_SCAN_PARAMETERS , 1591 cmd_Ë_£t_sÿn_·¿m‘”s , 7, Œue }, 1592 { BT_HCI_CMD_LE_SET_SCAN_ENABLE , 1593 cmd_Ë_£t_sÿn_’abË , 2, Œue }, 1594 { BT_HCI_CMD_LE_CREATE_CONN , 1595 cmd_Ë_ü—‹_cÚn , 25, Œue }, 1596 { BT_HCI_CMD_LE_CREATE_CONN_CANCEL , 1597 cmd_Ë_ü—‹_cÚn_ÿnûl , 0, Œue }, 1598 { BT_HCI_CMD_LE_READ_WHITE_LIST_SIZE , 1599 cmd_Ë_»ad_wh™e_li¡_size , 0, Œue }, 1600 { BT_HCI_CMD_LE_CLEAR_WHITE_LIST , 1601 cmd_Ë_þ—r_wh™e_li¡ , 0, Œue }, 1602 { BT_HCI_CMD_LE_ADD_TO_WHITE_LIST , 1603 cmd_Ë_add_to_wh™e_li¡ , 7, Œue }, 1604 { BT_HCI_CMD_LE_REMOVE_FROM_WHITE_LIST , 1605 cmd_Ë_»move_äom_wh™e_li¡ , 7, Œue }, 1607 { BT_HCI_CMD_LE_ENCRYPT , cmd_Ë_’üy± , 32, Œue }, 1608 { BT_HCI_CMD_LE_RAND , cmd_Ë_¿nd , 0, Œue }, 1610 { BT_HCI_CMD_LE_READ_SUPPORTED_STATES , 1611 cmd_Ë_»ad_suµÜ‹d_¡©es , 0, Œue }, 1613 { BT_HCI_CMD_LE_SET_DATA_LENGTH , 1614 cmd_Ë_£t_d©a_Ëngth , 6, Œue }, 1615 { BT_HCI_CMD_LE_READ_DEFAULT_DATA_LENGTH , 1616 cmd_Ë_»ad_deçuÉ_d©a_Ëngth , 0, Œue }, 1617 { BT_HCI_CMD_LE_WRITE_DEFAULT_DATA_LENGTH , 1618 cmd_Ë_wr™e_deçuÉ_d©a_Ëngth , 4, Œue }, 1619 { BT_HCI_CMD_LE_READ_LOCAL_PK256 , 1620 cmd_Ë_»ad_loÿl_pk256 , 0, Œue }, 1621 { BT_HCI_CMD_LE_GENERATE_DHKEY , 1622 cmd_Ë_g’”©e_dhkey , 64, Œue }, 1623 { BT_HCI_CMD_LE_ADD_TO_RESOLV_LIST , 1624 cmd_Ë_add_to_»sÞv_li¡ , 39, Œue }, 1625 { BT_HCI_CMD_LE_REMOVE_FROM_RESOLV_LIST , 1626 cmd_Ë_»move_äom_»sÞv_li¡ , 7, Œue }, 1627 { BT_HCI_CMD_LE_CLEAR_RESOLV_LIST , 1628 cmd_Ë_þ—r_»sÞv_li¡ , 0, Œue }, 1629 { BT_HCI_CMD_LE_READ_RESOLV_LIST_SIZE , 1630 cmd_Ë_»ad_»sÞv_li¡_size , 0, Œue }, 1631 { BT_HCI_CMD_LE_READ_PEER_RESOLV_ADDR , 1632 cmd_Ë_»ad_³”_»sÞv_addr , 7, Œue }, 1633 { BT_HCI_CMD_LE_READ_LOCAL_RESOLV_ADDR , 1634 cmd_Ë_»ad_loÿl_»sÞv_addr , 7, Œue }, 1635 { BT_HCI_CMD_LE_SET_RESOLV_ENABLE , 1636 cmd_Ë_£t_»sÞv_’abË , 1, Œue }, 1637 { BT_HCI_CMD_LE_SET_RESOLV_TIMEOUT , 1638 cmd_Ë_£t_»sÞv_timeout , 2, Œue }, 1639 { BT_HCI_CMD_LE_READ_MAX_DATA_LENGTH , 1640 cmd_Ë_»ad_max_d©a_Ëngth , 0, Œue }, 1645  $´oûss_commªd ( bt_Ë * hci , cÚ¡ * d©a , size_t size ) 1647 cÚ¡  bt_hci_cmd_hdr * hdr = d©a ; 1648 ušt16_t Ýcode ; 1649  i ; 1651 ià( size < (* hdr )) 1654 d©a +ð(* hdr ); 1655 size -ð(* hdr ); 1657 Ýcode = `Ë16_to_ýu ( hdr ->opcode); 1659 ià( hdr -> ¶’ !ð size ) { 1660 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , Ýcode ); 1664  i = 0; cmd_bË [i]. func ; i++) { 1665 ià( cmd_bË [ i ]. Ýcode != opcode) 1668 ià(( cmd_bË [ i ]. fixed && size != cmd_table[i].size) || 1669 size < cmd_bË [ i ].size) { 1670 `cmd_¡©us ( hci , BT_HCI_ERR_INVALID_PARAMETERS , Ýcode ); 1674 cmd_bË [ i ]. `func ( hci , d©a , size ); 1678 `cmd_¡©us ( hci , BT_HCI_ERR_UNKNOWN_COMMAND , Ýcode ); 1679 } } 1681  $vhci_»ad_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 1683  bt_Ë * hci = u£r_d©a ; 1684  buf [4096]; 1685 ssize_t Ën ; 1687 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) 1690 Ën = `»ad ( hci -> vhci_fd , buf , (buf)); 1691 ià( Ën < 1) 1694  buf [0]) { 1695  BT_H4_CMD_PKT : 1696 `´oûss_commªd ( hci , buf + 1, Ën - 1); 1699 } } 1701  $phy_»cv_ÿÎback ( ušt16_t ty³ , cÚ¡ * d©a , 1702 size_t size , * u£r_d©a ) 1704  bt_Ë * hci = u£r_d©a ; 1706  ty³ ) { 1707  BT_PHY_PKT_ADV : 1708 ià(!( hci -> Ë_ev’t_mask [0] & 0x02)) 1711 ià( hci -> Ë_sÿn_’abË == 0x01) { 1712 cÚ¡  bt_phy_pkt_adv * pkt = d©a ; 1713 ušt8_t buf [100]; 1714  bt_hci_evt_Ë_adv_»pÜt * evt = (*è buf ; 1715 ušt8_t tx_addr_ty³ , tx_addr [6]; 1717 `»sÞve_³”_addr ( hci , pkt -> tx_addr_ty³ ,…kt-> tx_addr , 1718 & tx_addr_ty³ , tx_addr ); 1720 ià( hci -> Ë_sÿn_fž‹r_pÞicy == 0x01 || 1721 hci -> Ë_sÿn_fž‹r_pÞicy == 0x03) { 1722 ià(! `is_š_wh™e_li¡ ( hci , tx_addr_ty³ , 1723 tx_addr )) 1727 ià( hci -> Ë_sÿn_fž‹r_dup ) { 1728 ià(! `add_to_sÿn_ÿche ( hci , tx_addr_ty³ , 1729 tx_addr )) 1733 `mem£t ( buf , 0, (buf)); 1734 evt -> num_»pÜts = 0x01; 1735 evt -> ev’t_ty³ = pkt -> pdu_ty³ ; 1736 evt -> addr_ty³ = tx_addr_ty³ ; 1737 `memýy ( evt -> addr , tx_addr , 6); 1738 evt -> d©a_Ën = pkt -> adv_d©a_Ën ; 1739 `memýy ( buf + (* evt ), d©a + (* pkt ), 1740 pkt -> adv_d©a_Ën ); 1742 `Ë_m‘a_ev’t ( hci , BT_HCI_EVT_LE_ADV_REPORT , buf , 1743 (* evt è+ pkt -> adv_d©a_Ën + 1); 1745 ià( hci -> Ë_sÿn_ty³ == 0x00) 1748 `mem£t ( buf , 0, (buf)); 1749 evt -> num_»pÜts = 0x01; 1750 evt -> ev’t_ty³ = 0x04; 1751 evt -> addr_ty³ = tx_addr_ty³ ; 1752 `memýy ( evt -> addr , tx_addr , 6); 1753 evt -> d©a_Ën = pkt -> sÿn_r¥_Ën ; 1754 `memýy ( buf + (* evt ), d©a + (* pkt ) + 1755 pkt -> adv_d©a_Ën , 1756 pkt -> sÿn_r¥_Ën ); 1758 `Ë_m‘a_ev’t ( hci , BT_HCI_EVT_LE_ADV_REPORT , buf , 1759 (* evt è+ pkt -> sÿn_r¥_Ën + 1); 1763 } } 1765  bt_Ë * $bt_Ë_Ãw () 1767  £tup_cmd [2]; 1768  bt_Ë * hci ; 1770 hci = `ÿÎoc (1, (*hci)); 1771 ià(! hci ) 1772  NULL ; 1774 hci -> adv_timeout_id = -1; 1776 `»£t_deçuÉs ( hci ); 1778 hci -> vhci_fd = `Ý’ ("/dev/vhci", O_RDWR ); 1779 ià( hci -> vhci_fd < 0) { 1780 `ä“ ( hci ); 1781  NULL ; 1784 £tup_cmd [0] = HCI_VENDOR_PKT ; 1785 £tup_cmd [1] = HCI_BREDR ; 1787 ià( `wr™e ( hci -> vhci_fd , £tup_cmd , (setup_cmd)) < 0) { 1788 `þo£ ( hci -> vhci_fd ); 1789 `ä“ ( hci ); 1790  NULL ; 1793 `mašloÝ_add_fd ( hci -> vhci_fd , EPOLLIN , vhci_»ad_ÿÎback , hci, NULL ); 1795 hci -> phy = `bt_phy_Ãw (); 1796 hci -> üy±o = `bt_üy±o_Ãw (); 1798 `bt_phy_»gi¡” ( hci -> phy , phy_»cv_ÿÎback , hci); 1800  `bt_Ë_»f ( hci ); 1801 } } 1803  bt_Ë * $bt_Ë_»f ( bt_Ë * hci ) 1805 ià(! hci ) 1806  NULL ; 1808 `__sync_ãtch_ªd_add (& hci -> »f_couÁ , 1); 1810  hci ; 1811 } } 1813  $bt_Ë_uÄef ( bt_Ë * hci ) 1815 ià(! hci ) 1818 ià( `__sync_sub_ªd_ãtch (& hci -> »f_couÁ , 1)) 1821 `¡Ý_adv ( hci ); 1823 `bt_üy±o_uÄef ( hci -> üy±o ); 1824 `bt_phy_uÄef ( hci -> phy ); 1826 `mašloÝ_»move_fd ( hci -> vhci_fd ); 1828 `þo£ ( hci -> vhci_fd ); 1830 `ä“ ( hci ); 1831 } } @emulator/le.h 25  ~<¡dboÞ.h > 27  gbt_Ë ; 29  bt_Ë * bt_Ë_Ãw (); 31  bt_Ë * bt_Ë_»f (bt_Ë * Ë ); 32  bt_Ë_uÄef ( bt_Ë * Ë ); @emulator/main.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<¡dlib.h > 31  ~<¡dboÞ.h > 32  ~ 34  ~"mÚ™Ü/mašloÝ.h " 35  ~"£rŸl.h " 36  ~"£rv”.h " 37  ~"vhci.h " 38  ~"amp.h " 39  ~"Ë.h " 41  $sigÇl_ÿÎback ( signum , * u£r_d©a ) 43  signum ) { 44  SIGINT : 45  SIGTERM : 46 `mašloÝ_qu™ (); 49 } } 51  $u§ge () 53 `´štf ("btvirt - Bluetoothƒmulator\n" 55 `´štf ("\tbtvirt [options]\n"); 56 `´štf ("options:\n" 64 } } 66 cÚ¡  ÝtiÚ gmaš_ÝtiÚs [] = { 67 { "£rŸl", no_¬gum’t , NULL , 'S' }, 68 { "£rv”", no_¬gum’t , NULL , 's' }, 69 { "loÿl", ÝtiÚ®_¬gum’t , NULL , 'l' }, 70 { "Ë", no_¬gum’t , NULL , 'L' }, 71 { "b»dr", no_¬gum’t , NULL , 'B' }, 72 { "amp", no_¬gum’t , NULL , 'A' }, 73 { "Ë‹¡", ÝtiÚ®_¬gum’t , NULL , 'U' }, 74 { "am±e¡", ÝtiÚ®_¬gum’t , NULL , 'T' }, 75 { "v”siÚ", no_¬gum’t , NULL , 'v' }, 76 { "h–p", no_¬gum’t , NULL , 'h' }, 80  $maš ( ¬gc , * ¬gv []) 82  £rv” * £rv”1 ; 83  £rv” * £rv”2 ; 84  £rv” * £rv”3 ; 85  £rv” * £rv”4 ; 86  £rv” * £rv”5 ; 87 boÞ £rv”_’abËd = çl£ ; 88 boÞ £rŸl_’abËd = çl£ ; 89  Ë‹¡_couÁ = 0; 90  am±e¡_couÁ = 0; 91  vhci_couÁ = 0; 92 vhci_ty³ vhci_ty³ = VHCI_TYPE_BREDRLE ; 93 sig£t_t mask ; 94  i ; 96 `mašloÝ_š™ (); 99  Ýt ; 101 Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "Ssl::LBAUTvh", 102 maš_ÝtiÚs , NULL ); 103 ià( Ýt < 0) 106  Ýt ) { 108 £rŸl_’abËd = Œue ; 111 £rv”_’abËd = Œue ; 114 ià( Ýrg ) 115 vhci_couÁ = `©oi ( Ýrg ); 117 vhci_couÁ = 1; 120 vhci_ty³ = VHCI_TYPE_LE ; 123 vhci_ty³ = VHCI_TYPE_BREDR ; 126 vhci_ty³ = VHCI_TYPE_AMP ; 129 ià( Ýrg ) 130 Ë‹¡_couÁ = `©oi ( Ýrg ); 132 Ë‹¡_couÁ = 1; 135 ià( Ýrg ) 136 am±e¡_couÁ = `©oi ( Ýrg ); 138 am±e¡_couÁ = 1; 141 `´štf ("%s\n", VERSION ); 142  EXIT_SUCCESS ; 144 `u§ge (); 145  EXIT_SUCCESS ; 147  EXIT_FAILURE ; 151 ià( Ë‹¡_couÁ < 1 && am±e¡_couÁ < 1 && 152 vhci_couÁ < 1 && ! £rv”_’abËd && ! £rŸl_’abËd ) { 153 `årštf ( ¡d”r , "Noƒmulator specified\n"); 154  EXIT_FAILURE ; 157 `sigem±y£t (& mask ); 158 `sigadd£t (& mask , SIGINT ); 159 `sigadd£t (& mask , SIGTERM ); 161 `mašloÝ_£t_sigÇl (& mask , sigÇl_ÿÎback , NULL , NULL); 163 `´štf ("Blu‘oÙhƒmuÏtÜ v” %s\n", VERSION ); 165  i = 0; i < Ë‹¡_couÁ ; i++) { 166  bt_Ë * Ë ; 168 Ë = `bt_Ë_Ãw (); 169 ià(! Ë ) { 170 `årštf ( ¡d”r , "Failedo create LE controller\n"); 171  EXIT_FAILURE ; 175  i = 0; i < am±e¡_couÁ ; i++) { 176  bt_amp * amp ; 178 amp = `bt_amp_Ãw (); 179 ià(! amp ) { 180 `årštf ( ¡d”r , "Failedo create AMP controller\n"); 181  EXIT_FAILURE ; 185  i = 0; i < vhci_couÁ ; i++) { 186  vhci *vhci; 188 vhci = `vhci_Ý’ ( vhci_ty³ ); 189 ià(! vhci ) { 190 `årštf ( ¡d”r , "Failedo open Virtual HCI device\n"); 191  EXIT_FAILURE ; 195 ià( £rŸl_’abËd ) { 196  £rŸl *serial; 198 £rŸl = `£rŸl_Ý’ ( SERIAL_TYPE_BREDRLE ); 199 ià(! £rŸl ) 200 `årštf ( ¡d”r , "Failedo open serialƒmulation\n"); 203 ià( £rv”_’abËd ) { 204 £rv”1 = `£rv”_Ý’_unix ( SERVER_TYPE_BREDRLE , 206 ià(! £rv”1 ) 207 `årštf ( ¡d”r , "Failedo open BR/EDR/LE server\n"); 209 £rv”2 = `£rv”_Ý’_unix ( SERVER_TYPE_BREDR , 211 ià(! £rv”2 ) 212 `årštf ( ¡d”r , "Failedo open BR/EDR server\n"); 214 £rv”3 = `£rv”_Ý’_unix ( SERVER_TYPE_AMP , 216 ià(! £rv”3 ) 217 `årštf ( ¡d”r , "Failedo open AMP server\n"); 219 £rv”4 = `£rv”_Ý’_unix ( SERVER_TYPE_LE , 221 ià(! £rv”4 ) 222 `årštf ( ¡d”r , "Failedo open LE server\n"); 224 £rv”5 = `£rv”_Ý’_unix ( SERVER_TYPE_MONITOR , 226 ià(! £rv”5 ) 227 `årštf ( ¡d”r , "Failedo open monitor server\n"); 230  `mašloÝ_run (); 231 } } @emulator/phy.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~ 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 33  ~ 34  ~<Ãtš‘/š.h > 35  ~<Ãtš‘/.h > 36  ~ 38  ~"¤c/sh¬ed/utž.h " 39  ~"mÚ™Ü/mašloÝ.h " 41  ~"phy.h " 43  #BT_PHY_PORT 45023 ) 45  sbt_phy { 46 vÞ©ž m»f_couÁ ; 47  mrx_fd ; 48  mtx_fd ; 49 ušt64_t mid ; 50 bt_phy_ÿÎback_func_t mÿÎback ; 51 * mu£r_d©a ; 54  sbt_phy_hdr { 55 ušt64_t mid ; 56 ušt32_t mæags ; 57 ušt16_t mty³ ; 58 ušt16_t mËn ; 59 } __©Œibu‹__ (( ·cked )); 61  boÞ $g‘_¿ndom_by‹s (* buf , size_t num_by‹s ) 63 ssize_t Ën ; 64  fd ; 66 fd = `Ý’ ("/dev/u¿ndom", O_RDONLY ); 67 ià( fd < 0) 68  çl£ ; 70 Ën = `»ad ( fd , buf , num_by‹s ); 72 `þo£ ( fd ); 74 ià( Ën < 0) 75  çl£ ; 77  Œue ; 78 } } 80  $phy_rx_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 82  bt_phy * phy = u£r_d©a ; 83  msghdr msg ; 84  iovec iov [2]; 85  bt_phy_hdr hdr ; 86  buf [4096]; 87 ssize_t Ën ; 89 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 90 `mašloÝ_»move_fd ( fd ); 94 iov [0]. iov_ba£ = & hdr ; 95 iov [0]. iov_Ën = ( hdr ); 96 iov [1]. iov_ba£ = buf ; 97 iov [1]. iov_Ën = ( buf ); 99 `mem£t (& msg , 0, (msg)); 100 msg . msg_iov = iov ; 101 msg . msg_iovËn = 2; 103 Ën = `»cvmsg ( phy -> rx_fd , & msg , MSG_DONTWAIT ); 104 ià( Ën < 0) 107 ià(( size_t è Ën < ( hdr )) 110 ià( `Ë64_to_ýu ( hdr . id è=ð phy ->id) 113 ià( Ën - ( hdr è!ð `Ë16_to_ýu (hdr.len)) 116 ià( phy -> ÿÎback ) 117 phy -> `ÿÎback ( `Ë16_to_ýu ( hdr . ty³ ), 118 buf , Ën - ( hdr ), phy -> u£r_d©a ); 119 } } 121  $ü—‹_rx_sock‘ () 123  sockaddr_š addr ; 124  fd , Ýt = 1; 126 fd = `sock‘ ( PF_INET , SOCK_DGRAM | SOCK_CLOEXEC , 0); 127 ià( fd < 0) 130 `£tsockÝt ( fd , SOL_SOCKET , SO_REUSEADDR , & Ýt , (opt)); 132 `mem£t (& addr , 0, (addr)); 133 addr . sš_çmžy = AF_INET ; 134 addr . sš_pÜt = `htÚs ( BT_PHY_PORT ); 135 addr . sš_addr . s_addr = INADDR_BROADCAST ; 137 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 138 `þo£ ( fd ); 142  fd ; 143 } } 145  $ü—‹_tx_sock‘ () 147  fd , Ýt = 1; 149 fd = `sock‘ ( PF_INET , SOCK_DGRAM | SOCK_CLOEXEC , 0); 150 ià( fd < 0) 153 `£tsockÝt ( fd , SOL_SOCKET , SO_BROADCAST , & Ýt , (opt)); 155  fd ; 156 } } 158  bt_phy * $bt_phy_Ãw () 160  bt_phy * phy ; 162 phy = `ÿÎoc (1, (*phy)); 163 ià(! phy ) 164  NULL ; 166 phy -> rx_fd = `ü—‹_rx_sock‘ (); 167 ià( phy -> rx_fd < 0) { 168 `ä“ ( phy ); 169  NULL ; 172 phy -> tx_fd = `ü—‹_tx_sock‘ (); 173 ià( phy -> tx_fd < 0) { 174 `þo£ ( phy -> rx_fd ); 175 `ä“ ( phy ); 176  NULL ; 179 `mašloÝ_add_fd ( phy -> rx_fd , EPOLLIN , phy_rx_ÿÎback ,…hy, NULL ); 181 ià(! `g‘_¿ndom_by‹s (& phy -> id , (phy->id))) { 182 `¤ªdom ( `time ( NULL )); 183 phy -> id = `¿ndom (); 186 `bt_phy_£nd ( phy , BT_PHY_PKT_NULL , NULL , 0); 188  `bt_phy_»f ( phy ); 189 } } 191  bt_phy * $bt_phy_»f ( bt_phy * phy ) 193 ià(! phy ) 194  NULL ; 196 `__sync_ãtch_ªd_add (& phy -> »f_couÁ , 1); 198  phy ; 199 } } 201  $bt_phy_uÄef ( bt_phy * phy ) 203 ià(! phy ) 206 ià( `__sync_sub_ªd_ãtch (& phy -> »f_couÁ , 1)) 209 `mašloÝ_»move_fd ( phy -> rx_fd ); 211 `þo£ ( phy -> tx_fd ); 212 `þo£ ( phy -> rx_fd ); 214 `ä“ ( phy ); 215 } } 217 boÞ $bt_phy_£nd ( bt_phy * phy , ušt16_t ty³ , 218 cÚ¡ * d©a , size_t size ) 220  `bt_phy_£nd_veùÜ ( phy , ty³ , d©a , size , NULL , 0, NULL, 0); 221 } } 223 boÞ $bt_phy_£nd_veùÜ ( bt_phy * phy , ušt16_t ty³ , 224 cÚ¡ * d©a1 , size_t size1 , 225 cÚ¡ * d©a2 , size_t size2 , 226 cÚ¡ * d©a3 , size_t size3 ) 228  bt_phy_hdr hdr ; 229  sockaddr_š addr ; 230  msghdr msg ; 231  iovec iov [4]; 232 ssize_t Ën ; 234 ià(! phy ) 235  çl£ ; 237 `mem£t (& addr , 0, (addr)); 238 addr . sš_çmžy = AF_INET ; 239 addr . sš_pÜt = `htÚs ( BT_PHY_PORT ); 240 addr . sš_addr . s_addr = INADDR_BROADCAST ; 242 `mem£t (& msg , 0, (msg)); 243 msg . msg_Çme = & addr ; 244 msg . msg_Çm–’ = ( addr ); 245 msg . msg_iov = iov ; 246 msg . msg_iovËn = 0; 248 `mem£t (& hdr , 0, (hdr)); 249 hdr . id = `ýu_to_Ë64 ( phy ->id); 250 hdr . æags = `ýu_to_Ë32 (0); 251 hdr . ty³ = `ýu_to_Ë16 (type); 252 hdr . Ën = `ýu_to_Ë16 ( size1 + size2 + size3 ); 254 iov [ msg . msg_iovËn ]. iov_ba£ = & hdr ; 255 iov [ msg . msg_iovËn ]. iov_Ën = ( hdr ); 256 msg . msg_iovËn ++; 258 ià( d©a1 && size1 > 0) { 259 iov [ msg . msg_iovËn ]. iov_ba£ = (*è d©a1 ; 260 iov [ msg . msg_iovËn ]. iov_Ën = size1 ; 261 msg . msg_iovËn ++; 264 ià( d©a2 && size2 > 0) { 265 iov [ msg . msg_iovËn ]. iov_ba£ = (*è d©a2 ; 266 iov [ msg . msg_iovËn ]. iov_Ën = size2 ; 267 msg . msg_iovËn ++; 270 ià( d©a3 && size3 > 0) { 271 iov [ msg . msg_iovËn ]. iov_ba£ = (*è d©a3 ; 272 iov [ msg . msg_iovËn ]. iov_Ën = size3 ; 273 msg . msg_iovËn ++; 276 `mem£t (& addr , 0, (addr)); 277 addr . sš_çmžy = AF_INET ; 278 addr . sš_pÜt = `htÚs ( BT_PHY_PORT ); 279 addr . sš_addr . s_addr = INADDR_BROADCAST ; 281 Ën = `£ndmsg ( phy -> tx_fd , & msg , MSG_DONTWAIT ); 282 ià( Ën < 0) 283  çl£ ; 285  Œue ; 286 } } 288 boÞ $bt_phy_»gi¡” ( bt_phy * phy , bt_phy_ÿÎback_func_t ÿÎback , 289 * u£r_d©a ) 291 ià(! phy ) 292  çl£ ; 294 phy -> ÿÎback = callback; 295 phy -> u£r_d©a = user_data; 297  Œue ; 298 } } @emulator/phy.h 25  ~<¡dboÞ.h > 26  ~<¡dšt.h > 28  gbt_phy ; 30  bt_phy * bt_phy_Ãw (); 32  bt_phy * bt_phy_»f (bt_phy * phy ); 33  bt_phy_uÄef ( bt_phy * phy ); 35 boÞ bt_phy_£nd ( bt_phy * phy , ušt16_t ty³ , 36 cÚ¡ * d©a , size_t size ); 37 boÞ bt_phy_£nd_veùÜ ( bt_phy * phy , ušt16_t ty³ , 38 cÚ¡ * d©a1 , size_t size1 , 39 cÚ¡ * d©a2 , size_t size2 , 40 cÚ¡ * d©a3 , size_t size3 ); 42 (* tbt_phy_ÿÎback_func_t )( tušt16_t tty³ , cÚ¡ * td©a , 43 tsize_t tsize , * tu£r_d©a ); 45 boÞ `bt_phy_»gi¡” ( bt_phy * phy , bt_phy_ÿÎback_func_t ÿÎback , 46 * u£r_d©a ); 48  #BT_PHY_PKT_NULL 0x0000 ) 50  #BT_PHY_PKT_ADV 0x0001 ) 51  sbt_phy_pkt_adv { 52 ušt8_t pdu_ty³ ; 53 ušt8_t tx_addr_ty³ ; 54 ušt8_t tx_addr [6]; 55 ušt8_t rx_addr_ty³ ; 56 ušt8_t rx_addr [6]; 57 ušt8_t adv_d©a_Ën ; 58 ušt8_t sÿn_r¥_Ën ; 59 } `__©Œibu‹__ (( ·cked )); 61  #BT_PHY_PKT_CONN 0x0002 ) 62  sbt_phy_pkt_cÚn { 63 ušt8_t lšk_ty³ ; 64 ušt8_t tx_addr_ty³ ; 65 ušt8_t tx_addr [6]; 66 ušt8_t rx_addr_ty³ ; 67 ušt8_t rx_addr [6]; 68 ušt8_t ã©u»s [8]; 69 ušt8_t id ; 70 } `__©Œibu‹__ (( ·cked )); @emulator/serial.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<ùy³.h > 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 35  ~ 36  ~ 37  ~ 38  ~ 40  ~ 41  ~ 43  ~"mÚ™Ü/mašloÝ.h " 44  ~"btdev.h " 45  ~"£rŸl.h " 47  #unš™Ÿlized_v¬ ( x èx = ) x 49  s£rŸl { 50 £rŸl_ty³ mty³ ; 51 ušt16_t mid ; 52  mfd ; 53  m·th [ PATH_MAX ]; 54  btdev * mbtdev ; 55 ušt8_t * mpkt_d©a ; 56 ušt8_t mpkt_ty³ ; 57 ušt16_t mpkt_ex³ù ; 58 ušt16_t mpkt_Ën ; 59 ušt16_t mpkt_off£t ; 62  Ý’_±y ( £rŸl *serial); 64  $£rŸl_de¡roy (* u£r_d©a ) 66  £rŸl *£rŸÈð u£r_d©a ; 68 `btdev_de¡roy ( £rŸl -> btdev ); 69 £rŸl -> btdev = NULL ; 71 `þo£ ( £rŸl -> fd ); 72 £rŸl -> fd = -1; 73 } } 75  $£rŸl_wr™e_ÿÎback (cÚ¡  iovec * iov ,  iovËn , 76 * u£r_d©a ) 78  £rŸl *£rŸÈð u£r_d©a ; 79 ssize_t wr™‹n ; 81 wr™‹n = `wr™ev ( £rŸl -> fd , iov , iovËn ); 82 ià( wr™‹n < 0) 84 } } 86  $£rŸl_»ad_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 88  £rŸl *£rŸÈð u£r_d©a ; 89  ušt8_t buf [4096]; 90 ušt8_t * ±r = buf ; 91 ssize_t Ën ; 92 ušt16_t couÁ ; 94 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 95 `mašloÝ_»move_fd ( £rŸl -> fd ); 96 `Ý’_±y ( £rŸl ); 100 agaš : 101 Ën = `»ad ( £rŸl -> fd , buf + s”Ÿl-> pkt_off£t , 102 ( buf è- £rŸl -> pkt_off£t ); 103 ià( Ën < 0) { 104 ià( ”ºo =ð EAGAIN ) 105  agaš ; 109 ià(! £rŸl -> btdev ) 112 couÁ = £rŸl -> pkt_off£t + Ën ; 114  couÁ > 0) { 115 hci_commªd_hdr * cmd_hdr ; 117 ià(! £rŸl -> pkt_d©a ) { 118 £rŸl -> pkt_ty³ = ±r [0]; 120  £rŸl -> pkt_ty³ ) { 121  HCI_COMMAND_PKT : 122 ià( couÁ < HCI_COMMAND_HDR_SIZE + 1) { 123 £rŸl -> pkt_off£t +ð Ën ; 126 cmd_hdr = ( hci_commªd_hdr *è( ±r + 1); 127 £rŸl -> pkt_ex³ù = HCI_COMMAND_HDR_SIZE + 128 cmd_hdr -> ¶’ + 1; 129 £rŸl -> pkt_d©a = `m®loc (£rŸl-> pkt_ex³ù ); 130 £rŸl -> pkt_Ën = 0; 133 `´štf ("packetƒrror\n"); 137 £rŸl -> pkt_off£t = 0; 140 ià( couÁ >ð £rŸl -> pkt_ex³ù ) { 141 `memýy ( £rŸl -> pkt_d©a + s”Ÿl-> pkt_Ën , 142 ±r , £rŸl -> pkt_ex³ù ); 143 ±r +ð £rŸl -> pkt_ex³ù ; 144 couÁ -ð £rŸl -> pkt_ex³ù ; 146 `btdev_»ûive_h4 ( £rŸl -> btdev , s”Ÿl-> pkt_d©a , 147 £rŸl -> pkt_Ën + s”Ÿl-> pkt_ex³ù ); 149 `ä“ ( £rŸl -> pkt_d©a ); 150 £rŸl -> pkt_d©a = NULL ; 152 `memýy ( £rŸl -> pkt_d©a + s”Ÿl-> pkt_Ën , ±r , couÁ ); 153 £rŸl -> pkt_Ën +ð couÁ ; 154 £rŸl -> pkt_ex³ù -ð couÁ ; 155 couÁ = 0; 158 } } 160  $Ý’_±y ( £rŸl *serial) 162 btdev_ty³ `unš™Ÿlized_v¬ ( ty³ ); 164 £rŸl -> fd = `posix_Ý’± ( O_RDWR | O_NOCTTY ); 165 ià( £rŸl -> fd < 0) { 166 `³¼Ü ("Failedo get master…seudoerminal"); 170 ià( `g¿Á± ( £rŸl -> fd ) < 0) { 171 `³¼Ü ("Failedo grant slave…seudoerminal"); 172 `þo£ ( £rŸl -> fd ); 173 £rŸl -> fd = -1; 177 ià( `uÆock± ( £rŸl -> fd ) < 0) { 178 `³¼Ü ("Failedo unlock slave…seudoerminal"); 179 `þo£ ( £rŸl -> fd ); 180 £rŸl -> fd = -1; 184 `±¢ame_r ( £rŸl -> fd , s”Ÿl-> ·th , (serial->path)); 186 `´štf ("P£udØ‹rmš®‡ˆ%s\n", £rŸl -> ·th ); 188  £rŸl -> ty³ ) { 189  SERIAL_TYPE_BREDRLE : 190 ty³ = BTDEV_TYPE_BREDRLE ; 192  SERIAL_TYPE_BREDR : 193 ty³ = BTDEV_TYPE_BREDR ; 195  SERIAL_TYPE_LE : 196 ty³ = BTDEV_TYPE_LE ; 198  SERIAL_TYPE_AMP : 199 ty³ = BTDEV_TYPE_AMP ; 203 £rŸl -> btdev = `btdev_ü—‹ ( ty³ , s”Ÿl-> id ); 204 ià(! £rŸl -> btdev ) { 205 `þo£ ( £rŸl -> fd ); 206 £rŸl -> fd = -1; 210 `btdev_£t_£nd_hªdËr ( £rŸl -> btdev , £rŸl_wr™e_ÿÎback , serial); 212 ià( `mašloÝ_add_fd ( £rŸl -> fd , EPOLLIN , £rŸl_»ad_ÿÎback , 213 £rŸl , £rŸl_de¡roy ) < 0) { 214 `btdev_de¡roy ( £rŸl -> btdev ); 215 £rŸl -> btdev = NULL ; 216 `þo£ ( £rŸl -> fd ); 217 £rŸl -> fd = -1; 220 } } 222  £rŸl * $£rŸl_Ý’ ( £rŸl_ty³ ty³ ) 224  £rŸl *serial; 225 btdev_ty³ `unš™Ÿlized_v¬ ( dev_ty³ ); 227 £rŸl = `m®loc ((*serial)); 228 ià(! £rŸl ) 229  NULL ; 231 `mem£t ( £rŸl , 0, (*serial)); 232 £rŸl -> ty³ =ype; 233 £rŸl -> id = 0x42; 235 `Ý’_±y ( £rŸl ); 237  £rŸl ; 238 } } 240  $£rŸl_þo£ ( £rŸl *serial) 242 ià(! £rŸl ) 245 `mašloÝ_»move_fd ( £rŸl -> fd ); 247 `ä“ ( £rŸl ); 248 } } @emulator/serial.h 25  ~<¡dšt.h > 27 e£rŸl_ty³ { 28 mSERIAL_TYPE_BREDRLE , 29 mSERIAL_TYPE_BREDR , 30 mSERIAL_TYPE_LE , 31 mSERIAL_TYPE_AMP , 34  g£rŸl ; 36  £rŸl * £rŸl_Ý’ ( £rŸl_ty³ ty³ ); 37  £rŸl_þo£ ( £rŸl *serial); @emulator/server.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<ùy³.h > 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 35  ~ 36  ~ 37  ~ 38  ~ 39  ~<Ãtš‘/š.h > 40  ~<¬·/š‘.h > 42  ~ 43  ~ 45  ~"mÚ™Ü/mašloÝ.h " 46  ~"btdev.h " 47  ~"£rv”.h " 49  #unš™Ÿlized_v¬ ( x èx = ) x 51  s£rv” { 52 £rv”_ty³ mty³ ; 53 ušt16_t mid ; 54  mfd ; 57  sþ›Á { 58  mfd ; 59  btdev * mbtdev ; 60 ušt8_t * mpkt_d©a ; 61 ušt8_t mpkt_ty³ ; 62 ušt16_t mpkt_ex³ù ; 63 ušt16_t mpkt_Ën ; 64 ušt16_t mpkt_off£t ; 67  $£rv”_de¡roy (* u£r_d©a ) 69  £rv” *£rv” = u£r_d©a ; 71 `þo£ ( £rv” -> fd ); 73 `ä“ ( £rv” ); 74 } } 76  $þ›Á_de¡roy (* u£r_d©a ) 78  þ›Á *þ›Á = u£r_d©a ; 80 `btdev_de¡roy ( þ›Á -> btdev ); 82 `þo£ ( þ›Á -> fd ); 84 `ä“ ( þ›Á ); 85 } } 87  $þ›Á_wr™e_ÿÎback (cÚ¡  iovec * iov ,  iovËn , 88 * u£r_d©a ) 90  þ›Á *þ›Á = u£r_d©a ; 91  msghdr msg ; 92 ssize_t wr™‹n ; 94 `mem£t (& msg , 0, (msg)); 96 msg . msg_iov = ( iovec *è iov ; 97 msg . msg_iovËn = iovËn ; 99 wr™‹n = `£ndmsg ( þ›Á -> fd , & msg , MSG_DONTWAIT ); 100 ià( wr™‹n < 0) 102 } } 104  $þ›Á_»ad_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 106  þ›Á *þ›Á = u£r_d©a ; 107  ušt8_t buf [4096]; 108 ušt8_t * ±r = buf ; 109 ssize_t Ën ; 110 ušt16_t couÁ ; 112 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 113 `mašloÝ_»move_fd ( þ›Á -> fd ); 117 agaš : 118 Ën = `»cv ( fd , buf + þ›Á -> pkt_off£t , 119 ( buf è- þ›Á -> pkt_off£t , MSG_DONTWAIT ); 120 ià( Ën < 0) { 121 ià( ”ºo =ð EAGAIN ) 122  agaš ; 126 ià(! þ›Á -> btdev ) 129 couÁ = þ›Á -> pkt_off£t + Ën ; 131  couÁ > 0) { 132 hci_commªd_hdr * cmd_hdr ; 134 ià(! þ›Á -> pkt_d©a ) { 135 þ›Á -> pkt_ty³ = ±r [0]; 137  þ›Á -> pkt_ty³ ) { 138  HCI_COMMAND_PKT : 139 ià( couÁ < HCI_COMMAND_HDR_SIZE + 1) { 140 þ›Á -> pkt_off£t +ð Ën ; 143 cmd_hdr = ( hci_commªd_hdr *è( ±r + 1); 144 þ›Á -> pkt_ex³ù = HCI_COMMAND_HDR_SIZE + 145 cmd_hdr -> ¶’ + 1; 146 þ›Á -> pkt_d©a = `m®loc (þ›Á-> pkt_ex³ù ); 147 þ›Á -> pkt_Ën = 0; 150 `´štf ("packetƒrror\n"); 154 þ›Á -> pkt_off£t = 0; 157 ià( couÁ >ð þ›Á -> pkt_ex³ù ) { 158 `memýy ( þ›Á -> pkt_d©a + cl›Á-> pkt_Ën , 159 ±r , þ›Á -> pkt_ex³ù ); 160 ±r +ð þ›Á -> pkt_ex³ù ; 161 couÁ -ð þ›Á -> pkt_ex³ù ; 163 `btdev_»ûive_h4 ( þ›Á -> btdev , cl›Á-> pkt_d©a , 164 þ›Á -> pkt_Ën + cl›Á-> pkt_ex³ù ); 166 `ä“ ( þ›Á -> pkt_d©a ); 167 þ›Á -> pkt_d©a = NULL ; 169 `memýy ( þ›Á -> pkt_d©a + cl›Á-> pkt_Ën , ±r , couÁ ); 170 þ›Á -> pkt_Ën +ð couÁ ; 171 þ›Á -> pkt_ex³ù -ð couÁ ; 172 couÁ = 0; 175 } } 177  $acû±_þ›Á ( fd ) 179  sockaddr_un addr ; 180 sockËn_t Ën ; 181  nfd ; 183 `mem£t (& addr , 0, (addr)); 184 Ën = ( addr ); 186 ià( `g‘sockÇme ( fd , ( sockaddr *è& addr , & Ën ) < 0) { 187 `³¼Ü ("Failedo get socket‚ame"); 191 `´štf ("Reque¡ fÜ %s\n", addr . sun_·th ); 193 nfd = `acû± ( fd , ( sockaddr *è& addr , & Ën ); 194 ià( nfd < 0) { 195 `³¼Ü ("Failedo‡ccept client socket"); 199  nfd ; 200 } } 202  $£rv”_acû±_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 204  £rv” *£rv” = u£r_d©a ; 205  þ›Á *client; 206 btdev_ty³ `unš™Ÿlized_v¬ ( ty³ ); 208 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 209 `mašloÝ_»move_fd ( £rv” -> fd ); 213 þ›Á = `m®loc ((*client)); 214 ià(! þ›Á ) 217 `mem£t ( þ›Á , 0, (*client)); 219 þ›Á -> fd = `acû±_þ›Á ( £rv” ->fd); 220 ià( þ›Á -> fd < 0) { 221 `ä“ ( þ›Á ); 225  £rv” -> ty³ ) { 226  SERVER_TYPE_BREDRLE : 227 ty³ = BTDEV_TYPE_BREDRLE ; 229  SERVER_TYPE_BREDR : 230 ty³ = BTDEV_TYPE_BREDR ; 232  SERVER_TYPE_LE : 233 ty³ = BTDEV_TYPE_LE ; 235  SERVER_TYPE_AMP : 236 ty³ = BTDEV_TYPE_AMP ; 238  SERVER_TYPE_MONITOR : 239  dÚe ; 242 þ›Á -> btdev = `btdev_ü—‹ ( ty³ , £rv” -> id ); 243 ià(! þ›Á -> btdev ) { 244 `þo£ ( þ›Á -> fd ); 245 `ä“ ( þ›Á ); 249 `btdev_£t_£nd_hªdËr ( þ›Á -> btdev , þ›Á_wr™e_ÿÎback , client); 251 dÚe : 252 ià( `mašloÝ_add_fd ( þ›Á -> fd , EPOLLIN , þ›Á_»ad_ÿÎback , 253 þ›Á , þ›Á_de¡roy ) < 0) { 254 `btdev_de¡roy ( þ›Á -> btdev ); 255 `þo£ ( þ›Á -> fd ); 256 `ä“ ( þ›Á ); 258 } } 260  $Ý’_unix (cÚ¡ * ·th ) 262  sockaddr_un addr ; 263  fd ; 265 `uÆšk ( ·th ); 267 fd = `sock‘ ( PF_UNIX , SOCK_STREAM , 0); 268 ià( fd < 0) { 269 `³¼Ü ("Failedo open server socket"); 273 `mem£t (& addr , 0, (addr)); 274 addr . sun_çmžy = AF_UNIX ; 275 `¡rýy ( addr . sun_·th , ·th ); 277 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 278 `³¼Ü ("Failedo bind server socket"); 279 `þo£ ( fd ); 283 ià( `li¡’ ( fd , 5) < 0) { 284 `³¼Ü ("Failedo†isten server socket"); 285 `þo£ ( fd ); 289  fd ; 290 } } 292  £rv” * $£rv”_Ý’_unix ( £rv”_ty³ ty³ , cÚ¡ * ·th ) 294  £rv” *server; 296 £rv” = `m®loc ((*server)); 297 ià(! £rv” ) 298  NULL ; 300 `mem£t ( £rv” , 0, (*server)); 301 £rv” -> ty³ =ype; 302 £rv” -> id = 0x42; 304 £rv” -> fd = `Ý’_unix ( ·th ); 305 ià( £rv” -> fd < 0) { 306 `ä“ ( £rv” ); 307  NULL ; 310 ià( `mašloÝ_add_fd ( £rv” -> fd , EPOLLIN , £rv”_acû±_ÿÎback , 311 £rv” , £rv”_de¡roy ) < 0) { 312 `þo£ ( £rv” -> fd ); 313 `ä“ ( £rv” ); 314  NULL ; 317  £rv” ; 318 } } 320  $Ý’_tý () 322  sockaddr_š addr ; 323  fd , Ýt = 1; 325 fd = `sock‘ ( PF_INET , SOCK_STREAM , 0); 326 ià( fd < 0) { 327 `³¼Ü ("Failedo open server socket"); 331 `£tsockÝt ( fd , SOL_SOCKET , SO_REUSEADDR , & Ýt , (opt)); 333 `mem£t (& addr , 0, (addr)); 334 addr . sš_çmžy = AF_INET ; 335 addr . sš_addr . s_addr = INADDR_ANY ; 336 addr . sš_addr . s_addr = `š‘_addr ("127.0.0.1"); 337 addr . sš_pÜt = `htÚs (45550); 339 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 340 `³¼Ü ("Failedo bind server socket"); 341 `þo£ ( fd ); 345 ià( `li¡’ ( fd , 5) < 0) { 346 `³¼Ü ("Failedo†isten server socket"); 347 `þo£ ( fd ); 351  fd ; 352 } } 354  £rv” * $£rv”_Ý’_tý ( £rv”_ty³ ty³ ) 356  £rv” *server; 358 £rv” = `m®loc ((*server)); 359 ià(! £rv” ) 360  £rv” ; 362 `mem£t ( £rv” , 0, (*server)); 363 £rv” -> ty³ =ype; 364 £rv” -> id = 0x43; 366 £rv” -> fd = `Ý’_tý (); 367 ià( £rv” -> fd < 0) { 368 `ä“ ( £rv” ); 369  NULL ; 372 ià( `mašloÝ_add_fd ( £rv” -> fd , EPOLLIN , £rv”_acû±_ÿÎback , 373 £rv” , £rv”_de¡roy ) < 0) { 374 `þo£ ( £rv” -> fd ); 375 `ä“ ( £rv” ); 376  NULL ; 379  £rv” ; 380 } } 382  $£rv”_þo£ ( £rv” *server) 384 ià(! £rv” ) 387 `mašloÝ_»move_fd ( £rv” -> fd ); 388 } } @emulator/server.h 25  ~<¡dšt.h > 27 e£rv”_ty³ { 28 mSERVER_TYPE_BREDRLE , 29 mSERVER_TYPE_BREDR , 30 mSERVER_TYPE_LE , 31 mSERVER_TYPE_AMP , 32 mSERVER_TYPE_MONITOR , 35  g£rv” ; 37  £rv” * £rv”_Ý’_unix ( £rv”_ty³ ty³ , cÚ¡ * ·th ); 38  £rv” * £rv”_Ý’_tý ( £rv”_ty³ ty³ ); 39  £rv”_þo£ ( £rv” *server); @emulator/smp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<ùy³.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 33  ~<”ºo.h > 34  ~<’dŸn.h > 35  ~<¡dboÞ.h > 36  ~ 38  ~"blu‘oÙh/blu‘oÙh.h " 39  ~"blu‘oÙh/hci.h " 41  ~"¤c/sh¬ed/utž.h " 42  ~"¤c/sh¬ed/üy±o.h " 43  ~"¤c/sh¬ed/ecc.h " 44  ~"mÚ™Ü/bt.h " 45  ~"btho¡.h " 47  #SMP_CID 0x0006 ) 48  #SMP_BREDR_CID 0x0007 ) 50  #SMP_PASSKEY_ENTRY_FAILED 0x01 ) 51  #SMP_OOB_NOT_AVAIL 0x02 ) 52  #SMP_AUTH_REQUIREMENTS 0x03 ) 53  #SMP_CONFIRM_FAILED 0x04 ) 54  #SMP_PAIRING_NOTSUPP 0x05 ) 55  #SMP_ENC_KEY_SIZE 0x06 ) 56  #SMP_CMD_NOTSUPP 0x07 ) 57  #SMP_UNSPECIFIED 0x08 ) 58  #SMP_REPEATED_ATTEMPTS 0x09 ) 59  #SMP_INVALID_PARAMS 0x0a ) 60  #SMP_DHKEY_CHECK_FAILED 0x0b ) 61  #SMP_NUMERIC_COMP_FAILED 0x0c ) 62  #SMP_BREDR_PAIRING_IN_PROGRESS 0x0d ) 64  #DIST_ENC_KEY 0x01 ) 65  #DIST_ID_KEY 0x02 ) 66  #DIST_SIGN 0x04 ) 67  #DIST_LINK_KEY 0x08 ) 69  #KEY_DIST ( DIST_ENC_KEY | DIST_ID_KEY | DIST_SIGN ) ) 71  #SC_NO_DIST ( DIST_ENC_KEY | DIST_LINK_KEY ) ) 73  #MAX_IO_CAP 0x04 ) 75  #SMP_AUTH_NONE 0x00 ) 76  #SMP_AUTH_BONDING 0x01 ) 77  #SMP_AUTH_MITM 0x04 ) 78  #SMP_AUTH_SC 0x08 ) 79  #SMP_AUTH_KEYPRESS 0x10 ) 81  ssmp { 82  btho¡ * mbtho¡ ; 83  smp_cÚn * mcÚn ; 84  bt_üy±o * müy±o ; 87  ssmp_cÚn { 88  smp * msmp ; 89 ušt16_t mhªdË ; 90 ušt8_t maddr_ty³ ; 91 boÞ mout ; 92 boÞ msc ; 93 boÞ mš™ŸtÜ ; 94 ušt8_t mm‘hod ; 95 ušt8_t mloÿl_key_di¡ ; 96 ušt8_t m»mÙe_key_di¡ ; 97 ušt8_t mŸ [6]; 98 ušt8_t mŸ_ty³ ; 99 ušt8_t m¿ [6]; 100 ušt8_t m¿_ty³ ; 101 ušt8_t mtk [16]; 102 ušt8_t m´nd [16]; 103 ušt8_t m¼nd [16]; 104 ušt8_t mpúf [16]; 105 ušt8_t m´eq [7]; 106 ušt8_t m´¥ [7]; 107 ušt8_t mÉk [16]; 109 ušt8_t mloÿl_sk [32]; 110 ušt8_t mloÿl_pk [64]; 111 ušt8_t m»mÙe_pk [64]; 112 ušt8_t mdhkey [32]; 113 ušt8_t mmackey [16]; 115 ušt8_t m·sskey_nÙify ; 116 ušt8_t m·sskey_round ; 120 mJUST_WORKS , 121 mJUST_CFM , 122 mREQ_PASSKEY , 123 mCFM_PASSKEY , 124 mREQ_OOB , 125 mDSP_PASSKEY , 126 mOVERLAP , 129 cÚ¡ ušt8_t gg’_m‘hod [5][5] = { 130 { JUST_WORKS , JUST_CFM , REQ_PASSKEY , JUST_WORKS, REQ_PASSKEY }, 131 { JUST_WORKS , JUST_CFM , REQ_PASSKEY , JUST_WORKS, REQ_PASSKEY }, 132 { CFM_PASSKEY , CFM_PASSKEY, REQ_PASSKEY , JUST_WORKS , CFM_PASSKEY }, 133 { JUST_WORKS , JUST_CFM , JUST_WORKS, JUST_WORKS, JUST_CFM }, 134 { CFM_PASSKEY , CFM_PASSKEY, REQ_PASSKEY , JUST_WORKS , OVERLAP }, 137 cÚ¡ ušt8_t gsc_m‘hod [5][5] = { 138 { JUST_WORKS , JUST_CFM , REQ_PASSKEY , JUST_WORKS, REQ_PASSKEY }, 139 { JUST_WORKS , CFM_PASSKEY , REQ_PASSKEY , JUST_WORKS, CFM_PASSKEY }, 140 { DSP_PASSKEY , DSP_PASSKEY, REQ_PASSKEY , JUST_WORKS , DSP_PASSKEY }, 141 { JUST_WORKS , JUST_CFM , JUST_WORKS, JUST_WORKS, JUST_CFM }, 142 { DSP_PASSKEY , CFM_PASSKEY , REQ_PASSKEY , JUST_WORKS , CFM_PASSKEY }, 145  ušt8_t $g‘_auth_m‘hod ( smp_cÚn * cÚn , ušt8_t loÿl_io , 146 ušt8_t »mÙe_io ) 151 ià( loÿl_io > MAX_IO_CAP || »mÙe_io > MAX_IO_CAP) 152  JUST_CFM ; 154 ià( cÚn -> sc ) 155  sc_m‘hod [ »mÙe_io ][ loÿl_io ]; 157  g’_m‘hod [ »mÙe_io ][ loÿl_io ]; 158 } } 160  ušt8_t $sc_£Ëù_m‘hod ( smp_cÚn * cÚn ) 162  bt_l2ÿp_smp_·œšg_»que¡ * loÿl , * »mÙe ; 163 ušt8_t loÿl_m™m , »mÙe_m™m , loÿl_io , »mÙe_io , m‘hod ; 165 ià( cÚn -> out ) { 166 loÿl = (*è& cÚn -> ´eq [1]; 167 »mÙe = (*è& cÚn -> ´¥ [1]; 169 loÿl = (*è& cÚn -> ´¥ [1]; 170 »mÙe = (*è& cÚn -> ´eq [1]; 173 loÿl_io = loÿl -> io_ÿ· ; 174 »mÙe_io = »mÙe -> io_ÿ· ; 176 loÿl_m™m = ( loÿl -> auth_»q & SMP_AUTH_MITM ); 177 »mÙe_m™m = ( »mÙe -> auth_»q & SMP_AUTH_MITM ); 182 ià( loÿl_m™m || »mÙe_m™m ) 183 m‘hod = `g‘_auth_m‘hod ( cÚn , loÿl_io , »mÙe_io ); 185 m‘hod = JUST_WORKS ; 188 ià( m‘hod =ð JUST_CFM && cÚn -> š™ŸtÜ ) 189 m‘hod = JUST_WORKS ; 191  m‘hod ; 192 } } 194  $smp_£nd ( smp_cÚn * cÚn , ušt8_t smp_cmd , cÚ¡ * d©a , 195 ušt8_t Ën ) 197  iovec iov [2]; 198 ušt16_t cid ; 200 iov [0]. iov_ba£ = & smp_cmd ; 201 iov [0]. iov_Ën = 1; 203 iov [1]. iov_ba£ = (*è d©a ; 204 iov [1]. iov_Ën = Ën ; 206 ià( cÚn -> addr_ty³ =ð BDADDR_BREDR ) 207 cid = SMP_BREDR_CID ; 209 cid = SMP_CID ; 211 `btho¡_£nd_cid_v ( cÚn -> smp -> btho¡ , cÚn-> hªdË , cid , iov , 2); 212 } } 214  boÞ $£nd_public_key ( smp_cÚn * cÚn ) 216 ià(! `ecc_make_key ( cÚn -> loÿl_pk , cÚn-> loÿl_sk )) 217  çl£ ; 219 `smp_£nd ( cÚn , BT_L2CAP_SMP_PUBLIC_KEY , cÚn-> loÿl_pk , 64); 221  Œue ; 222 } } 224  $sc_dhkey_check ( smp_cÚn * cÚn ) 226 ušt8_t io_ÿp [3], r [16], a [7], b [7], * loÿl_addr , * »mÙe_addr ; 227  bt_l2ÿp_smp_dhkey_check check ; 229 `memýy ( a , cÚn -> Ÿ , 6); 230 `memýy ( b , cÚn -> ¿ , 6); 231 a [6] = cÚn -> Ÿ_ty³ ; 232 b [6] = cÚn -> ¿_ty³ ; 234 ià( cÚn -> out ) { 235 loÿl_addr = a ; 236 »mÙe_addr = b ; 237 `memýy ( io_ÿp , & cÚn -> ´eq [1], 3); 239 loÿl_addr = b ; 240 »mÙe_addr = a ; 241 `memýy ( io_ÿp , & cÚn -> ´¥ [1], 3); 244 `mem£t ( r , 0, (r)); 246 `bt_üy±o_f6 ( cÚn -> smp -> üy±o , cÚn-> mackey , cÚn-> ´nd , cÚn-> ¼nd , 247 r , io_ÿp , loÿl_addr , »mÙe_addr , check . e ); 249 `smp_£nd ( cÚn , BT_L2CAP_SMP_DHKEY_CHECK , & check , (check)); 250 } } 252  $sc_mackey_ªd_Ék ( smp_cÚn * cÚn ) 254 ušt8_t * Ç , * nb , a [7], b [7]; 256 ià( cÚn -> out ) { 257 Ç = cÚn -> ´nd ; 258 nb = cÚn -> ¼nd ; 260 Ç = cÚn -> ¼nd ; 261 nb = cÚn -> ´nd ; 264 `memýy ( a , cÚn -> Ÿ , 6); 265 `memýy ( b , cÚn -> ¿ , 6); 266 a [6] = cÚn -> Ÿ_ty³ ; 267 b [6] = cÚn -> ¿_ty³ ; 269 `bt_üy±o_f5 ( cÚn -> smp -> üy±o , cÚn-> dhkey , Ç , nb , a , b , 270 cÚn -> mackey , cÚn-> Ék ); 271 } } 273  ušt8_t $sc_·sskey_£nd_cÚfœm ( smp_cÚn * cÚn ) 275  bt_l2ÿp_smp_·œšg_cÚfœm cfm ; 276 ušt8_t r ; 278 r = (( cÚn -> ·sskey_nÙify >> cÚn-> ·sskey_round ) & 0x01); 279 r |= 0x80; 281 ià(! `bt_üy±o_f4 ( cÚn -> smp -> üy±o , cÚn-> loÿl_pk , cÚn-> »mÙe_pk , 282 cÚn -> ´nd , r , cfm . v®ue )) 283  SMP_UNSPECIFIED ; 285 `smp_£nd ( cÚn , BT_L2CAP_SMP_PAIRING_CONFIRM , & cfm , (cfm)); 288 } } 290  ušt8_t $sc_·sskey_round ( smp_cÚn * cÚn , ušt8_t smp_Ý ) 292 ušt8_t cfm [16], r ; 295 ià( cÚn -> ·sskey_round >= 20) 298  smp_Ý ) { 299  BT_L2CAP_SMP_PAIRING_RANDOM : 300 r = (( cÚn -> ·sskey_nÙify >> cÚn-> ·sskey_round ) & 0x01); 301 r |= 0x80; 303 ià(! `bt_üy±o_f4 ( cÚn -> smp -> üy±o , cÚn-> »mÙe_pk , 304 cÚn -> loÿl_pk , cÚn-> ¼nd , r , cfm )) 305  SMP_UNSPECIFIED ; 307 ià( `memcmp ( cÚn -> púf , cfm , 16)) 308  SMP_CONFIRM_FAILED ; 310 cÚn -> ·sskey_round ++; 312 ià( cÚn -> ·sskey_round == 20) { 314 `sc_mackey_ªd_Ék ( cÚn ); 320 ià(! cÚn -> out ) { 321 `smp_£nd ( cÚn , BT_L2CAP_SMP_PAIRING_RANDOM , 322 cÚn -> ´nd , (conn->prnd)); 327 ià( cÚn -> ·sskey_round != 20) 328  `sc_·sskey_round ( cÚn , 0); 331 `sc_dhkey_check ( cÚn ); 335  BT_L2CAP_SMP_PAIRING_CONFIRM : 336 ià( cÚn -> out ) { 337 `smp_£nd ( cÚn , BT_L2CAP_SMP_PAIRING_RANDOM , 338 cÚn -> ´nd , (conn->prnd)); 342  `sc_·sskey_£nd_cÚfœm ( cÚn ); 344  BT_L2CAP_SMP_PUBLIC_KEY : 347 ià(! cÚn -> out ) 350  `sc_·sskey_£nd_cÚfœm ( cÚn ); 354 } } 356  boÞ $v”ify_¿ndom ( smp_cÚn * cÚn , cÚ¡ ušt8_t ºd [16]) 358 ušt8_t cÚfœm [16]; 360 ià(! `bt_üy±o_c1 ( cÚn -> smp -> üy±o , cÚn-> tk , cÚn-> ¼nd , cÚn-> ´¥ , 361 cÚn -> ´eq , cÚn-> Ÿ_ty³ , cÚn-> Ÿ , 362 cÚn -> ¿_ty³ , cÚn-> ¿ , cÚfœm )) 363  çl£ ; 365 ià( `memcmp ( cÚn -> púf , cÚfœm , (conn->pcnf) != 0)) { 366 `´štf ("Confirmation values don't match\n"); 367  çl£ ; 370 ià( cÚn -> out ) { 371 `bt_üy±o_s1 ( cÚn -> smp -> üy±o , cÚn-> tk , cÚn-> ¼nd , 372 cÚn -> ´nd , cÚn-> Ék ); 373 `btho¡_Ë_¡¬t_’üy± ( cÚn -> smp -> btho¡ , cÚn-> hªdË , 374 cÚn -> Ék ); 376 `bt_üy±o_s1 ( cÚn -> smp -> üy±o , cÚn-> tk , cÚn-> ´nd , 377 cÚn -> ¼nd , cÚn-> Ék ); 380  Œue ; 381 } } 383  $di¡ribu‹_keys ( smp_cÚn * cÚn ) 385 ušt8_t buf [16]; 387 ià( cÚn -> loÿl_key_di¡ & DIST_ENC_KEY ) { 388 `mem£t ( buf , 0, (buf)); 389 `smp_£nd ( cÚn , BT_L2CAP_SMP_ENCRYPT_INFO , buf , (buf)); 390 `smp_£nd ( cÚn , BT_L2CAP_SMP_MASTER_IDENT , buf , 10); 393 ià( cÚn -> loÿl_key_di¡ & DIST_ID_KEY ) { 394 `mem£t ( buf , 0, (buf)); 396 ià( cÚn -> out ) { 397 buf [0] = cÚn -> Ÿ_ty³ ; 398 `memýy (& buf [1], cÚn -> Ÿ , 6); 400 buf [0] = cÚn -> ¿_ty³ ; 401 `memýy (& buf [1], cÚn -> ¿ , 6); 403 `smp_£nd ( cÚn , BT_L2CAP_SMP_IDENT_ADDR_INFO , buf , 7); 405 `mem£t ( buf , 0, (buf)); 406 `smp_£nd ( cÚn , BT_L2CAP_SMP_IDENT_INFO , buf , (buf)); 409 ià( cÚn -> loÿl_key_di¡ & DIST_SIGN ) { 410 `mem£t ( buf , 0, (buf)); 411 `smp_£nd ( cÚn , BT_L2CAP_SMP_SIGNING_INFO , buf , (buf)); 413 } } 415  $·œšg_»q ( smp_cÚn * cÚn , cÚ¡ * d©a , ušt16_t Ën ) 417  btho¡ *btho¡ = cÚn -> smp ->bthost; 418  bt_l2ÿp_smp_·œšg_»¥Ú£ r¥ ; 420 `memýy ( cÚn -> ´eq , d©a , (conn->preq)); 422 ià( cÚn -> addr_ty³ =ð BDADDR_BREDR ) { 423 r¥ . io_ÿ· = 0x00; 424 r¥ . oob_d©a = 0x00; 425 r¥ . auth_»q = 0x00; 427 r¥ . io_ÿ· = `btho¡_g‘_io_ÿ·bž™y ( btho¡ ); 428 r¥ . oob_d©a = 0x00; 429 r¥ . auth_»q = `btho¡_g‘_auth_»q ( btho¡ ); 432 r¥ . max_key_size = 0x10; 433 r¥ . š™_key_di¡ = cÚn -> ´eq [5] & KEY_DIST ; 434 r¥ . »¥_key_di¡ = cÚn -> ´eq [6] & KEY_DIST ; 436 cÚn -> ´¥ [0] = BT_L2CAP_SMP_PAIRING_RESPONSE ; 437 `memýy (& cÚn -> ´¥ [1], & r¥ , (rsp)); 439 cÚn -> loÿl_key_di¡ = r¥ . »¥_key_di¡ ; 440 cÚn -> »mÙe_key_di¡ = r¥ . š™_key_di¡ ; 442 ià((( cÚn -> ´¥ [3] & 0x08è&& (cÚn-> ´eq [3] & 0x08)) || 443 cÚn -> addr_ty³ =ð BDADDR_BREDR ) { 444 cÚn -> sc = Œue ; 445 cÚn -> loÿl_key_di¡ &ð~ SC_NO_DIST ; 446 cÚn -> »mÙe_key_di¡ &ð~ SC_NO_DIST ; 449 `smp_£nd ( cÚn , BT_L2CAP_SMP_PAIRING_RESPONSE , & r¥ , (rsp)); 451 ià( cÚn -> addr_ty³ =ð BDADDR_BREDR ) 452 `di¡ribu‹_keys ( cÚn ); 453 } } 455  $·œšg_r¥ ( smp_cÚn * cÚn , cÚ¡ * d©a , ušt16_t Ën ) 457  smp *sm°ð cÚn ->smp; 458 ušt8_t cfm [16]; 460 `memýy ( cÚn -> ´¥ , d©a , (conn->prsp)); 462 cÚn -> loÿl_key_di¡ = cÚn-> ´¥ [5]; 463 cÚn -> »mÙe_key_di¡ = cÚn-> ´¥ [6]; 465 ià((( cÚn -> ´¥ [3] & 0x08è&& (cÚn-> ´eq [3] & 0x08)) || 466 cÚn -> addr_ty³ =ð BDADDR_BREDR ) { 467 cÚn -> sc = Œue ; 468 cÚn -> loÿl_key_di¡ &ð~ SC_NO_DIST ; 469 cÚn -> »mÙe_key_di¡ &ð~ SC_NO_DIST ; 470 ià( cÚn -> addr_ty³ =ð BDADDR_BREDR ) 471 `di¡ribu‹_keys ( cÚn ); 473 `£nd_public_key ( cÚn ); 477 `bt_üy±o_c1 ( smp -> üy±o , cÚn -> tk , cÚn-> ´nd , cÚn-> ´¥ , 478 cÚn -> ´eq , cÚn-> Ÿ_ty³ , cÚn-> Ÿ , 479 cÚn -> ¿_ty³ , cÚn-> ¿ , cfm ); 481 `smp_£nd ( cÚn , BT_L2CAP_SMP_PAIRING_CONFIRM , cfm , (cfm)); 482 } } 483  $sc_check_cÚfœm ( smp_cÚn * cÚn ) 485 ià( cÚn -> m‘hod =ð REQ_PASSKEY || cÚn->m‘hod =ð DSP_PASSKEY ) { 486 `sc_·sskey_round ( cÚn , BT_L2CAP_SMP_PAIRING_CONFIRM ); 490 ià( cÚn -> out ) 491 `smp_£nd ( cÚn , BT_L2CAP_SMP_PAIRING_RANDOM , cÚn-> ´nd , 492 ( cÚn -> ´nd )); 493 } } 495  $·œšg_cfm ( smp_cÚn * cÚn , cÚ¡ * d©a , ušt16_t Ën ) 497 ušt8_t r¥ [16]; 499 `memýy ( cÚn -> púf , d©a + 1, 16); 501 ià( cÚn -> sc ) { 502 `sc_check_cÚfœm ( cÚn ); 506 ià( cÚn -> out ) { 507 `mem£t ( r¥ , 0, (rsp)); 508 `smp_£nd ( cÚn , BT_L2CAP_SMP_PAIRING_RANDOM , r¥ , (rsp)); 510 `bt_üy±o_c1 ( cÚn -> smp -> üy±o , cÚn-> tk , cÚn-> ´nd , 511 cÚn -> ´¥ , cÚn-> ´eq , cÚn-> Ÿ_ty³ , 512 cÚn -> Ÿ , cÚn-> ¿_ty³ , cÚn-> ¿ , r¥ ); 513 `smp_£nd ( cÚn , BT_L2CAP_SMP_PAIRING_CONFIRM , r¥ , (rsp)); 515 } } 517  ušt8_t $sc_¿ndom ( smp_cÚn * cÚn ) 520 ià( cÚn -> m‘hod =ð REQ_PASSKEY || cÚn->m‘hod =ð DSP_PASSKEY ) 521  `sc_·sskey_round ( cÚn , BT_L2CAP_SMP_PAIRING_RANDOM ); 523 ià( cÚn -> out ) { 524 ušt8_t cfm [16]; 526 `bt_üy±o_f4 ( cÚn -> smp -> üy±o , cÚn-> »mÙe_pk , 527 cÚn -> loÿl_pk , cÚn-> ¼nd , 0, cfm ); 529 ià( `memcmp ( cÚn -> púf , cfm , 16)) 532 `smp_£nd ( cÚn , BT_L2CAP_SMP_PAIRING_RANDOM , cÚn-> ´nd , 16); 535 `sc_mackey_ªd_Ék ( cÚn ); 537 ià( cÚn -> out ) 538 `sc_dhkey_check ( cÚn ); 541 } } 543  $·œšg_ºd ( smp_cÚn * cÚn , cÚ¡ * d©a , ušt16_t Ën ) 545 ušt8_t r¥ [16]; 547 `memýy ( cÚn -> ¼nd , d©a + 1, 16); 549 ià( cÚn -> sc ) { 550 ušt8_t »asÚ = `sc_¿ndom ( cÚn ); 551 ià( »asÚ ) 552 `smp_£nd ( cÚn , BT_L2CAP_SMP_PAIRING_FAILED , & »asÚ , 553 ( »asÚ )); 557 ià(! `v”ify_¿ndom ( cÚn , d©a + 1)) 560 ià( cÚn -> out ) 563 `mem£t ( r¥ , 0, (rsp)); 564 `smp_£nd ( cÚn , BT_L2CAP_SMP_PAIRING_RANDOM , r¥ , (rsp)); 565 } } 567  $’üy±_šfo ( smp_cÚn * cÚn , cÚ¡ * d©a , ušt16_t Ën ) 569 } } 571  $ma¡”_id’t ( smp_cÚn * cÚn , cÚ¡ * d©a , ušt16_t Ën ) 573 cÚn -> »mÙe_key_di¡ &ð~ DIST_ENC_KEY ; 575 ià( cÚn -> out && !cÚn-> »mÙe_key_di¡ ) 576 `di¡ribu‹_keys ( cÚn ); 577 } } 579  $id’t_addr_šfo ( smp_cÚn * cÚn , cÚ¡ * d©a , 580 ušt16_t Ën ) 582 } } 584  $id’t_šfo ( smp_cÚn * cÚn , cÚ¡ * d©a , ušt16_t Ën ) 586 cÚn -> »mÙe_key_di¡ &ð~ DIST_ID_KEY ; 588 ià( cÚn -> out && !cÚn-> »mÙe_key_di¡ ) 589 `di¡ribu‹_keys ( cÚn ); 590 } } 592  $signšg_šfo ( smp_cÚn * cÚn , cÚ¡ * d©a , ušt16_t Ën ) 594 cÚn -> »mÙe_key_di¡ &ð~ DIST_SIGN ; 596 ià( cÚn -> out && !cÚn-> »mÙe_key_di¡ ) 597 `di¡ribu‹_keys ( cÚn ); 598 } } 600  $public_key ( smp_cÚn * cÚn , cÚ¡ * d©a , ušt16_t Ën ) 602  smp *sm°ð cÚn ->smp; 603 ušt8_t buf [16]; 605 `memýy ( cÚn -> »mÙe_pk , d©a + 1, 64); 607 ià(! cÚn -> out ) { 608 ià(! `£nd_public_key ( cÚn )) 612 ià(! `ecdh_sh¬ed_£ü‘ ( cÚn -> »mÙe_pk , cÚn-> loÿl_sk , cÚn-> dhkey )) 615 cÚn -> m‘hod = `sc_£Ëù_m‘hod (conn); 617 ià( cÚn -> m‘hod =ð DSP_PASSKEY || cÚn->m‘hod =ð REQ_PASSKEY ) { 618 `sc_·sskey_round ( cÚn , BT_L2CAP_SMP_PUBLIC_KEY ); 622 ià( cÚn -> out ) 625 ià(! `bt_üy±o_f4 ( smp -> üy±o , cÚn -> loÿl_pk , cÚn-> »mÙe_pk , 626 cÚn -> ´nd , 0, buf )) 629 `smp_£nd ( cÚn , BT_L2CAP_SMP_PAIRING_CONFIRM , buf , (buf)); 630 } } 632  $dhkey_check ( smp_cÚn * cÚn , cÚ¡ * d©a , ušt16_t Ën ) 634 cÚ¡  bt_l2ÿp_smp_dhkey_check * cmd = d©a + 1; 635 ušt8_t a [7], b [7], * loÿl_addr , * »mÙe_addr ; 636 ušt8_t io_ÿp [3], r [16], e [16]; 638 `memýy ( a , & cÚn -> Ÿ , 6); 639 `memýy ( b , & cÚn -> ¿ , 6); 640 a [6] = cÚn -> Ÿ_ty³ ; 641 b [6] = cÚn -> ¿_ty³ ; 643 ià( cÚn -> out ) { 644 loÿl_addr = a ; 645 »mÙe_addr = b ; 646 `memýy ( io_ÿp , & cÚn -> ´¥ [1], 3); 648 loÿl_addr = b ; 649 »mÙe_addr = a ; 650 `memýy ( io_ÿp , & cÚn -> ´eq [1], 3); 653 `mem£t ( r , 0, (r)); 655 ià( cÚn -> m‘hod =ð REQ_PASSKEY || cÚn->m‘hod =ð DSP_PASSKEY ) 656 `put_Ë32 ( cÚn -> ·sskey_nÙify , r ); 658 ià(! `bt_üy±o_f6 ( cÚn -> smp -> üy±o , cÚn-> mackey , cÚn-> ¼nd , 659 cÚn -> ´nd , r , io_ÿp , »mÙe_addr , loÿl_addr , e )) 662 ià( `memcmp ( cmd -> e ,ƒ, 16)) { 663 ušt8_t »asÚ = 0x0b; 664 `smp_£nd ( cÚn , BT_L2CAP_SMP_PAIRING_FAILED , & »asÚ , 665 ( »asÚ )); 668 ià( cÚn -> out ) 669 `btho¡_Ë_¡¬t_’üy± ( cÚn -> smp -> btho¡ , cÚn-> hªdË , 670 cÚn -> Ék ); 672 `sc_dhkey_check ( cÚn ); 673 } } 675  $smp_·œ (* cÚn_d©a , ušt8_t io_ÿp , ušt8_ˆ auth_»q ) 677  smp_cÚn * cÚn = cÚn_d©a ; 678  bt_l2ÿp_smp_·œšg_»que¡ »q ; 680 »q . io_ÿ· = io_ÿp ; 681 »q . oob_d©a = 0x00; 682 »q . auth_»q =‡uth_req; 683 »q . max_key_size = 0x10; 684 »q . š™_key_di¡ = KEY_DIST ; 685 »q . »¥_key_di¡ = KEY_DIST ; 687 cÚn -> ´eq [0] = BT_L2CAP_SMP_PAIRING_REQUEST ; 688 `memýy (& cÚn -> ´eq [1], & »q , (req)); 690 `smp_£nd ( cÚn , BT_L2CAP_SMP_PAIRING_REQUEST , & »q , (req)); 691 } } 693  $smp_d©a (* cÚn_d©a , cÚ¡ * d©a , ušt16_t Ën ) 695  smp_cÚn * cÚn = cÚn_d©a ; 696 ušt8_t Ýcode ; 698 ià( Ën < 1) { 699 `´štf ("Receivedoo small SMP PDU\n"); 703 ià( cÚn -> addr_ty³ =ð BDADDR_BREDR ) { 704 `´štf ("Received BR/EDR SMP data on LE†ink\n"); 708 Ýcode = *((cÚ¡ ušt8_t *è d©a ); 710  Ýcode ) { 711  BT_L2CAP_SMP_PAIRING_REQUEST : 712 `·œšg_»q ( cÚn , d©a , Ën ); 714  BT_L2CAP_SMP_PAIRING_RESPONSE : 715 `·œšg_r¥ ( cÚn , d©a , Ën ); 717  BT_L2CAP_SMP_PAIRING_CONFIRM : 718 `·œšg_cfm ( cÚn , d©a , Ën ); 720  BT_L2CAP_SMP_PAIRING_RANDOM : 721 `·œšg_ºd ( cÚn , d©a , Ën ); 723  BT_L2CAP_SMP_ENCRYPT_INFO : 724 `’üy±_šfo ( cÚn , d©a , Ën ); 726  BT_L2CAP_SMP_MASTER_IDENT : 727 `ma¡”_id’t ( cÚn , d©a , Ën ); 729  BT_L2CAP_SMP_IDENT_ADDR_INFO : 730 `id’t_addr_šfo ( cÚn , d©a , Ën ); 732  BT_L2CAP_SMP_IDENT_INFO : 733 `id’t_šfo ( cÚn , d©a , Ën ); 735  BT_L2CAP_SMP_SIGNING_INFO : 736 `signšg_šfo ( cÚn , d©a , Ën ); 738  BT_L2CAP_SMP_PUBLIC_KEY : 739 `public_key ( cÚn , d©a , Ën ); 741  BT_L2CAP_SMP_DHKEY_CHECK : 742 `dhkey_check ( cÚn , d©a , Ën ); 747 } } 749  $smp_b»dr_d©a (* cÚn_d©a , cÚ¡ * d©a , ušt16_t Ën ) 751  smp_cÚn * cÚn = cÚn_d©a ; 752 ušt8_t Ýcode ; 754 ià( Ën < 1) { 755 `´štf ("Receivedoo small SMP PDU\n"); 759 ià( cÚn -> addr_ty³ !ð BDADDR_BREDR ) { 760 `´štf ("Received LE SMP data on BR/EDR†ink\n"); 764 Ýcode = *((cÚ¡ ušt8_t *è d©a ); 766  Ýcode ) { 767  BT_L2CAP_SMP_PAIRING_REQUEST : 768 `·œšg_»q ( cÚn , d©a , Ën ); 770  BT_L2CAP_SMP_PAIRING_RESPONSE : 771 `·œšg_r¥ ( cÚn , d©a , Ën ); 776 } } 778  $smp_g‘_Ék (* smp_d©a , ušt64_t ¿nd , ušt16_t ediv , ušt8_t * Ék ) 780  smp_cÚn * cÚn = smp_d©a ; 781 cÚ¡ ušt8_t no_Ék [16] = { 0 }; 783 ià(! `memcmp ( cÚn -> Ék , no_Ék , 16)) 784  - ENOENT ; 786 `memýy ( Ék , cÚn ->ltk, 16); 789 } } 791  $smp_cÚn_’üy±ed (* cÚn_d©a , ušt8_t ’üy± ) 793  smp_cÚn * cÚn = cÚn_d©a ; 795 ià(! ’üy± ) 798 ià( cÚn -> out && cÚn-> »mÙe_key_di¡ ) 801 `di¡ribu‹_keys ( cÚn ); 802 } } 804 * $smp_cÚn_add (* smp_d©a , ušt16_t hªdË , cÚ¡ ušt8_t * Ÿ , 805 cÚ¡ ušt8_t * ¿ , ušt8_ˆ addr_ty³ , boÞ cÚn_š™ ) 807  smp *sm°ð smp_d©a ; 808  smp_cÚn * cÚn ; 810 cÚn = `m®loc (( smp_cÚn )); 811 ià(! cÚn ) 812  NULL ; 814 `mem£t ( cÚn , 0, (*conn)); 816 cÚn -> smp = smp; 817 cÚn -> hªdË = handle; 818 cÚn -> addr_ty³ =‡ddr_type; 819 cÚn -> out = cÚn_š™ ; 821 cÚn -> Ÿ_ty³ = LE_PUBLIC_ADDRESS ; 822 cÚn -> ¿_ty³ = LE_PUBLIC_ADDRESS ; 823 `memýy ( cÚn -> Ÿ , ia, 6); 824 `memýy ( cÚn -> ¿ ,„a, 6); 826  cÚn ; 827 } } 829  $smp_cÚn_d– (* cÚn_d©a ) 831  smp_cÚn * cÚn = cÚn_d©a ; 833 `ä“ ( cÚn ); 834 } } 836 * $smp_¡¬t ( btho¡ *bthost) 838  smp *smp; 840 smp = `m®loc ((smp)); 841 ià(! smp ) 842  NULL ; 844 `mem£t ( smp , 0, (*smp)); 846 smp -> üy±o = `bt_üy±o_Ãw (); 847 ià(! smp -> üy±o ) { 848 `ä“ ( smp ); 849  NULL ; 852 smp -> btho¡ = bthost; 854  smp ; 855 } } 857  $smp_¡Ý (* smp_d©a ) 859  smp *sm°ð smp_d©a ; 861 `bt_üy±o_uÄef ( smp -> üy±o ); 863 `ä“ ( smp ); 864 } } @emulator/vhci.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 36  ~ 37  ~ 39  ~"mÚ™Ü/mašloÝ.h " 40  ~"mÚ™Ü/bt.h " 41  ~"btdev.h " 42  ~"vhci.h " 44  #unš™Ÿlized_v¬ ( x èx = ) x 46  svhci { 47 vhci_ty³ mty³ ; 48  mfd ; 49  btdev * mbtdev ; 52  $vhci_de¡roy (* u£r_d©a ) 54  vhci *vhc˜ð u£r_d©a ; 56 `btdev_de¡roy ( vhci -> btdev ); 58 `þo£ ( vhci -> fd ); 60 `ä“ ( vhci ); 61 } } 63  $vhci_wr™e_ÿÎback (cÚ¡  iovec * iov ,  iovËn , 64 * u£r_d©a ) 66  vhci *vhc˜ð u£r_d©a ; 67 ssize_t wr™‹n ; 69 wr™‹n = `wr™ev ( vhci -> fd , iov , iovËn ); 70 ià( wr™‹n < 0) 72 } } 74  $vhci_»ad_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 76  vhci *vhc˜ð u£r_d©a ; 77  buf [4096]; 78 ssize_t Ën ; 80 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) 83 Ën = `»ad ( vhci -> fd , buf , (buf)); 84 ià( Ën < 1) 87  buf [0]) { 88  BT_H4_CMD_PKT : 89  BT_H4_ACL_PKT : 90  BT_H4_SCO_PKT : 91 `btdev_»ûive_h4 ( vhci -> btdev , buf , Ën ); 94 } } 96  vhci * $vhci_Ý’ ( vhci_ty³ ty³ ) 98  vhci *vhci; 99 btdev_ty³ `unš™Ÿlized_v¬ (btdev_type); 100  `unš™Ÿlized_v¬ ( ù¾_ty³ ); 101  £tup_cmd [2]; 102  ušt8_t id = 0x23; 104  ty³ ) { 105  VHCI_TYPE_BREDRLE : 106 btdev_ty³ = BTDEV_TYPE_BREDRLE ; 107 ù¾_ty³ = HCI_BREDR ; 109  VHCI_TYPE_BREDR : 110 btdev_ty³ = BTDEV_TYPE_BREDR ; 111 ù¾_ty³ = HCI_BREDR ; 113  VHCI_TYPE_LE : 114 btdev_ty³ = BTDEV_TYPE_LE ; 115 ù¾_ty³ = HCI_BREDR ; 117  VHCI_TYPE_AMP : 118 btdev_ty³ = BTDEV_TYPE_AMP ; 119 ù¾_ty³ = HCI_AMP ; 123 vhci = `m®loc ((*vhci)); 124 ià(! vhci ) 125  NULL ; 127 `mem£t ( vhci , 0, (*vhci)); 128 vhci -> ty³ =ype; 130 vhci -> fd = `Ý’ ("/dev/vhci", O_RDWR | O_NONBLOCK ); 131 ià( vhci -> fd < 0) { 132 `ä“ ( vhci ); 133  NULL ; 136 £tup_cmd [0] = HCI_VENDOR_PKT ; 137 £tup_cmd [1] = ù¾_ty³ ; 139 ià( `wr™e ( vhci -> fd , £tup_cmd , (setup_cmd)) < 0) { 140 `þo£ ( vhci -> fd ); 141 `ä“ ( vhci ); 142  NULL ; 145 vhci -> btdev = `btdev_ü—‹ ( btdev_ty³ , id ++); 146 ià(! vhci -> btdev ) { 147 `þo£ ( vhci -> fd ); 148 `ä“ ( vhci ); 149  NULL ; 152 `btdev_£t_£nd_hªdËr ( vhci -> btdev , vhci_wr™e_ÿÎback , vhci); 154 ià( `mašloÝ_add_fd ( vhci -> fd , EPOLLIN , vhci_»ad_ÿÎback , 155 vhci , vhci_de¡roy ) < 0) { 156 `btdev_de¡roy ( vhci -> btdev ); 157 `þo£ ( vhci -> fd ); 158 `ä“ ( vhci ); 159  NULL ; 162  vhci ; 163 } } 165  $vhci_þo£ ( vhci *vhci) 167 ià(! vhci ) 170 `mašloÝ_»move_fd ( vhci -> fd ); 171 } } @emulator/vhci.h 25  ~<¡dšt.h > 27 evhci_ty³ { 28 mVHCI_TYPE_BREDRLE , 29 mVHCI_TYPE_BREDR , 30 mVHCI_TYPE_LE , 31 mVHCI_TYPE_AMP , 34  gvhci ; 36  vhci * vhci_Ý’ ( vhci_ty³ ty³ ); 37  vhci_þo£ ( vhci *vhci); @gdbus/client.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~ 30  ~ 32  ~"gdbus.h " 34  #METHOD_CALL_TIMEOUT (300 * 1000) ) 36 #iâdeà DBUS_INTERFACE_OBJECT_MANAGER 37  #DBUS_INTERFACE_OBJECT_MANAGER DBUS_INTERFACE_DBUS ".ObjeùMªag”" ) 40  sGDBusCl›Á { 41  m»f_couÁ ; 42 DBusCÚÃùiÚ * mdbus_cÚn ; 43 * m£rviû_Çme ; 44 * mba£_·th ; 45 gušt mw©ch ; 46 gušt madded_w©ch ; 47 gušt m»moved_w©ch ; 48 GPŒA¼ay * mm©ch_ruËs ; 49 DBusP’dšgC®l * m³ndšg_ÿÎ ; 50 DBusP’dšgC®l * mg‘_objeùs_ÿÎ ; 51 GDBusW©chFunùiÚ mcÚÃù_func ; 52 * mcÚÃù_d©a ; 53 GDBusW©chFunùiÚ mdiscÚn_func ; 54 gboÞ—n mcÚÃùed ; 55 * mdiscÚn_d©a ; 56 GDBusMes§geFunùiÚ msigÇl_func ; 57 * msigÇl_d©a ; 58 GDBusProxyFunùiÚ m´oxy_added ; 59 GDBusProxyFunùiÚ m´oxy_»moved ; 60 GDBusCl›ÁFunùiÚ m»ady ; 61 * m»ady_d©a ; 62 GDBusPrÝ”tyFunùiÚ m´Ý”ty_chªged ; 63 * mu£r_d©a ; 64 GLi¡ * m´oxy_li¡ ; 67  sGDBusProxy { 68  m»f_couÁ ; 69 GDBusCl›Á * mþ›Á ; 70 * mobj_·th ; 71 * mš‹rçû ; 72 GHashTabË * m´Ý_li¡ ; 73 gušt mw©ch ; 74 GDBusPrÝ”tyFunùiÚ m´Ý_func ; 75 * m´Ý_d©a ; 76 GDBusProxyFunùiÚ m»moved_func ; 77 * m»moved_d©a ; 80  s´Ý_’Œy { 81 * mÇme ; 82  mty³ ; 83 DBusMes§ge * mmsg ; 86  $modify_m©ch_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 88 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 89 DBusE¼Ü ”rÜ ; 91 `dbus_”rÜ_š™ (& ”rÜ ); 93 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , »¶y è=ð TRUE ) 94 `dbus_”rÜ_ä“ (& ”rÜ ); 96 `dbus_mes§ge_uÄef ( »¶y ); 97 } } 99  gboÞ—n $modify_m©ch ( DBusCÚÃùiÚ * cÚn , cÚ¡ * memb” , 100 cÚ¡ * ruË ) 102 DBusMes§ge * msg ; 103 DBusP’dšgC®l * ÿÎ ; 105 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( DBUS_SERVICE_DBUS , DBUS_PATH_DBUS , 106 DBUS_INTERFACE_DBUS , memb” ); 107 ià( msg =ð NULL ) 108  FALSE ; 110 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_STRING , & ruË , 111 DBUS_TYPE_INVALID ); 113 ià( `g_dbus_£nd_mes§ge_w™h_»¶y ( cÚn , msg , & ÿÎ , -1è=ð FALSE ) { 114 `dbus_mes§ge_uÄef ( msg ); 115  FALSE ; 118 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , modify_m©ch_»¶y , NULL , NULL); 119 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 121 `dbus_mes§ge_uÄef ( msg ); 123  TRUE ; 124 } } 126  $™”_­³nd_™” ( DBusMes§geI‹r * ba£ , DBusMes§geI‹¸* ™” ) 128  ty³ ; 130 ty³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” ); 132 ià( `dbus_ty³_is_basic ( ty³ )) { 133 cÚ¡ * v®ue ; 135 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 136 `dbus_mes§ge_™”_­³nd_basic ( ba£ , ty³ , & v®ue ); 137 } ià( `dbus_ty³_is_cÚš” ( ty³ )) { 138 DBusMes§geI‹r ™”_sub , ba£_sub ; 139 * sig ; 141 `dbus_mes§ge_™”_»cur£ ( ™” , & ™”_sub ); 143  ty³ ) { 144  DBUS_TYPE_ARRAY : 145  DBUS_TYPE_VARIANT : 146 sig = `dbus_mes§ge_™”_g‘_sigÇtu» (& ™”_sub ); 149 sig = NULL ; 153 `dbus_mes§ge_™”_Ý’_cÚš” ( ba£ , ty³ , sig , & ba£_sub ); 155 ià( sig !ð NULL ) 156 `dbus_ä“ ( sig ); 158  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™”_sub ) != 159 DBUS_TYPE_INVALID ) { 160 `™”_­³nd_™” (& ba£_sub , & ™”_sub ); 161 `dbus_mes§ge_™”_Ãxt (& ™”_sub ); 164 `dbus_mes§ge_™”_þo£_cÚš” ( ba£ , & ba£_sub ); 166 } } 168  $´Ý_’Œy_upd©e ( ´Ý_’Œy * ´Ý , DBusMes§geI‹r * ™” ) 170 DBusMes§ge * msg ; 171 DBusMes§geI‹r ba£ ; 173 msg = `dbus_mes§ge_Ãw ( DBUS_MESSAGE_TYPE_METHOD_RETURN ); 174 ià( msg =ð NULL ) 177 `dbus_mes§ge_™”_š™_­³nd ( msg , & ba£ ); 178 `™”_­³nd_™” (& ba£ , ™” ); 180 ià( ´Ý -> msg !ð NULL ) 181 `dbus_mes§ge_uÄef ( ´Ý -> msg ); 183 ´Ý -> msg = `dbus_mes§ge_cÝy (msg); 184 `dbus_mes§ge_uÄef ( msg ); 185 } } 187  ´Ý_’Œy * $´Ý_’Œy_Ãw (cÚ¡ * Çme , 188 DBusMes§geI‹r * ™” ) 190  ´Ý_’Œy * ´Ý ; 192 ´Ý = `g_Œy_Ãw0 ( ´Ý_’Œy , 1); 193 ià( ´Ý =ð NULL ) 194  NULL ; 196 ´Ý -> Çme = `g_¡rdup (name); 197 ´Ý -> ty³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” ); 199 `´Ý_’Œy_upd©e ( ´Ý , ™” ); 201  ´Ý ; 202 } } 204  $´Ý_’Œy_ä“ ( gpoš‹r d©a ) 206  ´Ý_’Œy * ´Ý = d©a ; 208 ià( ´Ý -> msg !ð NULL ) 209 `dbus_mes§ge_uÄef ( ´Ý -> msg ); 211 `g_ä“ ( ´Ý -> Çme ); 213 `g_ä“ ( ´Ý ); 214 } } 216  $add_´Ý”ty ( GDBusProxy * ´oxy , cÚ¡ * Çme , 217 DBusMes§geI‹r * ™” , gboÞ—n £nd_chªged ) 219 GDBusCl›Á * þ›Á = ´oxy ->client; 220 DBusMes§geI‹r v®ue ; 221  ´Ý_’Œy * ´Ý ; 223 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_VARIANT ) 226 `dbus_mes§ge_™”_»cur£ ( ™” , & v®ue ); 228 ´Ý = `g_hash_bË_lookup ( ´oxy -> ´Ý_li¡ , Çme ); 229 ià( ´Ý !ð NULL ) { 230 `´Ý_’Œy_upd©e ( ´Ý , & v®ue ); 231  dÚe ; 234 ´Ý = `´Ý_’Œy_Ãw ( Çme , & v®ue ); 235 ià( ´Ý =ð NULL ) 238 `g_hash_bË_»¶aû ( ´oxy -> ´Ý_li¡ , ´Ý -> Çme ,…rop); 240 dÚe : 241 ià( ´oxy -> ´Ý_func ) 242 ´oxy -> `´Ý_func Õroxy, Çme , & v®ue ,…roxy-> ´Ý_d©a ); 244 ià( þ›Á =ð NULL || £nd_chªged =ð FALSE ) 247 ià( þ›Á -> ´Ý”ty_chªged ) 248 þ›Á -> `´Ý”ty_chªged ( ´oxy , Çme , & v®ue , 249 þ›Á -> u£r_d©a ); 250 } } 252  $upd©e_´Ý”t›s ( GDBusProxy * ´oxy , DBusMes§geI‹r * ™” , 253 gboÞ—n £nd_chªged ) 255 DBusMes§geI‹r diù ; 257 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY ) 260 `dbus_mes§ge_™”_»cur£ ( ™” , & diù ); 262  `dbus_mes§ge_™”_g‘_¬g_ty³ (& diù è=ð DBUS_TYPE_DICT_ENTRY ) { 263 DBusMes§geI‹r ’Œy ; 264 cÚ¡ * Çme ; 266 `dbus_mes§ge_™”_»cur£ (& diù , & ’Œy ); 268 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy è!ð DBUS_TYPE_STRING ) 271 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & Çme ); 272 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 274 `add_´Ý”ty ( ´oxy , Çme , & ’Œy , £nd_chªged ); 276 `dbus_mes§ge_™”_Ãxt (& diù ); 278 } } 280  $g‘_®l_´Ý”t›s_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 282 GDBusProxy * ´oxy = u£r_d©a ; 283 GDBusCl›Á * þ›Á = ´oxy ->client; 284 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 285 DBusMes§geI‹r ™” ; 286 DBusE¼Ü ”rÜ ; 288 `dbus_”rÜ_š™ (& ”rÜ ); 290 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , »¶y è=ð TRUE ) { 291 `dbus_”rÜ_ä“ (& ”rÜ ); 292  dÚe ; 295 `dbus_mes§ge_™”_š™ ( »¶y , & ™” ); 297 `upd©e_´Ý”t›s ( ´oxy , & ™” , FALSE ); 299 dÚe : 300 ià( `g_li¡_fšd ( þ›Á -> ´oxy_li¡ , ´oxy è=ð NULL ) { 301 ià( þ›Á -> ´oxy_added ) 302 þ›Á -> `´oxy_added ( ´oxy , cl›Á-> u£r_d©a ); 304 þ›Á -> ´oxy_li¡ = `g_li¡_­³nd (þ›Á->´oxy_li¡, ´oxy ); 307 `dbus_mes§ge_uÄef ( »¶y ); 309 `g_dbus_þ›Á_uÄef ( þ›Á ); 310 } } 312  $g‘_®l_´Ý”t›s ( GDBusProxy * ´oxy ) 314 GDBusCl›Á * þ›Á = ´oxy ->client; 315 cÚ¡ * £rviû_Çme = þ›Á ->service_name; 316 DBusMes§ge * msg ; 317 DBusP’dšgC®l * ÿÎ ; 319 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( £rviû_Çme , ´oxy -> obj_·th , 320 DBUS_INTERFACE_PROPERTIES , "GetAll"); 321 ià( msg =ð NULL ) 324 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_STRING , & ´oxy -> š‹rçû , 325 DBUS_TYPE_INVALID ); 327 ià( `g_dbus_£nd_mes§ge_w™h_»¶y ( þ›Á -> dbus_cÚn , msg , 328 & ÿÎ , -1è=ð FALSE ) { 329 `dbus_mes§ge_uÄef ( msg ); 333 `g_dbus_þ›Á_»f ( þ›Á ); 335 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , g‘_®l_´Ý”t›s_»¶y , 336 ´oxy , NULL ); 337 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 339 `dbus_mes§ge_uÄef ( msg ); 340 } } 342  GDBusProxy * $´oxy_lookup ( GDBusCl›Á * þ›Á , cÚ¡ * ·th , 343 cÚ¡ * š‹rçû ) 345 GLi¡ * li¡ ; 347  li¡ = `g_li¡_fœ¡ ( þ›Á -> ´oxy_li¡ );†ist; 348 li¡ = `g_li¡_Ãxt (list)) { 349 GDBusProxy * ´oxy = li¡ -> d©a ; 351 ià( `g_¡r_equ® ( ´oxy -> š‹rçû , iÁ”çûè=ð TRUE && 352 `g_¡r_equ® ( ´oxy -> obj_·th , ·th è=ð TRUE ) 353  ´oxy ; 356  NULL ; 357 } } 359  gboÞ—n $´Ý”t›s_chªged ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 360 * u£r_d©a ) 362 GDBusProxy * ´oxy = u£r_d©a ; 363 GDBusCl›Á * þ›Á = ´oxy ->client; 364 DBusMes§geI‹r ™” , ’Œy ; 365 cÚ¡ * š‹rçû ; 367 ià( `dbus_mes§ge_™”_š™ ( msg , & ™” è=ð FALSE ) 368  TRUE ; 370 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_STRING ) 371  TRUE ; 373 `dbus_mes§ge_™”_g‘_basic (& ™” , & š‹rçû ); 374 `dbus_mes§ge_™”_Ãxt (& ™” ); 376 `upd©e_´Ý”t›s ( ´oxy , & ™” , TRUE ); 378 `dbus_mes§ge_™”_Ãxt (& ™” ); 380 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_ARRAY ) 381  TRUE ; 383 `dbus_mes§ge_™”_»cur£ (& ™” , & ’Œy ); 385  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy è=ð DBUS_TYPE_STRING ) { 386 cÚ¡ * Çme ; 388 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & Çme ); 390 `g_hash_bË_»move ( ´oxy -> ´Ý_li¡ , Çme ); 392 ià( ´oxy -> ´Ý_func ) 393 ´oxy -> `´Ý_func Õroxy, Çme , NULL ,…roxy-> ´Ý_d©a ); 395 ià( þ›Á -> ´Ý”ty_chªged ) 396 þ›Á -> `´Ý”ty_chªged ( ´oxy , Çme , NULL , 397 þ›Á -> u£r_d©a ); 399 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 402  TRUE ; 403 } } 405  GDBusProxy * $´oxy_Ãw ( GDBusCl›Á * þ›Á , cÚ¡ * ·th , 406 cÚ¡ * š‹rçû ) 408 GDBusProxy * ´oxy ; 410 ´oxy = `g_Œy_Ãw0 ( GDBusProxy , 1); 411 ià( ´oxy =ð NULL ) 412  NULL ; 414 ´oxy -> þ›Á = client; 415 ´oxy -> obj_·th = `g_¡rdup ( ·th ); 416 ´oxy -> š‹rçû = `g_¡rdup (interface); 418 ´oxy -> ´Ý_li¡ = `g_hash_bË_Ãw_fuÎ ( g_¡r_hash , g_¡r_equ® , 419 NULL , ´Ý_’Œy_ä“ ); 420 ´oxy -> w©ch = `g_dbus_add_´Ý”t›s_w©ch ( þ›Á -> dbus_cÚn , 421 þ›Á -> £rviû_Çme , 422 ´oxy -> obj_·th , 423 ´oxy -> š‹rçû , 424 ´Ý”t›s_chªged , 425 ´oxy , NULL ); 427  `g_dbus_´oxy_»f ( ´oxy ); 428 } } 430  $´oxy_ä“ ( gpoš‹r d©a ) 432 GDBusProxy * ´oxy = d©a ; 434 ià( ´oxy -> þ›Á ) { 435 GDBusCl›Á * þ›Á = ´oxy ->client; 437 ià( þ›Á -> ´oxy_»moved ) 438 þ›Á -> `´oxy_»moved ( ´oxy , cl›Á-> u£r_d©a ); 440 `g_dbus_»move_w©ch ( þ›Á -> dbus_cÚn , ´oxy -> w©ch ); 442 `g_hash_bË_»move_®l ( ´oxy -> ´Ý_li¡ ); 444 ´oxy -> þ›Á = NULL ; 447 ià( ´oxy -> »moved_func ) 448 ´oxy -> `»moved_func Õroxy,…roxy-> »moved_d©a ); 450 `g_dbus_´oxy_uÄef ( ´oxy ); 451 } } 453  $´oxy_»move ( GDBusCl›Á * þ›Á , cÚ¡ * ·th , 454 cÚ¡ * š‹rçû ) 456 GLi¡ * li¡ ; 458  li¡ = `g_li¡_fœ¡ ( þ›Á -> ´oxy_li¡ );†ist; 459 li¡ = `g_li¡_Ãxt (list)) { 460 GDBusProxy * ´oxy = li¡ -> d©a ; 462 ià( `g_¡r_equ® ( ´oxy -> š‹rçû , iÁ”çûè=ð TRUE && 463 `g_¡r_equ® ( ´oxy -> obj_·th , ·th è=ð TRUE ) { 464 þ›Á -> ´oxy_li¡ = 465 `g_li¡_d–‘e_lšk ( þ›Á -> ´oxy_li¡ , li¡ ); 466 `´oxy_ä“ ( ´oxy ); 470 } } 472 GDBusProxy * $g_dbus_´oxy_Ãw ( GDBusCl›Á * þ›Á , cÚ¡ * ·th , 473 cÚ¡ * š‹rçû ) 475 GDBusProxy * ´oxy ; 477 ià( þ›Á =ð NULL ) 478  NULL ; 480 ´oxy = `´oxy_lookup ( þ›Á , ·th , š‹rçû ); 481 ià( ´oxy ) 482  `g_dbus_´oxy_»f ( ´oxy ); 484 ´oxy = `´oxy_Ãw ( þ›Á , ·th , š‹rçû ); 485 ià( ´oxy =ð NULL ) 486  NULL ; 488 `g‘_®l_´Ý”t›s ( ´oxy ); 490  `g_dbus_´oxy_»f ( ´oxy ); 491 } } 493 GDBusProxy * $g_dbus_´oxy_»f ( GDBusProxy * ´oxy ) 495 ià( ´oxy =ð NULL ) 496  NULL ; 498 `__sync_ãtch_ªd_add (& ´oxy -> »f_couÁ , 1); 500  ´oxy ; 501 } } 503  $g_dbus_´oxy_uÄef ( GDBusProxy * ´oxy ) 505 ià( ´oxy =ð NULL ) 508 ià( `__sync_sub_ªd_ãtch (& ´oxy -> »f_couÁ , 1) > 0) 511 `g_hash_bË_de¡roy ( ´oxy -> ´Ý_li¡ ); 513 `g_ä“ ( ´oxy -> obj_·th ); 514 `g_ä“ ( ´oxy -> š‹rçû ); 516 `g_ä“ ( ´oxy ); 517 } } 519 cÚ¡ * $g_dbus_´oxy_g‘_·th ( GDBusProxy * ´oxy ) 521 ià( ´oxy =ð NULL ) 522  NULL ; 524  ´oxy -> obj_·th ; 525 } } 527 cÚ¡ * $g_dbus_´oxy_g‘_š‹rçû ( GDBusProxy * ´oxy ) 529 ià( ´oxy =ð NULL ) 530  NULL ; 532  ´oxy -> š‹rçû ; 533 } } 535 gboÞ—n $g_dbus_´oxy_g‘_´Ý”ty ( GDBusProxy * ´oxy , cÚ¡ * Çme , 536 DBusMes§geI‹r * ™” ) 538  ´Ý_’Œy * ´Ý ; 540 ià( ´oxy =ð NULL || Çme == NULL) 541  FALSE ; 543 ´Ý = `g_hash_bË_lookup ( ´oxy -> ´Ý_li¡ , Çme ); 544 ià( ´Ý =ð NULL ) 545  FALSE ; 547 ià( ´Ý -> msg =ð NULL ) 548  FALSE ; 550 ià( `dbus_mes§ge_™”_š™ ( ´Ý -> msg , ™” è=ð FALSE ) 551  FALSE ; 553  TRUE ; 554 } } 556  s»äesh_´Ý”ty_d©a { 557 GDBusProxy * m´oxy ; 558 * mÇme ; 561  $»äesh_´Ý”ty_ä“ ( gpoš‹r u£r_d©a ) 563  »äesh_´Ý”ty_d©a * d©a = u£r_d©a ; 565 `g_ä“ ( d©a -> Çme ); 566 `g_ä“ ( d©a ); 567 } } 569  $»äesh_´Ý”ty_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 571  »äesh_´Ý”ty_d©a * d©a = u£r_d©a ; 572 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 573 DBusE¼Ü ”rÜ ; 575 `dbus_”rÜ_š™ (& ”rÜ ); 577 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , »¶y è=ð FALSE ) { 578 DBusMes§geI‹r ™” ; 580 `dbus_mes§ge_™”_š™ ( »¶y , & ™” ); 582 `add_´Ý”ty ( d©a -> ´oxy , d©a-> Çme , & ™” , TRUE ); 584 `dbus_”rÜ_ä“ (& ”rÜ ); 586 `dbus_mes§ge_uÄef ( »¶y ); 587 } } 589 gboÞ—n $g_dbus_´oxy_»äesh_´Ý”ty ( GDBusProxy * ´oxy , cÚ¡ * Çme ) 591  »äesh_´Ý”ty_d©a * d©a ; 592 GDBusCl›Á * þ›Á ; 593 DBusMes§ge * msg ; 594 DBusMes§geI‹r ™” ; 595 DBusP’dšgC®l * ÿÎ ; 597 ià( ´oxy =ð NULL || Çme == NULL) 598  FALSE ; 600 þ›Á = ´oxy ->client; 601 ià( þ›Á =ð NULL ) 602  FALSE ; 604 d©a = `g_Œy_Ãw0 ( »äesh_´Ý”ty_d©a , 1); 605 ià( d©a =ð NULL ) 606  FALSE ; 608 d©a -> ´oxy =…roxy; 609 d©a -> Çme = `g_¡rdup (name); 611 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( þ›Á -> £rviû_Çme , 612 ´oxy -> obj_·th , DBUS_INTERFACE_PROPERTIES , "Get"); 613 ià( msg =ð NULL ) { 614 `»äesh_´Ý”ty_ä“ ( d©a ); 615  FALSE ; 618 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 619 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_STRING , 620 & ´oxy -> š‹rçû ); 621 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_STRING , & Çme ); 623 ià( `g_dbus_£nd_mes§ge_w™h_»¶y ( þ›Á -> dbus_cÚn , msg , 624 & ÿÎ , -1è=ð FALSE ) { 625 `dbus_mes§ge_uÄef ( msg ); 626 `»äesh_´Ý”ty_ä“ ( d©a ); 627  FALSE ; 630 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , »äesh_´Ý”ty_»¶y , 631 d©a , »äesh_´Ý”ty_ä“ ); 632 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 634 `dbus_mes§ge_uÄef ( msg ); 636  TRUE ; 637 } } 639  s£t_´Ý”ty_d©a { 640 GDBusResuÉFunùiÚ mfunùiÚ ; 641 * mu£r_d©a ; 642 GDBusDe¡royFunùiÚ mde¡roy ; 645  $£t_´Ý”ty_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 647  £t_´Ý”ty_d©a * d©a = u£r_d©a ; 648 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 649 DBusE¼Ü ”rÜ ; 651 `dbus_”rÜ_š™ (& ”rÜ ); 653 `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , »¶y ); 655 ià( d©a -> funùiÚ ) 656 d©a -> `funùiÚ (& ”rÜ , d©a-> u£r_d©a ); 658 ià( d©a -> de¡roy ) 659 d©a -> `de¡roy (d©a-> u£r_d©a ); 661 `dbus_”rÜ_ä“ (& ”rÜ ); 663 `dbus_mes§ge_uÄef ( »¶y ); 664 } } 666 gboÞ—n $g_dbus_´oxy_£t_´Ý”ty_basic ( GDBusProxy * ´oxy , 667 cÚ¡ * Çme ,  ty³ , cÚ¡ * v®ue , 668 GDBusResuÉFunùiÚ funùiÚ , * u£r_d©a , 669 GDBusDe¡royFunùiÚ de¡roy ) 671  £t_´Ý”ty_d©a * d©a ; 672 GDBusCl›Á * þ›Á ; 673 DBusMes§ge * msg ; 674 DBusMes§geI‹r ™” , v¬ŸÁ ; 675 DBusP’dšgC®l * ÿÎ ; 676  ty³_as_¡r [2]; 678 ià( ´oxy =ð NULL || Çme =ðNULL || v®ue == NULL) 679  FALSE ; 681 ià( `dbus_ty³_is_basic ( ty³ è=ð FALSE ) 682  FALSE ; 684 þ›Á = ´oxy ->client; 685 ià( þ›Á =ð NULL ) 686  FALSE ; 688 d©a = `g_Œy_Ãw0 ( £t_´Ý”ty_d©a , 1); 689 ià( d©a =ð NULL ) 690  FALSE ; 692 d©a -> funùiÚ = function; 693 d©a -> u£r_d©a = user_data; 694 d©a -> de¡roy = destroy; 696 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( þ›Á -> £rviû_Çme , 697 ´oxy -> obj_·th , DBUS_INTERFACE_PROPERTIES , "Set"); 698 ià( msg =ð NULL ) { 699 `g_ä“ ( d©a ); 700  FALSE ; 703 ty³_as_¡r [0] = (è ty³ ; 704 ty³_as_¡r [1] = '\0'; 706 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 707 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_STRING , 708 & ´oxy -> š‹rçû ); 709 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_STRING , & Çme ); 711 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_VARIANT , 712 ty³_as_¡r , & v¬ŸÁ ); 713 `dbus_mes§ge_™”_­³nd_basic (& v¬ŸÁ , ty³ , v®ue ); 714 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & v¬ŸÁ ); 716 ià( `g_dbus_£nd_mes§ge_w™h_»¶y ( þ›Á -> dbus_cÚn , msg , 717 & ÿÎ , -1è=ð FALSE ) { 718 `dbus_mes§ge_uÄef ( msg ); 719 `g_ä“ ( d©a ); 720  FALSE ; 723 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , £t_´Ý”ty_»¶y , d©a , g_ä“ ); 724 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 726 `dbus_mes§ge_uÄef ( msg ); 728  TRUE ; 729 } } 731 gboÞ—n $g_dbus_´oxy_£t_´Ý”ty_¬¿y ( GDBusProxy * ´oxy , 732 cÚ¡ * Çme ,  ty³ , cÚ¡ * v®ue , 733 size_t size , GDBusResuÉFunùiÚ funùiÚ , 734 * u£r_d©a , GDBusDe¡royFunùiÚ de¡roy ) 736  £t_´Ý”ty_d©a * d©a ; 737 GDBusCl›Á * þ›Á ; 738 DBusMes§ge * msg ; 739 DBusMes§geI‹r ™” , v¬ŸÁ , ¬¿y ; 740 DBusP’dšgC®l * ÿÎ ; 741  ¬¿y_sig [3]; 742  ty³_sig [2]; 744 ià(! ´oxy || ! Çme || ! v®ue ) 745  FALSE ; 747 ià(! `dbus_ty³_is_basic ( ty³ )) 748  FALSE ; 750 þ›Á = ´oxy ->client; 751 ià(! þ›Á ) 752  FALSE ; 754 d©a = `g_Œy_Ãw0 ( £t_´Ý”ty_d©a , 1); 755 ià(! d©a ) 756  FALSE ; 758 d©a -> funùiÚ = function; 759 d©a -> u£r_d©a = user_data; 760 d©a -> de¡roy = destroy; 762 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( þ›Á -> £rviû_Çme , 763 ´oxy -> obj_·th , 764 DBUS_INTERFACE_PROPERTIES , 766 ià(! msg ) { 767 `g_ä“ ( d©a ); 768  FALSE ; 771 ¬¿y_sig [0] = DBUS_TYPE_ARRAY ; 772 ¬¿y_sig [1] = (è ty³ ; 773 ¬¿y_sig [2] = '\0'; 775 ty³_sig [0] = (è ty³ ; 776 ty³_sig [1] = '\0'; 778 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 779 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_STRING , 780 & ´oxy -> š‹rçû ); 781 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_STRING , & Çme ); 783 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_VARIANT , 784 ¬¿y_sig , & v¬ŸÁ ); 786 `dbus_mes§ge_™”_Ý’_cÚš” (& v¬ŸÁ , DBUS_TYPE_ARRAY , 787 ty³_sig , & ¬¿y ); 789 ià( `dbus_ty³_is_fixed ( ty³ )) 790 `dbus_mes§ge_™”_­³nd_fixed_¬¿y (& ¬¿y , ty³ , & v®ue , 791 size ); 792 ià( ty³ =ð DBUS_TYPE_STRING ||y³ =ð DBUS_TYPE_OBJECT_PATH ) { 793 cÚ¡ ** ¡r = (cÚ¡ **è v®ue ; 794 size_t i ; 796  i = 0; i < size ; i++) 797 `dbus_mes§ge_™”_­³nd_basic (& ¬¿y , ty³ , & ¡r [ i ]); 800 `dbus_mes§ge_™”_þo£_cÚš” (& v¬ŸÁ , & ¬¿y ); 801 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & v¬ŸÁ ); 803 ià( `g_dbus_£nd_mes§ge_w™h_»¶y ( þ›Á -> dbus_cÚn , msg , 804 & ÿÎ , -1è=ð FALSE ) { 805 `dbus_mes§ge_uÄef ( msg ); 806 `g_ä“ ( d©a ); 807  FALSE ; 810 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , £t_´Ý”ty_»¶y , d©a , g_ä“ ); 811 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 813 `dbus_mes§ge_uÄef ( msg ); 815  TRUE ; 816 } } 818  sm‘hod_ÿÎ_d©a { 819 GDBusR‘uºFunùiÚ mfunùiÚ ; 820 * mu£r_d©a ; 821 GDBusDe¡royFunùiÚ mde¡roy ; 824  $m‘hod_ÿÎ_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 826  m‘hod_ÿÎ_d©a * d©a = u£r_d©a ; 827 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 829 ià( d©a -> funùiÚ ) 830 d©a -> `funùiÚ ( »¶y , d©a-> u£r_d©a ); 832 ià( d©a -> de¡roy ) 833 d©a -> `de¡roy (d©a-> u£r_d©a ); 835 `dbus_mes§ge_uÄef ( »¶y ); 836 } } 838 gboÞ—n $g_dbus_´oxy_m‘hod_ÿÎ ( GDBusProxy * ´oxy , cÚ¡ * m‘hod , 839 GDBusS‘upFunùiÚ £tup , 840 GDBusR‘uºFunùiÚ funùiÚ , * u£r_d©a , 841 GDBusDe¡royFunùiÚ de¡roy ) 843  m‘hod_ÿÎ_d©a * d©a ; 844 GDBusCl›Á * þ›Á ; 845 DBusMes§ge * msg ; 846 DBusP’dšgC®l * ÿÎ ; 848 ià( ´oxy =ð NULL || m‘hod == NULL) 849  FALSE ; 851 þ›Á = ´oxy ->client; 852 ià( þ›Á =ð NULL ) 853  FALSE ; 855 d©a = `g_Œy_Ãw0 ( m‘hod_ÿÎ_d©a , 1); 856 ià( d©a =ð NULL ) 857  FALSE ; 859 d©a -> funùiÚ = function; 860 d©a -> u£r_d©a = user_data; 861 d©a -> de¡roy = destroy; 863 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( þ›Á -> £rviû_Çme , 864 ´oxy -> obj_·th ,…roxy-> š‹rçû , m‘hod ); 865 ià( msg =ð NULL ) { 866 `g_ä“ ( d©a ); 867  FALSE ; 870 ià( £tup ) { 871 DBusMes§geI‹r ™” ; 873 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 874 `£tup (& ™” , d©a -> u£r_d©a ); 877 ià( `g_dbus_£nd_mes§ge_w™h_»¶y ( þ›Á -> dbus_cÚn , msg , 878 & ÿÎ , METHOD_CALL_TIMEOUT è=ð FALSE ) { 879 `dbus_mes§ge_uÄef ( msg ); 880 `g_ä“ ( d©a ); 881  FALSE ; 884 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , m‘hod_ÿÎ_»¶y , d©a , g_ä“ ); 885 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 887 `dbus_mes§ge_uÄef ( msg ); 889  TRUE ; 890 } } 892 gboÞ—n $g_dbus_´oxy_£t_´Ý”ty_w©ch ( GDBusProxy * ´oxy , 893 GDBusPrÝ”tyFunùiÚ funùiÚ , * u£r_d©a ) 895 ià( ´oxy =ð NULL ) 896  FALSE ; 898 ´oxy -> ´Ý_func = funùiÚ ; 899 ´oxy -> ´Ý_d©a = u£r_d©a ; 901  TRUE ; 902 } } 904 gboÞ—n $g_dbus_´oxy_£t_»moved_w©ch ( GDBusProxy * ´oxy , 905 GDBusProxyFunùiÚ funùiÚ , * u£r_d©a ) 907 ià( ´oxy =ð NULL ) 908  FALSE ; 910 ´oxy -> »moved_func = funùiÚ ; 911 ´oxy -> »moved_d©a = u£r_d©a ; 913  TRUE ; 914 } } 916  $»äesh_´Ý”t›s ( GDBusCl›Á * þ›Á ) 918 GLi¡ * li¡ ; 920  li¡ = `g_li¡_fœ¡ ( þ›Á -> ´oxy_li¡ );†ist; 921 li¡ = `g_li¡_Ãxt (list)) { 922 GDBusProxy * ´oxy = li¡ -> d©a ; 924 `g‘_®l_´Ý”t›s ( ´oxy ); 926 } } 928  $·r£_´Ý”t›s ( GDBusCl›Á * þ›Á , cÚ¡ * ·th , 929 cÚ¡ * š‹rçû , DBusMes§geI‹r * ™” ) 931 GDBusProxy * ´oxy ; 933 ià( `g_¡r_equ® ( š‹rçû , DBUS_INTERFACE_INTROSPECTABLE è=ð TRUE ) 936 ià( `g_¡r_equ® ( š‹rçû , DBUS_INTERFACE_PROPERTIES è=ð TRUE ) 939 ´oxy = `´oxy_lookup ( þ›Á , ·th , š‹rçû ); 940 ià( ´oxy ) { 941 `upd©e_´Ý”t›s ( ´oxy , ™” , FALSE ); 945 ´oxy = `´oxy_Ãw ( þ›Á , ·th , š‹rçû ); 946 ià( ´oxy =ð NULL ) 949 `upd©e_´Ý”t›s ( ´oxy , ™” , FALSE ); 951 ià( þ›Á -> ´oxy_added ) 952 þ›Á -> `´oxy_added ( ´oxy , cl›Á-> u£r_d©a ); 954 þ›Á -> ´oxy_li¡ = `g_li¡_­³nd (þ›Á->´oxy_li¡, ´oxy ); 955 } } 957  $·r£_š‹rçûs ( GDBusCl›Á * þ›Á , cÚ¡ * ·th , 958 DBusMes§geI‹r * ™” ) 960 DBusMes§geI‹r diù ; 962 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY ) 965 `dbus_mes§ge_™”_»cur£ ( ™” , & diù ); 967  `dbus_mes§ge_™”_g‘_¬g_ty³ (& diù è=ð DBUS_TYPE_DICT_ENTRY ) { 968 DBusMes§geI‹r ’Œy ; 969 cÚ¡ * š‹rçû ; 971 `dbus_mes§ge_™”_»cur£ (& diù , & ’Œy ); 973 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy è!ð DBUS_TYPE_STRING ) 976 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & š‹rçû ); 977 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 979 `·r£_´Ý”t›s ( þ›Á , ·th , š‹rçû , & ’Œy ); 981 `dbus_mes§ge_™”_Ãxt (& diù ); 983 } } 985  gboÞ—n $š‹rçûs_added ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 986 * u£r_d©a ) 988 GDBusCl›Á * þ›Á = u£r_d©a ; 989 DBusMes§geI‹r ™” ; 990 cÚ¡ * ·th ; 992 ià( `dbus_mes§ge_™”_š™ ( msg , & ™” è=ð FALSE ) 993  TRUE ; 995 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_OBJECT_PATH ) 996  TRUE ; 998 `dbus_mes§ge_™”_g‘_basic (& ™” , & ·th ); 999 `dbus_mes§ge_™”_Ãxt (& ™” ); 1001 `g_dbus_þ›Á_»f ( þ›Á ); 1003 `·r£_š‹rçûs ( þ›Á , ·th , & ™” ); 1005 `g_dbus_þ›Á_uÄef ( þ›Á ); 1007  TRUE ; 1008 } } 1010  gboÞ—n $š‹rçûs_»moved ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 1011 * u£r_d©a ) 1013 GDBusCl›Á * þ›Á = u£r_d©a ; 1014 DBusMes§geI‹r ™” , ’Œy ; 1015 cÚ¡ * ·th ; 1017 ià( `dbus_mes§ge_™”_š™ ( msg , & ™” è=ð FALSE ) 1018  TRUE ; 1020 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_OBJECT_PATH ) 1021  TRUE ; 1023 `dbus_mes§ge_™”_g‘_basic (& ™” , & ·th ); 1024 `dbus_mes§ge_™”_Ãxt (& ™” ); 1026 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_ARRAY ) 1027  TRUE ; 1029 `dbus_mes§ge_™”_»cur£ (& ™” , & ’Œy ); 1031 `g_dbus_þ›Á_»f ( þ›Á ); 1033  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy è=ð DBUS_TYPE_STRING ) { 1034 cÚ¡ * š‹rçû ; 1036 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & š‹rçû ); 1037 `´oxy_»move ( þ›Á , ·th , š‹rçû ); 1038 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 1041 `g_dbus_þ›Á_uÄef ( þ›Á ); 1043  TRUE ; 1044 } } 1046  $·r£_mªaged_objeùs ( GDBusCl›Á * þ›Á , DBusMes§ge * msg ) 1048 DBusMes§geI‹r ™” , diù ; 1050 ià( `dbus_mes§ge_™”_š™ ( msg , & ™” è=ð FALSE ) 1053 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_ARRAY ) 1056 `dbus_mes§ge_™”_»cur£ (& ™” , & diù ); 1058  `dbus_mes§ge_™”_g‘_¬g_ty³ (& diù è=ð DBUS_TYPE_DICT_ENTRY ) { 1059 DBusMes§geI‹r ’Œy ; 1060 cÚ¡ * ·th ; 1062 `dbus_mes§ge_™”_»cur£ (& diù , & ’Œy ); 1064 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy ) != 1065 DBUS_TYPE_OBJECT_PATH ) 1068 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & ·th ); 1069 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 1071 `·r£_š‹rçûs ( þ›Á , ·th , & ’Œy ); 1073 `dbus_mes§ge_™”_Ãxt (& diù ); 1076 ià( þ›Á -> »ady ) 1077 þ›Á -> `»ady (þ›Á, cl›Á-> »ady_d©a ); 1078 } } 1080  $g‘_mªaged_objeùs_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 1082 GDBusCl›Á * þ›Á = u£r_d©a ; 1083 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 1084 DBusE¼Ü ”rÜ ; 1086 `g_dbus_þ›Á_»f ( þ›Á ); 1088 `dbus_”rÜ_š™ (& ”rÜ ); 1090 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , »¶y è=ð TRUE ) { 1091 `dbus_”rÜ_ä“ (& ”rÜ ); 1092  dÚe ; 1095 `·r£_mªaged_objeùs ( þ›Á , »¶y ); 1097 dÚe : 1098 `dbus_mes§ge_uÄef ( »¶y ); 1100 `dbus_³ndšg_ÿÎ_uÄef ( þ›Á -> g‘_objeùs_ÿÎ ); 1101 þ›Á -> g‘_objeùs_ÿÎ = NULL ; 1103 `g_dbus_þ›Á_uÄef ( þ›Á ); 1104 } } 1106  $g‘_mªaged_objeùs ( GDBusCl›Á * þ›Á ) 1108 DBusMes§ge * msg ; 1110 ià(! þ›Á -> ´oxy_added && !þ›Á-> ´oxy_»moved ) { 1111 `»äesh_´Ý”t›s ( þ›Á ); 1115 ià( þ›Á -> g‘_objeùs_ÿÎ !ð NULL ) 1118 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( þ›Á -> £rviû_Çme , "/", 1119 DBUS_INTERFACE_DBUS ".ObjectManager", 1121 ià( msg =ð NULL ) 1124 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_INVALID ); 1126 ià( `g_dbus_£nd_mes§ge_w™h_»¶y ( þ›Á -> dbus_cÚn , msg , 1127 & þ›Á -> g‘_objeùs_ÿÎ , -1è=ð FALSE ) { 1128 `dbus_mes§ge_uÄef ( msg ); 1132 `dbus_³ndšg_ÿÎ_£t_nÙify ( þ›Á -> g‘_objeùs_ÿÎ , 1133 g‘_mªaged_objeùs_»¶y , 1134 þ›Á , NULL ); 1136 `dbus_mes§ge_uÄef ( msg ); 1137 } } 1139  $£rviû_cÚÃù ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 1141 GDBusCl›Á * þ›Á = u£r_d©a ; 1143 `g_dbus_þ›Á_»f ( þ›Á ); 1145 ià( þ›Á -> cÚÃù_func ) 1146 þ›Á -> `cÚÃù_func ( cÚn , cl›Á-> cÚÃù_d©a ); 1148 `g‘_mªaged_objeùs ( þ›Á ); 1150 þ›Á -> cÚÃùed = TRUE ; 1152 `g_dbus_þ›Á_uÄef ( þ›Á ); 1153 } } 1155  $£rviû_discÚÃù ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 1157 GDBusCl›Á * þ›Á = u£r_d©a ; 1159 `g_li¡_ä“_fuÎ ( þ›Á -> ´oxy_li¡ , ´oxy_ä“ ); 1160 þ›Á -> ´oxy_li¡ = NULL ; 1162 ià( þ›Á -> discÚn_func ) { 1163 þ›Á -> `discÚn_func ( cÚn , cl›Á-> discÚn_d©a ); 1164 þ›Á -> cÚÃùed = FALSE ; 1166 } } 1168  DBusHªdËrResuÉ $mes§ge_fž‹r ( DBusCÚÃùiÚ * cÚÃùiÚ , 1169 DBusMes§ge * mes§ge , * u£r_d©a ) 1171 GDBusCl›Á * þ›Á = u£r_d©a ; 1172 cÚ¡ * £nd” , * ·th , * š‹rçû ; 1174 ià( `dbus_mes§ge_g‘_ty³ ( mes§ge è!ð DBUS_MESSAGE_TYPE_SIGNAL ) 1175  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 1177 £nd” = `dbus_mes§ge_g‘_£nd” ( mes§ge ); 1178 ià( £nd” =ð NULL ) 1179  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 1181 ·th = `dbus_mes§ge_g‘_·th ( mes§ge ); 1182 š‹rçû = `dbus_mes§ge_g‘_š‹rçû ( mes§ge ); 1184 ià( `g_¡r_has_´efix ( ·th , þ›Á -> ba£_·th è=ð FALSE ) 1185  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 1187 ià( `g_¡r_equ® ( š‹rçû , DBUS_INTERFACE_PROPERTIES è=ð TRUE ) 1188  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 1190 ià( þ›Á -> sigÇl_func ) 1191 þ›Á -> `sigÇl_func ( cÚÃùiÚ , mes§ge , cl›Á-> sigÇl_d©a ); 1193  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 1194 } } 1196 GDBusCl›Á * $g_dbus_þ›Á_Ãw ( DBusCÚÃùiÚ * cÚÃùiÚ , 1197 cÚ¡ * £rviû , cÚ¡ * ·th ) 1199 GDBusCl›Á * þ›Á ; 1200  i ; 1202 ià( cÚÃùiÚ =ð NULL ) 1203  NULL ; 1205 þ›Á = `g_Œy_Ãw0 ( GDBusCl›Á , 1); 1206 ià( þ›Á =ð NULL ) 1207  NULL ; 1209 ià( `dbus_cÚÃùiÚ_add_fž‹r ( cÚÃùiÚ , mes§ge_fž‹r , 1210 þ›Á , NULL è=ð FALSE ) { 1211 `g_ä“ ( þ›Á ); 1212  NULL ; 1215 þ›Á -> dbus_cÚn = `dbus_cÚÃùiÚ_»f ( cÚÃùiÚ ); 1216 þ›Á -> £rviû_Çme = `g_¡rdup ( £rviû ); 1217 þ›Á -> ba£_·th = `g_¡rdup ( ·th ); 1218 þ›Á -> cÚÃùed = FALSE ; 1220 þ›Á -> m©ch_ruËs = `g_±r_¬¿y_sized_Ãw (1); 1221 `g_±r_¬¿y_£t_ä“_func ( þ›Á -> m©ch_ruËs , g_ä“ ); 1223 þ›Á -> w©ch = `g_dbus_add_£rviû_w©ch ( cÚÃùiÚ , £rviû , 1224 £rviû_cÚÃù , 1225 £rviû_discÚÃù , 1226 þ›Á , NULL ); 1227 þ›Á -> added_w©ch = `g_dbus_add_sigÇl_w©ch ( cÚÃùiÚ , £rviû , 1229 DBUS_INTERFACE_OBJECT_MANAGER , 1231 š‹rçûs_added , 1232 þ›Á , NULL ); 1233 þ›Á -> »moved_w©ch = `g_dbus_add_sigÇl_w©ch ( cÚÃùiÚ , £rviû , 1235 DBUS_INTERFACE_OBJECT_MANAGER , 1237 š‹rçûs_»moved , 1238 þ›Á , NULL ); 1239 `g_±r_¬¿y_add ( þ›Á -> m©ch_ruËs , `g_¡rdup_´štf ("type='signal'," 1241 þ›Á -> £rviû_Çme , cl›Á-> ba£_·th )); 1243  i = 0; i < þ›Á -> m©ch_ruËs -> Ën ; i++) { 1244 `modify_m©ch ( þ›Á -> dbus_cÚn , "AddMatch", 1245 `g_±r_¬¿y_šdex ( þ›Á -> m©ch_ruËs , i )); 1248  `g_dbus_þ›Á_»f ( þ›Á ); 1249 } } 1251 GDBusCl›Á * $g_dbus_þ›Á_»f ( GDBusCl›Á * þ›Á ) 1253 ià( þ›Á =ð NULL ) 1254  NULL ; 1256 `__sync_ãtch_ªd_add (& þ›Á -> »f_couÁ , 1); 1258  þ›Á ; 1259 } } 1261  $g_dbus_þ›Á_uÄef ( GDBusCl›Á * þ›Á ) 1263  i ; 1265 ià( þ›Á =ð NULL ) 1268 ià( `__sync_sub_ªd_ãtch (& þ›Á -> »f_couÁ , 1) > 0) 1271 ià( þ›Á -> ³ndšg_ÿÎ !ð NULL ) { 1272 `dbus_³ndšg_ÿÎ_ÿnûl ( þ›Á -> ³ndšg_ÿÎ ); 1273 `dbus_³ndšg_ÿÎ_uÄef ( þ›Á -> ³ndšg_ÿÎ ); 1276 ià( þ›Á -> g‘_objeùs_ÿÎ !ð NULL ) { 1277 `dbus_³ndšg_ÿÎ_ÿnûl ( þ›Á -> g‘_objeùs_ÿÎ ); 1278 `dbus_³ndšg_ÿÎ_uÄef ( þ›Á -> g‘_objeùs_ÿÎ ); 1281  i = 0; i < þ›Á -> m©ch_ruËs -> Ën ; i++) { 1282 `modify_m©ch ( þ›Á -> dbus_cÚn , "RemoveMatch", 1283 `g_±r_¬¿y_šdex ( þ›Á -> m©ch_ruËs , i )); 1286 `g_±r_¬¿y_ä“ ( þ›Á -> m©ch_ruËs , TRUE ); 1288 `dbus_cÚÃùiÚ_»move_fž‹r ( þ›Á -> dbus_cÚn , 1289 mes§ge_fž‹r , þ›Á ); 1291 `g_li¡_ä“_fuÎ ( þ›Á -> ´oxy_li¡ , ´oxy_ä“ ); 1297 ià( þ›Á -> discÚn_func && cl›Á-> cÚÃùed ) 1298 þ›Á -> `discÚn_func (þ›Á-> dbus_cÚn , cl›Á-> discÚn_d©a ); 1300 `g_dbus_»move_w©ch ( þ›Á -> dbus_cÚn , cl›Á-> w©ch ); 1301 `g_dbus_»move_w©ch ( þ›Á -> dbus_cÚn , cl›Á-> added_w©ch ); 1302 `g_dbus_»move_w©ch ( þ›Á -> dbus_cÚn , cl›Á-> »moved_w©ch ); 1304 `dbus_cÚÃùiÚ_uÄef ( þ›Á -> dbus_cÚn ); 1306 `g_ä“ ( þ›Á -> £rviû_Çme ); 1307 `g_ä“ ( þ›Á -> ba£_·th ); 1309 `g_ä“ ( þ›Á ); 1310 } } 1312 gboÞ—n $g_dbus_þ›Á_£t_cÚÃù_w©ch ( GDBusCl›Á * þ›Á , 1313 GDBusW©chFunùiÚ funùiÚ , * u£r_d©a ) 1315 ià( þ›Á =ð NULL ) 1316  FALSE ; 1318 þ›Á -> cÚÃù_func = funùiÚ ; 1319 þ›Á -> cÚÃù_d©a = u£r_d©a ; 1321  TRUE ; 1322 } } 1324 gboÞ—n $g_dbus_þ›Á_£t_discÚÃù_w©ch ( GDBusCl›Á * þ›Á , 1325 GDBusW©chFunùiÚ funùiÚ , * u£r_d©a ) 1327 ià( þ›Á =ð NULL ) 1328  FALSE ; 1330 þ›Á -> discÚn_func = funùiÚ ; 1331 þ›Á -> discÚn_d©a = u£r_d©a ; 1333  TRUE ; 1334 } } 1336 gboÞ—n $g_dbus_þ›Á_£t_sigÇl_w©ch ( GDBusCl›Á * þ›Á , 1337 GDBusMes§geFunùiÚ funùiÚ , * u£r_d©a ) 1339 ià( þ›Á =ð NULL ) 1340  FALSE ; 1342 þ›Á -> sigÇl_func = funùiÚ ; 1343 þ›Á -> sigÇl_d©a = u£r_d©a ; 1345  TRUE ; 1346 } } 1348 gboÞ—n $g_dbus_þ›Á_£t_»ady_w©ch ( GDBusCl›Á * þ›Á , 1349 GDBusCl›ÁFunùiÚ »ady , * u£r_d©a ) 1351 ià( þ›Á =ð NULL ) 1352  FALSE ; 1354 þ›Á -> »ady =„eady; 1355 þ›Á -> »ady_d©a = u£r_d©a ; 1357  TRUE ; 1358 } } 1360 gboÞ—n $g_dbus_þ›Á_£t_´oxy_hªdËrs ( GDBusCl›Á * þ›Á , 1361 GDBusProxyFunùiÚ ´oxy_added , 1362 GDBusProxyFunùiÚ ´oxy_»moved , 1363 GDBusPrÝ”tyFunùiÚ ´Ý”ty_chªged , 1364 * u£r_d©a ) 1366 ià( þ›Á =ð NULL ) 1367  FALSE ; 1369 þ›Á -> ´oxy_added =…roxy_added; 1370 þ›Á -> ´oxy_»moved =…roxy_removed; 1371 þ›Á -> ´Ý”ty_chªged =…roperty_changed; 1372 þ›Á -> u£r_d©a = user_data; 1374 `g‘_mªaged_objeùs ( þ›Á ); 1376  TRUE ; 1377 } } @gdbus/gdbus.h 24 #iâdeà __GDBUS_H 25  #__GDBUS_H ) 27 #ifdeà __ýlu¥lus 31  ~ 32  ~ 34  GDBusM‘hodFÏgs tGDBusM‘hodFÏgs ; 35  GDBusSigÇlFÏgs tGDBusSigÇlFÏgs ; 36  GDBusPrÝ”tyFÏgs tGDBusPrÝ”tyFÏgs ; 37  GDBusSecur™yFÏgs tGDBusSecur™yFÏgs ; 39  GDBusArgInfo tGDBusArgInfo ; 40  GDBusM‘hodTabË tGDBusM‘hodTabË ; 41  GDBusSigÇlTabË tGDBusSigÇlTabË ; 42  GDBusPrÝ”tyTabË tGDBusPrÝ”tyTabË ; 43  GDBusSecur™yTabË tGDBusSecur™yTabË ; 45 (* GDBusW©chFunùiÚ è( tDBusCÚÃùiÚ * tcÚÃùiÚ , 46 * tu£r_d©a ); 48 (* GDBusMes§geFunùiÚ è( tDBusCÚÃùiÚ * tcÚÃùiÚ , 49 tDBusMes§ge * tmes§ge , * tu£r_d©a ); 51  gboÞ—n (* tGDBusSigÇlFunùiÚ è( tDBusCÚÃùiÚ * tcÚÃùiÚ , 52 tDBusMes§ge * tmes§ge , * tu£r_d©a ); 54 DBusCÚÃùiÚ * g_dbus_£tup_bus ( DBusBusTy³ ty³ , cÚ¡ * Çme , 55 DBusE¼Ü * ”rÜ ); 57 DBusCÚÃùiÚ * g_dbus_£tup_´iv©e ( DBusBusTy³ ty³ , cÚ¡ * Çme , 58 DBusE¼Ü * ”rÜ ); 60 gboÞ—n g_dbus_»que¡_Çme ( DBusCÚÃùiÚ * cÚÃùiÚ , cÚ¡ * Çme , 61 DBusE¼Ü * ”rÜ ); 63 gboÞ—n g_dbus_£t_discÚÃù_funùiÚ ( DBusCÚÃùiÚ * cÚÃùiÚ , 64 GDBusW©chFunùiÚ funùiÚ , 65 * u£r_d©a , DBusF»eFunùiÚ de¡roy ); 67 (* GDBusDe¡royFunùiÚ è(* tu£r_d©a ); 69  DBusMes§ge * (* tGDBusM‘hodFunùiÚ è( tDBusCÚÃùiÚ * tcÚÃùiÚ , 70 tDBusMes§ge * tmes§ge , * tu£r_d©a ); 72  gboÞ—n (* tGDBusPrÝ”tyG‘‹r )(cÚ¡ tGDBusPrÝ”tyTabË * t´Ý”ty , 73 tDBusMes§geI‹r * t™” , * td©a ); 75  gušt32 tGDBusP’dšgPrÝ”tyS‘ ; 77 (* GDBusPrÝ”tyS‘‹r )(cÚ¡ tGDBusPrÝ”tyTabË * t´Ý”ty , 78 tDBusMes§geI‹r * tv®ue , tGDBusP’dšgPrÝ”tyS‘ tid , 79 * td©a ); 81  gboÞ—n (* tGDBusPrÝ”tyExi¡s )(cÚ¡ tGDBusPrÝ”tyTabË * t´Ý”ty , 82 * td©a ); 84  gušt32 tGDBusP’dšgR•ly ; 86 (* GDBusSecur™yFunùiÚ è( tDBusCÚÃùiÚ * tcÚÃùiÚ , 87 cÚ¡ * taùiÚ , 88 tgboÞ—n tš‹¿ùiÚ , 89 tGDBusP’dšgR•ly t³ndšg ); 91 eGDBusFÏgs { 92 G_DBUS_FLAG_ENABLE_EXPERIMENTAL = (1 << 0), 95 eGDBusM‘hodFÏgs { 96 G_DBUS_METHOD_FLAG_DEPRECATED = (1 << 0), 97 G_DBUS_METHOD_FLAG_NOREPLY = (1 << 1), 98 G_DBUS_METHOD_FLAG_ASYNC = (1 << 2), 99 G_DBUS_METHOD_FLAG_EXPERIMENTAL = (1 << 3), 102 eGDBusSigÇlFÏgs { 103 G_DBUS_SIGNAL_FLAG_DEPRECATED = (1 << 0), 104 G_DBUS_SIGNAL_FLAG_EXPERIMENTAL = (1 << 1), 107 eGDBusPrÝ”tyFÏgs { 108 G_DBUS_PROPERTY_FLAG_DEPRECATED = (1 << 0), 109 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL = (1 << 1), 112 eGDBusSecur™yFÏgs { 113 G_DBUS_SECURITY_FLAG_DEPRECATED = (1 << 0), 114 G_DBUS_SECURITY_FLAG_BUILTIN = (1 << 1), 115 G_DBUS_SECURITY_FLAG_ALLOW_INTERACTION = (1 << 2), 118  sGDBusArgInfo { 119 cÚ¡ * Çme ; 120 cÚ¡ * sigÇtu» ; 123  sGDBusM‘hodTabË { 124 cÚ¡ * Çme ; 125 GDBusM‘hodFunùiÚ funùiÚ ; 126 GDBusM‘hodFÏgs æags ; 127  ´ivžege ; 128 cÚ¡ GDBusArgInfo * š_¬gs ; 129 cÚ¡ GDBusArgInfo * out_¬gs ; 132  sGDBusSigÇlTabË { 133 cÚ¡ * Çme ; 134 GDBusSigÇlFÏgs æags ; 135 cÚ¡ GDBusArgInfo * ¬gs ; 138  sGDBusPrÝ”tyTabË { 139 cÚ¡ * Çme ; 140 cÚ¡ * ty³ ; 141 GDBusPrÝ”tyG‘‹r g‘ ; 142 GDBusPrÝ”tyS‘‹r £t ; 143 GDBusPrÝ”tyExi¡s exi¡s ; 144 GDBusPrÝ”tyFÏgs æags ; 147  sGDBusSecur™yTabË { 148  ´ivžege ; 149 cÚ¡ * aùiÚ ; 150 GDBusSecur™yFÏgs æags ; 151 GDBusSecur™yFunùiÚ funùiÚ ; 154  #GDBUS_ARGS ( ¬gs ...è(cÚ¡ GDBusArgInfo []è{‡rgs, { } } ) 156  #GDBUS_METHOD ( _Çme , _š_¬gs , _out_¬gs , _funùiÚ ) \ 157 . Çme = _Çme , \ 158 . š_¬gs = _š_¬gs , \ 159 . out_¬gs = _out_¬gs , \ 160 . funùiÚ = _funùiÚ ) 162  #GDBUS_ASYNC_METHOD ( _Çme , _š_¬gs , _out_¬gs , _funùiÚ ) \ 163 . Çme = _Çme , \ 164 . š_¬gs = _š_¬gs , \ 165 . out_¬gs = _out_¬gs , \ 166 . funùiÚ = _funùiÚ , \ 167 . æags = G_DBUS_METHOD_FLAG_ASYNC ) 169  #GDBUS_DEPRECATED_METHOD ( _Çme , _š_¬gs , _out_¬gs , _funùiÚ ) \ 170 . Çme = _Çme , \ 171 . š_¬gs = _š_¬gs , \ 172 . out_¬gs = _out_¬gs , \ 173 . funùiÚ = _funùiÚ , \ 174 . æags = G_DBUS_METHOD_FLAG_DEPRECATED ) 176  #GDBUS_DEPRECATED_ASYNC_METHOD ( _Çme , _š_¬gs , _out_¬gs , _funùiÚ ) \ 177 . Çme = _Çme , \ 178 . š_¬gs = _š_¬gs , \ 179 . out_¬gs = _out_¬gs , \ 180 . funùiÚ = _funùiÚ , \ 181 . æags = G_DBUS_METHOD_FLAG_ASYNC | G_DBUS_METHOD_FLAG_DEPRECATED ) 183  #GDBUS_EXPERIMENTAL_METHOD ( _Çme , _š_¬gs , _out_¬gs , _funùiÚ ) \ 184 . Çme = _Çme , \ 185 . š_¬gs = _š_¬gs , \ 186 . out_¬gs = _out_¬gs , \ 187 . funùiÚ = _funùiÚ , \ 188 . æags = G_DBUS_METHOD_FLAG_EXPERIMENTAL ) 190  #GDBUS_EXPERIMENTAL_ASYNC_METHOD ( _Çme , _š_¬gs , _out_¬gs , _funùiÚ ) \ 191 . Çme = _Çme , \ 192 . š_¬gs = _š_¬gs , \ 193 . out_¬gs = _out_¬gs , \ 194 . funùiÚ = _funùiÚ , \ 195 . æags = G_DBUS_METHOD_FLAG_ASYNC | G_DBUS_METHOD_FLAG_EXPERIMENTAL ) 197  #GDBUS_NOREPLY_METHOD ( _Çme , _š_¬gs , _out_¬gs , _funùiÚ ) \ 198 . Çme = _Çme , \ 199 . š_¬gs = _š_¬gs , \ 200 . out_¬gs = _out_¬gs , \ 201 . funùiÚ = _funùiÚ , \ 202 . æags = G_DBUS_METHOD_FLAG_NOREPLY ) 204  #GDBUS_SIGNAL ( _Çme , _¬gs ) \ 205 . Çme = _Çme , \ 206 . ¬gs = _¬gs ) 208  #GDBUS_DEPRECATED_SIGNAL ( _Çme , _¬gs ) \ 209 . Çme = _Çme , \ 210 . ¬gs = _¬gs , \ 211 . æags = G_DBUS_SIGNAL_FLAG_DEPRECATED ) 213  #GDBUS_EXPERIMENTAL_SIGNAL ( _Çme , _¬gs ) \ 214 . Çme = _Çme , \ 215 . ¬gs = _¬gs , \ 216 . æags = G_DBUS_SIGNAL_FLAG_EXPERIMENTAL ) 218  g_dbus_£t_æags ( æags ); 220 gboÞ—n g_dbus_»gi¡”_š‹rçû ( DBusCÚÃùiÚ * cÚÃùiÚ , 221 cÚ¡ * ·th , cÚ¡ * Çme , 222 cÚ¡ GDBusM‘hodTabË * m‘hods , 223 cÚ¡ GDBusSigÇlTabË * sigÇls , 224 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”t›s , 225 * u£r_d©a , 226 GDBusDe¡royFunùiÚ de¡roy ); 227 gboÞ—n g_dbus_uÄegi¡”_š‹rçû ( DBusCÚÃùiÚ * cÚÃùiÚ , 228 cÚ¡ * ·th , cÚ¡ * Çme ); 230 gboÞ—n g_dbus_»gi¡”_£cur™y (cÚ¡ GDBusSecur™yTabË * £cur™y ); 231 gboÞ—n g_dbus_uÄegi¡”_£cur™y (cÚ¡ GDBusSecur™yTabË * £cur™y ); 233  g_dbus_³ndšg_sucûss ( DBusCÚÃùiÚ * cÚÃùiÚ , 234 GDBusP’dšgR•ly ³ndšg ); 235  g_dbus_³ndšg_”rÜ ( DBusCÚÃùiÚ * cÚÃùiÚ , 236 GDBusP’dšgR•ly ³ndšg , 237 cÚ¡ * Çme , cÚ¡ * fÜm© , ...) 238 __©Œibu‹__ (( fÜm© ( ´štf , 4, 5))); 239  g_dbus_³ndšg_”rÜ_v®i¡ ( DBusCÚÃùiÚ * cÚÃùiÚ , 240 GDBusP’dšgR•ly ³ndšg , cÚ¡ * Çme , 241 cÚ¡ * fÜm© , va_li¡ ¬gs ); 243 DBusMes§ge * g_dbus_ü—‹_”rÜ (DBusMes§g* mes§ge , cÚ¡ * Çme , 244 cÚ¡ * fÜm© , ...) 245 __©Œibu‹__ (( fÜm© ( ´štf , 3, 4))); 246 DBusMes§ge * g_dbus_ü—‹_”rÜ_v®i¡ (DBusMes§g* mes§ge , cÚ¡ * Çme , 247 cÚ¡ * fÜm© , va_li¡ ¬gs ); 248 DBusMes§ge * g_dbus_ü—‹_»¶y (DBusMes§g* mes§ge ,  ty³ , ...); 249 DBusMes§ge * g_dbus_ü—‹_»¶y_v®i¡ (DBusMes§g* mes§ge , 250  ty³ , va_li¡ ¬gs ); 252 gboÞ—n g_dbus_£nd_mes§ge ( DBusCÚÃùiÚ * cÚÃùiÚ , DBusMes§ge * mes§ge ); 253 gboÞ—n g_dbus_£nd_mes§ge_w™h_»¶y ( DBusCÚÃùiÚ * cÚÃùiÚ , 254 DBusMes§ge * mes§ge , 255 DBusP’dšgC®l ** ÿÎ ,  timeout ); 256 gboÞ—n g_dbus_£nd_”rÜ ( DBusCÚÃùiÚ * cÚÃùiÚ , DBusMes§ge * mes§ge , 257 cÚ¡ * Çme , cÚ¡ * fÜm© , ...) 258 __©Œibu‹__ (( fÜm© ( ´štf , 4, 5))); 259 gboÞ—n g_dbus_£nd_”rÜ_v®i¡ ( DBusCÚÃùiÚ * cÚÃùiÚ , 260 DBusMes§ge * mes§ge , cÚ¡ * Çme , 261 cÚ¡ * fÜm© , va_li¡ ¬gs ); 262 gboÞ—n g_dbus_£nd_»¶y ( DBusCÚÃùiÚ * cÚÃùiÚ , 263 DBusMes§ge * mes§ge ,  ty³ , ...); 264 gboÞ—n g_dbus_£nd_»¶y_v®i¡ ( DBusCÚÃùiÚ * cÚÃùiÚ , 265 DBusMes§ge * mes§ge ,  ty³ , va_li¡ ¬gs ); 267 gboÞ—n g_dbus_em™_sigÇl ( DBusCÚÃùiÚ * cÚÃùiÚ , 268 cÚ¡ * ·th , cÚ¡ * š‹rçû , 269 cÚ¡ * Çme ,  ty³ , ...); 270 gboÞ—n g_dbus_em™_sigÇl_v®i¡ ( DBusCÚÃùiÚ * cÚÃùiÚ , 271 cÚ¡ * ·th , cÚ¡ * š‹rçû , 272 cÚ¡ * Çme ,  ty³ , va_li¡ ¬gs ); 274 gušt g_dbus_add_£rviû_w©ch ( DBusCÚÃùiÚ * cÚÃùiÚ , cÚ¡ * Çme , 275 GDBusW©chFunùiÚ cÚÃù , 276 GDBusW©chFunùiÚ discÚÃù , 277 * u£r_d©a , GDBusDe¡royFunùiÚ de¡roy ); 278 gušt g_dbus_add_discÚÃù_w©ch ( DBusCÚÃùiÚ * cÚÃùiÚ , cÚ¡ * Çme , 279 GDBusW©chFunùiÚ funùiÚ , 280 * u£r_d©a , GDBusDe¡royFunùiÚ de¡roy ); 281 gušt g_dbus_add_sigÇl_w©ch ( DBusCÚÃùiÚ * cÚÃùiÚ , 282 cÚ¡ * £nd” , cÚ¡ * ·th , 283 cÚ¡ * š‹rçû , cÚ¡ * memb” , 284 GDBusSigÇlFunùiÚ funùiÚ , * u£r_d©a , 285 GDBusDe¡royFunùiÚ de¡roy ); 286 gušt g_dbus_add_´Ý”t›s_w©ch ( DBusCÚÃùiÚ * cÚÃùiÚ , 287 cÚ¡ * £nd” , cÚ¡ * ·th , 288 cÚ¡ * š‹rçû , 289 GDBusSigÇlFunùiÚ funùiÚ , * u£r_d©a , 290 GDBusDe¡royFunùiÚ de¡roy ); 291 gboÞ—n g_dbus_»move_w©ch ( DBusCÚÃùiÚ * cÚÃùiÚ , gušt g ); 292  g_dbus_»move_®l_w©ches ( DBusCÚÃùiÚ * cÚÃùiÚ ); 294  g_dbus_³ndšg_´Ý”ty_sucûss ( GDBusP’dšgPrÝ”tyS‘ id ); 295  g_dbus_³ndšg_´Ý”ty_”rÜ_v®i¡ ( GDBusP’dšgR•ly id , 296 cÚ¡ * Çme , cÚ¡ * fÜm© , va_li¡ ¬gs ); 297  g_dbus_³ndšg_´Ý”ty_”rÜ ( GDBusP’dšgR•ly id , cÚ¡ * Çme , 298 cÚ¡ * fÜm© , ...); 299  g_dbus_em™_´Ý”ty_chªged ( DBusCÚÃùiÚ * cÚÃùiÚ , 300 cÚ¡ * ·th , cÚ¡ * š‹rçû , 301 cÚ¡ * Çme ); 302 gboÞ—n g_dbus_g‘_´Ý”t›s ( DBusCÚÃùiÚ * cÚÃùiÚ , cÚ¡ * ·th , 303 cÚ¡ * š‹rçû , DBusMes§geI‹r * ™” ); 305 gboÞ—n g_dbus_©ch_objeù_mªag” ( DBusCÚÃùiÚ * cÚÃùiÚ ); 306 gboÞ—n g_dbus_d‘ach_objeù_mªag” ( DBusCÚÃùiÚ * cÚÃùiÚ ); 308  GDBusCl›Á tGDBusCl›Á ; 309  GDBusProxy tGDBusProxy ; 311 GDBusProxy * g_dbus_´oxy_Ãw ( GDBusCl›Á * þ›Á , cÚ¡ * ·th , 312 cÚ¡ * š‹rçû ); 314 GDBusProxy * g_dbus_´oxy_»f (GDBusProxy * ´oxy ); 315  g_dbus_´oxy_uÄef ( GDBusProxy * ´oxy ); 317 cÚ¡ * g_dbus_´oxy_g‘_·th ( GDBusProxy * ´oxy ); 318 cÚ¡ * g_dbus_´oxy_g‘_š‹rçû ( GDBusProxy * ´oxy ); 320 gboÞ—n g_dbus_´oxy_g‘_´Ý”ty ( GDBusProxy * ´oxy , cÚ¡ * Çme , 321 DBusMes§geI‹r * ™” ); 323 gboÞ—n g_dbus_´oxy_»äesh_´Ý”ty ( GDBusProxy * ´oxy , cÚ¡ * Çme ); 325 (* GDBusResuÉFunùiÚ è(cÚ¡ tDBusE¼Ü * t”rÜ , * tu£r_d©a ); 327 gboÞ—n g_dbus_´oxy_£t_´Ý”ty_basic ( GDBusProxy * ´oxy , 328 cÚ¡ * Çme ,  ty³ , cÚ¡ * v®ue , 329 GDBusResuÉFunùiÚ funùiÚ , * u£r_d©a , 330 GDBusDe¡royFunùiÚ de¡roy ); 332 gboÞ—n g_dbus_´oxy_£t_´Ý”ty_¬¿y ( GDBusProxy * ´oxy , 333 cÚ¡ * Çme ,  ty³ , cÚ¡ * v®ue , 334 size_t size , GDBusResuÉFunùiÚ funùiÚ , 335 * u£r_d©a , GDBusDe¡royFunùiÚ de¡roy ); 337 (* GDBusS‘upFunùiÚ è( tDBusMes§geI‹r * t™” , * tu£r_d©a ); 338 (* GDBusR‘uºFunùiÚ è( tDBusMes§ge * tmes§ge , * tu£r_d©a ); 340 gboÞ—n g_dbus_´oxy_m‘hod_ÿÎ ( GDBusProxy * ´oxy , cÚ¡ * m‘hod , 341 GDBusS‘upFunùiÚ £tup , 342 GDBusR‘uºFunùiÚ funùiÚ , * u£r_d©a , 343 GDBusDe¡royFunùiÚ de¡roy ); 345 (* GDBusCl›ÁFunùiÚ è( tGDBusCl›Á * tþ›Á , * tu£r_d©a ); 346 (* GDBusProxyFunùiÚ è( tGDBusProxy * t´oxy , * tu£r_d©a ); 347 (* GDBusPrÝ”tyFunùiÚ è( tGDBusProxy * t´oxy , cÚ¡ * tÇme , 348 tDBusMes§geI‹r * t™” , * tu£r_d©a ); 350 gboÞ—n g_dbus_´oxy_£t_´Ý”ty_w©ch ( GDBusProxy * ´oxy , 351 GDBusPrÝ”tyFunùiÚ funùiÚ , * u£r_d©a ); 353 gboÞ—n g_dbus_´oxy_£t_»moved_w©ch ( GDBusProxy * ´oxy , 354 GDBusProxyFunùiÚ de¡roy , * u£r_d©a ); 356 GDBusCl›Á * g_dbus_þ›Á_Ãw ( DBusCÚÃùiÚ * cÚÃùiÚ , 357 cÚ¡ * £rviû , cÚ¡ * ·th ); 359 GDBusCl›Á * g_dbus_þ›Á_»f (GDBusCl›Á * þ›Á ); 360  g_dbus_þ›Á_uÄef ( GDBusCl›Á * þ›Á ); 362 gboÞ—n g_dbus_þ›Á_£t_cÚÃù_w©ch ( GDBusCl›Á * þ›Á , 363 GDBusW©chFunùiÚ funùiÚ , * u£r_d©a ); 364 gboÞ—n g_dbus_þ›Á_£t_discÚÃù_w©ch ( GDBusCl›Á * þ›Á , 365 GDBusW©chFunùiÚ funùiÚ , * u£r_d©a ); 366 gboÞ—n g_dbus_þ›Á_£t_sigÇl_w©ch ( GDBusCl›Á * þ›Á , 367 GDBusMes§geFunùiÚ funùiÚ , * u£r_d©a ); 368 gboÞ—n g_dbus_þ›Á_£t_»ady_w©ch ( GDBusCl›Á * þ›Á , 369 GDBusCl›ÁFunùiÚ »ady , * u£r_d©a ); 370 gboÞ—n g_dbus_þ›Á_£t_´oxy_hªdËrs ( GDBusCl›Á * þ›Á , 371 GDBusProxyFunùiÚ ´oxy_added , 372 GDBusProxyFunùiÚ ´oxy_»moved , 373 GDBusPrÝ”tyFunùiÚ ´Ý”ty_chªged , 374 * u£r_d©a ); 376 #ifdeà __ýlu¥lus @gdbus/mainloop.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~ 31  ~"gdbus.h " 33  #šfo ( fmt ...) ) 34  #”rÜ ( fmt ...) ) 35  #debug ( fmt ...) ) 37  stimeout_hªdËr { 38 gušt mid ; 39 DBusTimeout * mtimeout ; 42  sw©ch_šfo { 43 gušt mid ; 44 DBusW©ch * mw©ch ; 45 DBusCÚÃùiÚ * mcÚn ; 48  sdiscÚÃù_d©a { 49 GDBusW©chFunùiÚ mfunùiÚ ; 50 * mu£r_d©a ; 53  gboÞ—n $discÚÃùed_sigÇl ( DBusCÚÃùiÚ * cÚn , 54 DBusMes§ge * msg , * d©a ) 56  discÚÃù_d©a * dc_d©a = d©a ; 58 `”rÜ ("Got disconnected fromhe system message bus"); 60 dc_d©a -> `funùiÚ ( cÚn , dc_d©a-> u£r_d©a ); 62 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 64  TRUE ; 65 } } 67  gboÞ—n $mes§ge_di¥©ch (* d©a ) 69 DBusCÚÃùiÚ * cÚn = d©a ; 72  `dbus_cÚÃùiÚ_di¥©ch ( cÚn è=ð DBUS_DISPATCH_DATA_REMAINS ); 74 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 76  FALSE ; 77 } } 79  šlše  $queue_di¥©ch ( DBusCÚÃùiÚ * cÚn , 80 DBusDi¥©chStus ¡©us ) 82 ià( ¡©us =ð DBUS_DISPATCH_DATA_REMAINS ) 83 `g_idË_add ( mes§ge_di¥©ch , `dbus_cÚÃùiÚ_»f ( cÚn )); 84 } } 86  gboÞ—n $w©ch_func ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , gpoš‹r d©a ) 88  w©ch_šfo * šfo = d©a ; 89  æags = 0; 90 DBusDi¥©chStus ¡©us ; 91 DBusCÚÃùiÚ * cÚn ; 93 ià( cÚd & G_IO_IN è æags |ð DBUS_WATCH_READABLE ; 94 ià( cÚd & G_IO_OUT è æags |ð DBUS_WATCH_WRITABLE ; 95 ià( cÚd & G_IO_HUP è æags |ð DBUS_WATCH_HANGUP ; 96 ià( cÚd & G_IO_ERR è æags |ð DBUS_WATCH_ERROR ; 99 cÚn = `dbus_cÚÃùiÚ_»f ( šfo ->conn); 101 `dbus_w©ch_hªdË ( šfo -> w©ch , æags ); 103 ¡©us = `dbus_cÚÃùiÚ_g‘_di¥©ch_¡©us ( cÚn ); 104 `queue_di¥©ch ( cÚn , ¡©us ); 106 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 108  TRUE ; 109 } } 111  $w©ch_šfo_ä“ (* d©a ) 113  w©ch_šfo * šfo = d©a ; 115 ià( šfo -> id > 0) { 116 `g_sourû_»move ( šfo -> id ); 117 šfo -> id = 0; 120 `dbus_cÚÃùiÚ_uÄef ( šfo -> cÚn ); 122 `g_ä“ ( šfo ); 123 } } 125  dbus_boÞ_t $add_w©ch ( DBusW©ch * w©ch , * d©a ) 127 DBusCÚÃùiÚ * cÚn = d©a ; 128 GIOCÚd™iÚ cÚd = G_IO_HUP | G_IO_ERR ; 129 GIOChªÃl * chª ; 130  w©ch_šfo * šfo ; 131  æags ; 132  fd ; 134 ià(! `dbus_w©ch_g‘_’abËd ( w©ch )) 135  TRUE ; 137 šfo = `g_Ãw0 ( w©ch_šfo , 1); 139 fd = `dbus_w©ch_g‘_unix_fd ( w©ch ); 140 chª = `g_io_chªÃl_unix_Ãw ( fd ); 142 šfo -> w©ch = watch; 143 šfo -> cÚn = `dbus_cÚÃùiÚ_»f (conn); 145 `dbus_w©ch_£t_d©a ( w©ch , šfo , w©ch_šfo_ä“ ); 147 æags = `dbus_w©ch_g‘_æags ( w©ch ); 149 ià( æags & DBUS_WATCH_READABLE è cÚd |ð G_IO_IN ; 150 ià( æags & DBUS_WATCH_WRITABLE è cÚd |ð G_IO_OUT ; 152 šfo -> id = `g_io_add_w©ch ( chª , cÚd , w©ch_func , info); 154 `g_io_chªÃl_uÄef ( chª ); 156  TRUE ; 157 } } 159  $»move_w©ch ( DBusW©ch * w©ch , * d©a ) 161 ià( `dbus_w©ch_g‘_’abËd ( w©ch )) 165 `dbus_w©ch_£t_d©a ( w©ch , NULL , NULL); 166 } } 168  $w©ch_toggËd ( DBusW©ch * w©ch , * d©a ) 172 ià( `dbus_w©ch_g‘_’abËd ( w©ch )) 173 `add_w©ch ( w©ch , d©a ); 175 `»move_w©ch ( w©ch , d©a ); 176 } } 178  gboÞ—n $timeout_hªdËr_di¥©ch ( gpoš‹r d©a ) 180  timeout_hªdËr * hªdËr = d©a ; 182 hªdËr -> id = 0; 185 ià(! `dbus_timeout_g‘_’abËd ( hªdËr -> timeout )) 186  FALSE ; 188 `dbus_timeout_hªdË ( hªdËr -> timeout ); 190  FALSE ; 191 } } 193  $timeout_hªdËr_ä“ (* d©a ) 195  timeout_hªdËr * hªdËr = d©a ; 197 ià( hªdËr -> id > 0) { 198 `g_sourû_»move ( hªdËr -> id ); 199 hªdËr -> id = 0; 202 `g_ä“ ( hªdËr ); 203 } } 205  dbus_boÞ_t $add_timeout ( DBusTimeout * timeout , * d©a ) 207  š‹rv® = `dbus_timeout_g‘_š‹rv® ( timeout ); 208  timeout_hªdËr * hªdËr ; 210 ià(! `dbus_timeout_g‘_’abËd ( timeout )) 211  TRUE ; 213 hªdËr = `g_Ãw0 ( timeout_hªdËr , 1); 215 hªdËr -> timeout =imeout; 217 `dbus_timeout_£t_d©a ( timeout , hªdËr , timeout_hªdËr_ä“ ); 219 hªdËr -> id = `g_timeout_add ( š‹rv® , timeout_hªdËr_di¥©ch , 220 hªdËr ); 222  TRUE ; 223 } } 225  $»move_timeout ( DBusTimeout * timeout , * d©a ) 228 `dbus_timeout_£t_d©a ( timeout , NULL , NULL); 229 } } 231  $timeout_toggËd ( DBusTimeout * timeout , * d©a ) 233 ià( `dbus_timeout_g‘_’abËd ( timeout )) 234 `add_timeout ( timeout , d©a ); 236 `»move_timeout ( timeout , d©a ); 237 } } 239  $di¥©ch_¡©us ( DBusCÚÃùiÚ * cÚn , 240 DBusDi¥©chStus ¡©us , * d©a ) 242 ià(! `dbus_cÚÃùiÚ_g‘_is_cÚÃùed ( cÚn )) 245 `queue_di¥©ch ( cÚn , ¡©us ); 246 } } 248  šlše  $£tup_dbus_w™h_maš_loÝ ( DBusCÚÃùiÚ * cÚn ) 250 `dbus_cÚÃùiÚ_£t_w©ch_funùiÚs ( cÚn , add_w©ch , »move_w©ch , 251 w©ch_toggËd , cÚn , NULL ); 253 `dbus_cÚÃùiÚ_£t_timeout_funùiÚs ( cÚn , add_timeout , »move_timeout , 254 timeout_toggËd , NULL , NULL); 256 `dbus_cÚÃùiÚ_£t_di¥©ch_¡©us_funùiÚ ( cÚn , di¥©ch_¡©us , 257 NULL , NULL); 258 } } 260  gboÞ—n $£tup_bus ( DBusCÚÃùiÚ * cÚn , cÚ¡ * Çme , 261 DBusE¼Ü * ”rÜ ) 263 gboÞ—n »suÉ ; 264 DBusDi¥©chStus ¡©us ; 266 ià( Çme !ð NULL ) { 267 »suÉ = `g_dbus_»que¡_Çme ( cÚn , Çme , ”rÜ ); 269 ià( ”rÜ !ð NULL ) { 270 ià( `dbus_”rÜ_is_£t ( ”rÜ è=ð TRUE ) 271  FALSE ; 274 ià( »suÉ =ð FALSE ) 275  FALSE ; 278 `£tup_dbus_w™h_maš_loÝ ( cÚn ); 280 ¡©us = `dbus_cÚÃùiÚ_g‘_di¥©ch_¡©us ( cÚn ); 281 `queue_di¥©ch ( cÚn , ¡©us ); 283  TRUE ; 284 } } 286 DBusCÚÃùiÚ * $g_dbus_£tup_bus ( DBusBusTy³ ty³ , cÚ¡ * Çme , 287 DBusE¼Ü * ”rÜ ) 289 DBusCÚÃùiÚ * cÚn ; 291 cÚn = `dbus_bus_g‘ ( ty³ , ”rÜ ); 293 ià( ”rÜ !ð NULL ) { 294 ià( `dbus_”rÜ_is_£t ( ”rÜ è=ð TRUE ) 295  NULL ; 298 ià( cÚn =ð NULL ) 299  NULL ; 301 ià( `£tup_bus ( cÚn , Çme , ”rÜ è=ð FALSE ) { 302 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 303  NULL ; 306  cÚn ; 307 } } 309 DBusCÚÃùiÚ * $g_dbus_£tup_´iv©e ( DBusBusTy³ ty³ , cÚ¡ * Çme , 310 DBusE¼Ü * ”rÜ ) 312 DBusCÚÃùiÚ * cÚn ; 314 cÚn = `dbus_bus_g‘_´iv©e ( ty³ , ”rÜ ); 316 ià( ”rÜ !ð NULL ) { 317 ià( `dbus_”rÜ_is_£t ( ”rÜ è=ð TRUE ) 318  NULL ; 321 ià( cÚn =ð NULL ) 322  NULL ; 324 ià( `£tup_bus ( cÚn , Çme , ”rÜ è=ð FALSE ) { 325 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 326  NULL ; 329  cÚn ; 330 } } 332 gboÞ—n $g_dbus_»que¡_Çme ( DBusCÚÃùiÚ * cÚÃùiÚ , cÚ¡ * Çme , 333 DBusE¼Ü * ”rÜ ) 335  »suÉ ; 337 »suÉ = `dbus_bus_»que¡_Çme ( cÚÃùiÚ , Çme , 338 DBUS_NAME_FLAG_DO_NOT_QUEUE , ”rÜ ); 340 ià( ”rÜ !ð NULL ) { 341 ià( `dbus_”rÜ_is_£t ( ”rÜ è=ð TRUE ) 342  FALSE ; 345 ià( »suÉ !ð DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER ) { 346 ià( ”rÜ !ð NULL ) 347 `dbus_£t_”rÜ ( ”rÜ , Çme , "Name‡lready in use"); 349  FALSE ; 352  TRUE ; 353 } } 355 gboÞ—n $g_dbus_£t_discÚÃù_funùiÚ ( DBusCÚÃùiÚ * cÚÃùiÚ , 356 GDBusW©chFunùiÚ funùiÚ , 357 * u£r_d©a , DBusF»eFunùiÚ de¡roy ) 359  discÚÃù_d©a * dc_d©a ; 361 dc_d©a = `g_Ãw0 ( discÚÃù_d©a , 1); 363 dc_d©a -> funùiÚ = function; 364 dc_d©a -> u£r_d©a = user_data; 366 `dbus_cÚÃùiÚ_£t_ex™_Ú_discÚÃù ( cÚÃùiÚ , FALSE ); 368 ià( `g_dbus_add_sigÇl_w©ch ( cÚÃùiÚ , NULL , NULL, 369 DBUS_INTERFACE_LOCAL , "Disconnected", 370 discÚÃùed_sigÇl , dc_d©a , g_ä“ ) == 0) { 371 `”rÜ ("Failedo‡dd watch for D-Bus Disconnected signal"); 372 `g_ä“ ( dc_d©a ); 373  FALSE ; 376  TRUE ; 377 } } @gdbus/object.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡ršg.h > 31  ~ 32  ~ 34  ~"gdbus.h " 36 #ifdeà __TIZEN_PATCH__ 37  ~ 38  $gdbus_dbg (cÚ¡ * fÜm© , ...) 40 va_li¡ ­ ; 42 `va_¡¬t ( ­ , fÜm© ); 44 `vsy¦og ( LOG_DEBUG , fÜm© , ­ ); 46 `va_’d ( ­ ); 47 } } 49  #šfo ( fmt ...) ) 52  #”rÜ ( fmt ...) ) 53  #debug ( fmt ...) ) 55  #DBUS_INTERFACE_OBJECT_MANAGER "Üg.ä“desktÝ.DBus.ObjeùMªag”" ) 57 #iâdeà DBUS_ERROR_UNKNOWN_PROPERTY 58  #DBUS_ERROR_UNKNOWN_PROPERTY "Üg.ä“desktÝ.DBus.E¼Ü.UnknownPrÝ”ty" ) 61 #iâdeà DBUS_ERROR_PROPERTY_READ_ONLY 62  #DBUS_ERROR_PROPERTY_READ_ONLY "Üg.ä“desktÝ.DBus.E¼Ü.PrÝ”tyR—dOÆy" ) 65  sg’”ic_d©a { 66  m»fcouÁ ; 67 DBusCÚÃùiÚ * mcÚn ; 68 * m·th ; 69 GSLi¡ * mš‹rçûs ; 70 GSLi¡ * mobjeùs ; 71 GSLi¡ * madded ; 72 GSLi¡ * m»moved ; 73 gušt m´oûss_id ; 74 gboÞ—n m³ndšg_´Ý ; 75 * mšŒo¥eù ; 76  g’”ic_d©a * m·»Á ; 79  sš‹rçû_d©a { 80 * mÇme ; 81 cÚ¡ GDBusM‘hodTabË * mm‘hods ; 82 cÚ¡ GDBusSigÇlTabË * msigÇls ; 83 cÚ¡ GDBusPrÝ”tyTabË * m´Ý”t›s ; 84 GSLi¡ * m³ndšg_´Ý ; 85 * mu£r_d©a ; 86 GDBusDe¡royFunùiÚ mde¡roy ; 89  s£cur™y_d©a { 90 GDBusP’dšgR•ly m³ndšg ; 91 DBusMes§ge * mmes§ge ; 92 cÚ¡ GDBusM‘hodTabË * mm‘hod ; 93 * miçû_u£r_d©a ; 96  s´Ý”ty_d©a { 97 DBusCÚÃùiÚ * mcÚn ; 98 GDBusP’dšgPrÝ”tyS‘ mid ; 99 DBusMes§ge * mmes§ge ; 102  gglob®_æags = 0; 103  g’”ic_d©a * groÙ ; 104  GSLi¡ * g³ndšg = NULL ; 106 #ifdeà __TIZEN_PATCH__ 107  #ADAPTER_INTERFACE "Üg.bluez.Ad­‹r1" ) 109 * gad­‹r_·th = NULL ; 112  gboÞ—n ´oûss_chªges ( gpoš‹r u£r_d©a ); 113  ´oûss_´Ý”t›s_äom_š‹rçû ( g’”ic_d©a * d©a , 114  š‹rçû_d©a * içû ); 115  ´oûss_´Ý”ty_chªges ( g’”ic_d©a * d©a ); 117  $´št_¬gum’ts ( GSŒšg * g¡r , cÚ¡ GDBusArgInfo * ¬gs , 118 cÚ¡ * dœeùiÚ ) 120 ; ¬gs &&‡rgs-> Çme ;‡rgs++) { 121 `g_¡ršg_­³nd_´štf ( g¡r , 123 ¬gs -> Çme ,‡rgs-> sigÇtu» ); 125 ià( dœeùiÚ ) 126 `g_¡ršg_­³nd_´štf ( g¡r , 127 " dœeùiÚ=\"%s\"/>\n", dœeùiÚ ); 129 `g_¡ršg_­³nd_´štf ( g¡r , "/>\n"); 132 } } 134  #G_DBUS_ANNOTATE ( Çme_ , v®ue_ ) \ 135 "<ªnÙ©iÚ‚ame=\"Üg.ä“desktÝ.DBus." Çme_ "\" " \ 136 "v®ue=\"" v®ue_ "\"/>" ) 138  #G_DBUS_ANNOTATE_DEPRECATED \ 139 `G_DBUS_ANNOTATE ("D•»ÿ‹d", "Œue") ) 141  #G_DBUS_ANNOTATE_NOREPLY \ 142 `G_DBUS_ANNOTATE ("M‘hod.NoR•ly", "Œue") ) 144  gboÞ—n $check_ex³rim’l ( æags ,  æag ) 146 ià(!( æags & æag )) 147  FALSE ; 149  !( glob®_æags & G_DBUS_FLAG_ENABLE_EXPERIMENTAL ); 150 } } 152  $g’”©e_š‹rçû_xml ( GSŒšg * g¡r ,  š‹rçû_d©a * içû ) 154 cÚ¡ GDBusM‘hodTabË * m‘hod ; 155 cÚ¡ GDBusSigÇlTabË * sigÇl ; 156 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty ; 158  m‘hod = içû -> m‘hods ; m‘hod && m‘hod-> Çme ; method++) { 159 ià( `check_ex³rim’l ( m‘hod -> æags , 160 G_DBUS_METHOD_FLAG_EXPERIMENTAL )) 163 `g_¡ršg_­³nd_´štf ( g¡r , "", 164 m‘hod -> Çme ); 165 `´št_¬gum’ts ( g¡r , m‘hod -> š_¬gs , "in"); 166 `´št_¬gum’ts ( g¡r , m‘hod -> out_¬gs , "out"); 168 ià( m‘hod -> æags & G_DBUS_METHOD_FLAG_DEPRECATED ) 169 `g_¡ršg_­³nd_´štf ( g¡r , 170 G_DBUS_ANNOTATE_DEPRECATED ); 172 ià( m‘hod -> æags & G_DBUS_METHOD_FLAG_NOREPLY ) 173 `g_¡ršg_­³nd_´štf ( g¡r , G_DBUS_ANNOTATE_NOREPLY ); 175 `g_¡ršg_­³nd_´štf ( g¡r , ""); 178  sigÇl = içû -> sigÇls ; sigÇÈ&& sigÇl-> Çme ; signal++) { 179 ià( `check_ex³rim’l ( sigÇl -> æags , 180 G_DBUS_SIGNAL_FLAG_EXPERIMENTAL )) 183 `g_¡ršg_­³nd_´štf ( g¡r , "", 184 sigÇl -> Çme ); 185 `´št_¬gum’ts ( g¡r , sigÇl -> ¬gs , NULL ); 187 ià( sigÇl -> æags & G_DBUS_SIGNAL_FLAG_DEPRECATED ) 188 `g_¡ršg_­³nd_´štf ( g¡r , 189 G_DBUS_ANNOTATE_DEPRECATED ); 191 `g_¡ršg_­³nd_´štf ( g¡r , "\n"); 194  ´Ý”ty = içû -> ´Ý”t›s ;…rÝ”ty &&…rÝ”ty-> Çme ; 195 ´Ý”ty ++) { 196 ià( `check_ex³rim’l ( ´Ý”ty -> æags , 197 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL )) 200 `g_¡ršg_­³nd_´štf ( g¡r , " Çme ,…rÝ”ty-> ty³ , 203 ´Ý”ty -> g‘ ? "read" : "", 204 ´Ý”ty -> £t ? "write" : ""); 206 ià( ´Ý”ty -> æags & G_DBUS_PROPERTY_FLAG_DEPRECATED ) 207 `g_¡ršg_­³nd_´štf ( g¡r , 208 G_DBUS_ANNOTATE_DEPRECATED ); 210 `g_¡ršg_­³nd_´štf ( g¡r , ""); 212 } } 214  $g’”©e_šŒo¥eùiÚ_xml ( DBusCÚÃùiÚ * cÚn , 215  g’”ic_d©a * d©a , cÚ¡ * ·th ) 217 GSLi¡ * li¡ ; 218 GSŒšg * g¡r ; 219 ** chžd»n ; 220  i ; 222 `g_ä“ ( d©a -> šŒo¥eù ); 224 g¡r = `g_¡ršg_Ãw ( DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE ); 226 `g_¡ršg_­³nd_´štf ( g¡r , ""); 228  li¡ = d©a -> š‹rçûs ;†i¡;†i¡ =†i¡-> Ãxt ) { 229  š‹rçû_d©a * içû = li¡ -> d©a ; 231 `g_¡ršg_­³nd_´štf ( g¡r , "", 232 içû -> Çme ); 234 `g’”©e_š‹rçû_xml ( g¡r , içû ); 236 `g_¡ršg_­³nd_´štf ( g¡r , ""); 239 ià(! `dbus_cÚÃùiÚ_li¡_»gi¡”ed ( cÚn , ·th , & chžd»n )) 240  dÚe ; 242  i = 0; chžd»n [i]; i++) 243 `g_¡ršg_­³nd_´štf ( g¡r , "", 244 chžd»n [ i ]); 246 `dbus_ä“_¡ršg_¬¿y ( chžd»n ); 248 dÚe : 249 `g_¡ršg_­³nd_´štf ( g¡r , ""); 251 d©a -> šŒo¥eù = `g_¡ršg_ä“ ( g¡r , FALSE ); 252 } } 254  DBusMes§ge * $šŒo¥eù ( DBusCÚÃùiÚ * cÚÃùiÚ , 255 DBusMes§ge * mes§ge , * u£r_d©a ) 257  g’”ic_d©a * d©a = u£r_d©a ; 258 DBusMes§ge * »¶y ; 260 ià( d©a -> šŒo¥eù =ð NULL ) 261 `g’”©e_šŒo¥eùiÚ_xml ( cÚÃùiÚ , d©a , 262 `dbus_mes§ge_g‘_·th ( mes§ge )); 264 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( mes§ge ); 265 ià( »¶y =ð NULL ) 266  NULL ; 268 `dbus_mes§ge_­³nd_¬gs ( »¶y , DBUS_TYPE_STRING , & d©a -> šŒo¥eù , 269 DBUS_TYPE_INVALID ); 271  »¶y ; 272 } } 274  DBusHªdËrResuÉ $´oûss_mes§ge ( DBusCÚÃùiÚ * cÚÃùiÚ , 275 DBusMes§ge * mes§ge , cÚ¡ GDBusM‘hodTabË * m‘hod , 276 * içû_u£r_d©a ) 278 DBusMes§ge * »¶y ; 280 »¶y = m‘hod -> `funùiÚ ( cÚÃùiÚ , mes§ge , içû_u£r_d©a ); 282 ià( m‘hod -> æags & G_DBUS_METHOD_FLAG_NOREPLY ) { 283 ià( »¶y !ð NULL ) 284 `dbus_mes§ge_uÄef ( »¶y ); 285  DBUS_HANDLER_RESULT_HANDLED ; 288 ià( m‘hod -> æags & G_DBUS_METHOD_FLAG_ASYNC ) { 289 ià( »¶y =ð NULL ) 290  DBUS_HANDLER_RESULT_HANDLED ; 293 ià( »¶y =ð NULL ) 294  DBUS_HANDLER_RESULT_NEED_MEMORY ; 296 `g_dbus_£nd_mes§ge ( cÚÃùiÚ , »¶y ); 298  DBUS_HANDLER_RESULT_HANDLED ; 299 } } 301  GDBusP’dšgR•ly gÃxt_³ndšg = 1; 302  GSLi¡ * g³ndšg_£cur™y = NULL ; 304 cÚ¡ GDBusSecur™yTabË * g£cur™y_bË = NULL ; 306  $g_dbus_³ndšg_sucûss ( DBusCÚÃùiÚ * cÚÃùiÚ , 307 GDBusP’dšgR•ly ³ndšg ) 309 GSLi¡ * li¡ ; 311  li¡ = ³ndšg_£cur™y ;†i¡;†i¡ =†i¡-> Ãxt ) { 312  £cur™y_d©a * £cd©a = li¡ -> d©a ; 314 ià( £cd©a -> ³ndšg !=…ending) 317 ³ndšg_£cur™y = `g_¦i¡_»move Õ’dšg_£cur™y, £cd©a ); 319 `´oûss_mes§ge ( cÚÃùiÚ , £cd©a -> mes§ge , 320 £cd©a -> m‘hod , secd©a-> içû_u£r_d©a ); 322 `dbus_mes§ge_uÄef ( £cd©a -> mes§ge ); 323 `g_ä“ ( £cd©a ); 326 } } 328  $g_dbus_³ndšg_”rÜ_v®i¡ ( DBusCÚÃùiÚ * cÚÃùiÚ , 329 GDBusP’dšgR•ly ³ndšg , cÚ¡ * Çme , 330 cÚ¡ * fÜm© , va_li¡ ¬gs ) 332 GSLi¡ * li¡ ; 334  li¡ = ³ndšg_£cur™y ;†i¡;†i¡ =†i¡-> Ãxt ) { 335  £cur™y_d©a * £cd©a = li¡ -> d©a ; 337 ià( £cd©a -> ³ndšg !=…ending) 340 ³ndšg_£cur™y = `g_¦i¡_»move Õ’dšg_£cur™y, £cd©a ); 342 `g_dbus_£nd_”rÜ_v®i¡ ( cÚÃùiÚ , £cd©a -> mes§ge , 343 Çme , fÜm© , ¬gs ); 345 `dbus_mes§ge_uÄef ( £cd©a -> mes§ge ); 346 `g_ä“ ( £cd©a ); 349 } } 351  $g_dbus_³ndšg_”rÜ ( DBusCÚÃùiÚ * cÚÃùiÚ , 352 GDBusP’dšgR•ly ³ndšg , 353 cÚ¡ * Çme , cÚ¡ * fÜm© , ...) 355 va_li¡ ¬gs ; 357 `va_¡¬t ( ¬gs , fÜm© ); 359 `g_dbus_³ndšg_”rÜ_v®i¡ ( cÚÃùiÚ , ³ndšg , Çme , fÜm© , ¬gs ); 361 `va_’d ( ¬gs ); 362 } } 364  pÞk™_check_authÜiz©iÚ ( DBusCÚÃùiÚ * cÚn , 365 cÚ¡ * aùiÚ , gboÞ—n š‹¿ùiÚ , 366 (* funùiÚ è( dbus_boÞ_t authÜized , 367 * u£r_d©a ), 368 * u£r_d©a ,  timeout ); 370  sbužtš_£cur™y_d©a { 371 DBusCÚÃùiÚ * cÚn ; 372 GDBusP’dšgR•ly ³ndšg ; 375  $bužtš_£cur™y_»suÉ ( dbus_boÞ_t authÜized , * u£r_d©a ) 377  bužtš_£cur™y_d©a * d©a = u£r_d©a ; 379 ià( authÜized =ð TRUE ) 380 `g_dbus_³ndšg_sucûss ( d©a -> cÚn , d©a-> ³ndšg ); 382 `g_dbus_³ndšg_”rÜ ( d©a -> cÚn , d©a-> ³ndšg , 383 DBUS_ERROR_AUTH_FAILED , NULL ); 385 `g_ä“ ( d©a ); 386 } } 388  $bužtš_£cur™y_funùiÚ ( DBusCÚÃùiÚ * cÚn , 389 cÚ¡ * aùiÚ , 390 gboÞ—n š‹¿ùiÚ , 391 GDBusP’dšgR•ly ³ndšg ) 393  bužtš_£cur™y_d©a * d©a ; 395 d©a = `g_Ãw0 ( bužtš_£cur™y_d©a , 1); 396 d©a -> cÚn = conn; 397 d©a -> ³ndšg =…ending; 399 ià( `pÞk™_check_authÜiz©iÚ ( cÚn , aùiÚ , š‹¿ùiÚ , 400 bužtš_£cur™y_»suÉ , d©a , 30000) < 0) 401 `g_dbus_³ndšg_”rÜ ( cÚn , ³ndšg , NULL , NULL); 402 } } 404  gboÞ—n $check_´ivžege ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 405 cÚ¡ GDBusM‘hodTabË * m‘hod , * içû_u£r_d©a ) 407 cÚ¡ GDBusSecur™yTabË * £cur™y ; 409  £cur™y = £cur™y_bË ; secur™y && secur™y-> ´ivžege ; 410 £cur™y ++) { 411  £cur™y_d©a * £cd©a ; 412 gboÞ—n š‹¿ùiÚ ; 414 ià( £cur™y -> ´ivžege !ð m‘hod ->privilege) 417 £cd©a = `g_Ãw ( £cur™y_d©a , 1); 418 £cd©a -> ³ndšg = Ãxt_³ndšg ++; 419 £cd©a -> mes§ge = `dbus_mes§ge_»f ( msg ); 420 £cd©a -> m‘hod = method; 421 £cd©a -> içû_u£r_d©a = iface_user_data; 423 ³ndšg_£cur™y = `g_¦i¡_´•’d Õ’dšg_£cur™y, £cd©a ); 425 ià( £cur™y -> æags & G_DBUS_SECURITY_FLAG_ALLOW_INTERACTION ) 426 š‹¿ùiÚ = TRUE ; 428 š‹¿ùiÚ = FALSE ; 430 ià(!( £cur™y -> æags & G_DBUS_SECURITY_FLAG_BUILTIN ) && 431 £cur™y -> funùiÚ ) 432 £cur™y -> `funùiÚ ( cÚn , secur™y-> aùiÚ , 433 š‹¿ùiÚ , £cd©a -> ³ndšg ); 435 `bužtš_£cur™y_funùiÚ ( cÚn , £cur™y -> aùiÚ , 436 š‹¿ùiÚ , £cd©a -> ³ndšg ); 438  TRUE ; 441  FALSE ; 442 } } 444  GDBusP’dšgPrÝ”tyS‘ gÃxt_³ndšg_´Ý”ty = 1; 445  GSLi¡ * g³ndšg_´Ý”ty_£t ; 447  ´Ý”ty_d©a * $»move_³ndšg_´Ý”ty_d©a ( 448 GDBusP’dšgPrÝ”tyS‘ id ) 450  ´Ý”ty_d©a * ´Ýd©a ; 451 GSLi¡ * l ; 453  l = ³ndšg_´Ý”ty_£t ;† !ð NULL ;† =†-> Ãxt ) { 454 ´Ýd©a = l -> d©a ; 455 ià( ´Ýd©a -> id != id) 461 ià( l =ð NULL ) 462  NULL ; 464 ³ndšg_´Ý”ty_£t = `g_¦i¡_d–‘e_lšk Õ’dšg_´Ý”ty_£t, l ); 466  ´Ýd©a ; 467 } } 469  $g_dbus_³ndšg_´Ý”ty_sucûss ( GDBusP’dšgPrÝ”tyS‘ id ) 471  ´Ý”ty_d©a * ´Ýd©a ; 473 ´Ýd©a = `»move_³ndšg_´Ý”ty_d©a ( id ); 474 ià( ´Ýd©a =ð NULL ) 477 `g_dbus_£nd_»¶y ( ´Ýd©a -> cÚn ,…rÝd©a-> mes§ge , 478 DBUS_TYPE_INVALID ); 479 `dbus_mes§ge_uÄef ( ´Ýd©a -> mes§ge ); 480 `g_ä“ ( ´Ýd©a ); 481 } } 483  $g_dbus_³ndšg_´Ý”ty_”rÜ_v®i¡ ( GDBusP’dšgR•ly id , 484 cÚ¡ * Çme , cÚ¡ * fÜm© , 485 va_li¡ ¬gs ) 487  ´Ý”ty_d©a * ´Ýd©a ; 489 ´Ýd©a = `»move_³ndšg_´Ý”ty_d©a ( id ); 490 ià( ´Ýd©a =ð NULL ) 493 `g_dbus_£nd_”rÜ_v®i¡ ( ´Ýd©a -> cÚn ,…rÝd©a-> mes§ge , Çme , 494 fÜm© , ¬gs ); 496 `dbus_mes§ge_uÄef ( ´Ýd©a -> mes§ge ); 497 `g_ä“ ( ´Ýd©a ); 498 } } 500  $g_dbus_³ndšg_´Ý”ty_”rÜ ( GDBusP’dšgR•ly id , cÚ¡ * Çme , 501 cÚ¡ * fÜm© , ...) 503 va_li¡ ¬gs ; 505 `va_¡¬t ( ¬gs , fÜm© ); 507 `g_dbus_³ndšg_´Ý”ty_”rÜ_v®i¡ ( id , Çme , fÜm© , ¬gs ); 509 `va_’d ( ¬gs ); 510 } } 512  $»£t_·»Á ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 514  g’”ic_d©a * chžd = d©a ; 515  g’”ic_d©a * ·»Á = u£r_d©a ; 517 chžd -> ·»Á =…arent; 518 } } 520  $­³nd_´Ý”ty ( š‹rçû_d©a * içû , 521 cÚ¡ GDBusPrÝ”tyTabË * p , DBusMes§geI‹r * diù ) 523 DBusMes§geI‹r ’Œy , v®ue ; 525 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , NULL , 526 & ’Œy ); 527 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & p -> Çme ); 528 `dbus_mes§ge_™”_Ý’_cÚš” (& ’Œy , DBUS_TYPE_VARIANT , p -> ty³ , 529 & v®ue ); 531 p -> `g‘ Õ, & v®ue , içû -> u£r_d©a ); 533 `dbus_mes§ge_™”_þo£_cÚš” (& ’Œy , & v®ue ); 534 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & ’Œy ); 535 } } 537  $­³nd_´Ý”t›s ( š‹rçû_d©a * d©a , 538 DBusMes§geI‹r * ™” ) 540 DBusMes§geI‹r diù ; 541 cÚ¡ GDBusPrÝ”tyTabË * p ; 543 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 544 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 545 DBUS_TYPE_STRING_AS_STRING 546 DBUS_TYPE_VARIANT_AS_STRING 547 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 549  p = d©a -> ´Ý”t›s ;… &&…-> Çme ;…++) { 550 ià( `check_ex³rim’l ( p -> æags , 551 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL )) 554 ià( p -> g‘ =ð NULL ) 557 ià( p -> exi¡s !ð NULL && !p-> `exi¡s Õ, d©a -> u£r_d©a )) 560 `­³nd_´Ý”ty ( d©a , p , & diù ); 563 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 564 } } 566  $­³nd_š‹rçû ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 568  š‹rçû_d©a * içû = d©a ; 569 DBusMes§geI‹r * ¬¿y = u£r_d©a ; 570 DBusMes§geI‹r ’Œy ; 572 `dbus_mes§ge_™”_Ý’_cÚš” ( ¬¿y , DBUS_TYPE_DICT_ENTRY , NULL , 573 & ’Œy ); 574 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & içû -> Çme ); 575 `­³nd_´Ý”t›s ( d©a , & ’Œy ); 576 `dbus_mes§ge_™”_þo£_cÚš” ( ¬¿y , & ’Œy ); 577 } } 579  $em™_š‹rçûs_added ( g’”ic_d©a * d©a ) 581 DBusMes§ge * sigÇl ; 582 DBusMes§geI‹r ™” , ¬¿y ; 584 ià( roÙ =ð NULL || d©a ==„oot) 587 sigÇl = `dbus_mes§ge_Ãw_sigÇl ( roÙ -> ·th , 588 DBUS_INTERFACE_OBJECT_MANAGER , 590 ià( sigÇl =ð NULL ) 593 `dbus_mes§ge_™”_š™_­³nd ( sigÇl , & ™” ); 594 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_OBJECT_PATH , 595 & d©a -> ·th ); 597 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 598 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 599 DBUS_TYPE_STRING_AS_STRING 600 DBUS_TYPE_ARRAY_AS_STRING 601 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 602 DBUS_TYPE_STRING_AS_STRING 603 DBUS_TYPE_VARIANT_AS_STRING 604 DBUS_DICT_ENTRY_END_CHAR_AS_STRING 605 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & ¬¿y ); 607 `g_¦i¡_fÜ—ch ( d©a -> added , ­³nd_š‹rçû , & ¬¿y ); 608 `g_¦i¡_ä“ ( d©a -> added ); 609 d©a -> added = NULL ; 611 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & ¬¿y ); 614 `dbus_cÚÃùiÚ_£nd ( d©a -> cÚn , sigÇl , NULL ); 615 `dbus_mes§ge_uÄef ( sigÇl ); 616 } } 618  š‹rçû_d©a * $fšd_š‹rçû ( GSLi¡ * š‹rçûs , 619 cÚ¡ * Çme ) 621 GSLi¡ * li¡ ; 623 ià( Çme =ð NULL ) 624  NULL ; 626  li¡ = š‹rçûs ;†i¡;†i¡ =†i¡-> Ãxt ) { 627  š‹rçû_d©a * içû = li¡ -> d©a ; 628 ià(! `¡rcmp ( Çme , içû ->name)) 629  içû ; 632  NULL ; 633 } } 635  gboÞ—n $g_dbus_¬gs_have_sigÇtu» (cÚ¡ GDBusArgInfo * ¬gs , 636 DBusMes§ge * mes§ge ) 638 cÚ¡ * sig = `dbus_mes§ge_g‘_sigÇtu» ( mes§ge ); 639 cÚ¡ * p = NULL ; 641 ; ¬gs &&‡rgs-> sigÇtu» && * sig ;‡rgs++) { 642 p = ¬gs -> sigÇtu» ; 644 ; * sig && * p ; sig++,…++) { 645 ià(* p !ð* sig ) 646  FALSE ; 650 ià(* sig || ( p && *pè|| ( ¬gs &&‡rgs-> sigÇtu» )) 651  FALSE ; 653  TRUE ; 654 } } 656  $add_³ndšg ( g’”ic_d©a * d©a ) 658 ià( d©a -> ´oûss_id > 0) 661 d©a -> ´oûss_id = `g_idË_add ( ´oûss_chªges , data); 663 ³ndšg = `g_¦i¡_­³nd Õ’dšg, d©a ); 664 } } 666  gboÞ—n $»move_š‹rçû ( g’”ic_d©a * d©a , cÚ¡ * Çme ) 668  š‹rçû_d©a * içû ; 670 içû = `fšd_š‹rçû ( d©a -> š‹rçûs , Çme ); 671 ià( içû =ð NULL ) 672  FALSE ; 674 `´oûss_´Ý”t›s_äom_š‹rçû ( d©a , içû ); 676 d©a -> š‹rçûs = `g_¦i¡_»move (d©a->š‹rçûs, içû ); 678 #ifdeà __TIZEN_PATCH__ 679 ià( `g_¡rcmp0 ( içû -> Çme , ADAPTER_INTERFACE ) == 0) { 680 `g_ä“ ( ad­‹r_·th ); 681 ad­‹r_·th = NULL ; 685 ià( içû -> de¡roy ) { 686 içû -> `de¡roy (içû-> u£r_d©a ); 687 içû -> u£r_d©a = NULL ; 694 ià( `g_¦i¡_fšd ( d©a -> added , içû )) { 695 d©a -> added = `g_¦i¡_»move (d©a->added, içû ); 696 `g_ä“ ( içû -> Çme ); 697 `g_ä“ ( içû ); 698  TRUE ; 701 ià( d©a -> ·»Á =ð NULL ) { 702 `g_ä“ ( içû -> Çme ); 703 `g_ä“ ( içû ); 704  TRUE ; 707 d©a -> »moved = `g_¦i¡_´•’d (d©a->»moved, içû -> Çme ); 708 `g_ä“ ( içû ); 710 `add_³ndšg ( d©a ); 712  TRUE ; 713 } } 715  g’”ic_d©a * $šv®id©e_·»Á_d©a ( DBusCÚÃùiÚ * cÚn , 716 cÚ¡ * chžd_·th ) 718  g’”ic_d©a * d©a = NULL , * chžd = NULL, * ·»Á = NULL; 719 * ·»Á_·th , * ¦ash ; 721 ·»Á_·th = `g_¡rdup ( chžd_·th ); 722 ¦ash = `¡¼chr ( ·»Á_·th , '/'); 723 ià( ¦ash =ð NULL ) 724  dÚe ; 726 ià( ¦ash =ð ·»Á_·th &&…arent_path[1] != '\0') 727 ·»Á_·th [1] = '\0'; 729 * ¦ash = '\0'; 731 ià(! `¡¾’ ( ·»Á_·th )) 732  dÚe ; 734 ià( `dbus_cÚÃùiÚ_g‘_objeù_·th_d©a ( cÚn , ·»Á_·th , 735 (*è& d©a è=ð FALSE ) { 736  dÚe ; 739 ·»Á = `šv®id©e_·»Á_d©a ( cÚn , ·»Á_·th ); 741 ià( d©a =ð NULL ) { 742 d©a = ·»Á ; 743 ià( d©a =ð NULL ) 744  dÚe ; 747 `g_ä“ ( d©a -> šŒo¥eù ); 748 d©a -> šŒo¥eù = NULL ; 750 ià(! `dbus_cÚÃùiÚ_g‘_objeù_·th_d©a ( cÚn , chžd_·th , 751 (*è& chžd )) 752  dÚe ; 754 ià( chžd =ð NULL || `g_¦i¡_fšd ( d©a -> objeùs , child) != NULL) 755  dÚe ; 757 d©a -> objeùs = `g_¦i¡_´•’d (d©a->objeùs, chžd ); 758 chžd -> ·»Á = d©a ; 760 dÚe : 761 `g_ä“ ( ·»Á_·th ); 762  d©a ; 763 } } 765  šlše cÚ¡ GDBusPrÝ”tyTabË * $fšd_´Ý”ty (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”t›s , 766 cÚ¡ * Çme ) 768 cÚ¡ GDBusPrÝ”tyTabË * p ; 770  p = ´Ý”t›s ;… &&…-> Çme ;…++) { 771 ià( `¡rcmp ( Çme , p ->name) != 0) 774 ià( `check_ex³rim’l ( p -> æags , 775 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL )) 778  p ; 781  NULL ; 782 } } 784  DBusMes§ge * $´Ý”t›s_g‘ ( DBusCÚÃùiÚ * cÚÃùiÚ , 785 DBusMes§ge * mes§ge , * u£r_d©a ) 787  g’”ic_d©a * d©a = u£r_d©a ; 788  š‹rçû_d©a * içû ; 789 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty ; 790 cÚ¡ * š‹rçû , * Çme ; 791 DBusMes§geI‹r ™” , v®ue ; 792 DBusMes§ge * »¶y ; 794 ià(! `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 795 DBUS_TYPE_STRING , & š‹rçû , 796 DBUS_TYPE_STRING , & Çme , 797 DBUS_TYPE_INVALID )) 798  NULL ; 800 içû = `fšd_š‹rçû ( d©a -> š‹rçûs , š‹rçû ); 801 ià( içû =ð NULL ) 802  `g_dbus_ü—‹_”rÜ ( mes§ge , DBUS_ERROR_INVALID_ARGS , 803 "NØsuch iÁ”çû '%s'", š‹rçû ); 805 ´Ý”ty = `fšd_´Ý”ty ( içû -> ´Ý”t›s , Çme ); 806 ià( ´Ý”ty =ð NULL ) 807  `g_dbus_ü—‹_”rÜ ( mes§ge , DBUS_ERROR_INVALID_ARGS , 808 "NØsuch…rÝ”ty '%s'", Çme ); 810 ià( ´Ý”ty -> exi¡s !ð NULL && 811 ! ´Ý”ty -> `exi¡s ÕrÝ”ty, içû -> u£r_d©a )) 812  `g_dbus_ü—‹_”rÜ ( mes§ge , DBUS_ERROR_INVALID_ARGS , 813 "NØsuch…rÝ”ty '%s'", Çme ); 815 ià( ´Ý”ty -> g‘ =ð NULL ) 816  `g_dbus_ü—‹_”rÜ ( mes§ge , DBUS_ERROR_INVALID_ARGS , 817 "PrÝ”ty '%s' i nÙ„—dabË", Çme ); 819 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( mes§ge ); 820 ià( »¶y =ð NULL ) 821  NULL ; 823 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 824 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_VARIANT , 825 ´Ý”ty -> ty³ , & v®ue ); 827 ià(! ´Ý”ty -> `g‘ ÕrÝ”ty, & v®ue , içû -> u£r_d©a )) { 828 `dbus_mes§ge_uÄef ( »¶y ); 829  NULL ; 832 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & v®ue ); 834  »¶y ; 835 } } 837  DBusMes§ge * $´Ý”t›s_g‘_®l ( DBusCÚÃùiÚ * cÚÃùiÚ , 838 DBusMes§ge * mes§ge , * u£r_d©a ) 840  g’”ic_d©a * d©a = u£r_d©a ; 841  š‹rçû_d©a * içû ; 842 cÚ¡ * š‹rçû ; 843 DBusMes§geI‹r ™” ; 844 DBusMes§ge * »¶y ; 846 ià(! `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 847 DBUS_TYPE_STRING , & š‹rçû , 848 DBUS_TYPE_INVALID )) 849  NULL ; 851 içû = `fšd_š‹rçû ( d©a -> š‹rçûs , š‹rçû ); 852 ià( içû =ð NULL ) 853  `g_dbus_ü—‹_”rÜ ( mes§ge , DBUS_ERROR_INVALID_ARGS , 854 "NØsuch iÁ”çû '%s'", š‹rçû ); 856 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( mes§ge ); 857 ià( »¶y =ð NULL ) 858  NULL ; 860 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 862 `­³nd_´Ý”t›s ( içû , & ™” ); 864  »¶y ; 865 } } 867  DBusMes§ge * $´Ý”t›s_£t ( DBusCÚÃùiÚ * cÚÃùiÚ , 868 DBusMes§ge * mes§ge , * u£r_d©a ) 870  g’”ic_d©a * d©a = u£r_d©a ; 871 DBusMes§geI‹r ™” , sub ; 872  š‹rçû_d©a * içû ; 873 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty ; 874 cÚ¡ * Çme , * š‹rçû ; 875  ´Ý”ty_d©a * ´Ýd©a ; 876 gboÞ—n v®id_sigÇtu» ; 877 * sigÇtu» ; 879 ià(! `dbus_mes§ge_™”_š™ ( mes§ge , & ™” )) 880  `g_dbus_ü—‹_”rÜ ( mes§ge , DBUS_ERROR_INVALID_ARGS , 883 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_STRING ) 884  `g_dbus_ü—‹_”rÜ ( mes§ge , DBUS_ERROR_INVALID_ARGS , 886 `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” )); 888 `dbus_mes§ge_™”_g‘_basic (& ™” , & š‹rçû ); 889 `dbus_mes§ge_™”_Ãxt (& ™” ); 891 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_STRING ) 892  `g_dbus_ü—‹_”rÜ ( mes§ge , DBUS_ERROR_INVALID_ARGS , 894 `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” )); 896 `dbus_mes§ge_™”_g‘_basic (& ™” , & Çme ); 897 `dbus_mes§ge_™”_Ãxt (& ™” ); 899 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_VARIANT ) 900  `g_dbus_ü—‹_”rÜ ( mes§ge , DBUS_ERROR_INVALID_ARGS , 902 `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” )); 904 `dbus_mes§ge_™”_»cur£ (& ™” , & sub ); 906 içû = `fšd_š‹rçû ( d©a -> š‹rçûs , š‹rçû ); 907 ià( içû =ð NULL ) 908  `g_dbus_ü—‹_”rÜ ( mes§ge , DBUS_ERROR_INVALID_ARGS , 909 "NØsuch iÁ”çû '%s'", š‹rçû ); 911 ´Ý”ty = `fšd_´Ý”ty ( içû -> ´Ý”t›s , Çme ); 912 ià( ´Ý”ty =ð NULL ) 913  `g_dbus_ü—‹_”rÜ ( mes§ge , 914 DBUS_ERROR_UNKNOWN_PROPERTY , 915 "NØsuch…rÝ”ty '%s'", Çme ); 917 ià( ´Ý”ty -> £t =ð NULL ) 918  `g_dbus_ü—‹_”rÜ ( mes§ge , 919 DBUS_ERROR_PROPERTY_READ_ONLY , 920 "PrÝ”ty '%s' i nÙ wr™abË", Çme ); 922 ià( ´Ý”ty -> exi¡s !ð NULL && 923 ! ´Ý”ty -> `exi¡s ÕrÝ”ty, içû -> u£r_d©a )) 924  `g_dbus_ü—‹_”rÜ ( mes§ge , 925 DBUS_ERROR_UNKNOWN_PROPERTY , 926 "NØsuch…rÝ”ty '%s'", Çme ); 928 sigÇtu» = `dbus_mes§ge_™”_g‘_sigÇtu» (& sub ); 929 v®id_sigÇtu» = `¡rcmp ( sigÇtu» , ´Ý”ty -> ty³ è? FALSE : TRUE ; 930 `dbus_ä“ ( sigÇtu» ); 931 ià(! v®id_sigÇtu» ) 932  `g_dbus_ü—‹_”rÜ ( mes§ge , 933 DBUS_ERROR_INVALID_SIGNATURE , 934 "Inv®id sigÇtu» fÜ '%s'", Çme ); 936 ´Ýd©a = `g_Ãw ( ´Ý”ty_d©a , 1); 937 ´Ýd©a -> id = Ãxt_³ndšg_´Ý”ty ++; 938 ´Ýd©a -> mes§ge = `dbus_mes§ge_»f (message); 939 ´Ýd©a -> cÚn = cÚÃùiÚ ; 940 ³ndšg_´Ý”ty_£t = `g_¦i¡_´•’d Õ’dšg_´Ý”ty_£t, ´Ýd©a ); 942 ´Ý”ty -> `£t ÕrÝ”ty, & sub , ´Ýd©a -> id , içû -> u£r_d©a ); 944  NULL ; 945 } } 947 cÚ¡ GDBusM‘hodTabË g´Ý”t›s_m‘hods [] = { 948 { GDBUS_METHOD ("Get", 949 GDBUS_ARGS ({ "interface", "s" }, { "name", "s" }), 950 GDBUS_ARGS ({ "value", "v" }), 951 ´Ý”t›s_g‘ ) }, 952 { GDBUS_ASYNC_METHOD ("Set", 953 GDBUS_ARGS ({ "interface", "s" }, { "name", "s" }, 955 NULL , 956 ´Ý”t›s_£t ) }, 957 { GDBUS_METHOD ("GetAll", 958 GDBUS_ARGS ({ "interface", "s" }), 959 GDBUS_ARGS ({ "properties", "a{sv}" }), 960 ´Ý”t›s_g‘_®l ) }, 964 cÚ¡ GDBusSigÇlTabË g´Ý”t›s_sigÇls [] = { 965 { GDBUS_SIGNAL ("PropertiesChanged", 966 GDBUS_ARGS ({ "interface", "s" }, 972  $­³nd_Çme ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 974 * Çme = d©a ; 975 DBusMes§geI‹r * ™” = u£r_d©a ; 977 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & Çme ); 978 } } 980  $em™_š‹rçûs_»moved ( g’”ic_d©a * d©a ) 982 DBusMes§ge * sigÇl ; 983 DBusMes§geI‹r ™” , ¬¿y ; 985 ià( roÙ =ð NULL || d©a ==„oot) 988 sigÇl = `dbus_mes§ge_Ãw_sigÇl ( roÙ -> ·th , 989 DBUS_INTERFACE_OBJECT_MANAGER , 991 ià( sigÇl =ð NULL ) 994 `dbus_mes§ge_™”_š™_­³nd ( sigÇl , & ™” ); 995 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_OBJECT_PATH , 996 & d©a -> ·th ); 997 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 998 DBUS_TYPE_STRING_AS_STRING , & ¬¿y ); 1000 `g_¦i¡_fÜ—ch ( d©a -> »moved , ­³nd_Çme , & ¬¿y ); 1001 `g_¦i¡_ä“_fuÎ ( d©a -> »moved , g_ä“ ); 1002 d©a -> »moved = NULL ; 1004 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & ¬¿y ); 1007 `dbus_cÚÃùiÚ_£nd ( d©a -> cÚn , sigÇl , NULL ); 1008 `dbus_mes§ge_uÄef ( sigÇl ); 1009 } } 1011  $»move_³ndšg ( g’”ic_d©a * d©a ) 1013 ià( d©a -> ´oûss_id > 0) { 1014 `g_sourû_»move ( d©a -> ´oûss_id ); 1015 d©a -> ´oûss_id = 0; 1018 ³ndšg = `g_¦i¡_»move Õ’dšg, d©a ); 1019 } } 1021  gboÞ—n $´oûss_chªges ( gpoš‹r u£r_d©a ) 1023  g’”ic_d©a * d©a = u£r_d©a ; 1025 `»move_³ndšg ( d©a ); 1027 ià( d©a -> added !ð NULL ) 1028 `em™_š‹rçûs_added ( d©a ); 1031 ià( d©a -> ³ndšg_´Ý =ð TRUE ) 1032 `´oûss_´Ý”ty_chªges ( d©a ); 1034 ià( d©a -> »moved !ð NULL ) 1035 `em™_š‹rçûs_»moved ( d©a ); 1037 d©a -> ´oûss_id = 0; 1039  FALSE ; 1040 } } 1042  $g’”ic_uÄegi¡” ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 1044  g’”ic_d©a * d©a = u£r_d©a ; 1045  g’”ic_d©a * ·»Á = d©a ->parent; 1047 ià( ·»Á !ð NULL ) 1048 ·»Á -> objeùs = `g_¦i¡_»move Õ¬’t->objeùs, d©a ); 1050 ià( d©a -> ´oûss_id > 0) { 1051 `g_sourû_»move ( d©a -> ´oûss_id ); 1052 d©a -> ´oûss_id = 0; 1053 `´oûss_chªges ( d©a ); 1056 `g_¦i¡_fÜ—ch ( d©a -> objeùs , »£t_·»Á , d©a-> ·»Á ); 1057 `g_¦i¡_ä“ ( d©a -> objeùs ); 1059 `dbus_cÚÃùiÚ_uÄef ( d©a -> cÚn ); 1060 `g_ä“ ( d©a -> šŒo¥eù ); 1061 `g_ä“ ( d©a -> ·th ); 1062 `g_ä“ ( d©a ); 1063 } } 1065  DBusHªdËrResuÉ $g’”ic_mes§ge ( DBusCÚÃùiÚ * cÚÃùiÚ , 1066 DBusMes§ge * mes§ge , * u£r_d©a ) 1068  g’”ic_d©a * d©a = u£r_d©a ; 1069  š‹rçû_d©a * içû ; 1070 cÚ¡ GDBusM‘hodTabË * m‘hod ; 1071 cÚ¡ * š‹rçû ; 1073 š‹rçû = `dbus_mes§ge_g‘_š‹rçû ( mes§ge ); 1075 içû = `fšd_š‹rçû ( d©a -> š‹rçûs , š‹rçû ); 1076 ià( içû =ð NULL ) 1077  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 1079  m‘hod = içû -> m‘hods ; method && 1080 m‘hod -> Çme && m‘hod-> funùiÚ ; method++) { 1082 ià( `dbus_mes§ge_is_m‘hod_ÿÎ ( mes§ge , içû -> Çme , 1083 m‘hod -> Çme è=ð FALSE ) 1086 ià( `check_ex³rim’l ( m‘hod -> æags , 1087 G_DBUS_METHOD_FLAG_EXPERIMENTAL )) 1088  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 1090 ià( `g_dbus_¬gs_have_sigÇtu» ( m‘hod -> š_¬gs , 1091 mes§ge è=ð FALSE ) 1094 ià( `check_´ivžege ( cÚÃùiÚ , mes§ge , m‘hod , 1095 içû -> u£r_d©a è=ð TRUE ) 1096  DBUS_HANDLER_RESULT_HANDLED ; 1097 #ifdeà __TIZEN_PATCH__ 1098 `gdbus_dbg ("%s: %s.%s()", `dbus_mes§ge_g‘_·th ( mes§ge ), 1099 içû -> Çme , m‘hod ->name); 1101  `´oûss_mes§ge ( cÚÃùiÚ , mes§ge , m‘hod , 1102 içû -> u£r_d©a ); 1105  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 1106 } } 1108  DBusObjeùP©hVTabË gg’”ic_bË = { 1109 . uÄegi¡”_funùiÚ = g’”ic_uÄegi¡” , 1110 . gmes§ge_funùiÚ = g’”ic_mes§ge , 1113 cÚ¡ GDBusM‘hodTabË gšŒo¥eù_m‘hods [] = { 1114 { GDBUS_METHOD ("IÁro¥eù", NULL , 1115 GDBUS_ARGS ({ "xml", "s" }), šŒo¥eù ) }, 1119  $­³nd_š‹rçûs ( g’”ic_d©a * d©a , DBusMes§geI‹r * ™” ) 1121 DBusMes§geI‹r ¬¿y ; 1123 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1124 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1125 DBUS_TYPE_STRING_AS_STRING 1126 DBUS_TYPE_ARRAY_AS_STRING 1127 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1128 DBUS_TYPE_STRING_AS_STRING 1129 DBUS_TYPE_VARIANT_AS_STRING 1130 DBUS_DICT_ENTRY_END_CHAR_AS_STRING 1131 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & ¬¿y ); 1133 `g_¦i¡_fÜ—ch ( d©a -> š‹rçûs , ­³nd_š‹rçû , & ¬¿y ); 1135 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ¬¿y ); 1136 } } 1138  $­³nd_objeù ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 1140  g’”ic_d©a * chžd = d©a ; 1141 DBusMes§geI‹r * ¬¿y = u£r_d©a ; 1142 DBusMes§geI‹r ’Œy ; 1144 `dbus_mes§ge_™”_Ý’_cÚš” ( ¬¿y , DBUS_TYPE_DICT_ENTRY , NULL , 1145 & ’Œy ); 1146 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_OBJECT_PATH , 1147 & chžd -> ·th ); 1148 `­³nd_š‹rçûs ( chžd , & ’Œy ); 1149 `dbus_mes§ge_™”_þo£_cÚš” ( ¬¿y , & ’Œy ); 1151 `g_¦i¡_fÜ—ch ( chžd -> objeùs , ­³nd_objeù , u£r_d©a ); 1152 } } 1154  DBusMes§ge * $g‘_objeùs ( DBusCÚÃùiÚ * cÚÃùiÚ , 1155 DBusMes§ge * mes§ge , * u£r_d©a ) 1157  g’”ic_d©a * d©a = u£r_d©a ; 1158 DBusMes§ge * »¶y ; 1159 DBusMes§geI‹r ™” ; 1160 DBusMes§geI‹r ¬¿y ; 1162 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( mes§ge ); 1163 ià( »¶y =ð NULL ) 1164  NULL ; 1166 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 1168 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 1169 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1170 DBUS_TYPE_OBJECT_PATH_AS_STRING 1171 DBUS_TYPE_ARRAY_AS_STRING 1172 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1173 DBUS_TYPE_STRING_AS_STRING 1174 DBUS_TYPE_ARRAY_AS_STRING 1175 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1176 DBUS_TYPE_STRING_AS_STRING 1177 DBUS_TYPE_VARIANT_AS_STRING 1178 DBUS_DICT_ENTRY_END_CHAR_AS_STRING 1179 DBUS_DICT_ENTRY_END_CHAR_AS_STRING 1180 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 1181 & ¬¿y ); 1183 `g_¦i¡_fÜ—ch ( d©a -> objeùs , ­³nd_objeù , & ¬¿y ); 1185 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & ¬¿y ); 1187  »¶y ; 1188 } } 1190 #ifdeà __TIZEN_PATCH__ 1191  DBusMes§ge * $deçuÉ_ad­‹r ( DBusCÚÃùiÚ * cÚn , 1192 DBusMes§ge * msg , * d©a ) 1194 DBusMes§ge * »¶y ; 1196 ià(! ad­‹r_·th ) 1197  `g_dbus_ü—‹_”rÜ ( msg , 1201 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 1202 ià(! »¶y ) 1203  NULL ; 1205 `dbus_mes§ge_­³nd_¬gs ( »¶y , DBUS_TYPE_OBJECT_PATH , & ad­‹r_·th , 1206 DBUS_TYPE_INVALID ); 1208  »¶y ; 1209 } } 1212 cÚ¡ GDBusM‘hodTabË gmªag”_m‘hods [] = { 1213 { GDBUS_METHOD ("G‘MªagedObjeùs", NULL , 1214 GDBUS_ARGS ({ "objeùs", "a{ß{§{sv}}}" }), g‘_objeùs ) }, 1215 #ifdeà __TIZEN_PATCH__ 1216 { GDBUS_METHOD ("DefaultAdapter", 1217 NULL , GDBUS_ARGS ({ "adapter", "o" }), 1218 deçuÉ_ad­‹r ) }, 1223 cÚ¡ GDBusSigÇlTabË gmªag”_sigÇls [] = { 1224 { GDBUS_SIGNAL ("InterfacesAdded", 1225 GDBUS_ARGS ({ "object", "o" }, 1227 { GDBUS_SIGNAL ("InterfacesRemoved", 1228 GDBUS_ARGS ({ "object", "o" }, { "interfaces", "as" })) }, 1232  gboÞ—n $add_š‹rçû ( g’”ic_d©a * d©a , 1233 cÚ¡ * Çme , 1234 cÚ¡ GDBusM‘hodTabË * m‘hods , 1235 cÚ¡ GDBusSigÇlTabË * sigÇls , 1236 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”t›s , 1237 * u£r_d©a , 1238 GDBusDe¡royFunùiÚ de¡roy ) 1240  š‹rçû_d©a * içû ; 1241 cÚ¡ GDBusM‘hodTabË * m‘hod ; 1242 cÚ¡ GDBusSigÇlTabË * sigÇl ; 1243 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty ; 1245  m‘hod = m‘hods ; m‘hod && m‘hod-> Çme ; method++) { 1246 ià(! `check_ex³rim’l ( m‘hod -> æags , 1247 G_DBUS_METHOD_FLAG_EXPERIMENTAL )) 1248  dÚe ; 1251  sigÇl = sigÇls ; sigÇÈ&& sigÇl-> Çme ; signal++) { 1252 ià(! `check_ex³rim’l ( sigÇl -> æags , 1253 G_DBUS_SIGNAL_FLAG_EXPERIMENTAL )) 1254  dÚe ; 1257  ´Ý”ty = ´Ý”t›s ;…rÝ”ty &&…rÝ”ty-> Çme ;…roperty++) { 1258 ià(! `check_ex³rim’l ( ´Ý”ty -> æags , 1259 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL )) 1260  dÚe ; 1264  FALSE ; 1266 dÚe : 1267 içû = `g_Ãw0 ( š‹rçû_d©a , 1); 1268 içû -> Çme = `g_¡rdup (name); 1269 içû -> m‘hods = methods; 1270 içû -> sigÇls = signals; 1271 içû -> ´Ý”t›s =…roperties; 1272 içû -> u£r_d©a = user_data; 1273 içû -> de¡roy = destroy; 1275 d©a -> š‹rçûs = `g_¦i¡_­³nd (d©a->š‹rçûs, içû ); 1276 ià( d©a -> ·»Á =ð NULL ) 1277  TRUE ; 1279 d©a -> added = `g_¦i¡_­³nd (d©a->added, içû ); 1281 `add_³ndšg ( d©a ); 1283  TRUE ; 1284 } } 1286  g’”ic_d©a * $objeù_·th_»f ( DBusCÚÃùiÚ * cÚÃùiÚ , 1287 cÚ¡ * ·th ) 1289  g’”ic_d©a * d©a ; 1291 ià( `dbus_cÚÃùiÚ_g‘_objeù_·th_d©a ( cÚÃùiÚ , ·th , 1292 (*è& d©a è=ð TRUE ) { 1293 ià( d©a !ð NULL ) { 1294 d©a -> »fcouÁ ++; 1295  d©a ; 1299 d©a = `g_Ãw0 ( g’”ic_d©a , 1); 1300 d©a -> cÚn = `dbus_cÚÃùiÚ_»f ( cÚÃùiÚ ); 1301 d©a -> ·th = `g_¡rdup (path); 1302 d©a -> »fcouÁ = 1; 1304 d©a -> šŒo¥eù = `g_¡rdup ( DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE ""); 1306 ià(! `dbus_cÚÃùiÚ_»gi¡”_objeù_·th ( cÚÃùiÚ , ·th , 1307 & g’”ic_bË , d©a )) { 1308 `dbus_cÚÃùiÚ_uÄef ( d©a -> cÚn ); 1309 `g_ä“ ( d©a -> ·th ); 1310 `g_ä“ ( d©a -> šŒo¥eù ); 1311 `g_ä“ ( d©a ); 1312  NULL ; 1315 `šv®id©e_·»Á_d©a ( cÚÃùiÚ , ·th ); 1317 `add_š‹rçû ( d©a , DBUS_INTERFACE_INTROSPECTABLE , šŒo¥eù_m‘hods , 1318 NULL , NULL, d©a , NULL); 1320  d©a ; 1321 } } 1323  $objeù_·th_uÄef ( DBusCÚÃùiÚ * cÚÃùiÚ , cÚ¡ * ·th ) 1325  g’”ic_d©a * d©a = NULL ; 1327 ià( `dbus_cÚÃùiÚ_g‘_objeù_·th_d©a ( cÚÃùiÚ , ·th , 1328 (*è& d©a è=ð FALSE ) 1331 ià( d©a =ð NULL ) 1334 d©a -> »fcouÁ --; 1336 ià( d©a -> »fcouÁ > 0) 1339 `»move_š‹rçû ( d©a , DBUS_INTERFACE_INTROSPECTABLE ); 1340 `»move_š‹rçû ( d©a , DBUS_INTERFACE_PROPERTIES ); 1342 `šv®id©e_·»Á_d©a ( d©a -> cÚn , d©a-> ·th ); 1344 `dbus_cÚÃùiÚ_uÄegi¡”_objeù_·th ( d©a -> cÚn , d©a-> ·th ); 1345 } } 1347  gboÞ—n $check_sigÇl ( DBusCÚÃùiÚ * cÚn , cÚ¡ * ·th , 1348 cÚ¡ * š‹rçû , cÚ¡ * Çme , 1349 cÚ¡ GDBusArgInfo ** ¬gs ) 1351  g’”ic_d©a * d©a = NULL ; 1352  š‹rçû_d©a * içû ; 1353 cÚ¡ GDBusSigÇlTabË * sigÇl ; 1355 * ¬gs = NULL ; 1356 ià(! `dbus_cÚÃùiÚ_g‘_objeù_·th_d©a ( cÚn , ·th , 1357 (*è& d©a è|| d©¨=ð NULL ) { 1358 `”rÜ ("dbus_connection_emit_signal:…ath %s isn't„egistered", 1359 ·th ); 1360  FALSE ; 1363 içû = `fšd_š‹rçû ( d©a -> š‹rçûs , š‹rçû ); 1364 ià( içû =ð NULL ) { 1365 `”rÜ ("dbus_connection_emit_signal: %s does‚ot implement %s", 1366 ·th , š‹rçû ); 1367  FALSE ; 1370  sigÇl = içû -> sigÇls ; sigÇÈ&& sigÇl-> Çme ; signal++) { 1371 ià( `¡rcmp ( sigÇl -> Çme ,‚ame) != 0) 1374 ià( sigÇl -> æags & G_DBUS_SIGNAL_FLAG_EXPERIMENTAL ) { 1375 cÚ¡ * ’v = `g_g‘’v ("GDBUS_EXPERIMENTAL"); 1376 ià( `g_¡rcmp0 ( ’v , "1") != 0) 1380 * ¬gs = sigÇl ->args; 1381  TRUE ; 1384 `”rÜ ("NØsigÇÈÇmed % Ú iÁ”çû %s", Çme , š‹rçû ); 1385  FALSE ; 1386 } } 1388 gboÞ—n $g_dbus_»gi¡”_š‹rçû ( DBusCÚÃùiÚ * cÚÃùiÚ , 1389 cÚ¡ * ·th , cÚ¡ * Çme , 1390 cÚ¡ GDBusM‘hodTabË * m‘hods , 1391 cÚ¡ GDBusSigÇlTabË * sigÇls , 1392 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”t›s , 1393 * u£r_d©a , 1394 GDBusDe¡royFunùiÚ de¡roy ) 1396  g’”ic_d©a * d©a ; 1398 d©a = `objeù_·th_»f ( cÚÃùiÚ , ·th ); 1399 ià( d©a =ð NULL ) 1400  FALSE ; 1402 ià( `fšd_š‹rçû ( d©a -> š‹rçûs , Çme )) { 1403 `objeù_·th_uÄef ( cÚÃùiÚ , ·th ); 1404  FALSE ; 1407 #ifdeà __TIZEN_PATCH__ 1408 ià( `g_¡rcmp0 ( Çme , ADAPTER_INTERFACE ) == 0) 1409 ad­‹r_·th = `g_¡rdup ( ·th ); 1412 ià(! `add_š‹rçû ( d©a , Çme , m‘hods , sigÇls , ´Ý”t›s , u£r_d©a , 1413 de¡roy )) { 1414 `objeù_·th_uÄef ( cÚÃùiÚ , ·th ); 1415  FALSE ; 1418 ià( ´Ý”t›s !ð NULL && ! `fšd_š‹rçû ( d©a -> š‹rçûs , 1419 DBUS_INTERFACE_PROPERTIES )) 1420 `add_š‹rçû ( d©a , DBUS_INTERFACE_PROPERTIES , 1421 ´Ý”t›s_m‘hods , ´Ý”t›s_sigÇls , NULL , 1422 d©a , NULL ); 1424 `g_ä“ ( d©a -> šŒo¥eù ); 1425 d©a -> šŒo¥eù = NULL ; 1427  TRUE ; 1428 } } 1430 gboÞ—n $g_dbus_uÄegi¡”_š‹rçû ( DBusCÚÃùiÚ * cÚÃùiÚ , 1431 cÚ¡ * ·th , cÚ¡ * Çme ) 1433  g’”ic_d©a * d©a = NULL ; 1435 ià( ·th =ð NULL ) 1436  FALSE ; 1438 ià( `dbus_cÚÃùiÚ_g‘_objeù_·th_d©a ( cÚÃùiÚ , ·th , 1439 (*è& d©a è=ð FALSE ) 1440  FALSE ; 1442 ià( d©a =ð NULL ) 1443  FALSE ; 1445 ià( `»move_š‹rçû ( d©a , Çme è=ð FALSE ) 1446  FALSE ; 1448 `g_ä“ ( d©a -> šŒo¥eù ); 1449 d©a -> šŒo¥eù = NULL ; 1451 `objeù_·th_uÄef ( cÚÃùiÚ , d©a -> ·th ); 1453  TRUE ; 1454 } } 1456 gboÞ—n $g_dbus_»gi¡”_£cur™y (cÚ¡ GDBusSecur™yTabË * £cur™y ) 1458 ià( £cur™y_bË !ð NULL ) 1459  FALSE ; 1461 £cur™y_bË = £cur™y ; 1463  TRUE ; 1464 } } 1466 gboÞ—n $g_dbus_uÄegi¡”_£cur™y (cÚ¡ GDBusSecur™yTabË * £cur™y ) 1468 £cur™y_bË = NULL ; 1470  TRUE ; 1471 } } 1473 DBusMes§ge * $g_dbus_ü—‹_”rÜ_v®i¡ ( DBusMes§ge * mes§ge , cÚ¡ * Çme , 1474 cÚ¡ * fÜm© , va_li¡ ¬gs ) 1476  ¡r [1024]; 1478 `v¢´štf ( ¡r , (¡r), fÜm© , ¬gs ); 1480  `dbus_mes§ge_Ãw_”rÜ ( mes§ge , Çme , ¡r ); 1481 } } 1483 DBusMes§ge * $g_dbus_ü—‹_”rÜ ( DBusMes§ge * mes§ge , cÚ¡ * Çme , 1484 cÚ¡ * fÜm© , ...) 1486 va_li¡ ¬gs ; 1487 DBusMes§ge * »¶y ; 1489 `va_¡¬t ( ¬gs , fÜm© ); 1491 »¶y = `g_dbus_ü—‹_”rÜ_v®i¡ ( mes§ge , Çme , fÜm© , ¬gs ); 1493 `va_’d ( ¬gs ); 1495  »¶y ; 1496 } } 1498 DBusMes§ge * $g_dbus_ü—‹_»¶y_v®i¡ ( DBusMes§ge * mes§ge , 1499  ty³ , va_li¡ ¬gs ) 1501 DBusMes§ge * »¶y ; 1503 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( mes§ge ); 1504 ià( »¶y =ð NULL ) 1505  NULL ; 1507 ià( `dbus_mes§ge_­³nd_¬gs_v®i¡ ( »¶y , ty³ , ¬gs è=ð FALSE ) { 1508 `dbus_mes§ge_uÄef ( »¶y ); 1509  NULL ; 1512  »¶y ; 1513 } } 1515 DBusMes§ge * $g_dbus_ü—‹_»¶y ( DBusMes§ge * mes§ge ,  ty³ , ...) 1517 va_li¡ ¬gs ; 1518 DBusMes§ge * »¶y ; 1520 `va_¡¬t ( ¬gs , ty³ ); 1522 »¶y = `g_dbus_ü—‹_»¶y_v®i¡ ( mes§ge , ty³ , ¬gs ); 1524 `va_’d ( ¬gs ); 1526  »¶y ; 1527 } } 1529  $g_dbus_æush ( DBusCÚÃùiÚ * cÚÃùiÚ ) 1531 GSLi¡ * l ; 1533  l = ³ndšg ;†;) { 1534  g’”ic_d©a * d©a = l ->data; 1536 l =†-> Ãxt ; 1537 ià( d©a -> cÚn !ð cÚÃùiÚ ) 1540 `´oûss_chªges ( d©a ); 1542 } } 1544 gboÞ—n $g_dbus_£nd_mes§ge ( DBusCÚÃùiÚ * cÚÃùiÚ , DBusMes§ge * mes§ge ) 1546 dbus_boÞ_t »suÉ = FALSE ; 1548 ià( `dbus_mes§ge_g‘_ty³ ( mes§ge è=ð DBUS_MESSAGE_TYPE_METHOD_CALL ) 1549 `dbus_mes§ge_£t_no_»¶y ( mes§ge , TRUE ); 1550 ià( `dbus_mes§ge_g‘_ty³ ( mes§ge è=ð DBUS_MESSAGE_TYPE_SIGNAL ) { 1551 cÚ¡ * ·th = `dbus_mes§ge_g‘_·th ( mes§ge ); 1552 cÚ¡ * š‹rçû = `dbus_mes§ge_g‘_š‹rçû ( mes§ge ); 1553 cÚ¡ * Çme = `dbus_mes§ge_g‘_memb” ( mes§ge ); 1554 cÚ¡ GDBusArgInfo * ¬gs ; 1556 ià(! `check_sigÇl ( cÚÃùiÚ , ·th , š‹rçû , Çme , & ¬gs )) 1557  out ; 1561 `g_dbus_æush ( cÚÃùiÚ ); 1563 »suÉ = `dbus_cÚÃùiÚ_£nd ( cÚÃùiÚ , mes§ge , NULL ); 1565 out : 1566 `dbus_mes§ge_uÄef ( mes§ge ); 1568  »suÉ ; 1569 } } 1571 gboÞ—n $g_dbus_£nd_mes§ge_w™h_»¶y ( DBusCÚÃùiÚ * cÚÃùiÚ , 1572 DBusMes§ge * mes§ge , 1573 DBusP’dšgC®l ** ÿÎ ,  timeout ) 1575 dbus_boÞ_t »t ; 1578 `g_dbus_æush ( cÚÃùiÚ ); 1580 »t = `dbus_cÚÃùiÚ_£nd_w™h_»¶y ( cÚÃùiÚ , mes§ge , ÿÎ , 1581 timeout ); 1583 ià( »t =ð TRUE && ÿÎ !ð NULL && *call == NULL) { 1584 `”rÜ ("Unableo send message (passing fd blocked?)"); 1585  FALSE ; 1588  »t ; 1589 } } 1591 gboÞ—n $g_dbus_£nd_”rÜ_v®i¡ ( DBusCÚÃùiÚ * cÚÃùiÚ , 1592 DBusMes§ge * mes§ge , cÚ¡ * Çme , 1593 cÚ¡ * fÜm© , va_li¡ ¬gs ) 1595 DBusMes§ge * ”rÜ ; 1596  ¡r [1024]; 1598 `v¢´štf ( ¡r , (¡r), fÜm© , ¬gs ); 1600 ”rÜ = `dbus_mes§ge_Ãw_”rÜ ( mes§ge , Çme , ¡r ); 1601 ià( ”rÜ =ð NULL ) 1602  FALSE ; 1604  `g_dbus_£nd_mes§ge ( cÚÃùiÚ , ”rÜ ); 1605 } } 1607 gboÞ—n $g_dbus_£nd_”rÜ ( DBusCÚÃùiÚ * cÚÃùiÚ , DBusMes§ge * mes§ge , 1608 cÚ¡ * Çme , cÚ¡ * fÜm© , ...) 1610 va_li¡ ¬gs ; 1611 gboÞ—n »suÉ ; 1613 `va_¡¬t ( ¬gs , fÜm© ); 1615 »suÉ = `g_dbus_£nd_”rÜ_v®i¡ ( cÚÃùiÚ , mes§ge , Çme , 1616 fÜm© , ¬gs ); 1618 `va_’d ( ¬gs ); 1620  »suÉ ; 1621 } } 1623 gboÞ—n $g_dbus_£nd_»¶y_v®i¡ ( DBusCÚÃùiÚ * cÚÃùiÚ , 1624 DBusMes§ge * mes§ge ,  ty³ , va_li¡ ¬gs ) 1626 DBusMes§ge * »¶y ; 1628 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( mes§ge ); 1629 ià( »¶y =ð NULL ) 1630  FALSE ; 1632 ià( `dbus_mes§ge_­³nd_¬gs_v®i¡ ( »¶y , ty³ , ¬gs è=ð FALSE ) { 1633 `dbus_mes§ge_uÄef ( »¶y ); 1634  FALSE ; 1637  `g_dbus_£nd_mes§ge ( cÚÃùiÚ , »¶y ); 1638 } } 1640 gboÞ—n $g_dbus_£nd_»¶y ( DBusCÚÃùiÚ * cÚÃùiÚ , 1641 DBusMes§ge * mes§ge ,  ty³ , ...) 1643 va_li¡ ¬gs ; 1644 gboÞ—n »suÉ ; 1646 `va_¡¬t ( ¬gs , ty³ ); 1648 »suÉ = `g_dbus_£nd_»¶y_v®i¡ ( cÚÃùiÚ , mes§ge , ty³ , ¬gs ); 1650 `va_’d ( ¬gs ); 1652  »suÉ ; 1653 } } 1655 gboÞ—n $g_dbus_em™_sigÇl ( DBusCÚÃùiÚ * cÚÃùiÚ , 1656 cÚ¡ * ·th , cÚ¡ * š‹rçû , 1657 cÚ¡ * Çme ,  ty³ , ...) 1659 va_li¡ ¬gs ; 1660 gboÞ—n »suÉ ; 1662 `va_¡¬t ( ¬gs , ty³ ); 1664 »suÉ = `g_dbus_em™_sigÇl_v®i¡ ( cÚÃùiÚ , ·th , š‹rçû , 1665 Çme , ty³ , ¬gs ); 1667 `va_’d ( ¬gs ); 1669  »suÉ ; 1670 } } 1672 gboÞ—n $g_dbus_em™_sigÇl_v®i¡ ( DBusCÚÃùiÚ * cÚÃùiÚ , 1673 cÚ¡ * ·th , cÚ¡ * š‹rçû , 1674 cÚ¡ * Çme ,  ty³ , va_li¡ ¬gs ) 1676 DBusMes§ge * sigÇl ; 1677 dbus_boÞ_t »t ; 1678 cÚ¡ GDBusArgInfo * ¬gs_šfo ; 1680 ià(! `check_sigÇl ( cÚÃùiÚ , ·th , š‹rçû , Çme , & ¬gs_šfo )) 1681  FALSE ; 1683 sigÇl = `dbus_mes§ge_Ãw_sigÇl ( ·th , š‹rçû , Çme ); 1684 ià( sigÇl =ð NULL ) { 1685 `”rÜ ("UÇbËØ®loÿ‹‚ew %s.% sigÇl", š‹rçû , Çme ); 1686  FALSE ; 1689 »t = `dbus_mes§ge_­³nd_¬gs_v®i¡ ( sigÇl , ty³ , ¬gs ); 1690 ià(! »t ) 1691  çž ; 1693 ià( `g_dbus_¬gs_have_sigÇtu» ( ¬gs_šfo , sigÇl è=ð FALSE ) { 1694 `”rÜ ("%s.%s: gÙ uÃx³ùed sigÇtu» '%s'", š‹rçû , Çme , 1695 `dbus_mes§ge_g‘_sigÇtu» ( sigÇl )); 1696 »t = FALSE ; 1697  çž ; 1700  `g_dbus_£nd_mes§ge ( cÚÃùiÚ , sigÇl ); 1702 çž : 1703 `dbus_mes§ge_uÄef ( sigÇl ); 1705  »t ; 1706 } } 1708  $´oûss_´Ý”t›s_äom_š‹rçû ( g’”ic_d©a * d©a , 1709  š‹rçû_d©a * içû ) 1711 GSLi¡ * l ; 1712 DBusMes§ge * sigÇl ; 1713 DBusMes§geI‹r ™” , diù , ¬¿y ; 1714 GSLi¡ * šv®id©ed ; 1716 d©a -> ³ndšg_´Ý = FALSE ; 1718 ià( içû -> ³ndšg_´Ý =ð NULL ) 1721 sigÇl = `dbus_mes§ge_Ãw_sigÇl ( d©a -> ·th , 1722 DBUS_INTERFACE_PROPERTIES , "PropertiesChanged"); 1723 ià( sigÇl =ð NULL ) { 1724 `”rÜ ("UÇbËØ®loÿ‹‚ew " DBUS_INTERFACE_PROPERTIES 1729 içû -> ³ndšg_´Ý = `g_¦i¡_»v”£ (iface->pending_prop); 1731 `dbus_mes§ge_™”_š™_­³nd ( sigÇl , & ™” ); 1732 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_STRING , & içû -> Çme ); 1733 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 1734 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1735 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 1736 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 1738 šv®id©ed = NULL ; 1740  l = içû -> ³ndšg_´Ý ;† !ð NULL ;† =†-> Ãxt ) { 1741 GDBusPrÝ”tyTabË * p = l -> d©a ; 1743 ià( p -> g‘ =ð NULL ) 1746 ià( p -> exi¡s !ð NULL && !p-> `exi¡s Õ, içû -> u£r_d©a )) { 1747 šv®id©ed = `g_¦i¡_´•’d (šv®id©ed, p ); 1751 `­³nd_´Ý”ty ( içû , p , & diù ); 1754 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & diù ); 1756 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 1757 DBUS_TYPE_STRING_AS_STRING , & ¬¿y ); 1758  l = šv®id©ed ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 1759 GDBusPrÝ”tyTabË * p = l -> d©a ; 1761 `dbus_mes§ge_™”_­³nd_basic (& ¬¿y , DBUS_TYPE_STRING , 1762 & p -> Çme ); 1764 `g_¦i¡_ä“ ( šv®id©ed ); 1765 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & ¬¿y ); 1767 `g_¦i¡_ä“ ( içû -> ³ndšg_´Ý ); 1768 içû -> ³ndšg_´Ý = NULL ; 1771 `dbus_cÚÃùiÚ_£nd ( d©a -> cÚn , sigÇl , NULL ); 1772 `dbus_mes§ge_uÄef ( sigÇl ); 1773 } } 1775  $´oûss_´Ý”ty_chªges ( g’”ic_d©a * d©a ) 1777 GSLi¡ * l ; 1779  l = d©a -> š‹rçûs ;† !ð NULL ;† =†-> Ãxt ) { 1780  š‹rçû_d©a * içû = l -> d©a ; 1782 `´oûss_´Ý”t›s_äom_š‹rçû ( d©a , içû ); 1784 } } 1786  $g_dbus_em™_´Ý”ty_chªged ( DBusCÚÃùiÚ * cÚÃùiÚ , 1787 cÚ¡ * ·th , cÚ¡ * š‹rçû , 1788 cÚ¡ * Çme ) 1790 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty ; 1791  g’”ic_d©a * d©a ; 1792  š‹rçû_d©a * içû ; 1794 ià( ·th =ð NULL ) 1797 ià(! `dbus_cÚÃùiÚ_g‘_objeù_·th_d©a ( cÚÃùiÚ , ·th , 1798 (**è& d©a è|| d©¨=ð NULL ) 1801 içû = `fšd_š‹rçû ( d©a -> š‹rçûs , š‹rçû ); 1802 ià( içû =ð NULL ) 1809 ià( roÙ && `g_¦i¡_fšd ( d©a -> added , içû )) 1812 ´Ý”ty = `fšd_´Ý”ty ( içû -> ´Ý”t›s , Çme ); 1813 ià( ´Ý”ty =ð NULL ) { 1814 `”rÜ ("Could‚Ù fšd…rÝ”ty % š %p", Çme , 1815 içû -> ´Ý”t›s ); 1819 ià( `g_¦i¡_fšd ( içû -> ³ndšg_´Ý , (*è ´Ý”ty è!ð NULL ) 1822 d©a -> ³ndšg_´Ý = TRUE ; 1823 içû -> ³ndšg_´Ý = `g_¦i¡_´•’d (iface->pending_prop, 1824 (*è ´Ý”ty ); 1826 `add_³ndšg ( d©a ); 1827 } } 1829 gboÞ—n $g_dbus_g‘_´Ý”t›s ( DBusCÚÃùiÚ * cÚÃùiÚ , cÚ¡ * ·th , 1830 cÚ¡ * š‹rçû , DBusMes§geI‹r * ™” ) 1832  g’”ic_d©a * d©a ; 1833  š‹rçû_d©a * içû ; 1835 ià( ·th =ð NULL ) 1836  FALSE ; 1838 ià(! `dbus_cÚÃùiÚ_g‘_objeù_·th_d©a ( cÚÃùiÚ , ·th , 1839 (**è& d©a è|| d©¨=ð NULL ) 1840  FALSE ; 1842 içû = `fšd_š‹rçû ( d©a -> š‹rçûs , š‹rçû ); 1843 ià( içû =ð NULL ) 1844  FALSE ; 1846 `­³nd_´Ý”t›s ( içû , ™” ); 1848  TRUE ; 1849 } } 1851 gboÞ—n $g_dbus_©ch_objeù_mªag” ( DBusCÚÃùiÚ * cÚÃùiÚ ) 1853  g’”ic_d©a * d©a ; 1855 d©a = `objeù_·th_»f ( cÚÃùiÚ , "/"); 1856 ià( d©a =ð NULL ) 1857  FALSE ; 1859 `add_š‹rçû ( d©a , DBUS_INTERFACE_OBJECT_MANAGER , 1860 mªag”_m‘hods , mªag”_sigÇls , 1861 NULL , d©a , NULL); 1862 roÙ = d©a ; 1864  TRUE ; 1865 } } 1867 gboÞ—n $g_dbus_d‘ach_objeù_mªag” ( DBusCÚÃùiÚ * cÚÃùiÚ ) 1869 ià(! `g_dbus_uÄegi¡”_š‹rçû ( cÚÃùiÚ , "/", 1870 DBUS_INTERFACE_OBJECT_MANAGER )) 1871  FALSE ; 1873 roÙ = NULL ; 1875  TRUE ; 1876 } } 1878  $g_dbus_£t_æags ( æags ) 1880 glob®_æags = æags ; 1881 } } @gdbus/polkit.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<”ºo.h > 30  ~ 32  ~ 34  pÞk™_check_authÜiz©iÚ ( DBusCÚÃùiÚ * cÚn , 35 cÚ¡ * aùiÚ , gboÞ—n š‹¿ùiÚ , 36 (* funùiÚ è( dbus_boÞ_t authÜized , 37 * u£r_d©a ), 38 * u£r_d©a ,  timeout ); 40  $add_diù_w™h_¡ršg_v®ue ( DBusMes§geI‹r * ™” , 41 cÚ¡ * key , cÚ¡ * ¡r ) 43 DBusMes§geI‹r diù , ’Œy , v®ue ; 45 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 46 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 47 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 48 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 49 `dbus_mes§ge_™”_Ý’_cÚš” (& diù , DBUS_TYPE_DICT_ENTRY , 50 NULL , & ’Œy ); 52 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & key ); 54 `dbus_mes§ge_™”_Ý’_cÚš” (& ’Œy , DBUS_TYPE_VARIANT , 55 DBUS_TYPE_STRING_AS_STRING , & v®ue ); 56 `dbus_mes§ge_™”_­³nd_basic (& v®ue , DBUS_TYPE_STRING , & ¡r ); 57 `dbus_mes§ge_™”_þo£_cÚš” (& ’Œy , & v®ue ); 59 `dbus_mes§ge_™”_þo£_cÚš” (& diù , & ’Œy ); 60 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 61 } } 63  $add_em±y_¡ršg_diù ( DBusMes§geI‹r * ™” ) 65 DBusMes§geI‹r diù ; 67 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 68 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 69 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_STRING_AS_STRING 70 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 72 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 73 } } 75  $add_¬gum’ts ( DBusCÚÃùiÚ * cÚn , DBusMes§geI‹r * ™” , 76 cÚ¡ * aùiÚ , dbus_ušt32_t æags ) 78 cÚ¡ * bu¢ame = `dbus_bus_g‘_unique_Çme ( cÚn ); 79 cÚ¡ * kšd = "system-bus-name"; 80 cÚ¡ * ÿnûl = ""; 81 DBusMes§geI‹r subjeù ; 83 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_STRUCT , 84 NULL , & subjeù ); 85 `dbus_mes§ge_™”_­³nd_basic (& subjeù , DBUS_TYPE_STRING , & kšd ); 86 `add_diù_w™h_¡ršg_v®ue (& subjeù , "Çme", bu¢ame ); 87 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & subjeù ); 89 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & aùiÚ ); 90 `add_em±y_¡ršg_diù ( ™” ); 91 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT32 , & æags ); 92 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ÿnûl ); 93 } } 95  dbus_boÞ_t $·r£_»suÉ ( DBusMes§geI‹r * ™” ) 97 DBusMes§geI‹r »suÉ ; 98 dbus_boÞ_t authÜized , ch®Ënge ; 100 `dbus_mes§ge_™”_»cur£ ( ™” , & »suÉ ); 102 `dbus_mes§ge_™”_g‘_basic (& »suÉ , & authÜized ); 103 `dbus_mes§ge_™”_g‘_basic (& »suÉ , & ch®Ënge ); 105  authÜized ; 106 } } 108  sauthÜiz©iÚ_d©a { 109 (* mfunùiÚ è( dbus_boÞ_t mauthÜized , * mu£r_d©a ); 110 * mu£r_d©a ; 113  $authÜiz©iÚ_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 115  authÜiz©iÚ_d©a * d©a = u£r_d©a ; 116 DBusMes§ge * »¶y ; 117 DBusMes§geI‹r ™” ; 118 dbus_boÞ_t authÜized = FALSE ; 120 »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 122 ià( `dbus_mes§ge_g‘_ty³ ( »¶y è=ð DBUS_MESSAGE_TYPE_ERROR ) 123  dÚe ; 125 ià( `dbus_mes§ge_has_sigÇtu» ( »¶y , "(bba{ss})"è=ð FALSE ) 126  dÚe ; 128 `dbus_mes§ge_™”_š™ ( »¶y , & ™” ); 130 authÜized = `·r£_»suÉ (& ™” ); 132 dÚe : 133 ià( d©a -> funùiÚ !ð NULL ) 134 d©a -> `funùiÚ ( authÜized , d©a-> u£r_d©a ); 136 `dbus_mes§ge_uÄef ( »¶y ); 138 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 139 } } 141  #AUTHORITY_DBUS "Üg.ä“desktÝ.PÞicyK™1" ) 142  #AUTHORITY_INTF "Üg.ä“desktÝ.PÞicyK™1.AuthÜ™y" ) 143  #AUTHORITY_PATH "/Üg/ä“desktÝ/PÞicyK™1/AuthÜ™y" ) 145  pÞk™_check_authÜiz©iÚ ( DBusCÚÃùiÚ * cÚn , 146 cÚ¡ * aùiÚ , gboÞ—n š‹¿ùiÚ , 147 (* funùiÚ è( dbus_boÞ_t authÜized , 148 * u£r_d©a ), 149 * u£r_d©a ,  timeout ) 151  authÜiz©iÚ_d©a * d©a ; 152 DBusMes§ge * msg ; 153 DBusMes§geI‹r ™” ; 154 DBusP’dšgC®l * ÿÎ ; 155 dbus_ušt32_t æags = 0x00000000; 157 ià( cÚn =ð NULL ) 158  - EINVAL ; 160 d©a = `dbus_m®loc0 ((*data)); 161 ià( d©a =ð NULL ) 162  - ENOMEM ; 164 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( AUTHORITY_DBUS , AUTHORITY_PATH , 165 AUTHORITY_INTF , "CheckAuthorization"); 166 ià( msg =ð NULL ) { 167 `dbus_ä“ ( d©a ); 168  - ENOMEM ; 171 ià( š‹¿ùiÚ =ð TRUE ) 172 æags |= 0x00000001; 174 ià( aùiÚ =ð NULL ) 175 aùiÚ = "org.freedesktop.policykit.exec"; 177 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 178 `add_¬gum’ts ( cÚn , & ™” , aùiÚ , æags ); 180 ià( `dbus_cÚÃùiÚ_£nd_w™h_»¶y ( cÚn , msg , 181 & ÿÎ , timeout è=ð FALSE ) { 182 `dbus_mes§ge_uÄef ( msg ); 183 `dbus_ä“ ( d©a ); 184  - EIO ; 187 ià( ÿÎ =ð NULL ) { 188 `dbus_mes§ge_uÄef ( msg ); 189 `dbus_ä“ ( d©a ); 190  - EIO ; 193 d©a -> funùiÚ = function; 194 d©a -> u£r_d©a = user_data; 196 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , authÜiz©iÚ_»¶y , 197 d©a , dbus_ä“ ); 199 `dbus_mes§ge_uÄef ( msg ); 202 } } @gdbus/watch.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡ršg.h > 31  ~ 32  ~ 34  ~"gdbus.h " 36  #šfo ( fmt ...) ) 37  #”rÜ ( fmt ...) ) 38  #debug ( fmt ...) ) 40  DBusHªdËrResuÉ mes§ge_fž‹r ( DBusCÚÃùiÚ * cÚÃùiÚ , 41 DBusMes§ge * mes§ge , * u£r_d©a ); 43  gušt gli¡’”_id = 0; 44  GSLi¡ * gli¡’”s = NULL ; 46  s£rviû_d©a { 47 DBusCÚÃùiÚ * mcÚn ; 48 DBusP’dšgC®l * mÿÎ ; 49 * mÇme ; 50 cÚ¡ * mowÃr ; 51 gušt mid ; 52  fž‹r_ÿÎback * mÿÎback ; 55  sfž‹r_ÿÎback { 56 GDBusW©chFunùiÚ mcÚn_func ; 57 GDBusW©chFunùiÚ mdisc_func ; 58 GDBusSigÇlFunùiÚ msigÇl_func ; 59 GDBusDe¡royFunùiÚ mde¡roy_func ; 60  £rviû_d©a * md©a ; 61 * mu£r_d©a ; 62 gušt mid ; 65  sfž‹r_d©a { 66 DBusCÚÃùiÚ * mcÚÃùiÚ ; 67 DBusHªdËMes§geFunùiÚ mhªdË_func ; 68 * mÇme ; 69 * mowÃr ; 70 * m·th ; 71 * mš‹rçû ; 72 * mmemb” ; 73 * m¬gum’t ; 74 GSLi¡ * mÿÎbacks ; 75 GSLi¡ * m´oûs£d ; 76 gušt mÇme_w©ch ; 77 gboÞ—n mlock ; 78 gboÞ—n m»gi¡”ed ; 81  fž‹r_d©a * $fž‹r_d©a_fšd_m©ch ( DBusCÚÃùiÚ * cÚÃùiÚ , 82 cÚ¡ * Çme , 83 cÚ¡ * owÃr , 84 cÚ¡ * ·th , 85 cÚ¡ * š‹rçû , 86 cÚ¡ * memb” , 87 cÚ¡ * ¬gum’t ) 89 GSLi¡ * cu¼’t ; 91  cu¼’t = li¡’”s ; 92 cu¼’t !ð NULL ; cu¼’ˆðcu¼’t-> Ãxt ) { 93  fž‹r_d©a * d©a = cu¼’t ->data; 95 ià( cÚÃùiÚ !ð d©a ->connection) 98 ià( `g_¡rcmp0 ( Çme , d©a ->name) != 0) 101 ià( `g_¡rcmp0 ( owÃr , d©a ->owner) != 0) 104 ià( `g_¡rcmp0 ( ·th , d©a ->path) != 0) 107 ià( `g_¡rcmp0 ( š‹rçû , d©a ->interface) != 0) 110 ià( `g_¡rcmp0 ( memb” , d©a ->member) != 0) 113 ià( `g_¡rcmp0 ( ¬gum’t , d©a ->argument) != 0) 116  d©a ; 119  NULL ; 120 } } 122  fž‹r_d©a * $fž‹r_d©a_fšd ( DBusCÚÃùiÚ * cÚÃùiÚ ) 124 GSLi¡ * cu¼’t ; 126  cu¼’t = li¡’”s ; 127 cu¼’t !ð NULL ; cu¼’ˆðcu¼’t-> Ãxt ) { 128  fž‹r_d©a * d©a = cu¼’t ->data; 130 ià( cÚÃùiÚ !ð d©a ->connection) 133  d©a ; 136  NULL ; 137 } } 139  $fÜm©_ruË ( fž‹r_d©a * d©a , * ruË , size_t size ) 141 cÚ¡ * £nd” ; 142  off£t ; 144 off£t = `¢´štf ( ruË , size , "type='signal'"); 145 £nd” = d©a -> Çme ? : d©a-> owÃr ; 147 ià( £nd” ) 148 off£t +ð `¢´štf ( ruË + off£t, size - offset, 149 ",£nd”='%s'", £nd” ); 150 ià( d©a -> ·th ) 151 off£t +ð `¢´štf ( ruË + off£t, size - offset, 152 ",·th='%s'", d©a -> ·th ); 153 ià( d©a -> š‹rçû ) 154 off£t +ð `¢´štf ( ruË + off£t, size - offset, 155 ",š‹rçû='%s'", d©a -> š‹rçû ); 156 ià( d©a -> memb” ) 157 off£t +ð `¢´štf ( ruË + off£t, size - offset, 158 ",memb”='%s'", d©a -> memb” ); 159 ià( d©a -> ¬gum’t ) 160 `¢´štf ( ruË + off£t , size - offset, 161 ",¬g0='%s'", d©a -> ¬gum’t ); 162 } } 164  gboÞ—n $add_m©ch ( fž‹r_d©a * d©a , 165 DBusHªdËMes§geFunùiÚ fž‹r ) 167 DBusE¼Ü ”r ; 168  ruË [ DBUS_MAXIMUM_MATCH_RULE_LENGTH ]; 170 `fÜm©_ruË ( d©a , ruË , (rule)); 171 `dbus_”rÜ_š™ (& ”r ); 173 `dbus_bus_add_m©ch ( d©a -> cÚÃùiÚ , ruË , & ”r ); 174 ià( `dbus_”rÜ_is_£t (& ”r )) { 175 `”rÜ ("Addšg m©ch„uË \"%s\" fažed: %s", ruË , 176 ”r . mes§ge ); 177 `dbus_”rÜ_ä“ (& ”r ); 178  FALSE ; 181 d©a -> hªdË_func = fž‹r ; 182 d©a -> »gi¡”ed = TRUE ; 184  TRUE ; 185 } } 187  gboÞ—n $»move_m©ch ( fž‹r_d©a * d©a ) 189 DBusE¼Ü ”r ; 190  ruË [ DBUS_MAXIMUM_MATCH_RULE_LENGTH ]; 192 `fÜm©_ruË ( d©a , ruË , (rule)); 194 `dbus_”rÜ_š™ (& ”r ); 196 `dbus_bus_»move_m©ch ( d©a -> cÚÃùiÚ , ruË , & ”r ); 197 ià( `dbus_”rÜ_is_£t (& ”r )) { 198 `”rÜ ("Removing owner match„ule for %s failed: %s", 199 ruË , ”r . mes§ge ); 200 `dbus_”rÜ_ä“ (& ”r ); 201  FALSE ; 204  TRUE ; 205 } } 207  fž‹r_d©a * $fž‹r_d©a_g‘ ( DBusCÚÃùiÚ * cÚÃùiÚ , 208 DBusHªdËMes§geFunùiÚ fž‹r , 209 cÚ¡ * £nd” , 210 cÚ¡ * ·th , 211 cÚ¡ * š‹rçû , 212 cÚ¡ * memb” , 213 cÚ¡ * ¬gum’t ) 215  fž‹r_d©a * d©a ; 216 cÚ¡ * Çme = NULL , * owÃr = NULL; 218 ià( `fž‹r_d©a_fšd ( cÚÃùiÚ è=ð NULL ) { 219 ià(! `dbus_cÚÃùiÚ_add_fž‹r ( cÚÃùiÚ , 220 mes§ge_fž‹r , NULL , NULL)) { 221 `”rÜ ("dbus_connection_add_filter() failed"); 222  NULL ; 226 ià( £nd” =ð NULL ) 227  ´oûed ; 229 ià( £nd” [0] == ':') 230 owÃr = £nd” ; 232 Çme = £nd” ; 234 ´oûed : 235 d©a = `fž‹r_d©a_fšd_m©ch ( cÚÃùiÚ , Çme , owÃr , ·th , 236 š‹rçû , memb” , ¬gum’t ); 237 ià( d©a ) 238  d©a ; 240 d©a = `g_Ãw0 ( fž‹r_d©a , 1); 242 d©a -> cÚÃùiÚ = `dbus_cÚÃùiÚ_»f (connection); 243 d©a -> Çme = `g_¡rdup (name); 244 d©a -> owÃr = `g_¡rdup (owner); 245 d©a -> ·th = `g_¡rdup (path); 246 d©a -> š‹rçû = `g_¡rdup (interface); 247 d©a -> memb” = `g_¡rdup (member); 248 d©a -> ¬gum’t = `g_¡rdup (argument); 250 ià(! `add_m©ch ( d©a , fž‹r )) { 251 `g_ä“ ( d©a ); 252  NULL ; 255 li¡’”s = `g_¦i¡_­³nd Öi¡’”s, d©a ); 257  d©a ; 258 } } 260  fž‹r_ÿÎback * $fž‹r_d©a_fšd_ÿÎback ( 261  fž‹r_d©a * d©a , 262 gušt id ) 264 GSLi¡ * l ; 266  l = d©a -> ÿÎbacks ;†;† =†-> Ãxt ) { 267  fž‹r_ÿÎback * cb = l -> d©a ; 268 ià( cb -> id == id) 269  cb ; 271  l = d©a -> ´oûs£d ;†;† =†-> Ãxt ) { 272  fž‹r_ÿÎback * cb = l -> d©a ; 273 ià( cb -> id == id) 274  cb ; 277  NULL ; 278 } } 280  $fž‹r_d©a_ä“ ( fž‹r_d©a * d©a ) 282 GSLi¡ * l ; 285 ià( `fž‹r_d©a_fšd ( d©a -> cÚÃùiÚ è=ð NULL ) 286 `dbus_cÚÃùiÚ_»move_fž‹r ( d©a -> cÚÃùiÚ , mes§ge_fž‹r , 287 NULL ); 289  l = d©a -> ÿÎbacks ;† !ð NULL ;† =†-> Ãxt ) 290 `g_ä“ ( l -> d©a ); 292 `g_¦i¡_ä“ ( d©a -> ÿÎbacks ); 293 `g_dbus_»move_w©ch ( d©a -> cÚÃùiÚ , d©a-> Çme_w©ch ); 294 `g_ä“ ( d©a -> Çme ); 295 `g_ä“ ( d©a -> owÃr ); 296 `g_ä“ ( d©a -> ·th ); 297 `g_ä“ ( d©a -> š‹rçû ); 298 `g_ä“ ( d©a -> memb” ); 299 `g_ä“ ( d©a -> ¬gum’t ); 300 `dbus_cÚÃùiÚ_uÄef ( d©a -> cÚÃùiÚ ); 301 `g_ä“ ( d©a ); 302 } } 304  $fž‹r_d©a_ÿÎ_ªd_ä“ ( fž‹r_d©a * d©a ) 306 GSLi¡ * l ; 308  l = d©a -> ÿÎbacks ;† !ð NULL ;† =†-> Ãxt ) { 309  fž‹r_ÿÎback * cb = l -> d©a ; 310 ià( cb -> disc_func ) 311 cb -> `disc_func ( d©a -> cÚÃùiÚ , cb-> u£r_d©a ); 312 ià( cb -> de¡roy_func ) 313 cb -> `de¡roy_func (cb-> u£r_d©a ); 314 `g_ä“ ( cb ); 317 `fž‹r_d©a_ä“ ( d©a ); 318 } } 320  fž‹r_ÿÎback * $fž‹r_d©a_add_ÿÎback ( 321  fž‹r_d©a * d©a , 322 GDBusW©chFunùiÚ cÚÃù , 323 GDBusW©chFunùiÚ discÚÃù , 324 GDBusSigÇlFunùiÚ sigÇl , 325 GDBusDe¡royFunùiÚ de¡roy , 326 * u£r_d©a ) 328  fž‹r_ÿÎback * cb = NULL ; 330 cb = `g_Ãw0 ( fž‹r_ÿÎback , 1); 332 cb -> cÚn_func = cÚÃù ; 333 cb -> disc_func = discÚÃù ; 334 cb -> sigÇl_func = sigÇl ; 335 cb -> de¡roy_func = de¡roy ; 336 cb -> u£r_d©a = user_data; 337 cb -> id = ++ li¡’”_id ; 339 ià( d©a -> lock ) 340 d©a -> ´oûs£d = `g_¦i¡_­³nd (d©a->´oûs£d, cb ); 342 d©a -> ÿÎbacks = `g_¦i¡_­³nd (d©a->ÿÎbacks, cb ); 344  cb ; 345 } } 347  $£rviû_d©a_ä“ ( £rviû_d©a * d©a ) 349  fž‹r_ÿÎback * ÿÎback = d©a ->callback; 351 `dbus_cÚÃùiÚ_uÄef ( d©a -> cÚn ); 353 ià( d©a -> ÿÎ ) 354 `dbus_³ndšg_ÿÎ_uÄef ( d©a -> ÿÎ ); 356 ià( d©a -> id ) 357 `g_sourû_»move ( d©a -> id ); 359 `g_ä“ ( d©a -> Çme ); 360 `g_ä“ ( d©a ); 362 ÿÎback -> d©a = NULL ; 363 } } 366  gboÞ—n $fž‹r_d©a_»move_ÿÎback ( fž‹r_d©a * d©a , 367  fž‹r_ÿÎback * cb ) 369 d©a -> ÿÎbacks = `g_¦i¡_»move (d©a->ÿÎbacks, cb ); 370 d©a -> ´oûs£d = `g_¦i¡_»move (d©a->´oûs£d, cb ); 373 ià( cb -> d©a ) { 374 ià( cb -> d©a -> ÿÎ ) 375 `dbus_³ndšg_ÿÎ_ÿnûl ( cb -> d©a -> ÿÎ ); 376 `£rviû_d©a_ä“ ( cb -> d©a ); 379 ià( cb -> de¡roy_func ) 380 cb -> `de¡roy_func (cb-> u£r_d©a ); 382 `g_ä“ ( cb ); 386 ià( d©a -> ÿÎbacks || d©a-> lock ) 387  FALSE ; 389 ià( d©a -> »gi¡”ed && ! `»move_m©ch (data)) 390  FALSE ; 392 li¡’”s = `g_¦i¡_»move Öi¡’”s, d©a ); 393 `fž‹r_d©a_ä“ ( d©a ); 395  TRUE ; 396 } } 398  DBusHªdËrResuÉ $sigÇl_fž‹r ( DBusCÚÃùiÚ * cÚÃùiÚ , 399 DBusMes§ge * mes§ge , * u£r_d©a ) 401  fž‹r_d©a * d©a = u£r_d©a ; 402  fž‹r_ÿÎback * cb ; 404  d©a -> ÿÎbacks ) { 405 cb = d©a -> ÿÎbacks ->data; 407 ià( cb -> sigÇl_func && !cb-> `sigÇl_func ( cÚÃùiÚ , mes§ge , 408 cb -> u£r_d©a )) { 409 ià( `fž‹r_d©a_»move_ÿÎback ( d©a , cb )) 417 ià(! `g_¦i¡_fšd ( d©a -> ÿÎbacks , cb )) 420 d©a -> ÿÎbacks = `g_¦i¡_»move (d©a->ÿÎbacks, cb ); 421 d©a -> ´oûs£d = `g_¦i¡_­³nd (d©a->´oûs£d, cb ); 424  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 425 } } 427  $upd©e_Çme_ÿche (cÚ¡ * Çme , cÚ¡ * owÃr ) 429 GSLi¡ * l ; 431  l = li¡’”s ;† !ð NULL ;† =†-> Ãxt ) { 432  fž‹r_d©a * d©a = l ->data; 434 ià( `g_¡rcmp0 ( d©a -> Çme ,‚ame) != 0) 437 `g_ä“ ( d©a -> owÃr ); 438 d©a -> owÃr = `g_¡rdup (owner); 440 } } 442 cÚ¡ * $check_Çme_ÿche (cÚ¡ * Çme ) 444 GSLi¡ * l ; 446  l = li¡’”s ;† !ð NULL ;† =†-> Ãxt ) { 447  fž‹r_d©a * d©a = l ->data; 449 ià( `g_¡rcmp0 ( d©a -> Çme ,‚ame) != 0) 452  d©a -> owÃr ; 455  NULL ; 456 } } 458  DBusHªdËrResuÉ $£rviû_fž‹r ( DBusCÚÃùiÚ * cÚÃùiÚ , 459 DBusMes§ge * mes§ge , * u£r_d©a ) 461  fž‹r_d©a * d©a = u£r_d©a ; 462  fž‹r_ÿÎback * cb ; 463 * Çme , * Þd , * Ãw ; 465 ià(! `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 466 DBUS_TYPE_STRING , & Çme , 467 DBUS_TYPE_STRING , & Þd , 468 DBUS_TYPE_STRING , & Ãw , 469 DBUS_TYPE_INVALID )) { 470 `”rÜ ("Invalid‡rguments for NameOwnerChanged signal"); 471  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 474 `upd©e_Çme_ÿche ( Çme , Ãw ); 476  d©a -> ÿÎbacks ) { 477 cb = d©a -> ÿÎbacks ->data; 479 ià(* Ãw == '\0') { 480 ià( cb -> disc_func ) 481 cb -> `disc_func ( cÚÃùiÚ , cb-> u£r_d©a ); 483 ià( cb -> cÚn_func ) 484 cb -> `cÚn_func ( cÚÃùiÚ , cb-> u£r_d©a ); 489 ià(! `g_¦i¡_fšd ( d©a -> ÿÎbacks , cb )) 493 ià( d©a -> ¬gum’t [0] == ':' && 494 ( cb -> cÚn_func =ð NULL || cb-> disc_func == NULL)) { 495 ià( `fž‹r_d©a_»move_ÿÎback ( d©a , cb )) 501 d©a -> ÿÎbacks = `g_¦i¡_»move (d©a->ÿÎbacks, cb ); 502 d©a -> ´oûs£d = `g_¦i¡_­³nd (d©a->´oûs£d, cb ); 505  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 506 } } 509  DBusHªdËrResuÉ $mes§ge_fž‹r ( DBusCÚÃùiÚ * cÚÃùiÚ , 510 DBusMes§ge * mes§ge , * u£r_d©a ) 512  fž‹r_d©a * d©a ; 513 cÚ¡ * £nd” , * ·th , * içû , * memb” , * ¬g = NULL ; 514 GSLi¡ * cu¼’t , * d–‘e_li¡’” = NULL ; 517 ià( `dbus_mes§ge_g‘_ty³ ( mes§ge è!ð DBUS_MESSAGE_TYPE_SIGNAL ) 518  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 520 £nd” = `dbus_mes§ge_g‘_£nd” ( mes§ge ); 521 ·th = `dbus_mes§ge_g‘_·th ( mes§ge ); 522 içû = `dbus_mes§ge_g‘_š‹rçû ( mes§ge ); 523 memb” = `dbus_mes§ge_g‘_memb” ( mes§ge ); 524 `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , DBUS_TYPE_STRING , & ¬g , DBUS_TYPE_INVALID ); 527 ià( £nd” =ð NULL ) 528  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 530  cu¼’t = li¡’”s ; cu¼’ˆ!ð NULL ; cu¼’ˆðcu¼’t-> Ãxt ) { 531 d©a = cu¼’t ->data; 533 ià( cÚÃùiÚ !ð d©a ->connection) 536 ià( d©a -> owÃr && `g_¡r_equ® ( £nd” , d©a->owÃrè=ð FALSE ) 539 ià( d©a -> ·th && `g_¡r_equ® Õ©h, d©a->·thè=ð FALSE ) 542 ià( d©a -> š‹rçû && `g_¡r_equ® ( içû , 543 d©a -> š‹rçû è=ð FALSE ) 546 ià( d©a -> memb” && `g_¡r_equ® (memb”, d©a->memb”è=ð FALSE ) 549 ià( d©a -> ¬gum’t && `g_¡r_equ® ( ¬g , 550 d©a -> ¬gum’t è=ð FALSE ) 553 ià( d©a -> hªdË_func ) { 554 d©a -> lock = TRUE ; 556 d©a -> `hªdË_func ( cÚÃùiÚ , mes§ge , data); 558 d©a -> ÿÎbacks = d©a-> ´oûs£d ; 559 d©a -> ´oûs£d = NULL ; 560 d©a -> lock = FALSE ; 563 ià(! d©a -> ÿÎbacks ) 564 d–‘e_li¡’” = `g_¦i¡_´•’d (delete_listener, 565 cu¼’t ); 568 ià( d–‘e_li¡’” =ð NULL ) 569  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 571  cu¼’t = d–‘e_li¡’” ; cu¼’ˆ!ð NULL ; 572 cu¼’t = d–‘e_li¡’” -> Ãxt ) { 573 GSLi¡ * l = cu¼’t -> d©a ; 575 d©a = l ->data; 578 ià( d©a -> ÿÎbacks !ð NULL ) 581 `»move_m©ch ( d©a ); 582 li¡’”s = `g_¦i¡_d–‘e_lšk Öi¡’”s, l ); 584 `fž‹r_d©a_ä“ ( d©a ); 587 `g_¦i¡_ä“ ( d–‘e_li¡’” ); 589  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 590 } } 592  gboÞ—n $upd©e_£rviû (* u£r_d©a ) 594  £rviû_d©a * d©a = u£r_d©a ; 595  fž‹r_ÿÎback * cb = d©a -> ÿÎback ; 596 DBusCÚÃùiÚ * cÚn ; 598 cÚn = `dbus_cÚÃùiÚ_»f ( d©a ->conn); 599 `£rviû_d©a_ä“ ( d©a ); 601 ià( cb -> cÚn_func ) 602 cb -> `cÚn_func ( cÚn , cb-> u£r_d©a ); 604 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 606  FALSE ; 607 } } 609  $£rviû_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 611  £rviû_d©a * d©a = u£r_d©a ; 612 DBusMes§ge * »¶y ; 613 DBusE¼Ü ”r ; 615 »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 616 ià( »¶y =ð NULL ) 619 `dbus_”rÜ_š™ (& ”r ); 621 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”r , »¶y )) 622  çž ; 624 ià( `dbus_mes§ge_g‘_¬gs ( »¶y , & ”r , 625 DBUS_TYPE_STRING , & d©a -> owÃr , 626 DBUS_TYPE_INVALID è=ð FALSE ) 627  çž ; 629 `upd©e_£rviû ( d©a ); 631  dÚe ; 633 çž : 634 `”rÜ ("%s", ”r . mes§ge ); 635 `dbus_”rÜ_ä“ (& ”r ); 636 `£rviû_d©a_ä“ ( d©a ); 637 dÚe : 638 `dbus_mes§ge_uÄef ( »¶y ); 639 } } 641  $check_£rviû ( DBusCÚÃùiÚ * cÚÃùiÚ , 642 cÚ¡ * Çme , 643  fž‹r_ÿÎback * ÿÎback ) 645 DBusMes§ge * mes§ge ; 646  £rviû_d©a * d©a ; 648 d©a = `g_Œy_m®loc0 ((*data)); 649 ià( d©a =ð NULL ) { 650 `”rÜ ("Can't‡llocate data structure"); 654 d©a -> cÚn = `dbus_cÚÃùiÚ_»f ( cÚÃùiÚ ); 655 d©a -> Çme = `g_¡rdup (name); 656 d©a -> ÿÎback = callback; 657 ÿÎback -> d©a = data; 659 d©a -> owÃr = `check_Çme_ÿche ( Çme ); 660 ià( d©a -> owÃr !ð NULL ) { 661 d©a -> id = `g_idË_add ( upd©e_£rviû , data); 665 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( DBUS_SERVICE_DBUS , 666 DBUS_PATH_DBUS , DBUS_INTERFACE_DBUS , "GetNameOwner"); 667 ià( mes§ge =ð NULL ) { 668 `”rÜ ("Can't‡llocate‚ew message"); 669 `g_ä“ ( d©a ); 673 `dbus_mes§ge_­³nd_¬gs ( mes§ge , DBUS_TYPE_STRING , & Çme , 674 DBUS_TYPE_INVALID ); 676 ià( `dbus_cÚÃùiÚ_£nd_w™h_»¶y ( cÚÃùiÚ , mes§ge , 677 & d©a -> ÿÎ , -1è=ð FALSE ) { 678 `”rÜ ("Failedoƒxecute method call"); 679 `g_ä“ ( d©a ); 680  dÚe ; 683 ià( d©a -> ÿÎ =ð NULL ) { 684 `”rÜ ("D-Bus connection‚ot‡vailable"); 685 `g_ä“ ( d©a ); 686  dÚe ; 689 `dbus_³ndšg_ÿÎ_£t_nÙify ( d©a -> ÿÎ , £rviû_»¶y , d©a, NULL ); 691 dÚe : 692 `dbus_mes§ge_uÄef ( mes§ge ); 693 } } 695 gušt $g_dbus_add_£rviû_w©ch ( DBusCÚÃùiÚ * cÚÃùiÚ , cÚ¡ * Çme , 696 GDBusW©chFunùiÚ cÚÃù , 697 GDBusW©chFunùiÚ discÚÃù , 698 * u£r_d©a , GDBusDe¡royFunùiÚ de¡roy ) 700  fž‹r_d©a * d©a ; 701  fž‹r_ÿÎback * cb ; 703 ià( Çme =ð NULL ) 706 d©a = `fž‹r_d©a_g‘ ( cÚÃùiÚ , £rviû_fž‹r , 707 DBUS_SERVICE_DBUS , DBUS_PATH_DBUS , 708 DBUS_INTERFACE_DBUS , "NameOwnerChanged", 709 Çme ); 710 ià( d©a =ð NULL ) 713 cb = `fž‹r_d©a_add_ÿÎback ( d©a , cÚÃù , discÚÃù , NULL , de¡roy , 714 u£r_d©a ); 715 ià( cb =ð NULL ) 718 ià( cÚÃù ) 719 `check_£rviû ( cÚÃùiÚ , Çme , cb ); 721  cb -> id ; 722 } } 724 gušt $g_dbus_add_discÚÃù_w©ch ( DBusCÚÃùiÚ * cÚÃùiÚ , cÚ¡ * Çme , 725 GDBusW©chFunùiÚ func , 726 * u£r_d©a , GDBusDe¡royFunùiÚ de¡roy ) 728  `g_dbus_add_£rviû_w©ch ( cÚÃùiÚ , Çme , NULL , func , 729 u£r_d©a , de¡roy ); 730 } } 732 gušt $g_dbus_add_sigÇl_w©ch ( DBusCÚÃùiÚ * cÚÃùiÚ , 733 cÚ¡ * £nd” , cÚ¡ * ·th , 734 cÚ¡ * š‹rçû , cÚ¡ * memb” , 735 GDBusSigÇlFunùiÚ funùiÚ , * u£r_d©a , 736 GDBusDe¡royFunùiÚ de¡roy ) 738  fž‹r_d©a * d©a ; 739  fž‹r_ÿÎback * cb ; 741 d©a = `fž‹r_d©a_g‘ ( cÚÃùiÚ , sigÇl_fž‹r , £nd” , ·th , 742 š‹rçû , memb” , NULL ); 743 ià( d©a =ð NULL ) 746 cb = `fž‹r_d©a_add_ÿÎback ( d©a , NULL , NULL, funùiÚ , de¡roy , 747 u£r_d©a ); 748 ià( cb =ð NULL ) 751 ià( d©a -> Çme !ð NULL && d©a-> Çme_w©ch == 0) 752 d©a -> Çme_w©ch = `g_dbus_add_£rviû_w©ch ( cÚÃùiÚ , 753 d©a -> Çme , NULL , 754 NULL , NULL, NULL); 756  cb -> id ; 757 } } 759 gušt $g_dbus_add_´Ý”t›s_w©ch ( DBusCÚÃùiÚ * cÚÃùiÚ , 760 cÚ¡ * £nd” , cÚ¡ * ·th , 761 cÚ¡ * š‹rçû , 762 GDBusSigÇlFunùiÚ funùiÚ , * u£r_d©a , 763 GDBusDe¡royFunùiÚ de¡roy ) 765  fž‹r_d©a * d©a ; 766  fž‹r_ÿÎback * cb ; 768 d©a = `fž‹r_d©a_g‘ ( cÚÃùiÚ , sigÇl_fž‹r , £nd” , ·th , 769 DBUS_INTERFACE_PROPERTIES , "PropertiesChanged", 770 š‹rçû ); 771 ià( d©a =ð NULL ) 774 cb = `fž‹r_d©a_add_ÿÎback ( d©a , NULL , NULL, funùiÚ , de¡roy , 775 u£r_d©a ); 776 ià( cb =ð NULL ) 779 ià( d©a -> Çme !ð NULL && d©a-> Çme_w©ch == 0) 780 d©a -> Çme_w©ch = `g_dbus_add_£rviû_w©ch ( cÚÃùiÚ , 781 d©a -> Çme , NULL , 782 NULL , NULL, NULL); 784  cb -> id ; 785 } } 787 gboÞ—n $g_dbus_»move_w©ch ( DBusCÚÃùiÚ * cÚÃùiÚ , gušt id ) 789  fž‹r_d©a * d©a ; 790  fž‹r_ÿÎback * cb ; 791 GSLi¡ * ld©a ; 793 ià( id == 0) 794  FALSE ; 796  ld©a = li¡’”s ;†d©a;†d©¨ðld©a-> Ãxt ) { 797 d©a = ld©a ->data; 799 cb = `fž‹r_d©a_fšd_ÿÎback ( d©a , id ); 800 ià( cb ) { 801 `fž‹r_d©a_»move_ÿÎback ( d©a , cb ); 802  TRUE ; 806  FALSE ; 807 } } 809  $g_dbus_»move_®l_w©ches ( DBusCÚÃùiÚ * cÚÃùiÚ ) 811  fž‹r_d©a * d©a ; 813 ( d©a = `fž‹r_d©a_fšd ( cÚÃùiÚ ))) { 814 li¡’”s = `g_¦i¡_»move Öi¡’”s, d©a ); 815 `fž‹r_d©a_ÿÎ_ªd_ä“ ( d©a ); 817 } } @gobex/gobex-apparam.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<¡ršg.h > 28  ~ 29  ~<”ºo.h > 31  ~"gobex-­·¿m.h " 32  ~"gobex-debug.h " 34  s_GObexAµ¬am { 35 GHashTabË * mgs ; 38  s­·¿m_g { 39 gušt8 mid ; 40 gušt8 mËn ; 43  m¡ršg [0]; 44 gušt8 md©a [0]; 45 gušt8 mu8 ; 46 gušt16 mu16 ; 47 gušt32 mu32 ; 48 gušt64 mu64 ; 49 } mv®ue ; 50 } __©Œibu‹__ (( ·cked )); 52  ­·¿m_g * $g_Ãw ( gušt8 id , gušt8 Ën , cÚ¡ * d©a ) 54  ­·¿m_g * g ; 56 g = `g_m®loc0 (2 + Ën ); 57 g -> id = id; 58 g -> Ën =†en; 59 `memýy ( g -> v®ue . d©a , d©a, Ën ); 61  g ; 62 } } 64  GObexAµ¬am * $g_obex_­·¿m_Ãw () 66 GObexAµ¬am * ­·¿m ; 68 ­·¿m = `g_Ãw0 ( GObexAµ¬am , 1); 69 ­·¿m -> gs = `g_hash_bË_Ãw_fuÎ ( g_dœeù_hash , g_dœeù_equ® , 70 NULL , g_ä“ ); 72  ­·¿m ; 73 } } 75  ­·¿m_g * $­·¿m_g_decode (cÚ¡ * d©a , gsize size , 76 gsize * ·r£d ) 78  ­·¿m_g * g ; 79 cÚ¡ gušt8 * ±r = d©a ; 80 gušt8 id ; 81 gušt8 Ën ; 83 ià( size < 2) 84  NULL ; 86 id = ±r [0]; 87 Ën = ±r [1]; 89 ià( Ën > size - 2) 90  NULL ; 92 g = `g_Ãw ( id , Ën , ±r + 2); 93 ià( g =ð NULL ) 94  NULL ; 96 * ·r£d = 2 + g -> Ën ; 98  g ; 99 } } 101 GObexAµ¬am * $g_obex_­·¿m_decode (cÚ¡ * d©a , gsize size ) 103 GObexAµ¬am * ­·¿m ; 104 GHashTabË * gs ; 105 gsize couÁ = 0; 107 #iâdeà __TIZEN_PATCH__ 108 ià( size < 2) 109  NULL ; 112 ­·¿m = `g_obex_­·¿m_Ãw (); 114 gs = ­·¿m ->tags; 115  couÁ < size ) { 116  ­·¿m_g * g ; 117 gsize ·r£d ; 118 gušt id ; 120 g = `­·¿m_g_decode ( d©a + couÁ , size - couÁ, & ·r£d ); 121 ià( g =ð NULL ) 124 id = g ->id; 125 `g_hash_bË_š£¹ ( gs , `GUINT_TO_POINTER ( id ), g ); 127 couÁ +ð ·r£d ; 130 ià( couÁ !ð size ) { 131 `g_obex_­·¿m_ä“ ( ­·¿m ); 132  NULL ; 135  ­·¿m ; 136 } } 138  gssize $g_’code ( ­·¿m_g * g , * buf , gsize Ën ) 140 gsize couÁ = 2 + g -> Ën ; 142 ià( Ën < couÁ ) 143  - ENOBUFS ; 145 `memýy ( buf , g , couÁ ); 147  couÁ ; 148 } } 150 gssize $g_obex_­·¿m_’code ( GObexAµ¬am * ­·¿m , * buf , gsize Ën ) 152 gsize couÁ = 0; 153 gssize »t ; 154 GHashTabËI‹r ™” ; 155 gpoš‹r key , v®ue ; 157 #ifdeà __TIZEN_PATCH__ 158 if( `g_hash_bË_size ( ­·¿m -> gs ) > 0) { 160 `g_hash_bË_™”_š™ (& ™” , ­·¿m -> gs ); 161  `g_hash_bË_™”_Ãxt (& ™” , & key , & v®ue )) { 162  ­·¿m_g * g = v®ue ; 164 »t = `g_’code ( g , buf + couÁ , Ën - count); 165 ià( »t < 0) 166  »t ; 168 couÁ +ð »t ; 169 #ifdeà __TIZEN_PATCH__ 170 couÁ +ð »t ; 176 `g_hash_bË_»move ( ­·¿m -> gs , key ); 179 #ifdeà __TIZEN_PATCH__ 183  couÁ ; 184 } } 186 GObexAµ¬am * $g_obex_­·¿m_£t_by‹s ( GObexAµ¬am * ­·¿m , gušt8 id , 187 cÚ¡ * v®ue , gsize Ën ) 189  ­·¿m_g * g ; 190 gušt uid = id ; 192 ià( ­·¿m =ð NULL ) 193 ­·¿m = `g_obex_­·¿m_Ãw (); 195 g = `g_Ãw ( id , Ën , v®ue ); 196 `g_hash_bË_»¶aû ( ­·¿m -> gs , `GUINT_TO_POINTER ( uid ), g ); 198  ­·¿m ; 199 } } 201 GObexAµ¬am * $g_obex_­·¿m_£t_ušt8 ( GObexAµ¬am * ­·¿m , gušt8 id , 202 gušt8 v®ue ) 204 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "g 0x%02x v®u%u", id , v®ue ); 206  `g_obex_­·¿m_£t_by‹s ( ­·¿m , id , & v®ue , 1); 207 } } 209 GObexAµ¬am * $g_obex_­·¿m_£t_ušt16 ( GObexAµ¬am * ­·¿m , gušt8 id , 210 gušt16 v®ue ) 212 gušt16 num = `g_htÚs ( v®ue ); 214 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "g 0x%02x v®u%u", id , v®ue ); 216  `g_obex_­·¿m_£t_by‹s ( ­·¿m , id , & num , 2); 217 } } 219 GObexAµ¬am * $g_obex_­·¿m_£t_ušt32 ( GObexAµ¬am * ­·¿m , gušt8 id , 220 gušt32 v®ue ) 222 gušt32 num = `g_htÚl ( v®ue ); 224 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "g 0x%02x v®u%u", id , v®ue ); 226  `g_obex_­·¿m_£t_by‹s ( ­·¿m , id , & num , 4); 227 } } 229 GObexAµ¬am * $g_obex_­·¿m_£t_ušt64 ( GObexAµ¬am * ­·¿m , gušt8 id , 230 gušt64 v®ue ) 232 gušt64 num = `GUINT64_TO_BE ( v®ue ); 234 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "tag 0x%02x value %" 235 G_GUINT64_FORMAT , id , v®ue ); 237  `g_obex_­·¿m_£t_by‹s ( ­·¿m , id , & num , 8); 238 } } 240 GObexAµ¬am * $g_obex_­·¿m_£t_¡ršg ( GObexAµ¬am * ­·¿m , gušt8 id , 241 cÚ¡ * v®ue ) 243 gsize Ën ; 245 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "g 0x%02x v®u%s", id , v®ue ); 247 Ën = `¡¾’ ( v®ue ) + 1; 248 ià( Ën > G_MAXUINT8 ) { 249 ((*è v®ue )[ G_MAXUINT8 - 1] = '\0'; 250 Ën = G_MAXUINT8 ; 253  `g_obex_­·¿m_£t_by‹s ( ­·¿m , id , v®ue , Ën ); 254 } } 256  ­·¿m_g * $g_obex_­·¿m_fšd_g ( GObexAµ¬am * ­·¿m , 257 gušt id ) 259  `g_hash_bË_lookup ( ­·¿m -> gs , `GUINT_TO_POINTER ( id )); 260 } } 262 gboÞ—n $g_obex_­·¿m_g‘_ušt8 ( GObexAµ¬am * ­·¿m , gušt8 id , 263 gušt8 * de¡ ) 265  ­·¿m_g * g ; 267 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "g 0x%02x", id ); 269 g = `g_obex_­·¿m_fšd_g ( ­·¿m , id ); 270 ià( g =ð NULL ) 271  FALSE ; 273 * de¡ = g -> v®ue . u8 ; 275 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "%u", * de¡ ); 277  TRUE ; 278 } } 280 gboÞ—n $g_obex_­·¿m_g‘_ušt16 ( GObexAµ¬am * ­·¿m , gušt8 id , 281 gušt16 * de¡ ) 283  ­·¿m_g * g ; 285 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "g 0x%02x", id ); 287 g = `g_obex_­·¿m_fšd_g ( ­·¿m , id ); 288 ià( g =ð NULL ) 289  FALSE ; 291 ià( g -> Ën < (* de¡ )) 292  FALSE ; 294 * de¡ = `g_Áohs ( g -> v®ue . u16 ); 296 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "%u", * de¡ ); 298  TRUE ; 299 } } 301 gboÞ—n $g_obex_­·¿m_g‘_ušt32 ( GObexAµ¬am * ­·¿m , gušt8 id , 302 gušt32 * de¡ ) 304  ­·¿m_g * g ; 306 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "g 0x%02x", id ); 308 g = `g_obex_­·¿m_fšd_g ( ­·¿m , id ); 309 ià( g =ð NULL ) 310  FALSE ; 312 ià( g -> Ën < (* de¡ )) 313  FALSE ; 315 * de¡ = `g_Áohl ( g -> v®ue . u32 ); 317 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "%u", * de¡ ); 319  TRUE ; 320 } } 322 gboÞ—n $g_obex_­·¿m_g‘_ušt64 ( GObexAµ¬am * ­·¿m , gušt8 id , 323 gušt64 * de¡ ) 325  ­·¿m_g * g ; 327 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "g 0x%02x", id ); 329 g = `g_obex_­·¿m_fšd_g ( ­·¿m , id ); 330 ià( g =ð NULL ) 331  FALSE ; 333 ià( g -> Ën < (* de¡ )) 334  FALSE ; 336 * de¡ = `GUINT64_FROM_BE ( g -> v®ue . u64 ); 338 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "%" G_GUINT64_FORMAT , * de¡ ); 340  TRUE ; 341 } } 343 * $g_obex_­·¿m_g‘_¡ršg ( GObexAµ¬am * ­·¿m , gušt8 id ) 345  ­·¿m_g * g ; 346 * ¡ršg ; 348 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "g 0x%02x", id ); 350 g = `g_obex_­·¿m_fšd_g ( ­·¿m , id ); 351 ià( g =ð NULL ) 352  NULL ; 354 ¡ršg = `g_¡ºdup ( g -> v®ue .¡ršg,ag-> Ën ); 356 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "%s", ¡ršg ); 358  ¡ršg ; 359 } } 361 gboÞ—n $g_obex_­·¿m_g‘_by‹s ( GObexAµ¬am * ­·¿m , gušt8 id , 362 cÚ¡ gušt8 ** v® , gsize * Ën ) 364  ­·¿m_g * g ; 366 `g_obex_debug ( G_OBEX_DEBUG_APPARAM , "g 0x%02x", id ); 368 g = `g_obex_­·¿m_fšd_g ( ­·¿m , id ); 369 ià( g =ð NULL ) 370  FALSE ; 372 * Ën = g ->len; 373 * v® = g -> v®ue . d©a ; 375  TRUE ; 376 } } 378  $g_obex_­·¿m_ä“ ( GObexAµ¬am * ­·¿m ) 380 `g_hash_bË_uÄef ( ­·¿m -> gs ); 381 `g_ä“ ( ­·¿m ); 382 } } @gobex/gobex-apparam.h 23 #iâdeà __GOBEX_APPARAM_H 24  #__GOBEX_APPARAM_H ) 26  ~ 28  _GObexAµ¬am tGObexAµ¬am ; 30 GObexAµ¬am * g_obex_­·¿m_decode (cÚ¡ * d©a , gsize size ); 31 gssize g_obex_­·¿m_’code ( GObexAµ¬am * ­·¿m , * buf , gsize size ); 33 GObexAµ¬am * g_obex_­·¿m_£t_by‹s (GObexAµ¬am * ­·¿m , gušt8 id , 34 cÚ¡ * v®ue , gsize size ); 35 GObexAµ¬am * g_obex_­·¿m_£t_ušt8 (GObexAµ¬am * ­·¿m , gušt8 id , 36 gušt8 v®ue ); 37 GObexAµ¬am * g_obex_­·¿m_£t_ušt16 (GObexAµ¬am * ­·¿m , gušt8 id , 38 gušt16 v®ue ); 39 GObexAµ¬am * g_obex_­·¿m_£t_ušt32 (GObexAµ¬am * ­·¿m , gušt8 id , 40 gušt32 v®ue ); 41 GObexAµ¬am * g_obex_­·¿m_£t_ušt64 (GObexAµ¬am * ­·¿m , gušt8 id , 42 gušt64 v®ue ); 43 GObexAµ¬am * g_obex_­·¿m_£t_¡ršg (GObexAµ¬am * ­·¿m , gušt8 id , 44 cÚ¡ * v®ue ); 46 gboÞ—n g_obex_­·¿m_g‘_by‹s ( GObexAµ¬am * ­·¿m , gušt8 id , 47 cÚ¡ gušt8 ** v® , gsize * Ën ); 48 gboÞ—n g_obex_­·¿m_g‘_ušt8 ( GObexAµ¬am * ­·¿m , gušt8 id , 49 gušt8 * v®ue ); 50 gboÞ—n g_obex_­·¿m_g‘_ušt16 ( GObexAµ¬am * ­·¿m , gušt8 id , 51 gušt16 * v®ue ); 52 gboÞ—n g_obex_­·¿m_g‘_ušt32 ( GObexAµ¬am * ­·¿m , gušt8 id , 53 gušt32 * v®ue ); 54 gboÞ—n g_obex_­·¿m_g‘_ušt64 ( GObexAµ¬am * ­·¿m , gušt8 id , 55 gušt64 * v®ue ); 56 * g_obex_­·¿m_g‘_¡ršg ( GObexAµ¬am * ­·¿m , gušt8 id ); 58  g_obex_­·¿m_ä“ ( GObexAµ¬am * ­·¿m ); @gobex/gobex-debug.h 22 #iâdeà __GOBEX_DEBUG_H 23  #__GOBEX_DEBUG_H ) 25  ~ 26  ~<¡dio.h > 27  ~<ùy³.h > 29  #G_OBEX_DEBUG_NONE 1 ) 30  #G_OBEX_DEBUG_ERROR (1 << 1) ) 31  #G_OBEX_DEBUG_COMMAND (1 << 2) ) 32  #G_OBEX_DEBUG_TRANSFER (1 << 3) ) 33  #G_OBEX_DEBUG_HEADER (1 << 4) ) 34  #G_OBEX_DEBUG_PACKET (1 << 5) ) 35  #G_OBEX_DEBUG_DATA (1 << 6) ) 36  #G_OBEX_DEBUG_APPARAM (1 << 7) ) 38 gušt gobex_debug ; 40  #g_obex_debug ( Ëv– , fÜm© , ...) \ 41 ià( gobex_debug & Ëv– ) \ 42 `g_log ("gobex", G_LOG_LEVEL_DEBUG , "%s:%s(è" fÜm© , __FILE__ , \ 43 __func__ , ## __VA_ARGS__ ) ) 45  šlše  $g_obex_dump ( gušt Ëv– , cÚ¡ * ´efix , 46 cÚ¡ * buf , gsize Ën ) 48 cÚ¡ gušt8 * d©a = buf ; 49  n = 0; 51 ià(!( gobex_debug & Ëv– )) 54  Ën > 0) { 55  i , size ; 57 `´štf ("% %04x:", ´efix , n ); 59 size = Ën > 16 ? 16 :†en; 61  i = 0; i < size ; i++) 62 `´štf ("%02x%s", d©a [ i ], (i + 1) % 8 ? " " : " "); 64 ; i < 16; i++) 65 `´štf (" %s", ( i + 1) % 8 ? " " : " "); 67  i = 0; i < size ; i++) 68 `´štf ("%1c", `i¥ršt ( d©a [ i ]) ? data[i] : '.'); 70 `´štf ("\n"); 72 d©a +ð size ; 73 Ën -ð size ; 74 n +ð size ; 76 } } @gobex/gobex-defs.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~ 29  ~"gobex-defs.h " 31 GQu¬k $g_obex_”rÜ_qu¬k () 33  `g_qu¬k_äom_¡©ic_¡ršg ("g-obex-error-quark"); 34 } } @gobex/gobex-defs.h 23 #iâdeà __GOBEX_DEFS_H 24  #__GOBEX_DEFS_H ) 26  ~ 29 mG_OBEX_DATA_INHERIT , 30 mG_OBEX_DATA_COPY , 31 mG_OBEX_DATA_REF , 32 } tGObexD©aPÞicy ; 34  #G_OBEX_ERROR_FIRST (0xfà+ 1) ) 35  #G_OBEX_PROTO_ERROR ( code è((codeè< G_OBEX_ERROR_FIRST ) ) 38 mG_OBEX_ERROR_PARSE_ERROR = G_OBEX_ERROR_FIRST , 39 mG_OBEX_ERROR_INVALID_ARGS , 40 mG_OBEX_ERROR_DISCONNECTED , 41 mG_OBEX_ERROR_TIMEOUT , 42 mG_OBEX_ERROR_CANCELLED , 43 mG_OBEX_ERROR_FAILED , 44 } tGObexE¼Ü ; 46  $gssize (* tGObexD©aProduûr è(* tbuf , tgsize tËn , tgpoš‹r tu£r_d©a ); 47  $gboÞ—n (* tGObexD©aCÚsum” è(cÚ¡ * tbuf , tgsize tËn , 48 tgpoš‹r tu£r_d©a ); 50  #G_OBEX_ERROR `g_obex_”rÜ_qu¬k () ) 51 GQu¬k `g_obex_”rÜ_qu¬k (); @gobex/gobex-header.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<¡ršg.h > 29  ~"gobex-h—d”.h " 30  ~"gobex-debug.h " 33  #G_OBEX_HDR_ENC_UNICODE (0 << 6) ) 34  #G_OBEX_HDR_ENC_BYTES (1 << 6) ) 35  #G_OBEX_HDR_ENC_UINT8 (2 << 6) ) 36  #G_OBEX_HDR_ENC_UINT32 (3 << 6) ) 38  #G_OBEX_HDR_ENC ( id è((idè& 0xc0) ) 40  s_GObexH—d” { 41 gušt8 mid ; 42 gboÞ—n mextd©a ; 43 gsize mvËn ; 44 gsize mhËn ; 46 * m¡ršg ; 47 gušt8 * md©a ; 48 cÚ¡ gušt8 * mextd©a ; 49 gušt8 mu8 ; 50 gušt32 mu32 ; 51 } mv ; 54  glÚg $utf8_to_utf16 ( gunich¬2 ** utf16 , cÚ¡ * utf8 ) { 55 glÚg utf16_Ën ; 56  i ; 58 ià(* utf8 == '\0') { 59 * utf16 = NULL ; 63 * utf16 = `g_utf8_to_utf16 ( utf8 , -1, NULL , & utf16_Ën , NULL); 64 ià(* utf16 =ð NULL ) 69  i = 0; i < utf16_Ën ; i++) 70 (* utf16 )[ i ] = `g_htÚs ((*utf16)[i]); 72 utf16_Ën = (utf16_len + 1) << 1; 74  utf16_Ën ; 75 } } 77  gušt8 * $put_by‹s ( gušt8 * to , cÚ¡ * äom , gsize couÁ ) 79 `memýy ( to , äom , couÁ ); 80  ( to + couÁ ); 81 } } 83 cÚ¡ gušt8 * $g‘_by‹s (* to , cÚ¡ gušt8 * äom , gsize couÁ ) 85 `memýy ( to , äom , couÁ ); 86  ( äom + couÁ ); 87 } } 89 gssize $g_obex_h—d”_’code ( GObexH—d” * h—d” , * buf , gsize buf_Ën ) 91 gušt8 * ±r = buf ; 92 gušt16 u16 ; 93 gušt32 u32 ; 94 gunich¬2 * utf16 ; 95 glÚg utf16_Ën ; 97 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "header 0x%02x", 98 `G_OBEX_HDR_ENC ( h—d” -> id )); 100 ià( buf_Ën < h—d” -> hËn ) 103 ±r = `put_by‹s ÕŒ, & h—d” -> id , (header->id)); 105  `G_OBEX_HDR_ENC ( h—d” -> id )) { 106  G_OBEX_HDR_ENC_UNICODE : 107 utf16_Ën = `utf8_to_utf16 (& utf16 , h—d” -> v . ¡ršg ); 108 ià( utf16_Ën < 0 || ( gušt16 èutf16_ËÀ> buf_Ën ) 110 `g_as£¹_cmpušt ( utf16_Ën + 3, ==, h—d” -> hËn ); 111 u16 = `g_htÚs ( utf16_Ën + 3); 112 ±r = `put_by‹s ÕŒ, & u16 , (u16)); 113 `put_by‹s ( ±r , utf16 , utf16_Ën ); 114 `g_ä“ ( utf16 ); 116  G_OBEX_HDR_ENC_BYTES : 117 u16 = `g_htÚs ( h—d” -> hËn ); 118 ±r = `put_by‹s ÕŒ, & u16 , (u16)); 119 ià( h—d” -> extd©a ) 120 `put_by‹s ( ±r , h—d” -> v . extd©a , h—d”-> vËn ); 122 `put_by‹s ( ±r , h—d” -> v . d©a , h—d”-> vËn ); 124  G_OBEX_HDR_ENC_UINT8 : 125 * ±r = h—d” -> v . u8 ; 127  G_OBEX_HDR_ENC_UINT32 : 128 u32 = `g_htÚl ( h—d” -> v .u32); 129 `put_by‹s ( ±r , & u32 , (u32)); 132 `g_as£¹_nÙ_»ached (); 135  h—d” -> hËn ; 136 } } 138 GObexH—d” * $g_obex_h—d”_decode (cÚ¡ * d©a , gsize Ën , 139 GObexD©aPÞicy d©a_pÞicy , gsize * ·r£d , 140 GE¼Ü ** ”r ) 142 GObexH—d” * h—d” ; 143 cÚ¡ gušt8 * ±r = d©a ; 144 gušt16 hdr_Ën ; 145 gsize ¡r_Ën ; 146 GE¼Ü * cÚv_”r = NULL ; 148 ià( Ën < 2) { 149 ià(! ”r ) 150  NULL ; 151 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_PARSE_ERROR , 153 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", (* ”r )-> mes§ge ); 154  NULL ; 157 h—d” = `g_Ãw0 ( GObexH—d” , 1); 159 ±r = `g‘_by‹s (& h—d” -> id ,…tr, (header->id)); 161 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "header 0x%02x", 162 `G_OBEX_HDR_ENC ( h—d” -> id )); 164  `G_OBEX_HDR_ENC ( h—d” -> id )) { 165  G_OBEX_HDR_ENC_UNICODE : 166 ià( Ën < 3) { 167 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , 168 G_OBEX_ERROR_PARSE_ERROR , 170 h—d” -> id ); 171  çžed ; 173 ±r = `g‘_by‹s (& hdr_Ën ,…tr, (hdr_len)); 174 hdr_Ën = `g_Áohs (hdr_len); 176 ià( hdr_Ën == 3) { 177 h—d” -> v . ¡ršg = `g_¡rdup (""); 178 h—d” -> vËn = 0; 179 h—d” -> hËn = hdr_Ën ; 180 * ·r£d = hdr_Ën ; 184 ià( hdr_Ën > Ën || hdr_len < 5) { 185 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , 186 G_OBEX_ERROR_PARSE_ERROR , 188 h—d” -> id , hdr_Ën ); 189  çžed ; 192 h—d” -> v . ¡ršg = `g_cÚv”t ((cÚ¡ *è ±r , hdr_Ën - 5, 194 NULL , & ¡r_Ën , & cÚv_”r ); 195 ià( h—d” -> v . ¡ršg =ð NULL ) { 196 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , 197 G_OBEX_ERROR_PARSE_ERROR , 199 cÚv_”r -> mes§ge ); 200 `g_”rÜ_ä“ ( cÚv_”r ); 201  çžed ; 204 h—d” -> vËn = ( gsize è ¡r_Ën ; 205 h—d” -> hËn = hdr_Ën ; 207 * ·r£d = hdr_Ën ; 210  G_OBEX_HDR_ENC_BYTES : 211 ià( Ën < 3) { 212 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , 213 G_OBEX_ERROR_PARSE_ERROR , 215  çžed ; 217 ±r = `g‘_by‹s (& hdr_Ën ,…tr, (hdr_len)); 218 hdr_Ën = `g_Áohs (hdr_len); 219 ià( hdr_Ën > Ën ) { 220 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , 221 G_OBEX_ERROR_PARSE_ERROR , 223  çžed ; 226 ià( hdr_Ën < 3) { 227 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , 228 G_OBEX_ERROR_PARSE_ERROR , 230  çžed ; 233 h—d” -> vËn = hdr_Ën - 3; 234 h—d” -> hËn = hdr_Ën ; 236  d©a_pÞicy ) { 237  G_OBEX_DATA_COPY : 238 h—d” -> v . d©a = `g_memdup ( ±r , h—d”-> vËn ); 240  G_OBEX_DATA_REF : 241 h—d” -> extd©a = TRUE ; 242 h—d” -> v . extd©a = ±r ; 244  G_OBEX_DATA_INHERIT : 246 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , 247 G_OBEX_ERROR_INVALID_ARGS , 249  çžed ; 252 * ·r£d = hdr_Ën ; 255  G_OBEX_HDR_ENC_UINT8 : 256 h—d” -> vËn = 1; 257 h—d” -> hËn = 2; 258 h—d” -> v . u8 = * ±r ; 259 * ·r£d = 2; 261  G_OBEX_HDR_ENC_UINT32 : 262 ià( Ën < 5) { 263 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , 264 G_OBEX_ERROR_PARSE_ERROR , 266  çžed ; 268 h—d” -> vËn = 4; 269 h—d” -> hËn = 5; 270 `g‘_by‹s (& h—d” -> v . u32 , ±r , (header->v.u32)); 271 h—d” -> v . u32 = `g_Áohl (header->v.u32); 272 * ·r£d = 5; 275 `g_as£¹_nÙ_»ached (); 278  h—d” ; 280 çžed : 281 ià(* ”r ) 282 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", (* ”r )-> mes§ge ); 283 `g_obex_h—d”_ä“ ( h—d” ); 284  NULL ; 285 } } 287  $g_obex_h—d”_ä“ ( GObexH—d” * h—d” ) 289 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "header 0x%02x", 290 `G_OBEX_HDR_ENC ( h—d” -> id )); 292  `G_OBEX_HDR_ENC ( h—d” -> id )) { 293  G_OBEX_HDR_ENC_UNICODE : 294 `g_ä“ ( h—d” -> v . ¡ršg ); 296  G_OBEX_HDR_ENC_BYTES : 297 ià(! h—d” -> extd©a ) 298 `g_ä“ ( h—d” -> v . d©a ); 300  G_OBEX_HDR_ENC_UINT8 : 301  G_OBEX_HDR_ENC_UINT32 : 304 `g_as£¹_nÙ_»ached (); 307 `g_ä“ ( h—d” ); 308 } } 310 gboÞ—n $g_obex_h—d”_g‘_unicode ( GObexH—d” * h—d” , cÚ¡ ** ¡r ) 312 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "header 0x%02x", 313 `G_OBEX_HDR_ENC ( h—d” -> id )); 315 ià( `G_OBEX_HDR_ENC ( h—d” -> id è!ð G_OBEX_HDR_ENC_UNICODE ) 316  FALSE ; 318 * ¡r = h—d” -> v . ¡ršg ; 320 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "%s", * ¡r ); 322  TRUE ; 323 } } 325 gboÞ—n $g_obex_h—d”_g‘_by‹s ( GObexH—d” * h—d” , cÚ¡ gušt8 ** v® , 326 gsize * Ën ) 328 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "header 0x%02x", 329 `G_OBEX_HDR_ENC ( h—d” -> id )); 331 ià( `G_OBEX_HDR_ENC ( h—d” -> id è!ð G_OBEX_HDR_ENC_BYTES ) 332  FALSE ; 334 * Ën = h—d” -> vËn ; 336 ià( h—d” -> extd©a ) 337 * v® = h—d” -> v . extd©a ; 339 * v® = h—d” -> v . d©a ; 341  TRUE ; 342 } } 344 GObexAµ¬am * $g_obex_h—d”_g‘_­·¿m ( GObexH—d” * h—d” ) 346 gboÞ—n »t ; 347 cÚ¡ gušt8 * v® ; 348 gsize Ën ; 350 »t = `g_obex_h—d”_g‘_by‹s ( h—d” , & v® , & Ën ); 351 ià(! »t ) 352  NULL ; 354  `g_obex_­·¿m_decode ( v® , Ën ); 355 } } 357 gboÞ—n $g_obex_h—d”_g‘_ušt8 ( GObexH—d” * h—d” , gušt8 * v® ) 359 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "header 0x%02x", 360 `G_OBEX_HDR_ENC ( h—d” -> id )); 362 ià( `G_OBEX_HDR_ENC ( h—d” -> id è!ð G_OBEX_HDR_ENC_UINT8 ) 363  FALSE ; 365 * v® = h—d” -> v . u8 ; 367 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "%u", * v® ); 369  TRUE ; 370 } } 372 gboÞ—n $g_obex_h—d”_g‘_ušt32 ( GObexH—d” * h—d” , gušt32 * v® ) 374 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "header 0x%02x", 375 `G_OBEX_HDR_ENC ( h—d” -> id )); 377 ià( `G_OBEX_HDR_ENC ( h—d” -> id è!ð G_OBEX_HDR_ENC_UINT32 ) 378  FALSE ; 380 * v® = h—d” -> v . u32 ; 382 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "%u", * v® ); 384  TRUE ; 385 } } 387 GObexH—d” * $g_obex_h—d”_Ãw_unicode ( gušt8 id , cÚ¡ * ¡r ) 389 GObexH—d” * h—d” ; 390 gsize Ën ; 392 #ifdeà __TIZEN_PATCH__ 393 gunich¬2 * utf16 ; 394 glÚg utf16_Ën ; 397 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "h—d” 0x%02x", `G_OBEX_HDR_ENC ( id )); 399 ià( `G_OBEX_HDR_ENC ( id è!ð G_OBEX_HDR_ENC_UNICODE ) 400  NULL ; 402 h—d” = `g_Ãw0 ( GObexH—d” , 1); 404 h—d” -> id = id; 406 Ën = `g_utf8_¡¾’ ( ¡r , -1); 408 h—d” -> vËn = Ën ; 409 #iâdeà __TIZEN_PATCH__ 410 h—d” -> hËn = Ën == 0 ? 3 : 3 + ((len + 1) * 2); 411 h—d” -> v . ¡ršg = `g_¡rdup ( ¡r ); 413 h—d” -> v . ¡ršg = `g_¡rdup ( ¡r ); 414 utf16_Ën = `utf8_to_utf16 (& utf16 , h—d” -> v . ¡ršg ); 415 h—d” -> hËn = Ën =ð0 ? 3 : 3 + utf16_Ën ; 416 `g_ä“ ( utf16 ); 418 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "%s", h—d” -> v . ¡ršg ); 420  h—d” ; 421 } } 423 GObexH—d” * $g_obex_h—d”_Ãw_by‹s ( gušt8 id , cÚ¡ * d©a , gsize Ën ) 425 GObexH—d” * h—d” ; 427 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "h—d” 0x%02x", `G_OBEX_HDR_ENC ( id )); 429 ià( `G_OBEX_HDR_ENC ( id è!ð G_OBEX_HDR_ENC_BYTES ) 430  NULL ; 432 h—d” = `g_Ãw0 ( GObexH—d” , 1); 434 h—d” -> id = id; 435 h—d” -> vËn = Ën ; 436 h—d” -> hËn = Ën + 3; 437 h—d” -> v . d©a = `g_memdup (d©a, Ën ); 439  h—d” ; 440 } } 442 GObexH—d” * $g_obex_h—d”_Ãw_g ( gušt8 id , GObexAµ¬am * ­·¿m ) 444 gušt8 buf [1024]; 445 gssize Ën ; 447 Ën = `g_obex_­·¿m_’code ( ­·¿m , buf , (buf)); 448 ià( Ën < 0) 449  NULL ; 451  `g_obex_h—d”_Ãw_by‹s ( id , buf , Ën ); 452 } } 454 GObexH—d” * $g_obex_h—d”_Ãw_­·¿m ( GObexAµ¬am * ­·¿m ) 456  `g_obex_h—d”_Ãw_g ( G_OBEX_HDR_APPARAM , ­·¿m ); 457 } } 459 GObexH—d” * $g_obex_h—d”_Ãw_ušt8 ( gušt8 id , gušt8 v® ) 461 GObexH—d” * h—d” ; 463 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "h—d” 0x%02x", `G_OBEX_HDR_ENC ( id )); 465 ià( `G_OBEX_HDR_ENC ( id è!ð G_OBEX_HDR_ENC_UINT8 ) 466  NULL ; 468 h—d” = `g_Ãw0 ( GObexH—d” , 1); 470 h—d” -> id = id; 471 h—d” -> vËn = 1; 472 h—d” -> hËn = 2; 473 h—d” -> v . u8 = v® ; 475 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "%u", h—d” -> v . u8 ); 477  h—d” ; 478 } } 480 GObexH—d” * $g_obex_h—d”_Ãw_ušt32 ( gušt8 id , gušt32 v® ) 482 GObexH—d” * h—d” ; 484 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "h—d” 0x%02x", `G_OBEX_HDR_ENC ( id )); 486 ià( `G_OBEX_HDR_ENC ( id è!ð G_OBEX_HDR_ENC_UINT32 ) 487  NULL ; 489 h—d” = `g_Ãw0 ( GObexH—d” , 1); 491 h—d” -> id = id; 492 h—d” -> vËn = 4; 493 h—d” -> hËn = 5; 494 h—d” -> v . u32 = v® ; 496 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "%u", h—d” -> v . u32 ); 498  h—d” ; 499 } } 501 gušt8 $g_obex_h—d”_g‘_id ( GObexH—d” * h—d” ) 503 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "header 0x%02x id 0x%02x", 504 `G_OBEX_HDR_ENC ( h—d” -> id ), header->id); 506  h—d” -> id ; 507 } } 509 gušt16 $g_obex_h—d”_g‘_Ëngth ( GObexH—d” * h—d” ) 511 `g_obex_debug ( G_OBEX_DEBUG_HEADER , "header 0x%02x†ength %zu", 512 `G_OBEX_HDR_ENC ( h—d” -> id ), h—d”-> hËn ); 514  h—d” -> hËn ; 515 } } 517 GSLi¡ * $g_obex_h—d”_ü—‹_li¡ ( gušt8 fœ¡_hdr_id , va_li¡ ¬gs , 518 gsize * tÙ®_Ën ) 520  id = fœ¡_hdr_id ; 521 GSLi¡ * l = NULL ; 523 `g_obex_debug ( G_OBEX_DEBUG_HEADER , ""); 525 * tÙ®_Ën = 0; 527  id !ð G_OBEX_HDR_INVALID ) { 528 GObexH—d” * hdr ; 529 cÚ¡ * ¡r ; 530 cÚ¡ * by‹s ; 531  v® ; 532 gsize Ën ; 534  `G_OBEX_HDR_ENC ( id )) { 535  G_OBEX_HDR_ENC_UNICODE : 536 ¡r = `va_¬g ( ¬gs , const *); 537 hdr = `g_obex_h—d”_Ãw_unicode ( id , ¡r ); 539  G_OBEX_HDR_ENC_BYTES : 540 by‹s = `va_¬g ( ¬gs , *); 541 Ën = `va_¬g ( ¬gs , gsize ); 542 hdr = `g_obex_h—d”_Ãw_by‹s ( id , by‹s , Ën ); 544  G_OBEX_HDR_ENC_UINT8 : 545 v® = `va_¬g ( ¬gs , ); 546 hdr = `g_obex_h—d”_Ãw_ušt8 ( id , v® ); 548  G_OBEX_HDR_ENC_UINT32 : 549 v® = `va_¬g ( ¬gs , ); 550 hdr = `g_obex_h—d”_Ãw_ušt32 ( id , v® ); 553 `g_as£¹_nÙ_»ached (); 556 l = `g_¦i¡_­³nd Ö, hdr ); 557 * tÙ®_Ën +ð hdr -> hËn ; 558 id = `va_¬g ( ¬gs , ); 561  l ; 562 } } @gobex/gobex-header.h 23 #iâdeà __GOBEX_HEADER_H 24  #__GOBEX_HEADER_H ) 26  ~ 28  ~ 29  ~ 32  #G_OBEX_HDR_INVALID 0x00 ) 34  #G_OBEX_HDR_COUNT 0xc0 ) 35  #G_OBEX_HDR_NAME 0x01 ) 36  #G_OBEX_HDR_TYPE 0x42 ) 37  #G_OBEX_HDR_LENGTH 0xc3 ) 38  #G_OBEX_HDR_TIME 0x44 ) 39  #G_OBEX_HDR_DESCRIPTION 0x05 ) 40  #G_OBEX_HDR_TARGET 0x46 ) 41  #G_OBEX_HDR_HTTP 0x47 ) 42  #G_OBEX_HDR_BODY 0x48 ) 43  #G_OBEX_HDR_BODY_END 0x49 ) 44  #G_OBEX_HDR_WHO 0x4a ) 45  #G_OBEX_HDR_CONNECTION 0xcb ) 46  #G_OBEX_HDR_APPARAM 0x4c ) 47  #G_OBEX_HDR_AUTHCHAL 0x4d ) 48  #G_OBEX_HDR_AUTHRESP 0x4e ) 49  #G_OBEX_HDR_CREATOR 0xcf ) 50  #G_OBEX_HDR_WANUUID 0x50 ) 51  #G_OBEX_HDR_OBJECTCLASS 0x51 ) 52  #G_OBEX_HDR_SESSIONPARAM 0x52 ) 53  #G_OBEX_HDR_SESSIONSEQ 0x93 ) 54  #G_OBEX_HDR_ACTION 0x94 ) 55  #G_OBEX_HDR_DESTNAME 0x15 ) 56  #G_OBEX_HDR_PERMISSIONS 0xd6 ) 57  #G_OBEX_HDR_SRM 0x97 ) 58  #G_OBEX_HDR_SRMP 0x98 ) 61  #G_OBEX_ACTION_COPY 0x00 ) 62  #G_OBEX_ACTION_MOVE 0x01 ) 63  #G_OBEX_ACTION_SETPERM 0x02 ) 66  #G_OBEX_SRM_DISABLE 0x00 ) 67  #G_OBEX_SRM_ENABLE 0x01 ) 68  #G_OBEX_SRM_INDICATE 0x02 ) 71  #G_OBEX_SRMP_NEXT 0x00 ) 72  #G_OBEX_SRMP_WAIT 0x01 ) 73  #G_OBEX_SRMP_NEXT_WAIT 0x02 ) 75  _GObexH—d” tGObexH—d” ; 77 gboÞ—n g_obex_h—d”_g‘_unicode ( GObexH—d” * h—d” , cÚ¡ ** ¡r ); 78 gboÞ—n g_obex_h—d”_g‘_by‹s ( GObexH—d” * h—d” , cÚ¡ gušt8 ** v® , 79 gsize * Ën ); 80 gboÞ—n g_obex_h—d”_g‘_ušt8 ( GObexH—d” * h—d” , gušt8 * v® ); 81 gboÞ—n g_obex_h—d”_g‘_ušt32 ( GObexH—d” * h—d” , gušt32 * v® ); 82 GObexAµ¬am * g_obex_h—d”_g‘_­·¿m ( GObexH—d” * h—d” ); 84 GObexH—d” * g_obex_h—d”_Ãw_unicode ( gušt8 id , cÚ¡ * ¡r ); 85 GObexH—d” * g_obex_h—d”_Ãw_by‹s ( gušt8 id , cÚ¡ * d©a , gsize Ën ); 86 GObexH—d” * g_obex_h—d”_Ãw_ušt8 ( gušt8 id , gušt8 v® ); 87 GObexH—d” * g_obex_h—d”_Ãw_ušt32 ( gušt8 id , gušt32 v® ); 88 GObexH—d” * g_obex_h—d”_Ãw_g ( gušt8 id , GObexAµ¬am * ­·¿m ); 89 GObexH—d” * g_obex_h—d”_Ãw_­·¿m ( GObexAµ¬am * ­·¿m ); 91 GSLi¡ * g_obex_h—d”_ü—‹_li¡ ( gušt8 fœ¡_hdr_id , va_li¡ ¬gs , 92 gsize * tÙ®_Ën ); 94 gušt8 g_obex_h—d”_g‘_id ( GObexH—d” * h—d” ); 95 gušt16 g_obex_h—d”_g‘_Ëngth ( GObexH—d” * h—d” ); 97 gssize g_obex_h—d”_’code ( GObexH—d” * h—d” , * buf , gsize buf_Ën ); 98 GObexH—d” * g_obex_h—d”_decode (cÚ¡ * d©a , gsize Ën , 99 GObexD©aPÞicy d©a_pÞicy , gsize * ·r£d , 100 GE¼Ü ** ”r ); 101  g_obex_h—d”_ä“ ( GObexH—d” * h—d” ); @gobex/gobex-packet.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<¡ršg.h > 28  ~<”ºo.h > 30  ~"gobex-defs.h " 31  ~"gobex-·ck‘.h " 32  ~"gobex-debug.h " 34  #FINAL_BIT 0x80 ) 36  s_GObexPack‘ { 37 gušt8 mÝcode ; 38 gboÞ—n mfš® ; 40 GObexD©aPÞicy md©a_pÞicy ; 43 * mbuf ; 44 cÚ¡ * mbuf_»f ; 45 } md©a ; 46 gsize md©a_Ën ; 48 gsize mhËn ; 49 GSLi¡ * mh—d”s ; 51 GObexD©aProduûr mg‘_body ; 52 gpoš‹r mg‘_body_d©a ; 55 GObexH—d” * $g_obex_·ck‘_g‘_h—d” ( GObexPack‘ * pkt , gušt8 id ) 57 GSLi¡ * l ; 59 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 61  l = pkt -> h—d”s ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 62 GObexH—d” * hdr = l -> d©a ; 64 ià( `g_obex_h—d”_g‘_id ( hdr è=ð id ) 65  hdr ; 68  NULL ; 69 } } 71 GObexH—d” * $g_obex_·ck‘_g‘_body ( GObexPack‘ * pkt ) 73 GObexH—d” * body ; 75 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 77 body = `g_obex_·ck‘_g‘_h—d” ( pkt , G_OBEX_HDR_BODY ); 78 ià( body !ð NULL ) 79  body ; 81  `g_obex_·ck‘_g‘_h—d” ( pkt , G_OBEX_HDR_BODY_END ); 82 } } 84 gušt8 $g_obex_·ck‘_g‘_Ý”©iÚ ( GObexPack‘ * pkt , gboÞ—n * fš® ) 86 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 88 ià( fš® ) 89 * fš® = pkt ->final; 91  pkt -> Ýcode ; 92 } } 94 gboÞ—n $g_obex_·ck‘_´•’d_h—d” ( GObexPack‘ * pkt , GObexH—d” * h—d” ) 96 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 98 pkt -> h—d”s = `g_¦i¡_´•’d Õkt->h—d”s, h—d” ); 99 pkt -> hËn +ð `g_obex_h—d”_g‘_Ëngth ( h—d” ); 101  TRUE ; 102 } } 104 gboÞ—n $g_obex_·ck‘_add_h—d” ( GObexPack‘ * pkt , GObexH—d” * h—d” ) 106 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 108 pkt -> h—d”s = `g_¦i¡_­³nd Õkt->h—d”s, h—d” ); 109 pkt -> hËn +ð `g_obex_h—d”_g‘_Ëngth ( h—d” ); 111  TRUE ; 112 } } 114 gboÞ—n $g_obex_·ck‘_add_body ( GObexPack‘ * pkt , GObexD©aProduûr func , 115 gpoš‹r u£r_d©a ) 117 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 119 ià( pkt -> g‘_body !ð NULL ) 120  FALSE ; 122 pkt -> g‘_body = func ; 123 pkt -> g‘_body_d©a = u£r_d©a ; 125  TRUE ; 126 } } 128 gboÞ—n $g_obex_·ck‘_add_unicode ( GObexPack‘ * pkt , gušt8 id , 129 cÚ¡ * ¡r ) 131 GObexH—d” * hdr ; 133 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 135 hdr = `g_obex_h—d”_Ãw_unicode ( id , ¡r ); 136 ià( hdr =ð NULL ) 137  FALSE ; 139  `g_obex_·ck‘_add_h—d” ( pkt , hdr ); 140 } } 142 gboÞ—n $g_obex_·ck‘_add_by‹s ( GObexPack‘ * pkt , gušt8 id , 143 cÚ¡ * d©a , gsize Ën ) 145 GObexH—d” * hdr ; 147 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 149 hdr = `g_obex_h—d”_Ãw_by‹s ( id , d©a , Ën ); 150 ià( hdr =ð NULL ) 151  FALSE ; 153  `g_obex_·ck‘_add_h—d” ( pkt , hdr ); 154 } } 156 gboÞ—n $g_obex_·ck‘_add_ušt8 ( GObexPack‘ * pkt , gušt8 id , gušt8 v® ) 158 GObexH—d” * hdr ; 160 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 162 hdr = `g_obex_h—d”_Ãw_ušt8 ( id , v® ); 163 ià( hdr =ð NULL ) 164  FALSE ; 166  `g_obex_·ck‘_add_h—d” ( pkt , hdr ); 167 } } 169 gboÞ—n $g_obex_·ck‘_add_ušt32 ( GObexPack‘ * pkt , gušt8 id , gušt32 v® ) 171 GObexH—d” * hdr ; 173 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 175 hdr = `g_obex_h—d”_Ãw_ušt32 ( id , v® ); 176 ià( hdr =ð NULL ) 177  FALSE ; 179  `g_obex_·ck‘_add_h—d” ( pkt , hdr ); 180 } } 182 cÚ¡ * $g_obex_·ck‘_g‘_d©a ( GObexPack‘ * pkt , gsize * Ën ) 184 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 186 ià( pkt -> d©a_Ën == 0) { 187 * Ën = 0; 188  NULL ; 191 * Ën = pkt -> d©a_Ën ; 193  pkt -> d©a_pÞicy ) { 194  G_OBEX_DATA_INHERIT : 195  G_OBEX_DATA_COPY : 196  pkt -> d©a . buf ; 197  G_OBEX_DATA_REF : 198  pkt -> d©a . buf_»f ; 201 `g_as£¹_nÙ_»ached (); 202 } } 204 gboÞ—n $g_obex_·ck‘_£t_d©a ( GObexPack‘ * pkt , cÚ¡ * d©a , gsize Ën , 205 GObexD©aPÞicy d©a_pÞicy ) 207 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 209 ià( pkt -> d©a . buf ||…kt->d©a. buf_»f ) 210  FALSE ; 212 pkt -> d©a_pÞicy = data_policy; 213 pkt -> d©a_Ën = Ën ; 215  d©a_pÞicy ) { 216  G_OBEX_DATA_COPY : 217 pkt -> d©a . buf = `g_memdup (d©a, Ën ); 219  G_OBEX_DATA_REF : 220 pkt -> d©a . buf_»f = data; 222  G_OBEX_DATA_INHERIT : 223 pkt -> d©a . buf = (*) data; 227  TRUE ; 228 } } 230 GObexPack‘ * $g_obex_·ck‘_Ãw_v®i¡ ( gušt8 Ýcode , gboÞ—n fš® , 231 gušt8 fœ¡_hdr_id , va_li¡ ¬gs ) 233 GObexPack‘ * pkt ; 235 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", Ýcode ); 237 pkt = `g_Ãw0 ( GObexPack‘ , 1); 239 pkt -> Ýcode = opcode; 240 pkt -> fš® = final; 241 pkt -> h—d”s = `g_obex_h—d”_ü—‹_li¡ ( fœ¡_hdr_id , ¬gs , 242 & pkt -> hËn ); 243 pkt -> d©a_pÞicy = G_OBEX_DATA_COPY ; 245  pkt ; 246 } } 248 GObexPack‘ * $g_obex_·ck‘_Ãw ( gušt8 Ýcode , gboÞ—n fš® , 249 gušt8 fœ¡_hdr_id , ...) 251 GObexPack‘ * pkt ; 252 va_li¡ ¬gs ; 254 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", Ýcode ); 256 `va_¡¬t ( ¬gs , fœ¡_hdr_id ); 257 pkt = `g_obex_·ck‘_Ãw_v®i¡ ( Ýcode , fš® , fœ¡_hdr_id , ¬gs ); 258 `va_’d ( ¬gs ); 260  pkt ; 261 } } 263  $g_obex_·ck‘_ä“ ( GObexPack‘ * pkt ) 265 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 267  pkt -> d©a_pÞicy ) { 268  G_OBEX_DATA_INHERIT : 269  G_OBEX_DATA_COPY : 270 `g_ä“ ( pkt -> d©a . buf ); 272  G_OBEX_DATA_REF : 276 `g_¦i¡_fÜ—ch ( pkt -> h—d”s , ( GFunc è g_obex_h—d”_ä“ , NULL ); 277 `g_¦i¡_ä“ ( pkt -> h—d”s ); 278 `g_ä“ ( pkt ); 279 } } 281  gboÞ—n $·r£_h—d”s ( GObexPack‘ * pkt , cÚ¡ * d©a , gsize Ën , 282 GObexD©aPÞicy d©a_pÞicy , 283 GE¼Ü ** ”r ) 285 cÚ¡ gušt8 * buf = d©a ; 287 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 289  Ën > 0) { 290 GObexH—d” * h—d” ; 291 gsize ·r£d ; 293 h—d” = `g_obex_h—d”_decode ( buf , Ën , d©a_pÞicy , & ·r£d , 294 ”r ); 295 ià( h—d” =ð NULL ) 296  FALSE ; 298 pkt -> h—d”s = `g_¦i¡_­³nd Õkt->h—d”s, h—d” ); 299 pkt -> hËn +ð ·r£d ; 301 Ën -ð ·r£d ; 302 buf +ð ·r£d ; 305  TRUE ; 306 } } 308 cÚ¡ gušt8 * $g‘_by‹s (* to , cÚ¡ gušt8 * äom , gsize couÁ ) 310 `memýy ( to , äom , couÁ ); 311  ( äom + couÁ ); 312 } } 314 GObexPack‘ * $g_obex_·ck‘_decode (cÚ¡ * d©a , gsize Ën , 315 gsize h—d”_off£t , 316 GObexD©aPÞicy d©a_pÞicy , 317 GE¼Ü ** ”r ) 319 cÚ¡ gušt8 * buf = d©a ; 320 gušt16 ·ck‘_Ën ; 321 gušt8 Ýcode ; 322 GObexPack‘ * pkt ; 323 gboÞ—n fš® ; 325 `g_obex_debug ( G_OBEX_DEBUG_PACKET , ""); 327 ià( d©a_pÞicy =ð G_OBEX_DATA_INHERIT ) { 328 ià(! ”r ) 329  NULL ; 330 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_INVALID_ARGS , 332 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", (* ”r )-> mes§ge ); 333  NULL ; 336 ià( Ën < 3 + h—d”_off£t ) { 337 ià(! ”r ) 338  NULL ; 339 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_PARSE_ERROR , 341 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", (* ”r )-> mes§ge ); 342  NULL ; 345 buf = `g‘_by‹s (& Ýcode , buf, (opcode)); 346 buf = `g‘_by‹s (& ·ck‘_Ën , buf, (packet_len)); 348 ·ck‘_Ën = `g_Áohs (packet_len); 349 ià( ·ck‘_Ën !ð Ën ) { 350 ià(! ”r ) 351  NULL ; 352 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_PARSE_ERROR , 354 ·ck‘_Ën , Ën ); 355 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", (* ”r )-> mes§ge ); 356  NULL ; 359 fš® = ( Ýcode & FINAL_BIT è? TRUE : FALSE ; 360 Ýcode &ð~ FINAL_BIT ; 362 pkt = `g_obex_·ck‘_Ãw ( Ýcode , fš® , G_OBEX_HDR_INVALID ); 364 ià( h—d”_off£t == 0) 365  h—d”s ; 367 `g_obex_·ck‘_£t_d©a ( pkt , buf , h—d”_off£t , d©a_pÞicy ); 368 buf +ð h—d”_off£t ; 370 h—d”s : 371 ià(! `·r£_h—d”s ( pkt , buf , Ën - (3 + h—d”_off£t ), 372 d©a_pÞicy , ”r )) 373  çžed ; 375  pkt ; 377 çžed : 378 `g_obex_·ck‘_ä“ ( pkt ); 379  NULL ; 380 } } 382  gssize $g‘_body ( GObexPack‘ * pkt , gušt8 * buf , gsize Ën ) 384 gušt16 u16 ; 385 gssize »t ; 387 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 389 ià( Ën < 3) 390  - ENOBUFS ; 392 »t = pkt -> `g‘_body ( buf + 3, Ën - 3,…kt-> g‘_body_d©a ); 393 ià( »t < 0) 394  »t ; 396 ià( »t > 0) 397 buf [0] = G_OBEX_HDR_BODY ; 399 buf [0] = G_OBEX_HDR_BODY_END ; 401 u16 = `g_htÚs ( »t + 3); 402 `memýy (& buf [1], & u16 , (u16)); 404  »t ; 405 } } 407 gssize $g_obex_·ck‘_’code ( GObexPack‘ * pkt , gušt8 * buf , gsize Ën ) 409 gssize »t ; 410 gsize couÁ ; 411 gušt16 u16 ; 412 GSLi¡ * l ; 414 `g_obex_debug ( G_OBEX_DEBUG_PACKET , "Ýcod0x%02x", pkt -> Ýcode ); 416 ià(3 + pkt -> d©a_Ën +…kt-> hËn > Ën ) 417  - ENOBUFS ; 419 buf [0] = pkt -> Ýcode ; 420 ià( pkt -> fš® ) 421 buf [0] |ð FINAL_BIT ; 423 ià( pkt -> d©a_Ën > 0) { 424 ià( pkt -> d©a_pÞicy =ð G_OBEX_DATA_REF ) 425 `memýy (& buf [3], pkt -> d©a . buf_»f ,…kt-> d©a_Ën ); 427 `memýy (& buf [3], pkt -> d©a .buf,…kt-> d©a_Ën ); 430 couÁ = 3 + pkt -> d©a_Ën ; 432  l = pkt -> h—d”s ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 433 GObexH—d” * hdr = l -> d©a ; 435 ià( couÁ >ð Ën ) 436  - ENOBUFS ; 438 »t = `g_obex_h—d”_’code ( hdr , buf + couÁ , Ën - count); 439 ià( »t < 0) 440  »t ; 442 couÁ +ð »t ; 445 ià( pkt -> g‘_body ) { 446 »t = `g‘_body ( pkt , buf + couÁ , Ën - count); 447 ià( »t < 0) 448  »t ; 449 ià( »t == 0) { 450 ià( pkt -> Ýcode =ð G_OBEX_RSP_CONTINUE ) 451 buf [0] = G_OBEX_RSP_SUCCESS ; 452 buf [0] |ð FINAL_BIT ; 455 couÁ +ð »t + 3; 458 u16 = `g_htÚs ( couÁ ); 459 `memýy (& buf [1], & u16 , (u16)); 461  couÁ ; 462 } } @gobex/gobex-packet.h 23 #iâdeà __GOBEX_PACKET_H 24  #__GOBEX_PACKET_H ) 26  ~<¡d¬g.h > 27  ~ 29  ~ 30  ~ 33  #G_OBEX_OP_CONNECT 0x00 ) 34  #G_OBEX_OP_DISCONNECT 0x01 ) 35  #G_OBEX_OP_PUT 0x02 ) 36  #G_OBEX_OP_GET 0x03 ) 37  #G_OBEX_OP_SETPATH 0x05 ) 38  #G_OBEX_OP_ACTION 0x06 ) 39  #G_OBEX_OP_SESSION 0x07 ) 40  #G_OBEX_OP_ABORT 0x7f ) 43  #G_OBEX_RSP_CONTINUE 0x10 ) 44  #G_OBEX_RSP_SUCCESS 0x20 ) 45  #G_OBEX_RSP_CREATED 0x21 ) 46  #G_OBEX_RSP_ACCEPTED 0x22 ) 47  #G_OBEX_RSP_NON_AUTHORITATIVE 0x23 ) 48  #G_OBEX_RSP_NO_CONTENT 0x24 ) 49  #G_OBEX_RSP_RESET_CONTENT 0x25 ) 50  #G_OBEX_RSP_PARTIAL_CONTENT 0x26 ) 51  #G_OBEX_RSP_MULTIPLE_CHOICES 0x30 ) 52  #G_OBEX_RSP_MOVED_PERMANENTLY 0x31 ) 53  #G_OBEX_RSP_MOVED_TEMPORARILY 0x32 ) 54  #G_OBEX_RSP_SEE_OTHER 0x33 ) 55  #G_OBEX_RSP_NOT_MODIFIED 0x34 ) 56  #G_OBEX_RSP_USE_PROXY 0x35 ) 57  #G_OBEX_RSP_BAD_REQUEST 0x40 ) 58  #G_OBEX_RSP_UNAUTHORIZED 0x41 ) 59  #G_OBEX_RSP_PAYMENT_REQUIRED 0x42 ) 60  #G_OBEX_RSP_FORBIDDEN 0x43 ) 61  #G_OBEX_RSP_NOT_FOUND 0x44 ) 62  #G_OBEX_RSP_METHOD_NOT_ALLOWED 0x45 ) 63  #G_OBEX_RSP_NOT_ACCEPTABLE 0x46 ) 64  #G_OBEX_RSP_PROXY_AUTH_REQUIRED 0x47 ) 65  #G_OBEX_RSP_REQUEST_TIME_OUT 0x48 ) 66  #G_OBEX_RSP_CONFLICT 0x49 ) 67  #G_OBEX_RSP_GONE 0x4a ) 68  #G_OBEX_RSP_LENGTH_REQUIRED 0x4b ) 69  #G_OBEX_RSP_PRECONDITION_FAILED 0x4c ) 70  #G_OBEX_RSP_REQ_ENTITY_TOO_LARGE 0x4d ) 71  #G_OBEX_RSP_REQ_URL_TOO_LARGE 0x4e ) 72  #G_OBEX_RSP_UNSUPPORTED_MEDIA_TYPE 0x4f ) 73  #G_OBEX_RSP_INTERNAL_SERVER_ERROR 0x50 ) 74  #G_OBEX_RSP_NOT_IMPLEMENTED 0x51 ) 75  #G_OBEX_RSP_BAD_GATEWAY 0x52 ) 76  #G_OBEX_RSP_SERVICE_UNAVAILABLE 0x53 ) 77  #G_OBEX_RSP_GATEWAY_TIMEOUT 0x54 ) 78  #G_OBEX_RSP_VERSION_NOT_SUPPORTED 0x55 ) 79  #G_OBEX_RSP_DATABASE_FULL 0x60 ) 80  #G_OBEX_RSP_DATABASE_LOCKED 0x61 ) 82  _GObexPack‘ tGObexPack‘ ; 84 GObexH—d” * g_obex_·ck‘_g‘_h—d” ( GObexPack‘ * pkt , gušt8 id ); 85 GObexH—d” * g_obex_·ck‘_g‘_body ( GObexPack‘ * pkt ); 86 gušt8 g_obex_·ck‘_g‘_Ý”©iÚ ( GObexPack‘ * pkt , gboÞ—n * fš® ); 87 gboÞ—n g_obex_·ck‘_´•’d_h—d” ( GObexPack‘ * pkt , GObexH—d” * h—d” ); 88 gboÞ—n g_obex_·ck‘_add_h—d” ( GObexPack‘ * pkt , GObexH—d” * h—d” ); 89 gboÞ—n g_obex_·ck‘_add_body ( GObexPack‘ * pkt , GObexD©aProduûr func , 90 gpoš‹r u£r_d©a ); 91 gboÞ—n g_obex_·ck‘_add_unicode ( GObexPack‘ * pkt , gušt8 id , 92 cÚ¡ * ¡r ); 93 gboÞ—n g_obex_·ck‘_add_by‹s ( GObexPack‘ * pkt , gušt8 id , 94 cÚ¡ * d©a , gsize Ën ); 95 gboÞ—n g_obex_·ck‘_add_ušt8 ( GObexPack‘ * pkt , gušt8 id , gušt8 v® ); 96 gboÞ—n g_obex_·ck‘_add_ušt32 ( GObexPack‘ * pkt , gušt8 id , gušt32 v® ); 97 gboÞ—n g_obex_·ck‘_£t_d©a ( GObexPack‘ * pkt , cÚ¡ * d©a , gsize Ën , 98 GObexD©aPÞicy d©a_pÞicy ); 99 cÚ¡ * g_obex_·ck‘_g‘_d©a ( GObexPack‘ * pkt , gsize * Ën ); 100 GObexPack‘ * g_obex_·ck‘_Ãw ( gušt8 Ýcode , gboÞ—n fš® , 101 gušt8 fœ¡_hdr_id , ...); 102 GObexPack‘ * g_obex_·ck‘_Ãw_v®i¡ ( gušt8 Ýcode , gboÞ—n fš® , 103 gušt8 fœ¡_hdr_id , va_li¡ ¬gs ); 104  g_obex_·ck‘_ä“ ( GObexPack‘ * pkt ); 106 GObexPack‘ * g_obex_·ck‘_decode (cÚ¡ * d©a , gsize Ën , 107 gsize h—d”_off£t , 108 GObexD©aPÞicy d©a_pÞicy , 109 GE¼Ü ** ”r ); 110 gssize g_obex_·ck‘_’code ( GObexPack‘ * pkt , gušt8 * buf , gsize Ën ); @gobex/gobex-transfer.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<¡ršg.h > 28  ~<”ºo.h > 30  ~"gobex.h " 31  ~"gobex-debug.h " 33  #FIRST_PACKET_TIMEOUT 60 ) 35  GSLi¡ * gŒªsãrs = NULL ; 37  Œªsãr_»¥Ú£ ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 38 gpoš‹r u£r_d©a ); 40  sŒªsãr { 41 gušt mid ; 42 gušt8 mÝcode ; 44 GObex * mobex ; 46 gušt m»q_id ; 48 gušt mput_id ; 49 gušt mg‘_id ; 50 gušt mabÜt_id ; 52 GObexD©aProduûr md©a_´oduûr ; 53 GObexD©aCÚsum” md©a_cÚsum” ; 54 GObexFunc mcom¶‘e_func ; 56 gpoš‹r mu£r_d©a ; 59  $Œªsãr_ä“ ( Œªsãr *transfer) 61 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 63 Œªsãrs = `g_¦i¡_»move Ñ¿nsãrs, Œªsãr ); 65 ià( Œªsãr -> »q_id > 0) 66 `g_obex_ÿnûl_»q ( Œªsãr -> obex ,¿nsãr-> »q_id , TRUE ); 68 ià( Œªsãr -> put_id > 0) 69 `g_obex_»move_»que¡_funùiÚ ( Œªsãr -> obex , 70 Œªsãr -> put_id ); 72 ià( Œªsãr -> g‘_id > 0) 73 `g_obex_»move_»que¡_funùiÚ ( Œªsãr -> obex , 74 Œªsãr -> g‘_id ); 76 ià( Œªsãr -> abÜt_id > 0) 77 `g_obex_»move_»que¡_funùiÚ ( Œªsãr -> obex , 78 Œªsãr -> abÜt_id ); 80 `g_obex_uÄef ( Œªsãr -> obex ); 81 `g_ä“ ( Œªsãr ); 82 } } 84  Œªsãr * $fšd_Œªsãr ( gušt id ) 86 GSLi¡ * l ; 88  l = Œªsãrs ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 89  Œªsãr * t = l -> d©a ; 90 ià( t -> id == id) 91  t ; 94  NULL ; 95 } } 97  $Œªsãr_com¶‘e ( Œªsãr *Œªsãr, GE¼Ü * ”r ) 99 gušt id = Œªsãr ->id; 101 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", id ); 103 Œªsãr -> `com¶‘e_func Ñ¿nsãr-> obex , ”r ,¿nsãr-> u£r_d©a ); 105 ià( `fšd_Œªsãr ( id è=ð NULL ) 108 `Œªsãr_ä“ ( Œªsãr ); 109 } } 111  $Œªsãr_abÜt_»¥Ú£ ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 112 gpoš‹r u£r_d©a ) 114  Œªsãr *Œªsã¸ð u£r_d©a ; 116 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 118 Œªsãr -> »q_id = 0; 121 ”r = `g_”rÜ_Ãw ( G_OBEX_ERROR , G_OBEX_ERROR_CANCELLED , 123 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", ”r -> mes§ge ); 124 `Œªsãr_com¶‘e ( Œªsãr , ”r ); 125 `g_”rÜ_ä“ ( ”r ); 126 } } 129  gssize $put_g‘_d©a (* buf , gsize Ën , gpoš‹r u£r_d©a ) 131  Œªsãr *Œªsã¸ð u£r_d©a ; 132 GObexPack‘ * »q ; 133 GE¼Ü * ”r = NULL ; 134 gssize »t ; 136 »t = Œªsãr -> `d©a_´oduûr ( buf , Ën ,¿nsãr-> u£r_d©a ); 137 ià( »t =ð0 ||„‘ =ð- EAGAIN ) 138  »t ; 140 ià( »t > 0) { 142 ià(! `g_obex_¤m_aùive ( Œªsãr -> obex )) 143  »t ; 146 »q = `g_obex_·ck‘_Ãw ( Œªsãr -> Ýcode , FALSE , 147 G_OBEX_HDR_INVALID ); 148 `g_obex_·ck‘_add_body ( »q , put_g‘_d©a , Œªsãr ); 149 Œªsãr -> »q_id = `g_obex_£nd_»q Ñ¿nsãr-> obex , »q , -1, 150 Œªsãr_»¥Ú£ , Œªsãr , 151 & ”r ); 152  dÚe ; 155 Œªsãr -> »q_id = `g_obex_abÜt Ñ¿nsãr-> obex , Œªsãr_abÜt_»¥Ú£ , 156 Œªsãr , & ”r ); 157 dÚe : 158 ià( ”r !ð NULL ) { 159 `Œªsãr_com¶‘e ( Œªsãr , ”r ); 160 `g_”rÜ_ä“ ( ”r ); 163  »t ; 164 } } 166  gboÞ—n $hªdË_g‘_body ( Œªsãr *Œªsãr, GObexPack‘ * r¥ , 167 GE¼Ü ** ”r ) 169 GObexH—d” * body = `g_obex_·ck‘_g‘_body ( r¥ ); 170 gboÞ—n »t ; 171 cÚ¡ gušt8 * buf ; 172 gsize Ën ; 174 ià( body =ð NULL ) 175  TRUE ; 177 `g_obex_h—d”_g‘_by‹s ( body , & buf , & Ën ); 178 ià( Ën == 0) 179  TRUE ; 181 »t = Œªsãr -> `d©a_cÚsum” ( buf , Ën ,¿nsãr-> u£r_d©a ); 182 ià( »t =ð FALSE ) 183 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_CANCELLED , 186  »t ; 187 } } 189  $Œªsãr_»¥Ú£ ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 190 gpoš‹r u£r_d©a ) 192  Œªsãr *Œªsã¸ð u£r_d©a ; 193 GObexPack‘ * »q ; 194 gboÞ—n r¥code , fš® ; 195 gušt id ; 197 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 199 id = Œªsãr -> »q_id ; 200 Œªsãr -> »q_id = 0; 202 ià( ”r !ð NULL ) { 203 `Œªsãr_com¶‘e ( Œªsãr , ”r ); 207 r¥code = `g_obex_·ck‘_g‘_Ý”©iÚ ( r¥ , & fš® ); 208 ià( r¥code !ð G_OBEX_RSP_SUCCESS &&„¥cod!ð G_OBEX_RSP_CONTINUE ) { 209 ”r = `g_”rÜ_Ãw ( G_OBEX_ERROR , r¥code , "%s", 210 `g_obex_¡»¼Ü ( r¥code )); 211  çžed ; 214 ià( Œªsãr -> Ýcode =ð G_OBEX_OP_GET ) { 215 `hªdË_g‘_body ( Œªsãr , r¥ , & ”r ); 216 ià( ”r !ð NULL ) 217  çžed ; 220 ià( r¥code =ð G_OBEX_RSP_SUCCESS ) { 221 `Œªsãr_com¶‘e ( Œªsãr , NULL ); 225 ià( Œªsãr -> Ýcode =ð G_OBEX_OP_PUT ) { 226 »q = `g_obex_·ck‘_Ãw ( Œªsãr -> Ýcode , FALSE , 227 G_OBEX_HDR_INVALID ); 228 `g_obex_·ck‘_add_body ( »q , put_g‘_d©a , Œªsãr ); 229 } ià(! `g_obex_¤m_aùive ( Œªsãr -> obex )) { 230 »q = `g_obex_·ck‘_Ãw ( Œªsãr -> Ýcode , TRUE , 231 G_OBEX_HDR_INVALID ); 234 Œªsãr -> »q_id = id ; 238 Œªsãr -> »q_id = `g_obex_£nd_»q ( obex , »q , -1, Œªsãr_»¥Ú£ , 239 Œªsãr , & ”r ); 240 çžed : 241 ià( ”r !ð NULL ) { 242 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", ”r -> mes§ge ); 243 `Œªsãr_com¶‘e ( Œªsãr , ”r ); 244 `g_”rÜ_ä“ ( ”r ); 246 } } 248  Œªsãr * $Œªsãr_Ãw ( GObex * obex , gušt8 Ýcode , 249 GObexFunc com¶‘e_func , gpoš‹r u£r_d©a ) 251  gušt Ãxt_id = 1; 252  Œªsãr *transfer; 254 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "obex %°Ýcod%u", obex , Ýcode ); 256 Œªsãr = `g_Ãw0 (transfer, 1); 258 Œªsãr -> id = Ãxt_id ++; 259 Œªsãr -> Ýcode = opcode; 260 Œªsãr -> obex = `g_obex_»f (obex); 261 Œªsãr -> com¶‘e_func = complete_func; 262 Œªsãr -> u£r_d©a = user_data; 264 Œªsãrs = `g_¦i¡_­³nd Ñ¿nsãrs, Œªsãr ); 266  Œªsãr ; 267 } } 269 gušt $g_obex_put_»q_pkt ( GObex * obex , GObexPack‘ * »q , 270 GObexD©aProduûr d©a_func , GObexFunc com¶‘e_func , 271 gpoš‹r u£r_d©a , GE¼Ü ** ”r ) 273  Œªsãr *transfer; 275 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "obex %p", obex ); 277 ià( `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , NULL è!ð G_OBEX_OP_PUT ) 280 Œªsãr = `Œªsãr_Ãw ( obex , G_OBEX_OP_PUT , com¶‘e_func , u£r_d©a ); 281 Œªsãr -> d©a_´oduûr = d©a_func ; 283 `g_obex_·ck‘_add_body ( »q , put_g‘_d©a , Œªsãr ); 285 Œªsãr -> »q_id = `g_obex_£nd_»q ( obex , »q , FIRST_PACKET_TIMEOUT , 286 Œªsãr_»¥Ú£ , Œªsãr , ”r ); 287 ià( Œªsãr -> »q_id == 0) { 288 `Œªsãr_ä“ ( Œªsãr ); 292 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 294  Œªsãr -> id ; 295 } } 297 gušt $g_obex_put_»q ( GObex * obex , GObexD©aProduûr d©a_func , 298 GObexFunc com¶‘e_func , gpoš‹r u£r_d©a , 299 GE¼Ü ** ”r , gušt8 fœ¡_hdr_id , ...) 301 GObexPack‘ * »q ; 302 va_li¡ ¬gs ; 304 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "obex %p", obex ); 306 `va_¡¬t ( ¬gs , fœ¡_hdr_id ); 307 »q = `g_obex_·ck‘_Ãw_v®i¡ ( G_OBEX_OP_PUT , FALSE , 308 fœ¡_hdr_id , ¬gs ); 309 `va_’d ( ¬gs ); 311  `g_obex_put_»q_pkt ( obex , »q , d©a_func , com¶‘e_func , 312 u£r_d©a , ”r ); 313 } } 315  $Œªsãr_abÜt_»q ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 317  Œªsãr *Œªsã¸ð u£r_d©a ; 318 GObexPack‘ * r¥ ; 319 GE¼Ü * ”r ; 321 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 323 ”r = `g_”rÜ_Ãw ( G_OBEX_ERROR , G_OBEX_ERROR_CANCELLED , 325 r¥ = `g_obex_·ck‘_Ãw ( G_OBEX_RSP_SUCCESS , TRUE , G_OBEX_HDR_INVALID ); 326 `g_obex_£nd ( obex , r¥ , NULL ); 328 `Œªsãr_com¶‘e ( Œªsãr , ”r ); 329 `g_”rÜ_ä“ ( ”r ); 330 } } 332  gušt8 $put_g‘_by‹s ( Œªsãr *Œªsãr, GObexPack‘ * »q ) 334 GObexH—d” * body ; 335 gboÞ—n fš® ; 336 gušt8 r¥ ; 337 cÚ¡ gušt8 * buf ; 338 gsize Ën ; 340 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 342 `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , & fš® ); 343 ià( fš® ) 344 r¥ = G_OBEX_RSP_SUCCESS ; 346 r¥ = G_OBEX_RSP_CONTINUE ; 348 body = `g_obex_·ck‘_g‘_body ( »q ); 349 ià( body =ð NULL ) 350  r¥ ; 352 `g_obex_h—d”_g‘_by‹s ( body , & buf , & Ën ); 353 ià( Ën == 0) 354  r¥ ; 356 ià( Œªsãr -> `d©a_cÚsum” ( buf , Ën ,¿nsãr-> u£r_d©a è=ð FALSE ) 357 r¥ = G_OBEX_RSP_FORBIDDEN ; 359  r¥ ; 360 } } 362  $Œªsãr_put_»q_fœ¡ ( Œªsãr *Œªsãr, GObexPack‘ * »q , 363 gušt8 fœ¡_hdr_id , va_li¡ ¬gs ) 365 GE¼Ü * ”r = NULL ; 366 GObexPack‘ * r¥ ; 367 gušt8 r¥code ; 369 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 371 r¥code = `put_g‘_by‹s ( Œªsãr , »q ); 373 r¥ = `g_obex_·ck‘_Ãw_v®i¡ ( r¥code , TRUE , fœ¡_hdr_id , ¬gs ); 375 ià(! `g_obex_£nd ( Œªsãr -> obex , r¥ , & ”r )) { 376 `Œªsãr_com¶‘e ( Œªsãr , ”r ); 377 `g_”rÜ_ä“ ( ”r ); 381 ià( r¥code !ð G_OBEX_RSP_CONTINUE ) 382 `Œªsãr_com¶‘e ( Œªsãr , NULL ); 383 } } 385  $Œªsãr_put_»q ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 387  Œªsãr *Œªsã¸ð u£r_d©a ; 388 GE¼Ü * ”r = NULL ; 389 GObexPack‘ * r¥ ; 390 gušt8 r¥code ; 392 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 394 r¥code = `put_g‘_by‹s ( Œªsãr , »q ); 397 ià( `g_obex_¤m_aùive ( Œªsãr -> obex ) && 398 r¥code =ð G_OBEX_RSP_CONTINUE ) 399  dÚe ; 401 r¥ = `g_obex_·ck‘_Ãw ( r¥code , TRUE , G_OBEX_HDR_INVALID ); 403 ià(! `g_obex_£nd ( obex , r¥ , & ”r )) { 404 `Œªsãr_com¶‘e ( Œªsãr , ”r ); 405 `g_”rÜ_ä“ ( ”r ); 409 dÚe : 410 ià( r¥code !ð G_OBEX_RSP_CONTINUE ) 411 `Œªsãr_com¶‘e ( Œªsãr , NULL ); 412 } } 414 gušt $g_obex_put_r¥ ( GObex * obex , GObexPack‘ * »q , 415 GObexD©aCÚsum” d©a_func , GObexFunc com¶‘e_func , 416 gpoš‹r u£r_d©a , GE¼Ü ** ”r , 417 gušt8 fœ¡_hdr_id , ...) 419  Œªsãr *transfer; 420 va_li¡ ¬gs ; 421 gušt id ; 423 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "obex %p", obex ); 425 Œªsãr = `Œªsãr_Ãw ( obex , G_OBEX_OP_PUT , com¶‘e_func , u£r_d©a ); 426 Œªsãr -> d©a_cÚsum” = d©a_func ; 429 `va_¡¬t ( ¬gs , fœ¡_hdr_id ); 430 `Œªsãr_put_»q_fœ¡ ( Œªsãr , »q , fœ¡_hdr_id , ¬gs ); 431 `va_’d ( ¬gs ); 432 ià(! `g_¦i¡_fšd ( Œªsãrs , Œªsãr )) 435 id = `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_PUT , Œªsãr_put_»q , 436 Œªsãr ); 437 Œªsãr -> put_id = id ; 439 id = `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_ABORT , 440 Œªsãr_abÜt_»q , Œªsãr ); 441 Œªsãr -> abÜt_id = id ; 443 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 445  Œªsãr -> id ; 446 } } 448 gušt $g_obex_g‘_»q_pkt ( GObex * obex , GObexPack‘ * »q , 449 GObexD©aCÚsum” d©a_func , GObexFunc com¶‘e_func , 450 gpoš‹r u£r_d©a , GE¼Ü ** ”r ) 452  Œªsãr *transfer; 454 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "obex %p", obex ); 456 ià( `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , NULL è!ð G_OBEX_OP_GET ) 459 Œªsãr = `Œªsãr_Ãw ( obex , G_OBEX_OP_GET , com¶‘e_func , u£r_d©a ); 460 Œªsãr -> d©a_cÚsum” = d©a_func ; 461 Œªsãr -> »q_id = `g_obex_£nd_»q ( obex , »q , FIRST_PACKET_TIMEOUT , 462 Œªsãr_»¥Ú£ , Œªsãr , ”r ); 463 ià( Œªsãr -> »q_id == 0) { 464 `Œªsãr_ä“ ( Œªsãr ); 468 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 470  Œªsãr -> id ; 471 } } 473 gušt $g_obex_g‘_»q ( GObex * obex , GObexD©aCÚsum” d©a_func , 474 GObexFunc com¶‘e_func , gpoš‹r u£r_d©a , 475 GE¼Ü ** ”r , gušt8 fœ¡_hdr_id , ...) 477  Œªsãr *transfer; 478 GObexPack‘ * »q ; 479 va_li¡ ¬gs ; 481 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "obex %p", obex ); 483 Œªsãr = `Œªsãr_Ãw ( obex , G_OBEX_OP_GET , com¶‘e_func , u£r_d©a ); 484 Œªsãr -> d©a_cÚsum” = d©a_func ; 486 `va_¡¬t ( ¬gs , fœ¡_hdr_id ); 487 »q = `g_obex_·ck‘_Ãw_v®i¡ ( G_OBEX_OP_GET , TRUE , 488 fœ¡_hdr_id , ¬gs ); 489 `va_’d ( ¬gs ); 491 Œªsãr -> »q_id = `g_obex_£nd_»q ( obex , »q , FIRST_PACKET_TIMEOUT , 492 Œªsãr_»¥Ú£ , Œªsãr , ”r ); 493 ià( Œªsãr -> »q_id == 0) { 494 `Œªsãr_ä“ ( Œªsãr ); 498 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 500  Œªsãr -> id ; 501 } } 503  gssize $g‘_g‘_d©a (* buf , gsize Ën , gpoš‹r u£r_d©a ) 505  Œªsãr *Œªsã¸ð u£r_d©a ; 506 GObexPack‘ * »q , * r¥ ; 507 GE¼Ü * ”r = NULL ; 508 gssize »t ; 509 gušt8 Ý ; 511 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 513 »t = Œªsãr -> `d©a_´oduûr ( buf , Ën ,¿nsãr-> u£r_d©a ); 514 ià( »t > 0) { 515 ià(! `g_obex_¤m_aùive ( Œªsãr -> obex )) 516  »t ; 519 r¥ = `g_obex_·ck‘_Ãw ( G_OBEX_RSP_CONTINUE , TRUE , 520 G_OBEX_HDR_INVALID ); 521 `g_obex_·ck‘_add_body ( r¥ , g‘_g‘_d©a , Œªsãr ); 523 ià(! `g_obex_£nd ( Œªsãr -> obex , r¥ , & ”r )) { 524 `Œªsãr_com¶‘e ( Œªsãr , ”r ); 525 `g_”rÜ_ä“ ( ”r ); 528  »t ; 531 ià( »t =ð- EAGAIN ) 532  »t ; 534 ià( »t == 0) { 535 `Œªsãr_com¶‘e ( Œªsãr , NULL ); 536  »t ; 539 Ý = `g_obex_”ºo_to_r¥ ( »t ); 541 »q = `g_obex_·ck‘_Ãw ( Ý , TRUE , G_OBEX_HDR_INVALID ); 542 `g_obex_£nd ( Œªsãr -> obex , »q , NULL ); 544 ”r = `g_”rÜ_Ãw ( G_OBEX_ERROR , G_OBEX_ERROR_CANCELLED , 546 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", ”r -> mes§ge ); 547 `Œªsãr_com¶‘e ( Œªsãr , ”r ); 548 `g_”rÜ_ä“ ( ”r ); 550  »t ; 551 } } 553  gboÞ—n $Œªsãr_g‘_»q_fœ¡ ( Œªsãr *transfer, 554 GObexPack‘ * r¥ ) 556 GE¼Ü * ”r = NULL ; 558 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 560 `g_obex_·ck‘_add_body ( r¥ , g‘_g‘_d©a , Œªsãr ); 562 ià(! `g_obex_£nd ( Œªsãr -> obex , r¥ , & ”r )) { 563 `Œªsãr_com¶‘e ( Œªsãr , ”r ); 564 `g_”rÜ_ä“ ( ”r ); 565  FALSE ; 568  TRUE ; 569 } } 571  $Œªsãr_g‘_»q ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 573  Œªsãr *Œªsã¸ð u£r_d©a ; 574 GE¼Ü * ”r = NULL ; 575 GObexPack‘ * r¥ ; 577 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 579 r¥ = `g_obex_·ck‘_Ãw ( G_OBEX_RSP_CONTINUE , TRUE , G_OBEX_HDR_INVALID ); 580 `g_obex_·ck‘_add_body ( r¥ , g‘_g‘_d©a , Œªsãr ); 582 ià(! `g_obex_£nd ( obex , r¥ , & ”r )) { 583 `Œªsãr_com¶‘e ( Œªsãr , ”r ); 584 `g_”rÜ_ä“ ( ”r ); 586 } } 588 gušt $g_obex_g‘_r¥_pkt ( GObex * obex , GObexPack‘ * r¥ , 589 GObexD©aProduûr d©a_func , GObexFunc com¶‘e_func , 590 gpoš‹r u£r_d©a , GE¼Ü ** ”r ) 592  Œªsãr *transfer; 593 gušt id ; 595 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "obex %p", obex ); 597 Œªsãr = `Œªsãr_Ãw ( obex , G_OBEX_OP_GET , com¶‘e_func , u£r_d©a ); 598 Œªsãr -> d©a_´oduûr = d©a_func ; 600 ià(! `Œªsãr_g‘_»q_fœ¡ ( Œªsãr , r¥ )) 603 ià(! `g_¦i¡_fšd ( Œªsãrs , Œªsãr )) 606 id = `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_GET , Œªsãr_g‘_»q , 607 Œªsãr ); 608 Œªsãr -> g‘_id = id ; 610 id = `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_ABORT , 611 Œªsãr_abÜt_»q , Œªsãr ); 612 Œªsãr -> abÜt_id = id ; 614 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", Œªsãr -> id ); 616  Œªsãr -> id ; 617 } } 619 gušt $g_obex_g‘_r¥ ( GObex * obex , GObexD©aProduûr d©a_func , 620 GObexFunc com¶‘e_func , gpoš‹r u£r_d©a , 621 GE¼Ü ** ”r , gušt8 fœ¡_hdr_id , ...) 623 GObexPack‘ * r¥ ; 624 va_li¡ ¬gs ; 626 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "obex %p", obex ); 628 `va_¡¬t ( ¬gs , fœ¡_hdr_id ); 629 r¥ = `g_obex_·ck‘_Ãw_v®i¡ ( G_OBEX_RSP_CONTINUE , TRUE , 630 fœ¡_hdr_id , ¬gs ); 631 `va_’d ( ¬gs ); 633  `g_obex_g‘_r¥_pkt ( obex , r¥ , d©a_func , com¶‘e_func , 634 u£r_d©a , ”r ); 635 } } 637 gboÞ—n $g_obex_ÿnûl_Œªsãr ( gušt id , GObexFunc com¶‘e_func , 638 gpoš‹r u£r_d©a ) 640  Œªsãr *Œªsã¸ð NULL ; 641 gboÞ—n »t = TRUE ; 643 `g_obex_debug ( G_OBEX_DEBUG_TRANSFER , "Œªsã¸%u", id ); 645 Œªsãr = `fšd_Œªsãr ( id ); 647 ià( Œªsãr =ð NULL ) 648  FALSE ; 650 ià( com¶‘e_func =ð NULL ) 651  dÚe ; 653 Œªsãr -> com¶‘e_func = complete_func; 654 Œªsãr -> u£r_d©a = user_data; 656 ià(! Œªsãr -> »q_id ) { 657 Œªsãr -> »q_id = `g_obex_abÜt Ñ¿nsãr-> obex , 658 Œªsãr_abÜt_»¥Ú£ , 659 Œªsãr , NULL ); 660 ià( Œªsãr -> »q_id ) 661  TRUE ; 664 »t = `g_obex_ÿnûl_»q ( Œªsãr -> obex ,¿nsãr-> »q_id , FALSE ); 665 ià( »t ) 666  TRUE ; 668 dÚe : 669 `Œªsãr_ä“ ( Œªsãr ); 670  »t ; 671 } } @gobex/gobex.c 23 #ifdeà HAVE_CONFIG_H 24  ~"cÚfig.h " 27  ~ 28  ~<¡ršg.h > 29  ~<”ºo.h > 31  ~"gobex.h " 32  ~"gobex-debug.h " 34  #G_OBEX_DEFAULT_MTU 4096 ) 35  #G_OBEX_MINIMUM_MTU 255 ) 36  #G_OBEX_MAXIMUM_MTU 65535 ) 38  #G_OBEX_DEFAULT_TIMEOUT 10 ) 39  #G_OBEX_ABORT_TIMEOUT 5 ) 41  #G_OBEX_OP_NONE 0xff ) 43  #FINAL_BIT 0x80 ) 45  #CONNID_INVALID 0xffffffff ) 48  #NONCE_TAG 0x00 ) 49  #NONCE_LEN 16 ) 52  #DIGEST_TAG 0x00 ) 54 gušt ggobex_debug = 0; 56  s¤m_cÚfig { 57 gušt8 mÝ ; 58 gboÞ—n m’abËd ; 59 gušt8 m¤m ; 60 gušt8 m¤mp ; 61 gboÞ—n moutgošg ; 64  s_GObex { 65  m»f_couÁ ; 66 GIOChªÃl * mio ; 67 gušt mio_sourû ; 69 gboÞ—n (* »ad è( GObex * mobex , GE¼Ü ** m”r ); 70 gboÞ—n (* wr™e è( GObex * mobex , GE¼Ü ** m”r ); 72 gušt8 * mrx_buf ; 73 size_t mrx_d©a ; 74 gušt16 mrx_pkt_Ën ; 75 gušt8 mrx_Ï¡_Ý ; 77 gušt8 * mtx_buf ; 78 size_t mtx_d©a ; 79 size_t mtx_£Á ; 81 gboÞ—n msu¥’ded ; 82 gboÞ—n mu£_¤m ; 84  ¤m_cÚfig * m¤m ; 86 gušt mwr™e_sourû ; 88 gssize mio_rx_mtu ; 89 gssize mio_tx_mtu ; 91 gušt16 mrx_mtu ; 92 gušt16 mtx_mtu ; 94 gušt32 mcÚn_id ; 95 GObexAµ¬am * mauthch® ; 97 GQueue * mtx_queue ; 99 GSLi¡ * m»q_hªdËrs ; 101 GObexFunc mdiscÚn_func ; 102 gpoš‹r mdiscÚn_func_d©a ; 104  ³ndšg_pkt * m³ndšg_»q ; 107  s³ndšg_pkt { 108 gušt mid ; 109 GObex * mobex ; 110 GObexPack‘ * mpkt ; 111 gušt mtimeout ; 112 gušt mtimeout_id ; 113 GObexRe¥Ú£Func mr¥_func ; 114 gpoš‹r mr¥_d©a ; 115 gboÞ—n mÿnûÎed ; 116 gboÞ—n msu¥’ded ; 117 gboÞ—n mauth’tiÿtšg ; 120  s»q_hªdËr { 121 gušt mid ; 122 gušt8 mÝcode ; 123 GObexReque¡Func mfunc ; 124 gpoš‹r mu£r_d©a ; 127  scÚÃù_d©a { 128 gušt8 mv”siÚ ; 129 gušt8 mæags ; 130 gušt16 mmtu ; 131 } __©Œibu‹__ (( ·cked )); 133  s£©h_d©a { 134 gušt8 mæags ; 135 gušt8 mcÚ¡ªts ; 136 } __©Œibu‹__ (( ·cked )); 138  s”rÜ_code { 139 gušt8 mcode ; 140 cÚ¡ * mÇme ; 141 } gobex_”rÜs [] = { 142 { G_OBEX_RSP_CONTINUE , "Continue" }, 143 { G_OBEX_RSP_SUCCESS , "Success" }, 144 { G_OBEX_RSP_CREATED , "Created" }, 145 { G_OBEX_RSP_ACCEPTED , "Accepted" }, 146 { G_OBEX_RSP_NON_AUTHORITATIVE , "Non Authoritative" }, 147 { G_OBEX_RSP_NO_CONTENT , "No Content" }, 148 { G_OBEX_RSP_RESET_CONTENT , "Reset Content" }, 149 { G_OBEX_RSP_PARTIAL_CONTENT , "Partial Content" }, 150 { G_OBEX_RSP_MULTIPLE_CHOICES , "Multiple Choices" }, 151 { G_OBEX_RSP_MOVED_PERMANENTLY , "Moved Permanently" }, 152 { G_OBEX_RSP_MOVED_TEMPORARILY , "Moved Temporarily" }, 153 { G_OBEX_RSP_SEE_OTHER , "See Other" }, 154 { G_OBEX_RSP_NOT_MODIFIED , "Not Modified" }, 155 { G_OBEX_RSP_USE_PROXY , "Use Proxy" }, 156 { G_OBEX_RSP_BAD_REQUEST , "Bad Request" }, 157 { G_OBEX_RSP_UNAUTHORIZED , "Unauthorized" }, 158 { G_OBEX_RSP_PAYMENT_REQUIRED , "Payment Required" }, 159 { G_OBEX_RSP_FORBIDDEN , "Forbidden" }, 160 { G_OBEX_RSP_NOT_FOUND , "Not Found" }, 161 { G_OBEX_RSP_METHOD_NOT_ALLOWED , "Method Not Allowed" }, 162 { G_OBEX_RSP_NOT_ACCEPTABLE , "Not Acceptable" }, 163 { G_OBEX_RSP_PROXY_AUTH_REQUIRED , "Proxy Authentication Required" }, 164 { G_OBEX_RSP_REQUEST_TIME_OUT , "Request Time Out" }, 165 { G_OBEX_RSP_CONFLICT , "Conflict" }, 166 { G_OBEX_RSP_GONE , "Gone" }, 167 { G_OBEX_RSP_LENGTH_REQUIRED , "Length Required" }, 168 { G_OBEX_RSP_PRECONDITION_FAILED , "Precondition Failed" }, 169 { G_OBEX_RSP_REQ_ENTITY_TOO_LARGE , "Request Entity Too Large" }, 170 { G_OBEX_RSP_REQ_URL_TOO_LARGE , "Request URL Too Large" }, 171 { G_OBEX_RSP_UNSUPPORTED_MEDIA_TYPE , "Unsupported Media Type" }, 172 { G_OBEX_RSP_INTERNAL_SERVER_ERROR , "Internal Server Error" }, 173 { G_OBEX_RSP_NOT_IMPLEMENTED , "Not Implemented" }, 174 { G_OBEX_RSP_BAD_GATEWAY , "Bad Gateway" }, 175 { G_OBEX_RSP_SERVICE_UNAVAILABLE , "Service Unavailable" }, 176 { G_OBEX_RSP_GATEWAY_TIMEOUT , "Gateway Timeout" }, 177 { G_OBEX_RSP_VERSION_NOT_SUPPORTED , "Version Not Supported" }, 178 { G_OBEX_RSP_DATABASE_FULL , "Database Full" }, 179 { G_OBEX_RSP_DATABASE_LOCKED , "Database Locked" }, 180 { 0x00, NULL } 183 cÚ¡ * $g_obex_¡»¼Ü ( gušt8 ”r_code ) 185  ”rÜ_code * ”rÜ ; 187  ”rÜ = obex_”rÜs ;ƒ¼Ü-> Çme !ð NULL ;ƒrror++) { 188 ià( ”rÜ -> code =ð ”r_code ) 189  ”rÜ -> Çme ; 193 } } 195  ssize_t $»q_h—d”_off£t ( gušt8 Ýcode ) 197  Ýcode ) { 198  G_OBEX_OP_CONNECT : 199  ( cÚÃù_d©a ); 200  G_OBEX_OP_SETPATH : 201  ( £©h_d©a ); 202  G_OBEX_OP_DISCONNECT : 203  G_OBEX_OP_PUT : 204  G_OBEX_OP_GET : 205  G_OBEX_OP_SESSION : 206  G_OBEX_OP_ABORT : 207  G_OBEX_OP_ACTION : 212 } } 214  ssize_t $r¥_h—d”_off£t ( gušt8 Ýcode ) 216  Ýcode ) { 217  G_OBEX_OP_CONNECT : 218  ( cÚÃù_d©a ); 219  G_OBEX_OP_SETPATH : 220  G_OBEX_OP_DISCONNECT : 221  G_OBEX_OP_PUT : 222  G_OBEX_OP_GET : 223  G_OBEX_OP_SESSION : 224  G_OBEX_OP_ABORT : 225  G_OBEX_OP_ACTION : 230 } } 232  $³ndšg_pkt_ä“ ( ³ndšg_pkt * p ) 234 ià( p -> obex !ð NULL ) 235 `g_obex_uÄef ( p -> obex ); 237 ià( p -> timeout_id > 0) 238 `g_sourû_»move ( p -> timeout_id ); 240 `g_obex_·ck‘_ä“ ( p -> pkt ); 242 `g_ä“ ( p ); 243 } } 245  gboÞ—n $»q_timeout ( gpoš‹r u£r_d©a ) 247 GObex * obex = u£r_d©a ; 248  ³ndšg_pkt * p = obex -> ³ndšg_»q ; 249 GE¼Ü * ”r ; 251 `g_as£¹ ( p !ð NULL ); 253 p -> timeout_id = 0; 254 obex -> ³ndšg_»q = NULL ; 256 ”r = `g_”rÜ_Ãw ( G_OBEX_ERROR , G_OBEX_ERROR_TIMEOUT , 259 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", ”r -> mes§ge ); 261 ià( p -> r¥_func ) 262 p -> `r¥_func ( obex , ”r , NULL ,…-> r¥_d©a ); 264 `g_”rÜ_ä“ ( ”r ); 265 `³ndšg_pkt_ä“ ( p ); 267  FALSE ; 268 } } 270  gboÞ—n $wr™e_¡»am ( GObex * obex , GE¼Ü ** ”r ) 272 GIOStus ¡©us ; 273 gsize by‹s_wr™‹n ; 274 * buf ; 276 buf = (*è& obex -> tx_buf [obex-> tx_£Á ]; 277 ¡©us = `g_io_chªÃl_wr™e_ch¬s ( obex -> io , buf , obex-> tx_d©a , 278 & by‹s_wr™‹n , ”r ); 279 ià( ¡©us !ð G_IO_STATUS_NORMAL ) 280  FALSE ; 282 `g_obex_dump ( G_OBEX_DEBUG_DATA , "<", buf , by‹s_wr™‹n ); 284 obex -> tx_£Á +ð by‹s_wr™‹n ; 285 obex -> tx_d©a -ð by‹s_wr™‹n ; 287  TRUE ; 288 } } 290  gboÞ—n $wr™e_·ck‘ ( GObex * obex , GE¼Ü ** ”r ) 292 GIOStus ¡©us ; 293 gsize by‹s_wr™‹n ; 294 * buf ; 296 buf = (*è& obex -> tx_buf [obex-> tx_£Á ]; 297 ¡©us = `g_io_chªÃl_wr™e_ch¬s ( obex -> io , buf , obex-> tx_d©a , 298 & by‹s_wr™‹n , ”r ); 299 ià( ¡©us !ð G_IO_STATUS_NORMAL ) 300  FALSE ; 302 ià( by‹s_wr™‹n !ð obex -> tx_d©a ) 303  FALSE ; 305 `g_obex_dump ( G_OBEX_DEBUG_DATA , "<", buf , by‹s_wr™‹n ); 307 obex -> tx_£Á +ð by‹s_wr™‹n ; 308 obex -> tx_d©a -ð by‹s_wr™‹n ; 310  TRUE ; 311 } } 313  $£t_¤mp ( GObex * obex , gušt8 ¤mp , gboÞ—n outgošg ) 315  ¤m_cÚfig * cÚfig = obex -> ¤m ; 317 ià( cÚfig =ð NULL ) 321 ià( ¤mp > G_OBEX_SRMP_NEXT_WAIT && cÚfig -> outgošg != outgoing) 324 cÚfig -> ¤mp = srmp; 325 cÚfig -> outgošg = outgoing; 326 } } 328  $£t_¤m ( GObex * obex , gušt8 Ý , gušt8 ¤m ) 330  ¤m_cÚfig * cÚfig = obex -> ¤m ; 331 gboÞ—n ’abË ; 333 ià( cÚfig =ð NULL ) { 334 ià( ¤m =ð G_OBEX_SRM_DISABLE ) 337 cÚfig = `g_Ãw0 ( ¤m_cÚfig , 1); 338 cÚfig -> Ý = op; 339 cÚfig -> ¤m = srm; 340 obex -> ¤m = cÚfig ; 345 ià( cÚfig -> ¤m =ð G_OBEX_SRM_INDICATE ) { 346 ià( ¤m !ð G_OBEX_SRM_ENABLE ) 347  dÚe ; 348 cÚfig -> ¤m = srm; 352 ’abË = ( ¤m =ð G_OBEX_SRM_ENABLE ); 353 ià( cÚfig -> ’abËd =ð ’abË ) 354  dÚe ; 356 cÚfig -> ’abËd = ’abË ; 358 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "SRM %s", cÚfig -> ’abËd ? 361 dÚe : 362 ià( cÚfig -> ’abËd ) 365 `g_ä“ ( obex -> ¤m ); 366 obex -> ¤m = NULL ; 367 } } 369  gboÞ—n $g_obex_¤m_’abËd ( GObex * obex ) 371 ià(! obex -> u£_¤m ) 372  FALSE ; 374 ià( obex -> ¤m =ð NULL ) 375  FALSE ; 377  obex -> ¤m -> ’abËd ; 378 } } 380  $check_¤m_fš® ( GObex * obex , gušt8 Ý ) 382 ià(! `g_obex_¤m_’abËd ( obex )) 385  obex -> ¤m -> Ý ) { 386  G_OBEX_OP_CONNECT : 389 ià( Ý <ð G_OBEX_RSP_CONTINUE ) 393 `£t_¤m ( obex , Ý , G_OBEX_SRM_DISABLE ); 394 } } 396  $£tup_¤m ( GObex * obex , GObexPack‘ * pkt , gboÞ—n outgošg ) 398 GObexH—d” * hdr ; 399 gušt8 Ý ; 400 gboÞ—n fš® ; 402 ià(! obex -> u£_¤m ) 405 Ý = `g_obex_·ck‘_g‘_Ý”©iÚ ( pkt , & fš® ); 407 hdr = `g_obex_·ck‘_g‘_h—d” ( pkt , G_OBEX_HDR_SRM ); 408 ià( hdr !ð NULL ) { 409 gušt8 ¤m ; 410 `g_obex_h—d”_g‘_ušt8 ( hdr , & ¤m ); 411 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "¤m 0x%02x", ¤m ); 412 `£t_¤m ( obex , Ý , ¤m ); 413 } ià(! `g_obex_¤m_’abËd ( obex )) 414 `£t_¤m ( obex , Ý , G_OBEX_SRM_DISABLE ); 416 hdr = `g_obex_·ck‘_g‘_h—d” ( pkt , G_OBEX_HDR_SRMP ); 417 ià( hdr !ð NULL ) { 418 gušt8 ¤mp ; 419 `g_obex_h—d”_g‘_ušt8 ( hdr , & ¤mp ); 420 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "¤m°0x%02x", ¤mp ); 421 `£t_¤mp ( obex , ¤mp , outgošg ); 422 } ià( obex -> ³ndšg_»q && obex->³ndšg_»q-> su¥’ded ) 423 `g_obex_·ck‘_add_ušt8 ( pkt , G_OBEX_HDR_SRMP , G_OBEX_SRMP_WAIT ); 425 `£t_¤mp ( obex , -1, outgošg ); 427 ià( fš® ) 428 `check_¤m_fš® ( obex , Ý ); 429 } } 431  gboÞ—n $wr™e_d©a ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 432 gpoš‹r u£r_d©a ) 434 GObex * obex = u£r_d©a ; 436 ià( cÚd & G_IO_NVAL ) 437  FALSE ; 439 ià( cÚd & ( G_IO_HUP | G_IO_ERR )) 440  ¡Ý_tx ; 442 ià( obex -> tx_d©a == 0) { 443  ³ndšg_pkt * p = `g_queue_pÝ_h—d ( obex -> tx_queue ); 444 ssize_t Ën ; 446 ià( p =ð NULL ) 447  ¡Ý_tx ; 449 `£tup_¤m ( obex , p -> pkt , TRUE ); 451 ià( `g_obex_¤m_’abËd ( obex )) 452  ’code ; 455 ià( obex -> ³ndšg_»q && p -> id > 0) { 456 `g_queue_push_h—d ( obex -> tx_queue , p ); 457  ¡Ý_tx ; 460 ’code : 461 Ën = `g_obex_·ck‘_’code ( p -> pkt , obex -> tx_buf , obex-> tx_mtu ); 462 ià( Ën =ð- EAGAIN ) { 463 `g_queue_push_h—d ( obex -> tx_queue , p ); 464 `g_obex_su¥’d ( obex ); 465  ¡Ý_tx ; 468 ià( Ën < 0) { 469 `³ndšg_pkt_ä“ ( p ); 470  dÚe ; 473 ià( p -> id > 0) { 474 ià( obex -> ³ndšg_»q !ð NULL ) 475 `³ndšg_pkt_ä“ ( obex -> ³ndšg_»q ); 476 obex -> ³ndšg_»q = p ; 477 p -> timeout_id = `g_timeout_add_£cÚds Õ-> timeout , 478 »q_timeout , obex ); 481 ià( obex -> tx_buf [0] & FINAL_BIT ) 482 `check_¤m_fš® ( obex , 483 obex -> tx_buf [0] & ~ FINAL_BIT ); 484 `³ndšg_pkt_ä“ ( p ); 487 obex -> tx_d©a = Ën ; 488 obex -> tx_£Á = 0; 491 ià( obex -> su¥’ded ) { 492 obex -> wr™e_sourû = 0; 493  FALSE ; 496 ià(! obex -> `wr™e (obex, NULL )) 497  ¡Ý_tx ; 499 dÚe : 500 ià( obex -> tx_d©a > 0 || `g_queue_g‘_Ëngth (obex-> tx_queue ) > 0) 501  TRUE ; 503 ¡Ý_tx : 504 obex -> rx_Ï¡_Ý = G_OBEX_OP_NONE ; 505 obex -> tx_d©a = 0; 506 obex -> wr™e_sourû = 0; 507  FALSE ; 508 } } 510  $’abË_tx ( GObex * obex ) 512 GIOCÚd™iÚ cÚd ; 514 ià( obex -> su¥’ded ) 517 ià(! obex -> io || obex-> wr™e_sourû > 0) 520 cÚd = G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 521 obex -> wr™e_sourû = `g_io_add_w©ch (obex-> io , cÚd , wr™e_d©a , obex); 522 } } 524  gboÞ—n $g_obex_£nd_š‹º® ( GObex * obex ,  ³ndšg_pkt * p , 525 GE¼Ü ** ”r ) 528 ià( obex -> io =ð NULL ) { 529 ià(! ”r ) 530  FALSE ; 531 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_DISCONNECTED , 533 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", (* ”r )-> mes§ge ); 534  FALSE ; 537 ià( `g_obex_·ck‘_g‘_Ý”©iÚ ( p -> pkt , NULL è=ð G_OBEX_OP_ABORT ) 538 `g_queue_push_h—d ( obex -> tx_queue , p ); 540 `g_queue_push_ž ( obex -> tx_queue , p ); 542 ià( obex -> ³ndšg_»q =ð NULL || p -> id == 0) 543 `’abË_tx ( obex ); 545  TRUE ; 546 } } 548  $š™_cÚÃù_d©a ( GObex * obex ,  cÚÃù_d©a * d©a ) 550 gušt16 u16 ; 552 `mem£t ( d©a , 0, (*data)); 554 d©a -> v”siÚ = 0x10; 555 d©a -> æags = 0; 557 u16 = `g_htÚs ( obex -> rx_mtu ); 558 `memýy (& d©a -> mtu , & u16 , (u16)); 559 } } 561  gušt8 * $dige¡_»¥Ú£ (cÚ¡ gušt8 * nÚû ) 563 GChecksum * md5 ; 564 gušt8 * »suÉ ; 565 gsize size ; 567 »suÉ = `g_Ãw0 ( gušt8 , NONCE_LEN ); 569 md5 = `g_checksum_Ãw ( G_CHECKSUM_MD5 ); 570 ià( md5 =ð NULL ) 571  »suÉ ; 573 `g_checksum_upd©e ( md5 , nÚû , NONCE_LEN ); 574 #ifdeà __TIZEN_PATCH__ 575 `g_checksum_upd©e ( md5 , ( gušt8 *) ":0000", 5); 577 `g_checksum_upd©e ( md5 , ( gušt8 *) ":BlueZ", 6); 581 size = NONCE_LEN ; 582 `g_checksum_g‘_dige¡ ( md5 , »suÉ , & size ); 584 `g_checksum_ä“ ( md5 ); 586  »suÉ ; 587 } } 589  $´•¬e_auth_r¥ ( GObex * obex , GObexPack‘ * r¥ ) 591 GObexH—d” * hdr ; 592 GObexAµ¬am * authr¥ ; 593 cÚ¡ gušt8 * nÚû ; 594 gušt8 * »suÉ ; 595 gsize Ën ; 598 hdr = `g_obex_·ck‘_g‘_h—d” ( r¥ , G_OBEX_HDR_AUTHRESP ); 599 ià( hdr ) 600  dÚe ; 602 ià(! `g_obex_­·¿m_g‘_by‹s ( obex -> authch® , NONCE_TAG , & nÚû , & Ën )) 603  dÚe ; 605 ià( Ën !ð NONCE_LEN ) 606  dÚe ; 608 »suÉ = `dige¡_»¥Ú£ ( nÚû ); 609 authr¥ = `g_obex_­·¿m_£t_by‹s ( NULL , DIGEST_TAG , »suÉ , NONCE_LEN ); 611 hdr = `g_obex_h—d”_Ãw_g ( G_OBEX_HDR_AUTHRESP , authr¥ ); 612 `g_obex_·ck‘_add_h—d” ( r¥ , hdr ); 614 `g_obex_­·¿m_ä“ ( authr¥ ); 615 `g_ä“ ( »suÉ ); 617 dÚe : 618 `g_obex_­·¿m_ä“ ( obex -> authch® ); 619 obex -> authch® = NULL ; 620 } } 622  $´•¬e_cÚÃù_r¥ ( GObex * obex , GObexPack‘ * r¥ ) 624 GObexH—d” * hdr ; 625  cÚÃù_d©a d©a ; 626  gušt32 Ãxt_cÚnid = 1; 628 `š™_cÚÃù_d©a ( obex , & d©a ); 629 `g_obex_·ck‘_£t_d©a ( r¥ , & d©a , (d©a), G_OBEX_DATA_COPY ); 631 hdr = `g_obex_·ck‘_g‘_h—d” ( r¥ , G_OBEX_HDR_CONNECTION ); 632 ià( hdr ) { 633 `g_obex_h—d”_g‘_ušt32 ( hdr , & obex -> cÚn_id ); 634  dÚe ; 637 obex -> cÚn_id = Ãxt_cÚnid ++; 639 hdr = `g_obex_h—d”_Ãw_ušt32 ( G_OBEX_HDR_CONNECTION , obex -> cÚn_id ); 640 `g_obex_·ck‘_´•’d_h—d” ( r¥ , hdr ); 642 dÚe : 643 ià( obex -> authch® ) 644 `´•¬e_auth_r¥ ( obex , r¥ ); 645 } } 647  $´•¬e_¤m_r¥ ( GObex * obex , GObexPack‘ * pkt ) 649 GObexH—d” * hdr ; 651 ià(! obex -> u£_¤m || obex-> ¤m =ð NULL ) 654 ià( obex -> ¤m -> ’abËd ) 657 hdr = `g_obex_·ck‘_g‘_h—d” ( pkt , G_OBEX_HDR_SRM ); 658 ià( hdr !ð NULL ) 661 hdr = `g_obex_h—d”_Ãw_ušt8 ( G_OBEX_HDR_SRM , G_OBEX_SRM_ENABLE ); 662 `g_obex_·ck‘_´•’d_h—d” ( pkt , hdr ); 663 } } 665 gboÞ—n $g_obex_£nd ( GObex * obex , GObexPack‘ * pkt , GE¼Ü ** ”r ) 667  ³ndšg_pkt * p ; 668 gboÞ—n »t ; 670 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "cÚÀ%u", obex -> cÚn_id ); 672 ià( obex =ð NULL || pkt == NULL) { 673 ià(! ”r ) 674  FALSE ; 675 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_INVALID_ARGS , 677 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", (* ”r )-> mes§ge ); 678  FALSE ; 681  obex -> rx_Ï¡_Ý ) { 682  G_OBEX_OP_CONNECT : 683 `´•¬e_cÚÃù_r¥ ( obex , pkt ); 685  G_OBEX_OP_GET : 686  G_OBEX_OP_PUT : 687 `´•¬e_¤m_r¥ ( obex , pkt ); 691 p = `g_Ãw0 ( ³ndšg_pkt , 1); 692 p -> pkt =…kt; 694 »t = `g_obex_£nd_š‹º® ( obex , p , ”r ); 695 ià( »t =ð FALSE ) 696 `³ndšg_pkt_ä“ ( p ); 698  »t ; 699 } } 701  $´•¬e_¤m_»q ( GObex * obex , GObexPack‘ * pkt ) 703 GObexH—d” * hdr ; 705 ià(! obex -> u£_¤m ) 708 ià( obex -> ¤m !ð NULL && obex->¤m-> ’abËd ) 711 hdr = `g_obex_·ck‘_g‘_h—d” ( pkt , G_OBEX_HDR_SRM ); 712 ià( hdr !ð NULL ) 715 hdr = `g_obex_h—d”_Ãw_ušt8 ( G_OBEX_HDR_SRM , G_OBEX_SRM_ENABLE ); 716 `g_obex_·ck‘_´•’d_h—d” ( pkt , hdr ); 717 } } 719 gušt $g_obex_£nd_»q ( GObex * obex , GObexPack‘ * »q ,  timeout , 720 GObexRe¥Ú£Func func , gpoš‹r u£r_d©a , 721 GE¼Ü ** ”r ) 723 GObexH—d” * hdr ; 724  ³ndšg_pkt * p ; 725  gušt id = 1; 726 gušt8 Ý ; 728 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "cÚÀ%u", obex -> cÚn_id ); 730 Ý = `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , NULL ); 731 ià( Ý =ð G_OBEX_OP_PUT || o°=ð G_OBEX_OP_GET ) { 733 `´•¬e_¤m_»q ( obex , »q ); 736 ià( obex -> cÚn_id =ð CONNID_INVALID ) 737  ü—‹_³ndšg ; 739 ià( obex -> rx_Ï¡_Ý =ð G_OBEX_RSP_CONTINUE ) 740  ü—‹_³ndšg ; 742 ià( `g_obex_¤m_’abËd ( obex è&& obex-> ³ndšg_»q !ð NULL ) 743  ü—‹_³ndšg ; 745 hdr = `g_obex_·ck‘_g‘_h—d” ( »q , G_OBEX_HDR_CONNECTION ); 746 ià( hdr !ð NULL ) 747  ü—‹_³ndšg ; 749 hdr = `g_obex_h—d”_Ãw_ušt32 ( G_OBEX_HDR_CONNECTION , obex -> cÚn_id ); 750 `g_obex_·ck‘_´•’d_h—d” ( »q , hdr ); 752 ü—‹_³ndšg : 753 p = `g_Ãw0 ( ³ndšg_pkt , 1); 755 p -> pkt = »q ; 756 p -> id = id++; 757 p -> r¥_func = func ; 758 p -> r¥_d©a = u£r_d©a ; 760 ià( timeout < 0) 761 p -> timeout = G_OBEX_DEFAULT_TIMEOUT ; 763 p -> timeout =imeout; 765 ià(! `g_obex_£nd_š‹º® ( obex , p , ”r )) { 766 `³ndšg_pkt_ä“ ( p ); 770  p -> id ; 771 } } 773  $³ndšg_pkt_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 775 cÚ¡  ³ndšg_pkt * p = a ; 776 gušt id = `GPOINTER_TO_UINT ( b ); 778  ( p -> id - id); 779 } } 781  gboÞ—n $³ndšg_»q_abÜt ( GObex * obex , GE¼Ü ** ”r ) 783  ³ndšg_pkt * p = obex -> ³ndšg_»q ; 784 GObexPack‘ * »q ; 786 ià( p -> ÿnûÎed ) 787  TRUE ; 789 p -> ÿnûÎed = TRUE ; 791 ià( p -> timeout_id > 0) 792 `g_sourû_»move ( p -> timeout_id ); 794 p -> timeout = G_OBEX_ABORT_TIMEOUT ; 795 p -> timeout_id = `g_timeout_add_£cÚds Õ-> timeout , »q_timeout , obex ); 797 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_ABORT , TRUE , G_OBEX_HDR_INVALID ); 799  `g_obex_£nd ( obex , »q , ”r ); 800 } } 802  gboÞ—n $ÿnûl_com¶‘e ( gpoš‹r u£r_d©a ) 804  ³ndšg_pkt * p = u£r_d©a ; 805 GObex * obex = p ->obex; 806 GE¼Ü * ”r ; 808 `g_as£¹ ( p -> r¥_func !ð NULL ); 810 ”r = `g_”rÜ_Ãw ( G_OBEX_ERROR , G_OBEX_ERROR_CANCELLED , 812 p -> `r¥_func ( obex , ”r , NULL ,…-> r¥_d©a ); 814 `g_”rÜ_ä“ ( ”r ); 816 `³ndšg_pkt_ä“ ( p ); 818  FALSE ; 819 } } 821 gboÞ—n $g_obex_ÿnûl_»q ( GObex * obex , gušt »q_id , gboÞ—n »move_ÿÎback ) 823 GLi¡ * m©ch ; 824  ³ndšg_pkt * p ; 826 ià( obex -> ³ndšg_»q && obex->³ndšg_»q-> id =ð »q_id ) { 827 ià(! `³ndšg_»q_abÜt ( obex , NULL )) { 828 p = obex -> ³ndšg_»q ; 829 obex -> ³ndšg_»q = NULL ; 830  immedŸ‹_com¶‘iÚ ; 833 ià( »move_ÿÎback ) 834 obex -> ³ndšg_»q -> r¥_func = NULL ; 836  TRUE ; 839 m©ch = `g_queue_fšd_cu¡om ( obex -> tx_queue , `GUINT_TO_POINTER ( »q_id ), 840 ³ndšg_pkt_cmp ); 841 ià( m©ch =ð NULL ) 842  FALSE ; 844 p = m©ch -> d©a ; 846 `g_queue_d–‘e_lšk ( obex -> tx_queue , m©ch ); 848 immedŸ‹_com¶‘iÚ : 849 p -> ÿnûÎed = TRUE ; 850 p -> obex = `g_obex_»f (obex); 852 ià( »move_ÿÎback || p -> r¥_func =ð NULL ) 853 `³ndšg_pkt_ä“ ( p ); 855 `g_idË_add ( ÿnûl_com¶‘e , p ); 857  TRUE ; 858 } } 860 gboÞ—n $g_obex_£nd_r¥ ( GObex * obex , gušt8 r¥code , GE¼Ü ** ”r , 861 gušt8 fœ¡_hdr_ty³ , ...) 863 GObexPack‘ * r¥ ; 864 va_li¡ ¬gs ; 866 `va_¡¬t ( ¬gs , fœ¡_hdr_ty³ ); 867 r¥ = `g_obex_·ck‘_Ãw_v®i¡ ( r¥code , TRUE , fœ¡_hdr_ty³ , ¬gs ); 868 `va_’d ( ¬gs ); 870  `g_obex_£nd ( obex , r¥ , ”r ); 871 } } 873  $g_obex_£t_discÚÃù_funùiÚ ( GObex * obex , GObexFunc func , 874 gpoš‹r u£r_d©a ) 876 obex -> discÚn_func = func ; 877 obex -> discÚn_func_d©a = u£r_d©a ; 878 } } 880  $»q_hªdËr_cmpÝ ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 882 cÚ¡  »q_hªdËr * hªdËr = a ; 883 gušt Ýcode = `GPOINTER_TO_UINT ( b ); 885  (è hªdËr -> Ýcode - () opcode; 886 } } 888  $»q_hªdËr_cmpid ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 890 cÚ¡  »q_hªdËr * hªdËr = a ; 891 gušt id = `GPOINTER_TO_UINT ( b ); 893  (è hªdËr -> id - () id; 894 } } 896 gušt $g_obex_add_»que¡_funùiÚ ( GObex * obex , gušt8 Ýcode , 897 GObexReque¡Func func , 898 gpoš‹r u£r_d©a ) 900  »q_hªdËr * hªdËr ; 901  gušt Ãxt_id = 1; 903 hªdËr = `g_Ãw0 ( »q_hªdËr , 1); 904 hªdËr -> id = Ãxt_id ++; 905 hªdËr -> Ýcode = opcode; 906 hªdËr -> func = func; 907 hªdËr -> u£r_d©a = user_data; 909 obex -> »q_hªdËrs = `g_¦i¡_´•’d (obex->»q_hªdËrs, hªdËr ); 911  hªdËr -> id ; 912 } } 914 gboÞ—n $g_obex_»move_»que¡_funùiÚ ( GObex * obex , gušt id ) 916  »q_hªdËr * hªdËr ; 917 GSLi¡ * m©ch ; 919 m©ch = `g_¦i¡_fšd_cu¡om ( obex -> »q_hªdËrs , `GUINT_TO_POINTER ( id ), 920 »q_hªdËr_cmpid ); 921 ià( m©ch =ð NULL ) 922  FALSE ; 924 hªdËr = m©ch -> d©a ; 926 obex -> »q_hªdËrs = `g_¦i¡_d–‘e_lšk (obex->»q_hªdËrs, m©ch ); 927 `g_ä“ ( hªdËr ); 929  TRUE ; 930 } } 932  $g_obex_¤m_su¥’d ( GObex * obex ) 934  ³ndšg_pkt * p = obex -> ³ndšg_»q ; 935 GObexPack‘ * »q ; 937 ià( p -> timeout_id > 0) { 938 `g_sourû_»move ( p -> timeout_id ); 939 p -> timeout_id = 0; 942 p -> su¥’ded = TRUE ; 944 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_GET , TRUE , 945 G_OBEX_HDR_SRMP , G_OBEX_SRMP_WAIT , 946 G_OBEX_HDR_INVALID ); 948 `g_obex_£nd ( obex , »q , NULL ); 949 } } 951  $g_obex_su¥’d ( GObex * obex ) 953  ³ndšg_pkt * »q = obex -> ³ndšg_»q ; 955 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "cÚÀ%u", obex -> cÚn_id ); 957 ià(! `g_obex_¤m_aùive ( obex è|| ! »q ) 958  dÚe ; 961 ià( `g_obex_·ck‘_g‘_Ý”©iÚ ( »q -> pkt , NULL è=ð G_OBEX_OP_GET ) { 962 `g_obex_¤m_su¥’d ( obex ); 966 dÚe : 967 obex -> su¥’ded = TRUE ; 969 ià( obex -> wr™e_sourû > 0) { 970 `g_sourû_»move ( obex -> wr™e_sourû ); 971 obex -> wr™e_sourû = 0; 973 } } 975  $g_obex_¤m_»sume ( GObex * obex ) 977  ³ndšg_pkt * p = obex -> ³ndšg_»q ; 978 GObexPack‘ * »q ; 980 p -> timeout_id = `g_timeout_add_£cÚds Õ-> timeout , »q_timeout , obex ); 981 p -> su¥’ded = FALSE ; 983 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_GET , TRUE , G_OBEX_HDR_INVALID ); 985 `g_obex_£nd ( obex , »q , NULL ); 986 } } 988  $g_obex_»sume ( GObex * obex ) 990  ³ndšg_pkt * »q = obex -> ³ndšg_»q ; 992 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "cÚÀ%u", obex -> cÚn_id ); 994 obex -> su¥’ded = FALSE ; 996 ià( `g_obex_¤m_aùive ( obex è|| ! »q ) 997  dÚe ; 999 ià( `g_obex_·ck‘_g‘_Ý”©iÚ ( »q -> pkt , NULL è=ð G_OBEX_OP_GET ) 1000 `g_obex_¤m_»sume ( obex ); 1002 dÚe : 1003 ià( `g_queue_g‘_Ëngth ( obex -> tx_queue è> 0 || obex-> tx_d©a > 0) 1004 `’abË_tx ( obex ); 1005 } } 1007 gboÞ—n $g_obex_¤m_aùive ( GObex * obex ) 1009 gboÞ—n »t = FALSE ; 1011 ià(! `g_obex_¤m_’abËd ( obex )) 1012  dÚe ; 1014 ià( obex -> ¤m -> ¤mp <ð G_OBEX_SRMP_NEXT_WAIT ) 1015  dÚe ; 1017 »t = TRUE ; 1018 dÚe : 1019 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "%s", »t ? "yes" : "no"); 1020  »t ; 1021 } } 1023  $auth_ch®Ënge ( GObex * obex ) 1025  ³ndšg_pkt * p = obex -> ³ndšg_»q ; 1027 ià( p -> auth’tiÿtšg ) 1030 p -> auth’tiÿtšg = TRUE ; 1032 `´•¬e_auth_r¥ ( obex , p -> pkt ); 1036 ià( p -> timeout_id > 0) { 1037 `g_sourû_»move ( p -> timeout_id ); 1038 p -> timeout_id = 0; 1040 obex -> ³ndšg_»q = NULL ; 1041 `g_obex_£nd_š‹º® ( obex , p , NULL ); 1042 } } 1044  $·r£_cÚÃù_d©a ( GObex * obex , GObexPack‘ * pkt ) 1046 cÚ¡  cÚÃù_d©a * d©a ; 1047 GObexH—d” * hdr ; 1048 gušt16 u16 ; 1049 size_t d©a_Ën ; 1051 d©a = `g_obex_·ck‘_g‘_d©a ( pkt , & d©a_Ën ); 1052 ià( d©a =ð NULL || d©a_Ën != (*data)) 1055 `memýy (& u16 , & d©a -> mtu , (u16)); 1057 obex -> tx_mtu = `g_Áohs ( u16 ); 1058 ià( obex -> io_tx_mtu > 0 && obex-> tx_mtu > obex->io_tx_mtu) 1059 obex -> tx_mtu = obex-> io_tx_mtu ; 1060 obex -> tx_buf = `g_»®loc (obex->tx_buf, obex-> tx_mtu ); 1062 hdr = `g_obex_·ck‘_g‘_h—d” ( pkt , G_OBEX_HDR_CONNECTION ); 1063 ià( hdr ) 1064 `g_obex_h—d”_g‘_ušt32 ( hdr , & obex -> cÚn_id ); 1066 hdr = `g_obex_·ck‘_g‘_h—d” ( pkt , G_OBEX_HDR_AUTHCHAL ); 1067 ià( hdr ) 1068 obex -> authch® = `g_obex_h—d”_g‘_­·¿m ( hdr ); 1069 } } 1071  gboÞ—n $·r£_»¥Ú£ ( GObex * obex , GObexPack‘ * r¥ ) 1073  ³ndšg_pkt * p = obex -> ³ndšg_»q ; 1074 gušt8 Ýcode , r¥code ; 1075 gboÞ—n fš® ; 1077 r¥code = `g_obex_·ck‘_g‘_Ý”©iÚ ( r¥ , & fš® ); 1079 Ýcode = `g_obex_·ck‘_g‘_Ý”©iÚ ( p -> pkt , NULL ); 1080 ià( Ýcode =ð G_OBEX_OP_CONNECT ) { 1081 `·r£_cÚÃù_d©a ( obex , r¥ ); 1082 ià( r¥code =ð G_OBEX_RSP_UNAUTHORIZED && obex -> authch® ) 1083 `auth_ch®Ënge ( obex ); 1086 `£tup_¤m ( obex , r¥ , FALSE ); 1088 ià(! `g_obex_¤m_’abËd ( obex )) 1089  fš® ; 1096 ià( Ýcode =ð G_OBEX_OP_GET && r¥code =ð G_OBEX_RSP_CONTINUE ) { 1097 ià( p -> timeout_id > 0) 1098 `g_sourû_»move ( p -> timeout_id ); 1100 p -> timeout_id = `g_timeout_add_£cÚds Õ-> timeout , »q_timeout , 1101 obex ); 1102  FALSE ; 1105  fš® ; 1106 } } 1108  $hªdË_»¥Ú£ ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ ) 1110  ³ndšg_pkt * p ; 1111 gboÞ—n discÚn = ”r ? TRUE : FALSE , fš®_r¥ = TRUE; 1113 ià( r¥ !ð NULL ) 1114 fš®_r¥ = `·r£_»¥Ú£ ( obex , r¥ ); 1116 ià(! obex -> ³ndšg_»q ) 1119 p = obex -> ³ndšg_»q ; 1122 ià( fš®_r¥ ) 1123 obex -> ³ndšg_»q = NULL ; 1125 ià( p -> ÿnûÎed ) 1126 ”r = `g_”rÜ_Ãw ( G_OBEX_ERROR , G_OBEX_ERROR_CANCELLED , 1129 ià( ”r ) 1130 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", ”r -> mes§ge ); 1132 ià( p -> r¥_func ) { 1133 p -> `r¥_func ( obex , ”r , r¥ ,…-> r¥_d©a ); 1136 ià(! fš®_r¥ && p !ð obex -> ³ndšg_»q ) 1140 ià( p -> ÿnûÎed ) 1141 `g_”rÜ_ä“ ( ”r ); 1143 ià( fš®_r¥ ) 1144 `³ndšg_pkt_ä“ ( p ); 1146 ià(! discÚn && `g_queue_g‘_Ëngth ( obex -> tx_queue ) > 0) 1147 `’abË_tx ( obex ); 1148 } } 1150  gboÞ—n $check_cÚnid ( GObex * obex , GObexPack‘ * pkt ) 1152 GObexH—d” * hdr ; 1153 gušt32 id ; 1155 ià( obex -> cÚn_id =ð CONNID_INVALID ) 1156  TRUE ; 1158 hdr = `g_obex_·ck‘_g‘_h—d” ( pkt , G_OBEX_HDR_CONNECTION ); 1159 ià( hdr =ð NULL ) 1160  TRUE ; 1162 `g_obex_h—d”_g‘_ušt32 ( hdr , & id ); 1164  obex -> cÚn_id =ð id ; 1165 } } 1167  $·r£_»que¡ ( GObex * obex , GObexPack‘ * »q ) 1169 gušt8 Ý ; 1170 gboÞ—n fš® ; 1172 Ý = `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , & fš® ); 1173  Ý ) { 1174  G_OBEX_OP_CONNECT : 1175 `·r£_cÚÃù_d©a ( obex , »q ); 1177  G_OBEX_OP_ABORT : 1180 ià( `check_cÚnid ( obex , »q )) 1183  - G_OBEX_RSP_SERVICE_UNAVAILABLE ; 1186 `£tup_¤m ( obex , »q , FALSE ); 1188  Ý ; 1189 } } 1191  $hªdË_»que¡ ( GObex * obex , GObexPack‘ * »q ) 1193 GSLi¡ * m©ch ; 1194  Ý ; 1196 Ý = `·r£_»que¡ ( obex , »q ); 1197 ià( Ý < 0) 1198  çž ; 1200 m©ch = `g_¦i¡_fšd_cu¡om ( obex -> »q_hªdËrs , `GUINT_TO_POINTER ( Ý ), 1201 »q_hªdËr_cmpÝ ); 1202 ià( m©ch ) { 1203  »q_hªdËr * hªdËr = m©ch -> d©a ; 1204 hªdËr -> `func ( obex , »q , hªdËr-> u£r_d©a ); 1208 Ý = - G_OBEX_RSP_NOT_IMPLEMENTED ; 1210 çž : 1211 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", `g_obex_¡»¼Ü (- Ý )); 1212 `g_obex_£nd_r¥ ( obex , - Ý , NULL , G_OBEX_HDR_INVALID ); 1213 } } 1215  gboÞ—n $»ad_¡»am ( GObex * obex , GE¼Ü ** ”r ) 1217 GIOChªÃl * io = obex ->io; 1218 GIOStus ¡©us ; 1219 gsize rby‹s , tÜ—d ; 1220 gušt16 u16 ; 1221 * buf ; 1223 ià( obex -> rx_d©a >= 3) 1224  »ad_body ; 1226 rby‹s = 0; 1227 tÜ—d = 3 - obex -> rx_d©a ; 1228 buf = (*è& obex -> rx_buf [obex-> rx_d©a ]; 1230 ¡©us = `g_io_chªÃl_»ad_ch¬s ( io , buf , tÜ—d , & rby‹s , NULL ); 1231 ià( ¡©us !ð G_IO_STATUS_NORMAL ) 1232  TRUE ; 1234 obex -> rx_d©a +ð rby‹s ; 1235 ià( obex -> rx_d©a < 3) 1236  dÚe ; 1238 `memýy (& u16 , & buf [1], (u16)); 1239 obex -> rx_pkt_Ën = `g_Áohs ( u16 ); 1241 ià( obex -> rx_pkt_Ën > obex-> rx_mtu ) { 1242 ià(! ”r ) 1243  FALSE ; 1244 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_PARSE_ERROR , 1246 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", (* ”r )-> mes§ge ); 1247  FALSE ; 1250 »ad_body : 1251 ià( obex -> rx_d©a >ðobex-> rx_pkt_Ën ) 1252  dÚe ; 1255 tÜ—d = obex -> rx_pkt_Ën - obex-> rx_d©a ; 1256 buf = (*è& obex -> rx_buf [obex-> rx_d©a ]; 1258 ¡©us = `g_io_chªÃl_»ad_ch¬s ( io , buf , tÜ—d , & rby‹s , NULL ); 1259 ià( ¡©us !ð G_IO_STATUS_NORMAL ) 1260  dÚe ; 1262 obex -> rx_d©a +ð rby‹s ; 1263 }  rby‹s > 0 && obex -> rx_d©a < obex-> rx_pkt_Ën ); 1265 dÚe : 1266 `g_obex_dump ( G_OBEX_DEBUG_DATA , ">", obex -> rx_buf , obex-> rx_d©a ); 1268  TRUE ; 1269 } } 1271  gboÞ—n $»ad_·ck‘ ( GObex * obex , GE¼Ü ** ”r ) 1273 GIOChªÃl * io = obex ->io; 1274 GE¼Ü * »ad_”r = NULL ; 1275 GIOStus ¡©us ; 1276 gsize rby‹s ; 1277 gušt16 u16 ; 1279 ià( obex -> rx_d©a > 0) { 1280 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_PARSE_ERROR , 1282  çž ; 1285 ¡©us = `g_io_chªÃl_»ad_ch¬s ( io , (*è obex -> rx_buf , 1286 obex -> rx_mtu , & rby‹s , & »ad_”r ); 1287 ià( ¡©us !ð G_IO_STATUS_NORMAL ) { 1288 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_PARSE_ERROR , 1289 "UÇbËØ»ad d©a: %s", »ad_”r -> mes§ge ); 1290 `g_”rÜ_ä“ ( »ad_”r ); 1291  çž ; 1294 obex -> rx_d©a +ð rby‹s ; 1296 ià( rby‹s < 3) { 1297 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_PARSE_ERROR , 1299  çž ; 1302 `memýy (& u16 , & obex -> rx_buf [1], (u16)); 1303 obex -> rx_pkt_Ën = `g_Áohs ( u16 ); 1305 ià( obex -> rx_pkt_Ën !ð rby‹s ) { 1306 `g_£t_”rÜ ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_PARSE_ERROR , 1308 rby‹s , obex -> rx_pkt_Ën ); 1309  FALSE ; 1312 `g_obex_dump ( G_OBEX_DEBUG_DATA , ">", obex -> rx_buf , obex-> rx_d©a ); 1314  TRUE ; 1315 çž : 1316 ià( ”r ) 1317 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", (* ”r )-> mes§ge ); 1319  FALSE ; 1320 } } 1322  gboÞ—n $šcomšg_d©a ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 1323 gpoš‹r u£r_d©a ) 1325 GObex * obex = u£r_d©a ; 1326 GObexPack‘ * pkt ; 1327 ssize_t h—d”_off£t ; 1328 GE¼Ü * ”r = NULL ; 1329 gušt8 Ýcode ; 1331 ià( cÚd & G_IO_NVAL ) 1332  FALSE ; 1334 ià( cÚd & ( G_IO_HUP | G_IO_ERR )) { 1335 ”r = `g_”rÜ_Ãw ( G_OBEX_ERROR , G_OBEX_ERROR_DISCONNECTED , 1337  çžed ; 1340 ià(! obex -> `»ad (obex, & ”r )) 1341  çžed ; 1343 ià( obex -> rx_d©a < 3 || obex->rx_d©¨< obex-> rx_pkt_Ën ) 1344  TRUE ; 1346 obex -> rx_Ï¡_Ý = obex-> rx_buf [0] & ~ FINAL_BIT ; 1348 ià( obex -> ³ndšg_»q ) { 1349  ³ndšg_pkt * p = obex -> ³ndšg_»q ; 1350 Ýcode = `g_obex_·ck‘_g‘_Ý”©iÚ ( p -> pkt , NULL ); 1351 h—d”_off£t = `r¥_h—d”_off£t ( Ýcode ); 1353 Ýcode = obex -> rx_Ï¡_Ý ; 1355 ià( Ýcode > 0x1à&& opcod!ð G_OBEX_OP_ABORT ) { 1356 obex -> rx_d©a = 0; 1357  TRUE ; 1359 h—d”_off£t = `»q_h—d”_off£t ( Ýcode ); 1362 ià( h—d”_off£t < 0) { 1363 ”r = `g_”rÜ_Ãw ( G_OBEX_ERROR , G_OBEX_ERROR_PARSE_ERROR , 1365 Ýcode ); 1366  çžed ; 1369 pkt = `g_obex_·ck‘_decode ( obex -> rx_buf , obex-> rx_d©a , h—d”_off£t , 1370 G_OBEX_DATA_REF , & ”r ); 1371 ià( pkt =ð NULL ) 1372  çžed ; 1375 `g_obex_»f ( obex ); 1377 ià( obex -> ³ndšg_»q ) 1378 `hªdË_»¥Ú£ ( obex , NULL , pkt ); 1380 `hªdË_»que¡ ( obex , pkt ); 1382 obex -> rx_d©a = 0; 1384 `g_obex_uÄef ( obex ); 1386 ià( ”r !ð NULL ) 1387 `g_”rÜ_ä“ ( ”r ); 1389 ià( pkt !ð NULL ) 1390 `g_obex_·ck‘_ä“ ( pkt ); 1392  TRUE ; 1394 çžed : 1395 ià( ”r ) 1396 `g_obex_debug ( G_OBEX_DEBUG_ERROR , "%s", ”r -> mes§ge ); 1398 `g_io_chªÃl_uÄef ( obex -> io ); 1399 obex -> io = NULL ; 1400 obex -> io_sourû = 0; 1401 obex -> rx_d©a = 0; 1404 `g_obex_»f ( obex ); 1406 ià( obex -> ³ndšg_»q ) 1407 `hªdË_»¥Ú£ ( obex , ”r , NULL ); 1409 ià( obex -> discÚn_func ) 1410 obex -> `discÚn_func (obex, ”r , obex-> discÚn_func_d©a ); 1412 `g_obex_uÄef ( obex ); 1414 `g_”rÜ_ä“ ( ”r ); 1416  FALSE ; 1417 } } 1419  GDebugKey gkeys [] = { 1420 { "”rÜ", G_OBEX_DEBUG_ERROR }, 1421 { "commªd", G_OBEX_DEBUG_COMMAND }, 1422 { "Œªsãr", G_OBEX_DEBUG_TRANSFER }, 1423 { "h—d”", G_OBEX_DEBUG_HEADER }, 1424 { "·ck‘", G_OBEX_DEBUG_PACKET }, 1425 { "d©a", G_OBEX_DEBUG_DATA }, 1426 { "­·¿m", G_OBEX_DEBUG_APPARAM }, 1429 GObex * $g_obex_Ãw ( GIOChªÃl * io , GObexT¿n¥ÜtTy³ Œª¥Üt_ty³ , 1430 gssize io_rx_mtu , gssiz io_tx_mtu ) 1432 GObex * obex ; 1433 GIOCÚd™iÚ cÚd ; 1435 ià( gobex_debug == 0) { 1436 cÚ¡ * ’v = `g_g‘’v ("GOBEX_DEBUG"); 1438 ià( ’v ) { 1439 gobex_debug = `g_·r£_debug_¡ršg ( ’v , keys , 7); 1440 `g_£‹nv ("G_MESSAGES_DEBUG", "gobex", FALSE ); 1442 gobex_debug = G_OBEX_DEBUG_NONE ; 1445 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , ""); 1447 ià( io =ð NULL ) 1448  NULL ; 1450 ià( io_rx_mtu >ð0 && io_rx_mtu < G_OBEX_MINIMUM_MTU ) 1451  NULL ; 1453 ià( io_tx_mtu >ð0 && io_tx_mtu < G_OBEX_MINIMUM_MTU ) 1454  NULL ; 1456 obex = `g_Ãw0 ( GObex , 1); 1458 obex -> io = `g_io_chªÃl_»f (io); 1459 obex -> »f_couÁ = 1; 1460 obex -> cÚn_id = CONNID_INVALID ; 1461 obex -> rx_Ï¡_Ý = G_OBEX_OP_NONE ; 1463 obex -> io_rx_mtu = io_rx_mtu; 1464 obex -> io_tx_mtu = io_tx_mtu; 1466 ià( io_rx_mtu > G_OBEX_MAXIMUM_MTU ) 1467 obex -> rx_mtu = G_OBEX_MAXIMUM_MTU ; 1468 ià( io_rx_mtu < G_OBEX_MINIMUM_MTU ) 1469 obex -> rx_mtu = G_OBEX_DEFAULT_MTU ; 1471 obex -> rx_mtu = io_rx_mtu ; 1473 obex -> tx_mtu = G_OBEX_MINIMUM_MTU ; 1475 obex -> tx_queue = `g_queue_Ãw (); 1476 obex -> rx_buf = `g_m®loc (obex-> rx_mtu ); 1477 obex -> tx_buf = `g_m®loc (obex-> tx_mtu ); 1479  Œª¥Üt_ty³ ) { 1480  G_OBEX_TRANSPORT_STREAM : 1481 obex -> »ad = »ad_¡»am ; 1482 obex -> wr™e = wr™e_¡»am ; 1484  G_OBEX_TRANSPORT_PACKET : 1485 obex -> u£_¤m = TRUE ; 1486 obex -> »ad = »ad_·ck‘ ; 1487 obex -> wr™e = wr™e_·ck‘ ; 1490 `g_obex_uÄef ( obex ); 1491  NULL ; 1494 `g_io_chªÃl_£t_’codšg ( io , NULL , NULL); 1495 `g_io_chªÃl_£t_bufã»d ( io , FALSE ); 1496 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1497 obex -> io_sourû = `g_io_add_w©ch ( io , cÚd , šcomšg_d©a , obex); 1499  obex ; 1500 } } 1502 GObex * $g_obex_»f ( GObex * obex ) 1504  »fs ; 1506 ià( obex =ð NULL ) 1507  NULL ; 1509 »fs = `__sync_add_ªd_ãtch (& obex -> »f_couÁ , 1); 1511 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "»à%u", »fs ); 1513  obex ; 1514 } } 1516  $g_obex_uÄef ( GObex * obex ) 1518  »fs ; 1520 »fs = `__sync_sub_ªd_ãtch (& obex -> »f_couÁ , 1); 1522 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "»à%u", »fs ); 1524 ià( »fs > 0) 1527 `g_¦i¡_ä“_fuÎ ( obex -> »q_hªdËrs , g_ä“ ); 1529 `g_queue_fÜ—ch ( obex -> tx_queue , ( GFunc è ³ndšg_pkt_ä“ , NULL ); 1530 `g_queue_ä“ ( obex -> tx_queue ); 1532 ià( obex -> io !ð NULL ) 1533 `g_io_chªÃl_uÄef ( obex -> io ); 1535 ià( obex -> io_sourû > 0) 1536 `g_sourû_»move ( obex -> io_sourû ); 1538 ià( obex -> wr™e_sourû > 0) 1539 `g_sourû_»move ( obex -> wr™e_sourû ); 1541 `g_ä“ ( obex -> rx_buf ); 1542 `g_ä“ ( obex -> tx_buf ); 1543 `g_ä“ ( obex -> ¤m ); 1545 ià( obex -> ³ndšg_»q ) 1546 `³ndšg_pkt_ä“ ( obex -> ³ndšg_»q ); 1548 ià( obex -> authch® ) 1549 `g_obex_­·¿m_ä“ ( obex -> authch® ); 1551 `g_ä“ ( obex ); 1552 } } 1556 gušt $g_obex_cÚÃù ( GObex * obex , GObexRe¥Ú£Func func , gpoš‹r u£r_d©a , 1557 GE¼Ü ** ”r , gušt8 fœ¡_hdr_id , ...) 1559 GObexPack‘ * »q ; 1560  cÚÃù_d©a d©a ; 1561 va_li¡ ¬gs ; 1563 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , ""); 1565 `va_¡¬t ( ¬gs , fœ¡_hdr_id ); 1566 »q = `g_obex_·ck‘_Ãw_v®i¡ ( G_OBEX_OP_CONNECT , TRUE , 1567 fœ¡_hdr_id , ¬gs ); 1568 `va_’d ( ¬gs ); 1570 `š™_cÚÃù_d©a ( obex , & d©a ); 1571 `g_obex_·ck‘_£t_d©a ( »q , & d©a , (d©a), G_OBEX_DATA_COPY ); 1573  `g_obex_£nd_»q ( obex , »q , -1, func , u£r_d©a , ”r ); 1574 } } 1576 gušt $g_obex_discÚÃù ( GObex * obex , GObexRe¥Ú£Func func , gpoš‹r u£r_d©a , 1577 GE¼Ü ** ”r ) 1579 GObexPack‘ * »q ; 1581 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , ""); 1583 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_DISCONNECT , TRUE , G_OBEX_HDR_INVALID ); 1585  `g_obex_£nd_»q ( obex , »q , -1, func , u£r_d©a , ”r ); 1586 } } 1588 gušt $g_obex_£©h ( GObex * obex , cÚ¡ * ·th , GObexRe¥Ú£Func func , 1589 gpoš‹r u£r_d©a , GE¼Ü ** ”r ) 1591 GObexPack‘ * »q ; 1592  £©h_d©a d©a ; 1593 cÚ¡ * fÞd” ; 1595 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "cÚÀ%u", obex -> cÚn_id ); 1597 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_SETPATH , TRUE , G_OBEX_HDR_INVALID ); 1599 `mem£t (& d©a , 0, (data)); 1601 ià( ·th !ð NULL && `¡ºcmp ("..",…ath, 2) == 0) { 1602 d©a . æags = 0x03; 1603 fÞd” = ( ·th [2] =ð'/'è? &·th[3] : NULL ; 1605 d©a . æags = 0x02; 1606 fÞd” = ·th ; 1609 ià( fÞd” !ð NULL ) { 1610 GObexH—d” * hdr ; 1611 hdr = `g_obex_h—d”_Ãw_unicode ( G_OBEX_HDR_NAME , fÞd” ); 1612 `g_obex_·ck‘_add_h—d” ( »q , hdr ); 1615 `g_obex_·ck‘_£t_d©a ( »q , & d©a , (d©a), G_OBEX_DATA_COPY ); 1617  `g_obex_£nd_»q ( obex , »q , -1, func , u£r_d©a , ”r ); 1618 } } 1620 gušt $g_obex_mkdœ ( GObex * obex , cÚ¡ * ·th , GObexRe¥Ú£Func func , 1621 gpoš‹r u£r_d©a , GE¼Ü ** ”r ) 1623 GObexPack‘ * »q ; 1624  £©h_d©a d©a ; 1626 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "cÚÀ%u", obex -> cÚn_id ); 1628 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_SETPATH , TRUE , G_OBEX_HDR_NAME , ·th , 1629 G_OBEX_HDR_INVALID ); 1631 `mem£t (& d©a , 0, (data)); 1632 `g_obex_·ck‘_£t_d©a ( »q , & d©a , (d©a), G_OBEX_DATA_COPY ); 1634  `g_obex_£nd_»q ( obex , »q , -1, func , u£r_d©a , ”r ); 1635 } } 1637 gušt $g_obex_d–‘e ( GObex * obex , cÚ¡ * Çme , GObexRe¥Ú£Func func , 1638 gpoš‹r u£r_d©a , GE¼Ü ** ”r ) 1640 GObexPack‘ * »q ; 1642 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "cÚÀ%u", obex -> cÚn_id ); 1644 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_PUT , TRUE , G_OBEX_HDR_NAME , Çme , 1645 G_OBEX_HDR_INVALID ); 1647  `g_obex_£nd_»q ( obex , »q , -1, func , u£r_d©a , ”r ); 1648 } } 1650 gušt $g_obex_cÝy ( GObex * obex , cÚ¡ * Çme , cÚ¡ * de¡ , 1651 GObexRe¥Ú£Func func , gpoš‹r u£r_d©a , 1652 GE¼Ü ** ”r ) 1654 GObexPack‘ * »q ; 1656 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "cÚÀ%u", obex -> cÚn_id ); 1658 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_ACTION , TRUE , 1659 G_OBEX_HDR_ACTION , G_OBEX_ACTION_COPY , 1660 G_OBEX_HDR_NAME , Çme , 1661 G_OBEX_HDR_DESTNAME , de¡ , 1662 G_OBEX_HDR_INVALID ); 1664  `g_obex_£nd_»q ( obex , »q , -1, func , u£r_d©a , ”r ); 1665 } } 1667 gušt $g_obex_move ( GObex * obex , cÚ¡ * Çme , cÚ¡ * de¡ , 1668 GObexRe¥Ú£Func func , gpoš‹r u£r_d©a , 1669 GE¼Ü ** ”r ) 1671 GObexPack‘ * »q ; 1673 `g_obex_debug ( G_OBEX_DEBUG_COMMAND , "cÚÀ%u", obex -> cÚn_id ); 1675 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_ACTION , TRUE , 1676 G_OBEX_HDR_ACTION , G_OBEX_ACTION_MOVE , 1677 G_OBEX_HDR_NAME , Çme , 1678 G_OBEX_HDR_DESTNAME , de¡ , 1679 G_OBEX_HDR_INVALID ); 1681  `g_obex_£nd_»q ( obex , »q , -1, func , u£r_d©a , ”r ); 1682 } } 1684 gušt $g_obex_abÜt ( GObex * obex , GObexRe¥Ú£Func func , gpoš‹r u£r_d©a , 1685 GE¼Ü ** ”r ) 1687 GObexPack‘ * »q ; 1689 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_ABORT , TRUE , G_OBEX_HDR_INVALID ); 1691  `g_obex_£nd_»q ( obex , »q , -1, func , u£r_d©a , ”r ); 1692 } } 1694 gušt8 $g_obex_”ºo_to_r¥ ( ”r ) 1696  ”r ) { 1698  G_OBEX_RSP_SUCCESS ; 1699 - EPERM : 1700 - EACCES : 1701  G_OBEX_RSP_FORBIDDEN ; 1702 - ENOENT : 1703  G_OBEX_RSP_NOT_FOUND ; 1704 - EINVAL : 1705 - EBADR : 1706  G_OBEX_RSP_BAD_REQUEST ; 1707 - EFAULT : 1708  G_OBEX_RSP_SERVICE_UNAVAILABLE ; 1709 - ENOSYS : 1710  G_OBEX_RSP_NOT_IMPLEMENTED ; 1711 - ENOTEMPTY : 1712 - EEXIST : 1713  G_OBEX_RSP_PRECONDITION_FAILED ; 1715  G_OBEX_RSP_INTERNAL_SERVER_ERROR ; 1717 } } @gobex/gobex.h 23 #iâdeà __GOBEX_H 24  #__GOBEX_H ) 26  ~<¡d¬g.h > 27  ~ 29  ~ 30  ~ 33 mG_OBEX_TRANSPORT_STREAM , 34 mG_OBEX_TRANSPORT_PACKET , 35 } tGObexT¿n¥ÜtTy³ ; 37  _GObex tGObex ; 39 (* tGObexFunc è( tGObex * tobex , tGE¼Ü * t”r , tgpoš‹r tu£r_d©a ); 40 (* tGObexReque¡Func è( tGObex * tobex , tGObexPack‘ * t»q , 41 tgpoš‹r tu£r_d©a ); 42 (* tGObexRe¥Ú£Func è( tGObex * tobex , tGE¼Ü * t”r , tGObexPack‘ * tr¥ , 43 tgpoš‹r tu£r_d©a ); 45 gboÞ—n `g_obex_£nd ( GObex * obex , GObexPack‘ * pkt , GE¼Ü ** ”r ); 47 gušt `g_obex_£nd_»q ( GObex * obex , GObexPack‘ * »q ,  timeout , 48 GObexRe¥Ú£Func func , gpoš‹r u£r_d©a , 49 GE¼Ü ** ”r ); 50 gboÞ—n `g_obex_ÿnûl_»q ( GObex * obex , gušt »q_id , 51 gboÞ—n »move_ÿÎback ); 53 gboÞ—n `g_obex_£nd_r¥ ( GObex * obex , gušt8 r¥code , GE¼Ü ** ”r , 54 gušt8 fœ¡_hdr_ty³ , ...); 56  `g_obex_£t_discÚÃù_funùiÚ ( GObex * obex , GObexFunc func , 57 gpoš‹r u£r_d©a ); 58 gušt `g_obex_add_»que¡_funùiÚ ( GObex * obex , gušt8 Ýcode , 59 GObexReque¡Func func , 60 gpoš‹r u£r_d©a ); 61 gboÞ—n `g_obex_»move_»que¡_funùiÚ ( GObex * obex , gušt id ); 63  `g_obex_su¥’d ( GObex * obex ); 64  `g_obex_»sume ( GObex * obex ); 65 gboÞ—n `g_obex_¤m_aùive ( GObex * obex ); 67 GObex * `g_obex_Ãw ( GIOChªÃl * io , GObexT¿n¥ÜtTy³ Œª¥Üt_ty³ , 68 gssize rx_mtu , gssiz tx_mtu ); 70 GObex * `g_obex_»f (GObex * obex ); 71  `g_obex_uÄef ( GObex * obex ); 75 gušt `g_obex_cÚÃù ( GObex * obex , GObexRe¥Ú£Func func , gpoš‹r u£r_d©a , 76 GE¼Ü ** ”r , gušt8 fœ¡_hdr_id , ...); 78 gušt `g_obex_discÚÃù ( GObex * obex , GObexRe¥Ú£Func func , gpoš‹r u£r_d©a , 79 GE¼Ü ** ”r ); 81 gušt `g_obex_£©h ( GObex * obex , cÚ¡ * ·th , GObexRe¥Ú£Func func , 82 gpoš‹r u£r_d©a , GE¼Ü ** ”r ); 84 gušt `g_obex_mkdœ ( GObex * obex , cÚ¡ * ·th , GObexRe¥Ú£Func func , 85 gpoš‹r u£r_d©a , GE¼Ü ** ”r ); 87 gušt `g_obex_d–‘e ( GObex * obex , cÚ¡ * Çme , GObexRe¥Ú£Func func , 88 gpoš‹r u£r_d©a , GE¼Ü ** ”r ); 90 gušt `g_obex_cÝy ( GObex * obex , cÚ¡ * Çme , cÚ¡ * de¡ , 91 GObexRe¥Ú£Func func , gpoš‹r u£r_d©a , 92 GE¼Ü ** ”r ); 94 gušt `g_obex_move ( GObex * obex , cÚ¡ * Çme , cÚ¡ * de¡ , 95 GObexRe¥Ú£Func func , gpoš‹r u£r_d©a , 96 GE¼Ü ** ”r ); 98 gušt `g_obex_abÜt ( GObex * obex , GObexRe¥Ú£Func func , gpoš‹r u£r_d©a , 99 GE¼Ü ** ”r ); 103 gušt `g_obex_put_»q ( GObex * obex , GObexD©aProduûr d©a_func , 104 GObexFunc com¶‘e_func , gpoš‹r u£r_d©a , 105 GE¼Ü ** ”r , gušt8 fœ¡_hdr_id , ...); 107 gušt `g_obex_put_»q_pkt ( GObex * obex , GObexPack‘ * »q , 108 GObexD©aProduûr d©a_func , GObexFunc com¶‘e_func , 109 gpoš‹r u£r_d©a , GE¼Ü ** ”r ); 111 gušt `g_obex_g‘_»q ( GObex * obex , GObexD©aCÚsum” d©a_func , 112 GObexFunc com¶‘e_func , gpoš‹r u£r_d©a , 113 GE¼Ü ** ”r , gušt8 fœ¡_hdr_id , ...); 115 gušt `g_obex_g‘_»q_pkt ( GObex * obex , GObexPack‘ * »q , 116 GObexD©aCÚsum” d©a_func , GObexFunc com¶‘e_func , 117 gpoš‹r u£r_d©a , GE¼Ü ** ”r ); 119 gušt `g_obex_put_r¥ ( GObex * obex , GObexPack‘ * »q , 120 GObexD©aCÚsum” d©a_func , GObexFunc com¶‘e_func , 121 gpoš‹r u£r_d©a , GE¼Ü ** ”r , 122 gušt8 fœ¡_hdr_id , ...); 124 gušt `g_obex_g‘_r¥ ( GObex * obex , GObexD©aProduûr d©a_func , 125 GObexFunc com¶‘e_func , gpoš‹r u£r_d©a , 126 GE¼Ü ** ”r , gušt8 fœ¡_hdr_id , ...); 128 gušt `g_obex_g‘_r¥_pkt ( GObex * obex , GObexPack‘ * r¥ , 129 GObexD©aProduûr d©a_func , GObexFunc com¶‘e_func , 130 gpoš‹r u£r_d©a , GE¼Ü ** ”r ); 132 gboÞ—n `g_obex_ÿnûl_Œªsãr ( gušt id , GObexFunc com¶‘e_func , 133 gpoš‹r u£r_d©a ); 135 cÚ¡ * `g_obex_¡»¼Ü ( gušt8 ”r_code ); 136 gušt8 `g_obex_”ºo_to_r¥ ( ”r ); @lib/a2mp.h 24 #iâdeà __A2MP_H 25  #__A2MP_H ) 27 #ifdeà __ýlu¥lus 35  #A2MP_COMMAND_REJ 0x01 ) 36  #A2MP_DISCOVER_REQ 0x02 ) 37  #A2MP_DISCOVER_RSP 0x03 ) 38  #A2MP_CHANGE_NOTIFY 0x04 ) 39  #A2MP_CHANGE_RSP 0x05 ) 40  #A2MP_INFO_REQ 0x06 ) 41  #A2MP_INFO_RSP 0x07 ) 42  #A2MP_ASSOC_REQ 0x08 ) 43  #A2MP_ASSOC_RSP 0x09 ) 44  #A2MP_CREATE_REQ 0x0a ) 45  #A2MP_CREATE_RSP 0x0b ) 46  #A2MP_DISCONN_REQ 0x0c ) 47  #A2MP_DISCONN_RSP 0x0d ) 49  sa2mp_hdr { 50 ušt8_t code ; 51 ušt8_t id’t ; 52 ušt16_t Ën ; 53 } __©Œibu‹__ (( ·cked )); 54  #A2MP_HDR_SIZE 4 ) 56  sa2mp_commªd_»j { 57 ušt16_t »asÚ ; 58 } __©Œibu‹__ (( ·cked )); 60  sa2mp_discov”_»q { 61 ušt16_t mtu ; 62 ušt16_t mask ; 63 } __©Œibu‹__ (( ·cked )); 65  sa2mp_ù¾ { 66 ušt8_t id ; 67 ušt8_t ty³ ; 68 ušt8_t ¡©us ; 69 } __©Œibu‹__ (( ·cked )); 71  sa2mp_discov”_r¥ { 72 ušt16_t mtu ; 73 ušt16_t mask ; 74  a2mp_ù¾ ù¾_li¡ [0]; 75 } __©Œibu‹__ (( ·cked )); 77  sa2mp_šfo_»q { 78 ušt8_t id ; 79 } __©Œibu‹__ (( ·cked )); 81  sa2mp_šfo_r¥ { 82 ušt8_t id ; 83 ušt8_t ¡©us ; 84 ušt32_t tÙ®_bw ; 85 ušt32_t max_bw ; 86 ušt32_t mš_Ï‹ncy ; 87 ušt16_t ·l_ÿps ; 88 ušt16_t assoc_size ; 89 } __©Œibu‹__ (( ·cked )); 91  sa2mp_assoc_»q { 92 ušt8_t id ; 93 } __©Œibu‹__ (( ·cked )); 95  sa2mp_assoc_r¥ { 96 ušt8_t id ; 97 ušt8_t ¡©us ; 98 ušt8_t assoc_d©a [0]; 99 } __©Œibu‹__ (( ·cked )); 101  sa2mp_ü—‹_»q { 102 ušt8_t loÿl_id ; 103 ušt8_t »mÙe_id ; 104 ušt8_t assoc_d©a [0]; 105 } __©Œibu‹__ (( ·cked )); 107  sa2mp_ü—‹_r¥ { 108 ušt8_t loÿl_id ; 109 ušt8_t »mÙe_id ; 110 ušt8_t ¡©us ; 111 } __©Œibu‹__ (( ·cked )); 113  sa2mp_discÚn_»q { 114 ušt8_t loÿl_id ; 115 ušt8_t »mÙe_id ; 116 } __©Œibu‹__ (( ·cked )); 118  sa2mp_discÚn_r¥ { 119 ušt8_t loÿl_id ; 120 ušt8_t »mÙe_id ; 121 ušt8_t ¡©us ; 122 } __©Œibu‹__ (( ·cked )); 124  #A2MP_COMMAND_NOT_RECOGNIZED 0x0000 ) 127  #AMP_CTRL_POWERED_DOWN 0x00 ) 128  #AMP_CTRL_BLUETOOTH_ONLY 0x01 ) 129  #AMP_CTRL_NO_CAPACITY 0x02 ) 130  #AMP_CTRL_LOW_CAPACITY 0x03 ) 131  #AMP_CTRL_MEDIUM_CAPACITY 0x04 ) 132  #AMP_CTRL_HIGH_CAPACITY 0x05 ) 133  #AMP_CTRL_FULL_CAPACITY 0x06 ) 136  #A2MP_STATUS_SUCCESS 0x00 ) 137  #A2MP_STATUS_INVALID_CTRL_ID 0x01 ) 138  #A2MP_STATUS_UNABLE_START_LINK_CREATION 0x02 ) 139  #A2MP_STATUS_NO_PHYSICAL_LINK_EXISTS 0x02 ) 140  #A2MP_STATUS_COLLISION_OCCURED 0x03 ) 141  #A2MP_STATUS_DISCONN_REQ_RECVD 0x04 ) 142  #A2MP_STATUS_PHYS_LINK_EXISTS 0x05 ) 143  #A2MP_STATUS_SECURITY_VIOLATION 0x06 ) 145 #ifdeà __ýlu¥lus @lib/amp.h 19 #iâdeà __AMP_H 20  #__AMP_H ) 22 #ifdeà __ýlu¥lus 26  #AMP_MGR_CID 0x03 ) 29  #AMP_COMMAND_REJ 0x01 ) 30  #AMP_DISCOVER_REQ 0x02 ) 31  #AMP_DISCOVER_RSP 0x03 ) 32  #AMP_CHANGE_NOTIFY 0x04 ) 33  #AMP_CHANGE_RSP 0x05 ) 34  #AMP_INFO_REQ 0x06 ) 35  #AMP_INFO_RSP 0x07 ) 36  #AMP_ASSOC_REQ 0x08 ) 37  #AMP_ASSOC_RSP 0x09 ) 38  #AMP_LINK_REQ 0x0a ) 39  #AMP_LINK_RSP 0x0b ) 40  #AMP_DISCONN_REQ 0x0c ) 41  #AMP_DISCONN_RSP 0x0d ) 44 ušt8_t code ; 45 ušt8_t id’t ; 46 ušt16_t Ën ; 47 } t__©Œibu‹__ (( t·cked )è tamp_mgr_hdr ; 48  #AMP_MGR_HDR_SIZE 4 ) 52 ušt8_t ty³_id ; 53 ušt16_t Ën ; 54 ušt8_t d©a [0]; 55 } t__©Œibu‹__ (( t·cked )è tamp_assoc_Žv ; 58 ušt16_t »asÚ ; 59 } t__©Œibu‹__ (( t·cked )è tamp_cmd_»j_·rms ; 62 ušt16_t mtu ; 63 ušt16_t mask ; 64 } t__©Œibu‹__ (( t·cked )è tamp_discov”_»q_·rms ; 67 ušt16_t mtu ; 68 ušt16_t mask ; 69 ušt8_t cÚŒÞËr_li¡ [0]; 70 } t__©Œibu‹__ (( t·cked )è tamp_discov”_r¥_·rms ; 73 ušt8_t id ; 74 } t__©Œibu‹__ (( t·cked )è tamp_šfo_»q_·rms ; 77 ušt8_t id ; 78 ušt8_t ¡©us ; 79 ušt32_t tÙ®_bªdwidth ; 80 ušt32_t max_bªdwidth ; 81 ušt32_t mš_Ï‹ncy ; 82 ušt16_t ·l_ÿps ; 83 ušt16_t assoc_size ; 84 } t__©Œibu‹__ (( t·cked )è tamp_šfo_r¥_·rms ; 87 ušt8_t id ; 88 ušt8_t ¡©us ; 89 amp_assoc_Žv assoc ; 90 } t__©Œibu‹__ (( t·cked )è tamp_assoc_r¥_·rms ; 93 ušt8_t loÿl_id ; 94 ušt8_t »mÙe_id ; 95 amp_assoc_Žv assoc ; 96 } t__©Œibu‹__ (( t·cked )è tamp_lšk_»q_·rms ; 99 ušt8_t loÿl_id ; 100 ušt8_t »mÙe_id ; 101 ušt8_t ¡©us ; 102 } t__©Œibu‹__ (( t·cked )è tamp_lšk_r¥_·rms ; 105 ušt8_t loÿl_id ; 106 ušt8_t »mÙe_id ; 107 } t__©Œibu‹__ (( t·cked )è tamp_discÚn_»q_·rms ; 109  #A2MP_MAC_ADDR_TYPE 1 ) 110  #A2MP_PREF_CHANLIST_TYPE 2 ) 111  #A2MP_CONNECTED_CHAN 3 ) 112  #A2MP_PAL_CAP_TYPE 4 ) 113  #A2MP_PAL_VER_INFO 5 ) 115  samp_Žv { 116 ušt8_t ty³ ; 117 ušt16_t Ën ; 118 ušt8_t v® [0]; 119 } __©Œibu‹__ (( ·cked )); 121  samp_·l_v” { 122 ušt8_t v” ; 123 ušt16_t com·ny_id ; 124 ušt16_t sub_v” ; 125 } __©Œibu‹__ (( ·cked )); 127  samp_couÁry_ŒËt { 130 ušt8_t fœ¡_chªÃl ; 131 ušt8_t num_chªÃls ; 132 št8_t max_pow” ; 133 } __©Œibu‹__ (( ·cked )è chªs ; 135 ušt8_t »g_ex‹nsiÚ_id ; 136 ušt8_t »g_þass ; 137 ušt8_t cov”age_þass ; 138 } __©Œibu‹__ (( ·cked )è ext ; 140 } __©Œibu‹__ (( ·cked )); 142  samp_chª_li¡ { 143 ušt8_t couÁry_code [3]; 144  amp_couÁry_ŒËt ŒËts [0]; 145 } __©Œibu‹__ (( ·cked )); 147  #AMP_COMMAND_NOT_RECOGNIZED 0x0000 ) 150  #AMP_CT_POWERED_DOWN 0x00 ) 151  #AMP_CT_BLUETOOTH_ONLY 0x01 ) 152  #AMP_CT_NO_CAPACITY 0x02 ) 153  #AMP_CT_LOW_CAPACITY 0x03 ) 154  #AMP_CT_MEDIUM_CAPACITY 0x04 ) 155  #AMP_CT_HIGH_CAPACITY 0x05 ) 156  #AMP_CT_FULL_CAPACITY 0x06 ) 159  #AMP_STATUS_SUCCESS 0x00 ) 160  #AMP_STATUS_INVALID_CTRL_ID 0x01 ) 161  #AMP_STATUS_UNABLE_START_LINK_CREATION 0x02 ) 162  #AMP_STATUS_NO_PHYSICAL_LINK_EXISTS 0x02 ) 163  #AMP_STATUS_COLLISION_OCCURED 0x03 ) 164  #AMP_STATUS_DISCONN_REQ_RECVD 0x04 ) 165  #AMP_STATUS_PHYS_LINK_EXISTS 0x05 ) 166  #AMP_STATUS_SECURITY_VIOLATION 0x06 ) 168 #ifdeà __ýlu¥lus @lib/bluetooth.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡dio.h > 31  ~<”ºo.h > 32  ~<ùy³.h > 33  ~<¡d¬g.h > 34  ~<¡dlib.h > 35  ~<¡ršg.h > 36  ~ 38  ~"blu‘oÙh.h " 39  ~"hci.h " 41  $basw­ ( bdaddr_t * d¡ , cÚ¡ bdaddr_ˆ* ¤c ) 43 * d = (*è d¡ ; 44 cÚ¡ * s = (cÚ¡ *è ¤c ; 45  i ; 47  i = 0; i < 6; i++) 48 d [ i ] = s [5-i]; 49 } } 51 * $b©o¡r (cÚ¡ bdaddr_t * ba ) 53 * ¡r = `bt_m®loc (18); 54 ià(! ¡r ) 55  NULL ; 57 `¥rštf ( ¡r , "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", 58 ba -> b [0], ba->b[1], ba->b[2], 59 ba -> b [3], ba->b[4], ba->b[5]); 61  ¡r ; 62 } } 64 bdaddr_t * $¡¹oba (cÚ¡ * ¡r ) 66 bdaddr_t b ; 67 bdaddr_t * ba = `bt_m®loc ((*ba)); 69 ià( ba ) { 70 `¡r2ba ( ¡r , & b ); 71 `basw­ ( ba , & b ); 74  ba ; 75 } } 77  $ba2¡r (cÚ¡ bdaddr_t * ba , * ¡r ) 79  `¥rštf ( ¡r , "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", 80 ba -> b [5], ba->b[4], ba->b[3], ba->b[2], ba->b[1], ba->b[0]); 81 } } 83  $¡r2ba (cÚ¡ * ¡r , bdaddr_t * ba ) 85  i ; 87 ià( `bachk ( ¡r ) < 0) { 88 `mem£t ( ba , 0, (*ba)); 92  i = 5; i >ð0; i--, ¡r += 3) 93 ba -> b [ i ] = `¡¹Þ ( ¡r , NULL , 16); 96 } } 98  $ba2oui (cÚ¡ bdaddr_t * ba , * ¡r ) 100  `¥rštf ( ¡r , "%2.2X-%2.2X-%2.2X", ba -> b [5], ba->b[4], ba->b[3]); 101 } } 103  $bachk (cÚ¡ * ¡r ) 105 ià(! ¡r ) 108 ià( `¡¾’ ( ¡r ) != 17) 111 * ¡r ) { 112 ià(! `isxdig™ (* ¡r ++)) 115 ià(! `isxdig™ (* ¡r ++)) 118 ià(* ¡r == 0) 121 ià(* ¡r ++ != ':') 126 } } 128  $b­rštf (cÚ¡ * fÜm© , ...) 130 va_li¡ ­ ; 131  Ën ; 133 `va_¡¬t ( ­ , fÜm© ); 134 Ën = `v´štf ( fÜm© , ­ ); 135 `va_’d ( ­ ); 137  Ën ; 138 } } 140  $baårštf ( FILE * ¡»am , cÚ¡ * fÜm© , ...) 142 va_li¡ ­ ; 143  Ën ; 145 `va_¡¬t ( ­ , fÜm© ); 146 Ën = `vårštf ( ¡»am , fÜm© , ­ ); 147 `va_’d ( ­ ); 149  Ën ; 150 } } 152  $ba¥rštf (* ¡r , cÚ¡ * fÜm© , ...) 154 va_li¡ ­ ; 155  Ën ; 157 `va_¡¬t ( ­ , fÜm© ); 158 Ën = `v¢´štf ( ¡r , (~0Uè>> 1, fÜm© , ­ ); 159 `va_’d ( ­ ); 161  Ën ; 162 } } 164  $ba¢´štf (* ¡r , size_t size , cÚ¡ * fÜm© , ...) 166 va_li¡ ­ ; 167  Ën ; 169 `va_¡¬t ( ­ , fÜm© ); 170 Ën = `v¢´štf ( ¡r , size , fÜm© , ­ ); 171 `va_’d ( ­ ); 173  Ën ; 174 } } 176 * $bt_m®loc ( size_t size ) 178  `m®loc ( size ); 179 } } 181  $bt_ä“ (* ±r ) 183 `ä“ ( ±r ); 184 } } 187  $bt_”rÜ ( ušt16_t code ) 189  code ) { 192  HCI_UNKNOWN_COMMAND : 193  EBADRQC ; 194  HCI_NO_CONNECTION : 195  ENOTCONN ; 196  HCI_HARDWARE_FAILURE : 197  EIO ; 198  HCI_PAGE_TIMEOUT : 199  EHOSTDOWN ; 200  HCI_AUTHENTICATION_FAILURE : 201  EACCES ; 202  HCI_PIN_OR_KEY_MISSING : 203  EINVAL ; 204  HCI_MEMORY_FULL : 205  ENOMEM ; 206  HCI_CONNECTION_TIMEOUT : 207  ETIMEDOUT ; 208  HCI_MAX_NUMBER_OF_CONNECTIONS : 209  HCI_MAX_NUMBER_OF_SCO_CONNECTIONS : 210  EMLINK ; 211  HCI_ACL_CONNECTION_EXISTS : 212  EALREADY ; 213  HCI_COMMAND_DISALLOWED : 214  HCI_TRANSACTION_COLLISION : 215  HCI_ROLE_SWITCH_PENDING : 216  EBUSY ; 217  HCI_REJECTED_LIMITED_RESOURCES : 218  HCI_REJECTED_PERSONAL : 219  HCI_QOS_REJECTED : 220  ECONNREFUSED ; 221  HCI_HOST_TIMEOUT : 222  ETIMEDOUT ; 223  HCI_UNSUPPORTED_FEATURE : 224  HCI_QOS_NOT_SUPPORTED : 225  HCI_PAIRING_NOT_SUPPORTED : 226  HCI_CLASSIFICATION_NOT_SUPPORTED : 227  HCI_UNSUPPORTED_LMP_PARAMETER_VALUE : 228  HCI_PARAMETER_OUT_OF_RANGE : 229  HCI_QOS_UNACCEPTABLE_PARAMETER : 230  EOPNOTSUPP ; 231  HCI_INVALID_PARAMETERS : 232  HCI_SLOT_VIOLATION : 233  EINVAL ; 234  HCI_OE_USER_ENDED_CONNECTION : 235  HCI_OE_LOW_RESOURCES : 236  HCI_OE_POWER_OFF : 237  ECONNRESET ; 238  HCI_CONNECTION_TERMINATED : 239  ECONNABORTED ; 240  HCI_REPEATED_ATTEMPTS : 241  ELOOP ; 242  HCI_REJECTED_SECURITY : 243  HCI_PAIRING_NOT_ALLOWED : 244  HCI_INSUFFICIENT_SECURITY : 245  EACCES ; 246  HCI_UNSUPPORTED_REMOTE_FEATURE : 247  EPROTONOSUPPORT ; 248  HCI_SCO_OFFSET_REJECTED : 249  ECONNREFUSED ; 250  HCI_UNKNOWN_LMP_PDU : 251  HCI_INVALID_LMP_PARAMETERS : 252  HCI_LMP_ERROR_TRANSACTION_COLLISION : 253  HCI_LMP_PDU_NOT_ALLOWED : 254  HCI_ENCRYPTION_MODE_NOT_ACCEPTED : 255  EPROTO ; 257  ENOSYS ; 259 } } 261 cÚ¡ * $bt_compidto¡r ( compid ) 263  compid ) { 1149 } } @lib/bluetooth.h 26 #iâdeà __BLUETOOTH_H 27  #__BLUETOOTH_H ) 29 #ifdeà __ýlu¥lus 33  ~<¡dio.h > 34  ~<¡dšt.h > 35  ~<¡ršg.h > 36  ~<’dŸn.h > 37  ~ 38  ~<Ãtš‘/š.h > 40 #iâdeà AF_BLUETOOTH 41  #AF_BLUETOOTH 31 ) 42  #PF_BLUETOOTH AF_BLUETOOTH ) 45  #BTPROTO_L2CAP 0 ) 46  #BTPROTO_HCI 1 ) 47  #BTPROTO_SCO 2 ) 48  #BTPROTO_RFCOMM 3 ) 49  #BTPROTO_BNEP 4 ) 50  #BTPROTO_CMTP 5 ) 51  #BTPROTO_HIDP 6 ) 52  #BTPROTO_AVDTP 7 ) 54  #SOL_HCI 0 ) 55  #SOL_L2CAP 6 ) 56  #SOL_SCO 17 ) 57  #SOL_RFCOMM 18 ) 59 #iâdeà SOL_BLUETOOTH 60  #SOL_BLUETOOTH 274 ) 63  #BT_SECURITY 4 ) 64  sbt_£cur™y { 65 ušt8_t Ëv– ; 66 ušt8_t key_size ; 68  #BT_SECURITY_SDP 0 ) 69  #BT_SECURITY_LOW 1 ) 70  #BT_SECURITY_MEDIUM 2 ) 71  #BT_SECURITY_HIGH 3 ) 73  #BT_DEFER_SETUP 7 ) 75  #BT_FLUSHABLE 8 ) 77  #BT_FLUSHABLE_OFF 0 ) 78  #BT_FLUSHABLE_ON 1 ) 80  #BT_POWER 9 ) 81  sbt_pow” { 82 ušt8_t fÜû_aùive ; 84  #BT_POWER_FORCE_ACTIVE_OFF 0 ) 85  #BT_POWER_FORCE_ACTIVE_ON 1 ) 87  #BT_CHANNEL_POLICY 10 ) 94  #BT_CHANNEL_POLICY_BREDR_ONLY 0 ) 101  #BT_CHANNEL_POLICY_BREDR_PREFERRED 1 ) 112  #BT_CHANNEL_POLICY_AMP_PREFERRED 2 ) 114  #BT_VOICE 11 ) 115  sbt_voiû { 116 ušt16_t £‰šg ; 119  #BT_SNDMTU 12 ) 120  #BT_RCVMTU 13 ) 122  #BT_VOICE_TRANSPARENT 0x0003 ) 123  #BT_VOICE_CVSD_16BIT 0x0060 ) 127 BT_CONNECTED = 1, 128 BT_OPEN , 129 BT_BOUND , 130 BT_LISTEN , 131 BT_CONNECT , 132 BT_CONNECT2 , 133 BT_CONFIG , 134 BT_DISCONN , 135 BT_CLOSED 139 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 140  #htobs ( d è(d) ) 141  #htobl ( d è(d) ) 142  #htobÎ ( d è(d) ) 143  #btohs ( d è(d) ) 144  #btohl ( d è(d) ) 145  #btohÎ ( d è(d) ) 146 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 147  #htobs ( d è `bsw­_16 (d) ) 148  #htobl ( d è `bsw­_32 (d) ) 149  #htobÎ ( d è `bsw­_64 (d) ) 150  #btohs ( d è `bsw­_16 (d) ) 151  #btohl ( d è `bsw­_32 (d) ) 152  #btohÎ ( d è `bsw­_64 (d) ) 158  #bt_g‘_uÇligÃd ( ±r ) \ 159 `__ex‹nsiÚ__ ({ \ 160  `__©Œibu‹__ (( ·cked )) { \ 161 `__ty³of__ (*( ±r )è __v ; \ 162 } * __p = ( `__ty³of__ (__p)è( ±r ); \ 163 __p -> __v ; \ 164 }) ) 166  #bt_put_uÇligÃd ( v® , ±r ) \ 168  `__©Œibu‹__ (( ·cked )) { \ 169 `__ty³of__ (*( ±r )è __v ; \ 170 } * __p = ( `__ty³of__ (__p)è( ±r ); \ 171 __p -> __v = ( v® ); \ 172 } 0) ) 174 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 175  šlše ušt64_t bt_g‘_Ë64 (cÚ¡ * ±r ) 177  bt_g‘_uÇligÃd ((cÚ¡ ušt64_t *è ±r ); 180  šlše ušt64_t bt_g‘_be64 (cÚ¡ * ±r ) 182  bsw­_64 ( bt_g‘_uÇligÃd ((cÚ¡ ušt64_t *è ±r )); 185  šlše ušt32_t bt_g‘_Ë32 (cÚ¡ * ±r ) 187  bt_g‘_uÇligÃd ((cÚ¡ ušt32_t *è ±r ); 190  šlše ušt32_t bt_g‘_be32 (cÚ¡ * ±r ) 192  bsw­_32 ( bt_g‘_uÇligÃd ((cÚ¡ ušt32_t *è ±r )); 195  šlše ušt16_t bt_g‘_Ë16 (cÚ¡ * ±r ) 197  bt_g‘_uÇligÃd ((cÚ¡ ušt16_t *è ±r ); 200  šlše ušt16_t bt_g‘_be16 (cÚ¡ * ±r ) 202  bsw­_16 ( bt_g‘_uÇligÃd ((cÚ¡ ušt16_t *è ±r )); 205  šlše  bt_put_Ë64 ( ušt64_t v® , cÚ¡ * ±r ) 207 bt_put_uÇligÃd ( v® , ( ušt64_t *è ±r ); 210  šlše  bt_put_be64 ( ušt64_t v® , cÚ¡ * ±r ) 212 bt_put_uÇligÃd ( bsw­_64 ( v® ), ( ušt64_t *è ±r ); 215  šlše  bt_put_Ë32 ( ušt32_t v® , cÚ¡ * ±r ) 217 bt_put_uÇligÃd ( v® , ( ušt32_t *è ±r ); 220  šlše  bt_put_be32 ( ušt32_t v® , cÚ¡ * ±r ) 222 bt_put_uÇligÃd ( bsw­_32 ( v® ), ( ušt32_t *è ±r ); 225  šlše  bt_put_Ë16 ( ušt16_t v® , cÚ¡ * ±r ) 227 bt_put_uÇligÃd ( v® , ( ušt16_t *è ±r ); 230  šlše  bt_put_be16 ( ušt16_t v® , cÚ¡ * ±r ) 232 bt_put_uÇligÃd ( bsw­_16 ( v® ), ( ušt16_t *è ±r ); 235 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 236  šlše ušt64_t bt_g‘_Ë64 (cÚ¡ * ±r ) 238  bsw­_64 ( bt_g‘_uÇligÃd ((cÚ¡ ušt64_t *è ±r )); 241  šlše ušt64_t bt_g‘_be64 (cÚ¡ * ±r ) 243  bt_g‘_uÇligÃd ((cÚ¡ ušt64_t *è ±r ); 246  šlše ušt32_t bt_g‘_Ë32 (cÚ¡ * ±r ) 248  bsw­_32 ( bt_g‘_uÇligÃd ((cÚ¡ ušt32_t *è ±r )); 251  šlše ušt32_t bt_g‘_be32 (cÚ¡ * ±r ) 253  bt_g‘_uÇligÃd ((cÚ¡ ušt32_t *è ±r ); 256  šlše ušt16_t bt_g‘_Ë16 (cÚ¡ * ±r ) 258  bsw­_16 ( bt_g‘_uÇligÃd ((cÚ¡ ušt16_t *è ±r )); 261  šlše ušt16_t bt_g‘_be16 (cÚ¡ * ±r ) 263  bt_g‘_uÇligÃd ((cÚ¡ ušt16_t *è ±r ); 266  šlše  bt_put_Ë64 ( ušt64_t v® , cÚ¡ * ±r ) 268 bt_put_uÇligÃd ( bsw­_64 ( v® ), ( ušt64_t *è ±r ); 271  šlše  bt_put_be64 ( ušt64_t v® , cÚ¡ * ±r ) 273 bt_put_uÇligÃd ( v® , ( ušt64_t *è ±r ); 276  šlše  bt_put_Ë32 ( ušt32_t v® , cÚ¡ * ±r ) 278 bt_put_uÇligÃd ( bsw­_32 ( v® ), ( ušt32_t *è ±r ); 281  šlše  bt_put_be32 ( ušt32_t v® , cÚ¡ * ±r ) 283 bt_put_uÇligÃd ( v® , ( ušt32_t *è ±r ); 286  šlše  bt_put_Ë16 ( ušt16_t v® , cÚ¡ * ±r ) 288 bt_put_uÇligÃd ( bsw­_16 ( v® ), ( ušt16_t *è ±r ); 291  šlše  bt_put_be16 ( ušt16_t v® , cÚ¡ * ±r ) 293 bt_put_uÇligÃd ( v® , ( ušt16_t *è ±r ); 301 ušt8_t b [6]; 302 } t__©Œibu‹__ (( t·cked )è tbdaddr_t ; 305  #BDADDR_BREDR 0x00 ) 306  #BDADDR_LE_PUBLIC 0x01 ) 307  #BDADDR_LE_RANDOM 0x02 ) 309  #BDADDR_ANY (&( bdaddr_t è{{0, 0, 0, 0, 0, 0}}) ) 310  #BDADDR_ALL (&( bdaddr_t è{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}) ) 311  #BDADDR_LOCAL (&( bdaddr_t è{{0, 0, 0, 0xff, 0xff, 0xff}}) ) 314  šlše  bacmp (cÚ¡ bdaddr_t * ba1 , cÚ¡ bdaddr_ˆ* ba2 ) 316  memcmp ( ba1 , ba2 , ( bdaddr_t )); 318  šlše  baýy ( bdaddr_t * d¡ , cÚ¡ bdaddr_ˆ* ¤c ) 320 memýy ( d¡ , ¤c , ( bdaddr_t )); 323  basw­ ( bdaddr_t * d¡ , cÚ¡ bdaddr_ˆ* ¤c ); 324 bdaddr_t * ¡¹oba (cÚ¡ * ¡r ); 325 * b©o¡r (cÚ¡ bdaddr_t * ba ); 326  ba2¡r (cÚ¡ bdaddr_t * ba , * ¡r ); 327  ¡r2ba (cÚ¡ * ¡r , bdaddr_t * ba ); 328  ba2oui (cÚ¡ bdaddr_t * ba , * oui ); 329  bachk (cÚ¡ * ¡r ); 331  b­rštf (cÚ¡ * fÜm© , ...); 332  baårštf ( FILE * ¡»am , cÚ¡ * fÜm© , ...); 333  ba¥rštf (* ¡r , cÚ¡ * fÜm© , ...); 334  ba¢´štf (* ¡r , size_t size , cÚ¡ * fÜm© , ...); 336 * bt_m®loc ( size_t size ); 337  bt_ä“ (* ±r ); 339  bt_”rÜ ( ušt16_t code ); 340 cÚ¡ * bt_compidto¡r ( id ); 343 ušt8_t d©a [16]; 344 } tušt128_t ; 346 #ià __BYTE_ORDER =ð __BIG_ENDIAN 348  #Áoh64 ( x è(x) ) 350  šlše  Áoh128 (cÚ¡ ušt128_t * ¤c , ušt128_ˆ* d¡ ) 352 memýy ( d¡ , ¤c , ( ušt128_t )); 355  šlše  btoh128 (cÚ¡ ušt128_t * ¤c , ušt128_ˆ* d¡ ) 357  i ; 359  i = 0; i < 16; i++) 360 d¡ -> d©a [15 - i ] = ¤c ->data[i]; 365  šlše ušt64_t Áoh64 (ušt64_ˆ n ) 367 ušt64_t h ; 368 ušt64_t tmp = Áohl ( n & 0x00000000ffffffff); 370 h = Áohl ( n >> 32); 371 h |ð tmp << 32; 373  h ; 376  šlše  Áoh128 (cÚ¡ ušt128_t * ¤c , ušt128_ˆ* d¡ ) 378  i ; 380  i = 0; i < 16; i++) 381 d¡ -> d©a [15 - i ] = ¤c ->data[i]; 384  šlše  btoh128 (cÚ¡ ušt128_t * ¤c , ušt128_ˆ* d¡ ) 386 memýy ( d¡ , ¤c , ( ušt128_t )); 391  #htÚ64 ( x è `Áoh64 (x) ) 392  #htÚ128 ( x , y è `Áoh128 (x, y) ) 393  #htob128 ( x , y è `btoh128 (x, y) ) 395 #ifdeà __ýlu¥lus @lib/bnep.h 25 #iâdeà __BNEP_H 26  #__BNEP_H ) 28 #ifdeà __ýlu¥lus 32  ~ 34 #iâdeà ETH_ALEN 35  #ETH_ALEN 6 ) 39  #BNEP_BASE_UUID 0x0000000000001000800000805F9B34FB ) 40  #BNEP_UUID16 0x02 ) 41  #BNEP_UUID32 0x04 ) 42  #BNEP_UUID128 0x16 ) 44  #BNEP_SVC_PANU 0x1115 ) 45  #BNEP_SVC_NAP 0x1116 ) 46  #BNEP_SVC_GN 0x1117 ) 49  #BNEP_GENERAL 0x00 ) 50  #BNEP_CONTROL 0x01 ) 51  #BNEP_COMPRESSED 0x02 ) 52  #BNEP_COMPRESSED_SRC_ONLY 0x03 ) 53  #BNEP_COMPRESSED_DST_ONLY 0x04 ) 56  #BNEP_CMD_NOT_UNDERSTOOD 0x00 ) 57  #BNEP_SETUP_CONN_REQ 0x01 ) 58  #BNEP_SETUP_CONN_RSP 0x02 ) 59  #BNEP_FILTER_NET_TYPE_SET 0x03 ) 60  #BNEP_FILTER_NET_TYPE_RSP 0x04 ) 61  #BNEP_FILTER_MULT_ADDR_SET 0x05 ) 62  #BNEP_FILTER_MULT_ADDR_RSP 0x06 ) 65  #BNEP_SUCCESS 0x00 ) 67  #BNEP_CONN_INVALID_DST 0x01 ) 68  #BNEP_CONN_INVALID_SRC 0x02 ) 69  #BNEP_CONN_INVALID_SVC 0x03 ) 70  #BNEP_CONN_NOT_ALLOWED 0x04 ) 72  #BNEP_FILTER_UNSUPPORTED_REQ 0x01 ) 73  #BNEP_FILTER_INVALID_RANGE 0x02 ) 74  #BNEP_FILTER_INVALID_MCADDR 0x02 ) 75  #BNEP_FILTER_LIMIT_REACHED 0x03 ) 76  #BNEP_FILTER_DENIED_SECURITY 0x04 ) 79  #BNEP_MTU 1691 ) 80  #BNEP_FLUSH_TO 0xffff ) 81  #BNEP_CONNECT_TO 15 ) 82  #BNEP_FILTER_TO 15 ) 84 #iâdeà BNEP_PSM 85  #BNEP_PSM 0x0f ) 89  #BNEP_TYPE_MASK 0x7f ) 90  #BNEP_EXT_HEADER 0x80 ) 92  sbÃp_£tup_cÚn_»q { 93 ušt8_t ty³ ; 94 ušt8_t ù¾ ; 95 ušt8_t uuid_size ; 96 ušt8_t £rviû [0]; 97 } __©Œibu‹__ (( ·cked )); 99  sbÃp_£t_fž‹r_»q { 100 ušt8_t ty³ ; 101 ušt8_t ù¾ ; 102 ušt16_t Ën ; 103 ušt8_t li¡ [0]; 104 } __©Œibu‹__ (( ·cked )); 106  sbÃp_cÚŒÞ_r¥ { 107 ušt8_t ty³ ; 108 ušt8_t ù¾ ; 109 ušt16_t »¥ ; 110 } __©Œibu‹__ (( ·cked )); 112  sbÃp_ext_hdr { 113 ušt8_t ty³ ; 114 ušt8_t Ën ; 115 ušt8_t d©a [0]; 116 } __©Œibu‹__ (( ·cked )); 119  #BNEPCONNADD `_IOW ('B', 200, ) ) 120  #BNEPCONNDEL `_IOW ('B', 201, ) ) 121  #BNEPGETCONNLIST `_IOR ('B', 210, ) ) 122  #BNEPGETCONNINFO `_IOR ('B', 211, ) ) 124  sbÃp_cÚÇdd_»q { 125  sock ; 126 ušt32_t æags ; 127 ušt16_t rÞe ; 128  deviû [16]; 131  sbÃp_cÚnd–_»q { 132 ušt32_t æags ; 133 ušt8_t d¡ [ ETH_ALEN ]; 136  sbÃp_cÚnšfo { 137 ušt32_t æags ; 138 ušt16_t rÞe ; 139 ušt16_t ¡©e ; 140 ušt8_t d¡ [ ETH_ALEN ]; 141  deviû [16]; 144  sbÃp_cÚÆi¡_»q { 145 ušt32_t úum ; 146  bÃp_cÚnšfo * ci ; 149 #ifdeà __ýlu¥lus @lib/cmtp.h 24 #iâdeà __CMTP_H 25  #__CMTP_H ) 27 #ifdeà __ýlu¥lus 32  #CMTP_MINIMUM_MTU 152 ) 33  #CMTP_DEFAULT_MTU 672 ) 36  #CMTPCONNADD `_IOW ('C', 200, ) ) 37  #CMTPCONNDEL `_IOW ('C', 201, ) ) 38  #CMTPGETCONNLIST `_IOR ('C', 210, ) ) 39  #CMTPGETCONNINFO `_IOR ('C', 211, ) ) 41  #CMTP_LOOPBACK 0 ) 43  scm_cÚÇdd_»q { 44  sock ; 45 ušt32_t æags ; 48  scm_cÚnd–_»q { 49 bdaddr_t bdaddr ; 50 ušt32_t æags ; 53  scm_cÚnšfo { 54 bdaddr_t bdaddr ; 55 ušt32_t æags ; 56 ušt16_t ¡©e ; 57  num ; 60  scm_cÚÆi¡_»q { 61 ušt32_t úum ; 62  cm_cÚnšfo * ci ; 65 #ifdeà __ýlu¥lus @lib/hci.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡dio.h > 31  ~<”ºo.h > 32  ~ 33  ~ 34  ~<¡dlib.h > 35  ~<¡ršg.h > 36  ~ 38  ~ 39  ~ 40  ~ 41  ~ 42  ~ 44  ~"blu‘oÙh.h " 45  ~"hci.h " 46  ~"hci_lib.h " 48 #iâdeà MIN 49  #MIN ( x , y è((xè< (yè? (xè: (y)) ) 53 * m¡r ; 54  mv® ; 55 } thci_m­ ; 57 * $hci_b™2¡r ( hci_m­ * m ,  v® ) 59 * ¡r = `m®loc (120); 60 * ±r = ¡r ; 62 ià(! ¡r ) 63  NULL ; 65 * ±r = 0; 66  m -> ¡r ) { 67 ià((è m -> v® & val) 68 ±r +ð `¥rštf ÕŒ, "% ", m -> ¡r ); 69 m ++; 71  ¡r ; 72 } } 74  $hci_¡r2b™ ( hci_m­ * m­ , * ¡r , * v® ) 76 * t , * ±r ; 77 hci_m­ * m ; 78  £t ; 80 ià(! ¡r || !(¡¸ð ±r = `¡rdup (str))) 83 * v® = £t = 0; 85 ( t = `¡r£p (& ±r , ","))) { 86  m = m­ ; m-> ¡r ; m++) { 87 ià(! `¡rÿ£cmp ( m -> ¡r , t )) { 88 * v® |ð(è m ->val; 89 £t = 1; 93 `ä“ ( ¡r ); 95  £t ; 96 } } 98 * $hci_ušt2¡r ( hci_m­ * m ,  v® ) 100 * ¡r = `m®loc (50); 101 * ±r = ¡r ; 103 ià(! ¡r ) 104  NULL ; 106 * ±r = 0; 107  m -> ¡r ) { 108 ià((è m -> v® == val) { 109 ±r +ð `¥rštf ÕŒ, "%s", m -> ¡r ); 112 m ++; 114  ¡r ; 115 } } 117  $hci_¡r2ušt ( hci_m­ * m­ , * ¡r , * v® ) 119 * t , * ±r ; 120 hci_m­ * m ; 121  £t = 0; 123 ià(! ¡r ) 126 ¡r = ±r = `¡rdup (str); 128 ( t = `¡r£p (& ±r , ","))) { 129  m = m­ ; m-> ¡r ; m++) { 130 ià(! `¡rÿ£cmp ( m -> ¡r , t )) { 131 * v® = (è m ->val; 132 £t = 1; 137 `ä“ ( ¡r ); 139  £t ; 140 } } 142 * $hci_bu¡o¡r ( bus ) 144  bus ) { 145  HCI_VIRTUAL : 147  HCI_USB : 149  HCI_PCCARD : 151  HCI_UART : 153  HCI_RS232 : 155  HCI_PCI : 157  HCI_SDIO : 162 } } 164 * $hci_dty³to¡r ( ty³ ) 166  `hci_bu¡o¡r ( ty³ & 0x0f); 167 } } 169 * $hci_ty³to¡r ( ty³ ) 171  ty³ ) { 172  HCI_BREDR : 174  HCI_AMP : 179 } } 182  hci_m­ gdev_æags_m­ [] = { 183 { "UP", HCI_UP }, 184 { "INIT", HCI_INIT }, 185 { "RUNNING", HCI_RUNNING }, 186 { "RAW", HCI_RAW }, 187 { "PSCAN", HCI_PSCAN }, 188 { "ISCAN", HCI_ISCAN }, 189 { "INQUIRY", HCI_INQUIRY }, 190 { "AUTH", HCI_AUTH }, 191 { "ENCRYPT", HCI_ENCRYPT }, 192 { NULL } 195 * $hci_dæag¡o¡r ( ušt32_t æags ) 197 * ¡r = `bt_m®loc (50); 198 * ±r = ¡r ; 199 hci_m­ * m = dev_æags_m­ ; 201 ià(! ¡r ) 202  NULL ; 204 * ±r = 0; 206 ià(! `hci_‹¡_b™ ( HCI_UP , & æags )) 207 ±r +ð `¥rštf (ptr, "DOWN "); 209  m -> ¡r ) { 210 ià( `hci_‹¡_b™ ( m -> v® , & æags )) 211 ±r +ð `¥rštf ÕŒ, "% ", m -> ¡r ); 212 m ++; 214  ¡r ; 215 } } 218  hci_m­ gpkt_ty³_m­ [] = { 219 { "DM1", HCI_DM1 }, 220 { "DM3", HCI_DM3 }, 221 { "DM5", HCI_DM5 }, 222 { "DH1", HCI_DH1 }, 223 { "DH3", HCI_DH3 }, 224 { "DH5", HCI_DH5 }, 225 { "HV1", HCI_HV1 }, 226 { "HV2", HCI_HV2 }, 227 { "HV3", HCI_HV3 }, 228 { "2-DH1", HCI_2DH1 }, 229 { "2-DH3", HCI_2DH3 }, 230 { "2-DH5", HCI_2DH5 }, 231 { "3-DH1", HCI_3DH1 }, 232 { "3-DH3", HCI_3DH3 }, 233 { "3-DH5", HCI_3DH5 }, 234 { NULL } 237  hci_m­ gsco_±y³_m­ [] = { 241 { "EV3", HCI_EV3 }, 242 { "EV4", HCI_EV4 }, 243 { "EV5", HCI_EV5 }, 244 { "2-EV3", HCI_2EV3 }, 245 { "2-EV5", HCI_2EV5 }, 246 { "3-EV3", HCI_3EV3 }, 247 { "3-EV5", HCI_3EV5 }, 248 { NULL } 251 * $hci_±y³to¡r ( ±y³ ) 253  `hci_b™2¡r ( pkt_ty³_m­ , ±y³ ); 254 } } 256  $hci_¡¹Ýty³ (* ¡r , * v® ) 258  `hci_¡r2b™ ( pkt_ty³_m­ , ¡r , v® ); 259 } } 261 * $hci_scÝty³to¡r ( ±y³ ) 263  `hci_b™2¡r ( sco_±y³_m­ , ±y³ ); 264 } } 266  $hci_¡¹oscÝty³ (* ¡r , * v® ) 268  `hci_¡r2b™ ( sco_±y³_m­ , ¡r , v® ); 269 } } 272  hci_m­ glšk_pÞicy_m­ [] = { 274 { "RSWITCH", HCI_LP_RSWITCH }, 275 { "HOLD", HCI_LP_HOLD }, 276 { "SNIFF", HCI_LP_SNIFF }, 277 { "PARK", HCI_LP_PARK }, 278 { NULL } 281 * $hci_Íto¡r ( Í ) 283  `hci_b™2¡r ( lšk_pÞicy_m­ , Í ); 284 } } 286  $hci_¡¹Þp (* ¡r , * v® ) 288  `hci_¡r2b™ ( lšk_pÞicy_m­ , ¡r , v® ); 289 } } 292  hci_m­ glšk_mode_m­ [] = { 294 { "ACCEPT", HCI_LM_ACCEPT }, 295 { "MASTER", HCI_LM_MASTER }, 296 { "AUTH", HCI_LM_AUTH }, 297 { "ENCRYPT", HCI_LM_ENCRYPT }, 298 { "TRUSTED", HCI_LM_TRUSTED }, 299 { "RELIABLE", HCI_LM_RELIABLE }, 300 { "SECURE", HCI_LM_SECURE }, 301 { NULL } 304 * $hci_lmto¡r ( lm ) 306 * s , * ¡r = `bt_m®loc (50); 307 ià(! ¡r ) 308  NULL ; 310 * ¡r = 0; 311 ià(!( lm & HCI_LM_MASTER )) 312 `¡rýy ( ¡r , "SLAVE "); 314 s = `hci_b™2¡r ( lšk_mode_m­ , lm ); 315 ià(! s ) { 316 `bt_ä“ ( ¡r ); 317  NULL ; 320 `¡rÿt ( ¡r , s ); 321 `ä“ ( s ); 322  ¡r ; 323 } } 325  $hci_¡¹Þm (* ¡r , * v® ) 327  `hci_¡r2b™ ( lšk_mode_m­ , ¡r , v® ); 328 } } 331  hci_m­ gcommªds_m­ [] = { 593 { NULL } 596 * $hci_cmdto¡r ( cmd ) 598  `hci_ušt2¡r ( commªds_m­ , cmd ); 599 } } 601 * $hci_commªd¡o¡r ( ušt8_t * commªds , * ´ef ,  width ) 603  maxwidth = width - 3; 604 hci_m­ * m ; 605 * off , * ±r , * ¡r ; 606  size = 10; 608 m = commªds_m­ ; 610  m -> ¡r ) { 611 ià( commªds [ m -> v® / 8] & (1 << (m->val % 8))) 612 size +ð `¡¾’ ( m -> ¡r è+ ( ´ef ? strlen(pref) : 0) + 3; 613 m ++; 616 ¡r = `bt_m®loc ( size ); 617 ià(! ¡r ) 618  NULL ; 620 ±r = ¡r ; *ptr = '\0'; 622 ià( ´ef ) 623 ±r +ð `¥rštf ÕŒ, "%s", ´ef ); 625 off = ±r ; 627 m = commªds_m­ ; 629  m -> ¡r ) { 630 ià( commªds [ m -> v® / 8] & (1 << (m->val % 8))) { 631 ià( `¡¾’ ( off è+ sŒËn( m -> ¡r è> maxwidth ) { 632 ±r +ð `¥rštf ÕŒ, "\n%s", ´ef ?…ref : ""); 633 off = ±r ; 635 ±r +ð `¥rštf ÕŒ, "'%s' ", m -> ¡r ); 637 m ++; 640  ¡r ; 641 } } 644  hci_m­ gv”_m­ [] = { 654 { NULL } 657 * $hci_v”to¡r ( v” ) 659  `hci_ušt2¡r ( v”_m­ , v” ); 660 } } 662  $hci_¡¹ov” (* ¡r , * v” ) 664  `hci_¡r2ušt ( v”_m­ , ¡r , v” ); 665 } } 667 * $lmp_v”to¡r ( v” ) 669  `hci_ušt2¡r ( v”_m­ , v” ); 670 } } 672  $lmp_¡¹ov” (* ¡r , * v” ) 674  `hci_¡r2ušt ( v”_m­ , ¡r , v” ); 675 } } 677  hci_m­ g·l_m­ [] = { 679 { NULL } 682 * $·l_v”to¡r ( v” ) 684  `hci_ušt2¡r ( ·l_m­ , v” ); 685 } } 687  $·l_¡¹ov” (* ¡r , * v” ) 689  `hci_¡r2ušt ( ·l_m­ , ¡r , v” ); 690 } } 693  hci_m­ glmp_ã©u»s_m­ [8][9] = { 695 { "<3-¦Ù…ack‘s>", LMP_3SLOT }, 696 { "<5-¦Ù…ack‘s>", LMP_5SLOT }, 697 { "<’üy±iÚ>", LMP_ENCRYPT }, 698 { "<¦Ù off£t>", LMP_SOFFSET }, 699 { "", LMP_TACCURACY }, 700 { "", LMP_RSWITCH }, 701 { "", LMP_HOLD }, 702 { "<¢ifàmode>", LMP_SNIFF }, 703 { NULL } 706 { "<·rk s‹>", LMP_PARK }, 707 { "", LMP_RSSI }, 708 { "", LMP_QUALITY }, 709 { "", LMP_SCO }, 710 { "", LMP_HV2 }, 711 { "", LMP_HV3 }, 712 { "", LMP_ULAW }, 713 { "", LMP_ALAW }, 714 { NULL } 717 { "", LMP_CVSD }, 718 { "<·gšg scheme>", LMP_PSCHEME }, 719 { "", LMP_PCONTROL }, 720 { "<Œª¥¬’ˆSCO>", LMP_TRSP_SCO }, 721 { "", LMP_BCAST_ENC }, 722 { NULL } 726 { "", LMP_EDR_ACL_2M }, 727 { "", LMP_EDR_ACL_3M }, 728 { "<’hªûd isÿn>", LMP_ENH_ISCAN }, 729 { "<š‹¾aûd isÿn>", LMP_ILACE_ISCAN }, 730 { "<š‹¾aûd…sÿn>", LMP_ILACE_PSCAN }, 731 { "<šquœy w™h RSSI>", LMP_RSSI_INQ }, 732 { "", LMP_ESCO }, 733 { NULL } 736 { "", LMP_EV4 }, 737 { "", LMP_EV5 }, 739 { "", LMP_AFH_CAP_SLV }, 740 { "", LMP_AFH_CLS_SLV }, 741 { "
", LMP_NO_BREDR }, 742 { "", LMP_LE }, 743 { "<3-¦Ù EDR ACL>", LMP_EDR_3SLOT }, 744 { NULL } 747 { "<5-¦Ù EDR ACL>", LMP_EDR_5SLOT }, 748 { "<¢ifàsub¿tšg>", LMP_SNIFF_SUBR }, 749 { "<·u£ƒnüy±iÚ>", LMP_PAUSE_ENC }, 750 { "", LMP_AFH_CAP_MST }, 751 { "", LMP_AFH_CLS_MST }, 752 { "", LMP_EDR_ESCO_2M }, 753 { "", LMP_EDR_ESCO_3M }, 754 { "<3-¦Ù EDRƒSCO>", LMP_EDR_3S_ESCO }, 755 { NULL } 758 { "", LMP_EXT_INQ }, 759 { "", LMP_LE_BREDR }, 761 { "", LMP_SIMPLE_PAIR }, 762 { "<’ÿpsuÏ‹d PDU>", LMP_ENCAPS_PDU }, 763 { "<”r. d©¨»pÜt>", LMP_ERR_DAT_REP }, 764 { "", LMP_NFLUSH_PKTS }, 766 { NULL } 769 { "", LMP_LSTO }, 770 { "<šquœy TX…ow”>", LMP_INQ_TX_PWR }, 771 { "", LMP_EPC }, 776 { "", LMP_EXT_FEAT }, 777 { NULL } 781 * $lmp_ã©u»¡o¡r ( ušt8_t * ã©u»s , * ´ef ,  width ) 783  maxwidth = width - 1; 784 * off , * ±r , * ¡r ; 785  i , size = 10; 787  i = 0; i < 8; i++) { 788 hci_m­ * m = lmp_ã©u»s_m­ [ i ]; 790  m -> ¡r ) { 791 ià( m -> v® & ã©u»s [ i ]) 792 size +ð `¡¾’ ( m -> ¡r ) + 793 ( ´ef ? `¡¾’ (pref) : 0) + 1; 794 m ++; 798 ¡r = `bt_m®loc ( size ); 799 ià(! ¡r ) 800  NULL ; 802 ±r = ¡r ; *ptr = '\0'; 804 ià( ´ef ) 805 ±r +ð `¥rštf ÕŒ, "%s", ´ef ); 807 off = ±r ; 809  i = 0; i < 8; i++) { 810 hci_m­ * m = lmp_ã©u»s_m­ [ i ]; 812  m -> ¡r ) { 813 ià( m -> v® & ã©u»s [ i ]) { 814 ià( `¡¾’ ( off è+ sŒËn( m -> ¡r è> maxwidth ) { 815 ±r +ð `¥rštf (ptr, "\n%s", 816 ´ef ?…ref : ""); 817 off = ±r ; 819 ±r +ð `¥rštf ÕŒ, "% ", m -> ¡r ); 821 m ++; 825  ¡r ; 826 } } 829  hci_fÜ_—ch_dev ( æag , (* func )( dd ,  dev_id ,  ¬g ), 830  ¬g ) 832  hci_dev_li¡_»q * dl ; 833  hci_dev_»q * dr ; 834  dev_id = -1; 835  i , sk , ”r = 0; 837 sk = `sock‘ ( AF_BLUETOOTH , SOCK_RAW | SOCK_CLOEXEC , BTPROTO_HCI ); 838 ià( sk < 0) 841 dl = `m®loc ( HCI_MAX_DEV * (* dr ) + (*dl)); 842 ià(! dl ) { 843 ”r = ”ºo ; 844  dÚe ; 847 `mem£t ( dl , 0, HCI_MAX_DEV * (* dr ) + (*dl)); 849 dl -> dev_num = HCI_MAX_DEV ; 850 dr = dl -> dev_»q ; 852 ià( `ioùl ( sk , HCIGETDEVLIST , (*è dl ) < 0) { 853 ”r = ”ºo ; 854  ä“ ; 857  i = 0; i < dl -> dev_num ; i++, dr ++) { 858 ià( `hci_‹¡_b™ ( æag , & dr -> dev_Ýt )) 859 ià(! func || `func ( sk , dr -> dev_id , ¬g )) { 860 dev_id = dr ->dev_id; 865 ià( dev_id < 0) 866 ”r = ENODEV ; 868 ä“ : 869 `ä“ ( dl ); 871 dÚe : 872 `þo£ ( sk ); 873 ”ºo = ”r ; 875  dev_id ; 876 } } 878  $__Ùh”_bdaddr ( dd ,  dev_id ,  ¬g ) 880  hci_dev_šfo di = { . dev_id = dev_id }; 882 ià( `ioùl ( dd , HCIGETDEVINFO , (*è& di )) 885 ià( `hci_‹¡_b™ ( HCI_RAW , & di . æags )) 888  `bacmp (( bdaddr_t *è ¬g , & di . bdaddr ); 889 } } 891  $__§me_bdaddr ( dd ,  dev_id ,  ¬g ) 893  hci_dev_šfo di = { . dev_id = dev_id }; 895 ià( `ioùl ( dd , HCIGETDEVINFO , (*è& di )) 898  ! `bacmp (( bdaddr_t *è ¬g , & di . bdaddr ); 899 } } 901  $hci_g‘_rou‹ ( bdaddr_t * bdaddr ) 903  dev_id ; 905 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , __Ùh”_bdaddr , 906 (è( bdaddr ? bdadd¸: BDADDR_ANY )); 907 ià( dev_id < 0) 908 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , __§me_bdaddr , 909 (è( bdaddr ? bdadd¸: BDADDR_ANY )); 911  dev_id ; 912 } } 914  $hci_devid (cÚ¡ * ¡r ) 916 bdaddr_t ba ; 917  id = -1; 919 ià(! `¡ºcmp ( ¡r , "hci", 3è&& `¡¾’ (str) >= 4) { 920 id = `©oi ( ¡r + 3); 921 ià( `hci_devba ( id , & ba ) < 0) 924 ”ºo = ENODEV ; 925 `¡r2ba ( ¡r , & ba ); 926 id = `hci_fÜ_—ch_dev ( HCI_UP , __§me_bdaddr , (è& ba ); 929  id ; 930 } } 932  $hci_devšfo ( dev_id ,  hci_dev_šfo * di ) 934  dd , ”r , »t ; 936 dd = `sock‘ ( AF_BLUETOOTH , SOCK_RAW | SOCK_CLOEXEC , BTPROTO_HCI ); 937 ià( dd < 0) 938  dd ; 940 `mem£t ( di , 0, ( hci_dev_šfo )); 942 di -> dev_id = dev_id; 943 »t = `ioùl ( dd , HCIGETDEVINFO , (*è di ); 945 ”r = ”ºo ; 946 `þo£ ( dd ); 947 ”ºo = ”r ; 949  »t ; 950 } } 952  $hci_devba ( dev_id , bdaddr_t * bdaddr ) 954  hci_dev_šfo di ; 956 `mem£t (& di , 0, (di)); 958 ià( `hci_devšfo ( dev_id , & di )) 961 ià(! `hci_‹¡_b™ ( HCI_UP , & di . æags )) { 962 ”ºo = ENETDOWN ; 966 `baýy ( bdaddr , & di .bdaddr); 969 } } 971  $hci_šquœy ( dev_id ,  Ën ,  Ä¥ , cÚ¡ ušt8_t * Ïp , 972 šquœy_šfo ** ii ,  æags ) 974  hci_šquœy_»q * œ ; 975 ušt8_t num_r¥ = Ä¥ ; 976 * buf ; 977  dd , size , ”r , »t = -1; 979 ià( Ä¥ <= 0) { 980 num_r¥ = 0; 981 Ä¥ = 255; 984 ià( dev_id < 0) { 985 dev_id = `hci_g‘_rou‹ ( NULL ); 986 ià( dev_id < 0) { 987 ”ºo = ENODEV ; 992 dd = `sock‘ ( AF_BLUETOOTH , SOCK_RAW | SOCK_CLOEXEC , BTPROTO_HCI ); 993 ià( dd < 0) 994  dd ; 996 buf = `m®loc ((* œ è+ (( šquœy_šfo è* ( Ä¥ ))); 997 ià(! buf ) 998  dÚe ; 1000 œ = buf ; 1001 œ -> dev_id = dev_id; 1002 œ -> num_r¥ =‚um_rsp; 1003 œ -> Ëngth = Ën ; 1004 œ -> æags = flags; 1006 ià( Ïp ) { 1007 `memýy ( œ -> Ïp ,†ap, 3); 1009 œ -> Ïp [0] = 0x33; 1010 œ -> Ïp [1] = 0x8b; 1011 œ -> Ïp [2] = 0x9e; 1014 »t = `ioùl ( dd , HCIINQUIRY , (è buf ); 1015 ià( »t < 0) 1016  ä“ ; 1018 size = ( šquœy_šfo è* œ -> num_r¥ ; 1020 ià(!* ii ) 1021 * ii = `m®loc ( size ); 1023 ià(* ii ) { 1024 `memýy ((*è* ii , buf + (* œ ), size ); 1025 »t = œ -> num_r¥ ; 1027 »t = -1; 1029 ä“ : 1030 `ä“ ( buf ); 1032 dÚe : 1033 ”r = ”ºo ; 1034 `þo£ ( dd ); 1035 ”ºo = ”r ; 1037  »t ; 1038 } } 1042  $hci_Ý’_dev ( dev_id ) 1044  sockaddr_hci a ; 1045  dd , ”r ; 1048 ià( dev_id < 0) { 1049 ”ºo = ENODEV ; 1054 dd = `sock‘ ( AF_BLUETOOTH , SOCK_RAW | SOCK_CLOEXEC , BTPROTO_HCI ); 1055 ià( dd < 0) 1056  dd ; 1059 `mem£t (& a , 0, (a)); 1060 a . hci_çmžy = AF_BLUETOOTH ; 1061 a . hci_dev = dev_id ; 1062 ià( `bšd ( dd , ( sockaddr *è& a , (a)) < 0) 1063  çžed ; 1065  dd ; 1067 çžed : 1068 ”r = ”ºo ; 1069 `þo£ ( dd ); 1070 ”ºo = ”r ; 1073 } } 1075  $hci_þo£_dev ( dd ) 1077  `þo£ ( dd ); 1078 } } 1083  $hci_£nd_cmd ( dd , ušt16_t ogf , ušt16_ˆ ocf , ušt8_t ¶’ , * ·¿m ) 1085 ušt8_t ty³ = HCI_COMMAND_PKT ; 1086 hci_commªd_hdr hc ; 1087  iovec iv [3]; 1088  ivn ; 1090 hc . Ýcode = `htobs ( `cmd_Ýcode_·ck ( ogf , ocf )); 1091 hc . ¶’ =…len; 1093 iv [0]. iov_ba£ = & ty³ ; 1094 iv [0]. iov_Ën = 1; 1095 iv [1]. iov_ba£ = & hc ; 1096 iv [1]. iov_Ën = HCI_COMMAND_HDR_SIZE ; 1097 ivn = 2; 1099 ià( ¶’ ) { 1100 iv [2]. iov_ba£ = ·¿m ; 1101 iv [2]. iov_Ën = ¶’ ; 1102 ivn = 3; 1105  `wr™ev ( dd , iv , ivn ) < 0) { 1106 ià( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINTR ) 1111 } } 1113  $hci_£nd_»q ( dd ,  hci_»que¡ * r ,  to ) 1115  buf [ HCI_MAX_EVENT_SIZE ], * ±r ; 1116 ušt16_t Ýcode = `htobs ( `cmd_Ýcode_·ck ( r -> ogf ,„-> ocf )); 1117  hci_fž‹r nf , of ; 1118 sockËn_t Þ’ ; 1119 hci_ev’t_hdr * hdr ; 1120  ”r , Œy ; 1122 Þ’ = ( of ); 1123 ià( `g‘sockÝt ( dd , SOL_HCI , HCI_FILTER , & of , & Þ’ ) < 0) 1126 `hci_fž‹r_þ—r (& nf ); 1127 `hci_fž‹r_£t_±y³ ( HCI_EVENT_PKT , & nf ); 1128 `hci_fž‹r_£t_ev’t ( EVT_CMD_STATUS , & nf ); 1129 `hci_fž‹r_£t_ev’t ( EVT_CMD_COMPLETE , & nf ); 1130 `hci_fž‹r_£t_ev’t ( EVT_LE_META_EVENT , & nf ); 1131 `hci_fž‹r_£t_ev’t ( r -> ev’t , & nf ); 1132 `hci_fž‹r_£t_Ýcode ( Ýcode , & nf ); 1133 ià( `£tsockÝt ( dd , SOL_HCI , HCI_FILTER , & nf , (nf)) < 0) 1136 ià( `hci_£nd_cmd ( dd , r -> ogf ,„-> ocf ,„-> þ’ ,„-> ý¬am ) < 0) 1137  çžed ; 1139 Œy = 10; 1140  Œy --) { 1141 evt_cmd_com¶‘e * cc ; 1142 evt_cmd_¡©us * cs ; 1143 evt_»mÙe_Çme_»q_com¶‘e * º ; 1144 evt_Ë_m‘a_ev’t * me ; 1145 »mÙe_Çme_»q_ý * ý ; 1146  Ën ; 1148 ià( to ) { 1149  pÞlfd p ; 1150  n ; 1152 p . fd = dd ;…. ev’ts = POLLIN ; 1153 ( n = `pÞl (& p , 1, to )) < 0) { 1154 ià( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINTR ) 1156  çžed ; 1159 ià(! n ) { 1160 ”ºo = ETIMEDOUT ; 1161  çžed ; 1164 to -= 10; 1165 ià( to < 0) 1166 to = 0; 1170 ( Ën = `»ad ( dd , buf , (buf))) < 0) { 1171 ià( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINTR ) 1173  çžed ; 1176 hdr = (*è( buf + 1); 1177 ±r = buf + (1 + HCI_EVENT_HDR_SIZE ); 1178 Ën -ð(1 + HCI_EVENT_HDR_SIZE ); 1180  hdr -> evt ) { 1181  EVT_CMD_STATUS : 1182 cs = (*è ±r ; 1184 ià( cs -> Ýcode != opcode) 1187 ià( r -> ev’t !ð EVT_CMD_STATUS ) { 1188 ià( cs -> ¡©us ) { 1189 ”ºo = EIO ; 1190  çžed ; 1195 r -> ¾’ = `MIN ( Ën ,„->rlen); 1196 `memýy ( r -> ½¬am , ±r ,„-> ¾’ ); 1197  dÚe ; 1199  EVT_CMD_COMPLETE : 1200 cc = (*è ±r ; 1202 ià( cc -> Ýcode != opcode) 1205 ±r +ð EVT_CMD_COMPLETE_SIZE ; 1206 Ën -ð EVT_CMD_COMPLETE_SIZE ; 1208 r -> ¾’ = `MIN ( Ën ,„->rlen); 1209 `memýy ( r -> ½¬am , ±r ,„-> ¾’ ); 1210  dÚe ; 1212  EVT_REMOTE_NAME_REQ_COMPLETE : 1213 ià( hdr -> evt !ð r -> ev’t ) 1216 º = (*è ±r ; 1217 ý = r -> ý¬am ; 1219 ià( `bacmp (& º -> bdaddr , & ý ->bdaddr)) 1222 r -> ¾’ = `MIN ( Ën ,„->rlen); 1223 `memýy ( r -> ½¬am , ±r ,„-> ¾’ ); 1224  dÚe ; 1226  EVT_LE_META_EVENT : 1227 me = (*è ±r ; 1229 ià( me -> subev’t !ð r -> ev’t ) 1232 Ën -= 1; 1233 r -> ¾’ = `MIN ( Ën ,„->rlen); 1234 `memýy ( r -> ½¬am , me -> d©a ,„-> ¾’ ); 1235  dÚe ; 1238 ià( hdr -> evt !ð r -> ev’t ) 1241 r -> ¾’ = `MIN ( Ën ,„->rlen); 1242 `memýy ( r -> ½¬am , ±r ,„-> ¾’ ); 1243  dÚe ; 1246 ”ºo = ETIMEDOUT ; 1248 çžed : 1249 ”r = ”ºo ; 1250 `£tsockÝt ( dd , SOL_HCI , HCI_FILTER , & of , (of)); 1251 ”ºo = ”r ; 1254 dÚe : 1255 `£tsockÝt ( dd , SOL_HCI , HCI_FILTER , & of , (of)); 1257 } } 1259  $hci_ü—‹_cÚÃùiÚ ( dd , cÚ¡ bdaddr_t * bdaddr , ušt16_t ±y³ , 1260 ušt16_t þkoff£t , ušt8_t rsw™ch , 1261 ušt16_t * hªdË ,  to ) 1263 evt_cÚn_com¶‘e ½ ; 1264 ü—‹_cÚn_ý ý ; 1265  hci_»que¡ rq ; 1267 `mem£t (& ý , 0, (cp)); 1268 `baýy (& ý . bdaddr , bdaddr); 1269 ý . pkt_ty³ = ±y³ ; 1270 ý . psÿn_»p_mode = 0x02; 1271 ý . þock_off£t = þkoff£t ; 1272 ý . rÞe_sw™ch = rsw™ch ; 1274 `mem£t (& rq , 0, (rq)); 1275 rq . ogf = OGF_LINK_CTL ; 1276 rq . ocf = OCF_CREATE_CONN ; 1277 rq . ev’t = EVT_CONN_COMPLETE ; 1278 rq . ý¬am = & ý ; 1279 rq . þ’ = CREATE_CONN_CP_SIZE ; 1280 rq . ½¬am = & ½ ; 1281 rq . ¾’ = EVT_CONN_COMPLETE_SIZE ; 1283 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1286 ià( ½ . ¡©us ) { 1287 ”ºo = EIO ; 1291 * hªdË = ½ .handle; 1293 } } 1295  $hci_discÚÃù ( dd , ušt16_t hªdË , ušt8_t »asÚ ,  to ) 1297 evt_discÚn_com¶‘e ½ ; 1298 discÚÃù_ý ý ; 1299  hci_»que¡ rq ; 1301 `mem£t (& ý , 0, (cp)); 1302 ý . hªdË = handle; 1303 ý . »asÚ =„eason; 1305 `mem£t (& rq , 0, (rq)); 1306 rq . ogf = OGF_LINK_CTL ; 1307 rq . ocf = OCF_DISCONNECT ; 1308 rq . ev’t = EVT_DISCONN_COMPLETE ; 1309 rq . ý¬am = & ý ; 1310 rq . þ’ = DISCONNECT_CP_SIZE ; 1311 rq . ½¬am = & ½ ; 1312 rq . ¾’ = EVT_DISCONN_COMPLETE_SIZE ; 1314 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1317 ià( ½ . ¡©us ) { 1318 ”ºo = EIO ; 1322 } } 1324  $hci_Ë_add_wh™e_li¡ ( dd , cÚ¡ bdaddr_t * bdaddr , ušt8_t ty³ ,  to ) 1326  hci_»que¡ rq ; 1327 Ë_add_deviû_to_wh™e_li¡_ý ý ; 1328 ušt8_t ¡©us ; 1330 `mem£t (& ý , 0, (cp)); 1331 ý . bdaddr_ty³ = ty³ ; 1332 `baýy (& ý . bdaddr , bdaddr); 1334 `mem£t (& rq , 0, (rq)); 1335 rq . ogf = OGF_LE_CTL ; 1336 rq . ocf = OCF_LE_ADD_DEVICE_TO_WHITE_LIST ; 1337 rq . ý¬am = & ý ; 1338 rq . þ’ = LE_ADD_DEVICE_TO_WHITE_LIST_CP_SIZE ; 1339 rq . ½¬am = & ¡©us ; 1340 rq . ¾’ = 1; 1342 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1345 ià( ¡©us ) { 1346 ”ºo = EIO ; 1351 } } 1353  $hci_Ë_rm_wh™e_li¡ ( dd , cÚ¡ bdaddr_t * bdaddr , ušt8_t ty³ ,  to ) 1355  hci_»que¡ rq ; 1356 Ë_»move_deviû_äom_wh™e_li¡_ý ý ; 1357 ušt8_t ¡©us ; 1359 `mem£t (& ý , 0, (cp)); 1360 ý . bdaddr_ty³ = ty³ ; 1361 `baýy (& ý . bdaddr , bdaddr); 1363 `mem£t (& rq , 0, (rq)); 1364 rq . ogf = OGF_LE_CTL ; 1365 rq . ocf = OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST ; 1366 rq . ý¬am = & ý ; 1367 rq . þ’ = LE_REMOVE_DEVICE_FROM_WHITE_LIST_CP_SIZE ; 1368 rq . ½¬am = & ¡©us ; 1369 rq . ¾’ = 1; 1371 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1374 ià( ¡©us ) { 1375 ”ºo = EIO ; 1380 } } 1382  $hci_Ë_»ad_wh™e_li¡_size ( dd , ušt8_t * size ,  to ) 1384  hci_»que¡ rq ; 1385 Ë_»ad_wh™e_li¡_size_½ ½ ; 1387 `mem£t (& ½ , 0, (rp)); 1388 `mem£t (& rq , 0, (rq)); 1390 rq . ogf = OGF_LE_CTL ; 1391 rq . ocf = OCF_LE_READ_WHITE_LIST_SIZE ; 1392 rq . ½¬am = & ½ ; 1393 rq . ¾’ = LE_READ_WHITE_LIST_SIZE_RP_SIZE ; 1395 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1398 ià( ½ . ¡©us ) { 1399 ”ºo = EIO ; 1403 ià( size ) 1404 * size = ½ .size; 1407 } } 1409  $hci_Ë_þ—r_wh™e_li¡ ( dd ,  to ) 1411  hci_»que¡ rq ; 1412 ušt8_t ¡©us ; 1414 `mem£t (& rq , 0, (rq)); 1415 rq . ogf = OGF_LE_CTL ; 1416 rq . ocf = OCF_LE_CLEAR_WHITE_LIST ; 1417 rq . ½¬am = & ¡©us ; 1418 rq . ¾’ = 1; 1420 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1423 ià( ¡©us ) { 1424 ”ºo = EIO ; 1429 } } 1431  $hci_Ë_add_»sÞvšg_li¡ ( dd , cÚ¡ bdaddr_t * bdaddr , ušt8_t ty³ , 1432 ušt8_t * ³”_œk , ušt8_ˆ* loÿl_œk ,  to ) 1434  hci_»que¡ rq ; 1435 Ë_add_deviû_to_»sÞv_li¡_ý ý ; 1436 ušt8_t ¡©us ; 1438 `mem£t (& ý , 0, (cp)); 1439 ý . bdaddr_ty³ = ty³ ; 1440 `baýy (& ý . bdaddr , bdaddr); 1441 ià( ³”_œk ) 1442 `memýy ( ý . ³”_œk ,…eer_irk, 16); 1443 ià( loÿl_œk ) 1444 `memýy ( ý . loÿl_œk ,†ocal_irk, 16); 1446 `mem£t (& rq , 0, (rq)); 1447 rq . ogf = OGF_LE_CTL ; 1448 rq . ocf = OCF_LE_ADD_DEVICE_TO_RESOLV_LIST ; 1449 rq . ý¬am = & ý ; 1450 rq . þ’ = LE_ADD_DEVICE_TO_RESOLV_LIST_CP_SIZE ; 1451 rq . ½¬am = & ¡©us ; 1452 rq . ¾’ = 1; 1454 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1457 ià( ¡©us ) { 1458 ”ºo = EIO ; 1463 } } 1465  $hci_Ë_rm_»sÞvšg_li¡ ( dd , cÚ¡ bdaddr_t * bdaddr , ušt8_t ty³ ,  to ) 1467  hci_»que¡ rq ; 1468 Ë_»move_deviû_äom_»sÞv_li¡_ý ý ; 1469 ušt8_t ¡©us ; 1471 `mem£t (& ý , 0, (cp)); 1472 ý . bdaddr_ty³ = ty³ ; 1473 `baýy (& ý . bdaddr , bdaddr); 1475 `mem£t (& rq , 0, (rq)); 1476 rq . ogf = OGF_LE_CTL ; 1477 rq . ocf = OCF_LE_REMOVE_DEVICE_FROM_RESOLV_LIST ; 1478 rq . ý¬am = & ý ; 1479 rq . þ’ = LE_REMOVE_DEVICE_FROM_RESOLV_LIST_CP_SIZE ; 1480 rq . ½¬am = & ¡©us ; 1481 rq . ¾’ = 1; 1483 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1486 ià( ¡©us ) { 1487 ”ºo = EIO ; 1492 } } 1494  $hci_Ë_þ—r_»sÞvšg_li¡ ( dd ,  to ) 1496  hci_»que¡ rq ; 1497 ušt8_t ¡©us ; 1499 `mem£t (& rq , 0, (rq)); 1500 rq . ogf = OGF_LE_CTL ; 1501 rq . ocf = OCF_LE_CLEAR_RESOLV_LIST ; 1502 rq . ½¬am = & ¡©us ; 1503 rq . ¾’ = 1; 1505 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1508 ià( ¡©us ) { 1509 ”ºo = EIO ; 1514 } } 1516  $hci_Ë_»ad_»sÞvšg_li¡_size ( dd , ušt8_t * size ,  to ) 1518  hci_»que¡ rq ; 1519 Ë_»ad_»sÞv_li¡_size_½ ½ ; 1521 `mem£t (& ½ , 0, (rp)); 1522 `mem£t (& rq , 0, (rq)); 1524 rq . ogf = OGF_LE_CTL ; 1525 rq . ocf = OCF_LE_READ_RESOLV_LIST_SIZE ; 1526 rq . ½¬am = & ½ ; 1527 rq . ¾’ = LE_READ_RESOLV_LIST_SIZE_RP_SIZE ; 1529 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1532 ià( ½ . ¡©us ) { 1533 ”ºo = EIO ; 1537 ià( size ) 1538 * size = ½ .size; 1541 } } 1543  $hci_Ë_£t_add»ss_»sÞutiÚ_’abË ( dd , ušt8_t ’abË ,  to ) 1545  hci_»que¡ rq ; 1546 Ë_£t_add»ss_»sÞutiÚ_’abË_ý ý ; 1547 ušt8_t ¡©us ; 1549 `mem£t (& ý , 0, (cp)); 1550 ý . ’abË =ƒnable; 1552 `mem£t (& rq , 0, (rq)); 1553 rq . ogf = OGF_LE_CTL ; 1554 rq . ocf = OCF_LE_SET_ADDRESS_RESOLUTION_ENABLE ; 1555 rq . ý¬am = & ý ; 1556 rq . þ’ = LE_SET_ADDRESS_RESOLUTION_ENABLE_CP_SIZE ; 1557 rq . ½¬am = & ¡©us ; 1558 rq . ¾’ = 1; 1560 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1563 ià( ¡©us ) { 1564 ”ºo = EIO ; 1569 } } 1571  $hci_»ad_loÿl_Çme ( dd ,  Ën , * Çme ,  to ) 1573 »ad_loÿl_Çme_½ ½ ; 1574  hci_»que¡ rq ; 1576 `mem£t (& rq , 0, (rq)); 1577 rq . ogf = OGF_HOST_CTL ; 1578 rq . ocf = OCF_READ_LOCAL_NAME ; 1579 rq . ½¬am = & ½ ; 1580 rq . ¾’ = READ_LOCAL_NAME_RP_SIZE ; 1582 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1585 ià( ½ . ¡©us ) { 1586 ”ºo = EIO ; 1590 ½ . Çme [247] = '\0'; 1591 `¡ºýy ( Çme , (*è ½ .Çme, Ën ); 1593 } } 1595  $hci_wr™e_loÿl_Çme ( dd , cÚ¡ * Çme ,  to ) 1597 chªge_loÿl_Çme_ý ý ; 1598  hci_»que¡ rq ; 1600 `mem£t (& ý , 0, (cp)); 1601 `¡ºýy ((*è ý . Çme ,‚ame, (cp.name)); 1603 `mem£t (& rq , 0, (rq)); 1604 rq . ogf = OGF_HOST_CTL ; 1605 rq . ocf = OCF_CHANGE_LOCAL_NAME ; 1606 rq . ý¬am = & ý ; 1607 rq . þ’ = CHANGE_LOCAL_NAME_CP_SIZE ; 1609 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1613 } } 1615  $hci_»ad_»mÙe_Çme_w™h_þock_off£t ( dd , cÚ¡ bdaddr_t * bdaddr , 1616 ušt8_t psÿn_»p_mode , 1617 ušt16_t þkoff£t , 1618  Ën , * Çme ,  to ) 1620 evt_»mÙe_Çme_»q_com¶‘e º ; 1621 »mÙe_Çme_»q_ý ý ; 1622  hci_»que¡ rq ; 1624 `mem£t (& ý , 0, (cp)); 1625 `baýy (& ý . bdaddr , bdaddr); 1626 ý . psÿn_»p_mode =…scan_rep_mode; 1627 ý . þock_off£t = þkoff£t ; 1629 `mem£t (& rq , 0, (rq)); 1630 rq . ogf = OGF_LINK_CTL ; 1631 rq . ocf = OCF_REMOTE_NAME_REQ ; 1632 rq . ý¬am = & ý ; 1633 rq . þ’ = REMOTE_NAME_REQ_CP_SIZE ; 1634 rq . ev’t = EVT_REMOTE_NAME_REQ_COMPLETE ; 1635 rq . ½¬am = & º ; 1636 rq . ¾’ = EVT_REMOTE_NAME_REQ_COMPLETE_SIZE ; 1638 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1641 ià( º . ¡©us ) { 1642 ”ºo = EIO ; 1646 º . Çme [247] = '\0'; 1647 `¡ºýy ( Çme , (*è º .Çme, Ën ); 1649 } } 1651  $hci_»ad_»mÙe_Çme ( dd , cÚ¡ bdaddr_t * bdaddr ,  Ën , * Çme , 1652  to ) 1654  `hci_»ad_»mÙe_Çme_w™h_þock_off£t ( dd , bdaddr , 0x02, 0x0000, 1655 Ën , Çme , to ); 1656 } } 1658  $hci_»ad_»mÙe_Çme_ÿnûl ( dd , cÚ¡ bdaddr_t * bdaddr ,  to ) 1660 »mÙe_Çme_»q_ÿnûl_ý ý ; 1661  hci_»que¡ rq ; 1663 `mem£t (& ý , 0, (cp)); 1664 `baýy (& ý . bdaddr , bdaddr); 1666 `mem£t (& rq , 0, (rq)); 1667 rq . ogf = OGF_LINK_CTL ; 1668 rq . ocf = OCF_REMOTE_NAME_REQ_CANCEL ; 1669 rq . ý¬am = & ý ; 1670 rq . þ’ = REMOTE_NAME_REQ_CANCEL_CP_SIZE ; 1672 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1676 } } 1678  $hci_»ad_»mÙe_v”siÚ ( dd , ušt16_t hªdË ,  hci_v”siÚ * v” , 1679  to ) 1681 evt_»ad_»mÙe_v”siÚ_com¶‘e ½ ; 1682 »ad_»mÙe_v”siÚ_ý ý ; 1683  hci_»que¡ rq ; 1685 `mem£t (& ý , 0, (cp)); 1686 ý . hªdË = handle; 1688 `mem£t (& rq , 0, (rq)); 1689 rq . ogf = OGF_LINK_CTL ; 1690 rq . ocf = OCF_READ_REMOTE_VERSION ; 1691 rq . ev’t = EVT_READ_REMOTE_VERSION_COMPLETE ; 1692 rq . ý¬am = & ý ; 1693 rq . þ’ = READ_REMOTE_VERSION_CP_SIZE ; 1694 rq . ½¬am = & ½ ; 1695 rq . ¾’ = EVT_READ_REMOTE_VERSION_COMPLETE_SIZE ; 1697 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1700 ià( ½ . ¡©us ) { 1701 ”ºo = EIO ; 1705 v” -> mªuçùu»r = `btohs ( ½ .manufacturer); 1706 v” -> lmp_v” = ½ .lmp_ver; 1707 v” -> lmp_subv” = `btohs ( ½ .lmp_subver); 1709 } } 1711  $hci_»ad_»mÙe_ã©u»s ( dd , ušt16_t hªdË , ušt8_t * ã©u»s ,  to ) 1713 evt_»ad_»mÙe_ã©u»s_com¶‘e ½ ; 1714 »ad_»mÙe_ã©u»s_ý ý ; 1715  hci_»que¡ rq ; 1717 `mem£t (& ý , 0, (cp)); 1718 ý . hªdË = handle; 1720 `mem£t (& rq , 0, (rq)); 1721 rq . ogf = OGF_LINK_CTL ; 1722 rq . ocf = OCF_READ_REMOTE_FEATURES ; 1723 rq . ev’t = EVT_READ_REMOTE_FEATURES_COMPLETE ; 1724 rq . ý¬am = & ý ; 1725 rq . þ’ = READ_REMOTE_FEATURES_CP_SIZE ; 1726 rq . ½¬am = & ½ ; 1727 rq . ¾’ = EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE ; 1729 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1732 ià( ½ . ¡©us ) { 1733 ”ºo = EIO ; 1737 ià( ã©u»s ) 1738 `memýy ( ã©u»s , ½ .features, 8); 1741 } } 1743  $hci_»ad_»mÙe_ext_ã©u»s ( dd , ušt16_t hªdË , ušt8_t ·ge , 1744 ušt8_t * max_·ge , ušt8_ˆ* ã©u»s , 1745  to ) 1747 evt_»ad_»mÙe_ext_ã©u»s_com¶‘e ½ ; 1748 »ad_»mÙe_ext_ã©u»s_ý ý ; 1749  hci_»que¡ rq ; 1751 `mem£t (& ý , 0, (cp)); 1752 ý . hªdË = handle; 1753 ý . ·ge_num = ·ge ; 1755 `mem£t (& rq , 0, (rq)); 1756 rq . ogf = OGF_LINK_CTL ; 1757 rq . ocf = OCF_READ_REMOTE_EXT_FEATURES ; 1758 rq . ev’t = EVT_READ_REMOTE_EXT_FEATURES_COMPLETE ; 1759 rq . ý¬am = & ý ; 1760 rq . þ’ = READ_REMOTE_EXT_FEATURES_CP_SIZE ; 1761 rq . ½¬am = & ½ ; 1762 rq . ¾’ = EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE ; 1764 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1767 ià( ½ . ¡©us ) { 1768 ”ºo = EIO ; 1772 ià( max_·ge ) 1773 * max_·ge = ½ . max_·ge_num ; 1775 ià( ã©u»s ) 1776 `memýy ( ã©u»s , ½ .features, 8); 1779 } } 1781  $hci_»ad_þock_off£t ( dd , ušt16_t hªdË , ušt16_ˆ* þkoff£t ,  to ) 1783 evt_»ad_þock_off£t_com¶‘e ½ ; 1784 »ad_þock_off£t_ý ý ; 1785  hci_»que¡ rq ; 1787 `mem£t (& ý , 0, (cp)); 1788 ý . hªdË = handle; 1790 `mem£t (& rq , 0, (rq)); 1791 rq . ogf = OGF_LINK_CTL ; 1792 rq . ocf = OCF_READ_CLOCK_OFFSET ; 1793 rq . ev’t = EVT_READ_CLOCK_OFFSET_COMPLETE ; 1794 rq . ý¬am = & ý ; 1795 rq . þ’ = READ_CLOCK_OFFSET_CP_SIZE ; 1796 rq . ½¬am = & ½ ; 1797 rq . ¾’ = EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE ; 1799 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1802 ià( ½ . ¡©us ) { 1803 ”ºo = EIO ; 1807 * þkoff£t = ½ . þock_off£t ; 1809 } } 1811  $hci_»ad_loÿl_v”siÚ ( dd ,  hci_v”siÚ * v” ,  to ) 1813 »ad_loÿl_v”siÚ_½ ½ ; 1814  hci_»que¡ rq ; 1816 `mem£t (& rq , 0, (rq)); 1817 rq . ogf = OGF_INFO_PARAM ; 1818 rq . ocf = OCF_READ_LOCAL_VERSION ; 1819 rq . ½¬am = & ½ ; 1820 rq . ¾’ = READ_LOCAL_VERSION_RP_SIZE ; 1822 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1825 ià( ½ . ¡©us ) { 1826 ”ºo = EIO ; 1830 v” -> mªuçùu»r = `btohs ( ½ .manufacturer); 1831 v” -> hci_v” = ½ .hci_ver; 1832 v” -> hci_»v = `btohs ( ½ .hci_rev); 1833 v” -> lmp_v” = ½ .lmp_ver; 1834 v” -> lmp_subv” = `btohs ( ½ .lmp_subver); 1836 } } 1838  $hci_»ad_loÿl_commªds ( dd , ušt8_t * commªds ,  to ) 1840 »ad_loÿl_commªds_½ ½ ; 1841  hci_»que¡ rq ; 1843 `mem£t (& rq , 0, (rq)); 1844 rq . ogf = OGF_INFO_PARAM ; 1845 rq . ocf = OCF_READ_LOCAL_COMMANDS ; 1846 rq . ½¬am = & ½ ; 1847 rq . ¾’ = READ_LOCAL_COMMANDS_RP_SIZE ; 1849 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1852 ià( ½ . ¡©us ) { 1853 ”ºo = EIO ; 1857 ià( commªds ) 1858 `memýy ( commªds , ½ .commands, 64); 1861 } } 1863  $hci_»ad_loÿl_ã©u»s ( dd , ušt8_t * ã©u»s ,  to ) 1865 »ad_loÿl_ã©u»s_½ ½ ; 1866  hci_»que¡ rq ; 1868 `mem£t (& rq , 0, (rq)); 1869 rq . ogf = OGF_INFO_PARAM ; 1870 rq . ocf = OCF_READ_LOCAL_FEATURES ; 1871 rq . ½¬am = & ½ ; 1872 rq . ¾’ = READ_LOCAL_FEATURES_RP_SIZE ; 1874 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1877 ià( ½ . ¡©us ) { 1878 ”ºo = EIO ; 1882 ià( ã©u»s ) 1883 `memýy ( ã©u»s , ½ .features, 8); 1886 } } 1888  $hci_»ad_loÿl_ext_ã©u»s ( dd , ušt8_t ·ge , ušt8_ˆ* max_·ge , 1889 ušt8_t * ã©u»s ,  to ) 1891 »ad_loÿl_ext_ã©u»s_ý ý ; 1892 »ad_loÿl_ext_ã©u»s_½ ½ ; 1893  hci_»que¡ rq ; 1895 ý . ·ge_num = ·ge ; 1897 `mem£t (& rq , 0, (rq)); 1898 rq . ogf = OGF_INFO_PARAM ; 1899 rq . ocf = OCF_READ_LOCAL_EXT_FEATURES ; 1900 rq . ý¬am = & ý ; 1901 rq . þ’ = READ_LOCAL_EXT_FEATURES_CP_SIZE ; 1902 rq . ½¬am = & ½ ; 1903 rq . ¾’ = READ_LOCAL_EXT_FEATURES_RP_SIZE ; 1905 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1908 ià( ½ . ¡©us ) { 1909 ”ºo = EIO ; 1913 ià( max_·ge ) 1914 * max_·ge = ½ . max_·ge_num ; 1916 ià( ã©u»s ) 1917 `memýy ( ã©u»s , ½ .features, 8); 1920 } } 1922  $hci_»ad_bd_addr ( dd , bdaddr_t * bdaddr ,  to ) 1924 »ad_bd_addr_½ ½ ; 1925  hci_»que¡ rq ; 1927 `mem£t (& rq , 0, (rq)); 1928 rq . ogf = OGF_INFO_PARAM ; 1929 rq . ocf = OCF_READ_BD_ADDR ; 1930 rq . ½¬am = & ½ ; 1931 rq . ¾’ = READ_BD_ADDR_RP_SIZE ; 1933 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1936 ià( ½ . ¡©us ) { 1937 ”ºo = EIO ; 1941 ià( bdaddr ) 1942 `baýy ( bdaddr , & ½ .bdaddr); 1945 } } 1947  $hci_»ad_þass_of_dev ( dd , ušt8_t * þs ,  to ) 1949 »ad_þass_of_dev_½ ½ ; 1950  hci_»que¡ rq ; 1952 `mem£t (& rq , 0, (rq)); 1953 rq . ogf = OGF_HOST_CTL ; 1954 rq . ocf = OCF_READ_CLASS_OF_DEV ; 1955 rq . ½¬am = & ½ ; 1956 rq . ¾’ = READ_CLASS_OF_DEV_RP_SIZE ; 1958 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 1961 ià( ½ . ¡©us ) { 1962 ”ºo = EIO ; 1966 `memýy ( þs , ½ . dev_þass , 3); 1968 } } 1970  $hci_wr™e_þass_of_dev ( dd , ušt32_t þs ,  to ) 1972 wr™e_þass_of_dev_ý ý ; 1973  hci_»que¡ rq ; 1975 `mem£t (& rq , 0, (rq)); 1976 ý . dev_þass [0] = þs & 0xff; 1977 ý . dev_þass [1] = ( þs >> 8) & 0xff; 1978 ý . dev_þass [2] = ( þs >> 16) & 0xff; 1979 rq . ogf = OGF_HOST_CTL ; 1980 rq . ocf = OCF_WRITE_CLASS_OF_DEV ; 1981 rq . ý¬am = & ý ; 1982 rq . þ’ = WRITE_CLASS_OF_DEV_CP_SIZE ; 1983  `hci_£nd_»q ( dd , & rq , to ); 1984 } } 1986  $hci_»ad_voiû_£‰šg ( dd , ušt16_t * vs ,  to ) 1988 »ad_voiû_£‰šg_½ ½ ; 1989  hci_»que¡ rq ; 1991 `mem£t (& rq , 0, (rq)); 1992 rq . ogf = OGF_HOST_CTL ; 1993 rq . ocf = OCF_READ_VOICE_SETTING ; 1994 rq . ½¬am = & ½ ; 1995 rq . ¾’ = READ_VOICE_SETTING_RP_SIZE ; 1997 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2000 ià( ½ . ¡©us ) { 2001 ”ºo = EIO ; 2005 * vs = ½ . voiû_£‰šg ; 2007 } } 2009  $hci_wr™e_voiû_£‰šg ( dd , ušt16_t vs ,  to ) 2011 wr™e_voiû_£‰šg_ý ý ; 2012  hci_»que¡ rq ; 2014 `mem£t (& rq , 0, (rq)); 2015 ý . voiû_£‰šg = vs ; 2016 rq . ogf = OGF_HOST_CTL ; 2017 rq . ocf = OCF_WRITE_VOICE_SETTING ; 2018 rq . ý¬am = & ý ; 2019 rq . þ’ = WRITE_VOICE_SETTING_CP_SIZE ; 2021  `hci_£nd_»q ( dd , & rq , to ); 2022 } } 2024  $hci_»ad_cu¼’t_Ÿc_Ïp ( dd , ušt8_t * num_Ÿc , ušt8_ˆ* Ïp ,  to ) 2026 »ad_cu¼’t_Ÿc_Ïp_½ ½ ; 2027  hci_»que¡ rq ; 2029 `mem£t (& rq , 0, (rq)); 2030 rq . ogf = OGF_HOST_CTL ; 2031 rq . ocf = OCF_READ_CURRENT_IAC_LAP ; 2032 rq . ½¬am = & ½ ; 2033 rq . ¾’ = READ_CURRENT_IAC_LAP_RP_SIZE ; 2035 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2038 ià( ½ . ¡©us ) { 2039 ”ºo = EIO ; 2043 * num_Ÿc = ½ . num_cu¼’t_Ÿc ; 2044 `memýy ( Ïp , ½ .Ïp,„p. num_cu¼’t_Ÿc * 3); 2046 } } 2048  $hci_wr™e_cu¼’t_Ÿc_Ïp ( dd , ušt8_t num_Ÿc , ušt8_ˆ* Ïp ,  to ) 2050 wr™e_cu¼’t_Ÿc_Ïp_ý ý ; 2051  hci_»que¡ rq ; 2053 `mem£t (& ý , 0, (cp)); 2054 ý . num_cu¼’t_Ÿc = num_Ÿc ; 2055 `memýy (& ý . Ïp ,†­, num_Ÿc * 3); 2057 `mem£t (& rq , 0, (rq)); 2058 rq . ogf = OGF_HOST_CTL ; 2059 rq . ocf = OCF_WRITE_CURRENT_IAC_LAP ; 2060 rq . ý¬am = & ý ; 2061 rq . þ’ = num_Ÿc * 3 + 1; 2063  `hci_£nd_»q ( dd , & rq , to ); 2064 } } 2066  $hci_»ad_¡Üed_lšk_key ( dd , bdaddr_t * bdaddr , ušt8_t ®l ,  to ) 2068 »ad_¡Üed_lšk_key_ý ý ; 2069  hci_»que¡ rq ; 2071 `mem£t (& ý , 0, (cp)); 2072 `baýy (& ý . bdaddr , bdaddr); 2073 ý . »ad_®l = ®l ; 2075 `mem£t (& rq , 0, (rq)); 2076 rq . ogf = OGF_HOST_CTL ; 2077 rq . ocf = OCF_READ_STORED_LINK_KEY ; 2078 rq . ý¬am = & ý ; 2079 rq . þ’ = READ_STORED_LINK_KEY_CP_SIZE ; 2081  `hci_£nd_»q ( dd , & rq , to ); 2082 } } 2084  $hci_wr™e_¡Üed_lšk_key ( dd , bdaddr_t * bdaddr , ušt8_t * key ,  to ) 2086  ý [ WRITE_STORED_LINK_KEY_CP_SIZE + 6 + 16]; 2087  hci_»que¡ rq ; 2089 `mem£t (& ý , 0, (cp)); 2090 ý [0] = 1; 2091 `baýy (( bdaddr_t *è( ý + 1), bdaddr ); 2092 `memýy ( ý + 7, key , 16); 2094 `mem£t (& rq , 0, (rq)); 2095 rq . ogf = OGF_HOST_CTL ; 2096 rq . ocf = OCF_WRITE_STORED_LINK_KEY ; 2097 rq . ý¬am = & ý ; 2098 rq . þ’ = WRITE_STORED_LINK_KEY_CP_SIZE + 6 + 16; 2100  `hci_£nd_»q ( dd , & rq , to ); 2101 } } 2103  $hci_d–‘e_¡Üed_lšk_key ( dd , bdaddr_t * bdaddr , ušt8_t ®l ,  to ) 2105 d–‘e_¡Üed_lšk_key_ý ý ; 2106  hci_»que¡ rq ; 2108 `mem£t (& ý , 0, (cp)); 2109 `baýy (& ý . bdaddr , bdaddr); 2110 ý . d–‘e_®l = ®l ; 2112 `mem£t (& rq , 0, (rq)); 2113 rq . ogf = OGF_HOST_CTL ; 2114 rq . ocf = OCF_DELETE_STORED_LINK_KEY ; 2115 rq . ý¬am = & ý ; 2116 rq . þ’ = DELETE_STORED_LINK_KEY_CP_SIZE ; 2118  `hci_£nd_»q ( dd , & rq , to ); 2119 } } 2121  $hci_auth’tiÿ‹_lšk ( dd , ušt16_t hªdË ,  to ) 2123 auth_»que¡ed_ý ý ; 2124 evt_auth_com¶‘e ½ ; 2125  hci_»que¡ rq ; 2127 ý . hªdË = handle; 2129 rq . ogf = OGF_LINK_CTL ; 2130 rq . ocf = OCF_AUTH_REQUESTED ; 2131 rq . ev’t = EVT_AUTH_COMPLETE ; 2132 rq . ý¬am = & ý ; 2133 rq . þ’ = AUTH_REQUESTED_CP_SIZE ; 2134 rq . ½¬am = & ½ ; 2135 rq . ¾’ = EVT_AUTH_COMPLETE_SIZE ; 2137 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2140 ià( ½ . ¡©us ) { 2141 ”ºo = EIO ; 2146 } } 2148  $hci_’üy±_lšk ( dd , ušt16_t hªdË , ušt8_t ’üy± ,  to ) 2150 £t_cÚn_’üy±_ý ý ; 2151 evt_’üy±_chªge ½ ; 2152  hci_»que¡ rq ; 2154 ý . hªdË = handle; 2155 ý . ’üy± =ƒncrypt; 2157 rq . ogf = OGF_LINK_CTL ; 2158 rq . ocf = OCF_SET_CONN_ENCRYPT ; 2159 rq . ev’t = EVT_ENCRYPT_CHANGE ; 2160 rq . ý¬am = & ý ; 2161 rq . þ’ = SET_CONN_ENCRYPT_CP_SIZE ; 2162 rq . ½¬am = & ½ ; 2163 rq . ¾’ = EVT_ENCRYPT_CHANGE_SIZE ; 2165 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2168 ià( ½ . ¡©us ) { 2169 ”ºo = EIO ; 2174 } } 2176  $hci_chªge_lšk_key ( dd , ušt16_t hªdË ,  to ) 2178 chªge_cÚn_lšk_key_ý ý ; 2179 evt_chªge_cÚn_lšk_key_com¶‘e ½ ; 2180  hci_»que¡ rq ; 2182 ý . hªdË = handle; 2184 rq . ogf = OGF_LINK_CTL ; 2185 rq . ocf = OCF_CHANGE_CONN_LINK_KEY ; 2186 rq . ev’t = EVT_CHANGE_CONN_LINK_KEY_COMPLETE ; 2187 rq . ý¬am = & ý ; 2188 rq . þ’ = CHANGE_CONN_LINK_KEY_CP_SIZE ; 2189 rq . ½¬am = & ½ ; 2190 rq . ¾’ = EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE ; 2192 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2195 ià( ½ . ¡©us ) { 2196 ”ºo = EIO ; 2201 } } 2203  $hci_sw™ch_rÞe ( dd , bdaddr_t * bdaddr , ušt8_t rÞe ,  to ) 2205 sw™ch_rÞe_ý ý ; 2206 evt_rÞe_chªge ½ ; 2207  hci_»que¡ rq ; 2209 `baýy (& ý . bdaddr , bdaddr); 2210 ý . rÞe =„ole; 2211 rq . ogf = OGF_LINK_POLICY ; 2212 rq . ocf = OCF_SWITCH_ROLE ; 2213 rq . ý¬am = & ý ; 2214 rq . þ’ = SWITCH_ROLE_CP_SIZE ; 2215 rq . ½¬am = & ½ ; 2216 rq . ¾’ = EVT_ROLE_CHANGE_SIZE ; 2217 rq . ev’t = EVT_ROLE_CHANGE ; 2219 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2222 ià( ½ . ¡©us ) { 2223 ”ºo = EIO ; 2228 } } 2230  $hci_·rk_mode ( dd , ušt16_t hªdË , ušt16_ˆ max_š‹rv® , 2231 ušt16_t mš_š‹rv® ,  to ) 2233 ·rk_mode_ý ý ; 2234 evt_mode_chªge ½ ; 2235  hci_»que¡ rq ; 2237 `mem£t (& ý , 0,  (cp)); 2238 ý . hªdË = handle; 2239 ý . max_š‹rv® = max_interval; 2240 ý . mš_š‹rv® = min_interval; 2242 `mem£t (& rq , 0,  (rq)); 2243 rq . ogf = OGF_LINK_POLICY ; 2244 rq . ocf = OCF_PARK_MODE ; 2245 rq . ev’t = EVT_MODE_CHANGE ; 2246 rq . ý¬am = & ý ; 2247 rq . þ’ = PARK_MODE_CP_SIZE ; 2248 rq . ½¬am = & ½ ; 2249 rq . ¾’ = EVT_MODE_CHANGE_SIZE ; 2251 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2254 ià( ½ . ¡©us ) { 2255 ”ºo = EIO ; 2260 } } 2262  $hci_ex™_·rk_mode ( dd , ušt16_t hªdË ,  to ) 2264 ex™_·rk_mode_ý ý ; 2265 evt_mode_chªge ½ ; 2266  hci_»que¡ rq ; 2268 `mem£t (& ý , 0,  (cp)); 2269 ý . hªdË = handle; 2271 `mem£t (& rq , 0,  (rq)); 2272 rq . ogf = OGF_LINK_POLICY ; 2273 rq . ocf = OCF_EXIT_PARK_MODE ; 2274 rq . ev’t = EVT_MODE_CHANGE ; 2275 rq . ý¬am = & ý ; 2276 rq . þ’ = EXIT_PARK_MODE_CP_SIZE ; 2277 rq . ½¬am = & ½ ; 2278 rq . ¾’ = EVT_MODE_CHANGE_SIZE ; 2280 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2283 ià( ½ . ¡©us ) { 2284 ”ºo = EIO ; 2289 } } 2291  $hci_»ad_šquœy_sÿn_ty³ ( dd , ušt8_t * ty³ ,  to ) 2293 »ad_šquœy_sÿn_ty³_½ ½ ; 2294  hci_»que¡ rq ; 2296 `mem£t (& rq , 0, (rq)); 2297 rq . ogf = OGF_HOST_CTL ; 2298 rq . ocf = OCF_READ_INQUIRY_SCAN_TYPE ; 2299 rq . ½¬am = & ½ ; 2300 rq . ¾’ = READ_INQUIRY_SCAN_TYPE_RP_SIZE ; 2302 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2305 ià( ½ . ¡©us ) { 2306 ”ºo = EIO ; 2310 * ty³ = ½ .type; 2312 } } 2314  $hci_wr™e_šquœy_sÿn_ty³ ( dd , ušt8_t ty³ ,  to ) 2316 wr™e_šquœy_sÿn_ty³_ý ý ; 2317 wr™e_šquœy_sÿn_ty³_½ ½ ; 2318  hci_»que¡ rq ; 2320 `mem£t (& ý , 0, (cp)); 2321 ý . ty³ =ype; 2323 `mem£t (& rq , 0, (rq)); 2324 rq . ogf = OGF_HOST_CTL ; 2325 rq . ocf = OCF_WRITE_INQUIRY_SCAN_TYPE ; 2326 rq . ý¬am = & ý ; 2327 rq . þ’ = WRITE_INQUIRY_SCAN_TYPE_CP_SIZE ; 2328 rq . ½¬am = & ½ ; 2329 rq . ¾’ = WRITE_INQUIRY_SCAN_TYPE_RP_SIZE ; 2331 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2334 ià( ½ . ¡©us ) { 2335 ”ºo = EIO ; 2340 } } 2342  $hci_»ad_šquœy_mode ( dd , ušt8_t * mode ,  to ) 2344 »ad_šquœy_mode_½ ½ ; 2345  hci_»que¡ rq ; 2347 `mem£t (& rq , 0, (rq)); 2348 rq . ogf = OGF_HOST_CTL ; 2349 rq . ocf = OCF_READ_INQUIRY_MODE ; 2350 rq . ½¬am = & ½ ; 2351 rq . ¾’ = READ_INQUIRY_MODE_RP_SIZE ; 2353 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2356 ià( ½ . ¡©us ) { 2357 ”ºo = EIO ; 2361 * mode = ½ .mode; 2363 } } 2365  $hci_wr™e_šquœy_mode ( dd , ušt8_t mode ,  to ) 2367 wr™e_šquœy_mode_ý ý ; 2368 wr™e_šquœy_mode_½ ½ ; 2369  hci_»que¡ rq ; 2371 `mem£t (& ý , 0, (cp)); 2372 ý . mode = mode; 2374 `mem£t (& rq , 0, (rq)); 2375 rq . ogf = OGF_HOST_CTL ; 2376 rq . ocf = OCF_WRITE_INQUIRY_MODE ; 2377 rq . ý¬am = & ý ; 2378 rq . þ’ = WRITE_INQUIRY_MODE_CP_SIZE ; 2379 rq . ½¬am = & ½ ; 2380 rq . ¾’ = WRITE_INQUIRY_MODE_RP_SIZE ; 2382 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2385 ià( ½ . ¡©us ) { 2386 ”ºo = EIO ; 2391 } } 2393  $hci_»ad_afh_mode ( dd , ušt8_t * mode ,  to ) 2395 »ad_afh_mode_½ ½ ; 2396  hci_»que¡ rq ; 2398 `mem£t (& rq , 0, (rq)); 2399 rq . ogf = OGF_HOST_CTL ; 2400 rq . ocf = OCF_READ_AFH_MODE ; 2401 rq . ½¬am = & ½ ; 2402 rq . ¾’ = READ_AFH_MODE_RP_SIZE ; 2404 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2407 ià( ½ . ¡©us ) { 2408 ”ºo = EIO ; 2412 * mode = ½ .mode; 2414 } } 2416  $hci_wr™e_afh_mode ( dd , ušt8_t mode ,  to ) 2418 wr™e_afh_mode_ý ý ; 2419 wr™e_afh_mode_½ ½ ; 2420  hci_»que¡ rq ; 2422 `mem£t (& ý , 0, (cp)); 2423 ý . mode = mode; 2425 `mem£t (& rq , 0, (rq)); 2426 rq . ogf = OGF_HOST_CTL ; 2427 rq . ocf = OCF_WRITE_AFH_MODE ; 2428 rq . ý¬am = & ý ; 2429 rq . þ’ = WRITE_AFH_MODE_CP_SIZE ; 2430 rq . ½¬am = & ½ ; 2431 rq . ¾’ = WRITE_AFH_MODE_RP_SIZE ; 2433 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2436 ià( ½ . ¡©us ) { 2437 ”ºo = EIO ; 2442 } } 2444  $hci_»ad_ext_šquœy_»¥Ú£ ( dd , ušt8_t * ãc , ušt8_ˆ* d©a ,  to ) 2446 »ad_ext_šquœy_»¥Ú£_½ ½ ; 2447  hci_»que¡ rq ; 2449 `mem£t (& rq , 0, (rq)); 2450 rq . ogf = OGF_HOST_CTL ; 2451 rq . ocf = OCF_READ_EXT_INQUIRY_RESPONSE ; 2452 rq . ½¬am = & ½ ; 2453 rq . ¾’ = READ_EXT_INQUIRY_RESPONSE_RP_SIZE ; 2455 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2458 ià( ½ . ¡©us ) { 2459 ”ºo = EIO ; 2463 * ãc = ½ .fec; 2464 `memýy ( d©a , ½ .d©a, HCI_MAX_EIR_LENGTH ); 2467 } } 2469  $hci_wr™e_ext_šquœy_»¥Ú£ ( dd , ušt8_t ãc , ušt8_ˆ* d©a ,  to ) 2471 wr™e_ext_šquœy_»¥Ú£_ý ý ; 2472 wr™e_ext_šquœy_»¥Ú£_½ ½ ; 2473  hci_»que¡ rq ; 2475 `mem£t (& ý , 0, (cp)); 2476 ý . ãc = fec; 2477 `memýy ( ý . d©a , d©a, HCI_MAX_EIR_LENGTH ); 2479 `mem£t (& rq , 0, (rq)); 2480 rq . ogf = OGF_HOST_CTL ; 2481 rq . ocf = OCF_WRITE_EXT_INQUIRY_RESPONSE ; 2482 rq . ý¬am = & ý ; 2483 rq . þ’ = WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE ; 2484 rq . ½¬am = & ½ ; 2485 rq . ¾’ = WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE ; 2487 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2490 ià( ½ . ¡©us ) { 2491 ”ºo = EIO ; 2496 } } 2498  $hci_»ad_sim¶e_·œšg_mode ( dd , ušt8_t * mode ,  to ) 2500 »ad_sim¶e_·œšg_mode_½ ½ ; 2501  hci_»que¡ rq ; 2503 `mem£t (& rq , 0, (rq)); 2504 rq . ogf = OGF_HOST_CTL ; 2505 rq . ocf = OCF_READ_SIMPLE_PAIRING_MODE ; 2506 rq . ½¬am = & ½ ; 2507 rq . ¾’ = READ_SIMPLE_PAIRING_MODE_RP_SIZE ; 2509 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2512 ià( ½ . ¡©us ) { 2513 ”ºo = EIO ; 2517 * mode = ½ .mode; 2519 } } 2521  $hci_wr™e_sim¶e_·œšg_mode ( dd , ušt8_t mode ,  to ) 2523 wr™e_sim¶e_·œšg_mode_ý ý ; 2524 wr™e_sim¶e_·œšg_mode_½ ½ ; 2525  hci_»que¡ rq ; 2527 `mem£t (& ý , 0, (cp)); 2528 ý . mode = mode; 2530 `mem£t (& rq , 0, (rq)); 2531 rq . ogf = OGF_HOST_CTL ; 2532 rq . ocf = OCF_WRITE_SIMPLE_PAIRING_MODE ; 2533 rq . ý¬am = & ý ; 2534 rq . þ’ = WRITE_SIMPLE_PAIRING_MODE_CP_SIZE ; 2535 rq . ½¬am = & ½ ; 2536 rq . ¾’ = WRITE_SIMPLE_PAIRING_MODE_RP_SIZE ; 2538 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2541 ià( ½ . ¡©us ) { 2542 ”ºo = EIO ; 2547 } } 2549  $hci_»ad_loÿl_oob_d©a ( dd , ušt8_t * hash , ušt8_ˆ* ¿ndomiz” ,  to ) 2551 »ad_loÿl_oob_d©a_½ ½ ; 2552  hci_»que¡ rq ; 2554 `mem£t (& rq , 0, (rq)); 2555 rq . ogf = OGF_HOST_CTL ; 2556 rq . ocf = OCF_READ_LOCAL_OOB_DATA ; 2557 rq . ½¬am = & ½ ; 2558 rq . ¾’ = READ_LOCAL_OOB_DATA_RP_SIZE ; 2560 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2563 ià( ½ . ¡©us ) { 2564 ”ºo = EIO ; 2568 `memýy ( hash , ½ .hash, 16); 2569 `memýy ( ¿ndomiz” , ½ .randomizer, 16); 2571 } } 2573  $hci_»ad_šq_»¥Ú£_tx_pow”_Ëv– ( dd , št8_t * Ëv– ,  to ) 2575 »ad_šq_»¥Ú£_tx_pow”_Ëv–_½ ½ ; 2576  hci_»que¡ rq ; 2578 `mem£t (& rq , 0, (rq)); 2579 rq . ogf = OGF_HOST_CTL ; 2580 rq . ocf = OCF_READ_INQ_RESPONSE_TX_POWER_LEVEL ; 2581 rq . ½¬am = & ½ ; 2582 rq . ¾’ = READ_INQ_RESPONSE_TX_POWER_LEVEL_RP_SIZE ; 2584 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2587 ià( ½ . ¡©us ) { 2588 ”ºo = EIO ; 2592 * Ëv– = ½ .level; 2594 } } 2596  $hci_»ad_šquœy_Œªsm™_pow”_Ëv– ( dd , št8_t * Ëv– ,  to ) 2598  `hci_»ad_šq_»¥Ú£_tx_pow”_Ëv– ( dd , Ëv– , to ); 2599 } } 2601  $hci_wr™e_šquœy_Œªsm™_pow”_Ëv– ( dd , št8_t Ëv– ,  to ) 2603 wr™e_šquœy_Œªsm™_pow”_Ëv–_ý ý ; 2604 wr™e_šquœy_Œªsm™_pow”_Ëv–_½ ½ ; 2605  hci_»que¡ rq ; 2607 `mem£t (& ý , 0, (cp)); 2608 ý . Ëv– =†evel; 2610 `mem£t (& rq , 0, (rq)); 2611 rq . ogf = OGF_HOST_CTL ; 2612 rq . ocf = OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL ; 2613 rq . ý¬am = & ý ; 2614 rq . þ’ = WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_CP_SIZE ; 2615 rq . ½¬am = & ½ ; 2616 rq . ¾’ = WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE ; 2618 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2621 ià( ½ . ¡©us ) { 2622 ”ºo = EIO ; 2627 } } 2629  $hci_»ad_Œªsm™_pow”_Ëv– ( dd , ušt16_t hªdË , ušt8_t ty³ , 2630 št8_t * Ëv– ,  to ) 2632 »ad_Œªsm™_pow”_Ëv–_ý ý ; 2633 »ad_Œªsm™_pow”_Ëv–_½ ½ ; 2634  hci_»que¡ rq ; 2636 `mem£t (& ý , 0, (cp)); 2637 ý . hªdË = handle; 2638 ý . ty³ =ype; 2640 `mem£t (& rq , 0, (rq)); 2641 rq . ogf = OGF_HOST_CTL ; 2642 rq . ocf = OCF_READ_TRANSMIT_POWER_LEVEL ; 2643 rq . ý¬am = & ý ; 2644 rq . þ’ = READ_TRANSMIT_POWER_LEVEL_CP_SIZE ; 2645 rq . ½¬am = & ½ ; 2646 rq . ¾’ = READ_TRANSMIT_POWER_LEVEL_RP_SIZE ; 2648 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2651 ià( ½ . ¡©us ) { 2652 ”ºo = EIO ; 2656 * Ëv– = ½ .level; 2658 } } 2660  $hci_»ad_lšk_pÞicy ( dd , ušt16_t hªdË , ušt16_ˆ* pÞicy ,  to ) 2662 »ad_lšk_pÞicy_½ ½ ; 2663  hci_»que¡ rq ; 2665 `mem£t (& rq , 0, (rq)); 2666 rq . ogf = OGF_LINK_POLICY ; 2667 rq . ocf = OCF_READ_LINK_POLICY ; 2668 rq . ý¬am = & hªdË ; 2669 rq . þ’ = 2; 2670 rq . ½¬am = & ½ ; 2671 rq . ¾’ = READ_LINK_POLICY_RP_SIZE ; 2673 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2676 ià( ½ . ¡©us ) { 2677 ”ºo = EIO ; 2681 * pÞicy = ½ .policy; 2683 } } 2685  $hci_wr™e_lšk_pÞicy ( dd , ušt16_t hªdË , ušt16_ˆ pÞicy ,  to ) 2687 wr™e_lšk_pÞicy_ý ý ; 2688 wr™e_lšk_pÞicy_½ ½ ; 2689  hci_»que¡ rq ; 2691 `mem£t (& ý , 0, (cp)); 2692 ý . hªdË = handle; 2693 ý . pÞicy =…olicy; 2695 `mem£t (& rq , 0, (rq)); 2696 rq . ogf = OGF_LINK_POLICY ; 2697 rq . ocf = OCF_WRITE_LINK_POLICY ; 2698 rq . ý¬am = & ý ; 2699 rq . þ’ = WRITE_LINK_POLICY_CP_SIZE ; 2700 rq . ½¬am = & ½ ; 2701 rq . ¾’ = WRITE_LINK_POLICY_RP_SIZE ; 2703 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2706 ià( ½ . ¡©us ) { 2707 ”ºo = EIO ; 2712 } } 2714  $hci_»ad_lšk_su³rvisiÚ_timeout ( dd , ušt16_t hªdË , 2715 ušt16_t * timeout ,  to ) 2717 »ad_lšk_su³rvisiÚ_timeout_½ ½ ; 2718  hci_»que¡ rq ; 2720 `mem£t (& rq , 0, (rq)); 2721 rq . ogf = OGF_HOST_CTL ; 2722 rq . ocf = OCF_READ_LINK_SUPERVISION_TIMEOUT ; 2723 rq . ý¬am = & hªdË ; 2724 rq . þ’ = 2; 2725 rq . ½¬am = & ½ ; 2726 rq . ¾’ = READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE ; 2728 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2731 ià( ½ . ¡©us ) { 2732 ”ºo = EIO ; 2736 * timeout = ½ .timeout; 2738 } } 2740  $hci_wr™e_lšk_su³rvisiÚ_timeout ( dd , ušt16_t hªdË , 2741 ušt16_t timeout ,  to ) 2743 wr™e_lšk_su³rvisiÚ_timeout_ý ý ; 2744 wr™e_lšk_su³rvisiÚ_timeout_½ ½ ; 2745  hci_»que¡ rq ; 2747 `mem£t (& ý , 0, (cp)); 2748 ý . hªdË = handle; 2749 ý . timeout =imeout; 2751 `mem£t (& rq , 0, (rq)); 2752 rq . ogf = OGF_HOST_CTL ; 2753 rq . ocf = OCF_WRITE_LINK_SUPERVISION_TIMEOUT ; 2754 rq . ý¬am = & ý ; 2755 rq . þ’ = WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE ; 2756 rq . ½¬am = & ½ ; 2757 rq . ¾’ = WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE ; 2759 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2762 ià( ½ . ¡©us ) { 2763 ”ºo = EIO ; 2768 } } 2770  $hci_£t_afh_þassifiÿtiÚ ( dd , ušt8_t * m­ ,  to ) 2772 £t_afh_þassifiÿtiÚ_ý ý ; 2773 £t_afh_þassifiÿtiÚ_½ ½ ; 2774  hci_»que¡ rq ; 2776 `mem£t (& ý , 0, (cp)); 2777 `memýy ( ý . m­ , map, 10); 2779 `mem£t (& rq , 0, (rq)); 2780 rq . ogf = OGF_HOST_CTL ; 2781 rq . ocf = OCF_SET_AFH_CLASSIFICATION ; 2782 rq . ý¬am = & ý ; 2783 rq . þ’ = SET_AFH_CLASSIFICATION_CP_SIZE ; 2784 rq . ½¬am = & ½ ; 2785 rq . ¾’ = SET_AFH_CLASSIFICATION_RP_SIZE ; 2787 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2790 ià( ½ . ¡©us ) { 2791 ”ºo = EIO ; 2796 } } 2798  $hci_»ad_lšk_qu®™y ( dd , ušt16_t hªdË , ušt8_t * lšk_qu®™y , 2799  to ) 2801 »ad_lšk_qu®™y_½ ½ ; 2802  hci_»que¡ rq ; 2804 `mem£t (& rq , 0, (rq)); 2805 rq . ogf = OGF_STATUS_PARAM ; 2806 rq . ocf = OCF_READ_LINK_QUALITY ; 2807 rq . ý¬am = & hªdË ; 2808 rq . þ’ = 2; 2809 rq . ½¬am = & ½ ; 2810 rq . ¾’ = READ_LINK_QUALITY_RP_SIZE ; 2812 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2815 ià( ½ . ¡©us ) { 2816 ”ºo = EIO ; 2820 * lšk_qu®™y = ½ .link_quality; 2822 } } 2824  $hci_»ad_rssi ( dd , ušt16_t hªdË , št8_t * rssi ,  to ) 2826 »ad_rssi_½ ½ ; 2827  hci_»que¡ rq ; 2829 `mem£t (& rq , 0, (rq)); 2830 rq . ogf = OGF_STATUS_PARAM ; 2831 rq . ocf = OCF_READ_RSSI ; 2832 rq . ý¬am = & hªdË ; 2833 rq . þ’ = 2; 2834 rq . ½¬am = & ½ ; 2835 rq . ¾’ = READ_RSSI_RP_SIZE ; 2837 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2840 ià( ½ . ¡©us ) { 2841 ”ºo = EIO ; 2845 * rssi = ½ .rssi; 2847 } } 2849  $hci_»ad_afh_m­ ( dd , ušt16_t hªdË , ušt8_t * mode , ušt8_ˆ* m­ , 2850  to ) 2852 »ad_afh_m­_½ ½ ; 2853  hci_»que¡ rq ; 2855 `mem£t (& rq , 0, (rq)); 2856 rq . ogf = OGF_STATUS_PARAM ; 2857 rq . ocf = OCF_READ_AFH_MAP ; 2858 rq . ý¬am = & hªdË ; 2859 rq . þ’ = 2; 2860 rq . ½¬am = & ½ ; 2861 rq . ¾’ = READ_AFH_MAP_RP_SIZE ; 2863 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2866 ià( ½ . ¡©us ) { 2867 ”ºo = EIO ; 2871 * mode = ½ .mode; 2872 `memýy ( m­ , ½ .map, 10); 2874 } } 2876  $hci_»ad_þock ( dd , ušt16_t hªdË , ušt8_t which , ušt32_t * þock , 2877 ušt16_t * accu¿cy ,  to ) 2879 »ad_þock_ý ý ; 2880 »ad_þock_½ ½ ; 2881  hci_»que¡ rq ; 2883 `mem£t (& ý , 0, (cp)); 2884 ý . hªdË = handle; 2885 ý . which_þock = which ; 2887 `mem£t (& rq , 0, (rq)); 2888 rq . ogf = OGF_STATUS_PARAM ; 2889 rq . ocf = OCF_READ_CLOCK ; 2890 rq . ý¬am = & ý ; 2891 rq . þ’ = READ_CLOCK_CP_SIZE ; 2892 rq . ½¬am = & ½ ; 2893 rq . ¾’ = READ_CLOCK_RP_SIZE ; 2895 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2898 ià( ½ . ¡©us ) { 2899 ”ºo = EIO ; 2903 * þock = ½ .clock; 2904 * accu¿cy = ½ .accuracy; 2906 } } 2908  $hci_Ë_£t_sÿn_’abË ( dd , ušt8_t ’abË , ušt8_ˆ fž‹r_dup ,  to ) 2910  hci_»que¡ rq ; 2911 Ë_£t_sÿn_’abË_ý sÿn_ý ; 2912 ušt8_t ¡©us ; 2914 `mem£t (& sÿn_ý , 0, (scan_cp)); 2915 sÿn_ý . ’abË =ƒnable; 2916 sÿn_ý . fž‹r_dup = filter_dup; 2918 `mem£t (& rq , 0, (rq)); 2919 rq . ogf = OGF_LE_CTL ; 2920 rq . ocf = OCF_LE_SET_SCAN_ENABLE ; 2921 rq . ý¬am = & sÿn_ý ; 2922 rq . þ’ = LE_SET_SCAN_ENABLE_CP_SIZE ; 2923 rq . ½¬am = & ¡©us ; 2924 rq . ¾’ = 1; 2926 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2929 ià( ¡©us ) { 2930 ”ºo = EIO ; 2935 } } 2937  $hci_Ë_£t_sÿn_·¿m‘”s ( dd , ušt8_t ty³ , 2938 ušt16_t š‹rv® , ušt16_ˆ wšdow , 2939 ušt8_t own_ty³ , ušt8_ˆ fž‹r ,  to ) 2941  hci_»que¡ rq ; 2942 Ë_£t_sÿn_·¿m‘”s_ý ·¿m_ý ; 2943 ušt8_t ¡©us ; 2945 `mem£t (& ·¿m_ý , 0, (param_cp)); 2946 ·¿m_ý . ty³ =ype; 2947 ·¿m_ý . š‹rv® = interval; 2948 ·¿m_ý . wšdow = window; 2949 ·¿m_ý . own_bdaddr_ty³ = own_ty³ ; 2950 ·¿m_ý . fž‹r = filter; 2952 `mem£t (& rq , 0, (rq)); 2953 rq . ogf = OGF_LE_CTL ; 2954 rq . ocf = OCF_LE_SET_SCAN_PARAMETERS ; 2955 rq . ý¬am = & ·¿m_ý ; 2956 rq . þ’ = LE_SET_SCAN_PARAMETERS_CP_SIZE ; 2957 rq . ½¬am = & ¡©us ; 2958 rq . ¾’ = 1; 2960 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2963 ià( ¡©us ) { 2964 ”ºo = EIO ; 2969 } } 2971  $hci_Ë_£t_adv”ti£_’abË ( dd , ušt8_t ’abË ,  to ) 2973  hci_»que¡ rq ; 2974 Ë_£t_adv”ti£_’abË_ý adv_ý ; 2975 ušt8_t ¡©us ; 2977 `mem£t (& adv_ý , 0, (adv_cp)); 2978 adv_ý . ’abË =ƒnable; 2980 `mem£t (& rq , 0, (rq)); 2981 rq . ogf = OGF_LE_CTL ; 2982 rq . ocf = OCF_LE_SET_ADVERTISE_ENABLE ; 2983 rq . ý¬am = & adv_ý ; 2984 rq . þ’ = LE_SET_ADVERTISE_ENABLE_CP_SIZE ; 2985 rq . ½¬am = & ¡©us ; 2986 rq . ¾’ = 1; 2988 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 2991 ià( ¡©us ) { 2992 ”ºo = EIO ; 2997 } } 2999  $hci_Ë_ü—‹_cÚn ( dd , ušt16_t š‹rv® , ušt16_ˆ wšdow , 3000 ušt8_t š™ŸtÜ_fž‹r , ušt8_ˆ ³”_bdaddr_ty³ , 3001 bdaddr_t ³”_bdaddr , ušt8_t own_bdaddr_ty³ , 3002 ušt16_t mš_š‹rv® , ušt16_ˆ max_š‹rv® , 3003 ušt16_t Ï‹ncy , ušt16_ˆ su³rvisiÚ_timeout , 3004 ušt16_t mš_û_Ëngth , ušt16_ˆ max_û_Ëngth , 3005 ušt16_t * hªdË ,  to ) 3007  hci_»que¡ rq ; 3008 Ë_ü—‹_cÚÃùiÚ_ý ü—‹_cÚn_ý ; 3009 evt_Ë_cÚÃùiÚ_com¶‘e cÚn_com¶‘e_½ ; 3011 `mem£t (& ü—‹_cÚn_ý , 0, (create_conn_cp)); 3012 ü—‹_cÚn_ý . š‹rv® = interval; 3013 ü—‹_cÚn_ý . wšdow = window; 3014 ü—‹_cÚn_ý . š™ŸtÜ_fž‹r = initiator_filter; 3015 ü—‹_cÚn_ý . ³”_bdaddr_ty³ =…eer_bdaddr_type; 3016 ü—‹_cÚn_ý . ³”_bdaddr =…eer_bdaddr; 3017 ü—‹_cÚn_ý . own_bdaddr_ty³ = own_bdaddr_type; 3018 ü—‹_cÚn_ý . mš_š‹rv® = min_interval; 3019 ü—‹_cÚn_ý . max_š‹rv® = max_interval; 3020 ü—‹_cÚn_ý . Ï‹ncy =†atency; 3021 ü—‹_cÚn_ý . su³rvisiÚ_timeout = supervision_timeout; 3022 ü—‹_cÚn_ý . mš_û_Ëngth = min_ce_length; 3023 ü—‹_cÚn_ý . max_û_Ëngth = max_ce_length; 3025 `mem£t (& rq , 0, (rq)); 3026 rq . ogf = OGF_LE_CTL ; 3027 rq . ocf = OCF_LE_CREATE_CONN ; 3028 rq . ev’t = EVT_LE_CONN_COMPLETE ; 3029 rq . ý¬am = & ü—‹_cÚn_ý ; 3030 rq . þ’ = LE_CREATE_CONN_CP_SIZE ; 3031 rq . ½¬am = & cÚn_com¶‘e_½ ; 3032 rq . ¾’ = EVT_CONN_COMPLETE_SIZE ; 3034 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 3037 ià( cÚn_com¶‘e_½ . ¡©us ) { 3038 ”ºo = EIO ; 3042 ià( hªdË ) 3043 * hªdË = cÚn_com¶‘e_½ .handle; 3046 } } 3048  $hci_Ë_cÚn_upd©e ( dd , ušt16_t hªdË , ušt16_ˆ mš_š‹rv® , 3049 ušt16_t max_š‹rv® , ušt16_ˆ Ï‹ncy , 3050 ušt16_t su³rvisiÚ_timeout ,  to ) 3052 evt_Ë_cÚÃùiÚ_upd©e_com¶‘e evt ; 3053 Ë_cÚÃùiÚ_upd©e_ý ý ; 3054  hci_»que¡ rq ; 3056 `mem£t (& ý , 0, (cp)); 3057 ý . hªdË = handle; 3058 ý . mš_š‹rv® = min_interval; 3059 ý . max_š‹rv® = max_interval; 3060 ý . Ï‹ncy =†atency; 3061 ý . su³rvisiÚ_timeout = supervision_timeout; 3062 ý . mš_û_Ëngth = `htobs (0x0001); 3063 ý . max_û_Ëngth = `htobs (0x0001); 3065 `mem£t (& rq , 0, (rq)); 3066 rq . ogf = OGF_LE_CTL ; 3067 rq . ocf = OCF_LE_CONN_UPDATE ; 3068 rq . ý¬am = & ý ; 3069 rq . þ’ = LE_CONN_UPDATE_CP_SIZE ; 3070 rq . ev’t = EVT_LE_CONN_UPDATE_COMPLETE ; 3071 rq . ½¬am = & evt ; 3072 rq . ¾’ = ( evt ); 3074 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 3077 ià( evt . ¡©us ) { 3078 ”ºo = EIO ; 3083 } } 3085  $hci_Ë_»ad_»mÙe_ã©u»s ( dd , ušt16_t hªdË , ušt8_t * ã©u»s ,  to ) 3087 evt_Ë_»ad_»mÙe_u£d_ã©u»s_com¶‘e ½ ; 3088 Ë_»ad_»mÙe_u£d_ã©u»s_ý ý ; 3089  hci_»que¡ rq ; 3091 `mem£t (& ý , 0, (cp)); 3092 ý . hªdË = handle; 3094 `mem£t (& rq , 0, (rq)); 3095 rq . ogf = OGF_LE_CTL ; 3096 rq . ocf = OCF_LE_READ_REMOTE_USED_FEATURES ; 3097 rq . ev’t = EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE ; 3098 rq . ý¬am = & ý ; 3099 rq . þ’ = LE_READ_REMOTE_USED_FEATURES_CP_SIZE ; 3100 rq . ½¬am = & ½ ; 3101 rq . ¾’ = EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE_SIZE ; 3103 ià( `hci_£nd_»q ( dd , & rq , to ) < 0) 3106 ià( ½ . ¡©us ) { 3107 ”ºo = EIO ; 3111 ià( ã©u»s ) 3112 `memýy ( ã©u»s , ½ .features, 8); 3115 } } @lib/hci.h 26 #iâdeà __HCI_H 27  #__HCI_H ) 29 #ifdeà __ýlu¥lus 33  ~ 35  #HCI_MAX_DEV 16 ) 37  #HCI_MAX_ACL_SIZE (1492 + 4) ) 38  #HCI_MAX_SCO_SIZE 255 ) 39  #HCI_MAX_EVENT_SIZE 260 ) 40  #HCI_MAX_FRAME_SIZE ( HCI_MAX_ACL_SIZE + 4) ) 43  #HCI_DEV_REG 1 ) 44  #HCI_DEV_UNREG 2 ) 45  #HCI_DEV_UP 3 ) 46  #HCI_DEV_DOWN 4 ) 47  #HCI_DEV_SUSPEND 5 ) 48  #HCI_DEV_RESUME 6 ) 51  #HCI_VIRTUAL 0 ) 52  #HCI_USB 1 ) 53  #HCI_PCCARD 2 ) 54  #HCI_UART 3 ) 55  #HCI_RS232 4 ) 56  #HCI_PCI 5 ) 57  #HCI_SDIO 6 ) 60  #HCI_BREDR 0x00 ) 61  #HCI_AMP 0x01 ) 65 HCI_UP , 66 HCI_INIT , 67 HCI_RUNNING , 69 HCI_PSCAN , 70 HCI_ISCAN , 71 HCI_AUTH , 72 HCI_ENCRYPT , 73 HCI_INQUIRY , 75 HCI_RAW , 80 LE_PUBLIC_ADDRESS = 0x00, 81 LE_RANDOM_ADDRESS = 0x01 85  #HCIDEVUP `_IOW ('H', 201, ) ) 86  #HCIDEVDOWN `_IOW ('H', 202, ) ) 87  #HCIDEVRESET `_IOW ('H', 203, ) ) 88  #HCIDEVRESTAT `_IOW ('H', 204, ) ) 90  #HCIGETDEVLIST `_IOR ('H', 210, ) ) 91  #HCIGETDEVINFO `_IOR ('H', 211, ) ) 92  #HCIGETCONNLIST `_IOR ('H', 212, ) ) 93  #HCIGETCONNINFO `_IOR ('H', 213, ) ) 94  #HCIGETAUTHINFO `_IOR ('H', 215, ) ) 96  #HCISETRAW `_IOW ('H', 220, ) ) 97  #HCISETSCAN `_IOW ('H', 221, ) ) 98  #HCISETAUTH `_IOW ('H', 222, ) ) 99  #HCISETENCRYPT `_IOW ('H', 223, ) ) 100  #HCISETPTYPE `_IOW ('H', 224, ) ) 101  #HCISETLINKPOL `_IOW ('H', 225, ) ) 102  #HCISETLINKMODE `_IOW ('H', 226, ) ) 103  #HCISETACLMTU `_IOW ('H', 227, ) ) 104  #HCISETSCOMTU `_IOW ('H', 228, ) ) 106  #HCIBLOCKADDR `_IOW ('H', 230, ) ) 107  #HCIUNBLOCKADDR `_IOW ('H', 231, ) ) 109  #HCIINQUIRY `_IOR ('H', 240, ) ) 111 #iâdeà __NO_HCI_DEFS 114  #HCI_COMMAND_PKT 0x01 ) 115  #HCI_ACLDATA_PKT 0x02 ) 116  #HCI_SCODATA_PKT 0x03 ) 117  #HCI_EVENT_PKT 0x04 ) 118  #HCI_VENDOR_PKT 0xff ) 121  #HCI_2DH1 0x0002 ) 122  #HCI_3DH1 0x0004 ) 123  #HCI_DM1 0x0008 ) 124  #HCI_DH1 0x0010 ) 125  #HCI_2DH3 0x0100 ) 126  #HCI_3DH3 0x0200 ) 127  #HCI_DM3 0x0400 ) 128  #HCI_DH3 0x0800 ) 129  #HCI_2DH5 0x1000 ) 130  #HCI_3DH5 0x2000 ) 131  #HCI_DM5 0x4000 ) 132  #HCI_DH5 0x8000 ) 134  #HCI_HV1 0x0020 ) 135  #HCI_HV2 0x0040 ) 136  #HCI_HV3 0x0080 ) 138  #HCI_EV3 0x0008 ) 139  #HCI_EV4 0x0010 ) 140  #HCI_EV5 0x0020 ) 141  #HCI_2EV3 0x0040 ) 142  #HCI_3EV3 0x0080 ) 143  #HCI_2EV5 0x0100 ) 144  #HCI_3EV5 0x0200 ) 146  #SCO_PTYPE_MASK ( HCI_HV1 | HCI_HV2 | HCI_HV3 ) ) 147  #ACL_PTYPE_MASK ( HCI_DM1 | HCI_DH1 | HCI_DM3 | HCI_DH3 | HCI_DM5 | HCI_DH5 ) ) 150  #HCI_UNKNOWN_COMMAND 0x01 ) 151  #HCI_NO_CONNECTION 0x02 ) 152  #HCI_HARDWARE_FAILURE 0x03 ) 153  #HCI_PAGE_TIMEOUT 0x04 ) 154  #HCI_AUTHENTICATION_FAILURE 0x05 ) 155  #HCI_PIN_OR_KEY_MISSING 0x06 ) 156  #HCI_MEMORY_FULL 0x07 ) 157  #HCI_CONNECTION_TIMEOUT 0x08 ) 158  #HCI_MAX_NUMBER_OF_CONNECTIONS 0x09 ) 159  #HCI_MAX_NUMBER_OF_SCO_CONNECTIONS 0x0a ) 160  #HCI_ACL_CONNECTION_EXISTS 0x0b ) 161  #HCI_COMMAND_DISALLOWED 0x0c ) 162  #HCI_REJECTED_LIMITED_RESOURCES 0x0d ) 163  #HCI_REJECTED_SECURITY 0x0e ) 164  #HCI_REJECTED_PERSONAL 0x0f ) 165  #HCI_HOST_TIMEOUT 0x10 ) 166  #HCI_UNSUPPORTED_FEATURE 0x11 ) 167  #HCI_INVALID_PARAMETERS 0x12 ) 168  #HCI_OE_USER_ENDED_CONNECTION 0x13 ) 169  #HCI_OE_LOW_RESOURCES 0x14 ) 170  #HCI_OE_POWER_OFF 0x15 ) 171  #HCI_CONNECTION_TERMINATED 0x16 ) 172  #HCI_REPEATED_ATTEMPTS 0x17 ) 173  #HCI_PAIRING_NOT_ALLOWED 0x18 ) 174  #HCI_UNKNOWN_LMP_PDU 0x19 ) 175  #HCI_UNSUPPORTED_REMOTE_FEATURE 0x1a ) 176  #HCI_SCO_OFFSET_REJECTED 0x1b ) 177  #HCI_SCO_INTERVAL_REJECTED 0x1c ) 178  #HCI_AIR_MODE_REJECTED 0x1d ) 179  #HCI_INVALID_LMP_PARAMETERS 0x1e ) 180  #HCI_UNSPECIFIED_ERROR 0x1f ) 181  #HCI_UNSUPPORTED_LMP_PARAMETER_VALUE 0x20 ) 182  #HCI_ROLE_CHANGE_NOT_ALLOWED 0x21 ) 183  #HCI_LMP_RESPONSE_TIMEOUT 0x22 ) 184  #HCI_LMP_ERROR_TRANSACTION_COLLISION 0x23 ) 185  #HCI_LMP_PDU_NOT_ALLOWED 0x24 ) 186  #HCI_ENCRYPTION_MODE_NOT_ACCEPTED 0x25 ) 187  #HCI_UNIT_LINK_KEY_USED 0x26 ) 188  #HCI_QOS_NOT_SUPPORTED 0x27 ) 189  #HCI_INSTANT_PASSED 0x28 ) 190  #HCI_PAIRING_NOT_SUPPORTED 0x29 ) 191  #HCI_TRANSACTION_COLLISION 0x2a ) 192  #HCI_QOS_UNACCEPTABLE_PARAMETER 0x2c ) 193  #HCI_QOS_REJECTED 0x2d ) 194  #HCI_CLASSIFICATION_NOT_SUPPORTED 0x2e ) 195  #HCI_INSUFFICIENT_SECURITY 0x2f ) 196  #HCI_PARAMETER_OUT_OF_RANGE 0x30 ) 197  #HCI_ROLE_SWITCH_PENDING 0x32 ) 198  #HCI_SLOT_VIOLATION 0x34 ) 199  #HCI_ROLE_SWITCH_FAILED 0x35 ) 200  #HCI_EIR_TOO_LARGE 0x36 ) 201  #HCI_SIMPLE_PAIRING_NOT_SUPPORTED 0x37 ) 202  #HCI_HOST_BUSY_PAIRING 0x38 ) 205  #ACL_START_NO_FLUSH 0x00 ) 206  #ACL_CONT 0x01 ) 207  #ACL_START 0x02 ) 208  #ACL_ACTIVE_BCAST 0x04 ) 209  #ACL_PICO_BCAST 0x08 ) 212  #SCO_LINK 0x00 ) 213  #ACL_LINK 0x01 ) 214  #ESCO_LINK 0x02 ) 217  #LMP_3SLOT 0x01 ) 218  #LMP_5SLOT 0x02 ) 219  #LMP_ENCRYPT 0x04 ) 220  #LMP_SOFFSET 0x08 ) 221  #LMP_TACCURACY 0x10 ) 222  #LMP_RSWITCH 0x20 ) 223  #LMP_HOLD 0x40 ) 224  #LMP_SNIFF 0x80 ) 226  #LMP_PARK 0x01 ) 227  #LMP_RSSI 0x02 ) 228  #LMP_QUALITY 0x04 ) 229  #LMP_SCO 0x08 ) 230  #LMP_HV2 0x10 ) 231  #LMP_HV3 0x20 ) 232  #LMP_ULAW 0x40 ) 233  #LMP_ALAW 0x80 ) 235  #LMP_CVSD 0x01 ) 236  #LMP_PSCHEME 0x02 ) 237  #LMP_PCONTROL 0x04 ) 238  #LMP_TRSP_SCO 0x08 ) 239  #LMP_BCAST_ENC 0x80 ) 241  #LMP_EDR_ACL_2M 0x02 ) 242  #LMP_EDR_ACL_3M 0x04 ) 243  #LMP_ENH_ISCAN 0x08 ) 244  #LMP_ILACE_ISCAN 0x10 ) 245  #LMP_ILACE_PSCAN 0x20 ) 246  #LMP_RSSI_INQ 0x40 ) 247  #LMP_ESCO 0x80 ) 249  #LMP_EV4 0x01 ) 250  #LMP_EV5 0x02 ) 251  #LMP_AFH_CAP_SLV 0x08 ) 252  #LMP_AFH_CLS_SLV 0x10 ) 253  #LMP_NO_BREDR 0x20 ) 254  #LMP_LE 0x40 ) 255  #LMP_EDR_3SLOT 0x80 ) 257  #LMP_EDR_5SLOT 0x01 ) 258  #LMP_SNIFF_SUBR 0x02 ) 259  #LMP_PAUSE_ENC 0x04 ) 260  #LMP_AFH_CAP_MST 0x08 ) 261  #LMP_AFH_CLS_MST 0x10 ) 262  #LMP_EDR_ESCO_2M 0x20 ) 263  #LMP_EDR_ESCO_3M 0x40 ) 264  #LMP_EDR_3S_ESCO 0x80 ) 266  #LMP_EXT_INQ 0x01 ) 267  #LMP_LE_BREDR 0x02 ) 268  #LMP_SIMPLE_PAIR 0x08 ) 269  #LMP_ENCAPS_PDU 0x10 ) 270  #LMP_ERR_DAT_REP 0x20 ) 271  #LMP_NFLUSH_PKTS 0x40 ) 273  #LMP_LSTO 0x01 ) 274  #LMP_INQ_TX_PWR 0x02 ) 275  #LMP_EPC 0x04 ) 276  #LMP_EXT_FEAT 0x80 ) 279  #LMP_HOST_SSP 0x01 ) 280  #LMP_HOST_LE 0x02 ) 281  #LMP_HOST_LE_BREDR 0x04 ) 284  #HCI_LP_RSWITCH 0x0001 ) 285  #HCI_LP_HOLD 0x0002 ) 286  #HCI_LP_SNIFF 0x0004 ) 287  #HCI_LP_PARK 0x0008 ) 290  #HCI_LM_ACCEPT 0x8000 ) 291  #HCI_LM_MASTER 0x0001 ) 292  #HCI_LM_AUTH 0x0002 ) 293  #HCI_LM_ENCRYPT 0x0004 ) 294  #HCI_LM_TRUSTED 0x0008 ) 295  #HCI_LM_RELIABLE 0x0010 ) 296  #HCI_LM_SECURE 0x0020 ) 299  #HCI_LK_COMBINATION 0x00 ) 300  #HCI_LK_LOCAL_UNIT 0x01 ) 301  #HCI_LK_REMOTE_UNIT 0x02 ) 302  #HCI_LK_DEBUG_COMBINATION 0x03 ) 303  #HCI_LK_UNAUTH_COMBINATION 0x04 ) 304  #HCI_LK_AUTH_COMBINATION 0x05 ) 305  #HCI_LK_CHANGED_COMBINATION 0x06 ) 306  #HCI_LK_INVALID 0xFF ) 311  #OGF_LINK_CTL 0x01 ) 313  #OCF_INQUIRY 0x0001 ) 315 ušt8_t Ïp [3]; 316 ušt8_t Ëngth ; 317 ušt8_t num_r¥ ; 318 } t__©Œibu‹__ (( t·cked )è tšquœy_ý ; 319  #INQUIRY_CP_SIZE 5 ) 322 ušt8_t ¡©us ; 323 bdaddr_t bdaddr ; 324 } t__©Œibu‹__ (( t·cked )è t¡©us_bdaddr_½ ; 325  #STATUS_BDADDR_RP_SIZE 7 ) 327  #OCF_INQUIRY_CANCEL 0x0002 ) 329  #OCF_PERIODIC_INQUIRY 0x0003 ) 331 ušt16_t max_³riod ; 332 ušt16_t mš_³riod ; 333 ušt8_t Ïp [3]; 334 ušt8_t Ëngth ; 335 ušt8_t num_r¥ ; 336 } t__©Œibu‹__ (( t·cked )è t³riodic_šquœy_ý ; 337  #PERIODIC_INQUIRY_CP_SIZE 9 ) 339  #OCF_EXIT_PERIODIC_INQUIRY 0x0004 ) 341  #OCF_CREATE_CONN 0x0005 ) 343 bdaddr_t bdaddr ; 344 ušt16_t pkt_ty³ ; 345 ušt8_t psÿn_»p_mode ; 346 ušt8_t psÿn_mode ; 347 ušt16_t þock_off£t ; 348 ušt8_t rÞe_sw™ch ; 349 } t__©Œibu‹__ (( t·cked )è tü—‹_cÚn_ý ; 350  #CREATE_CONN_CP_SIZE 13 ) 352  #OCF_DISCONNECT 0x0006 ) 354 ušt16_t hªdË ; 355 ušt8_t »asÚ ; 356 } t__©Œibu‹__ (( t·cked )è tdiscÚÃù_ý ; 357  #DISCONNECT_CP_SIZE 3 ) 359  #OCF_ADD_SCO 0x0007 ) 361 ušt16_t hªdË ; 362 ušt16_t pkt_ty³ ; 363 } t__©Œibu‹__ (( t·cked )è tadd_sco_ý ; 364  #ADD_SCO_CP_SIZE 4 ) 366  #OCF_CREATE_CONN_CANCEL 0x0008 ) 368 bdaddr_t bdaddr ; 369 } t__©Œibu‹__ (( t·cked )è tü—‹_cÚn_ÿnûl_ý ; 370  #CREATE_CONN_CANCEL_CP_SIZE 6 ) 372  #OCF_ACCEPT_CONN_REQ 0x0009 ) 374 bdaddr_t bdaddr ; 375 ušt8_t rÞe ; 376 } t__©Œibu‹__ (( t·cked )è tacû±_cÚn_»q_ý ; 377  #ACCEPT_CONN_REQ_CP_SIZE 7 ) 379  #OCF_REJECT_CONN_REQ 0x000A ) 381 bdaddr_t bdaddr ; 382 ušt8_t »asÚ ; 383 } t__©Œibu‹__ (( t·cked )è t»jeù_cÚn_»q_ý ; 384  #REJECT_CONN_REQ_CP_SIZE 7 ) 386  #OCF_LINK_KEY_REPLY 0x000B ) 388 bdaddr_t bdaddr ; 389 ušt8_t lšk_key [16]; 390 } t__©Œibu‹__ (( t·cked )è tlšk_key_»¶y_ý ; 391  #LINK_KEY_REPLY_CP_SIZE 22 ) 393  #OCF_LINK_KEY_NEG_REPLY 0x000C ) 395  #OCF_PIN_CODE_REPLY 0x000D ) 397 bdaddr_t bdaddr ; 398 ušt8_t pš_Ën ; 399 ušt8_t pš_code [16]; 400 } t__©Œibu‹__ (( t·cked )è tpš_code_»¶y_ý ; 401  #PIN_CODE_REPLY_CP_SIZE 23 ) 403  #OCF_PIN_CODE_NEG_REPLY 0x000E ) 405  #OCF_SET_CONN_PTYPE 0x000F ) 407 ušt16_t hªdË ; 408 ušt16_t pkt_ty³ ; 409 } t__©Œibu‹__ (( t·cked )è t£t_cÚn_±y³_ý ; 410  #SET_CONN_PTYPE_CP_SIZE 4 ) 412  #OCF_AUTH_REQUESTED 0x0011 ) 414 ušt16_t hªdË ; 415 } t__©Œibu‹__ (( t·cked )è tauth_»que¡ed_ý ; 416  #AUTH_REQUESTED_CP_SIZE 2 ) 418  #OCF_SET_CONN_ENCRYPT 0x0013 ) 420 ušt16_t hªdË ; 421 ušt8_t ’üy± ; 422 } t__©Œibu‹__ (( t·cked )è t£t_cÚn_’üy±_ý ; 423  #SET_CONN_ENCRYPT_CP_SIZE 3 ) 425  #OCF_CHANGE_CONN_LINK_KEY 0x0015 ) 427 ušt16_t hªdË ; 428 } t__©Œibu‹__ (( t·cked )è tchªge_cÚn_lšk_key_ý ; 429  #CHANGE_CONN_LINK_KEY_CP_SIZE 2 ) 431  #OCF_MASTER_LINK_KEY 0x0017 ) 433 ušt8_t key_æag ; 434 } t__©Œibu‹__ (( t·cked )è tma¡”_lšk_key_ý ; 435  #MASTER_LINK_KEY_CP_SIZE 1 ) 437  #OCF_REMOTE_NAME_REQ 0x0019 ) 439 bdaddr_t bdaddr ; 440 ušt8_t psÿn_»p_mode ; 441 ušt8_t psÿn_mode ; 442 ušt16_t þock_off£t ; 443 } t__©Œibu‹__ (( t·cked )è t»mÙe_Çme_»q_ý ; 444  #REMOTE_NAME_REQ_CP_SIZE 10 ) 446  #OCF_REMOTE_NAME_REQ_CANCEL 0x001A ) 448 bdaddr_t bdaddr ; 449 } t__©Œibu‹__ (( t·cked )è t»mÙe_Çme_»q_ÿnûl_ý ; 450  #REMOTE_NAME_REQ_CANCEL_CP_SIZE 6 ) 452  #OCF_READ_REMOTE_FEATURES 0x001B ) 454 ušt16_t hªdË ; 455 } t__©Œibu‹__ (( t·cked )è t»ad_»mÙe_ã©u»s_ý ; 456  #READ_REMOTE_FEATURES_CP_SIZE 2 ) 458  #OCF_READ_REMOTE_EXT_FEATURES 0x001C ) 460 ušt16_t hªdË ; 461 ušt8_t ·ge_num ; 462 } t__©Œibu‹__ (( t·cked )è t»ad_»mÙe_ext_ã©u»s_ý ; 463  #READ_REMOTE_EXT_FEATURES_CP_SIZE 3 ) 465  #OCF_READ_REMOTE_VERSION 0x001D ) 467 ušt16_t hªdË ; 468 } t__©Œibu‹__ (( t·cked )è t»ad_»mÙe_v”siÚ_ý ; 469  #READ_REMOTE_VERSION_CP_SIZE 2 ) 471  #OCF_READ_CLOCK_OFFSET 0x001F ) 473 ušt16_t hªdË ; 474 } t__©Œibu‹__ (( t·cked )è t»ad_þock_off£t_ý ; 475  #READ_CLOCK_OFFSET_CP_SIZE 2 ) 477  #OCF_READ_LMP_HANDLE 0x0020 ) 479  #OCF_SETUP_SYNC_CONN 0x0028 ) 481 ušt16_t hªdË ; 482 ušt32_t tx_bªdw™h ; 483 ušt32_t rx_bªdw™h ; 484 ušt16_t max_Ï‹ncy ; 485 ušt16_t voiû_£‰šg ; 486 ušt8_t »Œªs_effÜt ; 487 ušt16_t pkt_ty³ ; 488 } t__©Œibu‹__ (( t·cked )è t£tup_sync_cÚn_ý ; 489  #SETUP_SYNC_CONN_CP_SIZE 17 ) 491  #OCF_ACCEPT_SYNC_CONN_REQ 0x0029 ) 493 bdaddr_t bdaddr ; 494 ušt32_t tx_bªdw™h ; 495 ušt32_t rx_bªdw™h ; 496 ušt16_t max_Ï‹ncy ; 497 ušt16_t voiû_£‰šg ; 498 ušt8_t »Œªs_effÜt ; 499 ušt16_t pkt_ty³ ; 500 } t__©Œibu‹__ (( t·cked )è tacû±_sync_cÚn_»q_ý ; 501  #ACCEPT_SYNC_CONN_REQ_CP_SIZE 21 ) 503  #OCF_REJECT_SYNC_CONN_REQ 0x002A ) 505 bdaddr_t bdaddr ; 506 ušt8_t »asÚ ; 507 } t__©Œibu‹__ (( t·cked )è t»jeù_sync_cÚn_»q_ý ; 508  #REJECT_SYNC_CONN_REQ_CP_SIZE 7 ) 510  #OCF_IO_CAPABILITY_REPLY 0x002B ) 512 bdaddr_t bdaddr ; 513 ušt8_t ÿ·bž™y ; 514 ušt8_t oob_d©a ; 515 ušt8_t auth’tiÿtiÚ ; 516 } t__©Œibu‹__ (( t·cked )è tio_ÿ·bž™y_»¶y_ý ; 517  #IO_CAPABILITY_REPLY_CP_SIZE 9 ) 519  #OCF_USER_CONFIRM_REPLY 0x002C ) 521 bdaddr_t bdaddr ; 522 } t__©Œibu‹__ (( t·cked )è tu£r_cÚfœm_»¶y_ý ; 523  #USER_CONFIRM_REPLY_CP_SIZE 6 ) 525  #OCF_USER_CONFIRM_NEG_REPLY 0x002D ) 527  #OCF_USER_PASSKEY_REPLY 0x002E ) 529 bdaddr_t bdaddr ; 530 ušt32_t ·sskey ; 531 } t__©Œibu‹__ (( t·cked )è tu£r_·sskey_»¶y_ý ; 532  #USER_PASSKEY_REPLY_CP_SIZE 10 ) 534  #OCF_USER_PASSKEY_NEG_REPLY 0x002F ) 536  #OCF_REMOTE_OOB_DATA_REPLY 0x0030 ) 538 bdaddr_t bdaddr ; 539 ušt8_t hash [16]; 540 ušt8_t ¿ndomiz” [16]; 541 } t__©Œibu‹__ (( t·cked )è t»mÙe_oob_d©a_»¶y_ý ; 542  #REMOTE_OOB_DATA_REPLY_CP_SIZE 38 ) 544  #OCF_REMOTE_OOB_DATA_NEG_REPLY 0x0033 ) 546  #OCF_IO_CAPABILITY_NEG_REPLY 0x0034 ) 548 bdaddr_t bdaddr ; 549 ušt8_t »asÚ ; 550 } t__©Œibu‹__ (( t·cked )è tio_ÿ·bž™y_Ãg_»¶y_ý ; 551  #IO_CAPABILITY_NEG_REPLY_CP_SIZE 7 ) 553  #OCF_CREATE_PHYSICAL_LINK 0x0035 ) 555 ušt8_t hªdË ; 556 ušt8_t key_Ëngth ; 557 ušt8_t key_ty³ ; 558 ušt8_t key [32]; 559 } t__©Œibu‹__ (( t·cked )è tü—‹_physiÿl_lšk_ý ; 560  #CREATE_PHYSICAL_LINK_CP_SIZE 35 ) 562  #OCF_ACCEPT_PHYSICAL_LINK 0x0036 ) 564 ušt8_t hªdË ; 565 ušt8_t key_Ëngth ; 566 ušt8_t key_ty³ ; 567 ušt8_t key [32]; 568 } t__©Œibu‹__ (( t·cked )è tacû±_physiÿl_lšk_ý ; 569  #ACCEPT_PHYSICAL_LINK_CP_SIZE 35 ) 571  #OCF_DISCONNECT_PHYSICAL_LINK 0x0037 ) 573 ušt8_t hªdË ; 574 ušt8_t »asÚ ; 575 } t__©Œibu‹__ (( t·cked )è tdiscÚÃù_physiÿl_lšk_ý ; 576  #DISCONNECT_PHYSICAL_LINK_CP_SIZE 2 ) 578  #OCF_CREATE_LOGICAL_LINK 0x0038 ) 580 ušt8_t hªdË ; 581 ušt8_t tx_æow [16]; 582 ušt8_t rx_æow [16]; 583 } t__©Œibu‹__ (( t·cked )è tü—‹_logiÿl_lšk_ý ; 584  #CREATE_LOGICAL_LINK_CP_SIZE 33 ) 586  #OCF_ACCEPT_LOGICAL_LINK 0x0039 ) 588  #OCF_DISCONNECT_LOGICAL_LINK 0x003A ) 590 ušt16_t hªdË ; 591 } t__©Œibu‹__ (( t·cked )è tdiscÚÃù_logiÿl_lšk_ý ; 592  #DISCONNECT_LOGICAL_LINK_CP_SIZE 2 ) 594  #OCF_LOGICAL_LINK_CANCEL 0x003B ) 596 ušt8_t hªdË ; 597 ušt8_t tx_æow_id ; 598 } t__©Œibu‹__ (( t·cked )è tÿnûl_logiÿl_lšk_ý ; 599  #LOGICAL_LINK_CANCEL_CP_SIZE 2 ) 601 ušt8_t ¡©us ; 602 ušt8_t hªdË ; 603 ušt8_t tx_æow_id ; 604 } t__©Œibu‹__ (( t·cked )è tÿnûl_logiÿl_lšk_½ ; 605  #LOGICAL_LINK_CANCEL_RP_SIZE 3 ) 607  #OCF_FLOW_SPEC_MODIFY 0x003C ) 610  #OGF_LINK_POLICY 0x02 ) 612  #OCF_HOLD_MODE 0x0001 ) 614 ušt16_t hªdË ; 615 ušt16_t max_š‹rv® ; 616 ušt16_t mš_š‹rv® ; 617 } t__©Œibu‹__ (( t·cked )è thÞd_mode_ý ; 618  #HOLD_MODE_CP_SIZE 6 ) 620  #OCF_SNIFF_MODE 0x0003 ) 622 ušt16_t hªdË ; 623 ušt16_t max_š‹rv® ; 624 ušt16_t mš_š‹rv® ; 625 ušt16_t ©‹m± ; 626 ušt16_t timeout ; 627 } t__©Œibu‹__ (( t·cked )è t¢iff_mode_ý ; 628  #SNIFF_MODE_CP_SIZE 10 ) 630  #OCF_EXIT_SNIFF_MODE 0x0004 ) 632 ušt16_t hªdË ; 633 } t__©Œibu‹__ (( t·cked )è tex™_¢iff_mode_ý ; 634  #EXIT_SNIFF_MODE_CP_SIZE 2 ) 636  #OCF_PARK_MODE 0x0005 ) 638 ušt16_t hªdË ; 639 ušt16_t max_š‹rv® ; 640 ušt16_t mš_š‹rv® ; 641 } t__©Œibu‹__ (( t·cked )è t·rk_mode_ý ; 642  #PARK_MODE_CP_SIZE 6 ) 644  #OCF_EXIT_PARK_MODE 0x0006 ) 646 ušt16_t hªdË ; 647 } t__©Œibu‹__ (( t·cked )è tex™_·rk_mode_ý ; 648  #EXIT_PARK_MODE_CP_SIZE 2 ) 650  #OCF_QOS_SETUP 0x0007 ) 652 ušt8_t £rviû_ty³ ; 653 ušt32_t tok’_¿‹ ; 654 ušt32_t ³ak_bªdwidth ; 655 ušt32_t Ï‹ncy ; 656 ušt32_t d–ay_v¬ŸtiÚ ; 657 } t__©Œibu‹__ (( t·cked )è thci_qos ; 658  #HCI_QOS_CP_SIZE 17 ) 660 ušt16_t hªdË ; 661 ušt8_t æags ; 662 hci_qos qos ; 663 } t__©Œibu‹__ (( t·cked )è tqos_£tup_ý ; 664  #QOS_SETUP_CP_SIZE (3 + HCI_QOS_CP_SIZE ) ) 666  #OCF_ROLE_DISCOVERY 0x0009 ) 668 ušt16_t hªdË ; 669 } t__©Œibu‹__ (( t·cked )è trÞe_discov”y_ý ; 670  #ROLE_DISCOVERY_CP_SIZE 2 ) 672 ušt8_t ¡©us ; 673 ušt16_t hªdË ; 674 ušt8_t rÞe ; 675 } t__©Œibu‹__ (( t·cked )è trÞe_discov”y_½ ; 676  #ROLE_DISCOVERY_RP_SIZE 4 ) 678  #OCF_SWITCH_ROLE 0x000B ) 680 bdaddr_t bdaddr ; 681 ušt8_t rÞe ; 682 } t__©Œibu‹__ (( t·cked )è tsw™ch_rÞe_ý ; 683  #SWITCH_ROLE_CP_SIZE 7 ) 685  #OCF_READ_LINK_POLICY 0x000C ) 687 ušt16_t hªdË ; 688 } t__©Œibu‹__ (( t·cked )è t»ad_lšk_pÞicy_ý ; 689  #READ_LINK_POLICY_CP_SIZE 2 ) 691 ušt8_t ¡©us ; 692 ušt16_t hªdË ; 693 ušt16_t pÞicy ; 694 } t__©Œibu‹__ (( t·cked )è t»ad_lšk_pÞicy_½ ; 695  #READ_LINK_POLICY_RP_SIZE 5 ) 697  #OCF_WRITE_LINK_POLICY 0x000D ) 699 ušt16_t hªdË ; 700 ušt16_t pÞicy ; 701 } t__©Œibu‹__ (( t·cked )è twr™e_lšk_pÞicy_ý ; 702  #WRITE_LINK_POLICY_CP_SIZE 4 ) 704 ušt8_t ¡©us ; 705 ušt16_t hªdË ; 706 } t__©Œibu‹__ (( t·cked )è twr™e_lšk_pÞicy_½ ; 707  #WRITE_LINK_POLICY_RP_SIZE 3 ) 709  #OCF_READ_DEFAULT_LINK_POLICY 0x000E ) 711  #OCF_WRITE_DEFAULT_LINK_POLICY 0x000F ) 713  #OCF_FLOW_SPECIFICATION 0x0010 ) 715  #OCF_SNIFF_SUBRATING 0x0011 ) 717 ušt16_t hªdË ; 718 ušt16_t max_Ï‹ncy ; 719 ušt16_t mš_»mÙe_timeout ; 720 ušt16_t mš_loÿl_timeout ; 721 } t__©Œibu‹__ (( t·cked )è t¢iff_sub¿tšg_ý ; 722  #SNIFF_SUBRATING_CP_SIZE 8 ) 725  #OGF_HOST_CTL 0x03 ) 727  #OCF_SET_EVENT_MASK 0x0001 ) 729 ušt8_t mask [8]; 730 } t__©Œibu‹__ (( t·cked )è t£t_ev’t_mask_ý ; 731  #SET_EVENT_MASK_CP_SIZE 8 ) 733  #OCF_RESET 0x0003 ) 735  #OCF_SET_EVENT_FLT 0x0005 ) 737 ušt8_t æt_ty³ ; 738 ušt8_t cÚd_ty³ ; 739 ušt8_t cÚd™iÚ [0]; 740 } t__©Œibu‹__ (( t·cked )è t£t_ev’t_æt_ý ; 741  #SET_EVENT_FLT_CP_SIZE 2 ) 744  #FLT_CLEAR_ALL 0x00 ) 745  #FLT_INQ_RESULT 0x01 ) 746  #FLT_CONN_SETUP 0x02 ) 748  #INQ_RESULT_RETURN_ALL 0x00 ) 749  #INQ_RESULT_RETURN_CLASS 0x01 ) 750  #INQ_RESULT_RETURN_BDADDR 0x02 ) 752  #CONN_SETUP_ALLOW_ALL 0x00 ) 753  #CONN_SETUP_ALLOW_CLASS 0x01 ) 754  #CONN_SETUP_ALLOW_BDADDR 0x02 ) 756  #CONN_SETUP_AUTO_OFF 0x01 ) 757  #CONN_SETUP_AUTO_ON 0x02 ) 759  #OCF_FLUSH 0x0008 ) 761  #OCF_READ_PIN_TYPE 0x0009 ) 763 ušt8_t ¡©us ; 764 ušt8_t pš_ty³ ; 765 } t__©Œibu‹__ (( t·cked )è t»ad_pš_ty³_½ ; 766  #READ_PIN_TYPE_RP_SIZE 2 ) 768  #OCF_WRITE_PIN_TYPE 0x000A ) 770 ušt8_t pš_ty³ ; 771 } t__©Œibu‹__ (( t·cked )è twr™e_pš_ty³_ý ; 772  #WRITE_PIN_TYPE_CP_SIZE 1 ) 774  #OCF_CREATE_NEW_UNIT_KEY 0x000B ) 776  #OCF_READ_STORED_LINK_KEY 0x000D ) 778 bdaddr_t bdaddr ; 779 ušt8_t »ad_®l ; 780 } t__©Œibu‹__ (( t·cked )è t»ad_¡Üed_lšk_key_ý ; 781  #READ_STORED_LINK_KEY_CP_SIZE 7 ) 783 ušt8_t ¡©us ; 784 ušt16_t max_keys ; 785 ušt16_t num_keys ; 786 } t__©Œibu‹__ (( t·cked )è t»ad_¡Üed_lšk_key_½ ; 787  #READ_STORED_LINK_KEY_RP_SIZE 5 ) 789  #OCF_WRITE_STORED_LINK_KEY 0x0011 ) 791 ušt8_t num_keys ; 793 } t__©Œibu‹__ (( t·cked )è twr™e_¡Üed_lšk_key_ý ; 794  #WRITE_STORED_LINK_KEY_CP_SIZE 1 ) 796 ušt8_t ¡©us ; 797 ušt8_t num_keys ; 798 } t__©Œibu‹__ (( t·cked )è twr™e_¡Üed_lšk_key_½ ; 799  #READ_WRITE_LINK_KEY_RP_SIZE 2 ) 801  #OCF_DELETE_STORED_LINK_KEY 0x0012 ) 803 bdaddr_t bdaddr ; 804 ušt8_t d–‘e_®l ; 805 } t__©Œibu‹__ (( t·cked )è td–‘e_¡Üed_lšk_key_ý ; 806  #DELETE_STORED_LINK_KEY_CP_SIZE 7 ) 808 ušt8_t ¡©us ; 809 ušt16_t num_keys ; 810 } t__©Œibu‹__ (( t·cked )è td–‘e_¡Üed_lšk_key_½ ; 811  #DELETE_STORED_LINK_KEY_RP_SIZE 3 ) 813  #HCI_MAX_NAME_LENGTH 248 ) 815  #OCF_CHANGE_LOCAL_NAME 0x0013 ) 817 ušt8_t Çme [ HCI_MAX_NAME_LENGTH ]; 818 } t__©Œibu‹__ (( t·cked )è tchªge_loÿl_Çme_ý ; 819  #CHANGE_LOCAL_NAME_CP_SIZE 248 ) 821  #OCF_READ_LOCAL_NAME 0x0014 ) 823 ušt8_t ¡©us ; 824 ušt8_t Çme [ HCI_MAX_NAME_LENGTH ]; 825 } t__©Œibu‹__ (( t·cked )è t»ad_loÿl_Çme_½ ; 826  #READ_LOCAL_NAME_RP_SIZE 249 ) 828  #OCF_READ_CONN_ACCEPT_TIMEOUT 0x0015 ) 830 ušt8_t ¡©us ; 831 ušt16_t timeout ; 832 } t__©Œibu‹__ (( t·cked )è t»ad_cÚn_acû±_timeout_½ ; 833  #READ_CONN_ACCEPT_TIMEOUT_RP_SIZE 3 ) 835  #OCF_WRITE_CONN_ACCEPT_TIMEOUT 0x0016 ) 837 ušt16_t timeout ; 838 } t__©Œibu‹__ (( t·cked )è twr™e_cÚn_acû±_timeout_ý ; 839  #WRITE_CONN_ACCEPT_TIMEOUT_CP_SIZE 2 ) 841  #OCF_READ_PAGE_TIMEOUT 0x0017 ) 843 ušt8_t ¡©us ; 844 ušt16_t timeout ; 845 } t__©Œibu‹__ (( t·cked )è t»ad_·ge_timeout_½ ; 846  #READ_PAGE_TIMEOUT_RP_SIZE 3 ) 848  #OCF_WRITE_PAGE_TIMEOUT 0x0018 ) 850 ušt16_t timeout ; 851 } t__©Œibu‹__ (( t·cked )è twr™e_·ge_timeout_ý ; 852  #WRITE_PAGE_TIMEOUT_CP_SIZE 2 ) 854  #OCF_READ_SCAN_ENABLE 0x0019 ) 856 ušt8_t ¡©us ; 857 ušt8_t ’abË ; 858 } t__©Œibu‹__ (( t·cked )è t»ad_sÿn_’abË_½ ; 859  #READ_SCAN_ENABLE_RP_SIZE 2 ) 861  #OCF_WRITE_SCAN_ENABLE 0x001A ) 862  #SCAN_DISABLED 0x00 ) 863  #SCAN_INQUIRY 0x01 ) 864  #SCAN_PAGE 0x02 ) 866  #OCF_READ_PAGE_ACTIVITY 0x001B ) 868 ušt8_t ¡©us ; 869 ušt16_t š‹rv® ; 870 ušt16_t wšdow ; 871 } t__©Œibu‹__ (( t·cked )è t»ad_·ge_aùiv™y_½ ; 872  #READ_PAGE_ACTIVITY_RP_SIZE 5 ) 874  #OCF_WRITE_PAGE_ACTIVITY 0x001C ) 876 ušt16_t š‹rv® ; 877 ušt16_t wšdow ; 878 } t__©Œibu‹__ (( t·cked )è twr™e_·ge_aùiv™y_ý ; 879  #WRITE_PAGE_ACTIVITY_CP_SIZE 4 ) 881  #OCF_READ_INQ_ACTIVITY 0x001D ) 883 ušt8_t ¡©us ; 884 ušt16_t š‹rv® ; 885 ušt16_t wšdow ; 886 } t__©Œibu‹__ (( t·cked )è t»ad_šq_aùiv™y_½ ; 887  #READ_INQ_ACTIVITY_RP_SIZE 5 ) 889  #OCF_WRITE_INQ_ACTIVITY 0x001E ) 891 ušt16_t š‹rv® ; 892 ušt16_t wšdow ; 893 } t__©Œibu‹__ (( t·cked )è twr™e_šq_aùiv™y_ý ; 894  #WRITE_INQ_ACTIVITY_CP_SIZE 4 ) 896  #OCF_READ_AUTH_ENABLE 0x001F ) 898  #OCF_WRITE_AUTH_ENABLE 0x0020 ) 899  #AUTH_DISABLED 0x00 ) 900  #AUTH_ENABLED 0x01 ) 902  #OCF_READ_ENCRYPT_MODE 0x0021 ) 904  #OCF_WRITE_ENCRYPT_MODE 0x0022 ) 905  #ENCRYPT_DISABLED 0x00 ) 906  #ENCRYPT_P2P 0x01 ) 907  #ENCRYPT_BOTH 0x02 ) 909  #OCF_READ_CLASS_OF_DEV 0x0023 ) 911 ušt8_t ¡©us ; 912 ušt8_t dev_þass [3]; 913 } t__©Œibu‹__ (( t·cked )è t»ad_þass_of_dev_½ ; 914  #READ_CLASS_OF_DEV_RP_SIZE 4 ) 916  #OCF_WRITE_CLASS_OF_DEV 0x0024 ) 918 ušt8_t dev_þass [3]; 919 } t__©Œibu‹__ (( t·cked )è twr™e_þass_of_dev_ý ; 920  #WRITE_CLASS_OF_DEV_CP_SIZE 3 ) 922  #OCF_READ_VOICE_SETTING 0x0025 ) 924 ušt8_t ¡©us ; 925 ušt16_t voiû_£‰šg ; 926 } t__©Œibu‹__ (( t·cked )è t»ad_voiû_£‰šg_½ ; 927  #READ_VOICE_SETTING_RP_SIZE 3 ) 929  #OCF_WRITE_VOICE_SETTING 0x0026 ) 931 ušt16_t voiû_£‰šg ; 932 } t__©Œibu‹__ (( t·cked )è twr™e_voiû_£‰šg_ý ; 933  #WRITE_VOICE_SETTING_CP_SIZE 2 ) 935  #OCF_READ_AUTOMATIC_FLUSH_TIMEOUT 0x0027 ) 937  #OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT 0x0028 ) 939  #OCF_READ_NUM_BROADCAST_RETRANS 0x0029 ) 941  #OCF_WRITE_NUM_BROADCAST_RETRANS 0x002A ) 943  #OCF_READ_HOLD_MODE_ACTIVITY 0x002B ) 945  #OCF_WRITE_HOLD_MODE_ACTIVITY 0x002C ) 947  #OCF_READ_TRANSMIT_POWER_LEVEL 0x002D ) 949 ušt16_t hªdË ; 950 ušt8_t ty³ ; 951 } t__©Œibu‹__ (( t·cked )è t»ad_Œªsm™_pow”_Ëv–_ý ; 952  #READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3 ) 954 ušt8_t ¡©us ; 955 ušt16_t hªdË ; 956 št8_t Ëv– ; 957 } t__©Œibu‹__ (( t·cked )è t»ad_Œªsm™_pow”_Ëv–_½ ; 958  #READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4 ) 960  #OCF_READ_SYNC_FLOW_ENABLE 0x002E ) 962  #OCF_WRITE_SYNC_FLOW_ENABLE 0x002F ) 964  #OCF_SET_CONTROLLER_TO_HOST_FC 0x0031 ) 966  #OCF_HOST_BUFFER_SIZE 0x0033 ) 968 ušt16_t aþ_mtu ; 969 ušt8_t sco_mtu ; 970 ušt16_t aþ_max_pkt ; 971 ušt16_t sco_max_pkt ; 972 } t__©Œibu‹__ (( t·cked )è tho¡_bufãr_size_ý ; 973  #HOST_BUFFER_SIZE_CP_SIZE 7 ) 975  #OCF_HOST_NUM_COMP_PKTS 0x0035 ) 977 ušt8_t num_hndl ; 979 } t__©Œibu‹__ (( t·cked )è tho¡_num_comp_pkts_ý ; 980  #HOST_NUM_COMP_PKTS_CP_SIZE 1 ) 982  #OCF_READ_LINK_SUPERVISION_TIMEOUT 0x0036 ) 984 ušt8_t ¡©us ; 985 ušt16_t hªdË ; 986 ušt16_t timeout ; 987 } t__©Œibu‹__ (( t·cked )è t»ad_lšk_su³rvisiÚ_timeout_½ ; 988  #READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE 5 ) 990  #OCF_WRITE_LINK_SUPERVISION_TIMEOUT 0x0037 ) 992 ušt16_t hªdË ; 993 ušt16_t timeout ; 994 } t__©Œibu‹__ (( t·cked )è twr™e_lšk_su³rvisiÚ_timeout_ý ; 995  #WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE 4 ) 997 ušt8_t ¡©us ; 998 ušt16_t hªdË ; 999 } t__©Œibu‹__ (( t·cked )è twr™e_lšk_su³rvisiÚ_timeout_½ ; 1000  #WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE 3 ) 1002  #OCF_READ_NUM_SUPPORTED_IAC 0x0038 ) 1004  #MAX_IAC_LAP 0x40 ) 1005  #OCF_READ_CURRENT_IAC_LAP 0x0039 ) 1007 ušt8_t ¡©us ; 1008 ušt8_t num_cu¼’t_Ÿc ; 1009 ušt8_t Ïp [ MAX_IAC_LAP ][3]; 1010 } t__©Œibu‹__ (( t·cked )è t»ad_cu¼’t_Ÿc_Ïp_½ ; 1011  #READ_CURRENT_IAC_LAP_RP_SIZE 2+3* MAX_IAC_LAP ) 1013  #OCF_WRITE_CURRENT_IAC_LAP 0x003A ) 1015 ušt8_t num_cu¼’t_Ÿc ; 1016 ušt8_t Ïp [ MAX_IAC_LAP ][3]; 1017 } t__©Œibu‹__ (( t·cked )è twr™e_cu¼’t_Ÿc_Ïp_ý ; 1018  #WRITE_CURRENT_IAC_LAP_CP_SIZE 1+3* MAX_IAC_LAP ) 1020  #OCF_READ_PAGE_SCAN_PERIOD_MODE 0x003B ) 1022  #OCF_WRITE_PAGE_SCAN_PERIOD_MODE 0x003C ) 1024  #OCF_READ_PAGE_SCAN_MODE 0x003D ) 1026  #OCF_WRITE_PAGE_SCAN_MODE 0x003E ) 1028  #OCF_SET_AFH_CLASSIFICATION 0x003F ) 1030 ušt8_t m­ [10]; 1031 } t__©Œibu‹__ (( t·cked )è t£t_afh_þassifiÿtiÚ_ý ; 1032  #SET_AFH_CLASSIFICATION_CP_SIZE 10 ) 1034 ušt8_t ¡©us ; 1035 } t__©Œibu‹__ (( t·cked )è t£t_afh_þassifiÿtiÚ_½ ; 1036  #SET_AFH_CLASSIFICATION_RP_SIZE 1 ) 1038  #OCF_READ_INQUIRY_SCAN_TYPE 0x0042 ) 1040 ušt8_t ¡©us ; 1041 ušt8_t ty³ ; 1042 } t__©Œibu‹__ (( t·cked )è t»ad_šquœy_sÿn_ty³_½ ; 1043  #READ_INQUIRY_SCAN_TYPE_RP_SIZE 2 ) 1045  #OCF_WRITE_INQUIRY_SCAN_TYPE 0x0043 ) 1047 ušt8_t ty³ ; 1048 } t__©Œibu‹__ (( t·cked )è twr™e_šquœy_sÿn_ty³_ý ; 1049  #WRITE_INQUIRY_SCAN_TYPE_CP_SIZE 1 ) 1051 ušt8_t ¡©us ; 1052 } t__©Œibu‹__ (( t·cked )è twr™e_šquœy_sÿn_ty³_½ ; 1053  #WRITE_INQUIRY_SCAN_TYPE_RP_SIZE 1 ) 1055  #OCF_READ_INQUIRY_MODE 0x0044 ) 1057 ušt8_t ¡©us ; 1058 ušt8_t mode ; 1059 } t__©Œibu‹__ (( t·cked )è t»ad_šquœy_mode_½ ; 1060  #READ_INQUIRY_MODE_RP_SIZE 2 ) 1062  #OCF_WRITE_INQUIRY_MODE 0x0045 ) 1064 ušt8_t mode ; 1065 } t__©Œibu‹__ (( t·cked )è twr™e_šquœy_mode_ý ; 1066  #WRITE_INQUIRY_MODE_CP_SIZE 1 ) 1068 ušt8_t ¡©us ; 1069 } t__©Œibu‹__ (( t·cked )è twr™e_šquœy_mode_½ ; 1070  #WRITE_INQUIRY_MODE_RP_SIZE 1 ) 1072  #OCF_READ_PAGE_SCAN_TYPE 0x0046 ) 1074  #OCF_WRITE_PAGE_SCAN_TYPE 0x0047 ) 1075  #PAGE_SCAN_TYPE_STANDARD 0x00 ) 1076  #PAGE_SCAN_TYPE_INTERLACED 0x01 ) 1078  #OCF_READ_AFH_MODE 0x0048 ) 1080 ušt8_t ¡©us ; 1081 ušt8_t mode ; 1082 } t__©Œibu‹__ (( t·cked )è t»ad_afh_mode_½ ; 1083  #READ_AFH_MODE_RP_SIZE 2 ) 1085  #OCF_WRITE_AFH_MODE 0x0049 ) 1087 ušt8_t mode ; 1088 } t__©Œibu‹__ (( t·cked )è twr™e_afh_mode_ý ; 1089  #WRITE_AFH_MODE_CP_SIZE 1 ) 1091 ušt8_t ¡©us ; 1092 } t__©Œibu‹__ (( t·cked )è twr™e_afh_mode_½ ; 1093  #WRITE_AFH_MODE_RP_SIZE 1 ) 1095  #HCI_MAX_EIR_LENGTH 240 ) 1097  #OCF_READ_EXT_INQUIRY_RESPONSE 0x0051 ) 1099 ušt8_t ¡©us ; 1100 ušt8_t ãc ; 1101 ušt8_t d©a [ HCI_MAX_EIR_LENGTH ]; 1102 } t__©Œibu‹__ (( t·cked )è t»ad_ext_šquœy_»¥Ú£_½ ; 1103  #READ_EXT_INQUIRY_RESPONSE_RP_SIZE 242 ) 1105  #OCF_WRITE_EXT_INQUIRY_RESPONSE 0x0052 ) 1107 ušt8_t ãc ; 1108 ušt8_t d©a [ HCI_MAX_EIR_LENGTH ]; 1109 } t__©Œibu‹__ (( t·cked )è twr™e_ext_šquœy_»¥Ú£_ý ; 1110  #WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE 241 ) 1112 ušt8_t ¡©us ; 1113 } t__©Œibu‹__ (( t·cked )è twr™e_ext_šquœy_»¥Ú£_½ ; 1114  #WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE 1 ) 1116  #OCF_REFRESH_ENCRYPTION_KEY 0x0053 ) 1118 ušt16_t hªdË ; 1119 } t__©Œibu‹__ (( t·cked )è t»äesh_’üy±iÚ_key_ý ; 1120  #REFRESH_ENCRYPTION_KEY_CP_SIZE 2 ) 1122 ušt8_t ¡©us ; 1123 } t__©Œibu‹__ (( t·cked )è t»äesh_’üy±iÚ_key_½ ; 1124  #REFRESH_ENCRYPTION_KEY_RP_SIZE 1 ) 1126  #OCF_READ_SIMPLE_PAIRING_MODE 0x0055 ) 1128 ušt8_t ¡©us ; 1129 ušt8_t mode ; 1130 } t__©Œibu‹__ (( t·cked )è t»ad_sim¶e_·œšg_mode_½ ; 1131  #READ_SIMPLE_PAIRING_MODE_RP_SIZE 2 ) 1133  #OCF_WRITE_SIMPLE_PAIRING_MODE 0x0056 ) 1135 ušt8_t mode ; 1136 } t__©Œibu‹__ (( t·cked )è twr™e_sim¶e_·œšg_mode_ý ; 1137  #WRITE_SIMPLE_PAIRING_MODE_CP_SIZE 1 ) 1139 ušt8_t ¡©us ; 1140 } t__©Œibu‹__ (( t·cked )è twr™e_sim¶e_·œšg_mode_½ ; 1141  #WRITE_SIMPLE_PAIRING_MODE_RP_SIZE 1 ) 1143  #OCF_READ_LOCAL_OOB_DATA 0x0057 ) 1145 ušt8_t ¡©us ; 1146 ušt8_t hash [16]; 1147 ušt8_t ¿ndomiz” [16]; 1148 } t__©Œibu‹__ (( t·cked )è t»ad_loÿl_oob_d©a_½ ; 1149  #READ_LOCAL_OOB_DATA_RP_SIZE 33 ) 1151  #OCF_READ_INQ_RESPONSE_TX_POWER_LEVEL 0x0058 ) 1153 ušt8_t ¡©us ; 1154 št8_t Ëv– ; 1155 } t__©Œibu‹__ (( t·cked )è t»ad_šq_»¥Ú£_tx_pow”_Ëv–_½ ; 1156  #READ_INQ_RESPONSE_TX_POWER_LEVEL_RP_SIZE 2 ) 1158  #OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL 0x0058 ) 1160 ušt8_t ¡©us ; 1161 št8_t Ëv– ; 1162 } t__©Œibu‹__ (( t·cked )è t»ad_šquœy_Œªsm™_pow”_Ëv–_½ ; 1163  #READ_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE 2 ) 1165  #OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL 0x0059 ) 1167 št8_t Ëv– ; 1168 } t__©Œibu‹__ (( t·cked )è twr™e_šquœy_Œªsm™_pow”_Ëv–_ý ; 1169  #WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_CP_SIZE 1 ) 1171 ušt8_t ¡©us ; 1172 } t__©Œibu‹__ (( t·cked )è twr™e_šquœy_Œªsm™_pow”_Ëv–_½ ; 1173  #WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE 1 ) 1175  #OCF_READ_DEFAULT_ERROR_DATA_REPORTING 0x005A ) 1177 ušt8_t ¡©us ; 1178 ušt8_t »pÜtšg ; 1179 } t__©Œibu‹__ (( t·cked )è t»ad_deçuÉ_”rÜ_d©a_»pÜtšg_½ ; 1180  #READ_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE 2 ) 1182  #OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING 0x005B ) 1184 ušt8_t »pÜtšg ; 1185 } t__©Œibu‹__ (( t·cked )è twr™e_deçuÉ_”rÜ_d©a_»pÜtšg_ý ; 1186  #WRITE_DEFAULT_ERROR_DATA_REPORTING_CP_SIZE 1 ) 1188 ušt8_t ¡©us ; 1189 } t__©Œibu‹__ (( t·cked )è twr™e_deçuÉ_”rÜ_d©a_»pÜtšg_½ ; 1190  #WRITE_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE 1 ) 1192  #OCF_ENHANCED_FLUSH 0x005F ) 1194 ušt16_t hªdË ; 1195 ušt8_t ty³ ; 1196 } t__©Œibu‹__ (( t·cked )è t’hªûd_æush_ý ; 1197  #ENHANCED_FLUSH_CP_SIZE 3 ) 1199  #OCF_SEND_KEYPRESS_NOTIFY 0x0060 ) 1201 bdaddr_t bdaddr ; 1202 ušt8_t ty³ ; 1203 } t__©Œibu‹__ (( t·cked )è t£nd_key´ess_nÙify_ý ; 1204  #SEND_KEYPRESS_NOTIFY_CP_SIZE 7 ) 1206 ušt8_t ¡©us ; 1207 } t__©Œibu‹__ (( t·cked )è t£nd_key´ess_nÙify_½ ; 1208  #SEND_KEYPRESS_NOTIFY_RP_SIZE 1 ) 1210  #OCF_READ_LOGICAL_LINK_ACCEPT_TIMEOUT 0x0061 ) 1212 ušt8_t ¡©us ; 1213 ušt16_t timeout ; 1214 } t__©Œibu‹__ (( t·cked )è t»ad_log_lšk_acû±_timeout_½ ; 1215  #READ_LOGICAL_LINK_ACCEPT_TIMEOUT_RP_SIZE 3 ) 1217  #OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT 0x0062 ) 1219 ušt16_t timeout ; 1220 } t__©Œibu‹__ (( t·cked )è twr™e_log_lšk_acû±_timeout_ý ; 1221  #WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_CP_SIZE 2 ) 1223  #OCF_SET_EVENT_MASK_PAGE_2 0x0063 ) 1225  #OCF_READ_LOCATION_DATA 0x0064 ) 1227  #OCF_WRITE_LOCATION_DATA 0x0065 ) 1229  #OCF_READ_FLOW_CONTROL_MODE 0x0066 ) 1231  #OCF_WRITE_FLOW_CONTROL_MODE 0x0067 ) 1233  #OCF_READ_ENHANCED_TRANSMIT_POWER_LEVEL 0x0068 ) 1235 ušt8_t ¡©us ; 1236 ušt16_t hªdË ; 1237 št8_t Ëv–_gfsk ; 1238 št8_t Ëv–_dqpsk ; 1239 št8_t Ëv–_8dpsk ; 1240 } t__©Œibu‹__ (( t·cked )è t»ad_’hªûd_Œªsm™_pow”_Ëv–_½ ; 1241  #READ_ENHANCED_TRANSMIT_POWER_LEVEL_RP_SIZE 6 ) 1243  #OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT 0x0069 ) 1245 ušt8_t ¡©us ; 1246 ušt32_t timeout ; 1247 } t__©Œibu‹__ (( t·cked )è t»ad_be¡_effÜt_æush_timeout_½ ; 1248  #READ_BEST_EFFORT_FLUSH_TIMEOUT_RP_SIZE 5 ) 1250  #OCF_WRITE_BEST_EFFORT_FLUSH_TIMEOUT 0x006A ) 1252 ušt16_t hªdË ; 1253 ušt32_t timeout ; 1254 } t__©Œibu‹__ (( t·cked )è twr™e_be¡_effÜt_æush_timeout_ý ; 1255  #WRITE_BEST_EFFORT_FLUSH_TIMEOUT_CP_SIZE 6 ) 1257 ušt8_t ¡©us ; 1258 } t__©Œibu‹__ (( t·cked )è twr™e_be¡_effÜt_æush_timeout_½ ; 1259  #WRITE_BEST_EFFORT_FLUSH_TIMEOUT_RP_SIZE 1 ) 1261  #OCF_READ_LE_HOST_SUPPORTED 0x006C ) 1263 ušt8_t ¡©us ; 1264 ušt8_t Ë ; 1265 ušt8_t simul ; 1266 } t__©Œibu‹__ (( t·cked )è t»ad_Ë_ho¡_suµÜ‹d_½ ; 1267  #READ_LE_HOST_SUPPORTED_RP_SIZE 3 ) 1269  #OCF_WRITE_LE_HOST_SUPPORTED 0x006D ) 1271 ušt8_t Ë ; 1272 ušt8_t simul ; 1273 } t__©Œibu‹__ (( t·cked )è twr™e_Ë_ho¡_suµÜ‹d_ý ; 1274  #WRITE_LE_HOST_SUPPORTED_CP_SIZE 2 ) 1277  #OGF_INFO_PARAM 0x04 ) 1279  #OCF_READ_LOCAL_VERSION 0x0001 ) 1281 ušt8_t ¡©us ; 1282 ušt8_t hci_v” ; 1283 ušt16_t hci_»v ; 1284 ušt8_t lmp_v” ; 1285 ušt16_t mªuçùu»r ; 1286 ušt16_t lmp_subv” ; 1287 } t__©Œibu‹__ (( t·cked )è t»ad_loÿl_v”siÚ_½ ; 1288  #READ_LOCAL_VERSION_RP_SIZE 9 ) 1290  #OCF_READ_LOCAL_COMMANDS 0x0002 ) 1292 ušt8_t ¡©us ; 1293 ušt8_t commªds [64]; 1294 } t__©Œibu‹__ (( t·cked )è t»ad_loÿl_commªds_½ ; 1295  #READ_LOCAL_COMMANDS_RP_SIZE 65 ) 1297  #OCF_READ_LOCAL_FEATURES 0x0003 ) 1299 ušt8_t ¡©us ; 1300 ušt8_t ã©u»s [8]; 1301 } t__©Œibu‹__ (( t·cked )è t»ad_loÿl_ã©u»s_½ ; 1302  #READ_LOCAL_FEATURES_RP_SIZE 9 ) 1304  #OCF_READ_LOCAL_EXT_FEATURES 0x0004 ) 1306 ušt8_t ·ge_num ; 1307 } t__©Œibu‹__ (( t·cked )è t»ad_loÿl_ext_ã©u»s_ý ; 1308  #READ_LOCAL_EXT_FEATURES_CP_SIZE 1 ) 1310 ušt8_t ¡©us ; 1311 ušt8_t ·ge_num ; 1312 ušt8_t max_·ge_num ; 1313 ušt8_t ã©u»s [8]; 1314 } t__©Œibu‹__ (( t·cked )è t»ad_loÿl_ext_ã©u»s_½ ; 1315  #READ_LOCAL_EXT_FEATURES_RP_SIZE 11 ) 1317  #OCF_READ_BUFFER_SIZE 0x0005 ) 1319 ušt8_t ¡©us ; 1320 ušt16_t aþ_mtu ; 1321 ušt8_t sco_mtu ; 1322 ušt16_t aþ_max_pkt ; 1323 ušt16_t sco_max_pkt ; 1324 } t__©Œibu‹__ (( t·cked )è t»ad_bufãr_size_½ ; 1325  #READ_BUFFER_SIZE_RP_SIZE 8 ) 1327  #OCF_READ_COUNTRY_CODE 0x0007 ) 1329  #OCF_READ_BD_ADDR 0x0009 ) 1331 ušt8_t ¡©us ; 1332 bdaddr_t bdaddr ; 1333 } t__©Œibu‹__ (( t·cked )è t»ad_bd_addr_½ ; 1334  #READ_BD_ADDR_RP_SIZE 7 ) 1336  #OCF_READ_DATA_BLOCK_SIZE 0x000A ) 1338 ušt8_t ¡©us ; 1339 ušt16_t max_aþ_Ën ; 1340 ušt16_t d©a_block_Ën ; 1341 ušt16_t num_blocks ; 1342 } t__©Œibu‹__ (( t·cked )è t»ad_d©a_block_size_½ ; 1345  #OGF_STATUS_PARAM 0x05 ) 1347  #OCF_READ_FAILED_CONTACT_COUNTER 0x0001 ) 1349 ušt8_t ¡©us ; 1350 ušt16_t hªdË ; 1351 ušt8_t couÁ” ; 1352 } t__©Œibu‹__ (( t·cked )è t»ad_çžed_cÚù_couÁ”_½ ; 1353  #READ_FAILED_CONTACT_COUNTER_RP_SIZE 4 ) 1355  #OCF_RESET_FAILED_CONTACT_COUNTER 0x0002 ) 1357 ušt8_t ¡©us ; 1358 ušt16_t hªdË ; 1359 } t__©Œibu‹__ (( t·cked )è t»£t_çžed_cÚù_couÁ”_½ ; 1360  #RESET_FAILED_CONTACT_COUNTER_RP_SIZE 3 ) 1362  #OCF_READ_LINK_QUALITY 0x0003 ) 1364 ušt8_t ¡©us ; 1365 ušt16_t hªdË ; 1366 ušt8_t lšk_qu®™y ; 1367 } t__©Œibu‹__ (( t·cked )è t»ad_lšk_qu®™y_½ ; 1368  #READ_LINK_QUALITY_RP_SIZE 4 ) 1370  #OCF_READ_RSSI 0x0005 ) 1372 ušt8_t ¡©us ; 1373 ušt16_t hªdË ; 1374 št8_t rssi ; 1375 } t__©Œibu‹__ (( t·cked )è t»ad_rssi_½ ; 1376  #READ_RSSI_RP_SIZE 4 ) 1378  #OCF_READ_AFH_MAP 0x0006 ) 1380 ušt8_t ¡©us ; 1381 ušt16_t hªdË ; 1382 ušt8_t mode ; 1383 ušt8_t m­ [10]; 1384 } t__©Œibu‹__ (( t·cked )è t»ad_afh_m­_½ ; 1385  #READ_AFH_MAP_RP_SIZE 14 ) 1387  #OCF_READ_CLOCK 0x0007 ) 1389 ušt16_t hªdË ; 1390 ušt8_t which_þock ; 1391 } t__©Œibu‹__ (( t·cked )è t»ad_þock_ý ; 1392  #READ_CLOCK_CP_SIZE 3 ) 1394 ušt8_t ¡©us ; 1395 ušt16_t hªdË ; 1396 ušt32_t þock ; 1397 ušt16_t accu¿cy ; 1398 } t__©Œibu‹__ (( t·cked )è t»ad_þock_½ ; 1399  #READ_CLOCK_RP_SIZE 9 ) 1401  #OCF_READ_LOCAL_AMP_INFO 0x0009 ) 1403 ušt8_t ¡©us ; 1404 ušt8_t amp_¡©us ; 1405 ušt32_t tÙ®_bªdwidth ; 1406 ušt32_t max_gu¬ª‹ed_bªdwidth ; 1407 ušt32_t mš_Ï‹ncy ; 1408 ušt32_t max_pdu_size ; 1409 ušt8_t cÚŒÞËr_ty³ ; 1410 ušt16_t ·l_ÿps ; 1411 ušt16_t max_amp_assoc_Ëngth ; 1412 ušt32_t max_æush_timeout ; 1413 ušt32_t be¡_effÜt_æush_timeout ; 1414 } t__©Œibu‹__ (( t·cked )è t»ad_loÿl_amp_šfo_½ ; 1415  #READ_LOCAL_AMP_INFO_RP_SIZE 31 ) 1417  #OCF_READ_LOCAL_AMP_ASSOC 0x000A ) 1419 ušt8_t hªdË ; 1420 ušt16_t Ëngth_so_çr ; 1421 ušt16_t assoc_Ëngth ; 1422 } t__©Œibu‹__ (( t·cked )è t»ad_loÿl_amp_assoc_ý ; 1423  #READ_LOCAL_AMP_ASSOC_CP_SIZE 5 ) 1425 ušt8_t ¡©us ; 1426 ušt8_t hªdË ; 1427 ušt16_t Ëngth ; 1428 ušt8_t äagm’t [ HCI_MAX_NAME_LENGTH ]; 1429 } t__©Œibu‹__ (( t·cked )è t»ad_loÿl_amp_assoc_½ ; 1430  #READ_LOCAL_AMP_ASSOC_RP_SIZE 252 ) 1432  #OCF_WRITE_REMOTE_AMP_ASSOC 0x000B ) 1434 ušt8_t hªdË ; 1435 ušt16_t Ëngth_so_çr ; 1436 ušt16_t »maššg_Ëngth ; 1437 ušt8_t äagm’t [ HCI_MAX_NAME_LENGTH ]; 1438 } t__©Œibu‹__ (( t·cked )è twr™e_»mÙe_amp_assoc_ý ; 1439  #WRITE_REMOTE_AMP_ASSOC_CP_SIZE 253 ) 1441 ušt8_t ¡©us ; 1442 ušt8_t hªdË ; 1443 } t__©Œibu‹__ (( t·cked )è twr™e_»mÙe_amp_assoc_½ ; 1444  #WRITE_REMOTE_AMP_ASSOC_RP_SIZE 2 ) 1447  #OGF_TESTING_CMD 0x3e ) 1449  #OCF_READ_LOOPBACK_MODE 0x0001 ) 1451  #OCF_WRITE_LOOPBACK_MODE 0x0002 ) 1453  #OCF_ENABLE_DEVICE_UNDER_TEST_MODE 0x0003 ) 1455  #OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE 0x0004 ) 1457 ušt8_t mode ; 1458 } t__©Œibu‹__ (( t·cked )è twr™e_sim¶e_·œšg_debug_mode_ý ; 1459  #WRITE_SIMPLE_PAIRING_DEBUG_MODE_CP_SIZE 1 ) 1461 ušt8_t ¡©us ; 1462 } t__©Œibu‹__ (( t·cked )è twr™e_sim¶e_·œšg_debug_mode_½ ; 1463  #WRITE_SIMPLE_PAIRING_DEBUG_MODE_RP_SIZE 1 ) 1466  #OGF_LE_CTL 0x08 ) 1468  #OCF_LE_SET_EVENT_MASK 0x0001 ) 1470 ušt8_t mask [8]; 1471 } t__©Œibu‹__ (( t·cked )è tË_£t_ev’t_mask_ý ; 1472  #LE_SET_EVENT_MASK_CP_SIZE 8 ) 1474  #OCF_LE_READ_BUFFER_SIZE 0x0002 ) 1476 ušt8_t ¡©us ; 1477 ušt16_t pkt_Ën ; 1478 ušt8_t max_pkt ; 1479 } t__©Œibu‹__ (( t·cked )è tË_»ad_bufãr_size_½ ; 1480  #LE_READ_BUFFER_SIZE_RP_SIZE 4 ) 1482  #OCF_LE_READ_LOCAL_SUPPORTED_FEATURES 0x0003 ) 1484 ušt8_t ¡©us ; 1485 ušt8_t ã©u»s [8]; 1486 } t__©Œibu‹__ (( t·cked )è tË_»ad_loÿl_suµÜ‹d_ã©u»s_½ ; 1487  #LE_READ_LOCAL_SUPPORTED_FEATURES_RP_SIZE 9 ) 1489  #OCF_LE_SET_RANDOM_ADDRESS 0x0005 ) 1491 bdaddr_t bdaddr ; 1492 } t__©Œibu‹__ (( t·cked )è tË_£t_¿ndom_add»ss_ý ; 1493  #LE_SET_RANDOM_ADDRESS_CP_SIZE 6 ) 1495  #OCF_LE_SET_ADVERTISING_PARAMETERS 0x0006 ) 1497 ušt16_t mš_š‹rv® ; 1498 ušt16_t max_š‹rv® ; 1499 ušt8_t advty³ ; 1500 ušt8_t own_bdaddr_ty³ ; 1501 ušt8_t dœeù_bdaddr_ty³ ; 1502 bdaddr_t dœeù_bdaddr ; 1503 ušt8_t chª_m­ ; 1504 ušt8_t fž‹r ; 1505 } t__©Œibu‹__ (( t·cked )è tË_£t_adv”tisšg_·¿m‘”s_ý ; 1506  #LE_SET_ADVERTISING_PARAMETERS_CP_SIZE 15 ) 1508  #OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER 0x0007 ) 1510 ušt8_t ¡©us ; 1511 št8_t Ëv– ; 1512 } t__©Œibu‹__ (( t·cked )è tË_»ad_adv”tisšg_chªÃl_tx_pow”_½ ; 1513  #LE_READ_ADVERTISING_CHANNEL_TX_POWER_RP_SIZE 2 ) 1515  #OCF_LE_SET_ADVERTISING_DATA 0x0008 ) 1517 ušt8_t Ëngth ; 1518 ušt8_t d©a [31]; 1519 } t__©Œibu‹__ (( t·cked )è tË_£t_adv”tisšg_d©a_ý ; 1520  #LE_SET_ADVERTISING_DATA_CP_SIZE 32 ) 1522  #OCF_LE_SET_SCAN_RESPONSE_DATA 0x0009 ) 1524 ušt8_t Ëngth ; 1525 ušt8_t d©a [31]; 1526 } t__©Œibu‹__ (( t·cked )è tË_£t_sÿn_»¥Ú£_d©a_ý ; 1527  #LE_SET_SCAN_RESPONSE_DATA_CP_SIZE 32 ) 1529  #OCF_LE_SET_ADVERTISE_ENABLE 0x000A ) 1531 ušt8_t ’abË ; 1532 } t__©Œibu‹__ (( t·cked )è tË_£t_adv”ti£_’abË_ý ; 1533  #LE_SET_ADVERTISE_ENABLE_CP_SIZE 1 ) 1535  #OCF_LE_SET_SCAN_PARAMETERS 0x000B ) 1537 ušt8_t ty³ ; 1538 ušt16_t š‹rv® ; 1539 ušt16_t wšdow ; 1540 ušt8_t own_bdaddr_ty³ ; 1541 ušt8_t fž‹r ; 1542 } t__©Œibu‹__ (( t·cked )è tË_£t_sÿn_·¿m‘”s_ý ; 1543  #LE_SET_SCAN_PARAMETERS_CP_SIZE 7 ) 1545  #OCF_LE_SET_SCAN_ENABLE 0x000C ) 1547 ušt8_t ’abË ; 1548 ušt8_t fž‹r_dup ; 1549 } t__©Œibu‹__ (( t·cked )è tË_£t_sÿn_’abË_ý ; 1550  #LE_SET_SCAN_ENABLE_CP_SIZE 2 ) 1552  #OCF_LE_CREATE_CONN 0x000D ) 1554 ušt16_t š‹rv® ; 1555 ušt16_t wšdow ; 1556 ušt8_t š™ŸtÜ_fž‹r ; 1557 ušt8_t ³”_bdaddr_ty³ ; 1558 bdaddr_t ³”_bdaddr ; 1559 ušt8_t own_bdaddr_ty³ ; 1560 ušt16_t mš_š‹rv® ; 1561 ušt16_t max_š‹rv® ; 1562 ušt16_t Ï‹ncy ; 1563 ušt16_t su³rvisiÚ_timeout ; 1564 ušt16_t mš_û_Ëngth ; 1565 ušt16_t max_û_Ëngth ; 1566 } t__©Œibu‹__ (( t·cked )è tË_ü—‹_cÚÃùiÚ_ý ; 1567  #LE_CREATE_CONN_CP_SIZE 25 ) 1569  #OCF_LE_CREATE_CONN_CANCEL 0x000E ) 1571  #OCF_LE_READ_WHITE_LIST_SIZE 0x000F ) 1573 ušt8_t ¡©us ; 1574 ušt8_t size ; 1575 } t__©Œibu‹__ (( t·cked )è tË_»ad_wh™e_li¡_size_½ ; 1576  #LE_READ_WHITE_LIST_SIZE_RP_SIZE 2 ) 1578  #OCF_LE_CLEAR_WHITE_LIST 0x0010 ) 1580  #OCF_LE_ADD_DEVICE_TO_WHITE_LIST 0x0011 ) 1582 ušt8_t bdaddr_ty³ ; 1583 bdaddr_t bdaddr ; 1584 } t__©Œibu‹__ (( t·cked )è tË_add_deviû_to_wh™e_li¡_ý ; 1585  #LE_ADD_DEVICE_TO_WHITE_LIST_CP_SIZE 7 ) 1587  #OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST 0x0012 ) 1589 ušt8_t bdaddr_ty³ ; 1590 bdaddr_t bdaddr ; 1591 } t__©Œibu‹__ (( t·cked )è tË_»move_deviû_äom_wh™e_li¡_ý ; 1592  #LE_REMOVE_DEVICE_FROM_WHITE_LIST_CP_SIZE 7 ) 1594  #OCF_LE_CONN_UPDATE 0x0013 ) 1596 ušt16_t hªdË ; 1597 ušt16_t mš_š‹rv® ; 1598 ušt16_t max_š‹rv® ; 1599 ušt16_t Ï‹ncy ; 1600 ušt16_t su³rvisiÚ_timeout ; 1601 ušt16_t mš_û_Ëngth ; 1602 ušt16_t max_û_Ëngth ; 1603 } t__©Œibu‹__ (( t·cked )è tË_cÚÃùiÚ_upd©e_ý ; 1604  #LE_CONN_UPDATE_CP_SIZE 14 ) 1606  #OCF_LE_SET_HOST_CHANNEL_CLASSIFICATION 0x0014 ) 1608 ušt8_t m­ [5]; 1609 } t__©Œibu‹__ (( t·cked )è tË_£t_ho¡_chªÃl_þassifiÿtiÚ_ý ; 1610  #LE_SET_HOST_CHANNEL_CLASSIFICATION_CP_SIZE 5 ) 1612  #OCF_LE_READ_CHANNEL_MAP 0x0015 ) 1614 ušt16_t hªdË ; 1615 } t__©Œibu‹__ (( t·cked )è tË_»ad_chªÃl_m­_ý ; 1616  #LE_READ_CHANNEL_MAP_CP_SIZE 2 ) 1618 ušt8_t ¡©us ; 1619 ušt16_t hªdË ; 1620 ušt8_t m­ [5]; 1621 } t__©Œibu‹__ (( t·cked )è tË_»ad_chªÃl_m­_½ ; 1622  #LE_READ_CHANNEL_MAP_RP_SIZE 8 ) 1624  #OCF_LE_READ_REMOTE_USED_FEATURES 0x0016 ) 1626 ušt16_t hªdË ; 1627 } t__©Œibu‹__ (( t·cked )è tË_»ad_»mÙe_u£d_ã©u»s_ý ; 1628  #LE_READ_REMOTE_USED_FEATURES_CP_SIZE 2 ) 1630  #OCF_LE_ENCRYPT 0x0017 ) 1632 ušt8_t key [16]; 1633 ušt8_t ¶aš‹xt [16]; 1634 } t__©Œibu‹__ (( t·cked )è tË_’üy±_ý ; 1635  #LE_ENCRYPT_CP_SIZE 32 ) 1637 ušt8_t ¡©us ; 1638 ušt8_t d©a [16]; 1639 } t__©Œibu‹__ (( t·cked )è tË_’üy±_½ ; 1640  #LE_ENCRYPT_RP_SIZE 17 ) 1642  #OCF_LE_RAND 0x0018 ) 1644 ušt8_t ¡©us ; 1645 ušt64_t ¿ndom ; 1646 } t__©Œibu‹__ (( t·cked )è tË_¿nd_½ ; 1647  #LE_RAND_RP_SIZE 9 ) 1649  #OCF_LE_START_ENCRYPTION 0x0019 ) 1651 ušt16_t hªdË ; 1652 ušt64_t ¿ndom ; 1653 ušt16_t div”sif›r ; 1654 ušt8_t key [16]; 1655 } t__©Œibu‹__ (( t·cked )è tË_¡¬t_’üy±iÚ_ý ; 1656  #LE_START_ENCRYPTION_CP_SIZE 28 ) 1658  #OCF_LE_LTK_REPLY 0x001A ) 1660 ušt16_t hªdË ; 1661 ušt8_t key [16]; 1662 } t__©Œibu‹__ (( t·cked )è tË_Ék_»¶y_ý ; 1663  #LE_LTK_REPLY_CP_SIZE 18 ) 1665 ušt8_t ¡©us ; 1666 ušt16_t hªdË ; 1667 } t__©Œibu‹__ (( t·cked )è tË_Ék_»¶y_½ ; 1668  #LE_LTK_REPLY_RP_SIZE 3 ) 1670  #OCF_LE_LTK_NEG_REPLY 0x001B ) 1672 ušt16_t hªdË ; 1673 } t__©Œibu‹__ (( t·cked )è tË_Ék_Ãg_»¶y_ý ; 1674  #LE_LTK_NEG_REPLY_CP_SIZE 2 ) 1676 ušt8_t ¡©us ; 1677 ušt16_t hªdË ; 1678 } t__©Œibu‹__ (( t·cked )è tË_Ék_Ãg_»¶y_½ ; 1679  #LE_LTK_NEG_REPLY_RP_SIZE 3 ) 1681  #OCF_LE_READ_SUPPORTED_STATES 0x001C ) 1683 ušt8_t ¡©us ; 1684 ušt64_t ¡©es ; 1685 } t__©Œibu‹__ (( t·cked )è tË_»ad_suµÜ‹d_¡©es_½ ; 1686  #LE_READ_SUPPORTED_STATES_RP_SIZE 9 ) 1688  #OCF_LE_RECEIVER_TEST 0x001D ) 1690 ušt8_t äequ’cy ; 1691 } t__©Œibu‹__ (( t·cked )è tË_»ûiv”_‹¡_ý ; 1692  #LE_RECEIVER_TEST_CP_SIZE 1 ) 1694  #OCF_LE_TRANSMITTER_TEST 0x001E ) 1696 ušt8_t äequ’cy ; 1697 ušt8_t Ëngth ; 1698 ušt8_t ·ylßd ; 1699 } t__©Œibu‹__ (( t·cked )è tË_Œªsm™‹r_‹¡_ý ; 1700  #LE_TRANSMITTER_TEST_CP_SIZE 3 ) 1702  #OCF_LE_TEST_END 0x001F ) 1704 ušt8_t ¡©us ; 1705 ušt16_t num_pkts ; 1706 } t__©Œibu‹__ (( t·cked )è tË_‹¡_’d_½ ; 1707  #LE_TEST_END_RP_SIZE 3 ) 1709  #OCF_LE_ADD_DEVICE_TO_RESOLV_LIST 0x0027 ) 1711 ušt8_t bdaddr_ty³ ; 1712 bdaddr_t bdaddr ; 1713 ušt8_t ³”_œk [16]; 1714 ušt8_t loÿl_œk [16]; 1715 } t__©Œibu‹__ (( t·cked )è tË_add_deviû_to_»sÞv_li¡_ý ; 1716  #LE_ADD_DEVICE_TO_RESOLV_LIST_CP_SIZE 39 ) 1718  #OCF_LE_REMOVE_DEVICE_FROM_RESOLV_LIST 0x0028 ) 1720 ušt8_t bdaddr_ty³ ; 1721 bdaddr_t bdaddr ; 1722 } t__©Œibu‹__ (( t·cked )è tË_»move_deviû_äom_»sÞv_li¡_ý ; 1723  #LE_REMOVE_DEVICE_FROM_RESOLV_LIST_CP_SIZE 7 ) 1725  #OCF_LE_CLEAR_RESOLV_LIST 0x0029 ) 1727  #OCF_LE_READ_RESOLV_LIST_SIZE 0x002A ) 1729 ušt8_t ¡©us ; 1730 ušt8_t size ; 1731 } t__©Œibu‹__ (( t·cked )è tË_»ad_»sÞv_li¡_size_½ ; 1732  #LE_READ_RESOLV_LIST_SIZE_RP_SIZE 2 ) 1734  #OCF_LE_SET_ADDRESS_RESOLUTION_ENABLE 0x002D ) 1736 ušt8_t ’abË ; 1737 } t__©Œibu‹__ (( t·cked )è tË_£t_add»ss_»sÞutiÚ_’abË_ý ; 1738  #LE_SET_ADDRESS_RESOLUTION_ENABLE_CP_SIZE 1 ) 1741  #OGF_VENDOR_CMD 0x3f ) 1743 #ifdeà __TIZEN_PATCH__ 1744 #ifdeà __BROADCOM_QOS_PATCH__ 1745  #BRCM_QOS_PRIORITY_NORMAL 0x00 ) 1746  #BRCM_QOS_PRIORITY_HIGH 0xFF ) 1747  #BROADCOM_QOS_CMD 0xFC57 ) 1749 ušt16_t hªdË ; 1750 ušt8_t ´iÜ™y ; 1751 } t__©Œibu‹__ (( t__·cked__ )è tbrßdcom_qos_ý ; 1752  #BROADCOM_QOS_CP_SIZE 3 ) 1758  #EVT_INQUIRY_COMPLETE 0x01 ) 1760  #EVT_INQUIRY_RESULT 0x02 ) 1762 bdaddr_t bdaddr ; 1763 ušt8_t psÿn_»p_mode ; 1764 ušt8_t psÿn_³riod_mode ; 1765 ušt8_t psÿn_mode ; 1766 ušt8_t dev_þass [3]; 1767 ušt16_t þock_off£t ; 1768 } t__©Œibu‹__ (( t·cked )è tšquœy_šfo ; 1769  #INQUIRY_INFO_SIZE 14 ) 1771  #EVT_CONN_COMPLETE 0x03 ) 1773 ušt8_t ¡©us ; 1774 ušt16_t hªdË ; 1775 bdaddr_t bdaddr ; 1776 ušt8_t lšk_ty³ ; 1777 ušt8_t ’ü_mode ; 1778 } t__©Œibu‹__ (( t·cked )è tevt_cÚn_com¶‘e ; 1779  #EVT_CONN_COMPLETE_SIZE 11 ) 1781  #EVT_CONN_REQUEST 0x04 ) 1783 bdaddr_t bdaddr ; 1784 ušt8_t dev_þass [3]; 1785 ušt8_t lšk_ty³ ; 1786 } t__©Œibu‹__ (( t·cked )è tevt_cÚn_»que¡ ; 1787  #EVT_CONN_REQUEST_SIZE 10 ) 1789  #EVT_DISCONN_COMPLETE 0x05 ) 1791 ušt8_t ¡©us ; 1792 ušt16_t hªdË ; 1793 ušt8_t »asÚ ; 1794 } t__©Œibu‹__ (( t·cked )è tevt_discÚn_com¶‘e ; 1795  #EVT_DISCONN_COMPLETE_SIZE 4 ) 1797  #EVT_AUTH_COMPLETE 0x06 ) 1799 ušt8_t ¡©us ; 1800 ušt16_t hªdË ; 1801 } t__©Œibu‹__ (( t·cked )è tevt_auth_com¶‘e ; 1802  #EVT_AUTH_COMPLETE_SIZE 3 ) 1804  #EVT_REMOTE_NAME_REQ_COMPLETE 0x07 ) 1806 ušt8_t ¡©us ; 1807 bdaddr_t bdaddr ; 1808 ušt8_t Çme [ HCI_MAX_NAME_LENGTH ]; 1809 } t__©Œibu‹__ (( t·cked )è tevt_»mÙe_Çme_»q_com¶‘e ; 1810  #EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255 ) 1812  #EVT_ENCRYPT_CHANGE 0x08 ) 1814 ušt8_t ¡©us ; 1815 ušt16_t hªdË ; 1816 ušt8_t ’üy± ; 1817 } t__©Œibu‹__ (( t·cked )è tevt_’üy±_chªge ; 1818  #EVT_ENCRYPT_CHANGE_SIZE 4 ) 1820  #EVT_CHANGE_CONN_LINK_KEY_COMPLETE 0x09 ) 1822 ušt8_t ¡©us ; 1823 ušt16_t hªdË ; 1824 } t__©Œibu‹__ (( t·cked )è tevt_chªge_cÚn_lšk_key_com¶‘e ; 1825  #EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE 3 ) 1827  #EVT_MASTER_LINK_KEY_COMPLETE 0x0A ) 1829 ušt8_t ¡©us ; 1830 ušt16_t hªdË ; 1831 ušt8_t key_æag ; 1832 } t__©Œibu‹__ (( t·cked )è tevt_ma¡”_lšk_key_com¶‘e ; 1833  #EVT_MASTER_LINK_KEY_COMPLETE_SIZE 4 ) 1835  #EVT_READ_REMOTE_FEATURES_COMPLETE 0x0B ) 1837 ušt8_t ¡©us ; 1838 ušt16_t hªdË ; 1839 ušt8_t ã©u»s [8]; 1840 } t__©Œibu‹__ (( t·cked )è tevt_»ad_»mÙe_ã©u»s_com¶‘e ; 1841  #EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11 ) 1843  #EVT_READ_REMOTE_VERSION_COMPLETE 0x0C ) 1845 ušt8_t ¡©us ; 1846 ušt16_t hªdË ; 1847 ušt8_t lmp_v” ; 1848 ušt16_t mªuçùu»r ; 1849 ušt16_t lmp_subv” ; 1850 } t__©Œibu‹__ (( t·cked )è tevt_»ad_»mÙe_v”siÚ_com¶‘e ; 1851  #EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8 ) 1853  #EVT_QOS_SETUP_COMPLETE 0x0D ) 1855 ušt8_t ¡©us ; 1856 ušt16_t hªdË ; 1857 ušt8_t æags ; 1858 hci_qos qos ; 1859 } t__©Œibu‹__ (( t·cked )è tevt_qos_£tup_com¶‘e ; 1860  #EVT_QOS_SETUP_COMPLETE_SIZE (4 + HCI_QOS_CP_SIZE ) ) 1862  #EVT_CMD_COMPLETE 0x0E ) 1864 ušt8_t ncmd ; 1865 ušt16_t Ýcode ; 1866 } t__©Œibu‹__ (( t·cked )è tevt_cmd_com¶‘e ; 1867  #EVT_CMD_COMPLETE_SIZE 3 ) 1869  #EVT_CMD_STATUS 0x0F ) 1871 ušt8_t ¡©us ; 1872 ušt8_t ncmd ; 1873 ušt16_t Ýcode ; 1874 } t__©Œibu‹__ (( t·cked )è tevt_cmd_¡©us ; 1875  #EVT_CMD_STATUS_SIZE 4 ) 1877  #EVT_HARDWARE_ERROR 0x10 ) 1879 ušt8_t code ; 1880 } t__©Œibu‹__ (( t·cked )è tevt_h¬dw¬e_”rÜ ; 1881  #EVT_HARDWARE_ERROR_SIZE 1 ) 1883  #EVT_FLUSH_OCCURRED 0x11 ) 1885 ušt16_t hªdË ; 1886 } t__©Œibu‹__ (( t·cked )è tevt_æush_occu»d ; 1887  #EVT_FLUSH_OCCURRED_SIZE 2 ) 1889  #EVT_ROLE_CHANGE 0x12 ) 1891 ušt8_t ¡©us ; 1892 bdaddr_t bdaddr ; 1893 ušt8_t rÞe ; 1894 } t__©Œibu‹__ (( t·cked )è tevt_rÞe_chªge ; 1895  #EVT_ROLE_CHANGE_SIZE 8 ) 1897  #EVT_NUM_COMP_PKTS 0x13 ) 1899 ušt8_t num_hndl ; 1901 } t__©Œibu‹__ (( t·cked )è tevt_num_comp_pkts ; 1902  #EVT_NUM_COMP_PKTS_SIZE 1 ) 1904  #EVT_MODE_CHANGE 0x14 ) 1906 ušt8_t ¡©us ; 1907 ušt16_t hªdË ; 1908 ušt8_t mode ; 1909 ušt16_t š‹rv® ; 1910 } t__©Œibu‹__ (( t·cked )è tevt_mode_chªge ; 1911  #EVT_MODE_CHANGE_SIZE 6 ) 1913  #EVT_RETURN_LINK_KEYS 0x15 ) 1915 ušt8_t num_keys ; 1917 } t__©Œibu‹__ (( t·cked )è tevt_»tuº_lšk_keys ; 1918  #EVT_RETURN_LINK_KEYS_SIZE 1 ) 1920  #EVT_PIN_CODE_REQ 0x16 ) 1922 bdaddr_t bdaddr ; 1923 } t__©Œibu‹__ (( t·cked )è tevt_pš_code_»q ; 1924  #EVT_PIN_CODE_REQ_SIZE 6 ) 1926  #EVT_LINK_KEY_REQ 0x17 ) 1928 bdaddr_t bdaddr ; 1929 } t__©Œibu‹__ (( t·cked )è tevt_lšk_key_»q ; 1930  #EVT_LINK_KEY_REQ_SIZE 6 ) 1932  #EVT_LINK_KEY_NOTIFY 0x18 ) 1934 bdaddr_t bdaddr ; 1935 ušt8_t lšk_key [16]; 1936 ušt8_t key_ty³ ; 1937 } t__©Œibu‹__ (( t·cked )è tevt_lšk_key_nÙify ; 1938  #EVT_LINK_KEY_NOTIFY_SIZE 23 ) 1940  #EVT_LOOPBACK_COMMAND 0x19 ) 1942  #EVT_DATA_BUFFER_OVERFLOW 0x1A ) 1944 ušt8_t lšk_ty³ ; 1945 } t__©Œibu‹__ (( t·cked )è tevt_d©a_bufãr_ov”æow ; 1946  #EVT_DATA_BUFFER_OVERFLOW_SIZE 1 ) 1948  #EVT_MAX_SLOTS_CHANGE 0x1B ) 1950 ušt16_t hªdË ; 1951 ušt8_t max_¦Ùs ; 1952 } t__©Œibu‹__ (( t·cked )è tevt_max_¦Ùs_chªge ; 1953  #EVT_MAX_SLOTS_CHANGE_SIZE 3 ) 1955  #EVT_READ_CLOCK_OFFSET_COMPLETE 0x1C ) 1957 ušt8_t ¡©us ; 1958 ušt16_t hªdË ; 1959 ušt16_t þock_off£t ; 1960 } t__©Œibu‹__ (( t·cked )è tevt_»ad_þock_off£t_com¶‘e ; 1961  #EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE 5 ) 1963  #EVT_CONN_PTYPE_CHANGED 0x1D ) 1965 ušt8_t ¡©us ; 1966 ušt16_t hªdË ; 1967 ušt16_t ±y³ ; 1968 } t__©Œibu‹__ (( t·cked )è tevt_cÚn_±y³_chªged ; 1969  #EVT_CONN_PTYPE_CHANGED_SIZE 5 ) 1971  #EVT_QOS_VIOLATION 0x1E ) 1973 ušt16_t hªdË ; 1974 } t__©Œibu‹__ (( t·cked )è tevt_qos_viÞ©iÚ ; 1975  #EVT_QOS_VIOLATION_SIZE 2 ) 1977  #EVT_PSCAN_REP_MODE_CHANGE 0x20 ) 1979 bdaddr_t bdaddr ; 1980 ušt8_t psÿn_»p_mode ; 1981 } t__©Œibu‹__ (( t·cked )è tevt_psÿn_»p_mode_chªge ; 1982  #EVT_PSCAN_REP_MODE_CHANGE_SIZE 7 ) 1984  #EVT_FLOW_SPEC_COMPLETE 0x21 ) 1986 ušt8_t ¡©us ; 1987 ušt16_t hªdË ; 1988 ušt8_t æags ; 1989 ušt8_t dœeùiÚ ; 1990 hci_qos qos ; 1991 } t__©Œibu‹__ (( t·cked )è tevt_æow_¥ec_com¶‘e ; 1992  #EVT_FLOW_SPEC_COMPLETE_SIZE (5 + HCI_QOS_CP_SIZE ) ) 1994  #EVT_INQUIRY_RESULT_WITH_RSSI 0x22 ) 1996 bdaddr_t bdaddr ; 1997 ušt8_t psÿn_»p_mode ; 1998 ušt8_t psÿn_³riod_mode ; 1999 ušt8_t dev_þass [3]; 2000 ušt16_t þock_off£t ; 2001 št8_t rssi ; 2002 } t__©Œibu‹__ (( t·cked )è tšquœy_šfo_w™h_rssi ; 2003  #INQUIRY_INFO_WITH_RSSI_SIZE 14 ) 2005 bdaddr_t bdaddr ; 2006 ušt8_t psÿn_»p_mode ; 2007 ušt8_t psÿn_³riod_mode ; 2008 ušt8_t psÿn_mode ; 2009 ušt8_t dev_þass [3]; 2010 ušt16_t þock_off£t ; 2011 št8_t rssi ; 2012 } t__©Œibu‹__ (( t·cked )è tšquœy_šfo_w™h_rssi_ªd_psÿn_mode ; 2013  #INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE 15 ) 2015  #EVT_READ_REMOTE_EXT_FEATURES_COMPLETE 0x23 ) 2017 ušt8_t ¡©us ; 2018 ušt16_t hªdË ; 2019 ušt8_t ·ge_num ; 2020 ušt8_t max_·ge_num ; 2021 ušt8_t ã©u»s [8]; 2022 } t__©Œibu‹__ (( t·cked )è tevt_»ad_»mÙe_ext_ã©u»s_com¶‘e ; 2023  #EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE 13 ) 2025  #EVT_SYNC_CONN_COMPLETE 0x2C ) 2027 ušt8_t ¡©us ; 2028 ušt16_t hªdË ; 2029 bdaddr_t bdaddr ; 2030 ušt8_t lšk_ty³ ; 2031 ušt8_t Œªs_š‹rv® ; 2032 ušt8_t »Œªs_wšdow ; 2033 ušt16_t rx_pkt_Ën ; 2034 ušt16_t tx_pkt_Ën ; 2035 ušt8_t aœ_mode ; 2036 } t__©Œibu‹__ (( t·cked )è tevt_sync_cÚn_com¶‘e ; 2037  #EVT_SYNC_CONN_COMPLETE_SIZE 17 ) 2039  #EVT_SYNC_CONN_CHANGED 0x2D ) 2041 ušt8_t ¡©us ; 2042 ušt16_t hªdË ; 2043 ušt8_t Œªs_š‹rv® ; 2044 ušt8_t »Œªs_wšdow ; 2045 ušt16_t rx_pkt_Ën ; 2046 ušt16_t tx_pkt_Ën ; 2047 } t__©Œibu‹__ (( t·cked )è tevt_sync_cÚn_chªged ; 2048  #EVT_SYNC_CONN_CHANGED_SIZE 9 ) 2050  #EVT_SNIFF_SUBRATING 0x2E ) 2052 ušt8_t ¡©us ; 2053 ušt16_t hªdË ; 2054 ušt16_t max_tx_Ï‹ncy ; 2055 ušt16_t max_rx_Ï‹ncy ; 2056 ušt16_t mš_»mÙe_timeout ; 2057 ušt16_t mš_loÿl_timeout ; 2058 } t__©Œibu‹__ (( t·cked )è tevt_¢iff_sub¿tšg ; 2059  #EVT_SNIFF_SUBRATING_SIZE 11 ) 2061  #EVT_EXTENDED_INQUIRY_RESULT 0x2F ) 2063 bdaddr_t bdaddr ; 2064 ušt8_t psÿn_»p_mode ; 2065 ušt8_t psÿn_³riod_mode ; 2066 ušt8_t dev_þass [3]; 2067 ušt16_t þock_off£t ; 2068 št8_t rssi ; 2069 ušt8_t d©a [ HCI_MAX_EIR_LENGTH ]; 2070 } t__©Œibu‹__ (( t·cked )è tex‹nded_šquœy_šfo ; 2071  #EXTENDED_INQUIRY_INFO_SIZE 254 ) 2073  #EVT_ENCRYPTION_KEY_REFRESH_COMPLETE 0x30 ) 2075 ušt8_t ¡©us ; 2076 ušt16_t hªdË ; 2077 } t__©Œibu‹__ (( t·cked )è tevt_’üy±iÚ_key_»äesh_com¶‘e ; 2078  #EVT_ENCRYPTION_KEY_REFRESH_COMPLETE_SIZE 3 ) 2080  #EVT_IO_CAPABILITY_REQUEST 0x31 ) 2082 bdaddr_t bdaddr ; 2083 } t__©Œibu‹__ (( t·cked )è tevt_io_ÿ·bž™y_»que¡ ; 2084  #EVT_IO_CAPABILITY_REQUEST_SIZE 6 ) 2086  #EVT_IO_CAPABILITY_RESPONSE 0x32 ) 2088 bdaddr_t bdaddr ; 2089 ušt8_t ÿ·bž™y ; 2090 ušt8_t oob_d©a ; 2091 ušt8_t auth’tiÿtiÚ ; 2092 } t__©Œibu‹__ (( t·cked )è tevt_io_ÿ·bž™y_»¥Ú£ ; 2093  #EVT_IO_CAPABILITY_RESPONSE_SIZE 9 ) 2095  #EVT_USER_CONFIRM_REQUEST 0x33 ) 2097 bdaddr_t bdaddr ; 2098 ušt32_t ·sskey ; 2099 } t__©Œibu‹__ (( t·cked )è tevt_u£r_cÚfœm_»que¡ ; 2100  #EVT_USER_CONFIRM_REQUEST_SIZE 10 ) 2102  #EVT_USER_PASSKEY_REQUEST 0x34 ) 2104 bdaddr_t bdaddr ; 2105 } t__©Œibu‹__ (( t·cked )è tevt_u£r_·sskey_»que¡ ; 2106  #EVT_USER_PASSKEY_REQUEST_SIZE 6 ) 2108  #EVT_REMOTE_OOB_DATA_REQUEST 0x35 ) 2110 bdaddr_t bdaddr ; 2111 } t__©Œibu‹__ (( t·cked )è tevt_»mÙe_oob_d©a_»que¡ ; 2112  #EVT_REMOTE_OOB_DATA_REQUEST_SIZE 6 ) 2114  #EVT_SIMPLE_PAIRING_COMPLETE 0x36 ) 2116 ušt8_t ¡©us ; 2117 bdaddr_t bdaddr ; 2118 } t__©Œibu‹__ (( t·cked )è tevt_sim¶e_·œšg_com¶‘e ; 2119  #EVT_SIMPLE_PAIRING_COMPLETE_SIZE 7 ) 2121  #EVT_LINK_SUPERVISION_TIMEOUT_CHANGED 0x38 ) 2123 ušt16_t hªdË ; 2124 ušt16_t timeout ; 2125 } t__©Œibu‹__ (( t·cked )è tevt_lšk_su³rvisiÚ_timeout_chªged ; 2126  #EVT_LINK_SUPERVISION_TIMEOUT_CHANGED_SIZE 4 ) 2128  #EVT_ENHANCED_FLUSH_COMPLETE 0x39 ) 2130 ušt16_t hªdË ; 2131 } t__©Œibu‹__ (( t·cked )è tevt_’hªûd_æush_com¶‘e ; 2132  #EVT_ENHANCED_FLUSH_COMPLETE_SIZE 2 ) 2134  #EVT_USER_PASSKEY_NOTIFY 0x3B ) 2136 bdaddr_t bdaddr ; 2137 ušt32_t ·sskey ; 2138 } t__©Œibu‹__ (( t·cked )è tevt_u£r_·sskey_nÙify ; 2139  #EVT_USER_PASSKEY_NOTIFY_SIZE 10 ) 2141  #EVT_KEYPRESS_NOTIFY 0x3C ) 2143 bdaddr_t bdaddr ; 2144 ušt8_t ty³ ; 2145 } t__©Œibu‹__ (( t·cked )è tevt_key´ess_nÙify ; 2146  #EVT_KEYPRESS_NOTIFY_SIZE 7 ) 2148  #EVT_REMOTE_HOST_FEATURES_NOTIFY 0x3D ) 2150 bdaddr_t bdaddr ; 2151 ušt8_t ã©u»s [8]; 2152 } t__©Œibu‹__ (( t·cked )è tevt_»mÙe_ho¡_ã©u»s_nÙify ; 2153  #EVT_REMOTE_HOST_FEATURES_NOTIFY_SIZE 14 ) 2155  #EVT_LE_META_EVENT 0x3E ) 2157 ušt8_t subev’t ; 2158 ušt8_t d©a [0]; 2159 } t__©Œibu‹__ (( t·cked )è tevt_Ë_m‘a_ev’t ; 2160  #EVT_LE_META_EVENT_SIZE 1 ) 2162  #EVT_LE_CONN_COMPLETE 0x01 ) 2164 ušt8_t ¡©us ; 2165 ušt16_t hªdË ; 2166 ušt8_t rÞe ; 2167 ušt8_t ³”_bdaddr_ty³ ; 2168 bdaddr_t ³”_bdaddr ; 2169 ušt16_t š‹rv® ; 2170 ušt16_t Ï‹ncy ; 2171 ušt16_t su³rvisiÚ_timeout ; 2172 ušt8_t ma¡”_þock_accu¿cy ; 2173 } t__©Œibu‹__ (( t·cked )è tevt_Ë_cÚÃùiÚ_com¶‘e ; 2174  #EVT_LE_CONN_COMPLETE_SIZE 18 ) 2176  #EVT_LE_ADVERTISING_REPORT 0x02 ) 2178 ušt8_t evt_ty³ ; 2179 ušt8_t bdaddr_ty³ ; 2180 bdaddr_t bdaddr ; 2181 ušt8_t Ëngth ; 2182 ušt8_t d©a [0]; 2183 } t__©Œibu‹__ (( t·cked )è tË_adv”tisšg_šfo ; 2184  #LE_ADVERTISING_INFO_SIZE 9 ) 2186  #EVT_LE_CONN_UPDATE_COMPLETE 0x03 ) 2188 ušt8_t ¡©us ; 2189 ušt16_t hªdË ; 2190 ušt16_t š‹rv® ; 2191 ušt16_t Ï‹ncy ; 2192 ušt16_t su³rvisiÚ_timeout ; 2193 } t__©Œibu‹__ (( t·cked )è tevt_Ë_cÚÃùiÚ_upd©e_com¶‘e ; 2194  #EVT_LE_CONN_UPDATE_COMPLETE_SIZE 9 ) 2196  #EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE 0x04 ) 2198 ušt8_t ¡©us ; 2199 ušt16_t hªdË ; 2200 ušt8_t ã©u»s [8]; 2201 } t__©Œibu‹__ (( t·cked )è tevt_Ë_»ad_»mÙe_u£d_ã©u»s_com¶‘e ; 2202  #EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE_SIZE 11 ) 2204  #EVT_LE_LTK_REQUEST 0x05 ) 2206 ušt16_t hªdË ; 2207 ušt64_t ¿ndom ; 2208 ušt16_t div”sif›r ; 2209 } t__©Œibu‹__ (( t·cked )è tevt_Ë_lÚg_‹rm_key_»que¡ ; 2210  #EVT_LE_LTK_REQUEST_SIZE 12 ) 2212  #EVT_PHYSICAL_LINK_COMPLETE 0x40 ) 2214 ušt8_t ¡©us ; 2215 ušt8_t hªdË ; 2216 } t__©Œibu‹__ (( t·cked )è tevt_physiÿl_lšk_com¶‘e ; 2217  #EVT_PHYSICAL_LINK_COMPLETE_SIZE 2 ) 2219  #EVT_CHANNEL_SELECTED 0x41 ) 2221  #EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE 0x42 ) 2223 ušt8_t ¡©us ; 2224 ušt8_t hªdË ; 2225 ušt8_t »asÚ ; 2226 } t__©Œibu‹__ (( t·cked )è tevt_discÚn_physiÿl_lšk_com¶‘e ; 2227  #EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE_SIZE 3 ) 2229  #EVT_PHYSICAL_LINK_LOSS_EARLY_WARNING 0x43 ) 2231 ušt8_t hªdË ; 2232 ušt8_t »asÚ ; 2233 } t__©Œibu‹__ (( t·cked )è tevt_physiÿl_lšk_loss_w¬nšg ; 2234  #EVT_PHYSICAL_LINK_LOSS_WARNING_SIZE 2 ) 2236  #EVT_PHYSICAL_LINK_RECOVERY 0x44 ) 2238 ušt8_t hªdË ; 2239 } t__©Œibu‹__ (( t·cked )è tevt_physiÿl_lšk_»cov”y ; 2240  #EVT_PHYSICAL_LINK_RECOVERY_SIZE 1 ) 2242  #EVT_LOGICAL_LINK_COMPLETE 0x45 ) 2244 ušt8_t ¡©us ; 2245 ušt16_t log_hªdË ; 2246 ušt8_t hªdË ; 2247 ušt8_t tx_æow_id ; 2248 } t__©Œibu‹__ (( t·cked )è tevt_logiÿl_lšk_com¶‘e ; 2249  #EVT_LOGICAL_LINK_COMPLETE_SIZE 5 ) 2251  #EVT_DISCONNECT_LOGICAL_LINK_COMPLETE 0x46 ) 2253  #EVT_FLOW_SPEC_MODIFY_COMPLETE 0x47 ) 2255 ušt8_t ¡©us ; 2256 ušt16_t hªdË ; 2257 } t__©Œibu‹__ (( t·cked )è tevt_æow_¥ec_modify_com¶‘e ; 2258  #EVT_FLOW_SPEC_MODIFY_COMPLETE_SIZE 3 ) 2260  #EVT_NUMBER_COMPLETED_BLOCKS 0x48 ) 2262 ušt16_t hªdË ; 2263 ušt16_t num_cm¶t_pkts ; 2264 ušt16_t num_cm¶t_blks ; 2265 } t__©Œibu‹__ (( t·cked )è tcm¶t_hªdË ; 2267 ušt16_t tÙ®_num_blocks ; 2268 ušt8_t num_hªdËs ; 2269 cm¶t_hªdË hªdËs [0]; 2270 } t__©Œibu‹__ (( t·cked )è tevt_num_com¶‘ed_blocks ; 2272  #EVT_AMP_STATUS_CHANGE 0x4D ) 2274 ušt8_t ¡©us ; 2275 ušt8_t amp_¡©us ; 2276 } t__©Œibu‹__ (( t·cked )è tevt_amp_¡©us_chªge ; 2277  #EVT_AMP_STATUS_CHANGE_SIZE 2 ) 2279  #EVT_TESTING 0xFE ) 2281  #EVT_VENDOR 0xFF ) 2284  #EVT_STACK_INTERNAL 0xFD ) 2286 ušt16_t ty³ ; 2287 ušt8_t d©a [0]; 2288 } t__©Œibu‹__ (( t·cked )è tevt_¡ack_š‹º® ; 2289  #EVT_STACK_INTERNAL_SIZE 2 ) 2291  #EVT_SI_DEVICE 0x01 ) 2293 ušt16_t ev’t ; 2294 ušt16_t dev_id ; 2295 } t__©Œibu‹__ (( t·cked )è tevt_si_deviû ; 2296  #EVT_SI_DEVICE_SIZE 4 ) 2299  #HCI_TYPE_LEN 1 ) 2302 ušt16_t Ýcode ; 2303 ušt8_t ¶’ ; 2304 } t__©Œibu‹__ (( t·cked )è thci_commªd_hdr ; 2305  #HCI_COMMAND_HDR_SIZE 3 ) 2308 ušt8_t evt ; 2309 ušt8_t ¶’ ; 2310 } t__©Œibu‹__ (( t·cked )è thci_ev’t_hdr ; 2311  #HCI_EVENT_HDR_SIZE 2 ) 2314 ušt16_t hªdË ; 2315 ušt16_t dËn ; 2316 } t__©Œibu‹__ (( t·cked )è thci_aþ_hdr ; 2317  #HCI_ACL_HDR_SIZE 4 ) 2320 ušt16_t hªdË ; 2321 ušt8_t dËn ; 2322 } t__©Œibu‹__ (( t·cked )è thci_sco_hdr ; 2323  #HCI_SCO_HDR_SIZE 3 ) 2326 ušt16_t deviû ; 2327 ušt16_t ty³ ; 2328 ušt16_t ¶’ ; 2329 } t__©Œibu‹__ (( t·cked )è thci_msg_hdr ; 2330  #HCI_MSG_HDR_SIZE 6 ) 2333  #cmd_Ýcode_·ck ( ogf , ocf è( ušt16_t )((ocà& 0x03ff)|(ogà<< 10)) ) 2334  #cmd_Ýcode_ogf ( Ý è(Ý >> 10) ) 2335  #cmd_Ýcode_ocf ( Ý è(Ý & 0x03ff) ) 2338  #aþ_hªdË_·ck ( h , f è( ušt16_t )((h & 0x0fff)|(à<< 12)) ) 2339  #aþ_hªdË ( h è(h & 0x0fff) ) 2340  #aþ_æags ( h è(h >> 12) ) 2345  #HCI_DATA_DIR 1 ) 2346  #HCI_FILTER 2 ) 2347  #HCI_TIME_STAMP 3 ) 2350  #HCI_CMSG_DIR 0x0001 ) 2351  #HCI_CMSG_TSTAMP 0x0002 ) 2353  ssockaddr_hci { 2354 §_çmžy_t hci_çmžy ; 2355  hci_dev ; 2356  hci_chªÃl ; 2358  #HCI_DEV_NONE 0xffff ) 2360  #HCI_CHANNEL_RAW 0 ) 2361  #HCI_CHANNEL_USER 1 ) 2362  #HCI_CHANNEL_MONITOR 2 ) 2363  #HCI_CHANNEL_CONTROL 3 ) 2365  shci_fž‹r { 2366 ušt32_t ty³_mask ; 2367 ušt32_t ev’t_mask [2]; 2368 ušt16_t Ýcode ; 2371  #HCI_FLT_TYPE_BITS 31 ) 2372  #HCI_FLT_EVENT_BITS 63 ) 2373  #HCI_FLT_OGF_BITS 63 ) 2374  #HCI_FLT_OCF_BITS 127 ) 2377  shci_dev_¡©s { 2378 ušt32_t ”r_rx ; 2379 ušt32_t ”r_tx ; 2380 ušt32_t cmd_tx ; 2381 ušt32_t evt_rx ; 2382 ušt32_t aþ_tx ; 2383 ušt32_t aþ_rx ; 2384 ušt32_t sco_tx ; 2385 ušt32_t sco_rx ; 2386 ušt32_t by‹_rx ; 2387 ušt32_t by‹_tx ; 2390  shci_dev_šfo { 2391 ušt16_t dev_id ; 2392  Çme [8]; 2394 bdaddr_t bdaddr ; 2396 ušt32_t æags ; 2397 ušt8_t ty³ ; 2399 ušt8_t ã©u»s [8]; 2401 ušt32_t pkt_ty³ ; 2402 ušt32_t lšk_pÞicy ; 2403 ušt32_t lšk_mode ; 2405 ušt16_t aþ_mtu ; 2406 ušt16_t aþ_pkts ; 2407 ušt16_t sco_mtu ; 2408 ušt16_t sco_pkts ; 2410  hci_dev_¡©s ¡© ; 2413  shci_cÚn_šfo { 2414 ušt16_t hªdË ; 2415 bdaddr_t bdaddr ; 2416 ušt8_t ty³ ; 2417 ušt8_t out ; 2418 ušt16_t ¡©e ; 2419 ušt32_t lšk_mode ; 2422  shci_dev_»q { 2423 ušt16_t dev_id ; 2424 ušt32_t dev_Ýt ; 2427  shci_dev_li¡_»q { 2428 ušt16_t dev_num ; 2429  hci_dev_»q dev_»q [0]; 2432  shci_cÚn_li¡_»q { 2433 ušt16_t dev_id ; 2434 ušt16_t cÚn_num ; 2435  hci_cÚn_šfo cÚn_šfo [0]; 2438  shci_cÚn_šfo_»q { 2439 bdaddr_t bdaddr ; 2440 ušt8_t ty³ ; 2441  hci_cÚn_šfo cÚn_šfo [0]; 2444  shci_auth_šfo_»q { 2445 bdaddr_t bdaddr ; 2446 ušt8_t ty³ ; 2449  shci_šquœy_»q { 2450 ušt16_t dev_id ; 2451 ušt16_t æags ; 2452 ušt8_t Ïp [3]; 2453 ušt8_t Ëngth ; 2454 ušt8_t num_r¥ ; 2456  #IREQ_CACHE_FLUSH 0x0001 ) 2458 #ifdeà __ýlu¥lus @lib/hci_lib.h 26 #iâdeà __HCI_LIB_H 27  #__HCI_LIB_H ) 29 #ifdeà __ýlu¥lus 33  shci_»que¡ { 34 ušt16_t ogf ; 35 ušt16_t ocf ; 36  ev’t ; 37 * ý¬am ; 38  þ’ ; 39 * ½¬am ; 40  ¾’ ; 43  shci_v”siÚ { 44 ušt16_t mªuçùu»r ; 45 ušt8_t hci_v” ; 46 ušt16_t hci_»v ; 47 ušt8_t lmp_v” ; 48 ušt16_t lmp_subv” ; 51  hci_Ý’_dev ( dev_id ); 52  hci_þo£_dev ( dd ); 53  hci_£nd_cmd ( dd , ušt16_t ogf , ušt16_ˆ ocf , ušt8_t ¶’ , * ·¿m ); 54  hci_£nd_»q ( dd ,  hci_»que¡ * »q ,  timeout ); 56  hci_ü—‹_cÚÃùiÚ ( dd , cÚ¡ bdaddr_t * bdaddr , ušt16_t ±y³ , ušt16_ˆ þkoff£t , ušt8_t rsw™ch , ušt16_ˆ* hªdË ,  to ); 57  hci_discÚÃù ( dd , ušt16_t hªdË , ušt8_t »asÚ ,  to ); 59  hci_šquœy ( dev_id ,  Ën ,  num_r¥ , cÚ¡ ušt8_t * Ïp , šquœy_šfo ** ii ,  æags ); 60  hci_devšfo ( dev_id ,  hci_dev_šfo * di ); 61  hci_devba ( dev_id , bdaddr_t * bdaddr ); 62  hci_devid (cÚ¡ * ¡r ); 64  hci_»ad_loÿl_Çme ( dd ,  Ën , * Çme ,  to ); 65  hci_wr™e_loÿl_Çme ( dd , cÚ¡ * Çme ,  to ); 66  hci_»ad_»mÙe_Çme ( dd , cÚ¡ bdaddr_t * bdaddr ,  Ën , * Çme ,  to ); 67  hci_»ad_»mÙe_Çme_w™h_þock_off£t ( dd , cÚ¡ bdaddr_t * bdaddr , ušt8_t psÿn_»p_mode , ušt16_t þkoff£t ,  Ën , * Çme ,  to ); 68  hci_»ad_»mÙe_Çme_ÿnûl ( dd , cÚ¡ bdaddr_t * bdaddr ,  to ); 69  hci_»ad_»mÙe_v”siÚ ( dd , ušt16_t hªdË ,  hci_v”siÚ * v” ,  to ); 70  hci_»ad_»mÙe_ã©u»s ( dd , ušt16_t hªdË , ušt8_t * ã©u»s ,  to ); 71  hci_»ad_»mÙe_ext_ã©u»s ( dd , ušt16_t hªdË , ušt8_t ·ge , ušt8_ˆ* max_·ge , ušt8_ˆ* ã©u»s ,  to ); 72  hci_»ad_þock_off£t ( dd , ušt16_t hªdË , ušt16_ˆ* þkoff£t ,  to ); 73  hci_»ad_loÿl_v”siÚ ( dd ,  hci_v”siÚ * v” ,  to ); 74  hci_»ad_loÿl_commªds ( dd , ušt8_t * commªds ,  to ); 75  hci_»ad_loÿl_ã©u»s ( dd , ušt8_t * ã©u»s ,  to ); 76  hci_»ad_loÿl_ext_ã©u»s ( dd , ušt8_t ·ge , ušt8_ˆ* max_·ge , ušt8_ˆ* ã©u»s ,  to ); 77  hci_»ad_bd_addr ( dd , bdaddr_t * bdaddr ,  to ); 78  hci_»ad_þass_of_dev ( dd , ušt8_t * þs ,  to ); 79  hci_wr™e_þass_of_dev ( dd , ušt32_t þs ,  to ); 80  hci_»ad_voiû_£‰šg ( dd , ušt16_t * vs ,  to ); 81  hci_wr™e_voiû_£‰šg ( dd , ušt16_t vs ,  to ); 82  hci_»ad_cu¼’t_Ÿc_Ïp ( dd , ušt8_t * num_Ÿc , ušt8_ˆ* Ïp ,  to ); 83  hci_wr™e_cu¼’t_Ÿc_Ïp ( dd , ušt8_t num_Ÿc , ušt8_ˆ* Ïp ,  to ); 84  hci_»ad_¡Üed_lšk_key ( dd , bdaddr_t * bdaddr , ušt8_t ®l ,  to ); 85  hci_wr™e_¡Üed_lšk_key ( dd , bdaddr_t * bdaddr , ušt8_t * key ,  to ); 86  hci_d–‘e_¡Üed_lšk_key ( dd , bdaddr_t * bdaddr , ušt8_t ®l ,  to ); 87  hci_auth’tiÿ‹_lšk ( dd , ušt16_t hªdË ,  to ); 88  hci_’üy±_lšk ( dd , ušt16_t hªdË , ušt8_t ’üy± ,  to ); 89  hci_chªge_lšk_key ( dd , ušt16_t hªdË ,  to ); 90  hci_sw™ch_rÞe ( dd , bdaddr_t * bdaddr , ušt8_t rÞe ,  to ); 91  hci_·rk_mode ( dd , ušt16_t hªdË , ušt16_ˆ max_š‹rv® , ušt16_ˆ mš_š‹rv® ,  to ); 92  hci_ex™_·rk_mode ( dd , ušt16_t hªdË ,  to ); 93  hci_»ad_šquœy_sÿn_ty³ ( dd , ušt8_t * ty³ ,  to ); 94  hci_wr™e_šquœy_sÿn_ty³ ( dd , ušt8_t ty³ ,  to ); 95  hci_»ad_šquœy_mode ( dd , ušt8_t * mode ,  to ); 96  hci_wr™e_šquœy_mode ( dd , ušt8_t mode ,  to ); 97  hci_»ad_afh_mode ( dd , ušt8_t * mode ,  to ); 98  hci_wr™e_afh_mode ( dd , ušt8_t mode ,  to ); 99  hci_»ad_ext_šquœy_»¥Ú£ ( dd , ušt8_t * ãc , ušt8_ˆ* d©a ,  to ); 100  hci_wr™e_ext_šquœy_»¥Ú£ ( dd , ušt8_t ãc , ušt8_ˆ* d©a ,  to ); 101  hci_»ad_sim¶e_·œšg_mode ( dd , ušt8_t * mode ,  to ); 102  hci_wr™e_sim¶e_·œšg_mode ( dd , ušt8_t mode ,  to ); 103  hci_»ad_loÿl_oob_d©a ( dd , ušt8_t * hash , ušt8_ˆ* ¿ndomiz” ,  to ); 104  hci_»ad_šq_»¥Ú£_tx_pow”_Ëv– ( dd , št8_t * Ëv– ,  to ); 105  hci_»ad_šquœy_Œªsm™_pow”_Ëv– ( dd , št8_t * Ëv– ,  to ); 106  hci_wr™e_šquœy_Œªsm™_pow”_Ëv– ( dd , št8_t Ëv– ,  to ); 107  hci_»ad_Œªsm™_pow”_Ëv– ( dd , ušt16_t hªdË , ušt8_t ty³ , št8_t * Ëv– ,  to ); 108  hci_»ad_lšk_pÞicy ( dd , ušt16_t hªdË , ušt16_ˆ* pÞicy ,  to ); 109  hci_wr™e_lšk_pÞicy ( dd , ušt16_t hªdË , ušt16_ˆ pÞicy ,  to ); 110  hci_»ad_lšk_su³rvisiÚ_timeout ( dd , ušt16_t hªdË , ušt16_ˆ* timeout ,  to ); 111  hci_wr™e_lšk_su³rvisiÚ_timeout ( dd , ušt16_t hªdË , ušt16_ˆ timeout ,  to ); 112  hci_£t_afh_þassifiÿtiÚ ( dd , ušt8_t * m­ ,  to ); 113  hci_»ad_lšk_qu®™y ( dd , ušt16_t hªdË , ušt8_t * lšk_qu®™y ,  to ); 114  hci_»ad_rssi ( dd , ušt16_t hªdË , št8_t * rssi ,  to ); 115  hci_»ad_afh_m­ ( dd , ušt16_t hªdË , ušt8_t * mode , ušt8_ˆ* m­ ,  to ); 116  hci_»ad_þock ( dd , ušt16_t hªdË , ušt8_t which , ušt32_t * þock , ušt16_ˆ* accu¿cy ,  to ); 118  hci_Ë_£t_sÿn_’abË ( dev_id , ušt8_t ’abË , ušt8_ˆ fž‹r_dup ,  to ); 119  hci_Ë_£t_sÿn_·¿m‘”s ( dev_id , ušt8_t ty³ , ušt16_t š‹rv® , 120 ušt16_t wšdow , ušt8_t own_ty³ , 121 ušt8_t fž‹r ,  to ); 122  hci_Ë_£t_adv”ti£_’abË ( dev_id , ušt8_t ’abË ,  to ); 123  hci_Ë_ü—‹_cÚn ( dd , ušt16_t š‹rv® , ušt16_ˆ wšdow , 124 ušt8_t š™ŸtÜ_fž‹r , ušt8_ˆ ³”_bdaddr_ty³ , 125 bdaddr_t ³”_bdaddr , ušt8_t own_bdaddr_ty³ , 126 ušt16_t mš_š‹rv® , ušt16_ˆ max_š‹rv® , 127 ušt16_t Ï‹ncy , ušt16_ˆ su³rvisiÚ_timeout , 128 ušt16_t mš_û_Ëngth , ušt16_ˆ max_û_Ëngth , 129 ušt16_t * hªdË ,  to ); 130  hci_Ë_cÚn_upd©e ( dd , ušt16_t hªdË , ušt16_ˆ mš_š‹rv® , 131 ušt16_t max_š‹rv® , ušt16_ˆ Ï‹ncy , 132 ušt16_t su³rvisiÚ_timeout ,  to ); 133  hci_Ë_add_wh™e_li¡ ( dd , cÚ¡ bdaddr_t * bdaddr , ušt8_t ty³ ,  to ); 134  hci_Ë_rm_wh™e_li¡ ( dd , cÚ¡ bdaddr_t * bdaddr , ušt8_t ty³ ,  to ); 135  hci_Ë_»ad_wh™e_li¡_size ( dd , ušt8_t * size ,  to ); 136  hci_Ë_þ—r_wh™e_li¡ ( dd ,  to ); 137  hci_Ë_add_»sÞvšg_li¡ ( dd , cÚ¡ bdaddr_t * bdaddr , ušt8_t ty³ , 138 ušt8_t * ³”_œk , ušt8_ˆ* loÿl_œk ,  to ); 139  hci_Ë_rm_»sÞvšg_li¡ ( dd , cÚ¡ bdaddr_t * bdaddr , ušt8_t ty³ ,  to ); 140  hci_Ë_þ—r_»sÞvšg_li¡ ( dd ,  to ); 141  hci_Ë_»ad_»sÞvšg_li¡_size ( dd , ušt8_t * size ,  to ); 142  hci_Ë_£t_add»ss_»sÞutiÚ_’abË ( dev_id , ušt8_t ’abË ,  to ); 143  hci_Ë_»ad_»mÙe_ã©u»s ( dd , ušt16_t hªdË , ušt8_t * ã©u»s ,  to ); 145  hci_fÜ_—ch_dev ( æag , (* func )( dd ,  dev_id ,  ¬g ), arg); 146  hci_g‘_rou‹ ( bdaddr_t * bdaddr ); 148 * hci_bu¡o¡r ( bus ); 149 * hci_ty³to¡r ( ty³ ); 150 * hci_dty³to¡r ( ty³ ); 151 * hci_dæag¡o¡r ( ušt32_t æags ); 152 * hci_±y³to¡r ( ±y³ ); 153  hci_¡¹Ýty³ (* ¡r , * v® ); 154 * hci_scÝty³to¡r ( ±y³ ); 155  hci_¡¹oscÝty³ (* ¡r , * v® ); 156 * hci_Íto¡r ( ±y³ ); 157  hci_¡¹Þp (* ¡r , * v® ); 158 * hci_lmto¡r ( ±y³ ); 159  hci_¡¹Þm (* ¡r , * v® ); 161 * hci_cmdto¡r ( cmd ); 162 * hci_commªd¡o¡r ( ušt8_t * commªds , * ´ef ,  width ); 164 * hci_v”to¡r ( v” ); 165  hci_¡¹ov” (* ¡r , * v” ); 166 * lmp_v”to¡r ( v” ); 167  lmp_¡¹ov” (* ¡r , * v” ); 168 * ·l_v”to¡r ( v” ); 169  ·l_¡¹ov” (* ¡r , * v” ); 171 * lmp_ã©u»¡o¡r ( ušt8_t * ã©u»s , * ´ef ,  width ); 173  šlše  hci_£t_b™ ( Ä , * addr ) 175 *(( ušt32_t *è addr + ( Ä >> 5)) |= (1 << (nr & 31)); 178  šlše  hci_þ—r_b™ ( Ä , * addr ) 180 *(( ušt32_t *è addr + ( Ä >> 5)) &= ~(1 << (nr & 31)); 183  šlše  hci_‹¡_b™ ( Ä , * addr ) 185  *(( ušt32_t *è addr + ( Ä >> 5)) & (1 << (nr & 31)); 189  šlše  hci_fž‹r_þ—r ( hci_fž‹r * f ) 191 mem£t ( f , 0, (*f)); 193  šlše  hci_fž‹r_£t_±y³ ( t ,  hci_fž‹r * f ) 195 hci_£t_b™ (( t =ð HCI_VENDOR_PKT è? 0 : (ˆ& HCI_FLT_TYPE_BITS ), & f -> ty³_mask ); 197  šlše  hci_fž‹r_þ—r_±y³ ( t ,  hci_fž‹r * f ) 199 hci_þ—r_b™ (( t =ð HCI_VENDOR_PKT è? 0 : (ˆ& HCI_FLT_TYPE_BITS ), & f -> ty³_mask ); 201  šlše  hci_fž‹r_‹¡_±y³ ( t ,  hci_fž‹r * f ) 203  hci_‹¡_b™ (( t =ð HCI_VENDOR_PKT è? 0 : (ˆ& HCI_FLT_TYPE_BITS ), & f -> ty³_mask ); 205  šlše  hci_fž‹r_®l_±y³s ( hci_fž‹r * f ) 207 mem£t ((*è& f -> ty³_mask , 0xff, (f->type_mask)); 209  šlše  hci_fž‹r_£t_ev’t ( e ,  hci_fž‹r * f ) 211 hci_£t_b™ (( e & HCI_FLT_EVENT_BITS ), & f -> ev’t_mask ); 213  šlše  hci_fž‹r_þ—r_ev’t ( e ,  hci_fž‹r * f ) 215 hci_þ—r_b™ (( e & HCI_FLT_EVENT_BITS ), & f -> ev’t_mask ); 217  šlše  hci_fž‹r_‹¡_ev’t ( e ,  hci_fž‹r * f ) 219  hci_‹¡_b™ (( e & HCI_FLT_EVENT_BITS ), & f -> ev’t_mask ); 221  šlše  hci_fž‹r_®l_ev’ts ( hci_fž‹r * f ) 223 mem£t ((*è f -> ev’t_mask , 0xff, (f->event_mask)); 225  šlše  hci_fž‹r_£t_Ýcode ( Ýcode ,  hci_fž‹r * f ) 227 f -> Ýcode = opcode; 229  šlše  hci_fž‹r_þ—r_Ýcode ( hci_fž‹r * f ) 231 f -> Ýcode = 0; 233  šlše  hci_fž‹r_‹¡_Ýcode ( Ýcode ,  hci_fž‹r * f ) 235  ( f -> Ýcode == opcode); 238 #ifdeà __ýlu¥lus @lib/hidp.h 24 #iâdeà __HIDP_H 25  #__HIDP_H ) 27 #ifdeà __ýlu¥lus 32  #HIDP_MINIMUM_MTU 48 ) 33  #HIDP_DEFAULT_MTU 48 ) 36  #HIDPCONNADD `_IOW ('H', 200, ) ) 37  #HIDPCONNDEL `_IOW ('H', 201, ) ) 38  #HIDPGETCONNLIST `_IOR ('H', 210, ) ) 39  #HIDPGETCONNINFO `_IOR ('H', 211, ) ) 41  #HIDP_VIRTUAL_CABLE_UNPLUG 0 ) 42  #HIDP_BOOT_PROTOCOL_MODE 1 ) 43  #HIDP_BLUETOOTH_VENDOR_ID 9 ) 45  shidp_cÚÇdd_»q { 46  ù¾_sock ; 47  šŒ_sock ; 48 ušt16_t ·r£r ; 49 ušt16_t rd_size ; 50 ušt8_t * rd_d©a ; 51 ušt8_t couÁry ; 52 ušt8_t subþass ; 53 ušt16_t v’dÜ ; 54 ušt16_t ´oduù ; 55 ušt16_t v”siÚ ; 56 ušt32_t æags ; 57 ušt32_t idË_to ; 58  Çme [128]; 61  shidp_cÚnd–_»q { 62 bdaddr_t bdaddr ; 63 ušt32_t æags ; 66  shidp_cÚnšfo { 67 bdaddr_t bdaddr ; 68 ušt32_t æags ; 69 ušt16_t ¡©e ; 70 ušt16_t v’dÜ ; 71 ušt16_t ´oduù ; 72 ušt16_t v”siÚ ; 73  Çme [128]; 76  shidp_cÚÆi¡_»q { 77 ušt32_t úum ; 78  hidp_cÚnšfo * ci ; 81 #ifdeà __ýlu¥lus @lib/l2cap.h 27 #iâdeà __L2CAP_H 28  #__L2CAP_H ) 30 #ifdeà __ýlu¥lus 34  ~ 37  #L2CAP_DEFAULT_MTU 672 ) 38  #L2CAP_DEFAULT_FLUSH_TO 0xFFFF ) 41  ssockaddr_l2 { 42 §_çmžy_t l2_çmžy ; 43  l2_psm ; 44 bdaddr_t l2_bdaddr ; 45  l2_cid ; 46 ušt8_t l2_bdaddr_ty³ ; 50  #L2CAP_OPTIONS 0x01 ) 51  sl2ÿp_ÝtiÚs { 52 ušt16_t omtu ; 53 ušt16_t imtu ; 54 ušt16_t æush_to ; 55 ušt8_t mode ; 56 ušt8_t fcs ; 57 ušt8_t max_tx ; 58 ušt16_t txwš_size ; 61  #L2CAP_CONNINFO 0x02 ) 62  sl2ÿp_cÚnšfo { 63 ušt16_t hci_hªdË ; 64 ušt8_t dev_þass [3]; 67  #L2CAP_LM 0x03 ) 68  #L2CAP_LM_MASTER 0x0001 ) 69  #L2CAP_LM_AUTH 0x0002 ) 70  #L2CAP_LM_ENCRYPT 0x0004 ) 71  #L2CAP_LM_TRUSTED 0x0008 ) 72  #L2CAP_LM_RELIABLE 0x0010 ) 73  #L2CAP_LM_SECURE 0x0020 ) 76  #L2CAP_COMMAND_REJ 0x01 ) 77  #L2CAP_CONN_REQ 0x02 ) 78  #L2CAP_CONN_RSP 0x03 ) 79  #L2CAP_CONF_REQ 0x04 ) 80  #L2CAP_CONF_RSP 0x05 ) 81  #L2CAP_DISCONN_REQ 0x06 ) 82  #L2CAP_DISCONN_RSP 0x07 ) 83  #L2CAP_ECHO_REQ 0x08 ) 84  #L2CAP_ECHO_RSP 0x09 ) 85  #L2CAP_INFO_REQ 0x0a ) 86  #L2CAP_INFO_RSP 0x0b ) 87  #L2CAP_CREATE_REQ 0x0c ) 88  #L2CAP_CREATE_RSP 0x0d ) 89  #L2CAP_MOVE_REQ 0x0e ) 90  #L2CAP_MOVE_RSP 0x0f ) 91  #L2CAP_MOVE_CFM 0x10 ) 92  #L2CAP_MOVE_CFM_RSP 0x11 ) 95  #L2CAP_FEAT_FLOWCTL 0x00000001 ) 96  #L2CAP_FEAT_RETRANS 0x00000002 ) 97  #L2CAP_FEAT_BIDIR_QOS 0x00000004 ) 98  #L2CAP_FEAT_ERTM 0x00000008 ) 99  #L2CAP_FEAT_STREAMING 0x00000010 ) 100  #L2CAP_FEAT_FCS 0x00000020 ) 101  #L2CAP_FEAT_EXT_FLOW 0x00000040 ) 102  #L2CAP_FEAT_FIXED_CHAN 0x00000080 ) 103  #L2CAP_FEAT_EXT_WINDOW 0x00000100 ) 104  #L2CAP_FEAT_UCD 0x00000200 ) 107  #L2CAP_FC_L2CAP 0x02 ) 108  #L2CAP_FC_CONNLESS 0x04 ) 109  #L2CAP_FC_A2MP 0x08 ) 113 ušt16_t Ën ; 114 ušt16_t cid ; 115 } t__©Œibu‹__ (( t·cked )è tl2ÿp_hdr ; 116  #L2CAP_HDR_SIZE 4 ) 119 ušt8_t code ; 120 ušt8_t id’t ; 121 ušt16_t Ën ; 122 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cmd_hdr ; 123  #L2CAP_CMD_HDR_SIZE 4 ) 126 ušt16_t »asÚ ; 127 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cmd_»j ; 128  #L2CAP_CMD_REJ_SIZE 2 ) 131 ušt16_t psm ; 132 ušt16_t scid ; 133 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cÚn_»q ; 134  #L2CAP_CONN_REQ_SIZE 4 ) 137 ušt16_t dcid ; 138 ušt16_t scid ; 139 ušt16_t »suÉ ; 140 ušt16_t ¡©us ; 141 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cÚn_r¥ ; 142  #L2CAP_CONN_RSP_SIZE 8 ) 145  #L2CAP_CR_SUCCESS 0x0000 ) 146  #L2CAP_CR_PEND 0x0001 ) 147  #L2CAP_CR_BAD_PSM 0x0002 ) 148  #L2CAP_CR_SEC_BLOCK 0x0003 ) 149  #L2CAP_CR_NO_MEM 0x0004 ) 152  #L2CAP_CS_NO_INFO 0x0000 ) 153  #L2CAP_CS_AUTHEN_PEND 0x0001 ) 154  #L2CAP_CS_AUTHOR_PEND 0x0002 ) 157 ušt16_t dcid ; 158 ušt16_t æags ; 159 ušt8_t d©a [0]; 160 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cÚf_»q ; 161  #L2CAP_CONF_REQ_SIZE 4 ) 164 ušt16_t scid ; 165 ušt16_t æags ; 166 ušt16_t »suÉ ; 167 ušt8_t d©a [0]; 168 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cÚf_r¥ ; 169  #L2CAP_CONF_RSP_SIZE 6 ) 171  #L2CAP_CONF_SUCCESS 0x0000 ) 172  #L2CAP_CONF_UNACCEPT 0x0001 ) 173  #L2CAP_CONF_REJECT 0x0002 ) 174  #L2CAP_CONF_UNKNOWN 0x0003 ) 175  #L2CAP_CONF_PENDING 0x0004 ) 176  #L2CAP_CONF_EFS_REJECT 0x0005 ) 179 ušt8_t ty³ ; 180 ušt8_t Ën ; 181 ušt8_t v® [0]; 182 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cÚf_Ýt ; 183  #L2CAP_CONF_OPT_SIZE 2 ) 185 #ifdeà __TIZEN_PATCH__ 187 ušt8_t mode ; 188 ušt8_t txwš_size ; 189 ušt8_t max_Œªsm™ ; 190 ušt16_t »Œªs_timeout ; 191 ušt16_t mÚ™Ü_timeout ; 192 ušt16_t max_pdu_size ; 193 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cÚf_rfc ; 194  #L2CAP_CONF_RFC_SIZE 9 ) 197  #L2CAP_CONF_MTU 0x01 ) 198  #L2CAP_CONF_FLUSH_TO 0x02 ) 199  #L2CAP_CONF_QOS 0x03 ) 200  #L2CAP_CONF_RFC 0x04 ) 201  #L2CAP_CONF_FCS 0x05 ) 202  #L2CAP_CONF_EFS 0x06 ) 203  #L2CAP_CONF_EWS 0x07 ) 205  #L2CAP_CONF_MAX_SIZE 22 ) 207  #L2CAP_MODE_BASIC 0x00 ) 208  #L2CAP_MODE_RETRANS 0x01 ) 209  #L2CAP_MODE_FLOWCTL 0x02 ) 210  #L2CAP_MODE_ERTM 0x03 ) 211  #L2CAP_MODE_STREAMING 0x04 ) 213  #L2CAP_SERVTYPE_NOTRAFFIC 0x00 ) 214  #L2CAP_SERVTYPE_BESTEFFORT 0x01 ) 215  #L2CAP_SERVTYPE_GUARANTEED 0x02 ) 218 ušt16_t dcid ; 219 ušt16_t scid ; 220 } t__©Œibu‹__ (( t·cked )è tl2ÿp_discÚn_»q ; 221  #L2CAP_DISCONN_REQ_SIZE 4 ) 224 ušt16_t dcid ; 225 ušt16_t scid ; 226 } t__©Œibu‹__ (( t·cked )è tl2ÿp_discÚn_r¥ ; 227  #L2CAP_DISCONN_RSP_SIZE 4 ) 230 ušt16_t ty³ ; 231 } t__©Œibu‹__ (( t·cked )è tl2ÿp_šfo_»q ; 232  #L2CAP_INFO_REQ_SIZE 2 ) 235 ušt16_t ty³ ; 236 ušt16_t »suÉ ; 237 ušt8_t d©a [0]; 238 } t__©Œibu‹__ (( t·cked )è tl2ÿp_šfo_r¥ ; 239  #L2CAP_INFO_RSP_SIZE 4 ) 242  #L2CAP_IT_CL_MTU 0x0001 ) 243  #L2CAP_IT_FEAT_MASK 0x0002 ) 246  #L2CAP_IR_SUCCESS 0x0000 ) 247  #L2CAP_IR_NOTSUPP 0x0001 ) 250 ušt16_t psm ; 251 ušt16_t scid ; 252 ušt8_t id ; 253 } t__©Œibu‹__ (( t·cked )è tl2ÿp_ü—‹_»q ; 254  #L2CAP_CREATE_REQ_SIZE 5 ) 257 ušt16_t dcid ; 258 ušt16_t scid ; 259 ušt16_t »suÉ ; 260 ušt16_t ¡©us ; 261 } t__©Œibu‹__ (( t·cked )è tl2ÿp_ü—‹_r¥ ; 262  #L2CAP_CREATE_RSP_SIZE 8 ) 265 ušt16_t icid ; 266 ušt8_t id ; 267 } t__©Œibu‹__ (( t·cked )è tl2ÿp_move_»q ; 268  #L2CAP_MOVE_REQ_SIZE 3 ) 271 ušt16_t icid ; 272 ušt16_t »suÉ ; 273 } t__©Œibu‹__ (( t·cked )è tl2ÿp_move_r¥ ; 274  #L2CAP_MOVE_RSP_SIZE 4 ) 277 ušt16_t icid ; 278 ušt16_t »suÉ ; 279 } t__©Œibu‹__ (( t·cked )è tl2ÿp_move_cfm ; 280  #L2CAP_MOVE_CFM_SIZE 4 ) 283 ušt16_t icid ; 284 } t__©Œibu‹__ (( t·cked )è tl2ÿp_move_cfm_r¥ ; 285  #L2CAP_MOVE_CFM_RSP_SIZE 2 ) 287 #ifdeà __ýlu¥lus @lib/mgmt.h 24 #iâdeà __·cked 25  #__·cked `__©Œibu‹__ (( ·cked )) ) 28  #MGMT_INDEX_NONE 0xFFFF ) 30  #MGMT_STATUS_SUCCESS 0x00 ) 31  #MGMT_STATUS_UNKNOWN_COMMAND 0x01 ) 32  #MGMT_STATUS_NOT_CONNECTED 0x02 ) 33  #MGMT_STATUS_FAILED 0x03 ) 34  #MGMT_STATUS_CONNECT_FAILED 0x04 ) 35  #MGMT_STATUS_AUTH_FAILED 0x05 ) 36  #MGMT_STATUS_NOT_PAIRED 0x06 ) 37  #MGMT_STATUS_NO_RESOURCES 0x07 ) 38  #MGMT_STATUS_TIMEOUT 0x08 ) 39  #MGMT_STATUS_ALREADY_CONNECTED 0x09 ) 40  #MGMT_STATUS_BUSY 0x0a ) 41  #MGMT_STATUS_REJECTED 0x0b ) 42  #MGMT_STATUS_NOT_SUPPORTED 0x0c ) 43  #MGMT_STATUS_INVALID_PARAMS 0x0d ) 44  #MGMT_STATUS_DISCONNECTED 0x0e ) 45  #MGMT_STATUS_NOT_POWERED 0x0f ) 46  #MGMT_STATUS_CANCELLED 0x10 ) 47  #MGMT_STATUS_INVALID_INDEX 0x11 ) 48  #MGMT_STATUS_RFKILLED 0x12 ) 50  smgmt_hdr { 51 ušt16_t mÝcode ; 52 ušt16_t mšdex ; 53 ušt16_t mËn ; 54 } g__·cked ; 55  #MGMT_HDR_SIZE 6 ) 57  smgmt_addr_šfo { 58 bdaddr_t mbdaddr ; 59 ušt8_t mty³ ; 60 } g__·cked ; 62  #MGMT_OP_READ_VERSION 0x0001 ) 63  smgmt_½_»ad_v”siÚ { 64 ušt8_t mv”siÚ ; 65 ušt16_t m»visiÚ ; 66 } g__·cked ; 68  #MGMT_OP_READ_COMMANDS 0x0002 ) 69  smgmt_½_»ad_commªds { 70 ušt16_t mnum_commªds ; 71 ušt16_t mnum_ev’ts ; 72 ušt16_t mÝcodes [0]; 73 } g__·cked ; 75  #MGMT_OP_READ_INDEX_LIST 0x0003 ) 76  smgmt_½_»ad_šdex_li¡ { 77 ušt16_t mnum_cÚŒÞËrs ; 78 ušt16_t mšdex [0]; 79 } g__·cked ; 83  #MGMT_MAX_NAME_LENGTH (248 + 1) ) 84  #MGMT_MAX_SHORT_NAME_LENGTH (10 + 1) ) 86  #MGMT_SETTING_POWERED 0x00000001 ) 87  #MGMT_SETTING_CONNECTABLE 0x00000002 ) 88  #MGMT_SETTING_FAST_CONNECTABLE 0x00000004 ) 89  #MGMT_SETTING_DISCOVERABLE 0x00000008 ) 90  #MGMT_SETTING_BONDABLE 0x00000010 ) 91  #MGMT_SETTING_LINK_SECURITY 0x00000020 ) 92  #MGMT_SETTING_SSP 0x00000040 ) 93  #MGMT_SETTING_BREDR 0x00000080 ) 94  #MGMT_SETTING_HS 0x00000100 ) 95  #MGMT_SETTING_LE 0x00000200 ) 96  #MGMT_SETTING_ADVERTISING 0x00000400 ) 97  #MGMT_SETTING_SECURE_CONN 0x00000800 ) 98  #MGMT_SETTING_DEBUG_KEYS 0x00001000 ) 99  #MGMT_SETTING_PRIVACY 0x00002000 ) 100  #MGMT_SETTING_CONFIGURATION 0x00004000 ) 102  #MGMT_OP_READ_INFO 0x0004 ) 103  smgmt_½_»ad_šfo { 104 bdaddr_t mbdaddr ; 105 ušt8_t mv”siÚ ; 106 ušt16_t mmªuçùu»r ; 107 ušt32_t msuµÜ‹d_£‰šgs ; 108 ušt32_t mcu¼’t_£‰šgs ; 109 ušt8_t mdev_þass [3]; 110 ušt8_t mÇme [ MGMT_MAX_NAME_LENGTH ]; 111 ušt8_t mshÜt_Çme [ MGMT_MAX_SHORT_NAME_LENGTH ]; 112 } g__·cked ; 114  smgmt_mode { 115 ušt8_t mv® ; 116 } g__·cked ; 118  smgmt_cod { 119 ušt8_t mv® [3]; 120 } g__·cked ; 122  #MGMT_OP_SET_POWERED 0x0005 ) 124  #MGMT_OP_SET_DISCOVERABLE 0x0006 ) 125  smgmt_ý_£t_discov”abË { 126 ušt8_t mv® ; 127 ušt16_t mtimeout ; 128 } g__·cked ; 130  #MGMT_OP_SET_CONNECTABLE 0x0007 ) 132  #MGMT_OP_SET_FAST_CONNECTABLE 0x0008 ) 134  #MGMT_OP_SET_BONDABLE 0x0009 ) 136  #MGMT_OP_SET_LINK_SECURITY 0x000A ) 138  #MGMT_OP_SET_SSP 0x000B ) 140  #MGMT_OP_SET_HS 0x000C ) 142  #MGMT_OP_SET_LE 0x000D ) 144  #MGMT_OP_SET_DEV_CLASS 0x000E ) 145  smgmt_ý_£t_dev_þass { 146 ušt8_t mmajÜ ; 147 ušt8_t mmšÜ ; 148 } g__·cked ; 150  #MGMT_OP_SET_LOCAL_NAME 0x000F ) 151  smgmt_ý_£t_loÿl_Çme { 152 ušt8_t mÇme [ MGMT_MAX_NAME_LENGTH ]; 153 ušt8_t mshÜt_Çme [ MGMT_MAX_SHORT_NAME_LENGTH ]; 154 } g__·cked ; 156  #MGMT_OP_ADD_UUID 0x0010 ) 157  smgmt_ý_add_uuid { 158 ušt8_t muuid [16]; 159 ušt8_t msvc_hšt ; 160 } g__·cked ; 162  #MGMT_OP_REMOVE_UUID 0x0011 ) 163  smgmt_ý_»move_uuid { 164 ušt8_t muuid [16]; 165 } g__·cked ; 167  smgmt_lšk_key_šfo { 168  mgmt_addr_šfo maddr ; 169 ušt8_t mty³ ; 170 ušt8_t mv® [16]; 171 ušt8_t mpš_Ën ; 172 } g__·cked ; 174  #MGMT_OP_LOAD_LINK_KEYS 0x0012 ) 175  smgmt_ý_lßd_lšk_keys { 176 ušt8_t mdebug_keys ; 177 ušt16_t mkey_couÁ ; 178  mgmt_lšk_key_šfo mkeys [0]; 179 } g__·cked ; 181  smgmt_Ék_šfo { 182  mgmt_addr_šfo maddr ; 183 ušt8_t mty³ ; 184 ušt8_t mma¡” ; 185 ušt8_t m’c_size ; 186 ušt16_t mediv ; 187 ušt64_t m¿nd ; 188 ušt8_t mv® [16]; 189 } g__·cked ; 191  #MGMT_OP_LOAD_LONG_TERM_KEYS 0x0013 ) 192  smgmt_ý_lßd_lÚg_‹rm_keys { 193 ušt16_t mkey_couÁ ; 194  mgmt_Ék_šfo mkeys [0]; 195 } g__·cked ; 197  #MGMT_OP_DISCONNECT 0x0014 ) 198  smgmt_ý_discÚÃù { 199  mgmt_addr_šfo maddr ; 200 } g__·cked ; 201  smgmt_½_discÚÃù { 202  mgmt_addr_šfo maddr ; 203 } g__·cked ; 205  #MGMT_OP_GET_CONNECTIONS 0x0015 ) 206  smgmt_½_g‘_cÚÃùiÚs { 207 ušt16_t mcÚn_couÁ ; 208  mgmt_addr_šfo maddr [0]; 209 } g__·cked ; 211  #MGMT_OP_PIN_CODE_REPLY 0x0016 ) 212  smgmt_ý_pš_code_»¶y { 213  mgmt_addr_šfo maddr ; 214 ušt8_t mpš_Ën ; 215 ušt8_t mpš_code [16]; 216 } g__·cked ; 218  #MGMT_OP_PIN_CODE_NEG_REPLY 0x0017 ) 219  smgmt_ý_pš_code_Ãg_»¶y { 220  mgmt_addr_šfo maddr ; 221 } g__·cked ; 223  #MGMT_OP_SET_IO_CAPABILITY 0x0018 ) 224  smgmt_ý_£t_io_ÿ·bž™y { 225 ušt8_t mio_ÿ·bž™y ; 226 } g__·cked ; 228  #MGMT_OP_PAIR_DEVICE 0x0019 ) 229  smgmt_ý_·œ_deviû { 230  mgmt_addr_šfo maddr ; 231 ušt8_t mio_ÿp ; 232 } g__·cked ; 233  smgmt_½_·œ_deviû { 234  mgmt_addr_šfo maddr ; 235 } g__·cked ; 237  #MGMT_OP_CANCEL_PAIR_DEVICE 0x001A ) 239  #MGMT_OP_UNPAIR_DEVICE 0x001B ) 240  smgmt_ý_uÅaœ_deviû { 241  mgmt_addr_šfo maddr ; 242 ušt8_t mdiscÚÃù ; 243 } g__·cked ; 244  smgmt_½_uÅaœ_deviû { 245  mgmt_addr_šfo maddr ; 246 } g__·cked ; 248  #MGMT_OP_USER_CONFIRM_REPLY 0x001C ) 249  smgmt_ý_u£r_cÚfœm_»¶y { 250  mgmt_addr_šfo maddr ; 251 } g__·cked ; 252  smgmt_½_u£r_cÚfœm_»¶y { 253  mgmt_addr_šfo maddr ; 254 } g__·cked ; 256  #MGMT_OP_USER_CONFIRM_NEG_REPLY 0x001D ) 258  #MGMT_OP_USER_PASSKEY_REPLY 0x001E ) 259  smgmt_ý_u£r_·sskey_»¶y { 260  mgmt_addr_šfo maddr ; 261 ušt32_t m·sskey ; 262 } g__·cked ; 263  smgmt_½_u£r_·sskey_»¶y { 264  mgmt_addr_šfo maddr ; 265 } g__·cked ; 267  #MGMT_OP_USER_PASSKEY_NEG_REPLY 0x001F ) 268  smgmt_ý_u£r_·sskey_Ãg_»¶y { 269  mgmt_addr_šfo maddr ; 270 } g__·cked ; 272  #MGMT_OP_READ_LOCAL_OOB_DATA 0x0020 ) 273  smgmt_½_»ad_loÿl_oob_d©a { 274 ušt8_t mhash [16]; 275 ušt8_t m¿ndomiz” [16]; 276 } g__·cked ; 277  smgmt_½_»ad_loÿl_oob_ext_d©a { 278 ušt8_t mhash192 [16]; 279 ušt8_t m¿ndomiz”192 [16]; 280 ušt8_t mhash256 [16]; 281 ušt8_t m¿ndomiz”256 [16]; 282 } g__·cked ; 284  #MGMT_OP_ADD_REMOTE_OOB_DATA 0x0021 ) 285  smgmt_ý_add_»mÙe_oob_d©a { 286  mgmt_addr_šfo maddr ; 287 ušt8_t mhash192 [16]; 288 ušt8_t m¿nd192 [16]; 289 ušt8_t mhash256 [16]; 290 ušt8_t m¿nd256 [16]; 291 } g__·cked ; 293  #MGMT_OP_REMOVE_REMOTE_OOB_DATA 0x0022 ) 294  smgmt_ý_»move_»mÙe_oob_d©a { 295  mgmt_addr_šfo maddr ; 296 } g__·cked ; 298  #MGMT_OP_START_DISCOVERY 0x0023 ) 299  smgmt_ý_¡¬t_discov”y { 300 ušt8_t mty³ ; 301 } g__·cked ; 303  #MGMT_OP_STOP_DISCOVERY 0x0024 ) 304  smgmt_ý_¡Ý_discov”y { 305 ušt8_t mty³ ; 306 } g__·cked ; 308  #MGMT_OP_CONFIRM_NAME 0x0025 ) 309  smgmt_ý_cÚfœm_Çme { 310  mgmt_addr_šfo maddr ; 311 ušt8_t mÇme_known ; 312 } g__·cked ; 313  smgmt_½_cÚfœm_Çme { 314  mgmt_addr_šfo maddr ; 315 } g__·cked ; 317  #MGMT_OP_BLOCK_DEVICE 0x0026 ) 318  smgmt_ý_block_deviû { 319  mgmt_addr_šfo maddr ; 320 } g__·cked ; 322  #MGMT_OP_UNBLOCK_DEVICE 0x0027 ) 323  smgmt_ý_unblock_deviû { 324  mgmt_addr_šfo maddr ; 325 } g__·cked ; 327  #MGMT_OP_SET_DEVICE_ID 0x0028 ) 328  smgmt_ý_£t_deviû_id { 329 ušt16_t msourû ; 330 ušt16_t mv’dÜ ; 331 ušt16_t m´oduù ; 332 ušt16_t mv”siÚ ; 333 } g__·cked ; 335  #MGMT_OP_SET_ADVERTISING 0x0029 ) 337  #MGMT_OP_SET_BREDR 0x002A ) 339  #MGMT_OP_SET_STATIC_ADDRESS 0x002B ) 340  smgmt_ý_£t_¡©ic_add»ss { 341 bdaddr_t mbdaddr ; 342 } g__·cked ; 344  #MGMT_OP_SET_SCAN_PARAMS 0x002C ) 345  smgmt_ý_£t_sÿn_·¿ms { 346 ušt16_t mš‹rv® ; 347 ušt16_t mwšdow ; 348 } g__·cked ; 350  #MGMT_OP_SET_SECURE_CONN 0x002D ) 352  #MGMT_OP_SET_DEBUG_KEYS 0x002E ) 354  smgmt_œk_šfo { 355  mgmt_addr_šfo maddr ; 356 ušt8_t mv® [16]; 357 } g__·cked ; 359  #MGMT_OP_SET_PRIVACY 0x002F ) 360  smgmt_ý_£t_´ivacy { 361 ušt8_t m´ivacy ; 362 ušt8_t mœk [16]; 363 } g__·cked ; 365  #MGMT_OP_LOAD_IRKS 0x0030 ) 366  smgmt_ý_lßd_œks { 367 ušt16_t mœk_couÁ ; 368  mgmt_œk_šfo mœks [0]; 369 } g__·cked ; 371  #MGMT_OP_GET_CONN_INFO 0x0031 ) 372  smgmt_ý_g‘_cÚn_šfo { 373  mgmt_addr_šfo maddr ; 374 } g__·cked ; 375  smgmt_½_g‘_cÚn_šfo { 376  mgmt_addr_šfo maddr ; 377 št8_t mrssi ; 378 št8_t mtx_pow” ; 379 št8_t mmax_tx_pow” ; 380 } g__·cked ; 382  #MGMT_OP_GET_CLOCK_INFO 0x0032 ) 383  smgmt_ý_g‘_þock_šfo { 384  mgmt_addr_šfo maddr ; 385 } g__·cked ; 386  smgmt_½_g‘_þock_šfo { 387  mgmt_addr_šfo maddr ; 388 ušt32_t mloÿl_þock ; 389 ušt32_t mpicÚ‘_þock ; 390 ušt16_t maccu¿cy ; 391 } g__·cked ; 393  #MGMT_OP_ADD_DEVICE 0x0033 ) 394  smgmt_ý_add_deviû { 395  mgmt_addr_šfo maddr ; 396 ušt8_t maùiÚ ; 397 } g__·cked ; 398  smgmt_½_add_deviû { 399  mgmt_addr_šfo maddr ; 400 } g__·cked ; 402  #MGMT_OP_REMOVE_DEVICE 0x0034 ) 403  smgmt_ý_»move_deviû { 404  mgmt_addr_šfo maddr ; 405 } g__·cked ; 406  smgmt_½_»move_deviû { 407  mgmt_addr_šfo maddr ; 408 } g__·cked ; 410  smgmt_cÚn_·¿m { 411  mgmt_addr_šfo maddr ; 412 ušt16_t mmš_š‹rv® ; 413 ušt16_t mmax_š‹rv® ; 414 ušt16_t mÏ‹ncy ; 415 ušt16_t mtimeout ; 416 } g__·cked ; 418  #MGMT_OP_LOAD_CONN_PARAM 0x0035 ) 419  smgmt_ý_lßd_cÚn_·¿m { 420 ušt16_t m·¿m_couÁ ; 421  mgmt_cÚn_·¿m m·¿ms [0]; 422 } g__·cked ; 424  #MGMT_OP_READ_UNCONF_INDEX_LIST 0x0036 ) 425  smgmt_½_»ad_uncÚf_šdex_li¡ { 426 ušt16_t mnum_cÚŒÞËrs ; 427 ušt16_t mšdex [0]; 428 } g__·cked ; 430  #MGMT_OPTION_EXTERNAL_CONFIG 0x00000001 ) 431  #MGMT_OPTION_PUBLIC_ADDRESS 0x00000002 ) 433  #MGMT_OP_READ_CONFIG_INFO 0x0037 ) 434  smgmt_½_»ad_cÚfig_šfo { 435 ušt16_t mmªuçùu»r ; 436 ušt32_t msuµÜ‹d_ÝtiÚs ; 437 ušt32_t mmissšg_ÝtiÚs ; 438 } g__·cked ; 440  #MGMT_OP_SET_EXTERNAL_CONFIG 0x0038 ) 441  smgmt_ý_£t_ex‹º®_cÚfig { 442 ušt8_t mcÚfig ; 443 } g__·cked ; 445  #MGMT_OP_SET_PUBLIC_ADDRESS 0x0039 ) 446  smgmt_ý_£t_public_add»ss { 447 bdaddr_t mbdaddr ; 448 } g__·cked ; 450  #MGMT_OP_START_SERVICE_DISCOVERY 0x003A ) 451  smgmt_ý_¡¬t_£rviû_discov”y { 452 ušt8_t mty³ ; 453 št8_t mrssi ; 454 ušt16_t muuid_couÁ ; 455 ušt8_t muuids [0][16]; 456 } g__·cked ; 457  #MGMT_START_SERVICE_DISCOVERY_SIZE 4 ) 459  #MGMT_EV_CMD_COMPLETE 0x0001 ) 460  smgmt_ev_cmd_com¶‘e { 461 ušt16_t mÝcode ; 462 ušt8_t m¡©us ; 463 ušt8_t md©a [0]; 464 } g__·cked ; 466  #MGMT_EV_CMD_STATUS 0x0002 ) 467  smgmt_ev_cmd_¡©us { 468 ušt16_t mÝcode ; 469 ušt8_t m¡©us ; 470 } g__·cked ; 472  #MGMT_EV_CONTROLLER_ERROR 0x0003 ) 473  smgmt_ev_cÚŒÞËr_”rÜ { 474 ušt8_t m”rÜ_code ; 475 } g__·cked ; 477  #MGMT_EV_INDEX_ADDED 0x0004 ) 479  #MGMT_EV_INDEX_REMOVED 0x0005 ) 481  #MGMT_EV_NEW_SETTINGS 0x0006 ) 483  #MGMT_EV_CLASS_OF_DEV_CHANGED 0x0007 ) 484  smgmt_ev_þass_of_dev_chªged { 485 ušt8_t mþass_of_dev [3]; 486 } g__·cked ; 488  #MGMT_EV_LOCAL_NAME_CHANGED 0x0008 ) 489  smgmt_ev_loÿl_Çme_chªged { 490 ušt8_t mÇme [ MGMT_MAX_NAME_LENGTH ]; 491 ušt8_t mshÜt_Çme [ MGMT_MAX_SHORT_NAME_LENGTH ]; 492 } g__·cked ; 494  #MGMT_EV_NEW_LINK_KEY 0x0009 ) 495  smgmt_ev_Ãw_lšk_key { 496 ušt8_t m¡Üe_hšt ; 497  mgmt_lšk_key_šfo mkey ; 498 } g__·cked ; 500  #MGMT_EV_NEW_LONG_TERM_KEY 0x000A ) 501  smgmt_ev_Ãw_lÚg_‹rm_key { 502 ušt8_t m¡Üe_hšt ; 503  mgmt_Ék_šfo mkey ; 504 } g__·cked ; 506  #MGMT_EV_DEVICE_CONNECTED 0x000B ) 507  smgmt_ev_deviû_cÚÃùed { 508  mgmt_addr_šfo maddr ; 509 ušt32_t mæags ; 510 ušt16_t meœ_Ën ; 511 ušt8_t meœ [0]; 512 } g__·cked ; 514  #MGMT_DEV_DISCONN_UNKNOWN 0x00 ) 515  #MGMT_DEV_DISCONN_TIMEOUT 0x01 ) 516  #MGMT_DEV_DISCONN_LOCAL_HOST 0x02 ) 517  #MGMT_DEV_DISCONN_REMOTE 0x03 ) 519  #MGMT_EV_DEVICE_DISCONNECTED 0x000C ) 520  smgmt_ev_deviû_discÚÃùed { 521  mgmt_addr_šfo maddr ; 522 ušt8_t m»asÚ ; 523 } g__·cked ; 525  #MGMT_EV_CONNECT_FAILED 0x000D ) 526  smgmt_ev_cÚÃù_çžed { 527  mgmt_addr_šfo maddr ; 528 ušt8_t m¡©us ; 529 } g__·cked ; 531  #MGMT_EV_PIN_CODE_REQUEST 0x000E ) 532  smgmt_ev_pš_code_»que¡ { 533  mgmt_addr_šfo maddr ; 534 ušt8_t m£cu» ; 535 } g__·cked ; 537  #MGMT_EV_USER_CONFIRM_REQUEST 0x000F ) 538  smgmt_ev_u£r_cÚfœm_»que¡ { 539  mgmt_addr_šfo maddr ; 540 ušt8_t mcÚfœm_hšt ; 541 ušt32_t mv®ue ; 542 } g__·cked ; 544  #MGMT_EV_USER_PASSKEY_REQUEST 0x0010 ) 545  smgmt_ev_u£r_·sskey_»que¡ { 546  mgmt_addr_šfo maddr ; 547 } g__·cked ; 549  #MGMT_EV_AUTH_FAILED 0x0011 ) 550  smgmt_ev_auth_çžed { 551  mgmt_addr_šfo maddr ; 552 ušt8_t m¡©us ; 553 } g__·cked ; 555  #MGMT_DEV_FOUND_CONFIRM_NAME 0x01 ) 556  #MGMT_DEV_FOUND_LEGACY_PAIRING 0x02 ) 557  #MGMT_DEV_FOUND_NOT_CONNECTABLE 0x04 ) 559  #MGMT_EV_DEVICE_FOUND 0x0012 ) 560  smgmt_ev_deviû_found { 561  mgmt_addr_šfo maddr ; 562 št8_t mrssi ; 563 ušt32_t mæags ; 564 ušt16_t meœ_Ën ; 565 ušt8_t meœ [0]; 566 } g__·cked ; 568  #MGMT_EV_DISCOVERING 0x0013 ) 569  smgmt_ev_discov”šg { 570 ušt8_t mty³ ; 571 ušt8_t mdiscov”šg ; 572 } g__·cked ; 574  #MGMT_EV_DEVICE_BLOCKED 0x0014 ) 575  smgmt_ev_deviû_blocked { 576  mgmt_addr_šfo maddr ; 577 } g__·cked ; 579  #MGMT_EV_DEVICE_UNBLOCKED 0x0015 ) 580  smgmt_ev_deviû_unblocked { 581  mgmt_addr_šfo maddr ; 582 } g__·cked ; 584  #MGMT_EV_DEVICE_UNPAIRED 0x0016 ) 585  smgmt_ev_deviû_uÅaœed { 586  mgmt_addr_šfo maddr ; 587 } g__·cked ; 589  #MGMT_EV_PASSKEY_NOTIFY 0x0017 ) 590  smgmt_ev_·sskey_nÙify { 591  mgmt_addr_šfo maddr ; 592 ušt32_t m·sskey ; 593 ušt8_t m’‹»d ; 594 } g__·cked ; 596  #MGMT_EV_NEW_IRK 0x0018 ) 597  smgmt_ev_Ãw_œk { 598 ušt8_t m¡Üe_hšt ; 599 bdaddr_t m½a ; 600  mgmt_œk_šfo mkey ; 601 } g__·cked ; 603  smgmt_c¤k_šfo { 604  mgmt_addr_šfo maddr ; 605 ušt8_t mma¡” ; 606 ušt8_t mv® [16]; 607 } g__·cked ; 609  #MGMT_EV_NEW_CSRK 0x0019 ) 610  smgmt_ev_Ãw_c¤k { 611 ušt8_t m¡Üe_hšt ; 612  mgmt_c¤k_šfo mkey ; 613 } g__·cked ; 615  #MGMT_EV_DEVICE_ADDED 0x001a ) 616  smgmt_ev_deviû_added { 617  mgmt_addr_šfo maddr ; 618 ušt8_t maùiÚ ; 619 } g__·cked ; 621  #MGMT_EV_DEVICE_REMOVED 0x001b ) 622  smgmt_ev_deviû_»moved { 623  mgmt_addr_šfo maddr ; 624 } g__·cked ; 626  #MGMT_EV_NEW_CONN_PARAM 0x001c ) 627  smgmt_ev_Ãw_cÚn_·¿m { 628  mgmt_addr_šfo maddr ; 629 ušt8_t m¡Üe_hšt ; 630 ušt16_t mmš_š‹rv® ; 631 ušt16_t mmax_š‹rv® ; 632 ušt16_t mÏ‹ncy ; 633 ušt16_t mtimeout ; 634 } g__·cked ; 636  #MGMT_EV_UNCONF_INDEX_ADDED 0x001d ) 638  #MGMT_EV_UNCONF_INDEX_REMOVED 0x001e ) 640  #MGMT_EV_NEW_CONFIG_OPTIONS 0x001f ) 642 cÚ¡ * gmgmt_Ý [] = { 704 cÚ¡ * gmgmt_ev [] = { 739 cÚ¡ * gmgmt_¡©us [] = { 761 #ifdeà __TIZEN_PATCH__ 763  #TIZEN_OP_CODE_BASE 0xff00 ) 764  #TIZEN_EV_BASE 0xff00 ) 766  #MGMT_MAX_ADVERTISING_LENGTH 31 ) 768  #MGMT_MAX_MANUFACTURER_DATA_LENGTH 31 ) 770  #MGMT_IRK_SIZE 16 ) 772  #MGMT_OP_SET_ADVERTISING_PARAMS ( TIZEN_OP_CODE_BASE + 0x01) ) 773  smgmt_ý_£t_adv”tisšg_·¿ms { 774 ušt16_t mš‹rv®_mš ; 775 ušt16_t mš‹rv®_max ; 776 ušt8_t mfž‹r_pÞicy ; 777 ušt8_t mty³ ; 778 } g__·cked ; 780  #MGMT_OP_SET_ADVERTISING_DATA ( TIZEN_OP_CODE_BASE + 0x02) ) 781  smgmt_ý_£t_adv”tisšg_d©a { 782 ušt8_t md©a [ MGMT_MAX_ADVERTISING_LENGTH - 3]; 783 } g__·cked ; 785  #MGMT_OP_SET_SCAN_RSP_DATA ( TIZEN_OP_CODE_BASE + 0x03) ) 786  smgmt_ý_£t_sÿn_r¥_d©a { 787 ušt8_t md©a [ MGMT_MAX_ADVERTISING_LENGTH ]; 788 } g__·cked ; 790  #MGMT_OP_ADD_DEV_WHITE_LIST ( TIZEN_OP_CODE_BASE + 0x04) ) 791  smgmt_ý_add_dev_wh™e_li¡ { 792 ušt8_t mbdaddr_ty³ ; 793 bdaddr_t mbdaddr ; 794 } g__·cked ; 796  #MGMT_OP_REMOVE_DEV_FROM_WHITE_LIST ( TIZEN_OP_CODE_BASE + 0x05) ) 797  smgmt_ý_»move_dev_wh™e_li¡ { 798 ušt8_t mbdaddr_ty³ ; 799 bdaddr_t mbdaddr ; 800 } g__·cked ; 802  #MGMT_OP_CLEAR_DEV_WHITE_LIST ( TIZEN_OP_CODE_BASE + 0x06) ) 805  #MGMT_OP_SET_RSSI_ENABLE ( TIZEN_OP_CODE_BASE + 0x07) ) 806  smgmt_ý_£t_’abË_rssi { 807 št8_t mlow_th ; 808 št8_t mš_¿nge_th ; 809 št8_t mhigh_th ; 810 bdaddr_t mbdaddr ; 811 št8_t mlšk_ty³ ; 812 } g__·cked ; 814  smgmt_cc_r¥_’abË_rssi { 815 ušt8_t m¡©us ; 816 ušt8_t mË_ext_Ýcode ; 817 bdaddr_t mbt_add»ss ; 818 št8_t mlšk_ty³ ; 819 } g__·cked ; 821  #MGMT_OP_GET_RAW_RSSI ( TIZEN_OP_CODE_BASE + 0x08) ) 822  smgmt_ý_g‘_¿w_rssi { 823 bdaddr_t mbt_add»ss ; 824 ušt8_t mlšk_ty³ ; 825 } g__·cked ; 826  smgmt_cc_½_g‘_¿w_rssi { 827 ušt8_t m¡©us ; 828 št8_t mrssi_dbm ; 829 ušt8_t mlšk_ty³ ; 830 bdaddr_t mbt_add»ss ; 831 } g__·cked ; 833  #MGMT_OP_SET_RSSI_DISABLE ( TIZEN_OP_CODE_BASE + 0x09) ) 834  smgmt_ý_di§bË_rssi { 835 bdaddr_t mbdaddr ; 836 št8_t mlšk_ty³ ; 837 } g__·cked ; 838  smgmt_cc_½_di§bË_rssi { 839 ušt8_t m¡©us ; 840 ušt8_t mË_ext_Ýcode ; 841 bdaddr_t mbt_add»ss ; 842 št8_t mlšk_ty³ ; 843 } g__·cked ; 846  #MGMT_OP_START_LE_DISCOVERY ( TIZEN_OP_CODE_BASE + 0x0a) ) 847  smgmt_ý_¡¬t_Ë_discov”y { 848 ušt8_t mty³ ; 849 } g__·cked ; 851  #MGMT_OP_STOP_LE_DISCOVERY ( TIZEN_OP_CODE_BASE + 0x0b) ) 852  smgmt_ý_¡Ý_Ë_discov”y { 853 ušt8_t mty³ ; 854 } g__·cked ; 857  #MGMT_OP_DISABLE_LE_AUTO_CONNECT ( TIZEN_OP_CODE_BASE + 0x0c) ) 860  #MGMT_OP_LE_CONN_UPDATE ( TIZEN_OP_CODE_BASE + 0x0d) ) 861  smgmt_ý_Ë_cÚn_upd©e { 862 ušt16_t mš‹rv®_mš ; 863 ušt16_t mš‹rv®_max ; 864 ušt16_t mÏ‹ncy ; 865 ušt16_t msu³rvisiÚ_time_out ; 866 bdaddr_t mbdaddr ; 867 } g__·cked ; 869  #MGMT_OP_SET_MANUFACTURER_DATA ( TIZEN_OP_CODE_BASE + 0x0e) ) 870  smgmt_ý_£t_mªuçùu»r_d©a { 871 ušt8_t md©a [ MGMT_MAX_MANUFACTURER_DATA_LENGTH ]; 872 } g__·cked ; 874  #MGMT_OP_LE_SET_SCAN_PARAMS ( TIZEN_OP_CODE_BASE + 0x0f) ) 875  smgmt_ý_Ë_£t_sÿn_·¿ms { 876 ušt8_t mty³ ; 877 ušt16_t mš‹rv® ; 878 ušt16_t mwšdow ; 879 } g__·cked ; 881  #MGMT_SCO_ROLE_HANDSFREE 0x00 ) 882  #MGMT_SCO_ROLE_AUDIO_GATEWAY 0x01 ) 883  #MGMT_OP_SET_VOICE_SETTING ( TIZEN_OP_CODE_BASE + 0x10) ) 884  smgmt_ý_£t_voiû_£‰šg { 885 bdaddr_t mbdaddr ; 886 ušt8_t msco_rÞe ; 887 ušt16_t mvoiû_£‰šg ; 888 } g__·cked ; 891  #MGMT_OP_READ_RSSI ( TIZEN_OP_CODE_BASE + 0x11) ) 892  smgmt_ý_»ad_rssi { 893 bdaddr_t mbdaddr ; 894 } g__·cked ; 895  smgmt_½_»ad_rssi { 896 ušt8_t m¡©us ; 897 bdaddr_t mbdaddr ; 898 št8_t mrssi ; 899 } g__·cked ; 901  #MGMT_OP_L2CAP_CONN_PARAM_UPDATE ( TIZEN_OP_CODE_BASE + 0x12) ) 902  smgmt_ý_l2ÿp_cÚn_·¿m_upd©e { 903 bdaddr_t mbdaddr ; 904 ušt16_t mš‹rv®_mš ; 905 ušt16_t mš‹rv®_max ; 906 ušt16_t mÏ‹ncy ; 907 ušt16_t msu³rvisiÚ_time_out ; 908 } g__·cked ; 910  #MGMT_OP_WRITE_SEC_CONN_HOST_SUPPORT ( TIZEN_OP_CODE_BASE + 0x13) ) 911  #MGMT_WRITE_SEC_CONN_HOST_SUPPORT_SIZE 1 ) 912  smgmt_ý_wr™e_£c_cÚn_ho¡_suµÜt { 913 ušt8_t m£cu»_cÚÃùiÚ_ho¡_suµÜt ; 914 } g__·cked ; 915  smgmt_½_wr™e_£c_cÚn_ho¡_suµÜt { 916 ušt8_t m¡©us ; 917 } g__·cked ; 919  #MGMT_OP_READ_SEC_CONN_HOST_SUPPORT ( TIZEN_OP_CODE_BASE + 0x14) ) 920  smgmt_½_»ad_£c_cÚn_ho¡_suµÜt { 921 ušt8_t m¡©us ; 922 ušt8_t m£c_cÚn_ho¡_suµÜt ; 923 } g__·cked ; 925  #MGMT_OP_WRITE_AUTH_PAYLOAD_TIMEOUT ( TIZEN_OP_CODE_BASE + 0x15) ) 926  smgmt_ý_wr™e_auth_·ylßd_timeout { 927 bdaddr_t mbdaddr ; 928 ušt16_t mauth_·ylßd_timeout ; 929 } g__·cked ; 930  smgmt_½_wr™e_auth_·ylßd_timeout { 931 ušt8_t m¡©us ; 932 } g__·cked ; 934  #MGMT_OP_READ_AUTH_PAYLOAD_TIMEOUT ( TIZEN_OP_CODE_BASE + 0x16) ) 935  smgmt_ý_»ad_auth_·ylßd_timeout { 936 bdaddr_t mbdaddr ; 937 } g__·cked ; 938  smgmt_½_»ad_auth_·ylßd_timeout { 939 ušt8_t m¡©us ; 940 ušt16_t mauth_·ylßd_timeout ; 941 } g__·cked ; 944  #MGMT_EV_DEVICE_NAME_UPDATE ( TIZEN_EV_BASE + 0x01) ) 945  smgmt_ev_deviû_Çme_upd©e { 946  mgmt_addr_šfo maddr ; 947 ušt16_t meœ_Ën ; 948 ušt8_t meœ [0]; 949 } g__·cked ; 953  #MGMT_EV_HARDWARE_ERROR ( TIZEN_EV_BASE + 0x02) ) 954  smgmt_ev_h¬dw¬e_”rÜ { 955 ušt8_t m”rÜ_code ; 956 } g__·cked ; 960  #MGMT_EV_TX_TIMEOUT_ERROR ( TIZEN_EV_BASE + 0x03) ) 964  #MGMT_EV_RSSI_ALERT ( TIZEN_EV_BASE + 0x04) ) 965  smgmt_ev_v’dÜ_¥ecific_rssi_®”t { 966 bdaddr_t mbdaddr ; 967 št8_t mlšk_ty³ ; 968 št8_t m®”t_ty³ ; 969 št8_t mrssi_dbm ; 970 } g__·cked ; 972  #MGMT_EV_RAW_RSSI ( TIZEN_EV_BASE + 0x05) ) 974  #MGMT_EV_RSSI_ENABLED ( TIZEN_EV_BASE + 0x06) ) 976  #MGMT_EV_RSSI_DISABLED ( TIZEN_EV_BASE + 0x07) ) 980  #MGMT_EV_CONN_UPDATED ( TIZEN_EV_BASE + 0x08) ) 981  smgmt_ev_cÚn_upd©ed { 982  mgmt_addr_šfo maddr ; 983 ušt16_t mcÚn_š‹rv® ; 984 ušt16_t mcÚn_Ï‹ncy ; 985 ušt16_t msu³rvisiÚ_timeout ; 986 } g__·cked ; 988  #MGMT_EV_CONN_UPDATE_FAILED ( TIZEN_EV_BASE + 0x09) ) 989  smgmt_ev_cÚn_upd©e_çžed { 990  mgmt_addr_šfo maddr ; 991 ušt8_t m¡©us ; 992 } g__·cked ; 995  #MGMT_EV_LE_DEVICE_FOUND ( TIZEN_EV_BASE + 0x0a) ) 996  smgmt_ev_Ë_deviû_found { 997  mgmt_addr_šfo maddr ; 998 št8_t mrssi ; 999 ušt32_t mæags ; 1000 št8_t madv_ty³ ; 1001 ušt16_t meœ_Ën ; 1002 ušt8_t meœ [0]; 1003 } g__·cked ; 1005  #MGMT_EV_NEW_LOCAL_IRK ( TIZEN_EV_BASE + 0x0b) ) 1006  smgmt_ev_Ãw_loÿl_œk { 1007 ušt8_t mœk [16]; 1008 } g__·cked ; 1010 cÚ¡ * gmgmt_tiz’_Ý [] = { 1030 cÚ¡ * gmgmt_tiz’_ev [] = { 1046 #iâdeà NELEM 1047  #NELEM ( x è((xè/ ((x)[0])) ) 1050  šlše cÚ¡ * $mgmt_Ý¡r ( ušt16_t Ý ) 1052 #ifdeà __TIZEN_PATCH__ 1053 ià( Ý >ð `NELEM ( mgmt_Ý )) { 1054 ušt16_t tiz’_Ý = Ý - TIZEN_OP_CODE_BASE ; 1056 ià( tiz’_Ý > 0 && 1057 tiz’_Ý < `NELEM ( mgmt_tiz’_Ý )) 1058  mgmt_tiz’_Ý [ tiz’_Ý ]; 1063 ià( Ý >ð `NELEM ( mgmt_Ý )) 1067  mgmt_Ý [ Ý ]; 1068 } } 1070  šlše cÚ¡ * $mgmt_ev¡r ( ušt16_t ev ) 1072 #ifdeà __TIZEN_PATCH__ 1073 ià( ev >ð `NELEM ( mgmt_ev )) { 1074 ušt16_t tiz’_ev = ev - TIZEN_EV_BASE ; 1076 ià( tiz’_ev > 0 && 1077 tiz’_ev < `NELEM ( mgmt_tiz’_ev )) 1078  mgmt_tiz’_ev [ tiz’_ev ]; 1083 ià( ev >ð `NELEM ( mgmt_ev )) 1087  mgmt_ev [ ev ]; 1088 } } 1090  šlše cÚ¡ * $mgmt_”r¡r ( ušt8_t ¡©us ) 1092 ià( ¡©us >ð `NELEM ( mgmt_¡©us )) 1094  mgmt_¡©us [ ¡©us ]; 1095 } } @lib/rfcomm.h 25 #iâdeà __RFCOMM_H 26  #__RFCOMM_H ) 28 #ifdeà __ýlu¥lus 32  ~ 35  #RFCOMM_DEFAULT_MTU 127 ) 37  #RFCOMM_PSM 3 ) 40  ssockaddr_rc { 41 §_çmžy_t rc_çmžy ; 42 bdaddr_t rc_bdaddr ; 43 ušt8_t rc_chªÃl ; 47  #RFCOMM_CONNINFO 0x02 ) 48  srfcomm_cÚnšfo { 49 ušt16_t hci_hªdË ; 50 ušt8_t dev_þass [3]; 53  #RFCOMM_LM 0x03 ) 54  #RFCOMM_LM_MASTER 0x0001 ) 55  #RFCOMM_LM_AUTH 0x0002 ) 56  #RFCOMM_LM_ENCRYPT 0x0004 ) 57  #RFCOMM_LM_TRUSTED 0x0008 ) 58  #RFCOMM_LM_RELIABLE 0x0010 ) 59  #RFCOMM_LM_SECURE 0x0020 ) 62  #RFCOMM_MAX_DEV 256 ) 64  #RFCOMMCREATEDEV `_IOW ('R', 200, ) ) 65  #RFCOMMRELEASEDEV `_IOW ('R', 201, ) ) 66  #RFCOMMGETDEVLIST `_IOR ('R', 210, ) ) 67  #RFCOMMGETDEVINFO `_IOR ('R', 211, ) ) 69  srfcomm_dev_»q { 70 št16_t dev_id ; 71 ušt32_t æags ; 72 bdaddr_t ¤c ; 73 bdaddr_t d¡ ; 74 ušt8_t chªÃl ; 76  #RFCOMM_REUSE_DLC 0 ) 77  #RFCOMM_RELEASE_ONHUP 1 ) 78  #RFCOMM_HANGUP_NOW 2 ) 79  #RFCOMM_TTY_ATTACHED 3 ) 81  srfcomm_dev_šfo { 82 št16_t id ; 83 ušt32_t æags ; 84 ušt16_t ¡©e ; 85 bdaddr_t ¤c ; 86 bdaddr_t d¡ ; 87 ušt8_t chªÃl ; 90  srfcomm_dev_li¡_»q { 91 ušt16_t dev_num ; 92  rfcomm_dev_šfo dev_šfo [0]; 95 #ifdeà __ýlu¥lus @lib/sco.h 25 #iâdeà __SCO_H 26  #__SCO_H ) 28 #ifdeà __ýlu¥lus 33  #SCO_DEFAULT_MTU 500 ) 34  #SCO_DEFAULT_FLUSH_TO 0xFFFF ) 36  #SCO_CONN_TIMEOUT ( HZ * 40) ) 37  #SCO_DISCONN_TIMEOUT ( HZ * 2) ) 38  #SCO_CONN_IDLE_TIMEOUT ( HZ * 60) ) 41  ssockaddr_sco { 42 §_çmžy_t sco_çmžy ; 43 bdaddr_t sco_bdaddr ; 47  #SCO_OPTIONS 0x01 ) 48  ssco_ÝtiÚs { 49 ušt16_t mtu ; 52  #SCO_CONNINFO 0x02 ) 53  ssco_cÚnšfo { 54 ušt16_t hci_hªdË ; 55 ušt8_t dev_þass [3]; 58 #ifdeà __ýlu¥lus @lib/sdp.c 27 #ifdeà HAVE_CONFIG_H 28  ~ 31  ~<¡dio.h > 32  ~<”ºo.h > 33  ~ 34  ~ 35  ~<¡dlib.h > 36  ~ 37  ~<¡ršg.h > 38  ~ 39  ~ 40  ~ 41  ~ 42  ~ 43  ~<Ãtš‘/š.h > 45  ~"blu‘oÙh.h " 46  ~"hci.h " 47  ~"hci_lib.h " 48  ~"l2ÿp.h " 49  ~"sdp.h " 50  ~"sdp_lib.h " 52  #SDPINF ( fmt , ¬g ...è `sy¦og ( LOG_INFO , fmˆ"\n", ##‡rg) ) 53  #SDPERR ( fmt , ¬g ...è `sy¦og ( LOG_ERR , "%s: " fmˆ"\n", __func__ , ##‡rg) ) 55  #ARRAY_SIZE ( ¬r è(×¼è/ (×¼)[0])) ) 57 #ifdeà SDP_DEBUG 58  #SDPDBG ( fmt , ¬g ...è `sy¦og ( LOG_DEBUG , "%s: " fmˆ"\n", __func__ , ##‡rg) ) 60  #SDPDBG ( fmt ...) ) 63  ušt128_t gblu‘oÙh_ba£_uuid = { 64 . d©a = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 68  #SDP_MAX_ATTR_LEN 65535 ) 71  #SDP_LARGE_L2CAP_MTU 1013 ) 73  sdp_d©a_t * sdp_cÝy_£q (sdp_d©a_ˆ* d©a ); 74  sdp_©Œ_add_Ãw_w™h_Ëngth ( sdp_»cÜd_t * »c , 75 ušt16_t ©Œ , ušt8_t dtd , cÚ¡ * v®ue , ušt32_t Ën ); 76  sdp_g’_bufãr ( sdp_buf_t * buf , sdp_d©a_t * d ); 79  stu¶a { 80  mšdex ; 81 * m¡r ; 84  tu¶a gPrÙocÞ [] = { 85 { SDP_UUID , "SDP" }, 86 { UDP_UUID , "UDP" }, 87 { RFCOMM_UUID , "RFCOMM" }, 88 { TCP_UUID , "TCP" }, 89 { TCS_BIN_UUID , "TCS-BIN" }, 90 { TCS_AT_UUID , "TCS-AT" }, 91 { OBEX_UUID , "OBEX" }, 92 { IP_UUID , "IP" }, 93 { FTP_UUID , "FTP" }, 94 { HTTP_UUID , "HTTP" }, 95 { WSP_UUID , "WSP" }, 96 { BNEP_UUID , "BNEP" }, 97 { UPNP_UUID , "UPNP" }, 98 { HIDP_UUID , "HIDP" }, 99 { HCRP_CTRL_UUID , "HCRP-Ctrl" }, 100 { HCRP_DATA_UUID , "HCRP-Data" }, 101 { HCRP_NOTE_UUID , "HCRP-Notify" }, 102 { AVCTP_UUID , "AVCTP" }, 103 { AVDTP_UUID , "AVDTP" }, 104 { CMTP_UUID , "CMTP" }, 105 { UDI_UUID , "UDI" }, 106 { MCAP_CTRL_UUID , "MCAP-Ctrl" }, 107 { MCAP_DATA_UUID , "MCAP-Data" }, 108 { L2CAP_UUID , "L2CAP" }, 109 { ATT_UUID , "ATT" }, 113  tu¶a gS”viûCÏss [] = { 114 { SDP_SERVER_SVCLASS_ID , "SDP Server" }, 115 { BROWSE_GRP_DESC_SVCLASS_ID , "Browse Group Descriptor" }, 116 { PUBLIC_BROWSE_GROUP , "Public Browse Group" }, 117 { SERIAL_PORT_SVCLASS_ID , "Serial Port" }, 118 { LAN_ACCESS_SVCLASS_ID , "LAN Access Using PPP" }, 119 { DIALUP_NET_SVCLASS_ID , "Dialup Networking" }, 120 { IRMC_SYNC_SVCLASS_ID , "IrMC Sync" }, 121 { OBEX_OBJPUSH_SVCLASS_ID , "OBEX Object Push" }, 122 { OBEX_FILETRANS_SVCLASS_ID , "OBEX File Transfer" }, 123 { IRMC_SYNC_CMD_SVCLASS_ID , "IrMC Sync Command" }, 124 { HEADSET_SVCLASS_ID , "Headset" }, 125 { CORDLESS_TELEPHONY_SVCLASS_ID , "Cordless Telephony" }, 126 { AUDIO_SOURCE_SVCLASS_ID , "Audio Source" }, 127 { AUDIO_SINK_SVCLASS_ID , "Audio Sink" }, 128 { AV_REMOTE_TARGET_SVCLASS_ID , "AV Remote Target" }, 129 { ADVANCED_AUDIO_SVCLASS_ID , "Advanced Audio" }, 130 { AV_REMOTE_SVCLASS_ID , "AV Remote" }, 131 { AV_REMOTE_CONTROLLER_SVCLASS_ID , "AV Remote Controller" }, 132 { INTERCOM_SVCLASS_ID , "Intercom" }, 133 { FAX_SVCLASS_ID , "Fax" }, 134 { HEADSET_AGW_SVCLASS_ID , "Headset Audio Gateway" }, 135 { WAP_SVCLASS_ID , "WAP" }, 136 { WAP_CLIENT_SVCLASS_ID , "WAP Client" }, 137 { PANU_SVCLASS_ID , "PAN User" }, 138 { NAP_SVCLASS_ID , "Network Access Point" }, 139 { GN_SVCLASS_ID , "PAN Group Network" }, 140 { DIRECT_PRINTING_SVCLASS_ID , "Direct Printing" }, 141 { REFERENCE_PRINTING_SVCLASS_ID , "Reference Printing" }, 142 { IMAGING_SVCLASS_ID , "Imaging" }, 143 { IMAGING_RESPONDER_SVCLASS_ID , "Imaging Responder" }, 144 { IMAGING_ARCHIVE_SVCLASS_ID , "Imaging Automatic Archive" }, 145 { IMAGING_REFOBJS_SVCLASS_ID , "Imaging Referenced Objects" }, 146 { HANDSFREE_SVCLASS_ID , "Handsfree" }, 147 { HANDSFREE_AGW_SVCLASS_ID , "Handsfree Audio Gateway" }, 148 { DIRECT_PRT_REFOBJS_SVCLASS_ID , "Direct Printing Ref. Objects" }, 149 { REFLECTED_UI_SVCLASS_ID , "Reflected UI" }, 150 { BASIC_PRINTING_SVCLASS_ID , "Basic Printing" }, 151 { PRINTING_STATUS_SVCLASS_ID , "Printing Status" }, 152 { HID_SVCLASS_ID , "Human Interface Device" }, 153 { HCR_SVCLASS_ID , "Hardcopy Cable Replacement" }, 154 { HCR_PRINT_SVCLASS_ID , "HCR Print" }, 155 { HCR_SCAN_SVCLASS_ID , "HCR Scan" }, 156 { CIP_SVCLASS_ID , "Common ISDN Access" }, 157 { VIDEO_CONF_GW_SVCLASS_ID , "Video Conferencing Gateway" }, 158 { UDI_MT_SVCLASS_ID , "UDI MT" }, 159 { UDI_TA_SVCLASS_ID , "UDI TA" }, 160 { AV_SVCLASS_ID , "Audio/Video" }, 161 { SAP_SVCLASS_ID , "SIM Access" }, 162 { PBAP_PCE_SVCLASS_ID , "Phonebook Access - PCE" }, 163 { PBAP_PSE_SVCLASS_ID , "Phonebook Access - PSE" }, 164 { PBAP_SVCLASS_ID , "Phonebook Access" }, 165 { MAP_MSE_SVCLASS_ID , "Message Access - MAS" }, 166 { MAP_MCE_SVCLASS_ID , "Message Access - MNS" }, 167 { MAP_SVCLASS_ID , "Message Access" }, 168 { PNP_INFO_SVCLASS_ID , "PnP Information" }, 169 { GENERIC_NETWORKING_SVCLASS_ID , "Generic Networking" }, 170 { GENERIC_FILETRANS_SVCLASS_ID , "Generic File Transfer" }, 171 { GENERIC_AUDIO_SVCLASS_ID , "Generic Audio" }, 172 { GENERIC_TELEPHONY_SVCLASS_ID , "Generic Telephony" }, 173 { UPNP_SVCLASS_ID , "UPnP" }, 174 { UPNP_IP_SVCLASS_ID , "UPnP IP" }, 175 { UPNP_PAN_SVCLASS_ID , "UPnP PAN" }, 176 { UPNP_LAP_SVCLASS_ID , "UPnP LAP" }, 177 { UPNP_L2CAP_SVCLASS_ID , "UPnP L2CAP" }, 178 { VIDEO_SOURCE_SVCLASS_ID , "Video Source" }, 179 { VIDEO_SINK_SVCLASS_ID , "Video Sink" }, 180 { VIDEO_DISTRIBUTION_SVCLASS_ID , "Video Distribution" }, 181 { HDP_SVCLASS_ID , "HDP" }, 182 { HDP_SOURCE_SVCLASS_ID , "HDP Source" }, 183 { HDP_SINK_SVCLASS_ID , "HDP Sink" }, 184 { GENERIC_ACCESS_SVCLASS_ID , "Generic Access" }, 185 { GENERIC_ATTRIB_SVCLASS_ID , "Generic Attribute" }, 186 { APPLE_AGENT_SVCLASS_ID , "Apple Agent" }, 190  #Profže S”viûCÏss ) 192 * $¡ršg_lookup ( tu¶a * ±0 ,  šdex ) 194  tu¶a * ± ; 196  ± = ±0 ;…t-> šdex ;…t++) 197 ià( ± -> šdex == index) 198  ± -> ¡r ; 201 } } 203 * $¡ršg_lookup_uuid ( tu¶a * ±0 , cÚ¡ uuid_t * uuid ) 205 uuid_t tmp_uuid ; 207 `memýy (& tmp_uuid , uuid , (tmp_uuid)); 209 ià( `sdp_uuid128_to_uuid (& tmp_uuid )) { 210  tmp_uuid . ty³ ) { 211  SDP_UUID16 : 212  `¡ršg_lookup ( ±0 , tmp_uuid . v®ue . uuid16 ); 213  SDP_UUID32 : 214  `¡ršg_lookup ( ±0 , tmp_uuid . v®ue . uuid32 ); 219 } } 225  $uuid2¡r ( tu¶a * mes§ge , cÚ¡ uuid_t * uuid , * ¡r , size_t n ) 227 * ¡r2 ; 229 ià(! uuid ) { 230 `¢´štf ( ¡r , n , "NULL"); 234  uuid -> ty³ ) { 235  SDP_UUID16 : 236 ¡r2 = `¡ršg_lookup ( mes§ge , uuid -> v®ue . uuid16 ); 237 `¢´štf ( ¡r , n , "%s", ¡r2 ); 239  SDP_UUID32 : 240 ¡r2 = `¡ršg_lookup ( mes§ge , uuid -> v®ue . uuid32 ); 241 `¢´štf ( ¡r , n , "%s", ¡r2 ); 243  SDP_UUID128 : 244 ¡r2 = `¡ršg_lookup_uuid ( mes§ge , uuid ); 245 `¢´štf ( ¡r , n , "%s", ¡r2 ); 248 `¢´štf ( ¡r , n , "Ty³ oàUUID (%xèunknown.", uuid -> ty³ ); 253 } } 255  $sdp_´Ùo_uuid2¡º (cÚ¡ uuid_t * uuid , * ¡r , size_t n ) 257  `uuid2¡r ( PrÙocÞ , uuid , ¡r , n ); 258 } } 260  $sdp_svþass_uuid2¡º (cÚ¡ uuid_t * uuid , * ¡r , size_t n ) 262  `uuid2¡r ( S”viûCÏss , uuid , ¡r , n ); 263 } } 265  $sdp_´ofže_uuid2¡º (cÚ¡ uuid_t * uuid , * ¡r , size_t n ) 267  `uuid2¡r ( Profže , uuid , ¡r , n ); 268 } } 273  $sdp_uuid2¡º (cÚ¡ uuid_t * uuid , * ¡r , size_t n ) 275 ià(! uuid ) { 276 `¢´štf ( ¡r , n , "NULL"); 279  uuid -> ty³ ) { 280  SDP_UUID16 : 281 `¢´štf ( ¡r , n , "%.4x", uuid -> v®ue . uuid16 ); 283  SDP_UUID32 : 284 `¢´štf ( ¡r , n , "%.8x", uuid -> v®ue . uuid32 ); 286  SDP_UUID128 :{ 287  d©a0 ; 288  d©a1 ; 289  d©a2 ; 290  d©a3 ; 291  d©a4 ; 292  d©a5 ; 294 `memýy (& d©a0 , & uuid -> v®ue . uuid128 . d©a [0], 4); 295 `memýy (& d©a1 , & uuid -> v®ue . uuid128 . d©a [4], 2); 296 `memýy (& d©a2 , & uuid -> v®ue . uuid128 . d©a [6], 2); 297 `memýy (& d©a3 , & uuid -> v®ue . uuid128 . d©a [8], 2); 298 `memýy (& d©a4 , & uuid -> v®ue . uuid128 . d©a [10], 4); 299 `memýy (& d©a5 , & uuid -> v®ue . uuid128 . d©a [14], 2); 301 `¢´štf ( ¡r , n , "%.8x-%.4x-%.4x-%.4x-%.8x%.4x", 302 `Áohl ( d©a0 ), `Áohs ( d©a1 ), 303 `Áohs ( d©a2 ),‚tohs( d©a3 ), 304 `Áohl ( d©a4 ), `Áohs ( d©a5 )); 308 `¢´štf ( ¡r , n , "Ty³ oàUUID (%xèunknown.", uuid -> ty³ ); 312 } } 314 #ifdeà SDP_DEBUG 324  $sdp_uuid_´št (cÚ¡ uuid_t * uuid ) 326 ià( uuid =ð NULL ) { 327 `SDPERR ("Null…assedo…rint UUID"); 330 ià( uuid -> ty³ =ð SDP_UUID16 ) { 331 `SDPDBG (" ušt16_ˆ: 0x%.4x", uuid -> v®ue . uuid16 ); 332 } ià( uuid -> ty³ =ð SDP_UUID32 ) { 333 `SDPDBG (" ušt32_ˆ: 0x%.8x", uuid -> v®ue . uuid32 ); 334 } ià( uuid -> ty³ =ð SDP_UUID128 ) { 335  d©a0 ; 336  d©a1 ; 337  d©a2 ; 338  d©a3 ; 339  d©a4 ; 340  d©a5 ; 342 `memýy (& d©a0 , & uuid -> v®ue . uuid128 . d©a [0], 4); 343 `memýy (& d©a1 , & uuid -> v®ue . uuid128 . d©a [4], 2); 344 `memýy (& d©a2 , & uuid -> v®ue . uuid128 . d©a [6], 2); 345 `memýy (& d©a3 , & uuid -> v®ue . uuid128 . d©a [8], 2); 346 `memýy (& d©a4 , & uuid -> v®ue . uuid128 . d©a [10], 4); 347 `memýy (& d©a5 , & uuid -> v®ue . uuid128 . d©a [14], 2); 349 `SDPDBG (" uint128_t : 0x%.8x-%.4x-%.4x-%.4x-%.8x%.4x", 350 `Áohl ( d©a0 ), `Áohs ( d©a1 ),‚tohs( d©a2 ), 351 `Áohs ( d©a3 ), `Áohl ( d©a4 ),‚tohs( d©a5 )); 353 `SDPERR ("Enumype of UUID‚ot set"); 354 } } 357 sdp_d©a_t * $sdp_d©a_®loc_w™h_Ëngth ( ušt8_t dtd , cÚ¡ * v®ue , 358 ušt32_t Ëngth ) 360 sdp_d©a_t * £q ; 361 sdp_d©a_t * d = `m®loc ((sdp_data_t)); 363 ià(! d ) 364  NULL ; 366 `mem£t ( d , 0, ( sdp_d©a_t )); 367 d -> dtd = dtd; 368 d -> un™Size = ( ušt8_t ); 370  dtd ) { 371  SDP_DATA_NIL : 373  SDP_UINT8 : 374 d -> v® . ušt8 = *( ušt8_t *è v®ue ; 375 d -> un™Size +ð( ušt8_t ); 377  SDP_INT8 : 378  SDP_BOOL : 379 d -> v® . št8 = *( št8_t *è v®ue ; 380 d -> un™Size +ð( št8_t ); 382  SDP_UINT16 : 383 d -> v® . ušt16 = `bt_g‘_uÇligÃd (( ušt16_t *è v®ue ); 384 d -> un™Size +ð( ušt16_t ); 386  SDP_INT16 : 387 d -> v® . št16 = `bt_g‘_uÇligÃd (( št16_t *è v®ue ); 388 d -> un™Size +ð( št16_t ); 390  SDP_UINT32 : 391 d -> v® . ušt32 = `bt_g‘_uÇligÃd (( ušt32_t *è v®ue ); 392 d -> un™Size +ð( ušt32_t ); 394  SDP_INT32 : 395 d -> v® . št32 = `bt_g‘_uÇligÃd (( št32_t *è v®ue ); 396 d -> un™Size +ð( št32_t ); 398  SDP_INT64 : 399 d -> v® . št64 = `bt_g‘_uÇligÃd (( št64_t *è v®ue ); 400 d -> un™Size +ð( št64_t ); 402  SDP_UINT64 : 403 d -> v® . ušt64 = `bt_g‘_uÇligÃd (( ušt64_t *è v®ue ); 404 d -> un™Size +ð( ušt64_t ); 406  SDP_UINT128 : 407 `memýy (& d -> v® . ušt128 . d©a , v®ue , ( ušt128_t )); 408 d -> un™Size +ð( ušt128_t ); 410  SDP_INT128 : 411 `memýy (& d -> v® . št128 . d©a , v®ue , ( ušt128_t )); 412 d -> un™Size +ð( ušt128_t ); 414  SDP_UUID16 : 415 `sdp_uuid16_ü—‹ (& d -> v® . uuid , `bt_g‘_uÇligÃd (( ušt16_t *è v®ue )); 416 d -> un™Size +ð( ušt16_t ); 418  SDP_UUID32 : 419 `sdp_uuid32_ü—‹ (& d -> v® . uuid , `bt_g‘_uÇligÃd (( ušt32_t *è v®ue )); 420 d -> un™Size +ð( ušt32_t ); 422  SDP_UUID128 : 423 `sdp_uuid128_ü—‹ (& d -> v® . uuid , v®ue ); 424 d -> un™Size +ð( ušt128_t ); 426  SDP_URL_STR8 : 427  SDP_URL_STR16 : 428  SDP_TEXT_STR8 : 429  SDP_TEXT_STR16 : 430 ià(! v®ue ) { 431 `ä“ ( d ); 432  NULL ; 435 d -> un™Size +ð Ëngth ; 436 ià( Ëngth <ð USHRT_MAX ) { 437 d -> v® . ¡r = `m®loc ( Ëngth ); 438 ià(! d -> v® . ¡r ) { 439 `ä“ ( d ); 440  NULL ; 443 `memýy ( d -> v® . ¡r , v®ue , Ëngth ); 445 `SDPERR ("Strings of size > USHRT_MAX‚ot supported"); 446 `ä“ ( d ); 447 d = NULL ; 450  SDP_URL_STR32 : 451  SDP_TEXT_STR32 : 452 `SDPERR ("Strings of size > USHRT_MAX‚ot supported"); 454  SDP_ALT8 : 455  SDP_ALT16 : 456  SDP_ALT32 : 457  SDP_SEQ8 : 458  SDP_SEQ16 : 459  SDP_SEQ32 : 460 ià( dtd =ð SDP_ALT8 || dtd =ð SDP_SEQ8 ) 461 d -> un™Size +ð( ušt8_t ); 462 ià( dtd =ð SDP_ALT16 || dtd =ð SDP_SEQ16 ) 463 d -> un™Size +ð( ušt16_t ); 464 ià( dtd =ð SDP_ALT32 || dtd =ð SDP_SEQ32 ) 465 d -> un™Size +ð( ušt32_t ); 466 £q = ( sdp_d©a_t *) v®ue ; 467 d -> v® . d©a£q = £q ; 468 ; £q ; seq = seq-> Ãxt ) 469 d -> un™Size +ð £q ->unitSize; 472 `ä“ ( d ); 473 d = NULL ; 476  d ; 477 } } 479 sdp_d©a_t * $sdp_d©a_®loc ( ušt8_t dtd , cÚ¡ * v®ue ) 481 ušt32_t Ëngth ; 483  dtd ) { 484  SDP_URL_STR8 : 485  SDP_URL_STR16 : 486  SDP_TEXT_STR8 : 487  SDP_TEXT_STR16 : 488 ià(! v®ue ) 489  NULL ; 491 Ëngth = `¡¾’ ((*è v®ue ); 494 Ëngth = 0; 498  `sdp_d©a_®loc_w™h_Ëngth ( dtd , v®ue , Ëngth ); 499 } } 501 sdp_d©a_t * $sdp_£q_­³nd ( sdp_d©a_t * £q , sdp_d©a_ˆ* d ) 503 ià( £q ) { 504 sdp_d©a_t * p ; 505  p = £q ;…-> Ãxt ;… =…->next); 506 p -> Ãxt = d ; 508 £q = d ; 509 d -> Ãxt = NULL ; 510  £q ; 511 } } 513 sdp_d©a_t * $sdp_£q_®loc_w™h_Ëngth (** dtds , ** v®ues , * Ëngth , 514  Ën ) 516 sdp_d©a_t * cu¼ = NULL , * £q = NULL; 517  i ; 519  i = 0; i < Ën ; i++) { 520 sdp_d©a_t * d©a ; 521 št8_t dtd = *( ušt8_t *è dtds [ i ]; 523 ià( dtd >ð SDP_SEQ8 && dtd <ð SDP_ALT32 ) 524 d©a = ( sdp_d©a_t *è v®ues [ i ]; 526 d©a = `sdp_d©a_®loc_w™h_Ëngth ( dtd , v®ues [ i ], Ëngth [i]); 528 ià(! d©a ) 529  NULL ; 531 ià( cu¼ ) 532 cu¼ -> Ãxt = d©a ; 534 £q = d©a ; 536 cu¼ = d©a ; 539  `sdp_d©a_®loc ( SDP_SEQ8 , £q ); 540 } } 542 sdp_d©a_t * $sdp_£q_®loc (** dtds , ** v®ues ,  Ën ) 544 sdp_d©a_t * cu¼ = NULL , * £q = NULL; 545  i ; 547  i = 0; i < Ën ; i++) { 548 sdp_d©a_t * d©a ; 549 ušt8_t dtd = *(ušt8_ˆ*è dtds [ i ]; 551 ià( dtd >ð SDP_SEQ8 && dtd <ð SDP_ALT32 ) 552 d©a = ( sdp_d©a_t *è v®ues [ i ]; 554 d©a = `sdp_d©a_®loc ( dtd , v®ues [ i ]); 556 ià(! d©a ) 557  NULL ; 559 ià( cu¼ ) 560 cu¼ -> Ãxt = d©a ; 562 £q = d©a ; 564 cu¼ = d©a ; 567  `sdp_d©a_®loc ( SDP_SEQ8 , £q ); 568 } } 570  $exŒaù_svþass_uuid ( sdp_d©a_t * d©a , uuid_t * uuid ) 572 sdp_d©a_t * d ; 574 ià(! d©a || ! `SDP_IS_SEQ (d©a-> dtd )) 577 d = d©a -> v® . d©a£q ; 578 ià(! d ) 581 ià( d -> dtd < SDP_UUID16 || d->dtd > SDP_UUID128 ) 584 * uuid = d -> v® .uuid; 585 } } 587  $sdp_©Œ_add ( sdp_»cÜd_t * »c , ušt16_t ©Œ , sdp_d©a_t * d ) 589 sdp_d©a_t * p = `sdp_d©a_g‘ ( »c , ©Œ ); 591 ià( p ) 594 d -> ©ŒId = ©Œ ; 595 »c -> ©Œli¡ = `sdp_li¡_š£¹_sÜ‹d Ôec->©Œli¡, d , sdp_©Œid_comp_func ); 597 ià( ©Œ =ð SDP_ATTR_SVCLASS_ID_LIST ) 598 `exŒaù_svþass_uuid ( d , & »c -> svþass ); 601 } } 603  $sdp_©Œ_»move ( sdp_»cÜd_t * »c , ušt16_t ©Œ ) 605 sdp_d©a_t * d = `sdp_d©a_g‘ ( »c , ©Œ ); 607 ià( d ) 608 »c -> ©Œli¡ = `sdp_li¡_»move Ôec->©Œli¡, d ); 610 ià( ©Œ =ð SDP_ATTR_SVCLASS_ID_LIST ) 611 `mem£t (& »c -> svþass , 0, (rec->svclass)); 612 } } 614  $sdp_£t_£q_Ën ( ušt8_t * ±r , ušt32_t Ëngth ) 616 ušt8_t dtd = * ±r ++; 618  dtd ) { 619  SDP_SEQ8 : 620  SDP_ALT8 : 621  SDP_TEXT_STR8 : 622  SDP_URL_STR8 : 623 * ±r = ( ušt8_t è Ëngth ; 625  SDP_SEQ16 : 626  SDP_ALT16 : 627  SDP_TEXT_STR16 : 628  SDP_URL_STR16 : 629 `bt_put_be16 ( Ëngth , ±r ); 631  SDP_SEQ32 : 632  SDP_ALT32 : 633  SDP_TEXT_STR32 : 634  SDP_URL_STR32 : 635 `bt_put_be32 ( Ëngth , ±r ); 638 } } 640  $sdp_g‘_d©a_ty³_size ( ušt8_t dtd ) 642  size = ( ušt8_t ); 644  dtd ) { 645  SDP_SEQ8 : 646  SDP_TEXT_STR8 : 647  SDP_URL_STR8 : 648  SDP_ALT8 : 649 size +ð( ušt8_t ); 651  SDP_SEQ16 : 652  SDP_TEXT_STR16 : 653  SDP_URL_STR16 : 654  SDP_ALT16 : 655 size +ð( ušt16_t ); 657  SDP_SEQ32 : 658  SDP_TEXT_STR32 : 659  SDP_URL_STR32 : 660  SDP_ALT32 : 661 size +ð( ušt32_t ); 665  size ; 666 } } 668  $sdp_£t_©Œid ( sdp_buf_t * buf , ušt16_t ©Œ ) 670 ušt8_t * p = buf -> d©a ; 673 * p ++ = SDP_UINT16 ; 674 buf -> d©a_size = ( ušt8_t ); 675 `bt_put_be16 ( ©Œ , p ); 676 buf -> d©a_size +ð( ušt16_t ); 677 } } 679  $g‘_d©a_size ( sdp_buf_t * buf , sdp_d©a_t * sdpd©a ) 681 sdp_d©a_t * d ; 682  n = 0; 684  d = sdpd©a -> v® . d©a£q ; d; d = d-> Ãxt ) { 685 ià( buf -> d©a ) 686 n +ð `sdp_g’_pdu ( buf , d ); 688 n +ð `sdp_g’_bufãr ( buf , d ); 691  n ; 692 } } 694  $sdp_g‘_d©a_size ( sdp_buf_t * buf , sdp_d©a_t * d ) 696 ušt32_t d©a_size = 0; 697 ušt8_t dtd = d ->dtd; 699  dtd ) { 700  SDP_DATA_NIL : 702  SDP_UINT8 : 703 d©a_size = ( ušt8_t ); 705  SDP_UINT16 : 706 d©a_size = ( ušt16_t ); 708  SDP_UINT32 : 709 d©a_size = ( ušt32_t ); 711  SDP_UINT64 : 712 d©a_size = ( ušt64_t ); 714  SDP_UINT128 : 715 d©a_size = ( ušt128_t ); 717  SDP_INT8 : 718  SDP_BOOL : 719 d©a_size = ( št8_t ); 721  SDP_INT16 : 722 d©a_size = ( št16_t ); 724  SDP_INT32 : 725 d©a_size = ( št32_t ); 727  SDP_INT64 : 728 d©a_size = ( št64_t ); 730  SDP_INT128 : 731 d©a_size = ( ušt128_t ); 733  SDP_TEXT_STR8 : 734  SDP_TEXT_STR16 : 735  SDP_TEXT_STR32 : 736  SDP_URL_STR8 : 737  SDP_URL_STR16 : 738  SDP_URL_STR32 : 739 d©a_size = d -> un™Size - ( ušt8_t ); 741  SDP_SEQ8 : 742  SDP_SEQ16 : 743  SDP_SEQ32 : 744 d©a_size = `g‘_d©a_size ( buf , d ); 746  SDP_ALT8 : 747  SDP_ALT16 : 748  SDP_ALT32 : 749 d©a_size = `g‘_d©a_size ( buf , d ); 751  SDP_UUID16 : 752 d©a_size = ( ušt16_t ); 754  SDP_UUID32 : 755 d©a_size = ( ušt32_t ); 757  SDP_UUID128 : 758 d©a_size = ( ušt128_t ); 764  d©a_size ; 765 } } 767  $sdp_g’_bufãr ( sdp_buf_t * buf , sdp_d©a_t * d ) 769  Üig = buf -> buf_size ; 771 ià( buf -> buf_size =ð0 && d -> dtd == 0) { 773 buf -> buf_size +ð( ušt8_t ); 776 buf -> buf_size +ð( ušt8_t ); 780 buf -> buf_size +ð( ušt8_t è+ ( ušt16_t ); 782 buf -> buf_size +ð `sdp_g‘_d©a_ty³_size ( d -> dtd ); 783 buf -> buf_size +ð `sdp_g‘_d©a_size (buf, d ); 785 ià( buf -> buf_size > UCHAR_MAX && d -> dtd =ð SDP_SEQ8 ) 786 buf -> buf_size +ð( ušt8_t ); 788  buf -> buf_size - Üig ; 789 } } 791  $sdp_g’_pdu ( sdp_buf_t * buf , sdp_d©a_t * d ) 793 ušt32_t pdu_size , d©a_size ; 794 * ¤c = NULL , is_£q = 0, is_®t = 0; 795 ušt16_t u16 ; 796 ušt32_t u32 ; 797 ušt64_t u64 ; 798 ušt128_t u128 ; 799 ušt8_t * £qp = buf -> d©a + buf-> d©a_size ; 800 ušt32_t Üig_d©a_size = buf -> d©a_size ; 802 »ÿlcuÏ‹ : 803 pdu_size = `sdp_g‘_d©a_ty³_size ( d -> dtd ); 804 buf -> d©a_size +ð pdu_size ; 806 d©a_size = `sdp_g‘_d©a_size ( buf , d ); 807 ià( d©a_size > UCHAR_MAX && d -> dtd =ð SDP_SEQ8 ) { 808 buf -> d©a_size = Üig_d©a_size ; 809 d -> dtd = SDP_SEQ16 ; 810  »ÿlcuÏ‹ ; 813 * £qp = d -> dtd ; 815  d -> dtd ) { 816  SDP_DATA_NIL : 818  SDP_UINT8 : 819 ¤c = & d -> v® . ušt8 ; 821  SDP_UINT16 : 822 u16 = `htÚs ( d -> v® . ušt16 ); 823 ¤c = (*è& u16 ; 825  SDP_UINT32 : 826 u32 = `htÚl ( d -> v® . ušt32 ); 827 ¤c = (*è& u32 ; 829  SDP_UINT64 : 830 u64 = `htÚ64 ( d -> v® . ušt64 ); 831 ¤c = (*è& u64 ; 833  SDP_UINT128 : 834 `htÚ128 (& d -> v® . ušt128 , & u128 ); 835 ¤c = (*è& u128 ; 837  SDP_INT8 : 838  SDP_BOOL : 839 ¤c = (*è& d -> v® . št8 ; 841  SDP_INT16 : 842 u16 = `htÚs ( d -> v® . št16 ); 843 ¤c = (*è& u16 ; 845  SDP_INT32 : 846 u32 = `htÚl ( d -> v® . št32 ); 847 ¤c = (*è& u32 ; 849  SDP_INT64 : 850 u64 = `htÚ64 ( d -> v® . št64 ); 851 ¤c = (*è& u64 ; 853  SDP_INT128 : 854 `htÚ128 (& d -> v® . št128 , & u128 ); 855 ¤c = (*è& u128 ; 857  SDP_TEXT_STR8 : 858  SDP_TEXT_STR16 : 859  SDP_TEXT_STR32 : 860  SDP_URL_STR8 : 861  SDP_URL_STR16 : 862  SDP_URL_STR32 : 863 ¤c = (*è d -> v® . ¡r ; 864 `sdp_£t_£q_Ën ( £qp , d©a_size ); 866  SDP_SEQ8 : 867  SDP_SEQ16 : 868  SDP_SEQ32 : 869 is_£q = 1; 870 `sdp_£t_£q_Ën ( £qp , d©a_size ); 872  SDP_ALT8 : 873  SDP_ALT16 : 874  SDP_ALT32 : 875 is_®t = 1; 876 `sdp_£t_£q_Ën ( £qp , d©a_size ); 878  SDP_UUID16 : 879 u16 = `htÚs ( d -> v® . uuid . v®ue . uuid16 ); 880 ¤c = (*è& u16 ; 882  SDP_UUID32 : 883 u32 = `htÚl ( d -> v® . uuid . v®ue . uuid32 ); 884 ¤c = (*è& u32 ; 886  SDP_UUID128 : 887 ¤c = (*è& d -> v® . uuid . v®ue . uuid128 ; 893 ià(! is_£q && ! is_®t ) { 894 ià( ¤c && buf -> buf_size >ðbuf-> d©a_size + data_size) { 895 `memýy ( buf -> d©a + buf-> d©a_size , ¤c , data_size); 896 buf -> d©a_size += data_size; 897 } ià( d -> dtd !ð SDP_DATA_NIL ) { 898 `SDPDBG ("Gen PDU : Can't copy from invalid source or dest"); 902 pdu_size +ð d©a_size ; 904  pdu_size ; 905 } } 907  $sdp_©Œ_pdu (* v®ue , * ud©a ) 909 `sdp_­³nd_to_pdu (( sdp_buf_t *) ud©a , ( sdp_d©a_t *) v®ue ); 910 } } 912  $sdp_©Œ_size (* v®ue , * ud©a ) 914 `sdp_g’_bufãr (( sdp_buf_t *) ud©a , ( sdp_d©a_t *) v®ue ); 915 } } 917  $sdp_g’_»cÜd_pdu (cÚ¡ sdp_»cÜd_t * »c , sdp_buf_t * buf ) 919 `mem£t ( buf , 0, ( sdp_buf_t )); 920 `sdp_li¡_fÜ—ch ( »c -> ©Œli¡ , sdp_©Œ_size , buf ); 922 buf -> d©a = `m®loc (buf-> buf_size ); 923 ià(! buf -> d©a ) 924  - ENOMEM ; 925 buf -> d©a_size = 0; 926 `mem£t ( buf -> d©a , 0, buf-> buf_size ); 928 `sdp_li¡_fÜ—ch ( »c -> ©Œli¡ , sdp_©Œ_pdu , buf ); 931 } } 933  $sdp_©Œ_»¶aû ( sdp_»cÜd_t * »c , ušt16_t ©Œ , sdp_d©a_t * d ) 935 sdp_d©a_t * p = `sdp_d©a_g‘ ( »c , ©Œ ); 937 ià( p ) { 938 »c -> ©Œli¡ = `sdp_li¡_»move Ôec->©Œli¡, p ); 939 `sdp_d©a_ä“ ( p ); 942 d -> ©ŒId = ©Œ ; 943 »c -> ©Œli¡ = `sdp_li¡_š£¹_sÜ‹d Ôec->©Œli¡, d , sdp_©Œid_comp_func ); 945 ià( ©Œ =ð SDP_ATTR_SVCLASS_ID_LIST ) 946 `exŒaù_svþass_uuid ( d , & »c -> svþass ); 947 } } 949  $sdp_©Œid_comp_func (cÚ¡ * key1 , cÚ¡ * key2 ) 951 cÚ¡ sdp_d©a_t * d1 = (cÚ¡ sdp_d©a_ˆ*) key1 ; 952 cÚ¡ sdp_d©a_t * d2 = (cÚ¡ sdp_d©a_ˆ*) key2 ; 954 ià( d1 && d2 ) 955  d1 -> ©ŒId - d2 ->attrId; 957 } } 959  $d©a_£q_ä“ ( sdp_d©a_t * £q ) 961 sdp_d©a_t * d = £q -> v® . d©a£q ; 963  d ) { 964 sdp_d©a_t * Ãxt = d ->next; 965 `sdp_d©a_ä“ ( d ); 966 d = Ãxt ; 968 } } 970  $sdp_d©a_ä“ ( sdp_d©a_t * d ) 972  d -> dtd ) { 973  SDP_SEQ8 : 974  SDP_SEQ16 : 975  SDP_SEQ32 : 976 `d©a_£q_ä“ ( d ); 978  SDP_URL_STR8 : 979  SDP_URL_STR16 : 980  SDP_URL_STR32 : 981  SDP_TEXT_STR8 : 982  SDP_TEXT_STR16 : 983  SDP_TEXT_STR32 : 984 `ä“ ( d -> v® . ¡r ); 987 `ä“ ( d ); 988 } } 990  $sdp_uuid_exŒaù (cÚ¡ ušt8_t * p ,  bufsize , uuid_t * uuid , * sÿÂed ) 992 ušt8_t ty³ ; 994 ià( bufsize < (è( ušt8_t )) { 995 `SDPERR ("Unexpectedƒnd of…acket"); 999 ty³ = *(cÚ¡ ušt8_t *è p ; 1001 ià(! `SDP_IS_UUID ( ty³ )) { 1002 `SDPERR ("UnknowÀd©¨ty³ : %dƒx³ùšg‡ svøUUID", ty³ ); 1005 p +ð( ušt8_t ); 1006 * sÿÂed +ð( ušt8_t ); 1007 bufsize -ð( ušt8_t ); 1008 ià( ty³ =ð SDP_UUID16 ) { 1009 ià( bufsize < (è( ušt16_t )) { 1010 `SDPERR ("Notƒnough„oom for 16-bit UUID"); 1013 `sdp_uuid16_ü—‹ ( uuid , `bt_g‘_be16 ( p )); 1014 * sÿÂed +ð( ušt16_t ); 1015 } ià( ty³ =ð SDP_UUID32 ) { 1016 ià( bufsize < (è( ušt32_t )) { 1017 `SDPERR ("Notƒnough„oom for 32-bit UUID"); 1020 `sdp_uuid32_ü—‹ ( uuid , `bt_g‘_be32 ( p )); 1021 * sÿÂed +ð( ušt32_t ); 1023 ià( bufsize < (è( ušt128_t )) { 1024 `SDPERR ("Notƒnough„oom for 128-bit UUID"); 1027 `sdp_uuid128_ü—‹ ( uuid , p ); 1028 * sÿÂed +ð( ušt128_t ); 1031 } } 1033  sdp_d©a_t * $exŒaù_št (cÚ¡ * p ,  bufsize , * Ën ) 1035 sdp_d©a_t * d ; 1037 ià( bufsize < (è( ušt8_t )) { 1038 `SDPERR ("Unexpectedƒnd of…acket"); 1039  NULL ; 1042 d = `m®loc (( sdp_d©a_t )); 1043 ià(! d ) 1044  NULL ; 1046 `SDPDBG ("Extracting integer"); 1047 `mem£t ( d , 0, ( sdp_d©a_t )); 1048 d -> dtd = *( ušt8_t *è p ; 1049 p +ð( ušt8_t ); 1050 * Ën +ð( ušt8_t ); 1051 bufsize -ð( ušt8_t ); 1053  d -> dtd ) { 1054  SDP_DATA_NIL : 1056  SDP_BOOL : 1057  SDP_INT8 : 1058  SDP_UINT8 : 1059 ià( bufsize < (è( ušt8_t )) { 1060 `SDPERR ("Unexpectedƒnd of…acket"); 1061 `ä“ ( d ); 1062  NULL ; 1064 * Ën +ð( ušt8_t ); 1065 d -> v® . ušt8 = *( ušt8_t *è p ; 1067  SDP_INT16 : 1068  SDP_UINT16 : 1069 ià( bufsize < (è( ušt16_t )) { 1070 `SDPERR ("Unexpectedƒnd of…acket"); 1071 `ä“ ( d ); 1072  NULL ; 1074 * Ën +ð( ušt16_t ); 1075 d -> v® . ušt16 = `bt_g‘_be16 ( p ); 1077  SDP_INT32 : 1078  SDP_UINT32 : 1079 ià( bufsize < (è( ušt32_t )) { 1080 `SDPERR ("Unexpectedƒnd of…acket"); 1081 `ä“ ( d ); 1082  NULL ; 1084 * Ën +ð( ušt32_t ); 1085 d -> v® . ušt32 = `bt_g‘_be32 ( p ); 1087  SDP_INT64 : 1088  SDP_UINT64 : 1089 ià( bufsize < (è( ušt64_t )) { 1090 `SDPERR ("Unexpectedƒnd of…acket"); 1091 `ä“ ( d ); 1092  NULL ; 1094 * Ën +ð( ušt64_t ); 1095 d -> v® . ušt64 = `bt_g‘_be64 ( p ); 1097  SDP_INT128 : 1098  SDP_UINT128 : 1099 ià( bufsize < (è( ušt128_t )) { 1100 `SDPERR ("Unexpectedƒnd of…acket"); 1101 `ä“ ( d ); 1102  NULL ; 1104 * Ën +ð( ušt128_t ); 1105 `Áoh128 (( ušt128_t *è p , & d -> v® . ušt128 ); 1108 `ä“ ( d ); 1109 d = NULL ; 1111  d ; 1112 } } 1114  sdp_d©a_t * $exŒaù_uuid (cÚ¡ ušt8_t * p ,  bufsize , * Ën , 1115 sdp_»cÜd_t * »c ) 1117 sdp_d©a_t * d = `m®loc ((sdp_data_t)); 1119 ià(! d ) 1120  NULL ; 1122 `SDPDBG ("Extracting UUID"); 1123 `mem£t ( d , 0, ( sdp_d©a_t )); 1124 ià( `sdp_uuid_exŒaù ( p , bufsize , & d -> v® . uuid , Ën ) < 0) { 1125 `ä“ ( d ); 1126  NULL ; 1128 d -> dtd = * p ; 1129 ià( »c ) 1130 `sdp_·‰”n_add_uuid ( »c , & d -> v® . uuid ); 1131  d ; 1132 } } 1137  sdp_d©a_t * $exŒaù_¡r (cÚ¡ * p ,  bufsize , * Ën ) 1139 * s ; 1140  n ; 1141 sdp_d©a_t * d ; 1143 ià( bufsize < (è( ušt8_t )) { 1144 `SDPERR ("Unexpectedƒnd of…acket"); 1145  NULL ; 1148 d = `m®loc (( sdp_d©a_t )); 1149 ià(! d ) 1150  NULL ; 1152 `mem£t ( d , 0, ( sdp_d©a_t )); 1153 d -> dtd = *( ušt8_t *è p ; 1154 p +ð( ušt8_t ); 1155 * Ën +ð( ušt8_t ); 1156 bufsize -ð( ušt8_t ); 1158  d -> dtd ) { 1159  SDP_TEXT_STR8 : 1160  SDP_URL_STR8 : 1161 ià( bufsize < (è( ušt8_t )) { 1162 `SDPERR ("Unexpectedƒnd of…acket"); 1163 `ä“ ( d ); 1164  NULL ; 1166 n = *( ušt8_t *è p ; 1167 p +ð( ušt8_t ); 1168 * Ën +ð( ušt8_t ); 1169 bufsize -ð( ušt8_t ); 1171  SDP_TEXT_STR16 : 1172  SDP_URL_STR16 : 1173 ià( bufsize < (è( ušt16_t )) { 1174 `SDPERR ("Unexpectedƒnd of…acket"); 1175 `ä“ ( d ); 1176  NULL ; 1178 n = `bt_g‘_be16 ( p ); 1179 p +ð( ušt16_t ); 1180 * Ën +ð( ušt16_t ); 1181 bufsize -ð( ušt16_t ); 1184 `SDPERR ("Sizeofext string > UINT16_MAX"); 1185 `ä“ ( d ); 1186  NULL ; 1189 ià( bufsize < n ) { 1190 `SDPERR ("Stringoo†ongo fit in…acket"); 1191 `ä“ ( d ); 1192  NULL ; 1195 s = `m®loc ( n + 1); 1196 ià(! s ) { 1197 `SDPERR ("Notƒnough memory for incoming string"); 1198 `ä“ ( d ); 1199  NULL ; 1201 `mem£t ( s , 0, n + 1); 1202 `memýy ( s , p , n ); 1204 * Ën +ð n ; 1206 `SDPDBG ("L’ : %d", n ); 1207 `SDPDBG ("SŒ : %s", s ); 1209 d -> v® . ¡r = s ; 1210 d -> un™Size = n + ( ušt8_t ); 1211  d ; 1212 } } 1218  $sdp_exŒaù_£qty³ (cÚ¡ ušt8_t * buf ,  bufsize , ušt8_ˆ* dtdp , * size ) 1220 ušt8_t dtd ; 1221  sÿÂed = ( ušt8_t ); 1223 ià( bufsize < (è( ušt8_t )) { 1224 `SDPERR ("Unexpectedƒnd of…acket"); 1228 dtd = *( ušt8_t *è buf ; 1229 buf +ð( ušt8_t ); 1230 bufsize -ð( ušt8_t ); 1231 * dtdp = dtd ; 1232  dtd ) { 1233  SDP_SEQ8 : 1234  SDP_ALT8 : 1235 ià( bufsize < (è( ušt8_t )) { 1236 `SDPERR ("Unexpectedƒnd of…acket"); 1239 * size = *( ušt8_t *è buf ; 1240 sÿÂed +ð( ušt8_t ); 1242  SDP_SEQ16 : 1243  SDP_ALT16 : 1244 ià( bufsize < (è( ušt16_t )) { 1245 `SDPERR ("Unexpectedƒnd of…acket"); 1248 * size = `bt_g‘_be16 ( buf ); 1249 sÿÂed +ð( ušt16_t ); 1251  SDP_SEQ32 : 1252  SDP_ALT32 : 1253 ià( bufsize < (è( ušt32_t )) { 1254 `SDPERR ("Unexpectedƒnd of…acket"); 1257 * size = `bt_g‘_be32 ( buf ); 1258 sÿÂed +ð( ušt32_t ); 1261 `SDPERR ("Unknown sequenceype,‡borting"); 1264  sÿÂed ; 1265 } } 1267  sdp_d©a_t * $exŒaù_£q (cÚ¡ * p ,  bufsize , * Ën , 1268 sdp_»cÜd_t * »c ) 1270  £qËn , n = 0; 1271 sdp_d©a_t * cu¼ , * ´ev ; 1272 sdp_d©a_t * d = `m®loc ((sdp_data_t)); 1274 ià(! d ) 1275  NULL ; 1277 `SDPDBG ("Extracting SEQ"); 1278 `mem£t ( d , 0, ( sdp_d©a_t )); 1279 * Ën = `sdp_exŒaù_£qty³ ( p , bufsize , & d -> dtd , & £qËn ); 1280 `SDPDBG ("Sequ’û Ty³ : 0x%x†’gth : 0x%x", d -> dtd , £qËn ); 1282 ià(* Ën == 0) 1283  d ; 1285 ià(* Ën > bufsize ) { 1286 `SDPERR ("Packet‚ot bigƒnougho hold sequence."); 1287 `ä“ ( d ); 1288  NULL ; 1291 p +ð* Ën ; 1292 bufsize -ð* Ën ; 1293 ´ev = NULL ; 1294  n < £qËn ) { 1295  ©ŒËn = 0; 1296 cu¼ = `sdp_exŒaù_©Œ ( p , bufsize , & ©ŒËn , »c ); 1297 ià( cu¼ =ð NULL ) 1300 ià( ´ev ) 1301 ´ev -> Ãxt = cu¼ ; 1303 d -> v® . d©a£q = cu¼ ; 1304 ´ev = cu¼ ; 1305 p +ð ©ŒËn ; 1306 n +ð ©ŒËn ; 1307 bufsize -ð ©ŒËn ; 1309 `SDPDBG ("ExŒaùed: %d Sequ’ûL’gth: %d", n , £qËn ); 1312 * Ën +ð n ; 1313  d ; 1314 } } 1316 sdp_d©a_t * $sdp_exŒaù_©Œ (cÚ¡ ušt8_t * p ,  bufsize , * size , 1317 sdp_»cÜd_t * »c ) 1319 sdp_d©a_t * –em ; 1320  n = 0; 1321 ušt8_t dtd ; 1323 ià( bufsize < (è( ušt8_t )) { 1324 `SDPERR ("Unexpectedƒnd of…acket"); 1325  NULL ; 1328 dtd = *(cÚ¡ ušt8_t *) p ; 1330 `SDPDBG ("exŒaù_©Œ: dtd=0x%x", dtd ); 1331  dtd ) { 1332  SDP_DATA_NIL : 1333  SDP_BOOL : 1334  SDP_UINT8 : 1335  SDP_UINT16 : 1336  SDP_UINT32 : 1337  SDP_UINT64 : 1338  SDP_UINT128 : 1339  SDP_INT8 : 1340  SDP_INT16 : 1341  SDP_INT32 : 1342  SDP_INT64 : 1343  SDP_INT128 : 1344 –em = `exŒaù_št ( p , bufsize , & n ); 1346  SDP_UUID16 : 1347  SDP_UUID32 : 1348  SDP_UUID128 : 1349 –em = `exŒaù_uuid ( p , bufsize , & n , »c ); 1351  SDP_TEXT_STR8 : 1352  SDP_TEXT_STR16 : 1353  SDP_TEXT_STR32 : 1354  SDP_URL_STR8 : 1355  SDP_URL_STR16 : 1356  SDP_URL_STR32 : 1357 –em = `exŒaù_¡r ( p , bufsize , & n ); 1359  SDP_SEQ8 : 1360  SDP_SEQ16 : 1361  SDP_SEQ32 : 1362  SDP_ALT8 : 1363  SDP_ALT16 : 1364  SDP_ALT32 : 1365 –em = `exŒaù_£q ( p , bufsize , & n , »c ); 1368 `SDPERR ("UnknowÀd©¨desütÜ : 0x%x”mš©šg", dtd ); 1369  NULL ; 1371 * size +ð n ; 1372  –em ; 1373 } } 1375 #ifdeà SDP_DEBUG 1376  $©Œ_´št_func (* v®ue , * u£rD©a ) 1378 sdp_d©a_t * d = (sdp_d©a_ˆ*) v®ue ; 1380 `SDPDBG ("====================================="); 1381 `SDPDBG ("ATTRIBUTE IDENTIFIER : 0x%x", d -> ©ŒId ); 1382 `SDPDBG ("ATTRIBUTE VALUE PTR : %p", v®ue ); 1383 ià( d ) 1384 `sdp_d©a_´št ( d ); 1386 `SDPDBG ("NULL value"); 1387 `SDPDBG ("====================================="); 1388 } } 1390  $sdp_´št_£rviû_©Œ ( sdp_li¡_t * svcA‰rLi¡ ) 1392 `SDPDBG ("Prštšg s”viû‡‰¸li¡ %p", svcA‰rLi¡ ); 1393 `sdp_li¡_fÜ—ch ( svcA‰rLi¡ , ©Œ_´št_func , NULL ); 1394 `SDPDBG ("Prš‹d s”viû‡‰¸li¡ %p", svcA‰rLi¡ ); 1395 } } 1398 sdp_»cÜd_t * $sdp_exŒaù_pdu (cÚ¡ ušt8_t * buf ,  bufsize , * sÿÂed ) 1400  exŒaùed = 0, £qËn = 0; 1401 ušt8_t dtd ; 1402 ušt16_t ©Œ ; 1403 sdp_»cÜd_t * »c = `sdp_»cÜd_®loc (); 1404 cÚ¡ ušt8_t * p = buf ; 1406 * sÿÂed = `sdp_exŒaù_£qty³ ( buf , bufsize , & dtd , & £qËn ); 1407 p +ð* sÿÂed ; 1408 bufsize -ð* sÿÂed ; 1409 »c -> ©Œli¡ = NULL ; 1411  exŒaùed < £qËn && bufsize > 0) { 1412  n = ( ušt8_t ), ©ŒËn = 0; 1413 sdp_d©a_t * d©a = NULL ; 1415 `SDPDBG ("Extract PDU, sequenceLength: %d†ocalExtractedLength: %d", 1416 £qËn , exŒaùed ); 1418 ià( bufsize < n + (è( ušt16_t )) { 1419 `SDPERR ("Unexpectedƒnd of…acket"); 1423 dtd = *( ušt8_t *è p ; 1424 ©Œ = `bt_g‘_be16 ( p + n ); 1425 n +ð( ušt16_t ); 1427 `SDPDBG ("DTD oà©ŒId : %d A‰¸id : 0x%x ", dtd , ©Œ ); 1429 d©a = `sdp_exŒaù_©Œ ( p + n , bufsize -‚, & ©ŒËn , »c ); 1431 `SDPDBG ("A‰¸id : 0x%x‡‰rV®ueL’gth : %d", ©Œ , ©ŒËn ); 1433 n +ð ©ŒËn ; 1434 ià( d©a =ð NULL ) { 1435 `SDPDBG ("Terminatingƒxtraction of‡ttributes"); 1439 ià( ©Œ =ð SDP_ATTR_RECORD_HANDLE ) 1440 »c -> hªdË = d©a -> v® . ušt32 ; 1442 ià( ©Œ =ð SDP_ATTR_SVCLASS_ID_LIST ) 1443 `exŒaù_svþass_uuid ( d©a , & »c -> svþass ); 1445 exŒaùed +ð n ; 1446 p +ð n ; 1447 bufsize -ð n ; 1448 `sdp_©Œ_»¶aû ( »c , ©Œ , d©a ); 1450 `SDPDBG ("Extract PDU, seqLength: %d†ocalExtractedLength: %d", 1451 £qËn , exŒaùed ); 1453 #ifdeà SDP_DEBUG 1454 `SDPDBG ("Successfulƒxtracting of Svc Rec‡ttributes"); 1455 `sdp_´št_£rviû_©Œ ( »c -> ©Œli¡ ); 1457 * sÿÂed +ð £qËn ; 1458  »c ; 1459 } } 1461  $sdp_cÝy_·‰”n (* v®ue , * ud©a ) 1463 uuid_t * uuid = v®ue ; 1464 sdp_»cÜd_t * »c = ud©a ; 1466 `sdp_·‰”n_add_uuid ( »c , uuid ); 1467 } } 1469 * $sdp_d©a_v®ue ( sdp_d©a_t * d©a , ušt32_t * Ën ) 1471 * v® = NULL ; 1473  d©a -> dtd ) { 1474  SDP_DATA_NIL : 1476  SDP_UINT8 : 1477 v® = & d©a ->v®. ušt8 ; 1479  SDP_INT8 : 1480  SDP_BOOL : 1481 v® = & d©a ->v®. št8 ; 1483  SDP_UINT16 : 1484 v® = & d©a ->v®. ušt16 ; 1486  SDP_INT16 : 1487 v® = & d©a ->v®. št16 ; 1489  SDP_UINT32 : 1490 v® = & d©a ->v®. ušt32 ; 1492  SDP_INT32 : 1493 v® = & d©a ->v®. št32 ; 1495  SDP_INT64 : 1496 v® = & d©a ->v®. št64 ; 1498  SDP_UINT64 : 1499 v® = & d©a ->v®. ušt64 ; 1501  SDP_UINT128 : 1502 v® = & d©a ->v®. ušt128 ; 1504  SDP_INT128 : 1505 v® = & d©a ->v®. št128 ; 1507  SDP_UUID16 : 1508 v® = & d©a ->v®. uuid . v®ue . uuid16 ; 1510  SDP_UUID32 : 1511 v® = & d©a ->v®. uuid . v®ue . uuid32 ; 1513  SDP_UUID128 : 1514 v® = & d©a ->v®. uuid . v®ue . uuid128 ; 1516  SDP_URL_STR8 : 1517  SDP_URL_STR16 : 1518  SDP_TEXT_STR8 : 1519  SDP_TEXT_STR16 : 1520  SDP_URL_STR32 : 1521  SDP_TEXT_STR32 : 1522 v® = d©a ->v®. ¡r ; 1523 ià( Ën ) 1524 * Ën = d©a -> un™Size - 1; 1526  SDP_ALT8 : 1527  SDP_ALT16 : 1528  SDP_ALT32 : 1529  SDP_SEQ8 : 1530  SDP_SEQ16 : 1531  SDP_SEQ32 : 1532 v® = `sdp_cÝy_£q ( d©a ->v®. d©a£q ); 1536  v® ; 1537 } } 1539  sdp_d©a_t * $sdp_cÝy_£q ( sdp_d©a_t * d©a ) 1541 sdp_d©a_t * tmp , * £q = NULL , * cur = NULL; 1543  tmp = d©a ;mp;m°ðtmp-> Ãxt ) { 1544 sdp_d©a_t * d©©mp ; 1545 * v®ue ; 1547 v®ue = `sdp_d©a_v®ue ( tmp , NULL ); 1548 d©©mp = `sdp_d©a_®loc_w™h_Ëngth ( tmp -> dtd , v®ue , 1549 tmp -> un™Size ); 1551 ià( cur ) 1552 cur -> Ãxt = d©©mp ; 1554 £q = d©©mp ; 1556 cur = d©©mp ; 1559  £q ; 1560 } } 1562  $sdp_cÝy_©Œli¡ (* v®ue , * ud©a ) 1564 sdp_d©a_t * d©a = v®ue ; 1565 sdp_»cÜd_t * »c = ud©a ; 1566 * v® ; 1567 ušt32_t Ën = 0; 1569 v® = `sdp_d©a_v®ue ( d©a , & Ën ); 1571 ià(! Ën ) 1572 `sdp_©Œ_add_Ãw ( »c , d©a -> ©ŒId , d©a-> dtd , v® ); 1574 `sdp_©Œ_add_Ãw_w™h_Ëngth ( »c , d©a -> ©ŒId , 1575 d©a -> dtd , v® , Ën ); 1576 } } 1578 sdp_»cÜd_t * $sdp_cÝy_»cÜd ( sdp_»cÜd_t * »c ) 1580 sdp_»cÜd_t * ýy ; 1582 ýy = `sdp_»cÜd_®loc (); 1584 ýy -> hªdË = »c ->handle; 1586 `sdp_li¡_fÜ—ch ( »c -> ·‰”n , sdp_cÝy_·‰”n , ýy ); 1587 `sdp_li¡_fÜ—ch ( »c -> ©Œli¡ , sdp_cÝy_©Œli¡ , ýy ); 1589 ýy -> svþass = »c ->svclass; 1591  ýy ; 1592 } } 1594 #ifdeà SDP_DEBUG 1595  $´št_d©a£q ( sdp_d©a_t * p ) 1597 sdp_d©a_t * d ; 1599  d = p ; d; d = d-> Ãxt ) 1600 `sdp_d©a_´št ( d ); 1601 } } 1604  $sdp_»cÜd_´št (cÚ¡ sdp_»cÜd_t * »c ) 1606 sdp_d©a_t * d = `sdp_d©a_g‘ ( »c , SDP_ATTR_SVCNAME_PRIMARY ); 1607 ià( d && `SDP_IS_TEXT_STR (d-> dtd )) 1608 `´štf ("S”viû Name: %.*s\n", d -> un™Size , d-> v® . ¡r ); 1609 d = `sdp_d©a_g‘ ( »c , SDP_ATTR_SVCDESC_PRIMARY ); 1610 ià( d && `SDP_IS_TEXT_STR (d-> dtd )) 1611 `´štf ("S”viû DesütiÚ: %.*s\n", d -> un™Size , d-> v® . ¡r ); 1612 d = `sdp_d©a_g‘ ( »c , SDP_ATTR_PROVNAME_PRIMARY ); 1613 ià( d && `SDP_IS_TEXT_STR (d-> dtd )) 1614 `´štf ("S”viû Provid”: %.*s\n", d -> un™Size , d-> v® . ¡r ); 1615 } } 1617 #ifdeà SDP_DEBUG 1618  $sdp_d©a_´št ( sdp_d©a_t * d ) 1620  d -> dtd ) { 1621  SDP_DATA_NIL : 1622 `SDPDBG ("NIL"); 1624  SDP_BOOL : 1625  SDP_UINT8 : 1626  SDP_UINT16 : 1627  SDP_UINT32 : 1628  SDP_UINT64 : 1629  SDP_UINT128 : 1630  SDP_INT8 : 1631  SDP_INT16 : 1632  SDP_INT32 : 1633  SDP_INT64 : 1634  SDP_INT128 : 1635 `SDPDBG ("IÁeg” : 0x%x", d -> v® . ušt32 ); 1637  SDP_UUID16 : 1638  SDP_UUID32 : 1639  SDP_UUID128 : 1640 `SDPDBG ("UUID"); 1641 `sdp_uuid_´št (& d -> v® . uuid ); 1643  SDP_TEXT_STR8 : 1644  SDP_TEXT_STR16 : 1645  SDP_TEXT_STR32 : 1646 `SDPDBG ("Texˆ: %s", d -> v® . ¡r ); 1648  SDP_URL_STR8 : 1649  SDP_URL_STR16 : 1650  SDP_URL_STR32 : 1651 `SDPDBG ("URL : %s", d -> v® . ¡r ); 1653  SDP_SEQ8 : 1654  SDP_SEQ16 : 1655  SDP_SEQ32 : 1656 `´št_d©a£q ( d -> v® . d©a£q ); 1658  SDP_ALT8 : 1659  SDP_ALT16 : 1660  SDP_ALT32 : 1661 `SDPDBG ("Data Sequence Alternates"); 1662 `´št_d©a£q ( d -> v® . d©a£q ); 1665 } } 1668 sdp_d©a_t * $sdp_d©a_g‘ (cÚ¡ sdp_»cÜd_t * »c , ušt16_t ©ŒId ) 1670 ià( »c -> ©Œli¡ ) { 1671 sdp_d©a_t sdpTem¶©e ; 1672 sdp_li¡_t * p ; 1674 sdpTem¶©e . ©ŒId =‡ttrId; 1675 p = `sdp_li¡_fšd ( »c -> ©Œli¡ , & sdpTem¶©e , sdp_©Œid_comp_func ); 1676 ià( p ) 1677  p -> d©a ; 1679  NULL ; 1680 } } 1682  $sdp_£nd_»q ( sdp_£ssiÚ_t * £ssiÚ , ušt8_t * buf , ušt32_t size ) 1684 ušt32_t £Á = 0; 1686  £Á < size ) { 1687  n = `£nd ( £ssiÚ -> sock , buf + £Á , size - sent, 0); 1688 ià( n < 0) 1690 £Á +ð n ; 1693 } } 1695  $sdp_»ad_r¥ ( sdp_£ssiÚ_t * £ssiÚ , ušt8_t * buf , ušt32_t size ) 1697 fd_£t »adFds ; 1698  timev® timeout = { SDP_RESPONSE_TIMEOUT , 0 }; 1700 `FD_ZERO (& »adFds ); 1701 `FD_SET ( £ssiÚ -> sock , & »adFds ); 1702 `SDPDBG ("Waiting for„esponse"); 1703 ià( `£Ëù ( £ssiÚ -> sock + 1, & »adFds , NULL , NULL, & timeout ) == 0) { 1704 `SDPERR ("Clientimed out"); 1705 ”ºo = ETIMEDOUT ; 1708  `»cv ( £ssiÚ -> sock , buf , size , 0); 1709 } } 1714  $sdp_£nd_»q_w4_r¥ ( sdp_£ssiÚ_t * £ssiÚ , ušt8_t * »qbuf , 1715 ušt8_t * r¥buf , ušt32_t »qsize , ušt32_ˆ* r¥size ) 1717  n ; 1718 sdp_pdu_hdr_t * »qhdr = (sdp_pdu_hdr_ˆ*è »qbuf ; 1719 sdp_pdu_hdr_t * r¥hdr = (sdp_pdu_hdr_ˆ*è r¥buf ; 1721 `SDPDBG (""); 1722 ià(0 > `sdp_£nd_»q ( £ssiÚ , »qbuf , »qsize )) { 1723 `SDPERR ("Error sending data:%m"); 1726 n = `sdp_»ad_r¥ ( £ssiÚ , r¥buf , SDP_RSP_BUFFER_SIZE ); 1727 ià(0 > n ) 1729 `SDPDBG ("R—d : %d", n ); 1730 ià( n =ð0 || »qhdr -> tid !ð r¥hdr ->tid) { 1731 ”ºo = EPROTO ; 1734 * r¥size = n ; 1736 } } 1741 sdp_li¡_t * $sdp_li¡_­³nd ( sdp_li¡_t * p , * d ) 1743 sdp_li¡_t * q , * n = `m®loc ((sdp_list_t)); 1745 ià(! n ) 1746  NULL ; 1748 n -> d©a = d ; 1749 n -> Ãxt = 0; 1751 ià(! p ) 1752  n ; 1754  q = p ; q-> Ãxt ; q = q->next); 1755 q -> Ãxt = n ; 1757  p ; 1758 } } 1760 sdp_li¡_t * $sdp_li¡_»move ( sdp_li¡_t * li¡ , * d ) 1762 sdp_li¡_t * p , * q ; 1764  q = 0, p = li¡ ;…; q =…,… =…-> Ãxt ) 1765 ià( p -> d©a =ð d ) { 1766 ià( q ) 1767 q -> Ãxt = p ->next; 1769 li¡ = p -> Ãxt ; 1770 `ä“ ( p ); 1774  li¡ ; 1775 } } 1777 sdp_li¡_t * $sdp_li¡_š£¹_sÜ‹d ( sdp_li¡_t * li¡ , * d , 1778 sdp_comp_func_t f ) 1780 sdp_li¡_t * q , * p , * n ; 1782 n = `m®loc (( sdp_li¡_t )); 1783 ià(! n ) 1784  NULL ; 1785 n -> d©a = d ; 1786  q = 0, p = li¡ ;…; q =…,… =…-> Ãxt ) 1787 ià( `f ( p -> d©a , d ) >= 0) 1790 ià( q ) 1791 q -> Ãxt = n ; 1793 li¡ = n ; 1794 n -> Ãxt = p ; 1795  li¡ ; 1796 } } 1802  $sdp_li¡_ä“ ( sdp_li¡_t * li¡ , sdp_ä“_func_t f ) 1804 sdp_li¡_t * Ãxt ; 1805  li¡ ) { 1806 Ãxt = li¡ ->next; 1807 ià( f ) 1808 `f ( li¡ -> d©a ); 1809 `ä“ ( li¡ ); 1810 li¡ = Ãxt ; 1812 } } 1814  šlše  $__fšd_pÜt ( sdp_d©a_t * £q ,  ´Ùo ) 1816 ià(! £q || !£q-> Ãxt ) 1819 ià( `SDP_IS_UUID ( £q -> dtd è&& `sdp_uuid_to_´Ùo (&£q-> v® . uuid è=ð ´Ùo ) { 1820 £q = seq-> Ãxt ; 1821  £q -> dtd ) { 1822  SDP_UINT8 : 1823  £q -> v® . ušt8 ; 1824  SDP_UINT16 : 1825  £q -> v® . ušt16 ; 1829 } } 1831  $sdp_g‘_´Ùo_pÜt (cÚ¡ sdp_li¡_t * li¡ ,  ´Ùo ) 1833 ià( ´Ùo !ð L2CAP_UUID &&…rÙØ!ð RFCOMM_UUID ) { 1834 ”ºo = EINVAL ; 1838 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 1839 sdp_li¡_t * p ; 1840  p = li¡ -> d©a ;…;… =…-> Ãxt ) { 1841 sdp_d©a_t * £q = p -> d©a ; 1842  pÜt = `__fšd_pÜt ( £q , ´Ùo ); 1843 ià( pÜt ) 1844  pÜt ; 1848 } } 1850 sdp_d©a_t * $sdp_g‘_´Ùo_desc ( sdp_li¡_t * li¡ ,  ´Ùo ) 1852 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 1853 sdp_li¡_t * p ; 1854  p = li¡ -> d©a ;…;… =…-> Ãxt ) { 1855 sdp_d©a_t * £q = p -> d©a ; 1856 ià( `SDP_IS_UUID ( £q -> dtd ) && 1857 `sdp_uuid_to_´Ùo (& £q -> v® . uuid è=ð ´Ùo ) 1858  £q -> Ãxt ; 1861  NULL ; 1862 } } 1864  $sdp_g‘_´Ùo_descs ( ušt16_t ©Œ_id , cÚ¡ sdp_»cÜd_t * »c , 1865 sdp_li¡_t ** ·p ) 1867 sdp_d©a_t * pdli¡ , * cu¼ ; 1868 sdp_li¡_t * ­ = NULL ; 1870 pdli¡ = `sdp_d©a_g‘ ( »c , ©Œ_id ); 1871 ià( pdli¡ =ð NULL ) { 1872 ”ºo = ENODATA ; 1876 `SDPDBG ("A‰ribu‹ v®uty³: 0x%02x", pdli¡ -> dtd ); 1878 ià( ©Œ_id =ð SDP_ATTR_ADD_PROTO_DESC_LIST ) { 1879 ià(! `SDP_IS_SEQ ( pdli¡ -> dtd )) { 1880 ”ºo = EINVAL ; 1883 pdli¡ =…dli¡-> v® . d©a£q ; 1886 ; pdli¡ ;…dli¡ =…dli¡-> Ãxt ) { 1887 sdp_li¡_t * pds = NULL ; 1889 ià(! `SDP_IS_SEQ ( pdli¡ -> dtd è&& ! `SDP_IS_ALT (pdlist->dtd)) 1890  çžed ; 1892  cu¼ = pdli¡ -> v® . d©a£q ; cu¼; cu¼ = cu¼-> Ãxt ) { 1893 ià(! `SDP_IS_SEQ ( cu¼ -> dtd )) { 1894 `sdp_li¡_ä“ ( pds , NULL ); 1895  çžed ; 1897 pds = `sdp_li¡_­³nd Õds, cu¼ -> v® . d©a£q ); 1900 ­ = `sdp_li¡_­³nd ×p, pds ); 1903 * ·p = ­ ; 1907 çžed : 1908 `sdp_li¡_fÜ—ch ( ­ , ( sdp_li¡_func_t è sdp_li¡_ä“ , NULL ); 1909 `sdp_li¡_ä“ ( ­ , NULL ); 1910 ”ºo = EINVAL ; 1913 } } 1915  $sdp_g‘_acûss_´Ùos (cÚ¡ sdp_»cÜd_t * »c , sdp_li¡_t ** ·p ) 1917  `sdp_g‘_´Ùo_descs ( SDP_ATTR_PROTO_DESC_LIST , »c , ·p ); 1918 } } 1920  $sdp_g‘_add_acûss_´Ùos (cÚ¡ sdp_»cÜd_t * »c , sdp_li¡_t ** ·p ) 1922  `sdp_g‘_´Ùo_descs ( SDP_ATTR_ADD_PROTO_DESC_LIST , »c , ·p ); 1923 } } 1925  $sdp_g‘_uuid£q_©Œ (cÚ¡ sdp_»cÜd_t * »c , ušt16_t ©Œ , 1926 sdp_li¡_t ** £qp ) 1928 sdp_d©a_t * sdpd©a = `sdp_d©a_g‘ ( »c , ©Œ ); 1930 * £qp = NULL ; 1931 ià( sdpd©a && `SDP_IS_SEQ (sdpd©a-> dtd )) { 1932 sdp_d©a_t * d ; 1933  d = sdpd©a -> v® . d©a£q ; d; d = d-> Ãxt ) { 1934 uuid_t * u ; 1935 ià( d -> dtd < SDP_UUID16 || d->dtd > SDP_UUID128 ) { 1936 ”ºo = EINVAL ; 1937  çž ; 1940 u = `m®loc (( uuid_t )); 1941 ià(! u ) 1942  çž ; 1944 * u = d -> v® . uuid ; 1945 * £qp = `sdp_li¡_­³nd (*£qp, u ); 1949 çž : 1950 `sdp_li¡_ä“ (* £qp , ä“ ); 1951 * £qp = NULL ; 1953 } } 1955  $sdp_£t_uuid£q_©Œ ( sdp_»cÜd_t * »c , ušt16_t aid , sdp_li¡_t * £q ) 1957  ¡©us = 0, i , Ën ; 1958 ** dtds , ** v®ues ; 1959 ušt8_t uuid16 = SDP_UUID16 ; 1960 ušt8_t uuid32 = SDP_UUID32 ; 1961 ušt8_t uuid128 = SDP_UUID128 ; 1962 sdp_li¡_t * p ; 1964 Ën = `sdp_li¡_Ën ( £q ); 1965 ià(! £q || Ën == 0) 1967 dtds = `m®loc ( Ën * (*)); 1968 ià(! dtds ) 1971 v®ues = `m®loc ( Ën * (*)); 1972 ià(! v®ues ) { 1973 `ä“ ( dtds ); 1977  p = £q , i = 0; i < Ën ; i++,… =…-> Ãxt ) { 1978 uuid_t * uuid = p -> d©a ; 1979 ià( uuid ) 1980  uuid -> ty³ ) { 1981  SDP_UUID16 : 1982 dtds [ i ] = & uuid16 ; 1983 v®ues [ i ] = & uuid -> v®ue . uuid16 ; 1985  SDP_UUID32 : 1986 dtds [ i ] = & uuid32 ; 1987 v®ues [ i ] = & uuid -> v®ue . uuid32 ; 1989  SDP_UUID128 : 1990 dtds [ i ] = & uuid128 ; 1991 v®ues [ i ] = & uuid -> v®ue . uuid128 ; 1994 ¡©us = -1; 1998 ¡©us = -1; 2002 ià( ¡©us == 0) { 2003 sdp_d©a_t * d©a = `sdp_£q_®loc ( dtds , v®ues , Ën ); 2004 `sdp_©Œ_»¶aû ( »c , aid , d©a ); 2005 `sdp_·‰”n_add_uuid£q ( »c , £q ); 2007 `ä“ ( dtds ); 2008 `ä“ ( v®ues ); 2009  ¡©us ; 2010 } } 2012  $sdp_g‘_Ïng_©Œ (cÚ¡ sdp_»cÜd_t * »c , sdp_li¡_t ** ÏngSeq ) 2014 sdp_Ïng_©Œ_t * Ïng ; 2015 sdp_d©a_t * sdpd©a , * cu¼_d©a ; 2017 * ÏngSeq = NULL ; 2018 sdpd©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_LANG_BASE_ATTR_ID_LIST ); 2019 ià( sdpd©a =ð NULL ) { 2020 ”ºo = ENODATA ; 2024 ià(! `SDP_IS_SEQ ( sdpd©a -> dtd )) 2025  šv®id ; 2026 cu¼_d©a = sdpd©a -> v® . d©a£q ; 2028  cu¼_d©a ) { 2029 sdp_d©a_t * pCode , * pEncodšg , * pOff£t ; 2031 pCode = cu¼_d©a ; 2032 ià( pCode -> dtd !ð SDP_UINT16 ) 2033  šv®id ; 2037 ià(! pCode -> Ãxt || !pCode->next->next) 2038  šv®id ; 2040 pEncodšg = pCode -> Ãxt ; 2041 ià( pEncodšg -> dtd !ð SDP_UINT16 ) 2042  šv®id ; 2044 pOff£t = pEncodšg -> Ãxt ; 2045 ià( pOff£t -> dtd !ð SDP_UINT16 ) 2046  šv®id ; 2048 Ïng = `m®loc (( sdp_Ïng_©Œ_t )); 2049 ià(! Ïng ) { 2050 `sdp_li¡_ä“ (* ÏngSeq , ä“ ); 2051 * ÏngSeq = NULL ; 2054 Ïng -> code_ISO639 = pCode -> v® . ušt16 ; 2055 Ïng -> ’codšg = pEncodšg -> v® . ušt16 ; 2056 Ïng -> ba£_off£t = pOff£t -> v® . ušt16 ; 2057 `SDPDBG ("code_ISO639 : 0x%02x", Ïng -> code_ISO639 ); 2058 `SDPDBG ("’codšg : 0x%02x", Ïng -> ’codšg ); 2059 `SDPDBG ("ba£_offf£ˆ: 0x%02x", Ïng -> ba£_off£t ); 2060 * ÏngSeq = `sdp_li¡_­³nd (*ÏngSeq, Ïng ); 2062 cu¼_d©a = pOff£t -> Ãxt ; 2067 šv®id : 2068 `sdp_li¡_ä“ (* ÏngSeq , ä“ ); 2069 * ÏngSeq = NULL ; 2070 ”ºo = EINVAL ; 2073 } } 2075  $sdp_g‘_´ofže_descs (cÚ¡ sdp_»cÜd_t * »c , sdp_li¡_t ** ´ofDescSeq ) 2077 sdp_´ofže_desc_t * ´ofDesc ; 2078 sdp_d©a_t * sdpd©a , * £q ; 2080 * ´ofDescSeq = NULL ; 2081 sdpd©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_PFILE_DESC_LIST ); 2082 ià( sdpd©a =ð NULL ) { 2083 ”ºo = ENODATA ; 2087 ià(! `SDP_IS_SEQ ( sdpd©a -> dtd è|| sdpd©a-> v® . d©a£q =ð NULL ) 2088  šv®id ; 2090  £q = sdpd©a -> v® . d©a£q ; seq; seq = seq-> Ãxt ) { 2091 uuid_t * uuid = NULL ; 2092 ušt16_t v”siÚ = 0x100; 2094 ià( `SDP_IS_UUID ( £q -> dtd )) { 2100 sdp_d©a_t * Ãxt = £q ->next; 2101 uuid = & £q -> v® .uuid; 2102 ià( Ãxt &&‚ext-> dtd =ð SDP_UINT16 ) { 2103 v”siÚ = Ãxt -> v® . ušt16 ; 2104 £q = Ãxt ; 2106 } ià( `SDP_IS_SEQ ( £q -> dtd )) { 2107 sdp_d©a_t * puuid , * pVnum ; 2109 puuid = £q -> v® . d©a£q ; 2110 ià( puuid =ð NULL || ! `SDP_IS_UUID Õuuid-> dtd )) 2111  šv®id ; 2113 uuid = & puuid -> v® .uuid; 2115 pVnum = puuid -> Ãxt ; 2116 ià( pVnum =ð NULL ||…Vnum-> dtd !ð SDP_UINT16 ) 2117  šv®id ; 2119 v”siÚ = pVnum -> v® . ušt16 ; 2121  šv®id ; 2123 ià( uuid !ð NULL ) { 2124 ´ofDesc = `m®loc (( sdp_´ofže_desc_t )); 2125 ià(! ´ofDesc ) { 2126 `sdp_li¡_ä“ (* ´ofDescSeq , ä“ ); 2127 * ´ofDescSeq = NULL ; 2130 ´ofDesc -> uuid = *uuid; 2131 ´ofDesc -> v”siÚ = version; 2132 #ifdeà SDP_DEBUG 2133 `sdp_uuid_´št (& ´ofDesc -> uuid ); 2134 `SDPDBG ("Vnum : 0x%04x", ´ofDesc -> v”siÚ ); 2136 * ´ofDescSeq = `sdp_li¡_­³nd (*´ofDescSeq, ´ofDesc ); 2141 šv®id : 2142 `sdp_li¡_ä“ (* ´ofDescSeq , ä“ ); 2143 * ´ofDescSeq = NULL ; 2144 ”ºo = EINVAL ; 2147 } } 2149  $sdp_g‘_£rv”_v” (cÚ¡ sdp_»cÜd_t * »c , sdp_li¡_t ** u16 ) 2151 sdp_d©a_t * d , * cu¼ ; 2153 * u16 = NULL ; 2154 d = `sdp_d©a_g‘ ( »c , SDP_ATTR_VERSION_NUM_LIST ); 2155 ià( d =ð NULL ) { 2156 ”ºo = ENODATA ; 2160 ià(! `SDP_IS_SEQ ( d -> dtd è|| d-> v® . d©a£q =ð NULL ) 2161  šv®id ; 2163  cu¼ = d -> v® . d©a£q ; cu¼; cu¼ = cu¼-> Ãxt ) { 2164 ià( cu¼ -> dtd !ð SDP_UINT16 ) 2165  šv®id ; 2166 * u16 = `sdp_li¡_­³nd (*u16, & cu¼ -> v® . ušt16 ); 2171 šv®id : 2172 `sdp_li¡_ä“ (* u16 , NULL ); 2173 * u16 = NULL ; 2174 ”ºo = EINVAL ; 2177 } } 2181  $sdp_g‘_št_©Œ (cÚ¡ sdp_»cÜd_t * »c , ušt16_t ©Œid , * v®ue ) 2183 sdp_d©a_t * sdpd©a = `sdp_d©a_g‘ ( »c , ©Œid ); 2185 ià( sdpd©a ) 2187 ià( sdpd©a -> dtd =ð SDP_BOOL || sdpd©a->dtd =ð SDP_UINT8 || 2188 sdpd©a -> dtd =ð SDP_UINT16 || sdpd©a->dtd =ð SDP_UINT32 || 2189 sdpd©a -> dtd =ð SDP_INT8 || sdpd©a->dtd =ð SDP_INT16 || 2190 sdpd©a -> dtd =ð SDP_INT32 ) { 2191 * v®ue = sdpd©a -> v® . ušt32 ; 2194 ”ºo = EINVAL ; 2196 } } 2198  $sdp_g‘_¡ršg_©Œ (cÚ¡ sdp_»cÜd_t * »c , ušt16_t ©Œid , * v®ue , 2199  v®u–’ ) 2201 sdp_d©a_t * sdpd©a = `sdp_d©a_g‘ ( »c , ©Œid ); 2202 ià( sdpd©a ) 2204 ià( `SDP_IS_TEXT_STR ( sdpd©a -> dtd )) 2205 ià((è `¡¾’ ( sdpd©a -> v® . ¡r è< v®u–’ ) { 2206 `¡rýy ( v®ue , sdpd©a -> v® . ¡r ); 2209 ”ºo = EINVAL ; 2211 } } 2213  #g‘_basic_©Œ ( ©ŒID , pA‰rV®ue , f›ldName ) \ 2214 sdp_d©a_t * d©a = `sdp_d©a_g‘ ( »c , ©ŒID ); \ 2215 ià( d©a ) { \ 2216 * pA‰rV®ue = d©a -> v® . f›ldName ; \ 2219 ”ºo = EINVAL ; \ 2220  -1; ) 2222  $sdp_g‘_£rviû_id (cÚ¡ sdp_»cÜd_t * »c , uuid_t * uuid ) 2224 `g‘_basic_©Œ ( SDP_ATTR_SERVICE_ID , uuid , uuid); 2225 } } 2227  $sdp_g‘_group_id (cÚ¡ sdp_»cÜd_t * »c , uuid_t * uuid ) 2229 `g‘_basic_©Œ ( SDP_ATTR_GROUP_ID , uuid , uuid); 2230 } } 2232  $sdp_g‘_»cÜd_¡©e (cÚ¡ sdp_»cÜd_t * »c , ušt32_t * svcRecS‹ ) 2234 `g‘_basic_©Œ ( SDP_ATTR_RECORD_STATE , svcRecS‹ , ušt32 ); 2235 } } 2237  $sdp_g‘_£rviû_avaž (cÚ¡ sdp_»cÜd_t * »c , ušt8_t * svcAvaž ) 2239 `g‘_basic_©Œ ( SDP_ATTR_SERVICE_AVAILABILITY , svcAvaž , ušt8 ); 2240 } } 2242  $sdp_g‘_£rviû_‰l (cÚ¡ sdp_»cÜd_t * »c , ušt32_t * svcTTLInfo ) 2244 `g‘_basic_©Œ ( SDP_ATTR_SVCINFO_TTL , svcTTLInfo , ušt32 ); 2245 } } 2247  $sdp_g‘_d©aba£_¡©e (cÚ¡ sdp_»cÜd_t * »c , ušt32_t * svcDBS‹ ) 2249 `g‘_basic_©Œ ( SDP_ATTR_SVCDB_STATE , svcDBS‹ , ušt32 ); 2250 } } 2258  $sdp_©Œ_add_Ãw ( sdp_»cÜd_t * »c , ušt16_t ©Œ , ušt8_t dtd , 2259 cÚ¡ * v®ue ) 2261 sdp_d©a_t * d = `sdp_d©a_®loc ( dtd , v®ue ); 2262 ià( d ) { 2263 `sdp_©Œ_»¶aû ( »c , ©Œ , d ); 2267 } } 2269  $sdp_©Œ_add_Ãw_w™h_Ëngth ( sdp_»cÜd_t * »c , 2270 ušt16_t ©Œ , ušt8_t dtd , cÚ¡ * v®ue , ušt32_t Ën ) 2272 sdp_d©a_t * d ; 2274 d = `sdp_d©a_®loc_w™h_Ëngth ( dtd , v®ue , Ën ); 2275 ià(! d ) 2278 `sdp_©Œ_»¶aû ( »c , ©Œ , d ); 2281 } } 2288  $sdp_£t_šfo_©Œ ( sdp_»cÜd_t * »c , cÚ¡ * Çme , cÚ¡ * ´ov , 2289 cÚ¡ * desc ) 2291 ià( Çme ) 2292 `sdp_©Œ_add_Ãw ( »c , SDP_ATTR_SVCNAME_PRIMARY , 2293 SDP_TEXT_STR8 , Çme ); 2294 ià( ´ov ) 2295 `sdp_©Œ_add_Ãw ( »c , SDP_ATTR_PROVNAME_PRIMARY , 2296 SDP_TEXT_STR8 , ´ov ); 2297 ià( desc ) 2298 `sdp_©Œ_add_Ãw ( »c , SDP_ATTR_SVCDESC_PRIMARY , 2299 SDP_TEXT_STR8 , desc ); 2300 } } 2302  sdp_d©a_t * $acûss_´Ùo_to_d©a£q ( sdp_»cÜd_t * »c , sdp_li¡_t * ´Ùo ) 2304 sdp_d©a_t * £q = NULL ; 2305 * dtds [10], * v®ues [10]; 2306 ** £qDTDs , ** £qs ; 2307  i , £qËn ; 2308 sdp_li¡_t * p ; 2310 £qËn = `sdp_li¡_Ën ( ´Ùo ); 2311 £qDTDs = `m®loc ( £qËn * (*)); 2312 ià(! £qDTDs ) 2313  NULL ; 2315 £qs = `m®loc ( £qËn * (*)); 2316 ià(! £qs ) { 2317 `ä“ ( £qDTDs ); 2318  NULL ; 2321  i = 0, p = ´Ùo ;…;… =…-> Ãxt , i++) { 2322 sdp_li¡_t * –t = p -> d©a ; 2323 sdp_d©a_t * s ; 2324 uuid_t * uuid = NULL ; 2325  p¦’ = 0; 2326 ; –t && p¦’ < `ARRAY_SIZE ( dtds );ƒÉ =ƒÉ-> Ãxt ,…slen++) { 2327 sdp_d©a_t * d = –t -> d©a ; 2328 dtds [ p¦’ ] = & d -> dtd ; 2329  d -> dtd ) { 2330  SDP_UUID16 : 2331 uuid = ( uuid_t *è d ; 2332 v®ues [ p¦’ ] = & uuid -> v®ue . uuid16 ; 2334  SDP_UUID32 : 2335 uuid = ( uuid_t *è d ; 2336 v®ues [ p¦’ ] = & uuid -> v®ue . uuid32 ; 2338  SDP_UUID128 : 2339 uuid = ( uuid_t *è d ; 2340 v®ues [ p¦’ ] = & uuid -> v®ue . uuid128 ; 2342  SDP_UINT8 : 2343 v®ues [ p¦’ ] = & d -> v® . ušt8 ; 2345  SDP_UINT16 : 2346 v®ues [ p¦’ ] = & d -> v® . ušt16 ; 2348  SDP_SEQ8 : 2349  SDP_SEQ16 : 2350  SDP_SEQ32 : 2351 v®ues [ p¦’ ] = d ; 2356 s = `sdp_£q_®loc ( dtds , v®ues , p¦’ ); 2357 ià( s ) { 2358 £qDTDs [ i ] = & s -> dtd ; 2359 £qs [ i ] = s ; 2360 ià( uuid ) 2361 `sdp_·‰”n_add_uuid ( »c , uuid ); 2364 £q = `sdp_£q_®loc ( £qDTDs , £qs , £qËn ); 2365 `ä“ ( £qDTDs ); 2366 `ä“ ( £qs ); 2367  £q ; 2368 } } 2386  $sdp_£t_acûss_´Ùos ( sdp_»cÜd_t * »c , cÚ¡ sdp_li¡_t * ­ ) 2388 cÚ¡ sdp_li¡_t * p ; 2389 sdp_d©a_t * ´Ùos = NULL ; 2391  p = ­ ;…;… =…-> Ãxt ) { 2392 sdp_d©a_t * £q = `acûss_´Ùo_to_d©a£q ( »c , p -> d©a ); 2393 ´Ùos = `sdp_£q_­³nd ÕrÙos, £q ); 2396 `sdp_©Œ_add ( »c , SDP_ATTR_PROTO_DESC_LIST , ´Ùos ); 2399 } } 2401  $sdp_£t_add_acûss_´Ùos ( sdp_»cÜd_t * »c , cÚ¡ sdp_li¡_t * ­ ) 2403 cÚ¡ sdp_li¡_t * p ; 2404 sdp_d©a_t * ´Ùos = NULL ; 2406  p = ­ ;…;… =…-> Ãxt ) { 2407 sdp_d©a_t * £q = `acûss_´Ùo_to_d©a£q ( »c , p -> d©a ); 2408 ´Ùos = `sdp_£q_­³nd ÕrÙos, £q ); 2411 `sdp_©Œ_add ( »c , SDP_ATTR_ADD_PROTO_DESC_LIST , 2412 ´Ùos ? `sdp_d©a_®loc ( SDP_SEQ8 ,…rÙosè: NULL ); 2415 } } 2433  $sdp_£t_Ïng_©Œ ( sdp_»cÜd_t * »c , cÚ¡ sdp_li¡_t * £q ) 2435 ušt8_t ušt16 = SDP_UINT16 ; 2436  ¡©us = 0, i = 0, £qËn = `sdp_li¡_Ën ( £q ); 2437 ** dtds , ** v®ues ; 2438 cÚ¡ sdp_li¡_t * p ; 2440 dtds = `m®loc (3 * £qËn * (*)); 2441 ià(! dtds ) 2444 v®ues = `m®loc (3 * £qËn * (*)); 2445 ià(! v®ues ) { 2446 `ä“ ( dtds ); 2450  p = £q ;…;… =…-> Ãxt ) { 2451 sdp_Ïng_©Œ_t * Ïng = p -> d©a ; 2452 ià(! Ïng ) { 2453 ¡©us = -1; 2456 dtds [ i ] = & ušt16 ; 2457 v®ues [ i ] = & Ïng -> code_ISO639 ; 2458 i ++; 2459 dtds [ i ] = & ušt16 ; 2460 v®ues [ i ] = & Ïng -> ’codšg ; 2461 i ++; 2462 dtds [ i ] = & ušt16 ; 2463 v®ues [ i ] = & Ïng -> ba£_off£t ; 2464 i ++; 2466 ià( ¡©us == 0) { 2467 sdp_d©a_t * £q = `sdp_£q_®loc ( dtds , v®ues , 3 * £qËn ); 2468 `sdp_©Œ_add ( »c , SDP_ATTR_LANG_BASE_ATTR_ID_LIST , £q ); 2470 `ä“ ( dtds ); 2471 `ä“ ( v®ues ); 2472  ¡©us ; 2473 } } 2482  $sdp_£t_£rviû_id ( sdp_»cÜd_t * »c , uuid_t uuid ) 2484  uuid . ty³ ) { 2485  SDP_UUID16 : 2486 `sdp_©Œ_add_Ãw ( »c , SDP_ATTR_SERVICE_ID , SDP_UUID16 , 2487 & uuid . v®ue . uuid16 ); 2489  SDP_UUID32 : 2490 `sdp_©Œ_add_Ãw ( »c , SDP_ATTR_SERVICE_ID , SDP_UUID32 , 2491 & uuid . v®ue . uuid32 ); 2493  SDP_UUID128 : 2494 `sdp_©Œ_add_Ãw ( »c , SDP_ATTR_SERVICE_ID , SDP_UUID128 , 2495 & uuid . v®ue . uuid128 ); 2498 `sdp_·‰”n_add_uuid ( »c , & uuid ); 2499 } } 2508  $sdp_£t_group_id ( sdp_»cÜd_t * »c , uuid_t uuid ) 2510  uuid . ty³ ) { 2511  SDP_UUID16 : 2512 `sdp_©Œ_add_Ãw ( »c , SDP_ATTR_GROUP_ID , SDP_UUID16 , 2513 & uuid . v®ue . uuid16 ); 2515  SDP_UUID32 : 2516 `sdp_©Œ_add_Ãw ( »c , SDP_ATTR_GROUP_ID , SDP_UUID32 , 2517 & uuid . v®ue . uuid32 ); 2519  SDP_UUID128 : 2520 `sdp_©Œ_add_Ãw ( »c , SDP_ATTR_GROUP_ID , SDP_UUID128 , 2521 & uuid . v®ue . uuid128 ); 2524 `sdp_·‰”n_add_uuid ( »c , & uuid ); 2525 } } 2543  $sdp_£t_´ofže_descs ( sdp_»cÜd_t * »c , cÚ¡ sdp_li¡_t * ´ofžes ) 2545  ¡©us = 0; 2546 ušt8_t uuid16 = SDP_UUID16 ; 2547 ušt8_t uuid32 = SDP_UUID32 ; 2548 ušt8_t uuid128 = SDP_UUID128 ; 2549 ušt8_t ušt16 = SDP_UINT16 ; 2550  i = 0, £qËn = `sdp_li¡_Ën ( ´ofžes ); 2551 ** £qDTDs , ** £qs ; 2552 cÚ¡ sdp_li¡_t * p ; 2553 sdp_d©a_t * pAPSeq ; 2555 £qDTDs = `m®loc ( £qËn * (*)); 2556 ià(! £qDTDs ) 2559 £qs = `m®loc ( £qËn * (*)); 2560 ià(! £qs ) { 2561 `ä“ ( £qDTDs ); 2565  p = ´ofžes ;…;… =…-> Ãxt ) { 2566 sdp_d©a_t * £q ; 2567 * dtds [2], * v®ues [2]; 2568 sdp_´ofže_desc_t * ´ofže = p -> d©a ; 2569 ià(! ´ofže ) { 2570 ¡©us = -1; 2571  ’d ; 2573  ´ofže -> uuid . ty³ ) { 2574  SDP_UUID16 : 2575 dtds [0] = & uuid16 ; 2576 v®ues [0] = & ´ofže -> uuid . v®ue . uuid16 ; 2578  SDP_UUID32 : 2579 dtds [0] = & uuid32 ; 2580 v®ues [0] = & ´ofže -> uuid . v®ue . uuid32 ; 2582  SDP_UUID128 : 2583 dtds [0] = & uuid128 ; 2584 v®ues [0] = & ´ofže -> uuid . v®ue . uuid128 ; 2587 ¡©us = -1; 2588  ’d ; 2590 dtds [1] = & ušt16 ; 2591 v®ues [1] = & ´ofže -> v”siÚ ; 2592 £q = `sdp_£q_®loc ( dtds , v®ues , 2); 2594 ià( £q =ð NULL ) { 2595 ¡©us = -1; 2596  ’d ; 2599 £qDTDs [ i ] = & £q -> dtd ; 2600 £qs [ i ] = £q ; 2601 `sdp_·‰”n_add_uuid ( »c , & ´ofže -> uuid ); 2602 i ++; 2605 pAPSeq = `sdp_£q_®loc ( £qDTDs , £qs , £qËn ); 2606 `sdp_©Œ_add ( »c , SDP_ATTR_PFILE_DESC_LIST , pAPSeq ); 2607 ’d : 2608 `ä“ ( £qDTDs ); 2609 `ä“ ( £qs ); 2610  ¡©us ; 2611 } } 2629  $sdp_£t_u¾_©Œ ( sdp_»cÜd_t * »c , cÚ¡ * þ›Á , cÚ¡ * doc , 2630 cÚ¡ * icÚ ) 2632 `sdp_©Œ_add_Ãw ( »c , SDP_ATTR_CLNT_EXEC_URL , SDP_URL_STR8 , þ›Á ); 2633 `sdp_©Œ_add_Ãw ( »c , SDP_ATTR_DOC_URL , SDP_URL_STR8 , doc ); 2634 `sdp_©Œ_add_Ãw ( »c , SDP_ATTR_ICON_URL , SDP_URL_STR8 , icÚ ); 2635 } } 2637 uuid_t * $sdp_uuid16_ü—‹ ( uuid_t * u , ušt16_t v® ) 2639 `mem£t ( u , 0, ( uuid_t )); 2640 u -> ty³ = SDP_UUID16 ; 2641 u -> v®ue . uuid16 = v® ; 2642  u ; 2643 } } 2645 uuid_t * $sdp_uuid32_ü—‹ ( uuid_t * u , ušt32_t v® ) 2647 `mem£t ( u , 0, ( uuid_t )); 2648 u -> ty³ = SDP_UUID32 ; 2649 u -> v®ue . uuid32 = v® ; 2650  u ; 2651 } } 2653 uuid_t * $sdp_uuid128_ü—‹ ( uuid_t * u , cÚ¡ * v® ) 2655 `mem£t ( u , 0, ( uuid_t )); 2656 u -> ty³ = SDP_UUID128 ; 2657 `memýy (& u -> v®ue . uuid128 , v® , ( ušt128_t )); 2658  u ; 2659 } } 2665  $sdp_uuid_cmp (cÚ¡ * p1 , cÚ¡ * p2 ) 2667 uuid_t * u1 = `sdp_uuid_to_uuid128 ( p1 ); 2668 uuid_t * u2 = `sdp_uuid_to_uuid128 ( p2 ); 2669  »t ; 2671 »t = `sdp_uuid128_cmp ( u1 , u2 ); 2673 `bt_ä“ ( u1 ); 2674 `bt_ä“ ( u2 ); 2676  »t ; 2677 } } 2683  $sdp_uuid16_cmp (cÚ¡ * p1 , cÚ¡ * p2 ) 2685 cÚ¡ uuid_t * u1 = p1 ; 2686 cÚ¡ uuid_t * u2 = p2 ; 2687  `memcmp (& u1 -> v®ue . uuid16 , & u2 ->v®ue.uuid16, ( ušt16_t )); 2688 } } 2694  $sdp_uuid128_cmp (cÚ¡ * p1 , cÚ¡ * p2 ) 2696 cÚ¡ uuid_t * u1 = p1 ; 2697 cÚ¡ uuid_t * u2 = p2 ; 2698  `memcmp (& u1 -> v®ue . uuid128 , & u2 ->v®ue.uuid128, ( ušt128_t )); 2699 } } 2706  $sdp_uuid16_to_uuid128 ( uuid_t * uuid128 , cÚ¡ uuid_ˆ* uuid16 ) 2712  d©a1 ; 2715 uuid128 -> v®ue .uuid128 = blu‘oÙh_ba£_uuid ; 2716 uuid128 -> ty³ = SDP_UUID128 ; 2719 `memýy (& d©a1 , & blu‘oÙh_ba£_uuid . d©a [2], 2); 2722 d©a1 +ð `htÚs ( uuid16 -> v®ue .uuid16); 2725 `memýy (& uuid128 -> v®ue .uuid128. d©a [2], & d©a1 , 2); 2726 } } 2728  $sdp_uuid32_to_uuid128 ( uuid_t * uuid128 , cÚ¡ uuid_ˆ* uuid32 ) 2734  d©a0 ; 2737 uuid128 -> v®ue .uuid128 = blu‘oÙh_ba£_uuid ; 2738 uuid128 -> ty³ = SDP_UUID128 ; 2741 `memýy (& d©a0 , & blu‘oÙh_ba£_uuid . d©a [0], 4); 2744 d©a0 +ð `htÚl ( uuid32 -> v®ue .uuid32); 2747 `memýy (& uuid128 -> v®ue .uuid128. d©a [0], & d©a0 , 4); 2748 } } 2750 uuid_t * $sdp_uuid_to_uuid128 (cÚ¡ uuid_t * uuid ) 2752 uuid_t * uuid128 = `bt_m®loc ((uuid_t)); 2754 ià(! uuid128 ) 2755  NULL ; 2757 `mem£t ( uuid128 , 0, ( uuid_t )); 2758  uuid -> ty³ ) { 2759  SDP_UUID128 : 2760 * uuid128 = * uuid ; 2762  SDP_UUID32 : 2763 `sdp_uuid32_to_uuid128 ( uuid128 , uuid ); 2765  SDP_UUID16 : 2766 `sdp_uuid16_to_uuid128 ( uuid128 , uuid ); 2769  uuid128 ; 2770 } } 2776  $sdp_uuid128_to_uuid ( uuid_t * uuid ) 2778 ušt128_t * b = & blu‘oÙh_ba£_uuid ; 2779 ušt128_t * u = & uuid -> v®ue . uuid128 ; 2780 ušt32_t d©a ; 2781  i ; 2783 ià( uuid -> ty³ !ð SDP_UUID128 ) 2786  i = 4; i < ( b -> d©a ); i++) 2787 ià( b -> d©a [ i ] !ð u ->data[i]) 2790 `memýy (& d©a , u ->data, 4); 2791 d©a = `htÚl (data); 2792 ià( d©a <= 0xffff) { 2793 uuid -> ty³ = SDP_UUID16 ; 2794 uuid -> v®ue . uuid16 = ( ušt16_t è d©a ; 2796 uuid -> ty³ = SDP_UUID32 ; 2797 uuid -> v®ue . uuid32 = d©a ; 2800 } } 2805  $sdp_uuid_to_´Ùo ( uuid_t * uuid ) 2807 uuid_t u = * uuid ; 2808 ià( `sdp_uuid128_to_uuid (& u )) { 2809  u . ty³ ) { 2810  SDP_UUID16 : 2811  u . v®ue . uuid16 ; 2812  SDP_UUID32 : 2813  u . v®ue . uuid32 ; 2817 } } 2825  $sdp_­³nd_to_buf ( sdp_buf_t * d¡ , ušt8_t * d©a , ušt32_t Ën ) 2827 ušt8_t * p = d¡ -> d©a ; 2828 ušt8_t dtd = * p ; 2830 `SDPDBG ("Aµ’d srøsize: %d", Ën ); 2831 `SDPDBG ("Aµ’d d¡ size: %d", d¡ -> d©a_size ); 2832 `SDPDBG ("D¡ bufã¸size: %d", d¡ -> buf_size ); 2833 ià( d¡ -> d©a_size =ð0 && dtd == 0) { 2835 * p = SDP_SEQ8 ; 2836 d¡ -> d©a_size +ð( ušt8_t ); 2838 d¡ -> d©a_size +ð( ušt8_t ); 2841 `memýy ( d¡ -> d©a + d¡-> d©a_size , d©a, Ën ); 2842 d¡ -> d©a_size +ð Ën ; 2844 dtd = *( ušt8_t *è d¡ -> d©a ; 2845 ià( d¡ -> d©a_size > UCHAR_MAX && dtd =ð SDP_SEQ8 ) { 2846  off£t = ( ušt8_t ) + (uint8_t); 2847 `memmove ( d¡ -> d©a + off£t + 1, dst->data + offset, 2848 d¡ -> d©a_size - off£t ); 2849 * p = SDP_SEQ16 ; 2850 d¡ -> d©a_size += 1; 2852 dtd = *( ušt8_t *è p ; 2853 p +ð( ušt8_t ); 2854  dtd ) { 2855  SDP_SEQ8 : 2856 *( ušt8_t *è p = d¡ -> d©a_size - (uint8_t) - (uint8_t); 2858  SDP_SEQ16 : 2859 `bt_put_be16 ( d¡ -> d©a_size - ( ušt8_t è- ( ušt16_t ), p ); 2861  SDP_SEQ32 : 2862 `bt_put_be32 ( d¡ -> d©a_size - ( ušt8_t è- ( ušt32_t ), p ); 2865 } } 2867  $sdp_­³nd_to_pdu ( sdp_buf_t * pdu , sdp_d©a_t * d ) 2869 sdp_buf_t ­³nd ; 2871 `mem£t (& ­³nd , 0, ( sdp_buf_t )); 2872 `sdp_g’_bufãr (& ­³nd , d ); 2873 ­³nd . d©a = `m®loc ×µ’d. buf_size ); 2874 ià(! ­³nd . d©a ) 2877 `sdp_£t_©Œid (& ­³nd , d -> ©ŒId ); 2878 `sdp_g’_pdu (& ­³nd , d ); 2879 `sdp_­³nd_to_buf ( pdu , ­³nd . d©a ,‡µ’d. d©a_size ); 2880 `ä“ ( ­³nd . d©a ); 2881 } } 2891  $sdp_deviû_»cÜd_»gi¡”_bš¬y ( sdp_£ssiÚ_t * £ssiÚ , bdaddr_t * deviû , ušt8_t * d©a , ušt32_t size , ušt8_ˆ æags , ušt32_ˆ* hªdË ) 2893 ušt8_t * »q , * r¥ , * p ; 2894 ušt32_t »qsize , r¥size ; 2895 sdp_pdu_hdr_t * »qhdr , * r¥hdr ; 2896  ¡©us ; 2898 `SDPDBG (""); 2900 ià(! £ssiÚ -> loÿl ) { 2901 ”ºo = EREMOTE ; 2904 »q = `m®loc ( SDP_REQ_BUFFER_SIZE ); 2905 r¥ = `m®loc ( SDP_RSP_BUFFER_SIZE ); 2906 ià( »q =ð NULL || r¥ == NULL) { 2907 ¡©us = -1; 2908 ”ºo = ENOMEM ; 2909  ’d ; 2912 »qhdr = ( sdp_pdu_hdr_t *) »q ; 2913 »qhdr -> pdu_id = SDP_SVC_REGISTER_REQ ; 2914 »qhdr -> tid = `htÚs ( `sdp_g’_tid ( £ssiÚ )); 2915 »qsize = ( sdp_pdu_hdr_t ) + 1; 2916 p = »q + ( sdp_pdu_hdr_t ); 2918 ià( `bacmp ( deviû , BDADDR_ANY )) { 2919 * p ++ = æags | SDP_DEVICE_RECORD ; 2920 `baýy (( bdaddr_t *è p , deviû ); 2921 p +ð( bdaddr_t ); 2922 »qsize +ð( bdaddr_t ); 2924 * p ++ = æags ; 2926 `memýy ( p , d©a , size ); 2927 »qsize +ð size ; 2928 »qhdr -> ¶’ = `htÚs ( »qsize - ( sdp_pdu_hdr_t )); 2930 ¡©us = `sdp_£nd_»q_w4_r¥ ( £ssiÚ , »q , r¥ , »qsize , & r¥size ); 2931 ià( ¡©us < 0) 2932  ’d ; 2934 ià( r¥size < ( sdp_pdu_hdr_t )) { 2935 `SDPERR ("Unexpectedƒnd of…acket"); 2936 ”ºo = EPROTO ; 2937 ¡©us = -1; 2938  ’d ; 2941 r¥hdr = ( sdp_pdu_hdr_t *è r¥ ; 2942 p = r¥ + ( sdp_pdu_hdr_t ); 2944 ià( r¥hdr -> pdu_id =ð SDP_ERROR_RSP ) { 2946 ”ºo = EINVAL ; 2947 ¡©us = -1; 2948 } ià( r¥hdr -> pdu_id !ð SDP_SVC_REGISTER_RSP ) { 2949 ”ºo = EPROTO ; 2950 ¡©us = -1; 2952 ià( r¥size < ( sdp_pdu_hdr_t è+ ( ušt32_t )) { 2953 `SDPERR ("Unexpectedƒnd of…acket"); 2954 ”ºo = EPROTO ; 2955 ¡©us = -1; 2956  ’d ; 2958 ià( hªdË ) 2959 * hªdË = `bt_g‘_be32 ( p ); 2962 ’d : 2963 `ä“ ( »q ); 2964 `ä“ ( r¥ ); 2966  ¡©us ; 2967 } } 2969  $sdp_deviû_»cÜd_»gi¡” ( sdp_£ssiÚ_t * £ssiÚ , bdaddr_t * deviû , sdp_»cÜd_t * »c , ušt8_t æags ) 2971 sdp_buf_t pdu ; 2972 ušt32_t hªdË ; 2973  ”r ; 2975 `SDPDBG (""); 2977 ià( »c -> hªdË &&„ec->handle != 0xffffffff) { 2978 ušt32_t hªdË = »c ->handle; 2979 sdp_d©a_t * d©a = `sdp_d©a_®loc ( SDP_UINT32 , & hªdË ); 2980 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_RECORD_HANDLE , d©a ); 2983 ià( `sdp_g’_»cÜd_pdu ( »c , & pdu ) < 0) { 2984 ”ºo = ENOMEM ; 2988 ”r = `sdp_deviû_»cÜd_»gi¡”_bš¬y ( £ssiÚ , deviû , 2989 pdu . d©a ,…du. d©a_size , æags , & hªdË ); 2991 `ä“ ( pdu . d©a ); 2993 ià( ”r == 0) { 2994 sdp_d©a_t * d©a = `sdp_d©a_®loc ( SDP_UINT32 , & hªdË ); 2995 »c -> hªdË = handle; 2996 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_RECORD_HANDLE , d©a ); 2999  ”r ; 3000 } } 3002  $sdp_»cÜd_»gi¡” ( sdp_£ssiÚ_t * £ssiÚ , sdp_»cÜd_t * »c , ušt8_t æags ) 3004  `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , BDADDR_ANY , »c , æags ); 3005 } } 3010  $sdp_deviû_»cÜd_uÄegi¡”_bš¬y ( sdp_£ssiÚ_t * £ssiÚ , bdaddr_t * deviû , ušt32_t hªdË ) 3012 ušt8_t * »qbuf , * r¥buf , * p ; 3013 ušt32_t »qsize = 0, r¥size = 0; 3014 sdp_pdu_hdr_t * »qhdr , * r¥hdr ; 3015  ¡©us ; 3017 `SDPDBG (""); 3019 ià( hªdË =ð SDP_SERVER_RECORD_HANDLE ) { 3020 ”ºo = EINVAL ; 3024 ià(! £ssiÚ -> loÿl ) { 3025 ”ºo = EREMOTE ; 3029 »qbuf = `m®loc ( SDP_REQ_BUFFER_SIZE ); 3030 r¥buf = `m®loc ( SDP_RSP_BUFFER_SIZE ); 3031 ià(! »qbuf || ! r¥buf ) { 3032 ”ºo = ENOMEM ; 3033 ¡©us = -1; 3034  ’d ; 3036 »qhdr = ( sdp_pdu_hdr_t *è »qbuf ; 3037 »qhdr -> pdu_id = SDP_SVC_REMOVE_REQ ; 3038 »qhdr -> tid = `htÚs ( `sdp_g’_tid ( £ssiÚ )); 3040 p = »qbuf + ( sdp_pdu_hdr_t ); 3041 »qsize = ( sdp_pdu_hdr_t ); 3042 `bt_put_be32 ( hªdË , p ); 3043 »qsize +ð( ušt32_t ); 3045 »qhdr -> ¶’ = `htÚs ( »qsize - ( sdp_pdu_hdr_t )); 3046 ¡©us = `sdp_£nd_»q_w4_r¥ ( £ssiÚ , »qbuf , r¥buf , »qsize , & r¥size ); 3047 ià( ¡©us < 0) 3048  ’d ; 3050 ià( r¥size < ( sdp_pdu_hdr_t è+ ( ušt16_t )) { 3051 `SDPERR ("Unexpectedƒnd of…acket"); 3052 ”ºo = EPROTO ; 3053 ¡©us = -1; 3054  ’d ; 3057 r¥hdr = ( sdp_pdu_hdr_t *è r¥buf ; 3058 p = r¥buf + ( sdp_pdu_hdr_t ); 3060 ià( r¥hdr -> pdu_id =ð SDP_ERROR_RSP ) { 3062 ”ºo = EINVAL ; 3063 ¡©us = -1; 3064 } ià( r¥hdr -> pdu_id !ð SDP_SVC_REMOVE_RSP ) { 3065 ”ºo = EPROTO ; 3066 ¡©us = -1; 3068 ušt16_t tmp ; 3070 `memýy (& tmp , p , (tmp)); 3072 ¡©us = tmp ; 3074 ’d : 3075 `ä“ ( »qbuf ); 3076 `ä“ ( r¥buf ); 3078  ¡©us ; 3079 } } 3081  $sdp_deviû_»cÜd_uÄegi¡” ( sdp_£ssiÚ_t * £ssiÚ , bdaddr_t * deviû , sdp_»cÜd_t * »c ) 3083  ”r ; 3085 ”r = `sdp_deviû_»cÜd_uÄegi¡”_bš¬y ( £ssiÚ , deviû , »c -> hªdË ); 3086 ià( ”r == 0) 3087 `sdp_»cÜd_ä“ ( »c ); 3089  ”r ; 3090 } } 3092  $sdp_»cÜd_uÄegi¡” ( sdp_£ssiÚ_t * £ssiÚ , sdp_»cÜd_t * »c ) 3094  `sdp_deviû_»cÜd_uÄegi¡” ( £ssiÚ , BDADDR_ANY , »c ); 3095 } } 3100  $sdp_deviû_»cÜd_upd©e_bš¬y ( sdp_£ssiÚ_t * £ssiÚ , bdaddr_t * deviû , ušt32_t hªdË , ušt8_t * d©a , ušt32_ˆ size ) 3103 } } 3105  $sdp_deviû_»cÜd_upd©e ( sdp_£ssiÚ_t * £ssiÚ , bdaddr_t * deviû , cÚ¡ sdp_»cÜd_t * »c ) 3107 ušt8_t * »qbuf , * r¥buf , * p ; 3108 ušt32_t »qsize , r¥size ; 3109 sdp_pdu_hdr_t * »qhdr , * r¥hdr ; 3110 ušt32_t hªdË ; 3111 sdp_buf_t pdu ; 3112  ¡©us ; 3114 `SDPDBG (""); 3116 hªdË = »c ->handle; 3118 ià( hªdË =ð SDP_SERVER_RECORD_HANDLE ) { 3119 ”ºo = EINVAL ; 3122 ià(! £ssiÚ -> loÿl ) { 3123 ”ºo = EREMOTE ; 3126 »qbuf = `m®loc ( SDP_REQ_BUFFER_SIZE ); 3127 r¥buf = `m®loc ( SDP_RSP_BUFFER_SIZE ); 3128 ià(! »qbuf || ! r¥buf ) { 3129 ”ºo = ENOMEM ; 3130 ¡©us = -1; 3131  ’d ; 3133 »qhdr = ( sdp_pdu_hdr_t *è »qbuf ; 3134 »qhdr -> pdu_id = SDP_SVC_UPDATE_REQ ; 3135 »qhdr -> tid = `htÚs ( `sdp_g’_tid ( £ssiÚ )); 3137 p = »qbuf + ( sdp_pdu_hdr_t ); 3138 »qsize = ( sdp_pdu_hdr_t ); 3140 `bt_put_be32 ( hªdË , p ); 3141 »qsize +ð( ušt32_t ); 3142 p +ð( ušt32_t ); 3144 ià( `sdp_g’_»cÜd_pdu ( »c , & pdu ) < 0) { 3145 ”ºo = ENOMEM ; 3146 ¡©us = -1; 3147  ’d ; 3149 `memýy ( p , pdu . d©a ,…du. d©a_size ); 3150 »qsize +ð pdu . d©a_size ; 3151 `ä“ ( pdu . d©a ); 3153 »qhdr -> ¶’ = `htÚs ( »qsize - ( sdp_pdu_hdr_t )); 3154 ¡©us = `sdp_£nd_»q_w4_r¥ ( £ssiÚ , »qbuf , r¥buf , »qsize , & r¥size ); 3155 ià( ¡©us < 0) 3156  ’d ; 3158 ià( r¥size < ( sdp_pdu_hdr_t è+ ( ušt16_t )) { 3159 `SDPERR ("Unexpectedƒnd of…acket"); 3160 ”ºo = EPROTO ; 3161 ¡©us = -1; 3162  ’d ; 3165 `SDPDBG ("S’d„eq stu : %d", ¡©us ); 3167 r¥hdr = ( sdp_pdu_hdr_t *è r¥buf ; 3168 p = r¥buf + ( sdp_pdu_hdr_t ); 3170 ià( r¥hdr -> pdu_id =ð SDP_ERROR_RSP ) { 3172 ”ºo = EINVAL ; 3173 ¡©us = -1; 3174 } ià( r¥hdr -> pdu_id !ð SDP_SVC_UPDATE_RSP ) { 3175 ”ºo = EPROTO ; 3176 ¡©us = -1; 3178 ušt16_t tmp ; 3180 `memýy (& tmp , p , (tmp)); 3182 ¡©us = tmp ; 3184 ’d : 3185 `ä“ ( »qbuf ); 3186 `ä“ ( r¥buf ); 3187  ¡©us ; 3188 } } 3190  $sdp_»cÜd_upd©e ( sdp_£ssiÚ_t * £ssiÚ , cÚ¡ sdp_»cÜd_t * »c ) 3192  `sdp_deviû_»cÜd_upd©e ( £ssiÚ , BDADDR_ANY , »c ); 3193 } } 3195 sdp_»cÜd_t * $sdp_»cÜd_®loc () 3197 sdp_»cÜd_t * »c = `m®loc ((sdp_record_t)); 3199 ià(! »c ) 3200  NULL ; 3202 `mem£t ( »c , 0, ( sdp_»cÜd_t )); 3203 »c -> hªdË = 0xffffffff; 3204  »c ; 3205 } } 3210  $sdp_»cÜd_ä“ ( sdp_»cÜd_t * »c ) 3212 `sdp_li¡_ä“ ( »c -> ©Œli¡ , ( sdp_ä“_func_t è sdp_d©a_ä“ ); 3213 `sdp_li¡_ä“ ( »c -> ·‰”n , ä“ ); 3214 `ä“ ( »c ); 3215 } } 3217  $sdp_·‰”n_add_uuid ( sdp_»cÜd_t * »c , uuid_t * uuid ) 3219 uuid_t * uuid128 = `sdp_uuid_to_uuid128 ( uuid ); 3221 `SDPDBG ("EËm’t š¬g‘…©‹º : %d", `sdp_li¡_Ën ( »c -> ·‰”n )); 3222 `SDPDBG ("TryšgØadd : 0x%lx", (è uuid128 ); 3224 ià( `sdp_li¡_fšd ( »c -> ·‰”n , uuid128 , sdp_uuid128_cmp è=ð NULL ) 3225 »c -> ·‰”n = `sdp_li¡_š£¹_sÜ‹d Ôec->·‰”n, uuid128 , sdp_uuid128_cmp ); 3227 `bt_ä“ ( uuid128 ); 3229 `SDPDBG ("EËm’t š¬g‘…©‹º : %d", `sdp_li¡_Ën ( »c -> ·‰”n )); 3230 } } 3232  $sdp_·‰”n_add_uuid£q ( sdp_»cÜd_t * »c , sdp_li¡_t * £q ) 3234 ; £q ; seq = seq-> Ãxt ) { 3235 uuid_t * uuid = (uuid_ˆ*) £q -> d©a ; 3236 `sdp_·‰”n_add_uuid ( »c , uuid ); 3238 } } 3246  $exŒaù_»cÜd_hªdË_£q ( ušt8_t * pdu ,  bufsize , sdp_li¡_t ** £q ,  couÁ , * sÿÂed ) 3248 sdp_li¡_t * pSeq = * £q ; 3249 ušt8_t * pd©a = pdu ; 3250  n ; 3252  n = 0;‚ < couÁ ;‚++) { 3253 ušt32_t * pSvcRec ; 3254 ià( bufsize < (è( ušt32_t )) { 3255 `SDPERR ("Unexpectedƒnd of…acket"); 3258 pSvcRec = `m®loc (( ušt32_t )); 3259 ià(! pSvcRec ) 3261 * pSvcRec = `bt_g‘_be32 ( pd©a ); 3262 pSeq = `sdp_li¡_­³nd ÕSeq, pSvcRec ); 3263 pd©a +ð( ušt32_t ); 3264 * sÿÂed +ð( ušt32_t ); 3265 bufsize -ð( ušt32_t ); 3267 * £q = pSeq ; 3268 } } 3273  $g’_d©a£q_pdu ( ušt8_t * d¡ , cÚ¡ sdp_li¡_t * £q , ušt8_ˆ dtd ) 3275 sdp_d©a_t * d©a£q ; 3276 ** ty³s , ** v®ues ; 3277 sdp_buf_t buf ; 3278  i , £qËn = `sdp_li¡_Ën ( £q ); 3281 `SDPDBG (""); 3283 `SDPDBG ("Seq†’gth : %d", £qËn ); 3285 ty³s = `m®loc ( £qËn * (*)); 3286 ià(! ty³s ) 3287  - ENOMEM ; 3289 v®ues = `m®loc ( £qËn * (*)); 3290 ià(! v®ues ) { 3291 `ä“ ( ty³s ); 3292  - ENOMEM ; 3295  i = 0; i < £qËn ; i++) { 3296 * d©a = £q ->data; 3297 ty³s [ i ] = & dtd ; 3298 ià( `SDP_IS_UUID ( dtd )) 3299 d©a = &(( uuid_t *)d©a)-> v®ue ; 3300 v®ues [ i ] = d©a ; 3301 £q = seq-> Ãxt ; 3304 d©a£q = `sdp_£q_®loc ( ty³s , v®ues , £qËn ); 3305 ià(! d©a£q ) { 3306 `ä“ ( ty³s ); 3307 `ä“ ( v®ues ); 3308  - ENOMEM ; 3311 `mem£t (& buf , 0, ( sdp_buf_t )); 3312 `sdp_g’_bufãr (& buf , d©a£q ); 3313 buf . d©a = `m®loc (buf. buf_size ); 3315 ià(! buf . d©a ) { 3316 `sdp_d©a_ä“ ( d©a£q ); 3317 `ä“ ( ty³s ); 3318 `ä“ ( v®ues ); 3319  - ENOMEM ; 3322 `SDPDBG ("D©¨Seq : 0x%p", £q ); 3323 £qËn = `sdp_g’_pdu (& buf , d©a£q ); 3324 `SDPDBG ("CÝyšg : %d", buf . d©a_size ); 3325 `memýy ( d¡ , buf . d©a , buf. d©a_size ); 3327 `sdp_d©a_ä“ ( d©a£q ); 3329 `ä“ ( ty³s ); 3330 `ä“ ( v®ues ); 3331 `ä“ ( buf . d©a ); 3332  £qËn ; 3333 } } 3335  $g’_£¬ch£q_pdu ( ušt8_t * d¡ , cÚ¡ sdp_li¡_t * £q ) 3337 uuid_t * uuid = £q -> d©a ; 3338  `g’_d©a£q_pdu ( d¡ , £q , uuid -> ty³ ); 3339 } } 3341  $g’_©Œid£q_pdu ( ušt8_t * d¡ , cÚ¡ sdp_li¡_t * £q , ušt8_ˆ d©aTy³ ) 3343  `g’_d©a£q_pdu ( d¡ , £q , d©aTy³ ); 3344 } } 3347 ušt8_t mËngth ; 3348  md©a [16]; 3349 } t__©Œibu‹__ (( t·cked )è tsdp_c¡©e_t ; 3351  $cÝy_c¡©e ( ušt8_t * pd©a ,  pd©a_Ën , cÚ¡ sdp_c¡©e_t * c¡©e ) 3353 ià( c¡©e ) { 3354 ušt8_t Ën = c¡©e -> Ëngth ; 3355 ià( Ën >ð pd©a_Ën ) { 3356 `SDPERR ("Continuation state sizeƒxceeds internal buffer"); 3357 Ën = pd©a_Ën - 1; 3359 * pd©a ++ = Ën ; 3360 `memýy ( pd©a , c¡©e -> d©a , Ën ); 3361  Ën + 1; 3363 * pd©a = 0; 3365 } } 3396  $sdp_£rviû_£¬ch_»q ( sdp_£ssiÚ_t * £ssiÚ , cÚ¡ sdp_li¡_t * £¬ch , 3397 ušt16_t max_»c_num , sdp_li¡_t ** r¥ ) 3399  ¡©us = 0; 3400 ušt32_t »qsize = 0, _»qsize ; 3401 ušt32_t r¥size = 0, r¥Ën ; 3402  £qËn = 0; 3403  »c_couÁ ; 3404  sÿÂed , pd©a_Ën ; 3405 ušt8_t * pd©a , * _pd©a ; 3406 ušt8_t * »qbuf , * r¥buf ; 3407 sdp_pdu_hdr_t * »qhdr , * r¥hdr ; 3408 sdp_c¡©e_t * c¡©e = NULL ; 3410 »qbuf = `m®loc ( SDP_REQ_BUFFER_SIZE ); 3411 r¥buf = `m®loc ( SDP_RSP_BUFFER_SIZE ); 3412 ià(! »qbuf || ! r¥buf ) { 3413 ”ºo = ENOMEM ; 3414 ¡©us = -1; 3415  ’d ; 3417 »qhdr = ( sdp_pdu_hdr_t *è »qbuf ; 3418 »qhdr -> pdu_id = SDP_SVC_SEARCH_REQ ; 3419 pd©a = »qbuf + ( sdp_pdu_hdr_t ); 3420 »qsize = ( sdp_pdu_hdr_t ); 3423 £qËn = `g’_£¬ch£q_pdu ( pd©a , £¬ch ); 3425 `SDPDBG ("D©¨£q‡dded : %d", £qËn ); 3428 »qsize +ð £qËn ; 3429 pd©a +ð £qËn ; 3432 `bt_put_be16 ( max_»c_num , pd©a ); 3433 »qsize +ð( ušt16_t ); 3434 pd©a +ð( ušt16_t ); 3436 _»qsize = »qsize ; 3437 _pd©a = pd©a ; 3438 * r¥ = NULL ; 3442 »qsize = _»qsize + `cÝy_c¡©e ( _pd©a , 3443 SDP_REQ_BUFFER_SIZE - _»qsize , c¡©e ); 3446 »qhdr -> ¶’ = `htÚs ( »qsize - ( sdp_pdu_hdr_t )); 3448 »qhdr -> tid = `htÚs ( `sdp_g’_tid ( £ssiÚ )); 3453 ¡©us = `sdp_£nd_»q_w4_r¥ ( £ssiÚ , »qbuf , r¥buf , »qsize , & r¥size ); 3454 ià( ¡©us < 0) 3455  ’d ; 3457 ià( r¥size < ( sdp_pdu_hdr_t )) { 3458 `SDPERR ("Unexpectedƒnd of…acket"); 3459 ¡©us = -1; 3460  ’d ; 3463 r¥hdr = ( sdp_pdu_hdr_t *è r¥buf ; 3464 r¥Ën = `Áohs ( r¥hdr -> ¶’ ); 3466 ià( r¥hdr -> pdu_id =ð SDP_ERROR_RSP ) { 3467 `SDPDBG ("Stu : 0x%x", r¥hdr -> pdu_id ); 3468 ¡©us = -1; 3469  ’d ; 3471 sÿÂed = 0; 3472 pd©a = r¥buf + ( sdp_pdu_hdr_t ); 3473 pd©a_Ën = r¥size - ( sdp_pdu_hdr_t ); 3475 ià( pd©a_Ën < ( ušt16_t ) + (uint16_t)) { 3476 `SDPERR ("Unexpectedƒnd of…acket"); 3477 ¡©us = -1; 3478  ’d ; 3482 pd©a +ð( ušt16_t ); 3483 sÿÂed +ð( ušt16_t ); 3484 pd©a_Ën -ð( ušt16_t ); 3485 »c_couÁ = `bt_g‘_be16 ( pd©a ); 3486 pd©a +ð( ušt16_t ); 3487 sÿÂed +ð( ušt16_t ); 3488 pd©a_Ën -ð( ušt16_t ); 3490 `SDPDBG ("Cu¼’ˆsvøcouÁ: %d", »c_couÁ ); 3491 `SDPDBG ("Re¥Ú£L’gth: %d", r¥Ën ); 3493 ià(! »c_couÁ ) { 3494 ¡©us = -1; 3495  ’d ; 3497 `exŒaù_»cÜd_hªdË_£q ( pd©a , pd©a_Ën , r¥ , »c_couÁ , & sÿÂed ); 3498 `SDPDBG ("By‹sSÿÂed : %d", sÿÂed ); 3500 ià( r¥Ën > sÿÂed ) { 3501 ušt8_t c¡©e_Ën ; 3503 ià( r¥size < ( sdp_pdu_hdr_t è+ sÿÂed + ( ušt8_t )) { 3504 `SDPERR ("Unexpectedƒnd of…acket: continuation state data missing"); 3505 ¡©us = -1; 3506  ’d ; 3509 pd©a = r¥buf + ( sdp_pdu_hdr_t è+ sÿÂed ; 3510 c¡©e_Ën = *( ušt8_t *è pd©a ; 3511 ià( c¡©e_Ën > 0) { 3512 c¡©e = ( sdp_c¡©e_t *) pd©a ; 3513 `SDPDBG ("CÚˆ¡©Ëngth: %d", c¡©e_Ën ); 3515 c¡©e = NULL ; 3517 }  c¡©e ); 3519 ’d : 3520 `ä“ ( »qbuf ); 3521 `ä“ ( r¥buf ); 3523  ¡©us ; 3524 } } 3558 sdp_»cÜd_t * $sdp_£rviû_©Œ_»q ( sdp_£ssiÚ_t * £ssiÚ , ušt32_t hªdË , 3559 sdp_©Œ»q_ty³_t »qty³ , cÚ¡ sdp_li¡_t * ©Œids ) 3561 ušt32_t »qsize = 0, _»qsize ; 3562 ušt32_t r¥size = 0, r¥_couÁ ; 3563  ©Œ_li¡_Ën = 0; 3564  £qËn = 0; 3565  pd©a_Ën ; 3566 ušt8_t * pd©a , * _pd©a ; 3567 ušt8_t * »qbuf , * r¥buf ; 3568 sdp_pdu_hdr_t * »qhdr , * r¥hdr ; 3569 sdp_c¡©e_t * c¡©e = NULL ; 3570 ušt8_t c¡©e_Ën = 0; 3571 sdp_buf_t r¥_cÚÿt_buf ; 3572 sdp_»cÜd_t * »c = 0; 3574 ià( »qty³ !ð SDP_ATTR_REQ_INDIVIDUAL &&„eqty³ !ð SDP_ATTR_REQ_RANGE ) { 3575 ”ºo = EINVAL ; 3576  NULL ; 3579 `mem£t (& r¥_cÚÿt_buf , 0, ( sdp_buf_t )); 3581 »qbuf = `m®loc ( SDP_REQ_BUFFER_SIZE ); 3582 r¥buf = `m®loc ( SDP_RSP_BUFFER_SIZE ); 3583 ià(! »qbuf || ! r¥buf ) { 3584 ”ºo = ENOMEM ; 3585  ’d ; 3587 »qhdr = ( sdp_pdu_hdr_t *è »qbuf ; 3588 »qhdr -> pdu_id = SDP_SVC_ATTR_REQ ; 3590 pd©a = »qbuf + ( sdp_pdu_hdr_t ); 3591 »qsize = ( sdp_pdu_hdr_t ); 3594 `bt_put_be32 ( hªdË , pd©a ); 3595 »qsize +ð( ušt32_t ); 3596 pd©a +ð( ušt32_t ); 3599 `bt_put_be16 (65535, pd©a ); 3600 »qsize +ð( ušt16_t ); 3601 pd©a +ð( ušt16_t ); 3604 £qËn = `g’_©Œid£q_pdu ( pd©a , ©Œids , 3605 »qty³ =ð SDP_ATTR_REQ_INDIVIDUAL ? SDP_UINT16 : SDP_UINT32 ); 3606 ià( £qËn == -1) { 3607 ”ºo = EINVAL ; 3608  ’d ; 3610 pd©a +ð £qËn ; 3611 »qsize +ð £qËn ; 3612 `SDPDBG ("A‰¸li¡†’gth : %d", £qËn ); 3615 _pd©a = pd©a ; 3616 _»qsize = »qsize ; 3619  ¡©us ; 3622 »qsize = _»qsize + `cÝy_c¡©e ( _pd©a , 3623 SDP_REQ_BUFFER_SIZE - _»qsize , c¡©e ); 3626 »qhdr -> tid = `htÚs ( `sdp_g’_tid ( £ssiÚ )); 3627 »qhdr -> ¶’ = `htÚs ( »qsize - ( sdp_pdu_hdr_t )); 3629 ¡©us = `sdp_£nd_»q_w4_r¥ ( £ssiÚ , »qbuf , r¥buf , »qsize , & r¥size ); 3630 ià( ¡©us < 0) 3631  ’d ; 3633 ià( r¥size < ( sdp_pdu_hdr_t )) { 3634 `SDPERR ("Unexpectedƒnd of…acket"); 3635  ’d ; 3638 r¥hdr = ( sdp_pdu_hdr_t *è r¥buf ; 3639 ià( r¥hdr -> pdu_id =ð SDP_ERROR_RSP ) { 3640 `SDPDBG ("PDU ID : 0x%x", r¥hdr -> pdu_id ); 3641  ’d ; 3643 pd©a = r¥buf + ( sdp_pdu_hdr_t ); 3644 pd©a_Ën = r¥size - ( sdp_pdu_hdr_t ); 3646 ià( pd©a_Ën < ( ušt16_t )) { 3647 `SDPERR ("Unexpectedƒnd of…acket"); 3648  ’d ; 3651 r¥_couÁ = `bt_g‘_be16 ( pd©a ); 3652 ©Œ_li¡_Ën +ð r¥_couÁ ; 3653 pd©a +ð( ušt16_t ); 3654 pd©a_Ën -ð( ušt16_t ); 3660 ià( pd©a_Ën < r¥_couÁ + ( ušt8_t )) { 3661 `SDPERR ("Unexpectedƒnd of…acket: continuation state data missing"); 3662  ’d ; 3664 c¡©e_Ën = *( ušt8_t *è( pd©a + r¥_couÁ ); 3666 `SDPDBG ("Re¥Ú£ id : %d", r¥hdr -> pdu_id ); 3667 `SDPDBG ("A‰¾i¡ by‹ couÁ : %d", r¥_couÁ ); 3668 `SDPDBG ("sdp_c¡©e_ˆËngth : %d", c¡©e_Ën ); 3674 ià( c¡©e_Ën > 0 || r¥_cÚÿt_buf . d©a_size != 0) { 3675 ušt8_t * rg‘PŒ = NULL ; 3677 c¡©e = c¡©e_Ën > 0 ? ( sdp_c¡©e_t *è( pd©a + r¥_couÁ ) : 0; 3680 r¥_cÚÿt_buf . d©a = `»®loc Ô¥_cÚÿt_buf.d©a,„¥_cÚÿt_buf. d©a_size + r¥_couÁ ); 3681 r¥_cÚÿt_buf . buf_size =„¥_cÚÿt_buf. d©a_size + r¥_couÁ ; 3682 rg‘PŒ = r¥_cÚÿt_buf . d©a +„¥_cÚÿt_buf. d©a_size ; 3683 `memýy ( rg‘PŒ , pd©a , r¥_couÁ ); 3684 r¥_cÚÿt_buf . d©a_size +ð r¥_couÁ ; 3686 }  c¡©e ); 3688 ià( ©Œ_li¡_Ën > 0) { 3689  sÿÂed = 0; 3690 ià( r¥_cÚÿt_buf . d©a_size != 0) { 3691 pd©a = r¥_cÚÿt_buf . d©a ; 3692 pd©a_Ën = r¥_cÚÿt_buf . d©a_size ; 3694 »c = `sdp_exŒaù_pdu ( pd©a , pd©a_Ën , & sÿÂed ); 3697 ’d : 3698 `ä“ ( »qbuf ); 3699 `ä“ ( r¥_cÚÿt_buf . d©a ); 3700 `ä“ ( r¥buf ); 3701  »c ; 3702 } } 3707  ssdp_Œª§ùiÚ { 3708 sdp_ÿÎback_t * mcb ; 3709 * mud©a ; 3710 ušt8_t * m»qbuf ; 3711 sdp_buf_t mr¥_cÚÿt_buf ; 3712 ušt32_t m»qsize ; 3713  m”r ; 3726 sdp_£ssiÚ_t * $sdp_ü—‹ ( sk , ušt32_t æags ) 3728 sdp_£ssiÚ_t * £ssiÚ ; 3729  sdp_Œª§ùiÚ * t ; 3731 £ssiÚ = `m®loc (( sdp_£ssiÚ_t )); 3732 ià(! £ssiÚ ) { 3733 ”ºo = ENOMEM ; 3734  NULL ; 3736 `mem£t ( £ssiÚ , 0, (*session)); 3738 £ssiÚ -> æags = flags; 3739 £ssiÚ -> sock = sk ; 3741 t = `m®loc (( sdp_Œª§ùiÚ )); 3742 ià(! t ) { 3743 ”ºo = ENOMEM ; 3744 `ä“ ( £ssiÚ ); 3745  NULL ; 3747 `mem£t ( t , 0, (*t)); 3749 £ssiÚ -> ´iv = t ; 3751  £ssiÚ ; 3752 } } 3770  $sdp_£t_nÙify ( sdp_£ssiÚ_t * £ssiÚ , sdp_ÿÎback_t * func , * ud©a ) 3772  sdp_Œª§ùiÚ * t ; 3774 ià(! £ssiÚ || !£ssiÚ-> ´iv ) 3777 t = £ssiÚ -> ´iv ; 3778 t -> cb = func ; 3779 t -> ud©a = udata; 3782 } } 3811  $sdp_£rviû_£¬ch_async ( sdp_£ssiÚ_t * £ssiÚ , cÚ¡ sdp_li¡_t * £¬ch , ušt16_t max_»c_num ) 3813  sdp_Œª§ùiÚ * t ; 3814 sdp_pdu_hdr_t * »qhdr ; 3815 ušt8_t * pd©a ; 3816  c¡©e_Ën , £qËn = 0; 3818 ià(! £ssiÚ || !£ssiÚ-> ´iv ) 3821 t = £ssiÚ -> ´iv ; 3824 `ä“ ( t -> r¥_cÚÿt_buf . d©a ); 3825 `mem£t (& t -> r¥_cÚÿt_buf , 0, ( sdp_buf_t )); 3827 ià(! t -> »qbuf ) { 3828 t -> »qbuf = `m®loc ( SDP_REQ_BUFFER_SIZE ); 3829 ià(! t -> »qbuf ) { 3830 t -> ”r = ENOMEM ; 3831  ’d ; 3834 `mem£t ( t -> »qbuf , 0, SDP_REQ_BUFFER_SIZE ); 3836 »qhdr = ( sdp_pdu_hdr_t *è t -> »qbuf ; 3837 »qhdr -> tid = `htÚs ( `sdp_g’_tid ( £ssiÚ )); 3838 »qhdr -> pdu_id = SDP_SVC_SEARCH_REQ ; 3841 pd©a = t -> »qbuf + ( sdp_pdu_hdr_t ); 3842 t -> »qsize = ( sdp_pdu_hdr_t ); 3845 £qËn = `g’_£¬ch£q_pdu ( pd©a , £¬ch ); 3847 `SDPDBG ("D©¨£q‡dded : %d", £qËn ); 3850 t -> »qsize +ð £qËn ; 3851 pd©a +ð £qËn ; 3853 `bt_put_be16 ( max_»c_num , pd©a ); 3854 t -> »qsize +ð( ušt16_t ); 3855 pd©a +ð( ušt16_t ); 3858 c¡©e_Ën = `cÝy_c¡©e ( pd©a , SDP_REQ_BUFFER_SIZE - t -> »qsize , NULL ); 3859 »qhdr -> ¶’ = `htÚs (( t -> »qsize + c¡©e_Ën è- ( sdp_pdu_hdr_t )); 3861 ià( `sdp_£nd_»q ( £ssiÚ , t -> »qbuf ,-> »qsize + c¡©e_Ën ) < 0) { 3862 `SDPERR ("Error sending data:%m"); 3863 t -> ”r = ”ºo ; 3864  ’d ; 3868 ’d : 3870 `ä“ ( t -> »qbuf ); 3871 t -> »qbuf = NULL ; 3874 } } 3912  $sdp_£rviû_©Œ_async ( sdp_£ssiÚ_t * £ssiÚ , ušt32_t hªdË , sdp_©Œ»q_ty³_t »qty³ , cÚ¡ sdp_li¡_t * ©Œid_li¡ ) 3914  sdp_Œª§ùiÚ * t ; 3915 sdp_pdu_hdr_t * »qhdr ; 3916 ušt8_t * pd©a ; 3917  c¡©e_Ën , £qËn = 0; 3919 ià(! £ssiÚ || !£ssiÚ-> ´iv ) 3922 t = £ssiÚ -> ´iv ; 3925 `ä“ ( t -> r¥_cÚÿt_buf . d©a ); 3926 `mem£t (& t -> r¥_cÚÿt_buf , 0, ( sdp_buf_t )); 3928 ià(! t -> »qbuf ) { 3929 t -> »qbuf = `m®loc ( SDP_REQ_BUFFER_SIZE ); 3930 ià(! t -> »qbuf ) { 3931 t -> ”r = ENOMEM ; 3932  ’d ; 3935 `mem£t ( t -> »qbuf , 0, SDP_REQ_BUFFER_SIZE ); 3937 »qhdr = ( sdp_pdu_hdr_t *è t -> »qbuf ; 3938 »qhdr -> tid = `htÚs ( `sdp_g’_tid ( £ssiÚ )); 3939 »qhdr -> pdu_id = SDP_SVC_ATTR_REQ ; 3942 pd©a = t -> »qbuf + ( sdp_pdu_hdr_t ); 3943 t -> »qsize = ( sdp_pdu_hdr_t ); 3946 `bt_put_be32 ( hªdË , pd©a ); 3947 t -> »qsize +ð( ušt32_t ); 3948 pd©a +ð( ušt32_t ); 3951 `bt_put_be16 (65535, pd©a ); 3952 t -> »qsize +ð( ušt16_t ); 3953 pd©a +ð( ušt16_t ); 3956 £qËn = `g’_©Œid£q_pdu ( pd©a , ©Œid_li¡ , 3957 »qty³ =ð SDP_ATTR_REQ_INDIVIDUAL ? SDP_UINT16 : SDP_UINT32 ); 3958 ià( £qËn == -1) { 3959 t -> ”r = EINVAL ; 3960  ’d ; 3964 t -> »qsize +ð £qËn ; 3965 pd©a +ð £qËn ; 3966 `SDPDBG ("A‰¸li¡†’gth : %d", £qËn ); 3969 c¡©e_Ën = `cÝy_c¡©e ( pd©a , SDP_REQ_BUFFER_SIZE - t -> »qsize , NULL ); 3970 »qhdr -> ¶’ = `htÚs (( t -> »qsize + c¡©e_Ën è- ( sdp_pdu_hdr_t )); 3972 ià( `sdp_£nd_»q ( £ssiÚ , t -> »qbuf ,-> »qsize + c¡©e_Ën ) < 0) { 3973 `SDPERR ("Error sending data:%m"); 3974 t -> ”r = ”ºo ; 3975  ’d ; 3979 ’d : 3981 `ä“ ( t -> »qbuf ); 3982 t -> »qbuf = NULL ; 3985 } } 4024  $sdp_£rviû_£¬ch_©Œ_async ( sdp_£ssiÚ_t * £ssiÚ , cÚ¡ sdp_li¡_t * £¬ch , sdp_©Œ»q_ty³_t »qty³ , cÚ¡ sdp_li¡_ˆ* ©Œid_li¡ ) 4026  sdp_Œª§ùiÚ * t ; 4027 sdp_pdu_hdr_t * »qhdr ; 4028 ušt8_t * pd©a ; 4029  c¡©e_Ën , £qËn = 0; 4031 ià(! £ssiÚ || !£ssiÚ-> ´iv ) 4034 t = £ssiÚ -> ´iv ; 4037 `ä“ ( t -> r¥_cÚÿt_buf . d©a ); 4038 `mem£t (& t -> r¥_cÚÿt_buf , 0, ( sdp_buf_t )); 4040 ià(! t -> »qbuf ) { 4041 t -> »qbuf = `m®loc ( SDP_REQ_BUFFER_SIZE ); 4042 ià(! t -> »qbuf ) { 4043 t -> ”r = ENOMEM ; 4044  ’d ; 4047 `mem£t ( t -> »qbuf , 0, SDP_REQ_BUFFER_SIZE ); 4049 »qhdr = ( sdp_pdu_hdr_t *è t -> »qbuf ; 4050 »qhdr -> tid = `htÚs ( `sdp_g’_tid ( £ssiÚ )); 4051 »qhdr -> pdu_id = SDP_SVC_SEARCH_ATTR_REQ ; 4054 pd©a = t -> »qbuf + ( sdp_pdu_hdr_t ); 4055 t -> »qsize = ( sdp_pdu_hdr_t ); 4058 £qËn = `g’_£¬ch£q_pdu ( pd©a , £¬ch ); 4060 `SDPDBG ("D©¨£q‡dded : %d", £qËn ); 4063 t -> »qsize +ð £qËn ; 4064 pd©a +ð £qËn ; 4066 `bt_put_be16 ( SDP_MAX_ATTR_LEN , pd©a ); 4067 t -> »qsize +ð( ušt16_t ); 4068 pd©a +ð( ušt16_t ); 4070 `SDPDBG ("Max‡‰¸by‹ couÁ : %d", SDP_MAX_ATTR_LEN ); 4073 £qËn = `g’_©Œid£q_pdu ( pd©a , ©Œid_li¡ , 4074 »qty³ =ð SDP_ATTR_REQ_INDIVIDUAL ? SDP_UINT16 : SDP_UINT32 ); 4075 ià( £qËn == -1) { 4076 t -> ”r = EINVAL ; 4077  ’d ; 4080 pd©a +ð £qËn ; 4081 `SDPDBG ("A‰¸li¡†’gth : %d", £qËn ); 4082 t -> »qsize +ð £qËn ; 4085 c¡©e_Ën = `cÝy_c¡©e ( pd©a , SDP_REQ_BUFFER_SIZE - t -> »qsize , NULL ); 4086 »qhdr -> ¶’ = `htÚs (( t -> »qsize + c¡©e_Ën è- ( sdp_pdu_hdr_t )); 4088 ià( `sdp_£nd_»q ( £ssiÚ , t -> »qbuf ,-> »qsize + c¡©e_Ën ) < 0) { 4089 `SDPERR ("Error sending data:%m"); 4090 t -> ”r = ”ºo ; 4091  ’d ; 4095 ’d : 4097 `ä“ ( t -> »qbuf ); 4098 t -> »qbuf = NULL ; 4101 } } 4119  $sdp_g‘_”rÜ ( sdp_£ssiÚ_t * £ssiÚ ) 4121  sdp_Œª§ùiÚ * t ; 4123 ià(! £ssiÚ || !£ssiÚ-> ´iv ) { 4124 `SDPERR ("Invalid session"); 4128 t = £ssiÚ -> ´iv ; 4130  t -> ”r ; 4131 } } 4146  $sdp_´oûss ( sdp_£ssiÚ_t * £ssiÚ ) 4148  sdp_Œª§ùiÚ * t ; 4149 sdp_pdu_hdr_t * »qhdr , * r¥hdr ; 4150 sdp_c¡©e_t * pc¡©e ; 4151 ušt8_t * pd©a , * r¥buf , * rg‘PŒ ; 4152  r¥_couÁ , ”r = -1; 4153 size_t size = 0; 4154  n , ¶’ ; 4155 ušt16_t ¡©us = 0xffff; 4156 ušt8_t pdu_id = 0x00; 4158 ià(! £ssiÚ || !£ssiÚ-> ´iv ) { 4159 `SDPERR ("Invalid session"); 4163 r¥buf = `m®loc ( SDP_RSP_BUFFER_SIZE ); 4164 ià(! r¥buf ) { 4165 `SDPERR ("Re¥Ú£ buf㸮loøçžu»:%m (%d)", ”ºo ); 4169 `mem£t ( r¥buf , 0, SDP_RSP_BUFFER_SIZE ); 4171 t = £ssiÚ -> ´iv ; 4172 »qhdr = ( sdp_pdu_hdr_t *) t -> »qbuf ; 4173 r¥hdr = ( sdp_pdu_hdr_t *) r¥buf ; 4175 pd©a = r¥buf + ( sdp_pdu_hdr_t ); 4177 n = `sdp_»ad_r¥ ( £ssiÚ , r¥buf , SDP_RSP_BUFFER_SIZE ); 4178 ià( n < 0) { 4179 `SDPERR ("R—d„e¥Ú£:%m (%d)", ”ºo ); 4180 t -> ”r = ”ºo ; 4181  ’d ; 4184 ià( »qhdr -> tid !ð r¥hdr ->tid) { 4185 t -> ”r = EPROTO ; 4186 `SDPERR ("Protocolƒrror:ransaction id does‚ot match"); 4187  ’d ; 4190 ià( n !ð(è( `Áohs ( r¥hdr -> ¶’ è+ ( sdp_pdu_hdr_t ))) { 4191 t -> ”r = EPROTO ; 4192 `SDPERR ("Protocolƒrror: invalid†ength"); 4193  ’d ; 4196 pdu_id = r¥hdr ->pdu_id; 4197  r¥hdr -> pdu_id ) { 4198 ušt8_t * s¤_pd©a ; 4199 ušt16_t t¤c , c¤c ; 4200  SDP_SVC_SEARCH_RSP : 4205 s¤_pd©a = pd©a ; 4206 t¤c = `bt_g‘_be16 ( s¤_pd©a ); 4207 s¤_pd©a +ð( ušt16_t ); 4208 c¤c = `bt_g‘_be16 ( s¤_pd©a ); 4211 ià( c¤c > t¤c ) { 4212 t -> ”r = EPROTO ; 4213 `SDPERR ("Protocolƒrror: wrong current service„ecord count value."); 4214  ’d ; 4217 `SDPDBG ("TÙ® svøcouÁ: %d", t¤c ); 4218 `SDPDBG ("Cu¼’ˆsvøcouÁ: %d", c¤c ); 4221 ¶’ = ( t¤c è+ ( c¤c ) + csrc * 4; 4223 ià( t -> r¥_cÚÿt_buf . d©a_size == 0) { 4225 r¥_couÁ = ( t¤c è+ ( c¤c ) + csrc * 4; 4226 } ià( t -> r¥_cÚÿt_buf . d©a_size >ð( ušt16_t ) * 2) { 4228 ušt8_t * pc¤c = t -> r¥_cÚÿt_buf . d©a + 2; 4229 ušt16_t tc¤c , tc¤c2 ; 4233 pd©a +ð( ušt16_t ); 4236 `memýy (& tc¤c , pc¤c , (tcsrc)); 4237 `memýy (& tc¤c2 , pd©a , (tcsrc2)); 4238 tc¤c +ð tc¤c2 ; 4239 `memýy ( pc¤c , & tc¤c , (tcsrc)); 4241 pd©a +ð( ušt16_t ); 4242 r¥_couÁ = c¤c * 4; 4244 t -> ”r = EPROTO ; 4245 `SDPERR ("Protocolƒrror: invalid PDU size"); 4246 ¡©us = SDP_INVALID_PDU_SIZE ; 4247  ’d ; 4249 ¡©us = 0x0000; 4251  SDP_SVC_ATTR_RSP : 4252  SDP_SVC_SEARCH_ATTR_RSP : 4253 r¥_couÁ = `bt_g‘_be16 ( pd©a ); 4254 `SDPDBG ("A‰¾i¡ by‹ couÁ : %d", r¥_couÁ ); 4257 ià( t -> r¥_cÚÿt_buf . d©a_size =ð0 && r¥_couÁ < 0x0002) { 4258 t -> ”r = EPROTO ; 4259 `SDPERR ("Protocolƒrror: invalid AttrList size"); 4260 ¡©us = SDP_INVALID_PDU_SIZE ; 4261  ’d ; 4268 ¶’ = ( ušt16_t è+ r¥_couÁ ; 4270 pd©a +ð( ušt16_t ); 4271 ¡©us = 0x0000; 4273  SDP_ERROR_RSP : 4274 ¡©us = `bt_g‘_be16 ( pd©a ); 4275 size = `Áohs ( r¥hdr -> ¶’ ); 4277  ’d ; 4279 t -> ”r = EPROTO ; 4280 `SDPERR ("IÎeg® PDU ID: 0x%x", r¥hdr -> pdu_id ); 4281  ’d ; 4288 ià(( n - (è( sdp_pdu_hdr_t )è< ¶’ + 1) { 4289 t -> ”r = EPROTO ; 4290 `SDPERR ("Protocolƒrror: invalid PDU size"); 4291 ¡©us = SDP_INVALID_PDU_SIZE ; 4292  ’d ; 4295 pc¡©e = ( sdp_c¡©e_t *è( pd©a + r¥_couÁ ); 4297 `SDPDBG ("C¡©Ëngth : %d", pc¡©e -> Ëngth ); 4303 ià(( n - (è( sdp_pdu_hdr_t )è!ð( ¶’ + pc¡©e -> Ëngth + 1)) { 4304 t -> ”r = EPROTO ; 4305 `SDPERR ("Protocolƒrror: wrong PDU size."); 4306 ¡©us = 0xffff; 4307  ’d ; 4314 t -> r¥_cÚÿt_buf . d©a = `»®loc Ñ->r¥_cÚÿt_buf.d©a,->r¥_cÚÿt_buf. d©a_size + r¥_couÁ ); 4315 rg‘PŒ = t -> r¥_cÚÿt_buf . d©a +->r¥_cÚÿt_buf. d©a_size ; 4316 t -> r¥_cÚÿt_buf . buf_size =->r¥_cÚÿt_buf. d©a_size + r¥_couÁ ; 4317 `memýy ( rg‘PŒ , pd©a , r¥_couÁ ); 4318 t -> r¥_cÚÿt_buf . d©a_size +ð r¥_couÁ ; 4320 ià( pc¡©e -> Ëngth > 0) { 4321  »qsize , c¡©e_Ën ; 4323 »qhdr -> tid = `htÚs ( `sdp_g’_tid ( £ssiÚ )); 4326 c¡©e_Ën = `cÝy_c¡©e ( t -> »qbuf +-> »qsize , 4327 SDP_REQ_BUFFER_SIZE - t -> »qsize , pc¡©e ); 4329 »qsize = t ->»qsiz+ c¡©e_Ën ; 4332 »qhdr -> ¶’ = `htÚs ( »qsize - ( sdp_pdu_hdr_t )); 4334 ià( `sdp_£nd_»q ( £ssiÚ , t -> »qbuf , »qsize ) < 0) { 4335 `SDPERR ("E¼Ü s’dšg d©a:%m(%d)", ”ºo ); 4336 ¡©us = 0xffff; 4337 t -> ”r = ”ºo ; 4338  ’d ; 4340 ”r = 0; 4343 ’d : 4344 ià( ”r ) { 4345 ià( t -> r¥_cÚÿt_buf . d©a_size != 0) { 4346 pd©a = t -> r¥_cÚÿt_buf . d©a ; 4347 size = t -> r¥_cÚÿt_buf . d©a_size ; 4349 ià( t -> cb ) 4350 t -> `cb ( pdu_id , ¡©us , pd©a , size ,-> ud©a ); 4353 `ä“ ( r¥buf ); 4355  ”r ; 4356 } } 4399  $sdp_£rviû_£¬ch_©Œ_»q ( sdp_£ssiÚ_t * £ssiÚ , cÚ¡ sdp_li¡_t * £¬ch , sdp_©Œ»q_ty³_t »qty³ , cÚ¡ sdp_li¡_ˆ* ©Œids , sdp_li¡_ˆ** r¥ ) 4401  ¡©us = 0; 4402 ušt32_t »qsize = 0, _»qsize ; 4403 ušt32_t r¥size = 0; 4404  £qËn = 0, ©Œ_li¡_Ën = 0; 4405  r¥_couÁ = 0, c¡©e_Ën = 0; 4406  pd©a_Ën ; 4407 ušt8_t * pd©a , * _pd©a ; 4408 ušt8_t * »qbuf , * r¥buf ; 4409 sdp_pdu_hdr_t * »qhdr , * r¥hdr ; 4410 ušt8_t d©aTy³ ; 4411 sdp_li¡_t * »c_li¡ = NULL ; 4412 sdp_buf_t r¥_cÚÿt_buf ; 4413 sdp_c¡©e_t * c¡©e = NULL ; 4415 ià( »qty³ !ð SDP_ATTR_REQ_INDIVIDUAL &&„eqty³ !ð SDP_ATTR_REQ_RANGE ) { 4416 ”ºo = EINVAL ; 4420 `mem£t (& r¥_cÚÿt_buf , 0, ( sdp_buf_t )); 4422 »qbuf = `m®loc ( SDP_REQ_BUFFER_SIZE ); 4423 r¥buf = `m®loc ( SDP_RSP_BUFFER_SIZE ); 4424 ià(! »qbuf || ! r¥buf ) { 4425 ”ºo = ENOMEM ; 4426 ¡©us = -1; 4427  ’d ; 4430 »qhdr = ( sdp_pdu_hdr_t *è »qbuf ; 4431 »qhdr -> pdu_id = SDP_SVC_SEARCH_ATTR_REQ ; 4434 pd©a = »qbuf + ( sdp_pdu_hdr_t ); 4435 »qsize = ( sdp_pdu_hdr_t ); 4438 £qËn = `g’_£¬ch£q_pdu ( pd©a , £¬ch ); 4439 ià( £qËn < 0) { 4440 ”ºo = EINVAL ; 4441 ¡©us = -1; 4442  ’d ; 4445 `SDPDBG ("D©¨£q‡dded : %d", £qËn ); 4448 »qsize +ð £qËn ; 4449 pd©a +ð £qËn ; 4451 `bt_put_be16 ( SDP_MAX_ATTR_LEN , pd©a ); 4452 »qsize +ð( ušt16_t ); 4453 pd©a +ð( ušt16_t ); 4455 `SDPDBG ("Max‡‰¸by‹ couÁ : %d", SDP_MAX_ATTR_LEN ); 4458 £qËn = `g’_©Œid£q_pdu ( pd©a , ©Œids , 4459 »qty³ =ð SDP_ATTR_REQ_INDIVIDUAL ? SDP_UINT16 : SDP_UINT32 ); 4460 ià( £qËn == -1) { 4461 ”ºo = EINVAL ; 4462 ¡©us = -1; 4463  ’d ; 4465 pd©a +ð £qËn ; 4466 `SDPDBG ("A‰¸li¡†’gth : %d", £qËn ); 4467 »qsize +ð £qËn ; 4468 * r¥ = 0; 4471 _pd©a = pd©a ; 4472 _»qsize = »qsize ; 4475 »qhdr -> tid = `htÚs ( `sdp_g’_tid ( £ssiÚ )); 4478 »qsize = _»qsize + `cÝy_c¡©e ( _pd©a , 4479 SDP_REQ_BUFFER_SIZE - _»qsize , c¡©e ); 4482 »qhdr -> ¶’ = `htÚs ( »qsize - ( sdp_pdu_hdr_t )); 4483 r¥hdr = ( sdp_pdu_hdr_t *è r¥buf ; 4484 ¡©us = `sdp_£nd_»q_w4_r¥ ( £ssiÚ , »qbuf , r¥buf , »qsize , & r¥size ); 4485 ià( r¥size < ( sdp_pdu_hdr_t )) { 4486 `SDPERR ("Unexpectedƒnd of…acket"); 4487 ¡©us = -1; 4488  ’d ; 4491 ià( ¡©us < 0) { 4492 `SDPDBG ("Stu : 0x%x", r¥hdr -> pdu_id ); 4493  ’d ; 4496 ià( r¥hdr -> pdu_id =ð SDP_ERROR_RSP ) { 4497 ¡©us = -1; 4498  ’d ; 4501 pd©a = r¥buf + ( sdp_pdu_hdr_t ); 4502 pd©a_Ën = r¥size - ( sdp_pdu_hdr_t ); 4504 ià( pd©a_Ën < ( ušt16_t )) { 4505 `SDPERR ("Unexpectedƒnd of…acket"); 4506 ¡©us = -1; 4507  ’d ; 4510 r¥_couÁ = `bt_g‘_be16 ( pd©a ); 4511 ©Œ_li¡_Ën +ð r¥_couÁ ; 4512 pd©a +ð( ušt16_t ); 4513 pd©a_Ën -ð( ušt16_t ); 4515 ià( pd©a_Ën < r¥_couÁ + ( ušt8_t )) { 4516 `SDPERR ("Unexpectedƒnd of…acket: continuation state data missing"); 4517 ¡©us = -1; 4518  ’d ; 4521 c¡©e_Ën = *( ušt8_t *è( pd©a + r¥_couÁ ); 4523 `SDPDBG ("A‰¾i¡ by‹ couÁ : %d", ©Œ_li¡_Ën ); 4524 `SDPDBG ("Re¥Ú£ by‹ couÁ : %d", r¥_couÁ ); 4525 `SDPDBG ("C¡©Ëngth : %d", c¡©e_Ën ); 4530 ià( c¡©e_Ën > 0 || r¥_cÚÿt_buf . d©a_size != 0) { 4531 ušt8_t * rg‘PŒ = NULL ; 4533 c¡©e = c¡©e_Ën > 0 ? ( sdp_c¡©e_t *è( pd©a + r¥_couÁ ) : 0; 4536 r¥_cÚÿt_buf . d©a = `»®loc Ô¥_cÚÿt_buf.d©a,„¥_cÚÿt_buf. d©a_size + r¥_couÁ ); 4537 rg‘PŒ = r¥_cÚÿt_buf . d©a +„¥_cÚÿt_buf. d©a_size ; 4538 r¥_cÚÿt_buf . buf_size =„¥_cÚÿt_buf. d©a_size + r¥_couÁ ; 4539 `memýy ( rg‘PŒ , pd©a , r¥_couÁ ); 4540 r¥_cÚÿt_buf . d©a_size +ð r¥_couÁ ; 4542 }  c¡©e ); 4544 ià( ©Œ_li¡_Ën > 0) { 4545  sÿÂed = 0; 4547 ià( r¥_cÚÿt_buf . d©a_size != 0) { 4548 pd©a = r¥_cÚÿt_buf . d©a ; 4549 pd©a_Ën = r¥_cÚÿt_buf . d©a_size ; 4557 sÿÂed = `sdp_exŒaù_£qty³ ( pd©a , pd©a_Ën , & d©aTy³ , & £qËn ); 4559 `SDPDBG ("By‹ sÿÂed : %d", sÿÂed ); 4560 `SDPDBG ("Seq†’gth : %d", £qËn ); 4562 ià( sÿÂed && £qËn ) { 4563 pd©a +ð sÿÂed ; 4564 pd©a_Ën -ð sÿÂed ; 4566  »csize = 0; 4567 sdp_»cÜd_t * »c = `sdp_exŒaù_pdu ( pd©a , pd©a_Ën , & »csize ); 4568 ià( »c =ð NULL ) { 4569 `SDPERR ("SVC REC is‚ull"); 4570 ¡©us = -1; 4571  ’d ; 4573 ià(! »csize ) { 4574 `sdp_»cÜd_ä“ ( »c ); 4577 sÿÂed +ð »csize ; 4578 pd©a +ð »csize ; 4579 pd©a_Ën -ð »csize ; 4581 `SDPDBG ("Loø£q†’gth : %d", »csize ); 4582 `SDPDBG ("SvøReøHªdË : 0x%x", »c -> hªdË ); 4583 `SDPDBG ("By‹ sÿÂed : %d", sÿÂed ); 4584 `SDPDBG ("A‰¾i¡ by‹ couÁ : %d", ©Œ_li¡_Ën ); 4585 »c_li¡ = `sdp_li¡_­³nd Ôec_li¡, »c ); 4586 }  sÿÂed < ©Œ_li¡_Ën && pd©a_Ën > 0); 4588 `SDPDBG ("Successful scan of service‡ttr†ists"); 4589 * r¥ = »c_li¡ ; 4592 ’d : 4593 `ä“ ( r¥_cÚÿt_buf . d©a ); 4594 `ä“ ( »qbuf ); 4595 `ä“ ( r¥buf ); 4596  ¡©us ; 4597 } } 4602  $sdp_g’”®_šquœy ( šquœy_šfo * ii ,  num_dev ,  du¿tiÚ , ušt8_t * found ) 4604  n = `hci_šquœy (-1, 10, num_dev , NULL , & ii , 0); 4605 ià( n < 0) { 4606 `SDPERR ("Inquiry failed:%m"); 4609 * found = n ; 4611 } } 4613  $sdp_þo£ ( sdp_£ssiÚ_t * £ssiÚ ) 4615  sdp_Œª§ùiÚ * t ; 4616  »t ; 4618 ià(! £ssiÚ ) 4621 »t = `þo£ ( £ssiÚ -> sock ); 4623 t = £ssiÚ -> ´iv ; 4625 ià( t ) { 4626 `ä“ ( t -> »qbuf ); 4628 `ä“ ( t -> r¥_cÚÿt_buf . d©a ); 4630 `ä“ ( t ); 4632 `ä“ ( £ssiÚ ); 4633  »t ; 4634 } } 4636  šlše  $sdp_is_loÿl (cÚ¡ bdaddr_t * deviû ) 4638  `memcmp ( deviû , BDADDR_LOCAL , ( bdaddr_t )) == 0; 4639 } } 4641  $sdp_cÚÃù_loÿl ( sdp_£ssiÚ_t * £ssiÚ ) 4643  sockaddr_un § ; 4645 £ssiÚ -> sock = `sock‘ ( PF_UNIX , SOCK_STREAM | SOCK_CLOEXEC , 0); 4646 ià( £ssiÚ -> sock < 0) 4648 £ssiÚ -> loÿl = 1; 4650 § . sun_çmžy = AF_UNIX ; 4651 `¡rýy ( § . sun_·th , SDP_UNIX_PATH ); 4653  `cÚÃù ( £ssiÚ -> sock , ( sockaddr *è& § , (sa)); 4654 } } 4656  $£t_l2ÿp_mtu ( sk , ušt16_t mtu ) 4658  l2ÿp_ÝtiÚs l2o ; 4659 sockËn_t Ën ; 4661 `mem£t (& l2o , 0, (l2o)); 4662 Ën = ( l2o ); 4664 ià( `g‘sockÝt ( sk , SOL_L2CAP , L2CAP_OPTIONS , & l2o , & Ën ) < 0) 4667 l2o . imtu = mtu ; 4668 l2o . omtu = mtu ; 4670 ià( `£tsockÝt ( sk , SOL_L2CAP , L2CAP_OPTIONS , & l2o , (l2o)) < 0) 4674 } } 4676  $sdp_cÚÃù_l2ÿp (cÚ¡ bdaddr_t * ¤c , 4677 cÚ¡ bdaddr_t * d¡ , sdp_£ssiÚ_t * £ssiÚ ) 4679 ušt32_t æags = £ssiÚ ->flags; 4680  sockaddr_l2 § ; 4681  sk ; 4682  sockæags = SOCK_SEQPACKET | SOCK_CLOEXEC ; 4684 ià( æags & SDP_NON_BLOCKING ) 4685 sockæags |ð SOCK_NONBLOCK ; 4687 £ssiÚ -> sock = `sock‘ ( PF_BLUETOOTH , sockæags , BTPROTO_L2CAP ); 4688 ià( £ssiÚ -> sock < 0) 4690 £ssiÚ -> loÿl = 0; 4692 sk = £ssiÚ -> sock ; 4694 `mem£t (& § , 0, (sa)); 4696 § . l2_çmžy = AF_BLUETOOTH ; 4697 § . l2_psm = 0; 4699 ià( `bacmp ( ¤c , BDADDR_ANY )) { 4700 § . l2_bdaddr = * ¤c ; 4701 ià( `bšd ( sk , ( sockaddr *è& § , (sa)) < 0) 4705 ià( æags & SDP_WAIT_ON_CLOSE ) { 4706  lšg” l = { . l_Úoff = 1, . l_lšg” = 1 }; 4707 `£tsockÝt ( sk , SOL_SOCKET , SO_LINGER , & l , (l)); 4710 ià(( æags & SDP_LARGE_MTU ) && 4711 `£t_l2ÿp_mtu ( sk , SDP_LARGE_L2CAP_MTU ) < 0) 4714 § . l2_psm = `htobs ( SDP_PSM ); 4715 § . l2_bdaddr = * d¡ ; 4718  »t = `cÚÃù ( sk , ( sockaddr *è& § , (sa)); 4719 ià(! »t ) 4721 ià( »t < 0 && ( æags & SDP_NON_BLOCKING ) && 4722 ( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINPROGRESS )) 4724 }  ”ºo =ð EBUSY && ( æags & SDP_RETRY_IF_BUSY )); 4727 } } 4729 sdp_£ssiÚ_t * $sdp_cÚÃù (cÚ¡ bdaddr_t * ¤c , 4730 cÚ¡ bdaddr_t * d¡ , ušt32_t æags ) 4732 sdp_£ssiÚ_t * £ssiÚ ; 4733  ”r ; 4735 ià(( æags & SDP_RETRY_IF_BUSY è&& (æag & SDP_NON_BLOCKING )) { 4736 ”ºo = EINVAL ; 4737  NULL ; 4740 £ssiÚ = `sdp_ü—‹ (-1, æags ); 4741 ià(! £ssiÚ ) 4742  NULL ; 4744 ià( `sdp_is_loÿl ( d¡ )) { 4745 ià( `sdp_cÚÃù_loÿl ( £ssiÚ ) < 0) 4746  çž ; 4748 ià( `sdp_cÚÃù_l2ÿp ( ¤c , d¡ , £ssiÚ ) < 0) 4749  çž ; 4752  £ssiÚ ; 4754 çž : 4755 ”r = ”ºo ; 4756 ià( £ssiÚ -> sock >= 0) 4757 `þo£ ( £ssiÚ -> sock ); 4758 `ä“ ( £ssiÚ -> ´iv ); 4759 `ä“ ( £ssiÚ ); 4760 ”ºo = ”r ; 4762  NULL ; 4763 } } 4765  $sdp_g‘_sock‘ (cÚ¡ sdp_£ssiÚ_t * £ssiÚ ) 4767  £ssiÚ -> sock ; 4768 } } 4770 ušt16_t $sdp_g’_tid ( sdp_£ssiÚ_t * £ssiÚ ) 4772  £ssiÚ -> tid ++; 4773 } } 4778  $sdp_£t_suµ_ã© ( sdp_»cÜd_t * »c , cÚ¡ sdp_li¡_t * sf ) 4780 cÚ¡ sdp_li¡_t * p , * r ; 4781 sdp_d©a_t * ã© , * £q_ã© ; 4782  £qËn , i ; 4783 ** £qDTDs , ** £qV®s ; 4785 £qËn = `sdp_li¡_Ën ( sf ); 4786 £qDTDs = `m®loc ( £qËn * (*)); 4787 ià(! £qDTDs ) 4789 £qV®s = `m®loc ( £qËn * (*)); 4790 ià(! £qV®s ) { 4791 `ä“ ( £qDTDs ); 4795  p = sf , i = 0;…;… =…-> Ãxt , i++) { 4796  ¶’ , j ; 4797 ** dtds , ** v®s ; 4798 * Ëngths ; 4800 ¶’ = `sdp_li¡_Ën ( p -> d©a ); 4801 dtds = `m®loc ( ¶’ * (*)); 4802 ià(! dtds ) 4803  çž ; 4804 v®s = `m®loc ( ¶’ * (*)); 4805 ià(! v®s ) { 4806 `ä“ ( dtds ); 4807  çž ; 4809 Ëngths = `m®loc ( ¶’ * ()); 4810 ià(! Ëngths ) { 4811 `ä“ ( dtds ); 4812 `ä“ ( v®s ); 4813  çž ; 4815  r = p -> d©a , j = 0;„;„ =„-> Ãxt , j++) { 4816 sdp_d©a_t * d©a = (sdp_d©a_ˆ*è r ->data; 4817 dtds [ j ] = & d©a -> dtd ; 4818  d©a -> dtd ) { 4819  SDP_URL_STR8 : 4820  SDP_URL_STR16 : 4821  SDP_TEXT_STR8 : 4822  SDP_TEXT_STR16 : 4823 v®s [ j ] = d©a -> v® . ¡r ; 4824 Ëngths [ j ] = d©a -> un™Size - ( ušt8_t ); 4826  SDP_ALT8 : 4827  SDP_ALT16 : 4828  SDP_ALT32 : 4829  SDP_SEQ8 : 4830  SDP_SEQ16 : 4831  SDP_SEQ32 : 4832 v®s [ j ] = d©a -> v® . d©a£q ; 4833 Ëngths [ j ] = 0; 4836 v®s [ j ] = & d©a -> v® ; 4837 Ëngths [ j ] = 0; 4841 ã© = `sdp_£q_®loc_w™h_Ëngth ( dtds , v®s , Ëngths , ¶’ ); 4842 `ä“ ( dtds ); 4843 `ä“ ( v®s ); 4844 `ä“ ( Ëngths ); 4845 ià(! ã© ) 4846  çž ; 4847 £qDTDs [ i ] = & ã© -> dtd ; 4848 £qV®s [ i ] = ã© ; 4850 £q_ã© = `sdp_£q_®loc ( £qDTDs , £qV®s , £qËn ); 4851 ià(! £q_ã© ) 4852  çž ; 4853 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_SUPPORTED_FEATURES_LIST , £q_ã© ); 4855 `ä“ ( £qV®s ); 4856 `ä“ ( £qDTDs ); 4859 çž : 4860 `ä“ ( £qV®s ); 4861 `ä“ ( £qDTDs ); 4863 } } 4869  $sdp_g‘_suµ_ã© (cÚ¡ sdp_»cÜd_t * »c , sdp_li¡_t ** £qp ) 4871 sdp_d©a_t * sdpd©a , * d ; 4872 sdp_li¡_t * t£q ; 4873 t£q = NULL ; 4875 sdpd©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_SUPPORTED_FEATURES_LIST ); 4877 ià(! sdpd©a || ! `SDP_IS_SEQ (sdpd©a-> dtd )) 4878  `sdp_g‘_uuid£q_©Œ ( »c , 4879 SDP_ATTR_SUPPORTED_FEATURES_LIST , £qp ); 4881  d = sdpd©a -> v® . d©a£q ; d; d = d-> Ãxt ) { 4882 sdp_d©a_t * dd ; 4883 sdp_li¡_t * sub£q ; 4885 ià(! `SDP_IS_SEQ ( d -> dtd )) 4886  çž ; 4888 sub£q = NULL ; 4890  dd = d -> v® . d©a£q ; dd; dd = dd-> Ãxt ) { 4891 sdp_d©a_t * d©a ; 4892 * v® ; 4893  Ëngth ; 4895  dd -> dtd ) { 4896  SDP_URL_STR8 : 4897  SDP_URL_STR16 : 4898  SDP_TEXT_STR8 : 4899  SDP_TEXT_STR16 : 4900 v® = dd ->v®. ¡r ; 4901 Ëngth = dd -> un™Size - ( ušt8_t ); 4903  SDP_UINT8 : 4904  SDP_UINT16 : 4905 v® = & dd ->val; 4906 Ëngth = 0; 4909  çž ; 4912 d©a = `sdp_d©a_®loc_w™h_Ëngth ( dd -> dtd , v® , Ëngth ); 4913 ià( d©a ) 4914 sub£q = `sdp_li¡_­³nd (sub£q, d©a ); 4916 t£q = `sdp_li¡_­³nd Ñ£q, sub£q ); 4918 * £qp = t£q ; 4921 çž : 4922  t£q ) { 4923 sdp_li¡_t * Ãxt ; 4925 Ãxt = t£q ->next; 4926 `sdp_li¡_ä“ ( t£q , ä“ ); 4927 t£q = Ãxt ; 4929 ”ºo = EINVAL ; 4931 } } 4933  $sdp_add_Ïng_©Œ ( sdp_»cÜd_t * »c ) 4935 sdp_Ïng_©Œ_t ba£_Ïng ; 4936 sdp_li¡_t * Ïngs ; 4938 ba£_Ïng . code_ISO639 = (0x65 << 8) | 0x6e; 4939 ba£_Ïng . ’codšg = 106; 4940 ba£_Ïng . ba£_off£t = SDP_PRIMARY_LANG_BASE ; 4942 Ïngs = `sdp_li¡_­³nd (0, & ba£_Ïng ); 4943 `sdp_£t_Ïng_©Œ ( »c , Ïngs ); 4944 `sdp_li¡_ä“ ( Ïngs , NULL ); 4945 } } @lib/sdp.h 27 #iâdeà __SDP_H 28  #__SDP_H ) 30 #ifdeà __ýlu¥lus 34  ~<¡dšt.h > 35  ~ 37  #SDP_UNIX_PATH "/v¬/run/sdp" ) 38  #SDP_RESPONSE_TIMEOUT 20 ) 39  #SDP_REQ_BUFFER_SIZE 2048 ) 40  #SDP_RSP_BUFFER_SIZE 65535 ) 41  #SDP_PDU_CHUNK_SIZE 1024 ) 47  #SDP_PSM 0x0001 ) 52  #SDP_UUID 0x0001 ) 53  #UDP_UUID 0x0002 ) 54  #RFCOMM_UUID 0x0003 ) 55  #TCP_UUID 0x0004 ) 56  #TCS_BIN_UUID 0x0005 ) 57  #TCS_AT_UUID 0x0006 ) 58  #ATT_UUID 0x0007 ) 59  #OBEX_UUID 0x0008 ) 60  #IP_UUID 0x0009 ) 61  #FTP_UUID 0x000a ) 62  #HTTP_UUID 0x000c ) 63  #WSP_UUID 0x000e ) 64  #BNEP_UUID 0x000f ) 65  #UPNP_UUID 0x0010 ) 66  #HIDP_UUID 0x0011 ) 67  #HCRP_CTRL_UUID 0x0012 ) 68  #HCRP_DATA_UUID 0x0014 ) 69  #HCRP_NOTE_UUID 0x0016 ) 70  #AVCTP_UUID 0x0017 ) 71  #AVDTP_UUID 0x0019 ) 72  #CMTP_UUID 0x001b ) 73  #UDI_UUID 0x001d ) 74  #MCAP_CTRL_UUID 0x001e ) 75  #MCAP_DATA_UUID 0x001f ) 76  #L2CAP_UUID 0x0100 ) 81  #SDP_SERVER_SVCLASS_ID 0x1000 ) 82  #BROWSE_GRP_DESC_SVCLASS_ID 0x1001 ) 83  #PUBLIC_BROWSE_GROUP 0x1002 ) 84  #SERIAL_PORT_SVCLASS_ID 0x1101 ) 85  #LAN_ACCESS_SVCLASS_ID 0x1102 ) 86  #DIALUP_NET_SVCLASS_ID 0x1103 ) 87  #IRMC_SYNC_SVCLASS_ID 0x1104 ) 88  #OBEX_OBJPUSH_SVCLASS_ID 0x1105 ) 89  #OBEX_FILETRANS_SVCLASS_ID 0x1106 ) 90  #IRMC_SYNC_CMD_SVCLASS_ID 0x1107 ) 91  #HEADSET_SVCLASS_ID 0x1108 ) 92  #CORDLESS_TELEPHONY_SVCLASS_ID 0x1109 ) 93  #AUDIO_SOURCE_SVCLASS_ID 0x110a ) 94  #AUDIO_SINK_SVCLASS_ID 0x110b ) 95  #AV_REMOTE_TARGET_SVCLASS_ID 0x110c ) 96  #ADVANCED_AUDIO_SVCLASS_ID 0x110d ) 97  #AV_REMOTE_SVCLASS_ID 0x110e ) 98  #AV_REMOTE_CONTROLLER_SVCLASS_ID 0x110f ) 99  #INTERCOM_SVCLASS_ID 0x1110 ) 100  #FAX_SVCLASS_ID 0x1111 ) 101  #HEADSET_AGW_SVCLASS_ID 0x1112 ) 102  #WAP_SVCLASS_ID 0x1113 ) 103  #WAP_CLIENT_SVCLASS_ID 0x1114 ) 104  #PANU_SVCLASS_ID 0x1115 ) 105  #NAP_SVCLASS_ID 0x1116 ) 106  #GN_SVCLASS_ID 0x1117 ) 107  #DIRECT_PRINTING_SVCLASS_ID 0x1118 ) 108  #REFERENCE_PRINTING_SVCLASS_ID 0x1119 ) 109  #IMAGING_SVCLASS_ID 0x111a ) 110  #IMAGING_RESPONDER_SVCLASS_ID 0x111b ) 111  #IMAGING_ARCHIVE_SVCLASS_ID 0x111c ) 112  #IMAGING_REFOBJS_SVCLASS_ID 0x111d ) 113  #HANDSFREE_SVCLASS_ID 0x111e ) 114  #HANDSFREE_AGW_SVCLASS_ID 0x111f ) 115  #DIRECT_PRT_REFOBJS_SVCLASS_ID 0x1120 ) 116  #REFLECTED_UI_SVCLASS_ID 0x1121 ) 117  #BASIC_PRINTING_SVCLASS_ID 0x1122 ) 118  #PRINTING_STATUS_SVCLASS_ID 0x1123 ) 119  #HID_SVCLASS_ID 0x1124 ) 120  #HCR_SVCLASS_ID 0x1125 ) 121  #HCR_PRINT_SVCLASS_ID 0x1126 ) 122  #HCR_SCAN_SVCLASS_ID 0x1127 ) 123  #CIP_SVCLASS_ID 0x1128 ) 124  #VIDEO_CONF_GW_SVCLASS_ID 0x1129 ) 125  #UDI_MT_SVCLASS_ID 0x112a ) 126  #UDI_TA_SVCLASS_ID 0x112b ) 127  #AV_SVCLASS_ID 0x112c ) 128  #SAP_SVCLASS_ID 0x112d ) 129  #PBAP_PCE_SVCLASS_ID 0x112e ) 130  #PBAP_PSE_SVCLASS_ID 0x112f ) 131  #PBAP_SVCLASS_ID 0x1130 ) 132  #MAP_MSE_SVCLASS_ID 0x1132 ) 133  #MAP_MCE_SVCLASS_ID 0x1133 ) 134  #MAP_SVCLASS_ID 0x1134 ) 135  #GNSS_SVCLASS_ID 0x1135 ) 136  #GNSS_SERVER_SVCLASS_ID 0x1136 ) 137  #MPS_SC_SVCLASS_ID 0x113A ) 138  #MPS_SVCLASS_ID 0x113B ) 139  #PNP_INFO_SVCLASS_ID 0x1200 ) 140  #GENERIC_NETWORKING_SVCLASS_ID 0x1201 ) 141  #GENERIC_FILETRANS_SVCLASS_ID 0x1202 ) 142  #GENERIC_AUDIO_SVCLASS_ID 0x1203 ) 143  #GENERIC_TELEPHONY_SVCLASS_ID 0x1204 ) 144  #UPNP_SVCLASS_ID 0x1205 ) 145  #UPNP_IP_SVCLASS_ID 0x1206 ) 146  #UPNP_PAN_SVCLASS_ID 0x1300 ) 147  #UPNP_LAP_SVCLASS_ID 0x1301 ) 148  #UPNP_L2CAP_SVCLASS_ID 0x1302 ) 149  #VIDEO_SOURCE_SVCLASS_ID 0x1303 ) 150  #VIDEO_SINK_SVCLASS_ID 0x1304 ) 151  #VIDEO_DISTRIBUTION_SVCLASS_ID 0x1305 ) 152  #HDP_SVCLASS_ID 0x1400 ) 153  #HDP_SOURCE_SVCLASS_ID 0x1401 ) 154  #HDP_SINK_SVCLASS_ID 0x1402 ) 155  #GENERIC_ACCESS_SVCLASS_ID 0x1800 ) 156  #GENERIC_ATTRIB_SVCLASS_ID 0x1801 ) 157  #APPLE_AGENT_SVCLASS_ID 0x2112 ) 163  #SDP_SERVER_PROFILE_ID SDP_SERVER_SVCLASS_ID ) 164  #BROWSE_GRP_DESC_PROFILE_ID BROWSE_GRP_DESC_SVCLASS_ID ) 165  #SERIAL_PORT_PROFILE_ID SERIAL_PORT_SVCLASS_ID ) 166  #LAN_ACCESS_PROFILE_ID LAN_ACCESS_SVCLASS_ID ) 167  #DIALUP_NET_PROFILE_ID DIALUP_NET_SVCLASS_ID ) 168  #IRMC_SYNC_PROFILE_ID IRMC_SYNC_SVCLASS_ID ) 169  #OBEX_OBJPUSH_PROFILE_ID OBEX_OBJPUSH_SVCLASS_ID ) 170  #OBEX_FILETRANS_PROFILE_ID OBEX_FILETRANS_SVCLASS_ID ) 171  #IRMC_SYNC_CMD_PROFILE_ID IRMC_SYNC_CMD_SVCLASS_ID ) 172  #HEADSET_PROFILE_ID HEADSET_SVCLASS_ID ) 173  #CORDLESS_TELEPHONY_PROFILE_ID CORDLESS_TELEPHONY_SVCLASS_ID ) 174  #AUDIO_SOURCE_PROFILE_ID AUDIO_SOURCE_SVCLASS_ID ) 175  #AUDIO_SINK_PROFILE_ID AUDIO_SINK_SVCLASS_ID ) 176  #AV_REMOTE_TARGET_PROFILE_ID AV_REMOTE_TARGET_SVCLASS_ID ) 177  #ADVANCED_AUDIO_PROFILE_ID ADVANCED_AUDIO_SVCLASS_ID ) 178  #AV_REMOTE_PROFILE_ID AV_REMOTE_SVCLASS_ID ) 179  #VIDEO_CONF_PROFILE_ID VIDEO_CONF_SVCLASS_ID ) 180  #INTERCOM_PROFILE_ID INTERCOM_SVCLASS_ID ) 181  #FAX_PROFILE_ID FAX_SVCLASS_ID ) 182  #HEADSET_AGW_PROFILE_ID HEADSET_AGW_SVCLASS_ID ) 183  #WAP_PROFILE_ID WAP_SVCLASS_ID ) 184  #WAP_CLIENT_PROFILE_ID WAP_CLIENT_SVCLASS_ID ) 185  #PANU_PROFILE_ID PANU_SVCLASS_ID ) 186  #NAP_PROFILE_ID NAP_SVCLASS_ID ) 187  #GN_PROFILE_ID GN_SVCLASS_ID ) 188  #DIRECT_PRINTING_PROFILE_ID DIRECT_PRINTING_SVCLASS_ID ) 189  #REFERENCE_PRINTING_PROFILE_ID REFERENCE_PRINTING_SVCLASS_ID ) 190  #IMAGING_PROFILE_ID IMAGING_SVCLASS_ID ) 191  #IMAGING_RESPONDER_PROFILE_ID IMAGING_RESPONDER_SVCLASS_ID ) 192  #IMAGING_ARCHIVE_PROFILE_ID IMAGING_ARCHIVE_SVCLASS_ID ) 193  #IMAGING_REFOBJS_PROFILE_ID IMAGING_REFOBJS_SVCLASS_ID ) 194  #HANDSFREE_PROFILE_ID HANDSFREE_SVCLASS_ID ) 195  #HANDSFREE_AGW_PROFILE_ID HANDSFREE_AGW_SVCLASS_ID ) 196  #DIRECT_PRT_REFOBJS_PROFILE_ID DIRECT_PRT_REFOBJS_SVCLASS_ID ) 197  #REFLECTED_UI_PROFILE_ID REFLECTED_UI_SVCLASS_ID ) 198  #BASIC_PRINTING_PROFILE_ID BASIC_PRINTING_SVCLASS_ID ) 199  #PRINTING_STATUS_PROFILE_ID PRINTING_STATUS_SVCLASS_ID ) 200  #HID_PROFILE_ID HID_SVCLASS_ID ) 201  #HCR_PROFILE_ID HCR_SCAN_SVCLASS_ID ) 202  #HCR_PRINT_PROFILE_ID HCR_PRINT_SVCLASS_ID ) 203  #HCR_SCAN_PROFILE_ID HCR_SCAN_SVCLASS_ID ) 204  #CIP_PROFILE_ID CIP_SVCLASS_ID ) 205  #VIDEO_CONF_GW_PROFILE_ID VIDEO_CONF_GW_SVCLASS_ID ) 206  #UDI_MT_PROFILE_ID UDI_MT_SVCLASS_ID ) 207  #UDI_TA_PROFILE_ID UDI_TA_SVCLASS_ID ) 208  #AV_PROFILE_ID AV_SVCLASS_ID ) 209  #SAP_PROFILE_ID SAP_SVCLASS_ID ) 210  #PBAP_PCE_PROFILE_ID PBAP_PCE_SVCLASS_ID ) 211  #PBAP_PSE_PROFILE_ID PBAP_PSE_SVCLASS_ID ) 212  #PBAP_PROFILE_ID PBAP_SVCLASS_ID ) 213  #MAP_PROFILE_ID MAP_SVCLASS_ID ) 214  #PNP_INFO_PROFILE_ID PNP_INFO_SVCLASS_ID ) 215  #GENERIC_NETWORKING_PROFILE_ID GENERIC_NETWORKING_SVCLASS_ID ) 216  #GENERIC_FILETRANS_PROFILE_ID GENERIC_FILETRANS_SVCLASS_ID ) 217  #GENERIC_AUDIO_PROFILE_ID GENERIC_AUDIO_SVCLASS_ID ) 218  #GENERIC_TELEPHONY_PROFILE_ID GENERIC_TELEPHONY_SVCLASS_ID ) 219  #UPNP_PROFILE_ID UPNP_SVCLASS_ID ) 220  #UPNP_IP_PROFILE_ID UPNP_IP_SVCLASS_ID ) 221  #UPNP_PAN_PROFILE_ID UPNP_PAN_SVCLASS_ID ) 222  #UPNP_LAP_PROFILE_ID UPNP_LAP_SVCLASS_ID ) 223  #UPNP_L2CAP_PROFILE_ID UPNP_L2CAP_SVCLASS_ID ) 224  #VIDEO_SOURCE_PROFILE_ID VIDEO_SOURCE_SVCLASS_ID ) 225  #VIDEO_SINK_PROFILE_ID VIDEO_SINK_SVCLASS_ID ) 226  #VIDEO_DISTRIBUTION_PROFILE_ID VIDEO_DISTRIBUTION_SVCLASS_ID ) 227  #HDP_PROFILE_ID HDP_SVCLASS_ID ) 228  #HDP_SOURCE_PROFILE_ID HDP_SOURCE_SVCLASS_ID ) 229  #HDP_SINK_PROFILE_ID HDP_SINK_SVCLASS_ID ) 230  #GENERIC_ACCESS_PROFILE_ID GENERIC_ACCESS_SVCLASS_ID ) 231  #GENERIC_ATTRIB_PROFILE_ID GENERIC_ATTRIB_SVCLASS_ID ) 232  #APPLE_AGENT_PROFILE_ID APPLE_AGENT_SVCLASS_ID ) 233  #MPS_PROFILE_ID MPS_SC_SVCLASS_ID ) 238  #MDP_SVCLASS_ID HDP_SVCLASS_ID ) 239  #MDP_SOURCE_SVCLASS_ID HDP_SOURCE_SVCLASS_ID ) 240  #MDP_SINK_SVCLASS_ID HDP_SINK_SVCLASS_ID ) 241  #MDP_PROFILE_ID HDP_PROFILE_ID ) 242  #MDP_SOURCE_PROFILE_ID HDP_SOURCE_PROFILE_ID ) 243  #MDP_SINK_PROFILE_ID HDP_SINK_PROFILE_ID ) 248  #SDP_SERVER_RECORD_HANDLE 0x0000 ) 254  #SDP_ATTR_RECORD_HANDLE 0x0000 ) 255  #SDP_ATTR_SVCLASS_ID_LIST 0x0001 ) 256  #SDP_ATTR_RECORD_STATE 0x0002 ) 257  #SDP_ATTR_SERVICE_ID 0x0003 ) 258  #SDP_ATTR_PROTO_DESC_LIST 0x0004 ) 259  #SDP_ATTR_BROWSE_GRP_LIST 0x0005 ) 260  #SDP_ATTR_LANG_BASE_ATTR_ID_LIST 0x0006 ) 261  #SDP_ATTR_SVCINFO_TTL 0x0007 ) 262  #SDP_ATTR_SERVICE_AVAILABILITY 0x0008 ) 263  #SDP_ATTR_PFILE_DESC_LIST 0x0009 ) 264  #SDP_ATTR_DOC_URL 0x000a ) 265  #SDP_ATTR_CLNT_EXEC_URL 0x000b ) 266  #SDP_ATTR_ICON_URL 0x000c ) 267  #SDP_ATTR_ADD_PROTO_DESC_LIST 0x000d ) 269  #SDP_ATTR_GROUP_ID 0x0200 ) 270  #SDP_ATTR_IP_SUBNET 0x0200 ) 271  #SDP_ATTR_VERSION_NUM_LIST 0x0200 ) 272  #SDP_ATTR_SUPPORTED_FEATURES_LIST 0x0200 ) 273  #SDP_ATTR_GOEP_L2CAP_PSM 0x0200 ) 274  #SDP_ATTR_SVCDB_STATE 0x0201 ) 276  #SDP_ATTR_MPSD_SCENARIOS 0x0200 ) 277  #SDP_ATTR_MPMD_SCENARIOS 0x0201 ) 278  #SDP_ATTR_MPS_DEPENDENCIES 0x0202 ) 280  #SDP_ATTR_SERVICE_VERSION 0x0300 ) 281  #SDP_ATTR_EXTERNAL_NETWORK 0x0301 ) 282  #SDP_ATTR_SUPPORTED_DATA_STORES_LIST 0x0301 ) 283  #SDP_ATTR_DATA_EXCHANGE_SPEC 0x0301 ) 284  #SDP_ATTR_NETWORK 0x0301 ) 285  #SDP_ATTR_FAX_CLASS1_SUPPORT 0x0302 ) 286  #SDP_ATTR_REMOTE_AUDIO_VOLUME_CONTROL 0x0302 ) 287  #SDP_ATTR_MCAP_SUPPORTED_PROCEDURES 0x0302 ) 288  #SDP_ATTR_FAX_CLASS20_SUPPORT 0x0303 ) 289  #SDP_ATTR_SUPPORTED_FORMATS_LIST 0x0303 ) 290  #SDP_ATTR_FAX_CLASS2_SUPPORT 0x0304 ) 291  #SDP_ATTR_AUDIO_FEEDBACK_SUPPORT 0x0305 ) 292  #SDP_ATTR_NETWORK_ADDRESS 0x0306 ) 293  #SDP_ATTR_WAP_GATEWAY 0x0307 ) 294  #SDP_ATTR_HOMEPAGE_URL 0x0308 ) 295  #SDP_ATTR_WAP_STACK_TYPE 0x0309 ) 296  #SDP_ATTR_SECURITY_DESC 0x030a ) 297  #SDP_ATTR_NET_ACCESS_TYPE 0x030b ) 298  #SDP_ATTR_MAX_NET_ACCESSRATE 0x030c ) 299  #SDP_ATTR_IP4_SUBNET 0x030d ) 300  #SDP_ATTR_IP6_SUBNET 0x030e ) 301  #SDP_ATTR_SUPPORTED_CAPABILITIES 0x0310 ) 302  #SDP_ATTR_SUPPORTED_FEATURES 0x0311 ) 303  #SDP_ATTR_SUPPORTED_FUNCTIONS 0x0312 ) 304  #SDP_ATTR_TOTAL_IMAGING_DATA_CAPACITY 0x0313 ) 305  #SDP_ATTR_SUPPORTED_REPOSITORIES 0x0314 ) 306  #SDP_ATTR_MAS_INSTANCE_ID 0x0315 ) 307  #SDP_ATTR_SUPPORTED_MESSAGE_TYPES 0x0316 ) 308  #SDP_ATTR_PBAP_SUPPORTED_FEATURES 0x0317 ) 309  #SDP_ATTR_MAP_SUPPORTED_FEATURES 0x0317 ) 311  #SDP_ATTR_SPECIFICATION_ID 0x0200 ) 312  #SDP_ATTR_VENDOR_ID 0x0201 ) 313  #SDP_ATTR_PRODUCT_ID 0x0202 ) 314  #SDP_ATTR_VERSION 0x0203 ) 315  #SDP_ATTR_PRIMARY_RECORD 0x0204 ) 316  #SDP_ATTR_VENDOR_ID_SOURCE 0x0205 ) 318  #SDP_ATTR_HID_DEVICE_RELEASE_NUMBER 0x0200 ) 319  #SDP_ATTR_HID_PARSER_VERSION 0x0201 ) 320  #SDP_ATTR_HID_DEVICE_SUBCLASS 0x0202 ) 321  #SDP_ATTR_HID_COUNTRY_CODE 0x0203 ) 322  #SDP_ATTR_HID_VIRTUAL_CABLE 0x0204 ) 323  #SDP_ATTR_HID_RECONNECT_INITIATE 0x0205 ) 324  #SDP_ATTR_HID_DESCRIPTOR_LIST 0x0206 ) 325  #SDP_ATTR_HID_LANG_ID_BASE_LIST 0x0207 ) 326  #SDP_ATTR_HID_SDP_DISABLE 0x0208 ) 327  #SDP_ATTR_HID_BATTERY_POWER 0x0209 ) 328  #SDP_ATTR_HID_REMOTE_WAKEUP 0x020a ) 329  #SDP_ATTR_HID_PROFILE_VERSION 0x020b ) 330  #SDP_ATTR_HID_SUPERVISION_TIMEOUT 0x020c ) 331  #SDP_ATTR_HID_NORMALLY_CONNECTABLE 0x020d ) 332  #SDP_ATTR_HID_BOOT_DEVICE 0x020e ) 342  #SDP_PRIMARY_LANG_BASE 0x0100 ) 344  #SDP_ATTR_SVCNAME_PRIMARY 0x0000 + SDP_PRIMARY_LANG_BASE ) 345  #SDP_ATTR_SVCDESC_PRIMARY 0x0001 + SDP_PRIMARY_LANG_BASE ) 346  #SDP_ATTR_PROVNAME_PRIMARY 0x0002 + SDP_PRIMARY_LANG_BASE ) 367  #SDP_DATA_NIL 0x00 ) 368  #SDP_UINT8 0x08 ) 369  #SDP_UINT16 0x09 ) 370  #SDP_UINT32 0x0A ) 371  #SDP_UINT64 0x0B ) 372  #SDP_UINT128 0x0C ) 373  #SDP_INT8 0x10 ) 374  #SDP_INT16 0x11 ) 375  #SDP_INT32 0x12 ) 376  #SDP_INT64 0x13 ) 377  #SDP_INT128 0x14 ) 378  #SDP_UUID_UNSPEC 0x18 ) 379  #SDP_UUID16 0x19 ) 380  #SDP_UUID32 0x1A ) 381  #SDP_UUID128 0x1C ) 382  #SDP_TEXT_STR_UNSPEC 0x20 ) 383  #SDP_TEXT_STR8 0x25 ) 384  #SDP_TEXT_STR16 0x26 ) 385  #SDP_TEXT_STR32 0x27 ) 386  #SDP_BOOL 0x28 ) 387  #SDP_SEQ_UNSPEC 0x30 ) 388  #SDP_SEQ8 0x35 ) 389  #SDP_SEQ16 0x36 ) 390  #SDP_SEQ32 0x37 ) 391  #SDP_ALT_UNSPEC 0x38 ) 392  #SDP_ALT8 0x3D ) 393  #SDP_ALT16 0x3E ) 394  #SDP_ALT32 0x3F ) 395  #SDP_URL_STR_UNSPEC 0x40 ) 396  #SDP_URL_STR8 0x45 ) 397  #SDP_URL_STR16 0x46 ) 398  #SDP_URL_STR32 0x47 ) 403  #SDP_ERROR_RSP 0x01 ) 404  #SDP_SVC_SEARCH_REQ 0x02 ) 405  #SDP_SVC_SEARCH_RSP 0x03 ) 406  #SDP_SVC_ATTR_REQ 0x04 ) 407  #SDP_SVC_ATTR_RSP 0x05 ) 408  #SDP_SVC_SEARCH_ATTR_REQ 0x06 ) 409  #SDP_SVC_SEARCH_ATTR_RSP 0x07 ) 415  #SDP_SVC_REGISTER_REQ 0x75 ) 416  #SDP_SVC_REGISTER_RSP 0x76 ) 417  #SDP_SVC_UPDATE_REQ 0x77 ) 418  #SDP_SVC_UPDATE_RSP 0x78 ) 419  #SDP_SVC_REMOVE_REQ 0x79 ) 420  #SDP_SVC_REMOVE_RSP 0x80 ) 425  #SDP_INVALID_VERSION 0x0001 ) 426  #SDP_INVALID_RECORD_HANDLE 0x0002 ) 427  #SDP_INVALID_SYNTAX 0x0003 ) 428  #SDP_INVALID_PDU_SIZE 0x0004 ) 429  #SDP_INVALID_CSTATE 0x0005 ) 435 ušt8_t pdu_id ; 436 ušt16_t tid ; 437 ušt16_t ¶’ ; 438 } t__©Œibu‹__ (( t·cked )è tsdp_pdu_hdr_t ; 446 ušt8_t ty³ ; 448 ušt16_t uuid16 ; 449 ušt32_t uuid32 ; 450 ušt128_t uuid128 ; 451 } v®ue ; 452 } tuuid_t ; 454  #SDP_IS_UUID ( x è((xè=ð SDP_UUID16 || (xè=ð SDP_UUID32 || \ 455 ( x è=ð SDP_UUID128 ) ) 456  #SDP_IS_ALT ( x è((xè=ð SDP_ALT8 || (xè=ð SDP_ALT16 || (xè=ð SDP_ALT32 ) ) 457  #SDP_IS_SEQ ( x è((xè=ð SDP_SEQ8 || (xè=ð SDP_SEQ16 || (xè=ð SDP_SEQ32 ) ) 458  #SDP_IS_TEXT_STR ( x è((xè=ð SDP_TEXT_STR8 || (xè=ð SDP_TEXT_STR16 || \ 459 ( x è=ð SDP_TEXT_STR32 ) ) 461  _sdp_li¡ tsdp_li¡_t ; 462  s_sdp_li¡ { 463 sdp_li¡_t * Ãxt ; 464 * d©a ; 478 ušt16_t code_ISO639 ; 479 ušt16_t ’codšg ; 480 ušt16_t ba£_off£t ; 481 } tsdp_Ïng_©Œ_t ; 490 uuid_t uuid ; 491 ušt16_t v”siÚ ; 492 } tsdp_´ofže_desc_t ; 495 ušt8_t majÜ ; 496 ušt8_t mšÜ ; 497 } tsdp_v”siÚ_t ; 500 ušt8_t * d©a ; 501 ušt32_t d©a_size ; 502 ušt32_t buf_size ; 503 } tsdp_buf_t ; 506 ušt32_t hªdË ; 509 sdp_li¡_t * ·‰”n ; 510 sdp_li¡_t * ©Œli¡ ; 513 uuid_t svþass ; 514 } tsdp_»cÜd_t ; 516  sdp_d©a_¡ruù tsdp_d©a_t ; 517  ssdp_d©a_¡ruù { 518 ušt8_t dtd ; 519 ušt16_t ©ŒId ; 521 št8_t št8 ; 522 št16_t št16 ; 523 št32_t št32 ; 524 št64_t št64 ; 525 ušt128_t št128 ; 526 ušt8_t ušt8 ; 527 ušt16_t ušt16 ; 528 ušt32_t ušt32 ; 529 ušt64_t ušt64 ; 530 ušt128_t ušt128 ; 531 uuid_t uuid ; 532 * ¡r ; 533 sdp_d©a_t * d©a£q ; 534 } v® ; 535 sdp_d©a_t * Ãxt ; 536  un™Size ; 539 #ifdeà __ýlu¥lus @lib/sdp_lib.h 27 #iâdeà __SDP_LIB_H 28  #__SDP_LIB_H ) 30  ~ 31  ~ 32  ~ 34 #ifdeà __ýlu¥lus 41 (* sdp_li¡_func_t )(*, *); 42 (* sdp_ä“_func_t )(*); 43 (* sdp_comp_func_t )(const *, const *); 45 sdp_li¡_t * sdp_li¡_­³nd (sdp_li¡_ˆ* li¡ , * d ); 46 sdp_li¡_t * sdp_li¡_»move (sdp_li¡_ˆ* li¡ , * d ); 47 sdp_li¡_t * sdp_li¡_š£¹_sÜ‹d (sdp_li¡_ˆ* li¡ , * d©a , sdp_comp_func_t f ); 48  sdp_li¡_ä“ ( sdp_li¡_t * li¡ , sdp_ä“_func_t f ); 50  šlše  sdp_li¡_Ën (cÚ¡ sdp_li¡_t * li¡ ) 52  n = 0; 53 ; li¡ ;†i¡ =†i¡-> Ãxt ) 54 n ++; 55  n ; 58  šlše sdp_li¡_t * sdp_li¡_fšd (sdp_li¡_ˆ* li¡ , * u , sdp_comp_func_t f ) 60 ; li¡ ;†i¡ =†i¡-> Ãxt ) 61 ià( f ( li¡ -> d©a , u ) == 0) 62  li¡ ; 63  NULL ; 66  šlše  sdp_li¡_fÜ—ch ( sdp_li¡_t * li¡ , sdp_li¡_func_t f , * u ) 68 ; li¡ ;†i¡ =†i¡-> Ãxt ) 69 f ( li¡ -> d©a , u ); 75  #SDP_RECORD_PERSIST 0x01 ) 76  #SDP_DEVICE_RECORD 0x02 ) 81  #SDP_RETRY_IF_BUSY 0x01 ) 82  #SDP_WAIT_ON_CLOSE 0x02 ) 83  #SDP_NON_BLOCKING 0x04 ) 84  #SDP_LARGE_MTU 0x08 ) 90  sock ; 91  ¡©e ; 92  loÿl ; 93  æags ; 94 ušt16_t tid ; 95 * ´iv ; 96 } tsdp_£ssiÚ_t ; 102 SDP_ATTR_REQ_INDIVIDUAL = 1, 106 SDP_ATTR_REQ_RANGE 107 } tsdp_©Œ»q_ty³_t ; 118  tsdp_ÿÎback_t ( tušt8_t tty³ , tušt16_t t¡©us , ušt8_ˆ* tr¥ , tsize_t tsize , * tud©a ); 132 sdp_£ssiÚ_t * sdp_cÚÃù (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ , ušt32_t æags ); 133  sdp_þo£ ( sdp_£ssiÚ_t * £ssiÚ ); 134  sdp_g‘_sock‘ (cÚ¡ sdp_£ssiÚ_t * £ssiÚ ); 139 sdp_£ssiÚ_t * sdp_ü—‹ ( sk , ušt32_t æags ); 140  sdp_g‘_”rÜ ( sdp_£ssiÚ_t * £ssiÚ ); 141  sdp_´oûss ( sdp_£ssiÚ_t * £ssiÚ ); 142  sdp_£t_nÙify ( sdp_£ssiÚ_t * £ssiÚ , sdp_ÿÎback_t * func , * ud©a ); 144  sdp_£rviû_£¬ch_async ( sdp_£ssiÚ_t * £ssiÚ , cÚ¡ sdp_li¡_t * £¬ch , ušt16_t max_»c_num ); 145  sdp_£rviû_©Œ_async ( sdp_£ssiÚ_t * £ssiÚ , ušt32_t hªdË , sdp_©Œ»q_ty³_t »qty³ , cÚ¡ sdp_li¡_t * ©Œid_li¡ ); 146  sdp_£rviû_£¬ch_©Œ_async ( sdp_£ssiÚ_t * £ssiÚ , cÚ¡ sdp_li¡_t * £¬ch , sdp_©Œ»q_ty³_t »qty³ , cÚ¡ sdp_li¡_ˆ* ©Œid_li¡ ); 148 ušt16_t sdp_g’_tid ( sdp_£ssiÚ_t * £ssiÚ ); 153  sdp_g’”®_šquœy ( šquœy_šfo * ii ,  dev_num ,  du¿tiÚ , ušt8_t * found ); 156  sdp_g‘_št_©Œ (cÚ¡ sdp_»cÜd_t * »c , ušt16_t ©Œ , * v®ue ); 157  sdp_g‘_¡ršg_©Œ (cÚ¡ sdp_»cÜd_t * »c , ušt16_t ©Œ , * v®ue ,  v®u–’ ); 162 sdp_d©a_t * sdp_d©a_®loc ( ušt8_t dtd , cÚ¡ * v®ue ); 163 sdp_d©a_t * sdp_d©a_®loc_w™h_Ëngth ( ušt8_t dtd , cÚ¡ * v®ue , ušt32_t Ëngth ); 164  sdp_d©a_ä“ ( sdp_d©a_t * d©a ); 165 sdp_d©a_t * sdp_d©a_g‘ (cÚ¡ sdp_»cÜd_t * »c , ušt16_t ©Œ_id ); 167 sdp_d©a_t * sdp_£q_®loc (** dtds , ** v®ues ,  Ën ); 168 sdp_d©a_t * sdp_£q_®loc_w™h_Ëngth (** dtds , ** v®ues , * Ëngth ,  Ën ); 169 sdp_d©a_t * sdp_£q_­³nd (sdp_d©a_ˆ* £q , sdp_d©a_ˆ* d©a ); 171  sdp_©Œ_add ( sdp_»cÜd_t * »c , ušt16_t ©Œ , sdp_d©a_t * d©a ); 172  sdp_©Œ_»move ( sdp_»cÜd_t * »c , ušt16_t ©Œ ); 173  sdp_©Œ_»¶aû ( sdp_»cÜd_t * »c , ušt16_t ©Œ , sdp_d©a_t * d©a ); 174  sdp_£t_uuid£q_©Œ ( sdp_»cÜd_t * »c , ušt16_t ©Œ , sdp_li¡_t * £q ); 175  sdp_g‘_uuid£q_©Œ (cÚ¡ sdp_»cÜd_t * »c , ušt16_t ©Œ , sdp_li¡_t ** £qp ); 189  sdp_©Œ_add_Ãw ( sdp_»cÜd_t * »c , ušt16_t ©Œ , ušt8_t dtd , cÚ¡ * p ); 196  sdp_£t_šfo_©Œ ( sdp_»cÜd_t * »c , cÚ¡ * Çme , cÚ¡ * ´ov , cÚ¡ * desc ); 204  šlše  sdp_£t_£rviû_þas£s ( sdp_»cÜd_t * »c , sdp_li¡_t * £q ) 206  sdp_£t_uuid£q_©Œ ( »c , SDP_ATTR_SVCLASS_ID_LIST , £q ); 215  šlše  sdp_g‘_£rviû_þas£s (cÚ¡ sdp_»cÜd_t * »c , sdp_li¡_t ** £qp ) 217  sdp_g‘_uuid£q_©Œ ( »c , SDP_ATTR_SVCLASS_ID_LIST , £qp ); 226  šlše  sdp_£t_brow£_groups ( sdp_»cÜd_t * »c , sdp_li¡_t * £q ) 228  sdp_£t_uuid£q_©Œ ( »c , SDP_ATTR_BROWSE_GRP_LIST , £q ); 234  sdp_£t_acûss_´Ùos ( sdp_»cÜd_t * »c , cÚ¡ sdp_li¡_t * ´Ùo ); 239  sdp_£t_add_acûss_´Ùos ( sdp_»cÜd_t * »c , cÚ¡ sdp_li¡_t * ´Ùo ); 244  sdp_g‘_´Ùo_pÜt (cÚ¡ sdp_li¡_t * li¡ ,  ´Ùo ); 249 sdp_d©a_t * sdp_g‘_´Ùo_desc ( sdp_li¡_t * li¡ ,  ´Ùo ); 256  sdp_£t_Ïng_©Œ ( sdp_»cÜd_t * »c , cÚ¡ sdp_li¡_t * li¡ ); 263  šlše  sdp_£t_£rviû_‰l ( sdp_»cÜd_t * »c , ušt32_t ‰l ) 265  sdp_©Œ_add_Ãw ( »c , SDP_ATTR_SVCINFO_TTL , SDP_UINT32 , & ‰l ); 273  šlše  sdp_£t_»cÜd_¡©e ( sdp_»cÜd_t * »c , ušt32_t ¡©e ) 275  sdp_©Œ_add_Ãw ( »c , SDP_ATTR_RECORD_STATE , SDP_UINT32 , & ¡©e ); 281  sdp_£t_£rviû_id ( sdp_»cÜd_t * »c , uuid_t uuid ); 286  sdp_£t_group_id ( sdp_»cÜd_t * »c , uuid_t grouuuid ); 295  šlše  sdp_£t_£rviû_avaž ( sdp_»cÜd_t * »c , ušt8_t avaž ) 297  sdp_©Œ_add_Ãw ( »c , SDP_ATTR_SERVICE_AVAILABILITY , SDP_UINT8 , & avaž ); 307  sdp_£t_´ofže_descs ( sdp_»cÜd_t * »c , cÚ¡ sdp_li¡_t * desc ); 321  sdp_£t_u¾_©Œ ( sdp_»cÜd_t * »c , cÚ¡ * þ›ÁExecURL , cÚ¡ * docURL , cÚ¡ * icÚURL ); 351  sdp_£rviû_£¬ch_»q ( sdp_£ssiÚ_t * £ssiÚ , cÚ¡ sdp_li¡_t * £¬ch , ušt16_t max_»c_num , sdp_li¡_ˆ** r¥_li¡ ); 386 sdp_»cÜd_t * sdp_£rviû_©Œ_»q ( sdp_£ssiÚ_t * £ssiÚ , ušt32_t hªdË , sdp_©Œ»q_ty³_t »qty³ , cÚ¡ sdp_li¡_t * ©Œid_li¡ ); 429  sdp_£rviû_£¬ch_©Œ_»q ( sdp_£ssiÚ_t * £ssiÚ , cÚ¡ sdp_li¡_t * £¬ch , sdp_©Œ»q_ty³_t »qty³ , cÚ¡ sdp_li¡_ˆ* ©Œid_li¡ , sdp_li¡_ˆ** r¥_li¡ ); 434 sdp_»cÜd_t * sdp_»cÜd_®loc (); 435  sdp_»cÜd_ä“ ( sdp_»cÜd_t * »c ); 447  sdp_deviû_»cÜd_»gi¡”_bš¬y ( sdp_£ssiÚ_t * £ssiÚ , bdaddr_t * deviû , ušt8_t * d©a , ušt32_t size , ušt8_ˆ æags , ušt32_ˆ* hªdË ); 448  sdp_deviû_»cÜd_»gi¡” ( sdp_£ssiÚ_t * £ssiÚ , bdaddr_t * deviû , sdp_»cÜd_t * »c , ušt8_t æags ); 449  sdp_»cÜd_»gi¡” ( sdp_£ssiÚ_t * £ssiÚ , sdp_»cÜd_t * »c , ušt8_t æags ); 454  sdp_deviû_»cÜd_uÄegi¡”_bš¬y ( sdp_£ssiÚ_t * £ssiÚ , bdaddr_t * deviû , ušt32_t hªdË ); 455  sdp_deviû_»cÜd_uÄegi¡” ( sdp_£ssiÚ_t * £ssiÚ , bdaddr_t * deviû , sdp_»cÜd_t * »c ); 456  sdp_»cÜd_uÄegi¡” ( sdp_£ssiÚ_t * £ssiÚ , sdp_»cÜd_t * »c ); 463  sdp_deviû_»cÜd_upd©e_bš¬y ( sdp_£ssiÚ_t * £ssiÚ , bdaddr_t * deviû , ušt32_t hªdË , ušt8_t * d©a , ušt32_ˆ size ); 464  sdp_deviû_»cÜd_upd©e ( sdp_£ssiÚ_t * £ssiÚ , bdaddr_t * deviû , cÚ¡ sdp_»cÜd_t * »c ); 465  sdp_»cÜd_upd©e ( sdp_£ssiÚ_t * £ss , cÚ¡ sdp_»cÜd_t * »c ); 467  sdp_»cÜd_´št (cÚ¡ sdp_»cÜd_t * »c ); 472 uuid_t * sdp_uuid16_ü—‹ (uuid_ˆ* uuid , ušt16_t d©a ); 473 uuid_t * sdp_uuid32_ü—‹ (uuid_ˆ* uuid , ušt32_t d©a ); 474 uuid_t * sdp_uuid128_ü—‹ (uuid_ˆ* uuid , cÚ¡ * d©a ); 475  sdp_uuid16_cmp (cÚ¡ * p1 , cÚ¡ * p2 ); 476  sdp_uuid128_cmp (cÚ¡ * p1 , cÚ¡ * p2 ); 477  sdp_uuid_cmp (cÚ¡ * p1 , cÚ¡ * p2 ); 478 uuid_t * sdp_uuid_to_uuid128 (cÚ¡ uuid_ˆ* uuid ); 479  sdp_uuid16_to_uuid128 ( uuid_t * uuid128 , cÚ¡ uuid_ˆ* uuid16 ); 480  sdp_uuid32_to_uuid128 ( uuid_t * uuid128 , cÚ¡ uuid_ˆ* uuid32 ); 481  sdp_uuid128_to_uuid ( uuid_t * uuid ); 482  sdp_uuid_to_´Ùo ( uuid_t * uuid ); 483  sdp_uuid_exŒaù (cÚ¡ ušt8_t * bufãr ,  bufsize , uuid_t * uuid , * sÿÂed ); 484  sdp_uuid_´št (cÚ¡ uuid_t * uuid ); 486  #MAX_LEN_UUID_STR 37 ) 487  #MAX_LEN_PROTOCOL_UUID_STR 8 ) 488  #MAX_LEN_SERVICECLASS_UUID_STR 28 ) 489  #MAX_LEN_PROFILEDESCRIPTOR_UUID_STR 28 ) 491  sdp_uuid2¡º (cÚ¡ uuid_t * uuid , * ¡r , size_t n ); 492  sdp_´Ùo_uuid2¡º (cÚ¡ uuid_t * uuid , * ¡r , size_t n ); 493  sdp_svþass_uuid2¡º (cÚ¡ uuid_t * uuid , * ¡r , size_t n ); 494  sdp_´ofže_uuid2¡º (cÚ¡ uuid_t * uuid , * ¡r , size_t n ); 511  sdp_g‘_acûss_´Ùos (cÚ¡ sdp_»cÜd_t * »c , sdp_li¡_t ** ´Ùos ); 516  sdp_g‘_add_acûss_´Ùos (cÚ¡ sdp_»cÜd_t * »c , sdp_li¡_t ** ´Ùos ); 522  šlše  sdp_g‘_brow£_groups (cÚ¡ sdp_»cÜd_t * »c , sdp_li¡_t ** £qp ) 524  sdp_g‘_uuid£q_©Œ ( »c , SDP_ATTR_BROWSE_GRP_LIST , £qp ); 532  sdp_g‘_Ïng_©Œ (cÚ¡ sdp_»cÜd_t * »c , sdp_li¡_t ** ÏngSeq ); 541  sdp_g‘_´ofže_descs (cÚ¡ sdp_»cÜd_t * »c , sdp_li¡_t ** ´ofDesc ); 550  sdp_g‘_£rv”_v” (cÚ¡ sdp_»cÜd_t * »c , sdp_li¡_t ** pVnumLi¡ ); 552  sdp_g‘_£rviû_id (cÚ¡ sdp_»cÜd_t * »c , uuid_t * uuid ); 553  sdp_g‘_group_id (cÚ¡ sdp_»cÜd_t * »c , uuid_t * uuid ); 554  sdp_g‘_»cÜd_¡©e (cÚ¡ sdp_»cÜd_t * »c , ušt32_t * svcRecS‹ ); 555  sdp_g‘_£rviû_avaž (cÚ¡ sdp_»cÜd_t * »c , ušt8_t * svcAvaž ); 556  sdp_g‘_£rviû_‰l (cÚ¡ sdp_»cÜd_t * »c , ušt32_t * svcTTLInfo ); 557  sdp_g‘_d©aba£_¡©e (cÚ¡ sdp_»cÜd_t * »c , ušt32_t * svcDBS‹ ); 559  šlše  sdp_g‘_£rviû_Çme (cÚ¡ sdp_»cÜd_t * »c , * ¡r ,  Ën ) 561  sdp_g‘_¡ršg_©Œ ( »c , SDP_ATTR_SVCNAME_PRIMARY , ¡r , Ën ); 564  šlše  sdp_g‘_£rviû_desc (cÚ¡ sdp_»cÜd_t * »c , * ¡r ,  Ën ) 566  sdp_g‘_¡ršg_©Œ ( »c , SDP_ATTR_SVCDESC_PRIMARY , ¡r , Ën ); 569  šlše  sdp_g‘_´ovid”_Çme (cÚ¡ sdp_»cÜd_t * »c , * ¡r ,  Ën ) 571  sdp_g‘_¡ršg_©Œ ( »c , SDP_ATTR_PROVNAME_PRIMARY , ¡r , Ën ); 574  šlše  sdp_g‘_doc_u¾ (cÚ¡ sdp_»cÜd_t * »c , * ¡r ,  Ën ) 576  sdp_g‘_¡ršg_©Œ ( »c , SDP_ATTR_DOC_URL , ¡r , Ën ); 579  šlše  sdp_g‘_þÁ_exec_u¾ (cÚ¡ sdp_»cÜd_t * »c , * ¡r ,  Ën ) 581  sdp_g‘_¡ršg_©Œ ( »c , SDP_ATTR_CLNT_EXEC_URL , ¡r , Ën ); 584  šlše  sdp_g‘_icÚ_u¾ (cÚ¡ sdp_»cÜd_t * »c , * ¡r ,  Ën ) 586  sdp_g‘_¡ršg_©Œ ( »c , SDP_ATTR_ICON_URL , ¡r , Ën ); 594  sdp_£t_suµ_ã© ( sdp_»cÜd_t * »c , cÚ¡ sdp_li¡_t * sf ); 601  sdp_g‘_suµ_ã© (cÚ¡ sdp_»cÜd_t * »c , sdp_li¡_t ** £qp ); 603 sdp_»cÜd_t * sdp_exŒaù_pdu (cÚ¡ ušt8_t * pd©a ,  bufsize , * sÿÂed ); 604 sdp_»cÜd_t * sdp_cÝy_»cÜd (sdp_»cÜd_ˆ* »c ); 606  sdp_d©a_´št ( sdp_d©a_t * d©a ); 607  sdp_´št_£rviû_©Œ ( sdp_li¡_t * ®i¡ ); 609  sdp_©Œid_comp_func (cÚ¡ * key1 , cÚ¡ * key2 ); 611  sdp_£t_£q_Ën ( ušt8_t * ±r , ušt32_t Ëngth ); 612  sdp_£t_©Œid ( sdp_buf_t * pdu , ušt16_t id ); 613  sdp_­³nd_to_pdu ( sdp_buf_t * d¡ , sdp_d©a_t * d ); 614  sdp_­³nd_to_buf ( sdp_buf_t * d¡ , ušt8_t * d©a , ušt32_t Ën ); 616  sdp_g’_pdu ( sdp_buf_t * pdu , sdp_d©a_t * d©a ); 617  sdp_g’_»cÜd_pdu (cÚ¡ sdp_»cÜd_t * »c , sdp_buf_t * pdu ); 619  sdp_exŒaù_£qty³ (cÚ¡ ušt8_t * buf ,  bufsize , ušt8_ˆ* dtdp , * size ); 621 sdp_d©a_t * sdp_exŒaù_©Œ (cÚ¡ ušt8_t * pd©a ,  bufsize , * exŒaùedL’gth , sdp_»cÜd_t * »c ); 623  sdp_·‰”n_add_uuid ( sdp_»cÜd_t * »c , uuid_t * uuid ); 624  sdp_·‰”n_add_uuid£q ( sdp_»cÜd_t * »c , sdp_li¡_t * £q ); 626  sdp_£nd_»q_w4_r¥ ( sdp_£ssiÚ_t * £ssiÚ , ušt8_t * »q , ušt8_ˆ* r¥ , ušt32_t »qsize , ušt32_ˆ* r¥size ); 628  sdp_add_Ïng_©Œ ( sdp_»cÜd_t * »c ); 630 #ifdeà __ýlu¥lus @lib/uuid.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡ršg.h > 30  ~<¡dlib.h > 31  ~<”ºo.h > 33  ~"uuid.h " 35  ušt128_t gblu‘oÙh_ba£_uuid = { 36 . d©a = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 40  #BASE_UUID16_OFFSET 2 ) 41  #BASE_UUID32_OFFSET 0 ) 43  $bt_uuid16_to_uuid128 (cÚ¡ bt_uuid_t * ¤c , bt_uuid_ˆ* d¡ ) 45 ušt16_t be16 ; 47 d¡ -> v®ue . u128 = blu‘oÙh_ba£_uuid ; 48 d¡ -> ty³ = BT_UUID128 ; 55 be16 = `htÚs ( ¤c -> v®ue . u16 ); 56 `memýy (& d¡ -> v®ue . u128 . d©a [ BASE_UUID16_OFFSET ], & be16 , (be16)); 57 } } 59  $bt_uuid32_to_uuid128 (cÚ¡ bt_uuid_t * ¤c , bt_uuid_ˆ* d¡ ) 61 ušt32_t be32 ; 63 d¡ -> v®ue . u128 = blu‘oÙh_ba£_uuid ; 64 d¡ -> ty³ = BT_UUID128 ; 71 be32 = `htÚl ( ¤c -> v®ue . u32 ); 72 `memýy (& d¡ -> v®ue . u128 . d©a [ BASE_UUID32_OFFSET ], & be32 , (be32)); 73 } } 75  $bt_uuid_to_uuid128 (cÚ¡ bt_uuid_t * ¤c , bt_uuid_ˆ* d¡ ) 77  ¤c -> ty³ ) { 78  BT_UUID128 : 79 * d¡ = * ¤c ; 81  BT_UUID32 : 82 `bt_uuid32_to_uuid128 ( ¤c , d¡ ); 84  BT_UUID16 : 85 `bt_uuid16_to_uuid128 ( ¤c , d¡ ); 87  BT_UUID_UNSPEC : 91 } } 93  $bt_uuid128_cmp (cÚ¡ bt_uuid_t * u1 , cÚ¡ bt_uuid_ˆ* u2 ) 95  `memcmp (& u1 -> v®ue . u128 , & u2 ->v®ue.u128, ( ušt128_t )); 96 } } 98  $bt_uuid16_ü—‹ ( bt_uuid_t * btuuid , ušt16_t v®ue ) 100 `mem£t ( btuuid , 0, ( bt_uuid_t )); 101 btuuid -> ty³ = BT_UUID16 ; 102 btuuid -> v®ue . u16 = value; 105 } } 107  $bt_uuid32_ü—‹ ( bt_uuid_t * btuuid , ušt32_t v®ue ) 109 `mem£t ( btuuid , 0, ( bt_uuid_t )); 110 btuuid -> ty³ = BT_UUID32 ; 111 btuuid -> v®ue . u32 = value; 114 } } 116  $bt_uuid128_ü—‹ ( bt_uuid_t * btuuid , ušt128_t v®ue ) 118 `mem£t ( btuuid , 0, ( bt_uuid_t )); 119 btuuid -> ty³ = BT_UUID128 ; 120 btuuid -> v®ue . u128 = value; 123 } } 125  $bt_uuid_cmp (cÚ¡ bt_uuid_t * uuid1 , cÚ¡ bt_uuid_ˆ* uuid2 ) 127 bt_uuid_t u1 , u2 ; 129 `bt_uuid_to_uuid128 ( uuid1 , & u1 ); 130 `bt_uuid_to_uuid128 ( uuid2 , & u2 ); 132  `bt_uuid128_cmp (& u1 , & u2 ); 133 } } 138  $bt_uuid_to_¡ršg (cÚ¡ bt_uuid_t * uuid , * ¡r , size_t n ) 140 ià(! uuid ) { 141 `¢´štf ( ¡r , n , "NULL"); 142  - EINVAL ; 145  uuid -> ty³ ) { 146  BT_UUID16 : 147 `¢´štf ( ¡r , n , "%.4x", uuid -> v®ue . u16 ); 149  BT_UUID32 : 150 `¢´štf ( ¡r , n , "%.8x", uuid -> v®ue . u32 ); 152  BT_UUID128 : { 153  d©a0 ; 154  d©a1 ; 155  d©a2 ; 156  d©a3 ; 157  d©a4 ; 158  d©a5 ; 160 cÚ¡ ušt8_t * d©a = (ušt8_ˆ*è& uuid -> v®ue . u128 ; 162 `memýy (& d©a0 , & d©a [0], 4); 163 `memýy (& d©a1 , & d©a [4], 2); 164 `memýy (& d©a2 , & d©a [6], 2); 165 `memýy (& d©a3 , & d©a [8], 2); 166 `memýy (& d©a4 , & d©a [10], 4); 167 `memýy (& d©a5 , & d©a [14], 2); 169 `¢´štf ( ¡r , n , "%.8x-%.4x-%.4x-%.4x-%.8x%.4x", 170 `Áohl ( d©a0 ), `Áohs ( d©a1 ), 171 `Áohs ( d©a2 ),‚tohs( d©a3 ), 172 `Áohl ( d©a4 ), `Áohs ( d©a5 )); 175  BT_UUID_UNSPEC : 177 `¢´štf ( ¡r , n , "Ty³ oàUUID (%xèunknown.", uuid -> ty³ ); 178  - EINVAL ; 182 } } 184  šlše  $is_uuid128 (cÚ¡ * ¡ršg ) 186  ( `¡¾’ ( ¡ršg ) == 36 && 187 ¡ršg [8] == '-' && 188 ¡ršg [13] == '-' && 189 ¡ršg [18] == '-' && 190 ¡ršg [23] == '-'); 191 } } 193  šlše  $is_ba£_uuid128 (cÚ¡ * ¡ršg ) 195 ušt16_t uuid ; 196  dummy ; 198 ià(! `is_uuid128 ( ¡ršg )) 201  `ssÿnf ( ¡ršg , 203 & uuid , & dummy , &dummy, &dummy, &dummy) == 5; 204 } } 206  šlše  $is_uuid32 (cÚ¡ * ¡ršg ) 208  ( `¡¾’ ( ¡ršg ) == 8 || strlen(string) == 10); 209 } } 211  šlše  $is_uuid16 (cÚ¡ * ¡ršg ) 213  ( `¡¾’ ( ¡ršg ) == 4 || strlen(string) == 6); 214 } } 216  $bt_¡ršg_to_uuid16 ( bt_uuid_t * uuid , cÚ¡ * ¡ršg ) 218 ušt16_t u16 ; 219 * ’d±r = NULL ; 221 u16 = `¡¹Þ ( ¡ršg , & ’d±r , 16); 222 ià( ’d±r && (*endptr == '\0' || *endptr == '-')) { 223 `bt_uuid16_ü—‹ ( uuid , u16 ); 227  - EINVAL ; 228 } } 230  $bt_¡ršg_to_uuid32 ( bt_uuid_t * uuid , cÚ¡ * ¡ršg ) 232 ušt32_t u32 ; 233 * ’d±r = NULL ; 235 u32 = `¡¹Þ ( ¡ršg , & ’d±r , 16); 236 ià( ’d±r && *endptr == '\0') { 237 `bt_uuid32_ü—‹ ( uuid , u32 ); 241  - EINVAL ; 242 } } 244  $bt_¡ršg_to_uuid128 ( bt_uuid_t * uuid , cÚ¡ * ¡ršg ) 246 ušt32_t d©a0 , d©a4 ; 247 ušt16_t d©a1 , d©a2 , d©a3 , d©a5 ; 248 ušt128_t u128 ; 249 ušt8_t * v® = (ušt8_ˆ*è& u128 ; 251 ià( `ssÿnf ( ¡ršg , "%08x-%04hx-%04hx-%04hx-%08x%04hx", 252 & d©a0 , & d©a1 , & d©a2 , 253 & d©a3 , & d©a4 , & d©a5 ) != 6) 254  - EINVAL ; 256 d©a0 = `htÚl (data0); 257 d©a1 = `htÚs (data1); 258 d©a2 = `htÚs (data2); 259 d©a3 = `htÚs (data3); 260 d©a4 = `htÚl (data4); 261 d©a5 = `htÚs (data5); 263 `memýy (& v® [0], & d©a0 , 4); 264 `memýy (& v® [4], & d©a1 , 2); 265 `memýy (& v® [6], & d©a2 , 2); 266 `memýy (& v® [8], & d©a3 , 2); 267 `memýy (& v® [10], & d©a4 , 4); 268 `memýy (& v® [14], & d©a5 , 2); 270 `bt_uuid128_ü—‹ ( uuid , u128 ); 273 } } 275  $bt_¡ršg_to_uuid ( bt_uuid_t * uuid , cÚ¡ * ¡ršg ) 277 ià( `is_ba£_uuid128 ( ¡ršg )) 278  `bt_¡ršg_to_uuid16 ( uuid , ¡ršg + 4); 279 ià( `is_uuid128 ( ¡ršg )) 280  `bt_¡ršg_to_uuid128 ( uuid , ¡ršg ); 281 ià( `is_uuid32 ( ¡ršg )) 282  `bt_¡ršg_to_uuid32 ( uuid , ¡ršg ); 283 ià( `is_uuid16 ( ¡ršg )) 284  `bt_¡ršg_to_uuid16 ( uuid , ¡ršg ); 286  - EINVAL ; 287 } } 289  $bt_uuid_¡rcmp (cÚ¡ * a , cÚ¡ * b ) 291  `¡rÿ£cmp ( a , b ); 292 } } @lib/uuid.h 25 #iâdeà __BLUETOOTH_UUID_H 26  #__BLUETOOTH_UUID_H ) 28 #ifdeà __ýlu¥lus 32  ~<¡dšt.h > 33  ~ 35  #GENERIC_AUDIO_UUID "00001203-0000-1000-8000-00805f9b34fb" ) 37  #HSP_HS_UUID "00001108-0000-1000-8000-00805f9b34fb" ) 38  #HSP_AG_UUID "00001112-0000-1000-8000-00805f9b34fb" ) 40  #HFP_HS_UUID "0000111e-0000-1000-8000-00805f9b34fb" ) 41  #HFP_AG_UUID "0000111f-0000-1000-8000-00805f9b34fb" ) 43  #ADVANCED_AUDIO_UUID "0000110d-0000-1000-8000-00805f9b34fb" ) 45  #A2DP_SOURCE_UUID "0000110a-0000-1000-8000-00805f9b34fb" ) 46  #A2DP_SINK_UUID "0000110b-0000-1000-8000-00805f9b34fb" ) 48  #AVRCP_REMOTE_UUID "0000110e-0000-1000-8000-00805f9b34fb" ) 49  #AVRCP_TARGET_UUID "0000110c-0000-1000-8000-00805f9b34fb" ) 51  #PANU_UUID "00001115-0000-1000-8000-00805f9b34fb" ) 52  #NAP_UUID "00001116-0000-1000-8000-00805f9b34fb" ) 53  #GN_UUID "00001117-0000-1000-8000-00805f9b34fb" ) 54  #BNEP_SVC_UUID "0000000f-0000-1000-8000-00805f9b34fb" ) 56  #PNPID_UUID "00002a50-0000-1000-8000-00805f9b34fb" ) 57  #DEVICE_INFORMATION_UUID "0000180a-0000-1000-8000-00805f9b34fb" ) 59  #GATT_UUID "00001801-0000-1000-8000-00805f9b34fb" ) 60  #IMMEDIATE_ALERT_UUID "00001802-0000-1000-8000-00805f9b34fb" ) 61  #LINK_LOSS_UUID "00001803-0000-1000-8000-00805f9b34fb" ) 62  #TX_POWER_UUID "00001804-0000-1000-8000-00805f9b34fb" ) 63  #BATTERY_UUID "0000180f-0000-1000-8000-00805f9b34fb" ) 64  #SCAN_PARAMETERS_UUID "00001813-0000-1000-8000-00805f9b34fb" ) 66  #SAP_UUID "0000112D-0000-1000-8000-00805f9b34fb" ) 68  #HEART_RATE_UUID "0000180d-0000-1000-8000-00805f9b34fb" ) 69  #HEART_RATE_MEASUREMENT_UUID "00002a37-0000-1000-8000-00805f9b34fb" ) 70  #BODY_SENSOR_LOCATION_UUID "00002a38-0000-1000-8000-00805f9b34fb" ) 71  #HEART_RATE_CONTROL_POINT_UUID "00002a39-0000-1000-8000-00805f9b34fb" ) 73  #HEALTH_THERMOMETER_UUID "00001809-0000-1000-8000-00805f9b34fb" ) 74  #TEMPERATURE_MEASUREMENT_UUID "00002a1c-0000-1000-8000-00805f9b34fb" ) 75  #TEMPERATURE_TYPE_UUID "00002a1d-0000-1000-8000-00805f9b34fb" ) 76  #INTERMEDIATE_TEMPERATURE_UUID "00002a1e-0000-1000-8000-00805f9b34fb" ) 77  #MEASUREMENT_INTERVAL_UUID "00002a21-0000-1000-8000-00805f9b34fb" ) 79  #CYCLING_SC_UUID "00001816-0000-1000-8000-00805f9b34fb" ) 80  #CSC_MEASUREMENT_UUID "00002a5b-0000-1000-8000-00805f9b34fb" ) 81  #CSC_FEATURE_UUID "00002a5c-0000-1000-8000-00805f9b34fb" ) 82  #SENSOR_LOCATION_UUID "00002a5d-0000-1000-8000-00805f9b34fb" ) 83  #SC_CONTROL_POINT_UUID "00002a55-0000-1000-8000-00805f9b34fb" ) 85  #RFCOMM_UUID_STR "00000003-0000-1000-8000-00805f9b34fb" ) 87  #HDP_UUID "00001400-0000-1000-8000-00805f9b34fb" ) 88  #HDP_SOURCE_UUID "00001401-0000-1000-8000-00805f9b34fb" ) 89  #HDP_SINK_UUID "00001402-0000-1000-8000-00805f9b34fb" ) 91  #HID_UUID "00001124-0000-1000-8000-00805f9b34fb" ) 93  #DUN_GW_UUID "00001103-0000-1000-8000-00805f9b34fb" ) 95  #GAP_UUID "00001800-0000-1000-8000-00805f9b34fb" ) 96  #PNP_UUID "00001200-0000-1000-8000-00805f9b34fb" ) 98  #SPP_UUID "00001101-0000-1000-8000-00805f9b34fb" ) 100  #OBEX_SYNC_UUID "00001104-0000-1000-8000-00805f9b34fb" ) 101  #OBEX_OPP_UUID "00001105-0000-1000-8000-00805f9b34fb" ) 102  #OBEX_FTP_UUID "00001106-0000-1000-8000-00805f9b34fb" ) 103  #OBEX_PCE_UUID "0000112e-0000-1000-8000-00805f9b34fb" ) 104  #OBEX_PSE_UUID "0000112f-0000-1000-8000-00805f9b34fb" ) 105  #OBEX_PBAP_UUID "00001130-0000-1000-8000-00805f9b34fb" ) 106  #OBEX_MAS_UUID "00001132-0000-1000-8000-00805f9b34fb" ) 107  #OBEX_MNS_UUID "00001133-0000-1000-8000-00805f9b34fb" ) 108  #OBEX_MAP_UUID "00001134-0000-1000-8000-00805f9b34fb" ) 111  #GATT_PRIM_SVC_UUID 0x2800 ) 112  #GATT_SND_SVC_UUID 0x2801 ) 113  #GATT_INCLUDE_UUID 0x2802 ) 114  #GATT_CHARAC_UUID 0x2803 ) 117  #GATT_CHARAC_DEVICE_NAME 0x2A00 ) 118  #GATT_CHARAC_APPEARANCE 0x2A01 ) 119  #GATT_CHARAC_PERIPHERAL_PRIV_FLAG 0x2A02 ) 120  #GATT_CHARAC_RECONNECTION_ADDRESS 0x2A03 ) 121  #GATT_CHARAC_PERIPHERAL_PREF_CONN 0x2A04 ) 122  #GATT_CHARAC_SERVICE_CHANGED 0x2A05 ) 123  #GATT_CHARAC_SYSTEM_ID 0x2A23 ) 124  #GATT_CHARAC_MODEL_NUMBER_STRING 0x2A24 ) 125  #GATT_CHARAC_SERIAL_NUMBER_STRING 0x2A25 ) 126  #GATT_CHARAC_FIRMWARE_REVISION_STRING 0x2A26 ) 127  #GATT_CHARAC_HARDWARE_REVISION_STRING 0x2A27 ) 128  #GATT_CHARAC_SOFTWARE_REVISION_STRING 0x2A28 ) 129  #GATT_CHARAC_MANUFACTURER_NAME_STRING 0x2A29 ) 130  #GATT_CHARAC_PNP_ID 0x2A50 ) 133  #GATT_CHARAC_EXT_PROPER_UUID 0x2900 ) 134  #GATT_CHARAC_USER_DESC_UUID 0x2901 ) 135  #GATT_CLIENT_CHARAC_CFG_UUID 0x2902 ) 136  #GATT_SERVER_CHARAC_CFG_UUID 0x2903 ) 137  #GATT_CHARAC_FMT_UUID 0x2904 ) 138  #GATT_CHARAC_AGREG_FMT_UUID 0x2905 ) 139  #GATT_CHARAC_VALID_RANGE_UUID 0x2906 ) 140  #GATT_EXTERNAL_REPORT_REFERENCE 0x2907 ) 141  #GATT_REPORT_REFERENCE 0x2908 ) 145 BT_UUID_UNSPEC = 0, 146 BT_UUID16 = 16, 147 BT_UUID32 = 32, 148 BT_UUID128 = 128, 149 } ty³ ; 151 ušt16_t u16 ; 152 ušt32_t u32 ; 153 ušt128_t u128 ; 154 } v®ue ; 155 } tbt_uuid_t ; 157  bt_uuid_¡rcmp (cÚ¡ * a , cÚ¡ * b ); 159  bt_uuid16_ü—‹ ( bt_uuid_t * btuuid , ušt16_t v®ue ); 160  bt_uuid32_ü—‹ ( bt_uuid_t * btuuid , ušt32_t v®ue ); 161  bt_uuid128_ü—‹ ( bt_uuid_t * btuuid , ušt128_t v®ue ); 163  bt_uuid_cmp (cÚ¡ bt_uuid_t * uuid1 , cÚ¡ bt_uuid_ˆ* uuid2 ); 164  bt_uuid_to_uuid128 (cÚ¡ bt_uuid_t * ¤c , bt_uuid_ˆ* d¡ ); 166  #MAX_LEN_UUID_STR 37 ) 168  bt_uuid_to_¡ršg (cÚ¡ bt_uuid_t * uuid , * ¡r , size_t n ); 169  bt_¡ršg_to_uuid ( bt_uuid_t * uuid , cÚ¡ * ¡ršg ); 171  šlše  bt_uuid_Ën (cÚ¡ bt_uuid_t * uuid ) 173  uuid -> ty³ / 8; 176 #ifdeà __ýlu¥lus @monitor/analyze.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<¡ršg.h > 32  ~"¤c/sh¬ed/utž.h " 33  ~"¤c/sh¬ed/queue.h " 34  ~"¤c/sh¬ed/bt¢oÝ.h " 35  ~"mÚ™Ü/bt.h " 36  ~"ª®yze.h " 38  shci_dev { 39 ušt16_t mšdex ; 40 ušt8_t mty³ ; 41 ušt8_t mbdaddr [6]; 42  timev® mtime_added ; 43  timev® mtime_»moved ; 44  mnum_cmd ; 45  mnum_evt ; 46  mnum_aþ ; 47  mnum_sco ; 50  queue * gdev_li¡ ; 52  $dev_de¡roy (* d©a ) 54  hci_dev * dev = d©a ; 55 cÚ¡ * ¡r ; 57  dev -> ty³ ) { 59 ¡r = "BR/EDR"; 62 ¡r = "AMP"; 65 ¡r = "unknown"; 69 `´štf ("Found % cÚŒÞ˸w™h index %u\n", ¡r , dev -> šdex ); 70 `´štf (" BD_ADDR %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n", 71 dev -> bdaddr [5], dev->bdaddr[4], dev->bdaddr[3], 72 dev -> bdaddr [2], dev->bdaddr[1], dev->bdaddr[0]); 73 `´štf (" %lu commªds\n", dev -> num_cmd ); 74 `´štf (" %luƒv’ts\n", dev -> num_evt ); 75 `´štf (" %lu ACL…ack‘s\n", dev -> num_aþ ); 76 `´štf (" %lu SCO…ack‘s\n", dev -> num_sco ); 77 `´štf ("\n"); 79 `ä“ ( dev ); 80 } } 82  hci_dev * $dev_®loc ( ušt16_t šdex ) 84  hci_dev * dev ; 86 dev = `Ãw0 ( hci_dev , 1); 87 ià(! dev ) { 88 `årštf ( ¡d”r , "Failedo‡llocate‚ew deviceƒntry\n"); 89  NULL ; 92 dev -> šdex = index; 94  dev ; 95 } } 97  boÞ $dev_m©ch_šdex (cÚ¡ * a , cÚ¡ * b ) 99 cÚ¡  hci_dev * dev = a ; 100 ušt16_t šdex = `PTR_TO_UINT ( b ); 102  dev -> šdex == index; 103 } } 105  hci_dev * $dev_lookup ( ušt16_t šdex ) 107  hci_dev * dev ; 109 dev = `queue_fšd ( dev_li¡ , dev_m©ch_šdex , `UINT_TO_PTR ( šdex )); 110 ià(! dev ) { 111 `årštf ( ¡d”r , "Creating‚ew device for unknown index\n"); 113 dev = `dev_®loc ( šdex ); 114 ià(! dev ) 115  NULL ; 117 `queue_push_ž ( dev_li¡ , dev ); 120  dev ; 121 } } 123  $Ãw_šdex ( timev® * tv , ušt16_t šdex , 124 cÚ¡ * d©a , ušt16_t size ) 126 cÚ¡  bt¢oÝ_Ýcode_Ãw_šdex * ni = d©a ; 127  hci_dev * dev ; 129 dev = `dev_®loc ( šdex ); 130 ià(! dev ) 133 dev -> ty³ = ni ->type; 134 `memýy ( dev -> bdaddr , ni ->bdaddr, 6); 136 `queue_push_ž ( dev_li¡ , dev ); 137 } } 139  $d–_šdex ( timev® * tv , ušt16_t šdex , 140 cÚ¡ * d©a , ušt16_t size ) 142  hci_dev * dev ; 144 dev = `queue_»move_if ( dev_li¡ , dev_m©ch_šdex , `UINT_TO_PTR ( šdex )); 145 ià(! dev ) { 146 `årštf ( ¡d”r , "Remove for‡n unexisting device\n"); 150 `dev_de¡roy ( dev ); 151 } } 153  $commªd_pkt ( timev® * tv , ušt16_t šdex , 154 cÚ¡ * d©a , ušt16_t size ) 156 cÚ¡  bt_hci_cmd_hdr * hdr = d©a ; 157  hci_dev * dev ; 159 d©a +ð(* hdr ); 160 size -ð(* hdr ); 162 dev = `dev_lookup ( šdex ); 163 ià(! dev ) 166 dev -> num_cmd ++; 167 } } 169  $r¥_»ad_bd_addr ( hci_dev * dev ,  timev® * tv , 170 cÚ¡ * d©a , ušt16_t size ) 172 cÚ¡  bt_hci_r¥_»ad_bd_addr * r¥ = d©a ; 174 `´štf ("R—d BD Add¸ev’ˆw™h stu 0x%2.2x\n", r¥ -> ¡©us ); 176 ià( r¥ -> ¡©us ) 179 `memýy ( dev -> bdaddr , r¥ ->bdaddr, 6); 180 } } 182  $evt_cmd_com¶‘e ( hci_dev * dev ,  timev® * tv , 183 cÚ¡ * d©a , ušt16_t size ) 185 cÚ¡  bt_hci_evt_cmd_com¶‘e * evt = d©a ; 186 ušt16_t Ýcode ; 188 d©a +ð(* evt ); 189 size -ð(* evt ); 191 Ýcode = `Ë16_to_ýu ( evt ->opcode); 193  Ýcode ) { 194  BT_HCI_CMD_READ_BD_ADDR : 195 `r¥_»ad_bd_addr ( dev , tv , d©a , size ); 198 } } 200  $ev’t_pkt ( timev® * tv , ušt16_t šdex , 201 cÚ¡ * d©a , ušt16_t size ) 203 cÚ¡  bt_hci_evt_hdr * hdr = d©a ; 204  hci_dev * dev ; 206 d©a +ð(* hdr ); 207 size -ð(* hdr ); 209 dev = `dev_lookup ( šdex ); 210 ià(! dev ) 213 dev -> num_evt ++; 215  hdr -> evt ) { 216  BT_HCI_EVT_CMD_COMPLETE : 217 `evt_cmd_com¶‘e ( dev , tv , d©a , size ); 220 } } 222  $aþ_pkt ( timev® * tv , ušt16_t šdex , 223 cÚ¡ * d©a , ušt16_t size ) 225 cÚ¡  bt_hci_aþ_hdr * hdr = d©a ; 226  hci_dev * dev ; 228 d©a +ð(* hdr ); 229 size -ð(* hdr ); 231 dev = `dev_lookup ( šdex ); 232 ià(! dev ) 235 dev -> num_aþ ++; 236 } } 238  $sco_pkt ( timev® * tv , ušt16_t šdex , 239 cÚ¡ * d©a , ušt16_t size ) 241 cÚ¡  bt_hci_sco_hdr * hdr = d©a ; 242  hci_dev * dev ; 244 d©a +ð(* hdr ); 245 size -ð(* hdr ); 247 dev = `dev_lookup ( šdex ); 248 ià(! dev ) 251 dev -> num_sco ++; 252 } } 254  $ª®yze_Œaû (cÚ¡ * ·th ) 256  bt¢oÝ * bt¢oÝ_fže ; 257  num_·ck‘s = 0; 258 ušt32_t ty³ ; 260 bt¢oÝ_fže = `bt¢oÝ_Ý’ ( ·th , BTSNOOP_FLAG_PKLG_SUPPORT ); 261 ià(! bt¢oÝ_fže ) 264 ty³ = `bt¢oÝ_g‘_ty³ ( bt¢oÝ_fže ); 266  ty³ ) { 267  BTSNOOP_TYPE_HCI : 268  BTSNOOP_TYPE_UART : 269  BTSNOOP_TYPE_MONITOR : 272 `årštf ( ¡d”r , "Unsupported…acket format\n"); 273  dÚe ; 276 dev_li¡ = `queue_Ãw (); 277 ià(! dev_li¡ ) { 278 `årštf ( ¡d”r , "Failedo‡llocate device†ist\n"); 279  dÚe ; 283  buf [ BTSNOOP_MAX_PACKET_SIZE ]; 284  timev® tv ; 285 ušt16_t šdex , Ýcode , pkŽ’ ; 287 ià(! `bt¢oÝ_»ad_hci ( bt¢oÝ_fže , & tv , & šdex , & Ýcode , 288 buf , & pkŽ’ )) 291  Ýcode ) { 292  BTSNOOP_OPCODE_NEW_INDEX : 293 `Ãw_šdex (& tv , šdex , buf , pkŽ’ ); 295  BTSNOOP_OPCODE_DEL_INDEX : 296 `d–_šdex (& tv , šdex , buf , pkŽ’ ); 298  BTSNOOP_OPCODE_COMMAND_PKT : 299 `commªd_pkt (& tv , šdex , buf , pkŽ’ ); 301  BTSNOOP_OPCODE_EVENT_PKT : 302 `ev’t_pkt (& tv , šdex , buf , pkŽ’ ); 304  BTSNOOP_OPCODE_ACL_TX_PKT : 305  BTSNOOP_OPCODE_ACL_RX_PKT : 306 `aþ_pkt (& tv , šdex , buf , pkŽ’ ); 308  BTSNOOP_OPCODE_SCO_TX_PKT : 309  BTSNOOP_OPCODE_SCO_RX_PKT : 310 `sco_pkt (& tv , šdex , buf , pkŽ’ ); 313 `årštf ( ¡d”r , "WrÚg opcod%u\n", Ýcode ); 314  dÚe ; 317 num_·ck‘s ++; 320 `´štf ("T¿û cÚš %lu…ack‘s\n\n", num_·ck‘s ); 322 `queue_de¡roy ( dev_li¡ , dev_de¡roy ); 324 dÚe : 325 `bt¢oÝ_uÄef ( bt¢oÝ_fže ); 326 } } @monitor/analyze.h 25  ª®yze_Œaû (cÚ¡ * ·th ); @monitor/avctp.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<¡dlib.h > 31  ~<¡ršg.h > 32  ~<ùy³.h > 33  ~<š‰y³s.h > 35  ~ 37  ~"¤c/sh¬ed/utž.h " 38  ~"bt.h " 39  ~"·ck‘.h " 40  ~"di¥Ïy.h " 41  ~"l2ÿp.h " 42  ~"uuid.h " 43  ~"keys.h " 44  ~"sdp.h " 45  ~"avùp.h " 48  #AVC_CTYPE_CONTROL 0x0 ) 49  #AVC_CTYPE_STATUS 0x1 ) 50  #AVC_CTYPE_SPECIFIC_INQUIRY 0x2 ) 51  #AVC_CTYPE_NOTIFY 0x3 ) 52  #AVC_CTYPE_GENERAL_INQUIRY 0x4 ) 53  #AVC_CTYPE_NOT_IMPLEMENTED 0x8 ) 54  #AVC_CTYPE_ACCEPTED 0x9 ) 55  #AVC_CTYPE_REJECTED 0xA ) 56  #AVC_CTYPE_IN_TRANSITION 0xB ) 57  #AVC_CTYPE_STABLE 0xC ) 58  #AVC_CTYPE_CHANGED 0xD ) 59  #AVC_CTYPE_INTERIM 0xF ) 62  #AVC_SUBUNIT_MONITOR 0x00 ) 63  #AVC_SUBUNIT_AUDIO 0x01 ) 64  #AVC_SUBUNIT_PRINTER 0x02 ) 65  #AVC_SUBUNIT_DISC 0x03 ) 66  #AVC_SUBUNIT_TAPE 0x04 ) 67  #AVC_SUBUNIT_TURNER 0x05 ) 68  #AVC_SUBUNIT_CA 0x06 ) 69  #AVC_SUBUNIT_CAMERA 0x07 ) 70  #AVC_SUBUNIT_PANEL 0x09 ) 71  #AVC_SUBUNIT_BULLETIN_BOARD 0x0a ) 72  #AVC_SUBUNIT_CAMERA_STORAGE 0x0b ) 73  #AVC_SUBUNIT_VENDOR_UNIQUE 0x0c ) 74  #AVC_SUBUNIT_EXTENDED 0x1e ) 75  #AVC_SUBUNIT_UNIT 0x1f ) 78  #AVC_OP_VENDORDEP 0x00 ) 79  #AVC_OP_UNITINFO 0x30 ) 80  #AVC_OP_SUBUNITINFO 0x31 ) 81  #AVC_OP_PASSTHROUGH 0x7c ) 84  #AVRCP_EVENT_PLAYBACK_STATUS_CHANGED 0x01 ) 85  #AVRCP_EVENT_TRACK_CHANGED 0x02 ) 86  #AVRCP_EVENT_TRACK_REACHED_END 0x03 ) 87  #AVRCP_EVENT_TRACK_REACHED_START 0x04 ) 88  #AVRCP_EVENT_PLAYBACK_POS_CHANGED 0x05 ) 89  #AVRCP_EVENT_BATT_STATUS_CHANGED 0x06 ) 90  #AVRCP_EVENT_SYSTEM_STATUS_CHANGED 0x07 ) 91  #AVRCP_EVENT_PLAYER_APPLICATION_SETTING_CHANGED 0x08 ) 92  #AVRCP_EVENT_NOW_PLAYING_CONTENT_CHANGED 0x09 ) 93  #AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED 0x0a ) 94  #AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED 0x0b ) 95  #AVRCP_EVENT_UIDS_CHANGED 0x0c ) 96  #AVRCP_EVENT_VOLUME_CHANGED 0x0d ) 99  #AVRCP_STATUS_INVALID_COMMAND 0x00 ) 100  #AVRCP_STATUS_INVALID_PARAMETER 0x01 ) 101  #AVRCP_STATUS_NOT_FOUND 0x02 ) 102  #AVRCP_STATUS_INTERNAL_ERROR 0x03 ) 103  #AVRCP_STATUS_SUCCESS 0x04 ) 104  #AVRCP_STATUS_UID_CHANGED 0x05 ) 105  #AVRCP_STATUS_INVALID_DIRECTION 0x07 ) 106  #AVRCP_STATUS_NOT_DIRECTORY 0x08 ) 107  #AVRCP_STATUS_DOES_NOT_EXIST 0x09 ) 108  #AVRCP_STATUS_INVALID_SCOPE 0x0a ) 109  #AVRCP_STATUS_OUT_OF_BOUNDS 0x0b ) 110  #AVRCP_STATUS_IS_DIRECTORY 0x0c ) 111  #AVRCP_STATUS_MEDIA_IN_USE 0x0d ) 112  #AVRCP_STATUS_NOW_PLAYING_LIST_FULL 0x0e ) 113  #AVRCP_STATUS_SEARCH_NOT_SUPPORTED 0x0f ) 114  #AVRCP_STATUS_SEARCH_IN_PROGRESS 0x10 ) 115  #AVRCP_STATUS_INVALID_PLAYER_ID 0x11 ) 116  #AVRCP_STATUS_PLAYER_NOT_BROWSABLE 0x12 ) 117  #AVRCP_STATUS_PLAYER_NOT_ADDRESSED 0x13 ) 118  #AVRCP_STATUS_NO_VALID_SEARCH_RESULTS 0x14 ) 119  #AVRCP_STATUS_NO_AVAILABLE_PLAYERS 0x15 ) 120  #AVRCP_STATUS_ADDRESSED_PLAYER_CHANGED 0x16 ) 123  #AVRCP_GET_CAPABILITIES 0x10 ) 124  #AVRCP_LIST_PLAYER_ATTRIBUTES 0x11 ) 125  #AVRCP_LIST_PLAYER_VALUES 0x12 ) 126  #AVRCP_GET_CURRENT_PLAYER_VALUE 0x13 ) 127  #AVRCP_SET_PLAYER_VALUE 0x14 ) 128  #AVRCP_GET_PLAYER_ATTRIBUTE_TEXT 0x15 ) 129  #AVRCP_GET_PLAYER_VALUE_TEXT 0x16 ) 130  #AVRCP_DISPLAYABLE_CHARSET 0x17 ) 131  #AVRCP_CT_BATTERY_STATUS 0x18 ) 132  #AVRCP_GET_ELEMENT_ATTRIBUTES 0x20 ) 133  #AVRCP_GET_PLAY_STATUS 0x30 ) 134  #AVRCP_REGISTER_NOTIFICATION 0x31 ) 135  #AVRCP_REQUEST_CONTINUING 0x40 ) 136  #AVRCP_ABORT_CONTINUING 0x41 ) 137  #AVRCP_SET_ABSOLUTE_VOLUME 0x50 ) 138  #AVRCP_SET_ADDRESSED_PLAYER 0x60 ) 139  #AVRCP_SET_BROWSED_PLAYER 0x70 ) 140  #AVRCP_GET_FOLDER_ITEMS 0x71 ) 141  #AVRCP_CHANGE_PATH 0x72 ) 142  #AVRCP_GET_ITEM_ATTRIBUTES 0x73 ) 143  #AVRCP_PLAY_ITEM 0x74 ) 144  #AVRCP_SEARCH 0x80 ) 145  #AVRCP_ADD_TO_NOW_PLAYING 0x90 ) 146  #AVRCP_GENERAL_REJECT 0xA0 ) 149  #AVRCP_PACKET_TYPE_SINGLE 0x00 ) 150  #AVRCP_PACKET_TYPE_START 0x01 ) 151  #AVRCP_PACKET_TYPE_CONTINUING 0x02 ) 152  #AVRCP_PACKET_TYPE_END 0x03 ) 155  #AVRCP_ATTRIBUTE_ILEGAL 0x00 ) 156  #AVRCP_ATTRIBUTE_EQUALIZER 0x01 ) 157  #AVRCP_ATTRIBUTE_REPEAT_MODE 0x02 ) 158  #AVRCP_ATTRIBUTE_SHUFFLE 0x03 ) 159  #AVRCP_ATTRIBUTE_SCAN 0x04 ) 162  #AVRCP_MEDIA_ATTRIBUTE_ILLEGAL 0x00 ) 163  #AVRCP_MEDIA_ATTRIBUTE_TITLE 0x01 ) 164  #AVRCP_MEDIA_ATTRIBUTE_ARTIST 0x02 ) 165  #AVRCP_MEDIA_ATTRIBUTE_ALBUM 0x03 ) 166  #AVRCP_MEDIA_ATTRIBUTE_TRACK 0x04 ) 167  #AVRCP_MEDIA_ATTRIBUTE_TOTAL 0x05 ) 168  #AVRCP_MEDIA_ATTRIBUTE_GENRE 0x06 ) 169  #AVRCP_MEDIA_ATTRIBUTE_DURATION 0x07 ) 172  #AVRCP_PLAY_STATUS_STOPPED 0x00 ) 173  #AVRCP_PLAY_STATUS_PLAYING 0x01 ) 174  #AVRCP_PLAY_STATUS_PAUSED 0x02 ) 175  #AVRCP_PLAY_STATUS_FWD_SEEK 0x03 ) 176  #AVRCP_PLAY_STATUS_REV_SEEK 0x04 ) 177  #AVRCP_PLAY_STATUS_ERROR 0xFF ) 180  #AVRCP_MEDIA_PLAYER_LIST 0x00 ) 181  #AVRCP_MEDIA_PLAYER_VFS 0x01 ) 182  #AVRCP_MEDIA_SEARCH 0x02 ) 183  #AVRCP_MEDIA_NOW_PLAYING 0x03 ) 186  #AVC_PANEL_VOLUME_UP 0x41 ) 187  #AVC_PANEL_VOLUME_DOWN 0x42 ) 188  #AVC_PANEL_MUTE 0x43 ) 189  #AVC_PANEL_PLAY 0x44 ) 190  #AVC_PANEL_STOP 0x45 ) 191  #AVC_PANEL_PAUSE 0x46 ) 192  #AVC_PANEL_RECORD 0x47 ) 193  #AVC_PANEL_REWIND 0x48 ) 194  #AVC_PANEL_FAST_FORWARD 0x49 ) 195  #AVC_PANEL_EJECT 0x4a ) 196  #AVC_PANEL_FORWARD 0x4b ) 197  #AVC_PANEL_BACKWARD 0x4c ) 199  savùp_äame { 200 ušt8_t mhdr ; 201 ušt8_t m± ; 202 ušt16_t mpid ; 203  l2ÿp_äame ml2ÿp_äame ; 206  savrý_cÚtšušg { 207 ušt16_t mnum ; 208 ušt16_t msize ; 209 } gavrý_cÚtšušg ; 211 cÚ¡ * $ùy³2¡r ( ušt8_t ùy³ ) 213  ùy³ & 0x0f) { 214  AVC_CTYPE_CONTROL : 216  AVC_CTYPE_STATUS : 218  AVC_CTYPE_SPECIFIC_INQUIRY : 220  AVC_CTYPE_NOTIFY : 222  AVC_CTYPE_GENERAL_INQUIRY : 224  AVC_CTYPE_NOT_IMPLEMENTED : 226  AVC_CTYPE_ACCEPTED : 228  AVC_CTYPE_REJECTED : 230  AVC_CTYPE_IN_TRANSITION : 232  AVC_CTYPE_STABLE : 234  AVC_CTYPE_CHANGED : 236  AVC_CTYPE_INTERIM : 241 } } 243 cÚ¡ * $subun™2¡r ( ušt8_t subun™ ) 245  subun™ ) { 246  AVC_SUBUNIT_MONITOR : 248  AVC_SUBUNIT_AUDIO : 250  AVC_SUBUNIT_PRINTER : 252  AVC_SUBUNIT_DISC : 254  AVC_SUBUNIT_TAPE : 256  AVC_SUBUNIT_TURNER : 258  AVC_SUBUNIT_CA : 260  AVC_SUBUNIT_CAMERA : 262  AVC_SUBUNIT_PANEL : 264  AVC_SUBUNIT_BULLETIN_BOARD : 266  AVC_SUBUNIT_CAMERA_STORAGE : 268  AVC_SUBUNIT_VENDOR_UNIQUE : 270  AVC_SUBUNIT_EXTENDED : 272  AVC_SUBUNIT_UNIT : 277 } } 279 cÚ¡ * $Ýcode2¡r ( ušt8_t Ýcode ) 281  Ýcode ) { 282  AVC_OP_VENDORDEP : 284  AVC_OP_UNITINFO : 286  AVC_OP_SUBUNITINFO : 288  AVC_OP_PASSTHROUGH : 293 } } 295 * $ÿp2¡r ( ušt8_t ÿp ) 297  ÿp ) { 305 } } 307 * $ev’t2¡r ( ušt8_t ev’t ) 309  ev’t ) { 310  AVRCP_EVENT_PLAYBACK_STATUS_CHANGED : 312  AVRCP_EVENT_TRACK_CHANGED : 314  AVRCP_EVENT_TRACK_REACHED_END : 316  AVRCP_EVENT_TRACK_REACHED_START : 318  AVRCP_EVENT_PLAYBACK_POS_CHANGED : 320  AVRCP_EVENT_BATT_STATUS_CHANGED : 322  AVRCP_EVENT_SYSTEM_STATUS_CHANGED : 324  AVRCP_EVENT_PLAYER_APPLICATION_SETTING_CHANGED : 326  AVRCP_EVENT_NOW_PLAYING_CONTENT_CHANGED : 328  AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED : 330  AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED : 332  AVRCP_EVENT_UIDS_CHANGED : 334  AVRCP_EVENT_VOLUME_CHANGED : 339 } } 341 cÚ¡ * $”rÜ2¡r ( ušt8_t ¡©us ) 343  ¡©us ) { 344  AVRCP_STATUS_INVALID_COMMAND : 346  AVRCP_STATUS_INVALID_PARAMETER : 348  AVRCP_STATUS_NOT_FOUND : 350  AVRCP_STATUS_INTERNAL_ERROR : 352  AVRCP_STATUS_SUCCESS : 354  AVRCP_STATUS_UID_CHANGED : 356  AVRCP_STATUS_INVALID_DIRECTION : 358  AVRCP_STATUS_NOT_DIRECTORY : 360  AVRCP_STATUS_DOES_NOT_EXIST : 362  AVRCP_STATUS_INVALID_SCOPE : 364  AVRCP_STATUS_OUT_OF_BOUNDS : 366  AVRCP_STATUS_MEDIA_IN_USE : 368  AVRCP_STATUS_IS_DIRECTORY : 370  AVRCP_STATUS_NOW_PLAYING_LIST_FULL : 372  AVRCP_STATUS_SEARCH_NOT_SUPPORTED : 374  AVRCP_STATUS_SEARCH_IN_PROGRESS : 376  AVRCP_STATUS_INVALID_PLAYER_ID : 378  AVRCP_STATUS_PLAYER_NOT_BROWSABLE : 380  AVRCP_STATUS_PLAYER_NOT_ADDRESSED : 382  AVRCP_STATUS_NO_VALID_SEARCH_RESULTS : 384  AVRCP_STATUS_NO_AVAILABLE_PLAYERS : 386  AVRCP_STATUS_ADDRESSED_PLAYER_CHANGED : 391 } } 393 cÚ¡ * $pdu2¡r ( ušt8_t pduid ) 395  pduid ) { 396  AVRCP_GET_CAPABILITIES : 398  AVRCP_LIST_PLAYER_ATTRIBUTES : 400  AVRCP_LIST_PLAYER_VALUES : 402  AVRCP_GET_CURRENT_PLAYER_VALUE : 404  AVRCP_SET_PLAYER_VALUE : 406  AVRCP_GET_PLAYER_ATTRIBUTE_TEXT : 408  AVRCP_GET_PLAYER_VALUE_TEXT : 410  AVRCP_DISPLAYABLE_CHARSET : 412  AVRCP_CT_BATTERY_STATUS : 414  AVRCP_GET_ELEMENT_ATTRIBUTES : 416  AVRCP_GET_PLAY_STATUS : 418  AVRCP_REGISTER_NOTIFICATION : 420  AVRCP_REQUEST_CONTINUING : 422  AVRCP_ABORT_CONTINUING : 424  AVRCP_SET_ABSOLUTE_VOLUME : 426  AVRCP_SET_ADDRESSED_PLAYER : 428  AVRCP_SET_BROWSED_PLAYER : 430  AVRCP_GET_FOLDER_ITEMS : 432  AVRCP_CHANGE_PATH : 434  AVRCP_GET_ITEM_ATTRIBUTES : 436  AVRCP_PLAY_ITEM : 438  AVRCP_SEARCH : 440  AVRCP_ADD_TO_NOW_PLAYING : 442  AVRCP_GENERAL_REJECT : 447 } } 449 cÚ¡ * $±2¡r ( ušt8_t ± ) 451  ± ) { 452  AVRCP_PACKET_TYPE_SINGLE : 454  AVRCP_PACKET_TYPE_START : 456  AVRCP_PACKET_TYPE_CONTINUING : 458  AVRCP_PACKET_TYPE_END : 463 } } 465 cÚ¡ * $©Œ2¡r ( ušt8_t ©Œ ) 467  ©Œ ) { 468  AVRCP_ATTRIBUTE_ILEGAL : 470  AVRCP_ATTRIBUTE_EQUALIZER : 472  AVRCP_ATTRIBUTE_REPEAT_MODE : 474  AVRCP_ATTRIBUTE_SHUFFLE : 476  AVRCP_ATTRIBUTE_SCAN : 481 } } 483 cÚ¡ * $v®ue2¡r ( ušt8_t ©Œ , ušt8_ˆ v®ue ) 485  ©Œ ) { 486  AVRCP_ATTRIBUTE_ILEGAL : 488  AVRCP_ATTRIBUTE_EQUALIZER : 489  v®ue ) { 497  AVRCP_ATTRIBUTE_REPEAT_MODE : 498  v®ue ) { 510  AVRCP_ATTRIBUTE_SHUFFLE : 511  v®ue ) { 521  AVRCP_ATTRIBUTE_SCAN : 522  v®ue ) { 535 } } 537 cÚ¡ * $ch¬£t2¡r ( ušt16_t ch¬£t ) 539  ch¬£t ) { 568 } } 570 cÚ¡ * $medŸ‰r2¡r ( ušt32_t ©Œ ) 572  ©Œ ) { 573  AVRCP_MEDIA_ATTRIBUTE_ILLEGAL : 575  AVRCP_MEDIA_ATTRIBUTE_TITLE : 577  AVRCP_MEDIA_ATTRIBUTE_ARTIST : 579  AVRCP_MEDIA_ATTRIBUTE_ALBUM : 581  AVRCP_MEDIA_ATTRIBUTE_TRACK : 583  AVRCP_MEDIA_ATTRIBUTE_TOTAL : 585  AVRCP_MEDIA_ATTRIBUTE_GENRE : 587  AVRCP_MEDIA_ATTRIBUTE_DURATION : 592 } } 594 cÚ¡ * $¶ay¡©us2¡r ( ušt8_t ¡©us ) 596  ¡©us ) { 597  AVRCP_PLAY_STATUS_STOPPED : 599  AVRCP_PLAY_STATUS_PLAYING : 601  AVRCP_PLAY_STATUS_PAUSED : 603  AVRCP_PLAY_STATUS_FWD_SEEK : 605  AVRCP_PLAY_STATUS_REV_SEEK : 607  AVRCP_PLAY_STATUS_ERROR : 612 } } 614 cÚ¡ * $¡©us2¡r ( ušt8_t ¡©us ) 616  ¡©us ) { 630 } } 632 cÚ¡ * $scÝe2¡r ( ušt8_t scÝe ) 634  scÝe ) { 635  AVRCP_MEDIA_PLAYER_LIST : 637  AVRCP_MEDIA_PLAYER_VFS : 639  AVRCP_MEDIA_SEARCH : 641  AVRCP_MEDIA_NOW_PLAYING : 646 } } 648 * $Ý2¡r ( ušt8_t Ý ) 650  Ý & 0x7f) { 651  AVC_PANEL_VOLUME_UP : 653  AVC_PANEL_VOLUME_DOWN : 655  AVC_PANEL_MUTE : 657  AVC_PANEL_PLAY : 659  AVC_PANEL_STOP : 661  AVC_PANEL_PAUSE : 663  AVC_PANEL_RECORD : 665  AVC_PANEL_REWIND : 667  AVC_PANEL_FAST_FORWARD : 669  AVC_PANEL_EJECT : 671  AVC_PANEL_FORWARD : 673  AVC_PANEL_BACKWARD : 678 } } 680  boÞ $avrý_·s¡hrough_·ck‘ ( avùp_äame *avctp_frame, 681 ušt8_t šd’t ) 683  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 684 ušt8_t Ý , Ën ; 686 ià(! `l2ÿp_äame_g‘_u8 ( äame , & Ý )) 687  çl£ ; 689 `´št_f›ld ("%*cO³¿tiÚ: 0x%02x (% %s)", ( šd’t - 8), ' ', Ý , 690 `Ý2¡r ( Ý ), op & 0x80 ? "Released" : "Pressed"); 692 ià(! `l2ÿp_äame_g‘_u8 ( äame , & Ën )) 693  çl£ ; 695 `´št_f›ld ("%*cL’gth: 0x%02x", ( šd’t - 8), ' ', Ën ); 697 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 698  Œue ; 699 } } 701  boÞ $avrý_g‘_ÿ·bž™›s ( avùp_äame *avctp_frame, 702 ušt8_t ùy³ , ušt8_ˆ Ën , 703 ušt8_t šd’t ) 705  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 706 ušt8_t ÿp , couÁ ; 707  i ; 709 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ÿp )) 710  çl£ ; 712 `´št_f›ld ("%*cC­abž™yID: 0x%02x (%s)", ( šd’t - 8), ' ', ÿp , 713 `ÿp2¡r ( ÿp )); 715 ià( Ën == 1) 716  Œue ; 718 ià(! `l2ÿp_äame_g‘_u8 ( äame , & couÁ )) 719  çl£ ; 721 `´št_f›ld ("%*cC­abž™yCouÁ: 0x%02x", ( šd’t - 8), ' ', couÁ ); 723  ÿp ) { 725 ; couÁ > 0; count--) { 726 ušt8_t com·ny [3]; 728 ià(! `l2ÿp_äame_g‘_u8 ( äame , & com·ny [0]) || 729 ! `l2ÿp_äame_g‘_u8 ( äame , & com·ny [1]) || 730 ! `l2ÿp_äame_g‘_u8 ( äame , & com·ny [2])) 731  çl£ ; 733 `´št_f›ld ("%*c%s: 0x%02x%02x%02x", ( šd’t - 8), ' ', 734 `ÿp2¡r ( ÿp ), com·ny [0], company[1], 735 com·ny [2]); 739  i = 0; couÁ > 0; count--, i++) { 740 ušt8_t ev’t ; 742 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ev’t )) 743  çl£ ; 745 `´št_f›ld ("%*c%s: 0x%02x (%s)", ( šd’t - 8), ' ', 746 `ÿp2¡r ( ÿp ), ev’t , `ev’t2¡r (event)); 750 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 753  Œue ; 754 } } 756  boÞ $avrý_li¡_¶ay”_©Œibu‹s ( avùp_äame *avctp_frame, 757 ušt8_t ùy³ , ušt8_ˆ Ën , 758 ušt8_t šd’t ) 760  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 761 ušt8_t num ; 762  i ; 764 ià( Ën == 0) 765  Œue ; 767 ià(! `l2ÿp_äame_g‘_u8 ( äame , & num )) 768  çl£ ; 770 `´št_f›ld ("%*cA‰ribu‹CouÁ: 0x%02x", ( šd’t - 8), ' ', num ); 772  i = 0; num > 0;‚um--, i++) { 773 ušt8_t ©Œ ; 775 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ©Œ )) 776  çl£ ; 778 `´št_f›ld ("%*cA‰ribu‹ID: 0x%02x (%s)", ( šd’t - 8), ' ', 779 ©Œ , `©Œ2¡r (attr)); 782  Œue ; 783 } } 785  boÞ $avrý_li¡_¶ay”_v®ues ( avùp_äame *avctp_frame, 786 ušt8_t ùy³ , ušt8_ˆ Ën , 787 ušt8_t šd’t ) 789  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 790  ušt8_t ©Œ = 0; 791 ušt8_t num ; 793 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 794  »¥Ú£ ; 796 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ©Œ )) 797  çl£ ; 799 `´št_f›ld ("%*cA‰ribu‹ID: 0x%02x (%s)", ( šd’t - 8), ' ', 800 ©Œ , `©Œ2¡r (attr)); 802  Œue ; 804 »¥Ú£ : 805 ià(! `l2ÿp_äame_g‘_u8 ( äame , & num )) 806  çl£ ; 808 `´št_f›ld ("%*cV®ueCouÁ: 0x%02x", ( šd’t - 8), ' ', num ); 810 ; num > 0;‚um--) { 811 ušt8_t v®ue ; 813 ià(! `l2ÿp_äame_g‘_u8 ( äame , & v®ue )) 814  çl£ ; 816 `´št_f›ld ("%*cV®ueID: 0x%02x (%s)", ( šd’t - 8), 817 ' ', v®ue , `v®ue2¡r ( ©Œ , value)); 820  Œue ; 821 } } 823  boÞ $avrý_g‘_cu¼’t_¶ay”_v®ue ( avùp_äame *avctp_frame, 824 ušt8_t ùy³ , ušt8_ˆ Ën , 825 ušt8_t šd’t ) 827  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 828 ušt8_t num ; 830 ià(! `l2ÿp_äame_g‘_u8 ( äame , & num )) 831  çl£ ; 833 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 834  »¥Ú£ ; 836 `´št_f›ld ("%*cA‰ribu‹CouÁ: 0x%02x", ( šd’t - 8), ' ', num ); 838 ; num > 0;‚um--) { 839 ušt8_t ©Œ ; 841 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ©Œ )) 842  çl£ ; 844 `´št_f›ld ("%*cA‰ribu‹ID: 0x%02x (%s)", ( šd’t - 8), 845 ' ', ©Œ , `©Œ2¡r (attr)); 848  Œue ; 850 »¥Ú£ : 851 `´št_f›ld ("%*cV®ueCouÁ: 0x%02x", ( šd’t - 8), ' ', num ); 853 ; num > 0;‚um--) { 854 ušt8_t ©Œ , v®ue ; 856 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ©Œ )) 857  çl£ ; 859 `´št_f›ld ("%*cA‰ribu‹ID: 0x%02x (%s)", ( šd’t - 8), 860 ' ', ©Œ , `©Œ2¡r (attr)); 862 ià(! `l2ÿp_äame_g‘_u8 ( äame , & v®ue )) 863  çl£ ; 865 `´št_f›ld ("%*cV®ueID: 0x%02x (%s)", ( šd’t - 8), 866 ' ', v®ue , `v®ue2¡r ( ©Œ , value)); 869  Œue ; 870 } } 872  boÞ $avrý_£t_¶ay”_v®ue ( avùp_äame *avctp_frame, 873 ušt8_t ùy³ , ušt8_ˆ Ën , 874 ušt8_t šd’t ) 876  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 877 ušt8_t num ; 879 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 880  Œue ; 882 ià(! `l2ÿp_äame_g‘_u8 ( äame , & num )) 883  çl£ ; 885 `´št_f›ld ("%*cA‰ribu‹CouÁ: 0x%02x", ( šd’t - 8), ' ', num ); 887 ; num > 0;‚um--) { 888 ušt8_t ©Œ , v®ue ; 890 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ©Œ )) 891  çl£ ; 893 `´št_f›ld ("%*cA‰ribu‹ID: 0x%02x (%s)", ( šd’t - 8), ' ', 894 ©Œ , `©Œ2¡r (attr)); 896 ià(! `l2ÿp_äame_g‘_u8 ( äame , & v®ue )) 897  çl£ ; 899 `´št_f›ld ("%*cV®ueID: 0x%02x (%s)", ( šd’t - 8), ' ', 900 v®ue , `v®ue2¡r ( ©Œ , value)); 903  Œue ; 904 } } 906  boÞ $avrý_g‘_¶ay”_©Œibu‹_‹xt ( avùp_äame *avctp_frame, 907 ušt8_t ùy³ , ušt8_ˆ Ën , 908 ušt8_t šd’t ) 910  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 911 ušt8_t num ; 913 ià(! `l2ÿp_äame_g‘_u8 ( äame , & num )) 914  çl£ ; 916 `´št_f›ld ("%*cA‰ribu‹CouÁ: 0x%02x", ( šd’t - 8), ' ', num ); 918 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 919  »¥Ú£ ; 921 ; num > 0;‚um--) { 922 ušt8_t ©Œ ; 924 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ©Œ )) 925  çl£ ; 927 `´št_f›ld ("%*cA‰ribu‹ID: 0x%02x (%s)", ( šd’t - 8), 928 ' ', ©Œ , `©Œ2¡r (attr)); 931  Œue ; 933 »¥Ú£ : 934 ; num > 0;‚um--) { 935 ušt8_t ©Œ , Ën ; 936 ušt16_t ch¬£t ; 938 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ©Œ )) 939  çl£ ; 941 `´št_f›ld ("%*cA‰ribu‹ID: 0x%02x (%s)", ( šd’t - 8), 942 ' ', ©Œ , `©Œ2¡r (attr)); 944 ià(! `l2ÿp_äame_g‘_be16 ( äame , & ch¬£t )) 945  çl£ ; 947 `´št_f›ld ("%*cCh¬£tID: 0x%04x (%s)", ( šd’t - 8), 948 ' ', ch¬£t , `ch¬£t2¡r (charset)); 950 ià(! `l2ÿp_äame_g‘_u8 ( äame , & Ën )) 951  çl£ ; 953 `´št_f›ld ("%*cSŒšgL’gth: 0x%02x", ( šd’t - 8), ' ', Ën ); 955 `´štf ("String: "); 956 ; Ën > 0;†en--) { 957 ušt8_t c ; 959 ià(! `l2ÿp_äame_g‘_u8 ( äame , & c )) 960  çl£ ; 962 `´štf ("%1c", `i¥ršt ( c ) ? c : '.'); 964 `´štf ("\n"); 967  Œue ; 968 } } 970  boÞ $avrý_g‘_¶ay”_v®ue_‹xt ( avùp_äame *avctp_frame, 971 ušt8_t ùy³ , ušt8_ˆ Ën , 972 ušt8_t šd’t ) 974  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 975  ušt8_t ©Œ = 0; 976 ušt8_t num ; 978 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 979  »¥Ú£ ; 981 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ©Œ )) 982  çl£ ; 984 `´št_f›ld ("%*cA‰ribu‹ID: 0x%02x (%s)", ( šd’t - 8), ' ', 985 ©Œ , `©Œ2¡r (attr)); 987 ià(! `l2ÿp_äame_g‘_u8 ( äame , & num )) 988  çl£ ; 990 `´št_f›ld ("%*cV®ueCouÁ: 0x%02x", ( šd’t - 8), ' ', num ); 992 ; num > 0;‚um--) { 993 ušt8_t v®ue ; 995 ià(! `l2ÿp_äame_g‘_u8 ( äame , & v®ue )) 996  çl£ ; 998 `´št_f›ld ("%*cV®ueID: 0x%02x (%s)", ( šd’t - 8), 999 ' ', v®ue , `v®ue2¡r ( ©Œ , value)); 1002  Œue ; 1004 »¥Ú£ : 1005 ià(! `l2ÿp_äame_g‘_u8 ( äame , & num )) 1006  çl£ ; 1008 `´št_f›ld ("%*cV®ueCouÁ: 0x%02x", ( šd’t - 8), ' ', num ); 1010 ; num > 0;‚um--) { 1011 ušt8_t v®ue , Ën ; 1012 ušt16_t ch¬£t ; 1014 ià(! `l2ÿp_äame_g‘_u8 ( äame , & v®ue )) 1015  çl£ ; 1017 `´št_f›ld ("%*cV®ueID: 0x%02x (%s)", ( šd’t - 8), ' ', 1018 v®ue , `v®ue2¡r ( ©Œ , value)); 1020 ià(! `l2ÿp_äame_g‘_be16 ( äame , & ch¬£t )) 1021  çl£ ; 1023 `´št_f›ld ("%*cCh¬£tIDID: 0x%02x (%s)", ( šd’t - 8), ' ', 1024 ch¬£t , `ch¬£t2¡r (charset)); 1026 ià(! `l2ÿp_äame_g‘_u8 ( äame , & Ën )) 1027  çl£ ; 1029 `´št_f›ld ("%*cSŒšgL’gth: 0x%02x", ( šd’t - 8), ' ', Ën ); 1031 `´štf ("String: "); 1032 ; Ën > 0;†en--) { 1033 ušt8_t c ; 1035 ià(! `l2ÿp_äame_g‘_u8 ( äame , & c )) 1036  çl£ ; 1038 `´štf ("%1c", `i¥ršt ( c ) ? c : '.'); 1040 `´štf ("\n"); 1043  Œue ; 1044 } } 1046  boÞ $avrý_di¥ÏyabË_ch¬£t ( avùp_äame *avctp_frame, 1047 ušt8_t ùy³ , ušt8_ˆ Ën , 1048 ušt8_t šd’t ) 1050  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 1051 ušt8_t num ; 1053 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 1054  Œue ; 1056 ià(! `l2ÿp_äame_g‘_u8 ( äame , & num )) 1057  çl£ ; 1059 `´št_f›ld ("%*cCh¬£tCouÁ: 0x%02x", ( šd’t - 8), ' ', num ); 1061 ; num > 0;‚um--) { 1062 ušt16_t ch¬£t ; 1064 ià(! `l2ÿp_äame_g‘_be16 ( äame , & ch¬£t )) 1065  çl£ ; 1067 `´št_f›ld ("%*cCh¬£tID: 0x%04x (%s)", ( šd’t - 8), 1068 ' ', ch¬£t , `ch¬£t2¡r (charset)); 1071  Œue ; 1072 } } 1074  boÞ $avrý_g‘_–em’t_©Œibu‹s ( avùp_äame *avctp_frame, 1075 ušt8_t ùy³ , ušt8_ˆ Ën , 1076 ušt8_t šd’t ) 1078  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 1079 ušt64_t id ; 1080 ušt8_t num ; 1082 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 1083  »¥Ú£ ; 1085 ià(! `l2ÿp_äame_g‘_be64 ( äame , & id )) 1086  çl£ ; 1088 `´št_f›ld ("%*cId’tif›r: 0x%jx (%s)", ( šd’t - 8), ' ', 1089 id , id ? "Reserved" : "PLAYING"); 1091 ià(! `l2ÿp_äame_g‘_u8 ( äame , & num )) 1092  çl£ ; 1094 `´št_f›ld ("%*cA‰ribu‹CouÁ: 0x%02x", ( šd’t - 8), ' ', num ); 1096 ; num > 0;‚um--) { 1097 ušt32_t ©Œ ; 1099 ià(! `l2ÿp_äame_g‘_be32 ( äame , & ©Œ )) 1100  çl£ ; 1102 `´št_f›ld ("%*cA‰ribu‹: 0x%08x (%s)", ( šd’t - 8), 1103 ' ', ©Œ , `medŸ‰r2¡r (attr)); 1106  Œue ; 1108 »¥Ú£ : 1109  avùp_äame -> ± ) { 1110  AVRCP_PACKET_TYPE_SINGLE : 1111  AVRCP_PACKET_TYPE_START : 1112 ià(! `l2ÿp_äame_g‘_u8 ( äame , & num )) 1113  çl£ ; 1115 avrý_cÚtšušg . num =‚um; 1116 `´št_f›ld ("%*cA‰ribu‹CouÁ: 0x%02x", ( šd’t - 8), 1117 ' ', num ); 1118 Ën --; 1120  AVRCP_PACKET_TYPE_CONTINUING : 1121  AVRCP_PACKET_TYPE_END : 1122 num = avrý_cÚtšušg .num; 1124 ià( avrý_cÚtšušg . size > 0) { 1125  ©Œv® [ UINT8_MAX ] = {0}; 1126 ušt16_t size ; 1127 ušt8_t idx ; 1129 ià( avrý_cÚtšušg . size > Ën ) { 1130 size = Ën ; 1131 avrý_cÚtšušg . size -ð Ën ; 1133 size = avrý_cÚtšušg .size; 1134 avrý_cÚtšušg . size = 0; 1137  idx = 0; size > 0; idx++, size--) { 1138 ušt8_t c ; 1140 ià(! `l2ÿp_äame_g‘_u8 ( äame , & c )) 1141  çžed ; 1143 `¥rštf (& ©Œv® [ idx ], "%1c", 1144 `i¥ršt ( c ) ? c : '.'); 1146 `´št_f›ld ("%*cContinuingAttributeValue: %s", 1147 ( šd’t - 8), ' ', ©Œv® ); 1149 Ën -ð size ; 1153  çžed ; 1156  num > 0 && Ën > 0) { 1157 ušt32_t ©Œ ; 1158 ušt16_t ch¬£t , ©ŒËn ; 1159 ušt8_t idx ; 1160  ©Œv® [ UINT8_MAX ] = {0}; 1162 ià(! `l2ÿp_äame_g‘_be32 ( äame , & ©Œ )) 1163  çžed ; 1165 `´št_f›ld ("%*cA‰ribu‹: 0x%08x (%s)", ( šd’t - 8), 1166 ' ', ©Œ , `medŸ‰r2¡r (attr)); 1168 ià(! `l2ÿp_äame_g‘_be16 ( äame , & ch¬£t )) 1169  çžed ; 1171 `´št_f›ld ("%*cCh¬£tID: 0x%04x (%s)", ( šd’t - 8), 1172 ' ', ch¬£t , `ch¬£t2¡r (charset)); 1174 ià(! `l2ÿp_äame_g‘_be16 ( äame , & ©ŒËn )) 1175  çžed ; 1177 `´št_f›ld ("%*cAttributeValueLength: 0x%04x", 1178 ( šd’t - 8), ' ', ©ŒËn ); 1180 Ën -ð( ©Œ è+ ( ch¬£t è+ ( ©ŒËn ); 1181 num --; 1183  idx = 0; ©ŒËn > 0 && Ën > 0; idx++,‡ttrlen--,†en--) { 1184 ušt8_t c ; 1186 ià(! `l2ÿp_äame_g‘_u8 ( äame , & c )) 1187  çžed ; 1189 `¥rštf (& ©Œv® [ idx ], "%1c", `i¥ršt ( c ) ? c : '.'); 1191 `´št_f›ld ("%*cA‰ribu‹V®ue: %s", ( šd’t - 8), 1192 ' ', ©Œv® ); 1194 ià( ©ŒËn > 0) 1195 avrý_cÚtšušg . size = ©ŒËn ; 1198 avrý_cÚtšušg . num =‚um; 1199  Œue ; 1201 çžed : 1202 avrý_cÚtšušg . num = 0; 1203 avrý_cÚtšušg . size = 0; 1204  çl£ ; 1205 } } 1207  boÞ $avrý_g‘_¶ay_¡©us ( avùp_äame *avctp_frame, 1208 ušt8_t ùy³ , ušt8_ˆ Ën , 1209 ušt8_t šd’t ) 1211  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 1212 ušt32_t š‹rv® ; 1213 ušt8_t ¡©us ; 1215 ià( ùy³ <ð AVC_CTYPE_GENERAL_INQUIRY ) 1216  Œue ; 1218 ià(! `l2ÿp_äame_g‘_be32 ( äame , & š‹rv® )) 1219  çl£ ; 1221 `´št_f›ld ("%*cSongLength: 0x%08x (%u miliseconds)", 1222 ( šd’t - 8), ' ', š‹rv® , interval); 1224 ià(! `l2ÿp_äame_g‘_be32 ( äame , & š‹rv® )) 1225  çl£ ; 1227 `´št_f›ld ("%*cSongPosition: 0x%08x (%u miliseconds)", 1228 ( šd’t - 8), ' ', š‹rv® , interval); 1230 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ¡©us )) 1231  çl£ ; 1233 `´št_f›ld ("%*cPÏyStus: 0x%02x (%s)", ( šd’t - 8), 1234 ' ', ¡©us , `¶ay¡©us2¡r (status)); 1236  Œue ; 1237 } } 1239  boÞ $avrý_»gi¡”_nÙifiÿtiÚ ( avùp_äame *avctp_frame, 1240 ušt8_t ùy³ , ušt8_ˆ Ën , 1241 ušt8_t šd’t ) 1243  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 1244 ušt8_t ev’t , ¡©us ; 1245 ušt16_t uid ; 1246 ušt32_t š‹rv® ; 1247 ušt64_t id ; 1249 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 1250  »¥Ú£ ; 1252 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ev’t )) 1253  çl£ ; 1255 `´št_f›ld ("%*cEv’tID: 0x%02x (%s)", ( šd’t - 8), 1256 ' ', ev’t , `ev’t2¡r (event)); 1258 ià(! `l2ÿp_äame_g‘_be32 ( äame , & š‹rv® )) 1259  çl£ ; 1261 `´št_f›ld ("%*cInterval: 0x%08x (%u seconds)", 1262 ( šd’t - 8), ' ', š‹rv® , interval); 1264  Œue ; 1266 »¥Ú£ : 1267 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ev’t )) 1268  çl£ ; 1270 `´št_f›ld ("%*cEv’tID: 0x%02x (%s)", ( šd’t - 8), 1271 ' ', ev’t , `ev’t2¡r (event)); 1273  ev’t ) { 1274  AVRCP_EVENT_PLAYBACK_STATUS_CHANGED : 1275 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ¡©us )) 1276  çl£ ; 1278 `´št_f›ld ("%*cPÏyStus: 0x%02x (%s)", ( šd’t - 8), 1279 ' ', ¡©us , `¶ay¡©us2¡r (status)); 1281  AVRCP_EVENT_TRACK_CHANGED : 1282 ià(! `l2ÿp_äame_g‘_be64 ( äame , & id )) 1283  çl£ ; 1285 `´št_f›ld ("%*cId’tif›r: 0x%16" PRIx64 " (%" PRIu64 ")", 1286 ( šd’t - 8), ' ', id , id); 1288  AVRCP_EVENT_PLAYBACK_POS_CHANGED : 1289 ià(! `l2ÿp_äame_g‘_be32 ( äame , & š‹rv® )) 1290  çl£ ; 1292 `´št_f›ld ("%*cPosition: 0x%08x (%u miliseconds)", 1293 ( šd’t - 8), ' ', š‹rv® , interval); 1295  AVRCP_EVENT_BATT_STATUS_CHANGED : 1296 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ¡©us )) 1297  çl£ ; 1299 `´št_f›ld ("%*cB©‹ryStus: 0x%02x (%s)", ( šd’t - 8), 1300 ' ', ¡©us , `¡©us2¡r (status)); 1303  AVRCP_EVENT_SYSTEM_STATUS_CHANGED : 1304 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ¡©us )) 1305  çl£ ; 1307 `´št_f›ld ("%*cSy¡emStus: 0x%02x ", ( šd’t - 8), 1308 ' ', ¡©us ); 1309  ¡©us ) { 1311 `´štf ("(POWER_ON)\n"); 1314 `´štf ("(POWER_OFF)\n"); 1317 `´štf ("(UNPLUGGED)\n"); 1320 `´štf ("(UNKOWN)\n"); 1324  AVRCP_EVENT_PLAYER_APPLICATION_SETTING_CHANGED : 1325 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ¡©us )) 1326  çl£ ; 1328 `´št_f›ld ("%*cA‰ribu‹CouÁ: 0x%02x", ( šd’t - 8), 1329 ' ', ¡©us ); 1331 ; ¡©us > 0; status--) { 1332 ušt8_t ©Œ , v®ue ; 1334 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ©Œ )) 1335  çl£ ; 1337 `´št_f›ld ("%*cAttributeID: 0x%02x (%s)", 1338 ( šd’t - 8), ' ', ©Œ , `©Œ2¡r (attr)); 1340 ià(! `l2ÿp_äame_g‘_u8 ( äame , & v®ue )) 1341  çl£ ; 1343 `´št_f›ld ("%*cV®ueID: 0x%02x (%s)", ( šd’t - 8), 1344 ' ', v®ue , `v®ue2¡r ( ©Œ , value)); 1347  AVRCP_EVENT_VOLUME_CHANGED : 1348 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ¡©us )) 1349  çl£ ; 1351 ¡©us &= 0x7F; 1353 `´št_f›ld ("%*cVÞume: %.2f%% (%d/127)", ( šd’t - 8), 1354 ' ', ¡©us /1.27, status); 1356  AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED : 1357 ià(! `l2ÿp_äame_g‘_be16 ( äame , & uid )) 1358  çl£ ; 1360 `´št_f›ld ("%*cPÏy”ID: 0x%04x (%u)", ( šd’t - 8), 1361 ' ', uid , uid); 1363 ià(! `l2ÿp_äame_g‘_be16 ( äame , & uid )) 1364  çl£ ; 1366 `´št_f›ld ("%*cUIDCouÁ”: 0x%04x (%u)", ( šd’t - 8), 1367 ' ', uid , uid); 1369  AVRCP_EVENT_UIDS_CHANGED : 1370 ià(! `l2ÿp_äame_g‘_be16 ( äame , & uid )) 1371  çl£ ; 1373 `´št_f›ld ("%*cUIDCouÁ”: 0x%04x (%u)", ( šd’t - 8), 1374 ' ', uid , uid); 1378  Œue ; 1379 } } 1381  boÞ $avrý_£t_absÞu‹_vÞume ( avùp_äame *avctp_frame, 1382 ušt8_t ùy³ , ušt8_ˆ Ën , 1383 ušt8_t šd’t ) 1385  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 1386 ušt8_t v®ue ; 1388 ià(! `l2ÿp_äame_g‘_u8 ( äame , & v®ue )) 1389  çl£ ; 1391 v®ue &= 0x7F; 1392 `´št_f›ld ("%*cVÞume: %.2f%% (%d/127)", ( šd’t - 8), 1393 ' ', v®ue /1.27, value); 1395  Œue ; 1396 } } 1398  boÞ $avrý_£t_add»s£d_¶ay” ( avùp_äame *avctp_frame, 1399 ušt8_t ùy³ , ušt8_ˆ Ën , 1400 ušt8_t šd’t ) 1402  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 1403 ušt16_t id ; 1404 ušt8_t ¡©us ; 1406 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 1407  »¥Ú£ ; 1409 ià(! `l2ÿp_äame_g‘_be16 ( äame , & id )) 1410  çl£ ; 1412 `´št_f›ld ("%*cPÏy”ID: 0x%04x (%u)", ( šd’t - 8), ' ', id , id); 1414  Œue ; 1416 »¥Ú£ : 1417 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ¡©us )) 1418  çl£ ; 1420 `´št_f›ld ("%*cStus: 0x%02x (%s)", ( šd’t - 8), ' ', 1421 ¡©us , `”rÜ2¡r (status)); 1423  Œue ; 1424 } } 1426  boÞ $avrý_¶ay_™em ( avùp_äame *avùp_äame, ušt8_t ùy³ , 1427 ušt8_t Ën , ušt8_ˆ šd’t ) 1429  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 1430 ušt64_t uid ; 1431 ušt16_t uidcouÁ” ; 1432 ušt8_t scÝe , ¡©us ; 1434 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 1435  »¥Ú£ ; 1437 ià(! `l2ÿp_äame_g‘_u8 ( äame , & scÝe )) 1438  çl£ ; 1440 `´št_f›ld ("%*cScÝe: 0x%02x (%s)", ( šd’t - 8), ' ', 1441 scÝe , `scÝe2¡r (scope)); 1443 ià(! `l2ÿp_äame_g‘_be64 ( äame , & uid )) 1444  çl£ ; 1446 `´št_f›ld ("%*cUID: 0x%16" PRIx64 " (%" PRIu64 ")", ( šd’t - 8), 1447 ' ', uid , uid); 1449 ià(! `l2ÿp_äame_g‘_be16 ( äame , & uidcouÁ” )) 1450  çl£ ; 1452 `´št_f›ld ("%*cUIDCouÁ”: 0x%04x (%u)", ( šd’t - 8), ' ', 1453 uidcouÁ” , uidcounter); 1455  Œue ; 1457 »¥Ú£ : 1458 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ¡©us )) 1459  çl£ ; 1461 `´št_f›ld ("%*cStus: 0x%02x (%s)", ( šd’t - 8), ' ', ¡©us , 1462 `”rÜ2¡r ( ¡©us )); 1464  Œue ; 1465 } } 1467  boÞ $avrý_add_to_now_¶ayšg ( avùp_äame *avctp_frame, 1468 ušt8_t ùy³ , ušt8_ˆ Ën , 1469 ušt8_t šd’t ) 1471  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 1472 ušt64_t uid ; 1473 ušt16_t uidcouÁ” ; 1474 ušt8_t scÝe , ¡©us ; 1476 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 1477  »¥Ú£ ; 1479 ià(! `l2ÿp_äame_g‘_u8 ( äame , & scÝe )) 1480  çl£ ; 1482 `´št_f›ld ("%*cScÝe: 0x%02x (%s)", ( šd’t - 8), ' ', 1483 scÝe , `scÝe2¡r (scope)); 1485 ià(! `l2ÿp_äame_g‘_be64 ( äame , & uid )) 1486  çl£ ; 1488 `´št_f›ld ("%*cUID: 0x%16" PRIx64 " (%" PRIu64 ")", ( šd’t - 8), 1489 ' ', uid , uid); 1491 ià(! `l2ÿp_äame_g‘_be16 ( äame , & uidcouÁ” )) 1492  çl£ ; 1494 `´št_f›ld ("%*cUIDCouÁ”: 0x%04x (%u)", ( šd’t - 8), ' ', 1495 uidcouÁ” , uidcounter); 1497  Œue ; 1499 »¥Ú£ : 1500 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ¡©us )) 1501  çl£ ; 1503 `´št_f›ld ("%*cStus: 0x%02x (%s)", ( šd’t - 8), ' ', ¡©us , 1504 `”rÜ2¡r ( ¡©us )); 1506  Œue ; 1507 } } 1509  savrý_ù¾_pdu_d©a { 1510 ušt8_t mpduid ; 1511 boÞ (* func è( avùp_äame * mavùp_äame , ušt8_t mùy³ , 1512 ušt8_t mËn , ušt8_ˆ mšd’t ); 1515 cÚ¡  avrý_ù¾_pdu_d©a gavrý_ù¾_pdu_bË [] = { 1516 { 0x10, avrý_g‘_ÿ·bž™›s }, 1517 { 0x11, avrý_li¡_¶ay”_©Œibu‹s }, 1518 { 0x12, avrý_li¡_¶ay”_v®ues }, 1519 { 0x13, avrý_g‘_cu¼’t_¶ay”_v®ue }, 1520 { 0x14, avrý_£t_¶ay”_v®ue }, 1521 { 0x15, avrý_g‘_¶ay”_©Œibu‹_‹xt }, 1522 { 0x16, avrý_g‘_¶ay”_v®ue_‹xt }, 1523 { 0x17, avrý_di¥ÏyabË_ch¬£t }, 1524 { 0x20, avrý_g‘_–em’t_©Œibu‹s }, 1525 { 0x30, avrý_g‘_¶ay_¡©us }, 1526 { 0x31, avrý_»gi¡”_nÙifiÿtiÚ }, 1527 { 0x50, avrý_£t_absÞu‹_vÞume }, 1528 { 0x60, avrý_£t_add»s£d_¶ay” }, 1529 { 0x74, avrý_¶ay_™em }, 1530 { 0x90, avrý_add_to_now_¶ayšg }, 1534  boÞ $avrý_»jeùed_·ck‘ ( l2ÿp_äame * äame , ušt8_t šd’t ) 1536 ušt8_t ¡©us ; 1538 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ¡©us )) 1539  çl£ ; 1541 `´št_f›ld ("%*cE¼Ü: 0x%02x (%s)", ( šd’t - 8), ' ', ¡©us , 1542 `”rÜ2¡r ( ¡©us )); 1544  Œue ; 1545 } } 1547  boÞ $avrý_pdu_·ck‘ ( avùp_äame *avùp_äame, ušt8_t ùy³ , 1548 ušt8_t šd’t ) 1550  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 1551 ušt8_t pduid ; 1552 ušt16_t Ën ; 1553  i ; 1554 cÚ¡  avrý_ù¾_pdu_d©a * ù¾_pdu_d©a = NULL ; 1556 ià(! `l2ÿp_äame_g‘_u8 ( äame , & pduid )) 1557  çl£ ; 1559 ià(! `l2ÿp_äame_g‘_u8 ( äame , & avùp_äame -> ± )) 1560  çl£ ; 1562 ià(! `l2ÿp_äame_g‘_be16 ( äame , & Ën )) 1563  çl£ ; 1565 `´št_šd’t ( šd’t , COLOR_OFF , "AVRCP: ", `pdu2¡r ( pduid ), COLOR_OFF, 1566 "…ˆ% ËÀ0x%04x", `±2¡r ( avùp_äame -> ± ), Ën ); 1568 ià( äame -> size !ð Ën ) 1569  çl£ ; 1571 ià( ùy³ == 0xA) 1572  `avrý_»jeùed_·ck‘ ( äame , šd’t + 2); 1574  i = 0; avrý_ù¾_pdu_bË [i]. func ; i++) { 1575 ià( avrý_ù¾_pdu_bË [ i ]. pduid ==…duid) { 1576 ù¾_pdu_d©a = & avrý_ù¾_pdu_bË [ i ]; 1581 ià(! ù¾_pdu_d©a || !ù¾_pdu_d©a-> func ) { 1582 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 1583  Œue ; 1586  ù¾_pdu_d©a -> `func ( avùp_äame , ùy³ , Ën , šd’t + 2); 1587 } } 1589  boÞ $avrý_cÚŒÞ_·ck‘ ( avùp_äame *avctp_frame) 1591  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 1593 ušt8_t ùy³ , add»ss , subun™ , Ýcode , com·ny [3], šd’t = 2; 1595 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ùy³ ) || 1596 ! `l2ÿp_äame_g‘_u8 ( äame , & add»ss ) || 1597 ! `l2ÿp_äame_g‘_u8 ( äame , & Ýcode )) 1598  çl£ ; 1600 `´št_f›ld ("AV/C: %s:‡ddress 0x%02x opcode 0x%02x", 1601 `ùy³2¡r ( ùy³ ), add»ss , Ýcode ); 1603 subun™ = add»ss >> 3; 1605 `´št_f›ld ("%*cSubun™: %s", šd’t , ' ', `subun™2¡r ( subun™ )); 1607 `´št_f›ld ("%*cOpcode: %s", šd’t , ' ', `Ýcode2¡r ( Ýcode )); 1610 ià( subun™ != 0x09) { 1611 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 1612  Œue ; 1616 ià( ùy³ == 0x8) { 1617 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 1618  Œue ; 1621  Ýcode ) { 1623  `avrý_·s¡hrough_·ck‘ ( avùp_äame , 10); 1625 ià(! `l2ÿp_äame_g‘_u8 ( äame , & com·ny [0]) || 1626 ! `l2ÿp_äame_g‘_u8 ( äame , & com·ny [1]) || 1627 ! `l2ÿp_äame_g‘_u8 ( äame , & com·ny [2])) 1628  çl£ ; 1630 `´št_f›ld ("%*cCom·ny ID: 0x%02x%02x%02x", šd’t , ' ', 1631 com·ny [0], company[1], company[2]); 1633  `avrý_pdu_·ck‘ ( avùp_äame , ùy³ , 10); 1635 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 1636  Œue ; 1638 } } 1640  boÞ $avrý_browsšg_·ck‘ ( avùp_äame *avctp_frame) 1642  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 1644 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 1645  Œue ; 1646 } } 1648  $avrý_·ck‘ ( avùp_äame *avctp_frame) 1650  l2ÿp_äame * äame = & avùp_äame ->l2cap_frame; 1651 boÞ »t ; 1653  äame -> psm ) { 1655 »t = `avrý_cÚŒÞ_·ck‘ ( avùp_äame ); 1658 »t = `avrý_browsšg_·ck‘ ( avùp_äame ); 1661 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 1665 ià(! »t ) { 1666 `´št_‹xt ( COLOR_ERROR , "PDU malformed"); 1667 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 1669 } } 1671  $avùp_·ck‘ (cÚ¡  l2ÿp_äame * äame ) 1673  l2ÿp_äame *l2cap_frame; 1674  avùp_äame ‡vctp_frame; 1675 cÚ¡ * pdu_cÞÜ ; 1677 `l2ÿp_äame_puÎ (& avùp_äame . l2ÿp_äame , äame , 0); 1679 l2ÿp_äame = & avùp_äame .l2cap_frame; 1681 ià(! `l2ÿp_äame_g‘_u8 ( l2ÿp_äame , & avùp_äame . hdr ) || 1682 ! `l2ÿp_äame_g‘_be16 ( l2ÿp_äame , & avùp_äame . pid )) { 1683 `´št_‹xt ( COLOR_ERROR , "frameoo short"); 1684 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 1688 ià( äame -> š ) 1689 pdu_cÞÜ = COLOR_MAGENTA ; 1691 pdu_cÞÜ = COLOR_BLUE ; 1693 `´št_šd’t (6, pdu_cÞÜ , "AVCTP", "", COLOR_OFF , 1695 äame -> psm == 23 ? "Control" : "Browsing", 1696 avùp_äame . hdr & 0x02 ? "Response" : "Command", 1697 avùp_äame . hdr & 0x0c,‡vctp_frame.hdr >> 4, 1698 avùp_äame . pid ); 1700 ià( avùp_äame . pid == 0x110e ||‡vctp_frame.pid == 0x110c) 1701 `avrý_·ck‘ (& avùp_äame ); 1703 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 1704 } } @monitor/avctp.h 25  avùp_·ck‘ (cÚ¡  l2ÿp_äame * äame ); @monitor/bt.h 25  ~<¡dšt.h > 27  sbt_Î_hdr { 28 ušt8_t m´—mbË ; 29 ušt32_t macûss_addr ; 30 } __©Œibu‹__ (( ·cked )); 32  #BT_LL_CONN_UPDATE_REQ 0x00 ) 33  sbt_Î_cÚn_upd©e_»q { 34 ušt8_t mwš_size ; 35 ušt16_t mwš_off£t ; 36 ušt16_t mš‹rv® ; 37 ušt16_t mÏ‹ncy ; 38 ušt16_t mtimeout ; 39 ušt16_t mš¡ªt ; 40 } __©Œibu‹__ (( ·cked )); 42  #BT_LL_CHANNEL_MAP_REQ 0x01 ) 43  sbt_Î_chªÃl_m­_»q { 44 ušt8_t mm­ [5]; 45 ušt16_t mš¡ªt ; 46 } __©Œibu‹__ (( ·cked )); 48  #BT_LL_TERMINATE_IND 0x02 ) 49  sbt_Î_‹rmš©e_šd { 50 ušt8_t m”rÜ ; 51 } __©Œibu‹__ (( ·cked )); 53  #BT_LL_ENC_REQ 0x03 ) 54  sbt_Î_’c_»q { 55 ušt64_t m¿nd ; 56 ušt16_t mediv ; 57 ušt64_t mskd ; 58 ušt32_t miv ; 59 } __©Œibu‹__ (( ·cked )); 61  #BT_LL_ENC_RSP 0x04 ) 62  sbt_Î_’c_r¥ { 63 ušt64_t mskd ; 64 ušt32_t miv ; 65 } __©Œibu‹__ (( ·cked )); 67  #BT_LL_START_ENC_REQ 0x05 ) 69  #BT_LL_START_ENC_RSP 0x06 ) 71  #BT_LL_UNKNOWN_RSP 0x07 ) 72  sbt_Î_unknown_r¥ { 73 ušt8_t mty³ ; 74 } __©Œibu‹__ (( ·cked )); 76  #BT_LL_FEATURE_REQ 0x08 ) 77  sbt_Î_ã©u»_»q { 78 ušt8_t mã©u»s [8]; 79 } __©Œibu‹__ (( ·cked )); 81  #BT_LL_FEATURE_RSP 0x09 ) 82  sbt_Î_ã©u»_r¥ { 83 ušt8_t mã©u»s [8]; 84 } __©Œibu‹__ (( ·cked )); 86  #BT_LL_PAUSE_ENC_REQ 0x0a ) 88  #BT_LL_PAUSE_ENC_RSP 0x0b ) 90  #BT_LL_VERSION_IND 0x0c ) 91  sbt_Î_v”siÚ_šd { 92 ušt8_t mv”siÚ ; 93 ušt16_t mcom·ny ; 94 ušt16_t msubv”siÚ ; 95 } __©Œibu‹__ (( ·cked )); 97  #BT_LL_REJECT_IND 0x0d ) 98  sbt_Î_»jeù_šd { 99 ušt8_t m”rÜ ; 100 } __©Œibu‹__ (( ·cked )); 102  #LMP_ESC4 ( x è((127 << 8è| (x)) ) 104  #BT_LMP_ACCEPTED 3 ) 105  sbt_lmp_acû±ed { 106 ušt8_t mÝcode ; 107 } __©Œibu‹__ (( ·cked )); 109  #BT_LMP_NOT_ACCEPTED 4 ) 110  sbt_lmp_nÙ_acû±ed { 111 ušt8_t mÝcode ; 112 ušt8_t m”rÜ ; 113 } __©Œibu‹__ (( ·cked )); 115  #BT_LMP_CLKOFFSET_REQ 5 ) 117  #BT_LMP_DETACH 7 ) 118  sbt_lmp_d‘ach { 119 ušt8_t m”rÜ ; 120 } __©Œibu‹__ (( ·cked )); 122  #BT_LMP_AU_RAND 11 ) 123  sbt_lmp_au_¿nd { 124 ušt8_t mnumb” [16]; 125 } __©Œibu‹__ (( ·cked )); 127  #BT_LMP_SRES 12 ) 128  sbt_lmp_¤es { 129 ušt8_t m»¥Ú£ [4]; 130 } __©Œibu‹__ (( ·cked )); 132  #BT_LMP_ENCRYPTION_MODE_REQ 15 ) 133  sbt_lmp_’üy±iÚ_mode_»q { 134 ušt8_t mmode ; 135 } __©Œibu‹__ (( ·cked )); 137  #BT_LMP_ENCRYPTION_KEY_SIZE_REQ 16 ) 138  sbt_lmp_’üy±iÚ_key_size_»q { 139 ušt8_t mkey_size ; 140 } __©Œibu‹__ (( ·cked )); 142  #BT_LMP_START_ENCRYPTION_REQ 17 ) 143  sbt_lmp_¡¬t_’üy±iÚ_»q { 144 ušt8_t mnumb” [16]; 145 } __©Œibu‹__ (( ·cked )); 147  #BT_LMP_STOP_ENCRYPTION_REQ 18 ) 149  #BT_LMP_UNSNIFF_REQ 24 ) 151  #BT_LMP_MAX_POWER 33 ) 153  #BT_LMP_MIN_POWER 34 ) 155  #BT_LMP_AUTO_RATE 35 ) 157  #BT_LMP_VERSION_REQ 37 ) 158  sbt_lmp_v”siÚ_»q { 159 ušt8_t mv”siÚ ; 160 ušt16_t mcom·ny ; 161 ušt16_t msubv”siÚ ; 162 } __©Œibu‹__ (( ·cked )); 164  #BT_LMP_VERSION_RES 38 ) 165  sbt_lmp_v”siÚ_»s { 166 ušt8_t mv”siÚ ; 167 ušt16_t mcom·ny ; 168 ušt16_t msubv”siÚ ; 169 } __©Œibu‹__ (( ·cked )); 171  #BT_LMP_FEATURES_REQ 39 ) 172  sbt_lmp_ã©u»s_»q { 173 ušt8_t mã©u»s [8]; 174 } __©Œibu‹__ (( ·cked )); 176  #BT_LMP_FEATURES_RES 40 ) 177  sbt_lmp_ã©u»s_»s { 178 ušt8_t mã©u»s [8]; 179 } __©Œibu‹__ (( ·cked )); 181  #BT_LMP_MAX_SLOT 45 ) 182  sbt_lmp_max_¦Ù { 183 ušt8_t m¦Ùs ; 184 } __©Œibu‹__ (( ·cked )); 186  #BT_LMP_MAX_SLOT_REQ 46 ) 187  sbt_lmp_max_¦Ù_»q { 188 ušt8_t m¦Ùs ; 189 } __©Œibu‹__ (( ·cked )); 191  #BT_LMP_TIMING_ACCURACY_REQ 47 ) 193  #BT_LMP_TIMING_ACCURACY_RES 48 ) 194  sbt_lmp_timšg_accu¿cy_»s { 195 ušt8_t mdriá ; 196 ušt8_t mj™‹r ; 197 } __©Œibu‹__ (( ·cked )); 199  #BT_LMP_SETUP_COMPLETE 49 ) 201  #BT_LMP_USE_SEMI_PERMANENT_KEY 50 ) 203  #BT_LMP_HOST_CONNECTION_REQ 51 ) 205  #BT_LMP_PAGE_SCAN_MODE_REQ 54 ) 206  sbt_lmp_·ge_sÿn_mode_»q { 207 ušt8_t mscheme ; 208 ušt8_t m£‰šgs ; 209 } __©Œibu‹__ (( ·cked )); 211  #BT_LMP_TEST_ACTIVATE 56 ) 213  #BT_LMP_ENCRYPTION_KEY_SIZE_MASK_REQ 58 ) 215  #BT_LMP_SET_AFH 60 ) 216  sbt_lmp_£t_afh { 217 ušt32_t mš¡ªt ; 218 ušt8_t mmode ; 219 ušt8_t mm­ [10]; 220 } __©Œibu‹__ (( ·cked )); 222  #BT_LMP_ENCAPSULATED_HEADER 61 ) 223  sbt_lmp_’ÿpsuÏ‹d_h—d” { 224 ušt8_t mmajÜ ; 225 ušt8_t mmšÜ ; 226 ušt8_t mËngth ; 227 } __©Œibu‹__ (( ·cked )); 229  #BT_LMP_ENCAPSULATED_PAYLOAD 62 ) 230  sbt_lmp_’ÿpsuÏ‹d_·ylßd { 231 ušt8_t md©a [16]; 232 } __©Œibu‹__ (( ·cked )); 234  #BT_LMP_SIMPLE_PAIRING_CONFIRM 63 ) 235  sbt_lmp_sim¶e_·œšg_cÚfœm { 236 ušt8_t mv®ue [16]; 237 } __©Œibu‹__ (( ·cked )); 239  #BT_LMP_SIMPLE_PAIRING_NUMBER 64 ) 240  sbt_lmp_sim¶e_·œšg_numb” { 241 ušt8_t mv®ue [16]; 242 } __©Œibu‹__ (( ·cked )); 244  #BT_LMP_DHKEY_CHECK 65 ) 245  sbt_lmp_dhkey_check { 246 ušt8_t mv®ue [16]; 247 } __©Œibu‹__ (( ·cked )); 249  #BT_LMP_PAUSE_ENCRYPTION_AES_REQ 66 ) 251  #BT_LMP_ACCEPTED_EXT `LMP_ESC4 (1) ) 252  sbt_lmp_acû±ed_ext { 253 ušt8_t mesÿ³ ; 254 ušt8_t mÝcode ; 255 } __©Œibu‹__ (( ·cked )); 257  #BT_LMP_NOT_ACCEPTED_EXT `LMP_ESC4 (2) ) 258  sbt_lmp_nÙ_acû±ed_ext { 259 ušt8_t mesÿ³ ; 260 ušt8_t mÝcode ; 261 ušt8_t m”rÜ ; 262 } __©Œibu‹__ (( ·cked )); 264  #BT_LMP_FEATURES_REQ_EXT `LMP_ESC4 (3) ) 265  sbt_lmp_ã©u»s_»q_ext { 266 ušt8_t m·ge ; 267 ušt8_t mmax_·ge ; 268 ušt8_t mã©u»s [8]; 269 } __©Œibu‹__ (( ·cked )); 271  #BT_LMP_FEATURES_RES_EXT `LMP_ESC4 (4) ) 272  sbt_lmp_ã©u»s_»s_ext { 273 ušt8_t m·ge ; 274 ušt8_t mmax_·ge ; 275 ušt8_t mã©u»s [8]; 276 } __©Œibu‹__ (( ·cked )); 278  #BT_LMP_PACKET_TYPE_TABLE_REQ `LMP_ESC4 (11) ) 279  sbt_lmp_·ck‘_ty³_bË_»q { 280 ušt8_t mbË ; 281 } __©Œibu‹__ (( ·cked )); 283  #BT_LMP_CHANNEL_CLASSIFICATION_REQ `LMP_ESC4 (16) ) 284  sbt_lmp_chªÃl_þassifiÿtiÚ_»q { 285 ušt8_t mmode ; 286 ušt16_t mmš_š‹rv® ; 287 ušt16_t mmax_š‹rv® ; 288 } __©Œibu‹__ (( ·cked )); 290  #BT_LMP_CHANNEL_CLASSIFICATION `LMP_ESC4 (17) ) 291  sbt_lmp_chªÃl_þassifiÿtiÚ { 292 ušt8_t mþassifiÿtiÚ [10]; 293 } __©Œibu‹__ (( ·cked )); 295  #BT_LMP_PAUSE_ENCRYPTION_REQ `LMP_ESC4 (23) ) 297  #BT_LMP_RESUME_ENCRYPTION_REQ `LMP_ESC4 (24) ) 299  #BT_LMP_IO_CAPABILITY_REQ `LMP_ESC4 (25) ) 300  sbt_lmp_io_ÿ·bž™y_»q { 301 ušt8_t mÿ·bž™y ; 302 ušt8_t moob_d©a ; 303 ušt8_t mauth’tiÿtiÚ ; 304 } __©Œibu‹__ (( ·cked )); 306  #BT_LMP_IO_CAPABILITY_RES `LMP_ESC4 (26) ) 307  sbt_lmp_io_ÿ·bž™y_»s { 308 ušt8_t mÿ·bž™y ; 309 ušt8_t moob_d©a ; 310 ušt8_t mauth’tiÿtiÚ ; 311 } __©Œibu‹__ (( ·cked )); 313  #BT_LMP_NUMERIC_COMPARISON_FAILED `LMP_ESC (27) ) 315  #BT_LMP_PASSKEY_FAILED `LMP_ESC4 (28) ) 317  #BT_LMP_OOB_FAILED `LMP_ESC (29) ) 319  #BT_LMP_POWER_CONTROL_REQ `LMP_ESC4 (31) ) 320  sbt_lmp_pow”_cÚŒÞ_»q { 321 ušt8_t m»que¡ ; 322 } __©Œibu‹__ (( ·cked )); 324  #BT_LMP_POWER_CONTROL_RES `LMP_ESC4 (32) ) 325  sbt_lmp_pow”_cÚŒÞ_»s { 326 ušt8_t m»¥Ú£ ; 327 } __©Œibu‹__ (( ·cked )); 329  #BT_LMP_PING_REQ `LMP_ESC4 (33) ) 331  #BT_LMP_PING_RES `LMP_ESC4 (34) ) 333  #BT_H4_CMD_PKT 0x01 ) 334  #BT_H4_ACL_PKT 0x02 ) 335  #BT_H4_SCO_PKT 0x03 ) 336  #BT_H4_EVT_PKT 0x04 ) 338  sbt_hci_cmd_hdr { 339 ušt16_t mÝcode ; 340 ušt8_t m¶’ ; 341 } __©Œibu‹__ (( ·cked )); 343  sbt_hci_aþ_hdr { 344 ušt16_t mhªdË ; 345 ušt16_t mdËn ; 346 } __©Œibu‹__ (( ·cked )); 348  sbt_hci_sco_hdr { 349 ušt16_t mhªdË ; 350 ušt8_t mdËn ; 351 } __©Œibu‹__ (( ·cked )); 353  sbt_hci_evt_hdr { 354 ušt8_t mevt ; 355 ušt8_t m¶’ ; 356 } __©Œibu‹__ (( ·cked )); 358  #BT_HCI_CMD_NOP 0x0000 ) 360  #BT_HCI_CMD_INQUIRY 0x0401 ) 361  sbt_hci_cmd_šquœy { 362 ušt8_t mÏp [3]; 363 ušt8_t mËngth ; 364 ušt8_t mnum_»¥ ; 365 } __©Œibu‹__ (( ·cked )); 367  #BT_HCI_CMD_INQUIRY_CANCEL 0x0402 ) 369  #BT_HCI_CMD_PERIODIC_INQUIRY 0x0403 ) 370  sbt_hci_cmd_³riodic_šquœy { 371 ušt16_t mmax_³riod ; 372 ušt16_t mmš_³riod ; 373 ušt8_t mÏp [3]; 374 ušt8_t mËngth ; 375 ušt8_t mnum_»¥ ; 376 } __©Œibu‹__ (( ·cked )); 378  #BT_HCI_CMD_EXIT_PERIODIC_INQUIRY 0x0404 ) 380  #BT_HCI_CMD_CREATE_CONN 0x0405 ) 381  sbt_hci_cmd_ü—‹_cÚn { 382 ušt8_t mbdaddr [6]; 383 ušt16_t mpkt_ty³ ; 384 ušt8_t mpsÿn_»p_mode ; 385 ušt8_t mpsÿn_mode ; 386 ušt16_t mþock_off£t ; 387 ušt8_t mrÞe_sw™ch ; 388 } __©Œibu‹__ (( ·cked )); 390  #BT_HCI_CMD_DISCONNECT 0x0406 ) 391  sbt_hci_cmd_discÚÃù { 392 ušt16_t mhªdË ; 393 ušt8_t m»asÚ ; 394 } __©Œibu‹__ (( ·cked )); 396  #BT_HCI_CMD_ADD_SCO_CONN 0x0407 ) 397  sbt_hci_cmd_add_sco_cÚn { 398 ušt16_t mhªdË ; 399 ušt16_t mpkt_ty³ ; 400 } __©Œibu‹__ (( ·cked )); 402  #BT_HCI_CMD_CREATE_CONN_CANCEL 0x0408 ) 403  sbt_hci_cmd_ü—‹_cÚn_ÿnûl { 404 ušt8_t mbdaddr [6]; 405 } __©Œibu‹__ (( ·cked )); 407  #BT_HCI_CMD_ACCEPT_CONN_REQUEST 0x0409 ) 408  sbt_hci_cmd_acû±_cÚn_»que¡ { 409 ušt8_t mbdaddr [6]; 410 ušt8_t mrÞe ; 411 } __©Œibu‹__ (( ·cked )); 413  #BT_HCI_CMD_REJECT_CONN_REQUEST 0x040a ) 414  sbt_hci_cmd_»jeù_cÚn_»que¡ { 415 ušt8_t mbdaddr [6]; 416 ušt8_t m»asÚ ; 417 } __©Œibu‹__ (( ·cked )); 419  #BT_HCI_CMD_LINK_KEY_REQUEST_REPLY 0x040b ) 420  sbt_hci_cmd_lšk_key_»que¡_»¶y { 421 ušt8_t mbdaddr [6]; 422 ušt8_t mlšk_key [16]; 423 } __©Œibu‹__ (( ·cked )); 424  sbt_hci_r¥_lšk_key_»que¡_»¶y { 425 ušt8_t m¡©us ; 426 ušt8_t mbdaddr [6]; 427 } __©Œibu‹__ (( ·cked )); 429  #BT_HCI_CMD_LINK_KEY_REQUEST_NEG_REPLY 0x040c ) 430  sbt_hci_cmd_lšk_key_»que¡_Ãg_»¶y { 431 ušt8_t mbdaddr [6]; 432 } __©Œibu‹__ (( ·cked )); 433  sbt_hci_r¥_lšk_key_»que¡_Ãg_»¶y { 434 ušt8_t m¡©us ; 435 ušt8_t mbdaddr [6]; 436 } __©Œibu‹__ (( ·cked )); 438  #BT_HCI_CMD_PIN_CODE_REQUEST_REPLY 0x040d ) 439  sbt_hci_cmd_pš_code_»que¡_»¶y { 440 ušt8_t mbdaddr [6]; 441 ušt8_t mpš_Ën ; 442 ušt8_t mpš_code [16]; 443 } __©Œibu‹__ (( ·cked )); 445  #BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY 0x040e ) 446  sbt_hci_cmd_pš_code_»que¡_Ãg_»¶y { 447 ušt8_t mbdaddr [6]; 448 } __©Œibu‹__ (( ·cked )); 449  sbt_hci_r¥_pš_code_»que¡_Ãg_»¶y { 450 ušt8_t m¡©us ; 451 ušt8_t mbdaddr [6]; 452 } __©Œibu‹__ (( ·cked )); 454  #BT_HCI_CMD_CHANGE_CONN_PKT_TYPE 0x040f ) 455  sbt_hci_cmd_chªge_cÚn_pkt_ty³ { 456 ušt16_t mhªdË ; 457 ušt16_t mpkt_ty³ ; 458 } __©Œibu‹__ (( ·cked )); 460  #BT_HCI_CMD_AUTH_REQUESTED 0x0411 ) 461  sbt_hci_cmd_auth_»que¡ed { 462 ušt16_t mhªdË ; 463 } __©Œibu‹__ (( ·cked )); 465  #BT_HCI_CMD_SET_CONN_ENCRYPT 0x0413 ) 466  sbt_hci_cmd_£t_cÚn_’üy± { 467 ušt16_t mhªdË ; 468 ušt8_t m’ü_mode ; 469 } __©Œibu‹__ (( ·cked )); 471  #BT_HCI_CMD_CHANGE_CONN_LINK_KEY 0x0415 ) 472  sbt_hci_cmd_chªge_cÚn_lšk_key { 473 ušt16_t mhªdË ; 474 } __©Œibu‹__ (( ·cked )); 476  #BT_HCI_CMD_MASTER_LINK_KEY 0x0417 ) 477  sbt_hci_cmd_ma¡”_lšk_key { 478 ušt8_t mkey_æag ; 479 } __©Œibu‹__ (( ·cked )); 481  #BT_HCI_CMD_REMOTE_NAME_REQUEST 0x0419 ) 482  sbt_hci_cmd_»mÙe_Çme_»que¡ { 483 ušt8_t mbdaddr [6]; 484 ušt8_t mpsÿn_»p_mode ; 485 ušt8_t mpsÿn_mode ; 486 ušt16_t mþock_off£t ; 487 } __©Œibu‹__ (( ·cked )); 489  #BT_HCI_CMD_REMOTE_NAME_REQUEST_CANCEL 0x041a ) 490  sbt_hci_cmd_»mÙe_Çme_»que¡_ÿnûl { 491 ušt8_t mbdaddr [6]; 492 } __©Œibu‹__ (( ·cked )); 493  sbt_hci_r¥_»mÙe_Çme_»que¡_ÿnûl { 494 ušt8_t m¡©us ; 495 ušt8_t mbdaddr [6]; 496 } __©Œibu‹__ (( ·cked )); 498  #BT_HCI_CMD_READ_REMOTE_FEATURES 0x041b ) 499  sbt_hci_cmd_»ad_»mÙe_ã©u»s { 500 ušt16_t mhªdË ; 501 } __©Œibu‹__ (( ·cked )); 503  #BT_HCI_CMD_READ_REMOTE_EXT_FEATURES 0x041c ) 504  sbt_hci_cmd_»ad_»mÙe_ext_ã©u»s { 505 ušt16_t mhªdË ; 506 ušt8_t m·ge ; 507 } __©Œibu‹__ (( ·cked )); 509  #BT_HCI_CMD_READ_REMOTE_VERSION 0x041d ) 510  sbt_hci_cmd_»ad_»mÙe_v”siÚ { 511 ušt16_t mhªdË ; 512 } __©Œibu‹__ (( ·cked )); 514  #BT_HCI_CMD_READ_CLOCK_OFFSET 0x041f ) 515  sbt_hci_cmd_»ad_þock_off£t { 516 ušt16_t mhªdË ; 517 } __©Œibu‹__ (( ·cked )); 519  #BT_HCI_CMD_READ_LMP_HANDLE 0x0420 ) 520  sbt_hci_cmd_»ad_lmp_hªdË { 521 ušt16_t mhªdË ; 522 } __©Œibu‹__ (( ·cked )); 523  sbt_hci_r¥_»ad_lmp_hªdË { 524 ušt8_t m¡©us ; 525 ušt16_t mhªdË ; 526 ušt8_t mlmp_hªdË ; 527 ušt32_t m»£rved ; 528 } __©Œibu‹__ (( ·cked )); 530  #BT_HCI_CMD_SETUP_SYNC_CONN 0x0428 ) 531  sbt_hci_cmd_£tup_sync_cÚn { 532 ušt16_t mhªdË ; 533 ušt32_t mtx_bªdwidth ; 534 ušt32_t mrx_bªdwidth ; 535 ušt16_t mmax_Ï‹ncy ; 536 ušt16_t mvoiû_£‰šg ; 537 ušt8_t m»Œªs_effÜt ; 538 ušt16_t mpkt_ty³ ; 539 } __©Œibu‹__ (( ·cked )); 541  #BT_HCI_CMD_ACCEPT_SYNC_CONN_REQUEST 0x0429 ) 542  sbt_hci_cmd_acû±_sync_cÚn_»que¡ { 543 ušt8_t mbdaddr [6]; 544 ušt32_t mtx_bªdwidth ; 545 ušt32_t mrx_bªdwidth ; 546 ušt16_t mmax_Ï‹ncy ; 547 ušt16_t mvoiû_£‰šg ; 548 ušt8_t m»Œªs_effÜt ; 549 ušt16_t mpkt_ty³ ; 550 } __©Œibu‹__ (( ·cked )); 552  #BT_HCI_CMD_REJECT_SYNC_CONN_REQUEST 0x042a ) 553  sbt_hci_cmd_»jeù_sync_cÚn_»que¡ { 554 ušt8_t mbdaddr [6]; 555 ušt8_t m»asÚ ; 556 } __©Œibu‹__ (( ·cked )); 558  #BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY 0x042b ) 559  sbt_hci_cmd_io_ÿ·bž™y_»que¡_»¶y { 560 ušt8_t mbdaddr [6]; 561 ušt8_t mÿ·bž™y ; 562 ušt8_t moob_d©a ; 563 ušt8_t mauth’tiÿtiÚ ; 564 } __©Œibu‹__ (( ·cked )); 565  sbt_hci_r¥_io_ÿ·bž™y_»que¡_»¶y { 566 ušt8_t m¡©us ; 567 ušt8_t mbdaddr [6]; 568 } __©Œibu‹__ (( ·cked )); 570  #BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY 0x042c ) 571  sbt_hci_cmd_u£r_cÚfœm_»que¡_»¶y { 572 ušt8_t mbdaddr [6]; 573 } __©Œibu‹__ (( ·cked )); 574  sbt_hci_r¥_u£r_cÚfœm_»que¡_»¶y { 575 ušt8_t m¡©us ; 576 ušt8_t mbdaddr [6]; 577 } __©Œibu‹__ (( ·cked )); 579  #BT_HCI_CMD_USER_CONFIRM_REQUEST_NEG_REPLY 0x042d ) 580  sbt_hci_cmd_u£r_cÚfœm_»que¡_Ãg_»¶y { 581 ušt8_t mbdaddr [6]; 582 } __©Œibu‹__ (( ·cked )); 583  sbt_hci_r¥_u£r_cÚfœm_»que¡_Ãg_»¶y { 584 ušt8_t m¡©us ; 585 ušt8_t mbdaddr [6]; 586 } __©Œibu‹__ (( ·cked )); 588  #BT_HCI_CMD_USER_PASSKEY_REQUEST_REPLY 0x042e ) 589  sbt_hci_cmd_u£r_·sskey_»que¡_»¶y { 590 ušt8_t mbdaddr [6]; 591 ušt32_t m·sskey ; 592 } __©Œibu‹__ (( ·cked )); 594  #BT_HCI_CMD_USER_PASSKEY_REQUEST_NEG_REPLY 0x042f ) 595  sbt_hci_cmd_u£r_·sskey_»que¡_Ãg_»¶y { 596 ušt8_t mbdaddr [6]; 597 } __©Œibu‹__ (( ·cked )); 599  #BT_HCI_CMD_REMOTE_OOB_DATA_REQUEST_REPLY 0x0430 ) 600  sbt_hci_cmd_»mÙe_oob_d©a_»que¡_»¶y { 601 ušt8_t mbdaddr [6]; 602 ušt8_t mhash [16]; 603 ušt8_t m¿ndomiz” [16]; 604 } __©Œibu‹__ (( ·cked )); 606  #BT_HCI_CMD_REMOTE_OOB_DATA_REQUEST_NEG_REPLY 0x0433 ) 607  sbt_hci_cmd_»mÙe_oob_d©a_»que¡_Ãg_»¶y { 608 ušt8_t mbdaddr [6]; 609 } __©Œibu‹__ (( ·cked )); 611  #BT_HCI_CMD_IO_CAPABILITY_REQUEST_NEG_REPLY 0x0434 ) 612  sbt_hci_cmd_io_ÿ·bž™y_»que¡_Ãg_»¶y { 613 ušt8_t mbdaddr [6]; 614 ušt8_t m»asÚ ; 615 } __©Œibu‹__ (( ·cked )); 616  sbt_hci_r¥_io_ÿ·bž™y_»que¡_Ãg_»¶y { 617 ušt8_t m¡©us ; 618 ušt8_t mbdaddr [6]; 619 } __©Œibu‹__ (( ·cked )); 621  #BT_HCI_CMD_CREATE_PHY_LINK 0x0435 ) 622  sbt_hci_cmd_ü—‹_phy_lšk { 623 ušt8_t mphy_hªdË ; 624 ušt8_t mkey_Ën ; 625 ušt8_t mkey_ty³ ; 626 } __©Œibu‹__ (( ·cked )); 628  #BT_HCI_CMD_ACCEPT_PHY_LINK 0x0436 ) 629  sbt_hci_cmd_acû±_phy_lšk { 630 ušt8_t mphy_hªdË ; 631 ušt8_t mkey_Ën ; 632 ušt8_t mkey_ty³ ; 633 } __©Œibu‹__ (( ·cked )); 635  #BT_HCI_CMD_DISCONN_PHY_LINK 0x0437 ) 636  sbt_hci_cmd_discÚn_phy_lšk { 637 ušt8_t mphy_hªdË ; 638 ušt8_t m»asÚ ; 639 } __©Œibu‹__ (( ·cked )); 641  #BT_HCI_CMD_CREATE_LOGIC_LINK 0x0438 ) 642  sbt_hci_cmd_ü—‹_logic_lšk { 643 ušt8_t mphy_hªdË ; 644 ušt8_t mtx_æow_¥ec [16]; 645 ušt8_t mrx_æow_¥ec [16]; 646 } __©Œibu‹__ (( ·cked )); 648  #BT_HCI_CMD_ACCEPT_LOGIC_LINK 0x0439 ) 649  sbt_hci_cmd_acû±_logic_lšk { 650 ušt8_t mphy_hªdË ; 651 ušt8_t mtx_æow_¥ec [16]; 652 ušt8_t mrx_æow_¥ec [16]; 653 } __©Œibu‹__ (( ·cked )); 655  #BT_HCI_CMD_DISCONN_LOGIC_LINK 0x043a ) 656  sbt_hci_cmd_discÚn_logic_lšk { 657 ušt16_t mhªdË ; 658 } __©Œibu‹__ (( ·cked )); 660  #BT_HCI_CMD_LOGIC_LINK_CANCEL 0x043b ) 661  sbt_hci_cmd_logic_lšk_ÿnûl { 662 ušt8_t mphy_hªdË ; 663 ušt8_t mæow_¥ec ; 664 } __©Œibu‹__ (( ·cked )); 665  sbt_hci_r¥_logic_lšk_ÿnûl { 666 ušt8_t m¡©us ; 667 ušt8_t mphy_hªdË ; 668 ušt8_t mæow_¥ec ; 669 } __©Œibu‹__ (( ·cked )); 671  #BT_HCI_CMD_FLOW_SPEC_MODIFY 0x043c ) 672  sbt_hci_cmd_æow_¥ec_modify { 673 ušt16_t mhªdË ; 674 ušt8_t mtx_æow_¥ec [16]; 675 ušt8_t mrx_æow_¥ec [16]; 676 } __©Œibu‹__ (( ·cked )); 678  #BT_HCI_CMD_TRUNCATED_PAGE 0x043f ) 679  sbt_hci_cmd_Œunÿ‹d_·ge { 680 ušt8_t mbdaddr [6]; 681 ušt8_t mpsÿn_»p_mode ; 682 ušt16_t mþock_off£t ; 683 } __©Œibu‹__ (( ·cked )); 685  #BT_HCI_CMD_TRUNCATED_PAGE_CANCEL 0x0440 ) 686  sbt_hci_cmd_Œunÿ‹d_·ge_ÿnûl { 687 ušt8_t mbdaddr [6]; 688 } __©Œibu‹__ (( ·cked )); 690  #BT_HCI_CMD_SET_SLAVE_BROADCAST 0x0441 ) 691  sbt_hci_cmd_£t_¦ave_brßdÿ¡ { 692 ušt8_t m’abË ; 693 ušt8_t mÉ_addr ; 694 ušt8_t mÍo_®lowed ; 695 ušt16_t mpkt_ty³ ; 696 ušt16_t mmš_š‹rv® ; 697 ušt16_t mmax_š‹rv® ; 698 ušt16_t mtimeout ; 699 } __©Œibu‹__ (( ·cked )); 700  sbt_hci_r¥_£t_¦ave_brßdÿ¡ { 701 ušt8_t m¡©us ; 702 ušt8_t mÉ_addr ; 703 ušt16_t mš‹rv® ; 704 } __©Œibu‹__ (( ·cked )); 706  #BT_HCI_CMD_SET_SLAVE_BROADCAST_RECEIVE 0x0442 ) 707  sbt_hci_cmd_£t_¦ave_brßdÿ¡_»ûive { 708 ušt8_t m’abË ; 709 ušt8_t mbdaddr [6]; 710 ušt8_t mÉ_addr ; 711 ušt16_t mš‹rv® ; 712 ušt32_t moff£t ; 713 ušt32_t mš¡ªt ; 714 ušt16_t mtimeout ; 715 ušt8_t maccu¿cy ; 716 ušt8_t msk ; 717 ušt16_t mpkt_ty³ ; 718 ušt8_t mm­ [10]; 719 } __©Œibu‹__ (( ·cked )); 720  sbt_hci_r¥_£t_¦ave_brßdÿ¡_»ûive { 721 ušt8_t m¡©us ; 722 ušt8_t mbdaddr [6]; 723 ušt8_t mÉ_addr ; 724 } __©Œibu‹__ (( ·cked )); 726  #BT_HCI_CMD_START_SYNC_TRAIN 0x0443 ) 728  #BT_HCI_CMD_RECEIVE_SYNC_TRAIN 0x0444 ) 729  sbt_hci_cmd_»ûive_sync_Œaš { 730 ušt8_t mbdaddr [6]; 731 ušt16_t mtimeout ; 732 ušt16_t mwšdow ; 733 ušt16_t mš‹rv® ; 734 } __©Œibu‹__ (( ·cked )); 736  #BT_HCI_CMD_REMOTE_OOB_EXT_DATA_REQUEST_REPLY 0x0445 ) 737  sbt_hci_cmd_»mÙe_oob_ext_d©a_»que¡_»¶y { 738 ušt8_t mbdaddr [6]; 739 ušt8_t mhash192 [16]; 740 ušt8_t m¿ndomiz”192 [16]; 741 ušt8_t mhash256 [16]; 742 ušt8_t m¿ndomiz”256 [16]; 743 } __©Œibu‹__ (( ·cked )); 745  #BT_HCI_CMD_HOLD_MODE 0x0801 ) 746  sbt_hci_cmd_hÞd_mode { 747 ušt16_t mhªdË ; 748 ušt16_t mmax_š‹rv® ; 749 ušt16_t mmš_š‹rv® ; 750 } __©Œibu‹__ (( ·cked )); 752  #BT_HCI_CMD_SNIFF_MODE 0x0803 ) 753  sbt_hci_cmd_¢iff_mode { 754 ušt16_t mhªdË ; 755 ušt16_t mmax_š‹rv® ; 756 ušt16_t mmš_š‹rv® ; 757 ušt16_t m©‹m± ; 758 ušt16_t mtimeout ; 759 } __©Œibu‹__ (( ·cked )); 761  #BT_HCI_CMD_EXIT_SNIFF_MODE 0x0804 ) 762  sbt_hci_cmd_ex™_¢iff_mode { 763 ušt16_t mhªdË ; 764 } __©Œibu‹__ (( ·cked )); 766  #BT_HCI_CMD_PARK_STATE 0x0805 ) 767  sbt_hci_cmd_·rk_¡©e { 768 ušt16_t mhªdË ; 769 ušt16_t mmax_š‹rv® ; 770 ušt16_t mmš_š‹rv® ; 771 } __©Œibu‹__ (( ·cked )); 773  #BT_HCI_CMD_EXIT_PARK_STATE 0x0806 ) 774  sbt_hci_cmd_ex™_·rk_¡©e { 775 ušt16_t mhªdË ; 776 } __©Œibu‹__ (( ·cked )); 778  #BT_HCI_CMD_QOS_SETUP 0x0807 ) 779  sbt_hci_cmd_qos_£tup { 780 ušt16_t mhªdË ; 781 ušt8_t mæags ; 782 ušt8_t m£rviû_ty³ ; 783 ušt32_t mtok’_¿‹ ; 784 ušt32_t m³ak_bªdwidth ; 785 ušt32_t mÏ‹ncy ; 786 ušt32_t md–ay_v¬ŸtiÚ ; 787 } __©Œibu‹__ (( ·cked )); 789  #BT_HCI_CMD_ROLE_DISCOVERY 0x0809 ) 790  sbt_hci_cmd_rÞe_discov”y { 791 ušt16_t mhªdË ; 792 } __©Œibu‹__ (( ·cked )); 793  sbt_hci_r¥_rÞe_discov”y { 794 ušt8_t m¡©us ; 795 ušt16_t mhªdË ; 796 ušt8_t mrÞe ; 797 } __©Œibu‹__ (( ·cked )); 799  #BT_HCI_CMD_SWITCH_ROLE 0x080b ) 800  sbt_hci_cmd_sw™ch_rÞe { 801 ušt8_t mbdaddr [6]; 802 ušt8_t mrÞe ; 803 } __©Œibu‹__ (( ·cked )); 805  #BT_HCI_CMD_READ_LINK_POLICY 0x080c ) 806  sbt_hci_cmd_»ad_lšk_pÞicy { 807 ušt16_t mhªdË ; 808 } __©Œibu‹__ (( ·cked )); 809  sbt_hci_r¥_»ad_lšk_pÞicy { 810 ušt8_t m¡©us ; 811 ušt16_t mhªdË ; 812 ušt16_t mpÞicy ; 813 } __©Œibu‹__ (( ·cked )); 815  #BT_HCI_CMD_WRITE_LINK_POLICY 0x080d ) 816  sbt_hci_cmd_wr™e_lšk_pÞicy { 817 ušt16_t mhªdË ; 818 ušt16_t mpÞicy ; 819 } __©Œibu‹__ (( ·cked )); 820  sbt_hci_r¥_wr™e_lšk_pÞicy { 821 ušt8_t m¡©us ; 822 ušt16_t mhªdË ; 823 } __©Œibu‹__ (( ·cked )); 825  #BT_HCI_CMD_READ_DEFAULT_LINK_POLICY 0x080e ) 826  sbt_hci_r¥_»ad_deçuÉ_lšk_pÞicy { 827 ušt8_t m¡©us ; 828 ušt16_t mpÞicy ; 829 } __©Œibu‹__ (( ·cked )); 831  #BT_HCI_CMD_WRITE_DEFAULT_LINK_POLICY 0x080f ) 832  sbt_hci_cmd_wr™e_deçuÉ_lšk_pÞicy { 833 ušt16_t mpÞicy ; 834 } __©Œibu‹__ (( ·cked )); 836  #BT_HCI_CMD_FLOW_SPEC 0x0810 ) 837  sbt_hci_cmd_æow_¥ec { 838 ušt16_t mhªdË ; 839 ušt8_t mæags ; 840 ušt8_t mdœeùiÚ ; 841 ušt8_t m£rviû_ty³ ; 842 ušt32_t mtok’_¿‹ ; 843 ušt32_t mtok’_buck‘_size ; 844 ušt32_t m³ak_bªdwidth ; 845 ušt32_t macûss_Ï‹ncy ; 846 } __©Œibu‹__ (( ·cked )); 848  #BT_HCI_CMD_SNIFF_SUBRATING 0x0811 ) 849  sbt_hci_cmd_¢iff_sub¿tšg { 850 ušt16_t mhªdË ; 851 ušt16_t mmax_Ï‹ncy ; 852 ušt16_t mmš_»mÙe_timeout ; 853 ušt16_t mmš_loÿl_timeout ; 854 } __©Œibu‹__ (( ·cked )); 855  sbt_hci_r¥_¢iff_sub¿tšg { 856 ušt8_t m¡©us ; 857 ušt16_t mhªdË ; 858 } __©Œibu‹__ (( ·cked )); 860  #BT_HCI_CMD_SET_EVENT_MASK 0x0c01 ) 861  sbt_hci_cmd_£t_ev’t_mask { 862 ušt8_t mmask [8]; 863 } __©Œibu‹__ (( ·cked )); 865  #BT_HCI_CMD_RESET 0x0c03 ) 867  #BT_HCI_CMD_SET_EVENT_FILTER 0x0c05 ) 868  sbt_hci_cmd_£t_ev’t_fž‹r { 869 ušt8_t mty³ ; 870 ušt8_t mcÚd_ty³ ; 871 ušt8_t mcÚd [0]; 872 } __©Œibu‹__ (( ·cked )); 874  #BT_HCI_CMD_FLUSH 0x0c08 ) 875  sbt_hci_cmd_æush { 876 ušt16_t mhªdË ; 877 } __©Œibu‹__ (( ·cked )); 878  sbt_hci_r¥_æush { 879 ušt8_t m¡©us ; 880 ušt16_t mhªdË ; 881 } __©Œibu‹__ (( ·cked )); 883  #BT_HCI_CMD_READ_PIN_TYPE 0x0c09 ) 884  sbt_hci_r¥_»ad_pš_ty³ { 885 ušt8_t m¡©us ; 886 ušt8_t mpš_ty³ ; 887 } __©Œibu‹__ (( ·cked )); 889  #BT_HCI_CMD_WRITE_PIN_TYPE 0x0c0a ) 890  sbt_hci_cmd_wr™e_pš_ty³ { 891 ušt8_t mpš_ty³ ; 892 } __©Œibu‹__ (( ·cked )); 894  #BT_HCI_CMD_CREATE_NEW_UNIT_KEY 0x0c0b ) 896  #BT_HCI_CMD_READ_STORED_LINK_KEY 0x0c0d ) 897  sbt_hci_cmd_»ad_¡Üed_lšk_key { 898 ušt8_t mbdaddr [6]; 899 ušt8_t m»ad_®l ; 900 } __©Œibu‹__ (( ·cked )); 901  sbt_hci_r¥_»ad_¡Üed_lšk_key { 902 ušt8_t m¡©us ; 903 ušt16_t mmax_num_keys ; 904 ušt16_t mnum_keys ; 905 } __©Œibu‹__ (( ·cked )); 907  #BT_HCI_CMD_WRITE_STORED_LINK_KEY 0x0c11 ) 908  sbt_hci_cmd_wr™e_¡Üed_lšk_key { 909 ušt8_t mnum_keys ; 910 } __©Œibu‹__ (( ·cked )); 911  sbt_hci_r¥_wr™e_¡Üed_lšk_key { 912 ušt8_t m¡©us ; 913 ušt8_t mnum_keys ; 914 } __©Œibu‹__ (( ·cked )); 916  #BT_HCI_CMD_DELETE_STORED_LINK_KEY 0x0c12 ) 917  sbt_hci_cmd_d–‘e_¡Üed_lšk_key { 918 ušt8_t mbdaddr [6]; 919 ušt8_t md–‘e_®l ; 920 } __©Œibu‹__ (( ·cked )); 921  sbt_hci_r¥_d–‘e_¡Üed_lšk_key { 922 ušt8_t m¡©us ; 923 ušt16_t mnum_keys ; 924 } __©Œibu‹__ (( ·cked )); 926  #BT_HCI_CMD_WRITE_LOCAL_NAME 0x0c13 ) 927  sbt_hci_cmd_wr™e_loÿl_Çme { 928 ušt8_t mÇme [248]; 929 } __©Œibu‹__ (( ·cked )); 931  #BT_HCI_CMD_READ_LOCAL_NAME 0x0c14 ) 932  sbt_hci_r¥_»ad_loÿl_Çme { 933 ušt8_t m¡©us ; 934 ušt8_t mÇme [248]; 935 } __©Œibu‹__ (( ·cked )); 937  #BT_HCI_CMD_READ_CONN_ACCEPT_TIMEOUT 0x0c15 ) 938  sbt_hci_r¥_»ad_cÚn_acû±_timeout { 939 ušt8_t m¡©us ; 940 ušt16_t mtimeout ; 941 } __©Œibu‹__ (( ·cked )); 943  #BT_HCI_CMD_WRITE_CONN_ACCEPT_TIMEOUT 0x0c16 ) 944  sbt_hci_cmd_wr™e_cÚn_acû±_timeout { 945 ušt16_t mtimeout ; 946 } __©Œibu‹__ (( ·cked )); 948  #BT_HCI_CMD_READ_PAGE_TIMEOUT 0x0c17 ) 949  sbt_hci_r¥_»ad_·ge_timeout { 950 ušt8_t m¡©us ; 951 ušt16_t mtimeout ; 952 } __©Œibu‹__ (( ·cked )); 954  #BT_HCI_CMD_WRITE_PAGE_TIMEOUT 0x0c18 ) 955  sbt_hci_cmd_wr™e_·ge_timeout { 956 ušt16_t mtimeout ; 957 } __©Œibu‹__ (( ·cked )); 959  #BT_HCI_CMD_READ_SCAN_ENABLE 0x0c19 ) 960  sbt_hci_r¥_»ad_sÿn_’abË { 961 ušt8_t m¡©us ; 962 ušt8_t m’abË ; 963 } __©Œibu‹__ (( ·cked )); 965  #BT_HCI_CMD_WRITE_SCAN_ENABLE 0x0c1a ) 966  sbt_hci_cmd_wr™e_sÿn_’abË { 967 ušt8_t m’abË ; 968 } __©Œibu‹__ (( ·cked )); 970  #BT_HCI_CMD_READ_PAGE_SCAN_ACTIVITY 0x0c1b ) 971  sbt_hci_r¥_»ad_·ge_sÿn_aùiv™y { 972 ušt8_t m¡©us ; 973 ušt16_t mš‹rv® ; 974 ušt16_t mwšdow ; 975 } __©Œibu‹__ (( ·cked )); 977  #BT_HCI_CMD_WRITE_PAGE_SCAN_ACTIVITY 0x0c1c ) 978  sbt_hci_cmd_wr™e_·ge_sÿn_aùiv™y { 979 ušt16_t mš‹rv® ; 980 ušt16_t mwšdow ; 981 } __©Œibu‹__ (( ·cked )); 983  #BT_HCI_CMD_READ_INQUIRY_SCAN_ACTIVITY 0x0c1d ) 984  sbt_hci_r¥_»ad_šquœy_sÿn_aùiv™y { 985 ušt8_t m¡©us ; 986 ušt16_t mš‹rv® ; 987 ušt16_t mwšdow ; 988 } __©Œibu‹__ (( ·cked )); 990  #BT_HCI_CMD_WRITE_INQUIRY_SCAN_ACTIVITY 0x0c1e ) 991  sbt_hci_cmd_wr™e_šquœy_sÿn_aùiv™y { 992 ušt16_t mš‹rv® ; 993 ušt16_t mwšdow ; 994 } __©Œibu‹__ (( ·cked )); 996  #BT_HCI_CMD_READ_AUTH_ENABLE 0x0c1f ) 997  sbt_hci_r¥_»ad_auth_’abË { 998 ušt8_t m¡©us ; 999 ušt8_t m’abË ; 1000 } __©Œibu‹__ (( ·cked )); 1002  #BT_HCI_CMD_WRITE_AUTH_ENABLE 0x0c20 ) 1003  sbt_hci_cmd_wr™e_auth_’abË { 1004 ušt8_t m’abË ; 1005 } __©Œibu‹__ (( ·cked )); 1007  #BT_HCI_CMD_READ_ENCRYPT_MODE 0x0c21 ) 1008  sbt_hci_r¥_»ad_’üy±_mode { 1009 ušt8_t m¡©us ; 1010 ušt8_t mmode ; 1011 } __©Œibu‹__ (( ·cked )); 1013  #BT_HCI_CMD_WRITE_ENCRYPT_MODE 0x0c22 ) 1014  sbt_hci_cmd_wr™e_’üy±_mode { 1015 ušt8_t mmode ; 1016 } __©Œibu‹__ (( ·cked )); 1018  #BT_HCI_CMD_READ_CLASS_OF_DEV 0x0c23 ) 1019  sbt_hci_r¥_»ad_þass_of_dev { 1020 ušt8_t m¡©us ; 1021 ušt8_t mdev_þass [3]; 1022 } __©Œibu‹__ (( ·cked )); 1024  #BT_HCI_CMD_WRITE_CLASS_OF_DEV 0x0c24 ) 1025  sbt_hci_cmd_wr™e_þass_of_dev { 1026 ušt8_t mdev_þass [3]; 1027 } __©Œibu‹__ (( ·cked )); 1029  #BT_HCI_CMD_READ_VOICE_SETTING 0x0c25 ) 1030  sbt_hci_r¥_»ad_voiû_£‰šg { 1031 ušt8_t m¡©us ; 1032 ušt16_t m£‰šg ; 1033 } __©Œibu‹__ (( ·cked )); 1035  #BT_HCI_CMD_WRITE_VOICE_SETTING 0x0c26 ) 1036  sbt_hci_cmd_wr™e_voiû_£‰šg { 1037 ušt16_t m£‰šg ; 1038 } __©Œibu‹__ (( ·cked )); 1040  #BT_HCI_CMD_READ_AUTO_FLUSH_TIMEOUT 0x0c27 ) 1041  sbt_hci_cmd_»ad_auto_æush_timeout { 1042 ušt16_t mhªdË ; 1043 } __©Œibu‹__ (( ·cked )); 1044  sbt_hci_r¥_»ad_auto_æush_timeout { 1045 ušt8_t m¡©us ; 1046 ušt16_t mhªdË ; 1047 ušt16_t mtimeout ; 1048 } __©Œibu‹__ (( ·cked )); 1050  #BT_HCI_CMD_WRITE_AUTO_FLUSH_TIMEOUT 0x0c28 ) 1051  sbt_hci_cmd_wr™e_auto_æush_timeout { 1052 ušt16_t mhªdË ; 1053 ušt16_t mtimeout ; 1054 } __©Œibu‹__ (( ·cked )); 1055  sbt_hci_r¥_wr™e_auto_æush_timeout { 1056 ušt8_t m¡©us ; 1057 ušt16_t mhªdË ; 1058 } __©Œibu‹__ (( ·cked )); 1060  #BT_HCI_CMD_READ_NUM_BROADCAST_RETRANS 0x0c29 ) 1061  sbt_hci_r¥_»ad_num_brßdÿ¡_»Œªs { 1062 ušt8_t m¡©us ; 1063 ušt8_t mnum_»Œªs ; 1064 } __©Œibu‹__ (( ·cked )); 1066  #BT_HCI_CMD_WRITE_NUM_BROADCAST_RETRANS 0x0c2a ) 1067  sbt_hci_cmd_wr™e_num_brßdÿ¡_»Œªs { 1068 ušt8_t mnum_»Œªs ; 1069 } __©Œibu‹__ (( ·cked )); 1071  #BT_HCI_CMD_READ_HOLD_MODE_ACTIVITY 0x0c2b ) 1072  sbt_hci_r¥_»ad_hÞd_mode_aùiv™y { 1073 ušt8_t m¡©us ; 1074 ušt8_t maùiv™y ; 1075 } __©Œibu‹__ (( ·cked )); 1077  #BT_HCI_CMD_WRITE_HOLD_MODE_ACTIVITY 0x0c2c ) 1078  sbt_hci_cmd_wr™e_hÞd_mode_aùiv™y { 1079 ušt8_t maùiv™y ; 1080 } __©Œibu‹__ (( ·cked )); 1082  #BT_HCI_CMD_READ_TX_POWER 0x0c2d ) 1083  sbt_hci_cmd_»ad_tx_pow” { 1084 ušt16_t mhªdË ; 1085 ušt8_t mty³ ; 1086 } __©Œibu‹__ (( ·cked )); 1087  sbt_hci_r¥_»ad_tx_pow” { 1088 ušt8_t m¡©us ; 1089 ušt16_t mhªdË ; 1090 št8_t mËv– ; 1091 } __©Œibu‹__ (( ·cked )); 1093  #BT_HCI_CMD_READ_SYNC_FLOW_CONTROL 0x0c2e ) 1094  sbt_hci_r¥_»ad_sync_æow_cÚŒÞ { 1095 ušt8_t m¡©us ; 1096 ušt8_t m’abË ; 1097 } __©Œibu‹__ (( ·cked )); 1099  #BT_HCI_CMD_WRITE_SYNC_FLOW_CONTROL 0x0c2f ) 1100  sbt_hci_cmd_wr™e_sync_æow_cÚŒÞ { 1101 ušt8_t m’abË ; 1102 } __©Œibu‹__ (( ·cked )); 1104  #BT_HCI_CMD_SET_HOST_FLOW_CONTROL 0x0c31 ) 1105  sbt_hci_cmd_£t_ho¡_æow_cÚŒÞ { 1106 ušt8_t m’abË ; 1107 } __©Œibu‹__ (( ·cked )); 1109  #BT_HCI_CMD_HOST_BUFFER_SIZE 0x0c33 ) 1110  sbt_hci_cmd_ho¡_bufãr_size { 1111 ušt16_t maþ_mtu ; 1112 ušt8_t msco_mtu ; 1113 ušt16_t maþ_max_pkt ; 1114 ušt16_t msco_max_pkt ; 1115 } __©Œibu‹__ (( ·cked )); 1117  #BT_HCI_CMD_READ_LINK_SUPV_TIMEOUT 0x0c36 ) 1118  sbt_hci_cmd_»ad_lšk_supv_timeout { 1119 ušt16_t mhªdË ; 1120 } __©Œibu‹__ (( ·cked )); 1121  sbt_hci_r¥_»ad_lšk_supv_timeout { 1122 ušt8_t m¡©us ; 1123 ušt16_t mhªdË ; 1124 ušt16_t mtimeout ; 1125 } __©Œibu‹__ (( ·cked )); 1127  #BT_HCI_CMD_WRITE_LINK_SUPV_TIMEOUT 0x0c37 ) 1128  sbt_hci_cmd_wr™e_lšk_supv_timeout { 1129 ušt16_t mhªdË ; 1130 ušt16_t mtimeout ; 1131 } __©Œibu‹__ (( ·cked )); 1132  sbt_hci_r¥_wr™e_lšk_supv_timeout { 1133 ušt8_t m¡©us ; 1134 ušt16_t mhªdË ; 1135 } __©Œibu‹__ (( ·cked )); 1137  #BT_HCI_CMD_READ_NUM_SUPPORTED_IAC 0x0c38 ) 1138  sbt_hci_r¥_»ad_num_suµÜ‹d_Ÿc { 1139 ušt8_t m¡©us ; 1140 ušt8_t mnum_Ÿc ; 1141 } __©Œibu‹__ (( ·cked )); 1143  #BT_HCI_CMD_READ_CURRENT_IAC_LAP 0x0c39 ) 1144  sbt_hci_r¥_»ad_cu¼’t_Ÿc_Ïp { 1145 ušt8_t m¡©us ; 1146 ušt8_t mnum_Ÿc ; 1147 ušt8_t mŸc_Ïp [0]; 1148 } __©Œibu‹__ (( ·cked )); 1150  #BT_HCI_CMD_WRITE_CURRENT_IAC_LAP 0x0c3a ) 1151  sbt_hci_cmd_wr™e_cu¼’t_Ÿc_Ïp { 1152 ušt8_t mnum_Ÿc ; 1153 ušt8_t mŸc_Ïp [0]; 1154 } __©Œibu‹__ (( ·cked )); 1156  #BT_HCI_CMD_READ_PAGE_SCAN_PERIOD_MODE 0x0c3b ) 1157  sbt_hci_r¥_»ad_·ge_sÿn_³riod_mode { 1158 ušt8_t m¡©us ; 1159 ušt8_t mmode ; 1160 } __©Œibu‹__ (( ·cked )); 1162  #BT_HCI_CMD_WRITE_PAGE_SCAN_PERIOD_MODE 0x0c3c ) 1163  sbt_hci_cmd_wr™e_·ge_sÿn_³riod_mode { 1164 ušt8_t mmode ; 1165 } __©Œibu‹__ (( ·cked )); 1167  #BT_HCI_CMD_READ_PAGE_SCAN_MODE 0x0c3d ) 1168  sbt_hci_r¥_»ad_·ge_sÿn_mode { 1169 ušt8_t m¡©us ; 1170 ušt8_t mmode ; 1171 } __©Œibu‹__ (( ·cked )); 1173  #BT_HCI_CMD_WRITE_PAGE_SCAN_MODE 0x0c3e ) 1174  sbt_hci_cmd_wr™e_·ge_sÿn_mode { 1175 ušt8_t mmode ; 1176 } __©Œibu‹__ (( ·cked )); 1178  #BT_HCI_CMD_SET_AFH_HOST_CLASSIFICATION 0x0c3f ) 1179  sbt_hci_cmd_£t_afh_ho¡_þassifiÿtiÚ { 1180 ušt8_t mm­ [10]; 1181 } __©Œibu‹__ (( ·cked )); 1183  #BT_HCI_CMD_READ_INQUIRY_SCAN_TYPE 0x0c42 ) 1184  sbt_hci_r¥_»ad_šquœy_sÿn_ty³ { 1185 ušt8_t m¡©us ; 1186 ušt8_t mty³ ; 1187 } __©Œibu‹__ (( ·cked )); 1189  #BT_HCI_CMD_WRITE_INQUIRY_SCAN_TYPE 0x0c43 ) 1190  sbt_hci_cmd_wr™e_šquœy_sÿn_ty³ { 1191 ušt8_t mty³ ; 1192 } __©Œibu‹__ (( ·cked )); 1194  #BT_HCI_CMD_READ_INQUIRY_MODE 0x0c44 ) 1195  sbt_hci_r¥_»ad_šquœy_mode { 1196 ušt8_t m¡©us ; 1197 ušt8_t mmode ; 1198 } __©Œibu‹__ (( ·cked )); 1200  #BT_HCI_CMD_WRITE_INQUIRY_MODE 0x0c45 ) 1201  sbt_hci_cmd_wr™e_šquœy_mode { 1202 ušt8_t mmode ; 1203 } __©Œibu‹__ (( ·cked )); 1205  #BT_HCI_CMD_READ_PAGE_SCAN_TYPE 0x0c46 ) 1206  sbt_hci_r¥_»ad_·ge_sÿn_ty³ { 1207 ušt8_t m¡©us ; 1208 ušt8_t mty³ ; 1209 } __©Œibu‹__ (( ·cked )); 1211  #BT_HCI_CMD_WRITE_PAGE_SCAN_TYPE 0x0c47 ) 1212  sbt_hci_cmd_wr™e_·ge_sÿn_ty³ { 1213 ušt8_t mty³ ; 1214 } __©Œibu‹__ (( ·cked )); 1216  #BT_HCI_CMD_READ_AFH_ASSESSMENT_MODE 0x0c48 ) 1217  sbt_hci_r¥_»ad_afh_as£ssm’t_mode { 1218 ušt8_t m¡©us ; 1219 ušt8_t mmode ; 1220 } __©Œibu‹__ (( ·cked )); 1222  #BT_HCI_CMD_WRITE_AFH_ASSESSMENT_MODE 0x0c49 ) 1223  sbt_hci_cmd_wr™e_afh_as£ssm’t_mode { 1224 ušt8_t mmode ; 1225 } __©Œibu‹__ (( ·cked )); 1227  #BT_HCI_CMD_READ_EXT_INQUIRY_RESPONSE 0x0c51 ) 1228  sbt_hci_r¥_»ad_ext_šquœy_»¥Ú£ { 1229 ušt8_t m¡©us ; 1230 ušt8_t mãc ; 1231 ušt8_t md©a [240]; 1232 } __©Œibu‹__ (( ·cked )); 1234  #BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE 0x0c52 ) 1235  sbt_hci_cmd_wr™e_ext_šquœy_»¥Ú£ { 1236 ušt8_t mãc ; 1237 ušt8_t md©a [240]; 1238 } __©Œibu‹__ (( ·cked )); 1240  #BT_HCI_CMD_REFRESH_ENCRYPT_KEY 0x0c53 ) 1241  sbt_hci_cmd_»äesh_’üy±_key { 1242 ušt16_t mhªdË ; 1243 } __©Œibu‹__ (( ·cked )); 1245  #BT_HCI_CMD_READ_SIMPLE_PAIRING_MODE 0x0c55 ) 1246  sbt_hci_r¥_»ad_sim¶e_·œšg_mode { 1247 ušt8_t m¡©us ; 1248 ušt8_t mmode ; 1249 } __©Œibu‹__ (( ·cked )); 1251  #BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE 0x0c56 ) 1252  sbt_hci_cmd_wr™e_sim¶e_·œšg_mode { 1253 ušt8_t mmode ; 1254 } __©Œibu‹__ (( ·cked )); 1256  #BT_HCI_CMD_READ_LOCAL_OOB_DATA 0x0c57 ) 1257  sbt_hci_r¥_»ad_loÿl_oob_d©a { 1258 ušt8_t m¡©us ; 1259 ušt8_t mhash [16]; 1260 ušt8_t m¿ndomiz” [16]; 1261 } __©Œibu‹__ (( ·cked )); 1263  #BT_HCI_CMD_READ_INQUIRY_RESP_TX_POWER 0x0c58 ) 1264  sbt_hci_r¥_»ad_šquœy_»¥_tx_pow” { 1265 ušt8_t m¡©us ; 1266 št8_t mËv– ; 1267 } __©Œibu‹__ (( ·cked )); 1269  #BT_HCI_CMD_WRITE_INQUIRY_TX_POWER 0x0c59 ) 1270  sbt_hci_cmd_wr™e_šquœy_tx_pow” { 1271 št8_t mËv– ; 1272 } __©Œibu‹__ (( ·cked )); 1274  #BT_HCI_CMD_ENHANCED_FLUSH 0x0c5f ) 1275  sbt_hci_cmd_’hªûd_æush { 1276 ušt16_t mhªdË ; 1277 ušt8_t mty³ ; 1278 } __©Œibu‹__ (( ·cked )); 1280  #BT_HCI_CMD_SEND_KEYPRESS_NOTIFY 0x0c60 ) 1281  sbt_hci_cmd_£nd_key´ess_nÙify { 1282 ušt8_t mbdaddr [6]; 1283 ušt8_t mty³ ; 1284 } __©Œibu‹__ (( ·cked )); 1285  sbt_hci_r¥_£nd_key´ess_nÙify { 1286 ušt8_t m¡©us ; 1287 ušt8_t mbdaddr [6]; 1288 } __©Œibu‹__ (( ·cked )); 1290  #BT_HCI_CMD_SET_EVENT_MASK_PAGE2 0x0c63 ) 1291  sbt_hci_cmd_£t_ev’t_mask_·ge2 { 1292 ušt8_t mmask [8]; 1293 } __©Œibu‹__ (( ·cked )); 1295  #BT_HCI_CMD_READ_LOCATION_DATA 0x0c64 ) 1296  sbt_hci_r¥_»ad_loÿtiÚ_d©a { 1297 ušt8_t m¡©us ; 1298 ušt8_t mdomaš_aw¬e ; 1299 ušt8_t mdomaš [2]; 1300 ušt8_t mdomaš_ÝtiÚs ; 1301 ušt8_t mÝtiÚs ; 1302 } __©Œibu‹__ (( ·cked )); 1304  #BT_HCI_CMD_WRITE_LOCATION_DATA 0x0c65 ) 1305  sbt_hci_cmd_wr™e_loÿtiÚ_d©a { 1306 ušt8_t mdomaš_aw¬e ; 1307 ušt8_t mdomaš [2]; 1308 ušt8_t mdomaš_ÝtiÚs ; 1309 ušt8_t mÝtiÚs ; 1310 } __©Œibu‹__ (( ·cked )); 1312  #BT_HCI_CMD_READ_FLOW_CONTROL_MODE 0x0c66 ) 1313  sbt_hci_r¥_»ad_æow_cÚŒÞ_mode { 1314 ušt8_t m¡©us ; 1315 ušt8_t mmode ; 1316 } __©Œibu‹__ (( ·cked )); 1318  #BT_HCI_CMD_WRITE_FLOW_CONTROL_MODE 0x0c67 ) 1319  sbt_hci_cmd_wr™e_æow_cÚŒÞ_mode { 1320 ušt8_t mmode ; 1321 } __©Œibu‹__ (( ·cked )); 1323  #BT_HCI_CMD_READ_LE_HOST_SUPPORTED 0x0c6c ) 1324  sbt_hci_r¥_»ad_Ë_ho¡_suµÜ‹d { 1325 ušt8_t m¡©us ; 1326 ušt8_t msuµÜ‹d ; 1327 ušt8_t msimuɪeous ; 1328 } __©Œibu‹__ (( ·cked )); 1330  #BT_HCI_CMD_WRITE_LE_HOST_SUPPORTED 0x0c6d ) 1331  sbt_hci_cmd_wr™e_Ë_ho¡_suµÜ‹d { 1332 ušt8_t msuµÜ‹d ; 1333 ušt8_t msimuɪeous ; 1334 } __©Œibu‹__ (( ·cked )); 1336  #BT_HCI_CMD_SET_RESERVED_LT_ADDR 0x0c74 ) 1337  sbt_hci_cmd_£t_»£rved_É_addr { 1338 ušt8_t mÉ_addr ; 1339 } __©Œibu‹__ (( ·cked )); 1340  sbt_hci_r¥_£t_»£rved_É_addr { 1341 ušt8_t m¡©us ; 1342 ušt8_t mÉ_addr ; 1343 } __©Œibu‹__ (( ·cked )); 1345  #BT_HCI_CMD_DELETE_RESERVED_LT_ADDR 0x0c75 ) 1346  sbt_hci_cmd_d–‘e_»£rved_É_addr { 1347 ušt8_t mÉ_addr ; 1348 } __©Œibu‹__ (( ·cked )); 1349  sbt_hci_r¥_d–‘e_»£rved_É_addr { 1350 ušt8_t m¡©us ; 1351 ušt8_t mÉ_addr ; 1352 } __©Œibu‹__ (( ·cked )); 1354  #BT_HCI_CMD_SET_SLAVE_BROADCAST_DATA 0x0c76 ) 1355  sbt_hci_cmd_£t_¦ave_brßdÿ¡_d©a { 1356 ušt8_t mÉ_addr ; 1357 ušt8_t mäagm’t ; 1358 ušt8_t mËngth ; 1359 } __©Œibu‹__ (( ·cked )); 1360  sbt_hci_r¥_£t_¦ave_brßdÿ¡_d©a { 1361 ušt8_t m¡©us ; 1362 ušt8_t mÉ_addr ; 1363 } __©Œibu‹__ (( ·cked )); 1365  #BT_HCI_CMD_READ_SYNC_TRAIN_PARAMS 0x0c77 ) 1366  sbt_hci_r¥_»ad_sync_Œaš_·¿ms { 1367 ušt8_t m¡©us ; 1368 ušt16_t mš‹rv® ; 1369 ušt32_t mtimeout ; 1370 ušt8_t m£rviû_d©a ; 1371 } __©Œibu‹__ (( ·cked )); 1373  #BT_HCI_CMD_WRITE_SYNC_TRAIN_PARAMS 0x0c78 ) 1374  sbt_hci_cmd_wr™e_sync_Œaš_·¿ms { 1375 ušt16_t mmš_š‹rv® ; 1376 ušt16_t mmax_š‹rv® ; 1377 ušt32_t mtimeout ; 1378 ušt8_t m£rviû_d©a ; 1379 } __©Œibu‹__ (( ·cked )); 1380  sbt_hci_r¥_wr™e_sync_Œaš_·¿ms { 1381 ušt8_t m¡©us ; 1382 ušt16_t mš‹rv® ; 1383 } __©Œibu‹__ (( ·cked )); 1385  #BT_HCI_CMD_READ_SECURE_CONN_SUPPORT 0x0c79 ) 1386  sbt_hci_r¥_»ad_£cu»_cÚn_suµÜt { 1387 ušt8_t m¡©us ; 1388 ušt8_t msuµÜt ; 1389 } __©Œibu‹__ (( ·cked )); 1391  #BT_HCI_CMD_WRITE_SECURE_CONN_SUPPORT 0x0c7a ) 1392  sbt_hci_cmd_wr™e_£cu»_cÚn_suµÜt { 1393 ušt8_t msuµÜt ; 1394 } __©Œibu‹__ (( ·cked )); 1396  #BT_HCI_CMD_READ_AUTH_PAYLOAD_TIMEOUT 0x0c7b ) 1397  sbt_hci_cmd_»ad_auth_·ylßd_timeout { 1398 ušt16_t mhªdË ; 1399 } __©Œibu‹__ (( ·cked )); 1400  sbt_hci_r¥_»ad_auth_·ylßd_timeout { 1401 ušt8_t m¡©us ; 1402 ušt16_t mhªdË ; 1403 ušt16_t mtimeout ; 1404 } __©Œibu‹__ (( ·cked )); 1406  #BT_HCI_CMD_WRITE_AUTH_PAYLOAD_TIMEOUT 0x0c7c ) 1407  sbt_hci_cmd_wr™e_auth_·ylßd_timeout { 1408 ušt16_t mhªdË ; 1409 ušt16_t mtimeout ; 1410 } __©Œibu‹__ (( ·cked )); 1411  sbt_hci_r¥_wr™e_auth_·ylßd_timeout { 1412 ušt8_t m¡©us ; 1413 ušt16_t mhªdË ; 1414 } __©Œibu‹__ (( ·cked )); 1416  #BT_HCI_CMD_READ_LOCAL_OOB_EXT_DATA 0x0c7d ) 1417  sbt_hci_r¥_»ad_loÿl_oob_ext_d©a { 1418 ušt8_t m¡©us ; 1419 ušt8_t mhash192 [16]; 1420 ušt8_t m¿ndomiz”192 [16]; 1421 ušt8_t mhash256 [16]; 1422 ušt8_t m¿ndomiz”256 [16]; 1423 } __©Œibu‹__ (( ·cked )); 1425  #BT_HCI_CMD_READ_LOCAL_VERSION 0x1001 ) 1426  sbt_hci_r¥_»ad_loÿl_v”siÚ { 1427 ušt8_t m¡©us ; 1428 ušt8_t mhci_v” ; 1429 ušt16_t mhci_»v ; 1430 ušt8_t mlmp_v” ; 1431 ušt16_t mmªuçùu»r ; 1432 ušt16_t mlmp_subv” ; 1433 } __©Œibu‹__ (( ·cked )); 1435  #BT_HCI_CMD_READ_LOCAL_COMMANDS 0x1002 ) 1436  sbt_hci_r¥_»ad_loÿl_commªds { 1437 ušt8_t m¡©us ; 1438 ušt8_t mcommªds [64]; 1439 } __©Œibu‹__ (( ·cked )); 1441  #BT_HCI_CMD_READ_LOCAL_FEATURES 0x1003 ) 1442  sbt_hci_r¥_»ad_loÿl_ã©u»s { 1443 ušt8_t m¡©us ; 1444 ušt8_t mã©u»s [8]; 1445 } __©Œibu‹__ (( ·cked )); 1447  #BT_HCI_CMD_READ_LOCAL_EXT_FEATURES 0x1004 ) 1448  sbt_hci_cmd_»ad_loÿl_ext_ã©u»s { 1449 ušt8_t m·ge ; 1450 } __©Œibu‹__ (( ·cked )); 1451  sbt_hci_r¥_»ad_loÿl_ext_ã©u»s { 1452 ušt8_t m¡©us ; 1453 ušt8_t m·ge ; 1454 ušt8_t mmax_·ge ; 1455 ušt8_t mã©u»s [8]; 1456 } __©Œibu‹__ (( ·cked )); 1458  #BT_HCI_CMD_READ_BUFFER_SIZE 0x1005 ) 1459  sbt_hci_r¥_»ad_bufãr_size { 1460 ušt8_t m¡©us ; 1461 ušt16_t maþ_mtu ; 1462 ušt8_t msco_mtu ; 1463 ušt16_t maþ_max_pkt ; 1464 ušt16_t msco_max_pkt ; 1465 } __©Œibu‹__ (( ·cked )); 1467  #BT_HCI_CMD_READ_COUNTRY_CODE 0x1007 ) 1468  sbt_hci_r¥_»ad_couÁry_code { 1469 ušt8_t m¡©us ; 1470 ušt8_t mcode ; 1471 } __©Œibu‹__ (( ·cked )); 1473  #BT_HCI_CMD_READ_BD_ADDR 0x1009 ) 1474  sbt_hci_r¥_»ad_bd_addr { 1475 ušt8_t m¡©us ; 1476 ušt8_t mbdaddr [6]; 1477 } __©Œibu‹__ (( ·cked )); 1479  #BT_HCI_CMD_READ_DATA_BLOCK_SIZE 0x100a ) 1480  sbt_hci_r¥_»ad_d©a_block_size { 1481 ušt8_t m¡©us ; 1482 ušt16_t mmax_aþ_Ën ; 1483 ušt16_t mblock_Ën ; 1484 ušt16_t mnum_blocks ; 1485 } __©Œibu‹__ (( ·cked )); 1487  #BT_HCI_CMD_READ_LOCAL_CODECS 0x100b ) 1488  sbt_hci_r¥_»ad_loÿl_codecs { 1489 ušt8_t m¡©us ; 1490 ušt8_t mnum_codecs ; 1491 ušt8_t mcodec [0]; 1492 } __©Œibu‹__ (( ·cked )); 1494  #BT_HCI_CMD_READ_FAILED_CONTACT_COUNTER 0x1401 ) 1495  sbt_hci_cmd_»ad_çžed_cÚù_couÁ” { 1496 ušt16_t mhªdË ; 1497 } __©Œibu‹__ (( ·cked )); 1498  sbt_hci_r¥_»ad_çžed_cÚù_couÁ” { 1499 ušt8_t m¡©us ; 1500 ušt16_t mhªdË ; 1501 ušt16_t mcouÁ” ; 1502 } __©Œibu‹__ (( ·cked )); 1504  #BT_HCI_CMD_RESET_FAILED_CONTACT_COUNTER 0x1402 ) 1505  sbt_hci_cmd_»£t_çžed_cÚù_couÁ” { 1506 ušt16_t mhªdË ; 1507 } __©Œibu‹__ (( ·cked )); 1508  sbt_hci_r¥_»£t_çžed_cÚù_couÁ” { 1509 ušt8_t m¡©us ; 1510 ušt16_t mhªdË ; 1511 } __©Œibu‹__ (( ·cked )); 1513  #BT_HCI_CMD_READ_LINK_QUALITY 0x1403 ) 1514  sbt_hci_cmd_»ad_lšk_qu®™y { 1515 ušt16_t mhªdË ; 1516 } __©Œibu‹__ (( ·cked )); 1517  sbt_hci_r¥_»ad_lšk_qu®™y { 1518 ušt8_t m¡©us ; 1519 ušt16_t mhªdË ; 1520 ušt8_t mlšk_qu®™y ; 1521 } __©Œibu‹__ (( ·cked )); 1523  #BT_HCI_CMD_READ_RSSI 0x1405 ) 1524  sbt_hci_cmd_»ad_rssi { 1525 ušt16_t mhªdË ; 1526 } __©Œibu‹__ (( ·cked )); 1527  sbt_hci_r¥_»ad_rssi { 1528 ušt8_t m¡©us ; 1529 ušt16_t mhªdË ; 1530 št8_t mrssi ; 1531 } __©Œibu‹__ (( ·cked )); 1533  #BT_HCI_CMD_READ_AFH_CHANNEL_MAP 0x1406 ) 1534  sbt_hci_cmd_»ad_afh_chªÃl_m­ { 1535 ušt16_t mhªdË ; 1536 } __©Œibu‹__ (( ·cked )); 1537  sbt_hci_r¥_»ad_afh_chªÃl_m­ { 1538 ušt8_t m¡©us ; 1539 ušt16_t mhªdË ; 1540 ušt8_t mmode ; 1541 ušt8_t mm­ [10]; 1542 } __©Œibu‹__ (( ·cked )); 1544  #BT_HCI_CMD_READ_CLOCK 0x1407 ) 1545  sbt_hci_cmd_»ad_þock { 1546 ušt16_t mhªdË ; 1547 ušt8_t mty³ ; 1548 } __©Œibu‹__ (( ·cked )); 1549  sbt_hci_r¥_»ad_þock { 1550 ušt8_t m¡©us ; 1551 ušt16_t mhªdË ; 1552 ušt32_t mþock ; 1553 ušt16_t maccu¿cy ; 1554 } __©Œibu‹__ (( ·cked )); 1556  #BT_HCI_CMD_READ_ENCRYPT_KEY_SIZE 0x1408 ) 1557  sbt_hci_cmd_»ad_’üy±_key_size { 1558 ušt16_t mhªdË ; 1559 } __©Œibu‹__ (( ·cked )); 1560  sbt_hci_r¥_»ad_’üy±_key_size { 1561 ušt8_t m¡©us ; 1562 ušt16_t mhªdË ; 1563 ušt8_t mkey_size ; 1564 } __©Œibu‹__ (( ·cked )); 1566  #BT_HCI_CMD_READ_LOCAL_AMP_INFO 0x1409 ) 1567  sbt_hci_r¥_»ad_loÿl_amp_šfo { 1568 ušt8_t m¡©us ; 1569 ušt8_t mamp_¡©us ; 1570 ušt32_t mtÙ®_bw ; 1571 ušt32_t mmax_bw ; 1572 ušt32_t mmš_Ï‹ncy ; 1573 ušt32_t mmax_pdu ; 1574 ušt8_t mamp_ty³ ; 1575 ušt16_t m·l_ÿp ; 1576 ušt16_t mmax_assoc_Ën ; 1577 ušt32_t mmax_æush_to ; 1578 ušt32_t mbe_æush_to ; 1579 } __©Œibu‹__ (( ·cked )); 1581  #BT_HCI_CMD_READ_LOCAL_AMP_ASSOC 0x140a ) 1582  sbt_hci_cmd_»ad_loÿl_amp_assoc { 1583 ušt8_t mphy_hªdË ; 1584 ušt16_t mËn_so_çr ; 1585 ušt16_t mmax_assoc_Ën ; 1586 } __©Œibu‹__ (( ·cked )); 1587  sbt_hci_r¥_»ad_loÿl_amp_assoc { 1588 ušt8_t m¡©us ; 1589 ušt8_t mphy_hªdË ; 1590 ušt16_t m»maš_assoc_Ën ; 1591 ušt8_t massoc_äagm’t [248]; 1592 } __©Œibu‹__ (( ·cked )); 1594  #BT_HCI_CMD_WRITE_REMOTE_AMP_ASSOC 0x140b ) 1595  sbt_hci_cmd_wr™e_»mÙe_amp_assoc { 1596 ušt8_t mphy_hªdË ; 1597 ušt16_t mËn_so_çr ; 1598 ušt16_t m»maš_assoc_Ën ; 1599 ušt8_t massoc_äagm’t [248]; 1600 } __©Œibu‹__ (( ·cked )); 1601  sbt_hci_r¥_wr™e_»mÙe_amp_assoc { 1602 ušt8_t m¡©us ; 1603 ušt8_t mphy_hªdË ; 1604 } __©Œibu‹__ (( ·cked )); 1606  #BT_HCI_CMD_GET_MWS_TRANSPORT_CONFIG 0x140c ) 1607  sbt_hci_r¥_g‘_mws_Œª¥Üt_cÚfig { 1608 ušt8_t m¡©us ; 1609 ušt8_t mnum_Œª¥Üts ; 1610 ušt8_t mŒª¥Üt [0]; 1611 } __©Œibu‹__ (( ·cked )); 1613  #BT_HCI_CMD_SET_TRIGGERED_CLOCK_CAPTURE 0x140d ) 1614  sbt_hci_cmd_£t_Œigg”ed_þock_ÿ±u» { 1615 ušt16_t mhªdË ; 1616 ušt8_t m’abË ; 1617 ušt8_t mty³ ; 1618 ušt8_t mÍo_®lowed ; 1619 ušt8_t mnum_fž‹r ; 1620 } __©Œibu‹__ (( ·cked )); 1622  #BT_HCI_CMD_ENABLE_DUT_MODE 0x1803 ) 1624  #BT_HCI_CMD_WRITE_SSP_DEBUG_MODE 0x1804 ) 1625  sbt_hci_cmd_wr™e_s¥_debug_mode { 1626 ušt8_t mmode ; 1627 } __©Œibu‹__ (( ·cked )); 1629  #BT_HCI_CMD_LE_SET_EVENT_MASK 0x2001 ) 1630  sbt_hci_cmd_Ë_£t_ev’t_mask { 1631 ušt8_t mmask [8]; 1632 } __©Œibu‹__ (( ·cked )); 1634  #BT_HCI_CMD_LE_READ_BUFFER_SIZE 0x2002 ) 1635  sbt_hci_r¥_Ë_»ad_bufãr_size { 1636 ušt8_t m¡©us ; 1637 ušt16_t mË_mtu ; 1638 ušt8_t mË_max_pkt ; 1639 } __©Œibu‹__ (( ·cked )); 1641  #BT_HCI_CMD_LE_READ_LOCAL_FEATURES 0x2003 ) 1642  sbt_hci_r¥_Ë_»ad_loÿl_ã©u»s { 1643 ušt8_t m¡©us ; 1644 ušt8_t mã©u»s [8]; 1645 } __©Œibu‹__ (( ·cked )); 1647  #BT_HCI_CMD_LE_SET_RANDOM_ADDRESS 0x2005 ) 1648  sbt_hci_cmd_Ë_£t_¿ndom_add»ss { 1649 ušt8_t maddr [6]; 1650 } __©Œibu‹__ (( ·cked )); 1652  #BT_HCI_CMD_LE_SET_ADV_PARAMETERS 0x2006 ) 1653  sbt_hci_cmd_Ë_£t_adv_·¿m‘”s { 1654 ušt16_t mmš_š‹rv® ; 1655 ušt16_t mmax_š‹rv® ; 1656 ušt8_t mty³ ; 1657 ušt8_t mown_addr_ty³ ; 1658 ušt8_t mdœeù_addr_ty³ ; 1659 ušt8_t mdœeù_addr [6]; 1660 ušt8_t mchªÃl_m­ ; 1661 ušt8_t mfž‹r_pÞicy ; 1662 } __©Œibu‹__ (( ·cked )); 1664  #BT_HCI_CMD_LE_READ_ADV_TX_POWER 0x2007 ) 1665  sbt_hci_r¥_Ë_»ad_adv_tx_pow” { 1666 ušt8_t m¡©us ; 1667 št8_t mËv– ; 1668 } __©Œibu‹__ (( ·cked )); 1670  #BT_HCI_CMD_LE_SET_ADV_DATA 0x2008 ) 1671  sbt_hci_cmd_Ë_£t_adv_d©a { 1672 ušt8_t mËn ; 1673 ušt8_t md©a [31]; 1674 } __©Œibu‹__ (( ·cked )); 1676  #BT_HCI_CMD_LE_SET_SCAN_RSP_DATA 0x2009 ) 1677  sbt_hci_cmd_Ë_£t_sÿn_r¥_d©a { 1678 ušt8_t mËn ; 1679 ušt8_t md©a [31]; 1680 } __©Œibu‹__ (( ·cked )); 1682  #BT_HCI_CMD_LE_SET_ADV_ENABLE 0x200a ) 1683  sbt_hci_cmd_Ë_£t_adv_’abË { 1684 ušt8_t m’abË ; 1685 } __©Œibu‹__ (( ·cked )); 1687  #BT_HCI_CMD_LE_SET_SCAN_PARAMETERS 0x200b ) 1688  sbt_hci_cmd_Ë_£t_sÿn_·¿m‘”s { 1689 ušt8_t mty³ ; 1690 ušt16_t mš‹rv® ; 1691 ušt16_t mwšdow ; 1692 ušt8_t mown_addr_ty³ ; 1693 ušt8_t mfž‹r_pÞicy ; 1694 } __©Œibu‹__ (( ·cked )); 1696  #BT_HCI_CMD_LE_SET_SCAN_ENABLE 0x200c ) 1697  sbt_hci_cmd_Ë_£t_sÿn_’abË { 1698 ušt8_t m’abË ; 1699 ušt8_t mfž‹r_dup ; 1700 } __©Œibu‹__ (( ·cked )); 1702  #BT_HCI_CMD_LE_CREATE_CONN 0x200d ) 1703  sbt_hci_cmd_Ë_ü—‹_cÚn { 1704 ušt16_t msÿn_š‹rv® ; 1705 ušt16_t msÿn_wšdow ; 1706 ušt8_t mfž‹r_pÞicy ; 1707 ušt8_t m³”_addr_ty³ ; 1708 ušt8_t m³”_addr [6]; 1709 ušt8_t mown_addr_ty³ ; 1710 ušt16_t mmš_š‹rv® ; 1711 ušt16_t mmax_š‹rv® ; 1712 ušt16_t mÏ‹ncy ; 1713 ušt16_t msupv_timeout ; 1714 ušt16_t mmš_Ëngth ; 1715 ušt16_t mmax_Ëngth ; 1716 } __©Œibu‹__ (( ·cked )); 1718  #BT_HCI_CMD_LE_CREATE_CONN_CANCEL 0x200e ) 1720  #BT_HCI_CMD_LE_READ_WHITE_LIST_SIZE 0x200f ) 1721  sbt_hci_r¥_Ë_»ad_wh™e_li¡_size { 1722 ušt8_t m¡©us ; 1723 ušt8_t msize ; 1724 } __©Œibu‹__ (( ·cked )); 1726  #BT_HCI_CMD_LE_CLEAR_WHITE_LIST 0x2010 ) 1728  #BT_HCI_CMD_LE_ADD_TO_WHITE_LIST 0x2011 ) 1729  sbt_hci_cmd_Ë_add_to_wh™e_li¡ { 1730 ušt8_t maddr_ty³ ; 1731 ušt8_t maddr [6]; 1732 } __©Œibu‹__ (( ·cked )); 1734  #BT_HCI_CMD_LE_REMOVE_FROM_WHITE_LIST 0x2012 ) 1735  sbt_hci_cmd_Ë_»move_äom_wh™e_li¡ { 1736 ušt8_t maddr_ty³ ; 1737 ušt8_t maddr [6]; 1738 } __©Œibu‹__ (( ·cked )); 1740  #BT_HCI_CMD_LE_CONN_UPDATE 0x2013 ) 1741  sbt_hci_cmd_Ë_cÚn_upd©e { 1742 ušt16_t mhªdË ; 1743 ušt16_t mmš_š‹rv® ; 1744 ušt16_t mmax_š‹rv® ; 1745 ušt16_t mÏ‹ncy ; 1746 ušt16_t msupv_timeout ; 1747 ušt16_t mmš_Ëngth ; 1748 ušt16_t mmax_Ëngth ; 1749 } __©Œibu‹__ (( ·cked )); 1751  #BT_HCI_CMD_LE_SET_HOST_CLASSIFICATION 0x2014 ) 1752  sbt_hci_cmd_Ë_£t_ho¡_þassifiÿtiÚ { 1753 ušt8_t mm­ [5]; 1754 } __©Œibu‹__ (( ·cked )); 1756  #BT_HCI_CMD_LE_READ_CHANNEL_MAP 0x2015 ) 1757  sbt_hci_cmd_Ë_»ad_chªÃl_m­ { 1758 ušt16_t mhªdË ; 1759 } __©Œibu‹__ (( ·cked )); 1760  sbt_hci_r¥_Ë_»ad_chªÃl_m­ { 1761 ušt8_t m¡©us ; 1762 ušt16_t mhªdË ; 1763 ušt8_t mm­ [5]; 1764 } __©Œibu‹__ (( ·cked )); 1766  #BT_HCI_CMD_LE_READ_REMOTE_FEATURES 0x2016 ) 1767  sbt_hci_cmd_Ë_»ad_»mÙe_ã©u»s { 1768 ušt16_t mhªdË ; 1769 } __©Œibu‹__ (( ·cked )); 1771  #BT_HCI_CMD_LE_ENCRYPT 0x2017 ) 1772  sbt_hci_cmd_Ë_’üy± { 1773 ušt8_t mkey [16]; 1774 ušt8_t m¶aš‹xt [16]; 1775 } __©Œibu‹__ (( ·cked )); 1776  sbt_hci_r¥_Ë_’üy± { 1777 ušt8_t m¡©us ; 1778 ušt8_t md©a [16]; 1779 } __©Œibu‹__ (( ·cked )); 1781  #BT_HCI_CMD_LE_RAND 0x2018 ) 1782  sbt_hci_r¥_Ë_¿nd { 1783 ušt8_t m¡©us ; 1784 ušt64_t mnumb” ; 1785 } __©Œibu‹__ (( ·cked )); 1787  #BT_HCI_CMD_LE_START_ENCRYPT 0x2019 ) 1788  sbt_hci_cmd_Ë_¡¬t_’üy± { 1789 ušt16_t mhªdË ; 1790 ušt64_t m¿nd ; 1791 ušt16_t mediv ; 1792 ušt8_t mÉk [16]; 1793 } __©Œibu‹__ (( ·cked )); 1795  #BT_HCI_CMD_LE_LTK_REQ_REPLY 0x201a ) 1796  sbt_hci_cmd_Ë_Ék_»q_»¶y { 1797 ušt16_t mhªdË ; 1798 ušt8_t mÉk [16]; 1799 } __©Œibu‹__ (( ·cked )); 1800  sbt_hci_r¥_Ë_Ék_»q_»¶y { 1801 ušt8_t m¡©us ; 1802 ušt16_t mhªdË ; 1803 } __©Œibu‹__ (( ·cked )); 1805  #BT_HCI_CMD_LE_LTK_REQ_NEG_REPLY 0x201b ) 1806  sbt_hci_cmd_Ë_Ék_»q_Ãg_»¶y { 1807 ušt16_t mhªdË ; 1808 } __©Œibu‹__ (( ·cked )); 1809  sbt_hci_r¥_Ë_Ék_»q_Ãg_»¶y { 1810 ušt8_t m¡©us ; 1811 ušt16_t mhªdË ; 1812 } __©Œibu‹__ (( ·cked )); 1814  #BT_HCI_CMD_LE_READ_SUPPORTED_STATES 0x201c ) 1815  sbt_hci_r¥_Ë_»ad_suµÜ‹d_¡©es { 1816 ušt8_t m¡©us ; 1817 ušt8_t m¡©es [8]; 1818 } __©Œibu‹__ (( ·cked )); 1820  #BT_HCI_CMD_LE_RECEIVER_TEST 0x201d ) 1821  sbt_hci_cmd_Ë_»ûiv”_‹¡ { 1822 ušt8_t mäequ’cy ; 1823 } __©Œibu‹__ (( ·cked )); 1825  #BT_HCI_CMD_LE_TRANSMITTER_TEST 0x201e ) 1826  sbt_hci_cmd_Ë_Œªsm™‹r_‹¡ { 1827 ušt8_t mäequ’cy ; 1828 ušt8_t md©a_Ën ; 1829 ušt8_t m·ylßd ; 1830 } __©Œibu‹__ (( ·cked )); 1832  #BT_HCI_CMD_LE_TEST_END 0x201f ) 1833  sbt_hci_r¥_Ë_‹¡_’d { 1834 ušt8_t m¡©us ; 1835 ušt16_t mnum_·ck‘s ; 1836 } __©Œibu‹__ (( ·cked )); 1838  #BT_HCI_CMD_LE_CONN_PARAM_REQ_REPLY 0x2020 ) 1839  sbt_hci_cmd_Ë_cÚn_·¿m_»q_»¶y { 1840 ušt16_t mhªdË ; 1841 ušt16_t mmš_š‹rv® ; 1842 ušt16_t mmax_š‹rv® ; 1843 ušt16_t mÏ‹ncy ; 1844 ušt16_t msupv_timeout ; 1845 ušt16_t mmš_Ëngth ; 1846 ušt16_t mmax_Ëngth ; 1847 } __©Œibu‹__ (( ·cked )); 1848  sbt_hci_r¥_Ë_cÚn_·¿m_»q_»¶y { 1849 ušt8_t m¡©us ; 1850 ušt16_t mhªdË ; 1851 } __©Œibu‹__ (( ·cked )); 1853  #BT_HCI_CMD_LE_CONN_PARAM_REQ_NEG_REPLY 0x2021 ) 1854  sbt_hci_cmd_Ë_cÚn_·¿m_»q_Ãg_»¶y { 1855 ušt16_t mhªdË ; 1856 ušt8_t m»asÚ ; 1857 } __©Œibu‹__ (( ·cked )); 1858  sbt_hci_r¥_Ë_cÚn_·¿m_»q_Ãg_»¶y { 1859 ušt8_t m¡©us ; 1860 ušt16_t mhªdË ; 1861 } __©Œibu‹__ (( ·cked )); 1863  #BT_HCI_CMD_LE_SET_DATA_LENGTH 0x2022 ) 1864  sbt_hci_cmd_Ë_£t_d©a_Ëngth { 1865 ušt16_t mhªdË ; 1866 ušt16_t mtx_Ën ; 1867 ušt16_t mtx_time ; 1868 } __©Œibu‹__ (( ·cked )); 1869  sbt_hci_r¥_Ë_£t_d©a_Ëngth { 1870 ušt8_t m¡©us ; 1871 ušt16_t mhªdË ; 1872 } __©Œibu‹__ (( ·cked )); 1874  #BT_HCI_CMD_LE_READ_DEFAULT_DATA_LENGTH 0x2023 ) 1875  sbt_hci_r¥_Ë_»ad_deçuÉ_d©a_Ëngth { 1876 ušt8_t m¡©us ; 1877 ušt16_t mtx_Ën ; 1878 ušt16_t mtx_time ; 1879 } __©Œibu‹__ (( ·cked )); 1881  #BT_HCI_CMD_LE_WRITE_DEFAULT_DATA_LENGTH 0x2024 ) 1882  sbt_hci_cmd_Ë_wr™e_deçuÉ_d©a_Ëngth { 1883 ušt16_t mtx_Ën ; 1884 ušt16_t mtx_time ; 1885 } __©Œibu‹__ (( ·cked )); 1887  #BT_HCI_CMD_LE_READ_LOCAL_PK256 0x2025 ) 1889  #BT_HCI_CMD_LE_GENERATE_DHKEY 0x2026 ) 1890  sbt_hci_cmd_Ë_g’”©e_dhkey { 1891 ušt8_t m»mÙe_pk256 [64]; 1892 } __©Œibu‹__ (( ·cked )); 1894  #BT_HCI_CMD_LE_ADD_TO_RESOLV_LIST 0x2027 ) 1895  sbt_hci_cmd_Ë_add_to_»sÞv_li¡ { 1896 ušt8_t maddr_ty³ ; 1897 ušt8_t maddr [6]; 1898 ušt8_t m³”_œk [16]; 1899 ušt8_t mloÿl_œk [16]; 1900 } __©Œibu‹__ (( ·cked )); 1902  #BT_HCI_CMD_LE_REMOVE_FROM_RESOLV_LIST 0x2028 ) 1903  sbt_hci_cmd_Ë_»move_äom_»sÞv_li¡ { 1904 ušt8_t maddr_ty³ ; 1905 ušt8_t maddr [6]; 1906 } __©Œibu‹__ (( ·cked )); 1908  #BT_HCI_CMD_LE_CLEAR_RESOLV_LIST 0x2029 ) 1910  #BT_HCI_CMD_LE_READ_RESOLV_LIST_SIZE 0x202a ) 1911  sbt_hci_r¥_Ë_»ad_»sÞv_li¡_size { 1912 ušt8_t m¡©us ; 1913 ušt8_t msize ; 1914 } __©Œibu‹__ (( ·cked )); 1916  #BT_HCI_CMD_LE_READ_PEER_RESOLV_ADDR 0x202b ) 1917  sbt_hci_cmd_Ë_»ad_³”_»sÞv_addr { 1918 ušt8_t maddr_ty³ ; 1919 ušt8_t maddr [6]; 1920 } __©Œibu‹__ (( ·cked )); 1921  sbt_hci_r¥_Ë_»ad_³”_»sÞv_addr { 1922 ušt8_t m¡©us ; 1923 ušt8_t maddr [6]; 1924 } __©Œibu‹__ (( ·cked )); 1926  #BT_HCI_CMD_LE_READ_LOCAL_RESOLV_ADDR 0x202c ) 1927  sbt_hci_cmd_Ë_»ad_loÿl_»sÞv_addr { 1928 ušt8_t maddr_ty³ ; 1929 ušt8_t maddr [6]; 1930 } __©Œibu‹__ (( ·cked )); 1931  sbt_hci_r¥_Ë_»ad_loÿl_»sÞv_addr { 1932 ušt8_t m¡©us ; 1933 ušt8_t maddr [6]; 1934 } __©Œibu‹__ (( ·cked )); 1936  #BT_HCI_CMD_LE_SET_RESOLV_ENABLE 0x202d ) 1937  sbt_hci_cmd_Ë_£t_»sÞv_’abË { 1938 ušt8_t m’abË ; 1939 } __©Œibu‹__ (( ·cked )); 1941  #BT_HCI_CMD_LE_SET_RESOLV_TIMEOUT 0x202e ) 1942  sbt_hci_cmd_Ë_£t_»sÞv_timeout { 1943 ušt16_t mtimeout ; 1944 } __©Œibu‹__ (( ·cked )); 1946  #BT_HCI_CMD_LE_READ_MAX_DATA_LENGTH 0x202f ) 1947  sbt_hci_r¥_Ë_»ad_max_d©a_Ëngth { 1948 ušt8_t m¡©us ; 1949 ušt16_t mmax_tx_Ën ; 1950 ušt16_t mmax_tx_time ; 1951 ušt16_t mmax_rx_Ën ; 1952 ušt16_t mmax_rx_time ; 1953 } __©Œibu‹__ (( ·cked )); 1955  #BT_HCI_EVT_INQUIRY_COMPLETE 0x01 ) 1956  sbt_hci_evt_šquœy_com¶‘e { 1957 ušt8_t m¡©us ; 1958 } __©Œibu‹__ (( ·cked )); 1960  #BT_HCI_EVT_INQUIRY_RESULT 0x02 ) 1961  sbt_hci_evt_šquœy_»suÉ { 1962 ušt8_t mnum_»¥ ; 1963 ušt8_t mbdaddr [6]; 1964 ušt8_t mpsÿn_»p_mode ; 1965 ušt8_t mpsÿn_³riod_mode ; 1966 ušt8_t mpsÿn_mode ; 1967 ušt8_t mdev_þass [3]; 1968 ušt16_t mþock_off£t ; 1969 } __©Œibu‹__ (( ·cked )); 1971  #BT_HCI_EVT_CONN_COMPLETE 0x03 ) 1972  sbt_hci_evt_cÚn_com¶‘e { 1973 ušt8_t m¡©us ; 1974 ušt16_t mhªdË ; 1975 ušt8_t mbdaddr [6]; 1976 ušt8_t mlšk_ty³ ; 1977 ušt8_t m’ü_mode ; 1978 } __©Œibu‹__ (( ·cked )); 1980  #BT_HCI_EVT_CONN_REQUEST 0x04 ) 1981  sbt_hci_evt_cÚn_»que¡ { 1982 ušt8_t mbdaddr [6]; 1983 ušt8_t mdev_þass [3]; 1984 ušt8_t mlšk_ty³ ; 1985 } __©Œibu‹__ (( ·cked )); 1987  #BT_HCI_EVT_DISCONNECT_COMPLETE 0x05 ) 1988  sbt_hci_evt_discÚÃù_com¶‘e { 1989 ušt8_t m¡©us ; 1990 ušt16_t mhªdË ; 1991 ušt8_t m»asÚ ; 1992 } __©Œibu‹__ (( ·cked )); 1994  #BT_HCI_EVT_AUTH_COMPLETE 0x06 ) 1995  sbt_hci_evt_auth_com¶‘e { 1996 ušt8_t m¡©us ; 1997 ušt16_t mhªdË ; 1998 } __©Œibu‹__ (( ·cked )); 2000  #BT_HCI_EVT_REMOTE_NAME_REQUEST_COMPLETE 0x07 ) 2001  sbt_hci_evt_»mÙe_Çme_»que¡_com¶‘e { 2002 ušt8_t m¡©us ; 2003 ušt8_t mbdaddr [6]; 2004 ušt8_t mÇme [248]; 2005 } __©Œibu‹__ (( ·cked )); 2007  #BT_HCI_EVT_ENCRYPT_CHANGE 0x08 ) 2008  sbt_hci_evt_’üy±_chªge { 2009 ušt8_t m¡©us ; 2010 ušt16_t mhªdË ; 2011 ušt8_t m’ü_mode ; 2012 } __©Œibu‹__ (( ·cked )); 2014  #BT_HCI_EVT_CHANGE_CONN_LINK_KEY_COMPLETE 0x09 ) 2015  sbt_hci_evt_chªge_cÚn_lšk_key_com¶‘e { 2016 ušt8_t m¡©us ; 2017 ušt16_t mhªdË ; 2018 } __©Œibu‹__ (( ·cked )); 2020  #BT_HCI_EVT_MASTER_LINK_KEY_COMPLETE 0x0a ) 2021  sbt_hci_evt_ma¡”_lšk_key_com¶‘e { 2022 ušt8_t m¡©us ; 2023 ušt16_t mhªdË ; 2024 ušt8_t mkey_æag ; 2025 } __©Œibu‹__ (( ·cked )); 2027  #BT_HCI_EVT_REMOTE_FEATURES_COMPLETE 0x0b ) 2028  sbt_hci_evt_»mÙe_ã©u»s_com¶‘e { 2029 ušt8_t m¡©us ; 2030 ušt16_t mhªdË ; 2031 ušt8_t mã©u»s [8]; 2032 } __©Œibu‹__ (( ·cked )); 2034  #BT_HCI_EVT_REMOTE_VERSION_COMPLETE 0x0c ) 2035  sbt_hci_evt_»mÙe_v”siÚ_com¶‘e { 2036 ušt8_t m¡©us ; 2037 ušt16_t mhªdË ; 2038 ušt8_t mlmp_v” ; 2039 ušt16_t mmªuçùu»r ; 2040 ušt16_t mlmp_subv” ; 2041 } __©Œibu‹__ (( ·cked )); 2043  #BT_HCI_EVT_QOS_SETUP_COMPLETE 0x0d ) 2044  sbt_hci_evt_qos_£tup_com¶‘e { 2045 ušt8_t m¡©us ; 2046 ušt16_t mhªdË ; 2047 ušt8_t mæags ; 2048 ušt8_t m£rviû_ty³ ; 2049 ušt32_t mtok’_¿‹ ; 2050 ušt32_t m³ak_bªdwidth ; 2051 ušt32_t mÏ‹ncy ; 2052 ušt32_t md–ay_v¬ŸtiÚ ; 2053 } __©Œibu‹__ (( ·cked )); 2055  #BT_HCI_EVT_CMD_COMPLETE 0x0e ) 2056  sbt_hci_evt_cmd_com¶‘e { 2057 ušt8_t mncmd ; 2058 ušt16_t mÝcode ; 2059 } __©Œibu‹__ (( ·cked )); 2061  #BT_HCI_EVT_CMD_STATUS 0x0f ) 2062  sbt_hci_evt_cmd_¡©us { 2063 ušt8_t m¡©us ; 2064 ušt8_t mncmd ; 2065 ušt16_t mÝcode ; 2066 } __©Œibu‹__ (( ·cked )); 2068  #BT_HCI_EVT_HARDWARE_ERROR 0x10 ) 2069  sbt_hci_evt_h¬dw¬e_”rÜ { 2070 ušt8_t mcode ; 2071 } __©Œibu‹__ (( ·cked )); 2073  #BT_HCI_EVT_FLUSH_OCCURRED 0x11 ) 2074  sbt_hci_evt_æush_occu¼ed { 2075 ušt16_t mhªdË ; 2076 } __©Œibu‹__ (( ·cked )); 2078  #BT_HCI_EVT_ROLE_CHANGE 0x12 ) 2079  sbt_hci_evt_rÞe_chªge { 2080 ušt8_t m¡©us ; 2081 ušt8_t mbdaddr [6]; 2082 ušt8_t mrÞe ; 2083 } __©Œibu‹__ (( ·cked )); 2085  #BT_HCI_EVT_NUM_COMPLETED_PACKETS 0x13 ) 2086  sbt_hci_evt_num_com¶‘ed_·ck‘s { 2087 ušt8_t mnum_hªdËs ; 2088 ušt16_t mhªdË ; 2089 ušt16_t mcouÁ ; 2090 } __©Œibu‹__ (( ·cked )); 2092  #BT_HCI_EVT_MODE_CHANGE 0x14 ) 2093  sbt_hci_evt_mode_chªge { 2094 ušt8_t m¡©us ; 2095 ušt16_t mhªdË ; 2096 ušt8_t mmode ; 2097 ušt16_t mš‹rv® ; 2098 } __©Œibu‹__ (( ·cked )); 2100  #BT_HCI_EVT_RETURN_LINK_KEYS 0x15 ) 2102  #BT_HCI_EVT_PIN_CODE_REQUEST 0x16 ) 2103  sbt_hci_evt_pš_code_»que¡ { 2104 ušt8_t mbdaddr [6]; 2105 } __©Œibu‹__ (( ·cked )); 2107  #BT_HCI_EVT_LINK_KEY_REQUEST 0x17 ) 2108  sbt_hci_evt_lšk_key_»que¡ { 2109 ušt8_t mbdaddr [6]; 2110 } __©Œibu‹__ (( ·cked )); 2112  #BT_HCI_EVT_LINK_KEY_NOTIFY 0x18 ) 2113  sbt_hci_evt_lšk_key_nÙify { 2114 ušt8_t mbdaddr [6]; 2115 ušt8_t mlšk_key [16]; 2116 ušt8_t mkey_ty³ ; 2117 } __©Œibu‹__ (( ·cked )); 2119  #BT_HCI_EVT_LOOPBACK_COMMAND 0x19 ) 2121  #BT_HCI_EVT_DATA_BUFFER_OVERFLOW 0x1a ) 2122  sbt_hci_evt_d©a_bufãr_ov”æow { 2123 ušt8_t mlšk_ty³ ; 2124 } __©Œibu‹__ (( ·cked )); 2126  #BT_HCI_EVT_MAX_SLOTS_CHANGE 0x1b ) 2127  sbt_hci_evt_max_¦Ùs_chªge { 2128 ušt16_t mhªdË ; 2129 ušt8_t mmax_¦Ùs ; 2130 } __©Œibu‹__ (( ·cked )); 2132  #BT_HCI_EVT_CLOCK_OFFSET_COMPLETE 0x1c ) 2133  sbt_hci_evt_þock_off£t_com¶‘e { 2134 ušt8_t m¡©us ; 2135 ušt16_t mhªdË ; 2136 ušt16_t mþock_off£t ; 2137 } __©Œibu‹__ (( ·cked )); 2139  #BT_HCI_EVT_CONN_PKT_TYPE_CHANGED 0x1d ) 2140  sbt_hci_evt_cÚn_pkt_ty³_chªged { 2141 ušt8_t m¡©us ; 2142 ušt16_t mhªdË ; 2143 ušt16_t mpkt_ty³ ; 2144 } __©Œibu‹__ (( ·cked )); 2146  #BT_HCI_EVT_QOS_VIOLATION 0x1e ) 2147  sbt_hci_evt_qos_viÞ©iÚ { 2148 ušt16_t mhªdË ; 2149 } __©Œibu‹__ (( ·cked )); 2151  #BT_HCI_EVT_PSCAN_MODE_CHANGE 0x1f ) 2152  sbt_hci_evt_psÿn_mode_chªge { 2153 ušt8_t mbdaddr [6]; 2154 ušt8_t mpsÿn_mode ; 2155 } __©Œibu‹__ (( ·cked )); 2157  #BT_HCI_EVT_PSCAN_REP_MODE_CHANGE 0x20 ) 2158  sbt_hci_evt_psÿn_»p_mode_chªge { 2159 ušt8_t mbdaddr [6]; 2160 ušt8_t mpsÿn_»p_mode ; 2161 } __©Œibu‹__ (( ·cked )); 2163  #BT_HCI_EVT_FLOW_SPEC_COMPLETE 0x21 ) 2164  sbt_hci_evt_æow_¥ec_com¶‘e { 2165 ušt8_t m¡©us ; 2166 ušt16_t mhªdË ; 2167 ušt8_t mæags ; 2168 ušt8_t mdœeùiÚ ; 2169 ušt8_t m£rviû_ty³ ; 2170 ušt32_t mtok’_¿‹ ; 2171 ušt32_t mtok’_buck‘_size ; 2172 ušt32_t m³ak_bªdwidth ; 2173 ušt32_t macûss_Ï‹ncy ; 2174 } __©Œibu‹__ (( ·cked )); 2176  #BT_HCI_EVT_INQUIRY_RESULT_WITH_RSSI 0x22 ) 2177  sbt_hci_evt_šquœy_»suÉ_w™h_rssi { 2178 ušt8_t mnum_»¥ ; 2179 ušt8_t mbdaddr [6]; 2180 ušt8_t mpsÿn_»p_mode ; 2181 ušt8_t mpsÿn_³riod_mode ; 2182 ušt8_t mdev_þass [3]; 2183 ušt16_t mþock_off£t ; 2184 št8_t mrssi ; 2185 } __©Œibu‹__ (( ·cked )); 2187  #BT_HCI_EVT_REMOTE_EXT_FEATURES_COMPLETE 0x23 ) 2188  sbt_hci_evt_»mÙe_ext_ã©u»s_com¶‘e { 2189 ušt8_t m¡©us ; 2190 ušt16_t mhªdË ; 2191 ušt8_t m·ge ; 2192 ušt8_t mmax_·ge ; 2193 ušt8_t mã©u»s [8]; 2194 } __©Œibu‹__ (( ·cked )); 2196  #BT_HCI_EVT_SYNC_CONN_COMPLETE 0x2c ) 2197  sbt_hci_evt_sync_cÚn_com¶‘e { 2198 ušt8_t m¡©us ; 2199 ušt16_t mhªdË ; 2200 ušt8_t mbdaddr [6]; 2201 ušt8_t mlšk_ty³ ; 2202 ušt8_t mtx_š‹rv® ; 2203 ušt8_t m»Œªs_wšdow ; 2204 ušt16_t mrx_pkt_Ën ; 2205 ušt16_t mtx_pkt_Ën ; 2206 ušt8_t maœ_mode ; 2207 } __©Œibu‹__ (( ·cked )); 2209  #BT_HCI_EVT_SYNC_CONN_CHANGED 0x2d ) 2210  sbt_hci_evt_sync_cÚn_chªged { 2211 ušt8_t m¡©us ; 2212 ušt16_t mhªdË ; 2213 ušt8_t mtx_š‹rv® ; 2214 ušt8_t m»Œªs_wšdow ; 2215 ušt16_t mrx_pkt_Ën ; 2216 ušt16_t mtx_pkt_Ën ; 2217 } __©Œibu‹__ (( ·cked )); 2219  #BT_HCI_EVT_SNIFF_SUBRATING 0x2e ) 2220  sbt_hci_evt_¢iff_sub¿tšg { 2221 ušt8_t m¡©us ; 2222 ušt16_t mhªdË ; 2223 ušt16_t mmax_tx_Ï‹ncy ; 2224 ušt16_t mmax_rx_Ï‹ncy ; 2225 ušt16_t mmš_»mÙe_timeout ; 2226 ušt16_t mmš_loÿl_timeout ; 2227 } __©Œibu‹__ (( ·cked )); 2229  #BT_HCI_EVT_EXT_INQUIRY_RESULT 0x2f ) 2230  sbt_hci_evt_ext_šquœy_»suÉ { 2231 ušt8_t mnum_»¥ ; 2232 ušt8_t mbdaddr [6]; 2233 ušt8_t mpsÿn_»p_mode ; 2234 ušt8_t mpsÿn_³riod_mode ; 2235 ušt8_t mdev_þass [3]; 2236 ušt16_t mþock_off£t ; 2237 št8_t mrssi ; 2238 ušt8_t md©a [240]; 2239 } __©Œibu‹__ (( ·cked )); 2241  #BT_HCI_EVT_ENCRYPT_KEY_REFRESH_COMPLETE 0x30 ) 2242  sbt_hci_evt_’üy±_key_»äesh_com¶‘e { 2243 ušt8_t m¡©us ; 2244 ušt16_t mhªdË ; 2245 } __©Œibu‹__ (( ·cked )); 2247  #BT_HCI_EVT_IO_CAPABILITY_REQUEST 0x31 ) 2248  sbt_hci_evt_io_ÿ·bž™y_»que¡ { 2249 ušt8_t mbdaddr [6]; 2250 } __©Œibu‹__ (( ·cked )); 2252  #BT_HCI_EVT_IO_CAPABILITY_RESPONSE 0x32 ) 2253  sbt_hci_evt_io_ÿ·bž™y_»¥Ú£ { 2254 ušt8_t mbdaddr [6]; 2255 ušt8_t mÿ·bž™y ; 2256 ušt8_t moob_d©a ; 2257 ušt8_t mauth’tiÿtiÚ ; 2258 } __©Œibu‹__ (( ·cked )); 2260  #BT_HCI_EVT_USER_CONFIRM_REQUEST 0x33 ) 2261  sbt_hci_evt_u£r_cÚfœm_»que¡ { 2262 ušt8_t mbdaddr [6]; 2263 ušt32_t m·sskey ; 2264 } __©Œibu‹__ (( ·cked )); 2266  #BT_HCI_EVT_USER_PASSKEY_REQUEST 0x34 ) 2267  sbt_hci_evt_u£r_·sskey_»que¡ { 2268 ušt8_t mbdaddr [6]; 2269 } __©Œibu‹__ (( ·cked )); 2271  #BT_HCI_EVT_REMOTE_OOB_DATA_REQUEST 0x35 ) 2272  sbt_hci_evt_»mÙe_oob_d©a_»que¡ { 2273 ušt8_t mbdaddr [6]; 2274 } __©Œibu‹__ (( ·cked )); 2276  #BT_HCI_EVT_SIMPLE_PAIRING_COMPLETE 0x36 ) 2277  sbt_hci_evt_sim¶e_·œšg_com¶‘e { 2278 ušt8_t m¡©us ; 2279 ušt8_t mbdaddr [6]; 2280 } __©Œibu‹__ (( ·cked )); 2282  #BT_HCI_EVT_LINK_SUPV_TIMEOUT_CHANGED 0x38 ) 2283  sbt_hci_evt_lšk_supv_timeout_chªged { 2284 ušt16_t mhªdË ; 2285 ušt16_t mtimeout ; 2286 } __©Œibu‹__ (( ·cked )); 2288  #BT_HCI_EVT_ENHANCED_FLUSH_COMPLETE 0x39 ) 2289  sbt_hci_evt_’hªûd_æush_com¶‘e { 2290 ušt16_t mhªdË ; 2291 } __©Œibu‹__ (( ·cked )); 2293  #BT_HCI_EVT_USER_PASSKEY_NOTIFY 0x3b ) 2294  sbt_hci_evt_u£r_·sskey_nÙify { 2295 ušt8_t mbdaddr [6]; 2296 ušt32_t m·sskey ; 2297 } __©Œibu‹__ (( ·cked )); 2299  #BT_HCI_EVT_KEYPRESS_NOTIFY 0x3c ) 2300  sbt_hci_evt_key´ess_nÙify { 2301 ušt8_t mbdaddr [6]; 2302 ušt8_t mty³ ; 2303 } __©Œibu‹__ (( ·cked )); 2305  #BT_HCI_EVT_REMOTE_HOST_FEATURES_NOTIFY 0x3d ) 2306  sbt_hci_evt_»mÙe_ho¡_ã©u»s_nÙify { 2307 ušt8_t mbdaddr [6]; 2308 ušt8_t mã©u»s [8]; 2309 } __©Œibu‹__ (( ·cked )); 2311  #BT_HCI_EVT_LE_META_EVENT 0x3e ) 2313  #BT_HCI_EVT_PHY_LINK_COMPLETE 0x40 ) 2314  sbt_hci_evt_phy_lšk_com¶‘e { 2315 ušt8_t m¡©us ; 2316 ušt8_t mphy_hªdË ; 2317 } __©Œibu‹__ (( ·cked )); 2319  #BT_HCI_EVT_CHANNEL_SELECTED 0x41 ) 2320  sbt_hci_evt_chªÃl_£Ëùed { 2321 ušt8_t mphy_hªdË ; 2322 } __©Œibu‹__ (( ·cked )); 2324  #BT_HCI_EVT_DISCONN_PHY_LINK_COMPLETE 0x42 ) 2325  sbt_hci_evt_discÚn_phy_lšk_com¶‘e { 2326 ušt8_t m¡©us ; 2327 ušt8_t mphy_hªdË ; 2328 ušt8_t m»asÚ ; 2329 } __©Œibu‹__ (( ·cked )); 2331  #BT_HCI_EVT_PHY_LINK_LOSS_EARLY_WARNING 0x43 ) 2332  sbt_hci_evt_phy_lšk_loss_—¾y_w¬nšg { 2333 ušt8_t mphy_hªdË ; 2334 ušt8_t m»asÚ ; 2335 } __©Œibu‹__ (( ·cked )); 2337  #BT_HCI_EVT_PHY_LINK_RECOVERY 0x44 ) 2338  sbt_hci_evt_phy_lšk_»cov”y { 2339 ušt8_t mphy_hªdË ; 2340 } __©Œibu‹__ (( ·cked )); 2342  #BT_HCI_EVT_LOGIC_LINK_COMPLETE 0x45 ) 2343  sbt_hci_evt_logic_lšk_com¶‘e { 2344 ušt8_t m¡©us ; 2345 ušt16_t mhªdË ; 2346 ušt8_t mphy_hªdË ; 2347 ušt8_t mæow_¥ec ; 2348 } __©Œibu‹__ (( ·cked )); 2350  #BT_HCI_EVT_DISCONN_LOGIC_LINK_COMPLETE 0x46 ) 2351  sbt_hci_evt_discÚn_logic_lšk_com¶‘e { 2352 ušt8_t m¡©us ; 2353 ušt16_t mhªdË ; 2354 ušt8_t m»asÚ ; 2355 } __©Œibu‹__ (( ·cked )); 2357  #BT_HCI_EVT_FLOW_SPEC_MODIFY_COMPLETE 0x47 ) 2358  sbt_hci_evt_æow_¥ec_modify_com¶‘e { 2359 ušt8_t m¡©us ; 2360 ušt16_t mhªdË ; 2361 } __©Œibu‹__ (( ·cked )); 2363  #BT_HCI_EVT_NUM_COMPLETED_DATA_BLOCKS 0x48 ) 2364  sbt_hci_evt_num_com¶‘ed_d©a_blocks { 2365 ušt16_t mtÙ®_num_blocks ; 2366 ušt8_t mnum_hªdËs ; 2367 ušt16_t mhªdË ; 2368 ušt16_t mnum_·ck‘s ; 2369 ušt16_t mnum_blocks ; 2370 } __©Œibu‹__ (( ·cked )); 2372  #BT_HCI_EVT_SHORT_RANGE_MODE_CHANGE 0x4c ) 2373  sbt_hci_evt_shÜt_¿nge_mode_chªge { 2374 ušt8_t m¡©us ; 2375 ušt8_t mphy_hªdË ; 2376 ušt8_t mmode ; 2377 } __©Œibu‹__ (( ·cked )); 2379  #BT_HCI_EVT_AMP_STATUS_CHANGE 0x4d ) 2380  sbt_hci_evt_amp_¡©us_chªge { 2381 ušt8_t m¡©us ; 2382 ušt8_t mamp_¡©us ; 2383 } __©Œibu‹__ (( ·cked )); 2385  #BT_HCI_EVT_SYNC_TRAIN_COMPLETE 0x4f ) 2386  sbt_hci_evt_sync_Œaš_com¶‘e { 2387 ušt8_t m¡©us ; 2388 } __©Œibu‹__ (( ·cked )); 2390  #BT_HCI_EVT_SYNC_TRAIN_RECEIVED 0x50 ) 2391  sbt_hci_evt_sync_Œaš_»ûived { 2392 ušt8_t m¡©us ; 2393 ušt8_t mbdaddr [6]; 2394 ušt32_t moff£t ; 2395 ušt8_t mm­ [10]; 2396 ušt8_t mÉ_addr ; 2397 ušt32_t mš¡ªt ; 2398 ušt16_t mš‹rv® ; 2399 ušt8_t m£rviû_d©a ; 2400 } __©Œibu‹__ (( ·cked )); 2402  #BT_HCI_EVT_SLAVE_BROADCAST_RECEIVE 0x51 ) 2403  sbt_hci_evt_¦ave_brßdÿ¡_»ûive { 2404 ušt8_t mbdaddr [6]; 2405 ušt8_t mÉ_addr ; 2406 ušt32_t mþock ; 2407 ušt32_t moff£t ; 2408 ušt8_t m¡©us ; 2409 ušt8_t mäagm’t ; 2410 ušt8_t mËngth ; 2411 } __©Œibu‹__ (( ·cked )); 2413  #BT_HCI_EVT_SLAVE_BROADCAST_TIMEOUT 0x52 ) 2414  sbt_hci_evt_¦ave_brßdÿ¡_timeout { 2415 ušt8_t mbdaddr [6]; 2416 ušt8_t mÉ_addr ; 2417 } __©Œibu‹__ (( ·cked )); 2419  #BT_HCI_EVT_TRUNCATED_PAGE_COMPLETE 0x53 ) 2420  sbt_hci_evt_Œunÿ‹d_·ge_com¶‘e { 2421 ušt8_t m¡©us ; 2422 ušt8_t mbdaddr [6]; 2423 } __©Œibu‹__ (( ·cked )); 2425  #BT_HCI_EVT_SLAVE_PAGE_RESPONSE_TIMEOUT 0x54 ) 2427  #BT_HCI_EVT_SLAVE_BROADCAST_CHANNEL_MAP_CHANGE 0x55 ) 2428  sbt_hci_evt_¦ave_brßdÿ¡_chªÃl_m­_chªge { 2429 ušt8_t mm­ [10]; 2430 } __©Œibu‹__ (( ·cked )); 2432  #BT_HCI_EVT_INQUIRY_RESPONSE_NOTIFY 0x56 ) 2433  sbt_hci_evt_šquœy_»¥Ú£_nÙify { 2434 ušt8_t mÏp [3]; 2435 št8_t mrssi ; 2436 } __©Œibu‹__ (( ·cked )); 2438  #BT_HCI_EVT_AUTH_PAYLOAD_TIMEOUT_EXPIRED 0x57 ) 2439  sbt_hci_evt_auth_·ylßd_timeout_expœed { 2440 ušt16_t mhªdË ; 2441 } __©Œibu‹__ (( ·cked )); 2443  #BT_HCI_EVT_LE_CONN_COMPLETE 0x01 ) 2444  sbt_hci_evt_Ë_cÚn_com¶‘e { 2445 ušt8_t m¡©us ; 2446 ušt16_t mhªdË ; 2447 ušt8_t mrÞe ; 2448 ušt8_t m³”_addr_ty³ ; 2449 ušt8_t m³”_addr [6]; 2450 ušt16_t mš‹rv® ; 2451 ušt16_t mÏ‹ncy ; 2452 ušt16_t msupv_timeout ; 2453 ušt8_t mþock_accu¿cy ; 2454 } __©Œibu‹__ (( ·cked )); 2456  #BT_HCI_EVT_LE_ADV_REPORT 0x02 ) 2457  sbt_hci_evt_Ë_adv_»pÜt { 2458 ušt8_t mnum_»pÜts ; 2459 ušt8_t mev’t_ty³ ; 2460 ušt8_t maddr_ty³ ; 2461 ušt8_t maddr [6]; 2462 ušt8_t md©a_Ën ; 2463 ušt8_t md©a [0]; 2464 } __©Œibu‹__ (( ·cked )); 2466  #BT_HCI_EVT_LE_CONN_UPDATE_COMPLETE 0x03 ) 2467  sbt_hci_evt_Ë_cÚn_upd©e_com¶‘e { 2468 ušt8_t m¡©us ; 2469 ušt16_t mhªdË ; 2470 ušt16_t mš‹rv® ; 2471 ušt16_t mÏ‹ncy ; 2472 ušt16_t msupv_timeout ; 2473 } __©Œibu‹__ (( ·cked )); 2475  #BT_HCI_EVT_LE_REMOTE_FEATURES_COMPLETE 0x04 ) 2476  sbt_hci_evt_Ë_»mÙe_ã©u»s_com¶‘e { 2477 ušt8_t m¡©us ; 2478 ušt16_t mhªdË ; 2479 ušt8_t mã©u»s [8]; 2480 } __©Œibu‹__ (( ·cked )); 2482  #BT_HCI_EVT_LE_LONG_TERM_KEY_REQUEST 0x05 ) 2483  sbt_hci_evt_Ë_lÚg_‹rm_key_»que¡ { 2484 ušt16_t mhªdË ; 2485 ušt64_t m¿nd ; 2486 ušt16_t mediv ; 2487 } __©Œibu‹__ (( ·cked )); 2489  #BT_HCI_EVT_LE_CONN_PARAM_REQUEST 0x06 ) 2490  sbt_hci_evt_Ë_cÚn_·¿m_»que¡ { 2491 ušt16_t mhªdË ; 2492 ušt16_t mmš_š‹rv® ; 2493 ušt16_t mmax_š‹rv® ; 2494 ušt16_t mÏ‹ncy ; 2495 ušt16_t msupv_timeout ; 2496 } __©Œibu‹__ (( ·cked )); 2498  #BT_HCI_EVT_LE_DATA_LENGTH_CHANGE 0x07 ) 2499  sbt_hci_evt_Ë_d©a_Ëngth_chªge { 2500 ušt16_t mhªdË ; 2501 ušt16_t mmax_tx_Ën ; 2502 ušt16_t mmax_tx_time ; 2503 ušt16_t mmax_rx_Ën ; 2504 ušt16_t mmax_rx_time ; 2505 } __©Œibu‹__ (( ·cked )); 2507  #BT_HCI_EVT_LE_READ_LOCAL_PK256_COMPLETE 0x08 ) 2508  sbt_hci_evt_Ë_»ad_loÿl_pk256_com¶‘e { 2509 ušt8_t m¡©us ; 2510 ušt8_t mloÿl_pk256 [64]; 2511 } __©Œibu‹__ (( ·cked )); 2513  #BT_HCI_EVT_LE_GENERATE_DHKEY_COMPLETE 0x09 ) 2514  sbt_hci_evt_Ë_g’”©e_dhkey_com¶‘e { 2515 ušt8_t m¡©us ; 2516 ušt8_t mdhkey [32]; 2517 } __©Œibu‹__ (( ·cked )); 2519  #BT_HCI_EVT_LE_ENHANCED_CONN_COMPLETE 0x0a ) 2520  sbt_hci_evt_Ë_’hªûd_cÚn_com¶‘e { 2521 ušt8_t m¡©us ; 2522 ušt16_t mhªdË ; 2523 ušt8_t mrÞe ; 2524 ušt8_t m³”_addr_ty³ ; 2525 ušt8_t m³”_addr [6]; 2526 ušt8_t mloÿl_½a [6]; 2527 ušt8_t m³”_½a [6]; 2528 ušt16_t mš‹rv® ; 2529 ušt16_t mÏ‹ncy ; 2530 ušt16_t msupv_timeout ; 2531 ušt8_t mþock_accu¿cy ; 2532 } __©Œibu‹__ (( ·cked )); 2534  #BT_HCI_EVT_LE_DIRECT_ADV_REPORT 0x0b ) 2535  sbt_hci_evt_Ë_dœeù_adv_»pÜt { 2536 ušt8_t mnum_»pÜts ; 2537 ušt8_t mev’t_ty³ ; 2538 ušt8_t maddr_ty³ ; 2539 ušt8_t maddr [6]; 2540 ušt8_t mdœeù_addr_ty³ ; 2541 ušt8_t mdœeù_addr [6]; 2542 št8_t mrssi ; 2543 } __©Œibu‹__ (( ·cked )); 2545  #BT_HCI_ERR_SUCCESS 0x00 ) 2546  #BT_HCI_ERR_UNKNOWN_COMMAND 0x01 ) 2547  #BT_HCI_ERR_UNKNOWN_CONN_ID 0x02 ) 2548  #BT_HCI_ERR_HARDWARE_FAILURE 0x03 ) 2549  #BT_HCI_ERR_PAGE_TIMEOUT 0x04 ) 2550  #BT_HCI_ERR_AUTH_FAILURE 0x05 ) 2551  #BT_HCI_ERR_PIN_OR_KEY_MISSING 0x06 ) 2552  #BT_HCI_ERR_MEM_CAPACITY_EXCEEDED 0x07 ) 2553  #BT_HCI_ERR_COMMAND_DISALLOWED 0x0c ) 2554  #BT_HCI_ERR_UNSUPPORTED_FEATURE 0x11 ) 2555  #BT_HCI_ERR_INVALID_PARAMETERS 0x12 ) 2556  #BT_HCI_ERR_UNSPECIFIED_ERROR 0x1f ) 2557  #BT_HCI_ERR_CONN_FAILED_TO_ESTABLISH 0x3e ) 2559  sbt_l2ÿp_hdr { 2560 ušt16_t mËn ; 2561 ušt16_t mcid ; 2562 } __©Œibu‹__ (( ·cked )); 2564  sbt_l2ÿp_hdr_sig { 2565 ušt8_t mcode ; 2566 ušt8_t mid’t ; 2567 ušt16_t mËn ; 2568 } __©Œibu‹__ (( ·cked )); 2570  #BT_L2CAP_PDU_CMD_REJECT 0x01 ) 2571  sbt_l2ÿp_pdu_cmd_»jeù { 2572 ušt16_t m»asÚ ; 2573 } __©Œibu‹__ (( ·cked )); 2575  #BT_L2CAP_PDU_CONN_REQ 0x02 ) 2576  sbt_l2ÿp_pdu_cÚn_»q { 2577 ušt16_t mpsm ; 2578 ušt16_t mscid ; 2579 } __©Œibu‹__ (( ·cked )); 2581  #BT_L2CAP_PDU_CONN_RSP 0x03 ) 2582  sbt_l2ÿp_pdu_cÚn_r¥ { 2583 ušt16_t mdcid ; 2584 ušt16_t mscid ; 2585 ušt16_t m»suÉ ; 2586 ušt16_t m¡©us ; 2587 } __©Œibu‹__ (( ·cked )); 2589  #BT_L2CAP_PDU_CONFIG_REQ 0x04 ) 2590  sbt_l2ÿp_pdu_cÚfig_»q { 2591 ušt16_t mdcid ; 2592 ušt16_t mæags ; 2593 } __©Œibu‹__ (( ·cked )); 2595  #BT_L2CAP_PDU_CONFIG_RSP 0x05 ) 2596  sbt_l2ÿp_pdu_cÚfig_r¥ { 2597 ušt16_t mscid ; 2598 ušt16_t mæags ; 2599 ušt16_t m»suÉ ; 2600 } __©Œibu‹__ (( ·cked )); 2602  #BT_L2CAP_PDU_DISCONN_REQ 0x06 ) 2603  sbt_l2ÿp_pdu_discÚn_»q { 2604 ušt16_t mdcid ; 2605 ušt16_t mscid ; 2606 } __©Œibu‹__ (( ·cked )); 2608  #BT_L2CAP_PDU_DISCONN_RSP 0x07 ) 2609  sbt_l2ÿp_pdu_discÚn_r¥ { 2610 ušt16_t mdcid ; 2611 ušt16_t mscid ; 2612 } __©Œibu‹__ (( ·cked )); 2614  #BT_L2CAP_PDU_ECHO_REQ 0x08 ) 2616  #BT_L2CAP_PDU_ECHO_RSP 0x09 ) 2618  #BT_L2CAP_PDU_INFO_REQ 0x0a ) 2619  sbt_l2ÿp_pdu_šfo_»q { 2620 ušt16_t mty³ ; 2621 } __©Œibu‹__ (( ·cked )); 2623  #BT_L2CAP_PDU_INFO_RSP 0x0b ) 2624  sbt_l2ÿp_pdu_šfo_r¥ { 2625 ušt16_t mty³ ; 2626 ušt16_t m»suÉ ; 2627 ušt8_t md©a [0]; 2628 } __©Œibu‹__ (( ·cked )); 2630  #BT_L2CAP_PDU_CREATE_CHAN_REQ 0x0c ) 2631  sbt_l2ÿp_pdu_ü—‹_chª_»q { 2632 ušt16_t mpsm ; 2633 ušt16_t mscid ; 2634 ušt8_t mù¾id ; 2635 } __©Œibu‹__ (( ·cked )); 2637  #BT_L2CAP_PDU_CREATE_CHAN_RSP 0x0d ) 2638  sbt_l2ÿp_pdu_ü—‹_chª_r¥ { 2639 ušt16_t mdcid ; 2640 ušt16_t mscid ; 2641 ušt16_t m»suÉ ; 2642 ušt16_t m¡©us ; 2643 } __©Œibu‹__ (( ·cked )); 2645  #BT_L2CAP_PDU_MOVE_CHAN_REQ 0x0e ) 2646  sbt_l2ÿp_pdu_move_chª_»q { 2647 ušt16_t micid ; 2648 ušt8_t mù¾id ; 2649 } __©Œibu‹__ (( ·cked )); 2651  #BT_L2CAP_PDU_MOVE_CHAN_RSP 0x0f ) 2652  sbt_l2ÿp_pdu_move_chª_r¥ { 2653 ušt16_t micid ; 2654 ušt16_t m»suÉ ; 2655 } __©Œibu‹__ (( ·cked )); 2657  #BT_L2CAP_PDU_MOVE_CHAN_CFM 0x10 ) 2658  sbt_l2ÿp_pdu_move_chª_cfm { 2659 ušt16_t micid ; 2660 ušt16_t m»suÉ ; 2661 } __©Œibu‹__ (( ·cked )); 2663  #BT_L2CAP_PDU_MOVE_CHAN_CFM_RSP 0x11 ) 2664  sbt_l2ÿp_pdu_move_chª_cfm_r¥ { 2665 ušt16_t micid ; 2666 } __©Œibu‹__ (( ·cked )); 2668  #BT_L2CAP_PDU_CONN_PARAM_REQ 0x12 ) 2669  sbt_l2ÿp_pdu_cÚn_·¿m_»q { 2670 ušt16_t mmš_š‹rv® ; 2671 ušt16_t mmax_š‹rv® ; 2672 ušt16_t mÏ‹ncy ; 2673 ušt16_t mtimeout ; 2674 } __©Œibu‹__ (( ·cked )); 2676  #BT_L2CAP_PDU_CONN_PARAM_RSP 0x13 ) 2677  sbt_l2ÿp_pdu_cÚn_·¿m_r¥ { 2678 ušt16_t m»suÉ ; 2679 } __©Œibu‹__ (( ·cked )); 2681  #BT_L2CAP_PDU_LE_CONN_REQ 0x14 ) 2682  sbt_l2ÿp_pdu_Ë_cÚn_»q { 2683 ušt16_t mpsm ; 2684 ušt16_t mscid ; 2685 ušt16_t mmtu ; 2686 ušt16_t mmps ; 2687 ušt16_t müed™s ; 2688 } __©Œibu‹__ (( ·cked )); 2690  #BT_L2CAP_PDU_LE_CONN_RSP 0x15 ) 2691  sbt_l2ÿp_pdu_Ë_cÚn_r¥ { 2692 ušt16_t mdcid ; 2693 ušt16_t mmtu ; 2694 ušt16_t mmps ; 2695 ušt16_t müed™s ; 2696 ušt16_t m»suÉ ; 2697 } __©Œibu‹__ (( ·cked )); 2699  #BT_L2CAP_PDU_LE_FLOWCTL_CREDS 0x16 ) 2700  sbt_l2ÿp_pdu_Ë_æowùl_üeds { 2701 ušt16_t mcid ; 2702 ušt16_t müed™s ; 2703 } __©Œibu‹__ (( ·cked )); 2705  sbt_l2ÿp_hdr_cÚÆess { 2706 ušt16_t mpsm ; 2707 } __©Œibu‹__ (( ·cked )); 2709  sbt_l2ÿp_hdr_amp { 2710 ušt8_t mcode ; 2711 ušt8_t mid’t ; 2712 ušt16_t mËn ; 2713 } __©Œibu‹__ (( ·cked )); 2715  #BT_L2CAP_AMP_CMD_REJECT 0x01 ) 2716  sbt_l2ÿp_amp_cmd_»jeù { 2717 ušt16_t m»asÚ ; 2718 } __©Œibu‹__ (( ·cked )); 2720  #BT_L2CAP_AMP_DISCOVER_REQ 0x02 ) 2721  sbt_l2ÿp_amp_discov”_»q { 2722 ušt16_t msize ; 2723 ušt16_t mã©u»s ; 2724 } __©Œibu‹__ (( ·cked )); 2726  #BT_L2CAP_AMP_DISCOVER_RSP 0x03 ) 2727  sbt_l2ÿp_amp_discov”_r¥ { 2728 ušt16_t msize ; 2729 ušt16_t mã©u»s ; 2730 } __©Œibu‹__ (( ·cked )); 2732  #BT_L2CAP_AMP_CHANGE_NOTIFY 0x04 ) 2734  #BT_L2CAP_AMP_CHANGE_RESPONSE 0x05 ) 2736  #BT_L2CAP_AMP_GET_INFO_REQ 0x06 ) 2737  sbt_l2ÿp_amp_g‘_šfo_»q { 2738 ušt8_t mù¾id ; 2739 } __©Œibu‹__ (( ·cked )); 2741  #BT_L2CAP_AMP_GET_INFO_RSP 0x07 ) 2742  sbt_l2ÿp_amp_g‘_šfo_r¥ { 2743 ušt8_t mù¾id ; 2744 ušt8_t m¡©us ; 2745 ušt32_t mtÙ®_bw ; 2746 ušt32_t mmax_bw ; 2747 ušt32_t mmš_Ï‹ncy ; 2748 ušt16_t m·l_ÿp ; 2749 ušt16_t mmax_assoc_Ën ; 2750 } __©Œibu‹__ (( ·cked )); 2752  #BT_L2CAP_AMP_GET_ASSOC_REQ 0x08 ) 2753  sbt_l2ÿp_amp_g‘_assoc_»q { 2754 ušt8_t mù¾id ; 2755 } __©Œibu‹__ (( ·cked )); 2757  #BT_L2CAP_AMP_GET_ASSOC_RSP 0x09 ) 2758  sbt_l2ÿp_amp_g‘_assoc_r¥ { 2759 ušt8_t mù¾id ; 2760 ušt8_t m¡©us ; 2761 } __©Œibu‹__ (( ·cked )); 2763  #BT_L2CAP_AMP_CREATE_PHY_LINK_REQ 0x0a ) 2764  sbt_l2ÿp_amp_ü—‹_phy_lšk_»q { 2765 ušt8_t mloÿl_ù¾id ; 2766 ušt8_t m»mÙe_ù¾id ; 2767 } __©Œibu‹__ (( ·cked )); 2769  #BT_L2CAP_AMP_CREATE_PHY_LINK_RSP 0x0b ) 2770  sbt_l2ÿp_amp_ü—‹_phy_lšk_r¥ { 2771 ušt8_t mloÿl_ù¾id ; 2772 ušt8_t m»mÙe_ù¾id ; 2773 ušt8_t m¡©us ; 2774 } __©Œibu‹__ (( ·cked )); 2776  #BT_L2CAP_AMP_DISCONN_PHY_LINK_REQ 0x0c ) 2777  sbt_l2ÿp_amp_discÚn_phy_lšk_»q { 2778 ušt8_t mloÿl_ù¾id ; 2779 ušt8_t m»mÙe_ù¾id ; 2780 } __©Œibu‹__ (( ·cked )); 2782  #BT_L2CAP_AMP_DISCONN_PHY_LINK_RSP 0x0d ) 2783  sbt_l2ÿp_amp_discÚn_phy_lšk_r¥ { 2784 ušt8_t mloÿl_ù¾id ; 2785 ušt8_t m»mÙe_ù¾id ; 2786 ušt8_t m¡©us ; 2787 } __©Œibu‹__ (( ·cked )); 2789  sbt_l2ÿp_hdr_©t { 2790 ušt8_t mcode ; 2791 } __©Œibu‹__ (( ·cked )); 2793  #BT_L2CAP_ATT_ERROR_RESPONSE 0x01 ) 2794  sbt_l2ÿp_©t_”rÜ_»¥Ú£ { 2795 ušt8_t m»que¡ ; 2796 ušt16_t mhªdË ; 2797 ušt8_t m”rÜ ; 2798 } __©Œibu‹__ (( ·cked )); 2800  #BT_L2CAP_ATT_EXCHANGE_MTU_REQ 0x02 ) 2801  sbt_l2ÿp_©t_exchªge_mtu_»q { 2802 ušt16_t mmtu ; 2803 } __©Œibu‹__ (( ·cked )); 2805  #BT_L2CAP_ATT_EXCHANGE_MTU_RSP 0x03 ) 2806  sbt_l2ÿp_©t_exchªge_mtu_r¥ { 2807 ušt16_t mmtu ; 2808 } __©Œibu‹__ (( ·cked )); 2810  #BT_L2CAP_ATT_READ_TYPE_REQ 0x08 ) 2811  sbt_l2ÿp_©t_»ad_ty³_»q { 2812 ušt16_t m¡¬t_hªdË ; 2813 ušt16_t m’d_hªdË ; 2814 } __©Œibu‹__ (( ·cked )); 2816  #BT_L2CAP_ATT_READ_TYPE_RSP 0x09 ) 2817  sbt_l2ÿp_©t_»ad_ty³_r¥ { 2818 ušt8_t mËngth ; 2819 } __©Œibu‹__ (( ·cked )); 2821  #BT_L2CAP_ATT_READ_REQ 0x0a ) 2822  sbt_l2ÿp_©t_»ad_»q { 2823 ušt16_t mhªdË ; 2824 } __©Œibu‹__ (( ·cked )); 2826  #BT_L2CAP_ATT_READ_RSP 0x0b ) 2828  #BT_L2CAP_ATT_READ_GROUP_TYPE_REQ 0x10 ) 2829  sbt_l2ÿp_©t_»ad_group_ty³_»q { 2830 ušt16_t m¡¬t_hªdË ; 2831 ušt16_t m’d_hªdË ; 2832 } __©Œibu‹__ (( ·cked )); 2834  #BT_L2CAP_ATT_READ_GROUP_TYPE_RSP 0x11 ) 2835  sbt_l2ÿp_©t_»ad_group_ty³_r¥ { 2836 ušt8_t mËngth ; 2837 } __©Œibu‹__ (( ·cked )); 2839  #BT_L2CAP_ATT_HANDLE_VALUE_NOTIFY 0x1b ) 2840  sbt_l2ÿp_©t_hªdË_v®ue_nÙify { 2841 ušt16_t mhªdË ; 2842 } __©Œibu‹__ (( ·cked )); 2844  #BT_L2CAP_ATT_HANDLE_VALUE_IND 0x1d ) 2845  sbt_l2ÿp_©t_hªdË_v®ue_šd { 2846 ušt16_t mhªdË ; 2847 } __©Œibu‹__ (( ·cked )); 2849  #BT_L2CAP_ATT_HANDLE_VALUE_CONF 0x1e ) 2851  sbt_l2ÿp_hdr_smp { 2852 ušt8_t mcode ; 2853 } __©Œibu‹__ (( ·cked )); 2855  #BT_L2CAP_SMP_PAIRING_REQUEST 0x01 ) 2856  sbt_l2ÿp_smp_·œšg_»que¡ { 2857 ušt8_t mio_ÿ· ; 2858 ušt8_t moob_d©a ; 2859 ušt8_t mauth_»q ; 2860 ušt8_t mmax_key_size ; 2861 ušt8_t mš™_key_di¡ ; 2862 ušt8_t m»¥_key_di¡ ; 2863 } __©Œibu‹__ (( ·cked )); 2865  #BT_L2CAP_SMP_PAIRING_RESPONSE 0x02 ) 2866  sbt_l2ÿp_smp_·œšg_»¥Ú£ { 2867 ušt8_t mio_ÿ· ; 2868 ušt8_t moob_d©a ; 2869 ušt8_t mauth_»q ; 2870 ušt8_t mmax_key_size ; 2871 ušt8_t mš™_key_di¡ ; 2872 ušt8_t m»¥_key_di¡ ; 2873 } __©Œibu‹__ (( ·cked )); 2875  #BT_L2CAP_SMP_PAIRING_CONFIRM 0x03 ) 2876  sbt_l2ÿp_smp_·œšg_cÚfœm { 2877 ušt8_t mv®ue [16]; 2878 } __©Œibu‹__ (( ·cked )); 2880  #BT_L2CAP_SMP_PAIRING_RANDOM 0x04 ) 2881  sbt_l2ÿp_smp_·œšg_¿ndom { 2882 ušt8_t mv®ue [16]; 2883 } __©Œibu‹__ (( ·cked )); 2885  #BT_L2CAP_SMP_PAIRING_FAILED 0x05 ) 2886  sbt_l2ÿp_smp_·œšg_çžed { 2887 ušt8_t m»asÚ ; 2888 } __©Œibu‹__ (( ·cked )); 2890  #BT_L2CAP_SMP_ENCRYPT_INFO 0x06 ) 2891  sbt_l2ÿp_smp_’üy±_šfo { 2892 ušt8_t mÉk [16]; 2893 } __©Œibu‹__ (( ·cked )); 2895  #BT_L2CAP_SMP_MASTER_IDENT 0x07 ) 2896  sbt_l2ÿp_smp_ma¡”_id’t { 2897 ušt16_t mediv ; 2898 ušt64_t m¿nd ; 2899 } __©Œibu‹__ (( ·cked )); 2901  #BT_L2CAP_SMP_IDENT_INFO 0x08 ) 2902  sbt_l2ÿp_smp_id’t_šfo { 2903 ušt8_t mœk [16]; 2904 } __©Œibu‹__ (( ·cked )); 2906  #BT_L2CAP_SMP_IDENT_ADDR_INFO 0x09 ) 2907  sbt_l2ÿp_smp_id’t_addr_šfo { 2908 ušt8_t maddr_ty³ ; 2909 ušt8_t maddr [6]; 2910 } __©Œibu‹__ (( ·cked )); 2912  #BT_L2CAP_SMP_SIGNING_INFO 0x0a ) 2913  sbt_l2ÿp_smp_signšg_šfo { 2914 ušt8_t mc¤k [16]; 2915 } __©Œibu‹__ (( ·cked )); 2917  #BT_L2CAP_SMP_SECURITY_REQUEST 0x0b ) 2918  sbt_l2ÿp_smp_£cur™y_»que¡ { 2919 ušt8_t mauth_»q ; 2920 } __©Œibu‹__ (( ·cked )); 2922  #BT_L2CAP_SMP_PUBLIC_KEY 0x0c ) 2923  sbt_l2ÿp_smp_public_key { 2924 ušt8_t mx [32]; 2925 ušt8_t my [32]; 2926 } __©Œibu‹__ (( ·cked )); 2928  #BT_L2CAP_SMP_DHKEY_CHECK 0x0d ) 2929  sbt_l2ÿp_smp_dhkey_check { 2930 ušt8_t me [16]; 2931 } __©Œibu‹__ (( ·cked )); 2933  #BT_L2CAP_SMP_KEYPRESS_NOTIFY 0x0e ) 2934  sbt_l2ÿp_smp_key´ess_nÙify { 2935 ušt8_t mty³ ; 2936 } __©Œibu‹__ (( ·cked )); 2938  sbt_sdp_hdr { 2939 ušt8_t mpdu ; 2940 ušt16_t mtid ; 2941 ušt16_t m¶’ ; 2942 } __©Œibu‹__ (( ·cked )); @monitor/btsnoop.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~ 33  ~<¡dšt.h > 34  ~<¡ršg.h > 35  ~ 36  ~<¬·/š‘.h > 38  ~ 39  ~ 41  ~"bt¢oÝ.h " 43  sbt¢oÝ_hdr { 44 ušt8_t mid [8]; 45 ušt32_t mv”siÚ ; 46 ušt32_t mty³ ; 47 } __©Œibu‹__ (( ·cked )); 48  #BTSNOOP_HDR_SIZE (( bt¢oÝ_hdr )) ) 50  sbt¢oÝ_pkt { 51 ušt32_t msize ; 52 ušt32_t mËn ; 53 ušt32_t mæags ; 54 ušt32_t mdrÝs ; 55 ušt64_t mts ; 56 ušt8_t md©a [0]; 57 } __©Œibu‹__ (( ·cked )); 58  #BTSNOOP_PKT_SIZE (( bt¢oÝ_pkt )) ) 60 cÚ¡ ušt8_t gbt¢oÝ_id [] = { 0x62, 0x74, 0x73, 0x6e, 63 cÚ¡ ušt32_t gbt¢oÝ_v”siÚ = 1; 64  ušt32_t gbt¢oÝ_ty³ = 0; 66  gbt¢oÝ_fd = -1; 67  ušt16_t gbt¢oÝ_šdex = 0xffff; 69  $bt¢oÝ_ü—‹ (cÚ¡ * ·th , ušt32_t ty³ ) 71  bt¢oÝ_hdr hdr ; 72 ssize_t wr™‹n ; 74 ià( bt¢oÝ_fd >= 0) 77 bt¢oÝ_fd = `Ý’ ( ·th , O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC , 78 S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ); 79 ià( bt¢oÝ_fd < 0) 82 bt¢oÝ_ty³ = ty³ ; 84 `memýy ( hdr . id , bt¢oÝ_id , (btsnoop_id)); 85 hdr . v”siÚ = `htobe32 ( bt¢oÝ_v”siÚ ); 86 hdr . ty³ = `htobe32 ( bt¢oÝ_ty³ ); 88 wr™‹n = `wr™e ( bt¢oÝ_fd , & hdr , BTSNOOP_HDR_SIZE ); 89 ià( wr™‹n < 0) { 90 `þo£ ( bt¢oÝ_fd ); 91 bt¢oÝ_fd = -1; 94 } } 96  $bt¢oÝ_wr™e ( timev® * tv , ušt32_t æags , 97 cÚ¡ * d©a , ušt16_t size ) 99  bt¢oÝ_pkt pkt ; 100 ušt64_t ts ; 101 ssize_t wr™‹n ; 103 ts = ( tv -> tv_£c - 946684800Îè* 1000000Î +v-> tv_u£c ; 105 pkt . size = `htobe32 (size); 106 pkt . Ën = `htobe32 ( size ); 107 pkt . æags = `htobe32 (flags); 108 pkt . drÝs = `htobe32 (0); 109 pkt . ts = `htobe64 (ts + 0x00E03AB44A676000ll); 111 wr™‹n = `wr™e ( bt¢oÝ_fd , & pkt , BTSNOOP_PKT_SIZE ); 112 ià( wr™‹n < 0) 115 ià( d©a && size > 0) { 116 wr™‹n = `wr™e ( bt¢oÝ_fd , d©a , size ); 117 ià( wr™‹n < 0) 120 } } 122  ušt32_t $g‘_æags_äom_Ýcode ( ušt16_t Ýcode ) 124  Ýcode ) { 125  BTSNOOP_OPCODE_NEW_INDEX : 126  BTSNOOP_OPCODE_DEL_INDEX : 128  BTSNOOP_OPCODE_COMMAND_PKT : 130  BTSNOOP_OPCODE_EVENT_PKT : 132  BTSNOOP_OPCODE_ACL_TX_PKT : 134  BTSNOOP_OPCODE_ACL_RX_PKT : 136  BTSNOOP_OPCODE_SCO_TX_PKT : 137  BTSNOOP_OPCODE_SCO_RX_PKT : 142 } } 144  $bt¢oÝ_wr™e_hci ( timev® * tv , ušt16_t šdex , ušt16_ˆ Ýcode , 145 cÚ¡ * d©a , ušt16_t size ) 147 ušt32_t æags ; 149 ià(! tv ) 152 ià( bt¢oÝ_fd < 0) 155  bt¢oÝ_ty³ ) { 156  BTSNOOP_TYPE_HCI : 157 ià( bt¢oÝ_šdex == 0xffff) 158 bt¢oÝ_šdex = šdex ; 160 ià( šdex !ð bt¢oÝ_šdex ) 163 æags = `g‘_æags_äom_Ýcode ( Ýcode ); 164 ià( æags == 0xff) 168  BTSNOOP_TYPE_MONITOR : 169 æags = ( šdex << 16è| Ýcode ; 176 `bt¢oÝ_wr™e ( tv , æags , d©a , size ); 177 } } 179  $bt¢oÝ_wr™e_phy ( timev® * tv , ušt16_t äequ’cy , 180 cÚ¡ * d©a , ušt16_t size ) 182 ušt32_t æags ; 184 ià(! tv ) 187 ià( bt¢oÝ_fd < 0) 190  bt¢oÝ_ty³ ) { 191  BTSNOOP_TYPE_SIMULATOR : 192 æags = (1 << 16è| äequ’cy ; 199 `bt¢oÝ_wr™e ( tv , æags , d©a , size ); 200 } } 202  $bt¢oÝ_Ý’ (cÚ¡ * ·th , ušt32_t * ty³ ) 204  bt¢oÝ_hdr hdr ; 205 ssize_t Ën ; 207 ià( bt¢oÝ_fd >= 0) { 208 `årštf ( ¡d”r , "Too many open files\n"); 212 bt¢oÝ_fd = `Ý’ ( ·th , O_RDONLY | O_CLOEXEC ); 213 ià( bt¢oÝ_fd < 0) { 214 `³¼Ü ("Failedo open file"); 218 Ën = `»ad ( bt¢oÝ_fd , & hdr , BTSNOOP_HDR_SIZE ); 219 ià( Ën < 0 ||†’ !ð BTSNOOP_HDR_SIZE ) { 220 `³¼Ü ("Failedo„ead header"); 221 `þo£ ( bt¢oÝ_fd ); 222 bt¢oÝ_fd = -1; 226 ià( `memcmp ( hdr . id , bt¢oÝ_id , (btsnoop_id))) { 227 `årštf ( ¡d”r , "Invalid btsnoop header\n"); 228 `þo£ ( bt¢oÝ_fd ); 229 bt¢oÝ_fd = -1; 233 ià( `be32toh ( hdr . v”siÚ è!ð bt¢oÝ_v”siÚ ) { 234 `årštf ( ¡d”r , "Invalid btsnoop version\n"); 235 `þo£ ( bt¢oÝ_fd ); 236 bt¢oÝ_fd = -1; 240 bt¢oÝ_ty³ = `be32toh ( hdr . ty³ ); 242 ià( ty³ ) 243 * ty³ = bt¢oÝ_ty³ ; 246 } } 248  ušt16_t $g‘_Ýcode_äom_æags ( ušt8_t ty³ , ušt32_t æags ) 250  ty³ ) { 251  HCI_COMMAND_PKT : 252  BTSNOOP_OPCODE_COMMAND_PKT ; 253  HCI_ACLDATA_PKT : 254 ià( æags & 0x01) 255  BTSNOOP_OPCODE_ACL_RX_PKT ; 257  BTSNOOP_OPCODE_ACL_TX_PKT ; 258  HCI_SCODATA_PKT : 259 ià( æags & 0x01) 260  BTSNOOP_OPCODE_SCO_RX_PKT ; 262  BTSNOOP_OPCODE_SCO_TX_PKT ; 263  HCI_EVENT_PKT : 264  BTSNOOP_OPCODE_EVENT_PKT ; 266 ià( æags & 0x02) { 267 ià( æags & 0x01) 268  BTSNOOP_OPCODE_EVENT_PKT ; 270  BTSNOOP_OPCODE_COMMAND_PKT ; 272 ià( æags & 0x01) 273  BTSNOOP_OPCODE_ACL_RX_PKT ; 275  BTSNOOP_OPCODE_ACL_TX_PKT ; 281 } } 283  $bt¢oÝ_»ad_hci ( timev® * tv , ušt16_t * šdex , ušt16_ˆ* Ýcode , 284 * d©a , ušt16_t * size ) 286  bt¢oÝ_pkt pkt ; 287 ušt32_t tÜ—d , æags ; 288 ušt64_t ts ; 289 ušt8_t pkt_ty³ ; 290 ssize_t Ën ; 292 ià( bt¢oÝ_fd < 0) 295 Ën = `»ad ( bt¢oÝ_fd , & pkt , BTSNOOP_PKT_SIZE ); 296 ià( Ën == 0) 299 ià( Ën < 0 ||†’ !ð BTSNOOP_PKT_SIZE ) { 300 `³¼Ü ("Failedo„ead…acket"); 301 `þo£ ( bt¢oÝ_fd ); 302 bt¢oÝ_fd = -1; 306 tÜ—d = `be32toh ( pkt . size ); 307 ià( tÜ—d > BTSNOOP_MAX_PACKET_SIZE ) { 308 `³¼Ü ("Pack‘†’ su¥icŸÎy big: %u", tÜ—d ); 309 `þo£ ( bt¢oÝ_fd ); 310 bt¢oÝ_fd = -1; 314 æags = `be32toh ( pkt .flags); 316 ts = `be64toh ( pkt .ts) - 0x00E03AB44A676000ll; 317 tv -> tv_£c = ( ts / 1000000ll) + 946684800ll; 318 tv -> tv_u£c = ts % 1000000ll; 320  bt¢oÝ_ty³ ) { 321  BTSNOOP_TYPE_HCI : 322 * šdex = 0; 323 * Ýcode = `g‘_Ýcode_äom_æags (0xff, æags ); 326  BTSNOOP_TYPE_UART : 327 Ën = `»ad ( bt¢oÝ_fd , & pkt_ty³ , 1); 328 ià( Ën < 0) { 329 `³¼Ü ("Failedo„ead…acketype"); 330 `þo£ ( bt¢oÝ_fd ); 331 bt¢oÝ_fd = -1; 334 tÜ—d --; 336 * šdex = 0; 337 * Ýcode = `g‘_Ýcode_äom_æags ( pkt_ty³ , æags ); 340  BTSNOOP_TYPE_MONITOR : 341 * šdex = æags >> 16; 342 * Ýcode = æags & 0xffff; 346 `årštf ( ¡d”r , "Unknown…acketype\n"); 347 `þo£ ( bt¢oÝ_fd ); 348 bt¢oÝ_fd = -1; 352 Ën = `»ad ( bt¢oÝ_fd , d©a , tÜ—d ); 353 ià( Ën < 0) { 354 `³¼Ü ("Failedo„ead data"); 355 `þo£ ( bt¢oÝ_fd ); 356 bt¢oÝ_fd = -1; 360 * size = tÜ—d ; 363 } } 365  $bt¢oÝ_»ad_phy ( timev® * tv , ušt16_t * äequ’cy , 366 * d©a , ušt16_t * size ) 368  bt¢oÝ_pkt pkt ; 369 ušt32_t tÜ—d , æags ; 370 ušt64_t ts ; 371 ssize_t Ën ; 373 ià( bt¢oÝ_fd < 0) 376 Ën = `»ad ( bt¢oÝ_fd , & pkt , BTSNOOP_PKT_SIZE ); 377 ià( Ën == 0) 380 ià( Ën < 0 ||†’ !ð BTSNOOP_PKT_SIZE ) { 381 `³¼Ü ("Failedo„ead…acket"); 382 `þo£ ( bt¢oÝ_fd ); 383 bt¢oÝ_fd = -1; 387 tÜ—d = `be32toh ( pkt . size ); 388 æags = `be32toh ( pkt .flags); 390 ts = `be64toh ( pkt .ts) - 0x00E03AB44A676000ll; 391 tv -> tv_£c = ( ts / 1000000ll) + 946684800ll; 392 tv -> tv_u£c = ts % 1000000ll; 394  bt¢oÝ_ty³ ) { 395  BTSNOOP_TYPE_SIMULATOR : 396 ià(( æags >> 16) != 1) 398 * äequ’cy = æags & 0xffff; 402 `årštf ( ¡d”r , "Unknown…acketype\n"); 403 `þo£ ( bt¢oÝ_fd ); 404 bt¢oÝ_fd = -1; 408 Ën = `»ad ( bt¢oÝ_fd , d©a , tÜ—d ); 409 ià( Ën < 0) { 410 `³¼Ü ("Failedo„ead data"); 411 `þo£ ( bt¢oÝ_fd ); 412 bt¢oÝ_fd = -1; 416 * size = tÜ—d ; 419 } } 421  $bt¢oÝ_þo£ () 423 ià( bt¢oÝ_fd < 0) 426 `þo£ ( bt¢oÝ_fd ); 427 bt¢oÝ_fd = -1; 429 bt¢oÝ_šdex = 0xffff; 430 } } @monitor/btsnoop.h 25  ~<¡dšt.h > 26  ~ 28  #BTSNOOP_TYPE_HCI 1001 ) 29  #BTSNOOP_TYPE_UART 1002 ) 30  #BTSNOOP_TYPE_BCSP 1003 ) 31  #BTSNOOP_TYPE_3WIRE 1004 ) 32  #BTSNOOP_TYPE_MONITOR 2001 ) 33  #BTSNOOP_TYPE_SIMULATOR 2002 ) 35  #BTSNOOP_OPCODE_NEW_INDEX 0 ) 36  #BTSNOOP_OPCODE_DEL_INDEX 1 ) 37  #BTSNOOP_OPCODE_COMMAND_PKT 2 ) 38  #BTSNOOP_OPCODE_EVENT_PKT 3 ) 39  #BTSNOOP_OPCODE_ACL_TX_PKT 4 ) 40  #BTSNOOP_OPCODE_ACL_RX_PKT 5 ) 41  #BTSNOOP_OPCODE_SCO_TX_PKT 6 ) 42  #BTSNOOP_OPCODE_SCO_RX_PKT 7 ) 44  sbt¢oÝ_Ýcode_Ãw_šdex { 45 ušt8_t mty³ ; 46 ušt8_t mbus ; 47 ušt8_t mbdaddr [6]; 48  mÇme [8]; 49 } __©Œibu‹__ (( ·cked )); 51  bt¢oÝ_ü—‹ (cÚ¡ * ·th , ušt32_t ty³ ); 52  bt¢oÝ_wr™e ( timev® * tv , ušt32_t æags , 53 cÚ¡ * d©a , ušt16_t size ); 54  bt¢oÝ_wr™e_hci ( timev® * tv , ušt16_t šdex , ušt16_ˆ Ýcode , 55 cÚ¡ * d©a , ušt16_t size ); 56  bt¢oÝ_wr™e_phy ( timev® * tv , ušt16_t äequ’cy , 57 cÚ¡ * d©a , ušt16_t size ); 58  bt¢oÝ_Ý’ (cÚ¡ * ·th , ušt32_t * ty³ ); 59  bt¢oÝ_»ad_hci ( timev® * tv , ušt16_t * šdex , ušt16_ˆ* Ýcode , 60 * d©a , ušt16_t * size ); 61  bt¢oÝ_»ad_phy ( timev® * tv , ušt16_t * äequ’cy , 62 * d©a , ušt16_t * size ); 63  bt¢oÝ_þo£ (); @monitor/control.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<¡dboÞ.h > 31  ~<”ºo.h > 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 35  ~ 36  ~ 37  ~ 39  ~"lib/blu‘oÙh.h " 40  ~"lib/hci.h " 41  ~"lib/mgmt.h " 43  ~"¤c/sh¬ed/utž.h " 44  ~"¤c/sh¬ed/bt¢oÝ.h " 45  ~"mašloÝ.h " 46  ~"di¥Ïy.h " 47  ~"·ck‘.h " 48  ~"hcidump.h " 49  ~"–lisys.h " 50  ~"cÚŒÞ.h " 52  bt¢oÝ * gbt¢oÝ_fže = NULL ; 53  boÞ ghcidump_çÎback = çl£ ; 55  scÚŒÞ_d©a { 56 ušt16_t mchªÃl ; 57  mfd ; 58  mbuf [ BTSNOOP_MAX_PACKET_SIZE ]; 59 ušt16_t moff£t ; 62  $ä“_d©a (* u£r_d©a ) 64  cÚŒÞ_d©a * d©a = u£r_d©a ; 66 `þo£ ( d©a -> fd ); 68 `ä“ ( d©a ); 69 } } 71  $mgmt_šdex_added ( ušt16_t Ën , cÚ¡ * buf ) 73 `´štf ("@ Index Added\n"); 75 `·ck‘_hexdump ( buf , Ën ); 76 } } 78  $mgmt_šdex_»moved ( ušt16_t Ën , cÚ¡ * buf ) 80 `´štf ("@ Index Removed\n"); 82 `·ck‘_hexdump ( buf , Ën ); 83 } } 85  $mgmt_uncÚf_šdex_added ( ušt16_t Ën , cÚ¡ * buf ) 87 `´štf ("@ Unconfigured Index Added\n"); 89 `·ck‘_hexdump ( buf , Ën ); 90 } } 92  $mgmt_uncÚf_šdex_»moved ( ušt16_t Ën , cÚ¡ * buf ) 94 `´štf ("@ Unconfigured Index Removed\n"); 96 `·ck‘_hexdump ( buf , Ën ); 97 } } 99  $mgmt_cÚŒÞËr_”rÜ ( ušt16_t Ën , cÚ¡ * buf ) 101 cÚ¡  mgmt_ev_cÚŒÞËr_”rÜ * ev = buf ; 103 ià( Ën < (* ev )) { 104 `´štf ("* Malformed Controller Error control\n"); 108 `´štf ("@ CÚŒÞ˸E¼Ü: 0x%2.2x\n", ev -> ”rÜ_code ); 110 buf +ð(* ev ); 111 Ën -ð(* ev ); 113 `·ck‘_hexdump ( buf , Ën ); 114 } } 116 #iâdeà NELEM 117  #NELEM ( x è((xè/ ((x)[0])) ) 120 cÚ¡ * gcÚfig_ÝtiÚs_¡r [] = { 124  $mgmt_Ãw_cÚfig_ÝtiÚs ( ušt16_t Ën , cÚ¡ * buf ) 126 ušt32_t ÝtiÚs ; 127  i ; 129 ià( Ën < 4) { 130 `´štf ("* Malformed New Configuration Options control\n"); 134 ÝtiÚs = `g‘_Ë32 ( buf ); 136 `´štf ("@ New CÚfigu¿tiÚ O±iÚs: 0x%4.4x\n", ÝtiÚs ); 138 ià( ÝtiÚs ) { 139 `´štf ("%-12c", ' '); 140  i = 0; i < `NELEM ( cÚfig_ÝtiÚs_¡r ); i++) { 141 ià( ÝtiÚs & (1 << i )) 142 `´štf ("% ", cÚfig_ÝtiÚs_¡r [ i ]); 144 `´štf ("\n"); 147 buf += 4; 148 Ën -= 4; 150 `·ck‘_hexdump ( buf , Ën ); 151 } } 153 cÚ¡ * g£‰šgs_¡r [] = { 159  $mgmt_Ãw_£‰šgs ( ušt16_t Ën , cÚ¡ * buf ) 161 ušt32_t £‰šgs ; 162  i ; 164 ià( Ën < 4) { 165 `´štf ("* Malformed New Settings control\n"); 169 £‰šgs = `g‘_Ë32 ( buf ); 171 `´štf ("@ New S‘tšgs: 0x%4.4x\n", £‰šgs ); 173 ià( £‰šgs ) { 174 `´štf ("%-12c", ' '); 175  i = 0; i < `NELEM ( £‰šgs_¡r ); i++) { 176 ià( £‰šgs & (1 << i )) 177 `´štf ("% ", £‰šgs_¡r [ i ]); 179 `´štf ("\n"); 182 buf += 4; 183 Ën -= 4; 185 `·ck‘_hexdump ( buf , Ën ); 186 } } 188  $mgmt_þass_of_dev_chªged ( ušt16_t Ën , cÚ¡ * buf ) 190 cÚ¡  mgmt_ev_þass_of_dev_chªged * ev = buf ; 192 ià( Ën < (* ev )) { 193 `´štf ("* Malformed Class of Device Changed control\n"); 197 `´štf ("@ Class of Device Changed: 0x%2.2x%2.2x%2.2x\n", 198 ev -> þass_of_dev [2], 199 ev -> þass_of_dev [1], 200 ev -> þass_of_dev [0]); 202 buf +ð(* ev ); 203 Ën -ð(* ev ); 205 `·ck‘_hexdump ( buf , Ën ); 206 } } 208  $mgmt_loÿl_Çme_chªged ( ušt16_t Ën , cÚ¡ * buf ) 210 cÚ¡  mgmt_ev_loÿl_Çme_chªged * ev = buf ; 212 ià( Ën < (* ev )) { 213 `´štf ("* Malformed Local Name Changed control\n"); 217 `´štf ("@ LoÿÈNamChªged: % (%s)\n", ev -> Çme ,ƒv-> shÜt_Çme ); 219 buf +ð(* ev ); 220 Ën -ð(* ev ); 222 `·ck‘_hexdump ( buf , Ën ); 223 } } 225  $mgmt_Ãw_lšk_key ( ušt16_t Ën , cÚ¡ * buf ) 227 cÚ¡  mgmt_ev_Ãw_lšk_key * ev = buf ; 228  ¡r [18]; 230 ià( Ën < (* ev )) { 231 `´štf ("* Malformed New Link Key control\n"); 235 `ba2¡r (& ev -> key . addr . bdaddr , ¡r ); 237 `´štf ("@ New Lšk Key: % (%d)\n", ¡r , ev -> key . addr . ty³ ); 239 buf +ð(* ev ); 240 Ën -ð(* ev ); 242 `·ck‘_hexdump ( buf , Ën ); 243 } } 245  $mgmt_Ãw_lÚg_‹rm_key ( ušt16_t Ën , cÚ¡ * buf ) 247 cÚ¡  mgmt_ev_Ãw_lÚg_‹rm_key * ev = buf ; 248 cÚ¡ * ty³ ; 249  ¡r [18]; 251 ià( Ën < (* ev )) { 252 `´štf ("* Malformed New Long Term Key control\n"); 257  ev -> key . ty³ ) { 259 ià( ev -> key . ma¡” ) 260 ty³ = "Master (Unauthenticated)"; 262 ty³ = "Slave (Unauthenticated)"; 265 ià( ev -> key . ma¡” ) 266 ty³ = "Master (Authenticated)"; 268 ty³ = "Slave (Authenticated)"; 271 ty³ = "SC (Unauthenticated)"; 274 ty³ = "SC (Authenticated)"; 277 ty³ = "SC (Debug)"; 280 ty³ = ""; 284 `ba2¡r (& ev -> key . addr . bdaddr , ¡r ); 286 `´štf ("@ New LÚg T”m Key: % (%dè% 0x%02x\n", ¡r , 287 ev -> key . addr . ty³ ,ype,ƒv->key.type); 289 buf +ð(* ev ); 290 Ën -ð(* ev ); 292 `·ck‘_hexdump ( buf , Ën ); 293 } } 295  $mgmt_deviû_cÚÃùed ( ušt16_t Ën , cÚ¡ * buf ) 297 cÚ¡  mgmt_ev_deviû_cÚÃùed * ev = buf ; 298 ušt32_t æags ; 299  ¡r [18]; 301 ià( Ën < (* ev )) { 302 `´štf ("* Malformed Device Connected control\n"); 306 æags = `Ë32_to_ýu ( ev ->flags); 307 `ba2¡r (& ev -> addr . bdaddr , ¡r ); 309 `´štf ("@ Device Connected: %s (%d) flags 0x%4.4x\n", 310 ¡r , ev -> addr . ty³ , æags ); 312 buf +ð(* ev ); 313 Ën -ð(* ev ); 315 `·ck‘_hexdump ( buf , Ën ); 316 } } 318  $mgmt_deviû_discÚÃùed ( ušt16_t Ën , cÚ¡ * buf ) 320 cÚ¡  mgmt_ev_deviû_discÚÃùed * ev = buf ; 321  ¡r [18]; 322 ušt8_t »asÚ ; 323 ušt16_t cÚsumed_Ën ; 325 ià( Ën < ( mgmt_addr_šfo )) { 326 `´štf ("* Malformed Device Disconnected control\n"); 330 ià( Ën < (* ev )) { 331 »asÚ = MGMT_DEV_DISCONN_UNKNOWN ; 332 cÚsumed_Ën = Ën ; 334 »asÚ = ev ->reason; 335 cÚsumed_Ën = (* ev ); 338 `ba2¡r (& ev -> addr . bdaddr , ¡r ); 340 `´štf ("@ Deviû DiscÚÃùed: % (%dè»asÚ %u\n", ¡r , ev -> addr . ty³ , 341 »asÚ ); 343 buf +ð cÚsumed_Ën ; 344 Ën -ð cÚsumed_Ën ; 346 `·ck‘_hexdump ( buf , Ën ); 347 } } 349  $mgmt_cÚÃù_çžed ( ušt16_t Ën , cÚ¡ * buf ) 351 cÚ¡  mgmt_ev_cÚÃù_çžed * ev = buf ; 352  ¡r [18]; 354 ià( Ën < (* ev )) { 355 `´štf ("* Malformed Connect Failed control\n"); 359 `ba2¡r (& ev -> addr . bdaddr , ¡r ); 361 `´štf ("@ Connect Failed: %s (%d) status 0x%2.2x\n", 362 ¡r , ev -> addr . ty³ ,ƒv-> ¡©us ); 364 buf +ð(* ev ); 365 Ën -ð(* ev ); 367 `·ck‘_hexdump ( buf , Ën ); 368 } } 370  $mgmt_pš_code_»que¡ ( ušt16_t Ën , cÚ¡ * buf ) 372 cÚ¡  mgmt_ev_pš_code_»que¡ * ev = buf ; 373  ¡r [18]; 375 ià( Ën < (* ev )) { 376 `´štf ("* Malformed PIN Code Request control\n"); 380 `ba2¡r (& ev -> addr . bdaddr , ¡r ); 382 `´štf ("@ PIN Code Request: %s (%d) secure 0x%2.2x\n", 383 ¡r , ev -> addr . ty³ ,ƒv-> £cu» ); 385 buf +ð(* ev ); 386 Ën -ð(* ev ); 388 `·ck‘_hexdump ( buf , Ën ); 389 } } 391  $mgmt_u£r_cÚfœm_»que¡ ( ušt16_t Ën , cÚ¡ * buf ) 393 cÚ¡  mgmt_ev_u£r_cÚfœm_»que¡ * ev = buf ; 394  ¡r [18]; 396 ià( Ën < (* ev )) { 397 `´štf ("* Malformed User Confirmation Request control\n"); 401 `ba2¡r (& ev -> addr . bdaddr , ¡r ); 403 `´štf ("@ User Confirmation Request: %s (%d) hint %d value %d\n", 404 ¡r , ev -> addr . ty³ ,ƒv-> cÚfœm_hšt ,ƒv-> v®ue ); 406 buf +ð(* ev ); 407 Ën -ð(* ev ); 409 `·ck‘_hexdump ( buf , Ën ); 410 } } 412  $mgmt_u£r_·sskey_»que¡ ( ušt16_t Ën , cÚ¡ * buf ) 414 cÚ¡  mgmt_ev_u£r_·sskey_»que¡ * ev = buf ; 415  ¡r [18]; 417 ià( Ën < (* ev )) { 418 `´štf ("* Malformed User Passkey Request control\n"); 422 `ba2¡r (& ev -> addr . bdaddr , ¡r ); 424 `´štf ("@ U£¸Passkey Reque¡: % (%d)\n", ¡r , ev -> addr . ty³ ); 426 buf +ð(* ev ); 427 Ën -ð(* ev ); 429 `·ck‘_hexdump ( buf , Ën ); 430 } } 432  $mgmt_auth_çžed ( ušt16_t Ën , cÚ¡ * buf ) 434 cÚ¡  mgmt_ev_auth_çžed * ev = buf ; 435  ¡r [18]; 437 ià( Ën < (* ev )) { 438 `´štf ("* Malformed Authentication Failed control\n"); 442 `ba2¡r (& ev -> addr . bdaddr , ¡r ); 444 `´štf ("@ Authentication Failed: %s (%d) status 0x%2.2x\n", 445 ¡r , ev -> addr . ty³ ,ƒv-> ¡©us ); 447 buf +ð(* ev ); 448 Ën -ð(* ev ); 450 `·ck‘_hexdump ( buf , Ën ); 451 } } 453  $mgmt_deviû_found ( ušt16_t Ën , cÚ¡ * buf ) 455 cÚ¡  mgmt_ev_deviû_found * ev = buf ; 456 ušt32_t æags ; 457  ¡r [18]; 459 ià( Ën < (* ev )) { 460 `´štf ("* Malformed Device Found control\n"); 464 æags = `Ë32_to_ýu ( ev ->flags); 465 `ba2¡r (& ev -> addr . bdaddr , ¡r ); 467 `´štf ("@ Device Found: %s (%d)„ssi %d flags 0x%4.4x\n", 468 ¡r , ev -> addr . ty³ ,ƒv-> rssi , æags ); 470 buf +ð(* ev ); 471 Ën -ð(* ev ); 473 `·ck‘_hexdump ( buf , Ën ); 474 } } 476  $mgmt_discov”šg ( ušt16_t Ën , cÚ¡ * buf ) 478 cÚ¡  mgmt_ev_discov”šg * ev = buf ; 480 ià( Ën < (* ev )) { 481 `´štf ("* Malformed Discovering control\n"); 485 `´štf ("@ Discov”šg: 0x%2.2x (%d)\n", ev -> discov”šg ,ƒv-> ty³ ); 487 buf +ð(* ev ); 488 Ën -ð(* ev ); 490 `·ck‘_hexdump ( buf , Ën ); 491 } } 493  $mgmt_deviû_blocked ( ušt16_t Ën , cÚ¡ * buf ) 495 cÚ¡  mgmt_ev_deviû_blocked * ev = buf ; 496  ¡r [18]; 498 ià( Ën < (* ev )) { 499 `´štf ("* Malformed Device Blocked control\n"); 503 `ba2¡r (& ev -> addr . bdaddr , ¡r ); 505 `´štf ("@ Deviû Blocked: % (%d)\n", ¡r , ev -> addr . ty³ ); 507 buf +ð(* ev ); 508 Ën -ð(* ev ); 510 `·ck‘_hexdump ( buf , Ën ); 511 } } 513  $mgmt_deviû_unblocked ( ušt16_t Ën , cÚ¡ * buf ) 515 cÚ¡  mgmt_ev_deviû_unblocked * ev = buf ; 516  ¡r [18]; 518 ià( Ën < (* ev )) { 519 `´štf ("* Malformed Device Unblocked control\n"); 523 `ba2¡r (& ev -> addr . bdaddr , ¡r ); 525 `´štf ("@ Deviû Unblocked: % (%d)\n", ¡r , ev -> addr . ty³ ); 527 buf +ð(* ev ); 528 Ën -ð(* ev ); 530 `·ck‘_hexdump ( buf , Ën ); 531 } } 533  $mgmt_deviû_uÅaœed ( ušt16_t Ën , cÚ¡ * buf ) 535 cÚ¡  mgmt_ev_deviû_uÅaœed * ev = buf ; 536  ¡r [18]; 538 ià( Ën < (* ev )) { 539 `´štf ("* Malformed Device Unpaired control\n"); 543 `ba2¡r (& ev -> addr . bdaddr , ¡r ); 545 `´štf ("@ Deviû UÅaœed: % (%d)\n", ¡r , ev -> addr . ty³ ); 547 buf +ð(* ev ); 548 Ën -ð(* ev ); 550 `·ck‘_hexdump ( buf , Ën ); 551 } } 553  $mgmt_·sskey_nÙify ( ušt16_t Ën , cÚ¡ * buf ) 555 cÚ¡  mgmt_ev_·sskey_nÙify * ev = buf ; 556 ušt32_t ·sskey ; 557  ¡r [18]; 559 ià( Ën < (* ev )) { 560 `´štf ("* Malformed Passkey Notify control\n"); 564 `ba2¡r (& ev -> addr . bdaddr , ¡r ); 566 ·sskey = `Ë32_to_ýu ( ev ->passkey); 568 `´štf ("@ Passkey Notify: %s (%d)…asskey %06uƒntered %u\n", 569 ¡r , ev -> addr . ty³ , ·sskey ,ƒv-> ’‹»d ); 571 buf +ð(* ev ); 572 Ën -ð(* ev ); 574 `·ck‘_hexdump ( buf , Ën ); 575 } } 577  $mgmt_Ãw_œk ( ušt16_t Ën , cÚ¡ * buf ) 579 cÚ¡  mgmt_ev_Ãw_œk * ev = buf ; 580  addr [18], ½a [18]; 582 ià( Ën < (* ev )) { 583 `´štf ("* Malformed New IRK control\n"); 587 `ba2¡r (& ev -> ½a ,„pa); 588 `ba2¡r (& ev -> key . addr . bdaddr ,‡ddr); 590 `´štf ("@ New IRK: % (%dè%s\n", addr , ev -> key .addr. ty³ , ½a ); 592 buf +ð(* ev ); 593 Ën -ð(* ev ); 595 `·ck‘_hexdump ( buf , Ën ); 596 } } 598  $mgmt_Ãw_c¤k ( ušt16_t Ën , cÚ¡ * buf ) 600 cÚ¡  mgmt_ev_Ãw_c¤k * ev = buf ; 601  addr [18]; 603 ià( Ën < (* ev )) { 604 `´štf ("* Malformed New CSRK control\n"); 608 `ba2¡r (& ev -> key . addr . bdaddr ,‡ddr); 610 `´štf ("@ New CSRK: % (%dè%s\n", addr , ev -> key .addr. ty³ , 611 ev -> key . ma¡” ? "Master" : "Slave"); 613 buf +ð(* ev ); 614 Ën -ð(* ev ); 616 `·ck‘_hexdump ( buf , Ën ); 617 } } 619  $mgmt_deviû_added ( ušt16_t Ën , cÚ¡ * buf ) 621 cÚ¡  mgmt_ev_deviû_added * ev = buf ; 622  ¡r [18]; 624 ià( Ën < (* ev )) { 625 `´štf ("* Malformed Device Added control\n"); 629 `ba2¡r (& ev -> addr . bdaddr , ¡r ); 631 `´štf ("@ Deviû Added: % (%dè%d\n", ¡r , ev -> addr . ty³ ,ƒv-> aùiÚ ); 633 buf +ð(* ev ); 634 Ën -ð(* ev ); 636 `·ck‘_hexdump ( buf , Ën ); 637 } } 639  $mgmt_deviû_»moved ( ušt16_t Ën , cÚ¡ * buf ) 641 cÚ¡  mgmt_ev_deviû_»moved * ev = buf ; 642  ¡r [18]; 644 ià( Ën < (* ev )) { 645 `´štf ("* Malformed Device Removed control\n"); 649 `ba2¡r (& ev -> addr . bdaddr , ¡r ); 651 `´štf ("@ Deviû Removed: % (%d)\n", ¡r , ev -> addr . ty³ ); 653 buf +ð(* ev ); 654 Ën -ð(* ev ); 656 `·ck‘_hexdump ( buf , Ën ); 657 } } 659  $mgmt_Ãw_cÚn_·¿m ( ušt16_t Ën , cÚ¡ * buf ) 661 cÚ¡  mgmt_ev_Ãw_cÚn_·¿m * ev = buf ; 662  addr [18]; 663 ušt16_t mš , max , Ï‹ncy , timeout ; 665 ià( Ën < (* ev )) { 666 `´štf ("* Malformed New Connection Parameter control\n"); 670 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 671 mš = `Ë16_to_ýu ( ev -> mš_š‹rv® ); 672 max = `Ë16_to_ýu ( ev -> max_š‹rv® ); 673 Ï‹ncy = `Ë16_to_ýu ( ev ->latency); 674 timeout = `Ë16_to_ýu ( ev ->timeout); 676 `´štf ("@ New Conn Param: %s (%d) hint %d min 0x%4.4x max 0x%4.4x " 677 "Ï‹ncy 0x%4.4ximeouˆ0x%4.4x\n", addr , ev ->addr. ty³ , 678 ev -> ¡Üe_hšt , mš , max , Ï‹ncy , timeout ); 680 buf +ð(* ev ); 681 Ën -ð(* ev ); 683 `·ck‘_hexdump ( buf , Ën ); 684 } } 686  $cÚŒÞ_mes§ge ( ušt16_t Ýcode , cÚ¡ * d©a , ušt16_ˆ size ) 688  Ýcode ) { 689  MGMT_EV_INDEX_ADDED : 690 `mgmt_šdex_added ( size , d©a ); 692  MGMT_EV_INDEX_REMOVED : 693 `mgmt_šdex_»moved ( size , d©a ); 695  MGMT_EV_CONTROLLER_ERROR : 696 `mgmt_cÚŒÞËr_”rÜ ( size , d©a ); 698  MGMT_EV_NEW_SETTINGS : 699 `mgmt_Ãw_£‰šgs ( size , d©a ); 701  MGMT_EV_CLASS_OF_DEV_CHANGED : 702 `mgmt_þass_of_dev_chªged ( size , d©a ); 704  MGMT_EV_LOCAL_NAME_CHANGED : 705 `mgmt_loÿl_Çme_chªged ( size , d©a ); 707  MGMT_EV_NEW_LINK_KEY : 708 `mgmt_Ãw_lšk_key ( size , d©a ); 710  MGMT_EV_NEW_LONG_TERM_KEY : 711 `mgmt_Ãw_lÚg_‹rm_key ( size , d©a ); 713  MGMT_EV_DEVICE_CONNECTED : 714 `mgmt_deviû_cÚÃùed ( size , d©a ); 716  MGMT_EV_DEVICE_DISCONNECTED : 717 `mgmt_deviû_discÚÃùed ( size , d©a ); 719  MGMT_EV_CONNECT_FAILED : 720 `mgmt_cÚÃù_çžed ( size , d©a ); 722  MGMT_EV_PIN_CODE_REQUEST : 723 `mgmt_pš_code_»que¡ ( size , d©a ); 725  MGMT_EV_USER_CONFIRM_REQUEST : 726 `mgmt_u£r_cÚfœm_»que¡ ( size , d©a ); 728  MGMT_EV_USER_PASSKEY_REQUEST : 729 `mgmt_u£r_·sskey_»que¡ ( size , d©a ); 731  MGMT_EV_AUTH_FAILED : 732 `mgmt_auth_çžed ( size , d©a ); 734  MGMT_EV_DEVICE_FOUND : 735 `mgmt_deviû_found ( size , d©a ); 737  MGMT_EV_DISCOVERING : 738 `mgmt_discov”šg ( size , d©a ); 740  MGMT_EV_DEVICE_BLOCKED : 741 `mgmt_deviû_blocked ( size , d©a ); 743  MGMT_EV_DEVICE_UNBLOCKED : 744 `mgmt_deviû_unblocked ( size , d©a ); 746  MGMT_EV_DEVICE_UNPAIRED : 747 `mgmt_deviû_uÅaœed ( size , d©a ); 749  MGMT_EV_PASSKEY_NOTIFY : 750 `mgmt_·sskey_nÙify ( size , d©a ); 752  MGMT_EV_NEW_IRK : 753 `mgmt_Ãw_œk ( size , d©a ); 755  MGMT_EV_NEW_CSRK : 756 `mgmt_Ãw_c¤k ( size , d©a ); 758  MGMT_EV_DEVICE_ADDED : 759 `mgmt_deviû_added ( size , d©a ); 761  MGMT_EV_DEVICE_REMOVED : 762 `mgmt_deviû_»moved ( size , d©a ); 764  MGMT_EV_NEW_CONN_PARAM : 765 `mgmt_Ãw_cÚn_·¿m ( size , d©a ); 767  MGMT_EV_UNCONF_INDEX_ADDED : 768 `mgmt_uncÚf_šdex_added ( size , d©a ); 770  MGMT_EV_UNCONF_INDEX_REMOVED : 771 `mgmt_uncÚf_šdex_»moved ( size , d©a ); 773  MGMT_EV_NEW_CONFIG_OPTIONS : 774 `mgmt_Ãw_cÚfig_ÝtiÚs ( size , d©a ); 777 `´štf ("* UnknowÀcÚŒÞ (cod%d†’ %d)\n", Ýcode , size ); 778 `·ck‘_hexdump ( d©a , size ); 781 } } 783  $d©a_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 785  cÚŒÞ_d©a * d©a = u£r_d©a ; 786  cÚŒÞ [32]; 787  mgmt_hdr hdr ; 788  msghdr msg ; 789  iovec iov [2]; 791 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 792 `mašloÝ_»move_fd ( d©a -> fd ); 796 iov [0]. iov_ba£ = & hdr ; 797 iov [0]. iov_Ën = MGMT_HDR_SIZE ; 798 iov [1]. iov_ba£ = d©a -> buf ; 799 iov [1]. iov_Ën = ( d©a -> buf ); 801 `mem£t (& msg , 0, (msg)); 802 msg . msg_iov = iov ; 803 msg . msg_iovËn = 2; 804 msg . msg_cÚŒÞ = cÚŒÞ ; 805 msg . msg_cÚŒÞËn = ( cÚŒÞ ); 808  cmsghdr * cmsg ; 809  timev® * tv = NULL ; 810  timev® ùv ; 811 ušt16_t Ýcode , šdex , pkŽ’ ; 812 ssize_t Ën ; 814 Ën = `»cvmsg ( d©a -> fd , & msg , MSG_DONTWAIT ); 815 ià( Ën < 0) 818 ià( Ën < MGMT_HDR_SIZE ) 821  cmsg = `CMSG_FIRSTHDR (& msg ); cmsg !ð NULL ; 822 cmsg = `CMSG_NXTHDR (& msg , cmsg)) { 823 ià( cmsg -> cmsg_Ëv– !ð SOL_SOCKET ) 826 ià( cmsg -> cmsg_ty³ =ð SCM_TIMESTAMP ) { 827 `memýy (& ùv , `CMSG_DATA ( cmsg ), (ctv)); 828 tv = & ùv ; 832 Ýcode = `Ë16_to_ýu ( hdr .opcode); 833 šdex = `Ë16_to_ýu ( hdr .index); 834 pkŽ’ = `Ë16_to_ýu ( hdr . Ën ); 836  d©a -> chªÃl ) { 837  HCI_CHANNEL_CONTROL : 838 `·ck‘_cÚŒÞ ( tv , šdex , Ýcode , d©a -> buf , pkŽ’ ); 840  HCI_CHANNEL_MONITOR : 841 `bt¢oÝ_wr™e_hci ( bt¢oÝ_fže , tv , šdex , Ýcode , 842 d©a -> buf , pkŽ’ ); 843 `–lisys_šjeù_hci ( tv , šdex , Ýcode , 844 d©a -> buf , pkŽ’ ); 845 `·ck‘_mÚ™Ü ( tv , šdex , Ýcode , d©a -> buf , pkŽ’ ); 849 } } 851  $Ý’_sock‘ ( ušt16_t chªÃl ) 853  sockaddr_hci addr ; 854  fd , Ýt = 1; 856 fd = `sock‘ ( AF_BLUETOOTH , SOCK_RAW | SOCK_CLOEXEC , BTPROTO_HCI ); 857 ià( fd < 0) { 858 `³¼Ü ("Failedo open channel"); 862 `mem£t (& addr , 0, (addr)); 863 addr . hci_çmžy = AF_BLUETOOTH ; 864 addr . hci_dev = HCI_DEV_NONE ; 865 addr . hci_chªÃl = chªÃl ; 867 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 868 ià( ”ºo =ð EINVAL ) { 870 hcidump_çÎback = Œue ; 871 `þo£ ( fd ); 874 `³¼Ü ("Failedo bind channel"); 875 `þo£ ( fd ); 879 ià( `£tsockÝt ( fd , SOL_SOCKET , SO_TIMESTAMP , & Ýt , (opt)) < 0) { 880 `³¼Ü ("Failedoƒnableimestamps"); 881 `þo£ ( fd ); 885  fd ; 886 } } 888  $Ý’_chªÃl ( ušt16_t chªÃl ) 890  cÚŒÞ_d©a * d©a ; 892 d©a = `m®loc ((*data)); 893 ià(! d©a ) 896 `mem£t ( d©a , 0, (*data)); 897 d©a -> chªÃl = channel; 899 d©a -> fd = `Ý’_sock‘ ( chªÃl ); 900 ià( d©a -> fd < 0) { 901 `ä“ ( d©a ); 905 `mašloÝ_add_fd ( d©a -> fd , EPOLLIN , d©a_ÿÎback , d©a, ä“_d©a ); 908 } } 910  $þ›Á_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 912  cÚŒÞ_d©a * d©a = u£r_d©a ; 913 ssize_t Ën ; 915 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 916 `mašloÝ_»move_fd ( d©a -> fd ); 920 Ën = `»cv ( d©a -> fd , d©a-> buf + d©a-> off£t , 921 ( d©a -> buf è- d©a-> off£t , MSG_DONTWAIT ); 922 ià( Ën < 0) 925 d©a -> off£t +ð Ën ; 927 ià( d©a -> off£t > MGMT_HDR_SIZE ) { 928  mgmt_hdr * hdr = (mgmt_hd¸*è d©a -> buf ; 929 ušt16_t pkŽ’ = `Ë16_to_ýu ( hdr -> Ën ); 931 ià( d©a -> off£t > pkŽ’ + MGMT_HDR_SIZE ) { 932 ušt16_t Ýcode = `Ë16_to_ýu ( hdr ->opcode); 933 ušt16_t šdex = `Ë16_to_ýu ( hdr ->index); 935 `·ck‘_mÚ™Ü ( NULL , šdex , Ýcode , 936 d©a -> buf + MGMT_HDR_SIZE , pkŽ’ ); 938 d©a -> off£t -ð pkŽ’ + MGMT_HDR_SIZE ; 940 ià( d©a -> off£t > 0) 941 `memmove ( d©a -> buf , data->buf + 942 MGMT_HDR_SIZE + pkŽ’ , d©a -> off£t ); 945 } } 947  $£rv”_acû±_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 949  cÚŒÞ_d©a * d©a ; 950  sockaddr_un addr ; 951 sockËn_t Ën ; 952  nfd ; 954 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 955 `mašloÝ_»move_fd ( fd ); 959 `mem£t (& addr , 0, (addr)); 960 Ën = ( addr ); 962 nfd = `acû± ( fd , ( sockaddr *è& addr , & Ën ); 963 ià( nfd < 0) { 964 `³¼Ü ("Failedo‡ccept client socket"); 968 `´štf ("--- New monitor connection ---\n"); 970 d©a = `m®loc ((*data)); 971 ià(! d©a ) { 972 `þo£ ( nfd ); 976 `mem£t ( d©a , 0, (*data)); 977 d©a -> chªÃl = HCI_CHANNEL_MONITOR ; 978 d©a -> fd = nfd ; 980 `mašloÝ_add_fd ( d©a -> fd , EPOLLIN , þ›Á_ÿÎback , d©a, ä“_d©a ); 981 } } 983  g£rv”_fd = -1; 985  $cÚŒÞ_£rv” (cÚ¡ * ·th ) 987  sockaddr_un addr ; 988  fd ; 990 ià( £rv”_fd >= 0) 993 `uÆšk ( ·th ); 995 fd = `sock‘ ( PF_UNIX , SOCK_STREAM | SOCK_CLOEXEC , 0); 996 ià( fd < 0) { 997 `³¼Ü ("Failedo open server socket"); 1001 `mem£t (& addr , 0, (addr)); 1002 addr . sun_çmžy = AF_UNIX ; 1003 `¡rýy ( addr . sun_·th , ·th ); 1005 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 1006 `³¼Ü ("Failedo bind server socket"); 1007 `þo£ ( fd ); 1011 ià( `li¡’ ( fd , 5) < 0) { 1012 `³¼Ü ("Failedo†isten server socket"); 1013 `þo£ ( fd ); 1017 ià( `mašloÝ_add_fd ( fd , EPOLLIN , £rv”_acû±_ÿÎback , 1018 NULL , NULL) < 0) { 1019 `þo£ ( fd ); 1023 £rv”_fd = fd ; 1024 } } 1026 boÞ $cÚŒÞ_wr™” (cÚ¡ * ·th ) 1028 bt¢oÝ_fže = `bt¢oÝ_ü—‹ ( ·th , BTSNOOP_TYPE_MONITOR ); 1030  !! bt¢oÝ_fže ; 1031 } } 1033  $cÚŒÞ_»ad” (cÚ¡ * ·th ) 1035  buf [ BTSNOOP_MAX_PACKET_SIZE ]; 1036 ušt16_t pkŽ’ ; 1037 ušt32_t ty³ ; 1038  timev® tv ; 1040 bt¢oÝ_fže = `bt¢oÝ_Ý’ ( ·th , BTSNOOP_FLAG_PKLG_SUPPORT ); 1041 ià(! bt¢oÝ_fže ) 1044 ty³ = `bt¢oÝ_g‘_ty³ ( bt¢oÝ_fže ); 1046  ty³ ) { 1047  BTSNOOP_TYPE_HCI : 1048  BTSNOOP_TYPE_UART : 1049  BTSNOOP_TYPE_SIMULATOR : 1050 `·ck‘_d–_fž‹r ( PACKET_FILTER_SHOW_INDEX ); 1053  BTSNOOP_TYPE_MONITOR : 1054 `·ck‘_add_fž‹r ( PACKET_FILTER_SHOW_INDEX ); 1058 `Ý’_·g” (); 1060  ty³ ) { 1061  BTSNOOP_TYPE_HCI : 1062  BTSNOOP_TYPE_UART : 1063  BTSNOOP_TYPE_MONITOR : 1065 ušt16_t šdex , Ýcode ; 1067 ià(! `bt¢oÝ_»ad_hci ( bt¢oÝ_fže , & tv , & šdex , 1068 & Ýcode , buf , & pkŽ’ )) 1071 ià( Ýcode == 0xffff) 1074 `·ck‘_mÚ™Ü (& tv , šdex , Ýcode , buf , pkŽ’ ); 1075 `–lisys_šjeù_hci (& tv , šdex , Ýcode , buf , pkŽ’ ); 1079  BTSNOOP_TYPE_SIMULATOR : 1081 ušt16_t äequ’cy ; 1083 ià(! `bt¢oÝ_»ad_phy ( bt¢oÝ_fže , & tv , & äequ’cy , 1084 buf , & pkŽ’ )) 1087 `·ck‘_simuÏtÜ (& tv , äequ’cy , buf , pkŽ’ ); 1092 `þo£_·g” (); 1094 `bt¢oÝ_uÄef ( bt¢oÝ_fže ); 1095 } } 1097  $cÚŒÞ_Œacšg () 1099 `·ck‘_add_fž‹r ( PACKET_FILTER_SHOW_INDEX ); 1101 ià( £rv”_fd >= 0) 1104 ià( `Ý’_chªÃl ( HCI_CHANNEL_MONITOR ) < 0) { 1105 ià(! hcidump_çÎback ) 1107 ià( `hcidump_Œacšg () < 0) 1112 `Ý’_chªÃl ( HCI_CHANNEL_CONTROL ); 1115 } } @monitor/control.h 25  ~<¡dšt.h > 27 boÞ cÚŒÞ_wr™” (cÚ¡ * ·th ); 28  cÚŒÞ_»ad” (cÚ¡ * ·th ); 29  cÚŒÞ_£rv” (cÚ¡ * ·th ); 30  cÚŒÞ_Œacšg (); 32  cÚŒÞ_mes§ge ( ušt16_t Ýcode , cÚ¡ * d©a , ušt16_ˆ size ); @monitor/crc.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~"üc.h " 31 ušt32_t $üc24_b™_»v”£ ( ušt32_t v®ue ) 33 ušt32_t »suÉ = 0; 34 ušt8_t i ; 36  i = 0; i < 24; i++) 37 »suÉ |ð(( v®ue >> i ) & 1) << (23 - i); 39  »suÉ ; 40 } } 42 ušt32_t $üc24_ÿlcuÏ‹ ( ušt32_t ´e£t , cÚ¡ ušt8_t * d©a , ušt8_ˆ Ën ) 44 ušt32_t ¡©e = ´e£t ; 45 ušt8_t i ; 47  i = 0; i < Ën ; i++) { 48 ušt8_t n , cur = d©a [ i ]; 50  n = 0;‚ < 8;‚++) { 51  Ãxt_b™ = ( ¡©e ^ cur ) & 1; 53 cur >>= 1; 54 ¡©e >>= 1; 55 ià( Ãxt_b™ ) { 56 ¡©e |= 1 << 23; 57 ¡©e ^= 0x5a6000; 62  ¡©e ; 63 } } 65 ušt32_t $üc24_»v”£ ( ušt32_t üc , cÚ¡ ušt8_t * d©a , ušt8_ˆ Ën ) 67 ušt32_t ¡©e = üc ; 68 ušt8_t i ; 70  i = 0; i < Ën ; i++) { 71 ušt8_t n , cur = d©a [ Ën - i - 1]; 73  n = 0;‚ < 8;‚++) { 74  tÝ_b™ = ¡©e >> 23; 76 ¡©e = (state << 1) & 0xffffff; 77 ¡©e |ð tÝ_b™ ^ (( cur >> (7 - n )) & 1); 78 ià( tÝ_b™ ) 79 ¡©e ^= 0xb4c000; 83  ¡©e ; 84 } } @monitor/crc.h 25  ~<¡dšt.h > 27 ušt32_t üc24_b™_»v”£ (ušt32_ˆ v®ue ); 29 ušt32_t üc24_ÿlcuÏ‹ (ušt32_ˆ ´e£t , cÚ¡ ušt8_t * d©a , ušt8_ˆ Ën ); 30 ušt32_t üc24_»v”£ (ušt32_ˆ üc , cÚ¡ ušt8_t * d©a , ušt8_ˆ Ën ); @monitor/display.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 34  ~ 35  ~ 36  ~ 37  ~ 38  ~<‹rmios.h > 40  ~"di¥Ïy.h " 42  pid_t g·g”_pid = 0; 44 boÞ $u£_cÞÜ () 46  ÿched_u£_cÞÜ = -1; 48 ià( `__bužtš_ex³ù (!!( ÿched_u£_cÞÜ < 0), 0)) 49 ÿched_u£_cÞÜ = `i§‰y ( STDOUT_FILENO è> 0 || ·g”_pid > 0; 51  ÿched_u£_cÞÜ ; 52 } } 54  $num_cÞumns () 56  ÿched_num_cÞumns = -1; 58 ià( `__bužtš_ex³ù (!!( ÿched_num_cÞumns < 0), 0)) { 59  wšsize ws ; 61 ià( `ioùl ( STDOUT_FILENO , TIOCGWINSZ , & ws ) < 0 || 62 ws . ws_cÞ == 0) 63 ÿched_num_cÞumns = FALLBACK_TERMINAL_WIDTH ; 65 ÿched_num_cÞumns = ws . ws_cÞ ; 68  ÿched_num_cÞumns ; 69 } } 71  $þo£_pe ( p []) 73 ià( p [0] >= 0) 74 `þo£ ( p [0]); 75 ià( p [1] >= 0) 76 `þo£ ( p [1]); 77 } } 79  $wa™_fÜ_‹rmš©e ( pid_t pid ) 81 sigšfo_t dummy ; 84 `mem£t (& dummy , 0, (dummy)); 86 ià( `wa™id ( P_PID , pid , & dummy , WEXITED ) < 0) { 87 ià( ”ºo =ð EINTR ) 94 } } 96  $Ý’_·g” () 98 cÚ¡ * ·g” ; 99 pid_t ·»Á_pid ; 100  fd [2]; 102 ià( ·g”_pid > 0) 105 ·g” = `g‘’v ("PAGER"); 106 ià( ·g” ) { 107 ià(!* ·g” || `¡rcmp (pager, "cat") == 0) 111 ià(!( `i§‰y ( STDOUT_FILENO ) > 0)) 114 `num_cÞumns (); 116 ià( `pe ( fd ) < 0) { 117 `³¼Ü ("Failedo create…ager…ipe"); 121 ·»Á_pid = `g‘pid (); 123 ·g”_pid = `fÜk (); 124 ià( ·g”_pid < 0) { 125 `³¼Ü ("Failedo fork…ager"); 126 `þo£_pe ( fd ); 130 ià( ·g”_pid == 0) { 131 `dup2 ( fd [0], STDIN_FILENO ); 132 `þo£_pe ( fd ); 134 `£‹nv ("LESS", "FRSX", 0); 136 ià( `´ùl ( PR_SET_PDEATHSIG , SIGTERM ) < 0) 137 `_ex™ ( EXIT_FAILURE ); 139 ià( `g‘µid (è!ð ·»Á_pid ) 140 `_ex™ ( EXIT_SUCCESS ); 142 ià( ·g” ) { 143 `exeþp ( ·g” ,…ag”, NULL ); 144 `exeþ ("/bš/sh", "sh", "-c", ·g” , NULL ); 147 `exeþp ("·g”", "·g”", NULL ); 148 `exeþp ("Ëss", "Ëss", NULL ); 149 `exeþp ("mÜe", "mÜe", NULL ); 151 `_ex™ ( EXIT_FAILURE ); 154 ià( `dup2 ( fd [1], STDOUT_FILENO ) < 0) { 155 `³¼Ü ("Failedo duplicate…ager…ipe"); 159 `þo£_pe ( fd ); 160 } } 162  $þo£_·g” () 164 ià( ·g”_pid <= 0) 167 `fþo£ ( ¡dout ); 168 `kžl ( ·g”_pid , SIGCONT ); 169 `wa™_fÜ_‹rmš©e ( ·g”_pid ); 170 ·g”_pid = 0; 171 } } @monitor/display.h 25  ~<¡dboÞ.h > 27 boÞ u£_cÞÜ (); 29  #COLOR_OFF "\x1B[0m" ) 30  #COLOR_BLACK "\x1B[0;30m" ) 31  #COLOR_RED "\x1B[0;31m" ) 32  #COLOR_GREEN "\x1B[0;32m" ) 33  #COLOR_YELLOW "\x1B[0;33m" ) 34  #COLOR_BLUE "\x1B[0;34m" ) 35  #COLOR_MAGENTA "\x1B[0;35m" ) 36  #COLOR_CYAN "\x1B[0;36m" ) 37  #COLOR_WHITE "\x1B[0;37m" ) 38  #COLOR_WHITE_BG "\x1B[0;47m" ) 39  #COLOR_HIGHLIGHT "\x1B[1;39m" ) 41  #COLOR_ERROR "\x1B[1;31m" ) 43  #FALLBACK_TERMINAL_WIDTH 80 ) 45  #´št_šd’t ( šd’t , cÞÜ1 , ´efix , t™Ë , cÞÜ2 , fmt , ¬gs ...) \ 47 `´štf ("%*c%s%s%s%s" fmt "%s\n", ( šd’t ), ' ', \ 48 `u£_cÞÜ (è? ( cÞÜ1 è: "", ´efix , t™Ë , \ 49 `u£_cÞÜ (è? ( cÞÜ2 è: "", ## ¬gs , \ 50 `u£_cÞÜ (è? COLOR_OFF : ""); \ 51 } 0) ) 53  #´št_‹xt ( cÞÜ , fmt , ¬gs ...) \ 54 `´št_šd’t (8, COLOR_OFF , "", "", cÞÜ , fmt , ## ¬gs ) ) 56  #´št_f›ld ( fmt , ¬gs ...) \ 57 `´št_šd’t (8, COLOR_OFF , "", "", COLOR_OFF, fmt , ## ¬gs ) ) 59  num_cÞumns (); 61  Ý’_·g” (); 62  þo£_·g” (); @monitor/ellisys.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~ 31  ~<¡ršg.h > 32  ~ 33  ~ 34  ~ 35  ~ 37  ~<Ãtdb.h > 38  ~<¬·/š‘.h > 40  ~"¤c/sh¬ed/bt¢oÝ.h " 41  ~"–lisys.h " 43  g–lisys_fd = -1; 44  ušt16_t g–lisys_šdex = 0xffff; 46  $–lisys_’abË (cÚ¡ * £rv” , ušt16_t pÜt ) 48  sockaddr_š addr ; 49  fd ; 51 ià( –lisys_fd >= 0) { 52 `årštf ( ¡d”r , "Ellisys injection‡lreadyƒnabled\n"); 56 fd = `sock‘ ( PF_INET , SOCK_DGRAM | SOCK_CLOEXEC , 0); 57 ià( fd < 0) { 58 `³¼Ü ("Failedo open UDP injection socket"); 62 `mem£t (& addr , 0, (addr)); 63 addr . sš_çmžy = AF_INET ; 64 addr . sš_addr . s_addr = `š‘_addr ( £rv” ); 65 addr . sš_pÜt = `htÚs ( pÜt ); 67 ià( `cÚÃù ( fd , ( sockaddr *è& addr , (addr)) < 0) { 68 `³¼Ü ("Failedo connect UDP injection socket"); 69 `þo£ ( fd ); 73 –lisys_fd = fd ; 74 } } 76  $–lisys_šjeù_hci ( timev® * tv , ušt16_t šdex , ušt16_ˆ Ýcode , 77 cÚ¡ * d©a , ušt16_t size ) 79 ušt8_t msg [] = { 92  n£c ; 93 time_t t ; 94  tm m; 95  iovec iov [2]; 96  iovút ; 98 ià(! tv ) 101 ià( –lisys_fd < 0) 104 ià( –lisys_šdex == 0xffff) 105 –lisys_šdex = šdex ; 107 ià( šdex !ð –lisys_šdex ) 110 t = tv -> tv_£c ; 111 `loÿÉime_r (& t , & tm ); 113 n£c = (( tm . tm_£c + (tm. tm_mš * 60) + 114 ( tm . tm_hour * 3600)è* 1000000È+ tv -> tv_u£c ) * 1000l; 116 msg [4] = (1900 + tm . tm_y—r ) & 0xff; 117 msg [5] = (1900 + tm . tm_y—r ) >> 8; 118 msg [6] = ( tm . tm_mÚ + 1) & 0xff; 119 msg [7] = tm . tm_mday & 0xff; 120 msg [8] = ( n£c & 0x0000000000ffl); 121 msg [9] = ( n£c & 0x00000000ff00l) >> 8; 122 msg [10] = ( n£c & 0x000000ff0000l) >> 16; 123 msg [11] = ( n£c & 0x0000ff000000l) >> 24; 124 msg [12] = ( n£c & 0x00ff00000000l) >> 32; 125 msg [13] = ( n£c & 0xff0000000000l) >> 40; 127  Ýcode ) { 128  BTSNOOP_OPCODE_COMMAND_PKT : 129 msg [20] = 0x01; 131  BTSNOOP_OPCODE_EVENT_PKT : 132 msg [20] = 0x84; 134  BTSNOOP_OPCODE_ACL_TX_PKT : 135 msg [20] = 0x02; 137  BTSNOOP_OPCODE_ACL_RX_PKT : 138 msg [20] = 0x82; 140  BTSNOOP_OPCODE_SCO_TX_PKT : 141 msg [20] = 0x03; 143  BTSNOOP_OPCODE_SCO_RX_PKT : 144 msg [20] = 0x83; 150 iov [0]. iov_ba£ = msg ; 151 iov [0]. iov_Ën = ( msg ); 153 ià( size > 0) { 154 iov [1]. iov_ba£ = (*è d©a ; 155 iov [1]. iov_Ën = size ; 156 iovút = 2; 158 iovút = 1; 160 ià( `wr™ev ( –lisys_fd , iov , iovút ) < 0) 161 `³¼Ü ("Failedo send Ellisys injection…acket"); 162 } } @monitor/ellisys.h 25  ~<¡dšt.h > 27  –lisys_’abË (cÚ¡ * £rv” , ušt16_t pÜt ); 29  –lisys_šjeù_hci ( timev® * tv , ušt16_t šdex , ušt16_ˆ Ýcode , 30 cÚ¡ * d©a , ušt16_t size ); @monitor/hcidump.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 34  ~ 35  ~ 37  ~ 38  ~ 39  ~ 41  ~"mašloÝ.h " 42  ~"·ck‘.h " 43  ~"hcidump.h " 45  shcidump_d©a { 46 ušt16_t mšdex ; 47  mfd ; 50  $ä“_d©a (* u£r_d©a ) 52  hcidump_d©a * d©a = u£r_d©a ; 54 `þo£ ( d©a -> fd ); 56 `ä“ ( d©a ); 57 } } 59  $Ý’_hci_dev ( ušt16_t šdex ) 61  sockaddr_hci addr ; 62  hci_fž‹r æt ; 63  fd , Ýt = 1; 65 fd = `sock‘ ( AF_BLUETOOTH , SOCK_RAW | SOCK_CLOEXEC , BTPROTO_HCI ); 66 ià( fd < 0) { 67 `³¼Ü ("Failedo open channel"); 72 `hci_fž‹r_þ—r (& æt ); 73 `hci_fž‹r_®l_±y³s (& æt ); 74 `hci_fž‹r_®l_ev’ts (& æt ); 76 ià( `£tsockÝt ( fd , SOL_HCI , HCI_FILTER , & æt , (flt)) < 0) { 77 `³¼Ü ("Failedo set HCI filter"); 78 `þo£ ( fd ); 82 ià( `£tsockÝt ( fd , SOL_HCI , HCI_DATA_DIR , & Ýt , (opt)) < 0) { 83 `³¼Ü ("Failedoƒnable HCI data direction info"); 84 `þo£ ( fd ); 88 ià( `£tsockÝt ( fd , SOL_HCI , HCI_TIME_STAMP , & Ýt , (opt)) < 0) { 89 `³¼Ü ("Failedoƒnable HCIime stamps"); 90 `þo£ ( fd ); 94 `mem£t (& addr , 0, (addr)); 95 addr . hci_çmžy = AF_BLUETOOTH ; 96 addr . hci_dev = šdex ; 97 addr . hci_chªÃl = HCI_CHANNEL_RAW ; 99 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 100 `³¼Ü ("Failedo bind channel"); 101 `þo£ ( fd ); 105  fd ; 106 } } 108  $deviû_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 110  hcidump_d©a * d©a = u£r_d©a ; 111  buf [ HCI_MAX_FRAME_SIZE * 2]; 112  cÚŒÞ [64]; 113  msghdr msg ; 114  iovec iov ; 116 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 117 `mašloÝ_»move_fd ( fd ); 121 iov . iov_ba£ = buf ; 122 iov . iov_Ën = ( buf ); 124 `mem£t (& msg , 0, (msg)); 125 msg . msg_iov = & iov ; 126 msg . msg_iovËn = 1; 127 msg . msg_cÚŒÞ = cÚŒÞ ; 128 msg . msg_cÚŒÞËn = ( cÚŒÞ ); 131  cmsghdr * cmsg ; 132  timev® * tv = NULL ; 133  timev® ùv ; 134  dœ = -1; 135 ssize_t Ën ; 137 Ën = `»cvmsg ( fd , & msg , MSG_DONTWAIT ); 138 ià( Ën < 0) 141  cmsg = `CMSG_FIRSTHDR (& msg ); cmsg !ð NULL ; 142 cmsg = `CMSG_NXTHDR (& msg , cmsg)) { 143 ià( cmsg -> cmsg_Ëv– !ð SOL_HCI ) 146  cmsg -> cmsg_ty³ ) { 147  HCI_DATA_DIR : 148 `memýy (& dœ , `CMSG_DATA ( cmsg ), (dir)); 150  HCI_CMSG_TSTAMP : 151 `memýy (& ùv , `CMSG_DATA ( cmsg ), (ctv)); 152 tv = & ùv ; 157 ià( dœ < 0 || Ën < 1) 160  buf [0]) { 161  HCI_COMMAND_PKT : 162 `·ck‘_hci_commªd ( tv , d©a -> šdex , buf + 1, Ën - 1); 164  HCI_EVENT_PKT : 165 `·ck‘_hci_ev’t ( tv , d©a -> šdex , buf + 1, Ën - 1); 167  HCI_ACLDATA_PKT : 168 `·ck‘_hci_aþd©a ( tv , d©a -> šdex , !! dœ , 169 buf + 1, Ën - 1); 171  HCI_SCODATA_PKT : 172 `·ck‘_hci_scod©a ( tv , d©a -> šdex , !! dœ , 173 buf + 1, Ën - 1); 177 } } 179  $Ý’_deviû ( ušt16_t šdex ) 181  hcidump_d©a * d©a ; 183 d©a = `m®loc ((*data)); 184 ià(! d©a ) 187 `mem£t ( d©a , 0, (*data)); 188 d©a -> šdex = index; 190 d©a -> fd = `Ý’_hci_dev ( šdex ); 191 ià( d©a -> fd < 0) { 192 `ä“ ( d©a ); 196 `mašloÝ_add_fd ( d©a -> fd , EPOLLIN , deviû_ÿÎback , d©a, ä“_d©a ); 197 } } 199  $deviû_šfo ( fd , ušt16_t šdex , ušt8_t * ty³ , ušt8_ˆ* bus , 200 bdaddr_t * bdaddr , * Çme ) 202  hci_dev_šfo di ; 204 `mem£t (& di , 0, (di)); 205 di . dev_id = šdex ; 207 ià( `ioùl ( fd , HCIGETDEVINFO , (*è& di ) < 0) { 208 `³¼Ü ("Failedo get device information"); 212 * ty³ = di .type >> 4; 213 * bus = di . ty³ & 0x0f; 215 `baýy ( bdaddr , & di .bdaddr); 216 `memýy ( Çme , di .name, 8); 217 } } 219  $deviû_li¡ ( fd ,  max_dev ) 221  hci_dev_li¡_»q * dl ; 222  hci_dev_»q * dr ; 223  i ; 225 dl = `m®loc ( max_dev * (* dr ) + (*dl)); 226 ià(! dl ) { 227 `³¼Ü ("Failedo‡llocate device†ist memory"); 231 `mem£t ( dl , 0, max_dev * (* dr ) + (*dl)); 232 dl -> dev_num = max_dev ; 234 dr = dl -> dev_»q ; 236 ià( `ioùl ( fd , HCIGETDEVLIST , (*è dl ) < 0) { 237 `³¼Ü ("Failedo get device†ist"); 238  dÚe ; 241  i = 0; i < dl -> dev_num ; i++, dr ++) { 242  timev® tmp_tv , * tv = NULL ; 243 ušt8_t ty³ = 0xff, bus = 0xff; 244  ¡r [18], Çme [8] = ""; 245 bdaddr_t bdaddr ; 247 `baýy (& bdaddr , BDADDR_ANY ); 249 ià(! `g‘timeofday (& tmp_tv , NULL )) 250 tv = & tmp_tv ; 252 `deviû_šfo ( fd , dr -> dev_id , & ty³ , & bus , & bdaddr , Çme ); 253 `ba2¡r (& bdaddr , ¡r ); 254 `·ck‘_Ãw_šdex ( tv , dr -> dev_id , ¡r , ty³ , bus , Çme ); 255 `Ý’_deviû ( dr -> dev_id ); 258 dÚe : 259 `ä“ ( dl ); 260 } } 262  $Ý’_¡ack_š‹º® () 264  sockaddr_hci addr ; 265  hci_fž‹r æt ; 266  fd , Ýt = 1; 268 fd = `sock‘ ( AF_BLUETOOTH , SOCK_RAW | SOCK_CLOEXEC , BTPROTO_HCI ); 269 ià( fd < 0) { 270 `³¼Ü ("Failedo open channel"); 275 `hci_fž‹r_þ—r (& æt ); 276 `hci_fž‹r_£t_±y³ ( HCI_EVENT_PKT , & æt ); 277 `hci_fž‹r_£t_ev’t ( EVT_STACK_INTERNAL , & æt ); 279 ià( `£tsockÝt ( fd , SOL_HCI , HCI_FILTER , & æt , (flt)) < 0) { 280 `³¼Ü ("Failedo set HCI filter"); 281 `þo£ ( fd ); 285 ià( `£tsockÝt ( fd , SOL_HCI , HCI_TIME_STAMP , & Ýt , (opt)) < 0) { 286 `³¼Ü ("Failedoƒnable HCIime stamps"); 287 `þo£ ( fd ); 291 `mem£t (& addr , 0, (addr)); 292 addr . hci_çmžy = AF_BLUETOOTH ; 293 addr . hci_dev = HCI_DEV_NONE ; 294 addr . hci_chªÃl = HCI_CHANNEL_RAW ; 296 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 297 `³¼Ü ("Failedo bind channel"); 298 `þo£ ( fd ); 302 `deviû_li¡ ( fd , HCI_MAX_DEV ); 304  fd ; 305 } } 307  $¡ack_š‹º®_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 309  buf [ HCI_MAX_FRAME_SIZE ]; 310  cÚŒÞ [32]; 311  msghdr msg ; 312  iovec iov ; 313  cmsghdr * cmsg ; 314 ssize_t Ën ; 315 hci_ev’t_hdr * eh ; 316 evt_¡ack_š‹º® * si ; 317 evt_si_deviû * sd ; 318  timev® * tv = NULL ; 319  timev® ùv ; 320 ušt8_t ty³ = 0xff, bus = 0xff; 321  ¡r [18], Çme [8] = ""; 322 bdaddr_t bdaddr ; 324 `baýy (& bdaddr , BDADDR_ANY ); 326 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 327 `mašloÝ_»move_fd ( fd ); 331 iov . iov_ba£ = buf ; 332 iov . iov_Ën = ( buf ); 334 `mem£t (& msg , 0, (msg)); 335 msg . msg_iov = & iov ; 336 msg . msg_iovËn = 1; 337 msg . msg_cÚŒÞ = cÚŒÞ ; 338 msg . msg_cÚŒÞËn = ( cÚŒÞ ); 340 Ën = `»cvmsg ( fd , & msg , MSG_DONTWAIT ); 341 ià( Ën < 0) 344  cmsg = `CMSG_FIRSTHDR (& msg ); cmsg !ð NULL ; 345 cmsg = `CMSG_NXTHDR (& msg , cmsg)) { 346 ià( cmsg -> cmsg_Ëv– !ð SOL_HCI ) 349  cmsg -> cmsg_ty³ ) { 350  HCI_CMSG_TSTAMP : 351 `memýy (& ùv , `CMSG_DATA ( cmsg ), (ctv)); 352 tv = & ùv ; 357 ià( Ën < 1 + HCI_EVENT_HDR_SIZE + EVT_STACK_INTERNAL_SIZE + 358 EVT_SI_DEVICE_SIZE ) 361 ià( buf [0] !ð HCI_EVENT_PKT ) 364 eh = ( hci_ev’t_hdr *è( buf + 1); 365 ià( eh -> evt !ð EVT_STACK_INTERNAL ) 368 si = ( evt_¡ack_š‹º® *è( buf + 1 + HCI_EVENT_HDR_SIZE ); 369 ià( si -> ty³ !ð EVT_SI_DEVICE ) 372 sd = ( evt_si_deviû *è& si -> d©a ; 374  sd -> ev’t ) { 375  HCI_DEV_REG : 376 `deviû_šfo ( fd , sd -> dev_id , & ty³ , & bus , & bdaddr , Çme ); 377 `ba2¡r (& bdaddr , ¡r ); 378 `·ck‘_Ãw_šdex ( tv , sd -> dev_id , ¡r , ty³ , bus , Çme ); 379 `Ý’_deviû ( sd -> dev_id ); 381  HCI_DEV_UNREG : 382 `ba2¡r (& bdaddr , ¡r ); 383 `·ck‘_d–_šdex ( tv , sd -> dev_id , ¡r ); 386 } } 388  $hcidump_Œacšg () 390  hcidump_d©a * d©a ; 392 d©a = `m®loc ((*data)); 393 ià(! d©a ) 396 `mem£t ( d©a , 0, (*data)); 397 d©a -> šdex = HCI_DEV_NONE ; 399 d©a -> fd = `Ý’_¡ack_š‹º® (); 400 ià( d©a -> fd < 0) { 401 `ä“ ( d©a ); 405 `mašloÝ_add_fd ( d©a -> fd , EPOLLIN , ¡ack_š‹º®_ÿÎback , 406 d©a , ä“_d©a ); 409 } } @monitor/hcidump.h 25  hcidump_Œacšg (); @monitor/hwdb.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<¡ršg.h > 32  ~"hwdb.h " 34 #ifdeà HAVE_UDEV_HWDB_NEW 35  ~ 37 boÞ $hwdb_g‘_v’dÜ_mod– (cÚ¡ * mod®Ÿs , ** v’dÜ , ** mod– ) 39  udev *udev; 40  udev_hwdb * hwdb ; 41  udev_li¡_’Œy * h—d , * ’Œy ; 42 boÞ »suÉ ; 44 udev = `udev_Ãw (); 45 ià(! udev ) 46  çl£ ; 48 hwdb = `udev_hwdb_Ãw ( udev ); 49 ià(! hwdb ) { 50 »suÉ = çl£ ; 51  dÚe ; 54 * v’dÜ = NULL ; 55 * mod– = NULL ; 57 h—d = `udev_hwdb_g‘_´Ý”t›s_li¡_’Œy ( hwdb , mod®Ÿs , 0); 59 `udev_li¡_’Œy_fÜ—ch ( ’Œy , h—d ) { 60 cÚ¡ * Çme = `udev_li¡_’Œy_g‘_Çme ( ’Œy ); 62 ià(! Çme ) 65 ià(!* v’dÜ && ! `¡rcmp ( Çme , "ID_VENDOR_FROM_DATABASE")) 66 * v’dÜ = `¡rdup ( `udev_li¡_’Œy_g‘_v®ue ( ’Œy )); 67 ià(!* mod– && ! `¡rcmp ( Çme , "ID_MODEL_FROM_DATABASE")) 68 * mod– = `¡rdup ( `udev_li¡_’Œy_g‘_v®ue ( ’Œy )); 71 hwdb = `udev_hwdb_uÄef (hwdb); 73 »suÉ = Œue ; 75 dÚe : 76 udev = `udev_uÄef (udev); 78  »suÉ ; 79 } } 81 boÞ $hwdb_g‘_com·ny (cÚ¡ ušt8_t * bdaddr , ** com·ny ) 83  udev *udev; 84  udev_hwdb * hwdb ; 85  udev_li¡_’Œy * h—d , * ’Œy ; 86  mod®Ÿs [11]; 87 boÞ »suÉ ; 89 ià(! bdaddr [2] && !bdaddr[1] && !bdaddr[0]) 90  çl£ ; 92 `¥rštf ( mod®Ÿs , "OUI:%2.2X%2.2X%2.2X", 93 bdaddr [5], bdaddr[4], bdaddr[3]); 95 udev = `udev_Ãw (); 96 ià(! udev ) 97  çl£ ; 99 hwdb = `udev_hwdb_Ãw ( udev ); 100 ià(! hwdb ) { 101 »suÉ = çl£ ; 102  dÚe ; 105 * com·ny = NULL ; 107 h—d = `udev_hwdb_g‘_´Ý”t›s_li¡_’Œy ( hwdb , mod®Ÿs , 0); 109 `udev_li¡_’Œy_fÜ—ch ( ’Œy , h—d ) { 110 cÚ¡ * Çme = `udev_li¡_’Œy_g‘_Çme ( ’Œy ); 112 ià( Çme && ! `¡rcmp (name, "ID_OUI_FROM_DATABASE")) { 113 * com·ny = `¡rdup ( `udev_li¡_’Œy_g‘_v®ue ( ’Œy )); 118 hwdb = `udev_hwdb_uÄef (hwdb); 120 »suÉ = Œue ; 122 dÚe : 123 udev = `udev_uÄef (udev); 125  »suÉ ; 126 } } 128 boÞ $hwdb_g‘_v’dÜ_mod– (cÚ¡ * mod®Ÿs , ** v’dÜ , ** mod– ) 130  çl£ ; 131 } } 133 boÞ $hwdb_g‘_com·ny (cÚ¡ ušt8_t * bdaddr , ** com·ny ) 135  çl£ ; 136 } } @monitor/hwdb.h 25  ~<¡dšt.h > 26  ~<¡dboÞ.h > 28 boÞ hwdb_g‘_v’dÜ_mod– (cÚ¡ * mod®Ÿs , ** v’dÜ , ** mod– ); 29 boÞ hwdb_g‘_com·ny (cÚ¡ ušt8_t * bdaddr , ** com·ny ); @monitor/keys.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡ršg.h > 31  ~"¤c/sh¬ed/utž.h " 32  ~"¤c/sh¬ed/queue.h " 33  ~"¤c/sh¬ed/üy±o.h " 35  ~"keys.h " 37 cÚ¡ ušt8_t gem±y_key [16] = { 0x00, }; 38 cÚ¡ ušt8_t gem±y_addr [6] = { 0x00, }; 40  bt_üy±o * güy±o ; 42  sœk_d©a { 43 ušt8_t mkey [16]; 44 ušt8_t maddr [6]; 45 ušt8_t maddr_ty³ ; 48  queue * gœk_li¡ ; 50  $keys_£tup () 52 üy±o = `bt_üy±o_Ãw (); 54 œk_li¡ = `queue_Ãw (); 55 } } 57  $keys_þ—nup () 59 `bt_üy±o_uÄef ( üy±o ); 61 `queue_de¡roy ( œk_li¡ , ä“ ); 62 } } 64  $keys_upd©e_id’t™y_key (cÚ¡ ušt8_t key [16]) 66  œk_d©a * œk ; 68 œk = `queue_³ek_ž ( œk_li¡ ); 69 ià( œk && ! `memcmp (œk-> key , em±y_key , 16)) { 70 `memýy ( œk -> key , key, 16); 74 œk = `Ãw0 ( œk_d©a , 1); 75 ià( œk ) { 76 `memýy ( œk -> key , key, 16); 77 ià(! `queue_push_ž ( œk_li¡ , œk )) 78 `ä“ ( œk ); 80 } } 82  $keys_upd©e_id’t™y_addr (cÚ¡ ušt8_t addr [6], ušt8_ˆ addr_ty³ ) 84  œk_d©a * œk ; 86 œk = `queue_³ek_ž ( œk_li¡ ); 87 ià( œk && ! `memcmp (œk-> addr , em±y_addr , 6)) { 88 `memýy ( œk -> addr ,‡ddr, 6); 89 œk -> addr_ty³ =‡ddr_type; 93 œk = `Ãw0 ( œk_d©a , 1); 94 ià( œk ) { 95 `memýy ( œk -> addr ,‡ddr, 6); 96 œk -> addr_ty³ =‡ddr_type; 97 ià(! `queue_push_ž ( œk_li¡ , œk )) 98 `ä“ ( œk ); 100 } } 102  boÞ $m©ch_»sÞve_œk (cÚ¡ * d©a , cÚ¡ * m©ch_d©a ) 104 cÚ¡  œk_d©a * œk = d©a ; 105 cÚ¡ ušt8_t * addr = m©ch_d©a ; 106 ušt8_t loÿl_hash [3]; 108 `bt_üy±o_ah ( üy±o , œk -> key , addr + 3, loÿl_hash ); 110  ! `memcmp ( addr , loÿl_hash , 3); 111 } } 113 boÞ $keys_»sÞve_id’t™y (cÚ¡ ušt8_t addr [6], ušt8_ˆ id’t [6], 114 ušt8_t * id’t_ty³ ) 116  œk_d©a * œk ; 118 œk = `queue_fšd ( œk_li¡ , m©ch_»sÞve_œk , addr ); 120 ià( œk ) { 121 `memýy ( id’t , œk -> addr , 6); 122 * id’t_ty³ = œk -> addr_ty³ ; 123  Œue ; 126  çl£ ; 127 } } @monitor/keys.h 25  ~<¡dšt.h > 26  ~<¡dboÞ.h > 28  keys_£tup (); 29  keys_þ—nup (); 31  keys_upd©e_id’t™y_key (cÚ¡ ušt8_t key [16]); 32  keys_upd©e_id’t™y_addr (cÚ¡ ušt8_t addr [6], ušt8_ˆ addr_ty³ ); 34 boÞ keys_»sÞve_id’t™y (cÚ¡ ušt8_t addr [6], ušt8_ˆ id’t [6], 35 ušt8_t * id’t_ty³ ); @monitor/l2cap.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<¡dlib.h > 31  ~<¡ršg.h > 32  ~<š‰y³s.h > 34  ~ 36  ~"¤c/sh¬ed/utž.h " 37  ~"bt.h " 38  ~"·ck‘.h " 39  ~"di¥Ïy.h " 40  ~"l2ÿp.h " 41  ~"uuid.h " 42  ~"keys.h " 43  ~"sdp.h " 44  ~"avùp.h " 45  ~"rfcomm.h " 47  #MAX_CHAN 64 ) 49  schª_d©a { 50 ušt16_t mšdex ; 51 ušt16_t mhªdË ; 52 ušt16_t mscid ; 53 ušt16_t mdcid ; 54 ušt16_t mpsm ; 55 ušt8_t mù¾id ; 56 ušt8_t mmode ; 59  chª_d©a gchª_li¡ [ MAX_CHAN ]; 61  $assign_scid (cÚ¡  l2ÿp_äame * äame , 62 ušt16_t scid , ušt16_ˆ psm , ušt8_t ù¾id ) 64  i , n = -1; 66  i = 0; i < MAX_CHAN ; i++) { 67 ià( n < 0 && chª_li¡ [ i ]. hªdË == 0x0000) 68 n = i ; 70 ià( chª_li¡ [ i ]. šdex !ð äame ->index) 73 ià( chª_li¡ [ i ]. hªdË !ð äame ->handle) 76 ià( äame -> š ) { 77 ià( chª_li¡ [ i ]. dcid =ð scid ) { 78 n = i ; 82 ià( chª_li¡ [ i ]. scid == scid) { 83 n = i ; 89 ià( n < 0) 92 `mem£t (& chª_li¡ [ n ], 0, (chan_list[n])); 93 chª_li¡ [ n ]. šdex = äame ->index; 94 chª_li¡ [ n ]. hªdË = äame ->handle; 96 ià( äame -> š ) 97 chª_li¡ [ n ]. dcid = scid ; 99 chª_li¡ [ n ]. scid = scid; 101 chª_li¡ [ n ]. psm =…sm; 102 chª_li¡ [ n ]. ù¾id = ctrlid; 103 chª_li¡ [ n ]. mode = 0; 104 } } 106  $»Ëa£_scid (cÚ¡  l2ÿp_äame * äame , ušt16_t scid ) 108  i ; 110  i = 0; i < MAX_CHAN ; i++) { 111 ià( chª_li¡ [ i ]. šdex !ð äame ->index) 114 ià( chª_li¡ [ i ]. hªdË !ð äame ->handle) 117 ià( äame -> š ) { 118 ià( chª_li¡ [ i ]. scid == scid) { 119 chª_li¡ [ i ]. hªdË = 0; 123 ià( chª_li¡ [ i ]. dcid =ð scid ) { 124 chª_li¡ [ i ]. hªdË = 0; 129 } } 131  $assign_dcid (cÚ¡  l2ÿp_äame * äame , 132 ušt16_t dcid , ušt16_ˆ scid ) 134  i ; 136  i = 0; i < MAX_CHAN ; i++) { 137 ià( chª_li¡ [ i ]. šdex !ð äame ->index) 140 ià( chª_li¡ [ i ]. hªdË !ð äame ->handle) 143 ià( äame -> š ) { 144 ià( chª_li¡ [ i ]. scid == scid) { 145 chª_li¡ [ i ]. dcid = dcid; 149 ià( chª_li¡ [ i ]. dcid =ð scid ) { 150 chª_li¡ [ i ]. scid = dcid ; 155 } } 157  $assign_mode (cÚ¡  l2ÿp_äame * äame , 158 ušt8_t mode , ušt16_t dcid ) 160  i ; 162  i = 0; i < MAX_CHAN ; i++) { 163 ià( chª_li¡ [ i ]. šdex !ð äame ->index) 166 ià( chª_li¡ [ i ]. hªdË !ð äame ->handle) 169 ià( äame -> š ) { 170 ià( chª_li¡ [ i ]. scid =ð dcid ) { 171 chª_li¡ [ i ]. mode = mode; 175 ià( chª_li¡ [ i ]. dcid == dcid) { 176 chª_li¡ [ i ]. mode = mode; 181 } } 183  ušt16_t $g‘_psm (cÚ¡  l2ÿp_äame * äame ) 185  i ; 187  i = 0; i < MAX_CHAN ; i++) { 188 ià( chª_li¡ [ i ]. šdex !ð äame ->index && 189 chª_li¡ [ i ]. ù¾id == 0) 192 ià( chª_li¡ [ i ]. hªdË !ð äame ->handle && 193 chª_li¡ [ i ]. ù¾id !ð äame -> šdex ) 196 ià( äame -> š ) { 197 ià( chª_li¡ [ i ]. scid =ð äame -> cid ) 198  chª_li¡ [ i ]. psm ; 200 ià( chª_li¡ [ i ]. dcid =ð äame -> cid ) 201  chª_li¡ [ i ]. psm ; 206 } } 208  ušt8_t $g‘_mode (cÚ¡  l2ÿp_äame * äame ) 210  i ; 212  i = 0; i < MAX_CHAN ; i++) { 213 ià( chª_li¡ [ i ]. šdex !ð äame ->index && 214 chª_li¡ [ i ]. ù¾id == 0) 217 ià( chª_li¡ [ i ]. hªdË !ð äame ->handle && 218 chª_li¡ [ i ]. ù¾id !ð äame -> šdex ) 221 ià( äame -> š ) { 222 ià( chª_li¡ [ i ]. scid =ð äame -> cid ) 223  chª_li¡ [ i ]. mode ; 225 ià( chª_li¡ [ i ]. dcid =ð äame -> cid ) 226  chª_li¡ [ i ]. mode ; 231 } } 233  ušt16_t $g‘_chª (cÚ¡  l2ÿp_äame * äame ) 235  i ; 237  i = 0; i < MAX_CHAN ; i++) { 238 ià( chª_li¡ [ i ]. šdex !ð äame ->index && 239 chª_li¡ [ i ]. ù¾id == 0) 242 ià( chª_li¡ [ i ]. hªdË !ð äame ->handle && 243 chª_li¡ [ i ]. ù¾id !ð äame -> šdex ) 246 ià( äame -> š ) { 247 ià( chª_li¡ [ i ]. scid =ð äame -> cid ) 248  i ; 250 ià( chª_li¡ [ i ]. dcid =ð äame -> cid ) 251  i ; 256 } } 258  #MAX_INDEX 16 ) 260  sšdex_d©a { 261 * mäag_buf ; 262 ušt16_t mäag_pos ; 263 ušt16_t mäag_Ën ; 264 ušt16_t mäag_cid ; 267  šdex_d©a gšdex_li¡ [ MAX_INDEX ][2]; 269  $þ—r_äagm’t_bufãr ( ušt16_t šdex , boÞ š ) 271 `ä“ ( šdex_li¡ [ šdex ][ š ]. äag_buf ); 272 šdex_li¡ [ šdex ][ š ]. äag_buf = NULL ; 273 šdex_li¡ [ šdex ][ š ]. äag_pos = 0; 274 šdex_li¡ [ šdex ][ š ]. äag_Ën = 0; 275 } } 277  $´št_psm ( ušt16_t psm ) 279 `´št_f›ld ("PSM: %d (0x%4.4x)", `Ë16_to_ýu ( psm ),†e16_to_cpu(psm)); 280 } } 282  $´št_cid (cÚ¡ * ty³ , ušt16_t cid ) 284 `´št_f›ld ("% CID: %d", ty³ , `Ë16_to_ýu ( cid )); 285 } } 287  $´št_»jeù_»asÚ ( ušt16_t »asÚ ) 289 cÚ¡ * ¡r ; 291  `Ë16_to_ýu ( »asÚ )) { 293 ¡r = "Command‚ot understood"; 296 ¡r = "Signaling MTUƒxceeded"; 299 ¡r = "Invalid CID in„equest"; 302 ¡r = "Reserved"; 306 `´št_f›ld ("R—sÚ: % (0x%4.4x)", ¡r , `Ë16_to_ýu ( »asÚ )); 307 } } 309  $´št_cÚn_»suÉ ( ušt16_t »suÉ ) 311 cÚ¡ * ¡r ; 313  `Ë16_to_ýu ( »suÉ )) { 315 ¡r = "Connection successful"; 318 ¡r = "Connection…ending"; 321 ¡r = "Connection„efused - PSM‚ot supported"; 324 ¡r = "Connection„efused - security block"; 327 ¡r = "Connection„efused -‚o„esources‡vailable"; 330 ¡r = "Insufficient Authentication"; 333 ¡r = "Insufficient Authorization"; 336 ¡r = "Reserved"; 340 `´št_f›ld ("ResuÉ: % (0x%4.4x)", ¡r , `Ë16_to_ýu ( »suÉ )); 341 } } 343  $´št_cÚn_¡©us ( ušt16_t ¡©us ) 345 cÚ¡ * ¡r ; 347  `Ë16_to_ýu ( ¡©us )) { 349 ¡r = "No further information‡vailable"; 352 ¡r = "Authentication…ending"; 355 ¡r = "Authorization…ending"; 358 ¡r = "Reserved"; 362 `´št_f›ld ("Stus: % (0x%4.4x)", ¡r , `Ë16_to_ýu ( ¡©us )); 363 } } 365  $´št_cÚfig_æags ( ušt16_t æags ) 367 cÚ¡ * ¡r ; 369 ià( `Ë16_to_ýu ( æags ) & 0x0001) 370 ¡r = " (continuation)"; 372 ¡r = ""; 374 `´št_f›ld ("FÏgs: 0x%4.4x%s", `Ë16_to_ýu ( æags ), ¡r ); 375 } } 377  $´št_cÚfig_»suÉ ( ušt16_t »suÉ ) 379 cÚ¡ * ¡r ; 381  `Ë16_to_ýu ( »suÉ )) { 383 ¡r = "Success"; 386 ¡r = "Failure - unacceptable…arameters"; 389 ¡r = "Failure -„ejected"; 392 ¡r = "Failure - unknown options"; 395 ¡r = "Pending"; 398 ¡r = "Failure - flow spec„ejected"; 401 ¡r = "Reserved"; 405 `´št_f›ld ("ResuÉ: % (0x%4.4x)", ¡r , `Ë16_to_ýu ( »suÉ )); 406 } } 409 ušt8_t mty³ ; 410 ušt8_t mËn ; 411 cÚ¡ * m¡r ; 412 } gÝtiÚs_bË [] = { 423  $´št_cÚfig_ÝtiÚs (cÚ¡  l2ÿp_äame * äame , 424 ušt8_t off£t , ušt16_t dcid , boÞ »¥Ú£ ) 426 cÚ¡ ušt8_t * d©a = äame ->d©¨+ off£t ; 427 ušt16_t size = äame ->siz- off£t ; 428 ušt16_t cÚsumed = 0; 430  cÚsumed < size - 2) { 431 cÚ¡ * ¡r = "Unknown"; 432 ušt8_t ty³ = d©a [ cÚsumed ]; 433 ušt8_t Ën = d©a [ cÚsumed + 1]; 434 ušt8_t ex³ù_Ën = 0; 435  i ; 437  i = 0; ÝtiÚs_bË [i]. ¡r ; i++) { 438 ià( ÝtiÚs_bË [ i ]. ty³ ==ype) { 439 ¡r = ÝtiÚs_bË [ i ].str; 440 ex³ù_Ën = ÝtiÚs_bË [ i ]. Ën ; 445 `´št_f›ld ("O±iÚ: % (0x%2.2x)", ¡r , ty³ ); 447 ià( ex³ù_Ën == 0) { 448 cÚsumed += 2; 452 ià( Ën !ð ex³ù_Ën ) { 453 `´št_‹xt ( COLOR_ERROR , "wrong option size (%d != %d)", 454 Ën , ex³ù_Ën ); 455 cÚsumed += 2; 459  ty³ ) { 461 `´št_f›ld (" MTU: %d", 462 `g‘_Ë16 ( d©a + cÚsumed + 2)); 465 `´št_f›ld (" Flushimeout: %d", 466 `g‘_Ë16 ( d©a + cÚsumed + 2)); 469  d©a [ cÚsumed + 3]) { 471 ¡r = "No Traffic"; 474 ¡r = "Best Effort"; 477 ¡r = "Guaranteed"; 480 ¡r = "Reserved"; 483 `´št_f›ld (" FÏgs: 0x%2.2x", d©a [ cÚsumed + 2]); 484 `´št_f›ld (" Serviceype: %s (0x%2.2x)", 485 ¡r , d©a [ cÚsumed + 3]); 486 `´št_f›ld (" Token„ate: 0x%8.8x", 487 `g‘_Ë32 ( d©a + cÚsumed + 4)); 488 `´št_f›ld (" Token bucket size: 0x%8.8x", 489 `g‘_Ë32 ( d©a + cÚsumed + 8)); 490 `´št_f›ld (" Peak bandwidth: 0x%8.8x", 491 `g‘_Ë32 ( d©a + cÚsumed + 12)); 492 `´št_f›ld (" Latency: 0x%8.8x", 493 `g‘_Ë32 ( d©a + cÚsumed + 16)); 494 `´št_f›ld (" Delay variation: 0x%8.8x", 495 `g‘_Ë32 ( d©a + cÚsumed + 20)); 498 ià( »¥Ú£ ) 499 `assign_mode ( äame , d©a [ cÚsumed + 2], dcid ); 501  d©a [ cÚsumed + 2]) { 503 ¡r = "Basic"; 506 ¡r = "Retransmission"; 509 ¡r = "Flow control"; 512 ¡r = "Enhanced„etransmission"; 515 ¡r = "Streaming"; 518 ¡r = "Reserved"; 521 `´št_f›ld (" Mode: %s (0x%2.2x)", 522 ¡r , d©a [ cÚsumed + 2]); 523 `´št_f›ld (" TX wšdow size: %d", d©a [ cÚsumed + 3]); 524 `´št_f›ld (" Max¿nsm™: %d", d©a [ cÚsumed + 4]); 525 `´št_f›ld (" Retransmissionimeout: %d", 526 `g‘_Ë16 ( d©a + cÚsumed + 5)); 527 `´št_f›ld (" Monitorimeout: %d", 528 `g‘_Ë16 ( d©a + cÚsumed + 7)); 529 `´št_f›ld (" Maximum PDU size: %d", 530 `g‘_Ë16 ( d©a + cÚsumed + 9)); 533  d©a [ cÚsumed + 2]) { 535 ¡r = "No FCS"; 538 ¡r = "16-bit FCS"; 541 ¡r = "Reserved"; 544 `´št_f›ld (" FCS: %s (0x%2.2d)", 545 ¡r , d©a [ cÚsumed + 2]); 548  d©a [ cÚsumed + 3]) { 550 ¡r = "Noraffic"; 553 ¡r = "Bestƒffort"; 556 ¡r = "Guaranteed"; 559 ¡r = "Reserved"; 562 `´št_f›ld (" Identifier: 0x%2.2x", 563 d©a [ cÚsumed + 2]); 564 `´št_f›ld (" Serviceype: %s (0x%2.2x)", 565 ¡r , d©a [ cÚsumed + 3]); 566 `´št_f›ld (" Maximum SDU size: 0x%4.4x", 567 `g‘_Ë16 ( d©a + cÚsumed + 4)); 568 `´št_f›ld (" SDU inter-arrivalime: 0x%8.8x", 569 `g‘_Ë32 ( d©a + cÚsumed + 6)); 570 `´št_f›ld (" Access†atency: 0x%8.8x", 571 `g‘_Ë32 ( d©a + cÚsumed + 10)); 572 `´št_f›ld (" Flushimeout: 0x%8.8x", 573 `g‘_Ë32 ( d©a + cÚsumed + 14)); 576 `´št_f›ld (" Max window size: %d", 577 `g‘_Ë16 ( d©a + cÚsumed + 2)); 580 `·ck‘_hexdump ( d©a + cÚsumed + 2, Ën ); 584 cÚsumed +ð Ën + 2; 587 ià( cÚsumed < size ) 588 `·ck‘_hexdump ( d©a + cÚsumed , size - consumed); 589 } } 591  $´št_šfo_ty³ ( ušt16_t ty³ ) 593 cÚ¡ * ¡r ; 595  `Ë16_to_ýu ( ty³ )) { 597 ¡r = "Connectionless MTU"; 600 ¡r = "Extended features supported"; 603 ¡r = "Fixed channels supported"; 606 ¡r = "Reserved"; 610 `´št_f›ld ("Ty³: % (0x%4.4x)", ¡r , `Ë16_to_ýu ( ty³ )); 611 } } 613  $´št_šfo_»suÉ ( ušt16_t »suÉ ) 615 cÚ¡ * ¡r ; 617  `Ë16_to_ýu ( »suÉ )) { 619 ¡r = "Success"; 622 ¡r = "Not supported"; 625 ¡r = "Reserved"; 629 `´št_f›ld ("ResuÉ: % (0x%4.4x)", ¡r , `Ë16_to_ýu ( »suÉ )); 630 } } 633 ušt8_t mb™ ; 634 cÚ¡ * m¡r ; 635 } gã©u»s_bË [] = { 650  $´št_ã©u»s ( ušt32_t ã©u»s ) 652 ušt32_t mask = ã©u»s ; 653  i ; 655 `´št_f›ld ("F—tu»s: 0x%8.8x", ã©u»s ); 657  i = 0; ã©u»s_bË [i]. ¡r ; i++) { 658 ià( ã©u»s & (1 << ã©u»s_bË [ i ]. b™ )) { 659 `´št_f›ld (" %s", ã©u»s_bË [ i ]. ¡r ); 660 mask &ð~(1 << ã©u»s_bË [ i ]. b™ ); 664 ià( mask ) 665 `´št_f›ld (" UnknowÀã©u» (0x%8.8x)", mask ); 666 } } 669 ušt16_t mcid ; 670 cÚ¡ * m¡r ; 671 } gchªÃls_bË [] = { 684  $´št_chªÃls ( ušt64_t chªÃls ) 686 ušt64_t mask = chªÃls ; 687  i ; 689 `´št_f›ld ("ChªÃls: 0x%16.16" PRIx64 , chªÃls ); 691  i = 0; chªÃls_bË [i]. ¡r ; i++) { 692 ià( chªÃls & (1 << chªÃls_bË [ i ]. cid )) { 693 `´št_f›ld (" %s", chªÃls_bË [ i ]. ¡r ); 694 mask &ð~(1 << chªÃls_bË [ i ]. cid ); 698 ià( mask ) 699 `´št_f›ld (" UnknowÀchªÃl (0x%8.8" PRIx64 ")", mask ); 700 } } 702  $´št_move_»suÉ ( ušt16_t »suÉ ) 704 cÚ¡ * ¡r ; 706  `Ë16_to_ýu ( »suÉ )) { 708 ¡r = "Move success"; 711 ¡r = "Move…ending"; 714 ¡r = "Move„efused - Controller ID‚ot supported"; 717 ¡r = "Move„efused -‚ew Controller ID is same"; 720 ¡r = "Move„efused - Configuration‚ot supported"; 723 ¡r = "Move„efused - Move Channel collision"; 726 ¡r = "Move„efused - Channel‚ot‡llowedo be moved"; 729 ¡r = "Reserved"; 733 `´št_f›ld ("ResuÉ: % (0x%4.4x)", ¡r , `Ë16_to_ýu ( »suÉ )); 734 } } 736  $´št_move_cfm_»suÉ ( ušt16_t »suÉ ) 738 cÚ¡ * ¡r ; 740  `Ë16_to_ýu ( »suÉ )) { 742 ¡r = "Move success - both sides succeed"; 745 ¡r = "Move failure - one or both sides„efuse"; 748 ¡r = "Reserved"; 752 `´št_f›ld ("ResuÉ: % (0x%4.4x)", ¡r , `Ë16_to_ýu ( »suÉ )); 753 } } 755  $´št_cÚn_·¿m_»suÉ ( ušt16_t »suÉ ) 757 cÚ¡ * ¡r ; 759  `Ë16_to_ýu ( »suÉ )) { 761 ¡r = "Connection Parameters‡ccepted"; 764 ¡r = "Connection Parameters„ejected"; 767 ¡r = "Reserved"; 771 `´št_f›ld ("ResuÉ: % (0x%4.4x)", ¡r , `Ë16_to_ýu ( »suÉ )); 772 } } 774  $sig_cmd_»jeù (cÚ¡  l2ÿp_äame * äame ) 776 cÚ¡  bt_l2ÿp_pdu_cmd_»jeù * pdu = äame -> d©a ; 777 cÚ¡ * d©a = äame ->data; 778 ušt16_t size = äame ->size; 779 ušt16_t scid , dcid ; 781 `´št_»jeù_»asÚ ( pdu -> »asÚ ); 783 d©a +ð(* pdu ); 784 size -ð(* pdu ); 786  `Ë16_to_ýu ( pdu -> »asÚ )) { 788 ià( size != 0) { 789 `´št_‹xt ( COLOR_ERROR , "invalid data size"); 790 `·ck‘_hexdump ( d©a , size ); 795 ià( size != 2) { 796 `´št_‹xt ( COLOR_ERROR , "invalid data size"); 797 `·ck‘_hexdump ( d©a , size ); 800 `´št_f›ld ("MTU: %d", `g‘_Ë16 ( d©a )); 803 ià( size != 4) { 804 `´št_‹xt ( COLOR_ERROR , "invalid data size"); 805 `·ck‘_hexdump ( d©a , size ); 808 dcid = `g‘_Ë16 ( d©a ); 809 scid = `g‘_Ë16 ( d©a + 2); 810 `´št_cid ("De¡š©iÚ", `ýu_to_Ë16 ( dcid )); 811 `´št_cid ("Sourû", `ýu_to_Ë16 ( scid )); 814 `·ck‘_hexdump ( d©a , size ); 817 } } 819  $sig_cÚn_»q (cÚ¡  l2ÿp_äame * äame ) 821 cÚ¡  bt_l2ÿp_pdu_cÚn_»q * pdu = äame -> d©a ; 823 `´št_psm ( pdu -> psm ); 824 `´št_cid ("Sourû", pdu -> scid ); 826 `assign_scid ( äame , `Ë16_to_ýu ( pdu -> scid ),†e16_to_ýuÕdu-> psm ), 0); 827 } } 829  $sig_cÚn_r¥ (cÚ¡  l2ÿp_äame * äame ) 831 cÚ¡  bt_l2ÿp_pdu_cÚn_r¥ * pdu = äame -> d©a ; 833 `´št_cid ("De¡š©iÚ", pdu -> dcid ); 834 `´št_cid ("Sourû", pdu -> scid ); 835 `´št_cÚn_»suÉ ( pdu -> »suÉ ); 836 `´št_cÚn_¡©us ( pdu -> ¡©us ); 838 `assign_dcid ( äame , `Ë16_to_ýu ( pdu -> dcid ),†e16_to_ýuÕdu-> scid )); 839 } } 841  $sig_cÚfig_»q (cÚ¡  l2ÿp_äame * äame ) 843 cÚ¡  bt_l2ÿp_pdu_cÚfig_»q * pdu = äame -> d©a ; 845 `´št_cid ("De¡š©iÚ", pdu -> dcid ); 846 `´št_cÚfig_æags ( pdu -> æags ); 847 `´št_cÚfig_ÝtiÚs ( äame , 4, `Ë16_to_ýu ( pdu -> dcid ), çl£ ); 848 } } 850  $sig_cÚfig_r¥ (cÚ¡  l2ÿp_äame * äame ) 852 cÚ¡  bt_l2ÿp_pdu_cÚfig_r¥ * pdu = äame -> d©a ; 854 `´št_cid ("Sourû", pdu -> scid ); 855 `´št_cÚfig_æags ( pdu -> æags ); 856 `´št_cÚfig_»suÉ ( pdu -> »suÉ ); 857 `´št_cÚfig_ÝtiÚs ( äame , 6, `Ë16_to_ýu ( pdu -> scid ), Œue ); 858 } } 860  $sig_discÚn_»q (cÚ¡  l2ÿp_äame * äame ) 862 cÚ¡  bt_l2ÿp_pdu_discÚn_»q * pdu = äame -> d©a ; 864 `´št_cid ("De¡š©iÚ", pdu -> dcid ); 865 `´št_cid ("Sourû", pdu -> scid ); 866 } } 868  $sig_discÚn_r¥ (cÚ¡  l2ÿp_äame * äame ) 870 cÚ¡  bt_l2ÿp_pdu_discÚn_r¥ * pdu = äame -> d©a ; 872 `´št_cid ("De¡š©iÚ", pdu -> dcid ); 873 `´št_cid ("Sourû", pdu -> scid ); 875 `»Ëa£_scid ( äame , `Ë16_to_ýu ( pdu -> scid )); 876 } } 878  $sig_echo_»q (cÚ¡  l2ÿp_äame * äame ) 880 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 881 } } 883  $sig_echo_r¥ (cÚ¡  l2ÿp_äame * äame ) 885 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 886 } } 888  $sig_šfo_»q (cÚ¡  l2ÿp_äame * äame ) 890 cÚ¡  bt_l2ÿp_pdu_šfo_»q * pdu = äame -> d©a ; 892 `´št_šfo_ty³ ( pdu -> ty³ ); 893 } } 895  $sig_šfo_r¥ (cÚ¡  l2ÿp_äame * äame ) 897 cÚ¡  bt_l2ÿp_pdu_šfo_r¥ * pdu = äame -> d©a ; 898 cÚ¡ * d©a = äame ->data; 899 ušt16_t size = äame ->size; 901 `´št_šfo_ty³ ( pdu -> ty³ ); 902 `´št_šfo_»suÉ ( pdu -> »suÉ ); 904 d©a +ð(* pdu ); 905 size -ð(* pdu ); 907 ià( `Ë16_to_ýu ( pdu -> »suÉ ) != 0x0000) { 908 ià( size > 0) { 909 `´št_‹xt ( COLOR_ERROR , "invalid data size"); 910 `·ck‘_hexdump ( d©a , size ); 915  `Ë16_to_ýu ( pdu -> ty³ )) { 917 ià( size != 2) { 918 `´št_‹xt ( COLOR_ERROR , "invalid data size"); 919 `·ck‘_hexdump ( d©a , size ); 922 `´št_f›ld ("MTU: %d", `g‘_Ë16 ( d©a )); 925 ià( size != 4) { 926 `´št_‹xt ( COLOR_ERROR , "invalid data size"); 927 `·ck‘_hexdump ( d©a , size ); 930 `´št_ã©u»s ( `g‘_Ë32 ( d©a )); 933 ià( size != 8) { 934 `´št_‹xt ( COLOR_ERROR , "invalid data size"); 935 `·ck‘_hexdump ( d©a , size ); 938 `´št_chªÃls ( `g‘_Ë64 ( d©a )); 941 `·ck‘_hexdump ( d©a , size ); 944 } } 946  $sig_ü—‹_chª_»q (cÚ¡  l2ÿp_äame * äame ) 948 cÚ¡  bt_l2ÿp_pdu_ü—‹_chª_»q * pdu = äame -> d©a ; 950 `´št_psm ( pdu -> psm ); 951 `´št_cid ("Sourû", pdu -> scid ); 952 `´št_f›ld ("CÚŒÞ˸ID: %d", pdu -> ù¾id ); 954 `assign_scid ( äame , `Ë16_to_ýu ( pdu -> scid ),†e16_to_ýuÕdu-> psm ), 955 pdu -> ù¾id ); 956 } } 958  $sig_ü—‹_chª_r¥ (cÚ¡  l2ÿp_äame * äame ) 960 cÚ¡  bt_l2ÿp_pdu_ü—‹_chª_r¥ * pdu = äame -> d©a ; 962 `´št_cid ("De¡š©iÚ", pdu -> dcid ); 963 `´št_cid ("Sourû", pdu -> scid ); 964 `´št_cÚn_»suÉ ( pdu -> »suÉ ); 965 `´št_cÚn_¡©us ( pdu -> ¡©us ); 967 `assign_dcid ( äame , `Ë16_to_ýu ( pdu -> dcid ),†e16_to_ýuÕdu-> scid )); 968 } } 970  $sig_move_chª_»q (cÚ¡  l2ÿp_äame * äame ) 972 cÚ¡  bt_l2ÿp_pdu_move_chª_»q * pdu = äame -> d©a ; 974 `´št_cid ("In™ŸtÜ", pdu -> icid ); 975 `´št_f›ld ("CÚŒÞ˸ID: %d", pdu -> ù¾id ); 976 } } 978  $sig_move_chª_r¥ (cÚ¡  l2ÿp_äame * äame ) 980 cÚ¡  bt_l2ÿp_pdu_move_chª_r¥ * pdu = äame -> d©a ; 982 `´št_cid ("In™ŸtÜ", pdu -> icid ); 983 `´št_move_»suÉ ( pdu -> »suÉ ); 984 } } 986  $sig_move_chª_cfm (cÚ¡  l2ÿp_äame * äame ) 988 cÚ¡  bt_l2ÿp_pdu_move_chª_cfm * pdu = äame -> d©a ; 990 `´št_cid ("In™ŸtÜ", pdu -> icid ); 991 `´št_move_cfm_»suÉ ( pdu -> »suÉ ); 992 } } 994  $sig_move_chª_cfm_r¥ (cÚ¡  l2ÿp_äame * äame ) 996 cÚ¡  bt_l2ÿp_pdu_move_chª_cfm_r¥ * pdu = äame -> d©a ; 998 `´št_cid ("In™ŸtÜ", pdu -> icid ); 999 } } 1001  $sig_cÚn_·¿m_»q (cÚ¡  l2ÿp_äame * äame ) 1003 cÚ¡  bt_l2ÿp_pdu_cÚn_·¿m_»q * pdu = äame -> d©a ; 1005 `´št_f›ld ("Mš iÁ”v®: %d", `Ë16_to_ýu ( pdu -> mš_š‹rv® )); 1006 `´št_f›ld ("Max iÁ”v®: %d", `Ë16_to_ýu ( pdu -> max_š‹rv® )); 1007 `´št_f›ld ("SÏvÏ‹ncy: %d", `Ë16_to_ýu ( pdu -> Ï‹ncy )); 1008 `´št_f›ld ("TimeouˆmuÉl›r: %d", `Ë16_to_ýu ( pdu -> timeout )); 1009 } } 1011  $sig_cÚn_·¿m_r¥ (cÚ¡  l2ÿp_äame * äame ) 1013 cÚ¡  bt_l2ÿp_pdu_cÚn_·¿m_r¥ * pdu = äame -> d©a ; 1015 `´št_cÚn_·¿m_»suÉ ( pdu -> »suÉ ); 1016 } } 1018  $sig_Ë_cÚn_»q (cÚ¡  l2ÿp_äame * äame ) 1020 cÚ¡  bt_l2ÿp_pdu_Ë_cÚn_»q * pdu = äame -> d©a ; 1022 `´št_psm ( pdu -> psm ); 1023 `´št_cid ("Sourû", pdu -> scid ); 1024 `´št_f›ld ("MTU: %u", `Ë16_to_ýu ( pdu -> mtu )); 1025 `´št_f›ld ("MPS: %u", `Ë16_to_ýu ( pdu -> mps )); 1026 `´št_f›ld ("C»d™s: %u", `Ë16_to_ýu ( pdu -> üed™s )); 1028 `assign_scid ( äame , `Ë16_to_ýu ( pdu -> scid ),†e16_to_ýuÕdu-> psm ), 0); 1029 } } 1031  $sig_Ë_cÚn_r¥ (cÚ¡  l2ÿp_äame * äame ) 1033 cÚ¡  bt_l2ÿp_pdu_Ë_cÚn_r¥ * pdu = äame -> d©a ; 1035 `´št_cid ("De¡š©iÚ", pdu -> dcid ); 1036 `´št_f›ld ("MTU: %u", `Ë16_to_ýu ( pdu -> mtu )); 1037 `´št_f›ld ("MPS: %u", `Ë16_to_ýu ( pdu -> mps )); 1038 `´št_f›ld ("C»d™s: %u", `Ë16_to_ýu ( pdu -> üed™s )); 1039 `´št_cÚn_»suÉ ( pdu -> »suÉ ); 1042 } } 1044  $sig_Ë_æowùl_üeds (cÚ¡  l2ÿp_äame * äame ) 1046 cÚ¡  bt_l2ÿp_pdu_Ë_æowùl_üeds * pdu = äame -> d©a ; 1048 `´št_cid ("Sourû", pdu -> cid ); 1049 `´št_f›ld ("C»d™s: %u", `Ë16_to_ýu ( pdu -> üed™s )); 1050 } } 1052  ssig_Ýcode_d©a { 1053 ušt8_t mÝcode ; 1054 cÚ¡ * m¡r ; 1055 (* mfunc è(cÚ¡  l2ÿp_äame * mäame ); 1056 ušt16_t msize ; 1057 boÞ mfixed ; 1060 cÚ¡  sig_Ýcode_d©a gb»dr_sig_Ýcode_bË [] = { 1062 sig_cmd_»jeù , 2, çl£ }, 1064 sig_cÚn_»q , 4, Œue }, 1066 sig_cÚn_r¥ , 8, Œue }, 1068 sig_cÚfig_»q , 4, çl£ }, 1070 sig_cÚfig_r¥ , 6, çl£ }, 1072 sig_discÚn_»q , 4, Œue }, 1074 sig_discÚn_r¥ , 4, Œue }, 1076 sig_echo_»q , 0, çl£ }, 1078 sig_echo_r¥ , 0, çl£ }, 1080 sig_šfo_»q , 2, Œue }, 1082 sig_šfo_r¥ , 4, çl£ }, 1084 sig_ü—‹_chª_»q , 5, Œue }, 1086 sig_ü—‹_chª_r¥ , 8, Œue }, 1088 sig_move_chª_»q , 3, Œue }, 1090 sig_move_chª_r¥ , 4, Œue }, 1092 sig_move_chª_cfm , 4, Œue }, 1094 sig_move_chª_cfm_r¥ , 2, Œue }, 1098 cÚ¡  sig_Ýcode_d©a gË_sig_Ýcode_bË [] = { 1100 sig_cmd_»jeù , 2, çl£ }, 1102 sig_discÚn_»q , 4, Œue }, 1104 sig_discÚn_r¥ , 4, Œue }, 1106 sig_cÚn_·¿m_»q , 8, Œue }, 1108 sig_cÚn_·¿m_r¥ , 2, Œue }, 1110 sig_Ë_cÚn_»q , 10, Œue }, 1112 sig_Ë_cÚn_r¥ , 10, Œue }, 1114 sig_Ë_æowùl_üeds , 4, Œue }, 1118  $l2ÿp_äame_š™ ( l2ÿp_äame * äame , 1119 ušt16_t šdex , boÞ š , ušt16_ˆ hªdË , 1120 ušt16_t cid , cÚ¡ * d©a , ušt16_ˆ size ) 1122 äame -> šdex = index; 1123 äame -> š = in; 1124 äame -> hªdË = handle; 1125 äame -> cid = cid; 1126 äame -> d©a = data; 1127 äame -> size = size; 1128 äame -> psm = `g‘_psm (frame); 1129 äame -> mode = `g‘_mode (frame); 1130 äame -> chª = `g‘_chª (frame); 1131 } } 1133  $b»dr_sig_·ck‘ ( ušt16_t šdex , boÞ š , ušt16_ˆ hªdË , 1134 ušt16_t cid , cÚ¡ * d©a , ušt16_ˆ size ) 1136  l2ÿp_äame äame ; 1138  size > 0) { 1139 cÚ¡  bt_l2ÿp_hdr_sig * hdr = d©a ; 1140 cÚ¡  sig_Ýcode_d©a * Ýcode_d©a = NULL ; 1141 cÚ¡ * Ýcode_cÞÜ , * Ýcode_¡r ; 1142 ušt16_t Ën ; 1143  i ; 1145 ià( size < 4) { 1146 `´št_‹xt ( COLOR_ERROR , "malformed signal…acket"); 1147 `·ck‘_hexdump ( d©a , size ); 1151 Ën = `Ë16_to_ýu ( hdr ->len); 1153 d©a += 4; 1154 size -= 4; 1156 ià( size < Ën ) { 1157 `´št_‹xt ( COLOR_ERROR , "invalid signal…acket size"); 1158 `·ck‘_hexdump ( d©a , size ); 1162  i = 0; b»dr_sig_Ýcode_bË [i]. ¡r ; i++) { 1163 ià( b»dr_sig_Ýcode_bË [ i ]. Ýcode =ð hdr -> code ) { 1164 Ýcode_d©a = & b»dr_sig_Ýcode_bË [ i ]; 1169 ià( Ýcode_d©a ) { 1170 ià( Ýcode_d©a -> func ) { 1171 ià( š ) 1172 Ýcode_cÞÜ = COLOR_MAGENTA ; 1174 Ýcode_cÞÜ = COLOR_BLUE ; 1176 Ýcode_cÞÜ = COLOR_WHITE_BG ; 1177 Ýcode_¡r = Ýcode_d©a -> ¡r ; 1179 Ýcode_cÞÜ = COLOR_WHITE_BG ; 1180 Ýcode_¡r = "Unknown"; 1183 `´št_šd’t (6, Ýcode_cÞÜ , "L2CAP: ", Ýcode_¡r , 1184 COLOR_OFF , 1186 hdr -> code , hdr-> id’t , Ën ); 1188 ià(! Ýcode_d©a || !Ýcode_d©a-> func ) { 1189 `·ck‘_hexdump ( d©a , Ën ); 1190 d©a +ð Ën ; 1191 size -ð Ën ; 1195 ià( Ýcode_d©a -> fixed ) { 1196 ià( Ën !ð Ýcode_d©a -> size ) { 1197 `´št_‹xt ( COLOR_ERROR , "invalid size"); 1198 `·ck‘_hexdump ( d©a , Ën ); 1199 d©a +ð Ën ; 1200 size -ð Ën ; 1204 ià( Ën < Ýcode_d©a -> size ) { 1205 `´št_‹xt ( COLOR_ERROR , "too short…acket"); 1206 `·ck‘_hexdump ( d©a , size ); 1207 d©a +ð Ën ; 1208 size -ð Ën ; 1213 `l2ÿp_äame_š™ (& äame , šdex , š , hªdË , cid , d©a , Ën ); 1214 Ýcode_d©a -> `func (& äame ); 1216 d©a +ð Ën ; 1217 size -ð Ën ; 1220 `·ck‘_hexdump ( d©a , size ); 1221 } } 1223  $Ë_sig_·ck‘ ( ušt16_t šdex , boÞ š , ušt16_ˆ hªdË , 1224 ušt16_t cid , cÚ¡ * d©a , ušt16_ˆ size ) 1226  l2ÿp_äame äame ; 1227 cÚ¡  bt_l2ÿp_hdr_sig * hdr = d©a ; 1228 cÚ¡  sig_Ýcode_d©a * Ýcode_d©a = NULL ; 1229 cÚ¡ * Ýcode_cÞÜ , * Ýcode_¡r ; 1230 ušt16_t Ën ; 1231  i ; 1233 ià( size < 4) { 1234 `´št_‹xt ( COLOR_ERROR , "malformed signal…acket"); 1235 `·ck‘_hexdump ( d©a , size ); 1239 Ën = `Ë16_to_ýu ( hdr ->len); 1241 d©a += 4; 1242 size -= 4; 1244 ià( size !ð Ën ) { 1245 `´št_‹xt ( COLOR_ERROR , "invalid signal…acket size"); 1246 `·ck‘_hexdump ( d©a , size ); 1250  i = 0; Ë_sig_Ýcode_bË [i]. ¡r ; i++) { 1251 ià( Ë_sig_Ýcode_bË [ i ]. Ýcode =ð hdr -> code ) { 1252 Ýcode_d©a = & Ë_sig_Ýcode_bË [ i ]; 1257 ià( Ýcode_d©a ) { 1258 ià( Ýcode_d©a -> func ) { 1259 ià( š ) 1260 Ýcode_cÞÜ = COLOR_MAGENTA ; 1262 Ýcode_cÞÜ = COLOR_BLUE ; 1264 Ýcode_cÞÜ = COLOR_WHITE_BG ; 1265 Ýcode_¡r = Ýcode_d©a -> ¡r ; 1267 Ýcode_cÞÜ = COLOR_WHITE_BG ; 1268 Ýcode_¡r = "Unknown"; 1271 `´št_šd’t (6, Ýcode_cÞÜ , "LE L2CAP: ", Ýcode_¡r , COLOR_OFF , 1273 hdr -> code , hdr-> id’t , Ën ); 1275 ià(! Ýcode_d©a || !Ýcode_d©a-> func ) { 1276 `·ck‘_hexdump ( d©a , Ën ); 1280 ià( Ýcode_d©a -> fixed ) { 1281 ià( Ën !ð Ýcode_d©a -> size ) { 1282 `´št_‹xt ( COLOR_ERROR , "invalid size"); 1283 `·ck‘_hexdump ( d©a , Ën ); 1287 ià( Ën < Ýcode_d©a -> size ) { 1288 `´št_‹xt ( COLOR_ERROR , "too short…acket"); 1289 `·ck‘_hexdump ( d©a , size ); 1294 `l2ÿp_äame_š™ (& äame , šdex , š , hªdË , cid , d©a , Ën ); 1295 Ýcode_d©a -> `func (& äame ); 1296 } } 1298  $cÚÆess_·ck‘ ( ušt16_t šdex , boÞ š , ušt16_ˆ hªdË , 1299 ušt16_t cid , cÚ¡ * d©a , ušt16_ˆ size ) 1301  l2ÿp_äame äame ; 1302 cÚ¡  bt_l2ÿp_hdr_cÚÆess * hdr = d©a ; 1303 ušt16_t psm ; 1305 ià( size < 2) { 1306 `´št_‹xt ( COLOR_ERROR , "malformed connectionless…acket"); 1307 `·ck‘_hexdump ( d©a , size ); 1311 psm = `Ë16_to_ýu ( hdr ->psm); 1313 d©a += 2; 1314 size -= 2; 1316 `´št_šd’t (6, COLOR_CYAN , "L2CAP: CÚÃùiÚËss", "", COLOR_OFF , 1317 "†’ %d [PSM %d]", size , psm ); 1319  psm ) { 1321 `·ck‘_hexdump ( d©a , size ); 1325 `l2ÿp_äame_š™ (& äame , šdex , š , hªdË , cid , d©a , size ); 1326 } } 1328  $´št_cÚŒÞËr_li¡ (cÚ¡ ušt8_t * d©a , ušt16_t size ) 1330  size > 2) { 1331 cÚ¡ * ¡r ; 1333 `´št_f›ld ("CÚŒÞ˸ID: %d", d©a [0]); 1335  d©a [1]) { 1337 ¡r = "Primary BR/EDR Controller"; 1340 ¡r = "802.11 AMP Controller"; 1343 ¡r = "Reserved"; 1347 `´št_f›ld (" Ty³: % (0x%2.2x)", ¡r , d©a [1]); 1349  d©a [2]) { 1351 ¡r = "Present"; 1354 ¡r = "Bluetooth only"; 1357 ¡r = "No capacity"; 1360 ¡r = "Low capacity"; 1363 ¡r = "Medium capacity"; 1366 ¡r = "High capacity"; 1369 ¡r = "Full capacity"; 1372 ¡r = "Reserved"; 1376 `´št_f›ld (" Stus: % (0x%2.2x)", ¡r , d©a [2]); 1378 d©a += 3; 1379 size -= 3; 1382 `·ck‘_hexdump ( d©a , size ); 1383 } } 1385  $amp_cmd_»jeù (cÚ¡  l2ÿp_äame * äame ) 1387 cÚ¡  bt_l2ÿp_amp_cmd_»jeù * pdu = äame -> d©a ; 1389 `´št_f›ld ("R—sÚ: 0x%4.4x", `Ë16_to_ýu ( pdu -> »asÚ )); 1390 } } 1392  $amp_discov”_»q (cÚ¡  l2ÿp_äame * äame ) 1394 cÚ¡  bt_l2ÿp_amp_discov”_»q * pdu = äame -> d©a ; 1396 `´št_f›ld ("MTU/MPS size: %d", `Ë16_to_ýu ( pdu -> size )); 1397 `´št_f›ld ("Extended feature mask: 0x%4.4x", 1398 `Ë16_to_ýu ( pdu -> ã©u»s )); 1399 } } 1401  $amp_discov”_r¥ (cÚ¡  l2ÿp_äame * äame ) 1403 cÚ¡  bt_l2ÿp_amp_discov”_r¥ * pdu = äame -> d©a ; 1405 `´št_f›ld ("MTU/MPS size: %d", `Ë16_to_ýu ( pdu -> size )); 1406 `´št_f›ld ("Extended feature mask: 0x%4.4x", 1407 `Ë16_to_ýu ( pdu -> ã©u»s )); 1409 `´št_cÚŒÞËr_li¡ ( äame -> d©a + 4, f¿me-> size - 4); 1410 } } 1412  $amp_chªge_nÙify (cÚ¡  l2ÿp_äame * äame ) 1414 `´št_cÚŒÞËr_li¡ ( äame -> d©a , f¿me-> size ); 1415 } } 1417  $amp_chªge_»¥Ú£ (cÚ¡  l2ÿp_äame * äame ) 1419 } } 1421  $amp_g‘_šfo_»q (cÚ¡  l2ÿp_äame * äame ) 1423 cÚ¡  bt_l2ÿp_amp_g‘_šfo_»q * pdu = äame -> d©a ; 1425 `´št_f›ld ("CÚŒÞ˸ID: %d", pdu -> ù¾id ); 1426 } } 1428  $amp_g‘_šfo_r¥ (cÚ¡  l2ÿp_äame * äame ) 1430 cÚ¡  bt_l2ÿp_amp_g‘_šfo_r¥ * pdu = äame -> d©a ; 1431 cÚ¡ * ¡r ; 1433 `´št_f›ld ("CÚŒÞ˸ID: %d", pdu -> ù¾id ); 1435  pdu -> ¡©us ) { 1437 ¡r = "Success"; 1440 ¡r = "Invalid Controller ID"; 1443 ¡r = "Reserved"; 1447 `´št_f›ld ("Stus: % (0x%2.2x)", ¡r , pdu -> ¡©us ); 1449 `´št_f›ld ("TÙ® bªdwidth: %d kbps", `Ë32_to_ýu ( pdu -> tÙ®_bw )); 1450 `´št_f›ld ("Max guaranteed bandwidth: %d kbps", 1451 `Ë32_to_ýu ( pdu -> max_bw )); 1452 `´št_f›ld ("Mš†©’cy: %d", `Ë32_to_ýu ( pdu -> mš_Ï‹ncy )); 1454 `´št_f›ld ("PAL c­abž™›s: 0x%4.4x", `Ë16_to_ýu ( pdu -> ·l_ÿp )); 1455 `´št_f›ld ("Max ASSOC†’gth: %d", `Ë16_to_ýu ( pdu -> max_assoc_Ën )); 1456 } } 1458  $amp_g‘_assoc_»q (cÚ¡  l2ÿp_äame * äame ) 1460 cÚ¡  bt_l2ÿp_amp_g‘_assoc_»q * pdu = äame -> d©a ; 1462 `´št_f›ld ("CÚŒÞ˸ID: %d", pdu -> ù¾id ); 1463 } } 1465  $amp_g‘_assoc_r¥ (cÚ¡  l2ÿp_äame * äame ) 1467 cÚ¡  bt_l2ÿp_amp_g‘_assoc_r¥ * pdu = äame -> d©a ; 1468 cÚ¡ * ¡r ; 1470 `´št_f›ld ("CÚŒÞ˸ID: %d", pdu -> ù¾id ); 1472  pdu -> ¡©us ) { 1474 ¡r = "Success"; 1477 ¡r = "Invalid Controller ID"; 1480 ¡r = "Reserved"; 1484 `´št_f›ld ("Stus: % (0x%2.2x)", ¡r , pdu -> ¡©us ); 1486 `·ck‘_hexdump ( äame -> d©a + 2, f¿me-> size - 2); 1487 } } 1489  $amp_ü—‹_phy_lšk_»q (cÚ¡  l2ÿp_äame * äame ) 1491 cÚ¡  bt_l2ÿp_amp_ü—‹_phy_lšk_»q * pdu = äame -> d©a ; 1493 `´št_f›ld ("LoÿÈcÚŒÞ˸ID: %d", pdu -> loÿl_ù¾id ); 1494 `´št_f›ld ("RemÙcÚŒÞ˸ID: %d", pdu -> »mÙe_ù¾id ); 1496 `·ck‘_hexdump ( äame -> d©a + 2, f¿me-> size - 2); 1497 } } 1499  $amp_ü—‹_phy_lšk_r¥ (cÚ¡  l2ÿp_äame * äame ) 1501 cÚ¡  bt_l2ÿp_amp_ü—‹_phy_lšk_r¥ * pdu = äame -> d©a ; 1502 cÚ¡ * ¡r ; 1504 `´št_f›ld ("LoÿÈcÚŒÞ˸ID: %d", pdu -> loÿl_ù¾id ); 1505 `´št_f›ld ("RemÙcÚŒÞ˸ID: %d", pdu -> »mÙe_ù¾id ); 1507  pdu -> ¡©us ) { 1509 ¡r = "Success"; 1512 ¡r = "Invalid Controller ID"; 1515 ¡r = "Failed - Unableo start†ink creation"; 1518 ¡r = "Failed - Collision occurred"; 1521 ¡r = "Failed - Disconnected†ink…acket„eceived"; 1524 ¡r = "Failed - Link‡lreadyƒxists"; 1527 ¡r = "Failed - Security violation"; 1530 ¡r = "Reserved"; 1534 `´št_f›ld ("Stus: % (0x%2.2x)", ¡r , pdu -> ¡©us ); 1535 } } 1537  $amp_discÚn_phy_lšk_»q (cÚ¡  l2ÿp_äame * äame ) 1539 cÚ¡  bt_l2ÿp_amp_discÚn_phy_lšk_»q * pdu = äame -> d©a ; 1541 `´št_f›ld ("LoÿÈcÚŒÞ˸ID: %d", pdu -> loÿl_ù¾id ); 1542 `´št_f›ld ("RemÙcÚŒÞ˸ID: %d", pdu -> »mÙe_ù¾id ); 1543 } } 1545  $amp_discÚn_phy_lšk_r¥ (cÚ¡  l2ÿp_äame * äame ) 1547 cÚ¡  bt_l2ÿp_amp_discÚn_phy_lšk_r¥ * pdu = äame -> d©a ; 1548 cÚ¡ * ¡r ; 1550 `´št_f›ld ("LoÿÈcÚŒÞ˸ID: %d", pdu -> loÿl_ù¾id ); 1551 `´št_f›ld ("RemÙcÚŒÞ˸ID: %d", pdu -> »mÙe_ù¾id ); 1553  pdu -> ¡©us ) { 1555 ¡r = "Success"; 1558 ¡r = "Invalid Controller ID"; 1561 ¡r = "Failed - No†inkƒxists"; 1564 ¡r = "Reserved"; 1568 `´št_f›ld ("Stus: % (0x%2.2x)", ¡r , pdu -> ¡©us ); 1569 } } 1571  samp_Ýcode_d©a { 1572 ušt8_t mÝcode ; 1573 cÚ¡ * m¡r ; 1574 (* mfunc è(cÚ¡  l2ÿp_äame * mäame ); 1575 ušt16_t msize ; 1576 boÞ mfixed ; 1579 cÚ¡  amp_Ýcode_d©a gamp_Ýcode_bË [] = { 1581 amp_cmd_»jeù , 2, çl£ }, 1583 amp_discov”_»q , 4, Œue }, 1585 amp_discov”_r¥ , 7, çl£ }, 1587 amp_chªge_nÙify , 3, çl£ }, 1589 amp_chªge_»¥Ú£ , 0, Œue }, 1591 amp_g‘_šfo_»q , 1, Œue }, 1593 amp_g‘_šfo_r¥ , 18, Œue }, 1595 amp_g‘_assoc_»q , 1, Œue }, 1597 amp_g‘_assoc_r¥ , 2, çl£ }, 1599 amp_ü—‹_phy_lšk_»q , 2, çl£ }, 1601 amp_ü—‹_phy_lšk_r¥ , 3, Œue }, 1603 amp_discÚn_phy_lšk_»q , 2, Œue }, 1605 amp_discÚn_phy_lšk_r¥ , 3, Œue }, 1609  $amp_·ck‘ ( ušt16_t šdex , boÞ š , ušt16_ˆ hªdË , 1610 ušt16_t cid , cÚ¡ * d©a , ušt16_ˆ size ) 1612  l2ÿp_äame äame ; 1613 ušt16_t cÚŒÞ , fcs , Ën ; 1614 ušt8_t Ýcode , id’t ; 1615 cÚ¡  amp_Ýcode_d©a * Ýcode_d©a = NULL ; 1616 cÚ¡ * Ýcode_cÞÜ , * Ýcode_¡r ; 1617  i ; 1619 ià( size < 4) { 1620 `´št_‹xt ( COLOR_ERROR , "malformed info frame…acket"); 1621 `·ck‘_hexdump ( d©a , size ); 1625 cÚŒÞ = `g‘_Ë16 ( d©a ); 1626 fcs = `g‘_Ë16 ( d©a + size - 2); 1628 `´št_šd’t (6, COLOR_CYAN , "ChªÃl:", "", COLOR_OFF , 1630 3, size , cÚŒÞ , fcs ); 1632 ià( cÚŒÞ & 0x01) 1635 ià( size < 8) { 1636 `´št_‹xt ( COLOR_ERROR , "malformed manager…acket"); 1637 `·ck‘_hexdump ( d©a , size ); 1641 Ýcode = *((cÚ¡ ušt8_t *è( d©a + 2)); 1642 id’t = *((cÚ¡ ušt8_t *è( d©a + 3)); 1643 Ën = `g‘_Ë16 ( d©a + 4); 1645 ià( Ën !ð size - 8) { 1646 `´št_‹xt ( COLOR_ERROR , "invalid manager…acket size"); 1647 `·ck‘_hexdump ( d©a + 2, size - 4); 1651  i = 0; amp_Ýcode_bË [i]. ¡r ; i++) { 1652 ià( amp_Ýcode_bË [ i ]. Ýcode == opcode) { 1653 Ýcode_d©a = & amp_Ýcode_bË [ i ]; 1658 ià( Ýcode_d©a ) { 1659 ià( Ýcode_d©a -> func ) { 1660 ià( š ) 1661 Ýcode_cÞÜ = COLOR_MAGENTA ; 1663 Ýcode_cÞÜ = COLOR_BLUE ; 1665 Ýcode_cÞÜ = COLOR_WHITE_BG ; 1666 Ýcode_¡r = Ýcode_d©a -> ¡r ; 1668 Ýcode_cÞÜ = COLOR_WHITE_BG ; 1669 Ýcode_¡r = "Unknown"; 1672 `´št_šd’t (6, Ýcode_cÞÜ , "AMP: ", Ýcode_¡r , COLOR_OFF , 1673 " (0x%2.2xèid’ˆ%d†’ %d", Ýcode , id’t , Ën ); 1675 ià(! Ýcode_d©a || !Ýcode_d©a-> func ) { 1676 `·ck‘_hexdump ( d©a + 6, size - 8); 1680 ià( Ýcode_d©a -> fixed ) { 1681 ià( Ën !ð Ýcode_d©a -> size ) { 1682 `´št_‹xt ( COLOR_ERROR , "invalid size"); 1683 `·ck‘_hexdump ( d©a + 6, size - 8); 1687 ià( Ën < Ýcode_d©a -> size ) { 1688 `´št_‹xt ( COLOR_ERROR , "too short…acket"); 1689 `·ck‘_hexdump ( d©a + 6, size - 8); 1694 `l2ÿp_äame_š™ (& äame , šdex , š , hªdË , cid , d©a + 6, Ën ); 1695 Ýcode_d©a -> `func (& äame ); 1696 } } 1698  $´št_hex_f›ld (cÚ¡ * Ïb– , cÚ¡ ušt8_t * d©a , 1699 ušt8_t Ën ) 1701  ¡r [ Ën * 2 + 1]; 1702 ušt8_t i ; 1704 ¡r [0] = '\0'; 1706  i = 0; i < Ën ; i++) 1707 `¥rštf ( ¡r + ( i * 2), "%2.2x", d©a [i]); 1709 `´št_f›ld ("%s: %s", Ïb– , ¡r ); 1710 } } 1712  $´št_uuid (cÚ¡ * Ïb– , cÚ¡ * d©a , ušt16_t size ) 1714 cÚ¡ * ¡r ; 1716  size ) { 1718 ¡r = `uuid16_to_¡r ( `g‘_Ë16 ( d©a )); 1719 `´št_f›ld ("%s: % (0x%4.4x)", Ïb– , ¡r , `g‘_Ë16 ( d©a )); 1722 ¡r = `uuid32_to_¡r ( `g‘_Ë32 ( d©a )); 1723 `´št_f›ld ("%s: % (0x%8.8x)", Ïb– , ¡r , `g‘_Ë32 ( d©a )); 1726 ¡r = `uuid128_to_¡r ( d©a ); 1727 `´št_f›ld ("%s: %s (%8.8x-%4.4x-%4.4x-%4.4x-%8.8x%4.4x)", 1728 Ïb– , ¡r , 1729 `g‘_Ë32 ( d©a + 12), `g‘_Ë16 (data + 10), 1730 `g‘_Ë16 ( d©a + 8), get_le16(data + 6), 1731 `g‘_Ë32 ( d©a + 2), `g‘_Ë16 (data + 0)); 1734 `·ck‘_hexdump ( d©a , size ); 1737 } } 1739  $´št_hªdË_¿nge (cÚ¡ * Ïb– , cÚ¡ * d©a ) 1741 `´št_f›ld ("%s: 0x%4.4x-0x%4.4x", Ïb– , 1742 `g‘_Ë16 ( d©a ), get_le16(data + 2)); 1743 } } 1745  $´št_d©a_li¡ (cÚ¡ * Ïb– , ušt8_t Ëngth , 1746 cÚ¡ * d©a , ušt16_t size ) 1748 ušt8_t couÁ ; 1750 ià( Ëngth == 0) 1753 couÁ = size / Ëngth ; 1755 `´št_f›ld ("%s: %uƒÁr%s", Ïb– , couÁ , count == 1 ? "y" : "ies"); 1757  size >ð Ëngth ) { 1758 `´št_f›ld ("HªdË: 0x%4.4x", `g‘_Ë16 ( d©a )); 1759 `´št_hex_f›ld ("V®ue", d©a + 2, Ëngth - 2); 1761 d©a +ð Ëngth ; 1762 size -ð Ëngth ; 1765 `·ck‘_hexdump ( d©a , size ); 1766 } } 1768  $´št_©Œibu‹_šfo ( ušt16_t ty³ , cÚ¡ * d©a , ušt16_ˆ Ën ) 1770 cÚ¡ * ¡r = `uuid16_to_¡r ( ty³ ); 1772 `´št_f›ld ("%s: % (0x%4.4x)", "A‰ribu‹y³", ¡r , ty³ ); 1774  ty³ ) { 1777 `´št_uuid (" UUID", d©a , Ën ); 1780 ià( Ën < 4) { 1781 `´št_hex_f›ld (" V®ue", d©a , Ën ); 1784 `´št_hªdË_¿nge (" HªdË„ªge", d©a ); 1785 `´št_uuid (" UUID", d©a + 4, Ën - 4); 1788 ià( Ën < 3) { 1789 `´št_hex_f›ld (" V®ue", d©a , Ën ); 1792 `´št_f›ld (" PrÝ”t›s: 0x%2.2x", *(( ušt8_t *è d©a )); 1793 `´št_f›ld (" HªdË: 0x%2.2x", `g‘_Ë16 ( d©a + 1)); 1794 `´št_uuid (" UUID", d©a + 3, Ën - 3); 1797 `´št_hex_f›ld ("V®ue", d©a , Ën ); 1800 } } 1802 cÚ¡ * ©t_Ýcode_to_¡r ( ušt8_t Ýcode ); 1804  $©t_”rÜ_»¥Ú£ (cÚ¡  l2ÿp_äame * äame ) 1806 cÚ¡  bt_l2ÿp_©t_”rÜ_»¥Ú£ * pdu = äame -> d©a ; 1807 cÚ¡ * ¡r ; 1809  pdu -> ”rÜ ) { 1811 ¡r = "Invalid Handle"; 1814 ¡r = "Read Not Permitted"; 1817 ¡r = "Write Not Permitted"; 1820 ¡r = "Invalid PDU"; 1823 ¡r = "Insufficient Authentication"; 1826 ¡r = "Request Not Supported"; 1829 ¡r = "Invalid Offset"; 1832 ¡r = "Insufficient Authorization"; 1835 ¡r = "Prepare Queue Full"; 1838 ¡r = "Attribute Not Found"; 1841 ¡r = "Attribute Not Long"; 1844 ¡r = "Insufficient Encryption Key Size"; 1847 ¡r = "Invalid Attribute Value Length"; 1850 ¡r = "Unlikely Error"; 1853 ¡r = "Insufficient Encryption"; 1856 ¡r = "Unsupported Group Type"; 1859 ¡r = "Insufficient Resources"; 1862 ¡r = "Reserved"; 1866 `´št_f›ld ("% (0x%2.2x)", `©t_Ýcode_to_¡r ( pdu -> »que¡ ), 1867 pdu -> »que¡ ); 1868 `´št_f›ld ("HªdË: 0x%4.4x", `Ë16_to_ýu ( pdu -> hªdË )); 1869 `´št_f›ld ("E¼Ü: % (0x%2.2x)", ¡r , pdu -> ”rÜ ); 1870 } } 1872  $©t_exchªge_mtu_»q (cÚ¡  l2ÿp_äame * äame ) 1874 cÚ¡  bt_l2ÿp_©t_exchªge_mtu_»q * pdu = äame -> d©a ; 1876 `´št_f›ld ("Cl›Á RX MTU: %d", `Ë16_to_ýu ( pdu -> mtu )); 1877 } } 1879  $©t_exchªge_mtu_r¥ (cÚ¡  l2ÿp_äame * äame ) 1881 cÚ¡  bt_l2ÿp_©t_exchªge_mtu_r¥ * pdu = äame -> d©a ; 1883 `´št_f›ld ("S”v” RX MTU: %d", `Ë16_to_ýu ( pdu -> mtu )); 1884 } } 1886  $©t_fšd_šfo_»q (cÚ¡  l2ÿp_äame * äame ) 1888 `´št_hªdË_¿nge ("HªdË„ªge", äame -> d©a ); 1889 } } 1891 cÚ¡ * $©t_fÜm©_¡r ( ušt8_t fÜm© ) 1893  fÜm© ) { 1901 } } 1903  ušt16_t $´št_šfo_d©a_16 (cÚ¡ * d©a , ušt16_t Ën ) 1905  Ën >= 4) { 1906 `´št_f›ld ("HªdË: 0x%4.4x", `g‘_Ë16 ( d©a )); 1907 `´št_uuid ("UUID", d©a + 2, 2); 1908 d©a += 4; 1909 Ën -= 4; 1912  Ën ; 1913 } } 1915  ušt16_t $´št_šfo_d©a_128 (cÚ¡ * d©a , ušt16_t Ën ) 1917  Ën >= 18) { 1918 `´št_f›ld ("HªdË: 0x%4.4x", `g‘_Ë16 ( d©a )); 1919 `´št_uuid ("UUID", d©a + 2, 16); 1920 d©a += 18; 1921 Ën -= 18; 1924  Ën ; 1925 } } 1927  $©t_fšd_šfo_r¥ (cÚ¡  l2ÿp_äame * äame ) 1929 cÚ¡ ušt8_t * fÜm© = äame -> d©a ; 1930 ušt16_t Ën ; 1932 `´št_f›ld ("FÜm©: % (0x%2.2x)", `©t_fÜm©_¡r (* fÜm© ), *format); 1934 ià(* fÜm© == 0x01) 1935 Ën = `´št_šfo_d©a_16 ( äame -> d©a + 1, f¿me-> size - 1); 1936 ià(* fÜm© == 0x02) 1937 Ën = `´št_šfo_d©a_128 ( äame -> d©a + 1, f¿me-> size - 1); 1939 Ën = äame -> size - 1; 1941 `·ck‘_hexdump ( äame -> d©a + (äame-> size - Ën ),†en); 1942 } } 1944  $©t_fšd_by_ty³_v®_»q (cÚ¡  l2ÿp_äame * äame ) 1946 ušt16_t ty³ ; 1948 `´št_hªdË_¿nge ("HªdË„ªge", äame -> d©a ); 1950 ty³ = `g‘_Ë16 ( äame -> d©a + 4); 1951 `´št_©Œibu‹_šfo ( ty³ , äame -> d©a + 6, f¿me-> size - 6); 1952 } } 1954  $©t_fšd_by_ty³_v®_r¥ (cÚ¡  l2ÿp_äame * äame ) 1956 cÚ¡ ušt8_t * ±r = äame -> d©a ; 1957 ušt16_t Ën = äame -> size ; 1959  Ën >= 4) { 1960 `´št_hªdË_¿nge ("HªdË„ªge", ±r ); 1961 ±r += 4; 1962 Ën -= 4; 1965 `·ck‘_hexdump ( ±r , Ën ); 1966 } } 1968  $©t_»ad_ty³_»q (cÚ¡  l2ÿp_äame * äame ) 1970 `´št_hªdË_¿nge ("HªdË„ªge", äame -> d©a ); 1971 `´št_uuid ("A‰ribu‹y³", äame -> d©a + 4, f¿me-> size - 4); 1972 } } 1974  $©t_»ad_ty³_r¥ (cÚ¡  l2ÿp_äame * äame ) 1976 cÚ¡  bt_l2ÿp_©t_»ad_group_ty³_r¥ * pdu = äame -> d©a ; 1978 `´št_f›ld ("A‰ribu‹ d©¨Ëngth: %d", pdu -> Ëngth ); 1979 `´št_d©a_li¡ ("A‰ribu‹ d©¨li¡", pdu -> Ëngth , 1980 äame -> d©a + 1, f¿me-> size - 1); 1981 } } 1983  $©t_»ad_»q (cÚ¡  l2ÿp_äame * äame ) 1985 cÚ¡  bt_l2ÿp_©t_»ad_»q * pdu = äame -> d©a ; 1987 `´št_f›ld ("HªdË: 0x%4.4x", `Ë16_to_ýu ( pdu -> hªdË )); 1988 } } 1990  $©t_»ad_r¥ (cÚ¡  l2ÿp_äame * äame ) 1992 `´št_hex_f›ld ("V®ue", äame -> d©a , f¿me-> size ); 1993 } } 1995  $©t_»ad_blob_»q (cÚ¡  l2ÿp_äame * äame ) 1997 `´št_f›ld ("HªdË: 0x%4.4x", `g‘_Ë16 ( äame -> d©a )); 1998 `´št_f›ld ("Off£t: 0x%4.4x", `g‘_Ë16 ( äame -> d©a + 2)); 1999 } } 2001  $©t_»ad_blob_r¥ (cÚ¡  l2ÿp_äame * äame ) 2003 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 2004 } } 2006  $©t_»ad_muÉË_»q (cÚ¡  l2ÿp_äame * äame ) 2008  i , couÁ ; 2010 couÁ = äame -> size / 2; 2012  i = 0; i < couÁ ; i++) 2013 `´št_f›ld ("Handle: 0x%4.4x", 2014 `g‘_Ë16 ( äame -> d©a + ( i * 2))); 2015 } } 2017  $©t_»ad_group_ty³_»q (cÚ¡  l2ÿp_äame * äame ) 2019 `´št_hªdË_¿nge ("HªdË„ªge", äame -> d©a ); 2020 `´št_uuid ("A‰ribu‹ grou°ty³", äame -> d©a + 4, f¿me-> size - 4); 2021 } } 2023  $©t_»ad_group_ty³_r¥ (cÚ¡  l2ÿp_äame * äame ) 2025 cÚ¡  bt_l2ÿp_©t_»ad_group_ty³_r¥ * pdu = äame -> d©a ; 2027 `´št_f›ld ("A‰ribu‹ d©¨Ëngth: %d", pdu -> Ëngth ); 2028 `´št_d©a_li¡ ("A‰ribu‹ d©¨li¡", pdu -> Ëngth , 2029 äame -> d©a + 1, f¿me-> size - 1); 2030 } } 2032  $©t_wr™e_»q (cÚ¡  l2ÿp_äame * äame ) 2034 `´št_f›ld ("HªdË: 0x%4.4x", `g‘_Ë16 ( äame -> d©a )); 2035 `´št_hex_f›ld (" D©a", äame -> d©a + 2, f¿me-> size - 2); 2036 } } 2038  $©t_wr™e_r¥ (cÚ¡  l2ÿp_äame * äame ) 2040 } } 2042  $©t_´•¬e_wr™e_»q (cÚ¡  l2ÿp_äame * äame ) 2044 `´št_f›ld ("HªdË: 0x%4.4x", `g‘_Ë16 ( äame -> d©a )); 2045 `´št_f›ld ("Off£t: 0x%4.4x", `g‘_Ë16 ( äame -> d©a + 2)); 2046 `´št_hex_f›ld (" D©a", äame -> d©a + 4, f¿me-> size - 4); 2047 } } 2049  $©t_´•¬e_wr™e_r¥ (cÚ¡  l2ÿp_äame * äame ) 2051 `´št_f›ld ("HªdË: 0x%4.4x", `g‘_Ë16 ( äame -> d©a )); 2052 `´št_f›ld ("Off£t: 0x%4.4x", `g‘_Ë16 ( äame -> d©a + 2)); 2053 `´št_hex_f›ld (" D©a", äame -> d©a + 4, f¿me-> size - 4); 2054 } } 2056  $©t_execu‹_wr™e_»q (cÚ¡  l2ÿp_äame * äame ) 2058 ušt8_t æags = *(ušt8_ˆ*è äame -> d©a ; 2059 cÚ¡ * æags_¡r ; 2061  æags ) { 2063 æags_¡r = "Cancel‡ll…repared writes"; 2066 æags_¡r = "Immediately write‡ll…ending values"; 2069 æags_¡r = "Unknown"; 2073 `´št_f›ld ("FÏgs: % (0x%02x)", æags_¡r , æags ); 2074 } } 2076  $©t_hªdË_v®ue_nÙify (cÚ¡  l2ÿp_äame * äame ) 2078 cÚ¡  bt_l2ÿp_©t_hªdË_v®ue_nÙify * pdu = äame -> d©a ; 2080 `´št_f›ld ("HªdË: 0x%4.4x", `Ë16_to_ýu ( pdu -> hªdË )); 2081 `´št_hex_f›ld (" D©a", äame -> d©a + 2, f¿me-> size - 2); 2082 } } 2084  $©t_hªdË_v®ue_šd (cÚ¡  l2ÿp_äame * äame ) 2086 cÚ¡  bt_l2ÿp_©t_hªdË_v®ue_šd * pdu = äame -> d©a ; 2088 `´št_f›ld ("HªdË: 0x%4.4x", `Ë16_to_ýu ( pdu -> hªdË )); 2089 `´št_hex_f›ld (" D©a", äame -> d©a + 2, f¿me-> size - 2); 2090 } } 2092  $©t_hªdË_v®ue_cÚf (cÚ¡  l2ÿp_äame * äame ) 2094 } } 2096  $©t_wr™e_commªd (cÚ¡  l2ÿp_äame * äame ) 2098 `´št_f›ld ("HªdË: 0x%4.4x", `g‘_Ë16 ( äame -> d©a )); 2099 `´št_hex_f›ld (" D©a", äame -> d©a + 2, f¿me-> size - 2); 2100 } } 2102  s©t_Ýcode_d©a { 2103 ušt8_t mÝcode ; 2104 cÚ¡ * m¡r ; 2105 (* mfunc è(cÚ¡  l2ÿp_äame * mäame ); 2106 ušt8_t msize ; 2107 boÞ mfixed ; 2110 cÚ¡  ©t_Ýcode_d©a g©t_Ýcode_bË [] = { 2112 ©t_”rÜ_»¥Ú£ , 4, Œue }, 2114 ©t_exchªge_mtu_»q , 2, Œue }, 2116 ©t_exchªge_mtu_r¥ , 2, Œue }, 2118 ©t_fšd_šfo_»q , 4, Œue }, 2120 ©t_fšd_šfo_r¥ , 5, çl£ }, 2122 ©t_fšd_by_ty³_v®_»q , 6, çl£ }, 2124 ©t_fšd_by_ty³_v®_r¥ , 4, çl£ }, 2126 ©t_»ad_ty³_»q , 6, çl£ }, 2128 ©t_»ad_ty³_r¥ , 3, çl£ }, 2130 ©t_»ad_»q , 2, Œue }, 2132 ©t_»ad_r¥ , 0, çl£ }, 2134 ©t_»ad_blob_»q , 4, Œue }, 2136 ©t_»ad_blob_r¥ , 0, çl£ }, 2138 ©t_»ad_muÉË_»q , 4, çl£ }, 2141 ©t_»ad_group_ty³_»q , 6, çl£ }, 2143 ©t_»ad_group_ty³_r¥ , 4, çl£ }, 2145 ©t_wr™e_»q , 2, çl£ }, 2147 ©t_wr™e_r¥ , 0, Œue }, 2149 ©t_´•¬e_wr™e_»q , 4, çl£ }, 2151 ©t_´•¬e_wr™e_r¥ , 4, çl£ }, 2153 ©t_execu‹_wr™e_»q , 1, Œue }, 2156 ©t_hªdË_v®ue_nÙify , 2, çl£ }, 2158 ©t_hªdË_v®ue_šd , 2, çl£ }, 2160 ©t_hªdË_v®ue_cÚf , 0, Œue }, 2162 ©t_wr™e_commªd , 2, çl£ }, 2167 cÚ¡ * $©t_Ýcode_to_¡r ( ušt8_t Ýcode ) 2169  i ; 2171  i = 0; ©t_Ýcode_bË [i]. ¡r ; i++) { 2172 ià( ©t_Ýcode_bË [ i ]. Ýcode == opcode) 2173  ©t_Ýcode_bË [ i ]. ¡r ; 2177 } } 2179  $©t_·ck‘ ( ušt16_t šdex , boÞ š , ušt16_ˆ hªdË , 2180 ušt16_t cid , cÚ¡ * d©a , ušt16_ˆ size ) 2182  l2ÿp_äame äame ; 2183 ušt8_t Ýcode = *((cÚ¡ ušt8_ˆ*è d©a ); 2184 cÚ¡  ©t_Ýcode_d©a * Ýcode_d©a = NULL ; 2185 cÚ¡ * Ýcode_cÞÜ , * Ýcode_¡r ; 2186  i ; 2188 ià( size < 1) { 2189 `´št_‹xt ( COLOR_ERROR , "malformed‡ttribute…acket"); 2190 `·ck‘_hexdump ( d©a , size ); 2194  i = 0; ©t_Ýcode_bË [i]. ¡r ; i++) { 2195 ià( ©t_Ýcode_bË [ i ]. Ýcode == opcode) { 2196 Ýcode_d©a = & ©t_Ýcode_bË [ i ]; 2201 ià( Ýcode_d©a ) { 2202 ià( Ýcode_d©a -> func ) { 2203 ià( š ) 2204 Ýcode_cÞÜ = COLOR_MAGENTA ; 2206 Ýcode_cÞÜ = COLOR_BLUE ; 2208 Ýcode_cÞÜ = COLOR_WHITE_BG ; 2209 Ýcode_¡r = Ýcode_d©a -> ¡r ; 2211 Ýcode_cÞÜ = COLOR_WHITE_BG ; 2212 Ýcode_¡r = "Unknown"; 2215 `´št_šd’t (6, Ýcode_cÞÜ , "ATT: ", Ýcode_¡r , COLOR_OFF , 2216 " (0x%2.2xèËÀ%d", Ýcode , size - 1); 2218 ià(! Ýcode_d©a || !Ýcode_d©a-> func ) { 2219 `·ck‘_hexdump ( d©a + 1, size - 1); 2223 ià( Ýcode_d©a -> fixed ) { 2224 ià( size - 1 !ð Ýcode_d©a ->size) { 2225 `´št_‹xt ( COLOR_ERROR , "invalid size"); 2226 `·ck‘_hexdump ( d©a + 1, size - 1); 2230 ià( size - 1 < Ýcode_d©a ->size) { 2231 `´št_‹xt ( COLOR_ERROR , "too short…acket"); 2232 `·ck‘_hexdump ( d©a + 1, size - 1); 2237 `l2ÿp_äame_š™ (& äame , šdex , š , hªdË , cid , d©a + 1, size - 1); 2238 Ýcode_d©a -> `func (& äame ); 2239 } } 2241  $´št_addr (cÚ¡ ušt8_t * addr , ušt8_ˆ addr_ty³ ) 2243 cÚ¡ * ¡r ; 2245  addr_ty³ ) { 2247 `´št_f›ld ("Address: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", 2248 addr [5],‡ddr[4],‡ddr[3], 2249 addr [2],‡ddr[1],‡ddr[0]); 2252 ( addr [5] & 0xc0) >> 6) { 2254 ¡r = "Non-Resolvable"; 2257 ¡r = "Resolvable"; 2260 ¡r = "Static"; 2263 ¡r = "Reserved"; 2267 `´št_f›ld ("Address: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X" 2268 " (%s)", addr [5],‡ddr[4],‡ddr[3], 2269 addr [2],‡ddr[1],‡ddr[0], ¡r ); 2272 `´št_f›ld ("Address: %2.2X-%2.2X-%2.2X-%2.2X-%2.2X-%2.2X", 2273 addr [5],‡ddr[4],‡ddr[3], 2274 addr [2],‡ddr[1],‡ddr[0]); 2277 } } 2279  $´št_addr_ty³ ( ušt8_t addr_ty³ ) 2281 cÚ¡ * ¡r ; 2283  addr_ty³ ) { 2285 ¡r = "Public"; 2288 ¡r = "Random"; 2291 ¡r = "Reserved"; 2295 `´št_f›ld ("Add»s ty³: % (0x%2.2x)", ¡r , addr_ty³ ); 2296 } } 2298  $´št_smp_io_ÿ· ( ušt8_t io_ÿ· ) 2300 cÚ¡ * ¡r ; 2302  io_ÿ· ) { 2304 ¡r = "DisplayOnly"; 2307 ¡r = "DisplayYesNo"; 2310 ¡r = "KeyboardOnly"; 2313 ¡r = "NoInputNoOutput"; 2316 ¡r = "KeyboardDisplay"; 2319 ¡r = "Reserved"; 2323 `´št_f›ld ("IO c­abž™y: % (0x%2.2x)", ¡r , io_ÿ· ); 2324 } } 2326  $´št_smp_oob_d©a ( ušt8_t oob_d©a ) 2328 cÚ¡ * ¡r ; 2330  oob_d©a ) { 2332 ¡r = "Authentication data‚ot…resent"; 2335 ¡r = "Authentication data from„emote device…resent"; 2338 ¡r = "Reserved"; 2342 `´št_f›ld ("OOB d©a: % (0x%2.2x)", ¡r , oob_d©a ); 2343 } } 2345  $´št_smp_auth_»q ( ušt8_t auth_»q ) 2347 cÚ¡ * bÚd , * m™m , * sc , * kp ; 2349  auth_»q & 0x03) { 2351 bÚd = "No bonding"; 2354 bÚd = "Bonding"; 2357 bÚd = "Reserved"; 2361 ià(( auth_»q & 0x04)) 2362 m™m = "MITM"; 2364 m™m = "No MITM"; 2366 ià(( auth_»q & 0x08)) 2367 sc = "SC"; 2369 sc = "Legacy"; 2371 ià(( auth_»q & 0x10)) 2372 kp = "Keypresses"; 2374 kp = "No Keypresses"; 2376 `´št_f›ld ("Authentication„equirement: %s, %s, %s, %s (0x%2.2x)", 2377 bÚd , m™m , sc , kp , auth_»q ); 2378 } } 2380  $´št_smp_key_di¡ (cÚ¡ * Ïb– , ušt8_t di¡ ) 2382  ¡r [27]; 2384 ià(!( di¡ & 0x07)) { 2385 `¡rýy ( ¡r , " "); 2387 ¡r [0] = '\0'; 2388 ià( di¡ & 0x01) 2389 `¡rÿt ( ¡r , "EncKey "); 2390 ià( di¡ & 0x02) 2391 `¡rÿt ( ¡r , "IdKey "); 2392 ià( di¡ & 0x04) 2393 `¡rÿt ( ¡r , "Sign "); 2394 ià( di¡ & 0x08) 2395 `¡rÿt ( ¡r , "LinkKey "); 2398 `´št_f›ld ("%s: %s(0x%2.2x)", Ïb– , ¡r , di¡ ); 2399 } } 2401  $smp_·œšg_»que¡ (cÚ¡  l2ÿp_äame * äame ) 2403 cÚ¡  bt_l2ÿp_smp_·œšg_»que¡ * pdu = äame -> d©a ; 2405 `´št_smp_io_ÿ· ( pdu -> io_ÿ· ); 2406 `´št_smp_oob_d©a ( pdu -> oob_d©a ); 2407 `´št_smp_auth_»q ( pdu -> auth_»q ); 2409 `´št_f›ld ("Maxƒnüy±iÚ key size: %d", pdu -> max_key_size ); 2410 `´št_smp_key_di¡ ("In™ŸtÜ key di¡ributiÚ", pdu -> š™_key_di¡ ); 2411 `´št_smp_key_di¡ ("Re¥Úd” key di¡ributiÚ", pdu -> »¥_key_di¡ ); 2412 } } 2414  $smp_·œšg_»¥Ú£ (cÚ¡  l2ÿp_äame * äame ) 2416 cÚ¡  bt_l2ÿp_smp_·œšg_»¥Ú£ * pdu = äame -> d©a ; 2418 `´št_smp_io_ÿ· ( pdu -> io_ÿ· ); 2419 `´št_smp_oob_d©a ( pdu -> oob_d©a ); 2420 `´št_smp_auth_»q ( pdu -> auth_»q ); 2422 `´št_f›ld ("Maxƒnüy±iÚ key size: %d", pdu -> max_key_size ); 2423 `´št_smp_key_di¡ ("In™ŸtÜ key di¡ributiÚ", pdu -> š™_key_di¡ ); 2424 `´št_smp_key_di¡ ("Re¥Úd” key di¡ributiÚ", pdu -> »¥_key_di¡ ); 2425 } } 2427  $smp_·œšg_cÚfœm (cÚ¡  l2ÿp_äame * äame ) 2429 cÚ¡  bt_l2ÿp_smp_·œšg_cÚfœm * pdu = äame -> d©a ; 2431 `´št_hex_f›ld ("CÚfim v®ue", pdu -> v®ue , 16); 2432 } } 2434  $smp_·œšg_¿ndom (cÚ¡  l2ÿp_äame * äame ) 2436 cÚ¡  bt_l2ÿp_smp_·œšg_¿ndom * pdu = äame -> d©a ; 2438 `´št_hex_f›ld ("Rªdom v®ue", pdu -> v®ue , 16); 2439 } } 2441  $smp_·œšg_çžed (cÚ¡  l2ÿp_äame * äame ) 2443 cÚ¡  bt_l2ÿp_smp_·œšg_çžed * pdu = äame -> d©a ; 2444 cÚ¡ * ¡r ; 2446  pdu -> »asÚ ) { 2448 ¡r = "Passkeyƒntry failed"; 2451 ¡r = "OOB‚ot‡vailable"; 2454 ¡r = "Authentication„equirements"; 2457 ¡r = "Confirm value failed"; 2460 ¡r = "Pairing‚ot supported"; 2463 ¡r = "Encryption key size"; 2466 ¡r = "Command‚ot supported"; 2469 ¡r = "Unspecified„eason"; 2472 ¡r = "Repeated‡ttempts"; 2475 ¡r = "Invalid…arameters"; 2478 ¡r = "DHKey check failed"; 2481 ¡r = "Numeric comparison failed"; 2484 ¡r = "BR/EDR…airing in…rogress"; 2487 ¡r = "Cross-transport Key Derivation/Generation‚ot‡llowed"; 2490 ¡r = "Reserved"; 2494 `´št_f›ld ("R—sÚ: % (0x%2.2x)", ¡r , pdu -> »asÚ ); 2495 } } 2497  $smp_’üy±_šfo (cÚ¡  l2ÿp_äame * äame ) 2499 cÚ¡  bt_l2ÿp_smp_’üy±_šfo * pdu = äame -> d©a ; 2501 `´št_hex_f›ld ("LÚg”m key", pdu -> Ék , 16); 2502 } } 2504  $smp_ma¡”_id’t (cÚ¡  l2ÿp_äame * äame ) 2506 cÚ¡  bt_l2ÿp_smp_ma¡”_id’t * pdu = äame -> d©a ; 2508 `´št_f›ld ("EDIV: 0x%4.4x", `Ë16_to_ýu ( pdu -> ediv )); 2509 `´št_f›ld ("Rªd: 0x%16.16" PRIx64 , `Ë64_to_ýu ( pdu -> ¿nd )); 2510 } } 2512  $smp_id’t_šfo (cÚ¡  l2ÿp_äame * äame ) 2514 cÚ¡  bt_l2ÿp_smp_id’t_šfo * pdu = äame -> d©a ; 2516 `´št_hex_f›ld ("Id’t™y„esÞvšg key", pdu -> œk , 16); 2518 `keys_upd©e_id’t™y_key ( pdu -> œk ); 2519 } } 2521  $smp_id’t_addr_šfo (cÚ¡  l2ÿp_äame * äame ) 2523 cÚ¡  bt_l2ÿp_smp_id’t_addr_šfo * pdu = äame -> d©a ; 2525 `´št_addr_ty³ ( pdu -> addr_ty³ ); 2526 `´št_addr ( pdu -> addr ,…du-> addr_ty³ ); 2528 `keys_upd©e_id’t™y_addr ( pdu -> addr ,…du-> addr_ty³ ); 2529 } } 2531  $smp_signšg_šfo (cÚ¡  l2ÿp_äame * äame ) 2533 cÚ¡  bt_l2ÿp_smp_signšg_šfo * pdu = äame -> d©a ; 2535 `´št_hex_f›ld ("SigÇtu» key", pdu -> c¤k , 16); 2536 } } 2538  $smp_£cur™y_»que¡ (cÚ¡  l2ÿp_äame * äame ) 2540 cÚ¡  bt_l2ÿp_smp_£cur™y_»que¡ * pdu = äame -> d©a ; 2542 `´št_smp_auth_»q ( pdu -> auth_»q ); 2543 } } 2545  $smp_·œšg_public_key (cÚ¡  l2ÿp_äame * äame ) 2547 cÚ¡  bt_l2ÿp_smp_public_key * pdu = äame -> d©a ; 2549 `´št_hex_f›ld ("X", pdu -> x , 32); 2550 `´št_hex_f›ld ("Y", pdu -> y , 32); 2551 } } 2553  $smp_·œšg_dhkey_check (cÚ¡  l2ÿp_äame * äame ) 2555 cÚ¡  bt_l2ÿp_smp_dhkey_check * pdu = äame -> d©a ; 2557 `´št_hex_f›ld ("E", pdu -> e , 16); 2558 } } 2560  $smp_·œšg_key´ess_nÙifiÿtiÚ (cÚ¡  l2ÿp_äame * äame ) 2562 cÚ¡  bt_l2ÿp_smp_key´ess_nÙify * pdu = äame -> d©a ; 2563 cÚ¡ * ¡r ; 2565  pdu -> ty³ ) { 2567 ¡r = "Passkeyƒntry started"; 2570 ¡r = "Passkey digitƒntered"; 2573 ¡r = "Passkey digitƒrased"; 2576 ¡r = "Passkey cleared"; 2579 ¡r = "Passkeyƒntry completed"; 2582 ¡r = "Reserved"; 2586 `´št_f›ld ("Ty³: % (0x%2.2x)", ¡r , pdu -> ty³ ); 2587 } } 2589  ssmp_Ýcode_d©a { 2590 ušt8_t mÝcode ; 2591 cÚ¡ * m¡r ; 2592 (* mfunc è(cÚ¡  l2ÿp_äame * mäame ); 2593 ušt8_t msize ; 2594 boÞ mfixed ; 2597 cÚ¡  smp_Ýcode_d©a gsmp_Ýcode_bË [] = { 2599 smp_·œšg_»que¡ , 6, Œue }, 2601 smp_·œšg_»¥Ú£ , 6, Œue }, 2603 smp_·œšg_cÚfœm , 16, Œue }, 2605 smp_·œšg_¿ndom , 16, Œue }, 2607 smp_·œšg_çžed , 1, Œue }, 2609 smp_’üy±_šfo , 16, Œue }, 2611 smp_ma¡”_id’t , 10, Œue }, 2613 smp_id’t_šfo , 16, Œue }, 2615 smp_id’t_addr_šfo , 7, Œue }, 2617 smp_signšg_šfo , 16, Œue }, 2619 smp_£cur™y_»que¡ , 1, Œue }, 2621 smp_·œšg_public_key , 64, Œue }, 2623 smp_·œšg_dhkey_check , 16, Œue }, 2625 smp_·œšg_key´ess_nÙifiÿtiÚ , 1, Œue }, 2629  $smp_·ck‘ ( ušt16_t šdex , boÞ š , ušt16_ˆ hªdË , 2630 ušt16_t cid , cÚ¡ * d©a , ušt16_ˆ size ) 2632  l2ÿp_äame äame ; 2633 ušt8_t Ýcode = *((cÚ¡ ušt8_ˆ*è d©a ); 2634 cÚ¡  smp_Ýcode_d©a * Ýcode_d©a = NULL ; 2635 cÚ¡ * Ýcode_cÞÜ , * Ýcode_¡r ; 2636  i ; 2638 ià( size < 1) { 2639 `´št_‹xt ( COLOR_ERROR , "malformed‡ttribute…acket"); 2640 `·ck‘_hexdump ( d©a , size ); 2644  i = 0; smp_Ýcode_bË [i]. ¡r ; i++) { 2645 ià( smp_Ýcode_bË [ i ]. Ýcode == opcode) { 2646 Ýcode_d©a = & smp_Ýcode_bË [ i ]; 2651 ià( Ýcode_d©a ) { 2652 ià( Ýcode_d©a -> func ) { 2653 ià( š ) 2654 Ýcode_cÞÜ = COLOR_MAGENTA ; 2656 Ýcode_cÞÜ = COLOR_BLUE ; 2658 Ýcode_cÞÜ = COLOR_WHITE_BG ; 2659 Ýcode_¡r = Ýcode_d©a -> ¡r ; 2661 Ýcode_cÞÜ = COLOR_WHITE_BG ; 2662 Ýcode_¡r = "Unknown"; 2665 `´št_šd’t (6, Ýcode_cÞÜ , cid == 0x0006 ? "SMP: " : "BR/EDR SMP: ", 2666 Ýcode_¡r , COLOR_OFF , " (0x%2.2x)†en %d", 2667 Ýcode , size - 1); 2669 ià(! Ýcode_d©a || !Ýcode_d©a-> func ) { 2670 `·ck‘_hexdump ( d©a + 1, size - 1); 2674 ià( Ýcode_d©a -> fixed ) { 2675 ià( size - 1 !ð Ýcode_d©a ->size) { 2676 `´št_‹xt ( COLOR_ERROR , "invalid size"); 2677 `·ck‘_hexdump ( d©a + 1, size - 1); 2681 ià( size - 1 < Ýcode_d©a ->size) { 2682 `´št_‹xt ( COLOR_ERROR , "too short…acket"); 2683 `·ck‘_hexdump ( d©a + 1, size - 1); 2688 `l2ÿp_äame_š™ (& äame , šdex , š , hªdË , cid , d©a + 1, size - 1); 2689 Ýcode_d©a -> `func (& äame ); 2690 } } 2692  $l2ÿp_äame ( ušt16_t šdex , boÞ š , ušt16_ˆ hªdË , 2693 ušt16_t cid , cÚ¡ * d©a , ušt16_ˆ size ) 2695  l2ÿp_äame äame ; 2697  cid ) { 2699 `b»dr_sig_·ck‘ ( šdex , š , hªdË , cid , d©a , size ); 2702 `cÚÆess_·ck‘ ( šdex , š , hªdË , cid , d©a , size ); 2705 `amp_·ck‘ ( šdex , š , hªdË , cid , d©a , size ); 2708 `©t_·ck‘ ( šdex , š , hªdË , cid , d©a , size ); 2711 `Ë_sig_·ck‘ ( šdex , š , hªdË , cid , d©a , size ); 2715 `smp_·ck‘ ( šdex , š , hªdË , cid , d©a , size ); 2718 `l2ÿp_äame_š™ (& äame , šdex , š , hªdË , cid , d©a , size ); 2720 `´št_šd’t (6, COLOR_CYAN , "ChªÃl:", "", COLOR_OFF , 2722 cid , size , äame . psm , 2723 äame . mode , f¿me. chª ); 2725  äame . psm ) { 2727 `sdp_·ck‘ (& äame ); 2730 `rfcomm_·ck‘ (& äame ); 2733 `©t_·ck‘ ( šdex , š , hªdË , cid , d©a , size ); 2737 `avùp_·ck‘ (& äame ); 2740 `·ck‘_hexdump ( d©a , size ); 2745 } } 2747  $l2ÿp_·ck‘ ( ušt16_t šdex , boÞ š , ušt16_ˆ hªdË , ušt8_t æags , 2748 cÚ¡ * d©a , ušt16_t size ) 2750 cÚ¡  bt_l2ÿp_hdr * hdr = d©a ; 2751 ušt16_t Ën , cid ; 2753 ià( šdex > MAX_INDEX - 1) { 2754 `´št_‹xt ( COLOR_ERROR , "controller indexoo†arge"); 2755 `·ck‘_hexdump ( d©a , size ); 2759  æags ) { 2762 ià( šdex_li¡ [ šdex ][ š ]. äag_Ën ) { 2763 `´št_‹xt ( COLOR_ERROR , "unexpected start frame"); 2764 `·ck‘_hexdump ( d©a , size ); 2765 `þ—r_äagm’t_bufãr ( šdex , š ); 2769 ià( size < (* hdr )) { 2770 `´št_‹xt ( COLOR_ERROR , "frameoo short"); 2771 `·ck‘_hexdump ( d©a , size ); 2775 Ën = `Ë16_to_ýu ( hdr ->len); 2776 cid = `Ë16_to_ýu ( hdr ->cid); 2778 d©a +ð(* hdr ); 2779 size -ð(* hdr ); 2781 ià( Ën =ð size ) { 2783 `l2ÿp_äame ( šdex , š , hªdË , cid , d©a , Ën ); 2787 ià( size > Ën ) { 2788 `´št_‹xt ( COLOR_ERROR , "frameoo†ong"); 2789 `·ck‘_hexdump ( d©a , size ); 2793 šdex_li¡ [ šdex ][ š ]. äag_buf = `m®loc ( Ën ); 2794 ià(! šdex_li¡ [ šdex ][ š ]. äag_buf ) { 2795 `´št_‹xt ( COLOR_ERROR , "failed buffer‡llocation"); 2796 `·ck‘_hexdump ( d©a , size ); 2800 `memýy ( šdex_li¡ [ šdex ][ š ]. äag_buf , d©a , size ); 2801 šdex_li¡ [ šdex ][ š ]. äag_pos = size ; 2802 šdex_li¡ [ šdex ][ š ]. äag_Ën = Ën - size ; 2803 šdex_li¡ [ šdex ][ š ]. äag_cid = cid ; 2807 ià(! šdex_li¡ [ šdex ][ š ]. äag_Ën ) { 2808 `´št_‹xt ( COLOR_ERROR , "unexpected continuation"); 2809 `·ck‘_hexdump ( d©a , size ); 2813 ià( size > šdex_li¡ [ šdex ][ š ]. äag_Ën ) { 2814 `´št_‹xt ( COLOR_ERROR , "fragmentoo†ong"); 2815 `·ck‘_hexdump ( d©a , size ); 2816 `þ—r_äagm’t_bufãr ( šdex , š ); 2820 `memýy ( šdex_li¡ [ šdex ][ š ]. äag_buf + 2821 šdex_li¡ [ šdex ][ š ]. äag_pos , d©a , size ); 2822 šdex_li¡ [ šdex ][ š ]. äag_pos +ð size ; 2823 šdex_li¡ [ šdex ][ š ]. äag_Ën -ð size ; 2825 ià(! šdex_li¡ [ šdex ][ š ]. äag_Ën ) { 2827 `l2ÿp_äame ( šdex , š , hªdË , 2828 šdex_li¡ [ šdex ][ š ]. äag_cid , 2829 šdex_li¡ [ šdex ][ š ]. äag_buf , 2830 šdex_li¡ [ šdex ][ š ]. äag_pos ); 2831 `þ—r_äagm’t_bufãr ( šdex , š ); 2837 ià( šdex_li¡ [ šdex ][ š ]. äag_Ën ) { 2838 `´št_‹xt ( COLOR_ERROR , "unexpected complete frame"); 2839 `·ck‘_hexdump ( d©a , size ); 2840 `þ—r_äagm’t_bufãr ( šdex , š ); 2844 ià( size < (* hdr )) { 2845 `´št_‹xt ( COLOR_ERROR , "frameoo short"); 2846 `·ck‘_hexdump ( d©a , size ); 2850 Ën = `Ë16_to_ýu ( hdr ->len); 2851 cid = `Ë16_to_ýu ( hdr ->cid); 2853 d©a +ð(* hdr ); 2854 size -ð(* hdr ); 2856 ià( Ën !ð size ) { 2857 `´št_‹xt ( COLOR_ERROR , "wrong frame size"); 2858 `·ck‘_hexdump ( d©a , size ); 2863 `l2ÿp_äame ( šdex , š , hªdË , cid , d©a , Ën ); 2867 `´št_‹xt ( COLOR_ERROR , "invalid…acket flags (0x%2.2x)", 2868 æags ); 2869 `·ck‘_hexdump ( d©a , size ); 2872 } } @monitor/l2cap.h 25  ~<¡dšt.h > 26  ~<¡dboÞ.h > 28  sl2ÿp_äame { 29 ušt16_t mšdex ; 30 boÞ mš ; 31 ušt16_t mhªdË ; 32 ušt16_t mcid ; 33 ušt16_t mpsm ; 34 ušt16_t mchª ; 35 ušt8_t mmode ; 36 cÚ¡ * md©a ; 37 ušt16_t msize ; 40  šlše  $l2ÿp_äame_puÎ ( l2ÿp_äame * äame , 41 cÚ¡  l2ÿp_äame * sourû , ušt16_t Ën ) 43 ià( äame !ð sourû ) { 44 äame -> šdex = sourû ->index; 45 äame -> š = sourû ->in; 46 äame -> hªdË = sourû ->handle; 47 äame -> cid = sourû ->cid; 48 äame -> psm = sourû ->psm; 49 äame -> chª = sourû ->chan; 50 äame -> mode = sourû ->mode; 53 äame -> d©a = sourû ->d©¨+ Ën ; 54 äame -> size = sourû ->siz- Ën ; 55 } } 57  šlše boÞ $l2ÿp_äame_g‘_u8 ( l2ÿp_äame * äame , ušt8_t * v®ue ) 59 ià( äame -> size < (* v®ue )) 60  çl£ ; 62 ià( v®ue ) 63 * v®ue = *(( ušt8_t *è äame -> d©a ); 65 `l2ÿp_äame_puÎ ( äame , f¿me, (* v®ue )); 67  Œue ; 68 } } 70  šlše boÞ $l2ÿp_äame_g‘_be16 ( l2ÿp_äame * äame , 71 ušt16_t * v®ue ) 73 ià( äame -> size < (* v®ue )) 74  çl£ ; 76 ià( v®ue ) 77 * v®ue = `g‘_be16 ( äame -> d©a ); 79 `l2ÿp_äame_puÎ ( äame , f¿me, (* v®ue )); 81  Œue ; 82 } } 84  šlše boÞ $l2ÿp_äame_g‘_Ë16 ( l2ÿp_äame * äame , 85 ušt16_t * v®ue ) 87 ià( äame -> size < (* v®ue )) 88  çl£ ; 90 ià( v®ue ) 91 * v®ue = `g‘_Ë16 ( äame -> d©a ); 93 `l2ÿp_äame_puÎ ( äame , f¿me, (* v®ue )); 95  Œue ; 96 } } 98  šlše boÞ $l2ÿp_äame_g‘_be32 ( l2ÿp_äame * äame , 99 ušt32_t * v®ue ) 101 ià( äame -> size < (* v®ue )) 102  çl£ ; 104 ià( v®ue ) 105 * v®ue = `g‘_be32 ( äame -> d©a ); 107 `l2ÿp_äame_puÎ ( äame , f¿me, (* v®ue )); 109  Œue ; 110 } } 112  šlše boÞ $l2ÿp_äame_g‘_Ë32 ( l2ÿp_äame * äame , 113 ušt32_t * v®ue ) 115 ià( äame -> size < (* v®ue )) 116  çl£ ; 118 ià( v®ue ) 119 * v®ue = `g‘_Ë32 ( äame -> d©a ); 121 `l2ÿp_äame_puÎ ( äame , f¿me, (* v®ue )); 123  Œue ; 124 } } 126  šlše boÞ $l2ÿp_äame_g‘_be64 ( l2ÿp_äame * äame , 127 ušt64_t * v®ue ) 129 ià( äame -> size < (* v®ue )) 130  çl£ ; 132 ià( v®ue ) 133 * v®ue = `g‘_be64 ( äame -> d©a ); 135 `l2ÿp_äame_puÎ ( äame , f¿me, (* v®ue )); 137  Œue ; 138 } } 140  šlše boÞ $l2ÿp_äame_g‘_Ë64 ( l2ÿp_äame * äame , 141 ušt64_t * v®ue ) 143 ià( äame -> size < (* v®ue )) 144  çl£ ; 146 ià( v®ue ) 147 * v®ue = `g‘_Ë64 ( äame -> d©a ); 149 `l2ÿp_äame_puÎ ( äame , f¿me, (* v®ue )); 151  Œue ; 152 } } 154  l2ÿp_·ck‘ ( ušt16_t šdex , boÞ š , ušt16_ˆ hªdË , ušt8_t æags , 155 cÚ¡ * d©a , ušt16_t size ); 157  rfcomm_·ck‘ (cÚ¡  l2ÿp_äame * äame ); @monitor/ll.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<š‰y³s.h > 32  ~"¤c/sh¬ed/utž.h " 33  ~"di¥Ïy.h " 34  ~"·ck‘.h " 35  ~"üc.h " 36  ~"bt.h " 37  ~"Î.h " 39  #COLOR_OPCODE COLOR_MAGENTA ) 40  #COLOR_OPCODE_UNKNOWN COLOR_WHITE_BG ) 42  #MAX_CHANNEL 16 ) 44  schªÃl_d©a { 45 ušt32_t macûss_addr ; 46 ušt32_t müc_š™ ; 49  chªÃl_d©a gchªÃl_li¡ [ MAX_CHANNEL ]; 51  $£t_üc_š™ ( ušt32_t acûss_addr , ušt32_ˆ üc_š™ ) 53  i ; 55  i = 0; i < MAX_CHANNEL ; i++) { 56 ià( chªÃl_li¡ [ i ]. acûss_addr == 0x00000000 || 57 chªÃl_li¡ [ i ]. acûss_addr ==‡ccess_addr) { 58 chªÃl_li¡ [ i ]. acûss_addr =‡ccess_addr; 59 chªÃl_li¡ [ i ]. üc_š™ = crc_init; 63 } } 65  ušt32_t $g‘_üc_š™ ( ušt32_t acûss_addr ) 67  i ; 69  i = 0; i < MAX_CHANNEL ; i++) { 70 ià( chªÃl_li¡ [ i ]. acûss_addr ==‡ccess_addr) 71  chªÃl_li¡ [ i ]. üc_š™ ; 75 } } 77  $adv”tisšg_·ck‘ (cÚ¡ * d©a , ušt8_t size ) 79 cÚ¡ ušt8_t * ±r = d©a ; 80 ušt8_t pdu_ty³ , Ëngth , wš_size , hÝ , sÿ ; 81 boÞ tx_add , rx_add ; 82 ušt32_t acûss_addr , üc_š™ ; 83 ušt16_t wš_off£t , š‹rv® , Ï‹ncy , timeout ; 84 cÚ¡ * ¡r ; 86 ià( size < 2) { 87 `´št_‹xt ( COLOR_ERROR , "packetoo short"); 88 `·ck‘_hexdump ( d©a , size ); 92 pdu_ty³ = ±r [0] & 0x0f; 93 tx_add = !!( ±r [0] & 0x40); 94 rx_add = !!( ±r [0] & 0x80); 95 Ëngth = ±r [1] & 0x3f; 97  pdu_ty³ ) { 99 ¡r = "ADV_IND"; 102 ¡r = "ADV_DIRECT_IND"; 105 ¡r = "ADV_NONCONN_IND"; 108 ¡r = "SCAN_REQ"; 111 ¡r = "SCAN_RSP"; 114 ¡r = "CONNECT_REQ"; 117 ¡r = "ADV_SCAN_IND"; 120 ¡r = "Reserved"; 124 `´št_f›ld ("Ty³: % (0x%2.2x)", ¡r , pdu_ty³ ); 125 `´št_f›ld ("TxAdd: %u", tx_add ); 126 `´št_f›ld ("RxAdd: %u", rx_add ); 127 `´št_f›ld ("L’gth: %u", Ëngth ); 129 ià( Ëngth !ð size - 2) { 130 `´št_‹xt ( COLOR_ERROR , "packet size mismatch"); 131 `·ck‘_hexdump ( d©a + 2, size - 2); 135  pdu_ty³ ) { 140 ià( Ëngth < 6) { 141 `´št_‹xt ( COLOR_ERROR , "payloadoo short"); 142 `·ck‘_hexdump ( d©a + 2, Ëngth ); 146 `·ck‘_´št_addr ("Adv”ti£¸add»ss", d©a + 2, tx_add ); 147 `·ck‘_´št_ad ( d©a + 8, Ëngth - 6); 151 ià( Ëngth < 12) { 152 `´št_‹xt ( COLOR_ERROR , "payloadoo short"); 153 `·ck‘_hexdump ( d©a + 2, Ëngth ); 157 `·ck‘_´št_addr ("Adv”ti£¸add»ss", d©a + 2, tx_add ); 158 `·ck‘_´št_addr ("In™™©Ü‡dd»ss", d©a + 8, rx_add ); 162 ià( Ëngth < 12) { 163 `´št_‹xt ( COLOR_ERROR , "payloadoo short"); 164 `·ck‘_hexdump ( d©a + 2, Ëngth ); 168 `·ck‘_´št_addr ("Sÿ”‡dd»ss", d©a + 2, tx_add ); 169 `·ck‘_´št_addr ("Adv”ti£¸add»ss", d©a + 8, rx_add ); 173 ià( Ëngth < 34) { 174 `´št_‹xt ( COLOR_ERROR , "payloadoo short"); 175 `·ck‘_hexdump ( d©a + 2, Ëngth ); 179 `·ck‘_´št_addr ("In™™©Ü‡dd»ss", d©a + 2, tx_add ); 180 `·ck‘_´št_addr ("Adv”ti£¸add»ss", d©a + 8, rx_add ); 182 acûss_addr = ±r [14] |…tr[15] << 8 | 183 ±r [16] << 16 |…tr[17] << 24; 184 üc_š™ = ±r [18] |…tr[19] << 8 |…tr[20] << 16; 186 `´št_f›ld ("Acûs add»ss: 0x%8.8x", acûss_addr ); 187 `´št_f›ld ("CRC in™: 0x%6.6x", üc_š™ ); 189 `£t_üc_š™ ( acûss_addr , `üc24_b™_»v”£ ( üc_š™ )); 191 wš_size = ±r [21]; 192 wš_off£t = ±r [22] |…tr[23] << 8; 193 š‹rv® = ±r [24] |…tr[25] << 8; 194 Ï‹ncy = ±r [26] |…tr[27] << 8; 195 timeout = ±r [28] |…tr[29] << 8; 197 `´št_f›ld ("T¿nsm™ wšdow size: %u", wš_size ); 198 `´št_f›ld ("T¿nsm™ wšdow off£t: %u", wš_off£t ); 199 `´št_f›ld ("CÚÃùiÚ iÁ”v®: %u", š‹rv® ); 200 `´št_f›ld ("CÚÃùiÚ sÏvÏ‹ncy: %u", Ï‹ncy ); 201 `´št_f›ld ("CÚÃùiÚ su³rvisiÚimeout: %u", timeout ); 203 `·ck‘_´št_chªÃl_m­_Î ( ±r + 30); 205 hÝ = ±r [35] & 0x1f; 206 sÿ = ( ±r [35] & 0xe0) >> 5; 208  sÿ ) { 210 ¡r = "251…pmo 500…pm"; 213 ¡r = "151…pmo 250…pm"; 216 ¡r = "101…pmo 150ppm"; 219 ¡r = "76…pmo 100…pm"; 222 ¡r = "51…pmo 75…pm"; 225 ¡r = "31…pmo 50…pm"; 228 ¡r = "21…pmo 30…pm"; 231 ¡r = "0…pmo 20…pm"; 234 ¡r = "Invalid"; 238 `´št_f›ld ("HÝ inüem’t: %u", hÝ ); 239 `´št_f›ld ("SË• clock‡ccu¿cy: % (%u)", ¡r , sÿ ); 243 `·ck‘_hexdump ( d©a + 2, Ëngth ); 246 } } 248  $d©a_·ck‘ (cÚ¡ * d©a , ušt8_t size ) 250 cÚ¡ ušt8_t * ±r = d©a ; 251 ušt8_t Îid , Ëngth ; 252 boÞ Ã¢ , ¢ , md ; 253 cÚ¡ * ¡r ; 255 ià( size < 2) { 256 `´št_‹xt ( COLOR_ERROR , "packetoo short"); 257 `·ck‘_hexdump ( d©a , size ); 261 Îid = ±r [0] & 0x03; 262 â = !!( ±r [0] & 0x04); 263 ¢ = !!( ±r [0] & 0x08); 264 md = !!( ±r [0] & 0x10); 265 Ëngth = ±r [1] & 0x1f; 267  Îid ) { 269 ià( Ëngth > 0) 270 ¡r = "Continuation fragement of L2CAP message"; 272 ¡r = "Empty message"; 275 ¡r = "Start of L2CAP message"; 278 ¡r = "Control"; 281 ¡r = "Reserved"; 285 `´št_f›ld ("LLID: % (0x%2.2x)", ¡r , Îid ); 286 `´št_f›ld ("Nexˆex³ùed sequ’û‚umb”: %u", â ); 287 `´št_f›ld ("Sequ’û‚umb”: %u", ¢ ); 288 `´št_f›ld ("MÜd©a: %u", md ); 289 `´št_f›ld ("L’gth: %u", Ëngth ); 291  Îid ) { 293 `Îý_·ck‘ ( d©a + 2, size - 2); 297 `·ck‘_hexdump ( d©a + 2, size - 2); 300 } } 302  $Î_·ck‘ ( ušt16_t äequ’cy , cÚ¡ * d©a , ušt8_t size ) 304 cÚ¡  bt_Î_hdr * hdr = d©a ; 305 ušt8_t chªÃl = ( äequ’cy - 2402) / 2; 306 ušt32_t acûss_addr ; 307  acûss_¡r [12]; 308 cÚ¡ * chªÃl_Ïb– , * chªÃl_cÞÜ ; 309 cÚ¡ ušt8_t * pdu_d©a ; 310 ušt8_t pdu_Ën ; 311 ušt32_t pdu_üc , üc , üc_š™ ; 313 ià( size < (* hdr )) { 314 `´št_‹xt ( COLOR_ERROR , "packet missing header"); 315 `·ck‘_hexdump ( d©a , size ); 319 ià( size < (* hdr ) + 3) { 320 `´št_‹xt ( COLOR_ERROR , "packet missing checksum"); 321 `·ck‘_hexdump ( d©a , size ); 325 ià( hdr -> ´—mbË != 0xaa && hdr->preamble != 0x55) { 326 `´št_‹xt ( COLOR_ERROR , "invalid…reamble"); 327 `·ck‘_hexdump ( d©a , size ); 331 acûss_addr = `Ë32_to_ýu ( hdr ->access_addr); 333 pdu_d©a = d©a + (* hdr ); 334 pdu_Ën = size - (* hdr ) - 3; 336 pdu_üc = pdu_d©a [ pdu_Ën + 0] | (pdu_data[pdu_len + 1] << 8) | 337 ( pdu_d©a [ pdu_Ën + 2] << 16); 339 ià( acûss_addr == 0x8e89bed6) { 340 chªÃl_Ïb– = "Advertising channel: "; 341 chªÃl_cÞÜ = COLOR_MAGENTA ; 343 chªÃl_Ïb– = "Data channel: "; 344 chªÃl_cÞÜ = COLOR_CYAN ; 347 `¥rštf ( acûss_¡r , "0x%8.8x", acûss_addr ); 349 `´št_šd’t (6, chªÃl_cÞÜ , chªÃl_Ïb– , acûss_¡r , COLOR_OFF , 350 " (chªÃÈ%dèËÀ%d crø0x%6.6x", chªÃl , pdu_Ën , pdu_üc ); 352 ià( acûss_addr == 0x8e89bed6) 353 üc_š™ = 0xaaaaaa; 355 üc_š™ = `g‘_üc_š™ ( acûss_addr ); 357 ià( üc_š™ ) { 358 üc = `üc24_ÿlcuÏ‹ ( üc_š™ , pdu_d©a , pdu_Ën ); 360 ià( üc !ð pdu_üc ) { 361 `´št_‹xt ( COLOR_ERROR , "invalid checksum"); 362 `·ck‘_hexdump ( pdu_d©a , pdu_Ën ); 366 `´št_‹xt ( COLOR_ERROR , "unknown‡ccess‡ddress"); 368 ià( acûss_addr == 0x8e89bed6) 369 `adv”tisšg_·ck‘ ( pdu_d©a , pdu_Ën ); 371 `d©a_·ck‘ ( pdu_d©a , pdu_Ën ); 372 } } 374  $nuÎ_pdu (cÚ¡ * d©a , ušt8_t size ) 376 } } 378  $cÚn_upd©e_»q (cÚ¡ * d©a , ušt8_t size ) 380 cÚ¡  bt_Î_cÚn_upd©e_»q * pdu = d©a ; 382 `´št_f›ld ("T¿nsm™ wšdow size: %u", pdu -> wš_size ); 383 `´št_f›ld ("T¿nsm™ wšdow off£t: %u", `Ë16_to_ýu ( pdu -> wš_off£t )); 384 `´št_f›ld ("CÚÃùiÚ iÁ”v®: %u", `Ë16_to_ýu ( pdu -> š‹rv® )); 385 `´št_f›ld ("CÚÃùiÚ sÏvÏ‹ncy: %u", `Ë16_to_ýu ( pdu -> Ï‹ncy )); 386 `´št_f›ld ("CÚÃùiÚ su³rvisiÚimeout: %u", `Ë16_to_ýu ( pdu -> timeout )); 387 `´št_f›ld ("CÚÃùiÚ in¡ªt: %u", `Ë16_to_ýu ( pdu -> š¡ªt )); 388 } } 390  $chªÃl_m­_»q (cÚ¡ * d©a , ušt8_t size ) 392 cÚ¡  bt_Î_chªÃl_m­_»q * pdu = d©a ; 394 `·ck‘_´št_chªÃl_m­_Î ( pdu -> m­ ); 395 `´št_f›ld ("CÚÃùiÚ in¡ªt: %u", `Ë16_to_ýu ( pdu -> š¡ªt )); 396 } } 398  $‹rmš©e_šd (cÚ¡ * d©a , ušt8_t size ) 400 cÚ¡  bt_Î_‹rmš©e_šd * pdu = d©a ; 402 `·ck‘_´št_”rÜ ("E¼Ü code", pdu -> ”rÜ ); 403 } } 405  $’c_»q (cÚ¡ * d©a , ušt8_t size ) 407 cÚ¡  bt_Î_’c_»q * pdu = d©a ; 409 `´št_f›ld ("Rªd: 0x%16.16" PRIx64 , `Ë64_to_ýu ( pdu -> ¿nd )); 410 `´št_f›ld ("EDIV: 0x%4.4x", `Ë16_to_ýu ( pdu -> ediv )); 411 `´št_f›ld ("SKD (ma¡”): 0x%16.16" PRIx64 , `Ë64_to_ýu ( pdu -> skd )); 412 `´št_f›ld ("IV (ma¡”): 0x%8.8x", `Ë32_to_ýu ( pdu -> iv )); 413 } } 415  $’c_r¥ (cÚ¡ * d©a , ušt8_t size ) 417 cÚ¡  bt_Î_’c_r¥ * pdu = d©a ; 419 `´št_f›ld ("SKD (¦ave): 0x%16.16" PRIx64 , `Ë64_to_ýu ( pdu -> skd )); 420 `´št_f›ld ("IV (¦ave): 0x%8.8x", `Ë32_to_ýu ( pdu -> iv )); 421 } } 423 cÚ¡ * Ýcode_to_¡ršg ( ušt8_t Ýcode ); 425  $unknown_r¥ (cÚ¡ * d©a , ušt8_t size ) 427 cÚ¡  bt_Î_unknown_r¥ * pdu = d©a ; 429 `´št_f›ld ("Unknownype: %s (0x%2.2x)", 430 `Ýcode_to_¡ršg ( pdu -> ty³ ),…du->type); 431 } } 433  $ã©u»_»q (cÚ¡ * d©a , ušt8_t size ) 435 cÚ¡  bt_Î_ã©u»_»q * pdu = d©a ; 437 `·ck‘_´št_ã©u»s_Î ( pdu -> ã©u»s ); 438 } } 440  $ã©u»_r¥ (cÚ¡ * d©a , ušt8_t size ) 442 cÚ¡  bt_Î_ã©u»_r¥ * pdu = d©a ; 444 `·ck‘_´št_ã©u»s_Î ( pdu -> ã©u»s ); 445 } } 447  $v”siÚ_šd (cÚ¡ * d©a , ušt8_t size ) 449 cÚ¡  bt_Î_v”siÚ_šd * pdu = d©a ; 451 `·ck‘_´št_v”siÚ ("V”siÚ", pdu -> v”siÚ , 452 "Subv”siÚ", `Ë16_to_ýu ( pdu -> subv”siÚ )); 453 `·ck‘_´št_com·ny ("Com·ny", `Ë16_to_ýu ( pdu -> com·ny )); 454 } } 456  $»jeù_šd (cÚ¡ * d©a , ušt8_t size ) 458 cÚ¡  bt_Î_»jeù_šd * pdu = d©a ; 460 `·ck‘_´št_”rÜ ("E¼Ü code", pdu -> ”rÜ ); 461 } } 463  sÎý_d©a { 464 ušt8_t mÝcode ; 465 cÚ¡ * m¡r ; 466 (* mfunc è(cÚ¡ * md©a , ušt8_t msize ); 467 ušt8_t msize ; 468 boÞ mfixed ; 471 cÚ¡  Îý_d©a gÎý_bË [] = { 472 { 0x00, "LL_CONNECTION_UPDATE_REQ", cÚn_upd©e_»q , 11, Œue }, 473 { 0x01, "LL_CHANNEL_MAP_REQ", chªÃl_m­_»q , 7, Œue }, 474 { 0x02, "LL_TERMINATE_IND", ‹rmš©e_šd , 1, Œue }, 475 { 0x03, "LL_ENC_REQ", ’c_»q , 22, Œue }, 476 { 0x04, "LL_ENC_RSP", ’c_r¥ , 12, Œue }, 477 { 0x05, "LL_START_ENC_REQ", nuÎ_pdu , 0, Œue }, 478 { 0x06, "LL_START_ENC_RSP", nuÎ_pdu , 0, Œue }, 479 { 0x07, "LL_UNKNOWN_RSP", unknown_r¥ , 1, Œue }, 480 { 0x08, "LL_FEATURE_REQ", ã©u»_»q , 8, Œue }, 481 { 0x09, "LL_FEATURE_RSP", ã©u»_r¥ , 8, Œue }, 482 { 0x0a, "LL_PAUSE_ENC_REQ", nuÎ_pdu , 0, Œue }, 483 { 0x0b, "LL_PAUSE_ENC_RSP", nuÎ_pdu , 0, Œue }, 484 { 0x0c, "LL_VERSION_IND", v”siÚ_šd , 5, Œue }, 485 { 0x0d, "LL_REJECT_IND", »jeù_šd , 1, Œue }, 486 { 0x12, "LL_PING_REQ", nuÎ_pdu , 0, Œue }, 487 { 0x13, "LL_PING_RSP", nuÎ_pdu , 0, Œue }, 491 cÚ¡ * $Ýcode_to_¡ršg ( ušt8_t Ýcode ) 493  i ; 495  i = 0; Îý_bË [i]. ¡r ; i++) { 496 ià( Îý_bË [ i ]. Ýcode == opcode) 497  Îý_bË [ i ]. ¡r ; 501 } } 503  $Îý_·ck‘ (cÚ¡ * d©a , ušt8_t size ) 505 ušt8_t Ýcode = ((cÚ¡ ušt8_ˆ*è d©a )[0]; 506 cÚ¡  Îý_d©a *Îý_d©¨ð NULL ; 507 cÚ¡ * Ýcode_cÞÜ , * Ýcode_¡r ; 508  i ; 510  i = 0; Îý_bË [i]. ¡r ; i++) { 511 ià( Îý_bË [ i ]. Ýcode == opcode) { 512 Îý_d©a = & Îý_bË [ i ]; 517 ià( Îý_d©a ) { 518 ià( Îý_d©a -> func ) 519 Ýcode_cÞÜ = COLOR_OPCODE ; 521 Ýcode_cÞÜ = COLOR_OPCODE_UNKNOWN ; 522 Ýcode_¡r = Îý_d©a -> ¡r ; 524 Ýcode_cÞÜ = COLOR_OPCODE_UNKNOWN ; 525 Ýcode_¡r = "Unknown"; 528 `´št_šd’t (6, Ýcode_cÞÜ , "", Ýcode_¡r , COLOR_OFF , 529 " (0x%2.2x)", Ýcode ); 531 ià(! Îý_d©a || !Îý_d©a-> func ) { 532 `·ck‘_hexdump ( d©a + 1, size - 1); 536 ià( Îý_d©a -> fixed ) { 537 ià( size - 1 !ð Îý_d©a ->size) { 538 `´št_‹xt ( COLOR_ERROR , "invalid…acket size"); 539 `·ck‘_hexdump ( d©a + 1, size - 1); 543 ià( size - 1 < Îý_d©a ->size) { 544 `´št_‹xt ( COLOR_ERROR , "too short…acket"); 545 `·ck‘_hexdump ( d©a + 1, size - 1); 550 Îý_d©a -> `func ( d©a + 1, size - 1); 551 } } @monitor/ll.h 25  ~<¡dšt.h > 27  Î_·ck‘ ( ušt16_t äequ’cy , cÚ¡ * d©a , ušt8_t size ); 28  Îý_·ck‘ (cÚ¡ * d©a , ušt8_t size ); @monitor/lmp.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 31  ~"¤c/sh¬ed/utž.h " 32  ~"di¥Ïy.h " 33  ~"·ck‘.h " 34  ~"bt.h " 35  ~"lmp.h " 37  #COLOR_OPCODE COLOR_MAGENTA ) 38  #COLOR_OPCODE_UNKNOWN COLOR_WHITE_BG ) 40 cÚ¡ * g‘_Ýcode_¡r ( ušt16_t Ýcode ); 42  $´št_Ýcode ( ušt16_t Ýcode ) 44 cÚ¡ * ¡r ; 46 ¡r = `g‘_Ýcode_¡r ( Ýcode ); 47 ià(! ¡r ) 48 ¡r = "Unknown"; 50 ià( Ýcode & 0xff00) 51 `´št_f›ld ("O³¿tiÚ: % (%u/%u)", ¡r , 52 Ýcode >> 8, opcode & 0xff); 54 `´št_f›ld ("O³¿tiÚ: % (%u)", ¡r , Ýcode ); 55 } } 57  $acû±ed (cÚ¡ * d©a , ušt8_t size ) 59 cÚ¡  bt_lmp_acû±ed * pdu = d©a ; 61 `´št_Ýcode ( pdu -> Ýcode ); 62 } } 64  $nÙ_acû±ed (cÚ¡ * d©a , ušt8_t size ) 66 cÚ¡  bt_lmp_nÙ_acû±ed * pdu = d©a ; 68 `´št_Ýcode ( pdu -> Ýcode ); 69 `·ck‘_´št_”rÜ ("E¼Ü code", pdu -> ”rÜ ); 70 } } 72  $þkoff£t_»q (cÚ¡ * d©a , ušt8_t size ) 74 } } 76  $d‘ach (cÚ¡ * d©a , ušt8_t size ) 78 cÚ¡  bt_lmp_d‘ach * pdu = d©a ; 80 `·ck‘_´št_”rÜ ("E¼Ü code", pdu -> ”rÜ ); 81 } } 83  $au_¿nd (cÚ¡ * d©a , ušt8_t size ) 85 cÚ¡  bt_lmp_au_¿nd * pdu = d©a ; 87 `·ck‘_hexdump ( pdu -> numb” , 16); 88 } } 90  $¤es (cÚ¡ * d©a , ušt8_t size ) 92 cÚ¡  bt_lmp_¤es * pdu = d©a ; 94 `·ck‘_hexdump ( pdu -> »¥Ú£ , 4); 95 } } 97  $’üy±iÚ_mode_»q (cÚ¡ * d©a , ušt8_t size ) 99 cÚ¡  bt_lmp_’üy±iÚ_mode_»q * pdu = d©a ; 100 cÚ¡ * ¡r ; 102  pdu -> mode ) { 104 ¡r = "Noƒncryption"; 107 ¡r = "Encryption"; 110 ¡r = "Encryption"; 113 ¡r = "Reserved"; 117 `´št_f›ld ("Mode: % (%u)", ¡r , pdu -> mode ); 118 } } 120  $’üy±iÚ_key_size_»q (cÚ¡ * d©a , ušt8_t size ) 122 cÚ¡  bt_lmp_’üy±iÚ_key_size_»q * pdu = d©a ; 124 `´št_f›ld ("Key size: %u", pdu -> key_size ); 125 } } 127  $¡¬t_’üy±iÚ_»q (cÚ¡ * d©a , ušt8_t size ) 129 cÚ¡  bt_lmp_¡¬t_’üy±iÚ_»q * pdu = d©a ; 131 `·ck‘_hexdump ( pdu -> numb” , 16); 132 } } 134  $¡Ý_’üy±iÚ_»q (cÚ¡ * d©a , ušt8_t size ) 136 } } 138  $un¢iff_»q (cÚ¡ * d©a , ušt8_t size ) 140 } } 142  $max_pow” (cÚ¡ * d©a , ušt8_t size ) 144 } } 146  $mš_pow” (cÚ¡ * d©a , ušt8_t size ) 148 } } 150  $auto_¿‹ (cÚ¡ * d©a , ušt8_t size ) 152 } } 154  $v”siÚ_»q (cÚ¡ * d©a , ušt8_t size ) 156 cÚ¡  bt_lmp_v”siÚ_»q * pdu = d©a ; 158 `·ck‘_´št_v”siÚ ("V”siÚ", pdu -> v”siÚ , 159 "Subv”siÚ", `Ë16_to_ýu ( pdu -> subv”siÚ )); 160 `·ck‘_´št_com·ny ("Com·ny", `Ë16_to_ýu ( pdu -> com·ny )); 161 } } 163  $v”siÚ_»s (cÚ¡ * d©a , ušt8_t size ) 165 cÚ¡  bt_lmp_v”siÚ_»s * pdu = d©a ; 167 `·ck‘_´št_v”siÚ ("V”siÚ", pdu -> v”siÚ , 168 "Subv”siÚ", `Ë16_to_ýu ( pdu -> subv”siÚ )); 169 `·ck‘_´št_com·ny ("Com·ny", `Ë16_to_ýu ( pdu -> com·ny )); 170 } } 172  $ã©u»s_»q (cÚ¡ * d©a , ušt8_t size ) 174 cÚ¡  bt_lmp_ã©u»s_»q * pdu = d©a ; 176 `·ck‘_´št_ã©u»s_lmp ( pdu -> ã©u»s , 0x00); 177 } } 179  $ã©u»s_»s (cÚ¡ * d©a , ušt8_t size ) 181 cÚ¡  bt_lmp_ã©u»s_»s * pdu = d©a ; 183 `·ck‘_´št_ã©u»s_lmp ( pdu -> ã©u»s , 0x00); 184 } } 186  $max_¦Ù (cÚ¡ * d©a , ušt8_t size ) 188 cÚ¡  bt_lmp_max_¦Ù * pdu = d©a ; 190 `´št_f›ld ("SlÙs: 0x%4.4x", pdu -> ¦Ùs ); 191 } } 193  $max_¦Ù_»q (cÚ¡ * d©a , ušt8_t size ) 195 cÚ¡  bt_lmp_max_¦Ù_»q * pdu = d©a ; 197 `´št_f›ld ("SlÙs: 0x%4.4x", pdu -> ¦Ùs ); 198 } } 200  $timšg_accu¿cy_»q (cÚ¡ * d©a , ušt8_t size ) 202 } } 204  $timšg_accu¿cy_»s (cÚ¡ * d©a , ušt8_t size ) 206 cÚ¡  bt_lmp_timšg_accu¿cy_»s * pdu = d©a ; 208 `´št_f›ld ("Driá: %u…pm", pdu -> driá ); 209 `´št_f›ld ("J™‹r: %u u£c", pdu -> j™‹r ); 210 } } 212  $£tup_com¶‘e (cÚ¡ * d©a , ušt8_t size ) 214 } } 216  $u£_£mi_³rmª’t_key (cÚ¡ * d©a , ušt8_t size ) 218 } } 220  $ho¡_cÚÃùiÚ_»q (cÚ¡ * d©a , ušt8_t size ) 222 } } 224  $·ge_sÿn_mode_»q (cÚ¡ * d©a , ušt8_t size ) 226 cÚ¡  bt_lmp_·ge_sÿn_mode_»q * pdu = d©a ; 227 cÚ¡ * ¡r ; 229  pdu -> scheme ) { 231 ¡r = "Mandatory"; 234 ¡r = "Reserved"; 238 `´št_f›ld ("Pagšg scheme: % (%u)", ¡r , pdu -> scheme ); 240 ià( pdu -> scheme == 0x00) { 241  pdu -> £‰šgs ) { 243 ¡r = "R0"; 246 ¡r = "R1"; 249 ¡r = "R2"; 252 ¡r = "Reserved"; 256 ¡r = "Reserved"; 258 `´št_f›ld ("Pagšg schem£‰šgs: % (%u)", ¡r , pdu -> £‰šgs ); 259 } } 261  $‹¡_aùiv©e (cÚ¡ * d©a , ušt8_t size ) 263 } } 265  $’üy±iÚ_key_size_mask_»q (cÚ¡ * d©a , ušt8_t size ) 267 } } 269  $£t_afh (cÚ¡ * d©a , ušt8_t size ) 271 cÚ¡  bt_lmp_£t_afh * pdu = d©a ; 272 cÚ¡ * ¡r ; 274 `´št_f›ld ("In¡ªt: %u", `Ë32_to_ýu ( pdu -> š¡ªt )); 276  pdu -> mode ) { 278 ¡r = "Disabled"; 281 ¡r = "Enabled"; 284 ¡r = "Reserved"; 288 `´št_f›ld ("Mode: % (0x%2.2x)", ¡r , pdu -> mode ); 289 `·ck‘_´št_chªÃl_m­_lmp ( pdu -> m­ ); 290 } } 292  $’ÿpsuÏ‹d_h—d” (cÚ¡ * d©a , ušt8_t size ) 294 cÚ¡  bt_lmp_’ÿpsuÏ‹d_h—d” * pdu = d©a ; 295 cÚ¡ * ¡r ; 297 `´št_f›ld ("MajÜy³: %u", pdu -> majÜ ); 298 `´št_f›ld ("MšÜy³: %u", pdu -> mšÜ ); 300 ià( pdu -> majÜ == 0x01) { 301  pdu -> mšÜ ) { 303 ¡r = "P-192 Public Key"; 306 ¡r = "P-256 Public Key"; 309 ¡r = "Reserved"; 313 `´št_f›ld (" %s", ¡r ); 316 `´št_f›ld ("L’gth: %u", pdu -> Ëngth ); 317 } } 319  $’ÿpsuÏ‹d_·ylßd (cÚ¡ * d©a , ušt8_t size ) 321 cÚ¡  bt_lmp_’ÿpsuÏ‹d_·ylßd * pdu = d©a ; 323 `·ck‘_hexdump ( pdu -> d©a , 16); 324 } } 326  $sim¶e_·œšg_cÚfœm (cÚ¡ * d©a , ušt8_t size ) 328 cÚ¡  bt_lmp_sim¶e_·œšg_cÚfœm * pdu = d©a ; 330 `·ck‘_hexdump ( pdu -> v®ue , 16); 331 } } 333  $sim¶e_·œšg_numb” (cÚ¡ * d©a , ušt8_t size ) 335 cÚ¡  bt_lmp_sim¶e_·œšg_numb” * pdu = d©a ; 337 `·ck‘_hexdump ( pdu -> v®ue , 16); 338 } } 340  $dhkey_check (cÚ¡ * d©a , ušt8_t size ) 342 cÚ¡  bt_lmp_dhkey_check * pdu = d©a ; 344 `·ck‘_hexdump ( pdu -> v®ue , 16); 345 } } 347  $acû±ed_ext (cÚ¡ * d©a , ušt8_t size ) 349 cÚ¡  bt_lmp_acû±ed_ext * pdu = d©a ; 350 ušt16_t Ýcode ; 352  pdu -> esÿ³ ) { 354 Ýcode = `LMP_ESC4 ( pdu ->opcode); 360 `´št_Ýcode ( Ýcode ); 361 } } 363  $nÙ_acû±ed_ext (cÚ¡ * d©a , ušt8_t size ) 365 cÚ¡  bt_lmp_nÙ_acû±ed_ext * pdu = d©a ; 366 ušt16_t Ýcode ; 368  pdu -> esÿ³ ) { 370 Ýcode = `LMP_ESC4 ( pdu ->opcode); 376 `´št_Ýcode ( Ýcode ); 377 `´št_f›ld ("E¼Ü code: %u", pdu -> ”rÜ ); 378 } } 380  $ã©u»s_»q_ext (cÚ¡ * d©a , ušt8_t size ) 382 cÚ¡  bt_lmp_ã©u»s_»q_ext * pdu = d©a ; 384 `´št_f›ld ("F—tu» ·ge: %u", pdu -> ·ge ); 385 `´št_f›ld ("Max suµÜ‹d…age: %u", pdu -> max_·ge ); 386 `·ck‘_´št_ã©u»s_lmp ( pdu -> ã©u»s ,…du-> ·ge ); 387 } } 389  $ã©u»s_»s_ext (cÚ¡ * d©a , ušt8_t size ) 391 cÚ¡  bt_lmp_ã©u»s_»s_ext * pdu = d©a ; 393 `´št_f›ld ("F—tu» ·ge: %u", pdu -> ·ge ); 394 `´št_f›ld ("Max suµÜ‹d…age: %u", pdu -> max_·ge ); 395 `·ck‘_´št_ã©u»s_lmp ( pdu -> ã©u»s ,…du-> ·ge ); 396 } } 398  $·ck‘_ty³_bË_»q (cÚ¡ * d©a , ušt8_t size ) 400 cÚ¡  bt_lmp_·ck‘_ty³_bË_»q * pdu = d©a ; 401 cÚ¡ * ¡r ; 403  pdu -> bË ) { 405 ¡r = "1 Mbps only"; 408 ¡r = "2/3 Mbps"; 411 ¡r = "Reserved"; 415 `´št_f›ld ("TabË: % (0x%2.2x)", ¡r , pdu -> bË ); 416 } } 418  $chªÃl_þassifiÿtiÚ_»q (cÚ¡ * d©a , ušt8_t size ) 420 cÚ¡  bt_lmp_chªÃl_þassifiÿtiÚ_»q * pdu = d©a ; 421 cÚ¡ * ¡r ; 423  pdu -> mode ) { 425 ¡r = "Disabled"; 428 ¡r = "Enabled"; 431 ¡r = "Reserved"; 435 `´št_f›ld ("R•Ütšg mode: % (0x%2.2x)", ¡r , pdu -> mode ); 436 `´št_f›ld ("Mš iÁ”v®: 0x%2.2x", pdu -> mš_š‹rv® ); 437 `´št_f›ld ("Max iÁ”v®: 0x%2.2x", pdu -> max_š‹rv® ); 438 } } 440  $chªÃl_þassifiÿtiÚ (cÚ¡ * d©a , ušt8_t size ) 442 cÚ¡  bt_lmp_chªÃl_þassifiÿtiÚ * pdu = d©a ; 443  ¡r [21]; 444  i ; 446  i = 0; i < 10; i++) 447 `¥rštf ( ¡r + ( i * 2), "%2.2x", pdu -> þassifiÿtiÚ [i]); 449 `´št_f›ld ("F—tu»s: 0x%s", ¡r ); 450 } } 452  $·u£_’üy±iÚ_»q (cÚ¡ * d©a , ušt8_t size ) 454 } } 456  $»sume_’üy±iÚ_»q (cÚ¡ * d©a , ušt8_t size ) 458 } } 460  $io_ÿ·bž™y_»q (cÚ¡ * d©a , ušt8_t size ) 462 cÚ¡  bt_lmp_io_ÿ·bž™y_»q * pdu = d©a ; 463 cÚ¡ * ¡r ; 465 `·ck‘_´št_io_ÿ·bž™y ( pdu -> ÿ·bž™y ); 467  pdu -> oob_d©a ) { 469 ¡r = "No‡uthentication data„eceived"; 472 ¡r = "Authentication data„eceived"; 475 ¡r = "Reserved"; 479 `´št_f›ld ("OOB d©a: % (0x%2.2x)", ¡r , pdu -> oob_d©a ); 481 `·ck‘_´št_io_auth’tiÿtiÚ ( pdu -> auth’tiÿtiÚ ); 482 } } 484  $io_ÿ·bž™y_»s (cÚ¡ * d©a , ušt8_t size ) 486 cÚ¡  bt_lmp_io_ÿ·bž™y_»s * pdu = d©a ; 487 cÚ¡ * ¡r ; 489 `·ck‘_´št_io_ÿ·bž™y ( pdu -> ÿ·bž™y ); 491  pdu -> oob_d©a ) { 493 ¡r = "No‡uthentication data„eceived"; 496 ¡r = "Authentication data„eceived"; 499 ¡r = "Reserved"; 503 `´št_f›ld ("OOB d©a: % (0x%2.2x)", ¡r , pdu -> oob_d©a ); 505 `·ck‘_´št_io_auth’tiÿtiÚ ( pdu -> auth’tiÿtiÚ ); 506 } } 508  $num”ic_com·risÚ_çžed (cÚ¡ * d©a , ušt8_t size ) 510 } } 512  $·sskey_çžed (cÚ¡ * d©a , ušt8_t size ) 514 } } 516  $oob_çžed (cÚ¡ * d©a , ušt8_t size ) 518 } } 520  $pow”_cÚŒÞ_»q (cÚ¡ * d©a , ušt8_t size ) 522 cÚ¡  bt_lmp_pow”_cÚŒÞ_»q * pdu = d©a ; 523 cÚ¡ * ¡r ; 525  pdu -> »que¡ ) { 527 ¡r = "Decrement…ower one step"; 530 ¡r = "Increment…ower one step"; 533 ¡r = "Increaseo maximum…ower"; 536 ¡r = "Reserved"; 540 `´št_f›ld ("Reque¡: % (0x%2.2x)", ¡r , pdu -> »que¡ ); 541 } } 543  $pow”_cÚŒÞ_»s (cÚ¡ * d©a , ušt8_t size ) 545 cÚ¡  bt_lmp_pow”_cÚŒÞ_»s * pdu = d©a ; 546 cÚ¡ * ¡r ; 548 `´št_f›ld ("Re¥Ú£: 0x%2.2x", pdu -> »¥Ú£ ); 550  pdu -> »¥Ú£ & 0x03) { 552 ¡r = "Not supported"; 555 ¡r = "Changed one step"; 558 ¡r = "Max…ower"; 561 ¡r = "Min…ower"; 564 ¡r = "Reserved"; 568 `´št_f›ld (" GFSK: %s", ¡r ); 570 ( pdu -> »¥Ú£ & 0x0c) >> 2) { 572 ¡r = "Not supported"; 575 ¡r = "Changed one step"; 578 ¡r = "Max…ower"; 581 ¡r = "Min…ower"; 584 ¡r = "Reserved"; 588 `´št_f›ld (" DQPSK: %s", ¡r ); 590 ( pdu -> »¥Ú£ & 0x30) >> 4) { 592 ¡r = "Not supported"; 595 ¡r = "Changed one step"; 598 ¡r = "Max…ower"; 601 ¡r = "Min…ower"; 604 ¡r = "Reserved"; 608 `´št_f›ld (" 8DPSK: %s", ¡r ); 609 } } 611  $pšg_»q (cÚ¡ * d©a , ušt8_t size ) 613 } } 615  $pšg_»s (cÚ¡ * d©a , ušt8_t size ) 617 } } 619  slmp_d©a { 620 ušt16_t mÝcode ; 621 cÚ¡ * m¡r ; 622 (* mfunc è(cÚ¡ * md©a , ušt8_t msize ); 623 ušt8_t msize ; 624 boÞ mfixed ; 627 cÚ¡  lmp_d©a glmp_bË [] = { 630 { 3, "LMP_acû±ed", acû±ed , 1, Œue }, 631 { 4, "LMP_nÙ_acû±ed", nÙ_acû±ed , 2, Œue }, 632 { 5, "LMP_þkoff£t_»q", þkoff£t_»q , 0, Œue }, 634 { 7, "LMP_d‘ach", d‘ach , 1, Œue }, 638 { 11, "LMP_au_¿nd", au_¿nd , 16, Œue }, 639 { 12, "LMP_¤es", ¤es , 4, Œue }, 642 { 15, "LMP_’üy±iÚ_mode_»q", ’üy±iÚ_mode_»q , 1, Œue }, 643 { 16, "LMP_’üy±iÚ_key_size_»q", ’üy±iÚ_key_size_»q , 1, Œue }, 644 { 17, "LMP_¡¬t_’üy±iÚ_»q", ¡¬t_’üy±iÚ_»q , 16, Œue }, 645 { 18, "LMP_¡Ý_’üy±iÚ_»q", ¡Ý_’üy±iÚ_»q , 0, Œue }, 651 { 24, "LMP_un¢iff_»q", un¢iff_»q , 0, Œue }, 660 { 33, "LMP_max_pow”", max_pow” , 0, Œue }, 661 { 34, "LMP_mš_pow”", mš_pow” , 0, Œue }, 662 { 35, "LMP_auto_¿‹", auto_¿‹ , 0, Œue }, 664 { 37, "LMP_v”siÚ_»q", v”siÚ_»q , 5, Œue }, 665 { 38, "LMP_v”siÚ_»s", v”siÚ_»s , 5, Œue }, 666 { 39, "LMP_ã©u»s_»q", ã©u»s_»q , 8, Œue }, 667 { 40, "LMP_ã©u»s_»s", ã©u»s_»s , 8, Œue }, 672 { 45, "LMP_max_¦Ù", max_¦Ù , 1, Œue }, 673 { 46, "LMP_max_¦Ù_»q", max_¦Ù_»q , 1, Œue }, 674 { 47, "LMP_timšg_accu¿cy_»q", timšg_accu¿cy_»q , 0, Œue }, 675 { 48, "LMP_timšg_accu¿cy_»s", timšg_accu¿cy_»s , 2, Œue }, 676 { 49, "LMP_£tup_com¶‘e", £tup_com¶‘e , 0, Œue }, 677 { 50, "LMP_u£_£mi_³rmª’t_key", u£_£mi_³rmª’t_key , 0, Œue }, 678 { 51, "LMP_ho¡_cÚÃùiÚ_»q", ho¡_cÚÃùiÚ_»q , 0, Œue }, 681 { 54, "LMP_·ge_sÿn_mode_»q", ·ge_sÿn_mode_»q , 2, Œue }, 683 { 56, "LMP_‹¡_aùiv©e", ‹¡_aùiv©e , 0, Œue }, 685 { 58, "LMP_’üy±iÚ_key_size_mask_»q", ’üy±iÚ_key_size_mask_»q , 0, Œue }, 687 { 60, "LMP_£t_AFH", £t_afh , 15, Œue }, 688 { 61, "LMP_’ÿpsuÏ‹d_h—d”", ’ÿpsuÏ‹d_h—d” , 3, Œue }, 689 { 62, "LMP_’ÿpsuÏ‹d_·ylßd", ’ÿpsuÏ‹d_·ylßd , 16, Œue }, 690 { 63, "LMP_sim¶e_·œšg_cÚfœm", sim¶e_·œšg_cÚfœm , 16, Œue }, 691 { 64, "LMP_sim¶e_·œšg_numb”", sim¶e_·œšg_numb” , 16, Œue }, 692 { 65, "LMP_DHkey_check", dhkey_check , 16, Œue }, 694 { LMP_ESC4 (1), "LMP_acû±ed_ext", acû±ed_ext , 2, Œue }, 695 { LMP_ESC4 (2), "LMP_nÙ_acû±ed_ext", nÙ_acû±ed_ext , 3, Œue }, 696 { LMP_ESC4 (3), "LMP_ã©u»s_»q_ext", ã©u»s_»q_ext , 10, Œue }, 697 { LMP_ESC4 (4), "LMP_ã©u»s_»s_ext", ã©u»s_»s_ext , 10, Œue }, 698 { LMP_ESC4 (5), "LMP_clk_adj" }, 699 { LMP_ESC4 (6), "LMP_clk_adj_ack" }, 700 { LMP_ESC4 (7), "LMP_clk_adj_req" }, 701 { LMP_ESC4 (11), "LMP_·ck‘_ty³_bË_»q", ·ck‘_ty³_bË_»q , 1, Œue }, 702 { LMP_ESC4 (12), "LMP_eSCO_link_req" }, 703 { LMP_ESC4 (13), "LMP_remove_eSCO_link_req" }, 704 { LMP_ESC4 (16), "LMP_chªÃl_þassifiÿtiÚ_»q", chªÃl_þassifiÿtiÚ_»q , 5, Œue }, 705 { LMP_ESC4 (17), "LMP_chªÃl_þassifiÿtiÚ", chªÃl_þassifiÿtiÚ , 10, Œue }, 706 { LMP_ESC4 (21), "LMP_sniff_subrating_req" }, 707 { LMP_ESC4 (22), "LMP_sniff_subrating_res" }, 708 { LMP_ESC4 (23), "LMP_·u£_’üy±iÚ_»q", ·u£_’üy±iÚ_»q , 0, Œue }, 709 { LMP_ESC4 (24), "LMP_»sume_’üy±iÚ_»q", »sume_’üy±iÚ_»q , 0, Œue }, 710 { LMP_ESC4 (25), "LMP_IO_ÿ·bž™y_»q", io_ÿ·bž™y_»q , 3, Œue }, 711 { LMP_ESC4 (26), "LMP_IO_ÿ·bž™y_»s", io_ÿ·bž™y_»s , 3, Œue }, 712 { LMP_ESC4 (27), "LMP_num”ic_com·risÚ_çžed", num”ic_com·risÚ_çžed , 0, Œue }, 713 { LMP_ESC4 (28), "LMP_·sskey_çžed", ·sskey_çžed , 0, Œue }, 714 { LMP_ESC4 (29), "LMP_oob_çžed", oob_çžed , 0, Œue }, 715 { LMP_ESC4 (30), "LMP_keypress_notification" }, 716 { LMP_ESC4 (31), "LMP_pow”_cÚŒÞ_»q", pow”_cÚŒÞ_»q , 1, Œue }, 717 { LMP_ESC4 (32), "LMP_pow”_cÚŒÞ_»s", pow”_cÚŒÞ_»s , 1, Œue }, 718 { LMP_ESC4 (33), "LMP_pšg_»q", pšg_»q , 0, Œue }, 719 { LMP_ESC4 (34), "LMP_pšg_»s", pšg_»s , 0, Œue }, 723 cÚ¡ * $g‘_Ýcode_¡r ( ušt16_t Ýcode ) 725  i ; 727  i = 0; lmp_bË [i]. ¡r ; i++) { 728 ià( lmp_bË [ i ]. Ýcode == opcode) 729  lmp_bË [ i ]. ¡r ; 732  NULL ; 733 } } 735  $lmp_·ck‘ (cÚ¡ * d©a , ušt8_t size ) 737 cÚ¡  lmp_d©a *lmp_d©¨ð NULL ; 738 cÚ¡ * Ýcode_cÞÜ , * Ýcode_¡r ; 739 ušt16_t Ýcode ; 740 ušt8_t tid , off ; 741  i ; 743 tid = ((cÚ¡ ušt8_t *è d©a )[0] & 0x01; 744 Ýcode = (((cÚ¡ ušt8_t *è d©a )[0] & 0xfe) >> 1; 746  Ýcode ) { 748 Ýcode = `LMP_ESC4 (((cÚ¡ ušt8_t *è d©a )[1]); 749 off = 2; 756 off = 1; 760  i = 0; lmp_bË [i]. ¡r ; i++) { 761 ià( lmp_bË [ i ]. Ýcode == opcode) { 762 lmp_d©a = & lmp_bË [ i ]; 767 ià( lmp_d©a ) { 768 ià( lmp_d©a -> func ) 769 Ýcode_cÞÜ = COLOR_OPCODE ; 771 Ýcode_cÞÜ = COLOR_OPCODE_UNKNOWN ; 772 Ýcode_¡r = lmp_d©a -> ¡r ; 774 Ýcode_cÞÜ = COLOR_OPCODE_UNKNOWN ; 775 Ýcode_¡r = "Unknown"; 778 ià( Ýcode & 0xff00) 779 `´št_šd’t (6, Ýcode_cÞÜ , "", Ýcode_¡r , COLOR_OFF , 780 " (%u/%uèTID %u", Ýcode >> 8, opcod& 0xff, tid ); 782 `´št_šd’t (6, Ýcode_cÞÜ , "", Ýcode_¡r , COLOR_OFF , 783 " (%uèTID %d", Ýcode , tid ); 785 ià(! lmp_d©a || !lmp_d©a-> func ) { 786 `·ck‘_hexdump ( d©a + off , size - off); 790 ià( lmp_d©a -> fixed ) { 791 ià( size - off !ð lmp_d©a ->size) { 792 `´št_‹xt ( COLOR_ERROR , "invalid…acket size"); 793 `·ck‘_hexdump ( d©a + off , size - off); 797 ià( size - off < lmp_d©a ->size) { 798 `´št_‹xt ( COLOR_ERROR , "too short…acket"); 799 `·ck‘_hexdump ( d©a + off , size - off); 804 lmp_d©a -> `func ( d©a + off , size - off); 805 } } 807  $lmp_todo () 809  i ; 811 `´štf ("LMP operations with missing decodings:\n"); 813  i = 0; lmp_bË [i]. ¡r ; i++) { 814 ià( lmp_bË [ i ]. func ) 817 `´štf ("\t%s\n", lmp_bË [ i ]. ¡r ); 819 } } @monitor/lmp.h 25  ~<¡dšt.h > 27  lmp_·ck‘ (cÚ¡ * d©a , ušt8_t size ); 29  lmp_todo (); @monitor/main.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<ùy³.h > 31  ~<¡dlib.h > 32  ~<¡ršg.h > 33  ~ 35  ~"mašloÝ.h " 36  ~"·ck‘.h " 37  ~"lmp.h " 38  ~"keys.h " 39  ~"ª®yze.h " 40  ~"–lisys.h " 41  ~"cÚŒÞ.h " 43  $sigÇl_ÿÎback ( signum , * u£r_d©a ) 45  signum ) { 46  SIGINT : 47  SIGTERM : 48 `mašloÝ_qu™ (); 51 } } 53  $u§ge () 55 `´štf ("btmon - Bluetooth monitor\n" 57 `´štf ("\tbtmon [options]\n"); 58 `´štf ("options:\n" 69 } } 71 cÚ¡  ÝtiÚ gmaš_ÝtiÚs [] = { 72 { "»ad", »quœed_¬gum’t , NULL , 'r' }, 73 { "wr™e", »quœed_¬gum’t , NULL , 'w' }, 74 { "ª®yze", »quœed_¬gum’t , NULL , 'a' }, 75 { "£rv”", »quœed_¬gum’t , NULL , 's' }, 76 { "šdex", »quœed_¬gum’t , NULL , 'i' }, 77 { "time", no_¬gum’t , NULL , 't' }, 78 { "d©e", no_¬gum’t , NULL , 'T' }, 79 { "sco", no_¬gum’t , NULL , 'S' }, 80 { "–lisys", »quœed_¬gum’t , NULL , 'E' }, 81 { "todo", no_¬gum’t , NULL , '#' }, 82 { "v”siÚ", no_¬gum’t , NULL , 'v' }, 83 { "h–p", no_¬gum’t , NULL , 'h' }, 87  $maš ( ¬gc , * ¬gv []) 89  fž‹r_mask = 0; 90 cÚ¡ * »ad”_·th = NULL ; 91 cÚ¡ * wr™”_·th = NULL ; 92 cÚ¡ * ª®yze_·th = NULL ; 93 cÚ¡ * –lisys_£rv” = NULL ; 94  –lisys_pÜt = 0; 95 cÚ¡ * ¡r ; 96  ex™_¡©us ; 97 sig£t_t mask ; 99 `mašloÝ_š™ (); 101 fž‹r_mask |ð PACKET_FILTER_SHOW_TIME_OFFSET ; 104  Ýt ; 106 Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "r:w:a:s:i:tTSE:vh", 107 maš_ÝtiÚs , NULL ); 108 ià( Ýt < 0) 111  Ýt ) { 113 »ad”_·th = Ýrg ; 116 wr™”_·th = Ýrg ; 119 ª®yze_·th = Ýrg ; 122 `cÚŒÞ_£rv” ( Ýrg ); 125 ià( `¡¾’ ( Ýrg è> 3 && ! `¡ºcmp (optarg, "hci", 3)) 126 ¡r = Ýrg + 3; 128 ¡r = Ýrg ; 129 ià(! `isdig™ (* ¡r )) { 130 `u§ge (); 131  EXIT_FAILURE ; 133 `·ck‘_£Ëù_šdex ( `©oi ( ¡r )); 136 fž‹r_mask &ð~ PACKET_FILTER_SHOW_TIME_OFFSET ; 137 fž‹r_mask |ð PACKET_FILTER_SHOW_TIME ; 140 fž‹r_mask &ð~ PACKET_FILTER_SHOW_TIME_OFFSET ; 141 fž‹r_mask |ð PACKET_FILTER_SHOW_TIME ; 142 fž‹r_mask |ð PACKET_FILTER_SHOW_DATE ; 145 fž‹r_mask |ð PACKET_FILTER_SHOW_SCO_DATA ; 148 –lisys_£rv” = Ýrg ; 149 –lisys_pÜt = 24352; 152 `·ck‘_todo (); 153 `lmp_todo (); 154  EXIT_SUCCESS ; 156 `´štf ("%s\n", VERSION ); 157  EXIT_SUCCESS ; 159 `u§ge (); 160  EXIT_SUCCESS ; 162  EXIT_FAILURE ; 166 ià( ¬gc - Ýtšd > 0) { 167 `årštf ( ¡d”r , "Invalid command†ine…arameters\n"); 168  EXIT_FAILURE ; 171 ià( »ad”_·th && ª®yze_·th ) { 172 `årštf ( ¡d”r , "Display‡nd‡nalyze can't be combined\n"); 173  EXIT_FAILURE ; 176 `sigem±y£t (& mask ); 177 `sigadd£t (& mask , SIGINT ); 178 `sigadd£t (& mask , SIGTERM ); 180 `mašloÝ_£t_sigÇl (& mask , sigÇl_ÿÎback , NULL , NULL); 182 `´štf ("Blu‘oÙh mÚ™Ü v” %s\n", VERSION ); 184 `keys_£tup (); 186 `·ck‘_£t_fž‹r ( fž‹r_mask ); 188 ià( ª®yze_·th ) { 189 `ª®yze_Œaû ( ª®yze_·th ); 190  EXIT_SUCCESS ; 193 ià( »ad”_·th ) { 194 ià( –lisys_£rv” ) 195 `–lisys_’abË ( –lisys_£rv” , –lisys_pÜt ); 197 `cÚŒÞ_»ad” ( »ad”_·th ); 198  EXIT_SUCCESS ; 201 ià( wr™”_·th && ! `cÚŒÞ_wr™” (writer_path)) { 202 `´štf ("FažedØÝ’ '%s'\n", wr™”_·th ); 203  EXIT_FAILURE ; 206 ià( –lisys_£rv” ) 207 `–lisys_’abË ( –lisys_£rv” , –lisys_pÜt ); 209 ià( `cÚŒÞ_Œacšg () < 0) 210  EXIT_FAILURE ; 212 ex™_¡©us = `mašloÝ_run (); 214 `keys_þ—nup (); 216  ex™_¡©us ; 217 } } @monitor/mainloop.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 34  ~ 35  ~ 36  ~ 37  ~ 39  ~"mašloÝ.h " 41  #MAX_EPOLL_EVENTS 10 ) 43  g•Þl_fd ; 44  g•Þl_‹rmš©e ; 46  smašloÝ_d©a { 47  mfd ; 48 ušt32_t mev’ts ; 49 mašloÝ_ev’t_func mÿÎback ; 50 mašloÝ_de¡roy_func mde¡roy ; 51 * mu£r_d©a ; 54  #MAX_MAINLOOP_ENTRIES 128 ) 56  mašloÝ_d©a * gmašloÝ_li¡ [ MAX_MAINLOOP_ENTRIES ]; 58  stimeout_d©a { 59  mfd ; 60 mašloÝ_timeout_func mÿÎback ; 61 mašloÝ_de¡roy_func mde¡roy ; 62 * mu£r_d©a ; 65  ssigÇl_d©a { 66  mfd ; 67 sig£t_t mmask ; 68 mašloÝ_sigÇl_func mÿÎback ; 69 mašloÝ_de¡roy_func mde¡roy ; 70 * mu£r_d©a ; 73  sigÇl_d©a * gsigÇl_d©a ; 75  $mašloÝ_š™ () 77  i ; 79 •Þl_fd = `•Þl_ü—‹1 ( EPOLL_CLOEXEC ); 81  i = 0; i < MAX_MAINLOOP_ENTRIES ; i++) 82 mašloÝ_li¡ [ i ] = NULL ; 84 •Þl_‹rmš©e = 0; 85 } } 87  $mašloÝ_qu™ () 89 •Þl_‹rmš©e = 1; 90 } } 92  $sigÇl_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 94  sigÇl_d©a * d©a = u£r_d©a ; 95  sigÇlfd_sigšfo si ; 96 ssize_t »suÉ ; 98 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 99 `mašloÝ_qu™ (); 103 »suÉ = `»ad ( fd , & si , (si)); 104 ià( »suÉ !ð( si )) 107 ià( d©a -> ÿÎback ) 108 d©a -> `ÿÎback ( si . ssi_signo , d©a-> u£r_d©a ); 109 } } 111  $mašloÝ_run () 113  i ; 115 ià( sigÇl_d©a ) { 116 ià( `sig´ocmask ( SIG_BLOCK , & sigÇl_d©a -> mask , NULL ) < 0) 119 sigÇl_d©a -> fd = `sigÇlfd (-1, &sigÇl_d©a-> mask , 120 SFD_NONBLOCK | SFD_CLOEXEC ); 121 ià( sigÇl_d©a -> fd < 0) 124 ià( `mašloÝ_add_fd ( sigÇl_d©a -> fd , EPOLLIN , 125 sigÇl_ÿÎback , sigÇl_d©a , NULL ) < 0) { 126 `þo£ ( sigÇl_d©a -> fd ); 131 ! •Þl_‹rmš©e ) { 132  •Þl_ev’t ev’ts [ MAX_EPOLL_EVENTS ]; 133  n , nfds ; 135 nfds = `•Þl_wa™ ( •Þl_fd , ev’ts , MAX_EPOLL_EVENTS , -1); 136 ià( nfds < 0) 139  n = 0;‚ < nfds ;‚++) { 140  mašloÝ_d©a * d©a = ev’ts [ n ].d©a. ±r ; 142 d©a -> `ÿÎback (d©a-> fd , ev’ts [ n ].events, 143 d©a -> u£r_d©a ); 147 ià( sigÇl_d©a ) { 148 `mašloÝ_»move_fd ( sigÇl_d©a -> fd ); 149 `þo£ ( sigÇl_d©a -> fd ); 151 ià( sigÇl_d©a -> de¡roy ) 152 sigÇl_d©a -> `de¡roy (sigÇl_d©a-> u£r_d©a ); 155  i = 0; i < MAX_MAINLOOP_ENTRIES ; i++) { 156  mašloÝ_d©a * d©a = mašloÝ_li¡ [ i ]; 158 mašloÝ_li¡ [ i ] = NULL ; 160 ià( d©a ) { 161 `•Þl_ùl ( •Þl_fd , EPOLL_CTL_DEL , d©a -> fd , NULL ); 163 ià( d©a -> de¡roy ) 164 d©a -> `de¡roy (d©a-> u£r_d©a ); 166 `ä“ ( d©a ); 170 `þo£ ( •Þl_fd ); 171 •Þl_fd = 0; 174 } } 176  $mašloÝ_add_fd ( fd , ušt32_t ev’ts , mašloÝ_ev’t_func ÿÎback , 177 * u£r_d©a , mašloÝ_de¡roy_func de¡roy ) 179  mašloÝ_d©a * d©a ; 180  •Þl_ev’t ev ; 181  ”r ; 183 ià( fd < 0 || fd > MAX_MAINLOOP_ENTRIES - 1 || ! ÿÎback ) 184  - EINVAL ; 186 d©a = `m®loc ((*data)); 187 ià(! d©a ) 188  - ENOMEM ; 190 `mem£t ( d©a , 0, (*data)); 191 d©a -> fd = fd; 192 d©a -> ev’ts =ƒvents; 193 d©a -> ÿÎback = callback; 194 d©a -> de¡roy = destroy; 195 d©a -> u£r_d©a = user_data; 197 `mem£t (& ev , 0, (ev)); 198 ev . ev’ts =ƒvents; 199 ev . d©a . ±r = data; 201 ”r = `•Þl_ùl ( •Þl_fd , EPOLL_CTL_ADD , d©a -> fd , & ev ); 202 ià( ”r < 0) { 203 `ä“ ( d©a ); 204  ”r ; 207 mašloÝ_li¡ [ fd ] = d©a ; 210 } } 212  $mašloÝ_modify_fd ( fd , ušt32_t ev’ts ) 214  mašloÝ_d©a * d©a ; 215  •Þl_ev’t ev ; 216  ”r ; 218 ià( fd < 0 || fd > MAX_MAINLOOP_ENTRIES - 1) 219  - EINVAL ; 221 d©a = mašloÝ_li¡ [ fd ]; 222 ià(! d©a ) 223  - ENXIO ; 225 `mem£t (& ev , 0, (ev)); 226 ev . ev’ts =ƒvents; 227 ev . d©a . ±r = data; 229 ”r = `•Þl_ùl ( •Þl_fd , EPOLL_CTL_MOD , d©a -> fd , & ev ); 230 ià( ”r < 0) 231  ”r ; 233 d©a -> ev’ts =ƒvents; 236 } } 238  $mašloÝ_»move_fd ( fd ) 240  mašloÝ_d©a * d©a ; 241  ”r ; 243 ià( fd < 0 || fd > MAX_MAINLOOP_ENTRIES - 1) 244  - EINVAL ; 246 d©a = mašloÝ_li¡ [ fd ]; 247 ià(! d©a ) 248  - ENXIO ; 250 mašloÝ_li¡ [ fd ] = NULL ; 252 ”r = `•Þl_ùl ( •Þl_fd , EPOLL_CTL_DEL , d©a -> fd , NULL ); 254 ià( d©a -> de¡roy ) 255 d©a -> `de¡roy (d©a-> u£r_d©a ); 257 `ä“ ( d©a ); 259  ”r ; 260 } } 262  $timeout_de¡roy (* u£r_d©a ) 264  timeout_d©a * d©a = u£r_d©a ; 266 `þo£ ( d©a -> fd ); 267 d©a -> fd = -1; 269 ià( d©a -> de¡roy ) 270 d©a -> `de¡roy (d©a-> u£r_d©a ); 271 } } 273  $timeout_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 275  timeout_d©a * d©a = u£r_d©a ; 276 ušt64_t expœed ; 277 ssize_t »suÉ ; 279 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) 282 »suÉ = `»ad ( d©a -> fd , & expœed , (expired)); 283 ià( »suÉ !ð( expœed )) 286 ià( d©a -> ÿÎback ) 287 d©a -> `ÿÎback (d©a-> fd , d©a-> u£r_d©a ); 288 } } 290  šlše  $timeout_£t ( fd ,  m£c ) 292  ™im”¥ec ™im” ; 293  £c = m£c / 1000; 295 `mem£t (& ™im” , 0, (itimer)); 296 ™im” . ™_š‹rv® . tv_£c = 0; 297 ™im” . ™_š‹rv® . tv_n£c = 0; 298 ™im” . ™_v®ue . tv_£c = £c ; 299 ™im” . ™_v®ue . tv_n£c = ( m£c - ( £c * 1000)) * 1000; 301  `tim”fd_£‰ime ( fd , 0, & ™im” , NULL ); 302 } } 304  $mašloÝ_add_timeout ( m£c , mašloÝ_timeout_func ÿÎback , 305 * u£r_d©a , mašloÝ_de¡roy_func de¡roy ) 307  timeout_d©a * d©a ; 309 ià(! ÿÎback ) 310  - EINVAL ; 312 d©a = `m®loc ((*data)); 313 ià(! d©a ) 314  - ENOMEM ; 316 `mem£t ( d©a , 0, (*data)); 317 d©a -> ÿÎback = callback; 318 d©a -> de¡roy = destroy; 319 d©a -> u£r_d©a = user_data; 321 d©a -> fd = `tim”fd_ü—‹ ( CLOCK_MONOTONIC , TFD_NONBLOCK | TFD_CLOEXEC ); 322 ià( d©a -> fd < 0) { 323 `ä“ ( d©a ); 324  - EIO ; 327 ià( m£c > 0) { 328 ià( `timeout_£t ( d©a -> fd , m£c ) < 0) { 329 `þo£ ( d©a -> fd ); 330 `ä“ ( d©a ); 331  - EIO ; 335 ià( `mašloÝ_add_fd ( d©a -> fd , EPOLLIN | EPOLLONESHOT , 336 timeout_ÿÎback , d©a , timeout_de¡roy ) < 0) { 337 `þo£ ( d©a -> fd ); 338 `ä“ ( d©a ); 339  - EIO ; 342  d©a -> fd ; 343 } } 345  $mašloÝ_modify_timeout ( id ,  m£c ) 347 ià( m£c > 0) { 348 ià( `timeout_£t ( id , m£c ) < 0) 349  - EIO ; 352 ià( `mašloÝ_modify_fd ( id , EPOLLIN | EPOLLONESHOT ) < 0) 353  - EIO ; 356 } } 358  $mašloÝ_»move_timeout ( id ) 360  `mašloÝ_»move_fd ( id ); 361 } } 363  $mašloÝ_£t_sigÇl ( sig£t_t * mask , mašloÝ_sigÇl_func ÿÎback , 364 * u£r_d©a , mašloÝ_de¡roy_func de¡roy ) 366  sigÇl_d©a * d©a ; 368 ià(! mask || ! ÿÎback ) 369  - EINVAL ; 371 d©a = `m®loc ((*data)); 372 ià(! d©a ) 373  - ENOMEM ; 375 `mem£t ( d©a , 0, (*data)); 376 d©a -> ÿÎback = callback; 377 d©a -> de¡roy = destroy; 378 d©a -> u£r_d©a = user_data; 380 d©a -> fd = -1; 381 `memýy (& d©a -> mask , mask, ( sig£t_t )); 383 `ä“ ( sigÇl_d©a ); 384 sigÇl_d©a = d©a ; 387 } } @monitor/mainloop.h 25  ~ 26  ~ 28 (* tmašloÝ_de¡roy_func è(* tu£r_d©a ); 30 (* tmašloÝ_ev’t_func è( tfd , tušt32_t tev’ts , * tu£r_d©a ); 31 (* tmašloÝ_timeout_func è( tid , * tu£r_d©a ); 32 (* tmašloÝ_sigÇl_func è( tsignum , * tu£r_d©a ); 34  `mašloÝ_š™ (); 35  `mašloÝ_qu™ (); 36  `mašloÝ_run (); 38  `mašloÝ_add_fd ( fd , ušt32_t ev’ts , mašloÝ_ev’t_func ÿÎback , 39 * u£r_d©a , mašloÝ_de¡roy_func de¡roy ); 40  `mašloÝ_modify_fd ( fd , ušt32_t ev’ts ); 41  `mašloÝ_»move_fd ( fd ); 43  `mašloÝ_add_timeout ( m£c , mašloÝ_timeout_func ÿÎback , 44 * u£r_d©a , mašloÝ_de¡roy_func de¡roy ); 45  `mašloÝ_modify_timeout ( fd ,  m£c ); 46  `mašloÝ_»move_timeout ( id ); 48  `mašloÝ_£t_sigÇl ( sig£t_t * mask , mašloÝ_sigÇl_func ÿÎback , 49 * u£r_d©a , mašloÝ_de¡roy_func de¡roy ); @monitor/packet.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<ùy³.h > 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 35  ~<¡dboÞ.h > 36  ~<š‰y³s.h > 37  ~ 38  ~ 40  ~ 41  ~ 42  ~ 44  ~"¤c/sh¬ed/utž.h " 45  ~"¤c/sh¬ed/bt¢oÝ.h " 46  ~"di¥Ïy.h " 47  ~"bt.h " 48  ~"Î.h " 49  ~"hwdb.h " 50  ~"keys.h " 51  ~"uuid.h " 52  ~"l2ÿp.h " 53  ~"cÚŒÞ.h " 54  ~"v’dÜ.h " 55  ~"·ck‘.h " 57  #COLOR_INDEX_LABEL COLOR_WHITE ) 58  #COLOR_TIMESTAMP COLOR_YELLOW ) 60  #COLOR_NEW_INDEX COLOR_GREEN ) 61  #COLOR_DEL_INDEX COLOR_RED ) 63  #COLOR_HCI_COMMAND COLOR_BLUE ) 64  #COLOR_HCI_COMMAND_UNKNOWN COLOR_WHITE_BG ) 66  #COLOR_HCI_EVENT COLOR_MAGENTA ) 67  #COLOR_HCI_EVENT_UNKNOWN COLOR_WHITE_BG ) 69  #COLOR_HCI_ACLDATA COLOR_CYAN ) 70  #COLOR_HCI_SCODATA COLOR_YELLOW ) 72  #COLOR_UNKNOWN_ERROR COLOR_WHITE_BG ) 73  #COLOR_UNKNOWN_FEATURE_BIT COLOR_WHITE_BG ) 74  #COLOR_UNKNOWN_COMMAND_BIT COLOR_WHITE_BG ) 75  #COLOR_UNKNOWN_EVENT_MASK COLOR_WHITE_BG ) 76  #COLOR_UNKNOWN_LE_STATES COLOR_WHITE_BG ) 77  #COLOR_UNKNOWN_SERVICE_CLASS COLOR_WHITE_BG ) 78  #COLOR_UNKNOWN_PKT_TYPE_BIT COLOR_WHITE_BG ) 80  #COLOR_PHY_PACKET COLOR_BLUE ) 82  time_t gtime_off£t = ((time_t) -1); 83  gfž‹r_mask = 0; 84  boÞ gšdex_fž‹r = çl£ ; 85  ušt16_t gšdex_numb” = 0; 86  ušt16_t gšdex_cu¼’t = 0; 88  #MAX_CONN 16 ) 90  scÚn_d©a { 91 ušt16_t mhªdË ; 92 ušt8_t mty³ ; 95  cÚn_d©a gcÚn_li¡ [ MAX_CONN ]; 97  $assign_hªdË ( ušt16_t hªdË , ušt8_t ty³ ) 99  i ; 101  i = 0; i < MAX_CONN ; i++) { 102 ià( cÚn_li¡ [ i ]. hªdË == 0x0000) { 103 cÚn_li¡ [ i ]. hªdË = handle; 104 cÚn_li¡ [ i ]. ty³ =ype; 108 } } 110  $»Ëa£_hªdË ( ušt16_t hªdË ) 112  i ; 114  i = 0; i < MAX_CONN ; i++) { 115 ià( cÚn_li¡ [ i ]. hªdË == handle) { 116 cÚn_li¡ [ i ]. hªdË = 0x0000; 117 cÚn_li¡ [ i ]. ty³ = 0x00; 121 } } 123  ušt8_t $g‘_ty³ ( ušt16_t hªdË ) 125  i ; 127  i = 0; i < MAX_CONN ; i++) { 128 ià( cÚn_li¡ [ i ]. hªdË == handle) 129  cÚn_li¡ [ i ]. ty³ ; 133 } } 135  $·ck‘_£t_fž‹r ( fž‹r ) 137 fž‹r_mask = fž‹r ; 138 } } 140  $·ck‘_add_fž‹r ( fž‹r ) 142 ià( šdex_fž‹r ) 143 fž‹r &ð~ PACKET_FILTER_SHOW_INDEX ; 145 fž‹r_mask |ð fž‹r ; 146 } } 148  $·ck‘_d–_fž‹r ( fž‹r ) 150 fž‹r_mask &ð~ fž‹r ; 151 } } 153  $·ck‘_£Ëù_šdex ( ušt16_t šdex ) 155 fž‹r_mask &ð~ PACKET_FILTER_SHOW_INDEX ; 157 šdex_fž‹r = Œue ; 158 šdex_numb” = šdex ; 159 } } 161  #´št_¥aû ( x è `´štf ("%*c", (x), ' '); ) 163  $´št_·ck‘ ( timev® * tv , ušt16_t šdex ,  id’t , 164 cÚ¡ * cÞÜ , cÚ¡ * Ïb– , 165 cÚ¡ * ‹xt , cÚ¡ * exŒa ) 167  cÞ = `num_cÞumns (); 168  lše [256], ts_¡r [64]; 169  n , ts_Ën = 0, ts_pos = 0, Ën = 0, pos = 0; 171 ià( fž‹r_mask & PACKET_FILTER_SHOW_INDEX ) { 172 ià( `u£_cÞÜ ()) { 173 n = `¥rštf ( ts_¡r + ts_pos , "%s", COLOR_INDEX_LABEL ); 174 ià( n > 0) 175 ts_pos +ð n ; 178 n = `¥rštf ( ts_¡r + ts_pos , " [hci%d]", šdex ); 179 ià( n > 0) { 180 ts_pos +ð n ; 181 ts_Ën +ð n ; 185 ià( tv ) { 186 time_t t = tv -> tv_£c ; 187  tm m; 189 `loÿÉime_r (& t , & tm ); 191 ià( `u£_cÞÜ ()) { 192 n = `¥rštf ( ts_¡r + ts_pos , "%s", COLOR_TIMESTAMP ); 193 ià( n > 0) 194 ts_pos +ð n ; 197 ià( fž‹r_mask & PACKET_FILTER_SHOW_DATE ) { 198 n = `¥rštf ( ts_¡r + ts_pos , " %04d-%02d-%02d", 199 tm . tm_y—r + 1900,m. tm_mÚ + 1,m. tm_mday ); 200 ià( n > 0) { 201 ts_pos +ð n ; 202 ts_Ën +ð n ; 206 ià( fž‹r_mask & PACKET_FILTER_SHOW_TIME ) { 207 n = `¥rštf ( ts_¡r + ts_pos , " %02d:%02d:%02d.%06lu", 208 tm . tm_hour ,m. tm_mš ,m. tm_£c , tv -> tv_u£c ); 209 ià( n > 0) { 210 ts_pos +ð n ; 211 ts_Ën +ð n ; 215 ià( fž‹r_mask & PACKET_FILTER_SHOW_TIME_OFFSET ) { 216 n = `¥rštf ( ts_¡r + ts_pos , " %lu.%06lu", 217 tv -> tv_£c - time_off£t ,v-> tv_u£c ); 218 ià( n > 0) { 219 ts_pos +ð n ; 220 ts_Ën +ð n ; 225 ià( `u£_cÞÜ ()) { 226 n = `¥rštf ( ts_¡r + ts_pos , "%s", COLOR_OFF ); 227 ià( n > 0) 228 ts_pos +ð n ; 231 ià( `u£_cÞÜ ()) { 232 n = `¥rštf ( lše + pos , "%s", cÞÜ ); 233 ià( n > 0) 234 pos +ð n ; 237 n = `¥rštf ( lše + pos , "%ø%s", id’t , Ïb– ); 238 ià( n > 0) { 239 pos +ð n ; 240 Ën +ð n ; 243 ià( ‹xt ) { 244  exŒa_Ën = exŒa ? `¡¾’ (extra) : 0; 245  max_Ën = cÞ - Ën - exŒa_Ën - ts_Ën - 3; 247 n = `¢´štf ( lše + pos , max_Ën + 1, ": %s", ‹xt ); 248 ià( n > max_Ën ) { 249 lše [ pos + max_Ën - 1] = '.'; 250 lše [ pos + max_Ën - 2] = '.'; 251 ià( lše [ pos + max_Ën - 3] == ' ') 252 lše [ pos + max_Ën - 3] = '.'; 254 n = max_Ën ; 257 ià( n > 0) { 258 pos +ð n ; 259 Ën +ð n ; 263 ià( `u£_cÞÜ ()) { 264 n = `¥rštf ( lše + pos , "%s", COLOR_OFF ); 265 ià( n > 0) 266 pos +ð n ; 269 ià( exŒa ) { 270 n = `¥rštf ( lše + pos , " %s", exŒa ); 271 ià( n > 0) { 272 pos +ð n ; 273 Ën +ð n ; 277 ià( ts_Ën > 0) { 278 `´štf ("%s", lše ); 279 ià( Ën < cÞ ) 280 `´št_¥aû ( cÞ - Ën - ts_Ën - 1); 281 `´štf ("%s%s\n", `u£_cÞÜ (è? COLOR_TIMESTAMP : "", ts_¡r ); 283 `´štf ("%s\n", lše ); 284 } } 287 ušt8_t m”rÜ ; 288 cÚ¡ * m¡r ; 289 } g”rÜ2¡r_bË [] = { 359  $´št_”rÜ (cÚ¡ * Ïb– , ušt8_t ”rÜ ) 361 cÚ¡ * ¡r = "Unknown"; 362 cÚ¡ * cÞÜ_Ú , * cÞÜ_off ; 363 boÞ unknown = Œue ; 364  i ; 366  i = 0; ”rÜ2¡r_bË [i]. ¡r ; i++) { 367 ià( ”rÜ2¡r_bË [ i ]. ”rÜ ==ƒrror) { 368 ¡r = ”rÜ2¡r_bË [ i ].str; 369 unknown = çl£ ; 374 ià( `u£_cÞÜ ()) { 375 ià( ”rÜ ) { 376 ià( unknown ) 377 cÞÜ_Ú = COLOR_UNKNOWN_ERROR ; 379 cÞÜ_Ú = COLOR_RED ; 381 cÞÜ_Ú = COLOR_GREEN ; 382 cÞÜ_off = COLOR_OFF ; 384 cÞÜ_Ú = ""; 385 cÞÜ_off = ""; 388 `´št_f›ld ("%s: %s%s% (0x%2.2x)", Ïb– , 389 cÞÜ_Ú , ¡r , cÞÜ_off , ”rÜ ); 390 } } 392  $´št_¡©us ( ušt8_t ¡©us ) 394 `´št_”rÜ ("Stus", ¡©us ); 395 } } 397  $´št_»asÚ ( ušt8_t »asÚ ) 399 `´št_”rÜ ("R—sÚ", »asÚ ); 400 } } 402  $·ck‘_´št_”rÜ (cÚ¡ * Ïb– , ušt8_t ”rÜ ) 404 `´št_”rÜ ( Ïb– , ”rÜ ); 405 } } 407  $´št_addr_ty³ (cÚ¡ * Ïb– , ušt8_t addr_ty³ ) 409 cÚ¡ * ¡r ; 411  addr_ty³ ) { 413 ¡r = "Public"; 416 ¡r = "Random"; 419 ¡r = "Reserved"; 423 `´št_f›ld ("%s: % (0x%2.2x)", Ïb– , ¡r , addr_ty³ ); 424 } } 426  $´št_own_addr_ty³ ( ušt8_t addr_ty³ ) 428 cÚ¡ * ¡r ; 430  addr_ty³ ) { 433 ¡r = "Public"; 437 ¡r = "Random"; 440 ¡r = "Reserved"; 444 `´št_f›ld ("OwÀadd»s ty³: % (0x%2.2x)", ¡r , addr_ty³ ); 445 } } 447  $´št_³”_addr_ty³ (cÚ¡ * Ïb– , ušt8_t addr_ty³ ) 449 cÚ¡ * ¡r ; 451  addr_ty³ ) { 453 ¡r = "Public"; 456 ¡r = "Random"; 459 ¡r = "Resolved Public"; 462 ¡r = "Resolved Random"; 465 ¡r = "Reserved"; 469 `´št_f›ld ("%s: % (0x%2.2x)", Ïb– , ¡r , addr_ty³ ); 470 } } 472  $´št_addr_»sÞve (cÚ¡ * Ïb– , cÚ¡ ušt8_t * addr , 473 ušt8_t addr_ty³ , boÞ »sÞve ) 475 cÚ¡ * ¡r ; 476 * com·ny ; 478  addr_ty³ ) { 481 ià(! `hwdb_g‘_com·ny ( addr , & com·ny )) 482 com·ny = NULL ; 484 ià( com·ny ) { 485 `´št_f›ld ("%s: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X" 486 " (%s)", Ïb– , addr [5],‡ddr[4], 487 addr [3],‡ddr[2], 488 addr [1],‡ddr[0], 489 com·ny ); 490 `ä“ ( com·ny ); 492 `´št_f›ld ("%s: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X" 493 " (OUI %2.2X-%2.2X-%2.2X)", Ïb– , 494 addr [5],‡ddr[4],‡ddr[3], 495 addr [2],‡ddr[1],‡ddr[0], 496 addr [5],‡ddr[4],‡ddr[3]); 501 ( addr [5] & 0xc0) >> 6) { 503 ¡r = "Non-Resolvable"; 506 ¡r = "Resolvable"; 509 ¡r = "Static"; 512 ¡r = "Reserved"; 516 `´št_f›ld ("%s: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X (%s)", 517 Ïb– , addr [5],‡ddr[4],‡ddr[3], 518 addr [2],‡ddr[1],‡ddr[0], ¡r ); 520 ià( »sÞve && ( addr [5] & 0xc0) == 0x40) { 521 ušt8_t id’t [6], id’t_ty³ ; 523 ià( `keys_»sÞve_id’t™y ( addr , id’t , & id’t_ty³ )) { 524 `´št_addr_ty³ (" Id’t™yy³", id’t_ty³ ); 525 `´št_addr_»sÞve (" Id’t™y", id’t , 526 id’t_ty³ , çl£ ); 531 `´št_f›ld ("%s: %2.2X-%2.2X-%2.2X-%2.2X-%2.2X-%2.2X", 532 Ïb– , addr [5],‡ddr[4],‡ddr[3], 533 addr [2],‡ddr[1],‡ddr[0]); 536 } } 538  $´št_addr (cÚ¡ * Ïb– , cÚ¡ ušt8_t * addr , 539 ušt8_t addr_ty³ ) 541 `´št_addr_»sÞve ( Ïb– , addr , addr_ty³ , Œue ); 542 } } 544  $´št_bdaddr (cÚ¡ ušt8_t * bdaddr ) 546 `´št_addr ("Add»ss", bdaddr , 0x00); 547 } } 549  $´št_É_addr ( ušt8_t É_addr ) 551 `´št_f›ld ("LT‡dd»ss: %d", É_addr ); 552 } } 554  $´št_hªdË ( ušt16_t hªdË ) 556 `´št_f›ld ("HªdË: %d", `Ë16_to_ýu ( hªdË )); 557 } } 559  $´št_phy_hªdË ( ušt8_t phy_hªdË ) 561 `´št_f›ld ("PhysiÿÈhªdË: %d", phy_hªdË ); 562 } } 565 ušt8_t mb™ ; 566 cÚ¡ * m¡r ; 567 } gpkt_ty³_bË [] = { 583  $´št_pkt_ty³ ( ušt16_t pkt_ty³ ) 585 ušt16_t mask ; 586  i ; 588 `´št_f›ld ("Pack‘y³: 0x%4.4x", `Ë16_to_ýu ( pkt_ty³ )); 590 mask = `Ë16_to_ýu ( pkt_ty³ ); 592  i = 0; pkt_ty³_bË [i]. ¡r ; i++) { 593 ià( `Ë16_to_ýu ( pkt_ty³ è& (1 << pkt_ty³_bË [ i ]. b™ )) { 594 `´št_f›ld (" %s", pkt_ty³_bË [ i ]. ¡r ); 595 mask &ð~(1 << pkt_ty³_bË [ i ]. b™ ); 599 ià( mask ) 600 `´št_‹xt ( COLOR_UNKNOWN_PKT_TYPE_BIT , 601 " UnknowÀ·ck‘y³ (0x%4.4x)", mask ); 602 } } 605 ušt8_t mb™ ; 606 cÚ¡ * m¡r ; 607 } gpkt_ty³_sco_bË [] = { 621  $´št_pkt_ty³_sco ( ušt16_t pkt_ty³ ) 623 ušt16_t mask ; 624  i ; 626 `´št_f›ld ("Pack‘y³: 0x%4.4x", `Ë16_to_ýu ( pkt_ty³ )); 628 mask = `Ë16_to_ýu ( pkt_ty³ ); 630  i = 0; pkt_ty³_sco_bË [i]. ¡r ; i++) { 631 ià( `Ë16_to_ýu ( pkt_ty³ è& (1 << pkt_ty³_sco_bË [ i ]. b™ )) { 632 `´št_f›ld (" %s", pkt_ty³_sco_bË [ i ]. ¡r ); 633 mask &ð~(1 << pkt_ty³_sco_bË [ i ]. b™ ); 637 ià( mask ) 638 `´št_‹xt ( COLOR_UNKNOWN_PKT_TYPE_BIT , 639 " UnknowÀ·ck‘y³ (0x%4.4x)", mask ); 640 } } 642  $´št_Ÿc (cÚ¡ ušt8_t * Ïp ) 644 cÚ¡ * ¡r = ""; 646 ià( Ïp [2] == 0x9e &&†ap[1] == 0x8b) { 647  Ïp [0]) { 649 ¡r = " (General Inquiry)"; 652 ¡r = " (Limited Inquiry)"; 657 `´št_f›ld ("Access code: 0x%2.2x%2.2x%2.2x%s", 658 Ïp [2],†­[1],†­[0], ¡r ); 659 } } 661  $´št_auth_’abË ( ušt8_t ’abË ) 663 cÚ¡ * ¡r ; 665  ’abË ) { 667 ¡r = "Authentication‚ot„equired"; 670 ¡r = "Authentication„equired for‡ll connections"; 673 ¡r = "Reserved"; 677 `´št_f›ld ("EÇbË: % (0x%2.2x)", ¡r , ’abË ); 678 } } 680  $´št_’üy±_mode ( ušt8_t mode ) 682 cÚ¡ * ¡r ; 684  mode ) { 686 ¡r = "Encryption‚ot„equired"; 689 ¡r = "Encryption„equired for‡ll connections"; 692 ¡r = "Reserved"; 696 `´št_f›ld ("Mode: % (0x%2.2x)", ¡r , mode ); 697 } } 700 ušt8_t mb™ ; 701 cÚ¡ * m¡r ; 702 } gsvc_þass_bË [] = { 715 ušt8_t mv® ; 716 cÚ¡ * m¡r ; 717 } gmajÜ_þass_compu‹r_bË [] = { 729 cÚ¡ * $majÜ_þass_compu‹r ( ušt8_t mšÜ ) 731  i ; 733  i = 0; majÜ_þass_compu‹r_bË [i]. ¡r ; i++) { 734 ià( majÜ_þass_compu‹r_bË [ i ]. v® =ð mšÜ ) 735  majÜ_þass_compu‹r_bË [ i ]. ¡r ; 738  NULL ; 739 } } 742 ušt8_t mv® ; 743 cÚ¡ * m¡r ; 744 } gmajÜ_þass_phÚe_bË [] = { 754 cÚ¡ * $majÜ_þass_phÚe ( ušt8_t mšÜ ) 756  i ; 758  i = 0; majÜ_þass_phÚe_bË [i]. ¡r ; i++) { 759 ià( majÜ_þass_phÚe_bË [ i ]. v® =ð mšÜ ) 760  majÜ_þass_phÚe_bË [ i ]. ¡r ; 763  NULL ; 764 } } 767 ušt8_t mv® ; 768 cÚ¡ * m¡r ; 769 } gmajÜ_þass_av_bË [] = { 790 cÚ¡ * $majÜ_þass_av ( ušt8_t mšÜ ) 792  i ; 794  i = 0; majÜ_þass_av_bË [i]. ¡r ; i++) { 795 ià( majÜ_þass_av_bË [ i ]. v® =ð mšÜ ) 796  majÜ_þass_av_bË [ i ]. ¡r ; 799  NULL ; 800 } } 803 ušt8_t mv® ; 804 cÚ¡ * m¡r ; 805 } gmajÜ_þass_w—¿bË_bË [] = { 814 cÚ¡ * $majÜ_þass_w—¿bË ( ušt8_t mšÜ ) 816  i ; 818  i = 0; majÜ_þass_w—¿bË_bË [i]. ¡r ; i++) { 819 ià( majÜ_þass_w—¿bË_bË [ i ]. v® =ð mšÜ ) 820  majÜ_þass_w—¿bË_bË [ i ]. ¡r ; 823  NULL ; 824 } } 827 ušt8_t mv® ; 828 cÚ¡ * m¡r ; 829 cÚ¡ *(* mfunc )( ušt8_t mmšÜ ); 830 } gmajÜ_þass_bË [] = { 833 majÜ_þass_compu‹r }, 835 majÜ_þass_phÚe }, 838 majÜ_þass_av }, 841 { 0x07, "W—¿bË", majÜ_þass_w—¿bË }, 848  $´št_dev_þass (cÚ¡ ušt8_t * dev_þass ) 850 ušt8_t mask , majÜ_þs , mšÜ_þs ; 851 cÚ¡ * majÜ_¡r = NULL ; 852 cÚ¡ * mšÜ_¡r = NULL ; 853  i ; 855 `´št_f›ld ("Class: 0x%2.2x%2.2x%2.2x", 856 dev_þass [2], dev_class[1], dev_class[0]); 858 ià(( dev_þass [0] & 0x03) != 0x00) { 859 `´št_f›ld (" FÜm©y³: 0x%2.2x", dev_þass [0] & 0x03); 860 `´št_‹xt ( COLOR_ERROR , " invalid formatype"); 864 majÜ_þs = dev_þass [1] & 0x1f; 865 mšÜ_þs = ( dev_þass [0] & 0xfc) >> 2; 867  i = 0; majÜ_þass_bË [i]. ¡r ; i++) { 868 ià( majÜ_þass_bË [ i ]. v® =ð majÜ_þs ) { 869 majÜ_¡r = majÜ_þass_bË [ i ]. ¡r ; 871 ià(! majÜ_þass_bË [ i ]. func ) 874 mšÜ_¡r = majÜ_þass_bË [ i ]. `func ( mšÜ_þs ); 879 ià( majÜ_¡r ) { 880 `´št_f›ld (" MajÜ cÏss: %s", majÜ_¡r ); 881 ià( mšÜ_¡r ) 882 `´št_f›ld (" MšÜ cÏss: %s", mšÜ_¡r ); 884 `´št_f›ld (" MšÜ cÏss: 0x%2.2x", mšÜ_þs ); 886 `´št_f›ld (" MajÜ cÏss: 0x%2.2x", majÜ_þs ); 887 `´št_f›ld (" MšÜ cÏss: 0x%2.2x", mšÜ_þs ); 890 ià( dev_þass [1] & 0x20) 891 `´št_f›ld (" Limited Discoverable Mode"); 893 ià(( dev_þass [1] & 0xc0) != 0x00) { 894 `´št_‹xt ( COLOR_ERROR , " invalid service class"); 898 mask = dev_þass [2]; 900  i = 0; svc_þass_bË [i]. ¡r ; i++) { 901 ià( dev_þass [2] & (1 << svc_þass_bË [ i ]. b™ )) { 902 `´št_f›ld (" %s", svc_þass_bË [ i ]. ¡r ); 903 mask &ð~(1 << svc_þass_bË [ i ]. b™ ); 907 ià( mask ) 908 `´št_‹xt ( COLOR_UNKNOWN_SERVICE_CLASS , 909 " UnknowÀ£rviû cÏs (0x%2.2x)", mask ); 910 } } 913 ušt16_t mv® ; 914 boÞ mg’”ic ; 915 cÚ¡ * m¡r ; 916 } g­³¬ªû_bË [] = { 917 { 0, Œue , "Unknown" }, 918 { 64, Œue , "Phone" }, 919 { 128, Œue , "Computer" }, 920 { 192, Œue , "Watch" }, 921 { 193, çl£ , "Sports Watch" }, 922 { 256, Œue , "Clock" }, 923 { 320, Œue , "Display" }, 924 { 384, Œue , "Remote Control" }, 925 { 448, Œue , "Eye-glasses" }, 926 { 512, Œue , "Tag" }, 927 { 576, Œue , "Keyring" }, 928 { 640, Œue , "Media Player" }, 929 { 704, Œue , "Barcode Scanner" }, 930 { 768, Œue , "Thermometer" }, 931 { 769, çl£ , "Thermometer: Ear" }, 932 { 832, Œue , "Heart Rate Sensor" }, 933 { 833, çl£ , "Heart Rate Belt" }, 934 { 896, Œue , "Blood Pressure" }, 935 { 897, çl£ , "Blood Pressure: Arm" }, 936 { 898, çl£ , "Blood Pressure: Wrist" }, 937 { 960, Œue , "Human Interface Device" }, 938 { 961, çl£ , "Keyboard" }, 939 { 962, çl£ , "Mouse" }, 940 { 963, çl£ , "Joystick" }, 941 { 964, çl£ , "Gamepad" }, 942 { 965, çl£ , "Digitizer Tablet" }, 943 { 966, çl£ , "Card Reader" }, 944 { 967, çl£ , "Digital Pen" }, 945 { 968, çl£ , "Barcode Scanner" }, 946 { 1024, Œue , "Glucose Meter" }, 947 { 1088, Œue , "Running Walking Sensor" }, 948 { 1089, çl£ , "Running Walking Sensor: In-Shoe" }, 949 { 1090, çl£ , "Running Walking Sensor: On-Shoe" }, 950 { 1091, çl£ , "Running Walking Sensor: On-Hip" }, 951 { 1152, Œue , "Cycling" }, 952 { 1153, çl£ , "Cycling: Cycling Computer" }, 953 { 1154, çl£ , "Cycling: Speed Sensor" }, 954 { 1155, çl£ , "Cycling: Cadence Sensor" }, 955 { 1156, çl£ , "Cycling: Power Sensor" }, 956 { 1157, çl£ , "Cycling: Speed‡nd Cadence Sensor" }, 957 { 1216, Œue , "Undefined" }, 959 { 3136, Œue , "Pulse Oximeter" }, 960 { 3137, çl£ , "Pulse Oximeter: Fingertip" }, 961 { 3138, çl£ , "Pulse Oximeter: Wrist Worn" }, 962 { 3200, Œue , "Weight Scale" }, 963 { 3264, Œue , "Undefined" }, 965 { 5184, Œue , "Outdoor Sports Activity" }, 966 { 5185, çl£ , "Location Display Device" }, 967 { 5186, çl£ , "Location‡nd Navigation Display Device" }, 968 { 5187, çl£ , "Location Pod" }, 969 { 5188, çl£ , "Location‡nd Navigation Pod" }, 970 { 5248, Œue , "Undefined" }, 974  $´št_­³¬ªû ( ušt16_t ­³¬ªû ) 976 cÚ¡ * ¡r = NULL ; 977  i , ty³ = 0; 979  i = 0; ­³¬ªû_bË [i]. ¡r ; i++) { 980 ià( ­³¬ªû_bË [ i ]. g’”ic ) { 981 ià( ­³¬ªû < ­³¬ªû_bË [ i ]. v® ) 983 ty³ = i ; 986 ià( ­³¬ªû_bË [ i ]. v® =ð ­³¬ªû ) { 987 ¡r = ­³¬ªû_bË [ i ].str; 992 ià(! ¡r ) 993 ¡r = ­³¬ªû_bË [ ty³ ].str; 995 `´št_f›ld ("Aµ—¿nû: % (0x%4.4x)", ¡r , ­³¬ªû ); 996 } } 998  $´št_num_brßdÿ¡_»Œªs ( ušt8_t num_»Œªs ) 1000 `´št_f›ld ("Numb” oàbrßdÿ¡„‘¿nsmissiÚs: %u", num_»Œªs ); 1001 } } 1003  $´št_hÞd_mode_aùiv™y ( ušt8_t aùiv™y ) 1005 `´št_f›ld ("Aùiv™y: 0x%2.2x", aùiv™y ); 1007 ià( aùiv™y == 0x00) { 1008 `´št_f›ld (" Maintain current Power State"); 1012 ià( aùiv™y & 0x01) 1013 `´št_f›ld (" Suspend Page Scan"); 1014 ià( aùiv™y & 0x02) 1015 `´št_f›ld (" Suspend Inquiry Scan"); 1016 ià( aùiv™y & 0x04) 1017 `´št_f›ld (" Suspend Periodic Inquiries"); 1018 } } 1020  $´št_pow”_ty³ ( ušt8_t ty³ ) 1022 cÚ¡ * ¡r ; 1024  ty³ ) { 1026 ¡r = "Current Transmit Power Level"; 1029 ¡r = "Maximum Transmit Power Level"; 1032 ¡r = "Reserved"; 1036 `´št_f›ld ("Ty³: % (0x%2.2x)", ¡r , ty³ ); 1037 } } 1039  $´št_pow”_Ëv– ( št8_t Ëv– ) 1041 `´št_f›ld ("TX…ow”: %d dBm", Ëv– ); 1042 } } 1044  $´št_sync_æow_cÚŒÞ ( ušt8_t ’abË ) 1046 cÚ¡ * ¡r ; 1048  ’abË ) { 1050 ¡r = "Disabled"; 1053 ¡r = "Enabled"; 1056 ¡r = "Reserved"; 1060 `´št_f›ld ("Flow cÚŒÞ: % (0x%2.2x)", ¡r , ’abË ); 1061 } } 1063  $´št_ho¡_æow_cÚŒÞ ( ušt8_t ’abË ) 1065 cÚ¡ * ¡r ; 1067  ’abË ) { 1069 ¡r = "Off"; 1072 ¡r = "ACL Data Packets"; 1075 ¡r = "Synchronous Data Packets"; 1078 ¡r = "ACL‡nd Synchronous Data Packets"; 1081 ¡r = "Reserved"; 1085 `´št_f›ld ("Flow cÚŒÞ: % (0x%2.2x)", ¡r , ’abË ); 1086 } } 1088  $´št_voiû_£‰šg ( ušt16_t £‰šg ) 1090 ušt8_t šput_codšg = ( `Ë16_to_ýu ( £‰šg ) & 0x0300) >> 8; 1091 ušt8_t šput_d©a_fÜm© = ( `Ë16_to_ýu ( £‰šg ) & 0xc0) >> 6; 1092 ušt8_t aœ_codšg_fÜm© = `Ë16_to_ýu ( £‰šg ) & 0x0003; 1093 cÚ¡ * ¡r ; 1095 `´št_f›ld ("S‘tšg: 0x%4.4x", `Ë16_to_ýu ( £‰šg )); 1097  šput_codšg ) { 1099 ¡r = "Linear"; 1102 ¡r ="u-law"; 1105 ¡r = "A-law"; 1108 ¡r = "Reserved"; 1112 `´št_f›ld (" IÅuˆCodšg: %s", ¡r ); 1114  šput_d©a_fÜm© ) { 1116 ¡r = "1's complement"; 1119 ¡r = "2's complement"; 1122 ¡r = "Sign-Magnitude"; 1125 ¡r = "Unsigned"; 1128 ¡r = "Reserved"; 1132 `´št_f›ld (" IÅuˆD©¨FÜm©: %s", ¡r ); 1134 ià( šput_codšg == 0x00) { 1135 `´št_f›ld (" Input Sample Size: %s", 1136 `Ë16_to_ýu ( £‰šg ) & 0x20 ? "16-bit" : "8-bit"); 1137 `´št_f›ld (" # of bits…adding‡t MSB: %d", 1138 ( `Ë16_to_ýu ( £‰šg ) & 0x1c) >> 2); 1141  aœ_codšg_fÜm© ) { 1143 ¡r = "CVSD"; 1146 ¡r ="u-law"; 1149 ¡r = "A-law"; 1152 ¡r = "Transparent Data"; 1155 ¡r = "Reserved"; 1159 `´št_f›ld (" Aœ Codšg FÜm©: %s", ¡r ); 1160 } } 1162  $´št_»ŒªsmissiÚ_effÜt ( ušt8_t effÜt ) 1164 cÚ¡ * ¡r ; 1166  effÜt ) { 1168 ¡r = "No„etransmissions"; 1171 ¡r = "Optimize for…ower consumption"; 1174 ¡r = "Optimize for†ink quality"; 1177 ¡r = "Don't care"; 1180 ¡r = "Reserved"; 1184 `´št_f›ld ("R‘¿nsmissiÚƒffÜt: % (0x%2.2x)", ¡r , effÜt ); 1185 } } 1187  $´št_sÿn_’abË ( ušt8_t sÿn_’abË ) 1189 cÚ¡ * ¡r ; 1191  sÿn_’abË ) { 1193 ¡r = "No Scans"; 1196 ¡r = "Inquiry Scan"; 1199 ¡r = "Page Scan"; 1202 ¡r = "Inquiry Scan + Page Scan"; 1205 ¡r = "Reserved"; 1209 `´št_f›ld ("SÿÀ’abË: % (0x%2.2x)", ¡r , sÿn_’abË ); 1210 } } 1212  $´št_lšk_pÞicy ( ušt16_t lšk_pÞicy ) 1214 ušt16_t pÞicy = `Ë16_to_ýu ( lšk_pÞicy ); 1216 `´št_f›ld ("Lšk…Þicy: 0x%4.4x", pÞicy ); 1218 ià( pÞicy == 0x0000) { 1219 `´št_f›ld (" Disable All Modes"); 1223 ià( pÞicy & 0x0001) 1224 `´št_f›ld (" Enable Role Switch"); 1225 ià( pÞicy & 0x0002) 1226 `´št_f›ld (" Enable Hold Mode"); 1227 ià( pÞicy & 0x0004) 1228 `´št_f›ld (" Enable Sniff Mode"); 1229 ià( pÞicy & 0x0008) 1230 `´št_f›ld (" Enabled Park State"); 1231 } } 1233  $´št_aœ_mode ( ušt8_t mode ) 1235 cÚ¡ * ¡r ; 1237  mode ) { 1239 ¡r = "u-law†og"; 1242 ¡r = "A-law†og"; 1245 ¡r = "CVSD"; 1248 ¡r = "Transparent"; 1251 ¡r = "Reserved"; 1255 `´št_f›ld ("Aœ mode: % (0x%2.2x)", ¡r , mode ); 1256 } } 1258  $´št_codec (cÚ¡ * Ïb– , ušt8_t codec ) 1260 cÚ¡ * ¡r ; 1262  codec ) { 1264 ¡r = "u-law†og"; 1267 ¡r = "A-law†og"; 1270 ¡r = "CVSD"; 1273 ¡r = "Transparent"; 1276 ¡r = "Linear PCM"; 1279 ¡r = "mSBC"; 1282 ¡r = "Vendor specific"; 1285 ¡r = "Reserved"; 1289 `´št_f›ld ("%s: % (0x%2.2x)", Ïb– , ¡r , codec ); 1290 } } 1292  $´št_šquœy_mode ( ušt8_t mode ) 1294 cÚ¡ * ¡r ; 1296  mode ) { 1298 ¡r = "Standard Inquiry Result"; 1301 ¡r = "Inquiry Result with RSSI"; 1304 ¡r = "Inquiry Result with RSSI or Extended Inquiry Result"; 1307 ¡r = "Reserved"; 1311 `´št_f›ld ("Mode: % (0x%2.2x)", ¡r , mode ); 1312 } } 1314  $´št_šquœy_sÿn_ty³ ( ušt8_t ty³ ) 1316 cÚ¡ * ¡r ; 1318  ty³ ) { 1320 ¡r = "Standard Scan"; 1323 ¡r = "Interlaced Scan"; 1326 ¡r = "Reserved"; 1330 `´št_f›ld ("Ty³: % (0x%2.2x)", ¡r , ty³ ); 1331 } } 1333  $´št_psÿn_ty³ ( ušt8_t ty³ ) 1335 cÚ¡ * ¡r ; 1337  ty³ ) { 1339 ¡r = "Standard Scan"; 1342 ¡r = "Interlaced Scan"; 1345 ¡r = "Reserved"; 1349 `´št_f›ld ("Ty³: % (0x%2.2x)", ¡r , ty³ ); 1350 } } 1352  $´št_afh_mode ( ušt8_t mode ) 1354 cÚ¡ * ¡r ; 1356  mode ) { 1358 ¡r = "Disabled"; 1361 ¡r = "Enabled"; 1364 ¡r = "Reserved"; 1368 `´št_f›ld ("Mode: % (0x%2.2x)", ¡r , mode ); 1369 } } 1371  $´št_sim¶e_·œšg_mode ( ušt8_t mode ) 1373 cÚ¡ * ¡r ; 1375  mode ) { 1377 ¡r = "Disabled"; 1380 ¡r = "Enabled"; 1383 ¡r = "Reserved"; 1387 `´št_f›ld ("Mode: % (0x%2.2x)", ¡r , mode ); 1388 } } 1390  $´št_s¥_debug_mode ( ušt8_t mode ) 1392 cÚ¡ * ¡r ; 1394  mode ) { 1396 ¡r = "Disabled"; 1399 ¡r = "Enabled"; 1402 ¡r = "Reserved"; 1406 `´št_f›ld ("Debug mode: % (0x%2.2x)", ¡r , mode ); 1407 } } 1409  $´št_£cu»_cÚn_suµÜt ( ušt8_t suµÜt ) 1411 cÚ¡ * ¡r ; 1413  suµÜt ) { 1415 ¡r = "Disabled"; 1418 ¡r = "Enabled"; 1421 ¡r = "Reserved"; 1425 `´št_f›ld ("SuµÜt: % (0x%2.2x)", ¡r , suµÜt ); 1426 } } 1428  $´št_auth_·ylßd_timeout ( ušt16_t timeout ) 1430 `´št_f›ld ("Timeout: %d msec (0x%4.4x)", 1431 `Ë16_to_ýu ( timeout ) * 10,†e16_to_cpu(timeout)); 1432 } } 1434  $´št_psÿn_»p_mode ( ušt8_t psÿn_»p_mode ) 1436 cÚ¡ * ¡r ; 1438  psÿn_»p_mode ) { 1440 ¡r = "R0"; 1443 ¡r = "R1"; 1446 ¡r = "R2"; 1449 ¡r = "Reserved"; 1453 `´št_f›ld ("Page scan„epetition mode: %s (0x%2.2x)", 1454 ¡r , psÿn_»p_mode ); 1455 } } 1457  $´št_psÿn_³riod_mode ( ušt8_t psÿn_³riod_mode ) 1459 cÚ¡ * ¡r ; 1461  psÿn_³riod_mode ) { 1463 ¡r = "P0"; 1466 ¡r = "P1"; 1469 ¡r = "P2"; 1472 ¡r = "Reserved"; 1476 `´št_f›ld ("Pag³riod mode: % (0x%2.2x)", ¡r , psÿn_³riod_mode ); 1477 } } 1479  $´št_psÿn_mode ( ušt8_t psÿn_mode ) 1481 cÚ¡ * ¡r ; 1483  psÿn_mode ) { 1485 ¡r = "Mandatory"; 1488 ¡r = "Optional I"; 1491 ¡r = "Optional II"; 1494 ¡r = "Optional III"; 1497 ¡r = "Reserved"; 1501 `´št_f›ld ("PagsÿÀmode: % (0x%2.2x)", ¡r , psÿn_mode ); 1502 } } 1504  $´št_þock_off£t ( ušt16_t þock_off£t ) 1506 `´št_f›ld ("Clock off£t: 0x%4.4x", `Ë16_to_ýu ( þock_off£t )); 1507 } } 1509  $´št_þock ( ušt32_t þock ) 1511 `´št_f›ld ("Clock: 0x%8.8x", `Ë32_to_ýu ( þock )); 1512 } } 1514  $´št_þock_ty³ ( ušt8_t ty³ ) 1516 cÚ¡ * ¡r ; 1518  ty³ ) { 1520 ¡r = "Local clock"; 1523 ¡r = "Piconet clock"; 1526 ¡r = "Reserved"; 1530 `´št_f›ld ("Ty³: % (0x%2.2x)", ¡r , ty³ ); 1531 } } 1533  $´št_þock_accu¿cy ( ušt16_t accu¿cy ) 1535 ià( `Ë16_to_ýu ( accu¿cy ) == 0xffff) 1536 `´št_f›ld ("Accuracy: Unknown (0x%4.4x)", 1537 `Ë16_to_ýu ( accu¿cy )); 1539 `´št_f›ld ("Accuracy: %.4f msec (0x%4.4x)", 1540 `Ë16_to_ýu ( accu¿cy ) * 0.3125, 1541 `Ë16_to_ýu ( accu¿cy )); 1542 } } 1544  $´št_Ío_®lowed ( ušt8_t Ío_®lowed ) 1546 `´št_f›ld ("LPO‡Îowed: 0x%2.2x", Ío_®lowed ); 1547 } } 1549  $´št_brßdÿ¡_äagm’t ( ušt8_t äagm’t ) 1551 cÚ¡ * ¡r ; 1553  äagm’t ) { 1555 ¡r = "Continuation fragment"; 1558 ¡r = "Starting fragment"; 1561 ¡r = "Ending fragment"; 1564 ¡r = "No fragmentation"; 1567 ¡r = "Reserved"; 1571 `´št_f›ld ("F¿gm’t: % (0x%2.2x)", ¡r , äagm’t ); 1572 } } 1574  $´št_lšk_ty³ ( ušt8_t lšk_ty³ ) 1576 cÚ¡ * ¡r ; 1578  lšk_ty³ ) { 1580 ¡r = "SCO"; 1583 ¡r = "ACL"; 1586 ¡r = "eSCO"; 1589 ¡r = "Reserved"; 1593 `´št_f›ld ("Lšky³: % (0x%2.2x)", ¡r , lšk_ty³ ); 1594 } } 1596  $´št_’ü_mode ( ušt8_t ’ü_mode ) 1598 cÚ¡ * ¡r ; 1600  ’ü_mode ) { 1602 ¡r = "Disabled"; 1605 ¡r = "Enabled"; 1608 ¡r = "Reserved"; 1612 `´št_f›ld ("Enüy±iÚ: % (0x%2.2x)", ¡r , ’ü_mode ); 1613 } } 1615  $´št_’ü_mode_chªge ( ušt8_t ’ü_mode , ušt16_t hªdË ) 1617 cÚ¡ * ¡r ; 1618 ušt8_t cÚn_ty³ ; 1620 cÚn_ty³ = `g‘_ty³ ( `Ë16_to_ýu ( hªdË )); 1622  ’ü_mode ) { 1624 ¡r = "Disabled"; 1627  cÚn_ty³ ) { 1629 ¡r = "Enabled with E0"; 1632 ¡r = "Enabled with AES-CCM"; 1635 ¡r = "Enabled"; 1640 ¡r = "Enabled with AES-CCM"; 1643 ¡r = "Reserved"; 1647 `´št_f›ld ("Enüy±iÚ: % (0x%2.2x)", ¡r , ’ü_mode ); 1648 } } 1650  $´št_pš_ty³ ( ušt8_t pš_ty³ ) 1652 cÚ¡ * ¡r ; 1654  pš_ty³ ) { 1656 ¡r = "Variable"; 1659 ¡r = "Fixed"; 1662 ¡r = "Reserved"; 1666 `´št_f›ld ("PINy³: % (0x%2.2x)", ¡r , pš_ty³ ); 1667 } } 1669  $´št_key_æag ( ušt8_t key_æag ) 1671 cÚ¡ * ¡r ; 1673  key_æag ) { 1675 ¡r = "Semi-permanent"; 1678 ¡r = "Temporary"; 1681 ¡r = "Reserved"; 1685 `´št_f›ld ("Key fÏg: % (0x%2.2x)", ¡r , key_æag ); 1686 } } 1688  $´št_key_Ën ( ušt8_t key_Ën ) 1690 cÚ¡ * ¡r ; 1692  key_Ën ) { 1694 ¡r = "802.11 PAL"; 1697 ¡r = "Reserved"; 1701 `´št_f›ld ("Key†’gth: % (%d)", ¡r , key_Ën ); 1702 } } 1704  $´št_key_ty³ ( ušt8_t key_ty³ ) 1706 cÚ¡ * ¡r ; 1708  key_ty³ ) { 1710 ¡r = "Combination key"; 1713 ¡r = "Local Unit key"; 1716 ¡r = "Remote Unit key"; 1719 ¡r = "Debug Combination key"; 1722 ¡r = "Unauthenticated Combination key from P-192"; 1725 ¡r = "Authenticated Combination key from P-192"; 1728 ¡r = "Changed Combination key"; 1731 ¡r = "Unauthenticated Combination key from P-256"; 1734 ¡r = "Authenticated Combination key from P-256"; 1737 ¡r = "Reserved"; 1741 `´št_f›ld ("Keyy³: % (0x%2.2x)", ¡r , key_ty³ ); 1742 } } 1744  $´št_key_size ( ušt8_t key_size ) 1746 `´št_f›ld ("Key size: %d", key_size ); 1747 } } 1749  $´št_hex_f›ld (cÚ¡ * Ïb– , cÚ¡ ušt8_t * d©a , 1750 ušt8_t Ën ) 1752  ¡r [ Ën * 2 + 1]; 1753 ušt8_t i ; 1755 ¡r [0] = '\0'; 1757  i = 0; i < Ën ; i++) 1758 `¥rštf ( ¡r + ( i * 2), "%2.2x", d©a [i]); 1760 `´št_f›ld ("%s: %s", Ïb– , ¡r ); 1761 } } 1763  $´št_key (cÚ¡ * Ïb– , cÚ¡ ušt8_t * lšk_key ) 1765 `´št_hex_f›ld ( Ïb– , lšk_key , 16); 1766 } } 1768  $´št_lšk_key (cÚ¡ ušt8_t * lšk_key ) 1770 `´št_key ("Lšk key", lšk_key ); 1771 } } 1773  $´št_pš_code (cÚ¡ ušt8_t * pš_code , ušt8_ˆ pš_Ën ) 1775  ¡r [ pš_Ën + 1]; 1776 ušt8_t i ; 1778  i = 0; i < pš_Ën ; i++) 1779 `¥rštf ( ¡r + i , "%c", (cÚ¡ è pš_code [i]); 1781 `´št_f›ld ("PIN code: %s", ¡r ); 1782 } } 1784  $´št_hash_p192 (cÚ¡ ušt8_t * hash ) 1786 `´št_key ("Hash C from P-192", hash ); 1787 } } 1789  $´št_hash_p256 (cÚ¡ ušt8_t * hash ) 1791 `´št_key ("Hash C from P-256", hash ); 1792 } } 1794  $´št_¿ndomiz”_p192 (cÚ¡ ušt8_t * ¿ndomiz” ) 1796 `´št_key ("Rªdomiz” R w™h P-192", ¿ndomiz” ); 1797 } } 1799  $´št_¿ndomiz”_p256 (cÚ¡ ušt8_t * ¿ndomiz” ) 1801 `´št_key ("Rªdomiz” R w™h P-256", ¿ndomiz” ); 1802 } } 1804  $´št_pk256 (cÚ¡ * Ïb– , cÚ¡ ušt8_t * key ) 1806 `´št_hex_f›ld ( Ïb– , key , 64); 1807 } } 1809  $´št_dhkey (cÚ¡ ušt8_t * dhkey ) 1811 `´št_hex_f›ld ("Diff›-H–lmª key", dhkey , 32); 1812 } } 1814  $´št_·sskey ( ušt32_t ·sskey ) 1816 `´št_f›ld ("Passkey: %06d", `Ë32_to_ýu ( ·sskey )); 1817 } } 1819  $´št_io_ÿ·bž™y ( ušt8_t ÿ·bž™y ) 1821 cÚ¡ * ¡r ; 1823  ÿ·bž™y ) { 1825 ¡r = "DisplayOnly"; 1828 ¡r = "DisplayYesNo"; 1831 ¡r = "KeyboardOnly"; 1834 ¡r = "NoInputNoOutput"; 1837 ¡r = "Reserved"; 1841 `´št_f›ld ("IO c­abž™y: % (0x%2.2x)", ¡r , ÿ·bž™y ); 1842 } } 1844  $´št_oob_d©a ( ušt8_t oob_d©a ) 1846 cÚ¡ * ¡r ; 1848  oob_d©a ) { 1850 ¡r = "Authentication data‚ot…resent"; 1853 ¡r = "P-192‡uthentication data…resent"; 1856 ¡r = "P-256‡uthentication data…resent"; 1859 ¡r = "P-192‡nd P-256‡uthentication data…resent"; 1862 ¡r = "Reserved"; 1866 `´št_f›ld ("OOB d©a: % (0x%2.2x)", ¡r , oob_d©a ); 1867 } } 1869  $´št_auth’tiÿtiÚ ( ušt8_t auth’tiÿtiÚ ) 1871 cÚ¡ * ¡r ; 1873  auth’tiÿtiÚ ) { 1875 ¡r = "No Bonding - MITM‚ot„equired"; 1878 ¡r = "No Bonding - MITM„equired"; 1881 ¡r = "Dedicated Bonding - MITM‚ot„equired"; 1884 ¡r = "Dedicated Bonding - MITM„equired"; 1887 ¡r = "General Bonding - MITM‚ot„equired"; 1890 ¡r = "General Bonding - MITM„equired"; 1893 ¡r = "Reserved"; 1897 `´št_f›ld ("Auth’tiÿtiÚ: % (0x%2.2x)", ¡r , auth’tiÿtiÚ ); 1898 } } 1900  $·ck‘_´št_io_ÿ·bž™y ( ušt8_t ÿ·bž™y ) 1902 `´št_io_ÿ·bž™y ( ÿ·bž™y ); 1903 } } 1905  $·ck‘_´št_io_auth’tiÿtiÚ ( ušt8_t auth’tiÿtiÚ ) 1907 `´št_auth’tiÿtiÚ ( auth’tiÿtiÚ ); 1908 } } 1910  $´št_loÿtiÚ_domaš_aw¬e ( ušt8_t aw¬e ) 1912 cÚ¡ * ¡r ; 1914  aw¬e ) { 1916 ¡r = "Regulatory domain unknown"; 1919 ¡r = "Regulatory domain known"; 1922 ¡r = "Reserved"; 1926 `´št_f›ld ("Domaš‡w¬e: % (0x%2.2x)", ¡r , aw¬e ); 1927 } } 1929  $´št_loÿtiÚ_domaš (cÚ¡ ušt8_t * domaš ) 1931 `´št_f›ld ("Domain: %c%c (0x%2.2x%2.2x)", 1932 (è domaš [0], () domain[1], domain[0], domain[1]); 1933 } } 1935  $´št_loÿtiÚ_domaš_ÝtiÚs ( ušt8_t ÝtiÚs ) 1937 `´št_f›ld ("Domaš o±iÚs: %ø(0x%2.2x)", (è ÝtiÚs , options); 1938 } } 1940  $´št_loÿtiÚ_ÝtiÚs ( ušt8_t ÝtiÚs ) 1942 `´št_f›ld ("O±iÚs: 0x%2.2x", ÝtiÚs ); 1943 } } 1945  $´št_æow_cÚŒÞ_mode ( ušt8_t mode ) 1947 cÚ¡ * ¡r ; 1949  mode ) { 1951 ¡r = "Packet based"; 1954 ¡r = "Data block based"; 1957 ¡r = "Reserved"; 1961 `´št_f›ld ("Flow cÚŒÞ mode: % (0x%2.2x)", ¡r , mode ); 1962 } } 1964  $´št_æow_dœeùiÚ ( ušt8_t dœeùiÚ ) 1966 cÚ¡ * ¡r ; 1968  dœeùiÚ ) { 1970 ¡r = "Outgoing"; 1973 ¡r = "Incoming"; 1976 ¡r = "Reserved"; 1980 `´št_f›ld ("Flow dœeùiÚ: % (0x%2.2x)", ¡r , dœeùiÚ ); 1981 } } 1983  $´št_£rviû_ty³ ( ušt8_t £rviû_ty³ ) 1985 cÚ¡ * ¡r ; 1987  £rviû_ty³ ) { 1989 ¡r = "No Traffic"; 1992 ¡r = "Best Effort"; 1995 ¡r = "Guaranteed"; 1998 ¡r = "Reserved"; 2002 `´št_f›ld ("S”viûy³: % (0x%2.2x)", ¡r , £rviû_ty³ ); 2003 } } 2005  $´št_æow_¥ec (cÚ¡ * Ïb– , cÚ¡ ušt8_t * d©a ) 2007 cÚ¡ * ¡r ; 2009  d©a [1]) { 2011 ¡r = "Noraffic"; 2014 ¡r = "Bestƒffort"; 2017 ¡r = "Guaranteed"; 2020 ¡r = "Reserved"; 2024 `´št_f›ld ("% æow s³c: 0x%2.2x", Ïb– , d©a [0]); 2025 `´št_f›ld (" S”viûy³: % (0x%2.2x)", ¡r , d©a [1]); 2026 `´št_f›ld (" Maximum SDU size: 0x%4.4x", `g‘_Ë16 ( d©a + 2)); 2027 `´št_f›ld (" SDU iÁ”-¬riv®ime: 0x%8.8x", `g‘_Ë32 ( d©a + 4)); 2028 `´št_f›ld (" Acûs Ï‹ncy: 0x%8.8x", `g‘_Ë32 ( d©a + 8)); 2029 `´št_f›ld (" Flushimeout: 0x%8.8x", `g‘_Ë32 ( d©a + 12)); 2030 } } 2032  $´št_shÜt_¿nge_mode ( ušt8_t mode ) 2034 cÚ¡ * ¡r ; 2036  mode ) { 2038 ¡r = "Disabled"; 2041 ¡r = "Enabled"; 2044 ¡r = "Reserved"; 2048 `´št_f›ld ("Sh܈¿ngmode: % (0x%2.2x)", ¡r , mode ); 2049 } } 2051  $´št_amp_¡©us ( ušt8_t amp_¡©us ) 2053 cÚ¡ * ¡r ; 2055  amp_¡©us ) { 2057 ¡r = "Present"; 2060 ¡r = "Bluetooth only"; 2063 ¡r = "No capacity"; 2066 ¡r = "Low capacity"; 2069 ¡r = "Medium capacity"; 2072 ¡r = "High capacity"; 2075 ¡r = "Full capacity"; 2078 ¡r = "Reserved"; 2082 `´št_f›ld ("AMP stus: % (0x%2.2x)", ¡r , amp_¡©us ); 2083 } } 2085  $´št_num_»¥ ( ušt8_t num_»¥ ) 2087 `´št_f›ld ("Num„e¥Ú£s: %d", num_»¥ ); 2088 } } 2090  $´št_num_»pÜts ( ušt8_t num_»pÜts ) 2092 `´št_f›ld ("Num„•Üts: %d", num_»pÜts ); 2093 } } 2095  $´št_adv_ev’t_ty³ ( ušt8_t ty³ ) 2097 cÚ¡ * ¡r ; 2099  ty³ ) { 2101 ¡r = "Connectable undirected - ADV_IND"; 2104 ¡r = "Connectable directed - ADV_DIRECT_IND"; 2107 ¡r = "Scannable undirected - ADV_SCAN_IND"; 2110 ¡r = "Non connectable undirected - ADV_NONCONN_IND"; 2113 ¡r = "Scan„esponse - SCAN_RSP"; 2116 ¡r = "Reserved"; 2120 `´št_f›ld ("Ev’ˆty³: % (0x%2.2x)", ¡r , ty³ ); 2121 } } 2123  $´št_rssi ( št8_t rssi ) 2125 ià(( ušt8_t è rssi == 0x99 ||„ssi == 127) 2126 `´št_f›ld ("RSSI: inv®id (0x%2.2x)", ( ušt8_t è rssi ); 2128 `´št_f›ld ("RSSI: %d dBm (0x%2.2x)", rssi , ( ušt8_t )„ssi); 2129 } } 2131  $´št_¦Ù_625 (cÚ¡ * Ïb– , ušt16_t v®ue ) 2133 `´št_f›ld ("%s: %.3àm£ø(0x%4.4x)", Ïb– , 2134 `Ë16_to_ýu ( v®ue ) * 0.625,†e16_to_cpu(value)); 2135 } } 2137  $´št_¦Ù_125 (cÚ¡ * Ïb– , ušt16_t v®ue ) 2139 `´št_f›ld ("%s: %.2àm£ø(0x%4.4x)", Ïb– , 2140 `Ë16_to_ýu ( v®ue ) * 1.25,†e16_to_cpu(value)); 2141 } } 2143  $´št_timeout ( ušt16_t timeout ) 2145 `´št_¦Ù_625 ("Timeout", timeout ); 2146 } } 2148  $´št_š‹rv® ( ušt16_t š‹rv® ) 2150 `´št_¦Ù_625 ("IÁ”v®", š‹rv® ); 2151 } } 2153  $´št_wšdow ( ušt16_t wšdow ) 2155 `´št_¦Ù_625 ("Wšdow", wšdow ); 2156 } } 2158  $´št_rÞe ( ušt8_t rÞe ) 2160 cÚ¡ * ¡r ; 2162  rÞe ) { 2164 ¡r = "Master"; 2167 ¡r = "Slave"; 2170 ¡r = "Reserved"; 2174 `´št_f›ld ("RÞe: % (0x%2.2x)", ¡r , rÞe ); 2175 } } 2177  $´št_mode ( ušt8_t mode ) 2179 cÚ¡ * ¡r ; 2181  mode ) { 2183 ¡r = "Active"; 2186 ¡r = "Hold"; 2189 ¡r = "Sniff"; 2192 ¡r = "Park"; 2195 ¡r = "Reserved"; 2199 `´št_f›ld ("Mode: % (0x%2.2x)", ¡r , mode ); 2200 } } 2202  $´št_Çme (cÚ¡ ušt8_t * Çme ) 2204  ¡r [249]; 2206 `memýy ( ¡r , Çme , 248); 2207 ¡r [248] = '\0'; 2209 `´št_f›ld ("Name: %s", ¡r ); 2210 } } 2212  $´št_chªÃl_m­ (cÚ¡ ušt8_t * m­ ) 2214  couÁ = 0, ¡¬t = 0; 2215  ¡r [21]; 2216  i , n ; 2218  i = 0; i < 10; i++) 2219 `¥rštf ( ¡r + ( i * 2), "%2.2x", m­ [i]); 2221 `´št_f›ld ("ChªÃÈm­: 0x%s", ¡r ); 2223  i = 0; i < 10; i++) { 2224  n = 0;‚ < 8;‚++) { 2225 ià( m­ [ i ] & (1 << n )) { 2226 ià( couÁ == 0) 2227 ¡¬t = ( i * 8è+ n ; 2228 couÁ ++; 2232 ià( couÁ > 1) { 2233 `´št_f›ld (" Channel %u-%u", 2234 ¡¬t , s¹ + couÁ - 1 ); 2235 couÁ = 0; 2236 } ià( couÁ > 0) { 2237 `´št_f›ld (" ChªÃÈ%u", ¡¬t ); 2238 couÁ = 0; 2242 } } 2244  $·ck‘_´št_chªÃl_m­_lmp (cÚ¡ ušt8_t * m­ ) 2246 `´št_chªÃl_m­ ( m­ ); 2247 } } 2249  $´št_æush_timeout ( ušt16_t timeout ) 2251 ià( timeout ) 2252 `´št_timeout ( timeout ); 2254 `´št_f›ld ("Timeout: No Automatic Flush"); 2255 } } 2257  $·ck‘_´št_v”siÚ (cÚ¡ * Ïb– , ušt8_t v”siÚ , 2258 cÚ¡ * subÏb– , ušt16_t subv”siÚ ) 2260 cÚ¡ * ¡r ; 2262  v”siÚ ) { 2264 ¡r = "Bluetooth 1.0b"; 2267 ¡r = "Bluetooth 1.1"; 2270 ¡r = "Bluetooth 1.2"; 2273 ¡r = "Bluetooth 2.0"; 2276 ¡r = "Bluetooth 2.1"; 2279 ¡r = "Bluetooth 3.0"; 2282 ¡r = "Bluetooth 4.0"; 2285 ¡r = "Bluetooth 4.1"; 2288 ¡r = "Bluetooth 4.2"; 2291 ¡r = "Reserved"; 2295 `´št_f›ld ("%s: % (0x%2.2xè- % %d (0x%4.4x)", Ïb– , ¡r , v”siÚ , 2296 subÏb– , subv”siÚ , subversion); 2297 } } 2299  $´št_hci_v”siÚ ( ušt8_t v”siÚ , ušt16_t »visiÚ ) 2301 `·ck‘_´št_v”siÚ ("HCI v”siÚ", v”siÚ , 2302 "RevisiÚ", `Ë16_to_ýu ( »visiÚ )); 2303 } } 2305  $´št_lmp_v”siÚ ( ušt8_t v”siÚ , ušt16_t subv”siÚ ) 2307 `·ck‘_´št_v”siÚ ("LMP v”siÚ", v”siÚ , 2308 "Subv”siÚ", `Ë16_to_ýu ( subv”siÚ )); 2309 } } 2311  $´št_·l_v”siÚ ( ušt8_t v”siÚ , ušt16_t subv”siÚ ) 2313 cÚ¡ * ¡r ; 2315  v”siÚ ) { 2317 ¡r = "Bluetooth 3.0"; 2320 ¡r = "Reserved"; 2324 `´št_f›ld ("PAL version: %s (0x%2.2x) - Subversion %d (0x%4.4x)", 2325 ¡r , v”siÚ , 2326 `Ë16_to_ýu ( subv”siÚ ), 2327 `Ë16_to_ýu ( subv”siÚ )); 2328 } } 2330  $·ck‘_´št_com·ny (cÚ¡ * Ïb– , ušt16_t com·ny ) 2332 `´št_f›ld ("%s: % (%d)", Ïb– , `bt_compidto¡r ( com·ny ), company); 2333 } } 2335  $´št_mªuçùu»r ( ušt16_t mªuçùu»r ) 2337 `·ck‘_´št_com·ny ("Mªuçùu»r", `Ë16_to_ýu ( mªuçùu»r )); 2338 } } 2340 cÚ¡ * g‘_suµÜ‹d_commªd ( b™ ); 2342  $´št_commªds (cÚ¡ ušt8_t * commªds ) 2344  couÁ = 0; 2345  i , n ; 2347  i = 0; i < 64; i++) { 2348  n = 0;‚ < 8;‚++) { 2349 ià( commªds [ i ] & (1 << n )) 2350 couÁ ++; 2354 `´št_f›ld ("Commªds: %uƒÁr%s", couÁ , count == 1 ? "y" : "ies"); 2356  i = 0; i < 64; i++) { 2357  n = 0;‚ < 8;‚++) { 2358 cÚ¡ * cmd ; 2360 ià(!( commªds [ i ] & (1 << n ))) 2363 cmd = `g‘_suµÜ‹d_commªd (( i * 8è+ n ); 2364 ià( cmd ) 2365 `´št_f›ld (" %s (Octet %d - Bit %d)", 2366 cmd , i , n ); 2368 `´št_‹xt ( COLOR_UNKNOWN_COMMAND_BIT , 2369 " Où‘ %d - B™ %d ", i , n ); 2372 } } 2374  sã©u»s_d©a { 2375 ušt8_t mb™ ; 2376 cÚ¡ * m¡r ; 2379 cÚ¡  ã©u»s_d©a gã©u»s_·ge0 [] = { 2439 cÚ¡  ã©u»s_d©a gã©u»s_·ge1 [] = { 2447 cÚ¡  ã©u»s_d©a gã©u»s_·ge2 [] = { 2461 cÚ¡  ã©u»s_d©a gã©u»s_Ë [] = { 2473  $´št_ã©u»s ( ušt8_t ·ge , cÚ¡ ušt8_ˆ* ã©u»s_¬¿y , 2474 ušt8_t ty³ ) 2476 cÚ¡  ã©u»s_d©a * ã©u»s_bË = NULL ; 2477 ušt64_t mask , ã©u»s = 0; 2478  ¡r [41]; 2479  i ; 2481  i = 0; i < 8; i++) { 2482 `¥rštf ( ¡r + ( i * 5), " 0x%2.2x", ã©u»s_¬¿y [i]); 2483 ã©u»s |ð(( ušt64_t è ã©u»s_¬¿y [ i ]) << (i * 8); 2486 `´št_f›ld ("F—tu»s:%s", ¡r ); 2488  ty³ ) { 2490  ·ge ) { 2492 ã©u»s_bË = ã©u»s_·ge0 ; 2495 ã©u»s_bË = ã©u»s_·ge1 ; 2498 ã©u»s_bË = ã©u»s_·ge2 ; 2503  ·ge ) { 2505 ã©u»s_bË = ã©u»s_Ë ; 2511 ià(! ã©u»s_bË ) 2514 mask = ã©u»s ; 2516  i = 0; ã©u»s_bË [i]. ¡r ; i++) { 2517 ià( ã©u»s & ((( ušt64_t è1è<< ã©u»s_bË [ i ]. b™ )) { 2518 `´št_f›ld (" %s", ã©u»s_bË [ i ]. ¡r ); 2519 mask &ð~((( ušt64_t è1è<< ã©u»s_bË [ i ]. b™ ); 2523 ià( mask ) 2524 `´št_‹xt ( COLOR_UNKNOWN_FEATURE_BIT , " Unknown features " 2525 "(0x%16.16" PRIx64 ")", mask ); 2526 } } 2528  $·ck‘_´št_ã©u»s_lmp (cÚ¡ ušt8_t * ã©u»s , ušt8_ˆ ·ge ) 2530 `´št_ã©u»s ( ·ge , ã©u»s , 0x00); 2531 } } 2533  $·ck‘_´št_ã©u»s_Î (cÚ¡ ušt8_t * ã©u»s ) 2535 `´št_ã©u»s (0, ã©u»s , 0x01); 2536 } } 2538  #LE_STATE_SCAN_ADV 0x0001 ) 2539  #LE_STATE_CONN_ADV 0x0002 ) 2540  #LE_STATE_NONCONN_ADV 0x0004 ) 2541  #LE_STATE_HIGH_DIRECT_ADV 0x0008 ) 2542  #LE_STATE_LOW_DIRECT_ADV 0x0010 ) 2543  #LE_STATE_ACTIVE_SCAN 0x0020 ) 2544  #LE_STATE_PASSIVE_SCAN 0x0040 ) 2545  #LE_STATE_INITIATING 0x0080 ) 2546  #LE_STATE_CONN_MASTER 0x0100 ) 2547  #LE_STATE_CONN_SLAVE 0x0200 ) 2548  #LE_STATE_MASTER_MASTER 0x0400 ) 2549  #LE_STATE_SLAVE_SLAVE 0x0800 ) 2550  #LE_STATE_MASTER_SLAVE 0x1000 ) 2553 ušt8_t mb™ ; 2554 cÚ¡ * m¡r ; 2555 } gË_¡©es_desc_bË [] = { 2573 ušt8_t mb™ ; 2574 ušt16_t m¡©es ; 2575 } gË_¡©es_comb_bË [] = { 2576 { 0, LE_STATE_NONCONN_ADV }, 2577 { 1, LE_STATE_SCAN_ADV }, 2578 { 2, LE_STATE_CONN_ADV }, 2579 { 3, LE_STATE_HIGH_DIRECT_ADV }, 2580 { 4, LE_STATE_PASSIVE_SCAN }, 2581 { 5, LE_STATE_ACTIVE_SCAN }, 2582 { 6, LE_STATE_INITIATING | LE_STATE_CONN_MASTER }, 2583 { 7, LE_STATE_CONN_SLAVE }, 2584 { 8, LE_STATE_PASSIVE_SCAN | LE_STATE_NONCONN_ADV }, 2585 { 9, LE_STATE_PASSIVE_SCAN | LE_STATE_SCAN_ADV }, 2586 { 10, LE_STATE_PASSIVE_SCAN | LE_STATE_CONN_ADV }, 2587 { 11, LE_STATE_PASSIVE_SCAN | LE_STATE_HIGH_DIRECT_ADV }, 2588 { 12, LE_STATE_ACTIVE_SCAN | LE_STATE_NONCONN_ADV }, 2589 { 13, LE_STATE_ACTIVE_SCAN | LE_STATE_SCAN_ADV }, 2590 { 14, LE_STATE_ACTIVE_SCAN | LE_STATE_CONN_ADV }, 2591 { 15, LE_STATE_ACTIVE_SCAN | LE_STATE_HIGH_DIRECT_ADV }, 2592 { 16, LE_STATE_INITIATING | LE_STATE_NONCONN_ADV }, 2593 { 17, LE_STATE_INITIATING | LE_STATE_SCAN_ADV }, 2594 { 18, LE_STATE_CONN_MASTER | LE_STATE_NONCONN_ADV }, 2595 { 19, LE_STATE_CONN_MASTER | LE_STATE_SCAN_ADV }, 2596 { 20, LE_STATE_CONN_SLAVE | LE_STATE_NONCONN_ADV }, 2597 { 21, LE_STATE_CONN_SLAVE | LE_STATE_SCAN_ADV }, 2598 { 22, LE_STATE_INITIATING | LE_STATE_PASSIVE_SCAN }, 2599 { 23, LE_STATE_INITIATING | LE_STATE_ACTIVE_SCAN }, 2600 { 24, LE_STATE_CONN_MASTER | LE_STATE_PASSIVE_SCAN }, 2601 { 25, LE_STATE_CONN_MASTER | LE_STATE_ACTIVE_SCAN }, 2602 { 26, LE_STATE_CONN_SLAVE | LE_STATE_PASSIVE_SCAN }, 2603 { 27, LE_STATE_CONN_SLAVE | LE_STATE_ACTIVE_SCAN }, 2604 { 28, LE_STATE_INITIATING | LE_STATE_CONN_MASTER | 2605 LE_STATE_MASTER_MASTER }, 2606 { 29, LE_STATE_LOW_DIRECT_ADV }, 2607 { 30, LE_STATE_LOW_DIRECT_ADV | LE_STATE_PASSIVE_SCAN }, 2608 { 31, LE_STATE_LOW_DIRECT_ADV | LE_STATE_ACTIVE_SCAN }, 2609 { 32, LE_STATE_INITIATING | LE_STATE_CONN_ADV | 2610 LE_STATE_MASTER_SLAVE }, 2611 { 33, LE_STATE_INITIATING | LE_STATE_HIGH_DIRECT_ADV | 2612 LE_STATE_MASTER_SLAVE }, 2613 { 34, LE_STATE_INITIATING | LE_STATE_LOW_DIRECT_ADV | 2614 LE_STATE_MASTER_SLAVE }, 2615 { 35, LE_STATE_CONN_MASTER | LE_STATE_CONN_ADV | 2616 LE_STATE_MASTER_SLAVE }, 2617 { 36, LE_STATE_CONN_MASTER | LE_STATE_HIGH_DIRECT_ADV | 2618 LE_STATE_MASTER_SLAVE }, 2619 { 37, LE_STATE_CONN_MASTER | LE_STATE_LOW_DIRECT_ADV | 2620 LE_STATE_MASTER_SLAVE }, 2621 { 38, LE_STATE_CONN_SLAVE | LE_STATE_CONN_ADV | 2622 LE_STATE_MASTER_SLAVE }, 2623 { 39, LE_STATE_CONN_SLAVE | LE_STATE_HIGH_DIRECT_ADV | 2624 LE_STATE_SLAVE_SLAVE }, 2625 { 40, LE_STATE_CONN_SLAVE | LE_STATE_LOW_DIRECT_ADV | 2626 LE_STATE_SLAVE_SLAVE }, 2627 { 41, LE_STATE_INITIATING | LE_STATE_CONN_SLAVE | 2628 LE_STATE_MASTER_SLAVE }, 2632  $´št_Ë_¡©es (cÚ¡ ušt8_t * ¡©es_¬¿y ) 2634 ušt64_t mask , ¡©es = 0; 2635  i , n ; 2637  i = 0; i < 8; i++) 2638 ¡©es |ð(( ušt64_t è ¡©es_¬¿y [ i ]) << (i * 8); 2640 `´št_f›ld ("S‹s: 0x%16.16" PRIx64 , ¡©es ); 2642 mask = ¡©es ; 2644  i = 0; Ë_¡©es_comb_bË [i]. ¡©es ; i++) { 2645 ušt64_t v® = (((ušt64_tè1è<< Ë_¡©es_comb_bË [ i ]. b™ ); 2646 cÚ¡ * ¡r [3] = { NULL , }; 2647  num = 0; 2649 ià(!( ¡©es & v® )) 2652  n = 0;‚ < 16;‚++) { 2653 ià( Ë_¡©es_comb_bË [ i ]. ¡©es & (1 << n )) 2654 ¡r [ num ++] = Ë_¡©es_desc_bË [ n ].str; 2657 ià( num > 0) { 2658 `´št_f›ld (" %s", ¡r [0]); 2659  n = 1;‚ < num ;‚++) 2660 `´št_f›ld ("‡nd %s", ¡r [ n ]); 2663 mask &ð~ v® ; 2666 ià( mask ) 2667 `´št_‹xt ( COLOR_UNKNOWN_LE_STATES , " Unknown states " 2668 "(0x%16.16" PRIx64 ")", mask ); 2669 } } 2671  $´št_Ë_chªÃl_m­ (cÚ¡ ušt8_t * m­ ) 2673  couÁ = 0, ¡¬t = 0; 2674  ¡r [11]; 2675  i , n ; 2677  i = 0; i < 5; i++) 2678 `¥rštf ( ¡r + ( i * 2), "%2.2x", m­ [i]); 2680 `´št_f›ld ("ChªÃÈm­: 0x%s", ¡r ); 2682  i = 0; i < 5; i++) { 2683  n = 0;‚ < 8;‚++) { 2684 ià( m­ [ i ] & (1 << n )) { 2685 ià( couÁ == 0) 2686 ¡¬t = ( i * 8è+ n ; 2687 couÁ ++; 2691 ià( couÁ > 1) { 2692 `´št_f›ld (" Channel %u-%u", 2693 ¡¬t , s¹ + couÁ - 1 ); 2694 couÁ = 0; 2695 } ià( couÁ > 0) { 2696 `´št_f›ld (" ChªÃÈ%u", ¡¬t ); 2697 couÁ = 0; 2701 } } 2703  $·ck‘_´št_chªÃl_m­_Î (cÚ¡ ušt8_t * m­ ) 2705 `´št_Ë_chªÃl_m­ ( m­ ); 2706 } } 2708  $´št_¿ndom_numb” ( ušt64_t ¿nd ) 2710 `´št_f›ld ("Rªdom‚umb”: 0x%16.16" PRIx64 , `Ë64_to_ýu ( ¿nd )); 2711 } } 2713  $´št_’üy±ed_div”sif›r ( ušt16_t ediv ) 2715 `´št_f›ld ("Enüy±ed div”sif›r: 0x%4.4x", `Ë16_to_ýu ( ediv )); 2716 } } 2719 ušt8_t mb™ ; 2720 cÚ¡ * m¡r ; 2721 } gev’ts_bË [] = { 2777  $´št_ev’t_mask (cÚ¡ ušt8_t * ev’ts_¬¿y ) 2779 ušt64_t mask , ev’ts = 0; 2780  i ; 2782  i = 0; i < 8; i++) 2783 ev’ts |ð(( ušt64_t è ev’ts_¬¿y [ i ]) << (i * 8); 2785 `´št_f›ld ("Mask: 0x%16.16" PRIx64 , ev’ts ); 2787 mask = ev’ts ; 2789  i = 0; ev’ts_bË [i]. ¡r ; i++) { 2790 ià( ev’ts & ((( ušt64_t è1è<< ev’ts_bË [ i ]. b™ )) { 2791 `´št_f›ld (" %s", ev’ts_bË [ i ]. ¡r ); 2792 mask &ð~((( ušt64_t è1è<< ev’ts_bË [ i ]. b™ ); 2796 ià( mask ) 2797 `´št_‹xt ( COLOR_UNKNOWN_EVENT_MASK , " Unknown mask " 2798 "(0x%16.16" PRIx64 ")", mask ); 2799 } } 2802 ušt8_t mb™ ; 2803 cÚ¡ * m¡r ; 2804 } gev’ts_·ge2_bË [] = { 2832  $´št_ev’t_mask_·ge2 (cÚ¡ ušt8_t * ev’ts_¬¿y ) 2834 ušt64_t mask , ev’ts = 0; 2835  i ; 2837  i = 0; i < 8; i++) 2838 ev’ts |ð(( ušt64_t è ev’ts_¬¿y [ i ]) << (i * 8); 2840 `´št_f›ld ("Mask: 0x%16.16" PRIx64 , ev’ts ); 2842 mask = ev’ts ; 2844  i = 0; ev’ts_·ge2_bË [i]. ¡r ; i++) { 2845 ià( ev’ts & ((( ušt64_t è1è<< ev’ts_·ge2_bË [ i ]. b™ )) { 2846 `´št_f›ld (" %s", ev’ts_·ge2_bË [ i ]. ¡r ); 2847 mask &ð~((( ušt64_t è1è<< ev’ts_·ge2_bË [ i ]. b™ ); 2851 ià( mask ) 2852 `´št_‹xt ( COLOR_UNKNOWN_EVENT_MASK , " Unknown mask " 2853 "(0x%16.16" PRIx64 ")", mask ); 2854 } } 2857 ušt8_t mb™ ; 2858 cÚ¡ * m¡r ; 2859 } gev’ts_Ë_bË [] = { 2874  $´št_ev’t_mask_Ë (cÚ¡ ušt8_t * ev’ts_¬¿y ) 2876 ušt64_t mask , ev’ts = 0; 2877  i ; 2879  i = 0; i < 8; i++) 2880 ev’ts |ð(( ušt64_t è ev’ts_¬¿y [ i ]) << (i * 8); 2882 `´št_f›ld ("Mask: 0x%16.16" PRIx64 , ev’ts ); 2884 mask = ev’ts ; 2886  i = 0; ev’ts_Ë_bË [i]. ¡r ; i++) { 2887 ià( ev’ts & ((( ušt64_t è1è<< ev’ts_Ë_bË [ i ]. b™ )) { 2888 `´št_f›ld (" %s", ev’ts_Ë_bË [ i ]. ¡r ); 2889 mask &ð~((( ušt64_t è1è<< ev’ts_Ë_bË [ i ]. b™ ); 2893 ià( mask ) 2894 `´št_‹xt ( COLOR_UNKNOWN_EVENT_MASK , " Unknown mask " 2895 "(0x%16.16" PRIx64 ")", mask ); 2896 } } 2898  $´št_ãc ( ušt8_t ãc ) 2900 cÚ¡ * ¡r ; 2902  ãc ) { 2904 ¡r = "Not„equired"; 2907 ¡r = "Required"; 2910 ¡r = "Reserved"; 2914 `´št_f›ld ("FEC: % (0x%02x)", ¡r , ãc ); 2915 } } 2917  #BT_EIR_FLAGS 0x01 ) 2918  #BT_EIR_UUID16_SOME 0x02 ) 2919  #BT_EIR_UUID16_ALL 0x03 ) 2920  #BT_EIR_UUID32_SOME 0x04 ) 2921  #BT_EIR_UUID32_ALL 0x05 ) 2922  #BT_EIR_UUID128_SOME 0x06 ) 2923  #BT_EIR_UUID128_ALL 0x07 ) 2924  #BT_EIR_NAME_SHORT 0x08 ) 2925  #BT_EIR_NAME_COMPLETE 0x09 ) 2926  #BT_EIR_TX_POWER 0x0a ) 2927  #BT_EIR_CLASS_OF_DEV 0x0d ) 2928  #BT_EIR_SSP_HASH_P192 0x0e ) 2929  #BT_EIR_SSP_RANDOMIZER_P192 0x0f ) 2930  #BT_EIR_DEVICE_ID 0x10 ) 2931  #BT_EIR_SMP_TK 0x10 ) 2932  #BT_EIR_SMP_OOB_FLAGS 0x11 ) 2933  #BT_EIR_SLAVE_CONN_INTERVAL 0x12 ) 2934  #BT_EIR_SERVICE_UUID16 0x14 ) 2935  #BT_EIR_SERVICE_UUID128 0x15 ) 2936  #BT_EIR_SERVICE_DATA 0x16 ) 2937  #BT_EIR_PUBLIC_ADDRESS 0x17 ) 2938  #BT_EIR_RANDOM_ADDRESS 0x18 ) 2939  #BT_EIR_GAP_APPEARANCE 0x19 ) 2940  #BT_EIR_ADVERTISING_INTERVAL 0x1a ) 2941  #BT_EIR_LE_DEVICE_ADDRESS 0x1b ) 2942  #BT_EIR_LE_ROLE 0x1c ) 2943  #BT_EIR_SSP_HASH_P256 0x1d ) 2944  #BT_EIR_SSP_RANDOMIZER_P256 0x1e ) 2945  #BT_EIR_3D_INFO_DATA 0x3d ) 2946  #BT_EIR_MANUFACTURER_DATA 0xff ) 2948  $´št_mªuçùu»r_­¶e (cÚ¡ * d©a , ušt8_t d©a_Ën ) 2950 ušt8_t ty³ = *((ušt8_ˆ*è d©a ); 2952 ià( d©a_Ën < 1) 2955 ià( ty³ == 0x01) { 2956  id’tif›r [100]; 2958 `¢´štf ( id’tif›r , (identifier) - 1, "%s", 2959 (cÚ¡ *è( d©a + 1)); 2961 `´št_f›ld (" Id’tif›r: %s", id’tif›r ); 2965  d©a_Ën > 0) { 2966 ušt8_t Ën ; 2967 cÚ¡ * ¡r ; 2969 ty³ = *(( ušt8_t *è d©a ); 2970 d©a ++; 2971 d©a_Ën --; 2973 ià( ty³ == 0x00) 2976 ià( d©a_Ën < 1) 2979  ty³ ) { 2981 ¡r = "iBeacon"; 2984 ¡r = "AirDrop"; 2987 ¡r = "Apple TV"; 2990 ¡r = "Unknown"; 2994 `´št_f›ld (" Ty³: % (%u)", ¡r , ty³ ); 2996 Ën = *(( ušt8_t *è d©a ); 2997 d©a ++; 2998 d©a_Ën --; 3000 ià( Ën < 1) 3003 ià( Ën > d©a_Ën ) 3006 ià( ty³ =ð0x02 && Ën == 0x15) { 3007 cÚ¡ ušt8_t * uuid ; 3008 ušt16_t mšÜ , majÜ ; 3009 št8_t tx_pow” ; 3011 uuid = d©a ; 3012 `´št_f›ld (" UUID: %8.8x-%4.4x-%4.4x-%4.4x-%8.8x%4.4x", 3013 `g‘_Ë32 (& uuid [12]), `g‘_Ë16 (&uuid[10]), 3014 `g‘_Ë16 (& uuid [8]), get_le16(&uuid[6]), 3015 `g‘_Ë32 (& uuid [2]), `g‘_Ë16 (&uuid[0])); 3017 majÜ = `g‘_Ë16 ( d©a + 16); 3018 mšÜ = `g‘_Ë16 ( d©a + 18); 3019 `´št_f›ld (" V”siÚ: %u.%u", majÜ , mšÜ ); 3021 tx_pow” = *( št8_t *è( d©a + 20); 3022 `´št_f›ld (" TX…ow”: %d dB", tx_pow” ); 3024 `´št_hex_f›ld (" D©a", d©a , Ën ); 3026 d©a +ð Ën ; 3027 d©a_Ën -ð Ën ; 3030 `·ck‘_hexdump ( d©a , d©a_Ën ); 3031 } } 3033  $´št_mªuçùu»r_d©a (cÚ¡ * d©a , ušt8_t d©a_Ën ) 3035 ušt16_t com·ny = `g‘_Ë16 ( d©a ); 3037 `·ck‘_´št_com·ny ("Com·ny", com·ny ); 3039  com·ny ) { 3042 `´št_mªuçùu»r_­¶e ( d©a + 2, d©a_Ën - 2); 3045 `´št_hex_f›ld (" D©a", d©a + 2, d©a_Ën - 2); 3048 } } 3050  $´št_deviû_id (cÚ¡ * d©a , ušt8_t d©a_Ën ) 3052 ušt16_t sourû , v’dÜ , ´oduù , v”siÚ ; 3053  mod®Ÿs [26], * v’dÜ_¡r , * ´oduù_¡r ; 3054 cÚ¡ * ¡r ; 3056 ià( d©a_Ën < 8) 3059 sourû = `g‘_Ë16 ( d©a ); 3060 v’dÜ = `g‘_Ë16 ( d©a + 2); 3061 ´oduù = `g‘_Ë16 ( d©a + 4); 3062 v”siÚ = `g‘_Ë16 ( d©a + 6); 3064  sourû ) { 3066 ¡r = "Bluetooth SIG‡ssigned"; 3067 `¥rštf ( mod®Ÿs , "bluetooth:v%04Xp%04Xd%04X", 3068 v’dÜ , ´oduù , v”siÚ ); 3071 ¡r = "USB Implementer's Forum‡ssigned"; 3072 `¥rštf ( mod®Ÿs , "usb:v%04Xp%04Xd%04X", 3073 v’dÜ , ´oduù , v”siÚ ); 3076 ¡r = "Reserved"; 3077 mod®Ÿs [0] = '\0'; 3081 `´št_f›ld ("Deviû ID: % (0x%4.4x)", ¡r , sourû ); 3083 ià(! `hwdb_g‘_v’dÜ_mod– ( mod®Ÿs , & v’dÜ_¡r , & ´oduù_¡r )) { 3084 v’dÜ_¡r = NULL ; 3085 ´oduù_¡r = NULL ; 3088 ià( sourû != 0x0001) { 3089 ià( v’dÜ_¡r ) 3090 `´št_f›ld (" Vendor: %s (0x%4.4x)", 3091 v’dÜ_¡r , v’dÜ ); 3093 `´št_f›ld (" V’dÜ: 0x%4.4x", v’dÜ ); 3095 `·ck‘_´št_com·ny (" V’dÜ", v’dÜ ); 3097 ià( ´oduù_¡r ) 3098 `´št_f›ld (" Produù: % (0x%4.4x)", ´oduù_¡r , ´oduù ); 3100 `´št_f›ld (" Produù: 0x%4.4x", ´oduù ); 3102 `´št_f›ld (" Version: %u.%u.%u (0x%4.4x)", 3103 ( v”siÚ & 0xff00) >> 8, 3104 ( v”siÚ & 0x00f0) >> 4, 3105 ( v”siÚ & 0x000f), version); 3107 `ä“ ( v’dÜ_¡r ); 3108 `ä“ ( ´oduù_¡r ); 3109 } } 3111  $´št_uuid16_li¡ (cÚ¡ * Ïb– , cÚ¡ * d©a , 3112 ušt8_t d©a_Ën ) 3114 ušt8_t couÁ = d©a_Ën / ( ušt16_t ); 3115  i ; 3117 `´št_f›ld ("%s: %uƒÁr%s", Ïb– , couÁ , count == 1 ? "y" : "ies"); 3119  i = 0; i < couÁ ; i++) { 3120 ušt16_t uuid = `g‘_Ë16 ( d©a + ( i * 2)); 3121 `´št_f›ld (" % (0x%4.4x)", `uuid16_to_¡r ( uuid ), uuid); 3123 } } 3125  $´št_uuid32_li¡ (cÚ¡ * Ïb– , cÚ¡ * d©a , 3126 ušt8_t d©a_Ën ) 3128 ušt8_t couÁ = d©a_Ën / ( ušt32_t ); 3129  i ; 3131 `´št_f›ld ("%s: %uƒÁr%s", Ïb– , couÁ , count == 1 ? "y" : "ies"); 3133  i = 0; i < couÁ ; i++) { 3134 ušt32_t uuid = `g‘_Ë32 ( d©a + ( i * 4)); 3135 `´št_f›ld (" % (0x%8.8x)", `uuid32_to_¡r ( uuid ), uuid); 3137 } } 3139  $´št_uuid128_li¡ (cÚ¡ * Ïb– , cÚ¡ * d©a , 3140 ušt8_t d©a_Ën ) 3142 ušt8_t couÁ = d©a_Ën / 16; 3143  i ; 3145 `´št_f›ld ("%s: %uƒÁr%s", Ïb– , couÁ , count == 1 ? "y" : "ies"); 3147  i = 0; i < couÁ ; i++) { 3148 cÚ¡ ušt8_t * uuid = d©a + ( i * 16); 3150 `´št_f›ld (" %8.8x-%4.4x-%4.4x-%4.4x-%8.8x%4.4x", 3151 `g‘_Ë32 (& uuid [12]), `g‘_Ë16 (&uuid[10]), 3152 `g‘_Ë16 (& uuid [8]), get_le16(&uuid[6]), 3153 `g‘_Ë32 (& uuid [2]), `g‘_Ë16 (&uuid[0])); 3155 } } 3158 ušt8_t mb™ ; 3159 cÚ¡ * m¡r ; 3160 } geœ_æags_bË [] = { 3170 ušt8_t mb™ ; 3171 cÚ¡ * m¡r ; 3172 } geœ_3d_bË [] = { 3180  $´št_eœ (cÚ¡ ušt8_t * eœ , ušt8_ˆ eœ_Ën , boÞ Ë ) 3182 ušt16_t Ën = 0; 3184 ià( eœ_Ën == 0) 3187  Ën < eœ_Ën - 1) { 3188 ušt8_t f›ld_Ën = eœ [0]; 3189 cÚ¡ ušt8_t * d©a = & eœ [2]; 3190 ušt8_t d©a_Ën ; 3191  Çme [239], Ïb– [100]; 3192 ušt8_t æags , mask ; 3193  i ; 3196 ià( f›ld_Ën == 0) 3199 Ën +ð f›ld_Ën + 1; 3202 ià( Ën > eœ_Ën ) { 3203 Ën -ð f›ld_Ën + 1; 3207 d©a_Ën = f›ld_Ën - 1; 3209  eœ [1]) { 3210  BT_EIR_FLAGS : 3211 æags = * d©a ; 3212 mask = æags ; 3214 `´št_f›ld ("FÏgs: 0x%2.2x", æags ); 3216  i = 0; eœ_æags_bË [i]. ¡r ; i++) { 3217 ià( æags & (1 << eœ_æags_bË [ i ]. b™ )) { 3218 `´št_f›ld (" %s", 3219 eœ_æags_bË [ i ]. ¡r ); 3220 mask &ð~(1 << eœ_æags_bË [ i ]. b™ ); 3224 ià( mask ) 3225 `´št_‹xt ( COLOR_UNKNOWN_SERVICE_CLASS , 3226 " UnknowÀæag (0x%2.2x)", mask ); 3229  BT_EIR_UUID16_SOME : 3230 ià( d©a_Ën < ( ušt16_t )) 3232 `´št_uuid16_li¡ ("16-bit Service UUIDs (partial)", 3233 d©a , d©a_Ën ); 3236  BT_EIR_UUID16_ALL : 3237 ià( d©a_Ën < ( ušt16_t )) 3239 `´št_uuid16_li¡ ("16-bit Service UUIDs (complete)", 3240 d©a , d©a_Ën ); 3243  BT_EIR_UUID32_SOME : 3244 ià( d©a_Ën < ( ušt32_t )) 3246 `´št_uuid32_li¡ ("32-bit Service UUIDs (partial)", 3247 d©a , d©a_Ën ); 3250  BT_EIR_UUID32_ALL : 3251 ià( d©a_Ën < ( ušt32_t )) 3253 `´št_uuid32_li¡ ("32-bit Service UUIDs (complete)", 3254 d©a , d©a_Ën ); 3257  BT_EIR_UUID128_SOME : 3258 ià( d©a_Ën < 16) 3260 `´št_uuid128_li¡ ("128-bit Service UUIDs (partial)", 3261 d©a , d©a_Ën ); 3264  BT_EIR_UUID128_ALL : 3265 ià( d©a_Ën < 16) 3267 `´št_uuid128_li¡ ("128-bit Service UUIDs (complete)", 3268 d©a , d©a_Ën ); 3271  BT_EIR_NAME_SHORT : 3272 `mem£t ( Çme , 0, (name)); 3273 `memýy ( Çme , d©a , d©a_Ën ); 3274 `´št_f›ld ("Nam(shÜt): %s", Çme ); 3277  BT_EIR_NAME_COMPLETE : 3278 `mem£t ( Çme , 0, (name)); 3279 `memýy ( Çme , d©a , d©a_Ën ); 3280 `´št_f›ld ("Nam(com¶‘e): %s", Çme ); 3283  BT_EIR_TX_POWER : 3284 ià( d©a_Ën < 1) 3286 `´št_f›ld ("TX…ow”: %d dBm", ( št8_t è* d©a ); 3289  BT_EIR_CLASS_OF_DEV : 3290 ià( d©a_Ën < 3) 3292 `´št_dev_þass ( d©a ); 3295  BT_EIR_SSP_HASH_P192 : 3296 ià( d©a_Ën < 16) 3298 `´št_hash_p192 ( d©a ); 3301  BT_EIR_SSP_RANDOMIZER_P192 : 3302 ià( d©a_Ën < 16) 3304 `´št_¿ndomiz”_p192 ( d©a ); 3307  BT_EIR_DEVICE_ID : 3309 ià( Ë ) 3310 `´št_hex_f›ld ("SMP TK", d©a , d©a_Ën ); 3311 ià( d©a_Ën >= 8) 3312 `´št_deviû_id ( d©a , d©a_Ën ); 3315  BT_EIR_SMP_OOB_FLAGS : 3316 `´št_f›ld ("SMP OOB FÏgs: 0x%2.2x", * d©a ); 3319  BT_EIR_SLAVE_CONN_INTERVAL : 3320 ià( d©a_Ën < 4) 3322 `´št_f›ld ("Slave Conn. Interval: 0x%4.4x - 0x%4.4x", 3323 `g‘_Ë16 (& d©a [0]), 3324 `g‘_Ë16 (& d©a [2])); 3327  BT_EIR_SERVICE_UUID16 : 3328 ià( d©a_Ën < ( ušt16_t )) 3330 `´št_uuid16_li¡ ("16-bit Service UUIDs", 3331 d©a , d©a_Ën ); 3334  BT_EIR_SERVICE_UUID128 : 3335 ià( d©a_Ën < 16) 3337 `´št_uuid128_li¡ ("128-bit Service UUIDs", 3338 d©a , d©a_Ën ); 3341  BT_EIR_SERVICE_DATA : 3342 ià( d©a_Ën < 2) 3344 `¥rštf ( Ïb– , "Service Data (UUID 0x%4.4x)", 3345 `g‘_Ë16 (& d©a [0])); 3346 `´št_hex_f›ld ( Ïb– , & d©a [2], d©a_Ën - 2); 3349  BT_EIR_RANDOM_ADDRESS : 3350 ià( d©a_Ën < 6) 3352 `´št_addr ("Rªdom Add»ss", d©a , 0x01); 3355  BT_EIR_PUBLIC_ADDRESS : 3356 ià( d©a_Ën < 6) 3358 `´št_addr ("PubliøAdd»ss", d©a , 0x00); 3361  BT_EIR_GAP_APPEARANCE : 3362 ià( d©a_Ën < 2) 3364 `´št_­³¬ªû ( `g‘_Ë16 ( d©a )); 3367  BT_EIR_SSP_HASH_P256 : 3368 ià( d©a_Ën < 16) 3370 `´št_hash_p256 ( d©a ); 3373  BT_EIR_SSP_RANDOMIZER_P256 : 3374 ià( d©a_Ën < 16) 3376 `´št_¿ndomiz”_p256 ( d©a ); 3379  BT_EIR_3D_INFO_DATA : 3380 `´št_hex_f›ld ("3D InfÜm©iÚ D©a", d©a , d©a_Ën ); 3381 ià( d©a_Ën < 2) 3384 æags = * d©a ; 3385 mask = æags ; 3387 `´št_f›ld (" F—tu»s: 0x%2.2x", æags ); 3389  i = 0; eœ_3d_bË [i]. ¡r ; i++) { 3390 ià( æags & (1 << eœ_3d_bË [ i ]. b™ )) { 3391 `´št_f›ld (" %s", 3392 eœ_3d_bË [ i ]. ¡r ); 3393 mask &ð~(1 << eœ_3d_bË [ i ]. b™ ); 3397 ià( mask ) 3398 `´št_‹xt ( COLOR_UNKNOWN_FEATURE_BIT , 3399 " UnknowÀã©u» (0x%2.2x)", mask ); 3401 `´št_f›ld (" P©h Los Th»shÞd: %d", d©a [1]); 3404  BT_EIR_MANUFACTURER_DATA : 3405 ià( d©a_Ën < 2) 3407 `´št_mªuçùu»r_d©a ( d©a , d©a_Ën ); 3411 `¥rštf ( Ïb– , "UnknowÀEIR f›ld 0x%2.2x", eœ [1]); 3412 `´št_hex_f›ld ( Ïb– , d©a , d©a_Ën ); 3416 eœ +ð f›ld_Ën + 1; 3419 ià( Ën < eœ_Ën && eœ [0] != 0) 3420 `·ck‘_hexdump ( eœ , eœ_Ën - Ën ); 3421 } } 3423  $·ck‘_´št_addr (cÚ¡ * Ïb– , cÚ¡ * d©a , boÞ ¿ndom ) 3425 `´št_addr ( Ïb– ? : "Add»ss", d©a , ¿ndom ? 0x01 : 0x00); 3426 } } 3428  $·ck‘_´št_ad (cÚ¡ * d©a , ušt8_t size ) 3430 `´št_eœ ( d©a , size , Œue ); 3431 } } 3433  $·ck‘_hexdump (cÚ¡ * buf , ušt16_t Ën ) 3435 cÚ¡  hexdig™s [] = "0123456789abcdef"; 3436  ¡r [68]; 3437 ušt16_t i ; 3439 ià(! Ën ) 3442  i = 0; i < Ën ; i++) { 3443 ¡r [(( i % 16è* 3è+ 0] = hexdig™s [ buf [i] >> 4]; 3444 ¡r [(( i % 16è* 3è+ 1] = hexdig™s [ buf [i] & 0xf]; 3445 ¡r [(( i % 16) * 3) + 2] = ' '; 3446 ¡r [( i % 16è+ 49] = `i¥ršt ( buf [i]) ? buf[i] : '.'; 3448 ià(( i + 1) % 16 == 0) { 3449 ¡r [47] = ' '; 3450 ¡r [48] = ' '; 3451 ¡r [65] = '\0'; 3452 `´št_‹xt ( COLOR_WHITE , "%s", ¡r ); 3453 ¡r [0] = ' '; 3457 ià( i % 16 > 0) { 3458 ušt16_t j ; 3459  j = ( i % 16); j < 16; j++) { 3460 ¡r [( j * 3) + 0] = ' '; 3461 ¡r [( j * 3) + 1] = ' '; 3462 ¡r [( j * 3) + 2] = ' '; 3463 ¡r [ j + 49] = ' '; 3465 ¡r [47] = ' '; 3466 ¡r [48] = ' '; 3467 ¡r [65] = '\0'; 3468 `´št_‹xt ( COLOR_WHITE , "%s", ¡r ); 3470 } } 3472  $·ck‘_cÚŒÞ ( timev® * tv , ušt16_t šdex , ušt16_ˆ Ýcode , 3473 cÚ¡ * d©a , ušt16_t size ) 3475 ià( šdex_fž‹r && šdex_numb” !ð šdex ) 3478 `cÚŒÞ_mes§ge ( Ýcode , d©a , size ); 3479 } } 3481  $addr2¡r (cÚ¡ ušt8_t * addr , * ¡r ) 3483  `¥rštf ( ¡r , "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", 3484 addr [5],‡ddr[4],‡ddr[3],‡ddr[2],‡ddr[1],‡ddr[0]); 3485 } } 3487  #MAX_INDEX 16 ) 3489  sšdex_d©a { 3490 ušt8_t mty³ ; 3491 ušt8_t mbdaddr [6]; 3494  šdex_d©a gšdex_li¡ [ MAX_INDEX ]; 3496  $·ck‘_mÚ™Ü ( timev® * tv , ušt16_t šdex , ušt16_ˆ Ýcode , 3497 cÚ¡ * d©a , ušt16_t size ) 3499 cÚ¡  bt¢oÝ_Ýcode_Ãw_šdex * ni ; 3500  ¡r [18], exŒa_¡r [24]; 3502 ià( šdex_fž‹r && šdex_numb” !ð šdex ) 3505 šdex_cu¼’t = šdex ; 3507 ià( tv && time_off£t =ð(( time_t ) -1)) 3508 time_off£t = tv -> tv_£c ; 3510  Ýcode ) { 3511  BTSNOOP_OPCODE_NEW_INDEX : 3512 ni = d©a ; 3514 ià( šdex < MAX_INDEX ) { 3515 šdex_li¡ [ šdex ]. ty³ = ni ->type; 3516 `memýy ( šdex_li¡ [ šdex ]. bdaddr , ni ->bdaddr, 6); 3519 `addr2¡r ( ni -> bdaddr , ¡r ); 3520 `·ck‘_Ãw_šdex ( tv , šdex , ¡r , ni -> ty³ ,‚i-> bus ,‚i-> Çme ); 3522  BTSNOOP_OPCODE_DEL_INDEX : 3523 ià( šdex < MAX_INDEX ) 3524 `addr2¡r ( šdex_li¡ [ šdex ]. bdaddr , ¡r ); 3526 `¥rštf ( ¡r , "00:00:00:00:00:00"); 3528 `·ck‘_d–_šdex ( tv , šdex , ¡r ); 3530  BTSNOOP_OPCODE_COMMAND_PKT : 3531 `·ck‘_hci_commªd ( tv , šdex , d©a , size ); 3533  BTSNOOP_OPCODE_EVENT_PKT : 3534 `·ck‘_hci_ev’t ( tv , šdex , d©a , size ); 3536  BTSNOOP_OPCODE_ACL_TX_PKT : 3537 `·ck‘_hci_aþd©a ( tv , šdex , çl£ , d©a , size ); 3539  BTSNOOP_OPCODE_ACL_RX_PKT : 3540 `·ck‘_hci_aþd©a ( tv , šdex , Œue , d©a , size ); 3542  BTSNOOP_OPCODE_SCO_TX_PKT : 3543 `·ck‘_hci_scod©a ( tv , šdex , çl£ , d©a , size ); 3545  BTSNOOP_OPCODE_SCO_RX_PKT : 3546 `·ck‘_hci_scod©a ( tv , šdex , Œue , d©a , size ); 3549 `¥rštf ( exŒa_¡r , "(cod%d†’ %d)", Ýcode , size ); 3550 `´št_·ck‘ ( tv , šdex , '*', COLOR_ERROR , 3551 "UnknowÀ·ck‘", NULL , exŒa_¡r ); 3552 `·ck‘_hexdump ( d©a , size ); 3555 } } 3557  $·ck‘_simuÏtÜ ( timev® * tv , ušt16_t äequ’cy , 3558 cÚ¡ * d©a , ušt16_t size ) 3560  ¡r [10]; 3562 ià( tv && time_off£t =ð(( time_t ) -1)) 3563 time_off£t = tv -> tv_£c ; 3565 `¥rštf ( ¡r , "%u MHz", äequ’cy ); 3567 `´št_·ck‘ ( tv , 0, '*', COLOR_PHY_PACKET , 3568 "PhysiÿÈ·ck‘:", NULL , ¡r ); 3570 `Î_·ck‘ ( äequ’cy , d©a , size ); 3571 } } 3573  $nuÎ_cmd (cÚ¡ * d©a , ušt8_t size ) 3575 } } 3577  $¡©us_r¥ (cÚ¡ * d©a , ušt8_t size ) 3579 ušt8_t ¡©us = *((cÚ¡ ušt8_ˆ*è d©a ); 3581 `´št_¡©us ( ¡©us ); 3582 } } 3584  $¡©us_bdaddr_r¥ (cÚ¡ * d©a , ušt8_t size ) 3586 ušt8_t ¡©us = *((cÚ¡ ušt8_ˆ*è d©a ); 3588 `´št_¡©us ( ¡©us ); 3589 `´št_bdaddr ( d©a + 1); 3590 } } 3592  $šquœy_cmd (cÚ¡ * d©a , ušt8_t size ) 3594 cÚ¡  bt_hci_cmd_šquœy * cmd = d©a ; 3596 `´št_Ÿc ( cmd -> Ïp ); 3597 `´št_f›ld ("Length: %.2fs (0x%2.2x)", 3598 cmd -> Ëngth * 1.28, cmd->length); 3599 `´št_num_»¥ ( cmd -> num_»¥ ); 3600 } } 3602  $³riodic_šquœy_cmd (cÚ¡ * d©a , ušt8_t size ) 3604 cÚ¡  bt_hci_cmd_³riodic_šquœy * cmd = d©a ; 3606 `´št_f›ld ("Max…eriod: %.2fs (0x%2.2x)", 3607 cmd -> max_³riod * 1.28, cmd->max_period); 3608 `´št_f›ld ("Min…eriod: %.2fs (0x%2.2x)", 3609 cmd -> mš_³riod * 1.28, cmd->min_period); 3610 `´št_Ÿc ( cmd -> Ïp ); 3611 `´št_f›ld ("Length: %.2fs (0x%2.2x)", 3612 cmd -> Ëngth * 1.28, cmd->length); 3613 `´št_num_»¥ ( cmd -> num_»¥ ); 3614 } } 3616  $ü—‹_cÚn_cmd (cÚ¡ * d©a , ušt8_t size ) 3618 cÚ¡  bt_hci_cmd_ü—‹_cÚn * cmd = d©a ; 3619 cÚ¡ * ¡r ; 3621 `´št_bdaddr ( cmd -> bdaddr ); 3622 `´št_pkt_ty³ ( cmd -> pkt_ty³ ); 3623 `´št_psÿn_»p_mode ( cmd -> psÿn_»p_mode ); 3624 `´št_psÿn_mode ( cmd -> psÿn_mode ); 3625 `´št_þock_off£t ( cmd -> þock_off£t ); 3627  cmd -> rÞe_sw™ch ) { 3629 ¡r = "Stay master"; 3632 ¡r = "Allow slave"; 3635 ¡r = "Reserved"; 3639 `´št_f›ld ("RÞsw™ch: % (0x%2.2x)", ¡r , cmd -> rÞe_sw™ch ); 3640 } } 3642  $discÚÃù_cmd (cÚ¡ * d©a , ušt8_t size ) 3644 cÚ¡  bt_hci_cmd_discÚÃù * cmd = d©a ; 3646 `´št_hªdË ( cmd -> hªdË ); 3647 `´št_»asÚ ( cmd -> »asÚ ); 3648 } } 3650  $add_sco_cÚn_cmd (cÚ¡ * d©a , ušt8_t size ) 3652 cÚ¡  bt_hci_cmd_add_sco_cÚn * cmd = d©a ; 3654 `´št_hªdË ( cmd -> hªdË ); 3655 `´št_pkt_ty³_sco ( cmd -> pkt_ty³ ); 3656 } } 3658  $ü—‹_cÚn_ÿnûl_cmd (cÚ¡ * d©a , ušt8_t size ) 3660 cÚ¡  bt_hci_cmd_ü—‹_cÚn_ÿnûl * cmd = d©a ; 3662 `´št_bdaddr ( cmd -> bdaddr ); 3663 } } 3665  $acû±_cÚn_»que¡_cmd (cÚ¡ * d©a , ušt8_t size ) 3667 cÚ¡  bt_hci_cmd_acû±_cÚn_»que¡ * cmd = d©a ; 3669 `´št_bdaddr ( cmd -> bdaddr ); 3670 `´št_rÞe ( cmd -> rÞe ); 3671 } } 3673  $»jeù_cÚn_»que¡_cmd (cÚ¡ * d©a , ušt8_t size ) 3675 cÚ¡  bt_hci_cmd_»jeù_cÚn_»que¡ * cmd = d©a ; 3677 `´št_bdaddr ( cmd -> bdaddr ); 3678 `´št_»asÚ ( cmd -> »asÚ ); 3679 } } 3681  $lšk_key_»que¡_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 3683 cÚ¡  bt_hci_cmd_lšk_key_»que¡_»¶y * cmd = d©a ; 3685 `´št_bdaddr ( cmd -> bdaddr ); 3686 `´št_lšk_key ( cmd -> lšk_key ); 3687 } } 3689  $lšk_key_»que¡_Ãg_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 3691 cÚ¡  bt_hci_cmd_lšk_key_»que¡_Ãg_»¶y * cmd = d©a ; 3693 `´št_bdaddr ( cmd -> bdaddr ); 3694 } } 3696  $pš_code_»que¡_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 3698 cÚ¡  bt_hci_cmd_pš_code_»que¡_»¶y * cmd = d©a ; 3700 `´št_bdaddr ( cmd -> bdaddr ); 3701 `´št_f›ld ("PIN†’gth: %d", cmd -> pš_Ën ); 3702 `´št_pš_code ( cmd -> pš_code , cmd-> pš_Ën ); 3703 } } 3705  $pš_code_»que¡_Ãg_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 3707 cÚ¡  bt_hci_cmd_pš_code_»que¡_Ãg_»¶y * cmd = d©a ; 3709 `´št_bdaddr ( cmd -> bdaddr ); 3710 } } 3712  $chªge_cÚn_pkt_ty³_cmd (cÚ¡ * d©a , ušt8_t size ) 3714 cÚ¡  bt_hci_cmd_chªge_cÚn_pkt_ty³ * cmd = d©a ; 3716 `´št_hªdË ( cmd -> hªdË ); 3717 `´št_pkt_ty³ ( cmd -> pkt_ty³ ); 3718 } } 3720  $auth_»que¡ed_cmd (cÚ¡ * d©a , ušt8_t size ) 3722 cÚ¡  bt_hci_cmd_auth_»que¡ed * cmd = d©a ; 3724 `´št_hªdË ( cmd -> hªdË ); 3725 } } 3727  $£t_cÚn_’üy±_cmd (cÚ¡ * d©a , ušt8_t size ) 3729 cÚ¡  bt_hci_cmd_£t_cÚn_’üy± * cmd = d©a ; 3731 `´št_hªdË ( cmd -> hªdË ); 3732 `´št_’ü_mode ( cmd -> ’ü_mode ); 3733 } } 3735  $chªge_cÚn_lšk_key_cmd (cÚ¡ * d©a , ušt8_t size ) 3737 cÚ¡  bt_hci_cmd_chªge_cÚn_lšk_key * cmd = d©a ; 3739 `´št_hªdË ( cmd -> hªdË ); 3740 } } 3742  $ma¡”_lšk_key_cmd (cÚ¡ * d©a , ušt8_t size ) 3744 cÚ¡  bt_hci_cmd_ma¡”_lšk_key * cmd = d©a ; 3746 `´št_key_æag ( cmd -> key_æag ); 3747 } } 3749  $»mÙe_Çme_»que¡_cmd (cÚ¡ * d©a , ušt8_t size ) 3751 cÚ¡  bt_hci_cmd_»mÙe_Çme_»que¡ * cmd = d©a ; 3753 `´št_bdaddr ( cmd -> bdaddr ); 3754 `´št_psÿn_»p_mode ( cmd -> psÿn_»p_mode ); 3755 `´št_psÿn_mode ( cmd -> psÿn_mode ); 3756 `´št_þock_off£t ( cmd -> þock_off£t ); 3757 } } 3759  $»mÙe_Çme_»que¡_ÿnûl_cmd (cÚ¡ * d©a , ušt8_t size ) 3761 cÚ¡  bt_hci_cmd_»mÙe_Çme_»que¡_ÿnûl * cmd = d©a ; 3763 `´št_bdaddr ( cmd -> bdaddr ); 3764 } } 3766  $»ad_»mÙe_ã©u»s_cmd (cÚ¡ * d©a , ušt8_t size ) 3768 cÚ¡  bt_hci_cmd_»ad_»mÙe_ã©u»s * cmd = d©a ; 3770 `´št_hªdË ( cmd -> hªdË ); 3771 } } 3773  $»ad_»mÙe_ext_ã©u»s_cmd (cÚ¡ * d©a , ušt8_t size ) 3775 cÚ¡  bt_hci_cmd_»ad_»mÙe_ext_ã©u»s * cmd = d©a ; 3777 `´št_hªdË ( cmd -> hªdË ); 3778 `´št_f›ld ("Page: %d", cmd -> ·ge ); 3779 } } 3781  $»ad_»mÙe_v”siÚ_cmd (cÚ¡ * d©a , ušt8_t size ) 3783 cÚ¡  bt_hci_cmd_»ad_»mÙe_v”siÚ * cmd = d©a ; 3785 `´št_hªdË ( cmd -> hªdË ); 3786 } } 3788  $»ad_þock_off£t_cmd (cÚ¡ * d©a , ušt8_t size ) 3790 cÚ¡  bt_hci_cmd_»ad_þock_off£t * cmd = d©a ; 3792 `´št_hªdË ( cmd -> hªdË ); 3793 } } 3795  $»ad_lmp_hªdË_cmd (cÚ¡ * d©a , ušt8_t size ) 3797 cÚ¡  bt_hci_cmd_»ad_lmp_hªdË * cmd = d©a ; 3799 `´št_hªdË ( cmd -> hªdË ); 3800 } } 3802  $»ad_lmp_hªdË_r¥ (cÚ¡ * d©a , ušt8_t size ) 3804 cÚ¡  bt_hci_r¥_»ad_lmp_hªdË * r¥ = d©a ; 3806 `´št_¡©us ( r¥ -> ¡©us ); 3807 `´št_hªdË ( r¥ -> hªdË ); 3808 `´št_f›ld ("LMP hªdË: %d", r¥ -> lmp_hªdË ); 3809 `´št_f›ld ("Re£rved: %d", `Ë32_to_ýu ( r¥ -> »£rved )); 3810 } } 3812  $£tup_sync_cÚn_cmd (cÚ¡ * d©a , ušt8_t size ) 3814 cÚ¡  bt_hci_cmd_£tup_sync_cÚn * cmd = d©a ; 3816 `´št_hªdË ( cmd -> hªdË ); 3817 `´št_f›ld ("T¿nsm™ bªdwidth: %d", `Ë32_to_ýu ( cmd -> tx_bªdwidth )); 3818 `´št_f›ld ("Reûivbªdwidth: %d", `Ë32_to_ýu ( cmd -> rx_bªdwidth )); 3819 `´št_f›ld ("Max†©’cy: %d", `Ë16_to_ýu ( cmd -> max_Ï‹ncy )); 3820 `´št_voiû_£‰šg ( cmd -> voiû_£‰šg ); 3821 `´št_»ŒªsmissiÚ_effÜt ( cmd -> »Œªs_effÜt ); 3822 `´št_pkt_ty³_sco ( cmd -> pkt_ty³ ); 3823 } } 3825  $acû±_sync_cÚn_»que¡_cmd (cÚ¡ * d©a , ušt8_t size ) 3827 cÚ¡  bt_hci_cmd_acû±_sync_cÚn_»que¡ * cmd = d©a ; 3829 `´št_bdaddr ( cmd -> bdaddr ); 3830 `´št_f›ld ("T¿nsm™ bªdwidth: %d", `Ë32_to_ýu ( cmd -> tx_bªdwidth )); 3831 `´št_f›ld ("Reûivbªdwidth: %d", `Ë32_to_ýu ( cmd -> rx_bªdwidth )); 3832 `´št_f›ld ("Max†©’cy: %d", `Ë16_to_ýu ( cmd -> max_Ï‹ncy )); 3833 `´št_voiû_£‰šg ( cmd -> voiû_£‰šg ); 3834 `´št_»ŒªsmissiÚ_effÜt ( cmd -> »Œªs_effÜt ); 3835 `´št_pkt_ty³_sco ( cmd -> pkt_ty³ ); 3836 } } 3838  $»jeù_sync_cÚn_»que¡_cmd (cÚ¡ * d©a , ušt8_t size ) 3840 cÚ¡  bt_hci_cmd_»jeù_sync_cÚn_»que¡ * cmd = d©a ; 3842 `´št_bdaddr ( cmd -> bdaddr ); 3843 `´št_»asÚ ( cmd -> »asÚ ); 3844 } } 3846  $io_ÿ·bž™y_»que¡_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 3848 cÚ¡  bt_hci_cmd_io_ÿ·bž™y_»que¡_»¶y * cmd = d©a ; 3850 `´št_bdaddr ( cmd -> bdaddr ); 3851 `´št_io_ÿ·bž™y ( cmd -> ÿ·bž™y ); 3852 `´št_oob_d©a ( cmd -> oob_d©a ); 3853 `´št_auth’tiÿtiÚ ( cmd -> auth’tiÿtiÚ ); 3854 } } 3856  $u£r_cÚfœm_»que¡_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 3858 cÚ¡  bt_hci_cmd_u£r_cÚfœm_»que¡_»¶y * cmd = d©a ; 3860 `´št_bdaddr ( cmd -> bdaddr ); 3861 } } 3863  $u£r_cÚfœm_»que¡_Ãg_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 3865 cÚ¡  bt_hci_cmd_u£r_cÚfœm_»que¡_Ãg_»¶y * cmd = d©a ; 3867 `´št_bdaddr ( cmd -> bdaddr ); 3868 } } 3870  $u£r_·sskey_»que¡_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 3872 cÚ¡  bt_hci_cmd_u£r_·sskey_»que¡_»¶y * cmd = d©a ; 3874 `´št_bdaddr ( cmd -> bdaddr ); 3875 `´št_·sskey ( cmd -> ·sskey ); 3876 } } 3878  $u£r_·sskey_»que¡_Ãg_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 3880 cÚ¡  bt_hci_cmd_u£r_·sskey_»que¡_Ãg_»¶y * cmd = d©a ; 3882 `´št_bdaddr ( cmd -> bdaddr ); 3883 } } 3885  $»mÙe_oob_d©a_»que¡_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 3887 cÚ¡  bt_hci_cmd_»mÙe_oob_d©a_»que¡_»¶y * cmd = d©a ; 3889 `´št_bdaddr ( cmd -> bdaddr ); 3890 `´št_hash_p192 ( cmd -> hash ); 3891 `´št_¿ndomiz”_p192 ( cmd -> ¿ndomiz” ); 3892 } } 3894  $»mÙe_oob_d©a_»que¡_Ãg_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 3896 cÚ¡  bt_hci_cmd_»mÙe_oob_d©a_»que¡_Ãg_»¶y * cmd = d©a ; 3898 `´št_bdaddr ( cmd -> bdaddr ); 3899 } } 3901  $io_ÿ·bž™y_»que¡_Ãg_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 3903 cÚ¡  bt_hci_cmd_io_ÿ·bž™y_»que¡_Ãg_»¶y * cmd = d©a ; 3905 `´št_bdaddr ( cmd -> bdaddr ); 3906 `´št_»asÚ ( cmd -> »asÚ ); 3907 } } 3909  $ü—‹_phy_lšk_cmd (cÚ¡ * d©a , ušt8_t size ) 3911 cÚ¡  bt_hci_cmd_ü—‹_phy_lšk * cmd = d©a ; 3913 `´št_phy_hªdË ( cmd -> phy_hªdË ); 3914 `´št_key_Ën ( cmd -> key_Ën ); 3915 `´št_key_ty³ ( cmd -> key_ty³ ); 3917 `·ck‘_hexdump ( d©a + 3, size - 3); 3918 } } 3920  $acû±_phy_lšk_cmd (cÚ¡ * d©a , ušt8_t size ) 3922 cÚ¡  bt_hci_cmd_acû±_phy_lšk * cmd = d©a ; 3924 `´št_phy_hªdË ( cmd -> phy_hªdË ); 3925 `´št_key_Ën ( cmd -> key_Ën ); 3926 `´št_key_ty³ ( cmd -> key_ty³ ); 3928 `·ck‘_hexdump ( d©a + 3, size - 3); 3929 } } 3931  $discÚn_phy_lšk_cmd (cÚ¡ * d©a , ušt8_t size ) 3933 cÚ¡  bt_hci_cmd_discÚn_phy_lšk * cmd = d©a ; 3935 `´št_phy_hªdË ( cmd -> phy_hªdË ); 3936 `´št_»asÚ ( cmd -> »asÚ ); 3937 } } 3939  $ü—‹_logic_lšk_cmd (cÚ¡ * d©a , ušt8_t size ) 3941 cÚ¡  bt_hci_cmd_ü—‹_logic_lšk * cmd = d©a ; 3943 `´št_phy_hªdË ( cmd -> phy_hªdË ); 3944 `´št_æow_¥ec ("TX", cmd -> tx_æow_¥ec ); 3945 `´št_æow_¥ec ("RX", cmd -> rx_æow_¥ec ); 3946 } } 3948  $acû±_logic_lšk_cmd (cÚ¡ * d©a , ušt8_t size ) 3950 cÚ¡  bt_hci_cmd_acû±_logic_lšk * cmd = d©a ; 3952 `´št_phy_hªdË ( cmd -> phy_hªdË ); 3953 `´št_æow_¥ec ("TX", cmd -> tx_æow_¥ec ); 3954 `´št_æow_¥ec ("RX", cmd -> rx_æow_¥ec ); 3955 } } 3957  $discÚn_logic_lšk_cmd (cÚ¡ * d©a , ušt8_t size ) 3959 cÚ¡  bt_hci_cmd_discÚn_logic_lšk * cmd = d©a ; 3961 `´št_hªdË ( cmd -> hªdË ); 3962 } } 3964  $logic_lšk_ÿnûl_cmd (cÚ¡ * d©a , ušt8_t size ) 3966 cÚ¡  bt_hci_cmd_logic_lšk_ÿnûl * cmd = d©a ; 3968 `´št_phy_hªdË ( cmd -> phy_hªdË ); 3969 `´št_f›ld ("TX flow s³c: 0x%2.2x", cmd -> æow_¥ec ); 3970 } } 3972  $logic_lšk_ÿnûl_r¥ (cÚ¡ * d©a , ušt8_t size ) 3974 cÚ¡  bt_hci_r¥_logic_lšk_ÿnûl * r¥ = d©a ; 3976 `´št_¡©us ( r¥ -> ¡©us ); 3977 `´št_phy_hªdË ( r¥ -> phy_hªdË ); 3978 `´št_f›ld ("TX flow s³c: 0x%2.2x", r¥ -> æow_¥ec ); 3979 } } 3981  $æow_¥ec_modify_cmd (cÚ¡ * d©a , ušt8_t size ) 3983 cÚ¡  bt_hci_cmd_æow_¥ec_modify * cmd = d©a ; 3985 `´št_hªdË ( cmd -> hªdË ); 3986 `´št_æow_¥ec ("TX", cmd -> tx_æow_¥ec ); 3987 `´št_æow_¥ec ("RX", cmd -> rx_æow_¥ec ); 3988 } } 3990  $Œunÿ‹d_·ge_cmd (cÚ¡ * d©a , ušt8_t size ) 3992 cÚ¡  bt_hci_cmd_Œunÿ‹d_·ge * cmd = d©a ; 3994 `´št_bdaddr ( cmd -> bdaddr ); 3995 `´št_psÿn_»p_mode ( cmd -> psÿn_»p_mode ); 3996 `´št_þock_off£t ( cmd -> þock_off£t ); 3997 } } 3999  $Œunÿ‹d_·ge_ÿnûl_cmd (cÚ¡ * d©a , ušt8_t size ) 4001 cÚ¡  bt_hci_cmd_Œunÿ‹d_·ge_ÿnûl * cmd = d©a ; 4003 `´št_bdaddr ( cmd -> bdaddr ); 4004 } } 4006  $£t_¦ave_brßdÿ¡_cmd (cÚ¡ * d©a , ušt8_t size ) 4008 cÚ¡  bt_hci_cmd_£t_¦ave_brßdÿ¡ * cmd = d©a ; 4010 `´št_f›ld ("EÇbË: 0x%2.2x", cmd -> ’abË ); 4011 `´št_É_addr ( cmd -> É_addr ); 4012 `´št_Ío_®lowed ( cmd -> Ío_®lowed ); 4013 `´št_pkt_ty³ ( cmd -> pkt_ty³ ); 4014 `´št_¦Ù_625 ("Mš iÁ”v®", cmd -> mš_š‹rv® ); 4015 `´št_¦Ù_625 ("Max iÁ”v®", cmd -> max_š‹rv® ); 4016 `´št_¦Ù_625 ("Su³rvisiÚimeout", cmd -> timeout ); 4017 } } 4019  $£t_¦ave_brßdÿ¡_r¥ (cÚ¡ * d©a , ušt8_t size ) 4021 cÚ¡  bt_hci_r¥_£t_¦ave_brßdÿ¡ * r¥ = d©a ; 4023 `´št_¡©us ( r¥ -> ¡©us ); 4024 `´št_É_addr ( r¥ -> É_addr ); 4025 `´št_š‹rv® ( r¥ -> š‹rv® ); 4026 } } 4028  $£t_¦ave_brßdÿ¡_»ûive_cmd (cÚ¡ * d©a , ušt8_t size ) 4030 cÚ¡  bt_hci_cmd_£t_¦ave_brßdÿ¡_»ûive * cmd = d©a ; 4032 `´št_f›ld ("EÇbË: 0x%2.2x", cmd -> ’abË ); 4033 `´št_bdaddr ( cmd -> bdaddr ); 4034 `´št_É_addr ( cmd -> É_addr ); 4035 `´št_š‹rv® ( cmd -> š‹rv® ); 4036 `´št_f›ld ("Off£t: 0x%8.8x", `Ë32_to_ýu ( cmd -> off£t )); 4037 `´št_f›ld ("Next broadcast instant: 0x%4.4x", 4038 `Ë16_to_ýu ( cmd -> š¡ªt )); 4039 `´št_¦Ù_625 ("Su³rvisiÚimeout", cmd -> timeout ); 4040 `´št_f›ld ("RemÙtimšg‡ccu¿cy: %d…pm", cmd -> accu¿cy ); 4041 `´št_f›ld ("Sk: 0x%2.2x", cmd -> sk ); 4042 `´št_pkt_ty³ ( cmd -> pkt_ty³ ); 4043 `´št_chªÃl_m­ ( cmd -> m­ ); 4044 } } 4046  $£t_¦ave_brßdÿ¡_»ûive_r¥ (cÚ¡ * d©a , ušt8_t size ) 4048 cÚ¡  bt_hci_r¥_£t_¦ave_brßdÿ¡_»ûive * r¥ = d©a ; 4050 `´št_¡©us ( r¥ -> ¡©us ); 4051 `´št_bdaddr ( r¥ -> bdaddr ); 4052 `´št_É_addr ( r¥ -> É_addr ); 4053 } } 4055  $»ûive_sync_Œaš_cmd (cÚ¡ * d©a , ušt8_t size ) 4057 cÚ¡  bt_hci_cmd_»ûive_sync_Œaš * cmd = d©a ; 4059 `´št_bdaddr ( cmd -> bdaddr ); 4060 `´št_timeout ( cmd -> timeout ); 4061 `´št_wšdow ( cmd -> wšdow ); 4062 `´št_š‹rv® ( cmd -> š‹rv® ); 4063 } } 4065  $»mÙe_oob_ext_d©a_»que¡_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 4067 cÚ¡  bt_hci_cmd_»mÙe_oob_ext_d©a_»que¡_»¶y * cmd = d©a ; 4069 `´št_bdaddr ( cmd -> bdaddr ); 4070 `´št_hash_p192 ( cmd -> hash192 ); 4071 `´št_¿ndomiz”_p192 ( cmd -> ¿ndomiz”192 ); 4072 `´št_hash_p256 ( cmd -> hash256 ); 4073 `´št_¿ndomiz”_p256 ( cmd -> ¿ndomiz”256 ); 4074 } } 4076  $hÞd_mode_cmd (cÚ¡ * d©a , ušt8_t size ) 4078 cÚ¡  bt_hci_cmd_hÞd_mode * cmd = d©a ; 4080 `´št_hªdË ( cmd -> hªdË ); 4081 `´št_¦Ù_625 ("HÞd max iÁ”v®", cmd -> max_š‹rv® ); 4082 `´št_¦Ù_625 ("HÞd mš iÁ”v®", cmd -> mš_š‹rv® ); 4083 } } 4085  $¢iff_mode_cmd (cÚ¡ * d©a , ušt8_t size ) 4087 cÚ¡  bt_hci_cmd_¢iff_mode * cmd = d©a ; 4089 `´št_hªdË ( cmd -> hªdË ); 4090 `´št_¦Ù_625 ("Snifàmax iÁ”v®", cmd -> max_š‹rv® ); 4091 `´št_¦Ù_625 ("Snifàmš iÁ”v®", cmd -> mš_š‹rv® ); 4092 `´št_¦Ù_125 ("Snifà©‹m±", cmd -> ©‹m± ); 4093 `´št_¦Ù_125 ("Snifàtimeout", cmd -> timeout ); 4094 } } 4096  $ex™_¢iff_mode_cmd (cÚ¡ * d©a , ušt8_t size ) 4098 cÚ¡  bt_hci_cmd_ex™_¢iff_mode * cmd = d©a ; 4100 `´št_hªdË ( cmd -> hªdË ); 4101 } } 4103  $·rk_¡©e_cmd (cÚ¡ * d©a , ušt8_t size ) 4105 cÚ¡  bt_hci_cmd_·rk_¡©e * cmd = d©a ; 4107 `´št_hªdË ( cmd -> hªdË ); 4108 `´št_¦Ù_625 ("B—cÚ max iÁ”v®", cmd -> max_š‹rv® ); 4109 `´št_¦Ù_625 ("B—cÚ mš iÁ”v®", cmd -> mš_š‹rv® ); 4110 } } 4112  $ex™_·rk_¡©e_cmd (cÚ¡ * d©a , ušt8_t size ) 4114 cÚ¡  bt_hci_cmd_ex™_·rk_¡©e * cmd = d©a ; 4116 `´št_hªdË ( cmd -> hªdË ); 4117 } } 4119  $qos_£tup_cmd (cÚ¡ * d©a , ušt8_t size ) 4121 cÚ¡  bt_hci_cmd_qos_£tup * cmd = d©a ; 4123 `´št_hªdË ( cmd -> hªdË ); 4124 `´št_f›ld ("FÏgs: 0x%2.2x", cmd -> æags ); 4126 `´št_£rviû_ty³ ( cmd -> £rviû_ty³ ); 4128 `´št_f›ld ("Tok’„©e: %d", `Ë32_to_ýu ( cmd -> tok’_¿‹ )); 4129 `´št_f›ld ("P—k bªdwidth: %d", `Ë32_to_ýu ( cmd -> ³ak_bªdwidth )); 4130 `´št_f›ld ("L©’cy: %d", `Ë32_to_ýu ( cmd -> Ï‹ncy )); 4131 `´št_f›ld ("D–ay v¬ŸtiÚ: %d", `Ë32_to_ýu ( cmd -> d–ay_v¬ŸtiÚ )); 4132 } } 4134  $rÞe_discov”y_cmd (cÚ¡ * d©a , ušt8_t size ) 4136 cÚ¡  bt_hci_cmd_rÞe_discov”y * cmd = d©a ; 4138 `´št_hªdË ( cmd -> hªdË ); 4139 } } 4141  $rÞe_discov”y_r¥ (cÚ¡ * d©a , ušt8_t size ) 4143 cÚ¡  bt_hci_r¥_rÞe_discov”y * r¥ = d©a ; 4145 `´št_¡©us ( r¥ -> ¡©us ); 4146 `´št_hªdË ( r¥ -> hªdË ); 4147 `´št_rÞe ( r¥ -> rÞe ); 4148 } } 4150  $sw™ch_rÞe_cmd (cÚ¡ * d©a , ušt8_t size ) 4152 cÚ¡  bt_hci_cmd_sw™ch_rÞe * cmd = d©a ; 4154 `´št_bdaddr ( cmd -> bdaddr ); 4155 `´št_rÞe ( cmd -> rÞe ); 4156 } } 4158  $»ad_lšk_pÞicy_cmd (cÚ¡ * d©a , ušt8_t size ) 4160 cÚ¡  bt_hci_cmd_»ad_lšk_pÞicy * cmd = d©a ; 4162 `´št_hªdË ( cmd -> hªdË ); 4163 } } 4165  $»ad_lšk_pÞicy_r¥ (cÚ¡ * d©a , ušt8_t size ) 4167 cÚ¡  bt_hci_r¥_»ad_lšk_pÞicy * r¥ = d©a ; 4169 `´št_¡©us ( r¥ -> ¡©us ); 4170 `´št_hªdË ( r¥ -> hªdË ); 4171 `´št_lšk_pÞicy ( r¥ -> pÞicy ); 4172 } } 4174  $wr™e_lšk_pÞicy_cmd (cÚ¡ * d©a , ušt8_t size ) 4176 cÚ¡  bt_hci_cmd_wr™e_lšk_pÞicy * cmd = d©a ; 4178 `´št_hªdË ( cmd -> hªdË ); 4179 `´št_lšk_pÞicy ( cmd -> pÞicy ); 4180 } } 4182  $wr™e_lšk_pÞicy_r¥ (cÚ¡ * d©a , ušt8_t size ) 4184 cÚ¡  bt_hci_r¥_wr™e_lšk_pÞicy * r¥ = d©a ; 4186 `´št_¡©us ( r¥ -> ¡©us ); 4187 `´št_hªdË ( r¥ -> hªdË ); 4188 } } 4190  $»ad_deçuÉ_lšk_pÞicy_r¥ (cÚ¡ * d©a , ušt8_t size ) 4192 cÚ¡  bt_hci_r¥_»ad_deçuÉ_lšk_pÞicy * r¥ = d©a ; 4194 `´št_¡©us ( r¥ -> ¡©us ); 4195 `´št_lšk_pÞicy ( r¥ -> pÞicy ); 4196 } } 4198  $wr™e_deçuÉ_lšk_pÞicy_cmd (cÚ¡ * d©a , ušt8_t size ) 4200 cÚ¡  bt_hci_cmd_wr™e_deçuÉ_lšk_pÞicy * cmd = d©a ; 4202 `´št_lšk_pÞicy ( cmd -> pÞicy ); 4203 } } 4205  $æow_¥ec_cmd (cÚ¡ * d©a , ušt8_t size ) 4207 cÚ¡  bt_hci_cmd_æow_¥ec * cmd = d©a ; 4209 `´št_hªdË ( cmd -> hªdË ); 4210 `´št_f›ld ("FÏgs: 0x%2.2x", cmd -> æags ); 4212 `´št_æow_dœeùiÚ ( cmd -> dœeùiÚ ); 4213 `´št_£rviû_ty³ ( cmd -> £rviû_ty³ ); 4215 `´št_f›ld ("Tok’„©e: %d", `Ë32_to_ýu ( cmd -> tok’_¿‹ )); 4216 `´št_f›ld ("Token bucket size: %d", 4217 `Ë32_to_ýu ( cmd -> tok’_buck‘_size )); 4218 `´št_f›ld ("P—k bªdwidth: %d", `Ë32_to_ýu ( cmd -> ³ak_bªdwidth )); 4219 `´št_f›ld ("Acûs Ï‹ncy: %d", `Ë32_to_ýu ( cmd -> acûss_Ï‹ncy )); 4220 } } 4222  $¢iff_sub¿tšg_cmd (cÚ¡ * d©a , ušt8_t size ) 4224 cÚ¡  bt_hci_cmd_¢iff_sub¿tšg * cmd = d©a ; 4226 `´št_hªdË ( cmd -> hªdË ); 4227 `´št_¦Ù_625 ("Max†©’cy", cmd -> max_Ï‹ncy ); 4228 `´št_¦Ù_625 ("Mš„emÙtimeout", cmd -> mš_»mÙe_timeout ); 4229 `´št_¦Ù_625 ("Mš†oÿÈtimeout", cmd -> mš_loÿl_timeout ); 4230 } } 4232  $¢iff_sub¿tšg_r¥ (cÚ¡ * d©a , ušt8_t size ) 4234 cÚ¡  bt_hci_r¥_¢iff_sub¿tšg * r¥ = d©a ; 4236 `´št_¡©us ( r¥ -> ¡©us ); 4237 `´št_hªdË ( r¥ -> hªdË ); 4238 } } 4240  $£t_ev’t_mask_cmd (cÚ¡ * d©a , ušt8_t size ) 4242 cÚ¡  bt_hci_cmd_£t_ev’t_mask * cmd = d©a ; 4244 `´št_ev’t_mask ( cmd -> mask ); 4245 } } 4247  $£t_ev’t_fž‹r_cmd (cÚ¡ * d©a , ušt8_t size ) 4249 ušt8_t ty³ = *((cÚ¡ ušt8_ˆ*è d©a ); 4250 ušt8_t fž‹r ; 4251 cÚ¡ * ¡r ; 4253  ty³ ) { 4255 ¡r = "Clear All Filters"; 4258 ¡r = "Inquiry Result"; 4261 ¡r = "Connection Setup"; 4264 ¡r = "Reserved"; 4268 `´št_f›ld ("Ty³: % (0x%2.2x)", ¡r , ty³ ); 4270  ty³ ) { 4272 ià( size > 1) { 4273 `´št_‹xt ( COLOR_ERROR , " invalid…arameter size"); 4274 `·ck‘_hexdump ( d©a + 1, size - 1); 4279 fž‹r = *((cÚ¡ ušt8_t *è( d©a + 1)); 4281  fž‹r ) { 4283 ¡r = "Return„esponses from‡ll devices"; 4286 ¡r = "Device with specific Class of Device"; 4289 ¡r = "Device with specific BD_ADDR"; 4292 ¡r = "Reserved"; 4296 `´št_f›ld ("Fž‹r: % (0x%2.2x)", ¡r , fž‹r ); 4297 `·ck‘_hexdump ( d©a + 2, size - 2); 4301 fž‹r = *((cÚ¡ ušt8_t *è( d©a + 1)); 4303  fž‹r ) { 4305 ¡r = "Allow connections‡ll devices"; 4308 ¡r = "Allow connections with specific Class of Device"; 4311 ¡r = "Allow connections with specific BD_ADDR"; 4314 ¡r = "Reserved"; 4318 `´št_f›ld ("Fž‹r: % (0x%2.2x)", ¡r , fž‹r ); 4319 `·ck‘_hexdump ( d©a + 2, size - 2); 4323 fž‹r = *((cÚ¡ ušt8_t *è( d©a + 1)); 4325 `´št_f›ld ("Fž‹r: Re£rved (0x%2.2x)", fž‹r ); 4326 `·ck‘_hexdump ( d©a + 2, size - 2); 4329 } } 4331  $æush_cmd (cÚ¡ * d©a , ušt8_t size ) 4333 cÚ¡  bt_hci_cmd_æush * cmd = d©a ; 4335 `´št_hªdË ( cmd -> hªdË ); 4336 } } 4338  $æush_r¥ (cÚ¡ * d©a , ušt8_t size ) 4340 cÚ¡  bt_hci_r¥_æush * r¥ = d©a ; 4342 `´št_¡©us ( r¥ -> ¡©us ); 4343 `´št_hªdË ( r¥ -> hªdË ); 4344 } } 4346  $»ad_pš_ty³_r¥ (cÚ¡ * d©a , ušt8_t size ) 4348 cÚ¡  bt_hci_r¥_»ad_pš_ty³ * r¥ = d©a ; 4350 `´št_¡©us ( r¥ -> ¡©us ); 4351 `´št_pš_ty³ ( r¥ -> pš_ty³ ); 4352 } } 4354  $wr™e_pš_ty³_cmd (cÚ¡ * d©a , ušt8_t size ) 4356 cÚ¡  bt_hci_cmd_wr™e_pš_ty³ * cmd = d©a ; 4358 `´št_pš_ty³ ( cmd -> pš_ty³ ); 4359 } } 4361  $»ad_¡Üed_lšk_key_cmd (cÚ¡ * d©a , ušt8_t size ) 4363 cÚ¡  bt_hci_cmd_»ad_¡Üed_lšk_key * cmd = d©a ; 4365 `´št_bdaddr ( cmd -> bdaddr ); 4366 `´št_f›ld ("R—d‡Î: 0x%2.2x", cmd -> »ad_®l ); 4367 } } 4369  $»ad_¡Üed_lšk_key_r¥ (cÚ¡ * d©a , ušt8_t size ) 4371 cÚ¡  bt_hci_r¥_»ad_¡Üed_lšk_key * r¥ = d©a ; 4373 `´št_¡©us ( r¥ -> ¡©us ); 4374 `´št_f›ld ("Max‚um keys: %d", `Ë16_to_ýu ( r¥ -> max_num_keys )); 4375 `´št_f›ld ("Num keys: %d", `Ë16_to_ýu ( r¥ -> num_keys )); 4376 } } 4378  $wr™e_¡Üed_lšk_key_cmd (cÚ¡ * d©a , ušt8_t size ) 4380 cÚ¡  bt_hci_cmd_wr™e_¡Üed_lšk_key * cmd = d©a ; 4382 `´št_f›ld ("Num keys: %d", cmd -> num_keys ); 4384 `·ck‘_hexdump ( d©a + 1, size - 1); 4385 } } 4387  $wr™e_¡Üed_lšk_key_r¥ (cÚ¡ * d©a , ušt8_t size ) 4389 cÚ¡  bt_hci_r¥_wr™e_¡Üed_lšk_key * r¥ = d©a ; 4391 `´št_¡©us ( r¥ -> ¡©us ); 4392 `´št_f›ld ("Num keys: %d", r¥ -> num_keys ); 4393 } } 4395  $d–‘e_¡Üed_lšk_key_cmd (cÚ¡ * d©a , ušt8_t size ) 4397 cÚ¡  bt_hci_cmd_d–‘e_¡Üed_lšk_key * cmd = d©a ; 4399 `´št_bdaddr ( cmd -> bdaddr ); 4400 `´št_f›ld ("D–‘®l: 0x%2.2x", cmd -> d–‘e_®l ); 4401 } } 4403  $d–‘e_¡Üed_lšk_key_r¥ (cÚ¡ * d©a , ušt8_t size ) 4405 cÚ¡  bt_hci_r¥_d–‘e_¡Üed_lšk_key * r¥ = d©a ; 4407 `´št_¡©us ( r¥ -> ¡©us ); 4408 `´št_f›ld ("Num keys: %d", `Ë16_to_ýu ( r¥ -> num_keys )); 4409 } } 4411  $wr™e_loÿl_Çme_cmd (cÚ¡ * d©a , ušt8_t size ) 4413 cÚ¡  bt_hci_cmd_wr™e_loÿl_Çme * cmd = d©a ; 4415 `´št_Çme ( cmd -> Çme ); 4416 } } 4418  $»ad_loÿl_Çme_r¥ (cÚ¡ * d©a , ušt8_t size ) 4420 cÚ¡  bt_hci_r¥_»ad_loÿl_Çme * r¥ = d©a ; 4422 `´št_¡©us ( r¥ -> ¡©us ); 4423 `´št_Çme ( r¥ -> Çme ); 4424 } } 4426  $»ad_cÚn_acû±_timeout_r¥ (cÚ¡ * d©a , ušt8_t size ) 4428 cÚ¡  bt_hci_r¥_»ad_cÚn_acû±_timeout * r¥ = d©a ; 4430 `´št_¡©us ( r¥ -> ¡©us ); 4431 `´št_timeout ( r¥ -> timeout ); 4432 } } 4434  $wr™e_cÚn_acû±_timeout_cmd (cÚ¡ * d©a , ušt8_t size ) 4436 cÚ¡  bt_hci_cmd_wr™e_cÚn_acû±_timeout * cmd = d©a ; 4438 `´št_timeout ( cmd -> timeout ); 4439 } } 4441  $»ad_·ge_timeout_r¥ (cÚ¡ * d©a , ušt8_t size ) 4443 cÚ¡  bt_hci_r¥_»ad_·ge_timeout * r¥ = d©a ; 4445 `´št_¡©us ( r¥ -> ¡©us ); 4446 `´št_timeout ( r¥ -> timeout ); 4447 } } 4449  $wr™e_·ge_timeout_cmd (cÚ¡ * d©a , ušt8_t size ) 4451 cÚ¡  bt_hci_cmd_wr™e_·ge_timeout * cmd = d©a ; 4453 `´št_timeout ( cmd -> timeout ); 4454 } } 4456  $»ad_sÿn_’abË_r¥ (cÚ¡ * d©a , ušt8_t size ) 4458 cÚ¡  bt_hci_r¥_»ad_sÿn_’abË * r¥ = d©a ; 4460 `´št_¡©us ( r¥ -> ¡©us ); 4461 `´št_sÿn_’abË ( r¥ -> ’abË ); 4462 } } 4464  $wr™e_sÿn_’abË_cmd (cÚ¡ * d©a , ušt8_t size ) 4466 cÚ¡  bt_hci_cmd_wr™e_sÿn_’abË * cmd = d©a ; 4468 `´št_sÿn_’abË ( cmd -> ’abË ); 4469 } } 4471  $»ad_·ge_sÿn_aùiv™y_r¥ (cÚ¡ * d©a , ušt8_t size ) 4473 cÚ¡  bt_hci_r¥_»ad_·ge_sÿn_aùiv™y * r¥ = d©a ; 4475 `´št_¡©us ( r¥ -> ¡©us ); 4476 `´št_š‹rv® ( r¥ -> š‹rv® ); 4477 `´št_wšdow ( r¥ -> wšdow ); 4478 } } 4480  $wr™e_·ge_sÿn_aùiv™y_cmd (cÚ¡ * d©a , ušt8_t size ) 4482 cÚ¡  bt_hci_cmd_wr™e_·ge_sÿn_aùiv™y * cmd = d©a ; 4484 `´št_š‹rv® ( cmd -> š‹rv® ); 4485 `´št_wšdow ( cmd -> wšdow ); 4486 } } 4488  $»ad_šquœy_sÿn_aùiv™y_r¥ (cÚ¡ * d©a , ušt8_t size ) 4490 cÚ¡  bt_hci_r¥_»ad_šquœy_sÿn_aùiv™y * r¥ = d©a ; 4492 `´št_¡©us ( r¥ -> ¡©us ); 4493 `´št_š‹rv® ( r¥ -> š‹rv® ); 4494 `´št_wšdow ( r¥ -> wšdow ); 4495 } } 4497  $wr™e_šquœy_sÿn_aùiv™y_cmd (cÚ¡ * d©a , ušt8_t size ) 4499 cÚ¡  bt_hci_cmd_wr™e_šquœy_sÿn_aùiv™y * cmd = d©a ; 4501 `´št_š‹rv® ( cmd -> š‹rv® ); 4502 `´št_wšdow ( cmd -> wšdow ); 4503 } } 4505  $»ad_auth_’abË_r¥ (cÚ¡ * d©a , ušt8_t size ) 4507 cÚ¡  bt_hci_r¥_»ad_auth_’abË * r¥ = d©a ; 4509 `´št_¡©us ( r¥ -> ¡©us ); 4510 `´št_auth_’abË ( r¥ -> ’abË ); 4511 } } 4513  $wr™e_auth_’abË_cmd (cÚ¡ * d©a , ušt8_t size ) 4515 cÚ¡  bt_hci_cmd_wr™e_auth_’abË * cmd = d©a ; 4517 `´št_auth_’abË ( cmd -> ’abË ); 4518 } } 4520  $»ad_’üy±_mode_r¥ (cÚ¡ * d©a , ušt8_t size ) 4522 cÚ¡  bt_hci_r¥_»ad_’üy±_mode * r¥ = d©a ; 4524 `´št_¡©us ( r¥ -> ¡©us ); 4525 `´št_’üy±_mode ( r¥ -> mode ); 4526 } } 4528  $wr™e_’üy±_mode_cmd (cÚ¡ * d©a , ušt8_t size ) 4530 cÚ¡  bt_hci_cmd_wr™e_’üy±_mode * cmd = d©a ; 4532 `´št_’üy±_mode ( cmd -> mode ); 4533 } } 4535  $»ad_þass_of_dev_r¥ (cÚ¡ * d©a , ušt8_t size ) 4537 cÚ¡  bt_hci_r¥_»ad_þass_of_dev * r¥ = d©a ; 4539 `´št_¡©us ( r¥ -> ¡©us ); 4540 `´št_dev_þass ( r¥ -> dev_þass ); 4541 } } 4543  $wr™e_þass_of_dev_cmd (cÚ¡ * d©a , ušt8_t size ) 4545 cÚ¡  bt_hci_cmd_wr™e_þass_of_dev * cmd = d©a ; 4547 `´št_dev_þass ( cmd -> dev_þass ); 4548 } } 4550  $»ad_voiû_£‰šg_r¥ (cÚ¡ * d©a , ušt8_t size ) 4552 cÚ¡  bt_hci_r¥_»ad_voiû_£‰šg * r¥ = d©a ; 4554 `´št_¡©us ( r¥ -> ¡©us ); 4555 `´št_voiû_£‰šg ( r¥ -> £‰šg ); 4556 } } 4558  $wr™e_voiû_£‰šg_cmd (cÚ¡ * d©a , ušt8_t size ) 4560 cÚ¡  bt_hci_cmd_wr™e_voiû_£‰šg * cmd = d©a ; 4562 `´št_voiû_£‰šg ( cmd -> £‰šg ); 4563 } } 4565  $»ad_auto_æush_timeout_cmd (cÚ¡ * d©a , ušt8_t size ) 4567 cÚ¡  bt_hci_cmd_»ad_auto_æush_timeout * cmd = d©a ; 4569 `´št_hªdË ( cmd -> hªdË ); 4570 } } 4572  $»ad_auto_æush_timeout_r¥ (cÚ¡ * d©a , ušt8_t size ) 4574 cÚ¡  bt_hci_r¥_»ad_auto_æush_timeout * r¥ = d©a ; 4576 `´št_¡©us ( r¥ -> ¡©us ); 4577 `´št_hªdË ( r¥ -> hªdË ); 4578 `´št_æush_timeout ( r¥ -> timeout ); 4579 } } 4581  $wr™e_auto_æush_timeout_cmd (cÚ¡ * d©a , ušt8_t size ) 4583 cÚ¡  bt_hci_cmd_wr™e_auto_æush_timeout * cmd = d©a ; 4585 `´št_hªdË ( cmd -> hªdË ); 4586 `´št_æush_timeout ( cmd -> timeout ); 4587 } } 4589  $wr™e_auto_æush_timeout_r¥ (cÚ¡ * d©a , ušt8_t size ) 4591 cÚ¡  bt_hci_r¥_wr™e_auto_æush_timeout * r¥ = d©a ; 4593 `´št_¡©us ( r¥ -> ¡©us ); 4594 `´št_hªdË ( r¥ -> hªdË ); 4595 } } 4597  $»ad_num_brßdÿ¡_»Œªs_r¥ (cÚ¡ * d©a , ušt8_t size ) 4599 cÚ¡  bt_hci_r¥_»ad_num_brßdÿ¡_»Œªs * r¥ = d©a ; 4601 `´št_¡©us ( r¥ -> ¡©us ); 4602 `´št_num_brßdÿ¡_»Œªs ( r¥ -> num_»Œªs ); 4603 } } 4605  $wr™e_num_brßdÿ¡_»Œªs_cmd (cÚ¡ * d©a , ušt8_t size ) 4607 cÚ¡  bt_hci_cmd_wr™e_num_brßdÿ¡_»Œªs * cmd = d©a ; 4609 `´št_num_brßdÿ¡_»Œªs ( cmd -> num_»Œªs ); 4610 } } 4612  $»ad_hÞd_mode_aùiv™y_r¥ (cÚ¡ * d©a , ušt8_t size ) 4614 cÚ¡  bt_hci_r¥_»ad_hÞd_mode_aùiv™y * r¥ = d©a ; 4616 `´št_¡©us ( r¥ -> ¡©us ); 4617 `´št_hÞd_mode_aùiv™y ( r¥ -> aùiv™y ); 4618 } } 4620  $wr™e_hÞd_mode_aùiv™y_cmd (cÚ¡ * d©a , ušt8_t size ) 4622 cÚ¡  bt_hci_cmd_wr™e_hÞd_mode_aùiv™y * cmd = d©a ; 4624 `´št_hÞd_mode_aùiv™y ( cmd -> aùiv™y ); 4625 } } 4627  $»ad_tx_pow”_cmd (cÚ¡ * d©a , ušt8_t size ) 4629 cÚ¡  bt_hci_cmd_»ad_tx_pow” * cmd = d©a ; 4631 `´št_hªdË ( cmd -> hªdË ); 4632 `´št_pow”_ty³ ( cmd -> ty³ ); 4633 } } 4635  $»ad_tx_pow”_r¥ (cÚ¡ * d©a , ušt8_t size ) 4637 cÚ¡  bt_hci_r¥_»ad_tx_pow” * r¥ = d©a ; 4639 `´št_¡©us ( r¥ -> ¡©us ); 4640 `´št_hªdË ( r¥ -> hªdË ); 4641 `´št_pow”_Ëv– ( r¥ -> Ëv– ); 4642 } } 4644  $»ad_sync_æow_cÚŒÞ_r¥ (cÚ¡ * d©a , ušt8_t size ) 4646 cÚ¡  bt_hci_r¥_»ad_sync_æow_cÚŒÞ * r¥ = d©a ; 4648 `´št_¡©us ( r¥ -> ¡©us ); 4649 `´št_sync_æow_cÚŒÞ ( r¥ -> ’abË ); 4650 } } 4652  $wr™e_sync_æow_cÚŒÞ_cmd (cÚ¡ * d©a , ušt8_t size ) 4654 cÚ¡  bt_hci_cmd_wr™e_sync_æow_cÚŒÞ * cmd = d©a ; 4656 `´št_sync_æow_cÚŒÞ ( cmd -> ’abË ); 4657 } } 4659  $£t_ho¡_æow_cÚŒÞ_cmd (cÚ¡ * d©a , ušt8_t size ) 4661 cÚ¡  bt_hci_cmd_£t_ho¡_æow_cÚŒÞ * cmd = d©a ; 4663 `´št_ho¡_æow_cÚŒÞ ( cmd -> ’abË ); 4664 } } 4666  $ho¡_bufãr_size_cmd (cÚ¡ * d©a , ušt8_t size ) 4668 cÚ¡  bt_hci_cmd_ho¡_bufãr_size * cmd = d©a ; 4670 `´št_f›ld ("ACL MTU: %-4d ACL max…acket: %d", 4671 `Ë16_to_ýu ( cmd -> aþ_mtu ), 4672 `Ë16_to_ýu ( cmd -> aþ_max_pkt )); 4673 `´št_f›ld ("SCO MTU: %-4d SCO max…acket: %d", 4674 cmd -> sco_mtu , 4675 `Ë16_to_ýu ( cmd -> sco_max_pkt )); 4676 } } 4678  $»ad_lšk_supv_timeout_cmd (cÚ¡ * d©a , ušt8_t size ) 4680 cÚ¡  bt_hci_cmd_»ad_lšk_supv_timeout * cmd = d©a ; 4682 `´št_hªdË ( cmd -> hªdË ); 4683 } } 4685  $»ad_lšk_supv_timeout_r¥ (cÚ¡ * d©a , ušt8_t size ) 4687 cÚ¡  bt_hci_r¥_»ad_lšk_supv_timeout * r¥ = d©a ; 4689 `´št_¡©us ( r¥ -> ¡©us ); 4690 `´št_hªdË ( r¥ -> hªdË ); 4691 `´št_timeout ( r¥ -> timeout ); 4692 } } 4694  $wr™e_lšk_supv_timeout_cmd (cÚ¡ * d©a , ušt8_t size ) 4696 cÚ¡  bt_hci_cmd_wr™e_lšk_supv_timeout * cmd = d©a ; 4698 `´št_hªdË ( cmd -> hªdË ); 4699 `´št_timeout ( cmd -> timeout ); 4700 } } 4702  $wr™e_lšk_supv_timeout_r¥ (cÚ¡ * d©a , ušt8_t size ) 4704 cÚ¡  bt_hci_r¥_wr™e_lšk_supv_timeout * r¥ = d©a ; 4706 `´št_¡©us ( r¥ -> ¡©us ); 4707 `´št_hªdË ( r¥ -> hªdË ); 4708 } } 4710  $»ad_num_suµÜ‹d_Ÿc_r¥ (cÚ¡ * d©a , ušt8_t size ) 4712 cÚ¡  bt_hci_r¥_»ad_num_suµÜ‹d_Ÿc * r¥ = d©a ; 4714 `´št_¡©us ( r¥ -> ¡©us ); 4715 `´št_f›ld ("Numb” oàIAC: %d", r¥ -> num_Ÿc ); 4716 } } 4718  $»ad_cu¼’t_Ÿc_Ïp_r¥ (cÚ¡ * d©a , ušt8_t size ) 4720 cÚ¡  bt_hci_r¥_»ad_cu¼’t_Ÿc_Ïp * r¥ = d©a ; 4721 ušt8_t i ; 4723 `´št_¡©us ( r¥ -> ¡©us ); 4724 `´št_f›ld ("Numb” oàIAC: %d", r¥ -> num_Ÿc ); 4726  i = 0; i < r¥ -> num_Ÿc ; i++) 4727 `´št_Ÿc ( r¥ -> Ÿc_Ïp + ( i * 3)); 4728 } } 4730  $wr™e_cu¼’t_Ÿc_Ïp_cmd (cÚ¡ * d©a , ušt8_t size ) 4732 cÚ¡  bt_hci_cmd_wr™e_cu¼’t_Ÿc_Ïp * cmd = d©a ; 4733 ušt8_t i ; 4735 `´št_f›ld ("Numb” oàIAC: %d", cmd -> num_Ÿc ); 4737  i = 0; i < cmd -> num_Ÿc ; i++) 4738 `´št_Ÿc ( cmd -> Ÿc_Ïp + ( i * 3)); 4739 } } 4741  $»ad_·ge_sÿn_³riod_mode_r¥ (cÚ¡ * d©a , ušt8_t size ) 4743 cÚ¡  bt_hci_r¥_»ad_·ge_sÿn_³riod_mode * r¥ = d©a ; 4745 `´št_¡©us ( r¥ -> ¡©us ); 4746 `´št_psÿn_³riod_mode ( r¥ -> mode ); 4747 } } 4749  $wr™e_·ge_sÿn_³riod_mode_cmd (cÚ¡ * d©a , ušt8_t size ) 4751 cÚ¡  bt_hci_cmd_wr™e_·ge_sÿn_³riod_mode * cmd = d©a ; 4753 `´št_psÿn_³riod_mode ( cmd -> mode ); 4754 } } 4756  $»ad_·ge_sÿn_mode_r¥ (cÚ¡ * d©a , ušt8_t size ) 4758 cÚ¡  bt_hci_r¥_»ad_·ge_sÿn_mode * r¥ = d©a ; 4760 `´št_¡©us ( r¥ -> ¡©us ); 4761 `´št_psÿn_mode ( r¥ -> mode ); 4762 } } 4764  $wr™e_·ge_sÿn_mode_cmd (cÚ¡ * d©a , ušt8_t size ) 4766 cÚ¡  bt_hci_cmd_wr™e_·ge_sÿn_mode * cmd = d©a ; 4768 `´št_psÿn_mode ( cmd -> mode ); 4769 } } 4771  $£t_afh_ho¡_þassifiÿtiÚ_cmd (cÚ¡ * d©a , ušt8_t size ) 4773 cÚ¡  bt_hci_cmd_£t_afh_ho¡_þassifiÿtiÚ * cmd = d©a ; 4775 `´št_chªÃl_m­ ( cmd -> m­ ); 4776 } } 4778  $»ad_šquœy_sÿn_ty³_r¥ (cÚ¡ * d©a , ušt8_t size ) 4780 cÚ¡  bt_hci_r¥_»ad_šquœy_sÿn_ty³ * r¥ = d©a ; 4782 `´št_¡©us ( r¥ -> ¡©us ); 4783 `´št_šquœy_sÿn_ty³ ( r¥ -> ty³ ); 4784 } } 4786  $wr™e_šquœy_sÿn_ty³_cmd (cÚ¡ * d©a , ušt8_t size ) 4788 cÚ¡  bt_hci_cmd_wr™e_šquœy_sÿn_ty³ * cmd = d©a ; 4790 `´št_šquœy_sÿn_ty³ ( cmd -> ty³ ); 4791 } } 4793  $»ad_šquœy_mode_r¥ (cÚ¡ * d©a , ušt8_t size ) 4795 cÚ¡  bt_hci_r¥_»ad_šquœy_mode * r¥ = d©a ; 4797 `´št_¡©us ( r¥ -> ¡©us ); 4798 `´št_šquœy_mode ( r¥ -> mode ); 4799 } } 4801  $wr™e_šquœy_mode_cmd (cÚ¡ * d©a , ušt8_t size ) 4803 cÚ¡  bt_hci_cmd_wr™e_šquœy_mode * cmd = d©a ; 4805 `´št_šquœy_mode ( cmd -> mode ); 4806 } } 4808  $»ad_·ge_sÿn_ty³_r¥ (cÚ¡ * d©a , ušt8_t size ) 4810 cÚ¡  bt_hci_r¥_»ad_·ge_sÿn_ty³ * r¥ = d©a ; 4812 `´št_¡©us ( r¥ -> ¡©us ); 4813 `´št_psÿn_ty³ ( r¥ -> ty³ ); 4814 } } 4816  $wr™e_·ge_sÿn_ty³_cmd (cÚ¡ * d©a , ušt8_t size ) 4818 cÚ¡  bt_hci_cmd_wr™e_·ge_sÿn_ty³ * cmd = d©a ; 4820 `´št_psÿn_ty³ ( cmd -> ty³ ); 4821 } } 4823  $»ad_afh_as£ssm’t_mode_r¥ (cÚ¡ * d©a , ušt8_t size ) 4825 cÚ¡  bt_hci_r¥_»ad_afh_as£ssm’t_mode * r¥ = d©a ; 4827 `´št_¡©us ( r¥ -> ¡©us ); 4828 `´št_afh_mode ( r¥ -> mode ); 4829 } } 4831  $wr™e_afh_as£ssm’t_mode_cmd (cÚ¡ * d©a , ušt8_t size ) 4833 cÚ¡  bt_hci_cmd_wr™e_afh_as£ssm’t_mode * cmd = d©a ; 4835 `´št_afh_mode ( cmd -> mode ); 4836 } } 4838  $»ad_ext_šquœy_»¥Ú£_r¥ (cÚ¡ * d©a , ušt8_t size ) 4840 cÚ¡  bt_hci_r¥_»ad_ext_šquœy_»¥Ú£ * r¥ = d©a ; 4842 `´št_¡©us ( r¥ -> ¡©us ); 4843 `´št_ãc ( r¥ -> ãc ); 4844 `´št_eœ ( r¥ -> d©a , Ô¥->d©a), çl£ ); 4845 } } 4847  $wr™e_ext_šquœy_»¥Ú£_cmd (cÚ¡ * d©a , ušt8_t size ) 4849 cÚ¡  bt_hci_cmd_wr™e_ext_šquœy_»¥Ú£ * cmd = d©a ; 4851 `´št_ãc ( cmd -> ãc ); 4852 `´št_eœ ( cmd -> d©a , (cmd->d©a), çl£ ); 4853 } } 4855  $»äesh_’üy±_key_cmd (cÚ¡ * d©a , ušt8_t size ) 4857 cÚ¡  bt_hci_cmd_»äesh_’üy±_key * cmd = d©a ; 4859 `´št_hªdË ( cmd -> hªdË ); 4860 } } 4862  $»ad_sim¶e_·œšg_mode_r¥ (cÚ¡ * d©a , ušt8_t size ) 4864 cÚ¡  bt_hci_r¥_»ad_sim¶e_·œšg_mode * r¥ = d©a ; 4866 `´št_¡©us ( r¥ -> ¡©us ); 4867 `´št_sim¶e_·œšg_mode ( r¥ -> mode ); 4868 } } 4870  $wr™e_sim¶e_·œšg_mode_cmd (cÚ¡ * d©a , ušt8_t size ) 4872 cÚ¡  bt_hci_cmd_wr™e_sim¶e_·œšg_mode * cmd = d©a ; 4874 `´št_sim¶e_·œšg_mode ( cmd -> mode ); 4875 } } 4877  $»ad_loÿl_oob_d©a_r¥ (cÚ¡ * d©a , ušt8_t size ) 4879 cÚ¡  bt_hci_r¥_»ad_loÿl_oob_d©a * r¥ = d©a ; 4881 `´št_¡©us ( r¥ -> ¡©us ); 4882 `´št_hash_p192 ( r¥ -> hash ); 4883 `´št_¿ndomiz”_p192 ( r¥ -> ¿ndomiz” ); 4884 } } 4886  $»ad_šquœy_»¥_tx_pow”_r¥ (cÚ¡ * d©a , ušt8_t size ) 4888 cÚ¡  bt_hci_r¥_»ad_šquœy_»¥_tx_pow” * r¥ = d©a ; 4890 `´št_¡©us ( r¥ -> ¡©us ); 4891 `´št_pow”_Ëv– ( r¥ -> Ëv– ); 4892 } } 4894  $wr™e_šquœy_tx_pow”_cmd (cÚ¡ * d©a , ušt8_t size ) 4896 cÚ¡  bt_hci_cmd_wr™e_šquœy_tx_pow” * cmd = d©a ; 4898 `´št_pow”_Ëv– ( cmd -> Ëv– ); 4899 } } 4901  $’hªûd_æush_cmd (cÚ¡ * d©a , ušt8_t size ) 4903 cÚ¡  bt_hci_cmd_’hªûd_æush * cmd = d©a ; 4904 cÚ¡ * ¡r ; 4906 `´št_hªdË ( cmd -> hªdË ); 4908  cmd -> ty³ ) { 4910 ¡r = "Automatic flushable only"; 4913 ¡r = "Reserved"; 4917 `´št_f›ld ("Ty³: % (0x%2.2x)", ¡r , cmd -> ty³ ); 4918 } } 4920  $£nd_key´ess_nÙify_cmd (cÚ¡ * d©a , ušt8_t size ) 4922 cÚ¡  bt_hci_cmd_£nd_key´ess_nÙify * cmd = d©a ; 4923 cÚ¡ * ¡r ; 4925 `´št_bdaddr ( cmd -> bdaddr ); 4927  cmd -> ty³ ) { 4929 ¡r = "Passkeyƒntry started"; 4932 ¡r = "Passkey digitƒntered"; 4935 ¡r = "Passkey digitƒrased"; 4938 ¡r = "Passkey cleared"; 4941 ¡r = "Passkeyƒntry completed"; 4944 ¡r = "Reserved"; 4948 `´št_f›ld ("Ty³: % (0x%2.2x)", ¡r , cmd -> ty³ ); 4949 } } 4951  $£nd_key´ess_nÙify_r¥ (cÚ¡ * d©a , ušt8_t size ) 4953 cÚ¡  bt_hci_r¥_£nd_key´ess_nÙify * r¥ = d©a ; 4955 `´št_¡©us ( r¥ -> ¡©us ); 4956 `´št_bdaddr ( r¥ -> bdaddr ); 4957 } } 4959  $£t_ev’t_mask_·ge2_cmd (cÚ¡ * d©a , ušt8_t size ) 4961 cÚ¡  bt_hci_cmd_£t_ev’t_mask_·ge2 * cmd = d©a ; 4963 `´št_ev’t_mask_·ge2 ( cmd -> mask ); 4964 } } 4966  $»ad_loÿtiÚ_d©a_r¥ (cÚ¡ * d©a , ušt8_t size ) 4968 cÚ¡  bt_hci_r¥_»ad_loÿtiÚ_d©a * r¥ = d©a ; 4970 `´št_¡©us ( r¥ -> ¡©us ); 4971 `´št_loÿtiÚ_domaš_aw¬e ( r¥ -> domaš_aw¬e ); 4972 `´št_loÿtiÚ_domaš ( r¥ -> domaš ); 4973 `´št_loÿtiÚ_domaš_ÝtiÚs ( r¥ -> domaš_ÝtiÚs ); 4974 `´št_loÿtiÚ_ÝtiÚs ( r¥ -> ÝtiÚs ); 4975 } } 4977  $wr™e_loÿtiÚ_d©a_cmd (cÚ¡ * d©a , ušt8_t size ) 4979 cÚ¡  bt_hci_cmd_wr™e_loÿtiÚ_d©a * cmd = d©a ; 4981 `´št_loÿtiÚ_domaš_aw¬e ( cmd -> domaš_aw¬e ); 4982 `´št_loÿtiÚ_domaš ( cmd -> domaš ); 4983 `´št_loÿtiÚ_domaš_ÝtiÚs ( cmd -> domaš_ÝtiÚs ); 4984 `´št_loÿtiÚ_ÝtiÚs ( cmd -> ÝtiÚs ); 4985 } } 4987  $»ad_æow_cÚŒÞ_mode_r¥ (cÚ¡ * d©a , ušt8_t size ) 4989 cÚ¡  bt_hci_r¥_»ad_æow_cÚŒÞ_mode * r¥ = d©a ; 4991 `´št_¡©us ( r¥ -> ¡©us ); 4992 `´št_æow_cÚŒÞ_mode ( r¥ -> mode ); 4993 } } 4995  $wr™e_æow_cÚŒÞ_mode_cmd (cÚ¡ * d©a , ušt8_t size ) 4997 cÚ¡  bt_hci_cmd_wr™e_æow_cÚŒÞ_mode * cmd = d©a ; 4999 `´št_æow_cÚŒÞ_mode ( cmd -> mode ); 5000 } } 5002  $»ad_Ë_ho¡_suµÜ‹d_r¥ (cÚ¡ * d©a , ušt8_t size ) 5004 cÚ¡  bt_hci_r¥_»ad_Ë_ho¡_suµÜ‹d * r¥ = d©a ; 5006 `´št_¡©us ( r¥ -> ¡©us ); 5007 `´št_f›ld ("SuµÜ‹d: 0x%2.2x", r¥ -> suµÜ‹d ); 5008 `´št_f›ld ("Simuɪeous: 0x%2.2x", r¥ -> simuɪeous ); 5009 } } 5011  $wr™e_Ë_ho¡_suµÜ‹d_cmd (cÚ¡ * d©a , ušt8_t size ) 5013 cÚ¡  bt_hci_cmd_wr™e_Ë_ho¡_suµÜ‹d * cmd = d©a ; 5015 `´št_f›ld ("SuµÜ‹d: 0x%2.2x", cmd -> suµÜ‹d ); 5016 `´št_f›ld ("Simuɪeous: 0x%2.2x", cmd -> simuɪeous ); 5017 } } 5019  $£t_»£rved_É_addr_cmd (cÚ¡ * d©a , ušt8_t size ) 5021 cÚ¡  bt_hci_cmd_£t_»£rved_É_addr * cmd = d©a ; 5023 `´št_É_addr ( cmd -> É_addr ); 5024 } } 5026  $£t_»£rved_É_addr_r¥ (cÚ¡ * d©a , ušt8_t size ) 5028 cÚ¡  bt_hci_r¥_£t_»£rved_É_addr * r¥ = d©a ; 5030 `´št_¡©us ( r¥ -> ¡©us ); 5031 `´št_É_addr ( r¥ -> É_addr ); 5032 } } 5034  $d–‘e_»£rved_É_addr_cmd (cÚ¡ * d©a , ušt8_t size ) 5036 cÚ¡  bt_hci_cmd_d–‘e_»£rved_É_addr * cmd = d©a ; 5038 `´št_É_addr ( cmd -> É_addr ); 5039 } } 5041  $d–‘e_»£rved_É_addr_r¥ (cÚ¡ * d©a , ušt8_t size ) 5043 cÚ¡  bt_hci_r¥_d–‘e_»£rved_É_addr * r¥ = d©a ; 5045 `´št_¡©us ( r¥ -> ¡©us ); 5046 `´št_É_addr ( r¥ -> É_addr ); 5047 } } 5049  $£t_¦ave_brßdÿ¡_d©a_cmd (cÚ¡ * d©a , ušt8_t size ) 5051 cÚ¡  bt_hci_cmd_£t_¦ave_brßdÿ¡_d©a * cmd = d©a ; 5053 `´št_É_addr ( cmd -> É_addr ); 5054 `´št_brßdÿ¡_äagm’t ( cmd -> äagm’t ); 5055 `´št_f›ld ("L’gth: %d", cmd -> Ëngth ); 5057 ià( size - 3 !ð cmd -> Ëngth ) 5058 `´št_‹xt ( COLOR_ERROR , "invalid data size (%d != %d)", 5059 size - 3, cmd -> Ëngth ); 5061 `·ck‘_hexdump ( d©a + 3, size - 3); 5062 } } 5064  $£t_¦ave_brßdÿ¡_d©a_r¥ (cÚ¡ * d©a , ušt8_t size ) 5066 cÚ¡  bt_hci_r¥_£t_¦ave_brßdÿ¡_d©a * r¥ = d©a ; 5068 `´št_¡©us ( r¥ -> ¡©us ); 5069 `´št_É_addr ( r¥ -> É_addr ); 5070 } } 5072  $»ad_sync_Œaš_·¿ms_r¥ (cÚ¡ * d©a , ušt8_t size ) 5074 cÚ¡  bt_hci_r¥_»ad_sync_Œaš_·¿ms * r¥ = d©a ; 5076 `´št_¡©us ( r¥ -> ¡©us ); 5077 `´št_š‹rv® ( r¥ -> š‹rv® ); 5078 `´št_f›ld ("Timeout: %.3f msec (0x%8.8x)", 5079 `Ë32_to_ýu ( r¥ -> timeout ) * 0.625, 5080 `Ë32_to_ýu ( r¥ -> timeout )); 5081 `´št_f›ld ("S”viû d©a: 0x%2.2x", r¥ -> £rviû_d©a ); 5082 } } 5084  $wr™e_sync_Œaš_·¿ms_cmd (cÚ¡ * d©a , ušt8_t size ) 5086 cÚ¡  bt_hci_cmd_wr™e_sync_Œaš_·¿ms * cmd = d©a ; 5088 `´št_¦Ù_625 ("Mš iÁ”v®", cmd -> mš_š‹rv® ); 5089 `´št_¦Ù_625 ("Max iÁ”v®", cmd -> max_š‹rv® ); 5090 `´št_f›ld ("Timeout: %.3f msec (0x%8.8x)", 5091 `Ë32_to_ýu ( cmd -> timeout ) * 0.625, 5092 `Ë32_to_ýu ( cmd -> timeout )); 5093 `´št_f›ld ("S”viû d©a: 0x%2.2x", cmd -> £rviû_d©a ); 5094 } } 5096  $wr™e_sync_Œaš_·¿ms_r¥ (cÚ¡ * d©a , ušt8_t size ) 5098 cÚ¡  bt_hci_r¥_wr™e_sync_Œaš_·¿ms * r¥ = d©a ; 5100 `´št_¡©us ( r¥ -> ¡©us ); 5101 `´št_š‹rv® ( r¥ -> š‹rv® ); 5102 } } 5104  $»ad_£cu»_cÚn_suµÜt_r¥ (cÚ¡ * d©a , ušt8_t size ) 5106 cÚ¡  bt_hci_r¥_»ad_£cu»_cÚn_suµÜt * r¥ = d©a ; 5108 `´št_¡©us ( r¥ -> ¡©us ); 5109 `´št_£cu»_cÚn_suµÜt ( r¥ -> suµÜt ); 5110 } } 5112  $wr™e_£cu»_cÚn_suµÜt_cmd (cÚ¡ * d©a , ušt8_t size ) 5114 cÚ¡  bt_hci_cmd_wr™e_£cu»_cÚn_suµÜt * cmd = d©a ; 5116 `´št_£cu»_cÚn_suµÜt ( cmd -> suµÜt ); 5117 } } 5119  $»ad_auth_·ylßd_timeout_cmd (cÚ¡ * d©a , ušt8_t size ) 5121 cÚ¡  bt_hci_cmd_»ad_auth_·ylßd_timeout * cmd = d©a ; 5123 `´št_hªdË ( cmd -> hªdË ); 5124 } } 5126  $»ad_auth_·ylßd_timeout_r¥ (cÚ¡ * d©a , ušt8_t size ) 5128 cÚ¡  bt_hci_r¥_»ad_auth_·ylßd_timeout * r¥ = d©a ; 5130 `´št_¡©us ( r¥ -> ¡©us ); 5131 `´št_hªdË ( r¥ -> hªdË ); 5132 `´št_auth_·ylßd_timeout ( r¥ -> timeout ); 5133 } } 5135  $wr™e_auth_·ylßd_timeout_cmd (cÚ¡ * d©a , ušt8_t size ) 5137 cÚ¡  bt_hci_cmd_wr™e_auth_·ylßd_timeout * cmd = d©a ; 5139 `´št_hªdË ( cmd -> hªdË ); 5140 `´št_auth_·ylßd_timeout ( cmd -> timeout ); 5141 } } 5143  $wr™e_auth_·ylßd_timeout_r¥ (cÚ¡ * d©a , ušt8_t size ) 5145 cÚ¡  bt_hci_r¥_wr™e_auth_·ylßd_timeout * r¥ = d©a ; 5147 `´št_¡©us ( r¥ -> ¡©us ); 5148 `´št_hªdË ( r¥ -> hªdË ); 5149 } } 5151  $»ad_loÿl_oob_ext_d©a_r¥ (cÚ¡ * d©a , ušt8_t size ) 5153 cÚ¡  bt_hci_r¥_»ad_loÿl_oob_ext_d©a * r¥ = d©a ; 5155 `´št_¡©us ( r¥ -> ¡©us ); 5156 `´št_hash_p192 ( r¥ -> hash192 ); 5157 `´št_¿ndomiz”_p192 ( r¥ -> ¿ndomiz”192 ); 5158 `´št_hash_p256 ( r¥ -> hash256 ); 5159 `´št_¿ndomiz”_p256 ( r¥ -> ¿ndomiz”256 ); 5160 } } 5162  $»ad_loÿl_v”siÚ_r¥ (cÚ¡ * d©a , ušt8_t size ) 5164 cÚ¡  bt_hci_r¥_»ad_loÿl_v”siÚ * r¥ = d©a ; 5166 `´št_¡©us ( r¥ -> ¡©us ); 5167 `´št_hci_v”siÚ ( r¥ -> hci_v” ,„¥-> hci_»v ); 5169  šdex_li¡ [ šdex_cu¼’t ]. ty³ ) { 5170  HCI_BREDR : 5171 `´št_lmp_v”siÚ ( r¥ -> lmp_v” ,„¥-> lmp_subv” ); 5173  HCI_AMP : 5174 `´št_·l_v”siÚ ( r¥ -> lmp_v” ,„¥-> lmp_subv” ); 5178 `´št_mªuçùu»r ( r¥ -> mªuçùu»r ); 5179 } } 5181  $»ad_loÿl_commªds_r¥ (cÚ¡ * d©a , ušt8_t size ) 5183 cÚ¡  bt_hci_r¥_»ad_loÿl_commªds * r¥ = d©a ; 5185 `´št_¡©us ( r¥ -> ¡©us ); 5186 `´št_commªds ( r¥ -> commªds ); 5187 } } 5189  $»ad_loÿl_ã©u»s_r¥ (cÚ¡ * d©a , ušt8_t size ) 5191 cÚ¡  bt_hci_r¥_»ad_loÿl_ã©u»s * r¥ = d©a ; 5193 `´št_¡©us ( r¥ -> ¡©us ); 5194 `´št_ã©u»s (0, r¥ -> ã©u»s , 0x00); 5195 } } 5197  $»ad_loÿl_ext_ã©u»s_cmd (cÚ¡ * d©a , ušt8_t size ) 5199 cÚ¡  bt_hci_cmd_»ad_loÿl_ext_ã©u»s * cmd = d©a ; 5201 `´št_f›ld ("Page: %d", cmd -> ·ge ); 5202 } } 5204  $»ad_loÿl_ext_ã©u»s_r¥ (cÚ¡ * d©a , ušt8_t size ) 5206 cÚ¡  bt_hci_r¥_»ad_loÿl_ext_ã©u»s * r¥ = d©a ; 5208 `´št_¡©us ( r¥ -> ¡©us ); 5209 `´št_f›ld ("Page: %d/%d", r¥ -> ·ge ,„¥-> max_·ge ); 5210 `´št_ã©u»s ( r¥ -> ·ge ,„¥-> ã©u»s , 0x00); 5211 } } 5213  $»ad_bufãr_size_r¥ (cÚ¡ * d©a , ušt8_t size ) 5215 cÚ¡  bt_hci_r¥_»ad_bufãr_size * r¥ = d©a ; 5217 `´št_¡©us ( r¥ -> ¡©us ); 5218 `´št_f›ld ("ACL MTU: %-4d ACL max…acket: %d", 5219 `Ë16_to_ýu ( r¥ -> aþ_mtu ), 5220 `Ë16_to_ýu ( r¥ -> aþ_max_pkt )); 5221 `´št_f›ld ("SCO MTU: %-4d SCO max…acket: %d", 5222 r¥ -> sco_mtu , 5223 `Ë16_to_ýu ( r¥ -> sco_max_pkt )); 5224 } } 5226  $»ad_couÁry_code_r¥ (cÚ¡ * d©a , ušt8_t size ) 5228 cÚ¡  bt_hci_r¥_»ad_couÁry_code * r¥ = d©a ; 5229 cÚ¡ * ¡r ; 5231 `´št_¡©us ( r¥ -> ¡©us ); 5233  r¥ -> code ) { 5235 ¡r = "North America, Europe*, Japan"; 5238 ¡r = "France"; 5241 ¡r = "Reserved"; 5245 `´št_f›ld ("CouÁry code: % (0x%2.2x)", ¡r , r¥ -> code ); 5246 } } 5248  $»ad_bd_addr_r¥ (cÚ¡ * d©a , ušt8_t size ) 5250 cÚ¡  bt_hci_r¥_»ad_bd_addr * r¥ = d©a ; 5252 `´št_¡©us ( r¥ -> ¡©us ); 5253 `´št_bdaddr ( r¥ -> bdaddr ); 5254 } } 5256  $»ad_d©a_block_size_r¥ (cÚ¡ * d©a , ušt8_t size ) 5258 cÚ¡  bt_hci_r¥_»ad_d©a_block_size * r¥ = d©a ; 5260 `´št_¡©us ( r¥ -> ¡©us ); 5261 `´št_f›ld ("Max ACL†’gth: %d", `Ë16_to_ýu ( r¥ -> max_aþ_Ën )); 5262 `´št_f›ld ("Block†’gth: %d", `Ë16_to_ýu ( r¥ -> block_Ën )); 5263 `´št_f›ld ("Num blocks: %d", `Ë16_to_ýu ( r¥ -> num_blocks )); 5264 } } 5266  $»ad_loÿl_codecs_r¥ (cÚ¡ * d©a , ušt8_t size ) 5268 cÚ¡  bt_hci_r¥_»ad_loÿl_codecs * r¥ = d©a ; 5269 ušt8_t i , num_vnd_codecs ; 5271 `´št_¡©us ( r¥ -> ¡©us ); 5272 `´št_f›ld ("Numb” oàsuµÜ‹d codecs: %d", r¥ -> num_codecs ); 5274  i = 0; i < r¥ -> num_codecs ; i++) 5275 `´št_codec (" Codec", r¥ -> codec [ i ]); 5277 num_vnd_codecs = r¥ -> codec [r¥-> num_codecs ]; 5279 `´št_f›ld ("Numb” oàv’dÜ codecs: %d", num_vnd_codecs ); 5281 `·ck‘_hexdump ( d©a + r¥ -> num_codecs + 3, 5282 size - r¥ -> num_codecs - 3); 5283 } } 5285  $»ad_çžed_cÚù_couÁ”_cmd (cÚ¡ * d©a , ušt8_t size ) 5287 cÚ¡  bt_hci_cmd_»ad_çžed_cÚù_couÁ” * cmd = d©a ; 5289 `´št_hªdË ( cmd -> hªdË ); 5290 } } 5292  $»ad_çžed_cÚù_couÁ”_r¥ (cÚ¡ * d©a , ušt8_t size ) 5294 cÚ¡  bt_hci_r¥_»ad_çžed_cÚù_couÁ” * r¥ = d©a ; 5296 `´št_¡©us ( r¥ -> ¡©us ); 5297 `´št_hªdË ( r¥ -> hªdË ); 5298 `´št_f›ld ("CouÁ”: %u", `Ë16_to_ýu ( r¥ -> couÁ” )); 5299 } } 5301  $»£t_çžed_cÚù_couÁ”_cmd (cÚ¡ * d©a , ušt8_t size ) 5303 cÚ¡  bt_hci_cmd_»£t_çžed_cÚù_couÁ” * cmd = d©a ; 5305 `´št_hªdË ( cmd -> hªdË ); 5306 } } 5308  $»£t_çžed_cÚù_couÁ”_r¥ (cÚ¡ * d©a , ušt8_t size ) 5310 cÚ¡  bt_hci_r¥_»£t_çžed_cÚù_couÁ” * r¥ = d©a ; 5312 `´št_¡©us ( r¥ -> ¡©us ); 5313 `´št_hªdË ( r¥ -> hªdË ); 5314 } } 5316  $»ad_lšk_qu®™y_cmd (cÚ¡ * d©a , ušt8_t size ) 5318 cÚ¡  bt_hci_cmd_»ad_lšk_qu®™y * cmd = d©a ; 5320 `´št_hªdË ( cmd -> hªdË ); 5321 } } 5323  $»ad_lšk_qu®™y_r¥ (cÚ¡ * d©a , ušt8_t size ) 5325 cÚ¡  bt_hci_r¥_»ad_lšk_qu®™y * r¥ = d©a ; 5327 `´št_¡©us ( r¥ -> ¡©us ); 5328 `´št_hªdË ( r¥ -> hªdË ); 5329 `´št_f›ld ("Lšk qu®™y: 0x%2.2x", r¥ -> lšk_qu®™y ); 5330 } } 5332  $»ad_rssi_cmd (cÚ¡ * d©a , ušt8_t size ) 5334 cÚ¡  bt_hci_cmd_»ad_rssi * cmd = d©a ; 5336 `´št_hªdË ( cmd -> hªdË ); 5337 } } 5339  $»ad_rssi_r¥ (cÚ¡ * d©a , ušt8_t size ) 5341 cÚ¡  bt_hci_r¥_»ad_rssi * r¥ = d©a ; 5343 `´št_¡©us ( r¥ -> ¡©us ); 5344 `´št_hªdË ( r¥ -> hªdË ); 5345 `´št_rssi ( r¥ -> rssi ); 5346 } } 5348  $»ad_afh_chªÃl_m­_cmd (cÚ¡ * d©a , ušt8_t size ) 5350 cÚ¡  bt_hci_cmd_»ad_afh_chªÃl_m­ * cmd = d©a ; 5352 `´št_hªdË ( cmd -> hªdË ); 5353 } } 5355  $»ad_afh_chªÃl_m­_r¥ (cÚ¡ * d©a , ušt8_t size ) 5357 cÚ¡  bt_hci_r¥_»ad_afh_chªÃl_m­ * r¥ = d©a ; 5359 `´št_¡©us ( r¥ -> ¡©us ); 5360 `´št_hªdË ( r¥ -> hªdË ); 5361 `´št_afh_mode ( r¥ -> mode ); 5362 `´št_chªÃl_m­ ( r¥ -> m­ ); 5363 } } 5365  $»ad_þock_cmd (cÚ¡ * d©a , ušt8_t size ) 5367 cÚ¡  bt_hci_cmd_»ad_þock * cmd = d©a ; 5369 `´št_hªdË ( cmd -> hªdË ); 5370 `´št_þock_ty³ ( cmd -> ty³ ); 5371 } } 5373  $»ad_þock_r¥ (cÚ¡ * d©a , ušt8_t size ) 5375 cÚ¡  bt_hci_r¥_»ad_þock * r¥ = d©a ; 5377 `´št_¡©us ( r¥ -> ¡©us ); 5378 `´št_hªdË ( r¥ -> hªdË ); 5379 `´št_þock ( r¥ -> þock ); 5380 `´št_þock_accu¿cy ( r¥ -> accu¿cy ); 5381 } } 5383  $»ad_’üy±_key_size_cmd (cÚ¡ * d©a , ušt8_t size ) 5385 cÚ¡  bt_hci_cmd_»ad_’üy±_key_size * cmd = d©a ; 5387 `´št_hªdË ( cmd -> hªdË ); 5388 } } 5390  $»ad_’üy±_key_size_r¥ (cÚ¡ * d©a , ušt8_t size ) 5392 cÚ¡  bt_hci_r¥_»ad_’üy±_key_size * r¥ = d©a ; 5394 `´št_¡©us ( r¥ -> ¡©us ); 5395 `´št_hªdË ( r¥ -> hªdË ); 5396 `´št_key_size ( r¥ -> key_size ); 5397 } } 5399  $»ad_loÿl_amp_šfo_r¥ (cÚ¡ * d©a , ušt8_t size ) 5401 cÚ¡  bt_hci_r¥_»ad_loÿl_amp_šfo * r¥ = d©a ; 5402 cÚ¡ * ¡r ; 5404 `´št_¡©us ( r¥ -> ¡©us ); 5405 `´št_amp_¡©us ( r¥ -> amp_¡©us ); 5407 `´št_f›ld ("TÙ® bªdwidth: %d kbps", `Ë32_to_ýu ( r¥ -> tÙ®_bw )); 5408 `´št_f›ld ("Max guaranteed bandwidth: %d kbps", 5409 `Ë32_to_ýu ( r¥ -> max_bw )); 5410 `´št_f›ld ("Mš†©’cy: %d", `Ë32_to_ýu ( r¥ -> mš_Ï‹ncy )); 5411 `´št_f›ld ("Max PDU size: %d", `Ë32_to_ýu ( r¥ -> max_pdu )); 5413  r¥ -> amp_ty³ ) { 5415 ¡r = "Primary BR/EDR Controller"; 5418 ¡r = "802.11 AMP Controller"; 5421 ¡r = "Reserved"; 5425 `´št_f›ld ("CÚŒÞ˸ty³: % (0x%2.2x)", ¡r , r¥ -> amp_ty³ ); 5427 `´št_f›ld ("PAL c­abž™›s: 0x%4.4x", `Ë16_to_ýu ( r¥ -> ·l_ÿp )); 5428 `´št_f›ld ("Max ASSOC†’gth: %d", `Ë16_to_ýu ( r¥ -> max_assoc_Ën )); 5429 `´št_f›ld ("Max flushimeout: %d", `Ë32_to_ýu ( r¥ -> max_æush_to )); 5430 `´št_f›ld ("Bestƒffort flushimeout: %d", 5431 `Ë32_to_ýu ( r¥ -> be_æush_to )); 5432 } } 5434  $»ad_loÿl_amp_assoc_cmd (cÚ¡ * d©a , ušt8_t size ) 5436 cÚ¡  bt_hci_cmd_»ad_loÿl_amp_assoc * cmd = d©a ; 5438 `´št_phy_hªdË ( cmd -> phy_hªdË ); 5439 `´št_f›ld ("L’gth sØçr: %d", `Ë16_to_ýu ( cmd -> Ën_so_çr )); 5440 `´št_f›ld ("Max ASSOC†’gth: %d", `Ë16_to_ýu ( cmd -> max_assoc_Ën )); 5441 } } 5443  $»ad_loÿl_amp_assoc_r¥ (cÚ¡ * d©a , ušt8_t size ) 5445 cÚ¡  bt_hci_r¥_»ad_loÿl_amp_assoc * r¥ = d©a ; 5447 `´št_¡©us ( r¥ -> ¡©us ); 5448 `´št_phy_hªdË ( r¥ -> phy_hªdË ); 5449 `´št_f›ld ("Remaining ASSOC†ength: %d", 5450 `Ë16_to_ýu ( r¥ -> »maš_assoc_Ën )); 5452 `·ck‘_hexdump ( d©a + 4, size - 4); 5453 } } 5455  $wr™e_»mÙe_amp_assoc_cmd (cÚ¡ * d©a , ušt8_t size ) 5457 cÚ¡  bt_hci_cmd_wr™e_»mÙe_amp_assoc * cmd = d©a ; 5459 `´št_phy_hªdË ( cmd -> phy_hªdË ); 5460 `´št_f›ld ("L’gth sØçr: %d", `Ë16_to_ýu ( cmd -> Ën_so_çr )); 5461 `´št_f›ld ("Remaining ASSOC†ength: %d", 5462 `Ë16_to_ýu ( cmd -> »maš_assoc_Ën )); 5464 `·ck‘_hexdump ( d©a + 5, size - 5); 5465 } } 5467  $wr™e_»mÙe_amp_assoc_r¥ (cÚ¡ * d©a , ušt8_t size ) 5469 cÚ¡  bt_hci_r¥_wr™e_»mÙe_amp_assoc * r¥ = d©a ; 5471 `´št_¡©us ( r¥ -> ¡©us ); 5472 `´št_phy_hªdË ( r¥ -> phy_hªdË ); 5473 } } 5475  $g‘_mws_Œª¥Üt_cÚfig_r¥ (cÚ¡ * d©a , ušt8_t size ) 5477 cÚ¡  bt_hci_r¥_g‘_mws_Œª¥Üt_cÚfig * r¥ = d©a ; 5478 ušt8_t sum_baud_¿‹s = 0; 5479  i ; 5481 `´št_¡©us ( r¥ -> ¡©us ); 5482 `´št_f›ld ("Numb” oàŒª¥Üts: %d", r¥ -> num_Œª¥Üts ); 5484  i = 0; i < r¥ -> num_Œª¥Üts ; i++) { 5485 ušt8_t Œª¥Üt = r¥ ->transport[0]; 5486 ušt8_t num_baud_¿‹s = r¥ -> Œª¥Üt [1]; 5487 cÚ¡ * ¡r ; 5489  Œª¥Üt ) { 5491 ¡r = "Disbabled"; 5494 ¡r = "WCI-1"; 5497 ¡r = "WCI-2"; 5500 ¡r = "Reserved"; 5504 `´št_f›ld (" T¿n¥ÜˆÏy”: % (0x%2.2x)", ¡r , Œª¥Üt ); 5505 `´št_f›ld (" Numb” oàbaud„©es: %d", num_baud_¿‹s ); 5507 sum_baud_¿‹s +ð num_baud_¿‹s ; 5510 `´št_f›ld ("Baud„©li¡: %uƒÁr%s", sum_baud_¿‹s , 5511 sum_baud_¿‹s == 1 ? "y" : "ies"); 5513  i = 0; i < sum_baud_¿‹s ; i++) { 5514 ušt32_t to_baud_¿‹ , äom_baud_¿‹ ; 5516 to_baud_¿‹ = `g‘_Ë32 ( d©a + 2 + 5517 r¥ -> num_Œª¥Üts * 2 + i * 4); 5518 äom_baud_¿‹ = `g‘_Ë32 ( d©a + 2 + 5519 r¥ -> num_Œª¥Üts * 2 + 5520 sum_baud_¿‹s * 4 + i * 4); 5522 `´št_f›ld (" Blu‘oÙhØMWS: %d", to_baud_¿‹ ); 5523 `´št_f›ld (" MWSØBlu‘oÙh: %d", äom_baud_¿‹ ); 5526 `·ck‘_hexdump ( d©a + 2 + r¥ -> num_Œª¥Üts * 2 + sum_baud_¿‹s * 8, 5527 size - 2 - r¥ -> num_Œª¥Üts * 2 - sum_baud_¿‹s * 8); 5528 } } 5530  $£t_Œigg”ed_þock_ÿ±u»_cmd (cÚ¡ * d©a , ušt8_t size ) 5532 cÚ¡  bt_hci_cmd_£t_Œigg”ed_þock_ÿ±u» * cmd = d©a ; 5533 cÚ¡ * ¡r ; 5535 `´št_hªdË ( cmd -> hªdË ); 5537  cmd -> ’abË ) { 5539 ¡r = "Disabled"; 5542 ¡r = "Enabled"; 5545 ¡r = "Reserved"; 5549 `´št_f›ld ("C­tu»: % (0x%2.2x)", ¡r , cmd -> ’abË ); 5551 `´št_þock_ty³ ( cmd -> ty³ ); 5552 `´št_Ío_®lowed ( cmd -> Ío_®lowed ); 5553 `´št_f›ld ("Clock c­tu» tØfž‹r: %u", cmd -> num_fž‹r ); 5554 } } 5556  $wr™e_s¥_debug_mode_cmd (cÚ¡ * d©a , ušt8_t size ) 5558 cÚ¡  bt_hci_cmd_wr™e_s¥_debug_mode * cmd = d©a ; 5560 `´št_s¥_debug_mode ( cmd -> mode ); 5561 } } 5563  $Ë_£t_ev’t_mask_cmd (cÚ¡ * d©a , ušt8_t size ) 5565 cÚ¡  bt_hci_cmd_Ë_£t_ev’t_mask * cmd = d©a ; 5567 `´št_ev’t_mask_Ë ( cmd -> mask ); 5568 } } 5570  $Ë_»ad_bufãr_size_r¥ (cÚ¡ * d©a , ušt8_t size ) 5572 cÚ¡  bt_hci_r¥_Ë_»ad_bufãr_size * r¥ = d©a ; 5574 `´št_¡©us ( r¥ -> ¡©us ); 5575 `´št_f›ld ("D©¨·ck‘†’gth: %d", `Ë16_to_ýu ( r¥ -> Ë_mtu )); 5576 `´št_f›ld ("Num d©¨·ck‘s: %d", r¥ -> Ë_max_pkt ); 5577 } } 5579  $Ë_»ad_loÿl_ã©u»s_r¥ (cÚ¡ * d©a , ušt8_t size ) 5581 cÚ¡  bt_hci_r¥_Ë_»ad_loÿl_ã©u»s * r¥ = d©a ; 5583 `´št_¡©us ( r¥ -> ¡©us ); 5584 `´št_ã©u»s (0, r¥ -> ã©u»s , 0x01); 5585 } } 5587  $Ë_£t_¿ndom_add»ss_cmd (cÚ¡ * d©a , ušt8_t size ) 5589 cÚ¡  bt_hci_cmd_Ë_£t_¿ndom_add»ss * cmd = d©a ; 5591 `´št_addr ("Add»ss", cmd -> addr , 0x01); 5592 } } 5594  $Ë_£t_adv_·¿m‘”s_cmd (cÚ¡ * d©a , ušt8_t size ) 5596 cÚ¡  bt_hci_cmd_Ë_£t_adv_·¿m‘”s * cmd = d©a ; 5597 cÚ¡ * ¡r ; 5599 `´št_¦Ù_625 ("Mš‡dv”tisšg iÁ”v®", cmd -> mš_š‹rv® ); 5600 `´št_¦Ù_625 ("Max‡dv”tisšg iÁ”v®", cmd -> max_š‹rv® ); 5602  cmd -> ty³ ) { 5604 ¡r = "Connectable undirected - ADV_IND"; 5607 ¡r = "Connectable directed - ADV_DIRECT_IND (high duty cycle)"; 5610 ¡r = "Scannable undirected - ADV_SCAN_IND"; 5613 ¡r = "Non connectable undirect - ADV_NONCONN_IND"; 5616 ¡r = "Connectable directed - ADV_DIRECT_IND (low duty cycle)"; 5619 ¡r = "Reserved"; 5623 `´št_f›ld ("Ty³: % (0x%2.2x)", ¡r , cmd -> ty³ ); 5625 `´št_own_addr_ty³ ( cmd -> own_addr_ty³ ); 5626 `´št_addr_ty³ ("Dœeù‡dd»s ty³", cmd -> dœeù_addr_ty³ ); 5627 `´št_addr ("Dœeù‡dd»ss", cmd -> dœeù_addr , cmd-> dœeù_addr_ty³ ); 5629  cmd -> chªÃl_m­ ) { 5631 ¡r = "37"; 5634 ¡r = "38"; 5637 ¡r = "37, 38"; 5640 ¡r = "39"; 5643 ¡r = "37, 39"; 5646 ¡r = "38, 39"; 5649 ¡r = "37, 38, 39"; 5652 ¡r = "Reserved"; 5656 `´št_f›ld ("ChªÃÈm­: % (0x%2.2x)", ¡r , cmd -> chªÃl_m­ ); 5658  cmd -> fž‹r_pÞicy ) { 5660 ¡r = "Allow Scan Request from Any, " 5664 ¡r = "Allow Scan Request from White List Only, " 5668 ¡r = "Allow Scan Request from Any, " 5672 ¡r = "Allow Scan Request from White List Only, " 5676 ¡r = "Reserved"; 5680 `´št_f›ld ("Fž‹¸pÞicy: % (0x%2.2x)", ¡r , cmd -> fž‹r_pÞicy ); 5681 } } 5683  $Ë_»ad_adv_tx_pow”_r¥ (cÚ¡ * d©a , ušt8_t size ) 5685 cÚ¡  bt_hci_r¥_Ë_»ad_adv_tx_pow” * r¥ = d©a ; 5687 `´št_¡©us ( r¥ -> ¡©us ); 5688 `´št_pow”_Ëv– ( r¥ -> Ëv– ); 5689 } } 5691  $Ë_£t_adv_d©a_cmd (cÚ¡ * d©a , ušt8_t size ) 5693 cÚ¡  bt_hci_cmd_Ë_£t_adv_d©a * cmd = d©a ; 5695 `´št_f›ld ("L’gth: %d", cmd -> Ën ); 5696 `´št_eœ ( cmd -> d©a , cmd-> Ën , Œue ); 5697 } } 5699  $Ë_£t_sÿn_r¥_d©a_cmd (cÚ¡ * d©a , ušt8_t size ) 5701 cÚ¡  bt_hci_cmd_Ë_£t_sÿn_r¥_d©a * cmd = d©a ; 5703 `´št_f›ld ("L’gth: %d", cmd -> Ën ); 5704 `´št_eœ ( cmd -> d©a , cmd-> Ën , Œue ); 5705 } } 5707  $Ë_£t_adv_’abË_cmd (cÚ¡ * d©a , ušt8_t size ) 5709 cÚ¡  bt_hci_cmd_Ë_£t_adv_’abË * cmd = d©a ; 5710 cÚ¡ * ¡r ; 5712  cmd -> ’abË ) { 5714 ¡r = "Disabled"; 5717 ¡r = "Enabled"; 5720 ¡r = "Reserved"; 5724 `´št_f›ld ("Adv”tisšg: % (0x%2.2x)", ¡r , cmd -> ’abË ); 5725 } } 5727  $Ë_£t_sÿn_·¿m‘”s_cmd (cÚ¡ * d©a , ušt8_t size ) 5729 cÚ¡  bt_hci_cmd_Ë_£t_sÿn_·¿m‘”s * cmd = d©a ; 5730 cÚ¡ * ¡r ; 5732  cmd -> ty³ ) { 5734 ¡r = "Passive"; 5737 ¡r = "Active"; 5740 ¡r = "Reserved"; 5744 `´št_f›ld ("Ty³: % (0x%2.2x)", ¡r , cmd -> ty³ ); 5746 `´št_š‹rv® ( cmd -> š‹rv® ); 5747 `´št_wšdow ( cmd -> wšdow ); 5748 `´št_own_addr_ty³ ( cmd -> own_addr_ty³ ); 5750  cmd -> fž‹r_pÞicy ) { 5752 ¡r = "Accept‡ll‡dvertisement"; 5755 ¡r = "Ignore‚ot in white†ist"; 5758 ¡r = "Reserved"; 5762 `´št_f›ld ("Fž‹¸pÞicy: % (0x%2.2x)", ¡r , cmd -> fž‹r_pÞicy ); 5763 } } 5765  $Ë_£t_sÿn_’abË_cmd (cÚ¡ * d©a , ušt8_t size ) 5767 cÚ¡  bt_hci_cmd_Ë_£t_sÿn_’abË * cmd = d©a ; 5768 cÚ¡ * ¡r ; 5770  cmd -> ’abË ) { 5772 ¡r = "Disabled"; 5775 ¡r = "Enabled"; 5778 ¡r = "Reserved"; 5782 `´št_f›ld ("Sÿšg: % (0x%2.2x)", ¡r , cmd -> ’abË ); 5784  cmd -> fž‹r_dup ) { 5786 ¡r = "Disabled"; 5789 ¡r = "Enabled"; 5792 ¡r = "Reserved"; 5796 `´št_f›ld ("Fž‹¸du¶iÿ‹s: % (0x%2.2x)", ¡r , cmd -> fž‹r_dup ); 5797 } } 5799  $Ë_ü—‹_cÚn_cmd (cÚ¡ * d©a , ušt8_t size ) 5801 cÚ¡  bt_hci_cmd_Ë_ü—‹_cÚn * cmd = d©a ; 5802 cÚ¡ * ¡r ; 5804 `´št_¦Ù_625 ("SÿÀš‹rv®", cmd -> sÿn_š‹rv® ); 5805 `´št_¦Ù_625 ("SÿÀwšdow", cmd -> sÿn_wšdow ); 5807  cmd -> fž‹r_pÞicy ) { 5809 ¡r = "White†ist is‚ot used"; 5812 ¡r = "White†ist is used"; 5815 ¡r = "Reserved"; 5819 `´št_f›ld ("Fž‹¸pÞicy: % (0x%2.2x)", ¡r , cmd -> fž‹r_pÞicy ); 5821 `´št_³”_addr_ty³ ("P“¸add»s ty³", cmd -> ³”_addr_ty³ ); 5822 `´št_addr ("P“¸add»ss", cmd -> ³”_addr , cmd-> ³”_addr_ty³ ); 5823 `´št_own_addr_ty³ ( cmd -> own_addr_ty³ ); 5825 `´št_¦Ù_125 ("Mš cÚÃùiÚ iÁ”v®", cmd -> mš_š‹rv® ); 5826 `´št_¦Ù_125 ("Max cÚÃùiÚ iÁ”v®", cmd -> max_š‹rv® ); 5827 `´št_f›ld ("CÚÃùiÚ†©’cy: 0x%4.4x", `Ë16_to_ýu ( cmd -> Ï‹ncy )); 5828 `´št_f›ld ("Supervisionimeout: %d msec (0x%4.4x)", 5829 `Ë16_to_ýu ( cmd -> supv_timeout ) * 10, 5830 `Ë16_to_ýu ( cmd -> supv_timeout )); 5831 `´št_¦Ù_625 ("Mš cÚÃùiÚ†’gth", cmd -> mš_Ëngth ); 5832 `´št_¦Ù_625 ("Max cÚÃùiÚ†’gth", cmd -> max_Ëngth ); 5833 } } 5835  $Ë_»ad_wh™e_li¡_size_r¥ (cÚ¡ * d©a , ušt8_t size ) 5837 cÚ¡  bt_hci_r¥_Ë_»ad_wh™e_li¡_size * r¥ = d©a ; 5839 `´št_¡©us ( r¥ -> ¡©us ); 5840 `´št_f›ld ("Size: %u", r¥ -> size ); 5841 } } 5843  $Ë_add_to_wh™e_li¡_cmd (cÚ¡ * d©a , ušt8_t size ) 5845 cÚ¡  bt_hci_cmd_Ë_add_to_wh™e_li¡ * cmd = d©a ; 5847 `´št_addr_ty³ ("Add»s ty³", cmd -> addr_ty³ ); 5848 `´št_addr ("Add»ss", cmd -> addr , cmd-> addr_ty³ ); 5849 } } 5851  $Ë_»move_äom_wh™e_li¡_cmd (cÚ¡ * d©a , ušt8_t size ) 5853 cÚ¡  bt_hci_cmd_Ë_»move_äom_wh™e_li¡ * cmd = d©a ; 5855 `´št_addr_ty³ ("Add»s ty³", cmd -> addr_ty³ ); 5856 `´št_addr ("Add»ss", cmd -> addr , cmd-> addr_ty³ ); 5857 } } 5859  $Ë_cÚn_upd©e_cmd (cÚ¡ * d©a , ušt8_t size ) 5861 cÚ¡  bt_hci_cmd_Ë_cÚn_upd©e * cmd = d©a ; 5863 `´št_hªdË ( cmd -> hªdË ); 5864 `´št_¦Ù_125 ("Mš cÚÃùiÚ iÁ”v®", cmd -> mš_š‹rv® ); 5865 `´št_¦Ù_125 ("Max cÚÃùiÚ iÁ”v®", cmd -> max_š‹rv® ); 5866 `´št_f›ld ("CÚÃùiÚ†©’cy: 0x%4.4x", `Ë16_to_ýu ( cmd -> Ï‹ncy )); 5867 `´št_f›ld ("Supervisionimeout: %d msec (0x%4.4x)", 5868 `Ë16_to_ýu ( cmd -> supv_timeout ) * 10, 5869 `Ë16_to_ýu ( cmd -> supv_timeout )); 5870 `´št_¦Ù_625 ("Mš cÚÃùiÚ†’gth", cmd -> mš_Ëngth ); 5871 `´št_¦Ù_625 ("Max cÚÃùiÚ†’gth", cmd -> max_Ëngth ); 5872 } } 5874  $Ë_£t_ho¡_þassifiÿtiÚ_cmd (cÚ¡ * d©a , ušt8_t size ) 5876 cÚ¡  bt_hci_cmd_Ë_£t_ho¡_þassifiÿtiÚ * cmd = d©a ; 5878 `´št_Ë_chªÃl_m­ ( cmd -> m­ ); 5879 } } 5881  $Ë_»ad_chªÃl_m­_cmd (cÚ¡ * d©a , ušt8_t size ) 5883 cÚ¡  bt_hci_cmd_Ë_»ad_chªÃl_m­ * cmd = d©a ; 5885 `´št_hªdË ( cmd -> hªdË ); 5886 } } 5888  $Ë_»ad_chªÃl_m­_r¥ (cÚ¡ * d©a , ušt8_t size ) 5890 cÚ¡  bt_hci_r¥_Ë_»ad_chªÃl_m­ * r¥ = d©a ; 5892 `´št_¡©us ( r¥ -> ¡©us ); 5893 `´št_hªdË ( r¥ -> hªdË ); 5894 `´št_Ë_chªÃl_m­ ( r¥ -> m­ ); 5895 } } 5897  $Ë_»ad_»mÙe_ã©u»s_cmd (cÚ¡ * d©a , ušt8_t size ) 5899 cÚ¡  bt_hci_cmd_Ë_»ad_»mÙe_ã©u»s * cmd = d©a ; 5901 `´št_hªdË ( cmd -> hªdË ); 5902 } } 5904  $Ë_’üy±_cmd (cÚ¡ * d©a , ušt8_t size ) 5906 cÚ¡  bt_hci_cmd_Ë_’üy± * cmd = d©a ; 5908 `´št_key ("Key", cmd -> key ); 5909 `´št_key ("PÏš‹xˆd©a", cmd -> ¶aš‹xt ); 5910 } } 5912  $Ë_’üy±_r¥ (cÚ¡ * d©a , ušt8_t size ) 5914 cÚ¡  bt_hci_r¥_Ë_’üy± * r¥ = d©a ; 5916 `´št_¡©us ( r¥ -> ¡©us ); 5917 `´št_key ("Enüy±ed d©a", r¥ -> d©a ); 5918 } } 5920  $Ë_¿nd_r¥ (cÚ¡ * d©a , ušt8_t size ) 5922 cÚ¡  bt_hci_r¥_Ë_¿nd * r¥ = d©a ; 5924 `´št_¡©us ( r¥ -> ¡©us ); 5925 `´št_¿ndom_numb” ( r¥ -> numb” ); 5926 } } 5928  $Ë_¡¬t_’üy±_cmd (cÚ¡ * d©a , ušt8_t size ) 5930 cÚ¡  bt_hci_cmd_Ë_¡¬t_’üy± * cmd = d©a ; 5932 `´št_hªdË ( cmd -> hªdË ); 5933 `´št_¿ndom_numb” ( cmd -> ¿nd ); 5934 `´št_’üy±ed_div”sif›r ( cmd -> ediv ); 5935 `´št_key ("LÚg”m key", cmd -> Ék ); 5936 } } 5938  $Ë_Ék_»q_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 5940 cÚ¡  bt_hci_cmd_Ë_Ék_»q_»¶y * cmd = d©a ; 5942 `´št_hªdË ( cmd -> hªdË ); 5943 `´št_key ("LÚg”m key", cmd -> Ék ); 5944 } } 5946  $Ë_Ék_»q_»¶y_r¥ (cÚ¡ * d©a , ušt8_t size ) 5948 cÚ¡  bt_hci_r¥_Ë_Ék_»q_»¶y * r¥ = d©a ; 5950 `´št_¡©us ( r¥ -> ¡©us ); 5951 `´št_hªdË ( r¥ -> hªdË ); 5952 } } 5954  $Ë_Ék_»q_Ãg_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 5956 cÚ¡  bt_hci_cmd_Ë_Ék_»q_Ãg_»¶y * cmd = d©a ; 5958 `´št_hªdË ( cmd -> hªdË ); 5959 } } 5961  $Ë_Ék_»q_Ãg_»¶y_r¥ (cÚ¡ * d©a , ušt8_t size ) 5963 cÚ¡  bt_hci_r¥_Ë_Ék_»q_Ãg_»¶y * r¥ = d©a ; 5965 `´št_¡©us ( r¥ -> ¡©us ); 5966 `´št_hªdË ( r¥ -> hªdË ); 5967 } } 5969  $Ë_»ad_suµÜ‹d_¡©es_r¥ (cÚ¡ * d©a , ušt8_t size ) 5971 cÚ¡  bt_hci_r¥_Ë_»ad_suµÜ‹d_¡©es * r¥ = d©a ; 5973 `´št_¡©us ( r¥ -> ¡©us ); 5974 `´št_Ë_¡©es ( r¥ -> ¡©es ); 5975 } } 5977  $Ë_»ûiv”_‹¡_cmd (cÚ¡ * d©a , ušt8_t size ) 5979 cÚ¡  bt_hci_cmd_Ë_»ûiv”_‹¡ * cmd = d©a ; 5981 `´št_f›ld ("RX frequency: %d MHz (0x%2.2x)", 5982 ( cmd -> äequ’cy * 2) + 2402, cmd->frequency); 5983 } } 5985  $Ë_Œªsm™‹r_‹¡_cmd (cÚ¡ * d©a , ušt8_t size ) 5987 cÚ¡  bt_hci_cmd_Ë_Œªsm™‹r_‹¡ * cmd = d©a ; 5989 `´št_f›ld ("TX frequency: %d MHz (0x%2.2x)", 5990 ( cmd -> äequ’cy * 2) + 2402, cmd->frequency); 5991 `´št_f›ld ("Te¡ d©¨Ëngth: %d by‹s", cmd -> d©a_Ën ); 5992 `´št_f›ld ("Pack‘…aylßd: 0x%2.2x", cmd -> ·ylßd ); 5993 } } 5995  $Ë_‹¡_’d_r¥ (cÚ¡ * d©a , ušt8_t size ) 5997 cÚ¡  bt_hci_r¥_Ë_‹¡_’d * r¥ = d©a ; 5999 `´št_¡©us ( r¥ -> ¡©us ); 6000 `´št_f›ld ("Numb” oà·ck‘s: %d", `Ë16_to_ýu ( r¥ -> num_·ck‘s )); 6001 } } 6003  $Ë_cÚn_·¿m_»q_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 6005 cÚ¡  bt_hci_cmd_Ë_cÚn_·¿m_»q_»¶y * cmd = d©a ; 6007 `´št_hªdË ( cmd -> hªdË ); 6008 `´št_¦Ù_125 ("Mš cÚÃùiÚ iÁ”v®", cmd -> mš_š‹rv® ); 6009 `´št_¦Ù_125 ("Max cÚÃùiÚ iÁ”v®", cmd -> max_š‹rv® ); 6010 `´št_f›ld ("CÚÃùiÚ†©’cy: 0x%4.4x", `Ë16_to_ýu ( cmd -> Ï‹ncy )); 6011 `´št_f›ld ("Supervisionimeout: %d msec (0x%4.4x)", 6012 `Ë16_to_ýu ( cmd -> supv_timeout ) * 10, 6013 `Ë16_to_ýu ( cmd -> supv_timeout )); 6014 `´št_¦Ù_625 ("Mš cÚÃùiÚ†’gth", cmd -> mš_Ëngth ); 6015 `´št_¦Ù_625 ("Max cÚÃùiÚ†’gth", cmd -> max_Ëngth ); 6016 } } 6018  $Ë_cÚn_·¿m_»q_»¶y_r¥ (cÚ¡ * d©a , ušt8_t size ) 6020 cÚ¡  bt_hci_r¥_Ë_cÚn_·¿m_»q_»¶y * r¥ = d©a ; 6022 `´št_¡©us ( r¥ -> ¡©us ); 6023 `´št_hªdË ( r¥ -> hªdË ); 6024 } } 6026  $Ë_cÚn_·¿m_»q_Ãg_»¶y_cmd (cÚ¡ * d©a , ušt8_t size ) 6028 cÚ¡  bt_hci_cmd_Ë_cÚn_·¿m_»q_Ãg_»¶y * cmd = d©a ; 6030 `´št_hªdË ( cmd -> hªdË ); 6031 `´št_»asÚ ( cmd -> »asÚ ); 6032 } } 6034  $Ë_cÚn_·¿m_»q_Ãg_»¶y_r¥ (cÚ¡ * d©a , ušt8_t size ) 6036 cÚ¡  bt_hci_r¥_Ë_cÚn_·¿m_»q_Ãg_»¶y * r¥ = d©a ; 6038 `´št_¡©us ( r¥ -> ¡©us ); 6039 `´št_hªdË ( r¥ -> hªdË ); 6040 } } 6042  $Ë_£t_d©a_Ëngth_cmd (cÚ¡ * d©a , ušt8_t size ) 6044 cÚ¡  bt_hci_cmd_Ë_£t_d©a_Ëngth * cmd = d©a ; 6046 `´št_hªdË ( cmd -> hªdË ); 6047 `´št_f›ld ("TX où‘s: %d", `Ë16_to_ýu ( cmd -> tx_Ën )); 6048 `´št_f›ld ("TXime: %d", `Ë16_to_ýu ( cmd -> tx_time )); 6049 } } 6051  $Ë_£t_d©a_Ëngth_r¥ (cÚ¡ * d©a , ušt8_t size ) 6053 cÚ¡  bt_hci_r¥_Ë_£t_d©a_Ëngth * r¥ = d©a ; 6055 `´št_¡©us ( r¥ -> ¡©us ); 6056 `´št_hªdË ( r¥ -> hªdË ); 6057 } } 6059  $Ë_»ad_deçuÉ_d©a_Ëngth_r¥ (cÚ¡ * d©a , ušt8_t size ) 6061 cÚ¡  bt_hci_r¥_Ë_»ad_deçuÉ_d©a_Ëngth * r¥ = d©a ; 6063 `´št_¡©us ( r¥ -> ¡©us ); 6064 `´št_f›ld ("TX où‘s: %d", `Ë16_to_ýu ( r¥ -> tx_Ën )); 6065 `´št_f›ld ("TXime: %d", `Ë16_to_ýu ( r¥ -> tx_time )); 6066 } } 6068  $Ë_wr™e_deçuÉ_d©a_Ëngth_cmd (cÚ¡ * d©a , ušt8_t size ) 6070 cÚ¡  bt_hci_cmd_Ë_wr™e_deçuÉ_d©a_Ëngth * cmd = d©a ; 6072 `´št_f›ld ("TX où‘s: %d", `Ë16_to_ýu ( cmd -> tx_Ën )); 6073 `´št_f›ld ("TXime: %d", `Ë16_to_ýu ( cmd -> tx_time )); 6074 } } 6076  $Ë_g’”©e_dhkey_cmd (cÚ¡ * d©a , ušt8_t size ) 6078 cÚ¡  bt_hci_cmd_Ë_g’”©e_dhkey * cmd = d©a ; 6080 `´št_pk256 ("RemÙP-256…ubliøkey", cmd -> »mÙe_pk256 ); 6081 } } 6083  $Ë_add_to_»sÞv_li¡_cmd (cÚ¡ * d©a , ušt8_t size ) 6085 cÚ¡  bt_hci_cmd_Ë_add_to_»sÞv_li¡ * cmd = d©a ; 6087 `´št_addr_ty³ ("Add»s ty³", cmd -> addr_ty³ ); 6088 `´št_addr ("Add»ss", cmd -> addr , cmd-> addr_ty³ ); 6089 `´št_key ("P“¸id’t™y„esÞvšg key", cmd -> ³”_œk ); 6090 `´št_key ("LoÿÈid’t™y„esÞvšg key", cmd -> loÿl_œk ); 6091 } } 6093  $Ë_»move_äom_»sÞv_li¡_cmd (cÚ¡ * d©a , ušt8_t size ) 6095 cÚ¡  bt_hci_cmd_Ë_»move_äom_»sÞv_li¡ * cmd = d©a ; 6097 `´št_addr_ty³ ("Add»s ty³", cmd -> addr_ty³ ); 6098 `´št_addr ("Add»ss", cmd -> addr , cmd-> addr_ty³ ); 6099 } } 6101  $Ë_»ad_»sÞv_li¡_size_r¥ (cÚ¡ * d©a , ušt8_t size ) 6103 cÚ¡  bt_hci_r¥_Ë_»ad_»sÞv_li¡_size * r¥ = d©a ; 6105 `´št_¡©us ( r¥ -> ¡©us ); 6106 `´št_f›ld ("Size: %u", r¥ -> size ); 6107 } } 6109  $Ë_»ad_³”_»sÞv_addr_cmd (cÚ¡ * d©a , ušt8_t size ) 6111 cÚ¡  bt_hci_cmd_Ë_»ad_³”_»sÞv_addr * cmd = d©a ; 6113 `´št_addr_ty³ ("Add»s ty³", cmd -> addr_ty³ ); 6114 `´št_addr ("Add»ss", cmd -> addr , cmd-> addr_ty³ ); 6115 } } 6117  $Ë_»ad_³”_»sÞv_addr_r¥ (cÚ¡ * d©a , ušt8_t size ) 6119 cÚ¡  bt_hci_r¥_Ë_»ad_³”_»sÞv_addr * r¥ = d©a ; 6121 `´št_¡©us ( r¥ -> ¡©us ); 6122 `´št_addr ("Add»ss", r¥ -> addr , 0x01); 6123 } } 6125  $Ë_»ad_loÿl_»sÞv_addr_cmd (cÚ¡ * d©a , ušt8_t size ) 6127 cÚ¡  bt_hci_cmd_Ë_»ad_loÿl_»sÞv_addr * cmd = d©a ; 6129 `´št_addr_ty³ ("Add»s ty³", cmd -> addr_ty³ ); 6130 `´št_addr ("Add»ss", cmd -> addr , cmd-> addr_ty³ ); 6131 } } 6133  $Ë_»ad_loÿl_»sÞv_addr_r¥ (cÚ¡ * d©a , ušt8_t size ) 6135 cÚ¡  bt_hci_r¥_Ë_»ad_loÿl_»sÞv_addr * r¥ = d©a ; 6137 `´št_¡©us ( r¥ -> ¡©us ); 6138 `´št_addr ("Add»ss", r¥ -> addr , 0x01); 6139 } } 6141  $Ë_£t_»sÞv_’abË_cmd (cÚ¡ * d©a , ušt8_t size ) 6143 cÚ¡  bt_hci_cmd_Ë_£t_»sÞv_’abË * cmd = d©a ; 6144 cÚ¡ * ¡r ; 6146  cmd -> ’abË ) { 6148 ¡r = "Disabled"; 6151 ¡r = "Enabled"; 6154 ¡r = "Reserved"; 6158 `´št_f›ld ("Add»s »sÞutiÚ: % (0x%2.2x)", ¡r , cmd -> ’abË ); 6159 } } 6161  $Ë_£t_»sÞv_timeout_cmd (cÚ¡ * d©a , ušt8_t size ) 6163 cÚ¡  bt_hci_cmd_Ë_£t_»sÞv_timeout * cmd = d©a ; 6165 `´št_f›ld ("Timeout: %u secÚds", `Ë16_to_ýu ( cmd -> timeout )); 6166 } } 6168  $Ë_»ad_max_d©a_Ëngth_r¥ (cÚ¡ * d©a , ušt8_t size ) 6170 cÚ¡  bt_hci_r¥_Ë_»ad_max_d©a_Ëngth * r¥ = d©a ; 6172 `´št_¡©us ( r¥ -> ¡©us ); 6173 `´št_f›ld ("Max TX où‘s: %d", `Ë16_to_ýu ( r¥ -> max_tx_Ën )); 6174 `´št_f›ld ("Max TXime: %d", `Ë16_to_ýu ( r¥ -> max_tx_time )); 6175 `´št_f›ld ("Max RX où‘s: %d", `Ë16_to_ýu ( r¥ -> max_rx_Ën )); 6176 `´št_f›ld ("Max RXime: %d", `Ë16_to_ýu ( r¥ -> max_rx_time )); 6177 } } 6179  sÝcode_d©a { 6180 ušt16_t mÝcode ; 6181  mb™ ; 6182 cÚ¡ * m¡r ; 6183 (* mcmd_func è(cÚ¡ * md©a , ušt8_t msize ); 6184 ušt8_t mcmd_size ; 6185 boÞ mcmd_fixed ; 6186 (* mr¥_func è(cÚ¡ * md©a , ušt8_t msize ); 6187 ušt8_t mr¥_size ; 6188 boÞ mr¥_fixed ; 6191 cÚ¡  Ýcode_d©a gÝcode_bË [] = { 6196 šquœy_cmd , 5, Œue }, 6198 nuÎ_cmd , 0, Œue , 6199 ¡©us_r¥ , 1, Œue }, 6201 ³riodic_šquœy_cmd , 9, Œue , 6202 ¡©us_r¥ , 1, Œue }, 6204 nuÎ_cmd , 0, Œue , 6205 ¡©us_r¥ , 1, Œue }, 6207 ü—‹_cÚn_cmd , 13, Œue }, 6209 discÚÃù_cmd , 3, Œue }, 6211 add_sco_cÚn_cmd , 4, Œue }, 6213 ü—‹_cÚn_ÿnûl_cmd , 6, Œue , 6214 ¡©us_bdaddr_r¥ , 7, Œue }, 6216 acû±_cÚn_»que¡_cmd , 7, Œue }, 6218 »jeù_cÚn_»que¡_cmd , 7, Œue }, 6220 lšk_key_»que¡_»¶y_cmd , 22, Œue , 6221 ¡©us_bdaddr_r¥ , 7, Œue }, 6223 lšk_key_»que¡_Ãg_»¶y_cmd , 6, Œue , 6224 ¡©us_bdaddr_r¥ , 7, Œue }, 6226 pš_code_»que¡_»¶y_cmd , 23, Œue , 6227 ¡©us_bdaddr_r¥ , 7, Œue }, 6229 pš_code_»que¡_Ãg_»¶y_cmd , 6, Œue , 6230 ¡©us_bdaddr_r¥ , 7, Œue }, 6232 chªge_cÚn_pkt_ty³_cmd , 4, Œue }, 6234 auth_»que¡ed_cmd , 2, Œue }, 6236 £t_cÚn_’üy±_cmd , 3, Œue }, 6238 chªge_cÚn_lšk_key_cmd , 2, Œue }, 6240 ma¡”_lšk_key_cmd , 1, Œue }, 6242 »mÙe_Çme_»que¡_cmd , 10, Œue }, 6244 »mÙe_Çme_»que¡_ÿnûl_cmd , 6, Œue , 6245 ¡©us_bdaddr_r¥ , 7, Œue }, 6247 »ad_»mÙe_ã©u»s_cmd , 2, Œue }, 6249 »ad_»mÙe_ext_ã©u»s_cmd , 3, Œue }, 6251 »ad_»mÙe_v”siÚ_cmd , 2, Œue }, 6253 »ad_þock_off£t_cmd , 2, Œue }, 6255 »ad_lmp_hªdË_cmd , 2, Œue , 6256 »ad_lmp_hªdË_r¥ , 8, Œue }, 6258 £tup_sync_cÚn_cmd , 17, Œue }, 6260 acû±_sync_cÚn_»que¡_cmd , 21, Œue }, 6262 »jeù_sync_cÚn_»que¡_cmd , 7, Œue }, 6264 io_ÿ·bž™y_»que¡_»¶y_cmd , 9, Œue , 6265 ¡©us_bdaddr_r¥ , 7, Œue }, 6267 u£r_cÚfœm_»que¡_»¶y_cmd , 6, Œue , 6268 ¡©us_bdaddr_r¥ , 7, Œue }, 6270 u£r_cÚfœm_»que¡_Ãg_»¶y_cmd , 6, Œue , 6271 ¡©us_bdaddr_r¥ , 7, Œue }, 6273 u£r_·sskey_»que¡_»¶y_cmd , 10, Œue , 6274 ¡©us_bdaddr_r¥ , 7, Œue }, 6276 u£r_·sskey_»que¡_Ãg_»¶y_cmd , 6, Œue , 6277 ¡©us_bdaddr_r¥ , 7, Œue }, 6279 »mÙe_oob_d©a_»que¡_»¶y_cmd , 38, Œue , 6280 ¡©us_bdaddr_r¥ , 7, Œue }, 6282 »mÙe_oob_d©a_»que¡_Ãg_»¶y_cmd , 6, Œue , 6283 ¡©us_bdaddr_r¥ , 7, Œue }, 6285 io_ÿ·bž™y_»que¡_Ãg_»¶y_cmd , 7, Œue , 6286 ¡©us_bdaddr_r¥ , 7, Œue }, 6288 ü—‹_phy_lšk_cmd , 3, çl£ }, 6290 acû±_phy_lšk_cmd , 3, çl£ }, 6292 discÚn_phy_lšk_cmd , 2, Œue }, 6294 ü—‹_logic_lšk_cmd , 33, Œue }, 6296 acû±_logic_lšk_cmd , 33, Œue }, 6298 discÚn_logic_lšk_cmd , 2, Œue }, 6300 logic_lšk_ÿnûl_cmd , 2, Œue , 6301 logic_lšk_ÿnûl_r¥ , 3, Œue }, 6303 æow_¥ec_modify_cmd , 34, Œue }, 6307 Œunÿ‹d_·ge_cmd , 9, Œue }, 6309 Œunÿ‹d_·ge_ÿnûl_cmd , 6, Œue , 6310 ¡©us_bdaddr_r¥ , 7, Œue }, 6312 £t_¦ave_brßdÿ¡_cmd , 11, Œue , 6313 £t_¦ave_brßdÿ¡_r¥ , 4, Œue }, 6315 £t_¦ave_brßdÿ¡_»ûive_cmd , 34, Œue , 6316 £t_¦ave_brßdÿ¡_»ûive_r¥ , 8, Œue }, 6318 nuÎ_cmd , 0, Œue }, 6320 »ûive_sync_Œaš_cmd , 12, Œue }, 6322 »mÙe_oob_ext_d©a_»que¡_»¶y_cmd , 70, Œue , 6323 ¡©us_bdaddr_r¥ , 7, Œue }, 6327 hÞd_mode_cmd , 6, Œue }, 6329 ¢iff_mode_cmd , 10, Œue }, 6331 ex™_¢iff_mode_cmd , 2, Œue }, 6333 ·rk_¡©e_cmd , 6, Œue }, 6335 ex™_·rk_¡©e_cmd , 2, Œue }, 6337 qos_£tup_cmd , 20, Œue }, 6339 rÞe_discov”y_cmd , 2, Œue , 6340 rÞe_discov”y_r¥ , 4, Œue }, 6342 sw™ch_rÞe_cmd , 7, Œue }, 6344 »ad_lšk_pÞicy_cmd , 2, Œue , 6345 »ad_lšk_pÞicy_r¥ , 5, Œue }, 6347 wr™e_lšk_pÞicy_cmd , 4, Œue , 6348 wr™e_lšk_pÞicy_r¥ , 3, Œue }, 6350 nuÎ_cmd , 0, Œue , 6351 »ad_deçuÉ_lšk_pÞicy_r¥ , 3, Œue }, 6353 wr™e_deçuÉ_lšk_pÞicy_cmd , 2, Œue , 6354 ¡©us_r¥ , 1, Œue }, 6356 æow_¥ec_cmd , 21, Œue }, 6358 ¢iff_sub¿tšg_cmd , 8, Œue , 6359 ¢iff_sub¿tšg_r¥ , 3, Œue }, 6363 £t_ev’t_mask_cmd , 8, Œue , 6364 ¡©us_r¥ , 1, Œue }, 6366 nuÎ_cmd , 0, Œue , 6367 ¡©us_r¥ , 1, Œue }, 6369 £t_ev’t_fž‹r_cmd , 1, çl£ , 6370 ¡©us_r¥ , 1, Œue }, 6372 æush_cmd , 2, Œue , 6373 æush_r¥ , 3, Œue }, 6375 nuÎ_cmd , 0, Œue , 6376 »ad_pš_ty³_r¥ , 2, Œue }, 6378 wr™e_pš_ty³_cmd , 1, Œue , 6379 ¡©us_r¥ , 1, Œue }, 6381 nuÎ_cmd , 0, Œue , 6382 ¡©us_r¥ , 1, Œue }, 6384 »ad_¡Üed_lšk_key_cmd , 7, Œue , 6385 »ad_¡Üed_lšk_key_r¥ , 5, Œue }, 6387 wr™e_¡Üed_lšk_key_cmd , 1, çl£ , 6388 wr™e_¡Üed_lšk_key_r¥ , 2, Œue }, 6390 d–‘e_¡Üed_lšk_key_cmd , 7, Œue , 6391 d–‘e_¡Üed_lšk_key_r¥ , 3, Œue }, 6393 wr™e_loÿl_Çme_cmd , 248, Œue , 6394 ¡©us_r¥ , 1, Œue }, 6396 nuÎ_cmd , 0, Œue , 6397 »ad_loÿl_Çme_r¥ , 249, Œue }, 6399 nuÎ_cmd , 0, Œue , 6400 »ad_cÚn_acû±_timeout_r¥ , 3, Œue }, 6402 wr™e_cÚn_acû±_timeout_cmd , 2, Œue , 6403 ¡©us_r¥ , 1, Œue }, 6405 nuÎ_cmd , 0, Œue , 6406 »ad_·ge_timeout_r¥ , 3, Œue }, 6408 wr™e_·ge_timeout_cmd , 2, Œue , 6409 ¡©us_r¥ , 1, Œue }, 6411 nuÎ_cmd , 0, Œue , 6412 »ad_sÿn_’abË_r¥ , 2, Œue }, 6414 wr™e_sÿn_’abË_cmd , 1, Œue , 6415 ¡©us_r¥ , 1, Œue }, 6417 nuÎ_cmd , 0, Œue , 6418 »ad_·ge_sÿn_aùiv™y_r¥ , 5, Œue }, 6420 wr™e_·ge_sÿn_aùiv™y_cmd , 4, Œue , 6421 ¡©us_r¥ , 1, Œue }, 6423 nuÎ_cmd , 0, Œue , 6424 »ad_šquœy_sÿn_aùiv™y_r¥ , 5, Œue }, 6426 wr™e_šquœy_sÿn_aùiv™y_cmd , 4, Œue , 6427 ¡©us_r¥ , 1, Œue }, 6429 nuÎ_cmd , 0, Œue , 6430 »ad_auth_’abË_r¥ , 2, Œue }, 6432 wr™e_auth_’abË_cmd , 1, Œue , 6433 ¡©us_r¥ , 1, Œue }, 6435 nuÎ_cmd , 0, Œue , 6436 »ad_’üy±_mode_r¥ , 2, Œue }, 6438 wr™e_’üy±_mode_cmd , 1, Œue , 6439 ¡©us_r¥ , 1, Œue }, 6441 nuÎ_cmd , 0, Œue , 6442 »ad_þass_of_dev_r¥ , 4, Œue }, 6444 wr™e_þass_of_dev_cmd , 3, Œue , 6445 ¡©us_r¥ , 1, Œue }, 6447 nuÎ_cmd , 0, Œue , 6448 »ad_voiû_£‰šg_r¥ , 3, Œue }, 6450 wr™e_voiû_£‰šg_cmd , 2, Œue , 6451 ¡©us_r¥ , 1, Œue }, 6453 »ad_auto_æush_timeout_cmd , 2, Œue , 6454 »ad_auto_æush_timeout_r¥ , 5, Œue }, 6456 wr™e_auto_æush_timeout_cmd , 4, Œue , 6457 wr™e_auto_æush_timeout_r¥ , 3, Œue }, 6459 nuÎ_cmd , 0, Œue , 6460 »ad_num_brßdÿ¡_»Œªs_r¥ , 2, Œue }, 6462 wr™e_num_brßdÿ¡_»Œªs_cmd , 1, Œue , 6463 ¡©us_r¥ , 1, Œue }, 6465 nuÎ_cmd , 0, Œue , 6466 »ad_hÞd_mode_aùiv™y_r¥ , 2, Œue }, 6468 wr™e_hÞd_mode_aùiv™y_cmd , 1, Œue , 6469 ¡©us_r¥ , 1, Œue }, 6471 »ad_tx_pow”_cmd , 3, Œue , 6472 »ad_tx_pow”_r¥ , 4, Œue }, 6474 nuÎ_cmd , 0, Œue , 6475 »ad_sync_æow_cÚŒÞ_r¥ , 2, Œue }, 6477 wr™e_sync_æow_cÚŒÞ_cmd , 1, Œue , 6478 ¡©us_r¥ , 1, Œue }, 6480 £t_ho¡_æow_cÚŒÞ_cmd , 1, Œue , 6481 ¡©us_r¥ , 1, Œue }, 6483 ho¡_bufãr_size_cmd , 7, Œue , 6484 ¡©us_r¥ , 1, Œue }, 6487 »ad_lšk_supv_timeout_cmd , 2, Œue , 6488 »ad_lšk_supv_timeout_r¥ , 5, Œue }, 6490 wr™e_lšk_supv_timeout_cmd , 4, Œue , 6491 wr™e_lšk_supv_timeout_r¥ , 3, Œue }, 6493 nuÎ_cmd , 0, Œue , 6494 »ad_num_suµÜ‹d_Ÿc_r¥ , 2, Œue }, 6496 nuÎ_cmd , 0, Œue , 6497 »ad_cu¼’t_Ÿc_Ïp_r¥ , 2, çl£ }, 6499 wr™e_cu¼’t_Ÿc_Ïp_cmd , 1, çl£ , 6500 ¡©us_r¥ , 1, Œue }, 6502 nuÎ_cmd , 0, Œue , 6503 »ad_·ge_sÿn_³riod_mode_r¥ , 2, Œue }, 6505 wr™e_·ge_sÿn_³riod_mode_cmd , 1, Œue , 6506 ¡©us_r¥ , 1, Œue }, 6508 nuÎ_cmd , 0, Œue , 6509 »ad_·ge_sÿn_mode_r¥ , 2, Œue }, 6511 wr™e_·ge_sÿn_mode_cmd , 1, Œue , 6512 ¡©us_r¥ , 1, Œue }, 6514 £t_afh_ho¡_þassifiÿtiÚ_cmd , 10, Œue , 6515 ¡©us_r¥ , 1, Œue }, 6517 nuÎ_cmd , 0, Œue , 6518 »ad_šquœy_sÿn_ty³_r¥ , 2, Œue }, 6520 wr™e_šquœy_sÿn_ty³_cmd , 1, Œue , 6521 ¡©us_r¥ , 1, Œue }, 6523 nuÎ_cmd , 0, Œue , 6524 »ad_šquœy_mode_r¥ , 2, Œue }, 6526 wr™e_šquœy_mode_cmd , 1, Œue , 6527 ¡©us_r¥ , 1, Œue }, 6529 nuÎ_cmd , 0, Œue , 6530 »ad_·ge_sÿn_ty³_r¥ , 2, Œue }, 6532 wr™e_·ge_sÿn_ty³_cmd , 1, Œue , 6533 ¡©us_r¥ , 1, Œue }, 6535 nuÎ_cmd , 0, Œue , 6536 »ad_afh_as£ssm’t_mode_r¥ , 2, Œue }, 6538 wr™e_afh_as£ssm’t_mode_cmd , 1, Œue , 6539 ¡©us_r¥ , 1, Œue }, 6541 nuÎ_cmd , 0, Œue , 6542 »ad_ext_šquœy_»¥Ú£_r¥ , 242, Œue }, 6544 wr™e_ext_šquœy_»¥Ú£_cmd , 241, Œue , 6545 ¡©us_r¥ , 1, Œue }, 6547 »äesh_’üy±_key_cmd , 2, Œue }, 6549 nuÎ_cmd , 0, Œue , 6550 »ad_sim¶e_·œšg_mode_r¥ , 2, Œue }, 6552 wr™e_sim¶e_·œšg_mode_cmd , 1, Œue , 6553 ¡©us_r¥ , 1, Œue }, 6555 nuÎ_cmd , 0, Œue , 6556 »ad_loÿl_oob_d©a_r¥ , 33, Œue }, 6558 nuÎ_cmd , 0, Œue , 6559 »ad_šquœy_»¥_tx_pow”_r¥ , 2, Œue }, 6561 wr™e_šquœy_tx_pow”_cmd , 1, Œue , 6562 ¡©us_r¥ , 1, Œue }, 6566 ’hªûd_æush_cmd , 3, Œue }, 6568 £nd_key´ess_nÙify_cmd , 7, Œue , 6569 £nd_key´ess_nÙify_r¥ , 7, Œue }, 6573 £t_ev’t_mask_·ge2_cmd , 8, Œue , 6574 ¡©us_r¥ , 1, Œue }, 6576 nuÎ_cmd , 0, Œue , 6577 »ad_loÿtiÚ_d©a_r¥ , 6, Œue }, 6579 wr™e_loÿtiÚ_d©a_cmd , 5, Œue , 6580 ¡©us_r¥ , 1, Œue }, 6582 nuÎ_cmd , 0, Œue , 6583 »ad_æow_cÚŒÞ_mode_r¥ , 2, Œue }, 6585 wr™e_æow_cÚŒÞ_mode_cmd , 1, Œue , 6586 ¡©us_r¥ , 1, Œue }, 6592 nuÎ_cmd , 0, Œue , 6593 »ad_Ë_ho¡_suµÜ‹d_r¥ , 3, Œue }, 6595 wr™e_Ë_ho¡_suµÜ‹d_cmd , 2, Œue , 6596 ¡©us_r¥ , 1, Œue }, 6604 £t_»£rved_É_addr_cmd , 1, Œue , 6605 £t_»£rved_É_addr_r¥ , 2, Œue }, 6607 d–‘e_»£rved_É_addr_cmd , 1, Œue , 6608 d–‘e_»£rved_É_addr_r¥ , 2, Œue }, 6610 £t_¦ave_brßdÿ¡_d©a_cmd , 3, çl£ , 6611 £t_¦ave_brßdÿ¡_d©a_r¥ , 2, Œue }, 6613 nuÎ_cmd , 0, Œue , 6614 »ad_sync_Œaš_·¿ms_r¥ , 8, Œue }, 6616 wr™e_sync_Œaš_·¿ms_cmd , 9, Œue , 6617 wr™e_sync_Œaš_·¿ms_r¥ , 3, Œue }, 6619 nuÎ_cmd , 0, Œue , 6620 »ad_£cu»_cÚn_suµÜt_r¥ , 2, Œue }, 6622 wr™e_£cu»_cÚn_suµÜt_cmd , 1, Œue , 6623 ¡©us_r¥ , 1, Œue }, 6625 »ad_auth_·ylßd_timeout_cmd , 2, Œue , 6626 »ad_auth_·ylßd_timeout_r¥ , 5, Œue }, 6628 wr™e_auth_·ylßd_timeout_cmd , 4, Œue , 6629 wr™e_auth_·ylßd_timeout_r¥ , 3, Œue }, 6631 nuÎ_cmd , 0, Œue , 6632 »ad_loÿl_oob_ext_d©a_r¥ , 65, Œue }, 6640 nuÎ_cmd , 0, Œue , 6641 »ad_loÿl_v”siÚ_r¥ , 9, Œue }, 6643 nuÎ_cmd , 0, Œue , 6644 »ad_loÿl_commªds_r¥ , 65, Œue }, 6646 nuÎ_cmd , 0, Œue , 6647 »ad_loÿl_ã©u»s_r¥ , 9, Œue }, 6649 »ad_loÿl_ext_ã©u»s_cmd , 1, Œue , 6650 »ad_loÿl_ext_ã©u»s_r¥ , 11, Œue }, 6652 nuÎ_cmd , 0, Œue , 6653 »ad_bufãr_size_r¥ , 8, Œue }, 6655 nuÎ_cmd , 0, Œue , 6656 »ad_couÁry_code_r¥ , 2, Œue }, 6658 nuÎ_cmd , 0, Œue , 6659 »ad_bd_addr_r¥ , 7, Œue }, 6661 nuÎ_cmd , 0, Œue , 6662 »ad_d©a_block_size_r¥ , 7, Œue }, 6664 nuÎ_cmd , 0, Œue , 6665 »ad_loÿl_codecs_r¥ , 3, çl£ }, 6669 »ad_çžed_cÚù_couÁ”_cmd , 2, Œue , 6670 »ad_çžed_cÚù_couÁ”_r¥ , 5, Œue }, 6672 »£t_çžed_cÚù_couÁ”_cmd , 2, Œue , 6673 »£t_çžed_cÚù_couÁ”_r¥ , 3, Œue }, 6675 »ad_lšk_qu®™y_cmd , 2, Œue , 6676 »ad_lšk_qu®™y_r¥ , 4, Œue }, 6678 »ad_rssi_cmd , 2, Œue , 6679 »ad_rssi_r¥ , 4, Œue }, 6681 »ad_afh_chªÃl_m­_cmd , 2, Œue , 6682 »ad_afh_chªÃl_m­_r¥ , 14, Œue }, 6684 »ad_þock_cmd , 3, Œue , 6685 »ad_þock_r¥ , 9, Œue }, 6687 »ad_’üy±_key_size_cmd , 2, Œue , 6688 »ad_’üy±_key_size_r¥ , 4, Œue }, 6690 nuÎ_cmd , 0, Œue , 6691 »ad_loÿl_amp_šfo_r¥ , 31, Œue }, 6693 »ad_loÿl_amp_assoc_cmd , 5, Œue , 6694 »ad_loÿl_amp_assoc_r¥ , 5, çl£ }, 6696 wr™e_»mÙe_amp_assoc_cmd , 6, çl£ , 6697 wr™e_»mÙe_amp_assoc_r¥ , 2, Œue }, 6699 nuÎ_cmd , 0, Œue , 6700 g‘_mws_Œª¥Üt_cÚfig_r¥ , 2, çl£ }, 6702 £t_Œigg”ed_þock_ÿ±u»_cmd , 6, Œue , 6703 ¡©us_r¥ , 1, Œue }, 6709 nuÎ_cmd , 0, Œue , 6710 ¡©us_r¥ , 1, Œue }, 6712 wr™e_s¥_debug_mode_cmd , 1, Œue , 6713 ¡©us_r¥ , 1, Œue }, 6721 Ë_£t_ev’t_mask_cmd , 8, Œue , 6722 ¡©us_r¥ , 1, Œue }, 6724 nuÎ_cmd , 0, Œue , 6725 Ë_»ad_bufãr_size_r¥ , 4, Œue }, 6727 nuÎ_cmd , 0, Œue , 6728 Ë_»ad_loÿl_ã©u»s_r¥ , 9, Œue }, 6730 Ë_£t_¿ndom_add»ss_cmd , 6, Œue , 6731 ¡©us_r¥ , 1, Œue }, 6733 Ë_£t_adv_·¿m‘”s_cmd , 15, Œue , 6734 ¡©us_r¥ , 1, Œue }, 6736 nuÎ_cmd , 0, Œue , 6737 Ë_»ad_adv_tx_pow”_r¥ , 2, Œue }, 6739 Ë_£t_adv_d©a_cmd , 32, Œue , 6740 ¡©us_r¥ , 1, Œue }, 6742 Ë_£t_sÿn_r¥_d©a_cmd , 32, Œue , 6743 ¡©us_r¥ , 1, Œue }, 6745 Ë_£t_adv_’abË_cmd , 1, Œue , 6746 ¡©us_r¥ , 1, Œue }, 6748 Ë_£t_sÿn_·¿m‘”s_cmd , 7, Œue , 6749 ¡©us_r¥ , 1, Œue }, 6751 Ë_£t_sÿn_’abË_cmd , 2, Œue , 6752 ¡©us_r¥ , 1, Œue }, 6754 Ë_ü—‹_cÚn_cmd , 25, Œue }, 6756 nuÎ_cmd , 0, Œue , 6757 ¡©us_r¥ , 1, Œue }, 6759 nuÎ_cmd , 0, Œue , 6760 Ë_»ad_wh™e_li¡_size_r¥ , 2, Œue }, 6762 nuÎ_cmd , 0, Œue , 6763 ¡©us_r¥ , 1, Œue }, 6765 Ë_add_to_wh™e_li¡_cmd , 7, Œue , 6766 ¡©us_r¥ , 1, Œue }, 6768 Ë_»move_äom_wh™e_li¡_cmd , 7, Œue , 6769 ¡©us_r¥ , 1, Œue }, 6771 Ë_cÚn_upd©e_cmd , 14, Œue }, 6773 Ë_£t_ho¡_þassifiÿtiÚ_cmd , 5, Œue , 6774 ¡©us_r¥ , 1, Œue }, 6776 Ë_»ad_chªÃl_m­_cmd , 2, Œue , 6777 Ë_»ad_chªÃl_m­_r¥ , 8, Œue }, 6779 Ë_»ad_»mÙe_ã©u»s_cmd , 2, Œue }, 6781 Ë_’üy±_cmd , 32, Œue , 6782 Ë_’üy±_r¥ , 17, Œue }, 6784 nuÎ_cmd , 0, Œue , 6785 Ë_¿nd_r¥ , 9, Œue }, 6787 Ë_¡¬t_’üy±_cmd , 28, Œue }, 6789 Ë_Ék_»q_»¶y_cmd , 18, Œue , 6790 Ë_Ék_»q_»¶y_r¥ , 3, Œue }, 6792 Ë_Ék_»q_Ãg_»¶y_cmd , 2, Œue , 6793 Ë_Ék_»q_Ãg_»¶y_r¥ , 3, Œue }, 6795 nuÎ_cmd , 0, Œue , 6796 Ë_»ad_suµÜ‹d_¡©es_r¥ , 9, Œue }, 6798 Ë_»ûiv”_‹¡_cmd , 1, Œue , 6799 ¡©us_r¥ , 1, Œue }, 6801 Ë_Œªsm™‹r_‹¡_cmd , 3, Œue , 6802 ¡©us_r¥ , 1, Œue }, 6804 nuÎ_cmd , 0, Œue , 6805 Ë_‹¡_’d_r¥ , 3, Œue }, 6807 Ë_cÚn_·¿m_»q_»¶y_cmd , 14, Œue , 6808 Ë_cÚn_·¿m_»q_»¶y_r¥ , 3, Œue }, 6810 Ë_cÚn_·¿m_»q_Ãg_»¶y_cmd , 3, Œue , 6811 Ë_cÚn_·¿m_»q_Ãg_»¶y_r¥ , 3, Œue }, 6813 Ë_£t_d©a_Ëngth_cmd , 6, Œue , 6814 Ë_£t_d©a_Ëngth_r¥ , 3, Œue }, 6816 nuÎ_cmd , 0, Œue , 6817 Ë_»ad_deçuÉ_d©a_Ëngth_r¥ , 5, Œue }, 6819 Ë_wr™e_deçuÉ_d©a_Ëngth_cmd , 4, Œue , 6820 ¡©us_r¥ , 1, Œue }, 6822 nuÎ_cmd , 0, Œue }, 6824 Ë_g’”©e_dhkey_cmd , 64, Œue }, 6826 Ë_add_to_»sÞv_li¡_cmd , 39, Œue , 6827 ¡©us_r¥ , 1, Œue }, 6829 Ë_»move_äom_»sÞv_li¡_cmd , 7, Œue , 6830 ¡©us_r¥ , 1, Œue }, 6832 nuÎ_cmd , 0, Œue , 6833 ¡©us_r¥ , 1, Œue }, 6835 nuÎ_cmd , 0, Œue , 6836 Ë_»ad_»sÞv_li¡_size_r¥ , 2, Œue }, 6838 Ë_»ad_³”_»sÞv_addr_cmd , 7, Œue , 6839 Ë_»ad_³”_»sÞv_addr_r¥ , 7, Œue }, 6841 Ë_»ad_loÿl_»sÞv_addr_cmd , 7, Œue , 6842 Ë_»ad_loÿl_»sÞv_addr_r¥ , 7, Œue }, 6844 Ë_£t_»sÞv_’abË_cmd , 1, Œue , 6845 ¡©us_r¥ , 1, Œue }, 6847 Ë_£t_»sÞv_timeout_cmd , 2, Œue , 6848 ¡©us_r¥ , 1, Œue }, 6850 nuÎ_cmd , 0, Œue , 6851 Ë_»ad_max_d©a_Ëngth_r¥ , 9, Œue }, 6855 cÚ¡ * $g‘_suµÜ‹d_commªd ( b™ ) 6857  i ; 6859  i = 0; Ýcode_bË [i]. ¡r ; i++) { 6860 ià( Ýcode_bË [ i ]. b™ == bit) 6861  Ýcode_bË [ i ]. ¡r ; 6864  NULL ; 6865 } } 6867  $šquœy_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 6869 cÚ¡  bt_hci_evt_šquœy_com¶‘e * evt = d©a ; 6871 `´št_¡©us ( evt -> ¡©us ); 6872 } } 6874  $šquœy_»suÉ_evt (cÚ¡ * d©a , ušt8_t size ) 6876 cÚ¡  bt_hci_evt_šquœy_»suÉ * evt = d©a ; 6878 `´št_num_»¥ ( evt -> num_»¥ ); 6879 `´št_bdaddr ( evt -> bdaddr ); 6880 `´št_psÿn_»p_mode ( evt -> psÿn_»p_mode ); 6881 `´št_psÿn_³riod_mode ( evt -> psÿn_³riod_mode ); 6882 `´št_psÿn_mode ( evt -> psÿn_mode ); 6883 `´št_dev_þass ( evt -> dev_þass ); 6884 `´št_þock_off£t ( evt -> þock_off£t ); 6886 ià( size > (* evt )) 6887 `·ck‘_hexdump ( d©a + (* evt ), size - (*evt)); 6888 } } 6890  $cÚn_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 6892 cÚ¡  bt_hci_evt_cÚn_com¶‘e * evt = d©a ; 6894 `´št_¡©us ( evt -> ¡©us ); 6895 `´št_hªdË ( evt -> hªdË ); 6896 `´št_bdaddr ( evt -> bdaddr ); 6897 `´št_lšk_ty³ ( evt -> lšk_ty³ ); 6898 `´št_’ü_mode ( evt -> ’ü_mode ); 6900 ià( evt -> ¡©us == 0x00) 6901 `assign_hªdË ( `Ë16_to_ýu ( evt -> hªdË ), 0x00); 6902 } } 6904  $cÚn_»que¡_evt (cÚ¡ * d©a , ušt8_t size ) 6906 cÚ¡  bt_hci_evt_cÚn_»que¡ * evt = d©a ; 6908 `´št_bdaddr ( evt -> bdaddr ); 6909 `´št_dev_þass ( evt -> dev_þass ); 6910 `´št_lšk_ty³ ( evt -> lšk_ty³ ); 6911 } } 6913  $discÚÃù_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 6915 cÚ¡  bt_hci_evt_discÚÃù_com¶‘e * evt = d©a ; 6917 `´št_¡©us ( evt -> ¡©us ); 6918 `´št_hªdË ( evt -> hªdË ); 6919 `´št_»asÚ ( evt -> »asÚ ); 6921 ià( evt -> ¡©us == 0x00) 6922 `»Ëa£_hªdË ( `Ë16_to_ýu ( evt -> hªdË )); 6923 } } 6925  $auth_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 6927 cÚ¡  bt_hci_evt_auth_com¶‘e * evt = d©a ; 6929 `´št_¡©us ( evt -> ¡©us ); 6930 `´št_hªdË ( evt -> hªdË ); 6931 } } 6933  $»mÙe_Çme_»que¡_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 6935 cÚ¡  bt_hci_evt_»mÙe_Çme_»que¡_com¶‘e * evt = d©a ; 6937 `´št_¡©us ( evt -> ¡©us ); 6938 `´št_bdaddr ( evt -> bdaddr ); 6939 `´št_Çme ( evt -> Çme ); 6940 } } 6942  $’üy±_chªge_evt (cÚ¡ * d©a , ušt8_t size ) 6944 cÚ¡  bt_hci_evt_’üy±_chªge * evt = d©a ; 6946 `´št_¡©us ( evt -> ¡©us ); 6947 `´št_hªdË ( evt -> hªdË ); 6948 `´št_’ü_mode_chªge ( evt -> ’ü_mode ,ƒvt-> hªdË ); 6949 } } 6951  $chªge_cÚn_lšk_key_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 6953 cÚ¡  bt_hci_evt_chªge_cÚn_lšk_key_com¶‘e * evt = d©a ; 6955 `´št_¡©us ( evt -> ¡©us ); 6956 `´št_hªdË ( evt -> hªdË ); 6957 } } 6959  $ma¡”_lšk_key_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 6961 cÚ¡  bt_hci_evt_ma¡”_lšk_key_com¶‘e * evt = d©a ; 6963 `´št_¡©us ( evt -> ¡©us ); 6964 `´št_hªdË ( evt -> hªdË ); 6965 `´št_key_æag ( evt -> key_æag ); 6966 } } 6968  $»mÙe_ã©u»s_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 6970 cÚ¡  bt_hci_evt_»mÙe_ã©u»s_com¶‘e * evt = d©a ; 6972 `´št_¡©us ( evt -> ¡©us ); 6973 `´št_hªdË ( evt -> hªdË ); 6974 `´št_ã©u»s (0, evt -> ã©u»s , 0x00); 6975 } } 6977  $»mÙe_v”siÚ_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 6979 cÚ¡  bt_hci_evt_»mÙe_v”siÚ_com¶‘e * evt = d©a ; 6981 `´št_¡©us ( evt -> ¡©us ); 6982 `´št_hªdË ( evt -> hªdË ); 6983 `´št_lmp_v”siÚ ( evt -> lmp_v” ,ƒvt-> lmp_subv” ); 6984 `´št_mªuçùu»r ( evt -> mªuçùu»r ); 6985 } } 6987  $qos_£tup_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 6989 cÚ¡  bt_hci_evt_qos_£tup_com¶‘e * evt = d©a ; 6991 `´št_¡©us ( evt -> ¡©us ); 6992 `´št_hªdË ( evt -> hªdË ); 6993 `´št_f›ld ("FÏgs: 0x%2.2x", evt -> æags ); 6995 `´št_£rviû_ty³ ( evt -> £rviû_ty³ ); 6997 `´št_f›ld ("Tok’„©e: %d", `Ë32_to_ýu ( evt -> tok’_¿‹ )); 6998 `´št_f›ld ("P—k bªdwidth: %d", `Ë32_to_ýu ( evt -> ³ak_bªdwidth )); 6999 `´št_f›ld ("L©’cy: %d", `Ë32_to_ýu ( evt -> Ï‹ncy )); 7000 `´št_f›ld ("D–ay v¬ŸtiÚ: %d", `Ë32_to_ýu ( evt -> d–ay_v¬ŸtiÚ )); 7001 } } 7003  $cmd_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7005 cÚ¡  bt_hci_evt_cmd_com¶‘e * evt = d©a ; 7006 ušt16_t Ýcode = `Ë16_to_ýu ( evt ->opcode); 7007 ušt16_t ogf = `cmd_Ýcode_ogf ( Ýcode ); 7008 ušt16_t ocf = `cmd_Ýcode_ocf ( Ýcode ); 7009 cÚ¡  Ýcode_d©a *Ýcode_d©¨ð NULL ; 7010 cÚ¡ * Ýcode_cÞÜ , * Ýcode_¡r ; 7011  i ; 7013  i = 0; Ýcode_bË [i]. ¡r ; i++) { 7014 ià( Ýcode_bË [ i ]. Ýcode == opcode) { 7015 Ýcode_d©a = & Ýcode_bË [ i ]; 7020 ià( Ýcode_d©a ) { 7021 ià( Ýcode_d©a -> r¥_func ) 7022 Ýcode_cÞÜ = COLOR_HCI_COMMAND ; 7024 Ýcode_cÞÜ = COLOR_HCI_COMMAND_UNKNOWN ; 7025 Ýcode_¡r = Ýcode_d©a -> ¡r ; 7027 ià( ogf == 0x3f) { 7028 Ýcode_cÞÜ = COLOR_HCI_COMMAND ; 7029 Ýcode_¡r = "Vendor"; 7031 Ýcode_cÞÜ = COLOR_HCI_COMMAND_UNKNOWN ; 7032 Ýcode_¡r = "Unknown"; 7036 `´št_šd’t (6, Ýcode_cÞÜ , "", Ýcode_¡r , COLOR_OFF , 7037 " (0x%2.2x|0x%4.4xèncmd %d", ogf , ocf , evt -> ncmd ); 7039 ià(! Ýcode_d©a || !Ýcode_d©a-> r¥_func ) { 7040 ià( size > 3) { 7041 ušt8_t ¡©us = *((ušt8_ˆ*è( d©a + 3)); 7043 `´št_¡©us ( ¡©us ); 7044 `·ck‘_hexdump ( d©a + 4, size - 4); 7049 ià( Ýcode_d©a -> r¥_size > 1 && size - 3 == 1) { 7050 ušt8_t ¡©us = *((ušt8_ˆ*è( d©a + 3)); 7052 `´št_¡©us ( ¡©us ); 7056 ià( Ýcode_d©a -> r¥_fixed ) { 7057 ià( size - 3 !ð Ýcode_d©a -> r¥_size ) { 7058 `´št_‹xt ( COLOR_ERROR , "invalid…acket size"); 7059 `·ck‘_hexdump ( d©a + 3, size - 3); 7063 ià( size - 3 < Ýcode_d©a -> r¥_size ) { 7064 `´št_‹xt ( COLOR_ERROR , "too short…acket"); 7065 `·ck‘_hexdump ( d©a + 3, size - 3); 7070 Ýcode_d©a -> `r¥_func ( d©a + 3, size - 3); 7071 } } 7073  $cmd_¡©us_evt (cÚ¡ * d©a , ušt8_t size ) 7075 cÚ¡  bt_hci_evt_cmd_¡©us * evt = d©a ; 7076 ušt16_t Ýcode = `Ë16_to_ýu ( evt ->opcode); 7077 ušt16_t ogf = `cmd_Ýcode_ogf ( Ýcode ); 7078 ušt16_t ocf = `cmd_Ýcode_ocf ( Ýcode ); 7079 cÚ¡  Ýcode_d©a *Ýcode_d©¨ð NULL ; 7080 cÚ¡ * Ýcode_cÞÜ , * Ýcode_¡r ; 7081  i ; 7083  i = 0; Ýcode_bË [i]. ¡r ; i++) { 7084 ià( Ýcode_bË [ i ]. Ýcode == opcode) { 7085 Ýcode_d©a = & Ýcode_bË [ i ]; 7090 ià( Ýcode_d©a ) { 7091 Ýcode_cÞÜ = COLOR_HCI_COMMAND ; 7092 Ýcode_¡r = Ýcode_d©a -> ¡r ; 7094 ià( ogf == 0x3f) { 7095 Ýcode_cÞÜ = COLOR_HCI_COMMAND ; 7096 Ýcode_¡r = "Vendor"; 7098 Ýcode_cÞÜ = COLOR_HCI_COMMAND_UNKNOWN ; 7099 Ýcode_¡r = "Unknown"; 7103 `´št_šd’t (6, Ýcode_cÞÜ , "", Ýcode_¡r , COLOR_OFF , 7104 " (0x%2.2x|0x%4.4xèncmd %d", ogf , ocf , evt -> ncmd ); 7106 `´št_¡©us ( evt -> ¡©us ); 7107 } } 7109  $h¬dw¬e_”rÜ_evt (cÚ¡ * d©a , ušt8_t size ) 7111 cÚ¡  bt_hci_evt_h¬dw¬e_”rÜ * evt = d©a ; 7113 `´št_f›ld ("Code: 0x%2.2x", evt -> code ); 7114 } } 7116  $æush_occu¼ed_evt (cÚ¡ * d©a , ušt8_t size ) 7118 cÚ¡  bt_hci_evt_æush_occu¼ed * evt = d©a ; 7120 `´št_hªdË ( evt -> hªdË ); 7121 } } 7123  $rÞe_chªge_evt (cÚ¡ * d©a , ušt8_t size ) 7125 cÚ¡  bt_hci_evt_rÞe_chªge * evt = d©a ; 7127 `´št_¡©us ( evt -> ¡©us ); 7128 `´št_bdaddr ( evt -> bdaddr ); 7129 `´št_rÞe ( evt -> rÞe ); 7130 } } 7132  $num_com¶‘ed_·ck‘s_evt (cÚ¡ * d©a , ušt8_t size ) 7134 cÚ¡  bt_hci_evt_num_com¶‘ed_·ck‘s * evt = d©a ; 7136 `´št_f›ld ("Num hªdËs: %d", evt -> num_hªdËs ); 7137 `´št_hªdË ( evt -> hªdË ); 7138 `´št_f›ld ("CouÁ: %d", `Ë16_to_ýu ( evt -> couÁ )); 7140 ià( size > (* evt )) 7141 `·ck‘_hexdump ( d©a + (* evt ), size - (*evt)); 7142 } } 7144  $mode_chªge_evt (cÚ¡ * d©a , ušt8_t size ) 7146 cÚ¡  bt_hci_evt_mode_chªge * evt = d©a ; 7148 `´št_¡©us ( evt -> ¡©us ); 7149 `´št_hªdË ( evt -> hªdË ); 7150 `´št_mode ( evt -> mode ); 7151 `´št_š‹rv® ( evt -> š‹rv® ); 7152 } } 7154  $»tuº_lšk_keys_evt (cÚ¡ * d©a , ušt8_t size ) 7156 ušt8_t num_keys = *((ušt8_ˆ*è d©a ); 7158 `´št_f›ld ("Num keys: %d", num_keys ); 7160 `·ck‘_hexdump ( d©a + 1, size - 1); 7161 } } 7163  $pš_code_»que¡_evt (cÚ¡ * d©a , ušt8_t size ) 7165 cÚ¡  bt_hci_evt_pš_code_»que¡ * evt = d©a ; 7167 `´št_bdaddr ( evt -> bdaddr ); 7168 } } 7170  $lšk_key_»que¡_evt (cÚ¡ * d©a , ušt8_t size ) 7172 cÚ¡  bt_hci_evt_lšk_key_»que¡ * evt = d©a ; 7174 `´št_bdaddr ( evt -> bdaddr ); 7175 } } 7177  $lšk_key_nÙify_evt (cÚ¡ * d©a , ušt8_t size ) 7179 cÚ¡  bt_hci_evt_lšk_key_nÙify * evt = d©a ; 7181 `´št_bdaddr ( evt -> bdaddr ); 7182 `´št_lšk_key ( evt -> lšk_key ); 7183 `´št_key_ty³ ( evt -> key_ty³ ); 7184 } } 7186  $loÝback_commªd_evt (cÚ¡ * d©a , ušt8_t size ) 7188 `·ck‘_hexdump ( d©a , size ); 7189 } } 7191  $d©a_bufãr_ov”æow_evt (cÚ¡ * d©a , ušt8_t size ) 7193 cÚ¡  bt_hci_evt_d©a_bufãr_ov”æow * evt = d©a ; 7195 `´št_lšk_ty³ ( evt -> lšk_ty³ ); 7196 } } 7198  $max_¦Ùs_chªge_evt (cÚ¡ * d©a , ušt8_t size ) 7200 cÚ¡  bt_hci_evt_max_¦Ùs_chªge * evt = d©a ; 7202 `´št_hªdË ( evt -> hªdË ); 7203 `´št_f›ld ("Max slÙs: %d", evt -> max_¦Ùs ); 7204 } } 7206  $þock_off£t_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7208 cÚ¡  bt_hci_evt_þock_off£t_com¶‘e * evt = d©a ; 7210 `´št_¡©us ( evt -> ¡©us ); 7211 `´št_hªdË ( evt -> hªdË ); 7212 `´št_þock_off£t ( evt -> þock_off£t ); 7213 } } 7215  $cÚn_pkt_ty³_chªged_evt (cÚ¡ * d©a , ušt8_t size ) 7217 cÚ¡  bt_hci_evt_cÚn_pkt_ty³_chªged * evt = d©a ; 7219 `´št_¡©us ( evt -> ¡©us ); 7220 `´št_hªdË ( evt -> hªdË ); 7221 `´št_pkt_ty³ ( evt -> pkt_ty³ ); 7222 } } 7224  $qos_viÞ©iÚ_evt (cÚ¡ * d©a , ušt8_t size ) 7226 cÚ¡  bt_hci_evt_qos_viÞ©iÚ * evt = d©a ; 7228 `´št_hªdË ( evt -> hªdË ); 7229 } } 7231  $psÿn_mode_chªge_evt (cÚ¡ * d©a , ušt8_t size ) 7233 cÚ¡  bt_hci_evt_psÿn_mode_chªge * evt = d©a ; 7235 `´št_bdaddr ( evt -> bdaddr ); 7236 `´št_psÿn_mode ( evt -> psÿn_mode ); 7237 } } 7239  $psÿn_»p_mode_chªge_evt (cÚ¡ * d©a , ušt8_t size ) 7241 cÚ¡  bt_hci_evt_psÿn_»p_mode_chªge * evt = d©a ; 7243 `´št_bdaddr ( evt -> bdaddr ); 7244 `´št_psÿn_»p_mode ( evt -> psÿn_»p_mode ); 7245 } } 7247  $æow_¥ec_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7249 cÚ¡  bt_hci_evt_æow_¥ec_com¶‘e * evt = d©a ; 7251 `´št_¡©us ( evt -> ¡©us ); 7252 `´št_hªdË ( evt -> hªdË ); 7253 `´št_f›ld ("FÏgs: 0x%2.2x", evt -> æags ); 7255 `´št_æow_dœeùiÚ ( evt -> dœeùiÚ ); 7256 `´št_£rviû_ty³ ( evt -> £rviû_ty³ ); 7258 `´št_f›ld ("Tok’„©e: %d", `Ë32_to_ýu ( evt -> tok’_¿‹ )); 7259 `´št_f›ld ("Token bucket size: %d", 7260 `Ë32_to_ýu ( evt -> tok’_buck‘_size )); 7261 `´št_f›ld ("P—k bªdwidth: %d", `Ë32_to_ýu ( evt -> ³ak_bªdwidth )); 7262 `´št_f›ld ("Acûs Ï‹ncy: %d", `Ë32_to_ýu ( evt -> acûss_Ï‹ncy )); 7263 } } 7265  $šquœy_»suÉ_w™h_rssi_evt (cÚ¡ * d©a , ušt8_t size ) 7267 cÚ¡  bt_hci_evt_šquœy_»suÉ_w™h_rssi * evt = d©a ; 7269 `´št_num_»¥ ( evt -> num_»¥ ); 7270 `´št_bdaddr ( evt -> bdaddr ); 7271 `´št_psÿn_»p_mode ( evt -> psÿn_»p_mode ); 7272 `´št_psÿn_³riod_mode ( evt -> psÿn_³riod_mode ); 7273 `´št_dev_þass ( evt -> dev_þass ); 7274 `´št_þock_off£t ( evt -> þock_off£t ); 7275 `´št_rssi ( evt -> rssi ); 7277 ià( size > (* evt )) 7278 `·ck‘_hexdump ( d©a + (* evt ), size - (*evt)); 7279 } } 7281  $»mÙe_ext_ã©u»s_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7283 cÚ¡  bt_hci_evt_»mÙe_ext_ã©u»s_com¶‘e * evt = d©a ; 7285 `´št_¡©us ( evt -> ¡©us ); 7286 `´št_hªdË ( evt -> hªdË ); 7287 `´št_f›ld ("Page: %d/%d", evt -> ·ge ,ƒvt-> max_·ge ); 7288 `´št_ã©u»s ( evt -> ·ge ,ƒvt-> ã©u»s , 0x00); 7289 } } 7291  $sync_cÚn_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7293 cÚ¡  bt_hci_evt_sync_cÚn_com¶‘e * evt = d©a ; 7295 `´št_¡©us ( evt -> ¡©us ); 7296 `´št_hªdË ( evt -> hªdË ); 7297 `´št_bdaddr ( evt -> bdaddr ); 7298 `´št_lšk_ty³ ( evt -> lšk_ty³ ); 7299 `´št_f›ld ("T¿nsmissiÚ iÁ”v®: 0x%2.2x", evt -> tx_š‹rv® ); 7300 `´št_f›ld ("R‘¿nsmissiÚ wšdow: 0x%2.2x", evt -> »Œªs_wšdow ); 7301 `´št_f›ld ("RX…ack‘†’gth: %d", `Ë16_to_ýu ( evt -> rx_pkt_Ën )); 7302 `´št_f›ld ("TX…ack‘†’gth: %d", `Ë16_to_ýu ( evt -> tx_pkt_Ën )); 7303 `´št_aœ_mode ( evt -> aœ_mode ); 7304 } } 7306  $sync_cÚn_chªged_evt (cÚ¡ * d©a , ušt8_t size ) 7308 cÚ¡  bt_hci_evt_sync_cÚn_chªged * evt = d©a ; 7310 `´št_¡©us ( evt -> ¡©us ); 7311 `´št_hªdË ( evt -> hªdË ); 7312 `´št_f›ld ("T¿nsmissiÚ iÁ”v®: 0x%2.2x", evt -> tx_š‹rv® ); 7313 `´št_f›ld ("R‘¿nsmissiÚ wšdow: 0x%2.2x", evt -> »Œªs_wšdow ); 7314 `´št_f›ld ("RX…ack‘†’gth: %d", `Ë16_to_ýu ( evt -> rx_pkt_Ën )); 7315 `´št_f›ld ("TX…ack‘†’gth: %d", `Ë16_to_ýu ( evt -> tx_pkt_Ën )); 7316 } } 7318  $¢iff_sub¿tšg_evt (cÚ¡ * d©a , ušt8_t size ) 7320 cÚ¡  bt_hci_evt_¢iff_sub¿tšg * evt = d©a ; 7322 `´št_¡©us ( evt -> ¡©us ); 7323 `´št_hªdË ( evt -> hªdË ); 7324 `´št_¦Ù_625 ("Max¿nsm™†©’cy", evt -> max_tx_Ï‹ncy ); 7325 `´št_¦Ù_625 ("Max„eûivÏ‹ncy", evt -> max_rx_Ï‹ncy ); 7326 `´št_¦Ù_625 ("Mš„emÙtimeout", evt -> mš_»mÙe_timeout ); 7327 `´št_¦Ù_625 ("Mš†oÿÈtimeout", evt -> mš_loÿl_timeout ); 7328 } } 7330  $ext_šquœy_»suÉ_evt (cÚ¡ * d©a , ušt8_t size ) 7332 cÚ¡  bt_hci_evt_ext_šquœy_»suÉ * evt = d©a ; 7334 `´št_num_»¥ ( evt -> num_»¥ ); 7335 `´št_bdaddr ( evt -> bdaddr ); 7336 `´št_psÿn_»p_mode ( evt -> psÿn_»p_mode ); 7337 `´št_psÿn_³riod_mode ( evt -> psÿn_³riod_mode ); 7338 `´št_dev_þass ( evt -> dev_þass ); 7339 `´št_þock_off£t ( evt -> þock_off£t ); 7340 `´št_rssi ( evt -> rssi ); 7341 `´št_eœ ( evt -> d©a , Óvt->d©a), çl£ ); 7342 } } 7344  $’üy±_key_»äesh_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7346 cÚ¡  bt_hci_evt_’üy±_key_»äesh_com¶‘e * evt = d©a ; 7348 `´št_¡©us ( evt -> ¡©us ); 7349 `´št_hªdË ( evt -> hªdË ); 7350 } } 7352  $io_ÿ·bž™y_»que¡_evt (cÚ¡ * d©a , ušt8_t size ) 7354 cÚ¡  bt_hci_evt_io_ÿ·bž™y_»que¡ * evt = d©a ; 7356 `´št_bdaddr ( evt -> bdaddr ); 7357 } } 7359  $io_ÿ·bž™y_»¥Ú£_evt (cÚ¡ * d©a , ušt8_t size ) 7361 cÚ¡  bt_hci_evt_io_ÿ·bž™y_»¥Ú£ * evt = d©a ; 7363 `´št_bdaddr ( evt -> bdaddr ); 7364 `´št_io_ÿ·bž™y ( evt -> ÿ·bž™y ); 7365 `´št_oob_d©a ( evt -> oob_d©a ); 7366 `´št_auth’tiÿtiÚ ( evt -> auth’tiÿtiÚ ); 7367 } } 7369  $u£r_cÚfœm_»que¡_evt (cÚ¡ * d©a , ušt8_t size ) 7371 cÚ¡  bt_hci_evt_u£r_cÚfœm_»que¡ * evt = d©a ; 7373 `´št_bdaddr ( evt -> bdaddr ); 7374 `´št_·sskey ( evt -> ·sskey ); 7375 } } 7377  $u£r_·sskey_»que¡_evt (cÚ¡ * d©a , ušt8_t size ) 7379 cÚ¡  bt_hci_evt_u£r_·sskey_»que¡ * evt = d©a ; 7381 `´št_bdaddr ( evt -> bdaddr ); 7382 } } 7384  $»mÙe_oob_d©a_»que¡_evt (cÚ¡ * d©a , ušt8_t size ) 7386 cÚ¡  bt_hci_evt_»mÙe_oob_d©a_»que¡ * evt = d©a ; 7388 `´št_bdaddr ( evt -> bdaddr ); 7389 } } 7391  $sim¶e_·œšg_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7393 cÚ¡  bt_hci_evt_sim¶e_·œšg_com¶‘e * evt = d©a ; 7395 `´št_¡©us ( evt -> ¡©us ); 7396 `´št_bdaddr ( evt -> bdaddr ); 7397 } } 7399  $lšk_supv_timeout_chªged_evt (cÚ¡ * d©a , ušt8_t size ) 7401 cÚ¡  bt_hci_evt_lšk_supv_timeout_chªged * evt = d©a ; 7403 `´št_hªdË ( evt -> hªdË ); 7404 `´št_timeout ( evt -> timeout ); 7405 } } 7407  $’hªûd_æush_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7409 cÚ¡  bt_hci_evt_’hªûd_æush_com¶‘e * evt = d©a ; 7411 `´št_hªdË ( evt -> hªdË ); 7412 } } 7414  $u£r_·sskey_nÙify_evt (cÚ¡ * d©a , ušt8_t size ) 7416 cÚ¡  bt_hci_evt_u£r_·sskey_nÙify * evt = d©a ; 7418 `´št_bdaddr ( evt -> bdaddr ); 7419 `´št_·sskey ( evt -> ·sskey ); 7420 } } 7422  $key´ess_nÙify_evt (cÚ¡ * d©a , ušt8_t size ) 7424 cÚ¡  bt_hci_evt_key´ess_nÙify * evt = d©a ; 7425 cÚ¡ * ¡r ; 7427 `´št_bdaddr ( evt -> bdaddr ); 7429  evt -> ty³ ) { 7431 ¡r = "Passkeyƒntry started"; 7434 ¡r = "Passkey digitƒntered"; 7437 ¡r = "Passkey digitƒrased"; 7440 ¡r = "Passkey clared"; 7443 ¡r = "Passkeyƒntry completed"; 7446 ¡r = "Reserved"; 7450 `´št_f›ld ("NÙifiÿtiÚy³: % (0x%2.2x)", ¡r , evt -> ty³ ); 7451 } } 7453  $»mÙe_ho¡_ã©u»s_nÙify_evt (cÚ¡ * d©a , ušt8_t size ) 7455 cÚ¡  bt_hci_evt_»mÙe_ho¡_ã©u»s_nÙify * evt = d©a ; 7457 `´št_bdaddr ( evt -> bdaddr ); 7458 `´št_ã©u»s (1, evt -> ã©u»s , 0x00); 7459 } } 7461  $phy_lšk_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7463 cÚ¡  bt_hci_evt_phy_lšk_com¶‘e * evt = d©a ; 7465 `´št_¡©us ( evt -> ¡©us ); 7466 `´št_phy_hªdË ( evt -> phy_hªdË ); 7467 } } 7469  $chªÃl_£Ëùed_evt (cÚ¡ * d©a , ušt8_t size ) 7471 cÚ¡  bt_hci_evt_chªÃl_£Ëùed * evt = d©a ; 7473 `´št_phy_hªdË ( evt -> phy_hªdË ); 7474 } } 7476  $discÚn_phy_lšk_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7478 cÚ¡  bt_hci_evt_discÚn_phy_lšk_com¶‘e * evt = d©a ; 7480 `´št_¡©us ( evt -> ¡©us ); 7481 `´št_phy_hªdË ( evt -> phy_hªdË ); 7482 `´št_»asÚ ( evt -> »asÚ ); 7483 } } 7485  $phy_lšk_loss_—¾y_w¬nšg_evt (cÚ¡ * d©a , ušt8_t size ) 7487 cÚ¡  bt_hci_evt_phy_lšk_loss_—¾y_w¬nšg * evt = d©a ; 7488 cÚ¡ * ¡r ; 7490 `´št_phy_hªdË ( evt -> phy_hªdË ); 7492  evt -> »asÚ ) { 7494 ¡r = "Unknown"; 7497 ¡r = "Range„elated"; 7500 ¡r = "Bandwidth„elated"; 7503 ¡r = "Resolving conflict"; 7506 ¡r = "Interference"; 7509 ¡r = "Reserved"; 7513 `´št_f›ld ("R—sÚ: % (0x%2.2x)", ¡r , evt -> »asÚ ); 7514 } } 7516  $phy_lšk_»cov”y_evt (cÚ¡ * d©a , ušt8_t size ) 7518 cÚ¡  bt_hci_evt_phy_lšk_»cov”y * evt = d©a ; 7520 `´št_phy_hªdË ( evt -> phy_hªdË ); 7521 } } 7523  $logic_lšk_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7525 cÚ¡  bt_hci_evt_logic_lšk_com¶‘e * evt = d©a ; 7527 `´št_¡©us ( evt -> ¡©us ); 7528 `´št_hªdË ( evt -> hªdË ); 7529 `´št_phy_hªdË ( evt -> phy_hªdË ); 7530 `´št_f›ld ("TX flow s³c: 0x%2.2x", evt -> æow_¥ec ); 7531 } } 7533  $discÚn_logic_lšk_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7535 cÚ¡  bt_hci_evt_discÚn_logic_lšk_com¶‘e * evt = d©a ; 7537 `´št_¡©us ( evt -> ¡©us ); 7538 `´št_hªdË ( evt -> hªdË ); 7539 `´št_»asÚ ( evt -> »asÚ ); 7540 } } 7542  $æow_¥ec_modify_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7544 cÚ¡  bt_hci_evt_æow_¥ec_modify_com¶‘e * evt = d©a ; 7546 `´št_¡©us ( evt -> ¡©us ); 7547 `´št_hªdË ( evt -> hªdË ); 7548 } } 7550  $num_com¶‘ed_d©a_blocks_evt (cÚ¡ * d©a , ušt8_t size ) 7552 cÚ¡  bt_hci_evt_num_com¶‘ed_d©a_blocks * evt = d©a ; 7554 `´št_f›ld ("Total‚um data blocks: %d", 7555 `Ë16_to_ýu ( evt -> tÙ®_num_blocks )); 7556 `´št_f›ld ("Num hªdËs: %d", evt -> num_hªdËs ); 7557 `´št_hªdË ( evt -> hªdË ); 7558 `´št_f›ld ("Num…ack‘s: %d", evt -> num_·ck‘s ); 7559 `´št_f›ld ("Num blocks: %d", evt -> num_blocks ); 7561 ià( size > (* evt )) 7562 `·ck‘_hexdump ( d©a + (* evt ), size - (*evt)); 7563 } } 7565  $shÜt_¿nge_mode_chªge_evt (cÚ¡ * d©a , ušt8_t size ) 7567 cÚ¡  bt_hci_evt_shÜt_¿nge_mode_chªge * evt = d©a ; 7569 `´št_¡©us ( evt -> ¡©us ); 7570 `´št_phy_hªdË ( evt -> phy_hªdË ); 7571 `´št_shÜt_¿nge_mode ( evt -> mode ); 7572 } } 7574  $amp_¡©us_chªge_evt (cÚ¡ * d©a , ušt8_t size ) 7576 cÚ¡  bt_hci_evt_amp_¡©us_chªge * evt = d©a ; 7578 `´št_¡©us ( evt -> ¡©us ); 7579 `´št_amp_¡©us ( evt -> amp_¡©us ); 7580 } } 7582  $sync_Œaš_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7584 cÚ¡  bt_hci_evt_sync_Œaš_com¶‘e * evt = d©a ; 7586 `´št_¡©us ( evt -> ¡©us ); 7587 } } 7589  $sync_Œaš_»ûived_evt (cÚ¡ * d©a , ušt8_t size ) 7591 cÚ¡  bt_hci_evt_sync_Œaš_»ûived * evt = d©a ; 7593 `´št_¡©us ( evt -> ¡©us ); 7594 `´št_bdaddr ( evt -> bdaddr ); 7595 `´št_f›ld ("Off£t: 0x%8.8x", `Ë32_to_ýu ( evt -> off£t )); 7596 `´št_chªÃl_m­ ( evt -> m­ ); 7597 `´št_É_addr ( evt -> É_addr ); 7598 `´št_f›ld ("Next broadcast instant: 0x%4.4x", 7599 `Ë16_to_ýu ( evt -> š¡ªt )); 7600 `´št_š‹rv® ( evt -> š‹rv® ); 7601 `´št_f›ld ("S”viû D©a: 0x%2.2x", evt -> £rviû_d©a ); 7602 } } 7604  $¦ave_brßdÿ¡_»ûive_evt (cÚ¡ * d©a , ušt8_t size ) 7606 cÚ¡  bt_hci_evt_¦ave_brßdÿ¡_»ûive * evt = d©a ; 7608 `´št_bdaddr ( evt -> bdaddr ); 7609 `´št_É_addr ( evt -> É_addr ); 7610 `´št_f›ld ("Clock: 0x%8.8x", `Ë32_to_ýu ( evt -> þock )); 7611 `´št_f›ld ("Off£t: 0x%8.8x", `Ë32_to_ýu ( evt -> off£t )); 7612 `´št_f›ld ("Reûiv¡©us: 0x%2.2x", evt -> ¡©us ); 7613 `´št_brßdÿ¡_äagm’t ( evt -> äagm’t ); 7614 `´št_f›ld ("L’gth: %d", evt -> Ëngth ); 7616 ià( size - 18 !ð evt -> Ëngth ) 7617 `´št_‹xt ( COLOR_ERROR , "invalid data size (%d != %d)", 7618 size - 18, evt -> Ëngth ); 7620 `·ck‘_hexdump ( d©a + 18, size - 18); 7621 } } 7623  $¦ave_brßdÿ¡_timeout_evt (cÚ¡ * d©a , ušt8_t size ) 7625 cÚ¡  bt_hci_evt_¦ave_brßdÿ¡_timeout * evt = d©a ; 7627 `´št_bdaddr ( evt -> bdaddr ); 7628 `´št_É_addr ( evt -> É_addr ); 7629 } } 7631  $Œunÿ‹d_·ge_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7633 cÚ¡  bt_hci_evt_Œunÿ‹d_·ge_com¶‘e * evt = d©a ; 7635 `´št_¡©us ( evt -> ¡©us ); 7636 `´št_bdaddr ( evt -> bdaddr ); 7637 } } 7639  $¦ave_·ge_»¥Ú£_timeout_evt (cÚ¡ * d©a , ušt8_t size ) 7641 } } 7643  $¦ave_brßdÿ¡_chªÃl_m­_chªge_evt (cÚ¡ * d©a , ušt8_t size ) 7645 cÚ¡  bt_hci_evt_¦ave_brßdÿ¡_chªÃl_m­_chªge * evt = d©a ; 7647 `´št_chªÃl_m­ ( evt -> m­ ); 7648 } } 7650  $šquœy_»¥Ú£_nÙify_evt (cÚ¡ * d©a , ušt8_t size ) 7652 cÚ¡  bt_hci_evt_šquœy_»¥Ú£_nÙify * evt = d©a ; 7654 `´št_Ÿc ( evt -> Ïp ); 7655 `´št_rssi ( evt -> rssi ); 7656 } } 7658  $auth_·ylßd_timeout_expœed_evt (cÚ¡ * d©a , ušt8_t size ) 7660 cÚ¡  bt_hci_evt_auth_·ylßd_timeout_expœed * evt = d©a ; 7662 `´št_hªdË ( evt -> hªdË ); 7663 } } 7665  $Ë_cÚn_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7667 cÚ¡  bt_hci_evt_Ë_cÚn_com¶‘e * evt = d©a ; 7669 `´št_¡©us ( evt -> ¡©us ); 7670 `´št_hªdË ( evt -> hªdË ); 7671 `´št_rÞe ( evt -> rÞe ); 7672 `´št_³”_addr_ty³ ("P“¸add»s ty³", evt -> ³”_addr_ty³ ); 7673 `´št_addr ("P“¸add»ss", evt -> ³”_addr ,ƒvt-> ³”_addr_ty³ ); 7674 `´št_¦Ù_125 ("CÚÃùiÚ iÁ”v®", evt -> š‹rv® ); 7675 `´št_¦Ù_125 ("CÚÃùiÚ†©’cy", evt -> Ï‹ncy ); 7676 `´št_f›ld ("Supervisionimeout: %d msec (0x%4.4x)", 7677 `Ë16_to_ýu ( evt -> supv_timeout ) * 10, 7678 `Ë16_to_ýu ( evt -> supv_timeout )); 7679 `´št_f›ld ("Ma¡” clock‡ccu¿cy: 0x%2.2x", evt -> þock_accu¿cy ); 7681 ià( evt -> ¡©us == 0x00) 7682 `assign_hªdË ( `Ë16_to_ýu ( evt -> hªdË ), 0x01); 7683 } } 7685  $Ë_adv_»pÜt_evt (cÚ¡ * d©a , ušt8_t size ) 7687 cÚ¡  bt_hci_evt_Ë_adv_»pÜt * evt = d©a ; 7688 ušt8_t evt_Ën ; 7689 št8_t * rssi ; 7691 `´št_num_»pÜts ( evt -> num_»pÜts ); 7693 »pÜt : 7694 `´št_adv_ev’t_ty³ ( evt -> ev’t_ty³ ); 7695 `´št_³”_addr_ty³ ("Add»s ty³", evt -> addr_ty³ ); 7696 `´št_addr ("Add»ss", evt -> addr ,ƒvt-> addr_ty³ ); 7697 `´št_f›ld ("D©¨Ëngth: %d", evt -> d©a_Ën ); 7698 `´št_eœ ( evt -> d©a ,ƒvt-> d©a_Ën , Œue ); 7700 rssi = ( št8_t *è( evt -> d©a +ƒvt-> d©a_Ën ); 7701 `´št_rssi (* rssi ); 7703 evt_Ën = (* evt è+ƒvt-> d©a_Ën + 1; 7705 ià( size > evt_Ën ) { 7706 d©a +ð evt_Ën - 1; 7707 size -ð evt_Ën - 1; 7708 evt = d©a ; 7709  »pÜt ; 7711 } } 7713  $Ë_cÚn_upd©e_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7715 cÚ¡  bt_hci_evt_Ë_cÚn_upd©e_com¶‘e * evt = d©a ; 7717 `´št_¡©us ( evt -> ¡©us ); 7718 `´št_hªdË ( evt -> hªdË ); 7719 `´št_¦Ù_125 ("CÚÃùiÚ iÁ”v®", evt -> š‹rv® ); 7720 `´št_¦Ù_125 ("CÚÃùiÚ†©’cy", evt -> Ï‹ncy ); 7721 `´št_f›ld ("Supervisionimeout: %d msec (0x%4.4x)", 7722 `Ë16_to_ýu ( evt -> supv_timeout ) * 10, 7723 `Ë16_to_ýu ( evt -> supv_timeout )); 7724 } } 7726  $Ë_»mÙe_ã©u»s_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7728 cÚ¡  bt_hci_evt_Ë_»mÙe_ã©u»s_com¶‘e * evt = d©a ; 7730 `´št_¡©us ( evt -> ¡©us ); 7731 `´št_hªdË ( evt -> hªdË ); 7732 `´št_ã©u»s (0, evt -> ã©u»s , 0x01); 7733 } } 7735  $Ë_lÚg_‹rm_key_»que¡_evt (cÚ¡ * d©a , ušt8_t size ) 7737 cÚ¡  bt_hci_evt_Ë_lÚg_‹rm_key_»que¡ * evt = d©a ; 7739 `´št_hªdË ( evt -> hªdË ); 7740 `´št_¿ndom_numb” ( evt -> ¿nd ); 7741 `´št_’üy±ed_div”sif›r ( evt -> ediv ); 7742 } } 7744  $Ë_cÚn_·¿m_»que¡_evt (cÚ¡ * d©a , ušt8_t size ) 7746 cÚ¡  bt_hci_evt_Ë_cÚn_·¿m_»que¡ * evt = d©a ; 7748 `´št_hªdË ( evt -> hªdË ); 7749 `´št_¦Ù_125 ("Mš cÚÃùiÚ iÁ”v®", evt -> mš_š‹rv® ); 7750 `´št_¦Ù_125 ("Max cÚÃùiÚ iÁ”v®", evt -> max_š‹rv® ); 7751 `´št_f›ld ("CÚÃùiÚ†©’cy: 0x%4.4x", `Ë16_to_ýu ( evt -> Ï‹ncy )); 7752 `´št_f›ld ("Supervisionimeout: %d msec (0x%4.4x)", 7753 `Ë16_to_ýu ( evt -> supv_timeout ) * 10, 7754 `Ë16_to_ýu ( evt -> supv_timeout )); 7755 } } 7757  $Ë_d©a_Ëngth_chªge_evt (cÚ¡ * d©a , ušt8_t size ) 7759 cÚ¡  bt_hci_evt_Ë_d©a_Ëngth_chªge * evt = d©a ; 7761 `´št_hªdË ( evt -> hªdË ); 7762 `´št_f›ld ("Max TX où‘s: %d", `Ë16_to_ýu ( evt -> max_tx_Ën )); 7763 `´št_f›ld ("Max TXime: %d", `Ë16_to_ýu ( evt -> max_tx_time )); 7764 `´št_f›ld ("Max RX où‘s: %d", `Ë16_to_ýu ( evt -> max_rx_Ën )); 7765 `´št_f›ld ("Max RXime: %d", `Ë16_to_ýu ( evt -> max_rx_time )); 7766 } } 7768  $Ë_»ad_loÿl_pk256_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7770 cÚ¡  bt_hci_evt_Ë_»ad_loÿl_pk256_com¶‘e * evt = d©a ; 7772 `´št_¡©us ( evt -> ¡©us ); 7773 `´št_pk256 ("LoÿÈP-256…ubliøkey", evt -> loÿl_pk256 ); 7774 } } 7776  $Ë_g’”©e_dhkey_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7778 cÚ¡  bt_hci_evt_Ë_g’”©e_dhkey_com¶‘e * evt = d©a ; 7780 `´št_¡©us ( evt -> ¡©us ); 7781 `´št_dhkey ( evt -> dhkey ); 7782 } } 7784  $Ë_’hªûd_cÚn_com¶‘e_evt (cÚ¡ * d©a , ušt8_t size ) 7786 cÚ¡  bt_hci_evt_Ë_’hªûd_cÚn_com¶‘e * evt = d©a ; 7788 `´št_¡©us ( evt -> ¡©us ); 7789 `´št_hªdË ( evt -> hªdË ); 7790 `´št_rÞe ( evt -> rÞe ); 7791 `´št_³”_addr_ty³ ("P“¸add»s ty³", evt -> ³”_addr_ty³ ); 7792 `´št_addr ("P“¸add»ss", evt -> ³”_addr ,ƒvt-> ³”_addr_ty³ ); 7793 `´št_addr ("LoÿÈ»sÞvabË…riv©add»ss", evt -> loÿl_½a , 0x01); 7794 `´št_addr ("P“¸»sÞvabË…riv©add»ss", evt -> ³”_½a , 0x01); 7795 `´št_¦Ù_125 ("CÚÃùiÚ iÁ”v®", evt -> š‹rv® ); 7796 `´št_¦Ù_125 ("CÚÃùiÚ†©’cy", evt -> Ï‹ncy ); 7797 `´št_f›ld ("Supervisionimeout: %d msec (0x%4.4x)", 7798 `Ë16_to_ýu ( evt -> supv_timeout ) * 10, 7799 `Ë16_to_ýu ( evt -> supv_timeout )); 7800 `´št_f›ld ("Ma¡” clock‡ccu¿cy: 0x%2.2x", evt -> þock_accu¿cy ); 7802 ià( evt -> ¡©us == 0x00) 7803 `assign_hªdË ( `Ë16_to_ýu ( evt -> hªdË ), 0x01); 7804 } } 7806  $Ë_dœeù_adv_»pÜt_evt (cÚ¡ * d©a , ušt8_t size ) 7808 cÚ¡  bt_hci_evt_Ë_dœeù_adv_»pÜt * evt = d©a ; 7810 `´št_num_»pÜts ( evt -> num_»pÜts ); 7812 `´št_adv_ev’t_ty³ ( evt -> ev’t_ty³ ); 7813 `´št_³”_addr_ty³ ("Add»s ty³", evt -> addr_ty³ ); 7814 `´št_addr ("Add»ss", evt -> addr ,ƒvt-> addr_ty³ ); 7815 `´št_addr_ty³ ("Dœeù‡dd»s ty³", evt -> dœeù_addr_ty³ ); 7816 `´št_addr ("Dœeù‡dd»ss", evt -> dœeù_addr ,ƒvt-> dœeù_addr_ty³ ); 7817 `´št_rssi ( evt -> rssi ); 7819 ià( size > (* evt )) 7820 `·ck‘_hexdump ( d©a + (* evt ), size - (*evt)); 7821 } } 7823  ssubev’t_d©a { 7824 ušt8_t msubev’t ; 7825 cÚ¡ * m¡r ; 7826 (* mfunc è(cÚ¡ * md©a , ušt8_t msize ); 7827 ušt8_t msize ; 7828 boÞ mfixed ; 7831 cÚ¡  subev’t_d©a gsubev’t_bË [] = { 7833 Ë_cÚn_com¶‘e_evt , 18, Œue }, 7835 Ë_adv_»pÜt_evt , 1, çl£ }, 7837 Ë_cÚn_upd©e_com¶‘e_evt , 9, Œue }, 7839 Ë_»mÙe_ã©u»s_com¶‘e_evt , 11, Œue }, 7841 Ë_lÚg_‹rm_key_»que¡_evt , 12, Œue }, 7843 Ë_cÚn_·¿m_»que¡_evt , 10, Œue }, 7845 Ë_d©a_Ëngth_chªge_evt , 10, Œue }, 7847 Ë_»ad_loÿl_pk256_com¶‘e_evt , 65, Œue }, 7849 Ë_g’”©e_dhkey_com¶‘e_evt , 33, Œue }, 7851 Ë_’hªûd_cÚn_com¶‘e_evt , 30, Œue }, 7853 Ë_dœeù_adv_»pÜt_evt , 1, çl£ }, 7857  $Ë_m‘a_ev’t_evt (cÚ¡ * d©a , ušt8_t size ) 7859 ušt8_t subev’t = *((cÚ¡ ušt8_ˆ*è d©a ); 7860 cÚ¡  subev’t_d©a *subev’t_d©¨ð NULL ; 7861 cÚ¡ * subev’t_cÞÜ , * subev’t_¡r ; 7862  i ; 7864  i = 0; subev’t_bË [i]. ¡r ; i++) { 7865 ià( subev’t_bË [ i ]. subev’t == subevent) { 7866 subev’t_d©a = & subev’t_bË [ i ]; 7871 ià( subev’t_d©a ) { 7872 ià( subev’t_d©a -> func ) 7873 subev’t_cÞÜ = COLOR_HCI_EVENT ; 7875 subev’t_cÞÜ = COLOR_HCI_EVENT_UNKNOWN ; 7876 subev’t_¡r = subev’t_d©a -> ¡r ; 7878 subev’t_cÞÜ = COLOR_HCI_EVENT_UNKNOWN ; 7879 subev’t_¡r = "Unknown"; 7882 `´št_šd’t (6, subev’t_cÞÜ , "", subev’t_¡r , COLOR_OFF , 7883 " (0x%2.2x)", subev’t ); 7885 ià(! subev’t_d©a || !subev’t_d©a-> func ) { 7886 `·ck‘_hexdump ( d©a + 1, size - 1); 7890 ià( subev’t_d©a -> fixed ) { 7891 ià( size - 1 !ð subev’t_d©a ->size) { 7892 `´št_‹xt ( COLOR_ERROR , "invalid…acket size"); 7893 `·ck‘_hexdump ( d©a + 1, size - 1); 7897 ià( size - 1 < subev’t_d©a ->size) { 7898 `´št_‹xt ( COLOR_ERROR , "too short…acket"); 7899 `·ck‘_hexdump ( d©a + 1, size - 1); 7904 subev’t_d©a -> `func ( d©a + 1, size - 1); 7905 } } 7907  $v’dÜ_evt (cÚ¡ * d©a , ušt8_t size ) 7909 `v’dÜ_ev’t (0xffff, d©a , size ); 7910 } } 7912  sev’t_d©a { 7913 ušt8_t mev’t ; 7914 cÚ¡ * m¡r ; 7915 (* mfunc è(cÚ¡ * md©a , ušt8_t msize ); 7916 ušt8_t msize ; 7917 boÞ mfixed ; 7920 cÚ¡  ev’t_d©a gev’t_bË [] = { 7922 šquœy_com¶‘e_evt , 1, Œue }, 7924 šquœy_»suÉ_evt , 1, çl£ }, 7926 cÚn_com¶‘e_evt , 11, Œue }, 7928 cÚn_»que¡_evt , 10, Œue }, 7930 discÚÃù_com¶‘e_evt , 4, Œue }, 7932 auth_com¶‘e_evt , 3, Œue }, 7934 »mÙe_Çme_»que¡_com¶‘e_evt , 255, Œue }, 7936 ’üy±_chªge_evt , 4, Œue }, 7938 chªge_cÚn_lšk_key_com¶‘e_evt , 3, Œue }, 7940 ma¡”_lšk_key_com¶‘e_evt , 4, Œue }, 7942 »mÙe_ã©u»s_com¶‘e_evt , 11, Œue }, 7944 »mÙe_v”siÚ_com¶‘e_evt , 8, Œue }, 7946 qos_£tup_com¶‘e_evt , 21, Œue }, 7948 cmd_com¶‘e_evt , 3, çl£ }, 7950 cmd_¡©us_evt , 4, Œue }, 7952 h¬dw¬e_”rÜ_evt , 1, Œue }, 7954 æush_occu¼ed_evt , 2, Œue }, 7956 rÞe_chªge_evt , 8, Œue }, 7958 num_com¶‘ed_·ck‘s_evt , 1, çl£ }, 7960 mode_chªge_evt , 6, Œue }, 7962 »tuº_lšk_keys_evt , 1, çl£ }, 7964 pš_code_»que¡_evt , 6, Œue }, 7966 lšk_key_»que¡_evt , 6, Œue }, 7968 lšk_key_nÙify_evt , 23, Œue }, 7970 loÝback_commªd_evt , 3, çl£ }, 7972 d©a_bufãr_ov”æow_evt , 1, Œue }, 7974 max_¦Ùs_chªge_evt , 3, Œue }, 7976 þock_off£t_com¶‘e_evt , 5, Œue }, 7978 cÚn_pkt_ty³_chªged_evt , 5, Œue }, 7980 qos_viÞ©iÚ_evt , 2, Œue }, 7982 psÿn_mode_chªge_evt , 7, Œue }, 7984 psÿn_»p_mode_chªge_evt , 7, Œue }, 7986 æow_¥ec_com¶‘e_evt , 22, Œue }, 7988 šquœy_»suÉ_w™h_rssi_evt , 1, çl£ }, 7990 »mÙe_ext_ã©u»s_com¶‘e_evt , 13, Œue }, 7992 sync_cÚn_com¶‘e_evt , 17, Œue }, 7994 sync_cÚn_chªged_evt , 9, Œue }, 7996 ¢iff_sub¿tšg_evt , 11, Œue }, 7998 ext_šquœy_»suÉ_evt , 1, çl£ }, 8000 ’üy±_key_»äesh_com¶‘e_evt , 3, Œue }, 8002 io_ÿ·bž™y_»que¡_evt , 6, Œue }, 8004 io_ÿ·bž™y_»¥Ú£_evt , 9, Œue }, 8006 u£r_cÚfœm_»que¡_evt , 10, Œue }, 8008 u£r_·sskey_»que¡_evt , 6, Œue }, 8010 »mÙe_oob_d©a_»que¡_evt , 6, Œue }, 8012 sim¶e_·œšg_com¶‘e_evt , 7, Œue }, 8014 lšk_supv_timeout_chªged_evt , 4, Œue }, 8016 ’hªûd_æush_com¶‘e_evt , 2, Œue }, 8018 u£r_·sskey_nÙify_evt , 10, Œue }, 8020 key´ess_nÙify_evt , 7, Œue }, 8022 »mÙe_ho¡_ã©u»s_nÙify_evt , 14, Œue }, 8024 Ë_m‘a_ev’t_evt , 1, çl£ }, 8026 phy_lšk_com¶‘e_evt , 2, Œue }, 8028 chªÃl_£Ëùed_evt , 1, Œue }, 8030 discÚn_phy_lšk_com¶‘e_evt , 3, Œue }, 8032 phy_lšk_loss_—¾y_w¬nšg_evt , 2, Œue }, 8034 phy_lšk_»cov”y_evt , 1, Œue }, 8036 logic_lšk_com¶‘e_evt , 5, Œue }, 8038 discÚn_logic_lšk_com¶‘e_evt , 4, Œue }, 8040 æow_¥ec_modify_com¶‘e_evt , 3, Œue }, 8042 num_com¶‘ed_d©a_blocks_evt , 3, çl£ }, 8047 shÜt_¿nge_mode_chªge_evt , 3, Œue }, 8049 amp_¡©us_chªge_evt , 2, Œue }, 8052 sync_Œaš_com¶‘e_evt , 1, Œue }, 8054 sync_Œaš_»ûived_evt , 29, Œue }, 8056 ¦ave_brßdÿ¡_»ûive_evt , 18, çl£ }, 8058 ¦ave_brßdÿ¡_timeout_evt , 7, Œue }, 8060 Œunÿ‹d_·ge_com¶‘e_evt , 7, Œue }, 8062 ¦ave_·ge_»¥Ú£_timeout_evt , 0, Œue }, 8064 ¦ave_brßdÿ¡_chªÃl_m­_chªge_evt , 10, Œue }, 8066 šquœy_»¥Ú£_nÙify_evt , 4, Œue }, 8068 auth_·ylßd_timeout_expœed_evt , 2, Œue }, 8070 { 0xff, "V’dÜ", v’dÜ_evt , 0, çl£ }, 8074  $·ck‘_Ãw_šdex ( timev® * tv , ušt16_t šdex , cÚ¡ * Ïb– , 8075 ušt8_t ty³ , ušt8_ˆ bus , cÚ¡ * Çme ) 8077  d‘ažs [48]; 8079 `¥rštf ( d‘ažs , "(%s,%s,%s)", `hci_ty³to¡r ( ty³ ), 8080 `hci_bu¡o¡r ( bus ), Çme ); 8082 `´št_·ck‘ ( tv , šdex , '=', COLOR_NEW_INDEX , "New Index", 8083 Ïb– , d‘ažs ); 8084 } } 8086  $·ck‘_d–_šdex ( timev® * tv , ušt16_t šdex , cÚ¡ * Ïb– ) 8088 `´št_·ck‘ ( tv , šdex , '=', COLOR_DEL_INDEX , "Delete Index", 8089 Ïb– , NULL ); 8090 } } 8092  $·ck‘_hci_commªd ( timev® * tv , ušt16_t šdex , 8093 cÚ¡ * d©a , ušt16_t size ) 8095 cÚ¡ hci_commªd_hdr * hdr = d©a ; 8096 ušt16_t Ýcode = `Ë16_to_ýu ( hdr ->opcode); 8097 ušt16_t ogf = `cmd_Ýcode_ogf ( Ýcode ); 8098 ušt16_t ocf = `cmd_Ýcode_ocf ( Ýcode ); 8099 cÚ¡  Ýcode_d©a *Ýcode_d©¨ð NULL ; 8100 cÚ¡ * Ýcode_cÞÜ , * Ýcode_¡r ; 8101  exŒa_¡r [25]; 8102  i ; 8104 ià( size < HCI_COMMAND_HDR_SIZE ) { 8105 `¥rštf ( exŒa_¡r , "Ö’ %d)", size ); 8106 `´št_·ck‘ ( tv , šdex , '*', COLOR_ERROR , 8107 "M®fÜmed HCI Commªd…ack‘", NULL , exŒa_¡r ); 8108 `·ck‘_hexdump ( d©a , size ); 8112 d©a +ð HCI_COMMAND_HDR_SIZE ; 8113 size -ð HCI_COMMAND_HDR_SIZE ; 8115  i = 0; Ýcode_bË [i]. ¡r ; i++) { 8116 ià( Ýcode_bË [ i ]. Ýcode == opcode) { 8117 Ýcode_d©a = & Ýcode_bË [ i ]; 8122 ià( Ýcode_d©a ) { 8123 ià( Ýcode_d©a -> cmd_func ) 8124 Ýcode_cÞÜ = COLOR_HCI_COMMAND ; 8126 Ýcode_cÞÜ = COLOR_HCI_COMMAND_UNKNOWN ; 8127 Ýcode_¡r = Ýcode_d©a -> ¡r ; 8129 ià( ogf == 0x3f) { 8130 Ýcode_cÞÜ = COLOR_HCI_COMMAND ; 8131 Ýcode_¡r = "Vendor"; 8133 Ýcode_cÞÜ = COLOR_HCI_COMMAND_UNKNOWN ; 8134 Ýcode_¡r = "Unknown"; 8138 `¥rštf ( exŒa_¡r , "(0x%2.2x|0x%4.4x趒 %d", ogf , ocf , hdr -> ¶’ ); 8140 `´št_·ck‘ ( tv , šdex , '<', Ýcode_cÞÜ , "HCI Command", 8141 Ýcode_¡r , exŒa_¡r ); 8143 ià(! Ýcode_d©a || !Ýcode_d©a-> cmd_func ) { 8144 `·ck‘_hexdump ( d©a , size ); 8148 ià( size !ð hdr -> ¶’ ) { 8149 `´št_‹xt ( COLOR_ERROR , "šv®id…ack‘ siz(%u !ð%u)", size , 8150 hdr -> ¶’ ); 8151 `·ck‘_hexdump ( d©a , size ); 8155 ià( Ýcode_d©a -> cmd_fixed ) { 8156 ià( hdr -> ¶’ !ð Ýcode_d©a -> cmd_size ) { 8157 `´št_‹xt ( COLOR_ERROR , "invalid…acket size"); 8158 `·ck‘_hexdump ( d©a , size ); 8162 ià( hdr -> ¶’ < Ýcode_d©a -> cmd_size ) { 8163 `´št_‹xt ( COLOR_ERROR , "too short…acket"); 8164 `·ck‘_hexdump ( d©a , size ); 8169 Ýcode_d©a -> `cmd_func ( d©a , hdr -> ¶’ ); 8170 } } 8172  $·ck‘_hci_ev’t ( timev® * tv , ušt16_t šdex , 8173 cÚ¡ * d©a , ušt16_t size ) 8175 cÚ¡ hci_ev’t_hdr * hdr = d©a ; 8176 cÚ¡  ev’t_d©a *ev’t_d©¨ð NULL ; 8177 cÚ¡ * ev’t_cÞÜ , * ev’t_¡r ; 8178  exŒa_¡r [25]; 8179  i ; 8181 ià( size < HCI_EVENT_HDR_SIZE ) { 8182 `¥rštf ( exŒa_¡r , "Ö’ %d)", size ); 8183 `´št_·ck‘ ( tv , šdex , '*', COLOR_ERROR , 8184 "M®fÜmed HCI Ev’ˆ·ck‘", NULL , exŒa_¡r ); 8185 `·ck‘_hexdump ( d©a , size ); 8189 d©a +ð HCI_EVENT_HDR_SIZE ; 8190 size -ð HCI_EVENT_HDR_SIZE ; 8192  i = 0; ev’t_bË [i]. ¡r ; i++) { 8193 ià( ev’t_bË [ i ]. ev’t =ð hdr -> evt ) { 8194 ev’t_d©a = & ev’t_bË [ i ]; 8199 ià( ev’t_d©a ) { 8200 ià( ev’t_d©a -> func ) 8201 ev’t_cÞÜ = COLOR_HCI_EVENT ; 8203 ev’t_cÞÜ = COLOR_HCI_EVENT_UNKNOWN ; 8204 ev’t_¡r = ev’t_d©a -> ¡r ; 8206 ev’t_cÞÜ = COLOR_HCI_EVENT_UNKNOWN ; 8207 ev’t_¡r = "Unknown"; 8210 `¥rštf ( exŒa_¡r , "(0x%2.2x趒 %d", hdr -> evt , hdr-> ¶’ ); 8212 `´št_·ck‘ ( tv , šdex , '>', ev’t_cÞÜ , "HCI Event", 8213 ev’t_¡r , exŒa_¡r ); 8215 ià(! ev’t_d©a || !ev’t_d©a-> func ) { 8216 `·ck‘_hexdump ( d©a , size ); 8220 ià( size !ð hdr -> ¶’ ) { 8221 `´št_‹xt ( COLOR_ERROR , "šv®id…ack‘ siz(%u !ð%u)", size , 8222 hdr -> ¶’ ); 8223 `·ck‘_hexdump ( d©a , size ); 8227 ià( ev’t_d©a -> fixed ) { 8228 ià( hdr -> ¶’ !ð ev’t_d©a -> size ) { 8229 `´št_‹xt ( COLOR_ERROR , "invalid…acket size"); 8230 `·ck‘_hexdump ( d©a , size ); 8234 ià( hdr -> ¶’ < ev’t_d©a -> size ) { 8235 `´št_‹xt ( COLOR_ERROR , "too short…acket"); 8236 `·ck‘_hexdump ( d©a , size ); 8241 ev’t_d©a -> `func ( d©a , hdr -> ¶’ ); 8242 } } 8244  $·ck‘_hci_aþd©a ( timev® * tv , ušt16_t šdex , boÞ š , 8245 cÚ¡ * d©a , ušt16_t size ) 8247 cÚ¡  bt_hci_aþ_hdr * hdr = d©a ; 8248 ušt16_t hªdË = `Ë16_to_ýu ( hdr ->handle); 8249 ušt16_t dËn = `Ë16_to_ýu ( hdr ->dlen); 8250 ušt8_t æags = `aþ_æags ( hªdË ); 8251  hªdË_¡r [16], exŒa_¡r [32]; 8253 ià( size < (* hdr )) { 8254 ià( š ) 8255 `´št_·ck‘ ( tv , šdex , '*', COLOR_ERROR , 8256 "M®fÜmed ACL D©¨RX…ack‘", NULL , NULL); 8258 `´št_·ck‘ ( tv , šdex , '*', COLOR_ERROR , 8259 "M®fÜmed ACL D©¨TX…ack‘", NULL , NULL); 8260 `·ck‘_hexdump ( d©a , size ); 8264 d©a +ð(* hdr ); 8265 size -ð(* hdr ); 8267 `¥rštf ( hªdË_¡r , "HªdË %d", `aþ_hªdË ( hªdË )); 8268 `¥rštf ( exŒa_¡r , "æag 0x%2.2x dËÀ%d", æags , dËn ); 8270 `´št_·ck‘ ( tv , šdex , š ? '>' : '<', COLOR_HCI_ACLDATA , 8271 š ? "ACL Data RX" : "ACL Data TX", 8272 hªdË_¡r , exŒa_¡r ); 8274 ià( size !ð dËn ) { 8275 `´št_‹xt ( COLOR_ERROR , "invalid…acket size (%d != %d)", 8276 size , dËn ); 8277 `·ck‘_hexdump ( d©a , size ); 8281 ià( fž‹r_mask & PACKET_FILTER_SHOW_ACL_DATA ) 8282 `·ck‘_hexdump ( d©a , size ); 8284 `l2ÿp_·ck‘ ( šdex , š , `aþ_hªdË ( hªdË ), æags , d©a , size ); 8285 } } 8287  $·ck‘_hci_scod©a ( timev® * tv , ušt16_t šdex , boÞ š , 8288 cÚ¡ * d©a , ušt16_t size ) 8290 cÚ¡ hci_sco_hdr * hdr = d©a ; 8291 ušt16_t hªdË = `Ë16_to_ýu ( hdr ->handle); 8292 ušt8_t æags = `aþ_æags ( hªdË ); 8293  hªdË_¡r [16], exŒa_¡r [32]; 8295 ià( size < HCI_SCO_HDR_SIZE ) { 8296 ià( š ) 8297 `´št_·ck‘ ( tv , šdex , '*', COLOR_ERROR , 8298 "M®fÜmed SCO D©¨RX…ack‘", NULL , NULL); 8300 `´št_·ck‘ ( tv , šdex , '*', COLOR_ERROR , 8301 "M®fÜmed SCO D©¨TX…ack‘", NULL , NULL); 8302 `·ck‘_hexdump ( d©a , size ); 8306 d©a +ð HCI_SCO_HDR_SIZE ; 8307 size -ð HCI_SCO_HDR_SIZE ; 8309 `¥rštf ( hªdË_¡r , "HªdË %d", `aþ_hªdË ( hªdË )); 8310 `¥rštf ( exŒa_¡r , "æag 0x%2.2x dËÀ%d", æags , hdr -> dËn ); 8312 `´št_·ck‘ ( tv , šdex , š ? '>' : '<', COLOR_HCI_SCODATA , 8313 š ? "SCO Data RX" : "SCO Data TX", 8314 hªdË_¡r , exŒa_¡r ); 8316 ià( size !ð hdr -> dËn ) { 8317 `´št_‹xt ( COLOR_ERROR , "invalid…acket size (%d != %d)", 8318 size , hdr -> dËn ); 8319 `·ck‘_hexdump ( d©a , size ); 8323 ià( fž‹r_mask & PACKET_FILTER_SHOW_SCO_DATA ) 8324 `·ck‘_hexdump ( d©a , size ); 8325 } } 8327  $·ck‘_todo () 8329  i ; 8331 `´štf ("HCI commands with missing decodings:\n"); 8333  i = 0; Ýcode_bË [i]. ¡r ; i++) { 8334 ià( Ýcode_bË [ i ]. b™ < 0) 8337 ià( Ýcode_bË [ i ]. cmd_func ) 8340 `´štf ("\t%s\n", Ýcode_bË [ i ]. ¡r ); 8343 `´štf ("HCIƒvents with missing decodings:\n"); 8345  i = 0; ev’t_bË [i]. ¡r ; i++) { 8346 ià( ev’t_bË [ i ]. func ) 8349 `´štf ("\t%s\n", ev’t_bË [ i ]. ¡r ); 8352  i = 0; subev’t_bË [i]. ¡r ; i++) { 8353 ià( subev’t_bË [ i ]. func ) 8356 `´štf ("\t%s\n", subev’t_bË [ i ]. ¡r ); 8358 } } @monitor/packet.h 25  ~<¡dšt.h > 26  ~<¡dboÞ.h > 27  ~ 29  #PACKET_FILTER_SHOW_INDEX (1 << 0) ) 30  #PACKET_FILTER_SHOW_DATE (1 << 1) ) 31  #PACKET_FILTER_SHOW_TIME (1 << 2) ) 32  #PACKET_FILTER_SHOW_TIME_OFFSET (1 << 3) ) 33  #PACKET_FILTER_SHOW_ACL_DATA (1 << 4) ) 34  #PACKET_FILTER_SHOW_SCO_DATA (1 << 5) ) 36  ·ck‘_£t_fž‹r ( fž‹r ); 37  ·ck‘_add_fž‹r ( fž‹r ); 38  ·ck‘_d–_fž‹r ( fž‹r ); 40  ·ck‘_£Ëù_šdex ( ušt16_t šdex ); 42  ·ck‘_hexdump (cÚ¡ * buf , ušt16_t Ën ); 43  ·ck‘_´št_”rÜ (cÚ¡ * Ïb– , ušt8_t ”rÜ ); 44  ·ck‘_´št_v”siÚ (cÚ¡ * Ïb– , ušt8_t v”siÚ , 45 cÚ¡ * subÏb– , ušt16_t subv”siÚ ); 46  ·ck‘_´št_com·ny (cÚ¡ * Ïb– , ušt16_t com·ny ); 47  ·ck‘_´št_addr (cÚ¡ * Ïb– , cÚ¡ * d©a , boÞ ¿ndom ); 48  ·ck‘_´št_ad (cÚ¡ * d©a , ušt8_t size ); 49  ·ck‘_´št_ã©u»s_lmp (cÚ¡ ušt8_t * ã©u»s , ušt8_ˆ ·ge ); 50  ·ck‘_´št_ã©u»s_Î (cÚ¡ ušt8_t * ã©u»s ); 51  ·ck‘_´št_chªÃl_m­_lmp (cÚ¡ ušt8_t * m­ ); 52  ·ck‘_´št_chªÃl_m­_Î (cÚ¡ ušt8_t * m­ ); 53  ·ck‘_´št_io_ÿ·bž™y ( ušt8_t ÿ·bž™y ); 54  ·ck‘_´št_io_auth’tiÿtiÚ ( ušt8_t auth’tiÿtiÚ ); 56  ·ck‘_cÚŒÞ ( timev® * tv , ušt16_t šdex , ušt16_ˆ Ýcode , 57 cÚ¡ * d©a , ušt16_t size ); 58  ·ck‘_mÚ™Ü ( timev® * tv , ušt16_t šdex , ušt16_ˆ Ýcode , 59 cÚ¡ * d©a , ušt16_t size ); 60  ·ck‘_simuÏtÜ ( timev® * tv , ušt16_t äequ’cy , 61 cÚ¡ * d©a , ušt16_t size ); 63  ·ck‘_Ãw_šdex ( timev® * tv , ušt16_t šdex , cÚ¡ * Ïb– , 64 ušt8_t ty³ , ušt8_ˆ bus , cÚ¡ * Çme ); 65  ·ck‘_d–_šdex ( timev® * tv , ušt16_t šdex , cÚ¡ * Ïb– ); 67  ·ck‘_hci_commªd ( timev® * tv , ušt16_t šdex , 68 cÚ¡ * d©a , ušt16_t size ); 69  ·ck‘_hci_ev’t ( timev® * tv , ušt16_t šdex , 70 cÚ¡ * d©a , ušt16_t size ); 71  ·ck‘_hci_aþd©a ( timev® * tv , ušt16_t šdex , boÞ š , 72 cÚ¡ * d©a , ušt16_t size ); 73  ·ck‘_hci_scod©a ( timev® * tv , ušt16_t šdex , boÞ š , 74 cÚ¡ * d©a , ušt16_t size ); 76  ·ck‘_todo (); @monitor/rfcomm.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<¡dlib.h > 31  ~<¡ršg.h > 32  ~<ùy³.h > 33  ~<š‰y³s.h > 35  ~ 37  ~"¤c/sh¬ed/utž.h " 38  ~"bt.h " 39  ~"·ck‘.h " 40  ~"di¥Ïy.h " 41  ~"l2ÿp.h " 42  ~"uuid.h " 43  ~"keys.h " 44  ~"sdp.h " 45  ~"rfcomm.h " 47 * gü_¡r [] = { 53  #CR_STR ( ty³ è ü_¡r [ `GET_CR Ñy³)] ) 54  #GET_LEN8 ( Ëngth è(Ö’gth & 0xãè>> 1) ) 55  #GET_LEN16 ( Ëngth è(Ö’gth & 0xffãè>> 1) ) 56  #GET_CR ( ty³ è(Ñy³ & 0x02è>> 1) ) 57  #GET_PF ( ùr è(((ùrè>> 4è& 0x1) ) 60  #GET_V24_FC ( sigs è((sig & 0x02è>> 1) ) 61  #GET_V24_RTC ( sigs è((sig & 0x04è>> 2) ) 62  #GET_V24_RTR ( sigs è((sig & 0x08è>> 3) ) 63  #GET_V24_IC ( sigs è((sig & 0x40è>> 6) ) 64  #GET_V24_DV ( sigs è((sig & 0x80è>> 7) ) 67  #GET_RPN_DB ( ·r™y èÕ¬™y & 0x03) ) 68  #GET_RPN_SB ( ·r™y è(Õ¬™y & 0x04è>> 2) ) 69  #GET_RPN_PARITY ( ·r™y è(Õ¬™y & 0x08è>> 3) ) 70  #GET_RPN_PTYPE ( ·r™y è(Õ¬™y & 0x30è>> 4) ) 71  #GET_RPN_XIN ( io è(iØ& 0x01) ) 72  #GET_RPN_XOUT ( io è((iØ& 0x02è>> 1) ) 73  #GET_RPN_RTRI ( io è((iØ& 0x04è>> 2) ) 74  #GET_RPN_RTRO ( io è((iØ& 0x08è>> 3) ) 75  #GET_RPN_RTCI ( io è((iØ& 0x10è>> 4) ) 76  #GET_RPN_RTCO ( io è((iØ& 0x20è>> 5) ) 79  #GET_ERROR ( ”r èÓ¼ & 0x0f) ) 82  #GET_FRM_TYPE ( ù¾ è((ù¾ & 0x0f)) ) 83  #GET_CRT_FLOW ( ù¾ è((ù¾ & 0xf0è>> 4) ) 84  #GET_PRIORITY ( ´io è(ÕriØ& 0x3f)) ) 85  #GET_PN_DLCI ( dlci è((dlc˜& 0x3f)) ) 87  srfcomm_lhdr { 88 ušt8_t madd»ss ; 89 ušt8_t mcÚŒÞ ; 90 ušt16_t mËngth ; 91 ušt8_t mfcs ; 92 ušt8_t müed™s ; 93 } __©Œibu‹__ (( ·cked )); 95  srfcomm_lmsc { 96 ušt8_t mdlci ; 97 ušt8_t mv24_sig ; 98 ušt8_t mb»ak_sig ; 99 } __©Œibu‹__ (( ·cked )); 101  srfcomm_½n { 102 ušt8_t mdlci ; 103 ušt8_t mb™_¿‹ ; 104 ušt8_t m·r™y ; 105 ušt8_t mio ; 106 ušt8_t mxÚ ; 107 ušt8_t mxoff ; 108 ušt16_t mpm ; 109 } __©Œibu‹__ (( ·cked )); 111  srfcomm_¾s { 112 ušt8_t mdlci ; 113 ušt8_t m”rÜ ; 114 } __©Œibu‹__ (( ·cked )); 116  srfcomm_nsc { 117 ušt8_t mcmd_ty³ ; 118 } __©Œibu‹__ (( ·cked )); 120  srfcomm_lmcc { 121 ušt8_t mty³ ; 122 ušt16_t mËngth ; 123 } __©Œibu‹__ (( ·cked )); 125  srfcomm_äame { 126  rfcomm_lhdr mhdr ; 127  rfcomm_lmcc mmcc ; 128  l2ÿp_äame ml2ÿp_äame ; 131  $´št_rfcomm_hdr ( rfcomm_äame *rfcomm_äame, ušt8_t šd’t ) 133  rfcomm_lhdr hdr = rfcomm_äame ->hdr; 136 `´št_f›ld ("%*cAdd»ss: 0x%2.2x c¸%d dlc˜0x%2.2x", šd’t , ' ', 137 hdr . add»ss , `GET_CR (hdr.address), 138 `RFCOMM_GET_DLCI ( hdr . add»ss )); 141 `´št_f›ld ("%*cCÚŒÞ: 0x%2.2x…Þl/fš® %d", šd’t , ' ', 142 hdr . cÚŒÞ , `GET_PF (hdr.control)); 145 `´št_f›ld ("%*cL’gth: %d", šd’t , ' ', hdr . Ëngth ); 146 `´št_f›ld ("%*cFCS: 0x%2.2x", šd’t , ' ', hdr . fcs ); 147 } } 149  šlše boÞ $mcc_‹¡ ( rfcomm_äame *rfcomm_äame, ušt8_t šd’t ) 151  l2ÿp_äame * äame = & rfcomm_äame ->l2cap_frame; 152 ušt8_t d©a ; 154 `´štf ("%*cTe¡ D©a: 0x ", šd’t , ' '); 156  äame -> size > 1) { 157 ià(! `l2ÿp_äame_g‘_u8 ( äame , & d©a )) 158  çl£ ; 159 `´štf ("%2.2x ", d©a ); 162 `´štf ("\n"); 163  Œue ; 164 } } 166  šlše boÞ $mcc_msc ( rfcomm_äame *rfcomm_äame, ušt8_t šd’t ) 168  l2ÿp_äame * äame = & rfcomm_äame ->l2cap_frame; 169  rfcomm_lmsc msc ; 171 ià(! `l2ÿp_äame_g‘_u8 ( äame , & msc . dlci )) 172  çl£ ; 174 `´št_f›ld ("%*cdlc˜%d ", šd’t , ' ', `RFCOMM_GET_DLCI ( msc . dlci )); 176 ià(! `l2ÿp_äame_g‘_u8 ( äame , & msc . v24_sig )) 177  çl£ ; 180 `´št_f›ld ("%*cfø%d„tø%d„Œ %d iø%d dv %d", šd’t , ' ', 181 `GET_V24_FC ( msc . v24_sig ), `GET_V24_RTC (msc.v24_sig), 182 `GET_V24_RTR ( msc . v24_sig ), `GET_V24_IC (msc.v24_sig), 183 `GET_V24_DV ( msc . v24_sig )); 185 ià( äame -> size < 2) 186  dÚe ; 192 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 194 dÚe : 195  Œue ; 196 } } 198  šlše boÞ $mcc_½n ( rfcomm_äame *rfcomm_äame, ušt8_t šd’t ) 200  l2ÿp_äame * äame = & rfcomm_äame ->l2cap_frame; 201  rfcomm_½n ½n ; 203 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ½n . dlci )) 204  çl£ ; 206 `´št_f›ld ("%*cdlc˜%d", šd’t , ' ', `RFCOMM_GET_DLCI ( ½n . dlci )); 208 ià( äame -> size < 7) 209  dÚe ; 213 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ½n . b™_¿‹ )) 214  çl£ ; 216 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ½n . ·r™y )) 217  çl£ ; 219 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ½n . io )) 220  çl£ ; 222 `´št_f›ld ("%*cb¸%d db %d sb %d… %d…ˆ%d x˜%d xØ%d", šd’t , ' ', 223 ½n . b™_¿‹ , `GET_RPN_DB Ô². ·r™y ), `GET_RPN_SB (rpn.parity), 224 `GET_RPN_PARITY ( ½n . ·r™y ), `GET_RPN_PTYPE (rpn.parity), 225 `GET_RPN_XIN ( ½n . io ), `GET_RPN_XOUT (rpn.io)); 227 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ½n . xÚ )) 228  çl£ ; 230 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ½n . xoff )) 231  çl£ ; 233 `´št_f›ld ("%*crtri %d„tro %d„tci %d„tco %d xon %d xoff %d", 234 šd’t , ' ', `GET_RPN_RTRI ( ½n . io ), `GET_RPN_RTRO (rpn.io), 235 `GET_RPN_RTCI ( ½n . io ), `GET_RPN_RTCO Ô².io),„². xÚ , 236 ½n . xoff ); 238 ià(! `l2ÿp_äame_g‘_Ë16 ( äame , & ½n . pm )) 239  çl£ ; 241 `´št_f›ld ("%*ým 0x%04x", šd’t , ' ', ½n . pm ); 243 dÚe : 244  Œue ; 245 } } 247  šlše boÞ $mcc_¾s ( rfcomm_äame *rfcomm_äame, ušt8_t šd’t ) 249  l2ÿp_äame * äame = & rfcomm_äame ->l2cap_frame; 250  rfcomm_¾s ¾s ; 252 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ¾s . dlci )) 253  çl£ ; 255 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ¾s . ”rÜ )) 256  çl£ ; 258 `´št_f›ld ("%*cdlc˜%dƒ¼Ü: %d", šd’t , ' ', 259 `RFCOMM_GET_DLCI ( ¾s . dlci ), `GET_ERROR Ôls. ”rÜ )); 261  Œue ; 262 } } 264  šlše boÞ $mcc_² ( rfcomm_äame *rfcomm_äame, ušt8_t šd’t ) 266  l2ÿp_äame * äame = & rfcomm_äame ->l2cap_frame; 267  rfcomm_² ² ; 271 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ² . dlci )) 272  çl£ ; 274 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ² . æow_ù¾ )) 275  çl£ ; 277 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ² . ´iÜ™y )) 278  çl£ ; 280 `´št_f›ld ("%*cdlc˜%d f¿me_ty³ %d c»d™_æow %d…r˜%d", šd’t , 281 ' ', `GET_PN_DLCI ( ² . dlci ), `GET_FRM_TYPE Õn. æow_ù¾ ), 282 `GET_CRT_FLOW ( ² . æow_ù¾ ), `GET_PRIORITY Õn. ´iÜ™y )); 284 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ² . ack_tim” )) 285  çl£ ; 287 ià(! `l2ÿp_äame_g‘_Ë16 ( äame , & ² . mtu )) 288  çl£ ; 290 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ² . max_»Œªs )) 291  çl£ ; 293 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ² . üed™s )) 294  çl£ ; 296 `´št_f›ld ("%*cack_timer %d frame_size %d max_retrans %d credits %d", 297 šd’t , ' ', ² . ack_tim” ,…n. mtu ,…n. max_»Œªs , 298 ² . üed™s ); 300  Œue ; 301 } } 303  šlše boÞ $mcc_nsc ( rfcomm_äame *rfcomm_äame, ušt8_t šd’t ) 305  l2ÿp_äame * äame = & rfcomm_äame ->l2cap_frame; 306  rfcomm_nsc nsc ; 308 ià(! `l2ÿp_äame_g‘_u8 ( äame , & nsc . cmd_ty³ )) 309  çl£ ; 311 `´št_f›ld ("%*cü %d, mcc_cmd_ty³ %x", šd’t , ' ', 312 `GET_CR ( nsc . cmd_ty³ ), `RFCOMM_GET_MCC_TYPE (nsc.cmd_type)); 314  Œue ; 315 } } 317  smcc_d©a { 318 ušt8_t mty³ ; 319 cÚ¡ * m¡r ; 322 cÚ¡  mcc_d©a gmcc_bË [] = { 334  šlše boÞ $mcc_äame ( rfcomm_äame *rfcomm_äame, ušt8_t šd’t ) 336 ušt8_t Ëngth , ex_Ëngth , ty³ ; 337 cÚ¡ * ty³_¡r ; 338  i ; 339  l2ÿp_äame * äame = & rfcomm_äame ->l2cap_frame; 340  rfcomm_lmcc mcc ; 341 cÚ¡  mcc_d©a *mcc_d©¨ð NULL ; 343 ià(! `l2ÿp_äame_g‘_u8 ( äame , & mcc . ty³ ) || 344 ! `l2ÿp_äame_g‘_u8 ( äame , & Ëngth )) 345  çl£ ; 347 ià( `RFCOMM_TEST_EA ( Ëngth )) 348 mcc . Ëngth = ( ušt16_t è `GET_LEN8 (length); 350 ià(! `l2ÿp_äame_g‘_u8 ( äame , & ex_Ëngth )) 351  çl£ ; 352 mcc . Ëngth = (( ušt16_t èËngth << 8è| ex_Ëngth ; 353 mcc . Ëngth = `GET_LEN16 (mcc.length); 356 ty³ = `RFCOMM_GET_MCC_TYPE ( mcc .type); 358  i = 0; mcc_bË [i]. ¡r ; i++) { 359 ià( mcc_bË [ i ]. ty³ ==ype) { 360 mcc_d©a = & mcc_bË [ i ]; 365 ià( mcc_d©a ) 366 ty³_¡r = mcc_d©a -> ¡r ; 368 ty³_¡r = "Unknown"; 370 `´št_f›ld ("%*cMCC Mes§gty³: % %s(0x%2.2x)", šd’t , ' ', 371 ty³_¡r , `CR_STR ( mcc . ty³ ),ype); 373 `´št_f›ld ("%*cL’gth: %d", šd’t +2, ' ', mcc . Ëngth ); 375 rfcomm_äame -> mcc = mcc; 377  ty³ ) { 378  RFCOMM_TEST : 379  `mcc_‹¡ ( rfcomm_äame , šd’t +10); 380  RFCOMM_MSC : 381  `mcc_msc ( rfcomm_äame , šd’t +2); 382  RFCOMM_RPN : 383  `mcc_½n ( rfcomm_äame , šd’t +2); 384  RFCOMM_RLS : 385  `mcc_¾s ( rfcomm_äame , šd’t +2); 386  RFCOMM_PN : 387  `mcc_² ( rfcomm_äame , šd’t +2); 388  RFCOMM_NSC : 389  `mcc_nsc ( rfcomm_äame , šd’t +2); 391 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 394  Œue ; 395 } } 397  boÞ $uih_äame ( rfcomm_äame *rfcomm_äame, ušt8_t šd’t ) 399 ušt8_t üed™s ; 400  l2ÿp_äame * äame = & rfcomm_äame ->l2cap_frame; 401  rfcomm_lhdr * hdr = & rfcomm_äame ->hdr; 403 ià(! `RFCOMM_GET_CHANNEL ( hdr -> add»ss )) 404  `mcc_äame ( rfcomm_äame , šd’t ); 407 ià( `GET_PF ( hdr -> cÚŒÞ )) { 408 ià(! `l2ÿp_äame_g‘_u8 ( äame , & üed™s )) 409  çl£ ; 410 hdr -> üed™s = credits; 411 `´št_f›ld ("%*cC»d™s: %d", šd’t , ' ', hdr -> üed™s ); 414 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 415  Œue ; 416 } } 418  srfcomm_d©a { 419 ušt8_t mäame ; 420 cÚ¡ * m¡r ; 423 cÚ¡  rfcomm_d©a grfcomm_bË [] = { 432  $rfcomm_·ck‘ (cÚ¡  l2ÿp_äame * äame ) 434 ušt8_t ùy³ , Ëngth , ex_Ëngth , šd’t = 1; 435 cÚ¡ * äame_¡r , * äame_cÞÜ ; 436  l2ÿp_äame *l2ÿp_äame, tmp_äame ; 437  rfcomm_äame „fcomm_frame; 438  rfcomm_lhdr hdr ; 439 cÚ¡  rfcomm_d©a *rfcomm_d©¨ð NULL ; 440  i ; 442 `l2ÿp_äame_puÎ (& rfcomm_äame . l2ÿp_äame , äame , 0); 444 l2ÿp_äame = & rfcomm_äame .l2cap_frame; 446 ià( äame -> size < 4) 447  çž ; 449 ià(! `l2ÿp_äame_g‘_u8 ( l2ÿp_äame , & hdr . add»ss ) || 450 ! `l2ÿp_äame_g‘_u8 ( l2ÿp_äame , & hdr . cÚŒÞ ) || 451 ! `l2ÿp_äame_g‘_u8 ( l2ÿp_äame , & Ëngth )) 452  çž ; 455 ià( `RFCOMM_TEST_EA ( Ëngth )) 456 hdr . Ëngth = ( ušt16_t è `GET_LEN8 (length); 458 ià(! `l2ÿp_äame_g‘_u8 ( l2ÿp_äame , & ex_Ëngth )) 459  çž ; 460 hdr . Ëngth = (( ušt16_t î’gth << 8è| ex_Ëngth ; 461 hdr . Ëngth = `GET_LEN16 (hdr.length); 464 `l2ÿp_äame_puÎ (& tmp_äame , l2ÿp_äame ,†2ÿp_äame-> size -1); 466 ià(! `l2ÿp_äame_g‘_u8 (& tmp_äame , & hdr . fcs )) 467  çž ; 470 ùy³ = `RFCOMM_GET_TYPE ( hdr . cÚŒÞ ); 472  i = 0; rfcomm_bË [i]. ¡r ; i++) { 473 ià( rfcomm_bË [ i ]. äame =ð ùy³ ) { 474 rfcomm_d©a = & rfcomm_bË [ i ]; 479 ià( rfcomm_d©a ) { 480 ià( äame -> š ) 481 äame_cÞÜ = COLOR_MAGENTA ; 483 äame_cÞÜ = COLOR_BLUE ; 484 äame_¡r = rfcomm_d©a -> ¡r ; 486 äame_cÞÜ = COLOR_WHITE_BG ; 487 äame_¡r = "Unknown"; 490 ià(! rfcomm_d©a ) { 491 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 495 `´št_šd’t (6, äame_cÞÜ , "RFCOMM: ", äame_¡r , COLOR_OFF , 496 "(0x%2.2x)", ùy³ ); 498 rfcomm_äame . hdr = hdr; 499 `´št_rfcomm_hdr (& rfcomm_äame , šd’t ); 502 ià( ùy³ == 0xef) 503 ià(! `uih_äame (& rfcomm_äame , šd’t )) 504  çž ; 508 çž : 509 `´št_‹xt ( COLOR_ERROR , "Frameoo short"); 510 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 512 } } @monitor/rfcomm.h 25  #RFCOMM_SABM 0x2f ) 26  #RFCOMM_DISC 0x43 ) 27  #RFCOMM_UA 0x63 ) 28  #RFCOMM_DM 0x0f ) 29  #RFCOMM_UIH 0xef ) 31  #RFCOMM_GET_TYPE ( cÚŒÞ è((cÚŒÞè& 0xef) ) 32  #RFCOMM_GET_DLCI ( add»ss è(×dd»s & 0xfcè>> 2) ) 33  #RFCOMM_GET_CHANNEL ( add»ss è(×dd»s & 0xf8è>> 3) ) 34  #RFCOMM_GET_DIR ( add»ss è(×dd»s & 0x04è>> 2) ) 35  #RFCOMM_TEST_EA ( Ëngth è(Ö’gth & 0x01)) ) 37  srfcomm_hdr { 38 ušt8_t madd»ss ; 39 ušt8_t mcÚŒÞ ; 40 ušt8_t mËngth ; 41 } __©Œibu‹__ (( ·cked )); 43  srfcomm_cmd { 44 ušt8_t madd»ss ; 45 ušt8_t mcÚŒÞ ; 46 ušt8_t mËngth ; 47 ušt8_t mfcs ; 48 } __©Œibu‹__ (( ·cked )); 50  #RFCOMM_TEST 0x08 ) 51  #RFCOMM_FCON 0x28 ) 52  #RFCOMM_FCOFF 0x18 ) 53  #RFCOMM_MSC 0x38 ) 54  #RFCOMM_RPN 0x24 ) 55  #RFCOMM_RLS 0x14 ) 56  #RFCOMM_PN 0x20 ) 57  #RFCOMM_NSC 0x04 ) 59  #RFCOMM_TEST_CR ( ty³ è(Ñy³ & 0x02)) ) 60  #RFCOMM_GET_MCC_TYPE ( ty³ è(Ñy³ & 0xfcè>> 2) ) 62  srfcomm_mcc { 63 ušt8_t mty³ ; 64 ušt8_t mËngth ; 65 } __©Œibu‹__ (( ·cked )); 67  srfcomm_msc { 68 ušt8_t mdlci ; 69 ušt8_t mv24_sig ; 70 } __©Œibu‹__ (( ·cked )); 72  srfcomm_² { 73 ušt8_t mdlci ; 74 ušt8_t mæow_ù¾ ; 75 ušt8_t m´iÜ™y ; 76 ušt8_t mack_tim” ; 77 ušt16_t mmtu ; 78 ušt8_t mmax_»Œªs ; 79 ušt8_t müed™s ; 80 } __©Œibu‹__ (( ·cked )); @monitor/sdp.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<¡dlib.h > 31  ~<¡ršg.h > 32  ~<š‰y³s.h > 34  ~ 36  ~"¤c/sh¬ed/utž.h " 38  ~"bt.h " 39  ~"·ck‘.h " 40  ~"di¥Ïy.h " 41  ~"l2ÿp.h " 42  ~"uuid.h " 43  ~"sdp.h " 45  #MAX_TID 16 ) 47  stid_d©a { 48 boÞ mšu£ ; 49 ušt16_t mtid ; 50 ušt16_t mchªÃl ; 51 ušt8_t mcÚt [17]; 54  tid_d©a gtid_li¡ [ MAX_TID ]; 56  tid_d©a * $g‘_tid ( ušt16_t tid , ušt16_ˆ chªÃl ) 58  i , n = -1; 60  i = 0; i < MAX_TID ; i++) { 61 ià(! tid_li¡ [ i ]. šu£ ) { 62 ià( n < 0) 63 n = i ; 67 ià( tid_li¡ [ i ]. tid =ðtid &&id_li¡[i]. chªÃl == channel) 68  & tid_li¡ [ i ]; 71 ià( n < 0) 72  NULL ; 74 tid_li¡ [ n ]. šu£ = Œue ; 75 tid_li¡ [ n ]. tid =id; 76 tid_li¡ [ n ]. chªÃl = channel; 78  & tid_li¡ [ n ]; 79 } } 81  $þ—r_tid ( tid_d©a * tid ) 83 ià( tid ) 84 tid -> šu£ = çl£ ; 85 } } 87  $´št_ušt ( ušt8_t šd’t , cÚ¡ ušt8_ˆ* d©a , ušt32_t size ) 89  size ) { 91 `´št_f›ld ("%*c0x%2.2x", šd’t , ' ', d©a [0]); 94 `´št_f›ld ("%*c0x%4.4x", šd’t , ' ', `g‘_be16 ( d©a )); 97 `´št_f›ld ("%*c0x%8.8x", šd’t , ' ', `g‘_be32 ( d©a )); 100 `´št_f›ld ("%*c0x%16.16" PRIx64 , šd’t , ' ', `g‘_be64 ( d©a )); 103 `·ck‘_hexdump ( d©a , size ); 106 } } 108  $´št_sšt ( ušt8_t šd’t , cÚ¡ ušt8_ˆ* d©a , ušt32_t size ) 110 `·ck‘_hexdump ( d©a , size ); 111 } } 113  $´št_uuid ( ušt8_t šd’t , cÚ¡ ušt8_ˆ* d©a , ušt32_t size ) 115  size ) { 117 `´št_f›ld ("%*c% (0x%4.4x)", šd’t , ' ', 118 `uuid16_to_¡r ( `g‘_be16 ( d©a )), get_be16(data)); 121 `´št_f›ld ("%*c% (0x%8.8x)", šd’t , ' ', 122 `uuid32_to_¡r ( `g‘_be32 ( d©a )), get_be32(data)); 126 `´št_f›ld ("%*c%8.8x-%4.4x-%4.4x-%4.4x-%4.4x%8.4x", 127 šd’t , ' ', 128 `g‘_be32 ( d©a ), `g‘_be16 (data + 4), 129 `g‘_be16 ( d©a + 6), get_be16(data + 8), 130 `g‘_be16 ( d©a + 10), `g‘_be32 (data + 12)); 131 ià( `g‘_be16 ( d©a + 4) == 0x0000 && 132 `g‘_be16 ( d©a + 6) == 0x1000 && 133 `g‘_be16 ( d©a + 8) == 0x8000 && 134 `g‘_be16 ( d©a + 10) == 0x0080 && 135 `g‘_be32 ( d©a + 12) == 0x5F9B34FB) 136 `´št_f›ld ("%*c%s", šd’t , ' ', 137 `uuid32_to_¡r ( `g‘_be32 ( d©a ))); 140 `·ck‘_hexdump ( d©a , size ); 143 } } 145  $´št_¡ršg ( ušt8_t šd’t , cÚ¡ ušt8_ˆ* d©a , ušt32_t size ) 147 * ¡r = `®loÿ ( size + 1); 149 ¡r [ size ] = '\0'; 150 `¡ºýy ( ¡r , (cÚ¡ *è d©a , size ); 152 `´št_f›ld ("%*c% [ËÀ%d]", šd’t , ' ', ¡r , size ); 153 } } 155  $´št_boÞ—n ( ušt8_t šd’t , cÚ¡ ušt8_ˆ* d©a , ušt32_t size ) 157 `´št_f›ld ("%*c%s", šd’t , ' ', d©a [0] ? "true" : "false"); 158 } } 160  #SIZES ( ¬gs ...è(( ušt8_t []è{‡rgs, 0xfà} ) ) 163 ušt8_t mv®ue ; 164 ušt8_t * msizes ; 165 boÞ m»cur£ ; 166 cÚ¡ * m¡r ; 167 (* m´št è( ušt8_t mšd’t , cÚ¡ ušt8_ˆ* md©a , ušt32_t msize ); 168 } gty³_bË [] = { 169 { 0, SIZES (0), çl£ , "Nil" }, 170 { 1, SIZES (0, 1, 2, 3, 4), çl£ , "UnsigÃd IÁeg”", ´št_ušt }, 171 { 2, SIZES (0, 1, 2, 3, 4), çl£ , "SigÃd IÁeg”", ´št_sšt }, 172 { 3, SIZES (1, 2, 4), çl£ , "UUID", ´št_uuid }, 173 { 4, SIZES (5, 6, 7), çl£ , "SŒšg", ´št_¡ršg }, 174 { 5, SIZES (0), çl£ , "BoÞ—n", ´št_boÞ—n }, 175 { 6, SIZES (5, 6, 7), Œue , "Sequence" }, 176 { 7, SIZES (5, 6, 7), Œue , "Alternative" }, 177 { 8, SIZES (5, 6, 7), çl£ , "URL", ´št_¡ršg }, 182 ušt8_t mšdex ; 183 ušt8_t mb™s ; 184 ušt8_t msize ; 185 cÚ¡ * m¡r ; 186 } gsize_bË [] = { 198  boÞ $v®id_size ( ušt8_t size , ušt8_ˆ* sizes ) 200  i ; 202  i = 0; sizes [i] != 0xff; i++) { 203 ià( sizes [ i ] =ð size ) 204  Œue ; 207  çl£ ; 208 } } 210  ušt8_t $g‘_b™s (cÚ¡ ušt8_t * d©a , ušt32_t size ) 212  i ; 214  i = 0; size_bË [i]. ¡r ; i++) { 215 ià( size_bË [ i ]. šdex =ð( d©a [0] & 0x07)) 216  size_bË [ i ]. b™s ; 220 } } 222  ušt32_t $g‘_size (cÚ¡ ušt8_t * d©a , ušt32_t size ) 224  i ; 226  i = 0; size_bË [i]. ¡r ; i++) { 227 ià( size_bË [ i ]. šdex =ð( d©a [0] & 0x07)) { 228  size_bË [ i ]. b™s ) { 230 ià(( d©a [0] & 0xf8) == 0) 233  size_bË [ i ]. size ; 235  d©a [1]; 237  `g‘_be16 ( d©a + 1); 239  `g‘_be32 ( d©a + 1); 247 } } 249  decode_d©a_–em’ts ( ušt32_t pos™iÚ , ušt8_t šd’t , 250 cÚ¡ ušt8_t * d©a , ušt32_t size , 251 (* ´št_func è( ušt32_t , ušt8_t , uint8_t, 252 cÚ¡ ušt8_t *, ušt32_t )) 255 ušt32_t d©®’ , –emËn , exŒab™s ; 256  i ; 258 ià(! size ) 261 exŒab™s = `g‘_b™s ( d©a , size ); 263 ià( size < 1 + ( exŒab™s / 8)) { 264 `´št_‹xt ( COLOR_ERROR , "dataƒlement descriptoroo short"); 265 `·ck‘_hexdump ( d©a , size ); 269 d©®’ = `g‘_size ( d©a , size ); 271 ià( size < 1 + ( exŒab™s / 8è+ d©®’ ) { 272 `´št_‹xt ( COLOR_ERROR , "dataƒlement sizeoo short"); 273 `·ck‘_hexdump ( d©a , size ); 277 –emËn = 1 + ( exŒab™s / 8è+ d©®’ ; 279  i = 0; ty³_bË [i]. ¡r ; i++) { 280 ušt8_t ty³ = ( d©a [0] & 0xf8) >> 3; 282 ià( ty³_bË [ i ]. v®ue !ð ty³ ) 285 ià( ´št_func ) { 286 `´št_func ( pos™iÚ , šd’t , ty³ , 287 d©a + 1 + ( exŒab™s / 8), d©®’ ); 291 `´št_f›ld ("%*c%s (%d) with %u byte%s [%uƒxtra bits]†en %u", 292 šd’t , ' ', ty³_bË [ i ]. ¡r , ty³ , 293 d©®’ , datalen == 1 ? "" : "s", 294 exŒab™s , –emËn ); 295 ià(! `v®id_size ( d©a [0] & 0x07, ty³_bË [ i ]. sizes )) { 296 `´št_‹xt ( COLOR_ERROR , "invalid dataƒlement size"); 297 `·ck‘_hexdump ( d©a + 1 + ( exŒab™s / 8), d©®’ ); 301 ià( ty³_bË [ i ]. »cur£ ) 302 `decode_d©a_–em’ts (0, šd’t + 2, 303 d©a + 1 + ( exŒab™s / 8), d©®’ , 304 ´št_func ); 305 ià( ty³_bË [ i ]. ´št ) 306 ty³_bË [ i ]. `´št ( šd’t + 2, 307 d©a + 1 + ( exŒab™s / 8), d©®’ ); 311 d©a +ð –emËn ; 312 size -ð –emËn ; 314 `decode_d©a_–em’ts ( pos™iÚ + 1, šd’t , d©a , size , ´št_func ); 315 } } 317  ušt32_t $g‘_by‹s (cÚ¡ ušt8_t * d©a , ušt32_t size ) 319  d©a [0] & 0x07) { 321  2 + d©a [1]; 323  3 + `g‘_be16 ( d©a + 1); 325  5 + `g‘_be32 ( d©a + 1); 329 } } 332 ušt16_t mid ; 333 cÚ¡ * m¡r ; 334 } g©Œibu‹_bË [] = { 352  $´št_©Œ ( ušt32_t pos™iÚ , ušt8_t šd’t , ušt8_ˆ ty³ , 353 cÚ¡ ušt8_t * d©a , ušt32_t size ) 355  i ; 357 ià(( pos™iÚ % 2) == 0) { 358 ušt16_t id = `g‘_be16 ( d©a ); 359 cÚ¡ * ¡r = "Unknown"; 361  i = 0; ©Œibu‹_bË [i]. ¡r ; i++) { 362 ià( ©Œibu‹_bË [ i ]. id == id) 363 ¡r = ©Œibu‹_bË [ i ].str; 366 `´št_f›ld ("%*cAttribute: %s (0x%4.4x) [len %d]", 367 šd’t , ' ', ¡r , id , size ); 371  i = 0; ty³_bË [i]. ¡r ; i++) { 372 ià( ty³_bË [ i ]. v®ue !ð ty³ ) 375 ià( ty³_bË [ i ]. »cur£ ) 376 `decode_d©a_–em’ts (0, šd’t + 2, d©a , size , NULL ); 377 ià( ty³_bË [ i ]. ´št ) 378 ty³_bË [ i ]. `´št ( šd’t + 2, d©a , size ); 381 } } 383  $´št_©Œ_li¡ ( ušt32_t pos™iÚ , ušt8_t šd’t , ušt8_ˆ ty³ , 384 cÚ¡ ušt8_t * d©a , ušt32_t size ) 386 `´št_f›ld ("%*cAttribute†ist: [len %d] {position %d}", 387 šd’t , ' ', size , pos™iÚ ); 389 `decode_d©a_–em’ts (0, šd’t + 2, d©a , size , ´št_©Œ ); 390 } } 392  $´št_©Œ_li¡s ( ušt32_t pos™iÚ , ušt8_t šd’t , ušt8_ˆ ty³ , 393 cÚ¡ ušt8_t * d©a , ušt32_t size ) 395 `decode_d©a_–em’ts (0, šd’t , d©a , size , ´št_©Œ_li¡ ); 396 } } 398  $´št_cÚtšu©iÚ (cÚ¡ ušt8_t * d©a , ušt16_t size ) 400 ià( d©a [0] !ð size - 1) { 401 `´št_‹xt ( COLOR_ERROR , "invalid continuation state"); 402 `·ck‘_hexdump ( d©a , size ); 406 `´št_f›ld ("CÚtšu©iÚ s‹: %d", d©a [0]); 407 `·ck‘_hexdump ( d©a + 1, size - 1); 408 } } 410  $¡Üe_cÚtšu©iÚ ( tid_d©a * tid , 411 cÚ¡ ušt8_t * d©a , ušt16_t size ) 413 `memýy ( tid -> cÚt , d©a , size ); 414 `´št_cÚtšu©iÚ ( d©a , size ); 415 } } 417  #MAX_CONT 8 ) 419  scÚt_d©a { 420 ušt16_t mchªÃl ; 421 ušt8_t mcÚt [17]; 422 * md©a ; 423 ušt32_t msize ; 426  cÚt_d©a gcÚt_li¡ [ MAX_CONT ]; 428  $hªdË_cÚtšu©iÚ ( tid_d©a * tid , boÞ Ã¡ed , 429 ušt16_t by‹s , cÚ¡ ušt8_t * d©a , ušt16_ˆ size ) 431 ušt8_t * Ãwd©a ; 432  i , n = -1; 434 ià( by‹s + 1 > size ) { 435 `´št_‹xt ( COLOR_ERROR , "missing continuation state"); 439 ià( tid -> cÚt [0] =ð0x00 && d©a [ by‹s ] == 0x00) { 440 `decode_d©a_–em’ts (0, 2, d©a , by‹s , 441 áed ? ´št_©Œ_li¡s : ´št_©Œ_li¡ ); 443 `´št_cÚtšu©iÚ ( d©a + by‹s , size - bytes); 447  i = 0; i < MAX_CONT ; i++) { 448 ià( cÚt_li¡ [ i ]. cÚt [0] == 0x00) { 449 ià( n < 0) 450 n = i ; 454 ià( cÚt_li¡ [ i ]. chªÃl !ð tid ->channel) 457 ià( cÚt_li¡ [ i ]. cÚt [0] !ð tid ->cont[0]) 460 ià(! `memcmp ( cÚt_li¡ [ i ]. cÚt + 1, 461 tid -> cÚt + 1,id->cont[0])) { 462 n = i ; 467 `´št_cÚtšu©iÚ ( d©a + by‹s , size - bytes); 469 ià( n < 0) 472 Ãwd©a = `»®loc ( cÚt_li¡ [ n ]. d©a , cÚt_li¡[n]. size + by‹s ); 473 ià(! Ãwd©a ) { 474 `´št_‹xt ( COLOR_ERROR , "failed buffer‡llocation"); 475 `ä“ ( cÚt_li¡ [ n ]. d©a ); 476 cÚt_li¡ [ n ]. d©a = NULL ; 477 cÚt_li¡ [ n ]. size = 0; 481 cÚt_li¡ [ n ]. chªÃl = tid ->channel; 482 cÚt_li¡ [ n ]. d©a = Ãwd©a ; 484 ià( by‹s > 0) { 485 `memýy ( cÚt_li¡ [ n ]. d©a + cÚt_li¡[n]. size , d©a, by‹s ); 486 cÚt_li¡ [ n ]. size +ð by‹s ; 489 ià( d©a [ by‹s ] == 0x00) { 490 `´št_f›ld ("Combšed‡‰ribu‹ by‹s: %d", cÚt_li¡ [ n ]. size ); 492 `decode_d©a_–em’ts (0, 2, cÚt_li¡ [ n ]. d©a , cÚt_li¡[n]. size , 493 áed ? ´št_©Œ_li¡s : ´št_©Œ_li¡ ); 495 `ä“ ( cÚt_li¡ [ n ]. d©a ); 496 cÚt_li¡ [ n ]. d©a = NULL ; 497 cÚt_li¡ [ n ]. size = 0; 499 `memýy ( cÚt_li¡ [ i ]. cÚt , d©a + by‹s , data[bytes] + 1); 500 } } 502  ušt16_t $commÚ_r¥ (cÚ¡  l2ÿp_äame * äame , 503  tid_d©a * tid ) 505 ušt16_t by‹s ; 507 ià( äame -> size < 2) { 508 `´št_‹xt ( COLOR_ERROR , "invalid size"); 509 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 513 by‹s = `g‘_be16 ( äame -> d©a ); 514 `´št_f›ld ("A‰ribu‹ by‹s: %d", by‹s ); 516 ià( by‹s > äame -> size - 2) { 517 `´št_‹xt ( COLOR_ERROR , "invalid‡ttribute size"); 518 `·ck‘_hexdump ( äame -> d©a + 2, f¿me-> size - 2); 522  by‹s ; 523 } } 525  $”rÜ_r¥ (cÚ¡  l2ÿp_äame * äame ,  tid_d©a * tid ) 527 ušt16_t ”rÜ ; 529 `þ—r_tid ( tid ); 531 ià( äame -> size < 2) { 532 `´št_‹xt ( COLOR_ERROR , "invalid size"); 533 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 537 ”rÜ = `g‘_be16 ( äame -> d©a ); 539 `´št_f›ld ("E¼Ü code: 0x%2.2x", ”rÜ ); 540 } } 542  $£rviû_»q (cÚ¡  l2ÿp_äame * äame ,  tid_d©a * tid ) 544 ušt32_t £¬ch_by‹s ; 546 £¬ch_by‹s = `g‘_by‹s ( äame -> d©a , f¿me-> size ); 547 `´št_f›ld ("S—rch…©‹º: [ËÀ%d]", £¬ch_by‹s ); 549 ià( £¬ch_by‹s + 2 > äame -> size ) { 550 `´št_‹xt ( COLOR_ERROR , "invalid search†ist†ength"); 551 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 555 `decode_d©a_–em’ts (0, 2, äame -> d©a , £¬ch_by‹s , NULL ); 557 `´št_f›ld ("Max„ecord count: %d", 558 `g‘_be16 ( äame -> d©a + £¬ch_by‹s )); 560 `´št_cÚtšu©iÚ ( äame -> d©a + £¬ch_by‹s + 2, 561 äame -> size - £¬ch_by‹s - 2); 562 } } 564  $£rviû_r¥ (cÚ¡  l2ÿp_äame * äame ,  tid_d©a * tid ) 566 ušt16_t couÁ ; 567  i ; 569 `þ—r_tid ( tid ); 571 ià( äame -> size < 4) { 572 `´št_‹xt ( COLOR_ERROR , "invalid size"); 573 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 577 couÁ = `g‘_be16 ( äame -> d©a + 2); 579 `´št_f›ld ("TÙ®„ecÜd couÁ: %d", `g‘_be16 ( äame -> d©a )); 580 `´št_f›ld ("Cu¼’ˆ»cÜd couÁ: %d", couÁ ); 582  i = 0; i < couÁ ; i++) 583 `´št_f›ld ("Record handle: 0x%4.4x", 584 `g‘_be32 ( äame -> d©a + 4 + ( i * 4))); 586 `´št_cÚtšu©iÚ ( äame -> d©a + 4 + ( couÁ * 4), 587 äame -> size - 4 - ( couÁ * 4)); 588 } } 590  $©Œ_»q (cÚ¡  l2ÿp_äame * äame ,  tid_d©a * tid ) 592 ušt32_t ©Œ_by‹s ; 594 ià( äame -> size < 6) { 595 `´št_‹xt ( COLOR_ERROR , "invalid size"); 596 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 600 `´št_f›ld ("RecÜd hªdË: 0x%4.4x", `g‘_be32 ( äame -> d©a )); 601 `´št_f›ld ("Max‡‰ribu‹ by‹s: %d", `g‘_be16 ( äame -> d©a + 4)); 603 ©Œ_by‹s = `g‘_by‹s ( äame -> d©a + 6, f¿me-> size - 6); 604 `´št_f›ld ("A‰ribu‹†i¡: [ËÀ%d]", ©Œ_by‹s ); 606 ià( ©Œ_by‹s + 6 > äame -> size ) { 607 `´št_‹xt ( COLOR_ERROR , "invalid‡ttribute†ist†ength"); 608 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 612 `decode_d©a_–em’ts (0, 2, äame -> d©a + 6, ©Œ_by‹s , NULL ); 614 `¡Üe_cÚtšu©iÚ ( tid , äame -> d©a + 6 + ©Œ_by‹s , 615 äame -> size - 6 - ©Œ_by‹s ); 616 } } 618  $©Œ_r¥ (cÚ¡  l2ÿp_äame * äame ,  tid_d©a * tid ) 620 ušt16_t by‹s ; 622 by‹s = `commÚ_r¥ ( äame , tid ); 624 `hªdË_cÚtšu©iÚ ( tid , çl£ , by‹s , 625 äame -> d©a + 2, f¿me-> size - 2); 627 `þ—r_tid ( tid ); 628 } } 630  $£¬ch_©Œ_»q (cÚ¡  l2ÿp_äame * äame , 631  tid_d©a * tid ) 633 ušt32_t £¬ch_by‹s , ©Œ_by‹s ; 635 £¬ch_by‹s = `g‘_by‹s ( äame -> d©a , f¿me-> size ); 636 `´št_f›ld ("S—rch…©‹º: [ËÀ%d]", £¬ch_by‹s ); 638 ià( £¬ch_by‹s + 2 > äame -> size ) { 639 `´št_‹xt ( COLOR_ERROR , "invalid search†ist†ength"); 640 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 644 `decode_d©a_–em’ts (0, 2, äame -> d©a , £¬ch_by‹s , NULL ); 646 `´št_f›ld ("Max„ecord count: %d", 647 `g‘_be16 ( äame -> d©a + £¬ch_by‹s )); 649 ©Œ_by‹s = `g‘_by‹s ( äame -> d©a + £¬ch_by‹s + 2, 650 äame -> size - £¬ch_by‹s - 2); 651 `´št_f›ld ("A‰ribu‹†i¡: [ËÀ%d]", ©Œ_by‹s ); 653 `decode_d©a_–em’ts (0, 2, äame -> d©a + £¬ch_by‹s + 2, 654 ©Œ_by‹s , NULL ); 656 `¡Üe_cÚtšu©iÚ ( tid , äame -> d©a + £¬ch_by‹s + 2 + ©Œ_by‹s , 657 äame -> size - £¬ch_by‹s - 2 - ©Œ_by‹s ); 658 } } 660  $£¬ch_©Œ_r¥ (cÚ¡  l2ÿp_äame * äame , 661  tid_d©a * tid ) 663 ušt16_t by‹s ; 665 by‹s = `commÚ_r¥ ( äame , tid ); 667 `hªdË_cÚtšu©iÚ ( tid , Œue , by‹s , äame -> d©a + 2, f¿me-> size - 2); 669 `þ—r_tid ( tid ); 670 } } 672  ssdp_d©a { 673 ušt8_t mpdu ; 674 cÚ¡ * m¡r ; 675 (* mfunc è(cÚ¡  l2ÿp_äame * mäame ,  tid_d©a * mtid ); 678 cÚ¡  sdp_d©a gsdp_bË [] = { 679 { 0x01, "E¼Ü Re¥Ú£", ”rÜ_r¥ }, 680 { 0x02, "S”viû S—rch Reque¡", £rviû_»q }, 681 { 0x03, "S”viû S—rch Re¥Ú£", £rviû_r¥ }, 682 { 0x04, "S”viû A‰ribu‹ Reque¡", ©Œ_»q }, 683 { 0x05, "S”viû A‰ribu‹ Re¥Ú£", ©Œ_r¥ }, 684 { 0x06, "S”viû S—rch A‰ribu‹ Reque¡", £¬ch_©Œ_»q }, 685 { 0x07, "S”viû S—rch A‰ribu‹ Re¥Ú£", £¬ch_©Œ_r¥ }, 689  $sdp_·ck‘ (cÚ¡  l2ÿp_äame * äame ) 691 ušt8_t pdu ; 692 ušt16_t tid , ¶’ ; 693  l2ÿp_äame sdp_äame ; 694  tid_d©a * tid_šfo ; 695 cÚ¡  sdp_d©a *sdp_d©¨ð NULL ; 696 cÚ¡ * pdu_cÞÜ , * pdu_¡r ; 697  i ; 699 `l2ÿp_äame_puÎ (& sdp_äame , äame , 0); 701 ià(! `l2ÿp_äame_g‘_u8 (& sdp_äame , & pdu ) || 702 ! `l2ÿp_äame_g‘_be16 (& sdp_äame , & tid ) || 703 ! `l2ÿp_äame_g‘_be16 (& sdp_äame , & ¶’ )) { 704 `´št_‹xt ( COLOR_ERROR , "frameoo short"); 705 `·ck‘_hexdump ( äame -> d©a , f¿me-> size ); 709 ià( sdp_äame . size !ð ¶’ ) { 710 `´št_‹xt ( COLOR_ERROR , "invalid frame size"); 711 `·ck‘_hexdump ( sdp_äame . d©a , sdp_äame. size ); 715  i = 0; sdp_bË [i]. ¡r ; i++) { 716 ià( sdp_bË [ i ]. pdu ==…du) { 717 sdp_d©a = & sdp_bË [ i ]; 722 ià( sdp_d©a ) { 723 ià( sdp_d©a -> func ) { 724 ià( äame -> š ) 725 pdu_cÞÜ = COLOR_MAGENTA ; 727 pdu_cÞÜ = COLOR_BLUE ; 729 pdu_cÞÜ = COLOR_WHITE_BG ; 730 pdu_¡r = sdp_d©a -> ¡r ; 732 pdu_cÞÜ = COLOR_WHITE_BG ; 733 pdu_¡r = "Unknown"; 736 `´št_šd’t (6, pdu_cÞÜ , "SDP: ", pdu_¡r , COLOR_OFF , 737 " (0x%2.2xètid %d†’ %d", pdu , tid , ¶’ ); 739 tid_šfo = `g‘_tid ( tid , äame -> chª ); 741 ià(! sdp_d©a || !sdp_d©a-> func || ! tid_šfo ) { 742 `·ck‘_hexdump ( sdp_äame . d©a , sdp_äame. size ); 746 sdp_d©a -> `func (& sdp_äame , tid_šfo ); 747 } } @monitor/sdp.h 25  sdp_·ck‘ (cÚ¡  l2ÿp_äame * äame ); @monitor/uuid.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<¡ršg.h > 32  ~"uuid.h " 35 ušt16_t muuid ; 36 cÚ¡ * m¡r ; 37 } guuid16_bË [] = { 340 cÚ¡ * $uuid16_to_¡r ( ušt16_t uuid ) 342  i ; 344  i = 0; uuid16_bË [i]. ¡r ; i++) { 345 ià( uuid16_bË [ i ]. uuid == uuid) 346  uuid16_bË [ i ]. ¡r ; 350 } } 352 cÚ¡ * $uuid32_to_¡r ( ušt32_t uuid ) 354 ià(( uuid & 0xffff0000) == 0x0000) 355  `uuid16_to_¡r ( uuid & 0x0000ffff); 358 } } 360 cÚ¡ * $uuid128_to_¡r (cÚ¡ * uuid ) 363 } } 365 cÚ¡ * $uuid¡r_to_¡r (cÚ¡ * uuid ) 367 ušt32_t v® ; 369 ià(! uuid ) 370  NULL ; 372 ià( `¡¾’ ( uuid ) != 36) 373  NULL ; 375 ià( `¡ºÿ£cmp ( uuid + 8, "-0000-1000-8000-00805f9b34fb", 28)) 378 ià( `ssÿnf ( uuid , "%08x-0000-1000-8000-00805f9b34fb", & v® ) != 1) 379  NULL ; 381  `uuid32_to_¡r ( v® ); 382 } } @monitor/uuid.h 25  ~<¡dšt.h > 27 cÚ¡ * uuid16_to_¡r ( ušt16_t uuid ); 28 cÚ¡ * uuid32_to_¡r ( ušt32_t uuid ); 29 cÚ¡ * uuid128_to_¡r (cÚ¡ * uuid ); 31 cÚ¡ * uuid¡r_to_¡r (cÚ¡ * uuid ); @monitor/vendor.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~"·ck‘.h " 30  ~"v’dÜ.h " 32  $v’dÜ_ev’t ( ušt16_t mªuçùu»r , cÚ¡ * d©a , ušt8_t size ) 34 `·ck‘_hexdump ( d©a , size ); 35 } } @monitor/vendor.h 25  ~<¡dšt.h > 27  v’dÜ_ev’t ( ušt16_t mªuçùu»r , cÚ¡ * d©a , ušt8_t size ); @obexd/client/bluetooth.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~<”ºo.h > 30  ~<š‰y³s.h > 32  ~ 33  ~ 35  ~ 36  ~ 37  ~ 38  ~ 40  ~"btio/btio.h " 42  ~"log.h " 43  ~"Œª¥Üt.h " 44  ~"blu‘oÙh.h " 46  #BT_RX_MTU 32767 ) 47  #BT_TX_MTU 32767 ) 49  #OBC_BT_ERROR `obc_bt_”rÜ_qu¬k () ) 51  sblu‘oÙh_£ssiÚ { 52 gušt mid ; 53 bdaddr_t m¤c ; 54 bdaddr_t md¡ ; 55 ušt16_t mpÜt ; 56 sdp_£ssiÚ_t * msdp ; 57 sdp_»cÜd_t * msdp_»cÜd ; 58 GIOChªÃl * mio ; 59 * m£rviû ; 60 obc_Œª¥Üt_func mfunc ; 61 * mu£r_d©a ; 64  GSLi¡ * g£ssiÚs = NULL ; 66  GQu¬k $obc_bt_”rÜ_qu¬k () 68  `g_qu¬k_äom_¡©ic_¡ršg ("obc-bluetooth-error-quark"); 69 } } 71  $£ssiÚ_de¡roy ( blu‘oÙh_£ssiÚ * £ssiÚ ) 73 `DBG ("%p", £ssiÚ ); 75 ià( `g_¦i¡_fšd ( £ssiÚs , £ssiÚ è=ð NULL ) 78 £ssiÚs = `g_¦i¡_»move (£ssiÚs, £ssiÚ ); 80 ià( £ssiÚ -> io !ð NULL ) { 81 `g_io_chªÃl_shutdown ( £ssiÚ -> io , TRUE , NULL ); 82 `g_io_chªÃl_uÄef ( £ssiÚ -> io ); 85 ià( £ssiÚ -> sdp ) 86 `sdp_þo£ ( £ssiÚ -> sdp ); 88 ià( £ssiÚ -> sdp_»cÜd ) 89 `sdp_»cÜd_ä“ ( £ssiÚ -> sdp_»cÜd ); 91 `g_ä“ ( £ssiÚ -> £rviû ); 92 `g_ä“ ( £ssiÚ ); 93 } } 95  $Œª¥Üt_ÿÎback ( GIOChªÃl * io , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 97  blu‘oÙh_£ssiÚ * £ssiÚ = u£r_d©a ; 99 `DBG (""); 101 ià( £ssiÚ -> func ) 102 £ssiÚ -> `func ( io , ”r , sessiÚ-> u£r_d©a ); 104 ià( ”r !ð NULL ) 105 `£ssiÚ_de¡roy ( £ssiÚ ); 106 } } 108  GIOChªÃl * $Œª¥Üt_cÚÃù (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ , 109 ušt16_t pÜt , BtIOCÚÃù funùiÚ , 110 gpoš‹r u£r_d©a ) 112 GIOChªÃl * io ; 113 GE¼Ü * ”r = NULL ; 115 `DBG ("p܈%u", pÜt ); 117 ià( pÜt > 31) { 118 io = `bt_io_cÚÃù ( funùiÚ , u£r_d©a , 119 NULL , & ”r , 120 BT_IO_OPT_SOURCE_BDADDR , ¤c , 121 BT_IO_OPT_DEST_BDADDR , d¡ , 122 BT_IO_OPT_PSM , pÜt , 123 BT_IO_OPT_MODE , BT_IO_MODE_ERTM , 124 BT_IO_OPT_OMTU , BT_TX_MTU , 125 BT_IO_OPT_IMTU , BT_RX_MTU , 126 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 127 BT_IO_OPT_INVALID ); 129 io = `bt_io_cÚÃù ( funùiÚ , u£r_d©a , 130 NULL , & ”r , 131 BT_IO_OPT_SOURCE_BDADDR , ¤c , 132 BT_IO_OPT_DEST_BDADDR , d¡ , 133 BT_IO_OPT_CHANNEL , pÜt , 134 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 135 BT_IO_OPT_INVALID ); 138 ià( io !ð NULL ) 139  io ; 141 `”rÜ ("%s", ”r -> mes§ge ); 142 `g_”rÜ_ä“ ( ”r ); 143  NULL ; 144 } } 146  $£¬ch_ÿÎback ( ušt8_t ty³ , ušt16_t ¡©us , 147 ušt8_t * r¥ , size_t size , * u£r_d©a ) 149  blu‘oÙh_£ssiÚ * £ssiÚ = u£r_d©a ; 150  sÿÂed , by‹¦eá = size ; 151  £qËn = 0; 152 ušt8_t d©aTy³ ; 153 ušt16_t pÜt = 0; 154 GE¼Ü * g”r = NULL ; 156 ià( ¡©us || ty³ !ð SDP_SVC_SEARCH_ATTR_RSP ) 157  çžed ; 159 sÿÂed = `sdp_exŒaù_£qty³ ( r¥ , by‹¦eá , & d©aTy³ , & £qËn ); 160 ià(! sÿÂed || ! £qËn ) 161  çžed ; 163 r¥ +ð sÿÂed ; 164 by‹¦eá -ð sÿÂed ; 166 sdp_»cÜd_t * »c ; 167 sdp_li¡_t * ´Ùos ; 168 sdp_d©a_t * d©a ; 169  »csize , ch = -1; 171 »csize = 0; 172 »c = `sdp_exŒaù_pdu ( r¥ , by‹¦eá , & »csize ); 173 ià(! »c ) 176 ià(! »csize ) { 177 `sdp_»cÜd_ä“ ( »c ); 181 ià(! `sdp_g‘_acûss_´Ùos ( »c , & ´Ùos )) { 182 ch = `sdp_g‘_´Ùo_pÜt ( ´Ùos , RFCOMM_UUID ); 183 `sdp_li¡_fÜ—ch ( ´Ùos , 184 ( sdp_li¡_func_t è sdp_li¡_ä“ , NULL ); 185 `sdp_li¡_ä“ ( ´Ùos , NULL ); 186 ´Ùos = NULL ; 189 #ifdeà __TIZEN_PATCH__ 191 ià( ch == -1) { 192 d©a = `sdp_d©a_g‘ ( »c , 0x0200); 194 ià( d©a !ð NULL && (d©a-> v® . ušt16 & 0x0101) == 196 ch = d©a -> v® . ušt16 ; 199 d©a = `sdp_d©a_g‘ ( »c , 0x0200); 201 ià( d©a !ð NULL && (d©a-> v® . ušt16 & 0x0101) == 0x0001) 202 ch = d©a -> v® . ušt16 ; 208 ià( ch > 0) { 209 pÜt = ch ; 210 £ssiÚ -> sdp_»cÜd = »c ; 214 `sdp_»cÜd_ä“ ( »c ); 216 sÿÂed +ð »csize ; 217 r¥ +ð »csize ; 218 by‹¦eá -ð »csize ; 219 }  sÿÂed < size && by‹¦eá > 0); 221 ià( pÜt == 0) 222  çžed ; 224 £ssiÚ -> pÜt =…ort; 226 `g_io_chªÃl_£t_þo£_Ú_uÄef ( £ssiÚ -> io , FALSE ); 227 `g_io_chªÃl_uÄef ( £ssiÚ -> io ); 229 £ssiÚ -> io = `Œª¥Üt_cÚÃù (&£ssiÚ-> ¤c , &£ssiÚ-> d¡ , pÜt , 230 Œª¥Üt_ÿÎback , £ssiÚ ); 231 ià( £ssiÚ -> io !ð NULL ) { 232 `sdp_þo£ ( £ssiÚ -> sdp ); 233 £ssiÚ -> sdp = NULL ; 237 çžed : 238 ià( £ssiÚ -> io !ð NULL ) { 239 `g_io_chªÃl_shutdown ( £ssiÚ -> io , TRUE , NULL ); 240 `g_io_chªÃl_uÄef ( £ssiÚ -> io ); 241 £ssiÚ -> io = NULL ; 244 `g_£t_”rÜ (& g”r , OBC_BT_ERROR , - EIO , 246 ià( £ssiÚ -> func ) 247 £ssiÚ -> `func (£ssiÚ-> io , g”r , sessiÚ-> u£r_d©a ); 249 `g_þ—r_”rÜ (& g”r ); 251 `£ssiÚ_de¡roy ( £ssiÚ ); 252 } } 254  gboÞ—n $´oûss_ÿÎback ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 255 gpoš‹r u£r_d©a ) 257  blu‘oÙh_£ssiÚ * £ssiÚ = u£r_d©a ; 259 ià( cÚd & ( G_IO_ERR | G_IO_HUP | G_IO_NVAL )) 260  FALSE ; 262 ià( `sdp_´oûss ( £ssiÚ -> sdp ) < 0) 263  FALSE ; 265  TRUE ; 266 } } 268  $bt_¡ršg2uuid ( uuid_t * uuid , cÚ¡ * ¡ršg ) 270 ušt32_t d©a0 , d©a4 ; 271 ušt16_t d©a1 , d©a2 , d©a3 , d©a5 ; 273 ià( `ssÿnf ( ¡ršg , "%08x-%04hx-%04hx-%04hx-%08x%04hx", 274 & d©a0 , & d©a1 , & d©a2 , & d©a3 , & d©a4 , & d©a5 ) == 6) { 275 ušt8_t v® [16]; 277 d©a0 = `g_htÚl (data0); 278 d©a1 = `g_htÚs (data1); 279 d©a2 = `g_htÚs (data2); 280 d©a3 = `g_htÚs (data3); 281 d©a4 = `g_htÚl (data4); 282 d©a5 = `g_htÚs (data5); 284 `memýy (& v® [0], & d©a0 , 4); 285 `memýy (& v® [4], & d©a1 , 2); 286 `memýy (& v® [6], & d©a2 , 2); 287 `memýy (& v® [8], & d©a3 , 2); 288 `memýy (& v® [10], & d©a4 , 4); 289 `memýy (& v® [14], & d©a5 , 2); 291 `sdp_uuid128_ü—‹ ( uuid , v® ); 296  - EINVAL ; 297 } } 299  gboÞ—n $£rviû_ÿÎback ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 300 gpoš‹r u£r_d©a ) 302  blu‘oÙh_£ssiÚ * £ssiÚ = u£r_d©a ; 303 sdp_li¡_t * £¬ch , * ©Œid ; 304 ušt32_t ¿nge = 0x0000ffff; 305 GE¼Ü * g”r = NULL ; 306 uuid_t uuid ; 308 ià( cÚd & G_IO_NVAL ) 309  FALSE ; 311 ià( cÚd & G_IO_ERR ) 312  çžed ; 314 ià( `sdp_£t_nÙify ( £ssiÚ -> sdp , £¬ch_ÿÎback , session) < 0) 315  çžed ; 317 ià( `bt_¡ršg2uuid (& uuid , £ssiÚ -> £rviû ) < 0) 318  çžed ; 320 £¬ch = `sdp_li¡_­³nd ( NULL , & uuid ); 321 ©Œid = `sdp_li¡_­³nd ( NULL , & ¿nge ); 323 ià( `sdp_£rviû_£¬ch_©Œ_async ( £ssiÚ -> sdp , 324 £¬ch , SDP_ATTR_REQ_RANGE , ©Œid ) < 0) { 325 `sdp_li¡_ä“ ( ©Œid , NULL ); 326 `sdp_li¡_ä“ ( £¬ch , NULL ); 327  çžed ; 330 `sdp_li¡_ä“ ( ©Œid , NULL ); 331 `sdp_li¡_ä“ ( £¬ch , NULL ); 333 `g_io_add_w©ch ( io , G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 334 ´oûss_ÿÎback , £ssiÚ ); 336  FALSE ; 338 çžed : 339 `g_io_chªÃl_shutdown ( £ssiÚ -> io , TRUE , NULL ); 340 `g_io_chªÃl_uÄef ( £ssiÚ -> io ); 341 £ssiÚ -> io = NULL ; 343 `g_£t_”rÜ (& g”r , OBC_BT_ERROR , - EIO , 345 ià( £ssiÚ -> func ) 346 £ssiÚ -> `func (£ssiÚ-> io , g”r , sessiÚ-> u£r_d©a ); 347 `g_þ—r_”rÜ (& g”r ); 349 `£ssiÚ_de¡roy ( £ssiÚ ); 350  FALSE ; 351 } } 353  sdp_£ssiÚ_t * $£rviû_cÚÃù (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ , 354 GIOFunc funùiÚ , gpoš‹r u£r_d©a ) 356  blu‘oÙh_£ssiÚ * £ssiÚ = u£r_d©a ; 357 sdp_£ssiÚ_t * sdp ; 358 GIOChªÃl * io ; 360 `DBG (""); 362 sdp = `sdp_cÚÃù ( ¤c , d¡ , SDP_NON_BLOCKING ); 363 ià( sdp =ð NULL ) 364  NULL ; 366 io = `g_io_chªÃl_unix_Ãw ( `sdp_g‘_sock‘ ( sdp )); 367 ià( io =ð NULL ) { 368 `sdp_þo£ ( sdp ); 369  NULL ; 372 `g_io_add_w©ch ( io , G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 373 funùiÚ , u£r_d©a ); 375 £ssiÚ -> io = io; 377  sdp ; 378 } } 380  $£ssiÚ_cÚÃù ( blu‘oÙh_£ssiÚ * £ssiÚ ) 382  ”r ; 384 `DBG ("£ssiÚ %p", £ssiÚ ); 386 ià( £ssiÚ -> pÜt > 0) { 387 £ssiÚ -> io = `Œª¥Üt_cÚÃù (&£ssiÚ-> ¤c , &£ssiÚ-> d¡ , 388 £ssiÚ -> pÜt , 389 Œª¥Üt_ÿÎback , 390 £ssiÚ ); 391 ”r = ( £ssiÚ -> io =ð NULL è? - EINVAL : 0; 393 £ssiÚ -> sdp = `£rviû_cÚÃù (&£ssiÚ-> ¤c , &£ssiÚ-> d¡ , 394 £rviû_ÿÎback , £ssiÚ ); 395 ”r = ( £ssiÚ -> sdp =ð NULL è? - ENOMEM : 0; 398  ”r ; 399 } } 401  gušt $blu‘oÙh_cÚÃù (cÚ¡ * sourû , cÚ¡ * de¡š©iÚ , 402 cÚ¡ * £rviû , ušt16_t pÜt , 403 obc_Œª¥Üt_func func , * u£r_d©a ) 405  blu‘oÙh_£ssiÚ * £ssiÚ ; 406  gušt id = 0; 408 `DBG ("src %s dest %s service %s…ort %u", 409 sourû , de¡š©iÚ , £rviû , pÜt ); 411 ià( de¡š©iÚ =ð NULL ) 414 £ssiÚ = `g_Œy_m®loc0 ((*session)); 415 ià( £ssiÚ =ð NULL ) 418 £ssiÚ -> id = ++id; 419 £ssiÚ -> func = func; 420 £ssiÚ -> pÜt =…ort; 421 £ssiÚ -> u£r_d©a = user_data; 423 `¡r2ba ( de¡š©iÚ , & £ssiÚ -> d¡ ); 424 `¡r2ba ( sourû , & £ssiÚ -> ¤c ); 426 ià( `£ssiÚ_cÚÃù ( £ssiÚ ) < 0) { 427 `g_ä“ ( £ssiÚ ); 431 £ssiÚ -> £rviû = `g_¡rdup (service); 432 £ssiÚs = `g_¦i¡_´•’d (£ssiÚs, £ssiÚ ); 434  £ssiÚ -> id ; 435 } } 437  $blu‘oÙh_discÚÃù ( gušt id ) 439 GSLi¡ * l ; 441 `DBG (""); 443  l = £ssiÚs ;†;† =†-> Ãxt ) { 444  blu‘oÙh_£ssiÚ * £ssiÚ = l -> d©a ; 446 ià( £ssiÚ -> id == id) { 447 `£ssiÚ_de¡roy ( £ssiÚ ); 451 } } 453  $blu‘oÙh_g‘·ck‘Ýt ( GIOChªÃl * io , * tx_mtu , * rx_mtu ) 455  sk = `g_io_chªÃl_unix_g‘_fd ( io ); 456  ty³ ; 457  omtu = -1; 458  imtu = -1; 459 sockËn_t Ën = (); 461 `DBG (""); 463 ià( `g‘sockÝt ( sk , SOL_SOCKET , SO_TYPE , & ty³ , & Ën ) < 0) 464  - ”ºo ; 466 ià( ty³ !ð SOCK_SEQPACKET ) 467  - EINVAL ; 469 ià(! `bt_io_g‘ ( io , NULL , BT_IO_OPT_OMTU , & omtu , 470 BT_IO_OPT_IMTU , & imtu , 471 BT_IO_OPT_INVALID )) 472  - EINVAL ; 474 ià( tx_mtu ) 475 * tx_mtu = omtu ; 477 ià( rx_mtu ) 478 * rx_mtu = imtu ; 481 } } 483 cÚ¡ * $blu‘oÙh_g‘©Œibu‹ ( gušt id ,  ©Œibu‹_id ) 485 GSLi¡ * l ; 486 sdp_d©a_t * d©a ; 488  l = £ssiÚs ;†;† =†-> Ãxt ) { 489  blu‘oÙh_£ssiÚ * £ssiÚ = l -> d©a ; 491 ià( £ssiÚ -> id != id) 494 ià( £ssiÚ -> sdp_»cÜd =ð NULL ) 498 ià( ©Œibu‹_id =ð SDP_ATTR_PFILE_DESC_LIST ) { 499 sdp_li¡_t * descs ; 500 * »t = NULL ; 502 ià( `sdp_g‘_´ofže_descs ( £ssiÚ -> sdp_»cÜd , 503 & descs ) < 0) 504  NULL ; 506 ià( descs && descs-> d©a ) { 507 sdp_´ofže_desc_t * desc = descs -> d©a ; 508 »t = `GINT_TO_POINTER ( desc -> v”siÚ ); 511 `sdp_li¡_ä“ ( descs , ä“ ); 513  »t ; 516 d©a = `sdp_d©a_g‘ ( £ssiÚ -> sdp_»cÜd , ©Œibu‹_id ); 517 ià(! d©a ) 520  & d©a -> v® ; 522  NULL ; 523 } } 525  obc_Œª¥Üt gblu‘oÙh = { 526 . Çme = "Bluetooth", 527 . gcÚÃù = blu‘oÙh_cÚÃù , 528 . gg‘·ck‘Ýt = blu‘oÙh_g‘·ck‘Ýt , 529 . gdiscÚÃù = blu‘oÙh_discÚÃù , 530 . gg‘©Œibu‹ = blu‘oÙh_g‘©Œibu‹ , 533  $blu‘oÙh_š™ () 535 `DBG (""); 537  `obc_Œª¥Üt_»gi¡” (& blu‘oÙh ); 538 } } 540  $blu‘oÙh_ex™ () 542 `DBG (""); 544 `obc_Œª¥Üt_uÄegi¡” (& blu‘oÙh ); 545 } } @obexd/client/bluetooth.h 24  blu‘oÙh_š™ (); 25  blu‘oÙh_ex™ (); @obexd/client/dbus.c 22 #ifdeà HAVE_CONFIG_H 23  ~ 26  ~ 27  ~ 29  ~"log.h " 30  ~"dbus.h " 32  $­³nd_v¬ŸÁ ( DBusMes§geI‹r * ™” , 33  ty³ , * v®ue ) 35  sig [2]; 36 DBusMes§geI‹r v®ue™” ; 38 sig [0] = ty³ ; 39 sig [1] = 0; 41 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_VARIANT , 42 sig , & v®ue™” ); 44 `dbus_mes§ge_™”_­³nd_basic (& v®ue™” , ty³ , v®ue ); 46 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v®ue™” ); 47 } } 49  $obex_dbus_diù_­³nd ( DBusMes§geI‹r * diù , 50 cÚ¡ * key ,  ty³ , * v®ue ) 52 DBusMes§geI‹r key™” ; 54 ià( ty³ =ð DBUS_TYPE_STRING ) { 55 cÚ¡ * ¡r = *((cÚ¡ **è v®ue ); 56 ià( ¡r =ð NULL ) 60 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , 61 NULL , & key™” ); 63 `dbus_mes§ge_™”_­³nd_basic (& key™” , DBUS_TYPE_STRING , & key ); 65 `­³nd_v¬ŸÁ (& key™” , ty³ , v®ue ); 67 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & key™” ); 68 } } 70  $obex_dbus_sigÇl_´Ý”ty_chªged ( DBusCÚÃùiÚ * cÚn , 71 cÚ¡ * ·th , 72 cÚ¡ * š‹rçû , 73 cÚ¡ * Çme , 74  ty³ , * v®ue ) 76 DBusMes§ge * sigÇl ; 77 DBusMes§geI‹r ™” ; 79 sigÇl = `dbus_mes§ge_Ãw_sigÇl ( ·th , š‹rçû , "PropertyChanged"); 80 ià( sigÇl =ð NULL ) { 81 `”rÜ ("Unableo‡llocate‚ew %s.PropertyChanged signal", 82 š‹rçû ); 86 `dbus_mes§ge_™”_š™_­³nd ( sigÇl , & ™” ); 88 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_STRING , & Çme ); 90 `­³nd_v¬ŸÁ (& ™” , ty³ , v®ue ); 92  `g_dbus_£nd_mes§ge ( cÚn , sigÇl ); 93 } } @obexd/client/dbus.h 22 #iâdeà __OBEX_DBUS_H 23  #__OBEX_DBUS_H ) 25 #ifdeà __ýlu¥lus 29  ~ 32  #OBC_PROPERTIES_ARRAY_SIGNATURE DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING \ 33 DBUS_TYPE_STRING_AS_STRING \ 34 DBUS_TYPE_VARIANT_AS_STRING \ 35 DBUS_DICT_ENTRY_END_CHAR_AS_STRING ) 37  obex_dbus_diù_­³nd ( DBusMes§geI‹r * diù , cÚ¡ * key ,  ty³ , 38 * v®ue ); 40  obex_dbus_sigÇl_´Ý”ty_chªged ( DBusCÚÃùiÚ * cÚn , cÚ¡ * ·th , 41 cÚ¡ * š‹rçû , cÚ¡ * Çme , 42  ty³ , * v®ue ); 44 #ifdeà __ýlu¥lus @obexd/client/driver.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡ršg.h > 29  ~<”ºo.h > 30  ~ 31  ~ 33  ~"Œªsãr.h " 34  ~"£ssiÚ.h " 35  ~"driv”.h " 36  ~"log.h " 38  GSLi¡ * gdriv”s = NULL ; 40  obc_driv” * $obc_driv”_fšd (cÚ¡ * ·‰”n ) 42 GSLi¡ * l ; 44  l = driv”s ;†;† =†-> Ãxt ) { 45  obc_driv” * driv” = l -> d©a ; 47 ià( `¡rÿ£cmp ( ·‰”n , driv” -> £rviû ) == 0) 48  driv” ; 50 ià( `¡rÿ£cmp ( ·‰”n , driv” -> uuid ) == 0) 51  driv” ; 54  NULL ; 55 } } 57  $obc_driv”_»gi¡” ( obc_driv” * driv” ) 59 ià(! driv” ) { 60 `”rÜ ("Invalid driver"); 61  - EINVAL ; 64 ià( `obc_driv”_fšd ( driv” -> £rviû )) { 65 `”rÜ ("Permission denied: service %s‡lready„egistered", 66 driv” -> £rviû ); 67  - EPERM ; 70 `DBG ("driv” %°£rviû % »gi¡”ed", driv” , driv”-> £rviû ); 72 driv”s = `g_¦i¡_­³nd (driv”s, driv” ); 75 } } 77  $obc_driv”_uÄegi¡” ( obc_driv” * driv” ) 79 ià(! `g_¦i¡_fšd ( driv”s , driv” )) { 80 `”rÜ ("UÇbËØuÄegi¡”: NØsuch driv” %p", driv” ); 84 `DBG ("driv” %°£rviû % uÄegi¡”ed", driv” , driv”-> £rviû ); 86 driv”s = `g_¦i¡_»move (driv”s, driv” ); 87 } } @obexd/client/driver.h 24  sobc_driv” { 25 cÚ¡ * m£rviû ; 26 cÚ¡ * muuid ; 27 * mrg‘ ; 28 gsize mrg‘_Ën ; 29 *(* msuµÜ‹d_ã©u»s è( obc_£ssiÚ * m£ssiÚ ); 30 (* m´obe è( obc_£ssiÚ * m£ssiÚ ); 31 (* m»move è( obc_£ssiÚ * m£ssiÚ ); 34  obc_driv”_»gi¡” ( obc_driv” * driv” ); 35  obc_driv”_uÄegi¡” ( obc_driv” * driv” ); 36  obc_driv” * obc_driv”_fšd (cÚ¡ * ·‰”n ); @obexd/client/ftp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<”ºo.h > 29  ~<¡ršg.h > 31  ~ 33  ~"dbus.h " 34  ~"log.h " 36  ~"Œªsãr.h " 37  ~"£ssiÚ.h " 38  ~"driv”.h " 39  ~"áp.h " 41  #OBEX_FTP_UUID \ 42 "\xF9\xEC\x7B\xC4\x95\x3C\x11\xD2\x98\x4E\x52\x54\x00\xDC\x9E\x09" ) 43  #OBEX_FTP_UUID_LEN 16 ) 45  #FTP_INTERFACE "Üg.bluez.obex.FžeT¿nsãr1" ) 46  #ERROR_INTERFACE "Üg.bluez.obex.E¼Ü" ) 47  #FTP_UUID "00001106-0000-1000-8000-00805f9b34fb" ) 48  #PCSUITE_UUID "00005005-0000-1000-8000-0002“000001" ) 50  DBusCÚÃùiÚ * gcÚn = NULL ; 52  sáp_d©a { 53  obc_£ssiÚ * m£ssiÚ ; 56  $async_cb ( obc_£ssiÚ * £ssiÚ ,  obc_Œªsãr * Œªsãr , 57 GE¼Ü * ”r , * u£r_d©a ) 59 DBusMes§ge * »¶y , * msg = u£r_d©a ; 61 ià( ”r !ð NULL ) 62 »¶y = `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".Failed", 63 "%s", ”r -> mes§ge ); 65 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 67 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 68 `dbus_mes§ge_uÄef ( msg ); 69 } } 71  DBusMes§ge * $chªge_fÞd” ( DBusCÚÃùiÚ * cÚÃùiÚ , 72 DBusMes§ge * mes§ge , * u£r_d©a ) 74  áp_d©a * áp = u£r_d©a ; 75  obc_£ssiÚ * £ssiÚ = áp ->session; 76 cÚ¡ * fÞd” ; 77 GE¼Ü * ”r = NULL ; 79 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 80 DBUS_TYPE_STRING , & fÞd” , 81 DBUS_TYPE_INVALID è=ð FALSE ) 82  `g_dbus_ü—‹_”rÜ ( mes§ge , 83 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 85 `obc_£ssiÚ_£©h ( £ssiÚ , fÞd” , async_cb , mes§ge , & ”r ); 86 ià( ”r !ð NULL ) { 87 DBusMes§ge * »¶y ; 88 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , 89 ERROR_INTERFACE ".Failed", 90 "%s", ”r -> mes§ge ); 91 `g_”rÜ_ä“ ( ”r ); 92  »¶y ; 95 `dbus_mes§ge_»f ( mes§ge ); 97  NULL ; 98 } } 100  $xml_–em’t ( GM¬kupP¬£CÚ‹xt * ùxt , 101 cÚ¡ * –em’t , 102 cÚ¡ ** Çmes , 103 cÚ¡ ** v®ues , 104 gpoš‹r u£r_d©a , 105 GE¼Ü ** g”r ) 107 DBusMes§geI‹r diù , * ™” = u£r_d©a ; 108 * key ; 109  i ; 111 ià( `¡rÿ£cmp ("fÞd”", –em’t ) != 0 && strcasecmp("file",ƒlement) != 0) 114 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 115 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 116 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 117 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 119 `obex_dbus_diù_­³nd (& diù , "Ty³", DBUS_TYPE_STRING , & –em’t ); 123 i = 0; 124  key = (*è Çmes [ i ]; key; key = (*)‚ames[++i]) { 125 key [0] = `g_ascii_touµ” (key[0]); 126 ià( `g_¡r_equ® ("Size", key è=ð TRUE ) { 127 gušt64 size ; 128 size = `g_ascii_¡¹Þl ( v®ues [ i ], NULL , 10); 129 `obex_dbus_diù_­³nd (& diù , key , DBUS_TYPE_UINT64 , 130 & size ); 132 `obex_dbus_diù_­³nd (& diù , key , DBUS_TYPE_STRING , 133 & v®ues [ i ]); 136 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 137 } } 139 cÚ¡ GM¬kupP¬£r g·r£r = { 140 xml_–em’t , 141 NULL , 142 NULL , 143 NULL , 144 NULL 147  $li¡_fÞd”_ÿÎback ( obc_£ssiÚ * £ssiÚ , 148  obc_Œªsãr * Œªsãr , 149 GE¼Ü * ”r , * u£r_d©a ) 151 DBusMes§ge * msg = u£r_d©a ; 152 GM¬kupP¬£CÚ‹xt * ùxt ; 153 DBusMes§ge * »¶y ; 154 DBusMes§geI‹r ™” , ¬¿y ; 155 * cÚ‹Ás ; 156 size_t size ; 158 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 160 ià( `obc_Œªsãr_g‘_cÚ‹Ás ( Œªsãr , & cÚ‹Ás , & size ) < 0) 161  dÚe ; 163 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 164 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 165 DBUS_TYPE_ARRAY_AS_STRING 166 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 167 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 168 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & ¬¿y ); 169 ùxt = `g_m¬kup_·r£_cÚ‹xt_Ãw (& ·r£r , 0, & ¬¿y , NULL ); 170 `g_m¬kup_·r£_cÚ‹xt_·r£ ( ùxt , cÚ‹Ás , size , NULL ); 171 `g_m¬kup_·r£_cÚ‹xt_ä“ ( ùxt ); 172 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & ¬¿y ); 173 `g_ä“ ( cÚ‹Ás ); 175 dÚe : 176 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 177 `dbus_mes§ge_uÄef ( msg ); 178 } } 180  DBusMes§ge * $ü—‹_fÞd” ( DBusCÚÃùiÚ * cÚÃùiÚ , 181 DBusMes§ge * mes§ge , * u£r_d©a ) 183  áp_d©a * áp = u£r_d©a ; 184  obc_£ssiÚ * £ssiÚ = áp ->session; 185 cÚ¡ * fÞd” ; 186 GE¼Ü * ”r = NULL ; 188 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 189 DBUS_TYPE_STRING , & fÞd” , 190 DBUS_TYPE_INVALID è=ð FALSE ) 191  `g_dbus_ü—‹_”rÜ ( mes§ge , 192 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 194 `obc_£ssiÚ_mkdœ ( £ssiÚ , fÞd” , async_cb , mes§ge , & ”r ); 195 ià( ”r !ð NULL ) { 196 DBusMes§ge * »¶y ; 197 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , 198 ERROR_INTERFACE ".Failed", 199 "%s", ”r -> mes§ge ); 200 `g_”rÜ_ä“ ( ”r ); 201  »¶y ; 204 `dbus_mes§ge_»f ( mes§ge ); 206  NULL ; 207 } } 209  DBusMes§ge * $li¡_fÞd” ( DBusCÚÃùiÚ * cÚÃùiÚ , 210 DBusMes§ge * mes§ge , * u£r_d©a ) 212  áp_d©a * áp = u£r_d©a ; 213  obc_£ssiÚ * £ssiÚ = áp ->session; 214  obc_Œªsãr * Œªsãr ; 215 GE¼Ü * ”r = NULL ; 216 DBusMes§ge * »¶y ; 218 Œªsãr = `obc_Œªsãr_g‘ ("x-obex/fÞd”-li¡šg", NULL , NULL, & ”r ); 219 ià( Œªsãr =ð NULL ) 220  çž ; 222 ià( `obc_£ssiÚ_queue ( £ssiÚ , Œªsãr , li¡_fÞd”_ÿÎback , 223 mes§ge , & ”r )) { 224 `dbus_mes§ge_»f ( mes§ge ); 225  NULL ; 228 çž : 229 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", "%s", 230 ”r -> mes§ge ); 231 `g_”rÜ_ä“ ( ”r ); 232  »¶y ; 233 } } 235  DBusMes§ge * $g‘_fže ( DBusCÚÃùiÚ * cÚÃùiÚ , 236 DBusMes§ge * mes§ge , * u£r_d©a ) 238  áp_d©a * áp = u£r_d©a ; 239  obc_£ssiÚ * £ssiÚ = áp ->session; 240  obc_Œªsãr * Œªsãr ; 241 cÚ¡ * rg‘_fže , * sourû_fže ; 242 GE¼Ü * ”r = NULL ; 243 DBusMes§ge * »¶y ; 245 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 246 DBUS_TYPE_STRING , & rg‘_fže , 247 DBUS_TYPE_STRING , & sourû_fže , 248 DBUS_TYPE_INVALID è=ð FALSE ) 249  `g_dbus_ü—‹_”rÜ ( mes§ge , 250 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 252 Œªsãr = `obc_Œªsãr_g‘ ( NULL , sourû_fže , rg‘_fže , & ”r ); 253 ià( Œªsãr =ð NULL ) 254  çž ; 256 ià(! `obc_£ssiÚ_queue ( £ssiÚ , Œªsãr , NULL , NULL, & ”r )) 257  çž ; 259  `obc_Œªsãr_ü—‹_dbus_»¶y ( Œªsãr , mes§ge ); 261 çž : 262 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", "%s", 263 ”r -> mes§ge ); 264 `g_”rÜ_ä“ ( ”r ); 265  »¶y ; 266 } } 268  DBusMes§ge * $put_fže ( DBusCÚÃùiÚ * cÚÃùiÚ , 269 DBusMes§ge * mes§ge , * u£r_d©a ) 271  áp_d©a * áp = u£r_d©a ; 272  obc_£ssiÚ * £ssiÚ = áp ->session; 273  obc_Œªsãr * Œªsãr ; 274 * sourûfže , * rg‘fže ; 275 GE¼Ü * ”r = NULL ; 276 DBusMes§ge * »¶y ; 278 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 279 DBUS_TYPE_STRING , & sourûfže , 280 DBUS_TYPE_STRING , & rg‘fže , 281 DBUS_TYPE_INVALID è=ð FALSE ) 282  `g_dbus_ü—‹_”rÜ ( mes§ge , 283 ERROR_INTERFACE ".InvalidArguments", 286 Œªsãr = `obc_Œªsãr_put ( NULL , rg‘fže , sourûfže , NULL, 0, 287 & ”r ); 288 ià( Œªsãr =ð NULL ) 289  çž ; 291 ià(! `obc_£ssiÚ_queue ( £ssiÚ , Œªsãr , NULL , NULL, & ”r )) 292  çž ; 294  `obc_Œªsãr_ü—‹_dbus_»¶y ( Œªsãr , mes§ge ); 296 çž : 297 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", "%s", 298 ”r -> mes§ge ); 299 `g_”rÜ_ä“ ( ”r ); 300  »¶y ; 301 } } 303  DBusMes§ge * $cÝy_fže ( DBusCÚÃùiÚ * cÚÃùiÚ , 304 DBusMes§ge * mes§ge , * u£r_d©a ) 306  áp_d©a * áp = u£r_d©a ; 307  obc_£ssiÚ * £ssiÚ = áp ->session; 308 cÚ¡ * fž’ame , * de¡Çme ; 309 GE¼Ü * ”r = NULL ; 311 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 312 DBUS_TYPE_STRING , & fž’ame , 313 DBUS_TYPE_STRING , & de¡Çme , 314 DBUS_TYPE_INVALID è=ð FALSE ) 315  `g_dbus_ü—‹_”rÜ ( mes§ge , 316 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 318 `obc_£ssiÚ_cÝy ( £ssiÚ , fž’ame , de¡Çme , async_cb , mes§ge , & ”r ); 319 ià( ”r !ð NULL ) { 320 DBusMes§ge * »¶y ; 321 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", 322 "%s", ”r -> mes§ge ); 323 `g_”rÜ_ä“ ( ”r ); 324  »¶y ; 327 `dbus_mes§ge_»f ( mes§ge ); 329  NULL ; 330 } } 332  DBusMes§ge * $move_fže ( DBusCÚÃùiÚ * cÚÃùiÚ , 333 DBusMes§ge * mes§ge , * u£r_d©a ) 335  áp_d©a * áp = u£r_d©a ; 336  obc_£ssiÚ * £ssiÚ = áp ->session; 337 cÚ¡ * fž’ame , * de¡Çme ; 338 GE¼Ü * ”r = NULL ; 340 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 341 DBUS_TYPE_STRING , & fž’ame , 342 DBUS_TYPE_STRING , & de¡Çme , 343 DBUS_TYPE_INVALID è=ð FALSE ) 344  `g_dbus_ü—‹_”rÜ ( mes§ge , 345 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 347 `obc_£ssiÚ_move ( £ssiÚ , fž’ame , de¡Çme , async_cb , mes§ge , & ”r ); 348 ià( ”r !ð NULL ) { 349 DBusMes§ge * »¶y ; 350 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", 351 "%s", ”r -> mes§ge ); 352 `g_”rÜ_ä“ ( ”r ); 353  »¶y ; 356 `dbus_mes§ge_»f ( mes§ge ); 358  NULL ; 359 } } 361  DBusMes§ge * $d–‘e ( DBusCÚÃùiÚ * cÚÃùiÚ , 362 DBusMes§ge * mes§ge , * u£r_d©a ) 364  áp_d©a * áp = u£r_d©a ; 365  obc_£ssiÚ * £ssiÚ = áp ->session; 366 cÚ¡ * fže ; 367 GE¼Ü * ”r = NULL ; 369 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 370 DBUS_TYPE_STRING , & fže , 371 DBUS_TYPE_INVALID è=ð FALSE ) 372  `g_dbus_ü—‹_”rÜ ( mes§ge , 373 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 375 `obc_£ssiÚ_d–‘e ( £ssiÚ , fže , async_cb , mes§ge , & ”r ); 376 ià( ”r !ð NULL ) { 377 DBusMes§ge * »¶y ; 378 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", 379 "%s", ”r -> mes§ge ); 380 `g_”rÜ_ä“ ( ”r ); 381  »¶y ; 384 `dbus_mes§ge_»f ( mes§ge ); 386  NULL ; 387 } } 389 cÚ¡ GDBusM‘hodTabË gáp_m‘hods [] = { 390 { GDBUS_ASYNC_METHOD ("ChangeFolder", 391 GDBUS_ARGS ({ "fÞd”", "s" }), NULL , chªge_fÞd” ) }, 392 { GDBUS_ASYNC_METHOD ("CreateFolder", 393 GDBUS_ARGS ({ "fÞd”", "s" }), NULL , ü—‹_fÞd” ) }, 394 { GDBUS_ASYNC_METHOD ("ListFolder", 395 NULL , GDBUS_ARGS ({ "fÞd”šfo", "¯{sv}" }), li¡_fÞd” ) }, 396 { GDBUS_METHOD ("GetFile", 397 GDBUS_ARGS ({ "targetfile", "s" }, { "sourcefile", "s" }), 398 GDBUS_ARGS ({ "transfer", "o" }, { "properties", "a{sv}" }), 399 g‘_fže ) }, 400 { GDBUS_METHOD ("PutFile", 401 GDBUS_ARGS ({ "sourcefile", "s" }, { "targetfile", "s" }), 402 GDBUS_ARGS ({ "transfer", "o" }, { "properties", "a{sv}" }), 403 put_fže ) }, 404 { GDBUS_ASYNC_METHOD ("CopyFile", 405 GDBUS_ARGS ({ "sourûfže", "s" }, { "rg‘fže", "s" }), NULL , 406 cÝy_fže ) }, 407 { GDBUS_ASYNC_METHOD ("MoveFile", 408 GDBUS_ARGS ({ "sourûfže", "s" }, { "rg‘fže", "s" }), NULL , 409 move_fže ) }, 410 { GDBUS_ASYNC_METHOD ("Delete", 411 GDBUS_ARGS ({ "fže", "s" }), NULL , d–‘e ) }, 415  $áp_ä“ (* d©a ) 417  áp_d©a * áp = d©a ; 419 `obc_£ssiÚ_uÄef ( áp -> £ssiÚ ); 420 `g_ä“ ( áp ); 421 } } 423  $áp_´obe ( obc_£ssiÚ * £ssiÚ ) 425  áp_d©a * áp ; 426 cÚ¡ * ·th ; 428 ·th = `obc_£ssiÚ_g‘_·th ( £ssiÚ ); 430 `DBG ("%s", ·th ); 432 áp = `g_Œy_Ãw0 ( áp_d©a , 1); 433 ià(! áp ) 434  - ENOMEM ; 436 áp -> £ssiÚ = `obc_£ssiÚ_»f (session); 438 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚn , ·th , FTP_INTERFACE , áp_m‘hods , 439 NULL , NULL, áp , áp_ä“ )) { 440 `áp_ä“ ( áp ); 441  - ENOMEM ; 445 } } 447  $áp_»move ( obc_£ssiÚ * £ssiÚ ) 449 cÚ¡ * ·th = `obc_£ssiÚ_g‘_·th ( £ssiÚ ); 451 `DBG ("%s", ·th ); 453 `g_dbus_uÄegi¡”_š‹rçû ( cÚn , ·th , FTP_INTERFACE ); 454 } } 456  obc_driv” gáp = { 457 . £rviû = "FTP", 458 . guuid = FTP_UUID , 459 . grg‘ = OBEX_FTP_UUID , 460 . grg‘_Ën = OBEX_FTP_UUID_LEN , 461 . g´obe = áp_´obe , 462 . g»move = áp_»move 465  obc_driv” gpcsu™e = { 466 . £rviû = "PCSUITE", 467 . guuid = PCSUITE_UUID , 468 . grg‘ = OBEX_FTP_UUID , 469 . grg‘_Ën = OBEX_FTP_UUID_LEN , 470 . g´obe = áp_´obe , 471 . g»move = áp_»move 474  $áp_š™ () 476  ”r ; 478 `DBG (""); 480 cÚn = `dbus_bus_g‘ ( DBUS_BUS_SESSION , NULL ); 481 ià(! cÚn ) 482  - EIO ; 484 ”r = `obc_driv”_»gi¡” (& áp ); 485 ià( ”r < 0) 486  çžed ; 488 ”r = `obc_driv”_»gi¡” (& pcsu™e ); 489 ià( ”r < 0) { 490 `obc_driv”_uÄegi¡” (& áp ); 491  çžed ; 496 çžed : 497 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 498 cÚn = NULL ; 499  ”r ; 500 } } 502  $áp_ex™ () 504 `DBG (""); 506 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 507 cÚn = NULL ; 509 `obc_driv”_uÄegi¡” (& áp ); 510 `obc_driv”_uÄegi¡” (& pcsu™e ); 511 } } @obexd/client/ftp.h 24  áp_š™ (); 25  áp_ex™ (); @obexd/client/manager.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡dlib.h > 30  ~<¡ršg.h > 31  ~ 32  ~ 34  ~ 35  ~ 37  ~"log.h " 38  ~"Œªsãr.h " 39  ~"£ssiÚ.h " 40  ~"mªag”.h " 41  ~"blu‘oÙh.h " 42  ~"Ýp.h " 43  ~"áp.h " 44  ~"pb­.h " 45  ~"sync.h " 46  ~"m­.h " 47  ~"obexd/¤c/mªag”.h " 48 #ifdeà __TIZEN_PATCH__ 49  ~"mns-tiz’.h " 51  #CLIENT_INTERFACE "Üg.bluez.obex.Cl›Á1" ) 52  #ERROR_INTERFACE "Üg.bluez.obex.E¼Ü" ) 53  #CLIENT_PATH "/Üg/bluez/obex" ) 55  s£nd_d©a { 56 DBusCÚÃùiÚ * mcÚÃùiÚ ; 57 DBusMes§ge * mmes§ge ; 60  GSLi¡ * g£ssiÚs = NULL ; 62  $shutdown_£ssiÚ ( obc_£ssiÚ * £ssiÚ ) 64 `obc_£ssiÚ_shutdown ( £ssiÚ ); 65 `obc_£ssiÚ_uÄef ( £ssiÚ ); 66 } } 68 #ifdeà __TIZEN_PATCH__ 69  $»Ëa£_£ssiÚ ( obc_£ssiÚ * £ssiÚ ) 71 `DBG ("+"); 72 £ssiÚs = `g_¦i¡_»move (£ssiÚs, £ssiÚ ); 73 `shutdown_£ssiÚ ( £ssiÚ ); 74 `DBG ("-"); 75 } } 77  $»Ëa£_£ssiÚ ( obc_£ssiÚ * £ssiÚ ) 79 £ssiÚs = `g_¦i¡_»move (£ssiÚs, £ssiÚ ); 80 `shutdown_£ssiÚ ( £ssiÚ ); 81 } } 84  $uÄegi¡”_£ssiÚ (* d©a ) 86  obc_£ssiÚ * £ssiÚ = d©a ; 88 ià( `g_¦i¡_fšd ( £ssiÚs , £ssiÚ è=ð NULL ) 91 £ssiÚs = `g_¦i¡_»move (£ssiÚs, £ssiÚ ); 92 `obc_£ssiÚ_uÄef ( £ssiÚ ); 93 } } 95  $ü—‹_ÿÎback ( obc_£ssiÚ * £ssiÚ , 96  obc_Œªsãr * Œªsãr , 97 GE¼Ü * ”r , * u£r_d©a ) 99  £nd_d©a * d©a = u£r_d©a ; 100 cÚ¡ * ·th ; 102 ià( ”r !ð NULL ) { 103 DBusMes§ge * ”rÜ = `g_dbus_ü—‹_”rÜ ( d©a -> mes§ge , 104 ERROR_INTERFACE ".Failed", 105 "%s", ”r -> mes§ge ); 106 `g_dbus_£nd_mes§ge ( d©a -> cÚÃùiÚ , ”rÜ ); 107 `shutdown_£ssiÚ ( £ssiÚ ); 108  dÚe ; 112 ·th = `obc_£ssiÚ_»gi¡” ( £ssiÚ , uÄegi¡”_£ssiÚ ); 113 ià( ·th =ð NULL ) { 114 DBusMes§ge * ”rÜ = `g_dbus_ü—‹_”rÜ ( d©a -> mes§ge , 115 ERROR_INTERFACE ".Failed", 116 NULL ); 117 `g_dbus_£nd_mes§ge ( d©a -> cÚÃùiÚ , ”rÜ ); 118 `shutdown_£ssiÚ ( £ssiÚ ); 119  dÚe ; 122 £ssiÚs = `g_¦i¡_­³nd (£ssiÚs, £ssiÚ ); 123 `g_dbus_£nd_»¶y ( d©a -> cÚÃùiÚ , d©a-> mes§ge , 124 DBUS_TYPE_OBJECT_PATH , & ·th , 125 DBUS_TYPE_INVALID ); 127 dÚe : 128 `dbus_mes§ge_uÄef ( d©a -> mes§ge ); 129 `dbus_cÚÃùiÚ_uÄef ( d©a -> cÚÃùiÚ ); 130 `g_ä“ ( d©a ); 131 } } 133  $·r£_deviû_diù ( DBusMes§geI‹r * ™” , 134 cÚ¡ ** sourû , cÚ¡ ** rg‘ , ušt8_t * chªÃl ) 136  `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è=ð DBUS_TYPE_DICT_ENTRY ) { 137 DBusMes§geI‹r ’Œy , v®ue ; 138 cÚ¡ * key ; 140 `dbus_mes§ge_™”_»cur£ ( ™” , & ’Œy ); 141 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & key ); 143 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 144 `dbus_mes§ge_™”_»cur£ (& ’Œy , & v®ue ); 146  `dbus_mes§ge_™”_g‘_¬g_ty³ (& v®ue )) { 147  DBUS_TYPE_STRING : 148 ià( `g_¡r_equ® ( key , "Sourû"è=ð TRUE ) 149 `dbus_mes§ge_™”_g‘_basic (& v®ue , sourû ); 150 ià( `g_¡r_equ® ( key , "T¬g‘"è=ð TRUE ) 151 `dbus_mes§ge_™”_g‘_basic (& v®ue , rg‘ ); 153  DBUS_TYPE_BYTE : 154 ià( `g_¡r_equ® ( key , "ChªÃl"è=ð TRUE ) 155 `dbus_mes§ge_™”_g‘_basic (& v®ue , chªÃl ); 159 `dbus_mes§ge_™”_Ãxt ( ™” ); 163 } } 165  obc_£ssiÚ * $fšd_£ssiÚ (cÚ¡ * ·th ) 167 GSLi¡ * l ; 168 #ifdeà __TIZEN_PATCH__ 169 if(! ·th ) 170  NULL ; 172  l = £ssiÚs ;†;† =†-> Ãxt ) { 173  obc_£ssiÚ * £ssiÚ = l -> d©a ; 174 ià( `g_¡rcmp0 ( `obc_£ssiÚ_g‘_·th ( £ssiÚ ), ·th ) == 0) 175  £ssiÚ ; 178  NULL ; 179 } } 181  DBusMes§ge * $ü—‹_£ssiÚ ( DBusCÚÃùiÚ * cÚÃùiÚ , 182 DBusMes§ge * mes§ge , * u£r_d©a ) 184 DBusMes§geI‹r ™” , diù ; 185  obc_£ssiÚ * £ssiÚ ; 186  £nd_d©a * d©a ; 187 cÚ¡ * sourû = NULL , * de¡ = NULL, * rg‘ = NULL; 188 ušt8_t chªÃl = 0; 190 `dbus_mes§ge_™”_š™ ( mes§ge , & ™” ); 191 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_STRING ) 192  `g_dbus_ü—‹_”rÜ ( mes§ge , 193 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 195 `dbus_mes§ge_™”_g‘_basic (& ™” , & de¡ ); 196 `dbus_mes§ge_™”_Ãxt (& ™” ); 198 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_ARRAY ) 199  `g_dbus_ü—‹_”rÜ ( mes§ge , 200 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 202 `dbus_mes§ge_™”_»cur£ (& ™” , & diù ); 204 `·r£_deviû_diù (& diù , & sourû , & rg‘ , & chªÃl ); 205 ià( de¡ =ð NULL || rg‘ == NULL) 206  `g_dbus_ü—‹_”rÜ ( mes§ge , 207 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 209 d©a = `g_Œy_m®loc0 ((*data)); 210 ià( d©a =ð NULL ) 211  `g_dbus_ü—‹_”rÜ ( mes§ge , 212 ERROR_INTERFACE ".E¼Ü.NoMemÜy", NULL ); 214 d©a -> cÚÃùiÚ = `dbus_cÚÃùiÚ_»f (connection); 215 d©a -> mes§ge = `dbus_mes§ge_»f (message); 217 £ssiÚ = `obc_£ssiÚ_ü—‹ ( sourû , de¡ , rg‘ , chªÃl , 218 `dbus_mes§ge_g‘_£nd” ( mes§ge ), 219 ü—‹_ÿÎback , d©a ); 220 ià( £ssiÚ !ð NULL ) { 221  NULL ; 224 `dbus_mes§ge_uÄef ( d©a -> mes§ge ); 225 `dbus_cÚÃùiÚ_uÄef ( d©a -> cÚÃùiÚ ); 226 `g_ä“ ( d©a ); 228  `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Fažed", NULL ); 229 } } 231  DBusMes§ge * $»move_£ssiÚ ( DBusCÚÃùiÚ * cÚÃùiÚ , 232 DBusMes§ge * mes§ge , * u£r_d©a ) 234  obc_£ssiÚ * £ssiÚ ; 235 cÚ¡ * £nd” , * ·th ; 237 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 238 DBUS_TYPE_OBJECT_PATH , & ·th , 239 DBUS_TYPE_INVALID è=ð FALSE ) 240  `g_dbus_ü—‹_”rÜ ( mes§ge , 241 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 243 £ssiÚ = `fšd_£ssiÚ ( ·th ); 244 ià( £ssiÚ =ð NULL ) 245  `g_dbus_ü—‹_”rÜ ( mes§ge , 246 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 248 £nd” = `dbus_mes§ge_g‘_£nd” ( mes§ge ); 249 ià( `g_¡r_equ® ( £nd” , `obc_£ssiÚ_g‘_owÃr ( £ssiÚ )è=ð FALSE ) 250  `g_dbus_ü—‹_”rÜ ( mes§ge , 251 ERROR_INTERFACE ".NotAuthorized", 254 `»Ëa£_£ssiÚ ( £ssiÚ ); 256  `dbus_mes§ge_Ãw_m‘hod_»tuº ( mes§ge ); 257 } } 259 cÚ¡ GDBusM‘hodTabË gþ›Á_m‘hods [] = { 260 { GDBUS_ASYNC_METHOD ("CreateSession", 261 GDBUS_ARGS ({ "destination", "s" }, { "args", "a{sv}" }), 262 GDBUS_ARGS ({ "£ssiÚ", "o" }), ü—‹_£ssiÚ ) }, 263 { GDBUS_ASYNC_METHOD ("RemoveSession", 264 GDBUS_ARGS ({ "£ssiÚ", "o" }), NULL , »move_£ssiÚ ) }, 268  DBusCÚÃùiÚ * gcÚn = NULL ; 270  sobc_moduË { 271 cÚ¡ * mÇme ; 272 (* mš™ ) (); 273 (* mex™ ) (); 274 } gmoduËs [] = { 275 { "blu‘oÙh", blu‘oÙh_š™ , blu‘oÙh_ex™ }, 276 { "Ýp", Ýp_š™ , Ýp_ex™ }, 277 { "áp", áp_š™ , áp_ex™ }, 278 { "pb­", pb­_š™ , pb­_ex™ }, 279 { "sync", sync_š™ , sync_ex™ }, 280 { "m­", m­_š™ , m­_ex™ }, 281 #ifdeà __TIZEN_PATCH__ 282 { "mns", mns_š™ , mns_ex™ }, 287  $þ›Á_mªag”_š™ () 289 DBusE¼Ü d”r ; 290  obc_moduË * moduË ; 292 `dbus_”rÜ_š™ (& d”r ); 294 cÚn = `mªag”_dbus_g‘_cÚÃùiÚ (); 295 ià( cÚn =ð NULL ) { 296 `”rÜ ("Can't get client D-Bus connection"); 300 ià( `g_dbus_»gi¡”_š‹rçû ( cÚn , CLIENT_PATH , CLIENT_INTERFACE , 301 þ›Á_m‘hods , NULL , NULL, 302 NULL , NULLè=ð FALSE ) { 303 `”rÜ ("Can't„egister client interface"); 304 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 305 cÚn = NULL ; 309  moduË = moduËs ; moduË && moduË-> š™ ; module++) { 310 ià( moduË -> `š™ () < 0) 313 `DBG ("ModuË % lßded", moduË -> Çme ); 317 } } 319  $þ›Á_mªag”_ex™ () 321  obc_moduË * moduË ; 323 ià( cÚn =ð NULL ) 326  moduË = moduËs ; moduË && moduË-> ex™ ; module++) 327 moduË -> `ex™ (); 329 `g_dbus_uÄegi¡”_š‹rçû ( cÚn , CLIENT_PATH , CLIENT_INTERFACE ); 331 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 332 } } @obexd/client/manager.h 24  þ›Á_mªag”_š™ (); 25  þ›Á_mªag”_ex™ (); 26 #ifdeà __TIZEN_PATCH__ 27  »Ëa£_£ssiÚ ( obc_£ssiÚ * £ssiÚ ); @obexd/client/map-event.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~<¡ršg.h > 30  ~<¡dboÞ.h > 31  ~<š‰y³s.h > 33  ~"log.h " 34  ~"m­-ev’t.h " 36  ~ 37  ~"Œªsãr.h " 38  ~"£ssiÚ.h " 40  GSLi¡ * ghªdËrs ; 42  smns_hªdËr { 43  mmas_id ; 44  obc_£ssiÚ * m£ssiÚ ; 45 m­_ev’t_cb mcb ; 46 * mu£r_d©a ; 49  mns_hªdËr * $fšd_hªdËr ( mas_id , cÚ¡ * deviû ) 51 GSLi¡ * li¡ ; 53  li¡ = hªdËrs ;†i¡;†i¡ =†i¡-> Ãxt ) { 54  mns_hªdËr * hªdËr = li¡ -> d©a ; 56 ià( mas_id !ð hªdËr ->mas_id) 59 ià( `g_¡r_equ® ( deviû , 60 `obc_£ssiÚ_g‘_de¡š©iÚ ( hªdËr -> £ssiÚ ))) 61  hªdËr ; 64  NULL ; 65 } } 67 boÞ $m­_»gi¡”_ev’t_hªdËr ( obc_£ssiÚ * £ssiÚ , 68  mas_id , m­_ev’t_cb cb , 69 * u£r_d©a ) 71  mns_hªdËr * hªdËr ; 73 hªdËr = `fšd_hªdËr ( mas_id , `obc_£ssiÚ_g‘_de¡š©iÚ ( £ssiÚ )); 74 ià( hªdËr !ð NULL ) 75  FALSE ; 77 hªdËr = `g_Ãw0 ( mns_hªdËr , 1); 78 hªdËr -> mas_id = mas_id; 79 hªdËr -> £ssiÚ = session; 80 hªdËr -> cb = cb; 81 hªdËr -> u£r_d©a = user_data; 83 hªdËrs = `g_¦i¡_´•’d (hªdËrs, hªdËr ); 84 `DBG ("Hªd˸%°fÜ %s:%d„egi¡”ed", hªdËr , 85 `obc_£ssiÚ_g‘_de¡š©iÚ ( £ssiÚ ), mas_id ); 87  TRUE ; 88 } } 90  $m­_uÄegi¡”_ev’t_hªdËr ( obc_£ssiÚ * £ssiÚ ,  mas_id ) 92  mns_hªdËr * hªdËr ; 94 hªdËr = `fšd_hªdËr ( mas_id , `obc_£ssiÚ_g‘_de¡š©iÚ ( £ssiÚ )); 95 ià( hªdËr =ð NULL ) 98 hªdËrs = `g_¦i¡_»move (hªdËrs, hªdËr ); 99 `DBG ("Hªd˸%°fÜ %s:%d uÄegi¡”ed", hªdËr , 100 `obc_£ssiÚ_g‘_de¡š©iÚ ( £ssiÚ ), mas_id ); 101 `g_ä“ ( hªdËr ); 102 } } 104  $m­_di¥©ch_ev’t ( mas_id , cÚ¡ * deviû , 105  m­_ev’t * ev’t ) 107  mns_hªdËr * hªdËr ; 109 hªdËr = `fšd_hªdËr ( mas_id , deviû ); 110 ià( hªdËr ) 111 hªdËr -> `cb ( ev’t , hªdËr-> u£r_d©a ); 112 } } @obexd/client/map-event.h 24  gobc_£ssiÚ ; 26 em­_ev’t_ty³ { 27 mMAP_ET_NEW_MESSAGE , 28 mMAP_ET_DELIVERY_SUCCESS , 29 mMAP_ET_SENDING_SUCCESS , 30 mMAP_ET_DELIVERY_FAILURE , 31 mMAP_ET_SENDING_FAILURE , 32 mMAP_ET_MEMORY_FULL , 33 mMAP_ET_MEMORY_AVAILABLE , 34 mMAP_ET_MESSAGE_DELETED , 35 mMAP_ET_MESSAGE_SHIFT 38  sm­_ev’t { 39 m­_ev’t_ty³ mty³ ; 40 ušt64_t mhªdË ; 41 * mfÞd” ; 42 * mÞd_fÞd” ; 43 * mmsg_ty³ ; 44 * md©‘ime ; 45 * msubjeù ; 46 * m£nd”_Çme ; 47 * m´iÜ™y ; 56 (* tm­_ev’t_cb è( tm­_ev’t * tev’t , * tu£r_d©a ); 61 boÞ `m­_»gi¡”_ev’t_hªdËr ( obc_£ssiÚ * £ssiÚ ,  mas_id , 62 m­_ev’t_cb cb , * u£r_d©a ); 66  `m­_uÄegi¡”_ev’t_hªdËr ( obc_£ssiÚ * £ssiÚ ,  mas_id ); 70  `m­_di¥©ch_ev’t ( mas_id , cÚ¡ * deviû , 71  m­_ev’t * ev’t ); @obexd/client/map.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<”ºo.h > 28  ~<¡ršg.h > 29  ~<¡dio.h > 30  ~<¡dboÞ.h > 31  ~<š‰y³s.h > 32  ~<¡dlib.h > 33  ~ 34  ~ 35  ~ 36  ~ 38  ~"dbus.h " 39  ~"log.h " 40  ~"m­_­.h " 41  ~"m­-ev’t.h " 43  ~"m­.h " 44  ~"Œªsãr.h " 45  ~"£ssiÚ.h " 46  ~"driv”.h " 48  #OBEX_MAS_UUID \ 49 "\xBB\x58\x2B\x40\x42\x0C\x11\xDB\xB0\xDE\x08\x00\x20\x0C\x9A\x66" ) 50  #OBEX_MAS_UUID_LEN 16 ) 52  #MAP_INTERFACE "Üg.bluez.obex.Mes§geAcûss1" ) 53  #MAP_MSG_INTERFACE "Üg.bluez.obex.Mes§ge1" ) 54  #ERROR_INTERFACE "Üg.bluez.obex.E¼Ü" ) 55  #MAS_UUID "00001132-0000-1000-8000-00805f9b34fb" ) 57  #DEFAULT_COUNT 1024 ) 58  #DEFAULT_OFFSET 0 ) 60  #CHARSET_NATIVE 0 ) 61  #CHARSET_UTF8 1 ) 63 cÚ¡ * cÚ¡ gfž‹r_li¡ [] = { 80 NULL 83  #FILTER_BIT_MAX 15 ) 84  #FILTER_ALL 0x0000FFFF ) 86  #FILTER_READ_STATUS_NONE 0x00 ) 87  #FILTER_READ_STATUS_ONLY_UNREAD 0x01 ) 88  #FILTER_READ_STATUS_ONLY_READ 0x02 ) 90  #FILTER_PRIORITY_NONE 0x00 ) 91  #FILTER_PRIORITY_ONLY_HIGH 0x01 ) 92  #FILTER_PRIORITY_ONLY_NONHIGH 0x02 ) 94  #STATUS_READ 0 ) 95  #STATUS_DELETE 1 ) 96  #FILLER_BYTE 0x30 ) 98  sm­_d©a { 99  obc_£ssiÚ * m£ssiÚ ; 100 GHashTabË * mmes§ges ; 101 št16_t mmas_š¡ªû_id ; 102 ušt8_t msuµÜ‹d_mes§ge_ty³s ; 103 ušt32_t msuµÜ‹d_ã©u»s ; 106  s³ndšg_»que¡ { 107  m­_d©a * mm­ ; 108 DBusMes§ge * mmsg ; 109 * mfÞd” ; 112  #MAP_MSG_FLAG_PRIORITY 0x01 ) 113  #MAP_MSG_FLAG_READ 0x02 ) 114  #MAP_MSG_FLAG_SENT 0x04 ) 115  #MAP_MSG_FLAG_PROTECTED 0x08 ) 116  #MAP_MSG_FLAG_TEXT 0x10 ) 118  sm­_msg { 119  m­_d©a * md©a ; 120 * m·th ; 121 ušt64_t mhªdË ; 122 * msubjeù ; 123 * mtime¡amp ; 124 * m£nd” ; 125 * m£nd”_add»ss ; 126 * m»¶yto ; 127 * m»c›Á ; 128 * m»c›Á_add»ss ; 129 * mty³ ; 130 ušt64_t msize ; 131 * m¡©us ; 132 ušt64_t m©chm’t_size ; 133 ušt8_t mæags ; 134 * mfÞd” ; 135 GDBusP’dšgPrÝ”tyS‘ m³ndšg ; 138  sm­_·r£r { 139  ³ndšg_»que¡ * m»que¡ ; 140 DBusMes§geI‹r * m™” ; 143  DBusCÚÃùiÚ * gcÚn = NULL ; 145  ³ndšg_»que¡ * $³ndšg_»que¡_Ãw ( m­_d©a * m­ , 146 DBusMes§ge * mes§ge ) 148  ³ndšg_»que¡ * p ; 150 p = `g_Ãw0 ( ³ndšg_»que¡ , 1); 151 p -> m­ = map; 152 p -> msg = `dbus_mes§ge_»f ( mes§ge ); 154  p ; 155 } } 157  $³ndšg_»que¡_ä“ ( ³ndšg_»que¡ * p ) 159 `dbus_mes§ge_uÄef ( p -> msg ); 161 `g_ä“ ( p -> fÞd” ); 162 `g_ä“ ( p ); 163 } } 165  $sim¶e_cb ( obc_£ssiÚ * £ssiÚ , 166  obc_Œªsãr * Œªsãr , 167 GE¼Ü * ”r , * u£r_d©a ) 169  ³ndšg_»que¡ * »que¡ = u£r_d©a ; 170 DBusMes§ge * »¶y ; 172 ià( ”r !ð NULL ) 173 »¶y = `g_dbus_ü—‹_”rÜ ( »que¡ -> msg , 174 ERROR_INTERFACE ".Failed", 175 "%s", ”r -> mes§ge ); 177 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( »que¡ -> msg ); 179 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 180 `³ndšg_»que¡_ä“ ( »que¡ ); 181 } } 183  DBusMes§ge * $m­_£©h ( DBusCÚÃùiÚ * cÚÃùiÚ , 184 DBusMes§ge * mes§ge , * u£r_d©a ) 186  m­_d©a * m­ = u£r_d©a ; 187 cÚ¡ * fÞd” ; 188  ³ndšg_»que¡ * »que¡ ; 189 GE¼Ü * ”r = NULL ; 191 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , DBUS_TYPE_STRING , & fÞd” , 192 DBUS_TYPE_INVALID è=ð FALSE ) 193  `g_dbus_ü—‹_”rÜ ( mes§ge , 194 ERROR_INTERFACE ".InvalidArguments", 195 NULL ); 197 »que¡ = `³ndšg_»que¡_Ãw ( m­ , mes§ge ); 199 `obc_£ssiÚ_£©h ( m­ -> £ssiÚ , fÞd” , sim¶e_cb , »que¡ , & ”r ); 200 ià( ”r !ð NULL ) { 201 DBusMes§ge * »¶y ; 202 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , 203 ERROR_INTERFACE ".Failed", 204 "%s", ”r -> mes§ge ); 205 `g_”rÜ_ä“ ( ”r ); 206 `³ndšg_»que¡_ä“ ( »que¡ ); 207  »¶y ; 210  NULL ; 211 } } 213  $fÞd”_–em’t ( GM¬kupP¬£CÚ‹xt * ùxt , cÚ¡ * –em’t , 214 cÚ¡ ** Çmes , cÚ¡ ** v®ues , 215 gpoš‹r u£r_d©a , GE¼Ü ** g”r ) 217 DBusMes§geI‹r diù , * ™” = u£r_d©a ; 218 cÚ¡ * key ; 219  i ; 221 ià( `¡rÿ£cmp ("fÞd”", –em’t ) != 0) 224 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 225 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 226 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 227 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 229  i = 0, key = Çmes [i]; key; key =‚ames[++i]) { 230 ià( `¡rÿ£cmp ("Çme", key ) == 0) 231 `obex_dbus_diù_­³nd (& diù , "Name", DBUS_TYPE_STRING , 232 & v®ues [ i ]); 235 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 236 } } 238 cÚ¡ GM¬kupP¬£r gfÞd”_·r£r = { 239 fÞd”_–em’t , 240 NULL , 241 NULL , 242 NULL , 243 NULL 246  $fÞd”_li¡šg_cb ( obc_£ssiÚ * £ssiÚ , 247  obc_Œªsãr * Œªsãr , 248 GE¼Ü * ”r , * u£r_d©a ) 250  ³ndšg_»que¡ * »que¡ = u£r_d©a ; 251 GM¬kupP¬£CÚ‹xt * ùxt ; 252 DBusMes§ge * »¶y ; 253 DBusMes§geI‹r ™” , ¬¿y ; 254 * cÚ‹Ás ; 255 size_t size ; 256  ³¼ ; 258 ià( ”r !ð NULL ) { 259 »¶y = `g_dbus_ü—‹_”rÜ ( »que¡ -> msg , 260 ERROR_INTERFACE ".Failed", 261 "%s", ”r -> mes§ge ); 262  dÚe ; 265 ³¼ = `obc_Œªsãr_g‘_cÚ‹Ás ( Œªsãr , & cÚ‹Ás , & size ); 266 ià( ³¼ < 0) { 267 »¶y = `g_dbus_ü—‹_”rÜ ( »que¡ -> msg , 268 ERROR_INTERFACE ".Failed", 270 `¡»¼Ü (- ³¼ )); 271  dÚe ; 274 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( »que¡ -> msg ); 275 ià( »¶y =ð NULL ) { 276 `g_ä“ ( cÚ‹Ás ); 277  þ—n ; 280 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 281 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 282 DBUS_TYPE_ARRAY_AS_STRING 283 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 284 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 285 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & ¬¿y ); 286 ùxt = `g_m¬kup_·r£_cÚ‹xt_Ãw (& fÞd”_·r£r , 0, & ¬¿y , NULL ); 287 `g_m¬kup_·r£_cÚ‹xt_·r£ ( ùxt , cÚ‹Ás , size , NULL ); 288 `g_m¬kup_·r£_cÚ‹xt_ä“ ( ùxt ); 289 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & ¬¿y ); 290 `g_ä“ ( cÚ‹Ás ); 292 dÚe : 293 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 294 þ—n : 295 `³ndšg_»que¡_ä“ ( »que¡ ); 296 } } 298  DBusMes§ge * $g‘_fÞd”_li¡šg ( m­_d©a * m­ , 299 DBusMes§ge * mes§ge , 300 GObexAµ¬am * ­·¿m ) 302  ³ndšg_»que¡ * »que¡ ; 303  obc_Œªsãr * Œªsãr ; 304 GE¼Ü * ”r = NULL ; 305 DBusMes§ge * »¶y ; 307 Œªsãr = `obc_Œªsãr_g‘ ("x-obex/fÞd”-li¡šg", NULL , NULL, & ”r ); 308 ià( Œªsãr =ð NULL ) { 309 `g_obex_­·¿m_ä“ ( ­·¿m ); 310  çž ; 313 `obc_Œªsãr_£t_­·¿m ( Œªsãr , ­·¿m ); 315 »que¡ = `³ndšg_»que¡_Ãw ( m­ , mes§ge ); 317 ià(! `obc_£ssiÚ_queue ( m­ -> £ssiÚ , Œªsãr , fÞd”_li¡šg_cb , 318 »que¡ , & ”r )) { 319 `³ndšg_»que¡_ä“ ( »que¡ ); 320  çž ; 323  NULL ; 325 çž : 326 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", "%s", 327 ”r -> mes§ge ); 328 `g_”rÜ_ä“ ( ”r ); 329  »¶y ; 330 } } 332  GObexAµ¬am * $·r£_off£t ( GObexAµ¬am * ­·¿m , DBusMes§geI‹r * ™” ) 334 gušt16 num ; 336 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_UINT16 ) 337  NULL ; 339 `dbus_mes§ge_™”_g‘_basic ( ™” , & num ); 341  `g_obex_­·¿m_£t_ušt16 ( ­·¿m , MAP_AP_STARTOFFSET , num ); 342 } } 344  GObexAµ¬am * $·r£_max_couÁ ( GObexAµ¬am * ­·¿m , 345 DBusMes§geI‹r * ™” ) 347 gušt16 num ; 349 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_UINT16 ) 350  NULL ; 352 `dbus_mes§ge_™”_g‘_basic ( ™” , & num ); 354  `g_obex_­·¿m_£t_ušt16 ( ­·¿m , MAP_AP_MAXLISTCOUNT , num ); 355 } } 357  GObexAµ¬am * $·r£_fÞd”_fž‹rs ( GObexAµ¬am * ­·¿m , 358 DBusMes§geI‹r * ™” ) 360 DBusMes§geI‹r ¬¿y ; 362 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY ) 363  NULL ; 365 `dbus_mes§ge_™”_»cur£ ( ™” , & ¬¿y ); 367  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y è=ð DBUS_TYPE_DICT_ENTRY ) { 368 cÚ¡ * key ; 369 DBusMes§geI‹r v®ue , ’Œy ; 371 `dbus_mes§ge_™”_»cur£ (& ¬¿y , & ’Œy ); 372 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & key ); 374 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 375 `dbus_mes§ge_™”_»cur£ (& ’Œy , & v®ue ); 377 ià( `¡rÿ£cmp ( key , "Offset") == 0) { 378 ià( `·r£_off£t ( ­·¿m , & v®ue è=ð NULL ) 379  NULL ; 380 } ià( `¡rÿ£cmp ( key , "MaxCount") == 0) { 381 ià( `·r£_max_couÁ ( ­·¿m , & v®ue è=ð NULL ) 382  NULL ; 385 `dbus_mes§ge_™”_Ãxt (& ¬¿y ); 388  ­·¿m ; 389 } } 391  DBusMes§ge * $m­_li¡_fÞd”s ( DBusCÚÃùiÚ * cÚÃùiÚ , 392 DBusMes§ge * mes§ge , * u£r_d©a ) 394  m­_d©a * m­ = u£r_d©a ; 395 GObexAµ¬am * ­·¿m ; 396 DBusMes§geI‹r ¬gs ; 398 `dbus_mes§ge_™”_š™ ( mes§ge , & ¬gs ); 400 ­·¿m = `g_obex_­·¿m_£t_ušt16 ( NULL , MAP_AP_MAXLISTCOUNT , 401 DEFAULT_COUNT ); 402 ­·¿m = `g_obex_­·¿m_£t_ušt16 ×µ¬am, MAP_AP_STARTOFFSET , 403 DEFAULT_OFFSET ); 405 ià( `·r£_fÞd”_fž‹rs ( ­·¿m , & ¬gs è=ð NULL ) { 406 `g_obex_­·¿m_ä“ ( ­·¿m ); 407  `g_dbus_ü—‹_”rÜ ( mes§ge , 408 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 411  `g‘_fÞd”_li¡šg ( m­ , mes§ge , ­·¿m ); 412 } } 414  $m­_msg_ä“ (* d©a ) 416  m­_msg * msg = d©a ; 418 `g_ä“ ( msg -> ·th ); 419 `g_ä“ ( msg -> subjeù ); 420 `g_ä“ ( msg -> fÞd” ); 421 `g_ä“ ( msg -> time¡amp ); 422 `g_ä“ ( msg -> £nd” ); 423 `g_ä“ ( msg -> £nd”_add»ss ); 424 `g_ä“ ( msg -> »¶yto ); 425 `g_ä“ ( msg -> »c›Á ); 426 `g_ä“ ( msg -> »c›Á_add»ss ); 427 `g_ä“ ( msg -> ty³ ); 428 `g_ä“ ( msg -> ¡©us ); 429 `g_ä“ ( msg ); 430 } } 432  DBusMes§ge * $m­_msg_g‘ ( DBusCÚÃùiÚ * cÚÃùiÚ , 433 DBusMes§ge * mes§ge , * u£r_d©a ) 435  m­_msg * msg = u£r_d©a ; 436  obc_Œªsãr * Œªsãr ; 437 cÚ¡ * rg‘_fže ; 438 gboÞ—n ©chm’t ; 439 GE¼Ü * ”r = NULL ; 440 DBusMes§ge * »¶y ; 441 GObexAµ¬am * ­·¿m ; 442  hªdË [17]; 444 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 445 DBUS_TYPE_STRING , & rg‘_fže , 446 DBUS_TYPE_BOOLEAN , & ©chm’t , 447 DBUS_TYPE_INVALID è=ð FALSE ) 448  `g_dbus_ü—‹_”rÜ ( mes§ge , 449 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 451 `¢´štf ( hªdË , (hªdË), "%" PRIx64 , msg ->handle); 453 Œªsãr = `obc_Œªsãr_g‘ ("x-bt/mes§ge", hªdË , rg‘_fže , & ”r ); 454 ià( Œªsãr =ð NULL ) 455  çž ; 457 ­·¿m = `g_obex_­·¿m_£t_ušt8 ( NULL , MAP_AP_ATTACHMENT , 458 ©chm’t ); 459 ­·¿m = `g_obex_­·¿m_£t_ušt8 ×µ¬am, MAP_AP_CHARSET , 460 CHARSET_UTF8 ); 462 `obc_Œªsãr_£t_­·¿m ( Œªsãr , ­·¿m ); 464 ià(! `obc_£ssiÚ_queue ( msg -> d©a -> £ssiÚ , Œªsãr , NULL , NULL, & ”r )) 465  çž ; 467  `obc_Œªsãr_ü—‹_dbus_»¶y ( Œªsãr , mes§ge ); 469 çž : 470 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", "%s", 471 ”r -> mes§ge ); 472 `g_”rÜ_ä“ ( ”r ); 473  »¶y ; 474 } } 476  $£t_mes§ge_¡©us_cb ( obc_£ssiÚ * £ssiÚ , 477  obc_Œªsãr * Œªsãr , 478 GE¼Ü * ”r , * u£r_d©a ) 480  m­_msg * msg = u£r_d©a ; 482 ià( ”r !ð NULL ) { 483 `g_dbus_³ndšg_´Ý”ty_”rÜ ( msg -> ³ndšg , 484 ERROR_INTERFACE ".Failed", 485 "%s", ”r -> mes§ge ); 486  dÚe ; 489 `g_dbus_³ndšg_´Ý”ty_sucûss ( msg -> ³ndšg ); 491 dÚe : 492 msg -> ³ndšg = 0; 493 } } 495  gboÞ—n $g‘_fÞd” (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 496 DBusMes§geI‹r * ™” , * d©a ) 498  m­_msg * msg = d©a ; 500 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & msg -> fÞd” ); 502  TRUE ; 503 } } 505  gboÞ—n $subjeù_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 507  m­_msg * msg = d©a ; 509  msg -> subjeù !ð NULL ; 510 } } 512  gboÞ—n $g‘_subjeù (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 513 DBusMes§geI‹r * ™” , * d©a ) 515  m­_msg * msg = d©a ; 517 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & msg -> subjeù ); 519  TRUE ; 520 } } 522  gboÞ—n $time¡amp_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 524  m­_msg * msg = d©a ; 526  msg -> time¡amp !ð NULL ; 527 } } 529  gboÞ—n $g‘_time¡amp (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 530 DBusMes§geI‹r * ™” , * d©a ) 532  m­_msg * msg = d©a ; 534 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & msg -> time¡amp ); 536  TRUE ; 537 } } 539  gboÞ—n $£nd”_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 541  m­_msg * msg = d©a ; 543  msg -> £nd” !ð NULL ; 544 } } 546  gboÞ—n $g‘_£nd” (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 547 DBusMes§geI‹r * ™” , * d©a ) 549  m­_msg * msg = d©a ; 551 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & msg -> £nd” ); 553  TRUE ; 554 } } 556  gboÞ—n $£nd”_add»ss_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 557 * d©a ) 559  m­_msg * msg = d©a ; 561  msg -> £nd”_add»ss !ð NULL ; 562 } } 564  gboÞ—n $g‘_£nd”_add»ss (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 565 DBusMes§geI‹r * ™” , * d©a ) 567  m­_msg * msg = d©a ; 569 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , 570 & msg -> £nd”_add»ss ); 572  TRUE ; 573 } } 575  gboÞ—n $»¶yto_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 577  m­_msg * msg = d©a ; 579  msg -> »¶yto !ð NULL ; 580 } } 582  gboÞ—n $g‘_»¶yto (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 583 DBusMes§geI‹r * ™” , * d©a ) 585  m­_msg * msg = d©a ; 587 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & msg -> »¶yto ); 589  TRUE ; 590 } } 592  gboÞ—n $»c›Á_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 594  m­_msg * msg = d©a ; 596  msg -> »c›Á !ð NULL ; 597 } } 599  gboÞ—n $g‘_»c›Á (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 600 DBusMes§geI‹r * ™” , * d©a ) 602  m­_msg * msg = d©a ; 604 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & msg -> »c›Á ); 606  TRUE ; 607 } } 609  gboÞ—n $»c›Á_add»ss_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 610 * d©a ) 612  m­_msg * msg = d©a ; 614  msg -> »c›Á_add»ss !ð NULL ; 615 } } 617  gboÞ—n $g‘_»c›Á_add»ss (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 618 DBusMes§geI‹r * ™” , * d©a ) 620  m­_msg * msg = d©a ; 622 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , 623 & msg -> »c›Á_add»ss ); 625  TRUE ; 626 } } 628  gboÞ—n $ty³_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 630  m­_msg * msg = d©a ; 632  msg -> ty³ !ð NULL ; 633 } } 635  gboÞ—n $g‘_ty³ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 636 DBusMes§geI‹r * ™” , * d©a ) 638  m­_msg * msg = d©a ; 640 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & msg -> ty³ ); 642  TRUE ; 643 } } 645  gboÞ—n $g‘_size (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 646 DBusMes§geI‹r * ™” , * d©a ) 648  m­_msg * msg = d©a ; 650 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT64 , & msg -> size ); 652  TRUE ; 653 } } 655  gboÞ—n $»û±iÚ_¡©us_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 656 * d©a ) 658  m­_msg * msg = d©a ; 660  msg -> ¡©us !ð NULL ; 661 } } 663  gboÞ—n $g‘_»û±iÚ_¡©us (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 664 DBusMes§geI‹r * ™” , * d©a ) 666  m­_msg * msg = d©a ; 668 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & msg -> ¡©us ); 670  TRUE ; 671 } } 673  gboÞ—n $g‘_©chm’t_size (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 674 DBusMes§geI‹r * ™” , * d©a ) 676  m­_msg * msg = d©a ; 678 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT64 , 679 & msg -> ©chm’t_size ); 681  TRUE ; 682 } } 684  gboÞ—n $g‘_æag (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 685 DBusMes§geI‹r * ™” , ušt8_t æag , 686 * d©a ) 688  m­_msg * msg = d©a ; 689 dbus_boÞ_t v®ue = ( msg -> æags & æag ) != 0; 691 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v®ue ); 693  TRUE ; 694 } } 696  gboÞ—n $g‘_´iÜ™y (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 697 DBusMes§geI‹r * ™” , * d©a ) 699  `g‘_æag ( ´Ý”ty , ™” , MAP_MSG_FLAG_PRIORITY , d©a ); 700 } } 702  gboÞ—n $g‘_»ad (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 703 DBusMes§geI‹r * ™” , * d©a ) 705  `g‘_æag ( ´Ý”ty , ™” , MAP_MSG_FLAG_READ , d©a ); 706 } } 708  gboÞ—n $g‘_£Á (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 709 DBusMes§geI‹r * ™” , * d©a ) 711  `g‘_æag ( ´Ý”ty , ™” , MAP_MSG_FLAG_SENT , d©a ); 712 } } 714  gboÞ—n $g‘_´Ùeùed (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 715 DBusMes§geI‹r * ™” , * d©a ) 717  `g‘_æag ( ´Ý”ty , ™” , MAP_MSG_FLAG_PROTECTED , d©a ); 718 } } 720  gboÞ—n $g‘_‹xt (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 721 DBusMes§geI‹r * ™” , * d©a ) 723  `g‘_æag ( ´Ý”ty , ™” , MAP_MSG_FLAG_TEXT , d©a ); 724 } } 726  $£t_¡©us (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 727 DBusMes§geI‹r * ™” , GDBusP’dšgPrÝ”tyS‘ id , 728 ušt8_t ¡©us , * d©a ) 730  m­_msg * msg = d©a ; 731  obc_Œªsãr * Œªsãr ; 732 gboÞ—n v®ue ; 733 GE¼Ü * ”r = NULL ; 734 GObexAµ¬am * ­·¿m ; 735  cÚ‹Ás [1]; 736  hªdË [17]; 738 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_BOOLEAN ) { 739 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 740 ERROR_INTERFACE ".InvalidArguments", 745 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 747 cÚ‹Ás [0] = FILLER_BYTE ; 749 `¢´štf ( hªdË , (hªdË), "%" PRIx64 , msg ->handle); 751 Œªsãr = `obc_Œªsãr_put ("x-bt/mes§geStus", hªdË , NULL , 752 cÚ‹Ás , (cÚ‹Ás), & ”r ); 753 ià( Œªsãr =ð NULL ) 754  çž ; 756 ­·¿m = `g_obex_­·¿m_£t_ušt8 ( NULL , MAP_AP_STATUSINDICATOR , 757 ¡©us ); 758 ­·¿m = `g_obex_­·¿m_£t_ušt8 ×µ¬am, MAP_AP_STATUSVALUE , 759 v®ue ); 760 `obc_Œªsãr_£t_­·¿m ( Œªsãr , ­·¿m ); 762 ià(! `obc_£ssiÚ_queue ( msg -> d©a -> £ssiÚ , Œªsãr , 763 £t_mes§ge_¡©us_cb , msg , & ”r )) 764  çž ; 766 msg -> ³ndšg = id ; 769 çž : 770 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , ERROR_INTERFACE ".Failed", "%s", 771 ”r -> mes§ge ); 772 `g_”rÜ_ä“ ( ”r ); 773 } } 775  $£t_»ad (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 776 DBusMes§geI‹r * ™” , GDBusP’dšgPrÝ”tyS‘ id , 777 * d©a ) 779 `£t_¡©us ( ´Ý”ty , ™” , id , STATUS_READ , d©a ); 780 } } 782  $£t_d–‘ed (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 783 DBusMes§geI‹r * ™” , GDBusP’dšgPrÝ”tyS‘ id , 784 * d©a ) 786 `£t_¡©us ( ´Ý”ty , ™” , id , STATUS_DELETE , d©a ); 787 } } 789 cÚ¡ GDBusM‘hodTabË gm­_msg_m‘hods [] = { 790 { GDBUS_METHOD ("Get", 791 GDBUS_ARGS ({ "targetfile", "s" }, 793 GDBUS_ARGS ({ "transfer", "o" }, 795 m­_msg_g‘ ) }, 799 cÚ¡ GDBusPrÝ”tyTabË gm­_msg_´Ý”t›s [] = { 800 { "FÞd”", "s", g‘_fÞd” }, 801 { "Subjeù", "s", g‘_subjeù , NULL , subjeù_exi¡s }, 802 { "Time¡amp", "s", g‘_time¡amp , NULL , time¡amp_exi¡s }, 803 { "S’d”", "s", g‘_£nd” , NULL , £nd”_exi¡s }, 804 { "S’d”Add»ss", "s", g‘_£nd”_add»ss , NULL , 805 £nd”_add»ss_exi¡s }, 806 { "R•lyTo", "s", g‘_»¶yto , NULL , »¶yto_exi¡s }, 807 { "Rec›Á", "s", g‘_»c›Á , NULL , »c›Á_exi¡s }, 808 { "Rec›ÁAdd»ss", "s", g‘_»c›Á_add»ss , NULL , 809 »c›Á_add»ss_exi¡s }, 810 { "Ty³", "s", g‘_ty³ , NULL , ty³_exi¡s }, 811 { "Size", "t", g‘_size }, 812 { "Text", "b", g‘_‹xt }, 813 { "Stus", "s", g‘_»û±iÚ_¡©us , NULL , »û±iÚ_¡©us_exi¡s }, 814 { "A‰achm’tSize", "t", g‘_©chm’t_size }, 815 { "PriÜ™y", "b", g‘_´iÜ™y }, 816 { "R—d", "b", g‘_»ad , £t_»ad }, 817 { "S’t", "b", g‘_£Á }, 818 { "PrÙeùed", "b", g‘_´Ùeùed }, 819 { "D–‘ed", "b", NULL , £t_d–‘ed }, 823  $·r£_ty³ ( m­_msg * msg , cÚ¡ * v®ue ) 825 cÚ¡ * ty³ = NULL ; 827 ià( `¡rÿ£cmp ( v®ue , "SMS_GSM") == 0) 828 ty³ = "sms-gsm"; 829 ià( `¡rÿ£cmp ( v®ue , "SMS_CDMA") == 0) 830 ty³ = "sms-cdma"; 831 ià( `¡rÿ£cmp ( v®ue , "EMAIL") == 0) 832 ty³ = "email"; 833 ià( `¡rÿ£cmp ( v®ue , "MMS") == 0) 834 ty³ = "mms"; 836 ià( `g_¡rcmp0 ( msg -> ty³ ,ype) == 0) 839 `g_ä“ ( msg -> ty³ ); 840 msg -> ty³ = `g_¡rdup (type); 842 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 843 MAP_MSG_INTERFACE , "Type"); 844 } } 846  m­_msg * $m­_msg_ü—‹ ( m­_d©a * d©a , ušt64_t hªdË , 847 cÚ¡ * fÞd” , cÚ¡ * ty³ ) 849  m­_msg * msg ; 851 msg = `g_Ãw0 ( m­_msg , 1); 852 msg -> d©a = data; 853 msg -> hªdË = handle; 854 msg -> ·th = `g_¡rdup_´štf ("%s/mes§ge%" PRIu64 , 855 `obc_£ssiÚ_g‘_·th ( d©a -> £ssiÚ ), 856 msg -> hªdË ); 857 msg -> fÞd” = `g_¡rdup (folder); 859 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚn , msg -> ·th , MAP_MSG_INTERFACE , 860 m­_msg_m‘hods , NULL , 861 m­_msg_´Ý”t›s , 862 msg , m­_msg_ä“ )) { 863 `m­_msg_ä“ ( msg ); 864  NULL ; 867 `g_hash_bË_š£¹ ( d©a -> mes§ges , & msg -> hªdË , msg); 869 ià( ty³ ) 870 `·r£_ty³ ( msg , ty³ ); 872  msg ; 873 } } 875  $·r£_subjeù ( m­_msg * msg , cÚ¡ * v®ue ) 877 ià( `g_¡rcmp0 ( msg -> subjeù , v®ue ) == 0) 880 `g_ä“ ( msg -> subjeù ); 881 msg -> subjeù = `g_¡rdup ( v®ue ); 883 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 884 MAP_MSG_INTERFACE , "Subject"); 885 } } 887  $·r£_d©‘ime ( m­_msg * msg , cÚ¡ * v®ue ) 889 ià( `g_¡rcmp0 ( msg -> time¡amp , v®ue ) == 0) 892 `g_ä“ ( msg -> time¡amp ); 893 msg -> time¡amp = `g_¡rdup ( v®ue ); 895 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 896 MAP_MSG_INTERFACE , "Timestamp"); 897 } } 899  $·r£_£nd” ( m­_msg * msg , cÚ¡ * v®ue ) 901 ià( `g_¡rcmp0 ( msg -> £nd” , v®ue ) == 0) 904 `g_ä“ ( msg -> £nd” ); 905 msg -> £nd” = `g_¡rdup ( v®ue ); 907 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 908 MAP_MSG_INTERFACE , "Sender"); 909 } } 911  $·r£_£nd”_add»ss ( m­_msg * msg , cÚ¡ * v®ue ) 913 ià( `g_¡rcmp0 ( msg -> £nd”_add»ss , v®ue ) == 0) 916 `g_ä“ ( msg -> £nd”_add»ss ); 917 msg -> £nd”_add»ss = `g_¡rdup ( v®ue ); 919 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 920 MAP_MSG_INTERFACE , "SenderAddress"); 921 } } 923  $·r£_»¶yto ( m­_msg * msg , cÚ¡ * v®ue ) 925 ià( `g_¡rcmp0 ( msg -> »¶yto , v®ue ) == 0) 928 `g_ä“ ( msg -> »¶yto ); 929 msg -> »¶yto = `g_¡rdup ( v®ue ); 931 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 932 MAP_MSG_INTERFACE , "ReplyTo"); 933 } } 935  $·r£_»c›Á ( m­_msg * msg , cÚ¡ * v®ue ) 937 ià( `g_¡rcmp0 ( msg -> »c›Á , v®ue ) == 0) 940 `g_ä“ ( msg -> »c›Á ); 941 msg -> »c›Á = `g_¡rdup ( v®ue ); 943 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 944 MAP_MSG_INTERFACE , "Recipient"); 945 } } 947  $·r£_»c›Á_add»ss ( m­_msg * msg , cÚ¡ * v®ue ) 949 ià( `g_¡rcmp0 ( msg -> »c›Á_add»ss , v®ue ) == 0) 952 `g_ä“ ( msg -> »c›Á_add»ss ); 953 msg -> »c›Á_add»ss = `g_¡rdup ( v®ue ); 955 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 956 MAP_MSG_INTERFACE , "RecipientAddress"); 957 } } 959  $·r£_size ( m­_msg * msg , cÚ¡ * v®ue ) 961 ušt64_t size = `g_ascii_¡¹Þl ( v®ue , NULL , 10); 963 ià( msg -> size == size) 966 msg -> size = size; 968 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 969 MAP_MSG_INTERFACE , "Size"); 970 } } 972  $·r£_‹xt ( m­_msg * msg , cÚ¡ * v®ue ) 974 gboÞ—n æag = `¡rÿ£cmp ( v®ue , "no") != 0; 975 ušt8_t Þdæags = msg -> æags ; 977 ià( æag ) 978 msg -> æags |ð MAP_MSG_FLAG_TEXT ; 980 msg -> æags &ð~ MAP_MSG_FLAG_TEXT ; 982 ià( msg -> æags !ð Þdæags ) 983 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 984 MAP_MSG_INTERFACE , "Text"); 985 } } 987  $·r£_¡©us ( m­_msg * msg , cÚ¡ * v®ue ) 989 ià( `g_¡rcmp0 ( msg -> ¡©us , v®ue ) == 0) 992 `g_ä“ ( msg -> ¡©us ); 993 msg -> ¡©us = `g_¡rdup ( v®ue ); 995 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 996 MAP_MSG_INTERFACE , "Status"); 997 } } 999  $·r£_©chm’t_size ( m­_msg * msg , cÚ¡ * v®ue ) 1001 ušt64_t ©chm’t_size = `g_ascii_¡¹Þl ( v®ue , NULL , 10); 1003 ià( msg -> ©chm’t_size ==‡ttachment_size) 1006 msg -> ©chm’t_size =‡ttachment_size; 1008 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 1009 MAP_MSG_INTERFACE , "AttachmentSize"); 1010 } } 1012  $·r£_´iÜ™y ( m­_msg * msg , cÚ¡ * v®ue ) 1014 gboÞ—n æag = `¡rÿ£cmp ( v®ue , "no") != 0; 1015 ušt8_t Þdæags = msg -> æags ; 1017 ià( æag ) 1018 msg -> æags |ð MAP_MSG_FLAG_PRIORITY ; 1020 msg -> æags &ð~ MAP_MSG_FLAG_PRIORITY ; 1022 ià( msg -> æags !ð Þdæags ) 1023 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 1024 MAP_MSG_INTERFACE , "Priority"); 1025 } } 1027  $·r£_»ad ( m­_msg * msg , cÚ¡ * v®ue ) 1029 gboÞ—n æag = `¡rÿ£cmp ( v®ue , "no") != 0; 1030 ušt8_t Þdæags = msg -> æags ; 1032 ià( æag ) 1033 msg -> æags |ð MAP_MSG_FLAG_READ ; 1035 msg -> æags &ð~ MAP_MSG_FLAG_READ ; 1037 ià( msg -> æags !ð Þdæags ) 1038 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 1039 MAP_MSG_INTERFACE , "Read"); 1040 } } 1042  $·r£_£Á ( m­_msg * msg , cÚ¡ * v®ue ) 1044 gboÞ—n æag = `¡rÿ£cmp ( v®ue , "no") != 0; 1045 ušt8_t Þdæags = msg -> æags ; 1047 ià( æag ) 1048 msg -> æags |ð MAP_MSG_FLAG_SENT ; 1050 msg -> æags &ð~ MAP_MSG_FLAG_SENT ; 1052 ià( msg -> æags !ð Þdæags ) 1053 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 1054 MAP_MSG_INTERFACE , "Sent"); 1055 } } 1057  $·r£_´Ùeùed ( m­_msg * msg , cÚ¡ * v®ue ) 1059 gboÞ—n æag = `¡rÿ£cmp ( v®ue , "no") != 0; 1060 ušt8_t Þdæags = msg -> æags ; 1062 ià( æag ) 1063 msg -> æags |ð MAP_MSG_FLAG_PROTECTED ; 1065 msg -> æags &ð~ MAP_MSG_FLAG_PROTECTED ; 1067 ià( msg -> æags !ð Þdæags ) 1068 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , 1069 MAP_MSG_INTERFACE , "Protected"); 1070 } } 1072  sm­_msg_·r£r { 1073 cÚ¡ * mÇme ; 1074 (* mfunc è( m­_msg * mmsg , cÚ¡ * mv®ue ); 1075 } gmsg_·r£rs [] = { 1076 { "subjeù", ·r£_subjeù }, 1077 { "d©‘ime", ·r£_d©‘ime }, 1078 { "£nd”_Çme", ·r£_£nd” }, 1079 { "£nd”_add»ssšg", ·r£_£nd”_add»ss }, 1080 { "»¶yto_add»ssšg", ·r£_»¶yto }, 1081 { "»c›Á_Çme", ·r£_»c›Á }, 1082 { "»c›Á_add»ssšg", ·r£_»c›Á_add»ss }, 1083 { "ty³", ·r£_ty³ }, 1084 { "size", ·r£_size }, 1085 { "‹xt", ·r£_‹xt }, 1086 { "»û±iÚ_¡©us", ·r£_¡©us }, 1087 { "©chm’t_size", ·r£_©chm’t_size }, 1088 { "´iÜ™y", ·r£_´iÜ™y }, 1089 { "»ad", ·r£_»ad }, 1090 { "£Á", ·r£_£Á }, 1091 { "´Ùeùed", ·r£_´Ùeùed }, 1095  $msg_–em’t ( GM¬kupP¬£CÚ‹xt * ùxt , cÚ¡ * –em’t , 1096 cÚ¡ ** Çmes , cÚ¡ ** v®ues , 1097 gpoš‹r u£r_d©a , GE¼Ü ** g”r ) 1099  m­_·r£r * ·r£r = u£r_d©a ; 1100  m­_d©a * d©a = ·r£r -> »que¡ -> m­ ; 1101 DBusMes§geI‹r ’Œy , * ™” = ·r£r ->iter; 1102  m­_msg * msg ; 1103 cÚ¡ * key ; 1104  i ; 1105 ušt64_t hªdË ; 1107 ià( `¡rÿ£cmp ("msg", –em’t ) != 0) 1110  i = 0, key = Çmes [i]; key; key =‚ames[++i]) { 1111 ià( `¡rÿ£cmp ( key , "handle") == 0) 1115 hªdË = `¡¹ouÎ ( v®ues [ i ], NULL , 16); 1117 msg = `g_hash_bË_lookup ( d©a -> mes§ges , & hªdË ); 1118 ià( msg =ð NULL ) { 1119 msg = `m­_msg_ü—‹ ( d©a , hªdË , ·r£r -> »que¡ -> fÞd” , 1120 NULL ); 1121 ià( msg =ð NULL ) 1125 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_DICT_ENTRY , NULL , 1126 & ’Œy ); 1128 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_OBJECT_PATH , 1129 & msg -> ·th ); 1131  i = 0, key = Çmes [i]; key; key =‚ames[++i]) { 1132  m­_msg_·r£r * ·r£r ; 1134  ·r£r = msg_·r£rs ;…¬£¸&&…¬£r-> Çme ;…arser++) { 1135 ià( `¡rÿ£cmp ( key , ·r£r -> Çme ) == 0) { 1136 ià( v®ues [ i ]) 1137 ·r£r -> `func ( msg , v®ues [ i ]); 1143 `g_dbus_g‘_´Ý”t›s ( cÚn , msg -> ·th , MAP_MSG_INTERFACE , & ’Œy ); 1145 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ’Œy ); 1146 } } 1148 cÚ¡ GM¬kupP¬£r gmsg_·r£r = { 1149 msg_–em’t , 1150 NULL , 1151 NULL , 1152 NULL , 1153 NULL 1156  $mes§ge_li¡šg_cb ( obc_£ssiÚ * £ssiÚ , 1157  obc_Œªsãr * Œªsãr , 1158 GE¼Ü * ”r , * u£r_d©a ) 1160  ³ndšg_»que¡ * »que¡ = u£r_d©a ; 1161  m­_·r£r * ·r£r ; 1162 GM¬kupP¬£CÚ‹xt * ùxt ; 1163 DBusMes§ge * »¶y ; 1164 DBusMes§geI‹r ™” , ¬¿y ; 1165 * cÚ‹Ás ; 1166 size_t size ; 1167  ³¼ ; 1169 ià( ”r !ð NULL ) { 1170 »¶y = `g_dbus_ü—‹_”rÜ ( »que¡ -> msg , 1171 ERROR_INTERFACE ".Failed", 1172 "%s", ”r -> mes§ge ); 1173  dÚe ; 1176 ³¼ = `obc_Œªsãr_g‘_cÚ‹Ás ( Œªsãr , & cÚ‹Ás , & size ); 1177 ià( ³¼ < 0) { 1178 »¶y = `g_dbus_ü—‹_”rÜ ( »que¡ -> msg , 1179 ERROR_INTERFACE ".Failed", 1181 `¡»¼Ü (- ³¼ )); 1182  dÚe ; 1185 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( »que¡ -> msg ); 1186 ià( »¶y =ð NULL ) { 1187 `g_ä“ ( cÚ‹Ás ); 1188  þ—n ; 1191 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 1192 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 1193 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1194 DBUS_TYPE_OBJECT_PATH_AS_STRING 1195 DBUS_TYPE_ARRAY_AS_STRING 1196 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1197 DBUS_TYPE_STRING_AS_STRING 1198 DBUS_TYPE_VARIANT_AS_STRING 1199 DBUS_DICT_ENTRY_END_CHAR_AS_STRING 1200 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 1201 & ¬¿y ); 1203 ·r£r = `g_Ãw ( m­_·r£r , 1); 1204 ·r£r -> »que¡ =„equest; 1205 ·r£r -> ™” = & ¬¿y ; 1207 ùxt = `g_m¬kup_·r£_cÚ‹xt_Ãw (& msg_·r£r , 0, ·r£r , NULL ); 1208 `g_m¬kup_·r£_cÚ‹xt_·r£ ( ùxt , cÚ‹Ás , size , NULL ); 1209 `g_m¬kup_·r£_cÚ‹xt_ä“ ( ùxt ); 1210 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & ¬¿y ); 1211 `g_ä“ ( cÚ‹Ás ); 1212 `g_ä“ ( ·r£r ); 1214 dÚe : 1215 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1216 þ—n : 1217 `³ndšg_»que¡_ä“ ( »que¡ ); 1218 } } 1220 * $g‘_absÞu‹_fÞd” ( m­_d©a * m­ , cÚ¡ * subfÞd” ) 1222 cÚ¡ * roÙ = `obc_£ssiÚ_g‘_fÞd” ( m­ -> £ssiÚ ); 1224 ià(! subfÞd” || `¡¾’ (subfolder) == 0) 1225  `g_¡rdup ( roÙ ); 1226 ià( `g_¡r_has_suffix ( roÙ , "/")) 1227  `g_¡rcÚÿt ( roÙ , subfÞd” , NULL ); 1229  `g_¡rcÚÿt ( roÙ , "/", subfÞd” , NULL ); 1230 } } 1232  DBusMes§ge * $g‘_mes§ge_li¡šg ( m­_d©a * m­ , 1233 DBusMes§ge * mes§ge , 1234 cÚ¡ * fÞd” , 1235 GObexAµ¬am * ­·¿m ) 1237  ³ndšg_»que¡ * »que¡ ; 1238  obc_Œªsãr * Œªsãr ; 1239 GE¼Ü * ”r = NULL ; 1240 DBusMes§ge * »¶y ; 1242 Œªsãr = `obc_Œªsãr_g‘ ("x-bt/MAP-msg-li¡šg", fÞd” , NULL , & ”r ); 1243 ià( Œªsãr =ð NULL ) { 1244 `g_obex_­·¿m_ä“ ( ­·¿m ); 1245  çž ; 1248 `obc_Œªsãr_£t_­·¿m ( Œªsãr , ­·¿m ); 1250 »que¡ = `³ndšg_»que¡_Ãw ( m­ , mes§ge ); 1251 »que¡ -> fÞd” = `g‘_absÞu‹_fÞd” ( m­ , folder); 1253 ià(! `obc_£ssiÚ_queue ( m­ -> £ssiÚ , Œªsãr , mes§ge_li¡šg_cb , 1254 »que¡ , & ”r )) { 1255 `³ndšg_»que¡_ä“ ( »que¡ ); 1256  çž ; 1259  NULL ; 1261 çž : 1262 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", "%s", 1263 ”r -> mes§ge ); 1264 `g_”rÜ_ä“ ( ”r ); 1265  »¶y ; 1266 } } 1268  GObexAµ¬am * $·r£_subjeù_Ëngth ( GObexAµ¬am * ­·¿m , 1269 DBusMes§geI‹r * ™” ) 1271 gušt8 num ; 1273 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_BYTE ) 1274  NULL ; 1276 `dbus_mes§ge_™”_g‘_basic ( ™” , & num ); 1278  `g_obex_­·¿m_£t_ušt8 ( ­·¿m , MAP_AP_SUBJECTLENGTH , num ); 1279 } } 1281  ušt64_t $g‘_fž‹r_mask (cÚ¡ * fž‹r¡r ) 1283  i ; 1285 ià(! fž‹r¡r ) 1288 ià(! `g_ascii_¡rÿ£cmp ( fž‹r¡r , "ALL")) 1289  FILTER_ALL ; 1291  i = 0; fž‹r_li¡ [i] !ð NULL ; i++) 1292 ià(! `g_ascii_¡rÿ£cmp ( fž‹r¡r , fž‹r_li¡ [ i ])) 1293  1ULL << i ; 1296 } } 1298  $£t_f›ld ( gušt32 * fž‹r , cÚ¡ * fž‹r¡r ) 1300 gušt64 mask ; 1302 mask = `g‘_fž‹r_mask ( fž‹r¡r ); 1304 ià( mask == 0) 1305  - EINVAL ; 1307 * fž‹r |ð mask ; 1309 } } 1311  GObexAµ¬am * $·r£_f›lds ( GObexAµ¬am * ­·¿m , DBusMes§geI‹r * ™” ) 1313 DBusMes§geI‹r ¬¿y ; 1314 gušt32 fž‹r = 0; 1316 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY ) 1317  NULL ; 1319 `dbus_mes§ge_™”_»cur£ ( ™” , & ¬¿y ); 1321  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y è=ð DBUS_TYPE_STRING ) { 1322 cÚ¡ * ¡ršg ; 1324 `dbus_mes§ge_™”_g‘_basic (& ¬¿y , & ¡ršg ); 1326 ià( `£t_f›ld (& fž‹r , ¡ršg ) < 0) 1327  NULL ; 1329 `dbus_mes§ge_™”_Ãxt (& ¬¿y ); 1332  `g_obex_­·¿m_£t_ušt32 ( ­·¿m , MAP_AP_PARAMETERMASK , 1333 fž‹r ); 1334 } } 1336  GObexAµ¬am * $·r£_fž‹r_ty³ ( GObexAµ¬am * ­·¿m , 1337 DBusMes§geI‹r * ™” ) 1339 DBusMes§geI‹r ¬¿y ; 1340 gušt8 ty³s = 0; 1342 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY ) 1343  NULL ; 1345 `dbus_mes§ge_™”_»cur£ ( ™” , & ¬¿y ); 1347  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y è=ð DBUS_TYPE_STRING ) { 1348 cÚ¡ * ¡ršg ; 1350 `dbus_mes§ge_™”_g‘_basic (& ¬¿y , & ¡ršg ); 1352 ià(! `g_ascii_¡rÿ£cmp ( ¡ršg , "sms")) 1353 ty³s |= 0x03; 1354 ià(! `g_ascii_¡rÿ£cmp ( ¡ršg , "email")) 1355 ty³s |= 0x04; 1356 ià(! `g_ascii_¡rÿ£cmp ( ¡ršg , "mms")) 1357 ty³s |= 0x08; 1359  NULL ; 1361 `dbus_mes§ge_™”_Ãxt (& ¬¿y ); 1364  `g_obex_­·¿m_£t_ušt8 ( ­·¿m , MAP_AP_FILTERMESSAGETYPE , 1365 ty³s ); 1366 } } 1368  GObexAµ¬am * $·r£_³riod_begš ( GObexAµ¬am * ­·¿m , 1369 DBusMes§geI‹r * ™” ) 1371 cÚ¡ * ¡ršg ; 1373 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) 1374  NULL ; 1376 `dbus_mes§ge_™”_g‘_basic ( ™” , & ¡ršg ); 1378  `g_obex_­·¿m_£t_¡ršg ( ­·¿m , MAP_AP_FILTERPERIODBEGIN , 1379 ¡ršg ); 1380 } } 1382  GObexAµ¬am * $·r£_³riod_’d ( GObexAµ¬am * ­·¿m , 1383 DBusMes§geI‹r * ™” ) 1385 cÚ¡ * ¡ršg ; 1387 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) 1388  NULL ; 1390 `dbus_mes§ge_™”_g‘_basic ( ™” , & ¡ršg ); 1392  `g_obex_­·¿m_£t_¡ršg ( ­·¿m , MAP_AP_FILTERPERIODEND , 1393 ¡ršg ); 1394 } } 1396  GObexAµ¬am * $·r£_fž‹r_»ad ( GObexAµ¬am * ­·¿m , 1397 DBusMes§geI‹r * ™” ) 1399 gušt8 ¡©us = FILTER_READ_STATUS_NONE ; 1400 dbus_boÞ_t dbus_¡©us = FALSE ; 1402 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_BOOLEAN ) 1403  NULL ; 1405 `dbus_mes§ge_™”_g‘_basic ( ™” , & dbus_¡©us ); 1407 ià( dbus_¡©us ) 1408 ¡©us = FILTER_READ_STATUS_ONLY_READ ; 1410 ¡©us = FILTER_READ_STATUS_ONLY_UNREAD ; 1412  `g_obex_­·¿m_£t_ušt8 ( ­·¿m , MAP_AP_FILTERREADSTATUS , 1413 ¡©us ); 1414 } } 1416  GObexAµ¬am * $·r£_fž‹r_»c›Á ( GObexAµ¬am * ­·¿m , 1417 DBusMes§geI‹r * ™” ) 1419 cÚ¡ * ¡ršg ; 1421 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) 1422  NULL ; 1424 `dbus_mes§ge_™”_g‘_basic ( ™” , & ¡ršg ); 1426  `g_obex_­·¿m_£t_¡ršg ( ­·¿m , MAP_AP_FILTERRECIPIENT , 1427 ¡ršg ); 1428 } } 1430  GObexAµ¬am * $·r£_fž‹r_£nd” ( GObexAµ¬am * ­·¿m , 1431 DBusMes§geI‹r * ™” ) 1433 cÚ¡ * ¡ršg ; 1435 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) 1436  NULL ; 1438 `dbus_mes§ge_™”_g‘_basic ( ™” , & ¡ršg ); 1440  `g_obex_­·¿m_£t_¡ršg ( ­·¿m , MAP_AP_FILTERORIGINATOR , 1441 ¡ršg ); 1442 } } 1444  GObexAµ¬am * $·r£_fž‹r_´iÜ™y ( GObexAµ¬am * ­·¿m , 1445 DBusMes§geI‹r * ™” ) 1447 gušt8 ´iÜ™y = FILTER_PRIORITY_NONE ; 1448 dbus_boÞ_t dbus_´iÜ™y = FALSE ; 1450 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_BOOLEAN ) 1451  NULL ; 1453 `dbus_mes§ge_™”_g‘_basic ( ™” , & dbus_´iÜ™y ); 1455 ià( dbus_´iÜ™y ) 1456 ´iÜ™y = FILTER_PRIORITY_ONLY_HIGH ; 1458 ´iÜ™y = FILTER_PRIORITY_ONLY_NONHIGH ; 1460  `g_obex_­·¿m_£t_ušt8 ( ­·¿m , MAP_AP_FILTERPRIORITY , 1461 ´iÜ™y ); 1462 } } 1464  GObexAµ¬am * $·r£_mes§ge_fž‹rs ( GObexAµ¬am * ­·¿m , 1465 DBusMes§geI‹r * ™” ) 1467 DBusMes§geI‹r ¬¿y ; 1469 `DBG (""); 1471 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY ) 1472  NULL ; 1474 `dbus_mes§ge_™”_»cur£ ( ™” , & ¬¿y ); 1476  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y è=ð DBUS_TYPE_DICT_ENTRY ) { 1477 cÚ¡ * key ; 1478 DBusMes§geI‹r v®ue , ’Œy ; 1480 `dbus_mes§ge_™”_»cur£ (& ¬¿y , & ’Œy ); 1481 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & key ); 1483 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 1484 `dbus_mes§ge_™”_»cur£ (& ’Œy , & v®ue ); 1486 ià( `¡rÿ£cmp ( key , "Offset") == 0) { 1487 ià( `·r£_off£t ( ­·¿m , & v®ue è=ð NULL ) 1488  NULL ; 1489 } ià( `¡rÿ£cmp ( key , "MaxCount") == 0) { 1490 ià( `·r£_max_couÁ ( ­·¿m , & v®ue è=ð NULL ) 1491  NULL ; 1492 } ià( `¡rÿ£cmp ( key , "SubjectLength") == 0) { 1493 ià( `·r£_subjeù_Ëngth ( ­·¿m , & v®ue è=ð NULL ) 1494  NULL ; 1495 } ià( `¡rÿ£cmp ( key , "Fields") == 0) { 1496 ià( `·r£_f›lds ( ­·¿m , & v®ue è=ð NULL ) 1497  NULL ; 1498 } ià( `¡rÿ£cmp ( key , "Types") == 0) { 1499 ià( `·r£_fž‹r_ty³ ( ­·¿m , & v®ue è=ð NULL ) 1500  NULL ; 1501 } ià( `¡rÿ£cmp ( key , "PeriodBegin") == 0) { 1502 ià( `·r£_³riod_begš ( ­·¿m , & v®ue è=ð NULL ) 1503  NULL ; 1504 } ià( `¡rÿ£cmp ( key , "PeriodEnd") == 0) { 1505 ià( `·r£_³riod_’d ( ­·¿m , & v®ue è=ð NULL ) 1506  NULL ; 1507 } ià( `¡rÿ£cmp ( key , "Read") == 0) { 1508 ià( `·r£_fž‹r_»ad ( ­·¿m , & v®ue è=ð NULL ) 1509  NULL ; 1510 } ià( `¡rÿ£cmp ( key , "Recipient") == 0) { 1511 ià( `·r£_fž‹r_»c›Á ( ­·¿m , & v®ue è=ð NULL ) 1512  NULL ; 1513 } ià( `¡rÿ£cmp ( key , "Sender") == 0) { 1514 ià( `·r£_fž‹r_£nd” ( ­·¿m , & v®ue è=ð NULL ) 1515  NULL ; 1516 } ià( `¡rÿ£cmp ( key , "Priority") == 0) { 1517 ià( `·r£_fž‹r_´iÜ™y ( ­·¿m , & v®ue è=ð NULL ) 1518  NULL ; 1521 `dbus_mes§ge_™”_Ãxt (& ¬¿y ); 1524  ­·¿m ; 1525 } } 1527  DBusMes§ge * $m­_li¡_mes§ges ( DBusCÚÃùiÚ * cÚÃùiÚ , 1528 DBusMes§ge * mes§ge , * u£r_d©a ) 1530  m­_d©a * m­ = u£r_d©a ; 1531 cÚ¡ * fÞd” ; 1532 GObexAµ¬am * ­·¿m ; 1533 DBusMes§geI‹r ¬gs ; 1535 `dbus_mes§ge_™”_š™ ( mes§ge , & ¬gs ); 1537 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬gs è!ð DBUS_TYPE_STRING ) 1538  `g_dbus_ü—‹_”rÜ ( mes§ge , 1539 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 1541 `dbus_mes§ge_™”_g‘_basic (& ¬gs , & fÞd” ); 1543 ­·¿m = `g_obex_­·¿m_£t_ušt16 ( NULL , MAP_AP_MAXLISTCOUNT , 1544 DEFAULT_COUNT ); 1545 ­·¿m = `g_obex_­·¿m_£t_ušt16 ×µ¬am, MAP_AP_STARTOFFSET , 1546 DEFAULT_OFFSET ); 1548 `dbus_mes§ge_™”_Ãxt (& ¬gs ); 1550 ià( `·r£_mes§ge_fž‹rs ( ­·¿m , & ¬gs è=ð NULL ) { 1551 `g_obex_­·¿m_ä“ ( ­·¿m ); 1552  `g_dbus_ü—‹_”rÜ ( mes§ge , 1553 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 1556  `g‘_mes§ge_li¡šg ( m­ , mes§ge , fÞd” , ­·¿m ); 1557 } } 1559 ** $g‘_fž‹r_¡rs ( ušt64_t fž‹r , * size ) 1561 ** li¡ , ** ™em ; 1562  i ; 1564 li¡ = `g_m®loc0 ((**è* ( FILTER_BIT_MAX + 2)); 1566 ™em = li¡ ; 1568  i = 0; fž‹r_li¡ [i] !ð NULL ; i++) 1569 ià( fž‹r & (1ULL << i )) 1570 *( ™em ++èð `g_¡rdup ( fž‹r_li¡ [ i ]); 1572 * ™em = NULL ; 1573 * size = ™em - li¡ ; 1574  li¡ ; 1575 } } 1577  DBusMes§ge * $m­_li¡_fž‹r_f›lds ( DBusCÚÃùiÚ * cÚÃùiÚ , 1578 DBusMes§ge * mes§ge , * u£r_d©a ) 1580 ** fž‹rs = NULL ; 1581  size ; 1582 DBusMes§ge * »¶y ; 1584 fž‹rs = `g‘_fž‹r_¡rs ( FILTER_ALL , & size ); 1585 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( mes§ge ); 1586 `dbus_mes§ge_­³nd_¬gs ( »¶y , DBUS_TYPE_ARRAY , 1587 DBUS_TYPE_STRING , & fž‹rs , size , 1588 DBUS_TYPE_INVALID ); 1590 `g_¡rä“v ( fž‹rs ); 1591  »¶y ; 1592 } } 1594  $upd©e_šbox_cb ( obc_£ssiÚ * £ssiÚ , 1595  obc_Œªsãr * Œªsãr , 1596 GE¼Ü * ”r , * u£r_d©a ) 1598  ³ndšg_»que¡ * »que¡ = u£r_d©a ; 1599 DBusMes§ge * »¶y ; 1601 ià( ”r !ð NULL ) { 1602 »¶y = `g_dbus_ü—‹_”rÜ ( »que¡ -> msg , 1603 ERROR_INTERFACE ".Failed", 1604 "%s", ”r -> mes§ge ); 1605  dÚe ; 1608 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( »que¡ -> msg ); 1610 dÚe : 1611 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1612 `³ndšg_»que¡_ä“ ( »que¡ ); 1613 } } 1615  DBusMes§ge * $m­_upd©e_šbox ( DBusCÚÃùiÚ * cÚÃùiÚ , 1616 DBusMes§ge * mes§ge , * u£r_d©a ) 1618  m­_d©a * m­ = u£r_d©a ; 1619 DBusMes§ge * »¶y ; 1620  cÚ‹Ás [1]; 1621  obc_Œªsãr * Œªsãr ; 1622 GE¼Ü * ”r = NULL ; 1623  ³ndšg_»que¡ * »que¡ ; 1625 cÚ‹Ás [0] = FILLER_BYTE ; 1627 Œªsãr = `obc_Œªsãr_put ("x-bt/MAP-mes§geUpd©e", NULL , NULL, 1628 cÚ‹Ás , (contents), 1629 & ”r ); 1630 ià( Œªsãr =ð NULL ) 1631  çž ; 1633 »que¡ = `³ndšg_»que¡_Ãw ( m­ , mes§ge ); 1635 ià(! `obc_£ssiÚ_queue ( m­ -> £ssiÚ , Œªsãr , upd©e_šbox_cb , 1636 »que¡ , & ”r )) { 1637 `³ndšg_»que¡_ä“ ( »que¡ ); 1638  çž ; 1641  NULL ; 1643 çž : 1644 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", "%s", 1645 ”r -> mes§ge ); 1646 `g_”rÜ_ä“ ( ”r ); 1647  »¶y ; 1648 } } 1650  DBusMes§ge * $push_mes§ge ( m­_d©a * m­ , 1651 DBusMes§ge * mes§ge , 1652 cÚ¡ * fž’ame , 1653 cÚ¡ * fÞd” , 1654 GObexAµ¬am * ­·¿m ) 1656  obc_Œªsãr * Œªsãr ; 1657 GE¼Ü * ”r = NULL ; 1658 DBusMes§ge * »¶y ; 1660 Œªsãr = `obc_Œªsãr_put ("x-bt/mes§ge", fÞd” , fž’ame , 1661 NULL , 0, & ”r ); 1662 ià( Œªsãr =ð NULL ) { 1663 `g_obex_­·¿m_ä“ ( ­·¿m ); 1664  çž ; 1667 `obc_Œªsãr_£t_­·¿m ( Œªsãr , ­·¿m ); 1669 ià(! `obc_£ssiÚ_queue ( m­ -> £ssiÚ , Œªsãr , NULL , NULL, & ”r )) 1670  çž ; 1672  `obc_Œªsãr_ü—‹_dbus_»¶y ( Œªsãr , mes§ge ); 1674 çž : 1675 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", "%s", 1676 ”r -> mes§ge ); 1677 `g_”rÜ_ä“ ( ”r ); 1678  »¶y ; 1679 } } 1681  GObexAµ¬am * $·r£_Œª¥¬’t ( GObexAµ¬am * ­·¿m , 1682 DBusMes§geI‹r * ™” ) 1684 dbus_boÞ_t Œª¥¬’t ; 1686 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_BOOLEAN ) 1687  NULL ; 1689 `dbus_mes§ge_™”_g‘_basic ( ™” , & Œª¥¬’t ); 1691  `g_obex_­·¿m_£t_ušt8 ( ­·¿m , MAP_AP_TRANSPARENT , 1692 Œª¥¬’t ? TRUE : FALSE ); 1693 } } 1695  GObexAµ¬am * $·r£_»Œy ( GObexAµ¬am * ­·¿m , DBusMes§geI‹r * ™” ) 1697 dbus_boÞ_t »Œy ; 1699 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_BOOLEAN ) 1700  NULL ; 1702 `dbus_mes§ge_™”_g‘_basic ( ™” , & »Œy ); 1704  `g_obex_­·¿m_£t_ušt8 ( ­·¿m , MAP_AP_RETRY , 1705 »Œy ? TRUE : FALSE ); 1706 } } 1708  GObexAµ¬am * $·r£_ch¬£t ( GObexAµ¬am * ­·¿m , DBusMes§geI‹r * ™” ) 1710 gušt8 ch¬£t = 0; 1711 cÚ¡ * ¡ršg ; 1713 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) 1714  NULL ; 1716 `dbus_mes§ge_™”_g‘_basic ( ™” , & ¡ršg ); 1718 ià( `¡rÿ£cmp ( ¡ršg , "native") == 0) 1719 ch¬£t = CHARSET_NATIVE ; 1720 ià( `¡rÿ£cmp ( ¡ršg , "utf8") == 0) 1721 ch¬£t = CHARSET_UTF8 ; 1723  NULL ; 1725  `g_obex_­·¿m_£t_ušt8 ( ­·¿m , MAP_AP_CHARSET , ch¬£t ); 1726 } } 1728  GObexAµ¬am * $·r£_push_ÝtiÚs ( GObexAµ¬am * ­·¿m , 1729 DBusMes§geI‹r * ™” ) 1731 DBusMes§geI‹r ¬¿y ; 1733 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY ) 1734  NULL ; 1736 `dbus_mes§ge_™”_»cur£ ( ™” , & ¬¿y ); 1738  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y è=ð DBUS_TYPE_DICT_ENTRY ) { 1739 cÚ¡ * key ; 1740 DBusMes§geI‹r v®ue , ’Œy ; 1742 `dbus_mes§ge_™”_»cur£ (& ¬¿y , & ’Œy ); 1743 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & key ); 1745 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 1746 `dbus_mes§ge_™”_»cur£ (& ’Œy , & v®ue ); 1748 ià( `¡rÿ£cmp ( key , "Transparent") == 0) { 1749 ià( `·r£_Œª¥¬’t ( ­·¿m , & v®ue è=ð NULL ) 1750  NULL ; 1751 } ià( `¡rÿ£cmp ( key , "Retry") == 0) { 1752 ià( `·r£_»Œy ( ­·¿m , & v®ue è=ð NULL ) 1753  NULL ; 1754 } ià( `¡rÿ£cmp ( key , "Charset") == 0) { 1755 ià( `·r£_ch¬£t ( ­·¿m , & v®ue è=ð NULL ) 1756  NULL ; 1759 `dbus_mes§ge_™”_Ãxt (& ¬¿y ); 1762  ­·¿m ; 1763 } } 1765  DBusMes§ge * $m­_push_mes§ge ( DBusCÚÃùiÚ * cÚÃùiÚ , 1766 DBusMes§ge * mes§ge , * u£r_d©a ) 1768  m­_d©a * m­ = u£r_d©a ; 1769 * fž’ame ; 1770 * fÞd” ; 1771 GObexAµ¬am * ­·¿m ; 1772 DBusMes§geI‹r ¬gs ; 1774 `dbus_mes§ge_™”_š™ ( mes§ge , & ¬gs ); 1776 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬gs è!ð DBUS_TYPE_STRING ) 1777  `g_dbus_ü—‹_”rÜ ( mes§ge , 1778 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 1780 `dbus_mes§ge_™”_g‘_basic (& ¬gs , & fž’ame ); 1782 `dbus_mes§ge_™”_Ãxt (& ¬gs ); 1784 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬gs è!ð DBUS_TYPE_STRING ) { 1785  `g_dbus_ü—‹_”rÜ ( mes§ge , 1786 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 1789 `dbus_mes§ge_™”_g‘_basic (& ¬gs , & fÞd” ); 1791 `dbus_mes§ge_™”_Ãxt (& ¬gs ); 1793 ­·¿m = `g_obex_­·¿m_£t_ušt8 ( NULL , MAP_AP_CHARSET , CHARSET_UTF8 ); 1795 ià( `·r£_push_ÝtiÚs ( ­·¿m , & ¬gs è=ð NULL ) { 1796 `g_obex_­·¿m_ä“ ( ­·¿m ); 1797  `g_dbus_ü—‹_”rÜ ( mes§ge , 1798 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 1801  `push_mes§ge ( m­ , mes§ge , fž’ame , fÞd” , ­·¿m ); 1802 } } 1804 cÚ¡ GDBusM‘hodTabË gm­_m‘hods [] = { 1805 { GDBUS_ASYNC_METHOD ("SetFolder", 1806 GDBUS_ARGS ({ "Çme", "s" }), NULL , 1807 m­_£©h ) }, 1808 { GDBUS_ASYNC_METHOD ("ListFolders", 1809 GDBUS_ARGS ({ "filters", "a{sv}" }), 1810 GDBUS_ARGS ({ "content", "aa{sv}" }), 1811 m­_li¡_fÞd”s ) }, 1812 { GDBUS_ASYNC_METHOD ("ListMessages", 1813 GDBUS_ARGS ({ "folder", "s" }, { "filter", "a{sv}" }), 1814 GDBUS_ARGS ({ "messages", "a{oa{sv}}" }), 1815 m­_li¡_mes§ges ) }, 1816 { GDBUS_METHOD ("ListFilterFields", 1817 NULL , 1818 GDBUS_ARGS ({ "fields", "as" }), 1819 m­_li¡_fž‹r_f›lds ) }, 1820 { GDBUS_ASYNC_METHOD ("UpdateInbox", 1821 NULL , 1822 NULL , 1823 m­_upd©e_šbox ) }, 1824 { GDBUS_ASYNC_METHOD ("PushMessage", 1825 GDBUS_ARGS ({ "file", "s" }, { "folder", "s" }, 1827 GDBUS_ARGS ({ "transfer", "o" }, 1829 m­_push_mes§ge ) }, 1833  $m­_msg_»move (* d©a ) 1835  m­_msg * msg = d©a ; 1836 * ·th ; 1838 ·th = msg ->path; 1839 msg -> ·th = NULL ; 1840 `g_dbus_uÄegi¡”_š‹rçû ( cÚn , ·th , MAP_MSG_INTERFACE ); 1841 `g_ä“ ( ·th ); 1842 } } 1844  $m­_hªdË_Ãw_mes§ge ( m­_d©a * m­ , 1845  m­_ev’t * ev’t ) 1847  m­_msg * msg ; 1849 msg = `g_hash_bË_lookup ( m­ -> mes§ges , & ev’t -> hªdË ); 1851 ià( msg ) 1852 `g_hash_bË_»move ( m­ -> mes§ges , & ev’t -> hªdË ); 1854 `m­_msg_ü—‹ ( m­ , ev’t -> hªdË ,ƒv’t-> fÞd” ,ƒv’t-> msg_ty³ ); 1855 } } 1857  $m­_hªdË_¡©us_chªged ( m­_d©a * m­ , 1858  m­_ev’t * ev’t , 1859 cÚ¡ * ¡©us ) 1861  m­_msg * msg ; 1863 msg = `g_hash_bË_lookup ( m­ -> mes§ges , & ev’t -> hªdË ); 1864 ià( msg =ð NULL ) 1867 ià( `g_¡rcmp0 ( msg -> ¡©us , status) == 0) 1870 `g_ä“ ( msg -> ¡©us ); 1871 msg -> ¡©us = `g_¡rdup (status); 1873 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , MAP_MSG_INTERFACE , 1875 } } 1877  $m­_hªdË_fÞd”_chªged ( m­_d©a * m­ , 1878  m­_ev’t * ev’t , 1879 cÚ¡ * fÞd” ) 1881  m­_msg * msg ; 1883 ià(! fÞd” ) 1886 msg = `g_hash_bË_lookup ( m­ -> mes§ges , & ev’t -> hªdË ); 1887 ià(! msg ) 1890 ià( `g_¡rcmp0 ( msg -> fÞd” , folder) == 0) 1893 `g_ä“ ( msg -> fÞd” ); 1894 msg -> fÞd” = `g_¡rdup (folder); 1896 `g_dbus_em™_´Ý”ty_chªged ( cÚn , msg -> ·th , MAP_MSG_INTERFACE , 1898 } } 1900  $m­_hªdË_nÙifiÿtiÚ ( m­_ev’t * ev’t , * u£r_d©a ) 1902  m­_d©a * m­ = u£r_d©a ; 1904 `DBG ("Ev’ˆ»p܈fÜ %s:%d", `obc_£ssiÚ_g‘_de¡š©iÚ ( m­ -> £ssiÚ ), 1905 m­ -> mas_š¡ªû_id ); 1906 `DBG ("ty³=%x hªdË=%" PRIx64 " folder=%s old_folder=%s msg_type=%s", 1907 ev’t -> ty³ ,ƒv’t-> hªdË ,ƒv’t-> fÞd” ,ƒv’t-> Þd_fÞd” , 1908 ev’t -> msg_ty³ ); 1910  ev’t -> ty³ ) { 1911  MAP_ET_NEW_MESSAGE : 1912 `m­_hªdË_Ãw_mes§ge ( m­ , ev’t ); 1914  MAP_ET_DELIVERY_SUCCESS : 1915 `m­_hªdË_¡©us_chªged ( m­ , ev’t , "delivery-success"); 1917  MAP_ET_SENDING_SUCCESS : 1918 `m­_hªdË_¡©us_chªged ( m­ , ev’t , "sending-success"); 1920  MAP_ET_DELIVERY_FAILURE : 1921 `m­_hªdË_¡©us_chªged ( m­ , ev’t , "delivery-failure"); 1923  MAP_ET_SENDING_FAILURE : 1924 `m­_hªdË_¡©us_chªged ( m­ , ev’t , "sending-failure"); 1926  MAP_ET_MESSAGE_DELETED : 1927 `m­_hªdË_fÞd”_chªged ( m­ , ev’t , "/telecom/msg/deleted"); 1929  MAP_ET_MESSAGE_SHIFT : 1930 `m­_hªdË_fÞd”_chªged ( m­ , ev’t ,ƒv’t-> fÞd” ); 1932  MAP_ET_MEMORY_FULL : 1933  MAP_ET_MEMORY_AVAILABLE : 1937 } } 1939  boÞ $£t_nÙifiÿtiÚ_»gi¡¿tiÚ ( m­_d©a * m­ , boÞ ¡©us ) 1941  obc_Œªsãr * Œªsãr ; 1942 GE¼Ü * ”r = NULL ; 1943 GObexAµ¬am * ­·¿m ; 1944  cÚ‹Ás [1]; 1945 cÚ¡ * add»ss ; 1947 add»ss = `obc_£ssiÚ_g‘_de¡š©iÚ ( m­ -> £ssiÚ ); 1948 ià(! add»ss || m­ -> mas_š¡ªû_id < 0) 1949  FALSE ; 1951 ià( ¡©us ) { 1952 `m­_»gi¡”_ev’t_hªdËr ( m­ -> £ssiÚ , m­-> mas_š¡ªû_id , 1953 & m­_hªdË_nÙifiÿtiÚ , m­ ); 1955 `m­_uÄegi¡”_ev’t_hªdËr ( m­ -> £ssiÚ , 1956 m­ -> mas_š¡ªû_id ); 1959 cÚ‹Ás [0] = FILLER_BYTE ; 1961 Œªsãr = `obc_Œªsãr_put ("x-bt/MAP-NÙifiÿtiÚRegi¡¿tiÚ", NULL , 1962 NULL , cÚ‹Ás , (cÚ‹Ás), & ”r ); 1964 ià( Œªsãr =ð NULL ) 1965  çl£ ; 1967 ­·¿m = `g_obex_­·¿m_£t_ušt8 ( NULL , MAP_AP_NOTIFICATIONSTATUS , 1968 ¡©us ); 1970 `obc_Œªsãr_£t_­·¿m ( Œªsãr , ­·¿m ); 1972 ià( `obc_£ssiÚ_queue ( m­ -> £ssiÚ , Œªsãr , NULL , m­, & ”r )) 1973  Œue ; 1975  çl£ ; 1976 } } 1978  $m­_ä“ (* d©a ) 1980  m­_d©a * m­ = d©a ; 1982 `£t_nÙifiÿtiÚ_»gi¡¿tiÚ ( m­ , çl£ ); 1984 `obc_£ssiÚ_uÄef ( m­ -> £ssiÚ ); 1985 `g_hash_bË_uÄef ( m­ -> mes§ges ); 1986 `g_ä“ ( m­ ); 1987 } } 1989  $·r£_£rviû_»cÜd ( m­_d©a * m­ ) 1991 cÚ¡ * d©a ; 1994 m­ -> mas_š¡ªû_id = -1; 1995 d©a = `obc_£ssiÚ_g‘_©Œibu‹ ( m­ -> £ssiÚ , 1996 SDP_ATTR_MAS_INSTANCE_ID ); 1997 ià( d©a !ð NULL ) 1998 m­ -> mas_š¡ªû_id = *( ušt8_t *) d©a ; 2000 `DBG ("Failedo„ead MAS instance id"); 2003 d©a = `obc_£ssiÚ_g‘_©Œibu‹ ( m­ -> £ssiÚ , 2004 SDP_ATTR_SUPPORTED_MESSAGE_TYPES ); 2005 ià( d©a !ð NULL ) 2006 m­ -> suµÜ‹d_mes§ge_ty³s = *( ušt8_t *) d©a ; 2008 `DBG ("Failedo„ead supported messageypes"); 2011 d©a = `obc_£ssiÚ_g‘_©Œibu‹ ( m­ -> £ssiÚ , 2012 SDP_ATTR_MAP_SUPPORTED_FEATURES ); 2013 if( d©a !ð NULL ) 2014 m­ -> suµÜ‹d_ã©u»s = *( ušt32_t *è d©a ; 2016 m­ -> suµÜ‹d_ã©u»s = 0x0000001f; 2017 } } 2019  $m­_´obe ( obc_£ssiÚ * £ssiÚ ) 2021  m­_d©a * m­ ; 2022 cÚ¡ * ·th ; 2024 ·th = `obc_£ssiÚ_g‘_·th ( £ssiÚ ); 2026 m­ = `g_Œy_Ãw0 ( m­_d©a , 1); 2027 ià(! m­ ) 2028  - ENOMEM ; 2030 m­ -> £ssiÚ = `obc_£ssiÚ_»f (session); 2031 m­ -> mes§ges = `g_hash_bË_Ãw_fuÎ ( g_št64_hash , g_št64_equ® , NULL , 2032 m­_msg_»move ); 2034 `·r£_£rviû_»cÜd ( m­ ); 2036 `DBG ("%s, in¡ªû id %d", ·th , m­ -> mas_š¡ªû_id ); 2038 `£t_nÙifiÿtiÚ_»gi¡¿tiÚ ( m­ , Œue ); 2040 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚn , ·th , MAP_INTERFACE , m­_m‘hods , 2041 NULL , NULL, m­ , m­_ä“ )) { 2042 `m­_ä“ ( m­ ); 2044  - ENOMEM ; 2048 } } 2050  $m­_»move ( obc_£ssiÚ * £ssiÚ ) 2052 cÚ¡ * ·th = `obc_£ssiÚ_g‘_·th ( £ssiÚ ); 2054 `DBG ("%s", ·th ); 2056 `g_dbus_uÄegi¡”_š‹rçû ( cÚn , ·th , MAP_INTERFACE ); 2057 } } 2059  obc_driv” gm­ = { 2060 . £rviû = "MAP", 2061 . guuid = MAS_UUID , 2062 . grg‘ = OBEX_MAS_UUID , 2063 . grg‘_Ën = OBEX_MAS_UUID_LEN , 2064 . g´obe = m­_´obe , 2065 . g»move = m­_»move 2068  $m­_š™ () 2070  ”r ; 2072 `DBG (""); 2074 cÚn = `dbus_bus_g‘ ( DBUS_BUS_SESSION , NULL ); 2075 ià(! cÚn ) 2076  - EIO ; 2078 ”r = `obc_driv”_»gi¡” (& m­ ); 2079 ià( ”r < 0) { 2080 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 2081 cÚn = NULL ; 2082  ”r ; 2086 } } 2088  $m­_ex™ () 2090 `DBG (""); 2092 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 2093 cÚn = NULL ; 2095 `obc_driv”_uÄegi¡” (& m­ ); 2096 } } @obexd/client/map.h 23  m­_š™ (); 24  m­_ex™ (); @obexd/client/mns-tizen.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<”ºo.h > 28  ~ 29  ~ 30  ~<¡ršg.h > 32  ~"log.h " 34  ~"Œªsãr.h " 35  ~"£ssiÚ.h " 36  ~"driv”.h " 37  ~"m­_­.h " 38  ~"mns-tiz’.h " 40  #OBEX_MNS_UUID \ 41 "\xBB\x58\x2B\x41\x42\x0C\x11\xDB\xB0\xDE\x08\x00\x20\x0C\x9A\x66" ) 42  #OBEX_MNS_UUID_LEN 16 ) 44  #MNS_INTERFACE "Üg.Ý’obex.Mes§geNÙifiÿtiÚ" ) 45  #ERROR_INF MNS_INTERFACE ".E¼Ü" ) 46  #MNS_UUID "00001133-0000-1000-8000-00805f9b34fb" ) 48 emsg_ev’t_ty³ { 49 mEVENT_TYPE_NEW_MESSAGE , 50 mEVENT_TYPE_DELIVERY_SUCCESS , 51 mEVENT_TYPE_SENDING_SUCCESS , 52 mEVENT_TYPE_DELIVERY_FAILURE , 53 mEVENT_TYPE_SENDING_FAILURE , 54 mEVENT_TYPE_MEMORY_FULL , 55 mEVENT_TYPE_MEMORY_AVAILABLE , 56 mEVENT_TYPE_MESSAGE_DELETED , 57 mEVENT_TYPE_MESSAGE_SHIFT , 58 mEVENT_TYPE_UNKNOWN , 61  s£ndev’t_­·¿m { 62 ušt8_t mmasš¡ªûid_g ; 63 ušt8_t mmasš¡ªûid_Ën ; 64 ušt8_t mmasš¡ªûid ; 65 } __©Œibu‹__ (( ·cked )); 67  smns_d©a { 68  obc_£ssiÚ * m£ssiÚ ; 69 DBusMes§ge * mmsg ; 72  DBusCÚÃùiÚ * gcÚn = NULL ; 74  $g‘_ev’t_ty³ ( gch¬ * ev’t_ty³ ) 76 `DBG ("ev’t_ty³ = %s\n", ev’t_ty³ ); 78 ià(! `g_¡rcmp0 ( ev’t_ty³ , "NewMessage")) 79  EVENT_TYPE_NEW_MESSAGE ; 80 ià(! `g_¡rcmp0 ( ev’t_ty³ , "DeliverySuccess")) 81  EVENT_TYPE_DELIVERY_SUCCESS ; 82 ià(! `g_¡rcmp0 ( ev’t_ty³ , "SendingSuccess")) 83  EVENT_TYPE_SENDING_SUCCESS ; 84 ià(! `g_¡rcmp0 ( ev’t_ty³ , "DeliveryFailure")) 85  EVENT_TYPE_DELIVERY_FAILURE ; 86 ià(! `g_¡rcmp0 ( ev’t_ty³ , "SendingFailure")) 87  EVENT_TYPE_SENDING_FAILURE ; 88 ià(! `g_¡rcmp0 ( ev’t_ty³ , "MemoryFull")) 89  EVENT_TYPE_MEMORY_FULL ; 90 ià(! `g_¡rcmp0 ( ev’t_ty³ , "MemoryAvailable")) 91  EVENT_TYPE_MEMORY_AVAILABLE ; 92 ià(! `g_¡rcmp0 ( ev’t_ty³ , "MessageDeleted")) 93  EVENT_TYPE_MESSAGE_DELETED ; 94 ià(! `g_¡rcmp0 ( ev’t_ty³ , "MessageShift")) 95  EVENT_TYPE_MESSAGE_SHIFT ; 97  EVENT_TYPE_UNKNOWN ; 99 } } 101  gch¬ * $g’”©e_ev’t_»pÜt ( gch¬ * ev’t_ty³ , 102 gušt64 hªdË , gch¬ * fÞd” , 103 gch¬ * Þd_fÞd” , gch¬ * msg_ty³ ) 105 GSŒšg * buf ; 106  ev’t ; 108 ev’t = `g‘_ev’t_ty³ ( ev’t_ty³ ); 109 ià( ev’t =ð EVENT_TYPE_UNKNOWN ) 110  NULL ; 112 buf = `g_¡ršg_Ãw (""); 113 `g_¡ršg_­³nd_´štf ( buf , ""); 130  `g_¡ršg_ä“ ( buf , FALSE ); 131 } } 133  DBusMes§ge * $£nd_ev’t ( DBusCÚÃùiÚ * cÚÃùiÚ , 134 DBusMes§ge * mes§ge , * u£r_d©a ) 136  mns_d©a * mns = u£r_d©a ; 137  obc_Œªsãr * Œªsãr ; 138  £ndev’t_­·¿m ­·¿m ; 139 gch¬ * ev’t_ty³ ; 140 gch¬ * fÞd” ; 141 gch¬ * Þd_fÞd” ; 142 gch¬ * msg_ty³ ; 143 gch¬ * buf ; 144 gušt64 hªdË ; 145 GE¼Ü * ”r ; 146 DBusMes§ge * »¶y ; 148 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 149 DBUS_TYPE_STRING , & ev’t_ty³ , 150 DBUS_TYPE_UINT64 , & hªdË , 151 DBUS_TYPE_STRING , & fÞd” , 152 DBUS_TYPE_STRING , & Þd_fÞd” , 153 DBUS_TYPE_STRING , & msg_ty³ , 154 DBUS_TYPE_INVALID è=ð FALSE ) 155  `g_dbus_ü—‹_”rÜ ( mes§ge , 157 NULL ); 159 buf = `g’”©e_ev’t_»pÜt ( ev’t_ty³ , hªdË , fÞd” , 160 Þd_fÞd” , msg_ty³ ); 161 ià(! buf ) 162  `g_dbus_ü—‹_”rÜ ( mes§ge , 163 "Üg.Ý’obex.E¼Ü.Inv®idArgum’ts", NULL ); 165 Œªsãr = `obc_Œªsãr_put ("x-bt/MAP-ev’t-»pÜt", NULL , NULL, 166 buf , `¡¾’ (buf), & ”r ); 168 `g_ä“ ( buf ); 170 ià( Œªsãr =ð NULL ) 171  çž ; 173 ­·¿m . masš¡ªûid_g = MAP_AP_MASINSTANCEID ; 174 ­·¿m . masš¡ªûid_Ën = 1; 176 ­·¿m . masš¡ªûid = 0; 178 `obc_Œªsãr_£t_­·¿m ( Œªsãr , & ­·¿m ); 180 ià( `obc_£ssiÚ_queue ( mns -> £ssiÚ , Œªsãr , NULL , NULL, & ”r )) 181  `dbus_mes§ge_Ãw_m‘hod_»tuº ( mes§ge ); 183 çž : 184 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INF ".Failed", "%s", 185 ”r -> mes§ge ); 186 `g_”rÜ_ä“ ( ”r ); 187  »¶y ; 188 } } 190  GDBusM‘hodTabË gmns_m‘hods [] = { 191 { GDBUS_ASYNC_METHOD ("SendEvent", 192 GDBUS_ARGS ({ "event_type", "s" }, { "handle", "t" }, 195 NULL , 196 £nd_ev’t ) }, 200  $mns_ä“ (* d©a ) 202  mns_d©a * mns = d©a ; 204 `obc_£ssiÚ_uÄef ( mns -> £ssiÚ ); 205 `g_ä“ ( mns ); 206 } } 208  $mns_´obe ( obc_£ssiÚ * £ssiÚ ) 210  mns_d©a * mns ; 211 cÚ¡ * ·th ; 213 ·th = `obc_£ssiÚ_g‘_·th ( £ssiÚ ); 215 `DBG ("%s", ·th ); 217 mns = `g_Œy_Ãw0 ( mns_d©a , 1); 218 ià(! mns ) 219  - ENOMEM ; 221 mns -> £ssiÚ = `obc_£ssiÚ_»f (session); 223 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚn , ·th , MNS_INTERFACE , mns_m‘hods , 224 NULL , NULL, mns , mns_ä“ )) { 225 `mns_ä“ ( mns ); 226  - ENOMEM ; 230 } } 232  $mns_»move ( obc_£ssiÚ * £ssiÚ ) 234 cÚ¡ * ·th = `obc_£ssiÚ_g‘_·th ( £ssiÚ ); 236 `DBG ("%s", ·th ); 238 `g_dbus_uÄegi¡”_š‹rçû ( cÚn , ·th , MNS_INTERFACE ); 239 } } 241  obc_driv” gmns = { 242 . £rviû = "MNS", 243 . guuid = MNS_UUID , 244 . grg‘ = OBEX_MNS_UUID , 245 . grg‘_Ën = OBEX_MNS_UUID_LEN , 246 . g´obe = mns_´obe , 247 . g»move = mns_»move 250  $mns_š™ () 252  ”r ; 254 `DBG (""); 256 cÚn = `dbus_bus_g‘ ( DBUS_BUS_SESSION , NULL ); 257 ià(! cÚn ) 258  - EIO ; 260 ”r = `obc_driv”_»gi¡” (& mns ); 261 ià( ”r < 0) { 262 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 263 cÚn = NULL ; 264  ”r ; 268 } } 270  $mns_ex™ () 272 `DBG (""); 274 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 275 cÚn = NULL ; 277 `obc_driv”_uÄegi¡” (& mns ); 278 } } @obexd/client/mns-tizen.h 23  mns_š™ (); 24  mns_ex™ (); @obexd/client/mns.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡ršg.h > 29  ~<”ºo.h > 30  ~ 31  ~ 32  ~<š‰y³s.h > 33  ~<¡dboÞ.h > 34  ~<¡dlib.h > 36  ~ 37  ~ 39  ~"obexd.h " 40  ~"¶ugš.h " 41  ~"log.h " 42  ~"obex.h " 43  ~"£rviû.h " 44  ~"mim‘y³.h " 45  ~"m­_­.h " 46  ~"m­-ev’t.h " 48  ~"obexd/¤c/mªag”.h " 50  smns_£ssiÚ { 51 GSŒšg * mbufãr ; 52 GObexAµ¬am * mš·¿ms ; 53 * m»mÙe_add»ss ; 54 ušt8_t mmas_š¡ªû_id ; 57 cÚ¡ ušt8_t gMNS_TARGET [ TARGET_SIZE ] = { 61  $g‘_·¿ms ( obex_£ssiÚ * os ,  mns_£ssiÚ * mns ) 63 cÚ¡ ušt8_t * bufãr ; 64 ssize_t size ; 66 size = `obex_g‘_­·¿m ( os , & bufãr ); 67 ià( size < 0) 68 size = 0; 70 mns -> š·¿ms = `g_obex_­·¿m_decode ( bufãr , size ); 71 ià( mns -> š·¿ms =ð NULL ) { 72 `DBG ("Error when…arsing…arameters!"); 73  - EBADR ; 77 } } 79  $»£t_»que¡ ( mns_£ssiÚ * mns ) 81 ià( mns -> bufãr ) { 82 `g_¡ršg_ä“ ( mns -> bufãr , TRUE ); 83 mns -> bufãr = NULL ; 86 ià( mns -> š·¿ms ) { 87 `g_obex_­·¿m_ä“ ( mns -> š·¿ms ); 88 mns -> š·¿ms = NULL ; 90 } } 92  $mns_£ssiÚ_ä“ ( mns_£ssiÚ * mns ) 94 `»£t_»que¡ ( mns ); 96 ià( mns -> »mÙe_add»ss ) 97 `g_ä“ ( mns -> »mÙe_add»ss ); 99 `g_ä“ ( mns ); 100 } } 102 * $mns_cÚÃù ( obex_£ssiÚ * os , * ”r ) 104  mns_£ssiÚ * mns ; 105 * add»ss ; 107 `mªag”_»gi¡”_£ssiÚ ( os ); 109 mns = `g_Ãw0 ( mns_£ssiÚ , 1); 111 ià( `obex_g‘³”Çme ( os , & add»ss ) == 0) { 112 mns -> »mÙe_add»ss = `g_¡rdup ( add»ss ); 113 `g_ä“ ( add»ss ); 116 `DBG ("MNS cÚÃùedØ%s", mns -> »mÙe_add»ss ); 118 ià( ”r ) 119 * ”r = 0; 121  mns ; 122 } } 124  $mns_discÚÃù ( obex_£ssiÚ * os , * u£r_d©a ) 126  mns_£ssiÚ * mns = u£r_d©a ; 128 `DBG ("MNS discÚÃùed from %s", mns -> »mÙe_add»ss ); 130 `mªag”_uÄegi¡”_£ssiÚ ( os ); 132 `mns_£ssiÚ_ä“ ( mns ); 133 } } 135  $mns_put ( obex_£ssiÚ * os , * u£r_d©a ) 137  mns_£ssiÚ * mns = u£r_d©a ; 138 cÚ¡ * ty³ = `obex_g‘_ty³ ( os ); 139 cÚ¡ * Çme = `obex_g‘_Çme ( os ); 140  »t ; 142 `DBG ("PUT:‚am% ty³ % mn %p", Çme , ty³ , mns ); 144 ià( ty³ =ð NULL ) 145  - EBADR ; 147 »t = `g‘_·¿ms ( os , mns ); 148 ià( »t < 0) 149  çžed ; 151 »t = `obex_put_¡»am_¡¬t ( os , Çme ); 152 ià( »t < 0) 153  çžed ; 157 çžed : 158 `»£t_»que¡ ( mns ); 160  »t ; 161 } } 163  $·r£_ev’t_»pÜt_ty³ ( m­_ev’t * ev’t , cÚ¡ * v®ue ) 165 ià(! `g_ascii_¡rÿ£cmp ( v®ue , "NewMessage")) 166 ev’t -> ty³ = MAP_ET_NEW_MESSAGE ; 167 ià(! `g_ascii_¡rÿ£cmp ( v®ue , "DeliverySuccess")) 168 ev’t -> ty³ = MAP_ET_DELIVERY_SUCCESS ; 169 ià(! `g_ascii_¡rÿ£cmp ( v®ue , "SendingSuccess")) 170 ev’t -> ty³ = MAP_ET_SENDING_SUCCESS ; 171 ià(! `g_ascii_¡rÿ£cmp ( v®ue , "DeliveryFailure")) 172 ev’t -> ty³ = MAP_ET_DELIVERY_FAILURE ; 173 ià(! `g_ascii_¡rÿ£cmp ( v®ue , "SendingFailure")) 174 ev’t -> ty³ = MAP_ET_SENDING_FAILURE ; 175 ià(! `g_ascii_¡rÿ£cmp ( v®ue , "MemoryFull")) 176 ev’t -> ty³ = MAP_ET_MEMORY_FULL ; 177 ià(! `g_ascii_¡rÿ£cmp ( v®ue , "MemoryAvailable")) 178 ev’t -> ty³ = MAP_ET_MEMORY_AVAILABLE ; 179 ià(! `g_ascii_¡rÿ£cmp ( v®ue , "MessageDeleted")) 180 ev’t -> ty³ = MAP_ET_MESSAGE_DELETED ; 181 ià(! `g_ascii_¡rÿ£cmp ( v®ue , "MessageShift")) 182 ev’t -> ty³ = MAP_ET_MESSAGE_SHIFT ; 183 } } 185  $·r£_ev’t_»pÜt_hªdË ( m­_ev’t * ev’t , 186 cÚ¡ * v®ue ) 188 ev’t -> hªdË = `¡¹ouÎ ( v®ue , NULL , 16); 189 } } 191  $·r£_ev’t_»pÜt_fÞd” ( m­_ev’t * ev’t , 192 cÚ¡ * v®ue ) 194 `g_ä“ ( ev’t -> fÞd” ); 196 ià( `g_¡r_has_´efix ( v®ue , "/")) 197 ev’t -> fÞd” = `g_¡rdup ( v®ue ); 199 ev’t -> fÞd” = `g_¡rcÚÿt ("/", v®ue , NULL ); 200 } } 202  $·r£_ev’t_»pÜt_Þd_fÞd” ( m­_ev’t * ev’t , 203 cÚ¡ * v®ue ) 205 `g_ä“ ( ev’t -> Þd_fÞd” ); 207 ià( `g_¡r_has_´efix ( v®ue , "/")) 208 ev’t -> Þd_fÞd” = `g_¡rdup ( v®ue ); 210 ev’t -> Þd_fÞd” = `g_¡rcÚÿt ("/", v®ue , NULL ); 211 } } 213  $·r£_ev’t_»pÜt_msg_ty³ ( m­_ev’t * ev’t , 214 cÚ¡ * v®ue ) 216 `g_ä“ ( ev’t -> msg_ty³ ); 217 ev’t -> msg_ty³ = `g_¡rdup ( v®ue ); 218 } } 220  $·r£_ev’t_»pÜt_d©e_time ( m­_ev’t * ev’t , 221 cÚ¡ * v®ue ) 223 `g_ä“ ( ev’t -> d©‘ime ); 224 ev’t -> d©‘ime = `g_¡rdup ( v®ue ); 225 } } 227  $·r£_ev’t_»pÜt_subjeù ( m­_ev’t * ev’t , 228 cÚ¡ * v®ue ) 230 `g_ä“ ( ev’t -> subjeù ); 231 ev’t -> subjeù = `g_¡rdup ( v®ue ); 232 } } 234  $·r£_ev’t_»pÜt_£nd”_Çme ( m­_ev’t * ev’t , 235 cÚ¡ * v®ue ) 237 `g_ä“ ( ev’t -> £nd”_Çme ); 238 ev’t -> £nd”_Çme = `g_¡rdup ( v®ue ); 239 } } 241  $·r£_ev’t_»pÜt_´iÜ™y ( m­_ev’t * ev’t , 242 cÚ¡ * v®ue ) 244 `g_ä“ ( ev’t -> ´iÜ™y ); 245 ev’t -> ´iÜ™y = `g_¡rdup ( v®ue ); 246 } } 248  sm­_ev’t_»pÜt_·r£r { 249 cÚ¡ * mÇme ; 250 (* mfunc è( m­_ev’t * mev’t , cÚ¡ * mv®ue ); 251 } gev’t_»pÜt_·r£rs [] = { 252 { "ty³", ·r£_ev’t_»pÜt_ty³ }, 253 { "hªdË", ·r£_ev’t_»pÜt_hªdË }, 254 { "fÞd”", ·r£_ev’t_»pÜt_fÞd” }, 255 { "Þd_fÞd”", ·r£_ev’t_»pÜt_Þd_fÞd” }, 256 { "msg_ty³", ·r£_ev’t_»pÜt_msg_ty³ }, 257 { "d©‘ime", ·r£_ev’t_»pÜt_d©e_time }, 258 { "subjeù", ·r£_ev’t_»pÜt_subjeù }, 259 { "£nd”_Çme", ·r£_ev’t_»pÜt_£nd”_Çme }, 260 { "´iÜ™y", ·r£_ev’t_»pÜt_´iÜ™y }, 264  $ev’t_»pÜt_–em’t ( GM¬kupP¬£CÚ‹xt * ùxt , 265 cÚ¡ * –em’t , cÚ¡ ** Çmes , 266 cÚ¡ ** v®ues , gpoš‹r u£r_d©a , 267 GE¼Ü ** g”r ) 269  m­_ev’t * ev’t = u£r_d©a ; 270 cÚ¡ * key ; 271  i ; 273 ià( `¡rÿ£cmp ("ev’t", –em’t ) != 0) 276  i = 0, key = Çmes [i]; key; key =‚ames[++i]) { 277  m­_ev’t_»pÜt_·r£r * ·r£r ; 279  ·r£r = ev’t_»pÜt_·r£rs ;…¬£¸&&…¬£r-> Çme ; 280 ·r£r ++) { 281 ià( `¡rÿ£cmp ( key , ·r£r -> Çme ) == 0) { 282 ià( v®ues [ i ]) 283 ·r£r -> `func ( ev’t , v®ues [ i ]); 288 } } 290 cÚ¡ GM¬kupP¬£r gev’t_»pÜt_·r£r = { 291 ev’t_»pÜt_–em’t , 292 NULL , 293 NULL , 294 NULL , 295 NULL 298  $m­_ev’t_ä“ ( m­_ev’t * ev’t ) 300 `g_ä“ ( ev’t -> fÞd” ); 301 `g_ä“ ( ev’t -> Þd_fÞd” ); 302 `g_ä“ ( ev’t -> msg_ty³ ); 303 `g_ä“ ( ev’t -> d©‘ime ); 304 `g_ä“ ( ev’t -> subjeù ); 305 `g_ä“ ( ev’t -> £nd”_Çme ); 306 `g_ä“ ( ev’t -> ´iÜ™y ); 307 `g_ä“ ( ev’t ); 308 } } 310 * $ev’t_»pÜt_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 311 * driv”_d©a , size_t * size , * ”r ) 313  mns_£ssiÚ * mns = driv”_d©a ; 315 `DBG (""); 317 `g_obex_­·¿m_g‘_ušt8 ( mns -> š·¿ms , MAP_AP_MASINSTANCEID , 318 & mns -> mas_š¡ªû_id ); 320 mns -> bufãr = `g_¡ršg_Ãw (""); 322 ià( ”r !ð NULL ) 323 * ”r = 0; 325  mns ; 326 } } 328  $ev’t_»pÜt_þo£ (* obj ) 330  mns_£ssiÚ * mns = obj ; 331 GM¬kupP¬£CÚ‹xt * ùxt ; 332  m­_ev’t * ev’t ; 334 `DBG (""); 336 ev’t = `g_Ãw0 ( m­_ev’t , 1); 337 ùxt = `g_m¬kup_·r£_cÚ‹xt_Ãw (& ev’t_»pÜt_·r£r , 0, ev’t , 338 NULL ); 339 `g_m¬kup_·r£_cÚ‹xt_·r£ ( ùxt , mns -> bufãr -> ¡r , mns->bufãr-> Ën , 340 NULL ); 341 `g_m¬kup_·r£_cÚ‹xt_ä“ ( ùxt ); 343 `m­_di¥©ch_ev’t ( mns -> mas_š¡ªû_id , mns-> »mÙe_add»ss , ev’t ); 344 `m­_ev’t_ä“ ( ev’t ); 346 `»£t_»que¡ ( mns ); 349 } } 351  ssize_t $ev’t_»pÜt_wr™e (* obj , cÚ¡ * buf , size_t couÁ ) 353  mns_£ssiÚ * mns = obj ; 355 `DBG (""); 357 `g_¡ršg_­³nd_Ën ( mns -> bufãr , buf , couÁ ); 358  couÁ ; 359 } } 361  obex_£rviû_driv” gmns = { 362 . Çme = "Message Notification server", 363 . g£rviû = OBEX_MNS , 364 . grg‘ = MNS_TARGET , 365 . grg‘_size = TARGET_SIZE , 366 . gcÚÃù = mns_cÚÃù , 367 . gput = mns_put , 368 . gdiscÚÃù = mns_discÚÃù , 371  obex_mime_ty³_driv” gmime_ev’t_»pÜt = { 372 . rg‘ = MNS_TARGET , 373 . grg‘_size = TARGET_SIZE , 374 . gmim‘y³ = "x-bt/MAP-event-report", 375 . gÝ’ = ev’t_»pÜt_Ý’ , 376 . gþo£ = ev’t_»pÜt_þo£ , 377 . gwr™e = ev’t_»pÜt_wr™e , 380  $mns_š™ () 382  ”r ; 384 ”r = `obex_mime_ty³_driv”_»gi¡” (& mime_ev’t_»pÜt ); 385 ià( ”r < 0) 386  çž_mime_ev’t ; 388 ”r = `obex_£rviû_driv”_»gi¡” (& mns ); 389 ià( ”r < 0) 390  çž_mns_»g ; 394 çž_mns_»g : 395 `obex_mime_ty³_driv”_uÄegi¡” (& mime_ev’t_»pÜt ); 396 çž_mime_ev’t : 397  ”r ; 398 } } 400  $mns_ex™ () 402 `obex_£rviû_driv”_uÄegi¡” (& mns ); 403 `obex_mime_ty³_driv”_uÄegi¡” (& mime_ev’t_»pÜt ); 404 } } 406 OBEX_PLUGIN_DEFINE ( mns , mns_š™ , mns_ex™ ) @obexd/client/opp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<”ºo.h > 29  ~ 31  ~"log.h " 33  ~"Œªsãr.h " 34  ~"£ssiÚ.h " 35  ~"driv”.h " 36  ~"Ýp.h " 38  #OPP_UUID "00001105-0000-1000-8000-00805f9b34fb" ) 39  #OPP_INTERFACE "Üg.bluez.obex.ObjeùPush1" ) 40  #ERROR_INTERFACE "Üg.bluez.obex.E¼Ü" ) 42  sÝp_d©a { 43  obc_£ssiÚ * m£ssiÚ ; 46  DBusCÚÃùiÚ * gcÚn = NULL ; 48  DBusMes§ge * $Ýp_£nd_fže ( DBusCÚÃùiÚ * cÚÃùiÚ , 49 DBusMes§ge * mes§ge , * u£r_d©a ) 51  Ýp_d©a * Ýp = u£r_d©a ; 52  obc_Œªsãr * Œªsãr ; 53 DBusMes§ge * »¶y ; 54 * fž’ame ; 55 * ba£Çme ; 56 GE¼Ü * ”r = NULL ; 57 #ifdeà __TIZEN_PATCH__ 58 * mim‘y³ = NULL ; 61 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 62 DBUS_TYPE_STRING , & fž’ame , 63 #ifdeà __TIZEN_PATCH__ 64 DBUS_TYPE_STRING , & mim‘y³ , 66 DBUS_TYPE_INVALID è=ð FALSE ) 67  `g_dbus_ü—‹_”rÜ ( mes§ge , 68 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 70 ba£Çme = `g_·th_g‘_ba£Çme ( fž’ame ); 72 #ifdeà __TIZEN_PATCH__ 73 Œªsãr = `obc_Œªsãr_put ( mim‘y³ , ba£Çme , fž’ame , NULL , 0, & ”r ); 75 Œªsãr = `obc_Œªsãr_put ( NULL , ba£Çme , fž’ame , NULL, 0, & ”r ); 78 `g_ä“ ( ba£Çme ); 80 ià( Œªsãr =ð NULL ) 81  çž ; 83 ià(! `obc_£ssiÚ_queue ( Ýp -> £ssiÚ , Œªsãr , NULL , NULL, & ”r )) 84  çž ; 86  `obc_Œªsãr_ü—‹_dbus_»¶y ( Œªsãr , mes§ge ); 88 çž : 89 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , 90 ERROR_INTERFACE ".Fažed", "%s", ”r -> mes§ge ); 91 `g_”rÜ_ä“ ( ”r ); 92  »¶y ; 93 } } 95  DBusMes§ge * $Ýp_puÎ_busšess_ÿrd ( DBusCÚÃùiÚ * cÚÃùiÚ , 96 DBusMes§ge * mes§ge , * u£r_d©a ) 98  Ýp_d©a * Ýp = u£r_d©a ; 99  obc_Œªsãr * puÎ ; 100 DBusMes§ge * »¶y ; 101 cÚ¡ * fž’ame = NULL ; 102 GE¼Ü * ”r = NULL ; 104 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 105 DBUS_TYPE_STRING , & fž’ame , 106 DBUS_TYPE_INVALID è=ð FALSE ) 107  `g_dbus_ü—‹_”rÜ ( mes§ge , 108 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 110 puÎ = `obc_Œªsãr_g‘ ("‹xt/x-vÿrd", NULL , fž’ame , & ”r ); 111 ià( puÎ =ð NULL ) 112  çž ; 114 ià(! `obc_£ssiÚ_queue ( Ýp -> £ssiÚ , puÎ , NULL , NULL, & ”r )) 115  çž ; 117  `obc_Œªsãr_ü—‹_dbus_»¶y ( puÎ , mes§ge ); 119 çž : 120 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , 121 ERROR_INTERFACE ".Fažed", "%s", ”r -> mes§ge ); 122 `g_”rÜ_ä“ ( ”r ); 123  »¶y ; 124 } } 126  DBusMes§ge * $Ýp_exchªge_busšess_ÿrds ( DBusCÚÃùiÚ * cÚÃùiÚ , 127 DBusMes§ge * mes§ge , * u£r_d©a ) 129  `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Fažed", NULL ); 130 } } 132 cÚ¡ GDBusM‘hodTabË gÝp_m‘hods [] = { 133 { GDBUS_METHOD ("SendFile", 134 #ifdeà __TIZEN_PATCH__ 135 GDBUS_ARGS ({ "sourcefile", "s" }, { "mimetype", "s" }), 137 GDBUS_ARGS ({ "sourcefile", "s" }), 139 GDBUS_ARGS ({ "transfer", "o" }, { "properties", "a{sv}" }), 140 Ýp_£nd_fže ) }, 141 { GDBUS_METHOD ("PullBusinessCard", 142 GDBUS_ARGS ({ "targetfile", "s" }), 143 GDBUS_ARGS ({ "transfer", "o" }, { "properties", "a{sv}" }), 144 Ýp_puÎ_busšess_ÿrd ) }, 145 { GDBUS_METHOD ("ExchangeBusinessCards", 146 GDBUS_ARGS ({ "clientfile", "s" }, { "targetfile", "s" }), 147 GDBUS_ARGS ({ "transfer", "o" }, { "properties", "a{sv}" }), 148 Ýp_exchªge_busšess_ÿrds ) }, 152  $Ýp_ä“ (* d©a ) 154  Ýp_d©a * Ýp = d©a ; 156 `obc_£ssiÚ_uÄef ( Ýp -> £ssiÚ ); 157 `g_ä“ ( Ýp ); 158 } } 160  $Ýp_´obe ( obc_£ssiÚ * £ssiÚ ) 162  Ýp_d©a * Ýp ; 163 cÚ¡ * ·th ; 165 ·th = `obc_£ssiÚ_g‘_·th ( £ssiÚ ); 167 `DBG ("%s", ·th ); 169 Ýp = `g_Œy_Ãw0 ( Ýp_d©a , 1); 170 ià(! Ýp ) 171  - ENOMEM ; 173 Ýp -> £ssiÚ = `obc_£ssiÚ_»f (session); 175 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚn , ·th , OPP_INTERFACE , Ýp_m‘hods , 176 NULL , NULL, Ýp , Ýp_ä“ )) { 177 `Ýp_ä“ ( Ýp ); 178  - ENOMEM ; 182 } } 184  $Ýp_»move ( obc_£ssiÚ * £ssiÚ ) 186 cÚ¡ * ·th = `obc_£ssiÚ_g‘_·th ( £ssiÚ ); 188 `DBG ("%s", ·th ); 190 `g_dbus_uÄegi¡”_š‹rçû ( cÚn , ·th , OPP_INTERFACE ); 191 } } 193  obc_driv” gÝp = { 194 . £rviû = "OPP", 195 . guuid = OPP_UUID , 196 . g´obe = Ýp_´obe , 197 . g»move = Ýp_»move 200  $Ýp_š™ () 202  ”r ; 204 `DBG (""); 206 cÚn = `dbus_bus_g‘ ( DBUS_BUS_SESSION , NULL ); 207 ià(! cÚn ) 208  - EIO ; 210 ”r = `obc_driv”_»gi¡” (& Ýp ); 211 ià( ”r < 0) { 212 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 213 cÚn = NULL ; 214  ”r ; 218 } } 220  $Ýp_ex™ () 222 `DBG (""); 224 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 225 cÚn = NULL ; 227 `obc_driv”_uÄegi¡” (& Ýp ); 228 } } @obexd/client/opp.h 24  Ýp_š™ (); 25  Ýp_ex™ (); @obexd/client/pbap.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<”ºo.h > 30  ~<¡ršg.h > 31  ~<¡dio.h > 32  ~ 33  ~ 35  ~ 36  ~ 37  ~ 39  ~"log.h " 41  ~"Œªsãr.h " 42  ~"£ssiÚ.h " 43  ~"driv”.h " 44  ~"pb­.h " 46  #OBEX_PBAP_UUID \ 47 "\x79\x61\x35\xF0\xF0\xC5\x11\xD8\x09\x66\x08\x00\x20\x0C\x9A\x66" ) 48  #OBEX_PBAP_UUID_LEN 16 ) 50  #FORMAT_VCARD21 0x0 ) 51  #FORMAT_VCARD30 0x1 ) 53  #ORDER_INDEXED 0x0 ) 54  #ORDER_ALPHANUMERIC 0x1 ) 55  #ORDER_PHONETIC 0x2 ) 57  #ATTRIB_NAME 0x0 ) 58  #ATTRIB_NUMBER 0x1 ) 59  #ATTRIB_SOUND 0x2 ) 61  #DEFAULT_COUNT 65535 ) 62  #DEFAULT_OFFSET 0 ) 64  #PULLPHONEBOOK 0x1 ) 65  #GETPHONEBOOKSIZE 0x2 ) 67  #ORDER_TAG 0x01 ) 68  #SEARCHVALUE_TAG 0x02 ) 69  #SEARCHATTRIB_TAG 0x03 ) 70  #MAXLISTCOUNT_TAG 0x04 ) 71  #LISTSTARTOFFSET_TAG 0x05 ) 72  #FILTER_TAG 0x06 ) 73  #FORMAT_TAG 0X07 ) 74  #PHONEBOOKSIZE_TAG 0X08 ) 75  #NEWMISSEDCALLS_TAG 0X09 ) 76  #PRIMARY_COUNTER_TAG 0X0A ) 77  #SECONDARY_COUNTER_TAG 0X0B ) 78  #DATABASEID_TAG 0X0D ) 79  #SUPPORTED_FEATURES_TAG 0x10 ) 81  #DOWNLOAD_FEATURE 0x00000001 ) 82  #BROWSE_FEATURE 0x00000002 ) 83  #DATABASEID_FEATURE 0x00000004 ) 84  #FOLDER_VERSION_FEATURE 0x00000008 ) 85  #VCARD_SELECTING_FEATURE 0x00000010 ) 86  #ENHANCED_CALLS_FEATURE 0x00000020 ) 87  #UCI_FEATURE 0x00000040 ) 88  #UID_FEATURE 0x00000080 ) 89  #REFERENCING_FEATURE 0x00000100 ) 90  #DEFAULT_IMAGE_FEATURE 0x00000200 ) 92 cÚ¡ * gfž‹r_li¡ [] = { 125 NULL 128  #FILTER_BIT_MAX 63 ) 129  #FILTER_ALL 0xFFFFFFFFFFFFFFFFULL ) 131  #PBAP_INTERFACE "Üg.bluez.obex.PhÚebookAcûss1" ) 132  #ERROR_INTERFACE "Üg.bluez.obex.E¼Ü" ) 133  #PBAP_UUID "0000112f-0000-1000-8000-00805f9b34fb" ) 135  spb­_d©a { 136  obc_£ssiÚ * m£ssiÚ ; 137 * m·th ; 138 ušt16_t mv”siÚ ; 139 ušt32_t msuµÜ‹d_ã©u»s ; 140 ušt8_t md©aba£id [16]; 141 ušt8_t m´im¬y [16]; 142 ušt8_t m£cÚd¬y [16]; 145  s³ndšg_»que¡ { 146  pb­_d©a * mpb­ ; 147 DBusMes§ge * mmsg ; 150  DBusCÚÃùiÚ * gcÚn = NULL ; 152  ³ndšg_»que¡ * $³ndšg_»que¡_Ãw ( pb­_d©a * pb­ , 153 DBusMes§ge * mes§ge ) 155  ³ndšg_»que¡ * p ; 157 p = `g_Ãw0 ( ³ndšg_»que¡ , 1); 158 p -> pb­ =…bap; 159 p -> msg = `dbus_mes§ge_»f ( mes§ge ); 161  p ; 162 } } 164  $³ndšg_»que¡_ä“ ( ³ndšg_»que¡ * p ) 166 `dbus_mes§ge_uÄef ( p -> msg ); 167 `g_ä“ ( p ); 168 } } 170  $li¡šg_–em’t ( GM¬kupP¬£CÚ‹xt * ùxt , 171 cÚ¡ * –em’t , 172 cÚ¡ ** Çmes , 173 cÚ¡ ** v®ues , 174 gpoš‹r u£r_d©a , 175 GE¼Ü ** g”r ) 177 DBusMes§geI‹r * ™em = u£r_d©a , ’Œy ; 178 ** key ; 179 cÚ¡ * hªdË = NULL , * vÿrdÇme = NULL; 181 ià( `g_¡r_equ® ( –em’t , "ÿrd"è!ð TRUE ) 184  key = (**è Çmes ; *key; key++, v®ues ++) { 185 ià( `g_¡r_equ® (* key , "hªdË"è=ð TRUE ) 186 hªdË = * v®ues ; 187 ià( `g_¡r_equ® (* key , "Çme"è=ð TRUE ) 188 vÿrdÇme = * v®ues ; 191 ià(! hªdË || ! vÿrdÇme ) 194 `dbus_mes§ge_™”_Ý’_cÚš” ( ™em , DBUS_TYPE_STRUCT , NULL , & ’Œy ); 195 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & hªdË ); 196 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & vÿrdÇme ); 197 `dbus_mes§ge_™”_þo£_cÚš” ( ™em , & ’Œy ); 198 } } 200 cÚ¡ GM¬kupP¬£r gli¡šg_·r£r = { 201 li¡šg_–em’t , 202 NULL , 203 NULL , 204 NULL , 205 NULL 208 * $bužd_phÚebook_·th (cÚ¡ * loÿtiÚ , cÚ¡ * ™em ) 210 * ·th = NULL , * tmp , * tmp1 ; 211 gboÞ—n š‹º® = FALSE ; 213 ià(! `g_ascii_¡rÿ£cmp ( loÿtiÚ , "int") || 214 ! `g_ascii_¡rÿ£cmp ( loÿtiÚ , "internal")) { 215 ·th = `g_¡rdup ("/telecom"); 216 š‹º® = TRUE ; 217 } ià(! `g_ascii_¡ºÿ£cmp ( loÿtiÚ , "sim", 3)) { 218 ià( `¡¾’ ( loÿtiÚ ) == 3) 219 tmp = `g_¡rdup ("sim1"); 221 tmp = `g_ascii_¡rup ( loÿtiÚ , 4); 223 ·th = `g_bužd_fž’ame ("/", tmp , "‹Ëcom", NULL ); 224 `g_ä“ ( tmp ); 226  NULL ; 228 ià(! `g_ascii_¡rÿ£cmp ( ™em , "pb") || 229 ! `g_ascii_¡rÿ£cmp ( ™em , "ich") || 230 ! `g_ascii_¡rÿ£cmp ( ™em , "och") || 231 ! `g_ascii_¡rÿ£cmp ( ™em , "mch") || 232 ! `g_ascii_¡rÿ£cmp ( ™em , "cch") || 233 ( š‹º® && ! `g_ascii_¡rÿ£cmp ( ™em , "spd")) || 234 ( š‹º® && ! `g_ascii_¡rÿ£cmp ( ™em , "fav"))) { 235 tmp = ·th ; 236 tmp1 = `g_ascii_¡rdown ( ™em , -1); 237 ·th = `g_bužd_fž’ame ( tmp , tmp1 , NULL ); 238 `g_ä“ ( tmp ); 239 `g_ä“ ( tmp1 ); 241 `g_ä“ ( ·th ); 242  NULL ; 245  ·th ; 246 } } 249  $pb­_»£t_·th ( pb­_d©a * pb­ ) 251 ià(! pb­ -> ·th ) 254 `obc_£ssiÚ_£©h ( pb­ -> £ssiÚ ,…b­-> ·th , NULL , NULL, NULL); 255 } } 257  $pb­_£©h_cb ( obc_£ssiÚ * £ssiÚ , 258  obc_Œªsãr * Œªsãr , 259 GE¼Ü * ”r , * u£r_d©a ) 261  ³ndšg_»que¡ * »que¡ = u£r_d©a ; 262  pb­_d©a * pb­ = »que¡ ->pbap; 264 ià( ”r !ð NULL ) 265 `pb­_»£t_·th ( pb­ ); 267 `g_dbus_em™_´Ý”ty_chªged ( cÚn , 268 `obc_£ssiÚ_g‘_·th ( pb­ -> £ssiÚ ), 269 PBAP_INTERFACE , "Folder"); 271 ià( ”r ) { 272 DBusMes§ge * »¶y = `g_dbus_ü—‹_”rÜ ( »que¡ -> msg , 273 ERROR_INTERFACE ".Failed", 274 "%s", ”r -> mes§ge ); 275 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 277 `g_dbus_£nd_»¶y ( cÚn , »que¡ -> msg , DBUS_TYPE_INVALID ); 279 `³ndšg_»que¡_ä“ ( »que¡ ); 280 } } 282  $»ad_v”siÚ ( pb­_d©a * pb­ , GObexAµ¬am * ­·¿m ) 284 cÚ¡ gušt8 * d©a ; 285 ušt8_t v®ue [16]; 286 gsize Ën ; 288 ià(!( pb­ -> suµÜ‹d_ã©u»s & FOLDER_VERSION_FEATURE )) 291 ià(! `g_obex_­·¿m_g‘_by‹s ( ­·¿m , PRIMARY_COUNTER_TAG , & d©a , 292 & Ën )) { 293 Ën = ( v®ue ); 294 `mem£t ( v®ue , 0, Ën ); 295 d©a = v®ue ; 298 ià( `memcmp ( pb­ -> ´im¬y , d©a , Ën )) { 299 `memýy ( pb­ -> ´im¬y , d©a , Ën ); 300 `g_dbus_em™_´Ý”ty_chªged ( cÚn , 301 `obc_£ssiÚ_g‘_·th ( pb­ -> £ssiÚ ), 302 PBAP_INTERFACE , "PrimaryCounter"); 305 ià(! `g_obex_­·¿m_g‘_by‹s ( ­·¿m , SECONDARY_COUNTER_TAG , & d©a , 306 & Ën )) { 307 Ën = ( v®ue ); 308 `mem£t ( v®ue , 0, Ën ); 309 d©a = v®ue ; 312 ià( `memcmp ( pb­ -> £cÚd¬y , d©a , Ën )) { 313 `memýy ( pb­ -> £cÚd¬y , d©a , Ën ); 314 `g_dbus_em™_´Ý”ty_chªged ( cÚn , 315 `obc_£ssiÚ_g‘_·th ( pb­ -> £ssiÚ ), 316 PBAP_INTERFACE , "SecondaryCounter"); 318 } } 320  $»ad_d©aba£id ( pb­_d©a * pb­ , GObexAµ¬am * ­·¿m ) 322 cÚ¡ gušt8 * d©a ; 323 gušt8 v®ue [16]; 324 gsize Ën ; 326 ià(!( pb­ -> suµÜ‹d_ã©u»s & DATABASEID_FEATURE )) 329 ià(! `g_obex_­·¿m_g‘_by‹s ( ­·¿m , DATABASEID_TAG , & d©a , & Ën )) { 330 Ën = ( v®ue ); 331 `mem£t ( v®ue , 0, Ën ); 332 d©a = v®ue ; 335 ià( `memcmp ( d©a , pb­ -> d©aba£id , Ën )) { 336 `memýy ( pb­ -> d©aba£id , d©a , Ën ); 337 `g_dbus_em™_´Ý”ty_chªged ( cÚn , 338 `obc_£ssiÚ_g‘_·th ( pb­ -> £ssiÚ ), 339 PBAP_INTERFACE , "DatabaseIdentifier"); 341 } } 343  $»ad_»tuº_­·¿m ( obc_Œªsãr * Œªsãr , 344  pb­_d©a * pb­ , 345 gušt16 * phÚe_book_size , 346 gušt8 * Ãw_mis£d_ÿÎs ) 348 GObexAµ¬am * ­·¿m ; 350 * phÚe_book_size = 0; 351 * Ãw_mis£d_ÿÎs = 0; 353 ­·¿m = `obc_Œªsãr_g‘_­·¿m ( Œªsãr ); 354 ià( ­·¿m =ð NULL ) 357 `g_obex_­·¿m_g‘_ušt16 ( ­·¿m , PHONEBOOKSIZE_TAG , 358 phÚe_book_size ); 359 `g_obex_­·¿m_g‘_ušt8 ( ­·¿m , NEWMISSEDCALLS_TAG , 360 Ãw_mis£d_ÿÎs ); 362 `»ad_v”siÚ ( pb­ , ­·¿m ); 363 `»ad_d©aba£id ( pb­ , ­·¿m ); 364 } } 366  $phÚebook_size_ÿÎback ( obc_£ssiÚ * £ssiÚ , 367  obc_Œªsãr * Œªsãr , 368 GE¼Ü * ”r , * u£r_d©a ) 370  ³ndšg_»que¡ * »que¡ = u£r_d©a ; 371 DBusMes§ge * »¶y ; 372 gušt16 phÚe_book_size ; 373 gušt8 Ãw_mis£d_ÿÎs ; 375 ià( ”r ) { 376 »¶y = `g_dbus_ü—‹_”rÜ ( »que¡ -> msg , 377 ERROR_INTERFACE ".Failed", 378 "%s", ”r -> mes§ge ); 379  £nd ; 382 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( »que¡ -> msg ); 384 `»ad_»tuº_­·¿m ( Œªsãr , »que¡ -> pb­ , & phÚe_book_size , 385 & Ãw_mis£d_ÿÎs ); 387 ià( `dbus_mes§ge_is_m‘hod_ÿÎ ( »que¡ -> msg , PBAP_INTERFACE , 389 `dbus_mes§ge_­³nd_¬gs ( »¶y , 390 DBUS_TYPE_UINT16 , & phÚe_book_size , 391 DBUS_TYPE_INVALID ); 393 £nd : 394 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 395 `³ndšg_»que¡_ä“ ( »que¡ ); 396 } } 398  $puÎ_vÿrd_li¡šg_ÿÎback ( obc_£ssiÚ * £ssiÚ , 399  obc_Œªsãr * Œªsãr , 400 GE¼Ü * ”r , * u£r_d©a ) 402  ³ndšg_»que¡ * »que¡ = u£r_d©a ; 403 GM¬kupP¬£CÚ‹xt * ùxt ; 404 DBusMes§ge * »¶y ; 405 DBusMes§geI‹r ™” , ¬¿y ; 406 * cÚ‹Ás ; 407 size_t size ; 408  ³¼ ; 410 ià( ”r ) { 411 »¶y = `g_dbus_ü—‹_”rÜ ( »que¡ -> msg , 412 ERROR_INTERFACE ".Failed", 413 "%s", ”r -> mes§ge ); 414  £nd ; 417 ³¼ = `obc_Œªsãr_g‘_cÚ‹Ás ( Œªsãr , & cÚ‹Ás , & size ); 418 ià( ³¼ < 0) { 419 »¶y = `g_dbus_ü—‹_”rÜ ( »que¡ -> msg , 420 ERROR_INTERFACE ".Failed", 422 `¡»¼Ü (- ³¼ )); 423  £nd ; 426 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( »que¡ -> msg ); 428 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 429 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 430 DBUS_STRUCT_BEGIN_CHAR_AS_STRING 431 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_STRING_AS_STRING 432 DBUS_STRUCT_END_CHAR_AS_STRING , & ¬¿y ); 433 ùxt = `g_m¬kup_·r£_cÚ‹xt_Ãw (& li¡šg_·r£r , 0, & ¬¿y , NULL ); 434 `g_m¬kup_·r£_cÚ‹xt_·r£ ( ùxt , cÚ‹Ás , size , NULL ); 435 `g_m¬kup_·r£_cÚ‹xt_ä“ ( ùxt ); 436 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & ¬¿y ); 437 `g_ä“ ( cÚ‹Ás ); 439 £nd : 440 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 441 `³ndšg_»que¡_ä“ ( »que¡ ); 442 } } 444  GObexAµ¬am * $·r£_fÜm© ( GObexAµ¬am * ­·¿m , DBusMes§geI‹r * ™” ) 446 cÚ¡ * ¡ršg ; 447 gušt8 fÜm© ; 449 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) 450  NULL ; 452 `dbus_mes§ge_™”_g‘_basic ( ™” , & ¡ršg ); 454 ià(! ¡ršg || `g_¡r_equ® (string, "")) 455 fÜm© = FORMAT_VCARD21 ; 456 ià(! `g_ascii_¡rÿ£cmp ( ¡ršg , "vcard21")) 457 fÜm© = FORMAT_VCARD21 ; 458 ià(! `g_ascii_¡rÿ£cmp ( ¡ršg , "vcard30")) 459 fÜm© = FORMAT_VCARD30 ; 461  NULL ; 463  `g_obex_­·¿m_£t_ušt8 ( ­·¿m , FORMAT_TAG , fÜm© ); 464 } } 466  GObexAµ¬am * $·r£_Üd” ( GObexAµ¬am * ­·¿m , DBusMes§geI‹r * ™” ) 468 cÚ¡ * ¡ršg ; 469 gušt8 Üd” ; 471 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) 472  NULL ; 474 `dbus_mes§ge_™”_g‘_basic ( ™” , & ¡ršg ); 476 ià(! ¡ršg || `g_¡r_equ® (string, "")) 477 Üd” = ORDER_INDEXED ; 478 ià(! `g_ascii_¡rÿ£cmp ( ¡ršg , "indexed")) 479 Üd” = ORDER_INDEXED ; 480 ià(! `g_ascii_¡rÿ£cmp ( ¡ršg , "alphanumeric")) 481 Üd” = ORDER_ALPHANUMERIC ; 482 ià(! `g_ascii_¡rÿ£cmp ( ¡ršg , "phonetic")) 483 Üd” = ORDER_PHONETIC ; 485  NULL ; 487  `g_obex_­·¿m_£t_ušt8 ( ­·¿m , ORDER_TAG , Üd” ); 488 } } 490  GObexAµ¬am * $·r£_off£t ( GObexAµ¬am * ­·¿m , DBusMes§geI‹r * ™” ) 492 gušt16 num ; 494 #ifdeà __TIZEN_PATCH__ 495 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_UINT16 && 496 `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_UINT32 ) 497  NULL ; 499 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_UINT16 ) 500  NULL ; 503 `dbus_mes§ge_™”_g‘_basic ( ™” , & num ); 505  `g_obex_­·¿m_£t_ušt16 ( ­·¿m , LISTSTARTOFFSET_TAG , num ); 506 } } 508  GObexAµ¬am * $·r£_max_couÁ ( GObexAµ¬am * ­·¿m , 509 DBusMes§geI‹r * ™” ) 511 gušt16 num ; 513 #ifdeà __TIZEN_PATCH__ 514 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_UINT16 && 515 `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_UINT32 ) 516  NULL ; 518 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_UINT16 ) 519  NULL ; 522 `dbus_mes§ge_™”_g‘_basic ( ™” , & num ); 524  `g_obex_­·¿m_£t_ušt16 ( ­·¿m , MAXLISTCOUNT_TAG , num ); 525 } } 527  ušt64_t $g‘_fž‹r_mask (cÚ¡ * fž‹r¡r ) 529  i , b™ = -1; 531 ià(! fž‹r¡r ) 534 ià(! `g_ascii_¡rÿ£cmp ( fž‹r¡r , "ALL")) 535  FILTER_ALL ; 537  i = 0; fž‹r_li¡ [i] !ð NULL ; i++) 538 ià(! `g_ascii_¡rÿ£cmp ( fž‹r¡r , fž‹r_li¡ [ i ])) 539  1ULL << i ; 541 ià( `¡¾’ ( fž‹r¡r ) < 4 || strlen(filterstr) > 5 542 || `g_ascii_¡ºÿ£cmp ( fž‹r¡r , "bit", 3) != 0) 545 `ssÿnf (& fž‹r¡r [3], "%d", & b™ ); 546 ià( b™ >ð0 && b™ <ð FILTER_BIT_MAX ) 547  1ULL << b™ ; 550 } } 552  $£t_f›ld ( gušt64 * fž‹r , cÚ¡ * fž‹r¡r ) 554 gušt64 mask ; 556 mask = `g‘_fž‹r_mask ( fž‹r¡r ); 558 ià( mask == 0) 559  - EINVAL ; 561 * fž‹r |ð mask ; 563 } } 565  GObexAµ¬am * $·r£_f›lds ( GObexAµ¬am * ­·¿m , DBusMes§geI‹r * ™” ) 567 DBusMes§geI‹r ¬¿y ; 568 gušt64 fž‹r = 0; 570 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY ) 571  NULL ; 573 `dbus_mes§ge_™”_»cur£ ( ™” , & ¬¿y ); 575  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y è=ð DBUS_TYPE_STRING ) { 576 cÚ¡ * ¡ršg ; 578 `dbus_mes§ge_™”_g‘_basic (& ¬¿y , & ¡ršg ); 580 ià( `£t_f›ld (& fž‹r , ¡ršg ) < 0) 581  NULL ; 583 `dbus_mes§ge_™”_Ãxt (& ¬¿y ); 586  `g_obex_­·¿m_£t_ušt64 ( ­·¿m , FILTER_TAG , fž‹r ); 587 } } 589  GObexAµ¬am * $·r£_fž‹rs ( GObexAµ¬am * ­·¿m , 590 DBusMes§geI‹r * ™” ) 592 DBusMes§geI‹r ¬¿y ; 594 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY ) 595  NULL ; 597 `dbus_mes§ge_™”_»cur£ ( ™” , & ¬¿y ); 599  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y è=ð DBUS_TYPE_DICT_ENTRY ) { 600 cÚ¡ * key ; 601 DBusMes§geI‹r v®ue , ’Œy ; 603 `dbus_mes§ge_™”_»cur£ (& ¬¿y , & ’Œy ); 604 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & key ); 606 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 607 `dbus_mes§ge_™”_»cur£ (& ’Œy , & v®ue ); 609 ià( `¡rÿ£cmp ( key , "Format") == 0) { 610 ià( `·r£_fÜm© ( ­·¿m , & v®ue è=ð NULL ) 611  NULL ; 612 } ià( `¡rÿ£cmp ( key , "Order") == 0) { 613 ià( `·r£_Üd” ( ­·¿m , & v®ue è=ð NULL ) 614  NULL ; 615 } ià( `¡rÿ£cmp ( key , "Offset") == 0) { 616 ià( `·r£_off£t ( ­·¿m , & v®ue è=ð NULL ) 617  NULL ; 618 } ià( `¡rÿ£cmp ( key , "MaxCount") == 0) { 619 ià( `·r£_max_couÁ ( ­·¿m , & v®ue è=ð NULL ) 620  NULL ; 621 } ià( `¡rÿ£cmp ( key , "Fields") == 0) { 622 ià( `·r£_f›lds ( ­·¿m , & v®ue è=ð NULL ) 623  NULL ; 626 `dbus_mes§ge_™”_Ãxt (& ¬¿y ); 629  ­·¿m ; 630 } } 632  DBusMes§ge * $puÎ_phÚebook ( pb­_d©a * pb­ , 633 DBusMes§ge * mes§ge , 634 gušt8 ty³ , 635 cÚ¡ * rg‘fže , 636 GObexAµ¬am * ­·¿m ) 638  ³ndšg_»que¡ * »que¡ ; 639  obc_Œªsãr * Œªsãr ; 640 * Çme ; 641 £ssiÚ_ÿÎback_t func ; 642 DBusMes§ge * »¶y ; 643 GE¼Ü * ”r = NULL ; 645 Çme = `g_¡rcÚÿt ( `g_·th_sk_roÙ ( pb­ -> ·th ), ".vcf", NULL ); 647 Œªsãr = `obc_Œªsãr_g‘ ("x-bt/phÚebook", Çme , rg‘fže , & ”r ); 648 ià( Œªsãr =ð NULL ) { 649 `g_obex_­·¿m_ä“ ( ­·¿m ); 650  çž ; 653  ty³ ) { 654  PULLPHONEBOOK : 655 func = NULL ; 656 »que¡ = NULL ; 658  GETPHONEBOOKSIZE : 659 func = phÚebook_size_ÿÎback ; 660 »que¡ = `³ndšg_»que¡_Ãw ( pb­ , mes§ge ); 663 `”rÜ ("UÃx³ùedy³ : 0x%2x", ty³ ); 664  NULL ; 667 `obc_Œªsãr_£t_­·¿m ( Œªsãr , ­·¿m ); 669 ià(! `obc_£ssiÚ_queue ( pb­ -> £ssiÚ , Œªsãr , func , »que¡ , & ”r )) { 670 ià( »que¡ !ð NULL ) 671 `³ndšg_»que¡_ä“ ( »que¡ ); 673  çž ; 676 `g_ä“ ( Çme ); 678 ià( rg‘fže =ð NULL ) 679  NULL ; 681  `obc_Œªsãr_ü—‹_dbus_»¶y ( Œªsãr , mes§ge ); 683 çž : 684 `g_ä“ ( Çme ); 685 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", "%s", 686 ”r -> mes§ge ); 687 `g_”rÜ_ä“ ( ”r ); 688  »¶y ; 689 } } 691  DBusMes§ge * $puÎ_vÿrd_li¡šg ( pb­_d©a * pb­ , 692 DBusMes§ge * mes§ge , cÚ¡ * Çme , 693 GObexAµ¬am * ­·¿m ) 695  ³ndšg_»que¡ * »que¡ ; 696  obc_Œªsãr * Œªsãr ; 697 GE¼Ü * ”r = NULL ; 698 DBusMes§ge * »¶y ; 700 Œªsãr = `obc_Œªsãr_g‘ ("x-bt/vÿrd-li¡šg", Çme , NULL , & ”r ); 701 ià( Œªsãr =ð NULL ) { 702 `g_obex_­·¿m_ä“ ( ­·¿m ); 703  çž ; 706 `obc_Œªsãr_£t_­·¿m ( Œªsãr , ­·¿m ); 708 »que¡ = `³ndšg_»que¡_Ãw ( pb­ , mes§ge ); 709 ià( `obc_£ssiÚ_queue ( pb­ -> £ssiÚ , Œªsãr , 710 puÎ_vÿrd_li¡šg_ÿÎback , »que¡ , & ”r )) 711  NULL ; 713 `³ndšg_»que¡_ä“ ( »que¡ ); 715 çž : 716 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", "%s", 717 ”r -> mes§ge ); 718 `g_”rÜ_ä“ ( ”r ); 719  »¶y ; 720 } } 722  DBusMes§ge * $pb­_£Ëù ( DBusCÚÃùiÚ * cÚÃùiÚ , 723 DBusMes§ge * mes§ge , * u£r_d©a ) 725  pb­_d©a * pb­ = u£r_d©a ; 726 cÚ¡ * ™em , * loÿtiÚ ; 727 * ·th ; 728  ³ndšg_»que¡ * »que¡ ; 729 GE¼Ü * ”r = NULL ; 731 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 732 DBUS_TYPE_STRING , & loÿtiÚ , 733 DBUS_TYPE_STRING , & ™em , 734 DBUS_TYPE_INVALID è=ð FALSE ) 735  `g_dbus_ü—‹_”rÜ ( mes§ge , 736 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 738 ·th = `bužd_phÚebook_·th ( loÿtiÚ , ™em ); 739 ià( ·th =ð NULL ) 740  `g_dbus_ü—‹_”rÜ ( mes§ge , 741 ERROR_INTERFACE ".InvalidArguments", 744 ià( pb­ -> ·th !ð NULL && `g_¡r_equ® (pbap->path,…ath)) { 745 `g_ä“ ( ·th ); 746  `dbus_mes§ge_Ãw_m‘hod_»tuº ( mes§ge ); 749 »que¡ = `³ndšg_»que¡_Ãw ( pb­ , mes§ge ); 751 `obc_£ssiÚ_£©h ( pb­ -> £ssiÚ , ·th , pb­_£©h_cb , »que¡ , 752 & ”r ); 753 ià( ”r !ð NULL ) { 754 DBusMes§ge * »¶y ; 755 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", 756 "%s", ”r -> mes§ge ); 757 `g_”rÜ_ä“ ( ”r ); 758 `g_ä“ ( ·th ); 759 `³ndšg_»que¡_ä“ ( »que¡ ); 760  »¶y ; 763 `g_ä“ ( pb­ -> ·th ); 764 pb­ -> ·th =…ath; 766  NULL ; 767 } } 769  DBusMes§ge * $pb­_puÎ_®l ( DBusCÚÃùiÚ * cÚÃùiÚ , 770 DBusMes§ge * mes§ge , * u£r_d©a ) 772  pb­_d©a * pb­ = u£r_d©a ; 773 cÚ¡ * rg‘fže ; 774 GObexAµ¬am * ­·¿m ; 775 DBusMes§geI‹r ¬gs ; 777 ià(! pb­ -> ·th ) 778  `g_dbus_ü—‹_”rÜ ( mes§ge , 779 ERROR_INTERFACE ".Forbidden", 782 `dbus_mes§ge_™”_š™ ( mes§ge , & ¬gs ); 784 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬gs è!ð DBUS_TYPE_STRING ) 785  `g_dbus_ü—‹_”rÜ ( mes§ge , 786 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 788 `dbus_mes§ge_™”_g‘_basic (& ¬gs , & rg‘fže ); 789 `dbus_mes§ge_™”_Ãxt (& ¬gs ); 791 ­·¿m = `g_obex_­·¿m_£t_ušt16 ( NULL , MAXLISTCOUNT_TAG , 792 DEFAULT_COUNT ); 793 ­·¿m = `g_obex_­·¿m_£t_ušt16 ×µ¬am, LISTSTARTOFFSET_TAG , 794 DEFAULT_OFFSET ); 796 ià( `·r£_fž‹rs ( ­·¿m , & ¬gs è=ð NULL ) { 797 `g_obex_­·¿m_ä“ ( ­·¿m ); 798  `g_dbus_ü—‹_”rÜ ( mes§ge , 799 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 802  `puÎ_phÚebook ( pb­ , mes§ge , PULLPHONEBOOK , rg‘fže , 803 ­·¿m ); 804 } } 806  DBusMes§ge * $puÎ_vÿrd ( pb­_d©a * pb­ , DBusMes§ge * mes§ge , 807 cÚ¡ * Çme , cÚ¡ * rg‘fže , 808 GObexAµ¬am * ­·¿m ) 810  obc_Œªsãr * Œªsãr ; 811 DBusMes§ge * »¶y ; 812 GE¼Ü * ”r = NULL ; 814 Œªsãr = `obc_Œªsãr_g‘ ("x-bt/vÿrd", Çme , rg‘fže , & ”r ); 815 ià( Œªsãr =ð NULL ) { 816 `g_obex_­·¿m_ä“ ( ­·¿m ); 817  çž ; 820 `obc_Œªsãr_£t_­·¿m ( Œªsãr , ­·¿m ); 822 ià(! `obc_£ssiÚ_queue ( pb­ -> £ssiÚ , Œªsãr , NULL , NULL, & ”r )) 823  çž ; 825  `obc_Œªsãr_ü—‹_dbus_»¶y ( Œªsãr , mes§ge ); 827 çž : 828 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", "%s", 829 ”r -> mes§ge ); 830 `g_”rÜ_ä“ ( ”r ); 831  »¶y ; 832 } } 834  DBusMes§ge * $pb­_puÎ_vÿrd ( DBusCÚÃùiÚ * cÚÃùiÚ , 835 DBusMes§ge * mes§ge , * u£r_d©a ) 837  pb­_d©a * pb­ = u£r_d©a ; 838 GObexAµ¬am * ­·¿m ; 839 cÚ¡ * Çme , * rg‘fže ; 840 DBusMes§geI‹r ¬gs ; 842 ià(! pb­ -> ·th ) 843  `g_dbus_ü—‹_”rÜ ( mes§ge , 844 ERROR_INTERFACE ".Forbidden", 847 `dbus_mes§ge_™”_š™ ( mes§ge , & ¬gs ); 849 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬gs è!ð DBUS_TYPE_STRING ) 850  `g_dbus_ü—‹_”rÜ ( mes§ge , 851 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 853 `dbus_mes§ge_™”_g‘_basic (& ¬gs , & Çme ); 854 `dbus_mes§ge_™”_Ãxt (& ¬gs ); 856 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬gs è!ð DBUS_TYPE_STRING ) 857  `g_dbus_ü—‹_”rÜ ( mes§ge , 858 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 860 `dbus_mes§ge_™”_g‘_basic (& ¬gs , & rg‘fže ); 861 `dbus_mes§ge_™”_Ãxt (& ¬gs ); 863 ­·¿m = `g_obex_­·¿m_£t_ušt16 ( NULL , MAXLISTCOUNT_TAG , 864 DEFAULT_COUNT ); 865 ­·¿m = `g_obex_­·¿m_£t_ušt16 ×µ¬am, LISTSTARTOFFSET_TAG , 866 DEFAULT_OFFSET ); 868 ià( `·r£_fž‹rs ( ­·¿m , & ¬gs è=ð NULL ) { 869 `g_obex_­·¿m_ä“ ( ­·¿m ); 870  `g_dbus_ü—‹_”rÜ ( mes§ge , 871 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 874  `puÎ_vÿrd ( pb­ , mes§ge , Çme , rg‘fže , ­·¿m ); 875 } } 877  DBusMes§ge * $pb­_li¡ ( DBusCÚÃùiÚ * cÚÃùiÚ , 878 DBusMes§ge * mes§ge , * u£r_d©a ) 880  pb­_d©a * pb­ = u£r_d©a ; 881 GObexAµ¬am * ­·¿m ; 882 DBusMes§geI‹r ¬gs ; 884 ià(! pb­ -> ·th ) 885  `g_dbus_ü—‹_”rÜ ( mes§ge , 886 ERROR_INTERFACE ".Forbidden", 889 `dbus_mes§ge_™”_š™ ( mes§ge , & ¬gs ); 891 ­·¿m = `g_obex_­·¿m_£t_ušt16 ( NULL , MAXLISTCOUNT_TAG , 892 DEFAULT_COUNT ); 893 ­·¿m = `g_obex_­·¿m_£t_ušt16 ×µ¬am, LISTSTARTOFFSET_TAG , 894 DEFAULT_OFFSET ); 896 ià( `·r£_fž‹rs ( ­·¿m , & ¬gs è=ð NULL ) { 897 `g_obex_­·¿m_ä“ ( ­·¿m ); 898  `g_dbus_ü—‹_”rÜ ( mes§ge , 899 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 902  `puÎ_vÿrd_li¡šg ( pb­ , mes§ge , "", ­·¿m ); 903 } } 905  GObexAµ¬am * $·r£_©Œibu‹ ( GObexAµ¬am * ­·¿m , cÚ¡ * f›ld ) 907 gušt8 ©Œib ; 909 ià(! f›ld || `g_¡r_equ® (field, "")) 910 ©Œib = ATTRIB_NAME ; 911 ià(! `g_ascii_¡rÿ£cmp ( f›ld , "name")) 912 ©Œib = ATTRIB_NAME ; 913 ià(! `g_ascii_¡rÿ£cmp ( f›ld , "number")) 914 ©Œib = ATTRIB_NUMBER ; 915 ià(! `g_ascii_¡rÿ£cmp ( f›ld , "sound")) 916 ©Œib = ATTRIB_SOUND ; 918  NULL ; 920  `g_obex_­·¿m_£t_ušt8 ( ­·¿m , SEARCHATTRIB_TAG , ©Œib ); 921 } } 923  DBusMes§ge * $pb­_£¬ch ( DBusCÚÃùiÚ * cÚÃùiÚ , 924 DBusMes§ge * mes§ge , * u£r_d©a ) 926  pb­_d©a * pb­ = u£r_d©a ; 927 * f›ld , * v®ue ; 928 GObexAµ¬am * ­·¿m ; 929 DBusMes§geI‹r ¬gs ; 931 ià(! pb­ -> ·th ) 932  `g_dbus_ü—‹_”rÜ ( mes§ge , 933 ERROR_INTERFACE ".Forbidden", 936 `dbus_mes§ge_™”_š™ ( mes§ge , & ¬gs ); 938 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬gs è!ð DBUS_TYPE_STRING ) 939  `g_dbus_ü—‹_”rÜ ( mes§ge , 940 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 942 `dbus_mes§ge_™”_g‘_basic (& ¬gs , & f›ld ); 943 `dbus_mes§ge_™”_Ãxt (& ¬gs ); 945 ­·¿m = `·r£_©Œibu‹ ( NULL , f›ld ); 946 ià( ­·¿m =ð NULL ) 947  `g_dbus_ü—‹_”rÜ ( mes§ge , 948 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 950 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬gs è!ð DBUS_TYPE_STRING ) 951  `g_dbus_ü—‹_”rÜ ( mes§ge , 952 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 954 `dbus_mes§ge_™”_g‘_basic (& ¬gs , & v®ue ); 955 `dbus_mes§ge_™”_Ãxt (& ¬gs ); 957 ­·¿m = `g_obex_­·¿m_£t_ušt16 ×µ¬am, MAXLISTCOUNT_TAG , 958 DEFAULT_COUNT ); 959 ­·¿m = `g_obex_­·¿m_£t_ušt16 ×µ¬am, LISTSTARTOFFSET_TAG , 960 DEFAULT_OFFSET ); 961 ­·¿m = `g_obex_­·¿m_£t_¡ršg ×µ¬am, SEARCHVALUE_TAG , v®ue ); 963 ià( `·r£_fž‹rs ( ­·¿m , & ¬gs è=ð NULL ) { 964 `g_obex_­·¿m_ä“ ( ­·¿m ); 965  `g_dbus_ü—‹_”rÜ ( mes§ge , 966 ERROR_INTERFACE ".Inv®idArgum’ts", NULL ); 969  `puÎ_vÿrd_li¡šg ( pb­ , mes§ge , "", ­·¿m ); 970 } } 972  DBusMes§ge * $pb­_g‘_size ( DBusCÚÃùiÚ * cÚÃùiÚ , 973 DBusMes§ge * mes§ge , * u£r_d©a ) 975  pb­_d©a * pb­ = u£r_d©a ; 976 GObexAµ¬am * ­·¿m ; 977 DBusMes§geI‹r ¬gs ; 979 ià(! pb­ -> ·th ) 980  `g_dbus_ü—‹_”rÜ ( mes§ge , 981 ERROR_INTERFACE ".Forbidden", 984 `dbus_mes§ge_™”_š™ ( mes§ge , & ¬gs ); 986 ­·¿m = `g_obex_­·¿m_£t_ušt16 ( NULL , MAXLISTCOUNT_TAG , 0); 987 ­·¿m = `g_obex_­·¿m_£t_ušt16 ×µ¬am, LISTSTARTOFFSET_TAG , 988 DEFAULT_OFFSET ); 990  `puÎ_phÚebook ( pb­ , mes§ge , GETPHONEBOOKSIZE , NULL , ­·¿m ); 991 } } 993 ** $g‘_fž‹r_¡rs ( ušt64_t fž‹r , * size ) 995 ** li¡ , ** ™em ; 996  i ; 998 li¡ = `g_m®loc0 ((**è* ( FILTER_BIT_MAX + 2)); 1000 ™em = li¡ ; 1002  i = 0; fž‹r_li¡ [i] !ð NULL ; i++) 1003 ià( fž‹r & (1ULL << i )) 1004 *( ™em ++èð `g_¡rdup ( fž‹r_li¡ [ i ]); 1006 ; i <ð FILTER_BIT_MAX ; i++) 1007 ià( fž‹r & (1ULL << i )) 1008 *( ™em ++èð `g_¡rdup_´štf ("%s%d", "BIT", i ); 1010 * ™em = NULL ; 1011 * size = ™em - li¡ ; 1012  li¡ ; 1013 } } 1015  DBusMes§ge * $pb­_li¡_fž‹r_f›lds ( DBusCÚÃùiÚ * cÚÃùiÚ , 1016 DBusMes§ge * mes§ge , * u£r_d©a ) 1018 ** fž‹rs = NULL ; 1019  size ; 1020 DBusMes§ge * »¶y ; 1022 fž‹rs = `g‘_fž‹r_¡rs ( FILTER_ALL , & size ); 1023 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( mes§ge ); 1024 `dbus_mes§ge_­³nd_¬gs ( »¶y , DBUS_TYPE_ARRAY , 1025 DBUS_TYPE_STRING , & fž‹rs , size , 1026 DBUS_TYPE_INVALID ); 1028 `g_¡rä“v ( fž‹rs ); 1029  »¶y ; 1030 } } 1032  DBusMes§ge * $pb­_upd©e_v”siÚ ( DBusCÚÃùiÚ * cÚÃùiÚ , 1033 DBusMes§ge * mes§ge , * u£r_d©a ) 1035  pb­_d©a * pb­ = u£r_d©a ; 1037 ià(!( pb­ -> suµÜ‹d_ã©u»s & FOLDER_VERSION_FEATURE )) 1038  `g_dbus_ü—‹_”rÜ ( mes§ge , 1039 ERROR_INTERFACE ".NotSupported", 1042  `pb­_g‘_size ( cÚÃùiÚ , mes§ge , u£r_d©a ); 1043 } } 1045 cÚ¡ GDBusM‘hodTabË gpb­_m‘hods [] = { 1046 { GDBUS_ASYNC_METHOD ("Select", 1047 GDBUS_ARGS ({ "location", "s" }, { "phonebook", "s" }), 1048 NULL , pb­_£Ëù ) }, 1049 { GDBUS_METHOD ("PullAll", 1050 GDBUS_ARGS ({ "targetfile", "s" }, 1052 GDBUS_ARGS ({ "transfer", "o" }, 1054 pb­_puÎ_®l ) }, 1055 { GDBUS_METHOD ("Pull", 1056 GDBUS_ARGS ({ "vcard", "s" }, { "targetfile", "s" }, 1058 GDBUS_ARGS ({ "transfer", "o" }, 1060 pb­_puÎ_vÿrd ) }, 1061 { GDBUS_ASYNC_METHOD ("List", 1062 GDBUS_ARGS ({ "filters", "a{sv}" }), 1063 GDBUS_ARGS ({ "vcard_listing", "a(ss)" }), 1064 pb­_li¡ ) }, 1065 { GDBUS_ASYNC_METHOD ("Search", 1066 GDBUS_ARGS ({ "field", "s" }, { "value", "s" }, 1068 GDBUS_ARGS ({ "vcard_listing", "a(ss)" }), 1069 pb­_£¬ch ) }, 1070 { GDBUS_ASYNC_METHOD ("GetSize", 1071 NULL , GDBUS_ARGS ({ "size", "q" }), 1072 pb­_g‘_size ) }, 1073 { GDBUS_METHOD ("ListFilterFields", 1074 NULL , GDBUS_ARGS ({ "fields", "as" }), 1075 pb­_li¡_fž‹r_f›lds ) }, 1076 { GDBUS_ASYNC_METHOD ("Upd©eV”siÚ", NULL , NULL, 1077 pb­_upd©e_v”siÚ ) }, 1081  gboÞ—n $fÞd”_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 1083  pb­_d©a * pb­ = d©a ; 1085  pb­ -> ·th !ð NULL ; 1086 } } 1088  gboÞ—n $g‘_fÞd” (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1089 DBusMes§geI‹r * ™” , * d©a ) 1091  pb­_d©a * pb­ = d©a ; 1093 ià(! pb­ -> ·th ) 1094  FALSE ; 1096 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & pb­ -> ·th ); 1098  TRUE ; 1099 } } 1101  gboÞ—n $d©aba£id_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1102 * d©a ) 1104  pb­_d©a * pb­ = d©a ; 1106  pb­ -> suµÜ‹d_ã©u»s & DATABASEID_FEATURE ; 1107 } } 1109  $u128_to_¡ršg ( ušt8_t * d©a , * ¡r , size_t Ën ) 1111  `¢´štf ( ¡r , Ën , "%02X%02X%02X%02X%02X%02X%02X%02X" 1113 d©a [0], data[1], data[2], data[3], 1114 d©a [3], data[5], data[6], data[7], 1115 d©a [8], data[9], data[10], data[11], 1116 d©a [12], data[13], data[14], data[15]); 1117 } } 1119  gboÞ—n $g‘_d©aba£id (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1120 DBusMes§geI‹r * ™” , * d©a ) 1122  pb­_d©a * pb­ = d©a ; 1123  v®ue [33]; 1124 cÚ¡ * pv®ue = v®ue ; 1126 ià( `u128_to_¡ršg ( pb­ -> d©aba£id , v®ue , (value)) < 0) 1127  FALSE ; 1129 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & pv®ue ); 1131  TRUE ; 1132 } } 1134  gboÞ—n $v”siÚ_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1135 * d©a ) 1137  pb­_d©a * pb­ = d©a ; 1139  pb­ -> suµÜ‹d_ã©u»s & FOLDER_VERSION_FEATURE ; 1140 } } 1142  gboÞ—n $g‘_´im¬y (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1143 DBusMes§geI‹r * ™” , * d©a ) 1145  pb­_d©a * pb­ = d©a ; 1146  v®ue [33]; 1147 cÚ¡ * pv®ue = v®ue ; 1149 ià( `u128_to_¡ršg ( pb­ -> ´im¬y , v®ue , (value)) < 0) 1150  FALSE ; 1152 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & pv®ue ); 1154  TRUE ; 1155 } } 1157  gboÞ—n $g‘_£cÚd¬y (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1158 DBusMes§geI‹r * ™” , * d©a ) 1160  pb­_d©a * pb­ = d©a ; 1161  v®ue [33]; 1162 cÚ¡ * pv®ue = v®ue ; 1164 ià( `u128_to_¡ršg ( pb­ -> £cÚd¬y , v®ue , (value)) < 0) 1165  FALSE ; 1167 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & pv®ue ); 1169  TRUE ; 1170 } } 1172  gboÞ—n $image_size_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1173 * d©a ) 1175  pb­_d©a * pb­ = d©a ; 1177  pb­ -> suµÜ‹d_ã©u»s & DEFAULT_IMAGE_FEATURE ; 1178 } } 1180  gboÞ—n $g‘_image_size (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1181 DBusMes§geI‹r * ™” , * d©a ) 1183 dbus_boÞ_t v®ue = TRUE ; 1185 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v®ue ); 1187  TRUE ; 1188 } } 1190 cÚ¡ GDBusPrÝ”tyTabË gpb­_´Ý”t›s [] = { 1191 { "FÞd”", "s", g‘_fÞd” , NULL , fÞd”_exi¡s }, 1192 { "D©aba£Id’tif›r", "s", g‘_d©aba£id , NULL , d©aba£id_exi¡s }, 1193 { "Prim¬yCouÁ”", "s", g‘_´im¬y , NULL , v”siÚ_exi¡s }, 1194 { "SecÚd¬yCouÁ”", "s", g‘_£cÚd¬y , NULL , v”siÚ_exi¡s }, 1195 { "FixedImageSize", "b", g‘_image_size , NULL , image_size_exi¡s }, 1199  $pb­_ä“ (* d©a ) 1201  pb­_d©a * pb­ = d©a ; 1203 `obc_£ssiÚ_uÄef ( pb­ -> £ssiÚ ); 1204 `g_ä“ ( pb­ -> ·th ); 1205 `g_ä“ ( pb­ ); 1206 } } 1208  $·r£_£rviû_»cÜd ( pb­_d©a * pb­ ) 1210 cÚ¡ * d©a ; 1213 d©a = `obc_£ssiÚ_g‘_©Œibu‹ ( pb­ -> £ssiÚ , 1214 SDP_ATTR_PFILE_DESC_LIST ); 1215 ià(! d©a ) 1218 pb­ -> v”siÚ = `GPOINTER_TO_UINT ( d©a ); 1224 pb­ -> suµÜ‹d_ã©u»s = 0x00000003; 1226 ià( pb­ -> v”siÚ < 0x0102) 1230 d©a = `obc_£ssiÚ_g‘_©Œibu‹ ( pb­ -> £ssiÚ , 1231 SDP_ATTR_PBAP_SUPPORTED_FEATURES ); 1232 ià( d©a ) 1233 pb­ -> suµÜ‹d_ã©u»s = *( ušt32_t *è d©a ; 1235 } } 1237 * $pb­_suµÜ‹d_ã©u»s ( obc_£ssiÚ * £ssiÚ ) 1239 cÚ¡ * d©a ; 1240 ušt16_t v”siÚ ; 1243 d©a = `obc_£ssiÚ_g‘_©Œibu‹ ( £ssiÚ , SDP_ATTR_PFILE_DESC_LIST ); 1244 ià(! d©a ) 1245  NULL ; 1247 v”siÚ = `GPOINTER_TO_UINT ( d©a ); 1249 ià( v”siÚ < 0x0102) 1250  NULL ; 1253 d©a = `obc_£ssiÚ_g‘_©Œibu‹ ( £ssiÚ , 1254 SDP_ATTR_PBAP_SUPPORTED_FEATURES ); 1255 ià(! d©a ) 1256  NULL ; 1258  `g_obex_­·¿m_£t_ušt32 ( NULL , SUPPORTED_FEATURES_TAG , 1259 DOWNLOAD_FEATURE | 1260 BROWSE_FEATURE | 1261 DATABASEID_FEATURE | 1262 FOLDER_VERSION_FEATURE | 1263 VCARD_SELECTING_FEATURE | 1264 ENHANCED_CALLS_FEATURE | 1265 UCI_FEATURE | 1266 UID_FEATURE | 1267 REFERENCING_FEATURE | 1268 DEFAULT_IMAGE_FEATURE ); 1269 } } 1271  $pb­_´obe ( obc_£ssiÚ * £ssiÚ ) 1273  pb­_d©a * pb­ ; 1274 cÚ¡ * ·th ; 1276 ·th = `obc_£ssiÚ_g‘_·th ( £ssiÚ ); 1278 `DBG ("%s", ·th ); 1280 pb­ = `g_Œy_Ãw0 ( pb­_d©a , 1); 1281 ià(! pb­ ) 1282  - ENOMEM ; 1284 pb­ -> £ssiÚ = `obc_£ssiÚ_»f (session); 1286 `·r£_£rviû_»cÜd ( pb­ ); 1288 `DBG ("%s, v”siÚ 0x%04x suµÜ‹d f—tu» 0x%08x", ·th , pb­ -> v”siÚ , 1289 pb­ -> suµÜ‹d_ã©u»s ); 1291 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚn , ·th , PBAP_INTERFACE , pb­_m‘hods , 1292 NULL , pb­_´Ý”t›s , pb­ , 1293 pb­_ä“ )) { 1294 `pb­_ä“ ( pb­ ); 1295  - ENOMEM ; 1299 } } 1301  $pb­_»move ( obc_£ssiÚ * £ssiÚ ) 1303 cÚ¡ * ·th = `obc_£ssiÚ_g‘_·th ( £ssiÚ ); 1305 `DBG ("%s", ·th ); 1307 `g_dbus_uÄegi¡”_š‹rçû ( cÚn , ·th , PBAP_INTERFACE ); 1308 } } 1310  obc_driv” gpb­ = { 1311 . £rviû = "PBAP", 1312 . guuid = PBAP_UUID , 1313 . grg‘ = OBEX_PBAP_UUID , 1314 . grg‘_Ën = OBEX_PBAP_UUID_LEN , 1315 . gsuµÜ‹d_ã©u»s = pb­_suµÜ‹d_ã©u»s , 1316 . g´obe = pb­_´obe , 1317 . g»move = pb­_»move 1320  $pb­_š™ () 1322  ”r ; 1324 `DBG (""); 1326 cÚn = `dbus_bus_g‘ ( DBUS_BUS_SESSION , NULL ); 1327 ià(! cÚn ) 1328  - EIO ; 1330 ”r = `obc_driv”_»gi¡” (& pb­ ); 1331 ià( ”r < 0) { 1332 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 1333 cÚn = NULL ; 1334  ”r ; 1338 } } 1340  $pb­_ex™ () 1342 `DBG (""); 1344 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 1345 cÚn = NULL ; 1347 `obc_driv”_uÄegi¡” (& pb­ ); 1348 } } @obexd/client/pbap.h 25  pb­_š™ (); 26  pb­_ex™ (); @obexd/client/session.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dlib.h > 30  ~<¡dio.h > 31  ~<”ºo.h > 32  ~ 33  ~ 34  ~<¡ršg.h > 35  ~ 37  ~ 38  ~ 39  ~ 41  ~"dbus.h " 42  ~"log.h " 43  ~"Œªsãr.h " 44  ~"£ssiÚ.h " 45 #ifdeà __TIZEN_PATCH__ 46  ~"mªag”.h " 48  ~"driv”.h " 49  ~"Œª¥Üt.h " 51  #SESSION_INTERFACE "Üg.bluez.obex.SessiÚ1" ) 52  #ERROR_INTERFACE "Üg.bluez.obex.E¼Ü" ) 53  #SESSION_BASEPATH "/Üg/bluez/obex/þ›Á" ) 55  #OBEX_IO_ERROR `obex_io_”rÜ_qu¬k () ) 56  #OBEX_IO_ERROR_FIRST (0xfà+ 1) ) 59 mOBEX_IO_DISCONNECTED = OBEX_IO_ERROR_FIRST , 60 mOBEX_IO_BUSY , 63  gušt64 gcouÁ” = 0; 65  sÿÎback_d©a { 66  obc_£ssiÚ * m£ssiÚ ; 67 £ssiÚ_ÿÎback_t mfunc ; 68 * md©a ; 71  g³ndšg_»que¡ ; 72 (* t£ssiÚ_´oûss_t è( t³ndšg_»que¡ * tp , tGE¼Ü ** t”r ); 73 (* tde¡roy_t è(* td©a ); 75  s³ndšg_»que¡ { 76 gušt id ; 77 gušt »q_id ; 78  obc_£ssiÚ * £ssiÚ ; 79 £ssiÚ_´oûss_t ´oûss ; 80  obc_Œªsãr * Œªsãr ; 81 £ssiÚ_ÿÎback_t func ; 82 * d©a ; 83 de¡roy_t de¡roy ; 86  s£©h_d©a { 87 ** »maššg ; 88  šdex ; 89 £ssiÚ_ÿÎback_t func ; 90 * u£r_d©a ; 93  sfže_d©a { 94 * ¤úame ; 95 * de¡Çme ; 96 £ssiÚ_ÿÎback_t func ; 97 * u£r_d©a ; 100  sobc_£ssiÚ { 101 gušt id ; 102  »fcouÁ ; 103 * sourû ; 104 * de¡š©iÚ ; 105 ušt8_t chªÃl ; 106  obc_Œª¥Üt * Œª¥Üt ; 107  obc_driv” * driv” ; 108 * ·th ; 109 DBusCÚÃùiÚ * cÚn ; 110 GObex * obex ; 111  ³ndšg_»que¡ * p ; 112 * owÃr ; 113 gušt w©ch ; 114 GQueue * queue ; 115 gušt ´oûss_id ; 116 * fÞd” ; 119  GSLi¡ * £ssiÚs = NULL ; 121  `£ssiÚ_´oûss_queue ( obc_£ssiÚ * £ssiÚ ); 122  `£ssiÚ_‹rmš©e_Œªsãr ( obc_£ssiÚ * £ssiÚ , 123  obc_Œªsãr * Œªsãr , 124 GE¼Ü * g”r ); 125  `Œªsãr_com¶‘e ( obc_Œªsãr * Œªsãr , 126 GE¼Ü * ”r , * u£r_d©a ); 128  GQu¬k $obex_io_”rÜ_qu¬k () 130  `g_qu¬k_äom_¡©ic_¡ršg ("obex-io-error-quark"); 131 } } 133  obc_£ssiÚ * $obc_£ssiÚ_»f ( obc_£ssiÚ * £ssiÚ ) 135  »fs = `__sync_add_ªd_ãtch (& £ssiÚ -> »fcouÁ , 1); 137 `DBG ("%p:„ef=%d", £ssiÚ , »fs ); 139  £ssiÚ ; 140 } } 142  $£ssiÚ_uÄegi¡”ed ( obc_£ssiÚ * £ssiÚ ) 144 * ·th ; 146 ià( £ssiÚ -> driv” && sessiÚ->driv”-> »move ) 147 £ssiÚ -> driv” -> `»move (session); 149 ·th = £ssiÚ ->path; 150 £ssiÚ -> ·th = NULL ; 152 `g_dbus_uÄegi¡”_š‹rçû ( £ssiÚ -> cÚn , ·th , SESSION_INTERFACE ); 154 `DBG ("SessiÚ(%pèuÄegi¡”ed %s", £ssiÚ , ·th ); 156 `g_ä“ ( ·th ); 157 } } 159  ³ndšg_»que¡ * $³ndšg_»que¡_Ãw ( obc_£ssiÚ * £ssiÚ , 160 £ssiÚ_´oûss_t ´oûss , 161  obc_Œªsãr * Œªsãr , 162 £ssiÚ_ÿÎback_t func , 163 * d©a , 164 de¡roy_t de¡roy ) 166  ³ndšg_»que¡ * p ; 167  gušt id = 0; 169 p = `g_Ãw0 ( ³ndšg_»que¡ , 1); 170 p -> id = ++id; 171 p -> £ssiÚ = `obc_£ssiÚ_»f (session); 172 p -> ´oûss =…rocess; 173 p -> de¡roy = destroy; 174 p -> Œªsãr =ransfer; 175 p -> func = func; 176 p -> d©a = data; 178  p ; 179 } } 181  $³ndšg_»que¡_ä“ ( ³ndšg_»que¡ * p ) 183 ià( p -> »q_id > 0) 184 `g_obex_ÿnûl_»q ( p -> £ssiÚ -> obex ,…-> »q_id , TRUE ); 186 ià( p -> de¡roy ) 187 p -> `de¡roy Õ-> d©a ); 189 ià( p -> Œªsãr ) 190 `obc_Œªsãr_uÄegi¡” ( p -> Œªsãr ); 192 ià( p -> £ssiÚ ) 193 `obc_£ssiÚ_uÄef ( p -> £ssiÚ ); 195 `g_ä“ ( p ); 196 } } 198  $£©h_d©a_ä“ (* ´oûss_d©a ) 200  £©h_d©a * d©a = ´oûss_d©a ; 202 `g_¡rä“v ( d©a -> »maššg ); 203 `g_ä“ ( d©a ); 204 } } 206  $fže_d©a_ä“ (* ´oûss_d©a ) 208  fže_d©a * d©a = ´oûss_d©a ; 210 `g_ä“ ( d©a -> ¤úame ); 211 `g_ä“ ( d©a -> de¡Çme ); 212 `g_ä“ ( d©a ); 213 } } 215  $£ssiÚ_ä“ ( obc_£ssiÚ * £ssiÚ ) 217 `DBG ("%p", £ssiÚ ); 219 ià( £ssiÚ -> ´oûss_id != 0) 220 `g_sourû_»move ( £ssiÚ -> ´oûss_id ); 222 ià( £ssiÚ -> queue ) { 223 `g_queue_fÜ—ch ( £ssiÚ -> queue , ( GFunc è ³ndšg_»que¡_ä“ , 224 NULL ); 225 `g_queue_ä“ ( £ssiÚ -> queue ); 228 ià( £ssiÚ -> w©ch ) 229 `g_dbus_»move_w©ch ( £ssiÚ -> cÚn , sessiÚ-> w©ch ); 231 ià( £ssiÚ -> obex ) { 232 `g_obex_£t_discÚÃù_funùiÚ ( £ssiÚ -> obex , NULL , NULL); 233 `g_obex_uÄef ( £ssiÚ -> obex ); 236 ià( £ssiÚ -> id > 0 && sessiÚ-> Œª¥Üt !ð NULL ) 237 £ssiÚ -> Œª¥Üt -> `discÚÃù (£ssiÚ-> id ); 239 ià( £ssiÚ -> ·th ) 240 `£ssiÚ_uÄegi¡”ed ( £ssiÚ ); 242 ià( £ssiÚ -> cÚn ) 243 `dbus_cÚÃùiÚ_uÄef ( £ssiÚ -> cÚn ); 245 ià( £ssiÚ -> p ) 246 `³ndšg_»que¡_ä“ ( £ssiÚ -> p ); 248 `g_ä“ ( £ssiÚ -> ·th ); 249 `g_ä“ ( £ssiÚ -> owÃr ); 250 `g_ä“ ( £ssiÚ -> sourû ); 251 `g_ä“ ( £ssiÚ -> de¡š©iÚ ); 252 `g_ä“ ( £ssiÚ -> fÞd” ); 253 `g_ä“ ( £ssiÚ ); 254 } } 256  $discÚÃù_com¶‘e ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 257 * u£r_d©a ) 259  obc_£ssiÚ * £ssiÚ = u£r_d©a ; 261 `DBG (""); 263 ià( ”r ) 264 `”rÜ ("%s", ”r -> mes§ge ); 267 ià( £ssiÚ -> id > 0 && sessiÚ-> Œª¥Üt !ð NULL ) { 268 £ssiÚ -> Œª¥Üt -> `discÚÃù (£ssiÚ-> id ); 269 £ssiÚ -> id = 0; 272 `£ssiÚ_ä“ ( £ssiÚ ); 273 } } 275  $obc_£ssiÚ_uÄef ( obc_£ssiÚ * £ssiÚ ) 277  »fs ; 279 »fs = `__sync_sub_ªd_ãtch (& £ssiÚ -> »fcouÁ , 1); 281 `DBG ("%p:„ef=%d", £ssiÚ , »fs ); 283 ià( »fs > 0) 286 £ssiÚs = `g_¦i¡_»move (£ssiÚs, £ssiÚ ); 288 ià(! £ssiÚ -> obex ) 289  discÚÃù ; 294 ià( `g_obex_discÚÃù ( £ssiÚ -> obex , discÚÃù_com¶‘e , session, 295 NULL )) 298 discÚÃù : 300 ià( £ssiÚ -> id > 0 && sessiÚ-> Œª¥Üt !ð NULL ) { 301 £ssiÚ -> Œª¥Üt -> `discÚÃù (£ssiÚ-> id ); 302 £ssiÚ -> id = 0; 305 `£ssiÚ_ä“ ( £ssiÚ ); 306 } } 308  $cÚÃù_cb ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 309 gpoš‹r u£r_d©a ) 311  ÿÎback_d©a * ÿÎback = u£r_d©a ; 312 GE¼Ü * g”r = NULL ; 313 ušt8_t r¥_code ; 315 ià( ”r !ð NULL ) { 316 `”rÜ ("cÚÃù_cb: %s", ”r -> mes§ge ); 317 g”r = `g_”rÜ_cÝy ( ”r ); 318  dÚe ; 321 r¥_code = `g_obex_·ck‘_g‘_Ý”©iÚ ( r¥ , NULL ); 322 ià( r¥_code !ð G_OBEX_RSP_SUCCESS ) 323 g”r = `g_”rÜ_Ãw ( OBEX_IO_ERROR , - EIO , 324 "OBEX CÚÃù fažed w™h 0x%02x", r¥_code ); 326 dÚe : 327 ÿÎback -> `func (ÿÎback-> £ssiÚ , NULL , g”r , c®lback-> d©a ); 328 ià( g”r !ð NULL ) 329 `g_”rÜ_ä“ ( g”r ); 330 `obc_£ssiÚ_uÄef ( ÿÎback -> £ssiÚ ); 331 `g_ä“ ( ÿÎback ); 332 } } 334  $£ssiÚ_discÚÃùed ( GObex * obex , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 336  obc_£ssiÚ * £ssiÚ = u£r_d©a ; 338 ià( ”r ) 339 `”rÜ ("%s", ”r -> mes§ge ); 340 #ifdeà __TIZEN_PATCH__ 341 `»Ëa£_£ssiÚ ( £ssiÚ ); 343 `obc_£ssiÚ_shutdown ( £ssiÚ ); 345 } } 347  $Œª¥Üt_func ( GIOChªÃl * io , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 349  ÿÎback_d©a * ÿÎback = u£r_d©a ; 350  obc_£ssiÚ * £ssiÚ = ÿÎback ->session; 351  obc_driv” * driv” = £ssiÚ ->driver; 352  obc_Œª¥Üt * Œª¥Üt = £ssiÚ ->transport; 353 GObex * obex ; 354 GObexAµ¬am * ­·¿m ; 355 GObexT¿n¥ÜtTy³ ty³ ; 356  tx_mtu = -1; 357  rx_mtu = -1; 359 `DBG (""); 361 ià( ”r !ð NULL ) { 362 `”rÜ ("%s", ”r -> mes§ge ); 363  dÚe ; 366 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , FALSE ); 368 ià( Œª¥Üt -> g‘·ck‘Ýt && 369 Œª¥Üt -> `g‘·ck‘Ýt ( io , & tx_mtu , & rx_mtu ) == 0) 370 ty³ = G_OBEX_TRANSPORT_PACKET ; 372 ty³ = G_OBEX_TRANSPORT_STREAM ; 374 obex = `g_obex_Ãw ( io , ty³ , tx_mtu , rx_mtu ); 375 ià( obex =ð NULL ) 376  dÚe ; 378 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 380 ­·¿m = NULL ; 382 ià( driv” -> suµÜ‹d_ã©u»s ) 383 ­·¿m = driv” -> `suµÜ‹d_ã©u»s ( £ssiÚ ); 385 ià( ­·¿m ) { 386 ušt8_t buf [1024]; 387 ssize_t Ën ; 389 Ën = `g_obex_­·¿m_’code ( ­·¿m , buf , (buf)); 390 ià( driv” -> rg‘ ) 391 `g_obex_cÚÃù ( obex , cÚÃù_cb , ÿÎback , & ”r , 392 G_OBEX_HDR_TARGET , 393 driv” -> rg‘ , driv”-> rg‘_Ën , 394 G_OBEX_HDR_APPARAM , 395 buf , Ën , 396 G_OBEX_HDR_INVALID ); 398 `g_obex_cÚÃù ( obex , cÚÃù_cb , ÿÎback , & ”r , 399 G_OBEX_HDR_APPARAM , buf , Ën , 400 G_OBEX_HDR_INVALID ); 401 `g_obex_­·¿m_ä“ ( ­·¿m ); 402 } ià( driv” -> rg‘ ) 403 `g_obex_cÚÃù ( obex , cÚÃù_cb , ÿÎback , & ”r , 404 G_OBEX_HDR_TARGET , driv” -> rg‘ , driv”-> rg‘_Ën , 405 G_OBEX_HDR_INVALID ); 407 `g_obex_cÚÃù ( obex , cÚÃù_cb , ÿÎback , & ”r , 408 G_OBEX_HDR_INVALID ); 410 ià( ”r !ð NULL ) { 411 `”rÜ ("%s", ”r -> mes§ge ); 412 `g_obex_uÄef ( obex ); 413  dÚe ; 416 £ssiÚ -> obex = obex; 417 £ssiÚs = `g_¦i¡_´•’d (£ssiÚs, £ssiÚ ); 419 `g_obex_£t_discÚÃù_funùiÚ ( obex , £ssiÚ_discÚÃùed , £ssiÚ ); 422 dÚe : 423 ÿÎback -> `func (ÿÎback-> £ssiÚ , NULL , ”r , c®lback-> d©a ); 424 `obc_£ssiÚ_uÄef ( ÿÎback -> £ssiÚ ); 425 `g_ä“ ( ÿÎback ); 426 } } 428  $owÃr_discÚÃùed ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 430  obc_£ssiÚ * £ssiÚ = u£r_d©a ; 432 `DBG (""); 434 `obc_£ssiÚ_shutdown ( £ssiÚ ); 435 } } 437  $obc_£ssiÚ_£t_owÃr ( obc_£ssiÚ * £ssiÚ , cÚ¡ * Çme , 438 GDBusW©chFunùiÚ func ) 440 ià( £ssiÚ =ð NULL ) 441  - EINVAL ; 443 ià( £ssiÚ -> w©ch ) 444 `g_dbus_»move_w©ch ( £ssiÚ -> cÚn , sessiÚ-> w©ch ); 446 £ssiÚ -> w©ch = `g_dbus_add_discÚÃù_w©ch (£ssiÚ-> cÚn , Çme , func , 447 £ssiÚ , NULL ); 448 ià( £ssiÚ -> w©ch == 0) 449  - EINVAL ; 451 £ssiÚ -> owÃr = `g_¡rdup ( Çme ); 454 } } 457  obc_£ssiÚ * $£ssiÚ_fšd (cÚ¡ * sourû , 458 cÚ¡ * de¡š©iÚ , 459 cÚ¡ * £rviû , 460 ušt8_t chªÃl , 461 cÚ¡ * owÃr ) 463 GSLi¡ * l ; 465  l = £ssiÚs ;†;† =†-> Ãxt ) { 466  obc_£ssiÚ * £ssiÚ = l -> d©a ; 468 ià( `g_¡rcmp0 ( £ssiÚ -> de¡š©iÚ , destination)) 471 ià( `g_¡rcmp0 ( £rviû , £ssiÚ -> driv” ->service)) 474 ià( sourû && `g_¡rcmp0 ( £ssiÚ ->source, source)) 477 ià( chªÃl && £ssiÚ ->channel != channel) 480 ià( `g_¡rcmp0 ( owÃr , £ssiÚ ->owner)) 483  £ssiÚ ; 486  NULL ; 487 } } 489  gboÞ—n $cÚÃùiÚ_com¶‘e ( gpoš‹r d©a ) 491  ÿÎback_d©a * cb = d©a ; 493 cb -> `func (cb-> £ssiÚ , NULL , NULL, cb-> d©a ); 495 `obc_£ssiÚ_uÄef ( cb -> £ssiÚ ); 497 `g_ä“ ( cb ); 499  FALSE ; 500 } } 502  $£ssiÚ_cÚÃù ( obc_£ssiÚ * £ssiÚ , 503 £ssiÚ_ÿÎback_t funùiÚ , * u£r_d©a ) 505  ÿÎback_d©a * ÿÎback ; 506  obc_Œª¥Üt * Œª¥Üt = £ssiÚ ->transport; 507  obc_driv” * driv” = £ssiÚ ->driver; 509 ÿÎback = `g_Œy_m®loc0 ((*callback)); 510 ià( ÿÎback =ð NULL ) 511  - ENOMEM ; 513 ÿÎback -> func = funùiÚ ; 514 ÿÎback -> d©a = u£r_d©a ; 515 ÿÎback -> £ssiÚ = `obc_£ssiÚ_»f (session); 518 ià( £ssiÚ -> obex ) { 519 `g_idË_add ( cÚÃùiÚ_com¶‘e , ÿÎback ); 524 ià( £ssiÚ -> id > 0) { 525 `obc_£ssiÚ_uÄef ( ÿÎback -> £ssiÚ ); 526 `g_ä“ ( ÿÎback ); 530 £ssiÚ -> id = Œª¥Üt -> `cÚÃù (£ssiÚ-> sourû , sessiÚ-> de¡š©iÚ , 531 driv” -> uuid , £ssiÚ -> chªÃl , 532 Œª¥Üt_func , ÿÎback ); 533 ià( £ssiÚ -> id == 0) { 534 `obc_£ssiÚ_uÄef ( ÿÎback -> £ssiÚ ); 535 `g_ä“ ( ÿÎback ); 536  - EINVAL ; 540 } } 542  obc_£ssiÚ * $obc_£ssiÚ_ü—‹ (cÚ¡ * sourû , 543 cÚ¡ * de¡š©iÚ , 544 cÚ¡ * £rviû , 545 ušt8_t chªÃl , 546 cÚ¡ * owÃr , 547 £ssiÚ_ÿÎback_t funùiÚ , 548 * u£r_d©a ) 550 DBusCÚÃùiÚ * cÚn ; 551  obc_£ssiÚ * £ssiÚ ; 552  obc_Œª¥Üt * Œª¥Üt ; 553  obc_driv” * driv” ; 555 ià( de¡š©iÚ =ð NULL ) 556  NULL ; 558 £ssiÚ = `£ssiÚ_fšd ( sourû , de¡š©iÚ , £rviû , chªÃl , owÃr ); 559 ià( £ssiÚ !ð NULL ) 560  ´oûed ; 563 Œª¥Üt = `obc_Œª¥Üt_fšd ("Bluetooth"); 564 ià( Œª¥Üt =ð NULL ) 565  NULL ; 567 driv” = `obc_driv”_fšd ( £rviû ); 568 ià( driv” =ð NULL ) 569  NULL ; 571 cÚn = `dbus_bus_g‘ ( DBUS_BUS_SESSION , NULL ); 572 ià( cÚn =ð NULL ) 573  NULL ; 575 £ssiÚ = `g_Œy_m®loc0 ((*session)); 576 ià( £ssiÚ =ð NULL ) 577  NULL ; 579 £ssiÚ -> »fcouÁ = 1; 580 £ssiÚ -> Œª¥Üt =ransport; 581 £ssiÚ -> driv” = driver; 582 £ssiÚ -> cÚn = conn; 583 £ssiÚ -> sourû = `g_¡rdup (source); 584 £ssiÚ -> de¡š©iÚ = `g_¡rdup (destination); 585 £ssiÚ -> chªÃl = channel; 586 £ssiÚ -> queue = `g_queue_Ãw (); 587 £ssiÚ -> fÞd” = `g_¡rdup ("/"); 589 ià( owÃr ) 590 `obc_£ssiÚ_£t_owÃr ( £ssiÚ , owÃr , owÃr_discÚÃùed ); 592 ´oûed : 593 ià( `£ssiÚ_cÚÃù ( £ssiÚ , funùiÚ , u£r_d©a ) < 0) { 594 `obc_£ssiÚ_uÄef ( £ssiÚ ); 595  NULL ; 598 `DBG ("£ssiÚ %°Œª¥Üˆ% driv” %s", £ssiÚ , 599 £ssiÚ -> Œª¥Üt -> Çme , sessiÚ-> driv” -> £rviû ); 601  £ssiÚ ; 602 } } 604  $obc_£ssiÚ_shutdown ( obc_£ssiÚ * £ssiÚ ) 606  ³ndšg_»que¡ * p ; 607 GE¼Ü * ”r ; 609 `DBG ("%p", £ssiÚ ); 611 `obc_£ssiÚ_»f ( £ssiÚ ); 614 ”r = `g_”rÜ_Ãw ( OBEX_IO_ERROR , OBEX_IO_DISCONNECTED , 617 ià( £ssiÚ -> p !ð NULL && sessiÚ->p-> id != 0) { 618 p = £ssiÚ ->p; 619 £ssiÚ -> p = NULL ; 621 ià( p -> func ) 622 p -> `func ( £ssiÚ ,…-> Œªsãr , ”r ,…-> d©a ); 624 `³ndšg_»que¡_ä“ ( p ); 627 ( p = `g_queue_pÝ_h—d ( £ssiÚ -> queue ))) { 628 ià( p -> func ) 629 p -> `func ( £ssiÚ ,…-> Œªsãr , ”r ,…-> d©a ); 631 `³ndšg_»que¡_ä“ ( p ); 634 `g_”rÜ_ä“ ( ”r ); 637 ià( £ssiÚ -> ·th ) 638 `£ssiÚ_uÄegi¡”ed ( £ssiÚ ); 640 `obc_£ssiÚ_uÄef ( £ssiÚ ); 641 } } 643  $ÿ·bž™›s_com¶‘e_ÿÎback ( obc_£ssiÚ * £ssiÚ , 644  obc_Œªsãr * Œªsãr , 645 GE¼Ü * ”r , * u£r_d©a ) 647 DBusMes§ge * mes§ge = u£r_d©a ; 648 * cÚ‹Ás ; 649 size_t size ; 650  ³¼ ; 652 ià( ”r !ð NULL ) { 653 DBusMes§ge * ”rÜ = `g_dbus_ü—‹_”rÜ ( mes§ge , 654 ERROR_INTERFACE ".Failed", 655 "%s", ”r -> mes§ge ); 656 `g_dbus_£nd_mes§ge ( £ssiÚ -> cÚn , ”rÜ ); 657  dÚe ; 660 ³¼ = `obc_Œªsãr_g‘_cÚ‹Ás ( Œªsãr , & cÚ‹Ás , & size ); 661 ià( ³¼ < 0) { 662 DBusMes§ge * ”rÜ = `g_dbus_ü—‹_”rÜ ( mes§ge , 663 ERROR_INTERFACE ".Failed", 665 `¡»¼Ü (- ³¼ )); 666 `g_dbus_£nd_mes§ge ( £ssiÚ -> cÚn , ”rÜ ); 667  dÚe ; 670 `g_dbus_£nd_»¶y ( £ssiÚ -> cÚn , mes§ge , 671 DBUS_TYPE_STRING , & cÚ‹Ás , 672 DBUS_TYPE_INVALID ); 673 `g_ä“ ( cÚ‹Ás ); 675 dÚe : 676 `dbus_mes§ge_uÄef ( mes§ge ); 677 } } 679  DBusMes§ge * $g‘_ÿ·bž™›s ( DBusCÚÃùiÚ * cÚÃùiÚ , 680 DBusMes§ge * mes§ge , * u£r_d©a ) 682  obc_£ssiÚ * £ssiÚ = u£r_d©a ; 683  obc_Œªsãr * puÎ ; 684 DBusMes§ge * »¶y ; 685 GE¼Ü * g”r = NULL ; 687 puÎ = `obc_Œªsãr_g‘ ("x-obex/ÿ·bž™y", NULL , NULL, & g”r ); 688 ià( puÎ =ð NULL ) 689  çž ; 691 ià(! `obc_£ssiÚ_queue ( £ssiÚ , puÎ , ÿ·bž™›s_com¶‘e_ÿÎback , 692 mes§ge , & g”r )) 693  çž ; 695 `dbus_mes§ge_»f ( mes§ge ); 697  NULL ; 699 çž : 700 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INTERFACE ".Failed", "%s", 701 g”r -> mes§ge ); 702 `g_”rÜ_ä“ ( g”r ); 703  »¶y ; 705 } } 707  gboÞ—n $g‘_sourû (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 708 DBusMes§geI‹r * ™” , * d©a ) 710  obc_£ssiÚ * £ssiÚ = d©a ; 712 ià( £ssiÚ -> sourû =ð NULL ) 713  FALSE ; 715 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , 716 & £ssiÚ -> sourû ); 718  TRUE ; 719 } } 721  gboÞ—n $sourû_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 723  obc_£ssiÚ * £ssiÚ = d©a ; 725  £ssiÚ -> sourû !ð NULL ; 726 } } 728  gboÞ—n $g‘_de¡š©iÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 729 DBusMes§geI‹r * ™” , * d©a ) 731  obc_£ssiÚ * £ssiÚ = d©a ; 733 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , 734 & £ssiÚ -> de¡š©iÚ ); 736  TRUE ; 737 } } 739  gboÞ—n $g‘_chªÃl (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 740 DBusMes§geI‹r * ™” , * d©a ) 742  obc_£ssiÚ * £ssiÚ = d©a ; 744 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BYTE , 745 & £ssiÚ -> chªÃl ); 747  TRUE ; 748 } } 750 cÚ¡ GDBusM‘hodTabË g£ssiÚ_m‘hods [] = { 751 { GDBUS_ASYNC_METHOD ("GetCapabilities", 752 NULL , GDBUS_ARGS ({ "capabilities", "s" }), 753 g‘_ÿ·bž™›s ) }, 757  gboÞ—n $g‘_rg‘ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 758 DBusMes§geI‹r * ™” , * d©a ) 760  obc_£ssiÚ * £ssiÚ = d©a ; 762 ià( £ssiÚ -> driv” -> uuid =ð NULL ) 763  FALSE ; 765 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , 766 & £ssiÚ -> driv” -> uuid ); 768  TRUE ; 769 } } 771  gboÞ—n $rg‘_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 773  obc_£ssiÚ * £ssiÚ = d©a ; 775  £ssiÚ -> driv” -> uuid !ð NULL ; 776 } } 778 cÚ¡ GDBusPrÝ”tyTabË g£ssiÚ_´Ý”t›s [] = { 779 { "Sourû", "s", g‘_sourû , NULL , sourû_exi¡s }, 780 { "De¡š©iÚ", "s", g‘_de¡š©iÚ }, 781 { "ChªÃl", "y", g‘_chªÃl }, 782 { "T¬g‘", "s", g‘_rg‘ , NULL , rg‘_exi¡s }, 786  gboÞ—n $£ssiÚ_´oûss ( gpoš‹r d©a ) 788  obc_£ssiÚ * £ssiÚ = d©a ; 790 £ssiÚ -> ´oûss_id = 0; 792 `£ssiÚ_´oûss_queue ( £ssiÚ ); 794  FALSE ; 795 } } 797  $£ssiÚ_queue ( ³ndšg_»que¡ * p ) 799 `g_queue_push_ž ( p -> £ssiÚ -> queue ,…); 801 ià( p -> £ssiÚ -> ´oûss_id == 0) 802 p -> £ssiÚ -> ´oûss_id = `g_idË_add ( £ssiÚ_´oûss , 803 p -> £ssiÚ ); 804 } } 806  $£ssiÚ_´oûss_Œªsãr ( ³ndšg_»que¡ * p , GE¼Ü ** ”r ) 808 ià(! `obc_Œªsãr_¡¬t ( p -> Œªsãr ,…-> £ssiÚ -> obex , ”r )) 811 `DBG ("T¿nãr(%p衬‹d", p -> Œªsãr ); 812 p -> £ssiÚ ->p =…; 814 } } 816 gušt $obc_£ssiÚ_queue ( obc_£ssiÚ * £ssiÚ , 817  obc_Œªsãr * Œªsãr , 818 £ssiÚ_ÿÎback_t func , * u£r_d©a , 819 GE¼Ü ** ”r ) 821  ³ndšg_»que¡ * p ; 823 ià( £ssiÚ -> obex =ð NULL ) { 824 `obc_Œªsãr_uÄegi¡” ( Œªsãr ); 825 `g_£t_”rÜ ( ”r , OBEX_IO_ERROR , - ENOTCONN , 830 ià(! `obc_Œªsãr_»gi¡” ( Œªsãr , £ssiÚ -> cÚn , sessiÚ-> ·th , 831 £ssiÚ -> owÃr , ”r )) { 832 `obc_Œªsãr_uÄegi¡” ( Œªsãr ); 836 `obc_Œªsãr_£t_ÿÎback ( Œªsãr , Œªsãr_com¶‘e , £ssiÚ ); 838 p = `³ndšg_»que¡_Ãw ( £ssiÚ , £ssiÚ_´oûss_Œªsãr , Œªsãr , 839 func , u£r_d©a , NULL ); 840 `£ssiÚ_queue ( p ); 841  p -> id ; 842 } } 844  $£ssiÚ_´oûss_queue ( obc_£ssiÚ * £ssiÚ ) 846  ³ndšg_»que¡ * p ; 848 ià( £ssiÚ -> p !ð NULL ) 851 ià( £ssiÚ -> queue =ð NULL || `g_queue_is_em±y (session->queue)) 854 `obc_£ssiÚ_»f ( £ssiÚ ); 856 ( p = `g_queue_pÝ_h—d ( £ssiÚ -> queue ))) { 857 GE¼Ü * g”r = NULL ; 859 ià( p -> `´oûss Õ, & g”r ) == 0) 862 ià( p -> func ) 863 p -> `func ( £ssiÚ ,…-> Œªsãr , g”r ,…-> d©a ); 865 `g_þ—r_”rÜ (& g”r ); 867 `³ndšg_»que¡_ä“ ( p ); 870 `obc_£ssiÚ_uÄef ( £ssiÚ ); 871 } } 873  $³ndšg_Œªsãr_cm±¿nsãr ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 875 cÚ¡  ³ndšg_»que¡ * p = a ; 876 cÚ¡  obc_Œªsãr * Œªsãr = b ; 878 ià( p -> Œªsãr ==ransfer) 882 } } 884  $£ssiÚ_‹rmš©e_Œªsãr ( obc_£ssiÚ * £ssiÚ , 885  obc_Œªsãr * Œªsãr , 886 GE¼Ü * g”r ) 888  ³ndšg_»que¡ * p = £ssiÚ ->p; 890 ià( p =ð NULL ||…-> Œªsãr !=ransfer) { 891 GLi¡ * m©ch ; 893 m©ch = `g_li¡_fšd_cu¡om ( £ssiÚ -> queue -> h—d , Œªsãr , 894 ³ndšg_Œªsãr_cm±¿nsãr ); 895 ià( m©ch =ð NULL ) 898 p = m©ch -> d©a ; 899 `g_queue_d–‘e_lšk ( £ssiÚ -> queue , m©ch ); 901 £ssiÚ -> p = NULL ; 903 `obc_£ssiÚ_»f ( £ssiÚ ); 905 ià( p -> func ) 906 p -> `func ( £ssiÚ ,…-> Œªsãr , g”r ,…-> d©a ); 908 `³ndšg_»que¡_ä“ ( p ); 910 ià( £ssiÚ -> p =ð NULL ) 911 `£ssiÚ_´oûss_queue ( £ssiÚ ); 913 `obc_£ssiÚ_uÄef ( £ssiÚ ); 914 } } 916  $£ssiÚ_nÙify_com¶‘e ( obc_£ssiÚ * £ssiÚ , 917  obc_Œªsãr * Œªsãr ) 919 `DBG ("T¿nsãr(%pècom¶‘e", Œªsãr ); 921 `£ssiÚ_‹rmš©e_Œªsãr ( £ssiÚ , Œªsãr , NULL ); 922 } } 924  $£ssiÚ_nÙify_”rÜ ( obc_£ssiÚ * £ssiÚ , 925  obc_Œªsãr * Œªsãr , 926 GE¼Ü * ”r ) 928 `”rÜ ("T¿nsãr(%pèE¼Ü: %s", Œªsãr , ”r -> mes§ge ); 930 `£ssiÚ_‹rmš©e_Œªsãr ( £ssiÚ , Œªsãr , ”r ); 931 } } 933  $Œªsãr_com¶‘e ( obc_Œªsãr * Œªsãr , 934 GE¼Ü * ”r , * u£r_d©a ) 936  obc_£ssiÚ * £ssiÚ = u£r_d©a ; 938 ià( ”r != 0) 939  çž ; 941 `£ssiÚ_nÙify_com¶‘e ( £ssiÚ , Œªsãr ); 945 çž : 946 `£ssiÚ_nÙify_”rÜ ( £ssiÚ , Œªsãr , ”r ); 947 } } 949 cÚ¡ * $obc_£ssiÚ_»gi¡” ( obc_£ssiÚ * £ssiÚ , 950 GDBusDe¡royFunùiÚ de¡roy ) 952 ià( £ssiÚ -> ·th ) 953  £ssiÚ -> ·th ; 955 £ssiÚ -> ·th = `g_¡rdup_´štf ("%s/session%ju", 956 SESSION_BASEPATH , couÁ” ++); 958 ià( `g_dbus_»gi¡”_š‹rçû ( £ssiÚ -> cÚn , sessiÚ-> ·th , 959 SESSION_INTERFACE , £ssiÚ_m‘hods , 960 NULL , £ssiÚ_´Ý”t›s , £ssiÚ , 961 de¡roy è=ð FALSE ) 962  çž ; 964 ià( £ssiÚ -> driv” -> ´obe && sessiÚ->driv”-> `´obe (session) < 0) { 965 `g_dbus_uÄegi¡”_š‹rçû ( £ssiÚ -> cÚn , sessiÚ-> ·th , 966 SESSION_INTERFACE ); 967  çž ; 970 `DBG ("SessiÚ(%pè»gi¡”ed %s", £ssiÚ , sessiÚ-> ·th ); 972  £ssiÚ -> ·th ; 974 çž : 975 `g_ä“ ( £ssiÚ -> ·th ); 976 £ssiÚ -> ·th = NULL ; 977  NULL ; 978 } } 980 cÚ¡ * $obc_£ssiÚ_g‘_©Œibu‹ ( obc_£ssiÚ * £ssiÚ , 981  ©Œibu‹_id ) 983 ià( £ssiÚ =ð NULL || sessiÚ-> id == 0) 984  NULL ; 986  £ssiÚ -> Œª¥Üt -> `g‘©Œibu‹ (£ssiÚ-> id , ©Œibu‹_id ); 987 } } 989 cÚ¡ * $obc_£ssiÚ_g‘_owÃr ( obc_£ssiÚ * £ssiÚ ) 991 ià( £ssiÚ =ð NULL ) 992  NULL ; 994  £ssiÚ -> owÃr ; 995 } } 997 cÚ¡ * $obc_£ssiÚ_g‘_de¡š©iÚ ( obc_£ssiÚ * £ssiÚ ) 999  £ssiÚ -> de¡š©iÚ ; 1000 } } 1002 cÚ¡ * $obc_£ssiÚ_g‘_·th ( obc_£ssiÚ * £ssiÚ ) 1004  £ssiÚ -> ·th ; 1005 } } 1007 cÚ¡ * $obc_£ssiÚ_g‘_rg‘ ( obc_£ssiÚ * £ssiÚ ) 1009  £ssiÚ -> driv” -> rg‘ ; 1010 } } 1012 cÚ¡ * $obc_£ssiÚ_g‘_fÞd” ( obc_£ssiÚ * £ssiÚ ) 1014  £ssiÚ -> fÞd” ; 1015 } } 1017  $£©h_com¶‘e ( obc_£ssiÚ * £ssiÚ , 1018  obc_Œªsãr * Œªsãr , 1019 GE¼Ü * ”r , * u£r_d©a ) 1021  ³ndšg_»que¡ * p = u£r_d©a ; 1023 ià( p -> func ) 1024 p -> `func ( £ssiÚ , NULL , ”r ,…-> d©a ); 1026 ià( £ssiÚ -> p ==…) 1027 £ssiÚ -> p = NULL ; 1029 `³ndšg_»que¡_ä“ ( p ); 1031 `£ssiÚ_´oûss_queue ( £ssiÚ ); 1032 } } 1034  $£©h_Ý_com¶‘e ( obc_£ssiÚ * £ssiÚ , 1035  obc_Œªsãr * Œªsãr , 1036 GE¼Ü * ”r , * u£r_d©a ) 1038  £©h_d©a * d©a = u£r_d©a ; 1040 ià( d©a -> func ) 1041 d©a -> `func ( £ssiÚ , NULL , ”r , d©a-> u£r_d©a ); 1042 } } 1044  $£©h_£t_fÞd” ( obc_£ssiÚ * £ssiÚ , cÚ¡ * cur ) 1046 * fÞd” = NULL ; 1047 cÚ¡ * d–im ; 1049 d–im = `¡¼chr ( £ssiÚ -> fÞd” , '/'); 1050 ià( `¡¾’ ( cur è=ð0 || d–im =ð NULL || 1051 ( `¡rcmp ( cur , ".."è=ð0 && d–im =ð £ssiÚ -> fÞd” )) { 1052 fÞd” = `g_¡rdup ("/"); 1054 ià( `¡rcmp ( cur , "..") == 0) { 1055 fÞd” = `g_¡ºdup ( £ssiÚ ->folder, 1056 d–im - £ssiÚ -> fÞd” ); 1058 ià( `g_¡r_has_suffix ( £ssiÚ -> fÞd” , "/")) 1059 fÞd” = `g_¡rcÚÿt ( £ssiÚ ->folder, 1060 cur , NULL ); 1062 fÞd” = `g_¡rcÚÿt ( £ssiÚ ->folder, "/", 1063 cur , NULL ); 1066 `g_ä“ ( £ssiÚ -> fÞd” ); 1067 £ssiÚ -> fÞd” = folder; 1068 } } 1070  $£©h_cb ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 1071 gpoš‹r u£r_d©a ) 1073  ³ndšg_»que¡ * p = u£r_d©a ; 1074  £©h_d©a * d©a = p ->data; 1075 * Ãxt ; 1076 * cu¼’t ; 1077 gušt8 code ; 1079 p -> »q_id = 0; 1081 ià( ”r !ð NULL ) { 1082 `£©h_com¶‘e ( p -> £ssiÚ , NULL , ”r , u£r_d©a ); 1086 code = `g_obex_·ck‘_g‘_Ý”©iÚ ( r¥ , NULL ); 1087 ià( code !ð G_OBEX_RSP_SUCCESS ) { 1088 GE¼Ü * g”r = NULL ; 1089 `g_£t_”rÜ (& g”r , OBEX_IO_ERROR , code , "%s", 1090 `g_obex_¡»¼Ü ( code )); 1091 `£©h_com¶‘e ( p -> £ssiÚ , NULL , g”r , u£r_d©a ); 1092 `g_þ—r_”rÜ (& g”r ); 1096 cu¼’t = d©a -> »maššg [d©a-> šdex - 1]; 1097 `£©h_£t_fÞd” ( p -> £ssiÚ , cu¼’t ); 1100 ( Ãxt = d©a -> »maššg [d©a-> šdex ]è&& `¡¾’ (next) == 0) 1101 d©a -> šdex ++; 1103 ià( Ãxt =ð NULL ) { 1104 `£©h_com¶‘e ( p -> £ssiÚ , NULL , NULL, u£r_d©a ); 1108 d©a -> šdex ++; 1110 p -> »q_id = `g_obex_£©h ( obex , Ãxt , £©h_cb ,…, & ”r ); 1111 ià( ”r !ð NULL ) { 1112 `£©h_com¶‘e ( p -> £ssiÚ , NULL , ”r , u£r_d©a ); 1113 `g_”rÜ_ä“ ( ”r ); 1115 } } 1117  $£ssiÚ_´oûss_£©h ( ³ndšg_»que¡ * p , GE¼Ü ** ”r ) 1119  £©h_d©a * »q = p -> d©a ; 1120 cÚ¡ * fœ¡ = ""; 1123 ià( »q -> »maššg [0][0] != '/') 1124 fœ¡ = »q -> »maššg [»q-> šdex ]; 1125 »q -> šdex ++; 1127 p -> »q_id = `g_obex_£©h Õ-> £ssiÚ -> obex , fœ¡ , £©h_cb ,…, ”r ); 1128 ià(* ”r !ð NULL ) 1129  çž ; 1131 p -> £ssiÚ ->p =…; 1135 çž : 1136 `³ndšg_»que¡_ä“ ( p ); 1137  (* ”r )-> code ; 1138 } } 1140 gušt $obc_£ssiÚ_£©h ( obc_£ssiÚ * £ssiÚ , cÚ¡ * ·th , 1141 £ssiÚ_ÿÎback_t func , * u£r_d©a , 1142 GE¼Ü ** ”r ) 1144  £©h_d©a * d©a ; 1145  ³ndšg_»que¡ * p ; 1147 ià( £ssiÚ -> obex =ð NULL ) { 1148 `g_£t_”rÜ ( ”r , OBEX_IO_ERROR , OBEX_IO_DISCONNECTED , 1153 d©a = `g_Ãw0 ( £©h_d©a , 1); 1154 d©a -> func = func; 1155 d©a -> u£r_d©a = user_data; 1156 d©a -> »maššg = `g_¡r¥l™ ( `¡¾’ ( ·th ) ?…ath : "/", "/", 0); 1158 p = `³ndšg_»que¡_Ãw ( £ssiÚ , £ssiÚ_´oûss_£©h , NULL , 1159 £©h_Ý_com¶‘e , d©a , £©h_d©a_ä“ ); 1160 `£ssiÚ_queue ( p ); 1161  p -> id ; 1162 } } 1164  $async_cb ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 1165 gpoš‹r u£r_d©a ) 1167  ³ndšg_»que¡ * p = u£r_d©a ; 1168  obc_£ssiÚ * £ssiÚ = p ->session; 1169 GE¼Ü * g”r = NULL ; 1170 ušt8_t code ; 1172 p -> »q_id = 0; 1174 ià( ”r !ð NULL ) { 1175 ià( p -> func ) 1176 p -> `func Õ-> £ssiÚ , NULL , ”r ,…-> d©a ); 1177  dÚe ; 1180 code = `g_obex_·ck‘_g‘_Ý”©iÚ ( r¥ , NULL ); 1181 ià( code !ð G_OBEX_RSP_SUCCESS ) 1182 `g_£t_”rÜ (& g”r , OBEX_IO_ERROR , code , "%s", 1183 `g_obex_¡»¼Ü ( code )); 1185 ià( p -> func ) 1186 p -> `func Õ-> £ssiÚ , NULL , g”r ,…-> d©a ); 1188 ià( g”r !ð NULL ) 1189 `g_þ—r_”rÜ (& g”r ); 1191 dÚe : 1192 `³ndšg_»que¡_ä“ ( p ); 1193 £ssiÚ -> p = NULL ; 1195 `£ssiÚ_´oûss_queue ( £ssiÚ ); 1196 } } 1198  $fže_Ý_com¶‘e ( obc_£ssiÚ * £ssiÚ , 1199  obc_Œªsãr * Œªsãr , 1200 GE¼Ü * ”r , * u£r_d©a ) 1202  fže_d©a * d©a = u£r_d©a ; 1204 ià( d©a -> func ) 1205 d©a -> `func ( £ssiÚ , NULL , ”r , d©a-> u£r_d©a ); 1206 } } 1208  $£ssiÚ_´oûss_mkdœ ( ³ndšg_»que¡ * p , GE¼Ü ** ”r ) 1210  fže_d©a * »q = p -> d©a ; 1212 p -> »q_id = `g_obex_mkdœ Õ-> £ssiÚ -> obex , »q -> ¤úame , async_cb ,…, 1213 ”r ); 1214 ià(* ”r !ð NULL ) 1215  çž ; 1217 p -> £ssiÚ ->p =…; 1221 çž : 1222 `³ndšg_»que¡_ä“ ( p ); 1223  (* ”r )-> code ; 1224 } } 1226 gušt $obc_£ssiÚ_mkdœ ( obc_£ssiÚ * £ssiÚ , cÚ¡ * fÞd” , 1227 £ssiÚ_ÿÎback_t func , * u£r_d©a , 1228 GE¼Ü ** ”r ) 1230  fže_d©a * d©a ; 1231  ³ndšg_»que¡ * p ; 1233 ià( £ssiÚ -> obex =ð NULL ) { 1234 `g_£t_”rÜ ( ”r , OBEX_IO_ERROR , OBEX_IO_DISCONNECTED , 1239 d©a = `g_Ãw0 ( fže_d©a , 1); 1240 d©a -> ¤úame = `g_¡rdup ( fÞd” ); 1241 d©a -> func = func; 1242 d©a -> u£r_d©a = user_data; 1244 p = `³ndšg_»que¡_Ãw ( £ssiÚ , £ssiÚ_´oûss_mkdœ , NULL , 1245 fže_Ý_com¶‘e , d©a , fže_d©a_ä“ ); 1246 `£ssiÚ_queue ( p ); 1247  p -> id ; 1248 } } 1250  $£ssiÚ_´oûss_cÝy ( ³ndšg_»que¡ * p , GE¼Ü ** ”r ) 1252  fže_d©a * »q = p -> d©a ; 1254 p -> »q_id = `g_obex_cÝy Õ-> £ssiÚ -> obex , »q -> ¤úame ,„eq-> de¡Çme , 1255 async_cb , p , ”r ); 1256 ià(* ”r !ð NULL ) 1257  çž ; 1259 p -> £ssiÚ ->p =…; 1263 çž : 1264 `³ndšg_»que¡_ä“ ( p ); 1265  (* ”r )-> code ; 1266 } } 1268 gušt $obc_£ssiÚ_cÝy ( obc_£ssiÚ * £ssiÚ , cÚ¡ * ¤úame , 1269 cÚ¡ * de¡Çme , £ssiÚ_ÿÎback_t func , 1270 * u£r_d©a , GE¼Ü ** ”r ) 1272  fže_d©a * d©a ; 1273  ³ndšg_»que¡ * p ; 1275 ià( £ssiÚ -> obex =ð NULL ) { 1276 `g_£t_”rÜ ( ”r , OBEX_IO_ERROR , OBEX_IO_DISCONNECTED , 1281 d©a = `g_Ãw0 ( fže_d©a , 1); 1282 d©a -> ¤úame = `g_¡rdup (srcname); 1283 d©a -> de¡Çme = `g_¡rdup (destname); 1284 d©a -> func = func; 1285 d©a -> u£r_d©a = user_data; 1287 p = `³ndšg_»que¡_Ãw ( £ssiÚ , £ssiÚ_´oûss_cÝy , NULL , 1288 fže_Ý_com¶‘e , d©a , fže_d©a_ä“ ); 1289 `£ssiÚ_queue ( p ); 1290  p -> id ; 1291 } } 1293  $£ssiÚ_´oûss_move ( ³ndšg_»que¡ * p , GE¼Ü ** ”r ) 1295  fže_d©a * »q = p -> d©a ; 1297 p -> »q_id = `g_obex_move Õ-> £ssiÚ -> obex , »q -> ¤úame ,„eq-> de¡Çme , 1298 async_cb , p , ”r ); 1299 ià(* ”r !ð NULL ) 1300  çž ; 1302 p -> £ssiÚ ->p =…; 1306 çž : 1307 `³ndšg_»que¡_ä“ ( p ); 1308  (* ”r )-> code ; 1309 } } 1311 gušt $obc_£ssiÚ_move ( obc_£ssiÚ * £ssiÚ , cÚ¡ * ¤úame , 1312 cÚ¡ * de¡Çme , £ssiÚ_ÿÎback_t func , 1313 * u£r_d©a , GE¼Ü ** ”r ) 1315  fže_d©a * d©a ; 1316  ³ndšg_»que¡ * p ; 1318 ià( £ssiÚ -> obex =ð NULL ) { 1319 `g_£t_”rÜ ( ”r , OBEX_IO_ERROR , OBEX_IO_DISCONNECTED , 1324 d©a = `g_Ãw0 ( fže_d©a , 1); 1325 d©a -> ¤úame = `g_¡rdup (srcname); 1326 d©a -> de¡Çme = `g_¡rdup (destname); 1327 d©a -> func = func; 1328 d©a -> u£r_d©a = user_data; 1330 p = `³ndšg_»que¡_Ãw ( £ssiÚ , £ssiÚ_´oûss_move , NULL , 1331 fže_Ý_com¶‘e , d©a , fže_d©a_ä“ ); 1332 `£ssiÚ_queue ( p ); 1333  p -> id ; 1334 } } 1336  $£ssiÚ_´oûss_d–‘e ( ³ndšg_»que¡ * p , GE¼Ü ** ”r ) 1338  fže_d©a * »q = p -> d©a ; 1340 p -> »q_id = `g_obex_d–‘e Õ-> £ssiÚ -> obex , »q -> ¤úame , async_cb ,…, 1341 ”r ); 1342 ià(* ”r !ð NULL ) 1343  çž ; 1345 p -> £ssiÚ ->p =…; 1349 çž : 1350 `³ndšg_»que¡_ä“ ( p ); 1351  (* ”r )-> code ; 1352 } } 1354 gušt $obc_£ssiÚ_d–‘e ( obc_£ssiÚ * £ssiÚ , cÚ¡ * fže , 1355 £ssiÚ_ÿÎback_t func , * u£r_d©a , 1356 GE¼Ü ** ”r ) 1358  fže_d©a * d©a ; 1359  ³ndšg_»que¡ * p ; 1361 ià( £ssiÚ -> obex =ð NULL ) { 1362 `g_£t_”rÜ ( ”r , OBEX_IO_ERROR , OBEX_IO_DISCONNECTED , 1367 d©a = `g_Ãw0 ( fže_d©a , 1); 1368 d©a -> ¤úame = `g_¡rdup ( fže ); 1369 d©a -> func = func; 1370 d©a -> u£r_d©a = user_data; 1372 p = `³ndšg_»que¡_Ãw ( £ssiÚ , £ssiÚ_´oûss_d–‘e , NULL , 1373 fže_Ý_com¶‘e , d©a , fže_d©a_ä“ ); 1374 `£ssiÚ_queue ( p ); 1375  p -> id ; 1376 } } 1378  $obc_£ssiÚ_ÿnûl ( obc_£ssiÚ * £ssiÚ , gušt id , 1379 gboÞ—n »move ) 1381  ³ndšg_»que¡ * p = £ssiÚ ->p; 1383 ià( p =ð NULL ||…-> id != id) 1386 ià( p -> »q_id == 0) 1389 `g_obex_ÿnûl_»q ( £ssiÚ -> obex , p -> »q_id , »move ); 1390 p -> »q_id = 0; 1392 ià(! »move ) 1395 `³ndšg_»que¡_ä“ ( p ); 1396 £ssiÚ -> p = NULL ; 1398 `£ssiÚ_´oûss_queue ( £ssiÚ ); 1399 } } @obexd/client/session.h 25  ~<¡dšt.h > 26  ~ 27  ~ 29  gobc_£ssiÚ ; 31 (* t£ssiÚ_ÿÎback_t è( tobc_£ssiÚ * t£ssiÚ , 32  tobc_Œªsãr * tŒªsãr , 33 tGE¼Ü * t”r , * tu£r_d©a ); 35  obc_£ssiÚ * `obc_£ssiÚ_ü—‹ (cÚ¡ * sourû , 36 cÚ¡ * de¡š©iÚ , 37 cÚ¡ * £rviû , 38 ušt8_t chªÃl , 39 cÚ¡ * owÃr , 40 £ssiÚ_ÿÎback_t funùiÚ , 41 * u£r_d©a ); 43  obc_£ssiÚ * `obc_£ssiÚ_»f (obc_£ssiÚ * £ssiÚ ); 44  `obc_£ssiÚ_uÄef ( obc_£ssiÚ * £ssiÚ ); 45  `obc_£ssiÚ_shutdown ( obc_£ssiÚ * £ssiÚ ); 47  `obc_£ssiÚ_£t_owÃr ( obc_£ssiÚ * £ssiÚ , cÚ¡ * Çme , 48 GDBusW©chFunùiÚ func ); 49 cÚ¡ * `obc_£ssiÚ_g‘_owÃr ( obc_£ssiÚ * £ssiÚ ); 51 cÚ¡ * `obc_£ssiÚ_g‘_de¡š©iÚ ( obc_£ssiÚ * £ssiÚ ); 52 cÚ¡ * `obc_£ssiÚ_g‘_·th ( obc_£ssiÚ * £ssiÚ ); 53 cÚ¡ * `obc_£ssiÚ_g‘_rg‘ ( obc_£ssiÚ * £ssiÚ ); 55 cÚ¡ * `obc_£ssiÚ_»gi¡” ( obc_£ssiÚ * £ssiÚ , 56 GDBusDe¡royFunùiÚ de¡roy ); 58 cÚ¡ * `obc_£ssiÚ_g‘_©Œibu‹ ( obc_£ssiÚ * £ssiÚ , 59  ©Œibu‹_id ); 61 cÚ¡ * `obc_£ssiÚ_g‘_fÞd” ( obc_£ssiÚ * £ssiÚ ); 63 gušt `obc_£ssiÚ_queue ( obc_£ssiÚ * £ssiÚ , 64  obc_Œªsãr * Œªsãr , 65 £ssiÚ_ÿÎback_t func , * u£r_d©a , 66 GE¼Ü ** ”r ); 67 gušt `obc_£ssiÚ_£©h ( obc_£ssiÚ * £ssiÚ , cÚ¡ * ·th , 68 £ssiÚ_ÿÎback_t func , * u£r_d©a , 69 GE¼Ü ** ”r ); 70 gušt `obc_£ssiÚ_mkdœ ( obc_£ssiÚ * £ssiÚ , cÚ¡ * fÞd” , 71 £ssiÚ_ÿÎback_t func , * u£r_d©a , 72 GE¼Ü ** ”r ); 73 gušt `obc_£ssiÚ_cÝy ( obc_£ssiÚ * £ssiÚ , cÚ¡ * ¤úame , 74 cÚ¡ * de¡Çme , £ssiÚ_ÿÎback_t func , 75 * u£r_d©a , GE¼Ü ** ”r ); 76 gušt `obc_£ssiÚ_move ( obc_£ssiÚ * £ssiÚ , cÚ¡ * ¤úame , 77 cÚ¡ * de¡Çme , £ssiÚ_ÿÎback_t func , 78 * u£r_d©a , GE¼Ü ** ”r ); 79 gušt `obc_£ssiÚ_d–‘e ( obc_£ssiÚ * £ssiÚ , cÚ¡ * fže , 80 £ssiÚ_ÿÎback_t func , * u£r_d©a , 81 GE¼Ü ** ”r ); 82  `obc_£ssiÚ_ÿnûl ( obc_£ssiÚ * £ssiÚ , gušt id , 83 gboÞ—n »move ); @obexd/client/sync.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<”ºo.h > 30  ~<¡ršg.h > 32  ~ 33  ~ 35  ~"log.h " 37  ~"Œªsãr.h " 38  ~"£ssiÚ.h " 39  ~"driv”.h " 40  ~"sync.h " 42  #OBEX_SYNC_UUID "IRMC-SYNC" ) 43  #OBEX_SYNC_UUID_LEN 9 ) 45  #SYNC_INTERFACE "Üg.bluez.obex.SynchrÚiz©iÚ1" ) 46  #ERROR_INF SYNC_INTERFACE ".E¼Ü" ) 47  #SYNC_UUID "00001104-0000-1000-8000-00805f9b34fb" ) 49  ssync_d©a { 50  obc_£ssiÚ * m£ssiÚ ; 51 * mphÚebook_·th ; 52 DBusMes§ge * mmsg ; 55  DBusCÚÃùiÚ * gcÚn = NULL ; 57  DBusMes§ge * $sync_£ŽoÿtiÚ ( DBusCÚÃùiÚ * cÚÃùiÚ , 58 DBusMes§ge * mes§ge , * u£r_d©a ) 60  sync_d©a * sync = u£r_d©a ; 61 cÚ¡ * loÿtiÚ ; 62 * ·th = NULL , * tmp ; 64 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 65 DBUS_TYPE_STRING , & loÿtiÚ , 66 DBUS_TYPE_INVALID è=ð FALSE ) 67  `g_dbus_ü—‹_”rÜ ( mes§ge , 68 ERROR_INF ".Inv®idArgum’ts", NULL ); 70 ià(! `g_ascii_¡rÿ£cmp ( loÿtiÚ , "int") || 71 ! `g_ascii_¡rÿ£cmp ( loÿtiÚ , "internal")) 72 ·th = `g_¡rdup ("telecom/pb.vcf"); 73 ià(! `g_ascii_¡ºÿ£cmp ( loÿtiÚ , "sim", 3)) { 74 tmp = `g_ascii_¡rup ( loÿtiÚ , 4); 75 ·th = `g_bužd_fž’ame ( tmp , "‹Ëcom/pb.vcf", NULL ); 76 `g_ä“ ( tmp ); 78  `g_dbus_ü—‹_”rÜ ( mes§ge , 79 ERROR_INF ".InvalidArguments", "InvalidPhonebook"); 81 `g_ä“ ( sync -> phÚebook_·th ); 82 sync -> phÚebook_·th = ·th ; 84  `dbus_mes§ge_Ãw_m‘hod_»tuº ( mes§ge ); 85 } } 87  DBusMes§ge * $sync_g‘phÚebook ( DBusCÚÃùiÚ * cÚÃùiÚ , 88 DBusMes§ge * mes§ge , * u£r_d©a ) 90  sync_d©a * sync = u£r_d©a ; 91  obc_Œªsãr * Œªsãr ; 92 cÚ¡ * rg‘_fže ; 93 GE¼Ü * ”r = NULL ; 94 DBusMes§ge * »¶y ; 96 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 97 DBUS_TYPE_STRING , & rg‘_fže , 98 DBUS_TYPE_INVALID è=ð FALSE ) 99  `g_dbus_ü—‹_”rÜ ( mes§ge , 100 ERROR_INF ".InvalidArguments", 103 ià( sync -> msg ) 104  `g_dbus_ü—‹_”rÜ ( mes§ge , 105 ERROR_INF ".InProgress", "Transfer in…rogress"); 108 ià(! sync -> phÚebook_·th ) 109 sync -> phÚebook_·th = `g_¡rdup ("telecom/pb.vcf"); 111 Œªsãr = `obc_Œªsãr_g‘ ("phÚebook", sync -> phÚebook_·th , 112 rg‘_fže , & ”r ); 113 ià( Œªsãr =ð NULL ) 114  çž ; 116 ià(! `obc_£ssiÚ_queue ( sync -> £ssiÚ , Œªsãr , NULL , NULL, & ”r )) 117  çž ; 119  `obc_Œªsãr_ü—‹_dbus_»¶y ( Œªsãr , mes§ge ); 121 çž : 122 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INF ".Failed", "%s", 123 ”r -> mes§ge ); 124 `g_”rÜ_ä“ ( ”r ); 125  »¶y ; 126 } } 128  DBusMes§ge * $sync_puhÚebook ( DBusCÚÃùiÚ * cÚÃùiÚ , 129 DBusMes§ge * mes§ge , * u£r_d©a ) 131  sync_d©a * sync = u£r_d©a ; 132  obc_Œªsãr * Œªsãr ; 133 cÚ¡ * sourû_fže ; 134 GE¼Ü * ”r = NULL ; 135 DBusMes§ge * »¶y ; 137 ià( `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 138 DBUS_TYPE_STRING , & sourû_fže , 139 DBUS_TYPE_INVALID è=ð FALSE ) 140  `g_dbus_ü—‹_”rÜ ( mes§ge , 141 ERROR_INF ".InvalidArguments", 145 ià(! sync -> phÚebook_·th ) 146 sync -> phÚebook_·th = `g_¡rdup ("telecom/pb.vcf"); 148 Œªsãr = `obc_Œªsãr_put ( NULL , sync -> phÚebook_·th , sourû_fže , 149 NULL , 0, & ”r ); 150 ià( Œªsãr =ð NULL ) 151  çž ; 153 ià(! `obc_£ssiÚ_queue ( sync -> £ssiÚ , Œªsãr , NULL , NULL, & ”r )) 154  çž ; 156  `obc_Œªsãr_ü—‹_dbus_»¶y ( Œªsãr , mes§ge ); 158 çž : 159 »¶y = `g_dbus_ü—‹_”rÜ ( mes§ge , ERROR_INF ".Failed", "%s", 160 ”r -> mes§ge ); 161 `g_”rÜ_ä“ ( ”r ); 162  »¶y ; 163 } } 165 cÚ¡ GDBusM‘hodTabË gsync_m‘hods [] = { 166 { GDBUS_METHOD ("SetLocation", 167 GDBUS_ARGS ({ "loÿtiÚ", "s" }), NULL , 168 sync_£ŽoÿtiÚ ) }, 169 { GDBUS_METHOD ("GetPhonebook", 170 GDBUS_ARGS ({ "targetfile", "s" }), 171 GDBUS_ARGS ({ "transfer", "o" }, 173 sync_g‘phÚebook ) }, 174 { GDBUS_METHOD ("PutPhonebook", 175 GDBUS_ARGS ({ "sourcefile", "s" }), 176 GDBUS_ARGS ({ "transfer", "o" }, 178 sync_puhÚebook ) }, 182  $sync_ä“ (* d©a ) 184  sync_d©a * sync = d©a ; 186 `obc_£ssiÚ_uÄef ( sync -> £ssiÚ ); 187 `g_ä“ ( sync -> phÚebook_·th ); 188 `g_ä“ ( sync ); 189 } } 191  $sync_´obe ( obc_£ssiÚ * £ssiÚ ) 193  sync_d©a * sync ; 194 cÚ¡ * ·th ; 196 ·th = `obc_£ssiÚ_g‘_·th ( £ssiÚ ); 198 `DBG ("%s", ·th ); 200 sync = `g_Œy_Ãw0 ( sync_d©a , 1); 201 ià(! sync ) 202  - ENOMEM ; 204 sync -> £ssiÚ = `obc_£ssiÚ_»f (session); 206 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚn , ·th , SYNC_INTERFACE , sync_m‘hods , 207 NULL , NULL, sync , sync_ä“ )) { 208 `sync_ä“ ( sync ); 209  - ENOMEM ; 213 } } 215  $sync_»move ( obc_£ssiÚ * £ssiÚ ) 217 cÚ¡ * ·th = `obc_£ssiÚ_g‘_·th ( £ssiÚ ); 219 `DBG ("%s", ·th ); 221 `g_dbus_uÄegi¡”_š‹rçû ( cÚn , ·th , SYNC_INTERFACE ); 222 } } 224  obc_driv” gsync = { 225 . £rviû = "SYNC", 226 . guuid = SYNC_UUID , 227 . grg‘ = OBEX_SYNC_UUID , 228 . grg‘_Ën = OBEX_SYNC_UUID_LEN , 229 . g´obe = sync_´obe , 230 . g»move = sync_»move 233  $sync_š™ () 235  ”r ; 237 `DBG (""); 239 cÚn = `dbus_bus_g‘ ( DBUS_BUS_SESSION , NULL ); 240 ià(! cÚn ) 241  - EIO ; 243 ”r = `obc_driv”_»gi¡” (& sync ); 244 ià( ”r < 0) { 245 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 246 cÚn = NULL ; 247  ”r ; 251 } } 253  $sync_ex™ () 255 `DBG (""); 257 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 258 cÚn = NULL ; 260 `obc_driv”_uÄegi¡” (& sync ); 261 } } @obexd/client/sync.h 25  sync_š™ (); 26  sync_ex™ (); @obexd/client/transfer.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dlib.h > 30  ~<¡dio.h > 31  ~<”ºo.h > 32  ~ 33  ~ 34  ~<¡ršg.h > 35  ~ 36  ~<š‰y³s.h > 38  ~ 39  ~ 40  ~ 42  ~"dbus.h " 43  ~"log.h " 44  ~"Œªsãr.h " 46  #TRANSFER_INTERFACE "Üg.bluez.obex.T¿nsãr1" ) 47  #ERROR_INTERFACE "Üg.bluez.obex.E¼Ü" ) 49  #OBC_TRANSFER_ERROR `obc_Œªsãr_”rÜ_qu¬k () ) 51  #FIRST_PACKET_TIMEOUT 60 ) 53  gušt64 gcouÁ” = 0; 55  sŒªsãr_ÿÎback { 56 Œªsãr_ÿÎback_t mfunc ; 57 * md©a ; 61 mTRANSFER_STATUS_QUEUED = 0, 62 mTRANSFER_STATUS_ACTIVE , 63 mTRANSFER_STATUS_SUSPENDED , 64 mTRANSFER_STATUS_COMPLETE , 65 mTRANSFER_STATUS_SUSPENDED_QUEUED , 66 mTRANSFER_STATUS_ERROR 69  sobc_Œªsãr { 70 GObex * mobex ; 71 ušt8_t m¡©us ; 72 GObexAµ¬am * m­·¿m ; 73 gušt8 mÝ ; 74  Œªsãr_ÿÎback * mÿÎback ; 75 DBusCÚÃùiÚ * mcÚn ; 76 DBusMes§ge * mmsg ; 77 * m£ssiÚ ; 78 * mowÃr ; 79 * m·th ; 80 * mfž’ame ; 81 * mÇme ; 82 * mty³ ; 83  mfd ; 84 gušt m»q ; 85 gušt mxãr ; 86 gšt64 msize ; 87 gšt64 mŒªsã¼ed ; 88 gšt64 m´og»ss ; 89 gušt m´og»ss_id ; 92  GQu¬k $obc_Œªsãr_”rÜ_qu¬k () 94  `g_qu¬k_äom_¡©ic_¡ršg ("obc-transfer-error-quark"); 95 } } 97 DBusMes§ge * $obc_Œªsãr_ü—‹_dbus_»¶y ( obc_Œªsãr * Œªsãr , 98 DBusMes§ge * mes§ge ) 100 DBusMes§ge * »¶y ; 101 DBusMes§geI‹r ™” ; 103 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( mes§ge ); 104 ià( »¶y =ð NULL ) 105  NULL ; 107 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 108 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_OBJECT_PATH , 109 & Œªsãr -> ·th ); 110 `g_dbus_g‘_´Ý”t›s ( Œªsãr -> cÚn ,¿nsãr-> ·th , 111 TRANSFER_INTERFACE , & ™” ); 113  »¶y ; 114 } } 116  $abÜt_com¶‘e ( GObex * obex , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 118  obc_Œªsãr * Œªsãr = u£r_d©a ; 119  Œªsãr_ÿÎback * ÿÎback = Œªsãr ->callback; 120 DBusMes§ge * »¶y ; 122 Œªsãr -> xãr = 0; 124 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( Œªsãr -> msg ); 125 ià( »¶y ) 126 `g_dbus_£nd_mes§ge ( Œªsãr -> cÚn , »¶y ); 128 `dbus_mes§ge_uÄef ( Œªsãr -> msg ); 129 Œªsãr -> msg = NULL ; 131 ià( ÿÎback =ð NULL ) 134 ià( ”r ) { 135 ÿÎback -> `func ( Œªsãr , ”r , c®lback-> d©a ); 137 GE¼Ü * abÜt_”r ; 139 abÜt_”r = `g_”rÜ_Ãw ( OBC_TRANSFER_ERROR , - ECANCELED , "%s", 141 ÿÎback -> `func ( Œªsãr , abÜt_”r , c®lback-> d©a ); 142 `g_”rÜ_ä“ ( abÜt_”r ); 144 } } 146  DBusMes§ge * $obc_Œªsãr_ÿnûl ( DBusCÚÃùiÚ * cÚÃùiÚ , 147 DBusMes§ge * mes§ge , * u£r_d©a ) 149  obc_Œªsãr * Œªsãr = u£r_d©a ; 150 cÚ¡ * £nd” ; 152 £nd” = `dbus_mes§ge_g‘_£nd” ( mes§ge ); 153 ià( `g_¡rcmp0 ( Œªsãr -> owÃr , £nd” ) != 0) 154  `g_dbus_ü—‹_”rÜ ( mes§ge , 155 ERROR_INTERFACE ".NotAuthorized", 158 ià( Œªsãr -> msg !ð NULL ) 159  `g_dbus_ü—‹_”rÜ ( mes§ge , 160 ERROR_INTERFACE ".InProgress", 163 ià( Œªsãr -> ¡©us =ð TRANSFER_STATUS_SUSPENDED ) 164 `g_obex_»sume ( Œªsãr -> obex ); 166 ià( Œªsãr -> »q > 0) { 167 ià(! `g_obex_ÿnûl_»q ( Œªsãr -> obex ,¿nsãr-> »q , TRUE )) 168  `g_dbus_ü—‹_”rÜ ( mes§ge , 169 ERROR_INTERFACE ".Failed", 171 Œªsãr -> »q = 0; 174 ià( Œªsãr -> xãr == 0) { 175  Œªsãr_ÿÎback * ÿÎback = Œªsãr ->callback; 177 ià( ÿÎback !ð NULL ) { 178 GE¼Ü * ”r ; 180 ”r = `g_”rÜ_Ãw ( OBC_TRANSFER_ERROR , - ECANCELED , "%s", 182 ÿÎback -> `func ( Œªsãr , ”r , c®lback-> d©a ); 183 `g_”rÜ_ä“ ( ”r ); 186  `dbus_mes§ge_Ãw_m‘hod_»tuº ( mes§ge ); 189 ià( Œªsãr -> ´og»ss_id != 0) { 190 `g_sourû_»move ( Œªsãr -> ´og»ss_id ); 191 Œªsãr -> ´og»ss_id = 0; 194 ià(! `g_obex_ÿnûl_Œªsãr ( Œªsãr -> xãr , abÜt_com¶‘e ,ransfer)) 195  `g_dbus_ü—‹_”rÜ ( mes§ge , 196 ERROR_INTERFACE ".Failed", 199 Œªsãr -> msg = `dbus_mes§ge_»f ( mes§ge ); 201  NULL ; 202 } } 204  $Œªsãr_£t_¡©us ( obc_Œªsãr * Œªsãr , ušt8_t ¡©us ) 206 ià( Œªsãr -> ¡©us == status) 209 Œªsãr -> ¡©us = status; 211 `g_dbus_em™_´Ý”ty_chªged ( Œªsãr -> cÚn ,¿nsãr-> ·th , 212 TRANSFER_INTERFACE , "Status"); 213 } } 215  DBusMes§ge * $obc_Œªsãr_su¥’d ( DBusCÚÃùiÚ * cÚÃùiÚ , 216 DBusMes§ge * mes§ge , * u£r_d©a ) 218  obc_Œªsãr * Œªsãr = u£r_d©a ; 219 cÚ¡ * £nd” ; 220 ušt8_t ¡©us ; 222 £nd” = `dbus_mes§ge_g‘_£nd” ( mes§ge ); 223 ià( `g_¡rcmp0 ( Œªsãr -> owÃr , £nd” ) != 0) 224  `g_dbus_ü—‹_”rÜ ( mes§ge , 225 ERROR_INTERFACE ".NotAuthorized", 228  Œªsãr -> ¡©us ) { 229  TRANSFER_STATUS_QUEUED : 230 ¡©us = TRANSFER_STATUS_SUSPENDED_QUEUED ; 232  TRANSFER_STATUS_ACTIVE : 233 ià( Œªsãr -> xãr ) 234 `g_obex_su¥’d ( Œªsãr -> obex ); 235 ¡©us = TRANSFER_STATUS_SUSPENDED ; 238  `g_dbus_ü—‹_”rÜ ( mes§ge , 239 ERROR_INTERFACE ".NotInProgress", 243 `Œªsãr_£t_¡©us ( Œªsãr , ¡©us ); 245  `g_dbus_ü—‹_»¶y ( mes§ge , DBUS_TYPE_INVALID ); 246 } } 248  DBusMes§ge * $obc_Œªsãr_»sume ( DBusCÚÃùiÚ * cÚÃùiÚ , 249 DBusMes§ge * mes§ge , * u£r_d©a ) 251  obc_Œªsãr * Œªsãr = u£r_d©a ; 252 cÚ¡ * £nd” ; 253 ušt8_t ¡©us ; 255 £nd” = `dbus_mes§ge_g‘_£nd” ( mes§ge ); 256 ià( `g_¡rcmp0 ( Œªsãr -> owÃr , £nd” ) != 0) 257  `g_dbus_ü—‹_”rÜ ( mes§ge , 258 ERROR_INTERFACE ".NotAuthorized", 261  Œªsãr -> ¡©us ) { 262  TRANSFER_STATUS_SUSPENDED_QUEUED : 263 ¡©us = TRANSFER_STATUS_QUEUED ; 265  TRANSFER_STATUS_SUSPENDED : 266 ià( Œªsãr -> xãr ) 267 `g_obex_»sume ( Œªsãr -> obex ); 269 `obc_Œªsãr_¡¬t ( Œªsãr , NULL , NULL); 270 ¡©us = TRANSFER_STATUS_ACTIVE ; 273  `g_dbus_ü—‹_”rÜ ( mes§ge , 274 ERROR_INTERFACE ".NotInProgress", 278 `Œªsãr_£t_¡©us ( Œªsãr , ¡©us ); 280  `g_dbus_ü—‹_»¶y ( mes§ge , DBUS_TYPE_INVALID ); 281 } } 283  gboÞ—n $Çme_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 285  obc_Œªsãr * Œªsãr = d©a ; 287  Œªsãr -> Çme !ð NULL ; 288 } } 290  gboÞ—n $g‘_Çme (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 291 DBusMes§geI‹r * ™” , * d©a ) 293  obc_Œªsãr * Œªsãr = d©a ; 295 ià( Œªsãr -> Çme =ð NULL ) 296  FALSE ; 298 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , 299 & Œªsãr -> Çme ); 301  TRUE ; 302 } } 304  gboÞ—n $g‘_size (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 305 DBusMes§geI‹r * ™” , * d©a ) 307  obc_Œªsãr * Œªsãr = d©a ; 309 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT64 , 310 & Œªsãr -> size ); 312  TRUE ; 313 } } 315  gboÞ—n $fž’ame_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 317  obc_Œªsãr * Œªsãr = d©a ; 319  Œªsãr -> fž’ame !ð NULL ; 320 } } 322  gboÞ—n $g‘_fž’ame (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 323 DBusMes§geI‹r * ™” , * d©a ) 325  obc_Œªsãr * Œªsãr = d©a ; 327 ià( Œªsãr -> fž’ame =ð NULL ) 328  FALSE ; 330 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , 331 & Œªsãr -> fž’ame ); 333  TRUE ; 334 } } 336  gboÞ—n $Œªsã¼ed_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 337 * d©a ) 339  obc_Œªsãr * Œªsãr = d©a ; 341  Œªsãr -> obex !ð NULL ; 342 } } 344  gboÞ—n $g‘_Œªsã¼ed (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 345 DBusMes§geI‹r * ™” , * d©a ) 347  obc_Œªsãr * Œªsãr = d©a ; 349 ià( Œªsãr -> obex =ð NULL ) 350  FALSE ; 352 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT64 , 353 & Œªsãr -> ´og»ss ); 355  TRUE ; 356 } } 358 cÚ¡ * $¡©us2¡r ( ušt8_t ¡©us ) 360  ¡©us ) { 361  TRANSFER_STATUS_QUEUED : 363  TRANSFER_STATUS_ACTIVE : 365  TRANSFER_STATUS_SUSPENDED_QUEUED : 366  TRANSFER_STATUS_SUSPENDED : 368  TRANSFER_STATUS_COMPLETE : 370  TRANSFER_STATUS_ERROR : 374 } } 376  gboÞ—n $g‘_¡©us (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 377 DBusMes§geI‹r * ™” , * d©a ) 379  obc_Œªsãr * Œªsãr = d©a ; 380 cÚ¡ * ¡©us = `¡©us2¡r ( Œªsãr ->status); 382 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¡©us ); 384  TRUE ; 385 } } 387  gboÞ—n $g‘_£ssiÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 388 DBusMes§geI‹r * ™” , * d©a ) 390  obc_Œªsãr * Œªsãr = d©a ; 392 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , 393 & Œªsãr -> £ssiÚ ); 395  TRUE ; 396 } } 398 cÚ¡ GDBusM‘hodTabË gobc_Œªsãr_m‘hods [] = { 399 { GDBUS_METHOD ("Su¥’d", NULL , NULL, obc_Œªsãr_su¥’d ) }, 400 { GDBUS_METHOD ("Resume", NULL , NULL, obc_Œªsãr_»sume ) }, 401 { GDBUS_ASYNC_METHOD ("Cªûl", NULL , NULL, 402 obc_Œªsãr_ÿnûl ) }, 406 cÚ¡ GDBusPrÝ”tyTabË gobc_Œªsãr_´Ý”t›s [] = { 407 { "Stus", "s", g‘_¡©us }, 408 { "Name", "s", g‘_Çme , NULL , Çme_exi¡s }, 409 { "Size", "t", g‘_size }, 410 { "Fž’ame", "s", g‘_fž’ame , NULL , fž’ame_exi¡s }, 411 { "T¿nsã¼ed", "t", g‘_Œªsã¼ed , NULL , Œªsã¼ed_exi¡s }, 412 { "SessiÚ", "o", g‘_£ssiÚ }, 416  $obc_Œªsãr_ä“ ( obc_Œªsãr * Œªsãr ) 418 `DBG ("%p", Œªsãr ); 420 ià( Œªsãr -> ¡©us =ð TRANSFER_STATUS_SUSPENDED ) 421 `g_obex_»sume ( Œªsãr -> obex ); 423 ià( Œªsãr -> »q > 0) 424 `g_obex_ÿnûl_»q ( Œªsãr -> obex ,¿nsãr-> »q , TRUE ); 426 ià( Œªsãr -> xãr ) 427 `g_obex_ÿnûl_Œªsãr ( Œªsãr -> xãr , NULL , NULL); 429 ià( Œªsãr -> ´og»ss_id != 0) { 430 `g_sourû_»move ( Œªsãr -> ´og»ss_id ); 431 Œªsãr -> ´og»ss_id = 0; 434 ià( Œªsãr -> Ý =ð G_OBEX_OP_GET && 435 Œªsãr -> ¡©us !ð TRANSFER_STATUS_COMPLETE && 436 Œªsãr -> fž’ame ) 437 `»move ( Œªsãr -> fž’ame ); 439 ià( Œªsãr -> fd > 0) 440 `þo£ ( Œªsãr -> fd ); 442 ià( Œªsãr -> ­·¿m !ð NULL ) 443 `g_obex_­·¿m_ä“ ( Œªsãr -> ­·¿m ); 445 ià( Œªsãr -> cÚn ) 446 `dbus_cÚÃùiÚ_uÄef ( Œªsãr -> cÚn ); 448 ià( Œªsãr -> msg ) 449 `dbus_mes§ge_uÄef ( Œªsãr -> msg ); 451 ià( Œªsãr -> obex ) 452 `g_obex_uÄef ( Œªsãr -> obex ); 454 `g_ä“ ( Œªsãr -> ÿÎback ); 455 `g_ä“ ( Œªsãr -> owÃr ); 456 `g_ä“ ( Œªsãr -> fž’ame ); 457 `g_ä“ ( Œªsãr -> Çme ); 458 `g_ä“ ( Œªsãr -> ty³ ); 459 `g_ä“ ( Œªsãr -> £ssiÚ ); 460 `g_ä“ ( Œªsãr -> ·th ); 461 `g_ä“ ( Œªsãr ); 462 } } 464  obc_Œªsãr * $obc_Œªsãr_ü—‹ ( gušt8 Ý , 465 cÚ¡ * fž’ame , 466 cÚ¡ * Çme , 467 cÚ¡ * ty³ ) 469  obc_Œªsãr * Œªsãr ; 471 Œªsãr = `g_Ãw0 ( obc_Œªsãr , 1); 472 Œªsãr -> Ý = op; 473 Œªsãr -> fž’ame = `g_¡rdup (filename); 474 Œªsãr -> Çme = `g_¡rdup (name); 475 Œªsãr -> ty³ = `g_¡rdup (type); 477  Œªsãr ; 478 } } 480 gboÞ—n $obc_Œªsãr_»gi¡” ( obc_Œªsãr * Œªsãr , 481 DBusCÚÃùiÚ * cÚn , 482 cÚ¡ * £ssiÚ , 483 cÚ¡ * owÃr , 484 GE¼Ü ** ”r ) 486 Œªsãr -> owÃr = `g_¡rdup (owner); 488 Œªsãr -> £ssiÚ = `g_¡rdup (session); 489 Œªsãr -> ·th = `g_¡rdup_´štf ("%s/Œªsãr%ju", £ssiÚ , couÁ” ++); 491 Œªsãr -> cÚn = `dbus_cÚÃùiÚ_»f (conn); 492 ià( Œªsãr -> cÚn =ð NULL ) { 493 `g_£t_”rÜ ( ”r , OBC_TRANSFER_ERROR , - EFAULT , 495  FALSE ; 498 ià( `g_dbus_»gi¡”_š‹rçû ( Œªsãr -> cÚn ,¿nsãr-> ·th , 499 TRANSFER_INTERFACE , 500 obc_Œªsãr_m‘hods , NULL , 501 obc_Œªsãr_´Ý”t›s , Œªsãr , 502 NULL è=ð FALSE ) { 503 `g_£t_”rÜ ( ”r , OBC_TRANSFER_ERROR , - EFAULT , 505  FALSE ; 508 `DBG ("%°»gi¡”ed %s", Œªsãr ,¿nsãr-> ·th ); 510  TRUE ; 511 } } 513  gboÞ—n $Œªsãr_Ý’ ( obc_Œªsãr * Œªsãr ,  æags , 514 mode_t mode , GE¼Ü ** ”r ) 516  fd ; 517 * fž’ame ; 519 ià( Œªsãr -> fž’ame !ð NULL && `¡rcmp (transfer->filename, "") != 0) { 520 fd = `Ý’ ( Œªsãr -> fž’ame , æags , mode ); 521 ià( fd < 0) { 522 `”rÜ ("Ý’(): %s(%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 523 `g_£t_”rÜ ( ”r , OBC_TRANSFER_ERROR , - ”ºo , 525  FALSE ; 527  dÚe ; 530 fd = `g_fže_Ý’_tmp ("obex-þ›ÁXXXXXX", & fž’ame , ”r ); 531 ià( fd < 0) { 532 `”rÜ ("g_fže_Ý’_tmp(): %s", (* ”r )-> mes§ge ); 533  FALSE ; 536 ià( Œªsãr -> fž’ame =ð NULL ) { 537 `»move ( fž’ame ); 538 `g_ä“ ( fž’ame ); 540 `g_ä“ ( Œªsãr -> fž’ame ); 541 Œªsãr -> fž’ame = filename; 544 dÚe : 545 Œªsãr -> fd = fd; 546  TRUE ; 547 } } 549  obc_Œªsãr * $obc_Œªsãr_g‘ (cÚ¡ * ty³ , cÚ¡ * Çme , 550 cÚ¡ * fž’ame , GE¼Ü ** ”r ) 552  obc_Œªsãr * Œªsãr ; 553  ³¼ ; 555 Œªsãr = `obc_Œªsãr_ü—‹ ( G_OBEX_OP_GET , fž’ame , Çme , ty³ ); 557 ³¼ = `Œªsãr_Ý’ ( Œªsãr , O_WRONLY | O_CREAT | O_TRUNC , 0600, ”r ); 558 ià( ³¼ < 0) { 559 `obc_Œªsãr_ä“ ( Œªsãr ); 560  NULL ; 563  Œªsãr ; 564 } } 566  obc_Œªsãr * $obc_Œªsãr_put (cÚ¡ * ty³ , cÚ¡ * Çme , 567 cÚ¡ * fž’ame , 568 cÚ¡ * cÚ‹Ás , size_t size , 569 GE¼Ü ** ”r ) 571  obc_Œªsãr * Œªsãr ; 572  ¡© ¡ ; 573  ³¼ ; 575 ià(( fž’ame =ð NULL || `¡rcmp (filename, "") == 0) && 576 cÚ‹Ás =ð NULL ) { 577 `g_£t_”rÜ ( ”r , OBC_TRANSFER_ERROR , - EINVAL , 579  NULL ; 582 Œªsãr = `obc_Œªsãr_ü—‹ ( G_OBEX_OP_PUT , fž’ame , Çme , ty³ ); 584 ià( cÚ‹Ás !ð NULL ) { 585 ssize_t w ; 587 ià(! `Œªsãr_Ý’ ( Œªsãr , O_RDWR , 0, ”r )) 588  çž ; 590 w = `wr™e ( Œªsãr -> fd , cÚ‹Ás , size ); 591 ià( w < 0) { 592 ³¼ = ”ºo ; 593 `”rÜ ("wr™e(): %s(%d)", `¡»¼Ü ( ³¼ ),…err); 594 `g_£t_”rÜ ( ”r , OBC_TRANSFER_ERROR , - ³¼ , 596  çž ; 597 } ià(( size_t è w !ð size ) { 598 `”rÜ ("Unableo write‡ll contentso file"); 599 `g_£t_”rÜ ( ”r , OBC_TRANSFER_ERROR , - EFAULT , 601  çž ; 603 `l£ek ( Œªsãr -> fd , 0, SEEK_SET ); 605 ià(! `Œªsãr_Ý’ ( Œªsãr , O_RDONLY , 0, ”r )) 606  çž ; 609 ià( `f¡© ( Œªsãr -> fd , & ¡ ) < 0) { 610 ³¼ = ”ºo ; 611 `”rÜ ("f¡©(): %s(%d)", `¡»¼Ü ( ³¼ ),…err); 612 `g_£t_”rÜ ( ”r , OBC_TRANSFER_ERROR , - ³¼ , 614  çž ; 617 Œªsãr -> size = ¡ . ¡_size ; 619  Œªsãr ; 621 çž : 622 `obc_Œªsãr_ä“ ( Œªsãr ); 623  NULL ; 624 } } 626  $obc_Œªsãr_uÄegi¡” ( obc_Œªsãr * Œªsãr ) 628 ià( Œªsãr -> ·th ) { 629 `g_dbus_uÄegi¡”_š‹rçû ( Œªsãr -> cÚn , 630 Œªsãr -> ·th , TRANSFER_INTERFACE ); 633 `DBG ("%°uÄegi¡”ed %s", Œªsãr ,¿nsãr-> ·th ); 635 `obc_Œªsãr_ä“ ( Œªsãr ); 636 } } 638  gboÞ—n $g‘_xãr_´og»ss (cÚ¡ * buf , gsize Ën , 639 gpoš‹r u£r_d©a ) 641  obc_Œªsãr * Œªsãr = u£r_d©a ; 643 ià( Œªsãr -> fd > 0) { 644  w ; 646 w = `wr™e ( Œªsãr -> fd , buf , Ën ); 647 ià( w < 0) 648  FALSE ; 650 Œªsãr -> Œªsã¼ed +ð w ; 653  TRUE ; 654 } } 656  $xãr_com¶‘e ( GObex * obex , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 658  obc_Œªsãr * Œªsãr = u£r_d©a ; 659  Œªsãr_ÿÎback * ÿÎback = Œªsãr ->callback; 661 Œªsãr -> xãr = 0; 663 ià( Œªsãr -> ´og»ss_id != 0) { 664 `g_sourû_»move ( Œªsãr -> ´og»ss_id ); 665 Œªsãr -> ´og»ss_id = 0; 668 ià( Œªsãr -> ¡©us =ð TRANSFER_STATUS_SUSPENDED ) 669 `g_obex_»sume ( Œªsãr -> obex ); 671 ià( ”r ) 672 `Œªsãr_£t_¡©us ( Œªsãr , TRANSFER_STATUS_ERROR ); 674 `Œªsãr_£t_¡©us ( Œªsãr , TRANSFER_STATUS_COMPLETE ); 676 ià( ÿÎback ) 677 ÿÎback -> `func ( Œªsãr , ”r , c®lback-> d©a ); 678 } } 680  $g‘_xãr_´og»ss_fœ¡ ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 681 gpoš‹r u£r_d©a ) 683  obc_Œªsãr * Œªsãr = u£r_d©a ; 684 GObexPack‘ * »q ; 685 GObexH—d” * hdr ; 686 GObexAµ¬am * ­·¿m ; 687 cÚ¡ gušt8 * buf ; 688 gsize Ën ; 689 gušt8 r¥code ; 690 gboÞ—n fš® ; 692 ià( ”r !ð NULL ) { 693 `xãr_com¶‘e ( obex , ”r , Œªsãr ); 697 r¥code = `g_obex_·ck‘_g‘_Ý”©iÚ ( r¥ , & fš® ); 698 ià( r¥code !ð G_OBEX_RSP_SUCCESS &&„¥cod!ð G_OBEX_RSP_CONTINUE ) { 699 ”r = `g_”rÜ_Ãw ( OBC_TRANSFER_ERROR , r¥code , "%s", 700 `g_obex_¡»¼Ü ( r¥code )); 701 `xãr_com¶‘e ( obex , ”r , Œªsãr ); 702 `g_”rÜ_ä“ ( ”r ); 706 hdr = `g_obex_·ck‘_g‘_h—d” ( r¥ , G_OBEX_HDR_LENGTH ); 707 ià( hdr ) { 708 ušt32_t Ën ; 709 ià( `g_obex_h—d”_g‘_ušt32 ( hdr , & Ën )) { 710 Œªsãr -> size = Ën ; 711 `g_dbus_em™_´Ý”ty_chªged ( Œªsãr -> cÚn , 712 Œªsãr -> ·th , 713 TRANSFER_INTERFACE , "Size"); 717 hdr = `g_obex_·ck‘_g‘_h—d” ( r¥ , G_OBEX_HDR_APPARAM ); 718 ià( hdr ) { 719 ­·¿m = `g_obex_h—d”_g‘_­·¿m ( hdr ); 720 ià( ­·¿m !ð NULL ) 721 `obc_Œªsãr_£t_­·¿m ( Œªsãr , ­·¿m ); 724 hdr = `g_obex_·ck‘_g‘_body ( r¥ ); 725 ià( hdr ) { 726 `g_obex_h—d”_g‘_by‹s ( hdr , & buf , & Ën ); 727 ià( Ën != 0) 728 `g‘_xãr_´og»ss ( buf , Ën , Œªsãr ); 731 ià( r¥code =ð G_OBEX_RSP_SUCCESS ) { 732 Œªsãr -> »q = 0; 733 `xãr_com¶‘e ( obex , ”r , Œªsãr ); 737 ià( `g_obex_¤m_aùive ( obex ) || 738 Œªsãr -> ¡©us =ð TRANSFER_STATUS_SUSPENDED ) 741 Œªsãr -> »q = 0; 743 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_GET , TRUE , G_OBEX_HDR_INVALID ); 745 Œªsãr -> xãr = `g_obex_g‘_»q_pkt ( obex , »q , g‘_xãr_´og»ss , 746 xãr_com¶‘e , Œªsãr , 747 & ”r ); 748 } } 750  gssize $put_xãr_´og»ss (* buf , gsize Ën , gpoš‹r u£r_d©a ) 752  obc_Œªsãr * Œªsãr = u£r_d©a ; 753 gssize size ; 755 size = `»ad ( Œªsãr -> fd , buf , Ën ); 756 ià( size <= 0) 757  size ; 759 Œªsãr -> Œªsã¼ed +ð size ; 761  size ; 762 } } 764 gboÞ—n $obc_Œªsãr_£t_ÿÎback ( obc_Œªsãr * Œªsãr , 765 Œªsãr_ÿÎback_t func , 766 * u£r_d©a ) 768  Œªsãr_ÿÎback * ÿÎback ; 770 ià( Œªsãr -> ÿÎback !ð NULL ) 771  FALSE ; 773 ÿÎback = `g_Ãw0 ( Œªsãr_ÿÎback , 1); 774 ÿÎback -> func = func; 775 ÿÎback -> d©a = u£r_d©a ; 777 Œªsãr -> ÿÎback = callback; 779  TRUE ; 780 } } 782  gboÞ—n $»pÜt_´og»ss ( gpoš‹r d©a ) 784  obc_Œªsãr * Œªsãr = d©a ; 786 ià( Œªsãr -> Œªsã¼ed =ðŒªsãr-> ´og»ss ) 787  TRUE ; 789 #ifdeà __TIZEN_PATCH__ 790 ià( Œªsãr -> Œªsã¼ed =ðŒªsãr-> size ) { 791 Œªsãr -> ´og»ss_id = 0; 792 if( Œªsãr -> ´og»ss == 0) { 793 Œªsãr -> ´og»ss =¿nsãr-> Œªsã¼ed ; 794 `Œªsãr_£t_¡©us ( Œªsãr , TRANSFER_STATUS_ACTIVE ); 797  FALSE ; 800 Œªsãr -> ´og»ss =¿nsãr-> Œªsã¼ed ; 802 Œªsãr -> ´og»ss =¿nsãr-> Œªsã¼ed ; 804 ià( Œªsãr -> Œªsã¼ed =ðŒªsãr-> size ) { 805 Œªsãr -> ´og»ss_id = 0; 806  FALSE ; 810 ià( Œªsãr -> ¡©us !ð TRANSFER_STATUS_ACTIVE && 811 Œªsãr -> ¡©us !ð TRANSFER_STATUS_SUSPENDED ) 812 `Œªsãr_£t_¡©us ( Œªsãr , TRANSFER_STATUS_ACTIVE ); 814 `g_dbus_em™_´Ý”ty_chªged ( Œªsãr -> cÚn ,¿nsãr-> ·th , 815 TRANSFER_INTERFACE , "Transferred"); 817  TRUE ; 818 } } 820  gboÞ—n $Œªsãr_¡¬t_g‘ ( obc_Œªsãr * Œªsãr , GE¼Ü ** ”r ) 822 GObexPack‘ * »q ; 823 GObexH—d” * hdr ; 825 ià( Œªsãr -> xãr > 0) { 826 `g_£t_”rÜ ( ”r , OBC_TRANSFER_ERROR , - EALREADY , 828  FALSE ; 831 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_GET , TRUE , G_OBEX_HDR_INVALID ); 833 ià( Œªsãr -> Çme !ð NULL ) 834 `g_obex_·ck‘_add_unicode ( »q , G_OBEX_HDR_NAME , 835 Œªsãr -> Çme ); 837 ià( Œªsãr -> ty³ !ð NULL ) 838 `g_obex_·ck‘_add_by‹s ( »q , G_OBEX_HDR_TYPE , Œªsãr -> ty³ , 839 `¡¾’ ( Œªsãr -> ty³ ) + 1); 841 ià( Œªsãr -> ­·¿m !ð NULL ) { 842 hdr = `g_obex_h—d”_Ãw_­·¿m ( Œªsãr -> ­·¿m ); 843 `g_obex_·ck‘_add_h—d” ( »q , hdr ); 846 Œªsãr -> »q = `g_obex_£nd_»q Ñ¿nsãr-> obex ,„eq, 847 FIRST_PACKET_TIMEOUT , 848 g‘_xãr_´og»ss_fœ¡ , 849 Œªsãr , ”r ); 850 ià( Œªsãr -> »q == 0) 851  FALSE ; 853 ià( Œªsãr -> ·th =ð NULL ) 854  TRUE ; 856 Œªsãr -> ´og»ss_id = `g_timeout_add_£cÚds (1, »pÜt_´og»ss , 857 Œªsãr ); 859  TRUE ; 860 } } 862  gboÞ—n $Œªsãr_¡¬t_put ( obc_Œªsãr * Œªsãr , GE¼Ü ** ”r ) 864 GObexPack‘ * »q ; 865 GObexH—d” * hdr ; 867 ià( Œªsãr -> xãr > 0) { 868 `g_£t_”rÜ ( ”r , OBC_TRANSFER_ERROR , - EALREADY , 870  FALSE ; 873 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_PUT , FALSE , G_OBEX_HDR_INVALID ); 875 ià( Œªsãr -> Çme !ð NULL ) 876 `g_obex_·ck‘_add_unicode ( »q , G_OBEX_HDR_NAME , 877 Œªsãr -> Çme ); 879 ià( Œªsãr -> ty³ !ð NULL ) 880 `g_obex_·ck‘_add_by‹s ( »q , G_OBEX_HDR_TYPE , Œªsãr -> ty³ , 881 `¡¾’ ( Œªsãr -> ty³ ) + 1); 883 ià( Œªsãr -> size < UINT32_MAX ) 884 `g_obex_·ck‘_add_ušt32 ( »q , G_OBEX_HDR_LENGTH , Œªsãr -> size ); 886 ià( Œªsãr -> ­·¿m !ð NULL ) { 887 hdr = `g_obex_h—d”_Ãw_­·¿m ( Œªsãr -> ­·¿m ); 888 `g_obex_·ck‘_add_h—d” ( »q , hdr ); 891 Œªsãr -> xãr = `g_obex_put_»q_pkt Ñ¿nsãr-> obex , »q , 892 put_xãr_´og»ss , xãr_com¶‘e , 893 Œªsãr , ”r ); 894 ià( Œªsãr -> xãr == 0) 895  FALSE ; 897 ià( Œªsãr -> ·th =ð NULL ) 898  TRUE ; 900 #ifdeà __TIZEN_PATCH__ 901 Œªsãr -> ´og»ss_id = `g_timeout_add (10, »pÜt_´og»ss , 902 Œªsãr ); 904 Œªsãr -> ´og»ss_id = `g_timeout_add_£cÚds (1, »pÜt_´og»ss , 905 Œªsãr ); 908  TRUE ; 909 } } 911 gboÞ—n $obc_Œªsãr_¡¬t ( obc_Œªsãr * Œªsãr , * obex , 912 GE¼Ü ** ”r ) 914 ià(! Œªsãr -> obex ) 915 Œªsãr -> obex = `g_obex_»f (obex); 917 ià( Œªsãr -> ¡©us =ð TRANSFER_STATUS_SUSPENDED_QUEUED ) { 919 Œªsãr -> ¡©us = TRANSFER_STATUS_SUSPENDED ; 920  TRUE ; 923  Œªsãr -> Ý ) { 924  G_OBEX_OP_GET : 925  `Œªsãr_¡¬t_g‘ ( Œªsãr , ”r ); 926  G_OBEX_OP_PUT : 927  `Œªsãr_¡¬t_put ( Œªsãr , ”r ); 930 `g_£t_”rÜ ( ”r , OBC_TRANSFER_ERROR , - ENOTSUP , "Not supported"); 931  FALSE ; 932 } } 934 gušt8 $obc_Œªsãr_g‘_Ý”©iÚ ( obc_Œªsãr * Œªsãr ) 936  Œªsãr -> Ý ; 937 } } 939  $obc_Œªsãr_£t_­·¿m ( obc_Œªsãr * Œªsãr , * d©a ) 941 ià( Œªsãr -> ­·¿m !ð NULL ) 942 `g_obex_­·¿m_ä“ ( Œªsãr -> ­·¿m ); 944 ià( d©a =ð NULL ) 947 Œªsãr -> ­·¿m = d©a ; 948 } } 950 * $obc_Œªsãr_g‘_­·¿m ( obc_Œªsãr * Œªsãr ) 952  Œªsãr -> ­·¿m ; 953 } } 955  $obc_Œªsãr_g‘_cÚ‹Ás ( obc_Œªsãr * Œªsãr , ** cÚ‹Ás , 956 size_t * size ) 958  ¡© ¡ ; 959 ssize_t »t ; 961 ià( cÚ‹Ás =ð NULL ) 962  - EINVAL ; 964 ià( `f¡© ( Œªsãr -> fd , & ¡ ) < 0) { 965 `”rÜ ("f¡©(): %s(%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 966  - ”ºo ; 969 ià( `l£ek ( Œªsãr -> fd , 0, SEEK_SET ) < 0) { 970 `”rÜ ("l£ek(): %s(%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 971  - ”ºo ; 974 * cÚ‹Ás = `g_m®loc ( ¡ . ¡_size + 1); 976 »t = `»ad ( Œªsãr -> fd , * cÚ‹Ás , ¡ . ¡_size ); 977 ià( »t < 0) { 978 `”rÜ ("»ad(): %s(%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 979 `g_ä“ (* cÚ‹Ás ); 980  - ”ºo ; 983 (* cÚ‹Ás )[ »t ] = '\0'; 985 ià( size ) 986 * size = »t ; 989 } } 991 cÚ¡ * $obc_Œªsãr_g‘_·th ( obc_Œªsãr * Œªsãr ) 993  Œªsãr -> ·th ; 994 } } 996 gšt64 $obc_Œªsãr_g‘_size ( obc_Œªsãr * Œªsãr ) 998  Œªsãr -> size ; 999 } } @obexd/client/transfer.h 25  gobc_Œªsãr ; 27 (* tŒªsãr_ÿÎback_t è( tobc_Œªsãr * tŒªsãr , 28 tGE¼Ü * t”r , * tu£r_d©a ); 30  obc_Œªsãr * `obc_Œªsãr_g‘ (cÚ¡ * ty³ , cÚ¡ * Çme , 31 cÚ¡ * fž’ame , GE¼Ü ** ”r ); 32  obc_Œªsãr * `obc_Œªsãr_put (cÚ¡ * ty³ , cÚ¡ * Çme , 33 cÚ¡ * fž’ame , 34 cÚ¡ * cÚ‹Ás , size_t size , 35 GE¼Ü ** ”r ); 37 gboÞ—n `obc_Œªsãr_»gi¡” ( obc_Œªsãr * Œªsãr , 38 DBusCÚÃùiÚ * cÚn , 39 cÚ¡ * £ssiÚ , 40 cÚ¡ * owÃr , 41 GE¼Ü ** ”r ); 43  `obc_Œªsãr_uÄegi¡” ( obc_Œªsãr * Œªsãr ); 45 gboÞ—n `obc_Œªsãr_£t_ÿÎback ( obc_Œªsãr * Œªsãr , 46 Œªsãr_ÿÎback_t func , 47 * u£r_d©a ); 49 gboÞ—n `obc_Œªsãr_¡¬t ( obc_Œªsãr * Œªsãr , * obex , 50 GE¼Ü ** ”r ); 51 gušt8 `obc_Œªsãr_g‘_Ý”©iÚ ( obc_Œªsãr * Œªsãr ); 53  `obc_Œªsãr_£t_­·¿m ( obc_Œªsãr * Œªsãr , * d©a ); 54 * `obc_Œªsãr_g‘_­·¿m ( obc_Œªsãr * Œªsãr ); 55  `obc_Œªsãr_g‘_cÚ‹Ás ( obc_Œªsãr * Œªsãr , ** cÚ‹Ás , 56 size_t * size ); 58 cÚ¡ * `obc_Œªsãr_g‘_·th ( obc_Œªsãr * Œªsãr ); 59 gšt64 `obc_Œªsãr_g‘_size ( obc_Œªsãr * Œªsãr ); 61 DBusMes§ge * `obc_Œªsãr_ü—‹_dbus_»¶y ( obc_Œªsãr * Œªsãr , 62 DBusMes§ge * mes§ge ); @obexd/client/transport.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡ršg.h > 29  ~<”ºo.h > 30  ~ 31  ~<š‰y³s.h > 33  ~"Œª¥Üt.h " 34  ~"log.h " 36  GSLi¡ * gŒª¥Üts = NULL ; 38  obc_Œª¥Üt * $obc_Œª¥Üt_fšd (cÚ¡ * Çme ) 40 GSLi¡ * l ; 42  l = Œª¥Üts ;†;† =†-> Ãxt ) { 43  obc_Œª¥Üt * Œª¥Üt = l -> d©a ; 45 ià( `¡rÿ£cmp ( Çme , Œª¥Üt ->name) == 0) 46  Œª¥Üt ; 49  NULL ; 50 } } 52  $obc_Œª¥Üt_»gi¡” ( obc_Œª¥Üt * Œª¥Üt ) 54 ià(! Œª¥Üt ) { 55 `”rÜ ("Invalidransport"); 56  - EINVAL ; 59 ià( `obc_Œª¥Üt_fšd ( Œª¥Üt -> Çme )) { 60 `”rÜ ("Permission denied:ransport %s‡lready„egistered", 61 Œª¥Üt -> Çme ); 62  - EPERM ; 65 `DBG ("Œª¥Üˆ%°Çm% »gi¡”ed", Œª¥Üt ,¿n¥Üt-> Çme ); 67 Œª¥Üts = `g_¦i¡_­³nd Ñ¿n¥Üts, Œª¥Üt ); 70 } } 72  $obc_Œª¥Üt_uÄegi¡” ( obc_Œª¥Üt * Œª¥Üt ) 74 ià(! `g_¦i¡_fšd ( Œª¥Üts , Œª¥Üt )) { 75 `”rÜ ("UÇbËØuÄegi¡”: NØsuch¿n¥Üˆ%p", Œª¥Üt ); 79 `DBG ("Œª¥Üˆ%°Çm% uÄegi¡”ed", Œª¥Üt ,¿n¥Üt-> Çme ); 81 Œª¥Üts = `g_¦i¡_»move Ñ¿n¥Üts, Œª¥Üt ); 82 } } @obexd/client/transport.h 24 (* tobc_Œª¥Üt_func )( tGIOChªÃl * tio , tGE¼Ü * t”r , 25 tgpoš‹r tu£r_d©a ); 27  sobc_Œª¥Üt { 28 cÚ¡ * Çme ; 29 `gušt (* cÚÃù è(cÚ¡ * sourû , cÚ¡ * de¡š©iÚ , 30 cÚ¡ * £rviû , ušt16_t pÜt , 31 obc_Œª¥Üt_func func , * u£r_d©a ); 32 (* g‘·ck‘Ýt è( GIOChªÃl * io , * tx_mtu , * rx_mtu ); 33 (* discÚÃù è( gušt id ); 34 cÚ¡ *(* g‘©Œibu‹ è( gušt id ,  ©Œibu‹_id ); 37  `obc_Œª¥Üt_»gi¡” ( obc_Œª¥Üt * Œª¥Üt ); 38  `obc_Œª¥Üt_uÄegi¡” ( obc_Œª¥Üt * Œª¥Üt ); 39  obc_Œª¥Üt * `obc_Œª¥Üt_fšd (cÚ¡ * Çme ); @obexd/plugins/bluetooth.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<”ºo.h > 30  ~<¡ršg.h > 31  ~ 32  ~<š‰y³s.h > 33  ~ 34  ~ 36  ~ 37  ~ 39  ~"btio/btio.h " 40  ~"lib/uuid.h " 42  ~"obexd.h " 43  ~"¶ugš.h " 44  ~"£rv”.h " 45  ~"obex.h " 46  ~"Œª¥Üt.h " 47  ~"£rviû.h " 48  ~"log.h " 50  #BT_RX_MTU 32767 ) 51  #BT_TX_MTU 32767 ) 53  sblu‘oÙh_´ofže { 54  obex_£rv” * m£rv” ; 55  obex_£rviû_driv” * mdriv” ; 56 * muuid ; 57 * m·th ; 60  GSLi¡ * g´ofžes = NULL ; 62  DBusCÚÃùiÚ * gcÚÃùiÚ = NULL ; 64  DBusMes§ge * $´ofže_»Ëa£ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 65 * d©a ) 67  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 68 } } 70  $cÚÃù_ev’t ( GIOChªÃl * io , GE¼Ü * ”r , * u£r_d©a ) 72  sk = `g_io_chªÃl_unix_g‘_fd ( io ); 73  blu‘oÙh_´ofže * ´ofže = u£r_d©a ; 74  obex_£rv” * £rv” = ´ofže ->server; 75  ty³ ; 76  omtu = BT_TX_MTU ; 77  imtu = BT_RX_MTU ; 78 gboÞ—n ¡»am = TRUE ; 79 sockËn_t Ën = (); 81 ià( ”r ) 82  drÝ ; 84 ià( `g‘sockÝt ( sk , SOL_SOCKET , SO_TYPE , & ty³ , & Ën ) < 0) 85  dÚe ; 87 ià( ty³ !ð SOCK_SEQPACKET ) 88  dÚe ; 90 ¡»am = FALSE ; 93 `bt_io_g‘ ( io , NULL , BT_IO_OPT_OMTU , & omtu , BT_IO_OPT_IMTU , & imtu , 94 BT_IO_OPT_INVALID ); 96 dÚe : 97 ià( `obex_£rv”_Ãw_cÚÃùiÚ ( £rv” , io , omtu , imtu , ¡»am ) < 0) 98 `g_io_chªÃl_shutdown ( io , TRUE , NULL ); 102 drÝ : 103 `”rÜ ("%s", ”r -> mes§ge ); 104 `g_io_chªÃl_shutdown ( io , TRUE , NULL ); 106 } } 108  DBusMes§ge * $šv®id_¬gs ( DBusMes§ge * msg ) 110  `g_dbus_ü—‹_”rÜ ( msg , "org.bluez.Error.InvalidArguments", 112 } } 114  DBusMes§ge * $´ofže_Ãw_cÚÃùiÚ ( DBusCÚÃùiÚ * cÚn , 115 DBusMes§ge * msg , * d©a ) 117 DBusMes§geI‹r ¬gs ; 118 cÚ¡ * deviû ; 119  fd ; 120 GIOChªÃl * io ; 122 `dbus_mes§ge_™”_š™ ( msg , & ¬gs ); 124 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬gs è!ð DBUS_TYPE_OBJECT_PATH ) 125  `šv®id_¬gs ( msg ); 127 `dbus_mes§ge_™”_g‘_basic (& ¬gs , & deviû ); 129 `dbus_mes§ge_™”_Ãxt (& ¬gs ); 131 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬gs è!ð DBUS_TYPE_UNIX_FD ) 132  `šv®id_¬gs ( msg ); 134 `dbus_mes§ge_™”_g‘_basic (& ¬gs , & fd ); 136 ià( fd < 0) { 137 `”rÜ ("bluetooth: NewConnection invalid fd"); 138  `šv®id_¬gs ( msg ); 142 ià( `fúŽ ( fd , F_GETFD ) < 0) { 143 `”rÜ ("blu‘oÙh: fúŽ(%d, F_GETFD): % (%d)", fd , 144 `¡»¼Ü ( ”ºo ),ƒrrno); 145  `šv®id_¬gs ( msg ); 148 io = `g_io_chªÃl_unix_Ãw ( fd ); 149 ià( io =ð NULL ) 150  `šv®id_¬gs ( msg ); 152 `DBG ("deviû %s", deviû ); 154 `cÚÃù_ev’t ( io , NULL , d©a ); 155 `g_io_chªÃl_uÄef ( io ); 157  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 158 } } 160  DBusMes§ge * $´ofže_»que¡_discÚÃùiÚ ( DBusCÚÃùiÚ * cÚn , 161 DBusMes§ge * msg , * d©a ) 163  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 164 } } 166  DBusMes§ge * $´ofže_ÿnûl ( DBusCÚÃùiÚ * cÚn , 167 DBusMes§ge * msg , * d©a ) 169  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 170 } } 172 cÚ¡ GDBusM‘hodTabË g´ofže_m‘hods [] = { 173 { GDBUS_METHOD ("Release", 174 NULL , NULL, 175 ´ofže_»Ëa£ ) }, 176 { GDBUS_METHOD ("NewConnection", 177 GDBUS_ARGS ({ "device", "o" }, { "fd", "h" }, 178 { "ÝtiÚs", "a{sv}" }), NULL , 179 ´ofže_Ãw_cÚÃùiÚ ) }, 180 { GDBUS_METHOD ("RequestDisconnection", 181 GDBUS_ARGS ({ "deviû", "o" }), NULL , 182 ´ofže_»que¡_discÚÃùiÚ ) }, 183 { GDBUS_METHOD ("Cancel", 184 NULL , NULL, 185 ´ofže_ÿnûl ) }, 189  $uÄegi¡”_´ofže ( blu‘oÙh_´ofže * ´ofže ) 191 `g_dbus_uÄegi¡”_š‹rçû ( cÚÃùiÚ , ´ofže -> ·th , 193 `g_ä“ ( ´ofže -> ·th ); 194 ´ofže -> ·th = NULL ; 195 } } 197  $»gi¡”_´ofže_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 199  blu‘oÙh_´ofže * ´ofže = u£r_d©a ; 200 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 201 DBusE¼Ü d”r ; 203 `dbus_”rÜ_š™ (& d”r ); 204 ià(! `dbus_£t_”rÜ_äom_mes§ge (& d”r , »¶y )) { 205 `DBG ("Profž% »gi¡”ed", ´ofže -> ·th ); 206  dÚe ; 209 `uÄegi¡”_´ofže ( ´ofže ); 211 `”rÜ ("blu‘oÙh: Reque¡Profž”rÜ: %s, %s", d”r . Çme , 212 d”r . mes§ge ); 213 `dbus_”rÜ_ä“ (& d”r ); 214 dÚe : 215 `dbus_mes§ge_uÄef ( »¶y ); 216 } } 218  $´ofže_ä“ (* d©a ) 220  blu‘oÙh_´ofže * ´ofže = d©a ; 222 ià( ´ofže -> ·th !ð NULL ) 223 `uÄegi¡”_´ofže ( ´ofže ); 225 `g_ä“ ( ´ofže -> uuid ); 226 `g_ä“ ( ´ofže ); 227 } } 229  $­³nd_v¬ŸÁ ( DBusMes§geI‹r * ™” ,  ty³ , * v® ) 231 DBusMes§geI‹r v®ue ; 232  sig [2] = { ty³ , '\0' }; 234 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_VARIANT , sig , & v®ue ); 236 `dbus_mes§ge_™”_­³nd_basic (& v®ue , ty³ , v® ); 238 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v®ue ); 239 } } 242  $diù_­³nd_’Œy ( DBusMes§geI‹r * diù , 243 cÚ¡ * key ,  ty³ , * v® ) 245 DBusMes§geI‹r ’Œy ; 247 ià( ty³ =ð DBUS_TYPE_STRING ) { 248 cÚ¡ * ¡r = *((cÚ¡ **è v® ); 249 ià( ¡r =ð NULL ) 253 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , 254 NULL , & ’Œy ); 256 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & key ); 258 `­³nd_v¬ŸÁ (& ’Œy , ty³ , v® ); 260 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & ’Œy ); 261 } } 263  $»gi¡”_´ofže ( blu‘oÙh_´ofže * ´ofže ) 265 DBusMes§ge * msg ; 266 DBusMes§geI‹r ™” , Ýt ; 267 DBusP’dšgC®l * ÿÎ ; 268 dbus_boÞ_t auto_cÚÃù = FALSE ; 269 * xml ; 270  »t = 0; 272 ´ofže -> ·th = `g_¡rcÚÿt ("/Üg/bluez/obex/",…rofže-> uuid , NULL ); 273 `g_¡rd–im™ ( ´ofže -> ·th , "-", '_'); 275 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚÃùiÚ , ´ofže -> ·th , 276 "Üg.bluez.Profže1", ´ofže_m‘hods , 277 NULL , NULL, 278 ´ofže , NULL )) { 279 `”rÜ ("D-Bu çžedØ»gi¡” %s", ´ofže -> ·th ); 280 `g_ä“ ( ´ofže -> ·th ); 281 ´ofže -> ·th = NULL ; 285 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ("org.bluez", "/org/bluez", 289 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 291 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_OBJECT_PATH , 292 & ´ofže -> ·th ); 293 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_STRING , 294 & ´ofže -> uuid ); 295 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 296 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 297 DBUS_TYPE_STRING_AS_STRING 298 DBUS_TYPE_VARIANT_AS_STRING 299 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 300 & Ýt ); 301 `diù_­³nd_’Œy (& Ýt , "AutoCÚÃù", DBUS_TYPE_BOOLEAN , 302 & auto_cÚÃù ); 303 ià( ´ofže -> driv” -> »cÜd ) { 304 ià( ´ofže -> driv” -> pÜt != 0) 305 xml = `g_m¬kup_´štf_esÿ³d ( ´ofže -> driv” -> »cÜd , 306 ´ofže -> driv” -> chªÃl , 307 ´ofže -> driv” -> Çme , 308 ´ofže -> driv” -> pÜt ); 310 xml = `g_m¬kup_´štf_esÿ³d ( ´ofže -> driv” -> »cÜd , 311 ´ofže -> driv” -> chªÃl , 312 ´ofže -> driv” -> Çme ); 313 `diù_­³nd_’Œy (& Ýt , "S”viûRecÜd", DBUS_TYPE_STRING , 314 & xml ); 315 `g_ä“ ( xml ); 317 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & Ýt ); 319 ià(! `g_dbus_£nd_mes§ge_w™h_»¶y ( cÚÃùiÚ , msg , & ÿÎ , -1)) { 320 »t = -1; 321 `uÄegi¡”_´ofže ( ´ofže ); 322  çžed ; 325 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , »gi¡”_´ofže_»¶y , ´ofže , 326 NULL ); 327 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 329 çžed : 330 `dbus_mes§ge_uÄef ( msg ); 331  »t ; 332 } } 334 cÚ¡ * $£rviû2uuid ( ušt16_t £rviû ) 336  £rviû ) { 337  OBEX_OPP : 338  OBEX_OPP_UUID ; 339  OBEX_FTP : 340  OBEX_FTP_UUID ; 341  OBEX_PBAP : 342  OBEX_PSE_UUID ; 343  OBEX_IRMC : 344  OBEX_SYNC_UUID ; 345  OBEX_PCSUITE : 347  OBEX_SYNCEVOLUTION : 349  OBEX_MAS : 350  OBEX_MAS_UUID ; 351  OBEX_MNS : 352  OBEX_MNS_UUID ; 355  NULL ; 356 } } 358  $Çme_acquœed ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 360 GSLi¡ * l ; 362 `DBG ("org.bluez‡ppeared"); 364  l = ´ofžes ;†;† =†-> Ãxt ) { 365  blu‘oÙh_´ofže * ´ofže = l -> d©a ; 367 ià( ´ofže -> ·th !ð NULL ) 370 ià( `»gi¡”_´ofže ( ´ofže ) < 0) { 371 `”rÜ ("bluetooth: Failedo„egister…rofile %s", 372 ´ofže -> ·th ); 373 `g_ä“ ( ´ofže -> ·th ); 374 ´ofže -> ·th = NULL ; 377 } } 379  $Çme_»Ëa£d ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 381 GSLi¡ * l ; 383 `DBG ("org.bluez disappered"); 385  l = ´ofžes ;†;† =†-> Ãxt ) { 386  blu‘oÙh_´ofže * ´ofže = l -> d©a ; 388 ià( ´ofže -> ·th =ð NULL ) 391 `uÄegi¡”_´ofže ( ´ofže ); 393 } } 395 * $blu‘oÙh_¡¬t ( obex_£rv” * £rv” , * ”r ) 397 cÚ¡ GSLi¡ * l ; 399  l = £rv” -> driv”s ;†;† =†-> Ãxt ) { 400  obex_£rviû_driv” * driv” = l -> d©a ; 401  blu‘oÙh_´ofže * ´ofže ; 402 cÚ¡ * uuid ; 404 uuid = `£rviû2uuid ( driv” -> £rviû ); 405 ià( uuid =ð NULL ) 408 ´ofže = `g_Ãw0 ( blu‘oÙh_´ofže , 1); 409 ´ofže -> driv” = driver; 410 ´ofže -> £rv” = server; 411 ´ofže -> uuid = `g_¡rdup (uuid); 413 ´ofžes = `g_¦i¡_´•’d Õrofžes, ´ofže ); 416  ´ofžes ; 417 } } 419  $blu‘oÙh_¡Ý (* d©a ) 421 `g_¦i¡_ä“_fuÎ ( ´ofžes , ´ofže_ä“ ); 422 ´ofžes = NULL ; 423 } } 425  $blu‘oÙh_g‘³”Çme ( GIOChªÃl * io , ** Çme ) 427 GE¼Ü * g”r = NULL ; 428  add»ss [18]; 430 `bt_io_g‘ ( io , & g”r , BT_IO_OPT_DEST , add»ss , BT_IO_OPT_INVALID ); 432 ià( g”r ) { 433 `”rÜ ("%s", g”r -> mes§ge ); 434 `g_”rÜ_ä“ ( g”r ); 435  - EINVAL ; 438 * Çme = `g_¡rdup ( add»ss ); 441 } } 443  $blu‘oÙh_g‘sockÇme ( GIOChªÃl * io , ** Çme ) 445 GE¼Ü * g”r = NULL ; 446  add»ss [18]; 448 `bt_io_g‘ ( io , & g”r , BT_IO_OPT_SOURCE , add»ss , BT_IO_OPT_INVALID ); 450 ià( g”r ) { 451 `”rÜ ("%s", g”r -> mes§ge ); 452 `g_”rÜ_ä“ ( g”r ); 453  - EINVAL ; 456 * Çme = `g_¡rdup ( add»ss ); 459 } } 461  obex_Œª¥Üt_driv” gdriv” = { 462 . Çme = "bluetooth", 463 . g¡¬t = blu‘oÙh_¡¬t , 464 . gg‘³”Çme = blu‘oÙh_g‘³”Çme , 465 . gg‘sockÇme = blu‘oÙh_g‘sockÇme , 466 . g¡Ý = blu‘oÙh_¡Ý 469  gli¡’”_id = 0; 471  $blu‘oÙh_š™ () 473 cÚÃùiÚ = `g_dbus_£tup_´iv©e ( DBUS_BUS_SYSTEM , NULL , NULL); 474 ià( cÚÃùiÚ =ð NULL ) 475  - EPERM ; 477 li¡’”_id = `g_dbus_add_£rviû_w©ch ( cÚÃùiÚ , "org.bluez", 478 Çme_acquœed , Çme_»Ëa£d , NULL , NULL); 480  `obex_Œª¥Üt_driv”_»gi¡” (& driv” ); 481 } } 483  $blu‘oÙh_ex™ () 485 `g_dbus_»move_w©ch ( cÚÃùiÚ , li¡’”_id ); 487 `g_¦i¡_ä“_fuÎ ( ´ofžes , ´ofže_ä“ ); 489 ià( cÚÃùiÚ ) 490 `dbus_cÚÃùiÚ_uÄef ( cÚÃùiÚ ); 492 `obex_Œª¥Üt_driv”_uÄegi¡” (& driv” ); 493 } } 495 OBEX_PLUGIN_DEFINE ( blu‘oÙh , blu‘oÙh_š™ , blu‘oÙh_ex™ ) @obexd/plugins/filesystem.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<¡dlib.h > 32  ~<¡ršg.h > 33  ~ 34  ~ 35  ~ 36  ~ 37  ~ 38  ~ 39  ~ 40  ~ 41  ~<š‰y³s.h > 43  ~ 45  ~"obexd.h " 46  ~"¶ugš.h " 47  ~"log.h " 48  ~"mim‘y³.h " 49  ~"fžesy¡em.h " 51  #EOL_CHARS "\n" ) 53  #FL_VERSION "" EOL_CHARS ) 55  #FL_TYPE "" EOL_CHARS ) 57  #FL_TYPE_PCSUITE " ]>" EOL_CHARS ) 60  #FL_BODY_BEGIN "" EOL_CHARS ) 62  #FL_BODY_END "" EOL_CHARS ) 64  #FL_PARENT_FOLDER_ELEMENT "<·»Á-fÞd”/>" EOL_CHARS ) 66  #FL_FILE_ELEMENT "" EOL_CHARS ) 70  #FL_FOLDER_ELEMENT "" EOL_CHARS ) 73  #FL_FOLDER_ELEMENT_PCSUITE "" EOL_CHARS ) 77  #FTP_TARGET_SIZE 16 ) 79 cÚ¡ ušt8_t gFTP_TARGET [ FTP_TARGET_SIZE ] = { 83  #PCSUITE_WHO_SIZE 8 ) 85 cÚ¡ ušt8_t gPCSUITE_WHO [ PCSUITE_WHO_SIZE ] = { 88 gboÞ—n $is_fž’ame (cÚ¡ * Çme ) 90 ià( `¡rchr ( Çme , '/')) 91  FALSE ; 93 ià( `¡rcmp ( Çme , ".") == 0) 94  FALSE ; 96 ià( `¡rcmp ( Çme , "..") == 0) 97  FALSE ; 99  TRUE ; 100 } } 102  $v”ify_·th (cÚ¡ * ·th ) 104 * t ; 105  »t = 0; 107 ià( `obex_ÝtiÚ_symlšks ()) 110 t = `»®·th ( ·th , NULL ); 111 ià( t =ð NULL ) 112  - ”ºo ; 114 ià(! `g_¡r_has_´efix ( t , `obex_ÝtiÚ_roÙ_fÞd” ())) 115 »t = - EPERM ; 117 `ä“ ( t ); 119  »t ; 120 } } 122 * $fže_¡©_lše (* fž’ame ,  ¡© * f¡© , 123  ¡© * d¡© , gboÞ—n roÙ , 124 gboÞ—n pcsu™e ) 126  ³rm [51], ©ime [18], ùime [18], mtime [18]; 127 * esÿ³d , * »t = NULL ; 129 `¢´štf ( ³rm , 50, "user-perm=\"%s%s%s\" group-perm=\"%s%s%s\" " 131 ( f¡© -> ¡_mode & S_IRUSR ? "R" : ""), 132 ( f¡© -> ¡_mode & S_IWUSR ? "W" : ""), 133 ( d¡© -> ¡_mode & S_IWUSR ? "D" : ""), 134 ( f¡© -> ¡_mode & S_IRGRP ? "R" : ""), 135 ( f¡© -> ¡_mode & S_IWGRP ? "W" : ""), 136 ( d¡© -> ¡_mode & S_IWGRP ? "D" : ""), 137 ( f¡© -> ¡_mode & S_IROTH ? "R" : ""), 138 ( f¡© -> ¡_mode & S_IWOTH ? "W" : ""), 139 ( d¡© -> ¡_mode & S_IWOTH ? "D" : "")); 141 `¡ráime ( ©ime , 17, "%Y%m%dT%H%M%SZ", `gmtime (& f¡© -> ¡_©ime )); 142 `¡ráime ( ùime , 17, "%Y%m%dT%H%M%SZ", `gmtime (& f¡© -> ¡_ùime )); 143 `¡ráime ( mtime , 17, "%Y%m%dT%H%M%SZ", `gmtime (& f¡© -> ¡_mtime )); 145 esÿ³d = `g_m¬kup_esÿ³_‹xt ( fž’ame , -1); 147 ià( `S_ISDIR ( f¡© -> ¡_mode )) { 148 ià( pcsu™e && roÙ && `g_¡r_equ® ( fž’ame , "Data")) 149 »t = `g_¡rdup_´štf ( FL_FOLDER_ELEMENT_PCSUITE , 150 esÿ³d , ³rm , ©ime , 151 mtime , ùime ); 153 »t = `g_¡rdup_´štf ( FL_FOLDER_ELEMENT , esÿ³d , ³rm , 154 ©ime , mtime , ùime ); 155 } ià( `S_ISREG ( f¡© -> ¡_mode )) 156 »t = `g_¡rdup_´štf ( FL_FILE_ELEMENT , esÿ³d , 157 ( ušt64_t è f¡© -> ¡_size , 158 ³rm , ©ime , mtime , ùime ); 160 `g_ä“ ( esÿ³d ); 162  »t ; 163 } } 165 * $fžesy¡em_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 166 * cÚ‹xt , size_t * size , * ”r ) 168  ¡© ¡©s ; 169  ¡©vfs buf ; 170  fd , »t ; 171 ušt64_t avaž ; 173 fd = `Ý’ ( Çme , oæag , mode ); 174 ià( fd < 0) { 175 ià( ”r ) 176 * ”r = - ”ºo ; 177  NULL ; 180 ià( `f¡© ( fd , & ¡©s ) < 0) { 181 ià( ”r ) 182 * ”r = - ”ºo ; 183  çžed ; 186 »t = `v”ify_·th ( Çme ); 187 ià( »t < 0) { 188 ià( ”r ) 189 * ”r = »t ; 190  çžed ; 193 ià( oæag =ð O_RDONLY ) { 194 ià( size ) 195 * size = ¡©s . ¡_size ; 196  dÚe ; 199 ià( `f¡©vfs ( fd , & buf ) < 0) { 200 ià( ”r ) 201 * ”r = - ”ºo ; 202  çžed ; 205 ià( size =ð NULL ) 206  dÚe ; 208 avaž = ( ušt64_t è buf . f_bsize * buf. f_bavaž ; 209 ià( avaž < * size ) { 210 ià( ”r ) 211 * ”r = - ENOSPC ; 212  çžed ; 215 dÚe : 216 ià( ”r ) 217 * ”r = 0; 219  `GINT_TO_POINTER ( fd ); 221 çžed : 222 `þo£ ( fd ); 223  NULL ; 224 } } 226  $fžesy¡em_þo£ (* objeù ) 228 ià( `þo£ ( `GPOINTER_TO_INT ( objeù )) < 0) 229  - ”ºo ; 232 } } 234  ssize_t $fžesy¡em_»ad (* objeù , * buf , size_t couÁ ) 236 ssize_t »t ; 238 »t = `»ad ( `GPOINTER_TO_INT ( objeù ), buf , couÁ ); 239 ià( »t < 0) 240  - ”ºo ; 242  »t ; 243 } } 245  ssize_t $fžesy¡em_wr™e (* objeù , cÚ¡ * buf , size_t couÁ ) 247 ssize_t »t ; 249 »t = `wr™e ( `GPOINTER_TO_INT ( objeù ), buf , couÁ ); 250 ià( »t < 0) 251  - ”ºo ; 253  »t ; 254 } } 256  $fžesy¡em_»Çme (cÚ¡ * Çme , cÚ¡ * de¡Çme ) 258  »t ; 260 »t = `»Çme ( Çme , de¡Çme ); 261 ià( »t < 0) { 262 `”rÜ ("»Çme(%s, %s): % (%d)", Çme , de¡Çme , 263 `¡»¼Ü ( ”ºo ),ƒrrno); 264  - ”ºo ; 267  »t ; 268 } } 270  $£ndfže_async ( out_fd ,  š_fd , off_t * off£t , size_t couÁ ) 272  pid ; 275 pid = `fÜk (); 276  pid ) { 280 `”rÜ ("fÜk(è% (%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 281  - ”ºo ; 283 `DBG ("chžd %d fÜked", pid ); 284  pid ; 288 ià( `£ndfže ( out_fd , š_fd , off£t , couÁ ) < 0) 289 `”rÜ ("£ndfže(): % (%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 291 `þo£ ( š_fd ); 292 `þo£ ( out_fd ); 294 `ex™ ( ”ºo ); 295 } } 297  $fžesy¡em_cÝy (cÚ¡ * Çme , cÚ¡ * de¡Çme ) 299 * š , * out ; 300 ssize_t »t ; 301 size_t size ; 302  ¡© ¡ ; 303  š_fd , out_fd , ”r ; 305 š = `fžesy¡em_Ý’ ( Çme , O_RDONLY , 0, NULL , & size , & ”r ); 306 ià( š =ð NULL ) { 307 `”rÜ ("Ý’(%s): % (%d)", Çme , `¡»¼Ü (- ”r ), -err); 308  - ”r ; 311 š_fd = `GPOINTER_TO_INT ( š ); 312 »t = `f¡© ( š_fd , & ¡ ); 313 ià( »t < 0) { 314 `”rÜ ("¡©(%s): % (%d)", Çme , `¡»¼Ü ( ”ºo ),ƒrrno); 315  - ”ºo ; 318 out = `fžesy¡em_Ý’ ( de¡Çme , O_WRONLY | O_CREAT | O_TRUNC , 319 ¡ . ¡_mode , NULL , & size , & ”r ); 320 ià( out =ð NULL ) { 321 `”rÜ ("Ý’(%s): % (%d)", de¡Çme , `¡»¼Ü (- ”r ), -err); 322 `fžesy¡em_þo£ ( š ); 323  - ”ºo ; 326 out_fd = `GPOINTER_TO_INT ( out ); 329 »t = `£ndfže ( out_fd , š_fd , NULL , 0); 330 ià( »t < 0) { 331 »t = - ”ºo ; 332 `”rÜ ("£ndfže: % (%zd)", `¡»¼Ü (- »t ), -ret); 333  dÚe ; 336 »t = `£ndfže_async ( out_fd , š_fd , NULL , ¡ . ¡_size ); 337 ià( »t < 0) 338  dÚe ; 342 dÚe : 343 `fžesy¡em_þo£ ( š ); 344 `fžesy¡em_þo£ ( out ); 346  »t ; 347 } } 349  sÿ·bž™y_objeù { 350  mpid ; 351  mouut ; 352  m”r ; 353 gboÞ—n mabÜ‹d ; 354 GSŒšg * mbufãr ; 357  $süt_ex™ed ( GPid pid ,  ¡©us , * d©a ) 359  ÿ·bž™y_objeù * objeù = d©a ; 360  buf [128]; 362 objeù -> pid = -1; 364 `DBG ("pid: %d stus: %d", pid , ¡©us ); 366 `g_¥awn_þo£_pid ( pid ); 369 ià( objeù -> abÜ‹d ) { 370 ià( objeù -> bufãr !ð NULL ) 371 `g_¡ršg_ä“ ( objeù -> bufãr , TRUE ); 373 `g_ä“ ( objeù ); 377 ià( `WEXITSTATUS ( ¡©us è!ð EXIT_SUCCESS ) { 378 `mem£t ( buf , 0, (buf)); 379 ià( `»ad ( objeù -> ”r , buf , (buf)) > 0) 380 `”rÜ ("%s", buf ); 381 `obex_objeù_£t_io_æags ( d©a , G_IO_ERR , - EPERM ); 383 `obex_objeù_£t_io_æags ( d©a , G_IO_IN , 0); 384 } } 386  $ÿ·bž™y_exec (cÚ¡ ** ¬gv , * ouut , * ”r ) 388 GE¼Ü * g”r = NULL ; 389  pid ; 390 GS·wnFÏgs æags = G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH ; 392 ià(! `g_¥awn_async_w™h_pes ( NULL , (**è ¬gv , NULL, æags , NULL, 393 NULL , & pid , NULL, ouut , ”r , & g”r )) { 394 `”rÜ ("%s", g”r -> mes§ge ); 395 `g_”rÜ_ä“ ( g”r ); 396  - EPERM ; 399 `DBG ("executšg % pid %d", ¬gv [0], pid ); 401  pid ; 402 } } 404 * $ÿ·bž™y_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 405 * cÚ‹xt , size_t * size , * ”r ) 407  ÿ·bž™y_objeù * objeù = NULL ; 408 * buf ; 409 cÚ¡ * ¬gv [2]; 411 ià( oæag !ð O_RDONLY ) 412  çž ; 414 objeù = `g_Ãw0 ( ÿ·bž™y_objeù , 1); 415 objeù -> pid = -1; 416 objeù -> ouut = -1; 417 objeù -> ”r = -1; 419 ià( Çme [0] != '!') { 420 GE¼Ü * g”r = NULL ; 421 gboÞ—n »t ; 423 »t = `g_fže_g‘_cÚ‹Ás ( Çme , & buf , NULL , & g”r ); 424 ià( »t =ð FALSE ) { 425 `”rÜ ("%s", g”r -> mes§ge ); 426 `g_”rÜ_ä“ ( g”r ); 427  çž ; 430 objeù -> bufãr = `g_¡ršg_Ãw ( buf ); 432 ià( size ) 433 * size = objeù -> bufãr -> Ën ; 435  dÚe ; 438 ¬gv [0] = & Çme [1]; 439 ¬gv [1] = NULL ; 441 objeù -> pid = `ÿ·bž™y_exec ( ¬gv , &objeù-> ouut , &objeù-> ”r ); 442 ià( objeù -> pid < 0) 443  çž ; 446 `g_chžd_w©ch_add ( objeù -> pid , süt_ex™ed , object); 448 dÚe : 449 ià( ”r ) 450 * ”r = 0; 452  objeù ; 454 çž : 455 ià( ”r ) 456 * ”r = - EPERM ; 458 `g_ä“ ( objeù ); 459  NULL ; 460 } } 462  GSŒšg * $­³nd_pcsu™e_´—mbË ( GSŒšg * objeù ) 464  `g_¡ršg_­³nd ( objeù , FL_TYPE_PCSUITE ); 465 } } 467  GSŒšg * $­³nd_fÞd”_´—mbË ( GSŒšg * objeù ) 469  `g_¡ršg_­³nd ( objeù , FL_TYPE ); 470 } } 472  GSŒšg * $­³nd_li¡šg ( GSŒšg * objeù , cÚ¡ * Çme , 473 gboÞ—n pcsu™e , size_t * size , * ”r ) 475  ¡© f¡© , d¡© ; 476  dœ’t * • ; 477 DIR * dp ; 478 gboÞ—n roÙ ; 479  »t ; 481 roÙ = `g_¡r_equ® ( Çme , `obex_ÝtiÚ_roÙ_fÞd” ()); 483 dp = `Ý’dœ ( Çme ); 484 ià( dp =ð NULL ) { 485 ià( ”r ) 486 * ”r = - ENOENT ; 487  çžed ; 490 ià(! roÙ ) 491 objeù = `g_¡ršg_­³nd (objeù, FL_PARENT_FOLDER_ELEMENT ); 493 »t = `v”ify_·th ( Çme ); 494 ià( »t < 0) { 495 * ”r = »t ; 496  çžed ; 499 »t = `¡© ( Çme , & d¡© ); 500 ià( »t < 0) { 501 ià( ”r ) 502 * ”r = - ”ºo ; 503  çžed ; 506 ( • = `»addœ ( dp ))) { 507 * fž’ame ; 508 * fuÎÇme ; 509 * lše ; 511 ià( • -> d_Çme [0] == '.') 514 fž’ame = `g_fž’ame_to_utf8 ( • -> d_Çme , -1, NULL , NULL, NULL); 515 ià( fž’ame =ð NULL ) { 516 `”rÜ ("g_filename_to_utf8: invalid filename"); 520 fuÎÇme = `g_bužd_fž’ame ( Çme , • -> d_Çme , NULL ); 522 »t = `¡© ( fuÎÇme , & f¡© ); 523 ià( »t < 0) { 524 `DBG ("¡©: %s(%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 525 `g_ä“ ( fž’ame ); 526 `g_ä“ ( fuÎÇme ); 530 `g_ä“ ( fuÎÇme ); 532 lše = `fže_¡©_lše ( fž’ame , & f¡© , & d¡© , roÙ , FALSE ); 533 ià( lše =ð NULL ) { 534 `g_ä“ ( fž’ame ); 538 `g_ä“ ( fž’ame ); 540 objeù = `g_¡ršg_­³nd (objeù, lše ); 541 `g_ä“ ( lše ); 544 `þo£dœ ( dp ); 546 objeù = `g_¡ršg_­³nd (objeù, FL_BODY_END ); 547 ià( size ) 548 * size = objeù -> Ën ; 550 ià( ”r ) 551 * ”r = 0; 553  objeù ; 555 çžed : 556 ià( dp ) 557 `þo£dœ ( dp ); 559 `g_¡ršg_ä“ ( objeù , TRUE ); 560  NULL ; 561 } } 563 * $fÞd”_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 564 * cÚ‹xt , size_t * size , * ”r ) 566 GSŒšg * objeù ; 568 objeù = `g_¡ršg_Ãw ( FL_VERSION ); 569 objeù = `­³nd_fÞd”_´—mbË (object); 570 objeù = `g_¡ršg_­³nd (objeù, FL_BODY_BEGIN ); 572  `­³nd_li¡šg ( objeù , Çme , FALSE , size , ”r ); 573 } } 575 * $pcsu™e_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 576 * cÚ‹xt , size_t * size , * ”r ) 578 GSŒšg * objeù ; 580 objeù = `g_¡ršg_Ãw ( FL_VERSION ); 581 objeù = `­³nd_pcsu™e_´—mbË (object); 582 objeù = `g_¡ršg_­³nd (objeù, FL_BODY_BEGIN ); 584  `­³nd_li¡šg ( objeù , Çme , TRUE , size , ”r ); 585 } } 587  $¡ršg_ä“ (* objeù ) 589 GSŒšg * ¡ršg = objeù ; 591 `g_¡ršg_ä“ ( ¡ršg , TRUE ); 594 } } 596 ssize_t $¡ršg_»ad (* objeù , * buf , size_t couÁ ) 598 GSŒšg * ¡ršg = objeù ; 599 ssize_t Ën ; 601 ià( ¡ršg -> Ën == 0) 604 Ën = `MIN ( ¡ršg ->Ën, couÁ ); 605 `memýy ( buf , ¡ršg -> ¡r , Ën ); 606 `g_¡ršg_”a£ ( ¡ršg , 0, Ën ); 608  Ën ; 609 } } 611  ssize_t $fÞd”_»ad (* objeù , * buf , size_t couÁ ) 613  `¡ršg_»ad ( objeù , buf , couÁ ); 614 } } 616  ssize_t $ÿ·bž™y_»ad (* objeù , * buf , size_t couÁ ) 618  ÿ·bž™y_objeù * obj = objeù ; 620 ià( obj -> bufãr ) 621  `¡ršg_»ad ( obj -> bufãr , buf , couÁ ); 623 ià( obj -> pid >= 0) 624  - EAGAIN ; 626  `»ad ( obj -> ouut , buf , couÁ ); 627 } } 629  $ÿ·bž™y_þo£ (* objeù ) 631  ÿ·bž™y_objeù * obj = objeù ; 632  ”r = 0; 634 ià( obj -> pid < 0) 635  dÚe ; 637 `DBG ("kžl:…id %d", obj -> pid ); 638 ”r = `kžl ( obj -> pid , SIGTERM ); 639 ià( ”r < 0) { 640 ”r = - ”ºo ; 641 `”rÜ ("kžl: % (%d)", `¡»¼Ü (- ”r ), -err); 642  dÚe ; 645 obj -> abÜ‹d = TRUE ; 648 dÚe : 649 ià( obj -> bufãr !ð NULL ) 650 `g_¡ršg_ä“ ( obj -> bufãr , TRUE ); 652 `g_ä“ ( obj ); 654  ”r ; 655 } } 657  obex_mime_ty³_driv” gfže = { 658 . Ý’ = fžesy¡em_Ý’ , 659 . gþo£ = fžesy¡em_þo£ , 660 . g»ad = fžesy¡em_»ad , 661 . gwr™e = fžesy¡em_wr™e , 662 . g»move = »move , 663 . gmove = fžesy¡em_»Çme , 664 . gcÝy = fžesy¡em_cÝy , 667  obex_mime_ty³_driv” gÿ·bž™y = { 668 . rg‘ = FTP_TARGET , 669 . grg‘_size = FTP_TARGET_SIZE , 670 . gmim‘y³ = "x-obex/capability", 671 . gÝ’ = ÿ·bž™y_Ý’ , 672 . gþo£ = ÿ·bž™y_þo£ , 673 . g»ad = ÿ·bž™y_»ad , 676  obex_mime_ty³_driv” gfÞd” = { 677 . rg‘ = FTP_TARGET , 678 . grg‘_size = FTP_TARGET_SIZE , 679 . gmim‘y³ = "x-obex/folder-listing", 680 . gÝ’ = fÞd”_Ý’ , 681 . gþo£ = ¡ršg_ä“ , 682 . g»ad = fÞd”_»ad , 685  obex_mime_ty³_driv” gpcsu™e = { 686 . rg‘ = FTP_TARGET , 687 . grg‘_size = FTP_TARGET_SIZE , 688 . gwho = PCSUITE_WHO , 689 . gwho_size = PCSUITE_WHO_SIZE , 690 . gmim‘y³ = "x-obex/folder-listing", 691 . gÝ’ = pcsu™e_Ý’ , 692 . gþo£ = ¡ršg_ä“ , 693 . g»ad = fÞd”_»ad , 696  $fžesy¡em_š™ () 698  ”r ; 700 ”r = `obex_mime_ty³_driv”_»gi¡” (& fÞd” ); 701 ià( ”r < 0) 702  ”r ; 704 ”r = `obex_mime_ty³_driv”_»gi¡” (& ÿ·bž™y ); 705 ià( ”r < 0) 706  ”r ; 708 ”r = `obex_mime_ty³_driv”_»gi¡” (& pcsu™e ); 709 ià( ”r < 0) 710  ”r ; 712  `obex_mime_ty³_driv”_»gi¡” (& fže ); 713 } } 715  $fžesy¡em_ex™ () 717 `obex_mime_ty³_driv”_uÄegi¡” (& fÞd” ); 718 `obex_mime_ty³_driv”_uÄegi¡” (& ÿ·bž™y ); 719 `obex_mime_ty³_driv”_uÄegi¡” (& fže ); 720 } } 722 OBEX_PLUGIN_DEFINE ( fžesy¡em , fžesy¡em_š™ , fžesy¡em_ex™ ) @obexd/plugins/filesystem.h 24 ssize_t ¡ršg_»ad (* objeù , * buf , size_t couÁ ); 25 gboÞ—n is_fž’ame (cÚ¡ * Çme ); 26  v”ify_·th (cÚ¡ * ·th ); @obexd/plugins/ftp.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~ 30  ~<¡dio.h > 31  ~<”ºo.h > 32  ~<¡dlib.h > 33  ~<¡ršg.h > 34  ~ 35  ~ 36  ~ 37  ~ 38  ~ 39  ~<š‰y³s.h > 41  ~ 43  ~"obexd.h " 44  ~"¶ugš.h " 45  ~"log.h " 46  ~"obex.h " 47  ~"mªag”.h " 48  ~"mim‘y³.h " 49  ~"£rviû.h " 50  ~"áp.h " 51  ~"fžesy¡em.h " 53  #LST_TYPE "x-obex/fÞd”-li¡šg" ) 54  #CAP_TYPE "x-obex/ÿ·bž™y" ) 56 cÚ¡ ušt8_t gFTP_TARGET [ TARGET_SIZE ] = { 60  sáp_£ssiÚ { 61  obex_£ssiÚ * mos ; 62  obex_Œªsãr * mŒªsãr ; 63 * mfÞd” ; 66  $£t_fÞd” ( áp_£ssiÚ * áp , cÚ¡ * Ãw_fÞd” ) 68 `DBG ("%°fÞd” %s", áp , Ãw_fÞd” ); 70 `g_ä“ ( áp -> fÞd” ); 72 áp -> fÞd” = Ãw_fÞd” ? `g_¡rdup Òew_fÞd”è: NULL ; 73 } } 75  $g‘_by_ty³ ( áp_£ssiÚ * áp , cÚ¡ * ty³ ) 77  obex_£ssiÚ * os = áp ->os; 78 cÚ¡ * ÿ·bž™y = `obex_ÝtiÚ_ÿ·bž™y (); 79 cÚ¡ * Çme = `obex_g‘_Çme ( os ); 80 * ·th ; 81  ”r ; 83 `DBG ("%°Çm% ty³ %s", áp , Çme , ty³ ); 85 ià( ty³ =ð NULL && Çme == NULL) 86  - EBADR ; 88 ià( ty³ !ð NULL && `g_ascii_¡rÿ£cmp Ñy³, CAP_TYPE ) == 0) 89  `obex_g‘_¡»am_¡¬t ( os , ÿ·bž™y ); 91 ià( Çme !ð NULL && ! `is_fž’ame (name)) 92  - EBADR ; 94 ·th = `g_bužd_fž’ame ( áp -> fÞd” , Çme , NULL ); 95 ”r = `obex_g‘_¡»am_¡¬t ( os , ·th ); 97 `g_ä“ ( ·th ); 99  ”r ; 100 } } 102 * $áp_cÚÃù ( obex_£ssiÚ * os , * ”r ) 104  áp_£ssiÚ * áp ; 105 cÚ¡ * roÙ_fÞd” ; 107 `DBG (""); 109 roÙ_fÞd” = `obex_ÝtiÚ_roÙ_fÞd” (); 111 `mªag”_»gi¡”_£ssiÚ ( os ); 113 áp = `g_Ãw0 ( áp_£ssiÚ , 1); 114 `£t_fÞd” ( áp , roÙ_fÞd” ); 115 áp -> os = os; 117 ià( ”r ) 118 * ”r = 0; 120 áp -> Œªsãr = `mªag”_»gi¡”_Œªsãr ( os ); 122 `DBG ("£ssiÚ %°ü—‹d", áp ); 124  áp ; 125 } } 127  $áp_g‘ ( obex_£ssiÚ * os , * u£r_d©a ) 129  áp_£ssiÚ * áp = u£r_d©a ; 130 cÚ¡ * ty³ = `obex_g‘_ty³ ( os ); 131  »t ; 133 `DBG ("%p", áp ); 135 ià( áp -> fÞd” =ð NULL ) 136  - ENOENT ; 138 »t = `g‘_by_ty³ ( áp , ty³ ); 139 ià( »t < 0) 140  »t ; 143 ià( ty³ =ð NULL ) 144 `mªag”_em™_Œªsãr_¡¬‹d ( áp -> Œªsãr ); 147 } } 149  $áp_d–‘e ( áp_£ssiÚ * áp , cÚ¡ * Çme ) 151 * ·th ; 152  »t = 0; 154 `DBG ("%°Çm%s", áp , Çme ); 156 ià(!( áp -> fÞd” && Çme )) 157  - EINVAL ; 159 ·th = `g_bužd_fž’ame ( áp -> fÞd” , Çme , NULL ); 161 ià( `obex_»move ( áp -> os , ·th ) < 0) 162 »t = - ”ºo ; 164 `g_ä“ ( ·th ); 166  »t ; 167 } } 169  $áp_chkput ( obex_£ssiÚ * os , * u£r_d©a ) 171  áp_£ssiÚ * áp = u£r_d©a ; 172 cÚ¡ * Çme = `obex_g‘_Çme ( os ); 173 #ifdeà TIZEN_PATCH 174 * fÞd” ; 175 št32_t time ; 176  ”r ; 178 * ·th ; 179  »t ; 181 `DBG ("%°Çm%s", áp , Çme ); 183 ià( Çme =ð NULL ) 184  - EBADR ; 186 ià(! `is_fž’ame ( Çme )) 187  - EBADR ; 189 ià( `obex_g‘_size ( os è=ð OBJECT_SIZE_DELETE ) 192 #ifdeà TIZEN_PATCH 193 time = 0; 194 ”r = `mªag”_»que¡_authÜiz©iÚ ( os , time , & fÞd” , & Çme ); 195 ià( ”r < 0) 196  - EPERM ; 199 ·th = `g_bužd_fž’ame ( áp -> fÞd” , Çme , NULL ); 201 »t = `obex_put_¡»am_¡¬t ( os , ·th ); 203 ià( »t == 0) 204 `mªag”_em™_Œªsãr_¡¬‹d ( áp -> Œªsãr ); 206 `g_ä“ ( ·th ); 208  »t ; 209 } } 211  $áp_put ( obex_£ssiÚ * os , * u£r_d©a ) 213  áp_£ssiÚ * áp = u£r_d©a ; 214 cÚ¡ * Çme = `obex_g‘_Çme ( os ); 215 ssize_t size = `obex_g‘_size ( os ); 217 `DBG ("%°Çm% siz%zd", áp , Çme , size ); 219 ià( áp -> fÞd” =ð NULL ) 220  - EPERM ; 222 ià( Çme =ð NULL ) 223  - EBADR ; 225 ià(! `is_fž’ame ( Çme )) 226  - EBADR ; 228 ià( size =ð OBJECT_SIZE_DELETE ) 229  `áp_d–‘e ( áp , Çme ); 232 } } 234 #ifdeà TIZEN_PATCH 235  gboÞ—n $is_v®id_Çme (cÚ¡ * Çme ) 237 * fÜbid_ch¬s = "[*\"<>;?|\\^:/]"; 238  exp ; 239 »gex_t »g ; 240 »gm©ch_t m©ch [1]; 241 size_t size = 1; 243 ià( Çme [0] == '.') 244  FALSE ; 246 exp = `»gcomp (& »g , fÜbid_ch¬s , 0); 248 ià( exp != 0) 249  FALSE ; 251 exp = `»gexec (& »g , Çme , size , m©ch , 0); 253 `»gä“ (& »g ); 255 ià( exp !ð REG_NOMATCH ) 256  FALSE ; 258  TRUE ; 259 } } 262  $áp_£©h ( obex_£ssiÚ * os , * u£r_d©a ) 264  áp_£ssiÚ * áp = u£r_d©a ; 265 cÚ¡ * roÙ_fÞd” , * Çme ; 266 cÚ¡ ušt8_t * nÚhdr ; 267 * fuÎÇme ; 268  ¡© d¡© ; 269 gboÞ—n roÙ ; 270  ”r ; 272 ià( `obex_g‘_nÚ_h—d”_d©a ( os , & nÚhdr ) != 2) { 273 `”rÜ ("Set…ath failed: flag‡nd constants‚ot found!"); 274  - EBADMSG ; 277 Çme = `obex_g‘_Çme ( os ); 278 roÙ_fÞd” = `obex_ÝtiÚ_roÙ_fÞd” (); 279 roÙ = `g_¡r_equ® ( roÙ_fÞd” , áp -> fÞd” ); 281 `DBG ("%°Çm%s", áp , Çme ); 284 ià(( nÚhdr [0] & 0x01) == 0x01) { 285 `DBG ("Seto…arent…ath"); 287 ià( roÙ ) 288  - EPERM ; 290 fuÎÇme = `g_·th_g‘_dœÇme ( áp -> fÞd” ); 291 `£t_fÞd” ( áp , fuÎÇme ); 292 `g_ä“ ( fuÎÇme ); 294 `DBG ("S‘Ø·»Á…©h: %s", áp -> fÞd” ); 299 ià(! Çme ) { 300 `DBG ("Set…ath failed:‚ame missing!"); 301  - EINVAL ; 304 ià( `¡¾’ ( Çme ) == 0) { 305 `DBG ("Seto„oot"); 306 `£t_fÞd” ( áp , roÙ_fÞd” ); 311 ià(! `is_fž’ame ( Çme )) { 312 `”rÜ ("Set…ath failed:‚ame incorrect!"); 313  - EPERM ; 316 #ifdeà TIZEN_PATCH 318 ià(! `is_v®id_Çme ( Çme )) { 319 `”rÜ ("Set…ath failed: Invalid folder‚ame!"); 320  - EINVAL ; 324 fuÎÇme = `g_bužd_fž’ame ( áp -> fÞd” , Çme , NULL ); 326 `DBG ("FuÎÇme: %s", fuÎÇme ); 328 ”r = `v”ify_·th ( fuÎÇme ); 330 ià( ”r < 0) 331  dÚe ; 333 ”r = `¡© ( fuÎÇme , & d¡© ); 335 ià( ”r < 0) { 336 ”r = - ”ºo ; 338 ià( ”r =ð- ENOENT ) 339  nÙ_found ; 341 `DBG ("¡©: %s(%d)", `¡»¼Ü (- ”r ), -err); 343  dÚe ; 346 ià( `S_ISDIR ( d¡© . ¡_mode è&& (d¡©.¡_mod& S_IRUSR ) && 347 ( d¡© . ¡_mode & S_IXUSR )) { 348 `£t_fÞd” ( áp , fuÎÇme ); 349  dÚe ; 352 ”r = - EPERM ; 353  dÚe ; 355 nÙ_found : 356 ià( nÚhdr [0] != 0) { 357 ”r = - ENOENT ; 358  dÚe ; 361 ià( `mkdœ ( fuÎÇme , 0755) < 0) { 362 ”r = - ”ºo ; 363 `DBG ("mkdœ: %s(%d)", `¡»¼Ü (- ”r ), -err); 364  dÚe ; 367 ”r = 0; 368 `£t_fÞd” ( áp , fuÎÇme ); 370 dÚe : 371 `g_ä“ ( fuÎÇme ); 372  ”r ; 373 } } 375  gboÞ—n $is_v®id_·th (cÚ¡ * ·th ) 377 ** –em’ts , ** cur ; 378  d•th = 0; 380 –em’ts = `g_¡r¥l™ ( ·th , "/", 0); 382  cur = –em’ts ; *cu¸!ð NULL ; cur++) { 383 ià(** cur =ð'\0' || `¡rcmp (*cur, ".") == 0) 386 ià( `¡rcmp (* cur , "..") == 0) { 387 d•th --; 388 ià( d•th < 0) 393 d•th ++; 396 `g_¡rä“v ( –em’ts ); 398 ià( d•th < 0) 399  FALSE ; 401  TRUE ; 402 } } 404 * $áp_bužd_fž’ame ( áp_£ssiÚ * áp , cÚ¡ * de¡Çme ) 406 * fž’ame ; 409 ià( de¡Çme [0] == '/') 410 fž’ame = `g_bužd_fž’ame ( `obex_ÝtiÚ_roÙ_fÞd” (), 411 de¡Çme , NULL ); 413 fž’ame = `g_bužd_fž’ame ( áp -> fÞd” , de¡Çme , NULL ); 415 ià( `is_v®id_·th ( fž’ame + `¡¾’ ( `obex_ÝtiÚ_roÙ_fÞd” ()))) 416  fž’ame ; 418 `g_ä“ ( fž’ame ); 420  NULL ; 421 } } 423  $áp_cÝy ( áp_£ssiÚ * áp , cÚ¡ * Çme , 424 cÚ¡ * de¡Çme ) 426 * sourû , * de¡š©iÚ , * de¡dœ ; 427  »t ; 429 `DBG ("%°Çm% de¡š©iÚ %s", áp , Çme , de¡Çme ); 431 ià( áp -> fÞd” =ð NULL ) { 432 `”rÜ ("No folder set"); 433  - ENOENT ; 436 ià( Çme =ð NULL || de¡Çme == NULL) 437  - EINVAL ; 439 de¡š©iÚ = `áp_bužd_fž’ame ( áp , de¡Çme ); 441 ià( de¡š©iÚ =ð NULL ) 442  - EBADR ; 444 de¡dœ = `g_·th_g‘_dœÇme ( de¡š©iÚ ); 445 »t = `v”ify_·th ( de¡dœ ); 446 `g_ä“ ( de¡dœ ); 448 ià( »t < 0) 449  »t ; 451 sourû = `g_bužd_fž’ame ( áp -> fÞd” , Çme , NULL ); 453 »t = `obex_cÝy ( áp -> os , sourû , de¡š©iÚ ); 455 `g_ä“ ( sourû ); 456 `g_ä“ ( de¡š©iÚ ); 458  »t ; 459 } } 461  $áp_move ( áp_£ssiÚ * áp , cÚ¡ * Çme , 462 cÚ¡ * de¡Çme ) 464 * sourû , * de¡š©iÚ , * de¡dœ ; 465  »t ; 467 `DBG ("%°Çm% de¡Çm%s", áp , Çme , de¡Çme ); 469 ià( áp -> fÞd” =ð NULL ) { 470 `”rÜ ("No folder set"); 471  - ENOENT ; 474 ià( Çme =ð NULL || de¡Çme == NULL) 475  - EINVAL ; 477 de¡š©iÚ = `áp_bužd_fž’ame ( áp , de¡Çme ); 479 ià( de¡š©iÚ =ð NULL ) 480  - EBADR ; 482 de¡dœ = `g_·th_g‘_dœÇme ( de¡š©iÚ ); 483 »t = `v”ify_·th ( de¡dœ ); 484 `g_ä“ ( de¡dœ ); 486 ià( »t < 0) 487  »t ; 489 sourû = `g_bužd_fž’ame ( áp -> fÞd” , Çme , NULL ); 491 »t = `obex_move ( áp -> os , sourû , de¡š©iÚ ); 493 `g_ä“ ( sourû ); 494 `g_ä“ ( de¡š©iÚ ); 496  »t ; 497 } } 499  $áp_aùiÚ ( obex_£ssiÚ * os , * u£r_d©a ) 501  áp_£ssiÚ * áp = u£r_d©a ; 502 cÚ¡ * Çme , * de¡Çme ; 503 ušt8_t aùiÚ_id ; 505 Çme = `obex_g‘_Çme ( os ); 506 ià( Çme =ð NULL || ! `is_fž’ame (name)) 507  - EBADR ; 509 de¡Çme = `obex_g‘_de¡Çme ( os ); 510 aùiÚ_id = `obex_g‘_aùiÚ_id ( os ); 512 `DBG ("%°aùiÚ 0x%x", áp , aùiÚ_id ); 514  aùiÚ_id ) { 516  `áp_cÝy ( áp , Çme , de¡Çme ); 518  `áp_move ( áp , Çme , de¡Çme ); 520  - ENOSYS ; 522 } } 524  $áp_discÚÃù ( obex_£ssiÚ * os , * u£r_d©a ) 526  áp_£ssiÚ * áp = u£r_d©a ; 528 `DBG ("%p", áp ); 530 `mªag”_uÄegi¡”_£ssiÚ ( os ); 532 `mªag”_uÄegi¡”_Œªsãr ( áp -> Œªsãr ); 534 `g_ä“ ( áp -> fÞd” ); 535 `g_ä“ ( áp ); 536 } } 538  $áp_´og»ss ( obex_£ssiÚ * os , * u£r_d©a ) 540  áp_£ssiÚ * áp = u£r_d©a ; 542 `mªag”_em™_Œªsãr_´og»ss ( áp -> Œªsãr ); 543 } } 545  $áp_»£t ( obex_£ssiÚ * os , * u£r_d©a ) 547  áp_£ssiÚ * áp = u£r_d©a ; 549 `mªag”_em™_Œªsãr_com¶‘ed ( áp -> Œªsãr ); 550 } } 552  obex_£rviû_driv” gáp = { 553 . Çme = "File Transfer server", 554 . g£rviû = OBEX_FTP , 555 . grg‘ = FTP_TARGET , 556 . grg‘_size = TARGET_SIZE , 557 . gcÚÃù = áp_cÚÃù , 558 . g´og»ss = áp_´og»ss , 559 . gg‘ = áp_g‘ , 560 . gput = áp_put , 561 . gchkput = áp_chkput , 562 . g£©h = áp_£©h , 563 . gaùiÚ = áp_aùiÚ , 564 . gdiscÚÃù = áp_discÚÃù , 565 . g»£t = áp_»£t 568  $áp_š™ () 570  `obex_£rviû_driv”_»gi¡” (& áp ); 571 } } 573  $áp_ex™ () 575 `obex_£rviû_driv”_uÄegi¡” (& áp ); 576 } } 578 OBEX_PLUGIN_DEFINE ( áp , áp_š™ , áp_ex™ ) @obexd/plugins/ftp.h 24 * áp_cÚÃù ( obex_£ssiÚ * os , * ”r ); 25  áp_g‘ ( obex_£ssiÚ * os , * u£r_d©a ); 26  áp_chkput ( obex_£ssiÚ * os , * u£r_d©a ); 27  áp_put ( obex_£ssiÚ * os , * u£r_d©a ); 28  áp_£©h ( obex_£ssiÚ * os , * u£r_d©a ); 29  áp_discÚÃù ( obex_£ssiÚ * os , * u£r_d©a ); 30  áp_aùiÚ ( obex_£ssiÚ * os , * u£r_d©a ); @obexd/plugins/irmc.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<¡dio.h > 28  ~<¡ršg.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~ 33  ~<¬·/š‘.h > 34  ~ 35  ~ 36  ~ 37  ~<š‰y³s.h > 39  ~"obexd.h " 40  ~"¶ugš.h " 41  ~"log.h " 42  ~"obex.h " 43  ~"£rviû.h " 44  ~"phÚebook.h " 45  ~"mim‘y³.h " 46  ~"fžesy¡em.h " 47  ~"mªag”.h " 49  s­¬am_h—d” { 50 ušt8_t mg ; 51 ušt8_t mËn ; 52 ušt8_t mv® [0]; 53 } __©Œibu‹__ (( ·cked )); 55  #DID_LEN 18 ) 57  sœmc_£ssiÚ { 58  obex_£ssiÚ * mos ; 59  ­·¿m_f›ld * m·¿ms ; 60 ušt16_t m’Œ›s ; 61 GSŒšg * mbufãr ; 62  m¢ [ DID_LEN ]; 63  mdid [ DID_LEN ]; 64  mmªu [ DID_LEN ]; 65  mmod– [ DID_LEN ]; 66 * m»que¡ ; 69  #IRMC_TARGET_SIZE 9 ) 71 cÚ¡ gušt8 gIRMC_TARGET [ IRMC_TARGET_SIZE ] = { 80 cÚ¡ * gowÃr_vÿrd = 88  $phÚebook_size_»suÉ (cÚ¡ * bufãr , size_t bufsize , 89  vÿrds ,  mis£d , 90 gboÞ—n Ï¡·¹ , * u£r_d©a ) 92  œmc_£ssiÚ * œmc = u£r_d©a ; 94 `DBG ("vÿrd %d", vÿrds ); 96 œmc -> ·¿ms -> maxli¡couÁ = vÿrds ; 98 ià( œmc -> »que¡ ) { 99 `phÚebook_»q_fš®ize ( œmc -> »que¡ ); 100 œmc -> »que¡ = NULL ; 102 } } 104  $qu”y_»suÉ (cÚ¡ * bufãr , size_t bufsize ,  vÿrds , 105  mis£d , gboÞ—n Ï¡·¹ , * u£r_d©a ) 107  œmc_£ssiÚ * œmc = u£r_d©a ; 108 cÚ¡ * s , * t ; 110 `DBG ("bufsiz%zu vÿrd %d mis£d %d", bufsize , vÿrds , mis£d ); 112 ià( œmc -> »que¡ ) { 113 `phÚebook_»q_fš®ize ( œmc -> »que¡ ); 114 œmc -> »que¡ = NULL ; 118 ià(! œmc -> bufãr ) 119 œmc -> bufãr = `g_¡ršg_Ãw ( owÃr_vÿrd ); 121 œmc -> bufãr = `g_¡ršg_­³nd (œmc->bufãr, owÃr_vÿrd ); 123 ià( bufãr =ð NULL ) 124  dÚe ; 127 s = bufãr ; 128 ( t = `¡r¡r ( s , "UID:")è!ð NULL ) { 130 œmc -> bufãr = `g_¡ršg_­³nd_Ën (œmc->bufãr, s , t -s); 135 s = t ; 136 t = `¡r¡r ( s , "\r\n"); 137 t += 2; 138 œmc -> bufãr = `g_¡ršg_­³nd_Ën (œmc->bufãr, s , t -s); 140 œmc -> bufãr = `g_¡ršg_­³nd_Ën (irmc->buffer, 142 s += 4; 143 œmc -> bufãr = `g_¡ršg_­³nd_Ën (œmc->bufãr, s , t -s); 144 s = t ; 147 œmc -> bufãr = `g_¡ršg_­³nd (œmc->bufãr, s ); 149 dÚe : 150 `obex_objeù_£t_io_æags ( œmc , G_IO_IN , 0); 151 } } 153 * $œmc_cÚÃù ( obex_£ssiÚ * os , * ”r ) 155  œmc_£ssiÚ * œmc ; 156  ­·¿m_f›ld * ·¿m ; 157  »t ; 159 `DBG (""); 161 `mªag”_»gi¡”_£ssiÚ ( os ); 163 œmc = `g_Ãw0 ( œmc_£ssiÚ , 1); 164 œmc -> os = os; 171 `g‘ho¡Çme ( œmc -> did , DID_LEN ); 172 `¡ºýy ( œmc -> ¢ , "12345", (irmc->sn) - 1); 173 `¡ºýy ( œmc -> mªu , "obex", (irmc->manu) - 1); 174 `¡ºýy ( œmc -> mod– , "mymodel", (irmc->model) - 1); 179 ·¿m = `g_Ãw0 ( ­·¿m_f›ld , 1); 180 ·¿m -> maxli¡couÁ = 0; 181 ·¿m -> fž‹r = 0x200085; 182 œmc -> ·¿ms = ·¿m ; 183 œmc -> »que¡ = `phÚebook_puÎ ( PB_CONTACTS , irmc-> ·¿ms , 184 phÚebook_size_»suÉ , œmc , ”r ); 185 »t = `phÚebook_puÎ_»ad ( œmc -> »que¡ ); 186 ià( ”r ) 187 * ”r = »t ; 189  œmc ; 190 } } 192  $œmc_g‘ ( obex_£ssiÚ * os , * u£r_d©a ) 194  œmc_£ssiÚ * œmc = u£r_d©a ; 195 cÚ¡ * ty³ = `obex_g‘_ty³ ( os ); 196 cÚ¡ * Çme = `obex_g‘_Çme ( os ); 197 * ·th ; 198  »t ; 200 `DBG ("Çm% ty³ % œmø%p", Çme , ty³ ?y³ : "NA", œmc ); 202 ·th = `g_¡rdup ( Çme ); 204 »t = `obex_g‘_¡»am_¡¬t ( os , ·th ); 206 `g_ä“ ( ·th ); 208  »t ; 209 } } 211  $œmc_discÚÃù ( obex_£ssiÚ * os , * u£r_d©a ) 213  œmc_£ssiÚ * œmc = u£r_d©a ; 215 `DBG (""); 217 `mªag”_uÄegi¡”_£ssiÚ ( os ); 219 ià( œmc -> ·¿ms ) { 220 ià( œmc -> ·¿ms -> £¬chv® ) 221 `g_ä“ ( œmc -> ·¿ms -> £¬chv® ); 222 `g_ä“ ( œmc -> ·¿ms ); 225 ià( œmc -> bufãr ) 226 `g_¡ršg_ä“ ( œmc -> bufãr , TRUE ); 228 `g_ä“ ( œmc ); 229 } } 231  $œmc_chkput ( obex_£ssiÚ * os , * u£r_d©a ) 233 `DBG (""); 235  - EBADR ; 236 } } 238  $œmc_Ý’_devšfo ( œmc_£ssiÚ * œmc ) 240 ià(! œmc -> bufãr ) 241 œmc -> bufãr = `g_¡ršg_Ãw (""); 243 `g_¡ršg_­³nd_´štf ( œmc -> bufãr , 256 œmc -> mªu , irmc-> mod– , irmc-> ¢ ); 259 } } 261  $œmc_Ý’_pb ( œmc_£ssiÚ * œmc ) 263  »t ; 266 œmc -> »que¡ = `phÚebook_puÎ ( PB_CONTACTS , irmc-> ·¿ms , 267 qu”y_»suÉ , œmc , & »t ); 268 ià( »t < 0) { 269 `DBG ("phonebook_pull failed..."); 270  »t ; 273 »t = `phÚebook_puÎ_»ad ( œmc -> »que¡ ); 274 ià( »t < 0) { 275 `DBG ("phonebook_pull_read failed..."); 276  »t ; 280 } } 282  $œmc_Ý’_šfo ( œmc_£ssiÚ * œmc ) 284 ià( œmc -> bufãr =ð NULL ) 285 œmc -> bufãr = `g_¡ršg_Ãw (""); 287 `g_¡ršg_´štf ( œmc -> bufãr , "Total-Records:%d\r\n" 291 œmc -> ·¿ms -> maxli¡couÁ , 292 œmc -> ·¿ms -> maxli¡couÁ , irmc-> did ); 295 } } 297  $œmc_Ý’_cc ( œmc_£ssiÚ * œmc ) 299 ià( œmc -> bufãr =ð NULL ) 300 œmc -> bufãr = `g_¡ršg_Ãw (""); 302 `g_¡ršg_´štf ( œmc -> bufãr , "%d\r\n", irmc-> ·¿ms -> maxli¡couÁ ); 305 } } 307  $œmc_Ý’_ÿl ( œmc_£ssiÚ * œmc ) 310 `DBG ("unsupported,„eturningƒmpty buffer"); 312 ià(! œmc -> bufãr ) 313 œmc -> bufãr = `g_¡ršg_Ãw (""); 316 } } 318  $œmc_Ý’_Á ( œmc_£ssiÚ * œmc ) 321 `DBG ("unsupported,„eturningƒmpty buffer"); 323 ià(! œmc -> bufãr ) 324 œmc -> bufãr = `g_¡ršg_Ãw (""); 327 } } 329  $œmc_Ý’_luid ( œmc_£ssiÚ * œmc ) 331 ià( œmc -> bufãr =ð NULL ) 332 œmc -> bufãr = `g_¡ršg_Ãw (""); 334 `DBG ("changelog„equest, force whole book"); 335 `g_¡ršg_´štf ( œmc -> bufãr , "SN:%s\r\n" 340 œmc -> ¢ , irmc-> did , 341 œmc -> ·¿ms -> maxli¡couÁ , 342 œmc -> ·¿ms -> maxli¡couÁ ); 345 } } 347 * $œmc_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , * cÚ‹xt , 348 size_t * size , * ”r ) 350  œmc_£ssiÚ * œmc = cÚ‹xt ; 351  »t = 0; 352 * ·th ; 354 `DBG ("Çm% cÚ‹xˆ%p", Çme , cÚ‹xt ); 356 ià( oæag !ð O_RDONLY ) { 357 »t = - EPERM ; 358  çž ; 361 ià( Çme =ð NULL ) { 362 »t = - EBADR ; 363  çž ; 367 ià( `g_·th_is_absÞu‹ ( Çme )) 368 ·th = `g_¡rdup ( Çme ); 370 ·th = `g_bužd_fž’ame ("/", Çme , NULL ); 372 ià( `g_¡r_equ® ( ·th , PB_DEVINFO )) 373 »t = `œmc_Ý’_devšfo ( œmc ); 374 ià( `g_¡r_equ® ( ·th , PB_CONTACTS )) 375 »t = `œmc_Ý’_pb ( œmc ); 376 ià( `g_¡r_equ® ( ·th , PB_INFO_LOG )) 377 »t = `œmc_Ý’_šfo ( œmc ); 378 ià( `g_¡r_equ® ( ·th , PB_CC_LOG )) 379 »t = `œmc_Ý’_cc ( œmc ); 380 ià( `g_¡r_has_´efix ( ·th , PB_CALENDAR_FOLDER )) 381 »t = `œmc_Ý’_ÿl ( œmc ); 382 ià( `g_¡r_has_´efix ( ·th , PB_NOTES_FOLDER )) 383 »t = `œmc_Ý’_Á ( œmc ); 384 ià( `g_¡r_has_´efix ( ·th , PB_LUID_FOLDER )) 385 »t = `œmc_Ý’_luid ( œmc ); 387 »t = - EBADR ; 389 `g_ä“ ( ·th ); 391 ià( »t == 0) 392  œmc ; 394 çž : 395 ià( ”r ) 396 * ”r = »t ; 398  NULL ; 399 } } 401  $œmc_þo£ (* objeù ) 403  œmc_£ssiÚ * œmc = objeù ; 405 `DBG (""); 407 ià( œmc -> bufãr ) { 408 `g_¡ršg_ä“ ( œmc -> bufãr , TRUE ); 409 œmc -> bufãr = NULL ; 412 ià( œmc -> »que¡ ) { 413 `phÚebook_»q_fš®ize ( œmc -> »que¡ ); 414 œmc -> »que¡ = NULL ; 418 } } 420  ssize_t $œmc_»ad (* objeù , * buf , size_t couÁ ) 422  œmc_£ssiÚ * œmc = objeù ; 423  Ën ; 425 `DBG ("bufã¸%°couÁ %zu", œmc -> bufãr , couÁ ); 426 ià(! œmc -> bufãr ) 427  - EAGAIN ; 429 Ën = `¡ršg_»ad ( œmc -> bufãr , buf , couÁ ); 430 `DBG ("»tuºšg %d by‹s", Ën ); 431  Ën ; 432 } } 434  obex_mime_ty³_driv” gœmc_driv” = { 435 . rg‘ = IRMC_TARGET , 436 . grg‘_size = IRMC_TARGET_SIZE , 437 . gÝ’ = œmc_Ý’ , 438 . gþo£ = œmc_þo£ , 439 . g»ad = œmc_»ad , 442  obex_£rviû_driv” gœmc = { 443 . Çme = "IRMC Sync server", 444 . g£rviû = OBEX_IRMC , 445 . grg‘ = IRMC_TARGET , 446 . grg‘_size = IRMC_TARGET_SIZE , 447 . gcÚÃù = œmc_cÚÃù , 448 . gg‘ = œmc_g‘ , 449 . gdiscÚÃù = œmc_discÚÃù , 450 . gchkput = œmc_chkput 453  $œmc_š™ () 455  ”r ; 457 `DBG (""); 458 ”r = `phÚebook_š™ (); 459 ià( ”r < 0) 460  ”r ; 462 ”r = `obex_mime_ty³_driv”_»gi¡” (& œmc_driv” ); 463 ià( ”r < 0) 464  çž_mime_œmc ; 466 ”r = `obex_£rviû_driv”_»gi¡” (& œmc ); 467 ià( ”r < 0) 468  çž_œmc_»g ; 472 çž_œmc_»g : 473 `obex_mime_ty³_driv”_uÄegi¡” (& œmc_driv” ); 474 çž_mime_œmc : 475 `phÚebook_ex™ (); 477  ”r ; 478 } } 480  $œmc_ex™ () 482 `DBG (""); 483 `obex_£rviû_driv”_uÄegi¡” (& œmc ); 484 `obex_mime_ty³_driv”_uÄegi¡” (& œmc_driv” ); 485 `phÚebook_ex™ (); 486 } } 488 OBEX_PLUGIN_DEFINE ( œmc , œmc_š™ , œmc_ex™ ) @obexd/plugins/mas.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡ršg.h > 29  ~<”ºo.h > 30  ~ 31  ~ 32  ~<š‰y³s.h > 33  ~ 35  ~ 36  ~ 38  ~"obexd.h " 39  ~"¶ugš.h " 40  ~"log.h " 41  ~"obex.h " 42  ~"£rviû.h " 43  ~"mim‘y³.h " 44  ~"fžesy¡em.h " 45  ~"mªag”.h " 46  ~"m­_­.h " 48  ~"mes§ges.h " 50  #READ_STATUS_REQ 0 ) 51  #DELETE_STATUS_REQ 1 ) 53  #XML_DECL "" ) 56  #FL_DTD "" ) 57  #FL_BODY_BEGIN "" ) 58  #FL_BODY_EMPTY "" ) 59  #FL_PARENT_FOLDER_ELEMENT "<·»Á-fÞd”/>" ) 60  #FL_FOLDER_ELEMENT "" ) 61  #FL_BODY_END "" ) 63  #ML_BODY_BEGIN "" ) 64  #ML_BODY_END "" ) 66  smas_£ssiÚ { 67  mas_»que¡ * m»que¡ ; 68 * mback’d_d©a ; 69 gboÞ—n mfšished ; 70 gboÞ—n mÁh_ÿÎ ; 71 GSŒšg * mbufãr ; 72 GObexAµ¬am * mš·¿ms ; 73 GObexAµ¬am * mou¬ams ; 74 gboÞ—n m­_£Á ; 75 #ifdeà __TIZEN_PATCH__ 76 gboÞ—n mh—d”s_£Á ; 77  mnÙifiÿtiÚ_¡©us ; 78 * m»mÙe_addr ; 79 * m»¥Ú£_hªdË ; 81 ušt8_t mnÙifiÿtiÚ_¡©us ; 85 cÚ¡ ušt8_t gMAS_TARGET [ TARGET_SIZE ] = { 89  $g‘_·¿ms ( obex_£ssiÚ * os ,  mas_£ssiÚ * mas ) 91 cÚ¡ ušt8_t * bufãr ; 92 ssize_t size ; 94 size = `obex_g‘_­·¿m ( os , & bufãr ); 95 ià( size <= 0) 98 mas -> š·¿ms = `g_obex_­·¿m_decode ( bufãr , size ); 99 ià( mas -> š·¿ms =ð NULL ) { 100 `DBG ("Error when…arsing…arameters!"); 101  - EBADR ; 105 } } 107  $»£t_»que¡ ( mas_£ssiÚ * mas ) 109 ià( mas -> bufãr ) { 110 `g_¡ršg_ä“ ( mas -> bufãr , TRUE ); 111 mas -> bufãr = NULL ; 114 ià( mas -> š·¿ms ) { 115 `g_obex_­·¿m_ä“ ( mas -> š·¿ms ); 116 mas -> š·¿ms = NULL ; 119 ià( mas -> ou¬ams ) { 120 `g_obex_­·¿m_ä“ ( mas -> ou¬ams ); 121 mas -> ou¬ams = NULL ; 124 mas -> Áh_ÿÎ = FALSE ; 125 mas -> fšished = FALSE ; 126 mas -> ­_£Á = FALSE ; 127 #ifdeà __TIZEN_PATCH__ 128 mas -> h—d”s_£Á = FALSE ; 129 `g_ä“ ( mas -> »¥Ú£_hªdË ); 130 mas -> »¥Ú£_hªdË = NULL ; 132 } } 134  $mas_þ—n ( mas_£ssiÚ * mas ) 136 `»£t_»que¡ ( mas ); 137 #ifdeà __TIZEN_PATCH__ 138 `g_ä“ ( mas -> »mÙe_addr ); 140 `g_ä“ ( mas ); 141 } } 143 * $mas_cÚÃù ( obex_£ssiÚ * os , * ”r ) 145  mas_£ssiÚ * mas ; 146 #ifdeà __TIZEN_PATCH__ 147 * add»ss ; 150 `DBG (""); 152 mas = `g_Ãw0 ( mas_£ssiÚ , 1); 154 * ”r = `mes§ges_cÚÃù (& mas -> back’d_d©a ); 155 ià(* ”r < 0) 156  çžed ; 158 `mªag”_»gi¡”_£ssiÚ ( os ); 160 #ifdeà __TIZEN_PATCH__ 161 ià( `obex_g‘³”Çme ( os , & add»ss ) == 0) { 162 mas -> »mÙe_addr = add»ss ; 163 `DBG ("mas->»mÙe_add¸ð%s\n", mas -> »mÙe_addr ); 167  mas ; 169 çžed : 170 `g_ä“ ( mas ); 172  NULL ; 173 } } 175  $mas_discÚÃù ( obex_£ssiÚ * os , * u£r_d©a ) 177  mas_£ssiÚ * mas = u£r_d©a ; 179 `DBG (""); 181 `mªag”_uÄegi¡”_£ssiÚ ( os ); 182 `mes§ges_discÚÃù ( mas -> back’d_d©a ); 184 `mas_þ—n ( mas ); 185 } } 187  $mas_g‘ ( obex_£ssiÚ * os , * u£r_d©a ) 189  mas_£ssiÚ * mas = u£r_d©a ; 190 cÚ¡ * ty³ = `obex_g‘_ty³ ( os ); 191 cÚ¡ * Çme = `obex_g‘_Çme ( os ); 192  »t ; 194 `DBG ("GET:‚ame %sype %s mas %p", 195 Çme , ty³ , mas ); 197 ià( ty³ =ð NULL ) 198  - EBADR ; 200 »t = `g‘_·¿ms ( os , mas ); 201 ià( »t < 0) 202  çžed ; 204 »t = `obex_g‘_¡»am_¡¬t ( os , Çme ); 205 ià( »t < 0) 206  çžed ; 210 çžed : 211 `»£t_»que¡ ( mas ); 213  »t ; 214 } } 216  $mas_put ( obex_£ssiÚ * os , * u£r_d©a ) 218  mas_£ssiÚ * mas = u£r_d©a ; 219 cÚ¡ * ty³ = `obex_g‘_ty³ ( os ); 220 cÚ¡ * Çme = `obex_g‘_Çme ( os ); 221  »t ; 223 `DBG ("PUT:‚am% ty³ % ma %p", Çme , ty³ , mas ); 225 ià( ty³ =ð NULL ) 226  - EBADR ; 228 »t = `g‘_·¿ms ( os , mas ); 229 ià( »t < 0) 230  çžed ; 232 »t = `obex_put_¡»am_¡¬t ( os , Çme ); 233 ià( »t < 0) 234  çžed ; 238 çžed : 239 `»£t_»que¡ ( mas ); 241  »t ; 242 } } 245  $g_¡ršg_­³nd_esÿ³d_´štf ( GSŒšg * ¡ršg , 246 cÚ¡ * fÜm© , ...) 248 va_li¡ ­ ; 249 * esÿ³d ; 251 `va_¡¬t ( ­ , fÜm© ); 252 esÿ³d = `g_m¬kup_v´štf_esÿ³d ( fÜm© , ­ ); 253 `g_¡ršg_­³nd ( ¡ršg , esÿ³d ); 254 `g_ä“ ( esÿ³d ); 255 `va_’d ( ­ ); 256 } } 258  gch¬ * $g‘_m£_time¡amp () 260  timev® time_v® ; 261  tm Éime ; 262 gch¬ * loÿl_ts ; 263  sign ; 265 ià( `g‘timeofday (& time_v® , NULL ) < 0) 266  NULL ; 268 ià(! `loÿÉime_r (& time_v® . tv_£c , & Éime )) 269  NULL ; 271 ià( `difáime ( `mktime ( `loÿÉime (& time_v® . tv_£c )), 272 `mktime ( `gmtime (& time_v® . tv_£c ))) < 0) 273 sign = '+'; 275 sign = '-'; 277 loÿl_ts = `g_¡rdup_´štf ("%04d%02d%02dT%02d%02d%02d%c%2ld%2ld", 278 Éime . tm_y—r + 1900,†time. tm_mÚ + 1, 279 Éime . tm_mday ,†time. tm_hour , 280 Éime . tm_mš ,†time. tm_£c , sign , 281 Éime . tm_gmtoff /3600, 282 ( Éime . tm_gmtoff %3600)/60); 284  loÿl_ts ; 285 } } 287 cÚ¡ * $yesÜno ( gboÞ—n a ) 289 ià( a ) 293 } } 295  $g‘_mes§ges_li¡šg_cb (* £ssiÚ ,  ”r , ušt16_t size , 296 gboÞ—n Ãwmsg , 297 cÚ¡  mes§ges_mes§ge * ’Œy , 298 * u£r_d©a ) 300  mas_£ssiÚ * mas = u£r_d©a ; 301 ušt16_t max = 1024; 302 gch¬ * m£_time ; 304 ià( ”r < 0 &&ƒ¼ !ð- EAGAIN ) { 305 `obex_objeù_£t_io_æags ( mas , G_IO_ERR , ”r ); 309 ià( mas -> š·¿ms ) 310 `g_obex_­·¿m_g‘_ušt16 ( mas -> š·¿ms , MAP_AP_MAXLISTCOUNT , 311 & max ); 313 ià( max == 0) { 314 ià(! ’Œy ) 315 mas -> fšished = TRUE ; 317  ´oûed ; 320 ià(! mas -> Áh_ÿÎ ) { 321 `g_¡ršg_­³nd ( mas -> bufãr , ML_BODY_BEGIN ); 322 mas -> Áh_ÿÎ = TRUE ; 325 ià(! ’Œy ) { 326 `g_¡ršg_­³nd ( mas -> bufãr , ML_BODY_END ); 327 mas -> fšished = TRUE ; 329  ´oûed ; 332 `g_¡ršg_­³nd ( mas -> bufãr , " bufãr , " handle=\"%s\"", 335 ’Œy -> hªdË ); 337 ià( ’Œy -> mask & PMASK_SUBJECT ) 338 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , " subject=\"%s\"", 339 ’Œy -> subjeù ); 341 ià( ’Œy -> mask & PMASK_DATETIME ) 342 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , " datetime=\"%s\"", 343 ’Œy -> d©‘ime ); 345 ià( ’Œy -> mask & PMASK_SENDER_NAME ) 346 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , 348 ’Œy -> £nd”_Çme ); 350 ià( ’Œy -> mask & PMASK_SENDER_ADDRESSING ) 351 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , 353 ’Œy -> £nd”_add»ssšg ); 355 ià( ’Œy -> mask & PMASK_REPLYTO_ADDRESSING ) 356 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , 358 ’Œy -> »¶yto_add»ssšg ); 360 ià( ’Œy -> mask & PMASK_RECIPIENT_NAME ) 361 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , 363 ’Œy -> »c›Á_Çme ); 365 ià( ’Œy -> mask & PMASK_RECIPIENT_ADDRESSING ) 366 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , 368 ’Œy -> »c›Á_add»ssšg ); 370 ià( ’Œy -> mask & PMASK_TYPE ) 371 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , "ype=\"%s\"", 372 ’Œy -> ty³ ); 374 ià( ’Œy -> mask & PMASK_RECEPTION_STATUS ) 375 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , 377 ’Œy -> »û±iÚ_¡©us ); 379 ià( ’Œy -> mask & PMASK_SIZE ) 380 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , " size=\"%s\"", 381 ’Œy -> size ); 383 ià( ’Œy -> mask & PMASK_ATTACHMENT_SIZE ) 384 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , 386 ’Œy -> ©chm’t_size ); 388 ià( ’Œy -> mask & PMASK_TEXT ) 389 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , "ext=\"%s\"", 390 `yesÜno ( ’Œy -> ‹xt )); 392 ià( ’Œy -> mask & PMASK_READ ) 393 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , "„ead=\"%s\"", 394 `yesÜno ( ’Œy -> »ad )); 396 ià( ’Œy -> mask & PMASK_SENT ) 397 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , " sent=\"%s\"", 398 `yesÜno ( ’Œy -> £Á )); 400 ià( ’Œy -> mask & PMASK_PROTECTED ) 401 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , "…rotected=\"%s\"", 402 `yesÜno ( ’Œy -> ´Ùeù )); 404 ià( ’Œy -> mask & PMASK_PRIORITY ) 405 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , "…riority=\"%s\"", 406 `yesÜno ( ’Œy -> ´iÜ™y )); 408 `g_¡ršg_­³nd ( mas -> bufãr , "/>\n"); 410 ´oûed : 411 ià(! ’Œy ) { 412 mas -> ou¬ams = `g_obex_­·¿m_£t_ušt16 (mas->outparams, 413 MAP_AP_MESSAGESLISTINGSIZE , 414 size ); 415 mas -> ou¬ams = `g_obex_­·¿m_£t_ušt8 (mas->outparams, 416 MAP_AP_NEWMESSAGE , 417 Ãwmsg ? 1 : 0); 419 m£_time = `g‘_m£_time¡amp (); 420 ià( m£_time ) { 421 `g_obex_­·¿m_£t_¡ršg ( mas -> ou¬ams , 422 MAP_AP_MSETIME , m£_time ); 423 `g_ä“ ( m£_time ); 427 ià( ”r !ð- EAGAIN ) 428 `obex_objeù_£t_io_æags ( mas , G_IO_IN , 0); 429 } } 431 #ifdeà __TIZEN_PATCH__ 432  $put_mes§ge_cb (* £ssiÚ ,  ”r , gušt64 hªdË , 433 * u£r_d©a ) 435  mas_£ssiÚ * mas = u£r_d©a ; 437 `DBG (""); 439 ià( ”r < 0) { 440 `obex_objeù_£t_io_æags ( mas , G_IO_ERR , ”r ); 443 mas -> fšished = FALSE ; 444 mas -> »¥Ú£_hªdË = `g_¡rdup_´štf ("%Îx", hªdË ); 446 `obex_objeù_£t_io_æags ( mas , G_IO_OUT , 0); 447 } } 450  $g‘_mes§ge_cb (* £ssiÚ ,  ”r , gboÞ—n fmÜe , 451 cÚ¡ * chunk , * u£r_d©a ) 453  mas_£ssiÚ * mas = u£r_d©a ; 455 `DBG (""); 457 ià( ”r < 0 &&ƒ¼ !ð- EAGAIN ) { 458 `obex_objeù_£t_io_æags ( mas , G_IO_ERR , ”r ); 462 ià(! chunk ) { 463 mas -> fšished = TRUE ; 464  ´oûed ; 467 `g_¡ršg_­³nd ( mas -> bufãr , chunk ); 469 ´oûed : 470 ià( ”r !ð- EAGAIN ) 471 `obex_objeù_£t_io_æags ( mas , G_IO_IN , 0); 472 } } 474  $g‘_fÞd”_li¡šg_cb (* £ssiÚ ,  ”r , ušt16_t size , 475 cÚ¡ * Çme , * u£r_d©a ) 477  mas_£ssiÚ * mas = u£r_d©a ; 478 ušt16_t max = 1024; 480 ià( ”r < 0 &&ƒ¼ !ð- EAGAIN ) { 481 `obex_objeù_£t_io_æags ( mas , G_IO_ERR , ”r ); 485 ià( mas -> š·¿ms ) 486 `g_obex_­·¿m_g‘_ušt16 ( mas -> š·¿ms , MAP_AP_MAXLISTCOUNT , 487 & max ); 489 ià( max == 0) { 490 ià( ”r !ð- EAGAIN ) 491 mas -> ou¬ams = `g_obex_­·¿m_£t_ušt16 ( 492 mas -> ou¬ams , 493 MAP_AP_FOLDERLISTINGSIZE , 494 size ); 496 ià(! Çme ) 497 mas -> fšished = TRUE ; 499  ´oûed ; 500 #ifdeà __TIZEN_PATCH__ 502 mas -> ­_£Á = TRUE ; 506 ià(! mas -> Áh_ÿÎ ) { 507 `g_¡ršg_­³nd ( mas -> bufãr , XML_DECL ); 508 `g_¡ršg_­³nd ( mas -> bufãr , FL_DTD ); 509 ià(! Çme ) { 510 `g_¡ršg_­³nd ( mas -> bufãr , FL_BODY_EMPTY ); 511 mas -> fšished = TRUE ; 512  ´oûed ; 514 `g_¡ršg_­³nd ( mas -> bufãr , FL_BODY_BEGIN ); 515 mas -> Áh_ÿÎ = TRUE ; 518 ià(! Çme ) { 519 `g_¡ršg_­³nd ( mas -> bufãr , FL_BODY_END ); 520 mas -> fšished = TRUE ; 521  ´oûed ; 524 ià( `g_¡rcmp0 ( Çme , "..") == 0) 525 `g_¡ršg_­³nd ( mas -> bufãr , FL_PARENT_FOLDER_ELEMENT ); 527 `g_¡ršg_­³nd_esÿ³d_´štf ( mas -> bufãr , FL_FOLDER_ELEMENT , 528 Çme ); 530 ´oûed : 531 ià( ”r !ð- EAGAIN ) 532 `obex_objeù_£t_io_æags ( mas , G_IO_IN , ”r ); 533 } } 535  $£t_¡©us_cb (* £ssiÚ ,  ”r , * u£r_d©a ) 537  mas_£ssiÚ * mas = u£r_d©a ; 539 `DBG (""); 541 mas -> fšished = TRUE ; 543 ià( ”r < 0) 544 `obex_objeù_£t_io_æags ( mas , G_IO_ERR , ”r ); 546 `obex_objeù_£t_io_æags ( mas , G_IO_OUT , 0); 547 } } 549  $mas_£©h ( obex_£ssiÚ * os , * u£r_d©a ) 551 cÚ¡ * Çme ; 552 cÚ¡ ušt8_t * nÚhdr ; 553  mas_£ssiÚ * mas = u£r_d©a ; 555 ià( `obex_g‘_nÚ_h—d”_d©a ( os , & nÚhdr ) != 2) { 556 `”rÜ ("Set…ath failed: flag‡nd constants‚ot found!"); 557  - EBADR ; 560 Çme = `obex_g‘_Çme ( os ); 562 `DBG ("SETPATH:‚am% nÚhd¸0x%x%x", Çme , nÚhdr [0],‚onhdr[1]); 564 ià(( nÚhdr [0] & 0x02) != 0x02) { 565 `DBG ("Error:„equested directory creation"); 566  - EBADR ; 569  `mes§ges_£t_fÞd” ( mas -> back’d_d©a , Çme , nÚhdr [0] & 0x01); 570 } } 572 * $fÞd”_li¡šg_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 573 * driv”_d©a , size_t * size , * ”r ) 575  mas_£ssiÚ * mas = driv”_d©a ; 577 ušt16_t max = 1024; 578 ušt16_t off£t = 0; 580 ià( oæag !ð O_RDONLY ) { 581 * ”r = - EBADR ; 582  NULL ; 585 `DBG ("Çmð%s", Çme ); 587 ià( mas -> š·¿ms ) { 588 `g_obex_­·¿m_g‘_ušt16 ( mas -> š·¿ms , MAP_AP_MAXLISTCOUNT , 589 & max ); 590 `g_obex_­·¿m_g‘_ušt16 ( mas -> š·¿ms , MAP_AP_STARTOFFSET , 591 & off£t ); 594 * ”r = `mes§ges_g‘_fÞd”_li¡šg ( mas -> back’d_d©a , Çme , max , 595 off£t , g‘_fÞd”_li¡šg_cb , mas ); 597 mas -> bufãr = `g_¡ršg_Ãw (""); 599 ià(* ”r < 0) 600  NULL ; 602  mas ; 603 } } 605 * $msg_li¡šg_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 606 * driv”_d©a , size_t * size , * ”r ) 608  mas_£ssiÚ * mas = driv”_d©a ; 609  mes§ges_fž‹r fž‹r = { 0, }; 611 ušt16_t max = 1024; 612 ušt16_t off£t = 0; 615 ušt8_t subjeù_Ën = 0; 617 `DBG (""); 619 ià( oæag !ð O_RDONLY ) { 620 * ”r = - EBADR ; 621  NULL ; 624 ià(! mas -> š·¿ms ) 625  dÚe ; 627 `g_obex_­·¿m_g‘_ušt16 ( mas -> š·¿ms , MAP_AP_MAXLISTCOUNT , & max ); 628 `g_obex_­·¿m_g‘_ušt16 ( mas -> š·¿ms , MAP_AP_STARTOFFSET , & off£t ); 629 `g_obex_­·¿m_g‘_ušt8 ( mas -> š·¿ms , MAP_AP_SUBJECTLENGTH , 630 & subjeù_Ën ); 632 `g_obex_­·¿m_g‘_ušt32 ( mas -> š·¿ms , MAP_AP_PARAMETERMASK , 633 & fž‹r . ·¿m‘”_mask ); 634 `g_obex_­·¿m_g‘_ušt8 ( mas -> š·¿ms , MAP_AP_FILTERMESSAGETYPE , 635 & fž‹r . ty³ ); 636 fž‹r . ³riod_begš = `g_obex_­·¿m_g‘_¡ršg ( mas -> š·¿ms , 637 MAP_AP_FILTERPERIODBEGIN ); 638 fž‹r . ³riod_’d = `g_obex_­·¿m_g‘_¡ršg ( mas -> š·¿ms , 639 MAP_AP_FILTERPERIODEND ); 640 `g_obex_­·¿m_g‘_ušt8 ( mas -> š·¿ms , MAP_AP_FILTERREADSTATUS , 641 & fž‹r . »ad_¡©us ); 642 fž‹r . »c›Á = `g_obex_­·¿m_g‘_¡ršg ( mas -> š·¿ms , 643 MAP_AP_FILTERRECIPIENT ); 644 fž‹r . Üigš©Ü = `g_obex_­·¿m_g‘_¡ršg ( mas -> š·¿ms , 645 MAP_AP_FILTERORIGINATOR ); 646 `g_obex_­·¿m_g‘_ušt8 ( mas -> š·¿ms , MAP_AP_FILTERPRIORITY , 647 & fž‹r . ´iÜ™y ); 649 dÚe : 650 * ”r = `mes§ges_g‘_mes§ges_li¡šg ( mas -> back’d_d©a , Çme , max , 651 off£t , subjeù_Ën , & fž‹r , 652 g‘_mes§ges_li¡šg_cb , mas ); 654 mas -> bufãr = `g_¡ršg_Ãw (""); 656 ià(* ”r < 0) 657  NULL ; 659  mas ; 660 } } 662 * $mes§ge_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 663 * driv”_d©a , size_t * size , * ”r ) 665  mas_£ssiÚ * mas = driv”_d©a ; 667 `DBG (""); 669 #ifdeà __TIZEN_PATCH__ 670 ià( oæag !ð O_RDONLY ) { 671 `DBG ("Message…ushing invoked \n"); 673 `DBG ("Çmð%s", Çme ); 674 ušt8_t Œª¥¬’t = 0; 675 ušt8_t »Œy = 1; 676 ušt8_t ch¬£t ; 678 `g_obex_­·¿m_g‘_ušt8 ( mas -> š·¿ms , MAP_AP_TRANSPARENT , 679 & Œª¥¬’t ); 680 `DBG ("Œª¥¬’ˆð%d \n", Œª¥¬’t ); 681 `g_obex_­·¿m_g‘_ušt8 ( mas -> š·¿ms , MAP_AP_RETRY , & »Œy ); 682 `DBG ("»Œy = %d \n", »Œy ); 684 ià(! `g_obex_­·¿m_g‘_ušt8 ( mas -> š·¿ms , MAP_AP_CHARSET , 685 & ch¬£t )) { 686 * ”r = - EBADR ; 687  NULL ; 689 mas -> h—d”s_£Á = FALSE ; 691 * ”r = `mes§ges_push_mes§ge ( mas -> back’d_d©a , Çme , 692 Œª¥¬’t , »Œy , ch¬£t , 693 put_mes§ge_cb , mas ); 695 ušt8_t äaùiÚ_»que¡ = 0; 696 ušt8_t ©chm’t ; 697 ušt8_t ch¬£t ; 699 ià(! `g_obex_­·¿m_g‘_ušt8 ( mas -> š·¿ms , MAP_AP_ATTACHMENT , 700 & ©chm’t )) { 701 * ”r = - EBADR ; 702  NULL ; 705 ià(! `g_obex_­·¿m_g‘_ušt8 ( mas -> š·¿ms , MAP_AP_CHARSET , 706 & ch¬£t )) { 707 * ”r = - EBADR ; 708  NULL ; 711 ià(! `g_obex_­·¿m_g‘_ušt8 ( mas -> š·¿ms , MAP_AP_FRACTIONREQUEST , 712 & äaùiÚ_»que¡ )) 713 mas -> ­_£Á = TRUE ; 715 * ”r = `mes§ges_g‘_mes§ge ( mas -> back’d_d©a , Çme , ©chm’t , 716 ch¬£t , äaùiÚ_»que¡ , 717 g‘_mes§ge_cb , mas ); 720 ià( oæag !ð O_RDONLY ) { 721 `DBG ("Message…ushing unsupported"); 722 * ”r = - ENOSYS ; 724  NULL ; 727 * ”r = `mes§ges_g‘_mes§ge ( mas -> back’d_d©a , Çme , 0, 728 g‘_mes§ge_cb , mas ); 731 mas -> bufãr = `g_¡ršg_Ãw (""); 733 ià(* ”r < 0) 734  NULL ; 736  mas ; 737 } } 739 #ifdeà __TIZEN_PATCH__ 740  ssize_t $mes§ge_wr™e (* objeù , cÚ¡ * buf , size_t couÁ ) 742 `DBG (""); 743  mas_£ssiÚ * mas = objeù ; 745 ià( mas -> fšished ) 748 `g_¡ršg_­³nd_Ën ( mas -> bufãr , buf , couÁ ); 750 `DBG ("couÁ = %d \n", couÁ ); 752 ià( `g_¡¼¡r ( mas -> bufãr -> ¡r , "END:BMSG\r\n")) { 753 `DBG ("BMsg„eceived. \n"); 755 `mes§ges_push_mes§ge_d©a ( mas -> back’d_d©a , 756 mas -> bufãr -> ¡r , NULL ); 759  couÁ ; 760 } } 763 * $mes§ge_upd©e_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 764 * driv”_d©a , size_t * size , 765 * ”r ) 767  mas_£ssiÚ * mas = driv”_d©a ; 769 `DBG (""); 771 ià( oæag =ð O_RDONLY ) { 772 * ”r = - EBADR ; 773  NULL ; 776 * ”r = `mes§ges_upd©e_šbox ( mas -> back’d_d©a , £t_¡©us_cb , mas); 777 ià(* ”r < 0) 778  NULL ; 780  mas ; 781 } } 783 * $mes§ge_£t_¡©us_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 784 * driv”_d©a , size_t * size , 785 * ”r ) 788  mas_£ssiÚ * mas = driv”_d©a ; 789 ušt8_t šdiÿtÜ ; 790 ušt8_t v®ue ; 792 `DBG (""); 794 ià( oæag =ð O_RDONLY ) { 795 * ”r = - EBADR ; 796  NULL ; 799 ià(! `g_obex_­·¿m_g‘_ušt8 ( mas -> š·¿ms , MAP_AP_STATUSINDICATOR , 800 & šdiÿtÜ )) { 801 * ”r = - EBADR ; 802  NULL ; 805 ià(! `g_obex_­·¿m_g‘_ušt8 ( mas -> š·¿ms , MAP_AP_STATUSVALUE , 806 & v®ue )) { 807 * ”r = - EBADR ; 808  NULL ; 811 ià( šdiÿtÜ =ð READ_STATUS_REQ ) 812 * ”r = `mes§ges_£t_»ad ( mas -> back’d_d©a , Çme , v®ue , 813 £t_¡©us_cb , mas ); 814 ià( šdiÿtÜ =ð DELETE_STATUS_REQ ) 815 * ”r = `mes§ges_£t_d–‘e ( mas -> back’d_d©a , Çme , v®ue , 816 £t_¡©us_cb , mas ); 818 * ”r = - EBADR ; 820 ià(* ”r < 0) 821  NULL ; 823  mas ; 824 } } 826 #ifdeà __TIZEN_PATCH__ 827  $nÙifiÿtiÚ_»gi¡¿tiÚ_þo£ (* obj ) 829  mas_£ssiÚ * mas = obj ; 831 `DBG (""); 833 `mes§ges_£t_nÙifiÿtiÚ_»gi¡¿tiÚ ( mas -> back’d_d©a , 834 mas -> »mÙe_addr , mas-> nÙifiÿtiÚ_¡©us , 835 NULL ); 837 `»£t_»que¡ ( mas ); 840 } } 842  ssize_t $put_Ãxt_h—d” (* objeù , * buf , size_t mtu , 843 ušt8_t * hi ) 845  mas_£ssiÚ * mas = objeù ; 846 size_t Ën ; 848 `DBG (""); 849 ià( mas -> h—d”s_£Á ) 852 ià( mas -> »¥Ú£_hªdË ) 853 `DBG ("mas->»¥Ú£_hªdË %s\n", mas -> »¥Ú£_hªdË ); 857 * hi = G_OBEX_HDR_NAME ; 859 Ën = `¡¾’ ( mas -> »¥Ú£_hªdË ); 861 `DBG ("ËÀ%d\n", Ën ); 862 `DBG ("mas->»¥Ú£_hªdË %s\n", mas -> »¥Ú£_hªdË ); 864 `memýy ( buf , mas -> »¥Ú£_hªdË , Ën ); 866 mas -> h—d”s_£Á = TRUE ; 868  Ën ; 869 } } 873  ssize_t $ªy_g‘_Ãxt_h—d” (* objeù , * buf , size_t mtu , 874 ušt8_t * hi ) 876  mas_£ssiÚ * mas = objeù ; 878 `DBG (""); 880 ià( mas -> bufãr -> Ën =ð0 && !mas-> fšished ) 881  - EAGAIN ; 883 * hi = G_OBEX_HDR_APPARAM ; 885 ià( mas -> ­_£Á ) 888 mas -> ­_£Á = TRUE ; 889 ià(! mas -> ou¬ams ) 892  `g_obex_­·¿m_’code ( mas -> ou¬ams , buf , mtu ); 893 } } 895 * $ªy_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 896 * driv”_d©a , size_t * size , * ”r ) 898 `DBG (""); 900 * ”r = - ENOSYS ; 902  NULL ; 903 } } 905  ssize_t $ªy_wr™e (* objeù , cÚ¡ * buf , size_t couÁ ) 907 `DBG (""); 909  couÁ ; 910 } } 912  ssize_t $ªy_»ad (* obj , * buf , size_t couÁ ) 914  mas_£ssiÚ * mas = obj ; 915 ssize_t Ën ; 917 `DBG (""); 919 Ën = `¡ršg_»ad ( mas -> bufãr , buf , couÁ ); 921 ià( Ën =ð0 && ! mas -> fšished ) 922  - EAGAIN ; 924  Ën ; 925 } } 927  $ªy_þo£ (* obj ) 929  mas_£ssiÚ * mas = obj ; 931 `DBG (""); 933 ià(! mas -> fšished ) 934 `mes§ges_abÜt ( mas -> back’d_d©a ); 936 `»£t_»que¡ ( mas ); 939 } } 941 * $nÙifiÿtiÚ_»gi¡¿tiÚ_Ý’ (cÚ¡ * Çme ,  oæag , 942 mode_t mode , * driv”_d©a , 943 size_t * size , * ”r ) 945  mas_£ssiÚ * mas = driv”_d©a ; 946 ušt8_t ¡©us ; 948 `DBG (""); 950 ià( O_RDONLY ) { 951 * ”r = - EBADR ; 952  NULL ; 955 ià(! `g_obex_­·¿m_g‘_ušt8 ( mas -> š·¿ms , MAP_AP_NOTIFICATIONSTATUS , 956 & ¡©us )) { 957 * ”r = - EBADR ; 958  NULL ; 961 mas -> nÙifiÿtiÚ_¡©us = ¡©us ; 962 mas -> fšished = TRUE ; 963 * ”r = 0; 965  mas ; 966 } } 968  obex_£rviû_driv” gmas = { 969 . Çme = "Message Access server", 970 . g£rviû = OBEX_MAS , 971 . grg‘ = MAS_TARGET , 972 . grg‘_size = TARGET_SIZE , 973 . gcÚÃù = mas_cÚÃù , 974 . gg‘ = mas_g‘ , 975 . gput = mas_put , 976 . g£©h = mas_£©h , 977 . gdiscÚÃù = mas_discÚÃù , 980  obex_mime_ty³_driv” gmime_m­ = { 981 . rg‘ = MAS_TARGET , 982 . grg‘_size = TARGET_SIZE , 983 . gmim‘y³ = NULL , 984 . gÝ’ = ªy_Ý’ , 985 . gþo£ = ªy_þo£ , 986 . g»ad = ªy_»ad , 987 . gwr™e = ªy_wr™e , 990  obex_mime_ty³_driv” gmime_mes§ge = { 991 . rg‘ = MAS_TARGET , 992 . grg‘_size = TARGET_SIZE , 993 . gmim‘y³ = "x-bt/message", 994 . gÝ’ = mes§ge_Ý’ , 995 . gþo£ = ªy_þo£ , 996 . g»ad = ªy_»ad , 997 #ifdeà __TIZEN_PATCH__ 998 . gwr™e = mes§ge_wr™e , 999 . gg‘_Ãxt_h—d” = put_Ãxt_h—d” 1001 . wr™e = ªy_wr™e , 1005  obex_mime_ty³_driv” gmime_fÞd”_li¡šg = { 1006 . rg‘ = MAS_TARGET , 1007 . grg‘_size = TARGET_SIZE , 1008 . gmim‘y³ = "x-obex/folder-listing", 1009 . gg‘_Ãxt_h—d” = ªy_g‘_Ãxt_h—d” , 1010 . gÝ’ = fÞd”_li¡šg_Ý’ , 1011 . gþo£ = ªy_þo£ , 1012 . g»ad = ªy_»ad , 1013 . gwr™e = ªy_wr™e , 1016  obex_mime_ty³_driv” gmime_msg_li¡šg = { 1017 . rg‘ = MAS_TARGET , 1018 . grg‘_size = TARGET_SIZE , 1019 . gmim‘y³ = "x-bt/MAP-msg-listing", 1020 . gg‘_Ãxt_h—d” = ªy_g‘_Ãxt_h—d” , 1021 . gÝ’ = msg_li¡šg_Ý’ , 1022 . gþo£ = ªy_þo£ , 1023 . g»ad = ªy_»ad , 1024 . gwr™e = ªy_wr™e , 1027  obex_mime_ty³_driv” gmime_nÙifiÿtiÚ_»gi¡¿tiÚ = { 1028 . rg‘ = MAS_TARGET , 1029 . grg‘_size = TARGET_SIZE , 1030 . gmim‘y³ = "x-bt/MAP-NotificationRegistration", 1031 . gÝ’ = nÙifiÿtiÚ_»gi¡¿tiÚ_Ý’ , 1032 #ifdeà __TIZEN_PATCH__ 1033 . gþo£ = nÙifiÿtiÚ_»gi¡¿tiÚ_þo£ , 1035 . gþo£ = ªy_þo£ , 1037 . g»ad = ªy_»ad , 1038 . gwr™e = ªy_wr™e , 1041  obex_mime_ty³_driv” gmime_mes§ge_¡©us = { 1042 . rg‘ = MAS_TARGET , 1043 . grg‘_size = TARGET_SIZE , 1044 . gmim‘y³ = "x-bt/messageStatus", 1045 . gÝ’ = mes§ge_£t_¡©us_Ý’ , 1046 . gþo£ = ªy_þo£ , 1047 . g»ad = ªy_»ad , 1048 . gwr™e = ªy_wr™e , 1051  obex_mime_ty³_driv” gmime_mes§ge_upd©e = { 1052 . rg‘ = MAS_TARGET , 1053 . grg‘_size = TARGET_SIZE , 1054 . gmim‘y³ = "x-bt/MAP-messageUpdate", 1055 . gÝ’ = mes§ge_upd©e_Ý’ , 1056 . gþo£ = ªy_þo£ , 1057 . g»ad = ªy_»ad , 1058 . gwr™e = ªy_wr™e , 1061  obex_mime_ty³_driv” * gm­_driv”s [] = { 1062 & mime_m­ , 1063 & mime_mes§ge , 1064 & mime_fÞd”_li¡šg , 1065 & mime_msg_li¡šg , 1066 & mime_nÙifiÿtiÚ_»gi¡¿tiÚ , 1067 & mime_mes§ge_¡©us , 1068 & mime_mes§ge_upd©e , 1069 NULL 1072  $mas_š™ () 1074  ”r ; 1075  i ; 1077 ”r = `mes§ges_š™ (); 1078 ià( ”r < 0) 1079  ”r ; 1081  i = 0; m­_driv”s [i] !ð NULL ; ++i) { 1082 ”r = `obex_mime_ty³_driv”_»gi¡” ( m­_driv”s [ i ]); 1083 ià( ”r < 0) 1084  çžed ; 1087 ”r = `obex_£rviû_driv”_»gi¡” (& mas ); 1088 ià( ”r < 0) 1089  çžed ; 1093 çžed : 1094 -- i ; i >= 0; --i) 1095 `obex_mime_ty³_driv”_uÄegi¡” ( m­_driv”s [ i ]); 1097 `mes§ges_ex™ (); 1099  ”r ; 1100 } } 1102  $mas_ex™ () 1104  i ; 1106 `obex_£rviû_driv”_uÄegi¡” (& mas ); 1108  i = 0; m­_driv”s [i] !ð NULL ; ++i) 1109 `obex_mime_ty³_driv”_uÄegi¡” ( m­_driv”s [ i ]); 1111 `mes§ges_ex™ (); 1112 } } 1114 OBEX_PLUGIN_DEFINE ( mas , mas_š™ , mas_ex™ ) @obexd/plugins/messages-dummy.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~ 30  ~<”ºo.h > 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~"log.h " 36  ~"mes§ges.h " 38 * groÙ_fÞd” = NULL ; 40  s£ssiÚ { 41 * mcwd ; 42 * mcwd_absÞu‹ ; 43 * m»que¡ ; 46  sfÞd”_li¡šg_d©a { 47  £ssiÚ * m£ssiÚ ; 48 cÚ¡ * mÇme ; 49 ušt16_t mmax ; 50 ušt16_t moff£t ; 51 mes§ges_fÞd”_li¡šg_cb mÿÎback ; 52 * mu£r_d©a ; 60  $fÞd”_Çmes_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b , 61 gpoš‹r u£r_d©a ) 63 cÚ¡ * Üd” [] = { 64 "šbox", "outbox", "£Á", "d–‘ed", "d¿á", NULL 66  £ssiÚ *£ssiÚ = u£r_d©a ; 67  Ÿ , ib ; 69 ià( `g_¡rcmp0 ( £ssiÚ -> cwd , "telecom/msg") == 0) { 70  Ÿ = 0; Üd” [ia]; ia++) { 71 ià( `g_¡rcmp0 ( a , Üd” [ Ÿ ]) == 0) 74  ib = 0; Üd” [ib]; ib++) { 75 ià( `g_¡rcmp0 ( b , Üd” [ ib ]) == 0) 78 ià( Ÿ !ð ib ) 79  Ÿ - ib ; 82  `g_¡rcmp0 ( a , b ); 83 } } 85 * $g‘_Ãxt_subdœ ( DIR * dp , * ·th ) 87  dœ’t * • ; 88 * abs , * Çme ; 91 ià(( • = `»addœ ( dp )è=ð NULL ) 92  NULL ; 94 ià( `¡rcmp ( • -> d_Çme , ".") == 0 || strcmp(ep->d_name, "..") == 0) 97 abs = `g_bužd_fž’ame ( ·th , • -> d_Çme , NULL ); 99 ià( `g_fže_‹¡ ( abs , G_FILE_TEST_IS_DIR )) { 100 `g_ä“ ( abs ); 104 `g_ä“ ( abs ); 107 Çme = `g_fž’ame_to_utf8 ( • -> d_Çme , -1, NULL , NULL, NULL); 109 ià( Çme =ð NULL ) { 110 `DBG ("g_filename_to_utf8(): invalid filename"); 111  NULL ; 114  Çme ; 115 } } 117  ssize_t $g‘_subdœs ( fÞd”_li¡šg_d©a * æd , GSLi¡ ** li¡ ) 119 DIR * dp ; 120 * ·th , * Çme ; 121 size_t n ; 123 ·th = `g_bužd_fž’ame ( æd -> £ssiÚ -> cwd_absÞu‹ , fld-> Çme , NULL ); 124 dp = `Ý’dœ ( ·th ); 126 ià( dp =ð NULL ) { 127  ”r = - ”ºo ; 129 `DBG ("Ý’dœ(): %d, %s", - ”r , `¡»¼Ü (-err)); 130 `g_ä“ ( ·th ); 132  ”r ; 135 n = 0; 137 ( Çme = `g‘_Ãxt_subdœ ( dp , ·th )è!ð NULL ) { 138 n ++; 139 ià( æd -> max > 0) 140 * li¡ = `g_¦i¡_´•’d (*li¡, Çme ); 143 `þo£dœ ( dp ); 144 `g_ä“ ( ·th ); 146 * li¡ = `g_¦i¡_sÜt_w™h_d©a (*li¡, fÞd”_Çmes_cmp , æd -> £ssiÚ ); 148  n ; 149 } } 151  $»tuº_fÞd”_li¡šg ( fÞd”_li¡šg_d©a * æd , GSLi¡ * li¡ ) 153  £ssiÚ *£ssiÚ = æd ->session; 154 GSLi¡ * cur ; 155 ušt16_t num = 0; 156 ušt16_t offs = 0; 161 ià( £ssiÚ -> cwd [0] !ð0 && æd -> off£t == 0) { 162 num ++; 163 æd -> `ÿÎback ( £ssiÚ , - EAGAIN , 0, "..", fld-> u£r_d©a ); 165 offs ++; 168  cur = li¡ ; offs < æd -> off£t ; offs++) { 169 cur = cur-> Ãxt ; 170 ià( cur =ð NULL ) 174 ; cur !ð NULL && num < æd -> max ; cu¸ðcur-> Ãxt ,‚um++) 175 æd -> `ÿÎback ( £ssiÚ , - EAGAIN , 0, cur -> d©a , fld-> u£r_d©a ); 177 æd -> `ÿÎback ( £ssiÚ , 0, 0, NULL , fld-> u£r_d©a ); 178 } } 180  gboÞ—n $g‘_fÞd”_li¡šg (* d ) 182  fÞd”_li¡šg_d©a * æd = d ; 183 ssize_t n ; 184 GSLi¡ * li¡ = NULL ; 186 n = `g‘_subdœs ( æd , & li¡ ); 188 ià( n < 0) { 189 æd -> `ÿÎback (æd-> £ssiÚ , n , 0, NULL , fld-> u£r_d©a ); 190  FALSE ; 193 ià( æd -> max == 0) { 194 æd -> `ÿÎback (æd-> £ssiÚ , 0, n , NULL , fld-> u£r_d©a ); 195  FALSE ; 198 `»tuº_fÞd”_li¡šg ( æd , li¡ ); 199 `g_¦i¡_ä“_fuÎ ( li¡ , g_ä“ ); 201  FALSE ; 202 } } 204  $mes§ges_š™ () 206 * tmp ; 208 ià( roÙ_fÞd” ) 211 tmp = `g‘’v ("MAP_ROOT"); 212 ià( tmp ) { 213 roÙ_fÞd” = `g_¡rdup ( tmp ); 217 tmp = `g‘’v ("HOME"); 218 ià(! tmp ) 219  - ENOENT ; 221 roÙ_fÞd” = `g_bužd_fž’ame ( tmp , "m­-mes§ges", NULL ); 224 } } 226  $mes§ges_ex™ () 228 `g_ä“ ( roÙ_fÞd” ); 229 roÙ_fÞd” = NULL ; 230 } } 232  $mes§ges_cÚÃù (** s ) 234  £ssiÚ *session; 236 £ssiÚ = `g_Ãw0 (session, 1); 237 £ssiÚ -> cwd = `g_¡rdup (""); 238 £ssiÚ -> cwd_absÞu‹ = `g_¡rdup ( roÙ_fÞd” ); 240 * s = £ssiÚ ; 243 } } 245  $mes§ges_discÚÃù (* s ) 247  £ssiÚ *£ssiÚ = s ; 249 `g_ä“ ( £ssiÚ -> cwd ); 250 `g_ä“ ( £ssiÚ -> cwd_absÞu‹ ); 251 `g_ä“ ( £ssiÚ ); 252 } } 254  mes§ges_£t_nÙifiÿtiÚ_»gi¡¿tiÚ (* £ssiÚ , 255 (* £nd_ev’t )(* £ssiÚ , 256 cÚ¡  mes§ges_ev’t * ev’t , * u£r_d©a ), 257 * u£r_d©a ) 259  - ENOSYS ; 260 } } 262  $mes§ges_£t_fÞd” (* s , cÚ¡ * Çme , gboÞ—n cdup ) 264  £ssiÚ *£ssiÚ = s ; 265 * Ãw»l = NULL ; 266 * Ãwabs ; 267 * tmp ; 269 ià( Çme && ( `¡rchr Òame, '/'è|| `¡rcmp (name, "..") == 0)) 270  - EBADR ; 272 ià( cdup ) { 273 ià( £ssiÚ -> cwd [0] == 0) 274  - ENOENT ; 276 Ãw»l = `g_·th_g‘_dœÇme ( £ssiÚ -> cwd ); 279 ià( Ãw»l [0] == '.' &&‚ewrel[1] == 0) 280 Ãw»l [0] = 0; 283 tmp = Ãw»l ; 284 ià(! cdup && (! Çme ||‚ame[0] == 0)) 285 Ãw»l = `g_¡rdup (""); 287 Ãw»l = `g_bužd_fž’ame Òew»È?‚ew»È: £ssiÚ -> cwd , Çme , 288 NULL ); 289 `g_ä“ ( tmp ); 291 Ãwabs = `g_bužd_fž’ame ( roÙ_fÞd” , Ãw»l , NULL ); 293 ià(! `g_fže_‹¡ ( Ãwabs , G_FILE_TEST_IS_DIR )) { 294 `g_ä“ ( Ãw»l ); 295 `g_ä“ ( Ãwabs ); 296  - ENOENT ; 299 `g_ä“ ( £ssiÚ -> cwd ); 300 £ssiÚ -> cwd = Ãw»l ; 302 `g_ä“ ( £ssiÚ -> cwd_absÞu‹ ); 303 £ssiÚ -> cwd_absÞu‹ = Ãwabs ; 306 } } 308  $mes§ges_g‘_fÞd”_li¡šg (* s , cÚ¡ * Çme , ušt16_t max , 309 ušt16_t off£t , 310 mes§ges_fÞd”_li¡šg_cb ÿÎback , 311 * u£r_d©a ) 313  £ssiÚ *£ssiÚ = s ; 314  fÞd”_li¡šg_d©a * æd ; 316 æd = `g_Ãw0 ( fÞd”_li¡šg_d©a , 1); 317 æd -> £ssiÚ = session; 318 æd -> Çme =‚ame; 319 æd -> max = max; 320 æd -> off£t = offset; 321 æd -> ÿÎback = callback; 322 æd -> u£r_d©a = user_data; 324 £ssiÚ -> »que¡ = æd ; 326 `g_idË_add_fuÎ ( G_PRIORITY_DEFAULT_IDLE , g‘_fÞd”_li¡šg , 327 æd , g_ä“ ); 330 } } 332  $mes§ges_g‘_mes§ges_li¡šg (* £ssiÚ , cÚ¡ * Çme , 333 ušt16_t max , ušt16_ˆ off£t , 334 ušt8_t subjeù_Ën , 335 cÚ¡  mes§ges_fž‹r * fž‹r , 336 mes§ges_g‘_mes§ges_li¡šg_cb ÿÎback , 337 * u£r_d©a ) 339  - ENOSYS ; 340 } } 342  $mes§ges_g‘_mes§ge (* £ssiÚ , cÚ¡ * hªdË , 343  æags , 344 mes§ges_g‘_mes§ge_cb ÿÎback , 345 * u£r_d©a ) 347  - ENOSYS ; 348 } } 350  $mes§ges_upd©e_šbox (* £ssiÚ , mes§ges_¡©us_cb ÿÎback , 351 * u£r_d©a ) 353  - ENOSYS ; 354 } } 356  $mes§ges_£t_»ad (* £ssiÚ , cÚ¡ * hªdË , ušt8_t v®ue , 357 mes§ges_¡©us_cb ÿÎback , * u£r_d©a ) 359  - ENOSYS ; 360 } } 362  $mes§ges_£t_d–‘e (* £ssiÚ , cÚ¡ * hªdË , ušt8_t v®ue , 363 mes§ges_¡©us_cb ÿÎback , * u£r_d©a ) 365  - ENOSYS ; 366 } } 368  $mes§ges_abÜt (* s ) 370  £ssiÚ *£ssiÚ = s ; 372 ià( £ssiÚ -> »que¡ ) { 373 `g_idË_»move_by_d©a ( £ssiÚ -> »que¡ ); 374 £ssiÚ -> »que¡ = NULL ; 376 } } @obexd/plugins/messages-tizen.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<”ºo.h > 28  ~ 29  ~<¡ršg.h > 30  ~<¡dio.h > 31  ~"log.h " 32  ~"mes§ges.h " 34  ~ 36  #QUERY_GET_FOLDER_TREE "G‘FÞd”T»e" ) 37  #QUERY_GET_MSG_LIST "G‘Mes§geLi¡" ) 38  #QUERY_GET_MESSAGE "G‘Mes§ge" ) 39  #QUERY_PUSH_MESSAGE "PushMes§ge" ) 40  #QUERY_PUSH_MESSAGE_DATA "PushMes§geD©a" ) 41  #QUERY_UPDATE_MESSAGE "Upd©eMes§ge" ) 42  #QUERY_SET_READ_STATUS "S‘R—dStus" ) 43  #QUERY_SET_DELETE_STATUS "S‘D–‘eStus" ) 44  #QUERY_NOTI_REGISTRATION "NÙiRegi¡¿tiÚ" ) 45  #QUERY_DESTROY_AGENT "De¡royAg’t" ) 47  #BT_MAP_SERVICE_OBJECT_PATH "/Üg/bluez/m­_ag’t" ) 48  #BT_MAP_SERVICE_NAME "Üg.bluez.m­_ag’t" ) 49  #BT_MAP_SERVICE_INTERFACE "Üg.bluez.M­Ag’t" ) 52  #BT_MAP_LIST_ITEM_MAX_LEN 256 ) 54  DBusCÚÃùiÚ * gg_cÚn = NULL ; 56  smns_»g_d©a { 57 ušt8_t mnÙifiÿtiÚ_¡©us ; 58 * m»mÙe_addr ; 61  smes§ge_fÞd” { 62 * mÇme ; 63 GSLi¡ * msubfÞd”s ; 66  s£ssiÚ { 67 * mcwd ; 68  mes§ge_fÞd” * mfÞd” ; 69 * mÇme ; 70 ušt16_t mmax ; 71 ušt16_t moff£t ; 72 * mu£r_d©a ; 73  mes§ges_fž‹r * mfž‹r ; 74  mes§ges_mes§ge * mmsg ; 75 (* mfÞd”_li¡_cb )(* m£ssiÚ ,  m”r , ušt16_t msize , 76 cÚ¡ * mÇme , * mu£r_d©a ); 77 (* mmsg_li¡_cb )(* m£ssiÚ ,  m”r ,  msize , gboÞ—n mÃwmsg , 78 cÚ¡  mes§ges_mes§ge * m’Œy , 79 * mu£r_d©a ); 80 (* mpush_msg_cb )(* m£ssiÚ ,  m”r , gušt64 mhªdË , 81 * mu£r_d©a ); 82 (* mg‘_msg_cb )(* m£ssiÚ ,  m”r , gboÞ—n mfmÜe , 83 cÚ¡ * mchunk , * mu£r_d©a ); 84 (* mmsg_upd©e_cb )(* m£ssiÚ ,  m”r , * mu£r_d©a ); 85 (* mmsg_¡©us_cb )(* m£ssiÚ ,  m”r , * mu£r_d©a ); 88  mes§ge_fÞd” * gfÞd”_Œ“ = NULL ; 90  $mes§ge_li¡_™em_ä“ ( mes§ges_mes§ge * d©a ) 92 `DBG ("+"); 93 `g_ä“ ( d©a -> hªdË ); 94 d©a -> hªdË = NULL ; 96 `g_ä“ ( d©a -> subjeù ); 97 d©a -> subjeù = NULL ; 99 `g_ä“ ( d©a -> d©‘ime ); 100 d©a -> d©‘ime = NULL ; 102 `g_ä“ ( d©a -> £nd”_Çme ); 103 d©a -> £nd”_Çme = NULL ; 105 `g_ä“ ( d©a -> £nd”_add»ssšg ); 106 d©a -> £nd”_add»ssšg = NULL ; 108 `g_ä“ ( d©a -> »¶yto_add»ssšg ); 109 d©a -> »¶yto_add»ssšg = NULL ; 111 `g_ä“ ( d©a -> »c›Á_Çme ); 112 d©a -> »c›Á_Çme = NULL ; 114 `g_ä“ ( d©a -> »c›Á_add»ssšg ); 115 d©a -> »c›Á_add»ssšg = NULL ; 117 `g_ä“ ( d©a -> ty³ ); 118 d©a -> ty³ = NULL ; 120 `g_ä“ ( d©a -> »û±iÚ_¡©us ); 121 d©a -> »û±iÚ_¡©us = NULL ; 123 `g_ä“ ( d©a -> size ); 124 d©a -> size = NULL ; 126 `g_ä“ ( d©a -> ©chm’t_size ); 127 d©a -> ©chm’t_size = NULL ; 128 `DBG ("-"); 129 } } 131  $£ssiÚ_fž‹r_ä“ ( mes§ges_fž‹r * d©a ) 133 `DBG ("+"); 134 ià( NULL =ð d©a ) 137 `g_ä“ (( gpoš‹r ) d©a -> ³riod_begš ); 138 `g_ä“ (( gpoš‹r ) d©a -> ³riod_’d ); 139 `g_ä“ (( gpoš‹r ) d©a -> »c›Á ); 140 `g_ä“ (( gpoš‹r ) d©a -> Üigš©Ü ); 141 `g_ä“ ( d©a ); 142 `DBG ("-"); 143 } } 145  gboÞ—n $is_time_š_³riod (* »f_time , * ³riod ) 147 gušt64 »f_d©e_v® ; 148 gušt64 d©e_v® ; 150 gušt64 »f_time_v® ; 151 gušt64 time_v® ; 153 * ¡¬t ; 154 * ’d = NULL ; 156  ‹mp [20]; 158 ¡¬t = `¡¹ok_r ( »f_time , "T", & ’d ); 159 ià( NULL =𠡬t || NULL =ð ’d ) 160  FALSE ; 162 `¢´štf ( ‹mp , Ñemp), "%s", ¡¬t ); 163 »f_d©e_v® = `g_ascii_¡¹ouÎ ( ‹mp , NULL , 16); 164 `¢´štf ( ‹mp , Ñemp), "%s", ’d ); 165 »f_time_v® = `g_ascii_¡¹ouÎ ( ‹mp , NULL , 16); 167 ¡¬t = `¡¹ok_r ( ³riod , "T", & ’d ); 168 ià( NULL =𠡬t || NULL =ð ’d ) 169  FALSE ; 171 `¢´štf ( ‹mp , Ñemp), "%s", ¡¬t ); 172 d©e_v® = `g_ascii_¡¹ouÎ ( ‹mp , NULL , 16); 173 `¢´štf ( ‹mp , Ñemp), "%s", ’d ); 174 time_v® = `g_ascii_¡¹ouÎ ( ‹mp , NULL , 16); 176 ià( »f_d©e_v® < d©e_v® ) { 177  TRUE ; 178 } ià( »f_d©e_v® > d©e_v® ) { 179  FALSE ; 181 ià( »f_time_v® <ð time_v® ) 182  TRUE ; 184  FALSE ; 186 } } 188  gboÞ—n $__fž‹r_timeba£d (* begš , * ’d , * time ) 190 gboÞ—n »t = 0; 192 ià(! begš && ! ’d ) { 196  TRUE ; 197 } ià(! ’d && begš ) { 202  `is_time_š_³riod ( begš , time ); 203 } ià(! begš && ’d ) { 208  `is_time_š_³riod ( time , ’d ); 211 ià( TRUE =ð `is_time_š_³riod ( ’d , begš )) 212  FALSE ; 214 »t = `is_time_š_³riod ( begš , time ); 215 ià( »t =ð TRUE ) 216  `is_time_š_³riod ( time , ’d ); 218  FALSE ; 220 } } 222  ušt8_t $g‘_ty³_v® (cÚ¡ * ty³ ) 224 ià(! `g_¡rcmp0 ( ty³ , "SMS_GSM")) 226 ià(! `g_¡rcmp0 ( ty³ , "SMS_CDMA")) 228 ià(! `g_¡rcmp0 ( ty³ , "EMAIL")) 230 ià(! `g_¡rcmp0 ( ty³ , "MMS")) 234 } } 236  ušt8_t $g‘_»ad_¡©us_v® ( gboÞ—n »ad ) 238 ià( »ad ) 242 } } 244  ušt8_t $g‘_´iÜ™y_v® ( gboÞ—n ´iÜ™y ) 246 ià( ´iÜ™y ) 250 } } 252  mes§ge_fÞd” * $g‘_fÞd” (cÚ¡ * fÞd” ) 254 GSLi¡ * fÞd”s = fÞd”_Œ“ -> subfÞd”s ; 255  mes§ge_fÞd” * Ï¡ = NULL ; 256 ** ·th ; 257  i ; 259 ià( `g_¡rcmp0 ( fÞd” , "/") == 0) 260  fÞd”_Œ“ ; 262 ·th = `g_¡r¥l™ ( fÞd” , "/", 0); 264  i = 1; ·th [i] !ð NULL ; i++) { 265 gboÞ—n m©ch_found = FALSE ; 266 GSLi¡ * l ; 268  l = fÞd”s ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 269  mes§ge_fÞd” * fÞd” = l -> d©a ; 271 ià( `g_ascii_¡ºÿ£cmp ( fÞd” -> Çme , ·th [ i ], 272 `¡¾’ ( fÞd” -> Çme )) == 0) { 273 m©ch_found = TRUE ; 274 Ï¡ = l -> d©a ; 275 fÞd”s = fÞd” -> subfÞd”s ; 280 ià(! m©ch_found ) { 281 `g_¡rä“v ( ·th ); 282  NULL ; 286 `g_¡rä“v ( ·th ); 288  Ï¡ ; 289 } } 291  $de¡roy_fÞd”_Œ“ (* roÙ ) 293  mes§ge_fÞd” * fÞd” = roÙ ; 294 GSLi¡ * tmp , * Ãxt ; 296 ià( fÞd” =ð NULL ) 299 `g_ä“ ( fÞd” -> Çme ); 301 tmp = fÞd” -> subfÞd”s ; 302  tmp !ð NULL ) { 303 Ãxt = `g_¦i¡_Ãxt ( tmp ); 304 `de¡roy_fÞd”_Œ“ ( tmp -> d©a ); 305 tmp = Ãxt ; 307 `g_¦i¡_ä“ ( fÞd” -> subfÞd”s ); 308 `g_ä“ ( fÞd” ); 309 } } 311  mes§ge_fÞd” * $ü—‹_fÞd” (cÚ¡ * Çme ) 313  mes§ge_fÞd” * fÞd” = `g_Ãw0 (message_folder, 1); 315 fÞd” -> Çme = `g_¡rdup (name); 316  fÞd” ; 317 } } 319  $ü—‹_fÞd”_Œ“ () 322  mes§ge_fÞd” * ·»Á , * chžd ; 324 fÞd”_Œ“ = `ü—‹_fÞd” ("/"); 326 ·»Á = `ü—‹_fÞd” ("telecom"); 327 fÞd”_Œ“ -> subfÞd”s = `g_¦i¡_­³nd (folder_tree->subfolders, 328 ·»Á ); 330 chžd = `ü—‹_fÞd” ("msg"); 331 ·»Á -> subfÞd”s = `g_¦i¡_­³nd Õ¬’t->subfÞd”s, chžd ); 332 } } 334  $mes§ges_š™ () 336 g_cÚn = `dbus_bus_g‘ ( DBUS_BUS_SESSION , NULL ); 337 ià(! g_cÚn ) { 338 `”rÜ ("Can't get on session bus"); 343 } } 345  $mes§ges_ex™ () 347 ià( g_cÚn ) { 348 `dbus_cÚÃùiÚ_uÄef ( g_cÚn ); 349 g_cÚn = NULL ; 351 } } 353  $mes§ge_g‘_fÞd”_li¡ ( DBusMes§ge * »¶y , * u£r_d©a ) 355 DBusMes§geI‹r ™” ; 356 DBusMes§geI‹r ™”_¡ruù ; 357 DBusMes§geI‹r ’Œy ; 358 DBusE¼Ü d”r ; 359 cÚ¡ * Çme = NULL ; 360  mes§ge_fÞd” * ·»Á = {0,}, * chžd = {0,}; 361 GSLi¡ * l ; 363 `DBG ("+\n"); 365  l = fÞd”_Œ“ -> subfÞd”s ;† !ð NULL ;† = ·»Á ->subfolders) 366 ·»Á = l -> d©a ; 368 `DBG ("La¡ chžd fÞd” = % \n", ·»Á -> Çme ); 369 `dbus_”rÜ_š™ (& d”r ); 371 ià( `dbus_£t_”rÜ_äom_mes§ge (& d”r , »¶y )) { 372 `”rÜ ("R•l›d w™h‡À”rÜ: %s, %s", d”r . Çme , d”r. mes§ge ); 373 `dbus_”rÜ_ä“ (& d”r ); 375 `dbus_mes§ge_™”_š™ ( »¶y , & ™” ); 376 `dbus_mes§ge_™”_»cur£ (& ™” , & ™”_¡ruù ); 378  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™”_¡ruù ) == 379 DBUS_TYPE_STRUCT ) { 380 `dbus_mes§ge_™”_»cur£ (& ™”_¡ruù , & ’Œy ); 382 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & Çme ); 383 `DBG ("FÞd”‚amð% \n", Çme ); 384 chžd = `ü—‹_fÞd” ( Çme ); 385 ·»Á -> subfÞd”s = `g_¦i¡_­³nd (parent->subfolders, 386 chžd ); 387 `dbus_mes§ge_™”_Ãxt (& ™”_¡ruù ); 390 `dbus_mes§ge_uÄef ( »¶y ); 391 `DBG ("-\n"); 392 } } 394  $mes§ge_g‘_msg_li¡ ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 396 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 397 DBusMes§geI‹r ™” ; 398 DBusMes§geI‹r ™”_¡ruù ; 399 DBusMes§geI‹r ’Œy ; 400 DBusE¼Ü d”r ; 401 cÚ¡ * msg_hªdË ; 402 cÚ¡ * subjeù ; 403 cÚ¡ * d©‘ime ; 404 cÚ¡ * £nd”_Çme ; 405 cÚ¡ * £nd”_add»ssšg ; 406 cÚ¡ * »¶yto_add»ssšg ; 407 cÚ¡ * »c›Á_Çme ; 408 cÚ¡ * »c›Á_add»ssšg ; 409 cÚ¡ * ty³ ; 410 cÚ¡ * »û±iÚ_¡©us ; 411 cÚ¡ * size ; 412 cÚ¡ * ©chm’t_size ; 413 gboÞ—n ‹xt ; 414 gboÞ—n »ad ; 415 gboÞ—n £Á ; 416 gboÞ—n ´Ùeù ; 417 gboÞ—n ´iÜ™y ; 418 gboÞ—n Ãwmes§ge ; 419 gušt64 couÁ ; 420 ušt8_t ty³_v® ; 421 ušt8_t »ad_v® ; 422 ušt8_t ´iÜ™y_v® ; 423 ušt32_t mask ; 425  £ssiÚ *£ssiÚ = u£r_d©a ; 426  mes§ges_mes§ge * d©a = `g_Ãw0 (messages_message, 1); 428 `DBG ("+\n"); 429 `DBG ("parameter_mask = %x;ype = %d;…eriod_begin = %s;" 432 £ssiÚ -> fž‹r -> ·¿m‘”_mask , sessiÚ->fž‹r-> ty³ , 433 £ssiÚ -> fž‹r -> ³riod_begš , sessiÚ->fž‹r-> ³riod_’d , 434 £ssiÚ -> fž‹r -> »ad_¡©us , sessiÚ->fž‹r-> »c›Á , 435 £ssiÚ -> fž‹r -> Üigš©Ü , sessiÚ->fž‹r-> ´iÜ™y ); 437 `dbus_”rÜ_š™ (& d”r ); 439 ià( `dbus_£t_”rÜ_äom_mes§ge (& d”r , »¶y )) { 440 `”rÜ ("R•l›d w™h‡À”rÜ: %s, %s", d”r . Çme , d”r. mes§ge ); 441 `dbus_”rÜ_ä“ (& d”r ); 442 £ssiÚ -> `msg_li¡_cb (£ssiÚ, - ENOENT , 0, 443 FALSE , d©a , £ssiÚ -> u£r_d©a ); 445 `g_ä“ ( d©a ); 446 `g_ä“ ( £ssiÚ -> Çme ); 447 `£ssiÚ_fž‹r_ä“ ( £ssiÚ -> fž‹r ); 448 `dbus_mes§ge_uÄef ( »¶y ); 453 `dbus_mes§ge_™”_š™ ( »¶y , & ™” ); 454 `dbus_mes§ge_™”_g‘_basic (& ™” , & Ãwmes§ge ); 455 `dbus_mes§ge_™”_Ãxt (& ™” ); 456 `dbus_mes§ge_™”_g‘_basic (& ™” , & couÁ ); 457 `dbus_mes§ge_™”_Ãxt (& ™” ); 459 ià( £ssiÚ -> max == 0) 460  dÚe ; 462 `dbus_mes§ge_™”_»cur£ (& ™” , & ™”_¡ruù ); 464 ià( £ssiÚ -> fž‹r -> ·¿m‘”_mask == 0) 465 mask = ~ £ssiÚ -> fž‹r -> ·¿m‘”_mask ; 467 mask = £ssiÚ -> fž‹r -> ·¿m‘”_mask ; 469  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™”_¡ruù ) == 470 DBUS_TYPE_STRUCT ) { 471 `dbus_mes§ge_™”_»cur£ (& ™”_¡ruù , & ’Œy ); 472 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & msg_hªdË ); 474 ià( msg_hªdË =ð NULL ) { 475 `dbus_mes§ge_™”_Ãxt (& ™”_¡ruù ); 479 `DBG ("Msg hªdË = % \n", msg_hªdË ); 480 d©a -> hªdË = `g_¡rdup ( msg_hªdË ); 482 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 483 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & subjeù ); 485 ià( mask & PMASK_SUBJECT ) { 486 `DBG ("subjeù = %s\n", subjeù ); 487 d©a -> subjeù = `g_¡ºdup (subject, 488 BT_MAP_LIST_ITEM_MAX_LEN ); 489 d©a -> mask |ð PMASK_SUBJECT ; 492 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 493 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & d©‘ime ); 495 ià(( mask & PMASK_DATETIME è&& ( NULL !ð d©‘ime )) { 496 `DBG ("d©‘imð%s\n", d©‘ime ); 497 * begš = `g_¡rdup ( £ssiÚ -> fž‹r -> ³riod_begš ); 498 * ’d = `g_¡rdup ( £ssiÚ -> fž‹r -> ³riod_’d ); 499 * time = `g_¡rdup ( d©‘ime ); 500 gboÞ—n fž‹r ; 502 fž‹r = `__fž‹r_timeba£d ( begš , ’d , time ); 504 `g_ä“ ( begš ); 505 `g_ä“ ( ’d ); 506 `g_ä“ ( time ); 508 ià( TRUE =ð fž‹r ) { 509 d©a -> d©‘ime = `g_¡rdup (datetime); 510 d©a -> mask |ð PMASK_DATETIME ; 512 `mes§ge_li¡_™em_ä“ ( d©a ); 513 `dbus_mes§ge_™”_Ãxt (& ™”_¡ruù ); 518 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 519 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & £nd”_Çme ); 521 ià(( mask & PMASK_SENDER_NAME ) && 522 ( NULL !ð £ssiÚ -> fž‹r -> Üigš©Ü )) { 523 `DBG ("£nd”_Çmð% \n", £nd”_Çme ); 525 ià( `g_¡r¡r_Ën ( £nd”_Çme , -1, 526 £ssiÚ -> fž‹r -> Üigš©Ü )) { 527 d©a -> £nd”_Çme = `g_¡ºdup (sender_name, 528 BT_MAP_LIST_ITEM_MAX_LEN ); 529 d©a -> mask |ð PMASK_SENDER_NAME ; 531 `mes§ge_li¡_™em_ä“ ( d©a ); 532 `dbus_mes§ge_™”_Ãxt (& ™”_¡ruù ); 537 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 538 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & £nd”_add»ssšg ); 540 ià(( mask & PMASK_SENDER_ADDRESSING ) && 541 ( NULL !ð £nd”_add»ssšg )) { 542 `DBG ("£nd”_add»ssšg = % \n", £nd”_add»ssšg ); 544 d©a -> £nd”_add»ssšg = `g_¡ºdup (sender_addressing, 545 BT_MAP_LIST_ITEM_MAX_LEN ); 546 d©a -> mask |ð PMASK_SENDER_ADDRESSING ; 549 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 550 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & »c›Á_Çme ); 552 ià(( mask & PMASK_RECIPIENT_NAME ) && 553 ( NULL !ð £ssiÚ -> fž‹r -> »c›Á )) { 554 `DBG ("»c›Á_Çmð% \n", »c›Á_Çme ); 556 ià( `g_¡r¡r_Ën ( »c›Á_Çme , -1, 557 £ssiÚ -> fž‹r -> »c›Á )) { 558 d©a -> »c›Á_Çme = 559 `g_¡ºdup ( »c›Á_Çme , 560 BT_MAP_LIST_ITEM_MAX_LEN ); 561 d©a -> mask |ð PMASK_RECIPIENT_NAME ; 563 `mes§ge_li¡_™em_ä“ ( d©a ); 564 `dbus_mes§ge_™”_Ãxt (& ™”_¡ruù ); 569 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 570 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & »c›Á_add»ssšg ); 572 ià(( mask & PMASK_RECIPIENT_ADDRESSING ) && 573 ( NULL !ð »c›Á_add»ssšg )) { 574 `DBG ("»c›Á_add»ssšg=%s\n", »c›Á_add»ssšg ); 576 d©a -> »c›Á_add»ssšg = 577 `g_¡ºdup ( »c›Á_add»ssšg , 578 BT_MAP_LIST_ITEM_MAX_LEN ); 579 d©a -> mask |ð PMASK_RECIPIENT_ADDRESSING ; 582 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 583 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & ty³ ); 585 ià(( mask & PMASK_TYPE è&& ( NULL !ð ty³ )) { 586 `DBG ("ty³ = % \n", ty³ ); 588 ty³_v® = `g‘_ty³_v® ( ty³ ); 589 ià(!( £ssiÚ -> fž‹r -> ty³ & ty³_v® )) { 590 d©a -> ty³ = `g_¡rdup (type); 591 d©a -> mask |ð PMASK_TYPE ; 595 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 596 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & size ); 598 ià(( mask & PMASK_SIZE è&& ( NULL !ð size )) { 599 `DBG ("sizð% \n", size ); 601 d©a -> size = `g_¡rdup (size); 602 d©a -> mask |ð PMASK_SIZE ; 605 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 606 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & »û±iÚ_¡©us ); 608 ià( mask & PMASK_RECEPTION_STATUS ) { 609 `DBG ("»û±iÚ_¡©u ð% \n", »û±iÚ_¡©us ); 611 d©a -> »û±iÚ_¡©us = `g_¡rdup (reception_status); 612 d©a -> mask |ð PMASK_RECEPTION_STATUS ; 615 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 616 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & ‹xt ); 618 ià( mask & PMASK_TEXT ) { 619 `DBG ("‹xˆð%d \n", ‹xt ); 620 d©a -> ‹xt =ext; 621 d©a -> mask |ð PMASK_TEXT ; 624 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 625 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & ©chm’t_size ); 627 ià( mask & PMASK_ATTACHMENT_SIZE ) { 628 `DBG ("©chm’t_sizð%s\n", ©chm’t_size ); 630 d©a -> ©chm’t_size = `g_¡rdup (attachment_size); 631 d©a -> mask |ð PMASK_ATTACHMENT_SIZE ; 634 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 635 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & ´iÜ™y ); 637 ià( mask & PMASK_PRIORITY ) { 638 `DBG ("´iÜ™y = %d \n", ´iÜ™y ); 640 ´iÜ™y_v® = `g‘_´iÜ™y_v® ( ´iÜ™y ); 641 ià(( £ssiÚ -> fž‹r -> ´iÜ™y == 0) || 642 ( £ssiÚ -> fž‹r -> ´iÜ™y & ´iÜ™y_v® )) { 643 d©a -> ´iÜ™y =…riority; 644 d©a -> mask |ð PMASK_PRIORITY ; 646 `mes§ge_li¡_™em_ä“ ( d©a ); 647 `dbus_mes§ge_™”_Ãxt (& ™”_¡ruù ); 652 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 653 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & »ad ); 655 ià( mask & PMASK_READ ) { 656 `DBG ("»ad = %d \n", »ad ); 658 »ad_v® = `g‘_»ad_¡©us_v® ( »ad ); 660 ià(( £ssiÚ -> fž‹r -> »ad_¡©us == 0) || 661 ( £ssiÚ -> fž‹r -> »ad_¡©us & »ad_v® )) { 662 d©a -> »ad =„ead; 663 d©a -> mask |ð PMASK_READ ; 665 `mes§ge_li¡_™em_ä“ ( d©a ); 666 `dbus_mes§ge_™”_Ãxt (& ™”_¡ruù ); 671 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 672 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & £Á ); 674 ià( mask & PMASK_SENT ) { 675 `DBG ("£Á = %d \n", £Á ); 676 d©a -> £Á = sent; 677 d©a -> mask |ð PMASK_SENT ; 680 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 681 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & ´Ùeù ); 683 ià( mask & PMASK_PROTECTED ) { 684 `DBG ("´Ùeù = %d \n", ´Ùeù ); 685 d©a -> ´Ùeù =…rotect; 686 d©a -> mask |ð PMASK_PROTECTED ; 689 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 690 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & »¶yto_add»ssšg ); 692 ià(( mask & PMASK_REPLYTO_ADDRESSING ) && 693 (0x04 =ð `g‘_ty³_v® ( ty³ ))) { 695 `DBG ("»¶yto_add»ssšg = % \n", »¶yto_add»ssšg ); 696 ià( »¶yto_add»ssšg ) 697 d©a -> »¶yto_add»ssšg = 698 `g_¡rdup ( »¶yto_add»ssšg ); 700 d©a -> »¶yto_add»ssšg = `g_¡rdup (""); 702 d©a -> mask |ð PMASK_REPLYTO_ADDRESSING ; 705 £ssiÚ -> `msg_li¡_cb (£ssiÚ, - EAGAIN , 1, Ãwmes§ge , d©a , 706 £ssiÚ -> u£r_d©a ); 708 `mes§ge_li¡_™em_ä“ ( d©a ); 709 `dbus_mes§ge_™”_Ãxt (& ™”_¡ruù ); 712 dÚe : 713 £ssiÚ -> `msg_li¡_cb (£ssiÚ, 0, couÁ , Ãwmes§ge , NULL , 714 £ssiÚ -> u£r_d©a ); 716 `g_ä“ ( d©a ); 717 `g_ä“ ( £ssiÚ -> Çme ); 718 `£ssiÚ_fž‹r_ä“ ( £ssiÚ -> fž‹r ); 719 `dbus_mes§ge_uÄef ( »¶y ); 720 `DBG ("-\n"); 721 } } 723  $mes§ge_g‘_msg ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 725 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 726 DBusMes§geI‹r ™” ; 727 DBusE¼Ü d”r ; 728  £ssiÚ *£ssiÚ = u£r_d©a ; 729 * msg_body ; 730 gboÞ—n äaùiÚ_d–iv” ; 732 `DBG ("+\n"); 734 `dbus_”rÜ_š™ (& d”r ); 735 ià( `dbus_£t_”rÜ_äom_mes§ge (& d”r , »¶y )) { 736 `”rÜ ("R•l›d w™h‡À”rÜ: %s, %s", d”r . Çme , d”r. mes§ge ); 737 `dbus_”rÜ_ä“ (& d”r ); 739 `dbus_mes§ge_™”_š™ ( »¶y , & ™” ); 740 `dbus_mes§ge_™”_g‘_basic (& ™” , & äaùiÚ_d–iv” ); 741 `dbus_mes§ge_™”_Ãxt (& ™” ); 742 `dbus_mes§ge_™”_g‘_basic (& ™” , & msg_body ); 743 `DBG ("msg_body %s\n", msg_body ); 745 £ssiÚ -> `g‘_msg_cb (£ssiÚ, - EAGAIN , äaùiÚ_d–iv” , 746 msg_body , £ssiÚ -> u£r_d©a ); 747 £ssiÚ -> `g‘_msg_cb (£ssiÚ, 0, äaùiÚ_d–iv” , 748 NULL , £ssiÚ -> u£r_d©a ); 750 `dbus_mes§ge_uÄef ( »¶y ); 751 `DBG ("-\n"); 752 } } 754  $mes§ges_cÚÃù (** s ) 756 DBusMes§ge * mes§ge ; 757 DBusMes§ge * »¶y ; 758 DBusE¼Ü ”r ; 759 `DBG ("+\n"); 761  £ssiÚ *£ssiÚ = `g_Ãw0 (session, 1); 763 `ü—‹_fÞd”_Œ“ (); 765 £ssiÚ -> cwd = `g_¡rdup ("/"); 766 £ssiÚ -> fÞd” = fÞd”_Œ“ ; 768 * s = £ssiÚ ; 770 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( BT_MAP_SERVICE_NAME , 771 BT_MAP_SERVICE_OBJECT_PATH , 772 BT_MAP_SERVICE_INTERFACE , 773 QUERY_GET_FOLDER_TREE ); 774 ià(! mes§ge ) { 775 `”rÜ ("Can't‡llocate‚ew message"); 779 `dbus_”rÜ_š™ (& ”r ); 781 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( g_cÚn , mes§ge , 782 DBUS_TIMEOUT_USE_DEFAULT , & ”r ); 783 ià(! »¶y ) { 784 `DBG (" Reply failed"); 785 ià( `dbus_”rÜ_is_£t (& ”r )) { 786 `DBG ("%s", ”r . mes§ge ); 787 `dbus_”rÜ_ä“ (& ”r ); 790 `dbus_mes§ge_uÄef ( mes§ge ); 794 `mes§ge_g‘_fÞd”_li¡ ( »¶y , £ssiÚ ); 796 `dbus_mes§ge_uÄef ( mes§ge ); 797 `DBG ("-\n"); 799 } } 801  $mes§ges_discÚÃù (* s ) 803 DBusMes§ge * mes§ge ; 804  £ssiÚ *£ssiÚ = s ; 805 `DBG ("+\n"); 807 `de¡roy_fÞd”_Œ“ ( fÞd”_Œ“ ); 808 fÞd”_Œ“ = NULL ; 809 `g_ä“ ( £ssiÚ -> cwd ); 810 `g_ä“ ( £ssiÚ ); 812 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( BT_MAP_SERVICE_NAME , 813 BT_MAP_SERVICE_OBJECT_PATH , 814 BT_MAP_SERVICE_INTERFACE , 815 QUERY_DESTROY_AGENT ); 817 ià(! mes§ge ) { 818 `”rÜ ("Can't‡llocate‚ew message"); 822 ià( `dbus_cÚÃùiÚ_£nd ( g_cÚn , mes§ge , NULL è=ð FALSE ) 823 `”rÜ ("Could‚ot send dbus message"); 825 `dbus_mes§ge_uÄef ( mes§ge ); 827 `DBG ("-\n"); 828 } } 830  gboÞ—n $nÙifiÿtiÚ_»gi¡¿tiÚ ( gpoš‹r u£r_d©a ) 832 `DBG ("+\n"); 833 DBusMes§ge * mes§ge = NULL ; 834 gboÞ—n »g ; 835  mns_»g_d©a * d©a = (mns_»g_d©¨*) u£r_d©a ; 837 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( BT_MAP_SERVICE_NAME , 838 BT_MAP_SERVICE_OBJECT_PATH , 839 BT_MAP_SERVICE_INTERFACE , 840 QUERY_NOTI_REGISTRATION ); 841 ià(! mes§ge ) { 842 `”rÜ ("Can't‡llocate‚ew message"); 843  dÚe ; 846 `DBG ("d©a->nÙifiÿtiÚ_¡©u ð%d\n", d©a -> nÙifiÿtiÚ_¡©us ); 848 ià( d©a -> nÙifiÿtiÚ_¡©us == 1) 849 »g = TRUE ; 851 »g = FALSE ; 853 `dbus_mes§ge_­³nd_¬gs ( mes§ge , DBUS_TYPE_STRING , & d©a -> »mÙe_addr , 854 DBUS_TYPE_BOOLEAN , & »g , 855 DBUS_TYPE_INVALID ); 857 ià( `dbus_cÚÃùiÚ_£nd ( g_cÚn , mes§ge , NULL è=ð FALSE ) 858 `”rÜ ("Could‚ot send dbus message"); 860 `dbus_mes§ge_uÄef ( mes§ge ); 862 dÚe : 863 `g_ä“ ( d©a -> »mÙe_addr ); 864 `g_ä“ ( d©a ); 866 `DBG ("-\n"); 867  FALSE ; 868 } } 870  $mes§ges_£t_nÙifiÿtiÚ_»gi¡¿tiÚ (* £ssiÚ , 871 * add»ss , ušt8_t ¡©us , 872 * u£r_d©a ) 874 `DBG ("+\n"); 875  mns_»g_d©a * d©a = `g_Ãw0 (mns_reg_data, 1); 876 d©a -> nÙifiÿtiÚ_¡©us = ¡©us ; 877 d©a -> »mÙe_addr = `g_¡rdup ( add»ss ); 879 `DBG ("¡©u ð%d\n", ¡©us ); 881 `g_idË_add ( nÙifiÿtiÚ_»gi¡¿tiÚ , d©a ); 882 `DBG ("-\n"); 884 } } 886  $mes§ges_£t_fÞd” (* s , cÚ¡ * Çme , gboÞ—n cdup ) 888  £ssiÚ *£ssiÚ = s ; 889 * Ãw»l = NULL ; 890 * Ãwabs ; 891 * tmp ; 893 ià( Çme && ( `¡rchr Òame, '/'è|| `¡rcmp (name, "..") == 0)) 894  - EBADR ; 896 ià( cdup ) { 897 ià( £ssiÚ -> cwd [0] == 0) 898  - ENOENT ; 900 Ãw»l = `g_·th_g‘_dœÇme ( £ssiÚ -> cwd ); 903 ià( Ãw»l [0] == '.' &&‚ewrel[1] == 0) 904 Ãw»l [0] = 0; 907 tmp = Ãw»l ; 908 ià(! cdup && (! Çme ||‚ame[0] == 0)) 909 Ãw»l = `g_¡rdup (""); 911 Ãw»l = `g_bužd_fž’ame Òew»È?‚ew»È: £ssiÚ -> cwd , Çme , 912 NULL ); 913 `g_ä“ ( tmp ); 915 ià( Ãw»l [0] != '/') 916 Ãwabs = `g_bužd_fž’ame ("/", Ãw»l , NULL ); 918 Ãwabs = `g_¡rdup ( Ãw»l ); 920 £ssiÚ -> fÞd” = `g‘_fÞd” ( Ãwabs ); 921 ià( £ssiÚ -> fÞd” =ð NULL ) { 922 `g_ä“ ( Ãw»l ); 923 `g_ä“ ( Ãwabs ); 925  - ENOENT ; 928 `g_ä“ ( Ãw»l ); 929 `g_ä“ ( £ssiÚ -> cwd ); 930 £ssiÚ -> cwd = Ãwabs ; 933 } } 935  gboÞ—n $async_g‘_fÞd”_li¡šg (* s ) 937  £ssiÚ *£ssiÚ = s ; 938  i ; 939 ušt16_t fÞd”_li¡_size = 0; 940 * ·th = NULL ; 941  mes§ge_fÞd” * fÞd” ; 942 GSLi¡ * dœ ; 944 ià( £ssiÚ -> Çme && `¡rchr (£ssiÚ->Çme, '/'è!ð NULL ) 945  dÚe ; 947 ·th = `g_bužd_fž’ame ( £ssiÚ -> cwd , sessiÚ-> Çme , NULL ); 949 ià( ·th =ð NULL || `¡¾’ (path) == 0) 950  dÚe ; 952 fÞd” = `g‘_fÞd” ( ·th ); 954 ià( fÞd” =ð NULL ) 955  dÚe ; 957 ià( £ssiÚ -> max == 0) { 958 fÞd”_li¡_size = `g_¦i¡_Ëngth ( fÞd” -> subfÞd”s ); 959  dÚe ; 962 dœ = fÞd” -> subfÞd”s ; 965  i = 0; i < £ssiÚ -> off£t ; i++) { 966 ià( dœ =ð NULL ) 967  dÚe ; 969 dœ = `g_¦i¡_Ãxt (dir); 972  i = 0; i < £ssiÚ -> max ; i++) { 973  mes§ge_fÞd” * dœ_d©a ; 975 ià( dœ =ð NULL ) 976  dÚe ; 978 dœ_d©a = dœ -> d©a ; 979 £ssiÚ -> `fÞd”_li¡_cb (£ssiÚ, - EAGAIN , 0, 980 dœ_d©a -> Çme , £ssiÚ -> u£r_d©a ); 982 dœ = `g_¦i¡_Ãxt (dir); 985 dÚe : 986 £ssiÚ -> `fÞd”_li¡_cb (£ssiÚ, 0, fÞd”_li¡_size , 987 NULL , £ssiÚ -> u£r_d©a ); 989 `g_ä“ ( ·th ); 990 `g_ä“ ( £ssiÚ -> Çme ); 992  FALSE ; 993 } } 995  $mes§ges_g‘_fÞd”_li¡šg (* s , cÚ¡ * Çme , 996 ušt16_t max , ušt16_ˆ off£t , 997 mes§ges_fÞd”_li¡šg_cb ÿÎback , 998 * u£r_d©a ) 1000 `DBG ("+\n"); 1001  £ssiÚ *£ssiÚ = s ; 1002 £ssiÚ -> Çme = `g_¡rdup (name); 1003 £ssiÚ -> max = max; 1004 £ssiÚ -> off£t = offset; 1005 £ssiÚ -> fÞd”_li¡_cb = ÿÎback ; 1006 £ssiÚ -> u£r_d©a = user_data; 1008 `g_idË_add_fuÎ ( G_PRIORITY_DEFAULT_IDLE , async_g‘_fÞd”_li¡šg , 1009 £ssiÚ , NULL ); 1011 `DBG ("-\n"); 1013 } } 1015  $mes§ges_g‘_mes§ges_li¡šg (* £ssiÚ , cÚ¡ * Çme , 1016 ušt16_t max , ušt16_ˆ off£t , 1017 ušt8_t subjeù_Ën , 1018 cÚ¡  mes§ges_fž‹r * fž‹r , 1019 mes§ges_g‘_mes§ges_li¡šg_cb ÿÎback , 1020 * u£r_d©a ) 1022 DBusP’dšgC®l * ÿÎ ; 1023 DBusMes§ge * mes§ge ; 1024  £ssiÚ * s = session; 1026 ià( Çme !ð NULL && `¡¾’ (name)) 1027 s -> Çme = `g_¡rdup (name); 1029 s -> Çme = `g_¡rdup (s-> cwd ); 1031 s -> max = max; 1032 s -> off£t = offset; 1034 s -> fž‹r = `g_Ãw0 ( mes§ges_fž‹r , 1); 1035 s -> fž‹r -> ·¿m‘”_mask = filter->parameter_mask; 1036 s -> fž‹r -> ty³ = filter->type; 1037 s -> fž‹r -> ³riod_begš = `g_¡rdup (filter->period_begin); 1038 s -> fž‹r -> ³riod_’d = `g_¡rdup (filter->period_end); 1039 s -> fž‹r -> »ad_¡©us = filter->read_status; 1040 s -> fž‹r -> »c›Á = `g_¡rdup (filter->recipient); 1041 s -> fž‹r -> Üigš©Ü = `g_¡rdup (filter->originator); 1042 s -> fž‹r -> ´iÜ™y = filter->priority; 1044 s -> msg_li¡_cb = (*) ÿÎback ; 1045 s -> u£r_d©a = user_data; 1047 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( BT_MAP_SERVICE_NAME , 1048 BT_MAP_SERVICE_OBJECT_PATH , 1049 BT_MAP_SERVICE_INTERFACE , 1050 QUERY_GET_MSG_LIST ); 1051 ià(! mes§ge ) { 1052 `”rÜ ("Can't‡llocate‚ew message"); 1053 `g_ä“ ( s -> Çme ); 1054 `£ssiÚ_fž‹r_ä“ ( s -> fž‹r ); 1058 `dbus_mes§ge_­³nd_¬gs ( mes§ge , DBUS_TYPE_STRING , & s -> Çme , 1059 DBUS_TYPE_UINT16 , & s -> max , 1060 DBUS_TYPE_INVALID ); 1062 ià( `dbus_cÚÃùiÚ_£nd_w™h_»¶y ( g_cÚn , mes§ge , & ÿÎ , 1063 DBUS_TIMEOUT_INFINITE è=ð FALSE ) { 1064 `”rÜ ("Could‚ot send dbus message"); 1065 `dbus_mes§ge_uÄef ( mes§ge ); 1066 `g_ä“ ( s -> Çme ); 1067 `£ssiÚ_fž‹r_ä“ ( s -> fž‹r ); 1070 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , mes§ge_g‘_msg_li¡ , s , NULL ); 1071 `dbus_mes§ge_uÄef ( mes§ge ); 1072 `DBG ("-\n"); 1074 } } 1076  $mes§ges_push_mes§ge (* £ssiÚ , cÚ¡ * fÞd” , 1077 ušt8_t Œª¥¬’t , ušt8_ˆ »Œy , 1078 ušt8_t ch¬£t , 1079 mes§ges_push_mes§ge_cb ÿÎback , 1080 * u£r_d©a ) 1082 DBusMes§ge * mes§ge ; 1083 DBusMes§ge * »¶y ; 1084 DBusE¼Ü ”r ; 1085  £ssiÚ * s = session; 1087 gboÞ—n §ve_cÝy = FALSE ; 1088 gboÞ—n »Œy_£nd = TRUE ; 1089 gboÞ—n Çtive = FALSE ; 1090 gch¬ * fÞd”_·th = NULL ; 1091 gušt64 hªdË = 0; 1093 `DBG ("+\n"); 1095 `DBG ("£ssiÚ->cwd % +\n", s -> cwd ); 1097 ià( fÞd” ) 1098 fÞd”_·th = `g_¡rdup ( fÞd” ); 1100 fÞd”_·th = `g_¡rdup ( s -> cwd ); 1102 s -> push_msg_cb = ÿÎback ; 1103 s -> u£r_d©a = user_data; 1105 ià( Œª¥¬’t & 0x1) 1106 §ve_cÝy = TRUE ; 1108 ià(!( »Œy & 0x1)) { 1109 »Œy_£nd = FALSE ; 1110 `DBG ("R‘ry s’d %d\n", »Œy_£nd ); 1113 ià( ch¬£t & 0x1) { 1114 Çtive = TRUE ; 1115 `DBG ("Çtiv£nd %d\n", Çtive ); 1118 `DBG ("§ve_cÝy %d\n", §ve_cÝy ); 1119 `DBG ("»Œy_£nd %d\n", »Œy_£nd ); 1120 `DBG ("Çtiv%d\n", Çtive ); 1122 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( BT_MAP_SERVICE_NAME , 1123 BT_MAP_SERVICE_OBJECT_PATH , 1124 BT_MAP_SERVICE_INTERFACE , 1125 QUERY_PUSH_MESSAGE ); 1126 ià(! mes§ge ) { 1127 `”rÜ ("Can't‡llocate‚ew message"); 1128 `g_ä“ ( fÞd”_·th ); 1132 `dbus_mes§ge_­³nd_¬gs ( mes§ge , DBUS_TYPE_BOOLEAN , & §ve_cÝy , 1133 DBUS_TYPE_BOOLEAN , & »Œy_£nd , 1134 DBUS_TYPE_BOOLEAN , & Çtive , 1135 DBUS_TYPE_STRING , & fÞd”_·th , 1136 DBUS_TYPE_INVALID ); 1138 `dbus_”rÜ_š™ (& ”r ); 1140 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( 1141 g_cÚn , mes§ge , 1142 DBUS_TIMEOUT_USE_DEFAULT , & ”r ); 1143 ià(! »¶y ) { 1144 `DBG (" Reply failed"); 1146 ià( `dbus_”rÜ_is_£t (& ”r )) { 1147 `DBG ("%s", ”r . mes§ge ); 1148 `dbus_”rÜ_ä“ (& ”r ); 1150 `g_ä“ ( fÞd”_·th ); 1151 `dbus_mes§ge_uÄef ( mes§ge ); 1155 ià(! `dbus_mes§ge_g‘_¬gs ( »¶y , & ”r , DBUS_TYPE_UINT64 , 1156 & hªdË , DBUS_TYPE_INVALID )) { 1157 ià( `dbus_”rÜ_is_£t (& ”r )) { 1158 `”rÜ ("”¸%s\n", ”r . mes§ge ); 1159 `dbus_”rÜ_ä“ (& ”r ); 1161 `g_ä“ ( fÞd”_·th ); 1162 `dbus_mes§ge_uÄef ( mes§ge ); 1163 `dbus_mes§ge_uÄef ( »¶y ); 1167 `DBG ("ušt64 hªdË %" G_GUINT64_FORMAT "\n", hªdË ); 1168 s -> `push_msg_cb (s, 0, hªdË , s-> u£r_d©a ); 1170 `g_ä“ ( fÞd”_·th ); 1171 `dbus_mes§ge_uÄef ( mes§ge ); 1172 `dbus_mes§ge_uÄef ( »¶y ); 1174 `DBG ("-\n"); 1176 } } 1178  $mes§ges_push_mes§ge_d©a (* £ssiÚ , cÚ¡ * bmsg , * u£r_d©a ) 1180 DBusMes§ge * mes§ge ; 1182 `DBG ("+\n"); 1184 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( BT_MAP_SERVICE_NAME , 1185 BT_MAP_SERVICE_OBJECT_PATH , 1186 BT_MAP_SERVICE_INTERFACE , 1187 QUERY_PUSH_MESSAGE_DATA ); 1188 ià(! mes§ge ) { 1189 `”rÜ ("Can't‡llocate‚ew message"); 1193 `dbus_mes§ge_­³nd_¬gs ( mes§ge , DBUS_TYPE_STRING , & bmsg , 1194 DBUS_TYPE_INVALID ); 1196 ià( `dbus_cÚÃùiÚ_£nd ( g_cÚn , mes§ge , NULL è=ð FALSE ) { 1197 `”rÜ ("Could‚ot send dbus message"); 1198 `dbus_mes§ge_uÄef ( mes§ge ); 1202 `dbus_mes§ge_uÄef ( mes§ge ); 1203 `DBG ("-\n"); 1205 } } 1207  $mes§ges_g‘_mes§ge (* £ssiÚ , 1208 cÚ¡ * hªdË , 1209 ušt8_t ©chm’t , ušt8_ˆ ch¬£t , 1210 ušt8_t äaùiÚ_»que¡ , 1211 mes§ges_g‘_mes§ge_cb ÿÎback , 1212 * u£r_d©a ) 1214 DBusP’dšgC®l * ÿÎ ; 1215 DBusMes§ge * mes§ge ; 1216  £ssiÚ * s = session; 1217 * mes§ge_Çme ; 1218 gboÞ—n ©ch = FALSE ; 1219 gboÞ—n Œªscode = FALSE ; 1220 gboÞ—n fœ¡_»que¡ = TRUE ; 1222 `DBG ("+\n"); 1224 ià( NULL !ð hªdË ) { 1225 mes§ge_Çme = `g_¡rdup ( hªdË ); 1226 `DBG ("Mes§ghªdË = %s\n", hªdË ); 1230 s -> g‘_msg_cb = ÿÎback ; 1231 s -> u£r_d©a = user_data; 1233 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( BT_MAP_SERVICE_NAME , 1234 BT_MAP_SERVICE_OBJECT_PATH , 1235 BT_MAP_SERVICE_INTERFACE , 1236 QUERY_GET_MESSAGE ); 1237 ià(! mes§ge ) { 1238 `”rÜ ("Can't‡llocate‚ew message"); 1239 `g_ä“ ( mes§ge_Çme ); 1243 ià( ©chm’t & 0x1) 1244 ©ch = TRUE ; 1246 ià( ch¬£t & 0x1) 1247 Œªscode = TRUE ; 1249 ià( äaùiÚ_»que¡ & 0x1) 1250 fœ¡_»que¡ = FALSE ; 1252 `dbus_mes§ge_­³nd_¬gs ( mes§ge , DBUS_TYPE_STRING , & mes§ge_Çme , 1253 DBUS_TYPE_BOOLEAN , & ©ch , 1254 DBUS_TYPE_BOOLEAN , & Œªscode , 1255 DBUS_TYPE_BOOLEAN , & fœ¡_»que¡ , 1256 DBUS_TYPE_INVALID ); 1258 ià( `dbus_cÚÃùiÚ_£nd_w™h_»¶y ( g_cÚn , mes§ge , & ÿÎ , -1) == 1259 FALSE ) { 1260 `”rÜ ("Could‚ot send dbus message"); 1261 `dbus_mes§ge_uÄef ( mes§ge ); 1262 `g_ä“ ( mes§ge_Çme ); 1265 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , mes§ge_g‘_msg , s , NULL ); 1266 `dbus_mes§ge_uÄef ( mes§ge ); 1267 `g_ä“ ( mes§ge_Çme ); 1268 `DBG ("-\n"); 1270 } } 1272 #iâdeà SUPPORT_SMS_ONLY 1273  $mes§ge_upd©e_msg ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 1275 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 1276 DBusMes§geI‹r ™” ; 1277 DBusE¼Ü d”r ; 1278  £ssiÚ *£ssiÚ = u£r_d©a ; 1279  ”r ; 1280 `DBG ("+\n"); 1282 `dbus_”rÜ_š™ (& d”r ); 1283 ià( `dbus_£t_”rÜ_äom_mes§ge (& d”r , »¶y )) { 1284 `”rÜ ("R•l›d w™h‡À”rÜ: %s, %s", d”r . Çme , d”r. mes§ge ); 1285 `dbus_”rÜ_ä“ (& d”r ); 1287 `dbus_mes§ge_™”_š™ ( »¶y , & ™” ); 1288 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” ) == 1289 DBUS_TYPE_INT32 ) { 1290 `dbus_mes§ge_™”_g‘_basic (& ™” , & ”r ); 1291 `DBG ("E¼Ü : %d\n", ”r ); 1292 £ssiÚ -> `msg_upd©e_cb (£ssiÚ, ”r , 1293 £ssiÚ -> u£r_d©a ); 1296 `dbus_mes§ge_uÄef ( »¶y ); 1297 `DBG ("-\n"); 1298 } } 1301  $mes§ges_upd©e_šbox (* £ssiÚ , 1302 mes§ges_¡©us_cb ÿÎback , 1303 * u£r_d©a ) 1305 #ifdeà SUPPORT_SMS_ONLY 1310  - ENOSYS ; 1312 DBusP’dšgC®l * ÿÎ ; 1313 DBusMes§ge * mes§ge ; 1314  £ssiÚ * s = session; 1316 `DBG ("+\n"); 1318 s -> msg_upd©e_cb = ÿÎback ; 1319 s -> u£r_d©a = user_data; 1321 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( BT_MAP_SERVICE_NAME , 1322 BT_MAP_SERVICE_OBJECT_PATH , 1323 BT_MAP_SERVICE_INTERFACE , 1324 QUERY_UPDATE_MESSAGE ); 1325 ià(! mes§ge ) { 1326 `”rÜ ("Can't‡llocate‚ew message"); 1330 ià( `dbus_cÚÃùiÚ_£nd_w™h_»¶y ( g_cÚn , mes§ge , & ÿÎ , -1) == 1331 FALSE ) { 1332 `”rÜ ("Could‚ot send dbus message"); 1333 `dbus_mes§ge_uÄef ( mes§ge ); 1336 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , mes§ge_upd©e_msg , s , NULL ); 1337 `dbus_mes§ge_uÄef ( mes§ge ); 1338 `DBG ("-\n"); 1341 } } 1343  $mes§ge_¡©us_msg ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 1345 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 1346 DBusMes§geI‹r ™” ; 1347 DBusE¼Ü d”r ; 1348  £ssiÚ *£ssiÚ = u£r_d©a ; 1349  ”r ; 1351 `DBG ("+\n"); 1353 `dbus_”rÜ_š™ (& d”r ); 1354 ià( `dbus_£t_”rÜ_äom_mes§ge (& d”r , »¶y )) { 1355 `”rÜ ("R•l›d w™h‡À”rÜ: %s, %s", d”r . Çme , d”r. mes§ge ); 1356 `dbus_”rÜ_ä“ (& d”r ); 1358 `dbus_mes§ge_™”_š™ ( »¶y , & ™” ); 1359 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” ) == 1360 DBUS_TYPE_INT32 ) { 1361 `dbus_mes§ge_™”_g‘_basic (& ™” , & ”r ); 1362 `DBG ("E¼Ü : %d\n", ”r ); 1363 £ssiÚ -> `msg_¡©us_cb (£ssiÚ, ”r , 1364 £ssiÚ -> u£r_d©a ); 1367 `dbus_mes§ge_uÄef ( »¶y ); 1368 `DBG ("-\n"); 1369 } } 1371  $mes§ges_£t_»ad (* £ssiÚ , cÚ¡ * hªdË , ušt8_t v®ue , 1372 mes§ges_¡©us_cb ÿÎback , * u£r_d©a ) 1374 DBusP’dšgC®l * ÿÎ ; 1375 DBusMes§ge * mes§ge ; 1376  £ssiÚ * s = session; 1377 * mes§ge_Çme ; 1378 gboÞ—n »ad ; 1380 `DBG ("+\n"); 1382 ià( NULL =ð hªdË ) 1385 `DBG ("Mes§ghªdË = %s\n", hªdË ); 1386 mes§ge_Çme = `g_¡rdup ( hªdË ); 1388 s -> msg_¡©us_cb = ÿÎback ; 1389 s -> u£r_d©a = user_data; 1391 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( BT_MAP_SERVICE_NAME , 1392 BT_MAP_SERVICE_OBJECT_PATH , 1393 BT_MAP_SERVICE_INTERFACE , 1394 QUERY_SET_READ_STATUS ); 1395 ià(! mes§ge ) { 1396 `”rÜ ("Can't‡llocate‚ew message"); 1397 `g_ä“ ( mes§ge_Çme ); 1401 »ad = v®ue ? TRUE : FALSE ; 1403 `dbus_mes§ge_­³nd_¬gs ( mes§ge , DBUS_TYPE_STRING , & mes§ge_Çme , 1404 DBUS_TYPE_BOOLEAN , & »ad , 1405 DBUS_TYPE_INVALID ); 1407 ià( `dbus_cÚÃùiÚ_£nd_w™h_»¶y ( g_cÚn , mes§ge , & ÿÎ , -1) == 1408 FALSE ) { 1409 `”rÜ ("Could‚ot send dbus message"); 1410 `g_ä“ ( mes§ge_Çme ); 1411 `dbus_mes§ge_uÄef ( mes§ge ); 1415 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , mes§ge_¡©us_msg , s , NULL ); 1416 `dbus_mes§ge_uÄef ( mes§ge ); 1417 `g_ä“ ( mes§ge_Çme ); 1418 `DBG ("-\n"); 1420 } } 1422  $mes§ges_£t_d–‘e (* £ssiÚ , cÚ¡ * hªdË , 1423 ušt8_t v®ue , 1424 mes§ges_¡©us_cb ÿÎback , 1425 * u£r_d©a ) 1427 DBusP’dšgC®l * ÿÎ ; 1428 DBusMes§ge * mes§ge ; 1429  £ssiÚ * s = session; 1430 * mes§ge_Çme ; 1431 gboÞ—n d– ; 1433 `DBG ("+\n"); 1435 ià( NULL =ð hªdË ) 1438 `DBG ("Mes§ghªdË = %s\n", hªdË ); 1439 mes§ge_Çme = `g_¡rdup ( hªdË ); 1441 s -> msg_¡©us_cb = ÿÎback ; 1442 s -> u£r_d©a = user_data; 1444 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( BT_MAP_SERVICE_NAME , 1445 BT_MAP_SERVICE_OBJECT_PATH , 1446 BT_MAP_SERVICE_INTERFACE , 1447 QUERY_SET_DELETE_STATUS ); 1448 ià(! mes§ge ) { 1449 `”rÜ ("Can't‡llocate‚ew message"); 1450 `g_ä“ ( mes§ge_Çme ); 1454 d– = v®ue ? TRUE : FALSE ; 1456 `dbus_mes§ge_­³nd_¬gs ( mes§ge , DBUS_TYPE_STRING , & mes§ge_Çme , 1457 DBUS_TYPE_BOOLEAN , & d– , 1458 DBUS_TYPE_INVALID ); 1460 ià( `dbus_cÚÃùiÚ_£nd_w™h_»¶y ( g_cÚn , mes§ge , & ÿÎ , -1) == 1461 FALSE ) { 1462 `”rÜ ("Could‚ot send dbus message"); 1463 `g_ä“ ( mes§ge_Çme ); 1464 `dbus_mes§ge_uÄef ( mes§ge ); 1468 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , mes§ge_¡©us_msg , s , NULL ); 1469 `dbus_mes§ge_uÄef ( mes§ge ); 1470 `g_ä“ ( mes§ge_Çme ); 1471 `DBG ("-\n"); 1473 } } 1475  $mes§ges_abÜt (* £ssiÚ ) 1477 } } @obexd/plugins/messages-tracker.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<”ºo.h > 29  ~ 30  ~<¡ršg.h > 32  ~"mes§ges.h " 34  smes§ge_fÞd” { 35 * mÇme ; 36 GSLi¡ * msubfÞd”s ; 37 * mqu”y ; 40  s£ssiÚ { 41 * mcwd ; 42  mes§ge_fÞd” * mfÞd” ; 43 * mÇme ; 44 ušt16_t mmax ; 45 ušt16_t moff£t ; 46 * mu£r_d©a ; 47 (* mfÞd”_li¡_cb )(* m£ssiÚ ,  m”r , ušt16_t msize , 48 cÚ¡ * mÇme , * mu£r_d©a ); 51  mes§ge_fÞd” * gfÞd”_Œ“ = NULL ; 53  mes§ge_fÞd” * $g‘_fÞd” (cÚ¡ * fÞd” ) 55 GSLi¡ * fÞd”s = fÞd”_Œ“ -> subfÞd”s ; 56  mes§ge_fÞd” * Ï¡ = NULL ; 57 ** ·th ; 58  i ; 60 ià( `g_¡rcmp0 ( fÞd” , "/") == 0) 61  fÞd”_Œ“ ; 63 ·th = `g_¡r¥l™ ( fÞd” , "/", 0); 65  i = 1; ·th [i] !ð NULL ; i++) { 66 gboÞ—n m©ch_found = FALSE ; 67 GSLi¡ * l ; 69  l = fÞd”s ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 70  mes§ge_fÞd” * fÞd” = l -> d©a ; 72 ià( `g_¡rcmp0 ( fÞd” -> Çme , ·th [ i ]) == 0) { 73 m©ch_found = TRUE ; 74 Ï¡ = l -> d©a ; 75 fÞd”s = fÞd” -> subfÞd”s ; 80 ià(! m©ch_found ) { 81 `g_¡rä“v ( ·th ); 82  NULL ; 86 `g_¡rä“v ( ·th ); 88  Ï¡ ; 89 } } 91  mes§ge_fÞd” * $ü—‹_fÞd” (cÚ¡ * Çme , cÚ¡ * qu”y ) 93  mes§ge_fÞd” * fÞd” = `g_Ãw0 (message_folder, 1); 95 fÞd” -> Çme = `g_¡rdup (name); 96 fÞd” -> qu”y = `g_¡rdup (query); 98  fÞd” ; 99 } } 101  $de¡roy_fÞd”_Œ“ (* roÙ ) 103  mes§ge_fÞd” * fÞd” = roÙ ; 104 GSLi¡ * tmp , * Ãxt ; 106 ià( fÞd” =ð NULL ) 109 `g_ä“ ( fÞd” -> Çme ); 110 `g_ä“ ( fÞd” -> qu”y ); 112 tmp = fÞd” -> subfÞd”s ; 113  tmp !ð NULL ) { 114 Ãxt = `g_¦i¡_Ãxt ( tmp ); 115 `de¡roy_fÞd”_Œ“ ( tmp -> d©a ); 116 tmp = Ãxt ; 119 `g_¦i¡_ä“ ( fÞd” -> subfÞd”s ); 120 `g_ä“ ( fÞd” ); 121 } } 123  $ü—‹_fÞd”_Œ“ () 125  mes§ge_fÞd” * ·»Á , * chžd ; 127 fÞd”_Œ“ = `ü—‹_fÞd” ("/", "FILTER (!BOUND(?msg))"); 129 ·»Á = `ü—‹_fÞd” ("telecom", "FILTER (!BOUND(?msg))"); 130 fÞd”_Œ“ -> subfÞd”s = `g_¦i¡_­³nd (folder_tree->subfolders, 131 ·»Á ); 133 chžd = `ü—‹_fÞd” ("msg", "FILTER (!BOUND(?msg))"); 134 ·»Á -> subfÞd”s = `g_¦i¡_­³nd Õ¬’t->subfÞd”s, chžd ); 136 ·»Á = chžd ; 138 chžd = `ü—‹_fÞd” ("inbox", "?msg‚mo:isSent \"false\" ; " 141 ·»Á -> subfÞd”s = `g_¦i¡_­³nd Õ¬’t->subfÞd”s, chžd ); 143 chžd = `ü—‹_fÞd” ("sent", "?msg‚mo:isDeleted \"false\" ; " 145 ·»Á -> subfÞd”s = `g_¦i¡_­³nd Õ¬’t->subfÞd”s, chžd ); 147 chžd = `ü—‹_fÞd” ("deleted", "?msg‚mo:isDeleted \"true\" . "); 148 ·»Á -> subfÞd”s = `g_¦i¡_­³nd Õ¬’t->subfÞd”s, chžd ); 149 } } 151  $mes§ges_š™ () 153 `ü—‹_fÞd”_Œ“ (); 156 } } 158  $mes§ges_ex™ () 160 `de¡roy_fÞd”_Œ“ ( fÞd”_Œ“ ); 161 } } 163  $mes§ges_cÚÃù (** s ) 165  £ssiÚ *£ssiÚ = `g_Ãw0 (session, 1); 167 £ssiÚ -> cwd = `g_¡rdup ("/"); 168 £ssiÚ -> fÞd” = fÞd”_Œ“ ; 170 * s = £ssiÚ ; 173 } } 175  $mes§ges_discÚÃù (* s ) 177  £ssiÚ *£ssiÚ = s ; 179 `g_ä“ ( £ssiÚ -> cwd ); 180 `g_ä“ ( £ssiÚ ); 181 } } 183  mes§ges_£t_nÙifiÿtiÚ_»gi¡¿tiÚ (* £ssiÚ , 184 (* £nd_ev’t )(* £ssiÚ , 185 cÚ¡  mes§ges_ev’t * ev’t , * u£r_d©a ), 186 * u£r_d©a ) 188  - ENOSYS ; 189 } } 191  $mes§ges_£t_fÞd” (* s , cÚ¡ * Çme , gboÞ—n cdup ) 193  £ssiÚ *£ssiÚ = s ; 194 * Ãw»l = NULL ; 195 * Ãwabs ; 196 * tmp ; 198 ià( Çme && ( `¡rchr Òame, '/'è|| `¡rcmp (name, "..") == 0)) 199  - EBADR ; 201 ià( cdup ) { 202 ià( £ssiÚ -> cwd [0] == 0) 203  - ENOENT ; 205 Ãw»l = `g_·th_g‘_dœÇme ( £ssiÚ -> cwd ); 208 ià( Ãw»l [0] == '.' &&‚ewrel[1] == 0) 209 Ãw»l [0] = 0; 212 tmp = Ãw»l ; 213 ià(! cdup && (! Çme ||‚ame[0] == 0)) 214 Ãw»l = `g_¡rdup (""); 216 Ãw»l = `g_bužd_fž’ame Òew»È?‚ew»È: £ssiÚ -> cwd , Çme , 217 NULL ); 218 `g_ä“ ( tmp ); 220 ià( Ãw»l [0] != '/') 221 Ãwabs = `g_bužd_fž’ame ("/", Ãw»l , NULL ); 223 Ãwabs = `g_¡rdup ( Ãw»l ); 225 £ssiÚ -> fÞd” = `g‘_fÞd” ( Ãwabs ); 226 ià( £ssiÚ -> fÞd” =ð NULL ) { 227 `g_ä“ ( Ãw»l ); 228 `g_ä“ ( Ãwabs ); 230  - ENOENT ; 233 `g_ä“ ( Ãw»l ); 234 `g_ä“ ( £ssiÚ -> cwd ); 235 £ssiÚ -> cwd = Ãwabs ; 238 } } 240  gboÞ—n $async_g‘_fÞd”_li¡šg (* s ) 242  £ssiÚ *£ssiÚ = s ; 243 gboÞ—n couÁ = FALSE ; 244  fÞd”_couÁ = 0; 245 * ·th = NULL ; 246  mes§ge_fÞd” * fÞd” ; 247 GSLi¡ * dœ ; 249 ià( £ssiÚ -> Çme && `¡rchr (£ssiÚ->Çme, '/'è!ð NULL ) 250  dÚe ; 252 ·th = `g_bužd_fž’ame ( £ssiÚ -> cwd , sessiÚ-> Çme , NULL ); 254 ià( ·th =ð NULL || `¡¾’ (path) == 0) 255  dÚe ; 257 fÞd” = `g‘_fÞd” ( ·th ); 259 ià( fÞd” =ð NULL ) 260  dÚe ; 262 ià( £ssiÚ -> max == 0) { 263 £ssiÚ -> max = 0xffff; 264 £ssiÚ -> off£t = 0; 265 couÁ = TRUE ; 268  dœ = fÞd” -> subfÞd”s ; dir && 269 ( fÞd”_couÁ - £ssiÚ -> off£t è< sessiÚ-> max ; 270 fÞd”_couÁ ++, dœ = `g_¦i¡_Ãxt (dir)) { 271  mes§ge_fÞd” * dœ_d©a = dœ -> d©a ; 273 ià( couÁ =ð FALSE && £ssiÚ -> off£t <ð fÞd”_couÁ ) 274 £ssiÚ -> `fÞd”_li¡_cb (£ssiÚ, - EAGAIN , 0, 275 dœ_d©a -> Çme , £ssiÚ -> u£r_d©a ); 278 dÚe : 279 £ssiÚ -> `fÞd”_li¡_cb (£ssiÚ, 0, fÞd”_couÁ , NULL , 280 £ssiÚ -> u£r_d©a ); 282 `g_ä“ ( ·th ); 283 `g_ä“ ( £ssiÚ -> Çme ); 285  FALSE ; 286 } } 288  $mes§ges_g‘_fÞd”_li¡šg (* s , cÚ¡ * Çme , 289 ušt16_t max , ušt16_ˆ off£t , 290 mes§ges_fÞd”_li¡šg_cb ÿÎback , 291 * u£r_d©a ) 293  £ssiÚ *£ssiÚ = s ; 294 £ssiÚ -> Çme = `g_¡rdup (name); 295 £ssiÚ -> max = max; 296 £ssiÚ -> off£t = offset; 297 £ssiÚ -> fÞd”_li¡_cb = ÿÎback ; 298 £ssiÚ -> u£r_d©a = user_data; 300 `g_idË_add_fuÎ ( G_PRIORITY_DEFAULT_IDLE , async_g‘_fÞd”_li¡šg , 301 £ssiÚ , NULL ); 304 } } 306  $mes§ges_g‘_mes§ges_li¡šg (* £ssiÚ , cÚ¡ * Çme , 307 ušt16_t max , ušt16_ˆ off£t , 308 ušt8_t subjeù_Ën , 309 cÚ¡  mes§ges_fž‹r * fž‹r , 310 mes§ges_g‘_mes§ges_li¡šg_cb ÿÎback , 311 * u£r_d©a ) 313  - ENOSYS ; 314 } } 316  $mes§ges_g‘_mes§ge (* £ssiÚ , cÚ¡ * hªdË , 317  æags , 318 mes§ges_g‘_mes§ge_cb ÿÎback , 319 * u£r_d©a ) 321  - ENOSYS ; 322 } } 324  $mes§ges_upd©e_šbox (* £ssiÚ , mes§ges_¡©us_cb ÿÎback , 325 * u£r_d©a ) 327  - ENOSYS ; 328 } } 330  $mes§ges_£t_»ad (* £ssiÚ , cÚ¡ * hªdË , ušt8_t v®ue , 331 mes§ges_¡©us_cb ÿÎback , * u£r_d©a ) 333  - ENOSYS ; 334 } } 336  $mes§ges_£t_d–‘e (* £ssiÚ , cÚ¡ * hªdË , ušt8_t v®ue , 337 mes§ges_¡©us_cb ÿÎback , 338 * u£r_d©a ) 340  - ENOSYS ; 341 } } 343  $mes§ges_abÜt (* £ssiÚ ) 345 } } @obexd/plugins/messages.h 24  ~ 25  ~<¡dšt.h > 30  #PMASK_SUBJECT 0x0001 ) 31  #PMASK_DATETIME 0x0002 ) 32  #PMASK_SENDER_NAME 0x0004 ) 33  #PMASK_SENDER_ADDRESSING 0x0008 ) 34  #PMASK_RECIPIENT_NAME 0x0010 ) 35  #PMASK_RECIPIENT_ADDRESSING 0x0020 ) 36  #PMASK_TYPE 0x0040 ) 37  #PMASK_SIZE 0x0080 ) 38  #PMASK_RECEPTION_STATUS 0x0100 ) 39  #PMASK_TEXT 0x0200 ) 40  #PMASK_ATTACHMENT_SIZE 0x0400 ) 41  #PMASK_PRIORITY 0x0800 ) 42  #PMASK_READ 0x1000 ) 43  #PMASK_SENT 0x2000 ) 44  #PMASK_PROTECTED 0x4000 ) 45  #PMASK_REPLYTO_ADDRESSING 0x8000 ) 62  smes§ges_mes§ge { 63 ušt32_t mmask ; 64 * mhªdË ; 65 * msubjeù ; 66 * md©‘ime ; 67 * m£nd”_Çme ; 68 * m£nd”_add»ssšg ; 69 * m»¶yto_add»ssšg ; 70 * m»c›Á_Çme ; 71 * m»c›Á_add»ssšg ; 72 * mty³ ; 73 * m»û±iÚ_¡©us ; 74 * msize ; 75 * m©chm’t_size ; 76 gboÞ—n m‹xt ; 77 gboÞ—n m»ad ; 78 gboÞ—n m£Á ; 79 gboÞ—n m´Ùeù ; 80 gboÞ—n m´iÜ™y ; 84 emes§ges_ev’t_ty³ { 85 mMET_NEW_MESSAGE , 86 mMET_DELIVERY_SUCCESS , 87 mMET_SENDING_SUCCESS , 88 mMET_DELIVERY_FAILURE , 89 mMET_SENDING_FAILURE , 90 mMET_MEMORY_FULL , 91 mMET_MEMORY_AVAILABLE , 92 mMET_MESSAGE_DELETED , 93 mMET_MESSAGE_SHIFT 99  smes§ges_ev’t { 100 mes§ges_ev’t_ty³ mty³ ; 101 ušt8_t mš¡ªû_id ; 102 * mhªdË ; 103 * mfÞd” ; 104 * mÞd_fÞd” ; 105 * mmsg_ty³ ; 111  smes§ges_fž‹r { 112 ušt32_t m·¿m‘”_mask ; 113 ušt8_t mty³ ; 114 cÚ¡ * m³riod_begš ; 115 cÚ¡ * m³riod_’d ; 116 ušt8_t m»ad_¡©us ; 117 cÚ¡ * m»c›Á ; 118 cÚ¡ * mÜigš©Ü ; 119 ušt8_t m´iÜ™y ; 127  mes§ges_š™ (); 131  mes§ges_ex™ (); 141  mes§ges_cÚÃù (** £ssiÚ ); 147  mes§ges_discÚÃù (* £ssiÚ ); 172 #ifdeà __TIZEN_PATCH__ 182  mes§ges_£t_nÙifiÿtiÚ_»gi¡¿tiÚ (* £ssiÚ , 183 * add»ss , ušt8_t ¡©us , 184 * u£r_d©a ); 195  mes§ges_£t_nÙifiÿtiÚ_»gi¡¿tiÚ (* £ssiÚ , 196 (* £nd_ev’t )(* £ssiÚ , 197 cÚ¡  mes§ges_ev’t * ev’t , * u£r_d©a ), 198 * u£r_d©a ); 208  `mes§ges_£t_fÞd” (* £ssiÚ , cÚ¡ * Çme , gboÞ—n cdup ); 221 (* tmes§ges_fÞd”_li¡šg_cb )(* t£ssiÚ ,  t”r , 222 tušt16_t tsize , cÚ¡ * tÇme , * tu£r_d©a ); 224  `mes§ges_g‘_fÞd”_li¡šg (* £ssiÚ , cÚ¡ * Çme , ušt16_t max , 225 ušt16_t off£t , 226 mes§ges_fÞd”_li¡šg_cb ÿÎback , 227 * u£r_d©a ); 243 (* tmes§ges_g‘_mes§ges_li¡šg_cb )(* t£ssiÚ ,  t”r , 244 tušt16_t tsize , tgboÞ—n tÃwmsg , 245 cÚ¡  tmes§ges_mes§ge * tmes§ge , 246 * tu£r_d©a ); 248  `mes§ges_g‘_mes§ges_li¡šg (* £ssiÚ , cÚ¡ * Çme , 249 ušt16_t max , ušt16_ˆ off£t , 250 ušt8_t subjeù_Ën , 251 cÚ¡  mes§ges_fž‹r * fž‹r , 252 mes§ges_g‘_mes§ges_li¡šg_cb ÿÎback , 253 * u£r_d©a ); 255 #ifdeà __TIZEN_PATCH__ 271 (* tmes§ges_g‘_mes§ge_cb )(* t£ssiÚ ,  t”r , tgboÞ—n tfmÜe , 272 cÚ¡ * tchunk , * tu£r_d©a ); 274  `mes§ges_g‘_mes§ge (* £ssiÚ , cÚ¡ * hªdË , 275 ušt8_t ©chm’t , ušt8_ˆ ch¬£t , 276 ušt8_t äaùiÚ_»que¡ , 277 mes§ges_g‘_mes§ge_cb ÿÎback , 278 * u£r_d©a ); 280 (* tmes§ges_push_mes§ge_cb )(* t£ssiÚ ,  t”r , tgušt64 thªdË , 281 * tu£r_d©a ); 282  `mes§ges_push_mes§ge (* £ssiÚ , cÚ¡ * fÞd” , 283 ušt8_t Œª¥¬’t , ušt8_ˆ »Œy , 284 ušt8_t ch¬£t , 285 mes§ges_push_mes§ge_cb ÿÎback , 286 * u£r_d©a ); 287  `mes§ges_push_mes§ge_d©a (* £ssiÚ , cÚ¡ * bmsg , 288 * u£r_d©a ); 290  #MESSAGES_ATTACHMENT (1 << 0) ) 291  #MESSAGES_UTF8 (1 << 1) ) 292  #MESSAGES_FRACTION (1 << 2) ) 293  #MESSAGES_NEXT (1 << 3) ) 314 (* tmes§ges_g‘_mes§ge_cb )(* t£ssiÚ ,  t”r , tgboÞ—n tfmÜe , 315 cÚ¡ * tchunk , * tu£r_d©a ); 317  `mes§ges_g‘_mes§ge (* £ssiÚ , cÚ¡ * hªdË , 318  æags , 319 mes§ges_g‘_mes§ge_cb ÿÎback , 320 * u£r_d©a ); 323 (* tmes§ges_¡©us_cb )(* t£ssiÚ ,  t”r , * tu£r_d©a ); 331  `mes§ges_upd©e_šbox (* £ssiÚ , mes§ges_¡©us_cb ÿÎback , 332 * u£r_d©a ); 342  `mes§ges_£t_»ad (* £ssiÚ , cÚ¡ * hªdË , ušt8_t v®ue , 343 mes§ges_¡©us_cb ÿÎback , * u£r_d©a ); 354  `mes§ges_£t_d–‘e (* £ssiÚ , cÚ¡ * hªdË , ušt8_t v®ue , 355 mes§ges_¡©us_cb ÿÎback , * u£r_d©a ); 357 #ifdeà __TIZEN_PATCH__ 367 (* tmes§ges_nÙifiÿtiÚ_»gi¡¿tiÚ_cb )(* t£ssiÚ ,  t”r , 368 * tu£r_d©a ); 370  `mes§ges_nÙifiÿtiÚ_»gi¡¿tiÚ (* £ssiÚ , 371 * add»ss ,  ¡©us , 372 mes§ges_nÙifiÿtiÚ_»gi¡¿tiÚ_cb ÿÎback , 373 * u£r_d©a ); 380  `mes§ges_abÜt (* £ssiÚ ); @obexd/plugins/opp.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<”ºo.h > 30  ~<¡ršg.h > 31  ~ 32  ~<š‰y³s.h > 34  ~ 36  ~"obexd.h " 37  ~"¶ugš.h " 38  ~"obex.h " 39  ~"£rviû.h " 40  ~"log.h " 41  ~"mªag”.h " 42  ~"fžesy¡em.h " 44  #VCARD_TYPE "‹xt/x-vÿrd" ) 45  #VCARD_FILE CONFIGDIR "/vÿrd.vcf" ) 47 * $Ýp_cÚÃù ( obex_£ssiÚ * os , * ”r ) 49 `mªag”_»gi¡”_£ssiÚ ( os ); 51 ià( ”r ) 52 * ”r = 0; 54  `mªag”_»gi¡”_Œªsãr ( os ); 55 } } 57  $Ýp_´og»ss ( obex_£ssiÚ * os , * u£r_d©a ) 59 `mªag”_em™_Œªsãr_´og»ss ( u£r_d©a ); 60 } } 62  $Ýp_chkput ( obex_£ssiÚ * os , * u£r_d©a ) 64 * fÞd” , * Çme , * ·th ; 65 št32_t time ; 66 cÚ¡ * t ; 67  ”r ; 69 ià( `obex_g‘_size ( os è=ð OBJECT_SIZE_DELETE ) 70  - ENOSYS ; 72 t = `obex_g‘_Çme ( os ); 73 ià( t !ð NULL && ! `is_fž’ame (t)) 74  - EBADR ; 76 ià( `obex_ÝtiÚ_auto_acû± ()) { 77 fÞd” = `g_¡rdup ( `obex_ÝtiÚ_roÙ_fÞd” ()); 78 Çme = `g_¡rdup ( `obex_g‘_Çme ( os )); 79  sk_auth ; 82 time = 0; 83 ”r = `mªag”_»que¡_authÜiz©iÚ ( u£r_d©a , time , & fÞd” , & Çme ); 84 ià( ”r < 0) 85  - EPERM ; 87 ià( fÞd” =ð NULL ) 88 fÞd” = `g_¡rdup ( `obex_ÝtiÚ_roÙ_fÞd” ()); 90 ià( Çme =ð NULL ) 91 Çme = `g_¡rdup ( `obex_g‘_Çme ( os )); 93 sk_auth : 94 ià( Çme =ð NULL || `¡¾’ (name) == 0) { 95 ”r = - EBADR ; 96  çžed ; 99 ià( `g_¡rcmp0 ( Çme , `obex_g‘_Çme ( os )) != 0) 100 `obex_£t_Çme ( os , Çme ); 102 ·th = `g_bužd_fž’ame ( fÞd” , Çme , NULL ); 104 ”r = `obex_put_¡»am_¡¬t ( os , ·th ); 106 `g_ä“ ( ·th ); 108 ià( ”r < 0) 109  çžed ; 111 `mªag”_em™_Œªsãr_¡¬‹d ( u£r_d©a ); 113 çžed : 114 `g_ä“ ( fÞd” ); 115 `g_ä“ ( Çme ); 117  ”r ; 118 } } 120  $Ýp_put ( obex_£ssiÚ * os , * u£r_d©a ) 122 cÚ¡ * Çme = `obex_g‘_Çme ( os ); 123 cÚ¡ * fÞd” = `obex_ÝtiÚ_roÙ_fÞd” (); 125 ià( fÞd” =ð NULL ) 126  - EPERM ; 128 ià( Çme =ð NULL ) 129  - EBADR ; 132 } } 134  $Ýp_g‘ ( obex_£ssiÚ * os , * u£r_d©a ) 136 cÚ¡ * ty³ ; 138 ià( `obex_g‘_Çme ( os )) 139  - EPERM ; 141 ty³ = `obex_g‘_ty³ ( os ); 143 ià( ty³ =ð NULL ) 144  - EPERM ; 146 ià( `g_ascii_¡rÿ£cmp ( ty³ , VCARD_TYPE ) == 0) { 147 ià( `obex_g‘_¡»am_¡¬t ( os , VCARD_FILE ) < 0) 148  - ENOENT ; 151  - EPERM ; 154 } } 156  $Ýp_discÚÃù ( obex_£ssiÚ * os , * u£r_d©a ) 158 `mªag”_uÄegi¡”_Œªsãr ( u£r_d©a ); 159 `mªag”_uÄegi¡”_£ssiÚ ( os ); 160 } } 162  $Ýp_»£t ( obex_£ssiÚ * os , * u£r_d©a ) 164 `mªag”_em™_Œªsãr_com¶‘ed ( u£r_d©a ); 165 } } 167  obex_£rviû_driv” gdriv” = { 168 . Çme = "Object Push server", 169 . g£rviû = OBEX_OPP , 170 . gcÚÃù = Ýp_cÚÃù , 171 . g´og»ss = Ýp_´og»ss , 172 . gdiscÚÃù = Ýp_discÚÃù , 173 . gg‘ = Ýp_g‘ , 174 . gput = Ýp_put , 175 . gchkput = Ýp_chkput , 176 . g»£t = Ýp_»£t 179  $Ýp_š™ () 181  `obex_£rviû_driv”_»gi¡” (& driv” ); 182 } } 184  $Ýp_ex™ () 186 `obex_£rviû_driv”_uÄegi¡” (& driv” ); 187 } } 189 OBEX_PLUGIN_DEFINE ( Ýp , Ýp_š™ , Ýp_ex™ ) @obexd/plugins/pbap.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<¡ršg.h > 31  ~<”ºo.h > 32  ~ 33  ~<¡dlib.h > 34  ~ 35  ~<¬·/š‘.h > 36  ~ 37  ~ 38  ~ 39  ~<š‰y³s.h > 41  ~ 42  ~ 44  ~"obexd.h " 45  ~"¶ugš.h " 46  ~"log.h " 47  ~"obex.h " 48  ~"£rviû.h " 49  ~"phÚebook.h " 50  ~"mim‘y³.h " 51  ~"fžesy¡em.h " 52  ~"mªag”.h " 54  #PHONEBOOK_TYPE "x-bt/phÚebook" ) 55  #VCARDLISTING_TYPE "x-bt/vÿrd-li¡šg" ) 56  #VCARDENTRY_TYPE "x-bt/vÿrd" ) 58  #ORDER_TAG 0x01 ) 59  #SEARCHVALUE_TAG 0x02 ) 60  #SEARCHATTRIB_TAG 0x03 ) 61  #MAXLISTCOUNT_TAG 0x04 ) 62  #LISTSTARTOFFSET_TAG 0x05 ) 63  #FILTER_TAG 0x06 ) 64  #FORMAT_TAG 0X07 ) 65  #PHONEBOOKSIZE_TAG 0X08 ) 66  #NEWMISSEDCALLS_TAG 0X09 ) 68 #ifdeà __TIZEN_PATCH__ 69  #PBAP_MAXLISTCOUNT_MAX_VALUE 65535 ) 72  sÿche { 73 gboÞ—n mv®id ; 74 ušt32_t mšdex ; 75 GSLi¡ * m’Œ›s ; 78  sÿche_’Œy { 79 ušt32_t mhªdË ; 80 * mid ; 81 * mÇme ; 82 * msound ; 83 * m‹l ; 86  spb­_£ssiÚ { 87  ­·¿m_f›ld * m·¿ms ; 88 * mfÞd” ; 89 ušt32_t mfšd_hªdË ; 90  ÿche mÿche ; 91  pb­_objeù * mobj ; 92 #ifdeà __TIZEN_PATCH__ 93 * mback’d_d©a ; 97  spb­_objeù { 98 GSŒšg * mbufãr ; 99 GObexAµ¬am * m­·¿m ; 100 gboÞ—n mfœ¡·ck‘ ; 101 gboÞ—n mÏ¡·¹ ; 102  pb­_£ssiÚ * m£ssiÚ ; 103 * m»que¡ ; 106 cÚ¡ ušt8_t gPBAP_TARGET [ TARGET_SIZE ] = { 110 (* tÿche_’Œy_fšd_f è(cÚ¡  tÿche_’Œy * t’Œy , 111 cÚ¡ * tv®ue ); 113  $ÿche_’Œy_ä“ (* d©a ) 115  ÿche_’Œy * ’Œy = d©a ; 117 `g_ä“ ( ’Œy -> id ); 118 `g_ä“ ( ’Œy -> Çme ); 119 `g_ä“ ( ’Œy -> sound ); 120 `g_ä“ ( ’Œy -> ‹l ); 121 `g_ä“ ( ’Œy ); 122 } } 124  gboÞ—n $’Œy_Çme_fšd (cÚ¡  ÿche_’Œy * ’Œy , 125 cÚ¡ * v®ue ) 127 * Çme ; 128 gboÞ—n »t ; 130 ià(! ’Œy -> Çme ) 131  FALSE ; 133 ià( `¡¾’ ( v®ue ) == 0) 134  TRUE ; 136 Çme = `g_utf8_¡rdown ( ’Œy ->name, -1); 137 »t = ( `g_¡r¡r_Ën ( Çme , -1, v®ue è? TRUE : FALSE ); 138 `g_ä“ ( Çme ); 140  »t ; 141 } } 143  gboÞ—n $’Œy_sound_fšd (cÚ¡  ÿche_’Œy * ’Œy , 144 cÚ¡ * v®ue ) 146 ià(! ’Œy -> sound ) 147  FALSE ; 149  ( `g_¡r¡r_Ën ( ’Œy -> sound , -1, v®ue è? TRUE : FALSE ); 150 } } 152  gboÞ—n $’Œy_‹l_fšd (cÚ¡  ÿche_’Œy * ’Œy , 153 cÚ¡ * v®ue ) 155 ià(! ’Œy -> ‹l ) 156  FALSE ; 158  ( `g_¡r¡r_Ën ( ’Œy -> ‹l , -1, v®ue è? TRUE : FALSE ); 159 } } 161 cÚ¡ * $ÿche_fšd ( ÿche *ÿche, ušt32_t hªdË ) 163 GSLi¡ * l ; 165  l = ÿche -> ’Œ›s ;†;† =†-> Ãxt ) { 166  ÿche_’Œy * ’Œy = l -> d©a ; 168 ià( ’Œy -> hªdË == handle) 169  ’Œy -> id ; 172  NULL ; 173 } } 175  $ÿche_þ—r ( ÿche *cache) 177 `g_¦i¡_ä“_fuÎ ( ÿche -> ’Œ›s , ÿche_’Œy_ä“ ); 178 ÿche -> ’Œ›s = NULL ; 179 } } 181  $phÚebook_size_»suÉ (cÚ¡ * bufãr , size_t bufsize , 182  vÿrds ,  mis£d , 183 gboÞ—n Ï¡·¹ , * u£r_d©a ) 185  pb­_£ssiÚ * pb­ = u£r_d©a ; 186 ušt16_t phÚebooksize ; 188 ià( pb­ -> obj -> »que¡ ) { 189 `phÚebook_»q_fš®ize ( pb­ -> obj -> »que¡ ); 190 pb­ -> obj -> »que¡ = NULL ; 193 ià( vÿrds < 0) 194 vÿrds = 0; 196 `DBG ("vÿrd %d", vÿrds ); 198 phÚebooksize = vÿrds ; 200 pb­ -> obj -> ­·¿m = `g_obex_­·¿m_£t_ušt16 ( NULL , PHONEBOOKSIZE_TAG , 201 phÚebooksize ); 202 #iâdeà __TIZEN_PATCH__ 203 ià( mis£d > 0) { 205 ià( pb­ -> ·¿ms -> »quœed_mis£dÿÎ_ÿÎ_h—d” =ð TRUE ) { 207 `DBG ("mis£d %d", mis£d ); 209 pb­ -> obj -> ­·¿m = `g_obex_­·¿m_£t_ušt16 ( 210 pb­ -> obj -> ­·¿m , 211 NEWMISSEDCALLS_TAG , 212 mis£d ); 215 `obex_objeù_£t_io_æags ( pb­ -> obj , G_IO_IN , 0); 216 } } 218  $qu”y_»suÉ (cÚ¡ * bufãr , size_t bufsize ,  vÿrds , 219  mis£d , gboÞ—n Ï¡·¹ , * u£r_d©a ) 221  pb­_£ssiÚ * pb­ = u£r_d©a ; 223 `DBG (""); 225 ià( pb­ -> obj -> »que¡ && Ï¡·¹ ) { 226 `phÚebook_»q_fš®ize ( pb­ -> obj -> »que¡ ); 227 pb­ -> obj -> »que¡ = NULL ; 230 pb­ -> obj -> Ï¡·¹ =†astpart; 232 ià( vÿrds < 0) { 233 `obex_objeù_£t_io_æags ( pb­ -> obj , G_IO_ERR , - ENOENT ); 237 ià(! pb­ -> obj -> bufãr ) 238 pb­ -> obj -> bufãr = `g_¡ršg_Ãw_Ën (bufãr, bufsize ); 240 pb­ -> obj -> bufãr = `g_¡ršg_­³nd_Ën (pbap->obj->buffer, 241 bufãr , bufsize ); 242 #iâdeà __TIZEN_PATCH__ 243 ià( mis£d > 0) { 245 ià( pb­ -> ·¿ms -> »quœed_mis£dÿÎ_ÿÎ_h—d” =ð TRUE ) { 247 `DBG ("mis£d %d", mis£d ); 249 pb­ -> obj -> fœ¡·ck‘ = TRUE ; 251 pb­ -> obj -> ­·¿m = `g_obex_­·¿m_£t_ušt16 ( 252 pb­ -> obj -> ­·¿m , 253 NEWMISSEDCALLS_TAG , 254 mis£d ); 257 `obex_objeù_£t_io_æags ( pb­ -> obj , G_IO_IN , 0); 258 } } 260  $ÿche_’Œy_nÙify (cÚ¡ * id , ušt32_t hªdË , 261 cÚ¡ * Çme , cÚ¡ * sound , 262 cÚ¡ * ‹l , * u£r_d©a ) 264  pb­_£ssiÚ * pb­ = u£r_d©a ; 265  ÿche_’Œy * ’Œy = `g_Ãw0 (cache_entry, 1); 266  ÿche *ÿchð& pb­ ->cache; 268 ià( hªdË !ð PHONEBOOK_INVALID_HANDLE ) 269 ’Œy -> hªdË = handle; 271 ’Œy -> hªdË = ++ pb­ -> ÿche . šdex ; 273 ’Œy -> id = `g_¡rdup (id); 274 ’Œy -> Çme = `g_¡rdup (name); 275 ’Œy -> sound = `g_¡rdup (sound); 276 ’Œy -> ‹l = `g_¡rdup (tel); 278 ÿche -> ’Œ›s = `g_¦i¡_­³nd (ÿche->’Œ›s, ’Œy ); 279 } } 281  $®pha_sÜt ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 283 cÚ¡  ÿche_’Œy * e1 = a ; 284 cÚ¡  ÿche_’Œy * e2 = b ; 286  `g_¡rcmp0 ( e1 -> Çme , e2 ->name); 287 } } 289  $šdexed_sÜt ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 291 cÚ¡  ÿche_’Œy * e1 = a ; 292 cÚ¡  ÿche_’Œy * e2 = b ; 294  ( e1 -> hªdË - e2 ->handle); 295 } } 297  $phÚ‘iÿl_sÜt ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 299 cÚ¡  ÿche_’Œy * e1 = a ; 300 cÚ¡  ÿche_’Œy * e2 = b ; 303 ià(! e1 -> sound || ! e2 ->sound) 304  `šdexed_sÜt ( a , b ); 306  `g_¡rcmp0 ( e1 -> sound , e2 ->sound); 307 } } 309  GSLi¡ * $sÜt_’Œ›s ( GSLi¡ * l , ušt8_t Üd” , ušt8_ˆ £¬ch_©Œib , 310 cÚ¡ * v®ue ) 312 GSLi¡ * sÜ‹d = NULL ; 313 ÿche_’Œy_fšd_f fšd ; 314 GCom·»Func sÜt ; 315 * £¬chv® ; 324  Üd” ) { 326 sÜt = ®pha_sÜt ; 329 sÜt = phÚ‘iÿl_sÜt ; 332 sÜt = šdexed_sÜt ; 341  £¬ch_©Œib ) { 344 fšd = ’Œy_‹l_fšd ; 348 fšd = ’Œy_sound_fšd ; 351 fšd = ’Œy_Çme_fšd ; 355 £¬chv® = v®ue ? `g_utf8_¡rdown (v®ue, -1è: NULL ; 356 ; l ;† =†-> Ãxt ) { 357  ÿche_’Œy * ’Œy = l -> d©a ; 359 ià( £¬chv® && ! `fšd ( ’Œy , (const *) searchval)) 362 sÜ‹d = `g_¦i¡_š£¹_sÜ‹d (sÜ‹d, ’Œy , sÜt ); 365 `g_ä“ ( £¬chv® ); 367  sÜ‹d ; 368 } } 370  $g’”©e_»¥Ú£ (* u£r_d©a ) 372  pb­_£ssiÚ * pb­ = u£r_d©a ; 373 GSLi¡ * sÜ‹d ; 374 GSLi¡ * l ; 375 ušt16_t max = pb­ -> ·¿ms -> maxli¡couÁ ; 377 `DBG (""); 379 ià( max == 0) { 381 ušt16_t size = `g_¦i¡_Ëngth ( pb­ -> ÿche . ’Œ›s ); 383 pb­ -> obj -> ­·¿m = `g_obex_­·¿m_£t_ušt16 ( 384 pb­ -> obj -> ­·¿m , 385 PHONEBOOKSIZE_TAG , 386 size ); 387 #ifdeà __TIZEN_PATCH__ 388 ià( pb­ -> ·¿ms -> »quœed_mis£dÿÎ_ÿÎ_h—d” =ð TRUE ) { 390 pb­ -> obj -> ­·¿m = `g_obex_­·¿m_£t_ušt16 ( 391 pb­ -> obj -> ­·¿m , 392 NEWMISSEDCALLS_TAG , 393 pb­ -> ·¿ms -> Ãw_mis£d_ÿÎs ); 399 #ifdeà __TIZEN_PATCH__ 400 ià( pb­ -> ·¿ms -> »quœed_mis£dÿÎ_ÿÎ_h—d” =ð TRUE ) { 401 pb­ -> obj -> fœ¡·ck‘ = TRUE ; 402 pb­ -> obj -> ­·¿m = `g_obex_­·¿m_£t_ušt16 ( 403 pb­ -> obj -> ­·¿m , 404 NEWMISSEDCALLS_TAG , 405 pb­ -> ·¿ms -> Ãw_mis£d_ÿÎs ); 413 sÜ‹d = `sÜt_’Œ›s ( pb­ -> ÿche . ’Œ›s ,…b­-> ·¿ms -> Üd” , 414 pb­ -> ·¿ms -> £¬ch©Œib , 415 (cÚ¡ *è pb­ -> ·¿ms -> £¬chv® ); 418 l = `g_¦i¡_Áh ( sÜ‹d , pb­ -> ·¿ms -> li¡¡¬toff£t ); 420 pb­ -> obj -> bufãr = `g_¡ršg_Ãw ( VCARD_LISTING_BEGIN ); 421 ; l && max ;† =†-> Ãxt , max--) { 422 cÚ¡  ÿche_’Œy * ’Œy = l -> d©a ; 423 * esÿ³d_Çme = `g_m¬kup_esÿ³_‹xt ( ’Œy -> Çme , -1); 425 `g_¡ršg_­³nd_´štf ( pb­ -> obj -> bufãr , 426 VCARD_LISTING_ELEMENT , ’Œy -> hªdË , esÿ³d_Çme ); 428 `g_ä“ ( esÿ³d_Çme ); 431 pb­ -> obj -> bufãr = `g_¡ršg_­³nd (pbap->obj->buffer, 432 VCARD_LISTING_END ); 433 `g_¦i¡_ä“ ( sÜ‹d ); 436 } } 438 #iâdeà __TIZEN_PATCH__ 439  $ÿche_»ady_nÙify (* u£r_d©a ) 441  $ÿche_»ady_nÙify (* u£r_d©a ,  Ãw_mis£d_ÿÎ ) 444  pb­_£ssiÚ * pb­ = u£r_d©a ; 446 `DBG (""); 447 #ifdeà __TIZEN_PATCH__ 448 pb­ -> ·¿ms -> Ãw_mis£d_ÿÎs = Ãw_mis£d_ÿÎ ; 450 `phÚebook_»q_fš®ize ( pb­ -> obj -> »que¡ ); 451 pb­ -> obj -> »que¡ = NULL ; 453 pb­ -> ÿche . v®id = TRUE ; 455 `g’”©e_»¥Ú£ ( pb­ ); 456 `obex_objeù_£t_io_æags ( pb­ -> obj , G_IO_IN , 0); 457 } } 459  $ÿche_’Œy_dÚe (* u£r_d©a ) 461  pb­_£ssiÚ * pb­ = u£r_d©a ; 462 cÚ¡ * id ; 463  »t ; 465 `DBG (""); 467 pb­ -> ÿche . v®id = TRUE ; 469 id = `ÿche_fšd (& pb­ -> ÿche ,…b­-> fšd_hªdË ); 470 ià( id =ð NULL ) { 471 `DBG ("EÁry %d‚Ù found oÀÿche", pb­ -> fšd_hªdË ); 472 `obex_objeù_£t_io_æags ( pb­ -> obj , G_IO_ERR , - ENOENT ); 476 `phÚebook_»q_fš®ize ( pb­ -> obj -> »que¡ ); 477 pb­ -> obj -> »que¡ = `phÚebook_g‘_’Œy Õb­-> fÞd” , id , 478 pb­ -> ·¿ms , qu”y_»suÉ ,…b­, & »t ); 479 ià( »t < 0) 480 `obex_objeù_£t_io_æags ( pb­ -> obj , G_IO_ERR , »t ); 481 } } 483 #ifdeà __TIZEN_PATCH__ 484  $ÿche_þ—r_nÙify (* u£r_d©a ) 486  pb­_£ssiÚ * pb­ = u£r_d©a ; 488 ià( pb­ =ð NULL ) 491 pb­ -> ÿche . v®id = FALSE ; 492 pb­ -> ÿche . šdex = 0; 493 `ÿche_þ—r (& pb­ -> ÿche ); 494 } } 497  ­·¿m_f›ld * $·r£_­¬am (cÚ¡ ušt8_t * bufãr , ušt32_t hËn ) 499 GObexAµ¬am * ­·¿m ; 500  ­·¿m_f›ld * ·¿m ; 501 #ifdeà __TIZEN_PATCH__ 502 gboÞ—n bmaxli¡CouÁ = FALSE ; 505 ­·¿m = `g_obex_­·¿m_decode ( bufãr , hËn ); 506 ià( ­·¿m =ð NULL ) 507  NULL ; 509 ·¿m = `g_Ãw0 ( ­·¿m_f›ld , 1); 515 ·¿m -> maxli¡couÁ = UINT16_MAX ; 517 `g_obex_­·¿m_g‘_ušt8 ( ­·¿m , ORDER_TAG , & ·¿m -> Üd” ); 518 `g_obex_­·¿m_g‘_ušt8 ( ­·¿m , SEARCHATTRIB_TAG , 519 & ·¿m -> £¬ch©Œib ); 520 `g_obex_­·¿m_g‘_ušt8 ( ­·¿m , FORMAT_TAG , & ·¿m -> fÜm© ); 521 #ifdeà __TIZEN_PATCH__ 522 bmaxli¡CouÁ = `g_obex_­·¿m_g‘_ušt16 ( ­·¿m , MAXLISTCOUNT_TAG , 523 & ·¿m -> maxli¡couÁ ); 525 `g_obex_­·¿m_g‘_ušt16 ( ­·¿m , MAXLISTCOUNT_TAG , 526 & ·¿m -> maxli¡couÁ ); 528 `g_obex_­·¿m_g‘_ušt16 ( ­·¿m , LISTSTARTOFFSET_TAG , 529 & ·¿m -> li¡¡¬toff£t ); 530 `g_obex_­·¿m_g‘_ušt64 ( ­·¿m , FILTER_TAG , & ·¿m -> fž‹r ); 531 ·¿m -> £¬chv® = `g_obex_­·¿m_g‘_¡ršg ( ­·¿m , SEARCHVALUE_TAG ); 533 #ifdeà __TIZEN_PATCH__ 534 if( bmaxli¡CouÁ =ð FALSE ) { 535 ·¿m -> maxli¡couÁ = PBAP_MAXLISTCOUNT_MAX_VALUE ; 542 `DBG ("Ø%x s¨%x sv % fž %" G_GINT64_MODIFIER "x for %x max %x off %x", 543 ·¿m -> Üd” ,…¬am-> £¬ch©Œib ,…¬am-> £¬chv® , 544 ·¿m -> fž‹r ,…¬am-> fÜm© ,…¬am-> maxli¡couÁ , 545 ·¿m -> li¡¡¬toff£t ); 547 `g_obex_­·¿m_ä“ ( ­·¿m ); 549  ·¿m ; 550 } } 552 * $pb­_cÚÃù ( obex_£ssiÚ * os , * ”r ) 554  pb­_£ssiÚ * pb­ ; 556 `mªag”_»gi¡”_£ssiÚ ( os ); 558 pb­ = `g_Ãw0 ( pb­_£ssiÚ , 1); 559 pb­ -> fÞd” = `g_¡rdup ("/"); 560 pb­ -> fšd_hªdË = PHONEBOOK_INVALID_HANDLE ; 562 #ifdeà __TIZEN_PATCH__ 563  ”rÜ ; 565 ”rÜ = `phÚebook_cÚÃù (& pb­ -> back’d_d©a ); 566 ià( ”rÜ < 0) { 567 ià( ”r ) 568 * ”r = ”rÜ ; 569  çžed ; 573 ià( ”r ) 574 * ”r = 0; 576  pb­ ; 578 #ifdeà __TIZEN_PATCH__ 579 çžed : 580 `g_ä“ ( pb­ ); 582  NULL ; 584 } } 586  $pb­_g‘ ( obex_£ssiÚ * os , * u£r_d©a ) 588  pb­_£ssiÚ * pb­ = u£r_d©a ; 589 cÚ¡ * ty³ = `obex_g‘_ty³ ( os ); 590 cÚ¡ * Çme = `obex_g‘_Çme ( os ); 591  ­·¿m_f›ld * ·¿ms ; 592 cÚ¡ ušt8_t * bufãr ; 593 * ·th ; 594 ssize_t rsize ; 595  »t ; 597 `DBG ("Çm% ty³ % pb­ %p", Çme , ty³ , pb­ ); 599 ià( ty³ =ð NULL ) 600  - EBADR ; 602 rsize = `obex_g‘_­·¿m ( os , & bufãr ); 603 ià( rsize < 0) { 604 ià( `g_ascii_¡rÿ£cmp ( ty³ , VCARDENTRY_TYPE ) != 0) 605  - EBADR ; 607 rsize = 0; 610 ·¿ms = `·r£_­¬am ( bufãr , rsize ); 611 ià( ·¿ms =ð NULL ) 612  - EBADR ; 614 ià( pb­ -> ·¿ms ) { 615 `g_ä“ ( pb­ -> ·¿ms -> £¬chv® ); 616 `g_ä“ ( pb­ -> ·¿ms ); 619 pb­ -> ·¿ms =…arams; 621 ià( `g_ascii_¡rÿ£cmp ( ty³ , PHONEBOOK_TYPE ) == 0) { 623 ià( `g_·th_is_absÞu‹ ( Çme )) 624 ·th = `g_¡rdup ( Çme ); 626 ·th = `g_bužd_fž’ame ("/", Çme , NULL ); 628 } ià( `g_ascii_¡rÿ£cmp ( ty³ , VCARDLISTING_TYPE ) == 0) { 630 ià(! Çme || `¡¾’ (name) == 0) 632 ·th = `g_¡rdup ( pb­ -> fÞd” ); 635 ·th = `g_bužd_fž’ame ( pb­ -> fÞd” , Çme , NULL ); 637 } ià( `g_ascii_¡rÿ£cmp ( ty³ , VCARDENTRY_TYPE ) == 0) { 639 ·th = `g_¡rdup ( Çme ); 641  - EBADR ; 643 ià( ·th =ð NULL ) 644  - EBADR ; 646 »t = `obex_g‘_¡»am_¡¬t ( os , ·th ); 648 `g_ä“ ( ·th ); 650  »t ; 651 } } 653  $pb­_£©h ( obex_£ssiÚ * os , * u£r_d©a ) 655  pb­_£ssiÚ * pb­ = u£r_d©a ; 656 cÚ¡ * Çme ; 657 cÚ¡ ušt8_t * nÚhdr ; 658 * fuÎÇme ; 659  ”r ; 661 ià( `obex_g‘_nÚ_h—d”_d©a ( os , & nÚhdr ) != 2) { 662 `”rÜ ("Set…ath failed: flag‡nd constants‚ot found!"); 663  - EBADMSG ; 666 Çme = `obex_g‘_Çme ( os ); 668 `DBG ("Çm% fÞd” % nÚhd¸0x%x%x", Çme , pb­ -> fÞd” , 669 nÚhdr [0],‚onhdr[1]); 671 fuÎÇme = `phÚebook_£t_fÞd” ( pb­ -> fÞd” , Çme , nÚhdr [0], & ”r ); 672 ià( ”r < 0) 673  ”r ; 675 `g_ä“ ( pb­ -> fÞd” ); 676 pb­ -> fÞd” = fuÎÇme ; 681 pb­ -> ÿche . v®id = FALSE ; 682 pb­ -> ÿche . šdex = 0; 683 `ÿche_þ—r (& pb­ -> ÿche ); 686 } } 688  $pb­_discÚÃù ( obex_£ssiÚ * os , * u£r_d©a ) 690  pb­_£ssiÚ * pb­ = u£r_d©a ; 692 `mªag”_uÄegi¡”_£ssiÚ ( os ); 694 #ifdeà __TIZEN_PATCH__ 695 ià(! pb­ ) 698 `phÚebook_discÚÃù ( pb­ -> back’d_d©a ); 701 ià( pb­ -> obj ) 702 pb­ -> obj -> £ssiÚ = NULL ; 704 ià( pb­ -> ·¿ms ) { 705 `g_ä“ ( pb­ -> ·¿ms -> £¬chv® ); 706 `g_ä“ ( pb­ -> ·¿ms ); 709 `ÿche_þ—r (& pb­ -> ÿche ); 710 `g_ä“ ( pb­ -> fÞd” ); 711 `g_ä“ ( pb­ ); 712 } } 714  $pb­_chkput ( obex_£ssiÚ * os , * u£r_d©a ) 717  - EBADR ; 718 } } 720  obex_£rviû_driv” gpb­ = { 721 . Çme = "Phonebook Access server", 722 . g£rviû = OBEX_PBAP , 723 . grg‘ = PBAP_TARGET , 724 . grg‘_size = TARGET_SIZE , 725 . gcÚÃù = pb­_cÚÃù , 726 . gg‘ = pb­_g‘ , 727 . g£©h = pb­_£©h , 728 . gdiscÚÃù = pb­_discÚÃù , 729 . gchkput = pb­_chkput 732  pb­_objeù * $vobjeù_ü—‹ ( pb­_£ssiÚ * pb­ , 733 * »que¡ ) 735  pb­_objeù * obj ; 737 obj = `g_Ãw0 ( pb­_objeù , 1); 738 obj -> £ssiÚ = pb­ ; 739 pb­ -> obj = obj; 740 obj -> »que¡ =„equest; 742  obj ; 743 } } 745 * $vobjeù_puÎ_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 746 * cÚ‹xt , size_t * size , * ”r ) 748  pb­_£ssiÚ * pb­ = cÚ‹xt ; 749 phÚebook_cb cb ; 750  »t ; 751 * »que¡ ; 753 `DBG ("Çm% cÚ‹xˆ%°maxli¡couÁ %d", Çme , cÚ‹xt , 754 pb­ -> ·¿ms -> maxli¡couÁ ); 756 ià( oæag !ð O_RDONLY ) { 757 »t = - EPERM ; 758  çž ; 761 ià( Çme =ð NULL ) { 762 »t = - EBADR ; 763  çž ; 765 #ifdeà __TIZEN_PATCH__ 766 ià( `¡rcmp ( Çme , "/telecom/mch.vcf") == 0) 767 pb­ -> ·¿ms -> »quœed_mis£dÿÎ_ÿÎ_h—d” = TRUE ; 769 `DBG ("[%s] -„equired_missedcall_call_header [%d] ", 770 Çme , pb­ -> ·¿ms -> »quœed_mis£dÿÎ_ÿÎ_h—d” ); 773 ià( pb­ -> ·¿ms -> maxli¡couÁ == 0) 774 cb = phÚebook_size_»suÉ ; 776 cb = qu”y_»suÉ ; 778 »que¡ = `phÚebook_puÎ ( Çme , pb­ -> ·¿ms , cb ,…b­, & »t ); 780 ià( »t < 0) 781  çž ; 784 »t = `phÚebook_puÎ_»ad ( »que¡ ); 785 ià( »t < 0) 786  çž ; 788 ià( ”r ) 789 * ”r = 0; 791  `vobjeù_ü—‹ ( pb­ , »que¡ ); 793 çž : 794 ià( ”r ) 795 * ”r = »t ; 797  NULL ; 798 } } 800  $vobjeù_þo£ (* objeù ) 802  pb­_objeù * obj = objeù ; 804 `DBG (""); 806 ià( obj -> £ssiÚ ) 807 obj -> £ssiÚ ->obj = NULL ; 809 ià( obj -> bufãr ) 810 `g_¡ršg_ä“ ( obj -> bufãr , TRUE ); 812 ià( obj -> ­·¿m ) 813 `g_obex_­·¿m_ä“ ( obj -> ­·¿m ); 815 ià( obj -> »que¡ ) 816 `phÚebook_»q_fš®ize ( obj -> »que¡ ); 818 `g_ä“ ( obj ); 821 } } 823 * $vobjeù_li¡_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 824 * cÚ‹xt , size_t * size , * ”r ) 826  pb­_£ssiÚ * pb­ = cÚ‹xt ; 827  pb­_objeù * obj = NULL ; 828  »t ; 829 * »que¡ ; 831 `DBG ("Çm% cÚ‹xˆ%°v®id %d", Çme , cÚ‹xt , pb­ -> ÿche . v®id ); 833 ià( oæag !ð O_RDONLY ) { 834 »t = - EPERM ; 835  çž ; 838 ià( Çme =ð NULL ) { 839 »t = - EBADR ; 840  çž ; 843 #ifdeà __TIZEN_PATCH__ 844 ià( `¡rcmp ( Çme , "/telecom/mch") == 0) 845 pb­ -> ·¿ms -> »quœed_mis£dÿÎ_ÿÎ_h—d” = TRUE ; 847 `DBG ("[%s] -„equired_missedcall_call_header [%d] ", 848 Çme , pb­ -> ·¿ms -> »quœed_mis£dÿÎ_ÿÎ_h—d” ); 853 ià( pb­ -> ÿche . v®id ) { 854 obj = `vobjeù_ü—‹ ( pb­ , NULL ); 855 »t = `g’”©e_»¥Ú£ ( pb­ ); 857 »que¡ = `phÚebook_ü—‹_ÿche ( Çme , ÿche_’Œy_nÙify , 858 ÿche_»ady_nÙify , pb­ , & »t ); 859 ià( »t == 0) 860 obj = `vobjeù_ü—‹ ( pb­ , »que¡ ); 861 #ifdeà __TIZEN_PATCH__ 862 `phÚebook_£t_ÿche_nÙifiÿtiÚ ( pb­ -> back’d_d©a , 863 ÿche_þ—r_nÙify , pb­ ); 866 ià( »t < 0) 867  çž ; 869 ià( ”r ) 870 * ”r = 0; 872  obj ; 874 çž : 875 ià( obj ) 876 `vobjeù_þo£ ( obj ); 878 ià( ”r ) 879 * ”r = »t ; 881  NULL ; 882 } } 884 * $vobjeù_vÿrd_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 885 * cÚ‹xt , size_t * size , * ”r ) 887  pb­_£ssiÚ * pb­ = cÚ‹xt ; 888 cÚ¡ * id ; 889 ušt32_t hªdË ; 890 #ifdeà __TIZEN_PATCH__ 891  »t = 0; 893  »t ; 895 * »que¡ ; 897 `DBG ("Çm% cÚ‹xˆ%°v®id %d", Çme , cÚ‹xt , pb­ -> ÿche . v®id ); 899 ià( oæag !ð O_RDONLY ) { 900 »t = - EPERM ; 901  çž ; 904 ià( Çme =ð NULL || `ssÿnf Òame, "%u.vcf", & hªdË ) != 1) { 905 »t = - EBADR ; 906  çž ; 909 ià( pb­ -> ÿche . v®id =ð FALSE ) { 910 pb­ -> fšd_hªdË = hªdË ; 911 #ifdeà __TIZEN_PATCH__ 912 »que¡ = `phÚebook_ü—‹_ÿche ( pb­ -> fÞd” , 913 ( phÚebook_’Œy_cb ) ÿche_’Œy_nÙify , 914 ( phÚebook_ÿche_»ady_cb ) ÿche_’Œy_dÚe , pb­ , & »t ); 916 »que¡ = `phÚebook_ü—‹_ÿche ( pb­ -> fÞd” , 917 ÿche_’Œy_nÙify , ÿche_’Œy_dÚe , pb­ , & »t ); 919 #ifdeà __TIZEN_PATCH__ 920 `phÚebook_£t_ÿche_nÙifiÿtiÚ ( pb­ -> back’d_d©a , 921 ÿche_þ—r_nÙify , pb­ ); 923  dÚe ; 926 id = `ÿche_fšd (& pb­ -> ÿche , hªdË ); 927 ià(! id ) { 928 »t = - ENOENT ; 929  çž ; 931 `DBG ("pbap session: Folder[%s] Filter[%llu] Format[%d]„et[%d]", 932 pb­ -> fÞd” ,…b­-> ·¿ms -> fž‹r ,…b­->·¿ms-> fÜm© , »t ); 934 »que¡ = `phÚebook_g‘_’Œy ( pb­ -> fÞd” , id ,…b­-> ·¿ms , 935 qu”y_»suÉ , pb­ , & »t ); 937 dÚe : 938 ià( »t < 0) 939  çž ; 941 ià( ”r ) 942 * ”r = 0; 944 `DBG ("-"); 945  `vobjeù_ü—‹ ( pb­ , »que¡ ); 947 çž : 948 ià( ”r ) 949 * ”r = »t ; 951 `DBG ("-"); 952  NULL ; 953 } } 955  ssize_t $vobjeù_puÎ_g‘_Ãxt_h—d” (* objeù , * buf , size_t mtu , 956 ušt8_t * hi ) 958  pb­_objeù * obj = objeù ; 959  pb­_£ssiÚ * pb­ = obj -> £ssiÚ ; 961 ià(! obj -> bufãr && !obj-> ­·¿m ) 962  - EAGAIN ; 964 * hi = G_OBEX_HDR_APPARAM ; 966 ià( pb­ -> ·¿ms -> maxli¡couÁ =ð0 || obj -> fœ¡·ck‘ ) { 967 obj -> fœ¡·ck‘ = FALSE ; 969  `g_obex_­·¿m_’code ( obj -> ­·¿m , buf , mtu ); 973 } } 975  ssize_t $vobjeù_puÎ_»ad (* objeù , * buf , size_t couÁ ) 977  pb­_objeù * obj = objeù ; 978  pb­_£ssiÚ * pb­ = obj -> £ssiÚ ; 979  Ën , »t ; 981 `DBG ("bufã¸%°maxli¡couÁ %d", obj -> bufãr , 982 pb­ -> ·¿ms -> maxli¡couÁ ); 984 ià(! obj -> bufãr ) { 985 ià( pb­ -> ·¿ms -> maxli¡couÁ == 0) 986  - ENOSTR ; 988  - EAGAIN ; 991 Ën = `¡ršg_»ad ( obj -> bufãr , buf , couÁ ); 992 ià( Ën =ð0 && ! obj -> Ï¡·¹ ) { 997 »t = `phÚebook_puÎ_»ad ( obj -> »que¡ ); 998 ià( »t ) 999  - EPERM ; 1001  - EAGAIN ; 1004  Ën ; 1005 } } 1007  ssize_t $vobjeù_li¡_g‘_Ãxt_h—d” (* objeù , * buf , size_t mtu , 1008 ušt8_t * hi ) 1010  pb­_objeù * obj = objeù ; 1011  pb­_£ssiÚ * pb­ = obj -> £ssiÚ ; 1014 ià(! pb­ -> ÿche . v®id ) 1015  - EAGAIN ; 1017 * hi = G_OBEX_HDR_APPARAM ; 1018 #iâdeà __TIZEN_PATCH__ 1019 ià( pb­ -> ·¿ms -> maxli¡couÁ == 0) 1020  `g_obex_­·¿m_’code ( obj -> ­·¿m , buf , mtu ); 1024 ià( obj -> ­·¿m !ð NULL ) 1025  `g_obex_­·¿m_’code ( obj -> ­·¿m , buf , mtu ); 1029 } } 1031  ssize_t $vobjeù_li¡_»ad (* objeù , * buf , size_t couÁ ) 1033  pb­_objeù * obj = objeù ; 1034  pb­_£ssiÚ * pb­ = obj -> £ssiÚ ; 1036 `DBG ("v®id %d maxli¡couÁ %d", pb­ -> ÿche . v®id , 1037 pb­ -> ·¿ms -> maxli¡couÁ ); 1039 ià( pb­ -> ·¿ms -> maxli¡couÁ == 0) 1040  - ENOSTR ; 1042  `¡ršg_»ad ( obj -> bufãr , buf , couÁ ); 1043 } } 1045  ssize_t $vobjeù_vÿrd_»ad (* objeù , * buf , size_t couÁ ) 1047  pb­_objeù * obj = objeù ; 1049 `DBG ("bufã¸%p", obj -> bufãr ); 1051 ià(! obj -> bufãr ) 1052  - EAGAIN ; 1054  `¡ršg_»ad ( obj -> bufãr , buf , couÁ ); 1055 } } 1057  obex_mime_ty³_driv” gmime_puÎ = { 1058 . rg‘ = PBAP_TARGET , 1059 . grg‘_size = TARGET_SIZE , 1060 . gmim‘y³ = "x-bt/phonebook", 1061 . gÝ’ = vobjeù_puÎ_Ý’ , 1062 . gþo£ = vobjeù_þo£ , 1063 . g»ad = vobjeù_puÎ_»ad , 1064 . gg‘_Ãxt_h—d” = vobjeù_puÎ_g‘_Ãxt_h—d” , 1067  obex_mime_ty³_driv” gmime_li¡ = { 1068 . rg‘ = PBAP_TARGET , 1069 . grg‘_size = TARGET_SIZE , 1070 . gmim‘y³ = "x-bt/vcard-listing", 1071 . gÝ’ = vobjeù_li¡_Ý’ , 1072 . gþo£ = vobjeù_þo£ , 1073 . g»ad = vobjeù_li¡_»ad , 1074 . gg‘_Ãxt_h—d” = vobjeù_li¡_g‘_Ãxt_h—d” , 1077  obex_mime_ty³_driv” gmime_vÿrd = { 1078 . rg‘ = PBAP_TARGET , 1079 . grg‘_size = TARGET_SIZE , 1080 . gmim‘y³ = "x-bt/vcard", 1081 . gÝ’ = vobjeù_vÿrd_Ý’ , 1082 . gþo£ = vobjeù_þo£ , 1083 . g»ad = vobjeù_vÿrd_»ad , 1086  $pb­_š™ () 1088  ”r ; 1090 ”r = `phÚebook_š™ (); 1091 ià( ”r < 0) 1092  ”r ; 1094 ”r = `obex_mime_ty³_driv”_»gi¡” (& mime_puÎ ); 1095 ià( ”r < 0) 1096  çž_mime_puÎ ; 1098 ”r = `obex_mime_ty³_driv”_»gi¡” (& mime_li¡ ); 1099 ià( ”r < 0) 1100  çž_mime_li¡ ; 1102 ”r = `obex_mime_ty³_driv”_»gi¡” (& mime_vÿrd ); 1103 ià( ”r < 0) 1104  çž_mime_vÿrd ; 1106 ”r = `obex_£rviû_driv”_»gi¡” (& pb­ ); 1107 ià( ”r < 0) 1108  çž_pb­_»g ; 1112 çž_pb­_»g : 1113 `obex_mime_ty³_driv”_uÄegi¡” (& mime_vÿrd ); 1114 çž_mime_vÿrd : 1115 `obex_mime_ty³_driv”_uÄegi¡” (& mime_li¡ ); 1116 çž_mime_li¡ : 1117 `obex_mime_ty³_driv”_uÄegi¡” (& mime_puÎ ); 1118 çž_mime_puÎ : 1119 `phÚebook_ex™ (); 1121  ”r ; 1122 } } 1124  $pb­_ex™ () 1126 `obex_£rviû_driv”_uÄegi¡” (& pb­ ); 1127 `obex_mime_ty³_driv”_uÄegi¡” (& mime_puÎ ); 1128 `obex_mime_ty³_driv”_uÄegi¡” (& mime_li¡ ); 1129 `obex_mime_ty³_driv”_uÄegi¡” (& mime_vÿrd ); 1130 `phÚebook_ex™ (); 1131 } } 1133 OBEX_PLUGIN_DEFINE ( pb­ , pb­_š™ , pb­_ex™ ) @obexd/plugins/pcsuite.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~ 30  ~<¡dio.h > 31  ~<”ºo.h > 32  ~<¡dlib.h > 33  ~<¡ršg.h > 34  ~ 35  ~ 36  ~ 37  ~ 38  ~ 39  ~<š‰y³s.h > 41  ~ 42  ~ 44  ~"obexd.h " 45  ~"¶ugš.h " 46  ~"log.h " 47  ~"obex.h " 48  ~"mim‘y³.h " 49  ~"£rviû.h " 50  ~"áp.h " 52  #PCSUITE_CHANNEL 24 ) 53  #PCSUITE_WHO_SIZE 8 ) 55  #PCSUITE_RECORD " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\"‚ame=\"Çme\"/> \ \ " ) 98  #BACKUP_BUS_NAME "com.nokŸ.backup.¶ugš" ) 99  #BACKUP_PATH "/com/nokŸ/backup" ) 100  #BACKUP_PLUGIN_INTERFACE "com.nokŸ.backup.¶ugš" ) 101  #BACKUP_DBUS_TIMEOUT (1000 * 60 * 15) ) 103 cÚ¡ ušt8_t gFTP_TARGET [ TARGET_SIZE ] = { 107 cÚ¡ ušt8_t gPCSUITE_WHO [ PCSUITE_WHO_SIZE ] = { 110  spcsu™e_£ssiÚ { 111  áp_£ssiÚ * máp ; 112 * mlock_fže ; 113  mfd ; 116 * $pcsu™e_cÚÃù ( obex_£ssiÚ * os , * ”r ) 118  pcsu™e_£ssiÚ * pcsu™e ; 119  áp_£ssiÚ * áp ; 120  fd ; 121 * fž’ame ; 123 `DBG (""); 125 áp = `áp_cÚÃù ( os , ”r ); 126 ià( áp =ð NULL ) 127  NULL ; 129 fž’ame = `g_bužd_fž’ame ( `g_g‘_home_dœ (), ".pcsu™e", NULL ); 131 fd = `Ý’ ( fž’ame , O_WRONLY | O_CREAT | O_EXCL , 0644); 132 ià( fd < 0 && ”ºo !ð EEXIST ) { 133 `”rÜ ("Ý’(%s): %s(%d)", fž’ame , `¡»¼Ü ( ”ºo ),ƒrrno); 134  çž ; 139 ià( fd < 0) { 140 ià( `»move ( fž’ame ) < 0) { 141 `”rÜ ("»move(%s): %s(%d)", fž’ame , `¡»¼Ü ( ”ºo ), 142 ”ºo ); 143  çž ; 146 fd = `Ý’ ( fž’ame , O_WRONLY | O_CREAT | O_EXCL , 0644); 147 ià( fd < 0) { 148 `”rÜ ("Ý’(%s): %s(%d)", fž’ame , `¡»¼Ü ( ”ºo ), 149 ”ºo ); 150  çž ; 154 `DBG ("% ü—‹d", fž’ame ); 156 pcsu™e = `g_Ãw0 ( pcsu™e_£ssiÚ , 1); 157 pcsu™e -> áp = ftp; 158 pcsu™e -> lock_fže = fž’ame ; 159 pcsu™e -> fd = fd; 161 `DBG ("£ssiÚ %°ü—‹d", pcsu™e ); 163 ià( ”r ) 164 * ”r = 0; 166  pcsu™e ; 168 çž : 169 ià( áp ) 170 `áp_discÚÃù ( os , áp ); 171 ià( ”r ) 172 * ”r = - ”ºo ; 174 `g_ä“ ( fž’ame ); 176  NULL ; 177 } } 179  $pcsu™e_g‘ ( obex_£ssiÚ * os , * u£r_d©a ) 181  pcsu™e_£ssiÚ * pcsu™e = u£r_d©a ; 183 `DBG ("%p", pcsu™e ); 185  `áp_g‘ ( os , pcsu™e -> áp ); 186 } } 188  $pcsu™e_chkput ( obex_£ssiÚ * os , * u£r_d©a ) 190  pcsu™e_£ssiÚ * pcsu™e = u£r_d©a ; 192 `DBG ("%p", pcsu™e ); 194  `áp_chkput ( os , pcsu™e -> áp ); 195 } } 197  $pcsu™e_put ( obex_£ssiÚ * os , * u£r_d©a ) 199  pcsu™e_£ssiÚ * pcsu™e = u£r_d©a ; 201 `DBG ("%p", pcsu™e ); 203  `áp_put ( os , pcsu™e -> áp ); 204 } } 206  $pcsu™e_£©h ( obex_£ssiÚ * os , * u£r_d©a ) 208  pcsu™e_£ssiÚ * pcsu™e = u£r_d©a ; 210 `DBG ("%p", pcsu™e ); 212  `áp_£©h ( os , pcsu™e -> áp ); 213 } } 215  $pcsu™e_aùiÚ ( obex_£ssiÚ * os , * u£r_d©a ) 217  pcsu™e_£ssiÚ * pcsu™e = u£r_d©a ; 219 `DBG ("%p", pcsu™e ); 221  `áp_aùiÚ ( os , pcsu™e -> áp ); 222 } } 224  $pcsu™e_discÚÃù ( obex_£ssiÚ * os , * u£r_d©a ) 226  pcsu™e_£ssiÚ * pcsu™e = u£r_d©a ; 228 `DBG ("%p", pcsu™e ); 230 ià( pcsu™e -> fd >= 0) 231 `þo£ ( pcsu™e -> fd ); 233 ià( pcsu™e -> lock_fže ) { 234 `»move ( pcsu™e -> lock_fže ); 235 `g_ä“ ( pcsu™e -> lock_fže ); 238 ià( pcsu™e -> áp ) 239 `áp_discÚÃù ( os , pcsu™e -> áp ); 241 `g_ä“ ( pcsu™e ); 242 } } 244  obex_£rviû_driv” gpcsu™e = { 245 . Çme = "Nokia OBEX PC Suite Services", 246 . g£rviû = OBEX_PCSUITE , 247 . gchªÃl = PCSUITE_CHANNEL , 248 . g£cu» = TRUE , 249 . g»cÜd = PCSUITE_RECORD , 250 . grg‘ = FTP_TARGET , 251 . grg‘_size = TARGET_SIZE , 252 . gwho = PCSUITE_WHO , 253 . gwho_size = PCSUITE_WHO_SIZE , 254 . gcÚÃù = pcsu™e_cÚÃù , 255 . gg‘ = pcsu™e_g‘ , 256 . gput = pcsu™e_put , 257 . gchkput = pcsu™e_chkput , 258 . g£©h = pcsu™e_£©h , 259 . gaùiÚ = pcsu™e_aùiÚ , 260 . gdiscÚÃù = pcsu™e_discÚÃù 263  sbackup_objeù { 264 * mcmd ; 265  mfd ; 266  moæag ; 267  m”rÜ_code ; 268 mode_t mmode ; 269 DBusP’dšgC®l * m³ndšg_ÿÎ ; 270 DBusCÚÃùiÚ * mcÚn ; 273  $Ú_backup_dbus_nÙify ( DBusP’dšgC®l * ³ndšg_ÿÎ , 274 * u£r_d©a ) 276  backup_objeù * obj = u£r_d©a ; 277 DBusMes§ge * »¶y ; 278 cÚ¡ * fž’ame ; 279  ”rÜ_code ; 281 `DBG ("NÙifiÿtiÚ„eûived fÜ…’dšg c®È- %s", obj -> cmd ); 283 »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ³ndšg_ÿÎ ); 285 ià( »¶y && `dbus_mes§ge_g‘_¬gs Ô•ly, NULL , DBUS_TYPE_INT32 , 286 & ”rÜ_code , DBUS_TYPE_STRING , 287 & fž’ame , DBUS_TYPE_INVALID )) { 289 obj -> ”rÜ_code =ƒrror_code; 291 ià( fž’ame ) { 292 `DBG ("Notification - file…ath = %s,ƒrror_code = %d", 293 fž’ame , ”rÜ_code ); 294 ià( ”rÜ_code == 0) 295 obj -> fd = `Ý’ ( fž’ame ,obj-> oæag ,obj-> mode ); 299 `DBG ("Notificationimed out or connection got closed"); 301 ià( »¶y ) 302 `dbus_mes§ge_uÄef ( »¶y ); 304 `dbus_³ndšg_ÿÎ_uÄef ( ³ndšg_ÿÎ ); 305 obj -> ³ndšg_ÿÎ = NULL ; 306 `dbus_cÚÃùiÚ_uÄef ( obj -> cÚn ); 307 obj -> cÚn = NULL ; 309 ià( obj -> fd >= 0) { 310 `DBG ("File opened, setting io flags, cmd = %s", 311 obj -> cmd ); 312 ià( obj -> oæag =ð O_RDONLY ) 313 `obex_objeù_£t_io_æags ( u£r_d©a , G_IO_IN , 0); 315 `obex_objeù_£t_io_æags ( u£r_d©a , G_IO_OUT , 0); 317 `DBG ("File openƒrror, setting ioƒrror, cmd = %s", 318 obj -> cmd ); 319 `obex_objeù_£t_io_æags ( u£r_d©a , G_IO_ERR , - EPERM ); 321 } } 323  gboÞ—n $£nd_backup_dbus_mes§ge (cÚ¡ * Ý” , 324  backup_objeù * obj , 325 size_t * size ) 327 DBusCÚÃùiÚ * cÚn ; 328 DBusMes§ge * msg ; 329 DBusP’dšgC®l * ³ndšg_ÿÎ ; 330 gboÞ—n »t = FALSE ; 331 dbus_ušt32_t fže_size ; 333 fže_size = size ? *size : 0; 335 cÚn = `g_dbus_£tup_bus ( DBUS_BUS_SESSION , NULL , NULL); 337 ià( cÚn =ð NULL ) 338  FALSE ; 340 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( BACKUP_BUS_NAME , BACKUP_PATH , 341 BACKUP_PLUGIN_INTERFACE , 343 ià( msg =ð NULL ) { 344 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 345  FALSE ; 348 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_STRING , & Ý” , 349 DBUS_TYPE_STRING , & obj -> cmd , 350 DBUS_TYPE_INT32 , & fže_size , 351 DBUS_TYPE_INVALID ); 353 ià( `¡rcmp ( Ý” , "open") == 0) { 354 »t = `g_dbus_£nd_mes§ge_w™h_»¶y ( cÚn , msg , & ³ndšg_ÿÎ , 355 BACKUP_DBUS_TIMEOUT ); 356 `dbus_mes§ge_uÄef ( msg ); 357 ià( »t ) { 358 obj -> cÚn = conn; 359 obj -> ³ndšg_ÿÎ =…ending_call; 360 »t = `dbus_³ndšg_ÿÎ_£t_nÙify ( ³ndšg_ÿÎ , 361 Ú_backup_dbus_nÙify , 362 obj , NULL ); 364 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 366 `g_dbus_£nd_mes§ge ( cÚn , msg ); 367 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 370  »t ; 371 } } 373 * $backup_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 374 * cÚ‹xt , size_t * size , * ”r ) 376  backup_objeù * obj = `g_Ãw0 (backup_object, 1); 378 `DBG ("cmd = %s", Çme ); 380 obj -> cmd = `g_·th_g‘_ba£Çme ( Çme ); 381 obj -> oæag = oflag; 382 obj -> mode = mode; 383 obj -> fd = -1; 384 obj -> ³ndšg_ÿÎ = NULL ; 385 obj -> cÚn = NULL ; 386 obj -> ”rÜ_code = 0; 388 ià( `£nd_backup_dbus_mes§ge ("Ý’", obj , size è=ð FALSE ) { 389 `g_ä“ ( obj ); 390 obj = NULL ; 393 ià( ”r ) 394 * ”r = 0; 396  obj ; 397 } } 399  $backup_þo£ (* objeù ) 401  backup_objeù * obj = objeù ; 402 size_t size = 0; 404 `DBG ("cmd = %s", obj -> cmd ); 406 ià( obj -> fd != -1) 407 `þo£ ( obj -> fd ); 409 ià( obj -> ³ndšg_ÿÎ ) { 410 `dbus_³ndšg_ÿÎ_ÿnûl ( obj -> ³ndšg_ÿÎ ); 411 `dbus_³ndšg_ÿÎ_uÄef ( obj -> ³ndšg_ÿÎ ); 412 `dbus_cÚÃùiÚ_uÄef ( obj -> cÚn ); 415 `£nd_backup_dbus_mes§ge ("þo£", obj , & size ); 417 `g_ä“ ( obj -> cmd ); 418 `g_ä“ ( obj ); 421 } } 423  ssize_t $backup_»ad (* objeù , * buf , size_t couÁ ) 425  backup_objeù * obj = objeù ; 426 ssize_t »t = 0; 428 ià( obj -> ³ndšg_ÿÎ ) { 429 `DBG ("cmd = %s, IN WAITING STAGE", obj -> cmd ); 430  - EAGAIN ; 433 ià( obj -> fd != -1) { 434 `DBG ("cmd = %s, READING DATA", obj -> cmd ); 435 »t = `»ad ( obj -> fd , buf , couÁ ); 436 ià( »t < 0) 437 »t = - ”ºo ; 439 `DBG ("cmd = %s, PERMANENT FAILURE", obj -> cmd ); 440 »t = obj -> ”rÜ_code ? -obj->”rÜ_cod: - ENOENT ; 443  »t ; 444 } } 446  ssize_t $backup_wr™e (* objeù , cÚ¡ * buf , size_t couÁ ) 448  backup_objeù * obj = objeù ; 449 ssize_t »t = 0; 451 ià( obj -> ³ndšg_ÿÎ ) { 452 `DBG ("cmd = %s, IN WAITING STAGE", obj -> cmd ); 453  - EAGAIN ; 456 ià( obj -> fd != -1) { 457 »t = `wr™e ( obj -> fd , buf , couÁ ); 459 `DBG ("cmd = %s, WRITTING", obj -> cmd ); 461 ià( »t < 0) { 462 `”rÜ ("backup: cmd = %s", obj -> cmd ); 463 »t = - ”ºo ; 466 `”rÜ ("backup: cmd = %s", obj -> cmd ); 467 »t = obj -> ”rÜ_code ? -obj->”rÜ_cod: - ENOENT ; 470  »t ; 471 } } 473  $backup_æush (* objeù ) 475 `DBG ("%p", objeù ); 478 } } 480  obex_mime_ty³_driv” gbackup = { 481 . rg‘ = FTP_TARGET , 482 . grg‘_size = TARGET_SIZE , 483 . gmim‘y³ = "application/vnd.nokia-backup", 484 . gÝ’ = backup_Ý’ , 485 . gþo£ = backup_þo£ , 486 . g»ad = backup_»ad , 487 . gwr™e = backup_wr™e , 488 . gæush = backup_æush , 491  $pcsu™e_š™ () 493  ”r ; 495 ”r = `obex_£rviû_driv”_»gi¡” (& pcsu™e ); 496 ià( ”r < 0) 497  ”r ; 499 ”r = `obex_mime_ty³_driv”_»gi¡” (& backup ); 500 ià( ”r < 0) 501 `obex_£rviû_driv”_uÄegi¡” (& pcsu™e ); 503  ”r ; 504 } } 506  $pcsu™e_ex™ () 508 `obex_mime_ty³_driv”_uÄegi¡” (& backup ); 509 `obex_£rviû_driv”_uÄegi¡” (& pcsu™e ); 510 } } 512 OBEX_PLUGIN_DEFINE ( pcsu™e , pcsu™e_š™ , pcsu™e_ex™ ) @obexd/plugins/phonebook-dummy.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~ 30  ~<”ºo.h > 31  ~<¡dio.h > 32  ~<¡dšt.h > 33  ~<¡ršg.h > 34  ~ 35  ~<¡dlib.h > 36  ~ 37  ~ 38  ~ 39  ~ 40  ~ 41  ~ 42  ~ 44  ~"log.h " 45  ~"phÚebook.h " 47 (* tvÿrd_func_t è(cÚ¡ * tfže , tVObjeù * tvo , * tu£r_d©a ); 49  sdummy_d©a { 50 phÚebook_cb cb ; 51 * u£r_d©a ; 52 cÚ¡  ­·¿m_f›ld * ­·¿ms ; 53 * fÞd” ; 54  fd ; 55 gušt id ; 58  sÿche_qu”y { 59 phÚebook_’Œy_cb ’Œy_cb ; 60 phÚebook_ÿche_»ady_cb »ady_cb ; 61 * u£r_d©a ; 62 DIR * dp ; 65 * roÙ_fÞd” = NULL ; 67  $dummy_ä“ (* u£r_d©a ) 69  dummy_d©a * dummy = u£r_d©a ; 71 ià( dummy -> fd >= 0) 72 `þo£ ( dummy -> fd ); 74 `g_ä“ ( dummy -> fÞd” ); 75 `g_ä“ ( dummy ); 76 } } 78  $qu”y_ä“ (* u£r_d©a ) 80  ÿche_qu”y * qu”y = u£r_d©a ; 82 ià( qu”y -> dp ) 83 `þo£dœ ( qu”y -> dp ); 85 `g_ä“ ( qu”y ); 86 } } 88  $phÚebook_š™ () 90 ià( roÙ_fÞd” ) 94 roÙ_fÞd” = `g_bužd_fž’ame ( `g‘’v ("HOME"), "phÚebook", NULL ); 97 } } 99  $phÚebook_ex™ () 101 `g_ä“ ( roÙ_fÞd” ); 102 roÙ_fÞd” = NULL ; 103 } } 105  $hªdË_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 107 cÚ¡ * f1 = a ; 108 cÚ¡ * f2 = b ; 109  i1 , i2 ; 111 ià( `ssÿnf ( f1 , "%u.vcf", & i1 ) != 1) 114 ià( `ssÿnf ( f2 , "%u.vcf", & i2 ) != 1) 117  ( i1 - i2 ); 118 } } 120  $fÜ—ch_vÿrd ( DIR * dp , vÿrd_func_t func , ušt16_t off£t , 121 ušt16_t maxli¡couÁ , * u£r_d©a , ušt16_ˆ* couÁ ) 123  dœ’t * • ; 124 GSLi¡ * sÜ‹d = NULL , * l ; 125 VObjeù * v ; 126 FILE * å ; 127  ”r , fd , fÞd”fd ; 128 ušt16_t n = 0; 130 fÞd”fd = `dœfd ( dp ); 131 ià( fÞd”fd < 0) { 132 ”r = ”ºo ; 133 `”rÜ ("dœfd(): %s(%d)", `¡»¼Ü ( ”r ),ƒrr); 134  - ”r ; 143 ( • = `»addœ ( dp ))) { 144 * fž’ame ; 146 ià( • -> d_Çme [0] == '.') 149 fž’ame = `g_fž’ame_to_utf8 ( • -> d_Çme , -1, NULL , NULL, NULL); 150 ià( fž’ame =ð NULL ) { 151 `”rÜ ("g_filename_to_utf8: invalid filename"); 155 ià(! `g_¡r_has_suffix ( fž’ame , ".vcf")) { 156 `g_ä“ ( fž’ame ); 160 sÜ‹d = `g_¦i¡_š£¹_sÜ‹d (sÜ‹d, fž’ame , hªdË_cmp ); 167  l = `g_¦i¡_Áh ( sÜ‹d , off£t ); 168 l && n < maxli¡couÁ ;† =†-> Ãxt ) { 169 cÚ¡ * fž’ame = l -> d©a ; 171 fd = `Ý’© ( fÞd”fd , fž’ame , O_RDONLY ); 172 ià( fd < 0) { 173 ”r = ”ºo ; 174 `”rÜ ("Ý’©(%s): %s(%d)", fž’ame , `¡»¼Ü ( ”r ),ƒrr); 178 å = `fdÝ’ ( fd , "r"); 179 v = `P¬£_MIME_FromFže ( å ); 180 ià( v !ð NULL ) { 181 `func ( fž’ame , v , u£r_d©a ); 182 `d–‘eVObjeù ( v ); 183 n ++; 186 `þo£ ( fd ); 189 `g_¦i¡_ä“_fuÎ ( sÜ‹d , g_ä“ ); 191 ià( couÁ ) 192 * couÁ = n ; 195 } } 197  $’Œy_cÚÿt (cÚ¡ * fž’ame , VObjeù * v , * u£r_d©a ) 199 GSŒšg * bufãr = u£r_d©a ; 200  tmp [1024]; 201  Ën ; 207 Ën = ( tmp ); 208 `mem£t ( tmp , 0, Ën ); 210 `wr™eMemVObjeù ( tmp , & Ën , v ); 213 `g_¡ršg_­³nd_Ën ( bufãr , tmp , Ën ); 214 } } 216  gboÞ—n $»ad_dœ (* u£r_d©a ) 218  dummy_d©a * dummy = u£r_d©a ; 219 GSŒšg * bufãr ; 220 DIR * dp ; 221 ušt16_t couÁ = 0, max , off£t ; 223 bufãr = `g_¡ršg_Ãw (""); 225 dp = `Ý’dœ ( dummy -> fÞd” ); 226 ià( dp =ð NULL ) { 227  ”r = ”ºo ; 228 `DBG ("Ý’dœ(): %s(%d)", `¡»¼Ü ( ”r ),ƒrr); 229  dÚe ; 238 ià( dummy -> ­·¿ms -> maxli¡couÁ == 0) { 239 max = 0xffff; 240 off£t = 0; 242 max = dummy -> ­·¿ms -> maxli¡couÁ ; 243 off£t = dummy -> ­·¿ms -> li¡¡¬toff£t ; 246 `fÜ—ch_vÿrd ( dp , ’Œy_cÚÿt , off£t , max , bufãr , & couÁ ); 248 `þo£dœ ( dp ); 249 dÚe : 251 dummy -> `cb ( bufãr -> ¡r , bufãr-> Ën , couÁ , 0, TRUE , dummy-> u£r_d©a ); 253 `g_¡ršg_ä“ ( bufãr , TRUE ); 255  FALSE ; 256 } } 258  $’Œy_nÙify (cÚ¡ * fž’ame , VObjeù * v , * u£r_d©a ) 260  ÿche_qu”y * qu”y = u£r_d©a ; 261 VObjeù * ´Ý”ty , * sub´Ý”ty ; 262 GSŒšg * Çme ; 263 cÚ¡ * ‹l ; 264  hªdË ; 266 ´Ý”ty = `isAPrÝ”tyOf ( v , VCNamePrÝ ); 267 ià(! ´Ý”ty ) 270 ià( `ssÿnf ( fž’ame , "%lu.vcf", & hªdË ) != 1) 273 ià( hªdË > UINT32_MAX ) 278 Çme = `g_¡ršg_Ãw (""); 279 sub´Ý”ty = `isAPrÝ”tyOf ( ´Ý”ty , VCFamžyNamePrÝ ); 280 ià( sub´Ý”ty ) { 281 `g_¡ršg_­³nd ( Çme , 282 `çkeCSŒšg ( `vObjeùUSŒšgZV®ue ( sub´Ý”ty ))); 285 sub´Ý”ty = `isAPrÝ”tyOf ( ´Ý”ty , VCGiv’NamePrÝ ); 286 ià( sub´Ý”ty ) 287 `g_¡ršg_­³nd_´štf ( Çme , ";%s", 288 `çkeCSŒšg ( `vObjeùUSŒšgZV®ue ( sub´Ý”ty ))); 290 sub´Ý”ty = `isAPrÝ”tyOf ( ´Ý”ty , VCAdd™iÚ®NamesPrÝ ); 291 ià( sub´Ý”ty ) 292 `g_¡ršg_­³nd_´štf ( Çme , ";%s", 293 `çkeCSŒšg ( `vObjeùUSŒšgZV®ue ( sub´Ý”ty ))); 295 sub´Ý”ty = `isAPrÝ”tyOf ( ´Ý”ty , VCNameP»fixesPrÝ ); 296 ià( sub´Ý”ty ) 297 `g_¡ršg_­³nd_´štf ( Çme , ";%s", 298 `çkeCSŒšg ( `vObjeùUSŒšgZV®ue ( sub´Ý”ty ))); 301 sub´Ý”ty = `isAPrÝ”tyOf ( ´Ý”ty , VCNameSuffixesPrÝ ); 302 ià( sub´Ý”ty ) 303 `g_¡ršg_­³nd_´štf ( Çme , ";%s", 304 `çkeCSŒšg ( `vObjeùUSŒšgZV®ue ( sub´Ý”ty ))); 306 ´Ý”ty = `isAPrÝ”tyOf ( v , VCT–•hÚePrÝ ); 308 ‹l = ´Ý”ty ? `çkeCSŒšg ( `vObjeùUSŒšgZV®ue ÕrÝ”ty)è: NULL ; 310 qu”y -> `’Œy_cb ( fž’ame , hªdË , Çme -> ¡r , NULL , ‹l , 311 qu”y -> u£r_d©a ); 312 `g_¡ršg_ä“ ( Çme , TRUE ); 313 } } 315  gboÞ—n $ü—‹_ÿche (* u£r_d©a ) 317  ÿche_qu”y * qu”y = u£r_d©a ; 325 `fÜ—ch_vÿrd ( qu”y -> dp , ’Œy_nÙify , 0, 0xffff, qu”y, NULL ); 327 qu”y -> `»ady_cb (qu”y-> u£r_d©a ); 329  FALSE ; 330 } } 332  gboÞ—n $»ad_’Œy (* u£r_d©a ) 334  dummy_d©a * dummy = u£r_d©a ; 335  bufãr [1024]; 336 ssize_t couÁ ; 338 `mem£t ( bufãr , 0, (buffer)); 339 couÁ = `»ad ( dummy -> fd , bufãr , (buffer)); 341 ià( couÁ < 0) { 342  ”r = ”ºo ; 343 `”rÜ ("»ad(): %s(%d)", `¡»¼Ü ( ”r ),ƒrr); 344 couÁ = 0; 349 dummy -> `cb ( bufãr , couÁ , 1, 0, TRUE , dummy-> u£r_d©a ); 351  FALSE ; 352 } } 354  gboÞ—n $is_dœ (cÚ¡ * dœ ) 356  ¡© ¡ ; 358 ià( `¡© ( dœ , & ¡ ) < 0) { 359  ”r = ”ºo ; 360 `”rÜ ("¡©(%s): % (%d)", dœ , `¡»¼Ü ( ”r ),ƒrr); 361  FALSE ; 364  `S_ISDIR ( ¡ . ¡_mode ); 365 } } 367 * $phÚebook_£t_fÞd” (cÚ¡ * cu¼’t_fÞd” , 368 cÚ¡ * Ãw_fÞd” , ušt8_t æags , * ”r ) 370 gboÞ—n roÙ , chžd ; 371 * tmp1 , * tmp2 , * ba£ , * absÞu‹ , * »Ïtive = NULL ; 372  Ën , »t = 0; 374 roÙ = ( `g_¡rcmp0 ("/", cu¼’t_fÞd” ) == 0); 375 chžd = ( Ãw_fÞd” && `¡¾’ (new_folder) != 0); 377  æags ) { 380 ià(! chžd ) { 381 »Ïtive = `g_¡rdup ("/"); 382  dÚe ; 385 »Ïtive = `g_bužd_fž’ame ( cu¼’t_fÞd” , Ãw_fÞd” , NULL ); 389 ià( roÙ ) { 391 »t = - EBADR ; 392  dÚe ; 401 tmp1 = `g_·th_g‘_ba£Çme ( cu¼’t_fÞd” ); 402 tmp2 = `g_¡¼¡r ( cu¼’t_fÞd” , tmp1 ); 403 Ën = tmp2 - ( cu¼’t_fÞd” + 1); 405 `g_ä“ ( tmp1 ); 407 ià( Ën == 0) 408 ba£ = `g_¡rdup ("/"); 410 ba£ = `g_¡ºdup ( cu¼’t_fÞd” , Ën ); 413 ià(! chžd ) { 414 »Ïtive = ba£ ; 415  dÚe ; 418 »Ïtive = `g_bužd_fž’ame ( ba£ , Ãw_fÞd” , NULL ); 419 `g_ä“ ( ba£ ); 423 »t = - EBADR ; 427 dÚe : 428 ià(! »Ïtive ) { 429 ià( ”r ) 430 * ”r = »t ; 432  NULL ; 435 absÞu‹ = `g_bužd_fž’ame ( roÙ_fÞd” , »Ïtive , NULL ); 436 ià(! `is_dœ ( absÞu‹ )) { 437 `g_ä“ ( »Ïtive ); 438 »Ïtive = NULL ; 439 »t = - ENOENT ; 442 `g_ä“ ( absÞu‹ ); 444 ià( ”r ) 445 * ”r = »t ; 447  »Ïtive ; 448 } } 450  $phÚebook_»q_fš®ize (* »que¡ ) 452  dummy_d©a * dummy = »que¡ ; 456 ià( dummy && dummy-> id ) 457 `g_sourû_»move ( dummy -> id ); 458 } } 460 * $phÚebook_puÎ (cÚ¡ * Çme , cÚ¡  ­·¿m_f›ld * ·¿ms , 461 phÚebook_cb cb , * u£r_d©a , * ”r ) 463  dummy_d©a * dummy ; 464 * fž’ame , * fÞd” ; 472 fž’ame = `g_bužd_fž’ame ( roÙ_fÞd” , Çme , NULL ); 474 ià(! `g_¡r_has_suffix ( fž’ame , ".vcf")) { 475 `g_ä“ ( fž’ame ); 476 ià( ”r ) 477 * ”r = - EBADR ; 478  NULL ; 481 fÞd” = `g_¡ºdup ( fž’ame , `¡¾’ (filename) - 4); 482 `g_ä“ ( fž’ame ); 483 ià(! `is_dœ ( fÞd” )) { 484 `g_ä“ ( fÞd” ); 485 ià( ”r ) 486 * ”r = - ENOENT ; 487  NULL ; 490 dummy = `g_Ãw0 ( dummy_d©a , 1); 491 dummy -> cb = cb; 492 dummy -> u£r_d©a = user_data; 493 dummy -> ­·¿ms = ·¿ms ; 494 dummy -> fÞd” = folder; 495 dummy -> fd = -1; 497 ià( ”r ) 498 * ”r = 0; 500  dummy ; 501 } } 503  $phÚebook_puÎ_»ad (* »que¡ ) 505  dummy_d©a * dummy = »que¡ ; 507 ià(! dummy ) 508  - ENOENT ; 510 dummy -> id = `g_idË_add_fuÎ ( G_PRIORITY_DEFAULT_IDLE , »ad_dœ , dummy, 511 dummy_ä“ ); 514 } } 516 * $phÚebook_g‘_’Œy (cÚ¡ * fÞd” , cÚ¡ * id , 517 cÚ¡  ­·¿m_f›ld * ·¿ms , phÚebook_cb cb , 518 * u£r_d©a , * ”r ) 520  dummy_d©a * dummy ; 521 * fž’ame ; 522  fd ; 523 gušt »t ; 525 fž’ame = `g_bužd_fž’ame ( roÙ_fÞd” , fÞd” , id , NULL ); 527 fd = `Ý’ ( fž’ame , O_RDONLY ); 528 ià( fd < 0) { 529 `DBG ("Ý’(): %s(%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 530 ià( ”r ) 531 * ”r = - ENOENT ; 532  NULL ; 535 dummy = `g_Ãw0 ( dummy_d©a , 1); 536 dummy -> cb = cb; 537 dummy -> u£r_d©a = user_data; 538 dummy -> ­·¿ms = ·¿ms ; 539 dummy -> fd = fd; 541 »t = `g_idË_add_fuÎ ( G_PRIORITY_DEFAULT_IDLE , »ad_’Œy , dummy , 542 dummy_ä“ ); 544 ià( ”r ) 545 * ”r = 0; 547  `GINT_TO_POINTER ( »t ); 548 } } 550 * $phÚebook_ü—‹_ÿche (cÚ¡ * Çme , phÚebook_’Œy_cb ’Œy_cb , 551 phÚebook_ÿche_»ady_cb »ady_cb , * u£r_d©a , * ”r ) 553  ÿche_qu”y * qu”y ; 554 * fÞd”Çme ; 555 DIR * dp ; 556 gušt »t ; 558 fÞd”Çme = `g_bužd_fž’ame ( roÙ_fÞd” , Çme , NULL ); 559 dp = `Ý’dœ ( fÞd”Çme ); 560 `g_ä“ ( fÞd”Çme ); 562 ià( dp =ð NULL ) { 563 `DBG ("Ý’dœ(): %s(%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 564 ià( ”r ) 565 * ”r = - ENOENT ; 566  NULL ; 569 qu”y = `g_Ãw0 ( ÿche_qu”y , 1); 570 qu”y -> ’Œy_cb =ƒntry_cb; 571 qu”y -> »ady_cb =„eady_cb; 572 qu”y -> u£r_d©a = user_data; 573 qu”y -> dp = dp; 575 »t = `g_idË_add_fuÎ ( G_PRIORITY_DEFAULT_IDLE , ü—‹_ÿche , qu”y , 576 qu”y_ä“ ); 578 ià( ”r ) 579 * ”r = 0; 581  `GINT_TO_POINTER ( »t ); 582 } } @obexd/plugins/phonebook-ebook.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡ršg.h > 30  ~<”ºo.h > 31  ~ 32  ~ 34  ~ 36  ~"log.h " 37  ~"obex.h " 38  ~"£rviû.h " 39  ~"phÚebook.h " 41  #QUERY_FN "(cÚš \"çmžy_Çme\" \"%s\")" ) 42  #QUERY_NAME "(cÚš \"giv’_Çme\" \"%s\")" ) 43  #QUERY_PHONE "(cÚš \"phÚe\" \"%s\")" ) 45  squ”y_cÚ‹xt { 46 cÚ¡  ­·¿m_f›ld * m·¿ms ; 47 phÚebook_cb mcÚùs_cb ; 48 phÚebook_’Œy_cb m’Œy_cb ; 49 phÚebook_ÿche_»ady_cb m»ady_cb ; 50 EBookQu”y * mqu”y ; 51  mcouÁ ; 52 GSŒšg * mbuf ; 53 * mid ; 54  mqueued_ÿÎs ; 55 * mu£r_d©a ; 56 GSLi¡ * mebooks ; 57 gboÞ—n mÿnûËd ; 60 * g©Œibu‹_mask [] = { 90 NULL 94  $þo£_ebooks ( GSLi¡ * ebooks ) 96 `g_¦i¡_ä“_fuÎ ( ebooks , g_objeù_uÄef ); 97 } } 99  $ä“_qu”y_cÚ‹xt ( qu”y_cÚ‹xt * d©a ) 101 `g_ä“ ( d©a -> id ); 103 ià( d©a -> buf !ð NULL ) 104 `g_¡ršg_ä“ ( d©a -> buf , TRUE ); 106 ià( d©a -> qu”y !ð NULL ) 107 `e_book_qu”y_uÄef ( d©a -> qu”y ); 109 `þo£_ebooks ( d©a -> ebooks ); 111 `g_ä“ ( d©a ); 112 } } 114 * $evÿrd_to_¡ršg ( EVC¬d * evÿrd ,  fÜm© , 115 ušt64_t fž‹r ) 117 EVC¬d * evÿrd2 ; 118 GLi¡ * l ; 119 * vÿrd ; 121 ià(! fž‹r ) 122  `e_vÿrd_to_¡ršg ( evÿrd , EVC_FORMAT_VCARD_30 ); 129 fž‹r = fÜm© =ð EVC_FORMAT_VCARD_30 ? filter | 0x87: filter | 0x85; 131 l = `e_vÿrd_g‘_©Œibu‹s ( evÿrd ); 132 evÿrd2 = `e_vÿrd_Ãw (); 133 ; l ;† = `g_li¡_Ãxt (l)) { 134 EVC¬dA‰ribu‹ * ©Œib = l -> d©a ; 135 cÚ¡ * Çme ; 136  i ; 138 ià(! ©Œib ) 141 Çme = `e_vÿrd_©Œibu‹_g‘_Çme ( ©Œib ); 143  i = 0; ©Œibu‹_mask [i] !ð NULL ; i++) { 144 ià(!( fž‹r & (1 << i ))) 146 ià( `g_¡rcmp0 ( Çme , ©Œibu‹_mask [ i ]) != 0) 149 `e_vÿrd_add_©Œibu‹ ( evÿrd2 , 150 `e_vÿrd_©Œibu‹_cÝy ( ©Œib )); 154 vÿrd = `e_vÿrd_to_¡ršg ( evÿrd2 , fÜm© ); 155 `g_objeù_uÄef ( evÿrd2 ); 157  vÿrd ; 158 } } 160  $ebookpuÎ_cb ( EBook * book , cÚ¡ GE¼Ü * g”r , GLi¡ * cÚùs , 161 * u£r_d©a ) 163  qu”y_cÚ‹xt * d©a = u£r_d©a ; 164 GLi¡ * l ; 165  couÁ , maxcouÁ ; 167 d©a -> queued_ÿÎs --; 169 ià( d©a -> ÿnûËd ) 170  ÿnûËd ; 172 ià( g”r !ð NULL ) { 173 `”rÜ ("E-Book qu”y fažed: %s", g”r -> mes§ge ); 174  dÚe ; 177 `DBG (""); 184 maxcouÁ = d©a -> ·¿ms -> maxli¡couÁ ; 185 ià( maxcouÁ == 0) { 186 d©a -> couÁ +ð `g_li¡_Ëngth ( cÚùs ); 187  dÚe ; 190 l = `g_li¡_Áh ( cÚùs , d©a -> ·¿ms -> li¡¡¬toff£t ); 192  couÁ = 0; l && couÁ + d©a ->couÁ < maxcouÁ ;† = `g_li¡_Ãxt (l), 193 couÁ ++) { 194 ECÚù * cÚù = `E_CONTACT ( l -> d©a ); 195 EVC¬d * evÿrd = `E_VCARD ( cÚù ); 196 * vÿrd ; 198 vÿrd = `evÿrd_to_¡ršg ( evÿrd , EVC_FORMAT_VCARD_30 , 199 d©a -> ·¿ms -> fž‹r ); 201 d©a -> buf = `g_¡ršg_­³nd (d©a->buf, vÿrd ); 202 d©a -> buf = `g_¡ršg_­³nd (data->buf, "\r\n"); 203 `g_ä“ ( vÿrd ); 206 `DBG ("cÞËùed %d vÿrds", couÁ ); 208 d©a -> couÁ += count; 210 `g_li¡_ä“_fuÎ ( cÚùs , g_objeù_uÄef ); 212 dÚe : 213 ià( d©a -> queued_ÿÎs == 0) { 214 GSŒšg * buf = d©a ->buf; 215 d©a -> buf = NULL ; 217 d©a -> `cÚùs_cb ( buf -> ¡r , buf-> Ën , d©a-> couÁ , 218 0, TRUE , d©a -> u£r_d©a ); 220 `g_¡ršg_ä“ ( buf , TRUE ); 226 ÿnûËd : 227 ià( d©a -> queued_ÿÎs == 0) 228 `ä“_qu”y_cÚ‹xt ( d©a ); 229 } } 231  $ebook_’Œy_cb ( EBook * book , cÚ¡ GE¼Ü * g”r , 232 ECÚù * cÚù , * u£r_d©a ) 234  qu”y_cÚ‹xt * d©a = u£r_d©a ; 235 EVC¬d * evÿrd ; 236 * vÿrd ; 237 size_t Ën ; 239 d©a -> queued_ÿÎs --; 241 ià( d©a -> ÿnûËd ) 242  dÚe ; 244 ià( g”r !ð NULL ) { 245 `”rÜ ("E-Book qu”y fažed: %s", g”r -> mes§ge ); 246  dÚe ; 249 `DBG (""); 251 evÿrd = `E_VCARD ( cÚù ); 253 vÿrd = `evÿrd_to_¡ršg ( evÿrd , EVC_FORMAT_VCARD_30 , 254 d©a -> ·¿ms -> fž‹r ); 256 Ën = vÿrd ? `¡¾’ (vcard) : 0; 258 d©a -> couÁ ++; 259 d©a -> `cÚùs_cb ( vÿrd , Ën , 1, 0, TRUE , d©a-> u£r_d©a ); 261 `g_ä“ ( vÿrd ); 262 `g_objeù_uÄef ( cÚù ); 266 dÚe : 267 ià( d©a -> queued_ÿÎs == 0) { 268 ià( d©a -> couÁ == 0) 269 d©a -> `cÚùs_cb ( NULL , 0, 1, 0, TRUE , 270 d©a -> u£r_d©a ); 271 ià( d©a -> ÿnûËd ) 272 `ä“_qu”y_cÚ‹xt ( d©a ); 274 } } 276 * $evÿrd_Çme_©Œibu‹_to_¡ršg ( EVC¬d * evÿrd ) 278 EVC¬dA‰ribu‹ * ©Œib ; 279 GLi¡ * l ; 280 GSŒšg * Çme = NULL ; 282 ©Œib = `e_vÿrd_g‘_©Œibu‹ ( evÿrd , EVC_N ); 283 ià(! ©Œib ) 284  NULL ; 286  l = `e_vÿrd_©Œibu‹_g‘_v®ues ( ©Œib );†;† =†-> Ãxt ) { 287 cÚ¡ * v®ue = l -> d©a ; 289 ià(! `¡¾’ ( v®ue )) 292 ià(! Çme ) 293 Çme = `g_¡ršg_Ãw ( v®ue ); 295 Çme = `g_¡ršg_­³nd (name, ";"); 296 Çme = `g_¡ršg_­³nd Òame, l -> d©a ); 300 ià(! Çme ) 301  NULL ; 303  `g_¡ršg_ä“ ( Çme , FALSE ); 304 } } 306  $ÿche_cb ( EBook * book , cÚ¡ GE¼Ü * g”r , GLi¡ * cÚùs , 307 * u£r_d©a ) 309  qu”y_cÚ‹xt * d©a = u£r_d©a ; 310 GLi¡ * l ; 312 d©a -> queued_ÿÎs --; 314 ià( d©a -> ÿnûËd ) 315  ÿnûËd ; 317 ià( g”r !ð NULL ) { 318 `”rÜ ("E-Book o³¿tiÚ fažed: %s", g”r -> mes§ge ); 319  dÚe ; 322 `DBG (""); 324  l = cÚùs ;†;† = `g_li¡_Ãxt (l)) { 325 ECÚù * cÚù = `E_CONTACT ( l -> d©a ); 326 EVC¬d * evÿrd = `E_VCARD ( cÚù ); 327 EVC¬dA‰ribu‹ * ©Œib ; 328 * uid , * ‹l , * Çme ; 330 Çme = `evÿrd_Çme_©Œibu‹_to_¡ršg ( evÿrd ); 331 ià(! Çme ) 334 ©Œib = `e_vÿrd_g‘_©Œibu‹ ( evÿrd , EVC_UID ); 335 ià(! ©Œib ) 338 uid = `e_vÿrd_©Œibu‹_g‘_v®ue ( ©Œib ); 339 ià(! uid ) 342 ©Œib = `e_vÿrd_g‘_©Œibu‹ ( evÿrd , EVC_TEL ); 343 ià( ©Œib ) 344 ‹l = `e_vÿrd_©Œibu‹_g‘_v®ue ( ©Œib ); 346 ‹l = `g_¡rdup (""); 348 d©a -> `’Œy_cb ( uid , PHONEBOOK_INVALID_HANDLE , Çme , NULL , 349 ‹l , d©a -> u£r_d©a ); 351 `g_ä“ ( Çme ); 352 `g_ä“ ( uid ); 353 `g_ä“ ( ‹l ); 356 `g_li¡_ä“_fuÎ ( cÚùs , g_objeù_uÄef ); 358 dÚe : 359 ià( d©a -> queued_ÿÎs == 0) 360 d©a -> `»ady_cb (d©a-> u£r_d©a ); 364 ÿnûËd : 365 ià( d©a -> queued_ÿÎs == 0) 366 `ä“_qu”y_cÚ‹xt ( d©a ); 367 } } 369  GSLi¡ * $Œav”£_sourûs ( GSLi¡ * ebooks , GSLi¡ * sourûs , 370 ** deçuÉ_¤c ) { 371 GE¼Ü * g”r = NULL ; 373 ; sourûs !ð NULL ; sourû ð `g_¦i¡_Ãxt (sources)) { 374 * uri ; 375 ESourû * sourû = `E_SOURCE ( sourûs -> d©a ); 376 EBook * ebook = `e_book_Ãw ( sourû , & g”r ); 378 ià( ebook =ð NULL ) { 379 `”rÜ ("Can't create user's‡ddress book: %s", 380 g”r -> mes§ge ); 381 `g_þ—r_”rÜ (& g”r ); 385 uri = `e_sourû_g‘_uri ( sourû ); 386 ià( `g_¡rcmp0 (* deçuÉ_¤c , uri ) == 0) { 387 `g_ä“ ( uri ); 390 `g_ä“ ( uri ); 392 ià( `e_book_Ý’ ( ebook , FALSE , & g”r ) == FALSE) { 393 `”rÜ ("Can't openƒ-book‡ddress book: %s", 394 g”r -> mes§ge ); 395 `g_objeù_uÄef ( ebook ); 396 `g_þ—r_”rÜ (& g”r ); 400 ià(* deçuÉ_¤c =ð NULL ) 401 * deçuÉ_¤c = `e_sourû_g‘_uri ( sourû ); 403 `DBG ("% add»s book o³Ãd", `e_sourû_³ek_Çme ( sourû )); 405 ebooks = `g_¦i¡_­³nd Óbooks, ebook ); 408  ebooks ; 409 } } 411  $phÚebook_š™ () 413 `g_ty³_š™ (); 416 } } 418  GSLi¡ * $Ý’_ebooks () 420 GE¼Ü * g”r = NULL ; 421 ESourûLi¡ * ¤c_li¡ ; 422 GSLi¡ * li¡ ; 423 * deçuÉ_¤c = NULL ; 424 GSLi¡ * ebooks = NULL ; 426 ià( `e_book_g‘_add»ssbooks (& ¤c_li¡ , & g”r è=ð FALSE ) { 427 `”rÜ ("Cª'ˆli¡ u£r' add»s books: %s", g”r -> mes§ge ); 428 `g_”rÜ_ä“ ( g”r ); 429  NULL ; 432 li¡ = `e_sourû_li¡_³ek_groups ( ¤c_li¡ ); 433  li¡ !ð NULL ) { 434 ESourûGroup * group = `E_SOURCE_GROUP ( li¡ -> d©a ); 435 GSLi¡ * sourûs = `e_sourû_group_³ek_sourûs ( group ); 437 ebooks = `Œav”£_sourûs Óbooks, sourûs , & deçuÉ_¤c ); 439 li¡ =†i¡-> Ãxt ; 442 `g_ä“ ( deçuÉ_¤c ); 443 `g_objeù_uÄef ( ¤c_li¡ ); 445  ebooks ; 446 } } 448  $phÚebook_ex™ () 450 } } 452 * $phÚebook_£t_fÞd” (cÚ¡ * cu¼’t_fÞd” , 453 cÚ¡ * Ãw_fÞd” , ušt8_t æags , * ”r ) 455 gboÞ—n roÙ , chžd ; 456 * fuÎÇme = NULL , * tmp1 , * tmp2 , * ba£ ; 457  »t = 0, Ën ; 459 roÙ = ( `g_¡rcmp0 ("/", cu¼’t_fÞd” ) == 0); 460 chžd = ( Ãw_fÞd” && `¡¾’ (new_folder) != 0); 464  æags ) { 467 ià(! chžd ) { 468 fuÎÇme = `g_¡rdup ("/"); 469  dÚe ; 473 fuÎÇme = `g_bužd_fž’ame ( cu¼’t_fÞd” , Ãw_fÞd” , NULL ); 474 ià( `¡rcmp ( PB_TELECOM_FOLDER , fuÎÇme ) != 0 && 475 `¡rcmp ( PB_CONTACTS_FOLDER , fuÎÇme ) != 0) { 476 `g_ä“ ( fuÎÇme ); 477 fuÎÇme = NULL ; 478 »t = - ENOENT ; 484 ià( roÙ ) { 486 »t = - EBADR ; 487  dÚe ; 496 tmp1 = `g_·th_g‘_ba£Çme ( cu¼’t_fÞd” ); 497 tmp2 = `g_¡¼¡r ( cu¼’t_fÞd” , tmp1 ); 498 Ën = tmp2 - ( cu¼’t_fÞd” + 1); 500 `g_ä“ ( tmp1 ); 502 ià( Ën == 0) 503 ba£ = `g_¡rdup ("/"); 505 ba£ = `g_¡ºdup ( cu¼’t_fÞd” , Ën ); 508 ià(! chžd ) { 509 fuÎÇme = ba£ ; 510  dÚe ; 513 fuÎÇme = `g_bužd_fž’ame ( ba£ , Ãw_fÞd” , NULL ); 514 ià( `¡rcmp ( fuÎÇme , PB_TELECOM_FOLDER ) != 0 && 515 `¡rcmp ( fuÎÇme , PB_CONTACTS_FOLDER ) != 0) { 516 `g_ä“ ( fuÎÇme ); 517 fuÎÇme = NULL ; 518 »t = - ENOENT ; 521 `g_ä“ ( ba£ ); 525 »t = - EBADR ; 529 dÚe : 530 ià( ”r ) 531 * ”r = »t ; 533  fuÎÇme ; 534 } } 536  $phÚebook_»q_fš®ize (* »que¡ ) 538  qu”y_cÚ‹xt * d©a = »que¡ ; 540 ià( d©a -> queued_ÿÎs == 0) 541 `ä“_qu”y_cÚ‹xt ( d©a ); 543 d©a -> ÿnûËd = TRUE ; 544 } } 546 * $phÚebook_puÎ (cÚ¡ * Çme , cÚ¡  ­·¿m_f›ld * ·¿ms , 547 phÚebook_cb cb , * u£r_d©a , * ”r ) 549  qu”y_cÚ‹xt * d©a ; 551 ià( `g_¡rcmp0 ( PB_CONTACTS , Çme ) != 0) { 552 ià( ”r ) 553 * ”r = - ENOENT ; 555  NULL ; 558 d©a = `g_Ãw0 ( qu”y_cÚ‹xt , 1); 559 d©a -> cÚùs_cb = cb ; 560 d©a -> ·¿ms =…arams; 561 d©a -> u£r_d©a = user_data; 562 d©a -> buf = `g_¡ršg_Ãw (""); 563 d©a -> qu”y = `e_book_qu”y_ªy_f›ld_cÚšs (""); 564 d©a -> ebooks = `Ý’_ebooks (); 566 ià( ”r ) 567 * ”r = d©a -> ebooks =ð NULL ? - EIO : 0; 569  d©a ; 570 } } 572  $phÚebook_puÎ_»ad (* »que¡ ) 574  qu”y_cÚ‹xt * d©a = »que¡ ; 575 GSLi¡ * l ; 577 ià(! d©a ) 578  - ENOENT ; 580  l = d©a -> ebooks ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 581 EBook * ebook = l -> d©a ; 583 ià( `e_book_is_Ý’ed ( ebook è=ð FALSE ) 586 ià( `e_book_g‘_cÚùs_async ( ebook , d©a -> qu”y , 587 ebookpuÎ_cb , d©a è=ð TRUE ) 588 d©a -> queued_ÿÎs ++; 591 ià( d©a -> queued_ÿÎs == 0) 592  - ENOENT ; 595 } } 597 * $phÚebook_g‘_’Œy (cÚ¡ * fÞd” , cÚ¡ * id , 598 cÚ¡  ­·¿m_f›ld * ·¿ms , 599 phÚebook_cb cb , * u£r_d©a , * ”r ) 601  qu”y_cÚ‹xt * d©a ; 602 GSLi¡ * l ; 604 d©a = `g_Ãw0 ( qu”y_cÚ‹xt , 1); 605 d©a -> cÚùs_cb = cb ; 606 d©a -> ·¿ms =…arams; 607 d©a -> u£r_d©a = user_data; 608 d©a -> id = `g_¡rdup (id); 609 d©a -> ebooks = `Ý’_ebooks (); 611  l = d©a -> ebooks ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 612 EBook * ebook = l -> d©a ; 614 ià( `e_book_is_Ý’ed ( ebook è=ð FALSE ) 617 ià( `e_book_g‘_cÚù_async ( ebook , d©a -> id , 618 ebook_’Œy_cb , d©a è=ð TRUE ) 619 d©a -> queued_ÿÎs ++; 622 ià( ”r ) 623 * ”r = ( d©a -> queued_ÿÎs =ð0 ? - ENOENT : 0); 625  d©a ; 626 } } 628 * $phÚebook_ü—‹_ÿche (cÚ¡ * Çme , phÚebook_’Œy_cb ’Œy_cb , 629 phÚebook_ÿche_»ady_cb »ady_cb , * u£r_d©a , * ”r ) 631  qu”y_cÚ‹xt * d©a ; 632 EBookQu”y * qu”y ; 633 GSLi¡ * l ; 634 ECÚù * me ; 635 EVC¬d * evÿrd ; 636 GE¼Ü * g”r = NULL ; 637 EBook * eb ; 638 EVC¬dA‰ribu‹ * ©Œib ; 639 * uid , * ‹l , * úame ; 641 ià( `g_¡rcmp0 ( PB_CONTACTS_FOLDER , Çme ) != 0) { 642 ià( ”r ) 643 * ”r = - ENOENT ; 645  NULL ; 648 `DBG (""); 650 qu”y = `e_book_qu”y_ªy_f›ld_cÚšs (""); 652 d©a = `g_Ãw0 ( qu”y_cÚ‹xt , 1); 653 d©a -> ’Œy_cb =ƒntry_cb; 654 d©a -> »ady_cb =„eady_cb; 655 d©a -> u£r_d©a = user_data; 656 d©a -> qu”y = query; 657 d©a -> ebooks = `Ý’_ebooks (); 660 ià( `e_book_g‘_£lf (& me , & eb , & g”r è=ð FALSE ) { 661 `g_”rÜ_ä“ ( g”r ); 662  Ãxt ; 665 evÿrd = `E_VCARD ( me ); 667 úame = `evÿrd_Çme_©Œibu‹_to_¡ršg ( evÿrd ); 668 ià(! úame ) 669 úame = `g_¡rdup (""); 671 ©Œib = `e_vÿrd_g‘_©Œibu‹ ( evÿrd , EVC_UID ); 672 uid = `e_vÿrd_©Œibu‹_g‘_v®ue ( ©Œib ); 673 ià(! uid ) 674 uid = `g_¡rdup (""); 676 ©Œib = `e_vÿrd_g‘_©Œibu‹ ( evÿrd , EVC_TEL ); 677 ià( ©Œib ) 678 ‹l = `e_vÿrd_©Œibu‹_g‘_v®ue ( ©Œib ); 680 ‹l = `g_¡rdup (""); 682 d©a -> `’Œy_cb ( uid , 0, úame , NULL , ‹l , d©a-> u£r_d©a ); 684 d©a -> couÁ ++; 686 `g_ä“ ( úame ); 687 `g_ä“ ( uid ); 688 `g_ä“ ( ‹l ); 689 `g_objeù_uÄef ( eb ); 691 Ãxt : 692  l = d©a -> ebooks ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 693 EBook * ebook = l -> d©a ; 695 ià( `e_book_is_Ý’ed ( ebook è=ð FALSE ) 698 ià( `e_book_g‘_cÚùs_async ( ebook , qu”y , 699 ÿche_cb , d©a è=ð TRUE ) 700 d©a -> queued_ÿÎs ++; 703 ià( ”r ) 704 * ”r = ( d©a -> queued_ÿÎs =ð0 ? - ENOENT : 0); 706  d©a ; 707 } } @obexd/plugins/phonebook-tizen.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~ 30  ~<”ºo.h > 31  ~<¡dio.h > 32  ~<¡dšt.h > 33  ~<¡ršg.h > 34  ~<¡d¬g.h > 35  ~ 36  ~<¡dlib.h > 37  ~ 38  ~ 39  ~ 40  ~ 42  ~"log.h " 43  ~"phÚebook.h " 45  ~ 46  ~ 48  #PHONEBOOK_DESTINATION "Üg.bluez.pb_ag’t" ) 49  #PHONEBOOK_PATH "/Üg/bluez/pb_ag’t" ) 50  #PHONEBOOK_INTERFACE "Üg.bluez.PbAg’t" ) 52  #QUERY_GET_PHONEBOOK_FOLDER_LIST "G‘PhÚebookFÞd”Li¡" ) 53  #QUERY_GET_PHONEBOOK_SIZE "G‘PhÚebookSize" ) 54  #QUERY_GET_PHONEBOOK "G‘PhÚebook" ) 55  #QUERY_GET_PHONEBOOK_LIST "G‘PhÚebookLi¡" ) 56  #QUERY_GET_PHONEBOOK_ENTRY "G‘PhÚebookEÁry" ) 57  #QUERY_DESTROY_AGENT "De¡royAg’t" ) 59  GPŒA¼ay * gfÞd”_li¡ = NULL ; 61  sphÚebook_d©a { 62 phÚebook_cb mcb ; 63 DBusP’dšgC®lNÙifyFunùiÚ m»¶y_cb ; 64 DBusP’dšgC®l * mÿÎ ; 65 * mu£r_d©a ; 66 cÚ¡  ­·¿m_f›ld * m·¿ms ; 68 phÚebook_’Œy_cb m’Œy_cb ; 69 phÚebook_ÿche_»ady_cb m»ady_cb ; 71 * m»q_Çme ; 74  sphÚebook_£ssiÚ { 75 DBusCÚÃùiÚ * mcÚÃùiÚ ; 76 phÚebook_ÿche_þ—r_cb mþ—r_cb ; 77  mþ—r_id ; 79 * mu£r_d©a ; 82  gboÞ—n $fÞd”_is_v®id (cÚ¡ gch¬ * fÞd” , 83 gboÞ—n Ëaf_Úly ) 85  i ; 86  fÞd”_Ën ; 88 ià( fÞd”_li¡ =ð NULL || fÞd” == NULL) 89  FALSE ; 91 fÞd”_Ën = `¡¾’ ( fÞd” ); 93  i = 0 ; i < fÞd”_li¡ -> Ën ; i++) { 94 * ¡r = (*) `g_±r_¬¿y_šdex ( fÞd”_li¡ , i ); 96 ià( fÞd”_Ën > `¡¾’ ( ¡r )) 99 ià( `g_¡rcmp0 ( ¡r , fÞd” ) == 0) 100  TRUE ; 102 ià( Ëaf_Úly =ð TRUE ) 105 ià( `¡ºcmp ( ¡r , fÞd” , fÞd”_Ën ) == 0) { 107 ià(*( fÞd” + fÞd”_Ën - 1) == '/') 108  TRUE ; 110 ià(*( ¡r + fÞd”_Ën ) == '/') 111  TRUE ; 115  FALSE ; 116 } } 118  DBusP’dšgC®l * $phÚebook_»que¡ ( phÚebook_d©a * d©a , 119 cÚ¡ gch¬ * m‘hod , 120 DBusP’dšgC®lNÙifyFunùiÚ funùiÚ , 121  fœ¡_¬g_ty³ , 124 DBusCÚÃùiÚ * cÚÃùiÚ ; 125 DBusP’dšgC®l * ÿÎ ; 126 DBusMes§ge * mes§ge ; 128 va_li¡ ¬gs ; 130 `DBG ("%s\n", m‘hod ); 132 ià(! m‘hod ) { 133 `”rÜ ("Can't get method‚ame"); 134  NULL ; 137 cÚÃùiÚ = `g_dbus_£tup_bus ( DBUS_BUS_SYSTEM , NULL , NULL); 138 ià(! cÚÃùiÚ ) { 139 `”rÜ ("Can't get on session bus"); 140  NULL ; 143 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( PHONEBOOK_DESTINATION , 144 PHONEBOOK_PATH , 145 PHONEBOOK_INTERFACE , 146 m‘hod ); 147 ià(! mes§ge ) { 148 `dbus_cÚÃùiÚ_uÄef ( cÚÃùiÚ ); 149 `”rÜ ("Can't Allocate‚ew message"); 150  NULL ; 153 `va_¡¬t ( ¬gs , fœ¡_¬g_ty³ ); 154 `dbus_mes§ge_­³nd_¬gs_v®i¡ ( mes§ge , fœ¡_¬g_ty³ , ¬gs ); 155 `va_’d ( ¬gs ); 157 ià( `dbus_cÚÃùiÚ_£nd_w™h_»¶y ( cÚÃùiÚ , mes§ge , & ÿÎ , -1è=ð FALSE ) { 158 `dbus_mes§ge_uÄef ( mes§ge ); 159 `dbus_cÚÃùiÚ_uÄef ( cÚÃùiÚ ); 160 `DBG ("-"); 161  NULL ; 163 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , funùiÚ , d©a , NULL ); 165 `dbus_mes§ge_uÄef ( mes§ge ); 166 `dbus_cÚÃùiÚ_uÄef ( cÚÃùiÚ ); 168 `DBG ("-"); 169  ÿÎ ; 170 } } 172  $g‘_phÚebook_size_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 174 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 175  phÚebook_d©a * s_d©a = u£r_d©a ; 176 DBusE¼Ü d”r ; 177 ušt32_t phÚebook_size ; 179  Ãw_mis£d_ÿÎ = 0; 181 `DBG (""); 182 `dbus_³ndšg_ÿÎ_uÄef ( s_d©a -> ÿÎ ); 183 s_d©a -> ÿÎ = NULL ; 185 ià(! »¶y ) { 186 `DBG ("Reply Error\n"); 190 `dbus_”rÜ_š™ (& d”r ); 191 ià( `dbus_£t_”rÜ_äom_mes§ge (& d”r , »¶y )) { 192 `”rÜ ("R•l›d w™h‡À”rÜ: %s, %s", d”r . Çme , d”r. mes§ge ); 193 `dbus_”rÜ_ä“ (& d”r ); 194 phÚebook_size = 0; 196 `dbus_mes§ge_g‘_¬gs ( »¶y , NULL , 197 DBUS_TYPE_UINT32 , & phÚebook_size , 198 DBUS_TYPE_UINT32 , & Ãw_mis£d_ÿÎ , 199 DBUS_TYPE_INVALID ); 200 `DBG ("phÚebooksize:%d\n", phÚebook_size ); 203 s_d©a -> `cb ( NULL , 0, phÚebook_size , Ãw_mis£d_ÿÎ , TRUE , s_d©a-> u£r_d©a ); 205 `dbus_mes§ge_uÄef ( »¶y ); 206 } } 208  $g‘_phÚebook_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 210 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 211  phÚebook_d©a * s_d©a = u£r_d©a ; 212 DBusE¼Ü d”r ; 213 GSŒšg * bufãr ; 215  Ãw_mis£d_ÿÎ = 0; 217 ušt32_t couÁ = 0; 219 `DBG (""); 220 `dbus_³ndšg_ÿÎ_uÄef ( s_d©a -> ÿÎ ); 221 s_d©a -> ÿÎ = NULL ; 223 ià(! »¶y ) { 224 `DBG ("Reply Error\n"); 228 bufãr = `g_¡ršg_Ãw (""); 230 `dbus_”rÜ_š™ (& d”r ); 231 ià( `dbus_£t_”rÜ_äom_mes§ge (& d”r , »¶y )) { 232 `”rÜ ("R•l›d w™h‡À”rÜ: %s, %s", d”r . Çme , d”r. mes§ge ); 233 `dbus_”rÜ_ä“ (& d”r ); 235 DBusMes§geI‹r ™” ; 237 `dbus_mes§ge_™”_š™ ( »¶y , & ™” ); 239 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è=ð DBUS_TYPE_ARRAY ) { 240 DBusMes§geI‹r »cur£_™” ; 242 `dbus_mes§ge_™”_»cur£ (& ™” , & »cur£_™” ); 243  `dbus_mes§ge_™”_g‘_¬g_ty³ (& »cur£_™” è=ð DBUS_TYPE_STRING ) { 244 gch¬ * ¡r ; 246 `dbus_mes§ge_™”_g‘_basic (& »cur£_™” , & ¡r ); 247 `dbus_mes§ge_™”_Ãxt (& »cur£_™” ); 249 `g_¡ršg_­³nd ( bufãr , ¡r ); 251 `DBG ("¡r:\n%s\n", ¡r ); 253 couÁ ++; 255 `dbus_mes§ge_™”_Ãxt (& ™” ); 258 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è=ð DBUS_TYPE_UINT32 ) 259 `dbus_mes§ge_™”_g‘_basic (& ™” , & Ãw_mis£d_ÿÎ ); 261 `DBG ("Ãw_mis£d_ÿÎ %d\n", Ãw_mis£d_ÿÎ ); 264 s_d©a -> `cb ( bufãr -> ¡r , bufãr-> Ën , couÁ , Ãw_mis£d_ÿÎ , 1, s_d©a-> u£r_d©a ); 266 `g_¡ršg_ä“ ( bufãr , TRUE ); 267 `dbus_mes§ge_uÄef ( »¶y ); 268 } } 271  $g‘_phÚebook_li¡_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 273 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 274 DBusMes§geI‹r ™” , ™”_¡ruù , ’Œy ; 275  phÚebook_d©a * d©a = u£r_d©a ; 276 DBusE¼Ü d”r ; 277 ušt32_t hªdË = 0; 278 cÚ¡ * Çme = NULL ; 279 cÚ¡ * ‹l = NULL ; 280  id [10]; 281  Ãw_mis£d_ÿÎ = 0; 283 `dbus_³ndšg_ÿÎ_uÄef ( d©a -> ÿÎ ); 284 d©a -> ÿÎ = NULL ; 285 ià(! »¶y ) { 286 `DBG ("Reply Error\n"); 290 `dbus_”rÜ_š™ (& d”r ); 291 ià( `dbus_£t_”rÜ_äom_mes§ge (& d”r , »¶y )) { 292 `”rÜ ("R•l›d w™h‡À”rÜ: %s, %s", d”r . Çme , d”r. mes§ge ); 293 `dbus_”rÜ_ä“ (& d”r ); 296 `dbus_mes§ge_™”_š™ ( »¶y , & ™” ); 298 `dbus_mes§ge_™”_»cur£ (& ™” , & ™”_¡ruù ); 300  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™”_¡ruù ) == 301 DBUS_TYPE_STRUCT ) { 302 `dbus_mes§ge_™”_»cur£ (& ™”_¡ruù , & ’Œy ); 304 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & Çme ); 305 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 306 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & ‹l ); 307 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 308 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & hªdË ); 314 `¢´štf ( id , (id), "%d.vcf", hªdË ); 316 d©a -> `’Œy_cb ( id , hªdË , Çme , NULL , ‹l , 317 d©a -> u£r_d©a ); 319 `dbus_mes§ge_™”_Ãxt (& ™”_¡ruù ); 322 `dbus_mes§ge_™”_Ãxt (& ™” ); 323 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è=ð DBUS_TYPE_UINT32 ) { 324 `dbus_mes§ge_™”_g‘_basic (& ™” , & Ãw_mis£d_ÿÎ ); 327 `DBG ("Ãw_mis£d_ÿÎ %d\n", Ãw_mis£d_ÿÎ ); 329 #ifdeà __TIZEN_PATCH__ 330 d©a -> `»ady_cb (d©a-> u£r_d©a , Ãw_mis£d_ÿÎ ); 332 d©a -> `»ady_cb (d©a-> u£r_d©a ); 335 `dbus_mes§ge_uÄef ( »¶y ); 336 } } 338  $g‘_phÚebook_’Œy_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 340 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 341  phÚebook_d©a * s_d©a = u£r_d©a ; 342 DBusE¼Ü d”r ; 343 cÚ¡ * phÚebook_’Œy ; 345 `DBG (""); 346 `dbus_³ndšg_ÿÎ_uÄef ( s_d©a -> ÿÎ ); 347 s_d©a -> ÿÎ = NULL ; 349 ià(! »¶y ) { 350 `DBG ("Reply Error\n"); 354 `dbus_”rÜ_š™ (& d”r ); 355 ià( `dbus_£t_”rÜ_äom_mes§ge (& d”r , »¶y )) { 356 `”rÜ ("R•l›d w™h‡À”rÜ: %s, %s", d”r . Çme , d”r. mes§ge ); 357 `dbus_”rÜ_ä“ (& d”r ); 359 `dbus_mes§ge_g‘_¬gs ( »¶y , NULL , DBUS_TYPE_STRING , 360 & phÚebook_’Œy , DBUS_TYPE_INVALID ); 361 `DBG ("phÚebook_’Œy:[%s]\n", phÚebook_’Œy ); 364 s_d©a -> `cb ( phÚebook_’Œy , `¡¾’ ÕhÚebook_’Œy), 1, 0, TRUE , 365 s_d©a -> u£r_d©a ); 367 `dbus_mes§ge_uÄef ( »¶y ); 368 } } 370  gboÞ—n $þ—r_sigÇl ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 371 * u£r_d©a ) 373  phÚebook_£ssiÚ * £ssiÚ ; 375 ià( u£r_d©a =ð NULL ) 376  FALSE ; 378 `DBG (""); 379 £ssiÚ = u£r_d©a ; 381 £ssiÚ -> `þ—r_cb (£ssiÚ-> u£r_d©a ); 383 `g_dbus_»move_w©ch ( £ssiÚ -> cÚÃùiÚ , sessiÚ-> þ—r_id ); 384 £ssiÚ -> þ—r_id = 0; 386  TRUE ; 387 } } 389  gboÞ—n $phÚebook_fÞd”_li¡_š™ ( phÚebook_£ssiÚ * £ssiÚ ) 391 DBusMes§ge * mes§ge ; 392 DBusMes§ge * »¶y ; 394 DBusMes§geI‹r ™” ; 395 DBusMes§geI‹r »cur£_™” ; 397 DBusE¼Ü ”rÜ ; 399 ià( £ssiÚ -> cÚÃùiÚ =ð NULL ) { 400 £ssiÚ -> cÚÃùiÚ = `g_dbus_£tup_bus ( DBUS_BUS_SYSTEM , 401 NULL , NULL); 404 ià( £ssiÚ -> cÚÃùiÚ =ð NULL ) { 405 `DBG ("Can't get on s bus"); 406  FALSE ; 409 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( PHONEBOOK_DESTINATION , 410 PHONEBOOK_PATH , 411 PHONEBOOK_INTERFACE , 412 QUERY_GET_PHONEBOOK_FOLDER_LIST ); 414 ià( mes§ge =ð NULL ) { 415 `DBG ("Can't‡llocate dbus message"); 416  FALSE ; 419 `dbus_”rÜ_š™ (& ”rÜ ); 421 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( £ssiÚ -> cÚÃùiÚ , 422 mes§ge , -1, & ”rÜ ); 424 ià(! »¶y ) { 425 ià( `dbus_”rÜ_is_£t (& ”rÜ è=ð TRUE ) { 426 `DBG ("%s", ”rÜ . mes§ge ); 427 `dbus_”rÜ_ä“ (& ”rÜ ); 429 `DBG ("Failedo get contacts"); 431 `dbus_mes§ge_uÄef ( mes§ge ); 432  FALSE ; 435 `dbus_mes§ge_™”_š™ ( »¶y , & ™” ); 437 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_ARRAY ) { 438 `dbus_mes§ge_uÄef ( mes§ge ); 439 `dbus_mes§ge_uÄef ( »¶y ); 440  FALSE ; 443 ià( fÞd”_li¡ ) { 444 `g_±r_¬¿y_ä“ ( fÞd”_li¡ , TRUE ); 445 fÞd”_li¡ = NULL ; 448 fÞd”_li¡ = `g_±r_¬¿y_Ãw (); 450 `dbus_mes§ge_™”_»cur£ (& ™” , & »cur£_™” ); 452  `dbus_mes§ge_™”_g‘_¬g_ty³ (& »cur£_™” ) 453 =ð DBUS_TYPE_STRING ) { 454 gch¬ * ¡r ; 456 `dbus_mes§ge_™”_g‘_basic (& »cur£_™” , & ¡r ); 457 `DBG ("fÞd”†i¡ %s\n", ¡r ); 458 `g_±r_¬¿y_add ( fÞd”_li¡ , `g_¡rdup ( ¡r )); 460 `dbus_mes§ge_™”_Ãxt (& »cur£_™” ); 463 `dbus_mes§ge_uÄef ( mes§ge ); 464 `dbus_mes§ge_uÄef ( »¶y ); 465  TRUE ; 466 } } 468  $phÚebook_š™ () 471 } } 473  $phÚebook_ex™ () 475 } } 477  $phÚebook_cÚÃù (** u£r_d©a ) 479  phÚebook_£ssiÚ * £ssiÚ ; 480 gboÞ—n »t ; 482 `DBG (""); 484 £ssiÚ = `g_Ãw0 ( phÚebook_£ssiÚ , 1); 486 * u£r_d©a = £ssiÚ ; 488 »t = `phÚebook_fÞd”_li¡_š™ ( £ssiÚ ); 490 ià( »t ) 494 } } 496  $phÚebook_discÚÃù (* u£r_d©a ) 498  phÚebook_£ssiÚ * £ssiÚ ; 499 DBusMes§ge * mes§ge ; 500 `DBG (""); 501 £ssiÚ = u£r_d©a ; 503 ià( fÞd”_li¡ ) { 504 `g_±r_¬¿y_ä“ ( fÞd”_li¡ , TRUE ); 505 fÞd”_li¡ = NULL ; 508 ià(! £ssiÚ -> cÚÃùiÚ ) { 509 `g_ä“ ( £ssiÚ ); 514 ià( £ssiÚ -> þ—r_id ) 515 `g_dbus_»move_w©ch ( £ssiÚ -> cÚÃùiÚ , sessiÚ-> þ—r_id ); 517 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( PHONEBOOK_DESTINATION , 518 PHONEBOOK_PATH , 519 PHONEBOOK_INTERFACE , 520 QUERY_DESTROY_AGENT ); 522 ià( mes§ge ) { 523 ià( `dbus_cÚÃùiÚ_£nd ( £ssiÚ -> cÚÃùiÚ , mes§ge , 524 NULL è=ð FALSE ) 525 `”rÜ ("Could‚ot send dbus message"); 527 `dbus_mes§ge_uÄef ( mes§ge ); 530 `dbus_cÚÃùiÚ_uÄef ( £ssiÚ -> cÚÃùiÚ ); 531 `g_ä“ ( £ssiÚ ); 532 } } 534 * $phÚebook_£t_fÞd” (cÚ¡ * cu¼’t_fÞd” , 535 cÚ¡ * Ãw_fÞd” , ušt8_t æags , * ”r ) 537 * tmp1 , * tmp2 , * ba£ , * ·th = NULL ; 538 gboÞ—n roÙ , chžd ; 539  »t = 0; 540  Ën ; 542 roÙ = ( `g_¡rcmp0 ("/", cu¼’t_fÞd” ) == 0); 543 chžd = ( Ãw_fÞd” && `¡¾’ (new_folder) != 0); 545  æags ) { 548 ià(! chžd ) { 549 ·th = `g_¡rdup ("/"); 550  dÚe ; 553 ·th = `g_bužd_fž’ame ( cu¼’t_fÞd” , Ãw_fÞd” , NULL ); 557 ià( roÙ ) { 559 ·th = `g_¡rdup ("/"); 560  dÚe ; 569 tmp1 = `g_·th_g‘_ba£Çme ( cu¼’t_fÞd” ); 570 tmp2 = `g_¡¼¡r ( cu¼’t_fÞd” , tmp1 ); 571 Ën = tmp2 - ( cu¼’t_fÞd” + 1); 573 `g_ä“ ( tmp1 ); 575 ià( Ën == 0) 576 ba£ = `g_¡rdup ("/"); 578 ba£ = `g_¡ºdup ( cu¼’t_fÞd” , Ën ); 581 ià(! chžd ) { 582 ·th = ba£ ; 583  dÚe ; 586 ·th = `g_bužd_fž’ame ( ba£ , Ãw_fÞd” , NULL ); 587 `g_ä“ ( ba£ ); 591 »t = - EBADR ; 595 dÚe : 596 ià( ·th && ! `fÞd”_is_v®id Õ©h, FALSE )) 597 »t = - ENOENT ; 599 ià( »t < 0) { 600 `g_ä“ ( ·th ); 601 ·th = NULL ; 604 ià( ”r ) 605 * ”r = »t ; 607 `DBG ("·th : %s\n", ·th ); 609  ·th ; 610 } } 612  $phÚebook_»q_fš®ize (* »que¡ ) 614  phÚebook_d©a * d©a = »que¡ ; 616 `DBG (""); 618 ià(! d©a ) 621 ià( d©a -> ÿÎ ) { 622 `dbus_³ndšg_ÿÎ_ÿnûl ( d©a -> ÿÎ ); 623 `dbus_³ndšg_ÿÎ_uÄef ( d©a -> ÿÎ ); 625 `g_ä“ ( d©a -> »q_Çme ); 626 `g_ä“ ( d©a ); 627 } } 629 * $phÚebook_puÎ (cÚ¡ * Çme , cÚ¡  ­·¿m_f›ld * ·¿ms , 630 phÚebook_cb cb , * u£r_d©a , * ”r ) 632  phÚebook_d©a * d©a ; 633 * fÞd” ; 635 `DBG ("Çm%s", Çme ); 637 ià(! `g_¡r_has_suffix ( Çme , ".vcf")) { 638 ià( ”r ) 639 * ”r = - ENOENT ; 641  NULL ; 644 fÞd” = `g_¡ºdup ( Çme , `¡¾’ (name) - 4); 646 ià(! `fÞd”_is_v®id ( fÞd” , TRUE )) { 647 ià( ”r ) 648 * ”r = - ENOENT ; 650 `g_ä“ ( fÞd” ); 651  NULL ; 654 `g_ä“ ( fÞd” ); 656 d©a = `g_Ãw0 ( phÚebook_d©a , 1); 657 d©a -> ·¿ms =…arams; 658 d©a -> u£r_d©a = user_data; 659 d©a -> cb = cb; 660 d©a -> »q_Çme = `g_¡rdup ( Çme ); 662 ià( ”r ) 663 * ”r = 0; 665  d©a ; 666 } } 668  $phÚebook_puÎ_»ad (* »que¡ ) 670  phÚebook_d©a * d©a = »que¡ ; 672 `DBG ("Çm%s", d©a -> »q_Çme ); 674 ià( d©a -> ·¿ms -> maxli¡couÁ == 0) { 675 d©a -> ÿÎ = `phÚebook_»que¡ (data, 676 QUERY_GET_PHONEBOOK_SIZE , 677 g‘_phÚebook_size_»¶y , 678 DBUS_TYPE_STRING , & d©a -> »q_Çme , 679 DBUS_TYPE_INVALID ); 683 d©a -> ÿÎ = `phÚebook_»que¡ (data, 684 QUERY_GET_PHONEBOOK , 685 g‘_phÚebook_»¶y , 686 DBUS_TYPE_STRING , & d©a -> »q_Çme , 687 DBUS_TYPE_UINT64 , & d©a -> ·¿ms -> fž‹r , 688 DBUS_TYPE_BYTE , & d©a -> ·¿ms -> fÜm© , 689 DBUS_TYPE_UINT16 , & d©a -> ·¿ms -> maxli¡couÁ , 690 DBUS_TYPE_UINT16 , & d©a -> ·¿ms -> li¡¡¬toff£t , 691 DBUS_TYPE_INVALID ); 694 } } 696 * $phÚebook_g‘_’Œy (cÚ¡ * fÞd” , cÚ¡ * id , 697 cÚ¡  ­·¿m_f›ld * ·¿ms , phÚebook_cb cb , 698 * u£r_d©a , * ”r ) 700  phÚebook_d©a * d©a ; 702 `DBG (""); 703 ià(! `g_¡r_has_suffix ( id , ".vcf")) { 704 ià( ”r ) 705 * ”r = - ENOENT ; 707  NULL ; 710 ià(! `fÞd”_is_v®id ( fÞd” , TRUE )) { 711 ià( ”r ) 712 * ”r = - ENOENT ; 714  NULL ; 717 `DBG ("fÞd” % id %s", fÞd” , id ); 719 d©a = `g_Ãw0 ( phÚebook_d©a , 1); 720 d©a -> ·¿ms =…arams; 721 d©a -> u£r_d©a = user_data; 722 d©a -> cb = cb; 724 d©a -> ÿÎ = `phÚebook_»que¡ (data, 725 QUERY_GET_PHONEBOOK_ENTRY , 726 g‘_phÚebook_’Œy_»¶y , 727 DBUS_TYPE_STRING , & fÞd” , 728 DBUS_TYPE_STRING , & id , 729 DBUS_TYPE_UINT64 , & d©a -> ·¿ms -> fž‹r , 730 DBUS_TYPE_BYTE , & d©a -> ·¿ms -> fÜm© , 731 DBUS_TYPE_INVALID ); 733 ià(* ”r ) { 734 ià( d©a -> ÿÎ ) 735 * ”r = 0; 737 * ”r = - ENOENT ; 738 `g_ä“ ( d©a ); 739 d©a = NULL ; 743  d©a ; 744 } } 746 * $phÚebook_ü—‹_ÿche (cÚ¡ * Çme , phÚebook_’Œy_cb ’Œy_cb , 747 phÚebook_ÿche_»ady_cb »ady_cb , * u£r_d©a , * ”r ) 749  phÚebook_d©a * d©a ; 751 ià(! `fÞd”_is_v®id ( Çme , TRUE )) { 752 ià( ”r ) 753 * ”r = - ENOENT ; 755  NULL ; 758 `DBG ("Çm%s", Çme ); 760 d©a = `g_Ãw0 ( phÚebook_d©a , 1); 761 d©a -> u£r_d©a = user_data; 762 d©a -> ’Œy_cb =ƒntry_cb; 763 d©a -> »ady_cb =„eady_cb; 765 d©a -> ÿÎ = `phÚebook_»que¡ (data, 766 QUERY_GET_PHONEBOOK_LIST , 767 g‘_phÚebook_li¡_»¶y , 768 DBUS_TYPE_STRING , & Çme , 769 DBUS_TYPE_INVALID ); 771 ià(* ”r ) { 772 ià( d©a -> ÿÎ ) 773 * ”r = 0; 775 * ”r = - ENOENT ; 776 `g_ä“ ( d©a ); 777 d©a = NULL ; 781  d©a ; 782 } } 784  $phÚebook_£t_ÿche_nÙifiÿtiÚ (* £ssiÚ , 785 phÚebook_ÿche_þ—r_cb þ—r_cb , 786 * u£r_d©a ) 788  phÚebook_£ssiÚ * s = £ssiÚ ; 790 `DBG (""); 791 s -> þ—r_cb = clear_cb; 793 ià( s -> cÚÃùiÚ =ð NULL ) { 794 s -> cÚÃùiÚ = `g_dbus_£tup_bus ( DBUS_BUS_SYSTEM , 795 NULL , NULL); 797 ià( s -> cÚÃùiÚ =ð NULL ) { 798 `”rÜ ("Can't get on s bus"); 803 s -> u£r_d©a = user_data; 805 ià( s -> þ—r_id ) { 806 `g_dbus_»move_w©ch ( s -> cÚÃùiÚ , s-> þ—r_id ); 807 s -> þ—r_id = 0; 810 s -> þ—r_id = `g_dbus_add_sigÇl_w©ch (s-> cÚÃùiÚ , 811 NULL , PHONEBOOK_PATH , PHONEBOOK_INTERFACE , 812 "þ—r", þ—r_sigÇl , 813 s , NULL ); 814 } } @obexd/plugins/phonebook-tracker.c 23 #ifdeà HAVE_CONFIG_H 24  ~"cÚfig.h " 27  ~<¡ršg.h > 28  ~<¡dlib.h > 29  ~ 30  ~<¡dio.h > 31  ~<”ºo.h > 32  ~ 33  ~ 34  ~ 36  ~"log.h " 37  ~"obex.h " 38  ~"£rviû.h " 39  ~"mim‘y³.h " 40  ~"phÚebook.h " 41  ~"vÿrd.h " 43  #TRACKER_SERVICE "Üg.ä“desktÝ.T¿ck”1" ) 44  #TRACKER_RESOURCES_PATH "/Üg/ä“desktÝ/T¿ck”1/Resourûs" ) 45  #TRACKER_RESOURCES_INTERFACE "Üg.ä“desktÝ.T¿ck”1.Resourûs" ) 47  #TRACKER_DEFAULT_CONTACT_ME "h‰p://www.£mªticdesktÝ.Üg/ÚtÞog›s/2007/03/22/nco#deçuÉ-cÚù-me" ) 48  #AFFILATION_HOME "Home" ) 49  #AFFILATION_WORK "WÜk" ) 50  #ADDR_FIELD_AMOUNT 7 ) 51  #PULL_QUERY_COL_AMOUNT 23 ) 52  #COUNT_QUERY_COL_AMOUNT 1 ) 54  #COL_PHONE_AFF 0 ) 55  #COL_FULL_NAME 1 ) 56  #COL_FAMILY_NAME 2 ) 57  #COL_GIVEN_NAME 3 ) 58  #COL_ADDITIONAL_NAME 4 ) 59  #COL_NAME_PREFIX 5 ) 60  #COL_NAME_SUFFIX 6 ) 61  #COL_ADDR_AFF 7 ) 62  #COL_BIRTH_DATE 8 ) 63  #COL_NICKNAME 9 ) 64  #COL_URL 10 ) 65  #COL_PHOTO 11 ) 66  #COL_ORG_ROLE 12 ) 67  #COL_UID 13 ) 68  #COL_TITLE 14 ) 69  #COL_AFF_TYPE 15 ) 70  #COL_ORG_NAME 16 ) 71  #COL_ORG_DEPARTMENT 17 ) 72  #COL_EMAIL_AFF 18 ) 73  #COL_DATE 19 ) 74  #COL_SENT 20 ) 75  #COL_ANSWERED 21 ) 76  #CONTACTS_ID_COL 22 ) 77  #CONTACT_ID_PREFIX "uº:uuid:" ) 78  #CALL_ID_PREFIX "mes§ge:" ) 80  #FAX_NUM_TYPE "h‰p://www.£mªticdesktÝ.Üg/ÚtÞog›s/2007/03/22/nco#FaxNumb”" ) 81  #MOBILE_NUM_TYPE "h‰p://www.£mªticdesktÝ.Üg/ÚtÞog›s/2007/03/22/nco#C–lPhÚeNumb”" ) 83  #MAIN_DELIM "\30" ) 84  #SUB_DELIM "\31" ) 85  #ADDR_DELIM "\37" ) 86  #MAX_FIELDS 100 ) 87  #VCARDS_PART_COUNT 50 ) 88  #QUERY_OFFSET_FORMAT "% OFFSET %d" ) 90  #CONTACTS_QUERY_ALL \ 155 "ORDER BY¿ck”:id(?_cÚù)" ) 157  #CONTACTS_QUERY_ALL_LIST \ 181 "} GROUP BY ?c" ) 183  #CALLS_CONSTRAINTS ( CONSTRAINT ) \ 188 CONSTRAINT \ 205 "} " ) 207  #CALLS_LIST ( CONSTRAINT ) \ 225 `CALLS_CONSTRAINTS ( CONSTRAINT ) \ 226 "ORDER BY DESCÒmo:£ÁD©e(?_ÿÎ)è" ) 228  #CALLS_QUERY ( CONSTRAINT ) \ 299 `CALLS_CONSTRAINTS ( CONSTRAINT ) \ 300 "ORDER BY DESCÒmo:£ÁD©e(?_ÿÎ)è" ) 302  #MISSED_CONSTRAINT \ 305 "?_ÿ΂mo:isAnsw”ed f®£ . " ) 307  #INCOMING_CONSTRAINT \ 310 "?_ÿ΂mo:isAnsw”edru. " ) 312  #OUTGOING_CONSTRAINT \ 314 "?_ÿ΂mo:isS’ˆŒu. " ) 316  #COMBINED_CONSTRAINT \ 323 "} " ) 325  #CALL_URI_CONSTRAINT \ 326 COMBINED_CONSTRAINT \ 327 "FILTER (?_ÿÎ = <%s>è" ) 329  #MISSED_CALLS_QUERY `CALLS_QUERY ( MISSED_CONSTRAINT ) ) 330  #MISSED_CALLS_LIST `CALLS_LIST ( MISSED_CONSTRAINT ) ) 331  #INCOMING_CALLS_QUERY `CALLS_QUERY ( INCOMING_CONSTRAINT ) ) 332  #INCOMING_CALLS_LIST `CALLS_LIST ( INCOMING_CONSTRAINT ) ) 333  #OUTGOING_CALLS_QUERY `CALLS_QUERY ( OUTGOING_CONSTRAINT ) ) 334  #OUTGOING_CALLS_LIST `CALLS_LIST ( OUTGOING_CONSTRAINT ) ) 335  #COMBINED_CALLS_QUERY `CALLS_QUERY ( COMBINED_CONSTRAINT ) ) 336  #COMBINED_CALLS_LIST `CALLS_LIST ( COMBINED_CONSTRAINT ) ) 337  #CONTACT_FROM_CALL_QUERY `CALLS_QUERY ( CALL_URI_CONSTRAINT ) ) 339  #CONTACTS_QUERY_FROM_URI \ 404 "}" ) 406  #CONTACTS_OTHER_QUERY_FROM_URI \ 414 "} " ) 416  #CONTACTS_COUNT_QUERY \ 420 "}" ) 422  #MISSED_CALLS_COUNT_QUERY \ 430 "}" ) 432  #INCOMING_CALLS_COUNT_QUERY \ 440 "}" ) 442  #OUTGOING_CALLS_COUNT_QUERY \ 449 "}" ) 451  #COMBINED_CALLS_COUNT_QUERY \ 465 "}" ) 467  #NEW_MISSED_CALLS_COUNT_QUERY \ 476 "}" ) 478 (* t»¶y_li¡_fÜ—ch_t è(cÚ¡ ** t»¶y ,  tnum_f›lds , 479 * tu£r_d©a ); 481 (* tadd_f›ld_t è( tphÚebook_cÚù * tcÚù , 482 cÚ¡ * tv®ue ,  tty³ ); 484  s³ndšg_»¶y { 485 »¶y_li¡_fÜ—ch_t ÿÎback ; 486 * u£r_d©a ; 487  num_f›lds ; 490  scÚù_d©a { 491 * id ; 492  phÚebook_cÚù * cÚù ; 495  sphÚebook_d©a { 496 phÚebook_cb cb ; 497 * u£r_d©a ; 498  šdex ; 499 gboÞ—n vÿrd’Œy ; 500 cÚ¡  ­·¿m_f›ld * ·¿ms ; 501 GSLi¡ * cÚùs ; 502 phÚebook_ÿche_»ady_cb »ady_cb ; 503 phÚebook_’Œy_cb ’Œy_cb ; 504  Ãwmis£dÿÎs ; 505 GCªûÎabË * qu”y_ÿnc ; 506 * »q_Çme ; 507  vÿrd_·¹_couÁ ; 508  Œack”_šdex ; 511  sphÚebook_šdex { 512 GA¼ay * phÚebook ; 513  šdex ; 516  T¿ck”S·rqlCÚÃùiÚ * cÚÃùiÚ = NULL ; 518 cÚ¡ * $Çme2qu”y (cÚ¡ * Çme ) 520 ià( `g_¡r_equ® ( Çme , PB_CONTACTS )) 521  CONTACTS_QUERY_ALL ; 522 ià( `g_¡r_equ® ( Çme , PB_CALLS_INCOMING )) 523  INCOMING_CALLS_QUERY ; 524 ià( `g_¡r_equ® ( Çme , PB_CALLS_OUTGOING )) 525  OUTGOING_CALLS_QUERY ; 526 ià( `g_¡r_equ® ( Çme , PB_CALLS_MISSED )) 527  MISSED_CALLS_QUERY ; 528 ià( `g_¡r_equ® ( Çme , PB_CALLS_COMBINED )) 529  COMBINED_CALLS_QUERY ; 531  NULL ; 532 } } 534 cÚ¡ * $Çme2couÁ_qu”y (cÚ¡ * Çme ) 536 ià( `g_¡r_equ® ( Çme , PB_CONTACTS )) 537  CONTACTS_COUNT_QUERY ; 538 ià( `g_¡r_equ® ( Çme , PB_CALLS_INCOMING )) 539  INCOMING_CALLS_COUNT_QUERY ; 540 ià( `g_¡r_equ® ( Çme , PB_CALLS_OUTGOING )) 541  OUTGOING_CALLS_COUNT_QUERY ; 542 ià( `g_¡r_equ® ( Çme , PB_CALLS_MISSED )) 543  MISSED_CALLS_COUNT_QUERY ; 544 ià( `g_¡r_equ® ( Çme , PB_CALLS_COMBINED )) 545  COMBINED_CALLS_COUNT_QUERY ; 547  NULL ; 548 } } 550  gboÞ—n $fÞd”_is_v®id (cÚ¡ * fÞd” ) 552 ià( fÞd” =ð NULL ) 553  FALSE ; 555 ià( `g_¡r_equ® ( fÞd” , "/")) 556  TRUE ; 557 ià( `g_¡r_equ® ( fÞd” , PB_TELECOM_FOLDER )) 558  TRUE ; 559 ià( `g_¡r_equ® ( fÞd” , PB_CONTACTS_FOLDER )) 560  TRUE ; 561 ià( `g_¡r_equ® ( fÞd” , PB_CALLS_INCOMING_FOLDER )) 562  TRUE ; 563 ià( `g_¡r_equ® ( fÞd” , PB_CALLS_OUTGOING_FOLDER )) 564  TRUE ; 565 ià( `g_¡r_equ® ( fÞd” , PB_CALLS_MISSED_FOLDER )) 566  TRUE ; 567 ià( `g_¡r_equ® ( fÞd” , PB_CALLS_COMBINED_FOLDER )) 568  TRUE ; 570  FALSE ; 571 } } 573 cÚ¡ * $fÞd”2qu”y (cÚ¡ * fÞd” ) 575 ià( `g_¡r_equ® ( fÞd” , PB_CONTACTS_FOLDER )) 576  CONTACTS_QUERY_ALL_LIST ; 577 ià( `g_¡r_equ® ( fÞd” , PB_CALLS_INCOMING_FOLDER )) 578  INCOMING_CALLS_LIST ; 579 ià( `g_¡r_equ® ( fÞd” , PB_CALLS_OUTGOING_FOLDER )) 580  OUTGOING_CALLS_LIST ; 581 ià( `g_¡r_equ® ( fÞd” , PB_CALLS_MISSED_FOLDER )) 582  MISSED_CALLS_LIST ; 583 ià( `g_¡r_equ® ( fÞd” , PB_CALLS_COMBINED_FOLDER )) 584  COMBINED_CALLS_LIST ; 586  NULL ; 587 } } 589 cÚ¡ ** $¡ršg_¬¿y_äom_cursÜ ( T¿ck”S·rqlCursÜ * cursÜ , 590  ¬¿y_Ën ) 592 cÚ¡ ** »suÉ ; 593  i ; 595 »suÉ = `g_Ãw0 (cÚ¡ *, ¬¿y_Ën ); 597  i = 0; i < ¬¿y_Ën ; ++i) { 598 T¿ck”S·rqlV®ueTy³ ty³ ; 600 ty³ = `Œack”_¥¬ql_cursÜ_g‘_v®ue_ty³ ( cursÜ , i ); 602 ià( ty³ =ð TRACKER_SPARQL_VALUE_TYPE_BLANK_NODE || 603 ty³ =ð TRACKER_SPARQL_VALUE_TYPE_UNBOUND ) 605 »suÉ [ i ] = ""; 608 »suÉ [ i ] = `Œack”_¥¬ql_cursÜ_g‘_¡ršg ( cursÜ , i, 609 NULL ); 612  »suÉ ; 613 } } 615  $upd©e_ÿnûÎabË ( phÚebook_d©a * pd©a , 616 GCªûÎabË * ÿnc ) 618 ià( pd©a -> qu”y_ÿnc ) 619 `g_objeù_uÄef ( pd©a -> qu”y_ÿnc ); 621 pd©a -> qu”y_ÿnc = ÿnc ; 622 } } 624  $async_qu”y_cursÜ_Ãxt_cb ( GObjeù * sourû , GAsyncResuÉ * »suÉ , 625 gpoš‹r u£r_d©a ) 627  ³ndšg_»¶y * ³ndšg = u£r_d©a ; 628 T¿ck”S·rqlCursÜ * cursÜ = `TRACKER_SPARQL_CURSOR ( sourû ); 629 GCªûÎabË * ÿnûÎabË ; 630 GE¼Ü * ”rÜ = NULL ; 631 gboÞ—n sucûss ; 632 cÚ¡ ** node ; 633  ”r ; 635 sucûss = `Œack”_¥¬ql_cursÜ_Ãxt_fšish ( 636 `TRACKER_SPARQL_CURSOR ( sourû ), 637 »suÉ , & ”rÜ ); 639 ià(! sucûss ) { 640 ià( ”rÜ ) { 641 `DBG ("cursÜ_Ãxˆ”rÜ: %s", ”rÜ -> mes§ge ); 642 `g_”rÜ_ä“ ( ”rÜ ); 647 ³ndšg -> `ÿÎback ( NULL , 0,…’dšg-> u£r_d©a ); 649  çžed ; 652 node = `¡ršg_¬¿y_äom_cursÜ ( cursÜ , ³ndšg -> num_f›lds ); 653 ”r = ³ndšg -> `ÿÎback ( node ,…’dšg-> num_f›lds ,…’dšg-> u£r_d©a ); 654 `g_ä“ ( node ); 661 ià(! ”r ) { 662 ÿnûÎabË = `g_ÿnûÎabË_Ãw (); 663 `upd©e_ÿnûÎabË ( ³ndšg -> u£r_d©a , ÿnûÎabË ); 664 `Œack”_¥¬ql_cursÜ_Ãxt_async ( cursÜ , ÿnûÎabË , 665 async_qu”y_cursÜ_Ãxt_cb , 666 ³ndšg ); 670 çžed : 671 `g_objeù_uÄef ( cursÜ ); 672 `g_ä“ ( ³ndšg ); 673 } } 675  $qu”y_Œack” (cÚ¡ * qu”y ,  num_f›lds , 676 »¶y_li¡_fÜ—ch_t ÿÎback , * u£r_d©a ) 678  ³ndšg_»¶y * ³ndšg ; 679 GCªûÎabË * ÿnûÎabË ; 680 T¿ck”S·rqlCursÜ * cursÜ ; 681 GE¼Ü * ”rÜ = NULL ; 683 `DBG (""); 685 ià( cÚÃùiÚ =ð NULL ) 686 cÚÃùiÚ = `Œack”_¥¬ql_cÚÃùiÚ_g‘_dœeù ( 687 NULL , & ”rÜ ); 689 ià(! cÚÃùiÚ ) { 690 ià( ”rÜ ) { 691 `DBG ("dœeù-cÚÃùiÚƒ¼Ü: %s", ”rÜ -> mes§ge ); 692 `g_”rÜ_ä“ ( ”rÜ ); 695  - EINTR ; 698 ÿnûÎabË = `g_ÿnûÎabË_Ãw (); 699 `upd©e_ÿnûÎabË ( u£r_d©a , ÿnûÎabË ); 700 cursÜ = `Œack”_¥¬ql_cÚÃùiÚ_qu”y ( cÚÃùiÚ , qu”y , 701 ÿnûÎabË , & ”rÜ ); 703 ià( cursÜ =ð NULL ) { 704 ià( ”rÜ ) { 705 `DBG ("cÚÃùiÚ_qu”yƒ¼Ü: %s", ”rÜ -> mes§ge ); 706 `g_”rÜ_ä“ ( ”rÜ ); 709 `g_objeù_uÄef ( ÿnûÎabË ); 711  - EINTR ; 714 ³ndšg = `g_Ãw0 ( ³ndšg_»¶y , 1); 715 ³ndšg -> ÿÎback = callback; 716 ³ndšg -> u£r_d©a = user_data; 717 ³ndšg -> num_f›lds =‚um_fields; 722 `Œack”_¥¬ql_cursÜ_Ãxt_async ( cursÜ , ÿnûÎabË , 723 async_qu”y_cursÜ_Ãxt_cb , 724 ³ndšg ); 727 } } 729 * $iso8601_utc_to_loÿÉime (cÚ¡ * d©‘ime ) 731 time_t time ; 732  tm m, * loÿl ; 733  loÿld©e [32]; 734  Ä ; 736 `mem£t (& tm , 0, (tm)); 738 Ä = `ssÿnf ( d©‘ime , "%04u-%02u-%02uT%02u:%02u:%02u", 739 & tm . tm_y—r , &tm. tm_mÚ , &tm. tm_mday , 740 & tm . tm_hour , &tm. tm_mš , &tm. tm_£c ); 741 ià( Ä < 6) { 743 `”rÜ ("ssÿnf(): % (%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 744  `g_¡rdup (""); 748 ià(! `g_¡r_has_suffix ( d©‘ime , "Z")) { 749 `¡ráime ( loÿld©e , Öoÿld©e), "%Y%m%dT%H%M%S", & tm ); 750  `g_¡rdup ( loÿld©e ); 753 tm . tm_y—r -= 1900; 754 tm . tm_mÚ --; 756 time = `mktime (& tm ); 757 time -ð timezÚe ; 759 loÿl = `loÿÉime (& time ); 761 `¡ráime ( loÿld©e , Öoÿld©e), "%Y%m%dT%H%M%S", loÿl ); 763  `g_¡rdup ( loÿld©e ); 764 } } 766  $£t_ÿÎ_ty³ ( phÚebook_cÚù * cÚù , 767 cÚ¡ * d©‘ime , cÚ¡ * is_£Á , 768 cÚ¡ * is_ªsw”ed ) 770 gboÞ—n £Á , ªsw”ed ; 772 ià( `g_¡rcmp0 ( d©‘ime , "NOTACALL") == 0) { 773 cÚù -> ÿÎty³ = CALL_TYPE_NOT_A_CALL ; 777 £Á = `g_¡r_equ® ( is_£Á , "true"); 778 ªsw”ed = `g_¡r_equ® ( is_ªsw”ed , "true"); 780 ià( £Á =ð FALSE ) { 781 ià( ªsw”ed =ð FALSE ) 782 cÚù -> ÿÎty³ = CALL_TYPE_MISSED ; 784 cÚù -> ÿÎty³ = CALL_TYPE_INCOMING ; 786 cÚù -> ÿÎty³ = CALL_TYPE_OUTGOING ; 789 cÚù -> d©‘ime = `iso8601_utc_to_loÿÉime (datetime); 790 } } 792  gboÞ—n $cÚù_m©ches ( cÚù_d©a * c_d©a , cÚ¡ * id , 793 cÚ¡ * d©‘ime ) 795 * loÿÉime ; 796  cmp_»t ; 798 ià( `g_¡rcmp0 ( c_d©a -> id , id) != 0) 799  FALSE ; 802 ià( c_d©a -> cÚù -> ÿÎty³ =ð CALL_TYPE_NOT_A_CALL ) 803  TRUE ; 806 loÿÉime = `iso8601_utc_to_loÿÉime ( d©‘ime ); 807 cmp_»t = `g_¡rcmp0 ( c_d©a -> cÚù -> d©‘ime , loÿÉime ); 808 `g_ä“ ( loÿÉime ); 810  ( cmp_»t =ð0è? TRUE : FALSE ; 811 } } 813  phÚebook_cÚù * $fšd_cÚù ( GSLi¡ * cÚùs , cÚ¡ * id , 814 cÚ¡ * d©‘ime ) 816 GSLi¡ * l ; 818  l = cÚùs ;†;† =†-> Ãxt ) { 819  cÚù_d©a * c_d©a = l -> d©a ; 821 ià( `cÚù_m©ches ( c_d©a , id , d©‘ime )) 822  c_d©a -> cÚù ; 825  NULL ; 826 } } 828  phÚebook_f›ld * $fšd_f›ld ( GSLi¡ * f›lds , cÚ¡ * v®ue , 829  ty³ ) 831 GSLi¡ * l ; 833  l = f›lds ;†;† =†-> Ãxt ) { 834  phÚebook_f›ld * f›ld = l -> d©a ; 837 ià( `g_¡rcmp0 ( f›ld -> ‹xt , v®ue è=ð0 && f›ld-> ty³ ==ype) 838  f›ld ; 841  NULL ; 842 } } 844  $add_phÚe_numb” ( phÚebook_cÚù * cÚù , 845 cÚ¡ * phÚe ,  ty³ ) 847  phÚebook_f›ld * numb” ; 849 ià( phÚe =ð NULL || `¡¾’ (phone) == 0) 853 ià( `fšd_f›ld ( cÚù -> numb”s , phÚe , ty³ )) 856 numb” = `g_Ãw0 ( phÚebook_f›ld , 1); 857 numb” -> ‹xt = `g_¡rdup ( phÚe ); 858 numb” -> ty³ =ype; 860 cÚù -> numb”s = `g_¦i¡_­³nd (cÚù->numb”s, numb” ); 861 } } 863  $add_emaž ( phÚebook_cÚù * cÚù , cÚ¡ * add»ss , 864  ty³ ) 866  phÚebook_f›ld * emaž ; 868 ià( add»ss =ð NULL || `¡¾’ (address) == 0) 872 ià( `fšd_f›ld ( cÚù -> emažs , add»ss , ty³ )) 875 emaž = `g_Ãw0 ( phÚebook_f›ld , 1); 876 emaž -> ‹xt = `g_¡rdup ( add»ss ); 877 emaž -> ty³ =ype; 879 cÚù -> emažs = `g_¦i¡_­³nd (cÚù->emažs, emaž ); 880 } } 882  gboÞ—n $addr_m©ches ( phÚebook_addr * a , phÚebook_add¸* b ) 884 GSLi¡ * Ï , * lb ; 886 ià( a -> ty³ !ð b ->type) 887  FALSE ; 889  Ï = a -> f›lds , lb = b ->fields;†a &&†b; 890 Ï =†a-> Ãxt , lb =†b->next) { 891 * f›ld_a = Ï -> d©a ; 892 * f›ld_b = lb -> d©a ; 894 ià( `g_¡rcmp0 ( f›ld_a , f›ld_b ) != 0) 895  FALSE ; 898  TRUE ; 899 } } 902  phÚebook_addr * $g’_addr (cÚ¡ * add»ss ,  ty³ ) 904  phÚebook_addr * addr ; 905 GSLi¡ * f›lds = NULL ; 906 ** addr_·¹s ; 907  i ; 913 ià( add»ss =ð NULL || `¡¾’ ×dd»ssè< ADDR_FIELD_AMOUNT ) 914  NULL ; 916 addr_·¹s = `g_¡r¥l™ ( add»ss , ADDR_DELIM , ADDR_FIELD_AMOUNT ); 918  i = 0; i < ADDR_FIELD_AMOUNT ; ++i) 919 f›lds = `g_¦i¡_­³nd (f›lds, `g_¡rdup ( addr_·¹s [ i ])); 921 `g_¡rä“v ( addr_·¹s ); 923 addr = `g_Ãw0 ( phÚebook_addr , 1); 924 addr -> f›lds = fields; 925 addr -> ty³ =ype; 927  addr ; 928 } } 930  $add_add»ss ( phÚebook_cÚù * cÚù , 931 cÚ¡ * add»ss ,  ty³ ) 933  phÚebook_addr * addr ; 934 GSLi¡ * l ; 936 addr = `g’_addr ( add»ss , ty³ ); 937 ià( addr =ð NULL ) 944  l = cÚù -> add»s£s ;†;† =†-> Ãxt ) { 945  phÚebook_addr * tmp = l -> d©a ; 947 ià( `addr_m©ches ( tmp , addr )) { 948 `phÚebook_addr_ä“ ( addr ); 953 cÚù -> add»s£s = `g_¦i¡_­³nd (cÚù->add»s£s, addr ); 954 } } 956  $add_u¾ ( phÚebook_cÚù * cÚù , cÚ¡ * u¾_v® , 957  ty³ ) 959  phÚebook_f›ld * u¾ ; 961 ià( u¾_v® =ð NULL || `¡¾’ (url_val) == 0) 965 ià( `fšd_f›ld ( cÚù -> u¾s , u¾_v® , ty³ )) 968 u¾ = `g_Ãw0 ( phÚebook_f›ld , 1); 970 u¾ -> ‹xt = `g_¡rdup ( u¾_v® ); 971 u¾ -> ty³ =ype; 973 cÚù -> u¾s = `g_¦i¡_­³nd (cÚù->u¾s, u¾ ); 974 } } 976  GSŒšg * $g’_vÿrds ( GSLi¡ * cÚùs , 977 cÚ¡  ­·¿m_f›ld * ·¿ms ) 979 GSLi¡ * l ; 980 GSŒšg * vÿrds ; 982 vÿrds = `g_¡ršg_Ãw ( NULL ); 985  l = cÚùs ;†;† =†-> Ãxt ) { 986  cÚù_d©a * c_d©a = l -> d©a ; 987 `phÚebook_add_cÚù ( vÿrds , c_d©a -> cÚù , 988 ·¿ms -> fž‹r ,…¬ams-> fÜm© ); 991  vÿrds ; 992 } } 994  $puÎ_cÚùs_size (cÚ¡ ** »¶y ,  num_f›lds , 995 * u£r_d©a ) 997  phÚebook_d©a * d©a = u£r_d©a ; 999 ià( num_f›lds < 0) { 1000 d©a -> `cb ( NULL , 0, num_f›lds , 0, TRUE , d©a-> u£r_d©a ); 1001  - EINTR ; 1004 ià( »¶y !ð NULL ) { 1005 d©a -> šdex = `©oi ( »¶y [0]); 1009 d©a -> `cb ( NULL , 0, d©a-> šdex , d©a-> Ãwmis£dÿÎs , TRUE , 1010 d©a -> u£r_d©a ); 1017 } } 1019  $add_affžŸtiÚ (** f›ld , cÚ¡ * v®ue ) 1021 ià( `¡¾’ (* f›ld è> 0 || v®ue =ð NULL || strlen(value) == 0) 1024 `g_ä“ (* f›ld ); 1026 * f›ld = `g_¡rdup ( v®ue ); 1027 } } 1029  $cÚù_š™ ( phÚebook_cÚù * cÚù , 1030 cÚ¡ ** »¶y ) 1032 ià( »¶y [ COL_FAMILY_NAME ][0] == '\0' && 1033 »¶y [ COL_GIVEN_NAME ][0] == '\0' && 1034 »¶y [ COL_ADDITIONAL_NAME ][0] == '\0' && 1035 »¶y [ COL_NAME_PREFIX ][0] == '\0' && 1036 »¶y [ COL_NAME_SUFFIX ][0] == '\0') { 1037 ià( »¶y [ COL_FULL_NAME ][0] != '\0') 1038 cÚù -> çmžy = `g_¡rdup ( »¶y [ COL_FULL_NAME ]); 1040 cÚù -> çmžy = `g_¡rdup ( »¶y [ COL_NICKNAME ]); 1042 cÚù -> çmžy = `g_¡rdup ( »¶y [ COL_FAMILY_NAME ]); 1043 cÚù -> giv’ = `g_¡rdup ( »¶y [ COL_GIVEN_NAME ]); 1044 cÚù -> add™iÚ® = `g_¡rdup ( »¶y [ COL_ADDITIONAL_NAME ]); 1045 cÚù -> ´efix = `g_¡rdup ( »¶y [ COL_NAME_PREFIX ]); 1046 cÚù -> suffix = `g_¡rdup ( »¶y [ COL_NAME_SUFFIX ]); 1048 cÚù -> fuÎÇme = `g_¡rdup ( »¶y [ COL_FULL_NAME ]); 1049 cÚù -> bœthday = `g_¡rdup ( »¶y [ COL_BIRTH_DATE ]); 1050 cÚù -> nickÇme = `g_¡rdup ( »¶y [ COL_NICKNAME ]); 1051 cÚù -> phÙo = `g_¡rdup ( »¶y [ COL_PHOTO ]); 1052 cÚù -> com·ny = `g_¡rdup ( »¶y [ COL_ORG_NAME ]); 1053 cÚù -> d•¬tm’t = `g_¡rdup ( »¶y [ COL_ORG_DEPARTMENT ]); 1054 cÚù -> rÞe = `g_¡rdup ( »¶y [ COL_ORG_ROLE ]); 1055 cÚù -> uid = `g_¡rdup ( »¶y [ COL_UID ]); 1056 cÚù -> t™Ë = `g_¡rdup ( »¶y [ COL_TITLE ]); 1058 `£t_ÿÎ_ty³ ( cÚù , »¶y [ COL_DATE ],„•ly[ COL_SENT ], 1059 »¶y [ COL_ANSWERED ]); 1060 } } 1062  phÚebook_numb”_ty³ $g‘_phÚe_ty³ (cÚ¡ * affž©iÚ ) 1064 ià( `g_¡rcmp0 ( AFFILATION_HOME , affž©iÚ ) == 0) 1065  TEL_TYPE_HOME ; 1066 ià( `g_¡rcmp0 ( AFFILATION_WORK , affž©iÚ ) == 0) 1067  TEL_TYPE_WORK ; 1069  TEL_TYPE_OTHER ; 1070 } } 1072  $add_aff_numb” ( phÚebook_cÚù * cÚù , 1073 cÚ¡ * ²umb” , cÚ¡ * aff_ty³ ) 1075 ** num_·¹s ; 1076 * ty³ , * numb” ; 1081 num_·¹s = `g_¡r¥l™ ( ²umb” , SUB_DELIM , 2); 1083 ià(! num_·¹s ) 1086 ià( num_·¹s [0]) 1087 ty³ = num_·¹s [0]; 1089  çžed ; 1091 ià( num_·¹s [1]) 1092 numb” = num_·¹s [1]; 1094  çžed ; 1096 ià( `g_¡¼¡r ( ty³ , FAX_NUM_TYPE )) 1097 `add_phÚe_numb” ( cÚù , numb” , TEL_TYPE_FAX ); 1098 ià( `g_¡¼¡r ( ty³ , MOBILE_NUM_TYPE )) 1099 `add_phÚe_numb” ( cÚù , numb” , TEL_TYPE_MOBILE ); 1103 `add_phÚe_numb” ( cÚù , numb” , `g‘_phÚe_ty³ ( aff_ty³ )); 1105 çžed : 1106 `g_¡rä“v ( num_·¹s ); 1107 } } 1109  $cÚù_add_numb”s ( phÚebook_cÚù * cÚù , 1110 cÚ¡ ** »¶y ) 1112 ** aff_numb”s ; 1113  i ; 1116 aff_numb”s = `g_¡r¥l™ ( »¶y [ COL_PHONE_AFF ], MAIN_DELIM , MAX_FIELDS ); 1118 ià( aff_numb”s ) 1119  i = 0; aff_numb”s [i]; ++i) 1120 `add_aff_numb” ( cÚù , aff_numb”s [ i ], 1121 »¶y [ COL_AFF_TYPE ]); 1123 `g_¡rä“v ( aff_numb”s ); 1124 } } 1126  phÚebook_f›ld_ty³ $g‘_f›ld_ty³ (cÚ¡ * affž©iÚ ) 1128 ià( `g_¡rcmp0 ( AFFILATION_HOME , affž©iÚ ) == 0) 1129  FIELD_TYPE_HOME ; 1130 ià( `g_¡rcmp0 ( AFFILATION_WORK , affž©iÚ ) == 0) 1131  FIELD_TYPE_WORK ; 1133  FIELD_TYPE_OTHER ; 1134 } } 1136  $add_aff_f›ld ( phÚebook_cÚù * cÚù , 1137 cÚ¡ * aff_emaž , add_f›ld_t add_f›ld_cb ) 1139 ** emaž_·¹s ; 1140 * ty³ , * emaž ; 1145 emaž_·¹s = `g_¡r¥l™ ( aff_emaž , SUB_DELIM , 2); 1147 ià(! emaž_·¹s ) 1150 ià( emaž_·¹s [0]) 1151 emaž = emaž_·¹s [0]; 1153  çžed ; 1155 ià( emaž_·¹s [1]) 1156 ty³ = emaž_·¹s [1]; 1158  çžed ; 1160 `add_f›ld_cb ( cÚù , emaž , `g‘_f›ld_ty³ ( ty³ )); 1162 çžed : 1163 `g_¡rä“v ( emaž_·¹s ); 1164 } } 1166  $cÚù_add_emažs ( phÚebook_cÚù * cÚù , 1167 cÚ¡ ** »¶y ) 1169 ** aff_emažs ; 1170  i ; 1173 aff_emažs = `g_¡r¥l™ ( »¶y [ COL_EMAIL_AFF ], MAIN_DELIM , MAX_FIELDS ); 1175 ià( aff_emažs ) 1176  i = 0; aff_emažs [i] !ð NULL ; ++i) 1177 `add_aff_f›ld ( cÚù , aff_emažs [ i ], add_emaž ); 1179 `g_¡rä“v ( aff_emažs ); 1180 } } 1182  $cÚù_add_add»s£s ( phÚebook_cÚù * cÚù , 1183 cÚ¡ ** »¶y ) 1185 ** aff_addr ; 1186  i ; 1189 aff_addr = `g_¡r¥l™ ( »¶y [ COL_ADDR_AFF ], MAIN_DELIM , MAX_FIELDS ); 1191 ià( aff_addr ) 1192  i = 0; aff_addr [i] !ð NULL ; ++i) 1193 `add_aff_f›ld ( cÚù , aff_addr [ i ], add_add»ss ); 1195 `g_¡rä“v ( aff_addr ); 1196 } } 1198  $cÚù_add_u¾s ( phÚebook_cÚù * cÚù , 1199 cÚ¡ ** »¶y ) 1201 ** aff_u¾ ; 1202  i ; 1205 aff_u¾ = `g_¡r¥l™ ( »¶y [ COL_URL ], MAIN_DELIM , MAX_FIELDS ); 1207 ià( aff_u¾ ) 1208  i = 0; aff_u¾ [i] !ð NULL ; ++i) 1209 `add_aff_f›ld ( cÚù , aff_u¾ [ i ], add_u¾ ); 1211 `g_¡rä“v ( aff_u¾ ); 1212 } } 1214  $cÚù_add_Ügªiz©iÚ ( phÚebook_cÚù * cÚù , 1215 cÚ¡ ** »¶y ) 1219 `add_affžŸtiÚ (& cÚù -> t™Ë , »¶y [ COL_TITLE ]); 1220 `add_affžŸtiÚ (& cÚù -> com·ny , »¶y [ COL_ORG_NAME ]); 1221 `add_affžŸtiÚ (& cÚù -> d•¬tm’t , »¶y [ COL_ORG_DEPARTMENT ]); 1222 `add_affžŸtiÚ (& cÚù -> rÞe , »¶y [ COL_ORG_ROLE ]); 1223 } } 1225  $ä“_d©a_cÚùs ( phÚebook_d©a * d©a ) 1227 GSLi¡ * l ; 1230  l = d©a -> cÚùs ;†;† =†-> Ãxt ) { 1231  cÚù_d©a * c_d©a = l -> d©a ; 1233 `g_ä“ ( c_d©a -> id ); 1234 `phÚebook_cÚù_ä“ ( c_d©a -> cÚù ); 1235 `g_ä“ ( c_d©a ); 1238 `g_¦i¡_ä“ ( d©a -> cÚùs ); 1239 d©a -> cÚùs = NULL ; 1240 } } 1242  $£nd_puÎ_·¹ ( phÚebook_d©a * d©a , 1243 cÚ¡  ­·¿m_f›ld * ·¿ms , gboÞ—n Ï¡·¹ ) 1245 GSŒšg * vÿrds ; 1247 `DBG (""); 1248 vÿrds = `g’_vÿrds ( d©a -> cÚùs , ·¿ms ); 1249 d©a -> `cb ( vÿrds -> ¡r , vÿrds-> Ën , `g_¦i¡_Ëngth (d©a-> cÚùs ), 1250 d©a -> Ãwmis£dÿÎs , Ï¡·¹ , d©a-> u£r_d©a ); 1252 ià(! Ï¡·¹ ) 1253 `ä“_d©a_cÚùs ( d©a ); 1254 `g_¡ršg_ä“ ( vÿrds , TRUE ); 1255 } } 1257  $puÎ_cÚùs (cÚ¡ ** »¶y ,  num_f›lds , * u£r_d©a ) 1259  phÚebook_d©a * d©a = u£r_d©a ; 1260 cÚ¡  ­·¿m_f›ld * ·¿ms = d©a ->params; 1261  phÚebook_cÚù * cÚù ; 1262  cÚù_d©a *contact_data; 1263  Ï¡_šdex , i ; 1264 gboÞ—n cd©a_´e£Á = FALSE , ·¹_£Á = FALSE; 1265 * ‹mp_id = NULL ; 1267 ià( num_f›lds < 0) { 1268 d©a -> `cb ( NULL , 0, num_f›lds , 0, TRUE , d©a-> u£r_d©a ); 1269  çž ; 1272 `DBG ("»¶y %p", »¶y ); 1273 d©a -> Œack”_šdex ++; 1275 ià( »¶y =ð NULL ) 1276  dÚe ; 1280 cÚù = `fšd_cÚù ( d©a -> cÚùs , »¶y [ CONTACTS_ID_COL ], 1281 »¶y [ COL_DATE ]); 1284 ià( cÚù ) { 1285 cd©a_´e£Á = TRUE ; 1286  add_numb”s ; 1290 ià( d©a -> vÿrd’Œy ) 1291  add_’Œy ; 1294  i = 0; i < num_f›lds - 4; i++) { 1295 ià( »¶y [ i ][0] != '\0') 1299 ià( i =ð num_f›lds - 4 && ! `g_¡r_equ® ( »¶y [ CONTACTS_ID_COL ], 1300 TRACKER_DEFAULT_CONTACT_ME )) 1303 ià( `g_¡rcmp0 ( ‹mp_id , »¶y [ CONTACTS_ID_COL ])) { 1304 d©a -> šdex ++; 1305 `g_ä“ ( ‹mp_id ); 1306 ‹mp_id = `g_¡rdup ( »¶y [ CONTACTS_ID_COL ]); 1310 ià( d©a -> šdex > ·¿ms -> li¡¡¬toff£t ) 1311 d©a -> vÿrd_·¹_couÁ ++; 1314 ià( d©a -> vÿrd_·¹_couÁ > VCARDS_PART_COUNT ) { 1315 `DBG ("Part of vcard data„eady for sending..."); 1316 d©a -> vÿrd_·¹_couÁ = 0; 1319 `£nd_puÎ_·¹ ( d©a , ·¿ms , FALSE ); 1325 ·¹_£Á = TRUE ; 1328 Ï¡_šdex = ·¿ms -> li¡¡¬toff£t +…¬ams-> maxli¡couÁ ; 1330 ià( d©a -> šdex <ð ·¿ms -> li¡¡¬toff£t ) 1336 ià( d©a -> šdex > Ï¡_šdex && ·¿ms -> maxli¡couÁ > 0) { 1337 `DBG ("Maxlistcount‡chieved"); 1338  dÚe ; 1341 add_’Œy : 1342 cÚù = `g_Ãw0 ( phÚebook_cÚù , 1); 1343 `cÚù_š™ ( cÚù , »¶y ); 1345 add_numb”s : 1346 `cÚù_add_numb”s ( cÚù , »¶y ); 1347 `cÚù_add_emažs ( cÚù , »¶y ); 1348 `cÚù_add_add»s£s ( cÚù , »¶y ); 1349 `cÚù_add_u¾s ( cÚù , »¶y ); 1350 `cÚù_add_Ügªiz©iÚ ( cÚù , »¶y ); 1352 `DBG ("cÚù %p", cÚù ); 1356 ià(! cd©a_´e£Á ) { 1357 cÚù_d©a = `g_Ãw0 (contact_data, 1); 1358 cÚù_d©a -> cÚù = contact; 1359 cÚù_d©a -> id = `g_¡rdup ( »¶y [ CONTACTS_ID_COL ]); 1360 d©a -> cÚùs = `g_¦i¡_­³nd (d©a->cÚùs, cÚù_d©a ); 1363 ià( ·¹_£Á ) 1364  - EINTR ; 1368 dÚe : 1371 `£nd_puÎ_·¹ ( d©a , ·¿ms , TRUE ); 1373 çž : 1374 `g_ä“ ( ‹mp_id ); 1375 ‹mp_id = NULL ; 1377  - EINTR ; 1382 } } 1384  $add_to_ÿche (cÚ¡ ** »¶y ,  num_f›lds , * u£r_d©a ) 1386  phÚebook_d©a * d©a = u£r_d©a ; 1387 * fÜm©‹d ; 1388  i ; 1390 ià( »¶y =ð NULL || num_f›lds < 0) 1391  dÚe ; 1394  i = 1; i < num_f›lds ; i++) { 1395 ià( »¶y [ i ][0] != '\0') 1399 ià( i =ð num_f›lds && 1400 ! `g_¡r_equ® ( »¶y [0], TRACKER_DEFAULT_CONTACT_ME )) 1403 ià( i == 7) 1404 fÜm©‹d = `g_¡rdup ( »¶y [7]); 1405 ià( i == 6) 1406 fÜm©‹d = `g_¡rdup ( »¶y [6]); 1408 fÜm©‹d = `g_¡rdup_´štf ("%s;%s;%s;%s;%s", 1409 »¶y [1],„eply[2],„eply[3],„eply[4], 1410 »¶y [5]); 1413 ià( `¡rcmp ( »¶y [0], TRACKER_DEFAULT_CONTACT_ME ) == 0) 1414 d©a -> `’Œy_cb ( »¶y [0], 0, fÜm©‹d , "", 1415 »¶y [6], d©a -> u£r_d©a ); 1417 d©a -> `’Œy_cb ( »¶y [0], PHONEBOOK_INVALID_HANDLE , fÜm©‹d , 1418 "", »¶y [6], d©a -> u£r_d©a ); 1420 `g_ä“ ( fÜm©‹d ); 1424 dÚe : 1425 ià( num_f›lds <= 0) 1426 d©a -> `»ady_cb (d©a-> u£r_d©a ); 1428  - EINTR ; 1433 } } 1435  $phÚebook_š™ () 1437 `g_th»ad_š™ ( NULL ); 1438 `g_ty³_š™ (); 1441 } } 1443  $phÚebook_ex™ () 1445 } } 1447 * $phÚebook_£t_fÞd” (cÚ¡ * cu¼’t_fÞd” , cÚ¡ * Ãw_fÞd” , 1448 ušt8_t æags , * ”r ) 1450 * tmp1 , * tmp2 , * ba£ , * ·th = NULL ; 1451 gboÞ—n roÙ , chžd ; 1452  »t = 0; 1453  Ën ; 1455 roÙ = ( `g_¡rcmp0 ("/", cu¼’t_fÞd” ) == 0); 1456 chžd = ( Ãw_fÞd” && `¡¾’ (new_folder) != 0); 1458  æags ) { 1461 ià(! chžd ) { 1462 ·th = `g_¡rdup ("/"); 1463  dÚe ; 1466 ·th = `g_bužd_fž’ame ( cu¼’t_fÞd” , Ãw_fÞd” , NULL ); 1470 ià( roÙ ) { 1472 ·th = `g_¡rdup ("/"); 1473  dÚe ; 1482 tmp1 = `g_·th_g‘_ba£Çme ( cu¼’t_fÞd” ); 1483 tmp2 = `g_¡¼¡r ( cu¼’t_fÞd” , tmp1 ); 1484 Ën = tmp2 - ( cu¼’t_fÞd” + 1); 1486 `g_ä“ ( tmp1 ); 1488 ià( Ën == 0) 1489 ba£ = `g_¡rdup ("/"); 1491 ba£ = `g_¡ºdup ( cu¼’t_fÞd” , Ën ); 1494 ià(! chžd ) { 1495 ·th = ba£ ; 1496  dÚe ; 1499 ·th = `g_bužd_fž’ame ( ba£ , Ãw_fÞd” , NULL ); 1500 `g_ä“ ( ba£ ); 1504 »t = - EBADR ; 1508 dÚe : 1509 ià( ·th && ! `fÞd”_is_v®id (path)) 1510 »t = - ENOENT ; 1512 ià( »t < 0) { 1513 `g_ä“ ( ·th ); 1514 ·th = NULL ; 1517 ià( ”r ) 1518 * ”r = »t ; 1520  ·th ; 1521 } } 1523  $puÎ_Ãwmis£dÿÎs (cÚ¡ ** »¶y ,  num_f›lds , 1524 * u£r_d©a ) 1526  phÚebook_d©a * d©a = u£r_d©a ; 1527 »¶y_li¡_fÜ—ch_t puÎ_cb ; 1528  cÞ_amouÁ , ”r ; 1529 cÚ¡ * qu”y ; 1530  nmis£d ; 1532 ià( num_f›lds < 0) { 1533 d©a -> `cb ( NULL , 0, num_f›lds , 0, TRUE , d©a-> u£r_d©a ); 1535  - EINTR ; 1538 ià( »¶y !ð NULL ) { 1539 nmis£d = `©oi ( »¶y [0]); 1540 d©a -> Ãwmis£dÿÎs = 1541 nmis£d <ð UINT8_MAX ?‚missed : UINT8_MAX; 1542 `DBG ("Ãwmis£dÿΠ%d", d©a -> Ãwmis£dÿÎs ); 1547 ià( d©a -> ·¿ms -> maxli¡couÁ == 0) { 1548 qu”y = `Çme2couÁ_qu”y ( PB_CALLS_MISSED ); 1549 cÞ_amouÁ = COUNT_QUERY_COL_AMOUNT ; 1550 puÎ_cb = puÎ_cÚùs_size ; 1552 qu”y = `Çme2qu”y ( PB_CALLS_MISSED ); 1553 cÞ_amouÁ = PULL_QUERY_COL_AMOUNT ; 1554 puÎ_cb = puÎ_cÚùs ; 1557 ”r = `qu”y_Œack” ( qu”y , cÞ_amouÁ , puÎ_cb , d©a ); 1558 ià( ”r < 0) { 1559 d©a -> `cb ( NULL , 0, ”r , 0, TRUE , d©a-> u£r_d©a ); 1561  - EINTR ; 1565 } } 1567  $phÚebook_»q_fš®ize (* »que¡ ) 1569  phÚebook_d©a * d©a = »que¡ ; 1571 `DBG (""); 1573 ià(! d©a ) 1577 ià( d©a -> qu”y_ÿnc ) { 1578 `g_ÿnûÎabË_ÿnûl ( d©a -> qu”y_ÿnc ); 1579 `g_objeù_uÄef ( d©a -> qu”y_ÿnc ); 1582 `ä“_d©a_cÚùs ( d©a ); 1583 `g_ä“ ( d©a -> »q_Çme ); 1584 `g_ä“ ( d©a ); 1585 } } 1587 * $phÚebook_puÎ (cÚ¡ * Çme , cÚ¡  ­·¿m_f›ld * ·¿ms , 1588 phÚebook_cb cb , * u£r_d©a , * ”r ) 1590  phÚebook_d©a * d©a ; 1592 `DBG ("Çm%s", Çme ); 1594 d©a = `g_Ãw0 ( phÚebook_d©a , 1); 1595 d©a -> ·¿ms =…arams; 1596 d©a -> u£r_d©a = user_data; 1597 d©a -> cb = cb; 1598 d©a -> »q_Çme = `g_¡rdup ( Çme ); 1600 ià( ”r ) 1601 * ”r = 0; 1603  d©a ; 1604 } } 1606  $phÚebook_puÎ_»ad (* »que¡ ) 1608  phÚebook_d©a * d©a = »que¡ ; 1609 »¶y_li¡_fÜ—ch_t puÎ_cb ; 1610 cÚ¡ * qu”y ; 1611 * off£t_qu”y ; 1612  cÞ_amouÁ ; 1613  »t ; 1615 ià(! d©a ) 1616  - ENOENT ; 1618 d©a -> Ãwmis£dÿÎs = 0; 1620 ià( `g_¡rcmp0 ( d©a -> »q_Çme , PB_CALLS_MISSED ) == 0 && 1621 d©a -> Œack”_šdex == 0) { 1625 qu”y = NEW_MISSED_CALLS_COUNT_QUERY ; 1626 cÞ_amouÁ = COUNT_QUERY_COL_AMOUNT ; 1627 puÎ_cb = puÎ_Ãwmis£dÿÎs ; 1628 } ià( d©a -> ·¿ms -> maxli¡couÁ == 0) { 1629 qu”y = `Çme2couÁ_qu”y ( d©a -> »q_Çme ); 1630 cÞ_amouÁ = COUNT_QUERY_COL_AMOUNT ; 1631 puÎ_cb = puÎ_cÚùs_size ; 1633 qu”y = `Çme2qu”y ( d©a -> »q_Çme ); 1634 cÞ_amouÁ = PULL_QUERY_COL_AMOUNT ; 1635 puÎ_cb = puÎ_cÚùs ; 1638 ià( qu”y =ð NULL ) 1639  - ENOENT ; 1641 ià( puÎ_cb =ð puÎ_cÚùs && d©a -> Œack”_šdex > 0) { 1645 off£t_qu”y = `g_¡rdup_´štf ( QUERY_OFFSET_FORMAT , qu”y , 1646 d©a -> Œack”_šdex ); 1647 »t = `qu”y_Œack” ( off£t_qu”y , cÞ_amouÁ , puÎ_cb , d©a ); 1649 `g_ä“ ( off£t_qu”y ); 1651  »t ; 1654  `qu”y_Œack” ( qu”y , cÞ_amouÁ , puÎ_cb , d©a ); 1655 } } 1657 * $phÚebook_g‘_’Œy (cÚ¡ * fÞd” , cÚ¡ * id , 1658 cÚ¡  ­·¿m_f›ld * ·¿ms , 1659 phÚebook_cb cb , * u£r_d©a , * ”r ) 1661  phÚebook_d©a * d©a ; 1662 * qu”y ; 1663  »t ; 1665 `DBG ("fÞd” % id %s", fÞd” , id ); 1667 d©a = `g_Ãw0 ( phÚebook_d©a , 1); 1668 d©a -> u£r_d©a = user_data; 1669 d©a -> ·¿ms =…arams; 1670 d©a -> cb = cb; 1671 d©a -> vÿrd’Œy = TRUE ; 1673 ià( `g_¡r_has_´efix ( id , CONTACT_ID_PREFIX è=ð TRUE || 1674 `g_¡rcmp0 ( id , TRACKER_DEFAULT_CONTACT_ME ) == 0) 1675 qu”y = `g_¡rdup_´štf ( CONTACTS_QUERY_FROM_URI , id , id, id, id, 1676 id , id, id, id, id, id, id, id, id); 1677 ià( `g_¡r_has_´efix ( id , CALL_ID_PREFIX è=ð TRUE ) 1678 qu”y = `g_¡rdup_´štf ( CONTACT_FROM_CALL_QUERY , id ); 1680 qu”y = `g_¡rdup_´štf ( CONTACTS_OTHER_QUERY_FROM_URI , 1681 id , id, id); 1683 »t = `qu”y_Œack” ( qu”y , PULL_QUERY_COL_AMOUNT , puÎ_cÚùs , d©a ); 1684 ià( ”r ) 1685 * ”r = »t ; 1687 `g_ä“ ( qu”y ); 1689  d©a ; 1690 } } 1692 * $phÚebook_ü—‹_ÿche (cÚ¡ * Çme , phÚebook_’Œy_cb ’Œy_cb , 1693 phÚebook_ÿche_»ady_cb »ady_cb , * u£r_d©a , * ”r ) 1695  phÚebook_d©a * d©a ; 1696 cÚ¡ * qu”y ; 1697  »t ; 1699 `DBG ("Çm%s", Çme ); 1701 qu”y = `fÞd”2qu”y ( Çme ); 1702 ià( qu”y =ð NULL ) { 1703 ià( ”r ) 1704 * ”r = - ENOENT ; 1705  NULL ; 1708 d©a = `g_Ãw0 ( phÚebook_d©a , 1); 1709 d©a -> ’Œy_cb =ƒntry_cb; 1710 d©a -> »ady_cb =„eady_cb; 1711 d©a -> u£r_d©a = user_data; 1713 »t = `qu”y_Œack” ( qu”y , 8, add_to_ÿche , d©a ); 1714 ià( ”r ) 1715 * ”r = »t ; 1717  d©a ; 1718 } } @obexd/plugins/phonebook.h 24  #EOL "\r\n" ) 25  #VCARD_LISTING_BEGIN \ 26 "" EOL \ 27 "" EOL \ 28 "" EOL ) 29  #VCARD_LISTING_ELEMENT "<ÿrd hªdË = \"%d.vcf\"‚amð\"%s\"/>" EOL ) 30  #VCARD_LISTING_END "" ) 32  #PB_TELECOM_FOLDER "/‹Ëcom" ) 33  #PB_CONTACTS_FOLDER "/‹Ëcom/pb" ) 34  #PB_CALENDAR_FOLDER "/‹Ëcom/ÿl" ) 35  #PB_NOTES_FOLDER "/‹Ëcom/Á" ) 36  #PB_CALLS_COMBINED_FOLDER "/‹Ëcom/cch" ) 37  #PB_CALLS_INCOMING_FOLDER "/‹Ëcom/ich" ) 38  #PB_CALLS_MISSED_FOLDER "/‹Ëcom/mch" ) 39  #PB_CALLS_OUTGOING_FOLDER "/‹Ëcom/och" ) 40  #PB_CALLS_SPEEDDIAL_FOLDER "/‹Ëcom/¥d" ) 41  #PB_CALLS_FAVORITE_FOLDER "/‹Ëcom/çv" ) 42  #PB_LUID_FOLDER "/‹Ëcom/pb/luid" ) 44  #PB_CONTACTS "/‹Ëcom/pb.vcf" ) 45  #PB_CALLS_COMBINED "/‹Ëcom/cch.vcf" ) 46  #PB_CALLS_INCOMING "/‹Ëcom/ich.vcf" ) 47  #PB_CALLS_MISSED "/‹Ëcom/mch.vcf" ) 48  #PB_CALLS_OUTGOING "/‹Ëcom/och.vcf" ) 49  #PB_CALLS_SPEEDDIAL "/‹Ëcom/¥d.vcf" ) 50  #PB_CALLS_FAVORITE "/‹Ëcom/çv.vcf" ) 51  #PB_DEVINFO "/‹Ëcom/devšfo.txt" ) 52  #PB_INFO_LOG "/‹Ëcom/pb/šfo.log" ) 53  #PB_CC_LOG "/‹Ëcom/pb/luid/cc.log" ) 56  s­·¿m_f›ld { 58 ušt16_t mmaxli¡couÁ ; 59 ušt16_t mli¡¡¬toff£t ; 62 ušt64_t mfž‹r ; 63 ušt8_t mfÜm© ; 66 ušt8_t mÜd” ; 67 ušt8_t m£¬ch©Œib ; 68 * m£¬chv® ; 69 #ifdeà __TIZEN_PATCH__ 70 gboÞ—n m»quœed_mis£dÿÎ_ÿÎ_h—d” ; 71 ušt16_t mÃw_mis£d_ÿÎs ; 80 (* tphÚebook_cb è(cÚ¡ * tbufãr , tsize_t tbufsize , 81  tvÿrds ,  tmis£d , tgboÞ—n tÏ¡·¹ , * tu£r_d©a ); 87  #PHONEBOOK_INVALID_HANDLE 0xffffffff ) 88 (* tphÚebook_’Œy_cb è(cÚ¡ * tid , tušt32_t thªdË , 89 cÚ¡ * tÇme , cÚ¡ * tsound , 90 cÚ¡ * t‹l , * tu£r_d©a ); 93 (* tphÚebook_ÿche_þ—r_cb è(* tu£r_d©a ); 100 #iâdeà __TIZEN_PATCH__ 101 (* tphÚebook_ÿche_»ady_cb è(* tu£r_d©a ); 103 (* tphÚebook_ÿche_»ady_cb è(* tu£r_d©a ,  tÃw_mis£d_ÿÎs ); 107  `phÚebook_š™ (); 108  `phÚebook_ex™ (); 110 #ifdeà __TIZEN_PATCH__ 111  `phÚebook_cÚÃù (** u£r_d©a ); 112  `phÚebook_discÚÃù (* u£r_d©a ); 122 * `phÚebook_£t_fÞd” (cÚ¡ * cu¼’t_fÞd” , 123 cÚ¡ * Ãw_fÞd” , ušt8_t æags , * ”r ); 133 * `phÚebook_puÎ (cÚ¡ * Çme , cÚ¡  ­·¿m_f›ld * ·¿ms , 134 phÚebook_cb cb , * u£r_d©a , * ”r ); 146  `phÚebook_puÎ_»ad (* »que¡ ); 157 * `phÚebook_g‘_’Œy (cÚ¡ * fÞd” , cÚ¡ * id , 158 cÚ¡  ­·¿m_f›ld * ·¿ms , 159 phÚebook_cb cb , * u£r_d©a , * ”r ); 171 * `phÚebook_ü—‹_ÿche (cÚ¡ * Çme , phÚebook_’Œy_cb ’Œy_cb , 172 phÚebook_ÿche_»ady_cb »ady_cb , * u£r_d©a , * ”r ); 183  `phÚebook_»q_fš®ize (* »que¡ ); 185 #ifdeà __TIZEN_PATCH__ 186  `phÚebook_£t_ÿche_nÙifiÿtiÚ (* £ssiÚ , 187 phÚebook_ÿche_þ—r_cb ÿche_cb , 188 * u£r_d©a ); @obexd/plugins/syncevolution.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡ršg.h > 30  ~<¡dio.h > 31  ~<”ºo.h > 32  ~ 34  ~ 35  ~ 37  ~ 39  ~ 41  ~"btio/btio.h " 42  ~"¶ugš.h " 43  ~"obex.h " 44  ~"£rviû.h " 45  ~"mim‘y³.h " 46  ~"log.h " 47  ~"mªag”.h " 48  ~"obexd.h " 49  ~"fžesy¡em.h " 51  #SYNCML_TARGET_SIZE 11 ) 53 cÚ¡ ušt8_t gSYNCML_TARGET [ SYNCML_TARGET_SIZE ] = { 57  #SYNCEVOLUTION_CHANNEL 19 ) 59  #SYNCEVOLUTION_RECORD "\ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\"‚ame=\"Çme\"/> \ \ " ) 87  #SYNCE_BUS_NAME "Üg.synûvÞutiÚ" ) 88  #SYNCE_PATH "/Üg/synûvÞutiÚ/S”v”" ) 89  #SYNCE_SERVER_INTERFACE "Üg.synûvÞutiÚ.S”v”" ) 90  #SYNCE_CONN_INTERFACE "Üg.synûvÞutiÚ.CÚÃùiÚ" ) 92  ssynû_cÚ‹xt { 93  obex_£ssiÚ * mos ; 94 DBusCÚÃùiÚ * mdbus_cÚn ; 95 * mcÚn_obj ; 96  m»¶y_w©ch ; 97  mabÜt_w©ch ; 98 GSŒšg * mbufãr ; 99  mÏ¡”r ; 100 * mid ; 103  $­³nd_diù_’Œy ( DBusMes§geI‹r * diù , cÚ¡ * key , 104  ty³ , * v® ) 106 DBusMes§geI‹r ’Œy ; 108 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , 109 NULL , & ’Œy ); 110 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & key ); 111 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & v® ); 112 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & ’Œy ); 113 } } 115  gboÞ—n $»¶y_sigÇl ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 116 * d©a ) 118  synû_cÚ‹xt * cÚ‹xt = d©a ; 119 cÚ¡ * ·th = `dbus_mes§ge_g‘_·th ( msg ); 120 DBusMes§geI‹r ™” , ¬¿y_™” ; 121 * v®ue ; 122  Ëngth ; 124 ià( `¡rcmp ( cÚ‹xt -> cÚn_obj , ·th ) != 0) { 125 `obex_objeù_£t_io_æags ( cÚ‹xt , G_IO_ERR , - EPERM ); 126 cÚ‹xt -> Ï¡”r = - EPERM ; 127  FALSE ; 130 `dbus_mes§ge_™”_š™ ( msg , & ™” ); 132 `dbus_mes§ge_™”_»cur£ (& ™” , & ¬¿y_™” ); 133 `dbus_mes§ge_™”_g‘_fixed_¬¿y (& ¬¿y_™” , & v®ue , & Ëngth ); 135 cÚ‹xt -> bufãr = `g_¡ršg_Ãw_Ën ( v®ue , Ëngth ); 136 `obex_objeù_£t_io_æags ( cÚ‹xt , G_IO_IN , 0); 137 cÚ‹xt -> Ï¡”r = 0; 139  TRUE ; 140 } } 142  gboÞ—n $abÜt_sigÇl ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 143 * d©a ) 145  synû_cÚ‹xt * cÚ‹xt = d©a ; 147 `obex_objeù_£t_io_æags ( cÚ‹xt , G_IO_ERR , - EPERM ); 148 cÚ‹xt -> Ï¡”r = - EPERM ; 150  TRUE ; 151 } } 153  $cÚÃù_cb ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 155  synû_cÚ‹xt * cÚ‹xt = u£r_d©a ; 156 DBusCÚÃùiÚ * cÚn ; 157 DBusMes§ge * »¶y ; 158 DBusE¼Ü ”r ; 159 * ·th ; 161 cÚn = cÚ‹xt -> dbus_cÚn ; 163 »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 165 `dbus_”rÜ_š™ (& ”r ); 166 ià( `dbus_mes§ge_g‘_¬gs ( »¶y , & ”r , DBUS_TYPE_OBJECT_PATH , & ·th , 167 DBUS_TYPE_INVALID è=ð FALSE ) { 168 `”rÜ ("%s", ”r . mes§ge ); 169 `dbus_”rÜ_ä“ (& ”r ); 170  çžed ; 173 `DBG ("GÙ cÚÀobjeù % äom synûvÞutiÚ", ·th ); 174 cÚ‹xt -> cÚn_obj = `g_¡rdup ( ·th ); 176 cÚ‹xt -> »¶y_w©ch = `g_dbus_add_sigÇl_w©ch ( cÚn , NULL , ·th , 177 SYNCE_CONN_INTERFACE , "Reply", 178 »¶y_sigÇl , cÚ‹xt , NULL ); 180 cÚ‹xt -> abÜt_w©ch = `g_dbus_add_sigÇl_w©ch ( cÚn , NULL , ·th , 181 SYNCE_CONN_INTERFACE , "Abort", 182 abÜt_sigÇl , cÚ‹xt , NULL ); 184 `dbus_mes§ge_uÄef ( »¶y ); 188 çžed : 189 `obex_objeù_£t_io_æags ( cÚ‹xt , G_IO_ERR , - EPERM ); 190 cÚ‹xt -> Ï¡”r = - EPERM ; 191 } } 193  $´oûss_cb ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 195  synû_cÚ‹xt * cÚ‹xt = u£r_d©a ; 196 DBusMes§ge * »¶y ; 197 DBusE¼Ü d”r ; 199 »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 200 `dbus_”rÜ_š™ (& d”r ); 201 ià( `dbus_£t_”rÜ_äom_mes§ge (& d”r , »¶y )) { 202 `”rÜ ("process_cb(): syncevolution„eplied with‡nƒrror:" 203 " %s, %s", d”r . Çme , d”r. mes§ge ); 204 `dbus_”rÜ_ä“ (& d”r ); 206 `obex_objeù_£t_io_æags ( cÚ‹xt , G_IO_ERR , - EPERM ); 207 cÚ‹xt -> Ï¡”r = - EPERM ; 208  dÚe ; 211 `obex_objeù_£t_io_æags ( cÚ‹xt , G_IO_OUT , 0); 212 cÚ‹xt -> Ï¡”r = 0; 214 dÚe : 215 `dbus_mes§ge_uÄef ( »¶y ); 216 } } 218 * $synû_cÚÃù ( obex_£ssiÚ * os , * ”r ) 220 DBusCÚÃùiÚ * cÚn ; 221  synû_cÚ‹xt * cÚ‹xt ; 222 * add»ss ; 224 `mªag”_»gi¡”_£ssiÚ ( os ); 226 cÚn = `mªag”_dbus_g‘_cÚÃùiÚ (); 227 ià(! cÚn ) 228  çžed ; 230 cÚ‹xt = `g_Ãw0 ( synû_cÚ‹xt , 1); 231 cÚ‹xt -> dbus_cÚn = cÚn ; 232 cÚ‹xt -> Ï¡”r = - EAGAIN ; 233 cÚ‹xt -> os = os; 235 ià( `obex_g‘³”Çme ( os , & add»ss ) == 0) { 236 cÚ‹xt -> id = `g_¡rdup_´štf ("%s+%d", add»ss , 237 SYNCEVOLUTION_CHANNEL ); 238 `g_ä“ ( add»ss ); 241 ià( ”r ) 242 * ”r = 0; 244  cÚ‹xt ; 246 çžed : 247 ià( ”r ) 248 * ”r = - EPERM ; 250  NULL ; 251 } } 253  $synû_put ( obex_£ssiÚ * os , * u£r_d©a ) 256 } } 258  $synû_g‘ ( obex_£ssiÚ * os , * u£r_d©a ) 260  `obex_g‘_¡»am_¡¬t ( os , NULL ); 261 } } 263  $þo£_cb ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 265 DBusMes§ge * »¶y ; 266 DBusE¼Ü d”r ; 268 »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 269 `dbus_”rÜ_š™ (& d”r ); 270 ià( `dbus_£t_”rÜ_äom_mes§ge (& d”r , »¶y )) { 271 `”rÜ ("close_cb(): syncevolution„eplied with‡nƒrror:" 272 " %s, %s", d”r . Çme , d”r. mes§ge ); 273 `dbus_”rÜ_ä“ (& d”r ); 276 `dbus_mes§ge_uÄef ( »¶y ); 277 } } 279  $synû_discÚÃù ( obex_£ssiÚ * os , * u£r_d©a ) 281  synû_cÚ‹xt * cÚ‹xt = u£r_d©a ; 283 `g_ä“ ( cÚ‹xt ); 284 } } 286 * $synû_Ý’ (cÚ¡ * Çme ,  oæag , mode_t mode , 287 * u£r_d©a , size_t * size , * ”r ) 289  synû_cÚ‹xt * cÚ‹xt = u£r_d©a ; 291 ià( ”r ) 292 * ”r = cÚ‹xt ? 0 : - EFAULT ; 294  u£r_d©a ; 295 } } 297  $synû_þo£ (* objeù ) 299  synû_cÚ‹xt * cÚ‹xt = objeù ; 300 DBusMes§ge * msg ; 301 cÚ¡ * ”rÜ ; 302 gboÞ—n nÜm® ; 303 DBusP’dšgC®l * ÿÎ ; 305 ià(! cÚ‹xt -> cÚn_obj ) 306  dÚe ; 308 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( SYNCE_BUS_NAME , cÚ‹xt -> cÚn_obj , 309 SYNCE_CONN_INTERFACE , "Close"); 310 ià(! msg ) 311  çžed ; 313 nÜm® = TRUE ; 314 ”rÜ = "none"; 315 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_BOOLEAN , & nÜm® , 316 DBUS_TYPE_STRING , & ”rÜ , DBUS_TYPE_INVALID ); 318 `g_dbus_£nd_mes§ge_w™h_»¶y ( cÚ‹xt -> dbus_cÚn , msg , & ÿÎ , -1); 319 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , þo£_cb , NULL , NULL); 320 `dbus_mes§ge_uÄef ( msg ); 321 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 323 çžed : 324 `g_dbus_»move_w©ch ( cÚ‹xt -> dbus_cÚn , cÚ‹xt-> »¶y_w©ch ); 325 cÚ‹xt -> »¶y_w©ch = 0; 326 `g_dbus_»move_w©ch ( cÚ‹xt -> dbus_cÚn , cÚ‹xt-> abÜt_w©ch ); 327 cÚ‹xt -> abÜt_w©ch = 0; 329 `g_ä“ ( cÚ‹xt -> cÚn_obj ); 330 cÚ‹xt -> cÚn_obj = NULL ; 332 dÚe : 333 `dbus_cÚÃùiÚ_uÄef ( cÚ‹xt -> dbus_cÚn ); 334 `g_ä“ ( cÚ‹xt ); 336 } } 338  ssize_t $synû_»ad (* objeù , * buf , size_t couÁ ) 340  synû_cÚ‹xt * cÚ‹xt = objeù ; 341 DBusCÚÃùiÚ * cÚn ; 342  Œª¥Üt [36], Œª¥Üt_desütiÚ [24]; 343 cÚ¡ * £ssiÚ ; 344 DBusMes§ge * msg ; 345 DBusMes§geI‹r ™” , diù ; 346 gboÞ—n auth’tiÿ‹ ; 347 DBusP’dšgC®l * ÿÎ ; 349 ià( cÚ‹xt -> bufãr ) 350  `¡ršg_»ad ( cÚ‹xt -> bufãr , buf , couÁ ); 352 cÚn = `mªag”_dbus_g‘_cÚÃùiÚ (); 353 ià( cÚn =ð NULL ) 354  - EPERM ; 356 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( SYNCE_BUS_NAME , SYNCE_PATH , 357 SYNCE_SERVER_INTERFACE , "Connect"); 358 ià(! msg ) 359  - EPERM ; 361 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 362 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 363 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 364 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_STRING_AS_STRING 365 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 367 `­³nd_diù_’Œy (& diù , "id", DBUS_TYPE_STRING , cÚ‹xt -> id ); 369 `¢´štf ( Œª¥Üt , Ñ¿n¥Üt), "%s.obexd", OBEXD_SERVICE ); 370 `­³nd_diù_’Œy (& diù , "Œª¥Üt", DBUS_TYPE_STRING , Œª¥Üt ); 372 `¢´štf ( Œª¥Üt_desütiÚ , (transport_description), 373 "v”siÚ %s", VERSION ); 374 `­³nd_diù_’Œy (& diù , "Œª¥Üt_desütiÚ", DBUS_TYPE_STRING , 375 Œª¥Üt_desütiÚ ); 377 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & diù ); 379 auth’tiÿ‹ = FALSE ; 380 £ssiÚ = ""; 381 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_BOOLEAN , & auth’tiÿ‹ , 382 DBUS_TYPE_STRING , & £ssiÚ , DBUS_TYPE_INVALID ); 384 ià(! `g_dbus_£nd_mes§ge_w™h_»¶y ( cÚn , msg , & ÿÎ , -1)) { 385 `”rÜ ("D-Bu ÿÎØ% çžed.", SYNCE_SERVER_INTERFACE ); 386 `dbus_mes§ge_uÄef ( msg ); 387  - EPERM ; 390 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , cÚÃù_cb , cÚ‹xt , NULL ); 392 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 393 `dbus_mes§ge_uÄef ( msg ); 395  - EAGAIN ; 396 } } 398  ssize_t $synû_wr™e (* objeù , cÚ¡ * buf , size_t couÁ ) 400  synû_cÚ‹xt * cÚ‹xt = objeù ; 401 DBusMes§ge * msg ; 402 DBusMes§geI‹r ™” , ¬¿y_™” ; 403 DBusP’dšgC®l * ÿÎ ; 404 cÚ¡ * ty³ = `obex_g‘_ty³ ( cÚ‹xt -> os ); 406 ià( cÚ‹xt -> Ï¡”r == 0) 407  couÁ ; 409 ià(! cÚ‹xt -> cÚn_obj ) 410  - EFAULT ; 412 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( SYNCE_BUS_NAME , cÚ‹xt -> cÚn_obj , 413 SYNCE_CONN_INTERFACE , "Process"); 414 ià(! msg ) 415  - EFAULT ; 417 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 418 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 419 DBUS_TYPE_BYTE_AS_STRING , & ¬¿y_™” ); 421 `dbus_mes§ge_™”_­³nd_fixed_¬¿y (& ¬¿y_™” , DBUS_TYPE_BYTE , 422 & buf , couÁ ); 423 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & ¬¿y_™” ); 425 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_STRING , & ty³ , 426 DBUS_TYPE_INVALID ); 428 ià(! `g_dbus_£nd_mes§ge_w™h_»¶y ( cÚ‹xt -> dbus_cÚn , msg , 429 & ÿÎ , -1)) { 430 `”rÜ ("D-Bu ÿÎØ% çžed.", SYNCE_CONN_INTERFACE ); 431 `dbus_mes§ge_uÄef ( msg ); 432  - EPERM ; 435 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , ´oûss_cb , cÚ‹xt , NULL ); 437 `dbus_mes§ge_uÄef ( msg ); 438 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 440  - EAGAIN ; 441 } } 443  obex_mime_ty³_driv” gsynû_driv” = { 444 . rg‘ = SYNCML_TARGET , 445 . grg‘_size = SYNCML_TARGET_SIZE , 446 . gÝ’ = synû_Ý’ , 447 . gþo£ = synû_þo£ , 448 . g»ad = synû_»ad , 449 . gwr™e = synû_wr™e , 452  obex_£rviû_driv” gsynû = { 453 . Çme = "OBEX server for SyncML, using SyncEvolution", 454 . g£rviû = OBEX_SYNCEVOLUTION , 455 . gchªÃl = SYNCEVOLUTION_CHANNEL , 456 . g£cu» = TRUE , 457 . g»cÜd = SYNCEVOLUTION_RECORD , 458 . grg‘ = SYNCML_TARGET , 459 . grg‘_size = SYNCML_TARGET_SIZE , 460 . gg‘ = synû_g‘ , 461 . gput = synû_put , 462 . gcÚÃù = synû_cÚÃù , 463 . gdiscÚÃù = synû_discÚÃù , 466  $synû_š™ () 468  ”r ; 470 ”r = `obex_mime_ty³_driv”_»gi¡” (& synû_driv” ); 471 ià( ”r < 0) 472  ”r ; 474  `obex_£rviû_driv”_»gi¡” (& synû ); 475 } } 477  $synû_ex™ () 479 `obex_£rviû_driv”_uÄegi¡” (& synû ); 480 `obex_mime_ty³_driv”_uÄegi¡” (& synû_driv” ); 481 } } 483 OBEX_PLUGIN_DEFINE ( synûvÞutiÚ , synû_š™ , synû_ex™ ) @obexd/plugins/vcard.c 22 #ifdeà HAVE_CONFIG_H 23  ~ 26  ~<¡ršg.h > 27  ~<¡dio.h > 28  ~<¡dlib.h > 29  ~<¡dšt.h > 30  ~<ùy³.h > 31  ~<”ºo.h > 33  ~ 34  ~ 36  ~"vÿrd.h " 38  #ADDR_FIELD_AMOUNT 7 ) 39  #LEN_MAX 128 ) 40  #TYPE_INTERNATIONAL 145 ) 42  #PHONEBOOK_FLAG_CACHED 0x1 ) 44  #FILTER_VERSION (1 << 0) ) 45  #FILTER_FN (1 << 1) ) 46  #FILTER_N (1 << 2) ) 47  #FILTER_PHOTO (1 << 3) ) 48  #FILTER_BDAY (1 << 4) ) 49  #FILTER_ADR (1 << 5) ) 50  #FILTER_LABEL (1 << 6) ) 51  #FILTER_TEL (1 << 7) ) 52  #FILTER_EMAIL (1 << 8) ) 53  #FILTER_MAILER (1 << 9) ) 54  #FILTER_TZ (1 << 10) ) 55  #FILTER_GEO (1 << 11) ) 56  #FILTER_TITLE (1 << 12) ) 57  #FILTER_ROLE (1 << 13) ) 58  #FILTER_LOGO (1 << 14) ) 59  #FILTER_AGENT (1 << 15) ) 60  #FILTER_ORG (1 << 16) ) 61  #FILTER_NOTE (1 << 17) ) 62  #FILTER_REV (1 << 18) ) 63  #FILTER_SOUND (1 << 19) ) 64  #FILTER_URL (1 << 20) ) 65  #FILTER_UID (1 << 21) ) 66  #FILTER_KEY (1 << 22) ) 67  #FILTER_NICKNAME (1 << 23) ) 68  #FILTER_CATEGORIES (1 << 24) ) 69  #FILTER_PROID (1 << 25) ) 70  #FILTER_CLASS (1 << 26) ) 71  #FILTER_SORT_STRING (1 << 27) ) 72  #FILTER_X_IRMC_CALL_DATETIME (1 << 28) ) 74  #FORMAT_VCARD21 0x00 ) 75  #FORMAT_VCARD30 0x01 ) 77  #QP_LINE_LEN 75 ) 78  #QP_CHAR_LEN 3 ) 79  #QP_CR 0x0D ) 80  #QP_LF 0x0A ) 81  #QP_ESC 0x5C ) 82  #QP_SOFT_LINE_BREAK "=" ) 83  #QP_SELECT "\n!\"#$=@[\\]^`{|}~" ) 84  #ASCII_LIMIT 0x7F ) 87  $vÿrd_´štf ( GSŒšg * ¡r , cÚ¡ * fmt , ...) 89  buf [1024]; 90 va_li¡ ­ ; 91  Ën_‹mp , lše_numb” , i ; 92  lše_d–im™ = 75; 94 `va_¡¬t ( ­ , fmt ); 95 `v¢´štf ( buf , (buf), fmt , ­ ); 96 `va_’d ( ­ ); 98 lše_numb” = `¡¾’ ( buf è/ lše_d–im™ + 1; 100  i = 0; i < lše_numb” ; i++) { 101 Ën_‹mp = `MIN ( lše_d–im™ , `¡¾’ ( buf è-†še_d–im™ * i ); 102 `g_¡ršg_­³nd_Ën ( ¡r , buf + lše_d–im™ * i , Ën_‹mp ); 103 ià( i !ð lše_numb” - 1) 104 `g_¡ršg_­³nd ( ¡r , "\r\n "); 107 `g_¡ršg_­³nd ( ¡r , "\r\n"); 108 } } 113  $add_¦ash (* de¡ , cÚ¡ * ¤c ,  Ën_max ,  Ën ) 115  i , j ; 117  i = 0, j = 0; i < Ën && j + 1 < Ën_max ; i++, j++) { 120  ¤c [ i ]) { 122 ià( j + 2 >ð Ën_max ) 126  dÚe ; 128 de¡ [ j ++] = '\\'; 129 de¡ [ j ] = 'n'; 132 ià( j + 2 >ð Ën_max ) 133  dÚe ; 135 de¡ [ j ++] = '\\'; 136 de¡ [ j ] = 'r'; 141 ià( j + 2 >ð Ën_max ) 142  dÚe ; 144 de¡ [ j ++] = '\\'; 146 de¡ [ j ] = ¤c [ i ]; 151 dÚe : 152 de¡ [ j ] = 0; 153 } } 155  $esÿ³_£micÞÚ (* de¡ , cÚ¡ * ¤c ,  Ën_max ,  Ën ) 157  i , j ; 159  i = 0, j = 0; i < Ën && j + 1 < Ën_max ; i++, j++) { 160 ià( ¤c [ i ] == ';') { 161 ià( j + 2 >ð Ën_max ) 164 de¡ [ j ++] = '\\'; 167 de¡ [ j ] = ¤c [ i ]; 170 de¡ [ j ] = 0; 171 } } 173  $£t_esÿ³ ( ušt8_t fÜm© , * de¡ , cÚ¡ * ¤c , 174  Ën_max ,  Ën ) 176 ià( fÜm© =ð FORMAT_VCARD30 ) 177 `add_¦ash ( de¡ , ¤c , Ën_max , Ën ); 178 ià( fÜm© =ð FORMAT_VCARD21 ) 179 `esÿ³_£micÞÚ ( de¡ , ¤c , Ën_max , Ën ); 180 } } 182  $g‘_esÿ³d_f›lds ( ušt8_t fÜm© , ** f›lds , ...) 184 va_li¡ ­ ; 185 GSŒšg * lše ; 186 * f›ld ; 187  esÿ³d [ LEN_MAX ]; 189 `va_¡¬t ( ­ , f›lds ); 190 lše = `g_¡ršg_Ãw (""); 192  f›ld = `va_¬g ( ­ , *); field; ) { 193 `£t_esÿ³ ( fÜm© , esÿ³d , f›ld , LEN_MAX , `¡¾’ (field)); 194 `g_¡ršg_­³nd ( lše , esÿ³d ); 196 f›ld = `va_¬g ( ­ , *); 198 ià( f›ld ) 199 `g_¡ršg_­³nd ( lše , ";"); 202 `va_’d ( ­ ); 204 * f›lds = `g_¡ršg_ä“ ( lše , FALSE ); 205 } } 207  gboÞ—n $£t_qp_’codšg ( c ) 209  q = c ; 211 ià( `¡rchr ( QP_SELECT , q è!ð NULL ) 212  TRUE ; 214 ià( q < '!' || q > '~') 215  TRUE ; 217  FALSE ; 218 } } 220  $­³nd_qp_b»ak_lše ( GSŒšg * vÿrds , size_t * lim™ ) 225 `g_¡ršg_­³nd ( vÿrds , QP_SOFT_LINE_BREAK ); 226 `g_¡ršg_­³nd ( vÿrds , "\r\n "); 227 * lim™ = QP_LINE_LEN - 1; 228 } } 230  $­³nd_qp_ascii ( GSŒšg * vÿrds , size_t * lim™ ,  c ) 232 ià(* lim™ == 0) 233 `­³nd_qp_b»ak_lše ( vÿrds , lim™ ); 235 `g_¡ršg_­³nd_c ( vÿrds , c ); 236 --* lim™ ; 237 } } 239  $­³nd_qp_hex ( GSŒšg * vÿrds , size_t * lim™ ,  c ) 241 ià(* lim™ < QP_CHAR_LEN ) 242 `­³nd_qp_b»ak_lše ( vÿrds , lim™ ); 244 `g_¡ršg_­³nd_´štf ( vÿrds , "=%2.2X", (è c ); 245 * lim™ -ð QP_CHAR_LEN ; 246 } } 248  $­³nd_qp_Ãw_lše ( GSŒšg * vÿrds , size_t * lim™ ) 253 `­³nd_qp_hex ( vÿrds , lim™ , QP_CR ); 254 `­³nd_qp_hex ( vÿrds , lim™ , QP_LF ); 255 `­³nd_qp_b»ak_lše ( vÿrds , lim™ ); 256 } } 258  gboÞ—n $utf8_£Ëù (cÚ¡ * f›ld ) 260 cÚ¡ * pos ; 262 ià( `g_utf8_v®id©e ( f›ld , -1, NULL è=ð FALSE ) 263  FALSE ; 265  pos = f›ld ; *po !ð'\0';…o ð `g_utf8_Ãxt_ch¬ (pos)) { 269 ià( `g_utf8_g‘_ch¬ ( pos è> ASCII_LIMIT ) 270  TRUE ; 273  FALSE ; 274 } } 276  $vÿrd_qp_´št_’coded ( GSŒšg * vÿrds , cÚ¡ * desc , ...) 278 cÚ¡ * f›ld , * ch¬£t = ""; 279 cÚ¡ * ’codšg = ";ENCODING=QUOTED-PRINTABLE"; 280 size_t lim™ , ·¿m_Ën ; 281 va_li¡ ­ ; 283 `va_¡¬t ( ­ , desc ); 285  f›ld = `va_¬g ( ­ , *); field; field = va_arg(ap, *)) { 286 ià( `utf8_£Ëù ( f›ld è=ð TRUE ) { 287 ch¬£t = ";CHARSET=UTF-8"; 292 `va_’d ( ­ ); 294 `vÿrd_´štf ( vÿrds , "%s%s%s:", desc , ’codšg , ch¬£t ); 295 `g_¡ršg_Œunÿ‹ ( vÿrds , vÿrds-> Ën - 2); 297 ·¿m_Ën = `¡¾’ ( desc è+ sŒËn( ’codšg è+ sŒËn( ch¬£t ) + 1; 298 lim™ = QP_LINE_LEN - ·¿m_Ën ; 300 `va_¡¬t ( ­ , desc ); 302  f›ld = `va_¬g ( ­ , *); f›ld !ð NULL ; ) { 303 size_t i , size = `¡¾’ ( f›ld ); 305  i = 0; i < size ; ++i) { 306 ià( `£t_qp_’codšg ( f›ld [ i ])) { 307 ià( f›ld [ i ] == '\n') { 308 `­³nd_qp_Ãw_lše ( vÿrds , & lim™ ); 312 `­³nd_qp_hex ( vÿrds , & lim™ , f›ld [ i ]); 316 ià( f›ld [ i ] == ';') 317 `­³nd_qp_hex ( vÿrds , & lim™ , QP_ESC ); 319 `­³nd_qp_ascii ( vÿrds , & lim™ , f›ld [ i ]); 323 f›ld = `va_¬g ( ­ , *); 324 ià( f›ld ) 325 `­³nd_qp_ascii ( vÿrds , & lim™ , ';'); 328 `va_’d ( ­ ); 330 `g_¡ršg_­³nd ( vÿrds , "\r\n"); 331 } } 333  gboÞ—n $£Ëù_qp_’codšg ( ušt8_t fÜm© , ...) 335 * f›ld ; 336 va_li¡ ­ ; 338 ià( fÜm© !ð FORMAT_VCARD21 ) 339  FALSE ; 341 `va_¡¬t ( ­ , fÜm© ); 343  f›ld = `va_¬g ( ­ , *); field; field = va_arg(ap, *)) { 344  i ; 345  c ; 347 ià( `¡½brk ( f›ld , QP_SELECT )) { 348 `va_’d ( ­ ); 349  TRUE ; 356  i = 0; ( c = f›ld [i]) != '\0'; ++i) { 357 ià( c > ASCII_LIMIT ) { 358 `va_’d ( ­ ); 359  TRUE ; 364 `va_’d ( ­ ); 366  FALSE ; 367 } } 369  $vÿrd_´štf_begš ( GSŒšg * vÿrds , ušt8_t fÜm© ) 371 `vÿrd_´štf ( vÿrds , "BEGIN:VCARD"); 373 ià( fÜm© =ð FORMAT_VCARD30 ) 374 `vÿrd_´štf ( vÿrds , "VERSION:3.0"); 375 ià( fÜm© =ð FORMAT_VCARD21 ) 376 `vÿrd_´štf ( vÿrds , "VERSION:2.1"); 377 } } 380  gboÞ—n $cÚù_f›lds_´e£Á ( phÚebook_cÚù * cÚù ) 382 ià( cÚù -> çmžy && `¡¾’ (contact->family) > 0) 383  TRUE ; 385 ià( cÚù -> giv’ && `¡¾’ (contact->given) > 0) 386  TRUE ; 388 ià( cÚù -> add™iÚ® && `¡¾’ (contact->additional) > 0) 389  TRUE ; 391 ià( cÚù -> ´efix && `¡¾’ (contact->prefix) > 0) 392  TRUE ; 394 ià( cÚù -> suffix && `¡¾’ (contact->suffix) > 0) 395  TRUE ; 398  FALSE ; 399 } } 401  $vÿrd_´štf_Çme ( GSŒšg * vÿrds , ušt8_t fÜm© , 402  phÚebook_cÚù * cÚù ) 404 * f›lds ; 406 ià( `cÚù_f›lds_´e£Á ( cÚù è=ð FALSE ) { 414 `vÿrd_´štf ( vÿrds , "N:"); 418 ià( `£Ëù_qp_’codšg ( fÜm© , cÚù -> çmžy , cÚù-> giv’ , 419 cÚù -> add™iÚ® , cÚù-> ´efix , 420 cÚù -> suffix , NULL )) { 421 `vÿrd_qp_´št_’coded ( vÿrds , "N", cÚù -> çmžy , 422 cÚù -> giv’ , cÚù-> add™iÚ® , 423 cÚù -> ´efix , cÚù-> suffix , 424 NULL ); 428 `g‘_esÿ³d_f›lds ( fÜm© , & f›lds , cÚù -> çmžy , 429 cÚù -> giv’ , cÚù-> add™iÚ® , 430 cÚù -> ´efix , cÚù-> suffix , 431 NULL ); 433 `vÿrd_´štf ( vÿrds , "N:%s", f›lds ); 435 `g_ä“ ( f›lds ); 436 } } 438  $vÿrd_´štf_fuÎÇme ( GSŒšg * vÿrds , ušt8_t fÜm© , 439 cÚ¡ * ‹xt ) 441  f›ld [ LEN_MAX ]; 443 ià(! ‹xt || `¡¾’ (text) == 0) { 444 `vÿrd_´štf ( vÿrds , "FN:"); 448 ià( `£Ëù_qp_’codšg ( fÜm© , ‹xt , NULL )) { 449 `vÿrd_qp_´št_’coded ( vÿrds , "FN", ‹xt , NULL ); 453 `£t_esÿ³ ( fÜm© , f›ld , ‹xt , LEN_MAX , `¡¾’ (text)); 454 `vÿrd_´štf ( vÿrds , "FN:%s", f›ld ); 455 } } 457  $vÿrd_´štf_numb” ( GSŒšg * vÿrds , ušt8_t fÜm© , 458 cÚ¡ * numb” ,  ty³ , 459 phÚebook_numb”_ty³ ÿ‹gÜy ) 461 cÚ¡ * šŽ = "", * ÿ‹gÜy_¡ršg = ""; 462  buf [ LEN_MAX ], f›ld [LEN_MAX]; 465 ià(! numb” || ! `¡¾’ Òumb”è|| ! ty³ ) { 466 `vÿrd_´štf ( vÿrds , "TEL:"); 470  ÿ‹gÜy ) { 471  TEL_TYPE_HOME : 472 ià( fÜm© =ð FORMAT_VCARD21 ) 473 ÿ‹gÜy_¡ršg = "HOME;VOICE"; 474 ià( fÜm© =ð FORMAT_VCARD30 ) 475 ÿ‹gÜy_¡ršg = "TYPE=HOME;TYPE=VOICE"; 477  TEL_TYPE_MOBILE : 478 ià( fÜm© =ð FORMAT_VCARD21 ) 479 ÿ‹gÜy_¡ršg = "CELL;VOICE"; 480 ià( fÜm© =ð FORMAT_VCARD30 ) 481 ÿ‹gÜy_¡ršg = "TYPE=CELL;TYPE=VOICE"; 483  TEL_TYPE_FAX : 484 ià( fÜm© =ð FORMAT_VCARD21 ) 485 ÿ‹gÜy_¡ršg = "FAX"; 486 ià( fÜm© =ð FORMAT_VCARD30 ) 487 ÿ‹gÜy_¡ršg = "TYPE=FAX"; 489  TEL_TYPE_WORK : 490 ià( fÜm© =ð FORMAT_VCARD21 ) 491 ÿ‹gÜy_¡ršg = "WORK;VOICE"; 492 ià( fÜm© =ð FORMAT_VCARD30 ) 493 ÿ‹gÜy_¡ršg = "TYPE=WORK;TYPE=VOICE"; 495  TEL_TYPE_OTHER : 496 ià( fÜm© =ð FORMAT_VCARD21 ) 497 ÿ‹gÜy_¡ršg = "OTHER;VOICE"; 498 ià( fÜm© =ð FORMAT_VCARD30 ) 499 ÿ‹gÜy_¡ršg = "TYPE=OTHER;TYPE=VOICE"; 503 ià(( ty³ =ð TYPE_INTERNATIONAL è&& ( numb” [0] != '+')) 504 šŽ = "+"; 506 `¢´štf ( f›ld , (f›ld), "%s%s", šŽ , numb” ); 508 ià( `£Ëù_qp_’codšg ( fÜm© , numb” , NULL )) { 509 `¢´štf ( buf , (buf), "TEL;%s", ÿ‹gÜy_¡ršg ); 510 `vÿrd_qp_´št_’coded ( vÿrds , buf , f›ld , NULL ); 514 `vÿrd_´štf ( vÿrds , "TEL;%s:%s", ÿ‹gÜy_¡ršg , f›ld ); 515 } } 517  $vÿrd_´štf_g ( GSŒšg * vÿrds , ušt8_t fÜm© , 518 cÚ¡ * g , cÚ¡ * ÿ‹gÜy , 519 cÚ¡ * æd ) 521  Ën ; 522 * £·¿tÜ = "", * ty³ = ""; 523  buf [ LEN_MAX ], f›ld [LEN_MAX]; 525 ià( g =ð NULL || `¡¾’ (tag) == 0) 528 ià( æd =ð NULL || ( Ën = `¡¾’ (fld)) == 0) { 529 `vÿrd_´štf ( vÿrds , "%s:", g ); 533 ià( ÿ‹gÜy && `¡¾’ (category)) { 534 £·¿tÜ = ";"; 535 ià( fÜm© =ð FORMAT_VCARD30 ) 536 ty³ = "TYPE="; 538 ÿ‹gÜy = ""; 541 `¢´štf ( buf , LEN_MAX , "%s%s%s%s", g , £·¿tÜ , ty³ , ÿ‹gÜy ); 543 ià( `£Ëù_qp_’codšg ( fÜm© , æd , NULL )) { 544 `vÿrd_qp_´št_’coded ( vÿrds , buf , æd , NULL ); 548 `£t_esÿ³ ( fÜm© , f›ld , æd , LEN_MAX , Ën ); 549 `vÿrd_´štf ( vÿrds , "%s:%s", buf , f›ld ); 550 } } 552  $vÿrd_´štf_emaž ( GSŒšg * vÿrds , ušt8_t fÜm© , 553 cÚ¡ * add»ss , 554 phÚebook_f›ld_ty³ ÿ‹gÜy ) 556 cÚ¡ * ÿ‹gÜy_¡ršg = ""; 557  buf [ LEN_MAX ], f›ld [LEN_MAX]; 558  Ën = 0; 560 ià(! add»ss || !( Ën = `¡¾’ (address))) { 561 `vÿrd_´štf ( vÿrds , "EMAIL:"); 564  ÿ‹gÜy ) { 565  FIELD_TYPE_HOME : 566 ià( fÜm© =ð FORMAT_VCARD21 ) 567 ÿ‹gÜy_¡ršg = "INTERNET;HOME"; 568 ià( fÜm© =ð FORMAT_VCARD30 ) 569 ÿ‹gÜy_¡ršg = "TYPE=INTERNET;TYPE=HOME"; 571  FIELD_TYPE_WORK : 572 ià( fÜm© =ð FORMAT_VCARD21 ) 573 ÿ‹gÜy_¡ršg = "INTERNET;WORK"; 574 ià( fÜm© =ð FORMAT_VCARD30 ) 575 ÿ‹gÜy_¡ršg = "TYPE=INTERNET;TYPE=WORK"; 577  FIELD_TYPE_OTHER : 579 ià( fÜm© =ð FORMAT_VCARD21 ) 580 ÿ‹gÜy_¡ršg = "INTERNET"; 581 ià( fÜm© =ð FORMAT_VCARD30 ) 582 ÿ‹gÜy_¡ršg = "TYPE=INTERNET;TYPE=OTHER"; 585 ià( `£Ëù_qp_’codšg ( fÜm© , add»ss , NULL )) { 586 `¢´štf ( buf , (buf), "EMAIL;%s", ÿ‹gÜy_¡ršg ); 587 `vÿrd_qp_´št_’coded ( vÿrds , buf , add»ss , NULL ); 591 `£t_esÿ³ ( fÜm© , f›ld , add»ss , LEN_MAX , Ën ); 592 `vÿrd_´štf ( vÿrds , "EMAIL;%s:%s", ÿ‹gÜy_¡ršg , f›ld ); 593 } } 595  $vÿrd_´štf_u¾ ( GSŒšg * vÿrds , ušt8_t fÜm© , 596 cÚ¡ * u¾ , 597 phÚebook_f›ld_ty³ ÿ‹gÜy ) 599 cÚ¡ * ÿ‹gÜy_¡ršg = ""; 600  buf [ LEN_MAX ], f›ld [LEN_MAX]; 602 ià(! u¾ || `¡¾’ (url) == 0) { 603 `vÿrd_´štf ( vÿrds , "URL:"); 607  ÿ‹gÜy ) { 608  FIELD_TYPE_HOME : 609 ià( fÜm© =ð FORMAT_VCARD21 ) 610 ÿ‹gÜy_¡ršg = "INTERNET;HOME"; 611 ià( fÜm© =ð FORMAT_VCARD30 ) 612 ÿ‹gÜy_¡ršg = "TYPE=INTERNET;TYPE=HOME"; 614  FIELD_TYPE_WORK : 615 ià( fÜm© =ð FORMAT_VCARD21 ) 616 ÿ‹gÜy_¡ršg = "INTERNET;WORK"; 617 ià( fÜm© =ð FORMAT_VCARD30 ) 618 ÿ‹gÜy_¡ršg = "TYPE=INTERNET;TYPE=WORK"; 620  FIELD_TYPE_OTHER : 622 ià( fÜm© =ð FORMAT_VCARD21 ) 623 ÿ‹gÜy_¡ršg = "INTERNET"; 624 ià( fÜm© =ð FORMAT_VCARD30 ) 625 ÿ‹gÜy_¡ršg = "TYPE=INTERNET"; 629 ià( `£Ëù_qp_’codšg ( fÜm© , u¾ , NULL )) { 630 `¢´štf ( buf , (buf), "URL;%s", ÿ‹gÜy_¡ršg ); 631 `vÿrd_qp_´št_’coded ( vÿrds , buf , u¾ , NULL ); 635 `£t_esÿ³ ( fÜm© , f›ld , u¾ , LEN_MAX , `¡¾’ (url)); 636 `vÿrd_´štf ( vÿrds , "URL;%s:%s", ÿ‹gÜy_¡ršg , f›ld ); 637 } } 639  gboÞ—n $Üg_f›lds_´e£Á ( phÚebook_cÚù * cÚù ) 641 ià( cÚù -> com·ny && `¡¾’ (contact->company)) 642  TRUE ; 644 ià( cÚù -> d•¬tm’t && `¡¾’ (contact->department)) 645  TRUE ; 647  FALSE ; 648 } } 650  $vÿrd_´štf_Üg ( GSŒšg * vÿrds , ušt8_t fÜm© , 651  phÚebook_cÚù * cÚù ) 653 * f›lds ; 655 ià( `Üg_f›lds_´e£Á ( cÚù è=ð FALSE ) 658 ià( `£Ëù_qp_’codšg ( fÜm© , cÚù -> com·ny , 659 cÚù -> d•¬tm’t , NULL )) { 660 `vÿrd_qp_´št_’coded ( vÿrds , "ORG", cÚù -> com·ny , 661 cÚù -> d•¬tm’t , NULL ); 665 `g‘_esÿ³d_f›lds ( fÜm© , & f›lds , cÚù -> com·ny , 666 cÚù -> d•¬tm’t , NULL ); 668 `vÿrd_´štf ( vÿrds , "ORG:%s", f›lds ); 670 `g_ä“ ( f›lds ); 671 } } 673  $vÿrd_´štf_add»ss ( GSŒšg * vÿrds , ušt8_t fÜm© , 674  phÚebook_addr * add»ss ) 676 * f›lds , f›ld_esc [ LEN_MAX ]; 677 cÚ¡ * ÿ‹gÜy_¡ršg = ""; 678  buf [ LEN_MAX ], * add»ss_f›lds [ ADDR_FIELD_AMOUNT ]; 679  i ; 680 size_t Ën ; 681 GSLi¡ * l ; 683 ià(! add»ss ) { 684 `vÿrd_´štf ( vÿrds , "ADR:"); 688  add»ss -> ty³ ) { 689  FIELD_TYPE_HOME : 690 ià( fÜm© =ð FORMAT_VCARD21 ) 691 ÿ‹gÜy_¡ršg = "HOME"; 692 ià( fÜm© =ð FORMAT_VCARD30 ) 693 ÿ‹gÜy_¡ršg = "TYPE=HOME"; 695  FIELD_TYPE_WORK : 696 ià( fÜm© =ð FORMAT_VCARD21 ) 697 ÿ‹gÜy_¡ršg = "WORK"; 698 ià( fÜm© =ð FORMAT_VCARD30 ) 699 ÿ‹gÜy_¡ršg = "TYPE=WORK"; 702 ià( fÜm© =ð FORMAT_VCARD21 ) 703 ÿ‹gÜy_¡ršg = "OTHER"; 704 ià( fÜm© =ð FORMAT_VCARD30 ) 705 ÿ‹gÜy_¡ršg = "TYPE=OTHER"; 709  i = 0, l = add»ss -> f›lds ;†;† =†-> Ãxt ) 710 add»ss_f›lds [ i ++] = l -> d©a ; 712 ià( `£Ëù_qp_’codšg ( fÜm© , add»ss_f›lds [0],‡ddress_fields[1], 713 add»ss_f›lds [2],‡ddress_fields[3], 714 add»ss_f›lds [4],‡ddress_fields[5], 715 add»ss_f›lds [6], NULL )) { 716 `¢´štf ( buf , (buf), "ADR;%s", ÿ‹gÜy_¡ršg ); 717 `vÿrd_qp_´št_’coded ( vÿrds , buf , 718 add»ss_f›lds [0],‡ddress_fields[1], 719 add»ss_f›lds [2],‡ddress_fields[3], 720 add»ss_f›lds [4],‡ddress_fields[5], 721 add»ss_f›lds [6], NULL ); 727 Ën = ADDR_FIELD_AMOUNT * LEN_MAX ; 728 f›lds = `g_m®loc0 ( Ën ); 730  l = add»ss -> f›lds ;†;† =†-> Ãxt ) { 731 * f›ld = l -> d©a ; 733 ià( f›ld ) { 734 `£t_esÿ³ ( fÜm© , f›ld_esc , f›ld , LEN_MAX , 735 `¡¾’ ( f›ld )); 736 `g_¡¾ÿt ( f›lds , f›ld_esc , Ën ); 739 ià( l -> Ãxt ) 741 `g_¡¾ÿt ( f›lds , ";", Ën ); 744 `vÿrd_´štf ( vÿrds ,"ADR;%s:%s", ÿ‹gÜy_¡ršg , f›lds ); 746 `g_ä“ ( f›lds ); 747 } } 749  $vÿrd_´štf_d©‘ime ( GSŒšg * vÿrds , ušt8_t fÜm© , 750  phÚebook_cÚù * cÚù ) 752 cÚ¡ * ty³ ; 753  buf [ LEN_MAX ]; 755  cÚù -> ÿÎty³ ) { 756  CALL_TYPE_MISSED : 757 ty³ = "MISSED"; 760  CALL_TYPE_INCOMING : 761 ty³ = "RECEIVED"; 764  CALL_TYPE_OUTGOING : 765 ty³ = "DIALED"; 768  CALL_TYPE_NOT_A_CALL : 773 ià( `£Ëù_qp_’codšg ( fÜm© , cÚù -> d©‘ime , NULL )) { 774 `¢´štf ( buf , (buf), "X-IRMC-CALL-DATETIME;%s", ty³ ); 775 `vÿrd_qp_´št_’coded ( vÿrds , buf , cÚù -> d©‘ime , NULL ); 779 `vÿrd_´štf ( vÿrds , "X-IRMC-CALL-DATETIME;%s:%s", ty³ , 780 cÚù -> d©‘ime ); 781 } } 783  $vÿrd_´štf_’d ( GSŒšg * vÿrds ) 785 `vÿrd_´štf ( vÿrds , "END:VCARD"); 786 } } 788  $phÚebook_add_cÚù ( GSŒšg * vÿrds ,  phÚebook_cÚù * cÚù , 789 ušt64_t fž‹r , ušt8_t fÜm© ) 791 ià( fÜm© =ð FORMAT_VCARD30 && fž‹r ) 792 fž‹r |ð( FILTER_VERSION | FILTER_FN | FILTER_N | FILTER_TEL ); 793 ià( fÜm© =ð FORMAT_VCARD21 && fž‹r ) 794 fž‹r |ð( FILTER_VERSION | FILTER_N | FILTER_TEL ); 796 fž‹r = ( FILTER_VERSION | FILTER_UID | FILTER_N | FILTER_FN | 797 FILTER_TEL | FILTER_EMAIL | FILTER_ADR | 798 FILTER_BDAY | FILTER_NICKNAME | FILTER_URL | 799 FILTER_PHOTO | FILTER_ORG | FILTER_ROLE | 800 FILTER_TITLE | FILTER_X_IRMC_CALL_DATETIME ); 802 `vÿrd_´štf_begš ( vÿrds , fÜm© ); 804 ià( fž‹r & FILTER_UID && * cÚù -> uid ) 805 `vÿrd_´štf_g ( vÿrds , fÜm© , "UID", NULL , cÚù -> uid ); 807 ià( fž‹r & FILTER_N ) 808 `vÿrd_´štf_Çme ( vÿrds , fÜm© , cÚù ); 810 ià( fž‹r & FILTER_FN && (* cÚù -> fuÎÇme || 811 fÜm© =ð FORMAT_VCARD30 )) 812 `vÿrd_´štf_fuÎÇme ( vÿrds , fÜm© , cÚù -> fuÎÇme ); 814 ià( fž‹r & FILTER_TEL ) { 815 GSLi¡ * l = cÚù -> numb”s ; 817 ià( `g_¦i¡_Ëngth ( l ) == 0) 818 `vÿrd_´štf_numb” ( vÿrds , fÜm© , NULL , 1, 819 TEL_TYPE_OTHER ); 821 ; l ;† =†-> Ãxt ) { 822  phÚebook_f›ld * numb” = l -> d©a ; 824 `vÿrd_´štf_numb” ( vÿrds , fÜm© , numb” -> ‹xt , 1, 825 numb” -> ty³ ); 829 ià( fž‹r & FILTER_EMAIL ) { 830 GSLi¡ * l = cÚù -> emažs ; 832 ; l ;† =†-> Ãxt ) { 833  phÚebook_f›ld * emaž = l -> d©a ; 834 `vÿrd_´štf_emaž ( vÿrds , fÜm© , emaž -> ‹xt , 835 emaž -> ty³ ); 839 ià( fž‹r & FILTER_ADR ) { 840 GSLi¡ * l = cÚù -> add»s£s ; 842 ; l ;† =†-> Ãxt ) { 843  phÚebook_addr * addr = l -> d©a ; 844 `vÿrd_´štf_add»ss ( vÿrds , fÜm© , addr ); 848 ià( fž‹r & FILTER_BDAY && * cÚù -> bœthday ) 849 `vÿrd_´štf_g ( vÿrds , fÜm© , "BDAY", NULL , 850 cÚù -> bœthday ); 852 ià( fž‹r & FILTER_NICKNAME && * cÚù -> nickÇme ) 853 `vÿrd_´štf_g ( vÿrds , fÜm© , "NICKNAME", NULL , 854 cÚù -> nickÇme ); 856 ià( fž‹r & FILTER_URL ) { 857 GSLi¡ * l = cÚù -> u¾s ; 859 ; l ;† =†-> Ãxt ) { 860  phÚebook_f›ld * u¾ = l -> d©a ; 861 `vÿrd_´štf_u¾ ( vÿrds , fÜm© , u¾ -> ‹xt , u¾-> ty³ ); 865 ià( fž‹r & FILTER_PHOTO && * cÚù -> phÙo ) 866 `vÿrd_´štf_g ( vÿrds , fÜm© , "PHOTO", NULL , 867 cÚù -> phÙo ); 869 ià( fž‹r & FILTER_ORG ) 870 `vÿrd_´štf_Üg ( vÿrds , fÜm© , cÚù ); 872 ià( fž‹r & FILTER_ROLE && * cÚù -> rÞe ) 873 `vÿrd_´štf_g ( vÿrds , fÜm© , "ROLE", NULL , cÚù -> rÞe ); 875 ià( fž‹r & FILTER_TITLE && * cÚù -> t™Ë ) 876 `vÿrd_´štf_g ( vÿrds , fÜm© , "TITLE", NULL , cÚù -> t™Ë ); 878 ià( fž‹r & FILTER_X_IRMC_CALL_DATETIME ) 879 `vÿrd_´štf_d©‘ime ( vÿrds , fÜm© , cÚù ); 881 `vÿrd_´štf_’d ( vÿrds ); 882 } } 884  $f›ld_ä“ ( gpoš‹r d©a ) 886  phÚebook_f›ld * f›ld = d©a ; 888 `g_ä“ ( f›ld -> ‹xt ); 889 `g_ä“ ( f›ld ); 890 } } 892  $phÚebook_addr_ä“ ( gpoš‹r addr ) 894  phÚebook_addr * add»ss = addr ; 896 `g_¦i¡_ä“_fuÎ ( add»ss -> f›lds , g_ä“ ); 897 `g_ä“ ( add»ss ); 898 } } 900  $phÚebook_cÚù_ä“ ( phÚebook_cÚù * cÚù ) 902 ià( cÚù =ð NULL ) 905 `g_¦i¡_ä“_fuÎ ( cÚù -> numb”s , f›ld_ä“ ); 906 `g_¦i¡_ä“_fuÎ ( cÚù -> emažs , f›ld_ä“ ); 907 `g_¦i¡_ä“_fuÎ ( cÚù -> add»s£s , phÚebook_addr_ä“ ); 908 `g_¦i¡_ä“_fuÎ ( cÚù -> u¾s , f›ld_ä“ ); 910 `g_ä“ ( cÚù -> uid ); 911 `g_ä“ ( cÚù -> fuÎÇme ); 912 `g_ä“ ( cÚù -> giv’ ); 913 `g_ä“ ( cÚù -> çmžy ); 914 `g_ä“ ( cÚù -> add™iÚ® ); 915 `g_ä“ ( cÚù -> ´efix ); 916 `g_ä“ ( cÚù -> suffix ); 917 `g_ä“ ( cÚù -> bœthday ); 918 `g_ä“ ( cÚù -> nickÇme ); 919 `g_ä“ ( cÚù -> phÙo ); 920 `g_ä“ ( cÚù -> com·ny ); 921 `g_ä“ ( cÚù -> d•¬tm’t ); 922 `g_ä“ ( cÚù -> rÞe ); 923 `g_ä“ ( cÚù -> t™Ë ); 924 `g_ä“ ( cÚù -> d©‘ime ); 925 `g_ä“ ( cÚù ); 926 } } @obexd/plugins/vcard.h 22 ephÚebook_numb”_ty³ { 23 mTEL_TYPE_HOME , 24 mTEL_TYPE_MOBILE , 25 mTEL_TYPE_FAX , 26 mTEL_TYPE_WORK , 27 mTEL_TYPE_OTHER , 30 ephÚebook_f›ld_ty³ { 31 mFIELD_TYPE_HOME , 32 mFIELD_TYPE_WORK , 33 mFIELD_TYPE_OTHER , 36 ephÚebook_ÿÎ_ty³ { 37 mCALL_TYPE_NOT_A_CALL , 38 mCALL_TYPE_MISSED , 39 mCALL_TYPE_INCOMING , 40 mCALL_TYPE_OUTGOING , 43  sphÚebook_f›ld { 44 * m‹xt ; 45  mty³ ; 48  sphÚebook_addr { 49 GSLi¡ * mf›lds ; 50  mty³ ; 53  sphÚebook_cÚù { 54 * muid ; 55 * mfuÎÇme ; 56 * mgiv’ ; 57 * mçmžy ; 58 * madd™iÚ® ; 59 GSLi¡ * mnumb”s ; 60 GSLi¡ * memažs ; 61 * m´efix ; 62 * msuffix ; 63 GSLi¡ * madd»s£s ; 64 * mbœthday ; 65 * mnickÇme ; 66 GSLi¡ * mu¾s ; 67 * mphÙo ; 68 * mcom·ny ; 69 * md•¬tm’t ; 70 * mrÞe ; 71 * mt™Ë ; 72 * md©‘ime ; 73  mÿÎty³ ; 76  phÚebook_add_cÚù ( GSŒšg * vÿrds ,  phÚebook_cÚù * cÚù , 77 ušt64_t fž‹r , ušt8_t fÜm© ); 79  phÚebook_cÚù_ä“ ( phÚebook_cÚù * cÚù ); 81  phÚebook_addr_ä“ ( gpoš‹r addr ); @obexd/src/log.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡d¬g.h > 30  ~ 32  ~ 34  ~"log.h " 36  $šfo (cÚ¡ * fÜm© , ...) 38 va_li¡ ­ ; 40 `va_¡¬t ( ­ , fÜm© ); 42 `vsy¦og ( LOG_INFO , fÜm© , ­ ); 44 `va_’d ( ­ ); 45 } } 47  $”rÜ (cÚ¡ * fÜm© , ...) 49 va_li¡ ­ ; 51 `va_¡¬t ( ­ , fÜm© ); 53 `vsy¦og ( LOG_ERR , fÜm© , ­ ); 55 `va_’d ( ­ ); 56 } } 58  $obex_debug (cÚ¡ * fÜm© , ...) 60 va_li¡ ­ ; 62 `va_¡¬t ( ­ , fÜm© ); 64 `vsy¦og ( LOG_DEBUG , fÜm© , ­ ); 66 `va_’d ( ­ ); 67 } } 69  obex_debug_desc __¡¬t___debug []; 70  obex_debug_desc __¡Ý___debug []; 72 ** g’abËd = NULL ; 74  gboÞ—n $is_’abËd ( obex_debug_desc * desc ) 76  i ; 78 ià( ’abËd =ð NULL ) 81  i = 0; ’abËd [i] !ð NULL ; i++) { 82 ià( desc -> Çme !ð NULL && `g_·‰”n_m©ch_sim¶e ( ’abËd [ i ], 83 desc -> Çme è=ð TRUE ) 85 ià( desc -> fže !ð NULL && `g_·‰”n_m©ch_sim¶e ( ’abËd [ i ], 86 desc -> fže è=ð TRUE ) 91 } } 93  $__obex_log_’abË_debug () 95  obex_debug_desc * desc ; 97  desc = __¡¬t___debug ; desø< __¡Ý___debug ; desc++) 98 desc -> æags |ð OBEX_DEBUG_FLAG_PRINT ; 99 } } 101  $__obex_log_š™ (cÚ¡ * debug ,  d‘ach ) 103  ÝtiÚ = LOG_NDELAY | LOG_PID ; 104  obex_debug_desc * desc ; 105 cÚ¡ * Çme = NULL , * fže = NULL; 107 ià( debug !ð NULL ) 108 ’abËd = `g_¡r¥l™_£t ( debug , ":, ", 0); 110  desc = __¡¬t___debug ; desø< __¡Ý___debug ; desc++) { 111 ià( fže !ð NULL || Çme != NULL) { 112 ià( `g_¡rcmp0 ( desc -> fže , file) == 0) { 113 ià( desc -> Çme =ð NULL ) 114 desc -> Çme =‚ame; 116 fže = NULL ; 119 ià( `is_’abËd ( desc )) 120 desc -> æags |ð OBEX_DEBUG_FLAG_PRINT ; 123 ià(! d‘ach ) 124 ÝtiÚ |ð LOG_PERROR ; 126 `Ý’log ("obexd", ÝtiÚ , LOG_DAEMON ); 128 `sy¦og ( LOG_INFO , "OBEX d«mÚ %s", VERSION ); 129 } } 131  $__obex_log_þ—nup () 133 `þo£log (); 135 `g_¡rä“v ( ’abËd ); 136 } } @obexd/src/log.h 24  $šfo (cÚ¡ * fÜm© , ...è `__©Œibu‹__ (( `fÜm© ( ´štf , 1, 2))); 25  $”rÜ (cÚ¡ * fÜm© , ...è `__©Œibu‹__ (( `fÜm© ( ´štf , 1, 2))); 27  $obex_debug (cÚ¡ * fÜm© , ...è `__©Œibu‹__ (( `fÜm© ( ´štf , 1, 2))); 29  `__obex_log_š™ (cÚ¡ * debug ,  d‘ach ); 30  `__obex_log_þ—nup (); 31  `__obex_log_’abË_debug (); 33  sobex_debug_desc { 34 cÚ¡ * Çme ; 35 cÚ¡ * fže ; 36  #OBEX_DEBUG_FLAG_DEFAULT (0) ) 37  #OBEX_DEBUG_FLAG_PRINT (1 << 0) ) 38  æags ; 39 } `__©Œibu‹__ (( `®igÃd (8))); 49  #DBG ( fmt , ¬g ...) do { \ 50  obex_debug_desc __obex_debug_desc \ 51 `__©Œibu‹__ (( u£d , `£ùiÚ ("__debug"), `®igÃd (8))) = { \ 52 . fže = __FILE__ , . æags = OBEX_DEBUG_FLAG_DEFAULT , \ 54 ià( __obex_debug_desc . æags & OBEX_DEBUG_FLAG_PRINT ) \ 55 `obex_debug ("%s:%s(è" fmt , __FILE__ , __func__ , ## ¬g ); \ 56 } } 0) ) @obexd/src/main.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 33  ~ 34  ~<¡dšt.h > 35  ~ 36  ~ 37  ~ 38  ~ 39  ~ 40  ~<‹rmios.h > 41  ~ 42  ~ 43  ~ 45  ~ 47  ~"../þ›Á/mªag”.h " 49  ~"log.h " 50  ~"obexd.h " 51  ~"£rv”.h " 53  #DEFAULT_CAP_FILE CONFIGDIR "/ÿ·bž™y.xml" ) 55  GMašLoÝ * gmaš_loÝ = NULL ; 57  gboÞ—n $sigÇl_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 58 gpoš‹r u£r_d©a ) 60  __‹rmš©ed = 0; 61  sigÇlfd_sigšfo si ; 62 ssize_t »suÉ ; 63  fd ; 65 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) 66  FALSE ; 68 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 70 »suÉ = `»ad ( fd , & si , (si)); 71 ià( »suÉ !ð( si )) 72  FALSE ; 74  si . ssi_signo ) { 75  SIGINT : 76  SIGTERM : 77 ià( __‹rmš©ed == 0) { 78 `šfo ("Terminating"); 79 `g_maš_loÝ_qu™ ( maš_loÝ ); 82 __‹rmš©ed = 1; 84  SIGUSR2 : 85 `__obex_log_’abË_debug (); 89  TRUE ; 90 } } 92  gušt $£tup_sigÇlfd () 94 GIOChªÃl * chªÃl ; 95 gušt sourû ; 96 sig£t_t mask ; 97  fd ; 99 `sigem±y£t (& mask ); 100 `sigadd£t (& mask , SIGINT ); 101 `sigadd£t (& mask , SIGTERM ); 102 `sigadd£t (& mask , SIGUSR2 ); 104 ià( `sig´ocmask ( SIG_BLOCK , & mask , NULL ) < 0) { 105 `³¼Ü ("Failedo set signal mask"); 109 fd = `sigÇlfd (-1, & mask , 0); 110 ià( fd < 0) { 111 `³¼Ü ("Failedo create signal descriptor"); 115 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 117 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 118 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 119 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 121 sourû = `g_io_add_w©ch ( chªÃl , 122 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 123 sigÇl_hªdËr , NULL ); 125 `g_io_chªÃl_uÄef ( chªÃl ); 127  sourû ; 128 } } 130  gboÞ—n gÝtiÚ_d‘ach = TRUE ; 131 * gÝtiÚ_debug = NULL ; 133 * gÝtiÚ_roÙ = NULL ; 134 * gÝtiÚ_roÙ_£tup = NULL ; 135 * gÝtiÚ_ÿ·bž™y = NULL ; 136 * gÝtiÚ_¶ugš = NULL ; 137 * gÝtiÚ_nÝlugš = NULL ; 139  gboÞ—n gÝtiÚ_autßcû± = FALSE ; 140  gboÞ—n gÝtiÚ_symlšks = FALSE ; 142  gboÞ—n $·r£_debug (cÚ¡ * key , cÚ¡ * v®ue , 143 gpoš‹r u£r_d©a , GE¼Ü ** ”rÜ ) 145 ià( v®ue ) 146 ÝtiÚ_debug = `g_¡rdup ( v®ue ); 148 ÝtiÚ_debug = `g_¡rdup ("*"); 150  TRUE ; 151 } } 153  GO±iÚEÁry gÝtiÚs [] = { 154 { "debug", 'd', G_OPTION_FLAG_OPTIONAL_ARG , 155 G_OPTION_ARG_CALLBACK , ·r£_debug , 157 { "¶ugš", 'p', 0, G_OPTION_ARG_STRING , & ÝtiÚ_¶ugš , 159 { "nÝlugš", 'P', 0, G_OPTION_ARG_STRING , & ÝtiÚ_nÝlugš , 161 { "nod‘ach", 'n', G_OPTION_FLAG_REVERSE , 162 G_OPTION_ARG_NONE , & ÝtiÚ_d‘ach , 164 { "roÙ", 'r', 0, G_OPTION_ARG_STRING , & ÝtiÚ_roÙ , 169 { "roÙ-£tup", 'S', 0, G_OPTION_ARG_STRING , & ÝtiÚ_roÙ_£tup , 171 { "symlšks", 'l', 0, G_OPTION_ARG_NONE , & ÝtiÚ_symlšks , 174 { "ÿ·bž™y", 'c', 0, G_OPTION_ARG_STRING , & ÝtiÚ_ÿ·bž™y , 177 { "auto-acû±", 'a', 0, G_OPTION_ARG_NONE , & ÝtiÚ_autßcû± , 179 { NULL }, 182 #ifdeà __TIZEN_PATCH__ 183  $obex_ÝtiÚ_£t_roÙ_fÞd” (cÚ¡ * roÙ ) 185 `g_ä“ ( ÝtiÚ_roÙ ); 186 ÝtiÚ_roÙ = `g_¡rdup ( roÙ ); 187 } } 190 gboÞ—n $obex_ÝtiÚ_auto_acû± () 192  ÝtiÚ_autßcû± ; 193 } } 195 cÚ¡ * $obex_ÝtiÚ_roÙ_fÞd” () 197  ÝtiÚ_roÙ ; 198 } } 200 gboÞ—n $obex_ÝtiÚ_symlšks () 202  ÝtiÚ_symlšks ; 203 } } 205 cÚ¡ * $obex_ÝtiÚ_ÿ·bž™y () 207  ÝtiÚ_ÿ·bž™y ; 208 } } 210  gboÞ—n $is_dœ (cÚ¡ * dœ ) 212  ¡© ¡ ; 214 ià( `¡© ( dœ , & ¡ ) < 0) { 215 `”rÜ ("¡©(%s): % (%d)", dœ , `¡»¼Ü ( ”ºo ),ƒrrno); 216  FALSE ; 219  `S_ISDIR ( ¡ . ¡_mode ); 220 } } 222  gboÞ—n $roÙ_fÞd”_£tup (* roÙ , * roÙ_£tup ) 224  ¡©us ; 225 * ¬gv [3] = { roÙ_£tup , roÙ , NULL }; 227 ià( `is_dœ ( roÙ )) 228  TRUE ; 230 ià( roÙ_£tup =ð NULL ) 231  FALSE ; 233 `DBG ("S‘tšg u°% usšg %s", roÙ , roÙ_£tup ); 235 ià(! `g_¥awn_sync ( NULL , ¬gv , NULL, 0, NULL, NULL, NULL, NULL, 236 & ¡©us , NULL )) { 237 `”rÜ ("UÇbËØexecu‹ %s", roÙ_£tup ); 238  FALSE ; 241 ià( `WEXITSTATUS ( ¡©us è!ð EXIT_SUCCESS ) { 242 `”rÜ ("% ex™ed w™h stu %d", roÙ_£tup , 243 `WEXITSTATUS ( ¡©us )); 244  FALSE ; 247  `is_dœ ( roÙ ); 248 } } 250  $maš ( ¬gc , * ¬gv []) 252 GO±iÚCÚ‹xt * cÚ‹xt ; 253 GE¼Ü * ”r = NULL ; 254 gušt sigÇl ; 256 #ifdeà NEED_THREADS 257 ià( `g_th»ad_suµÜ‹d (è=ð FALSE ) 258 `g_th»ad_š™ ( NULL ); 261 cÚ‹xt = `g_ÝtiÚ_cÚ‹xt_Ãw ( NULL ); 262 `g_ÝtiÚ_cÚ‹xt_add_maš_’Œ›s ( cÚ‹xt , ÝtiÚs , NULL ); 264 ià( `g_ÝtiÚ_cÚ‹xt_·r£ ( cÚ‹xt , & ¬gc , & ¬gv , & ”r è=ð FALSE ) { 265 ià( ”r !ð NULL ) { 266 `g_´š‹¼ ("%s\n", ”r -> mes§ge ); 267 `g_”rÜ_ä“ ( ”r ); 269 `g_´š‹¼ ("An unknownƒrror occurred\n"); 270 `ex™ ( EXIT_FAILURE ); 273 `g_ÝtiÚ_cÚ‹xt_ä“ ( cÚ‹xt ); 275 `__obex_log_š™ ( ÝtiÚ_debug , ÝtiÚ_d‘ach ); 277 `DBG ("Entering main†oop"); 279 maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 281 sigÇl = `£tup_sigÇlfd (); 283 #ifdeà NEED_THREADS 284 ià( `dbus_th»ads_š™_deçuÉ (è=ð FALSE ) { 285 `årštf ( ¡d”r , "Can't init usage ofhreads\n"); 286 `ex™ ( EXIT_FAILURE ); 290 ià( `mªag”_š™ (è=ð FALSE ) { 291 `”rÜ ("manager_init failed"); 292 `ex™ ( EXIT_FAILURE ); 295 ià( ÝtiÚ_roÙ =ð NULL ) { 296 ÝtiÚ_roÙ = `g_bužd_fž’ame ( `g_g‘_u£r_ÿche_dœ (), "obexd", 297 NULL ); 298 `g_mkdœ_w™h_·»Ás ( ÝtiÚ_roÙ , 0700); 301 ià( ÝtiÚ_roÙ [0] != '/') { 302 cÚ¡ * home = `g‘’v ("HOME"); 303 ià( home ) { 304 * Þd_roÙ = ÝtiÚ_roÙ ; 305 ÝtiÚ_roÙ = `g_¡rdup_´štf ("%s/%s", home , Þd_roÙ ); 306 `g_ä“ ( Þd_roÙ ); 310 ià( ÝtiÚ_ÿ·bž™y =ð NULL ) 311 ÝtiÚ_ÿ·bž™y = `g_¡rdup ( DEFAULT_CAP_FILE ); 313 `¶ugš_š™ ( ÝtiÚ_¶ugš , ÝtiÚ_nÝlugš ); 315 ià( `obex_£rv”_š™ () < 0) { 316 `”rÜ ("obex_server_init failed"); 317 `ex™ ( EXIT_FAILURE ); 320 ià(! `roÙ_fÞd”_£tup ( ÝtiÚ_roÙ , ÝtiÚ_roÙ_£tup )) { 321 `”rÜ ("UÇbËØ£tu°roÙ fÞd” %s", ÝtiÚ_roÙ ); 322 `ex™ ( EXIT_FAILURE ); 325 ià( `þ›Á_mªag”_š™ () < 0) { 326 `”rÜ ("client_manager_init failed"); 327 `ex™ ( EXIT_FAILURE ); 330 `g_maš_loÝ_run ( maš_loÝ ); 332 `g_sourû_»move ( sigÇl ); 334 `þ›Á_mªag”_ex™ (); 336 `obex_£rv”_ex™ (); 338 `¶ugš_þ—nup (); 340 `mªag”_þ—nup (); 342 `g_maš_loÝ_uÄef ( maš_loÝ ); 344 `g_ä“ ( ÝtiÚ_ÿ·bž™y ); 345 `g_ä“ ( ÝtiÚ_roÙ ); 347 `__obex_log_þ—nup (); 350 } } @obexd/src/manager.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~ 30  ~<¡ršg.h > 31  ~<”ºo.h > 32  ~ 33  ~ 34  ~<š‰y³s.h > 36  ~ 38  ~"btio/btio.h " 39  ~"obexd.h " 40  ~"obex.h " 41  ~"obex-´iv.h " 42  ~"£rv”.h " 43  ~"mªag”.h " 44  ~"log.h " 45  ~"£rviû.h " 47  #OBEX_BASE_PATH "/Üg/bluez/obex" ) 48  #SESSION_BASE_PATH OBEX_BASE_PATH "/£rv”" ) 49  #OBEX_MANAGER_INTERFACE OBEXD_SERVICE ".Ag’tMªag”1" ) 50  #ERROR_INTERFACE OBEXD_SERVICE ".E¼Ü" ) 51  #TRANSFER_INTERFACE OBEXD_SERVICE ".T¿nsãr1" ) 52  #SESSION_INTERFACE OBEXD_SERVICE ".SessiÚ1" ) 53  #AGENT_INTERFACE OBEXD_SERVICE ".Ag’t1" ) 55  #TIMEOUT 60*1000 ) 57  sag’t { 58 * mbus_Çme ; 59 * m·th ; 60 gboÞ—n mauth_³ndšg ; 61 * mÃw_Çme ; 62 * mÃw_fÞd” ; 63  mw©ch_id ; 67 mTRANSFER_STATUS_QUEUED = 0, 68 mTRANSFER_STATUS_ACTIVE , 69 mTRANSFER_STATUS_COMPLETE , 70 mTRANSFER_STATUS_ERROR 73  sobex_Œªsãr { 74 ušt8_t m¡©us ; 75 * m·th ; 76  obex_£ssiÚ * m£ssiÚ ; 79  ag’t * gag’t = NULL ; 81  DBusCÚÃùiÚ * gcÚÃùiÚ = NULL ; 83  $ag’t_ä“ ( ag’t *agent) 85 ià(! ag’t ) 88 `g_ä“ ( ag’t -> Ãw_fÞd” ); 89 `g_ä“ ( ag’t -> Ãw_Çme ); 90 `g_ä“ ( ag’t -> bus_Çme ); 91 `g_ä“ ( ag’t -> ·th ); 92 `g_ä“ ( ag’t ); 93 } } 95  šlše DBusMes§ge * $šv®id_¬gs ( DBusMes§ge * msg ) 97  `g_dbus_ü—‹_”rÜ ( msg , 98 ERROR_INTERFACE ".InvalidArguments", 100 } } 102  šlše DBusMes§ge * $nÙ_suµÜ‹d ( DBusMes§ge * msg ) 104  `g_dbus_ü—‹_”rÜ ( msg , 105 ERROR_INTERFACE ".NotSupported", 107 } } 109  šlše DBusMes§ge * $ag’t_®»ady_exi¡s ( DBusMes§ge * msg ) 111  `g_dbus_ü—‹_”rÜ ( msg , 112 ERROR_INTERFACE ".AlreadyExists", 114 } } 116  šlše DBusMes§ge * $ag’t_dÛs_nÙ_exi¡ ( DBusMes§ge * msg ) 118  `g_dbus_ü—‹_”rÜ ( msg , 119 ERROR_INTERFACE ".DoesNotExist", 121 } } 123  šlše DBusMes§ge * $nÙ_authÜized ( DBusMes§ge * msg ) 125  `g_dbus_ü—‹_”rÜ ( msg , 126 ERROR_INTERFACE ".NotAuthorized", 128 } } 130  $ag’t_discÚÃùed ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 132 `DBG ("Agentƒxited"); 133 `ag’t_ä“ ( ag’t ); 134 ag’t = NULL ; 135 } } 137  DBusMes§ge * $»gi¡”_ag’t ( DBusCÚÃùiÚ * cÚn , 138 DBusMes§ge * msg , * d©a ) 140 cÚ¡ * ·th , * £nd” ; 142 ià( ag’t ) 143  `ag’t_®»ady_exi¡s ( msg ); 145 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 146 DBUS_TYPE_OBJECT_PATH , & ·th , 147 DBUS_TYPE_INVALID )) 148  `šv®id_¬gs ( msg ); 150 £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 151 ag’t = `g_Ãw0 (agent, 1); 152 ag’t -> bus_Çme = `g_¡rdup ( £nd” ); 153 ag’t -> ·th = `g_¡rdup (path); 155 ag’t -> w©ch_id = `g_dbus_add_discÚÃù_w©ch ( cÚn , £nd” , 156 ag’t_discÚÃùed , NULL , NULL); 158 `DBG ("Agent„egistered"); 160  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 161 } } 163  DBusMes§ge * $uÄegi¡”_ag’t ( DBusCÚÃùiÚ * cÚn , 164 DBusMes§ge * msg , * d©a ) 166 cÚ¡ * ·th , * £nd” ; 168 ià(! ag’t ) 169  `ag’t_dÛs_nÙ_exi¡ ( msg ); 171 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 172 DBUS_TYPE_OBJECT_PATH , & ·th , 173 DBUS_TYPE_INVALID )) 174  `šv®id_¬gs ( msg ); 176 ià( `¡rcmp ( ag’t -> ·th ,…ath) != 0) 177  `ag’t_dÛs_nÙ_exi¡ ( msg ); 179 £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 180 ià( `¡rcmp ( ag’t -> bus_Çme , £nd” ) != 0) 181  `nÙ_authÜized ( msg ); 183 `g_dbus_»move_w©ch ( cÚn , ag’t -> w©ch_id ); 185 `ag’t_ä“ ( ag’t ); 186 ag’t = NULL ; 188 `DBG ("Agent unregistered"); 190  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 191 } } 193 #ifdeà __TIZEN_PATCH__ 194  DBusMes§ge * $£t_roÙ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 195 cÚ¡ * roÙ , * d©a ) 197 `DBG ("Ãw_roÙ: %s", roÙ ); 200 `obex_ÝtiÚ_£t_roÙ_fÞd” ( roÙ ); 202  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 203 } } 205  DBusMes§ge * $£t_´Ý”ty ( DBusCÚÃùiÚ * cÚn , 206 DBusMes§ge * msg , * d©a ) 208 DBusMes§geI‹r ™” ; 209 DBusMes§geI‹r sub ; 210 cÚ¡ * ´Ý”ty ; 212 ià(! `dbus_mes§ge_™”_š™ ( msg , & ™” )) 213  `šv®id_¬gs ( msg ); 215 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_STRING ) 216  `šv®id_¬gs ( msg ); 218 `dbus_mes§ge_™”_g‘_basic (& ™” , & ´Ý”ty ); 219 `dbus_mes§ge_™”_Ãxt (& ™” ); 221 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_VARIANT ) 222  `šv®id_¬gs ( msg ); 223 `dbus_mes§ge_™”_»cur£ (& ™” , & sub ); 225 ià( `g_¡r_equ® ("RoÙ", ´Ý”ty )) { 226 cÚ¡ * roÙ ; 228 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& sub è!ð DBUS_TYPE_STRING ) 229  `šv®id_¬gs ( msg ); 230 `dbus_mes§ge_™”_g‘_basic (& sub , & roÙ ); 232  `£t_roÙ ( cÚn , msg , roÙ , d©a ); 235  `šv®id_¬gs ( msg ); 236 } } 239  gboÞ—n $g‘_sourû (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 240 DBusMes§geI‹r * ™” , * d©a ) 242  obex_£ssiÚ * os = d©a ; 243 * s ; 245 s = os -> ¤c ; 246 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & s ); 248  TRUE ; 249 } } 251  gboÞ—n $g‘_de¡š©iÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 252 DBusMes§geI‹r * ™” , * d©a ) 254  obex_£ssiÚ * os = d©a ; 255 * s ; 257 s = os -> d¡ ; 258 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & s ); 260  TRUE ; 261 } } 263  gboÞ—n $£ssiÚ_rg‘_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 264 * d©a ) 266  obex_£ssiÚ * os = d©a ; 268  os -> £rviû -> rg‘ ? TRUE : FALSE ; 269 } } 271 * $rg‘2¡r (cÚ¡ ušt8_t * t ) 273 ià(! t ) 274  NULL ; 276  `g_¡rdup_´štf ("%02X%02X%02X%02X-%02X%02X-%02X%02X-" 278 t [0],[1],[2],[3],[4],[5],[6],[7], 279 t [8],[9],[10],[11],[12],[13],[14], 280 t [15]); 281 } } 283  gboÞ—n $g‘_rg‘ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 284 DBusMes§geI‹r * ™” , * d©a ) 286  obex_£ssiÚ * os = d©a ; 287 * uuid ; 289 uuid = `rg‘2¡r ( os -> £rviû -> rg‘ ); 290 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & uuid ); 291 `g_ä“ ( uuid ); 293  TRUE ; 294 } } 296  gboÞ—n $g‘_roÙ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 297 DBusMes§geI‹r * ™” , * d©a ) 299 cÚ¡ * roÙ ; 301 roÙ = `obex_ÝtiÚ_roÙ_fÞd” (); 302 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & roÙ ); 304  TRUE ; 305 } } 307  DBusMes§ge * $Œªsãr_ÿnûl ( DBusCÚÃùiÚ * cÚÃùiÚ , 308 DBusMes§ge * msg , * u£r_d©a ) 310  obex_Œªsãr * Œªsãr = u£r_d©a ; 311  obex_£ssiÚ * os = Œªsãr -> £ssiÚ ; 312 cÚ¡ * £nd” ; 314 ià(! os ) 315  `šv®id_¬gs ( msg ); 317 £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 318 ià( `¡rcmp ( ag’t -> bus_Çme , £nd” ) != 0) 319  `nÙ_authÜized ( msg ); 321 os -> abÜ‹d = TRUE ; 323  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 324 } } 326 cÚ¡ * $¡©us2¡r ( ušt8_t ¡©us ) 328  ¡©us ) { 329  TRANSFER_STATUS_QUEUED : 331  TRANSFER_STATUS_ACTIVE : 333  TRANSFER_STATUS_COMPLETE : 335  TRANSFER_STATUS_ERROR : 339 } } 341  gboÞ—n $Œªsãr_g‘_¡©us (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 342 DBusMes§geI‹r * ™” , * d©a ) 344  obex_Œªsãr * Œªsãr = d©a ; 345 cÚ¡ * ¡©us = `¡©us2¡r ( Œªsãr ->status); 347 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¡©us ); 349  TRUE ; 350 } } 352  gboÞ—n $Œªsãr_g‘_£ssiÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 353 DBusMes§geI‹r * ™” , * d©a ) 355  obex_Œªsãr * Œªsãr = d©a ; 356  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 357 * ·th ; 359 ià( £ssiÚ =ð NULL ) 360  FALSE ; 362 ·th = `g_¡rdup_´štf ("%s/£ssiÚ%u", SESSION_BASE_PATH , £ssiÚ -> id ); 364 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 366 `g_ä“ ( ·th ); 368  TRUE ; 369 } } 371  gboÞ—n $Œªsãr_Çme_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 372 * d©a ) 374  obex_Œªsãr * Œªsãr = d©a ; 375  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 377  £ssiÚ -> Çme !ð NULL ; 378 } } 380  gboÞ—n $Œªsãr_g‘_Çme (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 381 DBusMes§geI‹r * ™” , * d©a ) 383  obex_Œªsãr * Œªsãr = d©a ; 384  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 386 ià( £ssiÚ -> Çme =ð NULL ) 387  FALSE ; 389 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & £ssiÚ -> Çme ); 391  TRUE ; 392 } } 394  gboÞ—n $Œªsãr_ty³_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 395 * d©a ) 397  obex_Œªsãr * Œªsãr = d©a ; 398  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 400  £ssiÚ -> ty³ !ð NULL ; 401 } } 403  gboÞ—n $Œªsãr_g‘_ty³ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 404 DBusMes§geI‹r * ™” , * d©a ) 406  obex_Œªsãr * Œªsãr = d©a ; 407  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 409 ià( £ssiÚ -> ty³ =ð NULL ) 410  FALSE ; 412 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & £ssiÚ -> ty³ ); 414  TRUE ; 415 } } 417  gboÞ—n $Œªsãr_size_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 418 * d©a ) 420  obex_Œªsãr * Œªsãr = d©a ; 421  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 423  £ssiÚ -> size !ð OBJECT_SIZE_UNKNOWN ; 424 } } 426  gboÞ—n $Œªsãr_g‘_size (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 427 DBusMes§geI‹r * ™” , * d©a ) 429  obex_Œªsãr * Œªsãr = d©a ; 430  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 432 ià( £ssiÚ -> size =ð OBJECT_SIZE_UNKNOWN ) 433  FALSE ; 435 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT64 , & £ssiÚ -> size ); 437  TRUE ; 438 } } 440  gboÞ—n $Œªsãr_time_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 441 * d©a ) 443  obex_Œªsãr * Œªsãr = d©a ; 444  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 446  £ssiÚ -> time != 0; 447 } } 449  gboÞ—n $Œªsãr_g‘_time (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 450 DBusMes§geI‹r * ™” , * d©a ) 452  obex_Œªsãr * Œªsãr = d©a ; 453  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 454 dbus_ušt64_t time_u64 ; 456 ià( £ssiÚ -> size == 0) 457  FALSE ; 459 time_u64 = £ssiÚ -> time ; 461 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT64 , & time_u64 ); 463  TRUE ; 464 } } 466  gboÞ—n $Œªsãr_fž’ame_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 467 * d©a ) 469  obex_Œªsãr * Œªsãr = d©a ; 470  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 472  £ssiÚ -> ·th !ð NULL ; 473 } } 475  gboÞ—n $Œªsãr_g‘_fž’ame (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 476 DBusMes§geI‹r * ™” , * d©a ) 478  obex_Œªsãr * Œªsãr = d©a ; 479  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 481 ià( £ssiÚ -> ·th =ð NULL ) 482  FALSE ; 484 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & £ssiÚ -> ·th ); 486  TRUE ; 487 } } 489 #ifdeà __TIZEN_PATCH__ 490  gboÞ—n $Œªsãr_Ý”©iÚ_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 491 * d©a ) 493  obex_Œªsãr * Œªsãr = d©a ; 494  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 496 ià( £ssiÚ -> cmd =ð G_OBEX_OP_PUT && 497 £ssiÚ -> size !ð OBJECT_SIZE_DELETE ) 498  TRUE ; 499 ià( £ssiÚ -> cmd =ð G_OBEX_OP_GET ) 500  TRUE ; 502  FALSE ; 503 } } 505  gboÞ—n $Œªsãr_g‘_Ý”©iÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 506 DBusMes§geI‹r * ™” , * d©a ) 508  obex_Œªsãr * Œªsãr = d©a ; 509  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 510 cÚ¡ * Ý”©iÚ ; 512 ià( £ssiÚ -> cmd =ð G_OBEX_OP_PUT && 513 £ssiÚ -> size !ð OBJECT_SIZE_DELETE ) 514 Ý”©iÚ = "PUT"; 515 ià( £ssiÚ -> cmd =ð G_OBEX_OP_GET ) 516 Ý”©iÚ = "GET"; 518  FALSE ; 520 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & Ý”©iÚ ); 522  TRUE ; 523 } } 525  gboÞ—n $Œªsãr_add»ss_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 526 * d©a ) 528  obex_Œªsãr * Œªsãr = d©a ; 529  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 530 * add»ss ; 531  ”r ; 533 ”r = `obex_g‘³”Çme ( £ssiÚ , & add»ss ); 534 ià( ”r < 0) 535  FALSE ; 537 `g_ä“ ( add»ss ); 539  TRUE ; 540 } } 542  gboÞ—n $Œªsãr_g‘_add»ss (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 543 DBusMes§geI‹r * ™” , * d©a ) 545  obex_Œªsãr * Œªsãr = d©a ; 546  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 547 * add»ss ; 548  ”r ; 550 ”r = `obex_g‘³”Çme ( £ssiÚ , & add»ss ); 551 ià( ”r < 0) 552  FALSE ; 554 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & add»ss ); 555 `g_ä“ ( add»ss ); 557  TRUE ; 558 } } 562  gboÞ—n $Œªsãr_g‘_Œªsã¼ed (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 563 DBusMes§geI‹r * ™” , * d©a ) 565  obex_Œªsãr * Œªsãr = d©a ; 566  obex_£ssiÚ * £ssiÚ = Œªsãr ->session; 568 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT64 , 569 & £ssiÚ -> off£t ); 571  TRUE ; 572 } } 574 cÚ¡ GDBusM‘hodTabË gmªag”_m‘hods [] = { 575 { GDBUS_METHOD ("RegisterAgent", 576 GDBUS_ARGS ({ "ag’t", "o" }), NULL , »gi¡”_ag’t ) }, 577 { GDBUS_METHOD ("UnregisterAgent", 578 GDBUS_ARGS ({ "ag’t", "o" }), NULL , uÄegi¡”_ag’t ) }, 579 #ifdeà __TIZEN_PATCH__ 580 { GDBUS_METHOD ("SetProperty", 581 GDBUS_ARGS ({ "´Ý”ty", "sv" }), NULL , £t_´Ý”ty ) }, 586 cÚ¡ GDBusM‘hodTabË gŒªsãr_m‘hods [] = { 587 { GDBUS_METHOD ("Cªûl", NULL , NULL, Œªsãr_ÿnûl ) }, 591 cÚ¡ GDBusPrÝ”tyTabË gŒªsãr_´Ý”t›s [] = { 592 { "Stus", "s", Œªsãr_g‘_¡©us }, 593 { "SessiÚ", "o", Œªsãr_g‘_£ssiÚ }, 594 { "Name", "s", Œªsãr_g‘_Çme , NULL , Œªsãr_Çme_exi¡s }, 595 { "Ty³", "s", Œªsãr_g‘_ty³ , NULL , Œªsãr_ty³_exi¡s }, 596 { "Size", "t", Œªsãr_g‘_size , NULL , Œªsãr_size_exi¡s }, 597 { "Time", "t", Œªsãr_g‘_time , NULL , Œªsãr_time_exi¡s }, 598 { "Fž’ame", "s", Œªsãr_g‘_fž’ame , NULL , 599 Œªsãr_fž’ame_exi¡s }, 600 #ifdeà __TIZEN_PATCH__ 601 { "O³¿tiÚ", "s", Œªsãr_g‘_Ý”©iÚ , NULL , 602 Œªsãr_Ý”©iÚ_exi¡s }, 603 { "Add»ss", "s", Œªsãr_g‘_add»ss , NULL , 604 Œªsãr_add»ss_exi¡s }, 606 { "T¿nsã¼ed", "t", Œªsãr_g‘_Œªsã¼ed }, 610 cÚ¡ GDBusPrÝ”tyTabË g£ssiÚ_´Ý”t›s [] = { 611 { "Sourû", "s", g‘_sourû }, 612 { "De¡š©iÚ", "s", g‘_de¡š©iÚ }, 613 { "T¬g‘", "s", g‘_rg‘ , NULL , £ssiÚ_rg‘_exi¡s }, 614 { "RoÙ", "s", g‘_roÙ }, 618 gboÞ—n $mªag”_š™ () 620 DBusE¼Ü ”r ; 622 `DBG (""); 624 `dbus_”rÜ_š™ (& ”r ); 626 cÚÃùiÚ = `g_dbus_£tup_bus ( DBUS_BUS_SESSION , OBEXD_SERVICE , & ”r ); 627 ià( cÚÃùiÚ =ð NULL ) { 628 ià( `dbus_”rÜ_is_£t (& ”r è=ð TRUE ) { 629 `årštf ( ¡d”r , "%s\n", ”r . mes§ge ); 630 `dbus_”rÜ_ä“ (& ”r ); 632 `årštf ( ¡d”r , "Can't„egister with session bus\n"); 633  FALSE ; 636 `g_dbus_©ch_objeù_mªag” ( cÚÃùiÚ ); 638  `g_dbus_»gi¡”_š‹rçû ( cÚÃùiÚ , OBEX_BASE_PATH , 639 OBEX_MANAGER_INTERFACE , 640 mªag”_m‘hods , NULL , NULL, 641 NULL , NULL); 642 } } 644  $mªag”_þ—nup () 646 `DBG (""); 648 `g_dbus_uÄegi¡”_š‹rçû ( cÚÃùiÚ , OBEX_BASE_PATH , 649 OBEX_MANAGER_INTERFACE ); 653 `ag’t_ä“ ( ag’t ); 655 `g_dbus_d‘ach_objeù_mªag” ( cÚÃùiÚ ); 657 `dbus_cÚÃùiÚ_uÄef ( cÚÃùiÚ ); 658 } } 660  $mªag”_em™_Œªsãr_¡¬‹d ( obex_Œªsãr * Œªsãr ) 662 Œªsãr -> ¡©us = TRANSFER_STATUS_ACTIVE ; 664 `g_dbus_em™_´Ý”ty_chªged ( cÚÃùiÚ , Œªsãr -> ·th , 665 TRANSFER_INTERFACE , "Status"); 666 } } 668  $em™_Œªsãr_com¶‘ed ( obex_Œªsãr * Œªsãr , 669 gboÞ—n sucûss ) 671 ià( Œªsãr -> ·th =ð NULL ) 674 Œªsãr -> ¡©us = sucûss ? TRANSFER_STATUS_COMPLETE : 675 TRANSFER_STATUS_ERROR ; 677 `g_dbus_em™_´Ý”ty_chªged ( cÚÃùiÚ , Œªsãr -> ·th , 678 TRANSFER_INTERFACE , "Status"); 679 } } 681  $em™_Œªsãr_´og»ss ( obex_Œªsãr * Œªsãr , 682 ušt32_t tÙ® , ušt32_ˆ Œªsã¼ed ) 684 ià( Œªsãr -> ·th =ð NULL ) 687 `g_dbus_em™_´Ý”ty_chªged ( cÚÃùiÚ , Œªsãr -> ·th , 688 TRANSFER_INTERFACE , "Transferred"); 689 } } 691  $Œªsãr_ä“ ( obex_Œªsãr * Œªsãr ) 693 `g_ä“ ( Œªsãr -> ·th ); 694 `g_ä“ ( Œªsãr ); 695 } } 697  obex_Œªsãr * $mªag”_»gi¡”_Œªsãr ( obex_£ssiÚ * os ) 699  obex_Œªsãr * Œªsãr ; 700  id = 0; 702 Œªsãr = `g_Ãw0 ( obex_Œªsãr , 1); 703 Œªsãr -> ·th = `g_¡rdup_´štf ("%s/session%u/transfer%u", 704 SESSION_BASE_PATH , os -> id , id++); 705 Œªsãr -> £ssiÚ = os ; 707 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚÃùiÚ , Œªsãr -> ·th , 708 TRANSFER_INTERFACE , 709 Œªsãr_m‘hods , NULL , 710 Œªsãr_´Ý”t›s , Œªsãr , NULL )) { 711 `”rÜ ("Cannot„egister Transfer interface."); 712 `Œªsãr_ä“ ( Œªsãr ); 713  NULL ; 716  Œªsãr ; 717 } } 719  $mªag”_uÄegi¡”_Œªsãr ( obex_Œªsãr * Œªsãr ) 721  obex_£ssiÚ * os ; 723 ià( Œªsãr =ð NULL ) 726 os = Œªsãr -> £ssiÚ ; 728 ià( Œªsãr -> ¡©us =ð TRANSFER_STATUS_ACTIVE ) 729 `em™_Œªsãr_com¶‘ed ( Œªsãr , os -> off£t =ðos-> size ); 731 `g_dbus_uÄegi¡”_š‹rçû ( cÚÃùiÚ , Œªsãr -> ·th , 732 TRANSFER_INTERFACE ); 734 `Œªsãr_ä“ ( Œªsãr ); 735 } } 737  $ag’t_ÿnûl () 739 DBusMes§ge * msg ; 741 ià( ag’t =ð NULL ) 744 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ag’t -> bus_Çme ,‡g’t-> ·th , 745 AGENT_INTERFACE , "Cancel"); 747 `g_dbus_£nd_mes§ge ( cÚÃùiÚ , msg ); 748 } } 750  $ag’t_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 752 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 753 cÚ¡ * Çme ; 754 DBusE¼Ü d”r ; 755 gboÞ—n * gÙ_»¶y = u£r_d©a ; 757 * gÙ_»¶y = TRUE ; 760 ià(! ag’t ) 763 ag’t -> auth_³ndšg = FALSE ; 765 `dbus_”rÜ_š™ (& d”r ); 766 ià( `dbus_£t_”rÜ_äom_mes§ge (& d”r , »¶y )) { 767 `”rÜ ("Agent„eplied with‡nƒrror: %s, %s", 768 d”r . Çme , d”r. mes§ge ); 770 ià( `dbus_”rÜ_has_Çme (& d”r , DBUS_ERROR_NO_REPLY )) 771 `ag’t_ÿnûl (); 773 `dbus_”rÜ_ä“ (& d”r ); 774 `dbus_mes§ge_uÄef ( »¶y ); 778 ià( `dbus_mes§ge_g‘_¬gs ( »¶y , NULL , 779 DBUS_TYPE_STRING , & Çme , 780 DBUS_TYPE_INVALID )) { 782 cÚ¡ * ¦ash = `¡¼chr ( Çme , '/'); 783 `DBG ("Ag’ˆ»¶›d w™h %s", Çme ); 784 ià(! ¦ash ) { 785 ag’t -> Ãw_Çme = `g_¡rdup ( Çme ); 786 ag’t -> Ãw_fÞd” = NULL ; 788 ag’t -> Ãw_Çme = `g_¡rdup ( ¦ash + 1); 789 ag’t -> Ãw_fÞd” = `g_¡ºdup ( Çme , ¦ash -‚ame); 793 `dbus_mes§ge_uÄef ( »¶y ); 794 } } 796  gboÞ—n $auth_”rÜ ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , * u£r_d©a ) 798 ag’t -> auth_³ndšg = FALSE ; 800  FALSE ; 801 } } 803  $mªag”_»que¡_authÜiz©iÚ ( obex_Œªsãr * Œªsãr , št32_t time , 804 ** Ãw_fÞd” , ** Ãw_Çme ) 806  obex_£ssiÚ * os = Œªsãr -> £ssiÚ ; 807 DBusMes§ge * msg ; 808 DBusP’dšgC®l * ÿÎ ; 809  w©ch ; 810 gboÞ—n gÙ_»¶y ; 812 ià(! ag’t ) 815 ià( ag’t -> auth_³ndšg ) 816  - EPERM ; 818 ià(! Ãw_fÞd” || ! Ãw_Çme ) 819  - EINVAL ; 821 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ag’t -> bus_Çme ,‡g’t-> ·th , 822 AGENT_INTERFACE , 825 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_OBJECT_PATH , & Œªsãr -> ·th , 826 DBUS_TYPE_INVALID ); 828 ià(! `g_dbus_£nd_mes§ge_w™h_»¶y ( cÚÃùiÚ , msg , & ÿÎ , TIMEOUT )) { 829 `dbus_mes§ge_uÄef ( msg ); 830  - EPERM ; 833 `dbus_mes§ge_uÄef ( msg ); 835 ag’t -> auth_³ndšg = TRUE ; 836 gÙ_»¶y = FALSE ; 839 w©ch = `g_io_add_w©ch_fuÎ ( os -> io , G_PRIORITY_DEFAULT , 840 G_IO_HUP | G_IO_ERR | G_IO_NVAL , 841 auth_”rÜ , NULL , NULL); 843 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , ag’t_»¶y , & gÙ_»¶y , NULL ); 846  ag’t &&‡g’t-> auth_³ndšg ) 847 `g_maš_cÚ‹xt_™”©iÚ ( NULL , TRUE ); 849 `g_sourû_»move ( w©ch ); 851 ià(! gÙ_»¶y ) { 852 `dbus_³ndšg_ÿÎ_ÿnûl ( ÿÎ ); 853 `ag’t_ÿnûl (); 856 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 858 ià(! ag’t || !ag’t-> Ãw_Çme ) 859  - EPERM ; 861 * Ãw_fÞd” = ag’t ->new_folder; 862 * Ãw_Çme = ag’t ->new_name; 863 ag’t -> Ãw_fÞd” = NULL ; 864 ag’t -> Ãw_Çme = NULL ; 867 } } 869  DBusMes§ge * $£ssiÚ_g‘_ÿ·bž™›s ( DBusCÚÃùiÚ * cÚÃùiÚ , 870 DBusMes§ge * mes§ge , * u£r_d©a ) 872  `nÙ_suµÜ‹d ( mes§ge ); 873 } } 875 cÚ¡ GDBusM‘hodTabË g£ssiÚ_m‘hods [] = { 876 { GDBUS_ASYNC_METHOD ("GetCapabilities", 877 NULL , GDBUS_ARGS ({ "capabilities", "s" }), 878 £ssiÚ_g‘_ÿ·bž™›s ) }, 882  $mªag”_»gi¡”_£ssiÚ ( obex_£ssiÚ * os ) 884 * ·th ; 886 ·th = `g_¡rdup_´štf ("%s/£ssiÚ%u", SESSION_BASE_PATH , os -> id ); 888 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚÃùiÚ , ·th , 889 SESSION_INTERFACE , 890 £ssiÚ_m‘hods , NULL , 891 £ssiÚ_´Ý”t›s , os , NULL )) 892 `”rÜ ("Cannot„egister Session interface."); 894 `g_ä“ ( ·th ); 895 } } 897  $mªag”_uÄegi¡”_£ssiÚ ( obex_£ssiÚ * os ) 899 * ·th ; 901 ·th = `g_¡rdup_´štf ("%s/£ssiÚ%u", SESSION_BASE_PATH , os -> id ); 903 `g_dbus_uÄegi¡”_š‹rçû ( cÚÃùiÚ , ·th , SESSION_INTERFACE ); 905 `g_ä“ ( ·th ); 906 } } 908  $mªag”_em™_Œªsãr_´og»ss ( obex_Œªsãr * Œªsãr ) 910 `em™_Œªsãr_´og»ss ( Œªsãr ,¿nsãr-> £ssiÚ -> size , 911 Œªsãr -> £ssiÚ -> off£t ); 912 } } 914  $mªag”_em™_Œªsãr_com¶‘ed ( obex_Œªsãr * Œªsãr ) 916  obex_£ssiÚ * £ssiÚ ; 918 ià( Œªsãr =ð NULL ) 921 £ssiÚ = Œªsãr ->session; 923 ià( £ssiÚ =ð NULL || sessiÚ-> objeù == NULL) 926 `em™_Œªsãr_com¶‘ed ( Œªsãr , ! £ssiÚ -> abÜ‹d ); 927 } } 929 DBusCÚÃùiÚ * $mªag”_dbus_g‘_cÚÃùiÚ () 931 ià( cÚÃùiÚ =ð NULL ) 932  NULL ; 934  `dbus_cÚÃùiÚ_»f ( cÚÃùiÚ ); 935 } } @obexd/src/manager.h 24  ~ 26  #OBEXD_SERVICE "Üg.bluez.obex" ) 28  gobex_£ssiÚ ; 29  gobex_Œªsãr ; 31  mªag”_»gi¡”_£ssiÚ ( obex_£ssiÚ * os ); 32  mªag”_uÄegi¡”_£ssiÚ ( obex_£ssiÚ * os ); 34  obex_Œªsãr * mªag”_»gi¡”_Œªsãr ( obex_£ssiÚ * os ); 35  mªag”_uÄegi¡”_Œªsãr ( obex_Œªsãr * Œªsãr ); 36  mªag”_em™_Œªsãr_¡¬‹d ( obex_Œªsãr * Œªsãr ); 37  mªag”_em™_Œªsãr_´og»ss ( obex_Œªsãr * Œªsãr ); 38  mªag”_em™_Œªsãr_com¶‘ed ( obex_Œªsãr * Œªsãr ); 39  mªag”_»que¡_authÜiz©iÚ ( obex_Œªsãr * Œªsãr , št32_t time , 40 ** Ãw_fÞd” , ** Ãw_Çme ); 42 DBusCÚÃùiÚ * mªag”_dbus_g‘_cÚÃùiÚ (); @obexd/src/map_ap.h 25 em­_­_g { 26 mMAP_AP_MAXLISTCOUNT = 0x01, 27 mMAP_AP_STARTOFFSET = 0x02, 28 mMAP_AP_FILTERMESSAGETYPE = 0x03, 29 mMAP_AP_FILTERPERIODBEGIN = 0x04, 30 mMAP_AP_FILTERPERIODEND = 0x05, 31 mMAP_AP_FILTERREADSTATUS = 0x06, 32 mMAP_AP_FILTERRECIPIENT = 0x07, 33 mMAP_AP_FILTERORIGINATOR = 0x08, 34 mMAP_AP_FILTERPRIORITY = 0x09, 35 mMAP_AP_ATTACHMENT = 0x0A, 36 mMAP_AP_TRANSPARENT = 0x0B, 37 mMAP_AP_RETRY = 0x0C, 38 mMAP_AP_NEWMESSAGE = 0x0D, 39 mMAP_AP_NOTIFICATIONSTATUS = 0x0E, 40 mMAP_AP_MASINSTANCEID = 0x0F, 41 mMAP_AP_PARAMETERMASK = 0x10, 42 mMAP_AP_FOLDERLISTINGSIZE = 0x11, 43 mMAP_AP_MESSAGESLISTINGSIZE = 0x12, 44 mMAP_AP_SUBJECTLENGTH = 0x13, 45 mMAP_AP_CHARSET = 0x14, 46 mMAP_AP_FRACTIONREQUEST = 0x15, 47 mMAP_AP_FRACTIONDELIVER = 0x16, 48 mMAP_AP_STATUSINDICATOR = 0x17, 49 mMAP_AP_STATUSVALUE = 0x18, 50 mMAP_AP_MSETIME = 0x19, @obexd/src/mimetype.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<¡ršg.h > 31  ~<¡dšt.h > 32  ~<¡dlib.h > 33  ~ 35  ~ 37  ~"log.h " 38  ~"obex.h " 39  ~"mim‘y³.h " 41  GSLi¡ * gdriv”s = NULL ; 43  GSLi¡ * gw©ches = NULL ; 45  sio_w©ch { 46 * mobjeù ; 47 obex_objeù_io_func mfunc ; 48 * mu£r_d©a ; 51  $obex_objeù_£t_io_æags (* objeù ,  æags ,  ”r ) 53 GSLi¡ * l ; 55  l = w©ches ;†;) { 56  io_w©ch * w©ch = l -> d©a ; 58 l =†-> Ãxt ; 60 ià( w©ch -> objeù != object) 63 ià( w©ch -> `func ( objeù , æags , ”r , w©ch-> u£r_d©a è=ð TRUE ) 66 ià( `g_¦i¡_fšd ( w©ches , w©ch è=ð NULL ) 69 w©ches = `g_¦i¡_»move (w©ches, w©ch ); 70 `g_ä“ ( w©ch ); 72 } } 74  io_w©ch * $fšd_io_w©ch (* objeù ) 76 GSLi¡ * l ; 78  l = w©ches ;†;† =†-> Ãxt ) { 79  io_w©ch * w©ch = l -> d©a ; 81 ià( w©ch -> objeù == object) 82  w©ch ; 85  NULL ; 86 } } 88  $»£t_io_w©ch (* objeù ) 90  io_w©ch * w©ch ; 92 w©ch = `fšd_io_w©ch ( objeù ); 93 ià( w©ch =ð NULL ) 96 w©ches = `g_¦i¡_»move (w©ches, w©ch ); 97 `g_ä“ ( w©ch ); 98 } } 100  $£t_io_w©ch (* objeù , obex_objeù_io_func func , 101 * u£r_d©a ) 103  io_w©ch * w©ch ; 105 ià( func =ð NULL ) { 106 `»£t_io_w©ch ( objeù ); 110 w©ch = `fšd_io_w©ch ( objeù ); 111 ià( w©ch ) 112  - EPERM ; 114 w©ch = `g_Ãw0 ( io_w©ch , 1); 115 w©ch -> objeù = object; 116 w©ch -> func = func; 117 w©ch -> u£r_d©a = user_data; 119 w©ches = `g_¦i¡_­³nd (w©ches, w©ch ); 122 } } 124  obex_mime_ty³_driv” * $fšd_driv” (cÚ¡ ušt8_t * rg‘ , 125  rg‘_size , 126 cÚ¡ * mim‘y³ , cÚ¡ ušt8_t * who , 127  who_size ) 129 GSLi¡ * l ; 131  l = driv”s ;†;† =†-> Ãxt ) { 132  obex_mime_ty³_driv” * driv” = l -> d©a ; 134 ià( `memncmp0 ( rg‘ , rg‘_size , driv” ->target, driver->target_size)) 137 ià( `memncmp0 ( who , who_size , driv” ->who, driver->who_size)) 140 ià( mim‘y³ =ð NULL || driv” ->mimetype == NULL) { 141 ià( mim‘y³ =ð driv” ->mimetype) 142  driv” ; 147 ià( `g_ascii_¡rÿ£cmp ( mim‘y³ , driv” ->mimetype) == 0) 148  driv” ; 151  NULL ; 152 } } 154  obex_mime_ty³_driv” * $obex_mime_ty³_driv”_fšd (cÚ¡ ušt8_t * rg‘ , 155  rg‘_size , 156 cÚ¡ * mim‘y³ , cÚ¡ ušt8_t * who , 157  who_size ) 159  obex_mime_ty³_driv” * driv” ; 161 driv” = `fšd_driv” ( rg‘ , rg‘_size , mim‘y³ , who , who_size ); 162 ià( driv” =ð NULL ) { 163 ià( who !ð NULL ) { 165 driv” = `fšd_driv” ( rg‘ , rg‘_size , mim‘y³ , NULL , 0); 166 ià( driv” !ð NULL ) 167  driv” ; 170 ià( mim‘y³ !ð NULL ) 172 driv” = `fšd_driv” ( rg‘ , rg‘_size , NULL , NULL, 0); 174 ià( driv” =ð NULL ) 176 driv” = `fšd_driv” ( NULL , 0, NULL, NULL, 0); 179  driv” ; 180 } } 182  $obex_mime_ty³_driv”_»gi¡” ( obex_mime_ty³_driv” * driv” ) 184 ià(! driv” ) { 185 `”rÜ ("Invalid driver"); 186  - EINVAL ; 189 ià( `fšd_driv” ( driv” -> rg‘ , driv”-> rg‘_size , driv”-> mim‘y³ , 190 driv” -> who , driv”-> who_size )) { 191 `”rÜ ("Permission denied: %s could‚ot be„egistered", 192 driv” -> mim‘y³ ); 193  - EPERM ; 196 ià( driv” -> £t_io_w©ch =ð NULL ) 197 driv” -> £t_io_w©ch = set_io_watch; 199 `DBG ("driv” %°mim‘y³ % »gi¡”ed", driv” , driv”-> mim‘y³ ); 201 driv”s = `g_¦i¡_­³nd (driv”s, driv” ); 204 } } 206  $obex_mime_ty³_driv”_uÄegi¡” ( obex_mime_ty³_driv” * driv” ) 208 ià(! `g_¦i¡_fšd ( driv”s , driv” )) { 209 `”rÜ ("UÇbËØuÄegi¡”: NØsuch driv” %p", driv” ); 213 `DBG ("driv” %°mim‘y³ % uÄegi¡”ed", driv” , driv”-> mim‘y³ ); 215 driv”s = `g_¦i¡_»move (driv”s, driv” ); 216 } } @obexd/src/mimetype.h 24  $gboÞ—n (* tobex_objeù_io_func è(* tobjeù ,  tæags ,  t”r , 25 * tu£r_d©a ); 27  sobex_mime_ty³_driv” { 28 cÚ¡ ušt8_t * rg‘ ; 29  rg‘_size ; 30 cÚ¡ * mim‘y³ ; 31 cÚ¡ ušt8_t * who ; 32  who_size ; 33 *(* Ý’ è(cÚ¡ * Çme ,  oæag , mode_t mode , 34 * driv”_d©a , size_t * size , * ”r ); 35 (* þo£ è(* objeù ); 36 `ssize_t (* g‘_Ãxt_h—d” )(* objeù , * buf , size_t mtu , 37 ušt8_t * hi ); 38 `ssize_t (* »ad è(* objeù , * buf , size_t couÁ ); 39 `ssize_t (* wr™e è(* objeù , cÚ¡ * buf , size_t couÁ ); 40 (* æush è(* objeù ); 41 (* cÝy è(cÚ¡ * Çme , cÚ¡ * de¡Çme ); 42 (* move è(cÚ¡ * Çme , cÚ¡ * de¡Çme ); 43 (* »move è(cÚ¡ * Çme ); 44 (* £t_io_w©ch è(* objeù , obex_objeù_io_func func , 45 * u£r_d©a ); 48  `obex_mime_ty³_driv”_»gi¡” ( obex_mime_ty³_driv” * driv” ); 49  `obex_mime_ty³_driv”_uÄegi¡” ( obex_mime_ty³_driv” * driv” ); 50  obex_mime_ty³_driv” * `obex_mime_ty³_driv”_fšd (cÚ¡ ušt8_t * rg‘ , 51  rg‘_size , 52 cÚ¡ * mim‘y³ , cÚ¡ ušt8_t * who , 53  who_size ); 55  `obex_objeù_£t_io_æags (* objeù ,  æags ,  ”r ); @obexd/src/obex-priv.h 25  sobex_£ssiÚ { 26 GIOChªÃl * mio ; 27 ušt32_t mid ; 28 ušt8_t mcmd ; 29 ušt8_t maùiÚ_id ; 30 * m¤c ; 31 * md¡ ; 32 * mÇme ; 33 * mde¡Çme ; 34 * mty³ ; 35 * m·th ; 36 time_t mtime ; 37 ušt8_t * m­·¿m ; 38 size_t m­·¿m_Ën ; 39 cÚ¡ * mnÚhdr ; 40 size_t mnÚhdr_Ën ; 41 gušt mg‘_r¥ ; 42 ušt8_t * mbuf ; 43 št64_t m³ndšg ; 44 št64_t moff£t ; 45 št64_t msize ; 46 * mobjeù ; 47 gboÞ—n mabÜ‹d ; 48  m”r ; 49  obex_£rviû_driv” * m£rviû ; 50 * m£rviû_d©a ; 51  obex_£rv” * m£rv” ; 52 gboÞ—n mchecked ; 53 GObex * mobex ; 54  obex_mime_ty³_driv” * mdriv” ; 55 gboÞ—n mh—d”s_£Á ; 58  obex_£ssiÚ_¡¬t ( GIOChªÃl * io , ušt16_t tx_mtu , ušt16_ˆ rx_mtu , 59 gboÞ—n ¡»am ,  obex_£rv” * £rv” ); @obexd/src/obex.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<¡dlib.h > 32  ~ 33  ~ 34  ~<¡ršg.h > 35  ~ 36  ~ 37  ~ 38  ~ 39  ~ 40  ~<š‰y³s.h > 42  ~ 43  ~ 45  ~"btio/btio.h " 46  ~"obexd.h " 47  ~"log.h " 48  ~"obex.h " 49  ~"obex-´iv.h " 50  ~"£rv”.h " 51  ~"mªag”.h " 52  ~"mim‘y³.h " 53  ~"£rviû.h " 54  ~"Œª¥Üt.h " 56  GSLi¡ * g£ssiÚs = NULL ; 59 ušt8_t mv”siÚ ; 60 ušt8_t mæags ; 61 ušt16_t mmtu ; 62 } t__©Œibu‹__ (( t·cked )è tobex_cÚÃù_hdr_t ; 64  sauth_h—d” { 65 ušt8_t mg ; 66 ušt8_t mËn ; 67 ušt8_t mv® [0]; 68 } __©Œibu‹__ (( ·cked )); 72  mcmd ; 73 cÚ¡ * mÇme ; 74 } gobex_commªd [] = { 75 { G_OBEX_OP_CONNECT , "CONNECT" }, 76 { G_OBEX_OP_DISCONNECT , "DISCONNECT" }, 77 { G_OBEX_OP_PUT , "PUT" }, 78 { G_OBEX_OP_GET , "GET" }, 79 { G_OBEX_OP_SETPATH , "SETPATH" }, 80 { G_OBEX_OP_SESSION , "SESSION" }, 81 { G_OBEX_OP_ABORT , "ABORT" }, 82 { G_OBEX_OP_ACTION , "ACTION" }, 83 { 0xFF, NULL }, 88  mr¥ ; 89 cÚ¡ * mÇme ; 90 } gobex_»¥Ú£ [] = { 91 { G_OBEX_RSP_CONTINUE , "CONTINUE" }, 92 { G_OBEX_RSP_SUCCESS , "SUCCESS" }, 93 { G_OBEX_RSP_CREATED , "CREATED" }, 94 { G_OBEX_RSP_ACCEPTED , "ACCEPTED" }, 95 { G_OBEX_RSP_NON_AUTHORITATIVE , "NON_AUTHORITATIVE" }, 96 { G_OBEX_RSP_NO_CONTENT , "NO_CONTENT" }, 97 { G_OBEX_RSP_RESET_CONTENT , "RESET_CONTENT" }, 98 { G_OBEX_RSP_PARTIAL_CONTENT , "PARTIAL_CONTENT" }, 99 { G_OBEX_RSP_MULTIPLE_CHOICES , "MULTIPLE_CHOICES" }, 100 { G_OBEX_RSP_MOVED_PERMANENTLY , "MOVED_PERMANENTLY" }, 101 { G_OBEX_RSP_MOVED_TEMPORARILY , "MOVED_TEMPORARILY" }, 102 { G_OBEX_RSP_SEE_OTHER , "SEE_OTHER" }, 103 { G_OBEX_RSP_NOT_MODIFIED , "NOT_MODIFIED" }, 104 { G_OBEX_RSP_USE_PROXY , "USE_PROXY" }, 105 { G_OBEX_RSP_BAD_REQUEST , "BAD_REQUEST" }, 106 { G_OBEX_RSP_UNAUTHORIZED , "UNAUTHORIZED" }, 107 { G_OBEX_RSP_PAYMENT_REQUIRED , "PAYMENT_REQUIRED" }, 108 { G_OBEX_RSP_FORBIDDEN , "FORBIDDEN" }, 109 { G_OBEX_RSP_NOT_FOUND , "NOT_FOUND" }, 110 { G_OBEX_RSP_METHOD_NOT_ALLOWED , "METHOD_NOT_ALLOWED" }, 111 { G_OBEX_RSP_NOT_ACCEPTABLE , "NOT_ACCEPTABLE" }, 112 { G_OBEX_RSP_PROXY_AUTH_REQUIRED , "PROXY_AUTH_REQUIRED" }, 113 { G_OBEX_RSP_REQUEST_TIME_OUT , "REQUEST_TIME_OUT" }, 114 { G_OBEX_RSP_CONFLICT , "CONFLICT" }, 115 { G_OBEX_RSP_GONE , "GONE" }, 116 { G_OBEX_RSP_LENGTH_REQUIRED , "LENGTH_REQUIRED" }, 117 { G_OBEX_RSP_PRECONDITION_FAILED , "PRECONDITION_FAILED" }, 118 { G_OBEX_RSP_REQ_ENTITY_TOO_LARGE , "REQ_ENTITY_TOO_LARGE" }, 119 { G_OBEX_RSP_REQ_URL_TOO_LARGE , "REQ_URL_TOO_LARGE" }, 120 { G_OBEX_RSP_UNSUPPORTED_MEDIA_TYPE , "UNSUPPORTED_MEDIA_TYPE"}, 121 { G_OBEX_RSP_INTERNAL_SERVER_ERROR , "INTERNAL_SERVER_ERROR" }, 122 { G_OBEX_RSP_NOT_IMPLEMENTED , "NOT_IMPLEMENTED" }, 123 { G_OBEX_RSP_BAD_GATEWAY , "BAD_GATEWAY" }, 124 { G_OBEX_RSP_SERVICE_UNAVAILABLE , "SERVICE_UNAVAILABLE" }, 125 { G_OBEX_RSP_GATEWAY_TIMEOUT , "GATEWAY_TIMEOUT" }, 126 { G_OBEX_RSP_VERSION_NOT_SUPPORTED , "VERSION_NOT_SUPPORTED" }, 127 { G_OBEX_RSP_DATABASE_FULL , "DATABASE_FULL" }, 128 { G_OBEX_RSP_DATABASE_LOCKED , "DATABASE_LOCKED" }, 129 { 0xFF, NULL }, 132  gboÞ—n hªdË_async_io (* objeù ,  æags ,  ”r , 133 * u£r_d©a ); 135  $´št_ev’t ( cmd ,  r¥ ) 137 cÚ¡ * cmd¡r = NULL , * r¥¡r = NULL; 138  i ; 139  Ï¡cmd ; 141 ià( cmd < 0) 142 cmd = Ï¡cmd ; 144 Ï¡cmd = cmd ; 146  i = 0; obex_commªd [i]. cmd != 0xFF; i++) { 147 ià( obex_commªd [ i ]. cmd != cmd) 149 cmd¡r = obex_commªd [ i ]. Çme ; 152  i = 0; obex_»¥Ú£ [i]. r¥ != 0xFF; i++) { 153 ià( obex_»¥Ú£ [ i ]. r¥ !=„sp) 155 r¥¡r = obex_»¥Ú£ [ i ]. Çme ; 158 `obex_debug ("%s(0x%x), %s(0x%x)", cmd¡r , cmd , r¥¡r , r¥ ); 159 } } 161  $os_£t_»¥Ú£ ( obex_£ssiÚ * os ,  ”r ) 163 ušt8_t r¥ ; 165 r¥ = `g_obex_”ºo_to_r¥ ( ”r ); 167 `´št_ev’t (-1, r¥ ); 169 `g_obex_£nd_r¥ ( os -> obex , r¥ , NULL , G_OBEX_HDR_INVALID ); 170 } } 172  $os_£ssiÚ_m¬k_abÜ‹d ( obex_£ssiÚ * os ) 175 ià( os -> abÜ‹d || os-> size =ð OBJECT_SIZE_UNKNOWN ) 178 os -> abÜ‹d = (os-> size !ðos-> off£t ); 179 } } 181  $os_»£t_£ssiÚ ( obex_£ssiÚ * os ) 183 `os_£ssiÚ_m¬k_abÜ‹d ( os ); 185 ià( os -> objeù ) { 186 os -> driv” -> `£t_io_w©ch (os-> objeù , NULL , NULL); 187 os -> driv” -> `þo£ (os-> objeù ); 188 ià( os -> abÜ‹d && os-> cmd =ð G_OBEX_OP_PUT && os-> ·th && 189 os -> driv” -> »move ) 190 os -> driv” -> `»move (os-> ·th ); 193 ià( os -> £rviû && os->£rviû-> »£t ) 194 os -> £rviû -> `»£t (os, os-> £rviû_d©a ); 196 ià( os -> Çme ) { 197 `g_ä“ ( os -> Çme ); 198 os -> Çme = NULL ; 200 ià( os -> ty³ ) { 201 `g_ä“ ( os -> ty³ ); 202 os -> ty³ = NULL ; 204 ià( os -> buf ) { 205 `g_ä“ ( os -> buf ); 206 os -> buf = NULL ; 208 ià( os -> ·th ) { 209 `g_ä“ ( os -> ·th ); 210 os -> ·th = NULL ; 212 ià( os -> ­·¿m ) { 213 `g_ä“ ( os -> ­·¿m ); 214 os -> ­·¿m = NULL ; 215 os -> ­·¿m_Ën = 0; 218 ià( os -> g‘_r¥ > 0) { 219 `g_obex_»move_»que¡_funùiÚ ( os -> obex , os-> g‘_r¥ ); 220 os -> g‘_r¥ = 0; 223 os -> objeù = NULL ; 224 os -> driv” = NULL ; 225 os -> abÜ‹d = FALSE ; 226 os -> ³ndšg = 0; 227 os -> off£t = 0; 228 os -> size = OBJECT_SIZE_DELETE ; 229 os -> h—d”s_£Á = FALSE ; 230 os -> checked = FALSE ; 231 } } 233  $obex_£ssiÚ_ä“ ( obex_£ssiÚ * os ) 235 £ssiÚs = `g_¦i¡_»move (£ssiÚs, os ); 237 ià( os -> io ) 238 `g_io_chªÃl_uÄef ( os -> io ); 240 ià( os -> obex ) 241 `g_obex_uÄef ( os -> obex ); 243 `g_ä“ ( os -> ¤c ); 244 `g_ä“ ( os -> d¡ ); 246 `g_ä“ ( os ); 247 } } 250  time_t $·r£_iso8610 (cÚ¡ * v® ,  size ) 252 time_t time , tz_off£t = 0; 253  tm m; 254 * d©e ; 255  tz ; 256  Ä ; 258 `mem£t (& tm , 0, (tm)); 260 d©e = `g_¡ºdup ( v® , size ); 261 Ä = `ssÿnf ( d©e , "%04u%02u%02uT%02u%02u%02u%c", 262 & tm . tm_y—r , &tm. tm_mÚ , &tm. tm_mday , 263 & tm . tm_hour , &tm. tm_mš , &tm. tm_£c , 264 & tz ); 265 `g_ä“ ( d©e ); 266 ià( Ä < 6) { 271 tm . tm_y—r -= 1900; 272 tm . tm_mÚ --; 273 tm . tm_isd¡ = -1; 275 #ià `defšed ( HAVE_TM_GMTOFF ) 276 tz_off£t = tm . tm_gmtoff ; 277 #–ià `defšed ( HAVE_TIMEZONE ) 278 tz_off£t = - timezÚe ; 279 ià( tm . tm_isd¡ > 0) 280 tz_off£t += 3600; 283 time = `mktime (& tm ); 284 ià( Ä == 7) { 290 time +ð tz_off£t ; 293  time ; 294 } } 296  $·r£_£rviû ( obex_£ssiÚ * os , GObexPack‘ * »q ) 298 GObexH—d” * hdr ; 299 cÚ¡ gušt8 * rg‘ = NULL , * who = NULL; 300 gsize rg‘_size = 0, who_size = 0; 302 hdr = `g_obex_·ck‘_g‘_h—d” ( »q , G_OBEX_HDR_WHO ); 303 ià( hdr =ð NULL ) 304  rg‘ ; 306 `g_obex_h—d”_g‘_by‹s ( hdr , & who , & who_size ); 308 rg‘ : 309 hdr = `g_obex_·ck‘_g‘_h—d” ( »q , G_OBEX_HDR_TARGET ); 310 ià( hdr =ð NULL ) 311  ´obe ; 313 `g_obex_h—d”_g‘_by‹s ( hdr , & rg‘ , & rg‘_size ); 315 ´obe : 316 os -> £rviû = `obex_£rviû_driv”_fšd (os-> £rv” -> driv”s , 317 rg‘ , rg‘_size , 318 who , who_size ); 319 } } 321  $cmd_cÚÃù ( GObex * obex , GObexPack‘ * »q , * u£r_d©a ) 323  obex_£ssiÚ * os = u£r_d©a ; 324 GObexPack‘ * r¥ ; 325 GObexH—d” * hdr ; 326  ”r ; 328 `DBG (""); 330 `´št_ev’t ( G_OBEX_OP_CONNECT , -1); 332 `·r£_£rviû ( os , »q ); 334 ià( os -> £rviû =ð NULL || os->£rviû-> cÚÃù == NULL) { 335 `”rÜ ("Connect‡ttempto‡‚on-supportedarget"); 336 `os_£t_»¥Ú£ ( os , - EPERM ); 340 `DBG ("S–eùed driv”: %s", os -> £rviû -> Çme ); 342 os -> £rviû_d©a = os-> £rviû -> `cÚÃù (os, & ”r ); 343 ià( ”r < 0) { 344 `os_£t_»¥Ú£ ( os , ”r ); 348 os -> cmd = G_OBEX_OP_CONNECT ; 350 r¥ = `g_obex_·ck‘_Ãw ( G_OBEX_RSP_SUCCESS , TRUE , G_OBEX_HDR_INVALID ); 352 ià( os -> £rviû -> rg‘ ) { 353 hdr = `g_obex_h—d”_Ãw_by‹s ( G_OBEX_HDR_WHO , 354 os -> £rviû -> rg‘ , 355 os -> £rviû -> rg‘_size ); 356 `g_obex_·ck‘_add_h—d” ( r¥ , hdr ); 359 `g_obex_£nd ( obex , r¥ , NULL ); 361 `´št_ev’t (-1, 0); 362 } } 364  $cmd_discÚÃù ( GObex * obex , GObexPack‘ * »q , * u£r_d©a ) 366  obex_£ssiÚ * os = u£r_d©a ; 368 `DBG ("£ssiÚ %p", os ); 370 `´št_ev’t ( G_OBEX_OP_DISCONNECT , -1); 372 os -> cmd = G_OBEX_OP_DISCONNECT ; 374 `os_£t_»¥Ú£ ( os , 0); 375 } } 377  ssize_t $driv”_wr™e ( obex_£ssiÚ * os ) 379 ssize_t Ën = 0; 381  os -> ³ndšg > 0) { 382 ssize_t w ; 384 w = os -> driv” -> `wr™e (os-> objeù , os-> buf + Ën , os-> ³ndšg ); 385 ià( w < 0) { 386 `”rÜ ("wr™e(): % (%zd)", `¡»¼Ü (- w ), -w); 387 ià( w =ð- EINTR ) 389 ià( w =ð- EINVAL ) 390 `memmove ( os -> buf , os->buà+ Ën , os-> ³ndšg ); 392  w ; 395 Ën +ð w ; 396 os -> off£t +ð w ; 397 os -> ³ndšg -ð w ; 400 `DBG ("%zd wr™‹n", Ën ); 402 ià( os -> £rviû -> ´og»ss !ð NULL ) 403 os -> £rviû -> `´og»ss (os, os-> £rviû_d©a ); 405  Ën ; 406 } } 408  gssize $driv”_»ad ( obex_£ssiÚ * os , * buf , gsize size ) 410 gssize Ën ; 412 ià( os -> objeù =ð NULL ) 413  - EIO ; 415 ià( os -> £rviû -> ´og»ss !ð NULL ) 416 os -> £rviû -> `´og»ss (os, os-> £rviû_d©a ); 418 Ën = os -> driv” -> `»ad (os-> objeù , buf , size ); 419 ià( Ën < 0) { 420 `”rÜ ("»ad(): % (%zd)", `¡»¼Ü (- Ën ), -len); 421 ià( Ën =ð- ENOSTR ) 423 ià( Ën =ð- EAGAIN ) 424 os -> driv” -> `£t_io_w©ch (os-> objeù , hªdË_async_io , 425 os ); 428 os -> off£t +ð Ën ; 430 `DBG ("%zd„—d", Ën ); 432  Ën ; 433 } } 435  gssize $£nd_d©a (* buf , gsize size , gpoš‹r u£r_d©a ) 437  obex_£ssiÚ * os = u£r_d©a ; 439 `DBG ("Çme=% ty³=% fže=%°size=%zu", os -> Çme , os-> ty³ , os-> objeù , 440 size ); 442 ià( os -> abÜ‹d ) 443  os -> ”r < 0 ? os->”¸: - EPERM ; 445  `driv”_»ad ( os , buf , size ); 446 } } 448  $Œªsãr_com¶‘e ( GObex * obex , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 450  obex_£ssiÚ * os = u£r_d©a ; 452 `DBG (""); 454 ià( ”r !ð NULL ) { 455 `”rÜ ("Œªsã¸çžed: %s\n", ”r -> mes§ge ); 456  »£t ; 459 ià( os -> objeù && os-> driv” && os->driv”-> æush ) { 460 ià( os -> driv” -> `æush (os-> objeù è=ð- EAGAIN ) { 461 `g_obex_su¥’d ( os -> obex ); 462 os -> driv” -> `£t_io_w©ch (os-> objeù , hªdË_async_io , 463 os ); 468 »£t : 469 `os_»£t_£ssiÚ ( os ); 470 } } 472  $driv”_g‘_h—d”s ( obex_£ssiÚ * os ) 474 GObexPack‘ * r¥ ; 475 gssize Ën ; 476 gušt8 d©a [255]; 477 gušt8 id ; 478 GObexH—d” * hdr ; 480 `DBG ("Çme=% ty³=% objeù=%p", os -> Çme , os-> ty³ , os-> objeù ); 482 ià( os -> abÜ‹d ) 483  os -> ”r < 0 ? os->”¸: - EPERM ; 485 ià( os -> objeù =ð NULL ) 486  - EIO ; 488 ià( os -> h—d”s_£Á ) 491 r¥ = `g_obex_·ck‘_Ãw ( G_OBEX_RSP_CONTINUE , TRUE , G_OBEX_HDR_INVALID ); 493 ià( os -> driv” -> g‘_Ãxt_h—d” =ð NULL ) 494  dÚe ; 496 ( Ën = os -> driv” -> `g‘_Ãxt_h—d” (os-> objeù , & d©a , 497 ( d©a ), & id ))) { 498 ià( Ën < 0) { 499 `”rÜ ("g‘_Ãxt_h—d”(): % (%zd)", `¡»¼Ü (- Ën ), 500 - Ën ); 502 `g_obex_·ck‘_ä“ ( r¥ ); 504 ià( Ën =ð- EAGAIN ) 505  Ën ; 507 `g_ä“ ( os -> buf ); 508 os -> buf = NULL ; 510  Ën ; 513 hdr = `g_obex_h—d”_Ãw_by‹s ( id , d©a , Ën ); 514 `g_obex_·ck‘_add_h—d” ( r¥ , hdr ); 517 dÚe : 518 ià( os -> size !ð OBJECT_SIZE_UNKNOWN && os->siz< UINT32_MAX ) { 519 hdr = `g_obex_h—d”_Ãw_ušt32 ( G_OBEX_HDR_LENGTH , os -> size ); 520 `g_obex_·ck‘_add_h—d” ( r¥ , hdr ); 523 `g_obex_g‘_r¥_pkt ( os -> obex , r¥ , £nd_d©a , Œªsãr_com¶‘e , os, 524 NULL ); 526 os -> h—d”s_£Á = TRUE ; 528 `´št_ev’t (-1, G_OBEX_RSP_CONTINUE ); 531 } } 533  gboÞ—n $hªdË_async_io (* objeù ,  æags ,  ”r , 534 * u£r_d©a ) 536  obex_£ssiÚ * os = u£r_d©a ; 538 ià( ”r < 0) 539  dÚe ; 541 ià( æags & G_IO_OUT ) 542 ”r = `driv”_wr™e ( os ); 543 ià(( æags & G_IO_IN è&& ! os -> h—d”s_£Á ) 544 ”r = `driv”_g‘_h—d”s ( os ); 546 ià( ”r =ð- EAGAIN ) 547  TRUE ; 549 dÚe : 550 ià( ”r < 0) { 551 os -> ”r =ƒrr; 552 os -> abÜ‹d = TRUE ; 555 `g_obex_»sume ( os -> obex ); 557  FALSE ; 558 } } 560  gboÞ—n $»cv_d©a (cÚ¡ * buf , gsize size , gpoš‹r u£r_d©a ) 562  obex_£ssiÚ * os = u£r_d©a ; 563 ssize_t »t ; 565 `DBG ("Çme=% ty³=% fže=%°size=%zu", os -> Çme , os-> ty³ , os-> objeù , 566 size ); 568 ià( os -> abÜ‹d ) 569  FALSE ; 572 ià( os -> size =ð OBJECT_SIZE_DELETE ) 573 os -> size = OBJECT_SIZE_UNKNOWN ; 575 os -> buf = `g_»®loc (os->buf, os-> ³ndšg + size ); 576 `memýy ( os -> buf + os-> ³ndšg , buf, size ); 577 os -> ³ndšg +ð size ; 580 ià( os -> objeù =ð NULL || os-> driv” == NULL) { 581 `DBG ("StÜed %" PRIu64 " bytes intoemporary buffer", 582 os -> ³ndšg ); 583  TRUE ; 586 »t = `driv”_wr™e ( os ); 587 ià( »t >= 0) 588  TRUE ; 590 ià( »t =ð- EAGAIN ) { 591 `g_obex_su¥’d ( os -> obex ); 592 os -> driv” -> `£t_io_w©ch (os-> objeù , hªdË_async_io , os); 593  TRUE ; 596  FALSE ; 597 } } 599  $·r£_ty³ ( obex_£ssiÚ * os , GObexPack‘ * »q ) 601 GObexH—d” * hdr ; 602 cÚ¡ gušt8 * ty³ ; 603 gsize Ën ; 605 `g_ä“ ( os -> ty³ ); 606 os -> ty³ = NULL ; 608 hdr = `g_obex_·ck‘_g‘_h—d” ( »q , G_OBEX_HDR_TYPE ); 609 ià( hdr =ð NULL ) 610  ´obe ; 612 ià(! `g_obex_h—d”_g‘_by‹s ( hdr , & ty³ , & Ën )) 613  ´obe ; 616 ià( ty³ [ Ën - 1] != '\0') 617  ´obe ; 619 os -> ty³ = `g_¡ºdup ((cÚ¡ *èty³, Ën ); 620 `DBG ("TYPE: %s", os -> ty³ ); 622 ´obe : 623 os -> driv” = `obex_mime_ty³_driv”_fšd (os-> £rviû -> rg‘ , 624 os -> £rviû -> rg‘_size , 625 os -> ty³ , 626 os -> £rviû -> who , 627 os -> £rviû -> who_size ); 628 } } 630  $·r£_Çme ( obex_£ssiÚ * os , GObexPack‘ * »q ) 632 GObexH—d” * hdr ; 633 cÚ¡ * Çme ; 635 `g_ä“ ( os -> Çme ); 636 os -> Çme = NULL ; 638 hdr = `g_obex_·ck‘_g‘_h—d” ( »q , G_OBEX_HDR_NAME ); 639 ià( hdr =ð NULL ) 642 ià(! `g_obex_h—d”_g‘_unicode ( hdr , & Çme )) 645 os -> Çme = `g_¡rdup (name); 646 `DBG ("NAME: %s", os -> Çme ); 647 } } 649  $·r£_­·¿m ( obex_£ssiÚ * os , GObexPack‘ * »q ) 651 GObexH—d” * hdr ; 652 cÚ¡ gušt8 * ­·¿m ; 653 gsize Ën ; 655 hdr = `g_obex_·ck‘_g‘_h—d” ( »q , G_OBEX_HDR_APPARAM ); 656 ià( hdr =ð NULL ) 659 ià(! `g_obex_h—d”_g‘_by‹s ( hdr , & ­·¿m , & Ën )) 662 os -> ­·¿m = `g_memdup ×µ¬am, Ën ); 663 os -> ­·¿m_Ën = Ën ; 664 `DBG ("APPARAM"); 665 } } 667  $cmd_g‘ ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 669  obex_£ssiÚ * os = u£r_d©a ; 670  ”r ; 672 `DBG ("£ssiÚ %p", os ); 674 `´št_ev’t ( G_OBEX_OP_GET , -1); 676 ià( os -> £rviû =ð NULL ) { 677 `os_£t_»¥Ú£ ( os , - EPERM ); 681 ià( os -> £rviû -> g‘ =ð NULL ) { 682 `os_£t_»¥Ú£ ( os , - ENOSYS ); 686 os -> h—d”s_£Á = FALSE ; 688 ià( os -> ty³ ) { 689 `g_ä“ ( os -> ty³ ); 690 os -> ty³ = NULL ; 693 `·r£_ty³ ( os , »q ); 695 ià(! os -> driv” ) { 696 `”rÜ ("No driver found"); 697 `os_£t_»¥Ú£ ( os , - ENOSYS ); 701 os -> cmd = G_OBEX_OP_GET ; 703 `·r£_Çme ( os , »q ); 705 `·r£_­·¿m ( os , »q ); 707 ”r = os -> £rviû -> `g‘ (os, os-> £rviû_d©a ); 708 ià( ”r == 0) 711 `os_£t_»¥Ú£ ( os , ”r ); 712 } } 714  $cmd_£©h ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 716  obex_£ssiÚ * os = u£r_d©a ; 717  ”r ; 719 `DBG (""); 721 `´št_ev’t ( G_OBEX_OP_SETPATH , -1); 723 ià( os -> £rviû =ð NULL ) { 724 ”r = - EPERM ; 725  dÚe ; 728 ià( os -> £rviû -> £©h =ð NULL ) { 729 ”r = - ENOSYS ; 730  dÚe ; 733 os -> cmd = G_OBEX_OP_SETPATH ; 735 `·r£_Çme ( os , »q ); 737 os -> nÚhdr = `g_obex_·ck‘_g‘_d©a ( »q , &os-> nÚhdr_Ën ); 739 ”r = os -> £rviû -> `£©h (os, os-> £rviû_d©a ); 740 dÚe : 741 `os_£t_»¥Ú£ ( os , ”r ); 742 } } 744  $obex_g‘_¡»am_¡¬t ( obex_£ssiÚ * os , cÚ¡ * fž’ame ) 746  ”r ; 747 * objeù ; 748 size_t size = OBJECT_SIZE_UNKNOWN ; 750 objeù = os -> driv” -> `Ý’ ( fž’ame , O_RDONLY , 0, os-> £rviû_d©a , 751 & size , & ”r ); 752 ià( objeù =ð NULL ) { 753 `”rÜ ("Ý’(%s): % (%d)", fž’ame , `¡»¼Ü (- ”r ), -err); 754  ”r ; 757 os -> objeù = object; 758 os -> off£t = 0; 759 os -> size = size; 761 ”r = `driv”_g‘_h—d”s ( os ); 762 ià( ”r !ð- EAGAIN ) 763  ”r ; 765 `g_obex_su¥’d ( os -> obex ); 766 os -> driv” -> `£t_io_w©ch (os-> objeù , hªdË_async_io , os); 768 } } 770  $obex_put_¡»am_¡¬t ( obex_£ssiÚ * os , cÚ¡ * fž’ame ) 772  ”r ; 774 os -> objeù = os-> driv” -> `Ý’ ( fž’ame , O_WRONLY | O_CREAT | O_TRUNC , 775 #ifdeà __TIZEN_PATCH__ 776 0644, os -> £rviû_d©a , 778 0600, os -> £rviû_d©a , 780 os -> size !ð OBJECT_SIZE_UNKNOWN ? 781 ( size_t *è& os -> size : NULL , & ”r ); 782 ià( os -> objeù =ð NULL ) { 783 `”rÜ ("Ý’(%s): % (%d)", fž’ame , `¡»¼Ü (- ”r ), -err); 784  ”r ; 787 os -> ·th = `g_¡rdup ( fž’ame ); 790 } } 792  $·r£_Ëngth ( obex_£ssiÚ * os , GObexPack‘ * »q ) 794 GObexH—d” * hdr ; 795 gušt32 size ; 797 hdr = `g_obex_·ck‘_g‘_h—d” ( »q , G_OBEX_HDR_LENGTH ); 798 ià( hdr =ð NULL ) 801 ià(! `g_obex_h—d”_g‘_ušt32 ( hdr , & size )) 804 os -> size = size; 805 `DBG ("LENGTH: %" PRIu64 , os -> size ); 806 } } 808  $·r£_time ( obex_£ssiÚ * os , GObexPack‘ * »q ) 810 GObexH—d” * hdr ; 811 cÚ¡ gušt8 * time ; 812 gsize Ën ; 814 hdr = `g_obex_·ck‘_g‘_h—d” ( »q , G_OBEX_HDR_TIME ); 815 ià( hdr =ð NULL ) 819 ià(! `g_obex_h—d”_g‘_by‹s ( hdr , & time , & Ën )) 822 os -> time = `·r£_iso8610 ((cÚ¡ *ètime, Ën ); 823 `DBG ("TIME: %s", `ùime (& os -> time )); 824 } } 826  gboÞ—n $check_put ( GObex * obex , GObexPack‘ * »q , * u£r_d©a ) 828  obex_£ssiÚ * os = u£r_d©a ; 829  »t ; 831 ià( os -> £rviû -> chkput =ð NULL ) 832  dÚe ; 834 »t = os -> £rviû -> `chkput (os, os-> £rviû_d©a ); 835  »t ) { 838 - EAGAIN : 839 `g_obex_su¥’d ( os -> obex ); 840 os -> driv” -> `£t_io_w©ch (os-> objeù , hªdË_async_io , os); 841  TRUE ; 843 `os_£t_»¥Ú£ ( os , »t ); 844  FALSE ; 847 ià( os -> size =ð OBJECT_SIZE_DELETE || os->siz=ð OBJECT_SIZE_UNKNOWN ) 848 `DBG ("Got‡ PUT without‡ Length"); 850 dÚe : 851 os -> checked = TRUE ; 853  TRUE ; 854 } } 856  $cmd_put ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 858  obex_£ssiÚ * os = u£r_d©a ; 859  ”r ; 861 `DBG (""); 863 `´št_ev’t ( G_OBEX_OP_PUT , -1); 865 ià( os -> £rviû =ð NULL ) { 866 `os_£t_»¥Ú£ ( os , - EPERM ); 870 `·r£_ty³ ( os , »q ); 872 ià( os -> driv” =ð NULL ) { 873 `”rÜ ("No driver found"); 874 `os_£t_»¥Ú£ ( os , - ENOSYS ); 878 os -> cmd = G_OBEX_OP_PUT ; 881 ià( `g_obex_·ck‘_g‘_body ( »q )) 882 os -> size = OBJECT_SIZE_UNKNOWN ; 884 `·r£_Çme ( os , »q ); 885 `·r£_Ëngth ( os , »q ); 886 `·r£_time ( os , »q ); 887 `·r£_­·¿m ( os , »q ); 889 ià(! os -> checked ) { 890 ià(! `check_put ( obex , »q , u£r_d©a )) 894 ià( os -> £rviû -> put =ð NULL ) { 895 `os_£t_»¥Ú£ ( os , - ENOSYS ); 899 ”r = os -> £rviû -> `put (os, os-> £rviû_d©a ); 900 ià( ”r == 0) { 901 `g_obex_put_r¥ ( obex , »q , »cv_d©a , Œªsãr_com¶‘e , os , 902 NULL , G_OBEX_HDR_INVALID ); 903 `´št_ev’t ( G_OBEX_OP_PUT , G_OBEX_RSP_CONTINUE ); 907 `os_£t_»¥Ú£ ( os , ”r ); 908 } } 910  $·r£_de¡Çme ( obex_£ssiÚ * os , GObexPack‘ * »q ) 912 GObexH—d” * hdr ; 913 cÚ¡ * de¡Çme ; 915 `g_ä“ ( os -> de¡Çme ); 916 os -> de¡Çme = NULL ; 918 hdr = `g_obex_·ck‘_g‘_h—d” ( »q , G_OBEX_HDR_DESTNAME ); 919 ià( hdr =ð NULL ) 922 ià(! `g_obex_h—d”_g‘_unicode ( hdr , & de¡Çme )) 925 os -> de¡Çme = `g_¡rdup (destname); 926 `DBG ("DESTNAME: %s", os -> de¡Çme ); 927 } } 929  $·r£_aùiÚ ( obex_£ssiÚ * os , GObexPack‘ * »q ) 931 GObexH—d” * hdr ; 932 gušt8 id ; 934 hdr = `g_obex_·ck‘_g‘_h—d” ( »q , G_OBEX_HDR_ACTION ); 935 ià( hdr =ð NULL ) 938 ià(! `g_obex_h—d”_g‘_ušt8 ( hdr , & id )) 941 os -> aùiÚ_id = id ; 942 `DBG ("ACTION: 0x%02x", os -> aùiÚ_id ); 943 } } 945  $cmd_aùiÚ ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 947  obex_£ssiÚ * os = u£r_d©a ; 948  ”r ; 950 `DBG (""); 952 `´št_ev’t ( G_OBEX_OP_ACTION , -1); 954 ià( os -> £rviû =ð NULL ) { 955 ”r = - EPERM ; 956  dÚe ; 959 ià( os -> £rviû -> aùiÚ =ð NULL ) { 960 ”r = - ENOSYS ; 961  dÚe ; 964 os -> cmd = G_OBEX_OP_ACTION ; 966 `·r£_Çme ( os , »q ); 967 `·r£_de¡Çme ( os , »q ); 968 `·r£_aùiÚ ( os , »q ); 970 os -> driv” = `obex_mime_ty³_driv”_fšd (os-> £rviû -> rg‘ , 971 os -> £rviû -> rg‘_size , 972 NULL , 973 os -> £rviû -> who , 974 os -> £rviû -> who_size ); 975 ià( os -> driv” =ð NULL ) { 976 ”r = - ENOSYS ; 977  dÚe ; 980 ”r = os -> £rviû -> `aùiÚ (os, os-> £rviû_d©a ); 981 dÚe : 982 `os_£t_»¥Ú£ ( os , ”r ); 983 } } 985  $cmd_abÜt ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 987  obex_£ssiÚ * os = u£r_d©a ; 989 `DBG (""); 991 `´št_ev’t ( G_OBEX_OP_ABORT , -1); 993 `os_»£t_£ssiÚ ( os ); 995 `os_£t_»¥Ú£ ( os , 0); 996 } } 998  $obex_£ssiÚ_de¡roy ( obex_£ssiÚ * os ) 1000 `DBG (""); 1002 `os_»£t_£ssiÚ ( os ); 1004 ià( os -> £rviû && os->£rviû-> discÚÃù ) 1005 os -> £rviû -> `discÚÃù (os, os-> £rviû_d©a ); 1007 `obex_£ssiÚ_ä“ ( os ); 1008 } } 1010  $discÚn_func ( GObex * obex , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 1012  obex_£ssiÚ * os = u£r_d©a ; 1014 `”rÜ ("discÚÃùed: %s\n", ”r ?ƒ¼-> mes§ge : ""); 1015 `obex_£ssiÚ_de¡roy ( os ); 1016 } } 1018  $obex_£ssiÚ_¡¬t ( GIOChªÃl * io , ušt16_t tx_mtu , ušt16_ˆ rx_mtu , 1019 gboÞ—n ¡»am ,  obex_£rv” * £rv” ) 1021  obex_£ssiÚ * os ; 1022 GObex * obex ; 1023 GObexT¿n¥ÜtTy³ ty³ ; 1024  ušt32_t id = 0; 1026 `DBG (""); 1028 os = `g_Ãw0 ( obex_£ssiÚ , 1); 1029 os -> id = ++id; 1031 os -> £rviû = `obex_£rviû_driv”_fšd ( £rv” -> driv”s , NULL , 1032 0, NULL , 0); 1033 os -> £rv” = server; 1034 os -> size = OBJECT_SIZE_DELETE ; 1036 ty³ = ¡»am ? G_OBEX_TRANSPORT_STREAM : G_OBEX_TRANSPORT_PACKET ; 1038 obex = `g_obex_Ãw ( io , ty³ , rx_mtu , tx_mtu ); 1039 ià(! obex ) { 1040 `obex_£ssiÚ_ä“ ( os ); 1041  - EIO ; 1044 `g_obex_£t_discÚÃù_funùiÚ ( obex , discÚn_func , os ); 1045 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_CONNECT , cmd_cÚÃù , os ); 1046 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_DISCONNECT , cmd_discÚÃù , 1047 os ); 1048 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_PUT , cmd_put , os ); 1049 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_GET , cmd_g‘ , os ); 1050 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_SETPATH , cmd_£©h , os ); 1051 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_ACTION , cmd_aùiÚ , os ); 1052 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_ABORT , cmd_abÜt , os ); 1054 os -> obex = obex; 1055 os -> io = `g_io_chªÃl_»f (io); 1057 `obex_g‘sockÇme ( os , &os-> ¤c ); 1058 `obex_g‘³”Çme ( os , &os-> d¡ ); 1060 £ssiÚs = `g_¦i¡_´•’d (£ssiÚs, os ); 1063 } } 1065 cÚ¡ * $obex_g‘_Çme ( obex_£ssiÚ * os ) 1067  os -> Çme ; 1068 } } 1070 cÚ¡ * $obex_g‘_de¡Çme ( obex_£ssiÚ * os ) 1072  os -> de¡Çme ; 1073 } } 1075  $obex_£t_Çme ( obex_£ssiÚ * os , cÚ¡ * Çme ) 1077 `g_ä“ ( os -> Çme ); 1078 os -> Çme = `g_¡rdup (name); 1079 `DBG ("Namchªged: %s", os -> Çme ); 1080 } } 1082 ssize_t $obex_g‘_size ( obex_£ssiÚ * os ) 1084  os -> size ; 1085 } } 1087 cÚ¡ * $obex_g‘_ty³ ( obex_£ssiÚ * os ) 1089  os -> ty³ ; 1090 } } 1092  $obex_»move ( obex_£ssiÚ * os , cÚ¡ * ·th ) 1094 ià( os -> driv” =ð NULL ) 1095  - ENOSYS ; 1097  os -> driv” -> `»move ( ·th ); 1098 } } 1100  $obex_cÝy ( obex_£ssiÚ * os , cÚ¡ * sourû , 1101 cÚ¡ * de¡š©iÚ ) 1103 ià( os -> driv” =ð NULL || os->driv”-> cÝy == NULL) 1104  - ENOSYS ; 1106 `DBG ("% %s", sourû , de¡š©iÚ ); 1108  os -> driv” -> `cÝy ( sourû , de¡š©iÚ ); 1109 } } 1111  $obex_move ( obex_£ssiÚ * os , cÚ¡ * sourû , 1112 cÚ¡ * de¡š©iÚ ) 1114 ià( os -> driv” =ð NULL || os->driv”-> move == NULL) 1115  - ENOSYS ; 1117 `DBG ("% %s", sourû , de¡š©iÚ ); 1119  os -> driv” -> `move ( sourû , de¡š©iÚ ); 1120 } } 1122 ušt8_t $obex_g‘_aùiÚ_id ( obex_£ssiÚ * os ) 1124  os -> aùiÚ_id ; 1125 } } 1127 ssize_t $obex_g‘_­·¿m ( obex_£ssiÚ * os , cÚ¡ ušt8_t ** bufãr ) 1129 * bufãr = os -> ­·¿m ; 1131  os -> ­·¿m_Ën ; 1132 } } 1134 ssize_t $obex_g‘_nÚ_h—d”_d©a ( obex_£ssiÚ * os , 1135 cÚ¡ ušt8_t ** d©a ) 1137 * d©a = os -> nÚhdr ; 1139  os -> nÚhdr_Ën ; 1140 } } 1142  $obex_g‘³”Çme ( obex_£ssiÚ * os , ** Çme ) 1144  obex_Œª¥Üt_driv” * Œª¥Üt = os -> £rv” ->transport; 1146 ià( Œª¥Üt =ð NULL ||¿n¥Üt-> g‘³”Çme == NULL) 1147  - ENOTSUP ; 1149  Œª¥Üt -> `g‘³”Çme ( os -> io , Çme ); 1150 } } 1152  $obex_g‘sockÇme ( obex_£ssiÚ * os , ** Çme ) 1154  obex_Œª¥Üt_driv” * Œª¥Üt = os -> £rv” ->transport; 1156 ià( Œª¥Üt =ð NULL ||¿n¥Üt-> g‘sockÇme == NULL) 1157  - ENOTSUP ; 1159  Œª¥Üt -> `g‘sockÇme ( os -> io , Çme ); 1160 } } 1162  $memncmp0 (cÚ¡ * a , size_t Ç , cÚ¡ * b , size_ˆ nb ) 1164 ià( Ç !ð nb ) 1165  Ç - nb ; 1167 ià( a =ð NULL ) 1168  -( a !ð b ); 1170 ià( b =ð NULL ) 1171  a !ð b ; 1173  `memcmp ( a , b , Ç ); 1174 } } @obexd/src/obex.h 25  #OBJECT_SIZE_UNKNOWN -1 ) 26  #OBJECT_SIZE_DELETE -2 ) 28  #TARGET_SIZE 16 ) 30  gobex_£ssiÚ ; 32  obex_g‘_¡»am_¡¬t ( obex_£ssiÚ * os , cÚ¡ * fž’ame ); 33  obex_put_¡»am_¡¬t ( obex_£ssiÚ * os , cÚ¡ * fž’ame ); 34 cÚ¡ * obex_g‘_Çme ( obex_£ssiÚ * os ); 35 cÚ¡ * obex_g‘_de¡Çme ( obex_£ssiÚ * os ); 36  obex_£t_Çme ( obex_£ssiÚ * os , cÚ¡ * Çme ); 37 ssize_t obex_g‘_size ( obex_£ssiÚ * os ); 38 cÚ¡ * obex_g‘_ty³ ( obex_£ssiÚ * os ); 39  obex_»move ( obex_£ssiÚ * os , cÚ¡ * ·th ); 40  obex_cÝy ( obex_£ssiÚ * os , cÚ¡ * sourû , 41 cÚ¡ * de¡š©iÚ ); 42  obex_move ( obex_£ssiÚ * os , cÚ¡ * sourû , 43 cÚ¡ * de¡š©iÚ ); 44 ušt8_t obex_g‘_aùiÚ_id ( obex_£ssiÚ * os ); 45 ssize_t obex_g‘_­·¿m ( obex_£ssiÚ * os , cÚ¡ ušt8_t ** bufãr ); 46 ssize_t obex_g‘_nÚ_h—d”_d©a ( obex_£ssiÚ * os , 47 cÚ¡ ušt8_t ** d©a ); 48  obex_g‘³”Çme ( obex_£ssiÚ * os , ** Çme ); 49  obex_g‘sockÇme ( obex_£ssiÚ * os , ** Çme ); 52  memncmp0 (cÚ¡ * a , size_t Ç , cÚ¡ * b , size_ˆ nb ); @obexd/src/obexd.h 24  #OBEX_OPP (1 << 1) ) 25  #OBEX_FTP (1 << 2) ) 26  #OBEX_BIP (1 << 3) ) 27  #OBEX_PBAP (1 << 4) ) 28  #OBEX_IRMC (1 << 5) ) 29  #OBEX_PCSUITE (1 << 6) ) 30  #OBEX_SYNCEVOLUTION (1 << 7) ) 31  #OBEX_MAS (1 << 8) ) 32  #OBEX_MNS (1 << 9) ) 34 gboÞ—n ¶ugš_š™ (cÚ¡ * ·‰”n , cÚ¡ * exþude ); 35  ¶ugš_þ—nup (); 37 gboÞ—n mªag”_š™ (); 38  mªag”_þ—nup (); 40 gboÞ—n obex_ÝtiÚ_auto_acû± (); 41 cÚ¡ * obex_ÝtiÚ_roÙ_fÞd” (); 42 gboÞ—n obex_ÝtiÚ_symlšks (); 43 cÚ¡ * obex_ÝtiÚ_ÿ·bž™y (); 44 #ifdeà __TIZEN_PATCH__ 45  obex_ÝtiÚ_£t_roÙ_fÞd” (cÚ¡ * roÙ ); @obexd/src/plugin.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<”ºo.h > 29  ~ 30  ~<¡ršg.h > 31  ~ 33  ~ 35  ~"obexd.h " 36  ~"¶ugš.h " 37  ~"log.h " 44 #ifdeà NEED_THREADS 45  #PLUGINFLAG ( RTLD_NOW | RTLD_NODELETE ) ) 47  #PLUGINFLAG ( RTLD_NOW ) ) 50  GSLi¡ * g¶ugšs = NULL ; 52  sobex_¶ugš { 53 * mhªdË ; 54  obex_¶ugš_desc * mdesc ; 57  gboÞ—n $add_¶ugš (* hªdË ,  obex_¶ugš_desc * desc ) 59  obex_¶ugš * ¶ugš ; 61 ià( desc -> š™ =ð NULL ) 62  FALSE ; 64 ¶ugš = `g_Œy_Ãw0 ( obex_¶ugš , 1); 65 ià( ¶ugš =ð NULL ) 66  FALSE ; 68 ¶ugš -> hªdË = handle; 69 ¶ugš -> desc = desc; 71 ià( desc -> `š™ () < 0) { 72 `g_ä“ ( ¶ugš ); 73  FALSE ; 76 ¶ugšs = `g_¦i¡_­³nd Õlugšs, ¶ugš ); 77 `DBG ("Plugš % lßded", desc -> Çme ); 79  TRUE ; 80 } } 82  gboÞ—n $check_¶ugš ( obex_¶ugš_desc * desc , 83 ** ·‰”ns , ** exþudes ) 85 ià( exþudes ) { 86 ; * exþudes ;ƒxcludes++) 87 ià( `g_·‰”n_m©ch_sim¶e (* exþudes , desc -> Çme )) 89 ià(* exþudes ) { 90 `šfo ("Exþudšg %s", desc -> Çme ); 91  FALSE ; 95 ià( ·‰”ns ) { 96 ; * ·‰”ns ;…atterns++) 97 ià( `g_·‰”n_m©ch_sim¶e (* ·‰”ns , desc -> Çme )) 99 ià(* ·‰”ns =ð NULL ) { 100 `šfo ("IgnÜšg %s", desc -> Çme ); 101  FALSE ; 105  TRUE ; 106 } } 109  ~"bužtš.h " 111 gboÞ—n $¶ugš_š™ (cÚ¡ * ·‰”n , cÚ¡ * exþude ) 113 ** ·‰”ns = NULL ; 114 ** exþudes = NULL ; 115 GDœ * dœ ; 116 cÚ¡ * fže ; 117  i ; 119 ià( `¡¾’ ( PLUGINDIR ) == 0) 120  FALSE ; 122 ià( ·‰”n ) 123 ·‰”ns = `g_¡r¥l™_£t ( ·‰”n , ":, ", -1); 125 ià( exþude ) 126 exþudes = `g_¡r¥l™_£t ( exþude , ":, ", -1); 128 `DBG ("Loading builtin…lugins"); 130  i = 0; __obex_bužtš [i]; i++) { 131 ià( `check_¶ugš ( __obex_bužtš [ i ], 132 ·‰”ns , exþudes è=ð FALSE ) 135 `add_¶ugš ( NULL , __obex_bužtš [ i ]); 138 `DBG ("Lßdšg…lugš %s", PLUGINDIR ); 140 dœ = `g_dœ_Ý’ ( PLUGINDIR , 0, NULL ); 141 ià(! dœ ) 142  FALSE ; 144 ( fže = `g_dœ_»ad_Çme ( dœ )è!ð NULL ) { 145  obex_¶ugš_desc * desc ; 146 * hªdË ; 147 * fž’ame ; 149 ià( `g_¡r_has_´efix ( fže , "lib"è=ð TRUE || 150 `g_¡r_has_suffix ( fže , ".so"è=ð FALSE ) 153 fž’ame = `g_bužd_fž’ame ( PLUGINDIR , fže , NULL ); 155 hªdË = `dlÝ’ ( fž’ame , PLUGINFLAG ); 156 ià( hªdË =ð NULL ) { 157 `”rÜ ("Cª'ˆlßd…lugš %s: %s", fž’ame , 158 `dË¼Ü ()); 159 `g_ä“ ( fž’ame ); 163 `g_ä“ ( fž’ame ); 165 desc = `dlsym ( hªdË , "obex_plugin_desc"); 166 ià( desc =ð NULL ) { 167 `”rÜ ("Cª'ˆlßd…lugš desütiÚ: %s", `dË¼Ü ()); 168 `dlþo£ ( hªdË ); 172 ià( `check_¶ugš ( desc , ·‰”ns , exþudes è=ð FALSE ) { 173 `dlþo£ ( hªdË ); 177 ià( `add_¶ugš ( hªdË , desc è=ð FALSE ) 178 `dlþo£ ( hªdË ); 181 `g_dœ_þo£ ( dœ ); 182 `g_¡rä“v ( ·‰”ns ); 183 `g_¡rä“v ( exþudes ); 185  TRUE ; 186 } } 188  $¶ugš_þ—nup () 190 GSLi¡ * li¡ ; 192 `DBG ("Cleanup…lugins"); 194  li¡ = ¶ugšs ;†i¡;†i¡ =†i¡-> Ãxt ) { 195  obex_¶ugš * ¶ugš = li¡ -> d©a ; 197 ià( ¶ugš -> desc -> ex™ ) 198 ¶ugš -> desc -> `ex™ (); 200 ià( ¶ugš -> hªdË !ð NULL ) 201 `dlþo£ ( ¶ugš -> hªdË ); 203 `g_ä“ ( ¶ugš ); 206 `g_¦i¡_ä“ ( ¶ugšs ); 207 } } @obexd/src/plugin.h 24  sobex_¶ugš_desc { 25 cÚ¡ * mÇme ; 26 (* mš™ ) (); 27 (* mex™ ) (); 30 #ifdeà OBEX_PLUGIN_BUILTIN 31  #OBEX_PLUGIN_DEFINE ( Çme , š™ , ex™ ) \ 32  obex_¶ugš_desc __obex_bužtš_ ## Çme = { \ 33 #Çme, š™ , ex™ \ 34 }; ) 36  #OBEX_PLUGIN_DEFINE ( Çme , š™ , ex™ ) \ 37  obex_¶ugš_desc obex_plugin_desc \ 38 `__©Œibu‹__ (( `visibž™y ("default"))); \ 39  obex_¶ugš_desc obex_plugin_desc = { \ 40 #Çme, š™ , ex™ \ 41 }; ) @obexd/src/server.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<¡dlib.h > 32  ~ 33  ~ 34  ~<¡ršg.h > 35  ~<š‰y³s.h > 37  ~ 38  ~ 40  ~"log.h " 41  ~"obex.h " 42  ~"obex-´iv.h " 43  ~"£rv”.h " 44  ~"£rviû.h " 45  ~"Œª¥Üt.h " 47  GSLi¡ * g£rv”s = NULL ; 49  $š™_£rv” ( ušt16_t £rviû , GSLi¡ * Œª¥Üts ) 51 GSLi¡ * l ; 53  l = Œª¥Üts ;†;† =†-> Ãxt ) { 54  obex_Œª¥Üt_driv” * Œª¥Üt = l -> d©a ; 55  obex_£rv” * £rv” ; 56  ”r ; 58 ià( Œª¥Üt -> £rviû != 0 && 59 ( Œª¥Üt -> £rviû & s”viûè=ð FALSE ) 62 £rv” = `g_Ãw0 ( obex_£rv” , 1); 63 £rv” -> Œª¥Üt =ransport; 64 £rv” -> driv”s = `obex_£rviû_driv”_li¡ ( £rviû ); 66 £rv” -> Œª¥Üt_d©a = Œª¥Üt -> `¡¬t (£rv”, & ”r ); 67 ià( £rv” -> Œª¥Üt_d©a =ð NULL ) { 68 `DBG ("Unableo start %sransport: %s (%d)", 69 Œª¥Üt -> Çme , `¡»¼Ü ( ”r ),ƒrr); 70 `g_ä“ ( £rv” ); 74 £rv”s = `g_¦i¡_´•’d (£rv”s, £rv” ); 76 } } 78  $obex_£rv”_š™ () 80 GSLi¡ * driv”s ; 81 GSLi¡ * Œª¥Üts ; 82 GSLi¡ * l ; 84 driv”s = `obex_£rviû_driv”_li¡ (0); 85 ià( driv”s =ð NULL ) { 86 `DBG ("No service driver„egistered"); 87  - EINVAL ; 90 Œª¥Üts = `obex_Œª¥Üt_driv”_li¡ (); 91 ià( Œª¥Üts =ð NULL ) { 92 `DBG ("Noransport driver„egistered"); 93  - EINVAL ; 96  l = driv”s ;†;† =†-> Ãxt ) { 97  obex_£rviû_driv” * driv” = l -> d©a ; 99 `š™_£rv” ( driv” -> £rviû , Œª¥Üts ); 103 } } 105  $obex_£rv”_ex™ () 107 GSLi¡ * l ; 109  l = £rv”s ;†;† =†-> Ãxt ) { 110  obex_£rv” * £rv” = l -> d©a ; 112 £rv” -> Œª¥Üt -> `¡Ý (£rv”-> Œª¥Üt_d©a ); 113 `g_¦i¡_ä“ ( £rv” -> driv”s ); 114 `g_ä“ ( £rv” ); 117 `g_¦i¡_ä“ ( £rv”s ); 120 } } 122  $obex_£rv”_Ãw_cÚÃùiÚ ( obex_£rv” * £rv” , GIOChªÃl * io , 123 ušt16_t tx_mtu , ušt16_ˆ rx_mtu , 124 gboÞ—n ¡»am ) 126  `obex_£ssiÚ_¡¬t ( io , tx_mtu , rx_mtu , ¡»am , £rv” ); 127 } } @obexd/src/server.h 25  sobex_£rv” { 26  obex_Œª¥Üt_driv” * mŒª¥Üt ; 27 * mŒª¥Üt_d©a ; 28 GSLi¡ * mdriv”s ; 31  obex_£rv”_š™ (); 33  obex_£rv”_ex™ (); 35  obex_£rv”_Ãw_cÚÃùiÚ ( obex_£rv” * £rv” , GIOChªÃl * io , 36 ušt16_t tx_mtu , ušt16_ˆ rx_mtu , 37 gboÞ—n ¡»am ); @obexd/src/service.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<¡ršg.h > 31  ~<¡dšt.h > 32  ~<¡dlib.h > 34  ~ 36  ~"obex.h " 37  ~"£rviû.h " 38  ~"log.h " 40  GSLi¡ * gdriv”s = NULL ; 42  obex_£rviû_driv” * $obex_£rviû_driv”_fšd ( GSLi¡ * driv”s , 43 cÚ¡ ušt8_t * rg‘ ,  rg‘_size , 44 cÚ¡ ušt8_t * who ,  who_size ) 46 GSLi¡ * l ; 48  l = driv”s ;†;† =†-> Ãxt ) { 49  obex_£rviû_driv” * driv” = l -> d©a ; 52 ià( who !ð NULL && `memncmp0 (who, who_size , driv” ->who, 53 driv” -> who_size )) 56 ià( `memncmp0 ( rg‘ , rg‘_size , driv” ->target, 57 driv” -> rg‘_size ) == 0) 58  driv” ; 61  NULL ; 62 } } 64 GSLi¡ * $obex_£rviû_driv”_li¡ ( ušt16_t £rviûs ) 66 GSLi¡ * l ; 67 GSLi¡ * li¡ = NULL ; 69 ià( £rviûs == 0) 70  driv”s ; 72  l = driv”s ;† && £rviûs ;† =†-> Ãxt ) { 73  obex_£rviû_driv” * driv” = l -> d©a ; 75 ià( driv” -> £rviû & £rviûs ) { 76 li¡ = `g_¦i¡_­³nd Öi¡, driv” ); 77 £rviûs &ð~ driv” -> £rviû ; 81  li¡ ; 82 } } 84  obex_£rviû_driv” * $fšd_driv” ( ušt16_t £rviû ) 86 GSLi¡ * l ; 88  l = driv”s ;†;† =†-> Ãxt ) { 89  obex_£rviû_driv” * driv” = l -> d©a ; 91 ià( driv” -> £rviû == service) 92  driv” ; 95  NULL ; 96 } } 98  $obex_£rviû_driv”_»gi¡” ( obex_£rviû_driv” * driv” ) 100 ià(! driv” ) { 101 `”rÜ ("Invalid driver"); 102  - EINVAL ; 105 ià( `fšd_driv” ( driv” -> £rviû )) { 106 `”rÜ ("Permission denied: service %s‡lready„egistered", 107 driv” -> Çme ); 108  - EPERM ; 111 `DBG ("driv” %°£rviû % »gi¡”ed", driv” , driv”-> Çme ); 114 ià( driv” -> who ) 115 driv”s = `g_¦i¡_´•’d (driv”s, driv” ); 117 driv”s = `g_¦i¡_­³nd (driv”s, driv” ); 120 } } 122  $obex_£rviû_driv”_uÄegi¡” ( obex_£rviû_driv” * driv” ) 124 ià(! `g_¦i¡_fšd ( driv”s , driv” )) { 125 `”rÜ ("UÇbËØuÄegi¡”: NØsuch driv” %p", driv” ); 129 `DBG ("driv” %°£rviû % uÄegi¡”ed", driv” , driv”-> Çme ); 131 driv”s = `g_¦i¡_»move (driv”s, driv” ); 132 } } @obexd/src/service.h 24  #OBEX_PORT_RANDOM UINT16_MAX ) 26  sobex_£rviû_driv” { 27 cÚ¡ * mÇme ; 28 ušt16_t m£rviû ; 29 ušt8_t mchªÃl ; 30 ušt16_t mpÜt ; 31 gboÞ—n m£cu» ; 32 cÚ¡ ušt8_t * mrg‘ ; 33  mrg‘_size ; 34 cÚ¡ ušt8_t * mwho ; 35  mwho_size ; 36 cÚ¡ * m»cÜd ; 37 *(* mcÚÃù è( obex_£ssiÚ * mos , * m”r ); 38 (* m´og»ss è( obex_£ssiÚ * mos , * mu£r_d©a ); 39 (* mg‘ è( obex_£ssiÚ * mos , * mu£r_d©a ); 40 (* mput è( obex_£ssiÚ * mos , * mu£r_d©a ); 41 (* mchkput è( obex_£ssiÚ * mos , * mu£r_d©a ); 42 (* m£©h è( obex_£ssiÚ * mos , * mu£r_d©a ); 43 (* maùiÚ è( obex_£ssiÚ * mos , * mu£r_d©a ); 44 (* mdiscÚÃù è( obex_£ssiÚ * mos , * mu£r_d©a ); 45 (* m»£t è( obex_£ssiÚ * mos , * mu£r_d©a ); 48  obex_£rviû_driv”_»gi¡” ( obex_£rviû_driv” * driv” ); 49  obex_£rviû_driv”_uÄegi¡” ( obex_£rviû_driv” * driv” ); 50 GSLi¡ * obex_£rviû_driv”_li¡ ( ušt16_t £rviûs ); 51  obex_£rviû_driv” * obex_£rviû_driv”_fšd ( GSLi¡ * driv”s , 52 cÚ¡ ušt8_t * rg‘ ,  rg‘_size , 53 cÚ¡ ušt8_t * who ,  who_size ); @obexd/src/transport.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<¡ršg.h > 31  ~<¡dšt.h > 32  ~<¡dlib.h > 34  ~ 36  ~"obex.h " 37  ~"£rv”.h " 38  ~"Œª¥Üt.h " 39  ~"log.h " 41  GSLi¡ * gdriv”s = NULL ; 43  obex_Œª¥Üt_driv” * $obex_Œª¥Üt_driv”_fšd ( 44 cÚ¡ * Çme ) 46 GSLi¡ * l ; 48  l = driv”s ;†;† =†-> Ãxt ) { 49  obex_Œª¥Üt_driv” * driv” = l -> d©a ; 51 ià( `g_¡rcmp0 ( Çme , driv” ->name) == 0) 52  driv” ; 55  NULL ; 56 } } 58 GSLi¡ * $obex_Œª¥Üt_driv”_li¡ () 60  driv”s ; 61 } } 63  $obex_Œª¥Üt_driv”_»gi¡” ( obex_Œª¥Üt_driv” * driv” ) 65 ià(! driv” ) { 66 `”rÜ ("Invalid driver"); 67  - EINVAL ; 70 ià( `obex_Œª¥Üt_driv”_fšd ( driv” -> Çme è!ð NULL ) { 71 `”rÜ ("Permission denied:ransport %s‡lready„egistered", 72 driv” -> Çme ); 73  - EPERM ; 76 `DBG ("driv” %°Œª¥Üˆ% »gi¡”ed", driv” , driv”-> Çme ); 78 driv”s = `g_¦i¡_´•’d (driv”s, driv” ); 81 } } 83  $obex_Œª¥Üt_driv”_uÄegi¡” ( obex_Œª¥Üt_driv” * driv” ) 85 ià(! `g_¦i¡_fšd ( driv”s , driv” )) { 86 `”rÜ ("UÇbËØuÄegi¡”: NØsuch driv” %p", driv” ); 90 `DBG ("driv” %°Œª¥Üˆ% uÄegi¡”ed", driv” , driv”-> Çme ); 92 driv”s = `g_¦i¡_»move (driv”s, driv” ); 93 } } @obexd/src/transport.h 24  sobex_Œª¥Üt_driv” { 25 cÚ¡ * mÇme ; 26 ušt16_t m£rviû ; 27 *(* m¡¬t è( obex_£rv” * m£rv” , * m”r ); 28 (* mg‘³”Çme è( GIOChªÃl * mio , ** mÇme ); 29 (* mg‘sockÇme è( GIOChªÃl * mio , ** mÇme ); 30 (* m¡Ý è(* md©a ); 33  obex_Œª¥Üt_driv”_»gi¡” ( obex_Œª¥Üt_driv” * driv” ); 34  obex_Œª¥Üt_driv”_uÄegi¡” ( obex_Œª¥Üt_driv” * driv” ); 35 GSLi¡ * obex_Œª¥Üt_driv”_li¡ (); @plugins/autopair.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dboÞ.h > 29  ~<¡dlib.h > 30  ~ 31  ~ 32  ~<”ºo.h > 34  ~ 35  ~ 37  ~"¤c/¶ugš.h " 38  ~"¤c/ad­‹r.h " 39  ~"¤c/deviû.h " 40  ~"¤c/log.h " 41  ~"¤c/¡Üage.h " 54  ssize_t $autÝaœ_pšcb ( btd_ad­‹r * ad­‹r , 55  btd_deviû * deviû , 56 * pšbuf , boÞ * di¥Ïy , 57  ©‹m± ) 59  addr [18]; 60  pš¡r [7]; 61 ušt32_t þass ; 63 `ba2¡r ( `deviû_g‘_add»ss ( deviû ), addr ); 65 þass = `btd_deviû_g‘_þass ( deviû ); 67 `DBG ("deviû % 0x%x", addr , þass ); 72 ià( þass == 0) 75 ( þass & 0x1f00) >> 8) { 77 ( þass & 0xfc) >> 2) { 83 ià( ©‹m± > 1) 85 `memýy ( pšbuf , "0000", 4); 91 ( þass & 0xc0) >> 6) { 96 ià( ©‹m± > 1 && 97 `deviû_bÚdšg_Ï¡_du¿tiÚ ( deviû ) < 500) { 99 ià( ©‹m± > 2) 103 `memýy ( pšbuf , "0000", 4); 108 ià( ©‹m± >= 4) 111 `¢´štf ( pš¡r , (pinstr), "%06d", 112 `¿nd () % 1000000); 113 * di¥Ïy = Œue ; 114 `memýy ( pšbuf , pš¡r , 6); 118 ià( ©‹m± > 1) 120 `memýy ( pšbuf , "0000", 4); 126 ià( þass & 0x80) { 127 ià( ©‹m± > 1) 129 `memýy ( pšbuf , "0000", 4); 136 } } 139  $autÝaœ_´obe ( btd_ad­‹r * ad­‹r ) 141 `btd_ad­‹r_»gi¡”_pš_cb ( ad­‹r , autÝaœ_pšcb ); 144 } } 146  $autÝaœ_»move ( btd_ad­‹r * ad­‹r ) 148 `btd_ad­‹r_uÄegi¡”_pš_cb ( ad­‹r , autÝaœ_pšcb ); 149 } } 151  btd_ad­‹r_driv” gautÝaœ_driv” = { 152 . Çme = "autopair", 153 . g´obe = autÝaœ_´obe , 154 . g»move = autÝaœ_»move , 157  $autÝaœ_š™ () 160  £ed ; 161  fd , ”r ; 162 ssize_t n ; 164 fd = `Ý’ ("/dev/u¿ndom", O_RDONLY ); 165 ià( fd < 0) { 166 ”r = - ”ºo ; 167 `”rÜ ("FažedØÝ’ /dev/u¿ndom: % (%d)", `¡»¼Ü (- ”r ), 168 - ”r ); 169  ”r ; 172 n = `»ad ( fd , & £ed , (seed)); 173 ià( n < ( ssize_t è( £ed )) { 174 ”r = ( n =ð-1è? - ”ºo : - EIO ; 175 `”rÜ ("Failedo„ead %zu bytes from /dev/urandom: %s (%d)", 176 ( £ed ), `¡»¼Ü (- ”r ), -err); 177 `þo£ ( fd ); 178  ”r ; 181 `þo£ ( fd ); 183 `¤ªd ( £ed ); 185  `btd_»gi¡”_ad­‹r_driv” (& autÝaœ_driv” ); 186 } } 188  $autÝaœ_ex™ () 190 `btd_uÄegi¡”_ad­‹r_driv” (& autÝaœ_driv” ); 191 } } 193 BLUETOOTH_PLUGIN_DEFINE ( autÝaœ , VERSION , BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 194 autÝaœ_š™ , autÝaœ_ex™ ) @plugins/dbusoob.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<”ºo.h > 31  ~ 33  ~ 34  ~ 35  ~ 37  ~"¤c/¶ugš.h " 38  ~"¤c/log.h " 39  ~"¤c/dbus-commÚ.h " 40  ~"¤c/ad­‹r.h " 41  ~"¤c/oob.h " 42  ~"¤c/deviû.h " 43  ~"¤c/eœ.h " 44  ~"¤c/ag’t.h " 45  ~"¤c/hcid.h " 46  ~"¤c/”rÜ.h " 48  #OOB_INTERFACE "Üg.bluez.OutOfBªd" ) 50  soob_»que¡ { 51  btd_ad­‹r * mad­‹r ; 52 DBusMes§ge * mmsg ; 55  GSLi¡ * goob_»que¡s = NULL ; 56  DBusCÚÃùiÚ * gcÚÃùiÚ = NULL ; 58  gšt $oob_»que¡_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 60 cÚ¡  oob_»que¡ * d©a = a ; 61 cÚ¡  btd_ad­‹r * ad­‹r = b ; 63  d©a -> ad­‹r !=‡dapter; 64 } } 66  oob_»que¡ * $fšd_oob_»que¡ ( btd_ad­‹r * ad­‹r ) 68 GSLi¡ * m©ch ; 70 m©ch = `g_¦i¡_fšd_cu¡om ( oob_»que¡s , ad­‹r , oob_»que¡_cmp ); 72 ià( m©ch ) 73  m©ch -> d©a ; 75  NULL ; 76 } } 78  $»ad_loÿl_d©a_com¶‘e ( btd_ad­‹r * ad­‹r , ušt8_t * hash , 79 ušt8_t * ¿ndomiz” ) 81  DBusMes§ge * »¶y ; 82  oob_»que¡ *oob_request; 84 oob_»que¡ = `fšd_oob_»que¡ ( ad­‹r ); 85 ià(! oob_»que¡ ) 88 ià( hash && ¿ndomiz” ) 89 »¶y = `g_dbus_ü—‹_»¶y ( oob_»que¡ -> msg , 90 DBUS_TYPE_ARRAY , DBUS_TYPE_BYTE , & hash , 16, 91 DBUS_TYPE_ARRAY , DBUS_TYPE_BYTE , & ¿ndomiz” , 16, 92 DBUS_TYPE_INVALID ); 94 »¶y = `btd_”rÜ_çžed ( oob_»que¡ -> msg , 97 oob_»que¡s = `g_¦i¡_»move (oob_»que¡s, oob_»que¡ ); 98 `dbus_mes§ge_uÄef ( oob_»que¡ -> msg ); 99 `g_ä“ ( oob_»que¡ ); 101 ià(! »¶y ) { 102 `”rÜ ("Couldn't‡llocate D-Bus message"); 106 ià(! `g_dbus_£nd_mes§ge ( cÚÃùiÚ , »¶y )) 107 `”rÜ ("D-Bus send failed"); 108 } } 110  DBusMes§ge * $»ad_loÿl_d©a ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 111 * d©a ) 113  btd_ad­‹r * ad­‹r = d©a ; 114  oob_»que¡ *oob_request; 115  oob_hªdËr * hªdËr ; 117 ià( `fšd_oob_»que¡ ( ad­‹r )) 118  `btd_”rÜ_š_´og»ss ( msg ); 120 ià( `btd_ad­‹r_»ad_loÿl_oob_d©a ( ad­‹r )) 121  `btd_”rÜ_çžed ( msg , "Request failed."); 123 oob_»que¡ = `g_Ãw (oob_request, 1); 124 oob_»que¡ -> ad­‹r =‡dapter; 125 oob_»que¡s = `g_¦i¡_­³nd (oob_»que¡s, oob_»que¡ ); 126 oob_»que¡ -> msg = `dbus_mes§ge_»f (msg); 128 hªdËr = `g_Ãw0 ( oob_hªdËr , 1); 129 #ifdeà __TIZEN_PATCH__ 130 hªdËr -> »ad_loÿl_cb = ( oob_»ad_loÿl_cb_t ) oob_»ad_loÿl_d©a_com¶‘e ; 132 hªdËr -> »ad_loÿl_cb = oob_»ad_loÿl_d©a_com¶‘e ; 134 hªdËr -> u£r_d©a = `dbus_mes§ge_»f ( oob_»que¡ -> msg ); 136 `btd_ad­‹r_£t_oob_hªdËr ( oob_»que¡ -> ad­‹r , hªdËr ); 138  NULL ; 139 } } 141  DBusMes§ge * $add_»mÙe_d©a ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 142 * d©a ) 144  btd_ad­‹r * ad­‹r = d©a ; 145 ušt8_t * hash , * ¿ndomiz” ; 146 št32_t hËn , ¾’ ; 147 cÚ¡ * addr ; 148 bdaddr_t bdaddr ; 150 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 151 DBUS_TYPE_STRING , & addr , 152 DBUS_TYPE_ARRAY , DBUS_TYPE_BYTE , & hash , & hËn , 153 DBUS_TYPE_ARRAY , DBUS_TYPE_BYTE , & ¿ndomiz” , & ¾’ , 154 DBUS_TYPE_INVALID )) 155  `btd_”rÜ_šv®id_¬gs ( msg ); 157 ià( hËn !ð16 || ¾’ !ð16 || `bachk ( addr )) 158  `btd_”rÜ_šv®id_¬gs ( msg ); 160 `¡r2ba ( addr , & bdaddr ); 162 ià( `btd_ad­‹r_add_»mÙe_oob_d©a ( ad­‹r , & bdaddr , hash , ¿ndomiz” )) 163  `btd_”rÜ_çžed ( msg , "Request failed"); 165  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 166 } } 168  DBusMes§ge * $»move_»mÙe_d©a ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 169 * d©a ) 171  btd_ad­‹r * ad­‹r = d©a ; 172 cÚ¡ * addr ; 173 bdaddr_t bdaddr ; 175 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & addr , 176 DBUS_TYPE_INVALID )) 177  `btd_”rÜ_šv®id_¬gs ( msg ); 179 ià( `bachk ( addr )) 180  `btd_”rÜ_šv®id_¬gs ( msg ); 182 `¡r2ba ( addr , & bdaddr ); 184 ià( `btd_ad­‹r_»move_»mÙe_oob_d©a ( ad­‹r , & bdaddr )) 185  `btd_”rÜ_çžed ( msg , "Request failed"); 187  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 188 } } 190 cÚ¡ GDBusM‘hodTabË goob_m‘hods [] = { 191 { GDBUS_METHOD ("AddRemoteData", 192 GDBUS_ARGS ({ "address", "s" }, { "hash", "ay" }, 193 { "¿ndomiz”", "ay" }), NULL , 194 add_»mÙe_d©a ) }, 195 { GDBUS_METHOD ("RemoveRemoteData", 196 GDBUS_ARGS ({ "add»ss", "s" }), NULL , 197 »move_»mÙe_d©a ) }, 198 { GDBUS_ASYNC_METHOD ("ReadLocalData", 199 NULL , GDBUS_ARGS ({ "hash", "ay" }, 201 »ad_loÿl_d©a ) }, 205  $oob_´obe ( btd_ad­‹r * ad­‹r ) 207 cÚ¡ * ·th = `ad­‹r_g‘_·th ( ad­‹r ); 209 `DBG ("dbusoob…robe"); 210 `DBG ("ad­‹¸·th: %s", ·th ); 212 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚÃùiÚ , ·th , OOB_INTERFACE , 213 oob_m‘hods , NULL , NULL, ad­‹r , NULL)) { 214 `”rÜ ("OOB iÁ”çû in™ fažed oÀ·th %s", ·th ); 215  - EIO ; 219 } } 221  $oob_»move ( btd_ad­‹r * ad­‹r ) 223 `»ad_loÿl_d©a_com¶‘e ( ad­‹r , NULL , NULL); 225 `g_dbus_uÄegi¡”_š‹rçû ( cÚÃùiÚ , `ad­‹r_g‘_·th ( ad­‹r ), 226 OOB_INTERFACE ); 227 } } 229  btd_ad­‹r_driv” goob_driv” = { 230 . Çme = "oob", 231 . g´obe = oob_´obe , 232 . g»move = oob_»move , 235  $dbusoob_š™ () 237 `DBG ("Setup dbusoob…lugin"); 239 cÚÃùiÚ = `btd_g‘_dbus_cÚÃùiÚ (); 241 `oob_»gi¡”_cb ( »ad_loÿl_d©a_com¶‘e ); 243  `btd_»gi¡”_ad­‹r_driv” (& oob_driv” ); 244 } } 246  $dbusoob_ex™ () 248 `DBG ("Cleanup dbusoob…lugin"); 250 `btd_uÄegi¡”_ad­‹r_driv” (& oob_driv” ); 251 } } 253 BLUETOOTH_PLUGIN_DEFINE ( dbusoob , VERSION , BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 254 dbusoob_š™ , dbusoob_ex™ ) @plugins/external-dummy.c 21 #ifdeà HAVE_CONFIG_H 22  ~ 25  ~"¤c/¶ugš.h " 26  ~"¤c/log.h " 28  $dummy_š™ () 30 `DBG (""); 33 } } 35  $dummy_ex™ () 37 `DBG (""); 38 } } 40 BLUETOOTH_PLUGIN_DEFINE ( ex‹º®_dummy , VERSION , 41 BLUETOOTH_PLUGIN_PRIORITY_LOW , dummy_š™ , dummy_ex™ ) @plugins/gatt-example.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~ 30  ~<”ºo.h > 32  ~"lib/uuid.h " 33  ~"¤c/¶ugš.h " 34  ~"¤c/ad­‹r.h " 35  ~"¤c/sh¬ed/utž.h " 36  ~"¤c/log.h " 37  ~"©Œib/g©Œib.h " 38  ~"©Œib/g©t-£rviû.h " 39  ~"©Œib/©t.h " 40  ~"©Œib/g©t.h " 41  ~"©Œib/©t-d©aba£.h " 42  ~"¤c/©Œib-£rv”.h " 45  #OPCODES_SUPPORTED_UUID 0xA001 ) 46  #BATTERY_STATE_SVC_UUID 0xA002 ) 47  #BATTERY_STATE_UUID 0xA003 ) 48  #THERM_HUMIDITY_SVC_UUID 0xA004 ) 49  #MANUFACTURER_SVC_UUID 0xA005 ) 50  #TEMPERATURE_UUID 0xA006 ) 51  #FMT_CELSIUS_UUID 0xA007 ) 52  #FMT_OUTSIDE_UUID 0xA008 ) 53  #RELATIVE_HUMIDITY_UUID 0xA009 ) 54  #FMT_PERCENT_UUID 0xA00A ) 55  #BLUETOOTH_SIG_UUID 0xA00B ) 56  #MANUFACTURER_NAME_UUID 0xA00C ) 57  #MANUFACTURER_SERIAL_UUID 0xA00D ) 58  #VENDOR_SPECIFIC_SVC_UUID 0xA00E ) 59  #VENDOR_SPECIFIC_TYPE_UUID 0xA00F ) 60  #FMT_KILOGRAM_UUID 0xA010 ) 61  #FMT_HANGING_UUID 0xA011 ) 63  sg©t_exam¶e_ad­‹r { 64  btd_ad­‹r * mad­‹r ; 65 GSLi¡ * msdp_hªdËs ; 68  GSLi¡ * gad­‹rs = NULL ; 70  $g©t_exam¶e_ad­‹r_ä“ ( g©t_exam¶e_ad­‹r * gad­‹r ) 72  gad­‹r -> sdp_hªdËs !ð NULL ) { 73 ušt32_t hªdË = `GPOINTER_TO_UINT ( gad­‹r -> sdp_hªdËs -> d©a ); 75 `©Œib_ä“_sdp ( gad­‹r -> ad­‹r , hªdË ); 76 gad­‹r -> sdp_hªdËs = `g_¦i¡_»move (gadapter->sdp_handles, 77 gad­‹r -> sdp_hªdËs -> d©a ); 80 ià( gad­‹r -> ad­‹r !ð NULL ) 81 `btd_ad­‹r_uÄef ( gad­‹r -> ad­‹r ); 83 `g_ä“ ( gad­‹r ); 84 } } 86  $ad­‹r_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 88 cÚ¡  g©t_exam¶e_ad­‹r * g©t_ad­‹r = a ; 89 cÚ¡  btd_ad­‹r * ad­‹r = b ; 91 ià( g©t_ad­‹r -> ad­‹r ==‡dapter) 95 } } 97  ušt8_t $b©‹ry_¡©e_»ad ( ©Œibu‹ * a , 98  btd_deviû * deviû , gpoš‹r u£r_d©a ) 100  btd_ad­‹r * ad­‹r = u£r_d©a ; 101 ušt8_t v®ue ; 103 v®ue = 0x04; 104 `©Œib_db_upd©e ( ad­‹r , a -> hªdË , NULL , & v®ue , (value), NULL); 107 } } 109  gboÞ—n $»gi¡”_b©‹ry_£rviû ( btd_ad­‹r * ad­‹r ) 111 bt_uuid_t uuid ; 113 `bt_uuid16_ü—‹ (& uuid , BATTERY_STATE_SVC_UUID ); 115  `g©t_£rviû_add ( ad­‹r , GATT_PRIM_SVC_UUID , & uuid , 117 GATT_OPT_CHR_UUID16 , BATTERY_STATE_UUID , 118 GATT_OPT_CHR_PROPS , GATT_CHR_PROP_READ | 119 GATT_CHR_PROP_NOTIFY , 120 GATT_OPT_CHR_VALUE_CB , ATTRIB_READ , 121 b©‹ry_¡©e_»ad , ad­‹r , 123 GATT_OPT_INVALID ); 124 } } 126  $»gi¡”_‹rmom‘”_£rviû ( g©t_exam¶e_ad­‹r * ad­‹r , 127 cÚ¡ ušt16_t mªuf1 [2], cÚ¡ ušt16_ˆ mªuf2 [2]) 129 cÚ¡ * desc_out_‹mp = "Outside Temperature"; 130 cÚ¡ * desc_out_hum = "Outside Relative Humidity"; 131 ušt16_t ¡¬t_hªdË , h ; 132 cÚ¡  svc_size = 11; 133 ušt32_t sdp_hªdË ; 134 ušt8_t ©v® [256]; 135 bt_uuid_t uuid ; 136  Ën ; 138 `bt_uuid16_ü—‹ (& uuid , THERM_HUMIDITY_SVC_UUID ); 139 ¡¬t_hªdË = `©Œib_db_fšd_avaž ( ad­‹r ->ad­‹r, & uuid , svc_size ); 140 ià( ¡¬t_hªdË == 0) { 141 `”rÜ ("Notƒnough free handleso„egister service"); 145 `DBG ("start_handle=0x%04x manuf1=0x%04x-0x%04x, manuf2=0x%04x-0x%04x", 146 ¡¬t_hªdË , mªuf1 [0], mªuf1[1], mªuf2 [0], manuf2[1]); 148 h = ¡¬t_hªdË ; 151 `bt_uuid16_ü—‹ (& uuid , GATT_PRIM_SVC_UUID ); 152 `put_Ë16 ( THERM_HUMIDITY_SVC_UUID , & ©v® [0]); 153 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 154 ©v® , 2); 156 `bt_uuid16_ü—‹ (& uuid , GATT_INCLUDE_UUID ); 159 ià( mªuf1 [0] && manuf1[1]) { 160 `put_Ë16 ( mªuf1 [0], & ©v® [0]); 161 `put_Ë16 ( mªuf1 [1], & ©v® [2]); 162 `put_Ë16 ( MANUFACTURER_SVC_UUID , & ©v® [4]); 163 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , 164 ATT_NOT_PERMITTED , ©v® , 6); 168 ià( mªuf2 [0] && manuf2[1]) { 169 `put_Ë16 ( mªuf2 [0], & ©v® [0]); 170 `put_Ë16 ( mªuf2 [1], & ©v® [2]); 171 `put_Ë16 ( VENDOR_SPECIFIC_SVC_UUID , & ©v® [4]); 172 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , 173 ATT_NOT_PERMITTED , ©v® , 6); 177 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_UUID ); 178 ©v® [0] = GATT_CHR_PROP_READ ; 179 `put_Ë16 ( h + 1, & ©v® [1]); 180 `put_Ë16 ( TEMPERATURE_UUID , & ©v® [3]); 181 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 182 ©v® , 5); 185 `bt_uuid16_ü—‹ (& uuid , TEMPERATURE_UUID ); 186 ©v® [0] = 0x8A; 187 ©v® [1] = 0x02; 188 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 189 ©v® , 2); 192 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_FMT_UUID ); 193 ©v® [0] = 0x0E; 194 ©v® [1] = 0xFE; 195 `put_Ë16 ( FMT_CELSIUS_UUID , & ©v® [2]); 196 ©v® [4] = 0x01; 197 `put_Ë16 ( FMT_OUTSIDE_UUID , & ©v® [5]); 198 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 199 ©v® , 7); 202 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_USER_DESC_UUID ); 203 Ën = `¡¾’ ( desc_out_‹mp ); 204 `¡ºýy ((*è ©v® , desc_out_‹mp , Ën ); 205 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 206 ©v® , Ën ); 209 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_UUID ); 210 ©v® [0] = GATT_CHR_PROP_READ ; 211 `put_Ë16 ( h + 1, & ©v® [1]); 212 `put_Ë16 ( RELATIVE_HUMIDITY_UUID , & ©v® [3]); 213 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 214 ©v® , 5); 217 `bt_uuid16_ü—‹ (& uuid , RELATIVE_HUMIDITY_UUID ); 218 ©v® [0] = 0x27; 219 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 220 ©v® , 1); 223 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_FMT_UUID ); 224 ©v® [0] = 0x04; 225 ©v® [1] = 0x00; 226 `put_Ë16 ( FMT_PERCENT_UUID , & ©v® [2]); 227 `put_Ë16 ( BLUETOOTH_SIG_UUID , & ©v® [4]); 228 `put_Ë16 ( FMT_OUTSIDE_UUID , & ©v® [6]); 229 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 230 ©v® , 8); 233 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_USER_DESC_UUID ); 234 Ën = `¡¾’ ( desc_out_hum ); 235 `¡ºýy ((*è ©v® , desc_out_hum , Ën ); 236 `©Œib_db_add ( ad­‹r ->ad­‹r, h , & uuid , ATT_NONE , ATT_NOT_PERMITTED , 237 ©v® , Ën ); 239 `g_as£¹ ( h - ¡¬t_hªdË + 1 =ð svc_size ); 242 sdp_hªdË = `©Œib_ü—‹_sdp ( ad­‹r ->ad­‹r, ¡¬t_hªdË , 244 ià( sdp_hªdË ) 245 ad­‹r -> sdp_hªdËs = `g_¦i¡_´•’d (adapter->sdp_handles, 246 `GUINT_TO_POINTER ( sdp_hªdË )); 247 } } 249  $»gi¡”_mªuf1_£rviû ( g©t_exam¶e_ad­‹r * ad­‹r , 250 ušt16_t ¿nge [2]) 252 cÚ¡ * mªuçùu»r_Çme1 = "ACME Temperature Sensor"; 253 cÚ¡ * £rŸl1 = "237495-3282-A"; 254 ušt16_t ¡¬t_hªdË , h ; 255 cÚ¡  svc_size = 5; 256 ušt8_t ©v® [256]; 257 bt_uuid_t uuid ; 258  Ën ; 260 `bt_uuid16_ü—‹ (& uuid , MANUFACTURER_SVC_UUID ); 261 ¡¬t_hªdË = `©Œib_db_fšd_avaž ( ad­‹r ->ad­‹r, & uuid , svc_size ); 262 ià( ¡¬t_hªdË == 0) { 263 `”rÜ ("Notƒnough free handleso„egister service"); 267 `DBG ("¡¬t_hªdË=0x%04x", ¡¬t_hªdË ); 269 h = ¡¬t_hªdË ; 272 `bt_uuid16_ü—‹ (& uuid , GATT_SND_SVC_UUID ); 273 `put_Ë16 ( MANUFACTURER_SVC_UUID , & ©v® [0]); 274 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 275 ©v® , 2); 278 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_UUID ); 279 ©v® [0] = GATT_CHR_PROP_READ ; 280 `put_Ë16 ( h + 1, & ©v® [1]); 281 `put_Ë16 ( MANUFACTURER_NAME_UUID , & ©v® [3]); 282 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 283 ©v® , 5); 286 `bt_uuid16_ü—‹ (& uuid , MANUFACTURER_NAME_UUID ); 287 Ën = `¡¾’ ( mªuçùu»r_Çme1 ); 288 `¡ºýy ((*è ©v® , mªuçùu»r_Çme1 , Ën ); 289 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 290 ©v® , Ën ); 293 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_UUID ); 294 ©v® [0] = GATT_CHR_PROP_READ ; 295 `put_Ë16 ( h + 1, & ©v® [1]); 296 `put_Ë16 ( MANUFACTURER_SERIAL_UUID , & ©v® [3]); 297 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 298 ©v® , 5); 301 `bt_uuid16_ü—‹ (& uuid , MANUFACTURER_SERIAL_UUID ); 302 Ën = `¡¾’ ( £rŸl1 ); 303 `¡ºýy ((*è ©v® , £rŸl1 , Ën ); 304 `©Œib_db_add ( ad­‹r ->ad­‹r, h , & uuid , ATT_NONE , ATT_NOT_PERMITTED , 305 ©v® , Ën ); 307 `g_as£¹ ( h - ¡¬t_hªdË + 1 =ð svc_size ); 309 ¿nge [0] = ¡¬t_hªdË ; 310 ¿nge [1] = ¡¬t_hªdË + svc_size - 1; 311 } } 313  $»gi¡”_mªuf2_£rviû ( g©t_exam¶e_ad­‹r * ad­‹r , 314 ušt16_t ¿nge [2]) 316 cÚ¡ * mªuçùu»r_Çme2 = "ACME Weighing Scales"; 317 cÚ¡ * £rŸl2 = "11267-2327A00239"; 318 ušt16_t ¡¬t_hªdË , h ; 319 cÚ¡  svc_size = 5; 320 ušt8_t ©v® [256]; 321 bt_uuid_t uuid ; 322  Ën ; 324 `bt_uuid16_ü—‹ (& uuid , MANUFACTURER_SVC_UUID ); 325 ¡¬t_hªdË = `©Œib_db_fšd_avaž ( ad­‹r ->ad­‹r, & uuid , svc_size ); 326 ià( ¡¬t_hªdË == 0) { 327 `”rÜ ("Notƒnough free handleso„egister service"); 331 `DBG ("¡¬t_hªdË=0x%04x", ¡¬t_hªdË ); 333 h = ¡¬t_hªdË ; 336 `bt_uuid16_ü—‹ (& uuid , GATT_SND_SVC_UUID ); 337 `put_Ë16 ( MANUFACTURER_SVC_UUID , & ©v® [0]); 338 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 339 ©v® , 2); 342 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_UUID ); 343 ©v® [0] = GATT_CHR_PROP_READ ; 344 `put_Ë16 ( h + 1, & ©v® [1]); 345 `put_Ë16 ( MANUFACTURER_NAME_UUID , & ©v® [3]); 346 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 347 ©v® , 5); 350 `bt_uuid16_ü—‹ (& uuid , MANUFACTURER_NAME_UUID ); 351 Ën = `¡¾’ ( mªuçùu»r_Çme2 ); 352 `¡ºýy ((*è ©v® , mªuçùu»r_Çme2 , Ën ); 353 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 354 ©v® , Ën ); 357 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_UUID ); 358 ©v® [0] = GATT_CHR_PROP_READ ; 359 `put_Ë16 ( h + 1, & ©v® [1]); 360 `put_Ë16 ( MANUFACTURER_SERIAL_UUID , & ©v® [3]); 361 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 362 ©v® , 5); 365 `bt_uuid16_ü—‹ (& uuid , MANUFACTURER_SERIAL_UUID ); 366 Ën = `¡¾’ ( £rŸl2 ); 367 `¡ºýy ((*è ©v® , £rŸl2 , Ën ); 368 `©Œib_db_add ( ad­‹r ->ad­‹r, h , & uuid , ATT_NONE , ATT_NOT_PERMITTED , 369 ©v® , Ën ); 371 `g_as£¹ ( h - ¡¬t_hªdË + 1 =ð svc_size ); 373 ¿nge [0] = ¡¬t_hªdË ; 374 ¿nge [1] = ¡¬t_hªdË + svc_size - 1; 375 } } 377  $»gi¡”_v’dÜ_£rviû ( g©t_exam¶e_ad­‹r * ad­‹r , 378 ušt16_t ¿nge [2]) 380 ušt16_t ¡¬t_hªdË , h ; 381 cÚ¡  svc_size = 3; 382 ušt8_t ©v® [256]; 383 bt_uuid_t uuid ; 385 `bt_uuid16_ü—‹ (& uuid , VENDOR_SPECIFIC_SVC_UUID ); 386 ¡¬t_hªdË = `©Œib_db_fšd_avaž ( ad­‹r ->ad­‹r, & uuid , svc_size ); 387 ià( ¡¬t_hªdË == 0) { 388 `”rÜ ("Notƒnough free handleso„egister service"); 392 `DBG ("¡¬t_hªdË=0x%04x", ¡¬t_hªdË ); 394 h = ¡¬t_hªdË ; 397 `bt_uuid16_ü—‹ (& uuid , GATT_SND_SVC_UUID ); 398 `put_Ë16 ( VENDOR_SPECIFIC_SVC_UUID , & ©v® [0]); 399 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 400 ©v® , 2); 403 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_UUID ); 404 ©v® [0] = GATT_CHR_PROP_READ ; 405 `put_Ë16 ( h + 1, & ©v® [1]); 406 `put_Ë16 ( VENDOR_SPECIFIC_TYPE_UUID , & ©v® [3]); 407 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 408 ©v® , 5); 411 `bt_uuid16_ü—‹ (& uuid , VENDOR_SPECIFIC_TYPE_UUID ); 412 ©v® [0] = 0x56; 413 ©v® [1] = 0x65; 414 ©v® [2] = 0x6E; 415 ©v® [3] = 0x64; 416 ©v® [4] = 0x6F; 417 ©v® [5] = 0x72; 418 `©Œib_db_add ( ad­‹r ->ad­‹r, h , & uuid , ATT_NONE , ATT_NOT_PERMITTED , 419 ©v® , 6); 421 `g_as£¹ ( h - ¡¬t_hªdË + 1 =ð svc_size ); 423 ¿nge [0] = ¡¬t_hªdË ; 424 ¿nge [1] = ¡¬t_hªdË + svc_size - 1; 425 } } 427  $»gi¡”_weight_£rviû ( g©t_exam¶e_ad­‹r * ad­‹r , 428 cÚ¡ ušt16_t v’dÜ [2]) 430 cÚ¡ * desc_weight = "Rucksack Weight"; 431 cÚ¡ ušt128_t ch¬_weight_uuid_btÜd” = { 432 . d©a = { 0x80, 0x88, 0xF2, 0x18, 0x90, 0x2C, 0x45, 0x0B, 434 cÚ¡ ušt128_t ´im_weight_uuid_btÜd” = { 435 . d©a = { 0x4F, 0x0A, 0xC0, 0x96, 0x35, 0xD4, 0x49, 0x11, 437 ušt128_t ´im_weight_uuid , ch¬_weight_uuid ; 438 ušt16_t ¡¬t_hªdË , h ; 439 cÚ¡  svc_size = 6; 440 ušt32_t sdp_hªdË ; 441 ušt8_t ©v® [256]; 442 bt_uuid_t uuid ; 443  Ën ; 445 `btoh128 (& ch¬_weight_uuid_btÜd” , & ch¬_weight_uuid ); 446 `btoh128 (& ´im_weight_uuid_btÜd” , & ´im_weight_uuid ); 447 `bt_uuid128_ü—‹ (& uuid , ´im_weight_uuid ); 448 ¡¬t_hªdË = `©Œib_db_fšd_avaž ( ad­‹r ->ad­‹r, & uuid , svc_size ); 449 ià( ¡¬t_hªdË == 0) { 450 `”rÜ ("Notƒnough free handleso„egister service"); 454 `DBG ("¡¬t_hªdË=0x%04x, v’dÜ=0x%04x-0x%04x", ¡¬t_hªdË , 455 v’dÜ [0], vendor[1]); 457 h = ¡¬t_hªdË ; 460 `bt_uuid16_ü—‹ (& uuid , GATT_PRIM_SVC_UUID ); 461 `memýy ( ©v® , & ´im_weight_uuid_btÜd” , 16); 462 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 463 ©v® , 16); 465 ià( v’dÜ [0] && vendor[1]) { 467 `bt_uuid16_ü—‹ (& uuid , GATT_INCLUDE_UUID ); 468 `put_Ë16 ( v’dÜ [0], & ©v® [0]); 469 `put_Ë16 ( v’dÜ [1], & ©v® [2]); 470 `put_Ë16 ( MANUFACTURER_SVC_UUID , & ©v® [4]); 471 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , 472 ATT_NOT_PERMITTED , ©v® , 6); 476 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_UUID ); 477 ©v® [0] = GATT_CHR_PROP_READ ; 478 `put_Ë16 ( h + 1, & ©v® [1]); 479 `memýy (& ©v® [3], & ch¬_weight_uuid_btÜd” , 16); 480 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 481 ©v® , 19); 484 `bt_uuid128_ü—‹ (& uuid , ch¬_weight_uuid ); 485 ©v® [0] = 0x82; 486 ©v® [1] = 0x55; 487 ©v® [2] = 0x00; 488 ©v® [3] = 0x00; 489 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 490 ©v® , 4); 493 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_FMT_UUID ); 494 ©v® [0] = 0x08; 495 ©v® [1] = 0xFD; 496 `put_Ë16 ( FMT_KILOGRAM_UUID , & ©v® [2]); 497 `put_Ë16 ( BLUETOOTH_SIG_UUID , & ©v® [4]); 498 `put_Ë16 ( FMT_HANGING_UUID , & ©v® [6]); 499 `©Œib_db_add ( ad­‹r ->ad­‹r, h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 500 ©v® , 8); 503 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_USER_DESC_UUID ); 504 Ën = `¡¾’ ( desc_weight ); 505 `¡ºýy ((*è ©v® , desc_weight , Ën ); 506 `©Œib_db_add ( ad­‹r ->ad­‹r, h , & uuid , ATT_NONE , ATT_NOT_PERMITTED , 507 ©v® , Ën ); 508 `g_as£¹ ( h - ¡¬t_hªdË + 1 =ð svc_size ); 511 sdp_hªdË = `©Œib_ü—‹_sdp ( ad­‹r ->ad­‹r, ¡¬t_hªdË , 513 ià( sdp_hªdË ) 514 ad­‹r -> sdp_hªdËs = `g_¦i¡_´•’d (adapter->sdp_handles, 515 `GUINT_TO_POINTER ( sdp_hªdË )); 516 } } 518  $g©t_exam¶e_ad­‹r_´obe ( btd_ad­‹r * ad­‹r ) 520 ušt16_t mªuf1_¿nge [2] = {0, 0}, mªuf2_¿nge [2] = {0, 0}; 521 ušt16_t v’dÜ_¿nge [2] = {0, 0}; 522  g©t_exam¶e_ad­‹r * gad­‹r ; 524 gad­‹r = `g_Ãw0 ( g©t_exam¶e_ad­‹r , 1); 525 gad­‹r -> ad­‹r = `btd_ad­‹r_»f (adapter); 527 ià(! `»gi¡”_b©‹ry_£rviû ( ad­‹r )) { 528 `DBG ("Battery service could‚ot be„egistered"); 529 `g©t_exam¶e_ad­‹r_ä“ ( gad­‹r ); 530  - EIO ; 533 `»gi¡”_mªuf1_£rviû ( gad­‹r , mªuf1_¿nge ); 534 `»gi¡”_mªuf2_£rviû ( gad­‹r , mªuf2_¿nge ); 535 `»gi¡”_‹rmom‘”_£rviû ( gad­‹r , mªuf1_¿nge , mªuf2_¿nge ); 536 `»gi¡”_v’dÜ_£rviû ( gad­‹r , v’dÜ_¿nge ); 537 `»gi¡”_weight_£rviû ( gad­‹r , v’dÜ_¿nge ); 539 ad­‹rs = `g_¦i¡_­³nd ×d­‹rs, gad­‹r ); 542 } } 544  $g©t_exam¶e_ad­‹r_»move ( btd_ad­‹r * ad­‹r ) 546  g©t_exam¶e_ad­‹r * gad­‹r ; 547 GSLi¡ * l ; 549 l = `g_¦i¡_fšd_cu¡om ( ad­‹rs , ad­‹r , ad­‹r_cmp ); 550 ià( l =ð NULL ) 553 gad­‹r = l -> d©a ; 554 ad­‹rs = `g_¦i¡_»move ×d­‹rs, gad­‹r ); 555 `g©t_exam¶e_ad­‹r_ä“ ( gad­‹r ); 556 } } 558  btd_ad­‹r_driv” gg©t_exam¶e_ad­‹r_driv” = { 559 . Çme = "gatt-example-adapter-driver", 560 . g´obe = g©t_exam¶e_ad­‹r_´obe , 561 . g»move = g©t_exam¶e_ad­‹r_»move , 564  $g©t_exam¶e_š™ () 566  `btd_»gi¡”_ad­‹r_driv” (& g©t_exam¶e_ad­‹r_driv” ); 567 } } 569  $g©t_exam¶e_ex™ () 571 `btd_uÄegi¡”_ad­‹r_driv” (& g©t_exam¶e_ad­‹r_driv” ); 572 } } 574 BLUETOOTH_PLUGIN_DEFINE ( g©t_exam¶e , VERSION , BLUETOOTH_PLUGIN_PRIORITY_LOW , 575 g©t_exam¶e_š™ , g©t_exam¶e_ex™ ) @plugins/hostname.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<”ºo.h > 29  ~<¡dšt.h > 30  ~<¡dlib.h > 31  ~ 33  ~"¤c/dbus-commÚ.h " 34  ~"¤c/¶ugš.h " 35  ~"¤c/ad­‹r.h " 36  ~"¤c/log.h " 40  #MAJOR_CLASS_MISCELLANEOUS 0x00 ) 41  #MAJOR_CLASS_COMPUTER 0x01 ) 43  #MINOR_CLASS_UNCATEGORIZED 0x00 ) 44  #MINOR_CLASS_DESKTOP 0x01 ) 45  #MINOR_CLASS_SERVER 0x02 ) 46  #MINOR_CLASS_LAPTOP 0x03 ) 47  #MINOR_CLASS_HANDHELD 0x04 ) 48  #MINOR_CLASS_PALM_SIZED 0x05 ) 49  #MINOR_CLASS_WEARABLE 0x06 ) 50  #MINOR_CLASS_TABLET 0x07 ) 52  ušt8_t gmajÜ_þass = MAJOR_CLASS_MISCELLANEOUS ; 53  ušt8_t gmšÜ_þass = MINOR_CLASS_UNCATEGORIZED ; 55 * g´‘ty_ho¡Çme = NULL ; 56 * g¡©ic_ho¡Çme = NULL ; 62 cÚ¡ * $g‘_ho¡Çme () 64 ià( ´‘ty_ho¡Çme ) { 65 ià( `g_¡r_equ® ( ´‘ty_ho¡Çme , ""è=ð FALSE ) 66  ´‘ty_ho¡Çme ; 68 ià( ¡©ic_ho¡Çme && 69 `g_¡r_equ® ( ¡©ic_ho¡Çme , ""è=ð FALSE ) 70  ¡©ic_ho¡Çme ; 73  NULL ; 74 } } 76  $upd©e_Çme ( btd_ad­‹r * ad­‹r , gpoš‹r u£r_d©a ) 78 cÚ¡ * ho¡Çme = `g‘_ho¡Çme (); 80 ià( ho¡Çme =ð NULL ) 83 ià( `btd_ad­‹r_is_deçuÉ ( ad­‹r )) { 84 `DBG ("Çme: %s", ho¡Çme ); 86 `ad­‹r_£t_Çme ( ad­‹r , ho¡Çme ); 88 ušt16_t šdex = `btd_ad­‹r_g‘_šdex ( ad­‹r ); 89 * ¡r ; 92 ¡r = `g_¡rdup_´štf ("% #%u", ho¡Çme , šdex + 1); 94 `DBG ("Çme: %s", ¡r ); 96 `ad­‹r_£t_Çme ( ad­‹r , ¡r ); 98 `g_ä“ ( ¡r ); 100 } } 102  $upd©e_þass ( btd_ad­‹r * ad­‹r , gpoš‹r u£r_d©a ) 104 ià( majÜ_þass =ð MAJOR_CLASS_MISCELLANEOUS ) 107 `DBG ("majÜ: 0x%02x mšÜ: 0x%02x", majÜ_þass , mšÜ_þass ); 109 `btd_ad­‹r_£t_þass ( ad­‹r , majÜ_þass , mšÜ_þass ); 110 } } 113 cÚ¡ * mchassis ; 114 ušt8_t mmajÜ_þass ; 115 ušt8_t mmšÜ_þass ; 116 } gchassis_bË [] = { 117 { "desktÝ", MAJOR_CLASS_COMPUTER , MINOR_CLASS_DESKTOP }, 118 { "£rv”", MAJOR_CLASS_COMPUTER , MINOR_CLASS_SERVER }, 119 { "ϱÝ", MAJOR_CLASS_COMPUTER , MINOR_CLASS_LAPTOP }, 120 { "hªd£t", MAJOR_CLASS_COMPUTER , MINOR_CLASS_HANDHELD }, 121 { "bËt", MAJOR_CLASS_COMPUTER , MINOR_CLASS_TABLET }, 125  $´Ý”ty_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 126 DBusMes§geI‹r * ™” , * u£r_d©a ) 128 ià( `g_¡r_equ® ( Çme , "P»‰yHo¡Çme"è=ð TRUE ) { 129 ià( ™” =ð NULL ) { 130 `g_dbus_´oxy_»äesh_´Ý”ty ( ´oxy , Çme ); 134 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è=ð DBUS_TYPE_STRING ) { 135 cÚ¡ * ¡r ; 137 `dbus_mes§ge_™”_g‘_basic ( ™” , & ¡r ); 139 `DBG ("´‘ty ho¡Çme: %s", ¡r ); 141 `g_ä“ ( ´‘ty_ho¡Çme ); 142 ´‘ty_ho¡Çme = `g_¡rdup ( ¡r ); 144 `ad­‹r_fÜ—ch ( upd©e_Çme , NULL ); 146 } ià( `g_¡r_equ® ( Çme , "SticHo¡Çme"è=ð TRUE ) { 147 ià( ™” =ð NULL ) { 148 `g_dbus_´oxy_»äesh_´Ý”ty ( ´oxy , Çme ); 152 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è=ð DBUS_TYPE_STRING ) { 153 cÚ¡ * ¡r ; 155 `dbus_mes§ge_™”_g‘_basic ( ™” , & ¡r ); 157 `DBG ("¡©iøho¡Çme: %s", ¡r ); 159 `g_ä“ ( ¡©ic_ho¡Çme ); 160 ¡©ic_ho¡Çme = `g_¡rdup ( ¡r ); 162 `ad­‹r_fÜ—ch ( upd©e_Çme , NULL ); 164 } ià( `g_¡r_equ® ( Çme , "Chassis"è=ð TRUE ) { 165 ià( ™” =ð NULL ) { 166 `g_dbus_´oxy_»äesh_´Ý”ty ( ´oxy , Çme ); 170 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è=ð DBUS_TYPE_STRING ) { 171 cÚ¡ * ¡r ; 172  i ; 174 `dbus_mes§ge_™”_g‘_basic ( ™” , & ¡r ); 176 `DBG ("chassis: %s", ¡r ); 178  i = 0; chassis_bË [i]. chassis ; i++) { 179 ià( `¡rcmp ( chassis_bË [ i ]. chassis , ¡r )) 182 majÜ_þass = chassis_bË [ i ].major_class; 183 mšÜ_þass = chassis_bË [ i ].minor_class; 185 `ad­‹r_fÜ—ch ( upd©e_þass , NULL ); 190 } } 192  $ho¡Çme_´obe ( btd_ad­‹r * ad­‹r ) 194 `DBG (""); 196 `upd©e_Çme ( ad­‹r , NULL ); 197 `upd©e_þass ( ad­‹r , NULL ); 200 } } 202  $ho¡Çme_»move ( btd_ad­‹r * ad­‹r ) 204 `DBG (""); 205 } } 207  btd_ad­‹r_driv” gho¡Çme_driv” = { 208 . Çme = "hostname", 209 . g´obe = ho¡Çme_´obe , 210 . g»move = ho¡Çme_»move , 213  $»ad_dmi_çÎback () 215 * cÚ‹Ás ; 216  i , ty³ ; 217 cÚ¡ * ¡r ; 219 ià( `g_fže_g‘_cÚ‹Ás ("/sys/class/dmi/id/chassis_type", 220 & cÚ‹Ás , NULL , NULLè=ð FALSE ) 223 ty³ = `©oi ( cÚ‹Ás ); 224 ià( ty³ < 0 ||ype > 0x1D) 227 `g_ä“ ( cÚ‹Ás ); 230  ty³ ) { 235 ¡r = "desktop"; 241 ¡r = "laptop"; 244 ¡r = "handset"; 248 ¡r = "server"; 254 `DBG ("chassis: %s", ¡r ); 256  i = 0; chassis_bË [i]. chassis ; i++) { 257 ià(! `¡rcmp ( chassis_bË [ i ]. chassis , ¡r )) { 258 majÜ_þass = chassis_bË [ i ].major_class; 259 mšÜ_þass = chassis_bË [ i ].minor_class; 264 `DBG ("majÜ: 0x%02x mšÜ: 0x%02x", majÜ_þass , mšÜ_þass ); 265 } } 267  GDBusCl›Á * gho¡Çme_þ›Á = NULL ; 268  GDBusProxy * gho¡Çme_´oxy = NULL ; 270  $ho¡Çme_š™ () 272 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 273  ”r ; 275 `»ad_dmi_çÎback (); 277 ho¡Çme_þ›Á = `g_dbus_þ›Á_Ãw ( cÚn , "org.freedesktop.hostname1", 279 ià(! ho¡Çme_þ›Á ) 280  - EIO ; 282 ho¡Çme_´oxy = `g_dbus_´oxy_Ãw ( ho¡Çme_þ›Á , 285 ià(! ho¡Çme_´oxy ) { 286 `g_dbus_þ›Á_uÄef ( ho¡Çme_þ›Á ); 287 ho¡Çme_þ›Á = NULL ; 288  - EIO ; 291 `g_dbus_´oxy_£t_´Ý”ty_w©ch ( ho¡Çme_´oxy , ´Ý”ty_chªged , NULL ); 293 ”r = `btd_»gi¡”_ad­‹r_driv” (& ho¡Çme_driv” ); 294 ià( ”r < 0) { 295 `g_dbus_´oxy_uÄef ( ho¡Çme_´oxy ); 296 ho¡Çme_´oxy = NULL ; 297 `g_dbus_þ›Á_uÄef ( ho¡Çme_þ›Á ); 298 ho¡Çme_þ›Á = NULL ; 301  ”r ; 302 } } 304  $ho¡Çme_ex™ () 306 `btd_uÄegi¡”_ad­‹r_driv” (& ho¡Çme_driv” ); 308 ià( ho¡Çme_´oxy ) { 309 `g_dbus_´oxy_uÄef ( ho¡Çme_´oxy ); 310 ho¡Çme_´oxy = NULL ; 313 ià( ho¡Çme_þ›Á ) { 314 `g_dbus_þ›Á_uÄef ( ho¡Çme_þ›Á ); 315 ho¡Çme_þ›Á = NULL ; 318 `g_ä“ ( ´‘ty_ho¡Çme ); 319 `g_ä“ ( ¡©ic_ho¡Çme ); 320 } } 322 BLUETOOTH_PLUGIN_DEFINE ( ho¡Çme , VERSION , BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 323 ho¡Çme_š™ , ho¡Çme_ex™ ) @plugins/neard.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~<”ºo.h > 30  ~ 32  ~ 33  ~ 34  ~ 36  ~"¤c/¶ugš.h " 37  ~"¤c/log.h " 38  ~"¤c/dbus-commÚ.h " 39  ~"¤c/ad­‹r.h " 40  ~"¤c/deviû.h " 41  ~"¤c/eœ.h " 42  ~"¤c/ag’t.h " 43  ~"¤c/hcid.h " 45  #NEARD_NAME "Üg.ìd" ) 46  #NEARD_PATH "/" ) 47  #NEARD_MANAGER_INTERFACE "Üg.ìd.Mªag”" ) 48  #AGENT_INTERFACE "Üg.ìd.Hªdov”Ag’t" ) 49  #AGENT_PATH "/Üg/bluez/ìd_hªdov”_ag’t" ) 50  #AGENT_CARRIER_TYPE "blu‘oÙh" ) 51  #ERROR_INTERFACE "Üg.ìd.Hªdov”Ag’t.E¼Ü" ) 53  gušt gw©ch”_id = 0; 54 * gìd_£rviû = NULL ; 55  boÞ gag’t_»gi¡”_po¡pÚe = çl£ ; 58  #NFC_OOB_EIR_MAX UINT8_MAX ) 60 eýs { 61 mCPS_ACTIVE , 62 mCPS_INACTIVE , 63 mCPS_ACTIVATING , 64 mCPS_UNKNOWN , 67  soob_·¿ms { 68 bdaddr_t madd»ss ; 69 ušt32_t mþass ; 70 * mÇme ; 71 GSLi¡ * m£rviûs ; 72 ušt8_t * mhash ; 73 ušt8_t * m¿ndomiz” ; 74 ušt8_t * mpš ; 75  mpš_Ën ; 76 ýs mpow”_¡©e ; 79  $ä“_oob_·¿ms ( oob_·¿ms * ·¿ms ) 81 `g_¦i¡_ä“_fuÎ ( ·¿ms -> £rviûs , ä“ ); 82 `g_ä“ ( ·¿ms -> Çme ); 83 `g_ä“ ( ·¿ms -> hash ); 84 `g_ä“ ( ·¿ms -> ¿ndomiz” ); 85 `g_ä“ ( ·¿ms -> pš ); 86 } } 88  DBusMes§ge * $”rÜ_»¶y ( DBusMes§ge * msg ,  ”rÜ ) 90 cÚ¡ * Çme ; 92 ià( ”rÜ =ð EINPROGRESS ) 93 Çme = ERROR_INTERFACE ".InProgress"; 95 Çme = ERROR_INTERFACE ".Failed"; 97  `g_dbus_ü—‹_”rÜ ( msg , Çme , "%s", `¡»¼Ü ( ”rÜ )); 98 } } 100  »gi¡”_ag’t ( boÞ ­³nd_ÿ¼›r ); 102  $»gi¡”_ag’t_cb ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 104 DBusMes§ge * »¶y ; 105 DBusE¼Ü ”r ; 106  boÞ Œy_çÎback = Œue ; 108 »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 110 `dbus_”rÜ_š™ (& ”r ); 111 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”r , »¶y )) { 112 ià( `g_¡r_equ® ( DBUS_ERROR_UNKNOWN_METHOD , ”r . Çme ) && 113 Œy_çÎback ) { 114 `DBG ("Registero‚eard failed,rying†egacy way"); 116 `»gi¡”_ag’t ( çl£ ); 117 Œy_çÎback = çl£ ; 119 `”rÜ ("neard manager„eplied with‡nƒrror: %s, %s", 120 ”r . Çme ,ƒ¼. mes§ge ); 122 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 123 AGENT_PATH , AGENT_INTERFACE ); 124 Œy_çÎback = Œue ; 127 `dbus_”rÜ_ä“ (& ”r ); 128 `dbus_mes§ge_uÄef ( »¶y ); 133 `dbus_mes§ge_uÄef ( »¶y ); 134 ìd_£rviû = `g_¡rdup ( `dbus_mes§ge_g‘_£nd” ( »¶y )); 136 Œy_çÎback = Œue ; 138 `šfo ("Registered‡s‚eard handover‡gent"); 139 } } 141  $»gi¡”_ag’t ( boÞ ­³nd_ÿ¼›r ) 143 DBusMes§ge * mes§ge ; 144 DBusP’dšgC®l * ÿÎ ; 145 cÚ¡ * ·th = AGENT_PATH ; 146 cÚ¡ * ÿ¼›r = AGENT_CARRIER_TYPE ; 148 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( NEARD_NAME , NEARD_PATH , 149 NEARD_MANAGER_INTERFACE , "RegisterHandoverAgent"); 150 ià(! mes§ge ) { 151 `”rÜ ("Couldn't‡llocate D-Bus message"); 155 `dbus_mes§ge_­³nd_¬gs ( mes§ge , DBUS_TYPE_OBJECT_PATH , & ·th , 156 DBUS_TYPE_INVALID ); 158 ià( ­³nd_ÿ¼›r ) 159 `dbus_mes§ge_­³nd_¬gs ( mes§ge , DBUS_TYPE_STRING , & ÿ¼›r , 160 DBUS_TYPE_INVALID ); 162 ià(! `g_dbus_£nd_mes§ge_w™h_»¶y ( `btd_g‘_dbus_cÚÃùiÚ (), 163 mes§ge , & ÿÎ , -1)) { 164 `dbus_mes§ge_uÄef ( mes§ge ); 165 `”rÜ ("D-Bus send failed"); 169 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , »gi¡”_ag’t_cb , NULL , NULL); 170 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 172 `dbus_mes§ge_uÄef ( mes§ge ); 173 } } 175  $uÄegi¡”_ag’t () 177 DBusMes§ge * mes§ge ; 178 cÚ¡ * ·th = AGENT_PATH ; 179 cÚ¡ * ÿ¼›r = AGENT_CARRIER_TYPE ; 181 `g_ä“ ( ìd_£rviû ); 182 ìd_£rviû = NULL ; 184 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( NEARD_NAME , NEARD_PATH , 185 NEARD_MANAGER_INTERFACE , "UnregisterHandoverAgent"); 187 ià(! mes§ge ) { 188 `”rÜ ("Couldn't‡llocate D-Bus message"); 189  uÄegi¡” ; 192 `dbus_mes§ge_­³nd_¬gs ( mes§ge , DBUS_TYPE_OBJECT_PATH , & ·th , 193 DBUS_TYPE_INVALID ); 195 `dbus_mes§ge_­³nd_¬gs ( mes§ge , DBUS_TYPE_STRING , & ÿ¼›r , 196 DBUS_TYPE_INVALID ); 198 ià(! `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), mes§ge )) 199 `”rÜ ("D-Bus send failed"); 201 uÄegi¡” : 202 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), AGENT_PATH , 203 AGENT_INTERFACE ); 204 } } 206  $add_pow”_¡©e ( DBusMes§geI‹r * diù ,  btd_ad­‹r * ad­‹r ) 208 cÚ¡ * ¡©e ; 210 ià( `btd_ad­‹r_g‘_pow”ed ( ad­‹r ) && 211 `btd_ad­‹r_g‘_cÚÃùabË ( ad­‹r )) 212 ¡©e = "active"; 214 ¡©e = "inactive"; 216 `diù_­³nd_’Œy ( diù , "S‹", DBUS_TYPE_STRING , & ¡©e ); 217 } } 219  DBusMes§ge * $ü—‹_»que¡_oob_»¶y ( btd_ad­‹r * ad­‹r , 220 cÚ¡ ušt8_t * hash , 221 cÚ¡ ušt8_t * ¿ndomiz” , 222 DBusMes§ge * msg ) 224 DBusMes§ge * »¶y ; 225 DBusMes§geI‹r ™” ; 226 DBusMes§geI‹r diù ; 227 ušt8_t eœ [ NFC_OOB_EIR_MAX ]; 228 ušt8_t * ³œ = eœ ; 229  Ën ; 231 Ën = `eœ_ü—‹_oob ( `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 232 `btd_ad­‹r_g‘_Çme ( ad­‹r ), 233 `btd_ad­‹r_g‘_þass ( ad­‹r ), hash , 234 ¿ndomiz” , maš_Ýts . did_v’dÜ , 235 maš_Ýts . did_´oduù , maš_Ýts. did_v”siÚ , 236 maš_Ýts . did_sourû , 237 `btd_ad­‹r_g‘_£rviûs ( ad­‹r ), eœ ); 239 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 240 ià(! »¶y ) 241  NULL ; 243 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 245 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 246 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 247 DBUS_TYPE_STRING_AS_STRING 248 DBUS_TYPE_VARIANT_AS_STRING 249 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 250 & diù ); 252 `diù_­³nd_¬¿y (& diù , "EIR", DBUS_TYPE_BYTE , & ³œ , Ën ); 254 `add_pow”_¡©e (& diù , ad­‹r ); 256 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & diù ); 258  »¶y ; 259 } } 261  $»ad_loÿl_com¶‘e ( btd_ad­‹r * ad­‹r , 262 cÚ¡ ušt8_t * hash , cÚ¡ ušt8_ˆ* ¿ndomiz” , 263 * u£r_d©a ) 265 DBusMes§ge * msg = u£r_d©a ; 266 DBusMes§ge * »¶y ; 268 `DBG (""); 270 ià( ìd_£rviû =ð NULL ) { 271 `dbus_mes§ge_uÄef ( msg ); 273 ià( ag’t_»gi¡”_po¡pÚe ) { 274 ag’t_»gi¡”_po¡pÚe = çl£ ; 275 `»gi¡”_ag’t ( Œue ); 281 ià( hash && ¿ndomiz” ) 282 »¶y = `ü—‹_»que¡_oob_»¶y ( ad­‹r , hash , ¿ndomiz” , 283 msg ); 285 »¶y = `”rÜ_»¶y ( msg , EIO ); 287 `dbus_mes§ge_uÄef ( msg ); 289 ià(! `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y )) 290 `”rÜ ("D-Bus send failed"); 291 } } 293  $bÚdšg_com¶‘e ( btd_ad­‹r * ad­‹r , 294 cÚ¡ bdaddr_t * bdaddr , ušt8_t ¡©us , 295 * u£r_d©a ) 297 DBusMes§ge * msg = u£r_d©a ; 298 DBusMes§ge * »¶y ; 300 `DBG (""); 302 ià( ìd_£rviû =ð NULL ) { 303 `dbus_mes§ge_uÄef ( msg ); 305 ià( ag’t_»gi¡”_po¡pÚe ) { 306 ag’t_»gi¡”_po¡pÚe = çl£ ; 307 `»gi¡”_ag’t ( Œue ); 313 ià( ¡©us ) 314 »¶y = `”rÜ_»¶y ( msg , EIO ); 316 »¶y = `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 318 `dbus_mes§ge_uÄef ( msg ); 320 ià(! `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y )) 321 `”rÜ ("D-Bus send failed"); 322 } } 324  $check_deviû ( btd_deviû * deviû ) 326 ià(! deviû ) 327  - ENOENT ; 330 ià( `deviû_is_·œed ( deviû , BDADDR_BREDR )) { 331 `DBG ("already…aired"); 332  - EALREADY ; 336 ià( `deviû_is_bÚdšg ( deviû , NULL )) { 337 `DBG ("pairing in…rogress"); 338  - EINPROGRESS ; 342 } } 344  $´oûss_eœ ( ušt8_t * eœ , size_t size ,  oob_·¿ms * »mÙe ) 346  eœ_d©a ƒir_data; 348 `DBG ("siz%zu", size ); 350 `mem£t (& eœ_d©a , 0, (eir_data)); 352 ià( `eœ_·r£_oob (& eœ_d©a , eœ , size ) < 0) 353  - EINVAL ; 355 `baýy (& »mÙe -> add»ss , & eœ_d©a . addr ); 357 »mÙe -> þass = eœ_d©a .class; 359 »mÙe -> Çme = eœ_d©a .name; 360 eœ_d©a . Çme = NULL ; 362 »mÙe -> £rviûs = eœ_d©a .services; 363 eœ_d©a . £rviûs = NULL ; 365 »mÙe -> hash = eœ_d©a .hash; 366 eœ_d©a . hash = NULL ; 368 »mÙe -> ¿ndomiz” = eœ_d©a .randomizer; 369 eœ_d©a . ¿ndomiz” = NULL ; 371 `eœ_d©a_ä“ (& eœ_d©a ); 374 } } 398  $´oûss_nokŸ_lÚg (* d©a , size_t size , ušt8_t m¬k” , 399  oob_·¿ms * »mÙe ) 402 bdaddr_t add»ss ; 403 ušt8_t þass [3]; 404 ušt8_t auth’tiÿtiÚ [16]; 405 ušt8_t Çme_Ën ; 406 ušt8_t Çme [0]; 407 } `__©Œibu‹__ (( ·cked )è* n = d©a ; 409 ià( size !ð(* n è+‚-> Çme_Ën ) 410  - EINVAL ; 413 `basw­ (& »mÙe -> add»ss , & n ->address); 415 »mÙe -> þass = n ->class[0] | (n->class[1] << 8) | (n->class[2] << 16); 417 ià( n -> Çme_Ën > 0) 418 »mÙe -> Çme = `g_¡ºdup ((*) n ->Çme,‚-> Çme_Ën ); 420 ià( m¬k” == 0x01) { 421 »mÙe -> pš = `g_memdup ( n -> auth’tiÿtiÚ , 4); 422 »mÙe -> pš_Ën = 4; 423 } ià( m¬k” == 0x02) { 424 »mÙe -> pš = `g_memdup ( n -> auth’tiÿtiÚ , 16); 425 »mÙe -> pš_Ën = 16; 429 } } 431  $´oûss_nokŸ_shÜt (* d©a , size_t size , 432  oob_·¿ms * »mÙe ) 435 bdaddr_t add»ss ; 436 ušt8_t þass [3]; 437 ušt8_t auth’tiÿtiÚ [4]; 438 ušt8_t Çme_Ën ; 439 ušt8_t Çme [0]; 440 } `__©Œibu‹__ (( ·cked )è* n = d©a ; 442 ià( size !ð(* n è+‚-> Çme_Ën ) 443  - EINVAL ; 446 `basw­ (& »mÙe -> add»ss , & n ->address); 448 »mÙe -> þass = n ->class[0] | (n->class[1] << 8) | (n->class[2] << 16); 450 ià( n -> Çme_Ën > 0) 451 »mÙe -> Çme = `g_¡ºdup ((*) n ->Çme,‚-> Çme_Ën ); 453 »mÙe -> pš = `g_memdup ( n -> auth’tiÿtiÚ , 4); 454 »mÙe -> pš_Ën = 4; 457 } } 459  $´oûss_nokŸ_exŒa_shÜt (* d©a , size_t size , 460  oob_·¿ms * »mÙe ) 463 bdaddr_t add»ss ; 464 ušt8_t þass [3]; 465 ušt8_t Çme_Ën ; 466 ušt8_t Çme [0]; 467 } `__©Œibu‹__ (( ·cked )è* n = d©a ; 469 ià( size !ð(* n è+‚-> Çme_Ën ) 470  - EINVAL ; 472 `baýy (& »mÙe -> add»ss , & n ->address); 474 »mÙe -> þass = n ->class[0] | (n->class[1] << 8) | (n->class[2] << 16); 476 ià( n -> Çme_Ën > 0) 477 »mÙe -> Çme = `g_¡ºdup ((*) n ->Çme,‚-> Çme_Ën ); 480 } } 482  $´oûss_nokŸ_com_bt ( ušt8_t * d©a , size_t size , 483  oob_·¿ms * »mÙe ) 485 ušt8_t m¬k” ; 487 m¬k” = * d©a ++; 488 size --; 490 `DBG ("m¬k”: 0x%.2x size: %zu", m¬k” , size ); 492  m¬k” ) { 496  `´oûss_nokŸ_lÚg ( d©a , size , m¬k” , »mÙe ); 498  `´oûss_nokŸ_exŒa_shÜt ( d©a , size , »mÙe ); 500  `´oûss_nokŸ_shÜt ( d©a , size , »mÙe ); 502 `w¬n ("NÙ suµÜ‹d NokŸ NFCƒx‹nsiÚ (0x%.2x)", m¬k” ); 503  - EPROTONOSUPPORT ; 505 } } 507  ýs $´oûss_¡©e (cÚ¡ * ¡©e ) 509 ià( `¡rÿ£cmp ( ¡©e , "active") == 0) 510  CPS_ACTIVE ; 512 ià( `¡rÿ£cmp ( ¡©e , "activating") == 0) 513  CPS_ACTIVATING ; 515 ià( `¡rÿ£cmp ( ¡©e , "inactive") == 0) 516  CPS_INACTIVE ; 518  CPS_UNKNOWN ; 519 } } 521  $´oûss_mes§ge ( DBusMes§ge * msg ,  oob_·¿ms * »mÙe ) 523 DBusMes§geI‹r ™” ; 524 DBusMes§geI‹r diù ; 526 `dbus_mes§ge_™”_š™ ( msg , & ™” ); 528 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_ARRAY ) 529  - EINVAL ; 532 »mÙe -> pow”_¡©e = CPS_UNKNOWN ; 534 `dbus_mes§ge_™”_»cur£ (& ™” , & diù ); 536  `dbus_mes§ge_™”_g‘_¬g_ty³ (& diù è=ð DBUS_TYPE_DICT_ENTRY ) { 537 DBusMes§geI‹r v®ue ; 538 DBusMes§geI‹r ’Œy ; 539 cÚ¡ * key ; 541 `dbus_mes§ge_™”_»cur£ (& diù , & ’Œy ); 543 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy è!ð DBUS_TYPE_STRING ) 544  ”rÜ ; 546 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & key ); 547 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 549 `dbus_mes§ge_™”_»cur£ (& ’Œy , & v®ue ); 551 ià( `¡rÿ£cmp ( key , "EIR") == 0) { 552 DBusMes§geI‹r ¬¿y ; 553 ušt8_t * eœ ; 554  size ; 557 ià( `bacmp (& »mÙe -> add»ss , BDADDR_ANY ) != 0) 558  ”rÜ ; 560 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& v®ue ) != 561 DBUS_TYPE_ARRAY ) 562  ”rÜ ; 564 `dbus_mes§ge_™”_»cur£ (& v®ue , & ¬¿y ); 565 `dbus_mes§ge_™”_g‘_fixed_¬¿y (& ¬¿y , & eœ , & size ); 567 ià( `´oûss_eœ ( eœ , size , »mÙe ) < 0) 568  ”rÜ ; 569 } ià( `¡rÿ£cmp ( key , "nokia.com:bt") == 0) { 570 DBusMes§geI‹r ¬¿y ; 571 ušt8_t * d©a ; 572  size ; 575 ià( `bacmp (& »mÙe -> add»ss , BDADDR_ANY ) != 0) 576  ”rÜ ; 578 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& v®ue ) != 579 DBUS_TYPE_ARRAY ) 580  ”rÜ ; 582 `dbus_mes§ge_™”_»cur£ (& v®ue , & ¬¿y ); 583 `dbus_mes§ge_™”_g‘_fixed_¬¿y (& ¬¿y , & d©a , & size ); 585 ià( `´oûss_nokŸ_com_bt ( d©a , size , »mÙe )) 586  ”rÜ ; 587 } ià( `¡rÿ£cmp ( key , "State") == 0) { 588 DBusMes§geI‹r ¬¿y ; 589 cÚ¡ * ¡©e ; 591 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& v®ue ) != 592 DBUS_TYPE_STRING ) 593  ”rÜ ; 595 `dbus_mes§ge_™”_»cur£ (& v®ue , & ¬¿y ); 596 `dbus_mes§ge_™”_g‘_basic (& v®ue , & ¡©e ); 598 »mÙe -> pow”_¡©e = `´oûss_¡©e ( ¡©e ); 599 ià( »mÙe -> pow”_¡©e =ð CPS_UNKNOWN ) 600  ”rÜ ; 603 `dbus_mes§ge_™”_Ãxt (& diù ); 607 ià( »mÙe -> pow”_¡©e !ð CPS_UNKNOWN 608 && `bacmp (& »mÙe -> add»ss , BDADDR_ANY ) == 0) 609  - EINVAL ; 613 ”rÜ : 614 ià( `bacmp (& »mÙe -> add»ss , BDADDR_ANY ) != 0) { 615 `ä“_oob_·¿ms ( »mÙe ); 616 `mem£t ( »mÙe , 0, (*remote)); 619  - EINVAL ; 620 } } 622  $check_ad­‹r ( btd_ad­‹r * ad­‹r ) 624 ià(! ad­‹r ) 625  - ENOENT ; 627 ià( `btd_ad­‹r_check_oob_hªdËr ( ad­‹r )) 628  - EINPROGRESS ; 630 ià(! `btd_ad­‹r_s¥_’abËd ( ad­‹r )) 631  - ENOTSUP ; 634 } } 636  $¡Üe_·¿ms ( btd_ad­‹r * ad­‹r ,  btd_deviû * deviû , 637  oob_·¿ms * ·¿ms ) 639 ià( ·¿ms -> þass != 0) 640 `deviû_£t_þass ( deviû , ·¿ms -> þass ); 642 ià( ·¿ms -> Çme ) { 643 `deviû_¡Üe_ÿched_Çme ( deviû , ·¿ms -> Çme ); 644 `btd_deviû_deviû_£t_Çme ( deviû , ·¿ms -> Çme ); 647 ià( ·¿ms -> £rviûs ) 648 `deviû_add_eœ_uuids ( deviû , ·¿ms -> £rviûs ); 650 ià( ·¿ms -> hash ) { 651 `btd_ad­‹r_add_»mÙe_oob_d©a ( ad­‹r , & ·¿ms -> add»ss , 652 ·¿ms -> hash , 653 ·¿ms -> ¿ndomiz” ); 654 } ià( ·¿ms -> pš_Ën ) { 660 } } 662  DBusMes§ge * $push_oob ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , * d©a ) 664  btd_ad­‹r * ad­‹r ; 665  ag’t *agent; 666  oob_hªdËr * hªdËr ; 667  oob_·¿ms »mÙe ; 668  btd_deviû * deviû ; 669 ušt8_t io_ÿp ; 670  ”r ; 672 ià( ìd_£rviû =ð NULL || 673 ! `g_¡r_equ® ( ìd_£rviû , `dbus_mes§ge_g‘_£nd” ( msg ))) 674  `”rÜ_»¶y ( msg , EPERM ); 676 `DBG (""); 678 ad­‹r = `btd_ad­‹r_g‘_deçuÉ (); 680 ”r = `check_ad­‹r ( ad­‹r ); 681 ià( ”r < 0) 682  `”rÜ_»¶y ( msg , - ”r ); 684 ià(! `btd_ad­‹r_g‘_pow”ed ( ad­‹r )) 685  `”rÜ_»¶y ( msg , ENONET ); 687 ag’t = `ad­‹r_g‘_ag’t ( ad­‹r ); 688 ià(! ag’t ) 689  `”rÜ_»¶y ( msg , ENONET ); 691 io_ÿp = `ag’t_g‘_io_ÿ·bž™y ( ag’t ); 692 `ag’t_uÄef ( ag’t ); 694 `mem£t (& »mÙe , 0, (remote)); 696 ”r = `´oûss_mes§ge ( msg , & »mÙe ); 697 ià( ”r < 0) 698  `”rÜ_»¶y ( msg , - ”r ); 700 ià( `bacmp (& »mÙe . add»ss , BDADDR_ANY ) == 0) { 701 `ä“_oob_·¿ms (& »mÙe ); 703  `”rÜ_»¶y ( msg , EINVAL ); 706 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & »mÙe . add»ss , 707 BDADDR_BREDR ); 709 ”r = `check_deviû ( deviû ); 710 ià( ”r < 0) { 711 `ä“_oob_·¿ms (& »mÙe ); 714 ià( ”r =ð- EALREADY ) 715  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 717  `”rÜ_»¶y ( msg , - ”r ); 720 ià(! `btd_ad­‹r_g‘_·œabË ( ad­‹r )) { 721 `ä“_oob_·¿ms (& »mÙe ); 723  `”rÜ_»¶y ( msg , ENONET ); 726 `¡Üe_·¿ms ( ad­‹r , deviû , & »mÙe ); 728 `ä“_oob_·¿ms (& »mÙe ); 730 ”r = `ad­‹r_ü—‹_bÚdšg ( ad­‹r , `deviû_g‘_add»ss ( deviû ), 731 BDADDR_BREDR , io_ÿp ); 732 ià( ”r < 0) 733  `”rÜ_»¶y ( msg , - ”r ); 735 hªdËr = `g_Ãw0 ( oob_hªdËr , 1); 736 hªdËr -> bÚdšg_cb = bÚdšg_com¶‘e ; 737 `baýy (& hªdËr -> »mÙe_addr , `deviû_g‘_add»ss ( deviû )); 738 hªdËr -> u£r_d©a = `dbus_mes§ge_»f ( msg ); 740 `btd_ad­‹r_£t_oob_hªdËr ( ad­‹r , hªdËr ); 742  NULL ; 743 } } 745  DBusMes§ge * $»que¡_oob ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 746 * d©a ) 748  btd_ad­‹r * ad­‹r ; 749  oob_hªdËr * hªdËr ; 750  oob_·¿ms »mÙe ; 751  btd_deviû * deviû ; 752  ”r ; 754 ià( ìd_£rviû =ð NULL || 755 ! `g_¡r_equ® ( ìd_£rviû , `dbus_mes§ge_g‘_£nd” ( msg ))) 756  `”rÜ_»¶y ( msg , EPERM ); 758 `DBG (""); 760 ad­‹r = `btd_ad­‹r_g‘_deçuÉ (); 762 ”r = `check_ad­‹r ( ad­‹r ); 763 ià( ”r < 0) 764  `”rÜ_»¶y ( msg , - ”r ); 766 `mem£t (& »mÙe , 0, (remote)); 768 ”r = `´oûss_mes§ge ( msg , & »mÙe ); 769 ià( ”r < 0) 770  `”rÜ_»¶y ( msg , - ”r ); 772 ià( `bacmp (& »mÙe . add»ss , BDADDR_ANY ) == 0) { 773 ià( `btd_ad­‹r_g‘_pow”ed ( ad­‹r )) 774  »ad_loÿl ; 776  dÚe ; 779 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & »mÙe . add»ss , BDADDR_BREDR ); 781 ”r = `check_deviû ( deviû ); 782 ià( ”r < 0) 783  dÚe ; 785 ià(! `btd_ad­‹r_g‘_·œabË ( ad­‹r )) { 786 ”r = - ENONET ; 787  dÚe ; 790 `¡Üe_·¿ms ( ad­‹r , deviû , & »mÙe ); 792 ià( »mÙe . hash && `btd_ad­‹r_g‘_pow”ed ( ad­‹r )) 793  »ad_loÿl ; 794 dÚe : 795 `ä“_oob_·¿ms (& »mÙe ); 797 ià( ”r < 0 &&ƒ¼ !ð- EALREADY ) 798  `”rÜ_»¶y ( msg , - ”r ); 800  `ü—‹_»que¡_oob_»¶y ( ad­‹r , NULL , NULL, msg ); 802 »ad_loÿl : 803 `ä“_oob_·¿ms (& »mÙe ); 805 ”r = `btd_ad­‹r_»ad_loÿl_oob_d©a ( ad­‹r ); 806 ià( ”r < 0) 807  `”rÜ_»¶y ( msg , - ”r ); 809 hªdËr = `g_Ãw0 ( oob_hªdËr , 1); 810 hªdËr -> »ad_loÿl_cb = »ad_loÿl_com¶‘e ; 811 hªdËr -> u£r_d©a = `dbus_mes§ge_»f ( msg ); 813 `btd_ad­‹r_£t_oob_hªdËr ( ad­‹r , hªdËr ); 815  NULL ; 816 } } 818  DBusMes§ge * $»Ëa£ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 819 * u£r_d©a ) 821 ià( ìd_£rviû =ð NULL || 822 ! `g_¡r_equ® ( ìd_£rviû , `dbus_mes§ge_g‘_£nd” ( msg ))) 823  `”rÜ_»¶y ( msg , EPERM ); 825 `DBG (""); 827 `g_ä“ ( ìd_£rviû ); 828 ìd_£rviû = NULL ; 830 `g_dbus_uÄegi¡”_š‹rçû ( cÚn , AGENT_PATH , AGENT_INTERFACE ); 832  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 833 } } 835 cÚ¡ GDBusM‘hodTabË gìd_m‘hods [] = { 836 { GDBUS_ASYNC_METHOD ("RequestOOB", 837 GDBUS_ARGS ({ "data", "a{sv}" }), 838 GDBUS_ARGS ({ "d©a", "a{sv}" }), »que¡_oob ) }, 839 { GDBUS_ASYNC_METHOD ("PushOOB", 840 GDBUS_ARGS ({ "d©a", "a{sv}"}), NULL , push_oob ) }, 841 { GDBUS_METHOD ("R–—£", NULL , NULL, »Ëa£ ) }, 845  $ìd_­³¬ed ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 847  btd_ad­‹r * ad­‹r ; 849 `DBG (""); 851 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚn , AGENT_PATH , AGENT_INTERFACE , 852 ìd_m‘hods , 853 NULL , NULL, NULL, NULL)) { 854 `”rÜ ("ìd iÁ”çû in™ fažed oÀ·th " AGENT_PATH ); 863 ad­‹r = `btd_ad­‹r_g‘_deçuÉ (); 865 ià( ad­‹r && `btd_ad­‹r_check_oob_hªdËr (adapter)) 866 ag’t_»gi¡”_po¡pÚe = Œue ; 868 `»gi¡”_ag’t ( Œue ); 869 } } 871  $ìd_vªished ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 873 `DBG (""); 876 ià( ìd_£rviû !ð NULL ) { 877 `g_ä“ ( ìd_£rviû ); 878 ìd_£rviû = NULL ; 880 `g_dbus_uÄegi¡”_š‹rçû ( cÚn , AGENT_PATH , AGENT_INTERFACE ); 882 } } 884  $ìd_š™ () 886 `DBG ("Setup‚eard…lugin"); 888 w©ch”_id = `g_dbus_add_£rviû_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), 889 NEARD_NAME , ìd_­³¬ed , 890 ìd_vªished , NULL , NULL); 891 ià( w©ch”_id == 0) 892  - ENOMEM ; 895 } } 897  $ìd_ex™ () 899 `DBG ("Cleanup‚eard…lugin"); 901 `g_dbus_»move_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), w©ch”_id ); 902 w©ch”_id = 0; 904 ià( ìd_£rviû !ð NULL ) 905 `uÄegi¡”_ag’t (); 906 } } 908 BLUETOOTH_PLUGIN_DEFINE ( ìd , VERSION , BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 909 ìd_š™ , ìd_ex™ ) @plugins/policy.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~ 33  ~ 35  ~"lib/uuid.h " 36  ~"lib/mgmt.h " 37  ~"¤c/log.h " 38  ~"¤c/¶ugš.h " 39  ~"¤c/ad­‹r.h " 40  ~"¤c/deviû.h " 41  ~"¤c/£rviû.h " 42  ~"¤c/´ofže.h " 43  ~"¤c/hcid.h " 45 #ifdeà __TIZEN_PATCH__ 46  #CONTROL_CONNECT_TIMEOUT 4 ) 48  #CONTROL_CONNECT_TIMEOUT 2 ) 50  #SOURCE_RETRY_TIMEOUT 2 ) 51  #SINK_RETRY_TIMEOUT SOURCE_RETRY_TIMEOUT ) 52  #SOURCE_RETRIES 1 ) 53  #SINK_RETRIES SOURCE_RETRIES ) 57  #RECONNECT_GIVE_UP (3 * 60) ) 58  #RECONNECT_TIMEOUT 1 ) 60  s»cÚÃù_d©a { 61  btd_deviû * mdev ; 62 boÞ m»cÚÃù ; 63 GSLi¡ * m£rviûs ; 64 gušt mtim” ; 65 boÞ maùive ; 66 time_t m¡¬t ; 67  mtimeout ; 70 cÚ¡ * gdeçuÉ_»cÚÃù [] = { 71 HSP_AG_UUID , HFP_AG_UUID , A2DP_SOURCE_UUID , NULL }; 72 ** g»cÚÃù_uuids = NULL ; 73  GSLi¡ * g»cÚÃùs = NULL ; 75  g£rviû_id = 0; 76  GSLi¡ * gdeviûs = NULL ; 78  spÞicy_d©a { 79  btd_deviû * mdev ; 81 gušt msourû_tim” ; 82 ušt8_t msourû_»Œ›s ; 83 gušt msšk_tim” ; 84 ušt8_t msšk_»Œ›s ; 85 gušt mù_tim” ; 86 gušt mtg_tim” ; 89  $pÞicy_cÚÃù ( pÞicy_d©a * d©a , 90  btd_£rviû * £rviû ) 92  btd_´ofže * ´ofže = `btd_£rviû_g‘_´ofže ( £rviû ); 94 `DBG ("% ´ofž%s", `deviû_g‘_·th ( d©a -> dev ), ´ofže -> Çme ); 96 `btd_£rviû_cÚÃù ( £rviû ); 97 } } 99  $pÞicy_discÚÃù ( pÞicy_d©a * d©a , 100  btd_£rviû * £rviû ) 102  btd_´ofže * ´ofže = `btd_£rviû_g‘_´ofže ( £rviû ); 104 `DBG ("% ´ofž%s", `deviû_g‘_·th ( d©a -> dev ), ´ofže -> Çme ); 106 `btd_£rviû_discÚÃù ( £rviû ); 107 } } 109  gboÞ—n $pÞicy_cÚÃù_ù ( gpoš‹r u£r_d©a ) 111  pÞicy_d©a * d©a = u£r_d©a ; 112  btd_£rviû * £rviû ; 114 d©a -> ù_tim” = 0; 116 £rviû = `btd_deviû_g‘_£rviû ( d©a -> dev , AVRCP_REMOTE_UUID ); 117 ià( £rviû !ð NULL ) 118 `pÞicy_cÚÃù ( d©a , £rviû ); 120  FALSE ; 121 } } 123  $pÞicy_£t_ù_tim” ( pÞicy_d©a * d©a ) 125 ià( d©a -> ù_tim” > 0) 126 `g_sourû_»move ( d©a -> ù_tim” ); 128 d©a -> ù_tim” = `g_timeout_add_£cÚds ( CONTROL_CONNECT_TIMEOUT , 129 pÞicy_cÚÃù_ù , d©a ); 130 } } 132  pÞicy_d©a * $fšd_d©a ( btd_deviû * dev ) 134 GSLi¡ * l ; 136  l = deviûs ;†;† =†-> Ãxt ) { 137  pÞicy_d©a * d©a = l ->data; 139 ià( d©a -> dev == dev) 140  d©a ; 143  NULL ; 144 } } 146  $pÞicy_»move (* u£r_d©a ) 148  pÞicy_d©a * d©a = u£r_d©a ; 150 ià( d©a -> sourû_tim” > 0) 151 `g_sourû_»move ( d©a -> sourû_tim” ); 153 ià( d©a -> sšk_tim” > 0) 154 `g_sourû_»move ( d©a -> sšk_tim” ); 156 ià( d©a -> ù_tim” > 0) 157 `g_sourû_»move ( d©a -> ù_tim” ); 159 ià( d©a -> tg_tim” > 0) 160 `g_sourû_»move ( d©a -> tg_tim” ); 162 `g_ä“ ( d©a ); 163 } } 165  pÞicy_d©a * $pÞicy_g‘_d©a ( btd_deviû * dev ) 167  pÞicy_d©a * d©a ; 169 d©a = `fšd_d©a ( dev ); 170 ià( d©a !ð NULL ) 171  d©a ; 173 d©a = `g_Ãw0 ( pÞicy_d©a , 1); 174 d©a -> dev = dev; 176 deviûs = `g_¦i¡_´•’d (deviûs, d©a ); 178  d©a ; 179 } } 181  gboÞ—n $pÞicy_cÚÃù_sšk ( gpoš‹r u£r_d©a ) 183  pÞicy_d©a * d©a = u£r_d©a ; 184  btd_£rviû * £rviû ; 186 d©a -> sourû_tim” = 0; 187 d©a -> sšk_»Œ›s ++; 189 £rviû = `btd_deviû_g‘_£rviû ( d©a -> dev , A2DP_SINK_UUID ); 190 ià( £rviû !ð NULL ) 191 `pÞicy_cÚÃù ( d©a , £rviû ); 193  FALSE ; 194 } } 196  $pÞicy_£t_sšk_tim” ( pÞicy_d©a * d©a ) 198 ià( d©a -> sšk_tim” > 0) 199 `g_sourû_»move ( d©a -> sšk_tim” ); 201 d©a -> sšk_tim” = `g_timeout_add_£cÚds ( SINK_RETRY_TIMEOUT , 202 pÞicy_cÚÃù_sšk , 203 d©a ); 204 } } 206  $sšk_cb ( btd_£rviû * £rviû , btd_£rviû_¡©e_t Þd_¡©e , 207 btd_£rviû_¡©e_t Ãw_¡©e ) 209  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 210  pÞicy_d©a * d©a ; 211  btd_£rviû * cÚŒÞËr ; 213 cÚŒÞËr = `btd_deviû_g‘_£rviû ( dev , AVRCP_REMOTE_UUID ); 214 ià( cÚŒÞËr =ð NULL ) 217 d©a = `pÞicy_g‘_d©a ( dev ); 219  Ãw_¡©e ) { 220  BTD_SERVICE_STATE_UNAVAILABLE : 221  BTD_SERVICE_STATE_DISCONNECTED : 222 ià( Þd_¡©e =ð BTD_SERVICE_STATE_CONNECTING ) { 223  ”r = `btd_£rviû_g‘_”rÜ ( £rviû ); 225 ià( ”r =ð- EAGAIN ) { 226 ià( d©a -> sšk_»Œ›s < SINK_RETRIES ) 227 `pÞicy_£t_sšk_tim” ( d©a ); 229 d©a -> sšk_»Œ›s = 0; 231 } ià( d©a -> sšk_tim” > 0) { 232 `g_sourû_»move ( d©a -> sšk_tim” ); 233 d©a -> sšk_tim” = 0; 237 ià( d©a -> ù_tim” > 0) { 238 `g_sourû_»move ( d©a -> ù_tim” ); 239 d©a -> ù_tim” = 0; 240 } ià( `btd_£rviû_g‘_¡©e ( cÚŒÞËr ) != 241 BTD_SERVICE_STATE_DISCONNECTED ) 242 `pÞicy_discÚÃù ( d©a , cÚŒÞËr ); 244  BTD_SERVICE_STATE_CONNECTING : 246  BTD_SERVICE_STATE_CONNECTED : 247 ià( d©a -> sšk_tim” > 0) { 248 `g_sourû_»move ( d©a -> sšk_tim” ); 249 d©a -> sšk_tim” = 0; 255 ià( Þd_¡©e =ð BTD_SERVICE_STATE_CONNECTING ) 256 #ifdeà __TIZEN_PATCH__ 261 `pÞicy_£t_ù_tim” ( d©a ); 263 `pÞicy_cÚÃù ( d©a , cÚŒÞËr ); 265 ià( `btd_£rviû_g‘_¡©e ( cÚŒÞËr ) != 266 BTD_SERVICE_STATE_CONNECTED ) 267 `pÞicy_£t_ù_tim” ( d©a ); 269  BTD_SERVICE_STATE_DISCONNECTING : 272 } } 274  gboÞ—n $pÞicy_cÚÃù_tg ( gpoš‹r u£r_d©a ) 276  pÞicy_d©a * d©a = u£r_d©a ; 277  btd_£rviû * £rviû ; 279 d©a -> tg_tim” = 0; 281 £rviû = `btd_deviû_g‘_£rviû ( d©a -> dev , AVRCP_TARGET_UUID ); 282 ià( £rviû !ð NULL ) 283 `pÞicy_cÚÃù ( d©a , £rviû ); 285  FALSE ; 286 } } 288  $pÞicy_£t_tg_tim” ( pÞicy_d©a * d©a ) 290 ià( d©a -> tg_tim” > 0) 291 `g_sourû_»move ( d©a -> tg_tim” ); 293 d©a -> tg_tim” = `g_timeout_add_£cÚds ( CONTROL_CONNECT_TIMEOUT , 294 pÞicy_cÚÃù_tg , 295 d©a ); 296 } } 298  gboÞ—n $pÞicy_cÚÃù_sourû ( gpoš‹r u£r_d©a ) 300  pÞicy_d©a * d©a = u£r_d©a ; 301  btd_£rviû * £rviû ; 303 d©a -> sourû_tim” = 0; 304 d©a -> sourû_»Œ›s ++; 306 £rviû = `btd_deviû_g‘_£rviû ( d©a -> dev , A2DP_SOURCE_UUID ); 307 ià( £rviû !ð NULL ) 308 `pÞicy_cÚÃù ( d©a , £rviû ); 310  FALSE ; 311 } } 313  $pÞicy_£t_sourû_tim” ( pÞicy_d©a * d©a ) 315 ià( d©a -> sourû_tim” > 0) 316 `g_sourû_»move ( d©a -> sourû_tim” ); 318 d©a -> sourû_tim” = `g_timeout_add_£cÚds ( SOURCE_RETRY_TIMEOUT , 319 pÞicy_cÚÃù_sourû , 320 d©a ); 321 } } 323  $sourû_cb ( btd_£rviû * £rviû , 324 btd_£rviû_¡©e_t Þd_¡©e , 325 btd_£rviû_¡©e_t Ãw_¡©e ) 327  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 328  pÞicy_d©a * d©a ; 329  btd_£rviû * rg‘ ; 331 rg‘ = `btd_deviû_g‘_£rviû ( dev , AVRCP_TARGET_UUID ); 332 ià( rg‘ =ð NULL ) 335 d©a = `pÞicy_g‘_d©a ( dev ); 337  Ãw_¡©e ) { 338  BTD_SERVICE_STATE_UNAVAILABLE : 339  BTD_SERVICE_STATE_DISCONNECTED : 340 ià( Þd_¡©e =ð BTD_SERVICE_STATE_CONNECTING ) { 341  ”r = `btd_£rviû_g‘_”rÜ ( £rviû ); 343 ià( ”r =ð- EAGAIN ) { 344 ià( d©a -> sourû_»Œ›s < SOURCE_RETRIES ) 345 `pÞicy_£t_sourû_tim” ( d©a ); 347 d©a -> sourû_»Œ›s = 0; 349 } ià( d©a -> sourû_tim” > 0) { 350 `g_sourû_»move ( d©a -> sourû_tim” ); 351 d©a -> sourû_tim” = 0; 355 ià( d©a -> tg_tim” > 0) { 356 `g_sourû_»move ( d©a -> tg_tim” ); 357 d©a -> tg_tim” = 0; 358 } ià( `btd_£rviû_g‘_¡©e ( rg‘ ) != 359 BTD_SERVICE_STATE_DISCONNECTED ) 360 `pÞicy_discÚÃù ( d©a , rg‘ ); 362  BTD_SERVICE_STATE_CONNECTING : 364  BTD_SERVICE_STATE_CONNECTED : 365 ià( d©a -> sourû_tim” > 0) { 366 `g_sourû_»move ( d©a -> sourû_tim” ); 367 d©a -> sourû_tim” = 0; 373 ià( Þd_¡©e =ð BTD_SERVICE_STATE_CONNECTING ) 374 `pÞicy_cÚÃù ( d©a , rg‘ ); 375 ià( `btd_£rviû_g‘_¡©e ( rg‘ ) != 376 BTD_SERVICE_STATE_CONNECTED ) 377 `pÞicy_£t_tg_tim” ( d©a ); 379  BTD_SERVICE_STATE_DISCONNECTING : 382 } } 384  $cÚŒÞËr_cb ( btd_£rviû * £rviû , 385 btd_£rviû_¡©e_t Þd_¡©e , 386 btd_£rviû_¡©e_t Ãw_¡©e ) 388  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 389  pÞicy_d©a * d©a ; 391 d©a = `fšd_d©a ( dev ); 392 ià( d©a =ð NULL ) 395  Ãw_¡©e ) { 396  BTD_SERVICE_STATE_UNAVAILABLE : 397  BTD_SERVICE_STATE_DISCONNECTED : 399  BTD_SERVICE_STATE_CONNECTING : 401  BTD_SERVICE_STATE_CONNECTED : 402 ià( d©a -> ù_tim” > 0) { 403 `g_sourû_»move ( d©a -> ù_tim” ); 404 d©a -> ù_tim” = 0; 407  BTD_SERVICE_STATE_DISCONNECTING : 410 } } 412  $rg‘_cb ( btd_£rviû * £rviû , 413 btd_£rviû_¡©e_t Þd_¡©e , 414 btd_£rviû_¡©e_t Ãw_¡©e ) 416  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 417  pÞicy_d©a * d©a ; 419 d©a = `fšd_d©a ( dev ); 420 ià( d©a =ð NULL ) 423  Ãw_¡©e ) { 424  BTD_SERVICE_STATE_UNAVAILABLE : 425  BTD_SERVICE_STATE_DISCONNECTED : 427  BTD_SERVICE_STATE_CONNECTING : 429  BTD_SERVICE_STATE_CONNECTED : 430 ià( d©a -> tg_tim” > 0) { 431 `g_sourû_»move ( d©a -> tg_tim” ); 432 d©a -> tg_tim” = 0; 435  BTD_SERVICE_STATE_DISCONNECTING : 438 } } 440  $»cÚÃù_»£t ( »cÚÃù_d©a * »cÚÃù ) 442 »cÚÃù -> ¡¬t = 0; 443 »cÚÃù -> timeout = 1; 445 ià( »cÚÃù -> tim” > 0) { 446 `g_sourû_»move ( »cÚÃù -> tim” ); 447 »cÚÃù -> tim” = 0; 449 } } 451  boÞ $»cÚÃù_m©ch (cÚ¡ * uuid ) 453 ** ¡r ; 455 ià(! »cÚÃù_uuids ) 456  çl£ ; 458  ¡r = »cÚÃù_uuids ; *str; str++) { 459 ià(! `bt_uuid_¡rcmp ( uuid , * ¡r )) 460  Œue ; 463  çl£ ; 464 } } 466  »cÚÃù_d©a * $»cÚÃù_fšd ( btd_deviû * dev ) 468 GSLi¡ * l ; 470  l = »cÚÃùs ;†;† = `g_¦i¡_Ãxt (l)) { 471  »cÚÃù_d©a * »cÚÃù = l -> d©a ; 473 ià( »cÚÃù -> dev == dev) 474  »cÚÃù ; 477  NULL ; 478 } } 480  »cÚÃù_d©a * $»cÚÃù_add ( btd_£rviû * £rviû ) 482  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 483  »cÚÃù_d©a * »cÚÃù ; 485 »cÚÃù = `»cÚÃù_fšd ( dev ); 486 ià(! »cÚÃù ) { 487 »cÚÃù = `g_Ãw0 ( »cÚÃù_d©a , 1); 488 »cÚÃù -> dev = dev; 489 »cÚÃùs = `g_¦i¡_­³nd ÔecÚÃùs, »cÚÃù ); 492 ià( `g_¦i¡_fšd ( »cÚÃù -> £rviûs , £rviû )) 493  »cÚÃù ; 495 »cÚÃù -> £rviûs = `g_¦i¡_­³nd (reconnect->services, 496 `btd_£rviû_»f ( £rviû )); 498  »cÚÃù ; 499 } } 501  $»cÚÃù_de¡roy ( gpoš‹r d©a ) 503  »cÚÃù_d©a * »cÚÃù = d©a ; 505 ià( »cÚÃù -> tim” > 0) 506 `g_sourû_»move ( »cÚÃù -> tim” ); 508 `g_¦i¡_ä“_fuÎ ( »cÚÃù -> £rviûs , 509 ( GDe¡royNÙify è btd_£rviû_uÄef ); 510 `g_ä“ ( »cÚÃù ); 511 } } 513  $»cÚÃù_»move ( btd_£rviû * £rviû ) 515  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 516  »cÚÃù_d©a * »cÚÃù ; 517 GSLi¡ * l ; 519 »cÚÃù = `»cÚÃù_fšd ( dev ); 520 ià(! »cÚÃù ) 523 l = `g_¦i¡_fšd ( »cÚÃù -> £rviûs , £rviû ); 524 ià(! l ) 527 »cÚÃù -> £rviûs = `g_¦i¡_d–‘e_lšk ÔecÚÃù->£rviûs, l ); 528 `btd_£rviû_uÄef ( £rviû ); 530 ià( »cÚÃù -> £rviûs ) 533 »cÚÃùs = `g_¦i¡_»move ÔecÚÃùs, »cÚÃù ); 535 ià( »cÚÃù -> tim” > 0) 536 `g_sourû_»move ( »cÚÃù -> tim” ); 538 `g_ä“ ( »cÚÃù ); 539 } } 541  $£rviû_cb ( btd_£rviû * £rviû , 542 btd_£rviû_¡©e_t Þd_¡©e , 543 btd_£rviû_¡©e_t Ãw_¡©e , 544 * u£r_d©a ) 546  btd_´ofže * ´ofže = `btd_£rviû_g‘_´ofže ( £rviû ); 547  »cÚÃù_d©a * »cÚÃù ; 549 ià( `g_¡r_equ® ( ´ofže -> »mÙe_uuid , A2DP_SINK_UUID )) 550 `sšk_cb ( £rviû , Þd_¡©e , Ãw_¡©e ); 551 ià( `g_¡r_equ® ( ´ofže -> »mÙe_uuid , A2DP_SOURCE_UUID )) 552 `sourû_cb ( £rviû , Þd_¡©e , Ãw_¡©e ); 553 ià( `g_¡r_equ® ( ´ofže -> »mÙe_uuid , AVRCP_REMOTE_UUID )) 554 `cÚŒÞËr_cb ( £rviû , Þd_¡©e , Ãw_¡©e ); 555 ià( `g_¡r_equ® ( ´ofže -> »mÙe_uuid , AVRCP_TARGET_UUID )) 556 `rg‘_cb ( £rviû , Þd_¡©e , Ãw_¡©e ); 562 ià(! »cÚÃù_uuids || !reconnect_uuids[0]) 569 ià(! ´ofže -> auto_cÚÃù ) 577 ià( Ãw_¡©e =ð BTD_SERVICE_STATE_UNAVAILABLE ) { 578 `»cÚÃù_»move ( £rviû ); 582 ià( Ãw_¡©e !ð BTD_SERVICE_STATE_CONNECTED ) 589 »cÚÃù = `»cÚÃù_add ( £rviû ); 591 »cÚÃù -> aùive = çl£ ; 592 `»cÚÃù_»£t ( »cÚÃù ); 599 ià(! »cÚÃù ->reconnect) 600 »cÚÃù ->»cÚÃù = `»cÚÃù_m©ch ( ´ofže -> »mÙe_uuid ); 602 `DBG ("Added % »cÚÃù %u", ´ofže -> Çme , »cÚÃù ->reconnect); 603 } } 605  gboÞ—n $»cÚÃù_timeout ( gpoš‹r d©a ) 607  »cÚÃù_d©a * »cÚÃù = d©a ; 608  ”r ; 610 `DBG ("Reconnecting…rofiles"); 613 »cÚÃù -> tim” = 0; 616 »cÚÃù -> timeout *= 2; 618 ”r = `btd_deviû_cÚÃù_£rviûs ( »cÚÃù -> dev ,„ecÚÃù-> £rviûs ); 619 ià( ”r < 0) { 620 `”rÜ ("Reconnecting services failed: %s (%d)", 621 `¡»¼Ü (- ”r ), -err); 622 `»cÚÃù_»£t ( »cÚÃù ); 623  FALSE ; 626 »cÚÃù -> aùive = Œue ; 628 ià(! »cÚÃù -> ¡¬t ) 629 »cÚÃù -> ¡¬t = `time ( NULL ); 631  FALSE ; 632 } } 634  $discÚÃù_cb ( btd_deviû * dev , ušt8_t »asÚ ) 636  »cÚÃù_d©a * »cÚÃù ; 638 `DBG ("»asÚ %u", »asÚ ); 640 ià( »asÚ !ð MGMT_DEV_DISCONN_TIMEOUT ) 643 »cÚÃù = `»cÚÃù_fšd ( dev ); 644 ià(! »cÚÃù || !reconnect->reconnect) 647 `DBG ("Device %s identified for‡uto-reconnection", 648 `deviû_g‘_·th ( dev )); 650 »cÚÃù -> tim” = `g_timeout_add_£cÚds ÔecÚÃù-> timeout , 651 »cÚÃù_timeout , 652 »cÚÃù ); 653 } } 655  $cÚn_çž_cb ( btd_deviû * dev , ušt8_t ¡©us ) 657  »cÚÃù_d©a * »cÚÃù ; 658 time_t du¿tiÚ ; 660 `DBG ("¡©u %u", ¡©us ); 662 »cÚÃù = `»cÚÃù_fšd ( dev ); 663 ià(! »cÚÃù || !reconnect->reconnect) 666 ià(! »cÚÃù -> aùive ) 669 »cÚÃù -> aùive = çl£ ; 672 ià( ¡©us =ð MGMT_STATUS_NOT_POWERED ) { 673 `»cÚÃù_»£t ( »cÚÃù ); 678 du¿tiÚ = `time ( NULL è- »cÚÃù -> ¡¬t ; 679 ià( du¿tiÚ + »cÚÃù -> timeout >ð RECONNECT_GIVE_UP ) { 680 `»cÚÃù_»£t ( »cÚÃù ); 684 »cÚÃù -> tim” = `g_timeout_add_£cÚds ÔecÚÃù-> timeout , 685 »cÚÃù_timeout , 686 »cÚÃù ); 687 } } 689  $pÞicy_š™ () 691 GE¼Ü * g”r = NULL ; 692 GKeyFže * cÚf ; 694 £rviû_id = `btd_£rviû_add_¡©e_cb ( £rviû_cb , NULL ); 696 cÚf = `btd_g‘_maš_cÚf (); 697 ià(! cÚf ) { 698 »cÚÃù_uuids = `g_¡rdupv ((**è deçuÉ_»cÚÃù ); 699  add_cb ; 702 »cÚÃù_uuids = `g_key_fže_g‘_¡ršg_li¡ ( cÚf , "Policy", 704 NULL , & g”r ); 705 ià( g”r ) { 706 `g_”rÜ_ä“ ( g”r ); 707 »cÚÃù_uuids = `g_¡rdupv ((**è deçuÉ_»cÚÃù ); 708  add_cb ; 710 add_cb : 711 ià( »cÚÃù_uuids &&„econnect_uuids[0]) { 712 `btd_add_discÚÃù_cb ( discÚÃù_cb ); 713 `btd_add_cÚn_çž_cb ( cÚn_çž_cb ); 717 } } 719  $pÞicy_ex™ () 721 `btd_»move_discÚÃù_cb ( discÚÃù_cb ); 722 `btd_»move_cÚn_çž_cb ( cÚn_çž_cb ); 724 ià( »cÚÃù_uuids ) 725 `g_¡rä“v ( »cÚÃù_uuids ); 727 `g_¦i¡_ä“_fuÎ ( »cÚÃùs , »cÚÃù_de¡roy ); 729 `g_¦i¡_ä“_fuÎ ( deviûs , pÞicy_»move ); 731 `btd_£rviû_»move_¡©e_cb ( £rviû_id ); 732 } } 734 BLUETOOTH_PLUGIN_DEFINE ( pÞicy , VERSION , BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 735 pÞicy_š™ , pÞicy_ex™ ) @plugins/sixaxis.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡ddef.h > 31  ~<”ºo.h > 32  ~ 33  ~ 34  ~<¡dlib.h > 35  ~ 36  ~ 37  ~ 38  ~ 39  ~ 41  ~"lib/blu‘oÙh.h " 42  ~"lib/uuid.h " 43  ~"¤c/ad­‹r.h " 44  ~"¤c/deviû.h " 45  ~"¤c/¶ugš.h " 46  ~"¤c/log.h " 47  ~"¤c/sh¬ed/utž.h " 50 cÚ¡ * mÇme ; 51 ušt16_t msourû ; 52 ušt16_t mvid ; 53 ušt16_t mpid ; 54 ušt16_t mv”siÚ ; 55 } gdeviûs [] = { 57 . Çme = "PLAYSTATION(R)3 Controller", 58 . gsourû = 0x0002, 59 . gvid = 0x054c, 60 . gpid = 0x0268, 61 . gv”siÚ = 0x0000, 64 . gÇme = "Navigation Controller", 65 . gsourû = 0x0002, 66 . gvid = 0x054c, 67 . gpid = 0x042f, 68 . gv”siÚ = 0x0000, 72  sËds_d©a { 73 * msy¥©h_´efix ; 74 ušt8_t mb™m­ ; 77  $Ëds_d©a_de¡roy ( Ëds_d©a * d©a ) 79 `ä“ ( d©a -> sy¥©h_´efix ); 80 `ä“ ( d©a ); 81 } } 83  udev * gùx = NULL ; 84  udev_mÚ™Ü * gmÚ™Ü = NULL ; 85  gušt gw©ch_id = 0; 87  $g‘_deviû_bdaddr ( fd , bdaddr_t * bdaddr ) 89 ušt8_t buf [18]; 90  »t ; 92 `mem£t ( buf , 0, (buf)); 94 buf [0] = 0xf2; 96 »t = `ioùl ( fd , `HIDIOCGFEATURE (( buf )), buf); 97 ià( »t < 0) { 98 `”rÜ ("sixaxis: failedo„ead device‡ddress (%s)", 99 `¡»¼Ü ( ”ºo )); 100  »t ; 103 `basw­ ( bdaddr , ( bdaddr_t *è( buf + 4)); 106 } } 108  $g‘_ma¡”_bdaddr ( fd , bdaddr_t * bdaddr ) 110 ušt8_t buf [8]; 111  »t ; 113 `mem£t ( buf , 0, (buf)); 115 buf [0] = 0xf5; 117 »t = `ioùl ( fd , `HIDIOCGFEATURE (( buf )), buf); 118 ià( »t < 0) { 119 `”rÜ ("sixaxis: failedo„ead master‡ddress (%s)", 120 `¡»¼Ü ( ”ºo )); 121  »t ; 124 `basw­ ( bdaddr , ( bdaddr_t *è( buf + 2)); 127 } } 129  $£t_ma¡”_bdaddr ( fd , cÚ¡ bdaddr_t * bdaddr ) 131 ušt8_t buf [8]; 132  »t ; 134 buf [0] = 0xf5; 135 buf [1] = 0x01; 137 `basw­ (( bdaddr_t *è( buf + 2), bdaddr ); 139 »t = `ioùl ( fd , `HIDIOCSFEATURE (( buf )), buf); 140 ià( »t < 0) 141 `”rÜ ("sixaxis: failedo write master‡ddress (%s)", 142 `¡»¼Ü ( ”ºo )); 144  »t ; 145 } } 147  ušt8_t $ÿlc_Ëds_b™m­ ( numb” ) 149 ušt8_t b™m­ = 0; 152 ià( numb” > 7) 153  b™m­ ; 155 ià( numb” > 4) { 156 b™m­ |= 0x10; 157 numb” -= 4; 160 b™m­ |ð0x01 << numb” ; 162  b™m­ ; 163 } } 165  $£t_Ëds_hid¿w ( fd , ušt8_t Ëds_b™m­ ) 176 ušt8_t Ëds_»pÜt [] = { 186  »t ; 188 Ëds_»pÜt [10] = Ëds_b™m­ ; 190 »t = `wr™e ( fd , Ëds_»pÜt , (leds_report)); 191 ià( »t =ð( Ëds_»pÜt )) 194 ià( »t < 0) 195 `”rÜ ("sixaxis: fažedØ£ˆLEDS (%s)", `¡»¼Ü ( ”ºo )); 197 `”rÜ ("sixaxis: fažedØ£ˆLEDS (%d by‹ wr™‹n)", »t ); 198 } } 200  boÞ $£t_Ëds_sysfs ( Ëds_d©a * d©a ) 202  i ; 204 ià(! d©a -> sy¥©h_´efix ) 205  çl£ ; 208  i = 1; i <= 4; i++) { 209  ·th [ PATH_MAX ] = { 0 }; 210  buf [2] = { 0 }; 211  fd ; 212  »t ; 214 `¢´štf ( ·th , PATH_MAX , "%s%d/brightness", 215 d©a -> sy¥©h_´efix , i ); 217 fd = `Ý’ ( ·th , O_WRONLY ); 218 ià( fd < 0) { 219 `”rÜ ("sixaxis: cªnÙ o³À% (%s)", ·th , 220 `¡»¼Ü ( ”ºo )); 221  çl£ ; 224 buf [0] = '0' + !!( d©a -> b™m­ & (1 << i )); 225 »t = `wr™e ( fd , buf , (buf)); 226 `þo£ ( fd ); 227 ià( »t !ð( buf )) 228  çl£ ; 231  Œue ; 232 } } 234  gboÞ—n $£tup_Ëds ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 235 gpoš‹r u£r_d©a ) 237  Ëds_d©a * d©a = u£r_d©a ; 239 ià(! d©a ) 240  FALSE ; 242 ià( cÚd & ( G_IO_HUP | G_IO_ERR | G_IO_NVAL )) 243  out ; 245 if(! `£t_Ëds_sysfs ( d©a )) { 246  fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 247 `£t_Ëds_hid¿w ( fd , d©a -> b™m­ ); 250 out : 251 `Ëds_d©a_de¡roy ( d©a ); 253  FALSE ; 254 } } 256  boÞ $£tup_deviû ( fd ,  šdex ,  btd_ad­‹r * ad­‹r ) 258  deviû_addr [18], ma¡”_addr [18], ad­‹r_addr [18]; 259 bdaddr_t deviû_bdaddr , ma¡”_bdaddr ; 260 cÚ¡ bdaddr_t * ad­‹r_bdaddr ; 261  btd_deviû * deviû ; 263 ià( `g‘_deviû_bdaddr ( fd , & deviû_bdaddr ) < 0) 264  çl£ ; 266 ià( `g‘_ma¡”_bdaddr ( fd , & ma¡”_bdaddr ) < 0) 267  çl£ ; 272 deviû = `btd_ad­‹r_fšd_deviû ( ad­‹r , & deviû_bdaddr , 273 BDADDR_BREDR ); 274 ià( deviû && `btd_deviû_is_cÚÃùed (device)) 275  çl£ ; 277 ad­‹r_bdaddr = `btd_ad­‹r_g‘_add»ss ( ad­‹r ); 279 ià( `bacmp ( ad­‹r_bdaddr , & ma¡”_bdaddr )) { 280 ià( `£t_ma¡”_bdaddr ( fd , ad­‹r_bdaddr ) < 0) 281  çl£ ; 284 `ba2¡r (& deviû_bdaddr , deviû_addr ); 285 `ba2¡r (& ma¡”_bdaddr , ma¡”_addr ); 286 `ba2¡r ( ad­‹r_bdaddr , ad­‹r_addr ); 287 `DBG ("remote %s old_master %s‚ew_master %s", 288 deviû_addr , ma¡”_addr , ad­‹r_addr ); 290 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & deviû_bdaddr , BDADDR_BREDR ); 292 ià( `g_¦i¡_fšd_cu¡om ( `btd_deviû_g‘_uuids ( deviû ), HID_UUID , 293 ( GCom·»Func ) ¡rÿ£cmp )) { 294 `DBG ("deviû % ®»ady known, skpšg", deviû_addr ); 295  Œue ; 298 `šfo ("sixaxis: setting up‚ew device"); 300 `btd_deviû_deviû_£t_Çme ( deviû , deviûs [ šdex ]. Çme ); 301 `btd_deviû_£t_²pid ( deviû , deviûs [ šdex ]. sourû , deviûs[šdex]. vid , 302 deviûs [ šdex ]. pid , deviûs[šdex]. v”siÚ ); 303 `btd_deviû_£t_‹mpܬy ( deviû , FALSE ); 305  Œue ; 306 } } 308  $g‘_js_numb” ( udev_deviû * udeviû ) 310  udev_li¡_’Œy * deviûs , * dev_li¡_’Œy ; 311  udev_’um”©e * ’um”©e ; 312  udev_deviû * hid_·»Á ; 313 cÚ¡ * hid¿w_node ; 314 cÚ¡ * hid_id ; 315  numb” = 0; 317 hid_·»Á = `udev_deviû_g‘_·»Á_w™h_subsy¡em_devty³ ( udeviû , 318 "hid", NULL ); 325 hid_id = `udev_deviû_g‘_´Ý”ty_v®ue ( hid_·»Á , "HID_UNIQ"); 326 ià(! hid_id ) 327 hid_id = `udev_deviû_g‘_´Ý”ty_v®ue ( hid_·»Á , 330 hid¿w_node = `udev_deviû_g‘_devnode ( udeviû ); 331 ià(! hid_id || ! hid¿w_node ) 334 ’um”©e = `udev_’um”©e_Ãw ( `udev_deviû_g‘_udev ( udeviû )); 335 `udev_’um”©e_add_m©ch_sy¢ame ( ’um”©e , "js*"); 336 `udev_’um”©e_sÿn_deviûs ( ’um”©e ); 337 deviûs = `udev_’um”©e_g‘_li¡_’Œy ( ’um”©e ); 339 `udev_li¡_’Œy_fÜ—ch ( dev_li¡_’Œy , deviûs ) { 340  udev_deviû * šput_·»Á ; 341  udev_deviû * js_dev ; 342 cÚ¡ * šput_id ; 343 cÚ¡ * devÇme ; 345 devÇme = `udev_li¡_’Œy_g‘_Çme ( dev_li¡_’Œy ); 346 js_dev = `udev_deviû_Ãw_äom_sy¥©h ( 347 `udev_deviû_g‘_udev ( udeviû ), 348 devÇme ); 350 šput_·»Á = `udev_deviû_g‘_·»Á_w™h_subsy¡em_devty³ ( 351 js_dev , "šput", NULL ); 352 ià(! šput_·»Á ) 353  Ãxt ; 357 šput_id = `udev_deviû_g‘_sy§‰r_v®ue ( šput_·»Á , "uniq"); 363 ià(! šput_id || `¡¾’ (input_id) == 0) 364 šput_id = `udev_deviû_g‘_sy§‰r_v®ue ( šput_·»Á , 367 ià(! šput_id ) 368  Ãxt ; 370 ià(! `¡rcmp ( šput_id , hid_id )) { 371 numb” = `©oi ( `udev_deviû_g‘_sy¢um ( js_dev )); 374 numb” ++; 376 `udev_deviû_uÄef ( js_dev ); 379 Ãxt : 380 `udev_deviû_uÄef ( js_dev ); 383 `udev_’um”©e_uÄef ( ’um”©e ); 385  numb” ; 386 } } 388 * $g‘_Ëds_sy¥©h_´efix ( udev_deviû * udeviû ) 390  udev_li¡_’Œy * dev_li¡_’Œy ; 391  udev_’um”©e * ’um”©e ; 392  udev_deviû * hid_·»Á ; 393 cÚ¡ * sy¥©h ; 394 * sy¥©h_´efix ; 396 hid_·»Á = `udev_deviû_g‘_·»Á_w™h_subsy¡em_devty³ ( udeviû , 397 "hid", NULL ); 399 ’um”©e = `udev_’um”©e_Ãw ( `udev_deviû_g‘_udev ( udeviû )); 400 `udev_’um”©e_add_m©ch_·»Á ( ’um”©e , hid_·»Á ); 401 `udev_’um”©e_add_m©ch_subsy¡em ( ’um”©e , "leds"); 402 `udev_’um”©e_sÿn_deviûs ( ’um”©e ); 404 dev_li¡_’Œy = `udev_’um”©e_g‘_li¡_’Œy ( ’um”©e ); 405 ià(! dev_li¡_’Œy ) { 406 sy¥©h_´efix = NULL ; 407  out ; 410 sy¥©h = `udev_li¡_’Œy_g‘_Çme ( dev_li¡_’Œy ); 419 sy¥©h_´efix = `¡ºdup ( sy¥©h , `¡¾’ (syspath) - 1); 421 out : 422 `udev_’um”©e_uÄef ( ’um”©e ); 424  sy¥©h_´efix ; 425 } } 427  Ëds_d©a * $g‘_Ëds_d©a ( udev_deviû * udeviû ) 429  Ëds_d©a * d©a ; 430  numb” ; 432 numb” = `g‘_js_numb” ( udeviû ); 433 `DBG ("numb” %d", numb” ); 435 d©a = `m®loc0 ((*data)); 436 ià(! d©a ) 437  NULL ; 439 d©a -> b™m­ = `ÿlc_Ëds_b™m­ ( numb” ); 440 ià( d©a -> b™m­ == 0) { 441 `Ëds_d©a_de¡roy ( d©a ); 442  NULL ; 449 d©a -> sy¥©h_´efix = `g‘_Ëds_sy¥©h_´efix ( udeviû ); 451  d©a ; 452 } } 454  $g‘_suµÜ‹d_deviû ( udev_deviû * udeviû , ušt16_t * bus ) 456  udev_deviû * hid_·»Á ; 457 ušt16_t vid , pid ; 458 cÚ¡ * hid_id ; 459 gušt i ; 461 hid_·»Á = `udev_deviû_g‘_·»Á_w™h_subsy¡em_devty³ ( udeviû , 462 "hid", NULL ); 463 ià(! hid_·»Á ) 466 hid_id = `udev_deviû_g‘_´Ý”ty_v®ue ( hid_·»Á , "HID_ID"); 468 ià( `ssÿnf ( hid_id , "%hx:%hx:%hx", bus , & vid , & pid ) != 3) 471  i = 0; i < `G_N_ELEMENTS ( deviûs ); i++) { 472 ià( deviûs [ i ]. vid =ðvid && deviûs[i]. pid ==…id) 473  i ; 477 } } 479  $deviû_added ( udev_deviû * udeviû ) 481  btd_ad­‹r * ad­‹r ; 482 GIOChªÃl * io ; 483 ušt16_t bus ; 484  šdex ; 485  fd ; 487 ad­‹r = `btd_ad­‹r_g‘_deçuÉ (); 488 ià(! ad­‹r ) 491 šdex = `g‘_suµÜ‹d_deviû ( udeviû , & bus ); 492 ià( šdex < 0) 495 `šfo ("sixaxis: compatible device connected: %s (%04X:%04X)", 496 deviûs [ šdex ]. Çme , deviûs[šdex]. vid , 497 deviûs [ šdex ]. pid ); 499 fd = `Ý’ ( `udev_deviû_g‘_devnode ( udeviû ), O_RDWR ); 500 ià( fd < 0) 503 io = `g_io_chªÃl_unix_Ãw ( fd ); 505  bus ) { 506  BUS_USB : 507 ià(! `£tup_deviû ( fd , šdex , ad­‹r )) 511  BUS_BLUETOOTH : 513 `g_io_add_w©ch ( io , G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 514 £tup_Ëds , `g‘_Ëds_d©a ( udeviû )); 518 `DBG ("uknowÀbu ty³ (%u)", bus ); 522 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 523 `g_io_chªÃl_uÄef ( io ); 524 } } 526  gboÞ—n $mÚ™Ü_w©ch ( GIOChªÃl * sourû , GIOCÚd™iÚ cÚd™iÚ , 527 gpoš‹r d©a ) 529  udev_deviû * udeviû ; 531 udeviû = `udev_mÚ™Ü_»ûive_deviû ( mÚ™Ü ); 532 ià(! udeviû ) 533  TRUE ; 535 ià(! `g_¡rcmp0 ( `udev_deviû_g‘_aùiÚ ( udeviû ), "add")) 536 `deviû_added ( udeviû ); 538 `udev_deviû_uÄef ( udeviû ); 540  TRUE ; 541 } } 543  $sixaxis_š™ () 545 GIOChªÃl * chªÃl ; 547 `DBG (""); 549 ùx = `udev_Ãw (); 550 ià(! ùx ) 551  - EIO ; 553 mÚ™Ü = `udev_mÚ™Ü_Ãw_äom_ÃŽšk ( ùx , "udev"); 554 ià(! mÚ™Ü ) { 555 `udev_uÄef ( ùx ); 556 ùx = NULL ; 558  - EIO ; 562 `udev_mÚ™Ü_fž‹r_add_m©ch_subsy¡em_devty³ ( mÚ™Ü , "hidraw", 563 NULL ); 564 `udev_mÚ™Ü_’abË_»ûivšg ( mÚ™Ü ); 566 chªÃl = `g_io_chªÃl_unix_Ãw ( `udev_mÚ™Ü_g‘_fd ( mÚ™Ü )); 567 w©ch_id = `g_io_add_w©ch ( chªÃl , G_IO_IN , mÚ™Ü_w©ch , NULL ); 568 `g_io_chªÃl_uÄef ( chªÃl ); 571 } } 573  $sixaxis_ex™ () 575 `DBG (""); 577 `g_sourû_»move ( w©ch_id ); 578 w©ch_id = 0; 580 `udev_mÚ™Ü_uÄef ( mÚ™Ü ); 581 mÚ™Ü = NULL ; 583 `udev_uÄef ( ùx ); 584 ùx = NULL ; 585 } } 587 BLUETOOTH_PLUGIN_DEFINE ( sixaxis , VERSION , BLUETOOTH_PLUGIN_PRIORITY_LOW , 588 sixaxis_š™ , sixaxis_ex™ ) @plugins/wiimote.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dboÞ.h > 30  ~ 31  ~ 33  ~"¤c/¶ugš.h " 34  ~"¤c/ad­‹r.h " 35  ~"¤c/deviû.h " 36  ~"¤c/log.h " 37  ~"¤c/¡Üage.h " 61  ušt16_t gwii_ids [][2] = { 67 cÚ¡ * gwii_Çmes [] = { 74  ssize_t $wii_pšcb ( btd_ad­‹r * ad­‹r ,  btd_deviû * deviû , 75 * pšbuf , boÞ * di¥Ïy , 76  ©‹m± ) 78 ušt16_t v’dÜ , ´oduù ; 79  addr [18], Çme [25]; 80  i ; 84 ià( ©‹m± > 1) 87 `ba2¡r ( `deviû_g‘_add»ss ( deviû ), addr ); 89 v’dÜ = `btd_deviû_g‘_v’dÜ ( deviû ); 90 ´oduù = `btd_deviû_g‘_´oduù ( deviû ); 92 `deviû_g‘_Çme ( deviû , Çme , (name)); 94  i = 0; i < `G_N_ELEMENTS ( wii_ids ); ++i) { 95 ià( v’dÜ =ð wii_ids [ i ][0] && ´oduù == wii_ids[i][1]) 96  found ; 99  i = 0; i < `G_N_ELEMENTS ( wii_Çmes ); ++i) { 100 ià( `g_¡r_equ® ( Çme , wii_Çmes [ i ])) 101  found ; 106 found : 107 `DBG ("FÜcšg fixed…š oÀd‘eùed wiimÙ%s", addr ); 108 `memýy ( pšbuf , `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 6); 110 } } 112  $wii_´obe ( btd_ad­‹r * ad­‹r ) 114 `btd_ad­‹r_»gi¡”_pš_cb ( ad­‹r , wii_pšcb ); 117 } } 119  $wii_»move ( btd_ad­‹r * ad­‹r ) 121 `btd_ad­‹r_uÄegi¡”_pš_cb ( ad­‹r , wii_pšcb ); 122 } } 124  btd_ad­‹r_driv” gwii_driv” = { 125 . Çme = "wiimote", 126 . g´obe = wii_´obe , 127 . g»move = wii_»move , 130  $wii_š™ () 132  `btd_»gi¡”_ad­‹r_driv” (& wii_driv” ); 133 } } 135  $wii_ex™ () 137 `btd_uÄegi¡”_ad­‹r_driv” (& wii_driv” ); 138 } } 140 BLUETOOTH_PLUGIN_DEFINE ( wiimÙe , VERSION , 141 BLUETOOTH_PLUGIN_PRIORITY_LOW , wii_š™ , wii_ex™ ) @profiles/alert/server.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dboÞ.h > 30  ~<”ºo.h > 31  ~ 32  ~ 33  ~<¡dlib.h > 34  ~ 35  ~ 36  ~ 38  ~"lib/uuid.h " 39  ~"¤c/¶ugš.h " 40  ~"¤c/dbus-commÚ.h " 41  ~"©Œib/©t.h " 42  ~"¤c/ad­‹r.h " 43  ~"¤c/deviû.h " 44  ~"©Œib/©t-d©aba£.h " 45  ~"¤c/log.h " 46  ~"©Œib/g©t-£rviû.h " 47  ~"©Œib/g©Œib.h " 48  ~"¤c/©Œib-£rv”.h " 49  ~"©Œib/g©t.h " 50  ~"¤c/´ofže.h " 51  ~"¤c/”rÜ.h " 52  ~"¤c/‹xtfže.h " 53  ~"¤c/©tio.h " 55  #PHONE_ALERT_STATUS_SVC_UUID 0x180E ) 56  #ALERT_NOTIF_SVC_UUID 0x1811 ) 58  #ALERT_STATUS_CHR_UUID 0x2A3F ) 59  #RINGER_CP_CHR_UUID 0x2A40 ) 60  #RINGER_SETTING_CHR_UUID 0x2A41 ) 62  #ALERT_NOTIF_CP_CHR_UUID 0x2A44 ) 63  #UNREAD_ALERT_CHR_UUID 0x2A45 ) 64  #NEW_ALERT_CHR_UUID 0x2A46 ) 65  #SUPP_NEW_ALERT_CAT_CHR_UUID 0x2A47 ) 66  #SUPP_UNREAD_ALERT_CAT_CHR_UUID 0x2A48 ) 68  #ALERT_OBJECT_PATH "/Üg/bluez" ) 69  #ALERT_INTERFACE "Üg.bluez.A˹1" ) 70  #ALERT_AGENT_INTERFACE "Üg.bluez.A˹Ag’t1" ) 73  #NEW_ALERT_MAX_INFO_SIZE 18 ) 75  #NEW_ALERT_CHR_MAX_VALUE_SIZE ( NEW_ALERT_MAX_INFO_SIZE + 2) ) 78 mENABLE_NEW_INCOMING , 79 mENABLE_UNREAD_CAT , 80 mDISABLE_NEW_INCOMING , 81 mDISABLE_UNREAD_CAT , 82 mNOTIFY_NEW_INCOMING , 83 mNOTIFY_UNREAD_CAT , 87 mRINGER_SILENT_MODE = 1, 88 mRINGER_MUTE_ONCE , 89 mRINGER_CANCEL_SILENT_MODE , 94 mRINGER_SILENT , 95 mRINGER_NORMAL , 98 enÙify_ty³ { 99 mNOTIFY_RINGER_SETTING = 0, 100 mNOTIFY_ALERT_STATUS , 101 mNOTIFY_NEW_ALERT , 102 mNOTIFY_UNREAD_ALERT , 103 mNOTIFY_SIZE , 106  s®”t_d©a { 107 cÚ¡ * mÿ‹gÜy ; 108 * m¤v ; 109 * m·th ; 110 gušt mw©ch” ; 113  s®”t_ad­‹r { 114  btd_ad­‹r * mad­‹r ; 115 ušt16_t msuµ_Ãw_®”t_ÿt_hªdË ; 116 ušt16_t msuµ_uÄ—d_®”t_ÿt_hªdË ; 117 ušt16_t mhnd_ccc [ NOTIFY_SIZE ]; 118 ušt16_t mhnd_v®ue [ NOTIFY_SIZE ]; 121  snÙify_d©a { 122  ®”t_ad­‹r * m®_ad­‹r ; 123 nÙify_ty³ mty³ ; 124 ušt8_t * mv®ue ; 125 size_t mËn ; 128  snÙify_ÿÎback { 129  nÙify_d©a * mnÙify_d©a ; 130  btd_deviû * mdeviû ; 131 gušt mid ; 134  GSLi¡ * g»gi¡”ed_®”ts = NULL ; 135  GSLi¡ * g®”t_ad­‹rs = NULL ; 136  ušt8_t gršg”_£‰šg = RINGER_NORMAL ; 137  ušt8_t g®”t_¡©us = 0; 139 cÚ¡ * cÚ¡ gªp_ÿ‹gÜ›s [] = { 152 cÚ¡ * cÚ¡ g·¥_ÿ‹gÜ›s [] = { 158  $ad­‹r_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 160 cÚ¡  ®”t_ad­‹r * ®_ad­‹r = a ; 161 cÚ¡  btd_ad­‹r * ad­‹r = b ; 163  ®_ad­‹r -> ad­‹r ==‡dapter ? 0 : -1; 164 } } 166  ®”t_ad­‹r * $fšd_®”t_ad­‹r ( btd_ad­‹r * ad­‹r ) 168 GSLi¡ * l = `g_¦i¡_fšd_cu¡om ( ®”t_ad­‹rs , ad­‹r , ad­‹r_cmp ); 170  l ?†-> d©a : NULL ; 171 } } 173  $®”t_d©a_de¡roy ( gpoš‹r u£r_d©a ) 175  ®”t_d©a * ®”t = u£r_d©a ; 177 ià( ®”t -> w©ch” ) 178 `g_dbus_»move_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), ®”t -> w©ch” ); 180 `g_ä“ ( ®”t -> ¤v ); 181 `g_ä“ ( ®”t -> ·th ); 182 `g_ä“ ( ®”t ); 183 } } 185  $®”t_»Ëa£ ( gpoš‹r u£r_d©a ) 187  ®”t_d©a * ®”t = u£r_d©a ; 188 DBusMes§ge * msg ; 190 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ®”t -> ¤v ,‡Ë¹-> ·th , 191 ALERT_AGENT_INTERFACE , 193 ià( msg ) 194 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), msg ); 196 `®”t_d©a_de¡roy ( ®”t ); 197 } } 199  $®”t_de¡roy ( gpoš‹r u£r_d©a ) 201 `DBG (""); 203 `g_¦i¡_ä“_fuÎ ( »gi¡”ed_®”ts , ®”t_»Ëa£ ); 204 »gi¡”ed_®”ts = NULL ; 205 } } 207 cÚ¡ * $v®id_ÿ‹gÜy (cÚ¡ * ÿ‹gÜy ) 209  i ; 211  i = 0; i < `G_N_ELEMENTS ( ªp_ÿ‹gÜ›s ); i++) { 212 ià( `g_¡r_equ® ( ªp_ÿ‹gÜ›s [ i ], ÿ‹gÜy )) 213  ªp_ÿ‹gÜ›s [ i ]; 216  i = 0; i < `G_N_ELEMENTS ( ·¥_ÿ‹gÜ›s ); i++) { 217 ià( `g_¡r_equ® ( ·¥_ÿ‹gÜ›s [ i ], ÿ‹gÜy )) 218  ·¥_ÿ‹gÜ›s [ i ]; 221  NULL ; 222 } } 224  ®”t_d©a * $g‘_®”t_d©a_by_ÿ‹gÜy (cÚ¡ * ÿ‹gÜy ) 226 GSLi¡ * l ; 227  ®”t_d©a * ®”t ; 229  l = »gi¡”ed_®”ts ;†;† = `g_¦i¡_Ãxt (l)) { 230 ®”t = l -> d©a ; 231 ià( `g_¡r_equ® ( ®”t -> ÿ‹gÜy , category)) 232  ®”t ; 235  NULL ; 236 } } 238  gboÞ—n $»gi¡”ed_ÿ‹gÜy (cÚ¡ * ÿ‹gÜy ) 240  ®”t_d©a * ®”t ; 242 ®”t = `g‘_®”t_d©a_by_ÿ‹gÜy ( ÿ‹gÜy ); 243 ià( ®”t ) 244  TRUE ; 246  FALSE ; 247 } } 249  gboÞ—n $·¥_ÿ‹gÜy (cÚ¡ * ÿ‹gÜy ) 251  i ; 253  i = 0; i < `G_N_ELEMENTS ( ·¥_ÿ‹gÜ›s ); i++) 254 ià( `g_¡r_equ® ( ÿ‹gÜy , ·¥_ÿ‹gÜ›s [ i ])) 255  TRUE ; 257  FALSE ; 258 } } 260  gboÞ—n $v®id_desütiÚ (cÚ¡ * ÿ‹gÜy , 261 cÚ¡ * desütiÚ ) 263 ià(! `·¥_ÿ‹gÜy ( ÿ‹gÜy )) { 264 ià( `¡¾’ ( desütiÚ è>ð NEW_ALERT_MAX_INFO_SIZE ) 265  FALSE ; 267  TRUE ; 270 ià( `g_¡r_equ® ( desütiÚ , "active") || 271 `g_¡r_equ® ( desütiÚ , "not‡ctive")) 272  TRUE ; 274 ià( `g_¡r_equ® ( ÿ‹gÜy , "ringer")) 275 ià( `g_¡r_equ® ( desütiÚ , "enabled") || 276 `g_¡r_equ® ( desütiÚ , "disabled")) 277  TRUE ; 279  FALSE ; 280 } } 282  gboÞ—n $v®id_couÁ (cÚ¡ * ÿ‹gÜy , ušt16_t couÁ ) 284 ià(! `·¥_ÿ‹gÜy ( ÿ‹gÜy è&& couÁ > 0 && count <= 255) 285  TRUE ; 287 ià( `·¥_ÿ‹gÜy ( ÿ‹gÜy è&& couÁ == 1) 288  TRUE ; 290  FALSE ; 291 } } 293  $upd©e_suµÜ‹d_ÿ‹gÜ›s ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 295  ®”t_ad­‹r * ®_ad­‹r = d©a ; 296  btd_ad­‹r * ad­‹r = ®_ad­‹r ->adapter; 297 ušt8_t v®ue [2]; 298  i ; 300 `mem£t ( v®ue , 0, (value)); 302  i = 0; i < `G_N_ELEMENTS ( ªp_ÿ‹gÜ›s ); i++) { 303 ià( `»gi¡”ed_ÿ‹gÜy ( ªp_ÿ‹gÜ›s [ i ])) 304 `hci_£t_b™ ( i , v®ue ); 307 `©Œib_db_upd©e ( ad­‹r , ®_ad­‹r -> suµ_Ãw_®”t_ÿt_hªdË , NULL , 308 v®ue , (v®ue), NULL ); 312 `©Œib_db_upd©e ( ad­‹r , ®_ad­‹r -> suµ_uÄ—d_®”t_ÿt_hªdË , 313 NULL , v®ue , (value), NULL); 314 } } 316  $w©ch”_discÚÃù ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 318  ®”t_d©a * ®”t = u£r_d©a ; 320 `DBG ("C©egÜy % wa discÚÃùed", ®”t -> ÿ‹gÜy ); 322 »gi¡”ed_®”ts = `g_¦i¡_»move Ôegi¡”ed_®”ts, ®”t ); 323 `®”t_d©a_de¡roy ( ®”t ); 325 `g_¦i¡_fÜ—ch ( ®”t_ad­‹rs , upd©e_suµÜ‹d_ÿ‹gÜ›s , NULL ); 326 } } 328  gboÞ—n $is_nÙifŸbË_deviû ( btd_deviû * deviû , ušt16_t ccc ) 330 * fž’ame ; 331 GKeyFže * key_fže ; 332  hªdË [6]; 333 * ¡r ; 334 ušt16_t v® ; 335 gboÞ—n »suÉ ; 337 `¥rštf ( hªdË , "%hu", ccc ); 339 fž’ame = `btd_deviû_g‘_¡Üage_·th ( deviû , "ccc"); 340 ià(! fž’ame ) { 341 `w¬n ("Unableo get ccc storage…ath for device"); 342  FALSE ; 345 key_fže = `g_key_fže_Ãw (); 346 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 348 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , hªdË , "V®ue", NULL ); 349 ià(! ¡r ) { 350 »suÉ = FALSE ; 351  ’d ; 354 v® = `¡¹Þ ( ¡r , NULL , 16); 355 ià(!( v® & 0x0001)) { 356 »suÉ = FALSE ; 357  ’d ; 360 »suÉ = TRUE ; 361 ’d : 362 `g_ä“ ( ¡r ); 363 `g_ä“ ( fž’ame ); 364 `g_key_fže_ä“ ( key_fže ); 366  »suÉ ; 367 } } 369  $de¡roy_nÙify_ÿÎback ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 370 gpoš‹r u£r_d©a ) 372  nÙify_ÿÎback * cb = u£r_d©a ; 374 `DBG ("¡©us=%#x", ¡©us ); 376 `btd_deviû_»move_©tio_ÿÎback ( cb -> deviû , cb-> id ); 377 `btd_deviû_uÄef ( cb -> deviû ); 378 `g_ä“ ( cb -> nÙify_d©a -> v®ue ); 379 `g_ä“ ( cb -> nÙify_d©a ); 380 `g_ä“ ( cb ); 381 } } 383  $©tio_cÚÃùed_cb ( GA‰rib * ©Œib , gpoš‹r u£r_d©a ) 385  nÙify_ÿÎback * cb = u£r_d©a ; 386  nÙify_d©a * nd = cb ->notify_data; 387 nÙify_ty³ ty³ = nd ->type; 388  ®”t_ad­‹r * ®_ad­‹r = nd ->al_adapter; 389 size_t Ën ; 390 ušt8_t * pdu = `g_©Œib_g‘_bufãr ( ©Œib , & Ën ); 393  ty³ ) { 394  NOTIFY_RINGER_SETTING : 395 Ën = `’c_nÙifiÿtiÚ ( ®_ad­‹r -> hnd_v®ue [ ty³ ], 396 & ršg”_£‰šg , (ringer_setting), 397 pdu , Ën ); 399  NOTIFY_ALERT_STATUS : 400 Ën = `’c_nÙifiÿtiÚ ( ®_ad­‹r -> hnd_v®ue [ ty³ ], 401 & ®”t_¡©us , (alert_status), 402 pdu , Ën ); 404  NOTIFY_NEW_ALERT : 405  NOTIFY_UNREAD_ALERT : 406 Ën = `’c_nÙifiÿtiÚ ( ®_ad­‹r -> hnd_v®ue [ ty³ ], 407 nd -> v®ue ,‚d-> Ën , pdu ,†en); 409  NOTIFY_SIZE : 411 `DBG ("Unknownype, could‚ot send‚otification"); 412  ’d ; 415 `DBG ("Send‚otification for handle: 0x%04x, ccc: 0x%04x", 416 ®_ad­‹r -> hnd_v®ue [ ty³ ], 417 ®_ad­‹r -> hnd_ccc [ ty³ ]); 419 `g_©Œib_£nd ( ©Œib , 0, pdu , Ën , de¡roy_nÙify_ÿÎback , cb , NULL ); 423 ’d : 424 `btd_deviû_»move_©tio_ÿÎback ( cb -> deviû , cb-> id ); 425 `btd_deviû_uÄef ( cb -> deviû ); 426 `g_ä“ ( cb -> nÙify_d©a -> v®ue ); 427 `g_ä“ ( cb -> nÙify_d©a ); 428 `g_ä“ ( cb ); 429 } } 431  $fž‹r_deviûs_nÙify ( btd_deviû * deviû , * u£r_d©a ) 433  nÙify_d©a *nÙify_d©¨ð u£r_d©a ; 434  ®”t_ad­‹r * ®_ad­‹r = nÙify_d©a ->al_adapter; 435 nÙify_ty³ ty³ = nÙify_d©a ->type; 436  nÙify_ÿÎback * cb ; 438 ià(! `is_nÙifŸbË_deviû ( deviû , ®_ad­‹r -> hnd_ccc [ ty³ ])) 441 cb = `g_Ãw0 ( nÙify_ÿÎback , 1); 442 cb -> nÙify_d©a =‚otify_data; 443 cb -> deviû = `btd_deviû_»f (device); 444 cb -> id = `btd_deviû_add_©tio_ÿÎback ( deviû , 445 ©tio_cÚÃùed_cb , NULL , cb ); 446 } } 448  $nÙify_deviûs ( ®”t_ad­‹r * ®_ad­‹r , 449 nÙify_ty³ ty³ , ušt8_t * v®ue , size_t Ën ) 451  nÙify_d©a *notify_data; 453 nÙify_d©a = `g_Ãw0 (notify_data, 1); 454 nÙify_d©a -> ®_ad­‹r =‡l_adapter; 455 nÙify_d©a -> ty³ =ype; 456 nÙify_d©a -> v®ue = `g_memdup (v®ue, Ën ); 457 nÙify_d©a -> Ën =†en; 459 `btd_ad­‹r_fÜ_—ch_deviû ( ®_ad­‹r -> ad­‹r , fž‹r_deviûs_nÙify , 460 nÙify_d©a ); 461 } } 463  $·¥_nÙifiÿtiÚ ( nÙify_ty³ ty³ ) 465 GSLi¡ * ™ ; 466  ®”t_ad­‹r * ®_ad­‹r ; 468  ™ = ®”t_ad­‹rs ; it; iˆð `g_¦i¡_Ãxt (it)) { 469 ®_ad­‹r = ™ -> d©a ; 471 `nÙify_deviûs ( ®_ad­‹r , ty³ , NULL , 0); 473 } } 475  DBusMes§ge * $»gi¡”_®”t ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 476 * d©a ) 478 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 479 * ·th ; 480 cÚ¡ * ÿ‹gÜy ; 481 cÚ¡ * c ; 482  ®”t_d©a * ®”t ; 484 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & c , 485 DBUS_TYPE_OBJECT_PATH , & ·th , DBUS_TYPE_INVALID )) 486  `btd_”rÜ_šv®id_¬gs ( msg ); 488 ÿ‹gÜy = `v®id_ÿ‹gÜy ( c ); 489 ià(! ÿ‹gÜy ) { 490 `DBG ("Inv®id c©egÜy: %s", c ); 491  `btd_”rÜ_šv®id_¬gs ( msg ); 494 ià( `»gi¡”ed_ÿ‹gÜy ( ÿ‹gÜy )) { 495 `DBG ("C©egÜy % ®»ady„egi¡”ed", ÿ‹gÜy ); 496  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 499 ®”t = `g_Ãw0 ( ®”t_d©a , 1); 500 ®”t -> ¤v = `g_¡rdup ( £nd” ); 501 ®”t -> ·th = `g_¡rdup (path); 502 ®”t -> ÿ‹gÜy = category; 503 ®”t -> w©ch” = `g_dbus_add_discÚÃù_w©ch ( cÚn ,‡Ë¹-> ¤v , 504 w©ch”_discÚÃù , ®”t , NULL ); 506 ià( ®”t -> w©ch” == 0) { 507 `®”t_d©a_de¡roy ( ®”t ); 508 `DBG ("Could‚ot„egister disconnect watcher"); 509  `btd_”rÜ_çžed ( msg , 513 »gi¡”ed_®”ts = `g_¦i¡_­³nd Ôegi¡”ed_®”ts, ®”t ); 515 `g_¦i¡_fÜ—ch ( ®”t_ad­‹rs , upd©e_suµÜ‹d_ÿ‹gÜ›s , NULL ); 517 `DBG ("Regi¡”A˹(\"%s\", \"%s\")", ®”t -> ÿ‹gÜy ,‡Ë¹-> ·th ); 519  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 520 } } 522  $upd©e_Ãw_®”t ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 524  ®”t_ad­‹r * ®_ad­‹r = d©a ; 525  btd_ad­‹r * ad­‹r = ®_ad­‹r ->adapter; 526 ušt8_t * v®ue = u£r_d©a ; 528 `©Œib_db_upd©e ( ad­‹r , ®_ad­‹r -> hnd_v®ue [ NOTIFY_NEW_ALERT ], NULL , 529 & v®ue [1], v®ue[0], NULL ); 531 `nÙify_deviûs ( ®_ad­‹r , NOTIFY_NEW_ALERT , & v®ue [1], value[0]); 532 } } 534  $upd©e_phÚe_®”ts (cÚ¡ * ÿ‹gÜy , cÚ¡ * desütiÚ ) 536  i ; 538 ià( `g_¡r_equ® ( ÿ‹gÜy , "ringer")) { 539 ià( `g_¡r_equ® ( desütiÚ , "enabled")) { 540 ršg”_£‰šg = RINGER_NORMAL ; 541 `·¥_nÙifiÿtiÚ ( NOTIFY_RINGER_SETTING ); 543 } ià( `g_¡r_equ® ( desütiÚ , "disabled")) { 544 ršg”_£‰šg = RINGER_SILENT ; 545 `·¥_nÙifiÿtiÚ ( NOTIFY_RINGER_SETTING ); 550  i = 0; i < `G_N_ELEMENTS ( ·¥_ÿ‹gÜ›s ); i++) { 551 ià( `g_¡r_equ® ( ·¥_ÿ‹gÜ›s [ i ], ÿ‹gÜy )) { 552 ià( `g_¡r_equ® ( desütiÚ , "active")) { 553 ®”t_¡©us |ð(1 << i ); 554 `·¥_nÙifiÿtiÚ ( NOTIFY_ALERT_STATUS ); 555 } ià( `g_¡r_equ® ( desütiÚ , "not‡ctive")) { 556 ®”t_¡©us &ð~(1 << i ); 557 `·¥_nÙifiÿtiÚ ( NOTIFY_ALERT_STATUS ); 562 } } 564  DBusMes§ge * $Ãw_®”t ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 565 * d©a ) 567 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 568 cÚ¡ * ÿ‹gÜy , * desütiÚ ; 569  ®”t_d©a * ®”t ; 570 ušt16_t couÁ ; 571  i ; 572 size_t dËn ; 574 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & ÿ‹gÜy , 575 DBUS_TYPE_UINT16 , & couÁ , DBUS_TYPE_STRING , 576 & desütiÚ , DBUS_TYPE_INVALID )) 577  `btd_”rÜ_šv®id_¬gs ( msg ); 579 ®”t = `g‘_®”t_d©a_by_ÿ‹gÜy ( ÿ‹gÜy ); 580 ià(! ®”t ) { 581 `DBG ("C©egÜy % nÙ„egi¡”ed", ÿ‹gÜy ); 582  `btd_”rÜ_šv®id_¬gs ( msg ); 585 ià(! `g_¡r_equ® ( ®”t -> ¤v , £nd” )) { 586 `DBG ("S’d” % i nÙ„egi¡”ed iÀÿ‹gÜy %s", £nd” , 587 ÿ‹gÜy ); 588  `btd_”rÜ_šv®id_¬gs ( msg ); 591 ià(! `v®id_desütiÚ ( ÿ‹gÜy , desütiÚ )) { 592 `DBG ("Description %s is invalid for %s category", 593 desütiÚ , ÿ‹gÜy ); 594  `btd_”rÜ_šv®id_¬gs ( msg ); 597 ià(! `v®id_couÁ ( ÿ‹gÜy , couÁ )) { 598 `DBG ("CouÁ %d i šv®id fÜ % ÿ‹gÜy", couÁ , ÿ‹gÜy ); 599  `btd_”rÜ_šv®id_¬gs ( msg ); 602 dËn = `¡¾’ ( desütiÚ ); 604  i = 0; i < `G_N_ELEMENTS ( ªp_ÿ‹gÜ›s ); i++) { 605 ušt8_t v®ue [ NEW_ALERT_CHR_MAX_VALUE_SIZE + 1]; 606 ušt8_t * ±r = v®ue ; 608 ià(! `g_¡r_equ® ( ªp_ÿ‹gÜ›s [ i ], ÿ‹gÜy )) 611 `mem£t ( v®ue , 0, (value)); 613 * ±r ++ = 2; 614 * ±r ++ = i ; 615 * ±r ++ = couÁ ; 617 `¡ºýy ((*è ±r , desütiÚ , 618 NEW_ALERT_MAX_INFO_SIZE - 1); 620 ià( dËn > 0) 621 * v®ue +ð dËn + 1; 623 `g_¦i¡_fÜ—ch ( ®”t_ad­‹rs , upd©e_Ãw_®”t , v®ue ); 626 ià( `·¥_ÿ‹gÜy ( ÿ‹gÜy )) 627 `upd©e_phÚe_®”ts ( ÿ‹gÜy , desütiÚ ); 629 `DBG ("NewA˹(\"%s\", %d, \"%s\")", ÿ‹gÜy , couÁ , desütiÚ ); 631  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 632 } } 634  $ag’t_ršg”_mu‹_Úû () 636  ®”t_d©a * ®”t ; 637 DBusMes§ge * msg ; 639 ®”t = `g‘_®”t_d©a_by_ÿ‹gÜy ("ringer"); 640 ià(! ®”t ) { 641 `DBG ("Category„inger is‚ot„egistered"); 642  - EINVAL ; 645 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ®”t -> ¤v ,‡Ë¹-> ·th , 646 ALERT_AGENT_INTERFACE , "MuteOnce"); 647 ià(! msg ) 648  - ENOMEM ; 650 `dbus_mes§ge_£t_no_»¶y ( msg , TRUE ); 651 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), msg ); 654 } } 656  $ag’t_ršg”_£t_ršg” (cÚ¡ * mode ) 658  ®”t_d©a * ®”t ; 659 DBusMes§ge * msg ; 661 ®”t = `g‘_®”t_d©a_by_ÿ‹gÜy ("ringer"); 662 ià(! ®”t ) { 663 `DBG ("Category„inger is‚ot„egistered"); 664  - EINVAL ; 667 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ®”t -> ¤v ,‡Ë¹-> ·th , 668 ALERT_AGENT_INTERFACE , "SetRinger"); 669 ià(! msg ) 670  - ENOMEM ; 672 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_STRING , & mode , 673 DBUS_TYPE_INVALID ); 675 `dbus_mes§ge_£t_no_»¶y ( msg , TRUE ); 676 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), msg ); 679 } } 681  $upd©e_uÄ—d_®”t ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 683  ®”t_ad­‹r * ®_ad­‹r = d©a ; 684  btd_ad­‹r * ad­‹r = ®_ad­‹r ->adapter; 685 ušt8_t * v®ue = u£r_d©a ; 687 `©Œib_db_upd©e ( ad­‹r , 688 ®_ad­‹r -> hnd_v®ue [ NOTIFY_UNREAD_ALERT ], NULL , v®ue , 689 2, NULL ); 691 `nÙify_deviûs ( ®_ad­‹r , NOTIFY_UNREAD_ALERT , v®ue , 2); 692 } } 694  DBusMes§ge * $uÄ—d_®”t ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 695 * d©a ) 697 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 698  ®”t_d©a * ®”t ; 699 cÚ¡ * ÿ‹gÜy ; 700  i ; 701 ušt16_t couÁ ; 703 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & ÿ‹gÜy , 704 DBUS_TYPE_UINT16 , & couÁ , 705 DBUS_TYPE_INVALID )) 706  `btd_”rÜ_šv®id_¬gs ( msg ); 708 ®”t = `g‘_®”t_d©a_by_ÿ‹gÜy ( ÿ‹gÜy ); 709 ià(! ®”t ) { 710 `DBG ("C©egÜy % nÙ„egi¡”ed", ÿ‹gÜy ); 711  `btd_”rÜ_šv®id_¬gs ( msg ); 714 ià(! `v®id_couÁ ( ÿ‹gÜy , couÁ )) { 715 `DBG ("CouÁ %d i šv®id fÜ % ÿ‹gÜy", couÁ , ÿ‹gÜy ); 716  `btd_”rÜ_šv®id_¬gs ( msg ); 719 ià(! `g_¡r_equ® ( ®”t -> ¤v , £nd” )) { 720 `DBG ("S’d” % i nÙ„egi¡”ed iÀÿ‹gÜy %s", £nd” , 721 ÿ‹gÜy ); 722  `btd_”rÜ_šv®id_¬gs ( msg ); 725  i = 0; i < `G_N_ELEMENTS ( ªp_ÿ‹gÜ›s ); i++) { 726 ià( `g_¡r_equ® ( ªp_ÿ‹gÜ›s [ i ], ÿ‹gÜy )) { 727 ušt8_t v®ue [2]; 729 v®ue [0] = i ; 730 v®ue [1] = couÁ ; 732 `g_¦i¡_fÜ—ch ( ®”t_ad­‹rs , upd©e_uÄ—d_®”t , 733 v®ue ); 737 `DBG ("ÿ‹gÜy %s, couÁ %d", ÿ‹gÜy , couÁ ); 739  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 740 } } 742  ušt8_t $ršg”_ý_wr™e ( ©Œibu‹ * a , 743  btd_deviû * deviû , 744 gpoš‹r u£r_d©a ) 746 `DBG ("¨ð%p", a ); 748 ià( a -> Ën > 1) { 749 `DBG ("Inv®id commªd siz(%zu)", a -> Ën ); 753  a -> d©a [0]) { 754  RINGER_SILENT_MODE : 755 `DBG ("Silent Mode"); 756 `ag’t_ršg”_£t_ršg” ("disabled"); 758  RINGER_MUTE_ONCE : 759 `DBG ("Mute Once"); 760 `ag’t_ršg”_mu‹_Úû (); 762  RINGER_CANCEL_SILENT_MODE : 763 `DBG ("Cancel Silent Mode"); 764 `ag’t_ršg”_£t_ršg” ("enabled"); 767 `DBG ("Inv®id commªd (0x%02x)", a -> d©a [0]); 771 } } 773  ušt8_t $®”t_¡©us_»ad ( ©Œibu‹ * a , 774  btd_deviû * deviû , 775 gpoš‹r u£r_d©a ) 777  btd_ad­‹r * ad­‹r = u£r_d©a ; 779 `DBG ("¨ð%p", a ); 781 ià( a -> d©a =ð NULL ||‡->d©a[0] !ð ®”t_¡©us ) 782 `©Œib_db_upd©e ( ad­‹r , a -> hªdË , NULL , & ®”t_¡©us , 783 ( ®”t_¡©us ), NULL ); 786 } } 788  ušt8_t $ršg”_£‰šg_»ad ( ©Œibu‹ * a , 789  btd_deviû * deviû , 790 gpoš‹r u£r_d©a ) 792  btd_ad­‹r * ad­‹r = u£r_d©a ; 794 `DBG ("¨ð%p", a ); 796 ià( a -> d©a =ð NULL ||‡->d©a[0] !ð ršg”_£‰šg ) 797 `©Œib_db_upd©e ( ad­‹r , a -> hªdË , NULL , & ršg”_£‰šg , 798 ( ršg”_£‰šg ), NULL ); 801 } } 803  $»gi¡”_phÚe_®”t_£rviû ( ®”t_ad­‹r * ®_ad­‹r ) 805 bt_uuid_t uuid ; 807 `bt_uuid16_ü—‹ (& uuid , PHONE_ALERT_STATUS_SVC_UUID ); 810 `g©t_£rviû_add ( ®_ad­‹r -> ad­‹r , GATT_PRIM_SVC_UUID , & uuid , 812 GATT_OPT_CHR_UUID16 , ALERT_STATUS_CHR_UUID , 813 GATT_OPT_CHR_PROPS , GATT_CHR_PROP_READ | 814 GATT_CHR_PROP_NOTIFY , 815 GATT_OPT_CHR_VALUE_CB , ATTRIB_READ , 816 ®”t_¡©us_»ad , ®_ad­‹r -> ad­‹r , 817 GATT_OPT_CCC_GET_HANDLE , 818 & ®_ad­‹r -> hnd_ccc [ NOTIFY_ALERT_STATUS ], 819 GATT_OPT_CHR_VALUE_GET_HANDLE , 820 & ®_ad­‹r -> hnd_v®ue [ NOTIFY_ALERT_STATUS ], 822 GATT_OPT_CHR_UUID16 , RINGER_CP_CHR_UUID , 823 GATT_OPT_CHR_PROPS , GATT_CHR_PROP_WRITE_WITHOUT_RESP , 824 GATT_OPT_CHR_VALUE_CB , ATTRIB_WRITE , 825 ršg”_ý_wr™e , NULL , 827 GATT_OPT_CHR_UUID16 , RINGER_SETTING_CHR_UUID , 828 GATT_OPT_CHR_PROPS , GATT_CHR_PROP_READ | 829 GATT_CHR_PROP_NOTIFY , 830 GATT_OPT_CHR_VALUE_CB , ATTRIB_READ , 831 ršg”_£‰šg_»ad , ®_ad­‹r -> ad­‹r , 832 GATT_OPT_CCC_GET_HANDLE , 833 & ®_ad­‹r -> hnd_ccc [ NOTIFY_RINGER_SETTING ], 834 GATT_OPT_CHR_VALUE_GET_HANDLE , 835 & ®_ad­‹r -> hnd_v®ue [ NOTIFY_RINGER_SETTING ], 836 GATT_OPT_INVALID ); 837 } } 839  ušt8_t $suµ_Ãw_®”t_ÿt_»ad ( ©Œibu‹ * a , 840  btd_deviû * deviû , 841 gpoš‹r u£r_d©a ) 843  btd_ad­‹r * ad­‹r = u£r_d©a ; 844 ušt8_t v®ue [] = { 0x00, 0x00 }; 846 `DBG ("¨ð%p", a ); 848 ià( a -> d©a =ð NULL ) 849 `©Œib_db_upd©e ( ad­‹r , a -> hªdË , NULL , v®ue , (value), 850 NULL ); 853 } } 855  ušt8_t $suµ_uÄ—d_®”t_ÿt_»ad ( ©Œibu‹ * a , 856  btd_deviû * deviû , 857 gpoš‹r u£r_d©a ) 859  btd_ad­‹r * ad­‹r = u£r_d©a ; 860 ušt8_t v®ue [] = { 0x00, 0x00 }; 862 `DBG ("¨ð%p", a ); 864 ià( a -> d©a =ð NULL ) 865 `©Œib_db_upd©e ( ad­‹r , a -> hªdË , NULL , v®ue , (value), 866 NULL ); 869 } } 871  ušt8_t $®”t_nÙif_ý_wr™e ( ©Œibu‹ * a , 872  btd_deviû * deviû , 873 gpoš‹r u£r_d©a ) 875 `DBG ("¨ð%p", a ); 877 ià( a -> Ën < 2) 880  a -> d©a [0]) { 881  ENABLE_NEW_INCOMING : 882 `DBG ("ENABLE_NEW_INCOMING: 0x%02x", a -> d©a [1]); 884  ENABLE_UNREAD_CAT : 885 `DBG ("ENABLE_UNREAD_CAT: 0x%02x", a -> d©a [1]); 887  DISABLE_NEW_INCOMING : 888 `DBG ("DISABLE_NEW_INCOMING: 0x%02x", a -> d©a [1]); 890  DISABLE_UNREAD_CAT : 891 `DBG ("DISABLE_UNREAD_CAT: 0x%02x", a -> d©a [1]); 893  NOTIFY_NEW_INCOMING : 894 `DBG ("NOTIFY_NEW_INCOMING: 0x%02x", a -> d©a [1]); 896  NOTIFY_UNREAD_CAT : 897 `DBG ("NOTIFY_UNREAD_CAT: 0x%02x", a -> d©a [1]); 900 `DBG ("0x%02x 0x%02x", a -> d©a [0],‡->data[1]); 904 } } 906  $»gi¡”_®”t_nÙif_£rviû ( ®”t_ad­‹r * ®_ad­‹r ) 908 bt_uuid_t uuid ; 910 `bt_uuid16_ü—‹ (& uuid , ALERT_NOTIF_SVC_UUID ); 913 `g©t_£rviû_add ( ®_ad­‹r -> ad­‹r , GATT_PRIM_SVC_UUID , & uuid , 915 GATT_OPT_CHR_UUID16 , SUPP_NEW_ALERT_CAT_CHR_UUID , 916 GATT_OPT_CHR_PROPS , GATT_CHR_PROP_READ , 917 GATT_OPT_CHR_VALUE_CB , ATTRIB_READ , 918 suµ_Ãw_®”t_ÿt_»ad , ®_ad­‹r -> ad­‹r , 919 GATT_OPT_CHR_VALUE_GET_HANDLE , 920 & ®_ad­‹r -> suµ_Ãw_®”t_ÿt_hªdË , 922 GATT_OPT_CHR_UUID16 , NEW_ALERT_CHR_UUID , 923 GATT_OPT_CHR_PROPS , GATT_CHR_PROP_NOTIFY , 924 GATT_OPT_CCC_GET_HANDLE , 925 & ®_ad­‹r -> hnd_ccc [ NOTIFY_NEW_ALERT ], 926 GATT_OPT_CHR_VALUE_GET_HANDLE , 927 & ®_ad­‹r -> hnd_v®ue [ NOTIFY_NEW_ALERT ], 929 GATT_OPT_CHR_UUID16 , SUPP_UNREAD_ALERT_CAT_CHR_UUID , 930 GATT_OPT_CHR_PROPS , GATT_CHR_PROP_READ , 931 GATT_OPT_CHR_VALUE_CB , ATTRIB_READ , 932 suµ_uÄ—d_®”t_ÿt_»ad , ®_ad­‹r -> ad­‹r , 933 GATT_OPT_CHR_VALUE_GET_HANDLE , 934 & ®_ad­‹r -> suµ_uÄ—d_®”t_ÿt_hªdË , 936 GATT_OPT_CHR_UUID16 , UNREAD_ALERT_CHR_UUID , 937 GATT_OPT_CHR_PROPS , GATT_CHR_PROP_NOTIFY , 938 GATT_OPT_CCC_GET_HANDLE , 939 & ®_ad­‹r -> hnd_ccc [ NOTIFY_UNREAD_ALERT ], 940 GATT_OPT_CHR_VALUE_GET_HANDLE , 941 & ®_ad­‹r -> hnd_v®ue [ NOTIFY_UNREAD_ALERT ], 943 GATT_OPT_CHR_UUID16 , ALERT_NOTIF_CP_CHR_UUID , 944 GATT_OPT_CHR_PROPS , GATT_CHR_PROP_WRITE , 945 GATT_OPT_CHR_VALUE_CB , ATTRIB_WRITE , 946 ®”t_nÙif_ý_wr™e , NULL , 947 GATT_OPT_INVALID ); 948 } } 950  $®”t_£rv”_´obe ( btd_´ofže * p , 951  btd_ad­‹r * ad­‹r ) 953  ®”t_ad­‹r * ®_ad­‹r ; 955 ®_ad­‹r = `g_Ãw0 ( ®”t_ad­‹r , 1); 956 ®_ad­‹r -> ad­‹r = `btd_ad­‹r_»f (adapter); 958 ®”t_ad­‹rs = `g_¦i¡_­³nd ×˹_ad­‹rs, ®_ad­‹r ); 960 `»gi¡”_phÚe_®”t_£rviû ( ®_ad­‹r ); 961 `»gi¡”_®”t_nÙif_£rviû ( ®_ad­‹r ); 964 } } 966  $®”t_£rv”_»move ( btd_´ofže * p , 967  btd_ad­‹r * ad­‹r ) 969  ®”t_ad­‹r * ®_ad­‹r ; 971 ®_ad­‹r = `fšd_®”t_ad­‹r ( ad­‹r ); 972 ià(! ®_ad­‹r ) 975 ®”t_ad­‹rs = `g_¦i¡_»move ×˹_ad­‹rs, ®_ad­‹r ); 976 `btd_ad­‹r_uÄef ( ®_ad­‹r -> ad­‹r ); 978 `g_ä“ ( ®_ad­‹r ); 979 } } 981  btd_´ofže g®”t_´ofže = { 982 . Çme = "gatt-alert-server", 983 . gad­‹r_´obe = ®”t_£rv”_´obe , 984 . gad­‹r_»move = ®”t_£rv”_»move , 987 cÚ¡ GDBusM‘hodTabË g®”t_m‘hods [] = { 988 { GDBUS_METHOD ("RegisterAlert", 989 GDBUS_ARGS ({ "category", "s" }, 990 { "ag’t", "o" }), NULL , 991 »gi¡”_®”t ) }, 992 { GDBUS_METHOD ("NewAlert", 993 GDBUS_ARGS ({ "category", "s" }, 995 { "desütiÚ", "s" }), NULL , 996 Ãw_®”t ) }, 997 { GDBUS_METHOD ("UnreadAlert", 998 GDBUS_ARGS ({ "ÿ‹gÜy", "s" }, { "couÁ", "q" }), NULL , 999 uÄ—d_®”t ) }, 1003  $®”t_£rv”_š™ () 1005 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1006 ALERT_OBJECT_PATH , ALERT_INTERFACE , 1007 ®”t_m‘hods , NULL , NULL, NULL, 1008 ®”t_de¡roy )) { 1009 `”rÜ ("D-Bus failedo„egister %s interface", 1010 ALERT_INTERFACE ); 1011  - EIO ; 1014  `btd_´ofže_»gi¡” (& ®”t_´ofže ); 1015 } } 1017  $®”t_£rv”_ex™ () 1019 `btd_´ofže_uÄegi¡” (& ®”t_´ofže ); 1021 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1022 ALERT_OBJECT_PATH , ALERT_INTERFACE ); 1023 } } 1025  $®”t_š™ () 1027  `®”t_£rv”_š™ (); 1028 } } 1030  $®”t_ex™ () 1032 `®”t_£rv”_ex™ (); 1033 } } 1035 BLUETOOTH_PLUGIN_DEFINE ( ®”t , VERSION , 1036 BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 1037 ®”t_š™ , ®”t_ex™ ) @profiles/audio/a2dp-codecs.h 25  #A2DP_CODEC_SBC 0x00 ) 26  #A2DP_CODEC_MPEG12 0x01 ) 27  #A2DP_CODEC_MPEG24 0x02 ) 28  #A2DP_CODEC_ATRAC 0x03 ) 29  #A2DP_CODEC_VENDOR 0xFF ) 31  #SBC_SAMPLING_FREQ_16000 (1 << 3) ) 32  #SBC_SAMPLING_FREQ_32000 (1 << 2) ) 33  #SBC_SAMPLING_FREQ_44100 (1 << 1) ) 34  #SBC_SAMPLING_FREQ_48000 1 ) 36  #SBC_CHANNEL_MODE_MONO (1 << 3) ) 37  #SBC_CHANNEL_MODE_DUAL_CHANNEL (1 << 2) ) 38  #SBC_CHANNEL_MODE_STEREO (1 << 1) ) 39  #SBC_CHANNEL_MODE_JOINT_STEREO 1 ) 41  #SBC_BLOCK_LENGTH_4 (1 << 3) ) 42  #SBC_BLOCK_LENGTH_8 (1 << 2) ) 43  #SBC_BLOCK_LENGTH_12 (1 << 1) ) 44  #SBC_BLOCK_LENGTH_16 1 ) 46  #SBC_SUBBANDS_4 (1 << 1) ) 47  #SBC_SUBBANDS_8 1 ) 49  #SBC_ALLOCATION_SNR (1 << 1) ) 50  #SBC_ALLOCATION_LOUDNESS 1 ) 52  #MAX_BITPOOL 64 ) 53  #MIN_BITPOOL 2 ) 55  #MPEG_CHANNEL_MODE_MONO (1 << 3) ) 56  #MPEG_CHANNEL_MODE_DUAL_CHANNEL (1 << 2) ) 57  #MPEG_CHANNEL_MODE_STEREO (1 << 1) ) 58  #MPEG_CHANNEL_MODE_JOINT_STEREO 1 ) 60  #MPEG_LAYER_MP1 (1 << 2) ) 61  #MPEG_LAYER_MP2 (1 << 1) ) 62  #MPEG_LAYER_MP3 1 ) 64  #MPEG_SAMPLING_FREQ_16000 (1 << 5) ) 65  #MPEG_SAMPLING_FREQ_22050 (1 << 4) ) 66  #MPEG_SAMPLING_FREQ_24000 (1 << 3) ) 67  #MPEG_SAMPLING_FREQ_32000 (1 << 2) ) 68  #MPEG_SAMPLING_FREQ_44100 (1 << 1) ) 69  #MPEG_SAMPLING_FREQ_48000 1 ) 71  #MPEG_BIT_RATE_VBR 0x8000 ) 72  #MPEG_BIT_RATE_320000 0x4000 ) 73  #MPEG_BIT_RATE_256000 0x2000 ) 74  #MPEG_BIT_RATE_224000 0x1000 ) 75  #MPEG_BIT_RATE_192000 0x0800 ) 76  #MPEG_BIT_RATE_160000 0x0400 ) 77  #MPEG_BIT_RATE_128000 0x0200 ) 78  #MPEG_BIT_RATE_112000 0x0100 ) 79  #MPEG_BIT_RATE_96000 0x0080 ) 80  #MPEG_BIT_RATE_80000 0x0040 ) 81  #MPEG_BIT_RATE_64000 0x0020 ) 82  #MPEG_BIT_RATE_56000 0x0010 ) 83  #MPEG_BIT_RATE_48000 0x0008 ) 84  #MPEG_BIT_RATE_40000 0x0004 ) 85  #MPEG_BIT_RATE_32000 0x0002 ) 86  #MPEG_BIT_RATE_FREE 0x0001 ) 88  #AAC_OBJECT_TYPE_MPEG2_AAC_LC 0x80 ) 89  #AAC_OBJECT_TYPE_MPEG4_AAC_LC 0x40 ) 90  #AAC_OBJECT_TYPE_MPEG4_AAC_LTP 0x20 ) 91  #AAC_OBJECT_TYPE_MPEG4_AAC_SCA 0x10 ) 93  #AAC_SAMPLING_FREQ_8000 0x0800 ) 94  #AAC_SAMPLING_FREQ_11025 0x0400 ) 95  #AAC_SAMPLING_FREQ_12000 0x0200 ) 96  #AAC_SAMPLING_FREQ_16000 0x0100 ) 97  #AAC_SAMPLING_FREQ_22050 0x0080 ) 98  #AAC_SAMPLING_FREQ_24000 0x0040 ) 99  #AAC_SAMPLING_FREQ_32000 0x0020 ) 100  #AAC_SAMPLING_FREQ_44100 0x0010 ) 101  #AAC_SAMPLING_FREQ_48000 0x0008 ) 102  #AAC_SAMPLING_FREQ_64000 0x0004 ) 103  #AAC_SAMPLING_FREQ_88200 0x0002 ) 104  #AAC_SAMPLING_FREQ_96000 0x0001 ) 106  #AAC_CHANNELS_1 0x02 ) 107  #AAC_CHANNELS_2 0x01 ) 109  #AAC_GET_BITRATE ( a è(×). b™¿‹1 << 16 | \ 110 ( a ). b™¿‹2 << 8 | (a). b™¿‹3 ) ) 111  #AAC_GET_FREQUENCY ( a è(×). äequ’cy1 << 4 | (a). äequ’cy2 ) ) 113  #AAC_SET_BITRATE ( a , b ) \ 115 ( a ). b™¿‹1 = ( b >> 16) & 0x7f; \ 116 ( a ). b™¿‹2 = ( b >> 8) & 0xff; \ 117 ( a ). b™¿‹3 = b & 0xff; \ 118 } 0) ) 119  #AAC_SET_FREQUENCY ( a , f ) \ 121 ( a ). äequ’cy1 = ( f >> 4) & 0xff; \ 122 ( a ). äequ’cy2 = f & 0x0f; \ 123 } 0) ) 125  #AAC_INIT_BITRATE ( b ) \ 126 . b™¿‹1 = ( b >> 16) & 0x7f, \ 127 . b™¿‹2 = ( b >> 8) & 0xff, \ 128 . b™¿‹3 = b & 0xff, ) 129  #AAC_INIT_FREQUENCY ( f ) \ 130 . äequ’cy1 = ( f >> 4) & 0xff, \ 131 . äequ’cy2 = f & 0x0f, ) 133  #APTX_VENDOR_ID 0x0000004f ) 134  #APTX_CODEC_ID 0x0001 ) 136  #APTX_CHANNEL_MODE_MONO 0x01 ) 137  #APTX_CHANNEL_MODE_STEREO 0x02 ) 139  #APTX_SAMPLING_FREQ_16000 0x08 ) 140  #APTX_SAMPLING_FREQ_32000 0x04 ) 141  #APTX_SAMPLING_FREQ_44100 0x02 ) 142  #APTX_SAMPLING_FREQ_48000 0x01 ) 145 ušt32_t mv’dÜ_id ; 146 ušt16_t mcodec_id ; 147 } t__©Œibu‹__ (( t·cked )è ta2dp_v’dÜ_codec_t ; 149 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 152 ušt8_t mchªÃl_mode :4; 153 ušt8_t mäequ’cy :4; 154 ušt8_t m®loÿtiÚ_m‘hod :2; 155 ušt8_t msubbªds :2; 156 ušt8_t mblock_Ëngth :4; 157 ušt8_t mmš_b™poÞ ; 158 ušt8_t mmax_b™poÞ ; 159 } t__©Œibu‹__ (( t·cked )è ta2dp_sbc_t ; 162 ušt8_t mchªÃl_mode :4; 163 ušt8_t müc :1; 164 ušt8_t mÏy” :3; 165 ušt8_t mäequ’cy :6; 166 ušt8_t mmpf :1; 167 ušt8_t mrç :1; 168 ušt16_t mb™¿‹ ; 169 } t__©Œibu‹__ (( t·cked )è ta2dp_m³g_t ; 172 ušt8_t mobjeù_ty³ ; 173 ušt8_t mäequ’cy1 ; 174 ušt8_t mrç :2; 175 ušt8_t mchªÃls :2; 176 ušt8_t mäequ’cy2 :4; 177 ušt8_t mb™¿‹1 :7; 178 ušt8_t mvbr :1; 179 ušt8_t mb™¿‹2 ; 180 ušt8_t mb™¿‹3 ; 181 } t__©Œibu‹__ (( t·cked )è ta2dp_¯c_t ; 184 a2dp_v’dÜ_codec_t mšfo ; 185 ušt8_t mchªÃl_mode :4; 186 ušt8_t mäequ’cy :4; 187 } t__©Œibu‹__ (( t·cked )è ta2dp_­tx_t ; 189 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 192 ušt8_t mäequ’cy :4; 193 ušt8_t mchªÃl_mode :4; 194 ušt8_t mblock_Ëngth :4; 195 ušt8_t msubbªds :2; 196 ušt8_t m®loÿtiÚ_m‘hod :2; 197 ušt8_t mmš_b™poÞ ; 198 ušt8_t mmax_b™poÞ ; 199 } t__©Œibu‹__ (( t·cked )è ta2dp_sbc_t ; 202 ušt8_t mÏy” :3; 203 ušt8_t müc :1; 204 ušt8_t mchªÃl_mode :4; 205 ušt8_t mrç :1; 206 ušt8_t mmpf :1; 207 ušt8_t mäequ’cy :6; 208 ušt16_t mb™¿‹ ; 209 } t__©Œibu‹__ (( t·cked )è ta2dp_m³g_t ; 212 ušt8_t mobjeù_ty³ ; 213 ušt8_t mäequ’cy1 ; 214 ušt8_t mäequ’cy2 :4; 215 ušt8_t mchªÃls :2; 216 ušt8_t mrç :2; 217 ušt8_t mvbr :1; 218 ušt8_t mb™¿‹1 :7; 219 ušt8_t mb™¿‹2 ; 220 ušt8_t mb™¿‹3 ; 221 } t__©Œibu‹__ (( t·cked )è ta2dp_¯c_t ; 224 a2dp_v’dÜ_codec_t mšfo ; 225 ušt8_t mäequ’cy :4; 226 ušt8_t mchªÃl_mode :4; 227 } t__©Œibu‹__ (( t·cked )è ta2dp_­tx_t ; @profiles/audio/a2dp.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡dlib.h > 31  ~<”ºo.h > 33  ~ 34  ~ 36  ~ 37  ~ 38  ~ 40  ~"lib/uuid.h " 41  ~"¤c/¶ugš.h " 42  ~"¤c/ad­‹r.h " 43  ~"¤c/deviû.h " 44  ~"¤c/´ofže.h " 45  ~"¤c/£rviû.h " 46  ~"¤c/log.h " 47  ~"¤c/sdpd.h " 49  ~"avd.h " 50  ~"sšk.h " 51  ~"sourû.h " 52  ~"a2dp.h " 53  ~"a2dp-codecs.h " 54  ~"medŸ.h " 58  #SUSPEND_TIMEOUT 5 ) 59  #RECONFIGURE_TIMEOUT 500 ) 61  sa2dp_£p { 62  a2dp_£rv” * m£rv” ; 63  a2dp_’dpošt * m’dpošt ; 64 ušt8_t mty³ ; 65 ušt8_t mcodec ; 66  avd_loÿl_£p * ml£p ; 67  avd * m£ssiÚ ; 68  avd_¡»am * m¡»am ; 69 gušt msu¥’d_tim” ; 70 gboÞ—n md–ay_»pÜtšg ; 71 gboÞ—n mlocked ; 72 gboÞ—n msu¥’dšg ; 73 gboÞ—n m¡¬tšg ; 74 * mu£r_d©a ; 75 GDe¡royNÙify mde¡roy ; 78  sa2dp_£tup_cb { 79  a2dp_£tup * m£tup ; 80 a2dp_£Ëù_cb_t m£Ëù_cb ; 81 a2dp_cÚfig_cb_t mcÚfig_cb ; 82 a2dp_¡»am_cb_t m»sume_cb ; 83 a2dp_¡»am_cb_t msu¥’d_cb ; 84 gušt msourû_id ; 85 * mu£r_d©a ; 86  mid ; 89  sa2dp_£tup { 90  avd * m£ssiÚ ; 91  a2dp_£p * m£p ; 92  avd_»mÙe_£p * mr£p ; 93  avd_¡»am * m¡»am ; 94  avd_”rÜ * m”r ; 95 avd_£t_cÚfigu¿tiÚ_cb m£tcÚf_cb ; 96 GSLi¡ * mÿps ; 97 gboÞ—n m»cÚfigu» ; 98 gboÞ—n m¡¬t ; 99 GSLi¡ * mcb ; 100  m»f ; 103  sa2dp_£rv” { 104  btd_ad­‹r * mad­‹r ; 105 GSLi¡ * msšks ; 106 GSLi¡ * msourûs ; 107 ušt32_t msourû_»cÜd_id ; 108 ušt32_t msšk_»cÜd_id ; 109 gboÞ—n msšk_’abËd ; 110 gboÞ—n msourû_’abËd ; 113  GSLi¡ * g£rv”s = NULL ; 114  GSLi¡ * g£tups = NULL ; 115  gcb_id = 0; 117  a2dp_£tup * $£tup_»f ( a2dp_£tup * £tup ) 119 £tup -> »f ++; 121 `DBG ("%p:„ef=%d", £tup , s‘up-> »f ); 123  £tup ; 124 } } 126  a2dp_£tup * $£tup_Ãw ( avd * £ssiÚ ) 128  a2dp_£tup * £tup ; 130 £tup = `g_Ãw0 ( a2dp_£tup , 1); 131 £tup -> £ssiÚ = `avd_»f (session); 132 £tups = `g_¦i¡_­³nd (£tups, £tup ); 134  £tup ; 135 } } 137  $£tup_ä“ ( a2dp_£tup * s ) 139 `DBG ("%p", s ); 141 £tups = `g_¦i¡_»move (£tups, s ); 142 ià( s -> £ssiÚ ) 143 `avd_uÄef ( s -> £ssiÚ ); 144 `g_¦i¡_ä“_fuÎ ( s -> cb , g_ä“ ); 145 `g_¦i¡_ä“_fuÎ ( s -> ÿps , g_ä“ ); 146 `g_ä“ ( s ); 147 } } 149  $£tup_uÄef ( a2dp_£tup * £tup ) 151 £tup -> »f --; 153 `DBG ("%p:„ef=%d", £tup , s‘up-> »f ); 155 ià( £tup -> »f > 0) 158 `£tup_ä“ ( £tup ); 159 } } 161  a2dp_£tup_cb * $£tup_cb_Ãw ( a2dp_£tup * £tup ) 163  a2dp_£tup_cb * cb ; 165 cb = `g_Ãw0 ( a2dp_£tup_cb , 1); 166 cb -> £tup = setup; 167 cb -> id = ++ cb_id ; 169 £tup -> cb = `g_¦i¡_­³nd (setup->cb, cb); 170  cb ; 171 } } 173  $£tup_cb_ä“ ( a2dp_£tup_cb * cb ) 175  a2dp_£tup * £tup = cb ->setup; 177 ià( cb -> sourû_id ) 178 `g_sourû_»move ( cb -> sourû_id ); 180 £tup -> cb = `g_¦i¡_»move (setup->cb, cb); 181 `£tup_uÄef ( cb -> £tup ); 182 `g_ä“ ( cb ); 183 } } 185  $fš®ize_£tup_”ºo ( a2dp_£tup * s ,  ”r , 186 GSourûFunc cb1 , ...) 188 GSourûFunc fš®ize ; 189 va_li¡ ¬gs ; 190  avd_”rÜ avd_”r ; 192 ià( ”r < 0) { 193 `avd_”rÜ_š™ (& avd_”r , AVDTP_ERRNO , - ”r ); 194 s -> ”r = & avd_”r ; 197 `va_¡¬t ( ¬gs , cb1 ); 198 fš®ize = cb1 ; 199 `£tup_»f ( s ); 200  fš®ize !ð NULL ) { 201 `fš®ize ( s ); 202 fš®ize = `va_¬g ( ¬gs , GSourûFunc ); 204 `£tup_uÄef ( s ); 205 `va_’d ( ¬gs ); 206 } } 208  gboÞ—n $fš®ize_cÚfig ( gpoš‹r d©a ) 210  a2dp_£tup * s = d©a ; 211 GSLi¡ * l ; 212  avd_¡»am * ¡»am = s -> ”r ? NULL : s->stream; 214  l = s -> cb ;† !ð NULL ; ) { 215  a2dp_£tup_cb * cb = l -> d©a ; 217 l =†-> Ãxt ; 219 ià(! cb -> cÚfig_cb ) 222 cb -> `cÚfig_cb ( s -> £ssiÚ , s-> £p , ¡»am , s-> ”r , 223 cb -> u£r_d©a ); 224 `£tup_cb_ä“ ( cb ); 227  FALSE ; 228 } } 230  gboÞ—n $fš®ize_»sume ( gpoš‹r d©a ) 232  a2dp_£tup * s = d©a ; 233 GSLi¡ * l ; 235  l = s -> cb ;† !ð NULL ; ) { 236  a2dp_£tup_cb * cb = l -> d©a ; 238 l =†-> Ãxt ; 240 ià(! cb -> »sume_cb ) 243 cb -> `»sume_cb ( s -> £ssiÚ , s-> ”r , cb-> u£r_d©a ); 244 `£tup_cb_ä“ ( cb ); 247  FALSE ; 248 } } 250  gboÞ—n $fš®ize_su¥’d ( gpoš‹r d©a ) 252  a2dp_£tup * s = d©a ; 253 GSLi¡ * l ; 255  l = s -> cb ;† !ð NULL ; ) { 256  a2dp_£tup_cb * cb = l -> d©a ; 258 l =†-> Ãxt ; 260 ià(! cb -> su¥’d_cb ) 263 cb -> `su¥’d_cb ( s -> £ssiÚ , s-> ”r , cb-> u£r_d©a ); 264 `£tup_cb_ä“ ( cb ); 267  FALSE ; 268 } } 270  $fš®ize_£Ëù ( a2dp_£tup * s ) 272 GSLi¡ * l ; 274  l = s -> cb ;† !ð NULL ; ) { 275  a2dp_£tup_cb * cb = l -> d©a ; 277 l =†-> Ãxt ; 279 ià(! cb -> £Ëù_cb ) 282 cb -> `£Ëù_cb ( s -> £ssiÚ , s-> £p , s-> ÿps , cb-> u£r_d©a ); 283 `£tup_cb_ä“ ( cb ); 285 } } 287  a2dp_£tup * $fšd_£tup_by_£ssiÚ ( avd * £ssiÚ ) 289 GSLi¡ * l ; 291  l = £tups ;† !ð NULL ;† =†-> Ãxt ) { 292  a2dp_£tup * £tup = l -> d©a ; 294 ià( £tup -> £ssiÚ == session) 295  £tup ; 298  NULL ; 299 } } 301  a2dp_£tup * $a2dp_£tup_g‘ ( avd * £ssiÚ ) 303  a2dp_£tup * £tup ; 305 £tup = `fšd_£tup_by_£ssiÚ ( £ssiÚ ); 306 ià(! £tup ) { 307 £tup = `£tup_Ãw ( £ssiÚ ); 308 ià(! £tup ) 309  NULL ; 312  `£tup_»f ( £tup ); 313 } } 315  a2dp_£tup * $fšd_£tup_by_¡»am ( avd_¡»am * ¡»am ) 317 GSLi¡ * l ; 319  l = £tups ;† !ð NULL ;† =†-> Ãxt ) { 320  a2dp_£tup * £tup = l -> d©a ; 322 ià( £tup -> ¡»am == stream) 323  £tup ; 326  NULL ; 327 } } 329  $¡»am_¡©e_chªged ( avd_¡»am * ¡»am , 330 avd_¡©e_t Þd_¡©e , 331 avd_¡©e_t Ãw_¡©e , 332  avd_”rÜ * ”r , 333 * u£r_d©a ) 335  a2dp_£p * £p = u£r_d©a ; 337 ià( Ãw_¡©e =ð AVDTP_STATE_OPEN ) { 338  a2dp_£tup * £tup ; 339  ”r ; 341 £tup = `fšd_£tup_by_¡»am ( ¡»am ); 342 ià(! £tup || !£tup-> ¡¬t ) 345 £tup -> ¡¬t = FALSE ; 347 ”r = `avd_¡¬t ( £tup -> £ssiÚ , ¡»am ); 348 ià( ”r < 0 &&ƒ¼ !ð- EINPROGRESS ) { 349 `”rÜ ("avd_¡¬t: % (%d)", `¡»¼Ü (- ”r ), -err); 350 `fš®ize_£tup_”ºo ( £tup , ”r , fš®ize_»sume , 351 NULL ); 355 £p -> ¡¬tšg = TRUE ; 360 #ifdeà __TIZEN_PATCH__ 361 ià( Ãw_¡©e =ð AVDTP_STATE_STREAMING && £p -> su¥’d_tim” ) { 362 `g_sourû_»move ( £p -> su¥’d_tim” ); 363 £p -> su¥’d_tim” = 0; 367 ià( Ãw_¡©e !ð AVDTP_STATE_IDLE ) 370 ià( £p -> su¥’d_tim” ) { 371 `g_sourû_»move ( £p -> su¥’d_tim” ); 372 £p -> su¥’d_tim” = 0; 375 ià( £p -> £ssiÚ ) { 376 `avd_uÄef ( £p -> £ssiÚ ); 377 £p -> £ssiÚ = NULL ; 380 £p -> ¡»am = NULL ; 382 ià( £p -> ’dpošt && s•->’dpošt-> þ—r_cÚfigu¿tiÚ ) 383 £p -> ’dpošt -> `þ—r_cÚfigu¿tiÚ (£p, s•-> u£r_d©a ); 384 } } 386  gboÞ—n $auto_cÚfig ( gpoš‹r d©a ) 388  a2dp_£tup * £tup = d©a ; 389  btd_deviû * dev = NULL ; 391  btd_£rviû * £rviû ; 394 ià( £tup -> £p -> ¡»am =ð NULL ) 395  FALSE ; 397 ià( £tup -> ”r !ð NULL ) 398  dÚe ; 400 dev = `avd_g‘_deviû ( £tup -> £ssiÚ ); 402 `avd_¡»am_add_cb ( £tup -> £ssiÚ , s‘up-> ¡»am , 403 ¡»am_¡©e_chªged , £tup -> £p ); 405 ià( £tup -> £p -> ty³ =ð AVDTP_SEP_TYPE_SOURCE ) { 406 £rviû = `btd_deviû_g‘_£rviû ( dev , A2DP_SINK_UUID ); 407 `sšk_Ãw_¡»am ( £rviû , £tup -> £ssiÚ , s‘up-> ¡»am ); 409 £rviû = `btd_deviû_g‘_£rviû ( dev , A2DP_SOURCE_UUID ); 410 `sourû_Ãw_¡»am ( £rviû , £tup -> £ssiÚ , s‘up-> ¡»am ); 413 dÚe : 414 ià( £tup -> £tcÚf_cb ) 415 £tup -> `£tcÚf_cb (£tup-> £ssiÚ , s‘up-> ¡»am , s‘up-> ”r ); 417 `fš®ize_cÚfig ( £tup ); 419 ià( £tup -> ”r ) { 420 `g_ä“ ( £tup -> ”r ); 421 £tup -> ”r = NULL ; 424 `£tup_uÄef ( £tup ); 426  FALSE ; 427 } } 429  $’dpošt_£tcÚf_cb ( a2dp_£tup * £tup , gboÞ—n »t ) 431 ià( »t =ð FALSE ) { 432 £tup -> ”r = `g_Ãw ( avd_”rÜ , 1); 433 `avd_”rÜ_š™ ( £tup -> ”r , AVDTP_MEDIA_CODEC , 434 AVDTP_UNSUPPORTED_CONFIGURATION ); 437 `auto_cÚfig ( £tup ); 438 } } 440  gboÞ—n $’dpošt_£tcÚf_šd ( avd * £ssiÚ , 441  avd_loÿl_£p * £p , 442  avd_¡»am * ¡»am , 443 GSLi¡ * ÿps , 444 avd_£t_cÚfigu¿tiÚ_cb cb , 445 * u£r_d©a ) 447  a2dp_£p *a2dp_£°ð u£r_d©a ; 448  a2dp_£tup * £tup ; 450 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 451 `DBG ("Sšk %p: S‘_CÚfigu¿tiÚ_Ind", £p ); 453 `DBG ("Sourû %p: S‘_CÚfigu¿tiÚ_Ind", £p ); 455 £tup = `a2dp_£tup_g‘ ( £ssiÚ ); 456 ià(! £ssiÚ ) 457  FALSE ; 459 a2dp_£p -> ¡»am = stream; 460 £tup -> £p = a2dp_£p ; 461 £tup -> ¡»am = stream; 462 £tup -> £tcÚf_cb = cb ; 464 ; ÿps !ð NULL ; c­ ð `g_¦i¡_Ãxt (caps)) { 465  avd_£rviû_ÿ·bž™y * ÿp = ÿps -> d©a ; 466  avd_medŸ_codec_ÿ·bž™y * codec ; 467 gboÞ—n »t ; 469 ià( ÿp -> ÿ‹gÜy =ð AVDTP_DELAY_REPORTING && 470 ! a2dp_£p -> d–ay_»pÜtšg ) { 471 £tup -> ”r = `g_Ãw ( avd_”rÜ , 1); 472 `avd_”rÜ_š™ ( £tup -> ”r , AVDTP_DELAY_REPORTING , 473 AVDTP_UNSUPPORTED_CONFIGURATION ); 474  dÚe ; 477 ià( ÿp -> ÿ‹gÜy !ð AVDTP_MEDIA_CODEC ) 480 codec = ( avd_medŸ_codec_ÿ·bž™y *è ÿp -> d©a ; 482 ià( codec -> medŸ_codec_ty³ !ð a2dp_£p ->codec) { 483 £tup -> ”r = `g_Ãw ( avd_”rÜ , 1); 484 `avd_”rÜ_š™ ( £tup -> ”r , AVDTP_MEDIA_CODEC , 485 AVDTP_UNSUPPORTED_CONFIGURATION ); 486  dÚe ; 489 »t = a2dp_£p -> ’dpošt -> `£t_cÚfigu¿tiÚ (a2dp_sep, 490 codec -> d©a , 491 ÿp -> Ëngth - (* codec ), 492 £tup , 493 ’dpošt_£tcÚf_cb , 494 a2dp_£p -> u£r_d©a ); 495 ià( »t == 0) 496  TRUE ; 498 £tup -> ”r = `g_Ãw ( avd_”rÜ , 1); 499 `avd_”rÜ_š™ ( £tup -> ”r , AVDTP_MEDIA_CODEC , 500 AVDTP_UNSUPPORTED_CONFIGURATION ); 504 dÚe : 505 `g_idË_add ( auto_cÚfig , £tup ); 506  TRUE ; 507 } } 509  gboÞ—n $’dpošt_g‘ÿp_šd ( avd * £ssiÚ , 510  avd_loÿl_£p * £p , 511 gboÞ—n g‘_®l , GSLi¡ ** ÿps , 512 ušt8_t * ”r , * u£r_d©a ) 514  a2dp_£p *a2dp_£°ð u£r_d©a ; 515  avd_£rviû_ÿ·bž™y * medŸ_Œª¥Üt , * medŸ_codec ; 516  avd_medŸ_codec_ÿ·bž™y * codec_ÿps ; 517 ušt8_t * ÿ·bž™›s ; 518 size_t Ëngth ; 520 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 521 `DBG ("Sšk %p: G‘_C­abž™y_Ind", £p ); 523 `DBG ("Sourû %p: G‘_C­abž™y_Ind", £p ); 525 * ÿps = NULL ; 527 medŸ_Œª¥Üt = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_TRANSPORT , 528 NULL , 0); 530 * ÿps = `g_¦i¡_­³nd (*ÿps, medŸ_Œª¥Üt ); 532 Ëngth = a2dp_£p -> ’dpošt -> `g‘_ÿ·bž™›s ×2dp_£p, & ÿ·bž™›s , 533 a2dp_£p -> u£r_d©a ); 535 codec_ÿps = `g_m®loc0 ((*codec_ÿpsè+ Ëngth ); 536 codec_ÿps -> medŸ_ty³ = AVDTP_MEDIA_TYPE_AUDIO ; 537 codec_ÿps -> medŸ_codec_ty³ = a2dp_£p -> codec ; 538 `memýy ( codec_ÿps -> d©a , ÿ·bž™›s , Ëngth ); 540 medŸ_codec = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_CODEC , codec_ÿps , 541 (* codec_ÿps è+ Ëngth ); 543 * ÿps = `g_¦i¡_­³nd (*ÿps, medŸ_codec ); 544 `g_ä“ ( codec_ÿps ); 546 ià( g‘_®l ) { 547  avd_£rviû_ÿ·bž™y * d–ay_»pÜtšg ; 548 d–ay_»pÜtšg = `avd_£rviû_ÿp_Ãw ( AVDTP_DELAY_REPORTING , 549 NULL , 0); 550 * ÿps = `g_¦i¡_­³nd (*ÿps, d–ay_»pÜtšg ); 553  TRUE ; 554 } } 556  $’dpošt_Ý’_cb ( a2dp_£tup * £tup , gboÞ—n »t ) 558  ”r ; 560 ià( »t =ð FALSE ) { 561 £tup -> ¡»am = NULL ; 562 `fš®ize_£tup_”ºo ( £tup , - EPERM , fš®ize_cÚfig , NULL ); 566 ”r = `avd_Ý’ ( £tup -> £ssiÚ , s‘up-> ¡»am ); 567 ià( ”r == 0) 570 `”rÜ ("E¼Ü oÀavd_Ý’ % (%d)", `¡»¼Ü (- ”r ), -err); 571 £tup -> ¡»am = NULL ; 572 `fš®ize_£tup_”ºo ( £tup , ”r , fš®ize_cÚfig , NULL ); 573 } } 575  $£tcÚf_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 576  avd_¡»am * ¡»am , 577  avd_”rÜ * ”r , * u£r_d©a ) 579  a2dp_£p *a2dp_£°ð u£r_d©a ; 580  a2dp_£tup * £tup ; 581  btd_deviû * dev ; 582  btd_£rviû * £rviû ; 583  »t ; 585 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 586 `DBG ("Sšk %p: S‘_CÚfigu¿tiÚ_Cfm", £p ); 588 `DBG ("Sourû %p: S‘_CÚfigu¿tiÚ_Cfm", £p ); 590 £tup = `fšd_£tup_by_£ssiÚ ( £ssiÚ ); 592 ià( ”r ) { 593 ià( £tup ) { 594 `£tup_»f ( £tup ); 595 £tup -> ”r =ƒrr; 596 `fš®ize_cÚfig ( £tup ); 597 £tup -> ”r = NULL ; 598 `£tup_uÄef ( £tup ); 603 `avd_¡»am_add_cb ( £ssiÚ , ¡»am , ¡»am_¡©e_chªged , a2dp_£p ); 604 a2dp_£p -> ¡»am = stream; 606 ià(! £tup ) 609 dev = `avd_g‘_deviû ( £ssiÚ ); 612 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SOURCE ) { 613 £rviû = `btd_deviû_g‘_£rviû ( dev , A2DP_SINK_UUID ); 614 `sšk_Ãw_¡»am ( £rviû , £ssiÚ , £tup -> ¡»am ); 616 £rviû = `btd_deviû_g‘_£rviû ( dev , A2DP_SOURCE_UUID ); 617 `sourû_Ãw_¡»am ( £rviû , £ssiÚ , £tup -> ¡»am ); 621 ià( a2dp_£p -> ’dpošt ) { 622  avd_£rviû_ÿ·bž™y * £rviû ; 623  avd_medŸ_codec_ÿ·bž™y * codec ; 624  ”r ; 626 £rviû = `avd_¡»am_g‘_codec ( ¡»am ); 627 codec = ( avd_medŸ_codec_ÿ·bž™y *è £rviû -> d©a ; 629 ”r = a2dp_£p -> ’dpošt -> `£t_cÚfigu¿tiÚ (a2dp_sep, 630 codec -> d©a , £rviû -> Ëngth - 631 (* codec ), 632 £tup , 633 ’dpošt_Ý’_cb , 634 a2dp_£p -> u£r_d©a ); 635 ià( ”r == 0) 638 £tup -> ¡»am = NULL ; 639 `fš®ize_£tup_”ºo ( £tup , - EPERM , fš®ize_cÚfig , NULL ); 643 »t = `avd_Ý’ ( £ssiÚ , ¡»am ); 644 ià( »t < 0) { 645 `”rÜ ("E¼Ü oÀavd_Ý’ % (%d)", `¡»¼Ü (- »t ), -ret); 646 £tup -> ¡»am = NULL ; 647 `fš®ize_£tup_”ºo ( £tup , »t , fš®ize_cÚfig , NULL ); 649 } } 651  gboÞ—n $g‘cÚf_šd ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 652 ušt8_t * ”r , * u£r_d©a ) 654  a2dp_£p *a2dp_£°ð u£r_d©a ; 656 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 657 `DBG ("Sšk %p: G‘_CÚfigu¿tiÚ_Ind", £p ); 659 `DBG ("Sourû %p: G‘_CÚfigu¿tiÚ_Ind", £p ); 660  TRUE ; 661 } } 663  $g‘cÚf_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 664  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 665 * u£r_d©a ) 667  a2dp_£p *a2dp_£°ð u£r_d©a ; 669 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 670 `DBG ("Sšk %p: S‘_CÚfigu¿tiÚ_Cfm", £p ); 672 `DBG ("Sourû %p: S‘_CÚfigu¿tiÚ_Cfm", £p ); 673 } } 675  gboÞ—n $Ý’_šd ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 676  avd_¡»am * ¡»am , ušt8_t * ”r , 677 * u£r_d©a ) 679  a2dp_£p *a2dp_£°ð u£r_d©a ; 680  a2dp_£tup * £tup ; 682 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 683 `DBG ("Sšk %p: O³n_Ind", £p ); 685 `DBG ("Sourû %p: O³n_Ind", £p ); 687 £tup = `fšd_£tup_by_£ssiÚ ( £ssiÚ ); 688 ià(! £tup ) 689  TRUE ; 691 ià( £tup -> »cÚfigu» ) 692 £tup -> »cÚfigu» = FALSE ; 694 `fš®ize_cÚfig ( £tup ); 696  TRUE ; 697 } } 699  $Ý’_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 700  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 701 * u£r_d©a ) 703  a2dp_£p *a2dp_£°ð u£r_d©a ; 704  a2dp_£tup * £tup ; 706 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 707 `DBG ("Sšk %p: O³n_Cfm", £p ); 709 `DBG ("Sourû %p: O³n_Cfm", £p ); 711 £tup = `fšd_£tup_by_£ssiÚ ( £ssiÚ ); 712 ià(! £tup ) 715 ià( £tup -> »cÚfigu» ) 716 £tup -> »cÚfigu» = FALSE ; 718 ià( ”r ) { 719 £tup -> ¡»am = NULL ; 720 £tup -> ”r =ƒrr; 721 ià( £tup -> ¡¬t ) 722 `fš®ize_»sume ( £tup ); 725 `fš®ize_cÚfig ( £tup ); 728 } } 730  gboÞ—n $su¥’d_timeout ( a2dp_£p * £p ) 732 ià( `avd_su¥’d ( £p -> £ssiÚ , s•-> ¡»am ) == 0) 733 £p -> su¥’dšg = TRUE ; 735 £p -> su¥’d_tim” = 0; 737 `avd_uÄef ( £p -> £ssiÚ ); 738 £p -> £ssiÚ = NULL ; 740  FALSE ; 741 } } 743  gboÞ—n $¡¬t_šd ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 744  avd_¡»am * ¡»am , ušt8_t * ”r , 745 * u£r_d©a ) 747  a2dp_£p *a2dp_£°ð u£r_d©a ; 748  a2dp_£tup * £tup ; 750 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 751 `DBG ("Sšk %p: S¹_Ind", £p ); 753 `DBG ("Sourû %p: S¹_Ind", £p ); 755 ià(! a2dp_£p -> locked ) { 756 a2dp_£p -> £ssiÚ = `avd_»f (session); 757 a2dp_£p -> su¥’d_tim” = `g_timeout_add_£cÚds ( SUSPEND_TIMEOUT , 758 ( GSourûFunc è su¥’d_timeout , 759 a2dp_£p ); 762 ià(! a2dp_£p -> ¡¬tšg ) 763  TRUE ; 765 a2dp_£p -> ¡¬tšg = FALSE ; 767 £tup = `fšd_£tup_by_£ssiÚ ( £ssiÚ ); 768 ià( £tup ) 769 `fš®ize_»sume ( £tup ); 771  TRUE ; 772 } } 774  $¡¬t_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 775  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 776 * u£r_d©a ) 778  a2dp_£p *a2dp_£°ð u£r_d©a ; 779  a2dp_£tup * £tup ; 781 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 782 `DBG ("Sšk %p: S¹_Cfm", £p ); 784 `DBG ("Sourû %p: S¹_Cfm", £p ); 786 a2dp_£p -> ¡¬tšg = FALSE ; 788 £tup = `fšd_£tup_by_£ssiÚ ( £ssiÚ ); 789 ià(! £tup ) 792 ià( ”r ) { 793 £tup -> ¡»am = NULL ; 794 £tup -> ”r =ƒrr; 797 `fš®ize_»sume ( £tup ); 798 } } 800  gboÞ—n $su¥’d_šd ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 801  avd_¡»am * ¡»am , ušt8_t * ”r , 802 * u£r_d©a ) 804  a2dp_£p *a2dp_£°ð u£r_d©a ; 805  a2dp_£tup * £tup ; 806 gboÞ—n ¡¬t ; 807  ¡¬t_”r ; 809 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 810 `DBG ("Sšk %p: Su¥’d_Ind", £p ); 812 `DBG ("Sourû %p: Su¥’d_Ind", £p ); 814 ià( a2dp_£p -> su¥’d_tim” ) { 815 `g_sourû_»move ( a2dp_£p -> su¥’d_tim” ); 816 a2dp_£p -> su¥’d_tim” = 0; 817 `avd_uÄef ( a2dp_£p -> £ssiÚ ); 818 a2dp_£p -> £ssiÚ = NULL ; 821 ià(! a2dp_£p -> su¥’dšg ) 822  TRUE ; 824 a2dp_£p -> su¥’dšg = FALSE ; 826 £tup = `fšd_£tup_by_£ssiÚ ( £ssiÚ ); 827 ià(! £tup ) 828  TRUE ; 830 ¡¬t = £tup ->start; 831 £tup -> ¡¬t = FALSE ; 833 `fš®ize_su¥’d ( £tup ); 835 ià(! ¡¬t ) 836  TRUE ; 838 ¡¬t_”r = `avd_¡¬t ( £ssiÚ , a2dp_£p -> ¡»am ); 839 ià( ¡¬t_”r < 0 && s¹_”¸!ð- EINPROGRESS ) { 840 `”rÜ ("avd_¡¬t: % (%d)", `¡»¼Ü (- ¡¬t_”r ), 841 - ¡¬t_”r ); 842 `fš®ize_£tup_”ºo ( £tup , ¡¬t_”r , fš®ize_»sume , NULL ); 845  TRUE ; 846 } } 848  $su¥’d_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 849  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 850 * u£r_d©a ) 852  a2dp_£p *a2dp_£°ð u£r_d©a ; 853  a2dp_£tup * £tup ; 854 gboÞ—n ¡¬t ; 855  ¡¬t_”r ; 857 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 858 `DBG ("Sšk %p: Su¥’d_Cfm", £p ); 860 `DBG ("Sourû %p: Su¥’d_Cfm", £p ); 862 a2dp_£p -> su¥’dšg = FALSE ; 864 £tup = `fšd_£tup_by_£ssiÚ ( £ssiÚ ); 865 ià(! £tup ) 868 ¡¬t = £tup ->start; 869 £tup -> ¡¬t = FALSE ; 871 ià( ”r ) { 872 £tup -> ¡»am = NULL ; 873 £tup -> ”r =ƒrr; 876 `fš®ize_su¥’d ( £tup ); 878 ià(! ¡¬t ) 881 ià( ”r ) { 882 `fš®ize_»sume ( £tup ); 886 ¡¬t_”r = `avd_¡¬t ( £ssiÚ , a2dp_£p -> ¡»am ); 887 ià( ¡¬t_”r < 0 && s¹_”¸!ð- EINPROGRESS ) { 888 `”rÜ ("avd_¡¬t: % (%d)", `¡»¼Ü (- ¡¬t_”r ), 889 - ¡¬t_”r ); 890 `fš®ize_£tup_”ºo ( £tup , ¡¬t_”r , fš®ize_su¥’d , NULL ); 892 } } 894  gboÞ—n $þo£_šd ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 895  avd_¡»am * ¡»am , ušt8_t * ”r , 896 * u£r_d©a ) 898  a2dp_£p *a2dp_£°ð u£r_d©a ; 899  a2dp_£tup * £tup ; 901 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 902 `DBG ("Sšk %p: Clo£_Ind", £p ); 904 `DBG ("Sourû %p: Clo£_Ind", £p ); 906 £tup = `fšd_£tup_by_£ssiÚ ( £ssiÚ ); 907 ià(! £tup ) 908  TRUE ; 910 `fš®ize_£tup_”ºo ( £tup , - ECONNRESET , fš®ize_su¥’d , 911 fš®ize_»sume , NULL ); 913  TRUE ; 914 } } 916  gboÞ—n $a2dp_»cÚfigu» ( gpoš‹r d©a ) 918  a2dp_£tup * £tup = d©a ; 919  a2dp_£p * £p = £tup ->sep; 920  posix_”r ; 921  avd_medŸ_codec_ÿ·bž™y * r£p_codec ; 922  avd_£rviû_ÿ·bž™y * ÿp ; 924 ià( £tup -> r£p ) { 925 ÿp = `avd_g‘_codec ( £tup -> r£p ); 926 r£p_codec = ( avd_medŸ_codec_ÿ·bž™y *è ÿp -> d©a ; 929 ià(! £tup -> r£p || £p -> codec !ð r£p_codec -> medŸ_codec_ty³ ) 930 £tup -> r£p = `avd_fšd_»mÙe_£p (£tup-> £ssiÚ , £p -> l£p ); 932 posix_”r = `avd_£t_cÚfigu¿tiÚ ( £tup -> £ssiÚ , s‘up-> r£p , 933 £p -> l£p , 934 £tup -> ÿps , 935 & £tup -> ¡»am ); 936 ià( posix_”r < 0) { 937 `”rÜ ("avd_£t_cÚfigu¿tiÚ: %s", `¡»¼Ü (- posix_”r )); 938  çžed ; 941  FALSE ; 943 çžed : 944 `fš®ize_£tup_”ºo ( £tup , posix_”r , fš®ize_cÚfig , NULL ); 945  FALSE ; 946 } } 948  $þo£_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 949  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 950 * u£r_d©a ) 952  a2dp_£p *a2dp_£°ð u£r_d©a ; 953  a2dp_£tup * £tup ; 955 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 956 `DBG ("Sšk %p: Clo£_Cfm", £p ); 958 `DBG ("Sourû %p: Clo£_Cfm", £p ); 960 £tup = `fšd_£tup_by_£ssiÚ ( £ssiÚ ); 961 ià(! £tup ) 964 ià( ”r ) { 965 £tup -> ¡»am = NULL ; 966 £tup -> ”r =ƒrr; 967 `fš®ize_cÚfig ( £tup ); 971 ià(! £tup -> r£p ) 972 £tup -> r£p = `avd_¡»am_g‘_»mÙe_£p ( ¡»am ); 974 ià( £tup -> »cÚfigu» ) 975 `g_timeout_add ( RECONFIGURE_TIMEOUT , a2dp_»cÚfigu» , £tup ); 976 } } 978  $abÜt_šd ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 979  avd_¡»am * ¡»am , ušt8_t * ”r , 980 * u£r_d©a ) 982  a2dp_£p *a2dp_£°ð u£r_d©a ; 983  a2dp_£tup * £tup ; 985 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 986 `DBG ("Sšk %p: AbÜt_Ind", £p ); 988 `DBG ("Sourû %p: AbÜt_Ind", £p ); 990 a2dp_£p -> ¡»am = NULL ; 992 £tup = `fšd_£tup_by_£ssiÚ ( £ssiÚ ); 993 ià(! £tup ) 996 `fš®ize_£tup_”ºo ( £tup , - ECONNRESET , fš®ize_su¥’d , 997 fš®ize_»sume , 998 fš®ize_cÚfig , NULL ); 1001 } } 1003  $abÜt_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 1004  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 1005 * u£r_d©a ) 1007  a2dp_£p *a2dp_£°ð u£r_d©a ; 1008  a2dp_£tup * £tup ; 1010 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 1011 `DBG ("Sšk %p: AbÜt_Cfm", £p ); 1013 `DBG ("Sourû %p: AbÜt_Cfm", £p ); 1015 £tup = `fšd_£tup_by_£ssiÚ ( £ssiÚ ); 1016 ià(! £tup ) 1019 `£tup_uÄef ( £tup ); 1020 } } 1022  gboÞ—n $»cÚf_šd ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 1023 ušt8_t * ”r , * u£r_d©a ) 1025  a2dp_£p *a2dp_£°ð u£r_d©a ; 1027 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 1028 `DBG ("Sšk %p: ReCÚfigu»_Ind", £p ); 1030 `DBG ("Sourû %p: ReCÚfigu»_Ind", £p ); 1032  TRUE ; 1033 } } 1035  gboÞ—n $’dpošt_d–ay»pÜt_šd ( avd * £ssiÚ , 1036  avd_loÿl_£p * £p , 1037 ušt8_t r£id , ušt16_t d–ay , 1038 ušt8_t * ”r , * u£r_d©a ) 1040  a2dp_£p *a2dp_£°ð u£r_d©a ; 1042 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 1043 `DBG ("Sšk %p: D–ayR•Üt_Ind", £p ); 1045 `DBG ("Sourû %p: D–ayR•Üt_Ind", £p ); 1047 ià( a2dp_£p -> ’dpošt =ð NULL || 1048 a2dp_£p -> ’dpošt -> £t_d–ay =ð NULL ) 1049  FALSE ; 1051 a2dp_£p -> ’dpošt -> `£t_d–ay ×2dp_£p, d–ay ,‡2dp_£p-> u£r_d©a ); 1053  TRUE ; 1054 } } 1056  $»cÚf_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 1057  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 1058 * u£r_d©a ) 1060  a2dp_£p *a2dp_£°ð u£r_d©a ; 1061  a2dp_£tup * £tup ; 1063 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 1064 `DBG ("Sšk %p: ReCÚfigu»_Cfm", £p ); 1066 `DBG ("Sourû %p: ReCÚfigu»_Cfm", £p ); 1068 £tup = `fšd_£tup_by_£ssiÚ ( £ssiÚ ); 1069 ià(! £tup ) 1072 ià( ”r ) { 1073 £tup -> ¡»am = NULL ; 1074 £tup -> ”r =ƒrr; 1077 `fš®ize_cÚfig ( £tup ); 1078 } } 1080  $d–ay_»pÜt_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 1081  avd_¡»am * ¡»am , 1082  avd_”rÜ * ”r , * u£r_d©a ) 1084  a2dp_£p *a2dp_£°ð u£r_d©a ; 1086 ià( a2dp_£p -> ty³ =ð AVDTP_SEP_TYPE_SINK ) 1087 `DBG ("Sšk %p: D–ayR•Üt_Cfm", £p ); 1089 `DBG ("Sourû %p: D–ayR•Üt_Cfm", £p ); 1090 } } 1092  avd_£p_cfm gcfm = { 1093 . £t_cÚfigu¿tiÚ = £tcÚf_cfm , 1094 . gg‘_cÚfigu¿tiÚ = g‘cÚf_cfm , 1095 . gÝ’ = Ý’_cfm , 1096 . g¡¬t = ¡¬t_cfm , 1097 . gsu¥’d = su¥’d_cfm , 1098 . gþo£ = þo£_cfm , 1099 . gabÜt = abÜt_cfm , 1100 . g»cÚfigu» = »cÚf_cfm , 1101 . gd–ay_»pÜt = d–ay_»pÜt_cfm , 1104  avd_£p_šd g’dpošt_šd = { 1105 . g‘_ÿ·bž™y = ’dpošt_g‘ÿp_šd , 1106 . g£t_cÚfigu¿tiÚ = ’dpošt_£tcÚf_šd , 1107 . gg‘_cÚfigu¿tiÚ = g‘cÚf_šd , 1108 . gÝ’ = Ý’_šd , 1109 . g¡¬t = ¡¬t_šd , 1110 . gsu¥’d = su¥’d_šd , 1111 . gþo£ = þo£_šd , 1112 . gabÜt = abÜt_šd , 1113 . g»cÚfigu» = »cÚf_šd , 1114 . gd–ay»pÜt = ’dpošt_d–ay»pÜt_šd , 1117  sdp_»cÜd_t * $a2dp_»cÜd ( ušt8_t ty³ ) 1119 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 1120 uuid_t roÙ_uuid , l2ÿp_uuid , avd_uuid , a2dp_uuid ; 1121 sdp_´ofže_desc_t ´ofže [1]; 1122 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 1123 sdp_»cÜd_t * »cÜd ; 1124 sdp_d©a_t * psm , * v”siÚ , * ã©u»s ; 1125 ušt16_t Í = AVDTP_UUID ; 1126 #ifdeà __TIZEN_PATCH__ 1127 ušt16_t a2dp_v” = 0x0102, avd_v” = 0x0103, ã© = 0x0001; 1129 ušt16_t a2dp_v” = 0x0103, avd_v” = 0x0103, ã© = 0x000f; 1132 »cÜd = `sdp_»cÜd_®loc (); 1133 ià(! »cÜd ) 1134  NULL ; 1136 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 1137 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 1138 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 1140 ià( ty³ =ð AVDTP_SEP_TYPE_SOURCE ) 1141 `sdp_uuid16_ü—‹ (& a2dp_uuid , AUDIO_SOURCE_SVCLASS_ID ); 1143 `sdp_uuid16_ü—‹ (& a2dp_uuid , AUDIO_SINK_SVCLASS_ID ); 1144 svþass_id = `sdp_li¡_­³nd (0, & a2dp_uuid ); 1145 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 1147 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , ADVANCED_AUDIO_PROFILE_ID ); 1148 ´ofže [0]. v”siÚ = a2dp_v” ; 1149 pf£q = `sdp_li¡_­³nd (0, & ´ofže [0]); 1150 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 1152 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 1153 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 1154 psm = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 1155 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], psm ); 1156 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 1158 `sdp_uuid16_ü—‹ (& avd_uuid , AVDTP_UUID ); 1159 ´Ùo [1] = `sdp_li¡_­³nd (0, & avd_uuid ); 1160 v”siÚ = `sdp_d©a_®loc ( SDP_UINT16 , & avd_v” ); 1161 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], v”siÚ ); 1162 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 1164 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 1165 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 1167 ã©u»s = `sdp_d©a_®loc ( SDP_UINT16 , & ã© ); 1168 `sdp_©Œ_add ( »cÜd , SDP_ATTR_SUPPORTED_FEATURES , ã©u»s ); 1170 ià( ty³ =ð AVDTP_SEP_TYPE_SOURCE ) 1171 `sdp_£t_šfo_©Œ ( »cÜd , "Audio Source", 0, 0); 1173 `sdp_£t_šfo_©Œ ( »cÜd , "Audio Sink", 0, 0); 1175 `ä“ ( psm ); 1176 `ä“ ( v”siÚ ); 1177 `sdp_li¡_ä“ ( ´Ùo [0], 0); 1178 `sdp_li¡_ä“ ( ´Ùo [1], 0); 1179 `sdp_li¡_ä“ ( ­£q , 0); 1180 `sdp_li¡_ä“ ( pf£q , 0); 1181 `sdp_li¡_ä“ ( ­rÙo , 0); 1182 `sdp_li¡_ä“ ( roÙ , 0); 1183 `sdp_li¡_ä“ ( svþass_id , 0); 1185  »cÜd ; 1186 } } 1188  a2dp_£rv” * $fšd_£rv” ( GSLi¡ * li¡ ,  btd_ad­‹r * a ) 1191 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 1192  a2dp_£rv” * £rv” = li¡ -> d©a ; 1194 ià( £rv” -> ad­‹r =ð a ) 1195  £rv” ; 1198  NULL ; 1199 } } 1201  a2dp_£rv” * $a2dp_£rv”_»gi¡” ( btd_ad­‹r * ad­‹r ) 1203  a2dp_£rv” * £rv” ; 1205 £rv” = `g_Ãw0 ( a2dp_£rv” , 1); 1206 £rv” -> ad­‹r = `btd_ad­‹r_»f (adapter); 1207 £rv”s = `g_¦i¡_­³nd (£rv”s, £rv” ); 1209  £rv” ; 1210 } } 1212  $a2dp_uÄegi¡”_£p ( a2dp_£p * £p ) 1214 ià( £p -> de¡roy ) { 1215 £p -> `de¡roy (£p-> u£r_d©a ); 1216 £p -> ’dpošt = NULL ; 1219 `avd_uÄegi¡”_£p ( £p -> l£p ); 1220 `g_ä“ ( £p ); 1221 } } 1223  $a2dp_£rv”_uÄegi¡” ( a2dp_£rv” * £rv” ) 1225 £rv”s = `g_¦i¡_»move (£rv”s, £rv” ); 1226 `btd_ad­‹r_uÄef ( £rv” -> ad­‹r ); 1227 `g_ä“ ( £rv” ); 1228 } } 1230  a2dp_£p * $a2dp_add_£p ( btd_ad­‹r * ad­‹r , ušt8_t ty³ , 1231 ušt8_t codec , gboÞ—n d–ay_»pÜtšg , 1232  a2dp_’dpošt * ’dpošt , 1233 * u£r_d©a , GDe¡royNÙify de¡roy , 1234 * ”r ) 1236  a2dp_£rv” * £rv” ; 1237  a2dp_£p * £p ; 1238 GSLi¡ ** l ; 1239 ušt32_t * »cÜd_id ; 1240 sdp_»cÜd_t * »cÜd ; 1242 £rv” = `fšd_£rv” ( £rv”s , ad­‹r ); 1243 ià( £rv” =ð NULL ) { 1244 ià( ”r ) 1245 * ”r = - EPROTONOSUPPORT ; 1246  NULL ; 1249 ià( ty³ =ð AVDTP_SEP_TYPE_SINK && ! £rv” -> sšk_’abËd ) { 1250 ià( ”r ) 1251 * ”r = - EPROTONOSUPPORT ; 1252  NULL ; 1255 ià( ty³ =ð AVDTP_SEP_TYPE_SOURCE && ! £rv” -> sourû_’abËd ) { 1256 ià( ”r ) 1257 * ”r = - EPROTONOSUPPORT ; 1258  NULL ; 1261 £p = `g_Ãw0 ( a2dp_£p , 1); 1263 £p -> l£p = `avd_»gi¡”_£p ( ad­‹r , ty³ , 1264 AVDTP_MEDIA_TYPE_AUDIO , codec , 1265 d–ay_»pÜtšg , & ’dpošt_šd , 1266 & cfm , £p ); 1268 ià( £p -> l£p =ð NULL ) { 1269 `g_ä“ ( £p ); 1270 ià( ”r ) 1271 * ”r = - EINVAL ; 1272  NULL ; 1275 £p -> £rv” = server; 1276 £p -> ’dpošt =ƒndpoint; 1277 £p -> codec = codec; 1278 £p -> ty³ =ype; 1279 £p -> d–ay_»pÜtšg = delay_reporting; 1280 £p -> u£r_d©a = user_data; 1281 £p -> de¡roy = destroy; 1283 ià( ty³ =ð AVDTP_SEP_TYPE_SOURCE ) { 1284 l = & £rv” -> sourûs ; 1285 »cÜd_id = & £rv” -> sourû_»cÜd_id ; 1287 l = & £rv” -> sšks ; 1288 »cÜd_id = & £rv” -> sšk_»cÜd_id ; 1291 ià(* »cÜd_id != 0) 1292  add ; 1294 »cÜd = `a2dp_»cÜd ( ty³ ); 1295 ià(! »cÜd ) { 1296 `”rÜ ("Unableo‡llocate‚ew service„ecord"); 1297 `avd_uÄegi¡”_£p ( £p -> l£p ); 1298 `g_ä“ ( £p ); 1299 ià( ”r ) 1300 * ”r = - EINVAL ; 1301  NULL ; 1304 ià( `ad­‹r_£rviû_add ( £rv” -> ad­‹r , »cÜd ) < 0) { 1305 `”rÜ ("Unableo„egister A2DP service„ecord"); 1306 `sdp_»cÜd_ä“ ( »cÜd ); 1307 `avd_uÄegi¡”_£p ( £p -> l£p ); 1308 `g_ä“ ( £p ); 1309 ià( ”r ) 1310 * ”r = - EINVAL ; 1311  NULL ; 1313 * »cÜd_id = »cÜd -> hªdË ; 1315 add : 1316 * l = `g_¦i¡_­³nd (*l, £p ); 1318 ià( ”r ) 1319 * ”r = 0; 1320  £p ; 1321 } } 1323  $a2dp_»move_£p ( a2dp_£p * £p ) 1325  a2dp_£rv” * £rv” = £p ->server; 1327 ià( £p -> ty³ =ð AVDTP_SEP_TYPE_SOURCE ) { 1328 ià( `g_¦i¡_fšd ( £rv” -> sourûs , £p è=ð NULL ) 1330 £rv” -> sourûs = `g_¦i¡_»move (£rv”->sourûs, £p ); 1331 ià( £rv” -> sourûs =ð NULL && s”v”-> sourû_»cÜd_id ) { 1332 `ad­‹r_£rviû_»move ( £rv” -> ad­‹r , 1333 £rv” -> sourû_»cÜd_id ); 1334 £rv” -> sourû_»cÜd_id = 0; 1337 ià( `g_¦i¡_fšd ( £rv” -> sšks , £p è=ð NULL ) 1339 £rv” -> sšks = `g_¦i¡_»move (£rv”->sšks, £p ); 1340 ià( £rv” -> sšks =ð NULL && s”v”-> sšk_»cÜd_id ) { 1341 `ad­‹r_£rviû_»move ( £rv” -> ad­‹r , 1342 £rv” -> sšk_»cÜd_id ); 1343 £rv” -> sšk_»cÜd_id = 0; 1347 ià( £p -> locked ) 1350 `a2dp_uÄegi¡”_£p ( £p ); 1351 } } 1353  $£Ëù_cb ( a2dp_£tup * £tup , * »t ,  size ) 1355  avd_£rviû_ÿ·bž™y * medŸ_Œª¥Üt , * medŸ_codec ; 1356  avd_medŸ_codec_ÿ·bž™y * ÿp ; 1358 ià( size < 0) { 1359 `DBG ("Endpoint„eplied‡n invalid configuration"); 1360  dÚe ; 1363 medŸ_Œª¥Üt = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_TRANSPORT , 1364 NULL , 0); 1366 £tup -> ÿps = `g_¦i¡_­³nd (£tup->ÿps, medŸ_Œª¥Üt ); 1368 ÿp = `g_m®loc0 ((*ÿpè+ size ); 1369 ÿp -> medŸ_ty³ = AVDTP_MEDIA_TYPE_AUDIO ; 1370 ÿp -> medŸ_codec_ty³ = £tup -> £p -> codec ; 1371 `memýy ( ÿp -> d©a , »t , size ); 1373 medŸ_codec = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_CODEC , ÿp , 1374 (* ÿp è+ size ); 1376 £tup -> ÿps = `g_¦i¡_­³nd (£tup->ÿps, medŸ_codec ); 1377 `g_ä“ ( ÿp ); 1379 dÚe : 1380 `fš®ize_£Ëù ( £tup ); 1381 } } 1383  gboÞ—n $check_v’dÜ_codec ( a2dp_£p * £p , ušt8_t * ÿp , 1384 size_t Ën ) 1386 ušt8_t * ÿ·bž™›s ; 1387 size_t Ëngth ; 1388 a2dp_v’dÜ_codec_t * loÿl_codec ; 1389 a2dp_v’dÜ_codec_t * »mÙe_codec ; 1391 ià( Ën < ( a2dp_v’dÜ_codec_t )) 1392  FALSE ; 1394 »mÙe_codec = ( a2dp_v’dÜ_codec_t *è ÿp ; 1396 ià( £p -> ’dpošt =ð NULL ) 1397  FALSE ; 1399 Ëngth = £p -> ’dpošt -> `g‘_ÿ·bž™›s (sep, 1400 & ÿ·bž™›s , £p -> u£r_d©a ); 1402 ià( Ëngth < ( a2dp_v’dÜ_codec_t )) 1403  FALSE ; 1405 loÿl_codec = ( a2dp_v’dÜ_codec_t *è ÿ·bž™›s ; 1407 ià( `btohl ( »mÙe_codec -> v’dÜ_id è!ðbtohl( loÿl_codec ->vendor_id)) 1408  FALSE ; 1410 ià( `btohs ( »mÙe_codec -> codec_id è!ðbtohs( loÿl_codec ->codec_id)) 1411  FALSE ; 1413 `DBG ("v’dÜ 0x%08x codeø0x%04x", `btohl ( »mÙe_codec -> v’dÜ_id ), 1414 `btohs ( »mÙe_codec -> codec_id )); 1416  TRUE ; 1417 } } 1419  a2dp_£p * $a2dp_fšd_£p ( avd * £ssiÚ , GSLi¡ * li¡ , 1420 cÚ¡ * £nd” ) 1422 #ifdeà __TIZEN_PATCH__ 1423  a2dp_£p * £Ëùed_£p = NULL ; 1426 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 1427  a2dp_£p * £p = li¡ -> d©a ; 1428  avd_»mÙe_£p * r£p ; 1429  avd_medŸ_codec_ÿ·bž™y * ÿp ; 1430  avd_£rviû_ÿ·bž™y * £rviû ; 1433 ià( £nd” ) { 1434 cÚ¡ * Çme ; 1436 ià( £p -> ’dpošt =ð NULL ) 1439 Çme = £p -> ’dpošt -> `g‘_Çme (£p, s•-> u£r_d©a ); 1440 ià( `g_¡rcmp0 ( £nd” , Çme ) != 0) 1444 r£p = `avd_fšd_»mÙe_£p ( £ssiÚ , £p -> l£p ); 1445 ià( r£p =ð NULL ) 1448 £rviû = `avd_g‘_codec ( r£p ); 1449 ÿp = ( avd_medŸ_codec_ÿ·bž™y *è £rviû -> d©a ; 1451 #ifdeà __TIZEN_PATCH__ 1452 ià( ÿp -> medŸ_codec_ty³ !ð A2DP_CODEC_VENDOR ) { 1453 £Ëùed_£p = £p ; 1457 ià( ÿp -> medŸ_codec_ty³ !ð A2DP_CODEC_VENDOR ) 1458  £p ; 1461 ià( `check_v’dÜ_codec ( £p , ÿp -> d©a , 1462 £rviû -> Ëngth - (* ÿp ))) 1463  £p ; 1466 #ifdeà __TIZEN_PATCH__ 1467 ià( £Ëùed_£p ) 1468  £Ëùed_£p ; 1470  NULL ; 1472  NULL ; 1474 } } 1476  a2dp_£p * $a2dp_£Ëù_£p ( avd * £ssiÚ , ušt8_t ty³ , 1477 cÚ¡ * £nd” ) 1479  a2dp_£rv” * £rv” ; 1480  a2dp_£p * £p ; 1481 GSLi¡ * l ; 1483 £rv” = `fšd_£rv” ( £rv”s , `avd_g‘_ad­‹r ( £ssiÚ )); 1484 ià(! £rv” ) 1485  NULL ; 1487 l = ty³ =ð AVDTP_SEP_TYPE_SINK ? £rv” -> sourûs : s”v”-> sšks ; 1490 £p = `a2dp_fšd_£p ( £ssiÚ , l , £nd” ); 1491 ià( £p !ð NULL ) 1492  £p ; 1494  `a2dp_fšd_£p ( £ssiÚ , l , NULL ); 1495 } } 1497  $a2dp_£Ëù_ÿ·bž™›s ( avd * £ssiÚ , 1498 ušt8_t ty³ , cÚ¡ * £nd” , 1499 a2dp_£Ëù_cb_t cb , 1500 * u£r_d©a ) 1502  a2dp_£tup * £tup ; 1503  a2dp_£tup_cb * cb_d©a ; 1504  a2dp_£p * £p ; 1505  avd_£rviû_ÿ·bž™y * £rviû ; 1506  avd_medŸ_codec_ÿ·bž™y * codec ; 1507  ”r ; 1509 £p = `a2dp_£Ëù_£p ( £ssiÚ , ty³ , £nd” ); 1510 ià(! £p ) { 1511 `”rÜ ("Unableo select SEP"); 1515 £tup = `a2dp_£tup_g‘ ( £ssiÚ ); 1516 ià(! £tup ) 1519 cb_d©a = `£tup_cb_Ãw ( £tup ); 1520 cb_d©a -> £Ëù_cb = cb ; 1521 cb_d©a -> u£r_d©a = user_data; 1523 £tup -> £p = sep; 1524 £tup -> r£p = `avd_fšd_»mÙe_£p ( £ssiÚ , £p -> l£p ); 1526 ià( £tup -> r£p =ð NULL ) { 1527 `”rÜ ("Could‚ot find„emote sep"); 1528  çž ; 1531 £rviû = `avd_g‘_codec ( £tup -> r£p ); 1532 codec = ( avd_medŸ_codec_ÿ·bž™y *è £rviû -> d©a ; 1534 ”r = £p -> ’dpošt -> `£Ëù_cÚfigu¿tiÚ (£p, codec -> d©a , 1535 £rviû -> Ëngth - (* codec ), 1536 £tup , 1537 £Ëù_cb , £p -> u£r_d©a ); 1538 ià( ”r == 0) 1539  cb_d©a -> id ; 1541 çž : 1542 `£tup_cb_ä“ ( cb_d©a ); 1545 } } 1547  $a2dp_cÚfig ( avd * £ssiÚ ,  a2dp_£p * £p , 1548 a2dp_cÚfig_cb_t cb , GSLi¡ * ÿps , 1549 * u£r_d©a ) 1551  a2dp_£tup_cb * cb_d©a ; 1552 GSLi¡ * l ; 1553  a2dp_£rv” * £rv” ; 1554  a2dp_£tup * £tup ; 1555  a2dp_£p * tmp ; 1556  avd_£rviû_ÿ·bž™y * ÿp ; 1557  avd_medŸ_codec_ÿ·bž™y * codec_ÿp = NULL ; 1558  posix_”r ; 1560 £rv” = `fšd_£rv” ( £rv”s , `avd_g‘_ad­‹r ( £ssiÚ )); 1561 ià(! £rv” ) 1564  l = ÿps ;† !ð NULL ;† =†-> Ãxt ) { 1565 ÿp = l -> d©a ; 1567 ià( ÿp -> ÿ‹gÜy !ð AVDTP_MEDIA_CODEC ) 1570 codec_ÿp = (*è ÿp -> d©a ; 1574 ià(! codec_ÿp ) 1577 ià( £p -> codec !ð codec_ÿp -> medŸ_codec_ty³ ) 1580 `DBG ("a2dp_cÚfig: s–eùed SEP %p", £p -> l£p ); 1582 £tup = `a2dp_£tup_g‘ ( £ssiÚ ); 1583 ià(! £tup ) 1586 cb_d©a = `£tup_cb_Ãw ( £tup ); 1587 cb_d©a -> cÚfig_cb = cb ; 1588 cb_d©a -> u£r_d©a = user_data; 1590 £tup -> £p = sep; 1591 £tup -> ¡»am = £p ->stream; 1594 ià( £tup -> ÿps != caps) { 1595 `g_¦i¡_ä“_fuÎ ( £tup -> ÿps , g_ä“ ); 1596 £tup -> ÿps = `g_¦i¡_cÝy (caps); 1599  `avd_£p_g‘_¡©e ( £p -> l£p )) { 1600  AVDTP_STATE_IDLE : 1601 ià( £p -> ty³ =ð AVDTP_SEP_TYPE_SOURCE ) 1602 l = £rv” -> sourûs ; 1604 l = £rv” -> sšks ; 1606 ; l !ð NULL ;† =†-> Ãxt ) { 1607 tmp = l -> d©a ; 1608 ià( `avd_has_¡»am ( £ssiÚ , tmp -> ¡»am )) 1612 ià( l !ð NULL ) { 1613 ià( tmp -> locked ) 1614  çžed ; 1615 £tup -> »cÚfigu» = TRUE ; 1616 ià( `avd_þo£ ( £ssiÚ , tmp -> ¡»am , FALSE ) < 0) { 1617 `”rÜ ("avdtp_close failed"); 1618  çžed ; 1623 £tup -> r£p = `avd_fšd_»mÙe_£p ( £ssiÚ , £p -> l£p ); 1624 ià( £tup -> r£p =ð NULL ) { 1625 `”rÜ ("No matching ACP‡nd INT SEPs found"); 1626  çžed ; 1629 posix_”r = `avd_£t_cÚfigu¿tiÚ ( £ssiÚ , £tup -> r£p , 1630 £p -> l£p , ÿps , 1631 & £tup -> ¡»am ); 1632 ià( posix_”r < 0) { 1633 `”rÜ ("avdtp_set_configuration: %s", 1634 `¡»¼Ü (- posix_”r )); 1635  çžed ; 1638  AVDTP_STATE_OPEN : 1639  AVDTP_STATE_STREAMING : 1640 ià( `avd_¡»am_has_ÿ·bž™›s ( £tup -> ¡»am , ÿps )) { 1641 `DBG ("Configuration match:„esuming"); 1642 cb_d©a -> sourû_id = `g_idË_add ( fš®ize_cÚfig , 1643 £tup ); 1644 } ià(! £tup -> »cÚfigu» ) { 1645 £tup -> »cÚfigu» = TRUE ; 1646 ià( `avd_þo£ ( £ssiÚ , £p -> ¡»am , FALSE ) < 0) { 1647 `”rÜ ("avdtp_close failed"); 1648  çžed ; 1652  AVDTP_STATE_CONFIGURED : 1653  AVDTP_STATE_CLOSING : 1654  AVDTP_STATE_ABORTING : 1656 `”rÜ ("SEP in bad state for„equesting‡‚ew stream"); 1657  çžed ; 1660  cb_d©a -> id ; 1662 çžed : 1663 `£tup_cb_ä“ ( cb_d©a ); 1665 } } 1667  $a2dp_»sume ( avd * £ssiÚ ,  a2dp_£p * £p , 1668 a2dp_¡»am_cb_t cb , * u£r_d©a ) 1670  a2dp_£tup_cb * cb_d©a ; 1671  a2dp_£tup * £tup ; 1673 £tup = `a2dp_£tup_g‘ ( £ssiÚ ); 1674 ià(! £tup ) 1677 cb_d©a = `£tup_cb_Ãw ( £tup ); 1678 cb_d©a -> »sume_cb = cb ; 1679 cb_d©a -> u£r_d©a = user_data; 1681 £tup -> £p = sep; 1682 £tup -> ¡»am = £p ->stream; 1684  `avd_£p_g‘_¡©e ( £p -> l£p )) { 1685  AVDTP_STATE_IDLE : 1686  çžed ; 1688  AVDTP_STATE_CONFIGURED : 1689 £tup -> ¡¬t = TRUE ; 1691  AVDTP_STATE_OPEN : 1692 ià( `avd_¡¬t ( £ssiÚ , £p -> ¡»am ) < 0) { 1693 `”rÜ ("avdtp_start failed"); 1694  çžed ; 1696 £p -> ¡¬tšg = TRUE ; 1698  AVDTP_STATE_STREAMING : 1699 ià(! £p -> su¥’dšg && s•-> su¥’d_tim” ) { 1700 `g_sourû_»move ( £p -> su¥’d_tim” ); 1701 £p -> su¥’d_tim” = 0; 1702 `avd_uÄef ( £p -> £ssiÚ ); 1703 £p -> £ssiÚ = NULL ; 1705 ià( £p -> su¥’dšg ) 1706 £tup -> ¡¬t = TRUE ; 1708 cb_d©a -> sourû_id = `g_idË_add ( fš®ize_»sume , 1709 £tup ); 1711  AVDTP_STATE_CLOSING : 1712  AVDTP_STATE_ABORTING : 1714 `”rÜ ("SEP in bad state for„esume"); 1715  çžed ; 1718  cb_d©a -> id ; 1720 çžed : 1721 `£tup_cb_ä“ ( cb_d©a ); 1723 } } 1725  $a2dp_su¥’d ( avd * £ssiÚ ,  a2dp_£p * £p , 1726 a2dp_¡»am_cb_t cb , * u£r_d©a ) 1728  a2dp_£tup_cb * cb_d©a ; 1729  a2dp_£tup * £tup ; 1731 £tup = `a2dp_£tup_g‘ ( £ssiÚ ); 1732 ià(! £tup ) 1735 cb_d©a = `£tup_cb_Ãw ( £tup ); 1736 cb_d©a -> su¥’d_cb = cb ; 1737 cb_d©a -> u£r_d©a = user_data; 1739 £tup -> £p = sep; 1740 £tup -> ¡»am = £p ->stream; 1742  `avd_£p_g‘_¡©e ( £p -> l£p )) { 1743  AVDTP_STATE_IDLE : 1744 `”rÜ ("a2dp_suspend:‚o streamo suspend"); 1745  çžed ; 1747  AVDTP_STATE_OPEN : 1748 cb_d©a -> sourû_id = `g_idË_add ( fš®ize_su¥’d , £tup ); 1750  AVDTP_STATE_STREAMING : 1751 ià( `avd_su¥’d ( £ssiÚ , £p -> ¡»am ) < 0) { 1752 `”rÜ ("avdtp_suspend failed"); 1753  çžed ; 1755 £p -> su¥’dšg = TRUE ; 1757  AVDTP_STATE_CONFIGURED : 1758  AVDTP_STATE_CLOSING : 1759  AVDTP_STATE_ABORTING : 1761 `”rÜ ("SEP in bad state for suspend"); 1762  çžed ; 1765  cb_d©a -> id ; 1767 çžed : 1768 `£tup_cb_ä“ ( cb_d©a ); 1770 } } 1772 gboÞ—n $a2dp_ÿnûl ( id ) 1774 GSLi¡ * ls ; 1776  ls = £tups ;† !ð NULL ;† ð `g_¦i¡_Ãxt (ls)) { 1777  a2dp_£tup * £tup = ls -> d©a ; 1778 GSLi¡ * l ; 1779  l = £tup -> cb ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 1780  a2dp_£tup_cb * cb = l -> d©a ; 1782 ià( cb -> id != id) 1785 `£tup_»f ( £tup ); 1786 `£tup_cb_ä“ ( cb ); 1788 ià(! £tup -> cb ) { 1789 `DBG ("abÜtšg s‘u°%p", £tup ); 1790 `avd_abÜt ( £tup -> £ssiÚ , s‘up-> ¡»am ); 1791  TRUE ; 1794 `£tup_uÄef ( £tup ); 1795  TRUE ; 1799  FALSE ; 1800 } } 1802 gboÞ—n $a2dp_£p_lock ( a2dp_£p * £p ,  avd * £ssiÚ ) 1804 ià( £p -> locked ) 1805  FALSE ; 1807 `DBG ("SEP %°locked", £p -> l£p ); 1808 £p -> locked = TRUE ; 1810  TRUE ; 1811 } } 1813 gboÞ—n $a2dp_£p_uÆock ( a2dp_£p * £p ,  avd * £ssiÚ ) 1815  a2dp_£rv” * £rv” = £p ->server; 1816 avd_¡©e_t ¡©e ; 1817 GSLi¡ * l ; 1819 ¡©e = `avd_£p_g‘_¡©e ( £p -> l£p ); 1821 £p -> locked = FALSE ; 1823 `DBG ("SEP %°uÆocked", £p -> l£p ); 1825 ià( £p -> ty³ =ð AVDTP_SEP_TYPE_SOURCE ) 1826 l = £rv” -> sourûs ; 1828 l = £rv” -> sšks ; 1831 ià( `g_¦i¡_fšd ( l , £p è=ð NULL ) { 1832 `a2dp_uÄegi¡”_£p ( £p ); 1833  TRUE ; 1836 ià(! £p -> ¡»am || ¡©e =ð AVDTP_STATE_IDLE ) 1837  TRUE ; 1839  ¡©e ) { 1840  AVDTP_STATE_OPEN : 1843  AVDTP_STATE_STREAMING : 1844 ià( `avd_su¥’d ( £ssiÚ , £p -> ¡»am ) == 0) 1845 £p -> su¥’dšg = TRUE ; 1847  AVDTP_STATE_IDLE : 1848  AVDTP_STATE_CONFIGURED : 1849  AVDTP_STATE_CLOSING : 1850  AVDTP_STATE_ABORTING : 1855  TRUE ; 1856 } } 1858  avd_¡»am * $a2dp_£p_g‘_¡»am ( a2dp_£p * £p ) 1860  £p -> ¡»am ; 1861 } } 1863  btd_deviû * $a2dp_£tup_g‘_deviû ( a2dp_£tup * £tup ) 1865 ià( £tup -> £ssiÚ =ð NULL ) 1866  NULL ; 1868  `avd_g‘_deviû ( £tup -> £ssiÚ ); 1869 } } 1871  $a2dp_sourû_´obe ( btd_£rviû * £rviû ) 1873  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 1875 `DBG ("·th %s", `deviû_g‘_·th ( dev )); 1877 `sourû_š™ ( £rviû ); 1880 } } 1882  $a2dp_sourû_»move ( btd_£rviû * £rviû ) 1884 `sourû_uÄegi¡” ( £rviû ); 1885 } } 1887  $a2dp_sšk_´obe ( btd_£rviû * £rviû ) 1889  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 1891 `DBG ("·th %s", `deviû_g‘_·th ( dev )); 1893  `sšk_š™ ( £rviû ); 1894 } } 1896  $a2dp_sšk_»move ( btd_£rviû * £rviû ) 1898 `sšk_uÄegi¡” ( £rviû ); 1899 } } 1901  $a2dp_sourû_cÚÃù ( btd_£rviû * £rviû ) 1903  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 1904  btd_ad­‹r * ad­‹r = `deviû_g‘_ad­‹r ( dev ); 1905  a2dp_£rv” * £rv” ; 1906 cÚ¡ * ·th = `deviû_g‘_·th ( dev ); 1908 `DBG ("·th %s", ·th ); 1910 £rv” = `fšd_£rv” ( £rv”s , ad­‹r ); 1911 ià(! £rv” || !£rv”-> sšk_’abËd ) { 1912 `DBG ("Unexpectedƒrror: cannot find server"); 1913  - EPROTONOSUPPORT ; 1917 ià( £rv” -> sšk_»cÜd_id == 0) 1918  - ENOPROTOOPT ; 1920  `sourû_cÚÃù ( £rviû ); 1921 } } 1923  $a2dp_sourû_discÚÃù ( btd_£rviû * £rviû ) 1925  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 1926 cÚ¡ * ·th = `deviû_g‘_·th ( dev ); 1928 `DBG ("·th %s", ·th ); 1930  `sourû_discÚÃù ( £rviû ); 1931 } } 1933  $a2dp_sšk_cÚÃù ( btd_£rviû * £rviû ) 1935  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 1936  btd_ad­‹r * ad­‹r = `deviû_g‘_ad­‹r ( dev ); 1937  a2dp_£rv” * £rv” ; 1938 cÚ¡ * ·th = `deviû_g‘_·th ( dev ); 1940 `DBG ("·th %s", ·th ); 1942 £rv” = `fšd_£rv” ( £rv”s , ad­‹r ); 1943 ià(! £rv” || !£rv”-> sourû_’abËd ) { 1944 `DBG ("Unexpectedƒrror: cannot find server"); 1945  - EPROTONOSUPPORT ; 1949 ià( £rv” -> sourû_»cÜd_id == 0) 1950  - ENOPROTOOPT ; 1952  `sšk_cÚÃù ( £rviû ); 1953 } } 1955  $a2dp_sšk_discÚÃù ( btd_£rviû * £rviû ) 1957  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 1958 cÚ¡ * ·th = `deviû_g‘_·th ( dev ); 1960 `DBG ("·th %s", ·th ); 1962  `sšk_discÚÃù ( £rviû ); 1963 } } 1965  $a2dp_sourû_£rv”_´obe ( btd_´ofže * p , 1966  btd_ad­‹r * ad­‹r ) 1968  a2dp_£rv” * £rv” ; 1970 `DBG ("·th %s", `ad­‹r_g‘_·th ( ad­‹r )); 1972 £rv” = `fšd_£rv” ( £rv”s , ad­‹r ); 1973 ià( £rv” !ð NULL ) 1974  dÚe ; 1976 £rv” = `a2dp_£rv”_»gi¡” ( ad­‹r ); 1977 ià( £rv” =ð NULL ) 1978  - EPROTONOSUPPORT ; 1980 dÚe : 1981 £rv” -> sourû_’abËd = TRUE ; 1984 } } 1986  $a2dp_sourû_£rv”_»move ( btd_´ofže * p , 1987  btd_ad­‹r * ad­‹r ) 1989  a2dp_£rv” * £rv” ; 1991 `DBG ("·th %s", `ad­‹r_g‘_·th ( ad­‹r )); 1993 £rv” = `fšd_£rv” ( £rv”s , ad­‹r ); 1994 ià(! £rv” ) 1997 `g_¦i¡_ä“_fuÎ ( £rv” -> sourûs , 1998 ( GDe¡royNÙify è a2dp_uÄegi¡”_£p ); 2000 ià( £rv” -> sourû_»cÜd_id ) { 2001 `ad­‹r_£rviû_»move ( £rv” -> ad­‹r , 2002 £rv” -> sourû_»cÜd_id ); 2003 £rv” -> sourû_»cÜd_id = 0; 2006 ià( £rv” -> sšk_»cÜd_id ) 2009 `a2dp_£rv”_uÄegi¡” ( £rv” ); 2010 } } 2012  $a2dp_sšk_£rv”_´obe ( btd_´ofže * p , 2013  btd_ad­‹r * ad­‹r ) 2015  a2dp_£rv” * £rv” ; 2017 `DBG ("·th %s", `ad­‹r_g‘_·th ( ad­‹r )); 2019 £rv” = `fšd_£rv” ( £rv”s , ad­‹r ); 2020 ià( £rv” !ð NULL ) 2021  dÚe ; 2023 £rv” = `a2dp_£rv”_»gi¡” ( ad­‹r ); 2024 ià( £rv” =ð NULL ) 2025  - EPROTONOSUPPORT ; 2027 dÚe : 2028 £rv” -> sšk_’abËd = TRUE ; 2031 } } 2033  $a2dp_sšk_£rv”_»move ( btd_´ofže * p , 2034  btd_ad­‹r * ad­‹r ) 2036  a2dp_£rv” * £rv” ; 2038 `DBG ("·th %s", `ad­‹r_g‘_·th ( ad­‹r )); 2040 £rv” = `fšd_£rv” ( £rv”s , ad­‹r ); 2041 ià(! £rv” ) 2044 `g_¦i¡_ä“_fuÎ ( £rv” -> sšks , ( GDe¡royNÙify è a2dp_uÄegi¡”_£p ); 2046 ià( £rv” -> sšk_»cÜd_id ) { 2047 `ad­‹r_£rviû_»move ( £rv” -> ad­‹r , s”v”-> sšk_»cÜd_id ); 2048 £rv” -> sšk_»cÜd_id = 0; 2051 ià( £rv” -> sourû_»cÜd_id ) 2054 `a2dp_£rv”_uÄegi¡” ( £rv” ); 2055 } } 2057  $medŸ_£rv”_´obe ( btd_ad­‹r * ad­‹r ) 2059 `DBG ("·th %s", `ad­‹r_g‘_·th ( ad­‹r )); 2061  `medŸ_»gi¡” ( ad­‹r ); 2062 } } 2064  $medŸ_£rv”_»move ( btd_ad­‹r * ad­‹r ) 2066 `DBG ("·th %s", `ad­‹r_g‘_·th ( ad­‹r )); 2068 `medŸ_uÄegi¡” ( ad­‹r ); 2069 } } 2071  btd_´ofže ga2dp_sourû_´ofže = { 2072 . Çme = "a2dp-source", 2073 . g´iÜ™y = BTD_PROFILE_PRIORITY_MEDIUM , 2075 . g»mÙe_uuid = A2DP_SOURCE_UUID , 2076 . gdeviû_´obe = a2dp_sourû_´obe , 2077 . gdeviû_»move = a2dp_sourû_»move , 2079 . gauto_cÚÃù = Œue , 2080 . gcÚÃù = a2dp_sourû_cÚÃù , 2081 . gdiscÚÃù = a2dp_sourû_discÚÃù , 2083 . gad­‹r_´obe = a2dp_sšk_£rv”_´obe , 2084 . gad­‹r_»move = a2dp_sšk_£rv”_»move , 2087  btd_´ofže ga2dp_sšk_´ofže = { 2088 . Çme = "a2dp-sink", 2089 . g´iÜ™y = BTD_PROFILE_PRIORITY_MEDIUM , 2091 . g»mÙe_uuid = A2DP_SINK_UUID , 2092 . gdeviû_´obe = a2dp_sšk_´obe , 2093 . gdeviû_»move = a2dp_sšk_»move , 2095 . gauto_cÚÃù = Œue , 2096 . gcÚÃù = a2dp_sšk_cÚÃù , 2097 . gdiscÚÃù = a2dp_sšk_discÚÃù , 2099 . gad­‹r_´obe = a2dp_sourû_£rv”_´obe , 2100 . gad­‹r_»move = a2dp_sourû_£rv”_»move , 2103  btd_ad­‹r_driv” gmedŸ_driv” = { 2104 . Çme = "media", 2105 . g´obe = medŸ_£rv”_´obe , 2106 . g»move = medŸ_£rv”_»move , 2109  $a2dp_š™ () 2111 `btd_»gi¡”_ad­‹r_driv” (& medŸ_driv” ); 2112 `btd_´ofže_»gi¡” (& a2dp_sourû_´ofže ); 2113 `btd_´ofže_»gi¡” (& a2dp_sšk_´ofže ); 2116 } } 2118  $a2dp_ex™ () 2120 `btd_uÄegi¡”_ad­‹r_driv” (& medŸ_driv” ); 2121 `btd_´ofže_uÄegi¡” (& a2dp_sourû_´ofže ); 2122 `btd_´ofže_uÄegi¡” (& a2dp_sšk_´ofže ); 2123 } } 2125 BLUETOOTH_PLUGIN_DEFINE ( a2dp , VERSION , BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 2126 a2dp_š™ , a2dp_ex™ ) @profiles/audio/a2dp.h 26  ga2dp_£p ; 27  ga2dp_£tup ; 29 (* ta2dp_’dpošt_£Ëù_t è( ta2dp_£tup * t£tup , * t»t , 30  tsize ); 31 (* ta2dp_’dpošt_cÚfig_t è( ta2dp_£tup * t£tup , tgboÞ—n t»t ); 33  sa2dp_’dpošt { 34 cÚ¡ *(* g‘_Çme è( a2dp_£p * £p , * u£r_d©a ); 35 `size_t (* g‘_ÿ·bž™›s è( a2dp_£p * £p , 36 ušt8_t ** ÿ·bž™›s , 37 * u£r_d©a ); 38 (* £Ëù_cÚfigu¿tiÚ è( a2dp_£p * £p , 39 ušt8_t * ÿ·bž™›s , 40 size_t Ëngth , 41  a2dp_£tup * £tup , 42 a2dp_’dpošt_£Ëù_t cb , 43 * u£r_d©a ); 44 (* £t_cÚfigu¿tiÚ è( a2dp_£p * £p , 45 ušt8_t * cÚfigu¿tiÚ , 46 size_t Ëngth , 47  a2dp_£tup * £tup , 48 a2dp_’dpošt_cÚfig_t cb , 49 * u£r_d©a ); 50 (* þ—r_cÚfigu¿tiÚ è( a2dp_£p * £p , * u£r_d©a ); 51 (* £t_d–ay è( a2dp_£p * £p , ušt16_t d–ay , 52 * u£r_d©a ); 55 (* ta2dp_£Ëù_cb_t è( tavd * t£ssiÚ , 56  ta2dp_£p * t£p , tGSLi¡ * tÿps , 57 * tu£r_d©a ); 58 (* ta2dp_cÚfig_cb_t è( tavd * t£ssiÚ ,  ta2dp_£p * t£p , 59  tavd_¡»am * t¡»am , 60  tavd_”rÜ * t”r , 61 * tu£r_d©a ); 62 (* ta2dp_¡»am_cb_t è( tavd * t£ssiÚ , 63  tavd_”rÜ * t”r , 64 * tu£r_d©a ); 66  a2dp_£p * `a2dp_add_£p ( btd_ad­‹r * ad­‹r , ušt8_t ty³ , 67 ušt8_t codec , gboÞ—n d–ay_»pÜtšg , 68  a2dp_’dpošt * ’dpošt , 69 * u£r_d©a , GDe¡royNÙify de¡roy , 70 * ”r ); 71  `a2dp_»move_£p ( a2dp_£p * £p ); 73  `a2dp_£Ëù_ÿ·bž™›s ( avd * £ssiÚ , 74 ušt8_t ty³ , cÚ¡ * £nd” , 75 a2dp_£Ëù_cb_t cb , 76 * u£r_d©a ); 77  `a2dp_cÚfig ( avd * £ssiÚ ,  a2dp_£p * £p , 78 a2dp_cÚfig_cb_t cb , GSLi¡ * ÿps , 79 * u£r_d©a ); 80  `a2dp_»sume ( avd * £ssiÚ ,  a2dp_£p * £p , 81 a2dp_¡»am_cb_t cb , * u£r_d©a ); 82  `a2dp_su¥’d ( avd * £ssiÚ ,  a2dp_£p * £p , 83 a2dp_¡»am_cb_t cb , * u£r_d©a ); 84 gboÞ—n `a2dp_ÿnûl ( id ); 86 gboÞ—n `a2dp_£p_lock ( a2dp_£p * £p ,  avd * £ssiÚ ); 87 gboÞ—n `a2dp_£p_uÆock ( a2dp_£p * £p ,  avd * £ssiÚ ); 88  avd_¡»am * `a2dp_£p_g‘_¡»am ( a2dp_£p * £p ); 89  btd_deviû * `a2dp_£tup_g‘_deviû ( a2dp_£tup * £tup ); @profiles/audio/avctp.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡dlib.h > 31  ~<¡dšt.h > 32  ~<¡dboÞ.h > 33  ~<”ºo.h > 34  ~ 35  ~ 36  ~ 37  ~ 38  ~ 39  ~ 40  ~<Ãtš‘/š.h > 42  ~ 43  ~ 44  ~ 46  ~ 48  ~"btio/btio.h " 49  ~"lib/uuid.h " 50  ~"¤c/ad­‹r.h " 51  ~"¤c/deviû.h " 53  ~"¤c/log.h " 54  ~"¤c/”rÜ.h " 55  ~"¤c/ušput.h " 57  ~"avùp.h " 58  ~"avrý.h " 63  #AVC_PRESS_TIMEOUT 2 ) 65  #QUIRK_NO_RELEASE 1 << 0 ) 68  #AVCTP_COMMAND 0 ) 69  #AVCTP_RESPONSE 1 ) 72  #AVCTP_PACKET_SINGLE 0 ) 73  #AVCTP_PACKET_START 1 ) 74  #AVCTP_PACKET_CONTINUE 2 ) 75  #AVCTP_PACKET_END 3 ) 77 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 79  savùp_h—d” { 80 ušt8_t mid :1; 81 ušt8_t mü :1; 82 ušt8_t m·ck‘_ty³ :2; 83 ušt8_t mŒª§ùiÚ :4; 84 ušt16_t mpid ; 85 } __©Œibu‹__ (( ·cked )); 86  #AVCTP_HEADER_LENGTH 3 ) 88  savc_h—d” { 89 ušt8_t mcode :4; 90 ušt8_t m_hdr0 :4; 91 ušt8_t msubun™_id :3; 92 ušt8_t msubun™_ty³ :5; 93 ušt8_t mÝcode ; 94 } __©Œibu‹__ (( ·cked )); 96 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 98  savùp_h—d” { 99 ušt8_t mŒª§ùiÚ :4; 100 ušt8_t m·ck‘_ty³ :2; 101 ušt8_t mü :1; 102 ušt8_t mid :1; 103 ušt16_t mpid ; 104 } __©Œibu‹__ (( ·cked )); 105  #AVCTP_HEADER_LENGTH 3 ) 107  savc_h—d” { 108 ušt8_t m_hdr0 :4; 109 ušt8_t mcode :4; 110 ušt8_t msubun™_ty³ :5; 111 ušt8_t msubun™_id :3; 112 ušt8_t mÝcode ; 113 } __©Œibu‹__ (( ·cked )); 119  savùp_¡©e_ÿÎback { 120 avùp_¡©e_cb mcb ; 121  btd_deviû * mdev ; 122  mid ; 123 * mu£r_d©a ; 126  savùp_£rv” { 127  btd_ad­‹r * mad­‹r ; 128 GIOChªÃl * mcÚŒÞ_io ; 129 GIOChªÃl * mbrowsšg_io ; 130 GSLi¡ * m£ssiÚs ; 133  savùp_cÚŒÞ_»q { 134  avùp_³ndšg_»q * mp ; 135 ušt8_t mcode ; 136 ušt8_t msubun™ ; 137 ušt8_t mÝ ; 138 ušt8_t * mÝ”ªds ; 139 ušt16_t mÝ”ªd_couÁ ; 140 avùp_r¥_cb mfunc ; 141 * mu£r_d©a ; 144  savùp_browsšg_»q { 145  avùp_³ndšg_»q * mp ; 146 ušt8_t * mÝ”ªds ; 147 ušt16_t mÝ”ªd_couÁ ; 148 avùp_browsšg_r¥_cb mfunc ; 149 * mu£r_d©a ; 152 (* tavùp_´oûss_cb è(* td©a ); 154  savùp_³ndšg_»q { 155  avùp_chªÃl * chª ; 156 ušt8_t Œª§ùiÚ ; 157 gušt timeout ; 158  ”r ; 159 avùp_´oûss_cb ´oûss ; 160 * d©a ; 161 GDe¡royNÙify de¡roy ; 164  savùp_chªÃl { 165  avùp * £ssiÚ ; 166 GIOChªÃl * io ; 167 ušt8_t Œª§ùiÚ ; 168 gušt w©ch ; 169 ušt16_t imtu ; 170 ušt16_t omtu ; 171 ušt8_t * bufãr ; 172 GSLi¡ * hªdËrs ; 173  avùp_³ndšg_»q * p ; 174 GQueue * queue ; 175 GSLi¡ * ´oûs£d ; 176 gušt ´oûss_id ; 177 GDe¡royNÙify de¡roy ; 180  skey_´es£d { 181 ušt8_t Ý ; 182 gušt tim” ; 185  savùp { 186  avùp_£rv” * £rv” ; 187  btd_deviû * deviû ; 189 avùp_¡©e_t ¡©e ; 191  ušput ; 193 gušt auth_id ; 194  ·s¡hrough_id ; 195  un™_id ; 196  subun™_id ; 198  avùp_chªÃl * cÚŒÞ ; 199  avùp_chªÃl * browsšg ; 201  avùp_·s¡hrough_hªdËr * hªdËr ; 203 ušt8_t key_quœks [256]; 204  key_´es£d key ; 205 boÞ š™ŸtÜ ; 208  savùp_·s¡hrough_hªdËr { 209 avùp_·s¡hrough_cb cb ; 210 * u£r_d©a ; 211  id ; 214  savùp_pdu_hªdËr { 215 ušt8_t Ýcode ; 216 avùp_cÚŒÞ_pdu_cb cb ; 217 * u£r_d©a ; 218  id ; 221  savùp_browsšg_pdu_hªdËr { 222 avùp_browsšg_pdu_cb cb ; 223 * u£r_d©a ; 224  id ; 225 GDe¡royNÙify de¡roy ; 229 cÚ¡ * Çme ; 230 ušt8_t avc ; 231 ušt16_t ušput ; 232 } key_m­ [] = { 233 { "SELECT", AVC_SELECT , KEY_SELECT }, 234 { "UP", AVC_UP , KEY_UP }, 235 { "DOWN", AVC_DOWN , KEY_DOWN }, 236 { "LEFT", AVC_LEFT , KEY_LEFT }, 237 { "RIGHT", AVC_RIGHT , KEY_RIGHT }, 238 { "ROOT MENU", AVC_ROOT_MENU , KEY_MENU }, 239 { "CONTENTS MENU", AVC_CONTENTS_MENU , KEY_PROGRAM }, 240 { "FAVORITE MENU", AVC_FAVORITE_MENU , KEY_FAVORITES }, 241 { "EXIT", AVC_EXIT , KEY_EXIT }, 242 { "ON DEMAND MENU", AVC_ON_DEMAND_MENU , KEY_MENU }, 243 { "APPS MENU", AVC_APPS_MENU , KEY_MENU }, 244 { "0", AVC_0 , KEY_0 }, 245 { "1", AVC_1 , KEY_1 }, 246 { "2", AVC_2 , KEY_2 }, 247 { "3", AVC_3 , KEY_3 }, 248 { "4", AVC_4 , KEY_4 }, 249 { "5", AVC_5 , KEY_5 }, 250 { "6", AVC_6 , KEY_6 }, 251 { "7", AVC_7 , KEY_7 }, 252 { "8", AVC_8 , KEY_8 }, 253 { "9", AVC_9 , KEY_9 }, 254 { "DOT", AVC_DOT , KEY_DOT }, 255 { "ENTER", AVC_ENTER , KEY_ENTER }, 256 { "CHANNEL UP", AVC_CHANNEL_UP , KEY_CHANNELUP }, 257 { "CHANNEL DOWN", AVC_CHANNEL_DOWN , KEY_CHANNELDOWN }, 258 { "CHANNEL PREVIOUS", AVC_CHANNEL_PREVIOUS , KEY_LAST }, 259 { "INPUT SELECT", AVC_INPUT_SELECT , KEY_CONFIG }, 260 { "INFO", AVC_INFO , KEY_INFO }, 261 { "HELP", AVC_HELP , KEY_HELP }, 262 { "POWER", AVC_POWER , KEY_POWER2 }, 263 { "VOLUME UP", AVC_VOLUME_UP , KEY_VOLUMEUP }, 264 { "VOLUME DOWN", AVC_VOLUME_DOWN , KEY_VOLUMEDOWN }, 265 { "MUTE", AVC_MUTE , KEY_MUTE }, 266 { "PLAY", AVC_PLAY , KEY_PLAYCD }, 267 { "STOP", AVC_STOP , KEY_STOPCD }, 268 { "PAUSE", AVC_PAUSE , KEY_PAUSECD }, 269 { "FORWARD", AVC_FORWARD , KEY_NEXTSONG }, 270 { "BACKWARD", AVC_BACKWARD , KEY_PREVIOUSSONG }, 271 { "RECORD", AVC_RECORD , KEY_RECORD }, 272 { "REWIND", AVC_REWIND , KEY_REWIND }, 273 { "FAST FORWARD", AVC_FAST_FORWARD , KEY_FASTFORWARD }, 274 { "LIST", AVC_LIST , KEY_LIST }, 275 { "F1", AVC_F1 , KEY_F1 }, 276 { "F2", AVC_F2 , KEY_F2 }, 277 { "F3", AVC_F3 , KEY_F3 }, 278 { "F4", AVC_F4 , KEY_F4 }, 279 { "F5", AVC_F5 , KEY_F5 }, 280 { "F6", AVC_F6 , KEY_F6 }, 281 { "F7", AVC_F7 , KEY_F7 }, 282 { "F8", AVC_F8 , KEY_F8 }, 283 { "F9", AVC_F9 , KEY_F9 }, 284 { "RED", AVC_RED , KEY_RED }, 285 { "GREEN", AVC_GREEN , KEY_GREEN }, 286 { "BLUE", AVC_BLUE , KEY_BLUE }, 287 { "YELLOW", AVC_YELLOW , KEY_YELLOW }, 288 { NULL } 289 } }; 291  GSLi¡ * gÿÎbacks = NULL ; 292  GSLi¡ * g£rv”s = NULL ; 294  auth_cb ( DBusE¼Ü * d”r , * u£r_d©a ); 295  gboÞ—n ´oûss_queue ( gpoš‹r u£r_d©a ); 296  gboÞ—n avùp_·s¡hrough_r¥ ( avùp * £ssiÚ , ušt8_t code , 297 ušt8_t subun™ , ušt8_ˆ* Ý”ªds , 298 size_t Ý”ªd_couÁ , * u£r_d©a ); 300  $£nd_ev’t ( fd , ušt16_t ty³ , ušt16_ˆ code , št32_t v®ue ) 302  ušput_ev’t ev’t ; 304 `mem£t (& ev’t , 0, (event)); 305 ev’t . ty³ =ype; 306 ev’t . code = code; 307 ev’t . v®ue = value; 309  `wr™e ( fd , & ev’t , (event)); 310 } } 312  $£nd_key ( fd , ušt16_t key ,  ´es£d ) 314 ià( fd < 0) 317 `£nd_ev’t ( fd , EV_KEY , key , ´es£d ); 318 `£nd_ev’t ( fd , EV_SYN , SYN_REPORT , 0); 319 } } 321  gboÞ—n $auto_»Ëa£ ( gpoš‹r u£r_d©a ) 323  avùp * £ssiÚ = u£r_d©a ; 325 £ssiÚ -> key . tim” = 0; 327 `DBG ("AV/C: key…ressimeout"); 329 `£nd_key ( £ssiÚ -> ušput , sessiÚ-> key . Ý , 0); 331  FALSE ; 332 } } 334 #ifdeà __TIZEN_PATCH__ 335  avrý_¡Ý_pos™iÚ_tim” (); 338  size_t $hªdË_·Ãl_·s¡hrough ( avùp * £ssiÚ , 339 ušt8_t Œª§ùiÚ , ušt8_ˆ* code , 340 ušt8_t * subun™ , ušt8_ˆ* Ý”ªds , 341 size_t Ý”ªd_couÁ , * u£r_d©a ) 343  avùp_·s¡hrough_hªdËr * hªdËr = £ssiÚ ->handler; 344 cÚ¡ * ¡©us ; 345  ´es£d , i ; 347 ià(* code !ð AVC_CTYPE_CONTROL || * subun™ !ð AVC_SUBUNIT_PANEL ) { 348 * code = AVC_CTYPE_REJECTED ; 349  Ý”ªd_couÁ ; 352 ià( Ý”ªd_couÁ == 0) 353  dÚe ; 355 ià( Ý”ªds [0] & 0x80) { 356 ¡©us = "released"; 357 ´es£d = 0; 359 ¡©us = "pressed"; 360 ´es£d = 1; 363 ià( £ssiÚ -> key . tim” =ð0 && hªdËr !ð NULL ) { 364 ià( hªdËr -> `cb ( £ssiÚ , Ý”ªds [0] & 0x7F, 365 ´es£d , hªdËr -> u£r_d©a )) 366  dÚe ; 369  i = 0; key_m­ [i]. Çme !ð NULL ; i++) { 370 ušt8_t key_quœks ; 372 ià(( Ý”ªds [0] & 0x7Fè!ð key_m­ [ i ]. avc ) 375 `DBG ("AV/C: % %s", key_m­ [ i ]. Çme , ¡©us ); 377 key_quœks = £ssiÚ ->key_quœks[ key_m­ [ i ]. avc ]; 379 ià( key_quœks & QUIRK_NO_RELEASE ) { 380 ià(! ´es£d ) { 381 `DBG ("AV/C: Ignoring„elease"); 385 `DBG ("AV/C:reating key…ress‡s…ress +„elease"); 386 `£nd_key ( £ssiÚ -> ušput , key_m­ [ i ].uinput, 1); 387 `£nd_key ( £ssiÚ -> ušput , key_m­ [ i ].uinput, 0); 391 ià( ´es£d ) { 392 ià( £ssiÚ -> key . tim” > 0) { 393 `g_sourû_»move ( £ssiÚ -> key . tim” ); 394 #iâdeà __TIZEN_PATCH__ 395 `£nd_key ( £ssiÚ -> ušput , sessiÚ-> key . Ý , 0); 399 £ssiÚ -> key . Ý = key_m­ [ i ]. ušput ; 400 £ssiÚ -> key . tim” = `g_timeout_add_£cÚds ( 401 AVC_PRESS_TIMEOUT , 402 auto_»Ëa£ , 403 £ssiÚ ); 404 #ifdeà __TIZEN_PATCH__ 405 ià( key_m­ [ i ]. avc =ð AVC_REWIND ) 406 `avrý_¡Ý_pos™iÚ_tim” (); 408 } ià( £ssiÚ -> key . tim” > 0) { 409 `g_sourû_»move ( £ssiÚ -> key . tim” ); 410 £ssiÚ -> key . tim” = 0; 413 `£nd_key ( £ssiÚ -> ušput , key_m­ [ i ].ušput, ´es£d ); 417 ià( key_m­ [ i ]. Çme =ð NULL ) { 418 `DBG ("AV/C: unknown button 0x%02X %s", 419 Ý”ªds [0] & 0x7F, ¡©us ); 420 * code = AVC_CTYPE_NOT_IMPLEMENTED ; 421  Ý”ªd_couÁ ; 424 dÚe : 425 * code = AVC_CTYPE_ACCEPTED ; 426  Ý”ªd_couÁ ; 427 } } 429  size_t $hªdË_un™_šfo ( avùp * £ssiÚ , 430 ušt8_t Œª§ùiÚ , ušt8_ˆ* code , 431 ušt8_t * subun™ , ušt8_ˆ* Ý”ªds , 432 size_t Ý”ªd_couÁ , * u£r_d©a ) 434 ià(* code !ð AVC_CTYPE_STATUS ) { 435 * code = AVC_CTYPE_REJECTED ; 439 * code = AVC_CTYPE_STABLE ; 445 ià( Ý”ªd_couÁ >= 1) 446 Ý”ªds [0] = 0x07; 447 ià( Ý”ªd_couÁ >= 2) 448 Ý”ªds [1] = AVC_SUBUNIT_PANEL << 3; 450 `DBG ("replyo AVC_OP_UNITINFO"); 452  Ý”ªd_couÁ ; 453 } } 455  size_t $hªdË_subun™_šfo ( avùp * £ssiÚ , 456 ušt8_t Œª§ùiÚ , ušt8_ˆ* code , 457 ušt8_t * subun™ , ušt8_ˆ* Ý”ªds , 458 size_t Ý”ªd_couÁ , * u£r_d©a ) 460 ià(* code !ð AVC_CTYPE_STATUS ) { 461 * code = AVC_CTYPE_REJECTED ; 465 * code = AVC_CTYPE_STABLE ; 471 ià( Ý”ªd_couÁ >= 2) 472 Ý”ªds [1] = AVC_SUBUNIT_PANEL << 3; 474 `DBG ("replyo AVC_OP_SUBUNITINFO"); 476  Ý”ªd_couÁ ; 477 } } 479  avùp_pdu_hªdËr * $fšd_hªdËr ( GSLi¡ * li¡ , ušt8_t Ýcode ) 481 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 482  avùp_pdu_hªdËr * hªdËr = li¡ -> d©a ; 484 ià( hªdËr -> Ýcode == opcode) 485  hªdËr ; 488  NULL ; 489 } } 491  $³ndšg_de¡roy ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 493  avùp_³ndšg_»q * »q = d©a ; 495 ià( »q -> de¡roy ) 496 »q -> `de¡roy Ôeq-> d©a ); 498 ià( »q -> timeout > 0) 499 `g_sourû_»move ( »q -> timeout ); 501 `g_ä“ ( »q ); 502 } } 504  $avùp_chªÃl_de¡roy ( avùp_chªÃl * chª ) 506 `g_io_chªÃl_shutdown ( chª -> io , TRUE , NULL ); 507 `g_io_chªÃl_uÄef ( chª -> io ); 509 ià( chª -> w©ch ) 510 `g_sourû_»move ( chª -> w©ch ); 512 ià( chª -> p ) 513 `³ndšg_de¡roy ( chª -> p , NULL ); 515 ià( chª -> ´oûss_id > 0) 516 `g_sourû_»move ( chª -> ´oûss_id ); 518 ià( chª -> de¡roy ) 519 chª -> `de¡roy (chan); 521 `g_ä“ ( chª -> bufãr ); 522 `g_queue_fÜ—ch ( chª -> queue , ³ndšg_de¡roy , NULL ); 523 `g_queue_ä“ ( chª -> queue ); 524 `g_¦i¡_fÜ—ch ( chª -> ´oûs£d , ³ndšg_de¡roy , NULL ); 525 `g_¦i¡_ä“ ( chª -> ´oûs£d ); 526 `g_¦i¡_ä“_fuÎ ( chª -> hªdËrs , g_ä“ ); 527 `g_ä“ ( chª ); 528 } } 530  $avùp_discÚÃùed ( avùp * £ssiÚ ) 532  avùp_£rv” * £rv” ; 534 ià(! £ssiÚ ) 537 ià( £ssiÚ -> browsšg ) 538 `avùp_chªÃl_de¡roy ( £ssiÚ -> browsšg ); 540 ià( £ssiÚ -> cÚŒÞ ) 541 `avùp_chªÃl_de¡roy ( £ssiÚ -> cÚŒÞ ); 543 ià( £ssiÚ -> auth_id != 0) { 544 `btd_ÿnûl_authÜiz©iÚ ( £ssiÚ -> auth_id ); 545 £ssiÚ -> auth_id = 0; 548 ià( £ssiÚ -> key . tim” > 0) 549 `g_sourû_»move ( £ssiÚ -> key . tim” ); 551 ià( £ssiÚ -> ušput >= 0) { 552  add»ss [18]; 554 `ba2¡r ( `deviû_g‘_add»ss ( £ssiÚ -> deviû ), add»ss ); 555 `DBG ("AVCTP: closšg ušpuˆfÜ %s", add»ss ); 557 `ioùl ( £ssiÚ -> ušput , UI_DEV_DESTROY ); 558 `þo£ ( £ssiÚ -> ušput ); 559 £ssiÚ -> ušput = -1; 562 £rv” = £ssiÚ ->server; 563 £rv” -> £ssiÚs = `g_¦i¡_»move (£rv”->£ssiÚs, £ssiÚ ); 564 `btd_deviû_uÄef ( £ssiÚ -> deviû ); 565 `g_ä“ ( £ssiÚ ); 566 } } 568  $avùp_£t_¡©e ( avùp * £ssiÚ , avùp_¡©e_t Ãw_¡©e ) 570 GSLi¡ * l ; 571 avùp_¡©e_t Þd_¡©e = £ssiÚ -> ¡©e ; 573 £ssiÚ -> ¡©e = Ãw_¡©e ; 575  l = ÿÎbacks ;† !ð NULL ;† =†-> Ãxt ) { 576  avùp_¡©e_ÿÎback * cb = l -> d©a ; 578 ià( cb -> dev && cb->dev !ð £ssiÚ -> deviû ) 581 cb -> `cb ( £ssiÚ -> deviû , Þd_¡©e , Ãw_¡©e , cb-> u£r_d©a ); 584  Ãw_¡©e ) { 585  AVCTP_STATE_DISCONNECTED : 586 `DBG ("AVCTP Disconnected"); 587 `avùp_discÚÃùed ( £ssiÚ ); 589  AVCTP_STATE_CONNECTING : 590 `DBG ("AVCTP Connecting"); 592  AVCTP_STATE_CONNECTED : 593 `DBG ("AVCTP Connected"); 595  AVCTP_STATE_BROWSING_CONNECTING : 596 `DBG ("AVCTP Browsing Connecting"); 598  AVCTP_STATE_BROWSING_CONNECTED : 599 `DBG ("AVCTP Browsing Connected"); 602 `”rÜ ("Inv®id AVCTP s‹ %d", Ãw_¡©e ); 605 } } 607  $avùp_£nd ( avùp_chªÃl * cÚŒÞ , ušt8_t Œª§ùiÚ , 608 ušt8_t ü , ušt8_ˆ code , 609 ušt8_t subun™ , ušt8_ˆ Ýcode , 610 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ ) 612  avùp_h—d” * avùp ; 613  avc_h—d” * avc ; 614  msghdr msg ; 615  iovec iov [2]; 616  sk , ”r = 0; 618 iov [0]. iov_ba£ = cÚŒÞ -> bufãr ; 619 iov [0]. iov_Ën = (* avùp è+ (* avc ); 620 iov [1]. iov_ba£ = Ý”ªds ; 621 iov [1]. iov_Ën = Ý”ªd_couÁ ; 623 ià( cÚŒÞ -> omtu < ( iov [0]. iov_Ën + iov[1].iov_len)) 624  - EOVERFLOW ; 626 sk = `g_io_chªÃl_unix_g‘_fd ( cÚŒÞ -> io ); 628 `mem£t ( cÚŒÞ -> bufãr , 0, iov [0]. iov_Ën ); 630 avùp = (*è cÚŒÞ -> bufãr ; 631 avc = (*è avùp + (*avctp); 633 avùp -> Œª§ùiÚ =ransaction; 634 avùp -> ·ck‘_ty³ = AVCTP_PACKET_SINGLE ; 635 avùp -> ü = cr; 636 avùp -> pid = `htÚs ( AV_REMOTE_SVCLASS_ID ); 638 avc -> code = code; 639 avc -> subun™_ty³ = subun™ ; 640 avc -> Ýcode = opcode; 642 `mem£t (& msg , 0, (msg)); 643 msg . msg_iov = iov ; 644 msg . msg_iovËn = 2; 646 ià( `£ndmsg ( sk , & msg , 0) < 0) 647 ”r = - ”ºo ; 649  ”r ; 650 } } 652  $avùp_browsšg_£nd ( avùp_chªÃl * browsšg , 653 ušt8_t Œª§ùiÚ , ušt8_ˆ ü , 654 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ ) 656  avùp_h—d” * avùp ; 657  msghdr msg ; 658  iovec iov [2]; 659  sk , ”r = 0; 661 iov [0]. iov_ba£ = browsšg -> bufãr ; 662 iov [0]. iov_Ën = (* avùp ); 663 iov [1]. iov_ba£ = Ý”ªds ; 664 iov [1]. iov_Ën = Ý”ªd_couÁ ; 666 ià( browsšg -> omtu < ( iov [0]. iov_Ën + iov[1].iov_len)) 667  - EOVERFLOW ; 669 sk = `g_io_chªÃl_unix_g‘_fd ( browsšg -> io ); 671 `mem£t ( browsšg -> bufãr , 0, iov [0]. iov_Ën ); 673 avùp = (*è browsšg -> bufãr ; 675 avùp -> Œª§ùiÚ =ransaction; 676 avùp -> ·ck‘_ty³ = AVCTP_PACKET_SINGLE ; 677 avùp -> ü = cr; 678 avùp -> pid = `htÚs ( AV_REMOTE_SVCLASS_ID ); 680 `mem£t (& msg , 0, (msg)); 681 msg . msg_iov = iov ; 682 msg . msg_iovËn = 2; 684 ià( `£ndmsg ( sk , & msg , 0) < 0) 685 ”r = - ”ºo ; 687  ”r ; 688 } } 690  $cÚŒÞ_»q_de¡roy (* d©a ) 692  avùp_cÚŒÞ_»q * »q = d©a ; 693  avùp_³ndšg_»q * p = »q ->p; 694  avùp * £ssiÚ = p -> chª ->session; 696 ià( p -> ”r =ð0 || »q -> func =ð NULL ) 697  dÚe ; 699 »q -> `func ( £ssiÚ , AVC_CTYPE_REJECTED ,„eq-> subun™ , NULL , 0, 700 »q -> u£r_d©a ); 702 dÚe : 703 `g_ä“ ( »q -> Ý”ªds ); 704 `g_ä“ ( »q ); 705 } } 707  $browsšg_»q_de¡roy (* d©a ) 709  avùp_browsšg_»q * »q = d©a ; 710  avùp_³ndšg_»q * p = »q ->p; 711  avùp * £ssiÚ = p -> chª ->session; 713 ià( p -> ”r =ð0 || »q -> func =ð NULL ) 714  dÚe ; 716 »q -> `func ( £ssiÚ , NULL , 0,„eq-> u£r_d©a ); 718 dÚe : 719 `g_ä“ ( »q -> Ý”ªds ); 720 `g_ä“ ( »q ); 721 } } 723  gboÞ—n $»q_timeout ( gpoš‹r u£r_d©a ) 725  avùp_chªÃl * chª = u£r_d©a ; 726  avùp_³ndšg_»q * p = chª ->p; 728 `DBG ("Œª§ùiÚ %u", p -> Œª§ùiÚ ); 730 p -> timeout = 0; 731 p -> ”r = - ETIMEDOUT ; 733 `³ndšg_de¡roy ( p , NULL ); 734 chª -> p = NULL ; 736 ià( chª -> ´oûss_id == 0) 737 chª -> ´oûss_id = `g_idË_add ( ´oûss_queue , chan); 739  FALSE ; 740 } } 742  $´oûss_cÚŒÞ (* d©a ) 744  avùp_cÚŒÞ_»q * »q = d©a ; 745  avùp_³ndšg_»q * p = »q ->p; 747  `avùp_£nd ( p -> chª ,…-> Œª§ùiÚ , AVCTP_COMMAND , »q -> code , 748 »q -> subun™ ,„eq-> Ý , 749 »q -> Ý”ªds ,„eq-> Ý”ªd_couÁ ); 750 } } 752  $´oûss_browsšg (* d©a ) 754  avùp_browsšg_»q * »q = d©a ; 755  avùp_³ndšg_»q * p = »q ->p; 757  `avùp_browsšg_£nd ( p -> chª ,…-> Œª§ùiÚ , AVCTP_COMMAND , 758 »q -> Ý”ªds ,„eq-> Ý”ªd_couÁ ); 759 } } 761  gboÞ—n $´oûss_queue (* u£r_d©a ) 763  avùp_chªÃl * chª = u£r_d©a ; 764  avùp_³ndšg_»q * p = chª ->p; 766 chª -> ´oûss_id = 0; 768 ià( p !ð NULL ) 769  FALSE ; 771 ( p = `g_queue_pÝ_h—d ( chª -> queue ))) { 773 ià( p -> `´oûss Õ-> d©a ) == 0) 776 `³ndšg_de¡roy ( p , NULL ); 779 ià( p =ð NULL ) 780  FALSE ; 782 chª -> p =…; 783 p -> timeout = `g_timeout_add_£cÚds (2, »q_timeout , chª ); 785  FALSE ; 787 } } 789  $cÚŒÞ_»¥Ú£ ( avùp_chªÃl * cÚŒÞ , 790  avùp_h—d” * avùp , 791  avc_h—d” * avc , 792 ušt8_t * Ý”ªds , 793 size_t Ý”ªd_couÁ ) 795  avùp_³ndšg_»q * p = cÚŒÞ ->p; 796  avùp_cÚŒÞ_»q * »q ; 797 GSLi¡ * l ; 799 ià( p &&…-> Œª§ùiÚ =ð avùp ->transaction) { 800 cÚŒÞ -> ´oûs£d = `g_¦i¡_´•’d (cÚŒÞ->´oûs£d, p ); 802 ià( p -> timeout > 0) { 803 `g_sourû_»move ( p -> timeout ); 804 p -> timeout = 0; 807 cÚŒÞ -> p = NULL ; 809 ià( cÚŒÞ -> ´oûss_id == 0) 810 cÚŒÞ -> ´oûss_id = `g_idË_add ( ´oûss_queue , 811 cÚŒÞ ); 814  l = cÚŒÞ -> ´oûs£d ;†;† =†-> Ãxt ) { 815 p = l -> d©a ; 816 »q = p -> d©a ; 818 ià( p -> Œª§ùiÚ !ð avùp ->transaction) 821 ià( »q -> func &&„eq-> `func ( cÚŒÞ -> £ssiÚ , avc -> code , 822 avc -> subun™_ty³ , 823 Ý”ªds , Ý”ªd_couÁ , 824 »q -> u£r_d©a )) 827 cÚŒÞ -> ´oûs£d = `g_¦i¡_»move (cÚŒÞ->´oûs£d, p ); 828 `³ndšg_de¡roy ( p , NULL ); 832 } } 834  $browsšg_»¥Ú£ ( avùp_chªÃl * browsšg , 835  avùp_h—d” * avùp , 836 ušt8_t * Ý”ªds , 837 size_t Ý”ªd_couÁ ) 839  avùp_³ndšg_»q * p = browsšg ->p; 840  avùp_browsšg_»q * »q ; 841 GSLi¡ * l ; 843 ià( p &&…-> Œª§ùiÚ =ð avùp ->transaction) { 844 browsšg -> ´oûs£d = `g_¦i¡_´•’d (browsšg->´oûs£d, p ); 846 ià( p -> timeout > 0) { 847 `g_sourû_»move ( p -> timeout ); 848 p -> timeout = 0; 851 browsšg -> p = NULL ; 853 ià( browsšg -> ´oûss_id == 0) 854 browsšg -> ´oûss_id = `g_idË_add ( ´oûss_queue , 855 browsšg ); 858  l = browsšg -> ´oûs£d ;†;† =†-> Ãxt ) { 859 p = l -> d©a ; 860 »q = p -> d©a ; 862 ià( p -> Œª§ùiÚ !ð avùp ->transaction) 865 ià( »q -> func &&„eq-> `func ( browsšg -> £ssiÚ , Ý”ªds , 866 Ý”ªd_couÁ , »q -> u£r_d©a )) 869 browsšg -> ´oûs£d = `g_¦i¡_»move (browsšg->´oûs£d, p ); 870 `³ndšg_de¡roy ( p , NULL ); 874 } } 876  gboÞ—n $£ssiÚ_browsšg_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 877 gpoš‹r d©a ) 879  avùp * £ssiÚ = d©a ; 880  avùp_chªÃl * browsšg = £ssiÚ ->browsing; 881 ušt8_t * buf = browsšg -> bufãr ; 882 ušt8_t * Ý”ªds ; 883  avùp_h—d” * avùp ; 884  sock , »t , ·ck‘_size , Ý”ªd_couÁ ; 885  avùp_browsšg_pdu_hªdËr * hªdËr ; 887 ià( cÚd & ( G_IO_ERR | G_IO_HUP | G_IO_NVAL )) 888  çžed ; 890 sock = `g_io_chªÃl_unix_g‘_fd ( chª ); 892 »t = `»ad ( sock , buf , browsšg -> imtu ); 893 ià( »t <= 0) 894  çžed ; 896 avùp = ( avùp_h—d” *è buf ; 898 ià( avùp -> ·ck‘_ty³ !ð AVCTP_PACKET_SINGLE ) 899  çžed ; 901 Ý”ªds = buf + AVCTP_HEADER_LENGTH ; 902 »t -ð AVCTP_HEADER_LENGTH ; 903 Ý”ªd_couÁ = »t ; 905 ià( avùp -> ü =ð AVCTP_RESPONSE ) { 906 `browsšg_»¥Ú£ ( browsšg , avùp , Ý”ªds , Ý”ªd_couÁ ); 907  TRUE ; 910 ·ck‘_size = AVCTP_HEADER_LENGTH ; 911 avùp -> ü = AVCTP_RESPONSE ; 913 hªdËr = `g_¦i¡_Áh_d©a ( browsšg -> hªdËrs , 0); 914 ià( hªdËr =ð NULL ) { 915 `DBG ("handler‚ot found"); 916 ·ck‘_size +ð `avrý_browsšg_g’”®_»jeù ( Ý”ªds ); 917  £nd ; 920 ·ck‘_size +ð hªdËr -> `cb ( £ssiÚ , avùp -> Œª§ùiÚ , 921 Ý”ªds , Ý”ªd_couÁ , 922 hªdËr -> u£r_d©a ); 924 £nd : 925 ià( ·ck‘_size != 0) { 926 »t = `wr™e ( sock , buf , ·ck‘_size ); 927 ià( »t !ð ·ck‘_size ) 928  çžed ; 931  TRUE ; 933 çžed : 934 `DBG ("AVCTP Browsing: disconnected"); 935 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_CONNECTED ); 937 ià( £ssiÚ -> browsšg ) { 938 `avùp_chªÃl_de¡roy ( £ssiÚ -> browsšg ); 939 £ssiÚ -> browsšg = NULL ; 942  FALSE ; 943 } } 945  gboÞ—n $£ssiÚ_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , gpoš‹r d©a ) 947  avùp * £ssiÚ = d©a ; 948  avùp_chªÃl * cÚŒÞ = £ssiÚ ->control; 949 ušt8_t * buf = cÚŒÞ -> bufãr ; 950 ušt8_t * Ý”ªds , code , subun™ ; 951  avùp_h—d” * avùp ; 952  avc_h—d” * avc ; 953  »t , ·ck‘_size , Ý”ªd_couÁ , sock ; 954  avùp_pdu_hªdËr * hªdËr ; 956 ià( cÚd & ( G_IO_ERR | G_IO_HUP | G_IO_NVAL )) 957  çžed ; 959 sock = `g_io_chªÃl_unix_g‘_fd ( chª ); 961 »t = `»ad ( sock , buf , cÚŒÞ -> imtu ); 962 ià( »t <= 0) 963  çžed ; 965 ià( »t < AVCTP_HEADER_LENGTH ) { 966 `”rÜ ("Too small AVCTP…acket"); 967  çžed ; 970 avùp = ( avùp_h—d” *è buf ; 972 »t -ð AVCTP_HEADER_LENGTH ; 973 ià( »t < AVC_HEADER_LENGTH ) { 974 `”rÜ ("Too small AVC…acket"); 975  çžed ; 978 avc = ( avc_h—d” *è( buf + AVCTP_HEADER_LENGTH ); 980 »t -ð AVC_HEADER_LENGTH ; 982 Ý”ªds = ( ušt8_t *è avc + AVC_HEADER_LENGTH ; 983 Ý”ªd_couÁ = »t ; 985 ià( avùp -> ü =ð AVCTP_RESPONSE ) { 986 `cÚŒÞ_»¥Ú£ ( cÚŒÞ , avùp , avc , Ý”ªds , Ý”ªd_couÁ ); 987  TRUE ; 990 ·ck‘_size = AVCTP_HEADER_LENGTH + AVC_HEADER_LENGTH ; 991 avùp -> ü = AVCTP_RESPONSE ; 993 ià( avùp -> ·ck‘_ty³ !ð AVCTP_PACKET_SINGLE ) { 994 avc -> code = AVC_CTYPE_NOT_IMPLEMENTED ; 995  dÚe ; 998 ià( avùp -> pid !ð `htÚs ( AV_REMOTE_SVCLASS_ID )) { 999 avùp -> id = 1; 1000 ·ck‘_size = AVCTP_HEADER_LENGTH ; 1001  dÚe ; 1004 hªdËr = `fšd_hªdËr ( cÚŒÞ -> hªdËrs , avc -> Ýcode ); 1005 ià(! hªdËr ) { 1006 `DBG ("hªd˸nÙ found fÜ 0x%02x", avc -> Ýcode ); 1007 ·ck‘_size +ð `avrý_hªdË_v’dÜ_»jeù (& code , Ý”ªds ); 1008 avc -> code = code; 1009  dÚe ; 1012 code = avc ->code; 1013 subun™ = avc -> subun™_ty³ ; 1015 ·ck‘_size +ð hªdËr -> `cb ( £ssiÚ , avùp -> Œª§ùiÚ , & code , 1016 & subun™ , Ý”ªds , Ý”ªd_couÁ , 1017 hªdËr -> u£r_d©a ); 1019 avc -> code = code; 1020 avc -> subun™_ty³ = subun™ ; 1022 dÚe : 1023 »t = `wr™e ( sock , buf , ·ck‘_size ); 1024 ià( »t !ð ·ck‘_size ) 1025  çžed ; 1027  TRUE ; 1029 çžed : 1030 `DBG ("AVCTP sessiÚ %°gÙ discÚÃùed", £ssiÚ ); 1031 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_DISCONNECTED ); 1032  FALSE ; 1033 } } 1035  $ušput_ü—‹ (* Çme ) 1037  ušput_dev dev ; 1038  fd , ”r , i ; 1040 fd = `Ý’ ("/dev/ušput", O_RDWR ); 1041 ià( fd < 0) { 1042 fd = `Ý’ ("/dev/šput/ušput", O_RDWR ); 1043 ià( fd < 0) { 1044 fd = `Ý’ ("/dev/misc/ušput", O_RDWR ); 1045 ià( fd < 0) { 1046 ”r = - ”ºo ; 1047 `”rÜ ("Can't open input device: %s (%d)", 1048 `¡»¼Ü (- ”r ), -err); 1049  ”r ; 1054 `mem£t (& dev , 0, (dev)); 1055 ià( Çme ) 1056 `¡ºýy ( dev . Çme ,‚ame, UINPUT_MAX_NAME_SIZE - 1); 1058 dev . id . bu¡y³ = BUS_BLUETOOTH ; 1059 dev . id . v’dÜ = 0x0000; 1060 dev . id . ´oduù = 0x0000; 1061 dev . id . v”siÚ = 0x0000; 1063 ià( `wr™e ( fd , & dev , (dev)) < 0) { 1064 ”r = - ”ºo ; 1065 `”rÜ ("Can't write device information: %s (%d)", 1066 `¡»¼Ü (- ”r ), -err); 1067 `þo£ ( fd ); 1068  ”r ; 1071 `ioùl ( fd , UI_SET_EVBIT , EV_KEY ); 1072 `ioùl ( fd , UI_SET_EVBIT , EV_REL ); 1073 `ioùl ( fd , UI_SET_EVBIT , EV_REP ); 1074 `ioùl ( fd , UI_SET_EVBIT , EV_SYN ); 1076  i = 0; key_m­ [i]. Çme !ð NULL ; i++) 1077 `ioùl ( fd , UI_SET_KEYBIT , key_m­ [ i ]. ušput ); 1079 ià( `ioùl ( fd , UI_DEV_CREATE , NULL ) < 0) { 1080 ”r = - ”ºo ; 1081 `”rÜ ("Can't create uinput device: %s (%d)", 1082 `¡»¼Ü (- ”r ), -err); 1083 `þo£ ( fd ); 1084  ”r ; 1087  fd ; 1088 } } 1090  $š™_ušput ( avùp * £ssiÚ ) 1092  add»ss [18], Çme [248 + 1]; 1094 `deviû_g‘_Çme ( £ssiÚ -> deviû , Çme , (name)); 1095 ià( `g_¡r_equ® ( Çme , "Nokia CK-20W")) { 1096 £ssiÚ -> key_quœks [ AVC_FORWARD ] |ð QUIRK_NO_RELEASE ; 1097 £ssiÚ -> key_quœks [ AVC_BACKWARD ] |ð QUIRK_NO_RELEASE ; 1098 £ssiÚ -> key_quœks [ AVC_PLAY ] |ð QUIRK_NO_RELEASE ; 1099 £ssiÚ -> key_quœks [ AVC_PAUSE ] |ð QUIRK_NO_RELEASE ; 1102 `ba2¡r ( `deviû_g‘_add»ss ( £ssiÚ -> deviû ), add»ss ); 1103 £ssiÚ -> ušput = `ušput_ü—‹ ( add»ss ); 1104 ià( £ssiÚ -> ušput < 0) 1105 `”rÜ ("AVRCP: fažedØš™ ušpuˆfÜ %s", add»ss ); 1107 `DBG ("AVRCP: ušpuˆš™Ÿlized fÜ %s", add»ss ); 1108 } } 1110  avùp_chªÃl * $avùp_chªÃl_ü—‹ ( avùp * £ssiÚ , 1111 GIOChªÃl * io , 1112 GDe¡royNÙify de¡roy ) 1114  avùp_chªÃl * chª ; 1116 chª = `g_Ãw0 ( avùp_chªÃl , 1); 1117 chª -> £ssiÚ = session; 1118 chª -> io = `g_io_chªÃl_»f (io); 1119 chª -> queue = `g_queue_Ãw (); 1120 chª -> de¡roy = destroy; 1122  chª ; 1123 } } 1125  $hªdËr_ä“ (* d©a ) 1127  avùp_browsšg_pdu_hªdËr * hªdËr = d©a ; 1129 ià( hªdËr -> de¡roy ) 1130 hªdËr -> `de¡roy (hªdËr-> u£r_d©a ); 1132 `g_ä“ ( d©a ); 1133 } } 1135  $avùp_de¡roy_browsšg (* d©a ) 1137  avùp_chªÃl * chª = d©a ; 1139 `g_¦i¡_ä“_fuÎ ( chª -> hªdËrs , hªdËr_ä“ ); 1141 chª -> hªdËrs = NULL ; 1142 } } 1144  $avùp_cÚÃù_browsšg_cb ( GIOChªÃl * chª , GE¼Ü * ”r , 1145 gpoš‹r d©a ) 1147  avùp * £ssiÚ = d©a ; 1148  avùp_chªÃl * browsšg = £ssiÚ ->browsing; 1149  add»ss [18]; 1150 ušt16_t imtu , omtu ; 1151 GE¼Ü * g”r = NULL ; 1153 ià( ”r ) { 1154 `”rÜ ("Browsšg: %s", ”r -> mes§ge ); 1155  çž ; 1158 `bt_io_g‘ ( chª , & g”r , 1159 BT_IO_OPT_DEST , & add»ss , 1160 BT_IO_OPT_IMTU , & imtu , 1161 BT_IO_OPT_OMTU , & omtu , 1162 BT_IO_OPT_INVALID ); 1163 ià( g”r ) { 1164 `”rÜ ("%s", g”r -> mes§ge ); 1165 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 1166 `g_io_chªÃl_uÄef ( chª ); 1167 `g_”rÜ_ä“ ( g”r ); 1168  çž ; 1171 `DBG ("AVCTP Browsšg: cÚÃùedØ%s", add»ss ); 1173 ià( browsšg =ð NULL ) { 1174 browsšg = `avùp_chªÃl_ü—‹ ( £ssiÚ , chª , 1175 avùp_de¡roy_browsšg ); 1176 £ssiÚ -> browsšg = browsing; 1179 browsšg -> imtu = imtu; 1180 browsšg -> omtu = omtu; 1181 browsšg -> bufãr = `g_m®loc0 ( `MAX ( imtu , omtu )); 1182 browsšg -> w©ch = `g_io_add_w©ch ( £ssiÚ ->browsšg-> io , 1183 G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL , 1184 ( GIOFunc è £ssiÚ_browsšg_cb , £ssiÚ ); 1186 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_BROWSING_CONNECTED ); 1189 ià( browsšg -> ´oûss_id =ð0 && ! `g_queue_is_em±y (browsšg-> queue )) 1190 browsšg -> ´oûss_id = `g_idË_add ( ´oûss_queue , browsing); 1194 çž : 1195 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_CONNECTED ); 1197 ià( £ssiÚ -> browsšg ) { 1198 `avùp_chªÃl_de¡roy ( £ssiÚ -> browsšg ); 1199 £ssiÚ -> browsšg = NULL ; 1201 } } 1203  $avùp_cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * ”r , gpoš‹r d©a ) 1205  avùp * £ssiÚ = d©a ; 1206  add»ss [18]; 1207 ušt16_t imtu , omtu ; 1208 GE¼Ü * g”r = NULL ; 1210 ià( ”r ) { 1211 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_DISCONNECTED ); 1212 `”rÜ ("%s", ”r -> mes§ge ); 1216 `bt_io_g‘ ( chª , & g”r , 1217 BT_IO_OPT_DEST , & add»ss , 1218 BT_IO_OPT_IMTU , & imtu , 1219 BT_IO_OPT_IMTU , & omtu , 1220 BT_IO_OPT_INVALID ); 1221 ià( g”r ) { 1222 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_DISCONNECTED ); 1223 `”rÜ ("%s", g”r -> mes§ge ); 1224 `g_”rÜ_ä“ ( g”r ); 1228 `DBG ("AVCTP: cÚÃùedØ%s", add»ss ); 1230 ià( £ssiÚ -> cÚŒÞ =ð NULL ) 1231 £ssiÚ -> cÚŒÞ = `avùp_chªÃl_ü—‹ (£ssiÚ, chª , NULL ); 1233 £ssiÚ -> cÚŒÞ -> imtu = imtu; 1234 £ssiÚ -> cÚŒÞ -> omtu = omtu; 1235 £ssiÚ -> cÚŒÞ -> bufãr = `g_m®loc0 ( `MAX ( imtu , omtu )); 1236 £ssiÚ -> cÚŒÞ -> w©ch = `g_io_add_w©ch (£ssiÚ->cÚŒÞ-> io , 1237 G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL , 1238 ( GIOFunc è £ssiÚ_cb , £ssiÚ ); 1240 £ssiÚ -> ·s¡hrough_id = `avùp_»gi¡”_pdu_hªdËr (session, 1241 AVC_OP_PASSTHROUGH , 1242 hªdË_·Ãl_·s¡hrough , 1243 NULL ); 1244 £ssiÚ -> un™_id = `avùp_»gi¡”_pdu_hªdËr (session, 1245 AVC_OP_UNITINFO , 1246 hªdË_un™_šfo , 1247 NULL ); 1248 £ssiÚ -> subun™_id = `avùp_»gi¡”_pdu_hªdËr (session, 1249 AVC_OP_SUBUNITINFO , 1250 hªdË_subun™_šfo , 1251 NULL ); 1253 `š™_ušput ( £ssiÚ ); 1255 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_CONNECTED ); 1256 } } 1258  $auth_cb ( DBusE¼Ü * d”r , * u£r_d©a ) 1260  avùp * £ssiÚ = u£r_d©a ; 1261 GE¼Ü * ”r = NULL ; 1263 £ssiÚ -> auth_id = 0; 1265 ià( £ssiÚ -> cÚŒÞ -> w©ch > 0) { 1266 `g_sourû_»move ( £ssiÚ -> cÚŒÞ -> w©ch ); 1267 £ssiÚ -> cÚŒÞ -> w©ch = 0; 1270 ià( d”r && `dbus_”rÜ_is_£t (derr)) { 1271 `”rÜ ("Acûs d’›d: %s", d”r -> mes§ge ); 1272 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_DISCONNECTED ); 1276 ià(! `bt_io_acû± ( £ssiÚ -> cÚŒÞ -> io , avùp_cÚÃù_cb , session, 1277 NULL , & ”r )) { 1278 `”rÜ ("bt_io_acû±: %s", ”r -> mes§ge ); 1279 `g_”rÜ_ä“ ( ”r ); 1280 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_DISCONNECTED ); 1282 } } 1284  avùp_£rv” * $fšd_£rv” ( GSLi¡ * li¡ ,  btd_ad­‹r * a ) 1286 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 1287  avùp_£rv” * £rv” = li¡ -> d©a ; 1289 ià( £rv” -> ad­‹r =ð a ) 1290  £rv” ; 1293  NULL ; 1294 } } 1296  avùp * $fšd_£ssiÚ ( GSLi¡ * li¡ ,  btd_deviû * deviû ) 1298 ; li¡ !ð NULL ;†i¡ = `g_¦i¡_Ãxt (list)) { 1299  avùp * s = li¡ -> d©a ; 1301 ià( s -> deviû == device) 1302  s ; 1305  NULL ; 1306 } } 1308  avùp * $avùp_g‘_š‹º® ( btd_deviû * deviû ) 1310  avùp_£rv” * £rv” ; 1311  avùp * £ssiÚ ; 1313 £rv” = `fšd_£rv” ( £rv”s , `deviû_g‘_ad­‹r ( deviû )); 1314 ià( £rv” =ð NULL ) 1315  NULL ; 1317 £ssiÚ = `fšd_£ssiÚ ( £rv” -> £ssiÚs , deviû ); 1318 ià( £ssiÚ ) 1319  £ssiÚ ; 1321 £ssiÚ = `g_Ãw0 ( avùp , 1); 1323 £ssiÚ -> £rv” = server; 1324 £ssiÚ -> deviû = `btd_deviû_»f (device); 1325 £ssiÚ -> ¡©e = AVCTP_STATE_DISCONNECTED ; 1326 £ssiÚ -> ušput = -1; 1328 £rv” -> £ssiÚs = `g_¦i¡_­³nd (£rv”->£ssiÚs, £ssiÚ ); 1330  £ssiÚ ; 1331 } } 1333  $avùp_cÚŒÞ_cÚfœm ( avùp * £ssiÚ , GIOChªÃl * chª , 1334  btd_deviû * dev ) 1336 cÚ¡ bdaddr_t * ¤c ; 1337 cÚ¡ bdaddr_t * d¡ ; 1339 ià( £ssiÚ -> cÚŒÞ !ð NULL ) { 1340 `”rÜ ("Control: Refusing unexpected connect"); 1341 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 1345 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_CONNECTING ); 1346 £ssiÚ -> cÚŒÞ = `avùp_chªÃl_ü—‹ (£ssiÚ, chª , NULL ); 1348 ¤c = `btd_ad­‹r_g‘_add»ss ( `deviû_g‘_ad­‹r ( dev )); 1349 d¡ = `deviû_g‘_add»ss ( dev ); 1351 #ifdeà __TIZEN_PATCH__ 1352 £ssiÚ -> auth_id = `btd_»que¡_authÜiz©iÚ ( ¤c , d¡ , 1353 AVRCP_TARGET_UUID , 1354 auth_cb , £ssiÚ ); 1356 £ssiÚ -> auth_id = `btd_»que¡_authÜiz©iÚ ( ¤c , d¡ , 1357 AVRCP_REMOTE_UUID , 1358 auth_cb , £ssiÚ ); 1360 ià( £ssiÚ -> auth_id == 0) 1361  drÝ ; 1363 £ssiÚ -> cÚŒÞ -> w©ch = `g_io_add_w©ch ( chª , G_IO_ERR | G_IO_HUP | 1364 G_IO_NVAL , £ssiÚ_cb , £ssiÚ ); 1367 drÝ : 1368 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_DISCONNECTED ); 1369 } } 1371  $avùp_browsšg_cÚfœm ( avùp * £ssiÚ , GIOChªÃl * chª , 1372  btd_deviû * dev ) 1374 GE¼Ü * ”r = NULL ; 1376 ià( £ssiÚ -> cÚŒÞ =ð NULL || sessiÚ-> browsšg != NULL) { 1377 `”rÜ ("Browsing: Refusing unexpected connect"); 1378 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 1382 ià( `bt_io_acû± ( chª , avùp_cÚÃù_browsšg_cb , £ssiÚ , NULL , 1383 & ”r )) { 1384 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_BROWSING_CONNECTING ); 1388 `”rÜ ("Browsšg: %s", ”r -> mes§ge ); 1389 `g_”rÜ_ä“ ( ”r ); 1392 } } 1394  $avùp_cÚfœm_cb ( GIOChªÃl * chª , gpoš‹r d©a ) 1396  avùp * £ssiÚ ; 1397  add»ss [18]; 1398 bdaddr_t ¤c , d¡ ; 1399 GE¼Ü * ”r = NULL ; 1400 ušt16_t psm ; 1401  btd_deviû * deviû ; 1403 `bt_io_g‘ ( chª , & ”r , 1404 BT_IO_OPT_SOURCE_BDADDR , & ¤c , 1405 BT_IO_OPT_DEST_BDADDR , & d¡ , 1406 BT_IO_OPT_DEST , add»ss , 1407 BT_IO_OPT_PSM , & psm , 1408 BT_IO_OPT_INVALID ); 1409 ià( ”r ) { 1410 `”rÜ ("%s", ”r -> mes§ge ); 1411 `g_”rÜ_ä“ ( ”r ); 1412 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 1416 `DBG ("AVCTP: incomšg cÚÃù from %s", add»ss ); 1418 deviû = `btd_ad­‹r_fšd_deviû ( `ad­‹r_fšd (& ¤c ), & d¡ , 1419 BDADDR_BREDR ); 1420 ià(! deviû ) 1423 £ssiÚ = `avùp_g‘_š‹º® ( deviû ); 1424 ià( £ssiÚ =ð NULL ) 1427 ià( `btd_deviû_g‘_£rviû ( deviû , AVRCP_REMOTE_UUID è=ð NULL ) 1428 `btd_deviû_add_uuid ( deviû , AVRCP_REMOTE_UUID ); 1430 ià( `btd_deviû_g‘_£rviû ( deviû , AVRCP_TARGET_UUID è=ð NULL ) 1431 `btd_deviû_add_uuid ( deviû , AVRCP_TARGET_UUID ); 1433  psm ) { 1434  AVCTP_CONTROL_PSM : 1435 `avùp_cÚŒÞ_cÚfœm ( £ssiÚ , chª , deviû ); 1437  AVCTP_BROWSING_PSM : 1438 `avùp_browsšg_cÚfœm ( £ssiÚ , chª , deviû ); 1443 } } 1445  GIOChªÃl * $avùp_£rv”_sock‘ (cÚ¡ bdaddr_t * ¤c , gboÞ—n ma¡” , 1446 ušt8_t mode , ušt16_t psm ) 1448 GE¼Ü * ”r = NULL ; 1449 GIOChªÃl * io ; 1451 io = `bt_io_li¡’ ( NULL , avùp_cÚfœm_cb , NULL, 1452 NULL , & ”r , 1453 BT_IO_OPT_SOURCE_BDADDR , ¤c , 1454 BT_IO_OPT_PSM , psm , 1455 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 1456 BT_IO_OPT_MASTER , ma¡” , 1457 BT_IO_OPT_MODE , mode , 1458 BT_IO_OPT_INVALID ); 1459 ià(! io ) { 1460 `”rÜ ("%s", ”r -> mes§ge ); 1461 `g_”rÜ_ä“ ( ”r ); 1464  io ; 1465 } } 1467  $avùp_»gi¡” ( btd_ad­‹r * ad­‹r , gboÞ—n ma¡” ) 1469  avùp_£rv” * £rv” ; 1470 cÚ¡ bdaddr_t * ¤c = `btd_ad­‹r_g‘_add»ss ( ad­‹r ); 1472 £rv” = `g_Ãw0 ( avùp_£rv” , 1); 1474 £rv” -> cÚŒÞ_io = `avùp_£rv”_sock‘ ( ¤c , ma¡” , L2CAP_MODE_BASIC , 1475 AVCTP_CONTROL_PSM ); 1476 ià(! £rv” -> cÚŒÞ_io ) { 1477 `g_ä“ ( £rv” ); 1480 £rv” -> browsšg_io = `avùp_£rv”_sock‘ ( ¤c , ma¡” , L2CAP_MODE_ERTM , 1481 AVCTP_BROWSING_PSM ); 1482 ià(! £rv” -> browsšg_io ) { 1483 ià( £rv” -> cÚŒÞ_io ) { 1484 `g_io_chªÃl_shutdown ( £rv” -> cÚŒÞ_io , TRUE , NULL ); 1485 `g_io_chªÃl_uÄef ( £rv” -> cÚŒÞ_io ); 1486 £rv” -> cÚŒÞ_io = NULL ; 1488 `g_ä“ ( £rv” ); 1492 £rv” -> ad­‹r = `btd_ad­‹r_»f (adapter); 1494 £rv”s = `g_¦i¡_­³nd (£rv”s, £rv” ); 1497 } } 1499  $avùp_uÄegi¡” ( btd_ad­‹r * ad­‹r ) 1501  avùp_£rv” * £rv” ; 1503 £rv” = `fšd_£rv” ( £rv”s , ad­‹r ); 1504 ià(! £rv” ) 1507  £rv” -> £ssiÚs ) 1508 `avùp_discÚÃùed ( £rv” -> £ssiÚs -> d©a ); 1510 £rv”s = `g_¦i¡_»move (£rv”s, £rv” ); 1512 `g_io_chªÃl_shutdown ( £rv” -> browsšg_io , TRUE , NULL ); 1513 `g_io_chªÃl_uÄef ( £rv” -> browsšg_io ); 1514 £rv” -> browsšg_io = NULL ; 1516 `g_io_chªÃl_shutdown ( £rv” -> cÚŒÞ_io , TRUE , NULL ); 1517 `g_io_chªÃl_uÄef ( £rv” -> cÚŒÞ_io ); 1518 `btd_ad­‹r_uÄef ( £rv” -> ad­‹r ); 1519 `g_ä“ ( £rv” ); 1520 } } 1522  avùp_³ndšg_»q * $³ndšg_ü—‹ ( avùp_chªÃl * chª , 1523 avùp_´oûss_cb ´oûss , 1524 * d©a , 1525 GDe¡royNÙify de¡roy ) 1527  avùp_³ndšg_»q * p ; 1528 GSLi¡ * l , * tmp ; 1530 ià(! chª -> ´oûs£d ) 1531  dÚe ; 1533 tmp = `g_¦i¡_cÝy ( chª -> ´oûs£d ); 1536  l = tmp ;†;† = `g_¦i¡_Ãxt (l)) { 1537  avùp_³ndšg_»q * »q = l -> d©a ; 1539 ià( »q -> Œª§ùiÚ =ð chª ->transaction) { 1540 chª -> Œª§ùiÚ ++; 1541 chª -> Œª§ùiÚ %= 16; 1542 tmp = `g_¦i¡_d–‘e_lšk Ñmp, l ); 1543 l = tmp ; 1547 `g_¦i¡_ä“ ( tmp ); 1549 dÚe : 1550 p = `g_Ãw0 ( avùp_³ndšg_»q , 1); 1551 p -> chª = chan; 1552 p -> Œª§ùiÚ = chª ->transaction; 1553 p -> ´oûss =…rocess; 1554 p -> d©a = data; 1555 p -> de¡roy = destroy; 1557 chª -> Œª§ùiÚ ++; 1558 chª -> Œª§ùiÚ %= 16; 1560  p ; 1561 } } 1563  $avùp_£nd_»q ( avùp * £ssiÚ , ušt8_t code , 1564 ušt8_t subun™ , ušt8_ˆ Ýcode , 1565 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 1566 avùp_r¥_cb func , * u£r_d©a ) 1568  avùp_chªÃl * cÚŒÞ = £ssiÚ ->control; 1569  avùp_³ndšg_»q * p ; 1570  avùp_cÚŒÞ_»q * »q ; 1572 ià( cÚŒÞ =ð NULL ) 1573  - ENOTCONN ; 1575 »q = `g_Ãw0 ( avùp_cÚŒÞ_»q , 1); 1576 »q -> code = code; 1577 »q -> subun™ = subunit; 1578 »q -> Ý = Ýcode ; 1579 »q -> func = func; 1580 »q -> Ý”ªds = `g_memdup (Ý”ªds, Ý”ªd_couÁ ); 1581 »q -> Ý”ªd_couÁ = operand_count; 1582 »q -> u£r_d©a = user_data; 1584 p = `³ndšg_ü—‹ ( cÚŒÞ , ´oûss_cÚŒÞ , »q , cÚŒÞ_»q_de¡roy ); 1586 »q -> p =…; 1588 `g_queue_push_ž ( cÚŒÞ -> queue , p ); 1590 ià( cÚŒÞ -> ´oûss_id == 0) 1591 cÚŒÞ -> ´oûss_id = `g_idË_add ( ´oûss_queue , control); 1594 } } 1596  $avùp_£nd_browsšg_»q ( avùp * £ssiÚ , 1597 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 1598 avùp_browsšg_r¥_cb func , * u£r_d©a ) 1600  avùp_chªÃl * browsšg = £ssiÚ ->browsing; 1601  avùp_³ndšg_»q * p ; 1602  avùp_browsšg_»q * »q ; 1604 ià( browsšg =ð NULL ) 1605  - ENOTCONN ; 1607 »q = `g_Ãw0 ( avùp_browsšg_»q , 1); 1608 »q -> func = func; 1609 »q -> Ý”ªds = `g_memdup (Ý”ªds, Ý”ªd_couÁ ); 1610 »q -> Ý”ªd_couÁ = operand_count; 1611 »q -> u£r_d©a = user_data; 1613 p = `³ndšg_ü—‹ ( browsšg , ´oûss_browsšg , »q , 1614 browsšg_»q_de¡roy ); 1616 »q -> p =…; 1618 `g_queue_push_ž ( browsšg -> queue , p ); 1621 ià( browsšg -> w©ch == 0) 1624 ià( browsšg -> ´oûss_id == 0) 1625 browsšg -> ´oûss_id = `g_idË_add ( ´oûss_queue , browsing); 1628 } } 1630 cÚ¡ * $Ý2¡r ( ušt8_t Ý ) 1632  i ; 1634  i = 0; key_m­ [i]. Çme !ð NULL ; i++) { 1635 ià(( Ý & 0x7Fè=ð key_m­ [ i ]. avc ) 1636  key_m­ [ i ]. Çme ; 1640 } } 1642  $avùp_·s¡hrough_´ess ( avùp * £ssiÚ , ušt8_t Ý ) 1644 ušt8_t Ý”ªds [2]; 1646 `DBG ("%s", `Ý2¡r ( Ý )); 1649 Ý”ªds [0] = Ý & 0x7f; 1650 Ý”ªds [1] = 0; 1652  `avùp_£nd_»q ( £ssiÚ , AVC_CTYPE_CONTROL , 1653 AVC_SUBUNIT_PANEL , AVC_OP_PASSTHROUGH , 1654 Ý”ªds , (operands), 1655 avùp_·s¡hrough_r¥ , NULL ); 1656 } } 1658  $avùp_·s¡hrough_»Ëa£ ( avùp * £ssiÚ , ušt8_t Ý ) 1660 ušt8_t Ý”ªds [2]; 1662 `DBG ("%s", `Ý2¡r ( Ý )); 1665 Ý”ªds [0] = Ý | 0x80; 1666 Ý”ªds [1] = 0; 1668  `avùp_£nd_»q ( £ssiÚ , AVC_CTYPE_CONTROL , 1669 AVC_SUBUNIT_PANEL , AVC_OP_PASSTHROUGH , 1670 Ý”ªds , (operands), 1671 NULL , NULL); 1672 } } 1674  gboÞ—n $»³©_timeout ( gpoš‹r u£r_d©a ) 1676  avùp * £ssiÚ = u£r_d©a ; 1678 `avùp_·s¡hrough_»Ëa£ ( £ssiÚ , sessiÚ-> key . Ý ); 1679 `avùp_·s¡hrough_´ess ( £ssiÚ , sessiÚ-> key . Ý ); 1681  TRUE ; 1682 } } 1684  $»Ëa£_´es£d ( avùp * £ssiÚ ) 1686 `avùp_·s¡hrough_»Ëa£ ( £ssiÚ , sessiÚ-> key . Ý ); 1688 ià( £ssiÚ -> key . tim” > 0) 1689 `g_sourû_»move ( £ssiÚ -> key . tim” ); 1691 £ssiÚ -> key . tim” = 0; 1692 } } 1694  boÞ $£t_´es£d ( avùp * £ssiÚ , ušt8_t Ý ) 1696 ià( £ssiÚ -> key . tim” > 0) { 1697 ià( £ssiÚ -> key . Ý == op) 1698  TRUE ; 1699 `»Ëa£_´es£d ( £ssiÚ ); 1702 ià( Ý !ð AVC_FAST_FORWARD && o°!ð AVC_REWIND ) 1703  FALSE ; 1705 £ssiÚ -> key . Ý = op; 1706 £ssiÚ -> key . tim” = `g_timeout_add_£cÚds ( AVC_PRESS_TIMEOUT , 1707 »³©_timeout , 1708 £ssiÚ ); 1710  TRUE ; 1711 } } 1713  gboÞ—n $avùp_·s¡hrough_r¥ ( avùp * £ssiÚ , ušt8_t code , 1714 ušt8_t subun™ , ušt8_ˆ* Ý”ªds , 1715 size_t Ý”ªd_couÁ , * u£r_d©a ) 1717 ià( code !ð AVC_CTYPE_ACCEPTED ) 1718  FALSE ; 1720 ià( `£t_´es£d ( £ssiÚ , Ý”ªds [0])) 1721  FALSE ; 1723 `avùp_·s¡hrough_»Ëa£ ( £ssiÚ , Ý”ªds [0]); 1725  FALSE ; 1726 } } 1728  $avùp_£nd_·s¡hrough ( avùp * £ssiÚ , ušt8_t Ý ) 1731 ià( £ssiÚ -> key . tim” > 0) 1732 `»Ëa£_´es£d ( £ssiÚ ); 1734  `avùp_·s¡hrough_´ess ( £ssiÚ , Ý ); 1735 } } 1737  $avùp_£nd_v’dÜd• ( avùp * £ssiÚ , ušt8_t Œª§ùiÚ , 1738 ušt8_t code , ušt8_ˆ subun™ , 1739 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ ) 1741  avùp_chªÃl * cÚŒÞ = £ssiÚ ->control; 1743 ià( cÚŒÞ =ð NULL ) 1744  - ENOTCONN ; 1746  `avùp_£nd ( cÚŒÞ , Œª§ùiÚ , AVCTP_RESPONSE , code , subun™ , 1747 AVC_OP_VENDORDEP , Ý”ªds , Ý”ªd_couÁ ); 1748 } } 1750  $avùp_£nd_v’dÜd•_»q ( avùp * £ssiÚ , ušt8_t code , 1751 ušt8_t subun™ , ušt8_ˆ* Ý”ªds , 1752 size_t Ý”ªd_couÁ , 1753 avùp_r¥_cb func , * u£r_d©a ) 1755  `avùp_£nd_»q ( £ssiÚ , code , subun™ , AVC_OP_VENDORDEP , 1756 Ý”ªds , Ý”ªd_couÁ , 1757 func , u£r_d©a ); 1758 } } 1760  $avùp_add_¡©e_cb ( btd_deviû * dev , avùp_¡©e_cb cb , 1761 * u£r_d©a ) 1763  avùp_¡©e_ÿÎback * ¡©e_cb ; 1764  id = 0; 1766 ¡©e_cb = `g_Ãw ( avùp_¡©e_ÿÎback , 1); 1767 ¡©e_cb -> cb = cb; 1768 ¡©e_cb -> dev = dev; 1769 ¡©e_cb -> id = ++id; 1770 ¡©e_cb -> u£r_d©a = user_data; 1772 ÿÎbacks = `g_¦i¡_­³nd (ÿÎbacks, ¡©e_cb ); 1774  ¡©e_cb -> id ; 1775 } } 1777 gboÞ—n $avùp_»move_¡©e_cb ( id ) 1779 GSLi¡ * l ; 1781  l = ÿÎbacks ;† !ð NULL ;† =†-> Ãxt ) { 1782  avùp_¡©e_ÿÎback * cb = l -> d©a ; 1783 ià( cb && cb-> id == id) { 1784 ÿÎbacks = `g_¦i¡_»move (ÿÎbacks, cb ); 1785 `g_ä“ ( cb ); 1786  TRUE ; 1790  FALSE ; 1791 } } 1793  $avùp_»gi¡”_·s¡hrough_hªdËr ( avùp * £ssiÚ , 1794 avùp_·s¡hrough_cb cb , 1795 * u£r_d©a ) 1797  avùp_chªÃl * cÚŒÞ = £ssiÚ ->control; 1798  avùp_·s¡hrough_hªdËr * hªdËr ; 1799  id = 0; 1801 ià( cÚŒÞ =ð NULL || £ssiÚ -> hªdËr != NULL) 1804 hªdËr = `g_Ãw ( avùp_·s¡hrough_hªdËr , 1); 1805 hªdËr -> cb = cb; 1806 hªdËr -> u£r_d©a = user_data; 1807 hªdËr -> id = ++id; 1809 £ssiÚ -> hªdËr = handler; 1811  hªdËr -> id ; 1812 } } 1814 boÞ $avùp_uÄegi¡”_·s¡hrough_hªdËr ( id ) 1816 GSLi¡ * l ; 1818  l = £rv”s ;†;† =†-> Ãxt ) { 1819  avùp_£rv” * £rv” = l -> d©a ; 1820 GSLi¡ * s ; 1822  s = £rv” -> £ssiÚs ; s; s = s-> Ãxt ) { 1823  avùp * £ssiÚ = s -> d©a ; 1825 ià( £ssiÚ -> hªdËr =ð NULL ) 1828 ià( £ssiÚ -> hªdËr -> id == id) { 1829 `g_ä“ ( £ssiÚ -> hªdËr ); 1830 £ssiÚ -> hªdËr = NULL ; 1831  Œue ; 1836  çl£ ; 1837 } } 1839  $avùp_»gi¡”_pdu_hªdËr ( avùp * £ssiÚ , ušt8_t Ýcode , 1840 avùp_cÚŒÞ_pdu_cb cb , 1841 * u£r_d©a ) 1843  avùp_chªÃl * cÚŒÞ = £ssiÚ ->control; 1844  avùp_pdu_hªdËr * hªdËr ; 1845  id = 0; 1847 ià( cÚŒÞ =ð NULL ) 1850 hªdËr = `fšd_hªdËr ( cÚŒÞ -> hªdËrs , Ýcode ); 1851 ià( hªdËr ) 1854 hªdËr = `g_Ãw ( avùp_pdu_hªdËr , 1); 1855 hªdËr -> Ýcode = opcode; 1856 hªdËr -> cb = cb; 1857 hªdËr -> u£r_d©a = user_data; 1858 hªdËr -> id = ++id; 1860 cÚŒÞ -> hªdËrs = `g_¦i¡_­³nd (cÚŒÞ->hªdËrs, hªdËr ); 1862  hªdËr -> id ; 1863 } } 1865  $avùp_»gi¡”_browsšg_pdu_hªdËr ( avùp * £ssiÚ , 1866 avùp_browsšg_pdu_cb cb , 1867 * u£r_d©a , 1868 GDe¡royNÙify de¡roy ) 1870  avùp_chªÃl * browsšg = £ssiÚ ->browsing; 1871  avùp_browsšg_pdu_hªdËr * hªdËr ; 1872  id = 0; 1874 ià( browsšg =ð NULL ) 1877 ià( browsšg -> hªdËrs !ð NULL ) 1880 hªdËr = `g_Ãw ( avùp_browsšg_pdu_hªdËr , 1); 1881 hªdËr -> cb = cb; 1882 hªdËr -> u£r_d©a = user_data; 1883 hªdËr -> id = ++id; 1884 hªdËr -> de¡roy = destroy; 1886 browsšg -> hªdËrs = `g_¦i¡_­³nd (browsšg->hªdËrs, hªdËr ); 1888  hªdËr -> id ; 1889 } } 1891 gboÞ—n $avùp_uÄegi¡”_pdu_hªdËr ( id ) 1893 GSLi¡ * l ; 1895  l = £rv”s ;†;† =†-> Ãxt ) { 1896  avùp_£rv” * £rv” = l -> d©a ; 1897 GSLi¡ * s ; 1899  s = £rv” -> £ssiÚs ; s; s = s-> Ãxt ) { 1900  avùp * £ssiÚ = s -> d©a ; 1901  avùp_chªÃl * cÚŒÞ = £ssiÚ ->control; 1902 GSLi¡ * h ; 1904 ià( cÚŒÞ =ð NULL ) 1907  h = cÚŒÞ -> hªdËrs ; h; h = h-> Ãxt ) { 1908  avùp_pdu_hªdËr * hªdËr = h -> d©a ; 1910 ià( hªdËr -> id != id) 1913 cÚŒÞ -> hªdËrs = `g_¦i¡_»move ( 1914 cÚŒÞ -> hªdËrs , 1915 hªdËr ); 1916 `g_ä“ ( hªdËr ); 1917  TRUE ; 1922  FALSE ; 1923 } } 1925 gboÞ—n $avùp_uÄegi¡”_browsšg_pdu_hªdËr ( id ) 1927 GSLi¡ * l ; 1929  l = £rv”s ;†;† =†-> Ãxt ) { 1930  avùp_£rv” * £rv” = l -> d©a ; 1931 GSLi¡ * s ; 1933  s = £rv” -> £ssiÚs ; s; s = s-> Ãxt ) { 1934  avùp * £ssiÚ = s -> d©a ; 1935  avùp_chªÃl * browsšg = £ssiÚ ->browsing; 1936 GSLi¡ * h ; 1938 ià( browsšg =ð NULL ) 1941  h = browsšg -> hªdËrs ; h; h = h-> Ãxt ) { 1942  avùp_browsšg_pdu_hªdËr * hªdËr = 1943 h -> d©a ; 1945 ià( hªdËr -> id != id) 1948 browsšg -> hªdËrs = `g_¦i¡_»move ( 1949 browsšg -> hªdËrs , 1950 hªdËr ); 1951 `g_ä“ ( hªdËr ); 1952  TRUE ; 1957  FALSE ; 1958 } } 1960  avùp * $avùp_cÚÃù ( btd_deviû * deviû ) 1962  avùp * £ssiÚ ; 1963 GE¼Ü * ”r = NULL ; 1964 GIOChªÃl * io ; 1965 cÚ¡ bdaddr_t * ¤c ; 1967 £ssiÚ = `avùp_g‘_š‹º® ( deviû ); 1968 ià(! £ssiÚ ) 1969  NULL ; 1971 ià( £ssiÚ -> ¡©e > AVCTP_STATE_DISCONNECTED ) 1972  £ssiÚ ; 1974 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_CONNECTING ); 1976 ¤c = `btd_ad­‹r_g‘_add»ss ( £ssiÚ -> £rv” -> ad­‹r ); 1978 io = `bt_io_cÚÃù ( avùp_cÚÃù_cb , £ssiÚ , NULL , & ”r , 1979 BT_IO_OPT_SOURCE_BDADDR , ¤c , 1980 BT_IO_OPT_DEST_BDADDR , 1981 `deviû_g‘_add»ss ( £ssiÚ -> deviû ), 1982 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 1983 BT_IO_OPT_PSM , AVCTP_CONTROL_PSM , 1984 BT_IO_OPT_INVALID ); 1985 ià( ”r ) { 1986 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_DISCONNECTED ); 1987 `”rÜ ("%s", ”r -> mes§ge ); 1988 `g_”rÜ_ä“ ( ”r ); 1989  NULL ; 1992 £ssiÚ -> cÚŒÞ = `avùp_chªÃl_ü—‹ (£ssiÚ, io , NULL ); 1993 £ssiÚ -> š™ŸtÜ = Œue ; 1994 `g_io_chªÃl_uÄef ( io ); 1996  £ssiÚ ; 1997 } } 1999  $avùp_cÚÃù_browsšg ( avùp * £ssiÚ ) 2001 cÚ¡ bdaddr_t * ¤c ; 2002 GE¼Ü * ”r = NULL ; 2003 GIOChªÃl * io ; 2005 ià( £ssiÚ -> ¡©e !ð AVCTP_STATE_CONNECTED ) 2006  - ENOTCONN ; 2008 ià( £ssiÚ -> browsšg !ð NULL ) 2011 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_BROWSING_CONNECTING ); 2013 ¤c = `btd_ad­‹r_g‘_add»ss ( £ssiÚ -> £rv” -> ad­‹r ); 2015 io = `bt_io_cÚÃù ( avùp_cÚÃù_browsšg_cb , £ssiÚ , NULL , & ”r , 2016 BT_IO_OPT_SOURCE_BDADDR , ¤c , 2017 BT_IO_OPT_DEST_BDADDR , 2018 `deviû_g‘_add»ss ( £ssiÚ -> deviû ), 2019 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 2020 BT_IO_OPT_PSM , AVCTP_BROWSING_PSM , 2021 BT_IO_OPT_MODE , L2CAP_MODE_ERTM , 2022 BT_IO_OPT_INVALID ); 2023 ià( ”r ) { 2024 `”rÜ ("%s", ”r -> mes§ge ); 2025 `g_”rÜ_ä“ ( ”r ); 2026  - EIO ; 2029 £ssiÚ -> browsšg = `avùp_chªÃl_ü—‹ (£ssiÚ, io , 2030 avùp_de¡roy_browsšg ); 2031 `g_io_chªÃl_uÄef ( io ); 2034 } } 2036  $avùp_discÚÃù ( avùp * £ssiÚ ) 2038 ià( £ssiÚ -> ¡©e =ð AVCTP_STATE_DISCONNECTED ) 2041 `avùp_£t_¡©e ( £ssiÚ , AVCTP_STATE_DISCONNECTED ); 2042 } } 2044  avùp * $avùp_g‘ ( btd_deviû * deviû ) 2046  `avùp_g‘_š‹º® ( deviû ); 2047 } } 2049 boÞ $avùp_is_š™ŸtÜ ( avùp * £ssiÚ ) 2051  £ssiÚ -> š™ŸtÜ ; 2052 } } @profiles/audio/avctp.h 25  #AVCTP_CONTROL_PSM 23 ) 26  #AVCTP_BROWSING_PSM 27 ) 28  #AVC_MTU 512 ) 29  #AVC_HEADER_LENGTH 3 ) 32  #AVC_CTYPE_CONTROL 0x0 ) 33  #AVC_CTYPE_STATUS 0x1 ) 34  #AVC_CTYPE_NOTIFY 0x3 ) 35  #AVC_CTYPE_NOT_IMPLEMENTED 0x8 ) 36  #AVC_CTYPE_ACCEPTED 0x9 ) 37  #AVC_CTYPE_REJECTED 0xA ) 38  #AVC_CTYPE_STABLE 0xC ) 39  #AVC_CTYPE_CHANGED 0xD ) 40  #AVC_CTYPE_INTERIM 0xF ) 43  #AVC_OP_VENDORDEP 0x00 ) 44  #AVC_OP_UNITINFO 0x30 ) 45  #AVC_OP_SUBUNITINFO 0x31 ) 46  #AVC_OP_PASSTHROUGH 0x7c ) 49  #AVC_SUBUNIT_PANEL 0x09 ) 52  #AVC_SELECT 0x00 ) 53  #AVC_UP 0x01 ) 54  #AVC_DOWN 0x02 ) 55  #AVC_LEFT 0x03 ) 56  #AVC_RIGHT 0x04 ) 57  #AVC_ROOT_MENU 0x09 ) 58  #AVC_CONTENTS_MENU 0x0b ) 59  #AVC_FAVORITE_MENU 0x0c ) 60  #AVC_EXIT 0x0d ) 61  #AVC_ON_DEMAND_MENU 0x0e ) 62  #AVC_APPS_MENU 0x0f ) 63  #AVC_0 0x20 ) 64  #AVC_1 0x21 ) 65  #AVC_2 0x22 ) 66  #AVC_3 0x23 ) 67  #AVC_4 0x24 ) 68  #AVC_5 0x25 ) 69  #AVC_6 0x26 ) 70  #AVC_7 0x27 ) 71  #AVC_8 0x28 ) 72  #AVC_9 0x29 ) 73  #AVC_DOT 0x2a ) 74  #AVC_ENTER 0x2b ) 75  #AVC_CHANNEL_UP 0x30 ) 76  #AVC_CHANNEL_DOWN 0x31 ) 77  #AVC_CHANNEL_PREVIOUS 0x32 ) 78  #AVC_INPUT_SELECT 0x34 ) 79  #AVC_INFO 0x35 ) 80  #AVC_HELP 0x36 ) 81  #AVC_PAGE_UP 0x37 ) 82  #AVC_PAGE_DOWN 0x38 ) 83  #AVC_LOCK 0x3a ) 84  #AVC_POWER 0x40 ) 85  #AVC_VOLUME_UP 0x41 ) 86  #AVC_VOLUME_DOWN 0x42 ) 87  #AVC_MUTE 0x43 ) 88  #AVC_PLAY 0x44 ) 89  #AVC_STOP 0x45 ) 90  #AVC_PAUSE 0x46 ) 91  #AVC_RECORD 0x47 ) 92  #AVC_REWIND 0x48 ) 93  #AVC_FAST_FORWARD 0x49 ) 94  #AVC_EJECT 0x4a ) 95  #AVC_FORWARD 0x4b ) 96  #AVC_BACKWARD 0x4c ) 97  #AVC_LIST 0x4d ) 98  #AVC_F1 0x71 ) 99  #AVC_F2 0x72 ) 100  #AVC_F3 0x73 ) 101  #AVC_F4 0x74 ) 102  #AVC_F5 0x75 ) 103  #AVC_F6 0x76 ) 104  #AVC_F7 0x77 ) 105  #AVC_F8 0x78 ) 106  #AVC_F9 0x79 ) 107  #AVC_RED 0x7a ) 108  #AVC_GREEN 0x7b ) 109  #AVC_BLUE 0x7c ) 110  #AVC_YELLOW 0x7c ) 112  gavùp ; 115 mAVCTP_STATE_DISCONNECTED = 0, 116 mAVCTP_STATE_CONNECTING , 117 mAVCTP_STATE_CONNECTED , 118 mAVCTP_STATE_BROWSING_CONNECTING , 119 mAVCTP_STATE_BROWSING_CONNECTED 120 } tavùp_¡©e_t ; 122 (* tavùp_¡©e_cb è( tbtd_deviû * tdev , 123 tavùp_¡©e_t tÞd_¡©e , 124 tavùp_¡©e_t tÃw_¡©e , 125 * tu£r_d©a ); 127  $boÞ (* tavùp_·s¡hrough_cb è( tavùp * t£ssiÚ , 128 tušt8_t tÝ , tboÞ t´es£d , 129 * tu£r_d©a ); 130  $size_t (* tavùp_cÚŒÞ_pdu_cb è( tavùp * t£ssiÚ , 131 tušt8_t tŒª§ùiÚ , ušt8_ˆ* tcode , 132 tušt8_t * tsubun™ , ušt8_ˆ* tÝ”ªds , 133 tsize_t tÝ”ªd_couÁ , * tu£r_d©a ); 134  $gboÞ—n (* tavùp_r¥_cb è( tavùp * t£ssiÚ , tušt8_t tcode , 135 tušt8_t tsubun™ , ušt8_ˆ* tÝ”ªds , 136 tsize_t tÝ”ªd_couÁ , * tu£r_d©a ); 137  $gboÞ—n (* tavùp_browsšg_r¥_cb è( tavùp * t£ssiÚ , 138 tušt8_t * tÝ”ªds , tsize_t tÝ”ªd_couÁ , 139 * tu£r_d©a ); 140  $size_t (* tavùp_browsšg_pdu_cb è( tavùp * t£ssiÚ , 141 tušt8_t tŒª§ùiÚ , 142 tušt8_t * tÝ”ªds , tsize_t tÝ”ªd_couÁ , 143 * tu£r_d©a ); 145  `avùp_add_¡©e_cb ( btd_deviû * dev , avùp_¡©e_cb cb , 146 * u£r_d©a ); 147 gboÞ—n `avùp_»move_¡©e_cb ( id ); 149  `avùp_»gi¡” ( btd_ad­‹r * ad­‹r , gboÞ—n ma¡” ); 150  `avùp_uÄegi¡” ( btd_ad­‹r * ad­‹r ); 152  avùp * `avùp_cÚÃù ( btd_deviû * deviû ); 153  avùp * `avùp_g‘ ( btd_deviû * deviû ); 154 boÞ `avùp_is_š™ŸtÜ ( avùp * £ssiÚ ); 155  `avùp_cÚÃù_browsšg ( avùp * £ssiÚ ); 156  `avùp_discÚÃù ( avùp * £ssiÚ ); 158  `avùp_»gi¡”_·s¡hrough_hªdËr ( avùp * £ssiÚ , 159 avùp_·s¡hrough_cb cb , 160 * u£r_d©a ); 161 boÞ `avùp_uÄegi¡”_·s¡hrough_hªdËr ( id ); 163  `avùp_»gi¡”_pdu_hªdËr ( avùp * £ssiÚ , ušt8_t Ýcode , 164 avùp_cÚŒÞ_pdu_cb cb , 165 * u£r_d©a ); 166 gboÞ—n `avùp_uÄegi¡”_pdu_hªdËr ( id ); 168  `avùp_»gi¡”_browsšg_pdu_hªdËr ( avùp * £ssiÚ , 169 avùp_browsšg_pdu_cb cb , 170 * u£r_d©a , 171 GDe¡royNÙify de¡roy ); 172 gboÞ—n `avùp_uÄegi¡”_browsšg_pdu_hªdËr ( id ); 174  `avùp_£nd_·s¡hrough ( avùp * £ssiÚ , ušt8_t Ý ); 175  `avùp_£nd_v’dÜd• ( avùp * £ssiÚ , ušt8_t Œª§ùiÚ , 176 ušt8_t code , ušt8_ˆ subun™ , 177 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ ); 178  `avùp_£nd_v’dÜd•_»q ( avùp * £ssiÚ , ušt8_t code , 179 ušt8_t subun™ , ušt8_ˆ* Ý”ªds , 180 size_t Ý”ªd_couÁ , 181 avùp_r¥_cb func , * u£r_d©a ); 182  `avùp_£nd_browsšg_»q ( avùp * £ssiÚ , 183 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 184 avùp_browsšg_r¥_cb func , * u£r_d©a ); @profiles/audio/avdtp.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dlib.h > 30  ~<¡dio.h > 31  ~<¡dšt.h > 32  ~<¡dboÞ.h > 33  ~<”ºo.h > 34  ~ 35  ~ 37  ~ 38  ~ 39  ~ 41 #ifdeà __TIZEN_PATCH__ 42 #ifdeà __BROADCOM_QOS_PATCH__ 43  ~ 44  ~ 48  ~ 50  ~"¤c/log.h " 52  ~"btio/btio.h " 53  ~"lib/uuid.h " 54  ~"¤c/ad­‹r.h " 55  ~"¤c/deviû.h " 57  ~"avd.h " 58  ~"sšk.h " 59  ~"sourû.h " 61  #AVDTP_PSM 25 ) 63  #MAX_SEID 0x3E ) 65 #iâdeà MAX 66  #MAX ( x , y è((xè> (yè? (xè: (y)) ) 69  #AVDTP_DISCOVER 0x01 ) 70  #AVDTP_GET_CAPABILITIES 0x02 ) 71  #AVDTP_SET_CONFIGURATION 0x03 ) 72  #AVDTP_GET_CONFIGURATION 0x04 ) 73  #AVDTP_RECONFIGURE 0x05 ) 74  #AVDTP_OPEN 0x06 ) 75  #AVDTP_START 0x07 ) 76  #AVDTP_CLOSE 0x08 ) 77  #AVDTP_SUSPEND 0x09 ) 78  #AVDTP_ABORT 0x0A ) 79  #AVDTP_SECURITY_CONTROL 0x0B ) 80  #AVDTP_GET_ALL_CAPABILITIES 0x0C ) 81  #AVDTP_DELAY_REPORT 0x0D ) 83  #AVDTP_PKT_TYPE_SINGLE 0x00 ) 84  #AVDTP_PKT_TYPE_START 0x01 ) 85  #AVDTP_PKT_TYPE_CONTINUE 0x02 ) 86  #AVDTP_PKT_TYPE_END 0x03 ) 88  #AVDTP_MSG_TYPE_COMMAND 0x00 ) 89  #AVDTP_MSG_TYPE_GEN_REJECT 0x01 ) 90  #AVDTP_MSG_TYPE_ACCEPT 0x02 ) 91  #AVDTP_MSG_TYPE_REJECT 0x03 ) 93 #ifdeà __TIZEN_PATCH__ 94  #REQ_TIMEOUT 10 ) 96  #REQ_TIMEOUT 6 ) 98  #ABORT_TIMEOUT 2 ) 99  #DISCONNECT_TIMEOUT 1 ) 100 #ifdeà __TIZEN_PATCH__ 101  #START_TIMEOUT 2 ) 103  #START_TIMEOUT 1 ) 106 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 108  savd_commÚ_h—d” { 109 ušt8_t mmes§ge_ty³ :2; 110 ušt8_t m·ck‘_ty³ :2; 111 ušt8_t mŒª§ùiÚ :4; 112 } __©Œibu‹__ (( ·cked )); 114  savd_sšgË_h—d” { 115 ušt8_t mmes§ge_ty³ :2; 116 ušt8_t m·ck‘_ty³ :2; 117 ušt8_t mŒª§ùiÚ :4; 118 ušt8_t msigÇl_id :6; 119 ušt8_t mrç0 :2; 120 } __©Œibu‹__ (( ·cked )); 122  savd_¡¬t_h—d” { 123 ušt8_t mmes§ge_ty³ :2; 124 ušt8_t m·ck‘_ty³ :2; 125 ušt8_t mŒª§ùiÚ :4; 126 ušt8_t mno_of_·ck‘s ; 127 ušt8_t msigÇl_id :6; 128 ušt8_t mrç0 :2; 129 } __©Œibu‹__ (( ·cked )); 131  savd_cÚtšue_h—d” { 132 ušt8_t mmes§ge_ty³ :2; 133 ušt8_t m·ck‘_ty³ :2; 134 ušt8_t mŒª§ùiÚ :4; 135 } __©Œibu‹__ (( ·cked )); 137  s£id_šfo { 138 ušt8_t mrç0 :1; 139 ušt8_t mšu£ :1; 140 ušt8_t m£id :6; 141 ušt8_t mrç2 :3; 142 ušt8_t mty³ :1; 143 ušt8_t mmedŸ_ty³ :4; 144 } __©Œibu‹__ (( ·cked )); 146  s£id { 147 ušt8_t mrç0 :2; 148 ušt8_t m£id :6; 149 } __©Œibu‹__ (( ·cked )); 151 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 153  savd_commÚ_h—d” { 154 ušt8_t mŒª§ùiÚ :4; 155 ušt8_t m·ck‘_ty³ :2; 156 ušt8_t mmes§ge_ty³ :2; 157 } __©Œibu‹__ (( ·cked )); 159  savd_sšgË_h—d” { 160 ušt8_t mŒª§ùiÚ :4; 161 ušt8_t m·ck‘_ty³ :2; 162 ušt8_t mmes§ge_ty³ :2; 163 ušt8_t mrç0 :2; 164 ušt8_t msigÇl_id :6; 165 } __©Œibu‹__ (( ·cked )); 167  savd_¡¬t_h—d” { 168 ušt8_t mŒª§ùiÚ :4; 169 ušt8_t m·ck‘_ty³ :2; 170 ušt8_t mmes§ge_ty³ :2; 171 ušt8_t mno_of_·ck‘s ; 172 ušt8_t mrç0 :2; 173 ušt8_t msigÇl_id :6; 174 } __©Œibu‹__ (( ·cked )); 176  savd_cÚtšue_h—d” { 177 ušt8_t mŒª§ùiÚ :4; 178 ušt8_t m·ck‘_ty³ :2; 179 ušt8_t mmes§ge_ty³ :2; 180 } __©Œibu‹__ (( ·cked )); 182  s£id_šfo { 183 ušt8_t m£id :6; 184 ušt8_t mšu£ :1; 185 ušt8_t mrç0 :1; 186 ušt8_t mmedŸ_ty³ :4; 187 ušt8_t mty³ :1; 188 ušt8_t mrç2 :3; 189 } __©Œibu‹__ (( ·cked )); 191  s£id { 192 ušt8_t m£id :6; 193 ušt8_t mrç0 :2; 194 } __©Œibu‹__ (( ·cked )); 202  sdiscov”_»¥ { 203  £id_šfo m£ps [0]; 204 } __©Œibu‹__ (( ·cked )); 206  sg‘ÿp_»¥ { 207 ušt8_t mÿps [0]; 208 } __©Œibu‹__ (( ·cked )); 210  s¡¬t_»q { 211  £id mfœ¡_£id ; 212  £id mÙh”_£ids [0]; 213 } __©Œibu‹__ (( ·cked )); 215  ssu¥’d_»q { 216  £id mfœ¡_£id ; 217  £id mÙh”_£ids [0]; 218 } __©Œibu‹__ (( ·cked )); 220  s£id_»j { 221 ušt8_t m”rÜ ; 222 } __©Œibu‹__ (( ·cked )); 224  scÚf_»j { 225 ušt8_t mÿ‹gÜy ; 226 ušt8_t m”rÜ ; 227 } __©Œibu‹__ (( ·cked )); 229 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 231  s£id_»q { 232 ušt8_t mrç0 :2; 233 ušt8_t maý_£id :6; 234 } __©Œibu‹__ (( ·cked )); 236  s£tcÚf_»q { 237 ušt8_t mrç0 :2; 238 ušt8_t maý_£id :6; 239 ušt8_t mrç1 :2; 240 ušt8_t mšt_£id :6; 242 ušt8_t mÿps [0]; 243 } __©Œibu‹__ (( ·cked )); 245  s¡»am_»j { 246 ušt8_t mrç0 :2; 247 ušt8_t maý_£id :6; 248 ušt8_t m”rÜ ; 249 } __©Œibu‹__ (( ·cked )); 251  s»cÚf_»q { 252 ušt8_t mrç0 :2; 253 ušt8_t maý_£id :6; 255 ušt8_t m£rv_ÿp ; 256 ušt8_t m£rv_ÿp_Ën ; 258 ušt8_t mÿps [0]; 259 } __©Œibu‹__ (( ·cked )); 261  sd–ay_»q { 262 ušt8_t mrç0 :2; 263 ušt8_t maý_£id :6; 264 ušt16_t md–ay ; 265 } __©Œibu‹__ (( ·cked )); 267 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 269  s£id_»q { 270 ušt8_t maý_£id :6; 271 ušt8_t mrç0 :2; 272 } __©Œibu‹__ (( ·cked )); 274  s£tcÚf_»q { 275 ušt8_t maý_£id :6; 276 ušt8_t mrç0 :2; 277 ušt8_t mšt_£id :6; 278 ušt8_t mrç1 :2; 280 ušt8_t mÿps [0]; 281 } __©Œibu‹__ (( ·cked )); 283  s¡»am_»j { 284 ušt8_t maý_£id :6; 285 ušt8_t mrç0 :2; 286 ušt8_t m”rÜ ; 287 } __©Œibu‹__ (( ·cked )); 289  s»cÚf_»q { 290 ušt8_t maý_£id :6; 291 ušt8_t mrç0 :2; 293 ušt8_t m£rv_ÿp ; 294 ušt8_t m£rv_ÿp_Ën ; 296 ušt8_t mÿps [0]; 297 } __©Œibu‹__ (( ·cked )); 299  sd–ay_»q { 300 ušt8_t maý_£id :6; 301 ušt8_t mrç0 :2; 302 ušt16_t md–ay ; 303 } __©Œibu‹__ (( ·cked )); 309  sš_buf { 310 gboÞ—n maùive ; 311  mno_of_·ck‘s ; 312 ušt8_t mŒª§ùiÚ ; 313 ušt8_t mmes§ge_ty³ ; 314 ušt8_t msigÇl_id ; 315 ušt8_t mbuf [1024]; 316 ušt8_t md©a_size ; 319  s³ndšg_»q { 320 ušt8_t mŒª§ùiÚ ; 321 ušt8_t msigÇl_id ; 322 * md©a ; 323 size_t md©a_size ; 324  avd_¡»am * m¡»am ; 325 gušt mtimeout ; 326 gboÞ—n mcÞlided ; 329  savd_»mÙe_£p { 330 ušt8_t m£id ; 331 ušt8_t mty³ ; 332 ušt8_t mmedŸ_ty³ ; 333  avd_£rviû_ÿ·bž™y * mcodec ; 334 gboÞ—n md–ay_»pÜtšg ; 335 GSLi¡ * mÿps ; 336  avd_¡»am * m¡»am ; 339  savd_£rv” { 340  btd_ad­‹r * mad­‹r ; 341 GIOChªÃl * mio ; 342 GSLi¡ * m£ps ; 343 GSLi¡ * m£ssiÚs ; 346  savd_loÿl_£p { 347 avd_¡©e_t m¡©e ; 348  avd_¡»am * m¡»am ; 349  £id_šfo mšfo ; 350 ušt8_t mcodec ; 351 gboÞ—n md–ay_»pÜtšg ; 352 GSLi¡ * mÿps ; 353  avd_£p_šd * mšd ; 354  avd_£p_cfm * mcfm ; 355 * mu£r_d©a ; 356  avd_£rv” * m£rv” ; 359  s¡»am_ÿÎback { 360 avd_¡»am_¡©e_cb mcb ; 361 * mu£r_d©a ; 362  mid ; 365  savd_¡©e_ÿÎback { 366 avd_£ssiÚ_¡©e_cb mcb ; 367  btd_deviû * mdev ; 368  mid ; 369 * mu£r_d©a ; 372  sdiscov”_ÿÎback { 373  mid ; 374 avd_discov”_cb_t mcb ; 375 * mu£r_d©a ; 378  savd_¡»am { 379 GIOChªÃl * mio ; 380 ušt16_t mimtu ; 381 ušt16_t momtu ; 382  avd * m£ssiÚ ; 383  avd_loÿl_£p * ml£p ; 384 ušt8_t mr£id ; 385 GSLi¡ * mÿps ; 386 GSLi¡ * mÿÎbacks ; 387  avd_£rviû_ÿ·bž™y * mcodec ; 388 gušt mio_id ; 389 gušt mtim” ; 391 gboÞ—n mÝ’_aý ; 392 gboÞ—n mþo£_št ; 393 gboÞ—n mabÜt_št ; 394 gušt m¡¬t_tim” ; 395 gboÞ—n md–ay_»pÜtšg ; 396 ušt16_t md–ay ; 397 gboÞ—n m¡¬tšg ; 402  savd { 403  m»f ; 405 ušt16_t mv”siÚ ; 407  avd_£rv” * m£rv” ; 408  btd_deviû * mdeviû ; 410 avd_£ssiÚ_¡©e_t m¡©e ; 412 gušt mauth_id ; 414 GIOChªÃl * mio ; 415 gušt mio_id ; 417 GSLi¡ * m£ps ; 419 GSLi¡ * m¡»ams ; 421 GSLi¡ * m»q_queue ; 422 GSLi¡ * m´io_queue ; 424  avd_¡»am * m³ndšg_Ý’ ; 426 ušt16_t mimtu ; 427 ušt16_t momtu ; 429  š_buf mš ; 431 * mbuf ; 433  discov”_ÿÎback * mdiscov” ; 434  ³ndšg_»q * m»q ; 436 gušt mdc_tim” ; 439 gboÞ—n m¡»am_£tup ; 442  GSLi¡ * g£rv”s = NULL ; 444  GSLi¡ * g¡©e_ÿÎbacks = NULL ; 446  £nd_»que¡ ( avd * £ssiÚ , gboÞ—n ´iÜ™y , 447  avd_¡»am * ¡»am , ušt8_t sigÇl_id , 448 * bufãr , size_t size ); 449  gboÞ—n avd_·r£_»¥ ( avd * £ssiÚ , 450  avd_¡»am * ¡»am , 451 ušt8_t Œª§ùiÚ , ušt8_ˆ sigÇl_id , 452 * buf ,  size ); 453  gboÞ—n avd_·r£_»j ( avd * £ssiÚ , 454  avd_¡»am * ¡»am , 455 ušt8_t Œª§ùiÚ , ušt8_ˆ sigÇl_id , 456 * buf ,  size ); 457  ´oûss_queue ( avd * £ssiÚ ); 458  avd_£p_£t_¡©e ( avd * £ssiÚ , 459  avd_loÿl_£p * £p , 460 avd_¡©e_t ¡©e ); 462  avd_£rv” * $fšd_£rv” ( GSLi¡ * li¡ ,  btd_ad­‹r * a ) 464 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 465  avd_£rv” * £rv” = li¡ -> d©a ; 467 ià( £rv” -> ad­‹r =ð a ) 468  £rv” ; 471  NULL ; 472 } } 474 cÚ¡ * $avd_¡©e¡r ( avd_¡©e_t ¡©e ) 476  ¡©e ) { 477  AVDTP_STATE_IDLE : 479  AVDTP_STATE_CONFIGURED : 481  AVDTP_STATE_OPEN : 483  AVDTP_STATE_STREAMING : 485  AVDTP_STATE_CLOSING : 487  AVDTP_STATE_ABORTING : 492 } } 494  gboÞ—n $Œy_£nd ( sk , * d©a , size_t Ën ) 496  ”r ; 499 ”r = `£nd ( sk , d©a , Ën , 0); 500 }  ”r < 0 && ”ºo =ð EINTR ); 502 ià( ”r < 0) { 503 `”rÜ ("£nd: % (%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 504  FALSE ; 505 } ià(( size_t è ”r !ð Ën ) { 506 `”rÜ ("try_send: complete buffer‚ot sent (%d/%zu bytes)", 507 ”r , Ën ); 508  FALSE ; 511  TRUE ; 512 } } 514  gboÞ—n $avd_£nd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 515 ušt8_t mes§ge_ty³ , ušt8_ˆ sigÇl_id , 516 * d©a , size_t Ën ) 518  cÚt_äagm’ts , £Á ; 519  avd_¡¬t_h—d” ¡¬t ; 520  avd_cÚtšue_h—d” cÚt ; 521  sock ; 523 ià( £ssiÚ -> io =ð NULL ) { 524 `”rÜ ("avdtp_send: session is closed"); 525  FALSE ; 528 sock = `g_io_chªÃl_unix_g‘_fd ( £ssiÚ -> io ); 531 ià(( avd_sšgË_h—d” è+ Ën <ð £ssiÚ -> omtu ) { 532  avd_sšgË_h—d” sšgË ; 534 `mem£t (& sšgË , 0, (single)); 536 sšgË . Œª§ùiÚ =ransaction; 537 sšgË . ·ck‘_ty³ = AVDTP_PKT_TYPE_SINGLE ; 538 sšgË . mes§ge_ty³ = message_type; 539 sšgË . sigÇl_id = signal_id; 541 `memýy ( £ssiÚ -> buf , & sšgË , (single)); 542 `memýy ( £ssiÚ -> buf + ( sšgË ), d©a , Ën ); 544  `Œy_£nd ( sock , £ssiÚ -> buf , ( sšgË è+ Ën ); 548 ià( £ssiÚ -> omtu < ( ¡¬t )) { 549 `”rÜ ("Noƒnough spaceo fragment…acket"); 550  FALSE ; 554 cÚt_äagm’ts = ( Ën - ( £ssiÚ -> omtu - ( ¡¬t ))) / 555 ( £ssiÚ -> omtu - ( cÚt )) + 1; 557 `DBG ("%zu by‹ ¥l™ iÁØ%d f¿gm’ts", Ën , cÚt_äagm’ts + 1); 560 `mem£t (& ¡¬t , 0, (start)); 561 ¡¬t . Œª§ùiÚ =ransaction; 562 ¡¬t . ·ck‘_ty³ = AVDTP_PKT_TYPE_START ; 563 ¡¬t . mes§ge_ty³ = message_type; 564 ¡¬t . no_of_·ck‘s = cÚt_äagm’ts + 1; 565 ¡¬t . sigÇl_id = signal_id; 567 `memýy ( £ssiÚ -> buf , & ¡¬t , (start)); 568 `memýy ( £ssiÚ -> buf + ( ¡¬t ), d©a , 569 £ssiÚ -> omtu - ( ¡¬t )); 571 ià(! `Œy_£nd ( sock , £ssiÚ -> buf , sessiÚ-> omtu )) 572  FALSE ; 574 `DBG ("fœ¡…ack‘ w™h %zu by‹ £Á", £ssiÚ -> omtu - ( ¡¬t )); 576 £Á = £ssiÚ -> omtu - ( ¡¬t ); 579  £Á < Ën ) { 580  Ëá , to_cÝy ; 582 Ëá = Ën - £Á ; 583 ià( Ëá + ( cÚt è> £ssiÚ -> omtu ) { 584 cÚt . ·ck‘_ty³ = AVDTP_PKT_TYPE_CONTINUE ; 585 to_cÝy = £ssiÚ -> omtu - ( cÚt ); 586 `DBG ("£ndšg cÚtšuw™h %d by‹s", to_cÝy ); 588 cÚt . ·ck‘_ty³ = AVDTP_PKT_TYPE_END ; 589 to_cÝy = Ëá ; 590 `DBG ("£ndšgƒnd w™h %d by‹s", to_cÝy ); 593 cÚt . Œª§ùiÚ =ransaction; 594 cÚt . mes§ge_ty³ = message_type; 596 `memýy ( £ssiÚ -> buf , & cÚt , (cont)); 597 `memýy ( £ssiÚ -> buf + ( cÚt ), d©a + £Á , to_cÝy ); 599 ià(! `Œy_£nd ( sock , £ssiÚ -> buf , to_cÝy + ( cÚt ))) 600  FALSE ; 602 £Á +ð to_cÝy ; 605  TRUE ; 606 } } 608  $³ndšg_»q_ä“ (* d©a ) 610  ³ndšg_»q * »q = d©a ; 612 ià( »q -> timeout ) 613 `g_sourû_»move ( »q -> timeout ); 614 `g_ä“ ( »q -> d©a ); 615 `g_ä“ ( »q ); 616 } } 618  $þo£_¡»am ( avd_¡»am * ¡»am ) 620  sock ; 622 ià( ¡»am -> io =ð NULL ) 625 sock = `g_io_chªÃl_unix_g‘_fd ( ¡»am -> io ); 627 `shutdown ( sock , SHUT_RDWR ); 629 `g_io_chªÃl_shutdown ( ¡»am -> io , FALSE , NULL ); 631 `g_io_chªÃl_uÄef ( ¡»am -> io ); 632 ¡»am -> io = NULL ; 633 } } 635  gboÞ—n $¡»am_þo£_timeout ( gpoš‹r u£r_d©a ) 637  avd_¡»am * ¡»am = u£r_d©a ; 639 `DBG ("Timed out waiting for…eero closeheransport channel"); 641 ¡»am -> tim” = 0; 643 `þo£_¡»am ( ¡»am ); 645  FALSE ; 646 } } 648  gboÞ—n $¡»am_Ý’_timeout ( gpoš‹r u£r_d©a ) 650  avd_¡»am * ¡»am = u£r_d©a ; 652 `DBG ("Timed out waiting for…eero openheransport channel"); 654 ¡»am -> tim” = 0; 656 ¡»am -> £ssiÚ -> ³ndšg_Ý’ = NULL ; 658 `avd_abÜt ( ¡»am -> £ssiÚ , stream); 660  FALSE ; 661 } } 663  $avd_”rÜ_š™ ( avd_”rÜ * ”r , ušt8_t ÿ‹gÜy ,  id ) 665 ”r -> ÿ‹gÜy = category; 667 ià( ÿ‹gÜy =ð AVDTP_ERRNO ) 668 ”r ->”r. posix_”ºo = id ; 670 ”r ->”r. ”rÜ_code = id ; 671 } } 673 ušt8_t $avd_”rÜ_ÿ‹gÜy ( avd_”rÜ * ”r ) 675  ”r -> ÿ‹gÜy ; 676 } } 678  $avd_”rÜ_”rÜ_code ( avd_”rÜ * ”r ) 680 `as£¹ ( ”r -> ÿ‹gÜy !ð AVDTP_ERRNO ); 681  ”r ->”r. ”rÜ_code ; 682 } } 684  $avd_”rÜ_posix_”ºo ( avd_”rÜ * ”r ) 686 `as£¹ ( ”r -> ÿ‹gÜy =ð AVDTP_ERRNO ); 687  ”r ->”r. posix_”ºo ; 688 } } 690  avd_¡»am * $fšd_¡»am_by_r£id ( avd * £ssiÚ , 691 ušt8_t r£id ) 693 GSLi¡ * l ; 695  l = £ssiÚ -> ¡»ams ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 696  avd_¡»am * ¡»am = l -> d©a ; 698 ià( ¡»am -> r£id ==„seid) 699  ¡»am ; 702  NULL ; 703 } } 705  avd_»mÙe_£p * $fšd_»mÙe_£p ( GSLi¡ * £ps , ušt8_t £id ) 707 GSLi¡ * l ; 709  l = £ps ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 710  avd_»mÙe_£p * £p = l -> d©a ; 712 ià( £p -> £id == seid) 713  £p ; 716  NULL ; 717 } } 719  $avd_£t_¡©e ( avd * £ssiÚ , 720 avd_£ssiÚ_¡©e_t Ãw_¡©e ) 722 GSLi¡ * l ; 723 avd_£ssiÚ_¡©e_t Þd_¡©e = £ssiÚ -> ¡©e ; 725 £ssiÚ -> ¡©e = Ãw_¡©e ; 727  l = ¡©e_ÿÎbacks ;† !ð NULL ;† =†-> Ãxt ) { 728  avd_¡©e_ÿÎback * cb = l -> d©a ; 730 ià( £ssiÚ -> deviû !ð cb -> dev ) 733 cb -> `cb (cb-> dev , £ssiÚ , Þd_¡©e , Ãw_¡©e , cb-> u£r_d©a ); 735 } } 737  $¡»am_ä“ (* d©a ) 739  avd_¡»am * ¡»am = d©a ; 740  avd_»mÙe_£p * r£p ; 742 ¡»am -> l£p -> šfo . šu£ = 0; 743 ¡»am -> l£p ->¡»am = NULL ; 745 r£p = `fšd_»mÙe_£p ( ¡»am -> £ssiÚ -> £ps , sŒ—m-> r£id ); 746 ià( r£p ) 747 r£p -> ¡»am = NULL ; 749 ià( ¡»am -> tim” ) 750 `g_sourû_»move ( ¡»am -> tim” ); 752 ià( ¡»am -> io ) 753 `þo£_¡»am ( ¡»am ); 755 ià( ¡»am -> io_id ) 756 `g_sourû_»move ( ¡»am -> io_id ); 758 `g_¦i¡_ä“_fuÎ ( ¡»am -> ÿÎbacks , g_ä“ ); 759 `g_¦i¡_ä“_fuÎ ( ¡»am -> ÿps , g_ä“ ); 761 `g_ä“ ( ¡»am ); 762 } } 764  gboÞ—n $Œª¥Üt_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 765 gpoš‹r d©a ) 767  avd_¡»am * ¡»am = d©a ; 768  avd_loÿl_£p * £p = ¡»am -> l£p ; 770 ià( ¡»am -> þo£_št && £p -> cfm && s•->cfm-> þo£ ) 771 £p -> cfm -> `þo£ ( ¡»am -> £ssiÚ , s•, sŒ—m, NULL , 772 £p -> u£r_d©a ); 774 ià(!( cÚd & G_IO_NVAL )) 775 `þo£_¡»am ( ¡»am ); 777 ¡»am -> io_id = 0; 779 ià(! ¡»am -> abÜt_št ) 780 `avd_£p_£t_¡©e ( ¡»am -> £ssiÚ , £p , AVDTP_STATE_IDLE ); 782  FALSE ; 783 } } 785  $g‘_£nd_bufãr_size ( sk ) 787  size ; 788 sockËn_t ÝŽ’ = ( size ); 790 ià( `g‘sockÝt ( sk , SOL_SOCKET , SO_SNDBUF , & size , & ÝŽ’ ) < 0) { 791  ”r = - ”ºo ; 792 `”rÜ ("g‘sockÝt(SO_SNDBUFèçžed: % (%d)", `¡»¼Ü (- ”r ), 793 - ”r ); 794  ”r ; 802  size / 2; 803 } } 805  $£t_£nd_bufãr_size ( sk ,  size ) 807 sockËn_t ÝŽ’ = ( size ); 809 ià( `£tsockÝt ( sk , SOL_SOCKET , SO_SNDBUF , & size , ÝŽ’ ) < 0) { 810  ”r = - ”ºo ; 811 `”rÜ ("£tsockÝt(SO_SNDBUFèçžed: % (%d)", `¡»¼Ü (- ”r ), 812 - ”r ); 813  ”r ; 817 } } 819  $hªdË_Œª¥Üt_cÚÃù ( avd * £ssiÚ , GIOChªÃl * io , 820 ušt16_t imtu , ušt16_ˆ omtu ) 822  avd_¡»am * ¡»am = £ssiÚ -> ³ndšg_Ý’ ; 823  avd_loÿl_£p * £p = ¡»am -> l£p ; 824  sk , buf_size , mš_buf_size ; 825 GE¼Ü * ”r = NULL ; 827 £ssiÚ -> ³ndšg_Ý’ = NULL ; 829 ià( ¡»am -> tim” ) { 830 `g_sourû_»move ( ¡»am -> tim” ); 831 ¡»am -> tim” = 0; 834 ià( io =ð NULL ) { 835 ià(! ¡»am -> Ý’_aý && £p -> cfm && s•->cfm-> Ý’ ) { 836  avd_”rÜ ”r ; 837 `avd_”rÜ_š™ (& ”r , AVDTP_ERRNO , EIO ); 838 £p -> cfm -> `Ý’ ( £ssiÚ , s•, NULL , & ”r , 839 £p -> u£r_d©a ); 844 ià( ¡»am -> io =ð NULL ) 845 ¡»am -> io = `g_io_chªÃl_»f (io); 847 ¡»am -> omtu = omtu; 848 ¡»am -> imtu = imtu; 851 ià( £p -> šfo . ty³ !ð AVDTP_SEP_TYPE_SOURCE ) 852  ´oûed ; 854 `bt_io_£t ( ¡»am -> io , & ”r , BT_IO_OPT_FLUSHABLE , TRUE , 855 BT_IO_OPT_INVALID ); 856 ià( ”r !ð NULL ) { 857 `”rÜ ("EÇblšg flushabË…ack‘ çžed: %s", ”r -> mes§ge ); 858 `g_”rÜ_ä“ ( ”r ); 860 `DBG ("Flushable…acketsƒnabled"); 862 sk = `g_io_chªÃl_unix_g‘_fd ( ¡»am -> io ); 863 buf_size = `g‘_£nd_bufãr_size ( sk ); 864 ià( buf_size < 0) 865  ´oûed ; 867 `DBG ("sk %d, omtu %d, s’d bufã¸siz%d", sk , omtu , buf_size ); 868 mš_buf_size = omtu * 2; 869 ià( buf_size < mš_buf_size ) { 870 `DBG ("send buffer sizeo be increassedo %d", 871 mš_buf_size ); 872 `£t_£nd_bufãr_size ( sk , mš_buf_size ); 875 ´oûed : 876 ià(! ¡»am -> Ý’_aý && £p -> cfm && s•->cfm-> Ý’ ) 877 £p -> cfm -> `Ý’ ( £ssiÚ , s•, ¡»am , NULL , s•-> u£r_d©a ); 879 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_OPEN ); 881 ¡»am -> io_id = `g_io_add_w©ch ( io , G_IO_ERR | G_IO_HUP | G_IO_NVAL , 882 ( GIOFunc è Œª¥Üt_cb , ¡»am ); 883 } } 885  $³ndšg_»q_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 887 cÚ¡  ³ndšg_»q * »q = a ; 888 cÚ¡  avd_¡»am * ¡»am = b ; 890 ià( »q -> ¡»am == stream) 894 } } 896  $þ—nup_queue ( avd * £ssiÚ ,  avd_¡»am * ¡»am ) 898 GSLi¡ * l ; 899  ³ndšg_»q * »q ; 901 ( l = `g_¦i¡_fšd_cu¡om ( £ssiÚ -> ´io_queue , ¡»am , 902 ³ndšg_»q_cmp ))) { 903 »q = l -> d©a ; 904 `³ndšg_»q_ä“ ( »q ); 905 £ssiÚ -> ´io_queue = `g_¦i¡_»move (£ssiÚ->´io_queue, »q ); 908 ( l = `g_¦i¡_fšd_cu¡om ( £ssiÚ -> »q_queue , ¡»am , 909 ³ndšg_»q_cmp ))) { 910 »q = l -> d©a ; 911 `³ndšg_»q_ä“ ( »q ); 912 £ssiÚ -> »q_queue = `g_¦i¡_»move (£ssiÚ->»q_queue, »q ); 914 } } 916  $hªdË_uÇnsw”ed_»q ( avd * £ssiÚ , 917  avd_¡»am * ¡»am ) 919  ³ndšg_»q * »q ; 920  avd_loÿl_£p * l£p ; 921  avd_”rÜ ”r ; 923 ià( £ssiÚ -> »q -> sigÇl_id =ð AVDTP_ABORT ) { 925 `DBG ("handle_unanswered_req: Abort„eq,„eturning"); 926 £ssiÚ -> »q -> ¡»am = NULL ; 930 »q = £ssiÚ ->req; 931 £ssiÚ -> »q = NULL ; 933 `avd_”rÜ_š™ (& ”r , AVDTP_ERRNO , EIO ); 935 l£p = ¡»am ->lsep; 937  »q -> sigÇl_id ) { 938  AVDTP_RECONFIGURE : 939 `”rÜ ("No„eplyo Reconfigure„equest"); 940 ià( l£p &&†£p-> cfm &&†£p->cfm-> »cÚfigu» ) 941 l£p -> cfm -> `»cÚfigu» ( £ssiÚ ,†£p, ¡»am , & ”r , 942 l£p -> u£r_d©a ); 944  AVDTP_OPEN : 945 `”rÜ ("No„eplyo Open„equest"); 946 ià( l£p &&†£p-> cfm &&†£p->cfm-> Ý’ ) 947 l£p -> cfm -> `Ý’ ( £ssiÚ ,†£p, ¡»am , & ”r , 948 l£p -> u£r_d©a ); 950  AVDTP_START : 951 `”rÜ ("No„eplyo Start„equest"); 952 ià( l£p &&†£p-> cfm &&†£p->cfm-> ¡¬t ) 953 l£p -> cfm -> `¡¬t ( £ssiÚ ,†£p, ¡»am , & ”r , 954 l£p -> u£r_d©a ); 956  AVDTP_SUSPEND : 957 `”rÜ ("No„eplyo Suspend„equest"); 958 ià( l£p &&†£p-> cfm &&†£p->cfm-> su¥’d ) 959 l£p -> cfm -> `su¥’d ( £ssiÚ ,†£p, ¡»am , & ”r , 960 l£p -> u£r_d©a ); 962  AVDTP_CLOSE : 963 `”rÜ ("No„eplyo Close„equest"); 964 ià( l£p &&†£p-> cfm &&†£p->cfm-> þo£ ) 965 l£p -> cfm -> `þo£ ( £ssiÚ ,†£p, ¡»am , & ”r , 966 l£p -> u£r_d©a ); 968  AVDTP_SET_CONFIGURATION : 969 `”rÜ ("No„eplyo SetConfiguration„equest"); 970 ià( l£p &&†£p-> cfm &&†£p->cfm-> £t_cÚfigu¿tiÚ ) 971 l£p -> cfm -> `£t_cÚfigu¿tiÚ ( £ssiÚ ,†£p, ¡»am , 972 & ”r , l£p -> u£r_d©a ); 975 `³ndšg_»q_ä“ ( »q ); 976 } } 978 #ifdeà __TIZEN_PATCH__ 979 #ifdeà __BROADCOM_QOS_PATCH__ 980  gboÞ—n $£nd_brßdcom_a2dp_qos ( bdaddr_t * d¡ , gboÞ—n qos_high ) 982  dd ; 983  ”r = 0; 984  hci_cÚn_šfo_»q * ü ; 985 brßdcom_qos_ý ý ; 987 dd = `hci_Ý’_dev (0); 989 ü = `g_m®loc0 ((*üè+ ( hci_cÚn_šfo )); 991 ü -> ty³ = ACL_LINK ; 992 `baýy (& ü -> bdaddr , d¡ ); 994 ”r = `ioùl ( dd , HCIGETCONNINFO , ü ); 995 ià( ”r < 0) { 996 `”rÜ ("Failo get HCIGETCOINFO"); 997 `g_ä“ ( ü ); 998 `hci_þo£_dev ( dd ); 999  FALSE ; 1002 ý . hªdË = ü -> cÚn_šfo ->handle; 1003 `DBG ("HªdË %d", ý . hªdË ); 1004 `g_ä“ ( ü ); 1006 ià( qos_high ) 1007 ý . ´iÜ™y = BRCM_QOS_PRIORITY_HIGH ; 1009 ý . ´iÜ™y = BRCM_QOS_PRIORITY_NORMAL ; 1011 ià( `hci_£nd_cmd ( dd , OGF_VENDOR_CMD , BROADCOM_QOS_CMD , 1012 BROADCOM_QOS_CP_SIZE , & ý ) < 0) { 1013 `hci_þo£_dev ( dd ); 1014  FALSE ; 1016 `DBG ("S’d Brßdcom Qo P©ch %s", qos_high ? "High" : "Low"); 1018 `hci_þo£_dev ( dd ); 1020  TRUE ; 1021 } } 1023 #ifdeà TIZEN_WEARABLE 1024  gboÞ—n $fix_rÞe_to_ma¡” ( bdaddr_t * d¡ , gboÞ—n fix_to_ma¡” ) 1026  dd ; 1027  ”r = 0; 1028  hci_cÚn_šfo_»q * ü ; 1029 sw™ch_rÞe_ý ¤_ý ; 1030 wr™e_lšk_pÞicy_ý Í_ý ; 1032 dd = `hci_Ý’_dev (0); 1033 ià( dd < 0) { 1034 `”rÜ ("hci_open_dev is failed"); 1035  FALSE ; 1038 ü = `g_m®loc0 ((*üè+ ( hci_cÚn_šfo )); 1040 ü -> ty³ = ACL_LINK ; 1041 `baýy (& ü -> bdaddr , d¡ ); 1042 ”r = `ioùl ( dd , HCIGETCONNINFO , ü ); 1043 ià( ”r < 0) { 1044 `”rÜ ("FažØg‘ HCIGETCOINFO : %d", ”r ); 1045 `g_ä“ ( ü ); 1046 `hci_þo£_dev ( dd ); 1047  FALSE ; 1050 ià(!( ü -> cÚn_šfo -> lšk_mode & HCI_LM_MASTER è&& fix_to_ma¡” ) { 1051 `DBG ("Needo„ole switch"); 1053 `baýy (& ¤_ý . bdaddr , d¡ ); 1054 ¤_ý . rÞe = 0x00; 1055 ià( `hci_£nd_cmd ( dd , OGF_LINK_POLICY , OCF_SWITCH_ROLE , 1056 SWITCH_ROLE_CP_SIZE , & ¤_ý ) < 0) { 1057 `”rÜ ("switch„ole is failed"); 1058 `g_ä“ ( ü ); 1059 `hci_þo£_dev ( dd ); 1060  FALSE ; 1064 Í_ý . hªdË = ü -> cÚn_šfo ->handle; 1065 `DBG ("HªdË %d", Í_ý . hªdË ); 1066 `g_ä“ ( ü ); 1068 Í_ý . pÞicy = fix_to_ma¡” ? 0x00 : HCI_LP_SNIFF | HCI_LP_RSWITCH ; 1069 `DBG ("Reque¡†šk…Þicy : 0x%X", Í_ý . pÞicy ); 1071 ià( `hci_£nd_cmd ( dd , OGF_LINK_POLICY , OCF_WRITE_LINK_POLICY , 1072 WRITE_LINK_POLICY_CP_SIZE , & Í_ý ) < 0) { 1073 `”rÜ ("wr™lšk…Þicy i çžed : %d", Í_ý . pÞicy ); 1074 `hci_þo£_dev ( dd ); 1075  FALSE ; 1078 `hci_þo£_dev ( dd ); 1080  TRUE ; 1081 } } 1085  $avd_£p_£t_¡©e ( avd * £ssiÚ , 1086  avd_loÿl_£p * £p , 1087 avd_¡©e_t ¡©e ) 1089  avd_¡»am * ¡»am = £p ->stream; 1090 bdaddr_t * d¡ ; 1091 #ifdeà __TIZEN_PATCH__ 1092 d¡ = ( bdaddr_t *) `deviû_g‘_add»ss ( £ssiÚ -> deviû ); 1094 d¡ = `deviû_g‘_add»ss ( £ssiÚ -> deviû ); 1096 avd_¡©e_t Þd_¡©e ; 1097  avd_”rÜ ”r , * ”r_±r = NULL ; 1098 GSLi¡ * l ; 1100 ià(! ¡»am ) { 1101 `”rÜ ("Error changing sep state: stream‚ot‡vailable"); 1105 ià( £p -> ¡©e == state) { 1106 `avd_”rÜ_š™ (& ”r , AVDTP_ERRNO , EIO ); 1107 `DBG ("¡»am s‹ chªgçžed: %s", `avd_¡»¼Ü (& ”r )); 1108 ”r_±r = & ”r ; 1110 ”r_±r = NULL ; 1111 `DBG ("stream state changed: %s -> %s", 1112 `avd_¡©e¡r ( £p -> ¡©e ), 1113 `avd_¡©e¡r ( ¡©e )); 1116 Þd_¡©e = £p -> ¡©e ; 1117 £p -> ¡©e = state; 1119  ¡©e ) { 1120  AVDTP_STATE_CONFIGURED : 1121 ià( £p -> šfo . ty³ =ð AVDTP_SEP_TYPE_SINK ) 1122 `avd_d–ay_»pÜt ( £ssiÚ , ¡»am , sŒ—m-> d–ay ); 1124  AVDTP_STATE_OPEN : 1125 ¡»am -> ¡¬tšg = FALSE ; 1126 #ifdeà __TIZEN_PATCH__ 1127 #ifdeà __BROADCOM_QOS_PATCH__ 1128 `£nd_brßdcom_a2dp_qos ( d¡ , FALSE ); 1130 #ifdeà TIZEN_WEARABLE 1131 `fix_rÞe_to_ma¡” ( d¡ , FALSE ); 1136  AVDTP_STATE_STREAMING : 1137 ià( ¡»am -> ¡¬t_tim” ) { 1138 `g_sourû_»move ( ¡»am -> ¡¬t_tim” ); 1139 ¡»am -> ¡¬t_tim” = 0; 1142 #ifdeà __TIZEN_PATCH__ 1143 #ifdeà __BROADCOM_QOS_PATCH__ 1144 `£nd_brßdcom_a2dp_qos ( d¡ , TRUE ); 1146 #ifdeà TIZEN_WEARABLE 1147 `fix_rÞe_to_ma¡” ( d¡ , TRUE ); 1150 ¡»am -> Ý’_aý = FALSE ; 1152  AVDTP_STATE_CLOSING : 1153  AVDTP_STATE_ABORTING : 1154 ià( ¡»am -> ¡¬t_tim” ) { 1155 `g_sourû_»move ( ¡»am -> ¡¬t_tim” ); 1156 ¡»am -> ¡¬t_tim” = 0; 1159  AVDTP_STATE_IDLE : 1160 ià( ¡»am -> ¡¬t_tim” ) { 1161 `g_sourû_»move ( ¡»am -> ¡¬t_tim” ); 1162 ¡»am -> ¡¬t_tim” = 0; 1164 ià( £ssiÚ -> ³ndšg_Ý’ =ð ¡»am ) 1165 `hªdË_Œª¥Üt_cÚÃù ( £ssiÚ , NULL , 0, 0); 1166 ià( £ssiÚ -> »q && sessiÚ->»q-> ¡»am == stream) 1167 `hªdË_uÇnsw”ed_»q ( £ssiÚ , ¡»am ); 1169 `þ—nup_queue ( £ssiÚ , ¡»am ); 1175 l = ¡»am -> ÿÎbacks ; 1176  l !ð NULL ) { 1177  ¡»am_ÿÎback * cb = l -> d©a ; 1178 l = `g_¦i¡_Ãxt (l); 1179 cb -> `cb ( ¡»am , Þd_¡©e , ¡©e , ”r_±r , cb-> u£r_d©a ); 1182 ià( ¡©e =ð AVDTP_STATE_IDLE && 1183 `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am )) { 1184 £ssiÚ -> ¡»ams = `g_¦i¡_»move (£ssiÚ->¡»ams, ¡»am ); 1185 `¡»am_ä“ ( ¡»am ); 1187 } } 1189 #ifdeà __TIZEN_PATCH__ 1190  $fš®ize_discov”y ( avd * £ssiÚ ,  ”r ) 1192  $fš®ize_discov”y ( avd * £ssiÚ ,  ”r ) 1195  discov”_ÿÎback * discov” = £ssiÚ ->discover; 1196  avd_”rÜ avd_”r ; 1198 ià(! discov” ) 1201 `avd_”rÜ_š™ (& avd_”r , AVDTP_ERRNO , ”r ); 1203 ià( discov” -> id > 0) 1204 `g_sourû_»move ( discov” -> id ); 1206 discov” -> `cb ( £ssiÚ , sessiÚ-> £ps , ”r ? & avd_”r : NULL , 1207 discov” -> u£r_d©a ); 1208 `g_ä“ ( discov” ); 1209 £ssiÚ -> discov” = NULL ; 1210 } } 1212  $»Ëa£_¡»am ( avd_¡»am * ¡»am ,  avd * £ssiÚ ) 1214  avd_loÿl_£p * £p = ¡»am -> l£p ; 1216 ià( £p -> cfm && s•->cfm-> abÜt && 1217 ( £p -> ¡©e !ð AVDTP_STATE_ABORTING || 1218 ¡»am -> abÜt_št )) 1219 £p -> cfm -> `abÜt ( £ssiÚ , s•, ¡»am , NULL , s•-> u£r_d©a ); 1221 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_IDLE ); 1222 } } 1224  $avd_ÿnûl_authÜiz©iÚ ( avd * £ssiÚ ) 1226  ”r ; 1228 ià( £ssiÚ -> ¡©e !ð AVDTP_SESSION_STATE_CONNECTING ) 1231 ià( £ssiÚ -> auth_id == 0) 1234 ”r = `btd_ÿnûl_authÜiz©iÚ ( £ssiÚ -> auth_id ); 1235 ià( ”r < 0) 1236  ”r ; 1238 £ssiÚ -> auth_id = 0; 1241 } } 1243  $£p_ä“ ( gpoš‹r d©a ) 1245  avd_»mÙe_£p * £p = d©a ; 1247 `g_¦i¡_ä“_fuÎ ( £p -> ÿps , g_ä“ ); 1248 `g_ä“ ( £p ); 1249 } } 1251  $»move_discÚÃù_tim” ( avd * £ssiÚ ) 1253 `g_sourû_»move ( £ssiÚ -> dc_tim” ); 1254 £ssiÚ -> dc_tim” = 0; 1255 £ssiÚ -> ¡»am_£tup = FALSE ; 1256 } } 1258  $avd_ä“ (* d©a ) 1260  avd * £ssiÚ = d©a ; 1262 `DBG ("%p", £ssiÚ ); 1264 `g_¦i¡_ä“_fuÎ ( £ssiÚ -> ¡»ams , ¡»am_ä“ ); 1266 ià( £ssiÚ -> io ) { 1267 `g_io_chªÃl_shutdown ( £ssiÚ -> io , FALSE , NULL ); 1268 `g_io_chªÃl_uÄef ( £ssiÚ -> io ); 1271 ià( £ssiÚ -> io_id ) { 1272 `g_sourû_»move ( £ssiÚ -> io_id ); 1273 £ssiÚ -> io_id = 0; 1276 ià( £ssiÚ -> dc_tim” ) 1277 `»move_discÚÃù_tim” ( £ssiÚ ); 1279 ià( £ssiÚ -> »q ) 1280 `³ndšg_»q_ä“ ( £ssiÚ -> »q ); 1282 `g_¦i¡_ä“_fuÎ ( £ssiÚ -> »q_queue , ³ndšg_»q_ä“ ); 1283 `g_¦i¡_ä“_fuÎ ( £ssiÚ -> ´io_queue , ³ndšg_»q_ä“ ); 1284 `g_¦i¡_ä“_fuÎ ( £ssiÚ -> £ps , £p_ä“ ); 1286 `g_ä“ ( £ssiÚ -> buf ); 1288 `btd_deviû_uÄef ( £ssiÚ -> deviû ); 1289 `g_ä“ ( £ssiÚ ); 1290 } } 1292  $cÚÃùiÚ_lo¡ ( avd * £ssiÚ ,  ”r ) 1294  avd_£rv” * £rv” = £ssiÚ ->server; 1295  add»ss [18]; 1296 #ifdeà __TIZEN_PATCH__ 1297  btd_£rviû * £rviû ; 1300 `ba2¡r ( `deviû_g‘_add»ss ( £ssiÚ -> deviû ), add»ss ); 1301 `DBG ("DiscÚÃùed from %s", add»ss ); 1303 ià( ”r !ð EACCES ) 1304 `avd_ÿnûl_authÜiz©iÚ ( £ssiÚ ); 1306 #ifdeà __TIZEN_PATCH__ 1307 £rviû = `btd_deviû_g‘_£rviû ( £ssiÚ -> deviû , A2DP_SINK_UUID ); 1308 ià( £rviû ) 1309 `btd_£rviû_cÚÃùšg_com¶‘e ( £rviû , - ”r ); 1312 `g_¦i¡_fÜ—ch ( £ssiÚ -> ¡»ams , ( GFunc è »Ëa£_¡»am , session); 1313 £ssiÚ -> ¡»ams = NULL ; 1315 `fš®ize_discov”y ( £ssiÚ , ”r ); 1317 `avd_£t_¡©e ( £ssiÚ , AVDTP_SESSION_STATE_DISCONNECTED ); 1319 #ifdeà __TIZEN_PATCH__ 1320 `DBG ("%p:„ef=%d", £ssiÚ , sessiÚ-> »f ); 1321 ià( ”r !ð EIO && £ssiÚ -> »f > 0) 1324 ià( £ssiÚ -> »f > 0) 1328 £rv” -> £ssiÚs = `g_¦i¡_»move (£rv”->£ssiÚs, £ssiÚ ); 1329 `avd_ä“ ( £ssiÚ ); 1330 } } 1332 #ifdeà __TIZEN_PATCH__ 1333  gboÞ—n $discÚÃù_aþ_timeout ( gpoš‹r u£r_d©a ) 1335  btd_deviû * deviû = u£r_d©a ; 1337 `DBG (""); 1339 `btd_deviû_discÚÃù ( deviû ); 1341  FALSE ; 1342 } } 1345  gboÞ—n $discÚÃù_timeout ( gpoš‹r u£r_d©a ) 1347  avd * £ssiÚ = u£r_d©a ; 1348  btd_£rviû * £rviû ; 1349 gboÞ—n ¡»am_£tup ; 1350 #ifdeà __TIZEN_PATCH__ 1351  btd_deviû * deviû = NULL ; 1352  btd_ad­‹r * ad­‹r = NULL ; 1353  bdaddr_t * bdaddr = NULL ; 1356 `DBG (""); 1358 £ssiÚ -> dc_tim” = 0; 1360 ¡»am_£tup = £ssiÚ ->stream_setup; 1361 £ssiÚ -> ¡»am_£tup = FALSE ; 1363 £rviû = `btd_deviû_g‘_£rviû ( £ssiÚ -> deviû , A2DP_SINK_UUID ); 1364 ià( £rviû && ¡»am_£tup ) { 1365 `sšk_£tup_¡»am ( £rviû , £ssiÚ ); 1366  FALSE ; 1369 £rviû = `btd_deviû_g‘_£rviû ( £ssiÚ -> deviû , A2DP_SOURCE_UUID ); 1370 ià( £rviû && ¡»am_£tup ) { 1371 `sourû_£tup_¡»am ( £rviû , £ssiÚ ); 1372  FALSE ; 1375 #ifdeà __TIZEN_PATCH__ 1376 ià( £ssiÚ -> deviû ) { 1377 ad­‹r = `deviû_g‘_ad­‹r ( £ssiÚ -> deviû ); 1378 bdaddr = `deviû_g‘_add»ss ( £ssiÚ -> deviû ); 1379 ià( ad­‹r && bdaddr ) 1380 deviû = `btd_ad­‹r_fšd_deviû ( ad­‹r , bdaddr , BDADDR_BREDR ); 1381 ià(! deviû ) 1382 `”rÜ ("device is NOT found"); 1386 `cÚÃùiÚ_lo¡ ( £ssiÚ , ETIMEDOUT ); 1388 #ifdeà __TIZEN_PATCH__ 1389 ià( deviû ) 1390 `g_timeout_add (100, 1391 discÚÃù_aþ_timeout , 1392 deviû ); 1395  FALSE ; 1396 } } 1398  $£t_discÚÃù_tim” ( avd * £ssiÚ ) 1400 #ifdeà __TIZEN_PATCH__ 1401  Çme [6]; 1403 ià( £ssiÚ -> dc_tim” ) 1404 `»move_discÚÃù_tim” ( £ssiÚ ); 1406 #ifdeà __TIZEN_PATCH__ 1407 `deviû_g‘_Çme ( £ssiÚ -> deviû , Çme , (name)); 1408 `DBG ("Çm: %s", Çme ); 1409 ià( `g_¡r_equ® ( Çme , "VW BT")) 1410 £ssiÚ -> dc_tim” = `g_timeout_add_£cÚds (3, discÚÃù_timeout , 1411 £ssiÚ ); 1414 £ssiÚ -> dc_tim” = `g_timeout_add_£cÚds ( DISCONNECT_TIMEOUT , 1415 discÚÃù_timeout , 1416 £ssiÚ ); 1417 } } 1419  $avd_uÄef ( avd * £ssiÚ ) 1421 ià(! £ssiÚ ) 1424 £ssiÚ -> »f --; 1426 `DBG ("%p:„ef=%d", £ssiÚ , sessiÚ-> »f ); 1428 ià( £ssiÚ -> »f > 0) 1431 `£t_discÚÃù_tim” ( £ssiÚ ); 1432 } } 1434  avd * $avd_»f ( avd * £ssiÚ ) 1436 £ssiÚ -> »f ++; 1437 `DBG ("%p:„ef=%d", £ssiÚ , sessiÚ-> »f ); 1438 ià( £ssiÚ -> dc_tim” ) 1439 `»move_discÚÃù_tim” ( £ssiÚ ); 1440  £ssiÚ ; 1441 } } 1443  avd_loÿl_£p * $fšd_loÿl_£p_by_£id ( avd_£rv” * £rv” , 1444 ušt8_t £id ) 1446 GSLi¡ * l ; 1448  l = £rv” -> £ps ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 1449  avd_loÿl_£p * £p = l -> d©a ; 1451 ià( £p -> šfo . £id == seid) 1452  £p ; 1455  NULL ; 1456 } } 1458  avd_»mÙe_£p * $avd_fšd_»mÙe_£p ( avd * £ssiÚ , 1459  avd_loÿl_£p * l£p ) 1461 GSLi¡ * l ; 1463 ià( l£p -> šfo . šu£ ) 1464  NULL ; 1466  l = £ssiÚ -> £ps ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 1467  avd_»mÙe_£p * £p = l -> d©a ; 1468  avd_£rviû_ÿ·bž™y * ÿp ; 1469  avd_medŸ_codec_ÿ·bž™y * codec_d©a ; 1472 ià( £p -> ty³ =ð l£p -> šfo .type) 1475 ià( £p -> medŸ_ty³ !ð l£p -> šfo .media_type) 1478 ià(! £p -> codec ) 1481 ÿp = £p -> codec ; 1482 codec_d©a = (*è ÿp -> d©a ; 1484 ià( codec_d©a -> medŸ_codec_ty³ !ð l£p -> codec ) 1487 ià( £p -> ¡»am =ð NULL ) 1488  £p ; 1491  NULL ; 1492 } } 1494  GSLi¡ * $ÿps_to_li¡ ( ušt8_t * d©a ,  size , 1495  avd_£rviû_ÿ·bž™y ** codec , 1496 gboÞ—n * d–ay_»pÜtšg ) 1498 GSLi¡ * ÿps ; 1499  ´oûs£d ; 1501 ià( d–ay_»pÜtšg ) 1502 * d–ay_»pÜtšg = FALSE ; 1504  ´oûs£d = 0, ÿps = NULL ;…roûs£d + 2 <ð size ;) { 1505  avd_£rviû_ÿ·bž™y * ÿp ; 1506 ušt8_t Ëngth , ÿ‹gÜy ; 1508 ÿ‹gÜy = d©a [0]; 1509 Ëngth = d©a [1]; 1511 ià( ´oûs£d + 2 + Ëngth > size ) { 1512 `”rÜ ("Invalid capability data in getcap„esp"); 1516 ÿp = `g_m®loc (( avd_£rviû_ÿ·bž™y ) + 1517 Ëngth ); 1518 `memýy ( ÿp , d©a , 2 + Ëngth ); 1520 ´oûs£d +ð2 + Ëngth ; 1521 d©a +ð2 + Ëngth ; 1523 ÿps = `g_¦i¡_­³nd (ÿps, ÿp ); 1525 ià( ÿ‹gÜy =ð AVDTP_MEDIA_CODEC && 1526 Ëngth >= 1527 ( avd_medŸ_codec_ÿ·bž™y )) 1528 * codec = ÿp ; 1529 ià( ÿ‹gÜy =ð AVDTP_DELAY_REPORTING && d–ay_»pÜtšg ) 1530 * d–ay_»pÜtšg = TRUE ; 1533  ÿps ; 1534 } } 1536  gboÞ—n $avd_unknown_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1537 ušt8_t sigÇl_id ) 1539  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_GEN_REJECT , 1540 sigÇl_id , NULL , 0); 1541 } } 1543  gboÞ—n $avd_discov”_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1544 * buf ,  size ) 1546 GSLi¡ * l ; 1547  r¥_size , £p_couÁ , i ; 1548  £id_šfo * £ps ; 1549 gboÞ—n »t ; 1551 £p_couÁ = `g_¦i¡_Ëngth ( £ssiÚ -> £rv” -> £ps ); 1553 ià( £p_couÁ == 0) { 1554 ušt8_t ”r = AVDTP_NOT_SUPPORTED_COMMAND ; 1555  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1556 AVDTP_DISCOVER , & ”r , (err)); 1559 r¥_size = £p_couÁ * ( £id_šfo ); 1561 £ps = `g_Ãw0 ( £id_šfo , £p_couÁ ); 1563  l = £ssiÚ -> £rv” -> £ps , i = 0;† !ð NULL ;† =†-> Ãxt , i++) { 1564  avd_loÿl_£p * £p = l -> d©a ; 1566 `memýy (& £ps [ i ], & £p -> šfo , ( £id_šfo )); 1569 »t = `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1570 AVDTP_DISCOVER , £ps , r¥_size ); 1571 `g_ä“ ( £ps ); 1573  »t ; 1574 } } 1576  gboÞ—n $avd_g‘ÿp_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1577  £id_»q * »q ,  size , 1578 gboÞ—n g‘_®l ) 1580 GSLi¡ * l , * ÿps ; 1581  avd_loÿl_£p * £p = NULL ; 1582  r¥_size ; 1583 ušt8_t ”r , buf [1024], * ±r = buf; 1584 ušt8_t cmd ; 1586 cmd = g‘_®l ? AVDTP_GET_ALL_CAPABILITIES : AVDTP_GET_CAPABILITIES ; 1588 ià( size < ( £id_»q )) { 1589 ”r = AVDTP_BAD_LENGTH ; 1590  çžed ; 1593 £p = `fšd_loÿl_£p_by_£id ( £ssiÚ -> £rv” , »q -> aý_£id ); 1594 ià(! £p ) { 1595 ”r = AVDTP_BAD_ACP_SEID ; 1596  çžed ; 1599 ià(! £p -> šd -> `g‘_ÿ·bž™y ( £ssiÚ , s•, g‘_®l , & ÿps , 1600 & ”r , £p -> u£r_d©a )) 1601  çžed ; 1603  l = ÿps , r¥_size = 0;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 1604  avd_£rviû_ÿ·bž™y * ÿp = l -> d©a ; 1606 ià( r¥_size + ÿp -> Ëngth + 2 > ( buf )) 1609 `memýy ( ±r , ÿp , c­-> Ëngth + 2); 1610 r¥_size +ð ÿp -> Ëngth + 2; 1611 ±r +ð ÿp -> Ëngth + 2; 1613 `g_ä“ ( ÿp ); 1616 `g_¦i¡_ä“ ( ÿps ); 1618  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , cmd , 1619 buf , r¥_size ); 1621 çžed : 1622  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , cmd , 1623 & ”r , (err)); 1624 } } 1626  $£tcÚf_cb ( avd * £ssiÚ ,  avd_¡»am * ¡»am , 1627  avd_”rÜ * ”r ) 1629  cÚf_»j »j ; 1630  avd_loÿl_£p * £p ; 1632 ià( ”r !ð NULL ) { 1633 »j . ”rÜ = AVDTP_UNSUPPORTED_CONFIGURATION ; 1634 »j . ÿ‹gÜy = ”r ->”r. ”rÜ_code ; 1635 `avd_£nd ( £ssiÚ , sessiÚ-> š . Œª§ùiÚ , 1636 AVDTP_MSG_TYPE_REJECT , AVDTP_SET_CONFIGURATION , 1637 & »j , (rej)); 1641 ià(! `avd_£nd ( £ssiÚ , sessiÚ-> š . Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1642 AVDTP_SET_CONFIGURATION , NULL , 0)) { 1643 `¡»am_ä“ ( ¡»am ); 1647 £p = ¡»am -> l£p ; 1648 £p -> ¡»am = stream; 1649 £p -> šfo . šu£ = 1; 1650 £ssiÚ -> ¡»ams = `g_¦i¡_­³nd (£ssiÚ->¡»ams, ¡»am ); 1652 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_CONFIGURED ); 1653 } } 1655  gboÞ—n $avd_£tcÚf_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1656  £tcÚf_»q * »q ,  size ) 1658  cÚf_»j »j ; 1659  avd_loÿl_£p * £p ; 1660  avd_¡»am * ¡»am ; 1661 ušt8_t ”r , ÿ‹gÜy = 0x00; 1662  btd_£rviû * £rviû ; 1663 GSLi¡ * l ; 1665 ià( size < ( £tcÚf_»q )) { 1666 `”rÜ ("Too short getcap„equest"); 1667  FALSE ; 1670 £p = `fšd_loÿl_£p_by_£id ( £ssiÚ -> £rv” , »q -> aý_£id ); 1671 ià(! £p ) { 1672 ”r = AVDTP_BAD_ACP_SEID ; 1673  çžed ; 1676 ià( £p -> ¡»am ) { 1677 ”r = AVDTP_SEP_IN_USE ; 1678  çžed ; 1681  £p -> šfo . ty³ ) { 1682  AVDTP_SEP_TYPE_SOURCE : 1683 £rviû = `btd_deviû_g‘_£rviû ( £ssiÚ -> deviû , 1684 A2DP_SINK_UUID ); 1685 ià( £rviû =ð NULL ) { 1686 `btd_deviû_add_uuid ( £ssiÚ -> deviû , A2DP_SINK_UUID ); 1687 £rviû = `btd_deviû_g‘_£rviû ( £ssiÚ -> deviû , 1688 A2DP_SINK_UUID ); 1689 ià( £rviû =ð NULL ) { 1690 `”rÜ ("Unableo get‡‡udio sink object"); 1691 ”r = AVDTP_BAD_STATE ; 1692  çžed ; 1696  AVDTP_SEP_TYPE_SINK : 1697 £rviû = `btd_deviû_g‘_£rviû ( £ssiÚ -> deviû , 1698 A2DP_SOURCE_UUID ); 1699 ià( £rviû =ð NULL ) { 1700 `btd_deviû_add_uuid ( £ssiÚ -> deviû , A2DP_SOURCE_UUID ); 1701 £rviû = `btd_deviû_g‘_£rviû ( £ssiÚ -> deviû , 1702 A2DP_SOURCE_UUID ); 1703 ià( £rviû =ð NULL ) { 1704 `”rÜ ("Unableo get‡‡udio source object"); 1705 ”r = AVDTP_BAD_STATE ; 1706  çžed ; 1712 ¡»am = `g_Ãw0 ( avd_¡»am , 1); 1713 ¡»am -> £ssiÚ = session; 1714 ¡»am -> l£p = £p ; 1715 ¡»am -> r£id = »q -> št_£id ; 1716 ¡»am -> ÿps = `ÿps_to_li¡ ( »q ->caps, 1717 size - ( £tcÚf_»q ), 1718 & ¡»am -> codec , 1719 & ¡»am -> d–ay_»pÜtšg ); 1722  l = ¡»am -> ÿps ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 1723  avd_£rviû_ÿ·bž™y * ÿp = l -> d©a ; 1725 ià( ÿp -> ÿ‹gÜy =ð AVDTP_MEDIA_TRANSPORT && c­-> Ëngth != 0) { 1726 ”r = AVDTP_BAD_MEDIA_TRANSPORT_FORMAT ; 1727  çžed_¡»am ; 1731 ià( ¡»am -> d–ay_»pÜtšg && £ssiÚ -> v”siÚ < 0x0103) 1732 £ssiÚ -> v”siÚ = 0x0103; 1734 ià( £p -> šd && s•->šd-> £t_cÚfigu¿tiÚ ) { 1735 ià(! £p -> šd -> `£t_cÚfigu¿tiÚ ( £ssiÚ , s•, ¡»am , 1736 ¡»am -> ÿps , 1737 £tcÚf_cb , 1738 £p -> u£r_d©a )) { 1739 ”r = AVDTP_UNSUPPORTED_CONFIGURATION ; 1740 ÿ‹gÜy = 0x00; 1741  çžed_¡»am ; 1744 ià(! `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1745 AVDTP_SET_CONFIGURATION , NULL , 0)) { 1746 `¡»am_ä“ ( ¡»am ); 1747  FALSE ; 1750 £p -> ¡»am = stream; 1751 £p -> šfo . šu£ = 1; 1752 £ssiÚ -> ¡»ams = `g_¦i¡_­³nd (£ssiÚ->¡»ams, ¡»am ); 1754 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_CONFIGURED ); 1757  TRUE ; 1759 çžed_¡»am : 1760 `¡»am_ä“ ( ¡»am ); 1761 çžed : 1762 »j . ”rÜ = ”r ; 1763 »j . ÿ‹gÜy = category; 1764  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1765 AVDTP_SET_CONFIGURATION , & »j , (rej)); 1766 } } 1768  gboÞ—n $avd_g‘cÚf_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1769  £id_»q * »q ,  size ) 1771 GSLi¡ * l ; 1772  avd_loÿl_£p * £p = NULL ; 1773  r¥_size ; 1774 ušt8_t ”r ; 1775 ušt8_t buf [1024]; 1776 ušt8_t * ±r = buf ; 1778 ià( size < (è( £id_»q )) { 1779 `”rÜ ("Too short getconf„equest"); 1780  FALSE ; 1783 `mem£t ( buf , 0, (buf)); 1785 £p = `fšd_loÿl_£p_by_£id ( £ssiÚ -> £rv” , »q -> aý_£id ); 1786 ià(! £p ) { 1787 ”r = AVDTP_BAD_ACP_SEID ; 1788  çžed ; 1790 ià(! £p -> ¡»am || !£p->¡»am-> ÿps ) { 1791 ”r = AVDTP_UNSUPPORTED_CONFIGURATION ; 1792  çžed ; 1795  l = £p -> ¡»am -> ÿps , r¥_size = 0;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 1796  avd_£rviû_ÿ·bž™y * ÿp = l -> d©a ; 1798 ià( r¥_size + ÿp -> Ëngth + 2 > (è( buf )) 1801 `memýy ( ±r , ÿp , c­-> Ëngth + 2); 1802 r¥_size +ð ÿp -> Ëngth + 2; 1803 ±r +ð ÿp -> Ëngth + 2; 1806  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1807 AVDTP_GET_CONFIGURATION , buf , r¥_size ); 1809 çžed : 1810  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1811 AVDTP_GET_CONFIGURATION , & ”r , (err)); 1812 } } 1814  gboÞ—n $avd_»cÚf_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1815  £id_»q * »q ,  size ) 1817  cÚf_»j »j ; 1819 »j . ”rÜ = AVDTP_NOT_SUPPORTED_COMMAND ; 1820 »j . ÿ‹gÜy = 0x00; 1822  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1823 AVDTP_RECONFIGURE , & »j , (rej)); 1824 } } 1826  $check_£id_cÞlisiÚ ( ³ndšg_»q * »q , ušt8_t id ) 1828  £id_»q * £id = »q -> d©a ; 1830 ià( £id -> aý_£id =ð id ) 1831 »q -> cÞlided = TRUE ; 1832 } } 1834  $check_¡¬t_cÞlisiÚ ( ³ndšg_»q * »q , ušt8_t id ) 1836  ¡¬t_»q * ¡¬t = »q -> d©a ; 1837  £id *£id = & ¡¬t -> fœ¡_£id ; 1838  couÁ = 1 + »q -> d©a_size - ( ¡¬t_»q ); 1839  i ; 1841  i = 0; i < couÁ ; i++, £id ++) { 1842 ià( £id ->£id =ð id ) { 1843 »q -> cÞlided = TRUE ; 1847 } } 1849  $check_su¥’d_cÞlisiÚ ( ³ndšg_»q * »q , ušt8_t id ) 1851  su¥’d_»q * su¥’d = »q -> d©a ; 1852  £id *£id = & su¥’d -> fœ¡_£id ; 1853  couÁ = 1 + »q -> d©a_size - ( su¥’d_»q ); 1854  i ; 1856  i = 0; i < couÁ ; i++, £id ++) { 1857 ià( £id ->£id =ð id ) { 1858 »q -> cÞlided = TRUE ; 1862 } } 1864  $avd_check_cÞlisiÚ ( avd * £ssiÚ , ušt8_t cmd , 1865  avd_¡»am * ¡»am ) 1867  ³ndšg_»q * »q = £ssiÚ ->req; 1869 ià( »q =ð NULL || (»q-> sigÇl_id !ð cmd && cmd !ð AVDTP_ABORT )) 1872 ià( cmd =ð AVDTP_ABORT ) 1873 cmd = »q -> sigÇl_id ; 1875  cmd ) { 1876  AVDTP_OPEN : 1877  AVDTP_CLOSE : 1878 `check_£id_cÞlisiÚ ( »q , ¡»am -> r£id ); 1880  AVDTP_START : 1881 `check_¡¬t_cÞlisiÚ ( »q , ¡»am -> r£id ); 1883  AVDTP_SUSPEND : 1884 `check_su¥’d_cÞlisiÚ ( »q , ¡»am -> r£id ); 1887 } } 1889  gboÞ—n $avd_Ý’_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1890  £id_»q * »q ,  size ) 1892  avd_loÿl_£p * £p ; 1893  avd_¡»am * ¡»am ; 1894 ušt8_t ”r ; 1896 ià( size < ( £id_»q )) { 1897 `”rÜ ("Too short‡bort„equest"); 1898  FALSE ; 1901 £p = `fšd_loÿl_£p_by_£id ( £ssiÚ -> £rv” , »q -> aý_£id ); 1902 ià(! £p ) { 1903 ”r = AVDTP_BAD_ACP_SEID ; 1904  çžed ; 1907 ià( £p -> ¡©e !ð AVDTP_STATE_CONFIGURED ) { 1908 ”r = AVDTP_BAD_STATE ; 1909  çžed ; 1912 ¡»am = £p ->stream; 1914 ià( £p -> šd && s•->šd-> Ý’ ) { 1915 ià(! £p -> šd -> `Ý’ ( £ssiÚ , s•, ¡»am , & ”r , 1916 £p -> u£r_d©a )) 1917  çžed ; 1920 `avd_check_cÞlisiÚ ( £ssiÚ , AVDTP_OPEN , ¡»am ); 1922 ià(! `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1923 AVDTP_OPEN , NULL , 0)) 1924  FALSE ; 1926 ¡»am -> Ý’_aý = TRUE ; 1927 £ssiÚ -> ³ndšg_Ý’ = ¡»am ; 1928 ¡»am -> tim” = `g_timeout_add_£cÚds ( REQ_TIMEOUT , 1929 ¡»am_Ý’_timeout , 1930 ¡»am ); 1932  TRUE ; 1934 çžed : 1935  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1936 AVDTP_OPEN , & ”r , (err)); 1937 } } 1939  gboÞ—n $avd_¡¬t_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 1940  ¡¬t_»q * »q ,  size ) 1942  avd_loÿl_£p * £p ; 1943  avd_¡»am * ¡»am ; 1944  ¡»am_»j »j ; 1945  £id *seid; 1946 ušt8_t ”r , çžed_£id ; 1947  £id_couÁ , i ; 1949 ià( size < ( ¡¬t_»q )) { 1950 `”rÜ ("Too short start„equest"); 1951  FALSE ; 1954 £id_couÁ = 1 + size - ( ¡¬t_»q ); 1956 £id = & »q -> fœ¡_£id ; 1958  i = 0; i < £id_couÁ ; i++, £id ++) { 1959 çžed_£id = £id ->seid; 1961 £p = `fšd_loÿl_£p_by_£id ( £ssiÚ -> £rv” , 1962 »q -> fœ¡_£id . £id ); 1963 ià(! £p || !£p-> ¡»am ) { 1964 ”r = AVDTP_BAD_ACP_SEID ; 1965  çžed ; 1968 ¡»am = £p ->stream; 1971 ià( £p -> ¡©e !ð AVDTP_STATE_OPEN ) { 1972 ”r = AVDTP_BAD_STATE ; 1973  çžed ; 1975 ¡»am -> ¡¬tšg = TRUE ; 1977 ià( £p -> šd && s•->šd-> ¡¬t ) { 1978 ià(! £p -> šd -> `¡¬t ( £ssiÚ , s•, ¡»am , & ”r , 1979 £p -> u£r_d©a )) 1980  çžed ; 1983 `avd_check_cÞlisiÚ ( £ssiÚ , AVDTP_START , ¡»am ); 1985 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_STREAMING ); 1988  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 1989 AVDTP_START , NULL , 0); 1991 çžed : 1992 `DBG ("Rejeùšg (%d)", ”r ); 1993 `mem£t (& »j , 0, (rej)); 1994 »j . aý_£id = çžed_£id ; 1995 »j . ”rÜ = ”r ; 1996  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 1997 AVDTP_START , & »j , (rej)); 1998 } } 2000  gboÞ—n $avd_þo£_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 2001  £id_»q * »q ,  size ) 2003  avd_loÿl_£p * £p ; 2004  avd_¡»am * ¡»am ; 2005 ušt8_t ”r ; 2007 ià( size < ( £id_»q )) { 2008 `”rÜ ("Too short close„equest"); 2009  FALSE ; 2012 £p = `fšd_loÿl_£p_by_£id ( £ssiÚ -> £rv” , »q -> aý_£id ); 2013 ià(! £p || !£p-> ¡»am ) { 2014 ”r = AVDTP_BAD_ACP_SEID ; 2015  çžed ; 2018 ià( £p -> ¡©e !ð AVDTP_STATE_OPEN && 2019 £p -> ¡©e !ð AVDTP_STATE_STREAMING ) { 2020 ”r = AVDTP_BAD_STATE ; 2021  çžed ; 2024 ¡»am = £p ->stream; 2026 ià( £p -> šd && s•->šd-> þo£ ) { 2027 ià(! £p -> šd -> `þo£ ( £ssiÚ , s•, ¡»am , & ”r , 2028 £p -> u£r_d©a )) 2029  çžed ; 2032 `avd_check_cÞlisiÚ ( £ssiÚ , AVDTP_CLOSE , ¡»am ); 2034 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_CLOSING ); 2036 ià(! `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 2037 AVDTP_CLOSE , NULL , 0)) 2038  FALSE ; 2040 ¡»am -> tim” = `g_timeout_add_£cÚds ( REQ_TIMEOUT , 2041 ¡»am_þo£_timeout , 2042 ¡»am ); 2044  TRUE ; 2046 çžed : 2047  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 2048 AVDTP_CLOSE , & ”r , (err)); 2049 } } 2051  gboÞ—n $avd_su¥’d_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 2052  su¥’d_»q * »q ,  size ) 2054  avd_loÿl_£p * £p ; 2055  avd_¡»am * ¡»am ; 2056  ¡»am_»j »j ; 2057  £id *seid; 2058 ušt8_t ”r , çžed_£id ; 2059  £id_couÁ , i ; 2061 ià( size < ( su¥’d_»q )) { 2062 `”rÜ ("Too short suspend„equest"); 2063  FALSE ; 2066 £id_couÁ = 1 + size - ( su¥’d_»q ); 2068 £id = & »q -> fœ¡_£id ; 2070  i = 0; i < £id_couÁ ; i++, £id ++) { 2071 çžed_£id = £id ->seid; 2073 £p = `fšd_loÿl_£p_by_£id ( £ssiÚ -> £rv” , 2074 »q -> fœ¡_£id . £id ); 2075 ià(! £p || !£p-> ¡»am ) { 2076 ”r = AVDTP_BAD_ACP_SEID ; 2077  çžed ; 2080 ¡»am = £p ->stream; 2082 ià( £p -> ¡©e !ð AVDTP_STATE_STREAMING ) { 2083 ”r = AVDTP_BAD_STATE ; 2084  çžed ; 2087 ià( £p -> šd && s•->šd-> su¥’d ) { 2088 ià(! £p -> šd -> `su¥’d ( £ssiÚ , s•, ¡»am , & ”r , 2089 £p -> u£r_d©a )) 2090  çžed ; 2093 `avd_check_cÞlisiÚ ( £ssiÚ , AVDTP_SUSPEND , ¡»am ); 2095 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_OPEN ); 2098  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 2099 AVDTP_SUSPEND , NULL , 0); 2101 çžed : 2102 `mem£t (& »j , 0, (rej)); 2103 »j . aý_£id = çžed_£id ; 2104 »j . ”rÜ = ”r ; 2105  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 2106 AVDTP_SUSPEND , & »j , (rej)); 2107 } } 2109  gboÞ—n $avd_abÜt_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 2110  £id_»q * »q ,  size ) 2112  avd_loÿl_£p * £p ; 2113 ušt8_t ”r ; 2114 gboÞ—n »t ; 2116 ià( size < ( £id_»q )) { 2117 `”rÜ ("Too short‡bort„equest"); 2118  FALSE ; 2121 £p = `fšd_loÿl_£p_by_£id ( £ssiÚ -> £rv” , »q -> aý_£id ); 2122 ià(! £p || !£p-> ¡»am ) 2123  TRUE ; 2125 ià( £p -> šd && s•->šd-> abÜt ) 2126 £p -> šd -> `abÜt ( £ssiÚ , s•, s•-> ¡»am , & ”r , 2127 £p -> u£r_d©a ); 2129 `avd_check_cÞlisiÚ ( £ssiÚ , AVDTP_ABORT , £p -> ¡»am ); 2131 »t = `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 2132 AVDTP_ABORT , NULL , 0); 2133 ià( »t ) 2134 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_ABORTING ); 2136  »t ; 2137 } } 2139  gboÞ—n $avd_£cùl_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 2140  £id_»q * »q ,  size ) 2142  `avd_unknown_cmd ( £ssiÚ , Œª§ùiÚ , AVDTP_SECURITY_CONTROL ); 2143 } } 2145  gboÞ—n $avd_d–ay»pÜt_cmd ( avd * £ssiÚ , 2146 ušt8_t Œª§ùiÚ , 2147  d–ay_»q * »q , 2148  size ) 2150  avd_loÿl_£p * £p ; 2151  avd_¡»am * ¡»am ; 2152 ušt8_t ”r ; 2154 ià( size < ( d–ay_»q )) { 2155 `”rÜ ("Too short delay„eport„equest"); 2156  FALSE ; 2159 £p = `fšd_loÿl_£p_by_£id ( £ssiÚ -> £rv” , »q -> aý_£id ); 2160 ià(! £p || !£p-> ¡»am ) { 2161 ”r = AVDTP_BAD_ACP_SEID ; 2162  çžed ; 2165 ¡»am = £p ->stream; 2167 ià( £p -> ¡©e !ð AVDTP_STATE_CONFIGURED && 2168 £p -> ¡©e !ð AVDTP_STATE_STREAMING ) { 2169 ”r = AVDTP_BAD_STATE ; 2170  çžed ; 2173 ¡»am -> d–ay = `Áohs ( »q ->delay); 2175 ià( £p -> šd && s•->šd-> d–ay»pÜt ) { 2176 ià(! £p -> šd -> `d–ay»pÜt ( £ssiÚ , s•, ¡»am -> r£id , 2177 ¡»am -> d–ay , & ”r , 2178 £p -> u£r_d©a )) 2179  çžed ; 2182  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_ACCEPT , 2183 AVDTP_DELAY_REPORT , NULL , 0); 2185 çžed : 2186  `avd_£nd ( £ssiÚ , Œª§ùiÚ , AVDTP_MSG_TYPE_REJECT , 2187 AVDTP_DELAY_REPORT , & ”r , (err)); 2188 } } 2190  gboÞ—n $avd_·r£_cmd ( avd * £ssiÚ , ušt8_t Œª§ùiÚ , 2191 ušt8_t sigÇl_id , * buf ,  size ) 2193  sigÇl_id ) { 2194  AVDTP_DISCOVER : 2195 `DBG ("Received DISCOVER_CMD"); 2196  `avd_discov”_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 2197  AVDTP_GET_CAPABILITIES : 2198 `DBG ("Received GET_CAPABILITIES_CMD"); 2199  `avd_g‘ÿp_cmd ( £ssiÚ , Œª§ùiÚ , buf , size , 2200 FALSE ); 2201  AVDTP_GET_ALL_CAPABILITIES : 2202 `DBG ("Received GET_ALL_CAPABILITIES_CMD"); 2203  `avd_g‘ÿp_cmd ( £ssiÚ , Œª§ùiÚ , buf , size , TRUE ); 2204  AVDTP_SET_CONFIGURATION : 2205 `DBG ("Received SET_CONFIGURATION_CMD"); 2206  `avd_£tcÚf_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 2207  AVDTP_GET_CONFIGURATION : 2208 `DBG ("Received GET_CONFIGURATION_CMD"); 2209  `avd_g‘cÚf_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 2210  AVDTP_RECONFIGURE : 2211 `DBG ("Received RECONFIGURE_CMD"); 2212  `avd_»cÚf_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 2213  AVDTP_OPEN : 2214 `DBG ("Received OPEN_CMD"); 2215  `avd_Ý’_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 2216  AVDTP_START : 2217 `DBG ("Received START_CMD"); 2218  `avd_¡¬t_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 2219  AVDTP_CLOSE : 2220 `DBG ("Received CLOSE_CMD"); 2221  `avd_þo£_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 2222  AVDTP_SUSPEND : 2223 `DBG ("Received SUSPEND_CMD"); 2224  `avd_su¥’d_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 2225  AVDTP_ABORT : 2226 `DBG ("Received ABORT_CMD"); 2227  `avd_abÜt_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 2228  AVDTP_SECURITY_CONTROL : 2229 `DBG ("Received SECURITY_CONTROL_CMD"); 2230  `avd_£cùl_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 2231  AVDTP_DELAY_REPORT : 2232 `DBG ("Received DELAY_REPORT_CMD"); 2233  `avd_d–ay»pÜt_cmd ( £ssiÚ , Œª§ùiÚ , buf , size ); 2235 `DBG ("Reûived unknowÀ»que¡ id %u", sigÇl_id ); 2236  `avd_unknown_cmd ( £ssiÚ , Œª§ùiÚ , sigÇl_id ); 2238 } } 2240 eavd_·r£_»suÉ { mPARSE_ERROR , mPARSE_FRAGMENT , mPARSE_SUCCESS }; 2242  avd_·r£_»suÉ $avd_·r£_d©a ( avd * £ssiÚ , 2243 * buf , size_t size ) 2245  avd_commÚ_h—d” * h—d” = buf ; 2246  avd_sšgË_h—d” * sšgË = (*è £ssiÚ -> buf ; 2247  avd_¡¬t_h—d” * ¡¬t = (*è £ssiÚ -> buf ; 2248 * ·ylßd ; 2249 gsize ·ylßd_size ; 2251  h—d” -> ·ck‘_ty³ ) { 2252  AVDTP_PKT_TYPE_SINGLE : 2253 ià( size < (* sšgË )) { 2254 `”rÜ ("ReûivedoØsm®ÈsšgË…ack‘ (%zu by‹s)", size ); 2255  PARSE_ERROR ; 2257 ià( £ssiÚ -> š . aùive ) { 2258 `”rÜ ("SINGLE: Invalid AVDTP…acket fragmentation"); 2259  PARSE_ERROR ; 2262 ·ylßd = £ssiÚ -> buf + (* sšgË ); 2263 ·ylßd_size = size - (* sšgË ); 2265 £ssiÚ -> š . aùive = TRUE ; 2266 £ssiÚ -> š . d©a_size = 0; 2267 £ssiÚ -> š . no_of_·ck‘s = 1; 2268 £ssiÚ -> š . Œª§ùiÚ = h—d” ->transaction; 2269 £ssiÚ -> š . mes§ge_ty³ = h—d” ->message_type; 2270 £ssiÚ -> š . sigÇl_id = sšgË ->signal_id; 2273  AVDTP_PKT_TYPE_START : 2274 ià( size < (* ¡¬t )) { 2275 `”rÜ ("ReûivedoØsm®È¡¬ˆ·ck‘ (%zu by‹s)", size ); 2276  PARSE_ERROR ; 2278 ià( £ssiÚ -> š . aùive ) { 2279 `”rÜ ("START: Invalid AVDTP…acket fragmentation"); 2280  PARSE_ERROR ; 2283 £ssiÚ -> š . aùive = TRUE ; 2284 £ssiÚ -> š . d©a_size = 0; 2285 £ssiÚ -> š . Œª§ùiÚ = h—d” ->transaction; 2286 £ssiÚ -> š . mes§ge_ty³ = h—d” ->message_type; 2287 £ssiÚ -> š . no_of_·ck‘s = ¡¬t ->no_of_packets; 2288 £ssiÚ -> š . sigÇl_id = ¡¬t ->signal_id; 2290 ·ylßd = £ssiÚ -> buf + (* ¡¬t ); 2291 ·ylßd_size = size - (* ¡¬t ); 2294  AVDTP_PKT_TYPE_CONTINUE : 2295 ià( size < ( avd_cÚtšue_h—d” )) { 2296 `”rÜ ("Receivedoo small continue…acket (%zu bytes)", 2297 size ); 2298  PARSE_ERROR ; 2300 ià(! £ssiÚ -> š . aùive ) { 2301 `”rÜ ("CONTINUE: Invalid AVDTP…acket fragmentation"); 2302  PARSE_ERROR ; 2304 ià( £ssiÚ -> š . Œª§ùiÚ !ð h—d” ->transaction) { 2305 `”rÜ ("Continueransaction id doesn't match"); 2306  PARSE_ERROR ; 2308 ià( £ssiÚ -> š . no_of_·ck‘s <= 1) { 2309 `”rÜ ("Too few continue…ackets"); 2310  PARSE_ERROR ; 2313 ·ylßd = £ssiÚ -> buf + ( avd_cÚtšue_h—d” ); 2314 ·ylßd_size = size - ( avd_cÚtšue_h—d” ); 2317  AVDTP_PKT_TYPE_END : 2318 ià( size < ( avd_cÚtšue_h—d” )) { 2319 `”rÜ ("ReûivedoØsm®È’d…ack‘ (%zu by‹s)", size ); 2320  PARSE_ERROR ; 2322 ià(! £ssiÚ -> š . aùive ) { 2323 `”rÜ ("END: Invalid AVDTP…acket fragmentation"); 2324  PARSE_ERROR ; 2326 ià( £ssiÚ -> š . Œª§ùiÚ !ð h—d” ->transaction) { 2327 `”rÜ ("Endransaction id doesn't match"); 2328  PARSE_ERROR ; 2330 ià( £ssiÚ -> š . no_of_·ck‘s > 1) { 2331 `”rÜ ("Got‡nƒnd…acketooƒarly"); 2332  PARSE_ERROR ; 2335 ·ylßd = £ssiÚ -> buf + ( avd_cÚtšue_h—d” ); 2336 ·ylßd_size = size - ( avd_cÚtšue_h—d” ); 2340 `”rÜ ("Inv®id AVDTP…ack‘y³ 0x%02X", h—d” -> ·ck‘_ty³ ); 2341  PARSE_ERROR ; 2344 ià( £ssiÚ -> š . d©a_size + ·ylßd_size > 2345 ( £ssiÚ -> š . buf )) { 2346 `”rÜ ("Notƒnough incoming buffer space!"); 2347  PARSE_ERROR ; 2350 `memýy ( £ssiÚ -> š . buf + sessiÚ->š. d©a_size , ·ylßd , ·ylßd_size ); 2351 £ssiÚ -> š . d©a_size +ð ·ylßd_size ; 2353 ià( £ssiÚ -> š . no_of_·ck‘s > 1) { 2354 £ssiÚ -> š . no_of_·ck‘s --; 2355 `DBG ("Received AVDTP fragment. %do go", 2356 £ssiÚ -> š . no_of_·ck‘s ); 2357  PARSE_FRAGMENT ; 2360 £ssiÚ -> š . aùive = FALSE ; 2362  PARSE_SUCCESS ; 2363 } } 2365  gboÞ—n $£ssiÚ_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 2366 gpoš‹r d©a ) 2368  avd * £ssiÚ = d©a ; 2369  avd_commÚ_h—d” * h—d” ; 2370 ssize_t size ; 2371  fd ; 2373 `DBG (""); 2375 ià( cÚd & G_IO_NVAL ) 2376  FALSE ; 2378 h—d” = (*è £ssiÚ -> buf ; 2380 ià( cÚd & ( G_IO_HUP | G_IO_ERR )) 2381  çžed ; 2383 fd = `g_io_chªÃl_unix_g‘_fd ( chª ); 2384 size = `»ad ( fd , £ssiÚ -> buf , sessiÚ-> imtu ); 2385 ià( size < 0) { 2386 `”rÜ ("IO Channel„eadƒrror"); 2387  çžed ; 2390 ià(( size_t è size < ( avd_commÚ_h—d” )) { 2391 `”rÜ ("ReûivedoØsm®È·ck‘ (%zu by‹s)", size ); 2392  çžed ; 2395  `avd_·r£_d©a ( £ssiÚ , sessiÚ-> buf , size )) { 2396  PARSE_ERROR : 2397  çžed ; 2398  PARSE_FRAGMENT : 2399  TRUE ; 2400  PARSE_SUCCESS : 2404 ià( £ssiÚ -> š . mes§ge_ty³ =ð AVDTP_MSG_TYPE_COMMAND ) { 2405 ià(! `avd_·r£_cmd ( £ssiÚ , sessiÚ-> š . Œª§ùiÚ , 2406 £ssiÚ -> š . sigÇl_id , 2407 £ssiÚ -> š . buf , 2408 £ssiÚ -> š . d©a_size )) { 2409 `”rÜ ("Unableo handle command. Disconnecting"); 2410  çžed ; 2413 ià( £ssiÚ -> »q && sessiÚ->»q-> cÞlided ) { 2414 `DBG ("Collision detected"); 2415  Ãxt ; 2418  TRUE ; 2421 ià( £ssiÚ -> »q =ð NULL ) { 2422 `”rÜ ("No…ending„equest, ignoring message"); 2423  TRUE ; 2426 ià( h—d” -> Œª§ùiÚ !ð £ssiÚ -> »q ->transaction) { 2427 `”rÜ ("Transaction†abel doesn't match"); 2428  TRUE ; 2431 ià( £ssiÚ -> š . sigÇl_id !ð£ssiÚ-> »q ->signal_id) { 2432 `”rÜ ("Response signal doesn't match"); 2433  TRUE ; 2436 `g_sourû_»move ( £ssiÚ -> »q -> timeout ); 2437 £ssiÚ -> »q -> timeout = 0; 2439  h—d” -> mes§ge_ty³ ) { 2440  AVDTP_MSG_TYPE_ACCEPT : 2441 ià(! `avd_·r£_»¥ ( £ssiÚ , sessiÚ-> »q -> ¡»am , 2442 £ssiÚ -> š . Œª§ùiÚ , 2443 £ssiÚ -> š . sigÇl_id , 2444 £ssiÚ -> š . buf , 2445 £ssiÚ -> š . d©a_size )) { 2446 `”rÜ ("Unableo…arse‡ccept„esponse"); 2447  çžed ; 2450  AVDTP_MSG_TYPE_REJECT : 2451 ià(! `avd_·r£_»j ( £ssiÚ , sessiÚ-> »q -> ¡»am , 2452 £ssiÚ -> š . Œª§ùiÚ , 2453 £ssiÚ -> š . sigÇl_id , 2454 £ssiÚ -> š . buf , 2455 £ssiÚ -> š . d©a_size )) { 2456 `”rÜ ("Unableo…arse„eject„esponse"); 2457  çžed ; 2460  AVDTP_MSG_TYPE_GEN_REJECT : 2461 `”rÜ ("Received‡ General Reject message"); 2464 `”rÜ ("UnknowÀmes§gty³ 0x%02X", h—d” -> mes§ge_ty³ ); 2468 Ãxt : 2469 `³ndšg_»q_ä“ ( £ssiÚ -> »q ); 2470 £ssiÚ -> »q = NULL ; 2472 `´oûss_queue ( £ssiÚ ); 2474  TRUE ; 2476 çžed : 2477 `cÚÃùiÚ_lo¡ ( £ssiÚ , EIO ); 2479  FALSE ; 2480 } } 2482  avd * $fšd_£ssiÚ ( GSLi¡ * li¡ ,  btd_deviû * deviû ) 2484 ; li¡ !ð NULL ;†i¡ = `g_¦i¡_Ãxt (list)) { 2485  avd * s = li¡ -> d©a ; 2487 ià( s -> deviû == device) 2488  s ; 2491  NULL ; 2492 } } 2494  ušt16_t $g‘_v”siÚ ( avd * £ssiÚ ) 2496 cÚ¡ sdp_»cÜd_t * »c ; 2497 sdp_li¡_t * ´Ùos ; 2498 sdp_d©a_t * ´Ùo_desc ; 2499 ušt16_t v” = 0x0100; 2501 »c = `btd_deviû_g‘_»cÜd ( £ssiÚ -> deviû , A2DP_SINK_UUID ); 2502 ià(! »c ) 2503 »c = `btd_deviû_g‘_»cÜd ( £ssiÚ -> deviû , A2DP_SOURCE_UUID ); 2505 ià(! »c ) 2506  v” ; 2508 ià( `sdp_g‘_acûss_´Ùos ( »c , & ´Ùos ) < 0) 2509  v” ; 2511 ´Ùo_desc = `sdp_g‘_´Ùo_desc ( ´Ùos , AVDTP_UUID ); 2512 ià( ´Ùo_desc &&…rÙo_desc-> dtd =ð SDP_UINT16 ) 2513 v” = ´Ùo_desc -> v® . ušt16 ; 2515 `sdp_li¡_fÜ—ch ( ´Ùos , ( sdp_li¡_func_t è sdp_li¡_ä“ , NULL ); 2516 `sdp_li¡_ä“ ( ´Ùos , NULL ); 2518  v” ; 2519 } } 2521  avd * $avd_g‘_š‹º® ( btd_deviû * deviû ) 2523  avd_£rv” * £rv” ; 2524  avd * £ssiÚ ; 2526 £rv” = `fšd_£rv” ( £rv”s , `deviû_g‘_ad­‹r ( deviû )); 2527 ià( £rv” =ð NULL ) 2528  NULL ; 2530 £ssiÚ = `fšd_£ssiÚ ( £rv” -> £ssiÚs , deviû ); 2531 ià( £ssiÚ ) 2532  £ssiÚ ; 2534 £ssiÚ = `g_Ãw0 ( avd , 1); 2536 £ssiÚ -> £rv” = server; 2537 £ssiÚ -> deviû = `btd_deviû_»f (device); 2540 £ssiÚ -> ¡©e = AVDTP_SESSION_STATE_DISCONNECTED ; 2542 £ssiÚ -> v”siÚ = `g‘_v”siÚ (session); 2544 £rv” -> £ssiÚs = `g_¦i¡_­³nd (£rv”->£ssiÚs, £ssiÚ ); 2546  £ssiÚ ; 2547 } } 2549  avd * $avd_g‘ ( btd_deviû * deviû ) 2551  avd * £ssiÚ ; 2553 £ssiÚ = `avd_g‘_š‹º® ( deviû ); 2555 ià(! £ssiÚ ) 2556  NULL ; 2558  `avd_»f ( £ssiÚ ); 2559 } } 2561  $avd_cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 2563  avd * £ssiÚ = u£r_d©a ; 2564  add»ss [18]; 2565  ”r_no = EIO ; 2567 ià( ”r ) { 2568 ”r_no = ”r -> code ; 2569 `”rÜ ("%s", ”r -> mes§ge ); 2570  çžed ; 2573 ià(! £ssiÚ -> io ) 2574 £ssiÚ -> io = `g_io_chªÃl_»f ( chª ); 2576 `bt_io_g‘ ( chª , & ”r , 2577 BT_IO_OPT_OMTU , & £ssiÚ -> omtu , 2578 BT_IO_OPT_IMTU , & £ssiÚ -> imtu , 2579 BT_IO_OPT_INVALID ); 2580 ià( ”r ) { 2581 ”r_no = ”r -> code ; 2582 `”rÜ ("%s", ”r -> mes§ge ); 2583  çžed ; 2586 `ba2¡r ( `deviû_g‘_add»ss ( £ssiÚ -> deviû ), add»ss ); 2587 `DBG ("AVDTP: connected %s channelo %s", 2588 £ssiÚ -> ³ndšg_Ý’ ? "transport" : "signaling", 2589 add»ss ); 2591 ià( £ssiÚ -> ¡©e =ð AVDTP_SESSION_STATE_CONNECTING ) { 2592 `DBG ("AVDTP imtu=%u, omtu=%u", £ssiÚ -> imtu , sessiÚ-> omtu ); 2594 £ssiÚ -> buf = `g_m®loc0 ( `MAX (£ssiÚ-> imtu , sessiÚ-> omtu )); 2595 `avd_£t_¡©e ( £ssiÚ , AVDTP_SESSION_STATE_CONNECTED ); 2597 ià( £ssiÚ -> io_id ) 2598 `g_sourû_»move ( £ssiÚ -> io_id ); 2607 £ssiÚ -> io_id = `g_io_add_w©ch_fuÎ ( chª , 2608 G_PRIORITY_LOW , 2609 G_IO_IN | G_IO_ERR | G_IO_HUP 2610 | G_IO_NVAL , 2611 ( GIOFunc è £ssiÚ_cb , £ssiÚ , 2612 NULL ); 2614 ià( £ssiÚ -> ¡»am_£tup ) 2615 `£t_discÚÃù_tim” ( £ssiÚ ); 2616 } ià( £ssiÚ -> ³ndšg_Ý’ ) 2617 `hªdË_Œª¥Üt_cÚÃù ( £ssiÚ , chª , sessiÚ-> imtu , 2618 £ssiÚ -> omtu ); 2620  çžed ; 2622 `´oûss_queue ( £ssiÚ ); 2626 çžed : 2627 ià( £ssiÚ -> ³ndšg_Ý’ ) { 2628  avd_¡»am * ¡»am = £ssiÚ -> ³ndšg_Ý’ ; 2630 `hªdË_Œª¥Üt_cÚÃù ( £ssiÚ , NULL , 0, 0); 2632 ià( `avd_abÜt ( £ssiÚ , ¡»am ) < 0) 2633 `avd_£p_£t_¡©e ( £ssiÚ , ¡»am -> l£p , 2634 AVDTP_STATE_IDLE ); 2636 `cÚÃùiÚ_lo¡ ( £ssiÚ , ”r_no ); 2637 } } 2639  $auth_cb ( DBusE¼Ü * d”r , * u£r_d©a ) 2641  avd * £ssiÚ = u£r_d©a ; 2642 GE¼Ü * ”r = NULL ; 2644 ià( d”r && `dbus_”rÜ_is_£t (derr)) { 2645 `”rÜ ("Acûs d’›d: %s", d”r -> mes§ge ); 2646 `cÚÃùiÚ_lo¡ ( £ssiÚ , EACCES ); 2650 ià(! `bt_io_acû± ( £ssiÚ -> io , avd_cÚÃù_cb , sessiÚ, NULL , 2651 & ”r )) { 2652 `”rÜ ("bt_io_acû±: %s", ”r -> mes§ge ); 2653 `cÚÃùiÚ_lo¡ ( £ssiÚ , EACCES ); 2654 `g_”rÜ_ä“ ( ”r ); 2660 £ssiÚ -> ¡»am_£tup = TRUE ; 2661 } } 2663  $avd_cÚfœm_cb ( GIOChªÃl * chª , gpoš‹r d©a ) 2665  avd * £ssiÚ ; 2666  add»ss [18]; 2667 bdaddr_t ¤c , d¡ ; 2668 GE¼Ü * ”r = NULL ; 2669  btd_deviû * deviû ; 2671 `bt_io_g‘ ( chª , & ”r , 2672 BT_IO_OPT_SOURCE_BDADDR , & ¤c , 2673 BT_IO_OPT_DEST_BDADDR , & d¡ , 2674 BT_IO_OPT_DEST , add»ss , 2675 BT_IO_OPT_INVALID ); 2676 ià( ”r ) { 2677 `”rÜ ("%s", ”r -> mes§ge ); 2678 `g_”rÜ_ä“ ( ”r ); 2679  drÝ ; 2682 `DBG ("AVDTP: incomšg cÚÃù from %s", add»ss ); 2684 deviû = `btd_ad­‹r_fšd_deviû ( `ad­‹r_fšd (& ¤c ), & d¡ , 2685 BDADDR_BREDR ); 2686 ià(! deviû ) 2687  drÝ ; 2689 £ssiÚ = `avd_g‘_š‹º® ( deviû ); 2690 ià(! £ssiÚ ) 2691  drÝ ; 2699 ià( £ssiÚ -> ¡©e =ð AVDTP_SESSION_STATE_CONNECTING ) { 2700 `DBG ("connect‡lready in…rogress (XCASE connect:connect)"); 2701  drÝ ; 2704 ià( £ssiÚ -> ³ndšg_Ý’ && sessiÚ->³ndšg_Ý’-> Ý’_aý ) { 2705 ià(! `bt_io_acû± ( chª , avd_cÚÃù_cb , £ssiÚ , NULL , NULL)) 2706  drÝ ; 2710 ià( £ssiÚ -> io ) { 2711 `”rÜ ("Refusšg uÃx³ùed cÚÃù from %s", add»ss ); 2712  drÝ ; 2715 `btd_deviû_add_uuid ( deviû , ADVANCED_AUDIO_UUID ); 2717 £ssiÚ -> io = `g_io_chªÃl_»f ( chª ); 2718 `avd_£t_¡©e ( £ssiÚ , AVDTP_SESSION_STATE_CONNECTING ); 2720 £ssiÚ -> io_id = `g_io_add_w©ch ( chª , G_IO_ERR | G_IO_HUP | G_IO_NVAL , 2721 ( GIOFunc è £ssiÚ_cb , £ssiÚ ); 2723 £ssiÚ -> auth_id = `btd_»que¡_authÜiz©iÚ (& ¤c , & d¡ , 2724 ADVANCED_AUDIO_UUID , 2725 auth_cb , £ssiÚ ); 2726 ià( £ssiÚ -> auth_id == 0) { 2727 `avd_£t_¡©e ( £ssiÚ , AVDTP_SESSION_STATE_DISCONNECTED ); 2728  drÝ ; 2733 drÝ : 2734 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 2735 } } 2737  GIOChªÃl * $l2ÿp_cÚÃù ( avd * £ssiÚ ) 2739 GE¼Ü * ”r = NULL ; 2740 GIOChªÃl * io ; 2741 cÚ¡ bdaddr_t * ¤c ; 2743 ¤c = `btd_ad­‹r_g‘_add»ss ( £ssiÚ -> £rv” -> ad­‹r ); 2745 io = `bt_io_cÚÃù ( avd_cÚÃù_cb , £ssiÚ , 2746 NULL , & ”r , 2747 BT_IO_OPT_SOURCE_BDADDR , ¤c , 2748 BT_IO_OPT_DEST_BDADDR , 2749 `deviû_g‘_add»ss ( £ssiÚ -> deviû ), 2750 BT_IO_OPT_PSM , AVDTP_PSM , 2751 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 2752 BT_IO_OPT_INVALID ); 2753 ià(! io ) { 2754 `”rÜ ("%s", ”r -> mes§ge ); 2755 `g_”rÜ_ä“ ( ”r ); 2756  NULL ; 2759  io ; 2760 } } 2762  $queue_»que¡ ( avd * £ssiÚ ,  ³ndšg_»q * »q , 2763 gboÞ—n ´iÜ™y ) 2765 ià( ´iÜ™y ) 2766 £ssiÚ -> ´io_queue = `g_¦i¡_­³nd (£ssiÚ->´io_queue, »q ); 2768 £ssiÚ -> »q_queue = `g_¦i¡_­³nd (£ssiÚ->»q_queue, »q ); 2769 } } 2771  ušt8_t $»q_g‘_£id ( ³ndšg_»q * »q ) 2773 ià( »q -> sigÇl_id =ð AVDTP_DISCOVER ) 2776  (( £id_»q *è( »q -> d©a ))-> aý_£id ; 2777 } } 2779  $ÿnûl_»que¡ ( avd * £ssiÚ ,  ”r ) 2781  ³ndšg_»q * »q ; 2782  £id_»q ¤eq ; 2783  avd_loÿl_£p * l£p ; 2784  avd_¡»am * ¡»am ; 2785 ušt8_t £id ; 2786  avd_”rÜ av”r ; 2788 »q = £ssiÚ ->req; 2789 £ssiÚ -> »q = NULL ; 2791 `avd_”rÜ_š™ (& av”r , AVDTP_ERRNO , ”r ); 2793 £id = `»q_g‘_£id ( »q ); 2794 ià( £id ) 2795 ¡»am = `fšd_¡»am_by_r£id ( £ssiÚ , £id ); 2797 ¡»am = NULL ; 2799 ià( ¡»am ) { 2800 ¡»am -> abÜt_št = TRUE ; 2801 l£p = ¡»am ->lsep; 2803 l£p = NULL ; 2805  »q -> sigÇl_id ) { 2806  AVDTP_RECONFIGURE : 2807 `”rÜ ("RecÚfigu»: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2808 ià( l£p &&†£p-> cfm &&†£p->cfm-> »cÚfigu» ) 2809 l£p -> cfm -> `»cÚfigu» ( £ssiÚ ,†£p, ¡»am , & av”r , 2810 l£p -> u£r_d©a ); 2812  AVDTP_OPEN : 2813 `”rÜ ("O³n: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2814 ià( l£p &&†£p-> cfm &&†£p->cfm-> Ý’ ) 2815 l£p -> cfm -> `Ý’ ( £ssiÚ ,†£p, ¡»am , & av”r , 2816 l£p -> u£r_d©a ); 2818  AVDTP_START : 2819 `”rÜ ("S¹: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2820 ià( l£p &&†£p-> cfm &&†£p->cfm-> ¡¬t ) { 2821 l£p -> cfm -> `¡¬t ( £ssiÚ ,†£p, ¡»am , & av”r , 2822 l£p -> u£r_d©a ); 2823 ià( ¡»am ) 2824 ¡»am -> ¡¬tšg = FALSE ; 2827  AVDTP_SUSPEND : 2828 `”rÜ ("Su¥’d: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2829 ià( l£p &&†£p-> cfm &&†£p->cfm-> su¥’d ) 2830 l£p -> cfm -> `su¥’d ( £ssiÚ ,†£p, ¡»am , & av”r , 2831 l£p -> u£r_d©a ); 2833  AVDTP_CLOSE : 2834 `”rÜ ("Clo£: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2835 ià( l£p &&†£p-> cfm &&†£p->cfm-> þo£ ) { 2836 l£p -> cfm -> `þo£ ( £ssiÚ ,†£p, ¡»am , & av”r , 2837 l£p -> u£r_d©a ); 2838 ià( ¡»am ) 2839 ¡»am -> þo£_št = FALSE ; 2842  AVDTP_SET_CONFIGURATION : 2843 `”rÜ ("S‘CÚfigu¿tiÚ: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2844 ià( l£p &&†£p-> cfm &&†£p->cfm-> £t_cÚfigu¿tiÚ ) 2845 l£p -> cfm -> `£t_cÚfigu¿tiÚ ( £ssiÚ ,†£p, ¡»am , 2846 & av”r , l£p -> u£r_d©a ); 2847  çžed ; 2848  AVDTP_DISCOVER : 2849 `”rÜ ("Discov”: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2850  çžed ; 2851  AVDTP_GET_CAPABILITIES : 2852 `”rÜ ("G‘C­abž™›s: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2853  çžed ; 2854  AVDTP_ABORT : 2855 `”rÜ ("AbÜt: % (%d)", `¡»¼Ü ( ”r ),ƒrr); 2856  çžed ; 2859 ià(! ¡»am ) 2860  çžed ; 2862 `mem£t (& ¤eq , 0, (sreq)); 2863 ¤eq . aý_£id = £id ; 2865 ”r = `£nd_»que¡ ( £ssiÚ , TRUE , ¡»am , AVDTP_ABORT , & ¤eq , 2866 ( ¤eq )); 2867 ià( ”r < 0) { 2868 `”rÜ ("Unableo send‡bort„equest"); 2869  çžed ; 2872  dÚe ; 2874 çžed : 2875 `cÚÃùiÚ_lo¡ ( £ssiÚ , ”r ); 2876 dÚe : 2877 `³ndšg_»q_ä“ ( »q ); 2878  ”r ; 2879 } } 2881  gboÞ—n $»que¡_timeout ( gpoš‹r u£r_d©a ) 2883  avd * £ssiÚ = u£r_d©a ; 2885 `ÿnûl_»que¡ ( £ssiÚ , ETIMEDOUT ); 2887  FALSE ; 2888 } } 2890  $£nd_»q ( avd * £ssiÚ , gboÞ—n ´iÜ™y , 2891  ³ndšg_»q * »q ) 2893  Œª§ùiÚ = 0; 2894  ”r ; 2896 ià( £ssiÚ -> ¡©e =ð AVDTP_SESSION_STATE_DISCONNECTED ) { 2897 £ssiÚ -> io = `l2ÿp_cÚÃù (session); 2898 ià(! £ssiÚ -> io ) { 2899 ”r = - EIO ; 2900  çžed ; 2902 `avd_£t_¡©e ( £ssiÚ , AVDTP_SESSION_STATE_CONNECTING ); 2905 ià( £ssiÚ -> ¡©e < AVDTP_SESSION_STATE_CONNECTED || 2906 £ssiÚ -> »q !ð NULL ) { 2907 `queue_»que¡ ( £ssiÚ , »q , ´iÜ™y ); 2911 »q -> Œª§ùiÚ =ransaction++; 2912 Œª§ùiÚ %= 16; 2916 ià(! `avd_£nd ( £ssiÚ , »q -> Œª§ùiÚ , AVDTP_MSG_TYPE_COMMAND , 2917 »q -> sigÇl_id ,„eq-> d©a ,„eq-> d©a_size )) { 2918 ”r = - EIO ; 2919  çžed ; 2922 £ssiÚ -> »q =„eq; 2924 »q -> timeout = `g_timeout_add_£cÚds Ôeq-> sigÇl_id =ð AVDTP_ABORT ? 2925 ABORT_TIMEOUT : REQ_TIMEOUT , 2926 »que¡_timeout , 2927 £ssiÚ ); 2930 çžed : 2931 `g_ä“ ( »q -> d©a ); 2932 `g_ä“ ( »q ); 2933  ”r ; 2934 } } 2936  $£nd_»que¡ ( avd * £ssiÚ , gboÞ—n ´iÜ™y , 2937  avd_¡»am * ¡»am , ušt8_t sigÇl_id , 2938 * bufãr , size_t size ) 2940  ³ndšg_»q * »q ; 2942 ià( ¡»am && sŒ—m-> abÜt_št && sigÇl_id !ð AVDTP_ABORT ) { 2943 `DBG ("Unableo send„equests while‡borting"); 2944  - EINVAL ; 2947 »q = `g_Ãw0 ( ³ndšg_»q , 1); 2948 »q -> sigÇl_id = signal_id; 2949 »q -> d©a = `g_m®loc ( size ); 2950 `memýy ( »q -> d©a , bufãr , size ); 2951 »q -> d©a_size = size ; 2952 »q -> ¡»am = stream; 2954  `£nd_»q ( £ssiÚ , ´iÜ™y , »q ); 2955 } } 2957  gboÞ—n $avd_discov”_»¥ ( avd * £ssiÚ , 2958  discov”_»¥ * »¥ ,  size ) 2960  £p_couÁ , i ; 2961 ušt8_t g‘ÿp_cmd ; 2962  »t = 0; 2963 gboÞ—n g‘ÿp_³ndšg = FALSE ; 2965 ià( £ssiÚ -> v”siÚ >= 0x0103) 2966 g‘ÿp_cmd = AVDTP_GET_ALL_CAPABILITIES ; 2968 g‘ÿp_cmd = AVDTP_GET_CAPABILITIES ; 2970 £p_couÁ = size / ( £id_šfo ); 2972  i = 0; i < £p_couÁ ; i++) { 2973  avd_»mÙe_£p * £p ; 2974  avd_¡»am * ¡»am ; 2975  £id_»q »q ; 2977 `DBG ("seid %dype %d media %d in use %d", 2978 »¥ -> £ps [ i ]. £id ,„e¥->£ps[i]. ty³ , 2979 »¥ -> £ps [ i ]. medŸ_ty³ ,„e¥->£ps[i]. šu£ ); 2981 ¡»am = `fšd_¡»am_by_r£id ( £ssiÚ , »¥ -> £ps [ i ]. £id ); 2983 £p = `fšd_»mÙe_£p ( £ssiÚ -> £ps , »¥ ->£ps[ i ]. £id ); 2984 ià(! £p ) { 2985 ià( »¥ -> £ps [ i ]. šu£ && ! ¡»am ) 2987 £p = `g_Ãw0 ( avd_»mÙe_£p , 1); 2988 £ssiÚ -> £ps = `g_¦i¡_­³nd (£ssiÚ->£ps, £p ); 2991 £p -> ¡»am = stream; 2992 £p -> £id = »¥ -> £ps [ i ].seid; 2993 £p -> ty³ = »¥ -> £ps [ i ].type; 2994 £p -> medŸ_ty³ = »¥ -> £ps [ i ].media_type; 2996 `mem£t (& »q , 0, (req)); 2997 »q . aý_£id = £p -> £id ; 2999 »t = `£nd_»que¡ ( £ssiÚ , TRUE , NULL , g‘ÿp_cmd , 3000 & »q , (req)); 3001 ià( »t < 0) 3003 g‘ÿp_³ndšg = TRUE ; 3006 ià(! g‘ÿp_³ndšg ) 3007 `fš®ize_discov”y ( £ssiÚ , - »t ); 3009  TRUE ; 3010 } } 3012  gboÞ—n $avd_g‘_ÿ·bž™›s_»¥ ( avd * £ssiÚ , 3013  g‘ÿp_»¥ * »¥ , 3014  size ) 3016  avd_»mÙe_£p * £p ; 3017 ušt8_t £id ; 3025 ià( size < (( g‘ÿp_»¥ ) + 4 + 3026 ( avd_medŸ_codec_ÿ·bž™y ))) { 3027 `”rÜ ("Too short getcap„esp…acket"); 3028  FALSE ; 3031 £id = (( £id_»q *è £ssiÚ -> »q -> d©a )-> aý_£id ; 3033 £p = `fšd_»mÙe_£p ( £ssiÚ -> £ps , £id ); 3035 `DBG ("£id %dy³ %d medŸ %d", £p -> £id , 3036 £p -> ty³ , s•-> medŸ_ty³ ); 3038 ià( £p -> ÿps ) { 3039 `g_¦i¡_ä“_fuÎ ( £p -> ÿps , g_ä“ ); 3040 £p -> ÿps = NULL ; 3041 £p -> codec = NULL ; 3042 £p -> d–ay_»pÜtšg = FALSE ; 3045 £p -> ÿps = `ÿps_to_li¡ ( »¥ ->ÿps, size - ( g‘ÿp_»¥ ), 3046 & £p -> codec , &£p-> d–ay_»pÜtšg ); 3048  TRUE ; 3049 } } 3051  gboÞ—n $avd_£t_cÚfigu¿tiÚ_»¥ ( avd * £ssiÚ , 3052  avd_¡»am * ¡»am , 3053  avd_sšgË_h—d” * »¥ , 3054  size ) 3056  avd_loÿl_£p * £p = ¡»am -> l£p ; 3058 ià( £p -> cfm && s•->cfm-> £t_cÚfigu¿tiÚ ) 3059 £p -> cfm -> `£t_cÚfigu¿tiÚ ( £ssiÚ , s•, ¡»am , NULL , 3060 £p -> u£r_d©a ); 3062 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_CONFIGURED ); 3064  TRUE ; 3065 } } 3067  gboÞ—n $avd_»cÚfigu»_»¥ ( avd * £ssiÚ , 3068  avd_¡»am * ¡»am , 3069  avd_sšgË_h—d” * »¥ ,  size ) 3071  TRUE ; 3072 } } 3074  gboÞ—n $avd_Ý’_»¥ ( avd * £ssiÚ ,  avd_¡»am * ¡»am , 3075  £id_»j * »¥ ,  size ) 3077  avd_loÿl_£p * £p = ¡»am -> l£p ; 3079 ¡»am -> io = `l2ÿp_cÚÃù ( £ssiÚ ); 3080 ià(! ¡»am -> io ) { 3081 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_IDLE ); 3082  FALSE ; 3085 £ssiÚ -> ³ndšg_Ý’ = ¡»am ; 3087  TRUE ; 3088 } } 3090  gboÞ—n $avd_¡¬t_»¥ ( avd * £ssiÚ , 3091  avd_¡»am * ¡»am , 3092  £id_»j * »¥ ,  size ) 3094  avd_loÿl_£p * £p = ¡»am -> l£p ; 3096 ià( £p -> cfm && s•->cfm-> ¡¬t ) 3097 £p -> cfm -> `¡¬t ( £ssiÚ , s•, ¡»am , NULL , s•-> u£r_d©a ); 3101 ià( £p -> ¡©e !ð AVDTP_STATE_STREAMING ) 3102 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_STREAMING ); 3104  TRUE ; 3105 } } 3107  gboÞ—n $avd_þo£_»¥ ( avd * £ssiÚ , 3108  avd_¡»am * ¡»am , 3109  £id_»j * »¥ ,  size ) 3111  avd_loÿl_£p * £p = ¡»am -> l£p ; 3113 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_CLOSING ); 3115 `þo£_¡»am ( ¡»am ); 3117  TRUE ; 3118 } } 3120  gboÞ—n $avd_su¥’d_»¥ ( avd * £ssiÚ , 3121  avd_¡»am * ¡»am , 3122 * d©a ,  size ) 3124  avd_loÿl_£p * £p = ¡»am -> l£p ; 3126 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_OPEN ); 3128 ià( £p -> cfm && s•->cfm-> su¥’d ) 3129 £p -> cfm -> `su¥’d ( £ssiÚ , s•, ¡»am , NULL , s•-> u£r_d©a ); 3131  TRUE ; 3132 } } 3134  gboÞ—n $avd_abÜt_»¥ ( avd * £ssiÚ , 3135  avd_¡»am * ¡»am , 3136  £id_»j * »¥ ,  size ) 3138  avd_loÿl_£p * £p = ¡»am -> l£p ; 3139 #ifdeà __TIZEN_PATCH__ 3140 ià(! £p ) { 3141 `”rÜ ("Error in getting sep"); 3142  FALSE ; 3146 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_ABORTING ); 3148 ià( £p -> cfm && s•->cfm-> abÜt ) 3149 £p -> cfm -> `abÜt ( £ssiÚ , s•, ¡»am , NULL , s•-> u£r_d©a ); 3151 `avd_£p_£t_¡©e ( £ssiÚ , £p , AVDTP_STATE_IDLE ); 3153  TRUE ; 3154 } } 3156  gboÞ—n $avd_d–ay_»pÜt_»¥ ( avd * £ssiÚ , 3157  avd_¡»am * ¡»am , 3158 * d©a ,  size ) 3160  avd_loÿl_£p * £p = ¡»am -> l£p ; 3162 ià( £p -> cfm && s•->cfm-> d–ay_»pÜt ) 3163 £p -> cfm -> `d–ay_»pÜt ( £ssiÚ , s•, ¡»am , NULL , s•-> u£r_d©a ); 3165  TRUE ; 3166 } } 3168  gboÞ—n $avd_·r£_»¥ ( avd * £ssiÚ , 3169  avd_¡»am * ¡»am , 3170 ušt8_t Œª§ùiÚ , ušt8_ˆ sigÇl_id , 3171 * buf ,  size ) 3173  ³ndšg_»q * Ãxt ; 3174 cÚ¡ * g‘_®l = ""; 3176 ià( £ssiÚ -> ´io_queue ) 3177 Ãxt = £ssiÚ -> ´io_queue -> d©a ; 3178 ià( £ssiÚ -> »q_queue ) 3179 Ãxt = £ssiÚ -> »q_queue -> d©a ; 3181 Ãxt = NULL ; 3183  sigÇl_id ) { 3184  AVDTP_DISCOVER : 3185 `DBG ("DISCOVER„equest succeeded"); 3186  `avd_discov”_»¥ ( £ssiÚ , buf , size ); 3187  AVDTP_GET_ALL_CAPABILITIES : 3188 g‘_®l = "ALL_"; 3189  AVDTP_GET_CAPABILITIES : 3190 `DBG ("GET_%sCAPABILITIES„eque¡ sucûeded", g‘_®l ); 3191 ià(! `avd_g‘_ÿ·bž™›s_»¥ ( £ssiÚ , buf , size )) 3192  FALSE ; 3193 ià(!( Ãxt && (Ãxt-> sigÇl_id =ð AVDTP_GET_CAPABILITIES || 3194 Ãxt -> sigÇl_id =ð AVDTP_GET_ALL_CAPABILITIES ))) 3195 `fš®ize_discov”y ( £ssiÚ , 0); 3196  TRUE ; 3201 ià(! ¡»am ) { 3202 `DBG ("AVDTP: stream was closed while waiting for„eply"); 3203  TRUE ; 3206  sigÇl_id ) { 3207  AVDTP_SET_CONFIGURATION : 3208 `DBG ("SET_CONFIGURATION„equest succeeded"); 3209  `avd_£t_cÚfigu¿tiÚ_»¥ ( £ssiÚ , ¡»am , 3210 buf , size ); 3211  AVDTP_RECONFIGURE : 3212 `DBG ("RECONFIGURE„equest succeeded"); 3213  `avd_»cÚfigu»_»¥ ( £ssiÚ , ¡»am , buf , size ); 3214  AVDTP_OPEN : 3215 `DBG ("OPEN„equest succeeded"); 3216  `avd_Ý’_»¥ ( £ssiÚ , ¡»am , buf , size ); 3217  AVDTP_SUSPEND : 3218 `DBG ("SUSPEND„equest succeeded"); 3219  `avd_su¥’d_»¥ ( £ssiÚ , ¡»am , buf , size ); 3220  AVDTP_START : 3221 `DBG ("START„equest succeeded"); 3222  `avd_¡¬t_»¥ ( £ssiÚ , ¡»am , buf , size ); 3223  AVDTP_CLOSE : 3224 `DBG ("CLOSE„equest succeeded"); 3225  `avd_þo£_»¥ ( £ssiÚ , ¡»am , buf , size ); 3226  AVDTP_ABORT : 3227 `DBG ("ABORT„equest succeeded"); 3228  `avd_abÜt_»¥ ( £ssiÚ , ¡»am , buf , size ); 3229  AVDTP_DELAY_REPORT : 3230 `DBG ("DELAY_REPORT„equest succeeded"); 3231  `avd_d–ay_»pÜt_»¥ ( £ssiÚ , ¡»am , buf , size ); 3234 `”rÜ ("UnknowÀsigÇÈid iÀacû±„e¥Ú£: %u", sigÇl_id ); 3235  TRUE ; 3236 } } 3238  gboÞ—n $£id_»j_to_”r ( £id_»j * »j ,  size , 3239  avd_”rÜ * ”r ) 3241 ià( size < ( £id_»j )) { 3242 `”rÜ ("Too small…acket for seid_rej"); 3243  FALSE ; 3246 `avd_”rÜ_š™ ( ”r , 0x00, »j -> ”rÜ ); 3248  TRUE ; 3249 } } 3251  gboÞ—n $cÚf_»j_to_”r ( cÚf_»j * »j ,  size , 3252  avd_”rÜ * ”r ) 3254 ià( size < ( cÚf_»j )) { 3255 `”rÜ ("Too small…acket for conf_rej"); 3256  FALSE ; 3259 `avd_”rÜ_š™ ( ”r , »j -> ÿ‹gÜy ,„ej-> ”rÜ ); 3261  TRUE ; 3262 } } 3264  gboÞ—n $¡»am_»j_to_”r ( ¡»am_»j * »j ,  size , 3265  avd_”rÜ * ”r , 3266 ušt8_t * aý_£id ) 3268 ià( size < ( ¡»am_»j )) { 3269 `”rÜ ("Too small…acket for stream_rej"); 3270  FALSE ; 3273 `avd_”rÜ_š™ ( ”r , 0x00, »j -> ”rÜ ); 3275 ià( aý_£id ) 3276 * aý_£id = »j ->acp_seid; 3278  TRUE ; 3279 } } 3281  gboÞ—n $avd_·r£_»j ( avd * £ssiÚ , 3282  avd_¡»am * ¡»am , 3283 ušt8_t Œª§ùiÚ , ušt8_ˆ sigÇl_id , 3284 * buf ,  size ) 3286  avd_”rÜ ”r ; 3287 ušt8_t aý_£id ; 3288  avd_loÿl_£p * £p = ¡»am ? sŒ—m-> l£p : NULL ; 3290  sigÇl_id ) { 3291  AVDTP_DISCOVER : 3292 ià(! `£id_»j_to_”r ( buf , size , & ”r )) 3293  FALSE ; 3294 `”rÜ ("DISCOVER„equest„ejected: %s (%d)", 3295 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 3296  TRUE ; 3297  AVDTP_GET_CAPABILITIES : 3298  AVDTP_GET_ALL_CAPABILITIES : 3299 ià(! `£id_»j_to_”r ( buf , size , & ”r )) 3300  FALSE ; 3301 `”rÜ ("GET_CAPABILITIES„equest„ejected: %s (%d)", 3302 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 3303  TRUE ; 3304  AVDTP_OPEN : 3305 ià(! `£id_»j_to_”r ( buf , size , & ”r )) 3306  FALSE ; 3307 `”rÜ ("OPEN„equest„ejected: %s (%d)", 3308 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 3309 ià( £p && s•-> cfm && s•->cfm-> Ý’ ) 3310 £p -> cfm -> `Ý’ ( £ssiÚ , s•, ¡»am , & ”r , 3311 £p -> u£r_d©a ); 3312  TRUE ; 3313  AVDTP_SET_CONFIGURATION : 3314 ià(! `cÚf_»j_to_”r ( buf , size , & ”r )) 3315  FALSE ; 3316 `”rÜ ("SET_CONFIGURATION„equest„ejected: %s (%d)", 3317 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 3318 ià( £p && s•-> cfm && s•->cfm-> £t_cÚfigu¿tiÚ ) 3319 £p -> cfm -> `£t_cÚfigu¿tiÚ ( £ssiÚ , s•, ¡»am , 3320 & ”r , £p -> u£r_d©a ); 3321  TRUE ; 3322  AVDTP_RECONFIGURE : 3323 ià(! `cÚf_»j_to_”r ( buf , size , & ”r )) 3324  FALSE ; 3325 `”rÜ ("RECONFIGURE„equest„ejected: %s (%d)", 3326 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 3327 ià( £p && s•-> cfm && s•->cfm-> »cÚfigu» ) 3328 £p -> cfm -> `»cÚfigu» ( £ssiÚ , s•, ¡»am , & ”r , 3329 £p -> u£r_d©a ); 3330  TRUE ; 3331  AVDTP_START : 3332 ià(! `¡»am_»j_to_”r ( buf , size , & ”r , & aý_£id )) 3333  FALSE ; 3334 `”rÜ ("START„equest„ejected: %s (%d)", 3335 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 3336 ià( £p && s•-> cfm && s•->cfm-> ¡¬t ) { 3337 £p -> cfm -> `¡¬t ( £ssiÚ , s•, ¡»am , & ”r , 3338 £p -> u£r_d©a ); 3339 ¡»am -> ¡¬tšg = FALSE ; 3341  TRUE ; 3342  AVDTP_SUSPEND : 3343 ià(! `¡»am_»j_to_”r ( buf , size , & ”r , & aý_£id )) 3344  FALSE ; 3345 `”rÜ ("SUSPEND„equest„ejected: %s (%d)", 3346 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 3347 ià( £p && s•-> cfm && s•->cfm-> su¥’d ) 3348 £p -> cfm -> `su¥’d ( £ssiÚ , s•, ¡»am , & ”r , 3349 £p -> u£r_d©a ); 3350  TRUE ; 3351  AVDTP_CLOSE : 3352 ià(! `¡»am_»j_to_”r ( buf , size , & ”r , & aý_£id )) 3353  FALSE ; 3354 `”rÜ ("CLOSE„equest„ejected: %s (%d)", 3355 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 3356 ià( £p && s•-> cfm && s•->cfm-> þo£ ) { 3357 £p -> cfm -> `þo£ ( £ssiÚ , s•, ¡»am , & ”r , 3358 £p -> u£r_d©a ); 3359 ¡»am -> þo£_št = FALSE ; 3361  TRUE ; 3362  AVDTP_ABORT : 3363 ià(! `¡»am_»j_to_”r ( buf , size , & ”r , & aý_£id )) 3364  FALSE ; 3365 `”rÜ ("ABORT„equest„ejected: %s (%d)", 3366 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 3367 ià( £p && s•-> cfm && s•->cfm-> abÜt ) 3368 £p -> cfm -> `abÜt ( £ssiÚ , s•, ¡»am , & ”r , 3369 £p -> u£r_d©a ); 3370  FALSE ; 3371  AVDTP_DELAY_REPORT : 3372 ià(! `¡»am_»j_to_”r ( buf , size , & ”r , & aý_£id )) 3373  FALSE ; 3374 `”rÜ ("DELAY_REPORT„equest„ejected: %s (%d)", 3375 `avd_¡»¼Ü (& ”r ),ƒ¼.”r. ”rÜ_code ); 3376 ià( £p && s•-> cfm && s•->cfm-> d–ay_»pÜt ) 3377 £p -> cfm -> `d–ay_»pÜt ( £ssiÚ , s•, ¡»am , & ”r , 3378 £p -> u£r_d©a ); 3379  TRUE ; 3381 `”rÜ ("UnknowÀ»jeù„e¥Ú£ sigÇÈid: %u", sigÇl_id ); 3382  TRUE ; 3384 } } 3386  avd_£rviû_ÿ·bž™y * $avd_¡»am_g‘_codec ( 3387  avd_¡»am * ¡»am ) 3389 GSLi¡ * l ; 3391  l = ¡»am -> ÿps ;†;† =†-> Ãxt ) { 3392  avd_£rviû_ÿ·bž™y * ÿp = l -> d©a ; 3394 ià( ÿp -> ÿ‹gÜy =ð AVDTP_MEDIA_CODEC ) 3395  ÿp ; 3398  NULL ; 3399 } } 3401  gboÞ—n $avd_¡»am_has_ÿ·bž™y ( avd_¡»am * ¡»am , 3402  avd_£rviû_ÿ·bž™y * ÿp ) 3404 GSLi¡ * l ; 3405  avd_£rviû_ÿ·bž™y * ¡»am_ÿp ; 3407  l = ¡»am -> ÿps ;†;† = `g_¦i¡_Ãxt (l)) { 3408 ¡»am_ÿp = l -> d©a ; 3410 ià( ¡»am_ÿp -> ÿ‹gÜy !ð ÿp ->category || 3411 ¡»am_ÿp -> Ëngth !ð ÿp ->length) 3414 ià( `memcmp ( ¡»am_ÿp -> d©a , ÿp ->d©a, c­-> Ëngth ) == 0) 3415  TRUE ; 3418  FALSE ; 3419 } } 3421 gboÞ—n $avd_¡»am_has_ÿ·bž™›s ( avd_¡»am * ¡»am , 3422 GSLi¡ * ÿps ) 3424 ; ÿps ; c­ ð `g_¦i¡_Ãxt (caps)) { 3425  avd_£rviû_ÿ·bž™y * ÿp = ÿps -> d©a ; 3427 ià(! `avd_¡»am_has_ÿ·bž™y ( ¡»am , ÿp )) 3428  FALSE ; 3431  TRUE ; 3432 } } 3434  avd_»mÙe_£p * $avd_¡»am_g‘_»mÙe_£p ( 3435  avd_¡»am * ¡»am ) 3437 GSLi¡ * l ; 3439  l = ¡»am -> £ssiÚ -> £ps ;†;† =†-> Ãxt ) { 3440  avd_»mÙe_£p * £p = l -> d©a ; 3442 ià( £p -> £id =ð ¡»am -> r£id ) 3443  £p ; 3446  NULL ; 3447 } } 3449 gboÞ—n $avd_¡»am_g‘_Œª¥Üt ( avd_¡»am * ¡»am , * sock , 3450 ušt16_t * imtu , ušt16_ˆ* omtu , 3451 GSLi¡ ** ÿps ) 3453 ià( ¡»am -> io =ð NULL ) 3454  FALSE ; 3456 ià( sock ) 3457 * sock = `g_io_chªÃl_unix_g‘_fd ( ¡»am -> io ); 3459 ià( omtu ) 3460 * omtu = ¡»am ->omtu; 3462 ià( imtu ) 3463 * imtu = ¡»am ->imtu; 3465 ià( ÿps ) 3466 * ÿps = ¡»am ->caps; 3468  TRUE ; 3469 } } 3471  $´oûss_queue ( avd * £ssiÚ ) 3473 GSLi¡ ** queue , * l ; 3474  ³ndšg_»q * »q ; 3476 ià( £ssiÚ -> »q ) 3479 ià( £ssiÚ -> ´io_queue ) 3480 queue = & £ssiÚ -> ´io_queue ; 3482 queue = & £ssiÚ -> »q_queue ; 3484 ià(!* queue ) 3487 l = * queue ; 3488 »q = l -> d©a ; 3490 * queue = `g_¦i¡_»move (*queue, »q ); 3492  `£nd_»q ( £ssiÚ , FALSE , »q ); 3493 } } 3495  avd_£rviû_ÿ·bž™y * $avd_g‘_codec ( avd_»mÙe_£p * £p ) 3497  £p -> codec ; 3498 } } 3500  avd_£rviû_ÿ·bž™y * $avd_£rviû_ÿp_Ãw ( ušt8_t ÿ‹gÜy , 3501 * d©a ,  Ëngth ) 3503  avd_£rviû_ÿ·bž™y * ÿp ; 3505 ià( ÿ‹gÜy < AVDTP_MEDIA_TRANSPORT || c©egÜy > AVDTP_DELAY_REPORTING ) 3506  NULL ; 3508 ÿp = `g_m®loc (( avd_£rviû_ÿ·bž™y è+ Ëngth ); 3509 ÿp -> ÿ‹gÜy = category; 3510 ÿp -> Ëngth =†ength; 3511 `memýy ( ÿp -> d©a , d©a, Ëngth ); 3513  ÿp ; 3514 } } 3516  gboÞ—n $´oûss_discov” ( gpoš‹r d©a ) 3518  avd * £ssiÚ = d©a ; 3520 £ssiÚ -> discov” -> id = 0; 3522 `fš®ize_discov”y ( £ssiÚ , 0); 3524  FALSE ; 3525 } } 3527  $avd_discov” ( avd * £ssiÚ , avd_discov”_cb_t cb , 3528 * u£r_d©a ) 3530  ”r ; 3532 ià( £ssiÚ -> discov” ) 3533  - EBUSY ; 3535 £ssiÚ -> discov” = `g_Ãw0 ( discov”_ÿÎback , 1); 3537 ià( £ssiÚ -> £ps ) { 3538 £ssiÚ -> discov” -> cb = cb; 3539 £ssiÚ -> discov” -> u£r_d©a = user_data; 3540 £ssiÚ -> discov” -> id = `g_idË_add ( ´oûss_discov” , session); 3544 ”r = `£nd_»que¡ ( £ssiÚ , FALSE , NULL , AVDTP_DISCOVER , NULL, 0); 3545 ià( ”r == 0) { 3546 £ssiÚ -> discov” -> cb = cb; 3547 £ssiÚ -> discov” -> u£r_d©a = user_data; 3550  ”r ; 3551 } } 3553 gboÞ—n $avd_¡»am_»move_cb ( avd * £ssiÚ , 3554  avd_¡»am * ¡»am , 3555  id ) 3557 GSLi¡ * l ; 3558  ¡»am_ÿÎback * cb ; 3560 ià(! ¡»am ) 3561  FALSE ; 3563  cb = NULL , l = ¡»am -> ÿÎbacks ;† !ðNULL;† =†-> Ãxt ) { 3564  ¡»am_ÿÎback * tmp = l -> d©a ; 3565 ià( tmp &&mp-> id == id) { 3566 cb = tmp ; 3571 ià(! cb ) 3572  FALSE ; 3574 ¡»am -> ÿÎbacks = `g_¦i¡_»move (¡»am->ÿÎbacks, cb ); 3575 `g_ä“ ( cb ); 3577  TRUE ; 3578 } } 3580  $avd_¡»am_add_cb ( avd * £ssiÚ , 3581  avd_¡»am * ¡»am , 3582 avd_¡»am_¡©e_cb cb , * d©a ) 3584  ¡»am_ÿÎback * ¡»am_cb ; 3585  id = 0; 3587 ¡»am_cb = `g_Ãw ( ¡»am_ÿÎback , 1); 3588 ¡»am_cb -> cb = cb; 3589 ¡»am_cb -> u£r_d©a = d©a ; 3590 ¡»am_cb -> id = ++id; 3592 ¡»am -> ÿÎbacks = `g_¦i¡_­³nd (¡»am->ÿÎbacks, ¡»am_cb ); 3594  ¡»am_cb -> id ; 3595 } } 3597  $avd_g‘_cÚfigu¿tiÚ ( avd * £ssiÚ ,  avd_¡»am * ¡»am ) 3599  £id_»q »q ; 3601 ià( £ssiÚ -> ¡©e < AVDTP_SESSION_STATE_CONNECTED ) 3602  - EINVAL ; 3604 `mem£t (& »q , 0, (req)); 3605 »q . aý_£id = ¡»am -> r£id ; 3607  `£nd_»que¡ ( £ssiÚ , FALSE , ¡»am , AVDTP_GET_CONFIGURATION , 3608 & »q , (req)); 3609 } } 3611  $cÝy_ÿ·bž™›s ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 3613  avd_£rviû_ÿ·bž™y * ¤c_ÿp = d©a ; 3614  avd_£rviû_ÿ·bž™y * d¡_ÿp ; 3615 GSLi¡ ** l = u£r_d©a ; 3617 d¡_ÿp = `avd_£rviû_ÿp_Ãw ( ¤c_ÿp -> ÿ‹gÜy , src_ÿp-> d©a , 3618 ¤c_ÿp -> Ëngth ); 3620 * l = `g_¦i¡_­³nd (*l, d¡_ÿp ); 3621 } } 3623  $avd_£t_cÚfigu¿tiÚ ( avd * £ssiÚ , 3624  avd_»mÙe_£p * r£p , 3625  avd_loÿl_£p * l£p , 3626 GSLi¡ * ÿps , 3627  avd_¡»am ** ¡»am ) 3629  £tcÚf_»q * »q ; 3630  avd_¡»am * Ãw_¡»am ; 3631 * ±r ; 3632  ”r , ÿps_Ën ; 3633  avd_£rviû_ÿ·bž™y * ÿp ; 3634 GSLi¡ * l ; 3636 ià( £ssiÚ -> ¡©e !ð AVDTP_SESSION_STATE_CONNECTED ) 3637  - ENOTCONN ; 3639 ià(!( l£p && r£p )) 3640  - EINVAL ; 3642 `DBG ("%p: iÁ_£id=%u,‡ý_£id=%u", £ssiÚ , 3643 l£p -> šfo . £id , r£p ->seid); 3645 Ãw_¡»am = `g_Ãw0 ( avd_¡»am , 1); 3646 Ãw_¡»am -> £ssiÚ = session; 3647 Ãw_¡»am -> l£p =†sep; 3648 Ãw_¡»am -> r£id = r£p -> £id ; 3650 ià( r£p -> d–ay_»pÜtšg && l£p ->delay_reporting) { 3651  avd_£rviû_ÿ·bž™y * d–ay_»pÜtšg ; 3653 d–ay_»pÜtšg = `avd_£rviû_ÿp_Ãw ( AVDTP_DELAY_REPORTING , 3654 NULL , 0); 3655 ÿps = `g_¦i¡_­³nd (ÿps, d–ay_»pÜtšg ); 3656 Ãw_¡»am -> d–ay_»pÜtšg = TRUE ; 3659 `g_¦i¡_fÜ—ch ( ÿps , cÝy_ÿ·bž™›s , & Ãw_¡»am ->caps); 3662  l = ÿps , ÿps_Ën = 0;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 3663 ÿp = l -> d©a ; 3664 ÿps_Ën +ð ÿp -> Ëngth + 2; 3667 »q = `g_m®loc0 (( £tcÚf_»q è+ ÿps_Ën ); 3669 »q -> št_£id = l£p -> šfo . £id ; 3670 »q -> aý_£id = r£p -> £id ; 3673  l = ÿps , ±r = »q ->ÿps;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 3674 ÿp = l -> d©a ; 3675 `memýy ( ±r , ÿp , c­-> Ëngth + 2); 3676 ±r +ð ÿp -> Ëngth + 2; 3679 ”r = `£nd_»que¡ ( £ssiÚ , FALSE , Ãw_¡»am , 3680 AVDTP_SET_CONFIGURATION , »q , 3681 ( £tcÚf_»q è+ ÿps_Ën ); 3682 ià( ”r < 0) 3683 `¡»am_ä“ ( Ãw_¡»am ); 3685 l£p -> šfo . šu£ = 1; 3686 l£p -> ¡»am = Ãw_¡»am ; 3687 r£p -> ¡»am = Ãw_¡»am ; 3688 £ssiÚ -> ¡»ams = `g_¦i¡_­³nd (£ssiÚ->¡»ams, Ãw_¡»am ); 3689 ià( ¡»am ) 3690 * ¡»am = Ãw_¡»am ; 3693 `g_ä“ ( »q ); 3695  ”r ; 3696 } } 3698  $avd_Ý’ ( avd * £ssiÚ ,  avd_¡»am * ¡»am ) 3700  £id_»q »q ; 3702 ià(! `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am )) 3703  - EINVAL ; 3705 ià( ¡»am -> l£p -> ¡©e > AVDTP_STATE_CONFIGURED ) 3706  - EINVAL ; 3708 `mem£t (& »q , 0, (req)); 3709 »q . aý_£id = ¡»am -> r£id ; 3711  `£nd_»que¡ ( £ssiÚ , FALSE , ¡»am , AVDTP_OPEN , 3712 & »q , (req)); 3713 } } 3715  gboÞ—n $¡¬t_timeout ( gpoš‹r u£r_d©a ) 3717  avd_¡»am * ¡»am = u£r_d©a ; 3718  avd * £ssiÚ = ¡»am ->session; 3720 ¡»am -> Ý’_aý = FALSE ; 3722 ià( `avd_¡¬t ( £ssiÚ , ¡»am ) < 0) 3723 `”rÜ ("wait_timeout:‡vdtp_start failed"); 3725 ¡»am -> ¡¬t_tim” = 0; 3727  FALSE ; 3728 } } 3730  $avd_¡¬t ( avd * £ssiÚ ,  avd_¡»am * ¡»am ) 3732  ¡¬t_»q »q ; 3733  »t ; 3735 ià(! `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am )) 3736  - EINVAL ; 3738 ià( ¡»am -> l£p -> ¡©e !ð AVDTP_STATE_OPEN ) 3739  - EINVAL ; 3745 ià( ¡»am -> Ý’_aý ) { 3747 ià( ¡»am -> ¡¬t_tim” ) 3750 ¡»am -> ¡¬t_tim” = `g_timeout_add_£cÚds ( START_TIMEOUT , 3751 ¡¬t_timeout , 3752 ¡»am ); 3756 ià( ¡»am -> þo£_št =ð TRUE ) { 3757 `”rÜ ("avdtp_start:„ejecting start since close is initiated"); 3758  - EINVAL ; 3761 ià( ¡»am -> ¡¬tšg =ð TRUE ) { 3762 `DBG ("stream‡lready started"); 3763  - EINPROGRESS ; 3766 `mem£t (& »q , 0, (req)); 3767 »q . fœ¡_£id . £id = ¡»am -> r£id ; 3769 »t = `£nd_»que¡ ( £ssiÚ , FALSE , ¡»am , AVDTP_START , 3770 & »q , (req)); 3771 ià( »t == 0) 3772 ¡»am -> ¡¬tšg = TRUE ; 3774  »t ; 3775 } } 3777  $avd_þo£ ( avd * £ssiÚ ,  avd_¡»am * ¡»am , 3778 gboÞ—n immedŸ‹ ) 3780  £id_»q »q ; 3781  »t ; 3783 ià(! `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am )) 3784  - EINVAL ; 3786 ià( ¡»am -> l£p -> ¡©e < AVDTP_STATE_OPEN ) 3787  - EINVAL ; 3789 ià( ¡»am -> þo£_št =ð TRUE ) { 3790 `”rÜ ("avdtp_close:„ejecting since close is‡lready initiated"); 3791  - EINVAL ; 3794 ià( immedŸ‹ && £ssiÚ -> »q && ¡»am == session->req->stream) 3795  `avd_abÜt ( £ssiÚ , ¡»am ); 3797 `mem£t (& »q , 0, (req)); 3798 »q . aý_£id = ¡»am -> r£id ; 3800 »t = `£nd_»que¡ ( £ssiÚ , FALSE , ¡»am , AVDTP_CLOSE , 3801 & »q , (req)); 3802 ià( »t == 0) 3803 ¡»am -> þo£_št = TRUE ; 3805  »t ; 3806 } } 3808  $avd_su¥’d ( avd * £ssiÚ ,  avd_¡»am * ¡»am ) 3810  £id_»q »q ; 3812 ià(! `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am )) 3813  - EINVAL ; 3815 ià( ¡»am -> l£p -> ¡©e <ð AVDTP_STATE_OPEN || sŒ—m-> þo£_št ) 3816  - EINVAL ; 3818 `mem£t (& »q , 0, (req)); 3819 »q . aý_£id = ¡»am -> r£id ; 3821  `£nd_»que¡ ( £ssiÚ , FALSE , ¡»am , AVDTP_SUSPEND , 3822 & »q , (req)); 3823 } } 3825  $avd_abÜt ( avd * £ssiÚ ,  avd_¡»am * ¡»am ) 3827  £id_»q »q ; 3828  »t ; 3830 ià(! `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am )) 3831  - EINVAL ; 3833 ià( ¡»am -> l£p -> ¡©e =ð AVDTP_STATE_ABORTING ) 3834  - EINVAL ; 3836 ià( £ssiÚ -> »q && ¡»am == session->req->stream) 3837  `ÿnûl_»que¡ ( £ssiÚ , ECANCELED ); 3839 `mem£t (& »q , 0, (req)); 3840 »q . aý_£id = ¡»am -> r£id ; 3842 »t = `£nd_»que¡ ( £ssiÚ , TRUE , ¡»am , AVDTP_ABORT , 3843 & »q , (req)); 3844 ià( »t == 0) 3845 ¡»am -> abÜt_št = TRUE ; 3847  »t ; 3848 } } 3850  $avd_d–ay_»pÜt ( avd * £ssiÚ ,  avd_¡»am * ¡»am , 3851 ušt16_t d–ay ) 3853  d–ay_»q »q ; 3855 ià(! `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am )) 3856  - EINVAL ; 3858 ià( ¡»am -> l£p -> ¡©e !ð AVDTP_STATE_CONFIGURED && 3859 ¡»am -> l£p -> ¡©e !ð AVDTP_STATE_STREAMING ) 3860  - EINVAL ; 3862 ià(! ¡»am -> d–ay_»pÜtšg || £ssiÚ -> v”siÚ < 0x0103) 3863  - EINVAL ; 3865 ¡»am -> d–ay = delay; 3867 `mem£t (& »q , 0, (req)); 3868 »q . aý_£id = ¡»am -> r£id ; 3869 »q . d–ay = `htÚs (delay); 3871  `£nd_»que¡ ( £ssiÚ , TRUE , ¡»am , AVDTP_DELAY_REPORT , 3872 & »q , (req)); 3873 } } 3875  GIOChªÃl * $avd_£rv”_sock‘ (cÚ¡ bdaddr_t * ¤c , gboÞ—n ma¡” ) 3877 GE¼Ü * ”r = NULL ; 3878 GIOChªÃl * io ; 3880 io = `bt_io_li¡’ ( NULL , avd_cÚfœm_cb , 3881 NULL , NULL, & ”r , 3882 BT_IO_OPT_SOURCE_BDADDR , ¤c , 3883 BT_IO_OPT_PSM , AVDTP_PSM , 3884 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 3885 BT_IO_OPT_MASTER , ma¡” , 3886 BT_IO_OPT_INVALID ); 3887 ià(! io ) { 3888 `”rÜ ("%s", ”r -> mes§ge ); 3889 `g_”rÜ_ä“ ( ”r ); 3892  io ; 3893 } } 3895  avd_£rv” * $avd_£rv”_š™ ( btd_ad­‹r * ad­‹r ) 3897  avd_£rv” * £rv” ; 3899 £rv” = `g_Ãw0 ( avd_£rv” , 1); 3901 £rv” -> io = `avd_£rv”_sock‘ ( `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 3902 TRUE ); 3903 ià(! £rv” -> io ) { 3904 `g_ä“ ( £rv” ); 3905  NULL ; 3908 £rv” -> ad­‹r = `btd_ad­‹r_»f (adapter); 3910 £rv”s = `g_¦i¡_­³nd (£rv”s, £rv” ); 3912  £rv” ; 3913 } } 3915  avd_loÿl_£p * $avd_»gi¡”_£p ( btd_ad­‹r * ad­‹r , 3916 ušt8_t ty³ , 3917 ušt8_t medŸ_ty³ , 3918 ušt8_t codec_ty³ , 3919 gboÞ—n d–ay_»pÜtšg , 3920  avd_£p_šd * šd , 3921  avd_£p_cfm * cfm , 3922 * u£r_d©a ) 3924  avd_£rv” * £rv” ; 3925  avd_loÿl_£p * £p ; 3927 £rv” = `fšd_£rv” ( £rv”s , ad­‹r ); 3928 ià(! £rv” ) { 3929 £rv” = `avd_£rv”_š™ ( ad­‹r ); 3930 ià(! £rv” ) 3931  NULL ; 3934 ià( `g_¦i¡_Ëngth ( £rv” -> £ps è> MAX_SEID ) 3935  NULL ; 3937 £p = `g_Ãw0 ( avd_loÿl_£p , 1); 3939 £p -> ¡©e = AVDTP_STATE_IDLE ; 3940 £p -> šfo . £id = `g_¦i¡_Ëngth ( £rv” -> £ps ) + 1; 3941 £p -> šfo . ty³ =ype; 3942 £p -> šfo . medŸ_ty³ = media_type; 3943 £p -> codec = codec_ty³ ; 3944 £p -> šd = ind; 3945 £p -> cfm = cfm; 3946 £p -> u£r_d©a = user_data; 3947 £p -> £rv” = server; 3948 £p -> d–ay_»pÜtšg = TRUE ; 3950 `DBG ("SEP %°»gi¡”ed:y³:%d codec:%d seid:%d", £p , 3951 £p -> šfo . ty³ , s•-> codec , s•->šfo. £id ); 3952 £rv” -> £ps = `g_¦i¡_­³nd (£rv”->£ps, £p ); 3954  £p ; 3955 } } 3957  $avd_£rv”_de¡roy ( avd_£rv” * £rv” ) 3959 `g_¦i¡_ä“_fuÎ ( £rv” -> £ssiÚs , avd_ä“ ); 3961 £rv”s = `g_¦i¡_»move (£rv”s, £rv” ); 3963 `g_io_chªÃl_shutdown ( £rv” -> io , TRUE , NULL ); 3964 `g_io_chªÃl_uÄef ( £rv” -> io ); 3965 `btd_ad­‹r_uÄef ( £rv” -> ad­‹r ); 3966 `g_ä“ ( £rv” ); 3967 } } 3969  $avd_uÄegi¡”_£p ( avd_loÿl_£p * £p ) 3971  avd_£rv” * £rv” ; 3973 ià(! £p ) 3974  - EINVAL ; 3976 £rv” = £p ->server; 3977 £rv” -> £ps = `g_¦i¡_»move (£rv”->£ps, £p ); 3979 ià( £p -> ¡»am ) 3980 `»Ëa£_¡»am ( £p -> ¡»am , s•->¡»am-> £ssiÚ ); 3982 `DBG ("SEP %°uÄegi¡”ed:y³:%d codec:%d seid:%d", £p , 3983 £p -> šfo . ty³ , s•-> codec , s•->šfo. £id ); 3985 `g_ä“ ( £p ); 3987 ià( £rv” -> £ps ) 3990 `avd_£rv”_de¡roy ( £rv” ); 3993 } } 3995 cÚ¡ * $avd_¡»¼Ü ( avd_”rÜ * ”r ) 3997 ià( ”r -> ÿ‹gÜy =ð AVDTP_ERRNO ) 3998  `¡»¼Ü ( ”r ->”r. posix_”ºo ); 4000  ”r ->”r. ”rÜ_code ) { 4001  AVDTP_BAD_HEADER_FORMAT : 4003  AVDTP_BAD_LENGTH : 4005  AVDTP_BAD_ACP_SEID : 4007  AVDTP_SEP_IN_USE : 4009  AVDTP_SEP_NOT_IN_USE : 4011  AVDTP_BAD_SERV_CATEGORY : 4013  AVDTP_BAD_PAYLOAD_FORMAT : 4015  AVDTP_NOT_SUPPORTED_COMMAND : 4017  AVDTP_INVALID_CAPABILITIES : 4019  AVDTP_BAD_RECOVERY_TYPE : 4021  AVDTP_BAD_MEDIA_TRANSPORT_FORMAT : 4023  AVDTP_BAD_RECOVERY_FORMAT : 4025  AVDTP_BAD_ROHC_FORMAT : 4027  AVDTP_BAD_CP_FORMAT : 4029  AVDTP_BAD_MULTIPLEXING_FORMAT : 4031  AVDTP_UNSUPPORTED_CONFIGURATION : 4033  AVDTP_BAD_STATE : 4038 } } 4040 avd_¡©e_t $avd_£p_g‘_¡©e ( avd_loÿl_£p * £p ) 4042  £p -> ¡©e ; 4043 } } 4045  btd_ad­‹r * $avd_g‘_ad­‹r ( avd * £ssiÚ ) 4047  £ssiÚ -> £rv” -> ad­‹r ; 4048 } } 4050  btd_deviû * $avd_g‘_deviû ( avd * £ssiÚ ) 4052  £ssiÚ -> deviû ; 4053 } } 4055 gboÞ—n $avd_has_¡»am ( avd * £ssiÚ ,  avd_¡»am * ¡»am ) 4057  `g_¦i¡_fšd ( £ssiÚ -> ¡»ams , ¡»am è? TRUE : FALSE ; 4058 } } 4060  $avd_add_¡©e_cb ( btd_deviû * dev , 4061 avd_£ssiÚ_¡©e_cb cb , * u£r_d©a ) 4063  avd_¡©e_ÿÎback * ¡©e_cb ; 4064  id = 0; 4066 ¡©e_cb = `g_Ãw ( avd_¡©e_ÿÎback , 1); 4067 ¡©e_cb -> cb = cb; 4068 ¡©e_cb -> dev = dev; 4069 ¡©e_cb -> id = ++id; 4070 ¡©e_cb -> u£r_d©a = user_data; 4072 ¡©e_ÿÎbacks = `g_¦i¡_­³nd (¡©e_ÿÎbacks, ¡©e_cb ); 4074  ¡©e_cb -> id ; 4075 } } 4077 gboÞ—n $avd_»move_¡©e_cb ( id ) 4079 GSLi¡ * l ; 4081  l = ¡©e_ÿÎbacks ;† !ð NULL ;† =†-> Ãxt ) { 4082  avd_¡©e_ÿÎback * cb = l -> d©a ; 4083 ià( cb && cb-> id == id) { 4084 ¡©e_ÿÎbacks = `g_¦i¡_»move (¡©e_ÿÎbacks, cb ); 4085 `g_ä“ ( cb ); 4086  TRUE ; 4090  FALSE ; 4091 } } @profiles/audio/avdtp.h 26 mAVDTP_SESSION_STATE_DISCONNECTED , 27 mAVDTP_SESSION_STATE_CONNECTING , 28 mAVDTP_SESSION_STATE_CONNECTED 29 } tavd_£ssiÚ_¡©e_t ; 31  gavd ; 32  gavd_¡»am ; 33  gavd_loÿl_£p ; 34  gavd_»mÙe_£p ; 35  savd_”rÜ { 36 ušt8_t mÿ‹gÜy ; 38 ušt8_t m”rÜ_code ; 39  mposix_”ºo ; 40 } m”r ; 44  #AVDTP_MEDIA_TRANSPORT 0x01 ) 45  #AVDTP_REPORTING 0x02 ) 46  #AVDTP_RECOVERY 0x03 ) 47  #AVDTP_CONTENT_PROTECTION 0x04 ) 48  #AVDTP_HEADER_COMPRESSION 0x05 ) 49  #AVDTP_MULTIPLEXING 0x06 ) 50  #AVDTP_MEDIA_CODEC 0x07 ) 51  #AVDTP_DELAY_REPORTING 0x08 ) 52  #AVDTP_ERRNO 0xff ) 55  #AVDTP_BAD_HEADER_FORMAT 0x01 ) 56  #AVDTP_BAD_LENGTH 0x11 ) 57  #AVDTP_BAD_ACP_SEID 0x12 ) 58  #AVDTP_SEP_IN_USE 0x13 ) 59  #AVDTP_SEP_NOT_IN_USE 0x14 ) 60  #AVDTP_BAD_SERV_CATEGORY 0x17 ) 61  #AVDTP_BAD_PAYLOAD_FORMAT 0x18 ) 62  #AVDTP_NOT_SUPPORTED_COMMAND 0x19 ) 63  #AVDTP_INVALID_CAPABILITIES 0x1A ) 64  #AVDTP_BAD_RECOVERY_TYPE 0x22 ) 65  #AVDTP_BAD_MEDIA_TRANSPORT_FORMAT 0x23 ) 66  #AVDTP_BAD_RECOVERY_FORMAT 0x25 ) 67  #AVDTP_BAD_ROHC_FORMAT 0x26 ) 68  #AVDTP_BAD_CP_FORMAT 0x27 ) 69  #AVDTP_BAD_MULTIPLEXING_FORMAT 0x28 ) 70  #AVDTP_UNSUPPORTED_CONFIGURATION 0x29 ) 71  #AVDTP_BAD_STATE 0x31 ) 74  #AVDTP_SEP_TYPE_SOURCE 0x00 ) 75  #AVDTP_SEP_TYPE_SINK 0x01 ) 78  #AVDTP_MEDIA_TYPE_AUDIO 0x00 ) 79  #AVDTP_MEDIA_TYPE_VIDEO 0x01 ) 80  #AVDTP_MEDIA_TYPE_MULTIMEDIA 0x02 ) 83 mAVDTP_STATE_IDLE , 84 mAVDTP_STATE_CONFIGURED , 85 mAVDTP_STATE_OPEN , 86 mAVDTP_STATE_STREAMING , 87 mAVDTP_STATE_CLOSING , 88 mAVDTP_STATE_ABORTING , 89 } tavd_¡©e_t ; 91  savd_£rviû_ÿ·bž™y { 92 ušt8_t mÿ‹gÜy ; 93 ušt8_t mËngth ; 94 ušt8_t md©a [0]; 95 } __©Œibu‹__ (( ·cked )); 97 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 99  savd_medŸ_codec_ÿ·bž™y { 100 ušt8_t mrç0 :4; 101 ušt8_t mmedŸ_ty³ :4; 102 ušt8_t mmedŸ_codec_ty³ ; 103 ušt8_t md©a [0]; 104 } __©Œibu‹__ (( ·cked )); 106 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 108  savd_medŸ_codec_ÿ·bž™y { 109 ušt8_t mmedŸ_ty³ :4; 110 ušt8_t mrç0 :4; 111 ušt8_t mmedŸ_codec_ty³ ; 112 ušt8_t md©a [0]; 113 } __©Œibu‹__ (( ·cked )); 119 (* tavd_£ssiÚ_¡©e_cb è( tbtd_deviû * tdev , 120  tavd * t£ssiÚ , 121 tavd_£ssiÚ_¡©e_t tÞd_¡©e , 122 tavd_£ssiÚ_¡©e_t tÃw_¡©e , 123 * tu£r_d©a ); 125 (* tavd_¡»am_¡©e_cb è( tavd_¡»am * t¡»am , 126 tavd_¡©e_t tÞd_¡©e , 127 tavd_¡©e_t tÃw_¡©e , 128  tavd_”rÜ * t”r , 129 * tu£r_d©a ); 131 (* tavd_£t_cÚfigu¿tiÚ_cb è( tavd * t£ssiÚ , 132  tavd_¡»am * t¡»am , 133  tavd_”rÜ * t”r ); 136  savd_£p_cfm { 137 (* £t_cÚfigu¿tiÚ è( avd * £ssiÚ , 138  avd_loÿl_£p * l£p , 139  avd_¡»am * ¡»am , 140  avd_”rÜ * ”r , 141 * u£r_d©a ); 142 (* g‘_cÚfigu¿tiÚ è( avd * £ssiÚ , 143  avd_loÿl_£p * l£p , 144  avd_¡»am * ¡»am , 145  avd_”rÜ * ”r , 146 * u£r_d©a ); 147 (* Ý’ è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 148  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 149 * u£r_d©a ); 150 (* ¡¬t è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 151  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 152 * u£r_d©a ); 153 (* su¥’d è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 154  avd_¡»am * ¡»am , 155  avd_”rÜ * ”r , * u£r_d©a ); 156 (* þo£ è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 157  avd_¡»am * ¡»am , 158  avd_”rÜ * ”r , * u£r_d©a ); 159 (* abÜt è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 160  avd_¡»am * ¡»am , 161  avd_”rÜ * ”r , * u£r_d©a ); 162 (* »cÚfigu» è( avd * £ssiÚ , 163  avd_loÿl_£p * l£p , 164  avd_¡»am * ¡»am , 165  avd_”rÜ * ”r , * u£r_d©a ); 166 (* d–ay_»pÜt è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 167  avd_¡»am * ¡»am , 168  avd_”rÜ * ”r , * u£r_d©a ); 173  savd_£p_šd { 174 `gboÞ—n (* g‘_ÿ·bž™y è( avd * £ssiÚ , 175  avd_loÿl_£p * £p , 176 gboÞ—n g‘_®l , 177 GSLi¡ ** ÿps , ušt8_t * ”r , 178 * u£r_d©a ); 179 `gboÞ—n (* £t_cÚfigu¿tiÚ è( avd * £ssiÚ , 180  avd_loÿl_£p * l£p , 181  avd_¡»am * ¡»am , 182 GSLi¡ * ÿps , 183 avd_£t_cÚfigu¿tiÚ_cb cb , 184 * u£r_d©a ); 185 `gboÞ—n (* g‘_cÚfigu¿tiÚ è( avd * £ssiÚ , 186  avd_loÿl_£p * l£p , 187 ušt8_t * ”r , * u£r_d©a ); 188 `gboÞ—n (* Ý’ è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 189  avd_¡»am * ¡»am , ušt8_t * ”r , 190 * u£r_d©a ); 191 `gboÞ—n (* ¡¬t è( avd * £ssiÚ ,  avd_loÿl_£p * l£p , 192  avd_¡»am * ¡»am , ušt8_t * ”r , 193 * u£r_d©a ); 194 `gboÞ—n (* su¥’d è( avd * £ssiÚ , 195  avd_loÿl_£p * £p , 196  avd_¡»am * ¡»am , ušt8_t * ”r , 197 * u£r_d©a ); 198 `gboÞ—n (* þo£ è( avd * £ssiÚ ,  avd_loÿl_£p * £p , 199  avd_¡»am * ¡»am , ušt8_t * ”r , 200 * u£r_d©a ); 201 (* abÜt è( avd * £ssiÚ ,  avd_loÿl_£p * £p , 202  avd_¡»am * ¡»am , ušt8_t * ”r , 203 * u£r_d©a ); 204 `gboÞ—n (* »cÚfigu» è( avd * £ssiÚ , 205  avd_loÿl_£p * l£p , 206 ušt8_t * ”r , * u£r_d©a ); 207 `gboÞ—n (* d–ay»pÜt è( avd * £ssiÚ , 208  avd_loÿl_£p * l£p , 209 ušt8_t r£id , ušt16_t d–ay , 210 ušt8_t * ”r , * u£r_d©a ); 213 (* tavd_discov”_cb_t è( tavd * t£ssiÚ , tGSLi¡ * t£ps , 214  tavd_”rÜ * t”r , * tu£r_d©a ); 216  avd * `avd_g‘ ( btd_deviû * deviû ); 218  `avd_uÄef ( avd * £ssiÚ ); 219  avd * `avd_»f (avd * £ssiÚ ); 221  avd_£rviû_ÿ·bž™y * `avd_£rviû_ÿp_Ãw ( ušt8_t ÿ‹gÜy , 222 * d©a ,  size ); 224  avd_£rviû_ÿ·bž™y * `avd_g‘_codec ( avd_»mÙe_£p * £p ); 226  `avd_discov” ( avd * £ssiÚ , avd_discov”_cb_t cb , 227 * u£r_d©a ); 229 gboÞ—n `avd_has_¡»am ( avd * £ssiÚ ,  avd_¡»am * ¡»am ); 231 #ifdeà __TIZEN_PATCH__ 232  `fš®ize_discov”y ( avd * £ssiÚ ,  ”r ); 235  `avd_¡»am_add_cb ( avd * £ssiÚ , 236  avd_¡»am * ¡»am , 237 avd_¡»am_¡©e_cb cb , * d©a ); 238 gboÞ—n `avd_¡»am_»move_cb ( avd * £ssiÚ , 239  avd_¡»am * ¡»am , 240  id ); 242 gboÞ—n `avd_¡»am_g‘_Œª¥Üt ( avd_¡»am * ¡»am , * sock , 243 ušt16_t * imtu , ušt16_ˆ* omtu , 244 GSLi¡ ** ÿps ); 245  avd_£rviû_ÿ·bž™y * `avd_¡»am_g‘_codec ( 246  avd_¡»am * ¡»am ); 247 gboÞ—n `avd_¡»am_has_ÿ·bž™›s ( avd_¡»am * ¡»am , 248 GSLi¡ * ÿps ); 249  avd_»mÙe_£p * `avd_¡»am_g‘_»mÙe_£p ( 250  avd_¡»am * ¡»am ); 252  `avd_add_¡©e_cb ( btd_deviû * dev , 253 avd_£ssiÚ_¡©e_cb cb , * u£r_d©a ); 255 gboÞ—n `avd_»move_¡©e_cb ( id ); 257  `avd_£t_cÚfigu¿tiÚ ( avd * £ssiÚ , 258  avd_»mÙe_£p * r£p , 259  avd_loÿl_£p * l£p , 260 GSLi¡ * ÿps , 261  avd_¡»am ** ¡»am ); 263  `avd_g‘_cÚfigu¿tiÚ ( avd * £ssiÚ , 264  avd_¡»am * ¡»am ); 266  `avd_Ý’ ( avd * £ssiÚ ,  avd_¡»am * ¡»am ); 267  `avd_¡¬t ( avd * £ssiÚ ,  avd_¡»am * ¡»am ); 268  `avd_su¥’d ( avd * £ssiÚ ,  avd_¡»am * ¡»am ); 269  `avd_þo£ ( avd * £ssiÚ ,  avd_¡»am * ¡»am , 270 gboÞ—n immedŸ‹ ); 271  `avd_abÜt ( avd * £ssiÚ ,  avd_¡»am * ¡»am ); 272  `avd_d–ay_»pÜt ( avd * £ssiÚ ,  avd_¡»am * ¡»am , 273 ušt16_t d–ay ); 275  avd_loÿl_£p * `avd_»gi¡”_£p ( btd_ad­‹r * ad­‹r , 276 ušt8_t ty³ , 277 ušt8_t medŸ_ty³ , 278 ušt8_t codec_ty³ , 279 gboÞ—n d–ay_»pÜtšg , 280  avd_£p_šd * šd , 281  avd_£p_cfm * cfm , 282 * u£r_d©a ); 285  avd_»mÙe_£p * `avd_fšd_»mÙe_£p ( avd * £ssiÚ , 286  avd_loÿl_£p * l£p ); 288  `avd_uÄegi¡”_£p ( avd_loÿl_£p * £p ); 290 avd_¡©e_t `avd_£p_g‘_¡©e ( avd_loÿl_£p * £p ); 292  `avd_”rÜ_š™ ( avd_”rÜ * ”r , ušt8_t ty³ ,  id ); 293 cÚ¡ * `avd_¡»¼Ü ( avd_”rÜ * ”r ); 294 ušt8_t `avd_”rÜ_ÿ‹gÜy ( avd_”rÜ * ”r ); 295  `avd_”rÜ_”rÜ_code ( avd_”rÜ * ”r ); 296  `avd_”rÜ_posix_”ºo ( avd_”rÜ * ”r ); 298  btd_ad­‹r * `avd_g‘_ad­‹r ( avd * £ssiÚ ); 299  btd_deviû * `avd_g‘_deviû ( avd * £ssiÚ ); @profiles/audio/avrcp.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡dlib.h > 31  ~<¡dšt.h > 32  ~<š‰y³s.h > 33  ~<¡dboÞ.h > 34  ~<”ºo.h > 35  ~ 36  ~ 37  ~ 38  ~ 39  ~ 40  ~ 42  ~ 43  ~ 44  ~ 46  ~ 47  ~ 48  ~ 50  ~"lib/uuid.h " 51  ~"¤c/¶ugš.h " 52  ~"¤c/ad­‹r.h " 53  ~"¤c/deviû.h " 54  ~"¤c/´ofže.h " 55  ~"¤c/£rviû.h " 57  ~"¤c/log.h " 58  ~"¤c/”rÜ.h " 59  ~"¤c/sdpd.h " 60  ~"¤c/dbus-commÚ.h " 61  ~"¤c/sh¬ed/utž.h " 63  ~"avùp.h " 64  ~"avrý.h " 65  ~"cÚŒÞ.h " 66  ~"¶ay”.h " 67  ~"Œª¥Üt.h " 70  #IEEEID_BTSIG 0x001958 ) 73  #AVRCP_STATUS_INVALID_COMMAND 0x00 ) 74  #AVRCP_STATUS_INVALID_PARAM 0x01 ) 75  #AVRCP_STATUS_PARAM_NOT_FOUND 0x02 ) 76  #AVRCP_STATUS_INTERNAL_ERROR 0x03 ) 77  #AVRCP_STATUS_SUCCESS 0x04 ) 78  #AVRCP_STATUS_OUT_OF_BOUNDS 0x0b ) 79  #AVRCP_STATUS_INVALID_PLAYER_ID 0x11 ) 80  #AVRCP_STATUS_PLAYER_NOT_BROWSABLE 0x12 ) 81  #AVRCP_STATUS_NO_AVAILABLE_PLAYERS 0x15 ) 82  #AVRCP_STATUS_ADDRESSED_PLAYER_CHANGED 0x16 ) 85  #AVRCP_PACKET_TYPE_SINGLE 0x00 ) 86  #AVRCP_PACKET_TYPE_START 0x01 ) 87  #AVRCP_PACKET_TYPE_CONTINUING 0x02 ) 88  #AVRCP_PACKET_TYPE_END 0x03 ) 91  #AVRCP_GET_CAPABILITIES 0x10 ) 92  #AVRCP_LIST_PLAYER_ATTRIBUTES 0X11 ) 93  #AVRCP_LIST_PLAYER_VALUES 0x12 ) 94  #AVRCP_GET_CURRENT_PLAYER_VALUE 0x13 ) 95  #AVRCP_SET_PLAYER_VALUE 0x14 ) 96  #AVRCP_GET_PLAYER_ATTRIBUTE_TEXT 0x15 ) 97  #AVRCP_GET_PLAYER_VALUE_TEXT 0x16 ) 98  #AVRCP_DISPLAYABLE_CHARSET 0x17 ) 99  #AVRCP_CT_BATTERY_STATUS 0x18 ) 100  #AVRCP_GET_ELEMENT_ATTRIBUTES 0x20 ) 101  #AVRCP_GET_PLAY_STATUS 0x30 ) 102  #AVRCP_REGISTER_NOTIFICATION 0x31 ) 103  #AVRCP_REQUEST_CONTINUING 0x40 ) 104  #AVRCP_ABORT_CONTINUING 0x41 ) 105  #AVRCP_SET_ABSOLUTE_VOLUME 0x50 ) 106  #AVRCP_SET_BROWSED_PLAYER 0x70 ) 107  #AVRCP_GET_FOLDER_ITEMS 0x71 ) 108  #AVRCP_CHANGE_PATH 0x72 ) 109  #AVRCP_GET_ITEM_ATTRIBUTES 0x73 ) 110  #AVRCP_PLAY_ITEM 0x74 ) 111  #AVRCP_SEARCH 0x80 ) 112  #AVRCP_ADD_TO_NOW_PLAYING 0x90 ) 113  #AVRCP_GENERAL_REJECT 0xA0 ) 116  #CAP_COMPANY_ID 0x02 ) 117  #CAP_EVENTS_SUPPORTED 0x03 ) 119  #AVRCP_REGISTER_NOTIFICATION_PARAM_LENGTH 5 ) 120  #AVRCP_GET_CAPABILITIES_PARAM_LENGTH 1 ) 122  #AVRCP_FEATURE_CATEGORY_1 0x0001 ) 123  #AVRCP_FEATURE_CATEGORY_2 0x0002 ) 124  #AVRCP_FEATURE_CATEGORY_3 0x0004 ) 125  #AVRCP_FEATURE_CATEGORY_4 0x0008 ) 126  #AVRCP_FEATURE_PLAYER_SETTINGS 0x0010 ) 127  #AVRCP_FEATURE_BROWSING 0x0040 ) 129  #AVRCP_BATTERY_STATUS_NORMAL 0 ) 130  #AVRCP_BATTERY_STATUS_WARNING 1 ) 131  #AVRCP_BATTERY_STATUS_CRITICAL 2 ) 132  #AVRCP_BATTERY_STATUS_EXTERNAL 3 ) 133  #AVRCP_BATTERY_STATUS_FULL_CHARGE 4 ) 135  #AVRCP_CHARSET_UTF8 106 ) 137  #AVRCP_BROWSING_TIMEOUT 1 ) 139 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 141  savrý_h—d” { 142 ušt8_t mcom·ny_id [3]; 143 ušt8_t mpdu_id ; 144 ušt8_t m·ck‘_ty³ :2; 145 ušt8_t mrsvd :6; 146 ušt16_t m·¿ms_Ën ; 147 ušt8_t m·¿ms [0]; 148 } __©Œibu‹__ (( ·cked )); 149  #AVRCP_HEADER_LENGTH 7 ) 151 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 153  savrý_h—d” { 154 ušt8_t mcom·ny_id [3]; 155 ušt8_t mpdu_id ; 156 ušt8_t mrsvd :6; 157 ušt8_t m·ck‘_ty³ :2; 158 ušt16_t m·¿ms_Ën ; 159 ušt8_t m·¿ms [0]; 160 } __©Œibu‹__ (( ·cked )); 161  #AVRCP_HEADER_LENGTH 7 ) 167  #AVRCP_MTU ( AVC_MTU - AVC_HEADER_LENGTH ) ) 168  #AVRCP_PDU_MTU ( AVRCP_MTU - AVRCP_HEADER_LENGTH ) ) 170  savrý_browsšg_h—d” { 171 ušt8_t mpdu_id ; 172 ušt16_t m·¿m_Ën ; 173 ušt8_t m·¿ms [0]; 174 } __©Œibu‹__ (( ·cked )); 175  #AVRCP_BROWSING_HEADER_LENGTH 3 ) 177  savrý_£rv” { 178  btd_ad­‹r * mad­‹r ; 179 ušt32_t mtg_»cÜd_id ; 180 ušt32_t mù_»cÜd_id ; 181 GSLi¡ * m¶ay”s ; 182 GSLi¡ * m£ssiÚs ; 185  s³ndšg_pdu { 186 ušt8_t mpdu_id ; 187 GLi¡ * m©Œ_ids ; 188 ušt16_t moff£t ; 191  s³ndšg_li¡_™ems { 192 GSLi¡ * m™ems ; 193 ušt32_t m¡¬t ; 194 ušt32_t m’d ; 195 ušt64_t mtÙ® ; 198  savrý_¶ay” { 199  avrý_£rv” * m£rv” ; 200 GSLi¡ * m£ssiÚs ; 201 ušt16_t mid ; 202 ušt8_t mscÝe ; 203 ušt64_t muid ; 204 ušt16_t muid_couÁ” ; 205 boÞ mbrow£d ; 206 ušt8_t * mã©u»s ; 207 * m·th ; 209  ³ndšg_li¡_™ems * mp ; 210 * mchªge_·th ; 212  avrý_¶ay”_cb * mcb ; 213 * mu£r_d©a ; 214 GDe¡royNÙify mde¡roy ; 217  savrý_d©a { 218  avrý_¶ay” * m¶ay” ; 219 ušt16_t mv”siÚ ; 220  mã©u»s ; 221 GSLi¡ * m¶ay”s ; 224  savrý { 225  avrý_£rv” * m£rv” ; 226  avùp * mcÚn ; 227  btd_deviû * mdev ; 228  avrý_d©a * mrg‘ ; 229  avrý_d©a * mcÚŒÞËr ; 231 cÚ¡  ·s¡hrough_hªdËr * m·s¡hrough_hªdËrs ; 232 cÚ¡  cÚŒÞ_pdu_hªdËr * mcÚŒÞ_hªdËrs ; 234  m·s¡hrough_id ; 235  mcÚŒÞ_id ; 236  mbrowsšg_id ; 237  mbrowsšg_tim” ; 238 ušt16_t msuµÜ‹d_ev’ts ; 239 ušt16_t m»gi¡”ed_ev’ts ; 240 ušt8_t mŒª§ùiÚ ; 241 ušt8_t mŒª§ùiÚ_ev’ts [ AVRCP_EVENT_LAST + 1]; 242  ³ndšg_pdu * m³ndšg_pdu ; 245  s·s¡hrough_hªdËr { 246 ušt8_t mÝ ; 247 boÞ (* func è( avrý * m£ssiÚ ); 250  scÚŒÞ_pdu_hªdËr { 251 ušt8_t mpdu_id ; 252 ušt8_t mcode ; 253 ušt8_t (* func è( avrý * m£ssiÚ ,  avrý_h—d” * mpdu , 254 ušt8_t mŒª§ùiÚ ); 257  GSLi¡ * g£rv”s = NULL ; 258  gavùp_id = 0; 259 #ifdeà __TIZEN_PATCH__ 260  ušt16_t gad­‹r_avrý_v” = 0; 264  ušt32_t gcom·ny_ids [] = { 265 IEEEID_BTSIG , 268  avrý_»gi¡”_nÙifiÿtiÚ ( avrý * £ssiÚ , ušt8_t ev’t ); 270 #ifdeà __TIZEN_PATCH__ 271  GLi¡ * ¶ay”_li¡_£‰šgs ( avrý_¶ay” * ¶ay” ); 272  avrý_¡Ý_pos™iÚ_tim” (); 273  gpos_tim”_id = 0; 276  sdp_»cÜd_t * $avrý_ù_»cÜd () 278 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * ­£q1 , * roÙ ; 279 uuid_t roÙ_uuid , l2ÿp , avùp , avrù , avrùr ; 280 sdp_´ofže_desc_t ´ofže [1]; 281 sdp_li¡_t * ­rÙo , * ­rÙo1 , * ´Ùo [2], * ´Ùo1 [2]; 282 sdp_»cÜd_t * »cÜd ; 283 sdp_d©a_t * psm [2], * v”siÚ , * ã©u»s ; 284 ušt16_t Í = AVCTP_CONTROL_PSM , ­ = AVCTP_BROWSING_PSM ; 285 ušt16_t avrý_v” = 0x0105, avùp_v” = 0x0103; 286 ušt16_t ã© = ( AVRCP_FEATURE_CATEGORY_1 | 287 AVRCP_FEATURE_CATEGORY_2 | 288 AVRCP_FEATURE_CATEGORY_3 | 289 AVRCP_FEATURE_CATEGORY_4 | 290 AVRCP_FEATURE_BROWSING ); 292 »cÜd = `sdp_»cÜd_®loc (); 293 ià(! »cÜd ) 294  NULL ; 296 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 297 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 298 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 301 `sdp_uuid16_ü—‹ (& avrù , AV_REMOTE_SVCLASS_ID ); 302 svþass_id = `sdp_li¡_­³nd ( NULL , & avrù ); 303 `sdp_uuid16_ü—‹ (& avrùr , AV_REMOTE_CONTROLLER_SVCLASS_ID ); 304 svþass_id = `sdp_li¡_­³nd (svþass_id, & avrùr ); 305 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 308 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 309 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp ); 310 psm [0] = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 311 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], psm [0]); 312 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 314 `sdp_uuid16_ü—‹ (& avùp , AVCTP_UUID ); 315 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & avùp ); 316 v”siÚ = `sdp_d©a_®loc ( SDP_UINT16 , & avùp_v” ); 317 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], v”siÚ ); 318 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 320 ­rÙo = `sdp_li¡_­³nd ( NULL , ­£q ); 321 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 324 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 325 ´Ùo1 [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp ); 326 psm [1] = `sdp_d©a_®loc ( SDP_UINT16 , & ­ ); 327 ´Ùo1 [0] = `sdp_li¡_­³nd ÕrÙo1[0], psm [1]); 328 ­£q1 = `sdp_li¡_­³nd ( NULL , ´Ùo1 [0]); 330 `sdp_uuid16_ü—‹ (& avùp , AVCTP_UUID ); 331 ´Ùo1 [1] = `sdp_li¡_­³nd ( NULL , & avùp ); 332 ´Ùo1 [1] = `sdp_li¡_­³nd ÕrÙo1[1], v”siÚ ); 333 ­£q1 = `sdp_li¡_­³nd ×p£q1, ´Ùo1 [1]); 335 ­rÙo1 = `sdp_li¡_­³nd ( NULL , ­£q1 ); 336 `sdp_£t_add_acûss_´Ùos ( »cÜd , ­rÙo1 ); 339 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , AV_REMOTE_PROFILE_ID ); 340 ´ofže [0]. v”siÚ = avrý_v” ; 341 pf£q = `sdp_li¡_­³nd ( NULL , & ´ofže [0]); 342 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 344 ã©u»s = `sdp_d©a_®loc ( SDP_UINT16 , & ã© ); 345 `sdp_©Œ_add ( »cÜd , SDP_ATTR_SUPPORTED_FEATURES , ã©u»s ); 347 `sdp_£t_šfo_©Œ ( »cÜd , "AVRCP CT", NULL , NULL); 349 `ä“ ( psm [0]); 350 `ä“ ( psm [1]); 351 `ä“ ( v”siÚ ); 352 `sdp_li¡_ä“ ( ´Ùo [0], NULL ); 353 `sdp_li¡_ä“ ( ´Ùo [1], NULL ); 354 `sdp_li¡_ä“ ( ­£q , NULL ); 355 `sdp_li¡_ä“ ( ´Ùo1 [0], NULL ); 356 `sdp_li¡_ä“ ( ´Ùo1 [1], NULL ); 357 `sdp_li¡_ä“ ( ­rÙo1 , NULL ); 358 `sdp_li¡_ä“ ( ­£q1 , NULL ); 359 `sdp_li¡_ä“ ( pf£q , NULL ); 360 `sdp_li¡_ä“ ( ­rÙo , NULL ); 361 `sdp_li¡_ä“ ( roÙ , NULL ); 362 `sdp_li¡_ä“ ( svþass_id , NULL ); 364  »cÜd ; 365 } } 367  sdp_»cÜd_t * $avrý_tg_»cÜd () 369 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ , * ­£q_browsšg ; 370 uuid_t roÙ_uuid , l2ÿp , avùp , av¹g ; 371 sdp_´ofže_desc_t ´ofže [1]; 372 sdp_li¡_t * ­rÙo_cÚŒÞ , * ´Ùo_cÚŒÞ [2]; 373 sdp_»cÜd_t * »cÜd ; 374 sdp_d©a_t * psm_cÚŒÞ , * v”siÚ , * ã©u»s , * psm_browsšg ; 375 sdp_li¡_t * ­rÙo_browsšg , * ´Ùo_browsšg [2] = {0}; 376 ušt16_t Í = AVCTP_CONTROL_PSM ; 377 ušt16_t Í_browsšg = AVCTP_BROWSING_PSM ; 378 #ifdeà __TIZEN_PATCH__ 379 ušt16_t avrý_v” = 0x0103, avùp_v” = 0x0104; 380 ušt16_t ã© = AVRCP_FEATURE_CATEGORY_1 | 381 AVRCP_FEATURE_PLAYER_SETTINGS ; 383 ušt16_t avrý_v” = 0x0104, avùp_v” = 0x0103; 384 ušt16_t ã© = ( AVRCP_FEATURE_CATEGORY_1 | 385 AVRCP_FEATURE_CATEGORY_2 | 386 AVRCP_FEATURE_CATEGORY_3 | 387 AVRCP_FEATURE_CATEGORY_4 | 388 AVRCP_FEATURE_BROWSING | 389 AVRCP_FEATURE_PLAYER_SETTINGS ); 391 »cÜd = `sdp_»cÜd_®loc (); 392 ià(! »cÜd ) 393  NULL ; 395 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 396 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 397 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 400 `sdp_uuid16_ü—‹ (& av¹g , AV_REMOTE_TARGET_SVCLASS_ID ); 401 svþass_id = `sdp_li¡_­³nd ( NULL , & av¹g ); 402 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 405 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 406 ´Ùo_cÚŒÞ [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp ); 407 psm_cÚŒÞ = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 408 ´Ùo_cÚŒÞ [0] = `sdp_li¡_­³nd ÕrÙo_cÚŒÞ[0], psm_cÚŒÞ ); 409 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo_cÚŒÞ [0]); 411 `sdp_uuid16_ü—‹ (& avùp , AVCTP_UUID ); 412 ´Ùo_cÚŒÞ [1] = `sdp_li¡_­³nd ( NULL , & avùp ); 413 v”siÚ = `sdp_d©a_®loc ( SDP_UINT16 , & avùp_v” ); 414 ´Ùo_cÚŒÞ [1] = `sdp_li¡_­³nd ÕrÙo_cÚŒÞ[1], v”siÚ ); 415 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo_cÚŒÞ [1]); 417 ­rÙo_cÚŒÞ = `sdp_li¡_­³nd ( NULL , ­£q ); 418 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo_cÚŒÞ ); 419 ´Ùo_browsšg [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp ); 420 psm_browsšg = `sdp_d©a_®loc ( SDP_UINT16 , & Í_browsšg ); 421 ´Ùo_browsšg [0] = `sdp_li¡_­³nd ÕrÙo_browsšg[0], psm_browsšg ); 422 ­£q_browsšg = `sdp_li¡_­³nd ( NULL , ´Ùo_browsšg [0]); 424 ´Ùo_browsšg [1] = `sdp_li¡_­³nd ( NULL , & avùp ); 425 ´Ùo_browsšg [1] = `sdp_li¡_­³nd ÕrÙo_browsšg[1], v”siÚ ); 426 ­£q_browsšg = `sdp_li¡_­³nd ×p£q_browsšg, ´Ùo_browsšg [1]); 428 #iâdeà __TIZEN_PATCH__ 429 ­rÙo_browsšg = `sdp_li¡_­³nd ( NULL , ­£q_browsšg ); 430 `sdp_£t_add_acûss_´Ùos ( »cÜd , ­rÙo_browsšg ); 434 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , AV_REMOTE_PROFILE_ID ); 435 ´ofže [0]. v”siÚ = avrý_v” ; 436 #ifdeà __TIZEN_PATCH__ 437 ad­‹r_avrý_v” = avrý_v” ; 439 pf£q = `sdp_li¡_­³nd ( NULL , & ´ofže [0]); 440 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 442 ã©u»s = `sdp_d©a_®loc ( SDP_UINT16 , & ã© ); 443 `sdp_©Œ_add ( »cÜd , SDP_ATTR_SUPPORTED_FEATURES , ã©u»s ); 445 `sdp_£t_šfo_©Œ ( »cÜd , "AVRCP TG", NULL , NULL); 447 `ä“ ( psm_browsšg ); 448 `sdp_li¡_ä“ ( ´Ùo_browsšg [0], NULL ); 449 `sdp_li¡_ä“ ( ´Ùo_browsšg [1], NULL ); 450 `sdp_li¡_ä“ ( ­£q_browsšg , NULL ); 451 `sdp_li¡_ä“ ( ­rÙo_browsšg , NULL ); 453 `ä“ ( psm_cÚŒÞ ); 454 `ä“ ( v”siÚ ); 455 `sdp_li¡_ä“ ( ´Ùo_cÚŒÞ [0], NULL ); 456 `sdp_li¡_ä“ ( ´Ùo_cÚŒÞ [1], NULL ); 457 `sdp_li¡_ä“ ( ­£q , NULL ); 458 `sdp_li¡_ä“ ( ­rÙo_cÚŒÞ , NULL ); 459 `sdp_li¡_ä“ ( pf£q , NULL ); 460 `sdp_li¡_ä“ ( roÙ , NULL ); 461 `sdp_li¡_ä“ ( svþass_id , NULL ); 463  »cÜd ; 464 } } 466  $©Œ_g‘_max_v® ( ušt8_t ©Œ ) 468  ©Œ ) { 469  AVRCP_ATTRIBUTE_EQUALIZER : 470  AVRCP_EQUALIZER_ON ; 471  AVRCP_ATTRIBUTE_REPEAT_MODE : 472 #ifdeà __TIZEN_PATCH__ 473  AVRCP_REPEAT_MODE_ALL ; 475  AVRCP_REPEAT_MODE_GROUP ; 477  AVRCP_ATTRIBUTE_SHUFFLE : 478 #ifdeà __TIZEN_PATCH__ 479  AVRCP_SHUFFLE_ALL ; 481  AVRCP_SHUFFLE_GROUP ; 483  AVRCP_ATTRIBUTE_SCAN : 484  AVRCP_SCAN_GROUP ; 488 } } 490 cÚ¡ * $b©‹ry_¡©us_to_¡r ( ušt8_t ¡©us ) 492  ¡©us ) { 493  AVRCP_BATTERY_STATUS_NORMAL : 495  AVRCP_BATTERY_STATUS_WARNING : 497  AVRCP_BATTERY_STATUS_CRITICAL : 499  AVRCP_BATTERY_STATUS_EXTERNAL : 501  AVRCP_BATTERY_STATUS_FULL_CHARGE : 505  NULL ; 506 } } 513  ušt32_t $g‘_com·ny_id (cÚ¡ ušt8_t cid [3]) 515  cid [0] << 16 | cid[1] << 8 | cid[2]; 516 } } 523  $£t_com·ny_id ( ušt8_t cid [3], ušt32_t cid_š ) 525 cid [0] = ( cid_š & 0xff0000) >> 16; 526 cid [1] = ( cid_š & 0x00ff00) >> 8; 527 cid [2] = ( cid_š & 0x0000ff); 528 } } 530 cÚ¡ * $©Œ_to_¡r ( ušt8_t ©Œ ) 532  ©Œ ) { 533  AVRCP_ATTRIBUTE_EQUALIZER : 535  AVRCP_ATTRIBUTE_REPEAT_MODE : 537  AVRCP_ATTRIBUTE_SHUFFLE : 539  AVRCP_ATTRIBUTE_SCAN : 543  NULL ; 544 } } 546  $©Œv®_to_v® ( ušt8_t ©Œ , cÚ¡ * v®ue ) 548  »t ; 550  ©Œ ) { 551  AVRCP_ATTRIBUTE_EQUALIZER : 552 ià(! `¡rcmp ( v®ue , "off")) 553 »t = AVRCP_EQUALIZER_OFF ; 554 ià(! `¡rcmp ( v®ue , "on")) 555 »t = AVRCP_EQUALIZER_ON ; 557 »t = - EINVAL ; 559  »t ; 560  AVRCP_ATTRIBUTE_REPEAT_MODE : 561 ià(! `¡rcmp ( v®ue , "off")) 562 »t = AVRCP_REPEAT_MODE_OFF ; 563 ià(! `¡rcmp ( v®ue , "singletrack")) 564 »t = AVRCP_REPEAT_MODE_SINGLE ; 565 ià(! `¡rcmp ( v®ue , "alltracks")) 566 »t = AVRCP_REPEAT_MODE_ALL ; 567 ià(! `¡rcmp ( v®ue , "group")) 568 »t = AVRCP_REPEAT_MODE_GROUP ; 570 »t = - EINVAL ; 572  »t ; 573  AVRCP_ATTRIBUTE_SHUFFLE : 574 ià(! `¡rcmp ( v®ue , "off")) 575 »t = AVRCP_SHUFFLE_OFF ; 576 ià(! `¡rcmp ( v®ue , "alltracks")) 577 »t = AVRCP_SHUFFLE_ALL ; 578 ià(! `¡rcmp ( v®ue , "group")) 579 »t = AVRCP_SHUFFLE_GROUP ; 581 »t = - EINVAL ; 583  »t ; 584  AVRCP_ATTRIBUTE_SCAN : 585 ià(! `¡rcmp ( v®ue , "off")) 586 »t = AVRCP_SCAN_OFF ; 587 ià(! `¡rcmp ( v®ue , "alltracks")) 588 »t = AVRCP_SCAN_ALL ; 589 ià(! `¡rcmp ( v®ue , "group")) 590 »t = AVRCP_SCAN_GROUP ; 592 »t = - EINVAL ; 594  »t ; 597  - EINVAL ; 598 } } 600  $©Œ_to_v® (cÚ¡ * ¡r ) 602 ià(! `¡rÿ£cmp ( ¡r , "Equalizer")) 603  AVRCP_ATTRIBUTE_EQUALIZER ; 604 ià(! `¡rÿ£cmp ( ¡r , "Repeat")) 605  AVRCP_ATTRIBUTE_REPEAT_MODE ; 606 ià(! `¡rÿ£cmp ( ¡r , "Shuffle")) 607  AVRCP_ATTRIBUTE_SHUFFLE ; 608 ià(! `¡rÿ£cmp ( ¡r , "Scan")) 609  AVRCP_ATTRIBUTE_SCAN ; 611  - EINVAL ; 612 } } 614  $¶ay”_g‘_£‰šg ( avrý_¶ay” * ¶ay” , ušt8_t id ) 616 cÚ¡ * key ; 617 cÚ¡ * v®ue ; 619 ià( ¶ay” =ð NULL ) 620  - ENOENT ; 622 key = `©Œ_to_¡r ( id ); 623 ià( key =ð NULL ) 624  - EINVAL ; 626 v®ue = ¶ay” -> cb -> `g‘_£‰šg ( key ,…Ïy”-> u£r_d©a ); 627 ià( v®ue =ð NULL ) 628  - EINVAL ; 630  `©Œv®_to_v® ( id , v®ue ); 631 } } 633  $¶ay_¡©us_to_v® (cÚ¡ * ¡©us ) 635 ià(! `¡rÿ£cmp ( ¡©us , "stopped")) 636  AVRCP_PLAY_STATUS_STOPPED ; 637 ià(! `¡rÿ£cmp ( ¡©us , "playing")) 638  AVRCP_PLAY_STATUS_PLAYING ; 639 ià(! `¡rÿ£cmp ( ¡©us , "paused")) 640  AVRCP_PLAY_STATUS_PAUSED ; 641 ià(! `¡rÿ£cmp ( ¡©us , "forward-seek")) 642  AVRCP_PLAY_STATUS_FWD_SEEK ; 643 ià(! `¡rÿ£cmp ( ¡©us , "reverse-seek")) 644  AVRCP_PLAY_STATUS_REV_SEEK ; 645 ià(! `¡rÿ£cmp ( ¡©us , "error")) 646  AVRCP_PLAY_STATUS_ERROR ; 648  - EINVAL ; 649 } } 651  $avrý_¶ay”_ev’t ( avrý_¶ay” * ¶ay” , ušt8_t id , 652 cÚ¡ * d©a ) 654 ušt8_t buf [ AVRCP_HEADER_LENGTH + 9]; 655  avrý_h—d” * pdu = (*è buf ; 656 ušt16_t size ; 657 GSLi¡ * l ; 658  ©Œ ; 659  v® ; 660 #ifdeà __TIZEN_PATCH__ 661 ušt32_t * pos™iÚ_v® = NULL ; 662 GLi¡ * £‰šgs ; 665 ià( ¶ay” -> £ssiÚs =ð NULL ) 668 `mem£t ( buf , 0, (buf)); 670 `£t_com·ny_id ( pdu -> com·ny_id , IEEEID_BTSIG ); 672 pdu -> pdu_id = AVRCP_REGISTER_NOTIFICATION ; 673 pdu -> ·¿ms [0] = id ; 675 `DBG ("id=%u", id ); 677  id ) { 678  AVRCP_EVENT_STATUS_CHANGED : 679 size = 2; 680 pdu -> ·¿ms [1] = `¶ay_¡©us_to_v® ( d©a ); 683  AVRCP_EVENT_TRACK_CHANGED : 684 size = 9; 685 `memýy (& pdu -> ·¿ms [1], d©a , ( ušt64_t )); 688  AVRCP_EVENT_TRACK_REACHED_END : 689  AVRCP_EVENT_TRACK_REACHED_START : 690 size = 1; 692  AVRCP_EVENT_SETTINGS_CHANGED : 693 size = 2; 694 #ifdeà __TIZEN_PATCH__ 695 £‰šgs = `¶ay”_li¡_£‰šgs ( ¶ay” ); 696 pdu -> ·¿ms [1] = `g_li¡_Ëngth ( £‰šgs ); 697 ; £‰šgs ; s‘tšg ð£‰šgs-> Ãxt ) { 698 cÚ¡ * key = £‰šgs -> d©a ; 700 ©Œ = `©Œ_to_v® ( key ); 701 ià( ©Œ < 0) 704 v® = `¶ay”_g‘_£‰šg ( ¶ay” , ©Œ ); 705 ià( v® < 0) 708 pdu -> ·¿ms [ size ++] = ©Œ ; 709 pdu -> ·¿ms [ size ++] = v® ; 712 pdu -> ·¿ms [1] = 1; 714 ©Œ = `©Œ_to_v® ( d©a ); 715 ià( ©Œ < 0) 718 v® = `¶ay”_g‘_£‰šg ( ¶ay” , ©Œ ); 719 ià( v® < 0) 722 pdu -> ·¿ms [ size ++] = ©Œ ; 723 pdu -> ·¿ms [ size ++] = v® ; 726 #ifdeà __TIZEN_PATCH__ 727  AVRCP_EVENT_PLAYBACK_POS_CHANGED : 728 size = 5; 729 pos™iÚ_v® = ( ušt32_t *è d©a ; 730 * pos™iÚ_v® = (*position_val & 0x000000ff) << 24 | 731 (* pos™iÚ_v® & 0x0000ff00) << 8 | 732 (* pos™iÚ_v® & 0x00ff0000) >> 8 | 733 (* pos™iÚ_v® & 0xff000000) >> 24; 734 `memýy (& pdu -> ·¿ms [1], pos™iÚ_v® , ( ušt32_t )); 738 `”rÜ ("UnknowÀev’ˆ%u", id ); 742 pdu -> ·¿ms_Ën = `htÚs ( size ); 743 #ifdeà __TIZEN_PATCH__ 744 ià( id =ð AVRCP_EVENT_PLAYBACK_POS_CHANGED && 745 pos_tim”_id > 0) { 749 `DBG ("Removingheimer function‡dded by„egister‚otification"); 750 `g_sourû_»move ( pos_tim”_id ); 751 pos_tim”_id = 0; 755  l = ¶ay” -> £ssiÚs ;†;† =†-> Ãxt ) { 756  avrý * £ssiÚ = l -> d©a ; 757  ”r ; 759 ià(!( £ssiÚ -> »gi¡”ed_ev’ts & (1 << id ))) 762 ”r = `avùp_£nd_v’dÜd• ( £ssiÚ -> cÚn , 763 £ssiÚ -> Œª§ùiÚ_ev’ts [ id ], 764 AVC_CTYPE_CHANGED , AVC_SUBUNIT_PANEL , 765 buf , size + AVRCP_HEADER_LENGTH ); 766 ià( ”r < 0) 770 £ssiÚ -> »gi¡”ed_ev’ts ^ð1 << id ; 774 } } 776 cÚ¡ * $m‘ad©a_to_¡r ( ušt32_t id ) 778  id ) { 779  AVRCP_MEDIA_ATTRIBUTE_TITLE : 781  AVRCP_MEDIA_ATTRIBUTE_ARTIST : 783  AVRCP_MEDIA_ATTRIBUTE_ALBUM : 785  AVRCP_MEDIA_ATTRIBUTE_GENRE : 787  AVRCP_MEDIA_ATTRIBUTE_TRACK : 789  AVRCP_MEDIA_ATTRIBUTE_N_TRACKS : 791  AVRCP_MEDIA_ATTRIBUTE_DURATION : 795  NULL ; 796 } } 798 cÚ¡ * $¶ay”_g‘_m‘ad©a ( avrý_¶ay” * ¶ay” , 799 ušt32_t id ) 801 cÚ¡ * key ; 803 key = `m‘ad©a_to_¡r ( id ); 804 ià( key =ð NULL ) 805  NULL ; 807 ià( ¶ay” !ð NULL ) 808  ¶ay” -> cb -> `g‘_m‘ad©a ( key ,…Ïy”-> u£r_d©a ); 810 ià( id =ð AVRCP_MEDIA_ATTRIBUTE_TITLE ) 813  NULL ; 814 } } 816  ušt16_t $¶ay”_wr™e_medŸ_©Œibu‹ ( avrý_¶ay” * ¶ay” , 817 ušt32_t id , ušt8_t * buf , 818 ušt16_t * pos , 819 ušt16_t * off£t ) 821 ušt16_t Ën ; 822 ušt16_t ©Œ_Ën ; 823 cÚ¡ * v®ue = NULL ; 825 `DBG ("%u", id ); 827 v®ue = `¶ay”_g‘_m‘ad©a ( ¶ay” , id ); 828 ià( v®ue =ð NULL ) { 829 * off£t = 0; 833 ©Œ_Ën = `¡¾’ ( v®ue ); 834 v®ue = ((*èv®ueè+ * off£t ; 835 Ën = ©Œ_Ën - * off£t ; 837 ià( Ën > AVRCP_PDU_MTU - * pos ) { 838 Ën = AVRCP_PDU_MTU - * pos ; 839 * off£t +ð Ën ; 841 * off£t = 0; 844 `memýy (& buf [* pos ], v®ue , Ën ); 845 * pos +ð Ën ; 847  ©Œ_Ën ; 848 } } 850  GLi¡ * $¶ay”_fžl_medŸ_©Œibu‹ ( avrý_¶ay” * ¶ay” , 851 GLi¡ * ©Œ_ids , ušt8_t * buf , 852 ušt16_t * pos , ušt16_ˆ* off£t ) 854  smedŸ_©Œibu‹_h—d” { 855 ušt32_t id ; 856 ušt16_t ch¬£t ; 857 ušt16_t Ën ; 858 } * hdr = NULL ; 859 GLi¡ * l ; 861  l = ©Œ_ids ;† !ð NULL ;† = `g_li¡_d–‘e_lšk (l,†)) { 862 ušt32_t ©Œ = `GPOINTER_TO_UINT ( l -> d©a ); 863 ušt16_t ©Œ_Ën ; 865 ià(* off£t == 0) { 866 ià(* pos + (* hdr è>ð AVRCP_PDU_MTU ) 869 hdr = (*è& buf [* pos ]; 870 hdr -> id = `htÚl ( ©Œ ); 872 hdr -> ch¬£t = `htÚs ( AVRCP_CHARSET_UTF8 ); 873 * pos +ð(* hdr ); 876 ©Œ_Ën = `¶ay”_wr™e_medŸ_©Œibu‹ ( ¶ay” , ©Œ , buf , 877 pos , off£t ); 879 ià( hdr !ð NULL ) 880 hdr -> Ën = `htÚs ( ©Œ_Ën ); 882 ià(* off£t > 0) 886  l ; 887 } } 889  ³ndšg_pdu * $³ndšg_pdu_Ãw ( ušt8_t pdu_id , GLi¡ * ©Œ_ids , 890  off£t ) 892  ³ndšg_pdu * ³ndšg = `g_Ãw (pending_pdu, 1); 894 ³ndšg -> pdu_id =…du_id; 895 ³ndšg -> ©Œ_ids =‡ttr_ids; 896 ³ndšg -> off£t = offset; 898  ³ndšg ; 899 } } 901  gboÞ—n $£ssiÚ_abÜt_³ndšg_pdu ( avrý * £ssiÚ ) 903 ià( £ssiÚ -> ³ndšg_pdu =ð NULL ) 904  FALSE ; 906 `g_li¡_ä“ ( £ssiÚ -> ³ndšg_pdu -> ©Œ_ids ); 907 `g_ä“ ( £ssiÚ -> ³ndšg_pdu ); 908 £ssiÚ -> ³ndšg_pdu = NULL ; 910  TRUE ; 911 } } 913 cÚ¡ * $©Œv®_to_¡r ( ušt8_t ©Œ , ušt8_ˆ v®ue ) 915  ©Œ ) { 916  AVRCP_ATTRIBUTE_EQUALIZER : 917  v®ue ) { 918  AVRCP_EQUALIZER_ON : 920  AVRCP_EQUALIZER_OFF : 925  AVRCP_ATTRIBUTE_REPEAT_MODE : 926  v®ue ) { 927  AVRCP_REPEAT_MODE_OFF : 929  AVRCP_REPEAT_MODE_SINGLE : 931  AVRCP_REPEAT_MODE_ALL : 933 #iâdeà __TIZEN_PATCH__ 934  AVRCP_REPEAT_MODE_GROUP : 941  AVRCP_ATTRIBUTE_SHUFFLE : 942  AVRCP_ATTRIBUTE_SCAN : 943  v®ue ) { 944  AVRCP_SCAN_OFF : 946  AVRCP_SCAN_ALL : 948 #iâdeà __TIZEN_PATCH__ 949  AVRCP_SCAN_GROUP : 957  NULL ; 958 } } 960  $¶ay”_£t_£‰šg ( avrý_¶ay” * ¶ay” , ušt8_t id , 961 ušt8_t v® ) 963 cÚ¡ * key , * v®ue ; 965 key = `©Œ_to_¡r ( id ); 966 ià( key =ð NULL ) 967  - EINVAL ; 969 v®ue = `©Œv®_to_¡r ( id , v® ); 970 ià( v®ue =ð NULL ) 971  - EINVAL ; 973 ià( ¶ay” =ð NULL ) 974  - ENOENT ; 976  ¶ay” -> cb -> `£t_£‰šg ( key , v®ue ,…Ïy”-> u£r_d©a ); 977 } } 979  ušt8_t $avrý_hªdË_g‘_ÿ·bž™›s ( avrý * £ssiÚ , 980  avrý_h—d” * pdu , 981 ušt8_t Œª§ùiÚ ) 983 ušt16_t Ën = `Áohs ( pdu -> ·¿ms_Ën ); 984  i ; 986 ià( Ën != 1) 987  ”r ; 989 `DBG ("id=%u", pdu -> ·¿ms [0]); 991  pdu -> ·¿ms [0]) { 992  CAP_COMPANY_ID : 993  i = 0; i < `G_N_ELEMENTS ( com·ny_ids ); i++) { 994 `£t_com·ny_id (& pdu -> ·¿ms [2 + i * 3], 995 com·ny_ids [ i ]); 998 pdu -> ·¿ms_Ën = `htÚs (2 + (3 * `G_N_ELEMENTS ( com·ny_ids ))); 999 pdu -> ·¿ms [1] = `G_N_ELEMENTS ( com·ny_ids ); 1001  AVC_CTYPE_STABLE ; 1002  CAP_EVENTS_SUPPORTED : 1003 pdu -> ·¿ms [1] = 0; 1004  i = 1; i <ð AVRCP_EVENT_LAST ; i++) { 1005 ià( £ssiÚ -> suµÜ‹d_ev’ts & (1 << i )) { 1006 pdu -> ·¿ms [1]++; 1007 pdu -> ·¿ms [pdu->·¿ms[1] + 1] = i ; 1011 pdu -> ·¿ms_Ën = `htÚs (2 +…du-> ·¿ms [1]); 1012  AVC_CTYPE_STABLE ; 1015 ”r : 1016 pdu -> ·¿ms_Ën = `htÚs (1); 1017 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 1019  AVC_CTYPE_REJECTED ; 1020 } } 1022  avrý_¶ay” * $rg‘_g‘_¶ay” ( avrý * £ssiÚ ) 1024 ià(! £ssiÚ -> rg‘ ) 1025  NULL ; 1027  £ssiÚ -> rg‘ -> ¶ay” ; 1028 } } 1030  ušt8_t $avrý_hªdË_li¡_¶ay”_©Œibu‹s ( avrý * £ssiÚ , 1031  avrý_h—d” * pdu , 1032 ušt8_t Œª§ùiÚ ) 1034  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 1035 ušt16_t Ën = `Áohs ( pdu -> ·¿ms_Ën ); 1036  i ; 1038 ià( Ën != 0) { 1039 pdu -> ·¿ms_Ën = `htÚs (1); 1040 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 1041  AVC_CTYPE_REJECTED ; 1044 ià(! ¶ay” ) 1045  dÚe ; 1047  i = 1; i <ð AVRCP_ATTRIBUTE_SCAN ; i++) { 1048 ià( `¶ay”_g‘_£‰šg ( ¶ay” , i ) < 0) 1051 Ën ++; 1052 pdu -> ·¿ms [ Ën ] = i ; 1055 dÚe : 1056 pdu -> ·¿ms [0] = Ën ; 1057 pdu -> ·¿ms_Ën = `htÚs ( Ën + 1); 1059  AVC_CTYPE_STABLE ; 1060 } } 1062  ušt8_t $avrý_hªdË_li¡_¶ay”_v®ues ( avrý * £ssiÚ , 1063  avrý_h—d” * pdu , 1064 ušt8_t Œª§ùiÚ ) 1066  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 1067 ušt16_t Ën = `Áohs ( pdu -> ·¿ms_Ën ); 1068  i ; 1070 ià( Ën != 1) 1071  ”r ; 1073 ià( `¶ay”_g‘_£‰šg ( ¶ay” , pdu -> ·¿ms [0]) < 0) 1074  ”r ; 1076 Ën = `©Œ_g‘_max_v® ( pdu -> ·¿ms [0]); 1078  i = 1; i <ð Ën ; i++) 1079 pdu -> ·¿ms [ i ] = i; 1081 pdu -> ·¿ms [0] = Ën ; 1082 pdu -> ·¿ms_Ën = `htÚs ( Ën + 1); 1084  AVC_CTYPE_STABLE ; 1086 ”r : 1087 pdu -> ·¿ms_Ën = `htÚs (1); 1088 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 1089  AVC_CTYPE_REJECTED ; 1090 } } 1092  ušt32_t $¡r_to_m‘ad©a (cÚ¡ * ¡r ) 1094 ià( `¡rÿ£cmp ( ¡r , "Title") == 0) 1095  AVRCP_MEDIA_ATTRIBUTE_TITLE ; 1096 ià( `¡rÿ£cmp ( ¡r , "Artist") == 0) 1097  AVRCP_MEDIA_ATTRIBUTE_ARTIST ; 1098 ià( `¡rÿ£cmp ( ¡r , "Album") == 0) 1099  AVRCP_MEDIA_ATTRIBUTE_ALBUM ; 1100 ià( `¡rÿ£cmp ( ¡r , "Genre") == 0) 1101  AVRCP_MEDIA_ATTRIBUTE_GENRE ; 1102 ià( `¡rÿ£cmp ( ¡r , "TrackNumber") == 0) 1103  AVRCP_MEDIA_ATTRIBUTE_TRACK ; 1104 ià( `¡rÿ£cmp ( ¡r , "NumberOfTracks") == 0) 1105  AVRCP_MEDIA_ATTRIBUTE_N_TRACKS ; 1106 ià( `¡rÿ£cmp ( ¡r , "Duration") == 0) 1107  AVRCP_MEDIA_ATTRIBUTE_DURATION ; 1110 } } 1112  GLi¡ * $¶ay”_li¡_m‘ad©a ( avrý_¶ay” * ¶ay” ) 1114 GLi¡ * l , * ©Œs = NULL ; 1116 ià( ¶ay” =ð NULL ) 1117  `g_li¡_´•’d ( NULL , 1118 `GUINT_TO_POINTER ( AVRCP_MEDIA_ATTRIBUTE_TITLE )); 1120 l = ¶ay” -> cb -> `li¡_m‘ad©a ÕÏy”-> u£r_d©a ); 1121 ; l ;† =†-> Ãxt ) { 1122 cÚ¡ * key = l -> d©a ; 1124 ©Œs = `g_li¡_­³nd (attrs, 1125 `GUINT_TO_POINTER ( `¡r_to_m‘ad©a ( key ))); 1128  ©Œs ; 1129 } } 1131  ušt8_t $avrý_hªdË_g‘_–em’t_©Œibu‹s ( avrý * £ssiÚ , 1132  avrý_h—d” * pdu , 1133 ušt8_t Œª§ùiÚ ) 1135  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 1136 ušt16_t Ën = `Áohs ( pdu -> ·¿ms_Ën ); 1137 ušt64_t id’tif›r = `g‘_Ë64 (& pdu -> ·¿ms [0]); 1138 ušt16_t pos ; 1139 ušt8_t ljr ; 1140 GLi¡ * ©Œ_ids ; 1141 ušt16_t off£t ; 1143 ià( Ën < 9 || id’tif›r != 0) 1144  ”r ; 1146 ljr = pdu -> ·¿ms [8]; 1148 ià( Ën < ljr * ( ušt32_t ) + 1) 1149  ”r ; 1151 ià(! ljr ) { 1156 ©Œ_ids = `¶ay”_li¡_m‘ad©a ( ¶ay” ); 1157 Ën = `g_li¡_Ëngth ( ©Œ_ids ); 1159  i ; 1160  i = 0, Ën = 0, ©Œ_ids = NULL ; i < ljr ; i++) { 1161 ušt32_t id ; 1163 id = `g‘_be32 (& pdu -> ·¿ms [9] + ( i * (id))); 1166 ià( id =ð AVRCP_MEDIA_ATTRIBUTE_ILLEGAL || 1167 id > AVRCP_MEDIA_ATTRIBUTE_LAST ) 1170 Ën ++; 1171 ©Œ_ids = `g_li¡_´•’d (attr_ids, 1172 `GUINT_TO_POINTER ( id )); 1175 ©Œ_ids = `g_li¡_»v”£ (attr_ids); 1178 ià(! Ën ) 1179  ”r ; 1181 `£ssiÚ_abÜt_³ndšg_pdu ( £ssiÚ ); 1182 pos = 1; 1183 off£t = 0; 1184 ©Œ_ids = `¶ay”_fžl_medŸ_©Œibu‹ ( ¶ay” ,‡‰r_ids, pdu -> ·¿ms , 1185 & pos , & off£t ); 1187 ià( ©Œ_ids !ð NULL ) { 1188 £ssiÚ -> ³ndšg_pdu = `³ndšg_pdu_Ãw ( pdu -> pdu_id , ©Œ_ids , 1189 off£t ); 1190 pdu -> ·ck‘_ty³ = AVRCP_PACKET_TYPE_START ; 1193 pdu -> ·¿ms [0] = Ën ; 1194 pdu -> ·¿ms_Ën = `htÚs ( pos ); 1196  AVC_CTYPE_STABLE ; 1197 ”r : 1198 pdu -> ·¿ms_Ën = `htÚs (1); 1199 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 1200  AVC_CTYPE_REJECTED ; 1201 } } 1203  ušt8_t $avrý_hªdË_g‘_cu¼’t_¶ay”_v®ue ( avrý * £ssiÚ , 1204  avrý_h—d” * pdu , 1205 ušt8_t Œª§ùiÚ ) 1207  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 1208 ušt16_t Ën = `Áohs ( pdu -> ·¿ms_Ën ); 1209 ušt8_t * £‰šgs ; 1210  i ; 1212 ià( Ën <ð1 || pdu -> ·¿ms [0] !=†en - 1) 1213  ”r ; 1219 £‰šgs = `g_memdup (& pdu -> ·¿ms [1],…du->params[0]); 1220 Ën = 0; 1227  i = 0; i < pdu -> ·¿ms [0]; i++) { 1228  v® ; 1230 ià( £‰šgs [ i ] < AVRCP_ATTRIBUTE_EQUALIZER || 1231 £‰šgs [ i ] > AVRCP_ATTRIBUTE_SCAN ) { 1232 `DBG ("IgnÜšg %u", £‰šgs [ i ]); 1236 v® = `¶ay”_g‘_£‰šg ( ¶ay” , £‰šgs [ i ]); 1237 ià( v® < 0) 1240 pdu -> ·¿ms [++ Ën ] = £‰šgs [ i ]; 1241 pdu -> ·¿ms [++ Ën ] = v® ; 1244 `g_ä“ ( £‰šgs ); 1246 ià( Ën ) { 1247 pdu -> ·¿ms [0] = Ën / 2; 1248 pdu -> ·¿ms_Ën = `htÚs ( Ën + 1); 1250  AVC_CTYPE_STABLE ; 1253 `”rÜ ("No valid‡ttributes in„equest"); 1255 ”r : 1256 pdu -> ·¿ms_Ën = `htÚs (1); 1257 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 1259  AVC_CTYPE_REJECTED ; 1260 } } 1262  ušt8_t $avrý_hªdË_£t_¶ay”_v®ue ( avrý * £ssiÚ , 1263  avrý_h—d” * pdu , 1264 ušt8_t Œª§ùiÚ ) 1266  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 1267 ušt16_t Ën = `Áohs ( pdu -> ·¿ms_Ën ); 1268  i ; 1269 ušt8_t * ·¿m ; 1271 ià( Ën < 3 ||†’ > 2 * pdu -> ·¿ms [0] + 1U || ¶ay” =ð NULL ) 1272  ”r ; 1281  Ën = 0, i = 0, ·¿m = & pdu -> ·¿ms [1]; i <…du->params[0]; 1282 i ++, ·¿m += 2) { 1283 ià( `¶ay”_£t_£‰šg ( ¶ay” , ·¿m [0],…aram[1]) < 0) 1286 Ën ++; 1289 ià( Ën ) { 1290 pdu -> ·¿ms_Ën = 0; 1292  AVC_CTYPE_ACCEPTED ; 1295 ”r : 1296 pdu -> ·¿ms_Ën = `htÚs (1); 1297 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 1298  AVC_CTYPE_REJECTED ; 1299 } } 1301  ušt8_t $avrý_hªdË_di¥ÏyabË_ch¬£t ( avrý * £ssiÚ , 1302  avrý_h—d” * pdu , 1303 ušt8_t Œª§ùiÚ ) 1305 ušt16_t Ën = `Áohs ( pdu -> ·¿ms_Ën ); 1307 ià( Ën < 3) { 1308 pdu -> ·¿ms_Ën = `htÚs (1); 1309 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 1310  AVC_CTYPE_REJECTED ; 1317 pdu -> ·¿ms_Ën = 0; 1318  AVC_CTYPE_STABLE ; 1319 } } 1321  ušt8_t $avrý_hªdË_ù_b©‹ry_¡©us ( avrý * £ssiÚ , 1322  avrý_h—d” * pdu , 1323 ušt8_t Œª§ùiÚ ) 1325 ušt16_t Ën = `Áohs ( pdu -> ·¿ms_Ën ); 1326 cÚ¡ * v®¡r ; 1328 ià( Ën != 1) 1329  ”r ; 1331 v®¡r = `b©‹ry_¡©us_to_¡r ( pdu -> ·¿ms [0]); 1332 ià( v®¡r =ð NULL ) 1333  ”r ; 1335 pdu -> ·¿ms_Ën = 0; 1337  AVC_CTYPE_STABLE ; 1339 ”r : 1340 pdu -> ·¿ms_Ën = `htÚs (1); 1341 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 1342  AVC_CTYPE_REJECTED ; 1343 } } 1345  ušt32_t $¶ay”_g‘_pos™iÚ ( avrý_¶ay” * ¶ay” ) 1347 ià( ¶ay” =ð NULL ) 1350  ¶ay” -> cb -> `g‘_pos™iÚ ÕÏy”-> u£r_d©a ); 1351 } } 1353  ušt32_t $¶ay”_g‘_du¿tiÚ ( avrý_¶ay” * ¶ay” ) 1355 ušt32_t num ; 1357 ià( ¶ay” =ð NULL ) 1358  UINT32_MAX ; 1360 num = ¶ay” -> cb -> `g‘_du¿tiÚ ÕÏy”-> u£r_d©a ); 1361 ià( num == 0) 1362  UINT32_MAX ; 1364  num ; 1365 } } 1367  ušt8_t $¶ay”_g‘_¡©us ( avrý_¶ay” * ¶ay” ) 1369 cÚ¡ * v®ue ; 1371 ià( ¶ay” =ð NULL ) 1372  AVRCP_PLAY_STATUS_STOPPED ; 1374 v®ue = ¶ay” -> cb -> `g‘_¡©us ÕÏy”-> u£r_d©a ); 1375 ià( v®ue =ð NULL ) 1376  AVRCP_PLAY_STATUS_STOPPED ; 1378  `¶ay_¡©us_to_v® ( v®ue ); 1379 } } 1381  ušt8_t $avrý_hªdË_g‘_¶ay_¡©us ( avrý * £ssiÚ , 1382  avrý_h—d” * pdu , 1383 ušt8_t Œª§ùiÚ ) 1385  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 1386 ušt16_t Ën = `Áohs ( pdu -> ·¿ms_Ën ); 1387 ušt32_t pos™iÚ ; 1388 ušt32_t du¿tiÚ ; 1390 ià( Ën != 0) { 1391 pdu -> ·¿ms_Ën = `htÚs (1); 1392 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 1393  AVC_CTYPE_REJECTED ; 1396 pos™iÚ = `¶ay”_g‘_pos™iÚ ( ¶ay” ); 1397 du¿tiÚ = `¶ay”_g‘_du¿tiÚ ( ¶ay” ); 1399 pos™iÚ = `htÚl (position); 1400 du¿tiÚ = `htÚl (duration); 1402 `memýy (& pdu -> ·¿ms [0], & du¿tiÚ , 4); 1403 `memýy (& pdu -> ·¿ms [4], & pos™iÚ , 4); 1404 pdu -> ·¿ms [8] = `¶ay”_g‘_¡©us ( ¶ay” ); 1406 pdu -> ·¿ms_Ën = `htÚs (9); 1408  AVC_CTYPE_STABLE ; 1409 } } 1411  ušt64_t $¶ay”_g‘_uid ( avrý_¶ay” * ¶ay” ) 1413 ià( ¶ay” =ð NULL ) 1414  UINT64_MAX ; 1416  ¶ay” -> cb -> `g‘_uid ÕÏy”-> u£r_d©a ); 1417 } } 1419  GLi¡ * $¶ay”_li¡_£‰šgs ( avrý_¶ay” * ¶ay” ) 1421 ià( ¶ay” =ð NULL ) 1422  NULL ; 1424  ¶ay” -> cb -> `li¡_£‰šgs ÕÏy”-> u£r_d©a ); 1425 } } 1427 #ifdeà __TIZEN_PATCH__ 1428  ušt32_t $¶ay”_g‘_¶ayback_pos™iÚ ( avrý_¶ay” * ¶ay” ) 1430 ià( ¶ay” =ð NULL ) 1431  UINT32_MAX ; 1433  ¶ay” -> cb -> `g‘_pos™iÚ ÕÏy”-> u£r_d©a ); 1434 } } 1437  boÞ $avrý_hªdË_¶ay ( avrý * £ssiÚ ) 1439  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 1441 ià( ¶ay” =ð NULL ) 1442  çl£ ; 1444  ¶ay” -> cb -> `¶ay ÕÏy”-> u£r_d©a ); 1445 } } 1447  boÞ $avrý_hªdË_¡Ý ( avrý * £ssiÚ ) 1449  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 1451 ià( ¶ay” =ð NULL ) 1452  çl£ ; 1454  ¶ay” -> cb -> `¡Ý ÕÏy”-> u£r_d©a ); 1455 } } 1457  boÞ $avrý_hªdË_·u£ ( avrý * £ssiÚ ) 1459  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 1461 ià( ¶ay” =ð NULL ) 1462  çl£ ; 1464  ¶ay” -> cb -> `·u£ ÕÏy”-> u£r_d©a ); 1465 } } 1467  boÞ $avrý_hªdË_Ãxt ( avrý * £ssiÚ ) 1469  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 1471 ià( ¶ay” =ð NULL ) 1472  çl£ ; 1474  ¶ay” -> cb -> `Ãxt ÕÏy”-> u£r_d©a ); 1475 } } 1477  boÞ $avrý_hªdË_´evious ( avrý * £ssiÚ ) 1479  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 1481 ià( ¶ay” =ð NULL ) 1482  çl£ ; 1484  ¶ay” -> cb -> `´evious ÕÏy”-> u£r_d©a ); 1485 } } 1487 cÚ¡  ·s¡hrough_hªdËr g·s¡hrough_hªdËrs [] = { 1488 { AVC_PLAY , avrý_hªdË_¶ay }, 1489 { AVC_STOP , avrý_hªdË_¡Ý }, 1490 { AVC_PAUSE , avrý_hªdË_·u£ }, 1491 { AVC_FORWARD , avrý_hªdË_Ãxt }, 1492 { AVC_BACKWARD , avrý_hªdË_´evious }, 1496  boÞ $hªdË_·s¡hrough ( avùp * cÚn , ušt8_t Ý , boÞ ´es£d , 1497 * u£r_d©a ) 1499  avrý * £ssiÚ = u£r_d©a ; 1500 cÚ¡  ·s¡hrough_hªdËr * hªdËr ; 1502  hªdËr = £ssiÚ -> ·s¡hrough_hªdËrs ; hªdËr-> func ; 1503 hªdËr ++) { 1504 ià( hªdËr -> Ý == op) 1508 ià( hªdËr -> func =ð NULL ) 1509  çl£ ; 1512 ià(! ´es£d ) 1513  Œue ; 1515  hªdËr -> `func ( £ssiÚ ); 1516 } } 1518 #ifdeà __TIZEN_PATCH__ 1519  $avrý_¡Ý_pos™iÚ_tim” () 1521 ià( pos_tim”_id > 0) { 1522 `DBG ("Removing…ositionimer id"); 1523 `g_sourû_»move ( pos_tim”_id ); 1524 pos_tim”_id = 0; 1526 } } 1527 gboÞ—n $£nd_¶ayback_pos™iÚ_ev’t ( gpoš‹r u£r_d©a ) 1529  avrý_¶ay” * ¶ay” = u£r_d©a ; 1530 ušt32_t ¶ayback_pos™iÚ ; 1531 ušt8_t ¶ay_¡©us ; 1533 ¶ay_¡©us = `¶ay”_g‘_¡©us ( ¶ay” ); 1534 ià( ¶ay_¡©us !ð AVRCP_PLAY_STATUS_PLAYING ) 1535  FALSE ; 1537 ¶ayback_pos™iÚ = `¶ay”_g‘_¶ayback_pos™iÚ ( ¶ay” ); 1538 pos_tim”_id = 0; 1539 `avrý_¶ay”_ev’t ( ¶ay” , AVRCP_EVENT_PLAYBACK_POS_CHANGED , 1540 & ¶ayback_pos™iÚ ); 1541  FALSE ; 1542 } } 1545  ušt8_t $avrý_hªdË_»gi¡”_nÙifiÿtiÚ ( avrý * £ssiÚ , 1546  avrý_h—d” * pdu , 1547 ušt8_t Œª§ùiÚ ) 1549  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 1550  btd_deviû * dev = £ssiÚ ->dev; 1551 ušt16_t Ën = `Áohs ( pdu -> ·¿ms_Ën ); 1552 ušt64_t uid ; 1553 #ifdeà __TIZEN_PATCH__ 1554 ušt32_t ¶ayback_š‹rv® ; 1555 ušt32_t ¶ayback_pos™iÚ ; 1556 ušt8_t ¶ay_¡©us ; 1558 GLi¡ * £‰šgs ; 1565 ià( Ën != 5) 1566  ”r ; 1569 ià(!( £ssiÚ -> suµÜ‹d_ev’ts & (1 << pdu -> ·¿ms [0]))) 1570  ”r ; 1572  pdu -> ·¿ms [0]) { 1573  AVRCP_EVENT_STATUS_CHANGED : 1574 Ën = 2; 1575 pdu -> ·¿ms [1] = `¶ay”_g‘_¡©us ( ¶ay” ); 1578  AVRCP_EVENT_TRACK_CHANGED : 1579 Ën = 9; 1580 uid = `¶ay”_g‘_uid ( ¶ay” ); 1581 `memýy (& pdu -> ·¿ms [1], & uid , ( ušt64_t )); 1584  AVRCP_EVENT_TRACK_REACHED_END : 1585  AVRCP_EVENT_TRACK_REACHED_START : 1586 Ën = 1; 1588  AVRCP_EVENT_SETTINGS_CHANGED : 1589 Ën = 1; 1590 £‰šgs = `¶ay”_li¡_£‰šgs ( ¶ay” ); 1592 pdu -> ·¿ms [ Ën ++] = `g_li¡_Ëngth ( £‰šgs ); 1593 ; £‰šgs ; s‘tšg ð£‰šgs-> Ãxt ) { 1594 cÚ¡ * key = £‰šgs -> d©a ; 1595  ©Œ ; 1596  v® ; 1598 ©Œ = `©Œ_to_v® ( key ); 1599 ià( ©Œ < 0) 1602 v® = `¶ay”_g‘_£‰šg ( ¶ay” , ©Œ ); 1603 ià( v® < 0) 1606 pdu -> ·¿ms [ Ën ++] = ©Œ ; 1607 pdu -> ·¿ms [ Ën ++] = v® ; 1611  AVRCP_EVENT_VOLUME_CHANGED : 1612 pdu -> ·¿ms [1] = `medŸ_Œª¥Üt_g‘_deviû_vÞume ( dev ); 1613 ià( pdu -> ·¿ms [1] > 127) 1614  ”r ; 1616 Ën = 2; 1619 #ifdeà __TIZEN_PATCH__ 1620  AVRCP_EVENT_PLAYBACK_POS_CHANGED : 1621 Ën = 5; 1625 `memýy (& ¶ayback_š‹rv® , & pdu -> ·¿ms [1], ( ušt32_t )); 1626 ¶ayback_š‹rv® = ((playback_interval>>24)&0xff) | 1627 (( ¶ayback_š‹rv® <<8)&0xff0000) | 1628 (( ¶ayback_š‹rv® >>8)&0xff00) | 1629 (( ¶ayback_š‹rv® <<24)&0xff000000); 1631 ¶ay_¡©us = `¶ay”_g‘_¡©us ( ¶ay” ); 1633 ià( ¶ay_¡©us !ð AVRCP_PLAY_STATUS_PLAYING ) { 1634 `DBG ("PÏy Po Chªged Ev’ˆi sk³d(%d)", ¶ay_¡©us ); 1636 `DBG ("PÏyback iÁ”v® : %d secs", ¶ayback_š‹rv® ); 1637 pos_tim”_id = `g_timeout_add_£cÚds ( 1638 ¶ayback_š‹rv® , 1639 £nd_¶ayback_pos™iÚ_ev’t , ¶ay” ); 1643 ¶ayback_pos™iÚ = `¶ay”_g‘_¶ayback_pos™iÚ ( ¶ay” ); 1644 ¶ayback_pos™iÚ = (playback_position & 0x000000ff) << 24 | 1645 ( ¶ayback_pos™iÚ & 0x0000ff00) << 8 | 1646 ( ¶ayback_pos™iÚ & 0x00ff0000) >> 8 | 1647 ( ¶ayback_pos™iÚ & 0xff000000) >> 24; 1648 `memýy (& pdu -> ·¿ms [1], & ¶ayback_pos™iÚ , ( ušt32_t )); 1655  ”r ; 1659 £ssiÚ -> »gi¡”ed_ev’ts |ð(1 << pdu -> ·¿ms [0]); 1660 £ssiÚ -> Œª§ùiÚ_ev’ts [ pdu -> ·¿ms [0]] = Œª§ùiÚ ; 1662 pdu -> ·¿ms_Ën = `htÚs ( Ën ); 1664  AVC_CTYPE_INTERIM ; 1666 ”r : 1667 pdu -> ·¿ms_Ën = `htÚs (1); 1668 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 1669  AVC_CTYPE_REJECTED ; 1670 } } 1672  ušt8_t $avrý_hªdË_»que¡_cÚtšušg ( avrý * £ssiÚ , 1673  avrý_h—d” * pdu , 1674 ušt8_t Œª§ùiÚ ) 1676  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 1677 ušt16_t Ën = `Áohs ( pdu -> ·¿ms_Ën ); 1678  ³ndšg_pdu * ³ndšg ; 1680 ià( Ën !ð1 || £ssiÚ -> ³ndšg_pdu =ð NULL ) 1681  ”r ; 1683 ³ndšg = £ssiÚ -> ³ndšg_pdu ; 1685 ià( ³ndšg -> pdu_id !ð pdu -> ·¿ms [0]) 1686  ”r ; 1689 Ën = 0; 1690 ³ndšg -> ©Œ_ids = `¶ay”_fžl_medŸ_©Œibu‹ ( ¶ay” , 1691 ³ndšg -> ©Œ_ids , 1692 pdu -> ·¿ms , & Ën , 1693 & ³ndšg -> off£t ); 1694 pdu -> pdu_id = ³ndšg ->pdu_id; 1696 ià( ³ndšg -> ©Œ_ids =ð NULL ) { 1697 `g_ä“ ( £ssiÚ -> ³ndšg_pdu ); 1698 £ssiÚ -> ³ndšg_pdu = NULL ; 1699 pdu -> ·ck‘_ty³ = AVRCP_PACKET_TYPE_END ; 1701 pdu -> ·ck‘_ty³ = AVRCP_PACKET_TYPE_CONTINUING ; 1704 pdu -> ·¿ms_Ën = `htÚs ( Ën ); 1706  AVC_CTYPE_STABLE ; 1707 ”r : 1708 pdu -> ·¿ms_Ën = `htÚs (1); 1709 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 1710  AVC_CTYPE_REJECTED ; 1711 } } 1713  ušt8_t $avrý_hªdË_abÜt_cÚtšušg ( avrý * £ssiÚ , 1714  avrý_h—d” * pdu , 1715 ušt8_t Œª§ùiÚ ) 1717 ušt16_t Ën = `Áohs ( pdu -> ·¿ms_Ën ); 1718  ³ndšg_pdu * ³ndšg ; 1720 ià( Ën !ð1 || £ssiÚ -> ³ndšg_pdu =ð NULL ) 1721  ”r ; 1723 ³ndšg = £ssiÚ -> ³ndšg_pdu ; 1725 ià( ³ndšg -> pdu_id !ð pdu -> ·¿ms [0]) 1726  ”r ; 1728 `£ssiÚ_abÜt_³ndšg_pdu ( £ssiÚ ); 1729 pdu -> ·¿ms_Ën = 0; 1731  AVC_CTYPE_ACCEPTED ; 1733 ”r : 1734 pdu -> ·¿ms_Ën = `htÚs (1); 1735 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 1736  AVC_CTYPE_REJECTED ; 1737 } } 1739  ušt8_t $avrý_hªdË_£t_absÞu‹_vÞume ( avrý * £ssiÚ , 1740  avrý_h—d” * pdu , 1741 ušt8_t Œª§ùiÚ ) 1743 #iâdeà __TIZEN_PATCH__ 1744  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 1746  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 1748 ušt16_t Ën = `Áohs ( pdu -> ·¿ms_Ën ); 1749 ušt8_t vÞume ; 1751 ià( Ën != 1) 1752  ”r ; 1754 ià(! ¶ay” ) 1755  ”r ; 1757 vÞume = pdu -> ·¿ms [0] & 0x7F; 1759 `medŸ_Œª¥Üt_upd©e_deviû_vÞume ( £ssiÚ -> dev , vÞume ); 1761  AVC_CTYPE_ACCEPTED ; 1763 ”r : 1764 pdu -> ·¿ms_Ën = `htÚs (1); 1765 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 1766  AVC_CTYPE_REJECTED ; 1767 } } 1769 cÚ¡  cÚŒÞ_pdu_hªdËr gcÚŒÞ_hªdËrs [] = { 1770 { AVRCP_GET_CAPABILITIES , AVC_CTYPE_STATUS , 1771 avrý_hªdË_g‘_ÿ·bž™›s }, 1772 { AVRCP_LIST_PLAYER_ATTRIBUTES , AVC_CTYPE_STATUS , 1773 avrý_hªdË_li¡_¶ay”_©Œibu‹s }, 1774 { AVRCP_LIST_PLAYER_VALUES , AVC_CTYPE_STATUS , 1775 avrý_hªdË_li¡_¶ay”_v®ues }, 1776 { AVRCP_GET_ELEMENT_ATTRIBUTES , AVC_CTYPE_STATUS , 1777 avrý_hªdË_g‘_–em’t_©Œibu‹s }, 1778 { AVRCP_GET_CURRENT_PLAYER_VALUE , AVC_CTYPE_STATUS , 1779 avrý_hªdË_g‘_cu¼’t_¶ay”_v®ue }, 1780 { AVRCP_SET_PLAYER_VALUE , AVC_CTYPE_CONTROL , 1781 avrý_hªdË_£t_¶ay”_v®ue }, 1782 { AVRCP_GET_PLAYER_ATTRIBUTE_TEXT , AVC_CTYPE_STATUS , 1783 NULL }, 1784 { AVRCP_GET_PLAYER_VALUE_TEXT , AVC_CTYPE_STATUS , 1785 NULL }, 1786 { AVRCP_DISPLAYABLE_CHARSET , AVC_CTYPE_STATUS , 1787 avrý_hªdË_di¥ÏyabË_ch¬£t }, 1788 { AVRCP_CT_BATTERY_STATUS , AVC_CTYPE_STATUS , 1789 avrý_hªdË_ù_b©‹ry_¡©us }, 1790 { AVRCP_GET_PLAY_STATUS , AVC_CTYPE_STATUS , 1791 avrý_hªdË_g‘_¶ay_¡©us }, 1792 { AVRCP_REGISTER_NOTIFICATION , AVC_CTYPE_NOTIFY , 1793 avrý_hªdË_»gi¡”_nÙifiÿtiÚ }, 1794 { AVRCP_SET_ABSOLUTE_VOLUME , AVC_CTYPE_CONTROL , 1795 avrý_hªdË_£t_absÞu‹_vÞume }, 1796 { AVRCP_REQUEST_CONTINUING , AVC_CTYPE_CONTROL , 1797 avrý_hªdË_»que¡_cÚtšušg }, 1798 { AVRCP_ABORT_CONTINUING , AVC_CTYPE_CONTROL , 1799 avrý_hªdË_abÜt_cÚtšušg }, 1804  size_t $hªdË_v’dÜd•_pdu ( avùp * cÚn , ušt8_t Œª§ùiÚ , 1805 ušt8_t * code , ušt8_ˆ* subun™ , 1806 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 1807 * u£r_d©a ) 1809  avrý * £ssiÚ = u£r_d©a ; 1810 cÚ¡  cÚŒÞ_pdu_hªdËr * hªdËr ; 1811  avrý_h—d” * pdu = (*è Ý”ªds ; 1812 ušt32_t com·ny_id = `g‘_com·ny_id ( pdu ->company_id); 1814 ià( com·ny_id !ð IEEEID_BTSIG ) { 1815 * code = AVC_CTYPE_NOT_IMPLEMENTED ; 1819 `DBG ("AVRCP PDU 0x%02X, company 0x%06X†en 0x%04X", 1820 pdu -> pdu_id , com·ny_id , `Áohs Õdu-> ·¿ms_Ën )); 1822 pdu -> ·ck‘_ty³ = 0; 1823 pdu -> rsvd = 0; 1825 ià( Ý”ªd_couÁ < AVRCP_HEADER_LENGTH ) { 1826 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_COMMAND ; 1827  ”r_m‘ad©a ; 1830  hªdËr = £ssiÚ -> cÚŒÞ_hªdËrs ; hªdËr-> pdu_id ; handler++) { 1831 ià( hªdËr -> pdu_id =ð pdu ->pdu_id) 1835 ià( hªdËr -> pdu_id !ð pdu ->pdu_id || hªdËr-> code != *code) { 1836 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_COMMAND ; 1837  ”r_m‘ad©a ; 1840 ià(! hªdËr -> func ) { 1841 pdu -> ·¿ms [0] = AVRCP_STATUS_INVALID_PARAM ; 1842  ”r_m‘ad©a ; 1845 * code = hªdËr -> `func ( £ssiÚ , pdu , Œª§ùiÚ ); 1847 ià(* code !ð AVC_CTYPE_REJECTED && 1848 pdu -> pdu_id !ð AVRCP_GET_ELEMENT_ATTRIBUTES && 1849 pdu -> pdu_id !ð AVRCP_REQUEST_CONTINUING && 1850 pdu -> pdu_id !ð AVRCP_ABORT_CONTINUING ) 1851 `£ssiÚ_abÜt_³ndšg_pdu ( £ssiÚ ); 1853  AVRCP_HEADER_LENGTH + `Áohs ( pdu -> ·¿ms_Ën ); 1855 ”r_m‘ad©a : 1856 pdu -> ·¿ms_Ën = `htÚs (1); 1857 * code = AVC_CTYPE_REJECTED ; 1859  AVRCP_HEADER_LENGTH + 1; 1860 } } 1862  sbrowsšg_pdu_hªdËr { 1863 ušt8_t mpdu_id ; 1864 (* mfunc è( avrý * m£ssiÚ ,  avrý_browsšg_h—d” * mpdu , 1865 ušt8_t mŒª§ùiÚ ); 1866 } gbrowsšg_hªdËrs [] = { 1870 size_t $avrý_browsšg_g’”®_»jeù ( ušt8_t * Ý”ªds ) 1872  avrý_browsšg_h—d” * pdu = (*è Ý”ªds ; 1873 ušt8_t ¡©us ; 1875 pdu -> pdu_id = AVRCP_GENERAL_REJECT ; 1876 ¡©us = AVRCP_STATUS_INVALID_COMMAND ; 1878 pdu -> ·¿m_Ën = `htÚs (( ¡©us )); 1879 `memýy ( pdu -> ·¿ms , & ¡©us , ((status))); 1880  AVRCP_BROWSING_HEADER_LENGTH + ( ¡©us ); 1881 } } 1883  size_t $hªdË_browsšg_pdu ( avùp * cÚn , 1884 ušt8_t Œª§ùiÚ , ušt8_ˆ* Ý”ªds , 1885 size_t Ý”ªd_couÁ , * u£r_d©a ) 1887  avrý * £ssiÚ = u£r_d©a ; 1888  browsšg_pdu_hªdËr * hªdËr ; 1889  avrý_browsšg_h—d” * pdu = (*è Ý”ªds ; 1891 `DBG ("AVRCP Browsšg PDU 0x%02X,†’ 0x%04X", pdu -> pdu_id , 1892 `Áohs ( pdu -> ·¿m_Ën )); 1894  hªdËr = browsšg_hªdËrs ; hªdËr-> pdu_id ; handler++) { 1895 ià( hªdËr -> pdu_id =ð pdu ->pdu_id) 1896  dÚe ; 1899  `avrý_browsšg_g’”®_»jeù ( Ý”ªds ); 1901 dÚe : 1902 £ssiÚ -> Œª§ùiÚ =ransaction; 1903 hªdËr -> `func ( £ssiÚ , pdu , Œª§ùiÚ ); 1904  AVRCP_BROWSING_HEADER_LENGTH + `Áohs ( pdu -> ·¿m_Ën ); 1905 } } 1907 size_t $avrý_hªdË_v’dÜ_»jeù ( ušt8_t * code , ušt8_ˆ* Ý”ªds ) 1909  avrý_h—d” * pdu = (*è Ý”ªds ; 1910 ušt32_t com·ny_id = `g‘_com·ny_id ( pdu ->company_id); 1912 * code = AVC_CTYPE_REJECTED ; 1913 pdu -> ·¿ms_Ën = `htÚs (1); 1914 pdu -> ·¿ms [0] = AVRCP_STATUS_INTERNAL_ERROR ; 1916 `DBG ("rejecting AVRCP PDU 0x%02X, company 0x%06X†en 0x%04X", 1917 pdu -> pdu_id , com·ny_id , `Áohs Õdu-> ·¿ms_Ën )); 1919  AVRCP_HEADER_LENGTH + 1; 1920 } } 1922  avrý_£rv” * $fšd_£rv” ( GSLi¡ * li¡ ,  btd_ad­‹r * a ) 1924 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 1925  avrý_£rv” * £rv” = li¡ -> d©a ; 1927 ià( £rv” -> ad­‹r =ð a ) 1928  £rv” ; 1931  NULL ; 1932 } } 1934 cÚ¡ * $¡©us_to_¡ršg ( ušt8_t ¡©us ) 1936  ¡©us ) { 1937  AVRCP_PLAY_STATUS_STOPPED : 1939  AVRCP_PLAY_STATUS_PLAYING : 1941  AVRCP_PLAY_STATUS_PAUSED : 1943  AVRCP_PLAY_STATUS_FWD_SEEK : 1945  AVRCP_PLAY_STATUS_REV_SEEK : 1947  AVRCP_PLAY_STATUS_ERROR : 1950  NULL ; 1952 } } 1954  gboÞ—n $avrý_g‘_¶ay_¡©us_r¥ ( avùp * cÚn , 1955 ušt8_t code , ušt8_ˆ subun™ , 1956 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 1957 * u£r_d©a ) 1959  avrý * £ssiÚ = u£r_d©a ; 1960  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 1961  medŸ_¶ay” * mp = ¶ay” -> u£r_d©a ; 1962  avrý_h—d” * pdu = (*è Ý”ªds ; 1963 ušt32_t du¿tiÚ ; 1964 ušt32_t pos™iÚ ; 1965 ušt8_t ¡©us ; 1967 ià( pdu =ð NULL || code =ð AVC_CTYPE_REJECTED || 1968 `Áohs ( pdu -> ·¿ms_Ën ) != 9) 1969  FALSE ; 1971 `memýy (& du¿tiÚ , pdu -> ·¿ms , ( ušt32_t )); 1972 du¿tiÚ = `Áohl (duration); 1973 `medŸ_¶ay”_£t_du¿tiÚ ( mp , du¿tiÚ ); 1975 `memýy (& pos™iÚ , pdu -> ·¿ms + 4, ( ušt32_t )); 1976 pos™iÚ = `Áohl (position); 1977 `medŸ_¶ay”_£t_pos™iÚ ( mp , pos™iÚ ); 1979 `memýy (& ¡©us , pdu -> ·¿ms + 8, ( ušt8_t )); 1980 `medŸ_¶ay”_£t_¡©us ( mp , `¡©us_to_¡ršg ( ¡©us )); 1982  FALSE ; 1983 } } 1985  $avrý_g‘_¶ay_¡©us ( avrý * £ssiÚ ) 1987 ušt8_t buf [ AVRCP_HEADER_LENGTH ]; 1988  avrý_h—d” * pdu = (*è buf ; 1990 `mem£t ( buf , 0, (buf)); 1992 `£t_com·ny_id ( pdu -> com·ny_id , IEEEID_BTSIG ); 1993 pdu -> pdu_id = AVRCP_GET_PLAY_STATUS ; 1994 pdu -> ·ck‘_ty³ = AVRCP_PACKET_TYPE_SINGLE ; 1996 `avùp_£nd_v’dÜd•_»q ( £ssiÚ -> cÚn , AVC_CTYPE_STATUS , 1997 AVC_SUBUNIT_PANEL , buf , (buf), 1998 avrý_g‘_¶ay_¡©us_r¥ , 1999 £ssiÚ ); 2000 } } 2002 cÚ¡ * $¡©us_to_¡r ( ušt8_t ¡©us ) 2004  ¡©us ) { 2005  AVRCP_STATUS_INVALID_COMMAND : 2007  AVRCP_STATUS_INVALID_PARAM : 2009  AVRCP_STATUS_INTERNAL_ERROR : 2011  AVRCP_STATUS_SUCCESS : 2016 } } 2018  gboÞ—n $avrý_¶ay”_v®ue_r¥ ( avùp * cÚn , 2019 ušt8_t code , ušt8_ˆ subun™ , 2020 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 2021 * u£r_d©a ) 2023  avrý * £ssiÚ = u£r_d©a ; 2024  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 2025  medŸ_¶ay” * mp = ¶ay” -> u£r_d©a ; 2026  avrý_h—d” * pdu = (*è Ý”ªds ; 2027 ušt8_t couÁ ; 2028  i ; 2030 ià( pdu =ð NULL ) { 2031 `medŸ_¶ay”_£t_£‰šg ( mp , "Error", "Timeout"); 2032  FALSE ; 2035 ià( code =ð AVC_CTYPE_REJECTED ) { 2036 `medŸ_¶ay”_£t_£‰šg ( mp , "Error", 2037 `¡©us_to_¡r ( pdu -> ·¿ms [0])); 2038  FALSE ; 2041 couÁ = pdu -> ·¿ms [0]; 2043 ià( pdu -> ·¿ms_Ën < couÁ * 2) 2044  FALSE ; 2046  i = 1; couÁ > 0; count--, i += 2) { 2047 cÚ¡ * key ; 2048 cÚ¡ * v®ue ; 2050 key = `©Œ_to_¡r ( pdu -> ·¿ms [ i ]); 2051 ià( key =ð NULL ) 2054 v®ue = `©Œv®_to_¡r ( pdu -> ·¿ms [ i ],…du->params[i + 1]); 2055 ià( v®ue =ð NULL ) 2058 `medŸ_¶ay”_£t_£‰šg ( mp , key , v®ue ); 2061  FALSE ; 2062 } } 2064  $avrý_g‘_cu¼’t_¶ay”_v®ue ( avrý * £ssiÚ , 2065 ušt8_t * ©Œs , ušt8_ˆ couÁ ) 2067 ušt8_t buf [ AVRCP_HEADER_LENGTH + AVRCP_ATTRIBUTE_LAST + 1]; 2068  avrý_h—d” * pdu = (*è buf ; 2069 ušt16_t Ëngth = AVRCP_HEADER_LENGTH + couÁ + 1; 2071 `mem£t ( buf , 0, (buf)); 2073 `£t_com·ny_id ( pdu -> com·ny_id , IEEEID_BTSIG ); 2074 pdu -> pdu_id = AVRCP_GET_CURRENT_PLAYER_VALUE ; 2075 pdu -> ·ck‘_ty³ = AVRCP_PACKET_TYPE_SINGLE ; 2076 pdu -> ·¿ms_Ën = `htÚs ( couÁ + 1); 2077 pdu -> ·¿ms [0] = couÁ ; 2079 `memýy ( pdu -> ·¿ms + 1, ©Œs , couÁ ); 2081 `avùp_£nd_v’dÜd•_»q ( £ssiÚ -> cÚn , AVC_CTYPE_STATUS , 2082 AVC_SUBUNIT_PANEL , buf , Ëngth , 2083 avrý_¶ay”_v®ue_r¥ , £ssiÚ ); 2084 } } 2086  gboÞ—n $avrý_li¡_¶ay”_©Œibu‹s_r¥ ( avùp * cÚn , 2087 ušt8_t code , ušt8_ˆ subun™ , 2088 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 2089 * u£r_d©a ) 2091 ušt8_t ©Œs [ AVRCP_ATTRIBUTE_LAST ]; 2092  avrý * £ssiÚ = u£r_d©a ; 2093  avrý_h—d” * pdu = (*è Ý”ªds ; 2094 ušt8_t Ën , couÁ = 0; 2095  i ; 2097 ià( code =ð AVC_CTYPE_REJECTED ) 2098  FALSE ; 2100 Ën = pdu -> ·¿ms [0]; 2102 ià( `Áohs ( pdu -> ·¿ms_Ën è< couÁ ) { 2103 `”rÜ ("Invalid…arameters"); 2104  FALSE ; 2107  i = 0; Ën > 0;†en--, i++) { 2109 ià( pdu -> ·¿ms [ i + 1] =ð AVRCP_ATTRIBUTE_ILEGAL || 2110 pdu -> ·¿ms [ i + 1] > AVRCP_ATTRIBUTE_LAST ) 2113 ©Œs [ couÁ ++] = pdu -> ·¿ms [ i + 1]; 2116 `avrý_g‘_cu¼’t_¶ay”_v®ue ( £ssiÚ , ©Œs , couÁ ); 2118  FALSE ; 2119 } } 2121  $avrý_li¡_¶ay”_©Œibu‹s ( avrý * £ssiÚ ) 2123 ušt8_t buf [ AVRCP_HEADER_LENGTH ]; 2124  avrý_h—d” * pdu = (*è buf ; 2126 `mem£t ( buf , 0, (buf)); 2128 `£t_com·ny_id ( pdu -> com·ny_id , IEEEID_BTSIG ); 2129 pdu -> pdu_id = AVRCP_LIST_PLAYER_ATTRIBUTES ; 2130 pdu -> ·ck‘_ty³ = AVRCP_PACKET_TYPE_SINGLE ; 2132 `avùp_£nd_v’dÜd•_»q ( £ssiÚ -> cÚn , AVC_CTYPE_STATUS , 2133 AVC_SUBUNIT_PANEL , buf , (buf), 2134 avrý_li¡_¶ay”_©Œibu‹s_r¥ , 2135 £ssiÚ ); 2136 } } 2138  $avrý_·r£_©Œibu‹_li¡ ( avrý_¶ay” * ¶ay” , 2139 ušt8_t * Ý”ªds , ušt8_ˆ couÁ ) 2141  medŸ_¶ay” * mp = ¶ay” -> u£r_d©a ; 2142  medŸ_™em * ™em ; 2143  i ; 2145 ™em = `medŸ_¶ay”_£t_¶ayli¡_™em ( mp , ¶ay” -> uid ); 2147  i = 0; couÁ > 0; count--) { 2148 ušt32_t id ; 2149 ušt16_t ch¬£t , Ën ; 2151 id = `g‘_be32 (& Ý”ªds [ i ]); 2152 i +ð( ušt32_t ); 2154 ch¬£t = `g‘_be16 (& Ý”ªds [ i ]); 2155 i +ð( ušt16_t ); 2157 Ën = `g‘_be16 (& Ý”ªds [ i ]); 2158 i +ð( ušt16_t ); 2160 ià( ch¬£t == 106) { 2161 cÚ¡ * key = `m‘ad©a_to_¡r ( id ); 2163 ià( key !ð NULL ) 2164 `medŸ_¶ay”_£t_m‘ad©a ( mp , ™em , 2165 `m‘ad©a_to_¡r ( id ), 2166 & Ý”ªds [ i ], Ën ); 2169 i +ð Ën ; 2171 } } 2173  gboÞ—n $avrý_g‘_–em’t_©Œibu‹s_r¥ ( avùp * cÚn , 2174 ušt8_t code , ušt8_ˆ subun™ , 2175 ušt8_t * Ý”ªds , 2176 size_t Ý”ªd_couÁ , 2177 * u£r_d©a ) 2179  avrý * £ssiÚ = u£r_d©a ; 2180  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 2181  avrý_h—d” * pdu = (*è Ý”ªds ; 2182 ušt8_t couÁ ; 2184 ià( code =ð AVC_CTYPE_REJECTED ) 2185  FALSE ; 2187 couÁ = pdu -> ·¿ms [0]; 2189 ià( `Áohs ( pdu -> ·¿ms_Ën è- 1 < couÁ * 8) { 2190 `”rÜ ("Invalid…arameters"); 2191  FALSE ; 2194 `avrý_·r£_©Œibu‹_li¡ ( ¶ay” , & pdu -> ·¿ms [1], couÁ ); 2196 `avrý_g‘_¶ay_¡©us ( £ssiÚ ); 2198  FALSE ; 2199 } } 2201  $avrý_g‘_–em’t_©Œibu‹s ( avrý * £ssiÚ ) 2203 ušt8_t buf [ AVRCP_HEADER_LENGTH + 9]; 2204  avrý_h—d” * pdu = (*è buf ; 2205 ušt16_t Ëngth ; 2207 `mem£t ( buf , 0, (buf)); 2209 `£t_com·ny_id ( pdu -> com·ny_id , IEEEID_BTSIG ); 2210 pdu -> pdu_id = AVRCP_GET_ELEMENT_ATTRIBUTES ; 2211 pdu -> ·¿ms_Ën = `htÚs (9); 2212 pdu -> ·ck‘_ty³ = AVRCP_PACKET_TYPE_SINGLE ; 2214 Ëngth = AVRCP_HEADER_LENGTH + `Áohs ( pdu -> ·¿ms_Ën ); 2216 `avùp_£nd_v’dÜd•_»q ( £ssiÚ -> cÚn , AVC_CTYPE_STATUS , 2217 AVC_SUBUNIT_PANEL , buf , Ëngth , 2218 avrý_g‘_–em’t_©Œibu‹s_r¥ , 2219 £ssiÚ ); 2220 } } 2222 cÚ¡ * $ty³_to_¡ršg ( ušt8_t ty³ ) 2224  ty³ & 0x0F) { 2258 } } 2260 cÚ¡ * $subty³_to_¡ršg ( ušt32_t subty³ ) 2262  subty³ & 0x03) { 2272 } } 2274  medŸ_™em * $·r£_medŸ_–em’t ( avrý * £ssiÚ , 2275 ušt8_t * Ý”ªds , ušt16_t Ën ) 2277  avrý_¶ay” * ¶ay” ; 2278  medŸ_¶ay” * mp ; 2279  medŸ_™em * ™em ; 2280 ušt16_t Çm–’ ; 2281  Çme [255]; 2282 ušt64_t uid ; 2284 ià( Ën < 13) 2285  NULL ; 2287 uid = `g‘_be64 (& Ý”ªds [0]); 2289 Çm–’ = `MIN ( `g‘_be16 (& Ý”ªds [11]), ( Çme ) - 1); 2290 ià( Çm–’ > 0) { 2291 `memýy ( Çme , & Ý”ªds [13], Çm–’ ); 2292 Çme [ Çm–’ ] = '\0'; 2295 ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 2296 mp = ¶ay” -> u£r_d©a ; 2298 ™em = `medŸ_¶ay”_ü—‹_™em ( mp , Çme , PLAYER_ITEM_TYPE_AUDIO , uid ); 2299 ià( ™em =ð NULL ) 2300  NULL ; 2302 `medŸ_™em_£t_¶ayabË ( ™em , Œue ); 2304  ™em ; 2305 } } 2307  medŸ_™em * $·r£_medŸ_fÞd” ( avrý * £ssiÚ , 2308 ušt8_t * Ý”ªds , ušt16_t Ën ) 2310  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 2311  medŸ_¶ay” * mp = ¶ay” -> u£r_d©a ; 2312  medŸ_™em * ™em ; 2313 ušt16_t Çm–’ ; 2314  Çme [255]; 2315 ušt64_t uid ; 2316 ušt8_t ty³ ; 2317 ušt8_t ¶ayabË ; 2319 ià( Ën < 12) 2320  NULL ; 2322 uid = `g‘_be64 (& Ý”ªds [0]); 2323 ty³ = Ý”ªds [8]; 2324 ¶ayabË = Ý”ªds [9]; 2326 Çm–’ = `MIN ( `g‘_be16 (& Ý”ªds [12]), ( Çme ) - 1); 2327 ià( Çm–’ > 0) { 2328 `memýy ( Çme , & Ý”ªds [14], Çm–’ ); 2329 Çme [ Çm–’ ] = '\0'; 2332 ™em = `medŸ_¶ay”_ü—‹_fÞd” ( mp , Çme , ty³ , uid ); 2333 ià(! ™em ) 2334  NULL ; 2336 `medŸ_™em_£t_¶ayabË ( ™em , ¶ayabË & 0x01); 2338  ™em ; 2339 } } 2341  avrý_li¡_™ems ( avrý * £ssiÚ , ušt32_t ¡¬t , 2342 ušt32_t ’d ); 2343  gboÞ—n $avrý_li¡_™ems_r¥ ( avùp * cÚn , ušt8_t * Ý”ªds , 2344 size_t Ý”ªd_couÁ , * u£r_d©a ) 2346  avrý_browsšg_h—d” * pdu = (*è Ý”ªds ; 2347  avrý * £ssiÚ = u£r_d©a ; 2348  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 2349  ³ndšg_li¡_™ems * p = ¶ay” ->p; 2350 ušt16_t couÁ ; 2351 ušt64_t ™ems ; 2352 size_t i ; 2353  ”r = 0; 2355 ià( pdu =ð NULL ) { 2356 ”r = - ETIMEDOUT ; 2357  dÚe ; 2365 ià( pdu -> ·¿ms [0] =ð AVRCP_STATUS_OUT_OF_BOUNDS ) 2366  dÚe ; 2368 ià( pdu -> ·¿ms [0] !ð AVRCP_STATUS_SUCCESS || Ý”ªd_couÁ < 5) { 2369 ”r = - EINVAL ; 2370  dÚe ; 2373 couÁ = `g‘_be16 (& Ý”ªds [6]); 2374 ià( couÁ == 0) 2375  dÚe ; 2377  i = 8; couÁ && i + 3 < Ý”ªd_couÁ ; count--) { 2378  medŸ_™em * ™em ; 2379 ušt8_t ty³ ; 2380 ušt16_t Ën ; 2382 ty³ = Ý”ªds [ i ++]; 2383 Ën = `g‘_be16 (& Ý”ªds [ i ]); 2384 i += 2; 2386 ià( ty³ != 0x03 &&ype != 0x02) { 2387 i +ð Ën ; 2391 ià( i + Ën > Ý”ªd_couÁ ) { 2392 `”rÜ ("Invalid item†ength"); 2396 ià( ty³ == 0x03) 2397 ™em = `·r£_medŸ_–em’t ( £ssiÚ , & Ý”ªds [ i ], Ën ); 2399 ™em = `·r£_medŸ_fÞd” ( £ssiÚ , & Ý”ªds [ i ], Ën ); 2401 ià( ™em ) { 2402 ià( `g_¦i¡_fšd ( p -> ™ems , ™em )) 2403  dÚe ; 2404 p -> ™ems = `g_¦i¡_­³nd Õ->™ems, ™em ); 2407 i +ð Ën ; 2410 ™ems = `g_¦i¡_Ëngth ( p ->items); 2412 `DBG ("¡¬ˆ%uƒnd %u i‹m %" PRIu64 "Ù® %" PRIu64 "", p -> ¡¬t , 2413 p -> ’d , ™ems ,…-> tÙ® ); 2415 ià( ™ems < p -> tÙ® ) { 2416 `avrý_li¡_™ems ( £ssiÚ , p -> ¡¬t + ™ems ,…-> ’d ); 2417  FALSE ; 2420 dÚe : 2421 `medŸ_¶ay”_li¡_com¶‘e ( ¶ay” -> u£r_d©a , p -> ™ems , ”r ); 2423 `g_¦i¡_ä“ ( p -> ™ems ); 2424 `g_ä“ ( p ); 2425 ¶ay” -> p = NULL ; 2427  FALSE ; 2428 } } 2430  $avrý_li¡_™ems ( avrý * £ssiÚ , ušt32_t ¡¬t , 2431 ušt32_t ’d ) 2433 ušt8_t buf [ AVRCP_BROWSING_HEADER_LENGTH + 10 + 2434 AVRCP_MEDIA_ATTRIBUTE_LAST * ( ušt32_t )]; 2435  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 2436  avrý_browsšg_h—d” * pdu = (*è buf ; 2437 ušt16_t Ëngth = AVRCP_BROWSING_HEADER_LENGTH + 10; 2438 ušt32_t ©Œibu‹ ; 2440 `mem£t ( buf , 0, (buf)); 2442 pdu -> pdu_id = AVRCP_GET_FOLDER_ITEMS ; 2443 pdu -> ·¿m_Ën = `htÚs (10 + ( ušt32_t )); 2445 pdu -> ·¿ms [0] = ¶ay” -> scÝe ; 2447 `put_be32 ( ¡¬t , & pdu -> ·¿ms [1]); 2448 `put_be32 ( ’d , & pdu -> ·¿ms [5]); 2450 pdu -> ·¿ms [9] = 1; 2454 ©Œibu‹ = `htÚl ( AVRCP_MEDIA_ATTRIBUTE_TITLE ); 2455 `memýy (& pdu -> ·¿ms [10], & ©Œibu‹ , ( ušt32_t )); 2457 Ëngth +ð( ušt32_t ); 2459 `avùp_£nd_browsšg_»q ( £ssiÚ -> cÚn , buf , Ëngth , 2460 avrý_li¡_™ems_r¥ , £ssiÚ ); 2461 } } 2463  gboÞ—n $avrý_chªge_·th_r¥ ( avùp * cÚn , 2464 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 2465 * u£r_d©a ) 2467  avrý_browsšg_h—d” * pdu = (*è Ý”ªds ; 2468  avrý * £ssiÚ = u£r_d©a ; 2469  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 2470  medŸ_¶ay” * mp = ¶ay” -> u£r_d©a ; 2471  »t ; 2473 ià( pdu =ð NULL ) { 2474 »t = - ETIMEDOUT ; 2475  dÚe ; 2478 ià( pdu -> ·¿ms [0] !ð AVRCP_STATUS_SUCCESS ) { 2479 »t = - EINVAL ; 2480  dÚe ; 2483 »t = `g‘_be32 (& pdu -> ·¿ms [1]); 2485 dÚe : 2486 ià( »t < 0) { 2487 `g_ä“ ( ¶ay” -> chªge_·th ); 2488 ¶ay” -> chªge_·th = NULL ; 2490 `g_ä“ ( ¶ay” -> ·th ); 2491 ¶ay” -> ·th =…Ïy”-> chªge_·th ; 2492 ¶ay” -> chªge_·th = NULL ; 2495 `medŸ_¶ay”_chªge_fÞd”_com¶‘e ( mp , ¶ay” -> ·th , »t ); 2497  FALSE ; 2498 } } 2500  gboÞ—n $avrý_£t_brow£d_¶ay”_r¥ ( avùp * cÚn , 2501 ušt8_t * Ý”ªds , 2502 size_t Ý”ªd_couÁ , 2503 * u£r_d©a ) 2505  avrý * £ssiÚ = u£r_d©a ; 2506  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 2507  medŸ_¶ay” * mp = ¶ay” -> u£r_d©a ; 2508  avrý_browsšg_h—d” * pdu = (*è Ý”ªds ; 2509 ušt32_t ™ems ; 2510 ** fÞd”s ; 2511 ušt8_t d•th , couÁ ; 2512 size_t i ; 2514 ià( pdu =ð NULL ||…du-> ·¿ms [0] !ð AVRCP_STATUS_SUCCESS || 2515 Ý”ªd_couÁ < 13) 2516  FALSE ; 2518 ¶ay” -> uid_couÁ” = `g‘_be16 (& pdu -> ·¿ms [1]); 2519 ¶ay” -> brow£d = Œue ; 2521 ™ems = `g‘_be32 (& pdu -> ·¿ms [3]); 2523 d•th = pdu -> ·¿ms [9]; 2525 fÞd”s = `g_Ãw0 (*, d•th + 2); 2526 fÞd”s [0] = `g_¡rdup ("/Filesystem"); 2528  i = 10, couÁ = 1; couÁ - 1 < d•th && i < Ý”ªd_couÁ ; 2529 couÁ ++) { 2530 ušt8_t Ën ; 2532 Ën = pdu -> ·¿ms [ i ++]; 2534 ià( i + Ën > Ý”ªd_couÁ ||†en == 0) { 2535 `”rÜ ("Invalid folder†ength"); 2539 fÞd”s [ couÁ ] = `g_memdup (& pdu -> ·¿ms [ i ], Ën ); 2540 i +ð Ën ; 2543 ¶ay” -> ·th = `g_bužd_·thv ("/", fÞd”s ); 2544 `g_¡rä“v ( fÞd”s ); 2546 `medŸ_¶ay”_£t_fÞd” ( mp , ¶ay” -> ·th , ™ems ); 2548  FALSE ; 2549 } } 2551  $avrý_£t_brow£d_¶ay” ( avrý * £ssiÚ , 2552  avrý_¶ay” * ¶ay” ) 2554 ušt8_t buf [ AVRCP_BROWSING_HEADER_LENGTH + 2]; 2555  avrý_browsšg_h—d” * pdu = (*è buf ; 2556 ušt16_t id ; 2558 `mem£t ( buf , 0, (buf)); 2560 pdu -> pdu_id = AVRCP_SET_BROWSED_PLAYER ; 2561 id = `htÚs ( ¶ay” ->id); 2562 `memýy ( pdu -> ·¿ms , & id , 2); 2563 pdu -> ·¿m_Ën = `htÚs (2); 2565 `avùp_£nd_browsšg_»q ( £ssiÚ -> cÚn , buf , (buf), 2566 avrý_£t_brow£d_¶ay”_r¥ , £ssiÚ ); 2567 } } 2569  gboÞ—n $avrý_g‘_™em_©Œibu‹s_r¥ ( avùp * cÚn , 2570 ušt8_t * Ý”ªds , 2571 size_t Ý”ªd_couÁ , 2572 * u£r_d©a ) 2574  avrý * £ssiÚ = u£r_d©a ; 2575  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 2576  avrý_browsšg_h—d” * pdu = (*è Ý”ªds ; 2577 ušt8_t couÁ ; 2579 ià( pdu =ð NULL ) { 2580 `avrý_g‘_–em’t_©Œibu‹s ( £ssiÚ ); 2581  FALSE ; 2584 ià( pdu -> ·¿ms [0] !ð AVRCP_STATUS_SUCCESS || Ý”ªd_couÁ < 4) { 2585 `avrý_g‘_–em’t_©Œibu‹s ( £ssiÚ ); 2586  FALSE ; 2589 couÁ = pdu -> ·¿ms [1]; 2591 ià( `Áohs ( pdu -> ·¿m_Ën è- 1 < couÁ * 8) { 2592 `”rÜ ("Invalid…arameters"); 2593  FALSE ; 2596 `avrý_·r£_©Œibu‹_li¡ ( ¶ay” , & pdu -> ·¿ms [2], couÁ ); 2598 `avrý_g‘_¶ay_¡©us ( £ssiÚ ); 2600  FALSE ; 2601 } } 2603  $avrý_g‘_™em_©Œibu‹s ( avrý * £ssiÚ , ušt64_t uid ) 2605  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 2606 ušt8_t buf [ AVRCP_BROWSING_HEADER_LENGTH + 12]; 2607  avrý_browsšg_h—d” * pdu = (*è buf ; 2609 `mem£t ( buf , 0, (buf)); 2611 pdu -> pdu_id = AVRCP_GET_ITEM_ATTRIBUTES ; 2612 pdu -> ·¿ms [0] = 0x03; 2613 `put_be64 ( uid , & pdu -> ·¿ms [1]); 2614 `put_be16 ( ¶ay” -> uid_couÁ” , & pdu -> ·¿ms [9]); 2615 pdu -> ·¿m_Ën = `htÚs (12); 2617 `avùp_£nd_browsšg_»q ( £ssiÚ -> cÚn , buf , (buf), 2618 avrý_g‘_™em_©Œibu‹s_r¥ , £ssiÚ ); 2619 } } 2621  $avrý_¶ay”_·r£_ã©u»s ( avrý_¶ay” * ¶ay” , 2622 ušt8_t * ã©u»s ) 2624  medŸ_¶ay” * mp = ¶ay” -> u£r_d©a ; 2626 ¶ay” -> ã©u»s = `g_memdup (features, 16); 2628 ià( ã©u»s [7] & 0x08) { 2629 `medŸ_¶ay”_£t_brow§bË ( mp , Œue ); 2630 `medŸ_¶ay”_ü—‹_fÞd” ( mp , "/Filesystem", 2631 PLAYER_FOLDER_TYPE_MIXED , 0); 2634 ià( ã©u»s [7] & 0x10) 2635 `medŸ_¶ay”_£t_£¬chabË ( mp , Œue ); 2637 ià( ã©u»s [8] & 0x02) { 2638 `medŸ_¶ay”_ü—‹_fÞd” ( mp , "/NowPlaying", 2639 PLAYER_FOLDER_TYPE_MIXED , 0); 2640 `medŸ_¶ay”_£t_¶ayli¡ ( mp , "/NowPlaying"); 2642 } } 2644  $avrý_£t_¶ay”_v®ue ( avrý * £ssiÚ , ušt8_t ©Œ , 2645 ušt8_t v® ) 2647 ušt8_t buf [ AVRCP_HEADER_LENGTH + 3]; 2648  avrý_h—d” * pdu = (*è buf ; 2649 ušt8_t Ëngth ; 2651 `mem£t ( buf , 0, (buf)); 2653 `£t_com·ny_id ( pdu -> com·ny_id , IEEEID_BTSIG ); 2654 pdu -> pdu_id = AVRCP_SET_PLAYER_VALUE ; 2655 pdu -> ·ck‘_ty³ = AVRCP_PACKET_TYPE_SINGLE ; 2656 pdu -> ·¿ms [0] = 1; 2657 pdu -> ·¿ms [1] = ©Œ ; 2658 pdu -> ·¿ms [2] = v® ; 2659 pdu -> ·¿ms_Ën = `htÚs (3); 2661 Ëngth = AVRCP_HEADER_LENGTH + `Áohs ( pdu -> ·¿ms_Ën ); 2663 `avùp_£nd_v’dÜd•_»q ( £ssiÚ -> cÚn , AVC_CTYPE_CONTROL , 2664 AVC_SUBUNIT_PANEL , buf , Ëngth , 2665 avrý_¶ay”_v®ue_r¥ , £ssiÚ ); 2666 } } 2668  boÞ $ù_£t_£‰šg ( medŸ_¶ay” * mp , cÚ¡ * key , 2669 cÚ¡ * v®ue , * u£r_d©a ) 2671  avrý_¶ay” * ¶ay” = u£r_d©a ; 2672  ©Œ ; 2673  v® ; 2674  avrý * £ssiÚ ; 2676 £ssiÚ = ¶ay” -> £ssiÚs -> d©a ; 2677 ià( £ssiÚ =ð NULL ) 2678  çl£ ; 2680 ià( £ssiÚ -> cÚŒÞËr -> v”siÚ < 0x0103) 2681  çl£ ; 2683 ©Œ = `©Œ_to_v® ( key ); 2684 ià( ©Œ < 0) 2685  çl£ ; 2687 v® = `©Œv®_to_v® ( ©Œ , v®ue ); 2688 ià( v® < 0) 2689  çl£ ; 2691 `avrý_£t_¶ay”_v®ue ( £ssiÚ , ©Œ , v® ); 2693  Œue ; 2694 } } 2696  $ù_´ess ( avrý_¶ay” * ¶ay” , ušt8_t Ý ) 2698  ”r ; 2699  avrý * £ssiÚ ; 2701 £ssiÚ = ¶ay” -> £ssiÚs -> d©a ; 2702 ià( £ssiÚ =ð NULL ) 2703  - ENOTCONN ; 2705 ”r = `avùp_£nd_·s¡hrough ( £ssiÚ -> cÚn , Ý ); 2706 ià( ”r < 0) 2707  ”r ; 2710 } } 2712  $ù_¶ay ( medŸ_¶ay” * mp , * u£r_d©a ) 2714  avrý_¶ay” * ¶ay” = u£r_d©a ; 2716  `ù_´ess ( ¶ay” , AVC_PLAY ); 2717 } } 2719  $ù_·u£ ( medŸ_¶ay” * mp , * u£r_d©a ) 2721  avrý_¶ay” * ¶ay” = u£r_d©a ; 2723  `ù_´ess ( ¶ay” , AVC_PAUSE ); 2724 } } 2726  $ù_¡Ý ( medŸ_¶ay” * mp , * u£r_d©a ) 2728  avrý_¶ay” * ¶ay” = u£r_d©a ; 2730  `ù_´ess ( ¶ay” , AVC_STOP ); 2731 } } 2733  $ù_Ãxt ( medŸ_¶ay” * mp , * u£r_d©a ) 2735  avrý_¶ay” * ¶ay” = u£r_d©a ; 2737  `ù_´ess ( ¶ay” , AVC_FORWARD ); 2738 } } 2740  $ù_´evious ( medŸ_¶ay” * mp , * u£r_d©a ) 2742  avrý_¶ay” * ¶ay” = u£r_d©a ; 2744  `ù_´ess ( ¶ay” , AVC_BACKWARD ); 2745 } } 2747  $ù_ç¡_fÜw¬d ( medŸ_¶ay” * mp , * u£r_d©a ) 2749  avrý_¶ay” * ¶ay” = u£r_d©a ; 2751  `ù_´ess ( ¶ay” , AVC_FAST_FORWARD ); 2752 } } 2754  $ù_»wšd ( medŸ_¶ay” * mp , * u£r_d©a ) 2756  avrý_¶ay” * ¶ay” = u£r_d©a ; 2758  `ù_´ess ( ¶ay” , AVC_REWIND ); 2759 } } 2761  $ù_li¡_™ems ( medŸ_¶ay” * mp , cÚ¡ * Çme , 2762 ušt32_t ¡¬t , ušt32_ˆ ’d , * u£r_d©a ) 2764  avrý_¶ay” * ¶ay” = u£r_d©a ; 2765  avrý * £ssiÚ ; 2766  ³ndšg_li¡_™ems * p ; 2768 ià( ¶ay” -> p !ð NULL ) 2769  - EBUSY ; 2771 £ssiÚ = ¶ay” -> £ssiÚs -> d©a ; 2773 ià( `g_¡r_has_´efix ( Çme , "/NowPlaying")) 2774 ¶ay” -> scÝe = 0x03; 2775 ià( `g_¡r_has_suffix ( Çme , "/search")) 2776 ¶ay” -> scÝe = 0x02; 2778 ¶ay” -> scÝe = 0x01; 2780 `avrý_li¡_™ems ( £ssiÚ , ¡¬t , ’d ); 2782 p = `g_Ãw0 ( ³ndšg_li¡_™ems , 1); 2783 p -> ¡¬t = start; 2784 p -> ’d =ƒnd; 2785 p -> tÙ® = ( ušt64_t èÕ-> ’d -…-> ¡¬t ) + 1; 2786 ¶ay” -> p =…; 2789 } } 2791  $avrý_chªge_·th ( avrý * £ssiÚ , ušt8_t dœeùiÚ , 2792 ušt64_t uid ) 2794  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 2795 ušt8_t buf [ AVRCP_BROWSING_HEADER_LENGTH + 11]; 2796  avrý_browsšg_h—d” * pdu = (*è buf ; 2798 `mem£t ( buf , 0, (buf)); 2799 `put_be16 ( ¶ay” -> uid_couÁ” , & pdu -> ·¿ms [0]); 2800 pdu -> ·¿ms [2] = dœeùiÚ ; 2801 `put_be64 ( uid , & pdu -> ·¿ms [3]); 2802 pdu -> pdu_id = AVRCP_CHANGE_PATH ; 2803 pdu -> ·¿m_Ën = `htÚs (11); 2805 `avùp_£nd_browsšg_»q ( £ssiÚ -> cÚn , buf , (buf), 2806 avrý_chªge_·th_r¥ , £ssiÚ ); 2807 } } 2809  $ù_chªge_fÞd” ( medŸ_¶ay” * mp , cÚ¡ * ·th , 2810 ušt64_t uid , * u£r_d©a ) 2812  avrý_¶ay” * ¶ay” = u£r_d©a ; 2813  avrý * £ssiÚ ; 2814 ušt8_t dœeùiÚ ; 2816 £ssiÚ = ¶ay” -> £ssiÚs -> d©a ; 2817 ¶ay” -> chªge_·th = `g_¡rdup ( ·th ); 2819 dœeùiÚ = `g_¡r_has_´efix ( ·th , ¶ay” ->path) ? 0x01 : 0x00; 2821 `avrý_chªge_·th ( £ssiÚ , dœeùiÚ , uid ); 2824 } } 2826  gboÞ—n $avrý_£¬ch_r¥ ( avùp * cÚn , ušt8_t * Ý”ªds , 2827 size_t Ý”ªd_couÁ , * u£r_d©a ) 2829  avrý_browsšg_h—d” * pdu = (*è Ý”ªds ; 2830  avrý * £ssiÚ = (*è u£r_d©a ; 2831  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 2832  medŸ_¶ay” * mp = ¶ay” -> u£r_d©a ; 2833  »t ; 2835 ià( pdu =ð NULL ) { 2836 »t = - ETIMEDOUT ; 2837  dÚe ; 2840 ià( pdu -> ·¿ms [0] !ð AVRCP_STATUS_SUCCESS || Ý”ªd_couÁ < 7) { 2841 »t = - EINVAL ; 2842  dÚe ; 2845 ¶ay” -> uid_couÁ” = `g‘_be16 (& pdu -> ·¿ms [1]); 2846 »t = `g‘_be32 (& pdu -> ·¿ms [3]); 2848 dÚe : 2849 `medŸ_¶ay”_£¬ch_com¶‘e ( mp , »t ); 2851  FALSE ; 2852 } } 2854  $avrý_£¬ch ( avrý * £ssiÚ , cÚ¡ * ¡ršg ) 2856 ušt8_t buf [ AVRCP_BROWSING_HEADER_LENGTH + 255]; 2857  avrý_browsšg_h—d” * pdu = (*è buf ; 2858 ušt16_t Ën , ¡ršgËn ; 2860 `mem£t ( buf , 0, (buf)); 2861 Ën = AVRCP_BROWSING_HEADER_LENGTH + 4; 2862 ¡ršgËn = `¡ºËn ( ¡ršg , ( buf è- Ën ); 2863 Ën +ð ¡ršgËn ; 2865 `put_be16 ( AVRCP_CHARSET_UTF8 , & pdu -> ·¿ms [0]); 2866 `put_be16 ( ¡ršgËn , & pdu -> ·¿ms [2]); 2867 `memýy (& pdu -> ·¿ms [4], ¡ršg , ¡ršgËn ); 2868 pdu -> pdu_id = AVRCP_SEARCH ; 2869 pdu -> ·¿m_Ën = `htÚs ( Ën - AVRCP_BROWSING_HEADER_LENGTH ); 2871 `avùp_£nd_browsšg_»q ( £ssiÚ -> cÚn , buf , Ën , avrý_£¬ch_r¥ , 2872 £ssiÚ ); 2873 } } 2875  $ù_£¬ch ( medŸ_¶ay” * mp , cÚ¡ * ¡ršg , 2876 * u£r_d©a ) 2878  avrý_¶ay” * ¶ay” = u£r_d©a ; 2879  avrý * £ssiÚ ; 2881 £ssiÚ = ¶ay” -> £ssiÚs -> d©a ; 2883 `avrý_£¬ch ( £ssiÚ , ¡ršg ); 2886 } } 2888  $avrý_¶ay_™em ( avrý * £ssiÚ , ušt64_t uid ) 2890 ušt8_t buf [ AVRCP_HEADER_LENGTH + 11]; 2891  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 2892  avrý_h—d” * pdu = (*è buf ; 2893 ušt16_t Ëngth ; 2895 `mem£t ( buf , 0, (buf)); 2897 `£t_com·ny_id ( pdu -> com·ny_id , IEEEID_BTSIG ); 2898 pdu -> pdu_id = AVRCP_PLAY_ITEM ; 2899 pdu -> ·¿ms_Ën = `htÚs (11); 2900 pdu -> ·ck‘_ty³ = AVRCP_PACKET_TYPE_SINGLE ; 2902 pdu -> ·¿ms [0] = ¶ay” -> scÝe ; 2903 `put_be64 ( uid , & pdu -> ·¿ms [1]); 2904 `put_be16 ( ¶ay” -> uid_couÁ” , & pdu -> ·¿ms [9]); 2906 Ëngth = AVRCP_HEADER_LENGTH + `Áohs ( pdu -> ·¿ms_Ën ); 2908 `avùp_£nd_v’dÜd•_»q ( £ssiÚ -> cÚn , AVC_CTYPE_STATUS , 2909 AVC_SUBUNIT_PANEL , buf , Ëngth , 2910 NULL , £ssiÚ ); 2911 } } 2913  $ù_¶ay_™em ( medŸ_¶ay” * mp , cÚ¡ * Çme , 2914 ušt64_t uid , * u£r_d©a ) 2916  avrý_¶ay” * ¶ay” = u£r_d©a ; 2917  avrý * £ssiÚ ; 2919 ià( ¶ay” -> p !ð NULL ) 2920  - EBUSY ; 2922 £ssiÚ = ¶ay” -> £ssiÚs -> d©a ; 2924 ià( `g_¡¼¡r ( Çme , "/NowPlaying")) 2925 ¶ay” -> scÝe = 0x03; 2927 ¶ay” -> scÝe = 0x01; 2929 `avrý_¶ay_™em ( £ssiÚ , uid ); 2932 } } 2934  $avrý_add_to_now¶ayšg ( avrý * £ssiÚ , ušt64_t uid ) 2936 ušt8_t buf [ AVRCP_HEADER_LENGTH + 11]; 2937  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 2938  avrý_h—d” * pdu = (*è buf ; 2939 ušt16_t Ëngth ; 2941 `mem£t ( buf , 0, (buf)); 2943 `£t_com·ny_id ( pdu -> com·ny_id , IEEEID_BTSIG ); 2944 pdu -> pdu_id = AVRCP_ADD_TO_NOW_PLAYING ; 2945 pdu -> ·¿ms_Ën = `htÚs (11); 2946 pdu -> ·ck‘_ty³ = AVRCP_PACKET_TYPE_SINGLE ; 2948 pdu -> ·¿ms [0] = ¶ay” -> scÝe ; 2949 `put_be64 ( uid , & pdu -> ·¿ms [1]); 2950 `put_be16 ( ¶ay” -> uid_couÁ” , & pdu -> ·¿ms [9]); 2952 Ëngth = AVRCP_HEADER_LENGTH + `Áohs ( pdu -> ·¿ms_Ën ); 2954 `avùp_£nd_v’dÜd•_»q ( £ssiÚ -> cÚn , AVC_CTYPE_STATUS , 2955 AVC_SUBUNIT_PANEL , buf , Ëngth , 2956 NULL , £ssiÚ ); 2957 } } 2959  $ù_add_to_now¶ayšg ( medŸ_¶ay” * mp , cÚ¡ * Çme , 2960 ušt64_t uid , * u£r_d©a ) 2962  avrý_¶ay” * ¶ay” = u£r_d©a ; 2963  avrý * £ssiÚ ; 2965 ià( ¶ay” -> p !ð NULL ) 2966  - EBUSY ; 2968 £ssiÚ = ¶ay” -> £ssiÚs -> d©a ; 2970 ià( `g_¡¼¡r ( Çme , "/NowPlaying")) 2971 ¶ay” -> scÝe = 0x03; 2973 ¶ay” -> scÝe = 0x01; 2975 `avrý_add_to_now¶ayšg ( £ssiÚ , uid ); 2978 } } 2980 cÚ¡  medŸ_¶ay”_ÿÎback gù_cbs = { 2981 . £t_£‰šg = ù_£t_£‰šg , 2982 . g¶ay = ù_¶ay , 2983 . g·u£ = ù_·u£ , 2984 . g¡Ý = ù_¡Ý , 2985 . gÃxt = ù_Ãxt , 2986 . g´evious = ù_´evious , 2987 . gç¡_fÜw¬d = ù_ç¡_fÜw¬d , 2988 . g»wšd = ù_»wšd , 2989 . gli¡_™ems = ù_li¡_™ems , 2990 . gchªge_fÞd” = ù_chªge_fÞd” , 2991 . g£¬ch = ù_£¬ch , 2992 . g¶ay_™em = ù_¶ay_™em , 2993 . gadd_to_now¶ayšg = ù_add_to_now¶ayšg , 2996  avrý_¶ay” * $ü—‹_ù_¶ay” ( avrý * £ssiÚ , 2997 ušt16_t id ) 2999  avrý_¶ay” * ¶ay” ; 3000  medŸ_¶ay” * mp ; 3001 cÚ¡ * ·th ; 3003 ¶ay” = `g_Ãw0 ( avrý_¶ay” , 1); 3004 ¶ay” -> £ssiÚs = `g_¦i¡_´•’d ÕÏy”->£ssiÚs, £ssiÚ ); 3006 ·th = `deviû_g‘_·th ( £ssiÚ -> dev ); 3008 mp = `medŸ_¶ay”_cÚŒÞËr_ü—‹ ( ·th , id ); 3009 ià( mp =ð NULL ) 3010  NULL ; 3012 `medŸ_¶ay”_£t_ÿÎbacks ( mp , & ù_cbs , ¶ay” ); 3013 ¶ay” -> u£r_d©a = mp ; 3014 ¶ay” -> de¡roy = ( GDe¡royNÙify è medŸ_¶ay”_de¡roy ; 3016 ià( £ssiÚ -> cÚŒÞËr -> ¶ay” =ð NULL ) 3017 £ssiÚ -> cÚŒÞËr -> ¶ay” =…layer; 3019 £ssiÚ -> cÚŒÞËr -> ¶ay”s = `g_¦i¡_´•’d ( 3020 £ssiÚ -> cÚŒÞËr -> ¶ay”s , 3021 ¶ay” ); 3023  ¶ay” ; 3024 } } 3026  avrý_¶ay” * $fšd_ù_¶ay” ( avrý * £ssiÚ , ušt16_t id ) 3028 GSLi¡ * l ; 3030  l = £ssiÚ -> cÚŒÞËr -> ¶ay”s ;†;† =†-> Ãxt ) { 3031  avrý_¶ay” * ¶ay” = l -> d©a ; 3033 ià( ¶ay” -> id == 0) { 3034 ¶ay” -> id = id; 3035  ¶ay” ; 3038 ià( ¶ay” -> id == id) 3039  ¶ay” ; 3042  NULL ; 3043 } } 3045  avrý_¶ay” * 3046 $avrý_·r£_medŸ_¶ay”_™em ( avrý * £ssiÚ , ušt8_t * Ý”ªds , 3047 ušt16_t Ën ) 3049  avrý_¶ay” * ¶ay” ; 3050  medŸ_¶ay” * mp ; 3051 ušt16_t id , Çm–’ ; 3052 ušt32_t subty³ ; 3053 cÚ¡ * curv® , * ¡rv® ; 3054  Çme [255]; 3056 ià( Ën < 28) 3057  NULL ; 3059 id = `g‘_be16 (& Ý”ªds [0]); 3061 ¶ay” = `fšd_ù_¶ay” ( £ssiÚ , id ); 3062 ià( ¶ay” =ð NULL ) { 3063 ¶ay” = `ü—‹_ù_¶ay” ( £ssiÚ , id ); 3064 ià( ¶ay” =ð NULL ) 3065  NULL ; 3066 } ià( ¶ay” -> ã©u»s !ð NULL ) 3067  ¶ay” ; 3069 mp = ¶ay” -> u£r_d©a ; 3071 `medŸ_¶ay”_£t_ty³ ( mp , `ty³_to_¡ršg ( Ý”ªds [2])); 3073 subty³ = `g‘_be32 (& Ý”ªds [3]); 3075 `medŸ_¶ay”_£t_subty³ ( mp , `subty³_to_¡ršg ( subty³ )); 3077 curv® = `medŸ_¶ay”_g‘_¡©us ( mp ); 3078 ¡rv® = `¡©us_to_¡ršg ( Ý”ªds [7]); 3080 ià( `g_¡rcmp0 ( curv® , ¡rv® ) != 0) { 3081 `medŸ_¶ay”_£t_¡©us ( mp , ¡rv® ); 3082 `avrý_g‘_¶ay_¡©us ( £ssiÚ ); 3085 `avrý_¶ay”_·r£_ã©u»s ( ¶ay” , & Ý”ªds [8]); 3087 Çm–’ = `g‘_be16 (& Ý”ªds [26]); 3088 ià( Çm–’ > 0 &&‚am–’ + 28 =ð Ën ) { 3089 Çm–’ = `MIN Òam–’, ( Çme ) - 1); 3090 `memýy ( Çme , & Ý”ªds [28], Çm–’ ); 3091 Çme [ Çm–’ ] = '\0'; 3092 `medŸ_¶ay”_£t_Çme ( mp , Çme ); 3095 ià( £ssiÚ -> cÚŒÞËr -> ¶ay” =ð¶ay” && !¶ay”-> brow£d ) 3096 `avrý_£t_brow£d_¶ay” ( £ssiÚ , ¶ay” ); 3098  ¶ay” ; 3099 } } 3101  $¶ay”_de¡roy ( gpoš‹r d©a ) 3103  avrý_¶ay” * ¶ay” = d©a ; 3105 ià( ¶ay” -> de¡roy ) 3106 ¶ay” -> `de¡roy ÕÏy”-> u£r_d©a ); 3108 #ifdeà __TIZEN_PATCH__ 3109 `avrý_¡Ý_pos™iÚ_tim” (); 3112 `g_¦i¡_ä“ ( ¶ay” -> £ssiÚs ); 3113 `g_ä“ ( ¶ay” -> ·th ); 3114 `g_ä“ ( ¶ay” -> chªge_·th ); 3115 `g_ä“ ( ¶ay” -> ã©u»s ); 3116 `g_ä“ ( ¶ay” ); 3117 } } 3119  $¶ay”_»move ( gpoš‹r d©a ) 3121  avrý_¶ay” * ¶ay” = d©a ; 3122 GSLi¡ * l ; 3124  l = ¶ay” -> £ssiÚs ;†;† =†-> Ãxt ) { 3125  avrý * £ssiÚ = l -> d©a ; 3127 £ssiÚ -> cÚŒÞËr -> ¶ay”s = `g_¦i¡_»move ( 3128 £ssiÚ -> cÚŒÞËr -> ¶ay”s , 3129 ¶ay” ); 3132 `¶ay”_de¡roy ( ¶ay” ); 3133 } } 3135  gboÞ—n $avrý_g‘_medŸ_¶ay”_li¡_r¥ ( avùp * cÚn , 3136 ušt8_t * Ý”ªds , 3137 size_t Ý”ªd_couÁ , 3138 * u£r_d©a ) 3140  avrý_browsšg_h—d” * pdu = (*è Ý”ªds ; 3141  avrý * £ssiÚ = u£r_d©a ; 3142 ušt16_t couÁ ; 3143 size_t i ; 3144 GSLi¡ * »moved ; 3146 ià( pdu =ð NULL ||…du-> ·¿ms [0] !ð AVRCP_STATUS_SUCCESS || 3147 Ý”ªd_couÁ < 5) 3148  FALSE ; 3150 »moved = `g_¦i¡_cÝy ( £ssiÚ -> cÚŒÞËr -> ¶ay”s ); 3151 couÁ = `g‘_be16 (& Ý”ªds [6]); 3153  i = 8; couÁ && i < Ý”ªd_couÁ ; count--) { 3154  avrý_¶ay” * ¶ay” ; 3155 ušt8_t ty³ ; 3156 ušt16_t Ën ; 3158 ty³ = Ý”ªds [ i ++]; 3159 Ën = `g‘_be16 (& Ý”ªds [ i ]); 3160 i += 2; 3162 ià( ty³ != 0x01) { 3163 i +ð Ën ; 3167 ià( i + Ën > Ý”ªd_couÁ ) { 3168 `”rÜ ("Invalid…layer item†ength"); 3169  FALSE ; 3172 ¶ay” = `avrý_·r£_medŸ_¶ay”_™em ( £ssiÚ , & Ý”ªds [ i ], 3173 Ën ); 3174 ià( ¶ay” ) 3175 »moved = `g_¦i¡_»move Ôemoved, ¶ay” ); 3177 i +ð Ën ; 3180 ià( `g_¦i¡_fšd ( »moved , £ssiÚ -> cÚŒÞËr -> ¶ay” )) 3181 £ssiÚ -> cÚŒÞËr -> ¶ay” = NULL ; 3183 `g_¦i¡_ä“_fuÎ ( »moved , ¶ay”_»move ); 3185  FALSE ; 3186 } } 3188  $avrý_g‘_medŸ_¶ay”_li¡ ( avrý * £ssiÚ ) 3190 ušt8_t buf [ AVRCP_BROWSING_HEADER_LENGTH + 10]; 3191  avrý_browsšg_h—d” * pdu = (*è buf ; 3193 `mem£t ( buf , 0, (buf)); 3195 pdu -> pdu_id = AVRCP_GET_FOLDER_ITEMS ; 3196 pdu -> ·¿m_Ën = `htÚs (10); 3198 `avùp_£nd_browsšg_»q ( £ssiÚ -> cÚn , buf , (buf), 3199 avrý_g‘_medŸ_¶ay”_li¡_r¥ , £ssiÚ ); 3200 } } 3202  $avrý_vÞume_chªged ( avrý * £ssiÚ , 3203  avrý_h—d” * pdu ) 3205  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 3206 ušt8_t vÞume ; 3208 ià(! ¶ay” ) 3211 vÞume = pdu -> ·¿ms [1] & 0x7F; 3213 ¶ay” -> cb -> `£t_vÞume ( vÞume , £ssiÚ -> dev ,…Ïy”-> u£r_d©a ); 3214 } } 3216  $avrý_¡©us_chªged ( avrý * £ssiÚ , 3217  avrý_h—d” * pdu ) 3219  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 3220  medŸ_¶ay” * mp = ¶ay” -> u£r_d©a ; 3221 ušt8_t v®ue ; 3222 cÚ¡ * curv® , * ¡rv® ; 3224 v®ue = pdu -> ·¿ms [1]; 3226 curv® = `medŸ_¶ay”_g‘_¡©us ( mp ); 3227 ¡rv® = `¡©us_to_¡ršg ( v®ue ); 3229 ià( `g_¡rcmp0 ( curv® , ¡rv® ) == 0) 3232 `medŸ_¶ay”_£t_¡©us ( mp , ¡rv® ); 3233 `avrý_g‘_¶ay_¡©us ( £ssiÚ ); 3234 } } 3236  $avrý_Œack_chªged ( avrý * £ssiÚ , 3237  avrý_h—d” * pdu ) 3239 ià( £ssiÚ -> browsšg_id ) { 3240  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 3241 ¶ay” -> uid = `g‘_be64 (& pdu -> ·¿ms [1]); 3242 `avrý_g‘_™em_©Œibu‹s ( £ssiÚ , ¶ay” -> uid ); 3244 `avrý_g‘_–em’t_©Œibu‹s ( £ssiÚ ); 3245 } } 3247  $avrý_£‰šg_chªged ( avrý * £ssiÚ , 3248  avrý_h—d” * pdu ) 3250  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 3251  medŸ_¶ay” * mp = ¶ay” -> u£r_d©a ; 3252 ušt8_t couÁ = pdu -> ·¿ms [1]; 3253  i ; 3255  i = 2; couÁ > 0; count--, i += 2) { 3256 cÚ¡ * key ; 3257 cÚ¡ * v®ue ; 3259 key = `©Œ_to_¡r ( pdu -> ·¿ms [ i ]); 3260 ià( key =ð NULL ) 3263 v®ue = `©Œv®_to_¡r ( pdu -> ·¿ms [ i ],…du->params[i + 1]); 3264 ià( v®ue =ð NULL ) 3267 `medŸ_¶ay”_£t_£‰šg ( mp , key , v®ue ); 3269 } } 3271  $avrý_avažabË_¶ay”s_chªged ( avrý * £ssiÚ , 3272  avrý_h—d” * pdu ) 3274 `avrý_g‘_medŸ_¶ay”_li¡ ( £ssiÚ ); 3275 } } 3277  $avrý_add»s£d_¶ay”_chªged ( avrý * £ssiÚ , 3278  avrý_h—d” * pdu ) 3280  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 3281 ušt16_t id = `g‘_be16 (& pdu -> ·¿ms [1]); 3283 ià( ¶ay” !ð NULL &&…Ïy”-> id == id) 3286 ¶ay” = `fšd_ù_¶ay” ( £ssiÚ , id ); 3287 ià( ¶ay” =ð NULL ) { 3288 ¶ay” = `ü—‹_ù_¶ay” ( £ssiÚ , id ); 3289 ià( ¶ay” =ð NULL ) 3293 ¶ay” -> uid_couÁ” = `g‘_be16 (& pdu -> ·¿ms [3]); 3294 £ssiÚ -> cÚŒÞËr -> ¶ay” =…layer; 3296 ià( ¶ay” -> ã©u»s !ð NULL ) 3299 `avrý_g‘_medŸ_¶ay”_li¡ ( £ssiÚ ); 3300 } } 3302  $avrý_uids_chªged ( avrý * £ssiÚ ,  avrý_h—d” * pdu ) 3304  avrý_¶ay” * ¶ay” = £ssiÚ -> cÚŒÞËr ->player; 3306 ¶ay” -> uid_couÁ” = `g‘_be16 (& pdu -> ·¿ms [1]); 3307 } } 3309  gboÞ—n $avrý_hªdË_ev’t ( avùp * cÚn , 3310 ušt8_t code , ušt8_ˆ subun™ , 3311 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 3312 * u£r_d©a ) 3314  avrý * £ssiÚ = u£r_d©a ; 3315  avrý_h—d” * pdu = (*è Ý”ªds ; 3316 ušt8_t ev’t ; 3318 ià(( code !ð AVC_CTYPE_INTERIM && cod!ð AVC_CTYPE_CHANGED ) || 3319 pdu =ð NULL ) 3320  FALSE ; 3322 ev’t = pdu -> ·¿ms [0]; 3324 ià( code =ð AVC_CTYPE_CHANGED ) { 3325 £ssiÚ -> »gi¡”ed_ev’ts ^ð(1 << ev’t ); 3326 `avrý_»gi¡”_nÙifiÿtiÚ ( £ssiÚ , ev’t ); 3327  FALSE ; 3330  ev’t ) { 3331  AVRCP_EVENT_VOLUME_CHANGED : 3332 `avrý_vÞume_chªged ( £ssiÚ , pdu ); 3334  AVRCP_EVENT_STATUS_CHANGED : 3335 `avrý_¡©us_chªged ( £ssiÚ , pdu ); 3337  AVRCP_EVENT_TRACK_CHANGED : 3338 `avrý_Œack_chªged ( £ssiÚ , pdu ); 3340  AVRCP_EVENT_SETTINGS_CHANGED : 3341 `avrý_£‰šg_chªged ( £ssiÚ , pdu ); 3343  AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED : 3344 `avrý_avažabË_¶ay”s_chªged ( £ssiÚ , pdu ); 3346  AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED : 3347 `avrý_add»s£d_¶ay”_chªged ( £ssiÚ , pdu ); 3349  AVRCP_EVENT_UIDS_CHANGED : 3350 `avrý_uids_chªged ( £ssiÚ , pdu ); 3354 £ssiÚ -> »gi¡”ed_ev’ts |ð(1 << ev’t ); 3356  TRUE ; 3357 } } 3359  $avrý_»gi¡”_nÙifiÿtiÚ ( avrý * £ssiÚ , ušt8_t ev’t ) 3361 ušt8_t buf [ AVRCP_HEADER_LENGTH + AVRCP_REGISTER_NOTIFICATION_PARAM_LENGTH ]; 3362  avrý_h—d” * pdu = (*è buf ; 3363 ušt8_t Ëngth ; 3365 `mem£t ( buf , 0, (buf)); 3367 `£t_com·ny_id ( pdu -> com·ny_id , IEEEID_BTSIG ); 3368 pdu -> pdu_id = AVRCP_REGISTER_NOTIFICATION ; 3369 pdu -> ·ck‘_ty³ = AVRCP_PACKET_TYPE_SINGLE ; 3370 pdu -> ·¿ms [0] = ev’t ; 3371 pdu -> ·¿ms_Ën = `htÚs ( AVRCP_REGISTER_NOTIFICATION_PARAM_LENGTH ); 3373 Ëngth = AVRCP_HEADER_LENGTH + `Áohs ( pdu -> ·¿ms_Ën ); 3375 `avùp_£nd_v’dÜd•_»q ( £ssiÚ -> cÚn , AVC_CTYPE_NOTIFY , 3376 AVC_SUBUNIT_PANEL , buf , Ëngth , 3377 avrý_hªdË_ev’t , £ssiÚ ); 3378 } } 3380  gboÞ—n $avrý_g‘_ÿ·bž™›s_»¥ ( avùp * cÚn , 3381 ušt8_t code , ušt8_ˆ subun™ , 3382 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 3383 * u£r_d©a ) 3385  avrý * £ssiÚ = u£r_d©a ; 3386  avrý_h—d” * pdu = (*è Ý”ªds ; 3387 ušt16_t ev’ts = 0; 3388 ušt8_t couÁ ; 3390 ià( code =ð AVC_CTYPE_REJECTED || cod=ð AVC_CTYPE_NOT_IMPLEMENTED || 3391 pdu =ð NULL ||…du-> ·¿ms [0] !ð CAP_EVENTS_SUPPORTED ) 3392  FALSE ; 3395 ià( £ssiÚ -> browsšg_tim” > 0) { 3396 `g_sourû_»move ( £ssiÚ -> browsšg_tim” ); 3397 £ssiÚ -> browsšg_tim” = 0; 3398 `avùp_cÚÃù_browsšg ( £ssiÚ -> cÚn ); 3401 couÁ = pdu -> ·¿ms [1]; 3403 ; couÁ > 0; count--) { 3404 ušt8_t ev’t = pdu -> ·¿ms [1 + couÁ ]; 3406 ev’ts |ð(1 << ev’t ); 3408  ev’t ) { 3409  AVRCP_EVENT_STATUS_CHANGED : 3410  AVRCP_EVENT_TRACK_CHANGED : 3411  AVRCP_EVENT_SETTINGS_CHANGED : 3412  AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED : 3413  AVRCP_EVENT_UIDS_CHANGED : 3414  AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED : 3415  AVRCP_EVENT_VOLUME_CHANGED : 3416 `avrý_»gi¡”_nÙifiÿtiÚ ( £ssiÚ , ev’t ); 3421 ià(!( ev’ts & (1 << AVRCP_EVENT_SETTINGS_CHANGED ))) 3422 `avrý_li¡_¶ay”_©Œibu‹s ( £ssiÚ ); 3424 ià(!( ev’ts & (1 << AVRCP_EVENT_STATUS_CHANGED ))) 3425 `avrý_g‘_¶ay_¡©us ( £ssiÚ ); 3427 ià(!( ev’ts & (1 << AVRCP_EVENT_STATUS_CHANGED ))) 3428 `avrý_g‘_–em’t_©Œibu‹s ( £ssiÚ ); 3430  FALSE ; 3431 } } 3433  $avrý_g‘_ÿ·bž™›s ( avrý * £ssiÚ ) 3435 ušt8_t buf [ AVRCP_HEADER_LENGTH + AVRCP_GET_CAPABILITIES_PARAM_LENGTH ]; 3436  avrý_h—d” * pdu = (*è buf ; 3437 ušt8_t Ëngth ; 3439 `mem£t ( buf , 0, (buf)); 3441 `£t_com·ny_id ( pdu -> com·ny_id , IEEEID_BTSIG ); 3442 pdu -> pdu_id = AVRCP_GET_CAPABILITIES ; 3443 pdu -> ·ck‘_ty³ = AVRCP_PACKET_TYPE_SINGLE ; 3444 pdu -> ·¿ms [0] = CAP_EVENTS_SUPPORTED ; 3445 pdu -> ·¿ms_Ën = `htÚs ( AVRCP_GET_CAPABILITIES_PARAM_LENGTH ); 3447 Ëngth = AVRCP_HEADER_LENGTH + `Áohs ( pdu -> ·¿ms_Ën ); 3449 `avùp_£nd_v’dÜd•_»q ( £ssiÚ -> cÚn , AVC_CTYPE_STATUS , 3450 AVC_SUBUNIT_PANEL , buf , Ëngth , 3451 avrý_g‘_ÿ·bž™›s_»¥ , 3452 £ssiÚ ); 3453 } } 3455  avrý * $fšd_£ssiÚ ( GSLi¡ * li¡ ,  btd_deviû * dev ) 3457 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 3458  avrý * £ssiÚ = li¡ -> d©a ; 3460 ià( £ssiÚ -> dev == dev) 3461  £ssiÚ ; 3464  NULL ; 3465 } } 3467  $de¡roy_browsšg (* d©a ) 3469  avrý * £ssiÚ = d©a ; 3471 £ssiÚ -> browsšg_id = 0; 3472 } } 3474  $£ssiÚ_š™_browsšg ( avrý * £ssiÚ ) 3476 ià( £ssiÚ -> browsšg_tim” > 0) { 3477 `g_sourû_»move ( £ssiÚ -> browsšg_tim” ); 3478 £ssiÚ -> browsšg_tim” = 0; 3481 £ssiÚ -> browsšg_id = `avùp_»gi¡”_browsšg_pdu_hªdËr ( 3482 £ssiÚ -> cÚn , 3483 hªdË_browsšg_pdu , 3484 £ssiÚ , 3485 de¡roy_browsšg ); 3486 } } 3488  avrý_d©a * $d©a_š™ ( avrý * £ssiÚ , cÚ¡ * uuid ) 3490  avrý_d©a * d©a ; 3491 cÚ¡ sdp_»cÜd_t * »c ; 3492 sdp_li¡_t * li¡ ; 3493 sdp_´ofže_desc_t * desc ; 3495 d©a = `g_Ãw0 ( avrý_d©a , 1); 3497 »c = `btd_deviû_g‘_»cÜd ( £ssiÚ -> dev , uuid ); 3498 ià( »c =ð NULL ) 3499  d©a ; 3501 ià( `sdp_g‘_´ofže_descs ( »c , & li¡ ) == 0) { 3502 desc = li¡ -> d©a ; 3503 d©a -> v”siÚ = desc ->version; 3506 `sdp_g‘_št_©Œ ( »c , SDP_ATTR_SUPPORTED_FEATURES , & d©a -> ã©u»s ); 3507 `sdp_li¡_ä“ ( li¡ , ä“ ); 3509  d©a ; 3510 } } 3512  gboÞ—n $cÚÃù_browsšg ( gpoš‹r u£r_d©a ) 3514  avrý * £ssiÚ = u£r_d©a ; 3516 £ssiÚ -> browsšg_tim” = 0; 3518 `avùp_cÚÃù_browsšg ( £ssiÚ -> cÚn ); 3520  FALSE ; 3521 } } 3523  $avrý_cÚÃù_browsšg ( avrý * £ssiÚ ) 3528 ià( `avùp_is_š™ŸtÜ ( £ssiÚ -> cÚn )) { 3529 `avùp_cÚÃù_browsšg ( £ssiÚ -> cÚn ); 3533 ià( £ssiÚ -> browsšg_tim” > 0) 3536 £ssiÚ -> browsšg_tim” = `g_timeout_add_£cÚds ( AVRCP_BROWSING_TIMEOUT , 3537 cÚÃù_browsšg , 3538 £ssiÚ ); 3539 } } 3541  $rg‘_š™ ( avrý * £ssiÚ ) 3543  avrý_£rv” * £rv” = £ssiÚ ->server; 3544  avrý_d©a * rg‘ ; 3545  avrý_¶ay” * ¶ay” ; 3546  btd_£rviû * £rviû ; 3548 ià( £ssiÚ -> rg‘ !ð NULL ) 3551 rg‘ = `d©a_š™ ( £ssiÚ , AVRCP_REMOTE_UUID ); 3552 £ssiÚ -> rg‘ =arget; 3554 `DBG ("%°v”siÚ 0x%04x", rg‘ ,¬g‘-> v”siÚ ); 3556 £rviû = `btd_deviû_g‘_£rviû ( £ssiÚ -> dev , AVRCP_REMOTE_UUID ); 3557 ià( £rviû !ð NULL ) 3558 `btd_£rviû_cÚÃùšg_com¶‘e ( £rviû , 0); 3560 ¶ay” = `g_¦i¡_Áh_d©a ( £rv” -> ¶ay”s , 0); 3561 ià( ¶ay” !ð NULL ) { 3562 rg‘ -> ¶ay” =…layer; 3563 ¶ay” -> £ssiÚs = `g_¦i¡_´•’d ÕÏy”->£ssiÚs, £ssiÚ ); 3566 £ssiÚ -> suµÜ‹d_ev’ts |ð(1 << AVRCP_EVENT_STATUS_CHANGED ) | 3567 (1 << AVRCP_EVENT_TRACK_CHANGED ) | 3568 #iâdeà __TIZEN_PATCH__ 3569 (1 << AVRCP_EVENT_TRACK_REACHED_START ) | 3570 (1 << AVRCP_EVENT_TRACK_REACHED_END ) | 3572 #ifdeà __TIZEN_PATCH__ 3573 (1 << AVRCP_EVENT_PLAYBACK_POS_CHANGED ) | 3575 (1 << AVRCP_EVENT_SETTINGS_CHANGED ); 3577 ià( rg‘ -> v”siÚ < 0x0104) 3580 #ifdeà __TIZEN_PATCH__ 3581 ià( ad­‹r_avrý_v” < 0x0104) 3586 ià( £ssiÚ -> cÚŒÞËr =ð NULL ) 3587 `avrý_g‘_ÿ·bž™›s ( £ssiÚ ); 3589 ià(!( rg‘ -> ã©u»s & AVRCP_FEATURE_BROWSING )) 3592 `avrý_cÚÃù_browsšg ( £ssiÚ ); 3593 } } 3595  $cÚŒÞËr_š™ ( avrý * £ssiÚ ) 3597  avrý_¶ay” * ¶ay” ; 3598  btd_£rviû * £rviû ; 3599  avrý_d©a * cÚŒÞËr ; 3601 ià( £ssiÚ -> cÚŒÞËr !ð NULL ) 3604 cÚŒÞËr = `d©a_š™ ( £ssiÚ , AVRCP_TARGET_UUID ); 3605 £ssiÚ -> cÚŒÞËr = controller; 3607 `DBG ("%°v”siÚ 0x%04x", cÚŒÞËr , cÚŒÞËr-> v”siÚ ); 3609 ià( cÚŒÞËr -> v”siÚ >= 0x0104) 3610 £ssiÚ -> suµÜ‹d_ev’ts |ð(1 << AVRCP_EVENT_VOLUME_CHANGED ); 3612 £rviû = `btd_deviû_g‘_£rviû ( £ssiÚ -> dev , AVRCP_TARGET_UUID ); 3613 ià( £rviû !ð NULL ) 3614 `btd_£rviû_cÚÃùšg_com¶‘e ( £rviû , 0); 3617 ià(!( cÚŒÞËr -> ã©u»s & AVRCP_FEATURE_CATEGORY_1 )) 3620 ¶ay” = `ü—‹_ù_¶ay” ( £ssiÚ , 0); 3621 ià( ¶ay” =ð NULL ) 3624 ià( cÚŒÞËr -> v”siÚ < 0x0103) 3627 `avrý_g‘_ÿ·bž™›s ( £ssiÚ ); 3629 ià( cÚŒÞËr -> v”siÚ < 0x0104) 3632 ià(!( cÚŒÞËr -> ã©u»s & AVRCP_FEATURE_BROWSING )) 3635 `avrý_cÚÃù_browsšg ( £ssiÚ ); 3636 } } 3638  $£ssiÚ_š™_cÚŒÞ ( avrý * £ssiÚ ) 3640 £ssiÚ -> ·s¡hrough_id = `avùp_»gi¡”_·s¡hrough_hªdËr ( 3641 £ssiÚ -> cÚn , 3642 hªdË_·s¡hrough , 3643 £ssiÚ ); 3644 £ssiÚ -> ·s¡hrough_hªdËrs =…assthrough_handlers; 3645 £ssiÚ -> cÚŒÞ_id = `avùp_»gi¡”_pdu_hªdËr (£ssiÚ-> cÚn , 3646 AVC_OP_VENDORDEP , 3647 hªdË_v’dÜd•_pdu , 3648 £ssiÚ ); 3649 £ssiÚ -> cÚŒÞ_hªdËrs = control_handlers; 3651 ià( `btd_deviû_g‘_£rviû ( £ssiÚ -> dev , AVRCP_TARGET_UUID è!ð NULL ) 3652 `cÚŒÞËr_š™ ( £ssiÚ ); 3653 ià( `btd_deviû_g‘_£rviû ( £ssiÚ -> dev , AVRCP_REMOTE_UUID è!ð NULL ) 3654 `rg‘_š™ ( £ssiÚ ); 3655 } } 3657  $cÚŒÞËr_de¡roy ( avrý * £ssiÚ ) 3659  avrý_d©a * cÚŒÞËr = £ssiÚ ->controller; 3660  btd_£rviû * £rviû ; 3662 `DBG ("%p", cÚŒÞËr ); 3664 `g_¦i¡_ä“_fuÎ ( cÚŒÞËr -> ¶ay”s , ¶ay”_de¡roy ); 3666 £rviû = `btd_deviû_g‘_£rviû ( £ssiÚ -> dev , AVRCP_TARGET_UUID ); 3668 ià( £ssiÚ -> cÚŒÞ_id == 0) 3669 `btd_£rviû_cÚÃùšg_com¶‘e ( £rviû , - EIO ); 3671 `btd_£rviû_discÚÃùšg_com¶‘e ( £rviû , 0); 3673 `g_ä“ ( cÚŒÞËr ); 3674 } } 3676  $rg‘_de¡roy ( avrý * £ssiÚ ) 3678  avrý_d©a * rg‘ = £ssiÚ ->target; 3679  avrý_¶ay” * ¶ay” = rg‘ ->player; 3680  btd_£rviû * £rviû ; 3682 `DBG ("%p", rg‘ ); 3684 ià( ¶ay” !ð NULL ) 3685 ¶ay” -> £ssiÚs = `g_¦i¡_»move ÕÏy”->£ssiÚs, £ssiÚ ); 3687 £rviû = `btd_deviû_g‘_£rviû ( £ssiÚ -> dev , AVRCP_REMOTE_UUID ); 3689 ià( £ssiÚ -> cÚŒÞ_id == 0) 3690 `btd_£rviû_cÚÃùšg_com¶‘e ( £rviû , - EIO ); 3692 `btd_£rviû_discÚÃùšg_com¶‘e ( £rviû , 0); 3694 `g_ä“ ( rg‘ ); 3695 } } 3697  $£ssiÚ_de¡roy ( avrý * £ssiÚ ) 3699  avrý_£rv” * £rv” = £ssiÚ ->server; 3701 £rv” -> £ssiÚs = `g_¦i¡_»move (£rv”->£ssiÚs, £ssiÚ ); 3703 `£ssiÚ_abÜt_³ndšg_pdu ( £ssiÚ ); 3705 ià( £ssiÚ -> browsšg_tim” > 0) 3706 `g_sourû_»move ( £ssiÚ -> browsšg_tim” ); 3708 ià( £ssiÚ -> cÚŒÞËr !ð NULL ) 3709 `cÚŒÞËr_de¡roy ( £ssiÚ ); 3711 ià( £ssiÚ -> rg‘ !ð NULL ) 3712 `rg‘_de¡roy ( £ssiÚ ); 3714 ià( £ssiÚ -> ·s¡hrough_id > 0) 3715 `avùp_uÄegi¡”_·s¡hrough_hªdËr ( £ssiÚ -> ·s¡hrough_id ); 3717 ià( £ssiÚ -> cÚŒÞ_id > 0) 3718 `avùp_uÄegi¡”_pdu_hªdËr ( £ssiÚ -> cÚŒÞ_id ); 3720 ià( £ssiÚ -> browsšg_id > 0) 3721 `avùp_uÄegi¡”_browsšg_pdu_hªdËr ( £ssiÚ -> browsšg_id ); 3723 `g_ä“ ( £ssiÚ ); 3724 } } 3726  avrý * $£ssiÚ_ü—‹ ( avrý_£rv” * £rv” , 3727  btd_deviû * deviû ) 3729  avrý * £ssiÚ ; 3731 £ssiÚ = `g_Ãw0 ( avrý , 1); 3732 £ssiÚ -> £rv” = server; 3733 £ssiÚ -> cÚn = `avùp_cÚÃù ( deviû ); 3734 £ssiÚ -> dev = deviû ; 3736 £rv” -> £ssiÚs = `g_¦i¡_­³nd (£rv”->£ssiÚs, £ssiÚ ); 3738  £ssiÚ ; 3739 } } 3741  $¡©e_chªged ( btd_deviû * deviû , avùp_¡©e_t Þd_¡©e , 3742 avùp_¡©e_t Ãw_¡©e , * u£r_d©a ) 3744  avrý_£rv” * £rv” ; 3745  avrý * £ssiÚ ; 3747 £rv” = `fšd_£rv” ( £rv”s , `deviû_g‘_ad­‹r ( deviû )); 3748 ià(! £rv” ) 3751 £ssiÚ = `fšd_£ssiÚ ( £rv” -> £ssiÚs , deviû ); 3753  Ãw_¡©e ) { 3754  AVCTP_STATE_DISCONNECTED : 3755 ià( £ssiÚ =ð NULL ) 3758 `£ssiÚ_de¡roy ( £ssiÚ ); 3761  AVCTP_STATE_CONNECTING : 3762 ià( £ssiÚ !ð NULL ) 3765 `£ssiÚ_ü—‹ ( £rv” , deviû ); 3768  AVCTP_STATE_CONNECTED : 3769 ià( £ssiÚ =ð NULL || sessiÚ-> cÚŒÞ_id > 0) 3772 `£ssiÚ_š™_cÚŒÞ ( £ssiÚ ); 3775  AVCTP_STATE_BROWSING_CONNECTED : 3776 ià( £ssiÚ =ð NULL || sessiÚ-> browsšg_id > 0) 3779 `£ssiÚ_š™_browsšg ( £ssiÚ ); 3782  AVCTP_STATE_BROWSING_CONNECTING : 3786 } } 3788  avrý_£rv” * $avrý_£rv”_»gi¡” ( btd_ad­‹r * ad­‹r ) 3790  avrý_£rv” * £rv” ; 3792 ià( `avùp_»gi¡” ( ad­‹r , TRUE ) < 0) 3793  NULL ; 3795 £rv” = `g_Ãw0 ( avrý_£rv” , 1); 3796 £rv” -> ad­‹r = `btd_ad­‹r_»f (adapter); 3798 £rv”s = `g_¦i¡_­³nd (£rv”s, £rv” ); 3800 ià(! avùp_id ) 3801 avùp_id = `avùp_add_¡©e_cb ( NULL , ¡©e_chªged , NULL); 3803  £rv” ; 3804 } } 3806  $avrý_£rv”_uÄegi¡” ( avrý_£rv” * £rv” ) 3808 `g_¦i¡_ä“_fuÎ ( £rv” -> £ssiÚs , g_ä“ ); 3809 `g_¦i¡_ä“_fuÎ ( £rv” -> ¶ay”s , ¶ay”_de¡roy ); 3811 £rv”s = `g_¦i¡_»move (£rv”s, £rv” ); 3813 `avùp_uÄegi¡” ( £rv” -> ad­‹r ); 3814 `btd_ad­‹r_uÄef ( £rv” -> ad­‹r ); 3815 `g_ä“ ( £rv” ); 3817 ià( £rv”s ) 3820 ià( avùp_id ) { 3821 `avùp_»move_¡©e_cb ( avùp_id ); 3822 avùp_id = 0; 3824 } } 3826  avrý_¶ay” * $avrý_»gi¡”_¶ay” ( btd_ad­‹r * ad­‹r , 3827  avrý_¶ay”_cb * cb , 3828 * u£r_d©a , 3829 GDe¡royNÙify de¡roy ) 3831  avrý_£rv” * £rv” ; 3832  avrý_¶ay” * ¶ay” ; 3833 GSLi¡ * l ; 3835 £rv” = `fšd_£rv” ( £rv”s , ad­‹r ); 3836 ià(! £rv” ) 3837  NULL ; 3839 ¶ay” = `g_Ãw0 ( avrý_¶ay” , 1); 3840 ¶ay” -> £rv” = server; 3841 ¶ay” -> cb = cb; 3842 ¶ay” -> u£r_d©a = user_data; 3843 ¶ay” -> de¡roy = destroy; 3845 £rv” -> ¶ay”s = `g_¦i¡_­³nd (£rv”->¶ay”s, ¶ay” ); 3848  l = £rv” -> £ssiÚs ;†;† =†-> Ãxt ) { 3849  avrý * £ssiÚ = l -> d©a ; 3850  avrý_d©a * rg‘ = £ssiÚ ->target; 3852 ià( rg‘ =ð NULL ) 3855 ià( rg‘ -> ¶ay” =ð NULL ) { 3856 rg‘ -> ¶ay” =…layer; 3857 ¶ay” -> £ssiÚs = `g_¦i¡_­³nd (player->sessions, 3858 £ssiÚ ); 3862  ¶ay” ; 3863 } } 3865  $avrý_uÄegi¡”_¶ay” ( avrý_¶ay” * ¶ay” ) 3867  avrý_£rv” * £rv” = ¶ay” ->server; 3868 GSLi¡ * l ; 3870 £rv” -> ¶ay”s = `g_¦i¡_»move (£rv”->¶ay”s, ¶ay” ); 3873  l = ¶ay” -> £ssiÚs ;†;† =†-> Ãxt ) { 3874  avrý * £ssiÚ = l -> d©a ; 3875  avrý_d©a * rg‘ = £ssiÚ ->target; 3877 ià( rg‘ =ð NULL ) 3880 ià( rg‘ -> ¶ay” ==…layer) 3881 rg‘ -> ¶ay” = `g_¦i¡_Áh_d©a ( £rv” -> ¶ay”s , 0); 3884 `¶ay”_de¡roy ( ¶ay” ); 3885 } } 3887  gboÞ—n $avrý_hªdË_£t_vÞume ( avùp * cÚn , 3888 ušt8_t code , ušt8_ˆ subun™ , 3889 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 3890 * u£r_d©a ) 3892  avrý * £ssiÚ = u£r_d©a ; 3893  avrý_¶ay” * ¶ay” = `rg‘_g‘_¶ay” ( £ssiÚ ); 3894  avrý_h—d” * pdu = (*è Ý”ªds ; 3895 ušt8_t vÞume ; 3897 ià( code =ð AVC_CTYPE_REJECTED || cod=ð AVC_CTYPE_NOT_IMPLEMENTED || 3898 pdu =ð NULL ) 3899  FALSE ; 3901 vÞume = pdu -> ·¿ms [0] & 0x7F; 3903 ià( ¶ay” !ð NULL ) 3904 ¶ay” -> cb -> `£t_vÞume ( vÞume , £ssiÚ -> dev ,…Ïy”-> u£r_d©a ); 3906  FALSE ; 3907 } } 3909  $avrý_£t_vÞume ( btd_deviû * dev , ušt8_t vÞume ) 3911  avrý_£rv” * £rv” ; 3912  avrý * £ssiÚ ; 3913 ušt8_t buf [ AVRCP_HEADER_LENGTH + 1]; 3914  avrý_h—d” * pdu = (*è buf ; 3916 £rv” = `fšd_£rv” ( £rv”s , `deviû_g‘_ad­‹r ( dev )); 3917 ià( £rv” =ð NULL ) 3918  - EINVAL ; 3920 £ssiÚ = `fšd_£ssiÚ ( £rv” -> £ssiÚs , dev ); 3921 ià( £ssiÚ =ð NULL || sessiÚ-> rg‘ == NULL) 3922  - ENOTCONN ; 3924 ià( £ssiÚ -> rg‘ -> v”siÚ < 0x0104) 3925  - ENOTSUP ; 3927 `mem£t ( buf , 0, (buf)); 3929 `£t_com·ny_id ( pdu -> com·ny_id , IEEEID_BTSIG ); 3931 `DBG ("vÞume=%u", vÞume ); 3933 pdu -> pdu_id = AVRCP_SET_ABSOLUTE_VOLUME ; 3934 pdu -> ·¿ms [0] = vÞume ; 3935 pdu -> ·¿ms_Ën = `htÚs (1); 3937  `avùp_£nd_v’dÜd•_»q ( £ssiÚ -> cÚn , 3938 AVC_CTYPE_CONTROL , AVC_SUBUNIT_PANEL , 3939 buf , (buf), 3940 avrý_hªdË_£t_vÞume , £ssiÚ ); 3941 } } 3943  $avrý_cÚÃù ( btd_£rviû * £rviû ) 3945  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 3946 cÚ¡ * ·th = `deviû_g‘_·th ( dev ); 3948 `DBG ("·th %s", ·th ); 3950  `cÚŒÞ_cÚÃù ( £rviû ); 3951 } } 3953  $avrý_discÚÃù ( btd_£rviû * £rviû ) 3955  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 3956 cÚ¡ * ·th = `deviû_g‘_·th ( dev ); 3958 `DBG ("·th %s", ·th ); 3960  `cÚŒÞ_discÚÃù ( £rviû ); 3961 } } 3963  $avrý_rg‘_´obe ( btd_£rviû * £rviû ) 3965  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 3967 `DBG ("·th %s", `deviû_g‘_·th ( dev )); 3969  `cÚŒÞ_š™_rg‘ ( £rviû ); 3970 } } 3972  $avrý_rg‘_»move ( btd_£rviû * £rviû ) 3974 `cÚŒÞ_uÄegi¡” ( £rviû ); 3975 } } 3977  $avrý_rg‘_£rv”_»move ( btd_´ofže * p , 3978  btd_ad­‹r * ad­‹r ) 3980  avrý_£rv” * £rv” ; 3982 `DBG ("·th %s", `ad­‹r_g‘_·th ( ad­‹r )); 3984 £rv” = `fšd_£rv” ( £rv”s , ad­‹r ); 3985 ià(! £rv” ) 3988 ià( £rv” -> tg_»cÜd_id != 0) { 3989 `ad­‹r_£rviû_»move ( ad­‹r , £rv” -> tg_»cÜd_id ); 3990 £rv” -> tg_»cÜd_id = 0; 3993 ià( £rv” -> ù_»cÜd_id == 0) 3994 `avrý_£rv”_uÄegi¡” ( £rv” ); 3995 } } 3997  $avrý_rg‘_£rv”_´obe ( btd_´ofže * p , 3998  btd_ad­‹r * ad­‹r ) 4000 sdp_»cÜd_t * »cÜd ; 4001  avrý_£rv” * £rv” ; 4003 `DBG ("·th %s", `ad­‹r_g‘_·th ( ad­‹r )); 4005 £rv” = `fšd_£rv” ( £rv”s , ad­‹r ); 4006 ià( £rv” !ð NULL ) 4007  dÚe ; 4009 £rv” = `avrý_£rv”_»gi¡” ( ad­‹r ); 4010 ià( £rv” =ð NULL ) 4011  - EPROTONOSUPPORT ; 4013 dÚe : 4014 »cÜd = `avrý_tg_»cÜd (); 4015 ià(! »cÜd ) { 4016 `”rÜ ("Unableo‡llocate‚ew service„ecord"); 4017 `avrý_rg‘_£rv”_»move ( p , ad­‹r ); 4021 ià( `ad­‹r_£rviû_add ( ad­‹r , »cÜd ) < 0) { 4022 `”rÜ ("Unableo„egister AVRCParget service„ecord"); 4023 `avrý_rg‘_£rv”_»move ( p , ad­‹r ); 4024 `sdp_»cÜd_ä“ ( »cÜd ); 4027 £rv” -> tg_»cÜd_id = »cÜd -> hªdË ; 4030 } } 4032  btd_´ofže gavrý_rg‘_´ofže = { 4033 . Çme = "audio-avrcp-target", 4035 . g»mÙe_uuid = AVRCP_TARGET_UUID , 4036 . gdeviû_´obe = avrý_rg‘_´obe , 4037 . gdeviû_»move = avrý_rg‘_»move , 4039 . gcÚÃù = avrý_cÚÃù , 4040 . gdiscÚÃù = avrý_discÚÃù , 4042 . gad­‹r_´obe = avrý_rg‘_£rv”_´obe , 4043 . gad­‹r_»move = avrý_rg‘_£rv”_»move , 4046  $avrý_cÚŒÞËr_´obe ( btd_£rviû * £rviû ) 4048  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 4050 `DBG ("·th %s", `deviû_g‘_·th ( dev )); 4052  `cÚŒÞ_š™_»mÙe ( £rviû ); 4053 } } 4055  $avrý_cÚŒÞËr_»move ( btd_£rviû * £rviû ) 4057 `cÚŒÞ_uÄegi¡” ( £rviû ); 4058 } } 4060  $avrý_cÚŒÞËr_£rv”_»move ( btd_´ofže * p , 4061  btd_ad­‹r * ad­‹r ) 4063  avrý_£rv” * £rv” ; 4065 `DBG ("·th %s", `ad­‹r_g‘_·th ( ad­‹r )); 4067 £rv” = `fšd_£rv” ( £rv”s , ad­‹r ); 4068 ià(! £rv” ) 4071 ià( £rv” -> ù_»cÜd_id != 0) { 4072 `ad­‹r_£rviû_»move ( ad­‹r , £rv” -> ù_»cÜd_id ); 4073 £rv” -> ù_»cÜd_id = 0; 4076 ià( £rv” -> tg_»cÜd_id == 0) 4077 `avrý_£rv”_uÄegi¡” ( £rv” ); 4078 } } 4080  $avrý_cÚŒÞËr_£rv”_´obe ( btd_´ofže * p , 4081  btd_ad­‹r * ad­‹r ) 4083 sdp_»cÜd_t * »cÜd ; 4084  avrý_£rv” * £rv” ; 4086 `DBG ("·th %s", `ad­‹r_g‘_·th ( ad­‹r )); 4088 £rv” = `fšd_£rv” ( £rv”s , ad­‹r ); 4089 ià( £rv” !ð NULL ) 4090  dÚe ; 4092 £rv” = `avrý_£rv”_»gi¡” ( ad­‹r ); 4093 ià( £rv” =ð NULL ) 4094  - EPROTONOSUPPORT ; 4096 dÚe : 4097 »cÜd = `avrý_ù_»cÜd (); 4098 ià(! »cÜd ) { 4099 `”rÜ ("Unableo‡llocate‚ew service„ecord"); 4100 `avrý_cÚŒÞËr_£rv”_»move ( p , ad­‹r ); 4104 ià( `ad­‹r_£rviû_add ( ad­‹r , »cÜd ) < 0) { 4105 `”rÜ ("Unableo„egister AVRCP service„ecord"); 4106 `avrý_cÚŒÞËr_£rv”_»move ( p , ad­‹r ); 4107 `sdp_»cÜd_ä“ ( »cÜd ); 4110 £rv” -> ù_»cÜd_id = »cÜd -> hªdË ; 4113 } } 4115  btd_´ofže gavrý_cÚŒÞËr_´ofže = { 4116 . Çme = "avrcp-controller", 4118 . g»mÙe_uuid = AVRCP_REMOTE_UUID , 4119 . gdeviû_´obe = avrý_cÚŒÞËr_´obe , 4120 . gdeviû_»move = avrý_cÚŒÞËr_»move , 4122 . gcÚÃù = avrý_cÚÃù , 4123 . gdiscÚÃù = avrý_discÚÃù , 4124 . gad­‹r_´obe = avrý_cÚŒÞËr_£rv”_´obe , 4125 . gad­‹r_»move = avrý_cÚŒÞËr_£rv”_»move , 4128  $avrý_š™ () 4130 `btd_´ofže_»gi¡” (& avrý_cÚŒÞËr_´ofže ); 4131 `btd_´ofže_»gi¡” (& avrý_rg‘_´ofže ); 4134 } } 4136  $avrý_ex™ () 4138 `btd_´ofže_uÄegi¡” (& avrý_cÚŒÞËr_´ofže ); 4139 `btd_´ofže_uÄegi¡” (& avrý_rg‘_´ofže ); 4140 } } 4142 BLUETOOTH_PLUGIN_DEFINE ( avrý , VERSION , BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 4143 avrý_š™ , avrý_ex™ ) @profiles/audio/avrcp.h 26  #AVRCP_ATTRIBUTE_ILEGAL 0x00 ) 27  #AVRCP_ATTRIBUTE_EQUALIZER 0x01 ) 28  #AVRCP_ATTRIBUTE_REPEAT_MODE 0x02 ) 29  #AVRCP_ATTRIBUTE_SHUFFLE 0x03 ) 30  #AVRCP_ATTRIBUTE_SCAN 0x04 ) 31  #AVRCP_ATTRIBUTE_LAST AVRCP_ATTRIBUTE_SCAN ) 34  #AVRCP_EQUALIZER_OFF 0x01 ) 35  #AVRCP_EQUALIZER_ON 0x02 ) 38  #AVRCP_REPEAT_MODE_OFF 0x01 ) 39  #AVRCP_REPEAT_MODE_SINGLE 0x02 ) 40  #AVRCP_REPEAT_MODE_ALL 0x03 ) 41  #AVRCP_REPEAT_MODE_GROUP 0x04 ) 44  #AVRCP_SHUFFLE_OFF 0x01 ) 45  #AVRCP_SHUFFLE_ALL 0x02 ) 46  #AVRCP_SHUFFLE_GROUP 0x03 ) 49  #AVRCP_SCAN_OFF 0x01 ) 50  #AVRCP_SCAN_ALL 0x02 ) 51  #AVRCP_SCAN_GROUP 0x03 ) 54  #AVRCP_MEDIA_ATTRIBUTE_ILLEGAL 0x00 ) 55  #AVRCP_MEDIA_ATTRIBUTE_TITLE 0x01 ) 56  #AVRCP_MEDIA_ATTRIBUTE_ARTIST 0x02 ) 57  #AVRCP_MEDIA_ATTRIBUTE_ALBUM 0x03 ) 58  #AVRCP_MEDIA_ATTRIBUTE_TRACK 0x04 ) 59  #AVRCP_MEDIA_ATTRIBUTE_N_TRACKS 0x05 ) 60  #AVRCP_MEDIA_ATTRIBUTE_GENRE 0x06 ) 61  #AVRCP_MEDIA_ATTRIBUTE_DURATION 0x07 ) 62  #AVRCP_MEDIA_ATTRIBUTE_LAST AVRCP_MEDIA_ATTRIBUTE_DURATION ) 65  #AVRCP_PLAY_STATUS_STOPPED 0x00 ) 66  #AVRCP_PLAY_STATUS_PLAYING 0x01 ) 67  #AVRCP_PLAY_STATUS_PAUSED 0x02 ) 68  #AVRCP_PLAY_STATUS_FWD_SEEK 0x03 ) 69  #AVRCP_PLAY_STATUS_REV_SEEK 0x04 ) 70  #AVRCP_PLAY_STATUS_ERROR 0xFF ) 73  #AVRCP_EVENT_STATUS_CHANGED 0x01 ) 74  #AVRCP_EVENT_TRACK_CHANGED 0x02 ) 75  #AVRCP_EVENT_TRACK_REACHED_END 0x03 ) 76  #AVRCP_EVENT_TRACK_REACHED_START 0x04 ) 77 #ifdeà __TIZEN_PATCH__ 78  #AVRCP_EVENT_PLAYBACK_POS_CHANGED 0x05 ) 80  #AVRCP_EVENT_SETTINGS_CHANGED 0x08 ) 81  #AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED 0x0a ) 82  #AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED 0x0b ) 83  #AVRCP_EVENT_UIDS_CHANGED 0x0c ) 84  #AVRCP_EVENT_VOLUME_CHANGED 0x0d ) 85  #AVRCP_EVENT_LAST AVRCP_EVENT_VOLUME_CHANGED ) 87  savrý_¶ay”_cb { 88 mGLi¡ *(* mli¡_£‰šgs è(* mu£r_d©a ); 89 cÚ¡ *(* mg‘_£‰šg è(cÚ¡ * mkey , * mu£r_d©a ); 90 (* m£t_£‰šg è(cÚ¡ * mkey , cÚ¡ * mv®ue , 91 * mu£r_d©a ); 92 ušt64_t (* g‘_uid è(* mu£r_d©a ); 93 cÚ¡ *(* mg‘_m‘ad©a è(cÚ¡ * mkey , * mu£r_d©a ); 94 mGLi¡ *(* mli¡_m‘ad©a è(* mu£r_d©a ); 95 cÚ¡ *(* mg‘_¡©us è(* mu£r_d©a ); 96 ušt32_t (* g‘_pos™iÚ è(* mu£r_d©a ); 97 ušt32_t (* g‘_du¿tiÚ è(* mu£r_d©a ); 98 (* m£t_vÞume è( ušt8_t mvÞume ,  btd_deviû * mdev , 99 * mu£r_d©a ); 100 boÞ (* ¶ay è(* mu£r_d©a ); 101 boÞ (* ¡Ý è(* mu£r_d©a ); 102 boÞ (* ·u£ è(* mu£r_d©a ); 103 boÞ (* Ãxt è(* mu£r_d©a ); 104 boÞ (* ´evious è(* mu£r_d©a ); 107  avrý_£t_vÞume ( btd_deviû * dev , ušt8_t vÞume ); 109  avrý_¶ay” * avrý_»gi¡”_¶ay” ( btd_ad­‹r * ad­‹r , 110  avrý_¶ay”_cb * cb , 111 * u£r_d©a , 112 GDe¡royNÙify de¡roy ); 113  avrý_uÄegi¡”_¶ay” ( avrý_¶ay” * ¶ay” ); 115  avrý_¶ay”_ev’t ( avrý_¶ay” * ¶ay” , ušt8_t id , 116 cÚ¡ * d©a ); 119 size_t avrý_hªdË_v’dÜ_»jeù ( ušt8_t * code , ušt8_ˆ* Ý”ªds ); 120 size_t avrý_browsšg_g’”®_»jeù ( ušt8_t * Ý”ªds ); @profiles/audio/control.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡dlib.h > 31  ~<¡dšt.h > 32  ~<”ºo.h > 33  ~ 34  ~ 35  ~ 36  ~ 37  ~ 38  ~ 40  ~ 41  ~ 42  ~ 44  ~ 45  ~ 46  ~ 48  ~"lib/uuid.h " 49  ~"¤c/ad­‹r.h " 50  ~"¤c/deviû.h " 51  ~"¤c/´ofže.h " 52  ~"¤c/£rviû.h " 54  ~"¤c/log.h " 55  ~"¤c/”rÜ.h " 56  ~"¤c/sdpd.h " 57  ~"¤c/uuid-h–³r.h " 58  ~"¤c/dbus-commÚ.h " 60  ~"avùp.h " 61  ~"cÚŒÞ.h " 63  GSLi¡ * gdeviûs = NULL ; 65  scÚŒÞ { 66  btd_deviû * mdev ; 67  avùp * m£ssiÚ ; 68  btd_£rviû * mrg‘ ; 69  btd_£rviû * m»mÙe ; 70  mavùp_id ; 73  $¡©e_chªged ( btd_deviû * dev , avùp_¡©e_t Þd_¡©e , 74 avùp_¡©e_t Ãw_¡©e , * u£r_d©a ) 76  cÚŒÞ *cÚŒÞ = u£r_d©a ; 77 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 78 cÚ¡ * ·th = `deviû_g‘_·th ( dev ); 80  Ãw_¡©e ) { 81  AVCTP_STATE_DISCONNECTED : 82 cÚŒÞ -> £ssiÚ = NULL ; 84 `g_dbus_em™_´Ý”ty_chªged ( cÚn , ·th , 85 AUDIO_CONTROL_INTERFACE , "Connected"); 88  AVCTP_STATE_CONNECTING : 89 ià( cÚŒÞ -> £ssiÚ ) 92 cÚŒÞ -> £ssiÚ = `avùp_g‘ ( dev ); 95  AVCTP_STATE_CONNECTED : 96 `g_dbus_em™_´Ý”ty_chªged ( cÚn , ·th , 97 AUDIO_CONTROL_INTERFACE , "Connected"); 99  AVCTP_STATE_BROWSING_CONNECTING : 100  AVCTP_STATE_BROWSING_CONNECTED : 104 } } 106  $cÚŒÞ_cÚÃù ( btd_£rviû * £rviû ) 108  cÚŒÞ *cÚŒÞ = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 110 ià( cÚŒÞ -> £ssiÚ ) 111  - EALREADY ; 113 cÚŒÞ -> £ssiÚ = `avùp_cÚÃù (cÚŒÞ-> dev ); 114 ià(! cÚŒÞ -> £ssiÚ ) 115  - EIO ; 118 } } 120  $cÚŒÞ_discÚÃù ( btd_£rviû * £rviû ) 122  cÚŒÞ *cÚŒÞ = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 124 ià(! cÚŒÞ -> £ssiÚ ) 125  - ENOTCONN ; 127 `avùp_discÚÃù ( cÚŒÞ -> £ssiÚ ); 130 } } 132  DBusMes§ge * $key_´es£d ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 133 ušt8_t Ý , * d©a ) 135  cÚŒÞ *cÚŒÞ = d©a ; 136  ”r ; 138 ià(! cÚŒÞ -> £ssiÚ ) 139  `btd_”rÜ_nÙ_cÚÃùed ( msg ); 141 ià(! cÚŒÞ -> rg‘ ) 142  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 144 ”r = `avùp_£nd_·s¡hrough ( cÚŒÞ -> £ssiÚ , Ý ); 145 ià( ”r < 0) 146  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 148  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 149 } } 151  DBusMes§ge * $cÚŒÞ_vÞume_up ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 152 * d©a ) 154  `key_´es£d ( cÚn , msg , AVC_VOLUME_UP , d©a ); 155 } } 157  DBusMes§ge * $cÚŒÞ_vÞume_down ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 158 * d©a ) 160  `key_´es£d ( cÚn , msg , AVC_VOLUME_DOWN , d©a ); 161 } } 163  DBusMes§ge * $cÚŒÞ_¶ay ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 164 * d©a ) 166  `key_´es£d ( cÚn , msg , AVC_PLAY , d©a ); 167 } } 169  DBusMes§ge * $cÚŒÞ_·u£ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 170 * d©a ) 172  `key_´es£d ( cÚn , msg , AVC_PAUSE , d©a ); 173 } } 175  DBusMes§ge * $cÚŒÞ_¡Ý ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 176 * d©a ) 178  `key_´es£d ( cÚn , msg , AVC_STOP , d©a ); 179 } } 181  DBusMes§ge * $cÚŒÞ_Ãxt ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 182 * d©a ) 184  `key_´es£d ( cÚn , msg , AVC_FORWARD , d©a ); 185 } } 187  DBusMes§ge * $cÚŒÞ_´evious ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 188 * d©a ) 190  `key_´es£d ( cÚn , msg , AVC_BACKWARD , d©a ); 191 } } 193  DBusMes§ge * $cÚŒÞ_ç¡_fÜw¬d ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 194 * d©a ) 196  `key_´es£d ( cÚn , msg , AVC_FAST_FORWARD , d©a ); 197 } } 199  DBusMes§ge * $cÚŒÞ_»wšd ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 200 * d©a ) 202  `key_´es£d ( cÚn , msg , AVC_REWIND , d©a ); 203 } } 205  gboÞ—n $cÚŒÞ_´Ý”ty_g‘_cÚÃùed ( 206 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 207 DBusMes§geI‹r * ™” , * d©a ) 209  cÚŒÞ *cÚŒÞ = d©a ; 210 dbus_boÞ_t v®ue = ( cÚŒÞ -> £ssiÚ !ð NULL ); 212 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v®ue ); 214  TRUE ; 215 } } 217 cÚ¡ GDBusM‘hodTabË gcÚŒÞ_m‘hods [] = { 218 { GDBUS_METHOD ("PÏy", NULL , NULL, cÚŒÞ_¶ay ) }, 219 { GDBUS_METHOD ("Pau£", NULL , NULL, cÚŒÞ_·u£ ) }, 220 { GDBUS_METHOD ("StÝ", NULL , NULL, cÚŒÞ_¡Ý ) }, 221 { GDBUS_METHOD ("Next", NULL , NULL, cÚŒÞ_Ãxt ) }, 222 { GDBUS_METHOD ("P»vious", NULL , NULL, cÚŒÞ_´evious ) }, 223 { GDBUS_METHOD ("VÞumeUp", NULL , NULL, cÚŒÞ_vÞume_up ) }, 224 { GDBUS_METHOD ("VÞumeDown", NULL , NULL, cÚŒÞ_vÞume_down ) }, 225 { GDBUS_METHOD ("Fa¡FÜw¬d", NULL , NULL, cÚŒÞ_ç¡_fÜw¬d ) }, 226 { GDBUS_METHOD ("Rewšd", NULL , NULL, cÚŒÞ_»wšd ) }, 230 cÚ¡ GDBusPrÝ”tyTabË gcÚŒÞ_´Ý”t›s [] = { 231 { "CÚÃùed", "b", cÚŒÞ_´Ý”ty_g‘_cÚÃùed }, 235  $·th_uÄegi¡” (* d©a ) 237  cÚŒÞ *cÚŒÞ = d©a ; 239 `DBG ("UÄegi¡”ed iÁ”çû % Ú…©h %s", AUDIO_CONTROL_INTERFACE , 240 `deviû_g‘_·th ( cÚŒÞ -> dev )); 242 ià( cÚŒÞ -> £ssiÚ ) 243 `avùp_discÚÃù ( cÚŒÞ -> £ssiÚ ); 245 `avùp_»move_¡©e_cb ( cÚŒÞ -> avùp_id ); 247 ià( cÚŒÞ -> rg‘ ) 248 `btd_£rviû_uÄef ( cÚŒÞ -> rg‘ ); 250 ià( cÚŒÞ -> »mÙe ) 251 `btd_£rviû_uÄef ( cÚŒÞ -> »mÙe ); 253 deviûs = `g_¦i¡_»move (deviûs, cÚŒÞ ); 254 `g_ä“ ( cÚŒÞ ); 255 } } 257  $cÚŒÞ_uÄegi¡” ( btd_£rviû * £rviû ) 259  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 261 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 262 `deviû_g‘_·th ( dev ), 263 AUDIO_CONTROL_INTERFACE ); 264 } } 266  cÚŒÞ * $fšd_cÚŒÞ ( btd_deviû * dev ) 268 GSLi¡ * l ; 270  l = deviûs ;†;† =†-> Ãxt ) { 271  cÚŒÞ *cÚŒÞ = l -> d©a ; 273 ià( cÚŒÞ -> dev == dev) 274  cÚŒÞ ; 277  NULL ; 278 } } 280  cÚŒÞ * $cÚŒÞ_š™ ( btd_£rviû * £rviû ) 282  cÚŒÞ *control; 283  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 285 cÚŒÞ = `fšd_cÚŒÞ ( dev ); 286 ià( cÚŒÞ !ð NULL ) 287  cÚŒÞ ; 289 cÚŒÞ = `g_Ãw0 (control, 1); 291 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 292 `deviû_g‘_·th ( dev ), 293 AUDIO_CONTROL_INTERFACE , 294 cÚŒÞ_m‘hods , NULL , 295 cÚŒÞ_´Ý”t›s , cÚŒÞ , 296 ·th_uÄegi¡” )) { 297 `g_ä“ ( cÚŒÞ ); 298  NULL ; 301 `DBG ("Regi¡”ed iÁ”çû % Ú…©h %s", AUDIO_CONTROL_INTERFACE , 302 `deviû_g‘_·th ( dev )); 304 cÚŒÞ -> dev = dev; 305 cÚŒÞ -> avùp_id = `avùp_add_¡©e_cb ( dev , ¡©e_chªged , control); 306 deviûs = `g_¦i¡_´•’d (deviûs, cÚŒÞ ); 308  cÚŒÞ ; 309 } } 311  $cÚŒÞ_š™_rg‘ ( btd_£rviû * £rviû ) 313  cÚŒÞ *control; 315 cÚŒÞ = `cÚŒÞ_š™ ( £rviû ); 316 ià( cÚŒÞ =ð NULL ) 317  - EINVAL ; 319 cÚŒÞ -> rg‘ = `btd_£rviû_»f ( £rviû ); 321 `btd_£rviû_£t_u£r_d©a ( £rviû , cÚŒÞ ); 324 } } 326  $cÚŒÞ_š™_»mÙe ( btd_£rviû * £rviû ) 328  cÚŒÞ *control; 330 cÚŒÞ = `cÚŒÞ_š™ ( £rviû ); 331 ià( cÚŒÞ =ð NULL ) 332  - EINVAL ; 334 cÚŒÞ -> »mÙe = `btd_£rviû_»f ( £rviû ); 336 `btd_£rviû_£t_u£r_d©a ( £rviû , cÚŒÞ ); 339 } } 341 gboÞ—n $cÚŒÞ_is_aùive ( btd_£rviû * £rviû ) 343  cÚŒÞ *cÚŒÞ = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 345 ià( cÚŒÞ && cÚŒÞ-> £ssiÚ ) 346  TRUE ; 348  FALSE ; 349 } } @profiles/audio/control.h 25  #AUDIO_CONTROL_INTERFACE "Üg.bluez.MedŸCÚŒÞ1" ) 27  gbtd_£rviû ; 29  cÚŒÞ_š™_rg‘ ( btd_£rviû * £rviû ); 30  cÚŒÞ_š™_»mÙe ( btd_£rviû * £rviû ); 31  cÚŒÞ_uÄegi¡” ( btd_£rviû * £rviû ); 32 gboÞ—n cÚŒÞ_is_aùive ( btd_£rviû * £rviû ); 34  cÚŒÞ_cÚÃù ( btd_£rviû * £rviû ); 35  cÚŒÞ_discÚÃù ( btd_£rviû * £rviû ); @profiles/audio/media.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<”ºo.h > 31  ~<š‰y³s.h > 33  ~ 34  ~ 36  ~"lib/uuid.h " 37  ~"¤c/¶ugš.h " 38  ~"¤c/ad­‹r.h " 39  ~"¤c/deviû.h " 40  ~"¤c/dbus-commÚ.h " 41  ~"¤c/´ofže.h " 43  ~"¤c/uuid-h–³r.h " 44  ~"¤c/log.h " 45  ~"¤c/”rÜ.h " 47  ~"avd.h " 48  ~"medŸ.h " 49  ~"Œª¥Üt.h " 50  ~"a2dp.h " 51  ~"avrý.h " 52 #ifdeà __TIZEN_PATCH__ 53  ~"sšk.h " 57  #MEDIA_INTERFACE "Üg.bluez.MedŸ1" ) 58  #MEDIA_ENDPOINT_INTERFACE "Üg.bluez.MedŸEndpošt1" ) 59  #MEDIA_PLAYER_INTERFACE "Üg.m´is.MedŸPÏy”2.PÏy”" ) 61  #REQUEST_TIMEOUT (3 * 1000è ) 63 #ifdeà __TIZEN_PATCH__ 64  #SINK_SUSPEND_TIMEOUT 4 ) 66  gsu¥’d_tim”_id = 0; 69  smedŸ_ad­‹r { 70  btd_ad­‹r * mbtd_ad­‹r ; 71 GSLi¡ * m’dpošts ; 72 GSLi¡ * m¶ay”s ; 75  s’dpošt_»que¡ { 76  medŸ_’dpošt * m’dpošt ; 77 DBusMes§ge * mmsg ; 78 DBusP’dšgC®l * mÿÎ ; 79 medŸ_’dpošt_cb_t mcb ; 80 GDe¡royNÙify mde¡roy ; 81 * mu£r_d©a ; 84  smedŸ_’dpošt { 85  a2dp_£p * m£p ; 86 * m£nd” ; 87 * m·th ; 88 * muuid ; 89 ušt8_t mcodec ; 90 ušt8_t * mÿ·bž™›s ; 91 size_t msize ; 92 gušt mhs_w©ch ; 93 gušt mag_w©ch ; 94 gušt mw©ch ; 95 GSLi¡ * m»que¡s ; 96  medŸ_ad­‹r * mad­‹r ; 97 GSLi¡ * mŒª¥Üts ; 100  smedŸ_¶ay” { 101  medŸ_ad­‹r * mad­‹r ; 102  avrý_¶ay” * m¶ay” ; 103 * m£nd” ; 104 * m·th ; 105 GHashTabË * m£‰šgs ; 106 GHashTabË * mŒack ; 107 gušt mw©ch ; 108 gušt m´Ý”t›s_w©ch ; 109 gušt m£ek_w©ch ; 110 #ifdeà __TIZEN_PATCH__ 111 gušt msšk_w©ch ; 113 * m¡©us ; 114 ušt32_t mpos™iÚ ; 115 ušt32_t mdu¿tiÚ ; 116 ušt8_t mvÞume ; 117 GTim” * mtim” ; 118 boÞ m¶ay ; 119 boÞ m·u£ ; 120 boÞ mÃxt ; 121 boÞ m´evious ; 122 boÞ mcÚŒÞ ; 125  GSLi¡ * gad­‹rs = NULL ; 127 #ifdeà __TIZEN_PATCH__ 128  gboÞ—n g£t_avrý_¡©us = FALSE ; 129  gboÞ—n g£nd_Œack_chªged_ev’t = FALSE ; 131  medŸ_£t_sšk_ÿÎback ( btd_deviû * deviû , 132  medŸ_¶ay” * mp ); 133  medŸ_sšk_¡©e_chªged_cb ( btd_£rviû * £rviû , 134 sšk_¡©e_t Þd_¡©e , 135 sšk_¡©e_t Ãw_¡©e , 136 * u£r_d©a ); 137  medŸ_¡Ý_su¥’d_tim” (); 138  medŸ_¶ay” * medŸ_ad­‹r_g‘_¶ay” ( medŸ_ad­‹r * ad­‹r ); 139  medŸ_ad­‹r * fšd_ad­‹r ( btd_deviû * deviû ); 140  ušt32_t g‘_pos™iÚ (* u£r_d©a ); 143  $’dpošt_»que¡_ä“ ( ’dpošt_»que¡ * »que¡ ) 145 ià( »que¡ -> ÿÎ ) 146 `dbus_³ndšg_ÿÎ_uÄef ( »que¡ -> ÿÎ ); 148 ià( »que¡ -> de¡roy ) 149 »que¡ -> `de¡roy Ôeque¡-> u£r_d©a ); 151 `dbus_mes§ge_uÄef ( »que¡ -> msg ); 152 `g_ä“ ( »que¡ ); 153 } } 155  $medŸ_’dpošt_ÿnûl ( ’dpošt_»que¡ * »que¡ ) 157  medŸ_’dpošt * ’dpošt = »que¡ ->endpoint; 159 ià( »que¡ -> ÿÎ ) 160 `dbus_³ndšg_ÿÎ_ÿnûl ( »que¡ -> ÿÎ ); 162 ’dpošt -> »que¡s = `g_¦i¡_»move Óndpošt->»que¡s, »que¡ ); 164 ià( »que¡ -> cb ) 165 »que¡ -> `cb ( ’dpošt , NULL , -1,„eque¡-> u£r_d©a ); 167 `’dpošt_»que¡_ä“ ( »que¡ ); 168 } } 170  $medŸ_’dpošt_ÿnûl_®l ( medŸ_’dpošt * ’dpošt ) 172  ’dpošt -> »que¡s !ð NULL ) 173 `medŸ_’dpošt_ÿnûl ( ’dpošt -> »que¡s -> d©a ); 174 } } 176  $medŸ_’dpošt_de¡roy ( medŸ_’dpošt * ’dpošt ) 178 `DBG ("£nd”=% ·th=%s", ’dpošt -> £nd” ,ƒndpošt-> ·th ); 180 `medŸ_’dpošt_ÿnûl_®l ( ’dpošt ); 182 `g_¦i¡_ä“_fuÎ ( ’dpošt -> Œª¥Üts , 183 ( GDe¡royNÙify è medŸ_Œª¥Üt_de¡roy ); 185 `g_dbus_»move_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), ’dpošt -> w©ch ); 186 `g_ä“ ( ’dpošt -> ÿ·bž™›s ); 187 `g_ä“ ( ’dpošt -> £nd” ); 188 `g_ä“ ( ’dpošt -> ·th ); 189 `g_ä“ ( ’dpošt -> uuid ); 190 `g_ä“ ( ’dpošt ); 191 } } 193  medŸ_’dpošt * $medŸ_ad­‹r_fšd_’dpošt ( 194  medŸ_ad­‹r * ad­‹r , 195 cÚ¡ * £nd” , 196 cÚ¡ * ·th , 197 cÚ¡ * uuid ) 199 GSLi¡ * l ; 201  l = ad­‹r -> ’dpošts ;†;† =†-> Ãxt ) { 202  medŸ_’dpošt * ’dpošt = l -> d©a ; 204 ià( £nd” && `g_¡rcmp0 ( ’dpošt ->sender, sender) != 0) 207 ià( ·th && `g_¡rcmp0 ( ’dpošt ->path,…ath) != 0) 210 ià( uuid && `¡rÿ£cmp ( ’dpošt ->uuid, uuid) != 0) 213  ’dpošt ; 216  NULL ; 217 } } 219  $medŸ_’dpošt_»move ( medŸ_’dpošt * ’dpošt ) 221  medŸ_ad­‹r * ad­‹r = ’dpošt ->adapter; 223 ià( ’dpošt -> £p ) { 224 `a2dp_»move_£p ( ’dpošt -> £p ); 228 `šfo ("EndpošˆuÄegi¡”ed: s’d”=% ·th=%s", ’dpošt -> £nd” , 229 ’dpošt -> ·th ); 231 ad­‹r -> ’dpošts = `g_¦i¡_»move ×d­‹r->’dpošts, ’dpošt ); 233 ià( `medŸ_ad­‹r_fšd_’dpošt ( ad­‹r , NULL , NULL, 234 ’dpošt -> uuid è=ð NULL ) 235 `btd_´ofže_»move_cu¡om_´Ý ( ’dpošt -> uuid , 238 `medŸ_’dpošt_de¡roy ( ’dpošt ); 239 } } 241  $medŸ_’dpošt_ex™ ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 243  medŸ_’dpošt * ’dpošt = u£r_d©a ; 245 ’dpošt -> w©ch = 0; 246 `medŸ_’dpošt_»move ( ’dpošt ); 247 } } 249  $þ—r_cÚfigu¿tiÚ ( medŸ_’dpošt * ’dpošt , 250  medŸ_Œª¥Üt * Œª¥Üt ) 252 DBusMes§ge * msg ; 253 cÚ¡ * ·th ; 254 #ifdeà __TIZEN_PATCH__ 255  medŸ_¶ay” * mp ; 258 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ’dpošt -> £nd” ,ƒndpošt-> ·th , 259 MEDIA_ENDPOINT_INTERFACE , 261 ià( msg =ð NULL ) { 262 `”rÜ ("Couldn't‡llocate D-Bus message"); 263  dÚe ; 266 ·th = `medŸ_Œª¥Üt_g‘_·th ( Œª¥Üt ); 267 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_OBJECT_PATH , & ·th , 268 DBUS_TYPE_INVALID ); 269 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), msg ); 270 dÚe : 271 ’dpošt -> Œª¥Üts = `g_¦i¡_»move Óndpošt->Œª¥Üts, Œª¥Üt ); 272 #ifdeà __TIZEN_PATCH__ 273 ià( mp = `medŸ_ad­‹r_g‘_¶ay” ( ’dpošt -> ad­‹r )) 274 ià( mp -> sšk_w©ch ) { 275 `sšk_»move_¡©e_cb ( mp -> sšk_w©ch ); 276 mp -> sšk_w©ch = 0; 278 `medŸ_¡Ý_su¥’d_tim” (); 280 `medŸ_Œª¥Üt_de¡roy ( Œª¥Üt ); 281 } } 283  $þ—r_’dpošt ( medŸ_’dpošt * ’dpošt ) 285 `medŸ_’dpošt_ÿnûl_®l ( ’dpošt ); 287  ’dpošt -> Œª¥Üts !ð NULL ) 288 `þ—r_cÚfigu¿tiÚ ( ’dpošt ,ƒndpošt-> Œª¥Üts -> d©a ); 289 } } 291  $’dpošt_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 293  ’dpošt_»que¡ * »que¡ = u£r_d©a ; 294  medŸ_’dpošt * ’dpošt = »que¡ ->endpoint; 295 DBusMes§ge * »¶y ; 296 DBusE¼Ü ”r ; 297 gboÞ—n v®ue ; 298 * »t = NULL ; 299  size = -1; 303 »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 305 `dbus_”rÜ_š™ (& ”r ); 306 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”r , »¶y )) { 307 `”rÜ ("Endpoint„eplied with‡nƒrror: %s", 308 ”r . Çme ); 311 ià( `dbus_”rÜ_has_Çme (& ”r , DBUS_ERROR_NO_REPLY )) { 312 ià( »que¡ -> cb ) 313 »que¡ -> `cb ( ’dpošt , NULL , size , 314 »que¡ -> u£r_d©a ); 315 `þ—r_’dpošt ( ’dpošt ); 316 `dbus_mes§ge_uÄef ( »¶y ); 317 `dbus_”rÜ_ä“ (& ”r ); 321 `dbus_”rÜ_ä“ (& ”r ); 322  dÚe ; 325 ià( `dbus_mes§ge_is_m‘hod_ÿÎ ( »que¡ -> msg , MEDIA_ENDPOINT_INTERFACE , 327 DBusMes§geI‹r ¬gs , ¬¿y ; 328 ušt8_t * cÚfigu¿tiÚ ; 330 `dbus_mes§ge_™”_š™ ( »¶y , & ¬gs ); 332 `dbus_mes§ge_™”_»cur£ (& ¬gs , & ¬¿y ); 334 `dbus_mes§ge_™”_g‘_fixed_¬¿y (& ¬¿y , & cÚfigu¿tiÚ , & size ); 336 »t = cÚfigu¿tiÚ ; 337  dÚe ; 338 } ià(! `dbus_mes§ge_g‘_¬gs ( »¶y , & ”r , DBUS_TYPE_INVALID )) { 339 `”rÜ ("WrÚg„•ly sigÇtu»: %s", ”r . mes§ge ); 340 `dbus_”rÜ_ä“ (& ”r ); 341  dÚe ; 344 size = 1; 345 v®ue = TRUE ; 346 »t = & v®ue ; 348 dÚe : 349 `dbus_mes§ge_uÄef ( »¶y ); 351 ià( »que¡ -> cb ) 352 »que¡ -> `cb ( ’dpošt , »t , size ,„eque¡-> u£r_d©a ); 354 ’dpošt -> »que¡s = `g_¦i¡_»move Óndpošt->»que¡s, »que¡ ); 355 `’dpošt_»que¡_ä“ ( »que¡ ); 356 } } 358  gboÞ—n $medŸ_’dpošt_async_ÿÎ ( DBusMes§ge * msg , 359  medŸ_’dpošt * ’dpošt , 360 medŸ_’dpošt_cb_t cb , 361 * u£r_d©a , 362 GDe¡royNÙify de¡roy ) 364  ’dpošt_»que¡ * »que¡ ; 366 »que¡ = `g_Ãw0 ( ’dpošt_»que¡ , 1); 369 ià( `g_dbus_£nd_mes§ge_w™h_»¶y ( `btd_g‘_dbus_cÚÃùiÚ (), 370 msg , & »que¡ -> ÿÎ , 371 REQUEST_TIMEOUT è=ð FALSE ) { 372 `”rÜ ("D-Bus send failed"); 373 `g_ä“ ( »que¡ ); 374  FALSE ; 377 `dbus_³ndšg_ÿÎ_£t_nÙify ( »que¡ -> ÿÎ , ’dpošt_»¶y ,„equest, 378 NULL ); 380 »que¡ -> ’dpošt =ƒndpoint; 381 »que¡ -> msg = msg; 382 »que¡ -> cb = cb; 383 »que¡ -> de¡roy = destroy; 384 »que¡ -> u£r_d©a = user_data; 386 ’dpošt -> »que¡s = `g_¦i¡_­³nd Óndpošt->»que¡s, »que¡ ); 388 `DBG ("C®lšg %s:‚amð% ·th = %s", `dbus_mes§ge_g‘_memb” ( msg ), 389 `dbus_mes§ge_g‘_de¡š©iÚ ( msg ), 390 `dbus_mes§ge_g‘_·th ( msg )); 392  TRUE ; 393 } } 395  gboÞ—n $£Ëù_cÚfigu¿tiÚ ( medŸ_’dpošt * ’dpošt , 396 ušt8_t * ÿ·bž™›s , 397 size_t Ëngth , 398 medŸ_’dpošt_cb_t cb , 399 * u£r_d©a , 400 GDe¡royNÙify de¡roy ) 402 DBusMes§ge * msg ; 404 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ’dpošt -> £nd” ,ƒndpošt-> ·th , 405 MEDIA_ENDPOINT_INTERFACE , 407 ià( msg =ð NULL ) { 408 `”rÜ ("Couldn't‡llocate D-Bus message"); 409  FALSE ; 412 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_ARRAY , DBUS_TYPE_BYTE , 413 & ÿ·bž™›s , Ëngth , 414 DBUS_TYPE_INVALID ); 416  `medŸ_’dpošt_async_ÿÎ ( msg , ’dpošt , cb , u£r_d©a , de¡roy ); 417 } } 419  $Œª¥Üt_deviû_cmp ( gcÚ¡poš‹r d©a , gcÚ¡poš‹¸ u£r_d©a ) 421  medŸ_Œª¥Üt * Œª¥Üt = (medŸ_Œª¥Üˆ*è d©a ; 422 cÚ¡  btd_deviû * deviû = u£r_d©a ; 423 cÚ¡  btd_deviû * dev = `medŸ_Œª¥Üt_g‘_dev ( Œª¥Üt ); 425 ià( deviû =ð dev ) 429 } } 431  medŸ_Œª¥Üt * $fšd_deviû_Œª¥Üt ( 432  medŸ_’dpošt * ’dpošt , 433  btd_deviû * deviû ) 435 GSLi¡ * m©ch ; 437 m©ch = `g_¦i¡_fšd_cu¡om ( ’dpošt -> Œª¥Üts , deviû , 438 Œª¥Üt_deviû_cmp ); 439 ià( m©ch =ð NULL ) 440  NULL ; 442  m©ch -> d©a ; 443 } } 445 #ifdeà __TIZEN_PATCH__ 446  medŸ_¶ay” * $medŸ_ad­‹r_g‘_¶ay” ( medŸ_ad­‹r * ad­‹r ) 448 GSLi¡ * l ; 449 `DBG (" "); 451  l = ad­‹r -> ¶ay”s ;†;† =†-> Ãxt ) { 452  medŸ_¶ay” * mp = l -> d©a ; 453 ià( mp !ð NULL ) 454  mp ; 456  NULL ; 457 } } 459  $medŸ_¡Ý_su¥’d_tim” () 461 ià( su¥’d_tim”_id > 0) { 462 `DBG ("Removing sink suspendimer"); 463 `g_sourû_»move ( su¥’d_tim”_id ); 464 su¥’d_tim”_id = 0; 466 } } 468 gboÞ—n $medŸ_»£t_mp_¡©us ( gpoš‹r u£r_d©a ) 470  medŸ_¶ay” * mp = u£r_d©a ; 471 `DBG (" "); 474 ià( `g_¡rcmp0 ( mp -> ¡©us , "playing") != 0) 475  FALSE ; 477 mp -> pos™iÚ = `g‘_pos™iÚ (mp); 478 `g_tim”_¡¬t ( mp -> tim” ); 480 `g_ä“ ( mp -> ¡©us ); 481 mp -> ¡©us = `g_¡rdup ("paused"); 482 su¥’d_tim”_id = 0; 483 `avrý_¶ay”_ev’t ( mp -> ¶ay” , AVRCP_EVENT_STATUS_CHANGED , mp-> ¡©us ); 485  FALSE ; 486 } } 488  $medŸ_sšk_¡©e_chªged_cb ( btd_£rviû * £rviû , 489 sšk_¡©e_t Þd_¡©e , 490 sšk_¡©e_t Ãw_¡©e , 491 * u£r_d©a ) 493  medŸ_¶ay” * mp = u£r_d©a ; 494 `DBG (" "); 497 ià(( Þd_¡©e =ð SINK_STATE_PLAYING ) && 498 ( Ãw_¡©e =ð SINK_STATE_CONNECTED )) { 501 ià( `g_¡rcmp0 ( mp -> ¡©us , "playing") != 0) 504 `medŸ_¡Ý_su¥’d_tim” (); 507 su¥’d_tim”_id = `g_timeout_add_£cÚds ( SINK_SUSPEND_TIMEOUT , 508 medŸ_»£t_mp_¡©us , mp ); 509 `DBG ("SINK SUSPEND TIMEOUT started"); 513 ià(( Þd_¡©e =ð SINK_STATE_CONNECTED ) && 514 ( Ãw_¡©e =ð SINK_STATE_PLAYING )) { 516  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 517  Çme [20]; 519 `medŸ_¡Ý_su¥’d_tim” (); 522 ià( £t_avrý_¡©us =ð FALSE ) { 523 £t_avrý_¡©us = TRUE ; 528 `deviû_g‘_Çme ( deviû , Çme , (name)); 529 `DBG ("Nam: %s", Çme ); 530 ià(( `g_¡r_has_´efix ( Çme , "BMW"è=ð TRUE ) || 531 ( `g_¡r_has_´efix ( Çme , "Audi"è=ð TRUE ) || 532 ( `g_¡r_has_´efix ( Çme , "VW BT"è=ð TRUE )) { 535 ià( `g_¡rcmp0 ( mp -> ¡©us , "playing") == 0) 538 `g_ä“ ( mp -> ¡©us ); 539 mp -> ¡©us = `g_¡rdup ("playing"); 540 `avrý_¶ay”_ev’t ( mp -> ¶ay” , 541 AVRCP_EVENT_STATUS_CHANGED , mp -> ¡©us ); 544 } } 546  $medŸ_£t_sšk_ÿÎback ( btd_deviû * deviû , 547  medŸ_¶ay” * mp ) 549  btd_£rviû * £rviû ; 550 `DBG (" "); 552 £rviû = `btd_deviû_g‘_£rviû ( deviû , A2DP_SINK_UUID ); 553 ià( £rviû =ð NULL ) 554  - EINVAL ; 556 mp -> sšk_w©ch = `sšk_add_¡©e_cb ( £rviû , medŸ_sšk_¡©e_chªged_cb , mp); 559 } } 562  sa2dp_cÚfig_d©a { 563  a2dp_£tup * m£tup ; 564 a2dp_’dpošt_cÚfig_t mcb ; 567  gboÞ—n $£t_cÚfigu¿tiÚ ( medŸ_’dpošt * ’dpošt , 568 ušt8_t * cÚfigu¿tiÚ , size_t size , 569 medŸ_’dpošt_cb_t cb , 570 * u£r_d©a , 571 GDe¡royNÙify de¡roy ) 573  a2dp_cÚfig_d©a * d©a = u£r_d©a ; 574  btd_deviû * deviû = `a2dp_£tup_g‘_deviû ( d©a -> £tup ); 575 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 576 DBusMes§ge * msg ; 577 cÚ¡ * ·th ; 578 DBusMes§geI‹r ™” ; 579  medŸ_Œª¥Üt * Œª¥Üt ; 580 #ifdeà __TIZEN_PATCH__ 581  medŸ_ad­‹r * ad­‹r ; 582  medŸ_¶ay” * mp ; 585 Œª¥Üt = `fšd_deviû_Œª¥Üt ( ’dpošt , deviû ); 587 ià( Œª¥Üt !ð NULL ) 588  FALSE ; 590 Œª¥Üt = `medŸ_Œª¥Üt_ü—‹ ( deviû , cÚfigu¿tiÚ , size , 591 ’dpošt ); 592 ià( Œª¥Üt =ð NULL ) 593  FALSE ; 595 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ’dpošt -> £nd” ,ƒndpošt-> ·th , 596 MEDIA_ENDPOINT_INTERFACE , 598 ià( msg =ð NULL ) { 599 `”rÜ ("Couldn't‡llocate D-Bus message"); 600 `medŸ_Œª¥Üt_de¡roy ( Œª¥Üt ); 601  FALSE ; 604 #ifdeà __TIZEN_PATCH__ 605 £t_avrý_¡©us = FALSE ; 606 ad­‹r = `fšd_ad­‹r ( deviû ); 607 ià( mp = `medŸ_ad­‹r_g‘_¶ay” ( ad­‹r )) 608 `medŸ_£t_sšk_ÿÎback ( deviû , mp ); 611 ’dpošt -> Œª¥Üts = `g_¦i¡_­³nd Óndpošt->Œª¥Üts, Œª¥Üt ); 613 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 615 ·th = `medŸ_Œª¥Üt_g‘_·th ( Œª¥Üt ); 616 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 618 `g_dbus_g‘_´Ý”t›s ( cÚn , ·th , "Üg.bluez.MedŸT¿n¥Üt1", & ™” ); 620  `medŸ_’dpošt_async_ÿÎ ( msg , ’dpošt , cb , u£r_d©a , de¡roy ); 621 } } 623  $»Ëa£_’dpošt ( medŸ_’dpošt * ’dpošt ) 625 DBusMes§ge * msg ; 627 `DBG ("£nd”=% ·th=%s", ’dpošt -> £nd” ,ƒndpošt-> ·th ); 630 ià( ’dpošt -> w©ch == 0) 631  dÚe ; 633 `þ—r_’dpošt ( ’dpošt ); 635 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ’dpošt -> £nd” ,ƒndpošt-> ·th , 636 MEDIA_ENDPOINT_INTERFACE , 638 ià( msg =ð NULL ) { 639 `”rÜ ("Couldn't‡llocate D-Bus message"); 643 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), msg ); 645 dÚe : 646 `medŸ_’dpošt_»move ( ’dpošt ); 647 } } 649 cÚ¡ * $g‘_Çme ( a2dp_£p * £p , * u£r_d©a ) 651  medŸ_’dpošt * ’dpošt = u£r_d©a ; 653  ’dpošt -> £nd” ; 654 } } 656  size_t $g‘_ÿ·bž™›s ( a2dp_£p * £p , ušt8_t ** ÿ·bž™›s , 657 * u£r_d©a ) 659  medŸ_’dpošt * ’dpošt = u£r_d©a ; 661 * ÿ·bž™›s = ’dpošt ->capabilities; 662  ’dpošt -> size ; 663 } } 665  sa2dp_£Ëù_d©a { 666  a2dp_£tup * m£tup ; 667 a2dp_’dpošt_£Ëù_t mcb ; 670  $£Ëù_cb ( medŸ_’dpošt * ’dpošt , * »t ,  size , 671 * u£r_d©a ) 673  a2dp_£Ëù_d©a * d©a = u£r_d©a ; 675 d©a -> `cb (d©a-> £tup , »t , size ); 676 } } 678  $£Ëù_cÚfig ( a2dp_£p * £p , ušt8_t * ÿ·bž™›s , 679 size_t Ëngth ,  a2dp_£tup * £tup , 680 a2dp_’dpošt_£Ëù_t cb , * u£r_d©a ) 682  medŸ_’dpošt * ’dpošt = u£r_d©a ; 683  a2dp_£Ëù_d©a * d©a ; 685 d©a = `g_Ãw0 ( a2dp_£Ëù_d©a , 1); 686 d©a -> £tup = setup; 687 d©a -> cb = cb; 689 ià( `£Ëù_cÚfigu¿tiÚ ( ’dpošt , ÿ·bž™›s , Ëngth , 690 £Ëù_cb , d©a , g_ä“ è=ð TRUE ) 693 `g_ä“ ( d©a ); 694  - ENOMEM ; 695 } } 697  $cÚfig_cb ( medŸ_’dpošt * ’dpošt , * »t ,  size , 698 * u£r_d©a ) 700  a2dp_cÚfig_d©a * d©a = u£r_d©a ; 702 d©a -> `cb (d©a-> £tup , »t ? TRUE : FALSE ); 703 } } 705  $£t_cÚfig ( a2dp_£p * £p , ušt8_t * cÚfigu¿tiÚ , 706 size_t Ëngth , 707  a2dp_£tup * £tup , 708 a2dp_’dpošt_cÚfig_t cb , 709 * u£r_d©a ) 711  medŸ_’dpošt * ’dpošt = u£r_d©a ; 712  a2dp_cÚfig_d©a * d©a ; 714 d©a = `g_Ãw0 ( a2dp_cÚfig_d©a , 1); 715 d©a -> £tup = setup; 716 d©a -> cb = cb; 718 ià( `£t_cÚfigu¿tiÚ ( ’dpošt , cÚfigu¿tiÚ , Ëngth , cÚfig_cb , d©a , 719 g_ä“ è=ð TRUE ) 722 `g_ä“ ( d©a ); 723  - ENOMEM ; 724 } } 726  $þ—r_cÚfig ( a2dp_£p * £p , * u£r_d©a ) 728  medŸ_’dpošt * ’dpošt = u£r_d©a ; 730 `þ—r_’dpošt ( ’dpošt ); 731 } } 733  $£t_d–ay ( a2dp_£p * £p , ušt16_t d–ay , * u£r_d©a ) 735  medŸ_’dpošt * ’dpošt = u£r_d©a ; 737 ià( ’dpošt -> Œª¥Üts =ð NULL ) 740 `medŸ_Œª¥Üt_upd©e_d–ay ( ’dpošt -> Œª¥Üts -> d©a , d–ay ); 741 } } 743  a2dp_’dpošt ga2dp_’dpošt = { 744 . g‘_Çme = get_name, 745 . gg‘_ÿ·bž™›s = g‘_ÿ·bž™›s , 746 . g£Ëù_cÚfigu¿tiÚ = £Ëù_cÚfig , 747 . g£t_cÚfigu¿tiÚ = £t_cÚfig , 748 . gþ—r_cÚfigu¿tiÚ = þ—r_cÚfig , 749 . g£t_d–ay = £t_d–ay 752  $a2dp_de¡roy_’dpošt (* u£r_d©a ) 754  medŸ_’dpošt * ’dpošt = u£r_d©a ; 756 ’dpošt -> £p = NULL ; 757 `»Ëa£_’dpošt ( ’dpošt ); 758 } } 760  gboÞ—n $’dpošt_š™_a2dp_sourû ( medŸ_’dpošt * ’dpošt , 761 gboÞ—n d–ay_»pÜtšg , 762 * ”r ) 764 ’dpošt -> £p = `a2dp_add_£p Óndpošt-> ad­‹r -> btd_ad­‹r , 765 AVDTP_SEP_TYPE_SOURCE , ’dpošt -> codec , 766 d–ay_»pÜtšg , & a2dp_’dpošt , 767 ’dpošt , a2dp_de¡roy_’dpošt , ”r ); 768 ià( ’dpošt -> £p =ð NULL ) 769  FALSE ; 771  TRUE ; 772 } } 774  gboÞ—n $’dpošt_š™_a2dp_sšk ( medŸ_’dpošt * ’dpošt , 775 gboÞ—n d–ay_»pÜtšg , 776 * ”r ) 778 ’dpošt -> £p = `a2dp_add_£p Óndpošt-> ad­‹r -> btd_ad­‹r , 779 AVDTP_SEP_TYPE_SINK , ’dpošt -> codec , 780 d–ay_»pÜtšg , & a2dp_’dpošt , 781 ’dpošt , a2dp_de¡roy_’dpošt , ”r ); 782 ià( ’dpošt -> £p =ð NULL ) 783  FALSE ; 785  TRUE ; 786 } } 788  medŸ_ad­‹r * $fšd_ad­‹r ( btd_deviû * deviû ) 790 GSLi¡ * l ; 792  l = ad­‹rs ;†;† =†-> Ãxt ) { 793  medŸ_ad­‹r * ad­‹r = l -> d©a ; 795 ià( ad­‹r -> btd_ad­‹r =ð `deviû_g‘_ad­‹r ( deviû )) 796  ad­‹r ; 799  NULL ; 800 } } 802  boÞ $’dpošt_´Ý”t›s_exi¡s (cÚ¡ * uuid , 803  btd_deviû * dev , 804 * u£r_d©a ) 806  medŸ_ad­‹r * ad­‹r ; 808 ad­‹r = `fšd_ad­‹r ( dev ); 809 ià( ad­‹r =ð NULL ) 810  çl£ ; 812 ià( `medŸ_ad­‹r_fšd_’dpošt ( ad­‹r , NULL , NULL, uuid ) == NULL) 813  çl£ ; 815  Œue ; 816 } } 818  $­³nd_’dpošt ( medŸ_’dpošt * ’dpošt , 819 DBusMes§geI‹r * diù ) 821 DBusMes§geI‹r ’Œy , v¬ , ´Ýs ; 823 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , 824 NULL , & ’Œy ); 826 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , 827 & ’dpošt -> £nd” ); 829 `dbus_mes§ge_™”_Ý’_cÚš” (& ’Œy , DBUS_TYPE_VARIANT , "a{sv}", 830 & v¬ ); 832 `dbus_mes§ge_™”_Ý’_cÚš” (& v¬ , DBUS_TYPE_ARRAY , 833 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 834 DBUS_TYPE_STRING_AS_STRING 835 DBUS_TYPE_VARIANT_AS_STRING 836 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 837 & ´Ýs ); 839 `diù_­³nd_’Œy (& ´Ýs , "P©h", DBUS_TYPE_OBJECT_PATH , 840 & ’dpošt -> ·th ); 841 `diù_­³nd_’Œy (& ´Ýs , "Codec", DBUS_TYPE_BYTE , & ’dpošt -> codec ); 842 `diù_­³nd_¬¿y (& ´Ýs , "C­abž™›s", DBUS_TYPE_BYTE , 843 & ’dpošt -> ÿ·bž™›s ,ƒndpošt-> size ); 845 `dbus_mes§ge_™”_þo£_cÚš” (& v¬ , & ´Ýs ); 846 `dbus_mes§ge_™”_þo£_cÚš” (& ’Œy , & v¬ ); 847 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & ’Œy ); 848 } } 850  boÞ $’dpošt_´Ý”t›s_g‘ (cÚ¡ * uuid , 851  btd_deviû * dev , 852 DBusMes§geI‹r * ™” , 853 * u£r_d©a ) 855  medŸ_ad­‹r * ad­‹r ; 856 DBusMes§geI‹r diù ; 857 GSLi¡ * l ; 859 ad­‹r = `fšd_ad­‹r ( dev ); 860 ià( ad­‹r =ð NULL ) 861  çl£ ; 863 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 864 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 865 DBUS_TYPE_STRING_AS_STRING 866 DBUS_TYPE_VARIANT_AS_STRING 867 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 868 & diù ); 870  l = ad­‹r -> ’dpošts ;†;† =†-> Ãxt ) { 871  medŸ_’dpošt * ’dpošt = l -> d©a ; 873 ià( `¡rÿ£cmp ( ’dpošt -> uuid , uuid) != 0) 876 `­³nd_’dpošt ( ’dpošt , & diù ); 879 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 881  Œue ; 882 } } 884  medŸ_’dpošt * $medŸ_’dpošt_ü—‹ ( medŸ_ad­‹r * ad­‹r , 885 cÚ¡ * £nd” , 886 cÚ¡ * ·th , 887 cÚ¡ * uuid , 888 gboÞ—n d–ay_»pÜtšg , 889 ušt8_t codec , 890 ušt8_t * ÿ·bž™›s , 891  size , 892 * ”r ) 894  medŸ_’dpošt * ’dpošt ; 895 gboÞ—n sucûeded ; 897 ’dpošt = `g_Ãw0 ( medŸ_’dpošt , 1); 898 ’dpošt -> £nd” = `g_¡rdup (sender); 899 ’dpošt -> ·th = `g_¡rdup (path); 900 ’dpošt -> uuid = `g_¡rdup (uuid); 901 ’dpošt -> codec = codec; 903 ià( size > 0) { 904 ’dpošt -> ÿ·bž™›s = `g_Ãw ( ušt8_t , size ); 905 `memýy ( ’dpošt -> ÿ·bž™›s , c­abž™›s, size ); 906 ’dpošt -> size = size; 909 ’dpošt -> ad­‹r =‡dapter; 911 ià( `¡rÿ£cmp ( uuid , A2DP_SOURCE_UUID ) == 0) 912 sucûeded = `’dpošt_š™_a2dp_sourû ( ’dpošt , 913 d–ay_»pÜtšg , ”r ); 914 ià( `¡rÿ£cmp ( uuid , A2DP_SINK_UUID ) == 0) 915 sucûeded = `’dpošt_š™_a2dp_sšk ( ’dpošt , 916 d–ay_»pÜtšg , ”r ); 917 ià( `¡rÿ£cmp ( uuid , HFP_AG_UUID ) == 0 || 918 `¡rÿ£cmp ( uuid , HSP_AG_UUID ) == 0) 919 sucûeded = TRUE ; 920 ià( `¡rÿ£cmp ( uuid , HFP_HS_UUID ) == 0 || 921 `¡rÿ£cmp ( uuid , HSP_HS_UUID ) == 0) 922 sucûeded = TRUE ; 924 sucûeded = FALSE ; 926 ià( ”r ) 927 * ”r = - EINVAL ; 930 ià(! sucûeded ) { 931 `medŸ_’dpošt_de¡roy ( ’dpošt ); 932  NULL ; 935 ’dpošt -> w©ch = `g_dbus_add_discÚÃù_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), 936 £nd” , medŸ_’dpošt_ex™ , 937 ’dpošt , NULL ); 939 ià( `medŸ_ad­‹r_fšd_’dpošt ( ad­‹r , NULL , NULL, uuid ) == NULL) { 940 `btd_´ofže_add_cu¡om_´Ý ( uuid , "a{sv}", "MediaEndpoints", 941 ’dpošt_´Ý”t›s_exi¡s , 942 ’dpošt_´Ý”t›s_g‘ , 943 NULL ); 946 ad­‹r -> ’dpošts = `g_¦i¡_­³nd ×d­‹r->’dpošts, ’dpošt ); 947 `šfo ("Endpošˆ»gi¡”ed: s’d”=% ·th=%s", £nd” , ·th ); 949 ià( ”r ) 950 * ”r = 0; 951  ’dpošt ; 952 } } 954  $·r£_´Ý”t›s ( DBusMes§geI‹r * ´Ýs , cÚ¡ ** uuid , 955 gboÞ—n * d–ay_»pÜtšg , ušt8_t * codec , 956 ušt8_t ** ÿ·bž™›s , * size ) 958 gboÞ—n has_uuid = FALSE ; 959 gboÞ—n has_codec = FALSE ; 961  `dbus_mes§ge_™”_g‘_¬g_ty³ ( ´Ýs è=ð DBUS_TYPE_DICT_ENTRY ) { 962 cÚ¡ * key ; 963 DBusMes§geI‹r v®ue , ’Œy ; 964  v¬ ; 966 `dbus_mes§ge_™”_»cur£ ( ´Ýs , & ’Œy ); 967 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & key ); 969 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 970 `dbus_mes§ge_™”_»cur£ (& ’Œy , & v®ue ); 972 v¬ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& v®ue ); 973 ià( `¡rÿ£cmp ( key , "UUID") == 0) { 974 ià( v¬ !ð DBUS_TYPE_STRING ) 975  - EINVAL ; 976 `dbus_mes§ge_™”_g‘_basic (& v®ue , uuid ); 977 has_uuid = TRUE ; 978 } ià( `¡rÿ£cmp ( key , "Codec") == 0) { 979 ià( v¬ !ð DBUS_TYPE_BYTE ) 980  - EINVAL ; 981 `dbus_mes§ge_™”_g‘_basic (& v®ue , codec ); 982 has_codec = TRUE ; 983 } ià( `¡rÿ£cmp ( key , "DelayReporting") == 0) { 984 ià( v¬ !ð DBUS_TYPE_BOOLEAN ) 985  - EINVAL ; 986 `dbus_mes§ge_™”_g‘_basic (& v®ue , d–ay_»pÜtšg ); 987 } ià( `¡rÿ£cmp ( key , "Capabilities") == 0) { 988 DBusMes§geI‹r ¬¿y ; 990 ià( v¬ !ð DBUS_TYPE_ARRAY ) 991  - EINVAL ; 993 `dbus_mes§ge_™”_»cur£ (& v®ue , & ¬¿y ); 994 `dbus_mes§ge_™”_g‘_fixed_¬¿y (& ¬¿y , ÿ·bž™›s , 995 size ); 998 `dbus_mes§ge_™”_Ãxt ( ´Ýs ); 1001  ( has_uuid && has_codec è? 0 : - EINVAL ; 1002 } } 1004  DBusMes§ge * $»gi¡”_’dpošt ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 1005 * d©a ) 1007  medŸ_ad­‹r * ad­‹r = d©a ; 1008 DBusMes§geI‹r ¬gs , ´Ýs ; 1009 cÚ¡ * £nd” , * ·th , * uuid ; 1010 gboÞ—n d–ay_»pÜtšg = FALSE ; 1011 ušt8_t codec ; 1012 ušt8_t * ÿ·bž™›s ; 1013  size = 0; 1014  ”r ; 1016 £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 1018 `dbus_mes§ge_™”_š™ ( msg , & ¬gs ); 1020 `dbus_mes§ge_™”_g‘_basic (& ¬gs , & ·th ); 1021 `dbus_mes§ge_™”_Ãxt (& ¬gs ); 1023 ià( `medŸ_ad­‹r_fšd_’dpošt ( ad­‹r , £nd” , ·th , NULL ) != NULL) 1024  `btd_”rÜ_®»ady_exi¡s ( msg ); 1026 `dbus_mes§ge_™”_»cur£ (& ¬gs , & ´Ýs ); 1027 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ´Ýs è!ð DBUS_TYPE_DICT_ENTRY ) 1028  `btd_”rÜ_šv®id_¬gs ( msg ); 1030 ià( `·r£_´Ý”t›s (& ´Ýs , & uuid , & d–ay_»pÜtšg , & codec , 1031 & ÿ·bž™›s , & size ) < 0) 1032  `btd_”rÜ_šv®id_¬gs ( msg ); 1034 ià( `medŸ_’dpošt_ü—‹ ( ad­‹r , £nd” , ·th , uuid , d–ay_»pÜtšg , 1035 codec , ÿ·bž™›s , size , & ”r è=ð NULL ) { 1036 ià( ”r =ð- EPROTONOSUPPORT ) 1037  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 1039  `btd_”rÜ_šv®id_¬gs ( msg ); 1042  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 1043 } } 1045  DBusMes§ge * $uÄegi¡”_’dpošt ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 1046 * d©a ) 1048  medŸ_ad­‹r * ad­‹r = d©a ; 1049  medŸ_’dpošt * ’dpošt ; 1050 cÚ¡ * £nd” , * ·th ; 1052 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 1053 DBUS_TYPE_OBJECT_PATH , & ·th , 1054 DBUS_TYPE_INVALID )) 1055  `btd_”rÜ_šv®id_¬gs ( msg ); 1057 £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 1059 ’dpošt = `medŸ_ad­‹r_fšd_’dpošt ( ad­‹r , £nd” , ·th , NULL ); 1060 ià( ’dpošt =ð NULL ) 1061  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 1063 `medŸ_’dpošt_»move ( ’dpošt ); 1065  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 1066 } } 1068  medŸ_¶ay” * $medŸ_ad­‹r_fšd_¶ay” ( 1069  medŸ_ad­‹r * ad­‹r , 1070 cÚ¡ * £nd” , 1071 cÚ¡ * ·th ) 1073 GSLi¡ * l ; 1075  l = ad­‹r -> ¶ay”s ;†;† =†-> Ãxt ) { 1076  medŸ_¶ay” * mp = l -> d©a ; 1078 ià( £nd” && `g_¡rcmp0 ( mp ->sender, sender) != 0) 1081 ià( ·th && `g_¡rcmp0 ( mp ->path,…ath) != 0) 1084  mp ; 1087  NULL ; 1088 } } 1090  $»Ëa£_¶ay” ( medŸ_¶ay” * mp ) 1092 DBusMes§ge * msg ; 1094 `DBG ("£nd”=% ·th=%s", mp -> £nd” , mp-> ·th ); 1096 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( mp -> £nd” , mp-> ·th , 1097 MEDIA_PLAYER_INTERFACE , 1099 ià( msg =ð NULL ) { 1100 `”rÜ ("Couldn't‡llocate D-Bus message"); 1104 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), msg ); 1105 } } 1107  $medŸ_¶ay”_ä“ ( gpoš‹r d©a ) 1109 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 1110  medŸ_¶ay” * mp = d©a ; 1111  medŸ_ad­‹r * ad­‹r = mp ->adapter; 1113 ià( mp -> ¶ay” ) { 1114 ad­‹r -> ¶ay”s = `g_¦i¡_»move ×d­‹r->¶ay”s, mp ); 1115 `»Ëa£_¶ay” ( mp ); 1118 `g_dbus_»move_w©ch ( cÚn , mp -> w©ch ); 1119 `g_dbus_»move_w©ch ( cÚn , mp -> ´Ý”t›s_w©ch ); 1120 `g_dbus_»move_w©ch ( cÚn , mp -> £ek_w©ch ); 1122 ià( mp -> Œack ) 1123 `g_hash_bË_uÄef ( mp -> Œack ); 1125 ià( mp -> £‰šgs ) 1126 `g_hash_bË_uÄef ( mp -> £‰šgs ); 1128 #ifdeà __TIZEN_PATCH__ 1129 `medŸ_¡Ý_su¥’d_tim” (); 1131 ià( mp -> sšk_w©ch ) 1132 `sšk_»move_¡©e_cb ( mp -> sšk_w©ch ); 1135 `g_tim”_de¡roy ( mp -> tim” ); 1136 `g_ä“ ( mp -> £nd” ); 1137 `g_ä“ ( mp -> ·th ); 1138 `g_ä“ ( mp -> ¡©us ); 1139 `g_ä“ ( mp ); 1140 } } 1142  $medŸ_¶ay”_de¡roy ( medŸ_¶ay” * mp ) 1144  medŸ_ad­‹r * ad­‹r = mp ->adapter; 1146 `DBG ("£nd”=% ·th=%s", mp -> £nd” , mp-> ·th ); 1148 ià( mp -> ¶ay” ) { 1149  avrý_¶ay” * ¶ay” = mp ->player; 1150 mp -> ¶ay” = NULL ; 1151 ad­‹r -> ¶ay”s = `g_¦i¡_»move ×d­‹r->¶ay”s, mp ); 1152 `avrý_uÄegi¡”_¶ay” ( ¶ay” ); 1156 `medŸ_¶ay”_ä“ ( mp ); 1157 } } 1159  $medŸ_¶ay”_»move ( medŸ_¶ay” * mp ) 1161 `šfo ("PÏy” uÄegi¡”ed: s’d”=% ·th=%s", mp -> £nd” , mp-> ·th ); 1163 `medŸ_¶ay”_de¡roy ( mp ); 1164 } } 1166  GLi¡ * $li¡_£‰šgs (* u£r_d©a ) 1168  medŸ_¶ay” * mp = u£r_d©a ; 1170 `DBG (""); 1172 ià( mp -> £‰šgs =ð NULL ) 1173  NULL ; 1175  `g_hash_bË_g‘_keys ( mp -> £‰šgs ); 1176 } } 1178 cÚ¡ * $g‘_£‰šg (cÚ¡ * key , * u£r_d©a ) 1180  medŸ_¶ay” * mp = u£r_d©a ; 1182 `DBG ("%s", key ); 1184  `g_hash_bË_lookup ( mp -> £‰šgs , key ); 1185 } } 1187  $£t_shufæe_£‰šg ( DBusMes§geI‹r * ™” , cÚ¡ * v®ue ) 1189 cÚ¡ * key = "Shuffle"; 1190 dbus_boÞ_t v® ; 1191 DBusMes§geI‹r v¬ ; 1193 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & key ); 1194 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_VARIANT , 1195 DBUS_TYPE_BOOLEAN_AS_STRING , 1196 & v¬ ); 1197 v® = `¡rÿ£cmp ( v®ue , "off") != 0; 1198 `dbus_mes§ge_™”_­³nd_basic (& v¬ , DBUS_TYPE_BOOLEAN , & v® ); 1199 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v¬ ); 1200 } } 1202 cÚ¡ * $»³©_to_loÝ_¡©us (cÚ¡ * v®ue ) 1204 ià( `¡rÿ£cmp ( v®ue , "off") == 0) 1206 ià( `¡rÿ£cmp ( v®ue , "singletrack") == 0) 1208 ià( `¡rÿ£cmp ( v®ue , "alltracks") == 0) 1210 ià( `¡rÿ£cmp ( v®ue , "group") == 0) 1213  NULL ; 1214 } } 1216  $£t_»³©_£‰šg ( DBusMes§geI‹r * ™” , cÚ¡ * v®ue ) 1218 cÚ¡ * key = "LoopStatus"; 1219 cÚ¡ * v® ; 1220 DBusMes§geI‹r v¬ ; 1222 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & key ); 1223 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_VARIANT , 1224 DBUS_TYPE_STRING_AS_STRING , 1225 & v¬ ); 1226 v® = `»³©_to_loÝ_¡©us ( v®ue ); 1227 `dbus_mes§ge_™”_­³nd_basic (& v¬ , DBUS_TYPE_STRING , & v® ); 1228 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v¬ ); 1229 } } 1231  $£t_£‰šg (cÚ¡ * key , cÚ¡ * v®ue , * u£r_d©a ) 1233  medŸ_¶ay” * mp = u£r_d©a ; 1234 cÚ¡ * içû = MEDIA_PLAYER_INTERFACE ; 1235 DBusMes§ge * msg ; 1236 DBusMes§geI‹r ™” ; 1237 cÚ¡ * curv® ; 1239 `DBG ("% ð%s", key , v®ue ); 1241 curv® = `g_hash_bË_lookup ( mp -> £‰šgs , key ); 1242 ià(! curv® ) 1243  - EINVAL ; 1245 ià( `¡rÿ£cmp ( curv® , v®ue ) == 0) 1248 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( mp -> £nd” , mp-> ·th , 1249 DBUS_INTERFACE_PROPERTIES , "Set"); 1250 ià( msg =ð NULL ) { 1251 `”rÜ ("Couldn't‡llocate D-Bus message"); 1252  - ENOMEM ; 1255 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 1256 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_STRING , & içû ); 1258 ià( `¡rÿ£cmp ( key , "Shuffle") == 0) 1259 `£t_shufæe_£‰šg (& ™” , v®ue ); 1260 ià( `¡rÿ£cmp ( key , "Repeat") == 0) 1261 `£t_»³©_£‰šg (& ™” , v®ue ); 1263 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), msg ); 1266 } } 1268  GLi¡ * $li¡_m‘ad©a (* u£r_d©a ) 1270  medŸ_¶ay” * mp = u£r_d©a ; 1272 `DBG (""); 1274 ià( mp -> Œack =ð NULL ) 1275  NULL ; 1277  `g_hash_bË_g‘_keys ( mp -> Œack ); 1278 } } 1280  ušt64_t $g‘_uid (* u£r_d©a ) 1282  medŸ_¶ay” * mp = u£r_d©a ; 1284 `DBG ("%p", mp -> Œack ); 1286 ià( mp -> Œack =ð NULL ) 1287  UINT64_MAX ; 1290 } } 1292 cÚ¡ * $g‘_m‘ad©a (cÚ¡ * key , * u£r_d©a ) 1294  medŸ_¶ay” * mp = u£r_d©a ; 1296 `DBG ("%s", key ); 1298 ià( mp -> Œack =ð NULL ) 1299  NULL ; 1301  `g_hash_bË_lookup ( mp -> Œack , key ); 1302 } } 1304 cÚ¡ * $g‘_¡©us (* u£r_d©a ) 1306  medŸ_¶ay” * mp = u£r_d©a ; 1308  mp -> ¡©us ; 1309 } } 1311  ušt32_t $g‘_pos™iÚ (* u£r_d©a ) 1313  medŸ_¶ay” * mp = u£r_d©a ; 1314  timed– ; 1315 ušt32_t £c , m£c ; 1317 ià( mp -> ¡©us =ð NULL || `¡rÿ£cmp (mp->status, "Playing") != 0) 1318  mp -> pos™iÚ ; 1320 timed– = `g_tim”_–­£d ( mp -> tim” , NULL ); 1322 £c = ( ušt32_t è timed– ; 1323 m£c = ( ušt32_t è(( timed– - £c ) * 1000); 1325  mp -> pos™iÚ + £c * 1000 + m£c ; 1326 } } 1328  ušt32_t $g‘_du¿tiÚ (* u£r_d©a ) 1330  medŸ_¶ay” * mp = u£r_d©a ; 1332  mp -> du¿tiÚ ; 1333 } } 1335  $£t_vÞume ( ušt8_t vÞume ,  btd_deviû * dev , * u£r_d©a ) 1337  medŸ_¶ay” * mp = u£r_d©a ; 1338 GSLi¡ * l ; 1340 ià( mp -> vÞume == volume) 1343 mp -> vÞume = volume; 1345  l = mp -> ad­‹r -> ’dpošts ;†;† =†-> Ãxt ) { 1346  medŸ_’dpošt * ’dpošt = l -> d©a ; 1347  medŸ_Œª¥Üt * Œª¥Üt ; 1350 ià( ’dpošt -> £p =ð NULL ) 1353 Œª¥Üt = `fšd_deviû_Œª¥Üt ( ’dpošt , dev ); 1354 ià( Œª¥Üt =ð NULL ) 1357 `medŸ_Œª¥Üt_upd©e_vÞume ( Œª¥Üt , vÞume ); 1359 } } 1361  boÞ $medŸ_¶ay”_£nd ( medŸ_¶ay” * mp , cÚ¡ * Çme ) 1363 DBusMes§ge * msg ; 1365 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( mp -> £nd” , mp-> ·th , 1366 MEDIA_PLAYER_INTERFACE , Çme ); 1367 ià( msg =ð NULL ) { 1368 `”rÜ ("Couldn't‡llocate D-Bus message"); 1369  çl£ ; 1372 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), msg ); 1374  Œue ; 1375 } } 1377  boÞ $¶ay (* u£r_d©a ) 1379  medŸ_¶ay” * mp = u£r_d©a ; 1381 `DBG (""); 1383 ià(! mp -> ¶ay || !mp-> cÚŒÞ ) 1384  çl£ ; 1386  `medŸ_¶ay”_£nd ( mp , "Play"); 1387 } } 1389  boÞ $¡Ý (* u£r_d©a ) 1391  medŸ_¶ay” * mp = u£r_d©a ; 1393 `DBG (""); 1395 ià(! mp -> cÚŒÞ ) 1396  çl£ ; 1398  `medŸ_¶ay”_£nd ( mp , "Stop"); 1399 } } 1401  boÞ $·u£ (* u£r_d©a ) 1403  medŸ_¶ay” * mp = u£r_d©a ; 1405 `DBG (""); 1407 ià(! mp -> ·u£ || !mp-> cÚŒÞ ) 1408  çl£ ; 1410  `medŸ_¶ay”_£nd ( mp , "Pause"); 1411 } } 1413  boÞ $Ãxt (* u£r_d©a ) 1415  medŸ_¶ay” * mp = u£r_d©a ; 1417 `DBG (""); 1419 ià(! mp -> Ãxt || !mp-> cÚŒÞ ) 1420  çl£ ; 1422  `medŸ_¶ay”_£nd ( mp , "Next"); 1423 } } 1425  boÞ $´evious (* u£r_d©a ) 1427  medŸ_¶ay” * mp = u£r_d©a ; 1429 `DBG (""); 1431 ià(! mp -> ´evious || !mp-> cÚŒÞ ) 1432  çl£ ; 1434  `medŸ_¶ay”_£nd ( mp , "Previous"); 1435 } } 1437  avrý_¶ay”_cb g¶ay”_cb = { 1438 . li¡_£‰šgs =†ist_settings, 1439 . gg‘_£‰šg = g‘_£‰šg , 1440 . g£t_£‰šg = £t_£‰šg , 1441 . gli¡_m‘ad©a = li¡_m‘ad©a , 1442 . gg‘_uid = g‘_uid , 1443 . gg‘_m‘ad©a = g‘_m‘ad©a , 1444 . gg‘_pos™iÚ = g‘_pos™iÚ , 1445 . gg‘_du¿tiÚ = g‘_du¿tiÚ , 1446 . gg‘_¡©us = g‘_¡©us , 1447 . g£t_vÞume = £t_vÞume , 1448 . g¶ay = ¶ay , 1449 . g¡Ý = ¡Ý , 1450 . g·u£ = ·u£ , 1451 . gÃxt = Ãxt , 1452 . g´evious = ´evious , 1455  $medŸ_¶ay”_ex™ ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 1457  medŸ_¶ay” * mp = u£r_d©a ; 1459 mp -> w©ch = 0; 1460 `medŸ_¶ay”_»move ( mp ); 1461 } } 1463  gboÞ—n $£t_¡©us ( medŸ_¶ay” * mp , DBusMes§geI‹r * ™” ) 1465 cÚ¡ * v®ue ; 1466 #ifdeà __TIZEN_PATCH__ 1467 ušt32_t ¶ayback_pos™iÚ ; 1470 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) 1471  FALSE ; 1473 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 1474 `DBG ("Stus=%s", v®ue ); 1476 ià( `g_¡rcmp0 ( mp -> ¡©us , v®ue ) == 0) 1477  TRUE ; 1479 mp -> pos™iÚ = `g‘_pos™iÚ (mp); 1480 `g_tim”_¡¬t ( mp -> tim” ); 1482 `g_ä“ ( mp -> ¡©us ); 1483 mp -> ¡©us = `g_¡rdup ( v®ue ); 1485 `avrý_¶ay”_ev’t ( mp -> ¶ay” , AVRCP_EVENT_STATUS_CHANGED , mp-> ¡©us ); 1486 #ifdeà __TIZEN_PATCH__ 1487 ià( `¡rÿ£cmp ( mp -> ¡©us , "reverse-seek") != 0) { 1488 ¶ayback_pos™iÚ = `g‘_pos™iÚ ( mp ); 1489 `avrý_¶ay”_ev’t ( mp -> ¶ay” , AVRCP_EVENT_PLAYBACK_POS_CHANGED , 1490 & ¶ayback_pos™iÚ ); 1494  TRUE ; 1495 } } 1497  gboÞ—n $£t_pos™iÚ ( medŸ_¶ay” * mp , DBusMes§geI‹r * ™” ) 1499 #ifdeà __TIZEN_PATCH__ 1500 ušt32_t v®ue ; 1502 ušt64_t v®ue ; 1503 cÚ¡ * ¡©us ; 1505 #ifdeà __TIZEN_PATCH__ 1506 ušt32_t ¶ayback_pos™iÚ ; 1509 #iâdeà __TIZEN_PATCH__ 1510 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_INT64 ) 1511  FALSE ; 1513 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_UINT32 ) 1514  FALSE ; 1516 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 1518 #iâdeà __TIZEN_PATCH__ 1519 v®ue /= 1000; 1521 `DBG ("V®u%d", v®ue ); 1522 #iâdeà __TIZEN_PATCH__ 1523 ià( v®ue > `g‘_pos™iÚ ( mp )) 1524 ¡©us = "forward-seek"; 1526 ¡©us = "reverse-seek"; 1529 mp -> pos™iÚ = v®ue ; 1530 `g_tim”_¡¬t ( mp -> tim” ); 1532 `DBG ("Pos™iÚ=%u", mp -> pos™iÚ ); 1534 ià(! mp -> pos™iÚ ) { 1535 `avrý_¶ay”_ev’t ( mp -> ¶ay” , 1536 AVRCP_EVENT_TRACK_REACHED_START , NULL ); 1537 #ifdeà __TIZEN_PATCH__ 1538 ¶ayback_pos™iÚ = `g‘_pos™iÚ ( mp ); 1539 `avrý_¶ay”_ev’t ( mp -> ¶ay” , AVRCP_EVENT_PLAYBACK_POS_CHANGED , 1540 & ¶ayback_pos™iÚ ); 1543  TRUE ; 1550 ià( mp -> pos™iÚ =ð UINT32_MAX || mp->pos™iÚ >ðmp-> du¿tiÚ ) { 1551 `avrý_¶ay”_ev’t ( mp -> ¶ay” , AVRCP_EVENT_TRACK_REACHED_END , 1552 NULL ); 1553 #ifdeà __TIZEN_PATCH__ 1554 ¶ayback_pos™iÚ = `g‘_pos™iÚ ( mp ); 1555 `avrý_¶ay”_ev’t ( mp -> ¶ay” , AVRCP_EVENT_PLAYBACK_POS_CHANGED , 1556 & ¶ayback_pos™iÚ ); 1558  TRUE ; 1561 #iâdeà __TIZEN_PATCH__ 1563 `avrý_¶ay”_ev’t ( mp -> ¶ay” , AVRCP_EVENT_STATUS_CHANGED , ¡©us ); 1565 #ifdeà __TIZEN_PATCH__ 1566 ¶ayback_pos™iÚ = `g‘_pos™iÚ ( mp ); 1567 `avrý_¶ay”_ev’t ( mp -> ¶ay” , AVRCP_EVENT_PLAYBACK_POS_CHANGED , 1568 & ¶ayback_pos™iÚ ); 1571  TRUE ; 1572 } } 1574  $£t_m‘ad©a ( medŸ_¶ay” * mp , cÚ¡ * key , 1575 cÚ¡ * v®ue ) 1577 #ifdeà __TIZEN_PATCH__ 1578 cÚ¡ * cu¼’t_v®ue = NULL ; 1580 cu¼’t_v®ue = `g_hash_bË_lookup ( mp -> Œack , key ); 1582 ià(( `g_¡rcmp0 ( v®ue , cu¼’t_v®ue ) != 0) && 1583 ( £nd_Œack_chªged_ev’t =ð FALSE )) 1584 £nd_Œack_chªged_ev’t = TRUE ; 1586 `DBG ("%s=%s", key , v®ue ); 1587 `g_hash_bË_»¶aû ( mp -> Œack , `g_¡rdup ( key ), g_¡rdup( v®ue )); 1588 } } 1590  gboÞ—n $·r£_¡ršg_m‘ad©a ( medŸ_¶ay” * mp , cÚ¡ * key , 1591 DBusMes§geI‹r * ™” ) 1593 cÚ¡ * v®ue ; 1595 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) 1596  FALSE ; 1598 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 1600 `£t_m‘ad©a ( mp , key , v®ue ); 1602  TRUE ; 1603 } } 1605  gboÞ—n $·r£_¬¿y_m‘ad©a ( medŸ_¶ay” * mp , cÚ¡ * key , 1606 DBusMes§geI‹r * ™” ) 1608 DBusMes§geI‹r ¬¿y ; 1609 cÚ¡ * v®ue ; 1611 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY ) 1612  FALSE ; 1614 `dbus_mes§ge_™”_»cur£ ( ™” , & ¬¿y ); 1616 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y è=ð DBUS_TYPE_INVALID ) 1617  TRUE ; 1619 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y è!ð DBUS_TYPE_STRING ) 1620  FALSE ; 1622 `dbus_mes§ge_™”_g‘_basic (& ¬¿y , & v®ue ); 1624 `£t_m‘ad©a ( mp , key , v®ue ); 1626  TRUE ; 1627 } } 1629  gboÞ—n $·r£_št64_m‘ad©a ( medŸ_¶ay” * mp , cÚ¡ * key , 1630 DBusMes§geI‹r * ™” ) 1632 ušt64_t v®ue ; 1633  v®¡r [20]; 1634  ty³ ; 1636 ty³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” ); 1637 ià( ty³ =ð DBUS_TYPE_UINT64 ) 1638 `w¬n ("expected DBUS_TYPE_INT64 got DBUS_TYPE_UINT64"); 1639 ià( ty³ !ð DBUS_TYPE_INT64 ) 1640  FALSE ; 1642 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 1644 ià( `¡rÿ£cmp ( key , "Duration") == 0) { 1645 #iâdeà __TIZEN_PATCH__ 1646 v®ue /= 1000; 1648 mp -> du¿tiÚ = v®ue ; 1651 `¢´štf ( v®¡r , 20, "%" PRIu64 , v®ue ); 1653 `£t_m‘ad©a ( mp , key , v®¡r ); 1655  TRUE ; 1656 } } 1658  gboÞ—n $·r£_št32_m‘ad©a ( medŸ_¶ay” * mp , cÚ¡ * key , 1659 DBusMes§geI‹r * ™” ) 1661 ušt32_t v®ue ; 1662  v®¡r [20]; 1663  ty³ ; 1665 ty³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” ); 1666 ià( ty³ =ð DBUS_TYPE_UINT32 ) 1667 `w¬n ("expected DBUS_TYPE_INT32 got DBUS_TYPE_UINT32"); 1668 ià( ty³ !ð DBUS_TYPE_INT32 ) 1669  FALSE ; 1671 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 1673 `¢´štf ( v®¡r , 20, "%u", v®ue ); 1675 `£t_m‘ad©a ( mp , key , v®¡r ); 1677  TRUE ; 1678 } } 1680  gboÞ—n $·r£_¶ay”_m‘ad©a ( medŸ_¶ay” * mp , 1681 DBusMes§geI‹r * ™” ) 1683 DBusMes§geI‹r diù ; 1684 DBusMes§geI‹r v¬ ; 1685  ùy³ ; 1686 gboÞ—n t™Ë = FALSE ; 1687 ušt64_t uid ; 1688 #ifdeà __TIZEN_PATCH__ 1689 ušt32_t ¶ayback_pos™iÚ ; 1692 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” ); 1693 ià( ùy³ !ð DBUS_TYPE_ARRAY ) 1694  FALSE ; 1696 `dbus_mes§ge_™”_»cur£ ( ™” , & diù ); 1698 #iâdeà __TIZEN_PATCH__ 1699 ià( mp -> Œack !ð NULL ) 1700 `g_hash_bË_uÄef ( mp -> Œack ); 1702 mp -> Œack = `g_hash_bË_Ãw_fuÎ ( g_¡r_hash , g_¡r_equ® , g_ä“ , 1703 g_ä“ ); 1706 ( ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& diù )) != 1707 DBUS_TYPE_INVALID ) { 1708 DBusMes§geI‹r ’Œy ; 1709 cÚ¡ * key ; 1711 ià( ùy³ !ð DBUS_TYPE_DICT_ENTRY ) 1712  FALSE ; 1714 `dbus_mes§ge_™”_»cur£ (& diù , & ’Œy ); 1715 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy è!ð DBUS_TYPE_STRING ) 1716  FALSE ; 1718 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & key ); 1719 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 1721 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy è!ð DBUS_TYPE_VARIANT ) 1722  FALSE ; 1724 `dbus_mes§ge_™”_»cur£ (& ’Œy , & v¬ ); 1726 ià( `¡rÿ£cmp ( key , "xesam:title") == 0) { 1727 ià(! `·r£_¡ršg_m‘ad©a ( mp , "T™Ë", & v¬ )) 1728  FALSE ; 1729 t™Ë = TRUE ; 1730 } ià( `¡rÿ£cmp ( key , "xesam:artist") == 0) { 1731 ià(! `·r£_¬¿y_m‘ad©a ( mp , "A¹i¡", & v¬ )) 1732  FALSE ; 1733 } ià( `¡rÿ£cmp ( key , "xesam:album") == 0) { 1734 ià(! `·r£_¡ršg_m‘ad©a ( mp , "Album", & v¬ )) 1735  FALSE ; 1736 } ià( `¡rÿ£cmp ( key , "xesam:genre") == 0) { 1737 ià(! `·r£_¬¿y_m‘ad©a ( mp , "G’»", & v¬ )) 1738  FALSE ; 1739 } ià( `¡rÿ£cmp ( key , "mpris:length") == 0) { 1740 ià(! `·r£_št64_m‘ad©a ( mp , "Du¿tiÚ", & v¬ )) 1741  FALSE ; 1742 #ifdeà __TIZEN_PATCH__ 1743 } ià( `¡rÿ£cmp ( key , "xesam:totalTracks") == 0) { 1744 ià(! `·r£_št32_m‘ad©a ( mp , "Numb”OfT¿cks", & v¬ )) 1745  FALSE ; 1747 } ià( `¡rÿ£cmp ( key , "xesam:trackNumber") == 0) { 1748 ià(! `·r£_št32_m‘ad©a ( mp , "T¿ckNumb”", & v¬ )) 1749  FALSE ; 1751 `DBG ("% nÙ suµÜ‹d, ignÜšg", key ); 1753 `dbus_mes§ge_™”_Ãxt (& diù ); 1756 ià( t™Ë =ð FALSE ) 1757 `g_hash_bË_š£¹ ( mp -> Œack , `g_¡rdup ("Title"), 1758 `g_¡rdup ("")); 1760 #ifdeà __TIZEN_PATCH__ 1761 ià( £nd_Œack_chªged_ev’t ) { 1762 uid = `g‘_uid ( mp ); 1763 `avrý_¶ay”_ev’t ( mp -> ¶ay” , 1764 AVRCP_EVENT_TRACK_CHANGED , & uid ); 1765 £nd_Œack_chªged_ev’t = FALSE ; 1767 ¶ayback_pos™iÚ = `g‘_pos™iÚ ( mp ); 1768 `avrý_¶ay”_ev’t ( mp -> ¶ay” , 1769 AVRCP_EVENT_PLAYBACK_POS_CHANGED , & ¶ayback_pos™iÚ ); 1772 mp -> pos™iÚ = 0; 1773 `g_tim”_¡¬t ( mp -> tim” ); 1774 uid = `g‘_uid ( mp ); 1776 `avrý_¶ay”_ev’t ( mp -> ¶ay” , AVRCP_EVENT_TRACK_CHANGED , & uid ); 1777 `avrý_¶ay”_ev’t ( mp -> ¶ay” , AVRCP_EVENT_TRACK_REACHED_START , NULL ); 1779  TRUE ; 1780 } } 1782  gboÞ—n $£t_´Ý”ty ( medŸ_¶ay” * mp , cÚ¡ * key , 1783 cÚ¡ * v®ue ) 1785 cÚ¡ * curv® ; 1787 curv® = `g_hash_bË_lookup ( mp -> £‰šgs , key ); 1788 ià( `g_¡rcmp0 ( curv® , v®ue ) == 0) 1789  TRUE ; 1791 `DBG ("%s=%s", key , v®ue ); 1793 `g_hash_bË_»¶aû ( mp -> £‰šgs , `g_¡rdup ( key ), g_¡rdup( v®ue )); 1795 `avrý_¶ay”_ev’t ( mp -> ¶ay” , AVRCP_EVENT_SETTINGS_CHANGED , key ); 1797  TRUE ; 1798 } } 1800  gboÞ—n $£t_shufæe ( medŸ_¶ay” * mp , DBusMes§geI‹r * ™” ) 1802 dbus_boÞ_t v®ue ; 1803 cÚ¡ * ¡rv®ue ; 1805 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_BOOLEAN ) 1806  FALSE ; 1808 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 1810 ¡rv®ue = v®ue ? "alltracks" : "off"; 1812  `£t_´Ý”ty ( mp , "Shufæe", ¡rv®ue ); 1813 } } 1815 cÚ¡ * $loÝ_¡©us_to_»³© (cÚ¡ * v®ue ) 1817 ià( `¡rÿ£cmp ( v®ue , "None") == 0) 1819 ià( `¡rÿ£cmp ( v®ue , "Track") == 0) 1821 ià( `¡rÿ£cmp ( v®ue , "Playlist") == 0) 1824  NULL ; 1825 } } 1827  gboÞ—n $£t_»³© ( medŸ_¶ay” * mp , DBusMes§geI‹r * ™” ) 1829 cÚ¡ * v®ue ; 1831 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) 1832  FALSE ; 1834 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 1836 v®ue = `loÝ_¡©us_to_»³© (value); 1837 ià( v®ue =ð NULL ) 1838  FALSE ; 1840  `£t_´Ý”ty ( mp , "R•—t", v®ue ); 1841 } } 1843  gboÞ—n $£t_æag ( medŸ_¶ay” * mp , DBusMes§geI‹r * ™” , 1844 boÞ * v¬ ) 1846 dbus_boÞ_t v®ue ; 1848 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_BOOLEAN ) 1849  FALSE ; 1851 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 1853 * v¬ = v®ue ; 1855  TRUE ; 1856 } } 1858  gboÞ—n $£t_¶ay”_´Ý”ty ( medŸ_¶ay” * mp , cÚ¡ * key , 1859 DBusMes§geI‹r * ’Œy ) 1861 DBusMes§geI‹r v¬ ; 1863 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ’Œy è!ð DBUS_TYPE_VARIANT ) 1864  FALSE ; 1866 `dbus_mes§ge_™”_»cur£ ( ’Œy , & v¬ ); 1868 ià( `¡rÿ£cmp ( key , "PlaybackStatus") == 0) 1869  `£t_¡©us ( mp , & v¬ ); 1871 ià( `¡rÿ£cmp ( key , "Position") == 0) 1872  `£t_pos™iÚ ( mp , & v¬ ); 1874 ià( `¡rÿ£cmp ( key , "Metadata") == 0) 1875  `·r£_¶ay”_m‘ad©a ( mp , & v¬ ); 1877 ià( `¡rÿ£cmp ( key , "Shuffle") == 0) 1878  `£t_shufæe ( mp , & v¬ ); 1880 ià( `¡rÿ£cmp ( key , "LoopStatus") == 0) 1881  `£t_»³© ( mp , & v¬ ); 1883 ià( `¡rÿ£cmp ( key , "CanPlay") == 0) 1884  `£t_æag ( mp , & v¬ , &mp-> ¶ay ); 1886 ià( `¡rÿ£cmp ( key , "CanPause") == 0) 1887  `£t_æag ( mp , & v¬ , &mp-> ·u£ ); 1889 ià( `¡rÿ£cmp ( key , "CanGoNext") == 0) 1890  `£t_æag ( mp , & v¬ , &mp-> Ãxt ); 1892 ià( `¡rÿ£cmp ( key , "CanGoPrevious") == 0) 1893  `£t_æag ( mp , & v¬ , &mp-> ´evious ); 1895 ià( `¡rÿ£cmp ( key , "CanControl") == 0) 1896  `£t_æag ( mp , & v¬ , &mp-> cÚŒÞ ); 1898 `DBG ("% nÙ suµÜ‹d, ignÜšg", key ); 1900  TRUE ; 1901 } } 1903  gboÞ—n $·r£_¶ay”_´Ý”t›s ( medŸ_¶ay” * mp , 1904 DBusMes§geI‹r * ™” ) 1906 DBusMes§geI‹r diù ; 1907  ùy³ ; 1909 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” ); 1910 ià( ùy³ !ð DBUS_TYPE_ARRAY ) 1911  FALSE ; 1913 `dbus_mes§ge_™”_»cur£ ( ™” , & diù ); 1915 ( ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& diù )) != 1916 DBUS_TYPE_INVALID ) { 1917 DBusMes§geI‹r ’Œy ; 1918 cÚ¡ * key ; 1920 ià( ùy³ !ð DBUS_TYPE_DICT_ENTRY ) 1921  FALSE ; 1923 `dbus_mes§ge_™”_»cur£ (& diù , & ’Œy ); 1924 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy è!ð DBUS_TYPE_STRING ) 1925  FALSE ; 1927 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & key ); 1928 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 1930 ià( `£t_¶ay”_´Ý”ty ( mp , key , & ’Œy è=ð FALSE ) 1931  FALSE ; 1933 `dbus_mes§ge_™”_Ãxt (& diù ); 1936  TRUE ; 1937 } } 1939  gboÞ—n $´Ý”t›s_chªged ( DBusCÚÃùiÚ * cÚÃùiÚ , DBusMes§ge * msg , 1940 * u£r_d©a ) 1942  medŸ_¶ay” * mp = u£r_d©a ; 1943 DBusMes§geI‹r ™” ; 1945 `DBG ("£nd”=% ·th=%s", mp -> £nd” , mp-> ·th ); 1947 `dbus_mes§ge_™”_š™ ( msg , & ™” ); 1949 `dbus_mes§ge_™”_Ãxt (& ™” ); 1951 `·r£_¶ay”_´Ý”t›s ( mp , & ™” ); 1953  TRUE ; 1954 } } 1956  gboÞ—n $pos™iÚ_chªged ( DBusCÚÃùiÚ * cÚÃùiÚ , DBusMes§ge * msg , 1957 * u£r_d©a ) 1959  medŸ_¶ay” * mp = u£r_d©a ; 1960 DBusMes§geI‹r ™” ; 1962 `DBG ("£nd”=% ·th=%s", mp -> £nd” , mp-> ·th ); 1964 `dbus_mes§ge_™”_š™ ( msg , & ™” ); 1966 `£t_pos™iÚ ( mp , & ™” ); 1968  TRUE ; 1969 } } 1971  medŸ_¶ay” * $medŸ_¶ay”_ü—‹ ( medŸ_ad­‹r * ad­‹r , 1972 cÚ¡ * £nd” , 1973 cÚ¡ * ·th , 1974 * ”r ) 1976 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 1977  medŸ_¶ay” * mp ; 1979 mp = `g_Ãw0 ( medŸ_¶ay” , 1); 1980 mp -> ad­‹r =‡dapter; 1981 mp -> £nd” = `g_¡rdup (sender); 1982 mp -> ·th = `g_¡rdup (path); 1983 mp -> tim” = `g_tim”_Ãw (); 1985 mp -> w©ch = `g_dbus_add_discÚÃù_w©ch ( cÚn , £nd” , 1986 medŸ_¶ay”_ex™ , mp , 1987 NULL ); 1988 mp -> ´Ý”t›s_w©ch = `g_dbus_add_´Ý”t›s_w©ch ( cÚn , £nd” , 1989 ·th , MEDIA_PLAYER_INTERFACE , 1990 ´Ý”t›s_chªged , 1991 mp , NULL ); 1992 mp -> £ek_w©ch = `g_dbus_add_sigÇl_w©ch ( cÚn , £nd” , 1993 ·th , MEDIA_PLAYER_INTERFACE , 1994 "S“ked", pos™iÚ_chªged , 1995 mp , NULL ); 1996 mp -> ¶ay” = `avrý_»gi¡”_¶ay” ( ad­‹r -> btd_ad­‹r , & ¶ay”_cb , 1997 mp , medŸ_¶ay”_ä“ ); 1998 ià(! mp -> ¶ay” ) { 1999 ià( ”r ) 2000 * ”r = - EPROTONOSUPPORT ; 2001 `medŸ_¶ay”_de¡roy ( mp ); 2002  NULL ; 2005 mp -> £‰šgs = `g_hash_bË_Ãw_fuÎ ( g_¡r_hash , g_¡r_equ® , g_ä“ , 2006 g_ä“ ); 2007 #ifdeà __TIZEN_PATCH__ 2008 mp -> Œack = `g_hash_bË_Ãw_fuÎ ( g_¡r_hash , g_¡r_equ® , g_ä“ , 2009 g_ä“ ); 2012 ad­‹r -> ¶ay”s = `g_¦i¡_­³nd ×d­‹r->¶ay”s, mp ); 2014 `šfo ("PÏy”„egi¡”ed: s’d”=% ·th=%s", £nd” , ·th ); 2016 ià( ”r ) 2017 * ”r = 0; 2019  mp ; 2020 } } 2022  DBusMes§ge * $»gi¡”_¶ay” ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 2023 * d©a ) 2025  medŸ_ad­‹r * ad­‹r = d©a ; 2026  medŸ_¶ay” * mp ; 2027 DBusMes§geI‹r ¬gs ; 2028 cÚ¡ * £nd” , * ·th ; 2029  ”r ; 2031 £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 2033 `dbus_mes§ge_™”_š™ ( msg , & ¬gs ); 2035 `dbus_mes§ge_™”_g‘_basic (& ¬gs , & ·th ); 2036 `dbus_mes§ge_™”_Ãxt (& ¬gs ); 2038 ià( `medŸ_ad­‹r_fšd_¶ay” ( ad­‹r , £nd” , ·th è!ð NULL ) 2039  `btd_”rÜ_®»ady_exi¡s ( msg ); 2041 mp = `medŸ_¶ay”_ü—‹ ( ad­‹r , £nd” , ·th , & ”r ); 2042 ià( mp =ð NULL ) { 2043 ià( ”r =ð- EPROTONOSUPPORT ) 2044  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 2046  `btd_”rÜ_šv®id_¬gs ( msg ); 2049 ià( `·r£_¶ay”_´Ý”t›s ( mp , & ¬gs è=ð FALSE ) { 2050 `medŸ_¶ay”_de¡roy ( mp ); 2051  `btd_”rÜ_šv®id_¬gs ( msg ); 2054  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 2055 } } 2057  DBusMes§ge * $uÄegi¡”_¶ay” ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 2058 * d©a ) 2060  medŸ_ad­‹r * ad­‹r = d©a ; 2061  medŸ_¶ay” * ¶ay” ; 2062 cÚ¡ * £nd” , * ·th ; 2064 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 2065 DBUS_TYPE_OBJECT_PATH , & ·th , 2066 DBUS_TYPE_INVALID )) 2067  `btd_”rÜ_šv®id_¬gs ( msg ); 2069 £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 2071 ¶ay” = `medŸ_ad­‹r_fšd_¶ay” ( ad­‹r , £nd” , ·th ); 2072 ià( ¶ay” =ð NULL ) 2073  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 2075 `medŸ_¶ay”_»move ( ¶ay” ); 2077  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 2078 } } 2080 cÚ¡ GDBusM‘hodTabË gmedŸ_m‘hods [] = { 2081 { GDBUS_METHOD ("RegisterEndpoint", 2082 GDBUS_ARGS ({ "endpoint", "o" }, { "properties", "a{sv}" }), 2083 NULL , »gi¡”_’dpošt ) }, 2084 { GDBUS_METHOD ("UnregisterEndpoint", 2085 GDBUS_ARGS ({ "’dpošt", "o" }), NULL , uÄegi¡”_’dpošt ) }, 2086 #iâdeà __TIZEN_PATCH__ 2087 { GDBUS_EXPERIMENTAL_METHOD ("RegisterPlayer", 2088 GDBUS_ARGS ({ "player", "o" }, { "properties", "a{sv}" }), 2089 NULL , »gi¡”_¶ay” ) }, 2090 { GDBUS_EXPERIMENTAL_METHOD ("UnregisterPlayer", 2091 GDBUS_ARGS ({ "¶ay”", "o" }), NULL , uÄegi¡”_¶ay” ) }, 2093 { GDBUS_METHOD ("RegisterPlayer", 2094 GDBUS_ARGS ({ "player", "o" }, { "properties", "a{sv}" }), 2095 NULL , »gi¡”_¶ay” ) }, 2096 { GDBUS_METHOD ("UnregisterPlayer", 2097 GDBUS_ARGS ({ "¶ay”", "o" }), NULL , uÄegi¡”_¶ay” ) }, 2102  $·th_ä“ (* d©a ) 2104  medŸ_ad­‹r * ad­‹r = d©a ; 2106  ad­‹r -> ’dpošts ) 2107 `»Ëa£_’dpošt ( ad­‹r -> ’dpošts -> d©a ); 2109  ad­‹r -> ¶ay”s ) 2110 `medŸ_¶ay”_de¡roy ( ad­‹r -> ¶ay”s -> d©a ); 2112 ad­‹rs = `g_¦i¡_»move ×d­‹rs, ad­‹r ); 2114 `btd_ad­‹r_uÄef ( ad­‹r -> btd_ad­‹r ); 2115 `g_ä“ ( ad­‹r ); 2116 } } 2118  $medŸ_»gi¡” ( btd_ad­‹r *btd_adapter) 2120  medŸ_ad­‹r * ad­‹r ; 2122 ad­‹r = `g_Ãw0 ( medŸ_ad­‹r , 1); 2123 ad­‹r -> btd_ad­‹r = `btd_ad­‹r_»f (btd_adapter); 2125 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 2126 `ad­‹r_g‘_·th ( btd_ad­‹r ), 2127 MEDIA_INTERFACE , 2128 medŸ_m‘hods , NULL , NULL, 2129 ad­‹r , ·th_ä“ )) { 2130 `”rÜ ("D-Bus failedo„egister %s…ath", 2131 `ad­‹r_g‘_·th ( btd_ad­‹r )); 2132 `·th_ä“ ( ad­‹r ); 2136 ad­‹rs = `g_¦i¡_­³nd ×d­‹rs, ad­‹r ); 2139 } } 2141  $medŸ_uÄegi¡” ( btd_ad­‹r *btd_adapter) 2143 GSLi¡ * l ; 2145  l = ad­‹rs ;†;† =†-> Ãxt ) { 2146  medŸ_ad­‹r * ad­‹r = l -> d©a ; 2148 ià( ad­‹r -> btd_ad­‹r == btd_adapter) { 2149 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 2150 `ad­‹r_g‘_·th ( btd_ad­‹r ), 2151 MEDIA_INTERFACE ); 2155 } } 2157  a2dp_£p * $medŸ_’dpošt_g‘_£p ( medŸ_’dpošt * ’dpošt ) 2159  ’dpošt -> £p ; 2160 } } 2162 cÚ¡ * $medŸ_’dpošt_g‘_uuid ( medŸ_’dpošt * ’dpošt ) 2164  ’dpošt -> uuid ; 2165 } } 2167 ušt8_t $medŸ_’dpošt_g‘_codec ( medŸ_’dpošt * ’dpošt ) 2169  ’dpošt -> codec ; 2170 } } @profiles/audio/media.h 25  gmedŸ_’dpošt ; 27 (* tmedŸ_’dpošt_cb_t è( tmedŸ_’dpošt * t’dpošt , 28 * t»t ,  tsize , * tu£r_d©a ); 30  `medŸ_»gi¡” ( btd_ad­‹r *btd_adapter); 31  `medŸ_uÄegi¡” ( btd_ad­‹r *btd_adapter); 33  a2dp_£p * `medŸ_’dpošt_g‘_£p ( medŸ_’dpošt * ’dpošt ); 34 cÚ¡ * `medŸ_’dpošt_g‘_uuid ( medŸ_’dpošt * ’dpošt ); 35 ušt8_t `medŸ_’dpošt_g‘_codec ( medŸ_’dpošt * ’dpošt ); @profiles/audio/player.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dlib.h > 30  ~<¡dšt.h > 31  ~<š‰y³s.h > 32  ~<¡dboÞ.h > 33  ~<”ºo.h > 34  ~ 35  ~<¡ršg.h > 37  ~ 38  ~ 39  ~ 41  ~"¤c/log.h " 42  ~"¤c/dbus-commÚ.h " 43  ~"¤c/”rÜ.h " 45  ~"¶ay”.h " 47  #MEDIA_PLAYER_INTERFACE "Üg.bluez.MedŸPÏy”1" ) 48  #MEDIA_FOLDER_INTERFACE "Üg.bluez.MedŸFÞd”1" ) 49  #MEDIA_ITEM_INTERFACE "Üg.bluez.MedŸI‹m1" ) 51  s¶ay”_ÿÎback { 52 cÚ¡  medŸ_¶ay”_ÿÎback * mcbs ; 53 * mu£r_d©a ; 56  s³ndšg_»q { 57 GDBusP’dšgPrÝ”tyS‘ mid ; 58 cÚ¡ * mkey ; 59 cÚ¡ * mv®ue ; 62  smedŸ_™em { 63  medŸ_¶ay” * m¶ay” ; 64 * m·th ; 65 * mÇme ; 66 ¶ay”_™em_ty³_t mty³ ; 67 ¶ay”_fÞd”_ty³_t mfÞd”_ty³ ; 68 boÞ m¶ayabË ; 69 ušt64_t muid ; 70 GHashTabË * mm‘ad©a ; 73  smedŸ_fÞd” { 74  medŸ_fÞd” * m·»Á ; 75  medŸ_™em * m™em ; 76 ušt32_t mnumb”_of_™ems ; 77 GSLi¡ * msubfÞd”s ; 78 GSLi¡ * m™ems ; 79 DBusMes§ge * mmsg ; 82  smedŸ_¶ay” { 83 * mdeviû ; 84 * mÇme ; 85 * mty³ ; 86 * msubty³ ; 87 boÞ mbrow§bË ; 88 boÞ m£¬chabË ; 89  medŸ_fÞd” * mscÝe ; 90  medŸ_fÞd” * mfÞd” ; 91  medŸ_fÞd” * m£¬ch ; 92  medŸ_fÞd” * m¶ayli¡ ; 93 * m·th ; 94 GHashTabË * m£‰šgs ; 95 GHashTabË * mŒack ; 96 * m¡©us ; 97 ušt32_t mpos™iÚ ; 98 GTim” * m´og»ss ; 99 gušt m´oûss_id ; 100  ¶ay”_ÿÎback * mcb ; 101 GSLi¡ * m³ndšg ; 102 GSLi¡ * mfÞd”s ; 105  $­³nd_Œack (* key , * v®ue , * u£r_d©a ) 107 DBusMes§geI‹r * diù = u£r_d©a ; 108 cÚ¡ * ¡rkey = key ; 110 ià( `¡rÿ£cmp ( ¡rkey , "Duration") == 0 || 111 `¡rÿ£cmp ( ¡rkey , "TrackNumber") == 0 || 112 `¡rÿ£cmp ( ¡rkey , "NumberOfTracks") == 0) { 113 ušt32_t num = `©oi ( v®ue ); 114 `diù_­³nd_’Œy ( diù , key , DBUS_TYPE_UINT32 , & num ); 115 } ià( `¡rÿ£cmp ( ¡rkey , "Item") == 0) { 116 `diù_­³nd_’Œy ( diù , key , DBUS_TYPE_OBJECT_PATH , & v®ue ); 118 `diù_­³nd_’Œy ( diù , key , DBUS_TYPE_STRING , & v®ue ); 120 } } 122  ³ndšg_»q * $fšd_³ndšg ( medŸ_¶ay” * mp , 123 cÚ¡ * key ) 125 GSLi¡ * l ; 127  l = mp -> ³ndšg ;†;† =†-> Ãxt ) { 128  ³ndšg_»q * p = l -> d©a ; 130 ià( `¡rÿ£cmp ( key , p ->key) == 0) 131  p ; 134  NULL ; 135 } } 137  ³ndšg_»q * $³ndšg_Ãw ( GDBusP’dšgPrÝ”tyS‘ id , 138 cÚ¡ * key , cÚ¡ * v®ue ) 140  ³ndšg_»q * p ; 142 p = `g_Ãw0 ( ³ndšg_»q , 1); 143 p -> id = id; 144 p -> key = key; 145 p -> v®ue = value; 147  p ; 148 } } 150  ušt32_t $medŸ_¶ay”_g‘_pos™iÚ ( medŸ_¶ay” * mp ) 152  timed– ; 153 ušt32_t £c , m£c ; 155 ià( `g_¡rcmp0 ( mp -> ¡©us , "playing") != 0 || 156 mp -> pos™iÚ =ð UINT32_MAX ) 157  mp -> pos™iÚ ; 159 timed– = `g_tim”_–­£d ( mp -> ´og»ss , NULL ); 161 £c = ( ušt32_t è timed– ; 162 m£c = ( ušt32_t è(( timed– - £c ) * 1000); 164  mp -> pos™iÚ + £c * 1000 + m£c ; 165 } } 167  gboÞ—n $g‘_pos™iÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 168 DBusMes§geI‹r * ™” , * d©a ) 170  medŸ_¶ay” * mp = d©a ; 171 ušt32_t pos™iÚ ; 173 pos™iÚ = `medŸ_¶ay”_g‘_pos™iÚ ( mp ); 175 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT32 , & pos™iÚ ); 177  TRUE ; 178 } } 180  gboÞ—n $¡©us_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 182  medŸ_¶ay” * mp = d©a ; 184  mp -> ¡©us !ð NULL ; 185 } } 187  gboÞ—n $g‘_¡©us (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 188 DBusMes§geI‹r * ™” , * d©a ) 190  medŸ_¶ay” * mp = d©a ; 192 ià( mp -> ¡©us =ð NULL ) 193  FALSE ; 195 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & mp -> ¡©us ); 197  TRUE ; 198 } } 200  gboÞ—n $£‰šg_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 202  medŸ_¶ay” * mp = d©a ; 203 cÚ¡ * v®ue ; 205 v®ue = `g_hash_bË_lookup ( mp -> £‰šgs , ´Ý”ty -> Çme ); 207  v®ue ? TRUE : FALSE ; 208 } } 210  gboÞ—n $g‘_£‰šg (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 211 DBusMes§geI‹r * ™” , * d©a ) 213  medŸ_¶ay” * mp = d©a ; 214 cÚ¡ * v®ue ; 216 v®ue = `g_hash_bË_lookup ( mp -> £‰šgs , ´Ý”ty -> Çme ); 217 ià( v®ue =ð NULL ) 218  FALSE ; 220 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & v®ue ); 222  TRUE ; 223 } } 225  $¶ay”_£t_£‰šg ( medŸ_¶ay” * mp , 226 GDBusP’dšgPrÝ”tyS‘ id , 227 cÚ¡ * key , cÚ¡ * v®ue ) 229  ¶ay”_ÿÎback * cb = mp ->cb; 230  ³ndšg_»q * p ; 232 ià( cb =ð NULL || cb-> cbs -> £t_£‰šg == NULL) { 233 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 234 ERROR_INTERFACE ".NotSupported", 239 p = `fšd_³ndšg ( mp , key ); 240 ià( p !ð NULL ) { 241 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 242 ERROR_INTERFACE ".InProgress", 247 ià(! cb -> cbs -> `£t_£‰šg ( mp , key , v®ue , cb-> u£r_d©a )) { 248 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 249 ERROR_INTERFACE ".InvalidArguments", 254 p = `³ndšg_Ãw ( id , key , v®ue ); 256 mp -> ³ndšg = `g_¦i¡_­³nd (mp->³ndšg, p ); 257 } } 259  $£t_£‰šg (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 260 DBusMes§geI‹r * ™” , GDBusP’dšgPrÝ”tyS‘ id , 261 * d©a ) 263  medŸ_¶ay” * mp = d©a ; 264 cÚ¡ * v®ue , * cu¼’t ; 266 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) { 267 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 268 ERROR_INTERFACE ".InvalidArguments", 273 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 275 cu¼’t = `g_hash_bË_lookup ( mp -> £‰šgs , ´Ý”ty -> Çme ); 276 ià( `g_¡rcmp0 ( cu¼’t , v®ue ) == 0) { 277 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 281 `¶ay”_£t_£‰šg ( mp , id , ´Ý”ty -> Çme , v®ue ); 282 } } 284  gboÞ—n $Œack_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 286  medŸ_¶ay” * mp = d©a ; 288  `g_hash_bË_size ( mp -> Œack ) != 0; 289 } } 291  gboÞ—n $g‘_Œack (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 292 DBusMes§geI‹r * ™” , * d©a ) 294  medŸ_¶ay” * mp = d©a ; 295 DBusMes§geI‹r diù ; 297 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 298 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 299 DBUS_TYPE_STRING_AS_STRING 300 DBUS_TYPE_VARIANT_AS_STRING 301 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 302 & diù ); 304 `g_hash_bË_fÜ—ch ( mp -> Œack , ­³nd_Œack , & diù ); 306 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 308  TRUE ; 309 } } 311  gboÞ—n $g‘_deviû (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 312 DBusMes§geI‹r * ™” , * d©a ) 314  medŸ_¶ay” * mp = d©a ; 316 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , 317 & mp -> deviû ); 319  TRUE ; 320 } } 322  gboÞ—n $Çme_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 324  medŸ_¶ay” * mp = d©a ; 326  mp -> Çme !ð NULL ; 327 } } 329  gboÞ—n $g‘_Çme (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 330 DBusMes§geI‹r * ™” , * d©a ) 332  medŸ_¶ay” * mp = d©a ; 334 ià( mp -> Çme =ð NULL ) 335  FALSE ; 337 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & mp -> Çme ); 339  TRUE ; 340 } } 342  gboÞ—n $ty³_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 344  medŸ_¶ay” * mp = d©a ; 346  mp -> ty³ !ð NULL ; 347 } } 349  gboÞ—n $g‘_ty³ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 350 DBusMes§geI‹r * ™” , * d©a ) 352  medŸ_¶ay” * mp = d©a ; 354 ià( mp -> ty³ =ð NULL ) 355  FALSE ; 357 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & mp -> ty³ ); 359  TRUE ; 360 } } 362  gboÞ—n $subty³_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 364  medŸ_¶ay” * mp = d©a ; 366  mp -> subty³ !ð NULL ; 367 } } 369  gboÞ—n $g‘_subty³ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 370 DBusMes§geI‹r * ™” , * d©a ) 372  medŸ_¶ay” * mp = d©a ; 374 ià( mp -> subty³ =ð NULL ) 375  FALSE ; 377 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & mp -> subty³ ); 379  TRUE ; 380 } } 382  gboÞ—n $brow§bË_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 384  medŸ_¶ay” * mp = d©a ; 386  mp -> fÞd” !ð NULL ; 387 } } 389  gboÞ—n $g‘_brow§bË (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 390 DBusMes§geI‹r * ™” , * d©a ) 392  medŸ_¶ay” * mp = d©a ; 393 dbus_boÞ_t v®ue ; 395 ià( mp -> fÞd” =ð NULL ) 396  FALSE ; 398 v®ue = mp -> brow§bË ; 400 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v®ue ); 402  TRUE ; 403 } } 405  gboÞ—n $£¬chabË_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 406 * d©a ) 408  medŸ_¶ay” * mp = d©a ; 410  mp -> fÞd” !ð NULL ; 411 } } 413  gboÞ—n $g‘_£¬chabË (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 414 DBusMes§geI‹r * ™” , * d©a ) 416  medŸ_¶ay” * mp = d©a ; 417 dbus_boÞ_t v®ue ; 419 ià( mp -> fÞd” =ð NULL ) 420  FALSE ; 422 v®ue = mp -> £¬chabË ; 424 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v®ue ); 426  TRUE ; 427 } } 429  gboÞ—n $¶ayli¡_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 430 * d©a ) 432  medŸ_¶ay” * mp = d©a ; 434  mp -> ¶ayli¡ !ð NULL ; 435 } } 437  gboÞ—n $g‘_¶ayli¡ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 438 DBusMes§geI‹r * ™” , * d©a ) 440  medŸ_¶ay” * mp = d©a ; 441  medŸ_fÞd” * ¶ayli¡ = mp ->playlist; 443 ià( ¶ayli¡ =ð NULL ) 444  FALSE ; 446 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , 447 & ¶ayli¡ -> ™em -> ·th ); 449  TRUE ; 450 } } 452  DBusMes§ge * $medŸ_¶ay”_¶ay ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 453 * d©a ) 455  medŸ_¶ay” * mp = d©a ; 456  ¶ay”_ÿÎback * cb = mp ->cb; 457  ”r ; 459 ià( cb -> cbs -> ¶ay =ð NULL ) 460  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 462 ”r = cb -> cbs -> `¶ay ( mp , cb-> u£r_d©a ); 463 ià( ”r < 0) 464  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 466  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 467 } } 469  DBusMes§ge * $medŸ_¶ay”_·u£ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 470 * d©a ) 472  medŸ_¶ay” * mp = d©a ; 473  ¶ay”_ÿÎback * cb = mp ->cb; 474  ”r ; 476 ià( cb -> cbs -> ·u£ =ð NULL ) 477  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 479 ”r = cb -> cbs -> `·u£ ( mp , cb-> u£r_d©a ); 480 ià( ”r < 0) 481  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 483  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 484 } } 486  DBusMes§ge * $medŸ_¶ay”_¡Ý ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 487 * d©a ) 489  medŸ_¶ay” * mp = d©a ; 490  ¶ay”_ÿÎback * cb = mp ->cb; 491  ”r ; 493 ià( cb -> cbs -> ¡Ý =ð NULL ) 494  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 496 ”r = cb -> cbs -> `¡Ý ( mp , cb-> u£r_d©a ); 497 ià( ”r < 0) 498  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 500  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 501 } } 503  DBusMes§ge * $medŸ_¶ay”_Ãxt ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 504 * d©a ) 506  medŸ_¶ay” * mp = d©a ; 507  ¶ay”_ÿÎback * cb = mp ->cb; 508  ”r ; 510 ià( cb -> cbs -> Ãxt =ð NULL ) 511  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 513 ”r = cb -> cbs -> `Ãxt ( mp , cb-> u£r_d©a ); 514 ià( ”r < 0) 515  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 517  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 518 } } 520  DBusMes§ge * $medŸ_¶ay”_´evious ( DBusCÚÃùiÚ * cÚn , 521 DBusMes§ge * msg , * d©a ) 523  medŸ_¶ay” * mp = d©a ; 524  ¶ay”_ÿÎback * cb = mp ->cb; 525  ”r ; 527 ià( cb -> cbs -> ´evious =ð NULL ) 528  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 530 ”r = cb -> cbs -> `´evious ( mp , cb-> u£r_d©a ); 531 ià( ”r < 0) 532  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 534  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 535 } } 537  DBusMes§ge * $medŸ_¶ay”_ç¡_fÜw¬d ( DBusCÚÃùiÚ * cÚn , 538 DBusMes§ge * msg , * d©a ) 540  medŸ_¶ay” * mp = d©a ; 541  ¶ay”_ÿÎback * cb = mp ->cb; 542  ”r ; 544 ià( cb -> cbs -> ç¡_fÜw¬d =ð NULL ) 545  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 547 ”r = cb -> cbs -> `ç¡_fÜw¬d ( mp , cb-> u£r_d©a ); 548 ià( ”r < 0) 549  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 551  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 552 } } 554  DBusMes§ge * $medŸ_¶ay”_»wšd ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 555 * d©a ) 557  medŸ_¶ay” * mp = d©a ; 558  ¶ay”_ÿÎback * cb = mp ->cb; 559  ”r ; 561 ià( cb -> cbs -> »wšd =ð NULL ) 562  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 564 ”r = cb -> cbs -> `»wšd ( mp , cb-> u£r_d©a ); 565 ià( ”r < 0) 566  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 568  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 569 } } 571  $·r£_fÞd”_li¡ ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 573  medŸ_™em * ™em = d©a ; 574 DBusMes§geI‹r * ¬¿y = u£r_d©a ; 575 DBusMes§geI‹r ’Œy ; 577 `dbus_mes§ge_™”_Ý’_cÚš” ( ¬¿y , DBUS_TYPE_DICT_ENTRY , NULL , 578 & ’Œy ); 580 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_OBJECT_PATH , 581 & ™em -> ·th ); 583 `g_dbus_g‘_´Ý”t›s ( `btd_g‘_dbus_cÚÃùiÚ (), ™em -> ·th , 584 MEDIA_ITEM_INTERFACE , & ’Œy ); 586 `dbus_mes§ge_™”_þo£_cÚš” ( ¬¿y , & ’Œy ); 587 } } 589  $medŸ_¶ay”_chªge_fÞd”_com¶‘e ( medŸ_¶ay” * mp , 590 cÚ¡ * ·th ,  »t ) 592  medŸ_fÞd” * fÞd” = mp -> scÝe ; 593 DBusMes§ge * »¶y ; 595 ià( fÞd” =ð NULL || fÞd”-> msg == NULL) 598 ià( »t < 0) { 599 »¶y = `btd_”rÜ_çžed ( fÞd” -> msg , `¡»¼Ü (- »t )); 600  dÚe ; 603 `medŸ_¶ay”_£t_fÞd” ( mp , ·th , »t ); 605 »¶y = `g_dbus_ü—‹_»¶y ( fÞd” -> msg , DBUS_TYPE_INVALID ); 607 dÚe : 608 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y ); 609 `dbus_mes§ge_uÄef ( fÞd” -> msg ); 610 fÞd” -> msg = NULL ; 611 } } 613  $medŸ_¶ay”_li¡_com¶‘e ( medŸ_¶ay” * mp , GSLi¡ * ™ems , 614  ”r ) 616  medŸ_fÞd” * fÞd” = mp -> scÝe ; 617 DBusMes§ge * »¶y ; 618 DBusMes§geI‹r ™” , ¬¿y ; 620 ià( fÞd” =ð NULL || fÞd”-> msg == NULL) 623 ià( ”r < 0) { 624 »¶y = `btd_”rÜ_çžed ( fÞd” -> msg , `¡»¼Ü (- ”r )); 625  dÚe ; 628 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( fÞd” -> msg ); 630 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 632 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 633 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 634 DBUS_TYPE_OBJECT_PATH_AS_STRING 635 DBUS_TYPE_ARRAY_AS_STRING 636 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 637 DBUS_TYPE_STRING_AS_STRING 638 DBUS_TYPE_VARIANT_AS_STRING 639 DBUS_DICT_ENTRY_END_CHAR_AS_STRING 640 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 641 & ¬¿y ); 643 `g_¦i¡_fÜ—ch ( ™ems , ·r£_fÞd”_li¡ , & ¬¿y ); 644 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & ¬¿y ); 646 dÚe : 647 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y ); 648 `dbus_mes§ge_uÄef ( fÞd” -> msg ); 649 fÞd” -> msg = NULL ; 650 } } 652  medŸ_™em * 653 $medŸ_¶ay”_ü—‹_subfÞd” ( medŸ_¶ay” * mp , cÚ¡ * Çme , 654 ušt64_t uid ) 656  medŸ_fÞd” * fÞd” = mp -> scÝe ; 657  medŸ_™em * ™em ; 658 * ·th ; 660 ·th = `g_¡rdup_´štf ("%s/%s", fÞd” -> ™em -> Çme ,‚ame); 662 `DBG ("%s", ·th ); 664 ™em = `medŸ_¶ay”_ü—‹_™em ( mp , ·th , PLAYER_ITEM_TYPE_FOLDER , 665 uid ); 666 `g_ä“ ( ·th ); 668  ™em ; 669 } } 671  $medŸ_¶ay”_£¬ch_com¶‘e ( medŸ_¶ay” * mp ,  »t ) 673  medŸ_fÞd” * fÞd” = mp -> scÝe ; 674  medŸ_fÞd” * £¬ch = mp ->search; 675 DBusMes§ge * »¶y ; 677 ià( fÞd” =ð NULL || fÞd”-> msg == NULL) 680 ià( »t < 0) { 681 »¶y = `btd_”rÜ_çžed ( fÞd” -> msg , `¡»¼Ü (- »t )); 682  dÚe ; 685 ià( £¬ch =ð NULL ) { 686 £¬ch = `g_Ãw0 ( medŸ_fÞd” , 1); 687 £¬ch -> ™em = `medŸ_¶ay”_ü—‹_subfÞd” ( mp , "search", 0); 688 mp -> £¬ch = search; 689 mp -> fÞd”s = `g_¦i¡_´•’d (mp->fÞd”s, £¬ch ); 692 £¬ch -> numb”_of_™ems = »t ; 694 »¶y = `g_dbus_ü—‹_»¶y ( fÞd” -> msg , 695 DBUS_TYPE_OBJECT_PATH , & £¬ch -> ™em -> ·th , 696 DBUS_TYPE_INVALID ); 698 dÚe : 699 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y ); 700 `dbus_mes§ge_uÄef ( fÞd” -> msg ); 701 fÞd” -> msg = NULL ; 702 } } 704 cÚ¡ GDBusM‘hodTabË gmedŸ_¶ay”_m‘hods [] = { 705 { GDBUS_METHOD ("PÏy", NULL , NULL, medŸ_¶ay”_¶ay ) }, 706 { GDBUS_METHOD ("Pau£", NULL , NULL, medŸ_¶ay”_·u£ ) }, 707 { GDBUS_METHOD ("StÝ", NULL , NULL, medŸ_¶ay”_¡Ý ) }, 708 { GDBUS_METHOD ("Next", NULL , NULL, medŸ_¶ay”_Ãxt ) }, 709 { GDBUS_METHOD ("P»vious", NULL , NULL, medŸ_¶ay”_´evious ) }, 710 { GDBUS_METHOD ("Fa¡FÜw¬d", NULL , NULL, medŸ_¶ay”_ç¡_fÜw¬d ) }, 711 { GDBUS_METHOD ("Rewšd", NULL , NULL, medŸ_¶ay”_»wšd ) }, 715 cÚ¡ GDBusSigÇlTabË gmedŸ_¶ay”_sigÇls [] = { 719 cÚ¡ GDBusPrÝ”tyTabË gmedŸ_¶ay”_´Ý”t›s [] = { 720 { "Name", "s", g‘_Çme , NULL , Çme_exi¡s }, 721 { "Ty³", "s", g‘_ty³ , NULL , ty³_exi¡s }, 722 { "Subty³", "s", g‘_subty³ , NULL , subty³_exi¡s }, 723 { "Pos™iÚ", "u", g‘_pos™iÚ , NULL , NULL }, 724 { "Stus", "s", g‘_¡©us , NULL , ¡©us_exi¡s }, 725 { "Equ®iz”", "s", g‘_£‰šg , £t_£‰šg , £‰šg_exi¡s }, 726 { "R•—t", "s", g‘_£‰šg , £t_£‰šg , £‰šg_exi¡s }, 727 { "Shufæe", "s", g‘_£‰šg , £t_£‰šg , £‰šg_exi¡s }, 728 { "Sÿn", "s", g‘_£‰šg , £t_£‰šg , £‰šg_exi¡s }, 729 { "T¿ck", "a{sv}", g‘_Œack , NULL , Œack_exi¡s }, 730 { "Deviû", "o", g‘_deviû , NULL , NULL }, 731 { "Brow§bË", "b", g‘_brow§bË , NULL , brow§bË_exi¡s }, 732 { "S—rchabË", "b", g‘_£¬chabË , NULL , £¬chabË_exi¡s }, 733 { "PÏyli¡", "o", g‘_¶ayli¡ , NULL , ¶ayli¡_exi¡s }, 737  DBusMes§ge * $medŸ_fÞd”_£¬ch ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 738 * d©a ) 740  medŸ_¶ay” * mp = d©a ; 741  medŸ_fÞd” * fÞd” = mp -> scÝe ; 742  ¶ay”_ÿÎback * cb = mp ->cb; 743 DBusMes§geI‹r ™” ; 744 cÚ¡ * ¡ršg ; 745  ”r ; 747 `dbus_mes§ge_™”_š™ ( msg , & ™” ); 749 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_STRING ) 750  `btd_”rÜ_šv®id_¬gs ( msg ); 752 `dbus_mes§ge_™”_g‘_basic (& ™” , & ¡ršg ); 754 ià(! mp -> £¬chabË || fÞd” !ðmp->fÞd” || ! cb -> cbs -> £¬ch ) 755  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 757 ià( fÞd” -> msg !ð NULL ) 758  `btd_”rÜ_çžed ( msg , `¡»¼Ü ( EINVAL )); 760 ”r = cb -> cbs -> `£¬ch ( mp , ¡ršg , cb-> u£r_d©a ); 761 ià( ”r < 0) 762  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 764 fÞd” -> msg = `dbus_mes§ge_»f (msg); 766  NULL ; 767 } } 769  $·r£_fž‹rs ( medŸ_¶ay” * ¶ay” , DBusMes§geI‹r * ™” , 770 ušt32_t * ¡¬t , ušt32_ˆ* ’d ) 772  medŸ_fÞd” * fÞd” = ¶ay” -> scÝe ; 773 DBusMes§geI‹r diù ; 774  ùy³ ; 776 * ¡¬t = 0; 777 * ’d = fÞd” -> numb”_of_™ems ? folder->number_of_items - 1 : 778 UINT32_MAX ; 780 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” ); 781 ià( ùy³ !ð DBUS_TYPE_ARRAY ) 782  FALSE ; 784 `dbus_mes§ge_™”_»cur£ ( ™” , & diù ); 786 ( ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& diù )) != 787 DBUS_TYPE_INVALID ) { 788 DBusMes§geI‹r ’Œy , v¬ ; 789 cÚ¡ * key ; 791 ià( ùy³ !ð DBUS_TYPE_DICT_ENTRY ) 792  - EINVAL ; 794 `dbus_mes§ge_™”_»cur£ (& diù , & ’Œy ); 795 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy è!ð DBUS_TYPE_STRING ) 796  - EINVAL ; 798 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & key ); 799 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 801 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy è!ð DBUS_TYPE_VARIANT ) 802  - EINVAL ; 804 `dbus_mes§ge_™”_»cur£ (& ’Œy , & v¬ ); 806 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& v¬ è!ð DBUS_TYPE_UINT32 ) 807  - EINVAL ; 809 ià( `¡rÿ£cmp ( key , "Start") == 0) 810 `dbus_mes§ge_™”_g‘_basic (& v¬ , ¡¬t ); 811 ià( `¡rÿ£cmp ( key , "End") == 0) 812 `dbus_mes§ge_™”_g‘_basic (& v¬ , ’d ); 814 `dbus_mes§ge_™”_Ãxt (& diù ); 817 ià( fÞd” -> numb”_of_™ems > 0 && * ’d > folder->number_of_items) 818 * ’d = fÞd” -> numb”_of_™ems ; 821 } } 823  DBusMes§ge * $medŸ_fÞd”_li¡_™ems ( DBusCÚÃùiÚ * cÚn , 824 DBusMes§ge * msg , * d©a ) 826  medŸ_¶ay” * mp = d©a ; 827  medŸ_fÞd” * fÞd” = mp -> scÝe ; 828  ¶ay”_ÿÎback * cb = mp ->cb; 829 DBusMes§geI‹r ™” ; 830 ušt32_t ¡¬t , ’d ; 831  ”r ; 833 `dbus_mes§ge_™”_š™ ( msg , & ™” ); 835 ià( `·r£_fž‹rs ( mp , & ™” , & ¡¬t , & ’d ) < 0) 836  `btd_”rÜ_šv®id_¬gs ( msg ); 838 ià( cb -> cbs -> li¡_™ems =ð NULL ) 839  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 841 ià( fÞd” -> msg !ð NULL ) 842  `btd_”rÜ_çžed ( msg , `¡»¼Ü ( EBUSY )); 844 ”r = cb -> cbs -> `li¡_™ems ( mp , fÞd” -> ™em -> Çme , ¡¬t , ’d , 845 cb -> u£r_d©a ); 846 ià( ”r < 0) 847  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 849 fÞd” -> msg = `dbus_mes§ge_»f (msg); 851  NULL ; 852 } } 854  $medŸ_™em_ä“ ( medŸ_™em * ™em ) 856 ià( ™em -> m‘ad©a !ð NULL ) 857 `g_hash_bË_uÄef ( ™em -> m‘ad©a ); 859 `g_ä“ ( ™em -> ·th ); 860 `g_ä“ ( ™em -> Çme ); 861 `g_ä“ ( ™em ); 862 } } 864  $medŸ_™em_de¡roy (* d©a ) 866  medŸ_™em * ™em = d©a ; 868 `DBG ("%s", ™em -> ·th ); 870 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), ™em -> ·th , 871 MEDIA_ITEM_INTERFACE ); 873 `medŸ_™em_ä“ ( ™em ); 874 } } 876  $medŸ_fÞd”_de¡roy (* d©a ) 878  medŸ_fÞd” * fÞd” = d©a ; 880 `g_¦i¡_ä“_fuÎ ( fÞd” -> subfÞd”s , medŸ_fÞd”_de¡roy ); 881 `g_¦i¡_ä“_fuÎ ( fÞd” -> ™ems , medŸ_™em_de¡roy ); 883 ià( fÞd” -> msg !ð NULL ) 884 `dbus_mes§ge_uÄef ( fÞd” -> msg ); 886 `medŸ_™em_de¡roy ( fÞd” -> ™em ); 887 `g_ä“ ( fÞd” ); 888 } } 890  $medŸ_¶ay”_chªge_scÝe ( medŸ_¶ay” * mp , 891  medŸ_fÞd” * fÞd” ) 893 ià( mp -> scÝe =ð fÞd” ) 896 `DBG ("%s", fÞd” -> ™em -> Çme ); 899 ià( fÞd” =ð mp -> ¶ayli¡ || fÞd” =ðmp-> £¬ch ) 900  þ—nup ; 902 mp -> fÞd” = folder; 905 ià( mp -> scÝe =ðmp-> ¶ayli¡ ) 906  dÚe ; 908 þ—nup : 909 `g_¦i¡_ä“_fuÎ ( mp -> scÝe -> ™ems , medŸ_™em_de¡roy ); 910 mp -> scÝe -> ™ems = NULL ; 913 ià( mp -> £¬ch !ð NULL && fÞd” != mp->search) { 914 mp -> fÞd”s = `g_¦i¡_»move (mp->fÞd”s, mp-> £¬ch ); 915 `medŸ_fÞd”_de¡roy ( mp -> £¬ch ); 916 mp -> £¬ch = NULL ; 919 dÚe : 920 mp -> scÝe = fÞd” ; 922 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), mp -> ·th , 923 MEDIA_FOLDER_INTERFACE , "Name"); 924 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), mp -> ·th , 925 MEDIA_FOLDER_INTERFACE , "NumberOfItems"); 926 } } 928  medŸ_fÞd” * $fšd_fÞd” ( GSLi¡ * fÞd”s , cÚ¡ * ·‰”n ) 930 GSLi¡ * l ; 932  l = fÞd”s ;†;† =†-> Ãxt ) { 933  medŸ_fÞd” * fÞd” = l -> d©a ; 935 ià( `g_¡r_equ® ( fÞd” -> ™em -> Çme , ·‰”n )) 936  fÞd” ; 938 ià( `g_¡r_equ® ( fÞd” -> ™em -> ·th , ·‰”n )) 939  fÞd” ; 941 fÞd” = `fšd_fÞd” (fÞd”-> subfÞd”s , ·‰”n ); 942 ià( fÞd” !ð NULL ) 943  fÞd” ; 946  NULL ; 947 } } 949  medŸ_fÞd” * $medŸ_¶ay”_fšd_fÞd” ( medŸ_¶ay” * mp , 950 cÚ¡ * ·‰”n ) 952  `fšd_fÞd” ( mp -> fÞd”s , ·‰”n ); 953 } } 955  DBusMes§ge * $medŸ_fÞd”_chªge_fÞd” ( DBusCÚÃùiÚ * cÚn , 956 DBusMes§ge * msg , * d©a ) 958  medŸ_¶ay” * mp = d©a ; 959  medŸ_fÞd” * fÞd” = mp -> scÝe ; 960  ¶ay”_ÿÎback * cb = mp ->cb; 961 cÚ¡ * ·th ; 962  ”r ; 964 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 965 DBUS_TYPE_OBJECT_PATH , & ·th , 966 DBUS_TYPE_INVALID )) 967  `btd_”rÜ_šv®id_¬gs ( msg ); 969 ià( fÞd” -> msg !ð NULL ) 970  `btd_”rÜ_çžed ( msg , `¡»¼Ü ( EBUSY )); 972 fÞd” = `medŸ_¶ay”_fšd_fÞd” ( mp , ·th ); 973 ià( fÞd” =ð NULL ) 974  `btd_”rÜ_šv®id_¬gs ( msg ); 976 ià( mp -> scÝe =ð fÞd” ) 977  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 979 ià( fÞd” =ð mp -> ¶ayli¡ || folder == mp->folder || 980 fÞd” =ð mp -> £¬ch ) { 981 `medŸ_¶ay”_chªge_scÝe ( mp , fÞd” ); 982  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 989 ià(! `g_¦i¡_fšd ( mp -> fÞd” -> subfÞd”s , folder) && 990 ! `g_¦i¡_fšd ( fÞd” -> subfÞd”s , mp ->folder)) 991  `btd_”rÜ_šv®id_¬gs ( msg ); 993 ià( cb -> cbs -> chªge_fÞd” =ð NULL ) 994  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 996 ”r = cb -> cbs -> `chªge_fÞd” ( mp , fÞd” -> ™em -> Çme , fÞd”->™em-> uid , 997 cb -> u£r_d©a ); 998 ià( ”r < 0) 999  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 1001 mp -> scÝe -> msg = `dbus_mes§ge_»f (msg); 1003  NULL ; 1004 } } 1006  gboÞ—n $fÞd”_Çme_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1007 * d©a ) 1009  medŸ_¶ay” * mp = d©a ; 1010  medŸ_fÞd” * fÞd” = mp -> scÝe ; 1012 ià( fÞd” =ð NULL || fÞd”-> ™em == NULL) 1013  FALSE ; 1015  fÞd” -> ™em -> Çme !ð NULL ; 1016 } } 1018  gboÞ—n $g‘_fÞd”_Çme (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1019 DBusMes§geI‹r * ™” , * d©a ) 1021  medŸ_¶ay” * mp = d©a ; 1022  medŸ_fÞd” * fÞd” = mp -> scÝe ; 1024 ià( fÞd” =ð NULL || fÞd”-> ™em == NULL) 1025  FALSE ; 1027 `DBG ("%s", fÞd” -> ™em -> Çme ); 1029 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , 1030 & fÞd” -> ™em -> Çme ); 1032  TRUE ; 1033 } } 1035  gboÞ—n $™ems_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 1037  medŸ_¶ay” * mp = d©a ; 1039  mp -> scÝe !ð NULL ; 1040 } } 1042  gboÞ—n $g‘_™ems (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1043 DBusMes§geI‹r * ™” , * d©a ) 1045  medŸ_¶ay” * mp = d©a ; 1046  medŸ_fÞd” * fÞd” = mp -> scÝe ; 1048 ià( fÞd” =ð NULL ) 1049  FALSE ; 1051 `DBG ("%u", fÞd” -> numb”_of_™ems ); 1053 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT32 , 1054 & fÞd” -> numb”_of_™ems ); 1056  TRUE ; 1057 } } 1059 cÚ¡ GDBusM‘hodTabË gmedŸ_fÞd”_m‘hods [] = { 1060 { GDBUS_ASYNC_METHOD ("Search", 1061 GDBUS_ARGS ({ "string", "s" }, { "filter", "a{sv}" }), 1062 GDBUS_ARGS ({ "folder", "o" }), 1063 medŸ_fÞd”_£¬ch ) }, 1064 { GDBUS_ASYNC_METHOD ("ListItems", 1065 GDBUS_ARGS ({ "filter", "a{sv}" }), 1066 GDBUS_ARGS ({ "items", "a{oa{sv}}" }), 1067 medŸ_fÞd”_li¡_™ems ) }, 1068 { GDBUS_ASYNC_METHOD ("ChangeFolder", 1069 GDBUS_ARGS ({ "fÞd”", "o" }), NULL , 1070 medŸ_fÞd”_chªge_fÞd” ) }, 1074 cÚ¡ GDBusPrÝ”tyTabË gmedŸ_fÞd”_´Ý”t›s [] = { 1075 { "Name", "s", g‘_fÞd”_Çme , NULL , fÞd”_Çme_exi¡s , 1076 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 1077 { "Numb”OfI‹ms", "u", g‘_™ems , NULL , ™ems_exi¡s , 1078 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 1082  $medŸ_¶ay”_£t_scÝe ( medŸ_¶ay” * mp , 1083  medŸ_fÞd” * fÞd” ) 1085 ià( mp -> scÝe =ð NULL ) { 1086 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1087 mp -> ·th , MEDIA_FOLDER_INTERFACE , 1088 medŸ_fÞd”_m‘hods , 1089 NULL , 1090 medŸ_fÞd”_´Ý”t›s , mp , NULL )) { 1091 `”rÜ ("D-Bus failedo„egister %s on %s…ath", 1092 MEDIA_FOLDER_INTERFACE , mp -> ·th ); 1095 mp -> scÝe = fÞd” ; 1099  `medŸ_¶ay”_chªge_scÝe ( mp , fÞd” ); 1100 } } 1102  $medŸ_¶ay”_de¡roy ( medŸ_¶ay” * mp ) 1104 `DBG ("%s", mp -> ·th ); 1106 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), mp -> ·th , 1107 MEDIA_PLAYER_INTERFACE ); 1109 ià( mp -> Œack ) 1110 `g_hash_bË_uÄef ( mp -> Œack ); 1112 ià( mp -> £‰šgs ) 1113 `g_hash_bË_uÄef ( mp -> £‰šgs ); 1115 ià( mp -> ´oûss_id > 0) 1116 `g_sourû_»move ( mp -> ´oûss_id ); 1118 ià( mp -> scÝe ) 1119 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1120 mp -> ·th , 1121 MEDIA_FOLDER_INTERFACE ); 1123 `g_¦i¡_ä“_fuÎ ( mp -> ³ndšg , g_ä“ ); 1124 `g_¦i¡_ä“_fuÎ ( mp -> fÞd”s , medŸ_fÞd”_de¡roy ); 1126 `g_tim”_de¡roy ( mp -> ´og»ss ); 1127 `g_ä“ ( mp -> cb ); 1128 `g_ä“ ( mp -> ¡©us ); 1129 `g_ä“ ( mp -> ·th ); 1130 `g_ä“ ( mp -> deviû ); 1131 `g_ä“ ( mp -> subty³ ); 1132 `g_ä“ ( mp -> ty³ ); 1133 `g_ä“ ( mp -> Çme ); 1134 `g_ä“ ( mp ); 1135 } } 1137  medŸ_¶ay” * $medŸ_¶ay”_cÚŒÞËr_ü—‹ (cÚ¡ * ·th , 1138 ušt16_t id ) 1140  medŸ_¶ay” * mp ; 1142 mp = `g_Ãw0 ( medŸ_¶ay” , 1); 1143 mp -> deviû = `g_¡rdup ( ·th ); 1144 mp -> ·th = `g_¡rdup_´štf ("%s/¶ay”%u",…©h, id ); 1145 mp -> £‰šgs = `g_hash_bË_Ãw_fuÎ ( g_¡r_hash , g_¡r_equ® , 1146 g_ä“ , g_free); 1147 mp -> Œack = `g_hash_bË_Ãw_fuÎ ( g_¡r_hash , g_¡r_equ® , 1148 g_ä“ , g_free); 1149 mp -> ´og»ss = `g_tim”_Ãw (); 1151 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1152 mp -> ·th , MEDIA_PLAYER_INTERFACE , 1153 medŸ_¶ay”_m‘hods , 1154 medŸ_¶ay”_sigÇls , 1155 medŸ_¶ay”_´Ý”t›s , mp , NULL )) { 1156 `”rÜ ("D-Bu çžedØ»gi¡” % ·th", mp -> ·th ); 1157 `medŸ_¶ay”_de¡roy ( mp ); 1158  NULL ; 1161 `DBG ("%s", mp -> ·th ); 1163  mp ; 1164 } } 1166  $medŸ_¶ay”_£t_du¿tiÚ ( medŸ_¶ay” * mp , ušt32_t du¿tiÚ ) 1168 * v®ue , * curv® ; 1170 `DBG ("%u", du¿tiÚ ); 1173 ià( `g_hash_bË_size ( mp -> Œack ) == 0) 1177 curv® = `g_hash_bË_lookup ( mp -> Œack , "Duration"); 1178 ià( curv® !ð NULL ) 1181 v®ue = `g_¡rdup_´štf ("%u", du¿tiÚ ); 1183 `g_hash_bË_»¶aû ( mp -> Œack , `g_¡rdup ("Du¿tiÚ"), v®ue ); 1185 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 1186 mp -> ·th , MEDIA_PLAYER_INTERFACE , 1188 } } 1190  $medŸ_¶ay”_£t_pos™iÚ ( medŸ_¶ay” * mp , ušt32_t pos™iÚ ) 1192 `DBG ("%u", pos™iÚ ); 1195 ià( `g_hash_bË_size ( mp -> Œack ) == 0) 1198 mp -> pos™iÚ =…osition; 1199 `g_tim”_¡¬t ( mp -> ´og»ss ); 1201 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), mp -> ·th , 1202 MEDIA_PLAYER_INTERFACE , "Position"); 1203 } } 1205  $medŸ_¶ay”_£t_£‰šg ( medŸ_¶ay” * mp , cÚ¡ * key , 1206 cÚ¡ * v®ue ) 1208 * curv® ; 1209  ³ndšg_»q * p ; 1211 `DBG ("%s: %s", key , v®ue ); 1213 ià( `¡rÿ£cmp ( key , "Error") == 0) { 1214 p = `g_¦i¡_Áh_d©a ( mp -> ³ndšg , 0); 1215 ià( p =ð NULL ) 1218 `g_dbus_³ndšg_´Ý”ty_”rÜ ( p -> id , ERROR_INTERFACE ".Failed", 1219 v®ue ); 1220  £nd ; 1223 curv® = `g_hash_bË_lookup ( mp -> £‰šgs , key ); 1224 ià( `g_¡rcmp0 ( curv® , v®ue ) == 0) 1225  dÚe ; 1227 `g_hash_bË_»¶aû ( mp -> £‰šgs , `g_¡rdup ( key ), g_¡rdup( v®ue )); 1228 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), mp -> ·th , 1229 MEDIA_PLAYER_INTERFACE , key ); 1231 dÚe : 1232 p = `fšd_³ndšg ( mp , key ); 1233 ià( p =ð NULL ) 1236 ià( `¡rÿ£cmp ( v®ue , p ->value) == 0) 1237 `g_dbus_³ndšg_´Ý”ty_sucûss ( p -> id ); 1239 `g_dbus_³ndšg_´Ý”ty_”rÜ ( p -> id , 1240 ERROR_INTERFACE ".NotSupported", 1243 £nd : 1244 mp -> ³ndšg = `g_¦i¡_»move (mp->³ndšg, p ); 1245 `g_ä“ ( p ); 1248 } } 1250 cÚ¡ * $medŸ_¶ay”_g‘_¡©us ( medŸ_¶ay” * mp ) 1252  mp -> ¡©us ; 1253 } } 1255  $medŸ_¶ay”_£t_¡©us ( medŸ_¶ay” * mp , cÚ¡ * ¡©us ) 1257 `DBG ("%s", ¡©us ); 1259 ià( `g_¡rcmp0 ( mp -> ¡©us , status) == 0) 1262 `g_ä“ ( mp -> ¡©us ); 1263 mp -> ¡©us = `g_¡rdup (status); 1265 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), mp -> ·th , 1266 MEDIA_PLAYER_INTERFACE , "Status"); 1268 mp -> pos™iÚ = `medŸ_¶ay”_g‘_pos™iÚ (mp); 1269 `g_tim”_¡¬t ( mp -> ´og»ss ); 1270 } } 1272  gboÞ—n $´oûss_m‘ad©a_chªged (* u£r_d©a ) 1274  medŸ_¶ay” * mp = u£r_d©a ; 1275 cÚ¡ * ™em ; 1277 mp -> ´oûss_id = 0; 1279 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 1280 mp -> ·th , MEDIA_PLAYER_INTERFACE , 1283 ™em = `g_hash_bË_lookup ( mp -> Œack , "Item"); 1284 ià( ™em =ð NULL ) 1285  FALSE ; 1287 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 1288 ™em , MEDIA_ITEM_INTERFACE , 1291  FALSE ; 1292 } } 1294  $medŸ_¶ay”_£t_m‘ad©a ( medŸ_¶ay” * mp , 1295  medŸ_™em * ™em , cÚ¡ * key , 1296 * d©a , size_t Ën ) 1298 * v®ue , * curv® ; 1300 v®ue = `g_¡ºdup ( d©a , Ën ); 1302 `DBG ("%s: %s", key , v®ue ); 1304 curv® = `g_hash_bË_lookup ( mp -> Œack , key ); 1305 ià( `g_¡rcmp0 ( curv® , v®ue ) == 0) { 1306 `g_ä“ ( v®ue ); 1310 ià( mp -> ´oûss_id == 0) { 1311 `g_hash_bË_»move_®l ( mp -> Œack ); 1312 mp -> ´oûss_id = `g_idË_add ( ´oûss_m‘ad©a_chªged , mp); 1315 `g_hash_bË_»¶aû ( mp -> Œack , `g_¡rdup ( key ), v®ue ); 1316 } } 1318  $medŸ_¶ay”_£t_ty³ ( medŸ_¶ay” * mp , cÚ¡ * ty³ ) 1320 ià( `g_¡rcmp0 ( mp -> ty³ ,ype) == 0) 1323 `DBG ("%s", ty³ ); 1325 mp -> ty³ = `g_¡rdup (type); 1327 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 1328 mp -> ·th , MEDIA_PLAYER_INTERFACE , 1330 } } 1332  $medŸ_¶ay”_£t_subty³ ( medŸ_¶ay” * mp , cÚ¡ * subty³ ) 1334 ià( `g_¡rcmp0 ( mp -> subty³ , subtype) == 0) 1337 `DBG ("%s", subty³ ); 1339 mp -> subty³ = `g_¡rdup (subtype); 1341 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 1342 mp -> ·th , MEDIA_PLAYER_INTERFACE , 1344 } } 1346  $medŸ_¶ay”_£t_Çme ( medŸ_¶ay” * mp , cÚ¡ * Çme ) 1348 ià( `g_¡rcmp0 ( mp -> Çme ,‚ame) == 0) 1351 `DBG ("%s", Çme ); 1353 mp -> Çme = `g_¡rdup (name); 1355 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 1356 mp -> ·th , MEDIA_PLAYER_INTERFACE , 1358 } } 1360  $medŸ_¶ay”_£t_brow§bË ( medŸ_¶ay” * mp , boÞ ’abËd ) 1362 ià( mp -> brow§bË =ð ’abËd ) 1365 `DBG ("%s", ’abËd ? "true" : "false"); 1367 mp -> brow§bË = ’abËd ; 1369 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 1370 mp -> ·th , MEDIA_PLAYER_INTERFACE , 1372 } } 1374  $medŸ_¶ay”_£t_£¬chabË ( medŸ_¶ay” * mp , boÞ ’abËd ) 1376 ià( mp -> brow§bË =ð ’abËd ) 1379 `DBG ("%s", ’abËd ? "true" : "false"); 1381 mp -> £¬chabË = ’abËd ; 1383 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 1384 mp -> ·th , MEDIA_PLAYER_INTERFACE , 1386 } } 1388  $medŸ_¶ay”_£t_fÞd” ( medŸ_¶ay” * mp , cÚ¡ * Çme , 1389 ušt32_t numb”_of_™ems ) 1391  medŸ_fÞd” * fÞd” ; 1393 `DBG ("% numb” oà™em %u", Çme , numb”_of_™ems ); 1395 fÞd” = `medŸ_¶ay”_fšd_fÞd” ( mp , Çme ); 1396 ià( fÞd” =ð NULL ) { 1397 `”rÜ ("UnknowÀfÞd”: %s", Çme ); 1401 fÞd” -> numb”_of_™ems =‚umber_of_items; 1403 `medŸ_¶ay”_£t_scÝe ( mp , fÞd” ); 1404 } } 1406  $medŸ_¶ay”_£t_¶ayli¡ ( medŸ_¶ay” * mp , cÚ¡ * Çme ) 1408  medŸ_fÞd” * fÞd” ; 1410 `DBG ("%s", Çme ); 1412 fÞd” = `medŸ_¶ay”_fšd_fÞd” ( mp , Çme ); 1413 ià( fÞd” =ð NULL ) { 1414 `”rÜ ("UnknowÀfÞd”: %s", Çme ); 1418 mp -> ¶ayli¡ = fÞd” ; 1420 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), mp -> ·th , 1421 MEDIA_PLAYER_INTERFACE , "Playlist"); 1422 } } 1424  medŸ_™em * $medŸ_fÞd”_fšd_™em ( medŸ_fÞd” * fÞd” , 1425 ušt64_t uid ) 1427 GSLi¡ * l ; 1429 ià( uid == 0) 1430  NULL ; 1432  l = fÞd” -> ™ems ;†;† =†-> Ãxt ) { 1433  medŸ_™em * ™em = l -> d©a ; 1435 ià( ™em -> uid == uid) 1436  ™em ; 1439  NULL ; 1440 } } 1442  DBusMes§ge * $medŸ_™em_¶ay ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 1443 * d©a ) 1445  medŸ_™em * ™em = d©a ; 1446  medŸ_¶ay” * mp = ™em -> ¶ay” ; 1447  ¶ay”_ÿÎback * cb = mp ->cb; 1448  ”r ; 1450 ià(! ™em -> ¶ayabË || ! cb -> cbs -> ¶ay_™em ) 1451  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 1453 ”r = cb -> cbs -> `¶ay_™em ( mp , ™em -> ·th , i‹m-> uid , cb-> u£r_d©a ); 1454 ià( ”r < 0) 1455  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 1457  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 1458 } } 1460  DBusMes§ge * $medŸ_™em_add_to_now¶ayšg ( DBusCÚÃùiÚ * cÚn , 1461 DBusMes§ge * msg , * d©a ) 1463  medŸ_™em * ™em = d©a ; 1464  medŸ_¶ay” * mp = ™em -> ¶ay” ; 1465  ¶ay”_ÿÎback * cb = mp ->cb; 1466  ”r ; 1468 ià(! ™em -> ¶ayabË || ! cb -> cbs -> ¶ay_™em ) 1469  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 1471 ”r = cb -> cbs -> `add_to_now¶ayšg ( mp , ™em -> ·th , i‹m-> uid , 1472 cb -> u£r_d©a ); 1473 ià( ”r < 0) 1474  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 1476  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 1477 } } 1479  gboÞ—n $g‘_¶ay” (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1480 DBusMes§geI‹r * ™” , * d©a ) 1482  medŸ_™em * ™em = d©a ; 1484 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , 1485 & ™em -> ¶ay” -> ·th ); 1487  TRUE ; 1488 } } 1490  gboÞ—n $™em_Çme_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1491 * d©a ) 1493  medŸ_™em * ™em = d©a ; 1495  ™em -> Çme !ð NULL ; 1496 } } 1498  gboÞ—n $g‘_™em_Çme (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1499 DBusMes§geI‹r * ™” , * d©a ) 1501  medŸ_™em * ™em = d©a ; 1503 ià( ™em -> Çme =ð NULL ) 1504  FALSE ; 1506 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ™em -> Çme ); 1508  TRUE ; 1509 } } 1511 cÚ¡ * $ty³_to_¡ršg ( ušt8_t ty³ ) 1513  ty³ ) { 1514  PLAYER_ITEM_TYPE_AUDIO : 1516  PLAYER_ITEM_TYPE_VIDEO : 1518  PLAYER_ITEM_TYPE_FOLDER : 1522  NULL ; 1523 } } 1525  gboÞ—n $g‘_™em_ty³ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1526 DBusMes§geI‹r * ™” , * d©a ) 1528  medŸ_™em * ™em = d©a ; 1529 cÚ¡ * ¡ršg ; 1531 ¡ršg = `ty³_to_¡ršg ( ™em -> ty³ ); 1533 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¡ršg ); 1535  TRUE ; 1536 } } 1538  gboÞ—n $g‘_¶ayabË (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1539 DBusMes§geI‹r * ™” , * d©a ) 1541  medŸ_™em * ™em = d©a ; 1542 dbus_boÞ_t v®ue ; 1544 v®ue = ™em -> ¶ayabË ; 1546 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v®ue ); 1548  TRUE ; 1549 } } 1551 cÚ¡ * $fÞd”_ty³_to_¡ršg ( ušt8_t ty³ ) 1553  ty³ ) { 1554  PLAYER_FOLDER_TYPE_MIXED : 1556  PLAYER_FOLDER_TYPE_TITLES : 1558  PLAYER_FOLDER_TYPE_ALBUMS : 1560  PLAYER_FOLDER_TYPE_ARTISTS : 1562  PLAYER_FOLDER_TYPE_GENRES : 1564  PLAYER_FOLDER_TYPE_PLAYLISTS : 1566  PLAYER_FOLDER_TYPE_YEARS : 1570  NULL ; 1571 } } 1573  gboÞ—n $fÞd”_ty³_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1574 * d©a ) 1576  medŸ_™em * ™em = d©a ; 1578  `fÞd”_ty³_to_¡ršg ( ™em -> fÞd”_ty³ è!ð NULL ; 1579 } } 1581  gboÞ—n $g‘_fÞd”_ty³ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1582 DBusMes§geI‹r * ™” , * d©a ) 1584  medŸ_™em * ™em = d©a ; 1585 cÚ¡ * ¡ršg ; 1587 ¡ršg = `fÞd”_ty³_to_¡ršg ( ™em -> fÞd”_ty³ ); 1588 ià( ¡ršg =ð NULL ) 1589  FALSE ; 1591 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¡ršg ); 1593  TRUE ; 1594 } } 1596  gboÞ—n $m‘ad©a_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 1598  medŸ_™em * ™em = d©a ; 1600  ™em -> m‘ad©a !ð NULL ; 1601 } } 1603  $­³nd_m‘ad©a (* key , * v®ue , * u£r_d©a ) 1605 DBusMes§geI‹r * diù = u£r_d©a ; 1606 cÚ¡ * ¡rkey = key ; 1608 ià( `¡rÿ£cmp ( ¡rkey , "Item") == 0) 1611 ià( `¡rÿ£cmp ( ¡rkey , "Duration") == 0 || 1612 `¡rÿ£cmp ( ¡rkey , "TrackNumber") == 0 || 1613 `¡rÿ£cmp ( ¡rkey , "NumberOfTracks") == 0) { 1614 ušt32_t num = `©oi ( v®ue ); 1615 `diù_­³nd_’Œy ( diù , key , DBUS_TYPE_UINT32 , & num ); 1617 `diù_­³nd_’Œy ( diù , key , DBUS_TYPE_STRING , & v®ue ); 1619 } } 1621  gboÞ—n $g‘_m‘ad©a (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1622 DBusMes§geI‹r * ™” , * d©a ) 1624  medŸ_™em * ™em = d©a ; 1625 DBusMes§geI‹r diù ; 1627 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1628 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1629 DBUS_TYPE_STRING_AS_STRING 1630 DBUS_TYPE_VARIANT_AS_STRING 1631 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 1632 & diù ); 1634 ià( `g_hash_bË_size ( ™em -> m‘ad©a ) > 0) 1635 `g_hash_bË_fÜ—ch ( ™em -> m‘ad©a , ­³nd_m‘ad©a , & diù ); 1636 ià( ™em -> Çme !ð NULL ) 1637 `diù_­³nd_’Œy (& diù , "T™Ë", DBUS_TYPE_STRING , 1638 & ™em -> Çme ); 1640 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 1642  TRUE ; 1643 } } 1645 cÚ¡ GDBusM‘hodTabË gmedŸ_™em_m‘hods [] = { 1646 { GDBUS_METHOD ("PÏy", NULL , NULL, medŸ_™em_¶ay ) }, 1647 { GDBUS_METHOD ("AddtoNowPÏyšg", NULL , NULL, 1648 medŸ_™em_add_to_now¶ayšg ) }, 1652 cÚ¡ GDBusPrÝ”tyTabË gmedŸ_™em_´Ý”t›s [] = { 1653 { "PÏy”", "o", g‘_¶ay” , NULL , NULL }, 1654 { "Name", "s", g‘_™em_Çme , NULL , ™em_Çme_exi¡s }, 1655 { "Ty³", "s", g‘_™em_ty³ , NULL , NULL }, 1656 { "FÞd”Ty³", "s", g‘_fÞd”_ty³ , NULL , fÞd”_ty³_exi¡s }, 1657 { "PÏyabË", "b", g‘_¶ayabË , NULL , NULL }, 1658 { "M‘ad©a", "a{sv}", g‘_m‘ad©a , NULL , m‘ad©a_exi¡s }, 1662  $medŸ_™em_£t_¶ayabË ( medŸ_™em * ™em , boÞ v®ue ) 1664 ià( ™em -> ¶ayabË =ð v®ue ) 1667 ™em -> ¶ayabË = v®ue ; 1669 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), ™em -> ·th , 1670 MEDIA_ITEM_INTERFACE , "Playable"); 1671 } } 1673  medŸ_™em * $medŸ_fÞd”_ü—‹_™em ( medŸ_¶ay” * mp , 1674  medŸ_fÞd” * fÞd” , 1675 cÚ¡ * Çme , 1676 ¶ay”_™em_ty³_t ty³ , 1677 ušt64_t uid ) 1679  medŸ_™em * ™em ; 1680 cÚ¡ * ¡¹y³ ; 1682 ™em = `medŸ_fÞd”_fšd_™em ( fÞd” , uid ); 1683 ià( ™em !ð NULL ) 1684  ™em ; 1686 ¡¹y³ = `ty³_to_¡ršg ( ty³ ); 1687 ià( ¡¹y³ =ð NULL ) 1688  NULL ; 1690 `DBG ("% ty³ % uid %" PRIu64 "", Çme , ¡¹y³ , uid ); 1692 ™em = `g_Ãw0 ( medŸ_™em , 1); 1693 ™em -> ¶ay” = mp ; 1694 ™em -> uid = uid; 1696 ià( uid > 0) 1697 ™em -> ·th = `g_¡rdup_´štf ("%s/™em%" PRIu64 "", 1698 fÞd” -> ™em -> ·th , uid ); 1700 ™em -> ·th = `g_¡rdup_´štf ("%s%s", mp ->·th, Çme ); 1702 ™em -> Çme = `g_¡rdup (name); 1703 ™em -> ty³ =ype; 1704 ™em -> fÞd”_ty³ = PLAYER_FOLDER_TYPE_INVALID ; 1706 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1707 ™em -> ·th , MEDIA_ITEM_INTERFACE , 1708 medŸ_™em_m‘hods , 1709 NULL , 1710 medŸ_™em_´Ý”t›s , ™em , NULL )) { 1711 `”rÜ ("D-Bus failedo„egister %s on %s…ath", 1712 MEDIA_ITEM_INTERFACE , ™em -> ·th ); 1713 `medŸ_™em_ä“ ( ™em ); 1714  NULL ; 1717 ià( ty³ !ð PLAYER_ITEM_TYPE_FOLDER ) { 1718 fÞd” -> ™ems = `g_¦i¡_´•’d (fÞd”->™ems, ™em ); 1719 ™em -> m‘ad©a = `g_hash_bË_Ãw_fuÎ ( g_¡r_hash , g_¡r_equ® , 1720 g_ä“ , g_free); 1723 `DBG ("%s", ™em -> ·th ); 1725  ™em ; 1726 } } 1728  medŸ_™em * $medŸ_¶ay”_ü—‹_™em ( medŸ_¶ay” * mp , 1729 cÚ¡ * Çme , 1730 ¶ay”_™em_ty³_t ty³ , 1731 ušt64_t uid ) 1733  `medŸ_fÞd”_ü—‹_™em ( mp , mp-> scÝe , Çme , ty³ , uid ); 1734 } } 1736  medŸ_fÞd” * 1737 $medŸ_¶ay”_fšd_fÞd”_by_uid ( medŸ_¶ay” * mp , ušt64_t uid ) 1739  medŸ_fÞd” * fÞd” = mp -> scÝe ; 1740 GSLi¡ * l ; 1742  l = fÞd” -> subfÞd”s ;†;† =†-> Ãxt ) { 1743  medŸ_fÞd” * fÞd” = l -> d©a ; 1745 ià( fÞd” -> ™em -> uid == uid) 1746  fÞd” ; 1749  NULL ; 1750 } } 1752  medŸ_™em * $medŸ_¶ay”_ü—‹_fÞd” ( medŸ_¶ay” * mp , 1753 cÚ¡ * Çme , 1754 ¶ay”_fÞd”_ty³_t ty³ , 1755 ušt64_t uid ) 1757  medŸ_fÞd” * fÞd” ; 1758  medŸ_™em * ™em ; 1760 ià( uid > 0) 1761 fÞd” = `medŸ_¶ay”_fšd_fÞd”_by_uid ( mp , uid ); 1763 fÞd” = `medŸ_¶ay”_fšd_fÞd” ( mp , Çme ); 1765 ià( fÞd” !ð NULL ) 1766  fÞd” -> ™em ; 1768 ià( uid > 0) 1769 ™em = `medŸ_¶ay”_ü—‹_subfÞd” ( mp , Çme , uid ); 1771 ™em = `medŸ_¶ay”_ü—‹_™em ( mp , Çme , 1772 PLAYER_ITEM_TYPE_FOLDER , uid ); 1774 ià( ™em =ð NULL ) 1775  NULL ; 1777 fÞd” = `g_Ãw0 ( medŸ_fÞd” , 1); 1778 fÞd” -> ™em = item; 1780 ™em -> fÞd”_ty³ = ty³ ; 1782 ià( mp -> fÞd” !ð NULL ) 1783  dÚe ; 1785 mp -> fÞd” = folder; 1787 dÚe : 1788 ià( uid > 0) { 1789 fÞd” -> ·»Á = mp ->folder; 1790 mp -> fÞd” -> subfÞd”s = `g_¦i¡_´•’d ( 1791 mp -> fÞd” -> subfÞd”s , 1792 fÞd” ); 1794 mp -> fÞd”s = `g_¦i¡_´•’d (mp->fÞd”s, fÞd” ); 1796  ™em ; 1797 } } 1799  $medŸ_¶ay”_£t_ÿÎbacks ( medŸ_¶ay” * mp , 1800 cÚ¡  medŸ_¶ay”_ÿÎback * cbs , 1801 * u£r_d©a ) 1803  ¶ay”_ÿÎback * cb ; 1805 ià( mp -> cb ) 1806 `g_ä“ ( mp -> cb ); 1808 cb = `g_Ãw0 ( ¶ay”_ÿÎback , 1); 1809 cb -> cbs = cbs; 1810 cb -> u£r_d©a = user_data; 1812 mp -> cb = cb; 1813 } } 1815  medŸ_™em * $medŸ_¶ay”_£t_¶ayli¡_™em ( medŸ_¶ay” * mp , 1816 ušt64_t uid ) 1818  medŸ_fÞd” * fÞd” = mp -> ¶ayli¡ ; 1819  medŸ_™em * ™em ; 1821 `DBG ("%" PRIu64 "", uid ); 1823 ià( fÞd” =ð NULL || uid == 0) 1824  NULL ; 1826 ™em = `medŸ_fÞd”_ü—‹_™em ( mp , fÞd” , NULL , 1827 PLAYER_ITEM_TYPE_AUDIO , uid ); 1828 ià( ™em =ð NULL ) 1829  NULL ; 1831 `medŸ_™em_£t_¶ayabË ( ™em , Œue ); 1833 ià( mp -> Œack !ð ™em -> m‘ad©a ) { 1834 `g_hash_bË_uÄef ( mp -> Œack ); 1835 mp -> Œack = `g_hash_bË_»f ( ™em -> m‘ad©a ); 1838 ià( ™em =ð `g_hash_bË_lookup ( mp -> Œack , "Item")) 1839  ™em ; 1841 ià( mp -> ´oûss_id == 0) { 1842 `g_hash_bË_»move_®l ( mp -> Œack ); 1843 mp -> ´oûss_id = `g_idË_add ( ´oûss_m‘ad©a_chªged , mp); 1846 `g_hash_bË_»¶aû ( mp -> Œack , `g_¡rdup ("Item"), 1847 `g_¡rdup ( ™em -> ·th )); 1849  ™em ; 1850 } } @profiles/audio/player.h 27 mPLAYER_ITEM_TYPE_AUDIO , 28 mPLAYER_ITEM_TYPE_VIDEO , 29 mPLAYER_ITEM_TYPE_FOLDER , 30 mPLAYER_ITEM_TYPE_INVALID , 31 } t¶ay”_™em_ty³_t ; 34 mPLAYER_FOLDER_TYPE_MIXED , 35 mPLAYER_FOLDER_TYPE_TITLES , 36 mPLAYER_FOLDER_TYPE_ALBUMS , 37 mPLAYER_FOLDER_TYPE_ARTISTS , 38 mPLAYER_FOLDER_TYPE_GENRES , 39 mPLAYER_FOLDER_TYPE_PLAYLISTS , 40 mPLAYER_FOLDER_TYPE_YEARS , 41 mPLAYER_FOLDER_TYPE_INVALID , 42 } t¶ay”_fÞd”_ty³_t ; 44  gmedŸ_¶ay” ; 45  gmedŸ_™em ; 47  smedŸ_¶ay”_ÿÎback { 48 boÞ (* £t_£‰šg è( medŸ_¶ay” * mmp , cÚ¡ * mkey , 49 cÚ¡ * mv®ue , * mu£r_d©a ); 50 (* m¶ay è( medŸ_¶ay” * mmp , * mu£r_d©a ); 51 (* m·u£ è( medŸ_¶ay” * mmp , * mu£r_d©a ); 52 (* m¡Ý è( medŸ_¶ay” * mmp , * mu£r_d©a ); 53 (* mÃxt è( medŸ_¶ay” * mmp , * mu£r_d©a ); 54 (* m´evious è( medŸ_¶ay” * mmp , * mu£r_d©a ); 55 (* mç¡_fÜw¬d è( medŸ_¶ay” * mmp , * mu£r_d©a ); 56 (* m»wšd è( medŸ_¶ay” * mmp , * mu£r_d©a ); 57 (* mli¡_™ems è( medŸ_¶ay” * mmp , cÚ¡ * mÇme , 58 ušt32_t m¡¬t , ušt32_ˆ m’d , * mu£r_d©a ); 59 (* mchªge_fÞd” è( medŸ_¶ay” * mmp , cÚ¡ * m·th , 60 ušt64_t muid , * mu£r_d©a ); 61 (* m£¬ch è( medŸ_¶ay” * mmp , cÚ¡ * m¡ršg , 62 * mu£r_d©a ); 63 (* m¶ay_™em è( medŸ_¶ay” * mmp , cÚ¡ * mÇme , 64 ušt64_t muid , * mu£r_d©a ); 65 (* madd_to_now¶ayšg è( medŸ_¶ay” * mmp , cÚ¡ * mÇme , 66 ušt64_t muid , * mu£r_d©a ); 69  medŸ_¶ay” * medŸ_¶ay”_cÚŒÞËr_ü—‹ (cÚ¡ * ·th , 70 ušt16_t id ); 71  medŸ_¶ay”_de¡roy ( medŸ_¶ay” * mp ); 72  medŸ_¶ay”_£t_du¿tiÚ ( medŸ_¶ay” * mp , ušt32_t du¿tiÚ ); 73  medŸ_¶ay”_£t_pos™iÚ ( medŸ_¶ay” * mp , ušt32_t pos™iÚ ); 74  medŸ_¶ay”_£t_£‰šg ( medŸ_¶ay” * mp , cÚ¡ * key , 75 cÚ¡ * v®ue ); 76 cÚ¡ * medŸ_¶ay”_g‘_¡©us ( medŸ_¶ay” * mp ); 77  medŸ_¶ay”_£t_¡©us ( medŸ_¶ay” * mp , cÚ¡ * ¡©us ); 78  medŸ_¶ay”_£t_m‘ad©a ( medŸ_¶ay” * mp , 79  medŸ_™em * ™em , cÚ¡ * key , 80 * d©a , size_t Ën ); 81  medŸ_¶ay”_£t_ty³ ( medŸ_¶ay” * mp , cÚ¡ * ty³ ); 82  medŸ_¶ay”_£t_subty³ ( medŸ_¶ay” * mp , cÚ¡ * subty³ ); 83  medŸ_¶ay”_£t_Çme ( medŸ_¶ay” * mp , cÚ¡ * Çme ); 84  medŸ_¶ay”_£t_brow§bË ( medŸ_¶ay” * mp , boÞ ’abËd ); 85  medŸ_¶ay”_£t_£¬chabË ( medŸ_¶ay” * mp , boÞ ’abËd ); 86  medŸ_¶ay”_£t_fÞd” ( medŸ_¶ay” * mp , cÚ¡ * ·th , 87 ušt32_t ™ems ); 88  medŸ_¶ay”_£t_¶ayli¡ ( medŸ_¶ay” * mp , cÚ¡ * Çme ); 89  medŸ_™em * medŸ_¶ay”_£t_¶ayli¡_™em ( medŸ_¶ay” * mp , 90 ušt64_t uid ); 92  medŸ_™em * medŸ_¶ay”_ü—‹_fÞd” ( medŸ_¶ay” * mp , 93 cÚ¡ * Çme , 94 ¶ay”_fÞd”_ty³_t ty³ , 95 ušt64_t uid ); 96  medŸ_™em * medŸ_¶ay”_ü—‹_™em ( medŸ_¶ay” * mp , 97 cÚ¡ * Çme , 98 ¶ay”_™em_ty³_t ty³ , 99 ušt64_t uid ); 101  medŸ_™em_£t_¶ayabË ( medŸ_™em * ™em , boÞ v®ue ); 102  medŸ_¶ay”_li¡_com¶‘e ( medŸ_¶ay” * mp , GSLi¡ * ™ems , 103  ”r ); 104  medŸ_¶ay”_chªge_fÞd”_com¶‘e ( medŸ_¶ay” * ¶ay” , 105 cÚ¡ * ·th ,  »t ); 106  medŸ_¶ay”_£¬ch_com¶‘e ( medŸ_¶ay” * mp ,  »t ); 108  medŸ_¶ay”_£t_ÿÎbacks ( medŸ_¶ay” * mp , 109 cÚ¡  medŸ_¶ay”_ÿÎback * cbs , 110 * u£r_d©a ); @profiles/audio/sink.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dšt.h > 30  ~<¡dboÞ.h > 31  ~<”ºo.h > 33  ~ 34  ~ 36  ~ 37  ~ 38  ~ 40  ~"¤c/log.h " 42  ~"¤c/ad­‹r.h " 43  ~"¤c/deviû.h " 44  ~"¤c/£rviû.h " 45  ~"¤c/”rÜ.h " 46  ~"¤c/dbus-commÚ.h " 48  ~"avd.h " 49  ~"medŸ.h " 50  ~"a2dp.h " 51  ~"sšk.h " 53  #STREAM_SETUP_RETRY_TIMER 2 ) 55  ssšk { 56  btd_£rviû * m£rviû ; 57  avd * m£ssiÚ ; 58  avd_¡»am * m¡»am ; 59  mcb_id ; 60 avd_£ssiÚ_¡©e_t m£ssiÚ_¡©e ; 61 avd_¡©e_t m¡»am_¡©e ; 62 sšk_¡©e_t m¡©e ; 63  mcÚÃù_id ; 64  mdiscÚÃù_id ; 65  mavd_ÿÎback_id ; 68  ssšk_¡©e_ÿÎback { 69 sšk_¡©e_cb mcb ; 70  btd_£rviû * m£rviû ; 71 * mu£r_d©a ; 72  mid ; 75  GSLi¡ * gsšk_ÿÎbacks = NULL ; 77 * g¡r_¡©e [] = { 84  $sšk_£t_¡©e ( sšk *sšk, sšk_¡©e_t Ãw_¡©e ) 86  btd_£rviû * £rviû = sšk ->service; 87  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 88 sšk_¡©e_t Þd_¡©e = sšk -> ¡©e ; 89 GSLi¡ * l ; 91 sšk -> ¡©e = Ãw_¡©e ; 93 `DBG ("S‹ chªged %s: % -> %s", `deviû_g‘_·th ( dev ), 94 ¡r_¡©e [ Þd_¡©e ], sŒ_¡©e[ Ãw_¡©e ]); 96  l = sšk_ÿÎbacks ;† !ð NULL ;† =†-> Ãxt ) { 97  sšk_¡©e_ÿÎback * cb = l -> d©a ; 99 ià( cb -> £rviû != service) 102 cb -> `cb ( £rviû , Þd_¡©e , Ãw_¡©e , cb-> u£r_d©a ); 105 ià( Ãw_¡©e !ð SINK_STATE_DISCONNECTED ) 108 #ifdeà __TIZEN_PATCH__ 109 `btd_£rviû_discÚÃùšg_com¶‘e ( £rviû , 0); 112 ià( sšk -> £ssiÚ ) { 113 `avd_uÄef ( sšk -> £ssiÚ ); 114 sšk -> £ssiÚ = NULL ; 115 #ifdeà __TIZEN_PATCH__ 116 sšk -> cÚÃù_id = 0; 117 sšk -> discÚÃù_id = 0; 120 } } 122  $avd_¡©e_ÿÎback ( btd_deviû * dev , 123  avd * £ssiÚ , 124 avd_£ssiÚ_¡©e_t Þd_¡©e , 125 avd_£ssiÚ_¡©e_t Ãw_¡©e , 126 * u£r_d©a ) 128  sšk *sšk = u£r_d©a ; 130  Ãw_¡©e ) { 131  AVDTP_SESSION_STATE_DISCONNECTED : 132 `sšk_£t_¡©e ( sšk , SINK_STATE_DISCONNECTED ); 134  AVDTP_SESSION_STATE_CONNECTING : 135 `sšk_£t_¡©e ( sšk , SINK_STATE_CONNECTING ); 137  AVDTP_SESSION_STATE_CONNECTED : 141 sšk -> £ssiÚ_¡©e = Ãw_¡©e ; 142 } } 144  $¡»am_¡©e_chªged ( avd_¡»am * ¡»am , 145 avd_¡©e_t Þd_¡©e , 146 avd_¡©e_t Ãw_¡©e , 147  avd_”rÜ * ”r , 148 * u£r_d©a ) 150  btd_£rviû * £rviû = u£r_d©a ; 151  sšk *sšk = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 153 ià( ”r ) 156  Ãw_¡©e ) { 157  AVDTP_STATE_IDLE : 158 #iâdeà __TIZEN_PATCH__ 159 `btd_£rviû_discÚÃùšg_com¶‘e ( sšk -> £rviû , 0); 162 ià( sšk -> discÚÃù_id > 0) { 163 `a2dp_ÿnûl ( sšk -> discÚÃù_id ); 164 sšk -> discÚÃù_id = 0; 167 ià( sšk -> £ssiÚ ) { 168 `avd_uÄef ( sšk -> £ssiÚ ); 169 sšk -> £ssiÚ = NULL ; 171 sšk -> ¡»am = NULL ; 172 sšk -> cb_id = 0; 174  AVDTP_STATE_OPEN : 175 `btd_£rviû_cÚÃùšg_com¶‘e ( sšk -> £rviû , 0); 176 `sšk_£t_¡©e ( sšk , SINK_STATE_CONNECTED ); 178  AVDTP_STATE_STREAMING : 179 `sšk_£t_¡©e ( sšk , SINK_STATE_PLAYING ); 181  AVDTP_STATE_CONFIGURED : 182  AVDTP_STATE_CLOSING : 183  AVDTP_STATE_ABORTING : 188 sšk -> ¡»am_¡©e = Ãw_¡©e ; 189 } } 191  $¡»am_£tup_com¶‘e ( avd * £ssiÚ ,  a2dp_£p * £p , 192  avd_¡»am * ¡»am , 193  avd_”rÜ * ”r , * u£r_d©a ) 195  sšk *sšk = u£r_d©a ; 197 sšk -> cÚÃù_id = 0; 199 ià( ¡»am ) 202 `avd_uÄef ( sšk -> £ssiÚ ); 203 sšk -> £ssiÚ = NULL ; 204 #ifdeà __TIZEN_PATCH__ 205 ià( ”r && `avd_”rÜ_ÿ‹gÜy Ó¼è=ð AVDTP_ERRNO 206 && `avd_”rÜ_posix_”ºo ( ”r è!ð EHOSTDOWN ) 208 ià( `avd_”rÜ_ÿ‹gÜy ( ”r è=ð AVDTP_ERRNO 209 && `avd_”rÜ_posix_”ºo ( ”r è!ð EHOSTDOWN ) 211 `btd_£rviû_cÚÃùšg_com¶‘e ( sšk -> £rviû , - EAGAIN ); 213 `btd_£rviû_cÚÃùšg_com¶‘e ( sšk -> £rviû , - EIO ); 214 } } 216  $£Ëù_com¶‘e ( avd * £ssiÚ ,  a2dp_£p * £p , 217 GSLi¡ * ÿps , * u£r_d©a ) 219  sšk *sšk = u£r_d©a ; 220  id ; 222 sšk -> cÚÃù_id = 0; 224 id = `a2dp_cÚfig ( £ssiÚ , £p , ¡»am_£tup_com¶‘e , ÿps , sšk ); 225 ià( id == 0) 226  çžed ; 228 sšk -> cÚÃù_id = id ; 231 çžed : 232 `btd_£rviû_cÚÃùšg_com¶‘e ( sšk -> £rviû , - EIO ); 234 `avd_uÄef ( sšk -> £ssiÚ ); 235 sšk -> £ssiÚ = NULL ; 236 } } 238  $discov”y_com¶‘e ( avd * £ssiÚ , GSLi¡ * £ps ,  avd_”rÜ * ”r , 239 * u£r_d©a ) 241  sšk *sšk = u£r_d©a ; 242  id , ³¼ ; 244 ià( ”r ) { 245 `avd_uÄef ( sšk -> £ssiÚ ); 246 sšk -> £ssiÚ = NULL ; 248 ³¼ = - `avd_”rÜ_posix_”ºo ( ”r ); 249 ià( ³¼ !ð- EHOSTDOWN ) { 250 ià( `avd_”rÜ_ÿ‹gÜy ( ”r è=ð AVDTP_ERRNO ) 251 ³¼ = - EAGAIN ; 253 ³¼ = - EIO ; 255  çžed ; 258 `DBG ("Discovery complete"); 260 id = `a2dp_£Ëù_ÿ·bž™›s ( sšk -> £ssiÚ , AVDTP_SEP_TYPE_SINK , NULL , 261 £Ëù_com¶‘e , sšk ); 262 ià( id == 0) { 263 ³¼ = - EIO ; 264  çžed ; 267 sšk -> cÚÃù_id = id ; 270 çžed : 271 `btd_£rviû_cÚÃùšg_com¶‘e ( sšk -> £rviû , ³¼ ); 272 `avd_uÄef ( sšk -> £ssiÚ ); 273 sšk -> £ssiÚ = NULL ; 274 } } 276 gboÞ—n $sšk_£tup_¡»am ( btd_£rviû * £rviû ,  avd * £ssiÚ ) 278  sšk *sšk = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 280 ià( sšk -> cÚÃù_id > 0 || sšk-> discÚÃù_id > 0) 281  FALSE ; 283 ià( £ssiÚ && ! sšk ->session) 284 sšk -> £ssiÚ = `avd_»f (session); 286 ià(! sšk -> £ssiÚ ) 287  FALSE ; 289 ià( `avd_discov” ( sšk -> £ssiÚ , discov”y_com¶‘e , sink) < 0) 290  FALSE ; 292  TRUE ; 293 } } 295  $sšk_cÚÃù ( btd_£rviû * £rviû ) 297  sšk *sšk = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 299 #iâdeà __TIZEN_PATCH__ 300 ià(! sšk -> £ssiÚ ) 301 sšk -> £ssiÚ = `avd_g‘ ( `btd_£rviû_g‘_deviû ( £rviû )); 303 ià(! sšk -> £ssiÚ ) { 304 `DBG ("Unableo get‡ session"); 305  - EIO ; 309 ià( sšk -> cÚÃù_id > 0 || sšk-> discÚÃù_id > 0) 310  - EBUSY ; 312 ià( sšk -> ¡©e =ð SINK_STATE_CONNECTING ) 313  - EBUSY ; 315 ià( sšk -> ¡»am_¡©e >ð AVDTP_STATE_OPEN ) 316  - EALREADY ; 318 #ifdeà __TIZEN_PATCH__ 319 ià(! sšk -> £ssiÚ ) 320 sšk -> £ssiÚ = `avd_g‘ ( `btd_£rviû_g‘_deviû ( £rviû )); 322 ià(! sšk -> £ssiÚ ) { 323 `DBG ("Unableo get‡ session"); 324  - EIO ; 328 ià(! `sšk_£tup_¡»am ( £rviû , NULL )) { 329 `DBG ("Failedo create‡ stream"); 330  - EIO ; 333 `DBG ("stream creation in…rogress"); 336 } } 338  $sšk_ä“ ( btd_£rviû * £rviû ) 340  sšk *sšk = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 342 ià( sšk -> cb_id ) 343 `avd_¡»am_»move_cb ( sšk -> £ssiÚ , sšk-> ¡»am , 344 sšk -> cb_id ); 346 #ifdeà __TIZEN_PATCH__ 347 ià( sšk -> £ssiÚ ) { 349 `fš®ize_discov”y ( sšk -> £ssiÚ , ECANCELED ); 350 `avd_uÄef ( sšk -> £ssiÚ ); 353 ià( sšk -> £ssiÚ ) 354 `avd_uÄef ( sšk -> £ssiÚ ); 357 ià( sšk -> cÚÃù_id > 0) { 358 `btd_£rviû_cÚÃùšg_com¶‘e ( sšk -> £rviû , - ECANCELED ); 359 `a2dp_ÿnûl ( sšk -> cÚÃù_id ); 360 sšk -> cÚÃù_id = 0; 363 ià( sšk -> discÚÃù_id > 0) { 364 `btd_£rviû_discÚÃùšg_com¶‘e ( sšk -> £rviû , - ECANCELED ); 365 `a2dp_ÿnûl ( sšk -> discÚÃù_id ); 366 sšk -> discÚÃù_id = 0; 369 `avd_»move_¡©e_cb ( sšk -> avd_ÿÎback_id ); 370 `btd_£rviû_uÄef ( sšk -> £rviû ); 372 `g_ä“ ( sšk ); 373 } } 375  $sšk_uÄegi¡” ( btd_£rviû * £rviû ) 377  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 379 `DBG ("%s", `deviû_g‘_·th ( dev )); 381 `sšk_ä“ ( £rviû ); 382 } } 384  $sšk_š™ ( btd_£rviû * £rviû ) 386  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 387  sšk *sink; 389 `DBG ("%s", `deviû_g‘_·th ( dev )); 391 sšk = `g_Ãw0 (sink, 1); 393 sšk -> £rviû = `btd_£rviû_»f (service); 395 sšk -> avd_ÿÎback_id = `avd_add_¡©e_cb ( dev , avd_¡©e_ÿÎback , 396 sšk ); 398 `btd_£rviû_£t_u£r_d©a ( £rviû , sšk ); 401 } } 403 gboÞ—n $sšk_is_aùive ( btd_£rviû * £rviû ) 405  sšk *sšk = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 407 ià( sšk -> £ssiÚ ) 408  TRUE ; 410  FALSE ; 411 } } 413 gboÞ—n $sšk_Ãw_¡»am ( btd_£rviû * £rviû ,  avd * £ssiÚ , 414  avd_¡»am * ¡»am ) 416  sšk *sšk = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 418 ià( sšk -> ¡»am ) 419  FALSE ; 421 ià(! sšk -> £ssiÚ ) 422 sšk -> £ssiÚ = `avd_»f (session); 424 sšk -> ¡»am = stream; 426 sšk -> cb_id = `avd_¡»am_add_cb ( £ssiÚ , ¡»am , 427 ¡»am_¡©e_chªged , £rviû ); 429  TRUE ; 430 } } 432  $sšk_discÚÃù ( btd_£rviû * £rviû ) 434  sšk *sšk = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 436 ià(! sšk -> £ssiÚ ) 437  - ENOTCONN ; 440 ià( sšk -> cÚÃù_id > 0) { 441 `a2dp_ÿnûl ( sšk -> cÚÃù_id ); 442 sšk -> cÚÃù_id = 0; 443 `btd_£rviû_cÚÃùšg_com¶‘e ( sšk -> £rviû , - ECANCELED ); 445 `avd_uÄef ( sšk -> £ssiÚ ); 446 sšk -> £ssiÚ = NULL ; 452 ià( sšk -> discÚÃù_id > 0) 453  - EBUSY ; 455 ià(! sšk -> ¡»am ) 456  - ENOTCONN ; 458  `avd_þo£ ( sšk -> £ssiÚ , sšk-> ¡»am , FALSE ); 459 } } 461  $sšk_add_¡©e_cb ( btd_£rviû * £rviû , sšk_¡©e_cb cb , 462 * u£r_d©a ) 464  sšk_¡©e_ÿÎback * ¡©e_cb ; 465  id = 0; 467 ¡©e_cb = `g_Ãw ( sšk_¡©e_ÿÎback , 1); 468 ¡©e_cb -> cb = cb; 469 ¡©e_cb -> £rviû = service; 470 ¡©e_cb -> u£r_d©a = user_data; 471 ¡©e_cb -> id = ++id; 473 sšk_ÿÎbacks = `g_¦i¡_­³nd (sšk_ÿÎbacks, ¡©e_cb ); 475  ¡©e_cb -> id ; 476 } } 478 gboÞ—n $sšk_»move_¡©e_cb ( id ) 480 GSLi¡ * l ; 482  l = sšk_ÿÎbacks ;† !ð NULL ;† =†-> Ãxt ) { 483  sšk_¡©e_ÿÎback * cb = l -> d©a ; 484 ià( cb && cb-> id == id) { 485 sšk_ÿÎbacks = `g_¦i¡_»move (sšk_ÿÎbacks, cb ); 486 `g_ä“ ( cb ); 487  TRUE ; 491  FALSE ; 492 } } @profiles/audio/sink.h 26 mSINK_STATE_DISCONNECTED , 27 mSINK_STATE_CONNECTING , 28 mSINK_STATE_CONNECTED , 29 mSINK_STATE_PLAYING , 30 } tsšk_¡©e_t ; 32 (* tsšk_¡©e_cb è( tbtd_£rviû * t£rviû , 33 tsšk_¡©e_t tÞd_¡©e , 34 tsšk_¡©e_t tÃw_¡©e , 35 * tu£r_d©a ); 37  btd_£rviû ; 39  `sšk_add_¡©e_cb ( btd_£rviû * £rviû , sšk_¡©e_cb cb , 40 * u£r_d©a ); 41 gboÞ—n `sšk_»move_¡©e_cb ( id ); 43  `sšk_š™ ( btd_£rviû * £rviû ); 44  `sšk_uÄegi¡” ( btd_£rviû * £rviû ); 45 gboÞ—n `sšk_is_aùive ( btd_£rviû * £rviû ); 46  `sšk_cÚÃù ( btd_£rviû * £rviû ); 47 gboÞ—n `sšk_Ãw_¡»am ( btd_£rviû * £rviû ,  avd * £ssiÚ , 48  avd_¡»am * ¡»am ); 49 gboÞ—n `sšk_£tup_¡»am ( btd_£rviû * £rviû ,  avd * £ssiÚ ); 50  `sšk_discÚÃù ( btd_£rviû * £rviû ); @profiles/audio/source.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡dšt.h > 31  ~<¡dboÞ.h > 32  ~<”ºo.h > 34  ~ 35  ~ 37  ~ 38  ~ 39  ~ 41  ~"¤c/log.h " 43  ~"¤c/ad­‹r.h " 44  ~"¤c/deviû.h " 45  ~"¤c/£rviû.h " 46  ~"¤c/”rÜ.h " 47  ~"¤c/dbus-commÚ.h " 49  ~"avd.h " 50  ~"medŸ.h " 51  ~"a2dp.h " 52  ~"sourû.h " 54  ssourû { 55  btd_£rviû * m£rviû ; 56  avd * m£ssiÚ ; 57  avd_¡»am * m¡»am ; 58  mcb_id ; 59 avd_£ssiÚ_¡©e_t m£ssiÚ_¡©e ; 60 avd_¡©e_t m¡»am_¡©e ; 61 sourû_¡©e_t m¡©e ; 62  mcÚÃù_id ; 63  mdiscÚÃù_id ; 64  mavd_ÿÎback_id ; 67  ssourû_¡©e_ÿÎback { 68 sourû_¡©e_cb mcb ; 69  btd_£rviû * m£rviû ; 70 * mu£r_d©a ; 71  mid ; 74  GSLi¡ * gsourû_ÿÎbacks = NULL ; 76 * g¡r_¡©e [] = { 83  $sourû_£t_¡©e ( sourû *sourû, sourû_¡©e_t Ãw_¡©e ) 85  btd_deviû * dev = `btd_£rviû_g‘_deviû ( sourû -> £rviû ); 86 sourû_¡©e_t Þd_¡©e = sourû -> ¡©e ; 87 GSLi¡ * l ; 89 sourû -> ¡©e = Ãw_¡©e ; 91 `DBG ("S‹ chªged %s: % -> %s", `deviû_g‘_·th ( dev ), 92 ¡r_¡©e [ Þd_¡©e ], sŒ_¡©e[ Ãw_¡©e ]); 94  l = sourû_ÿÎbacks ;† !ð NULL ;† =†-> Ãxt ) { 95  sourû_¡©e_ÿÎback * cb = l -> d©a ; 97 ià( cb -> £rviû !ð sourû ->service) 100 cb -> `cb ( sourû -> £rviû , Þd_¡©e , Ãw_¡©e , cb-> u£r_d©a ); 103 ià( Ãw_¡©e !ð SOURCE_STATE_DISCONNECTED ) 106 ià( sourû -> £ssiÚ ) { 107 `avd_uÄef ( sourû -> £ssiÚ ); 108 sourû -> £ssiÚ = NULL ; 110 } } 112  $avd_¡©e_ÿÎback ( btd_deviû * dev ,  avd * £ssiÚ , 113 avd_£ssiÚ_¡©e_t Þd_¡©e , 114 avd_£ssiÚ_¡©e_t Ãw_¡©e , 115 * u£r_d©a ) 117  sourû *sourû = u£r_d©a ; 119  Ãw_¡©e ) { 120  AVDTP_SESSION_STATE_DISCONNECTED : 121 `sourû_£t_¡©e ( sourû , SOURCE_STATE_DISCONNECTED ); 123  AVDTP_SESSION_STATE_CONNECTING : 124 `sourû_£t_¡©e ( sourû , SOURCE_STATE_CONNECTING ); 126  AVDTP_SESSION_STATE_CONNECTED : 130 sourû -> £ssiÚ_¡©e = Ãw_¡©e ; 131 } } 133  $¡»am_¡©e_chªged ( avd_¡»am * ¡»am , 134 avd_¡©e_t Þd_¡©e , 135 avd_¡©e_t Ãw_¡©e , 136  avd_”rÜ * ”r , 137 * u£r_d©a ) 139  btd_£rviû * £rviû = u£r_d©a ; 140  sourû *sourû = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 142 ià( ”r ) 145  Ãw_¡©e ) { 146  AVDTP_STATE_IDLE : 147 `btd_£rviû_discÚÃùšg_com¶‘e ( sourû -> £rviû , 0); 149 ià( sourû -> discÚÃù_id > 0) { 150 `a2dp_ÿnûl ( sourû -> discÚÃù_id ); 151 sourû -> discÚÃù_id = 0; 154 ià( sourû -> £ssiÚ ) { 155 `avd_uÄef ( sourû -> £ssiÚ ); 156 sourû -> £ssiÚ = NULL ; 158 sourû -> ¡»am = NULL ; 159 sourû -> cb_id = 0; 161  AVDTP_STATE_OPEN : 162 `btd_£rviû_cÚÃùšg_com¶‘e ( sourû -> £rviû , 0); 163 `sourû_£t_¡©e ( sourû , SOURCE_STATE_CONNECTED ); 165  AVDTP_STATE_STREAMING : 166 `sourû_£t_¡©e ( sourû , SOURCE_STATE_PLAYING ); 168  AVDTP_STATE_CONFIGURED : 169  AVDTP_STATE_CLOSING : 170  AVDTP_STATE_ABORTING : 175 sourû -> ¡»am_¡©e = Ãw_¡©e ; 176 } } 178  $¡»am_£tup_com¶‘e ( avd * £ssiÚ ,  a2dp_£p * £p , 179  avd_¡»am * ¡»am , 180  avd_”rÜ * ”r , * u£r_d©a ) 182  sourû *sourû = u£r_d©a ; 184 sourû -> cÚÃù_id = 0; 186 ià( ¡»am ) 189 `avd_uÄef ( sourû -> £ssiÚ ); 190 sourû -> £ssiÚ = NULL ; 191 ià( `avd_”rÜ_ÿ‹gÜy ( ”r è=ð AVDTP_ERRNO 192 && `avd_”rÜ_posix_”ºo ( ”r è!ð EHOSTDOWN ) 193 `btd_£rviû_cÚÃùšg_com¶‘e ( sourû -> £rviû , - EAGAIN ); 195 `btd_£rviû_cÚÃùšg_com¶‘e ( sourû -> £rviû , - EIO ); 196 } } 198  $£Ëù_com¶‘e ( avd * £ssiÚ ,  a2dp_£p * £p , 199 GSLi¡ * ÿps , * u£r_d©a ) 201  sourû *sourû = u£r_d©a ; 202  id ; 204 sourû -> cÚÃù_id = 0; 206 ià( ÿps =ð NULL ) 207  çžed ; 209 id = `a2dp_cÚfig ( £ssiÚ , £p , ¡»am_£tup_com¶‘e , ÿps , sourû ); 210 ià( id == 0) 211  çžed ; 213 sourû -> cÚÃù_id = id ; 216 çžed : 217 `btd_£rviû_cÚÃùšg_com¶‘e ( sourû -> £rviû , - EIO ); 219 `avd_uÄef ( sourû -> £ssiÚ ); 220 sourû -> £ssiÚ = NULL ; 221 } } 223  $discov”y_com¶‘e ( avd * £ssiÚ , GSLi¡ * £ps ,  avd_”rÜ * ”r , 224 * u£r_d©a ) 226  sourû *sourû = u£r_d©a ; 227  id , ³¼ ; 229 ià( ”r ) { 230 `avd_uÄef ( sourû -> £ssiÚ ); 231 sourû -> £ssiÚ = NULL ; 233 ³¼ = - `avd_”rÜ_posix_”ºo ( ”r ); 234 ià( ³¼ !ð- EHOSTDOWN ) { 235 ià( `avd_”rÜ_ÿ‹gÜy ( ”r è=ð AVDTP_ERRNO ) 236 ³¼ = - EAGAIN ; 238 ³¼ = - EIO ; 240  çžed ; 243 `DBG ("Discovery complete"); 245 id = `a2dp_£Ëù_ÿ·bž™›s ( sourû -> £ssiÚ , AVDTP_SEP_TYPE_SOURCE , NULL , 246 £Ëù_com¶‘e , sourû ); 247 ià( id == 0) { 248 ³¼ = - EIO ; 249  çžed ; 252 sourû -> cÚÃù_id = id ; 255 çžed : 256 `btd_£rviû_cÚÃùšg_com¶‘e ( sourû -> £rviû , ³¼ ); 257 `avd_uÄef ( sourû -> £ssiÚ ); 258 sourû -> £ssiÚ = NULL ; 259 } } 261 gboÞ—n $sourû_£tup_¡»am ( btd_£rviû * £rviû , 262  avd * £ssiÚ ) 264  sourû *sourû = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 266 ià( sourû -> cÚÃù_id > 0 || sourû-> discÚÃù_id > 0) 267  FALSE ; 269 ià( £ssiÚ && ! sourû ->session) 270 sourû -> £ssiÚ = `avd_»f (session); 272 ià(! sourû -> £ssiÚ ) 273  FALSE ; 275 ià( `avd_discov” ( sourû -> £ssiÚ , discov”y_com¶‘e , source) < 0) 276  FALSE ; 278  TRUE ; 279 } } 281  $sourû_cÚÃù ( btd_£rviû * £rviû ) 283  sourû *sourû = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 285 ià(! sourû -> £ssiÚ ) 286 sourû -> £ssiÚ = `avd_g‘ ( `btd_£rviû_g‘_deviû ( £rviû )); 288 ià(! sourû -> £ssiÚ ) { 289 `DBG ("Unableo get‡ session"); 290  - EIO ; 293 ià( sourû -> cÚÃù_id > 0 || sourû-> discÚÃù_id > 0) 294  - EBUSY ; 296 ià( sourû -> ¡©e =ð SOURCE_STATE_CONNECTING ) 297  - EBUSY ; 299 ià( sourû -> ¡»am_¡©e >ð AVDTP_STATE_OPEN ) 300  - EALREADY ; 302 ià(! `sourû_£tup_¡»am ( £rviû , NULL )) { 303 `DBG ("Failedo create‡ stream"); 304  - EIO ; 307 `DBG ("stream creation in…rogress"); 310 } } 312  $sourû_ä“ ( btd_£rviû * £rviû ) 314  sourû *sourû = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 316 ià( sourû -> cb_id ) 317 `avd_¡»am_»move_cb ( sourû -> £ssiÚ , sourû-> ¡»am , 318 sourû -> cb_id ); 320 ià( sourû -> £ssiÚ ) 321 `avd_uÄef ( sourû -> £ssiÚ ); 323 ià( sourû -> cÚÃù_id > 0) { 324 `btd_£rviû_cÚÃùšg_com¶‘e ( sourû -> £rviû , - ECANCELED ); 325 `a2dp_ÿnûl ( sourû -> cÚÃù_id ); 326 sourû -> cÚÃù_id = 0; 329 ià( sourû -> discÚÃù_id > 0) { 330 `btd_£rviû_discÚÃùšg_com¶‘e ( sourû -> £rviû , - ECANCELED ); 331 `a2dp_ÿnûl ( sourû -> discÚÃù_id ); 332 sourû -> discÚÃù_id = 0; 335 `avd_»move_¡©e_cb ( sourû -> avd_ÿÎback_id ); 336 `btd_£rviû_uÄef ( sourû -> £rviû ); 338 `g_ä“ ( sourû ); 339 } } 341  $sourû_uÄegi¡” ( btd_£rviû * £rviû ) 343  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 345 `DBG ("%s", `deviû_g‘_·th ( dev )); 347 `sourû_ä“ ( £rviû ); 348 } } 350  $sourû_š™ ( btd_£rviû * £rviû ) 352  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 353  sourû *source; 355 `DBG ("%s", `deviû_g‘_·th ( dev )); 357 sourû = `g_Ãw0 (source, 1); 359 sourû -> £rviû = `btd_£rviû_»f (service); 361 sourû -> avd_ÿÎback_id = `avd_add_¡©e_cb ( dev , 362 avd_¡©e_ÿÎback , 363 sourû ); 365 `btd_£rviû_£t_u£r_d©a ( £rviû , sourû ); 368 } } 370 gboÞ—n $sourû_Ãw_¡»am ( btd_£rviû * £rviû ,  avd * £ssiÚ , 371  avd_¡»am * ¡»am ) 373  sourû *sourû = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 375 ià( sourû -> ¡»am ) 376  FALSE ; 378 ià(! sourû -> £ssiÚ ) 379 sourû -> £ssiÚ = `avd_»f (session); 381 sourû -> ¡»am = stream; 383 sourû -> cb_id = `avd_¡»am_add_cb ( £ssiÚ , ¡»am , 384 ¡»am_¡©e_chªged , £rviû ); 386  TRUE ; 387 } } 389  $sourû_discÚÃù ( btd_£rviû * £rviû ) 391  sourû *sourû = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 393 ià(! sourû -> £ssiÚ ) 394  - ENOTCONN ; 397 ià( sourû -> cÚÃù_id > 0) { 398 `a2dp_ÿnûl ( sourû -> cÚÃù_id ); 399 sourû -> cÚÃù_id = 0; 400 `btd_£rviû_cÚÃùšg_com¶‘e ( sourû -> £rviû , - ECANCELED ); 402 `avd_uÄef ( sourû -> £ssiÚ ); 403 sourû -> £ssiÚ = NULL ; 409 ià( sourû -> discÚÃù_id > 0) 410  - EBUSY ; 412 ià(! sourû -> ¡»am ) 413  - ENOTCONN ; 415  `avd_þo£ ( sourû -> £ssiÚ , sourû-> ¡»am , FALSE ); 416 } } 418  $sourû_add_¡©e_cb ( btd_£rviû * £rviû , 419 sourû_¡©e_cb cb , * u£r_d©a ) 421  sourû_¡©e_ÿÎback * ¡©e_cb ; 422  id = 0; 424 ¡©e_cb = `g_Ãw ( sourû_¡©e_ÿÎback , 1); 425 ¡©e_cb -> cb = cb; 426 ¡©e_cb -> £rviû = service; 427 ¡©e_cb -> u£r_d©a = user_data; 428 ¡©e_cb -> id = ++id; 430 sourû_ÿÎbacks = `g_¦i¡_­³nd (sourû_ÿÎbacks, ¡©e_cb ); 432  ¡©e_cb -> id ; 433 } } 435 gboÞ—n $sourû_»move_¡©e_cb ( id ) 437 GSLi¡ * l ; 439  l = sourû_ÿÎbacks ;† !ð NULL ;† =†-> Ãxt ) { 440  sourû_¡©e_ÿÎback * cb = l -> d©a ; 441 ià( cb && cb-> id == id) { 442 sourû_ÿÎbacks = `g_¦i¡_»move (sourû_ÿÎbacks, cb ); 443 `g_ä“ ( cb ); 444  TRUE ; 448  FALSE ; 449 } } @profiles/audio/source.h 27 mSOURCE_STATE_DISCONNECTED , 28 mSOURCE_STATE_CONNECTING , 29 mSOURCE_STATE_CONNECTED , 30 mSOURCE_STATE_PLAYING , 31 } tsourû_¡©e_t ; 33 (* tsourû_¡©e_cb è( tbtd_£rviû * t£rviû , 34 tsourû_¡©e_t tÞd_¡©e , 35 tsourû_¡©e_t tÃw_¡©e , 36 * tu£r_d©a ); 38  btd_£rviû ; 40  `sourû_add_¡©e_cb ( btd_£rviû * £rviû , 41 sourû_¡©e_cb cb , * u£r_d©a ); 42 gboÞ—n `sourû_»move_¡©e_cb ( id ); 44  `sourû_š™ ( btd_£rviû * £rviû ); 45  `sourû_uÄegi¡” ( btd_£rviû * £rviû ); 46  `sourû_cÚÃù ( btd_£rviû * £rviû ); 47 gboÞ—n `sourû_Ãw_¡»am ( btd_£rviû * £rviû ,  avd * £ssiÚ , 48  avd_¡»am * ¡»am ); 49 gboÞ—n `sourû_£tup_¡»am ( btd_£rviû * £rviû , 50  avd * £ssiÚ ); 51  `sourû_discÚÃù ( btd_£rviû * £rviû ); @profiles/audio/transport.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<”ºo.h > 31  ~ 32  ~ 34  ~"lib/uuid.h " 35  ~"¤c/ad­‹r.h " 36  ~"¤c/deviû.h " 37  ~"¤c/dbus-commÚ.h " 39  ~"¤c/log.h " 40  ~"¤c/”rÜ.h " 42  ~"avd.h " 43  ~"medŸ.h " 44  ~"Œª¥Üt.h " 45  ~"a2dp.h " 46  ~"sšk.h " 47  ~"sourû.h " 48  ~"avrý.h " 50  #MEDIA_TRANSPORT_INTERFACE "Üg.bluez.MedŸT¿n¥Üt1" ) 53 mTRANSPORT_STATE_IDLE , 54 mTRANSPORT_STATE_PENDING , 55 mTRANSPORT_STATE_REQUESTING , 56 mTRANSPORT_STATE_ACTIVE , 57 mTRANSPORT_STATE_SUSPENDING , 58 } tŒª¥Üt_¡©e_t ; 60 * g¡r_¡©e [] = { 68  smedŸ_»que¡ { 69 DBusMes§ge * mmsg ; 70 gušt mid ; 73  smedŸ_owÃr { 74  medŸ_Œª¥Üt * mŒª¥Üt ; 75  medŸ_»que¡ * m³ndšg ; 76 * mÇme ; 77 gušt mw©ch ; 80  sa2dp_Œª¥Üt { 81  avd * m£ssiÚ ; 82 ušt16_t md–ay ; 83 ušt16_t mvÞume ; 86  smedŸ_Œª¥Üt { 87 * m·th ; 88  btd_deviû * mdeviû ; 89  medŸ_’dpošt * m’dpošt ; 90  medŸ_owÃr * mowÃr ; 91 ušt8_t * mcÚfigu¿tiÚ ; 92  msize ; 93  mfd ; 94 ušt16_t mimtu ; 95 ušt16_t momtu ; 96 Œª¥Üt_¡©e_t m¡©e ; 97 gušt mhs_w©ch ; 98 gušt msourû_w©ch ; 99 gušt msšk_w©ch ; 100 gušt (* »sume è( medŸ_Œª¥Üt * mŒª¥Üt , 101  medŸ_owÃr * mowÃr ); 102 gušt (* su¥’d è( medŸ_Œª¥Üt * mŒª¥Üt , 103  medŸ_owÃr * mowÃr ); 104 (* mÿnûl è( medŸ_Œª¥Üt * mŒª¥Üt , 105 gušt mid ); 106 GDe¡royNÙify mde¡roy ; 107 * md©a ; 110  GSLi¡ * gŒª¥Üts = NULL ; 112 cÚ¡ * $¡©e2¡r ( Œª¥Üt_¡©e_t ¡©e ) 114  ¡©e ) { 115  TRANSPORT_STATE_IDLE : 116  TRANSPORT_STATE_REQUESTING : 118  TRANSPORT_STATE_PENDING : 120  TRANSPORT_STATE_ACTIVE : 121  TRANSPORT_STATE_SUSPENDING : 125  NULL ; 126 } } 128  gboÞ—n $¡©e_š_u£ ( Œª¥Üt_¡©e_t ¡©e ) 130  ¡©e ) { 131  TRANSPORT_STATE_IDLE : 132  TRANSPORT_STATE_PENDING : 133  FALSE ; 134  TRANSPORT_STATE_REQUESTING : 135  TRANSPORT_STATE_ACTIVE : 136  TRANSPORT_STATE_SUSPENDING : 137  TRUE ; 140  FALSE ; 141 } } 143  $Œª¥Üt_£t_¡©e ( medŸ_Œª¥Üt * Œª¥Üt , 144 Œª¥Üt_¡©e_t ¡©e ) 146 Œª¥Üt_¡©e_t Þd_¡©e = Œª¥Üt -> ¡©e ; 147 cÚ¡ * ¡r ; 149 ià( Þd_¡©e =ð ¡©e ) 152 Œª¥Üt -> ¡©e = state; 154 `DBG ("S‹ chªged %s: % -> %s", Œª¥Üt -> ·th , ¡r_¡©e [ Þd_¡©e ], 155 ¡r_¡©e [ ¡©e ]); 157 ¡r = `¡©e2¡r ( ¡©e ); 159 ià( `g_¡rcmp0 ( ¡r , `¡©e2¡r ( Þd_¡©e )) != 0) 160 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 161 Œª¥Üt -> ·th , 162 MEDIA_TRANSPORT_INTERFACE , 164 } } 166  $medŸ_Œª¥Üt_de¡roy ( medŸ_Œª¥Üt * Œª¥Üt ) 168 * ·th ; 170 ià( Œª¥Üt -> sšk_w©ch ) 171 `sšk_»move_¡©e_cb ( Œª¥Üt -> sšk_w©ch ); 173 ià( Œª¥Üt -> sourû_w©ch ) 174 `sourû_»move_¡©e_cb ( Œª¥Üt -> sourû_w©ch ); 176 ·th = `g_¡rdup ( Œª¥Üt ->path); 177 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), ·th , 178 MEDIA_TRANSPORT_INTERFACE ); 180 `g_ä“ ( ·th ); 181 } } 183  medŸ_»que¡ * $medŸ_»que¡_ü—‹ ( DBusMes§ge * msg , gušt id ) 185  medŸ_»que¡ * »q ; 187 »q = `g_Ãw0 ( medŸ_»que¡ , 1); 188 »q -> msg = `dbus_mes§ge_»f (msg); 189 »q -> id = id; 191 `DBG ("Reque¡ c»©ed: m‘hod=% id=%u", `dbus_mes§ge_g‘_memb” ( msg ), 192 id ); 194  »q ; 195 } } 197  $medŸ_»que¡_»¶y ( medŸ_»que¡ * »q ,  ”r ) 199 DBusMes§ge * »¶y ; 201 `DBG ("Reque¡ % R•ly %s", `dbus_mes§ge_g‘_memb” ( »q -> msg ), 202 `¡»¼Ü ( ”r )); 204 ià(! ”r ) 205 »¶y = `g_dbus_ü—‹_»¶y ( »q -> msg , DBUS_TYPE_INVALID ); 207 »¶y = `g_dbus_ü—‹_”rÜ ( »q -> msg , 208 ERROR_INTERFACE ".Failed", 209 "%s", `¡»¼Ü ( ”r )); 211 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y ); 212 } } 214  $medŸ_owÃr_»move ( medŸ_owÃr * owÃr ) 216  medŸ_Œª¥Üt * Œª¥Üt = owÃr ->transport; 217  medŸ_»que¡ * »q = owÃr -> ³ndšg ; 219 ià(! »q ) 222 `DBG ("Owø% Reque¡ %s", owÃr -> Çme , 223 `dbus_mes§ge_g‘_memb” ( »q -> msg )); 225 ià( »q -> id ) 226 Œª¥Üt -> `ÿnûl Ñ¿n¥Üt, »q -> id ); 228 owÃr -> ³ndšg = NULL ; 229 ià( »q -> msg ) 230 `dbus_mes§ge_uÄef ( »q -> msg ); 232 `g_ä“ ( »q ); 233 } } 235  $medŸ_owÃr_ä“ ( medŸ_owÃr * owÃr ) 237 `DBG ("Owø%s", owÃr -> Çme ); 239 `medŸ_owÃr_»move ( owÃr ); 241 `g_ä“ ( owÃr -> Çme ); 242 `g_ä“ ( owÃr ); 243 } } 245  $medŸ_Œª¥Üt_»move_owÃr ( medŸ_Œª¥Üt * Œª¥Üt ) 247  medŸ_owÃr * owÃr = Œª¥Üt ->owner; 249 `DBG ("T¿n¥Üˆ% Owø%s", Œª¥Üt -> ·th , owÃr -> Çme ); 252 ià( owÃr -> ³ndšg ) 253 `medŸ_»que¡_»¶y ( owÃr -> ³ndšg , EIO ); 255 Œª¥Üt -> owÃr = NULL ; 257 ià( owÃr -> w©ch ) 258 `g_dbus_»move_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), owÃr -> w©ch ); 260 `medŸ_owÃr_ä“ ( owÃr ); 262 ià( `¡©e_š_u£ ( Œª¥Üt -> ¡©e )) 263 Œª¥Üt -> `su¥’d Ñ¿n¥Üt, NULL ); 264 } } 266  gboÞ—n $medŸ_Œª¥Üt_£t_fd ( medŸ_Œª¥Üt * Œª¥Üt , 267  fd , ušt16_t imtu , ušt16_ˆ omtu ) 269 ià( Œª¥Üt -> fd == fd) 270  TRUE ; 272 Œª¥Üt -> fd = fd; 273 Œª¥Üt -> imtu = imtu; 274 Œª¥Üt -> omtu = omtu; 276 `šfo ("%s: fd(%dè»ady", Œª¥Üt -> ·th , fd ); 278  TRUE ; 279 } } 281  $a2dp_»sume_com¶‘e ( avd * £ssiÚ , 282  avd_”rÜ * ”r , * u£r_d©a ) 284  medŸ_owÃr * owÃr = u£r_d©a ; 285  medŸ_»que¡ * »q = owÃr -> ³ndšg ; 286  medŸ_Œª¥Üt * Œª¥Üt = owÃr ->transport; 287  a2dp_£p * £p = `medŸ_’dpošt_g‘_£p ( Œª¥Üt -> ’dpošt ); 288  avd_¡»am * ¡»am ; 289  fd ; 290 ušt16_t imtu , omtu ; 291 gboÞ—n »t ; 293 »q -> id = 0; 295 ià( ”r ) 296  çž ; 298 ¡»am = `a2dp_£p_g‘_¡»am ( £p ); 299 ià( ¡»am =ð NULL ) 300  çž ; 302 »t = `avd_¡»am_g‘_Œª¥Üt ( ¡»am , & fd , & imtu , & omtu , NULL ); 303 ià( »t =ð FALSE ) 304  çž ; 306 `medŸ_Œª¥Üt_£t_fd ( Œª¥Üt , fd , imtu , omtu ); 308 »t = `g_dbus_£nd_»¶y ( `btd_g‘_dbus_cÚÃùiÚ (), »q -> msg , 309 DBUS_TYPE_UNIX_FD , & fd , 310 DBUS_TYPE_UINT16 , & imtu , 311 DBUS_TYPE_UINT16 , & omtu , 312 DBUS_TYPE_INVALID ); 313 ià( »t =ð FALSE ) 314  çž ; 316 `medŸ_owÃr_»move ( owÃr ); 318 `Œª¥Üt_£t_¡©e ( Œª¥Üt , TRANSPORT_STATE_ACTIVE ); 322 çž : 323 `medŸ_Œª¥Üt_»move_owÃr ( Œª¥Üt ); 324 } } 326  gušt $»sume_a2dp ( medŸ_Œª¥Üt * Œª¥Üt , 327  medŸ_owÃr * owÃr ) 329  a2dp_Œª¥Üt * a2dp = Œª¥Üt -> d©a ; 330  medŸ_’dpošt * ’dpošt = Œª¥Üt ->endpoint; 331  a2dp_£p * £p = `medŸ_’dpošt_g‘_£p ( ’dpošt ); 332 gušt id ; 334 ià( a2dp -> £ssiÚ =ð NULL ) { 335 a2dp -> £ssiÚ = `avd_g‘ ( Œª¥Üt -> deviû ); 336 ià( a2dp -> £ssiÚ =ð NULL ) 340 ià( `¡©e_š_u£ ( Œª¥Üt -> ¡©e )) 341  `a2dp_»sume ( a2dp -> £ssiÚ , £p , a2dp_»sume_com¶‘e , 342 owÃr ); 344 ià( `a2dp_£p_lock ( £p , a2dp -> £ssiÚ è=ð FALSE ) 347 id = `a2dp_»sume ( a2dp -> £ssiÚ , £p , a2dp_»sume_com¶‘e , owÃr ); 349 ià( id == 0) { 350 `a2dp_£p_uÆock ( £p , a2dp -> £ssiÚ ); 354 ià( Œª¥Üt -> ¡©e =ð TRANSPORT_STATE_IDLE ) 355 `Œª¥Üt_£t_¡©e ( Œª¥Üt , TRANSPORT_STATE_REQUESTING ); 357  id ; 358 } } 360  $a2dp_su¥’d_com¶‘e ( avd * £ssiÚ , 361  avd_”rÜ * ”r , * u£r_d©a ) 363  medŸ_owÃr * owÃr = u£r_d©a ; 364  medŸ_Œª¥Üt * Œª¥Üt = owÃr ->transport; 365  a2dp_Œª¥Üt * a2dp = Œª¥Üt -> d©a ; 366  a2dp_£p * £p = `medŸ_’dpošt_g‘_£p ( Œª¥Üt -> ’dpošt ); 369 ià( owÃr -> ³ndšg ) { 370 owÃr -> ³ndšg -> id = 0; 371 `medŸ_»que¡_»¶y ( owÃr -> ³ndšg , 0); 372 `medŸ_owÃr_»move ( owÃr ); 375 `a2dp_£p_uÆock ( £p , a2dp -> £ssiÚ ); 376 `Œª¥Üt_£t_¡©e ( Œª¥Üt , TRANSPORT_STATE_IDLE ); 377 `medŸ_Œª¥Üt_»move_owÃr ( Œª¥Üt ); 378 } } 380  gušt $su¥’d_a2dp ( medŸ_Œª¥Üt * Œª¥Üt , 381  medŸ_owÃr * owÃr ) 383  a2dp_Œª¥Üt * a2dp = Œª¥Üt -> d©a ; 384  medŸ_’dpošt * ’dpošt = Œª¥Üt ->endpoint; 385  a2dp_£p * £p = `medŸ_’dpošt_g‘_£p ( ’dpošt ); 387 ià( owÃr !ð NULL ) 388  `a2dp_su¥’d ( a2dp -> £ssiÚ , £p , a2dp_su¥’d_com¶‘e , 389 owÃr ); 391 `Œª¥Üt_£t_¡©e ( Œª¥Üt , TRANSPORT_STATE_IDLE ); 392 `a2dp_£p_uÆock ( £p , a2dp -> £ssiÚ ); 395 } } 397  $ÿnûl_a2dp ( medŸ_Œª¥Üt * Œª¥Üt , gušt id ) 399 `a2dp_ÿnûl ( id ); 400 } } 402  $medŸ_owÃr_ex™ ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 404  medŸ_owÃr * owÃr = u£r_d©a ; 406 owÃr -> w©ch = 0; 408 `medŸ_owÃr_»move ( owÃr ); 410 `medŸ_Œª¥Üt_»move_owÃr ( owÃr -> Œª¥Üt ); 411 } } 413  $medŸ_Œª¥Üt_£t_owÃr ( medŸ_Œª¥Üt * Œª¥Üt , 414  medŸ_owÃr * owÃr ) 416 `DBG ("T¿n¥Üˆ% Owø%s", Œª¥Üt -> ·th , owÃr -> Çme ); 417 Œª¥Üt -> owÃr = owner; 418 owÃr -> Œª¥Üt =ransport; 419 owÃr -> w©ch = `g_dbus_add_discÚÃù_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), 420 owÃr -> Çme , 421 medŸ_owÃr_ex™ , 422 owÃr , NULL ); 423 } } 425  medŸ_owÃr * $medŸ_owÃr_ü—‹ ( DBusMes§ge * msg ) 427  medŸ_owÃr * owÃr ; 429 owÃr = `g_Ãw0 ( medŸ_owÃr , 1); 430 owÃr -> Çme = `g_¡rdup ( `dbus_mes§ge_g‘_£nd” ( msg )); 432 `DBG ("Owøü—‹d: s’d”=%s", owÃr -> Çme ); 434  owÃr ; 435 } } 437  $medŸ_owÃr_add ( medŸ_owÃr * owÃr , 438  medŸ_»que¡ * »q ) 440 `DBG ("Owø% Reque¡ %s", owÃr -> Çme , 441 `dbus_mes§ge_g‘_memb” ( »q -> msg )); 443 owÃr -> ³ndšg = »q ; 444 } } 446  DBusMes§ge * $acquœe ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 447 * d©a ) 449  medŸ_Œª¥Üt * Œª¥Üt = d©a ; 450  medŸ_owÃr * owÃr ; 451  medŸ_»que¡ * »q ; 452 gušt id ; 454 ià( Œª¥Üt -> owÃr !ð NULL ) 455  `btd_”rÜ_nÙ_authÜized ( msg ); 457 ià( Œª¥Üt -> ¡©e >ð TRANSPORT_STATE_REQUESTING ) 458  `btd_”rÜ_nÙ_authÜized ( msg ); 460 owÃr = `medŸ_owÃr_ü—‹ ( msg ); 461 id = Œª¥Üt -> `»sume Ñ¿n¥Üt, owÃr ); 462 ià( id == 0) { 463 `medŸ_owÃr_ä“ ( owÃr ); 464  `btd_”rÜ_nÙ_authÜized ( msg ); 467 »q = `medŸ_»que¡_ü—‹ ( msg , id ); 468 `medŸ_owÃr_add ( owÃr , »q ); 469 `medŸ_Œª¥Üt_£t_owÃr ( Œª¥Üt , owÃr ); 471  NULL ; 472 } } 474  DBusMes§ge * $Œy_acquœe ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 475 * d©a ) 477  medŸ_Œª¥Üt * Œª¥Üt = d©a ; 478  medŸ_owÃr * owÃr ; 479  medŸ_»que¡ * »q ; 480 gušt id ; 482 ià( Œª¥Üt -> owÃr !ð NULL ) 483  `btd_”rÜ_nÙ_authÜized ( msg ); 485 ià( Œª¥Üt -> ¡©e >ð TRANSPORT_STATE_REQUESTING ) 486  `btd_”rÜ_nÙ_authÜized ( msg ); 488 ià( Œª¥Üt -> ¡©e !ð TRANSPORT_STATE_PENDING ) 489  `btd_”rÜ_nÙ_avažabË ( msg ); 491 owÃr = `medŸ_owÃr_ü—‹ ( msg ); 492 id = Œª¥Üt -> `»sume Ñ¿n¥Üt, owÃr ); 493 ià( id == 0) { 494 `medŸ_owÃr_ä“ ( owÃr ); 495  `btd_”rÜ_nÙ_authÜized ( msg ); 498 »q = `medŸ_»que¡_ü—‹ ( msg , id ); 499 `medŸ_owÃr_add ( owÃr , »q ); 500 `medŸ_Œª¥Üt_£t_owÃr ( Œª¥Üt , owÃr ); 502  NULL ; 503 } } 505  DBusMes§ge * $»Ëa£ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 506 * d©a ) 508  medŸ_Œª¥Üt * Œª¥Üt = d©a ; 509  medŸ_owÃr * owÃr = Œª¥Üt ->owner; 510 cÚ¡ * £nd” ; 511  medŸ_»que¡ * »q ; 512 gušt id ; 514 £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 516 ià( owÃr =ð NULL || `g_¡rcmp0 (owÃr-> Çme , £nd” ) != 0) 517  `btd_”rÜ_nÙ_authÜized ( msg ); 519 ià( owÃr -> ³ndšg ) { 520 cÚ¡ * memb” ; 522 memb” = `dbus_mes§ge_g‘_memb” ( owÃr -> ³ndšg -> msg ); 524 ià( `g_¡r_equ® ( memb” , "Acquire")) 525 `medŸ_owÃr_»move ( owÃr ); 527  `btd_”rÜ_š_´og»ss ( msg ); 530 `Œª¥Üt_£t_¡©e ( Œª¥Üt , TRANSPORT_STATE_SUSPENDING ); 532 id = Œª¥Üt -> `su¥’d Ñ¿n¥Üt, owÃr ); 533 ià( id == 0) { 534 `medŸ_Œª¥Üt_»move_owÃr ( Œª¥Üt ); 535  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 538 »q = `medŸ_»que¡_ü—‹ ( msg , id ); 539 `medŸ_owÃr_add ( owÃr , »q ); 541  NULL ; 542 } } 544  gboÞ—n $g‘_deviû (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 545 DBusMes§geI‹r * ™” , * d©a ) 547  medŸ_Œª¥Üt * Œª¥Üt = d©a ; 548 cÚ¡ * ·th = `deviû_g‘_·th ( Œª¥Üt -> deviû ); 550 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 552  TRUE ; 553 } } 555  gboÞ—n $g‘_uuid (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 556 DBusMes§geI‹r * ™” , * d©a ) 558  medŸ_Œª¥Üt * Œª¥Üt = d©a ; 559 cÚ¡ * uuid = `medŸ_’dpošt_g‘_uuid ( Œª¥Üt -> ’dpošt ); 561 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & uuid ); 563  TRUE ; 564 } } 566  gboÞ—n $g‘_codec (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 567 DBusMes§geI‹r * ™” , * d©a ) 569  medŸ_Œª¥Üt * Œª¥Üt = d©a ; 570 ušt8_t codec = `medŸ_’dpošt_g‘_codec ( Œª¥Üt -> ’dpošt ); 572 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BYTE , & codec ); 574  TRUE ; 575 } } 577  gboÞ—n $g‘_cÚfigu¿tiÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 578 DBusMes§geI‹r * ™” , * d©a ) 580  medŸ_Œª¥Üt * Œª¥Üt = d©a ; 581 DBusMes§geI‹r ¬¿y ; 583 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 584 DBUS_TYPE_BYTE_AS_STRING , & ¬¿y ); 586 `dbus_mes§ge_™”_­³nd_fixed_¬¿y (& ¬¿y , DBUS_TYPE_BYTE , 587 & Œª¥Üt -> cÚfigu¿tiÚ , 588 Œª¥Üt -> size ); 590 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ¬¿y ); 592  TRUE ; 593 } } 595  gboÞ—n $g‘_¡©e (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 596 DBusMes§geI‹r * ™” , * d©a ) 598  medŸ_Œª¥Üt * Œª¥Üt = d©a ; 599 cÚ¡ * ¡©e = `¡©e2¡r ( Œª¥Üt ->state); 601 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¡©e ); 603  TRUE ; 604 } } 606  gboÞ—n $d–ay_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 608  medŸ_Œª¥Üt * Œª¥Üt = d©a ; 609  a2dp_Œª¥Üt * a2dp = Œª¥Üt -> d©a ; 611  a2dp -> d–ay != 0; 612 } } 614  gboÞ—n $g‘_d–ay (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 615 DBusMes§geI‹r * ™” , * d©a ) 617  medŸ_Œª¥Üt * Œª¥Üt = d©a ; 618  a2dp_Œª¥Üt * a2dp = Œª¥Üt -> d©a ; 620 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT16 , & a2dp -> d–ay ); 622  TRUE ; 623 } } 625  gboÞ—n $vÞume_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 627  medŸ_Œª¥Üt * Œª¥Üt = d©a ; 628  a2dp_Œª¥Üt * a2dp = Œª¥Üt -> d©a ; 630  a2dp -> vÞume <= 127; 631 } } 633  gboÞ—n $g‘_vÞume (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 634 DBusMes§geI‹r * ™” , * d©a ) 636  medŸ_Œª¥Üt * Œª¥Üt = d©a ; 637  a2dp_Œª¥Üt * a2dp = Œª¥Üt -> d©a ; 639 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT16 , & a2dp -> vÞume ); 641  TRUE ; 642 } } 644  $£t_vÞume (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 645 DBusMes§geI‹r * ™” , GDBusP’dšgPrÝ”tyS‘ id , 646 * d©a ) 648  medŸ_Œª¥Üt * Œª¥Üt = d©a ; 649  a2dp_Œª¥Üt * a2dp = Œª¥Üt -> d©a ; 650 ušt16_t vÞume ; 652 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_UINT16 ) { 653 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 654 ERROR_INTERFACE ".InvalidArguments", 659 `dbus_mes§ge_™”_g‘_basic ( ™” , & vÞume ); 661 ià( vÞume > 127) { 662 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 663 ERROR_INTERFACE ".InvalidArguments", 668 ià( a2dp -> vÞume != volume) 669 `avrý_£t_vÞume ( Œª¥Üt -> deviû , vÞume ); 671 a2dp -> vÞume = volume; 673 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 674 } } 676 cÚ¡ GDBusM‘hodTabË gŒª¥Üt_m‘hods [] = { 677 { GDBUS_ASYNC_METHOD ("Acquire", 678 NULL , 679 GDBUS_ARGS ({ "fd", "h" }, { "mtu_r", "q" }, 681 acquœe ) }, 682 { GDBUS_ASYNC_METHOD ("TryAcquire", 683 NULL , 684 GDBUS_ARGS ({ "fd", "h" }, { "mtu_r", "q" }, 686 Œy_acquœe ) }, 687 { GDBUS_ASYNC_METHOD ("R–—£", NULL , NULL, »Ëa£ ) }, 691 cÚ¡ GDBusPrÝ”tyTabË gŒª¥Üt_´Ý”t›s [] = { 692 { "Deviû", "o", g‘_deviû }, 693 { "UUID", "s", g‘_uuid }, 694 { "Codec", "y", g‘_codec }, 695 { "CÚfigu¿tiÚ", "ay", g‘_cÚfigu¿tiÚ }, 696 { "S‹", "s", g‘_¡©e }, 697 { "D–ay", "q", g‘_d–ay , NULL , d–ay_exi¡s }, 698 { "VÞume", "q", g‘_vÞume , £t_vÞume , vÞume_exi¡s }, 702  $de¡roy_a2dp (* d©a ) 704  a2dp_Œª¥Üt * a2dp = d©a ; 706 ià( a2dp -> £ssiÚ ) 707 `avd_uÄef ( a2dp -> £ssiÚ ); 709 `g_ä“ ( a2dp ); 710 } } 712  $medŸ_Œª¥Üt_ä“ (* d©a ) 714  medŸ_Œª¥Üt * Œª¥Üt = d©a ; 716 Œª¥Üts = `g_¦i¡_»move Ñ¿n¥Üts, Œª¥Üt ); 718 ià( Œª¥Üt -> owÃr ) 719 `medŸ_Œª¥Üt_»move_owÃr ( Œª¥Üt ); 721 ià( Œª¥Üt -> de¡roy !ð NULL ) 722 Œª¥Üt -> `de¡roy Ñ¿n¥Üt-> d©a ); 724 `g_ä“ ( Œª¥Üt -> cÚfigu¿tiÚ ); 725 `g_ä“ ( Œª¥Üt -> ·th ); 726 `g_ä“ ( Œª¥Üt ); 727 } } 729  $Œª¥Üt_upd©e_¶ayšg ( medŸ_Œª¥Üt * Œª¥Üt , 730 gboÞ—n ¶ayšg ) 732 `DBG ("% S‹=% PÏyšg=%d", Œª¥Üt -> ·th , 733 ¡r_¡©e [ Œª¥Üt -> ¡©e ], ¶ayšg ); 735 ià( ¶ayšg =ð FALSE ) { 736 ià( Œª¥Üt -> ¡©e =ð TRANSPORT_STATE_PENDING ) 737 `Œª¥Üt_£t_¡©e ( Œª¥Üt , TRANSPORT_STATE_IDLE ); 738 ià( Œª¥Üt -> ¡©e =ð TRANSPORT_STATE_ACTIVE ) { 740 ià( Œª¥Üt -> owÃr !ð NULL ) 741 `medŸ_Œª¥Üt_»move_owÃr ( Œª¥Üt ); 743 } ià( Œª¥Üt -> ¡©e =ð TRANSPORT_STATE_IDLE ) 744 `Œª¥Üt_£t_¡©e ( Œª¥Üt , TRANSPORT_STATE_PENDING ); 745 } } 747  $sšk_¡©e_chªged ( btd_£rviû * £rviû , 748 sšk_¡©e_t Þd_¡©e , 749 sšk_¡©e_t Ãw_¡©e , 750 * u£r_d©a ) 752  medŸ_Œª¥Üt * Œª¥Üt = u£r_d©a ; 754 ià( Ãw_¡©e =ð SINK_STATE_PLAYING ) 755 `Œª¥Üt_upd©e_¶ayšg ( Œª¥Üt , TRUE ); 757 `Œª¥Üt_upd©e_¶ayšg ( Œª¥Üt , FALSE ); 758 } } 760  $sourû_¡©e_chªged ( btd_£rviû * £rviû , 761 sourû_¡©e_t Þd_¡©e , 762 sourû_¡©e_t Ãw_¡©e , 763 * u£r_d©a ) 765  medŸ_Œª¥Üt * Œª¥Üt = u£r_d©a ; 767 ià( Ãw_¡©e =ð SOURCE_STATE_PLAYING ) 768 `Œª¥Üt_upd©e_¶ayšg ( Œª¥Üt , TRUE ); 770 `Œª¥Üt_upd©e_¶ayšg ( Œª¥Üt , FALSE ); 771 } } 773  $medŸ_Œª¥Üt_š™_sourû ( medŸ_Œª¥Üt * Œª¥Üt ) 775  btd_£rviû * £rviû ; 776  a2dp_Œª¥Üt * a2dp ; 778 £rviû = `btd_deviû_g‘_£rviû ( Œª¥Üt -> deviû , A2DP_SINK_UUID ); 779 ià( £rviû =ð NULL ) 780  - EINVAL ; 782 a2dp = `g_Ãw0 ( a2dp_Œª¥Üt , 1); 784 Œª¥Üt -> »sume = »sume_a2dp ; 785 Œª¥Üt -> su¥’d = su¥’d_a2dp ; 786 Œª¥Üt -> ÿnûl = ÿnûl_a2dp ; 787 Œª¥Üt -> d©a = a2dp ; 788 Œª¥Üt -> de¡roy = de¡roy_a2dp ; 790 a2dp -> vÞume = -1; 791 Œª¥Üt -> sšk_w©ch = `sšk_add_¡©e_cb ( £rviû , sšk_¡©e_chªged , 792 Œª¥Üt ); 795 } } 797  $medŸ_Œª¥Üt_š™_sšk ( medŸ_Œª¥Üt * Œª¥Üt ) 799  btd_£rviû * £rviû ; 800  a2dp_Œª¥Üt * a2dp ; 802 £rviû = `btd_deviû_g‘_£rviû ( Œª¥Üt -> deviû , A2DP_SOURCE_UUID ); 803 ià( £rviû =ð NULL ) 804  - EINVAL ; 806 a2dp = `g_Ãw0 ( a2dp_Œª¥Üt , 1); 808 Œª¥Üt -> »sume = »sume_a2dp ; 809 Œª¥Üt -> su¥’d = su¥’d_a2dp ; 810 Œª¥Üt -> ÿnûl = ÿnûl_a2dp ; 811 Œª¥Üt -> d©a = a2dp ; 812 Œª¥Üt -> de¡roy = de¡roy_a2dp ; 814 a2dp -> vÞume = 127; 815 `avrý_£t_vÞume ( Œª¥Üt -> deviû , a2dp -> vÞume ); 816 Œª¥Üt -> sourû_w©ch = `sourû_add_¡©e_cb ( £rviû , 817 sourû_¡©e_chªged , 818 Œª¥Üt ); 821 } } 823  medŸ_Œª¥Üt * $medŸ_Œª¥Üt_ü—‹ ( btd_deviû * deviû , 824 ušt8_t * cÚfigu¿tiÚ , 825 size_t size , * d©a ) 827  medŸ_’dpošt * ’dpošt = d©a ; 828  medŸ_Œª¥Üt * Œª¥Üt ; 829 cÚ¡ * uuid ; 830  fd = 0; 832 Œª¥Üt = `g_Ãw0 ( medŸ_Œª¥Üt , 1); 833 Œª¥Üt -> deviû = device; 834 Œª¥Üt -> ’dpošt =ƒndpoint; 835 Œª¥Üt -> cÚfigu¿tiÚ = `g_Ãw ( ušt8_t , size ); 836 `memýy ( Œª¥Üt -> cÚfigu¿tiÚ , cÚfigu¿tiÚ, size ); 837 Œª¥Üt -> size = size; 838 Œª¥Üt -> ·th = `g_¡rdup_´štf ("%s/fd%d", `deviû_g‘_·th ( deviû ), 839 fd ++); 840 Œª¥Üt -> fd = -1; 842 uuid = `medŸ_’dpošt_g‘_uuid ( ’dpošt ); 843 ià( `¡rÿ£cmp ( uuid , A2DP_SOURCE_UUID ) == 0) { 844 ià( `medŸ_Œª¥Üt_š™_sourû ( Œª¥Üt ) < 0) 845  çž ; 846 } ià( `¡rÿ£cmp ( uuid , A2DP_SINK_UUID ) == 0) { 847 ià( `medŸ_Œª¥Üt_š™_sšk ( Œª¥Üt ) < 0) 848  çž ; 850  çž ; 852 ià( `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 853 Œª¥Üt -> ·th , MEDIA_TRANSPORT_INTERFACE , 854 Œª¥Üt_m‘hods , NULL , Œª¥Üt_´Ý”t›s , 855 Œª¥Üt , medŸ_Œª¥Üt_ä“ è=ð FALSE ) { 856 `”rÜ ("Could‚Ù„egi¡”¿n¥Üˆ%s", Œª¥Üt -> ·th ); 857  çž ; 860 Œª¥Üts = `g_¦i¡_­³nd Ñ¿n¥Üts, Œª¥Üt ); 862  Œª¥Üt ; 864 çž : 865 `medŸ_Œª¥Üt_ä“ ( Œª¥Üt ); 866  NULL ; 867 } } 869 cÚ¡ * $medŸ_Œª¥Üt_g‘_·th ( medŸ_Œª¥Üt * Œª¥Üt ) 871  Œª¥Üt -> ·th ; 872 } } 874  $medŸ_Œª¥Üt_upd©e_d–ay ( medŸ_Œª¥Üt * Œª¥Üt , 875 ušt16_t d–ay ) 877  a2dp_Œª¥Üt * a2dp = Œª¥Üt -> d©a ; 880 ià( a2dp -> d–ay == delay) 883 a2dp -> d–ay = delay; 885 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 886 Œª¥Üt -> ·th , 887 MEDIA_TRANSPORT_INTERFACE , "Delay"); 888 } } 890  btd_deviû * $medŸ_Œª¥Üt_g‘_dev ( medŸ_Œª¥Üt * Œª¥Üt ) 892  Œª¥Üt -> deviû ; 893 } } 895 ušt16_t $medŸ_Œª¥Üt_g‘_vÞume ( medŸ_Œª¥Üt * Œª¥Üt ) 897  a2dp_Œª¥Üt * a2dp = Œª¥Üt -> d©a ; 898  a2dp -> vÞume ; 899 } } 901  $medŸ_Œª¥Üt_upd©e_vÞume ( medŸ_Œª¥Üt * Œª¥Üt , 902 ušt8_t vÞume ) 904  a2dp_Œª¥Üt * a2dp = Œª¥Üt -> d©a ; 907 ià( a2dp -> vÞume == volume) 910 a2dp -> vÞume = volume; 912 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 913 Œª¥Üt -> ·th , 914 MEDIA_TRANSPORT_INTERFACE , "Volume"); 915 } } 917 ušt8_t $medŸ_Œª¥Üt_g‘_deviû_vÞume ( btd_deviû * dev ) 919 GSLi¡ * l ; 921 ià( dev =ð NULL ) 924  l = Œª¥Üts ;†;† =†-> Ãxt ) { 925  medŸ_Œª¥Üt * Œª¥Üt = l -> d©a ; 926 ià( Œª¥Üt -> deviû !ð dev ) 930 ià( `medŸ_’dpošt_g‘_£p ( Œª¥Üt -> ’dpošt )) 931  `medŸ_Œª¥Üt_g‘_vÞume ( Œª¥Üt ); 935 } } 937  $medŸ_Œª¥Üt_upd©e_deviû_vÞume ( btd_deviû * dev , 938 ušt8_t vÞume ) 940 GSLi¡ * l ; 942 ià( dev =ð NULL ) 945  l = Œª¥Üts ;†;† =†-> Ãxt ) { 946  medŸ_Œª¥Üt * Œª¥Üt = l -> d©a ; 947 ià( Œª¥Üt -> deviû !ð dev ) 951 ià( `medŸ_’dpošt_g‘_£p ( Œª¥Üt -> ’dpošt )) 952 `medŸ_Œª¥Üt_upd©e_vÞume ( Œª¥Üt , vÞume ); 954 } } @profiles/audio/transport.h 25  gmedŸ_Œª¥Üt ; 27  medŸ_Œª¥Üt * medŸ_Œª¥Üt_ü—‹ ( btd_deviû * deviû , 28 ušt8_t * cÚfigu¿tiÚ , 29 size_t size , * d©a ); 31  medŸ_Œª¥Üt_de¡roy ( medŸ_Œª¥Üt * Œª¥Üt ); 32 cÚ¡ * medŸ_Œª¥Üt_g‘_·th ( medŸ_Œª¥Üt * Œª¥Üt ); 33  btd_deviû * medŸ_Œª¥Üt_g‘_dev ( medŸ_Œª¥Üt * Œª¥Üt ); 34 ušt16_t medŸ_Œª¥Üt_g‘_vÞume ( medŸ_Œª¥Üt * Œª¥Üt ); 35  medŸ_Œª¥Üt_upd©e_d–ay ( medŸ_Œª¥Üt * Œª¥Üt , 36 ušt16_t d–ay ); 37  medŸ_Œª¥Üt_upd©e_vÞume ( medŸ_Œª¥Üt * Œª¥Üt , 38 ušt8_t vÞume ); 39  Œª¥Üt_g‘_´Ý”t›s ( medŸ_Œª¥Üt * Œª¥Üt , 40 DBusMes§geI‹r * ™” ); 42 ušt8_t medŸ_Œª¥Üt_g‘_deviû_vÞume ( btd_deviû * dev ); 43  medŸ_Œª¥Üt_upd©e_deviû_vÞume ( btd_deviû * dev , 44 ušt8_t vÞume ); @profiles/cups/cups.h 25 mCUPS_BACKEND_OK = 0, 26 mCUPS_BACKEND_FAILED = 1, 27 mCUPS_BACKEND_AUTH_REQUIRED = 2, 28 mCUPS_BACKEND_HOLD = 3, 29 mCUPS_BACKEND_STOP = 4, 30 mCUPS_BACKEND_CANCEL = 5, 31 mCUPS_BACKEND_RETRY = 6, 34  sdp_£¬ch_¥p ( sdp_£ssiÚ_t * sdp , ušt8_t * chªÃl ); 35  sdp_£¬ch_hüp ( sdp_£ssiÚ_t * sdp , * ù¾_psm , * d©a_psm ); 37  ¥p_´št ( bdaddr_t * ¤c , bdaddr_ˆ* d¡ , ušt8_t chªÃl ,  fd ,  cÝ›s , cÚ¡ * cups_þass ); 38  hüp_´št ( bdaddr_t * ¤c , bdaddr_ˆ* d¡ ,  ù¾_psm ,  d©a_psm ,  fd ,  cÝ›s , cÚ¡ * cups_þass ); @profiles/cups/hcrp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡ršg.h > 32  ~ 33  ~ 35  ~ 36  ~ 37  ~ 38  ~ 40  ~<Ãtš‘/š.h > 42  ~"cups.h " 44  #HCRP_PDU_CREDIT_GRANT 0x0001 ) 45  #HCRP_PDU_CREDIT_REQUEST 0x0002 ) 46  #HCRP_PDU_GET_LPT_STATUS 0x0005 ) 48  #HCRP_STATUS_FEATURE_UNSUPPORTED 0x0000 ) 49  #HCRP_STATUS_SUCCESS 0x0001 ) 50  #HCRP_STATUS_CREDIT_SYNC_ERROR 0x0002 ) 51  #HCRP_STATUS_GENERIC_FAILURE 0xffff ) 53  shüp_pdu_hdr { 54 ušt16_t mpid ; 55 ušt16_t mtid ; 56 ušt16_t m¶’ ; 57 } __©Œibu‹__ (( ·cked )); 58  #HCRP_PDU_HDR_SIZE 6 ) 60  shüp_üed™_g¿Á_ý { 61 ušt32_t müed™ ; 62 } __©Œibu‹__ (( ·cked )); 63  #HCRP_CREDIT_GRANT_CP_SIZE 4 ) 65  shüp_üed™_g¿Á_½ { 66 ušt16_t m¡©us ; 67 } __©Œibu‹__ (( ·cked )); 68  #HCRP_CREDIT_GRANT_RP_SIZE 2 ) 70  shüp_üed™_»que¡_½ { 71 ušt16_t m¡©us ; 72 ušt32_t müed™ ; 73 } __©Œibu‹__ (( ·cked )); 74  #HCRP_CREDIT_REQUEST_RP_SIZE 6 ) 76  shüp_g‘_Ít_¡©us_½ { 77 ušt16_t m¡©us ; 78 ušt8_t mÍt_¡©us ; 79 } __©Œibu‹__ (( ·cked )); 80  #HCRP_GET_LPT_STATUS_RP_SIZE 3 ) 82  $hüp_üed™_g¿Á ( sk , ušt16_t tid , ušt32_t üed™ ) 84  hüp_pdu_hdr hdr ; 85  hüp_üed™_g¿Á_ý ý ; 86  hüp_üed™_g¿Á_½ ½ ; 87  buf [128]; 88  Ën ; 90 hdr . pid = `htÚs ( HCRP_PDU_CREDIT_GRANT ); 91 hdr . tid = `htÚs (tid); 92 hdr . ¶’ = `htÚs ( HCRP_CREDIT_GRANT_CP_SIZE ); 93 ý . üed™ = credit; 94 `memýy ( buf , & hdr , HCRP_PDU_HDR_SIZE ); 95 `memýy ( buf + HCRP_PDU_HDR_SIZE , & ý , HCRP_CREDIT_GRANT_CP_SIZE ); 96 Ën = `wr™e ( sk , buf , HCRP_PDU_HDR_SIZE + HCRP_CREDIT_GRANT_CP_SIZE ); 97 ià( Ën < 0) 98  Ën ; 100 Ën = `»ad ( sk , buf , (buf)); 101 ià( Ën < 0) 102  Ën ; 104 `memýy (& hdr , buf , HCRP_PDU_HDR_SIZE ); 105 `memýy (& ½ , buf + HCRP_PDU_HDR_SIZE , HCRP_CREDIT_GRANT_RP_SIZE ); 107 ià( `Áohs ( ½ . ¡©us è!ð HCRP_STATUS_SUCCESS ) { 108 ”ºo = EIO ; 113 } } 115  $hüp_üed™_»que¡ ( sk , ušt16_t tid , ušt32_t * üed™ ) 117  hüp_pdu_hdr hdr ; 118  hüp_üed™_»que¡_½ ½ ; 119  buf [128]; 120  Ën ; 122 hdr . pid = `htÚs ( HCRP_PDU_CREDIT_REQUEST ); 123 hdr . tid = `htÚs (tid); 124 hdr . ¶’ = `htÚs (0); 125 `memýy ( buf , & hdr , HCRP_PDU_HDR_SIZE ); 126 Ën = `wr™e ( sk , buf , HCRP_PDU_HDR_SIZE ); 127 ià( Ën < 0) 128  Ën ; 130 Ën = `»ad ( sk , buf , (buf)); 131 ià( Ën < 0) 132  Ën ; 134 `memýy (& hdr , buf , HCRP_PDU_HDR_SIZE ); 135 `memýy (& ½ , buf + HCRP_PDU_HDR_SIZE , HCRP_CREDIT_REQUEST_RP_SIZE ); 137 ià( `Áohs ( ½ . ¡©us è!ð HCRP_STATUS_SUCCESS ) { 138 ”ºo = EIO ; 142 ià( üed™ ) 143 * üed™ = `Áohl ( ½ .credit); 146 } } 148  $hüp_g‘_Ít_¡©us ( sk , ušt16_t tid , ušt8_t * Ít_¡©us ) 150  hüp_pdu_hdr hdr ; 151  hüp_g‘_Ít_¡©us_½ ½ ; 152  buf [128]; 153  Ën ; 155 hdr . pid = `htÚs ( HCRP_PDU_GET_LPT_STATUS ); 156 hdr . tid = `htÚs (tid); 157 hdr . ¶’ = `htÚs (0); 158 `memýy ( buf , & hdr , HCRP_PDU_HDR_SIZE ); 159 Ën = `wr™e ( sk , buf , HCRP_PDU_HDR_SIZE ); 160 ià( Ën < 0) 161  Ën ; 163 Ën = `»ad ( sk , buf , (buf)); 164 ià( Ën < 0) 165  Ën ; 167 `memýy (& hdr , buf , HCRP_PDU_HDR_SIZE ); 168 `memýy (& ½ , buf + HCRP_PDU_HDR_SIZE , HCRP_GET_LPT_STATUS_RP_SIZE ); 170 ià( `Áohs ( ½ . ¡©us è!ð HCRP_STATUS_SUCCESS ) { 171 ”ºo = EIO ; 175 ià( Ít_¡©us ) 176 * Ít_¡©us = ½ .lpt_status; 179 } } 181  šlše  $hüp_g‘_Ãxt_tid ( tid ) 183 ià( tid > 0xf000) 186  tid + 1; 187 } } 189  $hüp_´št ( bdaddr_t * ¤c , bdaddr_ˆ* d¡ ,  ù¾_psm ,  d©a_psm ,  fd ,  cÝ›s , cÚ¡ * cups_þass ) 191  sockaddr_l2 addr ; 192  l2ÿp_ÝtiÚs Ýts ; 193 sockËn_t size ; 194  buf [2048]; 195  i , ù¾_sk , d©a_sk , couÁ , Ën , timeout = 0; 196  mtu ; 197 ušt8_t ¡©us ; 198 ušt16_t tid = 0; 199 ušt32_t tmp , üed™ = 0; 201 ià(( ù¾_sk = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_L2CAP )) < 0) { 202 `³¼Ü ("ERROR: Can't create socket"); 203 ià( cups_þass ) 204  CUPS_BACKEND_FAILED ; 206  CUPS_BACKEND_RETRY ; 209 `mem£t (& addr , 0, (addr)); 210 addr . l2_çmžy = AF_BLUETOOTH ; 211 `baýy (& addr . l2_bdaddr , ¤c ); 213 ià( `bšd ( ù¾_sk , ( sockaddr *è& addr , (addr)) < 0) { 214 `³¼Ü ("ERROR: Can't bind socket"); 215 `þo£ ( ù¾_sk ); 216 ià( cups_þass ) 217  CUPS_BACKEND_FAILED ; 219  CUPS_BACKEND_RETRY ; 222 `mem£t (& addr , 0, (addr)); 223 addr . l2_çmžy = AF_BLUETOOTH ; 224 `baýy (& addr . l2_bdaddr , d¡ ); 225 addr . l2_psm = `htobs ( ù¾_psm ); 227 ià( `cÚÃù ( ù¾_sk , ( sockaddr *è& addr , (addr)) < 0) { 228 `³¼Ü ("ERROR: Can't connecto device"); 229 `þo£ ( ù¾_sk ); 230 ià( cups_þass ) 231  CUPS_BACKEND_FAILED ; 233  CUPS_BACKEND_RETRY ; 236 ià(( d©a_sk = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_L2CAP )) < 0) { 237 `³¼Ü ("ERROR: Can't create socket"); 238 `þo£ ( ù¾_sk ); 239 ià( cups_þass ) 240  CUPS_BACKEND_FAILED ; 242  CUPS_BACKEND_RETRY ; 245 `mem£t (& addr , 0, (addr)); 246 addr . l2_çmžy = AF_BLUETOOTH ; 247 `baýy (& addr . l2_bdaddr , ¤c ); 249 ià( `bšd ( d©a_sk , ( sockaddr *è& addr , (addr)) < 0) { 250 `³¼Ü ("ERROR: Can't bind socket"); 251 `þo£ ( d©a_sk ); 252 `þo£ ( ù¾_sk ); 253 ià( cups_þass ) 254  CUPS_BACKEND_FAILED ; 256  CUPS_BACKEND_RETRY ; 259 `mem£t (& addr , 0, (addr)); 260 addr . l2_çmžy = AF_BLUETOOTH ; 261 `baýy (& addr . l2_bdaddr , d¡ ); 262 addr . l2_psm = `htobs ( d©a_psm ); 264 ià( `cÚÃù ( d©a_sk , ( sockaddr *è& addr , (addr)) < 0) { 265 `³¼Ü ("ERROR: Can't connecto device"); 266 `þo£ ( d©a_sk ); 267 `þo£ ( ù¾_sk ); 268 ià( cups_þass ) 269  CUPS_BACKEND_FAILED ; 271  CUPS_BACKEND_RETRY ; 274 `åuts ("STATE: -cÚÃùšg-to-deviû\n", ¡d”r ); 276 `mem£t (& Ýts , 0, (opts)); 277 size = ( Ýts ); 279 ià( `g‘sockÝt ( d©a_sk , SOL_L2CAP , L2CAP_OPTIONS , & Ýts , & size ) < 0) { 280 `³¼Ü ("ERROR: Can't get socket options"); 281 `þo£ ( d©a_sk ); 282 `þo£ ( ù¾_sk ); 283 ià( cups_þass ) 284  CUPS_BACKEND_FAILED ; 286  CUPS_BACKEND_RETRY ; 289 mtu = Ýts . omtu ; 292 ià( fd == 0) { 293 #ifdeà HAVE_SIGSET 294 `sig£t ( SIGTERM , SIG_IGN ); 295 #–ià `defšed ( HAVE_SIGACTION ) 296 `mem£t (& aùiÚ , 0, (action)); 297 `sigem±y£t (& aùiÚ . §_mask ); 298 aùiÚ . §_hªdËr = SIG_IGN ; 299 `sigaùiÚ ( SIGTERM , & aùiÚ , NULL ); 301 `sigÇl ( SIGTERM , SIG_IGN ); 305 tid = `hüp_g‘_Ãxt_tid (tid); 306 ià( `hüp_üed™_g¿Á ( ù¾_sk , tid , 0) < 0) { 307 `årštf ( ¡d”r , "ERROR: Can't grant initial credits\n"); 308 `þo£ ( d©a_sk ); 309 `þo£ ( ù¾_sk ); 310 ià( cups_þass ) 311  CUPS_BACKEND_FAILED ; 313  CUPS_BACKEND_RETRY ; 316  i = 0; i < cÝ›s ; i++) { 318 ià( fd != 0) { 319 `årštf ( ¡d”r , "PAGE: 1 1\n"); 320 `l£ek ( fd , 0, SEEK_SET ); 324 ià( üed™ < mtu ) { 325 tid = `hüp_g‘_Ãxt_tid (tid); 326 ià(! `hüp_üed™_»que¡ ( ù¾_sk , tid , & tmp )) { 327 üed™ +ð tmp ; 328 timeout = 0; 332 ià(! üed™ ) { 333 ià( timeout ++ > 300) { 334 tid = `hüp_g‘_Ãxt_tid (tid); 335 ià(! `hüp_g‘_Ít_¡©us ( ù¾_sk , tid , & ¡©us )) 336 `årštf ( ¡d”r , "ERROR: LPT stu 0x%02x\n", ¡©us ); 340 `¦“p (1); 344 couÁ = `»ad ( fd , buf , ( üed™ > mtu ) ? mtu : credit); 345 ià( couÁ <= 0) 348 Ën = `wr™e ( d©a_sk , buf , couÁ ); 349 ià( Ën < 0) { 350 `³¼Ü ("ERROR: Error writingo device"); 351 `þo£ ( d©a_sk ); 352 `þo£ ( ù¾_sk ); 353  CUPS_BACKEND_FAILED ; 356 ià( Ën !ð couÁ ) 357 `årštf ( ¡d”r , "ERROR: Can't send complete data\n"); 359 üed™ -ð Ën ; 364 `þo£ ( d©a_sk ); 365 `þo£ ( ù¾_sk ); 367  CUPS_BACKEND_OK ; 368 } } @profiles/cups/main.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 34  ~ 35  ~ 36  ~ 37  ~ 39  ~ 40  ~ 41  ~ 43  ~ 45  ~"cups.h " 47  scups_deviû { 48 * mbdaddr ; 49 * mÇme ; 50 * mid ; 53  GSLi¡ * gdeviû_li¡ = NULL ; 54  GMašLoÝ * gloÝ = NULL ; 55  DBusCÚÃùiÚ * gcÚn = NULL ; 56  gboÞ—n gdošg_disco = FALSE ; 58  #ATTRID_1284ID 0x0300 ) 60  scÚ‹xt_d©a { 61 gboÞ—n mfound ; 62 * mid ; 65  $–em’t_¡¬t ( GM¬kupP¬£CÚ‹xt * cÚ‹xt , 66 cÚ¡ * –em’t_Çme , 67 cÚ¡ ** ©Œibu‹_Çmes , 68 cÚ¡ ** ©Œibu‹_v®ues , 69 gpoš‹r u£r_d©a , GE¼Ü ** ”r ) 71  cÚ‹xt_d©a * ùx_d©a = u£r_d©a ; 73 ià(! `¡rcmp ( –em’t_Çme , "record")) 76 ià(! `¡rcmp ( –em’t_Çme , "attribute")) { 77  i ; 78  i = 0; ©Œibu‹_Çmes [i]; i++) { 79 ià( `¡rcmp ( ©Œibu‹_Çmes [ i ], "id") != 0) 81 ià( `¡¹Þ ( ©Œibu‹_v®ues [ i ], 0, 0è=ð ATTRID_1284ID ) 82 ùx_d©a -> found = TRUE ; 88 ià( ùx_d©a -> found && ! `¡rcmp ( –em’t_Çme , "text")) { 89  i ; 90  i = 0; ©Œibu‹_Çmes [i]; i++) { 91 ià(! `¡rcmp ( ©Œibu‹_Çmes [ i ], "value")) { 92 ùx_d©a -> id = `g_¡rdup ( ©Œibu‹_v®ues [ i ] + 2); 93 ùx_d©a -> found = FALSE ; 97 } } 99  GM¬kupP¬£r g·r£r = { 100 –em’t_¡¬t , NULL , NULL, NULL, NULL 103 * $sdp_xml_·r£_»cÜd (cÚ¡ * d©a ) 105 GM¬kupP¬£CÚ‹xt * ùx ; 106  cÚ‹xt_d©a ùx_d©a ; 107  size ; 109 size = `¡¾’ ( d©a ); 110 ùx_d©a . found = FALSE ; 111 ùx_d©a . id = NULL ; 112 ùx = `g_m¬kup_·r£_cÚ‹xt_Ãw (& ·r£r , 0, & ùx_d©a , NULL ); 114 ià( `g_m¬kup_·r£_cÚ‹xt_·r£ ( ùx , d©a , size , NULL è=ð FALSE ) { 115 `g_m¬kup_·r£_cÚ‹xt_ä“ ( ùx ); 116 `g_ä“ ( ùx_d©a . id ); 117  NULL ; 120 `g_m¬kup_·r£_cÚ‹xt_ä“ ( ùx ); 122  ùx_d©a . id ; 123 } } 125 * $deviû_g‘_›“1284_id (cÚ¡ * ad­‹r , cÚ¡ * deviû ) 127 DBusMes§ge * mes§ge , * »¶y ; 128 DBusMes§geI‹r ™” , »¶y_™” ; 129 DBusMes§geI‹r »¶y_™”_’Œy ; 130 cÚ¡ * hü_´št = "00001126-0000-1000-8000-00805f9b34fb"; 131 cÚ¡ * xml ; 132 * id = NULL ; 135 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ("Üg.bluez", deviû , 138 `dbus_mes§ge_™”_š™_­³nd ( mes§ge , & ™” ); 139 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_STRING , & hü_´št ); 141 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( cÚn , 142 mes§ge , -1, NULL ); 144 `dbus_mes§ge_uÄef ( mes§ge ); 146 ià(! »¶y ) 147  NULL ; 149 `dbus_mes§ge_™”_š™ ( »¶y , & »¶y_™” ); 151 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& »¶y_™” è!ð DBUS_TYPE_ARRAY ) { 152 `dbus_mes§ge_uÄef ( »¶y ); 153  NULL ; 156 `dbus_mes§ge_™”_»cur£ (& »¶y_™” , & »¶y_™”_’Œy ); 159  `dbus_mes§ge_™”_g‘_¬g_ty³ (& »¶y_™”_’Œy ) == 160 DBUS_TYPE_DICT_ENTRY ) { 161 gušt32 key ; 162 DBusMes§geI‹r diù_’Œy ; 164 `dbus_mes§ge_™”_»cur£ (& »¶y_™”_’Œy , & diù_’Œy ); 167 `dbus_mes§ge_™”_g‘_basic (& diù_’Œy , & key ); 168 ià(! key ) { 169 `dbus_mes§ge_™”_Ãxt (& »¶y_™”_’Œy ); 174 ià(! `dbus_mes§ge_™”_Ãxt (& diù_’Œy )) { 175 `dbus_mes§ge_™”_Ãxt (& »¶y_™”_’Œy ); 179 `dbus_mes§ge_™”_g‘_basic (& diù_’Œy , & xml ); 181 id = `sdp_xml_·r£_»cÜd ( xml ); 182 ià( id !ð NULL ) 184 `dbus_mes§ge_™”_Ãxt (& »¶y_™”_’Œy ); 187 `dbus_mes§ge_uÄef ( »¶y ); 189  id ; 190 } } 192  $´št_´š‹r_d‘ažs (cÚ¡ * Çme , cÚ¡ * bdaddr , 193 cÚ¡ * id ) 195 * uri , * esÿ³d ; 197 esÿ³d = `g_¡rd–im™ ( `g_¡rdup ( Çme ), "\"", '\''); 198 uri = `g_¡rdup_´štf ("bluetooth://%c%c%c%c%c%c%c%c%c%c%c%c", 199 bdaddr [0], bdaddr[1], 200 bdaddr [3], bdaddr[4], 201 bdaddr [6], bdaddr[7], 202 bdaddr [9], bdaddr[10], 203 bdaddr [12], bdaddr[13], 204 bdaddr [15], bdaddr[16]); 205 `´štf ("dœeù % \"%s\" \"% (Blu‘oÙh)\"", uri , esÿ³d ,ƒscaped); 206 ià( id !ð NULL ) 207 `´štf (" \"%s\"\n", id ); 209 `´štf ("\n"); 210 `g_ä“ ( esÿ³d ); 211 `g_ä“ ( uri ); 212 } } 214  $add_deviû_to_li¡ (cÚ¡ * Çme , cÚ¡ * bdaddr , 215 cÚ¡ * id ) 217  cups_deviû * deviû ; 218 GSLi¡ * l ; 221  l = deviû_li¡ ;† !ð NULL ;† =†-> Ãxt ) { 222 deviû = ( cups_deviû *è l -> d©a ; 224 ià( `¡rcmp ( deviû -> bdaddr , bdaddr) == 0) { 225 ià( deviû -> Çme !=‚ame) { 226 `g_ä“ ( deviû -> Çme ); 227 deviû -> Çme = `g_¡rdup (name); 229 `g_ä“ ( deviû -> id ); 230 deviû -> id = `g_¡rdup (id); 236 deviû = `g_Ãw0 ( cups_deviû , 1); 237 deviû -> bdaddr = `g_¡rdup (bdaddr); 238 deviû -> Çme = `g_¡rdup (name); 239 deviû -> id = `g_¡rdup (id); 241 deviû_li¡ = `g_¦i¡_´•’d (deviû_li¡, deviû ); 242 `´št_´š‹r_d‘ažs ( deviû -> Çme , deviû-> bdaddr , deviû-> id ); 243 } } 245  gboÞ—n $·r£_deviû_´Ý”t›s ( DBusMes§geI‹r * »¶y_™” , 246 ** Çme , ** bdaddr ) 248 gušt32 þass = 0; 249 DBusMes§geI‹r »¶y_™”_’Œy ; 251 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( »¶y_™” è!ð DBUS_TYPE_ARRAY ) 252  FALSE ; 254 `dbus_mes§ge_™”_»cur£ ( »¶y_™” , & »¶y_™”_’Œy ); 256  `dbus_mes§ge_™”_g‘_¬g_ty³ (& »¶y_™”_’Œy ) == 257 DBUS_TYPE_DICT_ENTRY ) { 258 cÚ¡ * key ; 259 DBusMes§geI‹r diù_’Œy , ™”_diù_v® ; 261 `dbus_mes§ge_™”_»cur£ (& »¶y_™”_’Œy , & diù_’Œy ); 264 `dbus_mes§ge_™”_g‘_basic (& diù_’Œy , & key ); 265 ià(! key ) { 266 `dbus_mes§ge_™”_Ãxt (& »¶y_™”_’Œy ); 270 ià( `¡rcmp ( key , "Class") != 0 && 271 `¡rcmp ( key , "Alias") != 0 && 272 `¡rcmp ( key , "Address") != 0) { 273 `dbus_mes§ge_™”_Ãxt (& »¶y_™”_’Œy ); 278 ià(! `dbus_mes§ge_™”_Ãxt (& diù_’Œy )) { 279 `dbus_mes§ge_™”_Ãxt (& »¶y_™”_’Œy ); 282 `dbus_mes§ge_™”_»cur£ (& diù_’Œy , & ™”_diù_v® ); 283 ià( `¡rcmp ( key , "Class") == 0) { 284 `dbus_mes§ge_™”_g‘_basic (& ™”_diù_v® , & þass ); 286 cÚ¡ * v®ue ; 287 `dbus_mes§ge_™”_g‘_basic (& ™”_diù_v® , & v®ue ); 288 ià( `¡rcmp ( key , "Alias") == 0) { 289 * Çme = `g_¡rdup ( v®ue ); 290 } ià( bdaddr ) { 291 * bdaddr = `g_¡rdup ( v®ue ); 294 `dbus_mes§ge_™”_Ãxt (& »¶y_™”_’Œy ); 297 ià( þass == 0) 298  FALSE ; 299 ià((( þass & 0x1f00) >> 8) == 0x06 && (class & 0x80)) 300  TRUE ; 302  FALSE ; 303 } } 305  gboÞ—n $deviû_is_´š‹r (cÚ¡ * ad­‹r , cÚ¡ * deviû_·th , ** Çme , ** bdaddr ) 307 DBusMes§ge * mes§ge , * »¶y ; 308 DBusMes§geI‹r »¶y_™” ; 309 gboÞ—n »tv® ; 311 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ("Üg.bluez", deviû_·th , 315 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( cÚn , 316 mes§ge , -1, NULL ); 318 `dbus_mes§ge_uÄef ( mes§ge ); 320 ià(! »¶y ) 321  FALSE ; 323 `dbus_mes§ge_™”_š™ ( »¶y , & »¶y_™” ); 325 »tv® = `·r£_deviû_´Ý”t›s (& »¶y_™” , Çme , bdaddr ); 327 `dbus_mes§ge_uÄef ( »¶y ); 329  »tv® ; 330 } } 332  $»mÙe_deviû_found (cÚ¡ * ad­‹r , cÚ¡ * bdaddr , 333 cÚ¡ * Çme ) 335 DBusMes§ge * mes§ge , * »¶y ; 336 DBusMes§geI‹r ™” ; 337 * objeù_·th = NULL ; 338 * id ; 340 `as£¹ ( ad­‹r !ð NULL ); 342 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ("Üg.bluez", ad­‹r , 345 `dbus_mes§ge_™”_š™_­³nd ( mes§ge , & ™” ); 346 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_STRING , & bdaddr ); 348 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( cÚn , 349 mes§ge , -1, NULL ); 351 `dbus_mes§ge_uÄef ( mes§ge ); 353 ià(! »¶y ) { 354 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ("Üg.bluez", ad­‹r , 357 `dbus_mes§ge_™”_š™_­³nd ( mes§ge , & ™” ); 358 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_STRING , & bdaddr ); 360 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( cÚn , 361 mes§ge , -1, NULL ); 363 `dbus_mes§ge_uÄef ( mes§ge ); 365 ià(! »¶y ) 369 ià( `dbus_mes§ge_g‘_¬gs ( »¶y , NULL , 370 DBUS_TYPE_OBJECT_PATH , & objeù_·th , 371 DBUS_TYPE_INVALID è=ð FALSE ) { 372 `dbus_mes§ge_uÄef ( »¶y ); 376 id = `deviû_g‘_›“1284_id ( ad­‹r , objeù_·th ); 377 `add_deviû_to_li¡ ( Çme , bdaddr , id ); 378 `g_ä“ ( id ); 380 `dbus_mes§ge_uÄef ( »¶y ); 381 } } 383  $discov”y_com¶‘ed () 385 `g_¦i¡_ä“ ( deviû_li¡ ); 386 deviû_li¡ = NULL ; 388 `g_maš_loÝ_qu™ ( loÝ ); 389 } } 391  $»mÙe_deviû_di§µ—»d (cÚ¡ * bdaddr ) 393 GSLi¡ * l ; 395  l = deviû_li¡ ;† !ð NULL ;† =†-> Ãxt ) { 396  cups_deviû * deviû = l -> d©a ; 398 ià( `¡rcmp ( deviû -> bdaddr , bdaddr) == 0) { 399 `g_ä“ ( deviû -> Çme ); 400 `g_ä“ ( deviû -> bdaddr ); 401 `g_ä“ ( deviû ); 402 deviû_li¡ = `g_¦i¡_d–‘e_lšk (deviû_li¡, l ); 406 } } 408  gboÞ—n $li¡_known_´š‹rs (cÚ¡ * ad­‹r ) 410 DBusMes§geI‹r »¶y_™” , ™”_¬¿y ; 411 DBusE¼Ü ”rÜ ; 412 DBusMes§ge * mes§ge , * »¶y ; 414 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ("Üg.bluez", ad­‹r , 417 ià( mes§ge =ð NULL ) 418  FALSE ; 420 `dbus_”rÜ_š™ (& ”rÜ ); 421 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( cÚn , mes§ge , 422 -1, & ”rÜ ); 424 `dbus_mes§ge_uÄef ( mes§ge ); 426 ià( `dbus_”rÜ_is_£t (& ”rÜ )) { 427 `dbus_”rÜ_ä“ (& ”rÜ ); 428  FALSE ; 431 `dbus_mes§ge_™”_š™ ( »¶y , & »¶y_™” ); 432 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& »¶y_™” è!ð DBUS_TYPE_ARRAY ) { 433 `dbus_mes§ge_uÄef ( »¶y ); 434  FALSE ; 437 `dbus_mes§ge_™”_»cur£ (& »¶y_™” , & ™”_¬¿y ); 438  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™”_¬¿y ) == 439 DBUS_TYPE_OBJECT_PATH ) { 440 cÚ¡ * objeù_·th ; 441 * Çme = NULL ; 442 * bdaddr = NULL ; 444 `dbus_mes§ge_™”_g‘_basic (& ™”_¬¿y , & objeù_·th ); 445 ià( `deviû_is_´š‹r ( ad­‹r , objeù_·th , & Çme , & bdaddr )) { 446 * id ; 448 id = `deviû_g‘_›“1284_id ( ad­‹r , objeù_·th ); 449 `add_deviû_to_li¡ ( Çme , bdaddr , id ); 450 `g_ä“ ( id ); 452 `g_ä“ ( Çme ); 453 `g_ä“ ( bdaddr ); 454 `dbus_mes§ge_™”_Ãxt (& ™”_¬¿y ); 457 `dbus_mes§ge_uÄef ( »¶y ); 459  FALSE ; 460 } } 462  DBusHªdËrResuÉ $fž‹r_func ( DBusCÚÃùiÚ * cÚÃùiÚ , 463 DBusMes§ge * mes§ge , * u£r_d©a ) 465 ià( `dbus_mes§ge_is_sigÇl ( mes§ge , "org.bluez.Adapter1", 467 cÚ¡ * ad­‹r , * bdaddr ; 468 * Çme ; 469 DBusMes§geI‹r ™” ; 471 `dbus_mes§ge_™”_š™ ( mes§ge , & ™” ); 472 `dbus_mes§ge_™”_g‘_basic (& ™” , & bdaddr ); 473 `dbus_mes§ge_™”_Ãxt (& ™” ); 475 ad­‹r = `dbus_mes§ge_g‘_·th ( mes§ge ); 476 ià( `·r£_deviû_´Ý”t›s (& ™” , & Çme , NULL )) 477 `»mÙe_deviû_found ( ad­‹r , bdaddr , Çme ); 478 `g_ä“ ( Çme ); 479 } ià( `dbus_mes§ge_is_sigÇl ( mes§ge , "org.bluez.Adapter1", 481 cÚ¡ * bdaddr ; 483 `dbus_mes§ge_g‘_¬gs ( mes§ge , NULL , 484 DBUS_TYPE_STRING , & bdaddr , 485 DBUS_TYPE_INVALID ); 486 `»mÙe_deviû_di§µ—»d ( bdaddr ); 487 } ià( `dbus_mes§ge_is_sigÇl ( mes§ge , "org.bluez.Adapter1", 489 DBusMes§geI‹r ™” , v®ue_™” ; 490 cÚ¡ * Çme ; 491 gboÞ—n discov”šg ; 493 `dbus_mes§ge_™”_š™ ( mes§ge , & ™” ); 494 `dbus_mes§ge_™”_g‘_basic (& ™” , & Çme ); 495 ià( Çme =ð NULL || `¡rcmp (name, "Discovering") != 0) 496  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 497 `dbus_mes§ge_™”_Ãxt (& ™” ); 498 `dbus_mes§ge_™”_»cur£ (& ™” , & v®ue_™” ); 499 `dbus_mes§ge_™”_g‘_basic (& v®ue_™” , & discov”šg ); 501 ià( discov”šg =ð FALSE && došg_disco ) { 502 došg_disco = FALSE ; 503 `discov”y_com¶‘ed (); 507  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 508 } } 510  gboÞ—n $li¡_´š‹rs () 519 DBusE¼Ü ”rÜ ; 520 dbus_boÞ_t hcid_exi¡s ; 521 DBusMes§ge * »¶y , * mes§ge ; 522 DBusMes§geI‹r »¶y_™” ; 523 * ad­‹r , * m©ch ; 525 cÚn = `g_dbus_£tup_bus ( DBUS_BUS_SYSTEM , NULL , NULL); 526 ià( cÚn =ð NULL ) 527  TRUE ; 529 `dbus_”rÜ_š™ (& ”rÜ ); 530 hcid_exi¡s = `dbus_bus_Çme_has_owÃr ( cÚn , "Üg.bluez", & ”rÜ ); 531 ià( `dbus_”rÜ_is_£t (& ”rÜ )) { 532 `dbus_”rÜ_ä“ (& ”rÜ ); 533  TRUE ; 536 ià(! hcid_exi¡s ) 537  TRUE ; 540 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ("org.bluez", "/", 543 ià( mes§ge =ð NULL ) { 544 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 545  FALSE ; 548 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( cÚn , 549 mes§ge , -1, & ”rÜ ); 551 `dbus_mes§ge_uÄef ( mes§ge ); 553 ià( `dbus_”rÜ_is_£t (& ”rÜ )) { 554 `dbus_”rÜ_ä“ (& ”rÜ ); 555 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 557  TRUE ; 560 `dbus_mes§ge_™”_š™ ( »¶y , & »¶y_™” ); 561 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& »¶y_™” ) != 562 DBUS_TYPE_OBJECT_PATH ) { 563 `dbus_mes§ge_uÄef ( »¶y ); 564 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 565  FALSE ; 568 `dbus_mes§ge_™”_g‘_basic (& »¶y_™” , & ad­‹r ); 569 ad­‹r = `g_¡rdup (adapter); 570 `dbus_mes§ge_uÄef ( »¶y ); 572 ià(! `dbus_cÚÃùiÚ_add_fž‹r ( cÚn , fž‹r_func , ad­‹r , g_ä“ )) { 573 `g_ä“ ( ad­‹r ); 574 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 575  FALSE ; 578  #MATCH_FORMAT \ 582 "·th='%s'" ) 584 m©ch = `g_¡rdup_´štf ( MATCH_FORMAT , ad­‹r ); 585 `dbus_bus_add_m©ch ( cÚn , m©ch , & ”rÜ ); 586 `g_ä“ ( m©ch ); 589 `li¡_known_´š‹rs ( ad­‹r ); 591 došg_disco = TRUE ; 592 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ("Üg.bluez", ad­‹r , 596 ià(! `dbus_cÚÃùiÚ_£nd_w™h_»¶y ( cÚn , mes§ge , NULL , -1)) { 597 `dbus_mes§ge_uÄef ( mes§ge ); 598 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 599 `g_ä“ ( ad­‹r ); 600  FALSE ; 602 `dbus_mes§ge_uÄef ( mes§ge ); 604 loÝ = `g_maš_loÝ_Ãw ( NULL , TRUE ); 605 `g_maš_loÝ_run ( loÝ ); 607 `g_ä“ ( ad­‹r ); 608 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 610  TRUE ; 611 } } 613  gboÞ—n $´št_›“1284 (cÚ¡ * bdaddr ) 615 DBusMes§ge * mes§ge , * »¶y , * ad­‹r_»¶y ; 616 DBusMes§geI‹r ™” ; 617 * objeù_·th = NULL ; 618 * ad­‹r ; 619 * id ; 621 ad­‹r_»¶y = NULL ; 623 cÚn = `g_dbus_£tup_bus ( DBUS_BUS_SYSTEM , NULL , NULL); 624 ià( cÚn =ð NULL ) 625  FALSE ; 627 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ("org.bluez", "/", 631 ad­‹r_»¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( cÚn , 632 mes§ge , -1, NULL ); 634 `dbus_mes§ge_uÄef ( mes§ge ); 636 ià(! ad­‹r_»¶y ) 637  FALSE ; 639 ià( `dbus_mes§ge_g‘_¬gs ( ad­‹r_»¶y , NULL , 640 DBUS_TYPE_OBJECT_PATH , & ad­‹r , 641 DBUS_TYPE_INVALID è=ð FALSE ) { 642 `dbus_mes§ge_uÄef ( ad­‹r_»¶y ); 643  FALSE ; 646 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ("Üg.bluez", ad­‹r , 649 `dbus_mes§ge_™”_š™_­³nd ( mes§ge , & ™” ); 650 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_STRING , & bdaddr ); 652 ià( ad­‹r_»¶y !ð NULL ) 653 `dbus_mes§ge_uÄef ( ad­‹r_»¶y ); 655 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( cÚn , 656 mes§ge , -1, NULL ); 658 `dbus_mes§ge_uÄef ( mes§ge ); 660 ià(! »¶y ) { 661 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ("Üg.bluez", ad­‹r , 664 `dbus_mes§ge_™”_š™_­³nd ( mes§ge , & ™” ); 665 `dbus_mes§ge_™”_­³nd_basic (& ™” , 666 DBUS_TYPE_STRING , & bdaddr ); 668 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( cÚn , 669 mes§ge , -1, NULL ); 671 `dbus_mes§ge_uÄef ( mes§ge ); 673 ià(! »¶y ) 674  FALSE ; 677 ià( `dbus_mes§ge_g‘_¬gs ( »¶y , NULL , 678 DBUS_TYPE_OBJECT_PATH , & objeù_·th , 679 DBUS_TYPE_INVALID è=ð FALSE ) { 680 `dbus_mes§ge_uÄef ( »¶y ); 681  FALSE ; 684 id = `deviû_g‘_›“1284_id ( ad­‹r , objeù_·th ); 685 ià( id =ð NULL ) { 686 `dbus_mes§ge_uÄef ( »¶y ); 687  FALSE ; 689 `´štf ("%s", id ); 690 `g_ä“ ( id ); 692 `dbus_mes§ge_uÄef ( »¶y ); 694  TRUE ; 695 } } 702  $maš ( ¬gc , * ¬gv []) 704 sdp_£ssiÚ_t * sdp ; 705 bdaddr_t bdaddr ; 706  ù¾_psm , d©a_psm ; 707 ušt8_t chªÃl , b [6]; 708 * ±r , ¡r [3], deviû [18], £rviû [12]; 709 cÚ¡ * uri , * cups_þass ; 710  i , ”r , fd , cÝ›s , ´Ùo ; 713 `£tbuf ( ¡d”r , NULL ); 716 `£tbuf ( ¡dout , NULL ); 719 #ifdeà HAVE_SIGSET 720 `sig£t ( SIGPIPE , SIG_IGN ); 721 #–ià `defšed ( HAVE_SIGACTION ) 722 `mem£t (& aùiÚ , 0, (action)); 723 aùiÚ . §_hªdËr = SIG_IGN ; 724 `sigaùiÚ ( SIGPIPE , & aùiÚ , NULL ); 726 `sigÇl ( SIGPIPE , SIG_IGN ); 729 ià( ¬gc == 1) { 730 ià( `li¡_´š‹rs (è=ð TRUE ) 731  CUPS_BACKEND_OK ; 733  CUPS_BACKEND_FAILED ; 734 } ià( ¬gc =ð3 && `¡rcmp ( ¬gv [1], "--get-deviceid") == 0) { 735 ià( `bachk ( ¬gv [2]) < 0) { 736 `årštf ( ¡d”r , "Invalid Bluetooth‡ddress '%s'\n", 737 ¬gv [2]); 738  CUPS_BACKEND_FAILED ; 740 ià( `´št_›“1284 ( ¬gv [2]è=ð FALSE ) 741  CUPS_BACKEND_FAILED ; 742  CUPS_BACKEND_OK ; 745 ià( ¬gc < 6 ||‡rgc > 7) { 746 `årštf ( ¡d”r , "Usage: bluetooth job-id useritle copies" 748 `årštf ( ¡d”r , " bluetooth --get-deviceid [bdaddr]\n"); 749  CUPS_BACKEND_FAILED ; 752 ià( ¬gc == 6) { 753 fd = 0; 754 cÝ›s = 1; 756 ià(( fd = `Ý’ ( ¬gv [6], O_RDONLY )) < 0) { 757 `³¼Ü ("ERROR: Unableo open…rint file"); 758  CUPS_BACKEND_FAILED ; 760 cÝ›s = `©oi ( ¬gv [4]); 763 uri = `g‘’v ("DEVICE_URI"); 764 ià(! uri ) 765 uri = ¬gv [0]; 767 ià( `¡ºÿ£cmp ( uri , "bluetooth://", 12)) { 768 `årštf ( ¡d”r , "ERROR: No device URI found\n"); 769  CUPS_BACKEND_FAILED ; 772 ±r = ¬gv [0] + 12; 773  i = 0; i < 6; i++) { 774 `¡ºýy ( ¡r , ±r , 2); 775 b [ i ] = ( ušt8_t è `¡¹Þ ( ¡r , NULL , 16); 776 ±r += 2; 778 `¥rštf ( deviû , "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", 779 b [0], b[1], b[2], b[3], b[4], b[5]); 781 `¡r2ba ( deviû , & bdaddr ); 783 ±r = `¡rchr (ptr, '/'); 784 ià( ±r ) { 785 `¡ºýy ( £rviû , ±r + 1, 12); 787 ià(! `¡ºÿ£cmp ( ±r + 1, "spp", 3)) 788 ´Ùo = 1; 789 ià(! `¡ºÿ£cmp ( ±r + 1, "hcrp", 4)) 790 ´Ùo = 2; 792 ´Ùo = 0; 794 `¡rýy ( £rviû , "auto"); 795 ´Ùo = 0; 798 cups_þass = `g‘’v ("CLASS"); 800 `årštf ( ¡d”r , 802 ¬gv [0], deviû , £rviû , fd , cÝ›s , 803 cups_þass ? cups_class : "(none)"); 805 `åuts ("STATE: +cÚÃùšg-to-deviû\n", ¡d”r ); 807 £rviû_£¬ch : 808 sdp = `sdp_cÚÃù ( BDADDR_ANY , & bdaddr , SDP_RETRY_IF_BUSY ); 809 ià(! sdp ) { 810 `årštf ( ¡d”r , "ERROR: Can't open Bluetooth connection\n"); 811  CUPS_BACKEND_FAILED ; 814  ´Ùo ) { 816 ”r = `sdp_£¬ch_¥p ( sdp , & chªÃl ); 819 ”r = `sdp_£¬ch_hüp ( sdp , & ù¾_psm , & d©a_psm ); 822 ´Ùo = 2; 823 ”r = `sdp_£¬ch_hüp ( sdp , & ù¾_psm , & d©a_psm ); 824 ià( ”r ) { 825 ´Ùo = 1; 826 ”r = `sdp_£¬ch_¥p ( sdp , & chªÃl ); 831 `sdp_þo£ ( sdp ); 833 ià( ”r ) { 834 ià( cups_þass ) { 835 `åuts ("INFO: Unableo contact…rinter, queuing on " 836 "Ãxˆ´š‹¸š cÏss...\n", ¡d”r ); 837 `¦“p (5); 838  CUPS_BACKEND_FAILED ; 840 `¦“p (20); 841 `årštf ( ¡d”r , "ERROR: Can't get service information\n"); 842  £rviû_£¬ch ; 845 cÚÃù : 846  ´Ùo ) { 848 ”r = `¥p_´št ( BDADDR_ANY , & bdaddr , chªÃl , 849 fd , cÝ›s , cups_þass ); 852 ”r = `hüp_´št ( BDADDR_ANY , & bdaddr , ù¾_psm , d©a_psm , 853 fd , cÝ›s , cups_þass ); 856 ”r = CUPS_BACKEND_FAILED ; 857 `årštf ( ¡d”r , "ERROR: Unsupported…rotocol\n"); 861 ià( ”r =ð CUPS_BACKEND_FAILED && cups_þass ) { 862 `åuts ("INFO: Unableo contact…rinter, queuing on " 863 "Ãxˆ´š‹¸š cÏss...\n", ¡d”r ); 864 `¦“p (5); 865  CUPS_BACKEND_FAILED ; 866 } ià( ”r =ð CUPS_BACKEND_RETRY ) { 867 `¦“p (20); 868  cÚÃù ; 871 ià( fd != 0) 872 `þo£ ( fd ); 874 ià(! ”r ) 875 `årštf ( ¡d”r , "INFO: Readyo…rint\n"); 877  ”r ; 878 } } @profiles/cups/sdp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~ 32  ~ 34  ~ 35  ~ 36  ~ 38  ~"cups.h " 40  $sdp_£¬ch_hüp ( sdp_£ssiÚ_t * sdp , * ù¾_psm , * d©a_psm ) 42 sdp_li¡_t * ¤ch , * ©Œs , * r¥ ; 43 uuid_t svþass ; 44 ušt16_t ©Œ1 , ©Œ2 ; 45  ”r ; 47 ià(! sdp ) 50 `sdp_uuid16_ü—‹ (& svþass , HCR_PRINT_SVCLASS_ID ); 51 ¤ch = `sdp_li¡_­³nd ( NULL , & svþass ); 53 ©Œ1 = SDP_ATTR_PROTO_DESC_LIST ; 54 ©Œs = `sdp_li¡_­³nd ( NULL , & ©Œ1 ); 55 ©Œ2 = SDP_ATTR_ADD_PROTO_DESC_LIST ; 56 ©Œs = `sdp_li¡_­³nd ׉rs, & ©Œ2 ); 58 ”r = `sdp_£rviû_£¬ch_©Œ_»q ( sdp , ¤ch , SDP_ATTR_REQ_INDIVIDUAL , ©Œs , & r¥ ); 59 ià( ”r ) 62 ; r¥ ;„¥ =„¥-> Ãxt ) { 63 sdp_»cÜd_t * »c = (sdp_»cÜd_ˆ*è r¥ -> d©a ; 64 sdp_li¡_t * ´Ùos ; 66 ià(! `sdp_g‘_acûss_´Ùos ( »c , & ´Ùos )) { 67  psm = `sdp_g‘_´Ùo_pÜt ( ´Ùos , L2CAP_UUID ); 68 ià( psm > 0) { 69 * ù¾_psm = psm ; 73 ià(! `sdp_g‘_add_acûss_´Ùos ( »c , & ´Ùos )) { 74  psm = `sdp_g‘_´Ùo_pÜt ( ´Ùos , L2CAP_UUID ); 75 ià( psm > 0 && * ù¾_psm > 0) { 76 * d©a_psm = psm ; 83 } } 85  $sdp_£¬ch_¥p ( sdp_£ssiÚ_t * sdp , ušt8_t * chªÃl ) 87 sdp_li¡_t * ¤ch , * ©Œs , * r¥ ; 88 uuid_t svþass ; 89 ušt16_t ©Œ ; 90  ”r ; 92 ià(! sdp ) 95 `sdp_uuid16_ü—‹ (& svþass , SERIAL_PORT_SVCLASS_ID ); 96 ¤ch = `sdp_li¡_­³nd ( NULL , & svþass ); 98 ©Œ = SDP_ATTR_PROTO_DESC_LIST ; 99 ©Œs = `sdp_li¡_­³nd ( NULL , & ©Œ ); 101 ”r = `sdp_£rviû_£¬ch_©Œ_»q ( sdp , ¤ch , SDP_ATTR_REQ_INDIVIDUAL , ©Œs , & r¥ ); 102 ià( ”r ) 105 ; r¥ ;„¥ =„¥-> Ãxt ) { 106 sdp_»cÜd_t * »c = (sdp_»cÜd_ˆ*è r¥ -> d©a ; 107 sdp_li¡_t * ´Ùos ; 109 ià(! `sdp_g‘_acûss_´Ùos ( »c , & ´Ùos )) { 110 ušt8_t ch = `sdp_g‘_´Ùo_pÜt ( ´Ùos , RFCOMM_UUID ); 111 ià( ch > 0) { 112 * chªÃl = ch ; 119 } } @profiles/cups/spp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~ 32  ~ 34  ~ 35  ~ 36  ~ 37  ~ 39  ~"cups.h " 41  $¥p_´št ( bdaddr_t * ¤c , bdaddr_ˆ* d¡ , ušt8_t chªÃl ,  fd ,  cÝ›s , cÚ¡ * cups_þass ) 43  sockaddr_rc addr ; 44  buf [2048]; 45  i , sk , ”r , Ën ; 47 ià(( sk = `sock‘ ( PF_BLUETOOTH , SOCK_STREAM , BTPROTO_RFCOMM )) < 0) { 48 `³¼Ü ("ERROR: Can't create socket"); 49 ià( cups_þass ) 50  CUPS_BACKEND_FAILED ; 52  CUPS_BACKEND_RETRY ; 55 addr . rc_çmžy = AF_BLUETOOTH ; 56 `baýy (& addr . rc_bdaddr , ¤c ); 57 addr . rc_chªÃl = 0; 59 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 60 `³¼Ü ("ERROR: Can't bind socket"); 61 `þo£ ( sk ); 62 ià( cups_þass ) 63  CUPS_BACKEND_FAILED ; 65  CUPS_BACKEND_RETRY ; 68 addr . rc_çmžy = AF_BLUETOOTH ; 69 `baýy (& addr . rc_bdaddr , d¡ ); 70 addr . rc_chªÃl = chªÃl ; 72 ià( `cÚÃù ( sk , ( sockaddr *è& addr , (addr)) < 0) { 73 `³¼Ü ("ERROR: Can't connecto device"); 74 `þo£ ( sk ); 75 ià( cups_þass ) 76  CUPS_BACKEND_FAILED ; 78  CUPS_BACKEND_RETRY ; 81 `åuts ("STATE: -cÚÃùšg-to-deviû\n", ¡d”r ); 84 ià( fd == 0) { 85 #ifdeà HAVE_SIGSET 86 `sig£t ( SIGTERM , SIG_IGN ); 87 #–ià `defšed ( HAVE_SIGACTION ) 88 `mem£t (& aùiÚ , 0, (action)); 89 `sigem±y£t (& aùiÚ . §_mask ); 90 aùiÚ . §_hªdËr = SIG_IGN ; 91 `sigaùiÚ ( SIGTERM , & aùiÚ , NULL ); 93 `sigÇl ( SIGTERM , SIG_IGN ); 97  i = 0; i < cÝ›s ; i++) { 99 ià( fd != 0) { 100 `årštf ( ¡d”r , "PAGE: 1 1\n"); 101 `l£ek ( fd , 0, SEEK_SET ); 104 ( Ën = `»ad ( fd , buf , (buf))) > 0) { 105 ”r = `wr™e ( sk , buf , Ën ); 106 ià( ”r < 0) { 107 `³¼Ü ("ERROR: Error writingo device"); 108 `þo£ ( sk ); 109  CUPS_BACKEND_FAILED ; 115 `þo£ ( sk ); 117  CUPS_BACKEND_OK ; 118 } } @profiles/cyclingspeed/cyclingspeed.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<”ºo.h > 28  ~<¡dboÞ.h > 29  ~ 30  ~ 32  ~"lib/uuid.h " 33  ~"¤c/¶ugš.h " 34  ~"¤c/ad­‹r.h " 35  ~"¤c/deviû.h " 36  ~"¤c/´ofže.h " 37  ~"¤c/£rviû.h " 38  ~"¤c/dbus-commÚ.h " 39  ~"¤c/sh¬ed/utž.h " 40  ~"¤c/”rÜ.h " 41  ~"©Œib/g©Œib.h " 42  ~"©Œib/©t.h " 43  ~"©Œib/g©t.h " 44  ~"¤c/©tio.h " 45  ~"¤c/log.h " 48  #ATT_HDR_LEN 3 ) 50  #ATT_TIMEOUT 30 ) 52  #CYCLINGSPEED_INTERFACE "Üg.bluez.CyþšgS³ed1" ) 53  #CYCLINGSPEED_MANAGER_INTERFACE "Üg.bluez.CyþšgS³edMªag”1" ) 54  #CYCLINGSPEED_WATCHER_INTERFACE "Üg.bluez.CyþšgS³edW©ch”1" ) 56  #WHEEL_REV_SUPPORT 0x01 ) 57  #CRANK_REV_SUPPORT 0x02 ) 58  #MULTI_SENSOR_LOC_SUPPORT 0x04 ) 60  #WHEEL_REV_PRESENT 0x01 ) 61  #CRANK_REV_PRESENT 0x02 ) 63  #SET_CUMULATIVE_VALUE 0x01 ) 64  #START_SENSOR_CALIBRATION 0x02 ) 65  #UPDATE_SENSOR_LOC 0x03 ) 66  #REQUEST_SUPPORTED_SENSOR_LOC 0x04 ) 67  #RESPONSE_CODE 0x10 ) 69  #RSP_SUCCESS 0x01 ) 70  #RSP_NOT_SUPPORTED 0x02 ) 71  #RSP_INVALID_PARAM 0x03 ) 72  #RSP_FAILED 0x04 ) 74  gcsc ; 76  scÚŒÞpošt_»q { 77  csc * mcsc ; 78 ušt8_t mÝcode ; 79 gušt mtimeout ; 80 GDBusP’dšgR•ly m»¶y_id ; 81 DBusMes§ge * mmsg ; 83 ušt8_t m³ndšg_loÿtiÚ ; 86  scsc_ad­‹r { 87  btd_ad­‹r * mad­‹r ; 88 GSLi¡ * mdeviûs ; 89 GSLi¡ * mw©ch”s ; 92  scsc { 93  btd_deviû * mdev ; 94  csc_ad­‹r * mÿd­‹r ; 96 GA‰rib * m©Œib ; 97 gušt m©tioid ; 99 gušt m©tio_m—su»m’t_id ; 101 gušt m©tio_cÚŒÞpošt_id ; 103  ©t_¿nge * msvc_¿nge ; 105 ušt16_t mm—su»m’t_ccc_hªdË ; 106 ušt16_t mcÚŒÞpošt_v®_hªdË ; 108 ušt16_t mã©u» ; 109 gboÞ—n mhas_loÿtiÚ ; 110 ušt8_t mloÿtiÚ ; 111 ušt8_t mnum_loÿtiÚs ; 112 ušt8_t * mloÿtiÚs ; 114  cÚŒÞpošt_»q * m³ndšg_»q ; 117  sw©ch” { 118  csc_ad­‹r * mÿd­‹r ; 119 gušt mid ; 120 * m¤v ; 121 * m·th ; 124  sm—su»m’t { 125  csc * mcsc ; 127 boÞ mhas_wh“l_»v ; 128 ušt32_t mwh“l_»v ; 129 ušt16_t mÏ¡_wh“l_time ; 131 boÞ mhas_üªk_»v ; 132 ušt16_t müªk_»v ; 133 ušt16_t mÏ¡_üªk_time ; 136  sch¬aù”i¡ic { 137  csc * mcsc ; 138  muuid [ MAX_LEN_UUID_STR + 1]; 141  GSLi¡ * gcsc_ad­‹rs = NULL ; 143 cÚ¡ * cÚ¡ gloÿtiÚ_’um [] = { 149 cÚ¡ * $loÿtiÚ2¡r ( ušt8_t v®ue ) 151 ià( v®ue < `G_N_ELEMENTS ( loÿtiÚ_’um )) 152  loÿtiÚ_’um [ v®ue ]; 154 `šfo ("Body S’sÜ LoÿtiÚ [%d] i RFU", v®ue ); 156  loÿtiÚ_’um [0]; 157 } } 159  $¡r2loÿtiÚ (cÚ¡ * loÿtiÚ ) 161 size_t i ; 163  i = 0; i < `G_N_ELEMENTS ( loÿtiÚ_’um ); i++) 164 ià(! `¡rcmp ( loÿtiÚ_’um [ i ], loÿtiÚ )) 165  i ; 168 } } 170  $cmp_ad­‹r ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 172 cÚ¡  csc_ad­‹r * ÿd­‹r = a ; 173 cÚ¡  btd_ad­‹r * ad­‹r = b ; 175 ià( ad­‹r =ð ÿd­‹r ->adapter) 179 } } 181  $cmp_deviû ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 183 cÚ¡  csc *csøð a ; 184 cÚ¡  btd_deviû * dev = b ; 186 ià( dev =ð csc ->dev) 190 } } 192  $cmp_w©ch” ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 194 cÚ¡  w©ch” *w©ch” = a ; 195 cÚ¡  w©ch” * m©ch = b ; 196  »t ; 198 »t = `g_¡rcmp0 ( w©ch” -> ¤v , m©ch ->srv); 199 ià( »t != 0) 200  »t ; 202  `g_¡rcmp0 ( w©ch” -> ·th , m©ch ->path); 203 } } 205  csc_ad­‹r * $fšd_csc_ad­‹r ( btd_ad­‹r * ad­‹r ) 207 GSLi¡ * l = `g_¦i¡_fšd_cu¡om ( csc_ad­‹rs , ad­‹r , cmp_ad­‹r ); 209 ià(! l ) 210  NULL ; 212  l -> d©a ; 213 } } 215  $de¡roy_w©ch” ( gpoš‹r u£r_d©a ) 217  w©ch” *w©ch” = u£r_d©a ; 219 `g_ä“ ( w©ch” -> ·th ); 220 `g_ä“ ( w©ch” -> ¤v ); 221 `g_ä“ ( w©ch” ); 222 } } 224  w©ch” * $fšd_w©ch” ( GSLi¡ * li¡ , cÚ¡ * £nd” , 225 cÚ¡ * ·th ) 227  w©ch” * m©ch ; 228 GSLi¡ * l ; 230 m©ch = `g_Ãw0 ( w©ch” , 1); 231 m©ch -> ¤v = `g_¡rdup ( £nd” ); 232 m©ch -> ·th = `g_¡rdup (path); 234 l = `g_¦i¡_fšd_cu¡om ( li¡ , m©ch , cmp_w©ch” ); 235 `de¡roy_w©ch” ( m©ch ); 237 ià( l !ð NULL ) 238  l -> d©a ; 240  NULL ; 241 } } 243  $»move_w©ch” ( gpoš‹r u£r_d©a ) 245  w©ch” *w©ch” = u£r_d©a ; 247 `g_dbus_»move_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), w©ch” -> id ); 248 } } 250  $de¡roy_csc_ad­‹r ( gpoš‹r u£r_d©a ) 252  csc_ad­‹r * ÿd­‹r = u£r_d©a ; 254 `g_¦i¡_ä“_fuÎ ( ÿd­‹r -> w©ch”s , »move_w©ch” ); 256 `g_ä“ ( ÿd­‹r ); 257 } } 259  $de¡roy_csc ( gpoš‹r u£r_d©a ) 261  csc *csøð u£r_d©a ; 263 ià( csc -> ©tioid > 0) 264 `btd_deviû_»move_©tio_ÿÎback ( csc -> dev , csc-> ©tioid ); 266 ià( csc -> ©Œib !ð NULL ) { 267 `g_©Œib_uÄegi¡” ( csc -> ©Œib , csc-> ©tio_m—su»m’t_id ); 268 `g_©Œib_uÄegi¡” ( csc -> ©Œib , csc-> ©tio_cÚŒÞpošt_id ); 269 `g_©Œib_uÄef ( csc -> ©Œib ); 272 `btd_deviû_uÄef ( csc -> dev ); 273 `g_ä“ ( csc -> svc_¿nge ); 274 `g_ä“ ( csc -> loÿtiÚs ); 275 `g_ä“ ( csc ); 276 } } 278  $ch¬_wr™e_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 279 gpoš‹r u£r_d©a ) 281 * msg = u£r_d©a ; 283 ià( ¡©us != 0) 284 `”rÜ ("% çžed", msg ); 286 `g_ä“ ( msg ); 287 } } 289  gboÞ—n $cÚŒÞpošt_timeout ( gpoš‹r u£r_d©a ) 291  cÚŒÞpošt_»q * »q = u£r_d©a ; 293 ià( »q -> Ýcode =ð UPDATE_SENSOR_LOC ) { 294 `g_dbus_³ndšg_´Ý”ty_”rÜ ( »q -> »¶y_id , 295 ERROR_INTERFACE ".Failed", 297 } ià( »q -> Ýcode =ð SET_CUMULATIVE_VALUE ) { 298 DBusMes§ge * »¶y ; 300 »¶y = `btd_”rÜ_çžed ( »q -> msg , 303 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y ); 305 `dbus_mes§ge_uÄef ( »q -> msg ); 308 »q -> csc -> ³ndšg_»q = NULL ; 309 `g_ä“ ( »q ); 311  FALSE ; 312 } } 314  $cÚŒÞpošt_wr™e_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 315 gpoš‹r u£r_d©a ) 317  cÚŒÞpošt_»q * »q = u£r_d©a ; 319 ià( ¡©us == 0) { 320 »q -> timeout = `g_timeout_add_£cÚds ( ATT_TIMEOUT , 321 cÚŒÞpošt_timeout , 322 »q ); 326 `”rÜ ("SC CÚŒÞ Pošˆwr™çžed (Ýcode=%d)", »q -> Ýcode ); 328 ià( »q -> Ýcode =ð UPDATE_SENSOR_LOC ) { 329 `g_dbus_³ndšg_´Ý”ty_”rÜ ( »q -> »¶y_id , 330 ERROR_INTERFACE ".Failed", 331 "O³¿tiÚ fažed (%d)", ¡©us ); 332 } ià( »q -> Ýcode =ð SET_CUMULATIVE_VALUE ) { 333 DBusMes§ge * »¶y ; 335 »¶y = `btd_”rÜ_çžed ( »q -> msg , "Operation failed"); 337 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y ); 339 `dbus_mes§ge_uÄef ( »q -> msg ); 342 »q -> csc -> ³ndšg_»q = NULL ; 343 `g_ä“ ( »q ); 344 } } 346  $»ad_suµÜ‹d_loÿtiÚs ( csc *csc) 348  cÚŒÞpošt_»q * »q ; 350 »q = `g_Ãw0 ( cÚŒÞpošt_»q , 1); 351 »q -> csc = csc; 352 »q -> Ýcode = REQUEST_SUPPORTED_SENSOR_LOC ; 354 csc -> ³ndšg_»q = »q ; 356 `g©t_wr™e_ch¬ ( csc -> ©Œib , csc-> cÚŒÞpošt_v®_hªdË , 357 & »q -> Ýcode , (req->opcode), 358 cÚŒÞpošt_wr™e_cb , »q ); 359 } } 361  $»ad_ã©u»_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 362 gpoš‹r u£r_d©a ) 364  csc *csøð u£r_d©a ; 365 ušt8_t v®ue [2]; 366 ssize_t vËn ; 368 ià( ¡©us ) { 369 `”rÜ ("CSC F—tu»„—d fažed: %s", `©t_ecode2¡r ( ¡©us )); 373 vËn = `dec_»ad_»¥ ( pdu , Ën , v®ue , (value)); 374 ià( vËn < 0) { 375 `”rÜ ("Protocolƒrror"); 379 ià( vËn !ð( v®ue )) { 380 `”rÜ ("Invalid value†ength for CSC Feature"); 384 csc -> ã©u» = `g‘_Ë16 ( v®ue ); 386 ià(( csc -> ã©u» & MULTI_SENSOR_LOC_SUPPORT ) 387 && ( csc -> loÿtiÚs =ð NULL )) 388 `»ad_suµÜ‹d_loÿtiÚs ( csc ); 389 } } 391  $»ad_loÿtiÚ_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 392 gušt16 Ën , gpoš‹r u£r_d©a ) 394  csc *csøð u£r_d©a ; 395 ušt8_t v®ue ; 396 ssize_t vËn ; 398 ià( ¡©us ) { 399 `”rÜ ("S’sÜ LoÿtiÚ„—d fažed: %s", `©t_ecode2¡r ( ¡©us )); 403 vËn = `dec_»ad_»¥ ( pdu , Ën , & v®ue , (value)); 404 ià( vËn < 0) { 405 `”rÜ ("Protocolƒrror"); 409 ià( vËn !ð( v®ue )) { 410 `”rÜ ("Invalid value†ength for Sensor Location"); 414 csc -> has_loÿtiÚ = TRUE ; 415 csc -> loÿtiÚ = v®ue ; 417 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 418 `deviû_g‘_·th ( csc -> dev ), 419 CYCLINGSPEED_INTERFACE , "Location"); 420 } } 422  $discov”_desc_cb ( gušt8 ¡©us , GSLi¡ * descs , gpoš‹r u£r_d©a ) 424  ch¬aù”i¡ic * ch = u£r_d©a ; 425  g©t_desc * desc ; 426 ušt8_t ©Œ_v® [2]; 427 * msg = NULL ; 429 ià( ¡©us != 0) { 430 `”rÜ ("Discov” % desütÜ çžed: %s", ch -> uuid , 431 `©t_ecode2¡r ( ¡©us )); 432  dÚe ; 436 desc = descs -> d©a ; 438 ià( `g_¡rcmp0 ( ch -> uuid , CSC_MEASUREMENT_UUID ) == 0) { 439 ch -> csc -> m—su»m’t_ccc_hªdË = desc -> hªdË ; 441 ià( `g_¦i¡_Ëngth ( ch -> csc -> ÿd­‹r -> w©ch”s ) == 0) { 442 `put_Ë16 (0x0000, ©Œ_v® ); 443 msg = `g_¡rdup ("Disable measurement"); 445 `put_Ë16 ( GATT_CLIENT_CHARAC_CFG_NOTIF_BIT , 446 ©Œ_v® ); 447 msg = `g_¡rdup ("Enable measurement"); 449 } ià( `g_¡rcmp0 ( ch -> uuid , SC_CONTROL_POINT_UUID ) == 0) { 450 `put_Ë16 ( GATT_CLIENT_CHARAC_CFG_IND_BIT , ©Œ_v® ); 451 msg = `g_¡rdup ("Enable SC Control Point indications"); 453  dÚe ; 456 `g©t_wr™e_ch¬ ( ch -> csc -> ©Œib , desc -> hªdË , ©Œ_v® , 457 ( ©Œ_v® ), ch¬_wr™e_cb , msg ); 459 dÚe : 460 `g_ä“ ( ch ); 461 } } 463  $discov”_desc ( csc *csc,  g©t_ch¬ * c , 464  g©t_ch¬ * c_Ãxt ) 466  ch¬aù”i¡ic * ch ; 467 ušt16_t ¡¬t , ’d ; 468 bt_uuid_t uuid ; 470 ¡¬t = c -> v®ue_hªdË + 1; 472 ià( c_Ãxt !ð NULL ) { 473 ià( ¡¬t =ð c_Ãxt -> hªdË ) 475 ’d = c_Ãxt -> hªdË - 1; 476 } ià( c -> v®ue_hªdË !ð csc -> svc_¿nge -> ’d ) { 477 ’d = csc -> svc_¿nge ->end; 482 ch = `g_Ãw0 ( ch¬aù”i¡ic , 1); 483 ch -> csc = csc; 484 `memýy ( ch -> uuid , c ->uuid, (c->uuid)); 486 `bt_uuid16_ü—‹ (& uuid , GATT_CLIENT_CHARAC_CFG_UUID ); 488 `g©t_discov”_desc ( csc -> ©Œib , ¡¬t , ’d , & uuid , discov”_desc_cb , 489 ch ); 490 } } 492  $upd©e_w©ch” ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 494  w©ch” * w = d©a ; 495  m—su»m’t * m = u£r_d©a ; 496  csc *csøð m ->csc; 497 cÚ¡ * ·th = `deviû_g‘_·th ( csc -> dev ); 498 DBusMes§geI‹r ™” ; 499 DBusMes§geI‹r diù ; 500 DBusMes§ge * msg ; 502 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( w -> ¤v , w-> ·th , 503 CYCLINGSPEED_WATCHER_INTERFACE , "MeasurementReceived"); 504 ià( msg =ð NULL ) 507 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 509 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 511 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 512 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 513 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 514 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 516 ià( m -> has_wh“l_»v ) { 517 `diù_­³nd_’Œy (& diù , "WheelRevolutions", 518 DBUS_TYPE_UINT32 , & m -> wh“l_»v ); 519 `diù_­³nd_’Œy (& diù , "LastWheelEventTime", 520 DBUS_TYPE_UINT16 , & m -> Ï¡_wh“l_time ); 523 ià( m -> has_üªk_»v ) { 524 `diù_­³nd_’Œy (& diù , "CrankRevolutions", 525 DBUS_TYPE_UINT16 , & m -> üªk_»v ); 526 `diù_­³nd_’Œy (& diù , "LastCrankEventTime", 527 DBUS_TYPE_UINT16 , & m -> Ï¡_üªk_time ); 530 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & diù ); 532 `dbus_mes§ge_£t_no_»¶y ( msg , TRUE ); 533 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), msg ); 534 } } 536  $´oûss_m—su»m’t ( csc *csc, cÚ¡ ušt8_t * pdu , 537 ušt16_t Ën ) 539  m—su»m’t m ; 540 ušt8_t æags ; 542 æags = * pdu ; 544 pdu ++; 545 Ën --; 547 `mem£t (& m , 0, (m)); 549 ià(( æags & WHEEL_REV_PRESENT è&& ( csc -> ã©u» & WHEEL_REV_SUPPORT )) { 550 ià( Ën < 6) { 551 `”rÜ ("Wheel„evolutions data fields missing"); 555 m . has_wh“l_»v = Œue ; 556 m . wh“l_»v = `g‘_Ë32 ( pdu ); 557 m . Ï¡_wh“l_time = `g‘_Ë16 ( pdu + 4); 558 pdu += 6; 559 Ën -= 6; 562 ià(( æags & CRANK_REV_PRESENT è&& ( csc -> ã©u» & CRANK_REV_SUPPORT )) { 563 ià( Ën < 4) { 564 `”rÜ ("Crank„evolutions data fields missing"); 568 m . has_üªk_»v = Œue ; 569 m . üªk_»v = `g‘_Ë16 ( pdu ); 570 m . Ï¡_üªk_time = `g‘_Ë16 ( pdu + 2); 571 pdu += 4; 572 Ën -= 4; 576 m . csc = csc; 577 `g_¦i¡_fÜ—ch ( csc -> ÿd­‹r -> w©ch”s , upd©e_w©ch” , & m ); 578 } } 580  $m—su»m’t_nÙify_hªdËr (cÚ¡ ušt8_t * pdu , ušt16_t Ën , 581 gpoš‹r u£r_d©a ) 583  csc *csøð u£r_d©a ; 586 ià( Ën < 3) { 587 `”rÜ ("Invalid PDU„eceived"); 591 `´oûss_m—su»m’t ( csc , pdu + 3, Ën - 3); 592 } } 594  $cÚŒÞpošt_´Ý”ty_»¶y ( cÚŒÞpošt_»q * »q , 595 ušt8_t code ) 597  code ) { 598  RSP_SUCCESS : 599 `g_dbus_³ndšg_´Ý”ty_sucûss ( »q -> »¶y_id ); 602  RSP_NOT_SUPPORTED : 603 `g_dbus_³ndšg_´Ý”ty_”rÜ ( »q -> »¶y_id , 604 ERROR_INTERFACE ".NotSupported", 608  RSP_INVALID_PARAM : 609 `g_dbus_³ndšg_´Ý”ty_”rÜ ( »q -> »¶y_id , 610 ERROR_INTERFACE ".InvalidArguments", 614  RSP_FAILED : 615 `g_dbus_³ndšg_´Ý”ty_”rÜ ( »q -> »¶y_id , 616 ERROR_INTERFACE ".Failed", 621 `g_dbus_³ndšg_´Ý”ty_”rÜ ( »q -> »¶y_id , 622 ERROR_INTERFACE ".Failed", 623 "O³¿tiÚ fažed (%d)", code ); 626 } } 628  $cÚŒÞpošt_m‘hod_»¶y ( cÚŒÞpošt_»q * »q , 629 ušt8_t code ) 631 DBusMes§ge * »¶y ; 633  code ) { 634  RSP_SUCCESS : 635 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( »q -> msg ); 637  RSP_NOT_SUPPORTED : 638 »¶y = `btd_”rÜ_nÙ_suµÜ‹d ( »q -> msg ); 640  RSP_INVALID_PARAM : 641 »¶y = `btd_”rÜ_šv®id_¬gs ( »q -> msg ); 643  RSP_FAILED : 644 »¶y = `btd_”rÜ_çžed ( »q -> msg , "Failed"); 647 »¶y = `btd_”rÜ_çžed ( »q -> msg , "Unknownƒrror"); 651 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y ); 653 `dbus_mes§ge_uÄef ( »q -> msg ); 654 } } 656  $cÚŒÞpošt_šd_hªdËr (cÚ¡ ušt8_t * pdu , ušt16_t Ën , 657 gpoš‹r u£r_d©a ) 659  csc *csøð u£r_d©a ; 660  cÚŒÞpošt_»q * »q = csc -> ³ndšg_»q ; 661 ušt8_t Ýcode ; 662 ušt8_t »q_Ýcode ; 663 ušt8_t r¥_code ; 664 ušt8_t * Ýdu ; 665 ušt16_t Þ’ ; 666 size_t ¶’ ; 668 ià( Ën < ATT_HDR_LEN ) { 669 `”rÜ ("Invalid PDU„eceived"); 674 pdu +ð ATT_HDR_LEN ; 675 Ën -ð ATT_HDR_LEN ; 677 ià( Ën < 1) { 678 `”rÜ ("Op Code missing"); 679  dÚe ; 682 Ýcode = * pdu ; 683 pdu ++; 684 Ën --; 686 ià( Ýcode !ð RESPONSE_CODE ) { 687 `DBG ("UnsuµÜ‹d O°Cod»ûived (%d)", Ýcode ); 688  dÚe ; 691 ià( Ën < 2) { 692 `”rÜ ("Invalid Response Code PDU„eceived"); 693  dÚe ; 696 »q_Ýcode = * pdu ; 697 r¥_code = *( pdu + 1); 698 pdu += 2; 699 Ën -= 2; 701 ià( »q =ð NULL ||„eq-> Ýcode !ð »q_Ýcode ) { 702 `DBG ("Indication„eceived without…ending„equest"); 703  dÚe ; 706  »q -> Ýcode ) { 707  SET_CUMULATIVE_VALUE : 708 `cÚŒÞpošt_m‘hod_»¶y ( »q , r¥_code ); 711  REQUEST_SUPPORTED_SENSOR_LOC : 712 ià( r¥_code =ð RSP_SUCCESS ) { 713 csc -> num_loÿtiÚs = Ën ; 714 csc -> loÿtiÚs = `g_memdup ( pdu , Ën ); 716 `”rÜ ("Failedo„ead Supported Sendor Locations"); 720  UPDATE_SENSOR_LOC : 721 csc -> loÿtiÚ = »q -> ³ndšg_loÿtiÚ ; 723 `cÚŒÞpošt_´Ý”ty_»¶y ( »q , r¥_code ); 725 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 726 `deviû_g‘_·th ( csc -> dev ), 727 CYCLINGSPEED_INTERFACE , "Location"); 731 csc -> ³ndšg_»q = NULL ; 732 `g_sourû_»move ( »q -> timeout ); 733 `g_ä“ ( »q ); 735 dÚe : 736 Ýdu = `g_©Œib_g‘_bufãr ( csc -> ©Œib , & ¶’ ); 737 Þ’ = `’c_cÚfœm©iÚ ( Ýdu , ¶’ ); 738 ià( Þ’ > 0) 739 `g_©Œib_£nd ( csc -> ©Œib , 0, Ýdu , Þ’ , NULL , NULL, NULL); 740 } } 742  $discov”_ch¬_cb ( ušt8_t ¡©us , GSLi¡ * ch¬s , * u£r_d©a ) 744  csc *csøð u£r_d©a ; 745 ušt16_t ã©u»_v®_hªdË = 0; 747 ià( ¡©us ) { 748 `”rÜ ("Discover CSCS characteristics: %s", 749 `©t_ecode2¡r ( ¡©us )); 753 ; ch¬s ; ch¬ ðch¬s-> Ãxt ) { 754  g©t_ch¬ * c = ch¬s -> d©a ; 755  g©t_ch¬ * c_Ãxt = 756 ( ch¬s -> Ãxt ? ch¬s->Ãxt-> d©a : NULL ); 758 ià( `g_¡rcmp0 ( c -> uuid , CSC_MEASUREMENT_UUID ) == 0) { 759 csc -> ©tio_m—su»m’t_id = 760 `g_©Œib_»gi¡” ( csc -> ©Œib , 761 ATT_OP_HANDLE_NOTIFY , c -> v®ue_hªdË , 762 m—su»m’t_nÙify_hªdËr , csc , NULL ); 764 `discov”_desc ( csc , c , c_Ãxt ); 765 } ià( `g_¡rcmp0 ( c -> uuid , CSC_FEATURE_UUID ) == 0) { 766 ã©u»_v®_hªdË = c -> v®ue_hªdË ; 767 } ià( `g_¡rcmp0 ( c -> uuid , SENSOR_LOCATION_UUID ) == 0) { 768 `DBG ("Sensor Location supported"); 769 `g©t_»ad_ch¬ ( csc -> ©Œib , c -> v®ue_hªdË , 770 »ad_loÿtiÚ_cb , csc ); 771 } ià( `g_¡rcmp0 ( c -> uuid , SC_CONTROL_POINT_UUID ) == 0) { 772 `DBG ("SC Control Point supported"); 773 csc -> cÚŒÞpošt_v®_hªdË = c -> v®ue_hªdË ; 775 csc -> ©tio_cÚŒÞpošt_id = `g_©Œib_»gi¡” ( 776 csc -> ©Œib , ATT_OP_HANDLE_IND , 777 c -> v®ue_hªdË , 778 cÚŒÞpošt_šd_hªdËr , csc , NULL ); 780 `discov”_desc ( csc , c , c_Ãxt ); 784 ià( ã©u»_v®_hªdË > 0) 785 `g©t_»ad_ch¬ ( csc -> ©Œib , ã©u»_v®_hªdË , 786 »ad_ã©u»_cb , csc ); 787 } } 789  $’abË_m—su»m’t ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 791  csc *csøð d©a ; 792 ušt16_t hªdË = csc -> m—su»m’t_ccc_hªdË ; 793 ušt8_t v®ue [2]; 794 * msg ; 796 ià( csc -> ©Œib =ð NULL || ! hªdË ) 799 `put_Ë16 ( GATT_CLIENT_CHARAC_CFG_NOTIF_BIT , v®ue ); 800 msg = `g_¡rdup ("Enable measurement"); 802 `g©t_wr™e_ch¬ ( csc -> ©Œib , hªdË , v®ue , (value), 803 ch¬_wr™e_cb , msg ); 804 } } 806  $di§bË_m—su»m’t ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 808  csc *csøð d©a ; 809 ušt16_t hªdË = csc -> m—su»m’t_ccc_hªdË ; 810 ušt8_t v®ue [2]; 811 * msg ; 813 ià( csc -> ©Œib =ð NULL || ! hªdË ) 816 `put_Ë16 (0x0000, v®ue ); 817 msg = `g_¡rdup ("Disable measurement"); 819 `g©t_wr™e_ch¬ ( csc -> ©Œib , hªdË , v®ue , (value), 820 ch¬_wr™e_cb , msg ); 821 } } 823  $©tio_cÚÃùed_cb ( GA‰rib * ©Œib , gpoš‹r u£r_d©a ) 825  csc *csøð u£r_d©a ; 827 `DBG (""); 829 csc -> ©Œib = `g_©Œib_»f (attrib); 831 `g©t_discov”_ch¬ ( csc -> ©Œib , csc-> svc_¿nge -> ¡¬t , 832 csc -> svc_¿nge -> ’d , NULL , 833 discov”_ch¬_cb , csc ); 834 } } 836  $©tio_discÚÃùed_cb ( gpoš‹r u£r_d©a ) 838  csc *csøð u£r_d©a ; 840 `DBG (""); 842 ià( csc -> ©tio_m—su»m’t_id > 0) { 843 `g_©Œib_uÄegi¡” ( csc -> ©Œib , csc-> ©tio_m—su»m’t_id ); 844 csc -> ©tio_m—su»m’t_id = 0; 847 ià( csc -> ©tio_cÚŒÞpošt_id > 0) { 848 `g_©Œib_uÄegi¡” ( csc -> ©Œib , csc-> ©tio_cÚŒÞpošt_id ); 849 csc -> ©tio_cÚŒÞpošt_id = 0; 852 `g_©Œib_uÄef ( csc -> ©Œib ); 853 csc -> ©Œib = NULL ; 854 } } 856  $w©ch”_ex™_cb ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 858  w©ch” *w©ch” = u£r_d©a ; 859  csc_ad­‹r * ÿd­‹r = w©ch” ->cadapter; 861 `DBG ("cyþšg w©ch” [%s] discÚÃùed", w©ch” -> ·th ); 863 ÿd­‹r -> w©ch”s = `g_¦i¡_»move (ÿd­‹r->w©ch”s, w©ch” ); 864 `g_dbus_»move_w©ch ( cÚn , w©ch” -> id ); 866 ià( `g_¦i¡_Ëngth ( ÿd­‹r -> w©ch”s ) == 0) 867 `g_¦i¡_fÜ—ch ( ÿd­‹r -> deviûs , di§bË_m—su»m’t , 0); 868 } } 870  DBusMes§ge * $»gi¡”_w©ch” ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 871 * d©a ) 873  csc_ad­‹r * ÿd­‹r = d©a ; 874  w©ch” *watcher; 875 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 876 * ·th ; 878 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 879 DBUS_TYPE_INVALID )) 880  `btd_”rÜ_šv®id_¬gs ( msg ); 882 w©ch” = `fšd_w©ch” ( ÿd­‹r -> w©ch”s , £nd” , ·th ); 883 ià( w©ch” !ð NULL ) 884  `btd_”rÜ_®»ady_exi¡s ( msg ); 886 w©ch” = `g_Ãw0 (watcher, 1); 887 w©ch” -> ÿd­‹r = cadapter; 888 w©ch” -> id = `g_dbus_add_discÚÃù_w©ch ( cÚn , £nd” , w©ch”_ex™_cb , 889 w©ch” , de¡roy_w©ch” ); 890 w©ch” -> ¤v = `g_¡rdup ( £nd” ); 891 w©ch” -> ·th = `g_¡rdup (path); 893 ià( `g_¦i¡_Ëngth ( ÿd­‹r -> w©ch”s ) == 0) 894 `g_¦i¡_fÜ—ch ( ÿd­‹r -> deviûs , ’abË_m—su»m’t , 0); 896 ÿd­‹r -> w©ch”s = `g_¦i¡_´•’d (ÿd­‹r->w©ch”s, w©ch” ); 898 `DBG ("cyþšg w©ch” [%s]„egi¡”ed", ·th ); 900  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 901 } } 903  DBusMes§ge * $uÄegi¡”_w©ch” ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 904 * d©a ) 906  csc_ad­‹r * ÿd­‹r = d©a ; 907  w©ch” *watcher; 908 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 909 * ·th ; 911 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 912 DBUS_TYPE_INVALID )) 913  `btd_”rÜ_šv®id_¬gs ( msg ); 915 w©ch” = `fšd_w©ch” ( ÿd­‹r -> w©ch”s , £nd” , ·th ); 916 ià( w©ch” =ð NULL ) 917  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 919 ÿd­‹r -> w©ch”s = `g_¦i¡_»move (ÿd­‹r->w©ch”s, w©ch” ); 920 `g_dbus_»move_w©ch ( cÚn , w©ch” -> id ); 922 ià( `g_¦i¡_Ëngth ( ÿd­‹r -> w©ch”s ) == 0) 923 `g_¦i¡_fÜ—ch ( ÿd­‹r -> deviûs , di§bË_m—su»m’t , 0); 925 `DBG ("cyþšg w©ch” [%s] uÄegi¡”ed", ·th ); 927  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 928 } } 930 cÚ¡ GDBusM‘hodTabË gcyþšg¥“d_mªag”_m‘hods [] = { 931 { GDBUS_METHOD ("RegisterWatcher", 932 GDBUS_ARGS ({ "ag’t", "o" }), NULL , 933 »gi¡”_w©ch” ) }, 934 { GDBUS_METHOD ("UnregisterWatcher", 935 GDBUS_ARGS ({ "ag’t", "o" }), NULL , 936 uÄegi¡”_w©ch” ) }, 940  $csc_ad­‹r_´obe ( btd_´ofže * p ,  btd_ad­‹r * ad­‹r ) 942  csc_ad­‹r * ÿd­‹r ; 944 ÿd­‹r = `g_Ãw0 ( csc_ad­‹r , 1); 945 ÿd­‹r -> ad­‹r =‡dapter; 947 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 948 `ad­‹r_g‘_·th ( ad­‹r ), 949 CYCLINGSPEED_MANAGER_INTERFACE , 950 cyþšg¥“d_mªag”_m‘hods , 951 NULL , NULL, ÿd­‹r , 952 de¡roy_csc_ad­‹r )) { 953 `”rÜ ("D-Bus failedo„egister %s interface", 954 CYCLINGSPEED_MANAGER_INTERFACE ); 955 `de¡roy_csc_ad­‹r ( ÿd­‹r ); 956  - EIO ; 959 csc_ad­‹rs = `g_¦i¡_´•’d (csc_ad­‹rs, ÿd­‹r ); 962 } } 964  $csc_ad­‹r_»move ( btd_´ofže * p , 965  btd_ad­‹r * ad­‹r ) 967  csc_ad­‹r * ÿd­‹r ; 969 ÿd­‹r = `fšd_csc_ad­‹r ( ad­‹r ); 970 ià( ÿd­‹r =ð NULL ) 973 csc_ad­‹rs = `g_¦i¡_»move (csc_ad­‹rs, ÿd­‹r ); 975 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 976 `ad­‹r_g‘_·th ( ÿd­‹r -> ad­‹r ), 977 CYCLINGSPEED_MANAGER_INTERFACE ); 978 } } 980  gboÞ—n $´Ý”ty_g‘_loÿtiÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 981 DBusMes§geI‹r * ™” , * d©a ) 983  csc *csøð d©a ; 984 cÚ¡ * loc ; 986 ià(! csc -> has_loÿtiÚ ) 987  FALSE ; 989 loc = `loÿtiÚ2¡r ( csc -> loÿtiÚ ); 991 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & loc ); 993  TRUE ; 994 } } 996  $´Ý”ty_£t_loÿtiÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 997 DBusMes§geI‹r * ™” , 998 GDBusP’dšgPrÝ”tyS‘ id , * d©a ) 1000  csc *csøð d©a ; 1001 * loc ; 1002  loc_v® ; 1003 ušt8_t ©t_v® [2]; 1004  cÚŒÞpošt_»q * »q ; 1006 ià( csc -> ³ndšg_»q !ð NULL ) { 1007 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 1008 ERROR_INTERFACE ".InProgress", 1013 ià(!( csc -> ã©u» & MULTI_SENSOR_LOC_SUPPORT )) { 1014 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 1015 ERROR_INTERFACE ".NotSupported", 1020 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) { 1021 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 1022 ERROR_INTERFACE ".InvalidArguments", 1027 `dbus_mes§ge_™”_g‘_basic ( ™” , & loc ); 1029 loc_v® = `¡r2loÿtiÚ ( loc ); 1031 ià( loc_v® < 0) { 1032 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 1033 ERROR_INTERFACE ".InvalidArguments", 1038 »q = `g_Ãw ( cÚŒÞpošt_»q , 1); 1039 »q -> csc = csc; 1040 »q -> »¶y_id = id ; 1041 »q -> Ýcode = UPDATE_SENSOR_LOC ; 1042 »q -> ³ndšg_loÿtiÚ = loc_v® ; 1044 csc -> ³ndšg_»q = »q ; 1046 ©t_v® [0] = UPDATE_SENSOR_LOC ; 1047 ©t_v® [1] = loc_v® ; 1049 `g©t_wr™e_ch¬ ( csc -> ©Œib , csc-> cÚŒÞpošt_v®_hªdË , ©t_v® , 1050 ( ©t_v® ), cÚŒÞpošt_wr™e_cb , »q ); 1051 } } 1053  gboÞ—n $´Ý”ty_exi¡s_loÿtiÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1054 * d©a ) 1056  csc *csøð d©a ; 1058  csc -> has_loÿtiÚ ; 1059 } } 1061  gboÞ—n $´Ý”ty_g‘_loÿtiÚs (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1062 DBusMes§geI‹r * ™” , * d©a ) 1064  csc *csøð d©a ; 1065 DBusMes§geI‹r ’Œy ; 1066  i ; 1068 ià(!( csc -> ã©u» & MULTI_SENSOR_LOC_SUPPORT )) 1069  FALSE ; 1071 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1072 DBUS_TYPE_STRING_AS_STRING , & ’Œy ); 1073  i = 0; i < csc -> num_loÿtiÚs ; i++) { 1074 * loc = `g_¡rdup ( `loÿtiÚ2¡r ( csc -> loÿtiÚs [ i ])); 1075 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & loc ); 1076 `g_ä“ ( loc ); 1079 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ’Œy ); 1081  TRUE ; 1082 } } 1084  gboÞ—n $´Ý”ty_exi¡s_loÿtiÚs (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1085 * d©a ) 1087  csc *csøð d©a ; 1089  !!( csc -> ã©u» & MULTI_SENSOR_LOC_SUPPORT ); 1090 } } 1092  gboÞ—n $´Ý”ty_g‘_wh“l_»v_sup (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1093 DBusMes§geI‹r * ™” , * d©a ) 1095  csc *csøð d©a ; 1096 dbus_boÞ_t v® ; 1098 v® = !!( csc -> ã©u» & WHEEL_REV_SUPPORT ); 1099 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v® ); 1101  TRUE ; 1102 } } 1104  gboÞ—n $´Ý”ty_g‘_muÉi_loc_sup (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1105 DBusMes§geI‹r * ™” , * d©a ) 1107  csc *csøð d©a ; 1108 dbus_boÞ_t v® ; 1110 v® = !!( csc -> ã©u» & MULTI_SENSOR_LOC_SUPPORT ); 1111 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v® ); 1113  TRUE ; 1114 } } 1116 cÚ¡ GDBusPrÝ”tyTabË gcyþšg¥“d_deviû_´Ý”t›s [] = { 1117 { "LoÿtiÚ", "s", ´Ý”ty_g‘_loÿtiÚ , ´Ý”ty_£t_loÿtiÚ , 1118 ´Ý”ty_exi¡s_loÿtiÚ }, 1119 { "SuµÜ‹dLoÿtiÚs", "as", ´Ý”ty_g‘_loÿtiÚs , NULL , 1120 ´Ý”ty_exi¡s_loÿtiÚs }, 1121 { "Wh“lRevÞutiÚD©aSuµÜ‹d", "b", ´Ý”ty_g‘_wh“l_»v_sup }, 1122 { "MuÉËLoÿtiÚsSuµÜ‹d", "b", ´Ý”ty_g‘_muÉi_loc_sup }, 1126  DBusMes§ge * $£t_cumuÏtive_wh“l_»v ( DBusCÚÃùiÚ * cÚn , 1127 DBusMes§ge * msg , * d©a ) 1129  csc *csøð d©a ; 1130 dbus_ušt32_t v®ue ; 1131  cÚŒÞpošt_»q * »q ; 1132 ušt8_t ©t_v® [5]; 1134 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_UINT32 , & v®ue , 1135 DBUS_TYPE_INVALID )) 1136  `btd_”rÜ_šv®id_¬gs ( msg ); 1138 ià( csc -> ³ndšg_»q !ð NULL ) 1139  `btd_”rÜ_š_´og»ss ( msg ); 1141 »q = `g_Ãw ( cÚŒÞpošt_»q , 1); 1142 »q -> csc = csc; 1143 »q -> Ýcode = SET_CUMULATIVE_VALUE ; 1144 »q -> msg = `dbus_mes§ge_»f (msg); 1146 csc -> ³ndšg_»q = »q ; 1148 ©t_v® [0] = SET_CUMULATIVE_VALUE ; 1149 `put_Ë32 ( v®ue , ©t_v® + 1); 1151 `g©t_wr™e_ch¬ ( csc -> ©Œib , csc-> cÚŒÞpošt_v®_hªdË , ©t_v® , 1152 ( ©t_v® ), cÚŒÞpošt_wr™e_cb , »q ); 1154  NULL ; 1155 } } 1157 cÚ¡ GDBusM‘hodTabË gcyþšg¥“d_deviû_m‘hods [] = { 1158 { GDBUS_ASYNC_METHOD ("SetCumulativeWheelRevolutions", 1159 GDBUS_ARGS ({ "v®ue", "u" }), NULL , 1160 £t_cumuÏtive_wh“l_»v ) }, 1164  $csc_deviû_´obe ( btd_£rviû * £rviû ) 1166  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 1167  btd_ad­‹r * ad­‹r ; 1168  csc_ad­‹r * ÿd­‹r ; 1169  csc *csc; 1170  g©t_´im¬y * ´im ; 1172 ´im = `btd_deviû_g‘_´im¬y ( deviû , CYCLING_SC_UUID ); 1173 ià( ´im =ð NULL ) 1174  - EINVAL ; 1176 ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 1178 ÿd­‹r = `fšd_csc_ad­‹r ( ad­‹r ); 1179 ià( ÿd­‹r =ð NULL ) 1182 csc = `g_Ãw0 (csc, 1); 1183 csc -> dev = `btd_deviû_»f ( deviû ); 1184 csc -> ÿd­‹r = cadapter; 1186 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1187 `deviû_g‘_·th ( deviû ), 1188 CYCLINGSPEED_INTERFACE , 1189 cyþšg¥“d_deviû_m‘hods , 1190 NULL , 1191 cyþšg¥“d_deviû_´Ý”t›s , 1192 csc , de¡roy_csc )) { 1193 `”rÜ ("D-Bus failedo„egister %s interface", 1194 CYCLINGSPEED_INTERFACE ); 1195 `de¡roy_csc ( csc ); 1196  - EIO ; 1199 csc -> svc_¿nge = `g_Ãw0 ( ©t_¿nge , 1); 1200 csc -> svc_¿nge -> ¡¬t = ´im -> ¿nge .start; 1201 csc -> svc_¿nge -> ’d = ´im -> ¿nge .end; 1203 ÿd­‹r -> deviûs = `g_¦i¡_´•’d (ÿd­‹r->deviûs, csc ); 1205 csc -> ©tioid = `btd_deviû_add_©tio_ÿÎback ( deviû , ©tio_cÚÃùed_cb , 1206 ©tio_discÚÃùed_cb , csc ); 1209 } } 1211  $csc_deviû_»move ( btd_£rviû * £rviû ) 1213  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 1214  btd_ad­‹r * ad­‹r ; 1215  csc_ad­‹r * ÿd­‹r ; 1216  csc *csc; 1217 GSLi¡ * l ; 1219 ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 1221 ÿd­‹r = `fšd_csc_ad­‹r ( ad­‹r ); 1222 ià( ÿd­‹r =ð NULL ) 1225 l = `g_¦i¡_fšd_cu¡om ( ÿd­‹r -> deviûs , deviû , cmp_deviû ); 1226 ià( l =ð NULL ) 1229 csc = l -> d©a ; 1231 ÿd­‹r -> deviûs = `g_¦i¡_»move (ÿd­‹r->deviûs, csc ); 1233 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1234 `deviû_g‘_·th ( deviû ), 1235 CYCLINGSPEED_INTERFACE ); 1236 } } 1238  btd_´ofže gcsý_´ofže = { 1239 . Çme = "Cycling Speed‡nd Cadence GATT Driver", 1240 . g»mÙe_uuid = CYCLING_SC_UUID , 1242 . gad­‹r_´obe = csc_ad­‹r_´obe , 1243 . gad­‹r_»move = csc_ad­‹r_»move , 1245 . gdeviû_´obe = csc_deviû_´obe , 1246 . gdeviû_»move = csc_deviû_»move , 1249  $cyþšg¥“d_š™ () 1251  `btd_´ofže_»gi¡” (& csý_´ofže ); 1252 } } 1254  $cyþšg¥“d_ex™ () 1256 `btd_´ofže_uÄegi¡” (& csý_´ofže ); 1257 } } 1259 BLUETOOTH_PLUGIN_DEFINE ( cyþšg¥“d , VERSION , 1260 BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 1261 cyþšg¥“d_š™ , cyþšg¥“d_ex™ ) @profiles/deviceinfo/deviceinfo.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<¡dboÞ.h > 28  ~<”ºo.h > 30  ~ 32  ~"lib/uuid.h " 33  ~"¤c/¶ugš.h " 34  ~"¤c/ad­‹r.h " 35  ~"¤c/deviû.h " 36  ~"¤c/´ofže.h " 37  ~"¤c/£rviû.h " 38  ~"¤c/sh¬ed/utž.h " 39  ~"©Œib/g©Œib.h " 40  ~"¤c/©tio.h " 41  ~"©Œib/©t.h " 42  ~"©Œib/g©t.h " 43  ~"¤c/log.h " 45  #PNP_ID_SIZE 7 ) 47  sdeviûšfo { 48  btd_deviû * mdev ; 49 GA‰rib * m©Œib ; 50 gušt m©tioid ; 51  ©t_¿nge * msvc_¿nge ; 52 GSLi¡ * mch¬s ; 55  sch¬aù”i¡ic { 56  g©t_ch¬ m©Œ ; 57  deviûšfo * md ; 60  $deviûšfo_driv”_»move ( btd_£rviû * £rviû ) 62  deviûšfo * d = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 64 ià( d -> ©tioid > 0) 65 `btd_deviû_»move_©tio_ÿÎback ( d -> dev , d-> ©tioid ); 67 ià( d -> ©Œib !ð NULL ) 68 `g_©Œib_uÄef ( d -> ©Œib ); 70 `g_¦i¡_ä“_fuÎ ( d -> ch¬s , g_ä“ ); 72 `btd_deviû_uÄef ( d -> dev ); 73 `g_ä“ ( d -> svc_¿nge ); 74 `g_ä“ ( d ); 75 } } 77  $»ad_²pid_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 78 gpoš‹r u£r_d©a ) 80  ch¬aù”i¡ic * ch = u£r_d©a ; 81 ušt8_t v®ue [ PNP_ID_SIZE ]; 82 ssize_t vËn ; 84 ià( ¡©us != 0) { 85 `”rÜ ("E¼Ü„—dšg PNP_ID v®ue: %s", `©t_ecode2¡r ( ¡©us )); 89 vËn = `dec_»ad_»¥ ( pdu , Ën , v®ue , (value)); 90 ià( vËn < 0) { 91 `”rÜ ("Error„eading PNP_ID: Protocolƒrror"); 95 ià( vËn < 7) { 96 `”rÜ ("Error„eading PNP_ID: Invalid…du†ength„eceived"); 100 `btd_deviû_£t_²pid ( ch -> d -> dev , v®ue [0], `g‘_Ë16 (&value[1]), 101 `g‘_Ë16 (& v®ue [3]), get_le16(&value[5])); 102 } } 104  $´oûss_deviûšfo_ch¬ ( ch¬aù”i¡ic * ch ) 106 ià( `g_¡rcmp0 ( ch -> ©Œ . uuid , PNPID_UUID ) == 0) 107 `g©t_»ad_ch¬ ( ch -> d -> ©Œib , ch-> ©Œ . v®ue_hªdË , 108 »ad_²pid_cb , ch ); 109 } } 111  $cÚfigu»_deviûšfo_cb ( ušt8_t ¡©us , GSLi¡ * ch¬aù”i¡ics , 112 * u£r_d©a ) 114  deviûšfo * d = u£r_d©a ; 115 GSLi¡ * l ; 117 ià( ¡©us != 0) { 118 `”rÜ ("Discover deviceinfo characteristics: %s", 119 `©t_ecode2¡r ( ¡©us )); 123  l = ch¬aù”i¡ics ;†;† =†-> Ãxt ) { 124  g©t_ch¬ * c = l -> d©a ; 125  ch¬aù”i¡ic * ch ; 127 ch = `g_Ãw0 ( ch¬aù”i¡ic , 1); 128 ch -> ©Œ . hªdË = c ->handle; 129 ch -> ©Œ . ´Ý”t›s = c ->properties; 130 ch -> ©Œ . v®ue_hªdË = c ->value_handle; 131 `memýy ( ch -> ©Œ . uuid , c ->uuid, MAX_LEN_UUID_STR + 1); 132 ch -> d = d; 134 d -> ch¬s = `g_¦i¡_­³nd (d->ch¬s, ch ); 136 `´oûss_deviûšfo_ch¬ ( ch ); 138 } } 139  $©tio_cÚÃùed_cb ( GA‰rib * ©Œib , gpoš‹r u£r_d©a ) 141  deviûšfo * d = u£r_d©a ; 143 d -> ©Œib = `g_©Œib_»f (attrib); 145 `g©t_discov”_ch¬ ( d -> ©Œib , d-> svc_¿nge -> ¡¬t , d->svc_¿nge-> ’d , 146 NULL , cÚfigu»_deviûšfo_cb , d ); 147 } } 149  $©tio_discÚÃùed_cb ( gpoš‹r u£r_d©a ) 151  deviûšfo * d = u£r_d©a ; 153 `g_©Œib_uÄef ( d -> ©Œib ); 154 d -> ©Œib = NULL ; 155 } } 157  $deviûšfo_»gi¡” ( btd_£rviû * £rviû , 158  g©t_´im¬y * ´im ) 160  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 161  deviûšfo * d ; 163 d = `g_Ãw0 ( deviûšfo , 1); 164 d -> dev = `btd_deviû_»f ( deviû ); 165 d -> svc_¿nge = `g_Ãw0 ( ©t_¿nge , 1); 166 d -> svc_¿nge -> ¡¬t = ´im -> ¿nge .start; 167 d -> svc_¿nge -> ’d = ´im -> ¿nge .end; 169 `btd_£rviû_£t_u£r_d©a ( £rviû , d ); 171 d -> ©tioid = `btd_deviû_add_©tio_ÿÎback ( deviû , ©tio_cÚÃùed_cb , 172 ©tio_discÚÃùed_cb , d ); 174 } } 176  $deviûšfo_driv”_´obe ( btd_£rviû * £rviû ) 178  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 179  g©t_´im¬y * ´im ; 181 ´im = `btd_deviû_g‘_´im¬y ( deviû , DEVICE_INFORMATION_UUID ); 182 ià( ´im =ð NULL ) 183  - EINVAL ; 185  `deviûšfo_»gi¡” ( £rviû , ´im ); 186 } } 188  btd_´ofže gdeviûšfo_´ofže = { 189 . Çme = "deviceinfo", 190 . g»mÙe_uuid = DEVICE_INFORMATION_UUID , 191 . gdeviû_´obe = deviûšfo_driv”_´obe , 192 . gdeviû_»move = deviûšfo_driv”_»move 195  $deviûšfo_š™ () 197  `btd_´ofže_»gi¡” (& deviûšfo_´ofže ); 198 } } 200  $deviûšfo_ex™ () 202 `btd_´ofže_uÄegi¡” (& deviûšfo_´ofže ); 203 } } 205 BLUETOOTH_PLUGIN_DEFINE ( deviûšfo , VERSION , BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 206 deviûšfo_š™ , deviûšfo_ex™ ) @profiles/gap/gas.c 19 #ifdeà HAVE_CONFIG_H 20  ~ 23  ~<ùy³.h > 24  ~<¡dboÞ.h > 25  ~<¡dlib.h > 26  ~ 27  ~ 28  ~ 29  ~<”ºo.h > 31  ~ 33  ~"lib/uuid.h " 34  ~"¤c/sh¬ed/utž.h " 35  ~"¤c/sh¬ed/©t.h " 36  ~"¤c/sh¬ed/queue.h " 37  ~"¤c/sh¬ed/g©t-db.h " 38  ~"¤c/sh¬ed/g©t-þ›Á.h " 39  ~"¤c/¶ugš.h " 40  ~"¤c/ad­‹r.h " 41  ~"¤c/deviû.h " 42  ~"¤c/´ofže.h " 43  ~"¤c/£rviû.h " 44  ~"¤c/log.h " 47  sgas { 48  btd_deviû * mdeviû ; 49  g©t_db * mdb ; 50  bt_g©t_þ›Á * mþ›Á ; 51 ušt16_t m¡¬t_hªdË , m’d_hªdË ; 54  GSLi¡ * gdeviûs ; 56  $gas_ä“ ( gas *gas) 58 `btd_deviû_uÄef ( gas -> deviû ); 59 `g©t_db_uÄef ( gas -> db ); 60 `bt_g©t_þ›Á_uÄef ( gas -> þ›Á ); 61 `g_ä“ ( gas ); 62 } } 64  $cmp_deviû ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 66 cÚ¡  gas *ga ð a ; 67 cÚ¡  btd_deviû * deviû = b ; 69  gas -> deviû == device ? 0 : -1; 70 } } 72 * $Çme2utf8 (cÚ¡ ušt8_t * Çme , ušt8_ˆ Ën ) 74  utf8_Çme [ HCI_MAX_NAME_LENGTH + 2]; 75  i ; 77 ià( `g_utf8_v®id©e ((cÚ¡ *è Çme , Ën , NULL )) 78  `g_¡ºdup ((*è Çme , Ën ); 80 `mem£t ( utf8_Çme , 0, (utf8_name)); 81 `¡ºýy ( utf8_Çme , (*è Çme , Ën ); 84  i = 0; utf8_Çme [i] != '\0'; i++) { 85 ià(! `i§scii ( utf8_Çme [ i ])) 86 utf8_Çme [ i ] = ' '; 90 `g_¡r¡r ( utf8_Çme ); 92  `g_¡rdup ( utf8_Çme ); 93 } } 95  $»ad_deviû_Çme_cb ( boÞ sucûss , ušt8_t ©t_ecode , 96 cÚ¡ ušt8_t * v®ue , ušt16_t Ëngth , 97 * u£r_d©a ) 99  gas *ga ð u£r_d©a ; 100 * Çme = `Çme2utf8 ( v®ue , Ëngth ); 102 `DBG ("GAP Deviû Name: %s", Çme ); 104 `btd_deviû_deviû_£t_Çme ( gas -> deviû , Çme ); 106 `g_ä“ ( Çme ); 107 } } 109  $hªdË_deviû_Çme ( gas *gas, ušt16_t v®ue_hªdË ) 111 ià(! `bt_g©t_þ›Á_»ad_lÚg_v®ue ( gas -> þ›Á , v®ue_hªdË , 0, 112 »ad_deviû_Çme_cb , gas , NULL )) 113 `DBG ("Failedo send„equesto„ead device‚ame"); 114 } } 116  $»ad_­³¬ªû_cb ( boÞ sucûss , ušt8_t ©t_ecode , 117 cÚ¡ ušt8_t * v®ue , ušt16_t Ëngth , 118 * u£r_d©a ) 120  gas *ga ð u£r_d©a ; 121 ušt16_t ­³¬ªû ; 123 ià(! sucûss ) { 124 `DBG ("R—dšg‡µ—¿nû fažed w™h ATTƒ¼Ü: %u", ©t_ecode ); 129 ià( Ëngth != 2) { 130 `DBG ("Malformed‡ppearance value"); 134 ­³¬ªû = `g‘_Ë16 ( v®ue ); 136 `DBG ("GAP Aµ—¿nû: 0x%04x", ­³¬ªû ); 138 `deviû_£t_­³¬ªû ( gas -> deviû , ­³¬ªû ); 139 } } 141  $hªdË_­³¬ªû ( gas *gas, ušt16_t v®ue_hªdË ) 143 ià(! `bt_g©t_þ›Á_»ad_v®ue ( gas -> þ›Á , v®ue_hªdË , 144 »ad_­³¬ªû_cb , gas , NULL )) 145 `DBG ("Failedo send„equesto„ead‡ppearance"); 146 } } 148  boÞ $uuid_cmp ( ušt16_t u16 , cÚ¡ bt_uuid_t * uuid ) 150 bt_uuid_t lhs ; 152 `bt_uuid16_ü—‹ (& lhs , u16 ); 154  `bt_uuid_cmp (& lhs , uuid ) == 0; 155 } } 157  $hªdË_ch¬aù”i¡ic ( g©t_db_©Œibu‹ * ©Œ , 158 * u£r_d©a ) 160  gas *ga ð u£r_d©a ; 161 ušt16_t v®ue_hªdË ; 162 bt_uuid_t uuid ; 164 ià(! `g©t_db_©Œibu‹_g‘_ch¬_d©a ( ©Œ , NULL , & v®ue_hªdË , NULL, 165 & uuid )) { 166 `”rÜ ("Failedo obtain characteristic data"); 170 ià( `uuid_cmp ( GATT_CHARAC_DEVICE_NAME , & uuid )) 171 `hªdË_deviû_Çme ( gas , v®ue_hªdË ); 172 ià( `uuid_cmp ( GATT_CHARAC_APPEARANCE , & uuid )) 173 `hªdË_­³¬ªû ( gas , v®ue_hªdË ); 175  uuid_¡r [ MAX_LEN_UUID_STR ]; 179 `bt_uuid_to_¡ršg (& uuid , uuid_¡r , (uuid_str)); 180 `DBG ("UnsuµÜ‹d ch¬aù”i¡ic: %s", uuid_¡r ); 182 } } 184  $hªdË_g­_£rviû ( gas *gas) 186  g©t_db_©Œibu‹ * ©Œ ; 188 ©Œ = `g©t_db_g‘_©Œibu‹ ( gas -> db , gas-> ¡¬t_hªdË ); 189 ià(! ©Œ ) { 190 `”rÜ ("Service with handle 0x%04x‚ot found in db", 191 gas -> ¡¬t_hªdË ); 195 `g©t_db_£rviû_fÜ—ch_ch¬ ( ©Œ , hªdË_ch¬aù”i¡ic , gas ); 196 } } 198  $g­_driv”_´obe ( btd_£rviû * £rviû ) 200  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 201  gas *gas; 202 ušt16_t ¡¬t_hªdË , ’d_hªdË ; 203 GSLi¡ * l ; 204  addr [18]; 206 ià(! `btd_£rviû_g‘_g©t_hªdËs ( £rviû , & ¡¬t_hªdË , & ’d_hªdË )) 209 `ba2¡r ( `deviû_g‘_add»ss ( deviû ), addr ); 210 `DBG ("GAP…rofž´ob(%s): s¹: 0x%04x,ƒnd 0x%04x", addr , 211 ¡¬t_hªdË , ’d_hªdË ); 217 l = `g_¦i¡_fšd_cu¡om ( deviûs , deviû , cmp_deviû ); 218 ià( l ) { 219 `”rÜ ("Morehan one GAP serviceƒxists on device"); 223 gas = `g_Ãw0 (gas, 1); 225 gas -> deviû = `btd_deviû_»f (device); 226 gas -> ¡¬t_hªdË = start_handle; 227 gas -> ’d_hªdË =ƒnd_handle; 228 deviûs = `g_¦i¡_­³nd (deviûs, gas ); 231 } } 233  $g­_driv”_»move ( btd_£rviû * £rviû ) 235  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 236  gas *gas; 237 ušt16_t ¡¬t_hªdË , ’d_hªdË ; 238 GSLi¡ * l ; 239  addr [18]; 241 ià(! `btd_£rviû_g‘_g©t_hªdËs ( £rviû , & ¡¬t_hªdË , 242 & ’d_hªdË )) { 243 `”rÜ ("Removed service is‚ot‡ GATT service"); 247 `ba2¡r ( `deviû_g‘_add»ss ( deviû ), addr ); 248 `DBG ("GAP…rofž»mov(%s): s¹: 0x%04x,ƒnd 0x%04x", addr , 249 ¡¬t_hªdË , ’d_hªdË ); 251 l = `g_¦i¡_fšd_cu¡om ( deviûs , deviû , cmp_deviû ); 252 ià(! l ) { 253 `”rÜ ("GAP service‚ot handled by…rofile"); 257 gas = l -> d©a ; 259 ià( gas -> ¡¬t_hªdË != start_handle || 260 gas -> ’d_hªdË !=ƒnd_handle) { 261 `”rÜ ("Removed unknown GAP service"); 265 deviûs = `g_¦i¡_»move (deviûs, gas ); 266 `gas_ä“ ( gas ); 267 } } 269  $g­_driv”_acû± ( btd_£rviû * £rviû ) 271  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 272  g©t_db * db = `btd_deviû_g‘_g©t_db ( deviû ); 273  bt_g©t_þ›Á * þ›Á = `btd_deviû_g‘_g©t_þ›Á ( deviû ); 274  gas *gas; 275 ušt16_t ¡¬t_hªdË , ’d_hªdË ; 276 GSLi¡ * l ; 277  addr [18]; 279 ià(! `btd_£rviû_g‘_g©t_hªdËs ( £rviû , & ¡¬t_hªdË , 280 & ’d_hªdË )) { 281 `”rÜ ("Service is‚ot‡ GATT service"); 285 `ba2¡r ( `deviû_g‘_add»ss ( deviû ), addr ); 286 `DBG ("GAP…rofžacû± (%s): s¹: 0x%04x,ƒnd 0x%04x", addr , 287 ¡¬t_hªdË , ’d_hªdË ); 289 l = `g_¦i¡_fšd_cu¡om ( deviûs , deviû , cmp_deviû ); 290 ià(! l ) { 291 `”rÜ ("GAP service‚ot handled by…rofile"); 295 gas = l -> d©a ; 297 ià( gas -> ¡¬t_hªdË != start_handle || 298 gas -> ’d_hªdË !=ƒnd_handle) { 299 `”rÜ ("Accepting unknown GAP service"); 304 `g©t_db_uÄef ( gas -> db ); 305 `bt_g©t_þ›Á_uÄef ( gas -> þ›Á ); 307 gas -> db = `g©t_db_»f (db); 308 gas -> þ›Á = `bt_g©t_þ›Á_»f (client); 311 `hªdË_g­_£rviû ( gas ); 314 } } 316  btd_´ofže gg­_´ofže = { 317 . Çme = "gap-profile", 318 . g»mÙe_uuid = GAP_UUID , 319 . gdeviû_´obe = g­_driv”_´obe , 320 . gdeviû_»move = g­_driv”_»move , 321 . gacû± = g­_driv”_acû± 324  $g­_š™ () 326 deviûs = NULL ; 328 `btd_´ofže_»gi¡” (& g­_´ofže ); 331 } } 333  $g­_ex™ () 335 `btd_´ofže_uÄegi¡” (& g­_´ofže ); 336 } } 338 BLUETOOTH_PLUGIN_DEFINE ( g­ , VERSION , BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 339 g­_š™ , g­_ex™ ) @profiles/health/hdp.c 23 #ifdeà HAVE_CONFIG_H 24  ~"cÚfig.h " 27  ~<¡dlib.h > 28  ~<¡dšt.h > 29  ~<¡dboÞ.h > 30  ~ 32  ~ 34  ~ 35  ~ 36  ~ 37  ~"¤c/dbus-commÚ.h " 38  ~"¤c/log.h " 39  ~"¤c/”rÜ.h " 40  ~"¤c/ad­‹r.h " 41  ~"¤c/deviû.h " 42  ~"¤c/sdpd.h " 43  ~"btio/btio.h " 45  ~"hdp_ty³s.h " 46  ~"hdp_utž.h " 47  ~"hdp.h " 48  ~"mÿp.h " 50  #ECHO_TIMEOUT 1 ) 51  #HDP_ECHO_LEN 15 ) 53  GSLi¡ * g­¶iÿtiÚs = NULL ; 54  GSLi¡ * gdeviûs = NULL ; 55  ušt8_t gÃxt_­p_id = HDP_MDEP_INITIAL ; 57  GSLi¡ * gad­‹rs ; 59  gboÞ—n upd©e_ad­‹r ( hdp_ad­‹r * ad­‹r ); 60  hdp_deviû * ü—‹_h—Éh_deviû ( btd_deviû * deviû ); 61  ä“_echo_d©a ( hdp_echo_d©a * ed©a ); 63  shdp_ü—‹_dc { 64 DBusMes§ge * mmsg ; 65  hdp_­¶iÿtiÚ * m­p ; 66  hdp_deviû * mdev ; 67 ušt8_t mcÚfig ; 68 ušt8_t mmd• ; 69 gušt m»f ; 70 mÿp_mdl_Ý”©iÚ_cb mcb ; 73  shdp_tmp_dc_d©a { 74 DBusMes§ge * mmsg ; 75  hdp_chªÃl * mhdp_chªn ; 76 gušt m»f ; 77 mÿp_mdl_Ý”©iÚ_cb mcb ; 80  shdp_echo_d©a { 81 gboÞ—n mecho_dÚe ; 82 gpoš‹r mbuf ; 83 gušt mtid ; 86  hdp_chªÃl * $hdp_chªÃl_»f ( hdp_chªÃl * chª ) 88 ià( chª =ð NULL ) 89  NULL ; 91 chª -> »f ++; 93 `DBG ("(%p):„ef=%d", chª , chª-> »f ); 94  chª ; 95 } } 97  $ä“_h—Éh_chªÃl ( hdp_chªÃl * chª ) 99 ià( chª -> md• =ð HDP_MDEP_ECHO ) { 100 `ä“_echo_d©a ( chª -> ed©a ); 101 chª -> ed©a = NULL ; 104 `mÿp_mdl_uÄef ( chª -> mdl ); 105 `hdp_­¶iÿtiÚ_uÄef ( chª -> ­p ); 106 `h—Éh_deviû_uÄef ( chª -> dev ); 107 `g_ä“ ( chª -> ·th ); 108 `g_ä“ ( chª ); 109 } } 111  $hdp_chªÃl_uÄef ( hdp_chªÃl * chª ) 113 ià( chª =ð NULL ) 116 chª -> »f --; 117 `DBG ("(%p):„ef=%d", chª , chª-> »f ); 119 ià( chª -> »f > 0) 122 `ä“_h—Éh_chªÃl ( chª ); 123 } } 125  $ä“_hdp_ü—‹_dc ( hdp_ü—‹_dc * dc_d©a ) 127 `dbus_mes§ge_uÄef ( dc_d©a -> msg ); 128 `hdp_­¶iÿtiÚ_uÄef ( dc_d©a -> ­p ); 129 `h—Éh_deviû_uÄef ( dc_d©a -> dev ); 131 `g_ä“ ( dc_d©a ); 132 } } 134  hdp_ü—‹_dc * $hdp_ü—‹_d©a_»f ( hdp_ü—‹_dc * dc_d©a ) 136 dc_d©a -> »f ++; 138 `DBG ("(%p):„ef=%d", dc_d©a , dc_d©a-> »f ); 140  dc_d©a ; 141 } } 143  $hdp_ü—‹_d©a_uÄef ( hdp_ü—‹_dc * dc_d©a ) 145 dc_d©a -> »f --; 147 `DBG ("(%p):„ef=%d", dc_d©a , dc_d©a-> »f ); 149 ià( dc_d©a -> »f > 0) 152 `ä“_hdp_ü—‹_dc ( dc_d©a ); 153 } } 155  $ä“_hdp_cÚn_dc ( hdp_tmp_dc_d©a * d©a ) 157 `dbus_mes§ge_uÄef ( d©a -> msg ); 158 `hdp_chªÃl_uÄef ( d©a -> hdp_chªn ); 160 `g_ä“ ( d©a ); 161 } } 163  hdp_tmp_dc_d©a * $hdp_tmp_dc_d©a_»f ( hdp_tmp_dc_d©a * d©a ) 165 d©a -> »f ++; 167 `DBG ("hdp_cÚn_d©a_»f(%p):„ef=%d", d©a , d©a-> »f ); 169  d©a ; 170 } } 172  $hdp_tmp_dc_d©a_uÄef ( hdp_tmp_dc_d©a * d©a ) 174 d©a -> »f --; 176 `DBG ("hdp_cÚn_d©a_uÄef(%p):„ef=%d", d©a , d©a-> »f ); 178 ià( d©a -> »f > 0) 181 `ä“_hdp_cÚn_dc ( d©a ); 182 } } 184  $cmp_­p_id ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 186 cÚ¡  hdp_­¶iÿtiÚ * ­p = a ; 187 cÚ¡ ušt8_t * id = b ; 189  ­p -> id - *id; 190 } } 192  $cmp_ad­‹r ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 194 cÚ¡  hdp_ad­‹r *hdp_ad­‹¸ð a ; 195 cÚ¡  btd_ad­‹r * ad­‹r = b ; 197 ià( hdp_ad­‹r -> btd_ad­‹r =ð ad­‹r ) 201 } } 203  $cmp_deviû ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 205 cÚ¡  hdp_deviû *hdp_deviû = a ; 206 cÚ¡  btd_deviû * deviû = b ; 208 ià( hdp_deviû -> dev =ð deviû ) 212 } } 214  $cmp_dev_addr ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ d¡ ) 216 cÚ¡  hdp_deviû * deviû = a ; 218  `bacmp ( `deviû_g‘_add»ss ( deviû -> dev ), d¡ ); 219 } } 221  $cmp_dev_mþ ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ mþ ) 223 cÚ¡  hdp_deviû * deviû = a ; 225 ià( mþ =ð deviû ->mcl) 228 } } 230  $cmp_chª_mdlid ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 232 cÚ¡  hdp_chªÃl * chª = a ; 233 cÚ¡ ušt16_t * mdlid = b ; 235  chª -> mdlid - *mdlid; 236 } } 238  $cmp_chª_·th ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 240 cÚ¡  hdp_chªÃl * chª = a ; 241 cÚ¡ * ·th = b ; 243  `g_ascii_¡rÿ£cmp ( chª -> ·th ,…ath); 244 } } 246  $cmp_chª_mdl ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ mdl ) 248 cÚ¡  hdp_chªÃl * chª = a ; 250 ià( chª -> mdl == mdl) 253 } } 255  ušt8_t $g‘_­p_id () 257 ušt8_t id = Ãxt_­p_id ; 260 GSLi¡ * l = `g_¦i¡_fšd_cu¡om ( ­¶iÿtiÚs , & id , cmp_­p_id ); 262 ià( l =ð NULL ) { 263 Ãxt_­p_id = ( id % HDP_MDEP_FINAL ) + 1; 264  id ; 266 id = (id % HDP_MDEP_FINAL ) + 1; 267 }  id !ð Ãxt_­p_id ); 271 } } 273  $cmp_­p ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 275 cÚ¡  hdp_­¶iÿtiÚ * ­p = a ; 277  `g_¡rcmp0 ( ­p -> ·th , b ); 278 } } 280  gboÞ—n $£t_­p_·th ( hdp_­¶iÿtiÚ * ­p ) 282 ­p -> id = `g‘_­p_id (); 283 ià( ­p -> id == 0) 284  FALSE ; 285 ­p -> ·th = `g_¡rdup_´štf ( MANAGER_PATH "/h—Éh_­p_%d",‡µ-> id ); 287  TRUE ; 288 } }; 290  $deviû_uÄef_mþ ( hdp_deviû *hdp_device) 292 ià( hdp_deviû -> mþ =ð NULL ) 295 `mÿp_þo£_mþ ( hdp_deviû -> mþ , FALSE ); 296 `mÿp_mþ_uÄef ( hdp_deviû -> mþ ); 297 hdp_deviû -> mþ = NULL ; 298 hdp_deviû -> mþ_cÚn = FALSE ; 299 } } 301  $ä“_h—Éh_deviû ( hdp_deviû * deviû ) 303 ià( deviû -> dev !ð NULL ) { 304 `btd_deviû_uÄef ( deviû -> dev ); 305 deviû -> dev = NULL ; 308 `deviû_uÄef_mþ ( deviû ); 310 `g_ä“ ( deviû ); 311 } } 313  $»move_­¶iÿtiÚ ( hdp_­¶iÿtiÚ * ­p ) 315 `DBG ("AµliÿtiÚ % d–‘ed", ­p -> ·th ); 316 `hdp_­¶iÿtiÚ_uÄef ( ­p ); 318 `g_¦i¡_fÜ—ch ( ad­‹rs , ( GFunc è upd©e_ad­‹r , NULL ); 319 } } 321  $þ›Á_discÚÃùed ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 323  hdp_­¶iÿtiÚ * ­p = u£r_d©a ; 325 `DBG ("Client disconnected fromhe bus, deleting hdp‡pplication"); 326 ­¶iÿtiÚs = `g_¦i¡_»move ×µliÿtiÚs, ­p ); 328 ­p -> dbus_w©ch” = 0; 329 `»move_­¶iÿtiÚ ( ­p ); 330 } } 332  DBusMes§ge * $mªag”_ü—‹_­¶iÿtiÚ ( DBusCÚÃùiÚ * cÚn , 333 DBusMes§ge * msg , * u£r_d©a ) 335  hdp_­¶iÿtiÚ * ­p ; 336 cÚ¡ * Çme ; 337 DBusMes§geI‹r ™” ; 338 GE¼Ü * ”r = NULL ; 340 `dbus_mes§ge_™”_š™ ( msg , & ™” ); 341 ­p = `hdp_g‘_­p_cÚfig (& ™” , & ”r ); 342 ià( ”r !ð NULL ) { 343 `g_”rÜ_ä“ ( ”r ); 344  `btd_”rÜ_šv®id_¬gs ( msg ); 347 Çme = `dbus_mes§ge_g‘_£nd” ( msg ); 348 ià( Çme =ð NULL ) { 349 `hdp_­¶iÿtiÚ_uÄef ( ­p ); 350  `g_dbus_ü—‹_”rÜ ( msg , 351 ERROR_INTERFACE ".HealthError", 355 ià(! `£t_­p_·th ( ­p )) { 356 `hdp_­¶iÿtiÚ_uÄef ( ­p ); 357  `g_dbus_ü—‹_”rÜ ( msg , 358 ERROR_INTERFACE ".HealthError", 362 ­p -> Úame = `g_¡rdup ( Çme ); 364 ­¶iÿtiÚs = `g_¦i¡_´•’d ×µliÿtiÚs, ­p ); 366 ­p -> dbus_w©ch” = 367 `g_dbus_add_discÚÃù_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), 368 Çme , þ›Á_discÚÃùed , ­p , NULL ); 369 `g_¦i¡_fÜ—ch ( ad­‹rs , ( GFunc è upd©e_ad­‹r , NULL ); 371 `DBG ("H—Éh‡µliÿtiÚ c»©ed w™h id %s", ­p -> ·th ); 373  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_OBJECT_PATH , & ­p -> ·th , 374 DBUS_TYPE_INVALID ); 375 } } 377  DBusMes§ge * $mªag”_de¡roy_­¶iÿtiÚ ( DBusCÚÃùiÚ * cÚn , 378 DBusMes§ge * msg , * u£r_d©a ) 380 cÚ¡ * ·th ; 381  hdp_­¶iÿtiÚ * ­p ; 382 GSLi¡ * l ; 384 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 385 DBUS_TYPE_INVALID )) 386  `btd_”rÜ_šv®id_¬gs ( msg ); 388 l = `g_¦i¡_fšd_cu¡om ( ­¶iÿtiÚs , ·th , cmp_­p ); 390 ià( l =ð NULL ) 391  `g_dbus_ü—‹_”rÜ ( msg , 392 ERROR_INTERFACE ".InvalidArguments", 396 ­p = l -> d©a ; 397 ­¶iÿtiÚs = `g_¦i¡_»move ×µliÿtiÚs, ­p ); 399 `»move_­¶iÿtiÚ ( ­p ); 401  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 402 } } 404  $mªag”_·th_uÄegi¡” ( gpoš‹r d©a ) 406 `g_¦i¡_fÜ—ch ( ­¶iÿtiÚs , ( GFunc è hdp_­¶iÿtiÚ_uÄef , NULL ); 408 `g_¦i¡_ä“ ( ­¶iÿtiÚs ); 409 ­¶iÿtiÚs = NULL ; 411 `g_¦i¡_fÜ—ch ( ad­‹rs , ( GFunc è upd©e_ad­‹r , NULL ); 412 } } 414 cÚ¡ GDBusM‘hodTabË gh—Éh_mªag”_m‘hods [] = { 415 { GDBUS_METHOD ("CreateApplication", 416 GDBUS_ARGS ({ "config", "a{sv}" }), 417 GDBUS_ARGS ({ "application", "o" }), 418 mªag”_ü—‹_­¶iÿtiÚ ) }, 419 { GDBUS_METHOD ("DestroyApplication", 420 GDBUS_ARGS ({ "­¶iÿtiÚ", "o" }), NULL , 421 mªag”_de¡roy_­¶iÿtiÚ ) }, 425  gboÞ—n $chªÃl_´Ý”ty_g‘_deviû (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 426 DBusMes§geI‹r * ™” , * d©a ) 428  hdp_chªÃl * chª = d©a ; 429 cÚ¡ * ·th = `deviû_g‘_·th ( chª -> dev ->dev); 431 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 433  TRUE ; 434 } } 436  gboÞ—n $chªÃl_´Ý”ty_g‘_­¶iÿtiÚ ( 437 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 438 DBusMes§geI‹r * ™” , * d©a ) 440  hdp_chªÃl * chª = d©a ; 441 cÚ¡ * ·th = chª -> ­p ->path; 443 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 445  TRUE ; 446 } } 448  gboÞ—n $chªÃl_´Ý”ty_g‘_ty³ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 449 DBusMes§geI‹r * ™” , * d©a ) 451  hdp_chªÃl * chª = d©a ; 452 cÚ¡ * ty³ ; 454 ià( chª -> cÚfig =ð HDP_RELIABLE_DC ) 455 ty³ = "reliable"; 457 ty³ = "streaming"; 459 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ty³ ); 461  TRUE ; 462 } } 464  $hdp_tmp_dc_d©a_de¡roy ( gpoš‹r d©a ) 466  hdp_tmp_dc_d©a * hdp_cÚn = d©a ; 468 `hdp_tmp_dc_d©a_uÄef ( hdp_cÚn ); 469 } } 471  $abÜt_mdl_cb ( GE¼Ü * ”r , gpoš‹r d©a ) 473 ià( ”r !ð NULL ) 474 `”rÜ ("AbÜtšgƒ¼Ü: %s", ”r -> mes§ge ); 475 } } 477  $hdp_mdl_»cÚn_cb ( mÿp_mdl * mdl , GE¼Ü * ”r , gpoš‹r d©a ) 479 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 480  hdp_tmp_dc_d©a * dc_d©a = d©a ; 481 DBusMes§ge * »¶y ; 482  fd ; 484 ià( ”r !ð NULL ) { 485  hdp_chªÃl * chª = dc_d©a -> hdp_chªn ; 486 GE¼Ü * g”r = NULL ; 488 `”rÜ ("%s", ”r -> mes§ge ); 489 »¶y = `g_dbus_ü—‹_”rÜ ( dc_d©a -> msg , 490 ERROR_INTERFACE ".HealthError", 491 "CªnÙ„ecÚÃù: %s", ”r -> mes§ge ); 492 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 496 ià(! `mÿp_mdl_abÜt ( chª -> mdl , abÜt_mdl_cb , NULL , NULL, 497 & g”r )) { 498 `”rÜ ("%s", g”r -> mes§ge ); 499 `g_”rÜ_ä“ ( g”r ); 504 fd = `mÿp_mdl_g‘_fd ( dc_d©a -> hdp_chªn -> mdl ); 505 ià( fd < 0) { 506 »¶y = `g_dbus_ü—‹_”rÜ ( dc_d©a -> msg , 507 ERROR_INTERFACE ".HealthError", 509 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 513 »¶y = `g_dbus_ü—‹_»¶y ( dc_d©a -> msg , DBUS_TYPE_UNIX_FD , 514 & fd , DBUS_TYPE_INVALID ); 515 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 517 `g_dbus_em™_sigÇl ( cÚn , `deviû_g‘_·th ( dc_d©a -> hdp_chªn -> dev ->dev), 518 HEALTH_DEVICE , "ChannelConnected", 519 DBUS_TYPE_OBJECT_PATH , & dc_d©a -> hdp_chªn -> ·th , 520 DBUS_TYPE_INVALID ); 521 } } 523  $hdp_g‘_dýsm_cb ( ušt16_t dýsm , gpoš‹r u£r_d©a , GE¼Ü * ”r ) 525  hdp_tmp_dc_d©a * hdp_cÚn = u£r_d©a ; 526  hdp_chªÃl * hdp_chªn = hdp_cÚn ->hdp_chann; 527 GE¼Ü * g”r = NULL ; 528 ušt8_t mode ; 530 ià( ”r !ð NULL ) { 531 hdp_cÚn -> `cb ( hdp_chªn -> mdl , ”r , hdp_conn); 535 ià( hdp_chªn -> cÚfig =ð HDP_RELIABLE_DC ) 536 mode = L2CAP_MODE_ERTM ; 538 mode = L2CAP_MODE_STREAMING ; 540 ià( `mÿp_cÚÃù_mdl ( hdp_chªn -> mdl , mode , dýsm , hdp_cÚn -> cb , 541 `hdp_tmp_dc_d©a_»f ( hdp_cÚn ), 542 hdp_tmp_dc_d©a_de¡roy , & g”r )) 545 hdp_cÚn -> `cb ( hdp_chªn -> mdl , ”r , hdp_conn); 546 `g_”rÜ_ä“ ( g”r ); 547 `hdp_tmp_dc_d©a_uÄef ( hdp_cÚn ); 548 } } 550  $deviû_»cÚÃù_mdl_cb ( mÿp_mdl * mdl , GE¼Ü * ”r , 551 gpoš‹r d©a ) 553 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 554  hdp_tmp_dc_d©a * dc_d©a = d©a ; 555 GE¼Ü * g”r = NULL ; 556 DBusMes§ge * »¶y ; 558 ià( ”r !ð NULL ) { 559 »¶y = `g_dbus_ü—‹_”rÜ ( dc_d©a -> msg , 560 ERROR_INTERFACE ".HealthError", 561 "CªnÙ„ecÚÃù: %s", ”r -> mes§ge ); 562 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 566 dc_d©a -> cb = hdp_mdl_»cÚn_cb ; 568 ià( `hdp_g‘_dýsm ( dc_d©a -> hdp_chªn -> dev , hdp_g‘_dýsm_cb , 569 `hdp_tmp_dc_d©a_»f ( dc_d©a ), 570 hdp_tmp_dc_d©a_de¡roy , & g”r )) 573 `”rÜ ("%s", g”r -> mes§ge ); 575 »¶y = `g_dbus_ü—‹_”rÜ ( dc_d©a -> msg , 576 ERROR_INTERFACE ".HealthError", 577 "CªnÙ„ecÚÃù: %s", g”r -> mes§ge ); 578 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 579 `hdp_tmp_dc_d©a_uÄef ( dc_d©a ); 580 `g_”rÜ_ä“ ( g”r ); 583 ià(! `mÿp_mdl_abÜt ( mdl , abÜt_mdl_cb , NULL , NULL, & g”r )) { 584 `”rÜ ("%s", g”r -> mes§ge ); 585 `g_”rÜ_ä“ ( g”r ); 587 } } 589  DBusMes§ge * $chªÃl_acquœe_cÚtšue ( hdp_tmp_dc_d©a * d©a , 590 GE¼Ü * ”r ) 592 DBusMes§ge * »¶y ; 593 GE¼Ü * g”r = NULL ; 594  fd ; 596 ià( ”r !ð NULL ) { 597  `g_dbus_ü—‹_”rÜ ( d©a -> msg , 598 ERROR_INTERFACE ".HealthError", 599 "%s", ”r -> mes§ge ); 602 fd = `mÿp_mdl_g‘_fd ( d©a -> hdp_chªn -> mdl ); 603 ià( fd >= 0) 604  `g_dbus_ü—‹_»¶y ( d©a -> msg , DBUS_TYPE_UNIX_FD , & fd , 605 DBUS_TYPE_INVALID ); 607 `hdp_tmp_dc_d©a_»f ( d©a ); 608 ià( `mÿp_»cÚÃù_mdl ( d©a -> hdp_chªn -> mdl , deviû_»cÚÃù_mdl_cb , 609 d©a , hdp_tmp_dc_d©a_de¡roy , & g”r )) 610  NULL ; 612 »¶y = `g_dbus_ü—‹_”rÜ ( d©a -> msg , ERROR_INTERFACE ".HealthError", 613 "CªnÙ„ecÚÃù: %s", g”r -> mes§ge ); 614 `g_”rÜ_ä“ ( g”r ); 615 `hdp_tmp_dc_d©a_uÄef ( d©a ); 617  »¶y ; 618 } } 620  $chªÃl_acquœe_cb ( gpoš‹r d©a , GE¼Ü * ”r ) 622 DBusMes§ge * »¶y ; 624 »¶y = `chªÃl_acquœe_cÚtšue ( d©a , ”r ); 626 ià( »¶y !ð NULL ) 627 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y ); 628 } } 630  DBusMes§ge * $chªÃl_acquœe ( DBusCÚÃùiÚ * cÚn , 631 DBusMes§ge * msg , * u£r_d©a ) 633  hdp_chªÃl * chª = u£r_d©a ; 634  hdp_tmp_dc_d©a * dc_d©a ; 635 GE¼Ü * g”r = NULL ; 636 DBusMes§ge * »¶y ; 638 dc_d©a = `g_Ãw0 ( hdp_tmp_dc_d©a , 1); 639 dc_d©a -> msg = `dbus_mes§ge_»f (msg); 640 dc_d©a -> hdp_chªn = `hdp_chªÃl_»f ( chª ); 642 ià( chª -> dev -> mþ_cÚn ) { 643 »¶y = `chªÃl_acquœe_cÚtšue ( `hdp_tmp_dc_d©a_»f ( dc_d©a ), 644 NULL ); 645 `hdp_tmp_dc_d©a_uÄef ( dc_d©a ); 646  »¶y ; 649 ià( `hdp_e¡ablish_mþ ( chª -> dev , chªÃl_acquœe_cb , 650 `hdp_tmp_dc_d©a_»f ( dc_d©a ), 651 hdp_tmp_dc_d©a_de¡roy , & g”r )) 652  NULL ; 654 »¶y = `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".HealthError", 655 "%s", g”r -> mes§ge ); 656 `hdp_tmp_dc_d©a_uÄef ( dc_d©a ); 657 `g_”rÜ_ä“ ( g”r ); 659  »¶y ; 660 } } 662  $þo£_mdl ( hdp_chªÃl * hdp_chªn ) 664  fd ; 666 fd = `mÿp_mdl_g‘_fd ( hdp_chªn -> mdl ); 667 ià( fd < 0) 670 `þo£ ( fd ); 671 } } 673  DBusMes§ge * $chªÃl_»Ëa£ ( DBusCÚÃùiÚ * cÚn , 674 DBusMes§ge * msg , * u£r_d©a ) 676  hdp_chªÃl * hdp_chªn = u£r_d©a ; 678 `þo£_mdl ( hdp_chªn ); 680  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 681 } } 683  $ä“_echo_d©a ( hdp_echo_d©a * ed©a ) 685 ià( ed©a =ð NULL ) 688 ià( ed©a -> tid > 0) 689 `g_sourû_»move ( ed©a -> tid ); 691 ià( ed©a -> buf !ð NULL ) 692 `g_ä“ ( ed©a -> buf ); 695 `g_ä“ ( ed©a ); 696 } } 698  $h—Éh_chªÃl_de¡roy (* d©a ) 700  hdp_chªÃl * hdp_chª = d©a ; 701  hdp_deviû * dev = hdp_chª ->dev; 703 `DBG ("De¡roy H—Éh ChªÃÈ%s", hdp_chª -> ·th ); 704 ià( `g_¦i¡_fšd ( dev -> chªÃls , hdp_chª è=ð NULL ) 705  ’d ; 707 dev -> chªÃls = `g_¦i¡_»move (dev->chªÃls, hdp_chª ); 709 ià( hdp_chª -> md• !ð HDP_MDEP_ECHO ) 710 `g_dbus_em™_sigÇl ( `btd_g‘_dbus_cÚÃùiÚ (), 711 `deviû_g‘_·th ( dev ->dev), 712 HEALTH_DEVICE , "ChannelDeleted", 713 DBUS_TYPE_OBJECT_PATH , & hdp_chª -> ·th , 714 DBUS_TYPE_INVALID ); 716 ià( hdp_chª =ð dev -> ä ) { 717 `hdp_chªÃl_uÄef ( dev -> ä ); 718 dev -> ä = NULL ; 721 ’d : 722 `hdp_chªÃl_uÄef ( hdp_chª ); 723 } } 725 cÚ¡ GDBusM‘hodTabË gh—Éh_chªÃls_m‘hods [] = { 726 { GDBUS_ASYNC_METHOD ("Acquire", 727 NULL , GDBUS_ARGS ({ "fd", "h" }), 728 chªÃl_acquœe ) }, 729 { GDBUS_METHOD ("R–—£", NULL , NULL, chªÃl_»Ëa£ ) }, 733 cÚ¡ GDBusPrÝ”tyTabË gh—Éh_chªÃls_´Ý”t›s [] = { 734 { "Deviû", "o", chªÃl_´Ý”ty_g‘_deviû }, 735 { "AµliÿtiÚ", "o", chªÃl_´Ý”ty_g‘_­¶iÿtiÚ }, 736 { "Ty³", "s", chªÃl_´Ý”ty_g‘_ty³ }, 740  hdp_chªÃl * $ü—‹_chªÃl ( hdp_deviû * dev , 741 ušt8_t cÚfig , 742  mÿp_mdl * mdl , 743 ušt16_t mdlid , 744  hdp_­¶iÿtiÚ * ­p , 745 GE¼Ü ** ”r ) 747  hdp_chªÃl * hdp_chªn ; 749 ià( dev =ð NULL ) { 750 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_UNSPECIFIED_ERROR , 752  NULL ; 755 hdp_chªn = `g_Ãw0 ( hdp_chªÃl , 1); 756 hdp_chªn -> cÚfig = config; 757 hdp_chªn -> dev = `h—Éh_deviû_»f (dev); 758 hdp_chªn -> mdlid = mdlid; 760 ià( mdl !ð NULL ) 761 hdp_chªn -> mdl = `mÿp_mdl_»f (mdl); 763 ià( ­p !ð NULL ) { 764 hdp_chªn -> md• = ­p -> id ; 765 hdp_chªn -> ­p = `hdp_­¶iÿtiÚ_»f (app); 767 hdp_chªn -> ed©a = `g_Ãw0 ( hdp_echo_d©a , 1); 769 hdp_chªn -> ·th = `g_¡rdup_´štf ("%s/chan%d", 770 `deviû_g‘_·th ( hdp_chªn -> dev ->dev), 771 hdp_chªn -> mdlid ); 773 dev -> chªÃls = `g_¦i¡_­³nd (dev->channels, 774 `hdp_chªÃl_»f ( hdp_chªn )); 776 ià( hdp_chªn -> md• =ð HDP_MDEP_ECHO ) 777  `hdp_chªÃl_»f ( hdp_chªn ); 779 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 780 hdp_chªn -> ·th , HEALTH_CHANNEL , 781 h—Éh_chªÃls_m‘hods , NULL , 782 h—Éh_chªÃls_´Ý”t›s , hdp_chªn , 783 h—Éh_chªÃl_de¡roy )) { 784 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_UNSPECIFIED_ERROR , 786 `h—Éh_chªÃl_de¡roy ( hdp_chªn ); 787  NULL ; 790  `hdp_chªÃl_»f ( hdp_chªn ); 791 } } 793  $»move_chªÃls ( hdp_deviû * dev ) 795  hdp_chªÃl * chª ; 796 * ·th ; 798  dev -> chªÃls !ð NULL ) { 799 chª = dev -> chªÃls -> d©a ; 801 ·th = `g_¡rdup ( chª ->path); 802 ià(! `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 803 ·th , HEALTH_CHANNEL )) 804 `h—Éh_chªÃl_de¡roy ( chª ); 805 `g_ä“ ( ·th ); 807 } } 809  $þo£_deviû_cÚ ( hdp_deviû * dev , gboÞ—n ÿche ) 811 ià( dev -> mþ =ð NULL ) 814 `mÿp_þo£_mþ ( dev -> mþ , ÿche ); 815 dev -> mþ_cÚn = FALSE ; 817 ià( ÿche ) 820 `deviû_uÄef_mþ ( dev ); 821 `»move_chªÃls ( dev ); 823 ià(! dev -> sdp_´e£Á ) { 824 cÚ¡ * ·th ; 826 ·th = `deviû_g‘_·th ( dev ->dev); 827 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 828 ·th , HEALTH_DEVICE ); 830 } } 832  $£nd_echo_d©a ( sock , cÚ¡ * buf , ušt32_t size ) 834 cÚ¡ ušt8_t * buf_b = buf ; 835 ušt32_t £Á = 0; 837  £Á < size ) { 838  n = `wr™e ( sock , buf_b + £Á , size - sent); 839 ià( n < 0) 841 £Á +ð n ; 845 } } 847  gboÞ—n $£rve_echo ( GIOChªÃl * io_chª , GIOCÚd™iÚ cÚd , 848 gpoš‹r d©a ) 850  hdp_chªÃl * chª = d©a ; 851 ušt8_t buf [ MCAP_DC_MTU ]; 852  fd , Ën ; 854 ià( cÚd & ( G_IO_ERR | G_IO_HUP | G_IO_NVAL )) { 855 `hdp_chªÃl_uÄef ( chª ); 856  FALSE ; 859 ià( chª -> ed©a -> echo_dÚe ) 860  çž ; 862 chª -> ed©a -> echo_dÚe = TRUE ; 864 fd = `g_io_chªÃl_unix_g‘_fd ( io_chª ); 866 Ën = `»ad ( fd , buf , (buf)); 867 ià( Ën < 0) 868  çž ; 870 ià( `£nd_echo_d©a ( fd , buf , Ën ) >= 0) 871  TRUE ; 873 çž : 874 `þo£_deviû_cÚ ( chª -> dev , FALSE ); 875 `hdp_chªÃl_uÄef ( chª ); 876  FALSE ; 877 } } 879  gboÞ—n $check_chªÃl_cÚf ( hdp_chªÃl * chª ) 881 GE¼Ü * ”r = NULL ; 882 GIOChªÃl * io ; 883 ušt8_t mode ; 884 ušt16_t imtu , omtu ; 885  fd ; 887 fd = `mÿp_mdl_g‘_fd ( chª -> mdl ); 888 ià( fd < 0) 889  FALSE ; 890 io = `g_io_chªÃl_unix_Ãw ( fd ); 892 ià(! `bt_io_g‘ ( io , & ”r , 893 BT_IO_OPT_MODE , & mode , 894 BT_IO_OPT_IMTU , & imtu , 895 BT_IO_OPT_OMTU , & omtu , 896 BT_IO_OPT_INVALID )) { 897 `”rÜ ("E¼Ü: %s", ”r -> mes§ge ); 898 `g_io_chªÃl_uÄef ( io ); 899 `g_”rÜ_ä“ ( ”r ); 900  FALSE ; 903 `g_io_chªÃl_uÄef ( io ); 905  chª -> cÚfig ) { 906  HDP_RELIABLE_DC : 907 ià( mode !ð L2CAP_MODE_ERTM ) 908  FALSE ; 910  HDP_STREAMING_DC : 911 ià( mode !ð L2CAP_MODE_STREAMING ) 912  FALSE ; 915 `”rÜ ("Error: Connected with unknown configuration"); 916  FALSE ; 919 `DBG ("MDL imtu %d omtu %d ChªÃÈimtu %d omtu %d", imtu , omtu , 920 chª -> imtu , chª-> omtu ); 922 ià( chª -> imtu == 0) 923 chª -> imtu = imtu; 924 ià( chª -> omtu == 0) 925 chª -> omtu = omtu; 927 ià( chª -> imtu !ðimtu || chª-> omtu != omtu) 928  FALSE ; 930  TRUE ; 931 } } 933  $hdp_mÿp_mdl_cÚÃùed_cb ( mÿp_mdl * mdl , * d©a ) 935  hdp_deviû * dev = d©a ; 936  hdp_chªÃl * chª ; 938 `DBG (""); 940 ià( dev -> ndc =ð NULL ) 943 chª = dev -> ndc ; 944 ià( chª -> mdl =ð NULL ) 945 chª -> mdl = `mÿp_mdl_»f (mdl); 947 ià( `g_¦i¡_fšd ( dev -> chªÃls , chª è=ð NULL ) 948 dev -> chªÃls = `g_¦i¡_´•’d (dev->channels, 949 `hdp_chªÃl_»f ( chª )); 951 ià(! `check_chªÃl_cÚf ( chª )) { 952 `þo£_mdl ( chª ); 953  ’d ; 956 ià( chª -> md• =ð HDP_MDEP_ECHO ) { 957 GIOChªÃl * io ; 958  fd ; 960 fd = `mÿp_mdl_g‘_fd ( chª -> mdl ); 961 ià( fd < 0) 962  ’d ; 964 chª -> ed©a -> echo_dÚe = FALSE ; 965 io = `g_io_chªÃl_unix_Ãw ( fd ); 966 `g_io_add_w©ch ( io , G_IO_ERR | G_IO_HUP | G_IO_NVAL | G_IO_IN , 967 £rve_echo , `hdp_chªÃl_»f ( chª )); 968 `g_io_chªÃl_uÄef ( io ); 969  ’d ; 972 `g_dbus_em™_sigÇl ( `btd_g‘_dbus_cÚÃùiÚ (), `deviû_g‘_·th ( dev ->dev), 973 HEALTH_DEVICE , "ChannelConnected", 974 DBUS_TYPE_OBJECT_PATH , & chª -> ·th , 975 DBUS_TYPE_INVALID ); 977 ià( dev -> ä !ð NULL ) 978  ’d ; 980 dev -> ä = `hdp_chªÃl_»f ( chª ); 982 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 983 `deviû_g‘_·th ( dev ->dev), HEALTH_DEVICE , 986 ’d : 987 `hdp_chªÃl_uÄef ( dev -> ndc ); 988 dev -> ndc = NULL ; 989 } } 991  $hdp_mÿp_mdl_þo£d_cb ( mÿp_mdl * mdl , * d©a ) 995 `DBG (""); 998 } } 1000  $hdp_mÿp_mdl_d–‘ed_cb ( mÿp_mdl * mdl , * d©a ) 1002  hdp_deviû * dev = d©a ; 1003  hdp_chªÃl * chª ; 1004 * ·th ; 1005 GSLi¡ * l ; 1007 `DBG (""); 1009 l = `g_¦i¡_fšd_cu¡om ( dev -> chªÃls , mdl , cmp_chª_mdl ); 1010 ià( l =ð NULL ) 1013 chª = l -> d©a ; 1015 ·th = `g_¡rdup ( chª ->path); 1016 ià(! `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1017 ·th , HEALTH_CHANNEL )) 1018 `h—Éh_chªÃl_de¡roy ( chª ); 1019 `g_ä“ ( ·th ); 1020 } } 1022  $hdp_mÿp_mdl_abÜ‹d_cb ( mÿp_mdl * mdl , * d©a ) 1024  hdp_deviû * dev = d©a ; 1026 `DBG (""); 1028 ià( dev -> ndc =ð NULL ) 1031 dev -> ndc -> mdl = `mÿp_mdl_»f (mdl); 1033 ià( `g_¦i¡_fšd ( dev -> chªÃls , dev-> ndc è=ð NULL ) 1034 dev -> chªÃls = `g_¦i¡_´•’d (dev->channels, 1035 `hdp_chªÃl_»f ( dev -> ndc )); 1037 ià( dev -> ndc -> md• !ð HDP_MDEP_ECHO ) 1038 `g_dbus_em™_sigÇl ( `btd_g‘_dbus_cÚÃùiÚ (), 1039 `deviû_g‘_·th ( dev ->dev), 1040 HEALTH_DEVICE , "ChannelConnected", 1041 DBUS_TYPE_OBJECT_PATH , & dev -> ndc -> ·th , 1042 DBUS_TYPE_INVALID ); 1044 `hdp_chªÃl_uÄef ( dev -> ndc ); 1045 dev -> ndc = NULL ; 1046 } } 1048  ušt8_t $hdp2l2ÿp_mode ( ušt8_t hdp_mode ) 1050  hdp_mode =ð HDP_STREAMING_DC ? L2CAP_MODE_STREAMING : 1051 L2CAP_MODE_ERTM ; 1052 } } 1054  ušt8_t $hdp_mÿp_mdl_cÚn_»q_cb ( mÿp_mþ * mþ , ušt8_t md•id , 1055 ušt16_t mdlid , ušt8_t * cÚf , * d©a ) 1057  hdp_deviû * dev = d©a ; 1058  hdp_­¶iÿtiÚ * ­p ; 1059 GE¼Ü * ”r = NULL ; 1060 GSLi¡ * l ; 1062 `DBG ("Data channel„equest"); 1064 ià( md•id =ð HDP_MDEP_ECHO ) { 1065 * cÚf ) { 1066  HDP_NO_PREFERENCE_DC : 1067 * cÚf = HDP_RELIABLE_DC ; 1069  HDP_RELIABLE_DC : 1071  HDP_STREAMING_DC : 1072  MCAP_CONFIGURATION_REJECTED ; 1077 `þo£_deviû_cÚ ( dev , FALSE ); 1078  MCAP_CONFIGURATION_REJECTED ; 1081 ià(! `mÿp_£t_d©a_chª_mode ( dev -> hdp_ad­‹r -> mi , 1082 L2CAP_MODE_ERTM , & ”r )) { 1083 `”rÜ ("E¼Ü: %s", ”r -> mes§ge ); 1084 `g_”rÜ_ä“ ( ”r ); 1085  MCAP_MDL_BUSY ; 1088 dev -> ndc = `ü—‹_chªÃl (dev, * cÚf , NULL , mdlid , NULL, NULL); 1089 ià( dev -> ndc =ð NULL ) 1090  MCAP_MDL_BUSY ; 1092  MCAP_SUCCESS ; 1095 l = `g_¦i¡_fšd_cu¡om ( ­¶iÿtiÚs , & md•id , cmp_­p_id ); 1096 ià( l =ð NULL ) 1097  MCAP_INVALID_MDEP ; 1099 ­p = l -> d©a ; 1103 * cÚf ) { 1104  HDP_NO_PREFERENCE_DC : 1105 ià( ­p -> rÞe =ð HDP_SINK ) 1106  MCAP_CONFIGURATION_REJECTED ; 1107 ià( dev -> ä && ­p -> chª_ty³_£t ) 1108 * cÚf = ­p -> chª_ty³ ; 1110 * cÚf = HDP_RELIABLE_DC ; 1112  HDP_STREAMING_DC : 1113 ià(! dev -> ä || ­p -> rÞe =ð HDP_SOURCE ) 1114  MCAP_CONFIGURATION_REJECTED ; 1116  HDP_RELIABLE_DC : 1117 ià( ­p -> rÞe =ð HDP_SOURCE ) 1118  MCAP_CONFIGURATION_REJECTED ; 1124 `þo£_deviû_cÚ ( dev , FALSE ); 1125  MCAP_CONFIGURATION_REJECTED ; 1128 l = `g_¦i¡_fšd_cu¡om ( dev -> chªÃls , & mdlid , cmp_chª_mdlid ); 1129 ià( l !ð NULL ) { 1130  hdp_chªÃl * chª = l -> d©a ; 1131 * ·th ; 1133 ·th = `g_¡rdup ( chª ->path); 1134 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1135 ·th , HEALTH_CHANNEL ); 1136 `g_ä“ ( ·th ); 1139 ià(! `mÿp_£t_d©a_chª_mode ( dev -> hdp_ad­‹r -> mi , 1140 `hdp2l2ÿp_mode (* cÚf ), & ”r )) { 1141 `”rÜ ("E¼Ü: %s", ”r -> mes§ge ); 1142 `g_”rÜ_ä“ ( ”r ); 1143  MCAP_MDL_BUSY ; 1146 dev -> ndc = `ü—‹_chªÃl (dev, * cÚf , NULL , mdlid , ­p , NULL); 1147 ià( dev -> ndc =ð NULL ) 1148  MCAP_MDL_BUSY ; 1150  MCAP_SUCCESS ; 1151 } } 1153  ušt8_t $hdp_mÿp_mdl_»cÚn_»q_cb ( mÿp_mdl * mdl , * d©a ) 1155  hdp_deviû * dev = d©a ; 1156  hdp_chªÃl * chª ; 1157 GE¼Ü * ”r = NULL ; 1158 GSLi¡ * l ; 1160 l = `g_¦i¡_fšd_cu¡om ( dev -> chªÃls , mdl , cmp_chª_mdl ); 1161 ià( l =ð NULL ) 1162  MCAP_INVALID_MDL ; 1164 chª = l -> d©a ; 1166 ià( dev -> ä =ð NULL && chª -> cÚfig !ð HDP_RELIABLE_DC && 1167 chª -> md• !ð HDP_MDEP_ECHO ) 1168  MCAP_UNSPECIFIED_ERROR ; 1170 ià(! `mÿp_£t_d©a_chª_mode ( dev -> hdp_ad­‹r -> mi , 1171 `hdp2l2ÿp_mode ( chª -> cÚfig ), & ”r )) { 1172 `”rÜ ("E¼Ü: %s", ”r -> mes§ge ); 1173 `g_”rÜ_ä“ ( ”r ); 1174  MCAP_MDL_BUSY ; 1177 dev -> ndc = `hdp_chªÃl_»f ( chª ); 1179  MCAP_SUCCESS ; 1180 } } 1182 gboÞ—n $hdp_£t_mþ_cb ( hdp_deviû * deviû , GE¼Ü ** ”r ) 1184 gboÞ—n »t ; 1186 ià( deviû -> mþ =ð NULL ) 1187  FALSE ; 1189 »t = `mÿp_mþ_£t_cb ( deviû -> mþ , deviû, ”r , 1190 MCAP_MDL_CB_CONNECTED , hdp_mÿp_mdl_cÚÃùed_cb , 1191 MCAP_MDL_CB_CLOSED , hdp_mÿp_mdl_þo£d_cb , 1192 MCAP_MDL_CB_DELETED , hdp_mÿp_mdl_d–‘ed_cb , 1193 MCAP_MDL_CB_ABORTED , hdp_mÿp_mdl_abÜ‹d_cb , 1194 MCAP_MDL_CB_REMOTE_CONN_REQ , hdp_mÿp_mdl_cÚn_»q_cb , 1195 MCAP_MDL_CB_REMOTE_RECONN_REQ , hdp_mÿp_mdl_»cÚn_»q_cb , 1196 MCAP_MDL_CB_INVALID ); 1197 ià( »t ) 1198  TRUE ; 1200 `”rÜ ("Can't set mcl callbacks, closing mcl"); 1201 `þo£_deviû_cÚ ( deviû , TRUE ); 1203  FALSE ; 1204 } } 1206  $mþ_cÚÃùed ( mÿp_mþ * mþ , gpoš‹r d©a ) 1208  hdp_deviû *hdp_device; 1209 bdaddr_t addr ; 1210 GSLi¡ * l ; 1212 `mÿp_mþ_g‘_addr ( mþ , & addr ); 1213 l = `g_¦i¡_fšd_cu¡om ( deviûs , & addr , cmp_dev_addr ); 1214 ià( l =ð NULL ) { 1215  hdp_ad­‹r *hdp_ad­‹¸ð d©a ; 1216  btd_deviû * deviû ; 1218 deviû = `btd_ad­‹r_g‘_deviû ( hdp_ad­‹r -> btd_ad­‹r , 1219 & addr , BDADDR_BREDR ); 1220 ià(! deviû ) 1222 hdp_deviû = `ü—‹_h—Éh_deviû ( deviû ); 1223 ià(! hdp_deviû ) 1225 deviûs = `g_¦i¡_­³nd (deviûs, hdp_deviû ); 1227 hdp_deviû = l -> d©a ; 1229 hdp_deviû -> mþ = `mÿp_mþ_»f (mcl); 1230 hdp_deviû -> mþ_cÚn = TRUE ; 1232 `DBG ("New mþ cÚÃùed from %s", `deviû_g‘_·th ( hdp_deviû -> dev )); 1234 `hdp_£t_mþ_cb ( hdp_deviû , NULL ); 1235 } } 1237  $mþ_»cÚÃùed ( mÿp_mþ * mþ , gpoš‹r d©a ) 1239  hdp_deviû *hdp_device; 1240 GSLi¡ * l ; 1242 l = `g_¦i¡_fšd_cu¡om ( deviûs , mþ , cmp_dev_mþ ); 1243 ià( l =ð NULL ) 1246 hdp_deviû = l -> d©a ; 1247 hdp_deviû -> mþ_cÚn = TRUE ; 1249 `DBG ("MCL„ecÚÃùed %s", `deviû_g‘_·th ( hdp_deviû -> dev )); 1251 `hdp_£t_mþ_cb ( hdp_deviû , NULL ); 1252 } } 1254  $mþ_discÚÃùed ( mÿp_mþ * mþ , gpoš‹r d©a ) 1256  hdp_deviû *hdp_device; 1257 GSLi¡ * l ; 1259 l = `g_¦i¡_fšd_cu¡om ( deviûs , mþ , cmp_dev_mþ ); 1260 ià( l =ð NULL ) 1263 hdp_deviû = l -> d©a ; 1264 hdp_deviû -> mþ_cÚn = FALSE ; 1266 `DBG ("Mþ discÚÃùed %s", `deviû_g‘_·th ( hdp_deviû -> dev )); 1267 } } 1269  $mþ_unÿched ( mÿp_mþ * mþ , gpoš‹r d©a ) 1271  hdp_deviû *hdp_device; 1272 cÚ¡ * ·th ; 1273 GSLi¡ * l ; 1275 l = `g_¦i¡_fšd_cu¡om ( deviûs , mþ , cmp_dev_mþ ); 1276 ià( l =ð NULL ) 1279 hdp_deviû = l -> d©a ; 1280 `deviû_uÄef_mþ ( hdp_deviû ); 1282 ià( hdp_deviû -> sdp_´e£Á ) 1289 ·th = `deviû_g‘_·th ( hdp_deviû -> dev ); 1290 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1291 ·th , HEALTH_DEVICE ); 1292 `DBG ("Mþ unÿched %s", ·th ); 1293 } } 1295  $check_deviûs_mþ () 1297  hdp_deviû * dev ; 1298 GSLi¡ * l , * to_d–‘e = NULL ; 1300  l = deviûs ;†;† =†-> Ãxt ) { 1301 dev = l -> d©a ; 1302 `deviû_uÄef_mþ ( dev ); 1304 ià(! dev -> sdp_´e£Á ) 1305 to_d–‘e = `g_¦i¡_­³nd Ño_d–‘e, dev ); 1307 `»move_chªÃls ( dev ); 1310  l = to_d–‘e ;†;† =†-> Ãxt ) { 1311 cÚ¡ * ·th ; 1313 ·th = `deviû_g‘_·th ( dev ->dev); 1314 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1315 ·th , HEALTH_DEVICE ); 1318 `g_¦i¡_ä“ ( to_d–‘e ); 1319 } } 1321  $»Ëa£_ad­‹r_š¡ªû ( hdp_ad­‹r *hdp_adapter) 1323 ià( hdp_ad­‹r -> mi =ð NULL ) 1326 `check_deviûs_mþ (); 1327 `mÿp_»Ëa£_š¡ªû ( hdp_ad­‹r -> mi ); 1328 `mÿp_š¡ªû_uÄef ( hdp_ad­‹r -> mi ); 1329 hdp_ad­‹r -> mi = NULL ; 1330 } } 1332  gboÞ—n $upd©e_ad­‹r ( hdp_ad­‹r *hdp_adapter) 1334 GE¼Ü * ”r = NULL ; 1335 cÚ¡ bdaddr_t * ¤c ; 1337 ià( ­¶iÿtiÚs =ð NULL ) { 1338 `»Ëa£_ad­‹r_š¡ªû ( hdp_ad­‹r ); 1339  upd©e ; 1342 ià( hdp_ad­‹r -> mi !ð NULL ) 1343  upd©e ; 1345 ¤c = `btd_ad­‹r_g‘_add»ss ( hdp_ad­‹r -> btd_ad­‹r ); 1347 hdp_ad­‹r -> mi = `mÿp_ü—‹_š¡ªû ( ¤c , 1348 BT_IO_SEC_MEDIUM , 0, 0, 1349 mþ_cÚÃùed , mþ_»cÚÃùed , 1350 mþ_discÚÃùed , mþ_unÿched , 1351 NULL , 1352 hdp_ad­‹r , & ”r ); 1353 ià( hdp_ad­‹r -> mi =ð NULL ) { 1354 `”rÜ ("E¼Ü c»©šghMCAP in¡ªû: %s", ”r -> mes§ge ); 1355 `g_”rÜ_ä“ ( ”r ); 1356  FALSE ; 1359 hdp_ad­‹r -> cýsm = `mÿp_g‘_ù¾_psm (hdp_ad­‹r-> mi , & ”r ); 1360 ià( ”r !ð NULL ) { 1361 `”rÜ ("E¼Ü g‘tšg MCAP cÚŒÞ PSM: %s", ”r -> mes§ge ); 1362  çž ; 1365 hdp_ad­‹r -> dýsm = `mÿp_g‘_d©a_psm (hdp_ad­‹r-> mi , & ”r ); 1366 ià( ”r !ð NULL ) { 1367 `”rÜ ("E¼Ü g‘tšg MCAP d©¨PSM: %s", ”r -> mes§ge ); 1368  çž ; 1371 upd©e : 1372 ià( `hdp_upd©e_sdp_»cÜd ( hdp_ad­‹r , ­¶iÿtiÚs )) 1373  TRUE ; 1374 `”rÜ ("Error updatinghe SDP„ecord"); 1376 çž : 1377 `»Ëa£_ad­‹r_š¡ªû ( hdp_ad­‹r ); 1378 ià( ”r !ð NULL ) 1379 `g_”rÜ_ä“ ( ”r ); 1381  FALSE ; 1382 } } 1384  $hdp_ad­‹r_»gi¡” ( btd_ad­‹r * ad­‹r ) 1386  hdp_ad­‹r *hdp_adapter; 1388 hdp_ad­‹r = `g_Ãw0 (hdp_adapter, 1); 1389 hdp_ad­‹r -> btd_ad­‹r = `btd_ad­‹r_»f ( ad­‹r ); 1391 if(! `upd©e_ad­‹r ( hdp_ad­‹r )) 1392  çž ; 1394 ad­‹rs = `g_¦i¡_­³nd ×d­‹rs, hdp_ad­‹r ); 1398 çž : 1399 `btd_ad­‹r_uÄef ( hdp_ad­‹r -> btd_ad­‹r ); 1400 `g_ä“ ( hdp_ad­‹r ); 1402 } } 1404  $hdp_ad­‹r_uÄegi¡” ( btd_ad­‹r * ad­‹r ) 1406  hdp_ad­‹r *hdp_adapter; 1407 GSLi¡ * l ; 1409 l = `g_¦i¡_fšd_cu¡om ( ad­‹rs , ad­‹r , cmp_ad­‹r ); 1411 ià( l =ð NULL ) 1414 hdp_ad­‹r = l -> d©a ; 1415 ad­‹rs = `g_¦i¡_»move ×d­‹rs, hdp_ad­‹r ); 1416 ià( hdp_ad­‹r -> sdp_hªdËr > 0) 1417 `ad­‹r_£rviû_»move ( ad­‹r , hdp_ad­‹r -> sdp_hªdËr ); 1418 `»Ëa£_ad­‹r_š¡ªû ( hdp_ad­‹r ); 1419 `btd_ad­‹r_uÄef ( hdp_ad­‹r -> btd_ad­‹r ); 1420 `g_ä“ ( hdp_ad­‹r ); 1421 } } 1423  $d–‘e_echo_chªÃl_cb ( GE¼Ü * ”r , gpoš‹r chª ) 1425 ià( ”r !ð NULL &&ƒ¼-> code !ð MCAP_INVALID_MDL ) { 1427 `”rÜ ("E¼Ü d–‘šgƒchØchªÃl: %s", ”r -> mes§ge ); 1431 `h—Éh_chªÃl_de¡roy ( chª ); 1432 } } 1434  $d–‘e_echo_chªÃl ( hdp_chªÃl * chª ) 1436 GE¼Ü * ”r = NULL ; 1438 ià(! chª -> dev -> mþ_cÚn ) { 1439 `”rÜ ("Echo channel cannot be deleted: mcl closed"); 1443 ià( `mÿp_d–‘e_mdl ( chª -> mdl , d–‘e_echo_chªÃl_cb , 1444 `hdp_chªÃl_»f ( chª ), 1445 ( GDe¡royNÙify è hdp_chªÃl_uÄef , & ”r )) 1448 `hdp_chªÃl_uÄef ( chª ); 1449 `”rÜ ("E¼Ü d–‘šghechØchªÃl: %s", ”r -> mes§ge ); 1450 `g_”rÜ_ä“ ( ”r ); 1453 } } 1455  $abÜt_echo_chªÃl_cb ( GE¼Ü * ”r , gpoš‹r d©a ) 1457  hdp_chªÃl * chª = d©a ; 1459 ià( ”r !ð NULL &&ƒ¼-> code !ð MCAP_ERROR_INVALID_OPERATION ) { 1460 `”rÜ ("AbÜtšgƒ¼Ü: %s", ”r -> mes§ge ); 1461 ià( ”r -> code =ð MCAP_INVALID_MDL ) { 1471 `d–‘e_echo_chªÃl ( chª ); 1472 } } 1474  $de¡roy_ü—‹_dc_d©a ( gpoš‹r d©a ) 1476  hdp_ü—‹_dc * dc_d©a = d©a ; 1478 `hdp_ü—‹_d©a_uÄef ( dc_d©a ); 1479 } } 1481 * $g’”©e_echo_·ck‘ () 1483 ušt8_t * buf ; 1484  i ; 1486 buf = `g_m®loc ( HDP_ECHO_LEN ); 1487 `¤ªd ( `time ( NULL )); 1489  i = 0; i < HDP_ECHO_LEN ; i++) 1490 buf [ i ] = `¿nd (è% UINT8_MAX ; 1492  buf ; 1493 } } 1495  gboÞ—n $check_echo ( GIOChªÃl * io_chª , GIOCÚd™iÚ cÚd , 1496 gpoš‹r d©a ) 1498  hdp_tmp_dc_d©a * hdp_cÚn = d©a ; 1499  hdp_echo_d©a * ed©a = hdp_cÚn -> hdp_chªn ->edata; 1500  hdp_chªÃl * chª = hdp_cÚn -> hdp_chªn ; 1501 ušt8_t buf [ MCAP_DC_MTU ]; 1502 DBusMes§ge * »¶y ; 1503 gboÞ—n v®ue ; 1504  fd , Ën ; 1506 ià( cÚd & ( G_IO_ERR | G_IO_HUP | G_IO_NVAL )) { 1507 v®ue = FALSE ; 1508  ’d ; 1511 fd = `g_io_chªÃl_unix_g‘_fd ( io_chª ); 1513 Ën = `»ad ( fd , buf , (buf)); 1514 ià( Ën !ð HDP_ECHO_LEN ) { 1515 v®ue = FALSE ; 1516  ’d ; 1519 v®ue = ( `memcmp ( buf , ed©a ->buf, Ën ) == 0); 1521 ’d : 1522 »¶y = `g_dbus_ü—‹_»¶y ( hdp_cÚn -> msg , DBUS_TYPE_BOOLEAN , & v®ue , 1523 DBUS_TYPE_INVALID ); 1524 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y ); 1525 `g_sourû_»move ( ed©a -> tid ); 1526 ed©a -> tid = 0; 1527 `g_ä“ ( ed©a -> buf ); 1528 ed©a -> buf = NULL ; 1530 ià(! v®ue ) 1531 `þo£_deviû_cÚ ( chª -> dev , FALSE ); 1533 `d–‘e_echo_chªÃl ( chª ); 1534 `hdp_tmp_dc_d©a_uÄef ( hdp_cÚn ); 1536  FALSE ; 1537 } } 1539  gboÞ—n $echo_timeout ( gpoš‹r d©a ) 1541  hdp_chªÃl * chª = d©a ; 1542 GIOChªÃl * io ; 1543  fd ; 1545 `”rÜ ("Error: Echo„equestimeout"); 1546 chª -> ed©a -> tid = 0; 1548 fd = `mÿp_mdl_g‘_fd ( chª -> mdl ); 1549 ià( fd < 0) 1550  FALSE ; 1552 io = `g_io_chªÃl_unix_Ãw ( fd ); 1553 `g_io_chªÃl_shutdown ( io , TRUE , NULL ); 1555  FALSE ; 1556 } } 1558  $hdp_echo_cÚÃù_cb ( mÿp_mdl * mdl , GE¼Ü * ”r , 1559 gpoš‹r d©a ) 1561 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 1562  hdp_tmp_dc_d©a * hdp_cÚn = d©a ; 1563  hdp_echo_d©a * ed©a ; 1564 GE¼Ü * g”r = NULL ; 1565 DBusMes§ge * »¶y ; 1566 GIOChªÃl * io ; 1567  fd ; 1569 ià( ”r !ð NULL ) { 1570 »¶y = `g_dbus_ü—‹_”rÜ ( hdp_cÚn -> msg , 1571 ERROR_INTERFACE ".HealthError", 1572 "%s", ”r -> mes§ge ); 1573 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1577 ià(! `mÿp_mdl_abÜt ( hdp_cÚn -> hdp_chªn -> mdl , 1578 abÜt_echo_chªÃl_cb , 1579 `hdp_chªÃl_»f ( hdp_cÚn -> hdp_chªn ), 1580 ( GDe¡royNÙify è hdp_chªÃl_uÄef , 1581 & g”r )) { 1582 `”rÜ ("%s", g”r -> mes§ge ); 1583 `g_”rÜ_ä“ ( g”r ); 1584 `hdp_chªÃl_uÄef ( hdp_cÚn -> hdp_chªn ); 1589 fd = `mÿp_mdl_g‘_fd ( hdp_cÚn -> hdp_chªn -> mdl ); 1590 ià( fd < 0) { 1591 »¶y = `g_dbus_ü—‹_”rÜ ( hdp_cÚn -> msg , 1592 ERROR_INTERFACE ".HealthError", 1594 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1595 `d–‘e_echo_chªÃl ( hdp_cÚn -> hdp_chªn ); 1599 ed©a = hdp_cÚn -> hdp_chªn ->edata; 1600 ed©a -> buf = `g’”©e_echo_·ck‘ (); 1601 `£nd_echo_d©a ( fd , ed©a -> buf , HDP_ECHO_LEN ); 1603 io = `g_io_chªÃl_unix_Ãw ( fd ); 1604 `g_io_add_w©ch ( io , G_IO_ERR | G_IO_HUP | G_IO_NVAL | G_IO_IN , 1605 check_echo , `hdp_tmp_dc_d©a_»f ( hdp_cÚn )); 1607 ed©a -> tid = `g_timeout_add_£cÚds_fuÎ ( G_PRIORITY_DEFAULT , 1608 ECHO_TIMEOUT , echo_timeout , 1609 `hdp_chªÃl_»f ( hdp_cÚn -> hdp_chªn ), 1610 ( GDe¡royNÙify è hdp_chªÃl_uÄef ); 1612 `g_io_chªÃl_uÄef ( io ); 1613 } } 1615  $d–‘e_mdl_cb ( GE¼Ü * ”r , gpoš‹r d©a ) 1617 ià( ”r !ð NULL ) 1618 `”rÜ ("D–‘šgƒ¼Ü: %s", ”r -> mes§ge ); 1619 } } 1621  $abÜt_ªd_d–_mdl_cb ( GE¼Ü * ”r , gpoš‹r d©a ) 1623  mÿp_mdl * mdl = d©a ; 1624 GE¼Ü * g”r = NULL ; 1626 ià( ”r !ð NULL ) { 1627 `”rÜ ("%s", ”r -> mes§ge ); 1628 ià( ”r -> code =ð MCAP_INVALID_MDL ) { 1635 ià(! `mÿp_d–‘e_mdl ( mdl , d–‘e_mdl_cb , NULL , NULL, & g”r )) { 1636 `”rÜ ("%s", g”r -> mes§ge ); 1637 `g_”rÜ_ä“ ( g”r ); 1639 } } 1641  $abÜt_mdl_cÚÃùiÚ_cb ( GE¼Ü * ”r , gpoš‹r d©a ) 1643  hdp_tmp_dc_d©a * hdp_cÚn = d©a ; 1644  hdp_chªÃl * hdp_chªn = hdp_cÚn ->hdp_chann; 1646 ià( ”r !ð NULL ) 1647 `”rÜ ("AbÜtšgƒ¼Ü: %s", ”r -> mes§ge ); 1651 ià( hdp_chªn -> md• !ð HDP_MDEP_ECHO ) 1652 `g_dbus_em™_sigÇl ( `btd_g‘_dbus_cÚÃùiÚ (), 1653 `deviû_g‘_·th ( hdp_chªn -> dev ->dev), 1654 HEALTH_DEVICE , "ChannelConnected", 1655 DBUS_TYPE_OBJECT_PATH , & hdp_chªn -> ·th , 1656 DBUS_TYPE_INVALID ); 1657 } } 1659  $hdp_mdl_cÚn_cb ( mÿp_mdl * mdl , GE¼Ü * ”r , gpoš‹r d©a ) 1661 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 1662  hdp_tmp_dc_d©a * hdp_cÚn = d©a ; 1663  hdp_chªÃl * hdp_chªn = hdp_cÚn ->hdp_chann; 1664  hdp_deviû * dev = hdp_chªn ->dev; 1665 DBusMes§ge * »¶y ; 1666 GE¼Ü * g”r = NULL ; 1668 ià( ”r !ð NULL ) { 1669 `”rÜ ("%s", ”r -> mes§ge ); 1670 »¶y = `g_dbus_ü—‹_»¶y ( hdp_cÚn -> msg , 1671 DBUS_TYPE_OBJECT_PATH , & hdp_chªn -> ·th , 1672 DBUS_TYPE_INVALID ); 1673 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1677 ià(! `mÿp_mdl_abÜt ( hdp_chªn -> mdl , abÜt_mdl_cÚÃùiÚ_cb , 1678 `hdp_tmp_dc_d©a_»f ( hdp_cÚn ), 1679 hdp_tmp_dc_d©a_de¡roy , & g”r )) { 1680 `hdp_tmp_dc_d©a_uÄef ( hdp_cÚn ); 1681 `”rÜ ("%s", g”r -> mes§ge ); 1682 `g_”rÜ_ä“ ( g”r ); 1687 »¶y = `g_dbus_ü—‹_»¶y ( hdp_cÚn -> msg , 1688 DBUS_TYPE_OBJECT_PATH , & hdp_chªn -> ·th , 1689 DBUS_TYPE_INVALID ); 1690 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1692 `g_dbus_em™_sigÇl ( cÚn , `deviû_g‘_·th ( hdp_chªn -> dev ->dev), 1693 HEALTH_DEVICE , "ChannelConnected", 1694 DBUS_TYPE_OBJECT_PATH , & hdp_chªn -> ·th , 1695 DBUS_TYPE_INVALID ); 1697 ià(! `check_chªÃl_cÚf ( hdp_chªn )) { 1698 `þo£_mdl ( hdp_chªn ); 1702 ià( dev -> ä !ð NULL ) 1705 dev -> ä = `hdp_chªÃl_»f ( hdp_chªn ); 1707 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 1708 `deviû_g‘_·th ( dev ->dev), HEALTH_DEVICE , 1710 } } 1712  $deviû_ü—‹_mdl_cb ( mÿp_mdl * mdl , ušt8_t cÚf , 1713 GE¼Ü * ”r , gpoš‹r d©a ) 1715 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 1716  hdp_ü—‹_dc * u£r_d©a = d©a ; 1717  hdp_tmp_dc_d©a * hdp_cÚn ; 1718  hdp_chªÃl * hdp_chª ; 1719 GE¼Ü * g”r = NULL ; 1720 DBusMes§ge * »¶y ; 1722 ià( ”r !ð NULL ) { 1723 »¶y = `g_dbus_ü—‹_”rÜ ( u£r_d©a -> msg , 1724 ERROR_INTERFACE ".HealthError", 1725 "%s", ”r -> mes§ge ); 1726 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1730 ià( u£r_d©a -> md• !ð HDP_MDEP_ECHO && 1731 u£r_d©a -> cÚfig =ð HDP_NO_PREFERENCE_DC ) { 1732 ià( u£r_d©a -> dev -> ä =ð NULL && cÚf !ð HDP_RELIABLE_DC ) { 1733 `g_£t_”rÜ (& g”r , HDP_ERROR , HDP_CONNECTION_ERROR , 1736  çž ; 1737 } ià( cÚf =ð HDP_NO_PREFERENCE_DC || 1738 cÚf > HDP_STREAMING_DC ) { 1739 `g_£t_”rÜ (& g”r , HDP_ERROR , HDP_CONNECTION_ERROR , 1742  çž ; 1746 hdp_chª = `ü—‹_chªÃl ( u£r_d©a -> dev , cÚf , mdl , 1747 `mÿp_mdl_g‘_mdlid ( mdl ), 1748 u£r_d©a -> ­p , & g”r ); 1749 ià( hdp_chª =ð NULL ) 1750  çž ; 1752 hdp_cÚn = `g_Ãw0 ( hdp_tmp_dc_d©a , 1); 1753 hdp_cÚn -> msg = `dbus_mes§ge_»f ( u£r_d©a ->msg); 1754 hdp_cÚn -> hdp_chªn = hdp_chª ; 1755 hdp_cÚn -> cb = u£r_d©a ->cb; 1756 hdp_chª -> md• = u£r_d©a ->mdep; 1758 ià( `hdp_g‘_dýsm ( hdp_chª -> dev , hdp_g‘_dýsm_cb , 1759 `hdp_tmp_dc_d©a_»f ( hdp_cÚn ), 1760 hdp_tmp_dc_d©a_de¡roy , & g”r )) 1763 `”rÜ ("%s", g”r -> mes§ge ); 1764 `g_”rÜ_ä“ ( g”r ); 1766 »¶y = `g_dbus_ü—‹_»¶y ( hdp_cÚn -> msg , 1767 DBUS_TYPE_OBJECT_PATH , & hdp_chª -> ·th , 1768 DBUS_TYPE_INVALID ); 1769 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1770 `hdp_tmp_dc_d©a_uÄef ( hdp_cÚn ); 1773 ià(! `mÿp_mdl_abÜt ( hdp_chª -> mdl , abÜt_mdl_cÚÃùiÚ_cb , 1774 `hdp_tmp_dc_d©a_»f ( hdp_cÚn ), 1775 hdp_tmp_dc_d©a_de¡roy , & g”r )) { 1776 `hdp_tmp_dc_d©a_uÄef ( hdp_cÚn ); 1777 `”rÜ ("%s", g”r -> mes§ge ); 1778 `g_”rÜ_ä“ ( g”r ); 1783 çž : 1784 »¶y = `g_dbus_ü—‹_”rÜ ( u£r_d©a -> msg , 1785 ERROR_INTERFACE ".HealthError", 1786 "%s", g”r -> mes§ge ); 1787 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1788 `g_”rÜ_ä“ ( g”r ); 1793 ià(! `mÿp_mdl_abÜt ( mdl , abÜt_ªd_d–_mdl_cb , `mÿp_mdl_»f (mdl), 1794 ( GDe¡royNÙify è mÿp_mdl_uÄef , & g”r )) { 1795 `”rÜ ("%s", g”r -> mes§ge ); 1796 `g_”rÜ_ä“ ( g”r ); 1797 `mÿp_mdl_uÄef ( mdl ); 1799 } } 1801  $deviû_ü—‹_dc_cb ( gpoš‹r u£r_d©a , GE¼Ü * ”r ) 1803 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 1804  hdp_ü—‹_dc * d©a = u£r_d©a ; 1805 DBusMes§ge * »¶y ; 1806 GE¼Ü * g”r = NULL ; 1808 ià( ”r !ð NULL ) { 1809 »¶y = `g_dbus_ü—‹_”rÜ ( d©a -> msg , 1810 ERROR_INTERFACE ".HealthError", 1811 "%s", ”r -> mes§ge ); 1812 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1816 ià( d©a -> dev -> mþ =ð NULL ) { 1817 `g_£t_”rÜ (& g”r , HDP_ERROR , HDP_CONNECTION_ERROR , 1819  çž ; 1822 `hdp_ü—‹_d©a_»f ( d©a ); 1824 ià( `mÿp_ü—‹_mdl ( d©a -> dev -> mþ , d©a-> md• , d©a-> cÚfig , 1825 deviû_ü—‹_mdl_cb , d©a , 1826 de¡roy_ü—‹_dc_d©a , & g”r )) 1828 `hdp_ü—‹_d©a_uÄef ( d©a ); 1830 çž : 1831 »¶y = `g_dbus_ü—‹_”rÜ ( d©a -> msg , ERROR_INTERFACE ".HealthError", 1832 "%s", g”r -> mes§ge ); 1833 `g_”rÜ_ä“ ( g”r ); 1834 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1835 } } 1837  DBusMes§ge * $deviû_echo ( DBusCÚÃùiÚ * cÚn , 1838 DBusMes§ge * msg , * u£r_d©a ) 1840  hdp_deviû * deviû = u£r_d©a ; 1841  hdp_ü—‹_dc * d©a ; 1842 DBusMes§ge * »¶y ; 1843 GE¼Ü * ”r = NULL ; 1845 d©a = `g_Ãw0 ( hdp_ü—‹_dc , 1); 1846 d©a -> dev = `h—Éh_deviû_»f ( deviû ); 1847 d©a -> md• = HDP_MDEP_ECHO ; 1848 d©a -> cÚfig = HDP_RELIABLE_DC ; 1849 d©a -> msg = `dbus_mes§ge_»f (msg); 1850 d©a -> cb = hdp_echo_cÚÃù_cb ; 1851 `hdp_ü—‹_d©a_»f ( d©a ); 1853 ià( deviû -> mþ_cÚn && deviû-> mþ ) { 1854 ià( `mÿp_ü—‹_mdl ( deviû -> mþ , d©a -> md• , d©a-> cÚfig , 1855 deviû_ü—‹_mdl_cb , d©a , 1856 de¡roy_ü—‹_dc_d©a , & ”r )) 1857  NULL ; 1858  çž ; 1861 ià( `hdp_e¡ablish_mþ ( d©a -> dev , deviû_ü—‹_dc_cb , 1862 d©a , de¡roy_ü—‹_dc_d©a , & ”r )) 1863  NULL ; 1865 çž : 1866 »¶y = `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".HealthError", 1867 "%s", ”r -> mes§ge ); 1868 `g_”rÜ_ä“ ( ”r ); 1869 `hdp_ü—‹_d©a_uÄef ( d©a ); 1870  »¶y ; 1871 } } 1873  $deviû_g‘_md•_cb ( ušt8_t md• , gpoš‹r d©a , GE¼Ü * ”r ) 1875 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 1876  hdp_ü—‹_dc * dc_d©a , * u£r_d©a = d©a ; 1877 DBusMes§ge * »¶y ; 1878 GE¼Ü * g”r = NULL ; 1880 ià( ”r !ð NULL ) { 1881 »¶y = `g_dbus_ü—‹_”rÜ ( u£r_d©a -> msg , 1882 ERROR_INTERFACE ".HealthError", 1883 "%s", ”r -> mes§ge ); 1884 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1888 dc_d©a = `hdp_ü—‹_d©a_»f ( u£r_d©a ); 1889 dc_d©a -> md• = mdep; 1891 ià( u£r_d©a -> dev -> mþ_cÚn ) { 1892 `deviû_ü—‹_dc_cb ( dc_d©a , NULL ); 1893 `hdp_ü—‹_d©a_uÄef ( dc_d©a ); 1897 ià( `hdp_e¡ablish_mþ ( dc_d©a -> dev , deviû_ü—‹_dc_cb , 1898 dc_d©a , de¡roy_ü—‹_dc_d©a , & g”r )) 1901 »¶y = `g_dbus_ü—‹_”rÜ ( u£r_d©a -> msg , 1902 ERROR_INTERFACE ".HealthError", 1903 "%s", g”r -> mes§ge ); 1904 `hdp_ü—‹_d©a_uÄef ( dc_d©a ); 1905 `g_”rÜ_ä“ ( g”r ); 1906 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1907 } } 1909  DBusMes§ge * $deviû_ü—‹_chªÃl ( DBusCÚÃùiÚ * cÚn , 1910 DBusMes§ge * msg , * u£r_d©a ) 1912  hdp_deviû * deviû = u£r_d©a ; 1913  hdp_­¶iÿtiÚ * ­p ; 1914  hdp_ü—‹_dc * d©a ; 1915 * ­p_·th , * cÚf ; 1916 DBusMes§ge * »¶y ; 1917 GE¼Ü * ”r = NULL ; 1918 ušt8_t cÚfig ; 1919 GSLi¡ * l ; 1921 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ­p_·th , 1922 DBUS_TYPE_STRING , & cÚf , 1923 DBUS_TYPE_INVALID )) 1924  `btd_”rÜ_šv®id_¬gs ( msg ); 1926 l = `g_¦i¡_fšd_cu¡om ( ­¶iÿtiÚs , ­p_·th , cmp_­p ); 1927 ià( l =ð NULL ) 1928  `btd_”rÜ_šv®id_¬gs ( msg ); 1930 ­p = l -> d©a ; 1932 ià( `g_ascii_¡rÿ£cmp ("»lŸbË", cÚf ) == 0) 1933 cÚfig = HDP_RELIABLE_DC ; 1934 ià( `g_ascii_¡rÿ£cmp ("¡»amšg", cÚf ) == 0) 1935 cÚfig = HDP_STREAMING_DC ; 1936 ià( `g_ascii_¡rÿ£cmp ("ªy", cÚf ) == 0) 1937 cÚfig = HDP_NO_PREFERENCE_DC ; 1939  `btd_”rÜ_šv®id_¬gs ( msg ); 1941 ià( ­p -> rÞe =ð HDP_SINK && cÚfig !ð HDP_NO_PREFERENCE_DC ) 1942  `btd_”rÜ_šv®id_¬gs ( msg ); 1944 ià( ­p -> rÞe =ð HDP_SOURCE && cÚfig =ð HDP_NO_PREFERENCE_DC ) 1945  `btd_”rÜ_šv®id_¬gs ( msg ); 1947 ià(! deviû -> ä && cÚfig =ð HDP_STREAMING_DC ) 1948  `btd_”rÜ_šv®id_¬gs ( msg ); 1950 d©a = `g_Ãw0 ( hdp_ü—‹_dc , 1); 1951 d©a -> dev = `h—Éh_deviû_»f ( deviû ); 1952 d©a -> cÚfig = config; 1953 d©a -> ­p = `hdp_­¶iÿtiÚ_»f (app); 1954 d©a -> msg = `dbus_mes§ge_»f (msg); 1955 d©a -> cb = hdp_mdl_cÚn_cb ; 1957 ià( `hdp_g‘_md• ( deviû , l -> d©a , deviû_g‘_md•_cb , 1958 `hdp_ü—‹_d©a_»f ( d©a ), 1959 de¡roy_ü—‹_dc_d©a , & ”r )) 1960  NULL ; 1962 »¶y = `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".HealthError", 1963 "%s", ”r -> mes§ge ); 1964 `g_”rÜ_ä“ ( ”r ); 1965 `hdp_ü—‹_d©a_uÄef ( d©a ); 1966  »¶y ; 1967 } } 1969  $hdp_mdl_d–‘e_cb ( GE¼Ü * ”r , gpoš‹r d©a ) 1971 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 1972  hdp_tmp_dc_d©a * d–_d©a = d©a ; 1973 DBusMes§ge * »¶y ; 1974 * ·th ; 1976 ià( ”r !ð NULL &&ƒ¼-> code !ð MCAP_INVALID_MDL ) { 1977 »¶y = `g_dbus_ü—‹_”rÜ ( d–_d©a -> msg , 1978 ERROR_INTERFACE ".HealthError", 1979 "%s", ”r -> mes§ge ); 1980 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1984 ·th = `g_¡rdup ( d–_d©a -> hdp_chªn ->path); 1985 `g_dbus_uÄegi¡”_š‹rçû ( cÚn , ·th , HEALTH_CHANNEL ); 1986 `g_ä“ ( ·th ); 1988 »¶y = `g_dbus_ü—‹_»¶y ( d–_d©a -> msg , DBUS_TYPE_INVALID ); 1989 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 1990 } } 1992  $hdp_cÚtšue_d–_cb ( gpoš‹r u£r_d©a , GE¼Ü * ”r ) 1994 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 1995  hdp_tmp_dc_d©a * d–_d©a = u£r_d©a ; 1996 GE¼Ü * g”r = NULL ; 1997 DBusMes§ge * »¶y ; 1999 ià( ”r !ð NULL ) { 2000 »¶y = `g_dbus_ü—‹_”rÜ ( d–_d©a -> msg , 2001 ERROR_INTERFACE ".HealthError", 2002 "%s", ”r -> mes§ge ); 2003 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 2007 ià( `mÿp_d–‘e_mdl ( d–_d©a -> hdp_chªn -> mdl , hdp_mdl_d–‘e_cb , 2008 `hdp_tmp_dc_d©a_»f ( d–_d©a ), 2009 hdp_tmp_dc_d©a_de¡roy , & g”r )) 2012 »¶y = `g_dbus_ü—‹_”rÜ ( d–_d©a -> msg , 2013 ERROR_INTERFACE ".HealthError", 2014 "%s", g”r -> mes§ge ); 2015 `hdp_tmp_dc_d©a_uÄef ( d–_d©a ); 2016 `g_”rÜ_ä“ ( g”r ); 2017 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 2018 } } 2020  DBusMes§ge * $deviû_de¡roy_chªÃl ( DBusCÚÃùiÚ * cÚn , 2021 DBusMes§ge * msg , * u£r_d©a ) 2023  hdp_deviû * deviû = u£r_d©a ; 2024  hdp_tmp_dc_d©a * d–_d©a ; 2025  hdp_chªÃl * hdp_chª ; 2026 DBusMes§ge * »¶y ; 2027 GE¼Ü * ”r = NULL ; 2028 * ·th ; 2029 GSLi¡ * l ; 2031 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 2032 DBUS_TYPE_INVALID )){ 2033  `btd_”rÜ_šv®id_¬gs ( msg ); 2036 l = `g_¦i¡_fšd_cu¡om ( deviû -> chªÃls , ·th , cmp_chª_·th ); 2037 ià( l =ð NULL ) 2038  `btd_”rÜ_šv®id_¬gs ( msg ); 2040 hdp_chª = l -> d©a ; 2041 d–_d©a = `g_Ãw0 ( hdp_tmp_dc_d©a , 1); 2042 d–_d©a -> msg = `dbus_mes§ge_»f (msg); 2043 d–_d©a -> hdp_chªn = `hdp_chªÃl_»f ( hdp_chª ); 2045 ià( deviû -> mþ_cÚn ) { 2046 ià( `mÿp_d–‘e_mdl ( hdp_chª -> mdl , hdp_mdl_d–‘e_cb , 2047 `hdp_tmp_dc_d©a_»f ( d–_d©a ), 2048 hdp_tmp_dc_d©a_de¡roy , & ”r )) 2049  NULL ; 2050  çž ; 2053 ià( `hdp_e¡ablish_mþ ( deviû , hdp_cÚtšue_d–_cb , 2054 `hdp_tmp_dc_d©a_»f ( d–_d©a ), 2055 hdp_tmp_dc_d©a_de¡roy , & ”r )) 2056  NULL ; 2058 çž : 2059 »¶y = `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".HealthError", 2060 "%s", ”r -> mes§ge ); 2061 `hdp_tmp_dc_d©a_uÄef ( d–_d©a ); 2062 `g_”rÜ_ä“ ( ”r ); 2063  »¶y ; 2064 } } 2066  gboÞ—n $dev_´Ý”ty_exi¡s_maš_chªÃl ( 2067 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 2069  hdp_deviû * deviû = d©a ; 2070  deviû -> ä !ð NULL ; 2071 } } 2073  gboÞ—n $dev_´Ý”ty_g‘_maš_chªÃl ( 2074 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 2075 DBusMes§geI‹r * ™” , * d©a ) 2077  hdp_deviû * deviû = d©a ; 2079 ià( deviû -> ä =ð NULL ) 2080  FALSE ; 2082 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , 2083 & deviû -> ä -> ·th ); 2085  TRUE ; 2086 } } 2088  $h—Éh_deviû_de¡roy (* d©a ) 2090  hdp_deviû * deviû = d©a ; 2092 `DBG ("UÄegi¡”ed iÁ”çû % Ú…©h %s", HEALTH_DEVICE , 2093 `deviû_g‘_·th ( deviû -> dev )); 2095 `»move_chªÃls ( deviû ); 2096 ià( deviû -> ndc !ð NULL ) { 2097 `hdp_chªÃl_uÄef ( deviû -> ndc ); 2098 deviû -> ndc = NULL ; 2101 deviûs = `g_¦i¡_»move (deviûs, deviû ); 2102 `h—Éh_deviû_uÄef ( deviû ); 2103 } } 2105 cÚ¡ GDBusM‘hodTabË gh—Éh_deviû_m‘hods [] = { 2106 { GDBUS_ASYNC_METHOD ("Echo", 2107 NULL , GDBUS_ARGS ({ "v®ue", "b" }), deviû_echo ) }, 2108 { GDBUS_ASYNC_METHOD ("CreateChannel", 2109 GDBUS_ARGS ({ "application", "o" }, 2111 GDBUS_ARGS ({ "channel", "o" }), 2112 deviû_ü—‹_chªÃl ) }, 2113 { GDBUS_ASYNC_METHOD ("DestroyChannel", 2114 GDBUS_ARGS ({ "chªÃl", "o" }), NULL , 2115 deviû_de¡roy_chªÃl ) }, 2119 cÚ¡ GDBusSigÇlTabË gh—Éh_deviû_sigÇls [] = { 2120 { GDBUS_SIGNAL ("ChannelConnected", 2121 GDBUS_ARGS ({ "channel", "o" })) }, 2122 { GDBUS_SIGNAL ("ChannelDeleted", 2123 GDBUS_ARGS ({ "channel", "o" })) }, 2127 cÚ¡ GDBusPrÝ”tyTabË gh—Éh_deviû_´Ý”t›s [] = { 2128 { "MašChªÃl", "o", dev_´Ý”ty_g‘_maš_chªÃl , NULL , 2129 dev_´Ý”ty_exi¡s_maš_chªÃl }, 2133  hdp_deviû * $ü—‹_h—Éh_deviû ( btd_deviû * deviû ) 2135  btd_ad­‹r * ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 2136 cÚ¡ * ·th = `deviû_g‘_·th ( deviû ); 2137  hdp_deviû * dev ; 2138 GSLi¡ * l ; 2140 ià( deviû =ð NULL ) 2141  NULL ; 2143 dev = `g_Ãw0 ( hdp_deviû , 1); 2144 dev ->dev = `btd_deviû_»f ( deviû ); 2145 `h—Éh_deviû_»f ( dev ); 2147 l = `g_¦i¡_fšd_cu¡om ( ad­‹rs , ad­‹r , cmp_ad­‹r ); 2148 ià( l =ð NULL ) 2149  çž ; 2151 dev -> hdp_ad­‹r = l -> d©a ; 2153 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 2154 ·th , HEALTH_DEVICE , 2155 h—Éh_deviû_m‘hods , 2156 h—Éh_deviû_sigÇls , 2157 h—Éh_deviû_´Ý”t›s , 2158 dev , h—Éh_deviû_de¡roy )) { 2159 `”rÜ ("D-Bu çžedØ»gi¡” % š‹rçû", HEALTH_DEVICE ); 2160  çž ; 2163 `DBG ("Regi¡”ed iÁ”çû % Ú…©h %s", HEALTH_DEVICE , ·th ); 2164  dev ; 2166 çž : 2167 `h—Éh_deviû_uÄef ( dev ); 2168  NULL ; 2169 } } 2171  $hdp_deviû_»gi¡” ( btd_deviû * deviû ) 2173  hdp_deviû * hdev ; 2174 GSLi¡ * l ; 2176 l = `g_¦i¡_fšd_cu¡om ( deviûs , deviû , cmp_deviû ); 2177 ià( l !ð NULL ) { 2178 hdev = l -> d©a ; 2179 hdev -> sdp_´e£Á = TRUE ; 2183 hdev = `ü—‹_h—Éh_deviû ( deviû ); 2184 ià( hdev =ð NULL ) 2187 hdev -> sdp_´e£Á = TRUE ; 2189 deviûs = `g_¦i¡_´•’d (deviûs, hdev ); 2191 } } 2193  $hdp_deviû_uÄegi¡” ( btd_deviû * deviû ) 2195  hdp_deviû * hdp_dev ; 2196 cÚ¡ * ·th ; 2197 GSLi¡ * l ; 2199 l = `g_¦i¡_fšd_cu¡om ( deviûs , deviû , cmp_deviû ); 2200 ià( l =ð NULL ) 2203 hdp_dev = l -> d©a ; 2204 ·th = `deviû_g‘_·th ( hdp_dev -> dev ); 2205 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 2206 ·th , HEALTH_DEVICE ); 2207 } } 2209  $hdp_mªag”_¡¬t () 2211 `DBG ("Starting Health manager"); 2213 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 2214 MANAGER_PATH , HEALTH_MANAGER , 2215 h—Éh_mªag”_m‘hods , NULL , NULL, 2216 NULL , mªag”_·th_uÄegi¡” )) { 2217 `”rÜ ("D-Bu çžedØ»gi¡” % š‹rçû", HEALTH_MANAGER ); 2222 } } 2224  $hdp_mªag”_¡Ý () 2226 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 2227 MANAGER_PATH , HEALTH_MANAGER ); 2229 `DBG ("Stopped Health manager"); 2230 } } 2232  hdp_deviû * $h—Éh_deviû_»f ( hdp_deviû * hdp_dev ) 2234 hdp_dev -> »f ++; 2236 `DBG ("(%p):„ef=%d", hdp_dev , hdp_dev-> »f ); 2238  hdp_dev ; 2239 } } 2241  $h—Éh_deviû_uÄef ( hdp_deviû * hdp_dev ) 2243 hdp_dev -> »f --; 2245 `DBG ("(%p):„ef=%d", hdp_dev , hdp_dev-> »f ); 2247 ià( hdp_dev -> »f > 0) 2250 `ä“_h—Éh_deviû ( hdp_dev ); 2251 } } @profiles/health/hdp.h 23  hdp_ad­‹r_»gi¡” ( btd_ad­‹r *btd_adapter); 24  hdp_ad­‹r_uÄegi¡” ( btd_ad­‹r *btd_adapter); 26  hdp_deviû_»gi¡” ( btd_deviû * deviû ); 27  hdp_deviû_uÄegi¡” ( btd_deviû * deviû ); 29  hdp_mªag”_¡¬t (); 30  hdp_mªag”_¡Ý (); 32 gboÞ—n hdp_£t_mþ_cb ( hdp_deviû * deviû , GE¼Ü ** ”r ); @profiles/health/hdp_main.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<”ºo.h > 28  ~ 30  ~"¤c/¶ugš.h " 32  ~"hdp_mªag”.h " 34  $hdp_š™ () 36  `hdp_mªag”_š™ (); 37 } } 39  $hdp_ex™ () 41 `hdp_mªag”_ex™ (); 42 } } 44 BLUETOOTH_PLUGIN_DEFINE ( h—Éh , VERSION , 45 BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , hdp_š™ , hdp_ex™ ) @profiles/health/hdp_manager.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<¡dboÞ.h > 29  ~ 30  ~ 32  ~"btio/btio.h " 33  ~"lib/uuid.h " 34  ~"¤c/ad­‹r.h " 35  ~"¤c/deviû.h " 36  ~"¤c/´ofže.h " 37  ~"¤c/£rviû.h " 38  ~"¤c/uuid-h–³r.h " 39  ~"¤c/log.h " 41  ~"hdp_ty³s.h " 42  ~"hdp_mªag”.h " 43  ~"hdp.h " 45  $hdp_ad­‹r_´obe ( btd_´ofže * p , 46  btd_ad­‹r * ad­‹r ) 48  `hdp_ad­‹r_»gi¡” ( ad­‹r ); 49 } } 51  $hdp_ad­‹r_»move ( btd_´ofže * p , 52  btd_ad­‹r * ad­‹r ) 54 `hdp_ad­‹r_uÄegi¡” ( ad­‹r ); 55 } } 57  $hdp_driv”_´obe ( btd_£rviû * £rviû ) 59  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 61  `hdp_deviû_»gi¡” ( deviû ); 62 } } 64  $hdp_driv”_»move ( btd_£rviû * £rviû ) 66  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 68 `hdp_deviû_uÄegi¡” ( deviû ); 69 } } 71  btd_´ofže ghdp_sourû_´ofže = { 72 . Çme = "hdp-source", 73 . g»mÙe_uuid = HDP_SOURCE_UUID , 75 . gdeviû_´obe = hdp_driv”_´obe , 76 . gdeviû_»move = hdp_driv”_»move , 78 . gad­‹r_´obe = hdp_ad­‹r_´obe , 79 . gad­‹r_»move = hdp_ad­‹r_»move , 82  btd_´ofže ghdp_sšk_´ofže = { 83 . Çme = "hdp-sink", 84 . g»mÙe_uuid = HDP_SINK_UUID , 86 . gdeviû_´obe = hdp_driv”_´obe , 87 . gdeviû_»move = hdp_driv”_»move , 90  $hdp_mªag”_š™ () 92 ià( `hdp_mªag”_¡¬t () < 0) 95 `btd_´ofže_»gi¡” (& hdp_sourû_´ofže ); 96 `btd_´ofže_»gi¡” (& hdp_sšk_´ofže ); 99 } } 101  $hdp_mªag”_ex™ () 103 `btd_´ofže_uÄegi¡” (& hdp_sšk_´ofže ); 104 `btd_´ofže_uÄegi¡” (& hdp_sourû_´ofže ); 106 `hdp_mªag”_¡Ý (); 107 } } @profiles/health/hdp_manager.h 23  hdp_mªag”_š™ (); 24  hdp_mªag”_ex™ (); @profiles/health/hdp_types.h 23 #iâdeà __HDP_TYPES_H__ 24  #__HDP_TYPES_H__ ) 26  #MANAGER_PATH "/Üg/bluez" ) 28  #HEALTH_MANAGER "Üg.bluez.H—ÉhMªag”1" ) 29  #HEALTH_DEVICE "Üg.bluez.H—ÉhDeviû1" ) 30  #HEALTH_CHANNEL "Üg.bluez.H—ÉhChªÃl1" ) 32  #HDP_VERSION 0x0100 ) 34  #HDP_SERVICE_NAME "Bluez HDP" ) 35  #HDP_SERVICE_DSC "A Bluez h—Éh deviû…rofžim¶em’tiÚ" ) 36  #HDP_SERVICE_PROVIDER "Bluez" ) 38  #HDP_MDEP_ECHO 0x00 ) 39  #HDP_MDEP_INITIAL 0x01 ) 40  #HDP_MDEP_FINAL 0x7F ) 42  #HDP_ERROR `g_qu¬k_äom_¡©ic_¡ršg ("hdp-”rÜ-qu¬k") ) 44  #HDP_NO_PREFERENCE_DC 0x00 ) 45  #HDP_RELIABLE_DC 0x01 ) 46  #HDP_STREAMING_DC 0x02 ) 48  #HDP_SINK_ROLE_AS_STRING "sšk" ) 49  #HDP_SOURCE_ROLE_AS_STRING "sourû" ) 52 mHDP_SOURCE = 0x00, 53 mHDP_SINK = 0x01 54 } tHdpRÞe ; 57 mHDP_DIC_PARSE_ERROR , 58 mHDP_DIC_ENTRY_PARSE_ERROR , 59 mHDP_CONNECTION_ERROR , 60 mHDP_UNSPECIFIED_ERROR , 61 mHDP_UNKNOWN_ERROR 62 } tHdpE¼Ü ; 64 ed©a_¥ecs { 65 mDATA_EXCHANGE_SPEC_11073 = 0x01 68  shdp_­¶iÿtiÚ { 69 * m·th ; 70 ušt16_t md©a_ty³ ; 71 gboÞ—n md©a_ty³_£t ; 72 ušt8_t mrÞe ; 73 gboÞ—n mrÞe_£t ; 74 ušt8_t mchª_ty³ ; 75 gboÞ—n mchª_ty³_£t ; 76 * mdesütiÚ ; 77 ušt8_t mid ; 78 * mÚame ; 79 gušt mdbus_w©ch” ; 80  m»f ; 83  shdp_ad­‹r { 84  btd_ad­‹r * mbtd_ad­‹r ; 85  mÿp_š¡ªû * mmi ; 86 ušt16_t mcýsm ; 87 ušt16_t mdýsm ; 88 ušt32_t msdp_hªdËr ; 89 ušt32_t m»cÜd_¡©e ; 92  shdp_deviû { 93  btd_deviû * mdev ; 94  hdp_ad­‹r * mhdp_ad­‹r ; 95  mÿp_mþ * mmþ ; 96 gboÞ—n mmþ_cÚn ; 97 gboÞ—n msdp_´e£Á ; 98 GSLi¡ * mchªÃls ; 99  hdp_chªÃl * mndc ; 100  hdp_chªÃl * mä ; 101  m»f ; 104  ghdp_echo_d©a ; 106  shdp_chªÃl { 107  hdp_deviû * mdev ; 108  hdp_­¶iÿtiÚ * m­p ; 109  mÿp_mdl * mmdl ; 110 * m·th ; 111 ušt8_t mcÚfig ; 112 ušt8_t mmd• ; 113 ušt16_t mmdlid ; 114 ušt16_t mimtu ; 115 ušt16_t momtu ; 116  hdp_echo_d©a * med©a ; 117  m»f ; @profiles/health/hdp_util.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<¡dšt.h > 28  ~<¡dboÞ.h > 30  ~ 32  ~ 34  ~ 35  ~ 36  ~ 38  ~"¤c/ad­‹r.h " 39  ~"¤c/deviû.h " 41  ~"¤c/sdpd.h " 42  ~"¤c/sdp-þ›Á.h " 43  ~"¤c/uuid-h–³r.h " 45  ~"lib/uuid.h " 46  ~"btio/btio.h " 48  ~"¤c/log.h " 49  ~"¤c/dbus-commÚ.h " 51  ~"mÿp.h " 52  ~"hdp_ty³s.h " 53  ~"hdp.h " 54  ~"hdp_utž.h " 56  $gboÞ—n (* t·r£_™em_f )( tDBusMes§geI‹r * t™” , tgpoš‹r tu£r_d©a , 57 tGE¼Ü ** t”r ); 59  sdiù_’Œy_func { 60 * key ; 61 ·r£_™em_f func ; 64  sg‘_md•_d©a { 65  hdp_­¶iÿtiÚ * ­p ; 66 gpoš‹r d©a ; 67 hdp_cÚtšue_md•_f func ; 68 GDe¡royNÙify de¡roy ; 71  scÚn_mþ_d©a { 72  »fs ; 73 gpoš‹r d©a ; 74 hdp_cÚtšue_´oc_f func ; 75 GDe¡royNÙify de¡roy ; 76  hdp_deviû * dev ; 79  sg‘_dýsm_d©a { 80 gpoš‹r d©a ; 81 hdp_cÚtšue_dýsm_f func ; 82 GDe¡royNÙify de¡roy ; 85  gboÞ—n $·r£_diù_’Œy ( diù_’Œy_func diù_cÚ‹xt [], 86 DBusMes§geI‹r * ™” , 87 GE¼Ü ** ”r , 88 gpoš‹r u£r_d©a ) 90 DBusMes§geI‹r ’Œy ; 91 * key ; 92  ùy³ , i ; 93  diù_’Œy_func df ; 95 `dbus_mes§ge_™”_»cur£ ( ™” , & ’Œy ); 96 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy ); 97 ià( ùy³ !ð DBUS_TYPE_STRING ) { 98 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_DIC_ENTRY_PARSE_ERROR , 100  FALSE ; 103 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & key ); 104 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 106  i = 0, df = diù_cÚ‹xt [0]; df. key ; i++, df = dict_context[i]) { 107 ià( `g_ascii_¡rÿ£cmp ( df . key , key) == 0) 108  df . `func (& ’Œy , u£r_d©a , ”r ); 111 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_DIC_ENTRY_PARSE_ERROR , 112 "NØfunùiÚ found fÜ…¬sšg v®ufÜ key %s", key ); 113  FALSE ; 114 } } 116  gboÞ—n $·r£_diù ( diù_’Œy_func diù_cÚ‹xt [], 117 DBusMes§geI‹r * ™” , 118 GE¼Ü ** ”r , 119 gpoš‹r u£r_d©a ) 121  ùy³ ; 122 DBusMes§geI‹r diù ; 124 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” ); 125 ià( ùy³ !ð DBUS_TYPE_ARRAY ) { 126 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_DIC_PARSE_ERROR , 128  FALSE ; 131 `dbus_mes§ge_™”_»cur£ ( ™” , & diù ); 132 ( ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& diù )) != 133 DBUS_TYPE_INVALID ) { 134 ià( ùy³ !ð DBUS_TYPE_DICT_ENTRY ) { 135 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_DIC_PARSE_ERROR , 138  FALSE ; 142 ià(! `·r£_diù_’Œy ( diù_cÚ‹xt , & diù , ”r , 143 u£r_d©a )) 144  FALSE ; 147 `dbus_mes§ge_™”_Ãxt (& diù ); 150  TRUE ; 151 } } 153  gboÞ—n $·r£_d©a_ty³ ( DBusMes§geI‹r * ™” , gpoš‹r d©a , 154 GE¼Ü ** ”r ) 156  hdp_­¶iÿtiÚ * ­p = d©a ; 157 DBusMes§geI‹r * v®ue ; 158 DBusMes§geI‹r v¬ŸÁ ; 159  ùy³ ; 161 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” ); 162 v®ue = ™” ; 163 ià( ùy³ =ð DBUS_TYPE_VARIANT ) { 165 `dbus_mes§ge_™”_»cur£ ( ™” , & v¬ŸÁ ); 166 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& v¬ŸÁ ); 167 v®ue = & v¬ŸÁ ; 170 ià( ùy³ !ð DBUS_TYPE_UINT16 ) { 171 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_DIC_ENTRY_PARSE_ERROR , 173  FALSE ; 176 `dbus_mes§ge_™”_g‘_basic ( v®ue , & ­p -> d©a_ty³ ); 177 ­p -> d©a_ty³_£t = TRUE ; 178  TRUE ; 179 } } 181  gboÞ—n $·r£_rÞe ( DBusMes§geI‹r * ™” , gpoš‹r d©a , GE¼Ü ** ”r ) 183  hdp_­¶iÿtiÚ * ­p = d©a ; 184 DBusMes§geI‹r * ¡ršg ; 185 DBusMes§geI‹r v®ue ; 186  ùy³ ; 187 cÚ¡ * rÞe ; 189 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” ); 190 ià( ùy³ =ð DBUS_TYPE_VARIANT ) { 192 `dbus_mes§ge_™”_»cur£ ( ™” , & v®ue ); 193 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& v®ue ); 194 ¡ršg = & v®ue ; 196 ¡ršg = ™” ; 199 ià( ùy³ !ð DBUS_TYPE_STRING ) { 200 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_UNSPECIFIED_ERROR , 202  FALSE ; 205 `dbus_mes§ge_™”_g‘_basic ( ¡ršg , & rÞe ); 206 ià( `g_ascii_¡rÿ£cmp ( rÞe , HDP_SINK_ROLE_AS_STRING ) == 0) { 207 ­p -> rÞe = HDP_SINK ; 208 } ià( `g_ascii_¡rÿ£cmp ( rÞe , HDP_SOURCE_ROLE_AS_STRING ) == 0) { 209 ­p -> rÞe = HDP_SOURCE ; 211 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_UNSPECIFIED_ERROR , 213  FALSE ; 216 ­p -> rÞe_£t = TRUE ; 218  TRUE ; 219 } } 221  gboÞ—n $·r£_desc ( DBusMes§geI‹r * ™” , gpoš‹r d©a , GE¼Ü ** ”r ) 223  hdp_­¶iÿtiÚ * ­p = d©a ; 224 DBusMes§geI‹r * ¡ršg ; 225 DBusMes§geI‹r v¬ŸÁ ; 226  ùy³ ; 227 cÚ¡ * desc ; 229 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” ); 230 ià( ùy³ =ð DBUS_TYPE_VARIANT ) { 232 `dbus_mes§ge_™”_»cur£ ( ™” , & v¬ŸÁ ); 233 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& v¬ŸÁ ); 234 ¡ršg = & v¬ŸÁ ; 236 ¡ršg = ™” ; 239 ià( ùy³ !ð DBUS_TYPE_STRING ) { 240 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_DIC_ENTRY_PARSE_ERROR , 242  FALSE ; 245 `dbus_mes§ge_™”_g‘_basic ( ¡ršg , & desc ); 246 ­p -> desütiÚ = `g_¡rdup ( desc ); 247  TRUE ; 248 } } 250  gboÞ—n $·r£_chª_ty³ ( DBusMes§geI‹r * ™” , gpoš‹r d©a , 251 GE¼Ü ** ”r ) 253  hdp_­¶iÿtiÚ * ­p = d©a ; 254 DBusMes§geI‹r * v®ue ; 255 DBusMes§geI‹r v¬ŸÁ ; 256 * chª_ty³ ; 257  ùy³ ; 259 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” ); 260 v®ue = ™” ; 261 ià( ùy³ =ð DBUS_TYPE_VARIANT ) { 263 `dbus_mes§ge_™”_»cur£ ( ™” , & v¬ŸÁ ); 264 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& v¬ŸÁ ); 265 v®ue = & v¬ŸÁ ; 268 ià( ùy³ !ð DBUS_TYPE_STRING ) { 269 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_DIC_ENTRY_PARSE_ERROR , 271  FALSE ; 274 `dbus_mes§ge_™”_g‘_basic ( v®ue , & chª_ty³ ); 276 ià( `g_ascii_¡rÿ£cmp ("»lŸbË", chª_ty³ ) == 0) 277 ­p -> chª_ty³ = HDP_RELIABLE_DC ; 278 ià( `g_ascii_¡rÿ£cmp ("¡»amšg", chª_ty³ ) == 0) 279 ­p -> chª_ty³ = HDP_STREAMING_DC ; 281 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_DIC_ENTRY_PARSE_ERROR , 283  FALSE ; 286 ­p -> chª_ty³_£t = TRUE ; 288  TRUE ; 289 } } 291  diù_’Œy_func gdiù_·r£r [] = { 292 {"D©aTy³", ·r£_d©a_ty³ }, 293 {"RÞe", ·r£_rÞe }, 294 {"DesütiÚ", ·r£_desc }, 295 {"ChªÃlTy³", ·r£_chª_ty³ }, 296 { NULL , NULL} 299  hdp_­¶iÿtiÚ * $hdp_g‘_­p_cÚfig ( DBusMes§geI‹r * ™” , GE¼Ü ** ”r ) 301  hdp_­¶iÿtiÚ * ­p ; 303 ­p = `g_Ãw0 ( hdp_­¶iÿtiÚ , 1); 304 ­p -> »f = 1; 305 ià(! `·r£_diù ( diù_·r£r , ™” , ”r , ­p )) 306  çž ; 307 ià(! ­p -> d©a_ty³_£t || !­p-> rÞe_£t ) { 308 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_DIC_PARSE_ERROR , 310  çž ; 312  ­p ; 314 çž : 315 `hdp_­¶iÿtiÚ_uÄef ( ­p ); 316  NULL ; 317 } } 319  gboÞ—n $is_­p_rÞe ( GSLi¡ * ­p_li¡ , HdpRÞe rÞe ) 321 GSLi¡ * l ; 323  l = ­p_li¡ ;†;† =†-> Ãxt ) { 324  hdp_­¶iÿtiÚ * ­p = l -> d©a ; 326 ià( ­p -> rÞe ==„ole) 327  TRUE ; 330  FALSE ; 331 } } 333  gboÞ—n $£t_sdp_£rviûs_uuid ( sdp_»cÜd_t * »cÜd , HdpRÞe rÞe ) 335 uuid_t svc_uuid_sourû , svc_uuid_sšk ; 336 sdp_li¡_t * svc_li¡ = NULL ; 338 `sdp_uuid16_ü—‹ (& svc_uuid_sšk , HDP_SINK_SVCLASS_ID ); 339 `sdp_uuid16_ü—‹ (& svc_uuid_sourû , HDP_SOURCE_SVCLASS_ID ); 341 `sdp_g‘_£rviû_þas£s ( »cÜd , & svc_li¡ ); 343 ià( rÞe =ð HDP_SOURCE ) { 344 ià(! `sdp_li¡_fšd ( svc_li¡ , & svc_uuid_sourû , sdp_uuid_cmp )) 345 svc_li¡ = `sdp_li¡_­³nd (svc_li¡, & svc_uuid_sourû ); 346 } ià( rÞe =ð HDP_SINK ) { 347 ià(! `sdp_li¡_fšd ( svc_li¡ , & svc_uuid_sšk , sdp_uuid_cmp )) 348 svc_li¡ = `sdp_li¡_­³nd (svc_li¡, & svc_uuid_sšk ); 351 ià( `sdp_£t_£rviû_þas£s ( »cÜd , svc_li¡ ) < 0) { 352 `sdp_li¡_ä“ ( svc_li¡ , NULL ); 353  FALSE ; 356 `sdp_li¡_ä“ ( svc_li¡ , NULL ); 358  TRUE ; 359 } } 361  gboÞ—n $»gi¡”_£rviû_´ÙocÞs ( hdp_ad­‹r * ad­‹r , 362 sdp_»cÜd_t * sdp_»cÜd ) 364 gboÞ—n »t ; 365 uuid_t l2ÿp_uuid , mÿp_c_uuid ; 366 sdp_li¡_t * l2ÿp_li¡ , * ´Ùo_li¡ = NULL , * mÿp_li¡ = NULL; 367 sdp_li¡_t * acûss_´Ùo_li¡ = NULL ; 368 sdp_d©a_t * psm = NULL , * mÿp_v” = NULL; 369 ušt16_t v”siÚ = MCAP_VERSION ; 372 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 373 l2ÿp_li¡ = `sdp_li¡_­³nd ( NULL , & l2ÿp_uuid ); 374 ià( l2ÿp_li¡ =ð NULL ) { 375 »t = FALSE ; 376  ’d ; 379 psm = `sdp_d©a_®loc ( SDP_UINT16 , & ad­‹r -> cýsm ); 380 ià( psm =ð NULL ) { 381 »t = FALSE ; 382  ’d ; 385 ià( `sdp_li¡_­³nd ( l2ÿp_li¡ , psm è=ð NULL ) { 386 »t = FALSE ; 387  ’d ; 390 ´Ùo_li¡ = `sdp_li¡_­³nd ( NULL , l2ÿp_li¡ ); 391 ià( ´Ùo_li¡ =ð NULL ) { 392 »t = FALSE ; 393  ’d ; 397 `sdp_uuid16_ü—‹ (& mÿp_c_uuid , MCAP_CTRL_UUID ); 398 mÿp_li¡ = `sdp_li¡_­³nd ( NULL , & mÿp_c_uuid ); 399 ià( mÿp_li¡ =ð NULL ) { 400 »t = FALSE ; 401  ’d ; 404 mÿp_v” = `sdp_d©a_®loc ( SDP_UINT16 , & v”siÚ ); 405 ià( mÿp_v” =ð NULL ) { 406 »t = FALSE ; 407  ’d ; 410 ià( `sdp_li¡_­³nd ( mÿp_li¡ , mÿp_v” è=ð NULL ) { 411 »t = FALSE ; 412  ’d ; 415 ià( `sdp_li¡_­³nd ( ´Ùo_li¡ , mÿp_li¡ è=ð NULL ) { 416 »t = FALSE ; 417  ’d ; 421 acûss_´Ùo_li¡ = `sdp_li¡_­³nd ( NULL , ´Ùo_li¡ ); 422 ià( acûss_´Ùo_li¡ =ð NULL ) { 423 »t = FALSE ; 424  ’d ; 427 »t = TRUE ; 428 `sdp_£t_acûss_´Ùos ( sdp_»cÜd , acûss_´Ùo_li¡ ); 430 ’d : 431 ià( l2ÿp_li¡ !ð NULL ) 432 `sdp_li¡_ä“ ( l2ÿp_li¡ , NULL ); 433 ià( mÿp_li¡ !ð NULL ) 434 `sdp_li¡_ä“ ( mÿp_li¡ , NULL ); 435 ià( ´Ùo_li¡ !ð NULL ) 436 `sdp_li¡_ä“ ( ´Ùo_li¡ , NULL ); 437 ià( acûss_´Ùo_li¡ !ð NULL ) 438 `sdp_li¡_ä“ ( acûss_´Ùo_li¡ , NULL ); 439 ià( psm !ð NULL ) 440 `sdp_d©a_ä“ ( psm ); 441 ià( mÿp_v” !ð NULL ) 442 `sdp_d©a_ä“ ( mÿp_v” ); 444  »t ; 445 } } 447  gboÞ—n $»gi¡”_£rviû_´ofžes ( sdp_»cÜd_t * sdp_»cÜd ) 449 gboÞ—n »t ; 450 sdp_li¡_t * ´ofže_li¡ ; 451 sdp_´ofže_desc_t hdp_´ofže ; 454 `sdp_uuid16_ü—‹ (& hdp_´ofže . uuid , HDP_SVCLASS_ID ); 455 hdp_´ofže . v”siÚ = HDP_VERSION ; 456 ´ofže_li¡ = `sdp_li¡_­³nd ( NULL , & hdp_´ofže ); 457 ià( ´ofže_li¡ =ð NULL ) 458  FALSE ; 461 ià( `sdp_£t_´ofže_descs ( sdp_»cÜd , ´ofže_li¡ ) < 0) 462 »t = FALSE ; 464 »t = TRUE ; 466 `sdp_li¡_ä“ ( ´ofže_li¡ , NULL ); 468  »t ; 469 } } 471  gboÞ—n $»gi¡”_£rviû_add™iÚ®_´ÙocÞs ( 472  hdp_ad­‹r * ad­‹r , 473 sdp_»cÜd_t * sdp_»cÜd ) 475 gboÞ—n »t = TRUE ; 476 uuid_t l2ÿp_uuid , mÿp_d_uuid ; 477 sdp_li¡_t * l2ÿp_li¡ , * ´Ùo_li¡ = NULL , * mÿp_li¡ = NULL; 478 sdp_li¡_t * acûss_´Ùo_li¡ = NULL ; 479 sdp_d©a_t * psm = NULL ; 482 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 483 l2ÿp_li¡ = `sdp_li¡_­³nd ( NULL , & l2ÿp_uuid ); 484 ià( l2ÿp_li¡ =ð NULL ) { 485 »t = FALSE ; 486  ’d ; 489 psm = `sdp_d©a_®loc ( SDP_UINT16 , & ad­‹r -> dýsm ); 490 ià( psm =ð NULL ) { 491 »t = FALSE ; 492  ’d ; 495 ià( `sdp_li¡_­³nd ( l2ÿp_li¡ , psm è=ð NULL ) { 496 »t = FALSE ; 497  ’d ; 500 ´Ùo_li¡ = `sdp_li¡_­³nd ( NULL , l2ÿp_li¡ ); 501 ià( ´Ùo_li¡ =ð NULL ) { 502 »t = FALSE ; 503  ’d ; 507 `sdp_uuid16_ü—‹ (& mÿp_d_uuid , MCAP_DATA_UUID ); 508 mÿp_li¡ = `sdp_li¡_­³nd ( NULL , & mÿp_d_uuid ); 509 ià( mÿp_li¡ =ð NULL ) { 510 »t = FALSE ; 511  ’d ; 514 ià( `sdp_li¡_­³nd ( ´Ùo_li¡ , mÿp_li¡ è=ð NULL ) { 515 »t = FALSE ; 516  ’d ; 520 acûss_´Ùo_li¡ = `sdp_li¡_­³nd ( NULL , ´Ùo_li¡ ); 521 ià( acûss_´Ùo_li¡ =ð NULL ) { 522 »t = FALSE ; 523  ’d ; 526 `sdp_£t_add_acûss_´Ùos ( sdp_»cÜd , acûss_´Ùo_li¡ ); 528 ’d : 529 ià( l2ÿp_li¡ !ð NULL ) 530 `sdp_li¡_ä“ ( l2ÿp_li¡ , NULL ); 531 ià( mÿp_li¡ !ð NULL ) 532 `sdp_li¡_ä“ ( mÿp_li¡ , NULL ); 533 ià( ´Ùo_li¡ !ð NULL ) 534 `sdp_li¡_ä“ ( ´Ùo_li¡ , NULL ); 535 ià( acûss_´Ùo_li¡ !ð NULL ) 536 `sdp_li¡_ä“ ( acûss_´Ùo_li¡ , NULL ); 537 ià( psm !ð NULL ) 538 `sdp_d©a_ä“ ( psm ); 540  »t ; 541 } } 543  sdp_li¡_t * $­p_to_sd¶i¡ ( hdp_­¶iÿtiÚ * ­p ) 545 sdp_d©a_t * md•id , 546 * dty³ = NULL , 547 * rÞe = NULL , 548 * desc = NULL ; 549 sdp_li¡_t * f_li¡ = NULL ; 551 md•id = `sdp_d©a_®loc ( SDP_UINT8 , & ­p -> id ); 552 ià( md•id =ð NULL ) 553  NULL ; 555 dty³ = `sdp_d©a_®loc ( SDP_UINT16 , & ­p -> d©a_ty³ ); 556 ià( dty³ =ð NULL ) 557  çž ; 559 rÞe = `sdp_d©a_®loc ( SDP_UINT8 , & ­p ->role); 560 ià( rÞe =ð NULL ) 561  çž ; 563 ià( ­p -> desütiÚ !ð NULL ) { 564 desc = `sdp_d©a_®loc ( SDP_TEXT_STR8 , ­p -> desütiÚ ); 565 ià( desc =ð NULL ) 566  çž ; 569 f_li¡ = `sdp_li¡_­³nd ( NULL , md•id ); 570 ià( f_li¡ =ð NULL ) 571  çž ; 573 ià( `sdp_li¡_­³nd ( f_li¡ , dty³ è=ð NULL ) 574  çž ; 576 ià( `sdp_li¡_­³nd ( f_li¡ , rÞe è=ð NULL ) 577  çž ; 579 ià( desc !ð NULL ) 580 ià( `sdp_li¡_­³nd ( f_li¡ , desc è=ð NULL ) 581  çž ; 583  f_li¡ ; 585 çž : 586 ià( f_li¡ !ð NULL ) 587 `sdp_li¡_ä“ ( f_li¡ , NULL ); 588 ià( md•id !ð NULL ) 589 `sdp_d©a_ä“ ( md•id ); 590 ià( dty³ !ð NULL ) 591 `sdp_d©a_ä“ ( dty³ ); 592 ià( rÞe !ð NULL ) 593 `sdp_d©a_ä“ ( rÞe ); 594 ià( desc !ð NULL ) 595 `sdp_d©a_ä“ ( desc ); 597  NULL ; 598 } } 600  $ä“_hdp_li¡ (* li¡ ) 602 sdp_li¡_t * hdp_li¡ = li¡ ; 604 `sdp_li¡_ä“ ( hdp_li¡ , ( sdp_ä“_func_t ) sdp_d©a_ä“ ); 605 } } 607  gboÞ—n $»gi¡”_ã©u»s ( hdp_­¶iÿtiÚ * ­p , 608 sdp_li¡_t ** sup_ã©u»s ) 610 sdp_li¡_t * hdp_ã©u» ; 612 hdp_ã©u» = `­p_to_sd¶i¡ ( ­p ); 613 ià( hdp_ã©u» =ð NULL ) 614  çž ; 616 ià(* sup_ã©u»s =ð NULL ) { 617 * sup_ã©u»s = `sdp_li¡_­³nd ( NULL , hdp_ã©u» ); 618 ià(* sup_ã©u»s =ð NULL ) 619  çž ; 620 } ià( `sdp_li¡_­³nd (* sup_ã©u»s , hdp_ã©u» è=ð NULL ) { 621  çž ; 624  TRUE ; 626 çž : 627 ià( hdp_ã©u» !ð NULL ) 628 `sdp_li¡_ä“ ( hdp_ã©u» , ( sdp_ä“_func_t ) sdp_d©a_ä“ ); 629 ià(* sup_ã©u»s !ð NULL ) 630 `sdp_li¡_ä“ (* sup_ã©u»s , ä“_hdp_li¡ ); 631  FALSE ; 632 } } 634  gboÞ—n $»gi¡”_£rviû_sup_ã©u»s ( GSLi¡ * ­p_li¡ , 635 sdp_»cÜd_t * sdp_»cÜd ) 637 GSLi¡ * l ; 638 sdp_li¡_t * sup_ã©u»s = NULL ; 640  l = ­p_li¡ ;†;† =†-> Ãxt ) { 641 ià(! `»gi¡”_ã©u»s ( l -> d©a , & sup_ã©u»s )) 642  FALSE ; 645 ià( `sdp_£t_suµ_ã© ( sdp_»cÜd , sup_ã©u»s ) < 0) { 646 `sdp_li¡_ä“ ( sup_ã©u»s , ä“_hdp_li¡ ); 647  FALSE ; 650 `sdp_li¡_ä“ ( sup_ã©u»s , ä“_hdp_li¡ ); 652  TRUE ; 653 } } 655  gboÞ—n $»gi¡”_d©a_exchªge_¥ec ( sdp_»cÜd_t * »cÜd ) 657 sdp_d©a_t * ¥ec ; 658 ušt8_t d©a_¥ec = DATA_EXCHANGE_SPEC_11073 ; 661 ¥ec = `sdp_d©a_®loc ( SDP_UINT8 , & d©a_¥ec ); 662 ià( ¥ec =ð NULL ) 663  FALSE ; 665 ià( `sdp_©Œ_add ( »cÜd , SDP_ATTR_DATA_EXCHANGE_SPEC , ¥ec ) < 0) { 666 `sdp_d©a_ä“ ( ¥ec ); 667  FALSE ; 670  TRUE ; 671 } } 673  gboÞ—n $»gi¡”_mÿp_ã©u»s ( sdp_»cÜd_t * sdp_»cÜd ) 675 sdp_d©a_t * mÿp_´oc ; 676 ušt8_t mÿp_sup_´oc = MCAP_SUP_PROC ; 678 mÿp_´oc = `sdp_d©a_®loc ( SDP_UINT8 , & mÿp_sup_´oc ); 679 ià( mÿp_´oc =ð NULL ) 680  FALSE ; 682 ià( `sdp_©Œ_add ( sdp_»cÜd , SDP_ATTR_MCAP_SUPPORTED_PROCEDURES , 683 mÿp_´oc ) < 0) { 684 `sdp_d©a_ä“ ( mÿp_´oc ); 685  FALSE ; 688  TRUE ; 689 } } 691 gboÞ—n $hdp_upd©e_sdp_»cÜd ( hdp_ad­‹r * ad­‹r , GSLi¡ * ­p_li¡ ) 693 sdp_»cÜd_t * sdp_»cÜd ; 695 ià( ad­‹r -> sdp_hªdËr > 0) 696 `ad­‹r_£rviû_»move ( ad­‹r -> btd_ad­‹r , 697 ad­‹r -> sdp_hªdËr ); 699 ià( ­p_li¡ =ð NULL ) { 700 ad­‹r -> sdp_hªdËr = 0; 701  TRUE ; 704 sdp_»cÜd = `sdp_»cÜd_®loc (); 705 ià( sdp_»cÜd =ð NULL ) 706  FALSE ; 708 ià( ad­‹r -> sdp_hªdËr > 0) 709 sdp_»cÜd -> hªdË = ad­‹r -> sdp_hªdËr ; 711 sdp_»cÜd -> hªdË = 0xffffffff; 713 ià( `is_­p_rÞe ( ­p_li¡ , HDP_SINK )) 714 `£t_sdp_£rviûs_uuid ( sdp_»cÜd , HDP_SINK ); 715 ià( `is_­p_rÞe ( ­p_li¡ , HDP_SOURCE )) 716 `£t_sdp_£rviûs_uuid ( sdp_»cÜd , HDP_SOURCE ); 718 ià(! `»gi¡”_£rviû_´ÙocÞs ( ad­‹r , sdp_»cÜd )) 719  çž ; 720 ià(! `»gi¡”_£rviû_´ofžes ( sdp_»cÜd )) 721  çž ; 722 ià(! `»gi¡”_£rviû_add™iÚ®_´ÙocÞs ( ad­‹r , sdp_»cÜd )) 723  çž ; 725 `sdp_£t_šfo_©Œ ( sdp_»cÜd , HDP_SERVICE_NAME , HDP_SERVICE_PROVIDER , 726 HDP_SERVICE_DSC ); 727 ià(! `»gi¡”_£rviû_sup_ã©u»s ( ­p_li¡ , sdp_»cÜd )) 728  çž ; 729 ià(! `»gi¡”_d©a_exchªge_¥ec ( sdp_»cÜd )) 730  çž ; 732 `»gi¡”_mÿp_ã©u»s ( sdp_»cÜd ); 734 ià( `sdp_£t_»cÜd_¡©e ( sdp_»cÜd , ad­‹r -> »cÜd_¡©e ++) < 0) 735  çž ; 737 ià( `ad­‹r_£rviû_add ( ad­‹r -> btd_ad­‹r , sdp_»cÜd ) < 0) 738  çž ; 739 ad­‹r -> sdp_hªdËr = sdp_»cÜd -> hªdË ; 740  TRUE ; 742 çž : 743 ià( sdp_»cÜd !ð NULL ) 744 `sdp_»cÜd_ä“ ( sdp_»cÜd ); 745  FALSE ; 746 } } 748  gboÞ—n $check_rÞe ( ušt8_t »c_rÞe , ušt8_ˆ ­p_rÞe ) 750 ià(( »c_rÞe =ð HDP_SINK && ­p_rÞe =ð HDP_SOURCE ) || 751 ( »c_rÞe =ð HDP_SOURCE && ­p_rÞe =ð HDP_SINK )) 752  TRUE ; 754  FALSE ; 755 } } 757  gboÞ—n $g‘_md•_äom_»c (cÚ¡ sdp_»cÜd_t * »c , ušt8_t rÞe , 758 ušt16_t d_ty³ , ušt8_t * md• , ** desc ) 760 sdp_d©a_t * li¡ , * ã© ; 762 ià( desc =ð NULL && md• == NULL) 763  TRUE ; 765 li¡ = `sdp_d©a_g‘ ( »c , SDP_ATTR_SUPPORTED_FEATURES_LIST ); 766 ià( li¡ =ð NULL || ! `SDP_IS_SEQ Öi¡-> dtd )) 767  FALSE ; 769  ã© = li¡ -> v® . d©a£q ; f—t; f—ˆðã©-> Ãxt ) { 770 sdp_d©a_t * d©a_ty³ , * md•id , * rÞe_t , * desc_t ; 772 ià(! `SDP_IS_SEQ ( ã© -> dtd )) 775 md•id = ã© -> v® . d©a£q ; 776 ià( md•id =ð NULL ) 779 d©a_ty³ = md•id -> Ãxt ; 780 ià( d©a_ty³ =ð NULL ) 783 rÞe_t = d©a_ty³ -> Ãxt ; 784 ià( rÞe_t =ð NULL ) 787 desc_t = rÞe_t -> Ãxt ; 789 ià( d©a_ty³ -> dtd !ð SDP_UINT16 || md•id ->dtd !ð SDP_UINT8 || 790 rÞe_t -> dtd !ð SDP_UINT8 ) 793 ià( d©a_ty³ -> v® . ušt16 !ð d_ty³ || 794 ! `check_rÞe ( rÞe_t -> v® . ušt8 , rÞe )) 797 ià( md• !ð NULL ) 798 * md• = md•id -> v® . ušt8 ; 800 ià( desc !ð NULL && desc_t != NULL && 801 `SDP_IS_TEXT_STR ( desc_t -> dtd )) 802 * desc = `g_¡rdup ( desc_t -> v® . ¡r ); 804  TRUE ; 807  FALSE ; 808 } } 810  $g‘_md•_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r u£r_d©a ) 812  g‘_md•_d©a * md•_d©a = u£r_d©a ; 813 GE¼Ü * g”r = NULL ; 814 ušt8_t md• ; 816 ià( ”r < 0 || »cs =ð NULL ) { 817 `g_£t_”rÜ (& g”r , HDP_ERROR , HDP_CONNECTION_ERROR , 819 md•_d©a -> `func (0, md•_d©a-> d©a , g”r ); 820 `g_”rÜ_ä“ ( g”r ); 824 ià(! `g‘_md•_äom_»c ( »cs -> d©a , md•_d©a -> ­p -> rÞe , 825 md•_d©a -> ­p -> d©a_ty³ , & md• , NULL )) { 826 `g_£t_”rÜ (& g”r , HDP_ERROR , HDP_CONNECTION_ERROR , 828 md•_d©a -> `func (0, md•_d©a-> d©a , g”r ); 829 `g_”rÜ_ä“ ( g”r ); 833 md•_d©a -> `func ( md• , md•_d©a-> d©a , NULL ); 834 } } 836  $ä“_md•_d©a ( gpoš‹r d©a ) 838  g‘_md•_d©a * md•_d©a = d©a ; 840 ià( md•_d©a -> de¡roy ) 841 md•_d©a -> `de¡roy (md•_d©a-> d©a ); 842 `hdp_­¶iÿtiÚ_uÄef ( md•_d©a -> ­p ); 844 `g_ä“ ( md•_d©a ); 845 } } 847 gboÞ—n $hdp_g‘_md• ( hdp_deviû * deviû ,  hdp_­¶iÿtiÚ * ­p , 848 hdp_cÚtšue_md•_f func , gpoš‹r d©a , 849 GDe¡royNÙify de¡roy , GE¼Ü ** ”r ) 851  g‘_md•_d©a * md•_d©a ; 852 cÚ¡ bdaddr_t * ¤c ; 853 cÚ¡ bdaddr_t * d¡ ; 854 uuid_t uuid ; 856 ¤c = `btd_ad­‹r_g‘_add»ss ( `deviû_g‘_ad­‹r ( deviû -> dev )); 857 d¡ = `deviû_g‘_add»ss ( deviû -> dev ); 859 md•_d©a = `g_Ãw0 ( g‘_md•_d©a , 1); 860 md•_d©a -> ­p = `hdp_­¶iÿtiÚ_»f (app); 861 md•_d©a -> func = func; 862 md•_d©a -> d©a = data; 863 md•_d©a -> de¡roy = destroy; 865 `bt_¡ršg2uuid (& uuid , HDP_UUID ); 866 ià( `bt_£¬ch_£rviû ( ¤c , d¡ , & uuid , g‘_md•_cb , md•_d©a , 867 ä“_md•_d©a , 0) < 0) { 868 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_CONNECTION_ERROR , 870 `g_ä“ ( md•_d©a ); 871  FALSE ; 874  TRUE ; 875 } } 877  gboÞ—n $g‘_´Ù_desc_’Œy ( sdp_d©a_t * ’Œy ,  ty³ , gušt16 * v® ) 879 sdp_d©a_t * ™” ; 880  ´Ùo ; 882 ià( ’Œy =ð NULL || ! `SDP_IS_SEQ ÓÁry-> dtd )) 883  FALSE ; 885 ™” = ’Œy -> v® . d©a£q ; 886 ià(!( ™” -> dtd & SDP_UUID_UNSPEC )) 887  FALSE ; 889 ´Ùo = `sdp_uuid_to_´Ùo (& ™” -> v® . uuid ); 890 ià( ´Ùo !ð ty³ ) 891  FALSE ; 893 ià( v® =ð NULL ) 894  TRUE ; 896 ™” = i‹r-> Ãxt ; 897 ià( ™” -> dtd !ð SDP_UINT16 ) 898  FALSE ; 900 * v® = ™” ->v®. ušt16 ; 902  TRUE ; 903 } } 905  gboÞ—n $hdp_g‘_´Ù_desc_li¡ (cÚ¡ sdp_»cÜd_t * »c , gušt16 * psm , 906 gušt16 * v”siÚ ) 908 sdp_d©a_t * pdl , * p0 , * p1 ; 910 ià( psm =ð NULL && v”siÚ == NULL) 911  TRUE ; 913 pdl = `sdp_d©a_g‘ ( »c , SDP_ATTR_PROTO_DESC_LIST ); 914 ià( pdl =ð NULL || ! `SDP_IS_SEQ Õdl-> dtd )) 915  FALSE ; 917 p0 = pdl -> v® . d©a£q ; 918 ià(! `g‘_´Ù_desc_’Œy ( p0 , L2CAP_UUID , psm )) 919  FALSE ; 921 p1 = p0 -> Ãxt ; 922 ià(! `g‘_´Ù_desc_’Œy ( p1 , MCAP_CTRL_UUID , v”siÚ )) 923  FALSE ; 925  TRUE ; 926 } } 928  gboÞ—n $hdp_g‘_add_´Ù_desc_li¡ (cÚ¡ sdp_»cÜd_t * »c , 929 gušt16 * psm ) 931 sdp_d©a_t * pdl , * p0 , * p1 ; 933 ià( psm =ð NULL ) 934  TRUE ; 936 pdl = `sdp_d©a_g‘ ( »c , SDP_ATTR_ADD_PROTO_DESC_LIST ); 937 ià( pdl =ð NULL ||…dl-> dtd !ð SDP_SEQ8 ) 938  FALSE ; 939 pdl =…dl-> v® . d©a£q ; 940 ià( pdl -> dtd !ð SDP_SEQ8 ) 941  FALSE ; 943 p0 = pdl -> v® . d©a£q ; 945 ià(! `g‘_´Ù_desc_’Œy ( p0 , L2CAP_UUID , psm )) 946  FALSE ; 947 p1 = p0 -> Ãxt ; 948 ià(! `g‘_´Ù_desc_’Œy ( p1 , MCAP_DATA_UUID , NULL )) 949  FALSE ; 951  TRUE ; 952 } } 954  gboÞ—n $g‘_cýsm ( sdp_li¡_t * »cs , ušt16_t * cýsm ) 956 sdp_li¡_t * l ; 958  l = »cs ;†;† =†-> Ãxt ) { 959 sdp_»cÜd_t * »c = l -> d©a ; 961 ià( `hdp_g‘_´Ù_desc_li¡ ( »c , cýsm , NULL )) 962  TRUE ; 965  FALSE ; 966 } } 968  gboÞ—n $g‘_dýsm ( sdp_li¡_t * »cs , ušt16_t * dýsm ) 970 sdp_li¡_t * l ; 972  l = »cs ;†;† =†-> Ãxt ) { 973 sdp_»cÜd_t * »c = l -> d©a ; 975 ià( `hdp_g‘_add_´Ù_desc_li¡ ( »c , dýsm )) 976  TRUE ; 979  FALSE ; 980 } } 982  $cÚ_mþ_d©a_uÄef ( cÚn_mþ_d©a * cÚn_d©a ) 984 ià( cÚn_d©a =ð NULL ) 987 ià(-- cÚn_d©a -> »fs > 0) 990 ià( cÚn_d©a -> de¡roy ) 991 cÚn_d©a -> `de¡roy (cÚn_d©a-> d©a ); 993 `h—Éh_deviû_uÄef ( cÚn_d©a -> dev ); 994 `g_ä“ ( cÚn_d©a ); 995 } } 997  $de¡roy_cÚ_mþ_d©a ( gpoš‹r d©a ) 999 `cÚ_mþ_d©a_uÄef ( d©a ); 1000 } } 1002  cÚn_mþ_d©a * $cÚ_mþ_d©a_»f ( cÚn_mþ_d©a * cÚn_d©a ) 1004 ià( cÚn_d©a =ð NULL ) 1005  NULL ; 1007 cÚn_d©a -> »fs ++; 1008  cÚn_d©a ; 1009 } } 1011  $ü—‹_mþ_cb ( mÿp_mþ * mþ , GE¼Ü * ”r , gpoš‹r d©a ) 1013  cÚn_mþ_d©a * cÚn_d©a = d©a ; 1014  hdp_deviû * deviû = cÚn_d©a -> dev ; 1015 GE¼Ü * g”r = NULL ; 1017 ià( ”r !ð NULL ) { 1018 cÚn_d©a -> `func (cÚn_d©a-> d©a , ”r ); 1022 ià( deviû -> mþ =ð NULL ) 1023 deviû -> mþ = `mÿp_mþ_»f (mcl); 1024 deviû -> mþ_cÚn = TRUE ; 1026 `hdp_£t_mþ_cb ( deviû , & g”r ); 1028 cÚn_d©a -> `func (cÚn_d©a-> d©a , g”r ); 1029 ià( g”r !ð NULL ) 1030 `g_”rÜ_ä“ ( g”r ); 1031 } } 1033  $£¬ch_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r u£r_d©a ) 1035  cÚn_mþ_d©a * cÚn_d©a = u£r_d©a ; 1036 GE¼Ü * g”r = NULL ; 1037 ušt16_t cýsm ; 1039 ià( cÚn_d©a -> dev -> hdp_ad­‹r -> mi =ð NULL ) { 1040 `g_£t_”rÜ (& g”r , HDP_ERROR , HDP_CONNECTION_ERROR , 1042  çž ; 1045 ià( ”r < 0 || »cs =ð NULL ) { 1046 `g_£t_”rÜ (& g”r , HDP_ERROR , HDP_CONNECTION_ERROR , 1048  çž ; 1051 ià(! `g‘_cýsm ( »cs , & cýsm )) { 1052 `g_£t_”rÜ (& g”r , HDP_ERROR , HDP_CONNECTION_ERROR , 1054  çž ; 1057 cÚn_d©a = `cÚ_mþ_d©a_»f (conn_data); 1059 ià(! `mÿp_ü—‹_mþ ( cÚn_d©a -> dev -> hdp_ad­‹r -> mi , 1060 `deviû_g‘_add»ss ( cÚn_d©a -> dev ->dev), 1061 cýsm , ü—‹_mþ_cb , cÚn_d©a , 1062 de¡roy_cÚ_mþ_d©a , & g”r )) { 1063 `cÚ_mþ_d©a_uÄef ( cÚn_d©a ); 1064  çž ; 1067 çž : 1068 cÚn_d©a -> `func (cÚn_d©a-> d©a , g”r ); 1069 `g_”rÜ_ä“ ( g”r ); 1070 } } 1072 gboÞ—n $hdp_e¡ablish_mþ ( hdp_deviû * deviû , 1073 hdp_cÚtšue_´oc_f func , 1074 gpoš‹r d©a , 1075 GDe¡royNÙify de¡roy , 1076 GE¼Ü ** ”r ) 1078  cÚn_mþ_d©a * cÚn_d©a ; 1079 cÚ¡ bdaddr_t * ¤c ; 1080 cÚ¡ bdaddr_t * d¡ ; 1081 uuid_t uuid ; 1083 ¤c = `btd_ad­‹r_g‘_add»ss ( `deviû_g‘_ad­‹r ( deviû -> dev )); 1084 d¡ = `deviû_g‘_add»ss ( deviû -> dev ); 1086 cÚn_d©a = `g_Ãw0 ( cÚn_mþ_d©a , 1); 1087 cÚn_d©a -> »fs = 1; 1088 cÚn_d©a -> func = func; 1089 cÚn_d©a -> d©a = data; 1090 cÚn_d©a -> de¡roy = destroy; 1091 cÚn_d©a -> dev = `h—Éh_deviû_»f ( deviû ); 1093 `bt_¡ršg2uuid (& uuid , HDP_UUID ); 1094 ià( `bt_£¬ch_£rviû ( ¤c , d¡ , & uuid , £¬ch_cb , cÚn_d©a , 1095 de¡roy_cÚ_mþ_d©a , 0) < 0) { 1096 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_CONNECTION_ERROR , 1098 `g_ä“ ( cÚn_d©a ); 1099  FALSE ; 1102  TRUE ; 1103 } } 1105  $g‘_dýsm_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r d©a ) 1107  g‘_dýsm_d©a * dýsm_d©a = d©a ; 1108 GE¼Ü * g”r = NULL ; 1109 ušt16_t dýsm ; 1111 ià( ”r < 0 || »cs =ð NULL ) { 1112 `g_£t_”rÜ (& g”r , HDP_ERROR , HDP_CONNECTION_ERROR , 1114  çž ; 1117 ià(! `g‘_dýsm ( »cs , & dýsm )) { 1118 `g_£t_”rÜ (& g”r , HDP_ERROR , HDP_CONNECTION_ERROR , 1120  çž ; 1123 dýsm_d©a -> `func ( dýsm , dýsm_d©a-> d©a , NULL ); 1126 çž : 1127 dýsm_d©a -> `func (0, dýsm_d©a-> d©a , g”r ); 1128 `g_”rÜ_ä“ ( g”r ); 1129 } } 1131  $ä“_dýsm_d©a ( gpoš‹r d©a ) 1133  g‘_dýsm_d©a * dýsm_d©a = d©a ; 1135 ià( dýsm_d©a =ð NULL ) 1138 ià( dýsm_d©a -> de¡roy ) 1139 dýsm_d©a -> `de¡roy (dýsm_d©a-> d©a ); 1141 `g_ä“ ( dýsm_d©a ); 1142 } } 1144 gboÞ—n $hdp_g‘_dýsm ( hdp_deviû * deviû , hdp_cÚtšue_dýsm_f func , 1145 gpoš‹r d©a , 1146 GDe¡royNÙify de¡roy , 1147 GE¼Ü ** ”r ) 1149  g‘_dýsm_d©a * dýsm_d©a ; 1150 cÚ¡ bdaddr_t * ¤c ; 1151 cÚ¡ bdaddr_t * d¡ ; 1152 uuid_t uuid ; 1154 ¤c = `btd_ad­‹r_g‘_add»ss ( `deviû_g‘_ad­‹r ( deviû -> dev )); 1155 d¡ = `deviû_g‘_add»ss ( deviû -> dev ); 1157 dýsm_d©a = `g_Ãw0 ( g‘_dýsm_d©a , 1); 1158 dýsm_d©a -> func = func; 1159 dýsm_d©a -> d©a = data; 1160 dýsm_d©a -> de¡roy = destroy; 1162 `bt_¡ršg2uuid (& uuid , HDP_UUID ); 1163 ià( `bt_£¬ch_£rviû ( ¤c , d¡ , & uuid , g‘_dýsm_cb , dýsm_d©a , 1164 ä“_dýsm_d©a , 0) < 0) { 1165 `g_£t_”rÜ ( ”r , HDP_ERROR , HDP_CONNECTION_ERROR , 1167 `g_ä“ ( dýsm_d©a ); 1168  FALSE ; 1171  TRUE ; 1172 } } 1174  $hdp_ä“_­¶iÿtiÚ ( hdp_­¶iÿtiÚ * ­p ) 1176 ià( ­p -> dbus_w©ch” > 0) 1177 `g_dbus_»move_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), 1178 ­p -> dbus_w©ch” ); 1180 `g_ä“ ( ­p -> Úame ); 1181 `g_ä“ ( ­p -> desütiÚ ); 1182 `g_ä“ ( ­p -> ·th ); 1183 `g_ä“ ( ­p ); 1184 } } 1186  hdp_­¶iÿtiÚ * $hdp_­¶iÿtiÚ_»f ( hdp_­¶iÿtiÚ * ­p ) 1188 ià( ­p =ð NULL ) 1189  NULL ; 1191 ­p -> »f ++; 1193 `DBG ("h—Éh_­¶iÿtiÚ_»f(%p):„ef=%d", ­p ,‡µ-> »f ); 1194  ­p ; 1195 } } 1197  $hdp_­¶iÿtiÚ_uÄef ( hdp_­¶iÿtiÚ * ­p ) 1199 ià( ­p =ð NULL ) 1202 ­p -> »f --; 1204 `DBG ("h—Éh_­¶iÿtiÚ_uÄef(%p):„ef=%d", ­p ,‡µ-> »f ); 1205 ià( ­p -> »f > 0) 1208 `hdp_ä“_­¶iÿtiÚ ( ­p ); 1209 } } @profiles/health/hdp_util.h 23 #iâdeà __HDP_UTIL_H__ 24  #__HDP_UTIL_H__ ) 26 (* thdp_cÚtšue_md•_f )( tušt8_t tmd• , tgpoš‹r tu£r_d©a , 27 tGE¼Ü * t”r ); 28 (* thdp_cÚtšue_dýsm_f )( tušt16_t tdýsm , tgpoš‹r tu£r_d©a , 29 tGE¼Ü * t”r ); 30 (* thdp_cÚtšue_´oc_f )( tgpoš‹r tu£r_d©a , tGE¼Ü * t”r ); 32  hdp_­¶iÿtiÚ * `hdp_g‘_­p_cÚfig ( DBusMes§geI‹r * ™” , GE¼Ü ** ”r ); 33 gboÞ—n `hdp_upd©e_sdp_»cÜd ( hdp_ad­‹r * ad­‹r , GSLi¡ * ­p_li¡ ); 34 gboÞ—n `hdp_g‘_md• ( hdp_deviû * deviû ,  hdp_­¶iÿtiÚ * ­p , 35 hdp_cÚtšue_md•_f func , 36 gpoš‹r d©a , GDe¡royNÙify de¡roy , 37 GE¼Ü ** ”r ); 39 gboÞ—n `hdp_e¡ablish_mþ ( hdp_deviû * deviû , 40 hdp_cÚtšue_´oc_f func , 41 gpoš‹r d©a , 42 GDe¡royNÙify de¡roy , 43 GE¼Ü ** ”r ); 45 gboÞ—n `hdp_g‘_dýsm ( hdp_deviû * deviû , hdp_cÚtšue_dýsm_f func , 46 gpoš‹r d©a , 47 GDe¡royNÙify de¡roy , 48 GE¼Ü ** ”r ); 51  hdp_­¶iÿtiÚ * `hdp_­¶iÿtiÚ_»f (hdp_­¶iÿtiÚ * ­p ); 52  `hdp_­¶iÿtiÚ_uÄef ( hdp_­¶iÿtiÚ * ­p ); 54  hdp_deviû * `h—Éh_deviû_»f (hdp_deviû * hdp_dev ); 55  `h—Éh_deviû_uÄef ( hdp_deviû * hdp_dev ); @profiles/health/mcap.c 25 #ifdeà HAVE_CONFIG_H 26  ~"cÚfig.h " 29  ~<Ãtš‘/š.h > 30  ~<¡dlib.h > 31  ~<”ºo.h > 32  ~ 34  ~ 36  ~"lib/blu‘oÙh.h " 37  ~"blu‘oÙh/l2ÿp.h " 38  ~"btio/btio.h " 39  ~"¤c/log.h " 41  ~"mÿp.h " 43  #MCAP_BTCLOCK_HALF ( MCAP_BTCLOCK_FIELD / 2) ) 44  #CLK CLOCK_MONOTONIC ) 46  #MCAP_CSP_ERROR `g_qu¬k_äom_¡©ic_¡ršg ("mÿp-c¥-”rÜ-qu¬k") ) 47  #MAX_RETRIES 10 ) 48  #SAMPLE_COUNT 20 ) 50  #RESPONSE_TIMER 6 ) 51  #MAX_CACHED 10 ) 53  #MCAP_ERROR `g_qu¬k_äom_¡©ic_¡ršg ("mÿp-”rÜ-qu¬k") ) 55  #RELEASE_TIMER ( __mþ ) do { \ 56 ià( __mþ -> tid ) { \ 57 `g_sourû_»move ( __mþ -> tid ); \ 58 __mþ -> tid = 0; \ 60 } 0) ) 62  smÿp_c¥ { 63 ušt64_t mba£_tm¡amp ; 64  time¥ec mba£_time ; 65 gušt mloÿl_ÿps ; 66 gušt m»mÙe_ÿps ; 67 gušt m»m_»q_acc ; 68 gušt mšd_ex³ùed ; 69 ušt8_t mc¥_»q ; 70 gušt mšd_tim” ; 71 gušt m£t_tim” ; 72 * m£t_d©a ; 73 * mc¥_´iv_d©a ; 76  smÿp_sync_ÿp_cbd©a { 77 mÿp_sync_ÿp_cb mcb ; 78 gpoš‹r mu£r_d©a ; 81  smÿp_sync_£t_cbd©a { 82 mÿp_sync_£t_cb mcb ; 83 gpoš‹r mu£r_d©a ; 86  sc¥_ÿps { 87  mts_acc ; 88  mts_»s ; 89  mÏ‹ncy ; 90  m´“m±_th»sh ; 91  msynþ—dtime_ms ; 94  ssync_£t_d©a { 95 ušt8_t mupd©e ; 96 ušt32_t msched_btþock ; 97 ušt64_t mtime¡amp ; 98  mšd_äeq ; 99 gboÞ—n mrÞe ; 102  scÚÃù_mþ { 103  mÿp_mþ * mmþ ; 104 mÿp_mþ_cÚÃù_cb mcÚÃù_cb ; 105 GDe¡royNÙify mde¡roy ; 106 gpoš‹r mu£r_d©a ; 110 mÿp_mdl_Ý”©iÚ_cb mÝ ; 111 mÿp_mdl_Ý”©iÚ_cÚf_cb mÝ_cÚf ; 112 mÿp_mdl_nÙify_cb mnÙify ; 113 } tmÿp_cb_ty³ ; 115  smÿp_mdl_Ý_cb { 116  mÿp_mdl * mmdl ; 117 mÿp_cb_ty³ mcb ; 118 GDe¡royNÙify mde¡roy ; 119 gpoš‹r mu£r_d©a ; 123  ´oc_»q_cÚÃùed ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t l ); 124  ´oc_»q_³ndšg ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t l ); 125  ´oc_»q_aùive ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t l ); 127 (* ´oc_»q [])( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t Ën ) = { 128 ´oc_»q_cÚÃùed , 129 ´oc_»q_³ndšg , 130 ´oc_»q_aùive 131 } }; 133  gboÞ—n gc¥_ÿps_š™Ÿlized = FALSE ; 134  c¥_ÿps g_ÿps ; 136  mÿp_ÿche_mþ ( mÿp_mþ * mþ ); 138  $deçuÉ_mdl_cÚÃùed_cb ( mÿp_mdl * mdl , gpoš‹r d©a ) 140 `DBG ("MCAP Unmanaged mdl connection"); 141 } } 143  $deçuÉ_mdl_þo£d_cb ( mÿp_mdl * mdl , gpoš‹r d©a ) 145 `DBG ("MCAP Unmanaged mdl closed"); 146 } } 148  $deçuÉ_mdl_d–‘ed_cb ( mÿp_mdl * mdl , gpoš‹r d©a ) 150 `DBG ("MCAP Unmanaged mdl deleted"); 151 } } 153  $deçuÉ_mdl_abÜ‹d_cb ( mÿp_mdl * mdl , gpoš‹r d©a ) 155 `DBG ("MCAP Unmanaged mdl‡borted"); 156 } } 158  ušt8_t $deçuÉ_mdl_cÚn_»q_cb ( mÿp_mþ * mþ , 159 ušt8_t md•id , ušt16_t mdlid , 160 ušt8_t * cÚf , gpoš‹r d©a ) 162 `DBG ("MCAP mdl„emote connection‡borted"); 164  MCAP_REQUEST_NOT_SUPPORTED ; 165 } } 167  ušt8_t $deçuÉ_mdl_»cÚn_»q_cb ( mÿp_mdl * mdl , 168 gpoš‹r d©a ) 170 `DBG ("MCAP mdl„emote„econnection‡borted"); 172  MCAP_REQUEST_NOT_SUPPORTED ; 173 } } 175  $£t_deçuÉ_cb ( mÿp_mþ * mþ ) 177 ià(! mþ -> cb ) 178 mþ -> cb = `g_Ãw0 ( mÿp_mdl_cb , 1); 180 mþ -> cb -> mdl_cÚÃùed = deçuÉ_mdl_cÚÃùed_cb ; 181 mþ -> cb -> mdl_þo£d = deçuÉ_mdl_þo£d_cb ; 182 mþ -> cb -> mdl_d–‘ed = deçuÉ_mdl_d–‘ed_cb ; 183 mþ -> cb -> mdl_abÜ‹d = deçuÉ_mdl_abÜ‹d_cb ; 184 mþ -> cb -> mdl_cÚn_»q = deçuÉ_mdl_cÚn_»q_cb ; 185 mþ -> cb -> mdl_»cÚn_»q = deçuÉ_mdl_»cÚn_»q_cb ; 186 } } 188 * $”rÜ2¡r ( ušt8_t rc ) 190  rc ) { 191  MCAP_SUCCESS : 193  MCAP_INVALID_OP_CODE : 195  MCAP_INVALID_PARAM_VALUE : 197  MCAP_INVALID_MDEP : 199  MCAP_MDEP_BUSY : 201  MCAP_INVALID_MDL : 203  MCAP_MDL_BUSY : 205  MCAP_INVALID_OPERATION : 207  MCAP_RESOURCE_UNAVAILABLE : 209  MCAP_UNSPECIFIED_ERROR : 211  MCAP_REQUEST_NOT_SUPPORTED : 213  MCAP_CONFIGURATION_REJECTED : 218 } } 220  gboÞ—n $mÿp_£nd_¡d_Ýcode ( mÿp_mþ * mþ , * cmd , 221 ušt32_t size , GE¼Ü ** ”r ) 223 ià( mþ -> ¡©e =ð MCL_IDLE ) { 224 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_FAILED , 226  FALSE ; 229 ià( mþ -> »q !ð MCL_AVAILABLE ) { 230 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_RESOURCE_UNAVAILABLE , 232  FALSE ; 235 ià(!( mþ -> ù¾ & MCAP_CTRL_STD_OP )) { 236 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_REQUEST_NOT_SUPPORTED , 238  FALSE ; 241 ià( mþ -> ¡©e =ð MCL_PENDING ) { 242 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_INVALID_OPERATION , 244  FALSE ; 247 ià( `mÿp_£nd_d©a ( `g_io_chªÃl_unix_g‘_fd ( mþ -> cc ), cmd , size ) < 0) { 248 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_FAILED , 250  FALSE ; 253 mþ -> lcmd = cmd ; 254 mþ -> »q = MCL_WAITING_RSP ; 256  TRUE ; 257 } } 259  $upd©e_mþ_¡©e ( mÿp_mþ * mþ ) 261 GSLi¡ * l ; 262  mÿp_mdl * mdl ; 264 ià( mþ -> ¡©e =ð MCL_PENDING ) 267  l = mþ -> mdls ;†;† =†-> Ãxt ) { 268 mdl = l -> d©a ; 270 ià( mdl -> ¡©e =ð MDL_CONNECTED ) { 271 mþ -> ¡©e = MCL_ACTIVE ; 276 mþ -> ¡©e = MCL_CONNECTED ; 277 } } 279  $shutdown_mdl ( mÿp_mdl * mdl ) 281 mdl -> ¡©e = MDL_CLOSED ; 283 ià( mdl -> wid ) { 284 `g_sourû_»move ( mdl -> wid ); 285 mdl -> wid = 0; 288 ià( mdl -> dc ) { 289 `g_io_chªÃl_shutdown ( mdl -> dc , TRUE , NULL ); 290 `g_io_chªÃl_uÄef ( mdl -> dc ); 291 mdl -> dc = NULL ; 293 } } 295  $ä“_mdl ( mÿp_mdl * mdl ) 297 ià(! mdl ) 300 `mÿp_mþ_uÄef ( mdl -> mþ ); 301 `g_ä“ ( mdl ); 302 } } 304  $cmp_mdl_¡©e ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 306 cÚ¡  mÿp_mdl * mdl = a ; 307 cÚ¡ MDLS‹ * ¡ = b ; 309 ià( mdl -> ¡©e =ð* ¡ ) 311 ià( mdl -> ¡©e < * ¡ ) 315 } } 317  $ä“_mÿp_mdl_Ý ( mÿp_mdl_Ý_cb * Ý ) 319 ià( Ý -> de¡roy ) 320 Ý -> `de¡roy (Ý-> u£r_d©a ); 322 ià( Ý -> mdl ) 323 `mÿp_mdl_uÄef ( Ý -> mdl ); 325 `g_ä“ ( Ý ); 326 } } 328  $ä“_mþ_´iv_d©a ( mÿp_mþ * mþ ) 330 `ä“_mÿp_mdl_Ý ( mþ -> ´iv_d©a ); 331 mþ -> ´iv_d©a = NULL ; 332 } } 334  $mÿp_nÙify_”rÜ ( mÿp_mþ * mþ , GE¼Ü * ”r ) 336  mÿp_mdl_Ý_cb * cÚ = mþ -> ´iv_d©a ; 337  mÿp_mdl * mdl ; 338 MDLS‹ ¡ ; 339 GSLi¡ * l ; 341 ià(! cÚ || ! mþ -> lcmd ) 344  mþ -> lcmd [0]) { 345  MCAP_MD_CREATE_MDL_REQ : 346 ¡ = MDL_WAITING ; 347 l = `g_¦i¡_fšd_cu¡om ( mþ -> mdls , & ¡ , cmp_mdl_¡©e ); 348 mdl = l -> d©a ; 349 mþ -> mdls = `g_¦i¡_»move (mþ->mdls, mdl ); 350 `mÿp_mdl_uÄef ( mdl ); 351 `upd©e_mþ_¡©e ( mþ ); 352 cÚ -> cb . `Ý_cÚf ( NULL , 0, ”r , cÚ-> u£r_d©a ); 354  MCAP_MD_ABORT_MDL_REQ : 355 ¡ = MDL_WAITING ; 356 l = `g_¦i¡_fšd_cu¡om ( mþ -> mdls , & ¡ , cmp_mdl_¡©e ); 357 `shutdown_mdl ( l -> d©a ); 358 `upd©e_mþ_¡©e ( mþ ); 359 cÚ -> cb . `nÙify ( ”r , cÚ-> u£r_d©a ); 361  MCAP_MD_DELETE_MDL_REQ : 362  l = mþ -> mdls ;†;† =†-> Ãxt ) { 363 mdl = l -> d©a ; 364 ià( mdl -> ¡©e =ð MDL_DELETING ) 365 mdl -> ¡©e = (mdl-> dc è? MDL_CONNECTED : 366 MDL_CLOSED ; 368 `upd©e_mþ_¡©e ( mþ ); 369 cÚ -> cb . `nÙify ( ”r , cÚ-> u£r_d©a ); 371  MCAP_MD_RECONNECT_MDL_REQ : 372 ¡ = MDL_WAITING ; 373 l = `g_¦i¡_fšd_cu¡om ( mþ -> mdls , & ¡ , cmp_mdl_¡©e ); 374 `shutdown_mdl ( l -> d©a ); 375 `upd©e_mþ_¡©e ( mþ ); 376 cÚ -> cb . `Ý ( NULL , ”r , cÚ-> u£r_d©a ); 380 `ä“_mþ_´iv_d©a ( mþ ); 381 `g_ä“ ( mþ -> lcmd ); 382 mþ -> lcmd = NULL ; 383 } } 385  $mÿp_£nd_d©a ( sock , cÚ¡ * buf , ušt32_t size ) 387 cÚ¡ ušt8_t * buf_b = buf ; 388 ušt32_t £Á = 0; 390  £Á < size ) { 391  n = `wr™e ( sock , buf_b + £Á , size - sent); 392 ià( n < 0) 394 £Á +ð n ; 398 } } 400  $mÿp_£nd_cmd ( mÿp_mþ * mþ , ušt8_t oc , ušt8_ˆ rc , 401 ušt16_t mdl , ušt8_t * d©a , size_t Ën ) 403 mÿp_r¥ * cmd ; 404  sock , £Á ; 406 ià( mþ -> cc =ð NULL ) 409 sock = `g_io_chªÃl_unix_g‘_fd ( mþ -> cc ); 411 cmd = `g_m®loc (( mÿp_r¥ è+ Ën ); 412 cmd -> Ý = oc ; 413 cmd -> rc =„c; 414 cmd -> mdl = `htÚs (mdl); 416 ià( d©a && Ën > 0) 417 `memýy ( cmd -> d©a , d©a, Ën ); 419 £Á = `mÿp_£nd_d©a ( sock , cmd , ( mÿp_r¥ è+ Ën ); 420 `g_ä“ ( cmd ); 422  £Á ; 423 } } 425  mÿp_mdl * $g‘_mdl ( mÿp_mþ * mþ , ušt16_t mdlid ) 427 GSLi¡ * l ; 428  mÿp_mdl * mdl ; 430  l = mþ -> mdls ;†;† =†-> Ãxt ) { 431 mdl = l -> d©a ; 432 ià( mdlid =ð mdl ->mdlid) 433  mdl ; 436  NULL ; 437 } } 439  ušt16_t $g’”©e_mdlid ( mÿp_mþ * mþ ) 441 ušt16_t mdlid = mþ -> Ãxt_mdl ; 442  mÿp_mdl * mdl ; 445 mdl = `g‘_mdl ( mþ , mdlid ); 446 ià(! mdl ) { 447 mþ -> Ãxt_mdl = ( mdlid % MCAP_MDLID_FINAL ) + 1; 448  mdlid ; 450 mdlid = (mdlid % MCAP_MDLID_FINAL ) + 1; 451 }  mdlid !ð mþ -> Ãxt_mdl ); 455 } } 457  mÿp_md_»q * $ü—‹_»q ( ušt8_t Ý , ušt16_t mdl_id ) 459 mÿp_md_»q * »q_cmd ; 461 »q_cmd = `g_Ãw0 ( mÿp_md_»q , 1); 463 »q_cmd -> Ý = op; 464 »q_cmd -> mdl = `htÚs ( mdl_id ); 466  »q_cmd ; 467 } } 469  mÿp_md_ü—‹_mdl_»q * $ü—‹_mdl_»q ( ušt16_t mdl_id , ušt8_t md• , 470 ušt8_t cÚf ) 472 mÿp_md_ü—‹_mdl_»q * »q_mdl ; 474 »q_mdl = `g_Ãw0 ( mÿp_md_ü—‹_mdl_»q , 1); 476 »q_mdl -> Ý = MCAP_MD_CREATE_MDL_REQ ; 477 »q_mdl -> mdl = `htÚs ( mdl_id ); 478 »q_mdl -> md• = mdep; 479 »q_mdl -> cÚf = conf; 481  »q_mdl ; 482 } } 484  $com·»_mdl ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 486 cÚ¡  mÿp_mdl * mdÏ = a ; 487 cÚ¡  mÿp_mdl * mdlb = b ; 489 ià( mdÏ -> mdlid =ð mdlb ->mdlid) 491 ià( mdÏ -> mdlid < mdlb ->mdlid) 495 } } 497  gboÞ—n $wa™_»¥Ú£_tim” ( gpoš‹r d©a ) 499  mÿp_mþ * mþ = d©a ; 501 GE¼Ü * g”r = NULL ; 503 `RELEASE_TIMER ( mþ ); 505 `g_£t_”rÜ (& g”r , MCAP_ERROR , MCAP_ERROR_FAILED , 508 `mÿp_nÙify_”rÜ ( mþ , g”r ); 510 `g_”rÜ_ä“ ( g”r ); 511 mþ -> mi -> `mþ_discÚÃùed_cb (mþ, mþ->mi-> u£r_d©a ); 512 `mÿp_ÿche_mþ ( mþ ); 514  FALSE ; 515 } } 517 gboÞ—n $mÿp_ü—‹_mdl ( mÿp_mþ * mþ , 518 ušt8_t md•id , 519 ušt8_t cÚf , 520 mÿp_mdl_Ý”©iÚ_cÚf_cb cÚÃù_cb , 521 gpoš‹r u£r_d©a , 522 GDe¡royNÙify de¡roy , 523 GE¼Ü ** ”r ) 525  mÿp_mdl * mdl ; 526  mÿp_mdl_Ý_cb * cÚ ; 527 mÿp_md_ü—‹_mdl_»q * cmd ; 528 ušt16_t id ; 530 id = `g’”©e_mdlid ( mþ ); 531 ià(! id ) { 532 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_FAILED , 534  FALSE ; 537 mdl = `g_Ãw0 ( mÿp_mdl , 1); 538 mdl -> mþ = `mÿp_mþ_»f (mcl); 539 mdl -> mdlid = id ; 540 mdl -> md•_id = md•id ; 541 mdl -> ¡©e = MDL_WAITING ; 543 cÚ = `g_Ãw0 ( mÿp_mdl_Ý_cb , 1); 544 cÚ -> mdl = `mÿp_mdl_»f (mdl); 545 cÚ -> cb . Ý_cÚf = cÚÃù_cb ; 546 cÚ -> de¡roy = destroy; 547 cÚ -> u£r_d©a = user_data; 549 cmd = `ü—‹_mdl_»q ( id , md•id , cÚf ); 550 ià(! `mÿp_£nd_¡d_Ýcode ( mþ , cmd , ( mÿp_md_ü—‹_mdl_»q ), 551 ”r )) { 552 `mÿp_mdl_uÄef ( cÚ -> mdl ); 553 `g_ä“ ( cÚ ); 554 `g_ä“ ( cmd ); 555  FALSE ; 558 mþ -> ¡©e = MCL_ACTIVE ; 559 mþ -> ´iv_d©a = cÚ ; 561 mþ -> mdls = `g_¦i¡_š£¹_sÜ‹d (mþ->mdls, `mÿp_mdl_»f ( mdl ), 562 com·»_mdl ); 563 mþ -> tid = `g_timeout_add_£cÚds ( RESPONSE_TIMER , wa™_»¥Ú£_tim” , 564 mþ ); 565  TRUE ; 566 } } 568 gboÞ—n $mÿp_»cÚÃù_mdl ( mÿp_mdl * mdl , 569 mÿp_mdl_Ý”©iÚ_cb »cÚÃù_cb , 570 gpoš‹r u£r_d©a , 571 GDe¡royNÙify de¡roy , 572 GE¼Ü ** ”r ) 574  mÿp_mdl_Ý_cb * cÚ ; 575  mÿp_mþ * mþ = mdl ->mcl; 576 mÿp_md_»q * cmd ; 578 ià( mdl -> ¡©e !ð MDL_CLOSED ) { 579 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_FAILED , 581  FALSE ; 584 cmd = `ü—‹_»q ( MCAP_MD_RECONNECT_MDL_REQ , mdl -> mdlid ); 585 ià(! `mÿp_£nd_¡d_Ýcode ( mþ , cmd , ( mÿp_md_»q ), ”r )) { 586 `g_ä“ ( cmd ); 587  FALSE ; 590 mdl -> ¡©e = MDL_WAITING ; 592 cÚ = `g_Ãw0 ( mÿp_mdl_Ý_cb , 1); 593 cÚ -> mdl = `mÿp_mdl_»f (mdl); 594 cÚ -> cb . Ý = »cÚÃù_cb ; 595 cÚ -> de¡roy = destroy; 596 cÚ -> u£r_d©a = user_data; 598 mþ -> ¡©e = MCL_ACTIVE ; 599 mþ -> ´iv_d©a = cÚ ; 601 mþ -> tid = `g_timeout_add_£cÚds ( RESPONSE_TIMER , wa™_»¥Ú£_tim” , 602 mþ ); 603  TRUE ; 604 } } 606  gboÞ—n $£nd_d–‘e_»q ( mÿp_mþ * mþ , 607  mÿp_mdl_Ý_cb * cÚ , 608 ušt16_t mdlid , 609 GE¼Ü ** ”r ) 611 mÿp_md_»q * cmd ; 613 cmd = `ü—‹_»q ( MCAP_MD_DELETE_MDL_REQ , mdlid ); 614 ià(! `mÿp_£nd_¡d_Ýcode ( mþ , cmd , ( mÿp_md_»q ), ”r )) { 615 `g_ä“ ( cmd ); 616  FALSE ; 619 mþ -> ´iv_d©a = cÚ ; 621 mþ -> tid = `g_timeout_add_£cÚds ( RESPONSE_TIMER , wa™_»¥Ú£_tim” , 622 mþ ); 623  TRUE ; 624 } } 626 gboÞ—n $mÿp_d–‘e_®l_mdls ( mÿp_mþ * mþ , 627 mÿp_mdl_nÙify_cb d–‘e_cb , 628 gpoš‹r u£r_d©a , 629 GDe¡royNÙify de¡roy , 630 GE¼Ü ** ”r ) 632 GSLi¡ * l ; 633  mÿp_mdl * mdl ; 634  mÿp_mdl_Ý_cb * cÚ ; 636 `DBG ("MCL iÀ¡©e: %d", mþ -> ¡©e ); 637 ià(! mþ -> mdls ) { 638 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_FAILED , 640  FALSE ; 643  l = mþ -> mdls ;†;† =†-> Ãxt ) { 644 mdl = l -> d©a ; 645 ià( mdl -> ¡©e !ð MDL_WAITING ) 646 mdl -> ¡©e = MDL_DELETING ; 649 cÚ = `g_Ãw0 ( mÿp_mdl_Ý_cb , 1); 650 cÚ -> mdl = NULL ; 651 cÚ -> cb . nÙify = d–‘e_cb ; 652 cÚ -> de¡roy = destroy; 653 cÚ -> u£r_d©a = user_data; 656 ià(! `£nd_d–‘e_»q ( mþ , cÚ , MCAP_ALL_MDLIDS , ”r )) { 657 `g_ä“ ( cÚ ); 658  FALSE ; 661  TRUE ; 662 } } 664 gboÞ—n $mÿp_d–‘e_mdl ( mÿp_mdl * mdl , mÿp_mdl_nÙify_cb d–‘e_cb , 665 gpoš‹r u£r_d©a , 666 GDe¡royNÙify de¡roy , 667 GE¼Ü ** ”r ) 669  mÿp_mþ * mþ ð mdl ->mcl; 670  mÿp_mdl_Ý_cb * cÚ ; 671 GSLi¡ * l ; 673 l = `g_¦i¡_fšd ( mþ -> mdls , mdl ); 675 ià(! l ) { 676 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_INVALID_MDL , 677 "%s" , `”rÜ2¡r ( MCAP_INVALID_MDEP )); 678  FALSE ; 681 ià( mdl -> ¡©e =ð MDL_WAITING ) { 682 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_FAILED , 684  FALSE ; 687 mdl -> ¡©e = MDL_DELETING ; 689 cÚ = `g_Ãw0 ( mÿp_mdl_Ý_cb , 1); 690 cÚ -> mdl = `mÿp_mdl_»f (mdl); 691 cÚ -> cb . nÙify = d–‘e_cb ; 692 cÚ -> de¡roy = destroy; 693 cÚ -> u£r_d©a = user_data; 695 ià(! `£nd_d–‘e_»q ( mþ , cÚ , mdl -> mdlid , ”r )) { 696 `mÿp_mdl_uÄef ( cÚ -> mdl ); 697 `g_ä“ ( cÚ ); 698  FALSE ; 701  TRUE ; 702 } } 704 gboÞ—n $mÿp_mdl_abÜt ( mÿp_mdl * mdl , mÿp_mdl_nÙify_cb abÜt_cb , 705 gpoš‹r u£r_d©a , 706 GDe¡royNÙify de¡roy , 707 GE¼Ü ** ”r ) 709  mÿp_mdl_Ý_cb * cÚ ; 710  mÿp_mþ * mþ = mdl ->mcl; 711 mÿp_md_»q * cmd ; 713 ià( mdl -> ¡©e !ð MDL_WAITING ) { 714 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_FAILED , 716  FALSE ; 719 cmd = `ü—‹_»q ( MCAP_MD_ABORT_MDL_REQ , mdl -> mdlid ); 720 ià(! `mÿp_£nd_¡d_Ýcode ( mþ , cmd , ( mÿp_md_»q ), ”r )) { 721 `g_ä“ ( cmd ); 722  FALSE ; 725 cÚ = `g_Ãw0 ( mÿp_mdl_Ý_cb , 1); 726 cÚ -> mdl = `mÿp_mdl_»f (mdl); 727 cÚ -> cb . nÙify = abÜt_cb ; 728 cÚ -> de¡roy = destroy; 729 cÚ -> u£r_d©a = user_data; 731 mþ -> ´iv_d©a = cÚ ; 732 mþ -> tid = `g_timeout_add_£cÚds ( RESPONSE_TIMER , wa™_»¥Ú£_tim” , 733 mþ ); 734  TRUE ; 735 } } 737  mÿp_mþ * $fšd_mþ ( GSLi¡ * li¡ , cÚ¡ bdaddr_t * addr ) 739  mÿp_mþ * mþ ; 741 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 742 mþ = li¡ -> d©a ; 744 ià(! `bacmp (& mþ -> addr ,‡ddr)) 745  mþ ; 748  NULL ; 749 } } 751  $mÿp_mdl_g‘_fd ( mÿp_mdl * mdl ) 753 ià(! mdl || mdl-> ¡©e !ð MDL_CONNECTED ) 754  - ENOTCONN ; 756  `g_io_chªÃl_unix_g‘_fd ( mdl -> dc ); 757 } } 759 ušt16_t $mÿp_mdl_g‘_mdlid ( mÿp_mdl * mdl ) 761 ià(! mdl ) 762  MCAP_MDLID_RESERVED ; 764  mdl -> mdlid ; 765 } } 767  $þo£_mþ ( mÿp_mþ * mþ , gboÞ—n ÿche_»que¡ed ) 769 gboÞ—n §ve = ((!( mþ -> ù¾ & MCAP_CTRL_FREE )è&& ÿche_»que¡ed ); 771 `RELEASE_TIMER ( mþ ); 773 ià( mþ -> cc ) { 774 `g_io_chªÃl_shutdown ( mþ -> cc , TRUE , NULL ); 775 `g_io_chªÃl_uÄef ( mþ -> cc ); 776 mþ -> cc = NULL ; 779 ià( mþ -> wid ) { 780 `g_sourû_»move ( mþ -> wid ); 781 mþ -> wid = 0; 784 ià( mþ -> lcmd ) { 785 `g_ä“ ( mþ -> lcmd ); 786 mþ -> lcmd = NULL ; 789 ià( mþ -> ´iv_d©a ) 790 `ä“_mþ_´iv_d©a ( mþ ); 792 `g_¦i¡_fÜ—ch ( mþ -> mdls , ( GFunc è shutdown_mdl , NULL ); 794 `mÿp_sync_¡Ý ( mþ ); 796 mþ -> ¡©e = MCL_IDLE ; 798 ià( §ve ) 801 `g_¦i¡_fÜ—ch ( mþ -> mdls , ( GFunc è mÿp_mdl_uÄef , NULL ); 802 `g_¦i¡_ä“ ( mþ -> mdls ); 803 mþ -> mdls = NULL ; 804 } } 806  $mÿp_mþ_shutdown ( mÿp_mþ * mþ ) 808 `þo£_mþ ( mþ , TRUE ); 809 } } 811  $mÿp_mþ_»Ëa£ ( mÿp_mþ * mþ ) 813 `þo£_mþ ( mþ , FALSE ); 814 } } 816  $mÿp_ÿche_mþ ( mÿp_mþ * mþ ) 818 GSLi¡ * l ; 819  mÿp_mþ * Ï¡ ; 820  Ën ; 822 ià( mþ -> ù¾ & MCAP_CTRL_CACHED ) 825 mþ -> mi -> mþs = `g_¦i¡_»move (mcl->mi->mcls, mcl); 827 ià( mþ -> ù¾ & MCAP_CTRL_NOCACHE ) { 828 mþ -> mi -> ÿched = `g_¦i¡_»move (mcl->mi->cached, mcl); 829 `mÿp_mþ_»Ëa£ ( mþ ); 830 `mÿp_mþ_uÄef ( mþ ); 834 `DBG ("Caching MCL"); 836 Ën = `g_¦i¡_Ëngth ( mþ -> mi -> ÿched ); 837 ià( Ën =ð MAX_CACHED ) { 839 l = `g_¦i¡_Ï¡ ( mþ -> mi -> ÿched ); 840 Ï¡ = l -> d©a ; 841 mþ -> mi -> ÿched = `g_¦i¡_»move (mþ->mi->ÿched, Ï¡ ); 842 Ï¡ -> ù¾ &ð~ MCAP_CTRL_CACHED ; 843 ià( Ï¡ -> ù¾ & MCAP_CTRL_CONN ) { 848 Ï¡ -> ù¾ |ð MCAP_CTRL_FREE ; 850 `mÿp_mþ_»Ëa£ ( Ï¡ ); 851 Ï¡ -> mi -> `mþ_unÿched_cb Öa¡,†a¡->mi-> u£r_d©a ); 853 `mÿp_mþ_uÄef ( Ï¡ ); 856 mþ -> mi -> ÿched = `g_¦i¡_´•’d (mcl->mi->cached, mcl); 857 mþ -> ù¾ |ð MCAP_CTRL_CACHED ; 858 `mÿp_mþ_shutdown ( mþ ); 859 } } 861  $mÿp_unÿche_mþ ( mÿp_mþ * mþ ) 863 ià(!( mþ -> ù¾ & MCAP_CTRL_CACHED )) 866 `DBG ("Got MCL from cache"); 868 mþ -> mi -> ÿched = `g_¦i¡_»move (mcl->mi->cached, mcl); 869 mþ -> mi -> mþs = `g_¦i¡_´•’d (mcl->mi->mcls, mcl); 870 mþ -> ù¾ &ð~ MCAP_CTRL_CACHED ; 871 mþ -> ù¾ &ð~ MCAP_CTRL_FREE ; 872 } } 874  $mÿp_þo£_mþ ( mÿp_mþ * mþ , gboÞ—n ÿche ) 876 ià(! mþ ) 879 ià( mþ -> ù¾ & MCAP_CTRL_FREE ) { 880 `mÿp_mþ_»Ëa£ ( mþ ); 884 ià(! ÿche ) 885 mþ -> ù¾ |ð MCAP_CTRL_NOCACHE ; 887 ià( mþ -> cc ) { 888 `g_io_chªÃl_shutdown ( mþ -> cc , TRUE , NULL ); 889 `g_io_chªÃl_uÄef ( mþ -> cc ); 890 mþ -> cc = NULL ; 891 mþ -> ¡©e = MCL_IDLE ; 892 } ià(( mþ -> ù¾ & MCAP_CTRL_CACHED ) && 893 ( mþ -> ù¾ & MCAP_CTRL_NOCACHE )) { 894 mþ -> ù¾ &ð~ MCAP_CTRL_CACHED ; 895 mþ -> mi -> ÿched = `g_¦i¡_»move (mcl->mi->cached, mcl); 896 `mÿp_mþ_»Ëa£ ( mþ ); 897 `mÿp_mþ_uÄef ( mþ ); 899 } } 901  mÿp_mþ * $mÿp_mþ_»f ( mÿp_mþ * mþ ) 903 mþ -> »f ++; 905 `DBG ("mÿp_mþ_»f(%p):„ef=%d", mþ , mþ-> »f ); 907  mþ ; 908 } } 910  $mÿp_mþ_uÄef ( mÿp_mþ * mþ ) 912 mþ -> »f --; 914 `DBG ("mÿp_mþ_uÄef(%p):„ef=%d", mþ , mþ-> »f ); 916 ià( mþ -> »f > 0) 919 `mÿp_mþ_»Ëa£ ( mþ ); 920 `mÿp_š¡ªû_uÄef ( mþ -> mi ); 921 `g_ä“ ( mþ -> cb ); 922 `g_ä“ ( mþ ); 923 } } 925  gboÞ—n $·r£_£t_Ýts ( mÿp_mdl_cb * mdl_cb , GE¼Ü ** ”r , 926 MÿpMþCb cb1 , va_li¡ ¬gs ) 928 MÿpMþCb cb = cb1 ; 929  mÿp_mdl_cb * c ; 931 c = `g_Ãw0 ( mÿp_mdl_cb , 1); 933  cb !ð MCAP_MDL_CB_INVALID ) { 934  cb ) { 935  MCAP_MDL_CB_CONNECTED : 936 c -> mdl_cÚÃùed = `va_¬g ( ¬gs , mÿp_mdl_ev’t_cb ); 938  MCAP_MDL_CB_CLOSED : 939 c -> mdl_þo£d = `va_¬g ( ¬gs , mÿp_mdl_ev’t_cb ); 941  MCAP_MDL_CB_DELETED : 942 c -> mdl_d–‘ed = `va_¬g ( ¬gs , mÿp_mdl_ev’t_cb ); 944  MCAP_MDL_CB_ABORTED : 945 c -> mdl_abÜ‹d = `va_¬g ( ¬gs , mÿp_mdl_ev’t_cb ); 947  MCAP_MDL_CB_REMOTE_CONN_REQ : 948 c -> mdl_cÚn_»q = `va_¬g ( ¬gs , 949 mÿp_»mÙe_mdl_cÚn_»q_cb ); 951  MCAP_MDL_CB_REMOTE_RECONN_REQ : 952 c -> mdl_»cÚn_»q = `va_¬g ( ¬gs , 953 mÿp_»mÙe_mdl_»cÚn_»q_cb ); 955  MCAP_MDL_CB_INVALID : 957 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_INVALID_ARGS , 958 "UnknowÀÝtiÚ %d", cb ); 959 `g_ä“ ( c ); 960  FALSE ; 962 cb = `va_¬g ( ¬gs , ); 966 ià( c -> mdl_cÚÃùed ) 967 mdl_cb -> mdl_cÚÃùed = c ->mdl_connected; 968 ià( c -> mdl_þo£d ) 969 mdl_cb -> mdl_þo£d = c ->mdl_closed; 970 ià( c -> mdl_d–‘ed ) 971 mdl_cb -> mdl_d–‘ed = c ->mdl_deleted; 972 ià( c -> mdl_abÜ‹d ) 973 mdl_cb -> mdl_abÜ‹d = c ->mdl_aborted; 974 ià( c -> mdl_cÚn_»q ) 975 mdl_cb -> mdl_cÚn_»q = c ->mdl_conn_req; 976 ià( c -> mdl_»cÚn_»q ) 977 mdl_cb -> mdl_»cÚn_»q = c ->mdl_reconn_req; 979 `g_ä“ ( c ); 981  TRUE ; 982 } } 984 gboÞ—n $mÿp_mþ_£t_cb ( mÿp_mþ * mþ , gpoš‹r u£r_d©a , 985 GE¼Ü ** g”r , MÿpMþCb cb1 , ...) 987 va_li¡ ¬gs ; 988 gboÞ—n »t ; 990 `va_¡¬t ( ¬gs , cb1 ); 991 »t = `·r£_£t_Ýts ( mþ -> cb , g”r , cb1 , ¬gs ); 992 `va_’d ( ¬gs ); 994 ià(! »t ) 995  FALSE ; 997 mþ -> cb -> u£r_d©a = user_data; 998  TRUE ; 999 } } 1001  $mÿp_mþ_g‘_addr ( mÿp_mþ * mþ , bdaddr_t * addr ) 1003 `baýy ( addr , & mþ ->addr); 1004 } } 1006  $mÿp_d–_mdl ( gpoš‹r –em , gpoš‹¸ u£r_d©a ) 1008  mÿp_mdl * mdl = –em ; 1009 gboÞ—n nÙify = *(gboÞ—À*è u£r_d©a ; 1011 ià( nÙify ) 1012 mdl -> mþ -> cb -> `mdl_d–‘ed (mdl, mdl->mþ->cb-> u£r_d©a ); 1014 `shutdown_mdl ( mdl ); 1015 `mÿp_mdl_uÄef ( mdl ); 1016 } } 1018  gboÞ—n $check_cmd_»q_Ëngth ( mÿp_mþ * mþ , * cmd , 1019 ušt32_t ¾’ , ušt32_ˆ ex¶’ , ušt8_t r¥cod ) 1021 mÿp_md_»q * »q ; 1022 ušt16_t mdl_id ; 1024 ià( ¾’ !ð ex¶’ ) { 1025 ià( ¾’ >ð( mÿp_md_»q )) { 1026 »q = cmd ; 1027 mdl_id = `Áohs ( »q -> mdl ); 1030 mdl_id = MCAP_MDLID_RESERVED ; 1032 `mÿp_£nd_cmd ( mþ , r¥cod , MCAP_INVALID_PARAM_VALUE , mdl_id , 1033 NULL , 0); 1034  FALSE ; 1036  TRUE ; 1037 } } 1039  $´oûss_md_ü—‹_mdl_»q ( mÿp_mþ * mþ , * cmd , 1040 ušt32_t Ën ) 1042 mÿp_md_ü—‹_mdl_»q * »q ; 1043  mÿp_mdl * mdl ; 1044 ušt16_t mdl_id ; 1045 ušt8_t md•_id ; 1046 ušt8_t cfga , cÚf ; 1047 ušt8_t r¥ ; 1049 ià(! `check_cmd_»q_Ëngth ( mþ , cmd , Ën , ( mÿp_md_ü—‹_mdl_»q ), 1050 MCAP_MD_CREATE_MDL_RSP )) 1053 »q = cmd ; 1054 mdl_id = `Áohs ( »q -> mdl ); 1055 ià( mdl_id < MCAP_MDLID_INITIAL || mdl_id > MCAP_MDLID_FINAL ) { 1056 `mÿp_£nd_cmd ( mþ , MCAP_MD_CREATE_MDL_RSP , MCAP_INVALID_MDL , 1057 mdl_id , NULL , 0); 1061 md•_id = »q -> md• ; 1062 ià( md•_id > MCAP_MDEPID_FINAL ) { 1063 `mÿp_£nd_cmd ( mþ , MCAP_MD_CREATE_MDL_RSP , MCAP_INVALID_MDEP , 1064 mdl_id , NULL , 0); 1068 mdl = `g‘_mdl ( mþ , mdl_id ); 1069 ià( mdl && (mdl-> ¡©e =ð MDL_WAITING || mdl->¡©=ð MDL_DELETING )) { 1074 `mÿp_£nd_cmd ( mþ , MCAP_MD_CREATE_MDL_RSP , MCAP_MDL_BUSY , 1075 mdl_id , NULL , 0); 1079 cfga = cÚf = »q ->conf; 1081 r¥ = mþ -> cb -> `mdl_cÚn_»q (mþ, md•_id , mdl_id , & cÚf , 1082 mþ -> cb -> u£r_d©a ); 1083 ià( mþ -> ¡©e =ð MCL_IDLE ) { 1088 ià( cfga !ð0 && cfg¨!ð cÚf ) { 1094 `mÿp_£nd_cmd ( mþ , MCAP_MD_CREATE_MDL_RSP , 1095 MCAP_UNSPECIFIED_ERROR , mdl_id , NULL , 0); 1098 ià( r¥ !ð MCAP_SUCCESS ) { 1099 `mÿp_£nd_cmd ( mþ , MCAP_MD_CREATE_MDL_RSP , r¥ , mdl_id , 1100 NULL , 0); 1104 ià(! mdl ) { 1105 mdl = `g_Ãw0 ( mÿp_mdl , 1); 1106 mdl -> mþ = `mÿp_mþ_»f (mcl); 1107 mdl -> mdlid = mdl_id ; 1108 mþ -> mdls = `g_¦i¡_š£¹_sÜ‹d (mþ->mdls, `mÿp_mdl_»f ( mdl ), 1109 com·»_mdl ); 1110 } ià( mdl -> ¡©e =ð MDL_CONNECTED ) { 1115 `shutdown_mdl ( mdl ); 1118 mdl -> md•_id = mdep_id; 1119 mdl -> ¡©e = MDL_WAITING ; 1121 mþ -> ¡©e = MCL_PENDING ; 1122 `mÿp_£nd_cmd ( mþ , MCAP_MD_CREATE_MDL_RSP , MCAP_SUCCESS , mdl_id , 1123 & cÚf , 1); 1124 } } 1126  $´oûss_md_»cÚÃù_mdl_»q ( mÿp_mþ * mþ , * cmd , 1127 ušt32_t Ën ) 1129 mÿp_md_»q * »q ; 1130  mÿp_mdl * mdl ; 1131 ušt16_t mdl_id ; 1132 ušt8_t r¥ ; 1134 ià(! `check_cmd_»q_Ëngth ( mþ , cmd , Ën , ( mÿp_md_»q ), 1135 MCAP_MD_RECONNECT_MDL_RSP )) 1138 »q = cmd ; 1139 mdl_id = `Áohs ( »q -> mdl ); 1141 mdl = `g‘_mdl ( mþ , mdl_id ); 1142 ià(! mdl ) { 1143 `mÿp_£nd_cmd ( mþ , MCAP_MD_RECONNECT_MDL_RSP , MCAP_INVALID_MDL , 1144 mdl_id , NULL , 0); 1146 } ià( mdl -> ¡©e =ð MDL_WAITING || mdl->¡©=ð MDL_DELETING ) { 1151 `mÿp_£nd_cmd ( mþ , MCAP_MD_RECONNECT_MDL_RSP , MCAP_MDL_BUSY , 1152 mdl_id , NULL , 0); 1157 r¥ = mþ -> cb -> `mdl_»cÚn_»q ( mdl , mþ->cb-> u£r_d©a ); 1158 ià( mþ -> ¡©e =ð MCL_IDLE ) 1161 ià( r¥ !ð MCAP_SUCCESS ) { 1162 `mÿp_£nd_cmd ( mþ , MCAP_MD_RECONNECT_MDL_RSP , r¥ , mdl_id , 1163 NULL , 0); 1167 ià( mdl -> ¡©e =ð MDL_CONNECTED ) 1168 `shutdown_mdl ( mdl ); 1170 mdl -> ¡©e = MDL_WAITING ; 1171 mþ -> ¡©e = MCL_PENDING ; 1172 `mÿp_£nd_cmd ( mþ , MCAP_MD_RECONNECT_MDL_RSP , MCAP_SUCCESS , mdl_id , 1173 NULL , 0); 1174 } } 1176  $´oûss_md_abÜt_mdl_»q ( mÿp_mþ * mþ , * cmd , 1177 ušt32_t Ën ) 1179 mÿp_md_»q * »q ; 1180 GSLi¡ * l ; 1181  mÿp_mdl * mdl , * ab¹ ; 1182 ušt16_t mdl_id ; 1184 ià(! `check_cmd_»q_Ëngth ( mþ , cmd , Ën , ( mÿp_md_»q ), 1185 MCAP_MD_ABORT_MDL_RSP )) 1188 »q = cmd ; 1189 mdl_id = `Áohs ( »q -> mdl ); 1190 mþ -> ¡©e = MCL_CONNECTED ; 1191 ab¹ = NULL ; 1192  l = mþ -> mdls ;†;† =†-> Ãxt ) { 1193 mdl = l -> d©a ; 1194 ià( mdl_id =ð mdl -> mdlid && mdl-> ¡©e =ð MDL_WAITING ) { 1195 ab¹ = mdl ; 1196 ià( mþ -> ¡©e !ð MCL_CONNECTED ) 1200 ià( mdl -> ¡©e =ð MDL_CONNECTED && mþ ->¡©!ð MCL_ACTIVE ) 1201 mþ -> ¡©e = MCL_ACTIVE ; 1203 ià( ab¹ && mþ -> ¡©e =ð MCL_ACTIVE ) 1207 ià(! ab¹ ) { 1208 `mÿp_£nd_cmd ( mþ , MCAP_MD_ABORT_MDL_RSP , MCAP_INVALID_MDL , 1209 mdl_id , NULL , 0); 1213 mþ -> cb -> `mdl_abÜ‹d ( ab¹ , mþ->cb-> u£r_d©a ); 1214 ab¹ -> ¡©e = MDL_CLOSED ; 1215 `mÿp_£nd_cmd ( mþ , MCAP_MD_ABORT_MDL_RSP , MCAP_SUCCESS , mdl_id , 1216 NULL , 0); 1217 } } 1219  $´oûss_md_d–‘e_mdl_»q ( mÿp_mþ * mþ , * cmd , 1220 ušt32_t Ën ) 1222 mÿp_md_»q * »q ; 1223  mÿp_mdl * mdl , * aux ; 1224 ušt16_t mdlid ; 1225 gboÞ—n nÙify ; 1226 GSLi¡ * l ; 1228 ià(! `check_cmd_»q_Ëngth ( mþ , cmd , Ën , ( mÿp_md_»q ), 1229 MCAP_MD_DELETE_MDL_RSP )) 1232 »q = cmd ; 1233 mdlid = `Áohs ( »q -> mdl ); 1234 ià( mdlid =ð MCAP_ALL_MDLIDS ) { 1235 nÙify = TRUE ; 1236 `g_¦i¡_fÜ—ch ( mþ -> mdls , mÿp_d–_mdl , & nÙify ); 1237 `g_¦i¡_ä“ ( mþ -> mdls ); 1238 mþ -> mdls = NULL ; 1239 mþ -> ¡©e = MCL_CONNECTED ; 1240  »¥ ; 1243 ià( mdlid < MCAP_MDLID_INITIAL || mdlid > MCAP_MDLID_FINAL ) { 1244 `mÿp_£nd_cmd ( mþ , MCAP_MD_DELETE_MDL_RSP , MCAP_INVALID_MDL , 1245 mdlid , NULL , 0); 1249  l = mþ -> mdls , mdl = NULL ;†;† =†-> Ãxt ) { 1250 aux = l -> d©a ; 1251 ià( aux -> mdlid == mdlid) { 1252 mdl = aux ; 1257 ià(! mdl || mdl-> ¡©e =ð MDL_WAITING ) { 1258 `mÿp_£nd_cmd ( mþ , MCAP_MD_DELETE_MDL_RSP , MCAP_INVALID_MDL , 1259 mdlid , NULL , 0); 1263 mþ -> mdls = `g_¦i¡_»move (mþ->mdls, mdl ); 1264 `upd©e_mþ_¡©e ( mþ ); 1265 nÙify = TRUE ; 1266 `mÿp_d–_mdl ( mdl , & nÙify ); 1268 »¥ : 1269 `mÿp_£nd_cmd ( mþ , MCAP_MD_DELETE_MDL_RSP , MCAP_SUCCESS , mdlid , 1270 NULL , 0); 1271 } } 1273  $šv®id_»q_¡©e ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t Ën ) 1275 ušt16_t mdÌ ; 1277 `”rÜ ("Inv®id cmd„eûived (Ý codð%dèš s‹ %d", cmd [0], 1278 mþ -> ¡©e ); 1283 mdÌ = Ën < ( mÿp_md_»q è? MCAP_MDLID_RESERVED : 1284 `Áohs ((( mÿp_md_»q *è cmd )-> mdl ); 1285 `mÿp_£nd_cmd ( mþ , cmd [0]+1, MCAP_INVALID_OPERATION , mdÌ , NULL , 0); 1286 } } 1289  $´oc_»q_cÚÃùed ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t Ën ) 1291  cmd [0]) { 1292  MCAP_MD_CREATE_MDL_REQ : 1293 `´oûss_md_ü—‹_mdl_»q ( mþ , cmd , Ën ); 1295  MCAP_MD_RECONNECT_MDL_REQ : 1296 `´oûss_md_»cÚÃù_mdl_»q ( mþ , cmd , Ën ); 1298  MCAP_MD_DELETE_MDL_REQ : 1299 `´oûss_md_d–‘e_mdl_»q ( mþ , cmd , Ën ); 1302 `šv®id_»q_¡©e ( mþ , cmd , Ën ); 1304 } } 1306  $´oc_»q_³ndšg ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t Ën ) 1308 ià( cmd [0] =ð MCAP_MD_ABORT_MDL_REQ ) 1309 `´oûss_md_abÜt_mdl_»q ( mþ , cmd , Ën ); 1311 `šv®id_»q_¡©e ( mþ , cmd , Ën ); 1312 } } 1314  $´oc_»q_aùive ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t Ën ) 1316  cmd [0]) { 1317  MCAP_MD_CREATE_MDL_REQ : 1318 `´oûss_md_ü—‹_mdl_»q ( mþ , cmd , Ën ); 1320  MCAP_MD_RECONNECT_MDL_REQ : 1321 `´oûss_md_»cÚÃù_mdl_»q ( mþ , cmd , Ën ); 1323  MCAP_MD_DELETE_MDL_REQ : 1324 `´oûss_md_d–‘e_mdl_»q ( mþ , cmd , Ën ); 1327 `šv®id_»q_¡©e ( mþ , cmd , Ën ); 1329 } } 1332  gboÞ—n $check_”r_r¥ ( mÿp_mþ * mþ , mÿp_r¥ * r¥ , 1333 ušt32_t ¾’ , ušt32_ˆ Ën , GE¼Ü ** g”r ) 1335 mÿp_md_»q * cmdÏ¡ = (mÿp_md_»q *è mþ -> lcmd ; 1336  ”r = MCAP_ERROR_FAILED ; 1337 gboÞ—n þo£ = FALSE ; 1338 * msg ; 1340 ià( r¥ -> Ý =ð MCAP_ERROR_RSP ) { 1341 msg = "MCAP_ERROR_RSP„eceived"; 1342 þo£ = FALSE ; 1343  çž ; 1347 ià( ¾’ < ( mÿp_r¥ è|| ( mþ -> lcmd [0] + 1è!ð r¥ -> Ý ) { 1348 msg = "Protocolƒrror"; 1349 þo£ = FALSE ; 1350  çž ; 1353 ià( ¾’ < Ën ) { 1354 msg = "Protocolƒrror"; 1355 þo£ = FALSE ; 1356  çž ; 1359 ià( r¥ -> mdl !ð cmdÏ¡ ->mdl) { 1360 msg = "MDLID„eceived doesn't match with MDLID sent"; 1361 þo£ = TRUE ; 1362  çž ; 1365 ià( r¥ -> rc =ð MCAP_REQUEST_NOT_SUPPORTED ) { 1366 msg = "Remote does‚ot support opcodes"; 1367 mþ -> ù¾ &ð~ MCAP_CTRL_STD_OP ; 1368  çž ; 1371 ià( r¥ -> rc =ð MCAP_UNSPECIFIED_ERROR ) { 1372 msg = "Unspecifiedƒrror"; 1373 þo£ = TRUE ; 1374  çž ; 1377 ià( r¥ -> rc !ð MCAP_SUCCESS ) { 1378 msg = `”rÜ2¡r ( r¥ -> rc ); 1379 ”r = r¥ -> rc ; 1380  çž ; 1383  FALSE ; 1385 çž : 1386 `g_£t_”rÜ ( g”r , MCAP_ERROR , ”r , "%s", msg ); 1387  þo£ ; 1388 } } 1390  gboÞ—n $´oûss_md_ü—‹_mdl_r¥ ( mÿp_mþ * mþ , 1391 mÿp_r¥ * r¥ , ušt32_t Ën ) 1393 mÿp_md_ü—‹_mdl_»q * cmdÏ¡ = (mÿp_md_ü—‹_mdl_»q *è mþ -> lcmd ; 1394  mÿp_mdl_Ý_cb * cÚn = mþ -> ´iv_d©a ; 1395 mÿp_mdl_Ý”©iÚ_cÚf_cb cÚÃù_cb = cÚn -> cb . Ý_cÚf ; 1396 gpoš‹r u£r_d©a = cÚn ->user_data; 1397  mÿp_mdl * mdl = cÚn ->mdl; 1398 ušt8_t cÚf = cmdÏ¡ ->conf; 1399 gboÞ—n þo£ ; 1400 GE¼Ü * g”r = NULL ; 1402 þo£ = `check_”r_r¥ ( mþ , r¥ , Ën , ( mÿp_r¥ è+ 1, & g”r ); 1403 `g_ä“ ( mþ -> lcmd ); 1404 mþ -> lcmd = NULL ; 1405 mþ -> »q = MCL_AVAILABLE ; 1407 ià( g”r ) 1408  çž ; 1411 ià( cÚf !ð0x00 && r¥ -> d©a [0] != conf) { 1412 `g_£t_”rÜ (& g”r , MCAP_ERROR , MCAP_ERROR_FAILED , 1414 þo£ = TRUE ; 1415  çž ; 1418 `cÚÃù_cb ( mdl , r¥ -> d©a [0], g”r , u£r_d©a ); 1419  þo£ ; 1421 çž : 1422 `cÚÃù_cb ( NULL , 0, g”r , u£r_d©a ); 1423 mþ -> mdls = `g_¦i¡_»move (mþ->mdls, mdl ); 1424 `mÿp_mdl_uÄef ( mdl ); 1425 `g_”rÜ_ä“ ( g”r ); 1426 `upd©e_mþ_¡©e ( mþ ); 1427  þo£ ; 1428 } } 1430  gboÞ—n $´oûss_md_»cÚÃù_mdl_r¥ ( mÿp_mþ * mþ , 1431 mÿp_r¥ * r¥ , ušt32_t Ën ) 1433  mÿp_mdl_Ý_cb * »cÚn = mþ -> ´iv_d©a ; 1434 mÿp_mdl_Ý”©iÚ_cb »cÚn_cb = »cÚn -> cb . Ý ; 1435 gpoš‹r u£r_d©a = »cÚn ->user_data; 1436  mÿp_mdl * mdl = »cÚn ->mdl; 1437 GE¼Ü * g”r = NULL ; 1438 gboÞ—n þo£ ; 1440 þo£ = `check_”r_r¥ ( mþ , r¥ , Ën , ( mÿp_r¥ ), & g”r ); 1442 `g_ä“ ( mþ -> lcmd ); 1443 mþ -> lcmd = NULL ; 1444 mþ -> »q = MCL_AVAILABLE ; 1446 `»cÚn_cb ( mdl , g”r , u£r_d©a ); 1447 ià(! g”r ) 1448  þo£ ; 1450 `g_”rÜ_ä“ ( g”r ); 1451 `shutdown_mdl ( mdl ); 1452 `upd©e_mþ_¡©e ( mþ ); 1454 ià( r¥ -> rc !ð MCAP_INVALID_MDL ) 1455  þo£ ; 1458 mþ -> mdls = `g_¦i¡_»move (mþ->mdls, mdl ); 1459 mþ -> cb -> `mdl_d–‘ed ( mdl , mþ->cb-> u£r_d©a ); 1460 `mÿp_mdl_uÄef ( mdl ); 1462  þo£ ; 1463 } } 1465  gboÞ—n $´oûss_md_abÜt_mdl_r¥ ( mÿp_mþ * mþ , 1466 mÿp_r¥ * r¥ , ušt32_t Ën ) 1468  mÿp_mdl_Ý_cb * ab¹ = mþ -> ´iv_d©a ; 1469 mÿp_mdl_nÙify_cb ab¹_cb = ab¹ -> cb . nÙify ; 1470 gpoš‹r u£r_d©a = ab¹ ->user_data; 1471  mÿp_mdl * mdl = ab¹ ->mdl; 1472 GE¼Ü * g”r = NULL ; 1473 gboÞ—n þo£ ; 1475 þo£ = `check_”r_r¥ ( mþ , r¥ , Ën , ( mÿp_r¥ ), & g”r ); 1477 `g_ä“ ( mþ -> lcmd ); 1478 mþ -> lcmd = NULL ; 1479 mþ -> »q = MCL_AVAILABLE ; 1481 `ab¹_cb ( g”r , u£r_d©a ); 1482 `shutdown_mdl ( mdl ); 1484 ià( Ën >ð( mÿp_r¥ è&& r¥ -> rc =ð MCAP_INVALID_MDL ) { 1485 mþ -> mdls = `g_¦i¡_»move (mþ->mdls, mdl ); 1486 mþ -> cb -> `mdl_d–‘ed ( mdl , mþ->cb-> u£r_d©a ); 1487 `mÿp_mdl_uÄef ( mdl ); 1490 ià( g”r ) 1491 `g_”rÜ_ä“ ( g”r ); 1493 `upd©e_mþ_¡©e ( mþ ); 1495  þo£ ; 1496 } } 1498  $»¡Üe_mdl ( gpoš‹r –em , gpoš‹¸ d©a ) 1500  mÿp_mdl * mdl = –em ; 1502 ià( mdl -> ¡©e =ð MDL_DELETING ) { 1503 ià( mdl -> dc ) 1504 mdl -> ¡©e = MDL_CONNECTED ; 1506 mdl -> ¡©e = MDL_CLOSED ; 1507 } ià( mdl -> ¡©e =ð MDL_CLOSED ) 1508 mdl -> mþ -> cb -> `mdl_þo£d (mdl, mdl->mþ->cb-> u£r_d©a ); 1509 } } 1511  $check_mdl_d–_”r ( mÿp_mdl * mdl , mÿp_r¥ * r¥ ) 1513 ià( r¥ -> rc !ð MCAP_ERROR_INVALID_MDL ) { 1514 `»¡Üe_mdl ( mdl , NULL ); 1519 mdl -> mþ -> mdls = `g_¦i¡_»move (mdl->mcl->mdls, mdl); 1520 `mÿp_mdl_uÄef ( mdl ); 1521 } } 1523  gboÞ—n $´oûss_md_d–‘e_mdl_r¥ ( mÿp_mþ * mþ , mÿp_r¥ * r¥ , 1524 ušt32_t Ën ) 1526  mÿp_mdl_Ý_cb * d– = mþ -> ´iv_d©a ; 1527  mÿp_mdl * mdl = d– ->mdl; 1528 mÿp_mdl_nÙify_cb d–‘ed_cb = d– -> cb . nÙify ; 1529 gpoš‹r u£r_d©a = d– ->user_data; 1530 mÿp_md_»q * cmdÏ¡ = (mÿp_md_»q *è mþ -> lcmd ; 1531 ušt16_t mdlid = `Áohs ( cmdÏ¡ -> mdl ); 1532 GE¼Ü * g”r = NULL ; 1533 gboÞ—n þo£ ; 1534 gboÞ—n nÙify = FALSE ; 1536 þo£ = `check_”r_r¥ ( mþ , r¥ , Ën , ( mÿp_r¥ ), & g”r ); 1538 `g_ä“ ( mþ -> lcmd ); 1539 mþ -> lcmd = NULL ; 1540 mþ -> »q = MCL_AVAILABLE ; 1542 ià( g”r ) { 1543 ià( mdl ) 1544 `check_mdl_d–_”r ( mdl , r¥ ); 1546 `g_¦i¡_fÜ—ch ( mþ -> mdls , »¡Üe_mdl , NULL ); 1547 `d–‘ed_cb ( g”r , u£r_d©a ); 1548 `g_”rÜ_ä“ ( g”r ); 1549  þo£ ; 1552 ià( mdlid =ð MCAP_ALL_MDLIDS ) { 1553 `g_¦i¡_fÜ—ch ( mþ -> mdls , mÿp_d–_mdl , & nÙify ); 1554 `g_¦i¡_ä“ ( mþ -> mdls ); 1555 mþ -> mdls = NULL ; 1556 mþ -> ¡©e = MCL_CONNECTED ; 1558 mþ -> mdls = `g_¦i¡_»move (mþ->mdls, mdl ); 1559 `upd©e_mþ_¡©e ( mþ ); 1560 `mÿp_d–_mdl ( mdl , & nÙify ); 1563 `d–‘ed_cb ( g”r , u£r_d©a ); 1565  þo£ ; 1566 } } 1568  $po¡_´oûss_r¥ ( mÿp_mþ * mþ ,  mÿp_mdl_Ý_cb * Ý ) 1570 ià( mþ -> ´iv_d©a !ð Ý ) { 1575 `ä“_mÿp_mdl_Ý ( Ý ); 1581 `ä“_mþ_´iv_d©a ( mþ ); 1583 } } 1585  $´oc_»¥Ú£ ( mÿp_mþ * mþ , * buf , ušt32_t Ën ) 1587  mÿp_mdl_Ý_cb * Ý = mþ -> ´iv_d©a ; 1588 mÿp_r¥ * r¥ = buf ; 1589 gboÞ—n þo£ ; 1591 `RELEASE_TIMER ( mþ ); 1593  mþ -> lcmd [0] + 1) { 1594  MCAP_MD_CREATE_MDL_RSP : 1595 þo£ = `´oûss_md_ü—‹_mdl_r¥ ( mþ , r¥ , Ën ); 1596 `po¡_´oûss_r¥ ( mþ , Ý ); 1598  MCAP_MD_RECONNECT_MDL_RSP : 1599 þo£ = `´oûss_md_»cÚÃù_mdl_r¥ ( mþ , r¥ , Ën ); 1600 `po¡_´oûss_r¥ ( mþ , Ý ); 1602  MCAP_MD_ABORT_MDL_RSP : 1603 þo£ = `´oûss_md_abÜt_mdl_r¥ ( mþ , r¥ , Ën ); 1604 `po¡_´oûss_r¥ ( mþ , Ý ); 1606  MCAP_MD_DELETE_MDL_RSP : 1607 þo£ = `´oûss_md_d–‘e_mdl_r¥ ( mþ , r¥ , Ën ); 1608 `po¡_´oûss_r¥ ( mþ , Ý ); 1611 `DBG ("UnknowÀcmd„e¥Ú£„eûived (Ý codð%d)", r¥ -> Ý ); 1612 þo£ = TRUE ; 1616 ià( þo£ ) { 1617 mþ -> mi -> `mþ_discÚÃùed_cb (mþ, mþ->mi-> u£r_d©a ); 1618 `mÿp_ÿche_mþ ( mþ ); 1620 } } 1622  $´oc_cmd ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t Ën ) 1624 GE¼Ü * g”r = NULL ; 1626 ià( cmd [0] > MCAP_MD_SYNC_INFO_IND || 1627 ( cmd [0] > MCAP_MD_DELETE_MDL_RSP && 1628 cmd [0] < MCAP_MD_SYNC_CAP_REQ )) { 1629 `”rÜ ("UnknowÀcmd„eûived (Ý codð%d)", cmd [0]); 1630 `mÿp_£nd_cmd ( mþ , MCAP_ERROR_RSP , MCAP_INVALID_OP_CODE , 1631 MCAP_MDLID_RESERVED , NULL , 0); 1635 ià( cmd [0] >ð MCAP_MD_SYNC_CAP_REQ && 1636 cmd [0] <ð MCAP_MD_SYNC_INFO_IND ) { 1637 `´oc_sync_cmd ( mþ , cmd , Ën ); 1641 ià(!( mþ -> ù¾ & MCAP_CTRL_STD_OP )) { 1643 `”rÜ ("Remote device does‚ot support opcodes, cmd ignored"); 1647 ià( mþ -> »q =ð MCL_WAITING_RSP ) { 1648 ià( cmd [0] & 0x01) { 1650 ià( mþ -> rÞe =ð MCL_INITIATOR ) 1654 `RELEASE_TIMER ( mþ ); 1655 mþ -> »q = MCL_AVAILABLE ; 1656 `g_£t_”rÜ (& g”r , MCAP_ERROR , MCAP_ERROR_REQ_IGNORED , 1658 `mÿp_nÙify_”rÜ ( mþ , g”r ); 1659 ´oc_»q [ mþ -> ¡©e ](mþ, cmd , Ën ); 1662 `´oc_»¥Ú£ ( mþ , cmd , Ën ); 1663 } ià( cmd [0] & 0x01) 1664 ´oc_»q [ mþ -> ¡©e ](mþ, cmd , Ën ); 1665 } } 1667  gboÞ—n $mdl_ev’t_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , gpoš‹r d©a ) 1670  mÿp_mdl * mdl = d©a ; 1671 gboÞ—n nÙify ; 1673 `DBG ("Clo£ MDL %d", mdl -> mdlid ); 1675 nÙify = ( mdl -> ¡©e =ð MDL_CONNECTED ); 1676 `shutdown_mdl ( mdl ); 1678 `upd©e_mþ_¡©e ( mdl -> mþ ); 1680 ià( nÙify ) { 1682 mdl -> mþ -> cb -> `mdl_þo£d (mdl, mdl->mþ->cb-> u£r_d©a ); 1685  FALSE ; 1686 } } 1688  $mÿp_cÚÃù_mdl_cb ( GIOChªÃl * chª , GE¼Ü * cÚn_”r , 1689 gpoš‹r d©a ) 1691  mÿp_mdl_Ý_cb * cÚ = d©a ; 1692  mÿp_mdl * mdl = cÚ ->mdl; 1693 mÿp_mdl_Ý”©iÚ_cb cb = cÚ ->cb. Ý ; 1694 gpoš‹r u£r_d©a = cÚ ->user_data; 1696 `DBG ("mdl connect callback"); 1698 ià( cÚn_”r ) { 1699 `DBG ("ERROR: mdl connect callback"); 1700 mdl -> ¡©e = MDL_CLOSED ; 1701 `g_io_chªÃl_uÄef ( mdl -> dc ); 1702 mdl -> dc = NULL ; 1703 `cb ( mdl , cÚn_”r , u£r_d©a ); 1707 mdl -> ¡©e = MDL_CONNECTED ; 1708 mdl -> wid = `g_io_add_w©ch_fuÎ (mdl-> dc , G_PRIORITY_DEFAULT , 1709 G_IO_ERR | G_IO_HUP | G_IO_NVAL , 1710 ( GIOFunc è mdl_ev’t_cb , 1711 `mÿp_mdl_»f ( mdl ), 1712 ( GDe¡royNÙify è mÿp_mdl_uÄef ); 1714 `cb ( mdl , cÚn_”r , u£r_d©a ); 1715 } } 1717 gboÞ—n $mÿp_cÚÃù_mdl ( mÿp_mdl * mdl , ušt8_t mode , 1718 ušt16_t dýsm , 1719 mÿp_mdl_Ý”©iÚ_cb cÚÃù_cb , 1720 gpoš‹r u£r_d©a , 1721 GDe¡royNÙify de¡roy , 1722 GE¼Ü ** ”r ) 1724  mÿp_mdl_Ý_cb * cÚ ; 1726 ià( mdl -> ¡©e !ð MDL_WAITING ) { 1727 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_INVALID_MDL , 1728 "%s", `”rÜ2¡r ( MCAP_INVALID_MDL )); 1729  FALSE ; 1732 ià(( mode !ð L2CAP_MODE_ERTM è&& (mod!ð L2CAP_MODE_STREAMING )) { 1733 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_INVALID_ARGS , 1735  FALSE ; 1738 cÚ = `g_Ãw0 ( mÿp_mdl_Ý_cb , 1); 1739 cÚ -> mdl = `mÿp_mdl_»f (mdl); 1740 cÚ -> cb . Ý = cÚÃù_cb ; 1741 cÚ -> de¡roy = destroy; 1742 cÚ -> u£r_d©a = user_data; 1744 mdl -> dc = `bt_io_cÚÃù ( mÿp_cÚÃù_mdl_cb , cÚ , 1745 ( GDe¡royNÙify è ä“_mÿp_mdl_Ý , ”r , 1746 BT_IO_OPT_SOURCE_BDADDR , & mdl -> mþ -> mi -> ¤c , 1747 BT_IO_OPT_DEST_BDADDR , & mdl -> mþ -> addr , 1748 BT_IO_OPT_PSM , dýsm , 1749 BT_IO_OPT_MTU , MCAP_DC_MTU , 1750 BT_IO_OPT_SEC_LEVEL , mdl -> mþ -> mi -> £c , 1751 BT_IO_OPT_MODE , mode , 1752 BT_IO_OPT_INVALID ); 1753 ià(! mdl -> dc ) { 1754 `DBG ("MDL Connectionƒrror"); 1755 mdl -> ¡©e = MDL_CLOSED ; 1756 `mÿp_mdl_uÄef ( cÚ -> mdl ); 1757 `g_ä“ ( cÚ ); 1758  FALSE ; 1761  TRUE ; 1762 } } 1764  gboÞ—n $mþ_cÚŒÞ_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 1765 gpoš‹r d©a ) 1767 GE¼Ü * g”r = NULL ; 1768  mÿp_mþ * mþ = d©a ; 1769  sk , Ën ; 1770 ušt8_t buf [ MCAP_CC_MTU ]; 1772 ià( cÚd & ( G_IO_ERR | G_IO_HUP | G_IO_NVAL )) 1773  çž ; 1775 sk = `g_io_chªÃl_unix_g‘_fd ( chª ); 1776 Ën = `»ad ( sk , buf , (buf)); 1777 ià( Ën < 0) 1778  çž ; 1780 `´oc_cmd ( mþ , buf , ( ušt32_t è Ën ); 1781  TRUE ; 1783 çž : 1784 ià( mþ -> ¡©e !ð MCL_IDLE ) { 1785 ià( mþ -> »q =ð MCL_WAITING_RSP ) { 1787 `g_£t_”rÜ (& g”r , MCAP_ERROR , MCAP_ERROR_MCL_CLOSED , 1789 `mÿp_nÙify_”rÜ ( mþ , g”r ); 1790 `g_”rÜ_ä“ ( g”r ); 1792 mþ -> mi -> `mþ_discÚÃùed_cb (mþ, mþ->mi-> u£r_d©a ); 1794 `mÿp_ÿche_mþ ( mþ ); 1795  FALSE ; 1796 } } 1798  $mÿp_cÚÃù_mþ_cb ( GIOChªÃl * chª , GE¼Ü * cÚn_”r , 1799 gpoš‹r u£r_d©a ) 1801  d¡addr [18]; 1802  cÚÃù_mþ * cÚ = u£r_d©a ; 1803  mÿp_mþ * aux , * mþ = cÚ ->mcl; 1804 mÿp_mþ_cÚÃù_cb cÚÃù_cb = cÚ ->connect_cb; 1805 gpoš‹r d©a = cÚ -> u£r_d©a ; 1806 GE¼Ü * g”r = NULL ; 1808 mþ -> ù¾ &ð~ MCAP_CTRL_CONN ; 1810 ià( cÚn_”r ) { 1811 ià( mþ -> ù¾ & MCAP_CTRL_FREE ) { 1812 `mÿp_mþ_»Ëa£ ( mþ ); 1813 mþ -> mi -> `mþ_unÿched_cb (mþ, mþ->mi-> u£r_d©a ); 1815 `cÚÃù_cb ( NULL , cÚn_”r , d©a ); 1819 `ba2¡r (& mþ -> addr , d¡addr ); 1821 aux = `fšd_mþ ( mþ -> mi -> mþs , &mþ-> addr ); 1822 ià( aux ) { 1824 `”rÜ ("MCLƒ¼Ü: Deviû % i ®»ady cÚÃùed", d¡addr ); 1825 `g_£t_”rÜ (& g”r , MCAP_ERROR , MCAP_ERROR_ALREADY_EXISTS , 1826 "MCL % i ®»ady cÚÃùed", d¡addr ); 1827 `cÚÃù_cb ( NULL , g”r , d©a ); 1828 `g_”rÜ_ä“ ( g”r ); 1832 mþ -> ¡©e = MCL_CONNECTED ; 1833 mþ -> rÞe = MCL_INITIATOR ; 1834 mþ -> »q = MCL_AVAILABLE ; 1835 mþ -> ù¾ |ð MCAP_CTRL_STD_OP ; 1837 `mÿp_sync_š™ ( mþ ); 1839 ià( mþ -> ù¾ & MCAP_CTRL_CACHED ) 1840 `mÿp_unÿche_mþ ( mþ ); 1842 mþ -> ù¾ &ð~ MCAP_CTRL_FREE ; 1843 mþ -> mi -> mþs = `g_¦i¡_´•’d (mcl->mi->mcls, 1844 `mÿp_mþ_»f ( mþ )); 1847 mþ -> wid = `g_io_add_w©ch_fuÎ (mþ-> cc , G_PRIORITY_DEFAULT , 1848 G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL , 1849 ( GIOFunc è mþ_cÚŒÞ_cb , 1850 `mÿp_mþ_»f ( mþ ), 1851 ( GDe¡royNÙify è mÿp_mþ_uÄef ); 1852 `cÚÃù_cb ( mþ , g”r , d©a ); 1853 } } 1855  $£t_mdl_´Ý”t›s ( GIOChªÃl * chª ,  mÿp_mdl * mdl ) 1857  mÿp_mþ * mþ = mdl ->mcl; 1859 mdl -> ¡©e = MDL_CONNECTED ; 1860 mdl -> dc = `g_io_chªÃl_»f ( chª ); 1861 mdl -> wid = `g_io_add_w©ch_fuÎ (mdl-> dc , G_PRIORITY_DEFAULT , 1862 G_IO_ERR | G_IO_HUP | G_IO_NVAL , 1863 ( GIOFunc è mdl_ev’t_cb , 1864 `mÿp_mdl_»f ( mdl ), 1865 ( GDe¡royNÙify è mÿp_mdl_uÄef ); 1867 mþ -> ¡©e = MCL_ACTIVE ; 1868 mþ -> cb -> `mdl_cÚÃùed ( mdl , mþ->cb-> u£r_d©a ); 1869 } } 1871  $mþ_io_de¡roy ( gpoš‹r d©a ) 1873  cÚÃù_mþ * cÚ = d©a ; 1875 `mÿp_mþ_uÄef ( cÚ -> mþ ); 1876 ià( cÚ -> de¡roy ) 1877 cÚ -> `de¡roy (cÚ-> u£r_d©a ); 1878 `g_ä“ ( cÚ ); 1879 } } 1881 gboÞ—n $mÿp_ü—‹_mþ ( mÿp_š¡ªû * mi , 1882 cÚ¡ bdaddr_t * addr , 1883 ušt16_t cýsm , 1884 mÿp_mþ_cÚÃù_cb cÚÃù_cb , 1885 gpoš‹r u£r_d©a , 1886 GDe¡royNÙify de¡roy , 1887 GE¼Ü ** ”r ) 1889  mÿp_mþ * mþ ; 1890  cÚÃù_mþ * cÚ ; 1892 mþ = `fšd_mþ ( mi -> mþs , addr ); 1893 ià( mþ ) { 1894 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_ALREADY_EXISTS , 1896  FALSE ; 1899 mþ = `fšd_mþ ( mi -> ÿched , addr ); 1900 ià(! mþ ) { 1901 mþ = `g_Ãw0 ( mÿp_mþ , 1); 1902 mþ -> mi = `mÿp_š¡ªû_»f (mi); 1903 mþ -> ¡©e = MCL_IDLE ; 1904 `baýy (& mþ -> addr ,‡ddr); 1905 `£t_deçuÉ_cb ( mþ ); 1906 mþ -> Ãxt_mdl = ( `¿nd (è% MCAP_MDLID_FINAL ) + 1; 1909 mþ -> ù¾ |ð MCAP_CTRL_CONN ; 1911 cÚ = `g_Ãw0 ( cÚÃù_mþ , 1); 1912 cÚ -> mþ = `mÿp_mþ_»f (mcl); 1913 cÚ -> cÚÃù_cb = connect_cb; 1914 cÚ -> de¡roy = destroy; 1915 cÚ -> u£r_d©a = user_data; 1917 mþ -> cc = `bt_io_cÚÃù ( mÿp_cÚÃù_mþ_cb , cÚ , 1918 mþ_io_de¡roy , ”r , 1919 BT_IO_OPT_SOURCE_BDADDR , & mi -> ¤c , 1920 BT_IO_OPT_DEST_BDADDR , addr , 1921 BT_IO_OPT_PSM , cýsm , 1922 BT_IO_OPT_MTU , MCAP_CC_MTU , 1923 BT_IO_OPT_SEC_LEVEL , mi -> £c , 1924 BT_IO_OPT_MODE , L2CAP_MODE_ERTM , 1925 BT_IO_OPT_INVALID ); 1926 ià(! mþ -> cc ) { 1927 mþ -> ù¾ &ð~ MCAP_CTRL_CONN ; 1928 ià( mþ -> ù¾ & MCAP_CTRL_FREE ) { 1929 `mÿp_mþ_»Ëa£ ( mþ ); 1930 mþ -> mi -> `mþ_unÿched_cb (mþ, mþ->mi-> u£r_d©a ); 1932 `mÿp_mþ_uÄef ( cÚ -> mþ ); 1933 `g_ä“ ( cÚ ); 1934  FALSE ; 1937  TRUE ; 1938 } } 1940  $cÚÃù_dc_ev’t_cb ( GIOChªÃl * chª , GE¼Ü * g”r , 1941 gpoš‹r u£r_d©a ) 1943  mÿp_š¡ªû * mi = u£r_d©a ; 1944  mÿp_mþ * mþ ; 1945  mÿp_mdl * mdl ; 1946 GE¼Ü * ”r = NULL ; 1947 bdaddr_t d¡ ; 1948 GSLi¡ * l ; 1950 ià( g”r ) 1953 `bt_io_g‘ ( chª , & ”r , BT_IO_OPT_DEST_BDADDR , & d¡ , BT_IO_OPT_INVALID ); 1954 ià( ”r ) { 1955 `”rÜ ("%s", ”r -> mes§ge ); 1956 `g_”rÜ_ä“ ( ”r ); 1957  drÝ ; 1960 mþ = `fšd_mþ ( mi -> mþs , & d¡ ); 1961 ià(! mþ || mþ-> ¡©e !ð MCL_PENDING ) 1962  drÝ ; 1964  l = mþ -> mdls ;†;† =†-> Ãxt ) { 1965 mdl = l -> d©a ; 1966 ià( mdl -> ¡©e =ð MDL_WAITING ) { 1967 `£t_mdl_´Ý”t›s ( chª , mdl ); 1972 drÝ : 1973 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 1974 } } 1976  $£t_mþ_cÚf ( GIOChªÃl * chª ,  mÿp_mþ * mþ ) 1978 gboÞ—n »cÚn ; 1980 mþ -> ¡©e = MCL_CONNECTED ; 1981 mþ -> rÞe = MCL_ACCEPTOR ; 1982 mþ -> »q = MCL_AVAILABLE ; 1983 mþ -> cc = `g_io_chªÃl_»f ( chª ); 1984 mþ -> ù¾ |ð MCAP_CTRL_STD_OP ; 1986 `mÿp_sync_š™ ( mþ ); 1988 »cÚn = ( mþ -> ù¾ & MCAP_CTRL_CACHED ); 1989 ià( »cÚn ) 1990 `mÿp_unÿche_mþ ( mþ ); 1992 mþ -> mi -> mþs = `g_¦i¡_´•’d (mcl->mi->mcls, 1993 `mÿp_mþ_»f ( mþ )); 1995 mþ -> wid = `g_io_add_w©ch_fuÎ (mþ-> cc , G_PRIORITY_DEFAULT , 1996 G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL , 1997 ( GIOFunc è mþ_cÚŒÞ_cb , 1998 `mÿp_mþ_»f ( mþ ), 1999 ( GDe¡royNÙify è mÿp_mþ_uÄef ); 2002 ià( »cÚn ) 2003 mþ -> mi -> `mþ_»cÚÃùed_cb (mþ, mþ->mi-> u£r_d©a ); 2005 mþ -> mi -> `mþ_cÚÃùed_cb (mþ, mþ->mi-> u£r_d©a ); 2006 } } 2008  $cÚÃù_mþ_ev’t_cb ( GIOChªÃl * chª , GE¼Ü * g”r , 2009 gpoš‹r u£r_d©a ) 2011  mÿp_š¡ªû * mi = u£r_d©a ; 2012  mÿp_mþ * mþ ; 2013 bdaddr_t d¡ ; 2014  add»ss [18], ¤c¡r [18]; 2015 GE¼Ü * ”r = NULL ; 2017 ià( g”r ) 2020 `bt_io_g‘ ( chª , & ”r , 2021 BT_IO_OPT_DEST_BDADDR , & d¡ , 2022 BT_IO_OPT_DEST , add»ss , 2023 BT_IO_OPT_INVALID ); 2024 ià( ”r ) { 2025 `”rÜ ("%s", ”r -> mes§ge ); 2026 `g_”rÜ_ä“ ( ”r ); 2027  drÝ ; 2030 `ba2¡r (& mi -> ¤c , ¤c¡r ); 2031 mþ = `fšd_mþ ( mi -> mþs , & d¡ ); 2032 ià( mþ ) { 2033 `”rÜ ("Control channel‡lready created with %s on‡dapter %s", 2034 add»ss , ¤c¡r ); 2035  drÝ ; 2038 mþ = `fšd_mþ ( mi -> ÿched , & d¡ ); 2039 ià(! mþ ) { 2040 mþ = `g_Ãw0 ( mÿp_mþ , 1); 2041 mþ -> mi = `mÿp_š¡ªû_»f (mi); 2042 `baýy (& mþ -> addr , & d¡ ); 2043 `£t_deçuÉ_cb ( mþ ); 2044 mþ -> Ãxt_mdl = ( `¿nd (è% MCAP_MDLID_FINAL ) + 1; 2047 `£t_mþ_cÚf ( chª , mþ ); 2050 drÝ : 2051 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 2052 } } 2054  mÿp_š¡ªû * $mÿp_ü—‹_š¡ªû (cÚ¡ bdaddr_t * ¤c , 2055 BtIOSecLev– £c , 2056 ušt16_t cýsm , 2057 ušt16_t dýsm , 2058 mÿp_mþ_ev’t_cb mþ_cÚÃùed , 2059 mÿp_mþ_ev’t_cb mþ_»cÚÃùed , 2060 mÿp_mþ_ev’t_cb mþ_discÚÃùed , 2061 mÿp_mþ_ev’t_cb mþ_unÿched , 2062 mÿp_šfo_šd_ev’t_cb mþ_sync_šfo_šd , 2063 gpoš‹r u£r_d©a , 2064 GE¼Ü ** g”r ) 2066  mÿp_š¡ªû * mi ; 2068 ià( £c < BT_IO_SEC_MEDIUM ) { 2069 `g_£t_”rÜ ( g”r , MCAP_ERROR , MCAP_ERROR_INVALID_ARGS , 2071 BT_IO_SEC_MEDIUM ); 2072  NULL ; 2075 ià(!( mþ_cÚÃùed && mþ_»cÚÃùed && 2076 mþ_discÚÃùed && mþ_unÿched )) { 2077 `g_£t_”rÜ ( g”r , MCAP_ERROR , MCAP_ERROR_INVALID_ARGS , 2079  NULL ; 2082 mi = `g_Ãw0 ( mÿp_š¡ªû , 1); 2084 `baýy (& mi -> ¤c , src); 2086 mi -> £c = sec; 2087 mi -> mþ_cÚÃùed_cb = mþ_cÚÃùed ; 2088 mi -> mþ_»cÚÃùed_cb = mþ_»cÚÃùed ; 2089 mi -> mþ_discÚÃùed_cb = mþ_discÚÃùed ; 2090 mi -> mþ_unÿched_cb = mþ_unÿched ; 2091 mi -> mþ_sync_šfošd_cb = mþ_sync_šfo_šd ; 2092 mi -> u£r_d©a = user_data; 2093 mi -> c¥_’abËd = FALSE ; 2096 mi -> ccio = `bt_io_li¡’ ( cÚÃù_mþ_ev’t_cb , NULL , mi, 2097 NULL , g”r , 2098 BT_IO_OPT_SOURCE_BDADDR , & mi -> ¤c , 2099 BT_IO_OPT_PSM , cýsm , 2100 BT_IO_OPT_MTU , MCAP_CC_MTU , 2101 BT_IO_OPT_SEC_LEVEL , £c , 2102 BT_IO_OPT_MODE , L2CAP_MODE_ERTM , 2103 BT_IO_OPT_INVALID ); 2104 ià(! mi -> ccio ) { 2105 `”rÜ ("%s", (* g”r )-> mes§ge ); 2106 `g_ä“ ( mi ); 2107  NULL ; 2111 mi -> dcio = `bt_io_li¡’ ( cÚÃù_dc_ev’t_cb , NULL , mi, 2112 NULL , g”r , 2113 BT_IO_OPT_SOURCE_BDADDR , & mi -> ¤c , 2114 BT_IO_OPT_PSM , dýsm , 2115 BT_IO_OPT_MTU , MCAP_DC_MTU , 2116 BT_IO_OPT_SEC_LEVEL , £c , 2117 BT_IO_OPT_INVALID ); 2118 ià(! mi -> dcio ) { 2119 `g_io_chªÃl_shutdown ( mi -> ccio , TRUE , NULL ); 2120 `g_io_chªÃl_uÄef ( mi -> ccio ); 2121 mi -> ccio = NULL ; 2122 `”rÜ ("%s", (* g”r )-> mes§ge ); 2123 `g_ä“ ( mi ); 2124  NULL ; 2128 `¤ªd ( `time ( NULL )); 2130  `mÿp_š¡ªû_»f ( mi ); 2131 } } 2133  $mÿp_»Ëa£_š¡ªû ( mÿp_š¡ªû * mi ) 2135 GSLi¡ * l ; 2137 ià(! mi ) 2140 ià( mi -> ccio ) { 2141 `g_io_chªÃl_shutdown ( mi -> ccio , TRUE , NULL ); 2142 `g_io_chªÃl_uÄef ( mi -> ccio ); 2143 mi -> ccio = NULL ; 2146 ià( mi -> dcio ) { 2147 `g_io_chªÃl_shutdown ( mi -> dcio , TRUE , NULL ); 2148 `g_io_chªÃl_uÄef ( mi -> dcio ); 2149 mi -> dcio = NULL ; 2152  l = mi -> mþs ;†;† =†-> Ãxt ) { 2153 `mÿp_mþ_»Ëa£ ( l -> d©a ); 2154 `mÿp_mþ_uÄef ( l -> d©a ); 2157 `g_¦i¡_ä“ ( mi -> mþs ); 2158 mi -> mþs = NULL ; 2160  l = mi -> ÿched ;†;† =†-> Ãxt ) { 2161 `mÿp_mþ_»Ëa£ ( l -> d©a ); 2162 `mÿp_mþ_uÄef ( l -> d©a ); 2165 `g_¦i¡_ä“ ( mi -> ÿched ); 2166 mi -> ÿched = NULL ; 2167 } } 2169  mÿp_š¡ªû * $mÿp_š¡ªû_»f ( mÿp_š¡ªû * mi ) 2171 mi -> »f ++; 2173 `DBG ("mÿp_š¡ªû_»f(%p):„ef=%d", mi , mi-> »f ); 2175  mi ; 2176 } } 2178  $mÿp_š¡ªû_uÄef ( mÿp_š¡ªû * mi ) 2180 mi -> »f --; 2182 `DBG ("mÿp_š¡ªû_uÄef(%p):„ef=%d", mi , mi-> »f ); 2184 ià( mi -> »f > 0) 2187 `mÿp_»Ëa£_š¡ªû ( mi ); 2188 `g_ä“ ( mi ); 2189 } } 2191 ušt16_t $mÿp_g‘_ù¾_psm ( mÿp_š¡ªû * mi , GE¼Ü ** ”r ) 2193 ušt16_t Ísm ; 2195 ià(!( mi && mi-> ccio )) { 2196 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_INVALID_ARGS , 2201 ià(! `bt_io_g‘ ( mi -> ccio , ”r , BT_IO_OPT_PSM , & Ísm , BT_IO_OPT_INVALID )) 2204  Ísm ; 2205 } } 2207 ušt16_t $mÿp_g‘_d©a_psm ( mÿp_š¡ªû * mi , GE¼Ü ** ”r ) 2209 ušt16_t Ísm ; 2211 ià(!( mi && mi-> dcio )) { 2212 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_INVALID_ARGS , 2217 ià(! `bt_io_g‘ ( mi -> dcio , ”r , BT_IO_OPT_PSM , & Ísm , BT_IO_OPT_INVALID )) 2220  Ísm ; 2221 } } 2223 gboÞ—n $mÿp_£t_d©a_chª_mode ( mÿp_š¡ªû * mi , ušt8_t mode , 2224 GE¼Ü ** ”r ) 2226 ià(!( mi && mi-> dcio )) { 2227 `g_£t_”rÜ ( ”r , MCAP_ERROR , MCAP_ERROR_INVALID_ARGS , 2229  FALSE ; 2232  `bt_io_£t ( mi -> dcio , ”r , BT_IO_OPT_MODE , mode , 2233 BT_IO_OPT_INVALID ); 2234 } } 2236  mÿp_mdl * $mÿp_mdl_»f ( mÿp_mdl * mdl ) 2238 mdl -> »f ++; 2240 `DBG ("mÿp_mdl_»f(%p):„ef=%d", mdl , mdl-> »f ); 2242  mdl ; 2243 } } 2245  $mÿp_mdl_uÄef ( mÿp_mdl * mdl ) 2247 mdl -> »f --; 2249 `DBG ("mÿp_mdl_uÄef(%p):„ef=%d", mdl , mdl-> »f ); 2251 ià( mdl -> »f > 0) 2254 `ä“_mdl ( mdl ); 2255 } } 2258  $£nd_sync_cmd ( mÿp_mþ * mþ , cÚ¡ * buf , ušt32_t size ) 2260  sock ; 2262 ià( mþ -> cc =ð NULL ) 2265 sock = `g_io_chªÃl_unix_g‘_fd ( mþ -> cc ); 2266  `mÿp_£nd_d©a ( sock , buf , size ); 2267 } } 2269  $£nd_unsuµÜ‹d_ÿp_»q ( mÿp_mþ * mþ ) 2271 mÿp_md_sync_ÿp_r¥ * cmd ; 2272  £Á ; 2274 cmd = `g_Ãw0 ( mÿp_md_sync_ÿp_r¥ , 1); 2275 cmd -> Ý = MCAP_MD_SYNC_CAP_RSP ; 2276 cmd -> rc = MCAP_REQUEST_NOT_SUPPORTED ; 2278 £Á = `£nd_sync_cmd ( mþ , cmd , (*cmd)); 2279 `g_ä“ ( cmd ); 2281  £Á ; 2282 } } 2284  $£nd_unsuµÜ‹d_£t_»q ( mÿp_mþ * mþ ) 2286 mÿp_md_sync_£t_r¥ * cmd ; 2287  £Á ; 2289 cmd = `g_Ãw0 ( mÿp_md_sync_£t_r¥ , 1); 2290 cmd -> Ý = MCAP_MD_SYNC_SET_RSP ; 2291 cmd -> rc = MCAP_REQUEST_NOT_SUPPORTED ; 2293 £Á = `£nd_sync_cmd ( mþ , cmd , (*cmd)); 2294 `g_ä“ ( cmd ); 2296  £Á ; 2297 } } 2299  $»£t_tm¡amp ( mÿp_c¥ * c¥ ,  time¥ec * ba£_time , 2300 ušt64_t Ãw_tm¡amp ) 2302 c¥ -> ba£_tm¡amp = Ãw_tm¡amp ; 2303 ià( ba£_time ) 2304 c¥ -> ba£_time = *base_time; 2306 `þock_g‘time ( CLK , & c¥ -> ba£_time ); 2307 } } 2309  $mÿp_sync_š™ ( mÿp_mþ * mþ ) 2311 ià(! mþ -> mi -> c¥_’abËd ) { 2312 mþ -> c¥ = NULL ; 2316 mþ -> c¥ = `g_Ãw0 ( mÿp_c¥ , 1); 2318 mþ -> c¥ -> »m_»q_acc = 10000; 2319 mþ -> c¥ -> £t_d©a = NULL ; 2320 mþ -> c¥ -> c¥_´iv_d©a = NULL ; 2322 `»£t_tm¡amp ( mþ -> c¥ , NULL , 0); 2323 } } 2325  $mÿp_sync_¡Ý ( mÿp_mþ * mþ ) 2327 ià(! mþ -> c¥ ) 2330 ià( mþ -> c¥ -> šd_tim” ) 2331 `g_sourû_»move ( mþ -> c¥ -> šd_tim” ); 2333 ià( mþ -> c¥ -> £t_tim” ) 2334 `g_sourû_»move ( mþ -> c¥ -> £t_tim” ); 2336 ià( mþ -> c¥ -> £t_d©a ) 2337 `g_ä“ ( mþ -> c¥ -> £t_d©a ); 2339 ià( mþ -> c¥ -> c¥_´iv_d©a ) 2340 `g_ä“ ( mþ -> c¥ -> c¥_´iv_d©a ); 2342 mþ -> c¥ -> šd_tim” = 0; 2343 mþ -> c¥ -> £t_tim” = 0; 2344 mþ -> c¥ -> £t_d©a = NULL ; 2345 mþ -> c¥ -> c¥_´iv_d©a = NULL ; 2347 `g_ä“ ( mþ -> c¥ ); 2348 mþ -> c¥ = NULL ; 2349 } } 2351  ušt64_t $time_us ( time¥ec * tv ) 2353  tv -> tv_£c * 1000000Î +v-> tv_n£c / 1000ll; 2354 } } 2356  št64_t $bt2us ( bt ) 2358  bt * 312.5; 2359 } } 2361  $bt2ms ( bt ) 2363  bt * 312.5 / 1000; 2364 } } 2366  $btoff£t ( ušt32_t btþk1 , ušt32_ˆ btþk2 ) 2368  off£t = btþk2 - btþk1 ; 2370 ià( off£t <ð- MCAP_BTCLOCK_HALF ) 2371 off£t +ð MCAP_BTCLOCK_FIELD ; 2372 ià( off£t > MCAP_BTCLOCK_HALF ) 2373 off£t -ð MCAP_BTCLOCK_FIELD ; 2375  off£t ; 2376 } } 2378  $btdiff ( ušt32_t btþk1 , ušt32_ˆ btþk2 ) 2380  `btoff£t ( btþk1 , btþk2 ); 2381 } } 2383  gboÞ—n $v®id_btþock ( ušt32_t btþk ) 2385  btþk <ð MCAP_BTCLOCK_MAX ; 2386 } } 2389  gboÞ—n $»ad_btþock ( mÿp_mþ * mþ , ušt32_t * btþock , 2390 ušt16_t * bccu¿cy ) 2398  FALSE ; 2399 } } 2401  gboÞ—n $»ad_btþock_»Œy ( mÿp_mþ * mþ , ušt32_t * btþock , 2402 ušt16_t * bccu¿cy ) 2404  »Œ›s = 5; 2406 -- »Œ›s >= 0) { 2407 ià( `»ad_btþock ( mþ , btþock , bccu¿cy )) 2408  TRUE ; 2409 `DBG ("CSP:„etryingo„ead bt clock..."); 2412  FALSE ; 2413 } } 2415  gboÞ—n $g‘_bŒÞe ( mÿp_mþ * mþ ) 2417  sock , æags ; 2418 sockËn_t Ën ; 2420 ià( mþ -> cc =ð NULL ) 2423 sock = `g_io_chªÃl_unix_g‘_fd ( mþ -> cc ); 2424 Ën = ( æags ); 2426 ià( `g‘sockÝt ( sock , SOL_L2CAP , L2CAP_LM , & æags , & Ën )) 2427 `DBG ("CSP: could‚ot„ead„ole"); 2429  æags & L2CAP_LM_MASTER ; 2430 } } 2432 ušt64_t $mÿp_g‘_time¡amp ( mÿp_mþ * mþ , 2433  time¥ec * giv’_time ) 2435  time¥ec now ; 2436 ušt64_t tm¡amp ; 2438 ià(! mþ -> c¥ ) 2439  MCAP_TMSTAMP_DONTSET ; 2441 ià( giv’_time ) 2442 now = * giv’_time ; 2444 ià( `þock_g‘time ( CLK , & now ) < 0) 2445  MCAP_TMSTAMP_DONTSET ; 2447 tm¡amp = `time_us (& now è-ime_us(& mþ -> c¥ -> ba£_time ) 2448 + mþ -> c¥ -> ba£_tm¡amp ; 2450  tm¡amp ; 2451 } } 2453 ušt32_t $mÿp_g‘_btþock ( mÿp_mþ * mþ ) 2455 ušt32_t btþock ; 2456 ušt16_t accu¿cy ; 2458 ià(! mþ -> c¥ ) 2459  MCAP_BTCLOCK_IMMEDIATE ; 2461 ià(! `»ad_btþock_»Œy ( mþ , & btþock , & accu¿cy )) 2462 btþock = 0xffffffff; 2464  btþock ; 2465 } } 2467  gboÞ—n $š™Ÿlize_ÿps ( mÿp_mþ * mþ ) 2469  time¥ec t1 , t2 ; 2470  Ï‹nc›s [ SAMPLE_COUNT ]; 2471  Ï‹ncy , avg , dev ; 2472 ušt32_t btþock ; 2473 ušt16_t bccu¿cy ; 2474  i ; 2475  »Œ›s ; 2477 `þock_g‘»s ( CLK , & t1 ); 2479 _ÿps . ts_»s = `time_us (& t1 ); 2480 ià( _ÿps . ts_»s < 1) 2481 _ÿps . ts_»s = 1; 2483 _ÿps . ts_acc = 20; 2486 `þock_g‘time ( CLK , & t1 ); 2487 `»ad_btþock_»Œy ( mþ , & btþock , & bccu¿cy ); 2490 avg = 0; 2491 i = 0; 2492 »Œ›s = MAX_RETRIES ; 2493  i < SAMPLE_COUNT && »Œ›s > 0) { 2494 `þock_g‘time ( CLK , & t1 ); 2495 ià(! `»ad_btþock ( mþ , & btþock , & bccu¿cy )) { 2496 »Œ›s --; 2499 `þock_g‘time ( CLK , & t2 ); 2501 Ï‹ncy = `time_us (& t2 è-ime_us(& t1 ); 2502 Ï‹nc›s [ i ] = Ï‹ncy ; 2503 avg +ð Ï‹ncy ; 2504 i ++; 2507 ià( »Œ›s <= 0) 2508  FALSE ; 2511 avg /ð SAMPLE_COUNT ; 2512 dev = 0; 2513  i = 0; i < SAMPLE_COUNT ; ++i) 2514 dev +ð `abs ( Ï‹nc›s [ i ] - avg ); 2515 dev /ð SAMPLE_COUNT ; 2518 Ï‹ncy = 0; 2519  i = 0; i < SAMPLE_COUNT ; ++i) { 2520 ià( Ï‹nc›s [ i ] > ( avg + dev * 6)) 2521 Ï‹ncy +ð avg ; 2523 Ï‹ncy +ð Ï‹nc›s [ i ]; 2525 Ï‹ncy /ð SAMPLE_COUNT ; 2527 _ÿps . Ï‹ncy =†atency; 2528 _ÿps . ´“m±_th»sh = Ï‹ncy * 4; 2529 _ÿps . synþ—dtime_ms = Ï‹ncy * 50 / 1000; 2531 c¥_ÿps_š™Ÿlized = TRUE ; 2532  TRUE ; 2533 } } 2535  c¥_ÿps * $ÿps ( mÿp_mþ * mþ ) 2537 ià(! c¥_ÿps_š™Ÿlized ) 2538 ià(! `š™Ÿlize_ÿps ( mþ )) { 2540  NULL ; 2543  & _ÿps ; 2544 } } 2546  $£nd_sync_ÿp_r¥ ( mÿp_mþ * mþ , ušt8_t r¥code , 2547 ušt8_t btþock»s , ušt16_t synþ—d , 2548 ušt16_t tm¡am´es , ušt16_ˆ tm¡am·cc ) 2550 mÿp_md_sync_ÿp_r¥ * r¥ ; 2551  £Á ; 2553 r¥ = `g_Ãw0 ( mÿp_md_sync_ÿp_r¥ , 1); 2555 r¥ -> Ý = MCAP_MD_SYNC_CAP_RSP ; 2556 r¥ -> rc = r¥code ; 2558 r¥ -> btþock = btþock»s ; 2559 r¥ -> ¦time = `htÚs ( synþ—d ); 2560 r¥ -> time¡Ä = `htÚs ( tm¡am´es ); 2561 r¥ -> time¡Ç = `htÚs ( tm¡am·cc ); 2563 £Á = `£nd_sync_cmd ( mþ , r¥ , (*rsp)); 2564 `g_ä“ ( r¥ ); 2566  £Á ; 2567 } } 2569  $´oc_sync_ÿp_»q ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t Ën ) 2571 mÿp_md_sync_ÿp_»q * »q ; 2572 ušt16_t »quœed_accu¿cy ; 2573 ušt16_t our_accu¿cy ; 2574 ušt32_t btþock ; 2575 ušt16_t bŒes ; 2577 ià( Ën !ð( mÿp_md_sync_ÿp_»q )) { 2578 `£nd_sync_ÿp_r¥ ( mþ , MCAP_INVALID_PARAM_VALUE , 2583 ià(! `ÿps ( mþ )) { 2584 `£nd_sync_ÿp_r¥ ( mþ , MCAP_RESOURCE_UNAVAILABLE , 2589 »q = ( mÿp_md_sync_ÿp_»q *è cmd ; 2590 »quœed_accu¿cy = `Áohs ( »q -> time¡ ); 2591 our_accu¿cy = `ÿps ( mþ )-> ts_acc ; 2592 bŒes = 0; 2594 ià( »quœed_accu¿cy < our_accu¿cy ||„equired_accuracy < 1) { 2595 `£nd_sync_ÿp_r¥ ( mþ , MCAP_RESOURCE_UNAVAILABLE , 2600 ià(! `»ad_btþock_»Œy ( mþ , & btþock , & bŒes )) { 2601 `£nd_sync_ÿp_r¥ ( mþ , MCAP_RESOURCE_UNAVAILABLE , 2606 mþ -> c¥ -> »mÙe_ÿps = 1; 2607 mþ -> c¥ -> »m_»q_acc = »quœed_accu¿cy ; 2609 `£nd_sync_ÿp_r¥ ( mþ , MCAP_SUCCESS , bŒes , 2610 `ÿps ( mþ )-> synþ—dtime_ms , 2611 `ÿps ( mþ )-> ts_»s , our_accu¿cy ); 2612 } } 2614  $£nd_sync_£t_r¥ ( mÿp_mþ * mþ , ušt8_t r¥code , 2615 ušt32_t btþock , ušt64_t time¡amp , 2616 ušt16_t tm¡am´es ) 2618 mÿp_md_sync_£t_r¥ * r¥ ; 2619  £Á ; 2621 r¥ = `g_Ãw0 ( mÿp_md_sync_£t_r¥ , 1); 2623 r¥ -> Ý = MCAP_MD_SYNC_SET_RSP ; 2624 r¥ -> rc = r¥code ; 2625 r¥ -> btþock = `htÚl (btclock); 2626 r¥ -> time¡¡ = `htÚ64 ( time¡amp ); 2627 r¥ -> time¡§ = `htÚs ( tm¡am´es ); 2629 £Á = `£nd_sync_cmd ( mþ , r¥ , (*rsp)); 2630 `g_ä“ ( r¥ ); 2632  £Á ; 2633 } } 2635  gboÞ—n $g‘_®l_þocks ( mÿp_mþ * mþ , ušt32_t * btþock , 2636  time¥ec * ba£_time , 2637 ušt64_t * time¡amp ) 2639  Ï‹ncy ; 2640  »Œy = 5; 2641 ušt16_t bŒes ; 2642  time¥ec t0 ; 2644 ià(! `ÿps ( mþ )) 2645  FALSE ; 2647 Ï‹ncy = `ÿps ( mþ )-> ´“m±_th»sh + 1; 2649  Ï‹ncy > `ÿps ( mþ )-> ´“m±_th»sh && -- »Œy >= 0) { 2651 ià( `þock_g‘time ( CLK , & t0 ) < 0) 2652  FALSE ; 2654 ià(! `»ad_btþock ( mþ , btþock , & bŒes )) 2657 ià( `þock_g‘time ( CLK , ba£_time ) < 0) 2658  FALSE ; 2664 Ï‹ncy = `time_us ( ba£_time è-ime_us(& t0 ); 2667 ià( »Œy < 0) 2668  FALSE ; 2670 * time¡amp = `mÿp_g‘_time¡amp ( mþ , ba£_time ); 2672  TRUE ; 2673 } } 2675  gboÞ—n $sync_£nd_šdiÿtiÚ ( gpoš‹r u£r_d©a ) 2677  mÿp_mþ * mþ ; 2678 mÿp_md_sync_šfo_šd * cmd ; 2679 ušt32_t btþock ; 2680 ušt64_t tm¡amp ; 2681  time¥ec ba£_time ; 2682  £Á ; 2684 ià(! u£r_d©a ) 2685  FALSE ; 2687 btþock = 0; 2688 mþ = u£r_d©a ; 2690 ià(! `ÿps ( mþ )) 2691  FALSE ; 2693 ià(! `g‘_®l_þocks ( mþ , & btþock , & ba£_time , & tm¡amp )) 2694  FALSE ; 2696 cmd = `g_Ãw0 ( mÿp_md_sync_šfo_šd , 1); 2698 cmd -> Ý = MCAP_MD_SYNC_INFO_IND ; 2699 cmd -> btþock = `htÚl (btclock); 2700 cmd -> time¡¡ = `htÚ64 ( tm¡amp ); 2701 cmd -> time¡§ = `htÚs ( `ÿps ( mþ )-> Ï‹ncy ); 2703 £Á = `£nd_sync_cmd ( mþ , cmd , (*cmd)); 2704 `g_ä“ ( cmd ); 2706  ! £Á ; 2707 } } 2709  gboÞ—n $´oc_sync_£t_»q_pha£2 ( gpoš‹r u£r_d©a ) 2711  mÿp_mþ * mþ ; 2712  sync_£t_d©a * d©a ; 2713 ušt8_t upd©e ; 2714 ušt32_t sched_btþock ; 2715 ušt64_t Ãw_tm¡amp ; 2716  šd_äeq ; 2717  rÞe ; 2718 ušt32_t btþock ; 2719 ušt64_t tm¡amp ; 2720  time¥ec ba£_time ; 2721 ušt16_t tm¡am·cc ; 2722 gboÞ—n »£t ; 2723  d–ay ; 2725 ià(! u£r_d©a ) 2726  FALSE ; 2728 mþ = u£r_d©a ; 2730 ià(! mþ -> c¥ -> £t_d©a ) 2731  FALSE ; 2733 btþock = 0; 2734 d©a = mþ -> c¥ -> £t_d©a ; 2735 upd©e = d©a ->update; 2736 sched_btþock = d©a ->sched_btclock; 2737 Ãw_tm¡amp = d©a -> time¡amp ; 2738 šd_äeq = d©a ->ind_freq; 2739 rÞe = d©a ->role; 2741 ià(! `ÿps ( mþ )) { 2742 `£nd_sync_£t_r¥ ( mþ , MCAP_UNSPECIFIED_ERROR , 0, 0, 0); 2743  FALSE ; 2746 ià(! `g‘_®l_þocks ( mþ , & btþock , & ba£_time , & tm¡amp )) { 2747 `£nd_sync_£t_r¥ ( mþ , MCAP_UNSPECIFIED_ERROR , 0, 0, 0); 2748  FALSE ; 2751 ià( `g‘_bŒÞe ( mþ è!ð rÞe ) { 2752 `£nd_sync_£t_r¥ ( mþ , MCAP_INVALID_OPERATION , 0, 0, 0); 2753  FALSE ; 2756 »£t = ( Ãw_tm¡amp !ð MCAP_TMSTAMP_DONTSET ); 2758 ià( »£t ) { 2759 ià( sched_btþock !ð MCAP_BTCLOCK_IMMEDIATE ) { 2760 d–ay = `bt2us ( `btdiff ( sched_btþock , btþock )); 2761 ià( d–ay >ð0 || (( Ãw_tm¡amp - delay) > 0)) { 2762 Ãw_tm¡amp +ð d–ay ; 2763 `DBG ("CSP:„eset w/ delay %dus, compensated", 2764 d–ay ); 2766 `DBG ("CSP:„eset w/ delay %dus, uncompensated", 2767 d–ay ); 2770 `»£t_tm¡amp ( mþ -> c¥ , & ba£_time , Ãw_tm¡amp ); 2771 tm¡amp = Ãw_tm¡amp ; 2774 tm¡am·cc = `ÿps ( mþ )-> Ï‹ncy + c­s(mþ)-> ts_acc ; 2776 ià( mþ -> c¥ -> šd_tim” ) { 2777 `g_sourû_»move ( mþ -> c¥ -> šd_tim” ); 2778 mþ -> c¥ -> šd_tim” = 0; 2781 ià( upd©e ) { 2782  wh’ = šd_äeq + `ÿps ( mþ )-> synþ—dtime_ms ; 2783 mþ -> c¥ -> šd_tim” = `g_timeout_add ( wh’ , 2784 sync_£nd_šdiÿtiÚ , 2785 mþ ); 2788 `£nd_sync_£t_r¥ ( mþ , MCAP_SUCCESS , btþock , tm¡amp , tm¡am·cc ); 2791 ià( upd©e ) 2792 `sync_£nd_šdiÿtiÚ ( mþ ); 2794  FALSE ; 2795 } } 2797  $´oc_sync_£t_»q ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t Ën ) 2799 mÿp_md_sync_£t_»q * »q ; 2800 ušt32_t sched_btþock , cur_btþock ; 2801 ušt16_t bŒes ; 2802 ušt8_t upd©e ; 2803 ušt64_t time¡amp ; 2804  sync_£t_d©a * £t_d©a ; 2805  pha£2_d–ay , šd_äeq , wh’ ; 2807 ià( Ën !ð( mÿp_md_sync_£t_»q )) { 2808 `£nd_sync_£t_r¥ ( mþ , MCAP_INVALID_PARAM_VALUE , 0, 0, 0); 2812 »q = ( mÿp_md_sync_£t_»q *è cmd ; 2813 sched_btþock = `Áohl ( »q -> btþock ); 2814 upd©e = »q -> time¡ui ; 2815 time¡amp = `Áoh64 ( »q -> time¡¡ ); 2816 cur_btþock = 0; 2818 ià( sched_btþock !ð MCAP_BTCLOCK_IMMEDIATE && 2819 ! `v®id_btþock ( sched_btþock )) { 2820 `£nd_sync_£t_r¥ ( mþ , MCAP_INVALID_PARAM_VALUE , 0, 0, 0); 2824 ià( upd©e > 1) { 2825 `£nd_sync_£t_r¥ ( mþ , MCAP_INVALID_PARAM_VALUE , 0, 0, 0); 2829 ià(! mþ -> c¥ -> »mÙe_ÿps ) { 2831 `£nd_sync_£t_r¥ ( mþ , MCAP_INVALID_PARAM_VALUE , 0, 0, 0); 2835 ià(! `ÿps ( mþ )) { 2836 `£nd_sync_£t_r¥ ( mþ , MCAP_UNSPECIFIED_ERROR , 0, 0, 0); 2840 ià(! `»ad_btþock_»Œy ( mþ , & cur_btþock , & bŒes )) { 2841 `£nd_sync_£t_r¥ ( mþ , MCAP_UNSPECIFIED_ERROR , 0, 0, 0); 2845 ià( sched_btþock =ð MCAP_BTCLOCK_IMMEDIATE ) 2846 pha£2_d–ay = 0; 2848 pha£2_d–ay = `btdiff ( cur_btþock , sched_btþock ); 2850 ià( pha£2_d–ay < 0) { 2852 `£nd_sync_£t_r¥ ( mþ , MCAP_INVALID_PARAM_VALUE , 2858 pha£2_d–ay = `bt2ms (phase2_delay); 2860 ià( pha£2_d–ay > 61*1000) { 2862 `£nd_sync_£t_r¥ ( mþ , MCAP_INVALID_PARAM_VALUE , 2865 } ià( pha£2_d–ay < `ÿps ( mþ )-> Ï‹ncy / 1000) { 2867 `£nd_sync_£t_r¥ ( mþ , MCAP_INVALID_PARAM_VALUE , 2873 ià( upd©e ) { 2878 šd_äeq = (1000 * mþ -> c¥ -> »m_»q_acc è/ `ÿps (mþ)-> ts_acc ; 2880 ià( šd_äeq < `MAX ( `ÿps ( mþ )-> Ï‹ncy * 2 / 1000, 100)) { 2882 `£nd_sync_£t_r¥ ( mþ , MCAP_INVALID_PARAM_VALUE , 2887 `DBG ("CSP: indiÿtiÚƒv”y %dms", šd_äeq ); 2889 šd_äeq = 0; 2891 ià( mþ -> c¥ -> šd_tim” ) { 2893 `g_sourû_»move ( mþ -> c¥ -> šd_tim” ); 2894 mþ -> c¥ -> šd_tim” = 0; 2897 ià(! mþ -> c¥ -> £t_d©a ) 2898 mþ -> c¥ -> £t_d©a = `g_Ãw0 ( sync_£t_d©a , 1); 2900 £t_d©a = ( sync_£t_d©a *è mþ -> c¥ ->set_data; 2902 £t_d©a -> upd©e = update; 2903 £t_d©a -> sched_btþock = sched_btclock; 2904 £t_d©a -> time¡amp =imestamp; 2905 £t_d©a -> šd_äeq = ind_freq; 2906 £t_d©a -> rÞe = `g‘_bŒÞe ( mþ ); 2914 ià( pha£2_d–ay > 0) { 2915 wh’ = pha£2_d–ay + `ÿps ( mþ )-> synþ—dtime_ms ; 2916 mþ -> c¥ -> £t_tim” = `g_timeout_add ( wh’ , 2917 ´oc_sync_£t_»q_pha£2 , 2918 mþ ); 2920 `´oc_sync_£t_»q_pha£2 ( mþ ); 2923 ià( upd©e ) 2924 `sync_£nd_šdiÿtiÚ ( mþ ); 2925 } } 2927  $´oc_sync_ÿp_r¥ ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t Ën ) 2929 mÿp_md_sync_ÿp_r¥ * r¥ ; 2930 ušt8_t mÿp_”r ; 2931 ušt8_t btþock»s ; 2932 ušt16_t synþ—d ; 2933 ušt16_t tm¡am´es ; 2934 ušt16_t tm¡am·cc ; 2935  mÿp_sync_ÿp_cbd©a * cbd©a ; 2936 mÿp_sync_ÿp_cb cb ; 2937 gpoš‹r u£r_d©a ; 2939 ià( mþ -> c¥ -> c¥_»q !ð MCAP_MD_SYNC_CAP_REQ ) { 2940 `DBG ("CSP: got unexpected cap„espose"); 2944 ià(! mþ -> c¥ -> c¥_´iv_d©a ) { 2945 `DBG ("CSP:‚o…riv data for cap„espose"); 2949 cbd©a = mþ -> c¥ -> c¥_´iv_d©a ; 2950 cb = cbd©a ->cb; 2951 u£r_d©a = cbd©a ->user_data; 2952 `g_ä“ ( cbd©a ); 2954 mþ -> c¥ -> c¥_´iv_d©a = NULL ; 2955 mþ -> c¥ -> c¥_»q = 0; 2957 ià( Ën !ð( mÿp_md_sync_ÿp_r¥ )) { 2958 `DBG ("CSP: got corrupted cap„espose"); 2962 r¥ = ( mÿp_md_sync_ÿp_r¥ *è cmd ; 2963 mÿp_”r = r¥ -> rc ; 2964 btþock»s = r¥ -> btþock ; 2965 synþ—d = `Áohs ( r¥ -> ¦time ); 2966 tm¡am´es = `Áohs ( r¥ -> time¡Ä ); 2967 tm¡am·cc = `Áohs ( r¥ -> time¡Ç ); 2969 ià(! mÿp_”r ) 2970 mþ -> c¥ -> loÿl_ÿps = TRUE ; 2972 `cb ( mþ , mÿp_”r , btþock»s , synþ—d , tm¡am´es , tm¡am·cc , NULL , 2973 u£r_d©a ); 2974 } } 2976  $´oc_sync_£t_r¥ ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t Ën ) 2978 mÿp_md_sync_£t_r¥ * r¥ ; 2979 ušt8_t mÿp_”r ; 2980 ušt32_t btþock ; 2981 ušt64_t time¡amp ; 2982 ušt16_t accu¿cy ; 2983  mÿp_sync_£t_cbd©a * cbd©a ; 2984 mÿp_sync_£t_cb cb ; 2985 gpoš‹r u£r_d©a ; 2987 ià( mþ -> c¥ -> c¥_»q !ð MCAP_MD_SYNC_SET_REQ ) { 2988 `DBG ("CSP: got unexpected set„espose"); 2992 ià(! mþ -> c¥ -> c¥_´iv_d©a ) { 2993 `DBG ("CSP:‚o…riv data for set„espose"); 2997 cbd©a = mþ -> c¥ -> c¥_´iv_d©a ; 2998 cb = cbd©a ->cb; 2999 u£r_d©a = cbd©a ->user_data; 3000 `g_ä“ ( cbd©a ); 3002 mþ -> c¥ -> c¥_´iv_d©a = NULL ; 3003 mþ -> c¥ -> c¥_»q = 0; 3005 ià( Ën !ð( mÿp_md_sync_£t_r¥ )) { 3006 `DBG ("CSP: got corrupted set„espose"); 3010 r¥ = ( mÿp_md_sync_£t_r¥ *è cmd ; 3011 mÿp_”r = r¥ -> rc ; 3012 btþock = `Áohl ( r¥ ->btclock); 3013 time¡amp = `Áoh64 ( r¥ -> time¡¡ ); 3014 accu¿cy = `Áohs ( r¥ -> time¡§ ); 3016 ià(! mÿp_”r && ! `v®id_btþock ( btþock )) 3017 mÿp_”r = MCAP_ERROR_INVALID_ARGS ; 3019 `cb ( mþ , mÿp_”r , btþock , time¡amp , accu¿cy , NULL , u£r_d©a ); 3020 } } 3022  $´oc_sync_šfo_šd ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t Ën ) 3024 mÿp_md_sync_šfo_šd * »q ; 3025  sync_šfo_šd_d©a d©a ; 3026 ušt32_t btþock ; 3028 ià(! mþ -> c¥ -> šd_ex³ùed ) { 3029 `DBG ("CSP:„eceived unexpected info indication"); 3033 ià( Ën !ð( mÿp_md_sync_šfo_šd )) 3036 »q = ( mÿp_md_sync_šfo_šd *è cmd ; 3038 btþock = `Áohl ( »q ->btclock); 3040 ià(! `v®id_btþock ( btþock )) 3043 d©a . btþock = btclock; 3044 d©a . time¡amp = `Áoh64 ( »q -> time¡¡ ); 3045 d©a . accu¿cy = `Áohs ( »q -> time¡§ ); 3047 ià( mþ -> mi -> mþ_sync_šfošd_cb ) 3048 mþ -> mi -> `mþ_sync_šfošd_cb (mþ, & d©a ); 3049 } } 3051  $´oc_sync_cmd ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t Ën ) 3053 ià(! mþ -> mi -> c¥_’abËd || !mþ-> c¥ ) { 3054  cmd [0]) { 3055  MCAP_MD_SYNC_CAP_REQ : 3056 `£nd_unsuµÜ‹d_ÿp_»q ( mþ ); 3058  MCAP_MD_SYNC_SET_REQ : 3059 `£nd_unsuµÜ‹d_£t_»q ( mþ ); 3065  cmd [0]) { 3066  MCAP_MD_SYNC_CAP_REQ : 3067 `´oc_sync_ÿp_»q ( mþ , cmd , Ën ); 3069  MCAP_MD_SYNC_CAP_RSP : 3070 `´oc_sync_ÿp_r¥ ( mþ , cmd , Ën ); 3072  MCAP_MD_SYNC_SET_REQ : 3073 `´oc_sync_£t_»q ( mþ , cmd , Ën ); 3075  MCAP_MD_SYNC_SET_RSP : 3076 `´oc_sync_£t_r¥ ( mþ , cmd , Ën ); 3078  MCAP_MD_SYNC_INFO_IND : 3079 `´oc_sync_šfo_šd ( mþ , cmd , Ën ); 3082 } } 3084  $mÿp_sync_ÿp_»q ( mÿp_mþ * mþ , ušt16_t »qacc , 3085 mÿp_sync_ÿp_cb cb , gpoš‹r u£r_d©a , 3086 GE¼Ü ** ”r ) 3088  mÿp_sync_ÿp_cbd©a * cbd©a ; 3089 mÿp_md_sync_ÿp_»q * cmd ; 3091 ià(! mþ -> mi -> c¥_’abËd || !mþ-> c¥ ) { 3092 `g_£t_”rÜ ( ”r , 3093 MCAP_CSP_ERROR , 3094 MCAP_ERROR_RESOURCE_UNAVAILABLE , 3099 ià( mþ -> c¥ -> c¥_»q ) { 3100 `g_£t_”rÜ ( ”r , 3101 MCAP_CSP_ERROR , 3102 MCAP_ERROR_RESOURCE_UNAVAILABLE , 3107 mþ -> c¥ -> c¥_»q = MCAP_MD_SYNC_CAP_REQ ; 3108 cmd = `g_Ãw0 ( mÿp_md_sync_ÿp_»q , 1); 3110 cmd -> Ý = MCAP_MD_SYNC_CAP_REQ ; 3111 cmd -> time¡ = `htÚs ( »qacc ); 3113 cbd©a = `g_Ãw0 ( mÿp_sync_ÿp_cbd©a , 1); 3114 cbd©a -> cb = cb; 3115 cbd©a -> u£r_d©a = user_data; 3116 mþ -> c¥ -> c¥_´iv_d©a = cbd©a ; 3118 `£nd_sync_cmd ( mþ , cmd , (*cmd)); 3120 `g_ä“ ( cmd ); 3121 } } 3123  $mÿp_sync_£t_»q ( mÿp_mþ * mþ , ušt8_t upd©e , ušt32_t btþock , 3124 ušt64_t time¡amp , mÿp_sync_£t_cb cb , 3125 gpoš‹r u£r_d©a , GE¼Ü ** ”r ) 3127 mÿp_md_sync_£t_»q * cmd ; 3128  mÿp_sync_£t_cbd©a * cbd©a ; 3130 ià(! mþ -> mi -> c¥_’abËd || !mþ-> c¥ ) { 3131 `g_£t_”rÜ ( ”r , 3132 MCAP_CSP_ERROR , 3133 MCAP_ERROR_RESOURCE_UNAVAILABLE , 3138 ià(! mþ -> c¥ -> loÿl_ÿps ) { 3139 `g_£t_”rÜ ( ”r , 3140 MCAP_CSP_ERROR , 3141 MCAP_ERROR_RESOURCE_UNAVAILABLE , 3146 ià( mþ -> c¥ -> c¥_»q ) { 3147 `g_£t_”rÜ ( ”r , 3148 MCAP_CSP_ERROR , 3149 MCAP_ERROR_RESOURCE_UNAVAILABLE , 3154 mþ -> c¥ -> c¥_»q = MCAP_MD_SYNC_SET_REQ ; 3155 cmd = `g_Ãw0 ( mÿp_md_sync_£t_»q , 1); 3157 cmd -> Ý = MCAP_MD_SYNC_SET_REQ ; 3158 cmd -> time¡ui = upd©e ; 3159 cmd -> btþock = `htÚl (btclock); 3160 cmd -> time¡¡ = `htÚ64 ( time¡amp ); 3162 mþ -> c¥ -> šd_ex³ùed = upd©e ; 3164 cbd©a = `g_Ãw0 ( mÿp_sync_£t_cbd©a , 1); 3165 cbd©a -> cb = cb; 3166 cbd©a -> u£r_d©a = user_data; 3167 mþ -> c¥ -> c¥_´iv_d©a = cbd©a ; 3169 `£nd_sync_cmd ( mþ , cmd , (*cmd)); 3171 `g_ä“ ( cmd ); 3172 } } 3174  $mÿp_’abË_c¥ ( mÿp_š¡ªû * mi ) 3176 mi -> c¥_’abËd = TRUE ; 3177 } } 3179  $mÿp_di§bË_c¥ ( mÿp_š¡ªû * mi ) 3181 mi -> c¥_’abËd = FALSE ; 3182 } } @profiles/health/mcap.h 25  #MCAP_VERSION 0x0100 ) 28  #MCAP_SUP_PROC 0x06 ) 31  #MCAP_CC_MTU 48 ) 32  #MCAP_DC_MTU 65535 ) 35  #MCAP_ERROR_RSP 0x00 ) 36  #MCAP_MD_CREATE_MDL_REQ 0x01 ) 37  #MCAP_MD_CREATE_MDL_RSP 0x02 ) 38  #MCAP_MD_RECONNECT_MDL_REQ 0x03 ) 39  #MCAP_MD_RECONNECT_MDL_RSP 0x04 ) 40  #MCAP_MD_ABORT_MDL_REQ 0x05 ) 41  #MCAP_MD_ABORT_MDL_RSP 0x06 ) 42  #MCAP_MD_DELETE_MDL_REQ 0x07 ) 43  #MCAP_MD_DELETE_MDL_RSP 0x08 ) 46  #MCAP_MD_SYNC_CAP_REQ 0x11 ) 47  #MCAP_MD_SYNC_CAP_RSP 0x12 ) 48  #MCAP_MD_SYNC_SET_REQ 0x13 ) 49  #MCAP_MD_SYNC_SET_RSP 0x14 ) 50  #MCAP_MD_SYNC_INFO_IND 0x15 ) 53  #MCAP_SUCCESS 0x00 ) 54  #MCAP_INVALID_OP_CODE 0x01 ) 55  #MCAP_INVALID_PARAM_VALUE 0x02 ) 56  #MCAP_INVALID_MDEP 0x03 ) 57  #MCAP_MDEP_BUSY 0x04 ) 58  #MCAP_INVALID_MDL 0x05 ) 59  #MCAP_MDL_BUSY 0x06 ) 60  #MCAP_INVALID_OPERATION 0x07 ) 61  #MCAP_RESOURCE_UNAVAILABLE 0x08 ) 62  #MCAP_UNSPECIFIED_ERROR 0x09 ) 63  #MCAP_REQUEST_NOT_SUPPORTED 0x0A ) 64  #MCAP_CONFIGURATION_REJECTED 0x0B ) 67  #MCAP_MDLID_RESERVED 0x0000 ) 68  #MCAP_MDLID_INITIAL 0x0001 ) 69  #MCAP_MDLID_FINAL 0xFEFF ) 70  #MCAP_ALL_MDLIDS 0xFFFF ) 73  #MCAP_MDEPID_INITIAL 0x00 ) 74  #MCAP_MDEPID_FINAL 0x7F ) 77  #MCAP_BTCLOCK_IMMEDIATE 0xffffffffUL ) 78  #MCAP_TMSTAMP_DONTSET 0xffffffffffffffffULL ) 79  #MCAP_BTCLOCK_MAX 0x0fffffff ) 80  #MCAP_BTCLOCK_FIELD ( MCAP_BTCLOCK_MAX + 1) ) 82  #MCAP_CTRL_CACHED 0x01 ) 83  #MCAP_CTRL_STD_OP 0x02 ) 84  #MCAP_CTRL_SYNC_OP 0x04 ) 85  #MCAP_CTRL_CONN 0x08 ) 86  #MCAP_CTRL_FREE 0x10 ) 87  #MCAP_CTRL_NOCACHE 0x20 ) 94 ušt8_t mÝ ; 95 ušt16_t mmdl ; 96 ušt8_t mmd• ; 97 ušt8_t mcÚf ; 98 } t__©Œibu‹__ (( t·cked )è tmÿp_md_ü—‹_mdl_»q ; 101 ušt8_t mÝ ; 102 ušt16_t mmdl ; 103 } t__©Œibu‹__ (( t·cked )è tmÿp_md_»q ; 108 ušt8_t mÝ ; 109 ušt8_t mrc ; 110 ušt16_t mmdl ; 111 ušt8_t md©a [0]; 112 } t__©Œibu‹__ (( t·cked )è tmÿp_r¥ ; 117 ušt8_t mÝ ; 118 ušt16_t mtime¡ ; 119 } t__©Œibu‹__ (( t·cked )è tmÿp_md_sync_ÿp_»q ; 122 ušt8_t mÝ ; 123 ušt8_t mrc ; 124 } t__©Œibu‹__ (( t·cked )è tmÿp_md_sync_r¥ ; 127 ušt8_t mÝ ; 128 ušt8_t mrc ; 129 ušt8_t mbtþock ; 130 ušt16_t m¦time ; 131 ušt16_t mtime¡Ä ; 132 ušt16_t mtime¡Ç ; 133 } t__©Œibu‹__ (( t·cked )è tmÿp_md_sync_ÿp_r¥ ; 136 ušt8_t mÝ ; 137 ušt8_t mtime¡ui ; 138 ušt32_t mbtþock ; 139 ušt64_t mtime¡¡ ; 140 } t__©Œibu‹__ (( t·cked )è tmÿp_md_sync_£t_»q ; 143 št8_t mÝ ; 144 ušt8_t mrc ; 145 ušt32_t mbtþock ; 146 ušt64_t mtime¡¡ ; 147 ušt16_t mtime¡§ ; 148 } t__©Œibu‹__ (( t·cked )è tmÿp_md_sync_£t_r¥ ; 151 ušt8_t mÝ ; 152 ušt32_t mbtþock ; 153 ušt64_t mtime¡¡ ; 154 ušt16_t mtime¡§ ; 155 } t__©Œibu‹__ (( t·cked )è tmÿp_md_sync_šfo_šd ; 159 mMCAP_ERROR_INVALID_OP_CODE = 1, 160 mMCAP_ERROR_INVALID_PARAM_VALUE , 161 mMCAP_ERROR_INVALID_MDEP , 162 mMCAP_ERROR_MDEP_BUSY , 163 mMCAP_ERROR_INVALID_MDL , 164 mMCAP_ERROR_MDL_BUSY , 165 mMCAP_ERROR_INVALID_OPERATION , 166 mMCAP_ERROR_RESOURCE_UNAVAILABLE , 167 mMCAP_ERROR_UNSPECIFIED_ERROR , 168 mMCAP_ERROR_REQUEST_NOT_SUPPORTED , 169 mMCAP_ERROR_CONFIGURATION_REJECTED , 171 mMCAP_ERROR_INVALID_ARGS , 172 mMCAP_ERROR_ALREADY_EXISTS , 173 mMCAP_ERROR_REQ_IGNORED , 174 mMCAP_ERROR_MCL_CLOSED , 175 mMCAP_ERROR_FAILED 176 } tMÿpE¼Ü ; 179 mMCAP_MDL_CB_INVALID , 180 mMCAP_MDL_CB_CONNECTED , 181 mMCAP_MDL_CB_CLOSED , 182 mMCAP_MDL_CB_DELETED , 183 mMCAP_MDL_CB_ABORTED , 184 mMCAP_MDL_CB_REMOTE_CONN_REQ , 185 mMCAP_MDL_CB_REMOTE_RECONN_REQ 186 } tMÿpMþCb ; 189 mMCL_CONNECTED , 190 mMCL_PENDING , 191 mMCL_ACTIVE , 192 mMCL_IDLE 193 } tMCLS‹ ; 196 mMCL_ACCEPTOR , 197 mMCL_INITIATOR 198 } tMCLRÞe ; 201 mMCL_AVAILABLE , 202 mMCL_WAITING_RSP 203 } tMCAPCŒl ; 206 mMDL_WAITING , 207 mMDL_CONNECTED , 208 mMDL_DELETING , 209 mMDL_CLOSED 210 } tMDLS‹ ; 212  gmÿp_c¥ ; 213  gmÿp_mdl_Ý_cb ; 214  gmÿp_š¡ªû ; 215  gmÿp_mþ ; 216  gmÿp_mdl ; 217  gsync_šfo_šd_d©a ; 223 (* tmÿp_mdl_ev’t_cb è( tmÿp_mdl * tmdl , tgpoš‹r td©a ); 224 (* tmÿp_mdl_Ý”©iÚ_cÚf_cb è( tmÿp_mdl * tmdl , tušt8_t tcÚf , 225 tGE¼Ü * t”r , tgpoš‹r td©a ); 226 (* tmÿp_mdl_Ý”©iÚ_cb è( tmÿp_mdl * tmdl , tGE¼Ü * t”r , 227 tgpoš‹r td©a ); 228 (* tmÿp_mdl_nÙify_cb è( tGE¼Ü * t”r , tgpoš‹r td©a ); 231  $ušt8_t (* tmÿp_»mÙe_mdl_cÚn_»q_cb è( tmÿp_mþ * tmþ , 232 tušt8_t tmd•id , tušt16_t tmdlid , 233 tušt8_t * tcÚf , tgpoš‹r td©a ); 234  $ušt8_t (* tmÿp_»mÙe_mdl_»cÚn_»q_cb è( tmÿp_mdl * tmdl , 235 tgpoš‹r td©a ); 239 (* tmÿp_mþ_ev’t_cb è( tmÿp_mþ * tmþ , tgpoš‹r td©a ); 240 (* tmÿp_mþ_cÚÃù_cb è( tmÿp_mþ * tmþ , tGE¼Ü * t”r , 241 tgpoš‹r td©a ); 245 (* tmÿp_šfo_šd_ev’t_cb è( tmÿp_mþ * tmþ , 246  tsync_šfo_šd_d©a * td©a ); 248 (* tmÿp_sync_ÿp_cb è( tmÿp_mþ * tmþ , 249 tušt8_t tmÿp_”r , 250 tušt8_t tbtþock»s , 251 tušt16_t tsynþ—d , 252 tušt16_t ttm¡am´es , 253 tušt16_t ttm¡am·cc , 254 tGE¼Ü * t”r , 255 tgpoš‹r td©a ); 257 (* tmÿp_sync_£t_cb è( tmÿp_mþ * tmþ , 258 tušt8_t tmÿp_”r , 259 tušt32_t tbtþock , 260 tušt64_t ttime¡amp , 261 tušt16_t taccu¿cy , 262 tGE¼Ü * t”r , 263 tgpoš‹r td©a ); 265  smÿp_mdl_cb { 266 mÿp_mdl_ev’t_cb mdl_cÚÃùed ; 267 mÿp_mdl_ev’t_cb mdl_þo£d ; 268 mÿp_mdl_ev’t_cb mdl_d–‘ed ; 269 mÿp_mdl_ev’t_cb mdl_abÜ‹d ; 270 mÿp_»mÙe_mdl_cÚn_»q_cb mdl_cÚn_»q ; 271 mÿp_»mÙe_mdl_»cÚn_»q_cb mdl_»cÚn_»q ; 272 gpoš‹r u£r_d©a ; 275  smÿp_š¡ªû { 276 bdaddr_t ¤c ; 277 GIOChªÃl * ccio ; 278 GIOChªÃl * dcio ; 279 GSLi¡ * mþs ; 280 GSLi¡ * ÿched ; 281 BtIOSecLev– £c ; 282 mÿp_mþ_ev’t_cb mþ_cÚÃùed_cb ; 283 mÿp_mþ_ev’t_cb mþ_»cÚÃùed_cb ; 284 mÿp_mþ_ev’t_cb mþ_discÚÃùed_cb ; 285 mÿp_mþ_ev’t_cb mþ_unÿched_cb ; 286 mÿp_šfo_šd_ev’t_cb mþ_sync_šfošd_cb ; 287 gpoš‹r u£r_d©a ; 288  »f ; 290 gboÞ—n c¥_’abËd ; 293  smÿp_mþ { 294  mÿp_š¡ªû * mi ; 295 bdaddr_t addr ; 296 GIOChªÃl * cc ; 297 gušt wid ; 298 GSLi¡ * mdls ; 299 MCLS‹ ¡©e ; 300 MCLRÞe rÞe ; 301 MCAPCŒl »q ; 302  mÿp_mdl_Ý_cb * ´iv_d©a ; 303  mÿp_mdl_cb * cb ; 304 gušt tid ; 305 ušt8_t * lcmd ; 306  »f ; 307 ušt8_t ù¾ ; 308 ušt16_t Ãxt_mdl ; 309  mÿp_c¥ * c¥ ; 312  smÿp_mdl { 313  mÿp_mþ * mþ ; 314 GIOChªÃl * dc ; 315 gušt wid ; 316 ušt16_t mdlid ; 317 ušt8_t md•_id ; 318 MDLS‹ ¡©e ; 319  »f ; 322  ssync_šfo_šd_d©a { 323 ušt32_t btþock ; 324 ušt64_t time¡amp ; 325 ušt16_t accu¿cy ; 332 gboÞ—n `mÿp_ü—‹_mdl ( mÿp_mþ * mþ , 333 ušt8_t md•id , 334 ušt8_t cÚf , 335 mÿp_mdl_Ý”©iÚ_cÚf_cb cÚÃù_cb , 336 gpoš‹r u£r_d©a , 337 GDe¡royNÙify de¡roy , 338 GE¼Ü ** ”r ); 339 gboÞ—n `mÿp_»cÚÃù_mdl ( mÿp_mdl * mdl , 340 mÿp_mdl_Ý”©iÚ_cb »cÚÃù_cb , 341 gpoš‹r u£r_d©a , 342 GDe¡royNÙify de¡roy , 343 GE¼Ü ** ”r ); 344 gboÞ—n `mÿp_d–‘e_®l_mdls ( mÿp_mþ * mþ , 345 mÿp_mdl_nÙify_cb d–‘e_cb , 346 gpoš‹r u£r_d©a , 347 GDe¡royNÙify de¡roy , 348 GE¼Ü ** ”r ); 349 gboÞ—n `mÿp_d–‘e_mdl ( mÿp_mdl * mdl , 350 mÿp_mdl_nÙify_cb d–‘e_cb , 351 gpoš‹r u£r_d©a , 352 GDe¡royNÙify de¡roy , 353 GE¼Ü ** ”r ); 354 gboÞ—n `mÿp_cÚÃù_mdl ( mÿp_mdl * mdl , 355 ušt8_t mode , 356 ušt16_t dýsm , 357 mÿp_mdl_Ý”©iÚ_cb cÚÃù_cb , 358 gpoš‹r u£r_d©a , 359 GDe¡royNÙify de¡roy , 360 GE¼Ü ** ”r ); 361 gboÞ—n `mÿp_mdl_abÜt ( mÿp_mdl * mdl , 362 mÿp_mdl_nÙify_cb abÜt_cb , 363 gpoš‹r u£r_d©a , 364 GDe¡royNÙify de¡roy , 365 GE¼Ü ** ”r ); 367  `mÿp_mdl_g‘_fd ( mÿp_mdl * mdl ); 368 ušt16_t `mÿp_mdl_g‘_mdlid ( mÿp_mdl * mdl ); 369  mÿp_mdl * `mÿp_mdl_»f (mÿp_mdÈ* mdl ); 370  `mÿp_mdl_uÄef ( mÿp_mdl * mdl ); 374 gboÞ—n `mÿp_ü—‹_mþ ( mÿp_š¡ªû * mi , 375 cÚ¡ bdaddr_t * addr , 376 ušt16_t cýsm , 377 mÿp_mþ_cÚÃù_cb cÚÃù_cb , 378 gpoš‹r u£r_d©a , 379 GDe¡royNÙify de¡roy , 380 GE¼Ü ** ”r ); 381  `mÿp_þo£_mþ ( mÿp_mþ * mþ , gboÞ—n ÿche ); 382 gboÞ—n `mÿp_mþ_£t_cb ( mÿp_mþ * mþ , gpoš‹r u£r_d©a , 383 GE¼Ü ** g”r , MÿpMþCb cb1 , ...); 384  `mÿp_mþ_g‘_addr ( mÿp_mþ * mþ , bdaddr_t * addr ); 385  mÿp_mþ * `mÿp_mþ_»f (mÿp_mþ * mþ ); 386  `mÿp_mþ_uÄef ( mÿp_mþ * mþ ); 390  `mÿp_’abË_c¥ ( mÿp_š¡ªû * mi ); 391  `mÿp_di§bË_c¥ ( mÿp_š¡ªû * mi ); 392 ušt64_t `mÿp_g‘_time¡amp ( mÿp_mþ * mþ , 393  time¥ec * giv’_time ); 394 ušt32_t `mÿp_g‘_btþock ( mÿp_mþ * mþ ); 396  `mÿp_sync_ÿp_»q ( mÿp_mþ * mþ , 397 ušt16_t »qacc , 398 mÿp_sync_ÿp_cb cb , 399 gpoš‹r u£r_d©a , 400 GE¼Ü ** ”r ); 402  `mÿp_sync_£t_»q ( mÿp_mþ * mþ , 403 ušt8_t upd©e , 404 ušt32_t btþock , 405 ušt64_t time¡amp , 406 mÿp_sync_£t_cb cb , 407 gpoš‹r u£r_d©a , 408 GE¼Ü ** ”r ); 412  mÿp_š¡ªû * `mÿp_ü—‹_š¡ªû (cÚ¡ bdaddr_t * ¤c , 413 BtIOSecLev– £c , ušt16_t cýsm , 414 ušt16_t dýsm , 415 mÿp_mþ_ev’t_cb mþ_cÚÃùed , 416 mÿp_mþ_ev’t_cb mþ_»cÚÃùed , 417 mÿp_mþ_ev’t_cb mþ_discÚÃùed , 418 mÿp_mþ_ev’t_cb mþ_unÿched , 419 mÿp_šfo_šd_ev’t_cb mþ_sync_šfo_šd , 420 gpoš‹r u£r_d©a , 421 GE¼Ü ** g”r ); 422  `mÿp_»Ëa£_š¡ªû ( mÿp_š¡ªû * mi ); 424  mÿp_š¡ªû * `mÿp_š¡ªû_»f (mÿp_š¡ªû * mi ); 425  `mÿp_š¡ªû_uÄef ( mÿp_š¡ªû * mi ); 427 ušt16_t `mÿp_g‘_ù¾_psm ( mÿp_š¡ªû * mi , GE¼Ü ** ”r ); 428 ušt16_t `mÿp_g‘_d©a_psm ( mÿp_š¡ªû * mi , GE¼Ü ** ”r ); 430 gboÞ—n `mÿp_£t_d©a_chª_mode ( mÿp_š¡ªû * mi , ušt8_t mode , 431 GE¼Ü ** ”r ); 433  `mÿp_£nd_d©a ( sock , cÚ¡ * buf , ušt32_t size ); 435  `´oc_sync_cmd ( mÿp_mþ * mþ , ušt8_t * cmd , ušt32_t Ën ); 436  `mÿp_sync_š™ ( mÿp_mþ * mþ ); 437  `mÿp_sync_¡Ý ( mÿp_mþ * mþ ); @profiles/heartrate/heartrate.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<”ºo.h > 28  ~<¡dboÞ.h > 29  ~ 30  ~ 32  ~"lib/uuid.h " 33  ~"¤c/¶ugš.h " 34  ~"¤c/ad­‹r.h " 35  ~"¤c/dbus-commÚ.h " 36  ~"¤c/deviû.h " 37  ~"¤c/´ofže.h " 38  ~"¤c/sh¬ed/utž.h " 39  ~"¤c/£rviû.h " 40  ~"¤c/”rÜ.h " 41  ~"©Œib/g©Œib.h " 42  ~"©Œib/©t.h " 43  ~"©Œib/g©t.h " 44  ~"¤c/©tio.h " 45  ~"¤c/log.h " 47  #HEART_RATE_INTERFACE "Üg.bluez.H—¹R©e1" ) 48  #HEART_RATE_MANAGER_INTERFACE "Üg.bluez.H—¹R©eMªag”1" ) 49  #HEART_RATE_WATCHER_INTERFACE "Üg.bluez.H—¹R©eW©ch”1" ) 51  #HR_VALUE_FORMAT 0x01 ) 52  #SENSOR_CONTACT_DETECTED 0x02 ) 53  #SENSOR_CONTACT_SUPPORT 0x04 ) 54  #ENERGY_EXP_STATUS 0x08 ) 55  #RR_INTERVAL 0x10 ) 57  sh—¹¿‹_ad­‹r { 58  btd_ad­‹r * mad­‹r ; 59 GSLi¡ * mdeviûs ; 60 GSLi¡ * mw©ch”s ; 63  sh—¹¿‹ { 64  btd_deviû * mdev ; 65  h—¹¿‹_ad­‹r * mh¿d­‹r ; 66 GA‰rib * m©Œib ; 67 gušt m©tioid ; 68 gušt m©tiÚÙid ; 70  ©t_¿nge * msvc_¿nge ; 72 ušt16_t mm—su»m’t_ccc_hªdË ; 73 ušt16_t mhrý_v®_hªdË ; 75 gboÞ—n mhas_loÿtiÚ ; 76 ušt8_t mloÿtiÚ ; 79  sw©ch” { 80  h—¹¿‹_ad­‹r * mh¿d­‹r ; 81 gušt mid ; 82 * m¤v ; 83 * m·th ; 86  sm—su»m’t { 87  h—¹¿‹ * mhr ; 88 ušt16_t mv®ue ; 89 gboÞ—n mhas_’”gy ; 90 ušt16_t m’”gy ; 91 gboÞ—n mhas_cÚù ; 92 gboÞ—n mcÚù ; 93 ušt16_t mnum_š‹rv® ; 94 ušt16_t * mš‹rv® ; 97  GSLi¡ * gh—¹¿‹_ad­‹rs = NULL ; 99 cÚ¡ * cÚ¡ gloÿtiÚ_’um [] = { 109 cÚ¡ * $loÿtiÚ2¡r ( ušt8_t v®ue ) 111 ià( v®ue < `G_N_ELEMENTS ( loÿtiÚ_’um )) 112  loÿtiÚ_’um [ v®ue ]; 114 `”rÜ ("Body S’sÜ LoÿtiÚ [%d] i RFU", v®ue ); 116  NULL ; 117 } } 119  $cmp_ad­‹r ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 121 cÚ¡  h—¹¿‹_ad­‹r * h¿d­‹r = a ; 122 cÚ¡  btd_ad­‹r * ad­‹r = b ; 124 ià( ad­‹r =ð h¿d­‹r ->adapter) 128 } } 130  $cmp_deviû ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 132 cÚ¡  h—¹¿‹ * hr = a ; 133 cÚ¡  btd_deviû * dev = b ; 135 ià( dev =ð hr ->dev) 139 } } 141  $cmp_w©ch” ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 143 cÚ¡  w©ch” *w©ch” = a ; 144 cÚ¡  w©ch” * m©ch = b ; 145  »t ; 147 »t = `g_¡rcmp0 ( w©ch” -> ¤v , m©ch ->srv); 148 ià( »t != 0) 149  »t ; 151  `g_¡rcmp0 ( w©ch” -> ·th , m©ch ->path); 152 } } 154  h—¹¿‹_ad­‹r * 155 $fšd_h—¹¿‹_ad­‹r ( btd_ad­‹r * ad­‹r ) 157 GSLi¡ * l = `g_¦i¡_fšd_cu¡om ( h—¹¿‹_ad­‹rs , ad­‹r , 158 cmp_ad­‹r ); 159 ià(! l ) 160  NULL ; 162  l -> d©a ; 163 } } 165  $de¡roy_w©ch” ( gpoš‹r u£r_d©a ) 167  w©ch” *w©ch” = u£r_d©a ; 169 `g_ä“ ( w©ch” -> ·th ); 170 `g_ä“ ( w©ch” -> ¤v ); 171 `g_ä“ ( w©ch” ); 172 } } 174  w©ch” * $fšd_w©ch” ( GSLi¡ * li¡ , cÚ¡ * £nd” , 175 cÚ¡ * ·th ) 177  w©ch” * m©ch ; 178 GSLi¡ * l ; 180 m©ch = `g_Ãw0 ( w©ch” , 1); 181 m©ch -> ¤v = `g_¡rdup ( £nd” ); 182 m©ch -> ·th = `g_¡rdup (path); 184 l = `g_¦i¡_fšd_cu¡om ( li¡ , m©ch , cmp_w©ch” ); 185 `de¡roy_w©ch” ( m©ch ); 187 ià( l !ð NULL ) 188  l -> d©a ; 190  NULL ; 191 } } 193  $de¡roy_h—¹¿‹ ( gpoš‹r u£r_d©a ) 195  h—¹¿‹ * hr = u£r_d©a ; 197 ià( hr -> ©tioid > 0) 198 `btd_deviû_»move_©tio_ÿÎback ( hr -> dev , hr-> ©tioid ); 200 ià( hr -> ©Œib !ð NULL ) { 201 `g_©Œib_uÄegi¡” ( hr -> ©Œib , hr-> ©tiÚÙid ); 202 `g_©Œib_uÄef ( hr -> ©Œib ); 205 `btd_deviû_uÄef ( hr -> dev ); 206 `g_ä“ ( hr -> svc_¿nge ); 207 `g_ä“ ( hr ); 208 } } 210  $»move_w©ch” ( gpoš‹r u£r_d©a ) 212  w©ch” *w©ch” = u£r_d©a ; 214 `g_dbus_»move_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), w©ch” -> id ); 215 } } 217  $de¡roy_h—¹¿‹_ad­‹r ( gpoš‹r u£r_d©a ) 219  h—¹¿‹_ad­‹r * h¿d­‹r = u£r_d©a ; 221 `g_¦i¡_ä“_fuÎ ( h¿d­‹r -> w©ch”s , »move_w©ch” ); 223 `g_ä“ ( h¿d­‹r ); 224 } } 226  $»ad_£nsÜ_loÿtiÚ_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 227 gušt16 Ën , gpoš‹r u£r_d©a ) 229  h—¹¿‹ * hr = u£r_d©a ; 230 ušt8_t v®ue ; 231 ssize_t vËn ; 233 ià( ¡©us != 0) { 234 `”rÜ ("Body Sensor Location„ead failed: %s", 235 `©t_ecode2¡r ( ¡©us )); 239 vËn = `dec_»ad_»¥ ( pdu , Ën , & v®ue , (value)); 240 ià( vËn < 0) { 241 `”rÜ ("Protocolƒrror"); 245 ià( vËn !ð( v®ue )) { 246 `”rÜ ("Invalid†ength for Body Sensor Location"); 250 hr -> has_loÿtiÚ = TRUE ; 251 hr -> loÿtiÚ = v®ue ; 252 } } 254  $ch¬_wr™e_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 255 gpoš‹r u£r_d©a ) 257 * msg = u£r_d©a ; 259 ià( ¡©us != 0) 260 `”rÜ ("% çžed", msg ); 262 `g_ä“ ( msg ); 263 } } 265  $upd©e_w©ch” ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 267  w©ch” * w = d©a ; 268  m—su»m’t * m = u£r_d©a ; 269  h—¹¿‹ * hr = m ->hr; 270 cÚ¡ * ·th = `deviû_g‘_·th ( hr -> dev ); 271 DBusMes§geI‹r ™” ; 272 DBusMes§geI‹r diù ; 273 DBusMes§ge * msg ; 275 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( w -> ¤v , w-> ·th , 276 HEART_RATE_WATCHER_INTERFACE , "MeasurementReceived"); 277 ià( msg =ð NULL ) 280 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 282 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 284 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 285 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 286 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 287 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 289 `diù_­³nd_’Œy (& diù , "V®ue", DBUS_TYPE_UINT16 , & m -> v®ue ); 291 ià( m -> has_’”gy ) 292 `diù_­³nd_’Œy (& diù , "EÃrgy", DBUS_TYPE_UINT16 , 293 & m -> ’”gy ); 295 ià( m -> has_cÚù ) 296 `diù_­³nd_’Œy (& diù , "CÚù", DBUS_TYPE_BOOLEAN , 297 & m -> cÚù ); 299 ià( m -> num_š‹rv® > 0) 300 `diù_­³nd_¬¿y (& diù , "IÁ”v®", DBUS_TYPE_UINT16 , 301 & m -> š‹rv® , m-> num_š‹rv® ); 303 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & diù ); 305 `dbus_mes§ge_£t_no_»¶y ( msg , TRUE ); 306 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), msg ); 307 } } 309  $´oûss_m—su»m’t ( h—¹¿‹ * hr , cÚ¡ ušt8_t * pdu , 310 ušt16_t Ën ) 312  m—su»m’t m ; 313 ušt8_t æags ; 315 æags = * pdu ; 317 pdu ++; 318 Ën --; 320 `mem£t (& m , 0, (m)); 322 ià( æags & HR_VALUE_FORMAT ) { 323 ià( Ën < 2) { 324 `”rÜ ("Heart Rate Measurement field missing"); 328 m . v®ue = `g‘_Ë16 ( pdu ); 329 pdu += 2; 330 Ën -= 2; 332 ià( Ën < 1) { 333 `”rÜ ("Heart Rate Measurement field missing"); 337 m . v®ue = * pdu ; 338 pdu ++; 339 Ën --; 342 ià( æags & ENERGY_EXP_STATUS ) { 343 ià( Ën < 2) { 344 `”rÜ ("Energy Expended field missing"); 348 m . has_’”gy = TRUE ; 349 m . ’”gy = `g‘_Ë16 ( pdu ); 350 pdu += 2; 351 Ën -= 2; 354 ià( æags & RR_INTERVAL ) { 355  i ; 357 ià( Ën == 0 || (len % 2 != 0)) { 358 `”rÜ ("RR-Interval field malformed"); 362 m . num_š‹rv® = Ën / 2; 363 m . š‹rv® = `g_Ãw ( ušt16_t , m. num_š‹rv® ); 365  i = 0; i < m . num_š‹rv® ; pdu += 2, i++) 366 m . š‹rv® [ i ] = `g‘_Ë16 ( pdu ); 369 ià( æags & SENSOR_CONTACT_SUPPORT ) { 370 m . has_cÚù = TRUE ; 371 m . cÚù = !!( æags & SENSOR_CONTACT_DETECTED ); 375 m . hr = hr; 376 `g_¦i¡_fÜ—ch ( hr -> h¿d­‹r -> w©ch”s , upd©e_w©ch” , & m ); 378 `g_ä“ ( m . š‹rv® ); 379 } } 381  $nÙify_hªdËr (cÚ¡ ušt8_t * pdu , ušt16_t Ën , gpoš‹r u£r_d©a ) 383  h—¹¿‹ * hr = u£r_d©a ; 386 ià( Ën < 3) { 387 `”rÜ ("Invalid PDU„eceived"); 391 `´oûss_m—su»m’t ( hr , pdu + 3, Ën - 3); 392 } } 394  $discov”_ccc_cb ( ušt8_t ¡©us , GSLi¡ * descs , * u£r_d©a ) 396  h—¹¿‹ * hr = u£r_d©a ; 397  g©t_desc * desc ; 398 ušt8_t ©Œ_v® [2]; 399 * msg ; 401 ià( ¡©us != 0) { 402 `”rÜ ("Discover Heart Rate Measurement descriptors failed: %s", 403 `©t_ecode2¡r ( ¡©us )); 408 desc = descs -> d©a ; 410 hr -> m—su»m’t_ccc_hªdË = desc -> hªdË ; 412 ià( `g_¦i¡_Ëngth ( hr -> h¿d­‹r -> w©ch”s ) == 0) { 413 `put_Ë16 (0x0000, ©Œ_v® ); 414 msg = `g_¡rdup ("Disable measurement"); 416 `put_Ë16 ( GATT_CLIENT_CHARAC_CFG_NOTIF_BIT , ©Œ_v® ); 417 msg = `g_¡rdup ("Enable measurement"); 420 `g©t_wr™e_ch¬ ( hr -> ©Œib , desc -> hªdË , ©Œ_v® , (attr_val), 421 ch¬_wr™e_cb , msg ); 422 } } 424  $discov”_m—su»m’t_ccc ( h—¹¿‹ * hr , 425  g©t_ch¬ * c , g©t_ch¬ * c_Ãxt ) 427 ušt16_t ¡¬t , ’d ; 428 bt_uuid_t uuid ; 430 ¡¬t = c -> v®ue_hªdË + 1; 432 ià( c_Ãxt !ð NULL ) { 433 ià( ¡¬t =ð c_Ãxt -> hªdË ) 435 ’d = c_Ãxt -> hªdË - 1; 436 } ià( c -> v®ue_hªdË !ð hr -> svc_¿nge -> ’d ) { 437 ’d = hr -> svc_¿nge ->end; 442 `bt_uuid16_ü—‹ (& uuid , GATT_CLIENT_CHARAC_CFG_UUID ); 444 `g©t_discov”_desc ( hr -> ©Œib , ¡¬t , ’d , & uuid , discov”_ccc_cb , hr); 445 } } 447  $discov”_ch¬_cb ( ušt8_t ¡©us , GSLi¡ * ch¬s , * u£r_d©a ) 449  h—¹¿‹ * hr = u£r_d©a ; 451 ià( ¡©us ) { 452 `”rÜ ("Discover HRS characteristics failed: %s", 453 `©t_ecode2¡r ( ¡©us )); 457 ; ch¬s ; ch¬ ðch¬s-> Ãxt ) { 458  g©t_ch¬ * c = ch¬s -> d©a ; 460 ià( `g_¡rcmp0 ( c -> uuid , HEART_RATE_MEASUREMENT_UUID ) == 0) { 461  g©t_ch¬ * c_Ãxt = 462 ( ch¬s -> Ãxt ? ch¬s->Ãxt-> d©a : NULL ); 464 hr -> ©tiÚÙid = `g_©Œib_»gi¡” (hr-> ©Œib , 465 ATT_OP_HANDLE_NOTIFY , 466 c -> v®ue_hªdË , 467 nÙify_hªdËr , hr , NULL ); 469 `discov”_m—su»m’t_ccc ( hr , c , c_Ãxt ); 470 } ià( `g_¡rcmp0 ( c -> uuid , BODY_SENSOR_LOCATION_UUID ) == 0) { 471 `DBG ("Body Sensor Location supported"); 473 `g©t_»ad_ch¬ ( hr -> ©Œib , c -> v®ue_hªdË , 474 »ad_£nsÜ_loÿtiÚ_cb , hr ); 475 } ià( `g_¡rcmp0 ( c -> uuid , 476 HEART_RATE_CONTROL_POINT_UUID ) == 0) { 477 `DBG ("Heart Rate Control Point supported"); 478 hr -> hrý_v®_hªdË = c -> v®ue_hªdË ; 481 } } 483  $’abË_m—su»m’t ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 485  h—¹¿‹ * hr = d©a ; 486 ušt16_t hªdË = hr -> m—su»m’t_ccc_hªdË ; 487 ušt8_t v®ue [2]; 488 * msg ; 490 ià( hr -> ©Œib =ð NULL || ! hªdË ) 493 `put_Ë16 ( GATT_CLIENT_CHARAC_CFG_NOTIF_BIT , v®ue ); 494 msg = `g_¡rdup ("Enable measurement"); 496 `g©t_wr™e_ch¬ ( hr -> ©Œib , hªdË , v®ue , (value), 497 ch¬_wr™e_cb , msg ); 498 } } 500  $di§bË_m—su»m’t ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 502  h—¹¿‹ * hr = d©a ; 503 ušt16_t hªdË = hr -> m—su»m’t_ccc_hªdË ; 504 ušt8_t v®ue [2]; 505 * msg ; 507 ià( hr -> ©Œib =ð NULL || ! hªdË ) 510 `put_Ë16 (0x0000, v®ue ); 511 msg = `g_¡rdup ("Disable measurement"); 513 `g©t_wr™e_ch¬ ( hr -> ©Œib , hªdË , v®ue , (value), 514 ch¬_wr™e_cb , msg ); 515 } } 517  $©tio_cÚÃùed_cb ( GA‰rib * ©Œib , gpoš‹r u£r_d©a ) 519  h—¹¿‹ * hr = u£r_d©a ; 521 `DBG (""); 523 hr -> ©Œib = `g_©Œib_»f (attrib); 525 `g©t_discov”_ch¬ ( hr -> ©Œib , hr-> svc_¿nge -> ¡¬t , hr->svc_¿nge-> ’d , 526 NULL , discov”_ch¬_cb , hr ); 527 } } 529  $©tio_discÚÃùed_cb ( gpoš‹r u£r_d©a ) 531  h—¹¿‹ * hr = u£r_d©a ; 533 `DBG (""); 535 ià( hr -> ©tiÚÙid > 0) { 536 `g_©Œib_uÄegi¡” ( hr -> ©Œib , hr-> ©tiÚÙid ); 537 hr -> ©tiÚÙid = 0; 540 `g_©Œib_uÄef ( hr -> ©Œib ); 541 hr -> ©Œib = NULL ; 542 } } 544  $w©ch”_ex™_cb ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 546  w©ch” *w©ch” = u£r_d©a ; 547  h—¹¿‹_ad­‹r * h¿d­‹r = w©ch” ->hradapter; 549 `DBG ("h—¹¿‹ w©ch” [%s] discÚÃùed", w©ch” -> ·th ); 551 h¿d­‹r -> w©ch”s = `g_¦i¡_»move (h¿d­‹r->w©ch”s, w©ch” ); 552 `g_dbus_»move_w©ch ( cÚn , w©ch” -> id ); 554 ià( `g_¦i¡_Ëngth ( h¿d­‹r -> w©ch”s ) == 0) 555 `g_¦i¡_fÜ—ch ( h¿d­‹r -> deviûs , di§bË_m—su»m’t , 0); 556 } } 558  DBusMes§ge * $»gi¡”_w©ch” ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 559 * d©a ) 561  h—¹¿‹_ad­‹r * h¿d­‹r = d©a ; 562  w©ch” *watcher; 563 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 564 * ·th ; 566 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 567 DBUS_TYPE_INVALID )) 568  `btd_”rÜ_šv®id_¬gs ( msg ); 570 w©ch” = `fšd_w©ch” ( h¿d­‹r -> w©ch”s , £nd” , ·th ); 571 ià( w©ch” !ð NULL ) 572  `btd_”rÜ_®»ady_exi¡s ( msg ); 574 w©ch” = `g_Ãw0 (watcher, 1); 575 w©ch” -> h¿d­‹r = hradapter; 576 w©ch” -> id = `g_dbus_add_discÚÃù_w©ch ( cÚn , £nd” , w©ch”_ex™_cb , 577 w©ch” , de¡roy_w©ch” ); 578 w©ch” -> ¤v = `g_¡rdup ( £nd” ); 579 w©ch” -> ·th = `g_¡rdup (path); 581 ià( `g_¦i¡_Ëngth ( h¿d­‹r -> w©ch”s ) == 0) 582 `g_¦i¡_fÜ—ch ( h¿d­‹r -> deviûs , ’abË_m—su»m’t , 0); 584 h¿d­‹r -> w©ch”s = `g_¦i¡_´•’d (h¿d­‹r->w©ch”s, w©ch” ); 586 `DBG ("h—¹¿‹ w©ch” [%s]„egi¡”ed", ·th ); 588  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 589 } } 591  DBusMes§ge * $uÄegi¡”_w©ch” ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 592 * d©a ) 594  h—¹¿‹_ad­‹r * h¿d­‹r = d©a ; 595  w©ch” *watcher; 596 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 597 * ·th ; 599 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 600 DBUS_TYPE_INVALID )) 601  `btd_”rÜ_šv®id_¬gs ( msg ); 603 w©ch” = `fšd_w©ch” ( h¿d­‹r -> w©ch”s , £nd” , ·th ); 604 ià( w©ch” =ð NULL ) 605  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 607 h¿d­‹r -> w©ch”s = `g_¦i¡_»move (h¿d­‹r->w©ch”s, w©ch” ); 608 `g_dbus_»move_w©ch ( cÚn , w©ch” -> id ); 610 ià( `g_¦i¡_Ëngth ( h¿d­‹r -> w©ch”s ) == 0) 611 `g_¦i¡_fÜ—ch ( h¿d­‹r -> deviûs , di§bË_m—su»m’t , 0); 613 `DBG ("h—¹¿‹ w©ch” [%s] uÄegi¡”ed", ·th ); 615  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 616 } } 618 cÚ¡ GDBusM‘hodTabË gh—¹¿‹_mªag”_m‘hods [] = { 619 { GDBUS_METHOD ("RegisterWatcher", 620 GDBUS_ARGS ({ "ag’t", "o" }), NULL , 621 »gi¡”_w©ch” ) }, 622 { GDBUS_METHOD ("UnregisterWatcher", 623 GDBUS_ARGS ({ "ag’t", "o" }), NULL , 624 uÄegi¡”_w©ch” ) }, 628  gboÞ—n $´Ý”ty_g‘_loÿtiÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 629 DBusMes§geI‹r * ™” , * d©a ) 631  h—¹¿‹ * hr = d©a ; 632 * loc ; 634 ià(! hr -> has_loÿtiÚ ) 635  FALSE ; 637 loc = `g_¡rdup ( `loÿtiÚ2¡r ( hr -> loÿtiÚ )); 639 ià( loc =ð NULL ) 640  FALSE ; 642 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & loc ); 644 `g_ä“ ( loc ); 646  TRUE ; 647 } } 649  gboÞ—n $´Ý”ty_exi¡s_loÿtiÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 650 * d©a ) 652  h—¹¿‹ * hr = d©a ; 654 ià(! hr -> has_loÿtiÚ || `loÿtiÚ2¡r (hr-> loÿtiÚ è=ð NULL ) 655  FALSE ; 657  TRUE ; 658 } } 660  gboÞ—n $´Ý”ty_g‘_»£t_suµÜ‹d (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 661 DBusMes§geI‹r * ™” , * d©a ) 663  h—¹¿‹ * hr = d©a ; 664 dbus_boÞ_t has_»£t = !! hr -> hrý_v®_hªdË ; 666 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & has_»£t ); 668  TRUE ; 669 } } 671  DBusMes§ge * $hrý_»£t ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 672 * d©a ) 674  h—¹¿‹ * hr = d©a ; 675 ušt8_t v®ue ; 676 * vmsg ; 678 ià(! hr -> hrý_v®_hªdË ) 679  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 681 ià(! hr -> ©Œib ) 682  `btd_”rÜ_nÙ_avažabË ( msg ); 684 v®ue = 0x01; 685 vmsg = `g_¡rdup ("Reset Control Point"); 686 `g©t_wr™e_ch¬ ( hr -> ©Œib , hr-> hrý_v®_hªdË , & v®ue , 687 ( v®ue ), ch¬_wr™e_cb , vmsg ); 689 `DBG ("Energy Expended Value has been„eset"); 691  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 692 } } 694 cÚ¡ GDBusM‘hodTabË gh—¹¿‹_deviû_m‘hods [] = { 695 { GDBUS_METHOD ("Re£t", NULL , NULL, hrý_»£t ) }, 699 cÚ¡ GDBusPrÝ”tyTabË gh—¹¿‹_deviû_´Ý”t›s [] = { 700 { "LoÿtiÚ", "s", ´Ý”ty_g‘_loÿtiÚ , NULL , 701 ´Ý”ty_exi¡s_loÿtiÚ }, 702 { "Re£tSuµÜ‹d", "b", ´Ý”ty_g‘_»£t_suµÜ‹d }, 706  $h—¹¿‹_ad­‹r_»gi¡” ( btd_ad­‹r * ad­‹r ) 708  h—¹¿‹_ad­‹r * h¿d­‹r ; 710 h¿d­‹r = `g_Ãw0 ( h—¹¿‹_ad­‹r , 1); 711 h¿d­‹r -> ad­‹r =‡dapter; 713 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 714 `ad­‹r_g‘_·th ( ad­‹r ), 715 HEART_RATE_MANAGER_INTERFACE , 716 h—¹¿‹_mªag”_m‘hods , 717 NULL , NULL, h¿d­‹r , 718 de¡roy_h—¹¿‹_ad­‹r )) { 719 `”rÜ ("D-Bus failedo„egister %s interface", 720 HEART_RATE_MANAGER_INTERFACE ); 721 `de¡roy_h—¹¿‹_ad­‹r ( h¿d­‹r ); 722  - EIO ; 725 h—¹¿‹_ad­‹rs = `g_¦i¡_´•’d (h—¹¿‹_ad­‹rs, h¿d­‹r ); 728 } } 730  $h—¹¿‹_ad­‹r_uÄegi¡” ( btd_ad­‹r * ad­‹r ) 732  h—¹¿‹_ad­‹r * h¿d­‹r ; 734 h¿d­‹r = `fšd_h—¹¿‹_ad­‹r ( ad­‹r ); 735 ià( h¿d­‹r =ð NULL ) 738 h—¹¿‹_ad­‹rs = `g_¦i¡_»move (h—¹¿‹_ad­‹rs, h¿d­‹r ); 740 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 741 `ad­‹r_g‘_·th ( h¿d­‹r -> ad­‹r ), 742 HEART_RATE_MANAGER_INTERFACE ); 743 } } 745  $h—¹¿‹_deviû_»gi¡” ( btd_deviû * deviû , 746  g©t_´im¬y * ´im ) 748  btd_ad­‹r * ad­‹r ; 749  h—¹¿‹_ad­‹r * h¿d­‹r ; 750  h—¹¿‹ * hr ; 752 ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 754 h¿d­‹r = `fšd_h—¹¿‹_ad­‹r ( ad­‹r ); 756 ià( h¿d­‹r =ð NULL ) 759 hr = `g_Ãw0 ( h—¹¿‹ , 1); 760 hr -> dev = `btd_deviû_»f ( deviû ); 761 hr -> h¿d­‹r = hradapter; 763 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 764 `deviû_g‘_·th ( deviû ), 765 HEART_RATE_INTERFACE , 766 h—¹¿‹_deviû_m‘hods , 767 NULL , 768 h—¹¿‹_deviû_´Ý”t›s , 769 hr , de¡roy_h—¹¿‹ )) { 770 `”rÜ ("D-Bus failedo„egister %s interface", 771 HEART_RATE_INTERFACE ); 772 `de¡roy_h—¹¿‹ ( hr ); 773  - EIO ; 776 hr -> svc_¿nge = `g_Ãw0 ( ©t_¿nge , 1); 777 hr -> svc_¿nge -> ¡¬t = ´im -> ¿nge .start; 778 hr -> svc_¿nge -> ’d = ´im -> ¿nge .end; 780 h¿d­‹r -> deviûs = `g_¦i¡_´•’d (h¿d­‹r->deviûs, hr ); 782 hr -> ©tioid = `btd_deviû_add_©tio_ÿÎback ( deviû , ©tio_cÚÃùed_cb , 783 ©tio_discÚÃùed_cb , hr ); 786 } } 788  $h—¹¿‹_deviû_uÄegi¡” ( btd_deviû * deviû ) 790  btd_ad­‹r * ad­‹r ; 791  h—¹¿‹_ad­‹r * h¿d­‹r ; 792  h—¹¿‹ * hr ; 793 GSLi¡ * l ; 795 ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 797 h¿d­‹r = `fšd_h—¹¿‹_ad­‹r ( ad­‹r ); 798 ià( h¿d­‹r =ð NULL ) 801 l = `g_¦i¡_fšd_cu¡om ( h¿d­‹r -> deviûs , deviû , cmp_deviû ); 802 ià( l =ð NULL ) 805 hr = l -> d©a ; 807 h¿d­‹r -> deviûs = `g_¦i¡_»move (h¿d­‹r->deviûs, hr ); 809 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 810 `deviû_g‘_·th ( deviû ), HEART_RATE_INTERFACE ); 811 } } 813  $h—¹¿‹_ad­‹r_´obe ( btd_´ofže * p , 814  btd_ad­‹r * ad­‹r ) 816  `h—¹¿‹_ad­‹r_»gi¡” ( ad­‹r ); 817 } } 819  $h—¹¿‹_ad­‹r_»move ( btd_´ofže * p , 820  btd_ad­‹r * ad­‹r ) 822 `h—¹¿‹_ad­‹r_uÄegi¡” ( ad­‹r ); 823 } } 825  $h—¹¿‹_deviû_´obe ( btd_£rviû * £rviû ) 827  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 828  g©t_´im¬y * ´im ; 830 ´im = `btd_deviû_g‘_´im¬y ( deviû , HEART_RATE_UUID ); 831 ià( ´im =ð NULL ) 832  - EINVAL ; 834  `h—¹¿‹_deviû_»gi¡” ( deviû , ´im ); 835 } } 837  $h—¹¿‹_deviû_»move ( btd_£rviû * £rviû ) 839  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 841 `h—¹¿‹_deviû_uÄegi¡” ( deviû ); 842 } } 844  btd_´ofže gh½_´ofže = { 845 . Çme = "Heart Rate GATT Driver", 846 . g»mÙe_uuid = HEART_RATE_UUID , 848 . gdeviû_´obe = h—¹¿‹_deviû_´obe , 849 . gdeviû_»move = h—¹¿‹_deviû_»move , 851 . gad­‹r_´obe = h—¹¿‹_ad­‹r_´obe , 852 . gad­‹r_»move = h—¹¿‹_ad­‹r_»move , 855  $h—¹¿‹_š™ () 857  `btd_´ofže_»gi¡” (& h½_´ofže ); 858 } } 860  $h—¹¿‹_ex™ () 862 `btd_´ofže_uÄegi¡” (& h½_´ofže ); 863 } } 865 BLUETOOTH_PLUGIN_DEFINE ( h—¹¿‹ , VERSION , BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 866 h—¹¿‹_š™ , h—¹¿‹_ex™ ) @profiles/iap/main.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<ùy³.h > 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 34  ~ 35  ~ 37  ~ 38  ~ 40  #IAP_PATH "/Üg/bluez/Ÿp" ) 42  #IAP_UUID "00000000-deÿ-çde-deÿ-d—fdeÿÿã" ) 44  #IAP_RECORD \ 45 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0002\"> \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0006\"> \ <£qu’û> \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ <©Œibu‹ id=\"0x0008\"> \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"Wœ–es iAP\" /> \ \ " ) 103  GMašLoÝ * gmaš_loÝ ; 105  gušt gŸp_sourû = 0; 107  gboÞ—n $Ÿp_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd™iÚ , 108 gpoš‹r u£r_d©a ) 110  buf [512]; 111 ssize_t Ën ; 112  fd ; 114 ià( cÚd™iÚ & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 115 Ÿp_sourû = 0; 116  FALSE ; 119 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 121 Ën = `»ad ( fd , buf , (buf)); 122 ià( Ën < 0) { 123 Ÿp_sourû = 0; 124  FALSE ; 127  TRUE ; 128 } } 130  gušt $ü—‹_sourû ( fd , GIOFunc func ) 132 GIOChªÃl * chªÃl ; 133 gušt sourû ; 135 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 137 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 138 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 139 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 141 sourû = `g_io_add_w©ch ( chªÃl , 142 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , func , NULL ); 144 `g_io_chªÃl_uÄef ( chªÃl ); 146  sourû ; 147 } } 149  $»move_sourû (cÚ¡ * ·th ) 151 ià( Ÿp_sourû > 0) { 152 `g_sourû_»move ( Ÿp_sourû ); 153 Ÿp_sourû = 0; 155 } } 157  DBusMes§ge * $»Ëa£_´ofže ( DBusCÚÃùiÚ * cÚn , 158 DBusMes§ge * msg , * u£r_d©a ) 160 `g_´št ("Profile„eleased\n"); 162 `»move_sourû ( IAP_PATH ); 164  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 165 } } 167  DBusMes§ge * $Ãw_cÚÃùiÚ ( DBusCÚÃùiÚ * cÚn , 168 DBusMes§ge * msg , * u£r_d©a ) 170 cÚ¡ * ·th , * deviû ; 171  fd ; 173 `g_´št ("New connection\n"); 175 ·th = `dbus_mes§ge_g‘_·th ( msg ); 177 `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & deviû , 178 DBUS_TYPE_UNIX_FD , & fd , DBUS_TYPE_INVALID ); 180 `g_´št (" from %s\n", ·th ); 181 `g_´št (" fÜ deviû % w™h fd %d\n", deviû , fd ); 183 ià( Ÿp_sourû == 0) 184 Ÿp_sourû = `ü—‹_sourû ( fd , Ÿp_hªdËr ); 186 `þo£ ( fd ); 188  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 189 } } 191  DBusMes§ge * $»que¡_discÚÃùiÚ ( DBusCÚÃùiÚ * cÚn , 192 DBusMes§ge * msg , * u£r_d©a ) 194 DBusMes§geI‹r ™” ; 195 cÚ¡ * ·th , * deviû ; 197 `g_´št ("Request disconnection\n"); 199 ·th = `dbus_mes§ge_g‘_·th ( msg ); 201 `dbus_mes§ge_™”_š™ ( msg , & ™” ); 202 `dbus_mes§ge_™”_g‘_basic (& ™” , & deviû ); 204 `g_´št (" from %s\n", ·th ); 205 `g_´št (" fÜ deviû %s\n", deviû ); 207 `»move_sourû ( ·th ); 209  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 210 } } 212  DBusMes§ge * $ÿnûl_»que¡ ( DBusCÚÃùiÚ * cÚn , 213 DBusMes§ge * msg , * u£r_d©a ) 215 cÚ¡ * ·th ; 217 `g_´št ("Request canceled\n"); 219 ·th = `dbus_mes§ge_g‘_·th ( msg ); 221 `g_´št (" from %s\n", ·th ); 223 `»move_sourû ( ·th ); 225  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 226 } } 228 cÚ¡ GDBusM‘hodTabË gm‘hods [] = { 229 { GDBUS_METHOD ("R–—£", NULL , NULL, »Ëa£_´ofže ) }, 230 { GDBUS_METHOD ("NewConnection", 231 GDBUS_ARGS ({ "device", "o" }, 233 NULL , Ãw_cÚÃùiÚ ) }, 234 { GDBUS_METHOD ("RequestDisconnection", 235 GDBUS_ARGS ({ "device", "o" }), 236 NULL , »que¡_discÚÃùiÚ ) }, 237 { GDBUS_METHOD ("Cªûl", NULL , NULL, ÿnûl_»que¡ ) }, 241  $»gi¡”_´ofže_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 243 cÚ¡ * ·th = IAP_PATH ; 244 cÚ¡ * uuid = IAP_UUID ; 245 DBusMes§geI‹r diù , ’Œy , v®ue ; 246 dbus_ušt16_t chªÃl ; 247 * »cÜd ; 248 cÚ¡ * ¡r ; 250 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 251 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & uuid ); 253 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 254 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 255 DBUS_TYPE_STRING_AS_STRING 256 DBUS_TYPE_VARIANT_AS_STRING 257 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 259 `dbus_mes§ge_™”_Ý’_cÚš” (& diù , DBUS_TYPE_DICT_ENTRY , 260 NULL , & ’Œy ); 261 ¡r = "Role"; 262 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & ¡r ); 263 `dbus_mes§ge_™”_Ý’_cÚš” (& ’Œy , DBUS_TYPE_VARIANT , 264 DBUS_TYPE_STRING_AS_STRING , & v®ue ); 265 ¡r = "server"; 266 `dbus_mes§ge_™”_­³nd_basic (& v®ue , DBUS_TYPE_STRING , & ¡r ); 267 `dbus_mes§ge_™”_þo£_cÚš” (& ’Œy , & v®ue ); 268 `dbus_mes§ge_™”_þo£_cÚš” (& diù , & ’Œy ); 270 `dbus_mes§ge_™”_Ý’_cÚš” (& diù , DBUS_TYPE_DICT_ENTRY , 271 NULL , & ’Œy ); 272 ¡r = "Channel"; 273 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & ¡r ); 274 `dbus_mes§ge_™”_Ý’_cÚš” (& ’Œy , DBUS_TYPE_VARIANT , 275 DBUS_TYPE_UINT16_AS_STRING , & v®ue ); 276 chªÃl = 23; 277 `dbus_mes§ge_™”_­³nd_basic (& v®ue , DBUS_TYPE_UINT16 , & chªÃl ); 278 `dbus_mes§ge_™”_þo£_cÚš” (& ’Œy , & v®ue ); 279 `dbus_mes§ge_™”_þo£_cÚš” (& diù , & ’Œy ); 281 `dbus_mes§ge_™”_Ý’_cÚš” (& diù , DBUS_TYPE_DICT_ENTRY , 282 NULL , & ’Œy ); 283 ¡r = "ServiceRecord"; 284 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & ¡r ); 285 `dbus_mes§ge_™”_Ý’_cÚš” (& ’Œy , DBUS_TYPE_VARIANT , 286 DBUS_TYPE_STRING_AS_STRING , & v®ue ); 287 »cÜd = `g_¡rdup_´štf ( IAP_RECORD , IAP_UUID , chªÃl ); 288 `dbus_mes§ge_™”_­³nd_basic (& v®ue , DBUS_TYPE_STRING , & »cÜd ); 289 `g_ä“ ( »cÜd ); 290 `dbus_mes§ge_™”_þo£_cÚš” (& ’Œy , & v®ue ); 291 `dbus_mes§ge_™”_þo£_cÚš” (& diù , & ’Œy ); 293 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 294 } } 296  $»gi¡”_´ofže_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 298 DBusE¼Ü ”rÜ ; 300 `dbus_”rÜ_š™ (& ”rÜ ); 302 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 303 `g_´št ("Failedo„egister…rofile\n"); 307 `g_´št ("Profile„egistered\n"); 308 } } 310  $cÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 312 GDBusCl›Á * þ›Á = u£r_d©a ; 313 GDBusProxy * ´oxy ; 315 `g_´št ("Bluetooth connected\n"); 317 ´oxy = `g_dbus_´oxy_Ãw ( þ›Á , "/org/bluez", 319 ià(! ´oxy ) 322 `g_dbus_»gi¡”_š‹rçû ( cÚÃùiÚ , IAP_PATH , 324 m‘hods , NULL , NULL, NULL, NULL); 326 `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "RegisterProfile", 327 »gi¡”_´ofže_£tup , 328 »gi¡”_´ofže_»¶y , NULL , NULL); 330 `g_dbus_´oxy_uÄef ( ´oxy ); 331 } } 333  $discÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 335 `g_´št ("Bluetooth disconnected\n"); 337 `g_dbus_uÄegi¡”_š‹rçû ( cÚÃùiÚ , IAP_PATH , 339 } } 341  gboÞ—n $sigÇl_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd™iÚ , 342 gpoš‹r u£r_d©a ) 344  __‹rmš©ed = 0; 345  sigÇlfd_sigšfo si ; 346 ssize_t »suÉ ; 347  fd ; 349 ià( cÚd™iÚ & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 350 `g_maš_loÝ_qu™ ( maš_loÝ ); 351  FALSE ; 354 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 356 »suÉ = `»ad ( fd , & si , (si)); 357 ià( »suÉ !ð( si )) 358  FALSE ; 360  si . ssi_signo ) { 361  SIGINT : 362  SIGTERM : 363 ià( __‹rmš©ed == 0) 364 `g_maš_loÝ_qu™ ( maš_loÝ ); 366 __‹rmš©ed = 1; 370  TRUE ; 371 } } 373  gušt $£tup_sigÇlfd () 375 GIOChªÃl * chªÃl ; 376 gušt sourû ; 377 sig£t_t mask ; 378  fd ; 380 `sigem±y£t (& mask ); 381 `sigadd£t (& mask , SIGINT ); 382 `sigadd£t (& mask , SIGTERM ); 384 ià( `sig´ocmask ( SIG_BLOCK , & mask , NULL ) < 0) { 385 `³¼Ü ("Failedo set signal mask"); 389 fd = `sigÇlfd (-1, & mask , 0); 390 ià( fd < 0) { 391 `³¼Ü ("Failedo create signal descriptor"); 395 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 397 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 398 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 399 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 401 sourû = `g_io_add_w©ch ( chªÃl , 402 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 403 sigÇl_hªdËr , NULL ); 405 `g_io_chªÃl_uÄef ( chªÃl ); 407  sourû ; 408 } } 410  gboÞ—n gÝtiÚ_v”siÚ = FALSE ; 412  GO±iÚEÁry gÝtiÚs [] = { 413 { "v”siÚ", 'v', 0, G_OPTION_ARG_NONE , & ÝtiÚ_v”siÚ , 415 { NULL }, 418  $maš ( ¬gc , * ¬gv []) 420 GO±iÚCÚ‹xt * cÚ‹xt ; 421 GE¼Ü * ”rÜ = NULL ; 422 DBusCÚÃùiÚ * dbus_cÚn ; 423 GDBusCl›Á * þ›Á ; 424 gušt sigÇl ; 426 cÚ‹xt = `g_ÝtiÚ_cÚ‹xt_Ãw ( NULL ); 427 `g_ÝtiÚ_cÚ‹xt_add_maš_’Œ›s ( cÚ‹xt , ÝtiÚs , NULL ); 429 ià( `g_ÝtiÚ_cÚ‹xt_·r£ ( cÚ‹xt , & ¬gc , & ¬gv , & ”rÜ è=ð FALSE ) { 430 ià( ”rÜ !ð NULL ) { 431 `g_´š‹¼ ("%s\n", ”rÜ -> mes§ge ); 432 `g_”rÜ_ä“ ( ”rÜ ); 434 `g_´š‹¼ ("An unknownƒrror occurred\n"); 435 `ex™ (1); 438 `g_ÝtiÚ_cÚ‹xt_ä“ ( cÚ‹xt ); 440 ià( ÝtiÚ_v”siÚ =ð TRUE ) { 441 `g_´št ("%s\n", VERSION ); 442 `ex™ (0); 445 maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 446 dbus_cÚn = `g_dbus_£tup_bus ( DBUS_BUS_SYSTEM , NULL , NULL); 448 sigÇl = `£tup_sigÇlfd (); 450 þ›Á = `g_dbus_þ›Á_Ãw ( dbus_cÚn , "org.bluez", "/org/bluez"); 452 `g_dbus_þ›Á_£t_cÚÃù_w©ch ( þ›Á , cÚÃù_hªdËr , client); 453 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( þ›Á , discÚÃù_hªdËr , NULL ); 455 `g_maš_loÝ_run ( maš_loÝ ); 457 `g_dbus_þ›Á_uÄef ( þ›Á ); 459 `g_sourû_»move ( sigÇl ); 461 `dbus_cÚÃùiÚ_uÄef ( dbus_cÚn ); 462 `g_maš_loÝ_uÄef ( maš_loÝ ); 465 } } @profiles/input/device.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dlib.h > 30  ~<¡dboÞ.h > 31  ~<”ºo.h > 32  ~ 33  ~ 34  ~ 36  ~ 37  ~ 38  ~ 39  ~ 41  ~ 43  ~"¤c/log.h " 45  ~"btio/btio.h " 46  ~"lib/uuid.h " 47  ~"¤c/ad­‹r.h " 48  ~"¤c/deviû.h " 49  ~"¤c/´ofže.h " 50  ~"¤c/£rviû.h " 51  ~"¤c/¡Üage.h " 52  ~"¤c/dbus-commÚ.h " 53  ~"¤c/”rÜ.h " 54  ~"¤c/sdp-þ›Á.h " 55  ~"¤c/sh¬ed/uhid.h " 57  ~"deviû.h " 58  ~"hidp_defs.h " 60  #INPUT_INTERFACE "Üg.bluez.IÅut1" ) 62 e»cÚÃù_mode_t { 63 mRECONNECT_NONE = 0, 64 mRECONNECT_DEVICE , 65 mRECONNECT_HOST , 66 mRECONNECT_ANY 69  sšput_deviû { 70  btd_£rviû * m£rviû ; 71  btd_deviû * mdeviû ; 72 * m·th ; 73 bdaddr_t m¤c ; 74 bdaddr_t md¡ ; 75 ušt32_t mhªdË ; 76 GIOChªÃl * mù¾_io ; 77 GIOChªÃl * mšŒ_io ; 78 gušt mù¾_w©ch ; 79 gušt mšŒ_w©ch ; 80 gušt m£c_w©ch ; 81  hidp_cÚÇdd_»q * m»q ; 82 boÞ mdi§bË_sdp ; 83 »cÚÃù_mode_t m»cÚÃù_mode ; 84 gušt m»cÚÃù_tim” ; 85 ušt32_t m»cÚÃù_©‹m± ; 86  bt_uhid * muhid ; 87 boÞ muhid_ü—‹d ; 88 ušt8_t m»pÜt_»q_³ndšg ; 89 gušt m»pÜt_»q_tim” ; 90 ušt32_t m»pÜt_r¥_id ; 93  gidË_timeout = 0; 94  boÞ guhid_’abËd = çl£ ; 96  $šput_£t_idË_timeout ( timeout ) 98 idË_timeout = timeout ; 99 } } 101  $šput_’abË_u£r¥aû_hid ( boÞ ¡©e ) 103 uhid_’abËd = ¡©e ; 104 } } 106  šput_deviû_’‹r_»cÚÃù_mode ( šput_deviû * idev ); 107  cÚÃùiÚ_discÚÃù ( šput_deviû * idev , ušt32_t æags ); 109  $šput_deviû_ä“ ( šput_deviû * idev ) 111 `bt_uhid_uÄef ( idev -> uhid ); 112 `btd_£rviû_uÄef ( idev -> £rviû ); 113 `btd_deviû_uÄef ( idev -> deviû ); 114 `g_ä“ ( idev -> ·th ); 116 ià( idev -> ù¾_w©ch > 0) 117 `g_sourû_»move ( idev -> ù¾_w©ch ); 119 ià( idev -> šŒ_w©ch > 0) 120 `g_sourû_»move ( idev -> šŒ_w©ch ); 122 ià( idev -> £c_w©ch > 0) 123 `g_sourû_»move ( idev -> £c_w©ch ); 125 ià( idev -> šŒ_io ) 126 `g_io_chªÃl_uÄef ( idev -> šŒ_io ); 128 ià( idev -> ù¾_io ) 129 `g_io_chªÃl_uÄef ( idev -> ù¾_io ); 131 ià( idev -> »q ) { 132 `g_ä“ ( idev -> »q -> rd_d©a ); 133 `g_ä“ ( idev -> »q ); 136 ià( idev -> »cÚÃù_tim” > 0) 137 `g_sourû_»move ( idev -> »cÚÃù_tim” ); 139 ià( idev -> »pÜt_»q_tim” > 0) 140 `g_sourû_»move ( idev -> »pÜt_»q_tim” ); 142 `g_ä“ ( idev ); 143 } } 145  boÞ $hidp_£nd_mes§ge ( GIOChªÃl * chª , ušt8_t hdr , 146 cÚ¡ ušt8_t * d©a , size_t size ) 148  fd ; 149 ssize_t Ën ; 150 ušt8_t msg [ size + 1]; 152 ià(! chª ) { 153 `”rÜ ("BT socket‚ot connected"); 154  çl£ ; 157 ià( d©a =ð NULL ) 158 size = 0; 160 msg [0] = hdr ; 161 ià( size > 0) 162 `memýy (& msg [1], d©a , size ); 163 ++ size ; 165 fd = `g_io_chªÃl_unix_g‘_fd ( chª ); 167 Ën = `wr™e ( fd , msg , size ); 168 ià( Ën < 0) { 169 `”rÜ ("BT sock‘ wr™”rÜ: % (%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 170  çl£ ; 173 ià(( size_t è Ën < size ) { 174 `”rÜ ("BT socket writeƒrror:…artial write (%zd of %zu bytes)", 175 Ën , size ); 176  çl£ ; 179  Œue ; 180 } } 182  boÞ $hidp_£nd_ù¾_mes§ge ( šput_deviû * idev , ušt8_t hdr , 183 cÚ¡ ušt8_t * d©a , size_t size ) 185  `hidp_£nd_mes§ge ( idev -> ù¾_io , hdr , d©a , size ); 186 } } 188  boÞ $hidp_£nd_šŒ_mes§ge ( šput_deviû * idev , ušt8_t hdr , 189 cÚ¡ ušt8_t * d©a , size_t size ) 191  `hidp_£nd_mes§ge ( idev -> šŒ_io , hdr , d©a , size ); 192 } } 194  boÞ $uhid_£nd_ã©u»_ªsw” ( šput_deviû * idev , 195 cÚ¡ ušt8_t * d©a , size_t size , 196 ušt32_t id , ušt16_t ”r ) 198  uhid_ev’t ev ; 199  »t ; 201 ià( d©a =ð NULL ) 202 size = 0; 204 ià( size > ( ev . u . ã©u»_ªsw” . d©a )) 205 size = ( ev . u . ã©u»_ªsw” . d©a ); 207 ià(! idev -> uhid_ü—‹d ) { 208 `DBG ("HID„•Üˆ(%zu by‹sèdrݳd", size ); 209  çl£ ; 212 `mem£t (& ev , 0, (ev)); 213 ev . ty³ = UHID_FEATURE_ANSWER ; 214 ev . u . ã©u»_ªsw” . id = id; 215 ev . u . ã©u»_ªsw” . ”r =ƒrr; 216 ev . u . ã©u»_ªsw” . size = size; 218 ià( size > 0) 219 `memýy ( ev . u . ã©u»_ªsw” . d©a , d©a, size ); 221 »t = `bt_uhid_£nd ( idev -> uhid , & ev ); 222 ià( »t < 0) { 223 `”rÜ ("bt_uhid_£nd: % (%d)", `¡»¼Ü (- »t ), -ret); 224  çl£ ; 227 `DBG ("HID„•Üˆ(%zu by‹s)", size ); 229  Œue ; 230 } } 232  boÞ $uhid_£nd_šput_»pÜt ( šput_deviû * idev , 233 cÚ¡ ušt8_t * d©a , size_t size ) 235  uhid_ev’t ev ; 236  ”r ; 238 ià( d©a =ð NULL ) 239 size = 0; 241 ià( size > ( ev . u . šput . d©a )) 242 size = ( ev . u . šput . d©a ); 244 ià(! idev -> uhid_ü—‹d ) { 245 `DBG ("HID„•Üˆ(%zu by‹sèdrݳd", size ); 246  çl£ ; 249 `mem£t (& ev , 0, (ev)); 250 ev . ty³ = UHID_INPUT ; 251 ev . u . šput . size = size; 253 ià( size > 0) 254 `memýy ( ev . u . šput . d©a , d©a, size ); 256 ”r = `bt_uhid_£nd ( idev -> uhid , & ev ); 257 ià( ”r < 0) { 258 `”rÜ ("bt_uhid_£nd: % (%d)", `¡»¼Ü (- ”r ), -err); 259  çl£ ; 262 `DBG ("HID„•Üˆ(%zu by‹s)", size ); 264  Œue ; 265 } } 267  boÞ $hidp_»cv_šŒ_d©a ( GIOChªÃl * chª ,  šput_deviû * idev ) 269  fd ; 270 ssize_t Ën ; 271 ušt8_t hdr ; 272 ušt8_t d©a [ UHID_DATA_MAX + 1]; 274 fd = `g_io_chªÃl_unix_g‘_fd ( chª ); 276 Ën = `»ad ( fd , d©a , (data)); 277 ià( Ën < 0) { 278 `”rÜ ("BT sock‘„—dƒ¼Ü: % (%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 279  çl£ ; 282 ià( Ën == 0) { 283 `DBG ("BT socket„ead„eturned 0 bytes"); 284  Œue ; 287 hdr = d©a [0]; 288 ià( hdr !ð( HIDP_TRANS_DATA | HIDP_DATA_RTYPE_INPUT )) { 289 `DBG ("unsuµÜ‹d HIDP…rÙocÞ h—d” 0x%02x", hdr ); 290  Œue ; 293 ià( Ën < 2) { 294 `DBG ("receivedƒmpty HID„eport"); 295  Œue ; 298 `uhid_£nd_šput_»pÜt ( idev , d©a + 1, Ën - 1); 300  Œue ; 301 } } 303  gboÞ—n $šŒ_w©ch_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , gpoš‹r d©a ) 305  šput_deviû * idev = d©a ; 306  add»ss [18]; 308 ià( cÚd & G_IO_IN ) { 309 ià( `hidp_»cv_šŒ_d©a ( chª , idev è&& ( cÚd =ð G_IO_IN )) 310  TRUE ; 313 `ba2¡r (& idev -> d¡ , add»ss ); 315 `DBG ("Deviû % discÚÃùed", add»ss ); 320 ià(( cÚd & ( G_IO_HUP | G_IO_ERR )è&& idev -> ù¾_w©ch ) 321 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 323 idev -> šŒ_w©ch = 0; 325 ià( idev -> šŒ_io ) { 326 `g_io_chªÃl_uÄef ( idev -> šŒ_io ); 327 idev -> šŒ_io = NULL ; 331 ià( idev -> ù¾_io && !( cÚd & G_IO_NVAL )) 332 `g_io_chªÃl_shutdown ( idev -> ù¾_io , TRUE , NULL ); 334 `btd_£rviû_discÚÃùšg_com¶‘e ( idev -> £rviû , 0); 337 `šput_deviû_’‹r_»cÚÃù_mode ( idev ); 339  FALSE ; 340 } } 342  $hidp_»cv_ù¾_hªdshake ( šput_deviû * idev , ušt8_t ·¿m ) 344 boÞ ³ndšg_»q_com¶‘e = çl£ ; 345 ušt8_t ³ndšg_»q_ty³ ; 347 `DBG (""); 349 ³ndšg_»q_ty³ = idev -> »pÜt_»q_³ndšg & HIDP_HEADER_TRANS_MASK ; 351  ·¿m ) { 352  HIDP_HSHK_SUCCESSFUL : 353 ià( ³ndšg_»q_ty³ =ð HIDP_TRANS_SET_REPORT ) { 354 `DBG ("SET_REPORT successful"); 355 ³ndšg_»q_com¶‘e = Œue ; 357 `DBG ("Spurious HIDP_HSHK_SUCCESSFUL"); 360  HIDP_HSHK_NOT_READY : 361  HIDP_HSHK_ERR_INVALID_REPORT_ID : 362  HIDP_HSHK_ERR_UNSUPPORTED_REQUEST : 363  HIDP_HSHK_ERR_INVALID_PARAMETER : 364  HIDP_HSHK_ERR_UNKNOWN : 365  HIDP_HSHK_ERR_FATAL : 366 ià( ³ndšg_»q_ty³ =ð HIDP_TRANS_GET_REPORT ) { 367 `DBG ("GET_REPORT fažed (%u)", ·¿m ); 368 `uhid_£nd_ã©u»_ªsw” ( idev , NULL , 0, 369 idev -> »pÜt_r¥_id , EIO ); 370 ³ndšg_»q_com¶‘e = Œue ; 371 } ià( ³ndšg_»q_ty³ =ð HIDP_TRANS_SET_REPORT ) { 372 `DBG ("SET_REPORT fažed (%u)", ·¿m ); 373 ³ndšg_»q_com¶‘e = Œue ; 375 `DBG ("Spurious HIDP_HSHK_ERR"); 377 ià( ·¿m =ð HIDP_HSHK_ERR_FATAL ) 378 `hidp_£nd_ù¾_mes§ge ( idev , HIDP_TRANS_HID_CONTROL | 379 HIDP_CTRL_SOFT_RESET , NULL , 0); 383 `hidp_£nd_ù¾_mes§ge ( idev , HIDP_TRANS_HANDSHAKE | 384 HIDP_HSHK_ERR_INVALID_PARAMETER , NULL , 0); 388 ià( ³ndšg_»q_com¶‘e ) { 389 idev -> »pÜt_»q_³ndšg = 0; 390 ià( idev -> »pÜt_»q_tim” > 0) { 391 `g_sourû_»move ( idev -> »pÜt_»q_tim” ); 392 idev -> »pÜt_»q_tim” = 0; 394 idev -> »pÜt_r¥_id = 0; 396 } } 398  $hidp_»cv_ù¾_hid_cÚŒÞ ( šput_deviû * idev , ušt8_t ·¿m ) 400 `DBG (""); 402 ià( ·¿m =ð HIDP_CTRL_VIRTUAL_CABLE_UNPLUG ) 403 `cÚÃùiÚ_discÚÃù ( idev , 0); 404 } } 406  $hidp_»cv_ù¾_d©a ( šput_deviû * idev , ušt8_t ·¿m , 407 cÚ¡ ušt8_t * d©a , size_t size ) 409 ušt8_t ³ndšg_»q_ty³ ; 410 ušt8_t ³ndšg_»q_·¿m ; 412 `DBG (""); 414 ³ndšg_»q_ty³ = idev -> »pÜt_»q_³ndšg & HIDP_HEADER_TRANS_MASK ; 415 ià( ³ndšg_»q_ty³ !ð HIDP_TRANS_GET_REPORT ) { 416 `DBG ("Spurious DATA on control channel"); 420 ³ndšg_»q_·¿m = idev -> »pÜt_»q_³ndšg & HIDP_HEADER_PARAM_MASK ; 421 ià( ³ndšg_»q_·¿m !ð ·¿m ) { 422 `DBG ("Received DATA RTYPE doesn't match…ending„equest RTYPE"); 426  ·¿m ) { 427  HIDP_DATA_RTYPE_FEATURE : 428  HIDP_DATA_RTYPE_INPUT : 429  HIDP_DATA_RTYPE_OUPUT : 430 `uhid_£nd_ã©u»_ªsw” ( idev , d©a + 1, size - 1, 431 idev -> »pÜt_r¥_id , 0); 434  HIDP_DATA_RTYPE_OTHER : 435 `DBG ("Received DATA_RTYPE_OTHER"); 439 `hidp_£nd_ù¾_mes§ge ( idev , HIDP_TRANS_HANDSHAKE | 440 HIDP_HSHK_ERR_INVALID_PARAMETER , NULL , 0); 444 idev -> »pÜt_»q_³ndšg = 0; 445 ià( idev -> »pÜt_»q_tim” > 0) { 446 `g_sourû_»move ( idev -> »pÜt_»q_tim” ); 447 idev -> »pÜt_»q_tim” = 0; 449 idev -> »pÜt_r¥_id = 0; 450 } } 452  boÞ $hidp_»cv_ù¾_mes§ge ( GIOChªÃl * chª ,  šput_deviû * idev ) 454  fd ; 455 ssize_t Ën ; 456 ušt8_t hdr , ty³ , ·¿m ; 457 ušt8_t d©a [ UHID_DATA_MAX + 1]; 459 fd = `g_io_chªÃl_unix_g‘_fd ( chª ); 461 Ën = `»ad ( fd , d©a , (data)); 462 ià( Ën < 0) { 463 `”rÜ ("BT sock‘„—dƒ¼Ü: % (%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 464  çl£ ; 467 ià( Ën == 0) { 468 `DBG ("BT socket„ead„eturned 0 bytes"); 469  Œue ; 472 hdr = d©a [0]; 473 ty³ = hdr & HIDP_HEADER_TRANS_MASK ; 474 ·¿m = hdr & HIDP_HEADER_PARAM_MASK ; 476  ty³ ) { 477  HIDP_TRANS_HANDSHAKE : 478 `hidp_»cv_ù¾_hªdshake ( idev , ·¿m ); 480  HIDP_TRANS_HID_CONTROL : 481 `hidp_»cv_ù¾_hid_cÚŒÞ ( idev , ·¿m ); 483  HIDP_TRANS_DATA : 484 `hidp_»cv_ù¾_d©a ( idev , ·¿m , d©a , Ën ); 487 `”rÜ ("unsupported HIDP control message"); 488 `hidp_£nd_ù¾_mes§ge ( idev , HIDP_TRANS_HANDSHAKE | 489 HIDP_HSHK_ERR_UNSUPPORTED_REQUEST , NULL , 0); 493  Œue ; 494 } } 496  gboÞ—n $ù¾_w©ch_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , gpoš‹r d©a ) 498  šput_deviû * idev = d©a ; 499  add»ss [18]; 501 ià( cÚd & G_IO_IN ) { 502 ià( `hidp_»cv_ù¾_mes§ge ( chª , idev è&& ( cÚd =ð G_IO_IN )) 503  TRUE ; 506 `ba2¡r (& idev -> d¡ , add»ss ); 508 `DBG ("Deviû % discÚÃùed", add»ss ); 513 ià(( cÚd & ( G_IO_HUP | G_IO_ERR )è&& idev -> šŒ_w©ch ) 514 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 516 idev -> ù¾_w©ch = 0; 518 ià( idev -> ù¾_io ) { 519 `g_io_chªÃl_uÄef ( idev -> ù¾_io ); 520 idev -> ù¾_io = NULL ; 524 ià( idev -> šŒ_io && !( cÚd & G_IO_NVAL )) 525 `g_io_chªÃl_shutdown ( idev -> šŒ_io , TRUE , NULL ); 527  FALSE ; 528 } } 530  #REPORT_REQ_TIMEOUT 3 ) 532  gboÞ—n $hidp_»pÜt_»q_timeout ( gpoš‹r d©a ) 534  šput_deviû * idev = d©a ; 535 ušt8_t ³ndšg_»q_ty³ ; 536 cÚ¡ * »q_ty³_¡r ; 537  add»ss [18]; 539 `ba2¡r (& idev -> d¡ , add»ss ); 540 ³ndšg_»q_ty³ = idev -> »pÜt_»q_³ndšg & HIDP_HEADER_TRANS_MASK ; 542  ³ndšg_»q_ty³ ) { 543  HIDP_TRANS_GET_REPORT : 544 »q_ty³_¡r = "GET_REPORT"; 546  HIDP_TRANS_SET_REPORT : 547 »q_ty³_¡r = "SET_REPORT"; 551 »q_ty³_¡r = "OTHER_TRANS"; 555 `DBG ("Deviû % HIDP % »que¡imed out", add»ss , »q_ty³_¡r ); 557 idev -> »pÜt_»q_³ndšg = 0; 558 idev -> »pÜt_»q_tim” = 0; 559 idev -> »pÜt_r¥_id = 0; 561  FALSE ; 562 } } 564  $hidp_£nd_£t_»pÜt ( uhid_ev’t * ev , * u£r_d©a ) 566  šput_deviû * idev = u£r_d©a ; 567 ušt8_t hdr ; 568 boÞ £Á ; 570 `DBG (""); 572  ev -> u . ouut . ¹y³ ) { 573  UHID_FEATURE_REPORT : 575 ià( idev -> »pÜt_»q_³ndšg ) { 576 `DBG ("Old GET_REPORT or SET_REPORT still…ending"); 580 hdr = HIDP_TRANS_SET_REPORT | HIDP_DATA_RTYPE_FEATURE ; 581 £Á = `hidp_£nd_ù¾_mes§ge ( idev , hdr , ev -> u . ouut . d©a , 582 ev -> u . ouut . size ); 583 ià( £Á ) { 584 idev -> »pÜt_»q_³ndšg = hdr ; 585 idev -> »pÜt_»q_tim” = 586 `g_timeout_add_£cÚds ( REPORT_REQ_TIMEOUT , 587 hidp_»pÜt_»q_timeout , idev ); 590  UHID_OUTPUT_REPORT : 592 hdr = HIDP_TRANS_DATA | HIDP_DATA_RTYPE_OUPUT ; 593 `hidp_£nd_šŒ_mes§ge ( idev , hdr , ev -> u . ouut . d©a , 594 ev -> u . ouut . size ); 597 `DBG ("UnsuµÜ‹d HID„•Üˆty³ %u", ev -> u . ouut . ¹y³ ); 600 } } 602  $hidp_£nd_g‘_»pÜt ( uhid_ev’t * ev , * u£r_d©a ) 604  šput_deviû * idev = u£r_d©a ; 605 ušt8_t hdr ; 606 boÞ £Á ; 608 `DBG (""); 610 ià( idev -> »pÜt_»q_³ndšg ) { 611 `DBG ("Old GET_REPORT or SET_REPORT still…ending"); 612 `uhid_£nd_ã©u»_ªsw” ( idev , NULL , 0, ev -> u . ã©u» . id , 613 EBUSY ); 618  ev -> u . ã©u» . ¹y³ ) { 619  UHID_FEATURE_REPORT : 620 hdr = HIDP_TRANS_GET_REPORT | HIDP_DATA_RTYPE_FEATURE ; 622  UHID_INPUT_REPORT : 623 hdr = HIDP_TRANS_GET_REPORT | HIDP_DATA_RTYPE_INPUT ; 625  UHID_OUTPUT_REPORT : 626 hdr = HIDP_TRANS_GET_REPORT | HIDP_DATA_RTYPE_OUPUT ; 629 `DBG ("UnsuµÜ‹d HID„•Üˆty³ %u", ev -> u . ã©u» . ¹y³ ); 633 £Á = `hidp_£nd_ù¾_mes§ge ( idev , hdr , & ev -> u . ã©u» . ºum , 634 ( ev -> u . ã©u» . ºum )); 635 ià( £Á ) { 636 idev -> »pÜt_»q_³ndšg = hdr ; 637 idev -> »pÜt_»q_tim” = 638 `g_timeout_add_£cÚds ( REPORT_REQ_TIMEOUT , 639 hidp_»pÜt_»q_timeout , idev ); 640 idev -> »pÜt_r¥_id = ev -> u . ã©u» . id ; 642 } } 644  $•ox_’dŸn_quœk (* d©a ,  size ) 652  ·‰”n [] = { 0x05, 0x07, 0x19, 0x00, 0x2a, 0x00, 0xff, 654  i ; 656 ià(! d©a ) 659  i = 0; i < size - ( ·‰”n ); i++) { 660 ià(! `memcmp ( d©a + i , ·‰”n , (pattern))) { 661 d©a [ i + 5] = 0xff; 662 d©a [ i + 6] = 0x00; 663 d©a [ i + 10] = 0xff; 664 d©a [ i + 11] = 0x00; 667 } } 669  $ü—‹_hid_dev_Çme ( sdp_»cÜd_t * »c ,  hidp_cÚÇdd_»q * »q ) 671  sdesc [( »q -> Çme )]; 673 ià( `sdp_g‘_£rviû_desc ( »c , sdesc , (sdesc)) == 0) { 674  ²ame [( »q -> Çme )]; 676 ià( `sdp_g‘_´ovid”_Çme ( »c , ²ame , (pname)) == 0 && 677 `¡ºcmp ( sdesc , ²ame , 5) != 0) 678 `¢´štf ( »q -> Çme , Ôeq->Çme), "% %s", ²ame , 679 sdesc ); 681 `¢´štf ( »q -> Çme , Ôeq->Çme), "%s", sdesc ); 683  `sdp_g‘_£rviû_Çme ( »c , »q -> Çme , (req->name)); 687 } } 691  $exŒaù_hid_desc_d©a ( sdp_»cÜd_t * »c , 692  hidp_cÚÇdd_»q * »q ) 694 sdp_d©a_t * d ; 696 d = `sdp_d©a_g‘ ( »c , SDP_ATTR_HID_DESCRIPTOR_LIST ); 697 ià(! d ) 698  šv®id_desc ; 700 ià(! `SDP_IS_SEQ ( d -> dtd )) 701  šv®id_desc ; 704 d = d-> v® . d©a£q ; 705 ià(! `SDP_IS_SEQ ( d -> dtd )) 706  šv®id_desc ; 709 d = d-> v® . d©a£q ; 710 ià( d -> dtd !ð SDP_UINT8 ) 711  šv®id_desc ; 714 d = d-> Ãxt ; 715 ià(! d || ! `SDP_IS_TEXT_STR (d-> dtd )) 716  šv®id_desc ; 718 »q -> rd_d©a = `g_Œy_m®loc0 ( d -> un™Size ); 719 ià( »q -> rd_d©a ) { 720 `memýy ( »q -> rd_d©a , d -> v® . ¡r , d-> un™Size ); 721 »q -> rd_size = d -> un™Size ; 722 `•ox_’dŸn_quœk ( »q -> rd_d©a ,„eq-> rd_size ); 727 šv®id_desc : 728 `”rÜ ("Missing or invalid HIDDescriptorList SDP‡ttribute"); 729  - EINVAL ; 730 } } 732  $exŒaù_hid_»cÜd ( sdp_»cÜd_t * »c ,  hidp_cÚÇdd_»q * »q ) 734 sdp_d©a_t * pdli¡ ; 735 ušt8_t ©Œ_v® ; 736  ”r ; 738 ”r = `ü—‹_hid_dev_Çme ( »c , »q ); 739 ià( ”r < 0) 740 `DBG ("No valid Service Name or Service Description found"); 742 pdli¡ = `sdp_d©a_g‘ ( »c , SDP_ATTR_HID_PARSER_VERSION ); 743 »q -> ·r£r = pdli¡ ?…dli¡-> v® . ušt16 : 0x0100; 745 pdli¡ = `sdp_d©a_g‘ ( »c , SDP_ATTR_HID_DEVICE_SUBCLASS ); 746 »q -> subþass = pdli¡ ?…dli¡-> v® . ušt8 : 0; 748 pdli¡ = `sdp_d©a_g‘ ( »c , SDP_ATTR_HID_COUNTRY_CODE ); 749 »q -> couÁry = pdli¡ ?…dli¡-> v® . ušt8 : 0; 751 pdli¡ = `sdp_d©a_g‘ ( »c , SDP_ATTR_HID_VIRTUAL_CABLE ); 752 ©Œ_v® = pdli¡ ?…dli¡-> v® . ušt8 : 0; 753 ià( ©Œ_v® ) 754 »q -> æags |ð(1 << HIDP_VIRTUAL_CABLE_UNPLUG ); 756 pdli¡ = `sdp_d©a_g‘ ( »c , SDP_ATTR_HID_BOOT_DEVICE ); 757 ©Œ_v® = pdli¡ ?…dli¡-> v® . ušt8 : 0; 758 ià( ©Œ_v® ) 759 »q -> æags |ð(1 << HIDP_BOOT_PROTOCOL_MODE ); 761 ”r = `exŒaù_hid_desc_d©a ( »c , »q ); 762 ià( ”r < 0) 763  ”r ; 766 } } 768  $ioùl_cÚÇdd ( hidp_cÚÇdd_»q * »q ) 770  ùl , ”r = 0; 772 ùl = `sock‘ ( AF_BLUETOOTH , SOCK_RAW , BTPROTO_HIDP ); 773 ià( ùl < 0) 774  - ”ºo ; 776 ià( `ioùl ( ùl , HIDPCONNADD , »q ) < 0) 777 ”r = - ”ºo ; 779 `þo£ ( ùl ); 781  ”r ; 782 } } 784  boÞ $ioùl_is_cÚÃùed ( šput_deviû * idev ) 786  hidp_cÚnšfo ci ; 787  ùl ; 790 ùl = `sock‘ ( AF_BLUETOOTH , SOCK_RAW , BTPROTO_HIDP ); 791 ià( ùl < 0) { 792 `”rÜ ("Can't open HIDP control socket"); 793  çl£ ; 796 `mem£t (& ci , 0, (ci)); 797 `baýy (& ci . bdaddr , & idev -> d¡ ); 798 ià( `ioùl ( ùl , HIDPGETCONNINFO , & ci ) < 0) { 799 `”rÜ ("Can't get HIDP connection info"); 800 `þo£ ( ùl ); 801  çl£ ; 804 `þo£ ( ùl ); 806 ià( ci . ¡©e !ð BT_CONNECTED ) 807  çl£ ; 809  Œue ; 810 } } 812  $ioùl_discÚÃù ( šput_deviû * idev , ušt32_t æags ) 814  hidp_cÚnd–_»q »q ; 815  hidp_cÚnšfo ci ; 816  ùl , ”r = 0; 818 ùl = `sock‘ ( AF_BLUETOOTH , SOCK_RAW , BTPROTO_HIDP ); 819 ià( ùl < 0) { 820 `”rÜ ("Can't open HIDP control socket"); 821  - ”ºo ; 824 `mem£t (& ci , 0, (ci)); 825 `baýy (& ci . bdaddr , & idev -> d¡ ); 826 ià(( `ioùl ( ùl , HIDPGETCONNINFO , & ci ) < 0) || 827 ( ci . ¡©e !ð BT_CONNECTED )) { 828 `þo£ ( ùl ); 829  - ENOTCONN ; 832 `mem£t (& »q , 0, (req)); 833 `baýy (& »q . bdaddr , & idev -> d¡ ); 834 »q . æags = flags; 835 ià( `ioùl ( ùl , HIDPCONNDEL , & »q ) < 0) { 836 ”r = - ”ºo ; 837 `”rÜ ("Can't deletehe HID device: %s (%d)", 838 `¡»¼Ü (- ”r ), -err); 841 `þo£ ( ùl ); 843  ”r ; 844 } } 846  $uhid_cÚÇdd ( šput_deviû * idev ,  hidp_cÚÇdd_»q * »q ) 848  ”r ; 849  uhid_ev’t ev ; 851 ià( idev -> uhid_ü—‹d ) 855 `mem£t (& ev , 0, (ev)); 856 ev . ty³ = UHID_CREATE ; 857 `¡ºýy ((*è ev . u . ü—‹ . Çme , »q ->name, 858 ( ev . u . ü—‹ . Çme ) - 1); 859 `ba2¡r (& idev -> ¤c , (*è ev . u . ü—‹ . phys ); 860 `ba2¡r (& idev -> d¡ , (*è ev . u . ü—‹ . uniq ); 861 ev . u . ü—‹ . v’dÜ = »q ->vendor; 862 ev . u . ü—‹ . ´oduù = »q ->product; 863 ev . u . ü—‹ . v”siÚ = »q ->version; 864 ev . u . ü—‹ . couÁry = »q ->country; 865 ev . u . ü—‹ . bus = BUS_BLUETOOTH ; 866 ev . u . ü—‹ . rd_d©a = »q ->rd_data; 867 ev . u . ü—‹ . rd_size = »q ->rd_size; 869 ”r = `bt_uhid_£nd ( idev -> uhid , & ev ); 870 ià( ”r < 0) { 871 `”rÜ ("bt_uhid_£nd: %s", `¡»¼Ü (- ”r )); 872  ”r ; 875 `bt_uhid_»gi¡” ( idev -> uhid , UHID_OUTPUT , hidp_£nd_£t_»pÜt , idev); 876 `bt_uhid_»gi¡” ( idev -> uhid , UHID_FEATURE , hidp_£nd_g‘_»pÜt , idev); 878 idev -> uhid_ü—‹d = Œue ; 880  ”r ; 881 } } 883  gboÞ—n $’üy±_nÙify ( GIOChªÃl * io , GIOCÚd™iÚ cÚd™iÚ , 884 gpoš‹r d©a ) 886  šput_deviû * idev = d©a ; 887  ”r ; 889 `DBG (""); 891 ià( idev -> uhid ) 892 ”r = `uhid_cÚÇdd ( idev , idev-> »q ); 894 ”r = `ioùl_cÚÇdd ( idev -> »q ); 896 ià( ”r < 0) { 897 `”rÜ ("ioùl_cÚÇdd(): % (%d)", `¡»¼Ü (- ”r ), -err); 899 ià( idev -> ù¾_io ) { 900 `g_io_chªÃl_shutdown ( idev -> ù¾_io , FALSE , NULL ); 901 `g_io_chªÃl_uÄef ( idev -> ù¾_io ); 902 idev -> ù¾_io = NULL ; 905 ià( idev -> šŒ_io ) { 906 `g_io_chªÃl_shutdown ( idev -> šŒ_io , FALSE , NULL ); 907 `g_io_chªÃl_uÄef ( idev -> šŒ_io ); 908 idev -> šŒ_io = NULL ; 912 idev -> £c_w©ch = 0; 914 `g_ä“ ( idev -> »q -> rd_d©a ); 915 `g_ä“ ( idev -> »q ); 916 idev -> »q = NULL ; 918  FALSE ; 919 } } 921  $hidp_add_cÚÃùiÚ ( šput_deviû * idev ) 923  hidp_cÚÇdd_»q * »q ; 924 sdp_»cÜd_t * »c ; 925  ¤c_addr [18], d¡_addr [18]; 926  fž’ame [ PATH_MAX ]; 927 GKeyFže * key_fže ; 928  hªdË [11], * ¡r ; 929 GE¼Ü * g”r = NULL ; 930  ”r ; 932 »q = `g_Ãw0 ( hidp_cÚÇdd_»q , 1); 933 »q -> ù¾_sock = `g_io_chªÃl_unix_g‘_fd ( idev -> ù¾_io ); 934 »q -> šŒ_sock = `g_io_chªÃl_unix_g‘_fd ( idev -> šŒ_io ); 935 »q -> æags = 0; 936 »q -> idË_to = idË_timeout ; 938 `ba2¡r (& idev -> ¤c , ¤c_addr ); 939 `ba2¡r (& idev -> d¡ , d¡_addr ); 941 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/ÿche/%s", ¤c_addr , 942 d¡_addr ); 943 `¥rštf ( hªdË , "0x%8.8X", idev ->handle); 945 key_fže = `g_key_fže_Ãw (); 946 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 947 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , "S”viûRecÜds", hªdË , NULL ); 948 `g_key_fže_ä“ ( key_fže ); 950 ià(! ¡r ) { 951 `”rÜ ("Rejeùed cÚÃùiÚ from unknowÀdeviû %s", d¡_addr ); 952 ”r = - EPERM ; 953  þ—nup ; 956 »c = `»cÜd_äom_¡ršg ( ¡r ); 957 `g_ä“ ( ¡r ); 959 ”r = `exŒaù_hid_»cÜd ( »c , »q ); 960 `sdp_»cÜd_ä“ ( »c ); 961 ià( ”r < 0) { 962 `”rÜ ("Could‚Ù…¬£ HID SDP„ecÜd: % (%d)", `¡»¼Ü (- ”r ), 963 - ”r ); 964  þ—nup ; 967 »q -> v’dÜ = `btd_deviû_g‘_v’dÜ ( idev -> deviû ); 968 »q -> ´oduù = `btd_deviû_g‘_´oduù ( idev -> deviû ); 969 »q -> v”siÚ = `btd_deviû_g‘_v”siÚ ( idev -> deviû ); 971 ià( `deviû_Çme_known ( idev -> deviû )) 972 `deviû_g‘_Çme ( idev -> deviû , »q -> Çme , (req->name)); 975 ià( »q -> subþass & 0x40) { 976 ià(! `bt_io_£t ( idev -> šŒ_io , & g”r , 977 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 978 BT_IO_OPT_INVALID )) { 979 `”rÜ ("btio: %s", g”r -> mes§ge ); 980 `g_”rÜ_ä“ ( g”r ); 981 ”r = - EFAULT ; 982  þ—nup ; 985 idev -> »q =„eq; 986 idev -> £c_w©ch = `g_io_add_w©ch (idev-> šŒ_io , G_IO_OUT , 987 ’üy±_nÙify , idev ); 992 ià( idev -> uhid ) 993 ”r = `uhid_cÚÇdd ( idev , »q ); 995 ”r = `ioùl_cÚÇdd ( »q ); 997 þ—nup : 998 `g_ä“ ( »q -> rd_d©a ); 999 `g_ä“ ( »q ); 1001  ”r ; 1002 } } 1004  boÞ $is_cÚÃùed ( šput_deviû * idev ) 1006 ià( idev -> uhid ) 1007  ( idev -> šŒ_io !ð NULL && idev-> ù¾_io != NULL); 1009  `ioùl_is_cÚÃùed ( idev ); 1010 } } 1012  $cÚÃùiÚ_discÚÃù ( šput_deviû * idev , ušt32_t æags ) 1014 ià(! `is_cÚÃùed ( idev )) 1015  - ENOTCONN ; 1018 ià( idev -> šŒ_io ) 1019 `g_io_chªÃl_shutdown ( idev -> šŒ_io , TRUE , NULL ); 1020 ià( idev -> ù¾_io ) 1021 `g_io_chªÃl_shutdown ( idev -> ù¾_io , TRUE , NULL ); 1023 ià( idev -> uhid ) 1026  `ioùl_discÚÃù ( idev , æags ); 1027 } } 1029  $šput_deviû_cÚÃùed ( šput_deviû * idev ) 1031  ”r ; 1033 ià( idev -> šŒ_io =ð NULL || idev-> ù¾_io == NULL) 1034  - ENOTCONN ; 1036 ”r = `hidp_add_cÚÃùiÚ ( idev ); 1037 ià( ”r < 0) 1038  ”r ; 1040 `btd_£rviû_cÚÃùšg_com¶‘e ( idev -> £rviû , 0); 1043 } } 1045  $š‹¼u±_cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * cÚn_”r , 1046 gpoš‹r u£r_d©a ) 1048  šput_deviû * idev = u£r_d©a ; 1049 GIOCÚd™iÚ cÚd = G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1050  ”r ; 1052 ià( cÚn_”r ) { 1053 ”r = - EIO ; 1054  çžed ; 1057 ”r = `šput_deviû_cÚÃùed ( idev ); 1058 ià( ”r < 0) 1059  çžed ; 1061 ià( idev -> uhid ) 1062 cÚd |ð G_IO_IN ; 1064 idev -> šŒ_w©ch = `g_io_add_w©ch (idev-> šŒ_io , cÚd , šŒ_w©ch_cb , 1065 idev ); 1069 çžed : 1070 `btd_£rviû_cÚÃùšg_com¶‘e ( idev -> £rviû , ”r ); 1075 ià(! cÚn_”r ) 1076 `g_io_chªÃl_shutdown ( idev -> šŒ_io , FALSE , NULL ); 1078 `g_io_chªÃl_uÄef ( idev -> šŒ_io ); 1079 idev -> šŒ_io = NULL ; 1081 ià( idev -> ù¾_io ) { 1082 `g_io_chªÃl_uÄef ( idev -> ù¾_io ); 1083 idev -> ù¾_io = NULL ; 1085 } } 1087  $cÚŒÞ_cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * cÚn_”r , 1088 gpoš‹r u£r_d©a ) 1090  šput_deviû * idev = u£r_d©a ; 1091 GIOCÚd™iÚ cÚd = G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1092 GIOChªÃl * io ; 1093 GE¼Ü * ”r = NULL ; 1095 ià( cÚn_”r ) { 1096 `”rÜ ("%s", cÚn_”r -> mes§ge ); 1097  çžed ; 1101 io = `bt_io_cÚÃù ( š‹¼u±_cÚÃù_cb , idev , 1102 NULL , & ”r , 1103 BT_IO_OPT_SOURCE_BDADDR , & idev -> ¤c , 1104 BT_IO_OPT_DEST_BDADDR , & idev -> d¡ , 1105 BT_IO_OPT_PSM , L2CAP_PSM_HIDP_INTR , 1106 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 1107 BT_IO_OPT_INVALID ); 1108 ià(! io ) { 1109 `”rÜ ("%s", ”r -> mes§ge ); 1110 `g_”rÜ_ä“ ( ”r ); 1111  çžed ; 1114 idev -> šŒ_io = io ; 1116 ià( idev -> uhid ) 1117 cÚd |ð G_IO_IN ; 1119 idev -> ù¾_w©ch = `g_io_add_w©ch (idev-> ù¾_io , cÚd , ù¾_w©ch_cb , 1120 idev ); 1124 çžed : 1125 `btd_£rviû_cÚÃùšg_com¶‘e ( idev -> £rviû , - EIO ); 1126 `g_io_chªÃl_uÄef ( idev -> ù¾_io ); 1127 idev -> ù¾_io = NULL ; 1128 } } 1130  $dev_cÚÃù ( šput_deviû * idev ) 1132 GE¼Ü * ”r = NULL ; 1133 GIOChªÃl * io ; 1135 ià( idev -> di§bË_sdp ) 1136 `bt_þ—r_ÿched_£ssiÚ (& idev -> ¤c , &idev-> d¡ ); 1138 io = `bt_io_cÚÃù ( cÚŒÞ_cÚÃù_cb , idev , 1139 NULL , & ”r , 1140 BT_IO_OPT_SOURCE_BDADDR , & idev -> ¤c , 1141 BT_IO_OPT_DEST_BDADDR , & idev -> d¡ , 1142 BT_IO_OPT_PSM , L2CAP_PSM_HIDP_CTRL , 1143 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 1144 BT_IO_OPT_INVALID ); 1145 idev -> ù¾_io = io ; 1147 ià( ”r =ð NULL ) 1150 `”rÜ ("%s", ”r -> mes§ge ); 1151 `g_”rÜ_ä“ ( ”r ); 1153  - EIO ; 1154 } } 1156  gboÞ—n $šput_deviû_auto_»cÚÃù ( gpoš‹r u£r_d©a ) 1158  šput_deviû * idev = u£r_d©a ; 1160 `DBG ("·th=%s,‡‰em±=%d", idev -> ·th , idev-> »cÚÃù_©‹m± ); 1165 ià( `deviû_is_‹mpܬy ( idev -> deviû ) || 1166 `btd_deviû_is_cÚÃùed ( idev -> deviû )) 1167  FALSE ; 1170 ià( idev -> »cÚÃù_©‹m± >= 6) 1171  FALSE ; 1174 ià( idev -> ù¾_io ) 1175  FALSE ; 1177 ià( `is_cÚÃùed ( idev )) 1178  FALSE ; 1180 idev -> »cÚÃù_©‹m± ++; 1181 `dev_cÚÃù ( idev ); 1183  TRUE ; 1184 } } 1186 cÚ¡ * cÚ¡ g_»cÚÃù_mode_¡r [] = { 1193 cÚ¡ * $»cÚÃù_mode_to_¡ršg (cÚ¡ »cÚÃù_mode_t mode ) 1195  _»cÚÃù_mode_¡r [ mode ]; 1196 } } 1198  $šput_deviû_’‹r_»cÚÃù_mode ( šput_deviû * idev ) 1200 `DBG ("·th=% »cÚÃù_mode=%s", idev -> ·th , 1201 `»cÚÃù_mode_to_¡ršg ( idev -> »cÚÃù_mode )); 1206 ià( idev -> »cÚÃù_mode !ð RECONNECT_ANY && 1207 idev -> »cÚÃù_mode !ð RECONNECT_HOST ) 1213 ià( `deviû_is_‹mpܬy ( idev -> deviû ) || 1214 `btd_deviû_is_cÚÃùed ( idev -> deviû )) 1217 ià( idev -> »cÚÃù_tim” > 0) 1218 `g_sourû_»move ( idev -> »cÚÃù_tim” ); 1220 `DBG ("registering‡uto-reconnect"); 1221 idev -> »cÚÃù_©‹m± = 0; 1222 idev -> »cÚÃù_tim” = `g_timeout_add_£cÚds (30, 1223 šput_deviû_auto_»cÚÃù , idev ); 1225 } } 1227  $šput_deviû_cÚÃù ( btd_£rviû * £rviû ) 1229  šput_deviû * idev ; 1231 `DBG (""); 1233 idev = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 1235 ià( idev -> ù¾_io ) 1236  - EBUSY ; 1238 ià( `is_cÚÃùed ( idev )) 1239  - EALREADY ; 1241  `dev_cÚÃù ( idev ); 1242 } } 1244  $šput_deviû_discÚÃù ( btd_£rviû * £rviû ) 1246  šput_deviû * idev ; 1247  ”r , æags ; 1249 `DBG (""); 1251 idev = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 1253 æags = `deviû_is_‹mpܬy ( idev -> deviû ) ? 1254 (1 << HIDP_VIRTUAL_CABLE_UNPLUG ) : 0; 1256 ”r = `cÚÃùiÚ_discÚÃù ( idev , æags ); 1257 ià( ”r < 0) 1258  ”r ; 1261 } } 1263  boÞ $is_deviû_sdp_di§bË (cÚ¡ sdp_»cÜd_t * »c ) 1265 sdp_d©a_t * d©a ; 1267 d©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_HID_SDP_DISABLE ); 1269  d©a && d©a-> v® . ušt8 ; 1270 } } 1272  »cÚÃù_mode_t $hid_»cÚÃùiÚ_mode ( boÞ »cÚÃù_š™Ÿ‹ , 1273 boÞ nÜm®ly_cÚÃùabË ) 1275 ià(! »cÚÃù_š™Ÿ‹ && ! nÜm®ly_cÚÃùabË ) 1276  RECONNECT_NONE ; 1277 ià(! »cÚÃù_š™Ÿ‹ && nÜm®ly_cÚÃùabË ) 1278  RECONNECT_HOST ; 1279 ià( »cÚÃù_š™Ÿ‹ && ! nÜm®ly_cÚÃùabË ) 1280  RECONNECT_DEVICE ; 1282  RECONNECT_ANY ; 1283 } } 1285  $exŒaù_hid_´Ýs ( šput_deviû * idev , 1286 cÚ¡ sdp_»cÜd_t * »c ) 1289 boÞ »cÚÃù_š™Ÿ‹ , nÜm®ly_cÚÃùabË ; 1290 sdp_d©a_t * pdli¡ ; 1294 pdli¡ = `sdp_d©a_g‘ ( »c , SDP_ATTR_HID_RECONNECT_INITIATE ); 1295 »cÚÃù_š™Ÿ‹ = pdli¡ ?…dli¡-> v® . ušt8 : TRUE ; 1297 pdli¡ = `sdp_d©a_g‘ ( »c , SDP_ATTR_HID_NORMALLY_CONNECTABLE ); 1298 nÜm®ly_cÚÃùabË = pdli¡ ?…dli¡-> v® . ušt8 : FALSE ; 1301 idev -> »cÚÃù_mode = 1302 `hid_»cÚÃùiÚ_mode ( »cÚÃù_š™Ÿ‹ , nÜm®ly_cÚÃùabË ); 1303 } } 1305  šput_deviû * $šput_deviû_Ãw ( btd_£rviû * £rviû ) 1307  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 1308  btd_´ofže * p = `btd_£rviû_g‘_´ofže ( £rviû ); 1309 cÚ¡ * ·th = `deviû_g‘_·th ( deviû ); 1310 cÚ¡ sdp_»cÜd_t * »c = `btd_deviû_g‘_»cÜd ( deviû , p -> »mÙe_uuid ); 1311  btd_ad­‹r * ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 1312  šput_deviû * idev ; 1314 ià(! »c ) 1315  NULL ; 1317 idev = `g_Ãw0 ( šput_deviû , 1); 1318 `baýy (& idev -> ¤c , `btd_ad­‹r_g‘_add»ss ( ad­‹r )); 1319 `baýy (& idev -> d¡ , `deviû_g‘_add»ss ( deviû )); 1320 idev -> £rviû = `btd_£rviû_»f (service); 1321 idev -> deviû = `btd_deviû_»f (device); 1322 idev -> ·th = `g_¡rdup (path); 1323 idev -> hªdË = »c ->handle; 1324 idev -> di§bË_sdp = `is_deviû_sdp_di§bË ( »c ); 1327 `exŒaù_hid_´Ýs ( idev , »c ); 1329  idev ; 1330 } } 1332  gboÞ—n $´Ý”ty_g‘_»cÚÃù_mode ( 1333 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1334 DBusMes§geI‹r * ™” , * d©a ) 1336  šput_deviû * idev = d©a ; 1337 cÚ¡ * ¡r_mode = `»cÚÃù_mode_to_¡ršg ( idev -> »cÚÃù_mode ); 1339 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¡r_mode ); 1341  TRUE ; 1342 } } 1344 cÚ¡ GDBusPrÝ”tyTabË gšput_´Ý”t›s [] = { 1345 { "RecÚÃùMode", "s", ´Ý”ty_g‘_»cÚÃù_mode }, 1349  $šput_deviû_»gi¡” ( btd_£rviû * £rviû ) 1351  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 1352 cÚ¡ * ·th = `deviû_g‘_·th ( deviû ); 1353  šput_deviû * idev ; 1355 `DBG ("%s", ·th ); 1357 idev = `šput_deviû_Ãw ( £rviû ); 1358 ià(! idev ) 1359  - EINVAL ; 1361 ià( uhid_’abËd ) { 1362 idev -> uhid = `bt_uhid_Ãw_deçuÉ (); 1363 ià(! idev -> uhid ) { 1364 `”rÜ ("bt_uhid_new_default: failed"); 1365 `šput_deviû_ä“ ( idev ); 1366  - EIO ; 1370 ià( `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1371 idev -> ·th , INPUT_INTERFACE , 1372 NULL , NULL, 1373 šput_´Ý”t›s , idev , 1374 NULL è=ð FALSE ) { 1375 `”rÜ ("UÇbËØ»gi¡” % š‹rçû", INPUT_INTERFACE ); 1376 `šput_deviû_ä“ ( idev ); 1377  - EINVAL ; 1380 `btd_£rviû_£t_u£r_d©a ( £rviû , idev ); 1383 } } 1385  šput_deviû * $fšd_deviû (cÚ¡ bdaddr_t * ¤c , 1386 cÚ¡ bdaddr_t * d¡ ) 1388  btd_deviû * deviû ; 1389  btd_£rviû * £rviû ; 1391 deviû = `btd_ad­‹r_fšd_deviû ( `ad­‹r_fšd ( ¤c ), d¡ , BDADDR_BREDR ); 1392 ià( deviû =ð NULL ) 1393  NULL ; 1395 £rviû = `btd_deviû_g‘_£rviû ( deviû , HID_UUID ); 1396 ià( £rviû =ð NULL ) 1397  NULL ; 1399  `btd_£rviû_g‘_u£r_d©a ( £rviû ); 1400 } } 1402  $šput_deviû_uÄegi¡” ( btd_£rviû * £rviû ) 1404  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 1405 cÚ¡ * ·th = `deviû_g‘_·th ( deviû ); 1406  šput_deviû * idev = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 1408 `DBG ("%s", ·th ); 1410 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1411 idev -> ·th , INPUT_INTERFACE ); 1413 `šput_deviû_ä“ ( idev ); 1414 } } 1416  $šput_deviû_cÚÇdd ( šput_deviû * idev ) 1418  ”r ; 1420 ”r = `šput_deviû_cÚÃùed ( idev ); 1421 ià( ”r == 0) 1424 ià( idev -> ù¾_io ) { 1425 `g_io_chªÃl_shutdown ( idev -> ù¾_io , FALSE , NULL ); 1426 `g_io_chªÃl_uÄef ( idev -> ù¾_io ); 1427 idev -> ù¾_io = NULL ; 1430 ià( idev -> šŒ_io ) { 1431 `g_io_chªÃl_shutdown ( idev -> šŒ_io , FALSE , NULL ); 1432 `g_io_chªÃl_uÄef ( idev -> šŒ_io ); 1433 idev -> šŒ_io = NULL ; 1436  ”r ; 1437 } } 1439 boÞ $šput_deviû_exi¡s (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ ) 1441 ià( `fšd_deviû ( ¤c , d¡ )) 1442  Œue ; 1444  çl£ ; 1445 } } 1447  $šput_deviû_£t_chªÃl (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ ,  psm , 1448 GIOChªÃl * io ) 1450  šput_deviû * idev = `fšd_deviû ( ¤c , d¡ ); 1451 GIOCÚd™iÚ cÚd = G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1453 `DBG ("idev %°psm %d", idev , psm ); 1455 ià(! idev ) 1456  - ENOENT ; 1458 ià( uhid_’abËd ) 1459 cÚd |ð G_IO_IN ; 1461  psm ) { 1462  L2CAP_PSM_HIDP_CTRL : 1463 ià( idev -> ù¾_io ) 1464  - EALREADY ; 1465 idev -> ù¾_io = `g_io_chªÃl_»f ( io ); 1466 idev -> ù¾_w©ch = `g_io_add_w©ch (idev-> ù¾_io , cÚd , 1467 ù¾_w©ch_cb , idev ); 1469  L2CAP_PSM_HIDP_INTR : 1470 ià( idev -> šŒ_io ) 1471  - EALREADY ; 1472 idev -> šŒ_io = `g_io_chªÃl_»f ( io ); 1473 idev -> šŒ_w©ch = `g_io_add_w©ch (idev-> šŒ_io , cÚd , 1474 šŒ_w©ch_cb , idev ); 1478 ià( idev -> šŒ_io && idev-> ù¾_io ) 1479 `šput_deviû_cÚÇdd ( idev ); 1482 } } 1484  $šput_deviû_þo£_chªÃls (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ ) 1486  šput_deviû * idev = `fšd_deviû ( ¤c , d¡ ); 1488 ià(! idev ) 1489  - ENOENT ; 1491 ià( idev -> šŒ_io ) 1492 `g_io_chªÃl_shutdown ( idev -> šŒ_io , TRUE , NULL ); 1494 ià( idev -> ù¾_io ) 1495 `g_io_chªÃl_shutdown ( idev -> ù¾_io , TRUE , NULL ); 1498 } } @profiles/input/device.h 24  #L2CAP_PSM_HIDP_CTRL 0x11 ) 25  #L2CAP_PSM_HIDP_INTR 0x13 ) 27  gšput_deviû ; 28  gšput_cÚn ; 30  šput_£t_idË_timeout ( timeout ); 31  šput_’abË_u£r¥aû_hid ( boÞ ¡©e ); 33  šput_deviû_»gi¡” ( btd_£rviû * £rviû ); 34  šput_deviû_uÄegi¡” ( btd_£rviû * £rviû ); 36 boÞ šput_deviû_exi¡s (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ ); 37  šput_deviû_£t_chªÃl (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ ,  psm , 38 GIOChªÃl * io ); 39  šput_deviû_þo£_chªÃls (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ ); 41  šput_deviû_cÚÃù ( btd_£rviû * £rviû ); 42  šput_deviû_discÚÃù ( btd_£rviû * £rviû ); @profiles/input/hidp_defs.h 25 #iâdeà __HIDP_DEFS_H 26  #__HIDP_DEFS_H ) 29  #HIDP_HEADER_TRANS_MASK 0xf0 ) 30  #HIDP_HEADER_PARAM_MASK 0x0f ) 33  #HIDP_TRANS_HANDSHAKE 0x00 ) 34  #HIDP_TRANS_HID_CONTROL 0x10 ) 35  #HIDP_TRANS_GET_REPORT 0x40 ) 36  #HIDP_TRANS_SET_REPORT 0x50 ) 37  #HIDP_TRANS_GET_PROTOCOL 0x60 ) 38  #HIDP_TRANS_SET_PROTOCOL 0x70 ) 39  #HIDP_TRANS_GET_IDLE 0x80 ) 40  #HIDP_TRANS_SET_IDLE 0x90 ) 41  #HIDP_TRANS_DATA 0xa0 ) 42  #HIDP_TRANS_DATC 0xb0 ) 45  #HIDP_HSHK_SUCCESSFUL 0x00 ) 46  #HIDP_HSHK_NOT_READY 0x01 ) 47  #HIDP_HSHK_ERR_INVALID_REPORT_ID 0x02 ) 48  #HIDP_HSHK_ERR_UNSUPPORTED_REQUEST 0x03 ) 49  #HIDP_HSHK_ERR_INVALID_PARAMETER 0x04 ) 50  #HIDP_HSHK_ERR_UNKNOWN 0x0e ) 51  #HIDP_HSHK_ERR_FATAL 0x0f ) 54  #HIDP_CTRL_NOP 0x00 ) 55  #HIDP_CTRL_HARD_RESET 0x01 ) 56  #HIDP_CTRL_SOFT_RESET 0x02 ) 57  #HIDP_CTRL_SUSPEND 0x03 ) 58  #HIDP_CTRL_EXIT_SUSPEND 0x04 ) 59  #HIDP_CTRL_VIRTUAL_CABLE_UNPLUG 0x05 ) 62  #HIDP_DATA_RTYPE_MASK 0x03 ) 63  #HIDP_DATA_RSRVD_MASK 0x0c ) 64  #HIDP_DATA_RTYPE_OTHER 0x00 ) 65  #HIDP_DATA_RTYPE_INPUT 0x01 ) 66  #HIDP_DATA_RTYPE_OUPUT 0x02 ) 67  #HIDP_DATA_RTYPE_FEATURE 0x03 ) 70  #HIDP_PROTO_BOOT 0x00 ) 71  #HIDP_PROTO_REPORT 0x01 ) 73  #HIDP_VIRTUAL_CABLE_UNPLUG 0 ) 74  #HIDP_BOOT_PROTOCOL_MODE 1 ) 75  #HIDP_BLUETOOTH_VENDOR_ID 9 ) 76  #HIDP_WAITING_FOR_RETURN 10 ) 77  #HIDP_WAITING_FOR_SEND_ACK 11 ) @profiles/input/hog.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡dlib.h > 31  ~<¡dboÞ.h > 32  ~<”ºo.h > 33  ~ 34  ~ 35  ~ 36  ~ 38  ~ 40  ~ 42  ~"¤c/log.h " 44  ~"lib/uuid.h " 45  ~"¤c/ad­‹r.h " 46  ~"¤c/deviû.h " 47  ~"¤c/´ofže.h " 48  ~"¤c/£rviû.h " 49  ~"¤c/sh¬ed/utž.h " 50  ~"¤c/sh¬ed/uhid.h " 52  ~"¤c/¶ugš.h " 54  ~"su¥’d.h " 55  ~"©Œib/©t.h " 56  ~"©Œib/g©Œib.h " 57  ~"¤c/©tio.h " 58  ~"©Œib/g©t.h " 60  #HOG_UUID "00001812-0000-1000-8000-00805f9b34fb" ) 62  #HOG_INFO_UUID 0x2A4A ) 63  #HOG_REPORT_MAP_UUID 0x2A4B ) 64  #HOG_REPORT_UUID 0x2A4D ) 65  #HOG_PROTO_MODE_UUID 0x2A4E ) 66  #HOG_CONTROL_POINT_UUID 0x2A4C ) 68  #HOG_REPORT_TYPE_INPUT 1 ) 69  #HOG_REPORT_TYPE_OUTPUT 2 ) 70  #HOG_REPORT_TYPE_FEATURE 3 ) 72  #HOG_PROTO_MODE_BOOT 0 ) 73  #HOG_PROTO_MODE_REPORT 1 ) 75  #HOG_REPORT_MAP_MAX_SIZE 512 ) 76  #HID_INFO_SIZE 4 ) 77  #ATT_NOTIFICATION_HEADER_SIZE 3 ) 79  shog_deviû { 80 ušt16_t mid ; 81  btd_deviû * mdeviû ; 82 GA‰rib * m©Œib ; 83 gušt m©tioid ; 84  g©t_´im¬y * mhog_´im¬y ; 85 GSLi¡ * m»pÜts ; 86  bt_uhid * muhid ; 87 gboÞ—n mhas_»pÜt_id ; 88 ušt16_t mbcdhid ; 89 ušt8_t mbcouÁrycode ; 90 ušt16_t m´Ùo_mode_hªdË ; 91 ušt16_t mù¾±_hªdË ; 92 ušt8_t mæags ; 93 gušt mg‘»p_©t ; 94 ušt16_t mg‘»p_id ; 95 gušt m£Œ•_©t ; 96 ušt16_t m£Œ•_id ; 99  s»pÜt { 100 ušt8_t mid ; 101 ušt8_t mty³ ; 102 gušt mnÙifyid ; 103  g©t_ch¬ * mdeþ ; 104  hog_deviû * mhogdev ; 107  gboÞ—n gsu¥’d_suµÜ‹d = FALSE ; 108  GSLi¡ * gdeviûs = NULL ; 110  $»pÜt_v®ue_cb (cÚ¡ gušt8 * pdu , gušt16 Ën , gpoš‹r u£r_d©a ) 112  »pÜt *»p܈ð u£r_d©a ; 113  hog_deviû * hogdev = »pÜt ->hogdev; 114  uhid_ev’t ev ; 115 ušt8_t * buf ; 116  ”r ; 118 ià( Ën < ATT_NOTIFICATION_HEADER_SIZE ) { 119 `”rÜ ("Malformed ATT‚otification"); 123 pdu +ð ATT_NOTIFICATION_HEADER_SIZE ; 124 Ën -ð ATT_NOTIFICATION_HEADER_SIZE ; 126 `mem£t (& ev , 0, (ev)); 127 ev . ty³ = UHID_INPUT ; 128 buf = ev . u . šput . d©a ; 130 ià( hogdev -> has_»pÜt_id ) { 131 buf [0] = »pÜt -> id ; 132 Ën = `MIN Ö’, ( ev . u . šput . d©a ) - 1); 133 `memýy ( buf + 1, pdu , Ën ); 134 ev . u . šput . size = ++ Ën ; 136 Ën = `MIN Ö’, ( ev . u . šput . d©a )); 137 `memýy ( buf , pdu , Ën ); 138 ev . u . šput . size = Ën ; 141 ”r = `bt_uhid_£nd ( hogdev -> uhid , & ev ); 142 ià( ”r < 0) { 143 `”rÜ ("bt_uhid_£nd: % (%d)", `¡»¼Ü (- ”r ), -err); 147 `DBG ("HoG„•Üˆ(%u by‹s)", ev . u . šput . size ); 148 } } 150  $»pÜt_ccc_wr™‹n_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 151 gušt16 ¶’ , gpoš‹r u£r_d©a ) 153  »pÜt *»p܈ð u£r_d©a ; 154  hog_deviû * hogdev = »pÜt ->hogdev; 156 ià( ¡©us != 0) { 157 `”rÜ ("Write„eport characteristic descriptor failed: %s", 158 `©t_ecode2¡r ( ¡©us )); 162 »pÜt -> nÙifyid = `g_©Œib_»gi¡” ( hogdev -> ©Œib , 163 ATT_OP_HANDLE_NOTIFY , 164 »pÜt -> deþ -> v®ue_hªdË , 165 »pÜt_v®ue_cb , »pÜt , NULL ); 167 `DBG ("Report characteristic descriptor written:‚otificationsƒnabled"); 168 } } 170  $wr™e_ccc ( ušt16_t hªdË , gpoš‹r u£r_d©a ) 172  »pÜt *»p܈ð u£r_d©a ; 173  hog_deviû * hogdev = »pÜt ->hogdev; 174 ušt8_t v®ue [] = { 0x01, 0x00 }; 176 `g©t_wr™e_ch¬ ( hogdev -> ©Œib , hªdË , v®ue , (value), 177 »pÜt_ccc_wr™‹n_cb , »pÜt ); 178 } } 180  $»pÜt_»ã»nû_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 181 gušt16 ¶’ , gpoš‹r u£r_d©a ) 183  »pÜt *»p܈ð u£r_d©a ; 185 ià( ¡©us != 0) { 186 `”rÜ ("Read Report Reference descriptor failed: %s", 187 `©t_ecode2¡r ( ¡©us )); 191 ià( ¶’ != 3) { 192 `”rÜ ("Malformed ATT„ead„esponse"); 196 »pÜt -> id = pdu [1]; 197 »pÜt -> ty³ = pdu [2]; 198 `DBG ("R•ÜˆID: 0x%02x R•Üˆty³: 0x%02x", pdu [1],…du[2]); 199 } } 201  ex‹º®_»pÜt_»ã»nû_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 202 gušt16 ¶’ , gpoš‹r u£r_d©a ); 205  $discov”_desütÜ_cb ( ušt8_t ¡©us , GSLi¡ * descs , 206 * u£r_d©a ) 208  »pÜt *report; 209  hog_deviû * hogdev ; 210 GA‰rib * ©Œib = NULL ; 212 ià( ¡©us != 0) { 213 `”rÜ ("Discover‡ll descriptors failed: %s", 214 `©t_ecode2¡r ( ¡©us )); 218  ; descs ; desc ðdescs-> Ãxt ) { 219  g©t_desc * desc = descs -> d©a ; 221  desc -> uuid16 ) { 222  GATT_CLIENT_CHARAC_CFG_UUID : 223 »pÜt = u£r_d©a ; 224 ©Œib = »pÜt -> hogdev ->attrib; 225 `wr™e_ccc ( desc -> hªdË , »pÜt ); 227  GATT_REPORT_REFERENCE : 228 »pÜt = u£r_d©a ; 229 ©Œib = »pÜt -> hogdev ->attrib; 230 `g©t_»ad_ch¬ ( ©Œib , desc -> hªdË , 231 »pÜt_»ã»nû_cb , »pÜt ); 233  GATT_EXTERNAL_REPORT_REFERENCE : 234 hogdev = u£r_d©a ; 235 ©Œib = hogdev ->attrib; 236 `g©t_»ad_ch¬ ( ©Œib , desc -> hªdË , 237 ex‹º®_»pÜt_»ã»nû_cb , hogdev ); 241 } } 243  $discov”_desütÜ ( GA‰rib * ©Œib , ušt16_t ¡¬t , ušt16_ˆ ’d , 244 gpoš‹r u£r_d©a ) 246 ià( ¡¬t > ’d ) 249 `g©t_discov”_desc ( ©Œib , ¡¬t , ’d , NULL , 250 discov”_desütÜ_cb , u£r_d©a ); 251 } } 253  $ex‹º®_£rviû_ch¬_cb ( ušt8_t ¡©us , GSLi¡ * ch¬s , 254 * u£r_d©a ) 256  hog_deviû * hogdev = u£r_d©a ; 257  g©t_´im¬y * ´im = hogdev -> hog_´im¬y ; 258  »pÜt *report; 259 GSLi¡ * l ; 261 ià( ¡©us != 0) { 262 cÚ¡ * ¡r = `©t_ecode2¡r ( ¡©us ); 263 `DBG ("Discov”ƒx‹º® s”viû ch¬aù”i¡iøçžed: %s", ¡r ); 267  l = ch¬s ;†;† = `g_¦i¡_Ãxt (l)) { 268  g©t_ch¬ * chr , * Ãxt ; 269 ušt16_t ¡¬t , ’d ; 271 chr = l -> d©a ; 272 Ãxt = l ->Ãxˆ?†->Ãxt-> d©a : NULL ; 274 `DBG ("0x%04x UUID: %s…roperties: %02x", 275 chr -> hªdË , chr-> uuid , chr-> ´Ý”t›s ); 277 »pÜt = `g_Ãw0 (report, 1); 278 »pÜt -> hogdev = hogdev; 279 »pÜt -> deþ = `g_memdup ( chr , (*chr)); 280 hogdev -> »pÜts = `g_¦i¡_­³nd (hogdev->»pÜts, »pÜt ); 281 ¡¬t = chr -> v®ue_hªdË + 1; 282 ’d = ( Ãxt ?‚ext-> hªdË - 1 : ´im -> ¿nge .end); 283 `discov”_desütÜ ( hogdev -> ©Œib , ¡¬t , ’d , »pÜt ); 285 } } 287  $ex‹º®_»pÜt_»ã»nû_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 288 gušt16 ¶’ , gpoš‹r u£r_d©a ) 290  hog_deviû * hogdev = u£r_d©a ; 291 ušt16_t uuid16 ; 292 bt_uuid_t uuid ; 294 ià( ¡©us != 0) { 295 `”rÜ ("Read External Report Reference descriptor failed: %s", 296 `©t_ecode2¡r ( ¡©us )); 300 ià( ¶’ != 3) { 301 `”rÜ ("Malformed ATT„ead„esponse"); 305 uuid16 = `g‘_Ë16 (& pdu [1]); 306 `DBG ("External„eport„eference„ead,ƒxternal„eport characteristic " 307 "UUID: 0x%04x", uuid16 ); 308 `bt_uuid16_ü—‹ (& uuid , uuid16 ); 309 `g©t_discov”_ch¬ ( hogdev -> ©Œib , 0x00, 0xff, & uuid , 310 ex‹º®_£rviû_ch¬_cb , hogdev ); 311 } } 313  $»pÜt_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 315 cÚ¡  »pÜt * ¿ = a , * rb = b ; 318 ià( ¿ -> ty³ !ð rb ->type) 319  ¿ -> ty³ - rb ->type; 322  ¿ -> id - rb ->id; 323 } } 325  $ouut_wr™‹n_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 326 gušt16 ¶’ , gpoš‹r u£r_d©a ) 328 ià( ¡©us != 0) { 329 `”rÜ ("Wr™ouuˆ»p܈çžed: %s", `©t_ecode2¡r ( ¡©us )); 332 } } 334  »pÜt * $fšd_»pÜt ( hog_deviû * hogdev , ušt8_t ty³ , ušt8_ˆ id ) 336  »pÜt cmp ; 337 GSLi¡ * l ; 339  ty³ ) { 340  UHID_FEATURE_REPORT : 341 cmp . ty³ = HOG_REPORT_TYPE_FEATURE ; 343  UHID_OUTPUT_REPORT : 344 cmp . ty³ = HOG_REPORT_TYPE_OUTPUT ; 346  UHID_INPUT_REPORT : 347 cmp . ty³ = HOG_REPORT_TYPE_INPUT ; 350  NULL ; 353 cmp . id = hogdev -> has_»pÜt_id ? id : 0; 355 l = `g_¦i¡_fšd_cu¡om ( hogdev -> »pÜts , & cmp , »pÜt_cmp ); 357  l ?†-> d©a : NULL ; 358 } } 360  $fÜw¬d_»pÜt ( uhid_ev’t * ev , * u£r_d©a ) 362  hog_deviû * hogdev = u£r_d©a ; 363  »pÜt *report; 364 * d©a ; 365  size ; 367 »pÜt = `fšd_»pÜt ( hogdev , ev -> u . ouut . ¹y³ ,ƒv->u.ouut. d©a [0]); 368 ià(! »pÜt ) 371 d©a = ev -> u . ouut .data; 372 size = ev -> u . ouut .size; 373 ià( hogdev -> has_»pÜt_id && size > 0) { 374 d©a ++; 375 -- size ; 378 `DBG ("S’dšg„•Üˆty³ %d ID %dØhªdË 0x%X", »pÜt -> ty³ , 379 »pÜt -> id ,„•Üt-> deþ -> v®ue_hªdË ); 381 ià( hogdev -> ©Œib =ð NULL ) 384 ià( »pÜt -> deþ -> ´Ý”t›s & GATT_CHR_PROP_WRITE ) 385 `g©t_wr™e_ch¬ ( hogdev -> ©Œib , »pÜt -> deþ -> v®ue_hªdË , 386 d©a , size , ouut_wr™‹n_cb , hogdev ); 387 ià( »pÜt -> deþ -> ´Ý”t›s & GATT_CHR_PROP_WRITE_WITHOUT_RESP ) 388 `g©t_wr™e_cmd ( hogdev -> ©Œib , »pÜt -> deþ -> v®ue_hªdË , 389 d©a , size , NULL , NULL); 390 } } 392  $£t_»pÜt_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 393 gušt16 ¶’ , gpoš‹r u£r_d©a ) 395  hog_deviû * hogdev = u£r_d©a ; 396  uhid_ev’t r¥ ; 397  ”r ; 399 hogdev -> £Œ•_©t = 0; 401 `mem£t (& r¥ , 0, (rsp)); 402 r¥ . ty³ = UHID_SET_REPORT_REPLY ; 403 r¥ . u . £t_»pÜt_»¶y . id = hogdev -> £Œ•_id ; 404 r¥ . u . £t_»pÜt_»¶y . ”r = ¡©us ; 406 ià( ¡©us != 0) 407 `”rÜ ("E¼Ü s‘tšg R•Üˆv®ue: %s", `©t_ecode2¡r ( ¡©us )); 409 ”r = `bt_uhid_£nd ( hogdev -> uhid , & r¥ ); 410 ià( ”r < 0) 411 `”rÜ ("bt_uhid_£nd: %s", `¡»¼Ü (- ”r )); 412 } } 414  $£t_»pÜt ( uhid_ev’t * ev , * u£r_d©a ) 416  hog_deviû * hogdev = u£r_d©a ; 417  »pÜt *report; 418 * d©a ; 419  size ; 420  ”r ; 423 ià( hogdev -> £Œ•_©t ) { 424 `g_©Œib_ÿnûl ( hogdev -> ©Œib , hogdev-> £Œ•_©t ); 425 hogdev -> £Œ•_©t = 0; 428 hogdev -> £Œ•_id = ev -> u . £t_»pÜt . id ; 430 »pÜt = `fšd_»pÜt ( hogdev , ev -> u . £t_»pÜt . ¹y³ , 431 ev -> u . £t_»pÜt . ºum ); 432 ià(! »pÜt ) { 433 ”r = ENOTSUP ; 434  çž ; 437 d©a = ev -> u . £t_»pÜt .data; 438 size = ev -> u . £t_»pÜt .size; 439 ià( hogdev -> has_»pÜt_id && size > 0) { 440 d©a ++; 441 -- size ; 444 `DBG ("S’dšg„•Üˆty³ %d ID %dØhªdË 0x%X", »pÜt -> ty³ , 445 »pÜt -> id ,„•Üt-> deþ -> v®ue_hªdË ); 447 ià( hogdev -> ©Œib =ð NULL ) 450 hogdev -> £Œ•_©t = `g©t_wr™e_ch¬ (hogdev-> ©Œib , 451 »pÜt -> deþ -> v®ue_hªdË , 452 d©a , size , £t_»pÜt_cb , 453 hogdev ); 454 ià(! hogdev -> £Œ•_©t ) { 455 ”r = ENOMEM ; 456  çž ; 460 çž : 462 `£t_»pÜt_cb ( ”r , NULL , 0, hogdev ); 463 } } 465  $g‘_»pÜt_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 466 gpoš‹r u£r_d©a ) 468  hog_deviû * hogdev = u£r_d©a ; 469  uhid_ev’t r¥ ; 470  ”r ; 472 hogdev -> g‘»p_©t = 0; 474 `mem£t (& r¥ , 0, (rsp)); 475 r¥ . ty³ = UHID_GET_REPORT_REPLY ; 476 r¥ . u . g‘_»pÜt_»¶y . id = hogdev -> g‘»p_id ; 478 ià( ¡©us != 0) { 479 `”rÜ ("E¼Ü„—dšg R•Üˆv®ue: %s", `©t_ecode2¡r ( ¡©us )); 480  ex™ ; 483 ià( Ën == 0) { 484 `”rÜ ("E¼Ü„—dšg R•Üt,†’gth %d", Ën ); 485 ¡©us = EIO ; 486  ex™ ; 489 ià( pdu [0] != 0x0b) { 490 `”rÜ ("E¼Ü„—dšg R•Üt, inv®id„e¥Ú£: %02x", pdu [0]); 491 ¡©us = EPROTO ; 492  ex™ ; 495 -- Ën ; 496 ++ pdu ; 497 ià( hogdev -> has_»pÜt_id && Ën > 0) { 498 -- Ën ; 499 ++ pdu ; 502 r¥ . u . g‘_»pÜt_»¶y . size = Ën ; 503 `memýy ( r¥ . u . g‘_»pÜt_»¶y . d©a , pdu , Ën ); 505 ex™ : 506 r¥ . u . g‘_»pÜt_»¶y . ”r = ¡©us ; 507 ”r = `bt_uhid_£nd ( hogdev -> uhid , & r¥ ); 508 ià( ”r < 0) 509 `”rÜ ("bt_uhid_£nd: %s", `¡»¼Ü (- ”r )); 510 } } 512  $g‘_»pÜt ( uhid_ev’t * ev , * u£r_d©a ) 514  hog_deviû * hogdev = u£r_d©a ; 515  »pÜt *report; 516 gušt8 ”r ; 519 ià( hogdev -> g‘»p_©t ) { 520 `g_©Œib_ÿnûl ( hogdev -> ©Œib , hogdev-> g‘»p_©t ); 521 hogdev -> g‘»p_©t = 0; 524 hogdev -> g‘»p_id = ev -> u . g‘_»pÜt . id ; 526 »pÜt = `fšd_»pÜt ( hogdev , ev -> u . g‘_»pÜt . ¹y³ , 527 ev -> u . g‘_»pÜt . ºum ); 528 ià(! »pÜt ) { 529 ”r = ENOTSUP ; 530  çž ; 533 hogdev -> g‘»p_©t = `g©t_»ad_ch¬ (hogdev-> ©Œib , 534 »pÜt -> deþ -> v®ue_hªdË , 535 g‘_»pÜt_cb , hogdev ); 536 ià(! hogdev -> g‘»p_©t ) { 537 ”r = ENOMEM ; 538  çž ; 543 çž : 545 `g‘_»pÜt_cb ( ”r , NULL , 0, hogdev ); 546 } } 548  boÞ $g‘_desütÜ_™em_šfo ( ušt8_t * buf , ssize_t bËn , ssize_ˆ* Ën , 549 boÞ * is_lÚg ) 551 ià(! bËn ) 552  çl£ ; 554 * is_lÚg = ( buf [0] == 0xfe); 556 ià(* is_lÚg ) { 557 ià( bËn < 3) 558  çl£ ; 568 * Ën = buf [1] + 3; 570 ušt8_t b_size ; 580 b_size = buf [0] & 0x03; 581 * Ën = ( b_size ? 1 << (b_size - 1) : 0) + 1; 585  * Ën <ð bËn ; 586 } } 588 * $™em2¡ršg (* ¡r , ušt8_t * buf , ušt8_ˆ Ën ) 590 * p = ¡r ; 591  i ; 597  i = 0; i < 6 && i < Ën ; i++) 598 p +ð `¥rštf Õ, " %02x", buf [ i ]); 604 ià( i < Ën ) 605 `¥rštf ( p , " ..."); 607  ¡r ; 608 } } 610  $»pÜt_m­_»ad_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 611 gpoš‹r u£r_d©a ) 613  hog_deviû * hogdev = u£r_d©a ; 614  btd_ad­‹r * ad­‹r = `deviû_g‘_ad­‹r ( hogdev -> deviû ); 615 ušt8_t v®ue [ HOG_REPORT_MAP_MAX_SIZE ]; 616  uhid_ev’t ev ; 617 ušt16_t v’dÜ_¤c , v’dÜ , ´oduù , v”siÚ ; 618 ssize_t vËn ; 619  ™em¡r [20]; 620  i , ”r ; 622 ià( ¡©us != 0) { 623 `”rÜ ("R•ÜˆM­„—d fažed: %s", `©t_ecode2¡r ( ¡©us )); 627 vËn = `dec_»ad_»¥ ( pdu , ¶’ , v®ue , (value)); 628 ià( vËn < 0) { 629 `”rÜ ("ATT…rotocolƒrror"); 633 `DBG ("Report MAP:"); 634  i = 0; i < vËn ;) { 635 ssize_t ž’ = 0; 636 boÞ lÚg_™em = çl£ ; 638 ià( `g‘_desütÜ_™em_šfo (& v®ue [ i ], vËn - i, & ž’ , 639 & lÚg_™em )) { 641 ià(! lÚg_™em && ( v®ue [ i ] & 0xfc) == 0x84) 642 hogdev -> has_»pÜt_id = TRUE ; 644 `DBG ("\t%s", `™em2¡ršg ( ™em¡r , & v®ue [ i ], ž’ )); 646 i +ð ž’ ; 648 `”rÜ ("R•ÜˆM­…¬sšg fažed‡ˆ%d", i ); 651 `DBG ("\t%s", `™em2¡ršg ( ™em¡r , & v®ue [ i ], vËn - i)); 656 v’dÜ_¤c = `btd_deviû_g‘_v’dÜ_¤c ( hogdev -> deviû ); 657 v’dÜ = `btd_deviû_g‘_v’dÜ ( hogdev -> deviû ); 658 ´oduù = `btd_deviû_g‘_´oduù ( hogdev -> deviû ); 659 v”siÚ = `btd_deviû_g‘_v”siÚ ( hogdev -> deviû ); 660 `DBG ("DIS information: vendor_src=0x%X, vendor=0x%X,…roduct=0x%X, " 661 "v”siÚ=0x%X", v’dÜ_¤c , v’dÜ , ´oduù , v”siÚ ); 664 `mem£t (& ev , 0, (ev)); 665 ev . ty³ = UHID_CREATE ; 666 ià( `deviû_Çme_known ( hogdev -> deviû )) 667 `deviû_g‘_Çme ( hogdev -> deviû , (*è ev . u . ü—‹ . Çme , 668 ( ev . u . ü—‹ . Çme )); 670 `¡rýy ((*è ev . u . ü—‹ . Çme , "bluez-hog-device"); 671 `ba2¡r ( `btd_ad­‹r_g‘_add»ss ( ad­‹r ), (*è ev . u . ü—‹ . phys ); 672 `ba2¡r ( `deviû_g‘_add»ss ( hogdev -> deviû ), (*è ev . u . ü—‹ . uniq ); 673 ev . u . ü—‹ . v’dÜ = vendor; 674 ev . u . ü—‹ . ´oduù =…roduct; 675 ev . u . ü—‹ . v”siÚ = version; 676 ev . u . ü—‹ . couÁry = hogdev -> bcouÁrycode ; 677 ev . u . ü—‹ . bus = BUS_BLUETOOTH ; 678 ev . u . ü—‹ . rd_d©a = v®ue ; 679 ev . u . ü—‹ . rd_size = vËn ; 681 ”r = `bt_uhid_£nd ( hogdev -> uhid , & ev ); 682 ià( ”r < 0) { 683 `”rÜ ("bt_uhid_£nd: %s", `¡»¼Ü (- ”r )); 687 `bt_uhid_»gi¡” ( hogdev -> uhid , UHID_OUTPUT , fÜw¬d_»pÜt , hogdev); 688 `bt_uhid_»gi¡” ( hogdev -> uhid , UHID_SET_REPORT , £t_»pÜt , hogdev); 689 `bt_uhid_»gi¡” ( hogdev -> uhid , UHID_GET_REPORT , g‘_»pÜt , hogdev); 690 } } 692  $šfo_»ad_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 693 gpoš‹r u£r_d©a ) 695  hog_deviû * hogdev = u£r_d©a ; 696 ušt8_t v®ue [ HID_INFO_SIZE ]; 697 ssize_t vËn ; 699 ià( ¡©us != 0) { 700 `”rÜ ("HID Information„ead failed: %s", 701 `©t_ecode2¡r ( ¡©us )); 705 vËn = `dec_»ad_»¥ ( pdu , ¶’ , v®ue , (value)); 706 ià( vËn != 4) { 707 `”rÜ ("ATT…rotocolƒrror"); 711 hogdev -> bcdhid = `g‘_Ë16 (& v®ue [0]); 712 hogdev -> bcouÁrycode = v®ue [2]; 713 hogdev -> æags = v®ue [3]; 715 `DBG ("bcdHID: 0x%04X bCountryCode: 0x%02X Flags: 0x%02X", 716 hogdev -> bcdhid , hogdev-> bcouÁrycode , hogdev-> æags ); 717 } } 719  $´Ùo_mode_»ad_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 720 gpoš‹r u£r_d©a ) 722  hog_deviû * hogdev = u£r_d©a ; 723 ušt8_t v®ue ; 724 ssize_t vËn ; 726 ià( ¡©us != 0) { 727 `”rÜ ("Protocol Mode characteristic„ead failed: %s", 728 `©t_ecode2¡r ( ¡©us )); 732 vËn = `dec_»ad_»¥ ( pdu , ¶’ , & v®ue , (value)); 733 ià( vËn < 0) { 734 `”rÜ ("ATT…rotocolƒrror"); 738 ià( v®ue =ð HOG_PROTO_MODE_BOOT ) { 739 ušt8_t nv® = HOG_PROTO_MODE_REPORT ; 741 `DBG ("HoG device 0x%04X is operating in Boot Procotol Mode", 742 hogdev -> id ); 744 `g©t_wr™e_cmd ( hogdev -> ©Œib , hogdev-> ´Ùo_mode_hªdË , & nv® , 745 ( nv® ), NULL , NULL); 746 } ià( v®ue =ð HOG_PROTO_MODE_REPORT ) 747 `DBG ("HoG device 0x%04X is operating in Report Protocol Mode", 748 hogdev -> id ); 749 } } 751  $ch¬_discov”ed_cb ( ušt8_t ¡©us , GSLi¡ * ch¬s , * u£r_d©a ) 753  hog_deviû * hogdev = u£r_d©a ; 754  g©t_´im¬y * ´im = hogdev -> hog_´im¬y ; 755 bt_uuid_t »pÜt_uuid , »pÜt_m­_uuid , šfo_uuid ; 756 bt_uuid_t ´Ùo_mode_uuid , ù¾±_uuid ; 757  »pÜt *report; 758 GSLi¡ * l ; 759 ušt16_t šfo_hªdË = 0, ´Ùo_mode_hªdË = 0; 761 ià( ¡©us != 0) { 762 cÚ¡ * ¡r = `©t_ecode2¡r ( ¡©us ); 763 `DBG ("Discov”‡Î ch¬aù”i¡ic çžed: %s", ¡r ); 767 `bt_uuid16_ü—‹ (& »pÜt_uuid , HOG_REPORT_UUID ); 768 `bt_uuid16_ü—‹ (& »pÜt_m­_uuid , HOG_REPORT_MAP_UUID ); 769 `bt_uuid16_ü—‹ (& šfo_uuid , HOG_INFO_UUID ); 770 `bt_uuid16_ü—‹ (& ´Ùo_mode_uuid , HOG_PROTO_MODE_UUID ); 771 `bt_uuid16_ü—‹ (& ù¾±_uuid , HOG_CONTROL_POINT_UUID ); 773  l = ch¬s ;†;† = `g_¦i¡_Ãxt (l)) { 774  g©t_ch¬ * chr , * Ãxt ; 775 bt_uuid_t uuid ; 776 ušt16_t ¡¬t , ’d ; 778 chr = l -> d©a ; 779 Ãxt = l ->Ãxˆ?†->Ãxt-> d©a : NULL ; 781 `DBG ("0x%04x UUID: %s…roperties: %02x", 782 chr -> hªdË , chr-> uuid , chr-> ´Ý”t›s ); 784 `bt_¡ršg_to_uuid (& uuid , chr ->uuid); 786 ¡¬t = chr -> v®ue_hªdË + 1; 787 ’d = ( Ãxt ?‚ext-> hªdË - 1 : ´im -> ¿nge .end); 789 ià( `bt_uuid_cmp (& uuid , & »pÜt_uuid ) == 0) { 790 »pÜt = `g_Ãw0 (report, 1); 791 »pÜt -> hogdev = hogdev; 792 »pÜt -> deþ = `g_memdup ( chr , (*chr)); 793 hogdev -> »pÜts = `g_¦i¡_­³nd (hogdev->reports, 794 »pÜt ); 795 `discov”_desütÜ ( hogdev -> ©Œib , ¡¬t , ’d , »pÜt ); 796 } ià( `bt_uuid_cmp (& uuid , & »pÜt_m­_uuid ) == 0) { 797 `g©t_»ad_ch¬ ( hogdev -> ©Œib , chr -> v®ue_hªdË , 798 »pÜt_m­_»ad_cb , hogdev ); 799 `discov”_desütÜ ( hogdev -> ©Œib , ¡¬t , ’d , hogdev); 800 } ià( `bt_uuid_cmp (& uuid , & šfo_uuid ) == 0) 801 šfo_hªdË = chr -> v®ue_hªdË ; 802 ià( `bt_uuid_cmp (& uuid , & ´Ùo_mode_uuid ) == 0) 803 ´Ùo_mode_hªdË = chr -> v®ue_hªdË ; 804 ià( `bt_uuid_cmp (& uuid , & ù¾±_uuid ) == 0) 805 hogdev -> ù¾±_hªdË = chr -> v®ue_hªdË ; 808 ià( ´Ùo_mode_hªdË ) { 809 hogdev -> ´Ùo_mode_hªdË =…roto_mode_handle; 810 `g©t_»ad_ch¬ ( hogdev -> ©Œib , ´Ùo_mode_hªdË , 811 ´Ùo_mode_»ad_cb , hogdev ); 814 ià( šfo_hªdË ) 815 `g©t_»ad_ch¬ ( hogdev -> ©Œib , šfo_hªdË , šfo_»ad_cb , 816 hogdev ); 817 } } 819  $©tio_cÚÃùed_cb ( GA‰rib * ©Œib , gpoš‹r u£r_d©a ) 821  hog_deviû * hogdev = u£r_d©a ; 822  g©t_´im¬y * ´im = hogdev -> hog_´im¬y ; 823 GSLi¡ * l ; 825 `DBG ("HoG connected"); 827 hogdev -> ©Œib = `g_©Œib_»f (attrib); 829 ià( hogdev -> »pÜts =ð NULL ) { 830 `g©t_discov”_ch¬ ( hogdev -> ©Œib , ´im -> ¿nge . ¡¬t , 831 ´im -> ¿nge . ’d , NULL , 832 ch¬_discov”ed_cb , hogdev ); 836  l = hogdev -> »pÜts ;†;† =†-> Ãxt ) { 837  »pÜt * r = l -> d©a ; 839 r -> nÙifyid = `g_©Œib_»gi¡” ( hogdev -> ©Œib , 840 ATT_OP_HANDLE_NOTIFY , 841 r -> deþ -> v®ue_hªdË , 842 »pÜt_v®ue_cb , r , NULL ); 844 } } 846  $©tio_discÚÃùed_cb ( gpoš‹r u£r_d©a ) 848  hog_deviû * hogdev = u£r_d©a ; 849 GSLi¡ * l ; 851 `DBG ("HoG disconnected"); 853  l = hogdev -> »pÜts ;†;† =†-> Ãxt ) { 854  »pÜt * r = l -> d©a ; 856 `g_©Œib_uÄegi¡” ( hogdev -> ©Œib , r -> nÙifyid ); 859 `g_©Œib_uÄef ( hogdev -> ©Œib ); 860 hogdev -> ©Œib = NULL ; 861 } } 863  hog_deviû * $hog_Ãw_deviû ( btd_deviû * deviû , 864 ušt16_t id ) 866  hog_deviû * hogdev ; 868 hogdev = `g_Œy_Ãw0 ( hog_deviû , 1); 869 ià(! hogdev ) 870  NULL ; 872 hogdev -> id = id; 873 hogdev -> deviû = `btd_deviû_»f (device); 875  hogdev ; 876 } } 878  $»pÜt_ä“ (* d©a ) 880  »pÜt *»p܈ð d©a ; 881  hog_deviû * hogdev = »pÜt ->hogdev; 883 ià( hogdev -> ©Œib ) 884 `g_©Œib_uÄegi¡” ( hogdev -> ©Œib , »pÜt -> nÙifyid ); 886 `g_ä“ ( »pÜt -> deþ ); 887 `g_ä“ ( »pÜt ); 888 } } 890  $hog_ä“_deviû ( hog_deviû * hogdev ) 892 `btd_deviû_uÄef ( hogdev -> deviû ); 893 `g_¦i¡_ä“_fuÎ ( hogdev -> »pÜts , »pÜt_ä“ ); 894 `g_©Œib_uÄef ( hogdev -> ©Œib ); 895 `g_ä“ ( hogdev -> hog_´im¬y ); 896 `g_ä“ ( hogdev ); 897 } } 899  hog_deviû * $hog_»gi¡”_deviû ( btd_deviû * deviû , 900  g©t_´im¬y * ´im ) 902  hog_deviû * hogdev ; 904 hogdev = `hog_Ãw_deviû ( deviû , ´im -> ¿nge . ¡¬t ); 905 ià(! hogdev ) 906  NULL ; 908 hogdev -> uhid = `bt_uhid_Ãw_deçuÉ (); 909 ià(! hogdev -> uhid ) { 910 `”rÜ ("bt_uhid_new_default: failed"); 911 `hog_ä“_deviû ( hogdev ); 912  NULL ; 915 hogdev -> hog_´im¬y = `g_memdup ( ´im , (*prim)); 917 hogdev -> ©tioid = `btd_deviû_add_©tio_ÿÎback ( deviû , 918 ©tio_cÚÃùed_cb , 919 ©tio_discÚÃùed_cb , 920 hogdev ); 922  hogdev ; 923 } } 925  $hog_uÄegi¡”_deviû ( hog_deviû * hogdev ) 927 `btd_deviû_»move_©tio_ÿÎback ( hogdev -> deviû , hogdev-> ©tioid ); 928 `bt_uhid_uÄef ( hogdev -> uhid ); 929 `hog_ä“_deviû ( hogdev ); 932 } } 934  $£t_cÚŒÞ_pošt ( hog_deviû * hogdev , gboÞ—n su¥’d ) 936 ušt8_t v®ue = su¥’d ? 0x00 : 0x01; 938 ià( hogdev -> ©Œib =ð NULL ) 939  - ENOTCONN ; 941 `DBG ("0x%4X HID CÚŒÞ Pošt: %s", hogdev -> id , su¥’d ? 944 ià( hogdev -> ù¾±_hªdË == 0) 945  - ENOTSUP ; 947 `g©t_wr™e_cmd ( hogdev -> ©Œib , hogdev-> ù¾±_hªdË , & v®ue , 948 ( v®ue ), NULL , NULL); 951 } } 953  $£t_su¥’d ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 955  hog_deviû * hogdev = d©a ; 956 gboÞ—n su¥’d = `GPOINTER_TO_INT ( u£r_d©a ); 958 `£t_cÚŒÞ_pošt ( hogdev , su¥’d ); 959 } } 961  $su¥’d_ÿÎback () 963 gboÞ—n su¥’d = TRUE ; 965 `DBG ("Suspending ..."); 967 `g_¦i¡_fÜ—ch ( deviûs , £t_su¥’d , `GINT_TO_POINTER ( su¥’d )); 968 } } 970  $»sume_ÿÎback () 972 gboÞ—n su¥’d = FALSE ; 974 `DBG ("Resuming ..."); 976 `g_¦i¡_fÜ—ch ( deviûs , £t_su¥’d , `GINT_TO_POINTER ( su¥’d )); 977 } } 979  $hog_´obe ( btd_£rviû * £rviû ) 981  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 982 cÚ¡ * ·th = `deviû_g‘_·th ( deviû ); 983 GSLi¡ * ´im¬›s , * l ; 985 `DBG ("·th %s", ·th ); 987 ´im¬›s = `btd_deviû_g‘_´im¬›s ( deviû ); 988 ià( ´im¬›s =ð NULL ) 989  - EINVAL ; 991  l = ´im¬›s ;†;† = `g_¦i¡_Ãxt (l)) { 992  g©t_´im¬y * ´im = l -> d©a ; 993  hog_deviû * hogdev ; 995 ià( `¡rcmp ( ´im -> uuid , HOG_UUID ) != 0) 998 hogdev = `hog_»gi¡”_deviû ( deviû , ´im ); 999 ià( hogdev =ð NULL ) 1002 deviûs = `g_¦i¡_­³nd (deviûs, hogdev ); 1006 } } 1008  $»move_deviû ( gpoš‹r a , gpoš‹¸ b ) 1010  hog_deviû * hogdev = a ; 1011  btd_deviû * deviû = b ; 1013 ià( hogdev -> deviû != device) 1016 deviûs = `g_¦i¡_»move (deviûs, hogdev ); 1017 `hog_uÄegi¡”_deviû ( hogdev ); 1018 } } 1020  $hog_»move ( btd_£rviû * £rviû ) 1022  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 1023 cÚ¡ * ·th = `deviû_g‘_·th ( deviû ); 1025 `DBG ("·th %s", ·th ); 1027 `g_¦i¡_fÜ—ch ( deviûs , »move_deviû , deviû ); 1028 } } 1030  btd_´ofže ghog_´ofže = { 1031 . Çme = "input-hog", 1032 . g»mÙe_uuid = HOG_UUID , 1033 . gdeviû_´obe = hog_´obe , 1034 . gdeviû_»move = hog_»move , 1037  $hog_š™ () 1039  ”r ; 1041 ”r = `su¥’d_š™ ( su¥’d_ÿÎback , »sume_ÿÎback ); 1042 ià( ”r < 0) 1043 `”rÜ ("Lßdšg su¥’d…lugš fažed: % (%d)", `¡»¼Ü (- ”r ), 1044 - ”r ); 1046 su¥’d_suµÜ‹d = TRUE ; 1048  `btd_´ofže_»gi¡” (& hog_´ofže ); 1049 } } 1051  $hog_ex™ () 1053 ià( su¥’d_suµÜ‹d ) 1054 `su¥’d_ex™ (); 1056 `btd_´ofže_uÄegi¡” (& hog_´ofže ); 1057 } } 1059 BLUETOOTH_PLUGIN_DEFINE ( hog , VERSION , BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 1060 hog_š™ , hog_ex™ ) @profiles/input/manager.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<”ºo.h > 29  ~<¡dboÞ.h > 31  ~ 32  ~ 33  ~ 35  ~"¤c/log.h " 36  ~"¤c/¶ugš.h " 38  ~"lib/uuid.h " 39  ~"¤c/ad­‹r.h " 40  ~"¤c/deviû.h " 41  ~"¤c/´ofže.h " 42  ~"¤c/£rviû.h " 44  ~"deviû.h " 45  ~"£rv”.h " 47  $hid_£rv”_´obe ( btd_´ofže * p ,  btd_ad­‹r * ad­‹r ) 49  `£rv”_¡¬t ( `btd_ad­‹r_g‘_add»ss ( ad­‹r )); 50 } } 52  $hid_£rv”_»move ( btd_´ofže * p , 53  btd_ad­‹r * ad­‹r ) 55 `£rv”_¡Ý ( `btd_ad­‹r_g‘_add»ss ( ad­‹r )); 56 } } 58  btd_´ofže gšput_´ofže = { 59 . Çme = "input-hid", 60 . gloÿl_uuid = HID_UUID , 61 . g»mÙe_uuid = HID_UUID , 63 . gauto_cÚÃù = Œue , 64 . gcÚÃù = šput_deviû_cÚÃù , 65 . gdiscÚÃù = šput_deviû_discÚÃù , 67 . gdeviû_´obe = šput_deviû_»gi¡” , 68 . gdeviû_»move = šput_deviû_uÄegi¡” , 70 . gad­‹r_´obe = hid_£rv”_´obe , 71 . gad­‹r_»move = hid_£rv”_»move , 74  GKeyFže * $lßd_cÚfig_fže (cÚ¡ * fže ) 76 GKeyFže * keyfže ; 77 GE¼Ü * ”r = NULL ; 79 keyfže = `g_key_fže_Ãw (); 81 ià(! `g_key_fže_lßd_äom_fže ( keyfže , fže , 0, & ”r )) { 82 ià(! `g_”rÜ_m©ches ( ”r , G_FILE_ERROR , G_FILE_ERROR_NOENT )) 83 `”rÜ ("P¬sšg % çžed: %s", fže , ”r -> mes§ge ); 84 `g_”rÜ_ä“ ( ”r ); 85 `g_key_fže_ä“ ( keyfže ); 86  NULL ; 89  keyfže ; 90 } } 92  $šput_š™ () 94 GKeyFže * cÚfig ; 95 GE¼Ü * ”r = NULL ; 97 cÚfig = `lßd_cÚfig_fže ( CONFIGDIR "/input.conf"); 98 ià( cÚfig ) { 99  idË_timeout ; 100 gboÞ—n uhid_’abËd ; 102 idË_timeout = `g_key_fže_g‘_š‹g” ( cÚfig , "General", 103 "IdËTimeout", & ”r ); 104 ià(! ”r ) { 105 `DBG ("šput.cÚf: IdËTimeout=%d", idË_timeout ); 106 `šput_£t_idË_timeout ( idË_timeout * 60); 108 `g_þ—r_”rÜ (& ”r ); 110 uhid_’abËd = `g_key_fže_g‘_boÞ—n ( cÚfig , "General", 111 "U£r¥aûHID", & ”r ); 112 ià(! ”r ) { 113 `DBG ("šput.cÚf: U£r¥aûHID=%s", uhid_’abËd ? 115 `šput_’abË_u£r¥aû_hid ( uhid_’abËd ); 117 `g_þ—r_”rÜ (& ”r ); 120 `btd_´ofže_»gi¡” (& šput_´ofže ); 122 ià( cÚfig ) 123 `g_key_fže_ä“ ( cÚfig ); 126 } } 128  $šput_ex™ () 130 `btd_´ofže_uÄegi¡” (& šput_´ofže ); 131 } } 133 BLUETOOTH_PLUGIN_DEFINE ( šput , VERSION , BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 134 šput_š™ , šput_ex™ ) @profiles/input/server.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~<¡dboÞ.h > 30  ~<”ºo.h > 32  ~ 33  ~ 35  ~ 36  ~ 38  ~"¤c/log.h " 40  ~"¤c/uuid-h–³r.h " 41  ~"btio/btio.h " 42  ~"lib/uuid.h " 43  ~"¤c/ad­‹r.h " 44  ~"¤c/deviû.h " 45  ~"¤c/´ofže.h " 47  ~"deviû.h " 48  ~"£rv”.h " 50  scÚfœm_d©a { 51 bdaddr_t md¡ ; 52 GIOChªÃl * mio ; 55  GSLi¡ * g£rv”s = NULL ; 56  sšput_£rv” { 57 bdaddr_t m¤c ; 58 GIOChªÃl * mù¾ ; 59 GIOChªÃl * mšŒ ; 60  cÚfœm_d©a * mcÚfœm ; 63  $£rv”_cmp ( gcÚ¡poš‹r s , gcÚ¡poš‹¸ u£r_d©a ) 65 cÚ¡  šput_£rv” * £rv” = s ; 66 cÚ¡ bdaddr_t * ¤c = u£r_d©a ; 68  `bacmp (& £rv” -> ¤c , src); 69 } } 71  ssixaxis_d©a { 72 GIOChªÃl * mchª ; 73 ušt16_t mpsm ; 76  $sixaxis_sdp_cb ( btd_deviû * dev ,  ”r , * u£r_d©a ) 78  sixaxis_d©a * d©a = u£r_d©a ; 79 cÚ¡ bdaddr_t * ¤c ; 81 `DBG ("”¸%d (%s)", ”r , `¡»¼Ü (-err)); 83 ià( ”r < 0) 84  çž ; 86 ¤c = `btd_ad­‹r_g‘_add»ss ( `deviû_g‘_ad­‹r ( dev )); 88 ià( `šput_deviû_£t_chªÃl ( ¤c , `deviû_g‘_add»ss ( dev ), d©a -> psm , 89 d©a -> chª ) < 0) 90  çž ; 92 `g_io_chªÃl_uÄef ( d©a -> chª ); 93 `g_ä“ ( d©a ); 97 çž : 98 `g_io_chªÃl_shutdown ( d©a -> chª , TRUE , NULL ); 99 `g_io_chªÃl_uÄef ( d©a -> chª ); 100 `g_ä“ ( d©a ); 101 } } 103  $sixaxis_brow£_sdp (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ , 104 GIOChªÃl * chª , ušt16_t psm ) 106  btd_deviû * deviû ; 107  sixaxis_d©a * d©a ; 109 deviû = `btd_ad­‹r_fšd_deviû ( `ad­‹r_fšd ( ¤c ), d¡ , BDADDR_BREDR ); 110 ià(! deviû ) 113 d©a = `g_Ãw0 ( sixaxis_d©a , 1); 114 d©a -> chª = `g_io_chªÃl_»f (chan); 115 d©a -> psm =…sm; 117 ià( psm =ð L2CAP_PSM_HIDP_CTRL ) 118 `deviû_discov”_£rviûs ( deviû ); 120 `deviû_wa™_fÜ_svc_com¶‘e ( deviû , sixaxis_sdp_cb , d©a ); 121 } } 123  boÞ $dev_is_sixaxis (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ ) 125  btd_deviû * deviû ; 126 ušt16_t vid , pid ; 128 deviû = `btd_ad­‹r_fšd_deviû ( `ad­‹r_fšd ( ¤c ), d¡ , BDADDR_BREDR ); 129 ià(! deviû ) 130  çl£ ; 132 vid = `btd_deviû_g‘_v’dÜ ( deviû ); 133 pid = `btd_deviû_g‘_´oduù ( deviû ); 136 ià( vid =ð0x054ø&& pid == 0x0268) 137  Œue ; 140 ià( vid =ð0x054ø&& pid == 0x05c4) 141  Œue ; 144 ià( vid =ð0x054ø&& pid == 0x042f) 145  Œue ; 147  çl£ ; 148 } } 150  $cÚÃù_ev’t_cb ( GIOChªÃl * chª , GE¼Ü * ”r , gpoš‹r d©a ) 152 ušt16_t psm ; 153 bdaddr_t ¤c , d¡ ; 154  add»ss [18]; 155 GE¼Ü * g”r = NULL ; 156  »t ; 158 ià( ”r ) { 159 `”rÜ ("%s", ”r -> mes§ge ); 163 `bt_io_g‘ ( chª , & g”r , 164 BT_IO_OPT_SOURCE_BDADDR , & ¤c , 165 BT_IO_OPT_DEST_BDADDR , & d¡ , 166 BT_IO_OPT_PSM , & psm , 167 BT_IO_OPT_INVALID ); 168 ià( g”r ) { 169 `”rÜ ("%s", g”r -> mes§ge ); 170 `g_”rÜ_ä“ ( g”r ); 171 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 175 `ba2¡r (& d¡ , add»ss ); 176 `DBG ("Incomšg cÚÃùiÚ from % Ú PSM %d", add»ss , psm ); 178 »t = `šput_deviû_£t_chªÃl (& ¤c , & d¡ , psm , chª ); 179 ià( »t == 0) 182 ià( »t =ð- ENOENT && `dev_is_sixaxis (& ¤c , & d¡ )) { 183 `sixaxis_brow£_sdp (& ¤c , & d¡ , chª , psm ); 187 `”rÜ ("Refusšg iÅuˆdeviû cÚÃù: % (%d)", `¡»¼Ü (- »t ), -ret); 190 ià( »t =ð- ENOENT && psm =ð L2CAP_PSM_HIDP_CTRL ) { 191  uÅlug = 0x15; 192  sk = `g_io_chªÃl_unix_g‘_fd ( chª ); 193 ià( `wr™e ( sk , & uÅlug , (unplug)) < 0) 194 `”rÜ ("Unableo send virtual cable unplug"); 197 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 198 } } 200  $auth_ÿÎback ( DBusE¼Ü * d”r , * u£r_d©a ) 202  šput_£rv” * £rv” = u£r_d©a ; 203  cÚfœm_d©a * cÚfœm = £rv” ->confirm; 204 GE¼Ü * ”r = NULL ; 206 ià( d”r ) { 207 `”rÜ ("Acûs d’›d: %s", d”r -> mes§ge ); 208  »jeù ; 211 ià(! `šput_deviû_exi¡s (& £rv” -> ¤c , & cÚfœm -> d¡ ) && 212 ! `dev_is_sixaxis (& £rv” -> ¤c , & cÚfœm -> d¡ )) 215 ià(! `bt_io_acû± ( cÚfœm -> io , cÚÃù_ev’t_cb , £rv” , NULL , & ”r )) { 216 `”rÜ ("bt_io_acû±: %s", ”r -> mes§ge ); 217 `g_”rÜ_ä“ ( ”r ); 218  »jeù ; 221 `g_io_chªÃl_uÄef ( cÚfœm -> io ); 222 `g_ä“ ( £rv” -> cÚfœm ); 223 £rv” -> cÚfœm = NULL ; 227 »jeù : 228 `g_io_chªÃl_shutdown ( cÚfœm -> io , TRUE , NULL ); 229 `g_io_chªÃl_uÄef ( cÚfœm -> io ); 230 £rv” -> cÚfœm = NULL ; 231 `šput_deviû_þo£_chªÃls (& £rv” -> ¤c , & cÚfœm -> d¡ ); 232 `g_ä“ ( cÚfœm ); 233 } } 235  $cÚfœm_ev’t_cb ( GIOChªÃl * chª , gpoš‹r u£r_d©a ) 237  šput_£rv” * £rv” = u£r_d©a ; 238 bdaddr_t ¤c , d¡ ; 239 GE¼Ü * ”r = NULL ; 240  addr [18]; 241 gušt »t ; 243 `DBG (""); 245 `bt_io_g‘ ( chª , & ”r , 246 BT_IO_OPT_SOURCE_BDADDR , & ¤c , 247 BT_IO_OPT_DEST_BDADDR , & d¡ , 248 BT_IO_OPT_INVALID ); 249 ià( ”r ) { 250 `”rÜ ("%s", ”r -> mes§ge ); 251 `g_”rÜ_ä“ ( ”r ); 252 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 256 `ba2¡r (& d¡ , addr ); 258 ià( £rv” -> cÚfœm ) { 259 `”rÜ ("Refusšg cÚÃùiÚ from %s: s‘u°š…rog»ss", addr ); 260  drÝ ; 263 ià(! `šput_deviû_exi¡s (& ¤c , & d¡ è&& ! `dev_is_sixaxis (&src, &dst)) { 264 `”rÜ ("Refusšg cÚÃùiÚ from %s: unknowÀdeviû", addr ); 265  drÝ ; 268 £rv” -> cÚfœm = `g_Ãw0 ( cÚfœm_d©a , 1); 269 £rv” -> cÚfœm -> io = `g_io_chªÃl_»f ( chª ); 270 `baýy (& £rv” -> cÚfœm -> d¡ , &dst); 272 »t = `btd_»que¡_authÜiz©iÚ (& ¤c , & d¡ , HID_UUID , 273 auth_ÿÎback , £rv” ); 274 ià( »t != 0) 277 `”rÜ ("šput:‡uthÜiz©iÚ fÜ deviû % çžed", addr ); 279 `g_io_chªÃl_uÄef ( £rv” -> cÚfœm -> io ); 280 `g_ä“ ( £rv” -> cÚfœm ); 281 £rv” -> cÚfœm = NULL ; 283 drÝ : 284 `šput_deviû_þo£_chªÃls (& ¤c , & d¡ ); 285 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 286 } } 288  $£rv”_¡¬t (cÚ¡ bdaddr_t * ¤c ) 290  šput_£rv” * £rv” ; 291 GE¼Ü * ”r = NULL ; 293 £rv” = `g_Ãw0 ( šput_£rv” , 1); 294 `baýy (& £rv” -> ¤c , src); 296 £rv” -> ù¾ = `bt_io_li¡’ ( cÚÃù_ev’t_cb , NULL , 297 £rv” , NULL , & ”r , 298 BT_IO_OPT_SOURCE_BDADDR , ¤c , 299 BT_IO_OPT_PSM , L2CAP_PSM_HIDP_CTRL , 300 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 301 BT_IO_OPT_INVALID ); 302 ià(! £rv” -> ù¾ ) { 303 `”rÜ ("Failedo†isten on control channel"); 304 `g_”rÜ_ä“ ( ”r ); 305 `g_ä“ ( £rv” ); 309 £rv” -> šŒ = `bt_io_li¡’ ( NULL , cÚfœm_ev’t_cb , 310 £rv” , NULL , & ”r , 311 BT_IO_OPT_SOURCE_BDADDR , ¤c , 312 BT_IO_OPT_PSM , L2CAP_PSM_HIDP_INTR , 313 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 314 BT_IO_OPT_INVALID ); 315 ià(! £rv” -> šŒ ) { 316 `”rÜ ("Failedo†isten on interrupt channel"); 317 `g_io_chªÃl_uÄef ( £rv” -> ù¾ ); 318 `g_”rÜ_ä“ ( ”r ); 319 `g_ä“ ( £rv” ); 323 £rv”s = `g_¦i¡_­³nd (£rv”s, £rv” ); 326 } } 328  $£rv”_¡Ý (cÚ¡ bdaddr_t * ¤c ) 330  šput_£rv” * £rv” ; 331 GSLi¡ * l ; 333 l = `g_¦i¡_fšd_cu¡om ( £rv”s , ¤c , £rv”_cmp ); 334 ià(! l ) 337 £rv” = l -> d©a ; 339 `g_io_chªÃl_shutdown ( £rv” -> šŒ , TRUE , NULL ); 340 `g_io_chªÃl_uÄef ( £rv” -> šŒ ); 342 `g_io_chªÃl_shutdown ( £rv” -> ù¾ , TRUE , NULL ); 343 `g_io_chªÃl_uÄef ( £rv” -> ù¾ ); 345 £rv”s = `g_¦i¡_»move (£rv”s, £rv” ); 346 `g_ä“ ( £rv” ); 347 } } @profiles/input/server.h 24  £rv”_¡¬t (cÚ¡ bdaddr_t * ¤c ); 25  £rv”_¡Ý (cÚ¡ bdaddr_t * ¤c ); @profiles/input/suspend-dummy.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<”ºo.h > 30  ~<¡dlib.h > 31  ~<¡dio.h > 32  ~<¡ršg.h > 33  ~ 34  ~ 35  ~ 36  ~ 38  ~ 40  ~"¤c/log.h " 41  ~"su¥’d.h " 43  #HOG_SUSPEND_FIFO "/tmp/hogsu¥’d" ) 45  su¥’d_ev’t gsu¥’d_cb = NULL ; 46  »sume_ev’t g»sume_cb = NULL ; 47  gušt gw©ch = 0; 49  fifo_Ý’ (); 51  gboÞ—n $»ad_fifo ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , gpoš‹r u£r_d©a ) 53  bufãr [12]; 54 gsize off£t , Ëá , b»ad ; 55 GIOStus io¡©us ; 57 ià( cÚd & ( G_IO_ERR | G_IO_HUP )) { 63 `fifo_Ý’ (); 64  FALSE ; 67 off£t = 0; 68 Ëá = ( bufãr ) - 1; 69 `mem£t ( bufãr , 0, (buffer)); 72 io¡©us = `g_io_chªÃl_»ad_ch¬s ( io , & bufãr [ off£t ], Ëá , 73 & b»ad , NULL ); 75 off£t +ð b»ad ; 76 Ëá -ð b»ad ; 77 ià( Ëá == 0) 79 }  io¡©us =ð G_IO_STATUS_NORMAL ); 81 ià( `g_ascii_¡ºÿ£cmp ("su¥’d", bufãr , 7) == 0) 82 `su¥’d_cb (); 83 ià( `g_ascii_¡ºÿ£cmp ("»sume", bufãr , 6) == 0) 84 `»sume_cb (); 86  TRUE ; 87 } } 89  $fifo_Ý’ () 91 GIOCÚd™iÚ cÚd™iÚ = G_IO_IN | G_IO_ERR | G_IO_HUP ; 92 GIOChªÃl * fifoio ; 93  fd ; 95 fd = `Ý’ ( HOG_SUSPEND_FIFO , O_RDONLY | O_NONBLOCK ); 96 ià( fd < 0) { 97  ”r = - ”ºo ; 98 `”rÜ ("Cª'ˆÝ’ FIFO (%s): %s(%d)", HOG_SUSPEND_FIFO , 99 `¡»¼Ü (- ”r ), -err); 100  ”r ; 103 fifoio = `g_io_chªÃl_unix_Ãw ( fd ); 104 `g_io_chªÃl_£t_þo£_Ú_uÄef ( fifoio , TRUE ); 106 w©ch = `g_io_add_w©ch ( fifoio , cÚd™iÚ , »ad_fifo , NULL ); 108 `g_io_chªÃl_uÄef ( fifoio ); 111 } } 113  $su¥’d_š™ ( su¥’d_ev’t su¥’d , »sume_ev’t »sume ) 115  ¡© ¡ ; 116  »t ; 118 `DBG (""); 120 su¥’d_cb = su¥’d ; 121 »sume_cb = »sume ; 123 ià( `¡© ( HOG_SUSPEND_FIFO , & ¡ ) == 0) { 124 ià(! `S_ISFIFO ( ¡ . ¡_mode )) { 125 `”rÜ ("UÃx³ùed‚Ú-FIFO % fže", HOG_SUSPEND_FIFO ); 126  - EIO ; 129 ià( `uÆšk ( HOG_SUSPEND_FIFO ) < 0) { 130  ”r = - ”ºo ; 131 `”rÜ ("Failedo„emove FIFO (%s): %s (%d)", 132 HOG_SUSPEND_FIFO , `¡»¼Ü (- ”r ), -err); 133  ”r ; 137 ià( `mkfifo ( HOG_SUSPEND_FIFO , S_IRUSR | S_IWUSR ) < 0) { 138  ”r = - ”ºo ; 140 `”rÜ ("Cª'ˆü—‹ FIFO (%s): % (%d)", HOG_SUSPEND_FIFO , 141 `¡»¼Ü (- ”r ), -err); 142  ”r ; 145 `DBG ("C»©ed su¥’d-dummy FIFO oÀ%s", HOG_SUSPEND_FIFO ); 147 »t = `fifo_Ý’ (); 148 ià( »t < 0) 149 `uÆšk ( HOG_SUSPEND_FIFO ); 151  »t ; 152 } } 154  $su¥’d_ex™ () 156 ià( w©ch > 0) { 157 `g_sourû_»move ( w©ch ); 158 w©ch = 0; 161 `uÆšk ( HOG_SUSPEND_FIFO ); 162 } } @profiles/input/suspend.h 25 (* tsu¥’d_ev’t ) (); 26 (* t»sume_ev’t ) (); 28  `su¥’d_š™ ( su¥’d_ev’t su¥’d , »sume_ev’t »sume ); 29  `su¥’d_ex™ (); @profiles/input/uhid_copy.h 1 #iâdeà __UHID_H_ 2  #__UHID_H_ ) 22  ~ 23  ~ 24  ~ 26 euhid_ev’t_ty³ { 27 m__UHID_LEGACY_CREATE , 28 mUHID_DESTROY , 29 mUHID_START , 30 mUHID_STOP , 31 mUHID_OPEN , 32 mUHID_CLOSE , 33 mUHID_OUTPUT , 34 m__UHID_LEGACY_OUTPUT_EV , 35 m__UHID_LEGACY_INPUT , 36 mUHID_GET_REPORT , 37 mUHID_GET_REPORT_REPLY , 38 mUHID_CREATE2 , 39 mUHID_INPUT2 , 40 mUHID_SET_REPORT , 41 mUHID_SET_REPORT_REPLY , 44  suhid_ü—‹2_»q { 45 __u8 mÇme [128]; 46 __u8 mphys [64]; 47 __u8 muniq [64]; 48 __u16 mrd_size ; 49 __u16 mbus ; 50 __u32 mv’dÜ ; 51 __u32 m´oduù ; 52 __u32 mv”siÚ ; 53 __u32 mcouÁry ; 54 __u8 mrd_d©a [ HID_MAX_DESCRIPTOR_SIZE ]; 55 } __©Œibu‹__ (( __·cked__ )); 57 euhid_dev_æag { 58 mUHID_DEV_NUMBERED_FEATURE_REPORTS = (1ULL << 0), 59 mUHID_DEV_NUMBERED_OUTPUT_REPORTS = (1ULL << 1), 60 mUHID_DEV_NUMBERED_INPUT_REPORTS = (1ULL << 2), 63  suhid_¡¬t_»q { 64 __u64 mdev_æags ; 67  #UHID_DATA_MAX 4096 ) 69 euhid_»pÜt_ty³ { 70 mUHID_FEATURE_REPORT , 71 mUHID_OUTPUT_REPORT , 72 mUHID_INPUT_REPORT , 75  suhid_šput2_»q { 76 __u16 msize ; 77 __u8 md©a [ UHID_DATA_MAX ]; 78 } __©Œibu‹__ (( __·cked__ )); 80  suhid_ouut_»q { 81 __u8 md©a [ UHID_DATA_MAX ]; 82 __u16 msize ; 83 __u8 m¹y³ ; 84 } __©Œibu‹__ (( __·cked__ )); 86  suhid_g‘_»pÜt_»q { 87 __u32 mid ; 88 __u8 mºum ; 89 __u8 m¹y³ ; 90 } __©Œibu‹__ (( __·cked__ )); 92  suhid_g‘_»pÜt_»¶y_»q { 93 __u32 mid ; 94 __u16 m”r ; 95 __u16 msize ; 96 __u8 md©a [ UHID_DATA_MAX ]; 97 } __©Œibu‹__ (( __·cked__ )); 99  suhid_£t_»pÜt_»q { 100 __u32 mid ; 101 __u8 mºum ; 102 __u8 m¹y³ ; 103 __u16 msize ; 104 __u8 md©a [ UHID_DATA_MAX ]; 105 } __©Œibu‹__ (( __·cked__ )); 107  suhid_£t_»pÜt_»¶y_»q { 108 __u32 mid ; 109 __u16 m”r ; 110 } __©Œibu‹__ (( __·cked__ )); 119 euhid_Ëgacy_ev’t_ty³ { 120 mUHID_CREATE = __UHID_LEGACY_CREATE , 121 mUHID_OUTPUT_EV = __UHID_LEGACY_OUTPUT_EV , 122 mUHID_INPUT = __UHID_LEGACY_INPUT , 123 mUHID_FEATURE = UHID_GET_REPORT , 124 mUHID_FEATURE_ANSWER = UHID_GET_REPORT_REPLY , 128  suhid_ü—‹_»q { 129 __u8 mÇme [128]; 130 __u8 mphys [64]; 131 __u8 muniq [64]; 132 __u8 * mrd_d©a ; 133 __u16 mrd_size ; 135 __u16 mbus ; 136 __u32 mv’dÜ ; 137 __u32 m´oduù ; 138 __u32 mv”siÚ ; 139 __u32 mcouÁry ; 140 } __©Œibu‹__ (( __·cked__ )); 143  suhid_šput_»q { 144 __u8 md©a [ UHID_DATA_MAX ]; 145 __u16 msize ; 146 } __©Œibu‹__ (( __·cked__ )); 149  suhid_ouut_ev_»q { 150 __u16 mty³ ; 151 __u16 mcode ; 152 __s32 mv®ue ; 153 } __©Œibu‹__ (( __·cked__ )); 156  suhid_ã©u»_»q { 157 __u32 mid ; 158 __u8 mºum ; 159 __u8 m¹y³ ; 160 } __©Œibu‹__ (( __·cked__ )); 163  suhid_ã©u»_ªsw”_»q { 164 __u32 mid ; 165 __u16 m”r ; 166 __u16 msize ; 167 __u8 md©a [ UHID_DATA_MAX ]; 168 } __©Œibu‹__ (( __·cked__ )); 179  suhid_ev’t { 180 __u32 mty³ ; 183  uhid_ü—‹_»q mü—‹ ; 184  uhid_šput_»q mšput ; 185  uhid_ouut_»q mouut ; 186  uhid_ouut_ev_»q mouut_ev ; 187  uhid_ã©u»_»q mã©u» ; 188  uhid_g‘_»pÜt_»q mg‘_»pÜt ; 189  uhid_ã©u»_ªsw”_»q mã©u»_ªsw” ; 190  uhid_g‘_»pÜt_»¶y_»q mg‘_»pÜt_»¶y ; 191  uhid_ü—‹2_»q mü—‹2 ; 192  uhid_šput2_»q mšput2 ; 193  uhid_£t_»pÜt_»q m£t_»pÜt ; 194  uhid_£t_»pÜt_»¶y_»q m£t_»pÜt_»¶y ; 195  uhid_¡¬t_»q m¡¬t ; 196 } mu ; 197 } __©Œibu‹__ (( __·cked__ )); @profiles/network/bnep.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~ 33  ~ 34  ~ 35  ~ 36  ~<Ãt/if.h > 37  ~ 39  ~ 40  ~ 41  ~ 43  ~ 45  ~"¤c/log.h " 46  ~"¤c/sh¬ed/utž.h " 47  ~"lib/uuid.h " 48  ~"btio/btio.h " 50  ~"bÃp.h " 52  #CON_SETUP_RETRIES 3 ) 53  #CON_SETUP_TO 9 ) 55  gùl ; 57 #ifdeà __TIZEN_PATCH__ 59  #OLD_BNEPCONADD 1 ) 60  #OLD_BNEPCONDEL 2 ) 61  #OLD_BNEPGETCONLIST 3 ) 62  #OLD_BNEPGETCONINFO 4 ) 64  gbÃpcÚÇdd ; 65  gbÃpcÚnd– ; 66  gbÃpg‘cÚÆi¡ ; 67  gbÃpg‘cÚnšfo ; 71 cÚ¡ * mÇme ; 72 cÚ¡ * muuid128 ; 73 ušt16_t mid ; 74 } g__svc [] = { 75 { "·nu", PANU_UUID , BNEP_SVC_PANU }, 76 { "gn", GN_UUID , BNEP_SVC_GN }, 77 { "Çp", NAP_UUID , BNEP_SVC_NAP }, 78 { NULL } 81  s__£rviû_16 { 82 ušt16_t md¡ ; 83 ušt16_t m¤c ; 84 } __©Œibu‹__ (( ·cked )); 86  sbÃp { 87 GIOChªÃl * mio ; 88 ušt16_t m¤c ; 89 ušt16_t md¡ ; 90 bdaddr_t md¡_addr ; 91  miçû [16]; 92 gušt m©‹m±s ; 93 gušt m£tup_to ; 94 gušt mw©ch ; 95 bÃp_cÚÃù_cb mcÚn_cb ; 96 * mcÚn_d©a ; 97 bÃp_discÚÃù_cb mdiscÚn_cb ; 98 * mdiscÚn_d©a ; 101 ušt16_t $bÃp_£rviû_id (cÚ¡ * svc ) 103  i ; 104 ušt16_t id ; 107  i = 0; __svc [i]. Çme ; i++) { 108 ià(! `¡rÿ£cmp ( svc , __svc [ i ]. Çme )) 109  __svc [ i ]. id ; 113  i = 0; __svc [i]. uuid128 ; i++) { 114 ià(! `¡rÿ£cmp ( svc , __svc [ i ]. uuid128 )) 115  __svc [ i ]. id ; 119 id = `¡¹Þ ( svc , NULL , 16); 120 ià(( id < BNEP_SVC_PANU è|| (id > BNEP_SVC_GN )) 123  id ; 124 } } 126 cÚ¡ * $bÃp_uuid ( ušt16_t id ) 128  i ; 130  i = 0; __svc [i]. uuid128 ; i++) 131 ià( __svc [ i ]. id == id) 132  __svc [ i ]. uuid128 ; 133  NULL ; 134 } } 136 cÚ¡ * $bÃp_Çme ( ušt16_t id ) 138  i ; 140  i = 0; __svc [i]. Çme ; i++) 141 ià( __svc [ i ]. id == id) 142  __svc [ i ]. Çme ; 143  NULL ; 144 } } 146  $bÃp_š™ () 148 ùl = `sock‘ ( PF_BLUETOOTH , SOCK_RAW , BTPROTO_BNEP ); 149 ià( ùl < 0) { 150  ”r = - ”ºo ; 152 ià( ”r =ð- EPROTONOSUPPORT ) 153 `w¬n ("kernel†acks bnep-protocol support"); 155 `”rÜ ("bnep: Failedo open control socket: %s (%d)", 156 `¡»¼Ü (- ”r ), -err); 158  ”r ; 160 #ifdeà __TIZEN_PATCH__ 163  bÃp_cÚÆi¡_»q »q ; 164  bÃp_cÚnšfo ci [1]; 166 »q . úum = 1; 167 »q . ci = ci; 169 ià(! `ioùl ( ùl , BNEPGETCONNLIST , & »q )) { 171 bÃpcÚÇdd = BNEPCONNADD ; 172 bÃpcÚnd– = BNEPCONNDEL ; 173 bÃpg‘cÚÆi¡ = BNEPGETCONNLIST ; 174 bÃpg‘cÚnšfo = BNEPGETCONNINFO ; 177 bÃpcÚÇdd = OLD_BNEPCONADD ; 178 bÃpcÚnd– = OLD_BNEPCONDEL ; 179 bÃpg‘cÚÆi¡ = OLD_BNEPGETCONLIST ; 180 bÃpg‘cÚnšfo = OLD_BNEPGETCONINFO ; 185 } } 187  $bÃp_þ—nup () 189 `þo£ ( ùl ); 191 } } 193  $bÃp_cÚnd– (cÚ¡ bdaddr_t * d¡ ) 195  bÃp_cÚnd–_»q »q ; 197 `mem£t (& »q , 0, (req)); 198 `basw­ (( bdaddr_t *)& »q . d¡ , dst); 199 »q . æags = 0; 200 ià( `ioùl ( ùl , BNEPCONNDEL , & »q ) < 0) { 201  ”r = - ”ºo ; 202 `”rÜ ("bnep: Failedo kill connection: %s (%d)", 203 `¡»¼Ü (- ”r ), -err); 204  ”r ; 207 } } 209  $bÃp_cÚÇdd ( sk , ušt16_t rÞe , * dev ) 211  bÃp_cÚÇdd_»q »q ; 213 `mem£t (& »q , 0, (req)); 214 `¡ºýy ( »q . deviû , dev , 16); 215 »q . deviû [15] = '\0'; 217 »q . sock = sk ; 218 »q . rÞe =„ole; 219 ià( `ioùl ( ùl , BNEPCONNADD , & »q ) < 0) { 220  ”r = - ”ºo ; 221 `”rÜ ("bnep: Failedo‡dd device %s: %s(%d)", 222 dev , `¡»¼Ü (- ”r ), -err); 223  ”r ; 226 `¡ºýy ( dev , »q . deviû , 16); 228 } } 230  $bÃp_if_up (cÚ¡ * devÇme ) 232  iäeq iä ; 233  sk , ”r = 0; 235 sk = `sock‘ ( AF_INET , SOCK_DGRAM , 0); 237 `mem£t (& iä , 0, (ifr)); 238 `¡ºýy ( iä . iä_Çme , devÇme , IF_NAMESIZE - 1); 240 iä . iä_æags |ð IFF_UP ; 241 iä . iä_æags |ð IFF_MULTICAST ; 243 ià( `ioùl ( sk , SIOCSIFFLAGS , (*è& iä ) < 0) { 244 ”r = - ”ºo ; 245 `”rÜ ("bnep: Could‚ot bring up %s: %s(%d)", 246 devÇme , `¡»¼Ü (- ”r ), -err); 249 `þo£ ( sk ); 251  ”r ; 252 } } 254  $bÃp_if_down (cÚ¡ * devÇme ) 256  iäeq iä ; 257  sk , ”r = 0; 259 sk = `sock‘ ( AF_INET , SOCK_DGRAM , 0); 261 #ifdeà __TIZEN_PATCH__ 262 ià( sk < 0) 266 `mem£t (& iä , 0, (ifr)); 267 `¡ºýy ( iä . iä_Çme , devÇme , IF_NAMESIZE - 1); 269 iä . iä_æags &ð~ IFF_UP ; 272 ià( `ioùl ( sk , SIOCSIFFLAGS , (*è& iä ) < 0) { 273 ”r = - ”ºo ; 274 `”rÜ ("bnep: Could‚ot bring down %s: %s(%d)", 275 devÇme , `¡»¼Ü (- ”r ), -err); 278 `þo£ ( sk ); 280  ”r ; 281 } } 283  gboÞ—n $bÃp_w©chdog_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 284 gpoš‹r d©a ) 286  bÃp * £ssiÚ = d©a ; 288 ià( £ssiÚ -> discÚn_cb ) 289 £ssiÚ -> `discÚn_cb (£ssiÚ-> discÚn_d©a ); 291  FALSE ; 292 } } 294  gboÞ—n $bÃp_£tup_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 295 gpoš‹r d©a ) 297  bÃp * £ssiÚ = d©a ; 298  bÃp_cÚŒÞ_r¥ * r¥ ; 299  timev® timeo ; 300  pkt [ BNEP_MTU ]; 301 ssize_t r ; 302  sk ; 304 ià( cÚd & G_IO_NVAL ) 305  FALSE ; 307 ià( £ssiÚ -> £tup_to > 0) { 308 `g_sourû_»move ( £ssiÚ -> £tup_to ); 309 £ssiÚ -> £tup_to = 0; 312 ià( cÚd & ( G_IO_HUP | G_IO_ERR )) { 313 `”rÜ ("bnep: Hangup orƒrror on†2cap server socket"); 314  çžed ; 317 sk = `g_io_chªÃl_unix_g‘_fd ( chª ); 318 `mem£t ( pkt , 0, BNEP_MTU ); 319 r = `»ad ( sk , pkt , (pkt) - 1); 320 ià( r < 0) { 321 `”rÜ ("bnep: IO Channel„eadƒrror"); 322  çžed ; 325 ià( r == 0) { 326 `”rÜ ("bnep: No…acket„eceived on†2cap socket"); 327  çžed ; 330 ”ºo = EPROTO ; 332 ià(( size_t è r < (* r¥ )) { 333 `”rÜ ("bnep: Packet„eceived is‚ot bnepype"); 334  çžed ; 337 r¥ = (*è pkt ; 338 ià( r¥ -> ty³ !ð BNEP_CONTROL ) { 339 `”rÜ ("bnep: Packet„eceived is‚ot bnepype"); 340  çžed ; 343 ià( r¥ -> ù¾ !ð BNEP_SETUP_CONN_RSP ) 344  TRUE ; 346 r = `Áohs ( r¥ -> »¥ ); 347 ià( r !ð BNEP_SUCCESS ) { 348 `”rÜ ("bnep: failed"); 349  çžed ; 352 `mem£t (& timeo , 0, (timeo)); 353 timeo . tv_£c = 0; 354 `£tsockÝt ( sk , SOL_SOCKET , SO_RCVTIMEO , & timeo , (timeo)); 356 sk = `g_io_chªÃl_unix_g‘_fd ( £ssiÚ -> io ); 357 ià( `bÃp_cÚÇdd ( sk , £ssiÚ -> ¤c , sessiÚ-> içû ) < 0) 358  çžed ; 360 ià( `bÃp_if_up ( £ssiÚ -> içû ) < 0) { 361 `bÃp_cÚnd– (& £ssiÚ -> d¡_addr ); 362  çžed ; 365 £ssiÚ -> w©ch = `g_io_add_w©ch (£ssiÚ-> io , 366 G_IO_ERR | G_IO_HUP | G_IO_NVAL , 367 ( GIOFunc è bÃp_w©chdog_cb , £ssiÚ ); 368 `g_io_chªÃl_uÄef ( £ssiÚ -> io ); 369 £ssiÚ -> io = NULL ; 371 £ssiÚ -> `cÚn_cb (£ssiÚ-> içû , 0, sessiÚ-> cÚn_d©a ); 373  FALSE ; 375 çžed : 376 £ssiÚ -> `cÚn_cb ( NULL , - EIO , sessiÚ-> cÚn_d©a ); 378  FALSE ; 379 } } 381  $bÃp_£tup_cÚn_»q ( bÃp * £ssiÚ ) 383  bÃp_£tup_cÚn_»q * »q ; 384  __£rviû_16 * s ; 385  pkt [ BNEP_MTU ]; 386  fd ; 389 »q = (*è pkt ; 390 »q -> ty³ = BNEP_CONTROL ; 391 »q -> ù¾ = BNEP_SETUP_CONN_REQ ; 392 »q -> uuid_size = 2; 393 s = (*è »q -> £rviû ; 394 s -> ¤c = `htÚs ( £ssiÚ ->src); 395 s -> d¡ = `htÚs ( £ssiÚ ->dst); 397 fd = `g_io_chªÃl_unix_g‘_fd ( £ssiÚ -> io ); 398 ià( `wr™e ( fd , pkt , (* »q è+ (* s )) < 0) { 399 `”rÜ ("bÃp: cÚÃùiÚ„eq s’d fažed: %s", `¡»¼Ü ( ”ºo )); 400  - ”ºo ; 403 £ssiÚ -> ©‹m±s ++; 406 } } 408  gboÞ—n $bÃp_cÚn_»q_to ( gpoš‹r u£r_d©a ) 410  bÃp * £ssiÚ = u£r_d©a ; 412 ià( £ssiÚ -> ©‹m±s =ð CON_SETUP_RETRIES ) { 413 `”rÜ ("bnep: Too many bnep connection‡ttempts"); 415 `”rÜ ("bnep: connection setup TO,„etrying..."); 416 ià( `bÃp_£tup_cÚn_»q ( £ssiÚ ) == 0) 417  TRUE ; 420 £ssiÚ -> `cÚn_cb ( NULL , - ETIMEDOUT , sessiÚ-> cÚn_d©a ); 422  FALSE ; 423 } } 425  bÃp * $bÃp_Ãw ( sk , ušt16_t loÿl_rÞe , ušt16_ˆ »mÙe_rÞe , 426 * içû ) 428  bÃp * £ssiÚ ; 429  dup_fd ; 431 dup_fd = `dup ( sk ); 432 ià( dup_fd < 0) 433  NULL ; 435 £ssiÚ = `g_Ãw0 ( bÃp , 1); 436 £ssiÚ -> io = `g_io_chªÃl_unix_Ãw ( dup_fd ); 437 £ssiÚ -> ¤c = loÿl_rÞe ; 438 £ssiÚ -> d¡ = »mÙe_rÞe ; 439 `¡ºýy ( £ssiÚ -> içû , iface, 16); 440 £ssiÚ -> içû [15] = '\0'; 442 `g_io_chªÃl_£t_þo£_Ú_uÄef ( £ssiÚ -> io , TRUE ); 443 £ssiÚ -> w©ch = `g_io_add_w©ch (£ssiÚ-> io , 444 G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL , 445 ( GIOFunc è bÃp_£tup_cb , £ssiÚ ); 447  £ssiÚ ; 448 } } 450  $bÃp_ä“ ( bÃp * £ssiÚ ) 452 ià(! £ssiÚ ) 455 ià( £ssiÚ -> io ) { 456 `g_io_chªÃl_shutdown ( £ssiÚ -> io , FALSE , NULL ); 457 `g_io_chªÃl_uÄef ( £ssiÚ -> io ); 458 £ssiÚ -> io = NULL ; 461 ià( £ssiÚ -> w©ch > 0) { 462 `g_sourû_»move ( £ssiÚ -> w©ch ); 463 £ssiÚ -> w©ch = 0; 466 `g_ä“ ( £ssiÚ ); 467 } } 469  $bÃp_cÚÃù ( bÃp * £ssiÚ , bÃp_cÚÃù_cb cÚn_cb , * d©a ) 471 GE¼Ü * g”r = NULL ; 472  ”r ; 474 ià(! £ssiÚ || ! cÚn_cb ) 475  - EINVAL ; 477 £ssiÚ -> ©‹m±s = 0; 478 £ssiÚ -> cÚn_cb = conn_cb; 479 £ssiÚ -> cÚn_d©a = d©a ; 481 `bt_io_g‘ ( £ssiÚ -> io , & g”r , BT_IO_OPT_DEST_BDADDR , &£ssiÚ-> d¡_addr , 482 BT_IO_OPT_INVALID ); 483 ià( g”r ) { 484 `”rÜ ("bÃp: cÚÃù fažed: %s", g”r -> mes§ge ); 485 `g_”rÜ_ä“ ( g”r ); 486  - EINVAL ; 489 ”r = `bÃp_£tup_cÚn_»q ( £ssiÚ ); 490 ià( ”r < 0) 491  ”r ; 493 £ssiÚ -> £tup_to = `g_timeout_add_£cÚds ( CON_SETUP_TO , 494 bÃp_cÚn_»q_to , £ssiÚ ); 496 } } 498  $bÃp_discÚÃù ( bÃp * £ssiÚ ) 500 ià(! £ssiÚ ) 503 #iâdeà __TIZEN_PATCH__ 504 ià( £ssiÚ -> w©ch > 0) { 505 `g_sourû_»move ( £ssiÚ -> w©ch ); 506 £ssiÚ -> w©ch = 0; 509 ià( £ssiÚ -> io ) { 510 `g_io_chªÃl_uÄef ( £ssiÚ -> io ); 511 £ssiÚ -> io = NULL ; 514 `bÃp_if_down ( £ssiÚ -> içû ); 515 `bÃp_cÚnd– (& £ssiÚ -> d¡_addr ); 516 } } 518  $bÃp_£t_discÚÃù ( bÃp * £ssiÚ , bÃp_discÚÃù_cb discÚn_cb , 519 * d©a ) 521 ià(! £ssiÚ || ! discÚn_cb ) 524 ià(! £ssiÚ -> discÚn_cb && !£ssiÚ-> discÚn_d©a ) { 525 £ssiÚ -> discÚn_cb = disconn_cb; 526 £ssiÚ -> discÚn_d©a = d©a ; 528 } } 530 #iâdeà __TIZEN_PATCH__ 531  $bÃp_add_to_bridge (cÚ¡ * devÇme , cÚ¡ * bridge ) 533  ifšdex ; 534  iäeq iä ; 535  sk , ”r = 0; 537 ià(! devÇme || ! bridge ) 538  - EINVAL ; 540 ifšdex = `if_Çm‘ošdex ( devÇme ); 542 sk = `sock‘ ( AF_INET , SOCK_STREAM , 0); 543 ià( sk < 0) 545 #ifdeà __TIZEN_PATCH__ 546 ”r = `ioùl ( sk , SIOCBRADDBR , bridge ); 547 ià( ”r < 0) 549 `šfo ("bridgü—‹ƒ¼: %d", ”r ); 550 `þo£ ( sk ); 551  - ”ºo ; 554 `mem£t (& iä , 0, (ifr)); 555 `¡ºýy ( iä . iä_Çme , bridge , IFNAMSIZ - 1); 556 iä . iä_ifšdex = ifšdex ; 558 ià( `ioùl ( sk , SIOCBRADDIF , & iä ) < 0) { 559 ”r = - ”ºo ; 560 `”rÜ ("bnep: Can't‡dd %sohe bridge %s: %s(%d)", 561 devÇme , bridge , `¡»¼Ü (- ”r ), -err); 563 `šfo ("bridg%s: iÁ”çû % added", bridge , devÇme ); 565 `þo£ ( sk ); 567  ”r ; 568 } } 571  $bÃp_d–_äom_bridge (cÚ¡ * devÇme , cÚ¡ * bridge ) 573  ifšdex ; 574  iäeq iä ; 575  sk , ”r = 0; 577 ià(! devÇme || ! bridge ) 578  - EINVAL ; 580 ifšdex = `if_Çm‘ošdex ( devÇme ); 582 sk = `sock‘ ( AF_INET , SOCK_STREAM , 0); 583 ià( sk < 0) 586 `mem£t (& iä , 0, (ifr)); 587 `¡ºýy ( iä . iä_Çme , bridge , IFNAMSIZ - 1); 588 iä . iä_ifšdex = ifšdex ; 590 ià( `ioùl ( sk , SIOCBRDELIF , & iä ) < 0) { 591 ”r = - ”ºo ; 592 `”rÜ ("bnep: Can't delete %s fromhe bridge %s: %s(%d)", 593 devÇme , bridge , `¡»¼Ü (- ”r ), -err); 595 `šfo ("bridg%s: iÁ”çû % »moved", bridge , devÇme ); 597 `þo£ ( sk ); 599  ”r ; 600 } } 602  $bÃp_£rv”_add ( sk , ušt16_t d¡ , * bridge , * içû , 603 cÚ¡ bdaddr_t * addr ) 605  ”r ; 607 ià(! bridge || ! içû || ! addr ) 608  - EINVAL ; 610 ”r = `bÃp_cÚÇdd ( sk , d¡ , içû ); 611 ià( ”r < 0) 612  ”r ; 614 #iâdeà __TIZEN_PATCH__ 615 ”r = `bÃp_add_to_bridge ( içû , bridge ); 616 ià( ”r < 0) { 617 `bÃp_cÚnd– ( addr ); 618  ”r ; 622  `bÃp_if_up ( içû ); 623 } } 625  $bÃp_£rv”_d–‘e (* bridge , * içû , cÚ¡ bdaddr_t * addr ) 627 ià(! bridge || ! içû || ! addr ) 630 `bÃp_d–_äom_bridge ( içû , bridge ); 631 `bÃp_if_down ( içû ); 632 `bÃp_cÚnd– ( addr ); 633 } } 635 ssize_t $bÃp_£nd_ù¾_r¥ ( sk , ušt8_t ty³ , ušt8_ˆ ù¾ , ušt16_t »¥ ) 637  bÃp_cÚŒÞ_r¥ r¥ ; 639 r¥ . ty³ =ype; 640 r¥ . ù¾ = ctrl; 641 r¥ . »¥ = `htÚs (resp); 643  `£nd ( sk , & r¥ , (rsp), 0); 644 } } 646 ušt16_t $bÃp_£tup_chk ( ušt16_t d¡ , ušt16_ˆ ¤c ) 649  d¡ ) { 650  BNEP_SVC_NAP : 651  BNEP_SVC_GN : 652 ià( ¤c =ð BNEP_SVC_PANU ) 654  BNEP_CONN_INVALID_SRC ; 655  BNEP_SVC_PANU : 656 ià( ¤c =ð BNEP_SVC_PANU || srø=ð BNEP_SVC_GN || 657 ¤c =ð BNEP_SVC_NAP ) 660  BNEP_CONN_INVALID_SRC ; 663  BNEP_CONN_INVALID_DST ; 664 } } 666 ušt16_t $bÃp_£tup_decode ( bÃp_£tup_cÚn_»q * »q , ušt16_t * d¡ , 667 ušt16_t * ¤c ) 669 cÚ¡ ušt8_t bt_ba£ [] = { 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 671 ušt8_t * de¡ , * sourû ; 672 ušt32_t v® ; 674 de¡ = »q -> £rviû ; 675 sourû = »q -> £rviû +„eq-> uuid_size ; 677  »q -> uuid_size ) { 679 * d¡ = `g‘_be16 ( de¡ ); 680 * ¤c = `g‘_be16 ( sourû ); 686 ià( `memcmp (& de¡ [4], bt_ba£ , (bt_base)) != 0) 687  BNEP_CONN_INVALID_DST ; 688 ià( `memcmp (& sourû [4], bt_ba£ , (bt_base)) != 0) 689  BNEP_CONN_INVALID_SRC ; 694 v® = `g‘_be32 ( de¡ ); 695 ià( v® > 0xffff) 696  BNEP_CONN_INVALID_DST ; 698 * d¡ = v® ; 700 v® = `g‘_be32 ( sourû ); 701 ià( v® > 0xffff) 702  BNEP_CONN_INVALID_SRC ; 704 * ¤c = v® ; 707  BNEP_CONN_INVALID_SVC ; 710  BNEP_SUCCESS ; 711 } } 713 #ifdeà __TIZEN_PATCH__ 714  $bÃp_if_down_w¿µ” (cÚ¡ * devÇme ) 716 `bÃp_if_down ( devÇme ); 718 } } 720  $bÃp_cÚnd–_w¿µ” (cÚ¡ bdaddr_t * d¡ ) 722 `bÃp_cÚnd– ( d¡ ); 724 } } @profiles/network/bnep.h 24  gbÃp ; 26  bÃp_š™ (); 27  bÃp_þ—nup (); 29 ušt16_t bÃp_£rviû_id (cÚ¡ * svc ); 30 cÚ¡ * bÃp_uuid ( ušt16_t id ); 31 cÚ¡ * bÃp_Çme ( ušt16_t id ); 33  bÃp * bÃp_Ãw ( sk , ušt16_t loÿl_rÞe , ušt16_ˆ »mÙe_rÞe , 34 * içû ); 35  bÃp_ä“ ( bÃp * £ssiÚ ); 37 (* tbÃp_cÚÃù_cb è(* tiçû ,  t”r , * td©a ); 38  `bÃp_cÚÃù ( bÃp * b , bÃp_cÚÃù_cb cÚn_cb , * d©a ); 39 (* tbÃp_discÚÃù_cb è(* td©a ); 40  `bÃp_£t_discÚÃù ( bÃp * £ssiÚ , bÃp_discÚÃù_cb discÚn_cb , 41 * d©a ); 42  `bÃp_discÚÃù ( bÃp * £ssiÚ ); 44  `bÃp_£rv”_add ( sk , ušt16_t d¡ , * bridge , * içû , 45 cÚ¡ bdaddr_t * addr ); 46  `bÃp_£rv”_d–‘e (* bridge , * içû , cÚ¡ bdaddr_t * addr ); 48 ssize_t `bÃp_£nd_ù¾_r¥ ( sk , ušt8_t ty³ , ušt8_ˆ ù¾ , ušt16_t »¥ ); 49 ušt16_t `bÃp_£tup_chk (ušt16_ˆ d¡_rÞe , ušt16_ˆ ¤c_rÞe ); 50 ušt16_t `bÃp_£tup_decode ( bÃp_£tup_cÚn_»q * »q , ušt16_ˆ* d¡ , 51 ušt16_t * ¤c ); 52 #ifdeà __TIZEN_PATCH__ 53  `bÃp_if_down_w¿µ” (cÚ¡ * devÇme ); 54  `bÃp_cÚnd–_w¿µ” (cÚ¡ bdaddr_t * d¡ ); @profiles/network/connection.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡dboÞ.h > 30  ~<”ºo.h > 31  ~ 32  ~<Ãtš‘/š.h > 34  ~ 35  ~ 36  ~ 38  ~ 39  ~ 41  ~"btio/btio.h " 42  ~"¤c/log.h " 43  ~"¤c/dbus-commÚ.h " 44  ~"¤c/ad­‹r.h " 45  ~"¤c/deviû.h " 46  ~"¤c/´ofže.h " 47  ~"¤c/£rviû.h " 48  ~"¤c/”rÜ.h " 50  ~"bÃp.h " 51  ~"cÚÃùiÚ.h " 53  #NETWORK_PEER_INTERFACE "Üg.bluez.N‘wÜk1" ) 54  #BNEP_INTERFACE "bÃp%d" ) 57 mCONNECTED , 58 mCONNECTING , 59 mDISCONNECTED 60 } tcÚn_¡©e ; 62  sÃtwÜk_³” { 63  btd_deviû * mdeviû ; 64 GSLi¡ * mcÚÃùiÚs ; 67  sÃtwÜk_cÚn { 68  btd_£rviû * m£rviû ; 69  mdev [16]; 70 ušt16_t mid ; 71 cÚn_¡©e m¡©e ; 72 GIOChªÃl * mio ; 73 gušt mdc_id ; 74  ÃtwÜk_³” * m³” ; 75 DBusMes§ge * mcÚÃù ; 76  bÃp * m£ssiÚ ; 79  GSLi¡ * g³”s = NULL ; 81  ušt16_t $g‘_£rviû_id ( btd_£rviû * £rviû ) 83  `bÃp_£rviû_id ( `btd_£rviû_g‘_´ofže ( £rviû )-> »mÙe_uuid ); 84 } } 86  ÃtwÜk_³” * $fšd_³” ( GSLi¡ * li¡ ,  btd_deviû * deviû ) 88 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 89  ÃtwÜk_³” * ³” = li¡ -> d©a ; 91 ià( ³” -> deviû == device) 92  ³” ; 95  NULL ; 96 } } 98  ÃtwÜk_cÚn * $fšd_cÚÃùiÚ_by_¡©e ( GSLi¡ * li¡ , 99 cÚn_¡©e ¡©e ) 101 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 102  ÃtwÜk_cÚn * nc = li¡ -> d©a ; 104 ià( nc -> ¡©e == state) 105  nc ; 108  NULL ; 109 } } 111  $bÃp_discÚn_cb ( gpoš‹r d©a ) 113  ÃtwÜk_cÚn * nc = d©a ; 114 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 115 cÚ¡ * ·th = `deviû_g‘_·th ( nc -> ³” -> deviû ); 117 #iâdeà __TIZEN_PATCH__ 118 `g_dbus_em™_´Ý”ty_chªged ( cÚn , ·th , 119 NETWORK_PEER_INTERFACE , "Connected"); 120 `g_dbus_em™_´Ý”ty_chªged ( cÚn , ·th , 121 NETWORK_PEER_INTERFACE , "Interface"); 122 `g_dbus_em™_´Ý”ty_chªged ( cÚn , ·th , 123 NETWORK_PEER_INTERFACE , "UUID"); 125 `deviû_»move_discÚÃù_w©ch ( nc -> ³” -> deviû ,‚c-> dc_id ); 126 nc -> dc_id = 0; 128 `btd_£rviû_discÚÃùšg_com¶‘e ( nc -> £rviû , 0); 130 `šfo ("% discÚÃùed", nc -> dev ); 132 nc -> ¡©e = DISCONNECTED ; 133 #ifdeà __TIZEN_PATCH__ 134 `g_dbus_em™_´Ý”ty_chªged ( cÚn , ·th , 135 NETWORK_PEER_INTERFACE , "Connected"); 136 `g_dbus_em™_´Ý”ty_chªged ( cÚn , ·th , 137 NETWORK_PEER_INTERFACE , "Interface"); 138 `g_dbus_em™_´Ý”ty_chªged ( cÚn , ·th , 139 NETWORK_PEER_INTERFACE , "UUID"); 141 `mem£t ( nc -> dev , 0, (nc->dev)); 142 `¡ºýy ( nc -> dev , BNEP_INTERFACE , 16); 143 nc -> dev [15] = '\0'; 145 `bÃp_ä“ ( nc -> £ssiÚ ); 146 nc -> £ssiÚ = NULL ; 147 } } 149  $loÿl_cÚÃù_cb ( ÃtwÜk_cÚn * nc ,  ”r ) 151 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 152 cÚ¡ * pdev = nc -> dev ; 154 ià( ”r < 0) { 155 DBusMes§ge * »¶y = `btd_”rÜ_çžed ( nc -> cÚÃù , 156 `¡»¼Ü (- ”r )); 157 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 159 `g_dbus_£nd_»¶y ( cÚn , nc -> cÚÃù , DBUS_TYPE_STRING , & pdev , 160 DBUS_TYPE_INVALID ); 163 `dbus_mes§ge_uÄef ( nc -> cÚÃù ); 164 nc -> cÚÃù = NULL ; 165 } } 167  $ÿnûl_cÚÃùiÚ ( ÃtwÜk_cÚn * nc ,  ”r ) 169 `btd_£rviû_cÚÃùšg_com¶‘e ( nc -> £rviû , ”r ); 171 ià( nc -> cÚÃù ) 172 `loÿl_cÚÃù_cb ( nc , ”r ); 174 ià( nc -> io ) { 175 `g_io_chªÃl_shutdown ( nc -> io , FALSE , NULL ); 176 `g_io_chªÃl_uÄef ( nc -> io ); 177 nc -> io = NULL ; 180 ià( nc -> ¡©e =ð CONNECTED ) 181 `bÃp_discÚÃù ( nc -> £ssiÚ ); 183 #iâdeà __TIZEN_PATCH__ 184 `bÃp_ä“ ( nc -> £ssiÚ ); 185 nc -> £ssiÚ = NULL ; 187 nc -> ¡©e = DISCONNECTED ; 188 } } 190  $cÚÃùiÚ_de¡roy ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 192  ÃtwÜk_cÚn * nc = u£r_d©a ; 194 `ÿnûl_cÚÃùiÚ ( nc , - EIO ); 195 } } 197  $discÚÃù_cb ( btd_deviû * deviû , gboÞ—n »mov® , 198 * u£r_d©a ) 200  ÃtwÜk_cÚn * nc = u£r_d©a ; 202 `šfo ("N‘wÜk: discÚÃù %s", `deviû_g‘_·th ( nc -> ³” -> deviû )); 204 `cÚÃùiÚ_de¡roy ( NULL , u£r_d©a ); 205 } } 207  $bÃp_cÚn_cb (* içû ,  ”r , * d©a ) 209  ÃtwÜk_cÚn * nc = d©a ; 210 cÚ¡ * ·th ; 211 DBusCÚÃùiÚ * cÚn ; 213 `DBG (""); 215 ià( ”r < 0) { 216 `”rÜ ("cÚÃù fažed %s", `¡»¼Ü (- ”r )); 217  çžed ; 220 `šfo ("% cÚÃùed", nc -> dev ); 222 `memýy ( nc -> dev , içû , (nc->dev)); 223 `btd_£rviû_cÚÃùšg_com¶‘e ( nc -> £rviû , 0); 225 ià( nc -> cÚÃù ) 226 `loÿl_cÚÃù_cb ( nc , 0); 228 cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 229 ·th = `deviû_g‘_·th ( nc -> ³” -> deviû ); 231 #ifdeà __TIZEN_PATCH__ 232 nc -> ¡©e = CONNECTED ; 234 `g_dbus_em™_´Ý”ty_chªged ( cÚn , ·th , 235 NETWORK_PEER_INTERFACE , "Connected"); 236 `g_dbus_em™_´Ý”ty_chªged ( cÚn , ·th , 237 NETWORK_PEER_INTERFACE , "Interface"); 238 `g_dbus_em™_´Ý”ty_chªged ( cÚn , ·th , 239 NETWORK_PEER_INTERFACE , "UUID"); 241 #iâdeà __TIZEN_PATCH__ 242 nc -> ¡©e = CONNECTED ; 244 nc -> dc_id = `deviû_add_discÚÃù_w©ch Òc-> ³” -> deviû , discÚÃù_cb , 245 nc , NULL ); 249 çžed : 250 `ÿnûl_cÚÃùiÚ ( nc , - EIO ); 251 } } 253  $cÚÃù_cb ( GIOChªÃl * chª , GE¼Ü * ”r , gpoš‹r d©a ) 255  ÃtwÜk_cÚn * nc = d©a ; 256  sk , ³¼ ; 258 ià( ”r ) { 259 `”rÜ ("%s", ”r -> mes§ge ); 260  çžed ; 263 sk = `g_io_chªÃl_unix_g‘_fd ( nc -> io ); 264 nc -> £ssiÚ = `bÃp_Ãw ( sk , BNEP_SVC_PANU ,‚c-> id , BNEP_INTERFACE ); 265 ià(! nc -> £ssiÚ ) 266  çžed ; 268 ³¼ = `bÃp_cÚÃù ( nc -> £ssiÚ , bÃp_cÚn_cb ,‚c); 269 ià( ³¼ < 0) { 270 `”rÜ ("bðcÚÃù(): % (%d)", `¡»¼Ü (- ³¼ ), -perr); 271  çžed ; 274 `bÃp_£t_discÚÃù ( nc -> £ssiÚ , bÃp_discÚn_cb ,‚c); 276 ià( nc -> io ) { 277 `g_io_chªÃl_uÄef ( nc -> io ); 278 nc -> io = NULL ; 283 çžed : 284 `ÿnûl_cÚÃùiÚ ( nc , - EIO ); 285 } } 287  DBusMes§ge * $loÿl_cÚÃù ( DBusCÚÃùiÚ * cÚn , 288 DBusMes§ge * msg , * d©a ) 290  ÃtwÜk_³” * ³” = d©a ; 291  btd_£rviû * £rviû ; 292  ÃtwÜk_cÚn * nc ; 293 cÚ¡ * svc ; 294 cÚ¡ * uuid ; 295 ušt16_t id ; 296  ”r ; 298 ià( `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & svc , 299 DBUS_TYPE_INVALID è=ð FALSE ) 300  `btd_”rÜ_šv®id_¬gs ( msg ); 302 id = `bÃp_£rviû_id ( svc ); 303 uuid = `bÃp_uuid ( id ); 305 ià( uuid =ð NULL ) 306  `btd_”rÜ_šv®id_¬gs ( msg ); 308 £rviû = `btd_deviû_g‘_£rviû ( ³” -> deviû , uuid ); 309 ià( £rviû =ð NULL ) 310  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 312 nc = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 314 ià( nc -> cÚÃù !ð NULL ) 315  `btd_”rÜ_busy ( msg ); 317 ”r = `cÚÃùiÚ_cÚÃù ( nc -> £rviû ); 318 ià( ”r < 0) 319  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 321 nc -> cÚÃù = `dbus_mes§ge_»f ( msg ); 323  NULL ; 324 } } 327  $cÚÃùiÚ_cÚÃù ( btd_£rviû * £rviû ) 329  ÃtwÜk_cÚn * nc = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 330  ÃtwÜk_³” * ³” = nc ->peer; 331 ušt16_t id = `g‘_£rviû_id ( £rviû ); 332 GE¼Ü * ”r = NULL ; 333 cÚ¡ bdaddr_t * ¤c ; 334 cÚ¡ bdaddr_t * d¡ ; 336 `DBG ("id %u", id ); 338 ià( nc -> ¡©e !ð DISCONNECTED ) 339  - EALREADY ; 341 ¤c = `btd_ad­‹r_g‘_add»ss ( `deviû_g‘_ad­‹r ( ³” -> deviû )); 342 d¡ = `deviû_g‘_add»ss ( ³” -> deviû ); 344 nc -> io = `bt_io_cÚÃù ( cÚÃù_cb ,‚c, 345 NULL , & ”r , 346 BT_IO_OPT_SOURCE_BDADDR , ¤c , 347 BT_IO_OPT_DEST_BDADDR , d¡ , 348 BT_IO_OPT_PSM , BNEP_PSM , 349 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_MEDIUM , 350 BT_IO_OPT_OMTU , BNEP_MTU , 351 BT_IO_OPT_IMTU , BNEP_MTU , 352 BT_IO_OPT_INVALID ); 353 ià(! nc -> io ) 354  - EIO ; 356 nc -> ¡©e = CONNECTING ; 359 } } 361  $cÚÃùiÚ_discÚÃù ( btd_£rviû * £rviû ) 363  ÃtwÜk_cÚn * nc = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 365 ià( nc -> ¡©e =ð DISCONNECTED ) 368 `cÚÃùiÚ_de¡roy ( NULL , nc ); 371 } } 373  DBusMes§ge * $loÿl_discÚÃù ( DBusCÚÃùiÚ * cÚn , 374 DBusMes§ge * msg , * d©a ) 376  ÃtwÜk_³” * ³” = d©a ; 377 GSLi¡ * l ; 379  l = ³” -> cÚÃùiÚs ;†;† =†-> Ãxt ) { 380  ÃtwÜk_cÚn * nc = l -> d©a ; 381  ”r ; 383 ià( nc -> ¡©e =ð DISCONNECTED ) 386 ”r = `cÚÃùiÚ_discÚÃù ( nc -> £rviû ); 387 ià( ”r < 0) 388  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 390  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 393  `btd_”rÜ_nÙ_cÚÃùed ( msg ); 394 } } 396  gboÞ—n 397 $ÃtwÜk_´Ý”ty_g‘_cÚÃùed (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 398 DBusMes§geI‹r * ™” , * d©a ) 400  ÃtwÜk_³” * ³” = d©a ; 401  ÃtwÜk_cÚn * nc ; 402 dbus_boÞ_t cÚÃùed ; 404 nc = `fšd_cÚÃùiÚ_by_¡©e ( ³” -> cÚÃùiÚs , CONNECTED ); 405 cÚÃùed = nc !ð NULL ? TRUE : FALSE ; 407 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & cÚÃùed ); 409  TRUE ; 410 } } 412  gboÞ—n $ÃtwÜk_´Ý”ty_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 413 * d©a ) 415  ÃtwÜk_³” * ³” = d©a ; 416  ÃtwÜk_cÚn * nc ; 418 nc = `fšd_cÚÃùiÚ_by_¡©e ( ³” -> cÚÃùiÚs , CONNECTED ); 419 ià( nc =ð NULL ) 420  FALSE ; 422  TRUE ; 423 } } 425  gboÞ—n 426 $ÃtwÜk_´Ý”ty_g‘_š‹rçû (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 427 DBusMes§geI‹r * ™” , * d©a ) 429  ÃtwÜk_³” * ³” = d©a ; 430  ÃtwÜk_cÚn * nc ; 431 cÚ¡ * içû ; 433 nc = `fšd_cÚÃùiÚ_by_¡©e ( ³” -> cÚÃùiÚs , CONNECTED ); 434 ià( nc =ð NULL ) 435  FALSE ; 437 içû = nc -> dev ; 439 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & içû ); 441  TRUE ; 442 } } 444  gboÞ—n $ÃtwÜk_´Ý”ty_g‘_uuid (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 445 DBusMes§geI‹r * ™” , * d©a ) 447  ÃtwÜk_³” * ³” = d©a ; 448  ÃtwÜk_cÚn * nc ; 449 cÚ¡ * uuid ; 451 nc = `fšd_cÚÃùiÚ_by_¡©e ( ³” -> cÚÃùiÚs , CONNECTED ); 452 ià( nc =ð NULL ) 453  FALSE ; 455 uuid = `bÃp_uuid ( nc -> id ); 457 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & uuid ); 459  TRUE ; 460 } } 462  $cÚÃùiÚ_ä“ (* d©a ) 464  ÃtwÜk_cÚn * nc = d©a ; 466 ià( nc -> dc_id ) 467 `deviû_»move_discÚÃù_w©ch ( nc -> ³” -> deviû ,‚c-> dc_id ); 469 `cÚÃùiÚ_de¡roy ( NULL , nc ); 471 ià( nc -> cÚÃù ) 472 `dbus_mes§ge_uÄef ( nc -> cÚÃù ); 474 `btd_£rviû_uÄef ( nc -> £rviû ); 475 `g_ä“ ( nc ); 476 } } 478  $³”_ä“ ( ÃtwÜk_³” * ³” ) 480 `g_¦i¡_ä“_fuÎ ( ³” -> cÚÃùiÚs , cÚÃùiÚ_ä“ ); 481 `btd_deviû_uÄef ( ³” -> deviû ); 482 `g_ä“ ( ³” ); 483 } } 485  $·th_uÄegi¡” (* d©a ) 487  ÃtwÜk_³” * ³” = d©a ; 489 `DBG ("Unregistered interface %s on…ath %s", 490 NETWORK_PEER_INTERFACE , `deviû_g‘_·th ( ³” -> deviû )); 492 ³”s = `g_¦i¡_»move Õ“rs, ³” ); 493 `³”_ä“ ( ³” ); 494 } } 496 cÚ¡ GDBusM‘hodTabË gcÚÃùiÚ_m‘hods [] = { 497 { GDBUS_ASYNC_METHOD ("Connect", 498 GDBUS_ARGS ({"uuid", "s"}), 499 GDBUS_ARGS ({"interface", "s"}), 500 loÿl_cÚÃù ) }, 501 { GDBUS_METHOD ("Disconnect", 502 NULL , NULL, loÿl_discÚÃù ) }, 506 cÚ¡ GDBusPrÝ”tyTabË gcÚÃùiÚ_´Ý”t›s [] = { 507 { "CÚÃùed", "b", ÃtwÜk_´Ý”ty_g‘_cÚÃùed }, 508 { "IÁ”çû", "s", ÃtwÜk_´Ý”ty_g‘_š‹rçû , NULL , 509 ÃtwÜk_´Ý”ty_exi¡s }, 510 { "UUID", "s", ÃtwÜk_´Ý”ty_g‘_uuid , NULL , 511 ÃtwÜk_´Ý”ty_exi¡s }, 515  $cÚÃùiÚ_uÄegi¡” ( btd_£rviû * £rviû ) 517  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 518  ÃtwÜk_cÚn * cÚn = `btd_£rviû_g‘_u£r_d©a ( £rviû ); 519  ÃtwÜk_³” * ³” = cÚn ->peer; 520 ušt16_t id = `g‘_£rviû_id ( £rviû ); 522 `DBG ("% id %u", `deviû_g‘_·th ( deviû ), id ); 524 ³” -> cÚÃùiÚs = `g_¦i¡_»move Õ“r->cÚÃùiÚs, cÚn ); 525 `cÚÃùiÚ_ä“ ( cÚn ); 527 ià( ³” -> cÚÃùiÚs !ð NULL ) 530 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 531 `deviû_g‘_·th ( deviû ), 532 NETWORK_PEER_INTERFACE ); 533 } } 535  ÃtwÜk_³” * $ü—‹_³” ( btd_deviû * deviû ) 537  ÃtwÜk_³” * ³” ; 538 cÚ¡ * ·th ; 540 ³” = `g_Ãw0 ( ÃtwÜk_³” , 1); 541 ³” -> deviû = `btd_deviû_»f (device); 543 ·th = `deviû_g‘_·th ( deviû ); 545 ià( `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), ·th , 546 NETWORK_PEER_INTERFACE , 547 cÚÃùiÚ_m‘hods , 548 NULL , cÚÃùiÚ_´Ý”t›s , 549 ³” , ·th_uÄegi¡” è=ð FALSE ) { 550 `”rÜ ("D-Bus failedo„egister %s interface", 551 NETWORK_PEER_INTERFACE ); 552 `³”_ä“ ( ³” ); 553  NULL ; 556 `DBG ("Registered interface %s on…ath %s", 557 NETWORK_PEER_INTERFACE , ·th ); 559  ³” ; 560 } } 562  $cÚÃùiÚ_»gi¡” ( btd_£rviû * £rviû ) 564  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 565  ÃtwÜk_³” * ³” ; 566  ÃtwÜk_cÚn * nc ; 567 ušt16_t id = `g‘_£rviû_id ( £rviû ); 569 `DBG ("% id %u", `deviû_g‘_·th ( deviû ), id ); 571 ³” = `fšd_³” ( ³”s , deviû ); 572 ià(! ³” ) { 573 ³” = `ü—‹_³” ( deviû ); 574 ià(! ³” ) 576 ³”s = `g_¦i¡_­³nd Õ“rs, ³” ); 579 nc = `g_Ãw0 ( ÃtwÜk_cÚn , 1); 580 nc -> id = id; 581 nc -> £rviû = `btd_£rviû_»f (service); 582 nc -> ¡©e = DISCONNECTED ; 583 nc -> ³” =…eer; 585 `btd_£rviû_£t_u£r_d©a ( £rviû , nc ); 587 `DBG ("id %u„egi¡”ed", id ); 589 ³” -> cÚÃùiÚs = `g_¦i¡_­³nd Õ“r->cÚÃùiÚs, nc ); 592 } } @profiles/network/connection.h 24  cÚÃùiÚ_»gi¡” ( btd_£rviû * £rviû ); 25  cÚÃùiÚ_uÄegi¡” ( btd_£rviû * £rviû ); 26  cÚÃùiÚ_cÚÃù ( btd_£rviû * £rviû ); 27  cÚÃùiÚ_discÚÃù ( btd_£rviû * £rviû ); @profiles/network/manager.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<”ºo.h > 29  ~<¡dboÞ.h > 31  ~ 32  ~ 33  ~ 35  ~ 36  ~ 38  ~"¤c/log.h " 39  ~"¤c/¶ugš.h " 41  ~"lib/uuid.h " 42  ~"¤c/ad­‹r.h " 43  ~"¤c/deviû.h " 44  ~"¤c/´ofže.h " 45  ~"¤c/£rviû.h " 47  ~"bÃp.h " 48  ~"cÚÃùiÚ.h " 49  ~"£rv”.h " 51  gboÞ—n gcÚf_£cur™y = TRUE ; 53  $»ad_cÚfig (cÚ¡ * fže ) 55 GKeyFže * keyfže ; 56 GE¼Ü * ”r = NULL ; 58 keyfže = `g_key_fže_Ãw (); 60 ià(! `g_key_fže_lßd_äom_fže ( keyfže , fže , 0, & ”r )) { 61 `g_þ—r_”rÜ (& ”r ); 62  dÚe ; 65 cÚf_£cur™y = ! `g_key_fže_g‘_boÞ—n ( keyfže , "General", 66 "Di§bËSecur™y", & ”r ); 67 ià( ”r ) { 68 `DBG ("%s: %s", fže , ”r -> mes§ge ); 69 `g_þ—r_”rÜ (& ”r ); 72 dÚe : 73 `g_key_fže_ä“ ( keyfže ); 75 `DBG ("Config options: Security=%s", 76 cÚf_£cur™y ? "true" : "false"); 77 } } 79  $·nu_£rv”_´obe ( btd_´ofže * p ,  btd_ad­‹r * ad­‹r ) 81 cÚ¡ * ·th = `ad­‹r_g‘_·th ( ad­‹r ); 83 `DBG ("·th %s", ·th ); 85  `£rv”_»gi¡” ( ad­‹r , BNEP_SVC_PANU ); 86 } } 88  $·nu_£rv”_»move ( btd_´ofže * p , 89  btd_ad­‹r * ad­‹r ) 91 cÚ¡ * ·th = `ad­‹r_g‘_·th ( ad­‹r ); 93 `DBG ("·th %s", ·th ); 95 `£rv”_uÄegi¡” ( ad­‹r , BNEP_SVC_PANU ); 96 } } 98  $gn_£rv”_´obe ( btd_´ofže * p ,  btd_ad­‹r * ad­‹r ) 100 cÚ¡ * ·th = `ad­‹r_g‘_·th ( ad­‹r ); 102 `DBG ("·th %s", ·th ); 104  `£rv”_»gi¡” ( ad­‹r , BNEP_SVC_GN ); 105 } } 107  $gn_£rv”_»move ( btd_´ofže * p , 108  btd_ad­‹r * ad­‹r ) 110 cÚ¡ * ·th = `ad­‹r_g‘_·th ( ad­‹r ); 112 `DBG ("·th %s", ·th ); 114 `£rv”_uÄegi¡” ( ad­‹r , BNEP_SVC_GN ); 115 } } 117  $Çp_£rv”_´obe ( btd_´ofže * p ,  btd_ad­‹r * ad­‹r ) 119 cÚ¡ * ·th = `ad­‹r_g‘_·th ( ad­‹r ); 121 `DBG ("·th %s", ·th ); 123  `£rv”_»gi¡” ( ad­‹r , BNEP_SVC_NAP ); 124 } } 126  $Çp_£rv”_»move ( btd_´ofže * p , 127  btd_ad­‹r * ad­‹r ) 129 cÚ¡ * ·th = `ad­‹r_g‘_·th ( ad­‹r ); 131 `DBG ("·th %s", ·th ); 133 `£rv”_uÄegi¡” ( ad­‹r , BNEP_SVC_NAP ); 134 } } 136  btd_´ofže g·nu_´ofže = { 137 . Çme = "network-panu", 138 . gloÿl_uuid = NAP_UUID , 139 . g»mÙe_uuid = PANU_UUID , 140 . gdeviû_´obe = cÚÃùiÚ_»gi¡” , 141 . gdeviû_»move = cÚÃùiÚ_uÄegi¡” , 142 . gcÚÃù = cÚÃùiÚ_cÚÃù , 143 . gdiscÚÃù = cÚÃùiÚ_discÚÃù , 144 . gad­‹r_´obe = ·nu_£rv”_´obe , 145 . gad­‹r_»move = ·nu_£rv”_»move , 148  btd_´ofže ggn_´ofže = { 149 . Çme = "network-gn", 150 . gloÿl_uuid = PANU_UUID , 151 . g»mÙe_uuid = GN_UUID , 152 . gdeviû_´obe = cÚÃùiÚ_»gi¡” , 153 . gdeviû_»move = cÚÃùiÚ_uÄegi¡” , 154 . gcÚÃù = cÚÃùiÚ_cÚÃù , 155 . gdiscÚÃù = cÚÃùiÚ_discÚÃù , 156 . gad­‹r_´obe = gn_£rv”_´obe , 157 . gad­‹r_»move = gn_£rv”_»move , 160  btd_´ofže gÇp_´ofže = { 161 . Çme = "network-nap", 162 . gloÿl_uuid = PANU_UUID , 163 . g»mÙe_uuid = NAP_UUID , 164 . gdeviû_´obe = cÚÃùiÚ_»gi¡” , 165 . gdeviû_»move = cÚÃùiÚ_uÄegi¡” , 166 . gcÚÃù = cÚÃùiÚ_cÚÃù , 167 . gdiscÚÃù = cÚÃùiÚ_discÚÃù , 168 . gad­‹r_´obe = Çp_£rv”_´obe , 169 . gad­‹r_»move = Çp_£rv”_»move , 172  $ÃtwÜk_š™ () 174  ”r ; 176 `»ad_cÚfig ( CONFIGDIR "/network.conf"); 178 ”r = `bÃp_š™ (); 179 ià( ”r ) { 180 ià( ”r =ð- EPROTONOSUPPORT ) 181 ”r = - ENOSYS ; 182  ”r ; 192 ià( `£rv”_š™ ( cÚf_£cur™y ) < 0) 195 `btd_´ofže_»gi¡” (& ·nu_´ofže ); 196 `btd_´ofže_»gi¡” (& gn_´ofže ); 197 `btd_´ofže_»gi¡” (& Çp_´ofže ); 200 } } 202  $ÃtwÜk_ex™ () 204 `btd_´ofže_uÄegi¡” (& ·nu_´ofže ); 205 `btd_´ofže_uÄegi¡” (& gn_´ofže ); 206 `btd_´ofže_uÄegi¡” (& Çp_´ofže ); 208 `bÃp_þ—nup (); 209 } } 211 BLUETOOTH_PLUGIN_DEFINE ( ÃtwÜk , VERSION , 212 BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , ÃtwÜk_š™ , ÃtwÜk_ex™ ) @profiles/network/server.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~ 30  ~<¡dlib.h > 31  ~<”ºo.h > 33  ~ 34  ~ 35  ~ 36  ~ 37  ~<Ãtš‘/š.h > 39  ~ 40  ~ 42  ~"btio/btio.h " 43  ~"lib/uuid.h " 44  ~"¤c/dbus-commÚ.h " 45  ~"¤c/ad­‹r.h " 46  ~"¤c/log.h " 47  ~"¤c/”rÜ.h " 48  ~"¤c/sdpd.h " 50  ~"bÃp.h " 51  ~"£rv”.h " 53  #NETWORK_SERVER_INTERFACE "Üg.bluez.N‘wÜkS”v”1" ) 54  #BNEP_INTERFACE "bÃp%d" ) 55  #SETUP_TIMEOUT 1 ) 58  sÃtwÜk_£ssiÚ { 59 bdaddr_t md¡ ; 60  mdev [16]; 61 GIOChªÃl * mio ; 62 gušt mw©ch ; 65  sÃtwÜk_ad­‹r { 66  btd_ad­‹r * mad­‹r ; 67 GIOChªÃl * mio ; 68  ÃtwÜk_£ssiÚ * m£tup ; 69 GSLi¡ * m£rv”s ; 73  sÃtwÜk_£rv” { 74 bdaddr_t m¤c ; 75 * mÇme ; 76 * mbridge ; 77 ušt32_t m»cÜd_id ; 78 ušt16_t mid ; 79 GSLi¡ * m£ssiÚs ; 80  ÃtwÜk_ad­‹r * mÇ ; 81 gušt mw©ch_id ; 84  GSLi¡ * gad­‹rs = NULL ; 85  gboÞ—n g£cur™y = TRUE ; 87 #ifdeà __TIZEN_PATCH__ 88  gboÞ—n £rv”_discÚÃùed_cb ( GIOChªÃl * chª , 89 GIOCÚd™iÚ cÚd , gpoš‹r u£r_d©a ); 92  ÃtwÜk_ad­‹r * $fšd_ad­‹r ( GSLi¡ * li¡ , 93  btd_ad­‹r * ad­‹r ) 95 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 96  ÃtwÜk_ad­‹r * Ç = li¡ -> d©a ; 98 ià( Ç -> ad­‹r ==‡dapter) 99  Ç ; 102  NULL ; 103 } } 105  ÃtwÜk_£rv” * $fšd_£rv” ( GSLi¡ * li¡ , ušt16_t id ) 107 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 108  ÃtwÜk_£rv” * ns = li¡ -> d©a ; 110 ià( ns -> id == id) 111  ns ; 114  NULL ; 115 } } 117  ÃtwÜk_£rv” * $fšd_£rv”_by_uuid ( GSLi¡ * li¡ , 118 cÚ¡ * uuid ) 120 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 121  ÃtwÜk_£rv” * ns = li¡ -> d©a ; 123 ià( `¡rÿ£cmp ( uuid , `bÃp_uuid ( ns -> id )) == 0) 124  ns ; 126 ià( `¡rÿ£cmp ( uuid , `bÃp_Çme ( ns -> id )) == 0) 127  ns ; 130  NULL ; 131 } } 133 #ifdeà __TIZEN_PATCH__ 134  ÃtwÜk_£ssiÚ * $fšd_£ssiÚ ( GSLi¡ * li¡ , GIOChªÃl * io ) 136 GSLi¡ * l ; 138  l = li¡ ;†;† =†-> Ãxt ) { 139  ÃtwÜk_£ssiÚ * £ssiÚ = l -> d©a ; 141 ià( £ssiÚ && sessiÚ-> io == io) 142  £ssiÚ ; 145  NULL ; 146 } } 148  ÃtwÜk_£ssiÚ * $fšd_£ssiÚ_by_addr ( GSLi¡ * li¡ , 149 bdaddr_t d¡_addr ) 151 GSLi¡ * l ; 153  l = li¡ ;†;† =†-> Ãxt ) { 154  ÃtwÜk_£ssiÚ * £ssiÚ = l -> d©a ; 156 ià(! `bacmp (& £ssiÚ -> d¡ , & d¡_addr )) 157  £ssiÚ ; 161  NULL ; 162 } } 165  sdp_»cÜd_t * $£rv”_»cÜd_Ãw (cÚ¡ * Çme , ušt16_t id ) 167 sdp_li¡_t * svþass , * pf£q , * ­£q , * roÙ , * ­rÙo ; 168 uuid_t roÙ_uuid , ·n , l2ÿp , bÃp ; 169 sdp_´ofže_desc_t ´ofže [1]; 170 sdp_li¡_t * ´Ùo [2]; 171 sdp_d©a_t * v , * p ; 172 ušt16_t psm = BNEP_PSM , v”siÚ = 0x0100; 173 ušt16_t £cur™y_desc = ( £cur™y ? 0x0001 : 0x0000); 174 #ifdeà __TIZEN_PATCH__ 175 ušt16_t Ãt_acûss_ty³ = 0x000a; 176 ušt32_t max_Ãt_acûss_¿‹ = 0x001312d0; 178 ušt16_t Ãt_acûss_ty³ = 0xfffe; 179 ušt32_t max_Ãt_acûss_¿‹ = 0; 181 cÚ¡ * desc = "Network service"; 182 sdp_»cÜd_t * »cÜd ; 184 »cÜd = `sdp_»cÜd_®loc (); 185 ià(! »cÜd ) 186  NULL ; 188 »cÜd -> ©Œli¡ = NULL ; 189 »cÜd -> ·‰”n = NULL ; 191  id ) { 192  BNEP_SVC_NAP : 193 `sdp_uuid16_ü—‹ (& ·n , NAP_SVCLASS_ID ); 194 svþass = `sdp_li¡_­³nd ( NULL , & ·n ); 195 `sdp_£t_£rviû_þas£s ( »cÜd , svþass ); 197 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , NAP_PROFILE_ID ); 198 ´ofže [0]. v”siÚ = 0x0100; 199 pf£q = `sdp_li¡_­³nd ( NULL , & ´ofže [0]); 200 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 202 `sdp_£t_šfo_©Œ ( »cÜd , Çme , NULL , desc ); 204 `sdp_©Œ_add_Ãw ( »cÜd , SDP_ATTR_NET_ACCESS_TYPE , 205 SDP_UINT16 , & Ãt_acûss_ty³ ); 206 `sdp_©Œ_add_Ãw ( »cÜd , SDP_ATTR_MAX_NET_ACCESSRATE , 207 SDP_UINT32 , & max_Ãt_acûss_¿‹ ); 209  BNEP_SVC_GN : 210 `sdp_uuid16_ü—‹ (& ·n , GN_SVCLASS_ID ); 211 svþass = `sdp_li¡_­³nd ( NULL , & ·n ); 212 `sdp_£t_£rviû_þas£s ( »cÜd , svþass ); 214 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , GN_PROFILE_ID ); 215 ´ofže [0]. v”siÚ = 0x0100; 216 pf£q = `sdp_li¡_­³nd ( NULL , & ´ofže [0]); 217 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 219 `sdp_£t_šfo_©Œ ( »cÜd , Çme , NULL , desc ); 221  BNEP_SVC_PANU : 222 `sdp_uuid16_ü—‹ (& ·n , PANU_SVCLASS_ID ); 223 svþass = `sdp_li¡_­³nd ( NULL , & ·n ); 224 `sdp_£t_£rviû_þas£s ( »cÜd , svþass ); 226 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , PANU_PROFILE_ID ); 227 ´ofže [0]. v”siÚ = 0x0100; 228 pf£q = `sdp_li¡_­³nd ( NULL , & ´ofže [0]); 229 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 231 `sdp_£t_šfo_©Œ ( »cÜd , Çme , NULL , desc ); 234 `sdp_»cÜd_ä“ ( »cÜd ); 235  NULL ; 238 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 239 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 240 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 242 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 243 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp ); 244 p = `sdp_d©a_®loc ( SDP_UINT16 , & psm ); 245 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], p ); 246 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 248 `sdp_uuid16_ü—‹ (& bÃp , BNEP_UUID ); 249 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & bÃp ); 250 v = `sdp_d©a_®loc ( SDP_UINT16 , & v”siÚ ); 251 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], v ); 255 ušt16_t ±y³ [] = { 259 sdp_d©a_t * h—d , * p£q ; 260  p ; 262  p = 0, h—d = NULL ;… < 2;…++) { 263 sdp_d©a_t * d©a = `sdp_d©a_®loc ( SDP_UINT16 , & ±y³ [ p ]); 264 ià( h—d ) 265 `sdp_£q_­³nd ( h—d , d©a ); 267 h—d = d©a ; 269 p£q = `sdp_d©a_®loc ( SDP_SEQ16 , h—d ); 270 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], p£q ); 273 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 275 ­rÙo = `sdp_li¡_­³nd ( NULL , ­£q ); 276 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 278 `sdp_add_Ïng_©Œ ( »cÜd ); 280 `sdp_©Œ_add_Ãw ( »cÜd , SDP_ATTR_SECURITY_DESC , 281 SDP_UINT16 , & £cur™y_desc ); 283 `sdp_d©a_ä“ ( p ); 284 `sdp_d©a_ä“ ( v ); 285 `sdp_li¡_ä“ ( ­£q , NULL ); 286 `sdp_li¡_ä“ ( roÙ , NULL ); 287 `sdp_li¡_ä“ ( ­rÙo , NULL ); 288 `sdp_li¡_ä“ ( ´Ùo [0], NULL ); 289 `sdp_li¡_ä“ ( ´Ùo [1], NULL ); 290 `sdp_li¡_ä“ ( svþass , NULL ); 291 `sdp_li¡_ä“ ( pf£q , NULL ); 293  »cÜd ; 294 } } 296  $£ssiÚ_ä“ (* d©a ) 298  ÃtwÜk_£ssiÚ * £ssiÚ = d©a ; 300 ià( £ssiÚ -> w©ch ) 301 `g_sourû_»move ( £ssiÚ -> w©ch ); 303 ià( £ssiÚ -> io ) 304 `g_io_chªÃl_uÄef ( £ssiÚ -> io ); 306 `g_ä“ ( £ssiÚ ); 307 } } 309  $£tup_de¡roy (* u£r_d©a ) 311  ÃtwÜk_ad­‹r * Ç = u£r_d©a ; 312  ÃtwÜk_£ssiÚ * £tup = Ç ->setup; 314 ià(! £tup ) 317 Ç -> £tup = NULL ; 319 `£ssiÚ_ä“ ( £tup ); 320 } } 322 #ifdeà __TIZEN_PATCH__ 323  gboÞ—n $£rv”_discÚÃùed_cb ( GIOChªÃl * chª , 324 GIOCÚd™iÚ cÚd , gpoš‹r u£r_d©a ) 326  ÃtwÜk_£rv” * ns = NULL ; 327  ÃtwÜk_£ssiÚ * £ssiÚ = NULL ; 328  add»ss [20] = {0}; 329 cÚ¡ * ·ddr = add»ss ; 330 * Çme_¡r = NULL ; 332 `šfo ("server_disconnected_cb"); 334 ià(! u£r_d©a ) 335  FALSE ; 337 ns = ( ÃtwÜk_£rv” *è u£r_d©a ; 339 £ssiÚ = `fšd_£ssiÚ ( ns -> £ssiÚs , chª ); 340 ià( £ssiÚ ) { 341 Çme_¡r = `g_¡rdup ( £ssiÚ -> dev ); 342 `ba2¡r (& £ssiÚ -> d¡ , add»ss ); 344 `šfo ("Session is‚otƒxist!"); 345 Çme_¡r = `g_¡rdup ("bnep"); 348 `g_dbus_em™_sigÇl ( `btd_g‘_dbus_cÚÃùiÚ (), 349 `ad­‹r_g‘_·th ( ns -> Ç -> ad­‹r ), 350 NETWORK_SERVER_INTERFACE , "PeerDisconnected", 351 DBUS_TYPE_STRING , & Çme_¡r , 352 DBUS_TYPE_STRING , & ·ddr , 353 DBUS_TYPE_INVALID ); 355 ià( £ssiÚ ) { 356 ns -> £ssiÚs = `g_¦i¡_»move Òs->£ssiÚs, £ssiÚ ); 357 `£ssiÚ_ä“ ( £ssiÚ ); 360 ià( `g_¦i¡_Ëngth ( ns -> £ssiÚs ) == 0 && 361 Çme_¡r !ð NULL ) { 362 `bÃp_if_down_w¿µ” ( Çme_¡r ); 363 ns -> £ssiÚs = NULL ; 366 `g_ä“ ( Çme_¡r ); 368  FALSE ; 369 } } 372  gboÞ—n $bÃp_£tup ( GIOChªÃl * chª , 373 GIOCÚd™iÚ cÚd , gpoš‹r u£r_d©a ) 375  ÃtwÜk_ad­‹r * Ç = u£r_d©a ; 376  ÃtwÜk_£rv” * ns ; 377 ušt8_t ·ck‘ [ BNEP_MTU ]; 378  bÃp_£tup_cÚn_»q * »q = (*è ·ck‘ ; 379 ušt16_t ¤c_rÞe , d¡_rÞe , r¥ = BNEP_CONN_NOT_ALLOWED ; 380  n , sk ; 382 ià( cÚd & G_IO_NVAL ) 383  FALSE ; 385 ià( cÚd & ( G_IO_ERR | G_IO_HUP )) { 386 `”rÜ ("Hangup orƒrror on BNEP socket"); 387  FALSE ; 390 sk = `g_io_chªÃl_unix_g‘_fd ( chª ); 393 n = `»ad ( sk , ·ck‘ , (packet)); 394 ià( n < 0) { 395 `”rÜ ("»ad(): %s(%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 396  FALSE ; 401 ià( »q -> ty³ =ð BNEP_CONTROL && 402 »q -> ù¾ > BNEP_FILTER_MULT_ADDR_RSP ) { 403 ušt8_t pkt [3]; 405 pkt [0] = BNEP_CONTROL ; 406 pkt [1] = BNEP_CMD_NOT_UNDERSTOOD ; 407 pkt [2] = »q -> ù¾ ; 409 `£nd ( sk , pkt , (pkt), 0); 411  FALSE ; 414 ià( »q -> ty³ !ð BNEP_CONTROL ||„eq-> ù¾ !ð BNEP_SETUP_CONN_REQ ) 415  FALSE ; 417 r¥ = `bÃp_£tup_decode ( »q , & d¡_rÞe , & ¤c_rÞe ); 418 ià( r¥ ) 419  »¶y ; 421 r¥ = `bÃp_£tup_chk ( d¡_rÞe , ¤c_rÞe ); 422 ià( r¥ ) 423  »¶y ; 425 r¥ = BNEP_CONN_NOT_ALLOWED ; 427 ns = `fšd_£rv” ( Ç -> £rv”s , d¡_rÞe ); 428 ià(! ns ) { 429 `”rÜ ("S”v” uÇvažabË: (0x%x)", d¡_rÞe ); 430  »¶y ; 433 ià(! ns -> »cÜd_id ) { 434 `”rÜ ("Service„ecord‚ot‡vailable"); 435  »¶y ; 438 ià(! ns -> bridge ) { 439 `”rÜ ("Bridge interface‚ot configured"); 440  »¶y ; 443 `¡ºýy ( Ç -> £tup -> dev , BNEP_INTERFACE , 16); 444 Ç -> £tup -> dev [15] = '\0'; 446 ià( `bÃp_£rv”_add ( sk , d¡_rÞe , ns -> bridge , Ç -> £tup -> dev , 447 & Ç -> £tup -> d¡ ) < 0) 448  »¶y ; 450 #ifdeà __TIZEN_PATCH__ 453 cÚ¡ gch¬ * ad­‹r_·th = `ad­‹r_g‘_·th ( Ç -> ad­‹r ); 454 cÚ¡ * pdev = Ç -> £tup -> dev ; 455  add»ss [24] = { 0 }; 456 * ·ddr = add»ss ; 458 `ba2¡r (& Ç -> £tup -> d¡ , ·ddr ); 460 ns -> £ssiÚs = `g_¦i¡_­³nd Òs->£ssiÚs, Ç -> £tup ); 462 `g_dbus_em™_sigÇl ( `btd_g‘_dbus_cÚÃùiÚ (), ad­‹r_·th , 463 NETWORK_SERVER_INTERFACE , "PeerConnected", 464 DBUS_TYPE_STRING , & pdev , 465 DBUS_TYPE_STRING , & ·ddr , 466 DBUS_TYPE_INVALID ); 468 Ç -> £tup -> w©ch = `g_io_add_w©ch_fuÎ ( chª , G_PRIORITY_DEFAULT , 469 G_IO_HUP | G_IO_ERR | G_IO_NVAL , 470 £rv”_discÚÃùed_cb , ns , NULL ); 474 Ç -> £tup = NULL ; 476 r¥ = BNEP_SUCCESS ; 478 »¶y : 479 `bÃp_£nd_ù¾_r¥ ( sk , BNEP_CONTROL , BNEP_SETUP_CONN_RSP , r¥ ); 481  FALSE ; 482 } } 484  $cÚÃù_ev’t ( GIOChªÃl * chª , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 486  ÃtwÜk_ad­‹r * Ç = u£r_d©a ; 488 ià( ”r ) { 489 `”rÜ ("%s", ”r -> mes§ge ); 490 `£tup_de¡roy ( Ç ); 494 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chª , TRUE ); 496 Ç -> £tup -> w©ch = `g_io_add_w©ch_fuÎ ( chª , G_PRIORITY_DEFAULT , 497 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 498 bÃp_£tup , Ç , £tup_de¡roy ); 499 } } 501  $auth_cb ( DBusE¼Ü * d”r , * u£r_d©a ) 503  ÃtwÜk_ad­‹r * Ç = u£r_d©a ; 504 GE¼Ü * ”r = NULL ; 506 ià( d”r ) { 507 `”rÜ ("Acûs d’›d: %s", d”r -> mes§ge ); 508  »jeù ; 511 ià(! `bt_io_acû± ( Ç -> £tup -> io , cÚÃù_ev’t ,‚a, NULL , 512 & ”r )) { 513 `”rÜ ("bt_io_acû±: %s", ”r -> mes§ge ); 514 `g_”rÜ_ä“ ( ”r ); 515  »jeù ; 520 »jeù : 521 `g_io_chªÃl_shutdown ( Ç -> £tup -> io , TRUE , NULL ); 522 `£tup_de¡roy ( Ç ); 523 } } 525  $cÚfœm_ev’t ( GIOChªÃl * chª , gpoš‹r u£r_d©a ) 527  ÃtwÜk_ad­‹r * Ç = u£r_d©a ; 528  ÃtwÜk_£rv” * ns ; 529 bdaddr_t ¤c , d¡ ; 530  add»ss [18]; 531 GE¼Ü * ”r = NULL ; 532 gušt »t ; 534 `bt_io_g‘ ( chª , & ”r , 535 BT_IO_OPT_SOURCE_BDADDR , & ¤c , 536 BT_IO_OPT_DEST_BDADDR , & d¡ , 537 BT_IO_OPT_DEST , add»ss , 538 BT_IO_OPT_INVALID ); 539 ià( ”r ) { 540 `”rÜ ("%s", ”r -> mes§ge ); 541 `g_”rÜ_ä“ ( ”r ); 542  drÝ ; 545 `DBG ("BNEP: incomšg cÚÃù from %s", add»ss ); 547 ià( Ç -> £tup ) { 548 `”rÜ ("Refusšg cÚÃù from %s: s‘u°š…rog»ss", add»ss ); 549  drÝ ; 552 ns = `fšd_£rv” ( Ç -> £rv”s , BNEP_SVC_NAP ); 553 ià(! ns ) 554  drÝ ; 556 ià(! ns -> »cÜd_id ) 557  drÝ ; 559 ià(! ns -> bridge ) 560  drÝ ; 562 Ç -> £tup = `g_Ãw0 ( ÃtwÜk_£ssiÚ , 1); 563 `baýy (& Ç -> £tup -> d¡ , &dst); 564 Ç -> £tup -> io = `g_io_chªÃl_»f ( chª ); 566 »t = `btd_»que¡_authÜiz©iÚ (& ¤c , & d¡ , BNEP_SVC_UUID , 567 auth_cb , Ç ); 568 ià( »t == 0) { 569 `”rÜ ("Refusšg cÚÃù from %s", add»ss ); 570 `£tup_de¡roy ( Ç ); 571  drÝ ; 576 drÝ : 577 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 578 } } 580  $£rv”_š™ ( gboÞ—n £cu» ) 582 £cur™y = £cu» ; 585 } } 587  ušt32_t $»gi¡”_£rv”_»cÜd ( ÃtwÜk_£rv” * ns ) 589 sdp_»cÜd_t * »cÜd ; 591 »cÜd = `£rv”_»cÜd_Ãw ( ns -> Çme ,‚s-> id ); 592 ià(! »cÜd ) { 593 `”rÜ ("Unableo‡llocate‚ew service„ecord"); 597 ià( `ad­‹r_£rviû_add ( ns -> Ç -> ad­‹r , »cÜd ) < 0) { 598 `”rÜ ("Failedo„egister service„ecord"); 599 `sdp_»cÜd_ä“ ( »cÜd ); 603 `DBG ("gÙ„ecÜd id 0x%x", »cÜd -> hªdË ); 605  »cÜd -> hªdË ; 606 } } 608  $£rv”_»move_£ssiÚs ( ÃtwÜk_£rv” * ns ) 610 GSLi¡ * li¡ ; 612  li¡ = ns -> £ssiÚs ;†i¡;†i¡ =†i¡-> Ãxt ) { 613  ÃtwÜk_£ssiÚ * £ssiÚ = li¡ -> d©a ; 615 ià(* £ssiÚ -> dev == '\0') 618 `bÃp_£rv”_d–‘e ( ns -> bridge , £ssiÚ -> dev , &£ssiÚ-> d¡ ); 621 #iâdeà __TIZEN_PATCH__ 622 `g_¦i¡_ä“_fuÎ ( ns -> £ssiÚs , £ssiÚ_ä“ ); 624 ns -> £ssiÚs = NULL ; 626 } } 628  $£rv”_discÚÃù ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 630  ÃtwÜk_£rv” * ns = u£r_d©a ; 632 `£rv”_»move_£ssiÚs ( ns ); 634 ns -> w©ch_id = 0; 636 ià( ns -> »cÜd_id ) { 637 `ad­‹r_£rviû_»move ( ns -> Ç -> ad­‹r ,‚s-> »cÜd_id ); 638 ns -> »cÜd_id = 0; 641 `g_ä“ ( ns -> bridge ); 642 ns -> bridge = NULL ; 643 } } 645  DBusMes§ge * $»gi¡”_£rv” ( DBusCÚÃùiÚ * cÚn , 646 DBusMes§ge * msg , * d©a ) 648  ÃtwÜk_ad­‹r * Ç = d©a ; 649  ÃtwÜk_£rv” * ns ; 650 DBusMes§ge * »¶y ; 651 cÚ¡ * uuid , * bridge ; 653 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & uuid , 654 DBUS_TYPE_STRING , & bridge , DBUS_TYPE_INVALID )) 655  `btd_”rÜ_šv®id_¬gs ( msg ); 657 ns = `fšd_£rv”_by_uuid ( Ç -> £rv”s , uuid ); 658 ià( ns =ð NULL ) 659  `btd_”rÜ_çžed ( msg , "Invalid UUID"); 661 ià( ns -> »cÜd_id ) 662  `btd_”rÜ_®»ady_exi¡s ( msg ); 664 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 665 ià(! »¶y ) 666  NULL ; 668 ns -> »cÜd_id = `»gi¡”_£rv”_»cÜd (ns); 669 ià(! ns -> »cÜd_id ) 670  `btd_”rÜ_çžed ( msg , "SDP„ecord„egistration failed"); 672 `g_ä“ ( ns -> bridge ); 673 ns -> bridge = `g_¡rdup (bridge); 675 ns -> w©ch_id = `g_dbus_add_discÚÃù_w©ch ( cÚn , 676 `dbus_mes§ge_g‘_£nd” ( msg ), 677 £rv”_discÚÃù , ns , NULL ); 679  »¶y ; 680 } } 682  DBusMes§ge * $uÄegi¡”_£rv” ( DBusCÚÃùiÚ * cÚn , 683 DBusMes§ge * msg , * d©a ) 685  ÃtwÜk_ad­‹r * Ç = d©a ; 686  ÃtwÜk_£rv” * ns ; 687 DBusMes§ge * »¶y ; 688 cÚ¡ * uuid ; 690 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & uuid , 691 DBUS_TYPE_INVALID )) 692  `btd_”rÜ_šv®id_¬gs ( msg ); 694 ns = `fšd_£rv”_by_uuid ( Ç -> £rv”s , uuid ); 695 ià(! ns ) 696  `btd_”rÜ_çžed ( msg , "Invalid UUID"); 698 #ifdeà __TIZEN_PATCH__ 699 ià(! ns -> »cÜd_id ) 700  `btd_”rÜ_nÙ_avažabË ( msg ); 703 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 704 ià(! »¶y ) 705  NULL ; 707 `g_dbus_»move_w©ch ( cÚn , ns -> w©ch_id ); 709 `£rv”_discÚÃù ( cÚn , ns ); 711  »¶y ; 712 } } 714  $ad­‹r_ä“ ( ÃtwÜk_ad­‹r * Ç ) 716 ià( Ç -> io !ð NULL ) { 717 `g_io_chªÃl_shutdown ( Ç -> io , TRUE , NULL ); 718 `g_io_chªÃl_uÄef ( Ç -> io ); 721 `£tup_de¡roy ( Ç ); 722 `btd_ad­‹r_uÄef ( Ç -> ad­‹r ); 723 `g_ä“ ( Ç ); 724 } } 726  $£rv”_ä“ (* d©a ) 728  ÃtwÜk_£rv” * ns = d©a ; 730 ià(! ns ) 733 `£rv”_»move_£ssiÚs ( ns ); 735 ià( ns -> »cÜd_id ) 736 `ad­‹r_£rviû_»move ( ns -> Ç -> ad­‹r ,‚s-> »cÜd_id ); 738 `g_dbus_»move_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), ns -> w©ch_id ); 739 `g_ä“ ( ns -> Çme ); 740 `g_ä“ ( ns -> bridge ); 742 `g_ä“ ( ns ); 743 } } 745  $·th_uÄegi¡” (* d©a ) 747  ÃtwÜk_ad­‹r * Ç = d©a ; 749 `DBG ("Unregistered interface %s on…ath %s", 750 NETWORK_SERVER_INTERFACE , `ad­‹r_g‘_·th ( Ç -> ad­‹r )); 752 `g_¦i¡_ä“_fuÎ ( Ç -> £rv”s , £rv”_ä“ ); 754 ad­‹rs = `g_¦i¡_»move ×d­‹rs, Ç ); 755 `ad­‹r_ä“ ( Ç ); 756 } } 758 #ifdeà __TIZEN_PATCH__ 759  DBusMes§ge * $discÚÃù_deviû ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 760 * d©a ) 762  ÃtwÜk_ad­‹r * Ç = d©a ; 763  ÃtwÜk_£rv” * ns ; 764  ÃtwÜk_£ssiÚ * £ssiÚ ; 765 cÚ¡ * addr = NULL ; 766 bdaddr_t d¡_addr ; 768 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & addr , 769 DBUS_TYPE_INVALID )) 770  `btd_”rÜ_šv®id_¬gs ( msg ); 772 ns = `fšd_£rv” ( Ç -> £rv”s , BNEP_SVC_NAP ); 774 `¡r2ba ( addr , & d¡_addr ); 775 £ssiÚ = `fšd_£ssiÚ_by_addr ( ns -> £ssiÚs , d¡_addr ); 777 ià( £ssiÚ =ð NULL ) 778  `btd_”rÜ_çžed ( msg , "No‡ctive session"); 780 ià( £ssiÚ -> io =ð NULL ) 781  `btd_”rÜ_nÙ_cÚÃùed ( msg ); 783 `bÃp_if_down_w¿µ” ( £ssiÚ -> dev ); 784 `bÃp_cÚnd–_w¿µ” (& d¡_addr ); 786  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 787 } } 789  DBusMes§ge * $g‘_´Ý”t›s ( DBusCÚÃùiÚ * cÚn , 790 DBusMes§ge * msg , * d©a ) 792  ÃtwÜk_ad­‹r * Ç = d©a ; 793  ÃtwÜk_£rv” * ns ; 794  ÃtwÜk_£ssiÚ * £ssiÚ ; 795 cÚ¡ * addr = NULL ; 796 bdaddr_t d¡_addr ; 797 DBusMes§ge * »¶y ; 798 DBusMes§geI‹r ™” ; 799 DBusMes§geI‹r diù ; 800 dbus_boÞ_t cÚÃùed ; 801 cÚ¡ * ´Ý”ty ; 803 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & addr , 804 DBUS_TYPE_INVALID )) 805  `btd_”rÜ_šv®id_¬gs ( msg ); 807 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 808 ià(! »¶y ) 809  NULL ; 811 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 813 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 814 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 815 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 816 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 818 ns = `fšd_£rv” ( Ç -> £rv”s , BNEP_SVC_NAP ); 820 `¡r2ba ( addr , & d¡_addr ); 821 £ssiÚ = `fšd_£ssiÚ_by_addr ( ns -> £ssiÚs , d¡_addr ); 823 cÚÃùed = ( £ssiÚ && sessiÚ-> io è? TRUE : FALSE ; 824 `diù_­³nd_’Œy (& diù , "CÚÃùed", DBUS_TYPE_BOOLEAN , & cÚÃùed ); 827 ´Ý”ty = £ssiÚ ? sessiÚ-> dev : ""; 828 `diù_­³nd_’Œy (& diù , "IÁ”çû", DBUS_TYPE_STRING , & ´Ý”ty ); 830 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & diù ); 832  »¶y ; 833 } } 836 #ifdeà __TIZEN_PATCH__ 837  GDBusSigÇlTabË g£rv”_sigÇls [] = { 838 { GDBUS_SIGNAL ("PeerConnected", 839 GDBUS_ARGS ({ "device", "s" }, { "address", "s" })) }, 840 { GDBUS_SIGNAL ("PeerDisconnected", 841 GDBUS_ARGS ({ "device", "s" }, { "address", "s" })) }, 846 cÚ¡ GDBusM‘hodTabË g£rv”_m‘hods [] = { 847 { GDBUS_METHOD ("Register", 848 GDBUS_ARGS ({ "uuid", "s" }, { "bridge", "s" }), NULL , 849 »gi¡”_£rv” ) }, 850 { GDBUS_METHOD ("Unregister", 851 GDBUS_ARGS ({ "uuid", "s" }), NULL , 852 uÄegi¡”_£rv” ) }, 853 #ifdeà __TIZEN_PATCH__ 854 { GDBUS_METHOD ("Disconnect", 855 GDBUS_ARGS ({ "add»ss", "s" }), NULL , 856 discÚÃù_deviû ) }, 857 { GDBUS_METHOD ("GetProperties", 858 GDBUS_ARGS ({ "address", "s" }), 859 GDBUS_ARGS ({ "properties", "a{sv}" }), 860 g‘_´Ý”t›s ) }, 865  ÃtwÜk_ad­‹r * $ü—‹_ad­‹r ( btd_ad­‹r * ad­‹r ) 867  ÃtwÜk_ad­‹r * Ç ; 868 GE¼Ü * ”r = NULL ; 870 Ç = `g_Ãw0 ( ÃtwÜk_ad­‹r , 1); 871 Ç -> ad­‹r = `btd_ad­‹r_»f (adapter); 873 Ç -> io = `bt_io_li¡’ ( NULL , cÚfœm_ev’t ,‚a, 874 NULL , & ”r , 875 BT_IO_OPT_SOURCE_BDADDR , 876 `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 877 BT_IO_OPT_PSM , BNEP_PSM , 878 BT_IO_OPT_OMTU , BNEP_MTU , 879 BT_IO_OPT_IMTU , BNEP_MTU , 880 BT_IO_OPT_SEC_LEVEL , 881 £cur™y ? BT_IO_SEC_MEDIUM : BT_IO_SEC_LOW , 882 BT_IO_OPT_INVALID ); 883 ià(! Ç -> io ) { 884 `”rÜ ("%s", ”r -> mes§ge ); 885 `g_”rÜ_ä“ ( ”r ); 886 `ad­‹r_ä“ ( Ç ); 887  NULL ; 890  Ç ; 891 } } 893  $£rv”_»gi¡” ( btd_ad­‹r * ad­‹r , ušt16_t id ) 895  ÃtwÜk_ad­‹r * Ç ; 896  ÃtwÜk_£rv” * ns ; 897 cÚ¡ * ·th ; 899 Ç = `fšd_ad­‹r ( ad­‹rs , ad­‹r ); 900 ià(! Ç ) { 901 Ç = `ü—‹_ad­‹r ( ad­‹r ); 902 ià(! Ç ) 903  - EINVAL ; 904 ad­‹rs = `g_¦i¡_­³nd ×d­‹rs, Ç ); 907 ns = `fšd_£rv” ( Ç -> £rv”s , id ); 908 ià( ns ) 911 ns = `g_Ãw0 ( ÃtwÜk_£rv” , 1); 913 ns -> Çme = `g_¡rdup ("Network service"); 915 ·th = `ad­‹r_g‘_·th ( ad­‹r ); 917 ià( `g_¦i¡_Ëngth ( Ç -> £rv”s ) > 0) 918  dÚe ; 920 #iâdeà __TIZEN_PATCH__ 921 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 922 ·th , NETWORK_SERVER_INTERFACE , 923 £rv”_m‘hods , NULL , NULL, 924 Ç , ·th_uÄegi¡” )) { 925 `”rÜ ("D-Bus failedo„egister %s interface", 926 NETWORK_SERVER_INTERFACE ); 927 `£rv”_ä“ ( ns ); 931 ns -> £ssiÚs = NULL ; 933 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 934 ·th , NETWORK_SERVER_INTERFACE , 935 £rv”_m‘hods , £rv”_sigÇls , 936 NULL , 937 Ç , ·th_uÄegi¡” )) { 938 `”rÜ ("D-Bus failedo„egister %s interface", 939 NETWORK_SERVER_INTERFACE ); 940 `£rv”_ä“ ( ns ); 945 `DBG ("Regi¡”ed iÁ”çû % Ú…©h %s", NETWORK_SERVER_INTERFACE , 946 ·th ); 948 dÚe : 949 `baýy (& ns -> ¤c , `btd_ad­‹r_g‘_add»ss ( ad­‹r )); 950 ns -> id = id; 951 ns -> Ç =‚a; 952 ns -> »cÜd_id = 0; 953 Ç -> £rv”s = `g_¦i¡_­³nd Òa->£rv”s, ns ); 956 } } 958  $£rv”_uÄegi¡” ( btd_ad­‹r * ad­‹r , ušt16_t id ) 960  ÃtwÜk_ad­‹r * Ç ; 961  ÃtwÜk_£rv” * ns ; 963 Ç = `fšd_ad­‹r ( ad­‹rs , ad­‹r ); 964 ià(! Ç ) 965  - EINVAL ; 967 ns = `fšd_£rv” ( Ç -> £rv”s , id ); 968 ià(! ns ) 969  - EINVAL ; 971 Ç -> £rv”s = `g_¦i¡_»move Òa->£rv”s, ns ); 972 `£rv”_ä“ ( ns ); 974 ià( `g_¦i¡_Ëngth ( Ç -> £rv”s ) > 0) 977 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 978 `ad­‹r_g‘_·th ( ad­‹r ), 979 NETWORK_SERVER_INTERFACE ); 982 } } @profiles/network/server.h 24  £rv”_š™ ( gboÞ—n £cu» ); 25  £rv”_»gi¡” ( btd_ad­‹r * ad­‹r , ušt16_t id ); 26  £rv”_uÄegi¡” ( btd_ad­‹r * ad­‹r , ušt16_t id ); @profiles/proximity/immalert.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<¡dboÞ.h > 29  ~ 31  ~ 32  ~ 34  ~"lib/uuid.h " 35  ~"¤c/log.h " 36  ~"¤c/ad­‹r.h " 37  ~"©Œib/g©Œib.h " 38  ~"©Œib/©t.h " 39  ~"©Œib/g©t.h " 40  ~"©Œib/©t-d©aba£.h " 41  ~"©Œib/g©t-£rviû.h " 42  ~"¤c/©Œib-£rv”.h " 43  ~"¤c/deviû.h " 44  ~"¤c/´ofže.h " 45  ~"¤c/©tio.h " 46  ~"¤c/dbus-commÚ.h " 48  ~"»pÜ‹r.h " 49  ~"imm®”t.h " 51  simm_®”t_ad­‹r { 52  btd_ad­‹r * mad­‹r ; 53 GSLi¡ * mcÚÃùed_deviûs ; 56  scÚÃùed_deviû { 57  btd_deviû * mdeviû ; 58  imm_®”t_ad­‹r * mad­‹r ; 59 ušt8_t m®”t_Ëv– ; 60 gušt mÿÎback_id ; 63  GSLi¡ * gimm_®”t_ad­‹rs ; 65  $imdeviû_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 67 cÚ¡  cÚÃùed_deviû * cÚdev = a ; 68 cÚ¡  btd_deviû * deviû = b ; 70 ià( cÚdev -> deviû == device) 74 } } 76  cÚÃùed_deviû * 77 $fšd_cÚÃùed_deviû ( imm_®”t_ad­‹r * Ÿ ,  btd_deviû * deviû ) 79 GSLi¡ * l = `g_¦i¡_fšd_cu¡om ( Ÿ -> cÚÃùed_deviûs , deviû , 80 imdeviû_cmp ); 81 ià(! l ) 82  NULL ; 84  l -> d©a ; 85 } } 87  $imad­‹r_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 89 cÚ¡  imm_®”t_ad­‹r * imad­‹r = a ; 90 cÚ¡  btd_ad­‹r * ad­‹r = b ; 92 ià( imad­‹r -> ad­‹r ==‡dapter) 96 } } 98  imm_®”t_ad­‹r * 99 $fšd_imm_®”t_ad­‹r ( btd_ad­‹r * ad­‹r ) 101 GSLi¡ * l = `g_¦i¡_fšd_cu¡om ( imm_®”t_ad­‹rs , ad­‹r , 102 imad­‹r_cmp ); 103 ià(! l ) 104  NULL ; 106  l -> d©a ; 107 } } 109 cÚ¡ * $imm_®”t_g‘_Ëv– ( btd_deviû * deviû ) 111  imm_®”t_ad­‹r * imad­‹r ; 112  cÚÃùed_deviû * cÚdev ; 114 ià(! deviû ) 115  `g‘_®”t_Ëv–_¡ršg ( NO_ALERT ); 117 imad­‹r = `fšd_imm_®”t_ad­‹r ( `deviû_g‘_ad­‹r ( deviû )); 118 ià(! imad­‹r ) 119  `g‘_®”t_Ëv–_¡ršg ( NO_ALERT ); 121 cÚdev = `fšd_cÚÃùed_deviû ( imad­‹r , deviû ); 122 ià(! cÚdev ) 123  `g‘_®”t_Ëv–_¡ršg ( NO_ALERT ); 125  `g‘_®”t_Ëv–_¡ršg ( cÚdev -> ®”t_Ëv– ); 126 } } 128  $imm_®”t_em™_®”t_sigÇl ( cÚÃùed_deviû * cÚdev , 129 ušt8_t ®”t_Ëv– ) 131 cÚ¡ * ·th , * ®”t_Ëv–_¡r ; 133 ià(! cÚdev ) 136 ·th = `deviû_g‘_·th ( cÚdev -> deviû ); 137 ®”t_Ëv–_¡r = `g‘_®”t_Ëv–_¡ršg ( ®”t_Ëv– ); 139 `DBG ("®”ˆ% »mÙ%s", ®”t_Ëv–_¡r , ·th ); 141 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), ·th , 142 PROXIMITY_REPORTER_INTERFACE , "ImmediateAlertLevel"); 143 } } 145  $imm_®”t_»move_cÚdev ( cÚÃùed_deviû * cÚdev ) 147  imm_®”t_ad­‹r * Ÿ ; 149 ià(! cÚdev ) 152 Ÿ = cÚdev -> ad­‹r ; 154 ià( cÚdev -> ÿÎback_id && cÚdev-> deviû ) 155 `btd_deviû_»move_©tio_ÿÎback ( cÚdev -> deviû , 156 cÚdev -> ÿÎback_id ); 158 ià( cÚdev -> deviû ) 159 `btd_deviû_uÄef ( cÚdev -> deviû ); 161 Ÿ -> cÚÃùed_deviûs = `g_¦i¡_»move (Ÿ->cÚÃùed_deviûs, cÚdev ); 162 `g_ä“ ( cÚdev ); 163 } } 166  $imm_®”t_disc_cb ( gpoš‹r u£r_d©a ) 168  cÚÃùed_deviû * cÚdev = u£r_d©a ; 170 ià(! cÚdev ) 173 `DBG ("immedŸ‹‡Ë¹„emovdeviû %p", cÚdev -> deviû ); 175 `imm_®”t_em™_®”t_sigÇl ( cÚdev , NO_ALERT ); 176 `imm_®”t_»move_cÚdev ( cÚdev ); 177 } } 179  ušt8_t $imm_®”t_®”t_lvl_wr™e ( ©Œibu‹ * a , 180  btd_deviû * deviû , gpoš‹r u£r_d©a ) 182 ušt8_t v®ue ; 183  imm_®”t_ad­‹r * Ÿ = u£r_d©a ; 184  cÚÃùed_deviû * cÚdev = NULL ; 186 ià(! deviû ) 187  £t_”rÜ ; 189 cÚdev = `fšd_cÚÃùed_deviû ( Ÿ , deviû ); 191 ià( a -> Ën == 0) { 192 `DBG ("Illegal‡lert†evel†ength"); 193  £t_”rÜ ; 196 v®ue = a -> d©a [0]; 197 ià( v®ue !ð NO_ALERT && v®u!ð MILD_ALERT && v®u!ð HIGH_ALERT ) { 198 `DBG ("Illegal‡lert value"); 199  £t_”rÜ ; 203 ià( v®ue !ð NO_ALERT && ! cÚdev ) { 204 cÚdev = `g_Ãw0 ( cÚÃùed_deviû , 1); 205 cÚdev -> deviû = `btd_deviû_»f (device); 206 cÚdev -> ad­‹r = Ÿ ; 207 cÚdev -> ÿÎback_id = `btd_deviû_add_©tio_ÿÎback ( deviû , 208 NULL , imm_®”t_disc_cb , cÚdev ); 209 Ÿ -> cÚÃùed_deviûs = `g_¦i¡_­³nd (ia->connected_devices, 210 cÚdev ); 211 `DBG ("added cÚÃùed dev %p", deviû ); 214 ià( v®ue !ð NO_ALERT ) { 215 cÚdev -> ®”t_Ëv– = v®ue ; 216 `imm_®”t_em™_®”t_sigÇl ( cÚdev , v®ue ); 223 ià( v®ue =ð NO_ALERT && cÚdev ) 224 `imm_®”t_disc_cb ( cÚdev ); 226 `DBG ("®”ˆËv– s‘Ø%d by deviû %p", v®ue , deviû ); 229 £t_”rÜ : 230 `”rÜ ("S‘ immedŸ‹‡Ë¹†ev– fÜ dev %p", deviû ); 232 `imm_®”t_disc_cb ( cÚdev ); 233  ATT_ECODE_IO ; 234 } } 236  $imm_®”t_»gi¡” ( btd_ad­‹r * ad­‹r ) 238 gboÞ—n svc_added ; 239 bt_uuid_t uuid ; 240  imm_®”t_ad­‹r * imad­‹r ; 242 `bt_uuid16_ü—‹ (& uuid , IMMEDIATE_ALERT_SVC_UUID ); 244 imad­‹r = `g_Ãw0 ( imm_®”t_ad­‹r , 1); 245 imad­‹r -> ad­‹r =‡dapter; 247 imm_®”t_ad­‹rs = `g_¦i¡_­³nd (imm_®”t_ad­‹rs, imad­‹r ); 250 svc_added = `g©t_£rviû_add ( ad­‹r , 251 GATT_PRIM_SVC_UUID , & uuid , 253 GATT_OPT_CHR_UUID16 , ALERT_LEVEL_CHR_UUID , 254 GATT_OPT_CHR_PROPS , 255 GATT_CHR_PROP_WRITE_WITHOUT_RESP , 256 GATT_OPT_CHR_VALUE_CB , ATTRIB_WRITE , 257 imm_®”t_®”t_lvl_wr™e , imad­‹r , 258 GATT_OPT_INVALID ); 260 ià(! svc_added ) { 261 `imm_®”t_uÄegi¡” ( ad­‹r ); 265 `DBG ("Immediate Alert service‡dded"); 266 } } 268  $»move_cÚdev_li¡_™em ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 270  cÚÃùed_deviû * cÚdev = d©a ; 272 `imm_®”t_»move_cÚdev ( cÚdev ); 273 } } 275  $imm_®”t_uÄegi¡” ( btd_ad­‹r * ad­‹r ) 277  imm_®”t_ad­‹r * imad­‹r ; 279 imad­‹r = `fšd_imm_®”t_ad­‹r ( ad­‹r ); 280 ià(! imad­‹r ) 283 `g_¦i¡_fÜ—ch ( imad­‹r -> cÚÃùed_deviûs , »move_cÚdev_li¡_™em , 284 NULL ); 286 imm_®”t_ad­‹rs = `g_¦i¡_»move (imm_®”t_ad­‹rs, imad­‹r ); 287 `g_ä“ ( imad­‹r ); 288 } } @profiles/proximity/immalert.h 24  imm_®”t_»gi¡” ( btd_ad­‹r * ad­‹r ); 25  imm_®”t_uÄegi¡” ( btd_ad­‹r * ad­‹r ); 26 cÚ¡ * imm_®”t_g‘_Ëv– ( btd_deviû * deviû ); @profiles/proximity/linkloss.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<¡dboÞ.h > 29  ~ 31  ~ 32  ~ 34  ~"lib/uuid.h " 35  ~"¤c/log.h " 36  ~"¤c/ad­‹r.h " 37  ~"¤c/deviû.h " 38  ~"©Œib/©t-d©aba£.h " 39  ~"©Œib/g©Œib.h " 40  ~"©Œib/©t.h " 41  ~"©Œib/g©t.h " 42  ~"©Œib/g©t-£rviû.h " 43  ~"¤c/©Œib-£rv”.h " 44  ~"¤c/£rviû.h " 45  ~"¤c/´ofže.h " 46  ~"¤c/©tio.h " 47  ~"¤c/dbus-commÚ.h " 49  ~"»pÜ‹r.h " 50  ~"lškloss.h " 52  slšk_loss_ad­‹r { 53  btd_ad­‹r * mad­‹r ; 54 ušt16_t m®”t_lvl_v®ue_hªdË ; 55 GSLi¡ * mcÚÃùed_deviûs ; 58  scÚÃùed_deviû { 59  btd_deviû * mdeviû ; 60  lšk_loss_ad­‹r * mad­‹r ; 61 ušt8_t m®”t_Ëv– ; 62 gušt mÿÎback_id ; 63 gušt mloÿl_disc_id ; 66  GSLi¡ * glšk_loss_ad­‹rs ; 68  $Îdeviû_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 70 cÚ¡  cÚÃùed_deviû * ÎcÚdev = a ; 71 cÚ¡  btd_deviû * deviû = b ; 73 ià( ÎcÚdev -> deviû == device) 77 } } 79  cÚÃùed_deviû * 80 $fšd_cÚÃùed_deviû ( lšk_loss_ad­‹r * Ï ,  btd_deviû * deviû ) 82 GSLi¡ * l = `g_¦i¡_fšd_cu¡om ( Ï -> cÚÃùed_deviûs , deviû , 83 Îdeviû_cmp ); 84 ià(! l ) 85  NULL ; 87  l -> d©a ; 88 } } 90  $Îad­‹r_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 92 cÚ¡  lšk_loss_ad­‹r * Îad­‹r = a ; 93 cÚ¡  btd_ad­‹r * ad­‹r = b ; 95 ià( Îad­‹r -> ad­‹r ==‡dapter) 99 } } 101  lšk_loss_ad­‹r * 102 $fšd_lšk_loss_ad­‹r ( btd_ad­‹r * ad­‹r ) 104 GSLi¡ * l = `g_¦i¡_fšd_cu¡om ( lšk_loss_ad­‹rs , ad­‹r , 105 Îad­‹r_cmp ); 106 ià(! l ) 107  NULL ; 109  l -> d©a ; 110 } } 112 cÚ¡ * $lšk_loss_g‘_®”t_Ëv– ( btd_deviû * deviû ) 114  lšk_loss_ad­‹r * Îad­‹r ; 115  cÚÃùed_deviû * cÚdev ; 117 ià(! deviû ) 118  `g‘_®”t_Ëv–_¡ršg ( NO_ALERT ); 120 Îad­‹r = `fšd_lšk_loss_ad­‹r ( `deviû_g‘_ad­‹r ( deviû )); 121 ià(! Îad­‹r ) 122  `g‘_®”t_Ëv–_¡ršg ( NO_ALERT ); 124 cÚdev = `fšd_cÚÃùed_deviû ( Îad­‹r , deviû ); 125 ià(! cÚdev ) 126  `g‘_®”t_Ëv–_¡ršg ( NO_ALERT ); 128  `g‘_®”t_Ëv–_¡ršg ( cÚdev -> ®”t_Ëv– ); 129 } } 131  $lšk_loss_em™_®”t_sigÇl ( cÚÃùed_deviû * cÚdev ) 133 cÚ¡ * ®”t_Ëv–_¡r , * ·th ; 135 ià(! cÚdev -> deviû ) 138 ·th = `deviû_g‘_·th ( cÚdev -> deviû ); 139 ®”t_Ëv–_¡r = `g‘_®”t_Ëv–_¡ršg ( cÚdev -> ®”t_Ëv– ); 141 `DBG ("®”ˆ% »mÙ%s", ®”t_Ëv–_¡r , ·th ); 143 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), ·th , 144 PROXIMITY_REPORTER_INTERFACE , "LinkLossAlertLevel"); 145 } } 147  ušt8_t $lšk_loss_®”t_lvl_»ad ( ©Œibu‹ * a , 148  btd_deviû * deviû , gpoš‹r u£r_d©a ) 150  lšk_loss_ad­‹r * Ï = u£r_d©a ; 151  cÚÃùed_deviû * cÚdev ; 152 ušt8_t ®”t_Ëv– = NO_ALERT ; 154 ià(! deviû ) 155  out ; 157 cÚdev = `fšd_cÚÃùed_deviû ( Ï , deviû ); 158 ià(! cÚdev ) 159  out ; 161 ®”t_Ëv– = cÚdev ->alert_level; 163 out : 164 `DBG ("»tuº‡Ë¹†ev– %d fÜ dev %p", ®”t_Ëv– , deviû ); 167 `©Œib_db_upd©e ( Ï -> ad­‹r , a -> hªdË , NULL , & ®”t_Ëv– , 168 ( ®”t_Ëv– ), NULL ); 171 } } 174  $lšk_loss_»move_cÚdev ( cÚÃùed_deviû * cÚdev ) 176  lšk_loss_ad­‹r * Ï ; 178 ià(! cÚdev ) 181 Ï = cÚdev -> ad­‹r ; 183 ià( cÚdev -> ÿÎback_id && cÚdev-> deviû ) 184 `btd_deviû_»move_©tio_ÿÎback ( cÚdev -> deviû , 185 cÚdev -> ÿÎback_id ); 187 ià( cÚdev -> loÿl_disc_id && cÚdev-> deviû ) 188 `deviû_»move_discÚÃù_w©ch ( cÚdev -> deviû , 189 cÚdev -> loÿl_disc_id ); 191 ià( cÚdev -> deviû ) 192 `btd_deviû_uÄef ( cÚdev -> deviû ); 194 Ï -> cÚÃùed_deviûs = `g_¦i¡_»move Öa->cÚÃùed_deviûs, cÚdev ); 195 `g_ä“ ( cÚdev ); 196 } } 198  $lšk_loss_disc_cb ( gpoš‹r u£r_d©a ) 200  cÚÃùed_deviû * cÚdev = u£r_d©a ; 202 `DBG ("®”ˆlos discÚÃù deviû %p", cÚdev -> deviû ); 205 ià( cÚdev -> ®”t_Ëv– !ð NO_ALERT ) 206 `lšk_loss_em™_®”t_sigÇl ( cÚdev ); 209 `lšk_loss_»move_cÚdev ( cÚdev ); 210 } } 212  $lšk_loss_loÿl_disc ( btd_deviû * deviû , 213 gboÞ—n »mov® , * u£r_d©a ) 215  cÚÃùed_deviû * cÚdev = u£r_d©a ; 218 `lšk_loss_»move_cÚdev ( cÚdev ); 220 `DBG ("®”ˆËv– z”Ûd f܆oÿÎy discÚÃùšg dev %p", deviû ); 221 } } 223  ušt8_t $lšk_loss_®”t_lvl_wr™e ( ©Œibu‹ * a , 224  btd_deviû * deviû , gpoš‹r u£r_d©a ) 226 ušt8_t v®ue ; 227  lšk_loss_ad­‹r * Ï = u£r_d©a ; 228  cÚÃùed_deviû * cÚdev = NULL ; 230 ià(! deviû ) 231  £t_”rÜ ; 234 cÚdev = `fšd_cÚÃùed_deviû ( Ï , deviû ); 236 ià( a -> Ën == 0) { 237 `DBG ("Illegal‡lert†evel†ength"); 238  £t_”rÜ ; 241 v®ue = a -> d©a [0]; 242 ià( v®ue !ð NO_ALERT && v®u!ð MILD_ALERT && v®u!ð HIGH_ALERT ) { 243 `DBG ("Illegal‡lert value"); 244  £t_”rÜ ; 248 ià( v®ue !ð NO_ALERT && ! cÚdev ) { 249 cÚdev = `g_Ãw0 ( cÚÃùed_deviû , 1); 250 cÚdev -> deviû = `btd_deviû_»f (device); 251 cÚdev -> ad­‹r = Ï ; 252 cÚdev -> ÿÎback_id = `btd_deviû_add_©tio_ÿÎback ( deviû , 253 NULL , lšk_loss_disc_cb , cÚdev ); 254 cÚdev -> loÿl_disc_id = `deviû_add_discÚÃù_w©ch ( deviû , 255 lšk_loss_loÿl_disc , cÚdev , NULL ); 257 Ï -> cÚÃùed_deviûs = `g_¦i¡_­³nd (la->connected_devices, 258 cÚdev ); 259 } ià( v®ue =ð NO_ALERT && cÚdev ) { 260 `lšk_loss_»move_cÚdev ( cÚdev ); 261 cÚdev = NULL ; 264 `DBG ("®”ˆËv– s‘Ø%d by deviû %p", v®ue , deviû ); 266 ià( cÚdev ) 267 cÚdev -> ®”t_Ëv– = v®ue ; 271 £t_”rÜ : 272 `”rÜ ("S‘†šk†os ®”ˆËv– fÜ dev %p", deviû ); 274 `lšk_loss_»move_cÚdev ( cÚdev ); 275  ATT_ECODE_IO ; 276 } } 278  $lšk_loss_»gi¡” ( btd_ad­‹r * ad­‹r ) 280 gboÞ—n svc_added ; 281 bt_uuid_t uuid ; 282  lšk_loss_ad­‹r * Îad­‹r ; 284 `bt_uuid16_ü—‹ (& uuid , LINK_LOSS_SVC_UUID ); 286 Îad­‹r = `g_Ãw0 ( lšk_loss_ad­‹r , 1); 287 Îad­‹r -> ad­‹r =‡dapter; 289 lšk_loss_ad­‹rs = `g_¦i¡_­³nd Öšk_loss_ad­‹rs, Îad­‹r ); 292 svc_added = `g©t_£rviû_add ( ad­‹r , 293 GATT_PRIM_SVC_UUID , & uuid , 295 GATT_OPT_CHR_UUID16 , ALERT_LEVEL_CHR_UUID , 296 GATT_OPT_CHR_PROPS , 297 GATT_CHR_PROP_READ | GATT_CHR_PROP_WRITE , 298 GATT_OPT_CHR_VALUE_CB , ATTRIB_READ , 299 lšk_loss_®”t_lvl_»ad , Îad­‹r , 300 GATT_OPT_CHR_VALUE_CB , ATTRIB_WRITE , 301 lšk_loss_®”t_lvl_wr™e , Îad­‹r , 302 GATT_OPT_CHR_VALUE_GET_HANDLE , 303 & Îad­‹r -> ®”t_lvl_v®ue_hªdË , 304 GATT_OPT_INVALID ); 306 ià(! svc_added ) 307  ”r ; 309 `DBG ("Link Loss service‡dded"); 312 ”r : 313 `”rÜ ("Error‡dding Link Loss service"); 314 `lšk_loss_uÄegi¡” ( ad­‹r ); 315 } } 317  $»move_cÚdev_li¡_™em ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 319  cÚÃùed_deviû * cÚdev = d©a ; 321 `lšk_loss_»move_cÚdev ( cÚdev ); 322 } } 324  $lšk_loss_uÄegi¡” ( btd_ad­‹r * ad­‹r ) 326  lšk_loss_ad­‹r * Îad­‹r ; 327 Îad­‹r = `fšd_lšk_loss_ad­‹r ( ad­‹r ); 328 ià(! Îad­‹r ) 331 `g_¦i¡_fÜ—ch ( Îad­‹r -> cÚÃùed_deviûs , »move_cÚdev_li¡_™em , 332 NULL ); 334 lšk_loss_ad­‹rs = `g_¦i¡_»move Öšk_loss_ad­‹rs, Îad­‹r ); 335 `g_ä“ ( Îad­‹r ); 336 } } @profiles/proximity/linkloss.h 24  lšk_loss_»gi¡” ( btd_ad­‹r * ad­‹r ); 25  lšk_loss_uÄegi¡” ( btd_ad­‹r * ad­‹r ); 26 cÚ¡ * lšk_loss_g‘_®”t_Ëv– ( btd_deviû * deviû ); @profiles/proximity/main.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<”ºo.h > 30  ~<¡dšt.h > 31  ~ 32  ~ 34  ~"¤c/log.h " 35  ~"¤c/¶ugš.h " 36  ~"mªag”.h " 38  GKeyFže * gcÚfig = NULL ; 40  GKeyFže * $Ý’_cÚfig_fže (cÚ¡ * fže ) 42 GE¼Ü * g”r = NULL ; 43 GKeyFže * keyfže ; 45 keyfže = `g_key_fže_Ãw (); 47 `g_key_fže_£t_li¡_£·¿tÜ ( keyfže , ','); 49 ià(! `g_key_fže_lßd_äom_fže ( keyfže , fže , 0, & g”r )) { 50 ià(! `g_”rÜ_m©ches ( g”r , G_FILE_ERROR , G_FILE_ERROR_NOENT )) 51 `”rÜ ("P¬sšg % çžed: %s", fže , g”r -> mes§ge ); 52 `g_”rÜ_ä“ ( g”r ); 53 `g_key_fže_ä“ ( keyfže ); 54  NULL ; 57  keyfže ; 58 } } 60  $´oxim™y_š™ () 62 cÚfig = `Ý’_cÚfig_fže ( CONFIGDIR "/proximity.conf"); 64 ià( `´oxim™y_mªag”_š™ ( cÚfig ) < 0) 65  - EIO ; 68 } } 70  $´oxim™y_ex™ () 72 ià( cÚfig ) 73 `g_key_fže_ä“ ( cÚfig ); 75 `´oxim™y_mªag”_ex™ (); 76 } } 78 BLUETOOTH_PLUGIN_DEFINE ( ´oxim™y , VERSION , 79 BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 80 ´oxim™y_š™ , ´oxim™y_ex™ ) @profiles/proximity/manager.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dboÞ.h > 31  ~ 32  ~ 34  ~"lib/uuid.h " 35  ~"¤c/ad­‹r.h " 36  ~"¤c/deviû.h " 37  ~"¤c/´ofže.h " 38  ~"¤c/£rviû.h " 39  ~"©Œib/©t.h " 40  ~"©Œib/g©Œib.h " 41  ~"©Œib/g©t.h " 42  ~"mÚ™Ü.h " 43  ~"»pÜ‹r.h " 44  ~"mªag”.h " 46  ’abËd g’abËd = { 47 . lškloss = TRUE , 48 . g·thloss = TRUE , 49 . gfšdme = TRUE , 52  $mÚ™Ü_lškloss_´obe ( btd_£rviû * £rviû ) 54  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 55  g©t_´im¬y * lškloss ; 57 lškloss = `btd_deviû_g‘_´im¬y ( deviû , LINK_LOSS_UUID ); 58 ià( lškloss =ð NULL ) 61  `mÚ™Ü_»gi¡”_lškloss ( deviû , & ’abËd , lškloss ); 62 } } 64  $mÚ™Ü_immedŸ‹_´obe ( btd_£rviû * £rviû ) 66  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 67  g©t_´im¬y * immedŸ‹ ; 69 immedŸ‹ = `btd_deviû_g‘_´im¬y ( deviû , IMMEDIATE_ALERT_UUID ); 70 ià( immedŸ‹ =ð NULL ) 73  `mÚ™Ü_»gi¡”_immedŸ‹ ( deviû , & ’abËd , immedŸ‹ ); 74 } } 76  $mÚ™Ü_txpow”_´obe ( btd_£rviû * £rviû ) 78  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 79  g©t_´im¬y * txpow” ; 81 txpow” = `btd_deviû_g‘_´im¬y ( deviû , TX_POWER_UUID ); 82 ià( txpow” =ð NULL ) 85  `mÚ™Ü_»gi¡”_txpow” ( deviû , & ’abËd , txpow” ); 86 } } 88  $mÚ™Ü_lškloss_»move ( btd_£rviû * £rviû ) 90  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 92 `mÚ™Ü_uÄegi¡”_lškloss ( deviû ); 93 } } 95  $mÚ™Ü_immedŸ‹_»move ( btd_£rviû * £rviû ) 97  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 99 `mÚ™Ü_uÄegi¡”_immedŸ‹ ( deviû ); 100 } } 102  $mÚ™Ü_txpow”_»move ( btd_£rviû * £rviû ) 104  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 106 `mÚ™Ü_uÄegi¡”_txpow” ( deviû ); 107 } } 109  btd_´ofže gpxp_mÚ™Ü_lškloss_´ofže = { 110 . Çme = "proximity-linkloss", 111 . g»mÙe_uuid = LINK_LOSS_UUID , 112 . gdeviû_´obe = mÚ™Ü_lškloss_´obe , 113 . gdeviû_»move = mÚ™Ü_lškloss_»move , 116  btd_´ofže gpxp_mÚ™Ü_immedŸ‹_´ofže = { 117 . Çme = "proximity-immediate", 118 . g»mÙe_uuid = IMMEDIATE_ALERT_UUID , 119 . gdeviû_´obe = mÚ™Ü_immedŸ‹_´obe , 120 . gdeviû_»move = mÚ™Ü_immedŸ‹_»move , 123  btd_´ofže gpxp_mÚ™Ü_txpow”_´ofže = { 124 . Çme = "proximity-txpower", 125 . g»mÙe_uuid = TX_POWER_UUID , 126 . gdeviû_´obe = mÚ™Ü_txpow”_´obe , 127 . gdeviû_»move = mÚ™Ü_txpow”_»move , 130  btd_´ofže gpxp_»pÜ‹r_´ofže = { 131 . Çme = "Proximity Reporter GATT Driver", 132 . g»mÙe_uuid = GATT_UUID , 133 . gdeviû_´obe = »pÜ‹r_deviû_´obe , 134 . gdeviû_»move = »pÜ‹r_deviû_»move , 136 . gad­‹r_´obe = »pÜ‹r_ad­‹r_´obe , 137 . gad­‹r_»move = »pÜ‹r_ad­‹r_»move , 140  $lßd_cÚfig_fže ( GKeyFže * cÚfig ) 142 ** li¡ ; 143  i ; 145 ià( cÚfig =ð NULL ) 148 li¡ = `g_key_fže_g‘_¡ršg_li¡ ( cÚfig , "General", "Disable", 149 NULL , NULL); 150  i = 0; li¡ &&†i¡[i] !ð NULL ; i++) { 151 ià( `g_¡r_equ® ( li¡ [ i ], "FindMe")) 152 ’abËd . fšdme = FALSE ; 153 ià( `g_¡r_equ® ( li¡ [ i ], "LinkLoss")) 154 ’abËd . lškloss = FALSE ; 155 ià( `g_¡r_equ® ( li¡ [ i ], "PathLoss")) 156 ’abËd . ·thloss = FALSE ; 159 `g_¡rä“v ( li¡ ); 160 } } 162  $´oxim™y_mªag”_š™ ( GKeyFže * cÚfig ) 164 `lßd_cÚfig_fže ( cÚfig ); 166 ià( `btd_´ofže_»gi¡” (& pxp_mÚ™Ü_lškloss_´ofže ) < 0) 167  çž ; 169 ià( `btd_´ofže_»gi¡” (& pxp_mÚ™Ü_immedŸ‹_´ofže ) < 0) 170  çž ; 172 ià( `btd_´ofže_»gi¡” (& pxp_mÚ™Ü_txpow”_´ofže ) < 0) 173  çž ; 175 ià( `btd_´ofže_»gi¡” (& pxp_»pÜ‹r_´ofže ) < 0) 176  çž ; 180 çž : 181 `´oxim™y_mªag”_ex™ (); 184 } } 186  $´oxim™y_mªag”_ex™ () 188 `btd_´ofže_uÄegi¡” (& pxp_»pÜ‹r_´ofže ); 189 `btd_´ofže_uÄegi¡” (& pxp_mÚ™Ü_txpow”_´ofže ); 190 `btd_´ofže_uÄegi¡” (& pxp_mÚ™Ü_immedŸ‹_´ofže ); 191 `btd_´ofže_uÄegi¡” (& pxp_mÚ™Ü_lškloss_´ofže ); 192 } } @profiles/proximity/manager.h 25  ´oxim™y_mªag”_š™ ( GKeyFže * cÚf ); 26  ´oxim™y_mªag”_ex™ (); @profiles/proximity/monitor.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<”ºo.h > 30  ~ 31  ~ 32  ~<¡dšt.h > 33  ~<¡dboÞ.h > 34  ~<¡dio.h > 35  ~<¡dlib.h > 36  ~ 37  ~ 39  ~ 41  ~"lib/uuid.h " 42  ~"¤c/dbus-commÚ.h " 43  ~"¤c/ad­‹r.h " 44  ~"¤c/deviû.h " 45  ~"¤c/”rÜ.h " 46  ~"¤c/log.h " 47  ~"©Œib/©t.h " 48  ~"©Œib/g©Œib.h " 49  ~"©Œib/g©t.h " 50  ~"¤c/©tio.h " 51  ~"¤c/‹xtfže.h " 53  ~"mÚ™Ü.h " 55  #PROXIMITY_INTERFACE "Üg.bluez.Proxim™yMÚ™Ü1" ) 57  #ALERT_LEVEL_CHR_UUID 0x2A06 ) 58  #POWER_LEVEL_CHR_UUID 0x2A07 ) 60  #IMMEDIATE_TIMEOUT 5 ) 61  #TX_POWER_SIZE 1 ) 64 mALERT_NONE = 0, 65 mALERT_MILD , 66 mALERT_HIGH , 69  smÚ™Ü { 70  btd_deviû * mdeviû ; 71 GA‰rib * m©Œib ; 72  ©t_¿nge * mlškloss ; 73  ©t_¿nge * mtxpow” ; 74  ©t_¿nge * mimmedŸ‹ ; 75  ’abËd m’abËd ; 76 * mlšklos¦ev– ; 77 * mçÎbackËv– ; 78 * mimmedŸ‹Ëv– ; 79 * msigÇÎev– ; 80 ušt16_t mlšklosshªdË ; 82 ušt16_t mtxpow”hªdË ; 83 ušt16_t mimmedŸ‹hªdË ; 84 gušt mimmedŸ‹to ; 85 gušt m©tioid ; 88  GSLi¡ * gmÚ™Üs = NULL ; 90  mÚ™Ü * $fšd_mÚ™Ü ( btd_deviû * deviû ) 92 GSLi¡ * l ; 94  l = mÚ™Üs ;†;† =†-> Ãxt ) { 95  mÚ™Ü *mÚ™Ü = l -> d©a ; 97 ià( mÚ™Ü -> deviû == device) 98  mÚ™Ü ; 101  NULL ; 102 } } 104  $wr™e_´oxim™y_cÚfig ( btd_deviû * deviû , cÚ¡ * ®”t , 105 cÚ¡ * Ëv– ) 107 * fž’ame ; 108 GKeyFže * key_fže ; 109 * d©a ; 110 gsize Ëngth = 0; 112 fž’ame = `btd_deviû_g‘_¡Üage_·th ( deviû , "proximity"); 113 ià(! fž’ame ) { 114 `w¬n ("Unableo get…roximity storage…ath for device"); 118 key_fže = `g_key_fže_Ãw (); 119 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 121 ià( Ëv– ) 122 `g_key_fže_£t_¡ršg ( key_fže , ®”t , "Lev–", Ëv– ); 124 `g_key_fže_»move_group ( key_fže , ®”t , NULL ); 126 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 127 ià( Ëngth > 0) { 128 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 129 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 132 `g_ä“ ( d©a ); 133 `g_ä“ ( fž’ame ); 134 `g_key_fže_ä“ ( key_fže ); 135 } } 137 * $»ad_´oxim™y_cÚfig ( btd_deviû * deviû , cÚ¡ * ®”t ) 139 * fž’ame ; 140 GKeyFže * key_fže ; 141 * ¡r ; 143 fž’ame = `btd_deviû_g‘_¡Üage_·th ( deviû , "proximity"); 144 ià(! fž’ame ) { 145 `w¬n ("Unableo get…roximity storage…ath for device"); 146  NULL ; 149 key_fže = `g_key_fže_Ãw (); 150 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 152 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , ®”t , "Lev–", NULL ); 154 `g_ä“ ( fž’ame ); 155 `g_key_fže_ä“ ( key_fže ); 157  ¡r ; 158 } } 160  ušt8_t $¡r2Ëv– (cÚ¡ * Ëv– ) 162 ià( `g_¡rcmp0 ("high", Ëv– ) == 0) 163  ALERT_HIGH ; 164 ià( `g_¡rcmp0 ("mžd", Ëv– ) == 0) 165  ALERT_MILD ; 167  ALERT_NONE ; 168 } } 170  $lškloss_wr™‹n ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 171 gpoš‹r u£r_d©a ) 173  mÚ™Ü *mÚ™Ü = u£r_d©a ; 174  btd_deviû * deviû = mÚ™Ü ->device; 175 cÚ¡ * ·th = `deviû_g‘_·th ( deviû ); 177 ià( ¡©us != 0) { 178 `”rÜ ("Link Loss Write Request failed: %s", 179 `©t_ecode2¡r ( ¡©us )); 183 ià(! `dec_wr™e_»¥ ( pdu , ¶’ )) { 184 `”rÜ ("Link Loss Write Request:…rotocolƒrror"); 188 `DBG ("Link Loss Alert Level written"); 190 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), ·th , 191 PROXIMITY_INTERFACE , "LinkLossAlertLevel"); 192 } } 194  $ch¬_discov”ed_cb ( ušt8_t ¡©us , GSLi¡ * ch¬aù”i¡ics , 195 * u£r_d©a ) 197  mÚ™Ü *mÚ™Ü = u£r_d©a ; 198  g©t_ch¬ * chr ; 199 ušt8_t v®ue = `¡r2Ëv– ( mÚ™Ü -> lšklos¦ev– ); 201 ià( ¡©us ) { 202 `”rÜ ("Discov” Lšk Los hªdË: %s", `©t_ecode2¡r ( ¡©us )); 206 `DBG ("S‘tšg‡Ë¹†ev– \"%s\" oÀR•Ü‹r", mÚ™Ü -> lšklos¦ev– ); 209 chr = ch¬aù”i¡ics -> d©a ; 210 mÚ™Ü -> lšklosshªdË = chr -> v®ue_hªdË ; 212 `g©t_wr™e_ch¬ ( mÚ™Ü -> ©Œib , mÚ™Ü-> lšklosshªdË , & v®ue , 1, 213 lškloss_wr™‹n , mÚ™Ü ); 214 } } 216  $wr™e_®”t_Ëv– ( mÚ™Ü *monitor) 218  ©t_¿nge * lškloss = mÚ™Ü ->linkloss; 219 bt_uuid_t uuid ; 221 ià( mÚ™Ü -> lšklosshªdË ) { 222 ušt8_t v®ue = `¡r2Ëv– ( mÚ™Ü -> lšklos¦ev– ); 224 `g©t_wr™e_ch¬ ( mÚ™Ü -> ©Œib , mÚ™Ü-> lšklosshªdË , 225 & v®ue , 1, lškloss_wr™‹n , mÚ™Ü ); 229 `bt_uuid16_ü—‹ (& uuid , ALERT_LEVEL_CHR_UUID ); 232 `g©t_discov”_ch¬ ( mÚ™Ü -> ©Œib , lškloss -> ¡¬t ,†škloss-> ’d , 233 & uuid , ch¬_discov”ed_cb , mÚ™Ü ); 236 } } 238  $tx_pow”_»ad_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 ¶’ , 239 gpoš‹r u£r_d©a ) 241 ušt8_t v®ue [ TX_POWER_SIZE ]; 242 ssize_t vËn ; 244 ià( ¡©us != 0) { 245 `DBG ("Tx Pow” Lev–„—d fažed: %s", `©t_ecode2¡r ( ¡©us )); 249 vËn = `dec_»ad_»¥ ( pdu , ¶’ , v®ue , (value)); 250 ià( vËn < 0) { 251 `DBG ("Protocolƒrror"); 255 ià( vËn != 1) { 256 `DBG ("Inv®id†’gth fÜ TX Pow” v®ue: %zd", vËn ); 260 `DBG ("Tx Pow” Lev–: %02x", ( št8_t è v®ue [0]); 261 } } 263  $tx_pow”_hªdË_cb ( ušt8_t ¡©us , GSLi¡ * ch¬aù”i¡ics , 264 * u£r_d©a ) 266  mÚ™Ü *mÚ™Ü = u£r_d©a ; 267  g©t_ch¬ * chr ; 269 ià( ¡©us ) { 270 `”rÜ ("Discov” Tx Pow” hªdË: %s", `©t_ecode2¡r ( ¡©us )); 274 chr = ch¬aù”i¡ics -> d©a ; 275 mÚ™Ü -> txpow”hªdË = chr -> v®ue_hªdË ; 277 `DBG ("Tx Pow” hªdË: 0x%04x", mÚ™Ü -> txpow”hªdË ); 279 `g©t_»ad_ch¬ ( mÚ™Ü -> ©Œib , mÚ™Ü-> txpow”hªdË , 280 tx_pow”_»ad_cb , mÚ™Ü ); 281 } } 283  $»ad_tx_pow” ( mÚ™Ü *monitor) 285  ©t_¿nge * txpow” = mÚ™Ü ->txpower; 286 bt_uuid_t uuid ; 288 ià( mÚ™Ü -> txpow”hªdË != 0) { 289 `g©t_»ad_ch¬ ( mÚ™Ü -> ©Œib , mÚ™Ü-> txpow”hªdË , 290 tx_pow”_»ad_cb , mÚ™Ü ); 294 `bt_uuid16_ü—‹ (& uuid , POWER_LEVEL_CHR_UUID ); 296 `g©t_discov”_ch¬ ( mÚ™Ü -> ©Œib , txpow” -> ¡¬t ,xpow”-> ’d , 297 & uuid , tx_pow”_hªdË_cb , mÚ™Ü ); 298 } } 300  gboÞ—n $immedŸ‹_timeout ( gpoš‹r u£r_d©a ) 302  mÚ™Ü *mÚ™Ü = u£r_d©a ; 303 cÚ¡ * ·th = `deviû_g‘_·th ( mÚ™Ü -> deviû ); 305 mÚ™Ü -> immedŸ‹to = 0; 307 ià( `g_¡rcmp0 ( mÚ™Ü -> immedŸ‹Ëv– , "none") == 0) 308  FALSE ; 310 ià( mÚ™Ü -> ©Œib ) { 311 ušt8_t v®ue = ALERT_NONE ; 312 `g©t_wr™e_cmd ( mÚ™Ü -> ©Œib , mÚ™Ü-> immedŸ‹hªdË , 313 & v®ue , 1, NULL , NULL); 316 `g_ä“ ( mÚ™Ü -> immedŸ‹Ëv– ); 317 mÚ™Ü -> immedŸ‹Ëv– = `g_¡rdup ("none"); 320 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), ·th , 321 PROXIMITY_INTERFACE , "ImmediateAlertLevel"); 323  FALSE ; 324 } } 326  $immedŸ‹_wr™‹n ( gpoš‹r u£r_d©a ) 328  mÚ™Ü *mÚ™Ü = u£r_d©a ; 329 cÚ¡ * ·th = `deviû_g‘_·th ( mÚ™Ü -> deviû ); 331 `g_ä“ ( mÚ™Ü -> çÎbackËv– ); 332 mÚ™Ü -> çÎbackËv– = NULL ; 335 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), ·th , 336 PROXIMITY_INTERFACE , "ImmediateAlertLevel"); 338 mÚ™Ü -> immedŸ‹to = `g_timeout_add_£cÚds ( IMMEDIATE_TIMEOUT , 339 immedŸ‹_timeout , mÚ™Ü ); 340 } } 342  $wr™e_immedŸ‹_®”t ( mÚ™Ü *monitor) 344 ušt8_t v®ue = `¡r2Ëv– ( mÚ™Ü -> immedŸ‹Ëv– ); 346 `g©t_wr™e_cmd ( mÚ™Ü -> ©Œib , mÚ™Ü-> immedŸ‹hªdË , & v®ue , 1, 347 immedŸ‹_wr™‹n , mÚ™Ü ); 348 } } 350  $immedŸ‹_hªdË_cb ( ušt8_t ¡©us , GSLi¡ * ch¬aù”i¡ics , 351 * u£r_d©a ) 353  mÚ™Ü *mÚ™Ü = u£r_d©a ; 354  g©t_ch¬ * chr ; 356 ià( ¡©us ) { 357 `”rÜ ("Discover Immediate Alert handle: %s", 358 `©t_ecode2¡r ( ¡©us )); 362 chr = ch¬aù”i¡ics -> d©a ; 363 mÚ™Ü -> immedŸ‹hªdË = chr -> v®ue_hªdË ; 365 `DBG ("ImmedŸ‹ A˹ hªdË: 0x%04x", mÚ™Ü -> immedŸ‹hªdË ); 367 ià( mÚ™Ü -> çÎbackËv– ) 368 `wr™e_immedŸ‹_®”t ( mÚ™Ü ); 369 } } 371  $discov”_immedŸ‹_hªdË ( mÚ™Ü *monitor) 373  ©t_¿nge * immedŸ‹ = mÚ™Ü ->immediate; 374 bt_uuid_t uuid ; 376 `bt_uuid16_ü—‹ (& uuid , ALERT_LEVEL_CHR_UUID ); 378 `g©t_discov”_ch¬ ( mÚ™Ü -> ©Œib , immedŸ‹ -> ¡¬t , immedŸ‹-> ’d , 379 & uuid , immedŸ‹_hªdË_cb , mÚ™Ü ); 380 } } 382  $©tio_cÚÃùed_cb ( GA‰rib * ©Œib , gpoš‹r u£r_d©a ) 384  mÚ™Ü *mÚ™Ü = u£r_d©a ; 386 mÚ™Ü -> ©Œib = `g_©Œib_»f (attrib); 388 ià( mÚ™Ü -> ’abËd . lškloss ) 389 `wr™e_®”t_Ëv– ( mÚ™Ü ); 391 ià( mÚ™Ü -> ’abËd . ·thloss ) 392 `»ad_tx_pow” ( mÚ™Ü ); 394 ià( mÚ™Ü -> immedŸ‹hªdË == 0) { 395 if( mÚ™Ü -> ’abËd . ·thloss || mÚ™Ü->’abËd. fšdme ) 396 `discov”_immedŸ‹_hªdË ( mÚ™Ü ); 397 } ià( mÚ™Ü -> çÎbackËv– ) 398 `wr™e_immedŸ‹_®”t ( mÚ™Ü ); 399 } } 401  $©tio_discÚÃùed_cb ( gpoš‹r u£r_d©a ) 403  mÚ™Ü *mÚ™Ü = u£r_d©a ; 404 cÚ¡ * ·th = `deviû_g‘_·th ( mÚ™Ü -> deviû ); 406 `g_©Œib_uÄef ( mÚ™Ü -> ©Œib ); 407 mÚ™Ü -> ©Œib = NULL ; 409 ià( mÚ™Ü -> immedŸ‹to == 0) 412 `g_sourû_»move ( mÚ™Ü -> immedŸ‹to ); 413 mÚ™Ü -> immedŸ‹to = 0; 415 ià( `g_¡rcmp0 ( mÚ™Ü -> immedŸ‹Ëv– , "none") == 0) 418 `g_ä“ ( mÚ™Ü -> immedŸ‹Ëv– ); 419 mÚ™Ü -> immedŸ‹Ëv– = `g_¡rdup ("none"); 421 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), ·th , 422 PROXIMITY_INTERFACE , "ImmediateAlertLevel"); 423 } } 425  gboÞ—n $Ëv–_is_v®id (cÚ¡ * Ëv– ) 427  ( `g_¡r_equ® ("nÚe", Ëv– ) || 428 `g_¡r_equ® ("mžd", Ëv– ) || 429 `g_¡r_equ® ("high", Ëv– )); 430 } } 432  gboÞ—n $´Ý”ty_g‘_lšk_loss_Ëv– (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 433 DBusMes§geI‹r * ™” , * d©a ) 435  mÚ™Ü *mÚ™Ü = d©a ; 437 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , 438 & mÚ™Ü -> lšklos¦ev– ); 440  TRUE ; 441 } } 443  $´Ý”ty_£t_lšk_loss_Ëv– (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 444 DBusMes§geI‹r * ™” , GDBusP’dšgPrÝ”tyS‘ id , * d©a ) 446  mÚ™Ü *mÚ™Ü = d©a ; 447 cÚ¡ * Ëv– ; 449 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) { 450 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 451 ERROR_INTERFACE ".InvalidArguments", 456 `dbus_mes§ge_™”_g‘_basic ( ™” , & Ëv– ); 458 ià(! `Ëv–_is_v®id ( Ëv– )) { 459 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 460 ERROR_INTERFACE ".InvalidArguments", 465 ià( `g_¡rcmp0 ( mÚ™Ü -> lšklos¦ev– , Ëv– ) == 0) 466  dÚe ; 468 `g_ä“ ( mÚ™Ü -> lšklos¦ev– ); 469 mÚ™Ü -> lšklos¦ev– = `g_¡rdup ( Ëv– ); 471 `wr™e_´oxim™y_cÚfig ( mÚ™Ü -> deviû , "LškLossA˹Lev–", Ëv– ); 473 ià( mÚ™Ü -> ©Œib ) 474 `wr™e_®”t_Ëv– ( mÚ™Ü ); 476 dÚe : 477 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 478 } } 480  gboÞ—n $´Ý”ty_exi¡s_lšk_loss_Ëv– ( 481 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 483  mÚ™Ü *mÚ™Ü = d©a ; 485 ià(! mÚ™Ü -> ’abËd . lškloss ) 486  FALSE ; 488  TRUE ; 489 } } 491  gboÞ—n $´Ý”ty_g‘_immedŸ‹_®”t_Ëv– ( 492 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 493 DBusMes§geI‹r * ™” , * d©a ) 495  mÚ™Ü *mÚ™Ü = d©a ; 497 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , 498 & mÚ™Ü -> immedŸ‹Ëv– ); 500  TRUE ; 501 } } 503  $´Ý”ty_£t_immedŸ‹_®”t_Ëv– ( 504 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , DBusMes§geI‹r * ™” , 505 GDBusP’dšgPrÝ”tyS‘ id , * d©a ) 507  mÚ™Ü *mÚ™Ü = d©a ; 508  btd_deviû * deviû = mÚ™Ü ->device; 509 cÚ¡ * Ëv– ; 511 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) { 512 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 513 ERROR_INTERFACE ".InvalidArguments", 518 `dbus_mes§ge_™”_g‘_basic ( ™” , & Ëv– ); 520 ià(! `Ëv–_is_v®id ( Ëv– )) { 521 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 522 ERROR_INTERFACE ".InvalidArguments", 527 ià( `g_¡rcmp0 ( mÚ™Ü -> immedŸ‹Ëv– , Ëv– ) == 0) 528  dÚe ; 530 ià( mÚ™Ü -> immedŸ‹to ) { 531 `g_sourû_»move ( mÚ™Ü -> immedŸ‹to ); 532 mÚ™Ü -> immedŸ‹to = 0; 536 `g_ä“ ( mÚ™Ü -> çÎbackËv– ); 537 mÚ™Ü -> çÎbackËv– = mÚ™Ü-> immedŸ‹Ëv– ; 539 mÚ™Ü -> immedŸ‹Ëv– = `g_¡rdup ( Ëv– ); 547 ià( mÚ™Ü -> ©tioid == 0) 548 mÚ™Ü -> ©tioid = `btd_deviû_add_©tio_ÿÎback ( deviû , 549 ©tio_cÚÃùed_cb , 550 ©tio_discÚÃùed_cb , 551 mÚ™Ü ); 552 ià( mÚ™Ü -> ©Œib ) 553 `wr™e_immedŸ‹_®”t ( mÚ™Ü ); 555 dÚe : 556 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 557 } } 559  gboÞ—n $´Ý”ty_exi¡s_immedŸ‹_®”t_Ëv– ( 560 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 562  mÚ™Ü *mÚ™Ü = d©a ; 564 ià(!( mÚ™Ü -> ’abËd . fšdme || mÚ™Ü->’abËd. ·thloss )) 565  FALSE ; 567  TRUE ; 568 } } 570  gboÞ—n $´Ý”ty_g‘_sigÇl_Ëv– ( 571 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 572 DBusMes§geI‹r * ™” , * d©a ) 574  mÚ™Ü *mÚ™Ü = d©a ; 576 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , 577 & mÚ™Ü -> sigÇÎev– ); 579  TRUE ; 580 } } 582  gboÞ—n $´Ý”ty_exi¡s_sigÇl_Ëv– (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 583 * d©a ) 585  mÚ™Ü *mÚ™Ü = d©a ; 587 ià(! mÚ™Ü -> ’abËd . ·thloss ) 588  FALSE ; 590  TRUE ; 591 } } 593 cÚ¡ GDBusPrÝ”tyTabË gmÚ™Ü_deviû_´Ý”t›s [] = { 594 { "LškLossA˹Lev–", "s", ´Ý”ty_g‘_lšk_loss_Ëv– , 595 ´Ý”ty_£t_lšk_loss_Ëv– , 596 ´Ý”ty_exi¡s_lšk_loss_Ëv– }, 597 { "ImmedŸ‹A˹Lev–", "s", ´Ý”ty_g‘_immedŸ‹_®”t_Ëv– , 598 ´Ý”ty_£t_immedŸ‹_®”t_Ëv– , 599 ´Ý”ty_exi¡s_immedŸ‹_®”t_Ëv– }, 600 { "SigÇlLev–", "s", ´Ý”ty_g‘_sigÇl_Ëv– , NULL , 601 ´Ý”ty_exi¡s_sigÇl_Ëv– }, 605  $mÚ™Ü_de¡roy ( gpoš‹r u£r_d©a ) 607  mÚ™Ü *mÚ™Ü = u£r_d©a ; 609 mÚ™Üs = `g_¦i¡_»move (mÚ™Üs, mÚ™Ü ); 611 `btd_deviû_uÄef ( mÚ™Ü -> deviû ); 612 `g_ä“ ( mÚ™Ü -> lšklos¦ev– ); 613 `g_ä“ ( mÚ™Ü -> immedŸ‹Ëv– ); 614 `g_ä“ ( mÚ™Ü -> sigÇÎev– ); 615 `g_ä“ ( mÚ™Ü ); 616 } } 618  mÚ™Ü * $»gi¡”_mÚ™Ü ( btd_deviû * deviû ) 620 cÚ¡ * ·th = `deviû_g‘_·th ( deviû ); 621  mÚ™Ü *monitor; 622 * Ëv– ; 624 mÚ™Ü = `fšd_mÚ™Ü ( deviû ); 625 ià( mÚ™Ü !ð NULL ) 626  mÚ™Ü ; 628 Ëv– = `»ad_´oxim™y_cÚfig ( deviû , "LinkLossAlertLevel"); 630 mÚ™Ü = `g_Ãw0 (monitor, 1); 631 mÚ™Ü -> deviû = `btd_deviû_»f (device); 632 mÚ™Ü -> lšklos¦ev– = ( Ëv– ? : `g_¡rdup ("high")); 633 mÚ™Ü -> sigÇÎev– = `g_¡rdup ("unknown"); 634 mÚ™Ü -> immedŸ‹Ëv– = `g_¡rdup ("none"); 636 mÚ™Üs = `g_¦i¡_­³nd (mÚ™Üs, mÚ™Ü ); 638 ià( `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), ·th , 639 PROXIMITY_INTERFACE , 640 NULL , NULL, mÚ™Ü_deviû_´Ý”t›s , 641 mÚ™Ü , mÚ™Ü_de¡roy è=ð FALSE ) { 642 `”rÜ ("D-Bus failedo„egister %s interface", 643 PROXIMITY_INTERFACE ); 644 `mÚ™Ü_de¡roy ( mÚ™Ü ); 645  NULL ; 648 `DBG ("Regi¡”ed iÁ”çû % Ú…©h %s", PROXIMITY_INTERFACE , ·th ); 650  mÚ™Ü ; 651 } } 653  $upd©e_mÚ™Ü ( mÚ™Ü *monitor) 655 ià( mÚ™Ü -> txpow” !ð NULL && mÚ™Ü-> immedŸ‹ != NULL) 656 mÚ™Ü -> ’abËd . ·thloss = TRUE ; 658 mÚ™Ü -> ’abËd . ·thloss = FALSE ; 660 `DBG ("Link Loss: %s, Path Loss: %s, FindMe: %s", 661 mÚ™Ü -> ’abËd . lškloss ? "TRUE" : "FALSE", 662 mÚ™Ü -> ’abËd . ·thloss ? "TRUE" : "FALSE", 663 mÚ™Ü -> ’abËd . fšdme ? "TRUE" : "FALSE"); 665 ià(! mÚ™Ü -> ’abËd . lškloss && !mÚ™Ü->’abËd. ·thloss ) 668 ià( mÚ™Ü -> ©tioid != 0) 671 mÚ™Ü -> ©tioid = `btd_deviû_add_©tio_ÿÎback (mÚ™Ü-> deviû , 672 ©tio_cÚÃùed_cb , 673 ©tio_discÚÃùed_cb , 674 mÚ™Ü ); 675 } } 677  $mÚ™Ü_»gi¡”_lškloss ( btd_deviû * deviû , 678  ’abËd *enabled, 679  g©t_´im¬y * lškloss ) 681  mÚ™Ü *monitor; 683 ià(! ’abËd -> lškloss ) 686 mÚ™Ü = `»gi¡”_mÚ™Ü ( deviû ); 687 ià( mÚ™Ü =ð NULL ) 690 mÚ™Ü -> lškloss = `g_Ãw0 ( ©t_¿nge , 1); 691 mÚ™Ü -> lškloss -> ¡¬t =†škloss-> ¿nge .start; 692 mÚ™Ü -> lškloss -> ’d =†škloss-> ¿nge .end; 693 mÚ™Ü -> ’abËd . lškloss = TRUE ; 695 `upd©e_mÚ™Ü ( mÚ™Ü ); 698 } } 700  $mÚ™Ü_»gi¡”_txpow” ( btd_deviû * deviû , 701  ’abËd *enabled, 702  g©t_´im¬y * txpow” ) 704  mÚ™Ü *monitor; 706 ià(! ’abËd -> ·thloss ) 709 mÚ™Ü = `»gi¡”_mÚ™Ü ( deviû ); 710 ià( mÚ™Ü =ð NULL ) 713 mÚ™Ü -> txpow” = `g_Ãw0 ( ©t_¿nge , 1); 714 mÚ™Ü -> txpow” -> ¡¬t =xpow”-> ¿nge .start; 715 mÚ™Ü -> txpow” -> ’d =xpow”-> ¿nge .end; 717 `upd©e_mÚ™Ü ( mÚ™Ü ); 720 } } 722  $mÚ™Ü_»gi¡”_immedŸ‹ ( btd_deviû * deviû , 723  ’abËd *enabled, 724  g©t_´im¬y * immedŸ‹ ) 726  mÚ™Ü *monitor; 728 ià(! ’abËd -> ·thloss && !’abËd-> fšdme ) 731 mÚ™Ü = `»gi¡”_mÚ™Ü ( deviû ); 732 ià( mÚ™Ü =ð NULL ) 735 mÚ™Ü -> immedŸ‹ = `g_Ãw0 ( ©t_¿nge , 1); 736 mÚ™Ü -> immedŸ‹ -> ¡¬t = immedŸ‹-> ¿nge .start; 737 mÚ™Ü -> immedŸ‹ -> ’d = immedŸ‹-> ¿nge .end; 738 mÚ™Ü -> ’abËd . fšdme =ƒnabled->findme; 740 `upd©e_mÚ™Ü ( mÚ™Ü ); 743 } } 745  $þ—nup_mÚ™Ü ( mÚ™Ü *monitor) 747  btd_deviû * deviû = mÚ™Ü ->device; 748 cÚ¡ * ·th = `deviû_g‘_·th ( deviû ); 750 ià( mÚ™Ü -> immedŸ‹ !ð NULL || mÚ™Ü-> txpow” != NULL) 753 ià( mÚ™Ü -> immedŸ‹to != 0) { 754 `g_sourû_»move ( mÚ™Ü -> immedŸ‹to ); 755 mÚ™Ü -> immedŸ‹to = 0; 758 ià( mÚ™Ü -> lškloss !ð NULL ) 761 ià( mÚ™Ü -> ©tioid != 0) { 762 `btd_deviû_»move_©tio_ÿÎback ( deviû , mÚ™Ü -> ©tioid ); 763 mÚ™Ü -> ©tioid = 0; 766 ià( mÚ™Ü -> ©Œib !ð NULL ) { 767 `g_©Œib_uÄef ( mÚ™Ü -> ©Œib ); 768 mÚ™Ü -> ©Œib = NULL ; 771 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), ·th , 772 PROXIMITY_INTERFACE ); 773 } } 775  $mÚ™Ü_uÄegi¡”_lškloss ( btd_deviû * deviû ) 777  mÚ™Ü *monitor; 779 mÚ™Ü = `fšd_mÚ™Ü ( deviû ); 780 ià( mÚ™Ü =ð NULL ) 783 `g_ä“ ( mÚ™Ü -> lškloss ); 784 mÚ™Ü -> lškloss = NULL ; 785 mÚ™Ü -> ’abËd . lškloss = FALSE ; 787 `þ—nup_mÚ™Ü ( mÚ™Ü ); 788 } } 790  $mÚ™Ü_uÄegi¡”_txpow” ( btd_deviû * deviû ) 792  mÚ™Ü *monitor; 794 mÚ™Ü = `fšd_mÚ™Ü ( deviû ); 795 ià( mÚ™Ü =ð NULL ) 798 `g_ä“ ( mÚ™Ü -> txpow” ); 799 mÚ™Ü -> txpow” = NULL ; 800 mÚ™Ü -> ’abËd . ·thloss = FALSE ; 802 `þ—nup_mÚ™Ü ( mÚ™Ü ); 803 } } 805  $mÚ™Ü_uÄegi¡”_immedŸ‹ ( btd_deviû * deviû ) 807  mÚ™Ü *monitor; 809 mÚ™Ü = `fšd_mÚ™Ü ( deviû ); 810 ià( mÚ™Ü =ð NULL ) 813 `g_ä“ ( mÚ™Ü -> immedŸ‹ ); 814 mÚ™Ü -> immedŸ‹ = NULL ; 815 mÚ™Ü -> ’abËd . fšdme = FALSE ; 816 mÚ™Ü -> ’abËd . ·thloss = FALSE ; 818 `þ—nup_mÚ™Ü ( mÚ™Ü ); 819 } } @profiles/proximity/monitor.h 25  s’abËd { 26 gboÞ—n mlškloss ; 27 gboÞ—n m·thloss ; 28 gboÞ—n mfšdme ; 31  mÚ™Ü_»gi¡”_lškloss ( btd_deviû * deviû , 32  ’abËd *enabled, 33  g©t_´im¬y * lškloss ); 34  mÚ™Ü_»gi¡”_txpow” ( btd_deviû * deviû , 35  ’abËd *enabled, 36  g©t_´im¬y * txpow” ); 37  mÚ™Ü_»gi¡”_immedŸ‹ ( btd_deviû * deviû , 38  ’abËd *enabled, 39  g©t_´im¬y * immedŸ‹ ); 41  mÚ™Ü_uÄegi¡”_lškloss ( btd_deviû * deviû ); 42  mÚ™Ü_uÄegi¡”_txpow” ( btd_deviû * deviû ); 43  mÚ™Ü_uÄegi¡”_immedŸ‹ ( btd_deviû * deviû ); @profiles/proximity/reporter.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dboÞ.h > 30  ~<”ºo.h > 32  ~ 34  ~ 35  ~ 37  ~"¤c/log.h " 39  ~"lib/uuid.h " 40  ~"¤c/dbus-commÚ.h " 41  ~"¤c/ad­‹r.h " 42  ~"¤c/deviû.h " 43  ~"¤c/´ofže.h " 44  ~"¤c/£rviû.h " 45  ~"¤c/sh¬ed/utž.h " 46  ~"©Œib/g©Œib.h " 47  ~"©Œib/©t.h " 48  ~"©Œib/g©t.h " 49  ~"©Œib/©t-d©aba£.h " 50  ~"¤c/©Œib-£rv”.h " 52  ~"»pÜ‹r.h " 53  ~"lškloss.h " 54  ~"imm®”t.h " 56  s»pÜ‹r_ad­‹r { 57  btd_ad­‹r * mad­‹r ; 58 GSLi¡ * mdeviûs ; 61  GSLi¡ * g»pÜ‹r_ad­‹rs ; 63  $¿d­‹r_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 65 cÚ¡  »pÜ‹r_ad­‹r * ¿d­‹r = a ; 66 cÚ¡  btd_ad­‹r * ad­‹r = b ; 68 ià( ¿d­‹r -> ad­‹r ==‡dapter) 72 } } 74  »pÜ‹r_ad­‹r * 75 $fšd_»pÜ‹r_ad­‹r ( btd_ad­‹r * ad­‹r ) 77 GSLi¡ * l = `g_¦i¡_fšd_cu¡om ( »pÜ‹r_ad­‹rs , ad­‹r , 78 ¿d­‹r_cmp ); 79 ià(! l ) 80  NULL ; 82  l -> d©a ; 83 } } 85 cÚ¡ * $g‘_®”t_Ëv–_¡ršg ( ušt8_t Ëv– ) 87  Ëv– ) { 88  NO_ALERT : 90  MILD_ALERT : 92  HIGH_ALERT : 97 } } 99  $»gi¡”_tx_pow” ( btd_ad­‹r * ad­‹r ) 101 ušt16_t ¡¬t_hªdË , h ; 102 cÚ¡  svc_size = 4; 103 ušt8_t ©v® [256]; 104 bt_uuid_t uuid ; 106 `bt_uuid16_ü—‹ (& uuid , TX_POWER_SVC_UUID ); 107 ¡¬t_hªdË = `©Œib_db_fšd_avaž ( ad­‹r , & uuid , svc_size ); 108 ià( ¡¬t_hªdË == 0) { 109 `”rÜ ("Notƒnough free handleso„egister service"); 113 `DBG ("¡¬t_hªdË=0x%04x", ¡¬t_hªdË ); 115 h = ¡¬t_hªdË ; 118 `bt_uuid16_ü—‹ (& uuid , GATT_PRIM_SVC_UUID ); 119 `put_Ë16 ( TX_POWER_SVC_UUID , & ©v® [0]); 120 `©Œib_db_add ( ad­‹r , h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , ©v® , 2); 123 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_UUID ); 124 ©v® [0] = GATT_CHR_PROP_READ | GATT_CHR_PROP_NOTIFY ; 125 `put_Ë16 ( h + 1, & ©v® [1]); 126 `put_Ë16 ( POWER_LEVEL_CHR_UUID , & ©v® [3]); 127 `©Œib_db_add ( ad­‹r , h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , ©v® , 5); 130 `bt_uuid16_ü—‹ (& uuid , POWER_LEVEL_CHR_UUID ); 131 ©v® [0] = 0x00; 132 `©Œib_db_add ( ad­‹r , h ++, & uuid , ATT_NONE , ATT_NOT_PERMITTED , ©v® , 1); 135 `bt_uuid16_ü—‹ (& uuid , GATT_CLIENT_CHARAC_CFG_UUID ); 136 ©v® [0] = 0x00; 137 ©v® [1] = 0x00; 138 `©Œib_db_add ( ad­‹r , h ++, & uuid , ATT_NONE , ATT_NONE, ©v® , 2); 140 `g_as£¹ ( h - ¡¬t_hªdË =ð svc_size ); 141 } } 143  gboÞ—n $´Ý”ty_g‘_lšk_loss_Ëv– (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 144 DBusMes§geI‹r * ™” , * d©a ) 146  btd_deviû * deviû = d©a ; 147 cÚ¡ * Ëv– ; 149 Ëv– = `lšk_loss_g‘_®”t_Ëv– ( deviû ); 151 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & Ëv– ); 153  TRUE ; 154 } } 156  gboÞ—n $´Ý”ty_g‘_immedŸ‹_®”t_Ëv– ( 157 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 158 DBusMes§geI‹r * ™” , * d©a ) 160  btd_deviû * deviû = d©a ; 161 cÚ¡ * Ëv– ; 163 Ëv– = `imm_®”t_g‘_Ëv– ( deviû ); 165 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & Ëv– ); 167  TRUE ; 168 } } 170 cÚ¡ GDBusPrÝ”tyTabË g»pÜ‹r_deviû_´Ý”t›s [] = { 171 { "LškLossA˹Lev–", "s", ´Ý”ty_g‘_lšk_loss_Ëv– }, 172 { "ImmedŸ‹A˹Lev–", "s", ´Ý”ty_g‘_immedŸ‹_®”t_Ëv– }, 176  $uÄegi¡”_»pÜ‹r_deviû ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 178  btd_deviû * deviû = d©a ; 179  »pÜ‹r_ad­‹r * ¿d­‹r = u£r_d©a ; 180 cÚ¡ * ·th = `deviû_g‘_·th ( deviû ); 182 `DBG ("uÄegi¡” oÀdeviû %s", ·th ); 184 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), ·th , 185 PROXIMITY_REPORTER_INTERFACE ); 187 ¿d­‹r -> deviûs = `g_¦i¡_»move Ôad­‹r->deviûs, deviû ); 188 `btd_deviû_uÄef ( deviû ); 189 } } 191  $»gi¡”_»pÜ‹r_deviû ( btd_deviû * deviû , 192  »pÜ‹r_ad­‹r * ¿d­‹r ) 194 cÚ¡ * ·th = `deviû_g‘_·th ( deviû ); 196 `DBG ("»gi¡” oÀdeviû %s", ·th ); 198 `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), ·th , 199 PROXIMITY_REPORTER_INTERFACE , 200 NULL , NULL, »pÜ‹r_deviû_´Ý”t›s , 201 deviû , NULL ); 203 `btd_deviû_»f ( deviû ); 204 ¿d­‹r -> deviûs = `g_¦i¡_´•’d Ôad­‹r->deviûs, deviû ); 205 } } 207  $»pÜ‹r_deviû_´obe ( btd_£rviû * £rviû ) 209  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 210  »pÜ‹r_ad­‹r * ¿d­‹r ; 211  btd_ad­‹r * ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 213 ¿d­‹r = `fšd_»pÜ‹r_ad­‹r ( ad­‹r ); 214 ià(! ¿d­‹r ) 217 `»gi¡”_»pÜ‹r_deviû ( deviû , ¿d­‹r ); 220 } } 222  $»pÜ‹r_deviû_»move ( btd_£rviû * £rviû ) 224  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 225  »pÜ‹r_ad­‹r * ¿d­‹r ; 226  btd_ad­‹r * ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 228 ¿d­‹r = `fšd_»pÜ‹r_ad­‹r ( ad­‹r ); 229 ià(! ¿d­‹r ) 232 `uÄegi¡”_»pÜ‹r_deviû ( deviû , ¿d­‹r ); 233 } } 235  $»pÜ‹r_ad­‹r_´obe ( btd_´ofže * p ,  btd_ad­‹r * ad­‹r ) 237  »pÜ‹r_ad­‹r * ¿d­‹r ; 239 ¿d­‹r = `g_Ãw0 ( »pÜ‹r_ad­‹r , 1); 240 ¿d­‹r -> ad­‹r =‡dapter; 242 `lšk_loss_»gi¡” ( ad­‹r ); 243 `»gi¡”_tx_pow” ( ad­‹r ); 244 `imm_®”t_»gi¡” ( ad­‹r ); 246 »pÜ‹r_ad­‹rs = `g_¦i¡_´•’d Ô•Ü‹r_ad­‹rs, ¿d­‹r ); 247 `DBG ("Proxim™y R•Ü‹¸f܇d­‹¸%p", ad­‹r ); 250 } } 252  $»pÜ‹r_ad­‹r_»move ( btd_´ofže * p , 253  btd_ad­‹r * ad­‹r ) 255  »pÜ‹r_ad­‹r * ¿d­‹r = `fšd_»pÜ‹r_ad­‹r ( ad­‹r ); 256 ià(! ¿d­‹r ) 259 `g_¦i¡_fÜ—ch ( ¿d­‹r -> deviûs , uÄegi¡”_»pÜ‹r_deviû , 260 ¿d­‹r ); 262 `lšk_loss_uÄegi¡” ( ad­‹r ); 263 `imm_®”t_uÄegi¡” ( ad­‹r ); 265 »pÜ‹r_ad­‹rs = `g_¦i¡_»move Ô•Ü‹r_ad­‹rs, ¿d­‹r ); 266 `g_ä“ ( ¿d­‹r ); 267 } } @profiles/proximity/reporter.h 25  #PROXIMITY_REPORTER_INTERFACE "Üg.bluez.Proxim™yR•Ü‹r1" ) 27  #IMMEDIATE_ALERT_SVC_UUID 0x1802 ) 28  #LINK_LOSS_SVC_UUID 0x1803 ) 29  #TX_POWER_SVC_UUID 0x1804 ) 30  #ALERT_LEVEL_CHR_UUID 0x2A06 ) 31  #POWER_LEVEL_CHR_UUID 0x2A07 ) 34 mNO_ALERT = 0x00, 35 mMILD_ALERT = 0x01, 36 mHIGH_ALERT = 0x02, 39  »pÜ‹r_deviû_»move ( btd_£rviû * £rviû ); 40  »pÜ‹r_deviû_´obe ( btd_£rviû * £rviû ); 42  »pÜ‹r_ad­‹r_´obe ( btd_´ofže * p ,  btd_ad­‹r * ad­‹r ); 43  »pÜ‹r_ad­‹r_»move ( btd_´ofže * p , 44  btd_ad­‹r * ad­‹r ); 46 cÚ¡ * g‘_®”t_Ëv–_¡ršg ( ušt8_t Ëv– ); @profiles/sap/main.c 21 #ifdeà HAVE_CONFIG_H 22  ~ 25  ~<”ºo.h > 26  ~ 27  ~"¤c/¶ugš.h " 28  ~"mªag”.h " 30  $§p_š™ () 32  `§p_mªag”_š™ (); 33 } } 35  $§p_ex™ () 37 `§p_mªag”_ex™ (); 38 } } 40 BLUETOOTH_PLUGIN_DEFINE ( §p , VERSION , 41 BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , §p_š™ , §p_ex™ ) @profiles/sap/manager.c 21 #ifdeà HAVE_CONFIG_H 22  ~ 25  ~<¡dboÞ.h > 27  ~"¤c/log.h " 28  ~"¤c/ad­‹r.h " 29  ~"¤c/deviû.h " 30  ~"¤c/´ofže.h " 31  ~"¤c/£rviû.h " 33  ~"mªag”.h " 34  ~"£rv”.h " 36  $§p_£rv”_´obe ( btd_´ofže * p ,  btd_ad­‹r * ad­‹r ) 38 `DBG ("·th %s", `ad­‹r_g‘_·th ( ad­‹r )); 40  `§p_£rv”_»gi¡” ( ad­‹r ); 41 } } 43  $§p_£rv”_»move ( btd_´ofže * p , 44  btd_ad­‹r * ad­‹r ) 46 cÚ¡ * ·th = `ad­‹r_g‘_·th ( ad­‹r ); 48 `DBG ("·th %s", ·th ); 50 `§p_£rv”_uÄegi¡” ( ·th ); 51 } } 53  btd_´ofže g§p_´ofže = { 54 . Çme = "sap-server", 55 . gad­‹r_´obe = §p_£rv”_´obe , 56 . gad­‹r_»move = §p_£rv”_»move , 59  $§p_mªag”_š™ () 61 `btd_´ofže_»gi¡” (& §p_´ofže ); 64 } } 66  $§p_mªag”_ex™ () 68 `btd_´ofže_uÄegi¡” (& §p_´ofže ); 69 } } @profiles/sap/manager.h 21  §p_mªag”_š™ (); 22  §p_mªag”_ex™ (); @profiles/sap/sap-dummy.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~ 30  ~ 31  ~<¡dšt.h > 33  ~"¤c/dbus-commÚ.h " 34  ~"¤c/”rÜ.h " 35  ~"¤c/log.h " 36  ~"§p.h " 38  #SAP_DUMMY_IFACE "Üg.bluez.SimAcûssTe¡1" ) 39  #SAP_DUMMY_PATH "/Üg/bluez/‹¡" ) 42 mSIM_DISCONNECTED = 0x00, 43 mSIM_CONNECTED = 0x01, 44 mSIM_POWERED_OFF = 0x02, 45 mSIM_MISSING = 0x03 48  gš™_út = 0; 50  gsim_ÿrd_cÚn_¡©us = SIM_DISCONNECTED ; 51 * g§p_d©a = NULL ; 52  gboÞ—n gÚgošg_ÿÎ_¡©us = FALSE ; 53  gmax_msg_size_suµÜ‹d = 512; 55  $§p_cÚÃù_»q (* §p_deviû , ušt16_t maxmsgsize ) 57 `DBG ("¡©us: %d", sim_ÿrd_cÚn_¡©us ); 59 ià( sim_ÿrd_cÚn_¡©us !ð SIM_DISCONNECTED ) { 60 `§p_cÚÃù_r¥ ( §p_deviû , SAP_STATUS_CONNECTION_FAILED ); 64 ià( max_msg_size_suµÜ‹d > maxmsgsize ) { 65 `§p_cÚÃù_r¥ ( §p_deviû , SAP_STATUS_MAX_MSG_SIZE_TOO_SMALL ); 69 ià( max_msg_size_suµÜ‹d < maxmsgsize ) { 70 `§p_cÚÃù_r¥ ( §p_deviû , 71 SAP_STATUS_MAX_MSG_SIZE_NOT_SUPPORTED ); 75 ià( Úgošg_ÿÎ_¡©us ) { 76 `§p_cÚÃù_r¥ ( §p_deviû , SAP_STATUS_OK_ONGOING_CALL ); 80 sim_ÿrd_cÚn_¡©us = SIM_CONNECTED ; 81 §p_d©a = §p_deviû ; 83 `§p_cÚÃù_r¥ ( §p_deviû , SAP_STATUS_OK ); 84 `§p_¡©us_šd ( §p_deviû , SAP_STATUS_CHANGE_CARD_RESET ); 85 } } 87  $§p_discÚÃù_»q (* §p_deviû , ušt8_t lškloss ) 89 sim_ÿrd_cÚn_¡©us = SIM_DISCONNECTED ; 90 §p_d©a = NULL ; 91 Úgošg_ÿÎ_¡©us = FALSE ; 93 `DBG ("¡©us: %d", sim_ÿrd_cÚn_¡©us ); 95 ià( lškloss ) 98 `§p_discÚÃù_r¥ ( §p_deviû ); 99 } } 101  $§p_Œªsãr_­du_»q (* §p_deviû ,  §p_·¿m‘” * ·¿m ) 103  ­du [] = "APDU„esponse!"; 105 `DBG ("¡©us: %d", sim_ÿrd_cÚn_¡©us ); 107  sim_ÿrd_cÚn_¡©us ) { 108  SIM_MISSING : 109 `§p_Œªsãr_­du_r¥ ( §p_deviû , 110 SAP_RESULT_ERROR_CARD_REMOVED , NULL , 0); 112  SIM_POWERED_OFF : 113 `§p_Œªsãr_­du_r¥ ( §p_deviû , SAP_RESULT_ERROR_POWERED_OFF , 114 NULL , 0); 116  SIM_DISCONNECTED : 117 `§p_Œªsãr_­du_r¥ ( §p_deviû , 118 SAP_RESULT_ERROR_NOT_ACCESSIBLE , NULL , 0); 120  SIM_CONNECTED : 121 `§p_Œªsãr_­du_r¥ ( §p_deviû , SAP_RESULT_OK , 122 ( ušt8_t *) ­du , (apdu)); 125 } } 127  $§p_Œªsãr_©r_»q (* §p_deviû ) 129  ©r [] = "ATR„esponse!"; 131 `DBG ("¡©us: %d", sim_ÿrd_cÚn_¡©us ); 133  sim_ÿrd_cÚn_¡©us ) { 134  SIM_MISSING : 135 `§p_Œªsãr_©r_r¥ ( §p_deviû , SAP_RESULT_ERROR_CARD_REMOVED , 136 NULL , 0); 138  SIM_POWERED_OFF : 139 `§p_Œªsãr_©r_r¥ ( §p_deviû , SAP_RESULT_ERROR_POWERED_OFF , 140 NULL , 0); 142  SIM_DISCONNECTED : 143 `§p_Œªsãr_©r_r¥ ( §p_deviû , SAP_RESULT_ERROR_NO_REASON , 144 NULL , 0); 146  SIM_CONNECTED : 147 `§p_Œªsãr_©r_r¥ ( §p_deviû , SAP_RESULT_OK , 148 ( ušt8_t *) ©r , (atr)); 151 } } 153  $§p_pow”_sim_off_»q (* §p_deviû ) 155 `DBG ("¡©us: %d", sim_ÿrd_cÚn_¡©us ); 157  sim_ÿrd_cÚn_¡©us ) { 158  SIM_MISSING : 159 `§p_pow”_sim_off_r¥ ( §p_deviû , 160 SAP_RESULT_ERROR_CARD_REMOVED ); 162  SIM_POWERED_OFF : 163 `§p_pow”_sim_off_r¥ ( §p_deviû , 164 SAP_RESULT_ERROR_POWERED_OFF ); 166  SIM_DISCONNECTED : 167 `§p_pow”_sim_off_r¥ ( §p_deviû , SAP_RESULT_ERROR_NO_REASON ); 169  SIM_CONNECTED : 170 `§p_pow”_sim_off_r¥ ( §p_deviû , SAP_RESULT_OK ); 171 sim_ÿrd_cÚn_¡©us = SIM_POWERED_OFF ; 174 } } 176  $§p_pow”_sim_Ú_»q (* §p_deviû ) 178 `DBG ("¡©us: %d", sim_ÿrd_cÚn_¡©us ); 180  sim_ÿrd_cÚn_¡©us ) { 181  SIM_MISSING : 182 `§p_pow”_sim_Ú_r¥ ( §p_deviû , 183 SAP_RESULT_ERROR_CARD_REMOVED ); 185  SIM_POWERED_OFF : 186 `§p_pow”_sim_Ú_r¥ ( §p_deviû , SAP_RESULT_OK ); 187 sim_ÿrd_cÚn_¡©us = SIM_CONNECTED ; 189  SIM_DISCONNECTED : 190 `§p_pow”_sim_Ú_r¥ ( §p_deviû , 191 SAP_RESULT_ERROR_NOT_ACCESSIBLE ); 193  SIM_CONNECTED : 194 `§p_pow”_sim_Ú_r¥ ( §p_deviû , SAP_RESULT_ERROR_NO_REASON ); 197 } } 199  $§p_»£t_sim_»q (* §p_deviû ) 201 `DBG ("¡©us: %d", sim_ÿrd_cÚn_¡©us ); 203  sim_ÿrd_cÚn_¡©us ) { 204  SIM_MISSING : 205 `§p_»£t_sim_r¥ ( §p_deviû , SAP_RESULT_ERROR_CARD_REMOVED ); 207  SIM_POWERED_OFF : 208 `§p_»£t_sim_r¥ ( §p_deviû , SAP_RESULT_ERROR_POWERED_OFF ); 210  SIM_DISCONNECTED : 211 `§p_»£t_sim_r¥ ( §p_deviû , SAP_RESULT_ERROR_NO_REASON ); 213  SIM_CONNECTED : 214 `§p_»£t_sim_r¥ ( §p_deviû , SAP_RESULT_OK ); 217 } } 219  $§p_Œªsãr_ÿrd_»ad”_¡©us_»q (* §p_deviû ) 221 `DBG ("¡©us: %d", sim_ÿrd_cÚn_¡©us ); 223 ià( sim_ÿrd_cÚn_¡©us !ð SIM_CONNECTED ) { 224 `§p_Œªsãr_ÿrd_»ad”_¡©us_r¥ ( §p_deviû , 225 SAP_RESULT_ERROR_NO_REASON , 0xF1); 229 `§p_Œªsãr_ÿrd_»ad”_¡©us_r¥ ( §p_deviû , SAP_RESULT_OK , 0xF1); 230 } } 232  $§p_£t_Œª¥Üt_´ÙocÞ_»q (* §p_deviû , 233  §p_·¿m‘” * ·¿m ) 235 `§p_Œª¥Üt_´ÙocÞ_r¥ ( §p_deviû , SAP_RESULT_NOT_SUPPORTED ); 236 } } 238  DBusMes§ge * $Úgošg_ÿÎ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 239 * d©a ) 241 dbus_boÞ_t Úgošg ; 243 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_BOOLEAN , & Úgošg , 244 DBUS_TYPE_INVALID )) 245  `btd_”rÜ_šv®id_¬gs ( msg ); 247 ià( Úgošg_ÿÎ_¡©us && ! Úgošg ) { 249 `§p_¡©us_šd ( §p_d©a , SAP_STATUS_CHANGE_CARD_RESET ); 250 Úgošg_ÿÎ_¡©us = FALSE ; 251 } ià(! Úgošg_ÿÎ_¡©us && Úgošg ) { 253 Úgošg_ÿÎ_¡©us = TRUE ; 256 `DBG ("OngošgC®È¡©u £ˆtØ%d", Úgošg_ÿÎ_¡©us ); 258  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 259 } } 261  DBusMes§ge * $max_msg_size ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 262 * d©a ) 264 dbus_ušt32_t size ; 266 ià( sim_ÿrd_cÚn_¡©us =ð SIM_CONNECTED ) 267  `btd_”rÜ_çžed ( msg , 270 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_UINT32 , & size , 271 DBUS_TYPE_INVALID )) 272  `btd_”rÜ_šv®id_¬gs ( msg ); 274 max_msg_size_suµÜ‹d = size ; 276 `DBG ("MaxMes§geSiz£ˆtØ%d", max_msg_size_suµÜ‹d ); 278  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 279 } } 281  DBusMes§ge * $discÚÃù_immedŸ‹ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 282 * d©a ) 284 ià( sim_ÿrd_cÚn_¡©us =ð SIM_DISCONNECTED ) 285  `btd_”rÜ_çžed ( msg , "Already disconnected."); 287 sim_ÿrd_cÚn_¡©us = SIM_DISCONNECTED ; 288 `§p_discÚÃù_šd ( §p_d©a , SAP_DISCONNECTION_TYPE_IMMEDIATE ); 290  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 291 } } 293  DBusMes§ge * $ÿrd_¡©us ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 294 * d©a ) 296 dbus_ušt32_t ¡©us ; 298 `DBG ("¡©u %d", sim_ÿrd_cÚn_¡©us ); 300 ià( sim_ÿrd_cÚn_¡©us !ð SIM_CONNECTED ) 301  `btd_”rÜ_çžed ( msg , 304 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_UINT32 , & ¡©us , 305 DBUS_TYPE_INVALID )) 306  `btd_”rÜ_šv®id_¬gs ( msg ); 308  ¡©us ) { 310 sim_ÿrd_cÚn_¡©us = SIM_MISSING ; 311 `§p_¡©us_šd ( §p_d©a , SAP_STATUS_CHANGE_CARD_REMOVED ); 315 ià( sim_ÿrd_cÚn_¡©us =ð SIM_MISSING ) { 316 sim_ÿrd_cÚn_¡©us = SIM_CONNECTED ; 317 `§p_¡©us_šd ( §p_d©a , 318 SAP_STATUS_CHANGE_CARD_INSERTED ); 323 sim_ÿrd_cÚn_¡©us = SIM_POWERED_OFF ; 324 `§p_¡©us_šd ( §p_d©a , SAP_STATUS_CHANGE_CARD_NOT_ACCESSIBLE ); 328  `btd_”rÜ_çžed ( msg , 332 `DBG ("C¬d stu chªgedØ%d", ¡©us ); 334  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 335 } } 337 cÚ¡ GDBusM‘hodTabË gdummy_m‘hods [] = { 338 { GDBUS_EXPERIMENTAL_METHOD ("OngoingCall", 339 GDBUS_ARGS ({ "Úgošg", "b" }), NULL , 340 Úgošg_ÿÎ ) }, 341 { GDBUS_EXPERIMENTAL_METHOD ("MaxMessageSize", 342 GDBUS_ARGS ({ "size", "u" }), NULL , 343 max_msg_size ) }, 344 { GDBUS_EXPERIMENTAL_METHOD ("DiscÚÃùImmedŸ‹", NULL , NULL, 345 discÚÃù_immedŸ‹ ) }, 346 { GDBUS_EXPERIMENTAL_METHOD ("CardStatus", 347 GDBUS_ARGS ({ "¡©us", "" }), NULL , 348 ÿrd_¡©us ) }, 352  $§p_š™ () 354 ià( š™_út ++) 357 ià( `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), SAP_DUMMY_PATH , 358 SAP_DUMMY_IFACE , dummy_m‘hods , NULL , NULL, 359 NULL , NULLè=ð FALSE ) { 360 š™_út --; 365 } } 367  $§p_ex™ () 369 ià(-- š™_út ) 372 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 373 SAP_DUMMY_PATH , SAP_DUMMY_IFACE ); 374 } } @profiles/sap/sap-u8500.c 25 #ifdeà HAVE_CONFIG_H 26  ~"cÚfig.h " 29  ~<¡dio.h > 30  ~<¡dlib.h > 31  ~ 32  ~ 33  ~<”ºo.h > 34  ~ 35  ~<¡ršg.h > 37  ~ 38  ~ 40  ~"¤c/log.h " 41  ~"§p.h " 43  #STE_SIMD_SOCK "/dev/sock‘/ÿtd_a" ) 44  #STE_CLIENT_TAG 0x0000 ) 46  #§p_”rÜ ( fmt , ¬g ...) do { \ 47 `”rÜ ("STE U8500 SAP: " fmt , ## ¬g ); \ 48 } 0) ) 50  #§p_šfo ( fmt , ¬g ...) do { \ 51 `šfo ("STE U8500 SAP: " fmt , ## ¬g ); \ 52 } 0) ) 54  s¡e_mes§ge { 55 ušt16_t mËn ; 56 ušt16_t mid ; 57 ušt32_t mþ›Á_g ; 58 ušt8_t m·ylßd [0]; 59 } __©Œibu‹__ (( ·cked )); 61  #STE_MSG_PAYLOAD_SIZE ( msg è(msg-> Ën - (*msgè+ (msg->Ën)) ) 63 e¡e_´ÙocÞ { 64 mSTE_START_SAP_REQ = 0x2D01, 65 mSTE_START_SAP_RSP = 0x2E01, 66 mSTE_END_SAP_REQ = 0x2D02, 67 mSTE_END_SAP_RSP = 0x2E02, 68 mSTE_POWER_OFF_REQ = 0x2D03, 69 mSTE_POWER_OFF_RSP = 0x2E03, 70 mSTE_POWER_ON_REQ = 0x2D04, 71 mSTE_POWER_ON_RSP = 0x2E04, 72 mSTE_RESET_REQ = 0x2D05, 73 mSTE_RESET_RSP = 0x2E05, 74 mSTE_SEND_APDU_REQ = 0x2D06, 75 mSTE_SEND_APDU_RSP = 0x2E06, 76 mSTE_GET_ATR_REQ = 0x2D07, 77 mSTE_GET_ATR_RSP = 0x2E07, 78 mSTE_GET_STATUS_REQ = 0x2D08, 79 mSTE_GET_STATUS_RSP = 0x2E08, 80 mSTE_STATUS_IND = 0x2F02, 81 mSTE_SIM_READY_IND = 0x2F03, 84 e¡e_msg { 85 mSTE_SEND_APDU_MSG , 86 mSTE_GET_ATR_MSG , 87 mSTE_POWER_OFF_MSG , 88 mSTE_POWER_ON_MSG , 89 mSTE_RESET_MSG , 90 mSTE_GET_STATUS_MSG , 91 mSTE_MSG_MAX , 94 e¡e_¡©us { 95 mSTE_STATUS_OK = 0x00000000, 96 mSTE_STATUS_FAILURE = 0x00000001, 97 mSTE_STATUS_BUSY_CALL = 0x00000002, 100 e¡e_ÿrd_¡©us { 101 mSTE_CARD_STATUS_UNKNOWN = 0x00, 102 mSTE_CARD_STATUS_ACTIVE = 0x01, 103 mSTE_CARD_STATUS_NOT_ACTIVE = 0x02, 104 mSTE_CARD_STATUS_MISSING = 0x03, 105 mSTE_CARD_STATUS_INVALID = 0x04, 106 mSTE_CARD_STATUS_DISCONNECTED = 0x05, 111  #ICC_READER_REMOVABLE (1 << 3) ) 112  #ICC_READER_PRESENT (1 << 4) ) 113  #ICC_READER_ID1 (1 << 5) ) 114  #ICC_READER_CARD_PRESENT (1 << 6) ) 115  #ICC_READER_CARD_POWERED (1 << 7) ) 117 e¡e_¡©e { 118 mSTE_DISABLED , 119 mSTE_POWERED_OFF , 120 mSTE_NO_CARD , 121 mSTE_ENABLED , 122 mSTE_SIM_BUSY , 123 mSTE_STATE_MAX 126  s¡e_u8500 { 127 GIOChªÃl * mio ; 128 ¡e_¡©e m¡©e ; 129 * m§p_d©a ; 132 (* t»cv_¡©e_chªge_cb )(* t§p , tušt8_t t»suÉ ); 133 (* t»cv_pdu_cb )(* t§p , tušt8_t t»suÉ , ušt8_ˆ* td©a , 134 tušt16_t tËn ); 136  ¡e_u8500 u8500 ; 138 cÚ¡ ušt8_t sim2§p_»suÉ [ STE_MSG_MAX ][ STE_STATE_MAX ] = { 141 SAP_RESULT_ERROR_NOT_ACCESSIBLE , 142 SAP_RESULT_ERROR_POWERED_OFF , 143 SAP_RESULT_ERROR_CARD_REMOVED , 144 SAP_RESULT_ERROR_NO_REASON 149 SAP_RESULT_ERROR_NO_REASON , 150 SAP_RESULT_ERROR_POWERED_OFF , 151 SAP_RESULT_ERROR_CARD_REMOVED , 152 SAP_RESULT_ERROR_NO_REASON 157 SAP_RESULT_ERROR_NO_REASON , 158 SAP_RESULT_ERROR_POWERED_OFF , 159 SAP_RESULT_ERROR_CARD_REMOVED , 160 SAP_RESULT_ERROR_NO_REASON 165 SAP_RESULT_ERROR_NO_REASON , 166 SAP_RESULT_ERROR_NOT_ACCESSIBLE , 167 SAP_RESULT_ERROR_CARD_REMOVED , 168 SAP_RESULT_ERROR_POWERED_ON 173 SAP_RESULT_ERROR_NO_REASON , 174 SAP_RESULT_ERROR_POWERED_OFF , 175 SAP_RESULT_ERROR_CARD_REMOVED , 176 SAP_RESULT_ERROR_NOT_ACCESSIBLE 181 SAP_RESULT_ERROR_NO_REASON , 182 SAP_RESULT_ERROR_NO_REASON , 183 SAP_RESULT_ERROR_NO_REASON , 184 SAP_RESULT_ERROR_NO_REASON 186 } }; 188  ušt8_t $g‘_§p_»suÉ ( ¡e_msg msg , ušt32_t ¡©us ) 190 ià(! u8500 . io ) 191  SAP_RESULT_ERROR_NO_REASON ; 193  ¡©us ) { 194  STE_STATUS_OK : 195  SAP_RESULT_OK ; 197  STE_STATUS_FAILURE : 198  sim2§p_»suÉ [ msg ][ u8500 . ¡©e ]; 201 `DBG ("Cª'ˆcÚv”ˆ¨»suÉ (¡©u %u)", ¡©us ); 202  SAP_RESULT_ERROR_NO_REASON ; 204 } } 206  $g‘_§p_»ad”_¡©us ( ušt32_t ÿrd_¡©us , ušt8_t * icc_¡©us ) 209 * icc_¡©us = ICC_READER_PRESENT ; 211  ÿrd_¡©us ) { 212  STE_CARD_STATUS_ACTIVE : 213 * icc_¡©us |ð ICC_READER_CARD_POWERED ; 215  STE_CARD_STATUS_NOT_ACTIVE : 216  STE_CARD_STATUS_INVALID : 217 * icc_¡©us |ð ICC_READER_CARD_PRESENT ; 219  STE_CARD_STATUS_MISSING : 220  STE_CARD_STATUS_DISCONNECTED : 224 `DBG ("Cª'ˆcÚv”ˆ»ad” stu %u", ÿrd_¡©us ); 226  STE_CARD_STATUS_UNKNOWN : 229 } } 231  ušt8_t $g‘_§p_¡©us_chªge ( ušt32_t ÿrd_¡©us ) 233 ià(! u8500 . io ) 234  SAP_STATUS_CHANGE_UNKNOWN_ERROR ; 236  ÿrd_¡©us ) { 237  STE_CARD_STATUS_UNKNOWN : 238  SAP_STATUS_CHANGE_UNKNOWN_ERROR ; 240  STE_CARD_STATUS_ACTIVE : 241 u8500 . ¡©e = STE_ENABLED ; 242  SAP_STATUS_CHANGE_CARD_RESET ; 244  STE_CARD_STATUS_NOT_ACTIVE : 245 u8500 . ¡©e = STE_DISABLED ; 246  SAP_STATUS_CHANGE_CARD_NOT_ACCESSIBLE ; 248  STE_CARD_STATUS_MISSING : 249 u8500 . ¡©e = STE_DISABLED ; 250  SAP_STATUS_CHANGE_CARD_REMOVED ; 252  STE_CARD_STATUS_INVALID : 253 u8500 . ¡©e = STE_DISABLED ; 254  SAP_STATUS_CHANGE_CARD_NOT_ACCESSIBLE ; 257 `DBG ("Cª'ˆcÚv”ˆ¡©u chªg%u", ÿrd_¡©us ); 258  SAP_STATUS_CHANGE_UNKNOWN_ERROR ; 260 } } 262  $£nd_mes§ge ( GIOChªÃl * io , * buf , size_t size ) 264 gsize wr™‹n ; 266 `SAP_VDBG ("iØ%p, siz%zu", io , size ); 268 ià( `g_io_chªÃl_wr™e_ch¬s ( io , buf , size , & wr™‹n , NULL ) != 269 G_IO_STATUS_NORMAL ) 270  - EIO ; 272  wr™‹n ; 273 } } 275  $£nd_»que¡ ( GIOChªÃl * io , ušt16_t id , 276  §p_·¿m‘” * ·¿m ) 278  »t ; 279  ¡e_mes§ge * msg ; 280 size_t size = (* msg ); 282 `SAP_VDBG ("iØ%p", io ); 284 ià( ·¿m ) 285 size +ð ·¿m -> Ën ; 287 msg = `g_Œy_m®loc0 ( size ); 288 ià(! msg ) { 289 `§p_”rÜ ("£ndšg„eque¡ fažed: %s", `¡»¼Ü ( ENOMEM )); 290  - ENOMEM ; 293 msg -> Ën = size - (msg->len); 294 msg -> id = id; 295 msg -> þ›Á_g = STE_CLIENT_TAG ; 297 ià( ·¿m ) 298 `memýy ( msg -> ·ylßd , ·¿m -> v® ,…¬am-> Ën ); 300 »t = `£nd_mes§ge ( io , msg , size ); 301 ià( »t < 0) { 302 `§p_”rÜ ("£ndšg„eque¡ fažed: %s", `¡»¼Ü (- »t )); 303 } ià( »t !ð(è size ) { 304 `§p_”rÜ ("sending„equest failed: %d out of %zu bytes sent", 305 »t , size ); 306 »t = - EIO ; 309 `g_ä“ ( msg ); 311  »t ; 312 } } 314  $»cv_¡©us ( ušt32_t ¡©us ) 316 `§p_¡©us_šd ( u8500 . §p_d©a , `g‘_§p_¡©us_chªge ( ¡©us )); 317 } } 319  $»cv_ÿrd_¡©us ( ušt32_t ¡©us , ušt8_t * ·¿m ) 321 ušt32_t ÿrd_¡©us ; 322 ušt8_t »suÉ ; 323 ušt8_t icüs ; 325 ià( ¡©us !ð STE_STATUS_OK ) 328 `memýy (& ÿrd_¡©us , ·¿m , (card_status)); 330 ià( `g‘_§p_»ad”_¡©us ( ÿrd_¡©us , & icüs ) < 0) 331 »suÉ = SAP_RESULT_ERROR_NO_REASON ; 333 »suÉ = `g‘_§p_»suÉ ( STE_GET_STATUS_MSG , ¡©us ); 335 `§p_Œªsãr_ÿrd_»ad”_¡©us_r¥ ( u8500 . §p_d©a , »suÉ , icüs ); 336 } } 338  $»cv_¡©e_chªge ( ušt32_t ¡e_msg , ušt32_ˆ ¡©us , 339 ušt32_t Ãw_¡©e , »cv_¡©e_chªge_cb ÿÎback ) 341 ià( ¡©us !ð STE_STATUS_OK ) 344 u8500 . ¡©e = Ãw_¡©e ; 346 ià( ÿÎback ) 347 `ÿÎback ( u8500 . §p_d©a , `g‘_§p_»suÉ ( ¡e_msg , ¡©us )); 348 } } 350  $»cv_pdu ( ušt32_t ¡e_msg ,  ¡e_mes§ge * msg , ušt32_ˆ ¡©us , 351 ušt8_t * ·¿m , »cv_pdu_cb ÿÎback ) 353 ušt8_t * d©a = NULL ; 354 ušt8_t »suÉ ; 355  size = 0; 357 ià( ¡©us =ð STE_STATUS_OK ) { 358 d©a = ·¿m ; 359 size = `STE_MSG_PAYLOAD_SIZE ( msg è- ( ¡©us ); 362 »suÉ = `g‘_§p_»suÉ ( ¡e_msg , ¡©us ); 364 ià( ÿÎback ) 365 `ÿÎback ( u8500 . §p_d©a , »suÉ , d©a , size ); 366 } } 368  $simd_þo£ () 370 `DBG ("iØ%p", u8500 . io ); 372 ià( u8500 . io ) { 373 `g_io_chªÃl_shutdown ( u8500 . io , TRUE , NULL ); 374 `g_io_chªÃl_uÄef ( u8500 . io ); 377 u8500 . ¡©e = STE_DISABLED ; 378 u8500 . io = NULL ; 379 u8500 . §p_d©a = NULL ; 380 } } 382  $»cv_sim_»ady () 384 `§p_šfo ("sim is„eady. Tryo connect‡gain"); 386 ià( `£nd_»que¡ ( u8500 . io , STE_START_SAP_REQ , NULL ) < 0) { 387 `§p_cÚÃù_r¥ ( u8500 . §p_d©a , SAP_STATUS_CONNECTION_FAILED ); 388 `simd_þo£ (); 390 } } 392  $»cv_cÚÃù_r¥ ( ušt32_t ¡©us ) 394  ¡©us ) { 395  STE_STATUS_OK : 396 ià( u8500 . ¡©e !ð STE_SIM_BUSY ) 397 `§p_cÚÃù_r¥ ( u8500 . §p_d©a , SAP_STATUS_OK ); 399  STE_STATUS_BUSY_CALL : 400 ià( u8500 . ¡©e !ð STE_SIM_BUSY ) { 401 `§p_cÚÃù_r¥ ( u8500 . §p_d©a , 402 SAP_STATUS_OK_ONGOING_CALL ); 404 u8500 . ¡©e = STE_SIM_BUSY ; 408 `§p_cÚÃù_r¥ ( u8500 . §p_d©a , SAP_STATUS_CONNECTION_FAILED ); 409 `simd_þo£ (); 412 } } 414  $»cv_»¥Ú£ ( ¡e_mes§ge * msg ) 416 ušt32_t ¡©us ; 417 ušt8_t * ·¿m ; 419 `SAP_VDBG ("msg_id 0x%x", msg -> id ); 421 ià( msg -> id =ð STE_END_SAP_RSP ) { 422 `§p_discÚÃù_r¥ ( u8500 . §p_d©a ); 423 `simd_þo£ (); 427 ·¿m = msg -> ·ylßd ; 428 `memýy (& ¡©us , ·¿m , (status)); 429 ·¿m +ð( ¡©us ); 431 `SAP_VDBG ("¡©u 0x%x", ¡©us ); 433  msg -> id ) { 434  STE_START_SAP_RSP : 435 `»cv_cÚÃù_r¥ ( ¡©us ); 437  STE_SEND_APDU_RSP : 438 `»cv_pdu ( STE_SEND_APDU_MSG , msg , ¡©us , ·¿m , 439 §p_Œªsãr_­du_r¥ ); 442  STE_GET_ATR_RSP : 443 `»cv_pdu ( STE_GET_ATR_MSG , msg , ¡©us , ·¿m , 444 §p_Œªsãr_©r_r¥ ); 447  STE_POWER_OFF_RSP : 448 `»cv_¡©e_chªge ( STE_POWER_OFF_MSG , ¡©us , STE_POWERED_OFF , 449 §p_pow”_sim_off_r¥ ); 452  STE_POWER_ON_RSP : 453 `»cv_¡©e_chªge ( STE_POWER_ON_MSG , ¡©us , STE_ENABLED , 454 §p_pow”_sim_Ú_r¥ ); 457  STE_RESET_RSP : 458 `»cv_¡©e_chªge ( STE_RESET_MSG , ¡©us , STE_ENABLED , 459 §p_»£t_sim_r¥ ); 462  STE_GET_STATUS_RSP : 463 `»cv_ÿrd_¡©us ( ¡©us , ·¿m ); 466  STE_STATUS_IND : 467 `»cv_¡©us ( ¡©us ); 470  STE_SIM_READY_IND : 471 `»cv_sim_»ady (); 475 `§p_”rÜ ("unsuµÜ‹d mes§g»ûived (id 0x%x)", msg -> id ); 477 } } 479  $»cv_mes§ge (* buf , size_t size ) 481 ušt8_t * ™” = buf ; 482  ¡e_mes§ge * msg = buf ; 485 `SAP_VDBG ("siz%zu msg->ËÀ%u.", size , msg -> Ën ); 487 ià( size < (* msg )) { 488 `§p_”rÜ ("šv®id mes§g»ûived (%zu by‹s)", size ); 489  - EBADMSG ; 493 ià( size < ( msg -> Ën + (msg->len))) { 494 `§p_”rÜ ("incomplete message„eceived (%zu bytes)", 495 size ); 496  - EBADMSG ; 499 `»cv_»¥Ú£ ( msg ); 502 size -ð msg -> Ën + (msg->len); 505 ™” +ð msg -> Ën + (msg->len); 506 msg = ( ¡e_mes§ge *) ™” ; 507 }  size > 0); 510 } } 512  gboÞ—n $simd_d©a_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , gpoš‹r d©a ) 514  buf [ SAP_BUF_SIZE ]; 515 gsize by‹s_»ad ; 516 GIOStus g¡©us ; 518 ià( cÚd & ( G_IO_NVAL | G_IO_HUP | G_IO_ERR )) { 519 `DBG ("E¼Ü cÚd™iÚ oÀsim sock‘ (0x%x)", cÚd ); 520  FALSE ; 523 g¡©us = `g_io_chªÃl_»ad_ch¬s ( io , buf , (buf), & by‹s_»ad , 524 NULL ); 525 ià( g¡©us !ð G_IO_STATUS_NORMAL ) { 526 `§p_”rÜ ("”rÜ whž»adšg from chªÃÈ(%d)", g¡©us ); 527  TRUE ; 530 ià( `»cv_mes§ge ( buf , by‹s_»ad ) < 0) 531 `§p_”rÜ ("error while…arsing STE Sim message"); 533  TRUE ; 534 } } 536  $simd_w©ch ( sock , * §p_d©a ) 538 GIOChªÃl * io ; 540 `DBG ("sock %d, s­_d©¨%°", sock , §p_d©a ); 542 io = `g_io_chªÃl_unix_Ãw ( sock ); 544 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 545 `g_io_chªÃl_£t_’codšg ( io , NULL , NULL); 546 `g_io_chªÃl_£t_bufã»d ( io , FALSE ); 548 u8500 . io = io; 549 u8500 . §p_d©a = sap_data; 550 u8500 . ¡©e = STE_DISABLED ; 552 `g_io_add_w©ch_fuÎ ( io , G_PRIORITY_DEFAULT , 553 G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL , 554 simd_d©a_cb , NULL , NULL); 555 } } 557  $simd_cÚÃù (* §p_d©a ) 559  sockaddr_un addr ; 560  sock ; 561  ”r ; 564 ià( u8500 . io ) 565  - EALREADY ; 567 sock = `sock‘ ( PF_UNIX , SOCK_STREAM , 0); 568 ià( sock < 0) { 569 ”r = - ”ºo ; 570 `§p_”rÜ ("ü—tšg sock‘ fažed: %s", `¡»¼Ü (- ”r )); 571  ”r ; 574 `mem£t (& addr , 0, (addr)); 575 addr . sun_çmžy = AF_UNIX ; 576 `memýy ( addr . sun_·th , STE_SIMD_SOCK , (STE_SIMD_SOCK) - 1); 578 ià( `cÚÃù ( sock , ( sockaddr *è& addr , (addr)) < 0) { 579 ”r = - ”ºo ; 580 `§p_”rÜ ("cÚÃùØthsock‘ fažed: %s", `¡»¼Ü (- ”r )); 581  çžed ; 584 ià( `fúŽ ( sock , F_SETFL , O_NONBLOCK ) > 0) { 585 ”r = - ”ºo ; 586 `§p_”rÜ ("£‰šg u°sock‘ fažed: %s", `¡»¼Ü (- ”r )); 587  çžed ; 590 `simd_w©ch ( sock , §p_d©a ); 594 çžed : 595 `þo£ ( sock ); 596  ”r ; 597 } } 599  $§p_cÚÃù_»q (* §p_deviû , ušt16_t maxmsgsize ) 601 `DBG ("§p_deviû %°maxmsgsiz%u", §p_deviû , maxmsgsize ); 603 `§p_šfo ("connect„equest"); 605 ià( `simd_cÚÃù ( §p_deviû ) < 0) { 606 `§p_cÚÃù_r¥ ( §p_deviû , SAP_STATUS_CONNECTION_FAILED ); 610 ià( `£nd_»que¡ ( u8500 . io , STE_START_SAP_REQ , NULL ) < 0) { 611 `§p_cÚÃù_r¥ ( §p_deviû , SAP_STATUS_CONNECTION_FAILED ); 612 `simd_þo£ (); 614 } } 616  $§p_discÚÃù_»q (* §p_deviû , ušt8_t lškloss ) 618 `DBG ("§p_deviû %°lšklos %u", §p_deviû , lškloss ); 620 `§p_šfo ("discÚÃù„eque¡ %s", lškloss ? "by†ink†oss" : ""); 622 ià( u8500 . ¡©e =ð STE_DISABLED ) { 623 `§p_discÚÃù_r¥ ( §p_deviû ); 624 `simd_þo£ (); 628 ià( lškloss ) { 629 `simd_þo£ (); 633 ià( `£nd_»que¡ ( u8500 . io , STE_END_SAP_REQ , NULL ) < 0) { 634 `§p_discÚÃù_r¥ ( §p_deviû ); 637 } } 639  $§p_Œªsãr_­du_»q (* §p_deviû ,  §p_·¿m‘” * ·¿m ) 641 ušt8_t »suÉ ; 643 `SAP_VDBG ("§p_deviû %°·¿m %p", §p_deviû , ·¿m ); 645 ià( u8500 . ¡©e !ð STE_ENABLED ) { 646 »suÉ = `g‘_§p_»suÉ ( STE_SEND_APDU_MSG , STE_STATUS_FAILURE ); 647 `§p_Œªsãr_­du_r¥ ( §p_deviû , »suÉ , NULL , 0); 651 ià( `£nd_»que¡ ( u8500 . io , STE_SEND_APDU_REQ , ·¿m ) < 0) 652 `§p_Œªsãr_­du_r¥ ( §p_deviû , SAP_RESULT_ERROR_NO_DATA , 653 NULL , 0); 654 } } 656  $§p_Œªsãr_©r_»q (* §p_deviû ) 658 ušt8_t »suÉ ; 660 `DBG ("§p_deviû %p", §p_deviû ); 662 ià( u8500 . ¡©e !ð STE_ENABLED ) { 663 »suÉ = `g‘_§p_»suÉ ( STE_GET_ATR_MSG , STE_STATUS_FAILURE ); 664 `§p_Œªsãr_©r_r¥ ( §p_deviû , »suÉ , NULL , 0); 668 ià( `£nd_»que¡ ( u8500 . io , STE_GET_ATR_REQ , NULL ) < 0) 669 `§p_Œªsãr_©r_r¥ ( §p_deviû , SAP_RESULT_ERROR_NO_DATA , NULL , 671 } } 673  $§p_pow”_sim_off_»q (* §p_deviû ) 675 ušt8_t »suÉ ; 677 `DBG ("§p_deviû %p", §p_deviû ); 679 ià( u8500 . ¡©e !ð STE_ENABLED ) { 680 »suÉ = `g‘_§p_»suÉ ( STE_POWER_OFF_MSG , STE_STATUS_FAILURE ); 681 `§p_pow”_sim_off_r¥ ( §p_deviû , »suÉ ); 685 ià( `£nd_»que¡ ( u8500 . io , STE_POWER_OFF_REQ , NULL ) < 0) 686 `§p_pow”_sim_off_r¥ ( §p_deviû , SAP_RESULT_ERROR_NO_REASON ); 687 } } 689  $§p_pow”_sim_Ú_»q (* §p_deviû ) 691 ušt8_t »suÉ ; 693 `DBG ("§p_deviû %p", §p_deviû ); 695 ià( u8500 . ¡©e !ð STE_POWERED_OFF ) { 696 »suÉ = `g‘_§p_»suÉ ( STE_POWER_ON_MSG , STE_STATUS_FAILURE ); 697 `§p_pow”_sim_Ú_r¥ ( §p_deviû , »suÉ ); 701 ià( `£nd_»que¡ ( u8500 . io , STE_POWER_ON_REQ , NULL ) < 0) 702 `§p_pow”_sim_Ú_r¥ ( §p_deviû , SAP_RESULT_ERROR_NO_REASON ); 703 } } 705  $§p_»£t_sim_»q (* §p_deviû ) 707 ušt8_t »suÉ ; 709 `DBG ("§p_deviû %p", §p_deviû ); 711 ià( u8500 . ¡©e !ð STE_ENABLED ) { 712 »suÉ = `g‘_§p_»suÉ ( STE_RESET_MSG , STE_STATUS_FAILURE ); 713 `§p_»£t_sim_r¥ ( §p_deviû , »suÉ ); 717 ià( `£nd_»que¡ ( u8500 . io , STE_RESET_REQ , NULL ) < 0) 718 `§p_»£t_sim_r¥ ( §p_deviû , SAP_RESULT_ERROR_NO_REASON ); 719 } } 721  $§p_Œªsãr_ÿrd_»ad”_¡©us_»q (* §p_deviû ) 723 ušt8_t »suÉ ; 725 `DBG ("§p_deviû %p", §p_deviû ); 727 ià( u8500 . ¡©e =ð STE_DISABLED ) { 728 »suÉ = `g‘_§p_»suÉ ( STE_GET_STATUS_MSG , STE_STATUS_FAILURE ); 729 `§p_Œªsãr_ÿrd_»ad”_¡©us_r¥ ( §p_deviû , »suÉ , 0); 733 ià( `£nd_»que¡ ( u8500 . io , STE_GET_STATUS_REQ , NULL ) < 0) 734 `§p_Œªsãr_ÿrd_»ad”_¡©us_r¥ ( §p_deviû , 735 SAP_RESULT_ERROR_NO_DATA , 0); 736 } } 738  $§p_£t_Œª¥Üt_´ÙocÞ_»q (* §p_deviû , 739  §p_·¿m‘” * ·¿m ) 741 `DBG ("§p_deviû %p", §p_deviû ); 743 `§p_Œª¥Üt_´ÙocÞ_r¥ ( §p_deviû , SAP_RESULT_NOT_SUPPORTED ); 744 } } 746  $§p_š™ () 748 u8500 . ¡©e = STE_DISABLED ; 749 `šfo ("STE U8500 SAP driver initialized"); 751 } } 753  $§p_ex™ () 755 } } @profiles/sap/sap.h 26  ~<¡dšt.h > 27  ~ 29 #ifdeà SAP_DEBUG 30  #SAP_VDBG ( fmt , ¬g ...è `DBG (fmt,‡rg) ) 32  #SAP_VDBG ( fmt ...) ) 35  #SAP_VERSION 0x0101 ) 38 e§p_¡©us { 39 mSAP_STATUS_OK = 0x00, 40 mSAP_STATUS_CONNECTION_FAILED = 0x01, 41 mSAP_STATUS_MAX_MSG_SIZE_NOT_SUPPORTED = 0x02, 42 mSAP_STATUS_MAX_MSG_SIZE_TOO_SMALL = 0x03, 43 mSAP_STATUS_OK_ONGOING_CALL = 0x04 47 e§p_discÚÃùiÚ_ty³ { 48 mSAP_DISCONNECTION_TYPE_GRACEFUL = 0x00, 49 mSAP_DISCONNECTION_TYPE_IMMEDIATE = 0x01 53 e§p_»suÉ { 54 mSAP_RESULT_OK = 0x00, 55 mSAP_RESULT_ERROR_NO_REASON = 0x01, 56 mSAP_RESULT_ERROR_NOT_ACCESSIBLE = 0x02, 57 mSAP_RESULT_ERROR_POWERED_OFF = 0x03, 58 mSAP_RESULT_ERROR_CARD_REMOVED = 0x04, 59 mSAP_RESULT_ERROR_POWERED_ON = 0x05, 60 mSAP_RESULT_ERROR_NO_DATA = 0x06, 61 mSAP_RESULT_NOT_SUPPORTED = 0x07 65 e§p_¡©us_chªge { 66 mSAP_STATUS_CHANGE_UNKNOWN_ERROR = 0x00, 67 mSAP_STATUS_CHANGE_CARD_RESET = 0x01, 68 mSAP_STATUS_CHANGE_CARD_NOT_ACCESSIBLE = 0x02, 69 mSAP_STATUS_CHANGE_CARD_REMOVED = 0x03, 70 mSAP_STATUS_CHANGE_CARD_INSERTED = 0x04, 71 mSAP_STATUS_CHANGE_CARD_RECOVERED = 0x05 75  s§p_·¿m‘” { 76 ušt8_t mid ; 77 ušt8_t m»£rved ; 78 ušt16_t mËn ; 79 ušt8_t mv® [0]; 83 } __©Œibu‹__ (( ·cked )); 85  s§p_mes§ge { 86 ušt8_t mid ; 87 ušt8_t mŬam ; 88 ušt16_t m»£rved ; 89  §p_·¿m‘” m·¿m [0]; 90 } __©Œibu‹__ (( ·cked )); 92  #SAP_BUF_SIZE 512 ) 93  #SAP_MSG_HEADER_SIZE 4 ) 95 e§p_´ÙocÞ { 96 mSAP_CONNECT_REQ = 0x00, 97 mSAP_CONNECT_RESP = 0x01, 98 mSAP_DISCONNECT_REQ = 0x02, 99 mSAP_DISCONNECT_RESP = 0x03, 100 mSAP_DISCONNECT_IND = 0x04, 101 mSAP_TRANSFER_APDU_REQ = 0x05, 102 mSAP_TRANSFER_APDU_RESP = 0x06, 103 mSAP_TRANSFER_ATR_REQ = 0x07, 104 mSAP_TRANSFER_ATR_RESP = 0x08, 105 mSAP_POWER_SIM_OFF_REQ = 0x09, 106 mSAP_POWER_SIM_OFF_RESP = 0x0A, 107 mSAP_POWER_SIM_ON_REQ = 0x0B, 108 mSAP_POWER_SIM_ON_RESP = 0x0C, 109 mSAP_RESET_SIM_REQ = 0x0D, 110 mSAP_RESET_SIM_RESP = 0x0E, 111 mSAP_TRANSFER_CARD_READER_STATUS_REQ = 0x0F, 112 mSAP_TRANSFER_CARD_READER_STATUS_RESP = 0x10, 113 mSAP_STATUS_IND = 0x11, 114 mSAP_ERROR_RESP = 0x12, 115 mSAP_SET_TRANSPORT_PROTOCOL_REQ = 0x13, 116 mSAP_SET_TRANSPORT_PROTOCOL_RESP = 0x14 120 e§p_·¿m_id { 121 mSAP_PARAM_ID_MAX_MSG_SIZE = 0x00, 122 mSAP_PARAM_ID_CONN_STATUS = 0x01, 123 mSAP_PARAM_ID_RESULT_CODE = 0x02, 124 mSAP_PARAM_ID_DISCONNECT_IND = 0x03, 125 mSAP_PARAM_ID_COMMAND_APDU = 0x04, 126 mSAP_PARAM_ID_COMMAND_APDU7816 = 0x10, 127 mSAP_PARAM_ID_RESPONSE_APDU = 0x05, 128 mSAP_PARAM_ID_ATR = 0x06, 129 mSAP_PARAM_ID_CARD_READER_STATUS = 0x07, 130 mSAP_PARAM_ID_STATUS_CHANGE = 0x08, 131 mSAP_PARAM_ID_TRANSPORT_PROTOCOL = 0x09 134  #SAP_PARAM_ID_MAX_MSG_SIZE_LEN 0x02 ) 135  #SAP_PARAM_ID_CONN_STATUS_LEN 0x01 ) 136  #SAP_PARAM_ID_RESULT_CODE_LEN 0x01 ) 137  #SAP_PARAM_ID_DISCONNECT_IND_LEN 0x01 ) 138  #SAP_PARAM_ID_CARD_READER_STATUS_LEN 0x01 ) 139  #SAP_PARAM_ID_STATUS_CHANGE_LEN 0x01 ) 140  #SAP_PARAM_ID_TRANSPORT_PROTO_LEN 0x01 ) 143 e§p_Œª¥Üt_´ÙocÞ { 144 mSAP_TRANSPORT_PROTOCOL_T0 = 0x00, 145 mSAP_TRANSPORT_PROTOCOL_T1 = 0x01 149  §p_š™ (); 150  §p_ex™ (); 153  §p_cÚÃù_»q (* §p_deviû , ušt16_t maxmsgsize ); 154  §p_discÚÃù_»q (* §p_deviû , ušt8_t lškloss ); 155  §p_Œªsãr_­du_»q (* §p_deviû ,  §p_·¿m‘” * ·¿m ); 156  §p_Œªsãr_©r_»q (* §p_deviû ); 157  §p_pow”_sim_off_»q (* §p_deviû ); 158  §p_pow”_sim_Ú_»q (* §p_deviû ); 159  §p_»£t_sim_»q (* §p_deviû ); 160  §p_Œªsãr_ÿrd_»ad”_¡©us_»q (* §p_deviû ); 161  §p_£t_Œª¥Üt_´ÙocÞ_»q (* §p_deviû , 162  §p_·¿m‘” * ·¿m ); 165  §p_cÚÃù_r¥ (* §p_deviû , ušt8_t ¡©us ); 166  §p_discÚÃù_r¥ (* §p_deviû ); 167  §p_Œªsãr_­du_r¥ (* §p_deviû , ušt8_t »suÉ , 168 ušt8_t * §p_­du_»¥ , ušt16_t Ëngth ); 169  §p_Œªsãr_©r_r¥ (* §p_deviû , ušt8_t »suÉ , 170 ušt8_t * §p_©r , ušt16_t Ëngth ); 171  §p_pow”_sim_off_r¥ (* §p_deviû , ušt8_t »suÉ ); 172  §p_pow”_sim_Ú_r¥ (* §p_deviû , ušt8_t »suÉ ); 173  §p_»£t_sim_r¥ (* §p_deviû , ušt8_t »suÉ ); 174  §p_Œªsãr_ÿrd_»ad”_¡©us_r¥ (* §p_deviû , ušt8_t »suÉ , 175 ušt8_t ¡©us ); 176  §p_Œª¥Üt_´ÙocÞ_r¥ (* §p_deviû , ušt8_t »suÉ ); 179  §p_¡©us_šd (* §p_deviû , ušt8_t ¡©us_chªge ); 180  §p_discÚÃù_šd (* §p_deviû , ušt8_t disc_ty³ ); @profiles/sap/server.c 27 #ifdeà HAVE_CONFIG_H 28  ~ 31  ~<”ºo.h > 32  ~ 33  ~ 34  ~ 36  ~"lib/uuid.h " 37  ~"btio/btio.h " 38  ~"¤c/ad­‹r.h " 39  ~"¤c/sdpd.h " 40  ~"¤c/log.h " 41  ~"¤c/”rÜ.h " 42  ~"¤c/dbus-commÚ.h " 43  ~"¤c/sh¬ed/utž.h " 44  ~"§p.h " 45  ~"£rv”.h " 47  #SAP_SERVER_INTERFACE "Üg.bluez.SimAcûss1" ) 48  #SAP_SERVER_CHANNEL 8 ) 50  #PADDING4 ( x è((4 - ((xè& 0x03)è& 0x03) ) 51  #PARAMETER_SIZE ( x è(( §p_·¿m‘” è+ x + `PADDING4 (x)) ) 53  #SAP_NO_REQ 0xFF ) 54  #SAP_DISCONNECTION_TYPE_CLIENT 0xFF ) 56  #SAP_TIMER_GRACEFUL_DISCONNECT 30 ) 57  #SAP_TIMER_NO_ACTIVITY 30 ) 60 mSAP_STATE_DISCONNECTED , 61 mSAP_STATE_CONNECT_IN_PROGRESS , 62 mSAP_STATE_CONNECT_MODEM_BUSY , 63 mSAP_STATE_CONNECTED , 64 mSAP_STATE_GRACEFUL_DISCONNECT , 65 mSAP_STATE_IMMEDIATE_DISCONNECT , 66 mSAP_STATE_CLIENT_DISCONNECT 69  s§p_cÚÃùiÚ { 70 GIOChªÃl * mio ; 71 ušt32_t m¡©e ; 72 ušt8_t m´oûssšg_»q ; 73 gušt mtim”_id ; 76  s§p_£rv” { 77  btd_ad­‹r * mad­‹r ; 78 ušt32_t m»cÜd_id ; 79 GIOChªÃl * mli¡’_io ; 80  §p_cÚÃùiÚ * mcÚn ; 83  ¡¬t_gu¬d_tim” ( §p_£rv” * £rv” , gušt š‹rv® ); 84  ¡Ý_gu¬d_tim” ( §p_£rv” * £rv” ); 85  gboÞ—n gu¬d_timeout ( gpoš‹r d©a ); 87  size_t $add_»suÉ_·¿m‘” ( ušt8_t »suÉ , 88  §p_·¿m‘” * ·¿m ) 90 ·¿m -> id = SAP_PARAM_ID_RESULT_CODE ; 91 ·¿m -> Ën = `htÚs ( SAP_PARAM_ID_RESULT_CODE_LEN ); 92 * ·¿m -> v® = »suÉ ; 94  `PARAMETER_SIZE ( SAP_PARAM_ID_RESULT_CODE_LEN ); 95 } } 97  $is_pow”_sim_off_»q_®lowed ( ušt8_t ´oûssšg_»q ) 99  ´oûssšg_»q ) { 100  SAP_NO_REQ : 101  SAP_TRANSFER_APDU_REQ : 102  SAP_TRANSFER_ATR_REQ : 103  SAP_POWER_SIM_ON_REQ : 104  SAP_RESET_SIM_REQ : 105  SAP_TRANSFER_CARD_READER_STATUS_REQ : 110 } } 112  $is_»£t_sim_»q_®lowed ( ušt8_t ´oûssšg_»q ) 114  ´oûssšg_»q ) { 115  SAP_NO_REQ : 116  SAP_TRANSFER_APDU_REQ : 117  SAP_TRANSFER_ATR_REQ : 118  SAP_TRANSFER_CARD_READER_STATUS_REQ : 123 } } 125  $check_msg ( §p_mes§ge * msg ) 127  msg -> id ) { 128  SAP_CONNECT_REQ : 129 ià( msg -> Ŭam != 0x01) 130  - EBADMSG ; 132 ià( msg -> ·¿m -> id !ð SAP_PARAM_ID_MAX_MSG_SIZE ) 133  - EBADMSG ; 135 ià( `Áohs ( msg -> ·¿m -> Ën è!ð SAP_PARAM_ID_MAX_MSG_SIZE_LEN ) 136  - EBADMSG ; 140  SAP_TRANSFER_APDU_REQ : 141 ià( msg -> Ŭam != 0x01) 142  - EBADMSG ; 144 ià( msg -> ·¿m -> id !ð SAP_PARAM_ID_COMMAND_APDU ) 145 ià( msg -> ·¿m -> id !ð SAP_PARAM_ID_COMMAND_APDU7816 ) 146  - EBADMSG ; 148 ià( msg -> ·¿m -> Ën == 0x00) 149  - EBADMSG ; 153  SAP_SET_TRANSPORT_PROTOCOL_REQ : 154 ià( msg -> Ŭam != 0x01) 155  - EBADMSG ; 157 ià( msg -> ·¿m -> id !ð SAP_PARAM_ID_TRANSPORT_PROTOCOL ) 158  - EBADMSG ; 160 ià( `Áohs ( msg -> ·¿m -> Ën è!ð SAP_PARAM_ID_TRANSPORT_PROTO_LEN ) 161  - EBADMSG ; 163 ià(* msg -> ·¿m -> v® !ð SAP_TRANSPORT_PROTOCOL_T0 ) 164 ià(* msg -> ·¿m -> v® !ð SAP_TRANSPORT_PROTOCOL_T1 ) 165  - EBADMSG ; 169  SAP_DISCONNECT_REQ : 170  SAP_TRANSFER_ATR_REQ : 171  SAP_POWER_SIM_OFF_REQ : 172  SAP_POWER_SIM_ON_REQ : 173  SAP_RESET_SIM_REQ : 174  SAP_TRANSFER_CARD_READER_STATUS_REQ : 175 ià( msg -> Ŭam != 0x00) 176  - EBADMSG ; 182 } } 184  sdp_»cÜd_t * $ü—‹_§p_»cÜd ( ušt8_t chªÃl ) 186 sdp_li¡_t * ­£q , * ­rÙo , * ´ofžes , * ´Ùo [2], * roÙ , * svþass_id ; 187 uuid_t §p_uuid , gt_uuid , roÙ_uuid , l2ÿp , rfcomm ; 188 sdp_´ofže_desc_t ´ofže ; 189 sdp_»cÜd_t * »cÜd ; 190 sdp_d©a_t * ch ; 192 »cÜd = `sdp_»cÜd_®loc (); 193 ià(! »cÜd ) 194  NULL ; 196 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 197 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 198 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 199 `sdp_li¡_ä“ ( roÙ , NULL ); 201 `sdp_uuid16_ü—‹ (& §p_uuid , SAP_SVCLASS_ID ); 202 svþass_id = `sdp_li¡_­³nd ( NULL , & §p_uuid ); 203 `sdp_uuid16_ü—‹ (& gt_uuid , GENERIC_TELEPHONY_SVCLASS_ID ); 204 svþass_id = `sdp_li¡_­³nd (svþass_id, & gt_uuid ); 206 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 207 `sdp_li¡_ä“ ( svþass_id , NULL ); 209 `sdp_uuid16_ü—‹ (& ´ofže . uuid , SAP_PROFILE_ID ); 210 ´ofže . v”siÚ = SAP_VERSION ; 211 ´ofžes = `sdp_li¡_­³nd ( NULL , & ´ofže ); 212 `sdp_£t_´ofže_descs ( »cÜd , ´ofžes ); 213 `sdp_li¡_ä“ ( ´ofžes , NULL ); 215 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 216 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp ); 217 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 219 `sdp_uuid16_ü—‹ (& rfcomm , RFCOMM_UUID ); 220 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & rfcomm ); 221 ch = `sdp_d©a_®loc ( SDP_UINT8 , & chªÃl ); 222 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], ch ); 223 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 225 ­rÙo = `sdp_li¡_­³nd ( NULL , ­£q ); 226 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 228 `sdp_£t_šfo_©Œ ( »cÜd , "SIM Acûs S”v”", NULL , NULL); 230 `sdp_d©a_ä“ ( ch ); 231 `sdp_li¡_ä“ ( ´Ùo [0], NULL ); 232 `sdp_li¡_ä“ ( ´Ùo [1], NULL ); 233 `sdp_li¡_ä“ ( ­£q , NULL ); 234 `sdp_li¡_ä“ ( ­rÙo , NULL ); 236  »cÜd ; 237 } } 239  $£nd_mes§ge ( §p_cÚÃùiÚ * cÚn , * buf , size_t size ) 241 size_t wr™‹n = 0; 242 GE¼Ü * g”r = NULL ; 243 GIOStus g¡©us ; 245 `SAP_VDBG ("cÚÀ%p, siz%zu", cÚn , size ); 247 g¡©us = `g_io_chªÃl_wr™e_ch¬s ( cÚn -> io , buf , size , & wr™‹n , 248 & g”r ); 249 ià( g¡©us !ð G_IO_STATUS_NORMAL ) { 250 ià( g”r ) 251 `g_”rÜ_ä“ ( g”r ); 253 `”rÜ ("wr™”rÜ (0x%02x).", g¡©us ); 254  - EIO ; 257 ià( wr™‹n !ð size ) { 258 `”rÜ ("wr™‹À%zu by‹ ouˆoà%zu", wr™‹n , size ); 259  - EIO ; 262  wr™‹n ; 263 } } 265  $discÚÃù_šd ( §p_cÚÃùiÚ * cÚn , ušt8_t disc_ty³ ) 267  buf [ SAP_BUF_SIZE ]; 268  §p_mes§ge * msg = (§p_mes§g*è buf ; 269  §p_·¿m‘” * ·¿m = (§p_·¿m‘” *è msg ->param; 270 size_t size = ( §p_mes§ge ); 272 `DBG ("d©¨%°¡©%d disc_ty³ 0x%02x", cÚn , cÚn-> ¡©e , disc_ty³ ); 274 `mem£t ( buf , 0, (buf)); 275 msg -> id = SAP_DISCONNECT_IND ; 276 msg -> Ŭam = 0x01; 279 ·¿m -> id = SAP_PARAM_ID_DISCONNECT_IND ; 280 ·¿m -> Ën = `htÚs ( SAP_PARAM_ID_DISCONNECT_IND_LEN ); 281 * ·¿m -> v® = disc_ty³ ; 282 size +ð `PARAMETER_SIZE ( SAP_PARAM_ID_DISCONNECT_IND_LEN ); 284  `£nd_mes§ge ( cÚn , buf , size ); 285 } } 287  $§p_”rÜ_r¥ ( §p_cÚÃùiÚ * cÚn ) 289  §p_mes§ge msg ; 291 `mem£t (& msg , 0, (msg)); 292 msg . id = SAP_ERROR_RESP ; 294 `”rÜ ("SAPƒ¼Ü (¡©%d…¸0x%02x).", cÚn -> ¡©e , 295 cÚn -> ´oûssšg_»q ); 297  `£nd_mes§ge ( cÚn , & msg , (msg)); 298 } } 300  $cÚÃù_»q ( §p_£rv” * £rv” , 301  §p_·¿m‘” * ·¿m ) 303  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 304 ušt16_t maxmsgsize ; 306 `DBG ("cÚÀ%°¡©%d", cÚn , cÚn-> ¡©e ); 308 ià(! ·¿m ) 309  ”rÜ_r¥ ; 311 ià( cÚn -> ¡©e !ð SAP_STATE_DISCONNECTED ) 312  ”rÜ_r¥ ; 314 `¡Ý_gu¬d_tim” ( £rv” ); 316 maxmsgsize = `g‘_be16 (& ·¿m -> v® ); 318 `DBG ("CÚÃù MaxMsgSize: 0x%04x", maxmsgsize ); 320 cÚn -> ¡©e = SAP_STATE_CONNECT_IN_PROGRESS ; 322 ià( maxmsgsize <ð SAP_BUF_SIZE ) { 323 cÚn -> ´oûssšg_»q = SAP_CONNECT_REQ ; 324 `§p_cÚÃù_»q ( £rv” , maxmsgsize ); 326 `§p_cÚÃù_r¥ ( £rv” , SAP_STATUS_MAX_MSG_SIZE_NOT_SUPPORTED ); 331 ”rÜ_r¥ : 332 `§p_”rÜ_r¥ ( cÚn ); 333 } } 335  $discÚÃù_»q ( §p_£rv” * £rv” , ušt8_t disc_ty³ ) 337  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 339 `DBG ("cÚÀ%°¡©%d disc_ty³ 0x%02x", cÚn , cÚn-> ¡©e , disc_ty³ ); 341  disc_ty³ ) { 342  SAP_DISCONNECTION_TYPE_GRACEFUL : 343 ià( cÚn -> ¡©e =ð SAP_STATE_DISCONNECTED || 344 cÚn -> ¡©e =ð SAP_STATE_CONNECT_IN_PROGRESS || 345 cÚn -> ¡©e =ð SAP_STATE_CONNECT_MODEM_BUSY ) 346  - EPERM ; 348 ià( cÚn -> ¡©e =ð SAP_STATE_CONNECTED ) { 349 cÚn -> ¡©e = SAP_STATE_GRACEFUL_DISCONNECT ; 350 cÚn -> ´oûssšg_»q = SAP_NO_REQ ; 352 `discÚÃù_šd ( cÚn , disc_ty³ ); 354 `¡¬t_gu¬d_tim” ( £rv” , 355 SAP_TIMER_GRACEFUL_DISCONNECT ); 360  SAP_DISCONNECTION_TYPE_IMMEDIATE : 361 ià( cÚn -> ¡©e =ð SAP_STATE_DISCONNECTED || 362 cÚn -> ¡©e =ð SAP_STATE_CONNECT_IN_PROGRESS || 363 cÚn -> ¡©e =ð SAP_STATE_CONNECT_MODEM_BUSY ) 364  - EPERM ; 366 ià( cÚn -> ¡©e =ð SAP_STATE_CONNECTED || 367 cÚn -> ¡©e =ð SAP_STATE_GRACEFUL_DISCONNECT ) { 368 cÚn -> ¡©e = SAP_STATE_IMMEDIATE_DISCONNECT ; 369 cÚn -> ´oûssšg_»q = SAP_NO_REQ ; 371 `¡Ý_gu¬d_tim” ( £rv” ); 372 `discÚÃù_šd ( cÚn , disc_ty³ ); 373 `§p_discÚÃù_»q ( £rv” , 0); 378  SAP_DISCONNECTION_TYPE_CLIENT : 379 ià( cÚn -> ¡©e !ð SAP_STATE_CONNECTED && 380 cÚn -> ¡©e !ð SAP_STATE_GRACEFUL_DISCONNECT ) { 381 `§p_”rÜ_r¥ ( cÚn ); 382  - EPERM ; 385 cÚn -> ¡©e = SAP_STATE_CLIENT_DISCONNECT ; 386 cÚn -> ´oûssšg_»q = SAP_NO_REQ ; 388 `¡Ý_gu¬d_tim” ( £rv” ); 389 `§p_discÚÃù_»q ( £rv” , 0); 394 `”rÜ ("UnknowÀdiscÚÃùiÚy³ (0x%02x).", disc_ty³ ); 395  - EINVAL ; 397 } } 399  $Œªsãr_­du_»q ( §p_£rv” * £rv” , 400  §p_·¿m‘” * ·¿m ) 402  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 404 `SAP_VDBG ("cÚÀ%°¡©%d", cÚn , cÚn-> ¡©e ); 406 ià(! ·¿m ) 407  ”rÜ_r¥ ; 409 ·¿m -> Ën = `Áohs (param->len); 411 ià( cÚn -> ¡©e !ð SAP_STATE_CONNECTED && 412 cÚn -> ¡©e !ð SAP_STATE_GRACEFUL_DISCONNECT ) 413  ”rÜ_r¥ ; 415 ià( cÚn -> ´oûssšg_»q !ð SAP_NO_REQ ) 416  ”rÜ_r¥ ; 418 cÚn -> ´oûssšg_»q = SAP_TRANSFER_APDU_REQ ; 419 `§p_Œªsãr_­du_»q ( £rv” , ·¿m ); 423 ”rÜ_r¥ : 424 `§p_”rÜ_r¥ ( cÚn ); 425 } } 427  $Œªsãr_©r_»q ( §p_£rv” * £rv” ) 429  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 431 `DBG ("cÚÀ%°¡©%d", cÚn , cÚn-> ¡©e ); 433 ià( cÚn -> ¡©e !ð SAP_STATE_CONNECTED ) 434  ”rÜ_r¥ ; 436 ià( cÚn -> ´oûssšg_»q !ð SAP_NO_REQ ) 437  ”rÜ_r¥ ; 439 cÚn -> ´oûssšg_»q = SAP_TRANSFER_ATR_REQ ; 440 `§p_Œªsãr_©r_»q ( £rv” ); 444 ”rÜ_r¥ : 445 `§p_”rÜ_r¥ ( cÚn ); 446 } } 448  $pow”_sim_off_»q ( §p_£rv” * £rv” ) 450  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 452 `DBG ("cÚÀ%°¡©%d", cÚn , cÚn-> ¡©e ); 454 ià( cÚn -> ¡©e !ð SAP_STATE_CONNECTED ) 455  ”rÜ_r¥ ; 457 ià(! `is_pow”_sim_off_»q_®lowed ( cÚn -> ´oûssšg_»q )) 458  ”rÜ_r¥ ; 460 cÚn -> ´oûssšg_»q = SAP_POWER_SIM_OFF_REQ ; 461 `§p_pow”_sim_off_»q ( £rv” ); 465 ”rÜ_r¥ : 466 `§p_”rÜ_r¥ ( cÚn ); 467 } } 469  $pow”_sim_Ú_»q ( §p_£rv” * £rv” ) 471  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 473 `DBG ("cÚÀ%°¡©%d", cÚn , cÚn-> ¡©e ); 475 ià( cÚn -> ¡©e !ð SAP_STATE_CONNECTED ) 476  ”rÜ_r¥ ; 478 ià( cÚn -> ´oûssšg_»q !ð SAP_NO_REQ ) 479  ”rÜ_r¥ ; 481 cÚn -> ´oûssšg_»q = SAP_POWER_SIM_ON_REQ ; 482 `§p_pow”_sim_Ú_»q ( £rv” ); 486 ”rÜ_r¥ : 487 `§p_”rÜ_r¥ ( cÚn ); 488 } } 490  $»£t_sim_»q ( §p_£rv” * £rv” ) 492  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 494 `DBG ("cÚÀ%°¡©%d", cÚn , cÚn-> ¡©e ); 496 ià( cÚn -> ¡©e !ð SAP_STATE_CONNECTED ) 497  ”rÜ_r¥ ; 499 ià(! `is_»£t_sim_»q_®lowed ( cÚn -> ´oûssšg_»q )) 500  ”rÜ_r¥ ; 502 cÚn -> ´oûssšg_»q = SAP_RESET_SIM_REQ ; 503 `§p_»£t_sim_»q ( £rv” ); 507 ”rÜ_r¥ : 508 `§p_”rÜ_r¥ ( cÚn ); 509 } } 511  $Œªsãr_ÿrd_»ad”_¡©us_»q ( §p_£rv” * £rv” ) 513  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 515 `DBG ("cÚÀ%°¡©%d", cÚn , cÚn-> ¡©e ); 517 ià( cÚn -> ¡©e !ð SAP_STATE_CONNECTED ) 518  ”rÜ_r¥ ; 520 ià( cÚn -> ´oûssšg_»q !ð SAP_NO_REQ ) 521  ”rÜ_r¥ ; 523 cÚn -> ´oûssšg_»q = SAP_TRANSFER_CARD_READER_STATUS_REQ ; 524 `§p_Œªsãr_ÿrd_»ad”_¡©us_»q ( £rv” ); 528 ”rÜ_r¥ : 529 `§p_”rÜ_r¥ ( cÚn ); 530 } } 532  $£t_Œª¥Üt_´ÙocÞ_»q ( §p_£rv” * £rv” , 533  §p_·¿m‘” * ·¿m ) 535  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 537 ià(! ·¿m ) 538  ”rÜ_r¥ ; 540 `DBG ("cÚÀ%°¡©%d…¬am %p", cÚn , cÚn-> ¡©e , ·¿m ); 542 ià( cÚn -> ¡©e !ð SAP_STATE_CONNECTED ) 543  ”rÜ_r¥ ; 545 ià( cÚn -> ´oûssšg_»q !ð SAP_NO_REQ ) 546  ”rÜ_r¥ ; 548 cÚn -> ´oûssšg_»q = SAP_SET_TRANSPORT_PROTOCOL_REQ ; 549 `§p_£t_Œª¥Üt_´ÙocÞ_»q ( £rv” , ·¿m ); 553 ”rÜ_r¥ : 554 `§p_”rÜ_r¥ ( cÚn ); 555 } } 557  $¡¬t_gu¬d_tim” ( §p_£rv” * £rv” , gušt š‹rv® ) 559  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 561 ià(! cÚn ) 564 ià(! cÚn -> tim”_id ) 565 cÚn -> tim”_id = `g_timeout_add_£cÚds ( š‹rv® , gu¬d_timeout , 566 £rv” ); 568 `”rÜ ("Timer is‡lready‡ctive."); 569 } } 571  $¡Ý_gu¬d_tim” ( §p_£rv” * £rv” ) 573  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 575 ià( cÚn && cÚn-> tim”_id ) { 576 `g_sourû_»move ( cÚn -> tim”_id ); 577 cÚn -> tim”_id = 0; 579 } } 581  gboÞ—n $gu¬d_timeout ( gpoš‹r d©a ) 583  §p_£rv” * £rv” = d©a ; 584  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 586 ià(! cÚn ) 587  FALSE ; 589 `DBG ("cÚÀ%°¡©%d…¸0x%02x", cÚn , cÚn-> ¡©e , 590 cÚn -> ´oûssšg_»q ); 592 cÚn -> tim”_id = 0; 594  cÚn -> ¡©e ) { 595  SAP_STATE_DISCONNECTED : 599 ià( cÚn -> io ) { 600 `g_io_chªÃl_shutdown ( cÚn -> io , TRUE , NULL ); 601 `g_io_chªÃl_uÄef ( cÚn -> io ); 602 cÚn -> io = NULL ; 606  SAP_STATE_GRACEFUL_DISCONNECT : 609 `discÚÃù_»q ( £rv” , SAP_DISCONNECTION_TYPE_IMMEDIATE ); 613 `”rÜ ("UÃx³ùed s‹ (%d).", cÚn -> ¡©e ); 617  FALSE ; 618 } } 620  $§p_£t_cÚÃùed ( §p_£rv” * £rv” ) 622 £rv” -> cÚn -> ¡©e = SAP_STATE_CONNECTED ; 624 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 625 `ad­‹r_g‘_·th ( £rv” -> ad­‹r ), 626 SAP_SERVER_INTERFACE , "Connected"); 627 } } 629  $§p_cÚÃù_r¥ (* §p_deviû , ušt8_t ¡©us ) 631  §p_£rv” * £rv” = §p_deviû ; 632  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 633  buf [ SAP_BUF_SIZE ]; 634  §p_mes§ge * msg = (§p_mes§g*è buf ; 635  §p_·¿m‘” * ·¿m = (§p_·¿m‘” *è msg ->param; 636 size_t size = ( §p_mes§ge ); 638 ià(! cÚn ) 639  - EINVAL ; 641 `DBG ("¡©%d…¸0x%02x stu 0x%02x", cÚn -> ¡©e , 642 cÚn -> ´oûssšg_»q , ¡©us ); 644 ià( cÚn -> ¡©e !ð SAP_STATE_CONNECT_IN_PROGRESS ) 645  - EPERM ; 647 `mem£t ( buf , 0, (buf)); 648 msg -> id = SAP_CONNECT_RESP ; 649 msg -> Ŭam = 0x01; 652 ·¿m -> id = SAP_PARAM_ID_CONN_STATUS ; 653 ·¿m -> Ën = `htÚs ( SAP_PARAM_ID_CONN_STATUS_LEN ); 654 * ·¿m -> v® = ¡©us ; 655 size +ð `PARAMETER_SIZE ( SAP_PARAM_ID_CONN_STATUS_LEN ); 658  ¡©us ) { 659  SAP_STATUS_OK : 660 `§p_£t_cÚÃùed ( £rv” ); 662  SAP_STATUS_OK_ONGOING_CALL : 663 `DBG ("ongoing call. Wait for„eset indication!"); 664 cÚn -> ¡©e = SAP_STATE_CONNECT_MODEM_BUSY ; 666  SAP_STATUS_MAX_MSG_SIZE_NOT_SUPPORTED : 667 msg -> Ŭam ++; 668 ·¿m = ( §p_·¿m‘” *è& buf [ size ]; 669 ·¿m -> id = SAP_PARAM_ID_MAX_MSG_SIZE ; 670 ·¿m -> Ën = `htÚs ( SAP_PARAM_ID_MAX_MSG_SIZE_LEN ); 671 `put_be16 ( SAP_BUF_SIZE , & ·¿m -> v® ); 672 size +ð `PARAMETER_SIZE ( SAP_PARAM_ID_MAX_MSG_SIZE_LEN ); 676 cÚn -> ¡©e = SAP_STATE_DISCONNECTED ; 680 `¡¬t_gu¬d_tim” ( £rv” , SAP_TIMER_NO_ACTIVITY ); 684 cÚn -> ´oûssšg_»q = SAP_NO_REQ ; 686  `£nd_mes§ge ( cÚn , buf , size ); 687 } } 689  $§p_discÚÃù_r¥ (* §p_deviû ) 691  §p_£rv” * £rv” = §p_deviû ; 692  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 693  §p_mes§ge msg ; 695 ià(! cÚn ) 696  - EINVAL ; 698 `DBG ("¡©%d…¸0x%02x", cÚn -> ¡©e , cÚn-> ´oûssšg_»q ); 700  cÚn -> ¡©e ) { 701  SAP_STATE_CLIENT_DISCONNECT : 702 `mem£t (& msg , 0, (msg)); 703 msg . id = SAP_DISCONNECT_RESP ; 705 cÚn -> ¡©e = SAP_STATE_DISCONNECTED ; 706 cÚn -> ´oûssšg_»q = SAP_NO_REQ ; 709 `¡¬t_gu¬d_tim” ( £rv” , SAP_TIMER_NO_ACTIVITY ); 711  `£nd_mes§ge ( cÚn , & msg , (msg)); 713  SAP_STATE_IMMEDIATE_DISCONNECT : 714 cÚn -> ¡©e = SAP_STATE_DISCONNECTED ; 715 cÚn -> ´oûssšg_»q = SAP_NO_REQ ; 717 ià( cÚn -> io ) { 718 `g_io_chªÃl_shutdown ( cÚn -> io , TRUE , NULL ); 719 `g_io_chªÃl_uÄef ( cÚn -> io ); 720 cÚn -> io = NULL ; 730 } } 732  $§p_Œªsãr_­du_r¥ (* §p_deviû , ušt8_t »suÉ , ušt8_ˆ* ­du , 733 ušt16_t Ëngth ) 735  §p_£rv” * £rv” = §p_deviû ; 736  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 737  buf [ SAP_BUF_SIZE ]; 738  §p_mes§ge * msg = (§p_mes§g*è buf ; 739  §p_·¿m‘” * ·¿m = (§p_·¿m‘” *è msg ->param; 740 size_t size = ( §p_mes§ge ); 742 ià(! cÚn ) 743  - EINVAL ; 745 `SAP_VDBG ("¡©%d…¸0x%02x", cÚn -> ¡©e , cÚn-> ´oûssšg_»q ); 747 ià( cÚn -> ´oûssšg_»q !ð SAP_TRANSFER_APDU_REQ ) 750 ià( »suÉ =ð SAP_RESULT_OK && (! ­du || (­du && Ëngth == 0x00))) 751  - EINVAL ; 753 `mem£t ( buf , 0, (buf)); 754 msg -> id = SAP_TRANSFER_APDU_RESP ; 755 msg -> Ŭam = 0x01; 756 size +ð `add_»suÉ_·¿m‘” ( »suÉ , ·¿m ); 759 ià( »suÉ =ð SAP_RESULT_OK ) { 760 msg -> Ŭam ++; 761 ·¿m = ( §p_·¿m‘” *è& buf [ size ]; 762 ·¿m -> id = SAP_PARAM_ID_RESPONSE_APDU ; 763 ·¿m -> Ën = `htÚs ( Ëngth ); 765 size +ð `PARAMETER_SIZE ( Ëngth ); 767 ià( size > SAP_BUF_SIZE ) 768  - EOVERFLOW ; 770 `memýy ( ·¿m -> v® , ­du , Ëngth ); 773 cÚn -> ´oûssšg_»q = SAP_NO_REQ ; 775  `£nd_mes§ge ( cÚn , buf , size ); 776 } } 778  $§p_Œªsãr_©r_r¥ (* §p_deviû , ušt8_t »suÉ , ušt8_ˆ* ©r , 779 ušt16_t Ëngth ) 781  §p_£rv” * £rv” = §p_deviû ; 782  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 783  buf [ SAP_BUF_SIZE ]; 784  §p_mes§ge * msg = (§p_mes§g*è buf ; 785  §p_·¿m‘” * ·¿m = (§p_·¿m‘” *è msg ->param; 786 size_t size = ( §p_mes§ge ); 788 ià(! cÚn ) 789  - EINVAL ; 791 `DBG ("»suÉ 0x%02x s‹ %d…¸0x%02x†’ %d", »suÉ , cÚn -> ¡©e , 792 cÚn -> ´oûssšg_»q , Ëngth ); 794 ià( cÚn -> ´oûssšg_»q !ð SAP_TRANSFER_ATR_REQ ) 797 ià( »suÉ =ð SAP_RESULT_OK && (! ©r || (©¸&& Ëngth == 0x00))) 798  - EINVAL ; 800 `mem£t ( buf , 0, (buf)); 801 msg -> id = SAP_TRANSFER_ATR_RESP ; 802 msg -> Ŭam = 0x01; 803 size +ð `add_»suÉ_·¿m‘” ( »suÉ , ·¿m ); 806 ià( »suÉ =ð SAP_RESULT_OK ) { 807 msg -> Ŭam ++; 808 ·¿m = ( §p_·¿m‘” *è& buf [ size ]; 809 ·¿m -> id = SAP_PARAM_ID_ATR ; 810 ·¿m -> Ën = `htÚs ( Ëngth ); 811 size +ð `PARAMETER_SIZE ( Ëngth ); 813 ià( size > SAP_BUF_SIZE ) 814  - EOVERFLOW ; 816 `memýy ( ·¿m -> v® , ©r , Ëngth ); 819 cÚn -> ´oûssšg_»q = SAP_NO_REQ ; 821  `£nd_mes§ge ( cÚn , buf , size ); 822 } } 824  $§p_pow”_sim_off_r¥ (* §p_deviû , ušt8_t »suÉ ) 826  §p_£rv” * £rv” = §p_deviû ; 827  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 828  buf [ SAP_BUF_SIZE ]; 829  §p_mes§ge * msg = (§p_mes§g*è buf ; 830 size_t size = ( §p_mes§ge ); 832 ià(! cÚn ) 833  - EINVAL ; 835 `DBG ("¡©%d…¸0x%02x", cÚn -> ¡©e , cÚn-> ´oûssšg_»q ); 837 ià( cÚn -> ´oûssšg_»q !ð SAP_POWER_SIM_OFF_REQ ) 840 `mem£t ( buf , 0, (buf)); 841 msg -> id = SAP_POWER_SIM_OFF_RESP ; 842 msg -> Ŭam = 0x01; 843 size +ð `add_»suÉ_·¿m‘” ( »suÉ , msg -> ·¿m ); 845 cÚn -> ´oûssšg_»q = SAP_NO_REQ ; 847  `£nd_mes§ge ( cÚn , buf , size ); 848 } } 850  $§p_pow”_sim_Ú_r¥ (* §p_deviû , ušt8_t »suÉ ) 852  §p_£rv” * £rv” = §p_deviû ; 853  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 854  buf [ SAP_BUF_SIZE ]; 855  §p_mes§ge * msg = (§p_mes§g*è buf ; 856 size_t size = ( §p_mes§ge ); 858 ià(! cÚn ) 859  - EINVAL ; 861 `DBG ("¡©%d…¸0x%02x", cÚn -> ¡©e , cÚn-> ´oûssšg_»q ); 863 ià( cÚn -> ´oûssšg_»q !ð SAP_POWER_SIM_ON_REQ ) 866 `mem£t ( buf , 0, (buf)); 867 msg -> id = SAP_POWER_SIM_ON_RESP ; 868 msg -> Ŭam = 0x01; 869 size +ð `add_»suÉ_·¿m‘” ( »suÉ , msg -> ·¿m ); 871 cÚn -> ´oûssšg_»q = SAP_NO_REQ ; 873  `£nd_mes§ge ( cÚn , buf , size ); 874 } } 876  $§p_»£t_sim_r¥ (* §p_deviû , ušt8_t »suÉ ) 878  §p_£rv” * £rv” = §p_deviû ; 879  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 880  buf [ SAP_BUF_SIZE ]; 881  §p_mes§ge * msg = (§p_mes§g*è buf ; 882 size_t size = ( §p_mes§ge ); 884 ià(! cÚn ) 885  - EINVAL ; 887 `DBG ("¡©%d…¸0x%02x„esuÉ 0x%02x", cÚn -> ¡©e , 888 cÚn -> ´oûssšg_»q , »suÉ ); 890 ià( cÚn -> ´oûssšg_»q !ð SAP_RESET_SIM_REQ ) 893 `mem£t ( buf , 0, (buf)); 894 msg -> id = SAP_RESET_SIM_RESP ; 895 msg -> Ŭam = 0x01; 896 size +ð `add_»suÉ_·¿m‘” ( »suÉ , msg -> ·¿m ); 898 cÚn -> ´oûssšg_»q = SAP_NO_REQ ; 900  `£nd_mes§ge ( cÚn , buf , size ); 901 } } 903  $§p_Œªsãr_ÿrd_»ad”_¡©us_r¥ (* §p_deviû , ušt8_t »suÉ , 904 ušt8_t ¡©us ) 906  §p_£rv” * £rv” = §p_deviû ; 907  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 908  buf [ SAP_BUF_SIZE ]; 909  §p_mes§ge * msg = (§p_mes§g*è buf ; 910  §p_·¿m‘” * ·¿m = (§p_·¿m‘” *è msg ->param; 911 size_t size = ( §p_mes§ge ); 913 ià(! cÚn ) 914  - EINVAL ; 916 `DBG ("¡©%d…¸0x%02x„esuÉ 0x%02x", cÚn -> ¡©e , 917 cÚn -> ´oûssšg_»q , »suÉ ); 919 ià( cÚn -> ´oûssšg_»q !ð SAP_TRANSFER_CARD_READER_STATUS_REQ ) 922 `mem£t ( buf , 0, (buf)); 923 msg -> id = SAP_TRANSFER_CARD_READER_STATUS_RESP ; 924 msg -> Ŭam = 0x01; 925 size +ð `add_»suÉ_·¿m‘” ( »suÉ , ·¿m ); 928 ià( »suÉ =ð SAP_RESULT_OK ) { 929 msg -> Ŭam ++; 930 ·¿m = ( §p_·¿m‘” *è& buf [ size ]; 931 ·¿m -> id = SAP_PARAM_ID_CARD_READER_STATUS ; 932 ·¿m -> Ën = `htÚs ( SAP_PARAM_ID_CARD_READER_STATUS_LEN ); 933 * ·¿m -> v® = ¡©us ; 934 size +ð `PARAMETER_SIZE ( SAP_PARAM_ID_CARD_READER_STATUS_LEN ); 937 cÚn -> ´oûssšg_»q = SAP_NO_REQ ; 939  `£nd_mes§ge ( cÚn , buf , size ); 940 } } 942  $§p_Œª¥Üt_´ÙocÞ_r¥ (* §p_deviû , ušt8_t »suÉ ) 944  §p_£rv” * £rv” = §p_deviû ; 945  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 946  buf [ SAP_BUF_SIZE ]; 947  §p_mes§ge * msg = (§p_mes§g*è buf ; 948 size_t size = ( §p_mes§ge ); 950 ià(! cÚn ) 951  - EINVAL ; 953 `DBG ("¡©%d…¸0x%02x„esuÉ 0x%02x", cÚn -> ¡©e , 954 cÚn -> ´oûssšg_»q , »suÉ ); 956 ià( cÚn -> ´oûssšg_»q !ð SAP_SET_TRANSPORT_PROTOCOL_REQ ) 959 `mem£t ( buf , 0, (buf)); 960 msg -> id = SAP_SET_TRANSPORT_PROTOCOL_RESP ; 961 msg -> Ŭam = 0x01; 962 size +ð `add_»suÉ_·¿m‘” ( »suÉ , msg -> ·¿m ); 964 cÚn -> ´oûssšg_»q = SAP_NO_REQ ; 966  `£nd_mes§ge ( cÚn , buf , size ); 967 } } 969  $§p_¡©us_šd (* §p_deviû , ušt8_t ¡©us_chªge ) 971  §p_£rv” * £rv” = §p_deviû ; 972  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 973  buf [ SAP_BUF_SIZE ]; 974  §p_mes§ge * msg = (§p_mes§g*è buf ; 975  §p_·¿m‘” * ·¿m = (§p_·¿m‘” *è msg ->param; 976 size_t size = ( §p_mes§ge ); 978 ià(! cÚn ) 979  - EINVAL ; 981 `DBG ("¡©%d…¸0x%02x sø0x%02x", cÚn -> ¡©e , cÚn-> ´oûssšg_»q , 982 ¡©us_chªge ); 984  cÚn -> ¡©e ) { 985  SAP_STATE_CONNECT_MODEM_BUSY : 986 ià( ¡©us_chªge !ð SAP_STATUS_CHANGE_CARD_RESET ) 990 `§p_£t_cÚÃùed ( £rv” ); 992  SAP_STATE_CONNECTED : 993  SAP_STATE_GRACEFUL_DISCONNECT : 994 `mem£t ( buf , 0, (buf)); 995 msg -> id = SAP_STATUS_IND ; 996 msg -> Ŭam = 0x01; 999 ·¿m -> id = SAP_PARAM_ID_STATUS_CHANGE ; 1000 ·¿m -> Ën = `htÚs ( SAP_PARAM_ID_STATUS_CHANGE_LEN ); 1001 * ·¿m -> v® = ¡©us_chªge ; 1002 size +ð `PARAMETER_SIZE ( SAP_PARAM_ID_STATUS_CHANGE_LEN ); 1004  `£nd_mes§ge ( cÚn , buf , size ); 1005  SAP_STATE_DISCONNECTED : 1006  SAP_STATE_CONNECT_IN_PROGRESS : 1007  SAP_STATE_IMMEDIATE_DISCONNECT : 1008  SAP_STATE_CLIENT_DISCONNECT : 1013 } } 1015  $§p_discÚÃù_šd (* §p_deviû , ušt8_t disc_ty³ ) 1017  `discÚÃù_»q ( §p_deviû , SAP_DISCONNECTION_TYPE_IMMEDIATE ); 1018 } } 1020  $hªdË_cmd ( §p_£rv” * £rv” , * buf , size_t size ) 1022  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 1023  §p_mes§ge * msg = buf ; 1025 ià(! cÚn ) 1026  - EINVAL ; 1028 ià( size < ( §p_mes§ge )) 1029  ”rÜ_r¥ ; 1031 ià( msg -> Ŭam !ð0 && size < (( §p_mes§ge ) + 1032 ( §p_·¿m‘” ) + 4)) 1033  ”rÜ_r¥ ; 1035 ià( `check_msg ( msg ) < 0) 1036  ”rÜ_r¥ ; 1038  msg -> id ) { 1039  SAP_CONNECT_REQ : 1040 `cÚÃù_»q ( £rv” , msg -> ·¿m ); 1042  SAP_DISCONNECT_REQ : 1043 `discÚÃù_»q ( £rv” , SAP_DISCONNECTION_TYPE_CLIENT ); 1045  SAP_TRANSFER_APDU_REQ : 1046 `Œªsãr_­du_»q ( £rv” , msg -> ·¿m ); 1048  SAP_TRANSFER_ATR_REQ : 1049 `Œªsãr_©r_»q ( £rv” ); 1051  SAP_POWER_SIM_OFF_REQ : 1052 `pow”_sim_off_»q ( £rv” ); 1054  SAP_POWER_SIM_ON_REQ : 1055 `pow”_sim_Ú_»q ( £rv” ); 1057  SAP_RESET_SIM_REQ : 1058 `»£t_sim_»q ( £rv” ); 1060  SAP_TRANSFER_CARD_READER_STATUS_REQ : 1061 `Œªsãr_ÿrd_»ad”_¡©us_»q ( £rv” ); 1063  SAP_SET_TRANSPORT_PROTOCOL_REQ : 1064 `£t_Œª¥Üt_´ÙocÞ_»q ( £rv” , msg -> ·¿m ); 1067 `DBG ("UnknowÀSAP mes§gid 0x%02x.", msg -> id ); 1071 ”rÜ_r¥ : 1072 `DBG ("Invalid SAP message format."); 1073 `§p_”rÜ_r¥ ( cÚn ); 1074  - EBADMSG ; 1075 } } 1077  $§p_£rv”_»move_cÚn ( §p_£rv” * £rv” ) 1079  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 1081 `DBG ("cÚÀ%p", cÚn ); 1083 ià(! cÚn ) 1086 ià( cÚn -> io ) { 1087 `g_io_chªÃl_shutdown ( cÚn -> io , TRUE , NULL ); 1088 `g_io_chªÃl_uÄef ( cÚn -> io ); 1091 `g_ä“ ( cÚn ); 1092 £rv” -> cÚn = NULL ; 1093 } } 1095  gboÞ—n $§p_io_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , gpoš‹r d©a ) 1097  buf [ SAP_BUF_SIZE ]; 1098 size_t by‹s_»ad = 0; 1099 GE¼Ü * g”r = NULL ; 1100 GIOStus g¡©us ; 1102 `SAP_VDBG ("cÚÀ%°iØ%p", cÚn , io ); 1104 ià( cÚd & G_IO_NVAL ) { 1105 `DBG ("ERR (G_IO_NVAL) on„fcomm socket."); 1106  FALSE ; 1109 ià( cÚd & G_IO_ERR ) { 1110 `DBG ("ERR (G_IO_ERR) on„fcomm socket."); 1111  FALSE ; 1114 ià( cÚd & G_IO_HUP ) { 1115 `DBG ("HUP on„fcomm socket."); 1116  FALSE ; 1119 g¡©us = `g_io_chªÃl_»ad_ch¬s ( io , buf , (buf) - 1, 1120 & by‹s_»ad , & g”r ); 1121 ià( g¡©us !ð G_IO_STATUS_NORMAL ) { 1122 ià( g”r ) 1123 `g_”rÜ_ä“ ( g”r ); 1125  TRUE ; 1128 ià( `hªdË_cmd ( d©a , buf , by‹s_»ad ) < 0) 1129 `”rÜ ("SAP…rotocol…rocessing failure."); 1131  TRUE ; 1132 } } 1134  $§p_io_de¡roy (* d©a ) 1136  §p_£rv” * £rv” = d©a ; 1137  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 1139 `DBG ("cÚÀ%p", cÚn ); 1141 ià(! cÚn || !cÚn-> io ) 1144 `¡Ý_gu¬d_tim” ( £rv” ); 1146 ià( cÚn -> ¡©e !ð SAP_STATE_CONNECT_IN_PROGRESS && 1147 cÚn -> ¡©e !ð SAP_STATE_CONNECT_MODEM_BUSY ) 1148 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 1149 `ad­‹r_g‘_·th ( £rv” -> ad­‹r ), 1150 SAP_SERVER_INTERFACE , 1153 ià( cÚn -> ¡©e =ð SAP_STATE_CONNECT_IN_PROGRESS || 1154 cÚn -> ¡©e =ð SAP_STATE_CONNECT_MODEM_BUSY || 1155 cÚn -> ¡©e =ð SAP_STATE_CONNECTED || 1156 cÚn -> ¡©e =ð SAP_STATE_GRACEFUL_DISCONNECT ) 1157 `§p_discÚÃù_»q ( £rv” , 1); 1159 `§p_£rv”_»move_cÚn ( £rv” ); 1160 } } 1162  $§p_cÚÃù_cb ( GIOChªÃl * io , GE¼Ü * g”r , gpoš‹r d©a ) 1164  §p_£rv” * £rv” = d©a ; 1165  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 1167 `DBG ("cÚÀ%p, iØ%p", cÚn , io ); 1169 ià(! cÚn ) 1174 `¡¬t_gu¬d_tim” ( £rv” , SAP_TIMER_NO_ACTIVITY ); 1176 `g_io_add_w©ch_fuÎ ( io , G_PRIORITY_DEFAULT , 1177 G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL , 1178 §p_io_cb , £rv” , §p_io_de¡roy ); 1179 } } 1181  $cÚÃù_auth_cb ( DBusE¼Ü * d”r , * d©a ) 1183  §p_£rv” * £rv” = d©a ; 1184  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 1185 GE¼Ü * g”r = NULL ; 1187 `DBG ("cÚÀ%p", cÚn ); 1189 ià(! cÚn ) 1192 ià( d”r && `dbus_”rÜ_is_£t (derr)) { 1193 `”rÜ ("Acûs ha b“Àd’›d (%s)", d”r -> mes§ge ); 1194 `§p_£rv”_»move_cÚn ( £rv” ); 1198 ià(! `bt_io_acû± ( cÚn -> io , §p_cÚÃù_cb , £rv” , NULL , & g”r )) { 1199 `”rÜ ("bt_io_acû±: %s", g”r -> mes§ge ); 1200 `g_”rÜ_ä“ ( g”r ); 1201 `§p_£rv”_»move_cÚn ( £rv” ); 1205 `DBG ("Access has been granted."); 1206 } } 1208  $cÚÃù_cÚfœm_cb ( GIOChªÃl * io , gpoš‹r d©a ) 1210  §p_£rv” * £rv” = d©a ; 1211  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 1212 GE¼Ü * g”r = NULL ; 1213 bdaddr_t ¤c , d¡ ; 1214  d¡addr [18]; 1215 gušt »t ; 1217 `DBG ("cÚÀ%°iØ%p", cÚn , io ); 1219 ià(! io ) 1222 ià( cÚn ) { 1223 `DBG ("Another SAP connection‡lreadyƒxists."); 1224 `g_io_chªÃl_shutdown ( io , TRUE , NULL ); 1228 cÚn = `g_Œy_Ãw0 ( §p_cÚÃùiÚ , 1); 1229 ià(! cÚn ) { 1230 `”rÜ ("Can't‡llocate memory for incoming SAP connection."); 1231 `g_io_chªÃl_shutdown ( io , TRUE , NULL ); 1235 `g_io_chªÃl_£t_’codšg ( io , NULL , NULL); 1236 `g_io_chªÃl_£t_bufã»d ( io , FALSE ); 1238 £rv” -> cÚn = conn; 1239 cÚn -> io = `g_io_chªÃl_»f (io); 1240 cÚn -> ¡©e = SAP_STATE_DISCONNECTED ; 1242 `bt_io_g‘ ( io , & g”r , 1243 BT_IO_OPT_SOURCE_BDADDR , & ¤c , 1244 BT_IO_OPT_DEST_BDADDR , & d¡ , 1245 BT_IO_OPT_INVALID ); 1246 ià( g”r ) { 1247 `”rÜ ("%s", g”r -> mes§ge ); 1248 `g_”rÜ_ä“ ( g”r ); 1249 `§p_£rv”_»move_cÚn ( £rv” ); 1253 `ba2¡r (& d¡ , d¡addr ); 1255 »t = `btd_»que¡_authÜiz©iÚ (& ¤c , & d¡ , SAP_UUID , cÚÃù_auth_cb , 1256 £rv” ); 1257 ià( »t == 0) { 1258 `”rÜ ("Authorization failure"); 1259 `§p_£rv”_»move_cÚn ( £rv” ); 1263 `DBG ("AuthÜizšg incomšg SAP cÚÃùiÚ from %s", d¡addr ); 1264 } } 1266  DBusMes§ge * $discÚÃù ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 1267 * d©a ) 1269  §p_£rv” * £rv” = d©a ; 1271 ià(! £rv” ) 1272  `btd_”rÜ_çžed ( msg , "Server internalƒrror."); 1274 `DBG ("cÚÀ%p", £rv” -> cÚn ); 1276 ià(! £rv” -> cÚn ) 1277  `btd_”rÜ_çžed ( msg , "Client‡lready disconnected"); 1279 ià( `discÚÃù_»q ( £rv” , SAP_DISCONNECTION_TYPE_GRACEFUL ) < 0) 1280  `btd_”rÜ_çžed ( msg , "There is‚o‡ctive connection"); 1282  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 1283 } } 1285  gboÞ—n $£rv”_´Ý”ty_g‘_cÚÃùed ( 1286 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1287 DBusMes§geI‹r * ™” , * d©a ) 1289  §p_£rv” * £rv” = d©a ; 1290  §p_cÚÃùiÚ * cÚn = £rv” ->conn; 1291 dbus_boÞ_t cÚÃùed ; 1293 ià(! cÚn ) { 1294 cÚÃùed = FALSE ; 1295  ­³nd ; 1298 cÚÃùed = ( cÚn -> ¡©e =ð SAP_STATE_CONNECTED || 1299 cÚn -> ¡©e =ð SAP_STATE_GRACEFUL_DISCONNECT ); 1301 ­³nd : 1302 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & cÚÃùed ); 1304  TRUE ; 1305 } } 1307 cÚ¡ GDBusM‘hodTabË g£rv”_m‘hods [] = { 1308 { GDBUS_METHOD ("DiscÚÃù", NULL , NULL, discÚÃù ) }, 1312 cÚ¡ GDBusPrÝ”tyTabË g£rv”_´Ý”t›s [] = { 1313 { "CÚÃùed", "b", £rv”_´Ý”ty_g‘_cÚÃùed }, 1317  $£rv”_»move ( §p_£rv” * £rv” ) 1319 ià(! £rv” ) 1322 `§p_£rv”_»move_cÚn ( £rv” ); 1324 `ad­‹r_£rviû_»move ( £rv” -> ad­‹r , s”v”-> »cÜd_id ); 1326 ià( £rv” -> li¡’_io ) { 1327 `g_io_chªÃl_shutdown ( £rv” -> li¡’_io , TRUE , NULL ); 1328 `g_io_chªÃl_uÄef ( £rv” -> li¡’_io ); 1329 £rv” -> li¡’_io = NULL ; 1332 `btd_ad­‹r_uÄef ( £rv” -> ad­‹r ); 1333 `g_ä“ ( £rv” ); 1334 } } 1336  $de¡roy_§p_š‹rçû (* d©a ) 1338  §p_£rv” * £rv” = d©a ; 1340 `DBG ("UÄegi¡”ed iÁ”çû % Ú…©h %s", SAP_SERVER_INTERFACE , 1341 `ad­‹r_g‘_·th ( £rv” -> ad­‹r )); 1343 `£rv”_»move ( £rv” ); 1344 } } 1346  $§p_£rv”_»gi¡” ( btd_ad­‹r * ad­‹r ) 1348 sdp_»cÜd_t * »cÜd = NULL ; 1349 GE¼Ü * g”r = NULL ; 1350 GIOChªÃl * io ; 1351  §p_£rv” * £rv” ; 1353 ià( `§p_š™ () < 0) { 1354 `”rÜ ("Sap driver initialization failed."); 1358 »cÜd = `ü—‹_§p_»cÜd ( SAP_SERVER_CHANNEL ); 1359 ià(! »cÜd ) { 1360 `”rÜ ("Creating SAP SDP„ecord failed."); 1361  sdp_”r ; 1364 ià( `ad­‹r_£rviû_add ( ad­‹r , »cÜd ) < 0) { 1365 `”rÜ ("Adding SAP SDP„ecordohe SDP server failed."); 1366 `sdp_»cÜd_ä“ ( »cÜd ); 1367  sdp_”r ; 1370 £rv” = `g_Ãw0 ( §p_£rv” , 1); 1371 £rv” -> ad­‹r = `btd_ad­‹r_»f (adapter); 1372 £rv” -> »cÜd_id = »cÜd -> hªdË ; 1374 io = `bt_io_li¡’ ( NULL , cÚÃù_cÚfœm_cb , £rv” , 1375 NULL , & g”r , 1376 BT_IO_OPT_SOURCE_BDADDR , 1377 `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 1378 BT_IO_OPT_CHANNEL , SAP_SERVER_CHANNEL , 1379 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_HIGH , 1380 BT_IO_OPT_MASTER , TRUE , 1381 BT_IO_OPT_INVALID ); 1382 ià(! io ) { 1383 `”rÜ ("Cª'ˆli¡’‡ˆchªÃÈ%d.", SAP_SERVER_CHANNEL ); 1384 `g_”rÜ_ä“ ( g”r ); 1385  £rv”_”r ; 1387 £rv” -> li¡’_io = io ; 1389 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1390 `ad­‹r_g‘_·th ( £rv” -> ad­‹r ), 1391 SAP_SERVER_INTERFACE , 1392 £rv”_m‘hods , NULL , 1393 £rv”_´Ý”t›s , £rv” , 1394 de¡roy_§p_š‹rçû )) { 1395 `”rÜ ("D-Bus failedo„egister %s interface", 1396 SAP_SERVER_INTERFACE ); 1397  £rv”_”r ; 1400 `DBG ("£rv” %p,†i¡’ sock‘ 0x%02x", £rv” , 1401 `g_io_chªÃl_unix_g‘_fd ( io )); 1405 £rv”_”r : 1406 `£rv”_»move ( £rv” ); 1407 sdp_”r : 1408 `§p_ex™ (); 1411 } } 1413  $§p_£rv”_uÄegi¡” (cÚ¡ * ·th ) 1415 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1416 ·th , SAP_SERVER_INTERFACE ); 1418 `§p_ex™ (); 1419 } } @profiles/sap/server.h 21  ~ 23  §p_£rv”_»gi¡” ( btd_ad­‹r * ad­‹r ); 24  §p_£rv”_uÄegi¡” (cÚ¡ * ·th ); @profiles/scanparam/scan.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dboÞ.h > 30  ~<”ºo.h > 32  ~"lib/uuid.h " 33  ~"¤c/log.h " 34  ~"¤c/¶ugš.h " 35  ~"¤c/ad­‹r.h " 36  ~"¤c/deviû.h " 37  ~"¤c/´ofže.h " 38  ~"¤c/£rviû.h " 39  ~"¤c/sh¬ed/utž.h " 40  ~"©Œib/©t.h " 41  ~"©Œib/g©Œib.h " 42  ~"©Œib/g©t.h " 43  ~"¤c/©tio.h " 45  #SCAN_INTERVAL_WIN_UUID 0x2A4F ) 46  #SCAN_REFRESH_UUID 0x2A31 ) 48  #SCAN_INTERVAL 0x0060 ) 49  #SCAN_WINDOW 0x0030 ) 50  #SERVER_REQUIRES_REFRESH 0x00 ) 52  ssÿn { 53  btd_deviû * mdeviû ; 54 GA‰rib * m©Œib ; 55  ©t_¿nge m¿nge ; 56 gušt m©tioid ; 57 ušt16_t mš‹rv® ; 58 ušt16_t mwšdow ; 59 ušt16_t miwhªdË ; 60 ušt16_t m»äesh_hªdË ; 61 gušt m»äesh_cb_id ; 64  $wr™e_sÿn_·¿ms ( GA‰rib * ©Œib , ušt16_t hªdË ) 66 ušt8_t v®ue [4]; 68 `put_Ë16 ( SCAN_INTERVAL , & v®ue [0]); 69 `put_Ë16 ( SCAN_WINDOW , & v®ue [2]); 71 `g©t_wr™e_cmd ( ©Œib , hªdË , v®ue , (v®ue), NULL , NULL); 72 } } 74  $»äesh_v®ue_cb (cÚ¡ ušt8_t * pdu , ušt16_t Ën , 75 gpoš‹r u£r_d©a ) 77  sÿn *sÿÀð u£r_d©a ; 79 `DBG ("S”v”„equœe »äesh: %d", pdu [3]); 81 ià( pdu [3] =ð SERVER_REQUIRES_REFRESH ) 82 `wr™e_sÿn_·¿ms ( sÿn -> ©Œib , sÿn-> iwhªdË ); 83 } } 85  $ccc_wr™‹n_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 86 gušt16 ¶’ , gpoš‹r u£r_d©a ) 88  sÿn *sÿÀð u£r_d©a ; 90 ià( ¡©us != 0) { 91 `”rÜ ("Write Scan Refresh CCC failed: %s", 92 `©t_ecode2¡r ( ¡©us )); 96 `DBG ("Scan Refresh:‚otificationƒnabled"); 98 sÿn -> »äesh_cb_id = `g_©Œib_»gi¡” (sÿn-> ©Œib , 99 ATT_OP_HANDLE_NOTIFY , sÿn -> »äesh_hªdË , 100 »äesh_v®ue_cb , sÿn , NULL ); 101 } } 103  $discov”_desütÜ_cb ( ušt8_t ¡©us , GSLi¡ * descs , 104 * u£r_d©a ) 106  sÿn *sÿÀð u£r_d©a ; 107  g©t_desc * desc ; 108 ušt8_t v®ue [2]; 110 ià( ¡©us != 0) { 111 `”rÜ ("Discov” desütÜ çžed: %s", `©t_ecode2¡r ( ¡©us )); 116 desc = descs -> d©a ; 118 `put_Ë16 ( GATT_CLIENT_CHARAC_CFG_NOTIF_BIT , v®ue ); 119 `g©t_wr™e_ch¬ ( sÿn -> ©Œib , desc -> hªdË , v®ue , (value), 120 ccc_wr™‹n_cb , u£r_d©a ); 121 } } 123  $»äesh_discov”ed_cb ( ušt8_t ¡©us , GSLi¡ * ch¬s , 124 * u£r_d©a ) 126  sÿn *sÿÀð u£r_d©a ; 127  g©t_ch¬ * chr ; 128 ušt16_t ¡¬t , ’d ; 129 bt_uuid_t uuid ; 131 ià( ¡©us ) { 132 `”rÜ ("SÿÀReäesh %s", `©t_ecode2¡r ( ¡©us )); 136 ià(! ch¬s ) { 137 `DBG ("Scan Refresh‚ot supported"); 141 chr = ch¬s -> d©a ; 143 `DBG ("SÿÀReäesh hªdË: 0x%04x", chr -> v®ue_hªdË ); 145 ¡¬t = chr -> v®ue_hªdË + 1; 146 ’d = sÿn -> ¿nge .end; 148 ià( ¡¬t > ’d ) 151 sÿn -> »äesh_hªdË = chr -> v®ue_hªdË ; 153 `bt_uuid16_ü—‹ (& uuid , GATT_CLIENT_CHARAC_CFG_UUID ); 155 `g©t_discov”_desc ( sÿn -> ©Œib , ¡¬t , ’d , & uuid , 156 discov”_desütÜ_cb , u£r_d©a ); 157 } } 159  $iwš_discov”ed_cb ( ušt8_t ¡©us , GSLi¡ * ch¬s , * u£r_d©a ) 161  sÿn *sÿÀð u£r_d©a ; 162  g©t_ch¬ * chr ; 164 ià( ¡©us ) { 165 `”rÜ ("Discover Scan Interval Window: %s", 166 `©t_ecode2¡r ( ¡©us )); 170 chr = ch¬s -> d©a ; 171 sÿn -> iwhªdË = chr -> v®ue_hªdË ; 173 `DBG ("SÿÀIÁ”v® Wšdow hªdË: 0x%04x", sÿn -> iwhªdË ); 175 `wr™e_sÿn_·¿ms ( sÿn -> ©Œib , sÿn-> iwhªdË ); 176 } } 178  $©tio_cÚÃùed_cb ( GA‰rib * ©Œib , gpoš‹r u£r_d©a ) 180  sÿn *sÿÀð u£r_d©a ; 181 bt_uuid_t iwš_uuid , »äesh_uuid ; 183 sÿn -> ©Œib = `g_©Œib_»f (attrib); 185 ià( sÿn -> iwhªdË ) { 186 `wr™e_sÿn_·¿ms ( sÿn -> ©Œib , sÿn-> iwhªdË ); 190 `bt_uuid16_ü—‹ (& iwš_uuid , SCAN_INTERVAL_WIN_UUID ); 191 `bt_uuid16_ü—‹ (& »äesh_uuid , SCAN_REFRESH_UUID ); 193 `g©t_discov”_ch¬ ( sÿn -> ©Œib , sÿn-> ¿nge . ¡¬t , sÿn->¿nge. ’d , 194 & iwš_uuid , iwš_discov”ed_cb , sÿn ); 196 `g©t_discov”_ch¬ ( sÿn -> ©Œib , sÿn-> ¿nge . ¡¬t , sÿn->¿nge. ’d , 197 & »äesh_uuid , »äesh_discov”ed_cb , sÿn ); 198 } } 200  $©tio_discÚÃùed_cb ( gpoš‹r u£r_d©a ) 202  sÿn *sÿÀð u£r_d©a ; 204 `g_©Œib_uÄef ( sÿn -> ©Œib ); 205 sÿn -> ©Œib = NULL ; 206 } } 208  $sÿn_»gi¡” ( btd_£rviû * £rviû ,  g©t_´im¬y * ´im ) 210  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 211  sÿn *scan; 213 sÿn = `g_Ãw0 (scan, 1); 214 sÿn -> deviû = `btd_deviû_»f (device); 215 sÿn -> ¿nge = ´im ->range; 216 sÿn -> ©tioid = `btd_deviû_add_©tio_ÿÎback ( deviû , 217 ©tio_cÚÃùed_cb , 218 ©tio_discÚÃùed_cb , 219 sÿn ); 221 `btd_£rviû_£t_u£r_d©a ( £rviû , sÿn ); 224 } } 226  $sÿn_·¿m_»move ( btd_£rviû * £rviû ) 228  sÿn *sÿÀð `btd_£rviû_g‘_u£r_d©a ( £rviû ); 230 ià( sÿn -> ©Œib !ð NULL && sÿn-> »äesh_cb_id > 0) 231 `g_©Œib_uÄegi¡” ( sÿn -> ©Œib , sÿn-> »äesh_cb_id ); 233 `btd_deviû_»move_©tio_ÿÎback ( sÿn -> deviû , sÿn-> ©tioid ); 234 `btd_deviû_uÄef ( sÿn -> deviû ); 235 `g_©Œib_uÄef ( sÿn -> ©Œib ); 236 `g_ä“ ( sÿn ); 237 } } 239  $sÿn_·¿m_´obe ( btd_£rviû * £rviû ) 241  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 242  g©t_´im¬y * ´im ; 244 `DBG ("Probing Scan Parameters"); 246 ´im = `btd_deviû_g‘_´im¬y ( deviû , SCAN_PARAMETERS_UUID ); 247 ià(! ´im ) 248  - EINVAL ; 250  `sÿn_»gi¡” ( £rviû , ´im ); 251 } } 253  btd_´ofže gsÿn_´ofže = { 254 . Çme = "Scan Parameters Client Driver", 255 . g»mÙe_uuid = SCAN_PARAMETERS_UUID , 256 . gdeviû_´obe = sÿn_·¿m_´obe , 257 . gdeviû_»move = sÿn_·¿m_»move , 260  $sÿn_·¿m_š™ () 262  `btd_´ofže_»gi¡” (& sÿn_´ofže ); 263 } } 265  $sÿn_·¿m_ex™ () 267 `btd_´ofže_uÄegi¡” (& sÿn_´ofže ); 268 } } 270 BLUETOOTH_PLUGIN_DEFINE ( sÿŬam , VERSION , 271 BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 272 sÿn_·¿m_š™ , sÿn_·¿m_ex™ ) @profiles/thermometer/thermometer.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<¡dboÞ.h > 28  ~<”ºo.h > 30  ~ 32  ~"lib/uuid.h " 33  ~"¤c/¶ugš.h " 34  ~"¤c/dbus-commÚ.h " 35  ~"¤c/ad­‹r.h " 36  ~"¤c/deviû.h " 37  ~"¤c/´ofže.h " 38  ~"¤c/£rviû.h " 39  ~"¤c/sh¬ed/utž.h " 40  ~"¤c/”rÜ.h " 41  ~"¤c/log.h " 42  ~"©Œib/g©Œib.h " 43  ~"¤c/©tio.h " 44  ~"©Œib/©t.h " 45  ~"©Œib/g©t.h " 47  #THERMOMETER_INTERFACE "Üg.bluez.Th”mom‘”1" ) 48  #THERMOMETER_MANAGER_INTERFACE "Üg.bluez.Th”mom‘”Mªag”1" ) 49  #THERMOMETER_WATCHER_INTERFACE "Üg.bluez.Th”mom‘”W©ch”1" ) 52  #TEMP_UNITS 0x01 ) 53  #TEMP_TIME_STAMP 0x02 ) 54  #TEMP_TYPE 0x04 ) 56  #FLOAT_MAX_MANTISSA 16777216 ) 58  #VALID_RANGE_DESC_SIZE 4 ) 59  #TEMPERATURE_TYPE_SIZE 1 ) 60  #MEASUREMENT_INTERVAL_SIZE 2 ) 62  sth”mom‘”_ad­‹r { 63  btd_ad­‹r * mad­‹r ; 64 GSLi¡ * mdeviûs ; 65 GSLi¡ * mfw©ch”s ; 66 GSLi¡ * miw©ch”s ; 69  sth”mom‘” { 70  btd_deviû * mdev ; 71  th”mom‘”_ad­‹r * md­‹r ; 72 GA‰rib * m©Œib ; 73  ©t_¿nge * msvc_¿nge ; 74 gušt m©tioid ; 76 gušt m©tio_m—su»m’t_id ; 78 gušt m©tio_š‹rmedŸ‹_id ; 80 gušt m©tio_š‹rv®_id ; 81 gboÞ—n mš‹rmedŸ‹ ; 82 ušt8_t mty³ ; 83 ušt16_t mš‹rv® ; 84 ušt16_t mmax ; 85 ušt16_t mmš ; 86 gboÞ—n mhas_ty³ ; 87 gboÞ—n mhas_š‹rv® ; 89 ušt16_t mm—su»m’t_ccc_hªdË ; 90 ušt16_t mš‹rmedŸ‹_ccc_hªdË ; 91 ušt16_t mš‹rv®_v®_hªdË ; 94  sch¬aù”i¡ic { 95  th”mom‘” * mt ; 96  muuid [ MAX_LEN_UUID_STR + 1]; 99  sw©ch” { 100  th”mom‘”_ad­‹r * md­‹r ; 101 gušt mid ; 102 * m¤v ; 103 * m·th ; 106  sm—su»m’t { 107  th”mom‘” * mt ; 108 št16_t mexp ; 109 št32_t mmªt ; 110 ušt64_t mtime ; 111 gboÞ—n msu±ime ; 112 * mun™ ; 113 * mty³ ; 114 * mv®ue ; 117  stmp_š‹rv®_d©a { 118  th”mom‘” * mth”mom‘” ; 119 ušt16_t mš‹rv® ; 122  GSLi¡ * gth”mom‘”_ad­‹rs = NULL ; 124 cÚ¡ * cÚ¡ g‹mp_ty³ [] = { 137 cÚ¡ * $‹m±y³2¡r ( ušt8_t v®ue ) 139 ià( v®ue > 0 && v®u< `G_N_ELEMENTS ( ‹mp_ty³ )) 140  ‹mp_ty³ [ v®ue ]; 142 `”rÜ ("Tem³¿tu»y³ %d„e£rved fÜ futu» u£", v®ue ); 143  NULL ; 144 } } 146  $de¡roy_w©ch” ( gpoš‹r u£r_d©a ) 148  w©ch” *w©ch” = u£r_d©a ; 150 `g_ä“ ( w©ch” -> ·th ); 151 `g_ä“ ( w©ch” -> ¤v ); 152 `g_ä“ ( w©ch” ); 153 } } 155  $»move_w©ch” ( gpoš‹r u£r_d©a ) 157  w©ch” *w©ch” = u£r_d©a ; 159 `g_dbus_»move_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), w©ch” -> id ); 160 } } 162  $de¡roy_th”mom‘” ( gpoš‹r u£r_d©a ) 164  th”mom‘” * t = u£r_d©a ; 166 ià( t -> ©tioid > 0) 167 `btd_deviû_»move_©tio_ÿÎback ( t -> dev ,-> ©tioid ); 169 ià( t -> ©Œib !ð NULL ) { 170 `g_©Œib_uÄegi¡” ( t -> ©Œib ,-> ©tio_m—su»m’t_id ); 171 `g_©Œib_uÄegi¡” ( t -> ©Œib ,-> ©tio_š‹rmedŸ‹_id ); 172 `g_©Œib_uÄegi¡” ( t -> ©Œib ,-> ©tio_š‹rv®_id ); 173 `g_©Œib_uÄef ( t -> ©Œib ); 176 `btd_deviû_uÄef ( t -> dev ); 177 `g_ä“ ( t -> svc_¿nge ); 178 `g_ä“ ( t ); 179 } } 181  $de¡roy_th”mom‘”_ad­‹r ( gpoš‹r u£r_d©a ) 183  th”mom‘”_ad­‹r * d­‹r = u£r_d©a ; 185 ià( d­‹r -> deviûs !ð NULL ) 186 `g_¦i¡_ä“_fuÎ ( d­‹r -> deviûs , de¡roy_th”mom‘” ); 188 ià( d­‹r -> fw©ch”s !ð NULL ) 189 `g_¦i¡_ä“_fuÎ ( d­‹r -> fw©ch”s , »move_w©ch” ); 191 `g_ä“ ( d­‹r ); 192 } } 194  $cmp_ad­‹r ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 196 cÚ¡  th”mom‘”_ad­‹r * d­‹r = a ; 197 cÚ¡  btd_ad­‹r * ad­‹r = b ; 199 ià( ad­‹r =ð d­‹r ->adapter) 203 } } 205  $cmp_deviû ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 207 cÚ¡  th”mom‘” * t = a ; 208 cÚ¡  btd_deviû * dev = b ; 210 ià( dev =ð t ->dev) 214 } } 216  $cmp_w©ch” ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 218 cÚ¡  w©ch” *w©ch” = a ; 219 cÚ¡  w©ch” * m©ch = b ; 220  »t ; 222 »t = `g_¡rcmp0 ( w©ch” -> ¤v , m©ch ->srv); 223 ià( »t != 0) 224  »t ; 226  `g_¡rcmp0 ( w©ch” -> ·th , m©ch ->path); 227 } } 229  th”mom‘”_ad­‹r * 230 $fšd_th”mom‘”_ad­‹r ( btd_ad­‹r * ad­‹r ) 232 GSLi¡ * l = `g_¦i¡_fšd_cu¡om ( th”mom‘”_ad­‹rs , ad­‹r , 233 cmp_ad­‹r ); 234 ià(! l ) 235  NULL ; 237  l -> d©a ; 238 } } 240  $chªge_´Ý”ty ( th”mom‘” * t , cÚ¡ * Çme , 241 gpoš‹r v®ue ) { 242 ià( `g_¡rcmp0 ( Çme , "Intermediate") == 0) { 243 gboÞ—n * š‹rmedŸ‹ = v®ue ; 244 ià( t -> š‹rmedŸ‹ == *intermediate) 247 t -> š‹rmedŸ‹ = *intermediate; 248 } ià( `g_¡rcmp0 ( Çme , "Interval") == 0) { 249 ušt16_t * š‹rv® = v®ue ; 250 ià( t -> has_š‹rv® &&-> š‹rv® == *interval) 253 t -> has_š‹rv® = TRUE ; 254 t -> š‹rv® = *interval; 255 } ià( `g_¡rcmp0 ( Çme , "Maximum") == 0) { 256 ušt16_t * max = v®ue ; 257 ià( t -> max == *max) 260 t -> max = *max; 261 } ià( `g_¡rcmp0 ( Çme , "Minimum") == 0) { 262 ušt16_t * mš = v®ue ; 263 ià( t -> mš == *min) 266 t -> mš = *min; 268 `DBG ("% i nÙ‡h”mom‘”…rÝ”ty", Çme ); 272 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), 273 `deviû_g‘_·th ( t -> dev ), 274 THERMOMETER_INTERFACE , Çme ); 275 } } 277  $upd©e_w©ch” ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 279  w©ch” * w = d©a ; 280  m—su»m’t * m = u£r_d©a ; 281 cÚ¡ * ·th = `deviû_g‘_·th ( m -> t -> dev ); 282 DBusMes§geI‹r ™” ; 283 DBusMes§geI‹r diù ; 284 DBusMes§ge * msg ; 286 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( w -> ¤v , w-> ·th , 287 THERMOMETER_WATCHER_INTERFACE , 289 ià( msg =ð NULL ) 292 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 294 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 296 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 297 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 298 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 299 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 301 `diù_­³nd_’Œy (& diù , "ExpÚ’t", DBUS_TYPE_INT16 , & m -> exp ); 302 `diù_­³nd_’Œy (& diù , "Mªtis§", DBUS_TYPE_INT32 , & m -> mªt ); 303 `diù_­³nd_’Œy (& diù , "Un™", DBUS_TYPE_STRING , & m -> un™ ); 305 ià( m -> su±ime ) 306 `diù_­³nd_’Œy (& diù , "Time", DBUS_TYPE_UINT64 , & m -> time ); 308 `diù_­³nd_’Œy (& diù , "Ty³", DBUS_TYPE_STRING , & m -> ty³ ); 309 `diù_­³nd_’Œy (& diù , "M—su»m’t", DBUS_TYPE_STRING , & m -> v®ue ); 311 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & diù ); 313 `dbus_mes§ge_£t_no_»¶y ( msg , TRUE ); 314 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), msg ); 315 } } 317  $»cv_m—su»m’t ( th”mom‘” * t ,  m—su»m’t * m ) 319 GSLi¡ * wli¡ ; 321 m -> t =; 323 ià( `g_¡rcmp0 ( m -> v®ue , "intermediate") == 0) 324 wli¡ = t -> d­‹r -> iw©ch”s ; 326 wli¡ = t -> d­‹r -> fw©ch”s ; 328 `g_¦i¡_fÜ—ch ( wli¡ , upd©e_w©ch” , m ); 329 } } 331  $´oc_m—su»m’t ( th”mom‘” * t , cÚ¡ ušt8_t * pdu , 332 ušt16_t Ën , gboÞ—n fš® ) 334  m—su»m’t m ; 335 cÚ¡ * ty³ = NULL ; 336 ušt8_t æags ; 337 ušt32_t ¿w ; 340 pdu += 3; 341 Ën -= 3; 343 ià( Ën < 1) { 344 `DBG ("Mandatory flags‡re‚ot…rovided"); 348 `mem£t (& m , 0, (m)); 350 æags = * pdu ; 352 ià( æags & TEMP_UNITS ) 353 m . un™ = "fahrenheit"; 355 m . un™ = "celsius"; 357 pdu ++; 358 Ën --; 360 ià( Ën < 4) { 361 `DBG ("Mandatoryemperature measurement value is‚ot…rovided"); 365 ¿w = `g‘_Ë32 ( pdu ); 366 m . mªt = ¿w & 0x00FFFFFF; 367 m . exp = (( št32_t è ¿w ) >> 24; 369 ià( m . mªt & 0x00800000) { 371 m . mªt = m.mªˆ- FLOAT_MAX_MANTISSA ; 374 pdu += 4; 375 Ën -= 4; 377 ià( æags & TEMP_TIME_STAMP ) { 378  tm ts ; 379 time_t time ; 381 ià( Ën < 7) { 382 `DBG ("Time stamp is‚ot…rovided"); 386 ts . tm_y—r = `g‘_Ë16 ( pdu ) - 1900; 387 ts . tm_mÚ = *( pdu + 2) - 1; 388 ts . tm_mday = *( pdu + 3); 389 ts . tm_hour = *( pdu + 4); 390 ts . tm_mš = *( pdu + 5); 391 ts . tm_£c = *( pdu + 6); 392 ts . tm_isd¡ = -1; 394 time = `mktime (& ts ); 395 m . time = ( ušt64_t )ime; 396 m . su±ime = TRUE ; 398 pdu += 7; 399 Ën -= 7; 402 ià( æags & TEMP_TYPE ) { 403 ià( Ën < 1) { 404 `DBG ("Temperatureype is‚ot…rovided"); 408 ty³ = `‹m±y³2¡r (* pdu ); 409 } ià( t -> has_ty³ ) { 410 ty³ = `‹m±y³2¡r ( t ->type); 413 m . ty³ = `g_¡rdup (type); 414 m . v®ue = fš® ? "final" : "intermediate"; 416 `»cv_m—su»m’t ( t , & m ); 417 `g_ä“ ( m . ty³ ); 418 } } 421  $m—su»m’t_šd_hªdËr (cÚ¡ ušt8_t * pdu , ušt16_t Ën , 422 gpoš‹r u£r_d©a ) 424  th”mom‘” * t = u£r_d©a ; 425 ušt8_t * Ýdu ; 426 ušt16_t Þ’ ; 427 size_t ¶’ ; 429 ià( Ën < 3) { 430 `DBG ("Bad…du„eceived"); 434 `´oc_m—su»m’t ( t , pdu , Ën , TRUE ); 436 Ýdu = `g_©Œib_g‘_bufãr ( t -> ©Œib , & ¶’ ); 437 Þ’ = `’c_cÚfœm©iÚ ( Ýdu , ¶’ ); 439 ià( Þ’ > 0) 440 `g_©Œib_£nd ( t -> ©Œib , 0, Ýdu , Þ’ , NULL , NULL, NULL); 441 } } 443  $š‹rmedŸ‹_nÙify_hªdËr (cÚ¡ ušt8_t * pdu , ušt16_t Ën , 444 gpoš‹r u£r_d©a ) 446  th”mom‘” * t = u£r_d©a ; 448 ià( Ën < 3) { 449 `DBG ("Bad…du„eceived"); 453 `´oc_m—su»m’t ( t , pdu , Ën , FALSE ); 454 } } 456  $š‹rv®_šd_hªdËr (cÚ¡ ušt8_t * pdu , ušt16_t Ën , 457 gpoš‹r u£r_d©a ) 459  th”mom‘” * t = u£r_d©a ; 460 ušt16_t š‹rv® ; 461 ušt8_t * Ýdu ; 462 ušt16_t Þ’ ; 463 size_t ¶’ ; 465 ià( Ën < 5) { 466 `DBG ("Bad…du„eceived"); 470 š‹rv® = `g‘_Ë16 ( pdu + 3); 471 `chªge_´Ý”ty ( t , "IÁ”v®", & š‹rv® ); 473 Ýdu = `g_©Œib_g‘_bufãr ( t -> ©Œib , & ¶’ ); 474 Þ’ = `’c_cÚfœm©iÚ ( Ýdu , ¶’ ); 476 ià( Þ’ > 0) 477 `g_©Œib_£nd ( t -> ©Œib , 0, Ýdu , Þ’ , NULL , NULL, NULL); 478 } } 480  $v®id_¿nge_desc_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 481 gpoš‹r u£r_d©a ) 483  th”mom‘” * t = u£r_d©a ; 484 ušt8_t v®ue [ VALID_RANGE_DESC_SIZE ]; 485 ušt16_t max , mš ; 486 ssize_t vËn ; 488 ià( ¡©us != 0) { 489 `DBG ("Valid Range descriptor„ead failed: %s", 490 `©t_ecode2¡r ( ¡©us )); 494 vËn = `dec_»ad_»¥ ( pdu , Ën , v®ue , (value)); 495 ià( vËn < 0) { 496 `DBG ("Protocolƒrror\n"); 500 ià( vËn < 4) { 501 `DBG ("Invalid„ange„eceived"); 505 mš = `g‘_Ë16 (& v®ue [0]); 506 max = `g‘_Ë16 (& v®ue [2]); 508 ià( mš =ð0 || mš > max ) { 509 `DBG ("Invalid„ange"); 513 `chªge_´Ý”ty ( t , "Maximum", & max ); 514 `chªge_´Ý”ty ( t , "Mšimum", & mš ); 515 } } 517  $wr™e_ccc_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , 518 gušt16 Ën , gpoš‹r u£r_d©a ) 520 * msg = u£r_d©a ; 522 ià( ¡©us != 0) 523 `”rÜ ("% çžed", msg ); 525 `g_ä“ ( msg ); 526 } } 528  $´oûss_th”mom‘”_desc ( ch¬aù”i¡ic * ch , ušt16_t uuid , 529 ušt16_t hªdË ) 531 ušt8_t ©v® [2]; 532 ušt16_t v® ; 533 * msg ; 535 ià( uuid =ð GATT_CHARAC_VALID_RANGE_UUID ) { 536 ià( `g_¡rcmp0 ( ch -> uuid , MEASUREMENT_INTERVAL_UUID ) == 0) 537 `g©t_»ad_ch¬ ( ch -> t -> ©Œib , hªdË , 538 v®id_¿nge_desc_cb , ch -> t ); 542 ià( uuid !ð GATT_CLIENT_CHARAC_CFG_UUID ) 545 ià( `g_¡rcmp0 ( ch -> uuid , TEMPERATURE_MEASUREMENT_UUID ) == 0) { 546 ch -> t -> m—su»m’t_ccc_hªdË = hªdË ; 548 ià( `g_¦i¡_Ëngth ( ch -> t -> d­‹r -> fw©ch”s ) == 0) { 549 v® = 0x0000; 550 msg = `g_¡rdup ("Disable Temperature Measurement ind"); 552 v® = GATT_CLIENT_CHARAC_CFG_IND_BIT ; 553 msg = `g_¡rdup ("Enable Temperature Measurement ind"); 555 } ià( `g_¡rcmp0 ( ch -> uuid , INTERMEDIATE_TEMPERATURE_UUID ) == 0) { 556 ch -> t -> š‹rmedŸ‹_ccc_hªdË = hªdË ; 558 ià( `g_¦i¡_Ëngth ( ch -> t -> d­‹r -> iw©ch”s ) == 0) { 559 v® = 0x0000; 560 msg = `g_¡rdup ("Disable Intermediate Temperature‚oti"); 562 v® = GATT_CLIENT_CHARAC_CFG_NOTIF_BIT ; 563 msg = `g_¡rdup ("Enable Intermediate Temperature‚oti"); 565 } ià( `g_¡rcmp0 ( ch -> uuid , MEASUREMENT_INTERVAL_UUID ) == 0) { 566 v® = GATT_CLIENT_CHARAC_CFG_IND_BIT ; 567 msg = `g_¡rdup ("Enable Measurement Interval indication"); 572 `put_Ë16 ( v® , ©v® ); 573 `g©t_wr™e_ch¬ ( ch -> t -> ©Œib , hªdË , ©v® , (atval), 574 wr™e_ccc_cb , msg ); 575 } } 577  $discov”_desc_cb ( gušt8 ¡©us , GSLi¡ * descs , gpoš‹r u£r_d©a ) 579  ch¬aù”i¡ic * ch = u£r_d©a ; 581 ià( ¡©us != 0) { 582 `”rÜ ("Discover‡ll characteristic descriptors failed [%s]: %s", 583 ch -> uuid , `©t_ecode2¡r ( ¡©us )); 584  dÚe ; 587  ; descs ; desc ðdescs-> Ãxt ) { 588  g©t_desc * desc = descs -> d©a ; 590 `´oûss_th”mom‘”_desc ( ch , desc -> uuid16 , desc-> hªdË ); 593 dÚe : 594 `g_ä“ ( ch ); 595 } } 597  $discov”_desc ( th”mom‘” * t ,  g©t_ch¬ * c , 598  g©t_ch¬ * c_Ãxt ) 600  ch¬aù”i¡ic * ch ; 601 ušt16_t ¡¬t , ’d ; 603 ¡¬t = c -> v®ue_hªdË + 1; 605 ià( c_Ãxt !ð NULL ) { 606 ià( ¡¬t =ð c_Ãxt -> hªdË ) 608 ’d = c_Ãxt -> hªdË - 1; 609 } ià( c -> v®ue_hªdË !ð t -> svc_¿nge -> ’d ) { 610 ’d = t -> svc_¿nge ->end; 615 ch = `g_Ãw0 ( ch¬aù”i¡ic , 1); 616 ch -> t =; 617 `memýy ( ch -> uuid , c ->uuid, (c->uuid)); 619 `g©t_discov”_desc ( t -> ©Œib , ¡¬t , ’d , NULL , discov”_desc_cb , ch ); 620 } } 622  $»ad_‹mp_ty³_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 623 gpoš‹r u£r_d©a ) 625  th”mom‘” * t = u£r_d©a ; 626 ušt8_t v®ue [ TEMPERATURE_TYPE_SIZE ]; 627 ssize_t vËn ; 629 ià( ¡©us != 0) { 630 `DBG ("Temperature Type value„ead failed: %s", 631 `©t_ecode2¡r ( ¡©us )); 635 vËn = `dec_»ad_»¥ ( pdu , Ën , v®ue , (value)); 636 ià( vËn < 0) { 637 `DBG ("Protocolƒrror."); 641 ià( vËn != 1) { 642 `DBG ("Invalid†ength for Temperatureype"); 646 t -> has_ty³ = TRUE ; 647 t -> ty³ = v®ue [0]; 648 } } 650  $»ad_š‹rv®_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 651 gpoš‹r u£r_d©a ) 653  th”mom‘” * t = u£r_d©a ; 654 ušt8_t v®ue [ MEASUREMENT_INTERVAL_SIZE ]; 655 ušt16_t š‹rv® ; 656 ssize_t vËn ; 658 ià( ¡©us != 0) { 659 `DBG ("Measurement Interval value„ead failed: %s", 660 `©t_ecode2¡r ( ¡©us )); 664 vËn = `dec_»ad_»¥ ( pdu , Ën , v®ue , (value)); 665 ià( vËn < 0) { 666 `DBG ("Protocolƒrror\n"); 670 ià( vËn < 2) { 671 `DBG ("Invalid Interval„eceived"); 675 š‹rv® = `g‘_Ë16 (& v®ue [0]); 676 `chªge_´Ý”ty ( t , "IÁ”v®", & š‹rv® ); 677 } } 679  $´oûss_th”mom‘”_ch¬ ( th”mom‘” * t , 680  g©t_ch¬ * c , g©t_ch¬ * c_Ãxt ) 682 ià( `g_¡rcmp0 ( c -> uuid , INTERMEDIATE_TEMPERATURE_UUID ) == 0) { 683 gboÞ—n š‹rmedŸ‹ = TRUE ; 684 `chªge_´Ý”ty ( t , "IÁ”medŸ‹", & š‹rmedŸ‹ ); 686 t -> ©tio_š‹rmedŸ‹_id = `g_©Œib_»gi¡” Ñ-> ©Œib , 687 ATT_OP_HANDLE_NOTIFY , c -> v®ue_hªdË , 688 š‹rmedŸ‹_nÙify_hªdËr , t , NULL ); 690 `discov”_desc ( t , c , c_Ãxt ); 691 } ià( `g_¡rcmp0 ( c -> uuid , TEMPERATURE_MEASUREMENT_UUID ) == 0) { 693 t -> ©tio_m—su»m’t_id = `g_©Œib_»gi¡” Ñ-> ©Œib , 694 ATT_OP_HANDLE_IND , c -> v®ue_hªdË , 695 m—su»m’t_šd_hªdËr , t , NULL ); 697 `discov”_desc ( t , c , c_Ãxt ); 698 } ià( `g_¡rcmp0 ( c -> uuid , TEMPERATURE_TYPE_UUID ) == 0) { 699 `g©t_»ad_ch¬ ( t -> ©Œib , c -> v®ue_hªdË , 700 »ad_‹mp_ty³_cb , t ); 701 } ià( `g_¡rcmp0 ( c -> uuid , MEASUREMENT_INTERVAL_UUID ) == 0) { 702 boÞ Ãed_desc = çl£ ; 704 `g©t_»ad_ch¬ ( t -> ©Œib , c -> v®ue_hªdË , »ad_š‹rv®_cb ,); 706 ià( c -> ´Ý”t›s & GATT_CHR_PROP_WRITE ) { 707 t -> š‹rv®_v®_hªdË = c -> v®ue_hªdË ; 708 Ãed_desc = Œue ; 711 ià( c -> ´Ý”t›s & GATT_CHR_PROP_INDICATE ) { 712 t -> ©tio_š‹rv®_id = `g_©Œib_»gi¡” Ñ-> ©Œib , 713 ATT_OP_HANDLE_IND , c -> v®ue_hªdË , 714 š‹rv®_šd_hªdËr , t , NULL ); 715 Ãed_desc = Œue ; 718 ià( Ãed_desc ) 719 `discov”_desc ( t , c , c_Ãxt ); 721 } } 723  $cÚfigu»_th”mom‘”_cb ( ušt8_t ¡©us , GSLi¡ * ch¬aù”i¡ics , 724 * u£r_d©a ) 726  th”mom‘” * t = u£r_d©a ; 727 GSLi¡ * l ; 729 ià( ¡©us != 0) { 730 `”rÜ ("Discoverhermometer characteristics: %s", 731 `©t_ecode2¡r ( ¡©us )); 735  l = ch¬aù”i¡ics ;†;† =†-> Ãxt ) { 736  g©t_ch¬ * c = l -> d©a ; 737  g©t_ch¬ * c_Ãxt = ( l -> Ãxt ?†->Ãxt-> d©a : NULL ); 739 `´oûss_th”mom‘”_ch¬ ( t , c , c_Ãxt ); 741 } } 743  $wr™e_š‹rv®_cb ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 744 gpoš‹r u£r_d©a ) 746  tmp_š‹rv®_d©a * d©a = u£r_d©a ; 748 ià( ¡©us != 0) { 749 `”rÜ ("Interval Write Request failed %s", 750 `©t_ecode2¡r ( ¡©us )); 751  dÚe ; 754 ià(! `dec_wr™e_»¥ ( pdu , Ën )) { 755 `”rÜ ("Interval Write Request:…rotocolƒrror"); 756  dÚe ; 759 `chªge_´Ý”ty ( d©a -> th”mom‘” , "IÁ”v®", &d©a-> š‹rv® ); 761 dÚe : 762 `g_ä“ ( u£r_d©a ); 763 } } 765  $’abË_fš®_m—su»m’t ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 767  th”mom‘” * t = d©a ; 768 ušt16_t hªdË = t -> m—su»m’t_ccc_hªdË ; 769 ušt8_t v®ue [2]; 770 * msg ; 772 ià( t -> ©Œib =ð NULL || ! hªdË ) 775 `put_Ë16 ( GATT_CLIENT_CHARAC_CFG_IND_BIT , v®ue ); 776 msg = `g_¡rdup ("Enable Temperature Measurement indications"); 778 `g©t_wr™e_ch¬ ( t -> ©Œib , hªdË , v®ue , (value), 779 wr™e_ccc_cb , msg ); 780 } } 782  $’abË_š‹rmedŸ‹_m—su»m’t ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 784  th”mom‘” * t = d©a ; 785 ušt16_t hªdË = t -> š‹rmedŸ‹_ccc_hªdË ; 786 ušt8_t v®ue [2]; 787 * msg ; 789 ià( t -> ©Œib =ð NULL || ! hªdË ) 792 `put_Ë16 ( GATT_CLIENT_CHARAC_CFG_NOTIF_BIT , v®ue ); 793 msg = `g_¡rdup ("Enable Intermediate Temperature‚otifications"); 795 `g©t_wr™e_ch¬ ( t -> ©Œib , hªdË , v®ue , (value), 796 wr™e_ccc_cb , msg ); 797 } } 799  $di§bË_fš®_m—su»m’t ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 801  th”mom‘” * t = d©a ; 802 ušt16_t hªdË = t -> m—su»m’t_ccc_hªdË ; 803 ušt8_t v®ue [2]; 804 * msg ; 806 ià( t -> ©Œib =ð NULL || ! hªdË ) 809 `put_Ë16 (0x0000, v®ue ); 810 msg = `g_¡rdup ("Disable Temperature Measurement indications"); 812 `g©t_wr™e_ch¬ ( t -> ©Œib , hªdË , v®ue , (value), 813 wr™e_ccc_cb , msg ); 814 } } 816  $di§bË_š‹rmedŸ‹_m—su»m’t ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 818  th”mom‘” * t = d©a ; 819 ušt16_t hªdË = t -> š‹rmedŸ‹_ccc_hªdË ; 820 ušt8_t v®ue [2]; 821 * msg ; 823 ià( t -> ©Œib =ð NULL || ! hªdË ) 826 `put_Ë16 (0x0000, v®ue ); 827 msg = `g_¡rdup ("Disable Intermediate Temperature‚otifications"); 829 `g©t_wr™e_ch¬ ( t -> ©Œib , hªdË , v®ue , (value), 830 wr™e_ccc_cb , msg ); 831 } } 833  $»move_št_w©ch” ( th”mom‘”_ad­‹r * d­‹r , 834  w©ch” * w ) 836 ià(! `g_¦i¡_fšd ( d­‹r -> iw©ch”s , w )) 839 d­‹r -> iw©ch”s = `g_¦i¡_»move Ñad­‹r->iw©ch”s, w ); 841 ià( `g_¦i¡_Ëngth ( d­‹r -> iw©ch”s ) == 0) 842 `g_¦i¡_fÜ—ch ( d­‹r -> deviûs , 843 di§bË_š‹rmedŸ‹_m—su»m’t , 0); 844 } } 846  $w©ch”_ex™ ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 848  w©ch” *w©ch” = u£r_d©a ; 849  th”mom‘”_ad­‹r * d­‹r = w©ch” ->tadapter; 851 `DBG ("Th”mom‘” w©ch” % discÚÃùed", w©ch” -> ·th ); 853 `»move_št_w©ch” ( d­‹r , w©ch” ); 855 d­‹r -> fw©ch”s = `g_¦i¡_»move Ñad­‹r->fw©ch”s, w©ch” ); 856 `g_dbus_»move_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), w©ch” -> id ); 858 ià( `g_¦i¡_Ëngth ( d­‹r -> fw©ch”s ) == 0) 859 `g_¦i¡_fÜ—ch ( d­‹r -> deviûs , 860 di§bË_fš®_m—su»m’t , 0); 861 } } 863  w©ch” * $fšd_w©ch” ( GSLi¡ * li¡ , cÚ¡ * £nd” , 864 cÚ¡ * ·th ) 866  w©ch” * m©ch ; 867 GSLi¡ * l ; 869 m©ch = `g_Ãw0 ( w©ch” , 1); 870 m©ch -> ¤v = `g_¡rdup ( £nd” ); 871 m©ch -> ·th = `g_¡rdup (path); 873 l = `g_¦i¡_fšd_cu¡om ( li¡ , m©ch , cmp_w©ch” ); 874 `de¡roy_w©ch” ( m©ch ); 876 ià( l !ð NULL ) 877  l -> d©a ; 879  NULL ; 880 } } 882  DBusMes§ge * $»gi¡”_w©ch” ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 883 * d©a ) 885 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 886  th”mom‘”_ad­‹r * d­‹r = d©a ; 887  w©ch” *watcher; 888 * ·th ; 890 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 891 DBUS_TYPE_INVALID )) 892  `btd_”rÜ_šv®id_¬gs ( msg ); 894 w©ch” = `fšd_w©ch” ( d­‹r -> fw©ch”s , £nd” , ·th ); 895 ià( w©ch” !ð NULL ) 896  `btd_”rÜ_®»ady_exi¡s ( msg ); 898 `DBG ("Th”mom‘” w©ch” % »gi¡”ed", ·th ); 900 w©ch” = `g_Ãw0 (watcher, 1); 901 w©ch” -> ¤v = `g_¡rdup ( £nd” ); 902 w©ch” -> ·th = `g_¡rdup (path); 903 w©ch” -> d­‹r =adapter; 904 w©ch” -> id = `g_dbus_add_discÚÃù_w©ch ( cÚn , £nd” , w©ch”_ex™ , 905 w©ch” , de¡roy_w©ch” ); 907 ià( `g_¦i¡_Ëngth ( d­‹r -> fw©ch”s ) == 0) 908 `g_¦i¡_fÜ—ch ( d­‹r -> deviûs , ’abË_fš®_m—su»m’t , 0); 910 d­‹r -> fw©ch”s = `g_¦i¡_´•’d Ñad­‹r->fw©ch”s, w©ch” ); 912  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 913 } } 915  DBusMes§ge * $uÄegi¡”_w©ch” ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 916 * d©a ) 918 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 919  th”mom‘”_ad­‹r * d­‹r = d©a ; 920  w©ch” *watcher; 921 * ·th ; 923 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 924 DBUS_TYPE_INVALID )) 925  `btd_”rÜ_šv®id_¬gs ( msg ); 927 w©ch” = `fšd_w©ch” ( d­‹r -> fw©ch”s , £nd” , ·th ); 928 ià( w©ch” =ð NULL ) 929  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 931 `DBG ("Th”mom‘” w©ch” % uÄegi¡”ed", ·th ); 933 `»move_št_w©ch” ( d­‹r , w©ch” ); 935 d­‹r -> fw©ch”s = `g_¦i¡_»move Ñad­‹r->fw©ch”s, w©ch” ); 936 `g_dbus_»move_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), w©ch” -> id ); 938 ià( `g_¦i¡_Ëngth ( d­‹r -> fw©ch”s ) == 0) 939 `g_¦i¡_fÜ—ch ( d­‹r -> deviûs , 940 di§bË_fš®_m—su»m’t , 0); 942  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 943 } } 945  DBusMes§ge * $’abË_š‹rmedŸ‹ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 946 * d©a ) 948 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 949  th”mom‘”_ad­‹r * = d©a ; 950  w©ch” *watcher; 951 * ·th ; 953 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 954 DBUS_TYPE_INVALID )) 955  `btd_”rÜ_šv®id_¬gs ( msg ); 957 w©ch” = `fšd_w©ch” ( -> fw©ch”s , £nd” , ·th ); 958 ià( w©ch” =ð NULL ) 959  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 961 ià( `fšd_w©ch” ( -> iw©ch”s , £nd” , ·th )) 962  `btd_”rÜ_®»ady_exi¡s ( msg ); 964 `DBG ("IÁ”medŸ‹ m—su»m’ˆw©ch” % »gi¡”ed", ·th ); 966 ià( `g_¦i¡_Ëngth ( -> iw©ch”s ) == 0) 967 `g_¦i¡_fÜ—ch ( -> deviûs , 968 ’abË_š‹rmedŸ‹_m—su»m’t , 0); 970 -> iw©ch”s = `g_¦i¡_´•’d Ña->iw©ch”s, w©ch” ); 972  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 973 } } 975  DBusMes§ge * $di§bË_š‹rmedŸ‹ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 976 * d©a ) 978 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 979  th”mom‘”_ad­‹r * = d©a ; 980  w©ch” *watcher; 981 * ·th ; 983 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 984 DBUS_TYPE_INVALID )) 985  `btd_”rÜ_šv®id_¬gs ( msg ); 987 w©ch” = `fšd_w©ch” ( -> iw©ch”s , £nd” , ·th ); 988 ià( w©ch” =ð NULL ) 989  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 991 `DBG ("IÁ”medŸ‹ m—su»m’ˆ% uÄegi¡”ed", ·th ); 993 `»move_št_w©ch” ( , w©ch” ); 995  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 996 } } 998  gboÞ—n $´Ý”ty_g‘_š‹rmedŸ‹ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 999 DBusMes§geI‹r * ™” , * d©a ) 1001  th”mom‘” * t = d©a ; 1002 dbus_boÞ_t v® ; 1004 v® = !! t -> š‹rmedŸ‹ ; 1006 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v® ); 1008  TRUE ; 1009 } } 1011  gboÞ—n $´Ý”ty_g‘_š‹rv® (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1012 DBusMes§geI‹r * ™” , * d©a ) 1014  th”mom‘” * t = d©a ; 1016 ià(! t -> has_š‹rv® ) 1017  FALSE ; 1019 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT16 , & t -> š‹rv® ); 1021  TRUE ; 1022 } } 1024  $´Ý”ty_£t_š‹rv® (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1025 DBusMes§geI‹r * ™” , 1026 GDBusP’dšgPrÝ”tyS‘ id , * d©a ) 1028  th”mom‘” * t = d©a ; 1029  tmp_š‹rv®_d©a * š‹rv®_d©a ; 1030 ušt16_t v® ; 1031 ušt8_t ©v® [2]; 1033 ià( t -> š‹rv®_v®_hªdË == 0) { 1034 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 1035 ERROR_INTERFACE ".NotSupported", 1040 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_UINT16 ) { 1041 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 1042 ERROR_INTERFACE ".InvalidArguments", 1047 `dbus_mes§ge_™”_g‘_basic ( ™” , & v® ); 1049 ià( v® < t -> mš || v® >-> max ) { 1050 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 1051 ERROR_INTERFACE ".InvalidArguments", 1056 `put_Ë16 ( v® , & ©v® [0]); 1058 š‹rv®_d©a = `g_Ãw0 ( tmp_š‹rv®_d©a , 1); 1059 š‹rv®_d©a -> th”mom‘” = t ; 1060 š‹rv®_d©a -> š‹rv® = v® ; 1061 `g©t_wr™e_ch¬ ( t -> ©Œib ,-> š‹rv®_v®_hªdË , ©v® , (atval), 1062 wr™e_š‹rv®_cb , š‹rv®_d©a ); 1064 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 1065 } } 1067  gboÞ—n $´Ý”ty_exi¡s_š‹rv® (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1068 * d©a ) 1070  th”mom‘” * t = d©a ; 1072  t -> has_š‹rv® ; 1073 } } 1075  gboÞ—n $´Ý”ty_g‘_maximum (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1076 DBusMes§geI‹r * ™” , * d©a ) 1078  th”mom‘” * t = d©a ; 1080 ià(! t -> has_š‹rv® ) 1081  FALSE ; 1083 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT16 , & t -> max ); 1085  TRUE ; 1086 } } 1088  gboÞ—n $´Ý”ty_g‘_mšimum (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1089 DBusMes§geI‹r * ™” , * d©a ) 1091  th”mom‘” * t = d©a ; 1093 ià(! t -> has_š‹rv® ) 1094  FALSE ; 1096 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT16 , & t -> mš ); 1098  TRUE ; 1099 } } 1101 cÚ¡ GDBusPrÝ”tyTabË gth”mom‘”_´Ý”t›s [] = { 1102 { "IÁ”medŸ‹", "b", ´Ý”ty_g‘_š‹rmedŸ‹ }, 1103 { "IÁ”v®", "q", ´Ý”ty_g‘_š‹rv® , ´Ý”ty_£t_š‹rv® , 1104 ´Ý”ty_exi¡s_š‹rv® }, 1105 { "Maximum", "q", ´Ý”ty_g‘_maximum , NULL , 1106 ´Ý”ty_exi¡s_š‹rv® }, 1107 { "Mšimum", "q", ´Ý”ty_g‘_mšimum , NULL , 1108 ´Ý”ty_exi¡s_š‹rv® }, 1112  $©tio_cÚÃùed_cb ( GA‰rib * ©Œib , gpoš‹r u£r_d©a ) 1114  th”mom‘” * t = u£r_d©a ; 1116 t -> ©Œib = `g_©Œib_»f (attrib); 1118 `g©t_discov”_ch¬ ( t -> ©Œib ,-> svc_¿nge -> ¡¬t ,->svc_¿nge-> ’d , 1119 NULL , cÚfigu»_th”mom‘”_cb , t ); 1120 } } 1122  $©tio_discÚÃùed_cb ( gpoš‹r u£r_d©a ) 1124  th”mom‘” * t = u£r_d©a ; 1126 `DBG ("GATT Disconnected"); 1128 ià( t -> ©tio_m—su»m’t_id > 0) { 1129 `g_©Œib_uÄegi¡” ( t -> ©Œib ,-> ©tio_m—su»m’t_id ); 1130 t -> ©tio_m—su»m’t_id = 0; 1133 ià( t -> ©tio_š‹rmedŸ‹_id > 0) { 1134 `g_©Œib_uÄegi¡” ( t -> ©Œib ,-> ©tio_š‹rmedŸ‹_id ); 1135 t -> ©tio_š‹rmedŸ‹_id = 0; 1138 ià( t -> ©tio_š‹rv®_id > 0) { 1139 `g_©Œib_uÄegi¡” ( t -> ©Œib ,-> ©tio_š‹rv®_id ); 1140 t -> ©tio_š‹rv®_id = 0; 1143 `g_©Œib_uÄef ( t -> ©Œib ); 1144 t -> ©Œib = NULL ; 1145 } } 1147  $th”mom‘”_»gi¡” ( btd_deviû * deviû , 1148  g©t_´im¬y * ‰r ) 1150 cÚ¡ * ·th = `deviû_g‘_·th ( deviû ); 1151  th”mom‘” * t ; 1152  btd_ad­‹r * ad­‹r ; 1153  th”mom‘”_ad­‹r * d­‹r ; 1155 ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 1157 d­‹r = `fšd_th”mom‘”_ad­‹r ( ad­‹r ); 1159 ià( d­‹r =ð NULL ) 1162 t = `g_Ãw0 ( th”mom‘” , 1); 1163 t -> dev = `btd_deviû_»f ( deviû ); 1164 t -> d­‹r =adapter; 1165 t -> svc_¿nge = `g_Ãw0 ( ©t_¿nge , 1); 1166 t -> svc_¿nge -> ¡¬t = ‰r -> ¿nge .start; 1167 t -> svc_¿nge -> ’d = ‰r -> ¿nge .end; 1169 d­‹r -> deviûs = `g_¦i¡_´•’d Ñad­‹r->deviûs, t ); 1171 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1172 ·th , THERMOMETER_INTERFACE , 1173 NULL , NULL, th”mom‘”_´Ý”t›s , 1174 t , de¡roy_th”mom‘” )) { 1175 `”rÜ ("D-Bus failedo„egister %s interface", 1176 THERMOMETER_INTERFACE ); 1177 `de¡roy_th”mom‘” ( t ); 1178  - EIO ; 1181 t -> ©tioid = `btd_deviû_add_©tio_ÿÎback ( deviû , ©tio_cÚÃùed_cb , 1182 ©tio_discÚÃùed_cb , t ); 1184 } } 1186  $th”mom‘”_uÄegi¡” ( btd_deviû * deviû ) 1188  th”mom‘” * t ; 1189  btd_ad­‹r * ad­‹r ; 1190  th”mom‘”_ad­‹r * d­‹r ; 1191 GSLi¡ * l ; 1193 ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 1195 d­‹r = `fšd_th”mom‘”_ad­‹r ( ad­‹r ); 1197 ià( d­‹r =ð NULL ) 1200 l = `g_¦i¡_fšd_cu¡om ( d­‹r -> deviûs , deviû , cmp_deviû ); 1201 ià( l =ð NULL ) 1204 t = l -> d©a ; 1206 d­‹r -> deviûs = `g_¦i¡_»move Ñad­‹r->deviûs, t ); 1208 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1209 `deviû_g‘_·th ( t -> dev ), THERMOMETER_INTERFACE ); 1210 } } 1212 cÚ¡ GDBusM‘hodTabË gth”mom‘”_mªag”_m‘hods [] = { 1213 { GDBUS_METHOD ("RegisterWatcher", 1214 GDBUS_ARGS ({ "ag’t", "o" }), NULL , 1215 »gi¡”_w©ch” ) }, 1216 { GDBUS_METHOD ("UnregisterWatcher", 1217 GDBUS_ARGS ({ "ag’t", "o" }), NULL , 1218 uÄegi¡”_w©ch” ) }, 1219 { GDBUS_METHOD ("EnableIntermediateMeasurement", 1220 GDBUS_ARGS ({ "ag’t", "o" }), NULL , 1221 ’abË_š‹rmedŸ‹ ) }, 1222 { GDBUS_METHOD ("DisableIntermediateMeasurement", 1223 GDBUS_ARGS ({ "ag’t", "o" }), NULL , 1224 di§bË_š‹rmedŸ‹ ) }, 1228  $th”mom‘”_ad­‹r_»gi¡” ( btd_ad­‹r * ad­‹r ) 1230  th”mom‘”_ad­‹r * d­‹r ; 1232 d­‹r = `g_Ãw0 ( th”mom‘”_ad­‹r , 1); 1233 d­‹r -> ad­‹r =‡dapter; 1235 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1236 `ad­‹r_g‘_·th ( ad­‹r ), 1237 THERMOMETER_MANAGER_INTERFACE , 1238 th”mom‘”_mªag”_m‘hods , 1239 NULL , NULL, d­‹r , 1240 de¡roy_th”mom‘”_ad­‹r )) { 1241 `”rÜ ("D-Bus failedo„egister %s interface", 1242 THERMOMETER_MANAGER_INTERFACE ); 1243 `de¡roy_th”mom‘”_ad­‹r ( d­‹r ); 1244  - EIO ; 1247 th”mom‘”_ad­‹rs = `g_¦i¡_´•’d Ñh”mom‘”_ad­‹rs, d­‹r ); 1250 } } 1252  $th”mom‘”_ad­‹r_uÄegi¡” ( btd_ad­‹r * ad­‹r ) 1254  th”mom‘”_ad­‹r * d­‹r ; 1256 d­‹r = `fšd_th”mom‘”_ad­‹r ( ad­‹r ); 1257 ià( d­‹r =ð NULL ) 1260 th”mom‘”_ad­‹rs = `g_¦i¡_»move Ñh”mom‘”_ad­‹rs, d­‹r ); 1262 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1263 `ad­‹r_g‘_·th ( d­‹r -> ad­‹r ), 1264 THERMOMETER_MANAGER_INTERFACE ); 1265 } } 1267  $th”mom‘”_deviû_´obe ( btd_£rviû * £rviû ) 1269  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 1270  g©t_´im¬y * ‰r ; 1272 ‰r = `btd_deviû_g‘_´im¬y ( deviû , HEALTH_THERMOMETER_UUID ); 1273 ià( ‰r =ð NULL ) 1274  - EINVAL ; 1276  `th”mom‘”_»gi¡” ( deviû , ‰r ); 1277 } } 1279  $th”mom‘”_deviû_»move ( btd_£rviû * £rviû ) 1281  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 1283 `th”mom‘”_uÄegi¡” ( deviû ); 1284 } } 1286  $th”mom‘”_ad­‹r_´obe ( btd_´ofže * p , 1287  btd_ad­‹r * ad­‹r ) 1289  `th”mom‘”_ad­‹r_»gi¡” ( ad­‹r ); 1290 } } 1292  $th”mom‘”_ad­‹r_»move ( btd_´ofže * p , 1293  btd_ad­‹r * ad­‹r ) 1295 `th”mom‘”_ad­‹r_uÄegi¡” ( ad­‹r ); 1296 } } 1298  btd_´ofže gth”mom‘”_´ofže = { 1299 . Çme = "Health Thermometer GATT driver", 1300 . g»mÙe_uuid = HEALTH_THERMOMETER_UUID , 1301 . gdeviû_´obe = th”mom‘”_deviû_´obe , 1302 . gdeviû_»move = th”mom‘”_deviû_»move , 1303 . gad­‹r_´obe = th”mom‘”_ad­‹r_´obe , 1304 . gad­‹r_»move = th”mom‘”_ad­‹r_»move 1307  $th”mom‘”_š™ () 1309  `btd_´ofže_»gi¡” (& th”mom‘”_´ofže ); 1310 } } 1312  $th”mom‘”_ex™ () 1314 `btd_´ofže_uÄegi¡” (& th”mom‘”_´ofže ); 1315 } } 1317 BLUETOOTH_PLUGIN_DEFINE ( th”mom‘” , VERSION , BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 1318 th”mom‘”_š™ , th”mom‘”_ex™ ) @profiles/time/server.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~ 30  ~ 31  ~<”ºo.h > 32  ~<¡dboÞ.h > 34  ~"¤c/ad­‹r.h " 35  ~"¤c/deviû.h " 36  ~"¤c/´ofže.h " 37  ~"¤c/¶ugš.h " 39  ~"lib/uuid.h " 40  ~"©Œib/g©Œib.h " 41  ~"©Œib/©t.h " 42  ~"©Œib/g©t.h " 43  ~"©Œib/©t-d©aba£.h " 44  ~"¤c/sh¬ed/utž.h " 45  ~"¤c/©Œib-£rv”.h " 46  ~"©Œib/g©t-£rviû.h " 47  ~"¤c/log.h " 49  #CURRENT_TIME_SVC_UUID 0x1805 ) 50  #REF_TIME_UPDATE_SVC_UUID 0x1806 ) 52  #LOCAL_TIME_INFO_CHR_UUID 0x2A0F ) 53  #TIME_UPDATE_CTRL_CHR_UUID 0x2A16 ) 54  #TIME_UPDATE_STAT_CHR_UUID 0x2A17 ) 55  #CT_TIME_CHR_UUID 0x2A2B ) 58 mUPDATE_RESULT_SUCCESSFUL = 0, 59 mUPDATE_RESULT_CANCELED = 1, 60 mUPDATE_RESULT_NO_CONN = 2, 61 mUPDATE_RESULT_ERROR = 3, 62 mUPDATE_RESULT_TIMEOUT = 4, 63 mUPDATE_RESULT_NOT_ATTEMPTED = 5, 67 mUPDATE_STATE_IDLE = 0, 68 mUPDATE_STATE_PENDING = 1, 72 mGET_REFERENCE_UPDATE = 1, 73 mCANCEL_REFERENCE_UPDATE = 2, 76  $’code_cu¼’t_time ( ušt8_t v®ue [10]) 78  time¥ec ; 79  tm m; 81 ià( `þock_g‘time ( CLOCK_REALTIME , & ) == -1) { 82  ”r = - ”ºo ; 84 `”rÜ ("þock_g‘time: %s", `¡»¼Ü (- ”r )); 85  ”r ; 88 ià( `loÿÉime_r (& . tv_£c , & tm è=ð NULL ) { 89 `”rÜ ("localtime_r() failed"); 91  - EINVAL ; 94 `put_Ë16 (1900 + tm . tm_y—r , & v®ue [0]); 95 v®ue [2] = tm . tm_mÚ + 1; 96 v®ue [3] = tm . tm_mday ; 97 v®ue [4] = tm . tm_hour ; 98 v®ue [5] = tm . tm_mš ; 99 v®ue [6] = tm . tm_£c ; 100 v®ue [7] = tm . tm_wday == 0 ? 7 :m.tm_wday; 104 v®ue [8] = . tv_n£c / 3906250; 105 v®ue [9] = 0x00; 108 } } 110  ušt8_t $cu¼’t_time_»ad ( ©Œibu‹ * a , 111  btd_deviû * deviû , gpoš‹r u£r_d©a ) 113  btd_ad­‹r * ad­‹r = u£r_d©a ; 114 ušt8_t v®ue [10]; 116 ià( `’code_cu¼’t_time ( v®ue ) < 0) 117  ATT_ECODE_IO ; 119 `©Œib_db_upd©e ( ad­‹r , a -> hªdË , NULL , v®ue , (value), NULL); 122 } } 124  ušt8_t $loÿl_time_šfo_»ad ( ©Œibu‹ * a , 125  btd_deviû * deviû , gpoš‹r u£r_d©a ) 127  btd_ad­‹r * ad­‹r = u£r_d©a ; 128 ušt8_t v®ue [2]; 130 `DBG ("a=%p", a ); 132 `tz£t (); 136 v®ue [0] = ( ušt8_t è(-1 * timezÚe / (60 * 15)); 140 v®ue [1] = daylight ? 0xff : 0x00; 142 `©Œib_db_upd©e ( ad­‹r , a -> hªdË , NULL , v®ue , (value), NULL); 145 } } 147  gboÞ—n $»gi¡”_cu¼’t_time_£rviû ( btd_ad­‹r * ad­‹r ) 149 bt_uuid_t uuid ; 151 `bt_uuid16_ü—‹ (& uuid , CURRENT_TIME_SVC_UUID ); 154  `g©t_£rviû_add ( ad­‹r , GATT_PRIM_SVC_UUID , & uuid , 156 GATT_OPT_CHR_UUID16 , CT_TIME_CHR_UUID , 157 GATT_OPT_CHR_PROPS , GATT_CHR_PROP_READ | 158 GATT_CHR_PROP_NOTIFY , 159 GATT_OPT_CHR_VALUE_CB , ATTRIB_READ , 160 cu¼’t_time_»ad , ad­‹r , 163 GATT_OPT_CHR_UUID16 , LOCAL_TIME_INFO_CHR_UUID , 164 GATT_OPT_CHR_PROPS , GATT_CHR_PROP_READ , 165 GATT_OPT_CHR_VALUE_CB , ATTRIB_READ , 166 loÿl_time_šfo_»ad , ad­‹r , 168 GATT_OPT_INVALID ); 169 } } 171  ušt8_t $time_upd©e_cÚŒÞ ( ©Œibu‹ * a , 172  btd_deviû * deviû , 173 gpoš‹r u£r_d©a ) 175 `DBG ("hªdË 0x%04x", a -> hªdË ); 177 ià( a -> Ën != 1) 178 `DBG ("Inv®id cڌޅošˆv®usize: %zu", a -> Ën ); 180  a -> d©a [0]) { 181  GET_REFERENCE_UPDATE : 182 `DBG ("Get Reference Update"); 184  CANCEL_REFERENCE_UPDATE : 185 `DBG ("Cancel Reference Update"); 188 `DBG ("UnknowÀcommªd: 0x%02x", a -> d©a [0]); 192 } } 194  ušt8_t $time_upd©e_¡©us ( ©Œibu‹ * a , 195  btd_deviû * deviû , 196 gpoš‹r u£r_d©a ) 198  btd_ad­‹r * ad­‹r = u£r_d©a ; 199 ušt8_t v®ue [2]; 201 `DBG ("hªdË 0x%04x", a -> hªdË ); 203 v®ue [0] = UPDATE_STATE_IDLE ; 204 v®ue [1] = UPDATE_RESULT_SUCCESSFUL ; 205 `©Œib_db_upd©e ( ad­‹r , a -> hªdË , NULL , v®ue , (value), NULL); 208 } } 210  gboÞ—n $»gi¡”_»f_time_upd©e_£rviû ( btd_ad­‹r * ad­‹r ) 212 bt_uuid_t uuid ; 214 `bt_uuid16_ü—‹ (& uuid , REF_TIME_UPDATE_SVC_UUID ); 217  `g©t_£rviû_add ( ad­‹r , GATT_PRIM_SVC_UUID , & uuid , 219 GATT_OPT_CHR_UUID16 , TIME_UPDATE_CTRL_CHR_UUID , 220 GATT_OPT_CHR_PROPS , 221 GATT_CHR_PROP_WRITE_WITHOUT_RESP , 222 GATT_OPT_CHR_VALUE_CB , ATTRIB_WRITE , 223 time_upd©e_cÚŒÞ , ad­‹r , 226 GATT_OPT_CHR_UUID16 , TIME_UPDATE_STAT_CHR_UUID , 227 GATT_OPT_CHR_PROPS , GATT_CHR_PROP_READ , 228 GATT_OPT_CHR_VALUE_CB , ATTRIB_READ , 229 time_upd©e_¡©us , ad­‹r , 231 GATT_OPT_INVALID ); 232 } } 234  $time_£rv”_š™ ( btd_´ofže * p ,  btd_ad­‹r * ad­‹r ) 236 cÚ¡ * ·th = `ad­‹r_g‘_·th ( ad­‹r ); 238 `DBG ("·th %s", ·th ); 240 ià(! `»gi¡”_cu¼’t_time_£rviû ( ad­‹r )) { 241 `”rÜ ("Current Time Service could‚ot be„egistered"); 242  - EIO ; 245 ià(! `»gi¡”_»f_time_upd©e_£rviû ( ad­‹r )) { 246 `”rÜ ("Reference Time Update Service could‚ot be„egistered"); 247  - EIO ; 251 } } 253  $time_£rv”_ex™ ( btd_´ofže * p , 254  btd_ad­‹r * ad­‹r ) 256 cÚ¡ * ·th = `ad­‹r_g‘_·th ( ad­‹r ); 258 `DBG ("·th %s", ·th ); 259 } } 261  btd_´ofže gtime_´ofže = { 262 . Çme = "gatt-time-server", 263 . gad­‹r_´obe = time_£rv”_š™ , 264 . gad­‹r_»move = time_£rv”_ex™ , 267  $time_š™ () 269  `btd_´ofže_»gi¡” (& time_´ofže ); 270 } } 272  $time_ex™ () 274 `btd_´ofže_uÄegi¡” (& time_´ofže ); 275 } } 277 BLUETOOTH_PLUGIN_DEFINE ( time , VERSION , 278 BLUETOOTH_PLUGIN_PRIORITY_DEFAULT , 279 time_š™ , time_ex™ ) @src/adapter.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<š‰y³s.h > 31  ~<”ºo.h > 32  ~ 33  ~<¡dlib.h > 34  ~<¡dboÞ.h > 35  ~ 36  ~ 37  ~ 38  ~ 40  ~ 41  ~ 42  ~ 43  ~ 45  ~ 46  ~ 47  ~ 49  ~"log.h " 50  ~"‹xtfže.h " 52  ~"lib/uuid.h " 53  ~"lib/mgmt.h " 54  ~"¤c/sh¬ed/mgmt.h " 55  ~"¤c/sh¬ed/utž.h " 57  ~"hcid.h " 58  ~"sdpd.h " 59  ~"ad­‹r.h " 60  ~"deviû.h " 61  ~"´ofže.h " 62  ~"dbus-commÚ.h " 63  ~"”rÜ.h " 64  ~"uuid-h–³r.h " 65  ~"ag’t.h " 66  ~"¡Üage.h " 67  ~"©Œib/g©Œib.h " 68  ~"©Œib/©t.h " 69  ~"©Œib/g©t.h " 70  ~"©Œib-£rv”.h " 71  ~"eœ.h " 72 #ifdeà BLUEZ5_GATT_CLIENT 73  ~"¤c/sh¬ed/g©t-þ›Á.h " 74  ~"¤c/sh¬ed/©t-ty³s.h " 75  ~ 78  #ADAPTER_INTERFACE "Üg.bluez.Ad­‹r1" ) 80  #MODE_OFF 0x00 ) 81  #MODE_CONNECTABLE 0x01 ) 82  #MODE_DISCOVERABLE 0x02 ) 83  #MODE_UNKNOWN 0xff ) 85  #CONN_SCAN_TIMEOUT (3) ) 86  #IDLE_DISCOV_TIMEOUT (5) ) 87  #TEMP_DEV_TIMEOUT (3 * 60) ) 88  #BONDING_TIMEOUT (2 * 60) ) 89 #ifdeà __TIZEN_PATCH__ 90  #check_add»ss ( add»ss è `bachk ×dd»ss) ) 91  #ADV_DATA_LENGTH_MAX 28 ) 92  #SCAN_RESPONSE_DATA_LENGTH_MAX 31 ) 93  #MANUFACTURER_DATA_LENGTH_MAX 28 ) 94  #PRIVATE_ADDR_TIMEOUT (15 * 60) ) 96  #BT_DISC_TYPE_BREDR 1 ) 97  #BT_DISC_TYPE_LE 2 ) 98  #IDLE_LE_DISCOV_TIMEOUT (3) ) 100  #DISCOV_TYPE_BREDR 1 ) 101  #DISCOV_TYPE_LE 6 ) 104  DBusCÚÃùiÚ * gdbus_cÚn = NULL ; 106  boÞ gk”Ãl_cÚn_cÚŒÞ = çl£ ; 108  GLi¡ * gad­‹r_li¡ = NULL ; 109  gad­‹r_»maššg = 0; 110  boÞ gpow”šg_down = çl£ ; 112  GSLi¡ * gad­‹rs = NULL ; 114  mgmt * gmgmt_ma¡” = NULL ; 116  ušt8_t gmgmt_v”siÚ = 0; 117  ušt8_t gmgmt_»visiÚ = 0; 119 #ifdeà __TIZEN_PATCH__ 120  DBusMes§ge * wr™e_£c_cÚn_ho¡_suµÜt ( DBusCÚÃùiÚ * cÚn , 121 DBusMes§ge * msg , * u£r_d©a ); 123  GSLi¡ * gad­‹r_driv”s = NULL ; 125  GSLi¡ * gdiscÚÃù_li¡ = NULL ; 126  GSLi¡ * gcÚn_çž_li¡ = NULL ; 128  slšk_key_šfo { 129 bdaddr_t mbdaddr ; 130  mkey [16]; 131 ušt8_t mty³ ; 132 ušt8_t mpš_Ën ; 135  ssmp_Ék_šfo { 136 bdaddr_t mbdaddr ; 137 ušt8_t mbdaddr_ty³ ; 138 ušt8_t mauth’tiÿ‹d ; 139 boÞ mma¡” ; 140 ušt8_t m’c_size ; 141 ušt16_t mediv ; 142 ušt64_t m¿nd ; 143 ušt8_t mv® [16]; 146  sœk_šfo { 147 bdaddr_t mbdaddr ; 148 ušt8_t mbdaddr_ty³ ; 149 ušt8_t mv® [16]; 152  scÚn_·¿m { 153 bdaddr_t mbdaddr ; 154 ušt8_t mbdaddr_ty³ ; 155 ušt16_t mmš_š‹rv® ; 156 ušt16_t mmax_š‹rv® ; 157 ušt16_t mÏ‹ncy ; 158 ušt16_t mtimeout ; 161  sw©ch_þ›Á { 162  btd_ad­‹r * mad­‹r ; 163 * mowÃr ; 164 gušt mw©ch ; 167  s£rviû_auth { 168 gušt mid ; 169  msvc_id ; 170 £rviû_auth_cb mcb ; 171 * mu£r_d©a ; 172 cÚ¡ * muuid ; 173  btd_deviû * mdeviû ; 174  btd_ad­‹r * mad­‹r ; 175  ag’t * mag’t ; 178  sbtd_ad­‹r_pš_cb_™” { 179 GSLi¡ * m™ ; 180  m©‹m± ; 184  sbtd_ad­‹r { 185  m»f_couÁ ; 187 ušt16_t mdev_id ; 188  mgmt * mmgmt ; 190 bdaddr_t mbdaddr ; 191 #ifdeà __TIZEN_PATCH__ 192 bdaddr_t m½addr ; 193 #ifdeà BLUEZ5_GATT_CLIENT 194  þ›Á * mg©t_þ›Á ; 197 ušt32_t mdev_þass ; 198 * mÇme ; 199 * mshÜt_Çme ; 200 ušt32_t msuµÜ‹d_£‰šgs ; 201 ušt32_t mcu¼’t_£‰šgs ; 203 * m·th ; 204 ušt8_t mmajÜ_þass ; 205 ušt8_t mmšÜ_þass ; 206 * msy¡em_Çme ; 207 * mmod®Ÿs ; 208 boÞ m¡Üed_discov”abË ; 209 ušt32_t mdiscov”abË_timeout ; 210 ušt32_t m·œabË_timeout ; 212 * mcu¼’t_®Ÿs ; 213 * m¡Üed_®Ÿs ; 214 #ifdeà __TIZEN_PATCH__ 215 boÞ mË_´ivacy_’abËd ; 216  mloÿl_œk [ MGMT_IRK_SIZE ]; 217 ušt8_t mdisc_ty³ ; 220 boÞ mdiscov”šg ; 221 ušt8_t mdiscov”y_ty³ ; 222 ušt8_t mdiscov”y_’abË ; 223 boÞ mdiscov”y_su¥’ded ; 224 GSLi¡ * mdiscov”y_li¡ ; 225 GSLi¡ * mdiscov”y_found ; 226 gušt mdiscov”y_idË_timeout ; 227 gušt m·ssive_sÿn_timeout ; 228 gušt m‹mp_deviûs_timeout ; 230 gušt m·œabË_timeout_id ; 231 gušt mauth_idË_id ; 232 GQueue * mauths ; 233 boÞ mpšcode_»que¡ed ; 234 GSLi¡ * mcÚÃùiÚs ; 235 GSLi¡ * mdeviûs ; 236 GSLi¡ * mcÚÃù_li¡ ; 237  btd_deviû * mcÚÃù_Ë ; 238 sdp_li¡_t * m£rviûs ; 240 gboÞ—n mš™Ÿlized ; 241 #ifdeà __TIZEN_PATCH__ 242 boÞ madv”tisšg ; 243 gch¬ * mv”siÚ ; 244 boÞ m£cu»_cÚÃùiÚ ; 245 ušt16_t mauth_·ylßd_timeout ; 246 boÞ m£t_Ãw_½a ; 247 boÞ m½a_is_£t ; 249 gboÞ—n mË_discov”šg ; 250 GSLi¡ * mË_discov”y_li¡ ; 251 gboÞ—n mË_auto_cÚÃù ; 254 GSLi¡ * mpš_ÿÎbacks ; 255 GSLi¡ * mmsd_ÿÎbacks ; 257 GSLi¡ * mdriv”s ; 258 GSLi¡ * m´ofžes ; 260  oob_hªdËr * moob_hªdËr ; 262  mlßd_Éks_id ; 263 gušt mlßd_Éks_timeout ; 265  mcÚfœm_Çme_id ; 266 gušt mcÚfœm_Çme_timeout ; 268  m·œ_deviû_id ; 269 gušt m·œ_deviû_timeout ; 270 #ifdeà __TIZEN_PATCH__ 271 gušt m´iv©e_addr_timeout ; 273 boÞ mis_deçuÉ ; 276 #ifdeà BLUEZ5_GATT_CLIENT 277  sþ›Á { 278  mfd ; 279  bt_g©t_þ›Á * mg©t ; 283 #ifdeà __TIZEN_PATCH__ 285 mDISABLE_PRIVACY , 286 mENABLE_PRIVACY , 287 mGEN_IRK_THEN_ENABLE_PRIVACY 291  btd_ad­‹r * $btd_ad­‹r_lookup ( ušt16_t šdex ) 293 GLi¡ * li¡ ; 295  li¡ = `g_li¡_fœ¡ ( ad­‹r_li¡ );†ist; 296 li¡ = `g_li¡_Ãxt (list)) { 297  btd_ad­‹r * ad­‹r = li¡ -> d©a ; 299 ià( ad­‹r -> dev_id =ð šdex ) 300  ad­‹r ; 303  NULL ; 304 } } 306  btd_ad­‹r * $btd_ad­‹r_g‘_deçuÉ () 308 GLi¡ * li¡ ; 310  li¡ = `g_li¡_fœ¡ ( ad­‹r_li¡ );†ist; 311 li¡ = `g_li¡_Ãxt (list)) { 312  btd_ad­‹r * ad­‹r = li¡ -> d©a ; 314 ià( ad­‹r -> is_deçuÉ ) 315  ad­‹r ; 318  NULL ; 319 } } 321 boÞ $btd_ad­‹r_is_deçuÉ ( btd_ad­‹r * ad­‹r ) 323 ià(! ad­‹r ) 324  çl£ ; 326  ad­‹r -> is_deçuÉ ; 327 } } 329 ušt16_t $btd_ad­‹r_g‘_šdex ( btd_ad­‹r * ad­‹r ) 331 ià(! ad­‹r ) 332  MGMT_INDEX_NONE ; 334  ad­‹r -> dev_id ; 335 } } 337  gboÞ—n ´oûss_auth_queue ( gpoš‹r u£r_d©a ); 339  $dev_þass_chªged_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 340 cÚ¡ * ·¿m , * u£r_d©a ) 342  btd_ad­‹r * ad­‹r = u£r_d©a ; 343 cÚ¡  mgmt_cod * ½ = ·¿m ; 344 ušt8_t ­³¬ªû [3]; 345 ušt32_t dev_þass ; 347 ià( Ëngth < (* ½ )) { 348 `”rÜ ("Wrong size of class of device changed…arameters"); 352 dev_þass = ½ -> v® [0] | (rp->val[1] << 8) | (rp->val[2] << 16); 354 ià( dev_þass =ð ad­‹r ->dev_class) 357 `DBG ("CÏss: 0x%06x", dev_þass ); 359 ad­‹r -> dev_þass = dev_class; 361 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 362 ADAPTER_INTERFACE , "Class"); 364 ­³¬ªû [0] = ½ -> v® [0]; 365 ­³¬ªû [1] = ½ -> v® [1] & 0x1f; 366 ­³¬ªû [2] = ½ -> v® [2]; 368 `©Œib_g­_£t ( ad­‹r , GATT_CHARAC_APPEARANCE , ­³¬ªû , 2); 369 } } 371  $£t_dev_þass_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 372 cÚ¡ * ·¿m , * u£r_d©a ) 374  btd_ad­‹r * ad­‹r = u£r_d©a ; 376 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 377 `”rÜ ("Failedo set device class: %s (0x%02x)", 378 `mgmt_”r¡r ( ¡©us ), status); 387 `dev_þass_chªged_ÿÎback ( ad­‹r -> dev_id , Ëngth , ·¿m ,‡dapter); 388 } } 390  $£t_dev_þass ( btd_ad­‹r * ad­‹r ) 392  mgmt_ý_£t_dev_þass ý ; 401 ià(!( ad­‹r -> suµÜ‹d_£‰šgs & MGMT_SETTING_BREDR )) 404 `mem£t (& ý , 0, (cp)); 416 ý . majÜ = ad­‹r -> majÜ_þass & 0x1f; 417 ý . mšÜ = ad­‹r -> mšÜ_þass << 2; 419 `DBG ("£ndšg s‘ deviû cÏs commªd fÜ index %u", ad­‹r -> dev_id ); 421 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_SET_DEV_CLASS , 422 ad­‹r -> dev_id , ( ý ), &cp, 423 £t_dev_þass_com¶‘e , ad­‹r , NULL ) > 0) 426 `”rÜ ("FažedØ£ˆþas oàdeviû fÜ index %u", ad­‹r -> dev_id ); 427 } } 429  $btd_ad­‹r_£t_þass ( btd_ad­‹r * ad­‹r , ušt8_t majÜ , 430 ušt8_t mšÜ ) 432 ià( ad­‹r -> majÜ_þass =ð majÜ &&‡d­‹r-> mšÜ_þass =ð mšÜ ) 435 `DBG ("þass: majÜ %u mšÜ %u", majÜ , mšÜ ); 437 ad­‹r -> majÜ_þass = majÜ ; 438 ad­‹r -> mšÜ_þass = mšÜ ; 440 `£t_dev_þass ( ad­‹r ); 441 } } 443  ušt8_t $g‘_mode (cÚ¡ * mode ) 445 ià( `¡rÿ£cmp ("off", mode ) == 0) 446  MODE_OFF ; 447 ià( `¡rÿ£cmp ("cÚÃùabË", mode ) == 0) 448  MODE_CONNECTABLE ; 449 ià( `¡rÿ£cmp ("discov”abË", mode ) == 0) 450  MODE_DISCOVERABLE ; 452  MODE_UNKNOWN ; 453 } } 455  $¡Üe_ad­‹r_šfo ( btd_ad­‹r * ad­‹r ) 457 GKeyFže * key_fže ; 458  fž’ame [ PATH_MAX ]; 459  add»ss [18]; 460 * ¡r ; 461 gsize Ëngth = 0; 462 gboÞ—n discov”abË ; 463 #ifdeà __TIZEN_PATCH__ 464  key_¡r [35]; 465 cÚ¡  ‹¡block [ MGMT_IRK_SIZE ]; 466  i ; 469 key_fže = `g_key_fže_Ãw (); 471 ià( ad­‹r -> ·œabË_timeout !ð maš_Ýts . ·œto ) 472 `g_key_fže_£t_š‹g” ( key_fže , "General", "PairableTimeout", 473 ad­‹r -> ·œabË_timeout ); 475 ià(( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_DISCOVERABLE ) && 476 ! ad­‹r -> discov”abË_timeout ) 477 discov”abË = TRUE ; 479 discov”abË = FALSE ; 481 `g_key_fže_£t_boÞ—n ( key_fže , "General", "Discoverable", 482 discov”abË ); 484 ià( ad­‹r -> discov”abË_timeout !ð maš_Ýts . discovto ) 485 `g_key_fže_£t_š‹g” ( key_fže , "General", 487 ad­‹r -> discov”abË_timeout ); 489 ià( ad­‹r -> ¡Üed_®Ÿs ) 490 `g_key_fže_£t_¡ršg ( key_fže , "General", "Alias", 491 ad­‹r -> ¡Üed_®Ÿs ); 492 #ifdeà __TIZEN_PATCH__ 493 ià( `memcmp ( ad­‹r -> loÿl_œk , ‹¡block , MGMT_IRK_SIZE )) { 494 key_¡r [0] = '0'; 495 key_¡r [1] = 'x'; 496  i = 0; i < MGMT_IRK_SIZE ; i++) 497 `¥rštf ( key_¡r + 2 + ( i * 2), "%2.2X", 498 ad­‹r -> loÿl_œk [ i ]); 499 `g_key_fže_£t_¡ršg ( key_fže , "General", 500 "LoÿlIrk", key_¡r ); 504 `ba2¡r (& ad­‹r -> bdaddr , add»ss ); 505 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/£‰šgs", add»ss ); 507 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 509 ¡r = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 510 `g_fže_£t_cÚ‹Ás ( fž’ame , ¡r , Ëngth , NULL ); 511 `g_ä“ ( ¡r ); 513 `g_key_fže_ä“ ( key_fže ); 514 } } 516  Œigg”_·œabË_timeout ( btd_ad­‹r * ad­‹r ); 517  ad­‹r_¡¬t ( btd_ad­‹r * ad­‹r ); 518  ad­‹r_¡Ý ( btd_ad­‹r * ad­‹r ); 519  Œigg”_·ssive_sÿšg ( btd_ad­‹r * ad­‹r ); 520  boÞ £t_mode ( btd_ad­‹r * ad­‹r , ušt16_t Ýcode , 521 ušt8_t mode ); 522 #ifdeà __TIZEN_PATCH__ 523  boÞ £t_´ivacy ( btd_ad­‹r * ad­‹r , boÞ ´ivacy ); 526  $£‰šgs_chªged ( btd_ad­‹r * ad­‹r , ušt32_t £‰šgs ) 528 ušt32_t chªged_mask ; 530 chªged_mask = ad­‹r -> cu¼’t_£‰šgs ^ £‰šgs ; 532 ad­‹r -> cu¼’t_£‰šgs = £‰šgs ; 534 `DBG ("Chªged s‘tšgs: 0x%08x", chªged_mask ); 536 ià( chªged_mask & MGMT_SETTING_POWERED ) { 537 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 538 ADAPTER_INTERFACE , "Powered"); 540 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED ) { 541 `ad­‹r_¡¬t ( ad­‹r ); 543 `ad­‹r_¡Ý ( ad­‹r ); 545 ià( pow”šg_down ) { 546 ad­‹r_»maššg --; 548 ià(! ad­‹r_»maššg ) 549 `btd_ex™ (); 554 ià( chªged_mask & MGMT_SETTING_LE ) { 555 ià(( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED ) && 556 ( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_LE )) 557 `Œigg”_·ssive_sÿšg ( ad­‹r ); 560 ià( chªged_mask & MGMT_SETTING_CONNECTABLE ) 561 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 562 ADAPTER_INTERFACE , "Connectable"); 564 ià( chªged_mask & MGMT_SETTING_DISCOVERABLE ) { 565 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 566 ADAPTER_INTERFACE , "Discoverable"); 567 `¡Üe_ad­‹r_šfo ( ad­‹r ); 570 ià( chªged_mask & MGMT_SETTING_BONDABLE ) { 571 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 572 ADAPTER_INTERFACE , "Pairable"); 574 `Œigg”_·œabË_timeout ( ad­‹r ); 577 #ifdeà __TIZEN_PATCH__ 578 ià( chªged_mask & MGMT_SETTING_ADVERTISING ) { 579 ià(( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_ADVERTISING ) && 580 ( ad­‹r -> adv”tisšg )) { 583 ad­‹r -> adv”tisšg =‡d­‹r-> cu¼’t_£‰šgs & MGMT_SETTING_ADVERTISING ; 584 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 585 ADAPTER_INTERFACE , "Advertising"); 588 } } 590  $Ãw_£‰šgs_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 591 cÚ¡ * ·¿m , * u£r_d©a ) 593  btd_ad­‹r * ad­‹r = u£r_d©a ; 594 ušt32_t £‰šgs ; 596 ià( Ëngth < ( £‰šgs )) { 597 `”rÜ ("Wrong size of‚ew settings…arameters"); 601 £‰šgs = `g‘_Ë32 ( ·¿m ); 603 ià( £‰šgs =ð ad­‹r -> cu¼’t_£‰šgs ) 606 `DBG ("S‘tšgs: 0x%08x", £‰šgs ); 608 `£‰šgs_chªged ( ad­‹r , £‰šgs ); 609 } } 611  $£t_mode_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 612 cÚ¡ * ·¿m , * u£r_d©a ) 614  btd_ad­‹r * ad­‹r = u£r_d©a ; 616 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 617 `”rÜ ("Failedo set mode: %s (0x%02x)", 618 `mgmt_”r¡r ( ¡©us ), status); 627 `Ãw_£‰šgs_ÿÎback ( ad­‹r -> dev_id , Ëngth , ·¿m ,‡dapter); 628 } } 630  boÞ $£t_mode ( btd_ad­‹r * ad­‹r , ušt16_t Ýcode , 631 ušt8_t mode ) 633  mgmt_mode ý ; 635 `mem£t (& ý , 0, (cp)); 636 ý . v® = mode ; 638 `DBG ("£ndšg s‘ modcommªd fÜ index %u", ad­‹r -> dev_id ); 640 ià( `mgmt_£nd ( ad­‹r -> mgmt , Ýcode , 641 ad­‹r -> dev_id , ( ý ), &cp, 642 £t_mode_com¶‘e , ad­‹r , NULL ) > 0) 643  Œue ; 645 `”rÜ ("FažedØ£ˆmodfÜ index %u", ad­‹r -> dev_id ); 647  çl£ ; 648 } } 650  boÞ $£t_discov”abË ( btd_ad­‹r * ad­‹r , ušt8_t mode , 651 ušt16_t timeout ) 653  mgmt_ý_£t_discov”abË ý ; 655 `mem£t (& ý , 0, (cp)); 656 ý . v® = mode ; 657 ý . timeout = `htobs (timeout); 659 `DBG ("£ndšg s‘ modcommªd fÜ index %u", ad­‹r -> dev_id ); 661 ià( k”Ãl_cÚn_cÚŒÞ ) { 662 ià( mode ) 663 `£t_mode ( ad­‹r , MGMT_OP_SET_CONNECTABLE , mode ); 666  `£t_mode ( ad­‹r , MGMT_OP_SET_CONNECTABLE , 667 mode ); 670 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_SET_DISCOVERABLE , 671 ad­‹r -> dev_id , ( ý ), &cp, 672 £t_mode_com¶‘e , ad­‹r , NULL ) > 0) 673  Œue ; 675 `”rÜ ("FažedØ£ˆmodfÜ index %u", ad­‹r -> dev_id ); 677  çl£ ; 678 } } 680  gboÞ—n $·œabË_timeout_hªdËr ( gpoš‹r u£r_d©a ) 682  btd_ad­‹r * ad­‹r = u£r_d©a ; 684 ad­‹r -> ·œabË_timeout_id = 0; 686 `£t_mode ( ad­‹r , MGMT_OP_SET_BONDABLE , 0x00); 688  FALSE ; 689 } } 691  $Œigg”_·œabË_timeout ( btd_ad­‹r * ad­‹r ) 693 ià( ad­‹r -> ·œabË_timeout_id > 0) { 694 `g_sourû_»move ( ad­‹r -> ·œabË_timeout_id ); 695 ad­‹r -> ·œabË_timeout_id = 0; 698 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_BONDABLE )) 701 ià( ad­‹r -> ·œabË_timeout > 0) 702 `g_timeout_add_£cÚds ( ad­‹r -> ·œabË_timeout , 703 ·œabË_timeout_hªdËr , ad­‹r ); 704 } } 706  $loÿl_Çme_chªged_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 707 cÚ¡ * ·¿m , * u£r_d©a ) 709  btd_ad­‹r * ad­‹r = u£r_d©a ; 710 cÚ¡  mgmt_ý_£t_loÿl_Çme * ½ = ·¿m ; 712 ià( Ëngth < (* ½ )) { 713 `”rÜ ("Wrong size of†ocal‚ame changed…arameters"); 717 ià(! `g_¡rcmp0 ( ad­‹r -> shÜt_Çme , (cÚ¡ *è ½ ->short_name) && 718 ! `g_¡rcmp0 ( ad­‹r -> Çme , (cÚ¡ *è ½ ->name)) 721 `DBG ("Name: %s", ½ -> Çme ); 722 `DBG ("Sh܈Çme: %s", ½ -> shÜt_Çme ); 724 `g_ä“ ( ad­‹r -> Çme ); 725 ad­‹r -> Çme = `g_¡rdup ((cÚ¡ *è ½ ->name); 727 `g_ä“ ( ad­‹r -> shÜt_Çme ); 728 ad­‹r -> shÜt_Çme = `g_¡rdup ((cÚ¡ *è ½ ->short_name); 740 ià( ad­‹r -> Çme &&‡dapter->name[0] != '\0') { 741 `g_ä“ ( ad­‹r -> cu¼’t_®Ÿs ); 742 ad­‹r -> cu¼’t_®Ÿs = `g_¡rdup ×d­‹r-> Çme ); 744 `g_ä“ ( ad­‹r -> cu¼’t_®Ÿs ); 745 ad­‹r -> cu¼’t_®Ÿs = `g_¡rdup ×d­‹r-> shÜt_Çme ); 748 `DBG ("Cu¼’ˆ®Ÿs: %s", ad­‹r -> cu¼’t_®Ÿs ); 750 ià(! ad­‹r -> cu¼’t_®Ÿs ) 753 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 754 ADAPTER_INTERFACE , "Alias"); 756 `©Œib_g­_£t ( ad­‹r , GATT_CHARAC_DEVICE_NAME , 757 (cÚ¡ ušt8_t *è ad­‹r -> cu¼’t_®Ÿs , 758 `¡¾’ ( ad­‹r -> cu¼’t_®Ÿs )); 759 } } 761  $£t_loÿl_Çme_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 762 cÚ¡ * ·¿m , * u£r_d©a ) 764  btd_ad­‹r * ad­‹r = u£r_d©a ; 766 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 767 `”rÜ ("Failedo set†ocal‚ame: %s (0x%02x)", 768 `mgmt_”r¡r ( ¡©us ), status); 777 `loÿl_Çme_chªged_ÿÎback ( ad­‹r -> dev_id , Ëngth , ·¿m ,‡dapter); 778 } } 780  $£t_Çme ( btd_ad­‹r * ad­‹r , cÚ¡ * Çme ) 782  mgmt_ý_£t_loÿl_Çme ý ; 783  maxÇme [ MAX_NAME_LENGTH + 1]; 785 `mem£t ( maxÇme , 0, (maxname)); 786 `¡ºýy ( maxÇme , Çme , MAX_NAME_LENGTH ); 788 ià(! `g_utf8_v®id©e ( maxÇme , -1, NULL )) { 789 `”rÜ ("Name change failed: supplied‚ame isn't valid UTF-8"); 790  - EINVAL ; 793 `mem£t (& ý , 0, (cp)); 794 `¡ºýy ((*è ý . Çme , maxÇme , (cp.name) - 1); 796 `DBG ("£ndšg s‘†oÿÈÇmcommªd fÜ index %u", ad­‹r -> dev_id ); 798 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_SET_LOCAL_NAME , 799 ad­‹r -> dev_id , ( ý ), &cp, 800 £t_loÿl_Çme_com¶‘e , ad­‹r , NULL ) > 0) 803 `”rÜ ("FažedØ£ˆloÿÈÇmfÜ index %u", ad­‹r -> dev_id ); 805  - EIO ; 806 } } 808  $ad­‹r_£t_Çme ( btd_ad­‹r * ad­‹r , cÚ¡ * Çme ) 810 ià( `g_¡rcmp0 ( ad­‹r -> sy¡em_Çme , Çme ) == 0) 813 `DBG ("Çme: %s", Çme ); 815 `g_ä“ ( ad­‹r -> sy¡em_Çme ); 816 ad­‹r -> sy¡em_Çme = `g_¡rdup ( Çme ); 818 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 819 ADAPTER_INTERFACE , "Name"); 822 ià( ad­‹r -> ¡Üed_®Ÿs ) 825 `DBG ("®Ÿs: %s", Çme ); 827 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 828 ADAPTER_INTERFACE , "Alias"); 830  `£t_Çme ( ad­‹r , Çme ); 831 } } 833  btd_deviû * $btd_ad­‹r_fšd_deviû ( btd_ad­‹r * ad­‹r , 834 cÚ¡ bdaddr_t * d¡ , 835 ušt8_t bdaddr_ty³ ) 837  deviû_addr_ty³ addr ; 838  btd_deviû * deviû ; 839 GSLi¡ * li¡ ; 841 ià(! ad­‹r ) 842  NULL ; 844 `baýy (& addr . bdaddr , d¡ ); 845 addr . bdaddr_ty³ = bdaddr_type; 847 li¡ = `g_¦i¡_fšd_cu¡om ( ad­‹r -> deviûs , & addr , 848 deviû_addr_ty³_cmp ); 849 ià(! li¡ ) 850  NULL ; 852 deviû = li¡ -> d©a ; 859 ià( bdaddr_ty³ =ð BDADDR_BREDR ) 860 `deviû_£t_b»dr_suµÜt ( deviû ); 862 `deviû_£t_Ë_suµÜt ( deviû , bdaddr_ty³ ); 864  deviû ; 865 } } 867  $uuid_to_uuid128 ( uuid_t * uuid128 , cÚ¡ uuid_ˆ* uuid ) 869 ià( uuid -> ty³ =ð SDP_UUID16 ) 870 `sdp_uuid16_to_uuid128 ( uuid128 , uuid ); 871 ià( uuid -> ty³ =ð SDP_UUID32 ) 872 `sdp_uuid32_to_uuid128 ( uuid128 , uuid ); 874 `memýy ( uuid128 , uuid , (*uuid)); 875 } } 877  boÞ $is_suµÜ‹d_uuid (cÚ¡ uuid_t * uuid ) 879 uuid_t tmp ; 882 ià( `MGMT_VERSION ( mgmt_v”siÚ , mgmt_»visiÚ ) >= MGMT_VERSION(1, 3)) 883  Œue ; 885 `uuid_to_uuid128 (& tmp , uuid ); 887 ià(! `sdp_uuid128_to_uuid (& tmp )) 888  çl£ ; 890 ià( tmp . ty³ !ð SDP_UUID16 ) 891  çl£ ; 893  Œue ; 894 } } 896  $add_uuid_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 897 cÚ¡ * ·¿m , * u£r_d©a ) 899  btd_ad­‹r * ad­‹r = u£r_d©a ; 901 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 902 `”rÜ ("Failedo‡dd UUID: %s (0x%02x)", 903 `mgmt_”r¡r ( ¡©us ), status); 912 `dev_þass_chªged_ÿÎback ( ad­‹r -> dev_id , Ëngth , ·¿m ,‡dapter); 914 ià( ad­‹r -> š™Ÿlized ) 915 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 916 ADAPTER_INTERFACE , "UUIDs"); 917 } } 919  $add_uuid ( btd_ad­‹r * ad­‹r , uuid_t * uuid , ušt8_t svc_hšt ) 921  mgmt_ý_add_uuid ý ; 922 uuid_t uuid128 ; 923 ušt128_t ušt128 ; 925 ià(! `is_suµÜ‹d_uuid ( uuid )) { 926 `w¬n ("Ignoring unsupported UUID for‡ddition"); 930 `uuid_to_uuid128 (& uuid128 , uuid ); 932 `Áoh128 (( ušt128_t *è uuid128 . v®ue .uuid128. d©a , & ušt128 ); 933 `htob128 (& ušt128 , ( ušt128_t *è ý . uuid ); 934 ý . svc_hšt = svc_hint; 936 `DBG ("£ndšg‡dd uuid commªd fÜ index %u", ad­‹r -> dev_id ); 938 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_ADD_UUID , 939 ad­‹r -> dev_id , ( ý ), &cp, 940 add_uuid_com¶‘e , ad­‹r , NULL ) > 0) 943 `”rÜ ("FažedØadd UUID fÜ index %u", ad­‹r -> dev_id ); 945  - EIO ; 946 } } 948  $»move_uuid_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 949 cÚ¡ * ·¿m , * u£r_d©a ) 951  btd_ad­‹r * ad­‹r = u£r_d©a ; 953 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 954 `”rÜ ("Failedo„emove UUID: %s (0x%02x)", 955 `mgmt_”r¡r ( ¡©us ), status); 964 `dev_þass_chªged_ÿÎback ( ad­‹r -> dev_id , Ëngth , ·¿m ,‡dapter); 966 ià( ad­‹r -> š™Ÿlized ) 967 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 968 ADAPTER_INTERFACE , "UUIDs"); 969 } } 971  $»move_uuid ( btd_ad­‹r * ad­‹r , uuid_t * uuid ) 973  mgmt_ý_»move_uuid ý ; 974 uuid_t uuid128 ; 975 ušt128_t ušt128 ; 977 ià(! `is_suµÜ‹d_uuid ( uuid )) { 978 `w¬n ("Ignoring unsupported UUID for„emoval"); 982 `uuid_to_uuid128 (& uuid128 , uuid ); 984 `Áoh128 (( ušt128_t *è uuid128 . v®ue .uuid128. d©a , & ušt128 ); 985 `htob128 (& ušt128 , ( ušt128_t *è ý . uuid ); 987 `DBG ("£ndšg„emovuuid commªd fÜ index %u", ad­‹r -> dev_id ); 989 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_REMOVE_UUID , 990 ad­‹r -> dev_id , ( ý ), &cp, 991 »move_uuid_com¶‘e , ad­‹r , NULL ) > 0) 994 `”rÜ ("FažedØ»movUUID fÜ index %u", ad­‹r -> dev_id ); 996  - EIO ; 997 } } 999  $þ—r_uuids_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 1000 cÚ¡ * ·¿m , * u£r_d©a ) 1002  btd_ad­‹r * ad­‹r = u£r_d©a ; 1004 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 1005 `”rÜ ("Failedo clear UUIDs: %s (0x%02x)", 1006 `mgmt_”r¡r ( ¡©us ), status); 1015 `dev_þass_chªged_ÿÎback ( ad­‹r -> dev_id , Ëngth , ·¿m ,‡dapter); 1016 } } 1018  $þ—r_uuids ( btd_ad­‹r * ad­‹r ) 1020  mgmt_ý_»move_uuid ý ; 1022 `mem£t (& ý , 0, (cp)); 1024 `DBG ("£ndšg cˬ uuid commªd fÜ index %u", ad­‹r -> dev_id ); 1026 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_REMOVE_UUID , 1027 ad­‹r -> dev_id , ( ý ), &cp, 1028 þ—r_uuids_com¶‘e , ad­‹r , NULL ) > 0) 1031 `”rÜ ("FažedØþ—¸UUID fÜ index %u", ad­‹r -> dev_id ); 1033  - EIO ; 1034 } } 1036  ušt8_t $g‘_uuid_mask ( uuid_t * uuid ) 1038 ià( uuid -> ty³ !ð SDP_UUID16 ) 1041  uuid -> v®ue . uuid16 ) { 1042  DIALUP_NET_SVCLASS_ID : 1043  CIP_SVCLASS_ID : 1045  IRMC_SYNC_SVCLASS_ID : 1046  OBEX_OBJPUSH_SVCLASS_ID : 1047  OBEX_FILETRANS_SVCLASS_ID : 1048  IRMC_SYNC_CMD_SVCLASS_ID : 1049  PBAP_PSE_SVCLASS_ID : 1051  HEADSET_SVCLASS_ID : 1052  HANDSFREE_SVCLASS_ID : 1054  CORDLESS_TELEPHONY_SVCLASS_ID : 1055  INTERCOM_SVCLASS_ID : 1056  FAX_SVCLASS_ID : 1057  SAP_SVCLASS_ID : 1064  HANDSFREE_AGW_SVCLASS_ID : 1066  AUDIO_SOURCE_SVCLASS_ID : 1067  VIDEO_SOURCE_SVCLASS_ID : 1069  AUDIO_SINK_SVCLASS_ID : 1070  VIDEO_SINK_SVCLASS_ID : 1072  PANU_SVCLASS_ID : 1073  NAP_SVCLASS_ID : 1074  GN_SVCLASS_ID : 1079 } } 1081  $uuid_cmp (cÚ¡ * a , cÚ¡ * b ) 1083 cÚ¡ sdp_»cÜd_t * »c = a ; 1084 cÚ¡ uuid_t * uuid = b ; 1086  `sdp_uuid_cmp (& »c -> svþass , uuid ); 1087 } } 1089  $ad­‹r_£rviû_š£¹ ( btd_ad­‹r * ad­‹r , sdp_»cÜd_t * »c ) 1091 sdp_li¡_t * brow£_li¡ = NULL ; 1092 uuid_t brow£_uuid ; 1093 gboÞ—n Ãw_uuid ; 1095 `DBG ("%s", ad­‹r -> ·th ); 1098 ià( `sdp_g‘_brow£_groups ( »c , & brow£_li¡ ) < 0) { 1099 `DBG ("skipping„ecord without browse group"); 1103 `sdp_uuid16_ü—‹ (& brow£_uuid , PUBLIC_BROWSE_GROUP ); 1106 ià(! `sdp_li¡_fšd ( brow£_li¡ , & brow£_uuid , sdp_uuid_cmp )) 1107  dÚe ; 1109 ià( `sdp_li¡_fšd ( ad­‹r -> £rviûs , & »c -> svþass , uuid_cmp è=ð NULL ) 1110 Ãw_uuid = TRUE ; 1112 Ãw_uuid = FALSE ; 1114 ad­‹r -> £rviûs = `sdp_li¡_š£¹_sÜ‹d ×d­‹r->£rviûs, »c , 1115 »cÜd_sÜt ); 1117 ià( Ãw_uuid ) { 1118 ušt8_t svc_hšt = `g‘_uuid_mask (& »c -> svþass ); 1119 `add_uuid ( ad­‹r , & »c -> svþass , svc_hšt ); 1122 dÚe : 1123 `sdp_li¡_ä“ ( brow£_li¡ , ä“ ); 1124 } } 1126  $ad­‹r_£rviû_add ( btd_ad­‹r * ad­‹r , sdp_»cÜd_t * »c ) 1128  »t ; 1130 `DBG ("%s", ad­‹r -> ·th ); 1132 »t = `add_»cÜd_to_£rv” (& ad­‹r -> bdaddr , »c ); 1133 ià( »t < 0) 1134  »t ; 1136 `ad­‹r_£rviû_š£¹ ( ad­‹r , »c ); 1139 } } 1141  $ad­‹r_£rviû_»move ( btd_ad­‹r * ad­‹r , ušt32_t hªdË ) 1143 sdp_»cÜd_t * »c = `sdp_»cÜd_fšd ( hªdË ); 1145 `DBG ("%s", ad­‹r -> ·th ); 1147 ià(! »c ) 1150 ad­‹r -> £rviûs = `sdp_li¡_»move ×d­‹r->£rviûs, »c ); 1152 ià( `sdp_li¡_fšd ( ad­‹r -> £rviûs , & »c -> svþass , uuid_cmp è=ð NULL ) 1153 `»move_uuid ( ad­‹r , & »c -> svþass ); 1155 `»move_»cÜd_äom_£rv” ( »c -> hªdË ); 1156 } } 1158  btd_deviû * $ad­‹r_ü—‹_deviû ( btd_ad­‹r * ad­‹r , 1159 cÚ¡ bdaddr_t * bdaddr , 1160 ušt8_t bdaddr_ty³ ) 1162  btd_deviû * deviû ; 1164 deviû = `deviû_ü—‹ ( ad­‹r , bdaddr , bdaddr_ty³ ); 1165 ià(! deviû ) 1166  NULL ; 1168 ad­‹r -> deviûs = `g_¦i¡_­³nd ×d­‹r->deviûs, deviû ); 1170  deviû ; 1171 } } 1173  $£rviû_auth_ÿnûl ( £rviû_auth * auth ) 1175 DBusE¼Ü d”r ; 1177 ià( auth -> svc_id > 0) 1178 `deviû_»move_svc_com¶‘e_ÿÎback ( auth -> deviû , 1179 auth -> svc_id ); 1181 `dbus_”rÜ_š™ (& d”r ); 1182 `dbus_£t_”rÜ_cÚ¡ (& d”r , ERROR_INTERFACE ".CªûËd", NULL ); 1184 auth -> `cb (& d”r ,‡uth-> u£r_d©a ); 1186 `dbus_”rÜ_ä“ (& d”r ); 1188 ià( auth -> ag’t !ð NULL ) { 1189 `ag’t_ÿnûl ( auth -> ag’t ); 1190 `ag’t_uÄef ( auth -> ag’t ); 1193 `g_ä“ ( auth ); 1194 } } 1195 #ifdeà __TIZEN_PATCH__ 1196  $btd_ad­‹r_uÅaœ_deviû ( btd_ad­‹r * ad­‹r , 1197  btd_deviû * dev ) 1199 `DBG ("+"); 1200 GLi¡ * l ; 1202 ad­‹r -> cÚÃù_li¡ = `g_¦i¡_»move ×d­‹r->cÚÃù_li¡, dev ); 1209 ad­‹r -> cÚÃùiÚs = `g_¦i¡_»move ×d­‹r->cÚÃùiÚs, dev ); 1211 ià( ad­‹r -> cÚÃù_Ë =ð dev ) 1212 ad­‹r -> cÚÃù_Ë = NULL ; 1214 l = ad­‹r -> auths -> h—d ; 1215  l !ð NULL ) { 1216  £rviû_auth * auth = l -> d©a ; 1217 GLi¡ * Ãxt = `g_li¡_Ãxt ( l ); 1219 ià( auth -> deviû !ð dev ) { 1220 l = Ãxt ; 1224 `g_queue_d–‘e_lšk ( ad­‹r -> auths , l ); 1225 l = Ãxt ; 1227 `£rviû_auth_ÿnûl ( auth ); 1230 `deviû_uÅaœ ( dev , TRUE ); 1231 `DBG ("-"); 1232 } } 1234 gboÞ—n $ad­‹r_þ—r_Ë_wh™e_li¡ ( btd_ad­‹r * ad­‹r ) 1236 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_CLEAR_DEV_WHITE_LIST , 1237 ad­‹r -> dev_id , 0, NULL , 1238 NULL , NULL, NULL) > 0) 1240  TRUE ; 1241 } } 1243 gboÞ—n $ad­‹r_add_Ë_wh™e_li¡ ( btd_ad­‹r * ad­‹r ,  btd_deviû * deviû ) 1245  mgmt_ý_add_dev_wh™e_li¡ ý ; 1246 ušt8_t bdaddr_ty³ ; 1247 cÚ¡ bdaddr_t * d¡ ; 1248  deviû_addr [18]; 1250 `mem£t (& ý , 0, (cp)); 1252 d¡ = `deviû_g‘_add»ss ( deviû ); 1254 `ba2¡r ( `deviû_g‘_add»ss ( deviû ), deviû_addr ); 1255 `DBG ("add¸%  bdadd¸ty³ %d", deviû_addr , `btd_deviû_g‘_bdaddr_ty³ ( deviû )); 1257 iàÐ `btd_deviû_g‘_bdaddr_ty³ ( deviû è=ð BDADDR_LE_PUBLIC ) 1258 ý . bdaddr_ty³ = 0x0; 1260 ý . bdaddr_ty³ = 0x1; 1262 `memýy (& ý . bdaddr , d¡ , ( bdaddr_t )); 1264 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_ADD_DEV_WHITE_LIST , 1265 ad­‹r -> dev_id , ( ý ), &cp, 1266 NULL , NULL, NULL) > 0) 1267  TRUE ; 1269 `DBG ("Unableo‡dd white†ist"); 1271  FALSE ; 1272 } } 1274 gboÞ—n $btd_ad­‹r_is_Ë_auto_cÚÃù ( btd_ad­‹r * ad­‹r ) 1276  ad­‹r -> Ë_auto_cÚÃù ; 1277 } } 1279  $btd_ad­‹r_£t_Ë_auto_cÚÃù ( btd_ad­‹r * ad­‹r , gboÞ—n auto_cÚÃù ) 1281 ad­‹r -> Ë_auto_cÚÃù = auto_cÚÃù ; 1282 } } 1284 gboÞ—n $btd_ad­‹r_di§bË_Ë_auto_cÚÃù ( btd_ad­‹r * ad­‹r ) 1286 ià( `btd_ad­‹r_is_Ë_auto_cÚÃù ( ad­‹r è=ð FALSE ) { 1287 `”rÜ ("le‡uto connection is‚ot going on"); 1288  FALSE ; 1291 `DBG ("di§bˆautØcÚÃù : %u", ad­‹r -> dev_id ); 1293 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_DISABLE_LE_AUTO_CONNECT , 1294 ad­‹r -> dev_id , 0, NULL , 1295 NULL , NULL, NULL) > 0) { 1296 `btd_ad­‹r_£t_Ë_auto_cÚÃù ( ad­‹r , FALSE ); 1297  TRUE ; 1300 `”rÜ ("FažedØdi§bˆautØcÚÀ: %u", ad­‹r -> dev_id ); 1302  FALSE ; 1303 } } 1306  $btd_ad­‹r_»move_deviû ( btd_ad­‹r * ad­‹r , 1307  btd_deviû * dev ) 1309 GLi¡ * l ; 1311 ad­‹r -> cÚÃù_li¡ = `g_¦i¡_»move ×d­‹r->cÚÃù_li¡, dev ); 1313 ad­‹r -> deviûs = `g_¦i¡_»move ×d­‹r->deviûs, dev ); 1315 ad­‹r -> discov”y_found = `g_¦i¡_»move (adapter->discovery_found, 1316 dev ); 1318 ad­‹r -> cÚÃùiÚs = `g_¦i¡_»move ×d­‹r->cÚÃùiÚs, dev ); 1320 ià( ad­‹r -> cÚÃù_Ë =ð dev ) 1321 ad­‹r -> cÚÃù_Ë = NULL ; 1323 l = ad­‹r -> auths -> h—d ; 1324  l !ð NULL ) { 1325  £rviû_auth * auth = l -> d©a ; 1326 GLi¡ * Ãxt = `g_li¡_Ãxt ( l ); 1328 ià( auth -> deviû !ð dev ) { 1329 l = Ãxt ; 1333 `g_queue_d–‘e_lšk ( ad­‹r -> auths , l ); 1334 l = Ãxt ; 1336 `£rviû_auth_ÿnûl ( auth ); 1339 `deviû_»move ( dev , TRUE ); 1340 } } 1342  btd_deviû * $btd_ad­‹r_g‘_deviû ( btd_ad­‹r * ad­‹r , 1343 cÚ¡ bdaddr_t * addr , 1344 ušt8_t addr_ty³ ) 1346  btd_deviû * deviû ; 1348 ià(! ad­‹r ) 1349  NULL ; 1351 deviû = `btd_ad­‹r_fšd_deviû ( ad­‹r , addr , addr_ty³ ); 1352 ià( deviû ) 1353  deviû ; 1355  `ad­‹r_ü—‹_deviû ( ad­‹r , addr , addr_ty³ ); 1356 } } 1358 sdp_li¡_t * $btd_ad­‹r_g‘_£rviûs ( btd_ad­‹r * ad­‹r ) 1360  ad­‹r -> £rviûs ; 1361 } } 1363  $·ssive_sÿšg_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 1364 cÚ¡ * ·¿m , * u£r_d©a ) 1366  btd_ad­‹r * ad­‹r = u£r_d©a ; 1367 cÚ¡  mgmt_ý_¡¬t_discov”y * ½ = ·¿m ; 1369 `DBG ("¡©u 0x%02x", ¡©us ); 1371 ià( Ëngth < (* ½ )) { 1372 `”rÜ ("Wrong size of start scanning„eturn…arameters"); 1376 ià( ¡©us =ð MGMT_STATUS_SUCCESS ) { 1377 ad­‹r -> discov”y_ty³ = ½ -> ty³ ; 1378 ad­‹r -> discov”y_’abË = 0x01; 1380 } } 1382  gboÞ—n $·ssive_sÿšg_timeout ( gpoš‹r u£r_d©a ) 1384  btd_ad­‹r * ad­‹r = u£r_d©a ; 1385  mgmt_ý_¡¬t_discov”y ý ; 1387 ad­‹r -> ·ssive_sÿn_timeout = 0; 1389 ý . ty³ = (1 << BDADDR_LE_PUBLIC è| (1 << BDADDR_LE_RANDOM ); 1390 #ifdeà __TIZEN_PATCH__ 1391 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_START_LE_DISCOVERY , 1392 ad­‹r -> dev_id , ( ý ), &cp, 1393 ·ssive_sÿšg_com¶‘e , ad­‹r , NULL ); 1395 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_START_DISCOVERY , 1396 ad­‹r -> dev_id , ( ý ), &cp, 1397 ·ssive_sÿšg_com¶‘e , ad­‹r , NULL ); 1399  FALSE ; 1400 } } 1402  $Œigg”_·ssive_sÿšg ( btd_ad­‹r * ad­‹r ) 1404 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_LE )) 1407 `DBG (""); 1409 ià( ad­‹r -> ·ssive_sÿn_timeout > 0) { 1410 `g_sourû_»move ( ad­‹r -> ·ssive_sÿn_timeout ); 1411 ad­‹r -> ·ssive_sÿn_timeout = 0; 1419 ià( k”Ãl_cÚn_cÚŒÞ ) 1429 #ifdeà __TIZEN_PATCH__ 1430 ià( ad­‹r -> discov”y_li¡ ||‡d­‹r-> Ë_discov”y_li¡ ) 1433 ià( ad­‹r -> discov”y_li¡ ) 1437 ià( ad­‹r -> discov”y_’abË == 0x01) 1444 ià( ad­‹r -> discov”y_su¥’ded ) 1451 ià(! ad­‹r -> cÚÃù_li¡ ) 1454 ad­‹r -> ·ssive_sÿn_timeout = `g_timeout_add_£cÚds ( CONN_SCAN_TIMEOUT , 1455 ·ssive_sÿšg_timeout , ad­‹r ); 1456 } } 1458  $¡Ý_·ssive_sÿšg_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 1459 cÚ¡ * ·¿m , * u£r_d©a ) 1461  btd_ad­‹r * ad­‹r = u£r_d©a ; 1462  btd_deviû * dev ; 1463  ”r ; 1465 `DBG ("¡©u 0x%02x (%s)", ¡©us , `mgmt_”r¡r (status)); 1467 dev = ad­‹r -> cÚÃù_Ë ; 1468 ad­‹r -> cÚÃù_Ë = NULL ; 1475 ià( k”Ãl_cÚn_cÚŒÞ ) 1483 ià( ¡©us !ð MGMT_STATUS_SUCCESS && stu !ð MGMT_STATUS_REJECTED ) { 1484 `”rÜ ("Stopping…assive scanning failed: %s", 1485 `mgmt_”r¡r ( ¡©us )); 1489 ad­‹r -> discov”y_ty³ = 0x00; 1490 ad­‹r -> discov”y_’abË = 0x00; 1492 ià(! dev ) { 1493 `DBG ("Device„emoved while stopping…assive scanning"); 1494 `Œigg”_·ssive_sÿšg ( ad­‹r ); 1498 ”r = `deviû_cÚÃù_Ë ( dev ); 1499 ià( ”r < 0) { 1500 `”rÜ ("LE‡uto connection failed: %s (%d)", 1501 `¡»¼Ü (- ”r ), -err); 1502 `Œigg”_·ssive_sÿšg ( ad­‹r ); 1504 } } 1506  $¡Ý_·ssive_sÿšg ( btd_ad­‹r * ad­‹r ) 1508  mgmt_ý_¡Ý_discov”y ý ; 1509 #ifdeà __TIZEN_PATCH__ 1510  mgmt_ý_¡Ý_discov”y Ë_ý ; 1513 `DBG (""); 1517 #ifdeà __TIZEN_PATCH__ 1518 ià( ad­‹r -> discov”y_li¡ ||‡d­‹r-> Ë_discov”y_li¡ ) 1521 ià( ad­‹r -> discov”y_li¡ ) 1525 ià( ad­‹r -> discov”y_’abË == 0x00) 1528 #ifdeà __TIZEN_PATCH__ 1529 ià(( ad­‹r -> discov”y_ty³ & 0x01) > 0) 1530 ý . ty³ = 0x01; 1531 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_STOP_DISCOVERY , 1532 ad­‹r -> dev_id , ( ý ), &cp, 1533 ¡Ý_·ssive_sÿšg_com¶‘e , ad­‹r , NULL ); 1534 ià(( ad­‹r -> discov”y_ty³ & 0x06) > 0) 1535 Ë_ý . ty³ = 0x06; 1536 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_STOP_LE_DISCOVERY , 1537 ad­‹r -> dev_id , ( Ë_ý ), &le_cp, 1538 ¡Ý_·ssive_sÿšg_com¶‘e , ad­‹r , NULL ); 1540 ý . ty³ = ad­‹r -> discov”y_ty³ ; 1542 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_STOP_DISCOVERY , 1543 ad­‹r -> dev_id , ( ý ), &cp, 1544 ¡Ý_·ssive_sÿšg_com¶‘e , ad­‹r , NULL ); 1546 } } 1548  $ÿnûl_·ssive_sÿšg ( btd_ad­‹r * ad­‹r ) 1550 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_LE )) 1553 `DBG (""); 1555 ià( ad­‹r -> ·ssive_sÿn_timeout > 0) { 1556 `g_sourû_»move ( ad­‹r -> ·ssive_sÿn_timeout ); 1557 ad­‹r -> ·ssive_sÿn_timeout = 0; 1559 } } 1561  Œigg”_¡¬t_discov”y ( btd_ad­‹r * ad­‹r , gušt d–ay ); 1563  $¡¬t_discov”y_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 1564 cÚ¡ * ·¿m , * u£r_d©a ) 1566  btd_ad­‹r * ad­‹r = u£r_d©a ; 1567 cÚ¡  mgmt_ý_¡¬t_discov”y * ½ = ·¿m ; 1569 `DBG ("¡©u 0x%02x", ¡©us ); 1570 #iâdeà __TIZEN_PATCH__ 1571 `DBG ("Discov”y Ty³ 0x%02x", ½ -> ty³ ); 1574 ià( Ëngth < (* ½ )) { 1575 `”rÜ ("Wrong size of start discovery„eturn…arameters"); 1579 ià( ¡©us =ð MGMT_STATUS_SUCCESS ) { 1580 #ifdeà __TIZEN_PATCH__ 1581 `DBG ("R‘uº…¬am discov”yy³ 0x%02x", ½ -> ty³ ); 1582 ad­‹r -> discov”y_ty³ |ð ½ -> ty³ ; 1584 ad­‹r -> discov”y_ty³ = ½ -> ty³ ; 1586 ad­‹r -> discov”y_’abË = 0x01; 1587 `DBG ("Discov”y Ty³ 0x%02x", ad­‹r -> discov”y_ty³ ); 1589 ià( ad­‹r -> discov”šg ) 1592 ad­‹r -> discov”šg = Œue ; 1593 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 1594 ADAPTER_INTERFACE , "Discovering"); 1597 #ifdeà __TIZEN_PATCH__ 1599 ad­‹r -> discov”šg = çl£ ; 1600 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 1601 ADAPTER_INTERFACE , "Discovering"); 1610 #iâdeà __TIZEN_PATCH__ 1611 `Œigg”_¡¬t_discov”y ( ad­‹r , IDLE_DISCOV_TIMEOUT * 2); 1613 } } 1615 #ifdeà __TIZEN_PATCH__ 1616  $¡¬t_Ë_discov”y_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 1617 cÚ¡ * ·¿m , * u£r_d©a ) 1619  btd_ad­‹r * ad­‹r = u£r_d©a ; 1620 cÚ¡  mgmt_ý_¡¬t_discov”y * ½ = ·¿m ; 1622 `DBG ("¡©u 0x%02x", ¡©us ); 1623 `DBG ("Discov”y Ty³ 0x%02x", ½ -> ty³ ); 1624 ià( Ëngth < (* ½ )) { 1625 `”rÜ ("Wrong size of start discovery„eturn…arameters"); 1629 ià( ¡©us =ð MGMT_STATUS_SUCCESS ) { 1630 ad­‹r -> discov”y_ty³ |ð ½ -> ty³ ; 1631 ad­‹r -> discov”y_’abË = 0x01; 1633 ià( ad­‹r -> Ë_discov”šg ) 1636 ad­‹r -> Ë_discov”šg = Œue ; 1637 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 1638 ADAPTER_INTERFACE , "LEDiscovering"); 1642 ad­‹r -> discov”šg = çl£ ; 1643 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 1644 ADAPTER_INTERFACE , "LEDiscovering"); 1653 } } 1656  gboÞ—n $¡¬t_discov”y_timeout ( gpoš‹r u£r_d©a ) 1658  btd_ad­‹r * ad­‹r = u£r_d©a ; 1659  mgmt_ý_¡¬t_discov”y ý ; 1660 #ifdeà __TIZEN_PATCH__ 1661 ušt8_t Ãw_ty³ = 0; 1663 ušt8_t Ãw_ty³ ; 1666 `DBG (""); 1668 ad­‹r -> discov”y_idË_timeout = 0; 1670 #ifdeà __TIZEN_PATCH__ 1671 ià( ad­‹r -> disc_ty³ =ð BT_DISC_TYPE_BREDR_ONLY ) { 1673 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_BREDR ) 1674 Ãw_ty³ = (1 << BDADDR_BREDR ); 1676 Ãw_ty³ = 0; 1678 } ià( ad­‹r -> disc_ty³ =ð BT_DISC_TYPE_LE_ONLY ) { 1680 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_LE ) 1681 Ãw_ty³ = (1 << BDADDR_LE_PUBLIC è| (1 << BDADDR_LE_RANDOM ); 1683 } ià( ad­‹r -> disc_ty³ =ð BT_DISC_TYPE_LE_BREDR ) { 1685 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_BREDR ) 1686 Ãw_ty³ = (1 << BDADDR_BREDR ); 1688 Ãw_ty³ = 0; 1689 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_LE ) 1690 Ãw_ty³ |ð(1 << BDADDR_LE_PUBLIC è| (1 << BDADDR_LE_RANDOM ); 1694 ià( ad­‹r -> discov”y_’abË == 0x01) { 1699 ià( ad­‹r -> disc_ty³ =ð BT_DISC_TYPE_BREDR_ONLY ) { 1700 ià(( ad­‹r -> discov”y_ty³ & Ãw_ty³ ) == 0x01) { 1701 ià( ad­‹r -> discov”šg ) 1702  FALSE ; 1704 ad­‹r -> discov”šg = Œue ; 1705 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 1706 ADAPTER_INTERFACE , "Discovering"); 1708  FALSE ; 1711 } ià( ad­‹r -> disc_ty³ =ð BT_DISC_TYPE_LE_ONLY ) { 1712 ià(( ad­‹r -> discov”y_ty³ & Ãw_ty³ ) == 0x06) { 1713 ià( ad­‹r -> Ë_discov”šg ) 1714  FALSE ; 1716 ad­‹r -> Ë_discov”šg = Œue ; 1717 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 1718 ADAPTER_INTERFACE , "LEDiscovering"); 1720  FALSE ; 1726 `DBG ("ad­‹r->disc_ty³ [%d]", ad­‹r -> disc_ty³ ); 1727 ià( ad­‹r -> disc_ty³ =ð BT_DISC_TYPE_BREDR_ONLY ) { 1728 ý . ty³ = 0x01; 1729 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_START_DISCOVERY , 1730 ad­‹r -> dev_id , ( ý ), &cp, 1731 ¡¬t_discov”y_com¶‘e , ad­‹r , NULL ); 1733 } ià( ad­‹r -> disc_ty³ =ð BT_DISC_TYPE_LE_ONLY ) { 1734 ý . ty³ = 0x06; 1735 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_START_LE_DISCOVERY , 1736 ad­‹r -> dev_id , ( ý ), &cp, 1737 ¡¬t_Ë_discov”y_com¶‘e , ad­‹r , NULL ); 1740 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_BREDR ) 1741 Ãw_ty³ = (1 << BDADDR_BREDR ); 1743 Ãw_ty³ = 0; 1745 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_LE ) 1746 Ãw_ty³ |ð(1 << BDADDR_LE_PUBLIC è| (1 << BDADDR_LE_RANDOM ); 1748 ià( ad­‹r -> discov”y_’abË == 0x01) { 1753 ià( ad­‹r -> discov”y_ty³ =ð Ãw_ty³ ) { 1754 ià( ad­‹r -> discov”šg ) 1755  FALSE ; 1757 ad­‹r -> discov”šg = Œue ; 1758 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 1759 ADAPTER_INTERFACE , "Discovering"); 1760  FALSE ; 1770 ý . ty³ = ad­‹r -> discov”y_ty³ ; 1772 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_STOP_DISCOVERY , 1773 ad­‹r -> dev_id , ( ý ), &cp, 1774 NULL , NULL, NULL); 1777 ý . ty³ = Ãw_ty³ ; 1779 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_START_DISCOVERY , 1780 ad­‹r -> dev_id , ( ý ), &cp, 1781 ¡¬t_discov”y_com¶‘e , ad­‹r , NULL ); 1784  FALSE ; 1785 } } 1787  $Œigg”_¡¬t_discov”y ( btd_ad­‹r * ad­‹r , gušt d–ay ) 1790 `DBG (""); 1792 `ÿnûl_·ssive_sÿšg ( ad­‹r ); 1794 ià( ad­‹r -> discov”y_idË_timeout > 0) { 1795 `g_sourû_»move ( ad­‹r -> discov”y_idË_timeout ); 1796 ad­‹r -> discov”y_idË_timeout = 0; 1805 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 1808 #ifdeà __TIZEN_PATCH__ 1809 ià( d–ay == 0) { 1810 `¡¬t_discov”y_timeout (( gpoš‹r ) ad­‹r ); 1814 ad­‹r -> discov”y_idË_timeout = `g_timeout_add_£cÚds ( d–ay , 1815 ¡¬t_discov”y_timeout , ad­‹r ); 1816 } } 1818 #iâdeà __TIZEN_PATCH__ 1819  $su¥’d_discov”y_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 1820 cÚ¡ * ·¿m , * u£r_d©a ) 1822  btd_ad­‹r * ad­‹r = u£r_d©a ; 1824 `DBG ("¡©u 0x%02x", ¡©us ); 1826 ià( ¡©us =ð MGMT_STATUS_SUCCESS ) { 1827 #ifdeà __TIZEN_PATCH__ 1828 ad­‹r -> discov”y_ty³ &= (~0x01); 1830 ad­‹r -> discov”y_ty³ = 0x00; 1832 ad­‹r -> discov”y_’abË = 0x00; 1835 } } 1837 #ifdeà __TIZEN_PATCH__ 1838  $su¥’d_Ë_discov”y_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 1839 cÚ¡ * ·¿m , * u£r_d©a ) 1841  btd_ad­‹r * ad­‹r = u£r_d©a ; 1843 `DBG ("¡©u 0x%02x", ¡©us ); 1845 ià( ¡©us =ð MGMT_STATUS_SUCCESS ) { 1846 ad­‹r -> discov”y_ty³ &= (~0x06); 1847 ad­‹r -> discov”y_’abË = 0x00; 1850 } } 1853  $su¥’d_discov”y ( btd_ad­‹r * ad­‹r ) 1855  mgmt_ý_¡Ý_discov”y ý ; 1856 #ifdeà __TIZEN_PATCH__ 1857  mgmt_ý_¡Ý_Ë_discov”y Ë_ý ; 1860 `DBG (""); 1862 ad­‹r -> discov”y_su¥’ded = Œue ; 1868 #ifdeà __TIZEN_PATCH__ 1869 ià( ad­‹r -> discov”y_li¡ =ð NULL &&‡d­‹r-> Ë_discov”y_li¡ == NULL ) 1872 ià(! ad­‹r -> discov”y_li¡ ) 1883 ià( ad­‹r -> discov”y_idË_timeout > 0) { 1884 `g_sourû_»move ( ad­‹r -> discov”y_idË_timeout ); 1885 ad­‹r -> discov”y_idË_timeout = 0; 1888 ià( ad­‹r -> discov”y_’abË == 0x00) 1891 #ifdeà __TIZEN_PATCH__ 1892 ià( ad­‹r -> discov”y_li¡ ) { 1893 ý . ty³ = 0x01; 1894 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_STOP_DISCOVERY , 1895 ad­‹r -> dev_id , ( ý ), &cp, 1896 su¥’d_discov”y_com¶‘e , ad­‹r , NULL ); 1898 ià( ad­‹r -> Ë_discov”y_li¡ ) { 1899 Ë_ý . ty³ = 0x06; 1900 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_STOP_LE_DISCOVERY , 1901 ad­‹r -> dev_id , ( Ë_ý ), &le_cp, 1902 su¥’d_Ë_discov”y_com¶‘e , ad­‹r , NULL ); 1905 ý . ty³ = ad­‹r -> discov”y_ty³ ; 1907 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_STOP_DISCOVERY , 1908 ad­‹r -> dev_id , ( ý ), &cp, 1909 su¥’d_discov”y_com¶‘e , ad­‹r , NULL ); 1911 } } 1913  $»sume_discov”y ( btd_ad­‹r * ad­‹r ) 1915 `DBG (""); 1917 ad­‹r -> discov”y_su¥’ded = çl£ ; 1923 ià(! ad­‹r -> discov”y_li¡ ) 1931 #ifdeà __TIZEN_PATCH__ 1932 ad­‹r -> disc_ty³ = BT_DISC_TYPE_BREDR_ONLY ; 1934 `Œigg”_¡¬t_discov”y ( ad­‹r , IDLE_DISCOV_TIMEOUT ); 1935 } } 1937 #ifdeà __TIZEN_PATCH__ 1938  $»sume_Ë_discov”y ( btd_ad­‹r * ad­‹r ) 1940 `DBG (""); 1942 ad­‹r -> discov”y_su¥’ded = çl£ ; 1948 ià( ad­‹r -> Ë_discov”y_li¡ =ð NULL ) 1956 ad­‹r -> disc_ty³ = BT_DISC_TYPE_LE_ONLY ; 1957 `Œigg”_¡¬t_discov”y ( ad­‹r , IDLE_LE_DISCOV_TIMEOUT ); 1958 } } 1961  $discov”šg_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 1962 cÚ¡ * ·¿m , * u£r_d©a ) 1964 cÚ¡  mgmt_ev_discov”šg * ev = ·¿m ; 1965  btd_ad­‹r * ad­‹r = u£r_d©a ; 1967 ià( Ëngth < (* ev )) { 1968 `”rÜ ("Too small discoveringƒvent"); 1972 `DBG ("hci%uy³ %u discov”šg %u", ad­‹r -> dev_id , 1973 ev -> ty³ ,ƒv-> discov”šg ); 1975 #ifdeà __TIZEN_PATCH__ 1976 `DBG ("šfØdiscov_ty³ %d", ad­‹r -> discov”y_ty³ ); 1977 ià( ev -> ty³ =ð DISCOV_TYPE_BREDR ) { 1978 ià( ev -> discov”šg =ð FALSE ) { 1979 `hci_þ—r_b™ ( BDADDR_BREDR , & ad­‹r -> discov”y_ty³ ); 1980 ad­‹r -> discov”šg = FALSE ; 1982 `hci_£t_b™ ( BDADDR_BREDR , & ad­‹r -> discov”y_ty³ ); 1983 ad­‹r -> discov”šg = TRUE ; 1985 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 1986 ADAPTER_INTERFACE , "Discovering"); 1988 } ià( ev -> ty³ =ð DISCOV_TYPE_LE ) { 1989 ià( ev -> discov”šg =ð FALSE ) { 1990 `hci_þ—r_b™ ( BDADDR_LE_PUBLIC , & ad­‹r -> discov”y_ty³ ); 1991 `hci_þ—r_b™ ( BDADDR_LE_RANDOM , & ad­‹r -> discov”y_ty³ ); 1992 ad­‹r -> Ë_discov”šg = FALSE ; 1994 `hci_£t_b™ ( BDADDR_LE_PUBLIC , & ad­‹r -> discov”y_ty³ ); 1995 `hci_£t_b™ ( BDADDR_LE_RANDOM , & ad­‹r -> discov”y_ty³ ); 1996 ad­‹r -> Ë_discov”šg = TRUE ; 1999 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 2000 ADAPTER_INTERFACE , "LEDiscovering"); 2003 ià( ad­‹r -> discov”y_’abË =ð ev -> discov”šg ) 2006 ad­‹r -> discov”y_ty³ = ev -> ty³ ; 2007 ad­‹r -> discov”y_’abË = ev -> discov”šg ; 2016 #ifdeà __TIZEN_PATCH__ 2017 ià( ad­‹r -> discov”y_li¡ =ð NULL &&‡d­‹r-> Ë_discov”y_li¡ == NULL) { 2018 ià(! ad­‹r -> cÚÃù_Ë ) 2019 `Œigg”_·ssive_sÿšg ( ad­‹r ); 2023 ià(! ad­‹r -> discov”y_li¡ ) { 2024 ià(! ad­‹r -> cÚÃù_Ë ) 2025 `Œigg”_·ssive_sÿšg ( ad­‹r ); 2030 ià( ad­‹r -> discov”y_su¥’ded ) 2033  ad­‹r -> discov”y_’abË ) { 2035 `Œigg”_¡¬t_discov”y ( ad­‹r , IDLE_DISCOV_TIMEOUT ); 2039 ià( ad­‹r -> discov”y_idË_timeout > 0) { 2040 `g_sourû_»move ( ad­‹r -> discov”y_idË_timeout ); 2041 ad­‹r -> discov”y_idË_timeout = 0; 2045 } } 2047 #ifdeà __TIZEN_PATCH__ 2048  $¡Ý_discov”y_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 2049 cÚ¡ * ·¿m , * u£r_d©a ) 2051  btd_ad­‹r * ad­‹r = u£r_d©a ; 2053 `DBG ("¡©u 0x%02x", ¡©us ); 2055 ià( ¡©us =ð MGMT_STATUS_SUCCESS ) { 2056 ad­‹r -> discov”y_ty³ &= (~0x01); 2057 `DBG ("Discov”y Ty³ 0x%02x", ad­‹r -> discov”y_ty³ ); 2059 ad­‹r -> discov”šg = çl£ ; 2060 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 2061 ADAPTER_INTERFACE , "Discovering"); 2063 ià( ad­‹r -> discov”y_li¡ =ð NULL &&‡d­‹r-> Ë_discov”y_li¡ == NULL) { 2064 ad­‹r -> discov”y_’abË = 0x00; 2065 `Œigg”_·ssive_sÿšg ( ad­‹r ); 2068 } } 2070  $¡Ý_Ë_discov”y_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 2071 cÚ¡ * ·¿m , * u£r_d©a ) 2073  btd_ad­‹r * ad­‹r = u£r_d©a ; 2075 `DBG ("¡©u 0x%02x", ¡©us ); 2077 ià( ¡©us =ð MGMT_STATUS_SUCCESS ) { 2078 ad­‹r -> discov”y_ty³ &= (~0x06); 2079 `DBG ("Discov”y Ty³ 0x%02x", ad­‹r -> discov”y_ty³ ); 2081 ad­‹r -> Ë_discov”šg = çl£ ; 2082 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 2083 ADAPTER_INTERFACE , "LEDiscovering"); 2085 ià( ad­‹r -> discov”y_li¡ =ð NULL &&‡d­‹r-> Ë_discov”y_li¡ == NULL) { 2086 ad­‹r -> discov”y_’abË = 0x00; 2087 `Œigg”_·ssive_sÿšg ( ad­‹r ); 2090 } } 2094  $¡Ý_discov”y_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 2095 cÚ¡ * ·¿m , * u£r_d©a ) 2097  btd_ad­‹r * ad­‹r = u£r_d©a ; 2099 `DBG ("¡©u 0x%02x", ¡©us ); 2101 ià( ¡©us =ð MGMT_STATUS_SUCCESS ) { 2102 ad­‹r -> discov”y_ty³ = 0x00; 2103 ad­‹r -> discov”y_’abË = 0x00; 2104 `DBG ("Discov”y Ty³ 0x%02x", ad­‹r -> discov”y_ty³ ); 2106 ad­‹r -> discov”šg = çl£ ; 2107 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 2108 ADAPTER_INTERFACE , "Discovering"); 2110 `Œigg”_·ssive_sÿšg ( ad­‹r ); 2112 } } 2116  $com·»_£nd” ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 2118 cÚ¡  w©ch_þ›Á * þ›Á = a ; 2119 cÚ¡ * £nd” = b ; 2121  `g_¡rcmp0 ( þ›Á -> owÃr , £nd” ); 2122 } } 2124  $šv®id©e_rssi ( gpoš‹r a ) 2126  btd_deviû * dev = a ; 2128 `deviû_£t_rssi ( dev , 0); 2129 } } 2131  $discov”y_þ—nup ( btd_ad­‹r * ad­‹r ) 2133 `g_¦i¡_ä“_fuÎ ( ad­‹r -> discov”y_found , šv®id©e_rssi ); 2134 ad­‹r -> discov”y_found = NULL ; 2135 } } 2137  gboÞ—n $»move_‹mp_deviûs ( gpoš‹r u£r_d©a ) 2139  btd_ad­‹r * ad­‹r = u£r_d©a ; 2140 GSLi¡ * l , * Ãxt ; 2142 `DBG ("%s", ad­‹r -> ·th ); 2144 ad­‹r -> ‹mp_deviûs_timeout = 0; 2146  l = ad­‹r -> deviûs ;† !ð NULL ;† = Ãxt ) { 2147  btd_deviû * dev = l -> d©a ; 2149 Ãxt = `g_¦i¡_Ãxt ( l ); 2151 ià( `deviû_is_‹mpܬy ( dev )) 2152 `btd_ad­‹r_»move_deviû ( ad­‹r , dev ); 2155  FALSE ; 2156 } } 2158  $discov”y_de¡roy (* u£r_d©a ) 2160  w©ch_þ›Á * þ›Á = u£r_d©a ; 2161  btd_ad­‹r * ad­‹r = þ›Á ->adapter; 2163 `DBG ("owø%s", þ›Á -> owÃr ); 2165 ad­‹r -> discov”y_li¡ = `g_¦i¡_»move (adapter->discovery_list, 2166 þ›Á ); 2168 `g_ä“ ( þ›Á -> owÃr ); 2169 `g_ä“ ( þ›Á ); 2176 #ifdeà __TIZEN_PATCH__ 2177 ià( ad­‹r -> discov”y_li¡ ||‡d­‹r-> Ë_discov”y_li¡ ) 2180 ià( ad­‹r -> discov”y_li¡ ) 2184 ad­‹r -> discov”y_ty³ = 0x00; 2186 ià( ad­‹r -> discov”y_idË_timeout > 0) { 2187 `g_sourû_»move ( ad­‹r -> discov”y_idË_timeout ); 2188 ad­‹r -> discov”y_idË_timeout = 0; 2191 ià( ad­‹r -> ‹mp_deviûs_timeout > 0) { 2192 `g_sourû_»move ( ad­‹r -> ‹mp_deviûs_timeout ); 2193 ad­‹r -> ‹mp_deviûs_timeout = 0; 2196 `discov”y_þ—nup ( ad­‹r ); 2197 #iâdeà __TIZEN_PATCH__ 2198 ad­‹r -> ‹mp_deviûs_timeout = `g_timeout_add_£cÚds ( TEMP_DEV_TIMEOUT , 2199 »move_‹mp_deviûs , ad­‹r ); 2201 } } 2203 #ifdeà __TIZEN_PATCH__ 2204  $Ë_discov”y_de¡roy (* u£r_d©a ) 2206  w©ch_þ›Á * þ›Á = u£r_d©a ; 2207  btd_ad­‹r * ad­‹r = þ›Á ->adapter; 2209 `DBG ("owø%s", þ›Á -> owÃr ); 2211 ad­‹r -> Ë_discov”y_li¡ = `g_¦i¡_»move (adapter->le_discovery_list, 2212 þ›Á ); 2214 `g_ä“ ( þ›Á -> owÃr ); 2215 `g_ä“ ( þ›Á ); 2221 `DBG ("adapter->discovery_list[%p]‡dapter->le_discovery_list[%p]", 2222 ad­‹r -> discov”y_li¡ ,‡d­‹r-> Ë_discov”y_li¡ ); 2223 ià( ad­‹r -> discov”y_li¡ ||‡d­‹r-> Ë_discov”y_li¡ ) 2226 ad­‹r -> discov”y_ty³ = 0x00; 2227 `DBG ("Re¡¬ˆTim”...‡d­‹r->discov”y_ty³[%d]", ad­‹r -> discov”y_ty³ ); 2228 ià( ad­‹r -> discov”y_idË_timeout > 0) { 2229 `g_sourû_»move ( ad­‹r -> discov”y_idË_timeout ); 2230 ad­‹r -> discov”y_idË_timeout = 0; 2233 ià( ad­‹r -> ‹mp_deviûs_timeout > 0) { 2234 `g_sourû_»move ( ad­‹r -> ‹mp_deviûs_timeout ); 2235 ad­‹r -> ‹mp_deviûs_timeout = 0; 2238 `discov”y_þ—nup ( ad­‹r ); 2239 #iâdeà __TIZEN_PATCH__ 2240 ad­‹r -> ‹mp_deviûs_timeout = `g_timeout_add_£cÚds ( TEMP_DEV_TIMEOUT , 2241 »move_‹mp_deviûs , ad­‹r ); 2243 } } 2246  $discov”y_discÚÃù ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 2248  w©ch_þ›Á * þ›Á = u£r_d©a ; 2249  btd_ad­‹r * ad­‹r = þ›Á ->adapter; 2250  mgmt_ý_¡Ý_discov”y ý ; 2252 `DBG ("owø%s", þ›Á -> owÃr ); 2254 ad­‹r -> discov”y_li¡ = `g_¦i¡_»move (adapter->discovery_list, 2255 þ›Á ); 2264 ià( ad­‹r -> discov”y_li¡ ) 2271 ià( ad­‹r -> discov”y_’abË == 0x00) { 2272 ad­‹r -> discov”šg = çl£ ; 2273 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 2274 ADAPTER_INTERFACE , "Discovering"); 2276 #ifdeà __TIZEN_PATCH__ 2277 ià( ad­‹r -> discov”šg =ð çl£ &&‡d­‹r-> Ë_discov”šg == false) { 2278 `Œigg”_·ssive_sÿšg ( ad­‹r ); 2282 `Œigg”_·ssive_sÿšg ( ad­‹r ); 2287 #ifdeà __TIZEN_PATCH__ 2288 ý . ty³ = 0x01; 2290 ý . ty³ = ad­‹r -> discov”y_ty³ ; 2293 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_STOP_DISCOVERY , 2294 ad­‹r -> dev_id , ( ý ), &cp, 2295 ¡Ý_discov”y_com¶‘e , ad­‹r , NULL ); 2296 } } 2298 #ifdeà __TIZEN_PATCH__ 2299  $Ë_discov”y_discÚÃù ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 2301  w©ch_þ›Á * þ›Á = u£r_d©a ; 2302  btd_ad­‹r * ad­‹r = þ›Á ->adapter; 2303  mgmt_ý_¡Ý_Ë_discov”y ý ; 2305 `DBG ("owø%s", þ›Á -> owÃr ); 2307 ad­‹r -> Ë_discov”y_li¡ = `g_¦i¡_»move (adapter->le_discovery_list, 2308 þ›Á ); 2317 ià( ad­‹r -> Ë_discov”y_li¡ ) 2324 ià( ad­‹r -> discov”y_’abË == 0x00) { 2325 ad­‹r -> Ë_discov”šg = çl£ ; 2326 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 2327 ADAPTER_INTERFACE , "LEDiscovering"); 2329 ià( ad­‹r -> discov”šg =ð çl£ &&‡d­‹r-> Ë_discov”šg == false) { 2330 `Œigg”_·ssive_sÿšg ( ad­‹r ); 2335 ý . ty³ = 0x06; 2337 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_STOP_LE_DISCOVERY , 2338 ad­‹r -> dev_id , ( ý ), &cp, 2339 ¡Ý_discov”y_com¶‘e , ad­‹r , NULL ); 2340 } } 2343  DBusMes§ge * $¡¬t_discov”y ( DBusCÚÃùiÚ * cÚn , 2344 DBusMes§ge * msg , * u£r_d©a ) 2346  btd_ad­‹r * ad­‹r = u£r_d©a ; 2347 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 2348  w©ch_þ›Á * þ›Á ; 2349 GSLi¡ * li¡ ; 2351 `DBG ("£nd” %s", £nd” ); 2353 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 2354  `btd_”rÜ_nÙ_»ady ( msg ); 2360 #ifdeà __TIZEN_PATCH__ 2361 ad­‹r -> disc_ty³ = BT_DISC_TYPE_BREDR_ONLY ; 2364 li¡ = `g_¦i¡_fšd_cu¡om ( ad­‹r -> discov”y_li¡ , £nd” , 2365 com·»_£nd” ); 2366 ià( li¡ ) 2367  `btd_”rÜ_busy ( msg ); 2369 þ›Á = `g_Ãw0 ( w©ch_þ›Á , 1); 2371 þ›Á -> ad­‹r =‡dapter; 2372 þ›Á -> owÃr = `g_¡rdup ( £nd” ); 2373 þ›Á -> w©ch = `g_dbus_add_discÚÃù_w©ch ( dbus_cÚn , £nd” , 2374 discov”y_discÚÃù , þ›Á , 2375 discov”y_de¡roy ); 2377 ad­‹r -> discov”y_li¡ = `g_¦i¡_´•’d (adapter->discovery_list, 2378 þ›Á ); 2385 `Œigg”_¡¬t_discov”y ( ad­‹r , 0); 2387  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2388 } } 2390 #ifdeà __TIZEN_PATCH__ 2391  DBusMes§ge * $ad­‹r_¡¬t_cu¡om_discov”y ( DBusCÚÃùiÚ * cÚn , 2392 DBusMes§ge * msg , * u£r_d©a ) 2394  btd_ad­‹r * ad­‹r = u£r_d©a ; 2395 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 2396  w©ch_þ›Á * þ›Á ; 2397 GSLi¡ * li¡ ; 2398 cÚ¡ gch¬ * disc_ty³ ; 2400 `DBG ("£nd” %s", £nd” ); 2402 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 2403  `btd_”rÜ_nÙ_»ady ( msg ); 2405 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & disc_ty³ , 2406 DBUS_TYPE_INVALID )) { 2407  `btd_”rÜ_šv®id_¬gs ( msg ); 2410 `DBG ("discov”yy³ = %s", disc_ty³ ); 2413 ià( `g_¡rcmp0 ( disc_ty³ , "BREDR") == 0) 2414 ad­‹r -> disc_ty³ = BT_DISC_TYPE_BREDR_ONLY ; 2415 ià( `g_¡rcmp0 ( disc_ty³ , "LE") == 0) 2416 ad­‹r -> disc_ty³ = BT_DISC_TYPE_LE_ONLY ; 2417 ià( `g_¡rcmp0 ( disc_ty³ , "LE_BREDR") == 0) 2418 ad­‹r -> disc_ty³ = BT_DISC_TYPE_LE_BREDR ; 2420  `btd_”rÜ_šv®id_¬gs ( msg ); 2426 li¡ = `g_¦i¡_fšd_cu¡om ( ad­‹r -> discov”y_li¡ , £nd” , 2427 com·»_£nd” ); 2428 ià( li¡ ) 2429  `btd_”rÜ_busy ( msg ); 2431 þ›Á = `g_Ãw0 ( w©ch_þ›Á , 1); 2433 þ›Á -> ad­‹r =‡dapter; 2434 þ›Á -> owÃr = `g_¡rdup ( £nd” ); 2435 þ›Á -> w©ch = `g_dbus_add_discÚÃù_w©ch ( dbus_cÚn , £nd” , 2436 discov”y_discÚÃù , þ›Á , 2437 discov”y_de¡roy ); 2439 ad­‹r -> discov”y_li¡ = `g_¦i¡_´•’d (adapter->discovery_list, 2440 þ›Á ); 2447 `Œigg”_¡¬t_discov”y ( ad­‹r , 0); 2449  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2450 } } 2452  DBusMes§ge * $ad­‹r_¡¬t_Ë_discov”y ( DBusCÚÃùiÚ * cÚn , 2453 DBusMes§ge * msg , * u£r_d©a ) 2455  btd_ad­‹r * ad­‹r = u£r_d©a ; 2456 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 2457  w©ch_þ›Á * þ›Á ; 2458 GSLi¡ * li¡ ; 2460 `DBG ("£nd” %s", £nd” ); 2462 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 2463  `btd_”rÜ_nÙ_»ady ( msg ); 2470 ad­‹r -> disc_ty³ = BT_DISC_TYPE_LE_ONLY ; 2471 `DBG ("ad­‹r->disc_ty³[%d]", ad­‹r -> disc_ty³ ); 2472 `DBG ("ad­‹r->discov”y_ty³ [%d]", ad­‹r -> discov”y_ty³ ); 2474 li¡ = `g_¦i¡_fšd_cu¡om ( ad­‹r -> Ë_discov”y_li¡ , £nd” , 2475 com·»_£nd” ); 2476 ià( li¡ ) 2477  `btd_”rÜ_busy ( msg ); 2479 þ›Á = `g_Ãw0 ( w©ch_þ›Á , 1); 2481 þ›Á -> ad­‹r =‡dapter; 2482 þ›Á -> owÃr = `g_¡rdup ( £nd” ); 2483 þ›Á -> w©ch = `g_dbus_add_discÚÃù_w©ch ( dbus_cÚn , £nd” , 2484 Ë_discov”y_discÚÃù , þ›Á , 2485 Ë_discov”y_de¡roy ); 2487 ad­‹r -> Ë_discov”y_li¡ = `g_¦i¡_´•’d (adapter->le_discovery_list, 2488 þ›Á ); 2495 `Œigg”_¡¬t_discov”y ( ad­‹r , 0); 2497  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2498 } } 2500  DBusMes§ge * $ad­‹r_¡Ý_Ë_discov”y ( DBusCÚÃùiÚ * cÚn , 2501 DBusMes§ge * msg , * u£r_d©a ) 2503  btd_ad­‹r * ad­‹r = u£r_d©a ; 2504 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 2505  mgmt_ý_¡Ý_Ë_discov”y ý ; 2506  w©ch_þ›Á * þ›Á ; 2507 GSLi¡ * li¡ ; 2509 `DBG ("£nd” %s", £nd” ); 2511 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 2512  `btd_”rÜ_nÙ_»ady ( msg ); 2514 li¡ = `g_¦i¡_fšd_cu¡om ( ad­‹r -> Ë_discov”y_li¡ , £nd” , 2515 com·»_£nd” ); 2516 ià(! li¡ ) 2517  `btd_”rÜ_çžed ( msg , "No discovery started"); 2519 þ›Á = li¡ -> d©a ; 2521 ad­‹r -> disc_ty³ = BT_DISC_TYPE_LE_ONLY ; 2522 `DBG ("ad­‹r->disc_ty³[%d]", ad­‹r -> disc_ty³ ); 2523 `DBG ("ad­‹r->discov”y_ty³ [%d]", ad­‹r -> discov”y_ty³ ); 2525 ý . ty³ = ad­‹r -> discov”y_ty³ ; 2526 `DBG ("ý.ty³ %d", ý . ty³ ); 2532 `g_dbus_»move_w©ch ( dbus_cÚn , þ›Á -> w©ch ); 2538 `DBG ("ý.ty³ %d", ý . ty³ ); 2539 `DBG ("ad­‹r->Ë_discov”y_li¡ %d", ad­‹r -> discov”y_ty³ ); 2540 ià( ad­‹r -> Ë_discov”y_li¡ ) 2541  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2547 `DBG ("ý.ty³ %d", ý . ty³ ); 2548 `DBG ("ad­‹r->discov”y_’abË %d", ad­‹r -> discov”y_’abË ); 2549 ià( ad­‹r -> discov”y_’abË == 0x00) { 2550 ad­‹r -> Ë_discov”šg = çl£ ; 2551 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 2552 ADAPTER_INTERFACE , "LEDiscovering"); 2554 `Œigg”_·ssive_sÿšg ( ad­‹r ); 2556  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2558 `DBG ("ad­‹r->discov”y_ty³ %d", ad­‹r -> discov”y_ty³ ); 2559 ý . ty³ = 0x06; 2560 `DBG ("ý.ty³ %d", ý . ty³ ); 2561 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_STOP_LE_DISCOVERY , 2562 ad­‹r -> dev_id , ( ý ), &cp, 2563 ¡Ý_Ë_discov”y_com¶‘e , ad­‹r , NULL ); 2565  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2566 } } 2568  DBusMes§ge * $ad­‹r_£t_adv”tisšg ( DBusCÚÃùiÚ * cÚn , 2569 DBusMes§ge * msg , * d©a ) 2571  btd_ad­‹r * ad­‹r = d©a ; 2572 dbus_boÞ_t ”r ; 2573 dbus_boÞ_t ’abË = FALSE ; 2575 `DBG ("adapter_set_advertising"); 2577 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 2578  `btd_”rÜ_nÙ_»ady ( msg ); 2580 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_BOOLEAN , & ’abË , 2581 DBUS_TYPE_INVALID )) 2582  `btd_”rÜ_šv®id_¬gs ( msg ); 2584 ”r = `£t_mode ( ad­‹r , MGMT_OP_SET_ADVERTISING , ’abË ); 2585 ià(! ”r ) 2586  `btd_”rÜ_çžed ( msg , "Set Advertising failed"); 2588  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2589 } } 2591  DBusMes§ge * $ad­‹r_£t_adv”tisšg_·¿ms ( DBusCÚÃùiÚ * cÚn , 2592 DBusMes§ge * msg , * d©a ) 2594  btd_ad­‹r * ad­‹r = d©a ; 2595  mgmt_ý_£t_adv”tisšg_·¿ms ý ; 2596 dbus_ušt32_t š‹rv®_mš ; 2597 dbus_ušt32_t š‹rv®_max ; 2598 dbus_ušt32_t fž‹r_pÞicy ; 2599 dbus_ušt32_t ty³ ; 2601 `DBG ("Set customised‡dvertising…arameters"); 2603 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 2604  `btd_”rÜ_nÙ_»ady ( msg ); 2606 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 2607 DBUS_TYPE_UINT32 , & š‹rv®_mš , 2608 DBUS_TYPE_UINT32 , & š‹rv®_max , 2609 DBUS_TYPE_UINT32 , & fž‹r_pÞicy , 2610 DBUS_TYPE_UINT32 , & ty³ , 2611 DBUS_TYPE_INVALID )) 2612  `btd_”rÜ_šv®id_¬gs ( msg ); 2614 `mem£t (& ý , 0, (cp)); 2616 `DBG ("advertising interval min %x, max %x, filter %xype %x", 2617 š‹rv®_mš , š‹rv®_max , fž‹r_pÞicy , ty³ ); 2619 ià( fž‹r_pÞicy > 0x03) 2620  `btd_”rÜ_šv®id_¬gs ( msg ); 2622 ià( ty³ > 0x04) 2623  `btd_”rÜ_šv®id_¬gs ( msg ); 2625 ý . š‹rv®_max = interval_max; 2626 ý . š‹rv®_mš = interval_min; 2627 ý . fž‹r_pÞicy = filter_policy; 2628 ý . ty³ =ype; 2630 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_SET_ADVERTISING_PARAMS , 2631 ad­‹r -> dev_id , ( ý ), &cp, 2632 NULL , NULL, NULL) > 0) 2633  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2635  `btd_”rÜ_çžed ( msg , "set‡dvertising…aram failed"); 2636 } } 2638  DBusMes§ge * $ad­‹r_£t_adv”tisšg_d©a ( DBusCÚÃùiÚ * cÚn , 2639 DBusMes§ge * msg , * d©a ) 2641  btd_ad­‹r * ad­‹r = d©a ; 2642  mgmt_ý_£t_adv”tisšg_d©a ý ; 2643 ušt8_t * v®ue ; 2644 št32_t Ën = 0; 2646 `DBG ("Set‡dvertising data"); 2648 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 2649  `btd_”rÜ_nÙ_»ady ( msg ); 2651 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 2652 DBUS_TYPE_ARRAY , DBUS_TYPE_BYTE , & v®ue , & Ën , 2653 DBUS_TYPE_INVALID )) 2654  `btd_”rÜ_šv®id_¬gs ( msg ); 2656 ià( Ën > ADV_DATA_LENGTH_MAX ) 2657  `btd_”rÜ_šv®id_¬gs ( msg ); 2659 `memýy (& ý , v®ue , Ën ); 2661 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_SET_ADVERTISING_DATA , 2662 ad­‹r -> dev_id , Ën , 2663 & ý , NULL , NULL, NULL) > 0) 2664  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2666  `btd_”rÜ_çžed ( msg , "set‡dvertising data failed"); 2667 } } 2669  DBusMes§ge * $ad­‹r_Ë_£t_sÿn_·¿ms ( DBusCÚÃùiÚ * cÚn , 2670 DBusMes§ge * msg , * d©a ) 2672  btd_ad­‹r * ad­‹r = d©a ; 2673  mgmt_ý_Ë_£t_sÿn_·¿ms ý ; 2674 ušt32_t ty³ ; 2675 ušt32_t š‹rv® ; 2676 ušt32_t wšdow ; 2678 `DBG ("Set scan…arameters"); 2680 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 2681  `btd_”rÜ_nÙ_»ady ( msg ); 2683 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 2684 DBUS_TYPE_UINT32 , & ty³ , 2685 DBUS_TYPE_UINT32 , & š‹rv® , 2686 DBUS_TYPE_UINT32 , & wšdow , 2687 DBUS_TYPE_INVALID )) 2688  `btd_”rÜ_šv®id_¬gs ( msg ); 2690 `DBG ("scanype %x, interval %x, window %x", 2691 ty³ , š‹rv® , wšdow ); 2692 `mem£t (& ý , 0, (cp)); 2694 ý . ty³ =ype; 2695 ý . š‹rv® = interval; 2696 ý . wšdow = window; 2698 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_LE_SET_SCAN_PARAMS , 2699 ad­‹r -> dev_id , ( ý ), &cp, 2700 NULL , NULL, NULL) > 0) 2701  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2703  `btd_”rÜ_çžed ( msg , "set scan…arameters failed"); 2704 } } 2706  DBusMes§ge * $ad­‹r_£t_sÿn_r¥_d©a ( DBusCÚÃùiÚ * cÚn , 2707 DBusMes§ge * msg , * d©a ) 2709  btd_ad­‹r * ad­‹r = d©a ; 2710  mgmt_ý_£t_sÿn_r¥_d©a ý ; 2711 ušt8_t * v®ue ; 2712 št32_t Ën = 0; 2714 `DBG ("Set scan„esponse data"); 2716 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 2717  `btd_”rÜ_nÙ_»ady ( msg ); 2719 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 2720 DBUS_TYPE_ARRAY , DBUS_TYPE_BYTE , & v®ue , & Ën , 2721 DBUS_TYPE_INVALID )) 2722  `btd_”rÜ_šv®id_¬gs ( msg ); 2724 ià( Ën > SCAN_RESPONSE_DATA_LENGTH_MAX ) 2725  `btd_”rÜ_šv®id_¬gs ( msg ); 2727 `memýy (& ý , v®ue , Ën ); 2729 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_SET_SCAN_RSP_DATA , 2730 ad­‹r -> dev_id , Ën , & ý , 2731 NULL , NULL, NULL) > 0) 2732  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2734  `btd_”rÜ_çžed ( msg , "set scan„eponse data failed"); 2735 } } 2737  DBusMes§ge * $ad­‹r_add_deviû_wh™e_li¡ ( DBusCÚÃùiÚ * cÚn , 2738 DBusMes§ge * msg , * d©a ) 2740  btd_ad­‹r * ad­‹r = d©a ; 2741  mgmt_ý_add_dev_wh™e_li¡ ý ; 2742 cÚ¡ gch¬ * add»ss ; 2743 bdaddr_t bdaddr ; 2744 dbus_ušt32_t add»ss_ty³ ; 2746 `DBG ("Add device whie†ist"); 2747 ià( `dbus_mes§ge_g‘_¬gs ( msg , NULL , 2748 DBUS_TYPE_STRING , & add»ss , 2749 DBUS_TYPE_UINT32 , & add»ss_ty³ , 2750 DBUS_TYPE_INVALID è=ð FALSE ) 2751  `btd_”rÜ_šv®id_¬gs ( msg ); 2753 ià( `check_add»ss ( add»ss ) < 0) 2754  `btd_”rÜ_šv®id_¬gs ( msg ); 2756 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 2757  `btd_”rÜ_nÙ_»ady ( msg ); 2759 `DBG ("add¸%s,y³ %d", add»ss , add»ss_ty³ ); 2760 `¡r2ba ( add»ss , & bdaddr ); 2762 `mem£t (& ý , 0, (cp)); 2764 ý . bdaddr_ty³ = add»ss_ty³ ; 2765 `memýy (& ý . bdaddr , &bdaddr, ( bdaddr_t )); 2767 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_ADD_DEV_WHITE_LIST , 2768 ad­‹r -> dev_id , ( ý ), &cp, 2769 NULL , NULL, NULL) > 0) 2770  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2772  `btd_”rÜ_çžed ( msg , "add device white†ist failed"); 2773 } } 2775  DBusMes§ge * $ad­‹r_»move_deviû_wh™e_li¡ ( DBusCÚÃùiÚ * cÚn , 2776 DBusMes§ge * msg , * d©a ) 2778  btd_ad­‹r * ad­‹r = d©a ; 2779  mgmt_ý_»move_dev_wh™e_li¡ ý ; 2780 cÚ¡ gch¬ * add»ss ; 2781 bdaddr_t bdaddr ; 2782 dbus_ušt32_t add»ss_ty³ ; 2784 `DBG ("Remove device whie†ist"); 2786 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 2787  `btd_”rÜ_nÙ_»ady ( msg ); 2789 ià( `dbus_mes§ge_g‘_¬gs ( msg , NULL , 2790 DBUS_TYPE_STRING , & add»ss , 2791 DBUS_TYPE_UINT32 , & add»ss_ty³ , 2792 DBUS_TYPE_INVALID è=ð FALSE ) 2793  `btd_”rÜ_šv®id_¬gs ( msg ); 2795 ià( `check_add»ss ( add»ss ) < 0) 2796  `btd_”rÜ_šv®id_¬gs ( msg ); 2798 `DBG ("add¸%s,y³ %d", add»ss , add»ss_ty³ ); 2799 `¡r2ba ( add»ss , & bdaddr ); 2801 `mem£t (& ý , 0, (cp)); 2803 ý . bdaddr_ty³ = add»ss_ty³ ; 2804 `memýy (& ý . bdaddr , &bdaddr, ( bdaddr_t )); 2806 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_REMOVE_DEV_FROM_WHITE_LIST , 2807 ad­‹r -> dev_id , ( ý ), &cp, 2808 NULL , NULL, NULL) > 0) 2809  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2811  `btd_”rÜ_çžed ( msg , "remove device white†ist failed"); 2812 } } 2814  DBusMes§ge * $ad­‹r_þ—r_deviû_wh™e_li¡ ( DBusCÚÃùiÚ * cÚn , 2815 DBusMes§ge * msg , * d©a ) 2817  btd_ad­‹r * ad­‹r = d©a ; 2819 `DBG ("Clear device whie†ist"); 2821 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 2822  `btd_”rÜ_nÙ_»ady ( msg ); 2824 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_CLEAR_DEV_WHITE_LIST , 2825 ad­‹r -> dev_id , 0, NULL , 2826 NULL , NULL, NULL) > 0) 2827  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2829  `btd_”rÜ_çžed ( msg , "clear white†ist failed"); 2830 } } 2832  DBusMes§ge * $ad­‹r_£t_Ë_´ivacy ( DBusCÚÃùiÚ * cÚn , 2833 DBusMes§ge * msg , * d©a ) 2835  btd_ad­‹r * ad­‹r = d©a ; 2836 dbus_boÞ_t ”r ; 2837 dbus_boÞ_t ’abË_´ivacy = FALSE ; 2839 ià(!( ad­‹r -> suµÜ‹d_£‰šgs & MGMT_SETTING_PRIVACY )) 2840  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 2842 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_BOOLEAN , 2843 & ’abË_´ivacy , DBUS_TYPE_INVALID )) 2844  `btd_”rÜ_šv®id_¬gs ( msg ); 2846 ià( ’abË_´ivacy ) { 2847 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_PRIVACY ) 2848  `btd_”rÜ_®»ady_exi¡s ( msg ); 2850 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_PRIVACY )) 2851  `btd_”rÜ_®»ady_exi¡s ( msg ); 2854 ”r = `£t_´ivacy ( ad­‹r , ’abË_´ivacy ); 2856 ià(! ”r ) 2857  `btd_”rÜ_çžed ( msg , "Set Le Privacy failed"); 2859  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2860 } } 2862  $»ad_£c_cÚn_ho¡_suµÜt_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 2863 cÚ¡ * ·¿m , * u£r_d©a ) 2865 cÚ¡  mgmt_½_»ad_£c_cÚn_ho¡_suµÜt * ½ = ·¿m ; 2866  btd_ad­‹r * ad­‹r = u£r_d©a ; 2868 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 2869 `”rÜ ("Failedo„ead secure conn…arameter: %s (0x%02x)", 2870 `mgmt_”r¡r ( ¡©us ), status); 2874 ià( Ëngth < (* ½ )) { 2875 `”rÜ ("Wrong size of„ead secure connections host support"); 2879 ià( ½ -> £c_cÚn_ho¡_suµÜt ) 2880 ad­‹r -> £cu»_cÚÃùiÚ = TRUE ; 2882 ad­‹r -> £cu»_cÚÃùiÚ = FALSE ; 2884 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 2885 ADAPTER_INTERFACE , "SecureConnection"); 2886 } } 2888  DBusMes§ge * $»ad_£c_cÚn_ho¡_suµÜt ( DBusCÚÃùiÚ * cÚn , 2889 DBusMes§ge * msg , * u£r_d©a ) 2891  btd_ad­‹r * ad­‹r = u£r_d©a ; 2893 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_READ_SEC_CONN_HOST_SUPPORT , 2894 ad­‹r -> dev_id , 0, NULL , 2895 »ad_£c_cÚn_ho¡_suµÜt_com¶‘e , ad­‹r , NULL ); 2897  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2898 } } 2900  $wr™e_£c_cÚn_ho¡_suµÜt_com¶‘e ( ušt8_t ¡©us , 2901 ušt16_t Ëngth , cÚ¡ * ·¿m , * u£r_d©a ) 2903 cÚ¡  mgmt_½_wr™e_£c_cÚn_ho¡_suµÜt * ½ = ·¿m ; 2904 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 2905 `”rÜ ("Failedo write secure connections host \ …arameter: %s (0x%02x)", 2907 `mgmt_”r¡r ( ¡©us ), status); 2911 ià( Ëngth < (* ½ )) { 2912 `”rÜ ("Wrong size of write secure connections host\ …arameter"); 2916 } } 2918  DBusMes§ge * $wr™e_£c_cÚn_ho¡_suµÜt ( DBusCÚÃùiÚ * cÚn , 2919 DBusMes§ge * msg , * u£r_d©a ) 2922  mgmt_ý_wr™e_£c_cÚn_ho¡_suµÜt ý ; 2923 dbus_boÞ_t ’abË = FALSE ; 2924  btd_ad­‹r * ad­‹r = u£r_d©a ; 2926 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_BOOLEAN , 2927 & ’abË , DBUS_TYPE_INVALID )) 2928  `btd_”rÜ_šv®id_¬gs ( msg ); 2930 `mem£t (& ý , 0, (cp)); 2931 ý . £cu»_cÚÃùiÚ_ho¡_suµÜt = ’abË ; 2932 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_WRITE_SEC_CONN_HOST_SUPPORT , 2933 ad­‹r -> dev_id , ( ý ), &cp, 2934 wr™e_£c_cÚn_ho¡_suµÜt_com¶‘e , 2935 NULL , NULL); 2936  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2937 } } 2939  DBusMes§ge * $ad­‹r_’abË_rssi ( DBusCÚÃùiÚ * cÚn , 2940 DBusMes§ge * msg , * d©a ) 2942  btd_ad­‹r * ad­‹r = d©a ; 2943  mgmt_ý_£t_’abË_rssi ý ; 2944  mgmt_ý_di§bË_rssi ý_dis ; 2945 bdaddr_t bt_addr = { { 0, } }; 2946 cÚ¡ gch¬ * add»ss = NULL ; 2948 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 2949 dbus_št32_t lšk_ty³ ; 2950 dbus_št32_t low_th»shÞd ; 2951 dbus_št32_t š_¿nge_th»shÞd ; 2952 dbus_št32_t high_th»shÞd ; 2954 `DBG ("Enable RSSI called"); 2955 `DBG ("£nd” %s", £nd” ); 2956 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 2957  `btd_”rÜ_nÙ_»ady ( msg ); 2959 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 2960 DBUS_TYPE_STRING , & add»ss , 2961 DBUS_TYPE_INT32 , & lšk_ty³ , 2962 DBUS_TYPE_INT32 , & low_th»shÞd , 2963 DBUS_TYPE_INT32 , & š_¿nge_th»shÞd , 2964 DBUS_TYPE_INT32 , & high_th»shÞd , 2965 DBUS_TYPE_INVALID )) 2966  `btd_”rÜ_šv®id_¬gs ( msg ); 2968 `DBG ("EÇbË RSSI: [% %d %d %d %d]", add»ss , lšk_ty³ , 2969 low_th»shÞd , š_¿nge_th»shÞd , high_th»shÞd ); 2971 `DBG ("BT‡dd»s [%s]", add»ss ); 2972 `mem£t (& bt_addr , 0, ( bdaddr_t )); 2973 `¡r2ba ( add»ss , & bt_addr ); 2974 `mem£t (& ý , 0, ( mgmt_ý_£t_’abË_rssi )); 2975 `mem£t (& ý_dis , 0, ( mgmt_ý_di§bË_rssi )); 2977 ià( `check_add»ss ( add»ss ) < 0) 2978  `btd_”rÜ_šv®id_¬gs ( msg ); 2983 ià( low_th»shÞd =ð0 && š_¿nge_th»shÞd =ð0 && high_th»shÞd == 0) { 2984 ý_dis . bdaddr = bt_addr ; 2985 ý_dis . lšk_ty³ =†ink_type; 2986 `DBG ("Disable Request"); 2987 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_SET_RSSI_DISABLE , 2988 ad­‹r -> dev_id , ( ý_dis ), &cp_dis, 2989 NULL , NULL, NULL) > 0) 2990  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2992 ý . low_th = low_th»shÞd ; 2993 ý . š_¿nge_th = š_¿nge_th»shÞd ; 2994 ý . high_th = high_th»shÞd ; 2995 ý . bdaddr = bt_addr ; 2996 ý . lšk_ty³ =†ink_type; 2997 `DBG ("Enable Request"); 2998 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_SET_RSSI_ENABLE , 2999 ad­‹r -> dev_id , ( ý ), &cp, 3000 NULL , NULL, NULL) > 0) 3001  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 3003  `btd_”rÜ_çžed ( msg , "Enable/Disable RSSI Failed"); 3004 } } 3006  DBusMes§ge * $ad­‹r_g‘_rssi ( DBusCÚÃùiÚ * cÚn , 3007 DBusMes§ge * msg , * d©a ) 3009  btd_ad­‹r * ad­‹r = d©a ; 3010  mgmt_ý_g‘_¿w_rssi ý ; 3011 bdaddr_t bt_addr ; 3012 cÚ¡ gch¬ * add»ss = NULL ; 3013 dbus_št32_t lšk_ty³ ; 3014 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 3016 `DBG ("Get RSSI called"); 3017 `DBG ("£nd” %s", £nd” ); 3018 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 3019  `btd_”rÜ_nÙ_»ady ( msg ); 3021 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 3022 DBUS_TYPE_STRING , & add»ss , 3023 DBUS_TYPE_INT32 , & lšk_ty³ , 3024 DBUS_TYPE_INVALID )) 3025  `btd_”rÜ_šv®id_¬gs ( msg ); 3027 `DBG ("BT‡dd»s [%s]†šky³ [%d]", add»ss , lšk_ty³ ); 3028 `mem£t (& bt_addr , 0, ( bdaddr_t )); 3029 `¡r2ba ( add»ss , & bt_addr ); 3030 `mem£t (& ý , 0, ( mgmt_ý_g‘_¿w_rssi )); 3032 ià( `check_add»ss ( add»ss ) < 0) 3033  `btd_”rÜ_šv®id_¬gs ( msg ); 3038 `memýy (&( ý . bt_add»ss ), & bt_addr , ( bdaddr_t )); 3039 ý . lšk_ty³ =†ink_type; 3040 `DBG ("RAW RSSI Request"); 3041 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_GET_RAW_RSSI , 3042 ad­‹r -> dev_id , ( ý ), &cp, 3043 NULL , NULL, NULL) > 0) 3044  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 3046  `btd_”rÜ_çžed ( msg , "Get Raw RSSI Failed"); 3047 } } 3049 #ifdeà __BROADCOM_PATCH__ 3050  DBusMes§ge * $£t_wbs_·¿m‘”s ( DBusCÚÃùiÚ * cÚn , 3051 DBusMes§ge * msg , * d©a ) 3053  btd_ad­‹r * ad­‹r = d©a ; 3054 cÚ¡ gch¬ * rÞe = NULL ; 3055 cÚ¡ gch¬ * add»ss = NULL ; 3056  mgmt_ý_£t_voiû_£‰šg ý ; 3057 bdaddr_t bt_addr = { { 0, } }; 3059 `DBG ("+"); 3061 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 3062 DBUS_TYPE_STRING , & rÞe , 3063 DBUS_TYPE_STRING , & add»ss , 3064 DBUS_TYPE_INVALID )) { 3065  `btd_”rÜ_šv®id_¬gs ( msg ); 3068 `DBG ("RÞð%s", rÞe ); 3069 `DBG ("Add»s ð%s", add»ss ); 3071 `mem£t (& ý , 0, (cp)); 3073 ý . voiû_£‰šg = BT_VOICE_TRANSPARENT | BT_VOICE_CVSD_16BIT ; 3075 ià( `g_¡rcmp0 ( rÞe , "Handsfree") == 0) 3076 ý . sco_rÞe = MGMT_SCO_ROLE_HANDSFREE ; 3077 ià( `g_¡rcmp0 ( rÞe , "Gateway") == 0) 3078 ý . sco_rÞe = MGMT_SCO_ROLE_AUDIO_GATEWAY ; 3080 `¡r2ba ( add»ss , & bt_addr ); 3081 `memýy (&( ý . bdaddr ), & bt_addr , ( bdaddr_t )); 3083 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_SET_VOICE_SETTING , 3084 ad­‹r -> dev_id , ( ý ), &cp, 3085 NULL , NULL, NULL) == 0) 3086 `”rÜ ("mgmt_send failed for voice setting"); 3088 `DBG ("-"); 3089  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 3090 } } 3092  DBusMes§ge * $£t_nb_·¿m‘”s ( DBusCÚÃùiÚ * cÚn , 3093 DBusMes§ge * msg , * d©a ) 3095  btd_ad­‹r * ad­‹r = d©a ; 3096 cÚ¡ gch¬ * rÞe ; 3097 cÚ¡ gch¬ * add»ss = NULL ; 3098  mgmt_ý_£t_voiû_£‰šg ý ; 3099 bdaddr_t bt_addr = { { 0, } }; 3101 `DBG ("+"); 3103 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 3104 DBUS_TYPE_STRING , & rÞe , 3105 DBUS_TYPE_STRING , & add»ss , 3106 DBUS_TYPE_INVALID )) { 3107  `btd_”rÜ_šv®id_¬gs ( msg ); 3110 `DBG ("RÞð%s", rÞe ); 3111 `DBG ("Add»s ð%s", add»ss ); 3113 `mem£t (& ý , 0, (cp)); 3115 ý . voiû_£‰šg = BT_VOICE_CVSD_16BIT ; 3117 ià( `g_¡rcmp0 ( rÞe , "Handsfree") == 0) 3118 ý . sco_rÞe = MGMT_SCO_ROLE_HANDSFREE ; 3119 ià( `g_¡rcmp0 ( rÞe , "Gateway") == 0) 3120 ý . sco_rÞe = MGMT_SCO_ROLE_AUDIO_GATEWAY ; 3122 `¡r2ba ( add»ss , & bt_addr ); 3123 `memýy (&( ý . bdaddr ), & bt_addr , ( bdaddr_t )); 3125 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_SET_VOICE_SETTING , 3126 ad­‹r -> dev_id , ( ý ), &cp, 3127 NULL , NULL, NULL) == 0) 3128 `”rÜ ("mgmt_send failed for voice setting"); 3130 `DBG ("-"); 3132  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 3133 } } 3134  DBusMes§ge * $ad­‹r_£t_mªuçùu»r_d©a ( DBusCÚÃùiÚ * cÚn , 3135 DBusMes§ge * msg , * d©a ) 3137  btd_ad­‹r * ad­‹r = d©a ; 3138  mgmt_ý_£t_mªuçùu»r_d©a ý ; 3139 ušt8_t * v®ue ; 3140 št32_t Ën = 0; 3142 `DBG ("Set manufacturer data"); 3144 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 3145  `btd_”rÜ_nÙ_»ady ( msg ); 3147 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 3148 DBUS_TYPE_ARRAY , DBUS_TYPE_BYTE , & v®ue , & Ën , 3149 DBUS_TYPE_INVALID )) 3150  `btd_”rÜ_šv®id_¬gs ( msg ); 3152 ià( Ën > MANUFACTURER_DATA_LENGTH_MAX ) 3153  `btd_”rÜ_šv®id_¬gs ( msg ); 3155 `memýy (& ý , v®ue , Ën ); 3157 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_SET_MANUFACTURER_DATA , 3158 ad­‹r -> dev_id , MANUFACTURER_DATA_LENGTH_MAX , 3159 & ý , NULL , NULL, NULL) > 0) 3160  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 3162  `btd_”rÜ_çžed ( msg , "Set manufacturer data failed"); 3163 } } 3167  DBusMes§ge * $¡Ý_discov”y ( DBusCÚÃùiÚ * cÚn , 3168 DBusMes§ge * msg , * u£r_d©a ) 3170  btd_ad­‹r * ad­‹r = u£r_d©a ; 3171 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 3172  mgmt_ý_¡Ý_discov”y ý ; 3173  w©ch_þ›Á * þ›Á ; 3174 GSLi¡ * li¡ ; 3176 `DBG ("£nd” %s", £nd” ); 3178 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 3179  `btd_”rÜ_nÙ_»ady ( msg ); 3181 li¡ = `g_¦i¡_fšd_cu¡om ( ad­‹r -> discov”y_li¡ , £nd” , 3182 com·»_£nd” ); 3183 ià(! li¡ ) 3184  `btd_”rÜ_çžed ( msg , "No discovery started"); 3186 þ›Á = li¡ -> d©a ; 3188 #ifdeà __TIZEN_PATCH__ 3189 ad­‹r -> disc_ty³ = BT_DISC_TYPE_BREDR_ONLY ; 3191 ý . ty³ = ad­‹r -> discov”y_ty³ ; 3197 `g_dbus_»move_w©ch ( dbus_cÚn , þ›Á -> w©ch ); 3203 ià( ad­‹r -> discov”y_li¡ ) 3204  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 3210 ià( ad­‹r -> discov”y_’abË == 0x00) { 3211 ad­‹r -> discov”šg = çl£ ; 3212 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 3213 ADAPTER_INTERFACE , "Discovering"); 3215 `Œigg”_·ssive_sÿšg ( ad­‹r ); 3217  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 3219 #ifdeà __TIZEN_PATCH__ 3220 ý . ty³ = 0x01; 3222 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_STOP_DISCOVERY , 3223 ad­‹r -> dev_id , ( ý ), &cp, 3224 ¡Ý_discov”y_com¶‘e , ad­‹r , NULL ); 3226  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 3227 } } 3229  gboÞ—n $´Ý”ty_g‘_add»ss (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3230 DBusMes§geI‹r * ™” , * u£r_d©a ) 3232  btd_ad­‹r * ad­‹r = u£r_d©a ; 3233  addr [18]; 3234 cÚ¡ * ¡r = addr ; 3236 `ba2¡r (& ad­‹r -> bdaddr , addr ); 3238 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¡r ); 3240  TRUE ; 3241 } } 3243  gboÞ—n $´Ý”ty_g‘_Çme (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3244 DBusMes§geI‹r * ™” , * u£r_d©a ) 3246  btd_ad­‹r * ad­‹r = u£r_d©a ; 3247 cÚ¡ * ¡r = ad­‹r -> sy¡em_Çme ? : ""; 3249 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¡r ); 3251  TRUE ; 3252 } } 3254  gboÞ—n $´Ý”ty_g‘_®Ÿs (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3255 DBusMes§geI‹r * ™” , * u£r_d©a ) 3257  btd_ad­‹r * ad­‹r = u£r_d©a ; 3258 cÚ¡ * ¡r ; 3260 ià( ad­‹r -> cu¼’t_®Ÿs ) 3261 ¡r = ad­‹r -> cu¼’t_®Ÿs ; 3262 ià( ad­‹r -> ¡Üed_®Ÿs ) 3263 ¡r = ad­‹r -> ¡Üed_®Ÿs ; 3265 ¡r = ad­‹r -> sy¡em_Çme ? : ""; 3267 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¡r ); 3269  TRUE ; 3270 } } 3272  $´Ý”ty_£t_®Ÿs (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3273 DBusMes§geI‹r * ™” , 3274 GDBusP’dšgPrÝ”tyS‘ id , * u£r_d©a ) 3276  btd_ad­‹r * ad­‹r = u£r_d©a ; 3277 cÚ¡ * Çme ; 3278  »t ; 3280 `dbus_mes§ge_™”_g‘_basic ( ™” , & Çme ); 3282 ià( `g_¡r_equ® ( Çme , ""è=ð TRUE ) { 3283 ià( ad­‹r -> ¡Üed_®Ÿs =ð NULL ) { 3285 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 3290 »t = `£t_Çme ( ad­‹r ,‡d­‹r-> sy¡em_Çme ); 3292 ià( `g_¡rcmp0 ( ad­‹r -> ¡Üed_®Ÿs , Çme ) == 0) { 3294 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 3299 »t = `£t_Çme ( ad­‹r , Çme ); 3302 ià( »t >= 0) { 3303 `g_ä“ ( ad­‹r -> ¡Üed_®Ÿs ); 3305 ià( `g_¡r_equ® ( Çme , ""è=ð TRUE ) 3306 ad­‹r -> ¡Üed_®Ÿs = NULL ; 3308 ad­‹r -> ¡Üed_®Ÿs = `g_¡rdup ( Çme ); 3310 `¡Üe_ad­‹r_šfo ( ad­‹r ); 3312 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 3316 ià( »t =ð- EINVAL ) 3317 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 3318 ERROR_INTERFACE ".InvalidArguments", 3321 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , ERROR_INTERFACE ".Failed", 3322 `¡»¼Ü (- »t )); 3323 } } 3325  gboÞ—n $´Ý”ty_g‘_þass (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3326 DBusMes§geI‹r * ™” , * u£r_d©a ) 3328  btd_ad­‹r * ad­‹r = u£r_d©a ; 3329 dbus_ušt32_t v® = ad­‹r -> dev_þass ; 3331 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT32 , & v® ); 3333  TRUE ; 3334 } } 3336  gboÞ—n $´Ý”ty_g‘_mode ( btd_ad­‹r * ad­‹r , 3337 ušt32_t £‰šg , DBusMes§geI‹r * ™” ) 3339 dbus_boÞ_t ’abË ; 3341 ’abË = ( ad­‹r -> cu¼’t_£‰šgs & £‰šg è? TRUE : FALSE ; 3343 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & ’abË ); 3345  TRUE ; 3346 } } 3348  s´Ý”ty_£t_d©a { 3349  btd_ad­‹r * mad­‹r ; 3350 GDBusP’dšgPrÝ”tyS‘ mid ; 3353  $´Ý”ty_£t_mode_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 3354 cÚ¡ * ·¿m , * u£r_d©a ) 3356  ´Ý”ty_£t_d©a * d©a = u£r_d©a ; 3357  btd_ad­‹r * ad­‹r = d©a ->adapter; 3359 `DBG ("% (0x%02x)", `mgmt_”r¡r ( ¡©us ), status); 3361 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 3362 cÚ¡ * dbus_”r ; 3364 `”rÜ ("Failedo set mode: %s (0x%02x)", 3365 `mgmt_”r¡r ( ¡©us ), status); 3367 ià( ¡©us =ð MGMT_STATUS_RFKILLED ) 3368 dbus_”r = ERROR_INTERFACE ".Blocked"; 3370 dbus_”r = ERROR_INTERFACE ".Failed"; 3372 `g_dbus_³ndšg_´Ý”ty_”rÜ ( d©a -> id , dbus_”r , 3373 `mgmt_”r¡r ( ¡©us )); 3377 `g_dbus_³ndšg_´Ý”ty_sucûss ( d©a -> id ); 3384 `Ãw_£‰šgs_ÿÎback ( ad­‹r -> dev_id , Ëngth , ·¿m ,‡dapter); 3385 } } 3387  $´Ý”ty_£t_mode ( btd_ad­‹r * ad­‹r , ušt32_t £‰šg , 3388 DBusMes§geI‹r * v®ue , 3389 GDBusP’dšgPrÝ”tyS‘ id ) 3391  ´Ý”ty_£t_d©a * d©a ; 3392  mgmt_ý_£t_discov”abË ý ; 3393 * ·¿m ; 3394 dbus_boÞ_t ’abË , cu¼’t_’abË ; 3395 ušt16_t Ýcode , Ën ; 3396 ušt8_t mode ; 3398 `dbus_mes§ge_™”_g‘_basic ( v®ue , & ’abË ); 3400 ià( ad­‹r -> cu¼’t_£‰šgs & £‰šg ) 3401 cu¼’t_’abË = TRUE ; 3403 cu¼’t_’abË = FALSE ; 3405 ià( ’abË =ð cu¼’t_’abË ) { 3406 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 3410 mode = ( ’abË =ð TRUE ) ? 0x01 : 0x00; 3412  £‰šg ) { 3413  MGMT_SETTING_POWERED : 3414 Ýcode = MGMT_OP_SET_POWERED ; 3415 ·¿m = & mode ; 3416 Ën = ( mode ); 3418  MGMT_SETTING_DISCOVERABLE : 3419 #iâdeà __TIZEN_PATCH__ 3420 ià( k”Ãl_cÚn_cÚŒÞ ) { 3421 ià( mode ) { 3422 `£t_mode ( ad­‹r , MGMT_OP_SET_CONNECTABLE , 3423 mode ); 3425 Ýcode = MGMT_OP_SET_CONNECTABLE ; 3426 ·¿m = & mode ; 3427 Ën = ( mode ); 3433 `mem£t (& ý , 0, (cp)); 3434 ý . v® = mode ; 3435 ià( ý . v® ) 3436 ý . timeout = `htobs ( ad­‹r -> discov”abË_timeout ); 3438 Ýcode = MGMT_OP_SET_DISCOVERABLE ; 3439 ·¿m = & ý ; 3440 Ën = ( ý ); 3442  MGMT_SETTING_BONDABLE : 3443 Ýcode = MGMT_OP_SET_BONDABLE ; 3444 ·¿m = & mode ; 3445 Ën = ( mode ); 3447 #ifdeà __TIZEN_PATCH__ 3448  MGMT_SETTING_CONNECTABLE : 3449 Ýcode = MGMT_OP_SET_CONNECTABLE ; 3450 ·¿m = & mode ; 3451 Ën = ( mode ); 3455  çžed ; 3458 `DBG ("£ndšg % commªd fÜ index %u", `mgmt_Ý¡r ( Ýcode ), 3459 ad­‹r -> dev_id ); 3461 d©a = `g_Œy_Ãw0 ( ´Ý”ty_£t_d©a , 1); 3462 ià(! d©a ) 3463  çžed ; 3465 d©a -> ad­‹r =‡dapter; 3466 d©a -> id = id; 3468 #ifdeà __TIZEN_PATCH__ 3472 ià( `mgmt_»¶y ( ad­‹r -> mgmt , Ýcode ,‡d­‹r-> dev_id , Ën , ·¿m , 3473 ´Ý”ty_£t_mode_com¶‘e , d©a , g_ä“ ) > 0) 3475 ià( `mgmt_£nd ( ad­‹r -> mgmt , Ýcode ,‡d­‹r-> dev_id , Ën , ·¿m , 3476 ´Ý”ty_£t_mode_com¶‘e , d©a , g_ä“ ) > 0) 3480 `g_ä“ ( d©a ); 3482 çžed : 3483 `”rÜ ("FažedØ£ˆmodfÜ index %u", ad­‹r -> dev_id ); 3485 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , ERROR_INTERFACE ".Fažed", NULL ); 3486 } } 3488  gboÞ—n $´Ý”ty_g‘_pow”ed (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3489 DBusMes§geI‹r * ™” , * u£r_d©a ) 3491  btd_ad­‹r * ad­‹r = u£r_d©a ; 3493  `´Ý”ty_g‘_mode ( ad­‹r , MGMT_SETTING_POWERED , ™” ); 3494 } } 3496  $´Ý”ty_£t_pow”ed (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3497 DBusMes§geI‹r * ™” , 3498 GDBusP’dšgPrÝ”tyS‘ id , * u£r_d©a ) 3500  btd_ad­‹r * ad­‹r = u£r_d©a ; 3502 ià( pow”šg_down ) { 3503 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , ERROR_INTERFACE ".Failed", 3508 `´Ý”ty_£t_mode ( ad­‹r , MGMT_SETTING_POWERED , ™” , id ); 3509 } } 3511  gboÞ—n $´Ý”ty_g‘_discov”abË (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3512 DBusMes§geI‹r * ™” , * u£r_d©a ) 3514  btd_ad­‹r * ad­‹r = u£r_d©a ; 3516  `´Ý”ty_g‘_mode ( ad­‹r , MGMT_SETTING_DISCOVERABLE , ™” ); 3517 } } 3519  $´Ý”ty_£t_discov”abË (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3520 DBusMes§geI‹r * ™” , 3521 GDBusP’dšgPrÝ”tyS‘ id , * u£r_d©a ) 3523  btd_ad­‹r * ad­‹r = u£r_d©a ; 3525 ià( ad­‹r -> discov”abË_timeout > 0 && 3526 !( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) { 3527 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , ERROR_INTERFACE ".Failed", 3532 `´Ý”ty_£t_mode ( ad­‹r , MGMT_SETTING_DISCOVERABLE , ™” , id ); 3533 } } 3535  gboÞ—n $´Ý”ty_g‘_discov”abË_timeout ( 3536 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3537 DBusMes§geI‹r * ™” , * u£r_d©a ) 3539  btd_ad­‹r * ad­‹r = u£r_d©a ; 3540 dbus_ušt32_t v®ue = ad­‹r -> discov”abË_timeout ; 3542 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT32 , & v®ue ); 3544  TRUE ; 3545 } } 3547  $´Ý”ty_£t_discov”abË_timeout ( 3548 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3549 DBusMes§geI‹r * ™” , 3550 GDBusP’dšgPrÝ”tyS‘ id , * u£r_d©a ) 3552  btd_ad­‹r * ad­‹r = u£r_d©a ; 3553 dbus_ušt32_t v®ue ; 3555 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 3557 ad­‹r -> discov”abË_timeout = v®ue ; 3559 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 3561 `¡Üe_ad­‹r_šfo ( ad­‹r ); 3563 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 3564 ADAPTER_INTERFACE , "DiscoverableTimeout"); 3567 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_DISCOVERABLE ) 3568 `£t_discov”abË ( ad­‹r , 0x01,‡d­‹r-> discov”abË_timeout ); 3569 } } 3571  gboÞ—n $´Ý”ty_g‘_·œabË (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3572 DBusMes§geI‹r * ™” , * u£r_d©a ) 3574  btd_ad­‹r * ad­‹r = u£r_d©a ; 3576  `´Ý”ty_g‘_mode ( ad­‹r , MGMT_SETTING_BONDABLE , ™” ); 3577 } } 3579  $´Ý”ty_£t_·œabË (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3580 DBusMes§geI‹r * ™” , 3581 GDBusP’dšgPrÝ”tyS‘ id , * u£r_d©a ) 3583  btd_ad­‹r * ad­‹r = u£r_d©a ; 3585 `´Ý”ty_£t_mode ( ad­‹r , MGMT_SETTING_BONDABLE , ™” , id ); 3586 } } 3588  gboÞ—n $´Ý”ty_g‘_·œabË_timeout ( 3589 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3590 DBusMes§geI‹r * ™” , * u£r_d©a ) 3592  btd_ad­‹r * ad­‹r = u£r_d©a ; 3593 dbus_ušt32_t v®ue = ad­‹r -> ·œabË_timeout ; 3595 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT32 , & v®ue ); 3597  TRUE ; 3598 } } 3600  $´Ý”ty_£t_·œabË_timeout (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3601 DBusMes§geI‹r * ™” , 3602 GDBusP’dšgPrÝ”tyS‘ id , * u£r_d©a ) 3604  btd_ad­‹r * ad­‹r = u£r_d©a ; 3605 dbus_ušt32_t v®ue ; 3607 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 3609 ad­‹r -> ·œabË_timeout = v®ue ; 3611 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 3613 `¡Üe_ad­‹r_šfo ( ad­‹r ); 3615 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 3616 ADAPTER_INTERFACE , "PairableTimeout"); 3618 `Œigg”_·œabË_timeout ( ad­‹r ); 3619 } } 3621  gboÞ—n $´Ý”ty_g‘_discov”šg (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3622 DBusMes§geI‹r * ™” , * u£r_d©a ) 3624  btd_ad­‹r * ad­‹r = u£r_d©a ; 3625 dbus_boÞ_t discov”šg = ad­‹r ->discovering; 3627 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & discov”šg ); 3629  TRUE ; 3630 } } 3632 #ifdeà __TIZEN_PATCH__ 3633 #ifdeà BLUEZ5_GATT_CLIENT 3634  $´št_£rviûs ( þ›Á * þi ) 3636 `DBG ("+"); 3637  bt_g©t_£rviû_™” ™”_¤v ; 3638 cÚ¡ bt_g©t_£rviû_t * £rviû ; 3639  bt_g©t_ch¬aù”i¡ic_™” ™”_chr ; 3640 cÚ¡ bt_g©t_ch¬aù”i¡ic_t * chrc ; 3642 ià(! `bt_g©t_£rviû_™”_š™ (& ™”_¤v , þi -> g©t )) { 3643 `DBG ("Failedo initialize service iterator"); 3647  `bt_g©t_£rviû_™”_Ãxt (& ™”_¤v , & £rviû )) { 3648 ià(! `bt_g©t_ch¬aù”i¡ic_™”_š™ (& ™”_chr , £rviû )) { 3649 `DBG ("Failedo initialize characteristic iterator"); 3652 `DBG ("service - start: 0x%04x,ƒnd: 0x%04x", 3653 £rviû -> ¡¬t_hªdË , s”viû-> ’d_hªdË ); 3655  `bt_g©t_ch¬aù”i¡ic_™”_Ãxt (& ™”_chr , & chrc )) { 3656 `DBG ("characterustuc - start: 0x%04x,ƒnd: 0x%04x, value: 0x%04x,…rops: 0x%02x", 3657 chrc -> ¡¬t_hªdË , chrc-> ’d_hªdË , chrc-> v®ue_hªdË , chrc-> ´Ý”t›s ); 3660 } } 3662  $g©t_discov”_£rviûs_cb ( boÞ sucûss , ušt8_t ©t_ecode , * u£r_d©a ) 3664  btd_ad­‹r * ad­‹r = u£r_d©a ; 3665  þ›Á * þi = ad­‹r -> g©t_þ›Á ; 3667 `DBG ("LE Discover services\n"); 3669 `´št_£rviûs ( þi ); 3670 } } 3672  $g©t_cÚÃùed_cb ( boÞ sucûss , ušt8_t ©t_ecode , * u£r_d©a ) 3674  btd_deviû * deviû = u£r_d©a ; 3675  þ›Á * þi ; 3676  btd_ad­‹r * ad­‹r ; 3678 ià(! deviû ) { 3679 `DBG ("Unableo get device object"); 3682 ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 3683 þi = ad­‹r -> g©t_þ›Á ; 3685 ià(! sucûss ) { 3686 `DBG ("GATT discovery…rocedures failed -ƒrror code: 0x%02x\n", 3687 ©t_ecode ); 3691 `deviû_£t_g©t_cÚÃùed ( deviû , TRUE ); 3692 `DBG ("LE Device connected\n"); 3694 `´št_£rviûs ( þi ); 3696 `fæush ( ¡dout ); 3697 } } 3699  $g©t_discÚÃùed_cb (* u£r_d©a ) 3701  btd_deviû * deviû = u£r_d©a ; 3703 ià(! deviû ) { 3704 `DBG ("Unableo get device object"); 3708 `deviû_£t_g©t_cÚÃùed ( deviû , FALSE ); 3709 `DBG ("LE Device disconnected\n"); 3710 } } 3712  $Ë_©t_cÚÃù ( bdaddr_t * ¤c , bdaddr_ˆ* d¡ , ušt8_t d¡_ty³ , 3713  £c ) 3715 `DBG ("+"); 3716  sock ; 3717  sockaddr_l2 ¤ÿddr , d¡addr ; 3718  bt_£cur™y bt£c ; 3720 sock = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_L2CAP ); 3721 ià( sock < 0) { 3722 `”rÜ ("Failedo create L2CAP socket"); 3727 `mem£t (& ¤ÿddr , 0, (srcaddr)); 3728 ¤ÿddr . l2_çmžy = AF_BLUETOOTH ; 3729 ¤ÿddr . l2_cid = `htobs ( ATT_CID ); 3730 ¤ÿddr . l2_bdaddr_ty³ = 0; 3731 `baýy (& ¤ÿddr . l2_bdaddr , ¤c ); 3733 ià( `bšd ( sock , ( sockaddr *)& ¤ÿddr , (srcaddr)) < 0) { 3734 `”rÜ ("Failedo bind L2CAP socket"); 3735 `þo£ ( sock ); 3740 `mem£t (& bt£c , 0, (btsec)); 3741 bt£c . Ëv– = £c ; 3742 ià( `£tsockÝt ( sock , SOL_BLUETOOTH , BT_SECURITY , & bt£c , 3743 ( bt£c )) != 0) { 3744 `”rÜ ("Failedo set L2CAP security†evel\n"); 3745 `þo£ ( sock ); 3750 `mem£t (& d¡addr , 0, (dstaddr)); 3751 d¡addr . l2_çmžy = AF_BLUETOOTH ; 3752 d¡addr . l2_cid = `htobs ( ATT_CID ); 3753 d¡addr . l2_bdaddr_ty³ = d¡_ty³ ; 3754 `baýy (& d¡addr . l2_bdaddr , d¡ ); 3756 `DBG ("Connectingo device..."); 3757 `fæush ( ¡dout ); 3759 ià( `cÚÃù ( sock , ( sockaddr *è& d¡addr , (dstaddr)) < 0) { 3760 `”rÜ ("Failedo connect"); 3761 `þo£ ( sock ); 3765 `DBG (" Done\n"); 3767  sock ; 3768 } } 3770  þ›Á * $ü—‹_þ›Á ( fd ,  btd_deviû * deviû ) 3772 `DBG ("+"); 3773  þ›Á * þi ; 3774  bt_©t * ©t ; 3775  btd_ad­‹r * ad­‹r ; 3777 þi = `g_Ãw0 ( þ›Á , 1); 3778 ià(! þi ) { 3779 `”rÜ ("Failedo‡llocate memory for client\n"); 3780  NULL ; 3783 ©t = `bt_©t_Ãw ( fd ); 3784 ià(! ©t ) { 3785 `”rÜ ("Failedo initialze ATTransport†ayer\n"); 3786 `bt_©t_uÄef ( ©t ); 3787 `ä“ ( þi ); 3788  NULL ; 3790 ià(! `bt_©t_£t_þo£_Ú_uÄef ( ©t , Œue )) { 3791 `”rÜ ("Failedo set up ATTransport†ayer\n"); 3792 `bt_©t_uÄef ( ©t ); 3793 `ä“ ( þi ); 3794  NULL ; 3796 ià(! `bt_©t_»gi¡”_discÚÃù ( ©t , g©t_discÚÃùed_cb , deviû , NULL )) { 3797 `”rÜ ("Failedo set ATT disconnect handler\n"); 3798 `bt_©t_uÄef ( ©t ); 3799 `ä“ ( þi ); 3800  NULL ; 3803 þi -> fd = fd; 3804 þi -> g©t = `bt_g©t_þ›Á_Ãw ( ©t , BT_ATT_DEFAULT_LE_MTU ); 3806 ià(! þi -> g©t ) { 3807 `”rÜ ("Failedo create GATT client\n"); 3808 `bt_©t_uÄef ( ©t ); 3809 `ä“ ( þi ); 3810  NULL ; 3813 ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 3814 ad­‹r -> g©t_þ›Á = þi ; 3816 `bt_g©t_þ›Á_£t_»ady_hªdËr ( þi -> g©t , g©t_cÚÃùed_cb , deviû , NULL ); 3819 `bt_©t_uÄef ( ©t ); 3820  þi ; 3821 } } 3824  gboÞ—n $´Ý”ty_g‘_Ë_discov”šg (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3825 DBusMes§geI‹r * ™” , * u£r_d©a ) 3827  btd_ad­‹r * ad­‹r = u£r_d©a ; 3828 dbus_boÞ_t discov”šg = ad­‹r -> Ë_discov”šg ; 3830 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & discov”šg ); 3832  TRUE ; 3833 } } 3835  gboÞ—n $´Ý”ty_g‘_adv”tisšg (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3836 DBusMes§geI‹r * ™” , * u£r_d©a ) 3838  btd_ad­‹r * ad­‹r = u£r_d©a ; 3839 dbus_boÞ_t adv”tisšg = (dbus_boÞ_t) ad­‹r ->advertising; 3841 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & adv”tisšg ); 3843  TRUE ; 3844 } } 3846  gboÞ—n $´Ý”ty_g‘_£cu»_cÚÃùiÚ (cÚ¡ GDBusPrÝ”tyTabË 3847 * ´Ý”ty , DBusMes§geI‹r * ™” , * u£r_d©a ) 3849  btd_ad­‹r * ad­‹r = u£r_d©a ; 3850 dbus_boÞ_t £cu»_cÚÃùiÚ = ad­‹r ->secure_connection; 3852 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , 3853 & £cu»_cÚÃùiÚ ); 3855  TRUE ; 3856 } } 3858  gboÞ—n $´Ý”ty_g‘_cÚÃùabË (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3859 DBusMes§geI‹r * ™” , * u£r_d©a ) 3861  btd_ad­‹r * ad­‹r = u£r_d©a ; 3863  `´Ý”ty_g‘_mode ( ad­‹r , MGMT_SETTING_CONNECTABLE , ™” ); 3864 } } 3866  $´Ý”ty_£t_cÚÃùabË (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3867 DBusMes§geI‹r * ™” , 3868 GDBusP’dšgPrÝ”tyS‘ id , * u£r_d©a ) 3870  btd_ad­‹r * ad­‹r = u£r_d©a ; 3872 `´Ý”ty_£t_mode ( ad­‹r , MGMT_SETTING_CONNECTABLE , ™” , id ); 3873 } } 3875  gboÞ—n $´Ý”ty_g‘_v”siÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3876 DBusMes§geI‹r * ™” , * u£r_d©a ) 3878  btd_ad­‹r * ad­‹r = u£r_d©a ; 3879 cÚ¡ * ¡r = ad­‹r -> v”siÚ ? : ""; 3881 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¡r ); 3883  TRUE ; 3884 } } 3888  gboÞ—n $´Ý”ty_g‘_uuids (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3889 DBusMes§geI‹r * ™” , * u£r_d©a ) 3891  btd_ad­‹r * ad­‹r = u£r_d©a ; 3892 DBusMes§geI‹r ’Œy ; 3893 sdp_li¡_t * l ; 3895 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 3896 DBUS_TYPE_STRING_AS_STRING , & ’Œy ); 3898  l = ad­‹r -> £rviûs ;† !ð NULL ;† =†-> Ãxt ) { 3899 sdp_»cÜd_t * »c = l -> d©a ; 3900 * uuid ; 3902 uuid = `bt_uuid2¡ršg (& »c -> svþass ); 3903 ià( uuid =ð NULL ) 3906 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , 3907 & uuid ); 3908 `ä“ ( uuid ); 3911 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ’Œy ); 3913  TRUE ; 3914 } } 3916  gboÞ—n $´Ý”ty_exi¡s_mod®Ÿs (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3917 * u£r_d©a ) 3919  btd_ad­‹r * ad­‹r = u£r_d©a ; 3921  ad­‹r -> mod®Ÿs ? TRUE : FALSE ; 3922 } } 3924  gboÞ—n $´Ý”ty_g‘_mod®Ÿs (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 3925 DBusMes§geI‹r * ™” , * u£r_d©a ) 3927  btd_ad­‹r * ad­‹r = u£r_d©a ; 3928 cÚ¡ * ¡r = ad­‹r -> mod®Ÿs ? : ""; 3930 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¡r ); 3932  TRUE ; 3933 } } 3935  $deviû_·th_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 3937 cÚ¡  btd_deviû * deviû = a ; 3938 cÚ¡ * ·th = b ; 3939 cÚ¡ * dev_·th = `deviû_g‘_·th ( deviû ); 3941  `¡rÿ£cmp ( dev_·th , ·th ); 3942 } } 3944 #ifdeà __TIZEN_PATCH__ 3945  DBusMes§ge * $ad­‹r_uÅaœ_deviû ( DBusCÚÃùiÚ * cÚn , 3946 DBusMes§ge * msg , * u£r_d©a ) 3948 `DBG ("+"); 3949  btd_ad­‹r * ad­‹r = u£r_d©a ; 3950  btd_deviû * deviû ; 3951 cÚ¡ * ·th ; 3952 GSLi¡ * li¡ ; 3954 ià( `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 3955 DBUS_TYPE_INVALID è=ð FALSE ) 3956  `btd_”rÜ_šv®id_¬gs ( msg ); 3958 li¡ = `g_¦i¡_fšd_cu¡om ( ad­‹r -> deviûs , ·th , deviû_·th_cmp ); 3959 ià(! li¡ ) 3960  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 3962 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 3963  `btd_”rÜ_nÙ_»ady ( msg ); 3965 deviû = li¡ -> d©a ; 3967 `btd_deviû_£t_‹mpܬy ( deviû , TRUE ); 3969 ià(! `btd_deviû_is_cÚÃùed ( deviû )) { 3970 `btd_ad­‹r_uÅaœ_deviû ( ad­‹r , deviû ); 3971  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 3974 `deviû_»que¡_discÚÃù ( deviû , msg ); 3976 `DBG ("-"); 3977  NULL ; 3978 } } 3980  DBusMes§ge * $ü—‹_deviû ( DBusCÚÃùiÚ * cÚn , 3981 DBusMes§ge * msg , * d©a ) 3983  btd_ad­‹r * ad­‹r = d©a ; 3984 cÚ¡ gch¬ * add»ss ; 3985 bdaddr_t addr ; 3986 `DBG ("+"); 3988 ià( `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & add»ss , 3989 DBUS_TYPE_INVALID è=ð FALSE ) 3990  `btd_”rÜ_šv®id_¬gs ( msg ); 3992 ià( `check_add»ss ( add»ss ) < 0) 3993  `btd_”rÜ_šv®id_¬gs ( msg ); 3995 `DBG ("%s", add»ss ); 3997 `¡r2ba ( add»ss , & addr ); 3998 `btd_ad­‹r_g‘_deviû ( ad­‹r , & addr , BDADDR_BREDR ); 4000 `DBG ("-"); 4001  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 4002 } } 4004  DBusMes§ge * $fšd_deviû ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 4005 * d©a ) 4007  btd_ad­‹r * ad­‹r = d©a ; 4008  btd_deviû * deviû ; 4009 DBusMes§ge * »¶y ; 4010 cÚ¡ gch¬ * add»ss ; 4011 GSLi¡ * l ; 4012 cÚ¡ gch¬ * dev_·th ; 4014 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & add»ss , 4015 DBUS_TYPE_INVALID )) 4016  `btd_”rÜ_šv®id_¬gs ( msg ); 4018 l = `g_¦i¡_fšd_cu¡om ( ad­‹r -> deviûs , 4019 add»ss , ( GCom·»Func è deviû_add»ss_cmp ); 4020 ià(! l ) 4021  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 4023 deviû = l -> d©a ; 4025 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 4026 ià(! »¶y ) 4027  NULL ; 4029 dev_·th = `deviû_g‘_·th ( deviû ); 4031 `dbus_mes§ge_­³nd_¬gs ( »¶y , 4032 DBUS_TYPE_OBJECT_PATH , & dev_·th , 4033 DBUS_TYPE_INVALID ); 4035  »¶y ; 4036 } } 4038 #ifdeà BLUEZ5_GATT_CLIENT 4039  DBusMes§ge * $cÚÃù_Ë ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 4040 * u£r_d©a ) 4042  btd_ad­‹r * ad­‹r = u£r_d©a ; 4043  btd_deviû * deviû ; 4044  þ›Á * þi ; 4045  fd ; 4046  £c_Ëv– = BT_SECURITY_LOW ; 4047 cÚ¡ gch¬ * add»ss ; 4048 bdaddr_t addr ; 4050 ià( `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & add»ss , 4051 DBUS_TYPE_INVALID è=ð FALSE ) 4052  `btd_”rÜ_šv®id_¬gs ( msg ); 4054 ià( `check_add»ss ( add»ss ) < 0) 4055  `btd_”rÜ_šv®id_¬gs ( msg ); 4057 `DBG ("%s", add»ss ); 4058 `¡r2ba ( add»ss , & addr ); 4060 þi = `g_Ãw0 ( þ›Á , 1); 4062 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & addr , 4063 BDADDR_LE_PUBLIC ); 4065 ià(! deviû ) { 4066 `DBG ("Unableo get device object"); 4067  `btd_”rÜ_nÙ_avažabË ( msg ); 4069 ià( `deviû_g‘_g©t_cÚÃùed ( deviû )) 4070  `btd_”rÜ_®»ady_cÚÃùed ( msg ); 4072 ià( `deviû_is_·œed ( deviû , BDADDR_LE_PUBLIC )) 4073 £c_Ëv– = BT_SECURITY_MEDIUM ; 4076 fd = `Ë_©t_cÚÃù ( `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 4077 & addr , BDADDR_LE_PUBLIC , £c_Ëv– ); 4079 ià( fd < 0) 4080  `btd_”rÜ_nÙ_avažabË ( msg ); 4082 þi = `ü—‹_þ›Á ( fd , deviû ); 4084 ià(! þi ) { 4085 `þo£ ( fd ); 4086  `btd_”rÜ_nÙ_avažabË ( msg ); 4088 ad­‹r -> g©t_þ›Á = þi ; 4090  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 4091 } } 4093  DBusMes§ge * $discÚÃù_Ë ( DBusCÚÃùiÚ * cÚn , 4094 DBusMes§ge * msg , * u£r_d©a ) 4096  btd_ad­‹r * ad­‹r = u£r_d©a ; 4097  btd_deviû * deviû ; 4098 cÚ¡ gch¬ * add»ss ; 4099 bdaddr_t addr ; 4101 ià( `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & add»ss , 4102 DBUS_TYPE_INVALID è=ð FALSE ) 4103  `btd_”rÜ_šv®id_¬gs ( msg ); 4105 ià( `check_add»ss ( add»ss ) < 0) 4106  `btd_”rÜ_šv®id_¬gs ( msg ); 4108 `DBG ("%s", add»ss ); 4109 `¡r2ba ( add»ss , & addr ); 4111 deviû = `btd_ad­‹r_fšd_deviû ( ad­‹r , & addr , BDADDR_LE_PUBLIC ); 4113 ià(! deviû ) { 4114 `DBG ("Unableo get device object"); 4115  `btd_”rÜ_nÙ_avažabË ( msg ); 4117 ià(! `deviû_g‘_g©t_cÚÃùed ( deviû )) 4118  `btd_”rÜ_nÙ_cÚÃùed ( msg ); 4120 ià( `btd_deviû_g‘_bdaddr_ty³ ( deviû è=ð BDADDR_BREDR ) 4121  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 4124 `DBG ("Disconnect LE device"); 4125 ià(! `discÚÃù_Ë_deviû ( deviû )) 4126  `btd_”rÜ_çžed ( msg , "to disconnect LE device"); 4128  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 4129 } } 4131  DBusMes§ge * $discov”_Ë_£rviûs ( DBusCÚÃùiÚ * cÚn , 4132 DBusMes§ge * msg , * u£r_d©a ) 4134 DBusMes§ge * »¶y ; 4135 dbus_boÞ_t v® ; 4136  btd_ad­‹r * ad­‹r = u£r_d©a ; 4137  btd_deviû * deviû ; 4138 cÚ¡ gch¬ * add»ss ; 4139 bdaddr_t addr ; 4141 ià( `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & add»ss , 4142 DBUS_TYPE_INVALID è=ð FALSE ) 4143  `btd_”rÜ_šv®id_¬gs ( msg ); 4145 ià( `check_add»ss ( add»ss ) < 0) 4146  `btd_”rÜ_šv®id_¬gs ( msg ); 4148 `DBG ("%s", add»ss ); 4149 `¡r2ba ( add»ss , & addr ); 4151 deviû = `btd_ad­‹r_fšd_deviû ( ad­‹r , & addr , BDADDR_LE_PUBLIC ); 4153 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 4154 ià(! »¶y ) 4155  `btd_”rÜ_šv®id_¬gs ( msg ); 4157 ià(! deviû ) { 4158 `DBG ("Unableo get device object"); 4159  `btd_”rÜ_nÙ_avažabË ( msg ); 4161 ià(! `deviû_g‘_g©t_cÚÃùed ( deviû )) 4162  `btd_”rÜ_nÙ_cÚÃùed ( msg ); 4164 ià( `btd_deviû_g‘_bdaddr_ty³ ( deviû è=ð BDADDR_BREDR ) 4165  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 4168 v® = `bt_g©t_discov”_£rviûs ( ad­‹r -> g©t_þ›Á -> g©t ); 4170 if( v® =ð TRUE ) 4171 `bt_g©t_þ›Á_£t_»ady_hªdËr ( ad­‹r -> g©t_þ›Á -> g©t , 4172 g©t_discov”_£rviûs_cb , ad­‹r , NULL ); 4174 `dbus_mes§ge_­³nd_¬gs ( »¶y , DBUS_TYPE_BOOLEAN , & v® , 4175 DBUS_TYPE_INVALID ); 4177  »¶y ; 4178 } } 4182  DBusMes§ge * $»move_deviû ( DBusCÚÃùiÚ * cÚn , 4183 DBusMes§ge * msg , * u£r_d©a ) 4185  btd_ad­‹r * ad­‹r = u£r_d©a ; 4186  btd_deviû * deviû ; 4187 cÚ¡ * ·th ; 4188 GSLi¡ * li¡ ; 4190 ià( `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 4191 DBUS_TYPE_INVALID è=ð FALSE ) 4192  `btd_”rÜ_šv®id_¬gs ( msg ); 4194 li¡ = `g_¦i¡_fšd_cu¡om ( ad­‹r -> deviûs , ·th , deviû_·th_cmp ); 4195 ià(! li¡ ) 4196  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 4198 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 4199  `btd_”rÜ_nÙ_»ady ( msg ); 4201 deviû = li¡ -> d©a ; 4203 `btd_deviû_£t_‹mpܬy ( deviû , TRUE ); 4205 ià(! `btd_deviû_is_cÚÃùed ( deviû )) { 4206 `btd_ad­‹r_»move_deviû ( ad­‹r , deviû ); 4207  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 4210 `deviû_»que¡_discÚÃù ( deviû , msg ); 4212  NULL ; 4213 } } 4215 cÚ¡ GDBusM‘hodTabË gad­‹r_m‘hods [] = { 4216 { GDBUS_METHOD ("S¹Discov”y", NULL , NULL, ¡¬t_discov”y ) }, 4217 { GDBUS_METHOD ("StÝDiscov”y", NULL , NULL, ¡Ý_discov”y ) }, 4218 #ifdeà __TIZEN_PATCH__ 4219 { GDBUS_METHOD ("StartCustomDiscovery", 4220 GDBUS_ARGS ({ "ty³", "s" }), NULL , 4221 ad­‹r_¡¬t_cu¡om_discov”y ) }, 4222 { GDBUS_METHOD ("S¹LEDiscov”y", NULL , NULL, 4223 ad­‹r_¡¬t_Ë_discov”y ) }, 4224 { GDBUS_ASYNC_METHOD ("StÝLEDiscov”y", NULL , NULL, 4225 ad­‹r_¡Ý_Ë_discov”y ) }, 4226 { GDBUS_METHOD ("EnableSecureConnection", 4227 GDBUS_ARGS ({"’abË", "b"}), NULL , 4228 wr™e_£c_cÚn_ho¡_suµÜt )}, 4229 { GDBUS_METHOD ("R—dSecu»CÚÃùiÚ", NULL , 4230 NULL , »ad_£c_cÚn_ho¡_suµÜt )}, 4231 { GDBUS_METHOD ("SetAdvertising", 4232 GDBUS_ARGS ({ "’abË", "b" }), NULL , 4233 ad­‹r_£t_adv”tisšg ) }, 4234 { GDBUS_METHOD ("SetAdvertisingParameters", 4235 GDBUS_ARGS ({ "interval_min", "u" }, 4238 { "ty³", "u" }), NULL , 4239 ad­‹r_£t_adv”tisšg_·¿ms ) }, 4240 { GDBUS_METHOD ("SetAdvertisingData", 4241 GDBUS_ARGS ({ "value", "ay" }, 4242 { "Ëngth", "i" }), NULL , 4243 ad­‹r_£t_adv”tisšg_d©a ) }, 4244 { GDBUS_METHOD ("SetScanParameters", 4245 GDBUS_ARGS ({ "type", "u" }, 4247 { "wšdow", "u" }), NULL , 4248 ad­‹r_Ë_£t_sÿn_·¿ms ) }, 4249 { GDBUS_METHOD ("SetScanRespData", 4250 GDBUS_ARGS ({ "value", "ay" }, 4251 { "Ëngth", "i" }), NULL , 4252 ad­‹r_£t_sÿn_r¥_d©a ) }, 4253 { GDBUS_METHOD ("AddDeviceWhiteList", 4254 GDBUS_ARGS ({ "address", "s" }, 4255 { "add»ss_ty³", "u" }), NULL , 4256 ad­‹r_add_deviû_wh™e_li¡ ) }, 4257 { GDBUS_METHOD ("RemoveDeviceWhiteList", 4258 GDBUS_ARGS ({ "address", "s" }, 4259 { "add»ss_ty³", "u" }), NULL , 4260 ad­‹r_»move_deviû_wh™e_li¡ ) }, 4261 { GDBUS_METHOD ("ClearDeviceWhiteList", 4262 NULL , NULL, 4263 ad­‹r_þ—r_deviû_wh™e_li¡ ) }, 4264 { GDBUS_METHOD ("SetLePrivacy", 4265 GDBUS_ARGS ({ "’abË", "b" }), NULL , 4266 ad­‹r_£t_Ë_´ivacy ) }, 4267 { GDBUS_ASYNC_METHOD ("EnableRssi", 4268 GDBUS_ARGS ({ "bt_address", "s" }, 4273 NULL , 4274 ad­‹r_’abË_rssi ) }, 4275 { GDBUS_ASYNC_METHOD ("GetRssiStrength", 4276 GDBUS_ARGS ({ "bt_address", "s" }, { "link_type", "i" }), 4277 NULL , 4278 ad­‹r_g‘_rssi ) }, 4279 { GDBUS_ASYNC_METHOD ("UnpairDevice", 4280 GDBUS_ARGS ({ "deviû", "o" }), NULL , ad­‹r_uÅaœ_deviû ) }, 4281 { GDBUS_METHOD ("FindDevice", 4282 GDBUS_ARGS ({ "address", "s" }), 4283 GDBUS_ARGS ({ "device", "o" }), 4284 fšd_deviû ) }, 4285 #ifdeà __BROADCOM_PATCH__ 4286 { GDBUS_METHOD ("SetWbsParameters", 4287 GDBUS_ARGS ({ "role", "s" }, { "bt_address", "s" }), 4288 NULL , 4289 £t_wbs_·¿m‘”s ) }, 4290 { GDBUS_METHOD ("SetNbParameters", 4291 GDBUS_ARGS ({ "role", "s" }, { "bt_address", "s" }), 4292 NULL , 4293 £t_nb_·¿m‘”s ) }, 4294 { GDBUS_METHOD ("SetManufacturerData", 4295 GDBUS_ARGS ({ "v®ue", "ay" }), NULL , 4296 ad­‹r_£t_mªuçùu»r_d©a ) }, 4298 { GDBUS_ASYNC_METHOD ("CreateDevice", 4299 GDBUS_ARGS ({ "add»ss", "s" }), NULL , 4300 ü—‹_deviû ) }, 4301 #ifdeà BLUEZ5_GATT_CLIENT 4302 { GDBUS_METHOD ("ConnectLE", 4303 GDBUS_ARGS ({ "address", "s"}), 4304 NULL , cÚÃù_Ë ) }, 4305 { GDBUS_METHOD ("DisconnectLE", 4306 GDBUS_ARGS ({ "address", "s"}), 4307 NULL , discÚÃù_Ë ) }, 4308 { GDBUS_METHOD ("DiscoverLEServices", 4309 GDBUS_ARGS ({ "address", "s"}), 4310 GDBUS_ARGS ({ "result", "b"}), 4311 discov”_Ë_£rviûs ) }, 4314 { GDBUS_ASYNC_METHOD ("RemoveDevice", 4315 GDBUS_ARGS ({ "deviû", "o" }), NULL , »move_deviû ) }, 4319 #ifdeà __TIZEN_PATCH__ 4320 cÚ¡ GDBusSigÇlTabË gad­‹r_sigÇls [] = { 4321 { GDBUS_SIGNAL ("RssiEnabled", 4322 GDBUS_ARGS ({"address","s"}, 4325 { GDBUS_SIGNAL ("RssiAlert", 4326 GDBUS_ARGS ({"address","s"}, 4330 { GDBUS_SIGNAL ("RawRssi", 4331 GDBUS_ARGS ({"address","s"}, 4334 { GDBUS_SIGNAL ("H¬dw¬eE¼Ü", NULL ) }, 4335 { GDBUS_SIGNAL ("TxTimeoutE¼Ü", NULL ) }, 4340 cÚ¡ GDBusPrÝ”tyTabË gad­‹r_´Ý”t›s [] = { 4341 { "Add»ss", "s", ´Ý”ty_g‘_add»ss }, 4342 { "Name", "s", ´Ý”ty_g‘_Çme }, 4343 { "AlŸs", "s", ´Ý”ty_g‘_®Ÿs , ´Ý”ty_£t_®Ÿs }, 4344 { "CÏss", "u", ´Ý”ty_g‘_þass }, 4345 { "Pow”ed", "b", ´Ý”ty_g‘_pow”ed , ´Ý”ty_£t_pow”ed }, 4346 { "Discov”abË", "b", ´Ý”ty_g‘_discov”abË , 4347 ´Ý”ty_£t_discov”abË }, 4348 { "Discov”abËTimeout", "u", ´Ý”ty_g‘_discov”abË_timeout , 4349 ´Ý”ty_£t_discov”abË_timeout }, 4350 { "PaœabË", "b", ´Ý”ty_g‘_·œabË , ´Ý”ty_£t_·œabË }, 4351 { "PaœabËTimeout", "u", ´Ý”ty_g‘_·œabË_timeout , 4352 ´Ý”ty_£t_·œabË_timeout }, 4353 { "Discov”šg", "b", ´Ý”ty_g‘_discov”šg }, 4354 #ifdeà __TIZEN_PATCH__ 4355 { "LEDiscov”šg", "b", ´Ý”ty_g‘_Ë_discov”šg }, 4357 { "UUIDs", "as", ´Ý”ty_g‘_uuids }, 4358 { "Mod®Ÿs", "s", ´Ý”ty_g‘_mod®Ÿs , NULL , 4359 ´Ý”ty_exi¡s_mod®Ÿs }, 4360 #ifdeà __TIZEN_PATCH__ 4361 { "Adv”tisšg", "b", ´Ý”ty_g‘_adv”tisšg }, 4362 { "Secu»CÚÃùiÚ", "b", ´Ý”ty_g‘_£cu»_cÚÃùiÚ }, 4363 { "CÚÃùabË", "b", ´Ý”ty_g‘_cÚÃùabË , 4364 ´Ý”ty_£t_cÚÃùabË }, 4365 { "V”siÚ", "s", ´Ý”ty_g‘_v”siÚ }, 4371  $¡r2buf (cÚ¡ * ¡r , ušt8_t * buf , size_t bËn ) 4373  i , dËn ; 4375 ià( ¡r =ð NULL ) 4376  - EINVAL ; 4378 `mem£t ( buf , 0, bËn ); 4380 dËn = `MIN (( `¡¾’ ( ¡r è/ 2), bËn ); 4382  i = 0; i < dËn ; i++) 4383 `ssÿnf ( ¡r + ( i * 2), "%02hhX", & buf [i]); 4386 } } 4388  lšk_key_šfo * $g‘_key_šfo ( GKeyFže * key_fže , cÚ¡ * ³” ) 4390  lšk_key_šfo * šfo = NULL ; 4391 * ¡r ; 4393 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , "LškKey", "Key", NULL ); 4394 ià(! ¡r || `¡¾’ (str) < 32) 4395  çžed ; 4397 šfo = `g_Ãw0 ( lšk_key_šfo , 1); 4399 `¡r2ba ( ³” , & šfo -> bdaddr ); 4401 ià(! `¡ºcmp ( ¡r , "0x", 2)) 4402 `¡r2buf (& ¡r [2], šfo -> key , (info->key)); 4404 `¡r2buf (& ¡r [0], šfo -> key , (info->key)); 4406 šfo -> ty³ = `g_key_fže_g‘_š‹g” ( key_fže , "LškKey", "Ty³", NULL ); 4407 šfo -> pš_Ën = `g_key_fže_g‘_š‹g” ( key_fže , "LinkKey", "PINLength", 4408 NULL ); 4410 çžed : 4411 `g_ä“ ( ¡r ); 4413  šfo ; 4414 } } 4416  smp_Ék_šfo * $g‘_Ék ( GKeyFže * key_fže , cÚ¡ * ³” , 4417 ušt8_t ³”_ty³ , cÚ¡ * group ) 4419  smp_Ék_šfo * Ék = NULL ; 4420 GE¼Ü * g”r = NULL ; 4421 boÞ ma¡” ; 4422 * key ; 4423 * ¿nd = NULL ; 4425 key = `g_key_fže_g‘_¡ršg ( key_fže , group , "Key", NULL ); 4426 ià(! key || `¡¾’ (key) < 32) 4427  çžed ; 4429 ¿nd = `g_key_fže_g‘_¡ršg ( key_fže , group , "Rªd", NULL ); 4430 ià(! ¿nd ) 4431  çžed ; 4433 Ék = `g_Ãw0 ( smp_Ék_šfo , 1); 4436 Ék -> ma¡” = Œue ; 4438 `¡r2ba ( ³” , & Ék -> bdaddr ); 4439 Ék -> bdaddr_ty³ = ³”_ty³ ; 4451 ià( Ék -> bdaddr_ty³ =ð BDADDR_LE_RANDOM && 4452 ( Ék -> bdaddr . b [5] & 0xc0) != 0xc0) { 4453 `g_ä“ ( Ék ); 4454 Ék = NULL ; 4455  çžed ; 4458 ià(! `¡ºcmp ( key , "0x", 2)) 4459 `¡r2buf (& key [2], Ék -> v® , (ltk->val)); 4461 `¡r2buf (& key [0], Ék -> v® , (ltk->val)); 4463 ià(! `¡ºcmp ( ¿nd , "0x", 2)) { 4464 ušt64_t ¿nd_Ë ; 4465 `¡r2buf (& ¿nd [2], ( ušt8_t *è& ¿nd_Ë , (rand_le)); 4466 Ék -> ¿nd = `Ë64_to_ýu ( ¿nd_Ë ); 4468 `ssÿnf ( ¿nd , "%" PRIu64 , & Ék ->rand); 4471 Ék -> auth’tiÿ‹d = `g_key_fže_g‘_š‹g” ( key_fže , group , 4472 "Auth’tiÿ‹d", NULL ); 4473 Ék -> ’c_size = `g_key_fže_g‘_š‹g” ( key_fže , group , "EncSize", 4474 NULL ); 4475 Ék -> ediv = `g_key_fže_g‘_š‹g” ( key_fže , group , "EDiv", NULL ); 4477 ma¡” = `g_key_fže_g‘_boÞ—n ( key_fže , group , "Ma¡”", & g”r ); 4478 ià( g”r ) 4479 `g_”rÜ_ä“ ( g”r ); 4481 Ék -> ma¡” = master; 4483 çžed : 4484 `g_ä“ ( key ); 4485 `g_ä“ ( ¿nd ); 4487  Ék ; 4488 } } 4490  GSLi¡ * $g‘_Ék_šfo ( GKeyFže * key_fže , cÚ¡ * ³” , 4491 ušt8_t bdaddr_ty³ ) 4493  smp_Ék_šfo * Ék ; 4494 GSLi¡ * l = NULL ; 4496 `DBG ("%s", ³” ); 4498 Ék = `g‘_Ék ( key_fže , ³” , bdaddr_ty³ , "LongTermKey"); 4499 ià( Ék ) 4500 l = `g_¦i¡_­³nd Ö, Ék ); 4502 Ék = `g‘_Ék ( key_fže , ³” , bdaddr_ty³ , "SlaveLongTermKey"); 4503 ià( Ék ) { 4504 Ék -> ma¡” = çl£ ; 4505 l = `g_¦i¡_­³nd Ö, Ék ); 4508  l ; 4509 } } 4511  œk_šfo * $g‘_œk_šfo ( GKeyFže * key_fže , cÚ¡ * ³” , 4512 ušt8_t bdaddr_ty³ ) 4514  œk_šfo * œk ; 4515 * ¡r ; 4517 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , "Id’t™yResÞvšgKey", "Key", NULL ); 4518 ià(! ¡r || `¡¾’ (str) < 32) 4519  NULL ; 4521 œk = `g_Ãw0 ( œk_šfo , 1); 4523 `¡r2ba ( ³” , & œk -> bdaddr ); 4524 œk -> bdaddr_ty³ = bdaddr_type; 4526 ià(! `¡ºcmp ( ¡r , "0x", 2)) 4527 `¡r2buf (& ¡r [2], œk -> v® , (irk->val)); 4529 `¡r2buf (& ¡r [0], œk -> v® , (irk->val)); 4531 `g_ä“ ( ¡r ); 4533  œk ; 4534 } } 4536  cÚn_·¿m * $g‘_cÚn_·¿m ( GKeyFže * key_fže , cÚ¡ * ³” , 4537 ušt8_t bdaddr_ty³ ) 4539  cÚn_·¿m * ·¿m ; 4541 ià(! `g_key_fže_has_group ( key_fže , "ConnectionParameters")) 4542  NULL ; 4544 ·¿m = `g_Ãw0 ( cÚn_·¿m , 1); 4546 ·¿m -> mš_š‹rv® = `g_key_fže_g‘_š‹g” ( key_fže , 4548 "MšIÁ”v®", NULL ); 4549 ·¿m -> max_š‹rv® = `g_key_fže_g‘_š‹g” ( key_fže , 4551 "MaxIÁ”v®", NULL ); 4552 ·¿m -> Ï‹ncy = `g_key_fže_g‘_š‹g” ( key_fže , 4554 "L©’cy", NULL ); 4555 ·¿m -> timeout = `g_key_fže_g‘_š‹g” ( key_fže , 4557 "Timeout", NULL ); 4558 `¡r2ba ( ³” , & ·¿m -> bdaddr ); 4559 ·¿m -> bdaddr_ty³ = bdaddr_type; 4561  ·¿m ; 4562 } } 4564  $lßd_lšk_keys_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 4565 cÚ¡ * ·¿m , * u£r_d©a ) 4567  btd_ad­‹r * ad­‹r = u£r_d©a ; 4569 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 4570 `”rÜ ("Failedo†oad†ink keys for hci%u: %s (0x%02x)", 4571 ad­‹r -> dev_id , `mgmt_”r¡r ( ¡©us ), status); 4575 `DBG ("lšk key lßded fÜ hci%u", ad­‹r -> dev_id ); 4576 } } 4578  $lßd_lšk_keys ( btd_ad­‹r * ad­‹r , GSLi¡ * keys , 4579 boÞ debug_keys ) 4581  mgmt_ý_lßd_lšk_keys * ý ; 4582  mgmt_lšk_key_šfo * key ; 4583 size_t key_couÁ , ý_size ; 4584  id ; 4585 GSLi¡ * l ; 4594 ià(!( ad­‹r -> suµÜ‹d_£‰šgs & MGMT_SETTING_BREDR )) 4597 key_couÁ = `g_¦i¡_Ëngth ( keys ); 4599 `DBG ("hci%u key %zu debug_key %d", ad­‹r -> dev_id , key_couÁ , 4600 debug_keys ); 4602 ý_size = (* ý è+ ( key_couÁ * (* key )); 4604 ý = `g_Œy_m®loc0 ( ý_size ); 4605 ià( ý =ð NULL ) { 4606 `”rÜ ("NØmemÜy f܆šk key fÜ hci%u", ad­‹r -> dev_id ); 4618 ý -> debug_keys = debug_keys; 4619 ý -> key_couÁ = `htobs (key_count); 4621  l = keys , key = ý ->keys;† !ð NULL ;† = `g_¦i¡_Ãxt (l), key++) { 4622  lšk_key_šfo * šfo = l -> d©a ; 4624 `baýy (& key -> addr . bdaddr , & šfo ->bdaddr); 4625 key -> addr . ty³ = BDADDR_BREDR ; 4626 key -> ty³ = šfo ->type; 4627 `memýy ( key -> v® , šfo ->key, 16); 4628 key -> pš_Ën = šfo ->pin_len; 4631 id = `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_LOAD_LINK_KEYS , 4632 ad­‹r -> dev_id , ý_size , ý , 4633 lßd_lšk_keys_com¶‘e , ad­‹r , NULL ); 4635 `g_ä“ ( ý ); 4637 ià( id == 0) 4638 `”rÜ ("FažedØlßd†šk key fÜ hci%u", ad­‹r -> dev_id ); 4639 } } 4641  gboÞ—n $lßd_Éks_timeout ( gpoš‹r u£r_d©a ) 4643  btd_ad­‹r * ad­‹r = u£r_d©a ; 4645 `”rÜ ("Lßdšg LTK timed ouˆfÜ hci%u", ad­‹r -> dev_id ); 4647 ad­‹r -> lßd_Éks_timeout = 0; 4649 `mgmt_ÿnûl ( ad­‹r -> mgmt ,‡d­‹r-> lßd_Éks_id ); 4650 ad­‹r -> lßd_Éks_id = 0; 4652  FALSE ; 4653 } } 4655  $lßd_Éks_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 4656 cÚ¡ * ·¿m , * u£r_d©a ) 4658  btd_ad­‹r * ad­‹r = u£r_d©a ; 4660 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 4661 `”rÜ ("Failedo†oad LTKs for hci%u: %s (0x%02x)", 4662 ad­‹r -> dev_id , `mgmt_”r¡r ( ¡©us ), status); 4665 ad­‹r -> lßd_Éks_id = 0; 4667 `g_sourû_»move ( ad­‹r -> lßd_Éks_timeout ); 4668 ad­‹r -> lßd_Éks_timeout = 0; 4670 `DBG ("LTK lßded fÜ hci%u", ad­‹r -> dev_id ); 4671 } } 4673  $lßd_Éks ( btd_ad­‹r * ad­‹r , GSLi¡ * keys ) 4675  mgmt_ý_lßd_lÚg_‹rm_keys * ý ; 4676  mgmt_Ék_šfo * key ; 4677 size_t key_couÁ , ý_size ; 4678 GSLi¡ * l ; 4690 ià(!( ad­‹r -> suµÜ‹d_£‰šgs & MGMT_SETTING_LE )) 4693 key_couÁ = `g_¦i¡_Ëngth ( keys ); 4695 `DBG ("hci%u key %zu", ad­‹r -> dev_id , key_couÁ ); 4697 ý_size = (* ý è+ ( key_couÁ * (* key )); 4699 ý = `g_Œy_m®loc0 ( ý_size ); 4700 ià( ý =ð NULL ) { 4701 `”rÜ ("NØmemÜy fÜ LTK fÜ hci%u", ad­‹r -> dev_id ); 4710 ý -> key_couÁ = `htobs (key_count); 4712  l = keys , key = ý ->keys;† !ð NULL ;† = `g_¦i¡_Ãxt (l), key++) { 4713  smp_Ék_šfo * šfo = l -> d©a ; 4715 `baýy (& key -> addr . bdaddr , & šfo ->bdaddr); 4716 key -> addr . ty³ = šfo -> bdaddr_ty³ ; 4717 `memýy ( key -> v® , šfo ->val, (info->val)); 4718 key -> ¿nd = `ýu_to_Ë64 ( šfo ->rand); 4719 key -> ediv = `ýu_to_Ë16 ( šfo ->ediv); 4720 key -> ty³ = šfo -> auth’tiÿ‹d ; 4721 key -> ma¡” = šfo ->master; 4722 key -> ’c_size = šfo ->enc_size; 4725 ad­‹r -> lßd_Éks_id = `mgmt_£nd ×d­‹r-> mgmt , 4726 MGMT_OP_LOAD_LONG_TERM_KEYS , 4727 ad­‹r -> dev_id , ý_size , ý , 4728 lßd_Éks_com¶‘e , ad­‹r , NULL ); 4730 `g_ä“ ( ý ); 4732 ià( ad­‹r -> lßd_Éks_id == 0) { 4733 `”rÜ ("FažedØlßd LTK fÜ hci%u", ad­‹r -> dev_id ); 4742 ad­‹r -> lßd_Éks_timeout = `g_timeout_add_£cÚds (2, 4743 lßd_Éks_timeout , ad­‹r ); 4744 } } 4746  $lßd_œks_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 4747 cÚ¡ * ·¿m , * u£r_d©a ) 4749  btd_ad­‹r * ad­‹r = u£r_d©a ; 4751 ià( ¡©us =ð MGMT_STATUS_UNKNOWN_COMMAND ) { 4752 `šfo ("Load IRKs failed: Kernel doesn't support LE Privacy"); 4756 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 4757 `”rÜ ("Failedo†oad IRKs for hci%u: %s (0x%02x)", 4758 ad­‹r -> dev_id , `mgmt_”r¡r ( ¡©us ), status); 4762 `DBG ("IRK lßded fÜ hci%u", ad­‹r -> dev_id ); 4763 } } 4765  $lßd_œks ( btd_ad­‹r * ad­‹r , GSLi¡ * œks ) 4767  mgmt_ý_lßd_œks * ý ; 4768  mgmt_œk_šfo * œk ; 4769 size_t œk_couÁ , ý_size ; 4770  id ; 4771 GSLi¡ * l ; 4778 ià(!( ad­‹r -> suµÜ‹d_£‰šgs & MGMT_SETTING_PRIVACY )) 4781 œk_couÁ = `g_¦i¡_Ëngth ( œks ); 4783 `DBG ("hci%u irk %zu", ad­‹r -> dev_id , œk_couÁ ); 4785 ý_size = (* ý è+ ( œk_couÁ * (* œk )); 4787 ý = `g_Œy_m®loc0 ( ý_size ); 4788 ià( ý =ð NULL ) { 4789 `”rÜ ("NØmemÜy fÜ IRK fÜ hci%u", ad­‹r -> dev_id ); 4798 ý -> œk_couÁ = `htobs (irk_count); 4800  l = œks , œk = ý ->œks;† !ð NULL ;† = `g_¦i¡_Ãxt (l), irk++) { 4801  œk_šfo * šfo = l -> d©a ; 4803 `baýy (& œk -> addr . bdaddr , & šfo ->bdaddr); 4804 œk -> addr . ty³ = šfo -> bdaddr_ty³ ; 4805 `memýy ( œk -> v® , šfo ->val, (irk->val)); 4808 id = `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_LOAD_IRKS ,‡d­‹r-> dev_id , 4809 ý_size , ý , lßd_œks_com¶‘e , ad­‹r , NULL ); 4811 `g_ä“ ( ý ); 4813 ià( id == 0) 4814 `”rÜ ("FažedØIRK fÜ hci%u", ad­‹r -> dev_id ); 4815 } } 4817  $lßd_cÚn_·¿ms_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 4818 cÚ¡ * ·¿m , * u£r_d©a ) 4820  btd_ad­‹r * ad­‹r = u£r_d©a ; 4822 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 4823 `”rÜ ("hci%u Load Connection Parameters failed: %s (0x%02x)", 4824 ad­‹r -> dev_id , `mgmt_”r¡r ( ¡©us ), status); 4828 `DBG ("CÚÃùiÚ P¬am‘” lßded fÜ hci%u", ad­‹r -> dev_id ); 4829 } } 4831  $lßd_cÚn_·¿ms ( btd_ad­‹r * ad­‹r , GSLi¡ * ·¿ms ) 4833  mgmt_ý_lßd_cÚn_·¿m * ý ; 4834  mgmt_cÚn_·¿m * ·¿m ; 4835 size_t ·¿m_couÁ , ý_size ; 4836  id ; 4837 GSLi¡ * l ; 4844 ià(!( ad­‹r -> suµÜ‹d_£‰šgs & MGMT_SETTING_LE )) 4847 ·¿m_couÁ = `g_¦i¡_Ëngth ( ·¿ms ); 4849 `DBG ("hci%u cÚÀ·¿m %zu", ad­‹r -> dev_id , ·¿m_couÁ ); 4851 ý_size = (* ý è+ ( ·¿m_couÁ * (* ·¿m )); 4853 ý = `g_Œy_m®loc0 ( ý_size ); 4854 ià( ý =ð NULL ) { 4855 `”rÜ ("Failedo‡llocate memory for connection…arameters"); 4859 ý -> ·¿m_couÁ = `htobs (param_count); 4861  l = ·¿ms , ·¿m = ý ->·¿ms;†;† = `g_¦i¡_Ãxt (l),…aram++) { 4862  cÚn_·¿m * šfo = l -> d©a ; 4864 `baýy (& ·¿m -> addr . bdaddr , & šfo ->bdaddr); 4865 ·¿m -> addr . ty³ = šfo -> bdaddr_ty³ ; 4866 ·¿m -> mš_š‹rv® = `htobs ( šfo ->min_interval); 4867 ·¿m -> max_š‹rv® = `htobs ( šfo ->max_interval); 4868 ·¿m -> Ï‹ncy = `htobs ( šfo ->latency); 4869 ·¿m -> timeout = `htobs ( šfo ->timeout); 4872 id = `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_LOAD_CONN_PARAM ,‡d­‹r-> dev_id , 4873 ý_size , ý , lßd_cÚn_·¿ms_com¶‘e , ad­‹r , NULL ); 4875 `g_ä“ ( ý ); 4877 ià( id == 0) 4878 `”rÜ ("Load connection…arameters failed"); 4879 } } 4881  ušt8_t $g‘_Ë_addr_ty³ ( GKeyFže * keyfže ) 4883 ušt8_t addr_ty³ ; 4884 * ty³ ; 4886 ty³ = `g_key_fže_g‘_¡ršg ( keyfže , "G’”®", "Add»ssTy³", NULL ); 4887 ià(! ty³ ) 4888  BDADDR_LE_PUBLIC ; 4890 ià( `g_¡r_equ® ( ty³ , "public")) 4891 addr_ty³ = BDADDR_LE_PUBLIC ; 4892 ià( `g_¡r_equ® ( ty³ , "static")) 4893 addr_ty³ = BDADDR_LE_RANDOM ; 4895 addr_ty³ = BDADDR_LE_PUBLIC ; 4897 `g_ä“ ( ty³ ); 4899  addr_ty³ ; 4900 } } 4902  $lßd_deviûs ( btd_ad­‹r * ad­‹r ) 4904  dœÇme [ PATH_MAX ]; 4905  ¤ÿddr [18]; 4906 GSLi¡ * keys = NULL ; 4907 GSLi¡ * Éks = NULL ; 4908 GSLi¡ * œks = NULL ; 4909 GSLi¡ * ·¿ms = NULL ; 4910 DIR * dœ ; 4911  dœ’t * ’Œy ; 4913 `ba2¡r (& ad­‹r -> bdaddr , ¤ÿddr ); 4915 `¢´štf ( dœÇme , PATH_MAX , STORAGEDIR "/%s", ¤ÿddr ); 4917 dœ = `Ý’dœ ( dœÇme ); 4918 ià(! dœ ) { 4919 `”rÜ ("UÇbËØÝ’‡d­‹¸¡ÜagdœeùÜy: %s", dœÇme ); 4923 ( ’Œy = `»addœ ( dœ )è!ð NULL ) { 4924  btd_deviû * deviû ; 4925  fž’ame [ PATH_MAX ]; 4926 GKeyFže * key_fže ; 4927  lšk_key_šfo * key_šfo ; 4928 GSLi¡ * li¡ , * Ék_šfo ; 4929  œk_šfo *irk_info; 4930  cÚn_·¿m * ·¿m ; 4931 ušt8_t bdaddr_ty³ ; 4933 ià( ’Œy -> d_ty³ =ð DT_UNKNOWN ) 4934 ’Œy -> d_ty³ = `utž_g‘_dt ( dœÇme ,ƒÁry-> d_Çme ); 4936 ià( ’Œy -> d_ty³ !ð DT_DIR || `bachk ÓÁry-> d_Çme ) < 0) 4939 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/šfo", ¤ÿddr , 4940 ’Œy -> d_Çme ); 4942 key_fže = `g_key_fže_Ãw (); 4943 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 4945 key_šfo = `g‘_key_šfo ( key_fže , ’Œy -> d_Çme ); 4946 ià( key_šfo ) 4947 keys = `g_¦i¡_­³nd (keys, key_šfo ); 4949 bdaddr_ty³ = `g‘_Ë_addr_ty³ ( key_fže ); 4951 Ék_šfo = `g‘_Ék_šfo ( key_fže , ’Œy -> d_Çme , bdaddr_ty³ ); 4952 Éks = `g_¦i¡_cÚÿt Ötks, Ék_šfo ); 4954 œk_šfo = `g‘_œk_šfo ( key_fže , ’Œy -> d_Çme , bdaddr_ty³ ); 4955 ià( œk_šfo ) 4956 œks = `g_¦i¡_­³nd (œks, œk_šfo ); 4958 ·¿m = `g‘_cÚn_·¿m ( key_fže , ’Œy -> d_Çme , bdaddr_ty³ ); 4959 ià( ·¿m ) 4960 ·¿ms = `g_¦i¡_­³nd Õ¬ams, ·¿m ); 4962 li¡ = `g_¦i¡_fšd_cu¡om ( ad­‹r -> deviûs , ’Œy -> d_Çme , 4963 deviû_add»ss_cmp ); 4964 ià( li¡ ) { 4965 deviû = li¡ -> d©a ; 4966  deviû_exi¡ ; 4969 deviû = `deviû_ü—‹_äom_¡Üage ( ad­‹r , ’Œy -> d_Çme , 4970 key_fže ); 4971 ià(! deviû ) 4972  ä“ ; 4974 `btd_deviû_£t_‹mpܬy ( deviû , FALSE ); 4975 ad­‹r -> deviûs = `g_¦i¡_­³nd ×d­‹r->deviûs, deviû ); 4979 li¡ = `btd_deviû_g‘_uuids ( deviû ); 4980 ià( li¡ ) 4981 `deviû_´obe_´ofžes ( deviû , li¡ ); 4983 deviû_exi¡ : 4984 ià( key_šfo ) { 4985 `deviû_£t_·œed ( deviû , BDADDR_BREDR ); 4986 `deviû_£t_bÚded ( deviû , BDADDR_BREDR ); 4989 ià( Ék_šfo ) { 4990 `deviû_£t_·œed ( deviû , bdaddr_ty³ ); 4991 `deviû_£t_bÚded ( deviû , bdaddr_ty³ ); 4994 ä“ : 4995 `g_key_fže_ä“ ( key_fže ); 4998 `þo£dœ ( dœ ); 5000 `lßd_lšk_keys ( ad­‹r , keys , maš_Ýts . debug_keys ); 5001 `g_¦i¡_ä“_fuÎ ( keys , g_ä“ ); 5003 `lßd_Éks ( ad­‹r , Éks ); 5004 `g_¦i¡_ä“_fuÎ ( Éks , g_ä“ ); 5005 `lßd_œks ( ad­‹r , œks ); 5006 `g_¦i¡_ä“_fuÎ ( œks , g_ä“ ); 5007 `lßd_cÚn_·¿ms ( ad­‹r , ·¿ms ); 5008 `g_¦i¡_ä“_fuÎ ( ·¿ms , g_ä“ ); 5009 } } 5011  $btd_ad­‹r_block_add»ss ( btd_ad­‹r * ad­‹r , 5012 cÚ¡ bdaddr_t * bdaddr , ušt8_t bdaddr_ty³ ) 5014  mgmt_ý_block_deviû ý ; 5015  addr [18]; 5017 `ba2¡r ( bdaddr , addr ); 5018 `DBG ("hci%u %s", ad­‹r -> dev_id , addr ); 5020 `mem£t (& ý , 0, (cp)); 5021 `baýy (& ý . addr . bdaddr , bdaddr); 5022 ý . addr . ty³ = bdaddr_ty³ ; 5024 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_BLOCK_DEVICE , 5025 ad­‹r -> dev_id , ( ý ), &cp, 5026 NULL , NULL, NULL) > 0) 5029  - EIO ; 5030 } } 5032  $btd_ad­‹r_unblock_add»ss ( btd_ad­‹r * ad­‹r , 5033 cÚ¡ bdaddr_t * bdaddr , ušt8_t bdaddr_ty³ ) 5035  mgmt_ý_unblock_deviû ý ; 5036  addr [18]; 5038 `ba2¡r ( bdaddr , addr ); 5039 `DBG ("hci%u %s", ad­‹r -> dev_id , addr ); 5041 `mem£t (& ý , 0, (cp)); 5042 `baýy (& ý . addr . bdaddr , bdaddr); 5043 ý . addr . ty³ = bdaddr_ty³ ; 5045 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_UNBLOCK_DEVICE , 5046 ad­‹r -> dev_id , ( ý ), &cp, 5047 NULL , NULL, NULL) > 0) 5050  - EIO ; 5051 } } 5053  $þ—r_blocked ( btd_ad­‹r * ad­‹r ) 5055  `btd_ad­‹r_unblock_add»ss ( ad­‹r , BDADDR_ANY , 0); 5056 } } 5058  $´obe_driv” ( btd_ad­‹r * ad­‹r , gpoš‹r u£r_d©a ) 5060  btd_ad­‹r_driv” * driv” = u£r_d©a ; 5061  ”r ; 5063 ià( driv” -> ´obe =ð NULL ) 5066 ”r = driv” -> `´obe ( ad­‹r ); 5067 ià( ”r < 0) { 5068 `”rÜ ("%s: % (%d)", driv” -> Çme , `¡»¼Ü (- ”r ), -err); 5072 ad­‹r -> driv”s = `g_¦i¡_´•’d ×d­‹r->driv”s, driv” ); 5073 } } 5075  $lßd_driv”s ( btd_ad­‹r * ad­‹r ) 5077 GSLi¡ * l ; 5079  l = ad­‹r_driv”s ;†;† =†-> Ãxt ) 5080 `´obe_driv” ( ad­‹r , l -> d©a ); 5081 } } 5083  $´obe_´ofže ( btd_´ofže * ´ofže , * d©a ) 5085  btd_ad­‹r * ad­‹r = d©a ; 5086  ”r ; 5088 ià( ´ofže -> ad­‹r_´obe =ð NULL ) 5091 ”r = ´ofže -> `ad­‹r_´obe Õrofže, ad­‹r ); 5092 ià( ”r < 0) { 5093 `”rÜ ("%s: % (%d)", ´ofže -> Çme , `¡»¼Ü (- ”r ), -err); 5097 ad­‹r -> ´ofžes = `g_¦i¡_´•’d ×d­‹r->´ofžes, ´ofže ); 5098 } } 5100  $ad­‹r_add_´ofže ( btd_ad­‹r * ad­‹r , gpoš‹r p ) 5102  btd_´ofže * ´ofže = p ; 5104 ià(! ad­‹r -> š™Ÿlized ) 5107 `´obe_´ofže ( ´ofže , ad­‹r ); 5109 `g_¦i¡_fÜ—ch ( ad­‹r -> deviûs , deviû_´obe_´ofže , ´ofže ); 5110 } } 5112  $ad­‹r_»move_´ofže ( btd_ad­‹r * ad­‹r , gpoš‹r p ) 5114  btd_´ofže * ´ofže = p ; 5116 ià(! ad­‹r -> š™Ÿlized ) 5119 ià( ´ofže -> deviû_»move ) 5120 `g_¦i¡_fÜ—ch ( ad­‹r -> deviûs , deviû_»move_´ofže , p ); 5122 ad­‹r -> ´ofžes = `g_¦i¡_»move ×d­‹r->´ofžes, ´ofže ); 5124 ià( ´ofže -> ad­‹r_»move ) 5125 ´ofže -> `ad­‹r_»move Õrofže, ad­‹r ); 5126 } } 5128  $ad­‹r_add_cÚÃùiÚ ( btd_ad­‹r * ad­‹r , 5129  btd_deviû * deviû , 5130 ušt8_t bdaddr_ty³ ) 5132 `deviû_add_cÚÃùiÚ ( deviû , bdaddr_ty³ ); 5134 ià( `g_¦i¡_fšd ( ad­‹r -> cÚÃùiÚs , deviû )) { 5135 `”rÜ ("Device is‡lready marked‡s connected"); 5139 ad­‹r -> cÚÃùiÚs = `g_¦i¡_­³nd ×d­‹r->cÚÃùiÚs, deviû ); 5140 } } 5142  $g‘_cÚÃùiÚs_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 5143 cÚ¡ * ·¿m , * u£r_d©a ) 5145  btd_ad­‹r * ad­‹r = u£r_d©a ; 5146 cÚ¡  mgmt_½_g‘_cÚÃùiÚs * ½ = ·¿m ; 5147 ušt16_t i , cÚn_couÁ ; 5149 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 5150 `”rÜ ("Failedo get connections: %s (0x%02x)", 5151 `mgmt_”r¡r ( ¡©us ), status); 5155 ià( Ëngth < (* ½ )) { 5156 `”rÜ ("Wrong size of get connections„esponse"); 5160 cÚn_couÁ = `btohs ( ½ ->conn_count); 5162 `DBG ("CÚÃùiÚ couÁ: %d", cÚn_couÁ ); 5164 ià( cÚn_couÁ * ( mgmt_addr_šfo ) + 5165 (* ½ è!ð Ëngth ) { 5166 `”rÜ ("Incorrect…acket size for get connections„esponse"); 5170  i = 0; i < cÚn_couÁ ; i++) { 5171 cÚ¡  mgmt_addr_šfo * addr = & ½ ->addr[ i ]; 5172  btd_deviû * deviû ; 5173  add»ss [18]; 5175 `ba2¡r (& addr -> bdaddr , add»ss ); 5176 `DBG ("Addšgƒxi¡šg cÚÃùiÚØ%s", add»ss ); 5178 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & addr -> bdaddr , 5179 addr -> ty³ ); 5180 ià( deviû ) 5181 `ad­‹r_add_cÚÃùiÚ ( ad­‹r , deviû , addr -> ty³ ); 5183 } } 5185  $lßd_cÚÃùiÚs ( btd_ad­‹r * ad­‹r ) 5187 `DBG ("£ndšg g‘ cÚÃùiÚ commªd fÜ index %u", ad­‹r -> dev_id ); 5189 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_GET_CONNECTIONS , 5190 ad­‹r -> dev_id , 0, NULL , 5191 g‘_cÚÃùiÚs_com¶‘e , ad­‹r , NULL ) > 0) 5194 `”rÜ ("FažedØg‘ cÚÃùiÚ fÜ index %u", ad­‹r -> dev_id ); 5195 } } 5197 boÞ $btd_ad­‹r_g‘_·œabË ( btd_ad­‹r * ad­‹r ) 5199 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_BONDABLE ) 5200  Œue ; 5202  çl£ ; 5203 } } 5205 boÞ $btd_ad­‹r_g‘_pow”ed ( btd_ad­‹r * ad­‹r ) 5207 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED ) 5208  Œue ; 5210  çl£ ; 5211 } } 5213 boÞ $btd_ad­‹r_g‘_cÚÃùabË ( btd_ad­‹r * ad­‹r ) 5215 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_CONNECTABLE ) 5216  Œue ; 5218  çl£ ; 5219 } } 5221 ušt32_t $btd_ad­‹r_g‘_þass ( btd_ad­‹r * ad­‹r ) 5223  ad­‹r -> dev_þass ; 5224 } } 5226 cÚ¡ * $btd_ad­‹r_g‘_Çme ( btd_ad­‹r * ad­‹r ) 5228 ià( ad­‹r -> ¡Üed_®Ÿs ) 5229  ad­‹r -> ¡Üed_®Ÿs ; 5231 ià( ad­‹r -> sy¡em_Çme ) 5232  ad­‹r -> sy¡em_Çme ; 5234  NULL ; 5235 } } 5237  $ad­‹r_cÚÃù_li¡_add ( btd_ad­‹r * ad­‹r , 5238  btd_deviû * deviû ) 5245 ià( deviû =ð ad­‹r -> cÚÃù_Ë ) 5246 ad­‹r -> cÚÃù_Ë = NULL ; 5253 ià( k”Ãl_cÚn_cÚŒÞ ) 5256 ià( `g_¦i¡_fšd ( ad­‹r -> cÚÃù_li¡ , deviû )) { 5257 `DBG ("ignoring‡lready‡dded device %s", 5258 `deviû_g‘_·th ( deviû )); 5259  dÚe ; 5262 ià(!( ad­‹r -> suµÜ‹d_£‰šgs & MGMT_SETTING_LE )) { 5263 `”rÜ ("Can't‡dd %so‚on-LE capable‡dapter connect†ist", 5264 `deviû_g‘_·th ( deviû )); 5265  - ENOTSUP ; 5268 ad­‹r -> cÚÃù_li¡ = `g_¦i¡_­³nd ×d­‹r->cÚÃù_li¡, deviû ); 5269 `DBG ("% addedØ%s' cÚÃù_li¡", `deviû_g‘_·th ( deviû ), 5270 ad­‹r -> sy¡em_Çme ); 5272 dÚe : 5273 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 5276 `Œigg”_·ssive_sÿšg ( ad­‹r ); 5279 } } 5281  $ad­‹r_cÚÃù_li¡_»move ( btd_ad­‹r * ad­‹r , 5282  btd_deviû * deviû ) 5289 ià( deviû =ð ad­‹r -> cÚÃù_Ë ) 5290 ad­‹r -> cÚÃù_Ë = NULL ; 5292 ià( k”Ãl_cÚn_cÚŒÞ ) 5295 ià(! `g_¦i¡_fšd ( ad­‹r -> cÚÃù_li¡ , deviû )) { 5296 `DBG ("device %s is‚ot onhe†ist, ignoring", 5297 `deviû_g‘_·th ( deviû )); 5301 ad­‹r -> cÚÃù_li¡ = `g_¦i¡_»move ×d­‹r->cÚÃù_li¡, deviû ); 5302 `DBG ("% »moved from %s' cÚÃù_li¡", `deviû_g‘_·th ( deviû ), 5303 ad­‹r -> sy¡em_Çme ); 5305 ià(! ad­‹r -> cÚÃù_li¡ ) { 5306 `¡Ý_·ssive_sÿšg ( ad­‹r ); 5310 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 5313 `Œigg”_·ssive_sÿšg ( ad­‹r ); 5314 } } 5316  $add_wh™–i¡_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 5317 cÚ¡ * ·¿m , * u£r_d©a ) 5319 cÚ¡  mgmt_½_add_deviû * ½ = ·¿m ; 5320  btd_ad­‹r * ad­‹r = u£r_d©a ; 5321  btd_deviû * dev ; 5322  addr [18]; 5324 ià( Ëngth < (* ½ )) { 5325 `”rÜ ("Too small Add Device completeƒvent"); 5329 `ba2¡r (& ½ -> addr . bdaddr ,‡ddr); 5331 dev = `btd_ad­‹r_fšd_deviû ( ad­‹r , & ½ -> addr . bdaddr , 5332 ½ -> addr . ty³ ); 5333 ià(! dev ) { 5334 `”rÜ ("Add Deviû com¶‘fÜ unknowÀdeviû %s", addr ); 5338 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 5339 `”rÜ ("Failedo‡dd device %s: %s (0x%02x)", 5340 addr , `mgmt_”r¡r ( ¡©us ), status); 5344 `DBG ("% addedØk”ÃÈwh™–i¡", addr ); 5345 } } 5347  $ad­‹r_wh™–i¡_add ( btd_ad­‹r * ad­‹r ,  btd_deviû * dev ) 5349  mgmt_ý_add_deviû ý ; 5351 ià(! k”Ãl_cÚn_cÚŒÞ ) 5354 `mem£t (& ý , 0, (cp)); 5355 `baýy (& ý . addr . bdaddr , `deviû_g‘_add»ss ( dev )); 5356 ý . addr . ty³ = BDADDR_BREDR ; 5357 ý . aùiÚ = 0x01; 5359 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_ADD_DEVICE , 5360 ad­‹r -> dev_id , ( ý ), &cp, 5361 add_wh™–i¡_com¶‘e , ad­‹r , NULL ); 5362 } } 5364  $»move_wh™–i¡_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 5365 cÚ¡ * ·¿m , * u£r_d©a ) 5367 cÚ¡  mgmt_½_»move_deviû * ½ = ·¿m ; 5368  addr [18]; 5370 ià( Ëngth < (* ½ )) { 5371 `”rÜ ("Too small Remove Device completeƒvent"); 5375 `ba2¡r (& ½ -> addr . bdaddr ,‡ddr); 5377 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 5378 `”rÜ ("Failedo„emove device %s: %s (0x%02x)", 5379 addr , `mgmt_”r¡r ( ¡©us ), status); 5383 `DBG ("% »moved from k”ÃÈwh™–i¡", addr ); 5384 } } 5386  $ad­‹r_wh™–i¡_»move ( btd_ad­‹r * ad­‹r ,  btd_deviû * dev ) 5388  mgmt_ý_»move_deviû ý ; 5390 ià(! k”Ãl_cÚn_cÚŒÞ ) 5393 `mem£t (& ý , 0, (cp)); 5394 `baýy (& ý . addr . bdaddr , `deviû_g‘_add»ss ( dev )); 5395 ý . addr . ty³ = BDADDR_BREDR ; 5397 `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_REMOVE_DEVICE , 5398 ad­‹r -> dev_id , ( ý ), &cp, 5399 »move_wh™–i¡_com¶‘e , ad­‹r , NULL ); 5400 } } 5402  $add_deviû_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 5403 cÚ¡ * ·¿m , * u£r_d©a ) 5405 cÚ¡  mgmt_½_add_deviû * ½ = ·¿m ; 5406  btd_ad­‹r * ad­‹r = u£r_d©a ; 5407  btd_deviû * dev ; 5408  addr [18]; 5410 ià( Ëngth < (* ½ )) { 5411 `”rÜ ("Too small Add Device completeƒvent"); 5415 `ba2¡r (& ½ -> addr . bdaddr ,‡ddr); 5417 dev = `btd_ad­‹r_fšd_deviû ( ad­‹r , & ½ -> addr . bdaddr , 5418 ½ -> addr . ty³ ); 5419 ià(! dev ) { 5420 `”rÜ ("Add Deviû com¶‘fÜ unknowÀdeviû %s", addr ); 5424 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 5425 `”rÜ ("Failedo‡dd device %s (%u): %s (0x%02x)", 5426 addr , ½ ->addr. ty³ , `mgmt_”r¡r ( ¡©us ), status); 5427 ad­‹r -> cÚÃù_li¡ = `g_¦i¡_»move (adapter->connect_list, 5428 dev ); 5432 `DBG ("% (%uèaddedØk”ÃÈcÚÃù†i¡", addr , ½ ->addr. ty³ ); 5433 } } 5435  $ad­‹r_auto_cÚÃù_add ( btd_ad­‹r * ad­‹r , 5436  btd_deviû * deviû ) 5438  mgmt_ý_add_deviû ý ; 5439 cÚ¡ bdaddr_t * bdaddr ; 5440 ušt8_t bdaddr_ty³ ; 5441  id ; 5443 ià(! k”Ãl_cÚn_cÚŒÞ ) 5446 ià( `g_¦i¡_fšd ( ad­‹r -> cÚÃù_li¡ , deviû )) { 5447 `DBG ("ignoring‡lready‡dded device %s", 5448 `deviû_g‘_·th ( deviû )); 5452 bdaddr = `deviû_g‘_add»ss ( deviû ); 5453 bdaddr_ty³ = `btd_deviû_g‘_bdaddr_ty³ ( deviû ); 5455 ià( bdaddr_ty³ =ð BDADDR_BREDR ) { 5456 `DBG ("auto-connection feature is‚ot‡vaiable for BR/EDR"); 5460 `mem£t (& ý , 0, (cp)); 5461 `baýy (& ý . addr . bdaddr , bdaddr); 5462 ý . addr . ty³ = bdaddr_ty³ ; 5463 ý . aùiÚ = 0x02; 5465 id = `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_ADD_DEVICE , 5466 ad­‹r -> dev_id , ( ý ), &ý, add_deviû_com¶‘e , 5467 ad­‹r , NULL ); 5468 ià( id == 0) 5471 ad­‹r -> cÚÃù_li¡ = `g_¦i¡_­³nd ×d­‹r->cÚÃù_li¡, deviû ); 5472 } } 5474  $»move_deviû_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 5475 cÚ¡ * ·¿m , * u£r_d©a ) 5477 cÚ¡  mgmt_½_»move_deviû * ½ = ·¿m ; 5478  addr [18]; 5480 ià( Ëngth < (* ½ )) { 5481 `”rÜ ("Too small Remove Device completeƒvent"); 5485 `ba2¡r (& ½ -> addr . bdaddr ,‡ddr); 5487 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 5488 `”rÜ ("Failedo„emove device %s (%u): %s (0x%02x)", 5489 addr , ½ ->addr. ty³ , `mgmt_”r¡r ( ¡©us ), status); 5493 `DBG ("% (%uè»moved from k”ÃÈcÚÃù†i¡", addr , ½ ->addr. ty³ ); 5494 } } 5496  $ad­‹r_auto_cÚÃù_»move ( btd_ad­‹r * ad­‹r , 5497  btd_deviû * deviû ) 5499  mgmt_ý_»move_deviû ý ; 5500 cÚ¡ bdaddr_t * bdaddr ; 5501 ušt8_t bdaddr_ty³ ; 5502  id ; 5504 ià(! k”Ãl_cÚn_cÚŒÞ ) 5507 ià(! `g_¦i¡_fšd ( ad­‹r -> cÚÃù_li¡ , deviû )) { 5508 `DBG ("ignÜšg‚Ù‡dded deviû %s", `deviû_g‘_·th ( deviû )); 5512 bdaddr = `deviû_g‘_add»ss ( deviû ); 5513 bdaddr_ty³ = `btd_deviû_g‘_bdaddr_ty³ ( deviû ); 5515 ià( bdaddr_ty³ =ð BDADDR_BREDR ) { 5516 `DBG ("auto-connection feature is‚ot‡vaiable for BR/EDR"); 5520 `mem£t (& ý , 0, (cp)); 5521 `baýy (& ý . addr . bdaddr , bdaddr); 5522 ý . addr . ty³ = bdaddr_ty³ ; 5524 id = `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_REMOVE_DEVICE , 5525 ad­‹r -> dev_id , ( ý ), &cp, 5526 »move_deviû_com¶‘e , ad­‹r , NULL ); 5527 ià( id == 0) 5530 ad­‹r -> cÚÃù_li¡ = `g_¦i¡_»move ×d­‹r->cÚÃù_li¡, deviû ); 5531 } } 5533  $ad­‹r_¡¬t ( btd_ad­‹r * ad­‹r ) 5535 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 5536 ADAPTER_INTERFACE , "Powered"); 5538 `DBG ("ad­‹¸% ha b“À’abËd", ad­‹r -> ·th ); 5540 `Œigg”_·ssive_sÿšg ( ad­‹r ); 5541 } } 5543  $»¶y_³ndšg_»que¡s ( btd_ad­‹r * ad­‹r ) 5545 GSLi¡ * l ; 5547 ià(! ad­‹r ) 5551  l = ad­‹r -> deviûs ;†;† =†-> Ãxt ) { 5552  btd_deviû * deviû = l -> d©a ; 5554 ià( `deviû_is_bÚdšg ( deviû , NULL )) 5555 `deviû_bÚdšg_çžed ( deviû , 5556 HCI_OE_USER_ENDED_CONNECTION ); 5558 } } 5560  $»move_driv” ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 5562  btd_ad­‹r_driv” * driv” = d©a ; 5563  btd_ad­‹r * ad­‹r = u£r_d©a ; 5565 ià( driv” -> »move ) 5566 driv” -> `»move ( ad­‹r ); 5567 } } 5569  $»move_´ofže ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 5571  btd_´ofže * ´ofže = d©a ; 5572  btd_ad­‹r * ad­‹r = u£r_d©a ; 5574 ià( ´ofže -> ad­‹r_»move ) 5575 ´ofže -> `ad­‹r_»move Õrofže, ad­‹r ); 5576 } } 5578  $uÆßd_driv”s ( btd_ad­‹r * ad­‹r ) 5580 `g_¦i¡_fÜ—ch ( ad­‹r -> driv”s , »move_driv” ,‡dapter); 5581 `g_¦i¡_ä“ ( ad­‹r -> driv”s ); 5582 ad­‹r -> driv”s = NULL ; 5584 `g_¦i¡_fÜ—ch ( ad­‹r -> ´ofžes , »move_´ofže ,‡dapter); 5585 `g_¦i¡_ä“ ( ad­‹r -> ´ofžes ); 5586 ad­‹r -> ´ofžes = NULL ; 5587 } } 5589  $ä“_£rviû_auth ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 5591  £rviû_auth * auth = d©a ; 5593 `g_ä“ ( auth ); 5594 } } 5596  $ad­‹r_ä“ ( gpoš‹r u£r_d©a ) 5598  btd_ad­‹r * ad­‹r = u£r_d©a ; 5600 `DBG ("%p", ad­‹r ); 5602 ià( ad­‹r -> lßd_Éks_timeout > 0) 5603 `g_sourû_»move ( ad­‹r -> lßd_Éks_timeout ); 5605 ià( ad­‹r -> cÚfœm_Çme_timeout > 0) 5606 `g_sourû_»move ( ad­‹r -> cÚfœm_Çme_timeout ); 5608 ià( ad­‹r -> ·œ_deviû_timeout > 0) 5609 `g_sourû_»move ( ad­‹r -> ·œ_deviû_timeout ); 5611 ià( ad­‹r -> auth_idË_id ) 5612 `g_sourû_»move ( ad­‹r -> auth_idË_id ); 5614 `g_queue_fÜ—ch ( ad­‹r -> auths , ä“_£rviû_auth , NULL ); 5615 `g_queue_ä“ ( ad­‹r -> auths ); 5624 `mgmt_uÄegi¡”_šdex ( ad­‹r -> mgmt ,‡d­‹r-> dev_id ); 5630 `mgmt_ÿnûl_šdex ( ad­‹r -> mgmt ,‡d­‹r-> dev_id ); 5632 `mgmt_uÄef ( ad­‹r -> mgmt ); 5634 `sdp_li¡_ä“ ( ad­‹r -> £rviûs , NULL ); 5636 `g_¦i¡_ä“ ( ad­‹r -> cÚÃùiÚs ); 5638 `g_ä“ ( ad­‹r -> ·th ); 5639 `g_ä“ ( ad­‹r -> Çme ); 5640 `g_ä“ ( ad­‹r -> shÜt_Çme ); 5641 `g_ä“ ( ad­‹r -> sy¡em_Çme ); 5642 `g_ä“ ( ad­‹r -> ¡Üed_®Ÿs ); 5643 `g_ä“ ( ad­‹r -> cu¼’t_®Ÿs ); 5644 `ä“ ( ad­‹r -> mod®Ÿs ); 5645 `g_ä“ ( ad­‹r ); 5646 } } 5648  btd_ad­‹r * $btd_ad­‹r_»f ( btd_ad­‹r * ad­‹r ) 5650 `__sync_ãtch_ªd_add (& ad­‹r -> »f_couÁ , 1); 5652  ad­‹r ; 5653 } } 5655  $btd_ad­‹r_uÄef ( btd_ad­‹r * ad­‹r ) 5657 ià( `__sync_sub_ªd_ãtch (& ad­‹r -> »f_couÁ , 1)) 5660 ià(! ad­‹r -> ·th ) { 5661 `DBG ("F»ešg‡d­‹¸%u", ad­‹r -> dev_id ); 5663 `ad­‹r_ä“ ( ad­‹r ); 5667 `DBG ("F»ešg‡d­‹¸%s", ad­‹r -> ·th ); 5669 `g_dbus_uÄegi¡”_š‹rçû ( dbus_cÚn , ad­‹r -> ·th , 5670 ADAPTER_INTERFACE ); 5671 } } 5673  $cÚv”t_Çmes_’Œy (* key , * v®ue , * u£r_d©a ) 5675 * add»ss = u£r_d©a ; 5676 * ¡r = key ; 5677  fž’ame [ PATH_MAX ]; 5678 GKeyFže * key_fže ; 5679 * d©a ; 5680 gsize Ëngth = 0; 5682 ià( `¡rchr ( key , '#')) 5683 ¡r [17] = '\0'; 5685 ià( `bachk ( ¡r ) != 0) 5688 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/ÿche/%s", add»ss , ¡r ); 5689 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 5691 key_fže = `g_key_fže_Ãw (); 5692 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 5693 `g_key_fže_£t_¡ršg ( key_fže , "G’”®", "Name", v®ue ); 5695 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 5696 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 5697 `g_ä“ ( d©a ); 5699 `g_key_fže_ä“ ( key_fže ); 5700 } } 5702  sdeviû_cÚv”‹r { 5703 * madd»ss ; 5704 (* mcb )( GKeyFže * mkey_fže , * mv®ue ); 5705 gboÞ—n mfÜû ; 5708  $£t_deviû_ty³ ( GKeyFže * key_fže ,  ty³ ) 5710 * ‹chno ; 5711 * addr_ty³ = NULL ; 5712 * ¡r ; 5714  ty³ ) { 5715  BDADDR_BREDR : 5716 ‹chno = "BR/EDR"; 5718  BDADDR_LE_PUBLIC : 5719 ‹chno = "LE"; 5720 addr_ty³ = "public"; 5722  BDADDR_LE_RANDOM : 5723 ‹chno = "LE"; 5724 addr_ty³ = "static"; 5730 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , "General", 5731 "SuµÜ‹dTechnÞog›s", NULL ); 5732 ià(! ¡r ) 5733 `g_key_fže_£t_¡ršg ( key_fže , "General", 5734 "SuµÜ‹dTechnÞog›s", ‹chno ); 5735 ià(! `¡r¡r ( ¡r , ‹chno )) 5736 `g_key_fže_£t_¡ršg ( key_fže , "General", 5739 `g_ä“ ( ¡r ); 5741 ià( addr_ty³ ) 5742 `g_key_fže_£t_¡ršg ( key_fže , "General", "AddressType", 5743 addr_ty³ ); 5744 } } 5746  $cÚv”t_®Ÿ£s_’Œy ( GKeyFže * key_fže , * v®ue ) 5748 `g_key_fže_£t_¡ršg ( key_fže , "G’”®", "AlŸs", v®ue ); 5749 } } 5751  $cÚv”t_Œu¡s_’Œy ( GKeyFže * key_fže , * v®ue ) 5753 `g_key_fže_£t_boÞ—n ( key_fže , "G’”®", "Tru¡ed", TRUE ); 5754 } } 5756  $cÚv”t_þas£s_’Œy ( GKeyFže * key_fže , * v®ue ) 5758 `g_key_fže_£t_¡ršg ( key_fže , "G’”®", "CÏss", v®ue ); 5759 } } 5761  $cÚv”t_blocked_’Œy ( GKeyFže * key_fže , * v®ue ) 5763 `g_key_fže_£t_boÞ—n ( key_fže , "G’”®", "Blocked", TRUE ); 5764 } } 5766  $cÚv”t_did_’Œy ( GKeyFže * key_fže , * v®ue ) 5768 * v’dÜ_¡r , * ´oduù_¡r , * v”siÚ_¡r ; 5769 ušt16_t v® ; 5771 v’dÜ_¡r = `¡rchr ( v®ue , ' '); 5772 ià(! v’dÜ_¡r ) 5775 *( v’dÜ_¡r ++) = 0; 5777 ià( `g_¡r_equ® ( v®ue , "FFFF")) 5780 ´oduù_¡r = `¡rchr ( v’dÜ_¡r , ' '); 5781 ià(! ´oduù_¡r ) 5784 *( ´oduù_¡r ++) = 0; 5786 v”siÚ_¡r = `¡rchr ( ´oduù_¡r , ' '); 5787 ià(! v”siÚ_¡r ) 5790 *( v”siÚ_¡r ++) = 0; 5792 v® = ( ušt16_t è `¡¹Þ ( v®ue , NULL , 16); 5793 `g_key_fže_£t_š‹g” ( key_fže , "DeviûID", "Sourû", v® ); 5795 v® = ( ušt16_t è `¡¹Þ ( v’dÜ_¡r , NULL , 16); 5796 `g_key_fže_£t_š‹g” ( key_fže , "DeviûID", "V’dÜ", v® ); 5798 v® = ( ušt16_t è `¡¹Þ ( ´oduù_¡r , NULL , 16); 5799 `g_key_fže_£t_š‹g” ( key_fže , "DeviûID", "Produù", v® ); 5801 v® = ( ušt16_t è `¡¹Þ ( v”siÚ_¡r , NULL , 16); 5802 `g_key_fže_£t_š‹g” ( key_fže , "DeviûID", "V”siÚ", v® ); 5803 } } 5805  $cÚv”t_lškkey_’Œy ( GKeyFže * key_fže , * v®ue ) 5807 * ty³_¡r , * Ëngth_¡r , * ¡r ; 5808  v® ; 5810 ty³_¡r = `¡rchr ( v®ue , ' '); 5811 ià(! ty³_¡r ) 5814 *( ty³_¡r ++) = 0; 5816 Ëngth_¡r = `¡rchr ( ty³_¡r , ' '); 5817 ià(! Ëngth_¡r ) 5820 *( Ëngth_¡r ++) = 0; 5822 ¡r = `g_¡rcÚÿt ("0x", v®ue , NULL ); 5823 `g_key_fže_£t_¡ršg ( key_fže , "LškKey", "Key", ¡r ); 5824 `g_ä“ ( ¡r ); 5826 v® = `¡¹Þ ( ty³_¡r , NULL , 16); 5827 `g_key_fže_£t_š‹g” ( key_fže , "LškKey", "Ty³", v® ); 5829 v® = `¡¹Þ ( Ëngth_¡r , NULL , 16); 5830 `g_key_fže_£t_š‹g” ( key_fže , "LškKey", "PINL’gth", v® ); 5831 } } 5833  $cÚv”t_Ék_’Œy ( GKeyFže * key_fže , * v®ue ) 5835 * auth_¡r , * ¿nd_¡r , * ¡r ; 5836  i , »t ; 5837  auth , ma¡” , ’c_size ; 5838  ediv ; 5840 auth_¡r = `¡rchr ( v®ue , ' '); 5841 ià(! auth_¡r ) 5844 *( auth_¡r ++) = 0; 5846  i = 0, ¿nd_¡r = auth_¡r ; i < 4; i++) { 5847 ¿nd_¡r = `¡rchr (rand_str, ' '); 5848 ià(! ¿nd_¡r ||„and_str[1] == '\0') 5851 ¿nd_¡r ++; 5854 »t = `ssÿnf ( auth_¡r , " %hhd %hhd %hhd %hd", & auth , & ma¡” , 5855 & ’c_size , & ediv ); 5856 ià( »t < 4) 5859 ¡r = `g_¡rcÚÿt ("0x", v®ue , NULL ); 5860 `g_key_fže_£t_¡ršg ( key_fže , "LÚgT”mKey", "Key", ¡r ); 5861 `g_ä“ ( ¡r ); 5863 `g_key_fže_£t_š‹g” ( key_fže , "LÚgT”mKey", "Auth’tiÿ‹d", auth ); 5864 `g_key_fže_£t_š‹g” ( key_fže , "LÚgT”mKey", "Ma¡”", ma¡” ); 5865 `g_key_fže_£t_š‹g” ( key_fže , "LÚgT”mKey", "EncSize", ’c_size ); 5866 `g_key_fže_£t_š‹g” ( key_fže , "LÚgT”mKey", "EDiv", ediv ); 5868 ¡r = `g_¡rcÚÿt ("0x", ¿nd_¡r , NULL ); 5869 `g_key_fže_£t_¡ršg ( key_fže , "LÚgT”mKey", "Rªd", ¡r ); 5870 `g_ä“ ( ¡r ); 5871 } } 5873  $cÚv”t_´ofžes_’Œy ( GKeyFže * key_fže , * v®ue ) 5875 `g_¡rd–im™ ( v®ue , " ", ';'); 5876 `g_key_fže_£t_¡ršg ( key_fže , "G’”®", "S”viûs", v®ue ); 5877 } } 5879  $cÚv”t_­³¬ªûs_’Œy ( GKeyFže * key_fže , * v®ue ) 5881 `g_key_fže_£t_¡ršg ( key_fže , "G’”®", "Aµ—¿nû", v®ue ); 5882 } } 5884  $cÚv”t_’Œy (* key , * v®ue , * u£r_d©a ) 5886  deviû_cÚv”‹r * cÚv”‹r = u£r_d©a ; 5887  ty³ = BDADDR_BREDR ; 5888  fž’ame [ PATH_MAX ]; 5889 GKeyFže * key_fže ; 5890 * d©a ; 5891 gsize Ëngth = 0; 5893 ià( `¡rchr ( key , '#')) { 5894 key [17] = '\0'; 5895 ty³ = key [18] - '0'; 5898 ià( `bachk ( key ) != 0) 5901 ià( cÚv”‹r -> fÜû =ð FALSE ) { 5902  ¡© ¡ ; 5903  ”r ; 5905 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s", 5906 cÚv”‹r -> add»ss , key ); 5908 ”r = `¡© ( fž’ame , & ¡ ); 5909 ià( ”r || ! `S_ISDIR ( ¡ . ¡_mode )) 5913 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/info", 5914 cÚv”‹r -> add»ss , key ); 5916 key_fže = `g_key_fže_Ãw (); 5917 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 5919 `£t_deviû_ty³ ( key_fže , ty³ ); 5921 cÚv”‹r -> `cb ( key_fže , v®ue ); 5923 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 5924 ià( Ëngth > 0) { 5925 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 5926 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 5929 `g_ä“ ( d©a ); 5931 `g_key_fže_ä“ ( key_fže ); 5932 } } 5934  cÚv”t_fže (* fže , * add»ss , 5935 (* cb )( GKeyFže * key_fže , * v®ue ), 5936 gboÞ—n fÜû ) 5938  fž’ame [ PATH_MAX ]; 5939  deviû_cÚv”‹r cÚv”‹r ; 5941 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s", add»ss , fže ); 5943 cÚv”‹r . add»ss =‡ddress; 5944 cÚv”‹r . cb = cb; 5945 cÚv”‹r . fÜû = force; 5947 `‹xtfže_fÜ—ch ( fž’ame , cÚv”t_’Œy , & cÚv”‹r ); 5948 } } 5950  gboÞ—n $»cÜd_has_uuid (cÚ¡ sdp_»cÜd_t * »c , 5951 cÚ¡ * ´ofže_uuid ) 5953 sdp_li¡_t * ·t ; 5955  ·t = »c -> ·‰”n ;…© !ð NULL ;…© =…©-> Ãxt ) { 5956 * uuid ; 5957  »t ; 5959 uuid = `bt_uuid2¡ršg ( ·t -> d©a ); 5960 ià(! uuid ) 5963 »t = `¡rÿ£cmp ( uuid , ´ofže_uuid ); 5965 `ä“ ( uuid ); 5967 ià( »t == 0) 5968  TRUE ; 5971  FALSE ; 5972 } } 5974  $¡Üe_©Œibu‹_uuid ( GKeyFže * key_fže , ušt16_t ¡¬t , 5975 ušt16_t ’d , * ©t_uuid , 5976 uuid_t uuid ) 5978  hªdË [6], uuid_¡r [33]; 5979  i ; 5981  uuid . ty³ ) { 5982  SDP_UUID16 : 5983 `¥rštf ( uuid_¡r , "%4.4X", uuid . v®ue . uuid16 ); 5985  SDP_UUID32 : 5986 `¥rštf ( uuid_¡r , "%8.8X", uuid . v®ue . uuid32 ); 5988  SDP_UUID128 : 5989  i = 0; i < 16; i++) 5990 `¥rštf ( uuid_¡r + ( i * 2), "%2.2X", 5991 uuid . v®ue . uuid128 . d©a [ i ]); 5994 uuid_¡r [0] = '\0'; 5997 `¥rštf ( hªdË , "%hu", ¡¬t ); 5998 `g_key_fže_£t_¡ršg ( key_fže , hªdË , "UUID", ©t_uuid ); 5999 `g_key_fže_£t_¡ršg ( key_fže , hªdË , "V®ue", uuid_¡r ); 6000 `g_key_fže_£t_š‹g” ( key_fže , hªdË , "EndGroupHªdË", ’d ); 6001 } } 6003  $¡Üe_sdp_»cÜd (* loÿl , * ³” ,  hªdË , * v®ue ) 6005  fž’ame [ PATH_MAX ]; 6006 GKeyFže * key_fže ; 6007  hªdË_¡r [11]; 6008 * d©a ; 6009 gsize Ëngth = 0; 6011 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/ÿche/%s", loÿl , ³” ); 6013 key_fže = `g_key_fže_Ãw (); 6014 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 6016 `¥rštf ( hªdË_¡r , "0x%8.8X", hªdË ); 6017 `g_key_fže_£t_¡ršg ( key_fže , "S”viûRecÜds", hªdË_¡r , v®ue ); 6019 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 6020 ià( Ëngth > 0) { 6021 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 6022 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 6025 `g_ä“ ( d©a ); 6027 `g_key_fže_ä“ ( key_fže ); 6028 } } 6030  $cÚv”t_sdp_’Œy (* key , * v®ue , * u£r_d©a ) 6032 * ¤c_addr = u£r_d©a ; 6033  d¡_addr [18]; 6034  ty³ = BDADDR_BREDR ; 6035  hªdË , »t ; 6036  fž’ame [ PATH_MAX ]; 6037 GKeyFže * key_fže ; 6038  ¡© ¡ ; 6039 sdp_»cÜd_t * »c ; 6040 uuid_t uuid ; 6041 * ©t_uuid , * ´im_uuid ; 6042 ušt16_t ¡¬t = 0, ’d = 0, psm = 0; 6043  ”r ; 6044 * d©a ; 6045 gsize Ëngth = 0; 6047 »t = `ssÿnf ( key , "%17s#%hhu#%08X", d¡_addr , & ty³ , & hªdË ); 6048 ià( »t < 3) { 6049 »t = `ssÿnf ( key , "%17s#%08X", d¡_addr , & hªdË ); 6050 ià( »t < 2) 6054 ià( `bachk ( d¡_addr ) != 0) 6059 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s", ¤c_addr , d¡_addr ); 6061 ”r = `¡© ( fž’ame , & ¡ ); 6062 ià( ”r || ! `S_ISDIR ( ¡ . ¡_mode )) 6066 `¡Üe_sdp_»cÜd ( ¤c_addr , d¡_addr , hªdË , v®ue ); 6070 `sdp_uuid16_ü—‹ (& uuid , ATT_UUID ); 6071 ©t_uuid = `bt_uuid2¡ršg (& uuid ); 6073 `sdp_uuid16_ü—‹ (& uuid , GATT_PRIM_SVC_UUID ); 6074 ´im_uuid = `bt_uuid2¡ršg (& uuid ); 6076 »c = `»cÜd_äom_¡ršg ( v®ue ); 6078 ià( `»cÜd_has_uuid ( »c , ©t_uuid )) 6079  çžed ; 6081 ià(! `g©t_·r£_»cÜd ( »c , & uuid , & psm , & ¡¬t , & ’d )) 6082  çžed ; 6084 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/©Œibu‹s", ¤c_addr , 6085 d¡_addr ); 6087 key_fže = `g_key_fže_Ãw (); 6088 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 6090 `¡Üe_©Œibu‹_uuid ( key_fže , ¡¬t , ’d , ´im_uuid , uuid ); 6092 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 6093 ià( Ëngth > 0) { 6094 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 6095 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 6098 `g_ä“ ( d©a ); 6099 `g_key_fže_ä“ ( key_fže ); 6101 çžed : 6102 `sdp_»cÜd_ä“ ( »c ); 6103 `ä“ ( ´im_uuid ); 6104 `ä“ ( ©t_uuid ); 6105 } } 6107  $cÚv”t_´im¬›s_’Œy (* key , * v®ue , * u£r_d©a ) 6109 * add»ss = u£r_d©a ; 6110  deviû_ty³ = -1; 6111 uuid_t uuid ; 6112 ** £rviûs , ** £rviû , * ´im_uuid ; 6113  fž’ame [ PATH_MAX ]; 6114 GKeyFže * key_fže ; 6115  »t ; 6116 ušt16_t ¡¬t , ’d ; 6117  uuid_¡r [ MAX_LEN_UUID_STR + 1]; 6118 * d©a ; 6119 gsize Ëngth = 0; 6121 ià( `¡rchr ( key , '#')) { 6122 key [17] = '\0'; 6123 deviû_ty³ = key [18] - '0'; 6126 ià( `bachk ( key ) != 0) 6129 £rviûs = `g_¡r¥l™ ( v®ue , " ", 0); 6130 ià( £rviûs =ð NULL ) 6133 `sdp_uuid16_ü—‹ (& uuid , GATT_PRIM_SVC_UUID ); 6134 ´im_uuid = `bt_uuid2¡ršg (& uuid ); 6136 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/©Œibu‹s", add»ss , 6137 key ); 6138 key_fže = `g_key_fže_Ãw (); 6139 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 6141  £rviû = £rviûs ; *service; service++) { 6142 »t = `ssÿnf (* £rviû , "%04hX#%04hX#%s", & ¡¬t , & ’d , 6143 uuid_¡r ); 6144 ià( »t < 3) 6147 `bt_¡ršg2uuid (& uuid , uuid_¡r ); 6148 `sdp_uuid128_to_uuid (& uuid ); 6150 `¡Üe_©Œibu‹_uuid ( key_fže , ¡¬t , ’d , ´im_uuid , uuid ); 6153 `g_¡rä“v ( £rviûs ); 6155 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 6156 ià( Ëngth == 0) 6157  ’d ; 6159 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 6160 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 6162 ià( deviû_ty³ < 0) 6163  ’d ; 6165 `g_ä“ ( d©a ); 6166 `g_key_fže_ä“ ( key_fže ); 6168 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/šfo", add»ss , key ); 6170 key_fže = `g_key_fže_Ãw (); 6171 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 6172 `£t_deviû_ty³ ( key_fže , deviû_ty³ ); 6174 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 6175 ià( Ëngth > 0) { 6176 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 6177 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 6180 ’d : 6181 `g_ä“ ( d©a ); 6182 `ä“ ( ´im_uuid ); 6183 `g_key_fže_ä“ ( key_fže ); 6184 } } 6186  $cÚv”t_ccc_’Œy (* key , * v®ue , * u£r_d©a ) 6188 * ¤c_addr = u£r_d©a ; 6189  d¡_addr [18]; 6190  ty³ = BDADDR_BREDR ; 6191 ušt16_t hªdË ; 6192  »t , ”r ; 6193  fž’ame [ PATH_MAX ]; 6194 GKeyFže * key_fže ; 6195  ¡© ¡ ; 6196  group [6]; 6197 * d©a ; 6198 gsize Ëngth = 0; 6200 »t = `ssÿnf ( key , "%17s#%hhu#%04hX", d¡_addr , & ty³ , & hªdË ); 6201 ià( »t < 3) 6204 ià( `bachk ( d¡_addr ) != 0) 6209 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s", ¤c_addr , d¡_addr ); 6211 ”r = `¡© ( fž’ame , & ¡ ); 6212 ià( ”r || ! `S_ISDIR ( ¡ . ¡_mode )) 6215 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/ccc", ¤c_addr , 6216 d¡_addr ); 6217 key_fže = `g_key_fže_Ãw (); 6218 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 6220 `¥rštf ( group , "%hu", hªdË ); 6221 `g_key_fže_£t_¡ršg ( key_fže , group , "V®ue", v®ue ); 6223 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 6224 ià( Ëngth > 0) { 6225 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 6226 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 6229 `g_ä“ ( d©a ); 6230 `g_key_fže_ä“ ( key_fže ); 6231 } } 6233  $cÚv”t_g©t_’Œy (* key , * v®ue , * u£r_d©a ) 6235 * ¤c_addr = u£r_d©a ; 6236  d¡_addr [18]; 6237  ty³ = BDADDR_BREDR ; 6238 ušt16_t hªdË ; 6239  »t , ”r ; 6240  fž’ame [ PATH_MAX ]; 6241 GKeyFže * key_fže ; 6242  ¡© ¡ ; 6243  group [6]; 6244 * d©a ; 6245 gsize Ëngth = 0; 6247 »t = `ssÿnf ( key , "%17s#%hhu#%04hX", d¡_addr , & ty³ , & hªdË ); 6248 ià( »t < 3) 6251 ià( `bachk ( d¡_addr ) != 0) 6256 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s", ¤c_addr , d¡_addr ); 6258 ”r = `¡© ( fž’ame , & ¡ ); 6259 ià( ”r || ! `S_ISDIR ( ¡ . ¡_mode )) 6262 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/g©t", ¤c_addr , 6263 d¡_addr ); 6264 key_fže = `g_key_fže_Ãw (); 6265 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 6267 `¥rštf ( group , "%hu", hªdË ); 6268 `g_key_fže_£t_¡ršg ( key_fže , group , "V®ue", v®ue ); 6270 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 6271 ià( Ëngth > 0) { 6272 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 6273 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 6276 `g_ä“ ( d©a ); 6277 `g_key_fže_ä“ ( key_fže ); 6278 } } 6280  $cÚv”t_´oxim™y_’Œy (* key , * v®ue , * u£r_d©a ) 6282 * ¤c_addr = u£r_d©a ; 6283 * ®”t ; 6284  fž’ame [ PATH_MAX ]; 6285 GKeyFže * key_fže ; 6286  ¡© ¡ ; 6287  ”r ; 6288 * d©a ; 6289 gsize Ëngth = 0; 6291 ià(! `¡rchr ( key , '#')) 6294 key [17] = '\0'; 6295 ®”t = & key [18]; 6297 ià( `bachk ( key ) != 0) 6302 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s", ¤c_addr , key ); 6304 ”r = `¡© ( fž’ame , & ¡ ); 6305 ià( ”r || ! `S_ISDIR ( ¡ . ¡_mode )) 6308 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/´oxim™y", ¤c_addr , 6309 key ); 6310 key_fže = `g_key_fže_Ãw (); 6311 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 6313 `g_key_fže_£t_¡ršg ( key_fže , ®”t , "Lev–", v®ue ); 6315 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 6316 ià( Ëngth > 0) { 6317 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 6318 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 6321 `g_ä“ ( d©a ); 6322 `g_key_fže_ä“ ( key_fže ); 6323 } } 6325  $cÚv”t_deviû_¡Üage ( btd_ad­‹r * ad­‹r ) 6327  fž’ame [ PATH_MAX ]; 6328  add»ss [18]; 6330 `ba2¡r (& ad­‹r -> bdaddr , add»ss ); 6333 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/Çmes", add»ss ); 6334 `‹xtfže_fÜ—ch ( fž’ame , cÚv”t_Çmes_’Œy , add»ss ); 6337 `cÚv”t_fže ("®Ÿ£s", add»ss , cÚv”t_®Ÿ£s_’Œy , TRUE ); 6340 `cÚv”t_fže ("Œu¡s", add»ss , cÚv”t_Œu¡s_’Œy , TRUE ); 6343 `cÚv”t_fže ("blocked", add»ss , cÚv”t_blocked_’Œy , TRUE ); 6346 `cÚv”t_fže ("´ofžes", add»ss , cÚv”t_´ofžes_’Œy , TRUE ); 6349 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/´im¬›s", add»ss ); 6350 `‹xtfže_fÜ—ch ( fž’ame , cÚv”t_´im¬›s_’Œy , add»ss ); 6353 `cÚv”t_fže ("lškkeys", add»ss , cÚv”t_lškkey_’Œy , TRUE ); 6356 `cÚv”t_fže ("lÚg‹rmkeys", add»ss , cÚv”t_Ék_’Œy , TRUE ); 6359 `cÚv”t_fže ("þas£s", add»ss , cÚv”t_þas£s_’Œy , FALSE ); 6362 `cÚv”t_fže ("did", add»ss , cÚv”t_did_’Œy , FALSE ); 6365 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/sdp", add»ss ); 6366 `‹xtfže_fÜ—ch ( fž’ame , cÚv”t_sdp_’Œy , add»ss ); 6369 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/ccc", add»ss ); 6370 `‹xtfže_fÜ—ch ( fž’ame , cÚv”t_ccc_’Œy , add»ss ); 6373 `cÚv”t_fže ("­³¬ªûs", add»ss , cÚv”t_­³¬ªûs_’Œy , FALSE ); 6376 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/g©t", add»ss ); 6377 `‹xtfže_fÜ—ch ( fž’ame , cÚv”t_g©t_’Œy , add»ss ); 6380 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/´oxim™y", add»ss ); 6381 `‹xtfže_fÜ—ch ( fž’ame , cÚv”t_´oxim™y_’Œy , add»ss ); 6382 } } 6384  $cÚv”t_cÚfig ( btd_ad­‹r * ad­‹r , cÚ¡ * fž’ame , 6385 GKeyFže * key_fže ) 6387  add»ss [18]; 6388  ¡r [ MAX_NAME_LENGTH + 1]; 6389  cÚfig_·th [ PATH_MAX ]; 6390  timeout ; 6391 ušt8_t mode ; 6392 * d©a ; 6393 gsize Ëngth = 0; 6395 `ba2¡r (& ad­‹r -> bdaddr , add»ss ); 6396 `¢´štf ( cÚfig_·th , PATH_MAX , STORAGEDIR "/%s/cÚfig", add»ss ); 6398 ià( `»ad_·œabË_timeout ( add»ss , & timeout ) == 0) 6399 `g_key_fže_£t_š‹g” ( key_fže , "General", 6400 "PaœabËTimeout", timeout ); 6402 ià( `»ad_discov”abË_timeout ( add»ss , & timeout ) == 0) 6403 `g_key_fže_£t_š‹g” ( key_fže , "General", 6404 "Discov”abËTimeout", timeout ); 6406 ià( `»ad_Ú_mode ( add»ss , ¡r , (str)) == 0) { 6407 mode = `g‘_mode ( ¡r ); 6408 `g_key_fže_£t_boÞ—n ( key_fže , "General", "Discoverable", 6409 mode =ð MODE_DISCOVERABLE ); 6412 ià( `»ad_loÿl_Çme (& ad­‹r -> bdaddr , ¡r ) == 0) 6413 `g_key_fže_£t_¡ršg ( key_fže , "G’”®", "AlŸs", ¡r ); 6415 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 6417 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 6418 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 6419 `g_ä“ ( d©a ); 6420 } } 6422  $fix_¡Üage ( btd_ad­‹r * ad­‹r ) 6424  fž’ame [ PATH_MAX ]; 6425  add»ss [18]; 6426 * cÚv”‹d ; 6428 `ba2¡r (& ad­‹r -> bdaddr , add»ss ); 6430 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/cÚfig", add»ss ); 6431 cÚv”‹d = `‹xtfže_g‘ ( fž’ame , "converted"); 6432 ià(! cÚv”‹d ) 6435 `ä“ ( cÚv”‹d ); 6437 `‹xtfže_d– ( fž’ame , "converted"); 6439 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/Çmes", add»ss ); 6440 `‹xtfže_d– ( fž’ame , "converted"); 6442 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/®Ÿ£s", add»ss ); 6443 `‹xtfže_d– ( fž’ame , "converted"); 6445 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/Œu¡s", add»ss ); 6446 `‹xtfže_d– ( fž’ame , "converted"); 6448 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/blocked", add»ss ); 6449 `‹xtfže_d– ( fž’ame , "converted"); 6451 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/´ofžes", add»ss ); 6452 `‹xtfže_d– ( fž’ame , "converted"); 6454 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/´im¬›s", add»ss ); 6455 `‹xtfže_d– ( fž’ame , "converted"); 6457 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/lškkeys", add»ss ); 6458 `‹xtfže_d– ( fž’ame , "converted"); 6460 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/lÚg‹rmkeys", add»ss ); 6461 `‹xtfže_d– ( fž’ame , "converted"); 6463 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/þas£s", add»ss ); 6464 `‹xtfže_d– ( fž’ame , "converted"); 6466 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/did", add»ss ); 6467 `‹xtfže_d– ( fž’ame , "converted"); 6469 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/sdp", add»ss ); 6470 `‹xtfže_d– ( fž’ame , "converted"); 6472 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/ccc", add»ss ); 6473 `‹xtfže_d– ( fž’ame , "converted"); 6475 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/­³¬ªûs", add»ss ); 6476 `‹xtfže_d– ( fž’ame , "converted"); 6478 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/g©t", add»ss ); 6479 `‹xtfže_d– ( fž’ame , "converted"); 6481 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/´oxim™y", add»ss ); 6482 `‹xtfže_d– ( fž’ame , "converted"); 6483 } } 6485  $lßd_cÚfig ( btd_ad­‹r * ad­‹r ) 6487 GKeyFže * key_fže ; 6488  fž’ame [ PATH_MAX ]; 6489  add»ss [18]; 6490  ¡© ¡ ; 6491 GE¼Ü * g”r = NULL ; 6492 #ifdeà __TIZEN_PATCH__ 6493 * ¡r ; 6496 `ba2¡r (& ad­‹r -> bdaddr , add»ss ); 6498 key_fže = `g_key_fže_Ãw (); 6500 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/£‰šgs", add»ss ); 6502 ià( `¡© ( fž’ame , & ¡ ) < 0) { 6503 `cÚv”t_cÚfig ( ad­‹r , fž’ame , key_fže ); 6504 `cÚv”t_deviû_¡Üage ( ad­‹r ); 6507 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 6510 ad­‹r -> ¡Üed_®Ÿs = `g_key_fže_g‘_¡ršg ( key_fže , "General", 6511 "AlŸs", NULL ); 6512 ià(! ad­‹r -> ¡Üed_®Ÿs ) { 6514 ad­‹r -> ¡Üed_®Ÿs = `g_key_fže_g‘_¡ršg ( key_fže , 6515 "G’”®", "Name", NULL ); 6519 ad­‹r -> ·œabË_timeout = `g_key_fže_g‘_š‹g” ( key_fže , "General", 6520 "PaœabËTimeout", & g”r ); 6521 ià( g”r ) { 6522 ad­‹r -> ·œabË_timeout = maš_Ýts . ·œto ; 6523 `g_”rÜ_ä“ ( g”r ); 6524 g”r = NULL ; 6528 ad­‹r -> ¡Üed_discov”abË = `g_key_fže_g‘_boÞ—n ( key_fže , 6529 "G’”®", "Discov”abË", & g”r ); 6530 ià( g”r ) { 6531 ad­‹r -> ¡Üed_discov”abË = çl£ ; 6532 `g_”rÜ_ä“ ( g”r ); 6533 g”r = NULL ; 6537 ad­‹r -> discov”abË_timeout = `g_key_fže_g‘_š‹g” ( key_fže , 6538 "G’”®", "Discov”abËTimeout", & g”r ); 6539 ià( g”r ) { 6540 ad­‹r -> discov”abË_timeout = maš_Ýts . discovto ; 6541 `g_”rÜ_ä“ ( g”r ); 6542 g”r = NULL ; 6545 #ifdeà __TIZEN_PATCH__ 6547 ad­‹r -> Ë_´ivacy_’abËd = maš_Ýts . Ë_´ivacy ; 6548 ià( ad­‹r -> Ë_´ivacy_’abËd ) { 6550 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , 6551 "G’”®", "LoÿlIrk", & g”r ); 6552 ià( g”r || ! ¡r || `¡¾’ (str) != 34) { 6553 `mem£t ( ad­‹r -> loÿl_œk , 0, MGMT_IRK_SIZE ); 6554 `g_”rÜ_ä“ ( g”r ); 6555 g”r = NULL ; 6557 `¡r2buf (& ¡r [2], ( ušt8_t *) ad­‹r -> loÿl_œk , MGMT_IRK_SIZE ); 6561 `g_key_fže_ä“ ( key_fže ); 6562 } } 6564  btd_ad­‹r * $btd_ad­‹r_Ãw ( ušt16_t šdex ) 6566  btd_ad­‹r * ad­‹r ; 6568 ad­‹r = `g_Œy_Ãw0 ( btd_ad­‹r , 1); 6569 ià(! ad­‹r ) 6570  NULL ; 6572 ad­‹r -> dev_id = šdex ; 6573 ad­‹r -> mgmt = `mgmt_»f ( mgmt_ma¡” ); 6574 ad­‹r -> pšcode_»que¡ed = çl£ ; 6584 ad­‹r -> sy¡em_Çme = `g_¡rdup ( maš_Ýts . Çme ); 6585 ad­‹r -> majÜ_þass = ( maš_Ýts . þass & 0x001f00) >> 8; 6586 ad­‹r -> mšÜ_þass = ( maš_Ýts . þass & 0x0000fc) >> 2; 6587 ad­‹r -> mod®Ÿs = `bt_mod®Ÿs ( maš_Ýts . did_sourû , 6588 maš_Ýts . did_v’dÜ , 6589 maš_Ýts . did_´oduù , 6590 maš_Ýts . did_v”siÚ ); 6591 ad­‹r -> discov”abË_timeout = maš_Ýts . discovto ; 6592 ad­‹r -> ·œabË_timeout = maš_Ýts . ·œto ; 6593 #ifdeà __TIZEN_PATCH__ 6594 ad­‹r -> adv”tisšg = FALSE ; 6597 `DBG ("Sy¡em‚ame: %s", ad­‹r -> sy¡em_Çme ); 6598 `DBG ("MajÜ cÏss: %u", ad­‹r -> majÜ_þass ); 6599 `DBG ("MšÜ cÏss: %u", ad­‹r -> mšÜ_þass ); 6600 `DBG ("Mod®Ÿs: %s", ad­‹r -> mod®Ÿs ); 6601 `DBG ("Discov”abËimeout: %u secÚds", ad­‹r -> discov”abË_timeout ); 6602 `DBG ("PaœabËimeout: %u secÚds", ad­‹r -> ·œabË_timeout ); 6603 #ifdeà __TIZEN_PATCH__ 6604 ià( maš_Ýts . Ë_´ivacy ) 6605 `DBG ("LE Privacy isƒnabled."); 6607 `DBG ("LE Privacy is disabled."); 6609 ad­‹r -> auths = `g_queue_Ãw (); 6611  `btd_ad­‹r_»f ( ad­‹r ); 6612 } } 6614  $ad­‹r_»move ( btd_ad­‹r * ad­‹r ) 6616 GSLi¡ * l ; 6618 `DBG ("Removšg‡d­‹¸%s", ad­‹r -> ·th ); 6620 ià( ad­‹r -> discov”y_idË_timeout > 0) { 6621 `g_sourû_»move ( ad­‹r -> discov”y_idË_timeout ); 6622 ad­‹r -> discov”y_idË_timeout = 0; 6625 ià( ad­‹r -> ‹mp_deviûs_timeout > 0) { 6626 `g_sourû_»move ( ad­‹r -> ‹mp_deviûs_timeout ); 6627 ad­‹r -> ‹mp_deviûs_timeout = 0; 6630 `discov”y_þ—nup ( ad­‹r ); 6632 `g_¦i¡_ä“ ( ad­‹r -> cÚÃù_li¡ ); 6633 ad­‹r -> cÚÃù_li¡ = NULL ; 6635  l = ad­‹r -> deviûs ;†;† =†-> Ãxt ) 6636 `deviû_»move ( l -> d©a , FALSE ); 6638 `g_¦i¡_ä“ ( ad­‹r -> deviûs ); 6639 ad­‹r -> deviûs = NULL ; 6641 `uÆßd_driv”s ( ad­‹r ); 6642 `btd_ad­‹r_g©t_£rv”_¡Ý ( ad­‹r ); 6644 `g_¦i¡_ä“ ( ad­‹r -> pš_ÿÎbacks ); 6645 ad­‹r -> pš_ÿÎbacks = NULL ; 6647 `g_¦i¡_ä“ ( ad­‹r -> msd_ÿÎbacks ); 6648 ad­‹r -> msd_ÿÎbacks = NULL ; 6649 } } 6651 cÚ¡ * $ad­‹r_g‘_·th ( btd_ad­‹r * ad­‹r ) 6653 ià(! ad­‹r ) 6654  NULL ; 6656  ad­‹r -> ·th ; 6657 } } 6659 cÚ¡ bdaddr_t * $btd_ad­‹r_g‘_add»ss ( btd_ad­‹r * ad­‹r ) 6661  & ad­‹r -> bdaddr ; 6662 } } 6664  gboÞ—n $cÚfœm_Çme_timeout ( gpoš‹r u£r_d©a ) 6666  btd_ad­‹r * ad­‹r = u£r_d©a ; 6668 `”rÜ ("CÚfœm‚amtimed ouˆfÜ hci%u", ad­‹r -> dev_id ); 6670 ad­‹r -> cÚfœm_Çme_timeout = 0; 6672 `mgmt_ÿnûl ( ad­‹r -> mgmt ,‡d­‹r-> cÚfœm_Çme_id ); 6673 ad­‹r -> cÚfœm_Çme_id = 0; 6675  FALSE ; 6676 } } 6678  $cÚfœm_Çme_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 6679 cÚ¡ * ·¿m , * u£r_d©a ) 6681  btd_ad­‹r * ad­‹r = u£r_d©a ; 6683 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 6684 `”rÜ ("Failedo confirm‚ame for hci%u: %s (0x%02x)", 6685 ad­‹r -> dev_id , `mgmt_”r¡r ( ¡©us ), status); 6688 ad­‹r -> cÚfœm_Çme_id = 0; 6690 `g_sourû_»move ( ad­‹r -> cÚfœm_Çme_timeout ); 6691 ad­‹r -> cÚfœm_Çme_timeout = 0; 6693 `DBG ("CÚfœm‚amcom¶‘fÜ hci%u", ad­‹r -> dev_id ); 6694 } } 6696  $cÚfœm_Çme ( btd_ad­‹r * ad­‹r , cÚ¡ bdaddr_t * bdaddr , 6697 ušt8_t bdaddr_ty³ , boÞ Çme_known ) 6699  mgmt_ý_cÚfœm_Çme ý ; 6700  addr [18]; 6702 `ba2¡r ( bdaddr , addr ); 6703 `DBG ("hci%d bdadd¸% Çme_knowÀ%u", ad­‹r -> dev_id , addr , 6704 Çme_known ); 6713 ià( ad­‹r -> cÚfœm_Çme_id > 0) { 6714 `w¬n ("Found…’dšg cÚfœm‚amfÜ hci%u", ad­‹r -> dev_id ); 6715 `mgmt_ÿnûl ( ad­‹r -> mgmt ,‡d­‹r-> cÚfœm_Çme_id ); 6718 ià( ad­‹r -> cÚfœm_Çme_timeout > 0) { 6719 `g_sourû_»move ( ad­‹r -> cÚfœm_Çme_timeout ); 6720 ad­‹r -> cÚfœm_Çme_timeout = 0; 6723 `mem£t (& ý , 0, (cp)); 6724 `baýy (& ý . addr . bdaddr , bdaddr); 6725 ý . addr . ty³ = bdaddr_ty³ ; 6726 ý . Çme_known =‚ame_known; 6728 ad­‹r -> cÚfœm_Çme_id = `mgmt_»¶y ×d­‹r-> mgmt , 6729 MGMT_OP_CONFIRM_NAME , 6730 ad­‹r -> dev_id , ( ý ), &cp, 6731 cÚfœm_Çme_com¶‘e , ad­‹r , NULL ); 6733 ià( ad­‹r -> cÚfœm_Çme_id == 0) { 6734 `”rÜ ("FažedØcÚfœm‚amfÜ hci%u", ad­‹r -> dev_id ); 6743 ad­‹r -> cÚfœm_Çme_timeout = `g_timeout_add_£cÚds (2, 6744 cÚfœm_Çme_timeout , ad­‹r ); 6745 } } 6747  $ad­‹r_msd_nÙify ( btd_ad­‹r * ad­‹r , 6748  btd_deviû * dev , 6749 GSLi¡ * msd_li¡ ) 6751 GSLi¡ * cb_l , * cb_Ãxt ; 6752 GSLi¡ * msd_l , * msd_Ãxt ; 6754  cb_l = ad­‹r -> msd_ÿÎbacks ; cb_È!ð NULL ; cb_Èð cb_Ãxt ) { 6755 btd_msd_cb_t cb = cb_l -> d©a ; 6757 cb_Ãxt = `g_¦i¡_Ãxt ( cb_l ); 6759  msd_l = msd_li¡ ; msd_È!ð NULL ; msd_Èð msd_Ãxt ) { 6760 cÚ¡  eœ_msd * msd = msd_l -> d©a ; 6762 msd_Ãxt = `g_¦i¡_Ãxt ( msd_l ); 6764 `cb ( ad­‹r , dev , msd -> com·ny , msd-> d©a , 6765 msd -> d©a_Ën ); 6768 } } 6770 #ifdeà __TIZEN_PATCH__ 6771  $upd©e_found_deviûs ( btd_ad­‹r * ad­‹r , 6772 cÚ¡ bdaddr_t * bdaddr , 6773 ušt8_t bdaddr_ty³ , št8_t rssi , 6774 boÞ cÚfœm , boÞ Ëgacy , ušt8_t adv_ty³ , 6775 cÚ¡ ušt8_t * d©a , ušt8_ˆ d©a_Ën ) 6777  $upd©e_found_deviûs ( btd_ad­‹r * ad­‹r , 6778 cÚ¡ bdaddr_t * bdaddr , 6779 ušt8_t bdaddr_ty³ , št8_t rssi , 6780 boÞ cÚfœm , boÞ Ëgacy , 6781 cÚ¡ ušt8_t * d©a , ušt8_ˆ d©a_Ën ) 6784  btd_deviû * dev ; 6785  eœ_d©a ƒir_data; 6786 boÞ Çme_known , discov”abË ; 6787  addr [18]; 6789 `mem£t (& eœ_d©a , 0, (eir_data)); 6790 `eœ_·r£ (& eœ_d©a , d©a , d©a_Ën ); 6792 ià( bdaddr_ty³ =ð BDADDR_BREDR ) 6793 discov”abË = Œue ; 6795 discov”abË = eœ_d©a . æags & ( EIR_LIM_DISC | EIR_GEN_DISC ); 6797 `ba2¡r ( bdaddr , addr ); 6799 dev = `btd_ad­‹r_fšd_deviû ( ad­‹r , bdaddr , bdaddr_ty³ ); 6800 ià(! dev ) { 6806 #ifdeà __TIZEN_PATCH__ 6809 ià(( ad­‹r -> discov”y_li¡ =ð NULL && 6810 ad­‹r -> Ë_discov”y_li¡ =ð NULL è|| ! discov”abË ) { 6811 `DBG ("discovery†ist is NULL"); 6812 `eœ_d©a_ä“ (& eœ_d©a ); 6816 ià(! ad­‹r -> discov”y_li¡ || ! discov”abË ) { 6817 `eœ_d©a_ä“ (& eœ_d©a ); 6822 dev = `ad­‹r_ü—‹_deviû ( ad­‹r , bdaddr , bdaddr_ty³ ); 6825 ià(! dev ) { 6826 `”rÜ ("UÇbËØü—‹ objeù fÜ found deviû %s", addr ); 6827 `eœ_d©a_ä“ (& eœ_d©a ); 6831 `deviû_upd©e_Ï¡_£’ ( dev , bdaddr_ty³ ); 6839 ià( bdaddr_ty³ !ð BDADDR_BREDR && eœ_d©a . æags && 6840 !( eœ_d©a . æags & EIR_BREDR_UNSUP )) 6841 `deviû_£t_b»dr_suµÜt ( dev ); 6843 ià( eœ_d©a . Çme !ð NULL &&ƒœ_d©a. Çme_com¶‘e ) 6844 `deviû_¡Üe_ÿched_Çme ( dev , eœ_d©a . Çme ); 6850 #ifdeà __TIZEN_PATCH__ 6851 ià( `deviû_is_‹mpܬy ( dev è&& ad­‹r -> discov”y_li¡ =ð NULL && 6852 ad­‹r -> Ë_discov”y_li¡ =ð NULL ) { 6853 `DBG ("discovery†ist is NULL"); 6854 `eœ_d©a_ä“ (& eœ_d©a ); 6858 `deviû_£t_Ï¡_addr_ty³ ( dev , bdaddr_ty³ ); 6860 ià( `deviû_is_‹mpܬy ( dev è&& ! ad­‹r -> discov”y_li¡ ) { 6861 `eœ_d©a_ä“ (& eœ_d©a ); 6866 `deviû_£t_Ëgacy ( dev , Ëgacy ); 6867 `deviû_£t_rssi ( dev , rssi ); 6869 ià( eœ_d©a . ­³¬ªû != 0) 6870 `deviû_£t_­³¬ªû ( dev , eœ_d©a . ­³¬ªû ); 6874 #ifdeà __TIZEN_PATCH__ 6875 ià( eœ_d©a . Çme_com¶‘e ) 6876 Çme_known = `deviû_Çme_known ( dev ); 6878 Çme_known = çl£ ; 6880 Çme_known = `deviû_Çme_known ( dev ); 6883 ià( eœ_d©a . Çme && (eœ_d©a. Çme_com¶‘e || ! Çme_known )) 6884 `btd_deviû_deviû_£t_Çme ( dev , eœ_d©a . Çme ); 6886 ià( eœ_d©a . þass != 0) 6887 `deviû_£t_þass ( dev , eœ_d©a . þass ); 6889 ià( eœ_d©a . did_sourû ||ƒœ_d©a. did_v’dÜ || 6890 eœ_d©a . did_´oduù ||ƒœ_d©a. did_v”siÚ ) 6891 `btd_deviû_£t_²pid ( dev , eœ_d©a . did_sourû , 6892 eœ_d©a . did_v’dÜ , 6893 eœ_d©a . did_´oduù , 6894 eœ_d©a . did_v”siÚ ); 6896 `deviû_add_eœ_uuids ( dev , eœ_d©a . £rviûs ); 6898 #ifdeà __TIZEN_PATCH__ 6899 ià( eœ_d©a . æags != 0) 6900 `deviû_£t_»mÙe_ã©u»_æag ( dev , eœ_d©a . æags ); 6902 ià( bdaddr_ty³ =ð BDADDR_BREDR ) 6903 `deviû_£t_mªuçùu»r_šfo ( dev , & eœ_d©a ); 6905 `deviû_£t_adv_»pÜt_šfo ( dev , (*) d©a , d©a_Ën , adv_ty³ ); 6908 ià( eœ_d©a . msd_li¡ ) 6909 `ad­‹r_msd_nÙify ( ad­‹r , dev , eœ_d©a . msd_li¡ ); 6911 `eœ_d©a_ä“ (& eœ_d©a ); 6919 #ifdeà __TIZEN_PATCH__ 6920 ià(! ad­‹r -> discov”y_li¡ && !ad­‹r-> Ë_discov”y_li¡ ) 6922 ià(! ad­‹r -> discov”y_li¡ ) 6924  cÚÃù_Ë ; 6926 ià( `g_¦i¡_fšd ( ad­‹r -> discov”y_found , dev )) 6929 ià( cÚfœm ) 6930 `cÚfœm_Çme ( ad­‹r , bdaddr , bdaddr_ty³ , Çme_known ); 6932 ad­‹r -> discov”y_found = `g_¦i¡_´•’d (adapter->discovery_found, 6933 dev ); 6937 cÚÃù_Ë : 6943 ià( ad­‹r -> cÚÃù_Ë ) 6950 ià( k”Ãl_cÚn_cÚŒÞ ) 6958 ià( bdaddr_ty³ !ð BDADDR_BREDR && ! `btd_deviû_is_cÚÃùed ( dev ) && 6959 `g_¦i¡_fšd ( ad­‹r -> cÚÃù_li¡ , dev )) { 6960 ad­‹r -> cÚÃù_Ë = dev ; 6961 `¡Ý_·ssive_sÿšg ( ad­‹r ); 6963 } } 6965  $deviû_found_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 6966 cÚ¡ * ·¿m , * u£r_d©a ) 6968 cÚ¡  mgmt_ev_deviû_found * ev = ·¿m ; 6969  btd_ad­‹r * ad­‹r = u£r_d©a ; 6970 cÚ¡ ušt8_t * eœ ; 6971 ušt16_t eœ_Ën ; 6972 ušt32_t æags ; 6973 boÞ cÚfœm_Çme ; 6974 boÞ Ëgacy ; 6975  addr [18]; 6977 ià( Ëngth < (* ev )) { 6978 `”rÜ ("ToØsh܈deviû foundƒv’ˆ(%u by‹s)", Ëngth ); 6982 eœ_Ën = `btohs ( ev ->eir_len); 6983 ià( Ëngth !ð(* ev è+ eœ_Ën ) { 6984 `”rÜ ("Device foundƒvent size mismatch (%u != %zu)", 6985 Ëngth , (* ev è+ eœ_Ën ); 6989 ià( eœ_Ën == 0) 6990 eœ = NULL ; 6992 eœ = ev ->eir; 6994 æags = `btohl ( ev ->flags); 6996 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 6997 `DBG ("hci%u‡ddr %s,„ssi %d flags 0x%04xƒir_len %u", 6998 šdex , addr , ev -> rssi , æags , eœ_Ën ); 7000 #iâdeà __TIZEN_PATCH__ 7002 ià( æags & MGMT_DEV_FOUND_NOT_CONNECTABLE ) 7006 cÚfœm_Çme = ( æags & MGMT_DEV_FOUND_CONFIRM_NAME ); 7007 Ëgacy = ( æags & MGMT_DEV_FOUND_LEGACY_PAIRING ); 7009 #ifdeà __TIZEN_PATCH__ 7010 `upd©e_found_deviûs ( ad­‹r , & ev -> addr . bdaddr ,ƒv->addr. ty³ , 7011 ev -> rssi , cÚfœm_Çme , Ëgacy , 0, 7012 eœ , eœ_Ën ); 7014 `upd©e_found_deviûs ( ad­‹r , & ev -> addr . bdaddr ,ƒv->addr. ty³ , 7015 ev -> rssi , cÚfœm_Çme , Ëgacy , 7016 eœ , eœ_Ën ); 7018 } } 7020 #ifdeà __TIZEN_PATCH__ 7021  $Ë_deviû_found_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 7022 cÚ¡ * ·¿m , * u£r_d©a ) 7024 cÚ¡  mgmt_ev_Ë_deviû_found * ev = ·¿m ; 7025  btd_ad­‹r * ad­‹r = u£r_d©a ; 7026 cÚ¡ ušt8_t * eœ ; 7027 ušt16_t eœ_Ën ; 7028 ušt32_t æags ; 7029 boÞ cÚfœm_Çme ; 7030 boÞ Ëgacy ; 7031  addr [18]; 7033 ià( Ëngth < (* ev )) { 7034 `”rÜ ("ToØsh܈deviû foundƒv’ˆ(%u by‹s)", Ëngth ); 7038 eœ_Ën = `btohs ( ev ->eir_len); 7039 ià( Ëngth !ð(* ev è+ eœ_Ën ) { 7040 `”rÜ ("Device foundƒvent size mismatch (%u != %zu)", 7041 Ëngth , (* ev è+ eœ_Ën ); 7045 ià( eœ_Ën == 0) 7046 eœ = NULL ; 7048 eœ = ev ->eir; 7050 æags = `btohl ( ev ->flags); 7052 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 7053 `DBG ("hci%u‡ddr %s,„ssi %d flags 0x%04xƒir_len %u", 7054 šdex , addr , ev -> rssi , æags , eœ_Ën ); 7056 cÚfœm_Çme = ( æags & MGMT_DEV_FOUND_CONFIRM_NAME ); 7057 Ëgacy = ( æags & MGMT_DEV_FOUND_LEGACY_PAIRING ); 7062 `upd©e_found_deviûs ( ad­‹r , & ev -> addr . bdaddr ,ƒv->addr. ty³ , 7063 ev -> rssi , cÚfœm_Çme , Ëgacy ,ƒv-> adv_ty³ , 7064 eœ , eœ_Ën ); 7065 } } 7068  ag’t * $ad­‹r_g‘_ag’t ( btd_ad­‹r * ad­‹r ) 7070  `ag’t_g‘ ( NULL ); 7071 } } 7073  $ad­‹r_»move_cÚÃùiÚ ( btd_ad­‹r * ad­‹r , 7074  btd_deviû * deviû , 7075 ušt8_t bdaddr_ty³ ) 7077 `DBG (""); 7079 ià(! `g_¦i¡_fšd ( ad­‹r -> cÚÃùiÚs , deviû )) { 7080 `”rÜ ("No matching connection for device"); 7084 `deviû_»move_cÚÃùiÚ ( deviû , bdaddr_ty³ ); 7086 ià( `deviû_is_auth’tiÿtšg ( deviû )) 7087 `deviû_ÿnûl_auth’tiÿtiÚ ( deviû , TRUE ); 7090 ià( `btd_deviû_is_cÚÃùed ( deviû )) 7093 ad­‹r -> cÚÃùiÚs = `g_¦i¡_»move ×d­‹r->cÚÃùiÚs, deviû ); 7095 ià( `deviû_is_‹mpܬy ( deviû è&& ! `deviû_is_»Œyšg (device)) { 7096 cÚ¡ * ·th = `deviû_g‘_·th ( deviû ); 7098 `DBG ("Removšgempܬy deviû %s", ·th ); 7099 #ifdeà __TIZEN_PATCH__ 7103 ià(!( `deviû_is_bÚded ( deviû , bdaddr_ty³ ) || 7104 `deviû_is_·œed ( deviû , bdaddr_ty³ ))) { 7105 `DBG ("add¸ty³ %d, bÚded", bdaddr_ty³ ); 7109 `btd_ad­‹r_uÅaœ_deviû ( ad­‹r , deviû ); 7111 `btd_ad­‹r_»move_deviû ( ad­‹r , deviû ); 7114 } } 7116  $ad­‹r_¡Ý ( btd_ad­‹r * ad­‹r ) 7119 `»¶y_³ndšg_»que¡s ( ad­‹r ); 7121 `ÿnûl_·ssive_sÿšg ( ad­‹r ); 7123  ad­‹r -> discov”y_li¡ ) { 7124  w©ch_þ›Á * þ›Á ; 7126 þ›Á = ad­‹r -> discov”y_li¡ -> d©a ; 7132 `g_dbus_»move_w©ch ( dbus_cÚn , þ›Á -> w©ch ); 7135 ad­‹r -> discov”šg = çl£ ; 7137 #ifdeà __TIZEN_PATCH__ 7138  ad­‹r -> Ë_discov”y_li¡ ) { 7139  w©ch_þ›Á * þ›Á ; 7141 þ›Á = ad­‹r -> Ë_discov”y_li¡ -> d©a ; 7147 `g_dbus_»move_w©ch ( dbus_cÚn , þ›Á -> w©ch ); 7150 ad­‹r -> Ë_discov”šg = çl£ ; 7153  ad­‹r -> cÚÃùiÚs ) { 7154  btd_deviû * deviû = ad­‹r -> cÚÃùiÚs -> d©a ; 7155 ušt8_t addr_ty³ = `btd_deviû_g‘_bdaddr_ty³ ( deviû ); 7157 `ad­‹r_»move_cÚÃùiÚ ( ad­‹r , deviû , BDADDR_BREDR ); 7158 ià( addr_ty³ !ð BDADDR_BREDR ) 7159 `ad­‹r_»move_cÚÃùiÚ ( ad­‹r , deviû , addr_ty³ ); 7162 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 7163 ADAPTER_INTERFACE , "Discovering"); 7164 #ifdeà __TIZEN_PATCH__ 7165 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 7166 ADAPTER_INTERFACE , "LEDiscovering"); 7169 ià( ad­‹r -> dev_þass ) { 7172 ad­‹r -> dev_þass = 0; 7173 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 7174 ADAPTER_INTERFACE , "Class"); 7177 #ifdeà __TIZEN_PATCH__ 7178 ià( ad­‹r -> adv”tisšg ) { 7179 ad­‹r -> adv”tisšg = FALSE ; 7180 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 7181 ADAPTER_INTERFACE , "Advertising"); 7184 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , ad­‹r -> ·th , 7185 ADAPTER_INTERFACE , "Powered"); 7187 `DBG ("ad­‹¸% ha b“Àdi§bËd", ad­‹r -> ·th ); 7188 } } 7190  $btd_»gi¡”_ad­‹r_driv” ( btd_ad­‹r_driv” * driv” ) 7192 ad­‹r_driv”s = `g_¦i¡_­³nd ×d­‹r_driv”s, driv” ); 7194 ià( driv” -> ´obe =ð NULL ) 7197 `ad­‹r_fÜ—ch ( ´obe_driv” , driv” ); 7200 } } 7202  $uÆßd_driv” ( btd_ad­‹r * ad­‹r , gpoš‹r d©a ) 7204  btd_ad­‹r_driv” * driv” = d©a ; 7206 ià( driv” -> »move ) 7207 driv” -> `»move ( ad­‹r ); 7209 ad­‹r -> driv”s = `g_¦i¡_»move ×d­‹r->driv”s, d©a ); 7210 } } 7212  $btd_uÄegi¡”_ad­‹r_driv” ( btd_ad­‹r_driv” * driv” ) 7214 ad­‹r_driv”s = `g_¦i¡_»move ×d­‹r_driv”s, driv” ); 7216 `ad­‹r_fÜ—ch ( uÆßd_driv” , driv” ); 7217 } } 7219  $ag’t_auth_cb ( ag’t *ag’t, DBusE¼Ü * d”r , 7220 * u£r_d©a ) 7222  btd_ad­‹r * ad­‹r = u£r_d©a ; 7223  £rviû_auth * auth = `g_queue_pÝ_h—d ( ad­‹r -> auths ); 7225 ià(! auth ) { 7226 `DBG ("No…ending‡uthorization"); 7230 auth -> `cb ( d”r ,‡uth-> u£r_d©a ); 7232 ià( auth -> ag’t ) 7233 `ag’t_uÄef ( auth -> ag’t ); 7235 `g_ä“ ( auth ); 7238 ià( `g_queue_is_em±y ( ad­‹r -> auths )) { 7239 ià( ad­‹r -> auth_idË_id > 0) 7240 `g_sourû_»move ( ad­‹r -> auth_idË_id ); 7244 ià( ad­‹r -> auth_idË_id > 0) 7247 ad­‹r -> auth_idË_id = `g_idË_add ( ´oûss_auth_queue ,‡dapter); 7248 } } 7250  gboÞ—n $´oûss_auth_queue ( gpoš‹r u£r_d©a ) 7252  btd_ad­‹r * ad­‹r = u£r_d©a ; 7253 DBusE¼Ü ”r ; 7255 ad­‹r -> auth_idË_id = 0; 7257 `dbus_”rÜ_š™ (& ”r ); 7258 `dbus_£t_”rÜ_cÚ¡ (& ”r , ERROR_INTERFACE ".Rejeùed", NULL ); 7260 ! `g_queue_is_em±y ( ad­‹r -> auths )) { 7261  £rviû_auth * auth = ad­‹r -> auths -> h—d -> d©a ; 7262  btd_deviû * deviû = auth ->device; 7263 cÚ¡ * dev_·th ; 7266 ià( auth -> svc_id > 0) 7267  FALSE ; 7272 ià( `deviû_is_Œu¡ed ( deviû è=ð TRUE ) { 7273 auth -> `cb ( NULL ,‡uth-> u£r_d©a ); 7274  Ãxt ; 7278 ià( auth -> ag’t ) 7279  FALSE ; 7281 auth -> ag’t = `ag’t_g‘ ( NULL ); 7282 ià( auth -> ag’t =ð NULL ) { 7283 `w¬n ("Authentication‡ttempt without‡gent"); 7284 auth -> `cb (& ”r ,‡uth-> u£r_d©a ); 7285  Ãxt ; 7288 dev_·th = `deviû_g‘_·th ( deviû ); 7290 ià( `ag’t_authÜize_£rviû ( auth -> ag’t , dev_·th ,‡uth-> uuid , 7291 ag’t_auth_cb , ad­‹r , NULL ) < 0) { 7292 auth -> `cb (& ”r ,‡uth-> u£r_d©a ); 7293  Ãxt ; 7298 Ãxt : 7299 ià( auth -> ag’t ) 7300 `ag’t_uÄef ( auth -> ag’t ); 7302 `g_ä“ ( auth ); 7304 `g_queue_pÝ_h—d ( ad­‹r -> auths ); 7307 `dbus_”rÜ_ä“ (& ”r ); 7309  FALSE ; 7310 } } 7312  $svc_com¶‘e ( btd_deviû * dev ,  ”r , * u£r_d©a ) 7314  £rviû_auth * auth = u£r_d©a ; 7315  btd_ad­‹r * ad­‹r = auth ->adapter; 7317 auth -> svc_id = 0; 7319 ià( ad­‹r -> auth_idË_id != 0) 7322 ad­‹r -> auth_idË_id = `g_idË_add ( ´oûss_auth_queue ,‡dapter); 7323 } } 7325  $ad­‹r_authÜize ( btd_ad­‹r * ad­‹r , cÚ¡ bdaddr_t * d¡ , 7326 cÚ¡ * uuid , £rviû_auth_cb cb , 7327 * u£r_d©a ) 7329  £rviû_auth * auth ; 7330  btd_deviû * deviû ; 7331  gušt id = 0; 7333 deviû = `btd_ad­‹r_fšd_deviû ( ad­‹r , d¡ , BDADDR_BREDR ); 7334 ià(! deviû ) 7338 ià(! `g_¦i¡_fšd ( ad­‹r -> cÚÃùiÚs , deviû )) 7339 `”rÜ ("Authorization„equest for‚on-connected device!?"); 7341 auth = `g_Œy_Ãw0 ( £rviû_auth , 1); 7342 ià(! auth ) 7345 auth -> cb = cb; 7346 auth -> u£r_d©a = user_data; 7347 auth -> uuid = uuid; 7348 auth -> deviû = device; 7349 auth -> ad­‹r =‡dapter; 7350 auth -> id = ++id; 7351 auth -> svc_id = `deviû_wa™_fÜ_svc_com¶‘e ( deviû , svc_com¶‘e ,‡uth); 7353 `g_queue_push_ž ( ad­‹r -> auths , auth ); 7355  auth -> id ; 7356 } } 7358 gušt $btd_»que¡_authÜiz©iÚ (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ , 7359 cÚ¡ * uuid , £rviû_auth_cb cb , 7360 * u£r_d©a ) 7362  btd_ad­‹r * ad­‹r ; 7363 GSLi¡ * l ; 7365 ià( `bacmp ( ¤c , BDADDR_ANY ) != 0) { 7366 ad­‹r = `ad­‹r_fšd ( ¤c ); 7367 ià(! ad­‹r ) 7370  `ad­‹r_authÜize ( ad­‹r , d¡ , uuid , cb , u£r_d©a ); 7373  l = ad­‹rs ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 7374 gušt id ; 7376 ad­‹r = l -> d©a ; 7378 id = `ad­‹r_authÜize ( ad­‹r , d¡ , uuid , cb , u£r_d©a ); 7379 ià( id != 0) 7380  id ; 7384 } } 7386  £rviû_auth * $fšd_authÜiz©iÚ ( gušt id ) 7388 GSLi¡ * l ; 7389 GLi¡ * l2 ; 7391  l = ad­‹rs ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 7392  btd_ad­‹r * ad­‹r = l -> d©a ; 7394  l2 = ad­‹r -> auths -> h—d ;†2 !ð NULL ;†2 =†2-> Ãxt ) { 7395  £rviû_auth * auth = l2 -> d©a ; 7397 ià( auth -> id == id) 7398  auth ; 7402  NULL ; 7403 } } 7405  $btd_ÿnûl_authÜiz©iÚ ( gušt id ) 7407  £rviû_auth * auth ; 7409 auth = `fšd_authÜiz©iÚ ( id ); 7410 ià( auth =ð NULL ) 7411  - EPERM ; 7413 ià( auth -> svc_id > 0) 7414 `deviû_»move_svc_com¶‘e_ÿÎback ( auth -> deviû , 7415 auth -> svc_id ); 7417 `g_queue_»move ( auth -> ad­‹r -> auths ,‡uth); 7419 ià( auth -> ag’t ) { 7420 `ag’t_ÿnûl ( auth -> ag’t ); 7421 `ag’t_uÄef ( auth -> ag’t ); 7424 `g_ä“ ( auth ); 7427 } } 7429  $btd_ad­‹r_»¡Üe_pow”ed ( btd_ad­‹r * ad­‹r ) 7431 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED ) 7434 `£t_mode ( ad­‹r , MGMT_OP_SET_POWERED , 0x01); 7437 } } 7439  $btd_ad­‹r_»gi¡”_pš_cb ( btd_ad­‹r * ad­‹r , 7440 btd_ad­‹r_pš_cb_t cb ) 7442 ad­‹r -> pš_ÿÎbacks = `g_¦i¡_´•’d ×d­‹r->pš_ÿÎbacks, cb ); 7443 } } 7445  $btd_ad­‹r_uÄegi¡”_pš_cb ( btd_ad­‹r * ad­‹r , 7446 btd_ad­‹r_pš_cb_t cb ) 7448 ad­‹r -> pš_ÿÎbacks = `g_¦i¡_»move ×d­‹r->pš_ÿÎbacks, cb ); 7449 } } 7451  $btd_ad­‹r_uÄegi¡”_msd_cb ( btd_ad­‹r * ad­‹r , 7452 btd_msd_cb_t cb ) 7454 ad­‹r -> msd_ÿÎbacks = `g_¦i¡_»move ×d­‹r->msd_ÿÎbacks, cb ); 7455 } } 7457  $btd_ad­‹r_»gi¡”_msd_cb ( btd_ad­‹r * ad­‹r , 7458 btd_msd_cb_t cb ) 7460 ad­‹r -> msd_ÿÎbacks = `g_¦i¡_´•’d ×d­‹r->msd_ÿÎbacks, cb ); 7461 } } 7463  $btd_ad­‹r_£t_ç¡_cÚÃùabË ( btd_ad­‹r * ad­‹r , 7464 gboÞ—n ’abË ) 7466 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 7467  - EINVAL ; 7469 `£t_mode ( ad­‹r , MGMT_OP_SET_FAST_CONNECTABLE , ’abË ? 0x01 : 0x00); 7472 } } 7474  $btd_ad­‹r_»ad_þock ( btd_ad­‹r * ad­‹r , cÚ¡ bdaddr_t * bdaddr , 7475  which ,  timeout , ušt32_t * þock , 7476 ušt16_t * accu¿cy ) 7478 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 7479  - EINVAL ; 7481  - ENOSYS ; 7482 } } 7484  $btd_ad­‹r_»move_bÚdšg ( btd_ad­‹r * ad­‹r , 7485 cÚ¡ bdaddr_t * bdaddr , ušt8_t bdaddr_ty³ ) 7487  mgmt_ý_uÅaœ_deviû ý ; 7489 `mem£t (& ý , 0, (cp)); 7490 `baýy (& ý . addr . bdaddr , bdaddr); 7491 ý . addr . ty³ = bdaddr_ty³ ; 7492 ý . discÚÃù = 1; 7494 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_UNPAIR_DEVICE , 7495 ad­‹r -> dev_id , ( ý ), &cp, 7496 NULL , NULL, NULL) > 0) 7499  - EIO ; 7500 } } 7502  $pšcode_»¶y_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 7503 cÚ¡ * ·¿m , * u£r_d©a ) 7505  btd_deviû * deviû = u£r_d©a ; 7510 `deviû_bÚdšg_»¡¬t_tim” ( deviû ); 7511 } } 7513  $btd_ad­‹r_pšcode_»¶y ( btd_ad­‹r * ad­‹r , 7514 cÚ¡ bdaddr_t * bdaddr , 7515 cÚ¡ * pš , size_t pš_Ën ) 7517  btd_deviû * deviû ; 7518  id ; 7519  addr [18]; 7521 `ba2¡r ( bdaddr , addr ); 7522 `DBG ("hci%u‡dd¸% pšËÀ%zu", ad­‹r -> dev_id , addr , pš_Ën ); 7524 ià( pš =ð NULL ) { 7525  mgmt_ý_pš_code_Ãg_»¶y ý ; 7527 `mem£t (& ý , 0, (cp)); 7528 `baýy (& ý . addr . bdaddr , bdaddr); 7529 ý . addr . ty³ = BDADDR_BREDR ; 7531 id = `mgmt_»¶y ( ad­‹r -> mgmt , MGMT_OP_PIN_CODE_NEG_REPLY , 7532 ad­‹r -> dev_id , ( ý ), &cp, 7533 NULL , NULL, NULL); 7535  mgmt_ý_pš_code_»¶y ý ; 7537 ià( pš_Ën > 16) 7538  - EINVAL ; 7540 `mem£t (& ý , 0, (cp)); 7541 `baýy (& ý . addr . bdaddr , bdaddr); 7542 ý . addr . ty³ = BDADDR_BREDR ; 7543 ý . pš_Ën =…in_len; 7544 `memýy ( ý . pš_code , pš , pš_Ën ); 7548 deviû = `btd_ad­‹r_fšd_deviû ( ad­‹r , bdaddr , BDADDR_BREDR ); 7549 `deviû_bÚdšg_»¡¬t_tim” ( deviû ); 7551 id = `mgmt_»¶y ( ad­‹r -> mgmt , MGMT_OP_PIN_CODE_REPLY , 7552 ad­‹r -> dev_id , ( ý ), &cp, 7553 pšcode_»¶y_com¶‘e , deviû , NULL ); 7556 ià( id == 0) 7557  - EIO ; 7560 } } 7562  $btd_ad­‹r_cÚfœm_»¶y ( btd_ad­‹r * ad­‹r , 7563 cÚ¡ bdaddr_t * bdaddr , ušt8_t bdaddr_ty³ , 7564 gboÞ—n sucûss ) 7566  mgmt_ý_u£r_cÚfœm_»¶y ý ; 7567 ušt16_t Ýcode ; 7568  addr [18]; 7570 `ba2¡r ( bdaddr , addr ); 7571 `DBG ("hci%u‡dd¸% sucûs %d", ad­‹r -> dev_id , addr , sucûss ); 7573 ià( sucûss ) 7574 Ýcode = MGMT_OP_USER_CONFIRM_REPLY ; 7576 Ýcode = MGMT_OP_USER_CONFIRM_NEG_REPLY ; 7578 `mem£t (& ý , 0, (cp)); 7579 `baýy (& ý . addr . bdaddr , bdaddr); 7580 ý . addr . ty³ = bdaddr_ty³ ; 7582 ià( `mgmt_»¶y ( ad­‹r -> mgmt , Ýcode ,‡d­‹r-> dev_id , ( ý ), &cp, 7583 NULL , NULL, NULL) > 0) 7586  - EIO ; 7587 } } 7589  $u£r_cÚfœm_»que¡_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 7590 cÚ¡ * ·¿m , * u£r_d©a ) 7592 cÚ¡  mgmt_ev_u£r_cÚfœm_»que¡ * ev = ·¿m ; 7593  btd_ad­‹r * ad­‹r = u£r_d©a ; 7594  btd_deviû * deviû ; 7595  addr [18]; 7596  ”r ; 7598 ià( Ëngth < (* ev )) { 7599 `”rÜ ("Too small user confirm„equestƒvent"); 7603 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 7604 `DBG ("hci%u % cÚfœm_hšˆ%u", ad­‹r -> dev_id , addr , 7605 ev -> cÚfœm_hšt ); 7606 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & ev -> addr . bdaddr , 7607 ev -> addr . ty³ ); 7608 ià(! deviû ) { 7609 `”rÜ ("UÇbËØg‘ deviû objeù fÜ %s", addr ); 7613 ”r = `deviû_cÚfœm_·sskey ( deviû , `btohl ( ev -> v®ue ), 7614 ev -> cÚfœm_hšt ); 7615 ià( ”r < 0) { 7616 `”rÜ ("deviû_cÚfœm_·sskey: %s", `¡»¼Ü (- ”r )); 7617 `btd_ad­‹r_cÚfœm_»¶y ( ad­‹r , & ev -> addr . bdaddr , 7618 ev -> addr . ty³ , FALSE ); 7620 } } 7622  $btd_ad­‹r_·sskey_»¶y ( btd_ad­‹r * ad­‹r , 7623 cÚ¡ bdaddr_t * bdaddr , ušt8_t bdaddr_ty³ , 7624 ušt32_t ·sskey ) 7626  id ; 7627  addr [18]; 7629 `ba2¡r ( bdaddr , addr ); 7630 `DBG ("hci%u‡dd¸% ·sskey %06u", ad­‹r -> dev_id , addr , ·sskey ); 7632 ià( ·sskey =ð INVALID_PASSKEY ) { 7633  mgmt_ý_u£r_·sskey_Ãg_»¶y ý ; 7635 `mem£t (& ý , 0, (cp)); 7636 `baýy (& ý . addr . bdaddr , bdaddr); 7637 ý . addr . ty³ = bdaddr_ty³ ; 7639 id = `mgmt_»¶y ( ad­‹r -> mgmt , MGMT_OP_USER_PASSKEY_NEG_REPLY , 7640 ad­‹r -> dev_id , ( ý ), &cp, 7641 NULL , NULL, NULL); 7643  mgmt_ý_u£r_·sskey_»¶y ý ; 7645 `mem£t (& ý , 0, (cp)); 7646 `baýy (& ý . addr . bdaddr , bdaddr); 7647 ý . addr . ty³ = bdaddr_ty³ ; 7648 ý . ·sskey = `htobl (passkey); 7650 id = `mgmt_»¶y ( ad­‹r -> mgmt , MGMT_OP_USER_PASSKEY_REPLY , 7651 ad­‹r -> dev_id , ( ý ), &cp, 7652 NULL , NULL, NULL); 7655 ià( id == 0) 7656  - EIO ; 7659 } } 7661  $u£r_·sskey_»que¡_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 7662 cÚ¡ * ·¿m , * u£r_d©a ) 7664 cÚ¡  mgmt_ev_u£r_·sskey_»que¡ * ev = ·¿m ; 7665  btd_ad­‹r * ad­‹r = u£r_d©a ; 7666  btd_deviû * deviû ; 7667  addr [18]; 7668  ”r ; 7670 ià( Ëngth < (* ev )) { 7671 `”rÜ ("Too small…asskey„equestƒvent"); 7675 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 7676 `DBG ("hci%u %s", šdex , addr ); 7678 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & ev -> addr . bdaddr , 7679 ev -> addr . ty³ ); 7680 ià(! deviû ) { 7681 `”rÜ ("UÇbËØg‘ deviû objeù fÜ %s", addr ); 7685 ”r = `deviû_»que¡_·sskey ( deviû ); 7686 ià( ”r < 0) { 7687 `”rÜ ("deviû_»que¡_·sskey: %s", `¡»¼Ü (- ”r )); 7688 `btd_ad­‹r_·sskey_»¶y ( ad­‹r , & ev -> addr . bdaddr , 7689 ev -> addr . ty³ , INVALID_PASSKEY ); 7691 } } 7693  $u£r_·sskey_nÙify_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 7694 cÚ¡ * ·¿m , * u£r_d©a ) 7696 cÚ¡  mgmt_ev_·sskey_nÙify * ev = ·¿m ; 7697  btd_ad­‹r * ad­‹r = u£r_d©a ; 7698  btd_deviû * deviû ; 7699 ušt32_t ·sskey ; 7700  addr [18]; 7701  ”r ; 7703 ià( Ëngth < (* ev )) { 7704 `”rÜ ("Too small…asskey‚otifyƒvent"); 7708 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 7709 `DBG ("hci%u %s", šdex , addr ); 7711 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & ev -> addr . bdaddr , 7712 ev -> addr . ty³ ); 7713 ià(! deviû ) { 7714 `”rÜ ("UÇbËØg‘ deviû objeù fÜ %s", addr ); 7718 ·sskey = `g‘_Ë32 (& ev ->passkey); 7720 `DBG ("·sskey %06uƒÁ”ed %u", ·sskey , ev -> ’‹»d ); 7722 ”r = `deviû_nÙify_·sskey ( deviû , ·sskey , ev -> ’‹»d ); 7723 ià( ”r < 0) 7724 `”rÜ ("deviû_nÙify_·sskey: %s", `¡»¼Ü (- ”r )); 7725 } } 7727 #ifdeà __TIZEN_PATCH__ 7728  $rssi_®”t_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 7729 cÚ¡ * ·¿m , * u£r_d©a ) 7731 cÚ¡  mgmt_ev_v’dÜ_¥ecific_rssi_®”t * ev = ·¿m ; 7732  btd_ad­‹r * ad­‹r = u£r_d©a ; 7733  addr [18]; 7734 * bt_addr = NULL ; 7735  lšk_ty³ = -1; 7736  ®”t_ty³ = -1; 7737  rssi_dbm = 0; 7739 ià( Ëngth < (* ev )) { 7740 `”rÜ ("Too small„ssi‡lertƒvent"); 7744 `ba2¡r (& ev -> bdaddr , addr ); 7745 `DBG ("hci%u % %d", šdex , addr , ev -> lšk_ty³ ); 7746 `DBG ("RSSI A˹ P¬am [%d %d]", ev -> ®”t_ty³ ,ƒv-> rssi_dbm ); 7748 bt_addr = (*)& addr ; 7749 lšk_ty³ = ev ->link_type; 7750 ®”t_ty³ = ev ->alert_type; 7751 rssi_dbm = ev ->rssi_dbm; 7752 `g_dbus_em™_sigÇl ( dbus_cÚn , ad­‹r -> ·th , 7753 ADAPTER_INTERFACE , "RssiAlert", 7754 DBUS_TYPE_STRING , & bt_addr , 7755 DBUS_TYPE_INT32 , & lšk_ty³ , 7756 DBUS_TYPE_INT32 , & ®”t_ty³ , 7757 DBUS_TYPE_INT32 , & rssi_dbm , 7758 DBUS_TYPE_INVALID ); 7759 } } 7761  $g‘_¿w_rssi_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 7762 cÚ¡ * ·¿m , * u£r_d©a ) 7764 cÚ¡  mgmt_cc_½_g‘_¿w_rssi * ev = ·¿m ; 7765  btd_ad­‹r * ad­‹r = u£r_d©a ; 7766  addr [18]; 7767 * bt_addr = NULL ; 7768  lšk_ty³ = -1; 7769  rssi_dbm = 0; 7771 ià( Ëngth < (* ev )) { 7772 `”rÜ ("Too small„aw RSSIƒvent"); 7776 `ba2¡r (& ev -> bt_add»ss , addr ); 7777 `DBG ("hci%u %s", šdex , addr ); 7778 `DBG ("Raw RSSI P¬am [%d %d]", ev -> lšk_ty³ ,ƒv-> rssi_dbm ); 7780 bt_addr = (*)& addr ; 7781 lšk_ty³ = ev ->link_type; 7782 rssi_dbm = ev ->rssi_dbm; 7784 `g_dbus_em™_sigÇl ( dbus_cÚn , ad­‹r -> ·th , 7785 ADAPTER_INTERFACE , "RawRssi", 7786 DBUS_TYPE_STRING , & bt_addr , 7787 DBUS_TYPE_INT32 , & lšk_ty³ , 7788 DBUS_TYPE_INT32 , & rssi_dbm , 7789 DBUS_TYPE_INVALID ); 7790 } } 7792  $rssi_’abËd_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 7793 cÚ¡ * ·¿m , * u£r_d©a ) 7795 cÚ¡  mgmt_cc_r¥_’abË_rssi * ev = ·¿m ; 7796  btd_ad­‹r * ad­‹r = u£r_d©a ; 7797  addr [18]; 7798 * bt_addr = NULL ; 7799  ’abËd = TRUE ; 7800  lšk_ty³ = -1; 7802 ià( Ëngth < (* ev )) { 7803 `”rÜ ("Too small„ssiƒnabledƒvent"); 7807 `ba2¡r (& ev -> bt_add»ss , addr ); 7808 `DBG ("hci%u % %d", šdex , addr , ev -> lšk_ty³ ); 7809 `DBG ("RSSI EÇbËd [%d %d]", ev -> Ë_ext_Ýcode ,ƒv-> ¡©us ); 7811 bt_addr = (*)& addr ; 7812 lšk_ty³ = ev ->link_type; 7814 `g_dbus_em™_sigÇl ( dbus_cÚn , ad­‹r -> ·th , 7815 ADAPTER_INTERFACE , "RssiEnabled", 7816 DBUS_TYPE_STRING , & bt_addr , 7817 DBUS_TYPE_INT32 , & lšk_ty³ , 7818 DBUS_TYPE_BOOLEAN , & ’abËd , 7819 DBUS_TYPE_INVALID ); 7820 } } 7822  $rssi_di§bËd_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 7823 cÚ¡ * ·¿m , * u£r_d©a ) 7825 cÚ¡  mgmt_cc_½_di§bË_rssi * ev = ·¿m ; 7826  btd_ad­‹r * ad­‹r = u£r_d©a ; 7827  addr [18]; 7828 * bt_addr = NULL ; 7829  di§bËd = FALSE ; 7830  lšk_ty³ = -1; 7832 ià( Ëngth < (* ev )) { 7833 `”rÜ ("Too small RSSI disabledƒvent"); 7837 `ba2¡r (& ev -> bt_add»ss , addr ); 7838 `DBG ("hci%u % %d", šdex , addr , ev -> lšk_ty³ ); 7839 `DBG ("RSSI Di§bËd P¬am [%d %d]", ev -> Ë_ext_Ýcode ,ƒv-> ¡©us ); 7841 bt_addr = (*)& addr ; 7842 lšk_ty³ = ev ->link_type; 7844 `g_dbus_em™_sigÇl ( dbus_cÚn , ad­‹r -> ·th , 7845 ADAPTER_INTERFACE , "RssiEnabled", 7846 DBUS_TYPE_STRING , & bt_addr , 7847 DBUS_TYPE_INT32 , & lšk_ty³ , 7848 DBUS_TYPE_BOOLEAN , & di§bËd , 7849 DBUS_TYPE_INVALID ); 7850 } } 7852  $ad­‹r_check_v”siÚ ( btd_ad­‹r * ad­‹r , ušt8_t hci_v” ) 7854 * v” ; 7856  hci_v” ) { 7858 v” = "Bluetooth 1.0b"; 7861 v” = "Bluetooth 1.1"; 7864 v” = "Bluetooth 1.2"; 7867 v” = "Bluetooth 2.0 + EDR"; 7870 v” = "Bluetooth 2.1 + EDR"; 7873 v” = "Bluetooth 3.0 + HS"; 7876 v” = "Bluetooth 4.0"; 7879 v” = "Bluetooth 4.1"; 7882 v” = "Unknown"; 7886 ià( ad­‹r -> v”siÚ ) 7887 `g_ä“ ( ad­‹r -> v”siÚ ); 7889 ad­‹r -> v”siÚ = `g_¡rdup ( v” ); 7890 } } 7892  $Ãw_loÿl_œk_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 7893 cÚ¡ * ·¿m , * u£r_d©a ) 7895 cÚ¡  mgmt_ev_Ãw_loÿl_œk * ev = ·¿m ; 7896  btd_ad­‹r * ad­‹r = u£r_d©a ; 7898 ià( Ëngth < (* ev )) { 7899 `”rÜ ("Too small size of Local IRK generated"); 7903 `DBG ("LoÿÈIRK g’”©ed fÜ hci%u", šdex ); 7905 `mem£t ( ad­‹r -> loÿl_œk , 0, (adapter->local_irk)); 7906 `memýy ( ad­‹r -> loÿl_œk , (*) ev -> œk , (adapter->local_irk)); 7907 `¡Üe_ad­‹r_šfo ( ad­‹r ); 7908 } } 7910  $h¬dw¬e_”rÜ_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 7911 cÚ¡ * ·¿m , * u£r_d©a ) 7913 cÚ¡  mgmt_ev_h¬dw¬e_”rÜ * ev = ·¿m ; 7914  btd_ad­‹r * ad­‹r = u£r_d©a ; 7916 ià( Ëngth < (* ev )) { 7917 `”rÜ ("Too small Hardwareƒrrorƒvent"); 7921 `”rÜ ("H¬dw¬”rÜ occu¼ed : %d", ev -> ”rÜ_code ); 7922 `g_dbus_em™_sigÇl ( dbus_cÚn , ad­‹r -> ·th , 7923 ADAPTER_INTERFACE , "HardwareError", 7924 DBUS_TYPE_INVALID ); 7925 } } 7927  $tx_timeout_”rÜ_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 7928 cÚ¡ * ·¿m , * u£r_d©a ) 7930  btd_ad­‹r * ad­‹r = u£r_d©a ; 7932 `”rÜ ("Tx Timeoutƒrror occurred"); 7933 `g_dbus_em™_sigÇl ( dbus_cÚn , ad­‹r -> ·th , 7934 ADAPTER_INTERFACE , "TxTimeoutError", 7935 DBUS_TYPE_INVALID ); 7936 } } 7938  $deviû_Çme_upd©e_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 7939 cÚ¡ * ·¿m , * u£r_d©a ) 7941 cÚ¡  mgmt_ev_deviû_Çme_upd©e * ev = ·¿m ; 7942  btd_ad­‹r * ad­‹r = u£r_d©a ; 7943  btd_deviû * deviû ; 7944  addr [18]; 7945 cÚ¡ * eœ_Çme ; 7946  eœ_d©a ƒir_data; 7948 ià( Ëngth < (* ev )) { 7949 `”rÜ ("Name updateƒrrorƒvent"); 7953 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 7954 `DBG ("hci%u %s", šdex , addr ); 7956 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & ev -> addr . bdaddr , 7957 ev -> addr . ty³ ); 7958 ià(! deviû ) { 7959 `”rÜ ("UÇbËØg‘ deviû objeù fÜ %s", addr ); 7963 ià( ev -> eœ_Ën == 0) 7966 eœ_Çme = ev -> eœ ; 7968 `mem£t (& eœ_d©a , 0, (eir_data)); 7969 `eœ_·r£ (& eœ_d©a , eœ_Çme , ev -> eœ_Ën ); 7971 ià( eœ_d©a . Çme ) 7972 `btd_deviû_deviû_£t_Çme ( deviû , eœ_d©a . Çme ); 7974 `eœ_d©a_ä“ (& eœ_d©a ); 7975 } } 7978  btd_ad­‹r_pš_cb_™” * $btd_ad­‹r_pš_cb_™”_Ãw ( 7979  btd_ad­‹r * ad­‹r ) 7981  btd_ad­‹r_pš_cb_™” * ™” = 7982 `g_Ãw0 ( btd_ad­‹r_pš_cb_™” , 1); 7984 ™” -> ™ = ad­‹r -> pš_ÿÎbacks ; 7985 ™” -> ©‹m± = 1; 7987  ™” ; 7988 } } 7990  $btd_ad­‹r_pš_cb_™”_ä“ ( btd_ad­‹r_pš_cb_™” * ™” ) 7992 `g_ä“ ( ™” ); 7993 } } 7995 boÞ $btd_ad­‹r_pš_cb_™”_’d ( btd_ad­‹r_pš_cb_™” * ™” ) 7997  ™” -> ™ =ð NULL && i‹r-> ©‹m± == 0; 7998 } } 8000  ssize_t $btd_ad­‹r_pš_cb_™”_Ãxt ( 8001  btd_ad­‹r_pš_cb_™” * ™” , 8002  btd_ad­‹r * ad­‹r , 8003  btd_deviû * deviû , 8004 * pš_buf , boÞ * di¥Ïy ) 8006 btd_ad­‹r_pš_cb_t cb ; 8007 ssize_t »t ; 8009  ™” -> ™ !ð NULL ) { 8010 cb = ™” -> ™ -> d©a ; 8011 »t = `cb ( ad­‹r , deviû , pš_buf , di¥Ïy , ™” -> ©‹m± ); 8012 ™” -> ©‹m± ++; 8013 ià( »t > 0) 8014  »t ; 8015 ™” -> ©‹m± = 1; 8016 ™” -> ™ = `g_¦i¡_Ãxt (iter->it); 8018 ™” -> ©‹m± = 0; 8021 } } 8023  $pš_code_»que¡_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 8024 cÚ¡ * ·¿m , * u£r_d©a ) 8026 cÚ¡  mgmt_ev_pš_code_»que¡ * ev = ·¿m ; 8027  btd_ad­‹r * ad­‹r = u£r_d©a ; 8028  btd_deviû * deviû ; 8029 boÞ di¥Ïy = çl£ ; 8030  pš [17]; 8031 ssize_t pšËn ; 8032  addr [18]; 8033  ”r ; 8034  btd_ad­‹r_pš_cb_™” * ™” ; 8036 ià( Ëngth < (* ev )) { 8037 `”rÜ ("Too small PIN code„equestƒvent"); 8041 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 8043 `DBG ("hci%u %s", ad­‹r -> dev_id , addr ); 8045 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & ev -> addr . bdaddr , 8046 ev -> addr . ty³ ); 8047 ià(! deviû ) { 8048 `”rÜ ("UÇbËØg‘ deviû objeù fÜ %s", addr ); 8053 ad­‹r -> pšcode_»que¡ed = Œue ; 8054 #ifdeà __TIZEN_PATCH__ 8055 `btd_deviû_£t_Ëgacy_·œšg ( deviû , Œue ); 8058 `mem£t ( pš , 0, (pin)); 8060 ™” = `deviû_bÚdšg_™” ( deviû ); 8061 ià( ™” =ð NULL ) 8062 pšËn = 0; 8064 pšËn = `btd_ad­‹r_pš_cb_™”_Ãxt ( ™” , ad­‹r , deviû , 8065 pš , & di¥Ïy ); 8067 ià( pšËn > 0 && (! ev -> £cu» ||…inlen == 16)) { 8068 ià( di¥Ïy && `deviû_is_bÚdšg ( deviû , NULL )) { 8069 ”r = `deviû_nÙify_pšcode ( deviû , ev -> £cu» , pš ); 8070 ià( ”r < 0) { 8071 `”rÜ ("deviû_nÙify_pš: %s", `¡»¼Ü (- ”r )); 8072 `btd_ad­‹r_pšcode_»¶y ( ad­‹r , 8073 & ev -> addr . bdaddr , 8074 NULL , 0); 8077 `btd_ad­‹r_pšcode_»¶y ( ad­‹r , & ev -> addr . bdaddr , 8078 pš , pšËn ); 8083 ”r = `deviû_»que¡_pšcode ( deviû , ev -> £cu» ); 8084 ià( ”r < 0) { 8085 `”rÜ ("deviû_»que¡_pš: %s", `¡»¼Ü (- ”r )); 8086 `btd_ad­‹r_pšcode_»¶y ( ad­‹r , & ev -> addr . bdaddr , NULL , 0); 8088 } } 8090  $ad­‹r_ÿnûl_bÚdšg ( btd_ad­‹r * ad­‹r , cÚ¡ bdaddr_t * bdaddr , 8091 ušt8_t addr_ty³ ) 8093  mgmt_addr_šfo ý ; 8094  addr [18]; 8096 `ba2¡r ( bdaddr , addr ); 8097 `DBG ("hci%u bdadd¸% ty³ %u", ad­‹r -> dev_id , addr , addr_ty³ ); 8099 `mem£t (& ý , 0, (cp)); 8100 `baýy (& ý . bdaddr , bdaddr); 8101 ý . ty³ = addr_ty³ ; 8103 ià( `mgmt_»¶y ( ad­‹r -> mgmt , MGMT_OP_CANCEL_PAIR_DEVICE , 8104 ad­‹r -> dev_id , ( ý ), &cp, 8105 NULL , NULL, NULL) > 0) 8108  - EIO ; 8109 } } 8111  $check_oob_bÚdšg_com¶‘e ( btd_ad­‹r * ad­‹r , 8112 cÚ¡ bdaddr_t * bdaddr , ušt8_t ¡©us ) 8114 ià(! ad­‹r -> oob_hªdËr || !ad­‹r->oob_hªdËr-> bÚdšg_cb ) 8117 ià( `bacmp ( bdaddr , & ad­‹r -> oob_hªdËr -> »mÙe_addr ) != 0) 8120 ad­‹r -> oob_hªdËr -> `bÚdšg_cb ×d­‹r, bdaddr , ¡©us , 8121 ad­‹r -> oob_hªdËr -> u£r_d©a ); 8123 `g_ä“ ( ad­‹r -> oob_hªdËr ); 8124 ad­‹r -> oob_hªdËr = NULL ; 8125 } } 8127  $bÚdšg_com¶‘e ( btd_ad­‹r * ad­‹r , 8128 cÚ¡ bdaddr_t * bdaddr , 8129 ušt8_t addr_ty³ , ušt8_ˆ ¡©us ) 8131  btd_deviû * deviû ; 8133 ià( ¡©us == 0) 8134 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , bdaddr , addr_ty³ ); 8136 deviû = `btd_ad­‹r_fšd_deviû ( ad­‹r , bdaddr , addr_ty³ ); 8138 ià( deviû !ð NULL ) 8139 `deviû_bÚdšg_com¶‘e ( deviû , addr_ty³ , ¡©us ); 8141 #ifdeà __TIZEN_PATCH__ 8145 `»sume_discov”y ( ad­‹r ); 8147 `check_oob_bÚdšg_com¶‘e ( ad­‹r , bdaddr , ¡©us ); 8148 } } 8153  $bÚdšg_©‹m±_com¶‘e ( btd_ad­‹r * ad­‹r , 8154 cÚ¡ bdaddr_t * bdaddr , 8155 ušt8_t addr_ty³ , ušt8_ˆ ¡©us ) 8157  btd_deviû * deviû ; 8158  addr [18]; 8160 `ba2¡r ( bdaddr , addr ); 8161 `DBG ("hci%u bdadd¸% ty³ %u stu 0x%x", ad­‹r -> dev_id , addr , 8162 addr_ty³ , ¡©us ); 8164 ià( ¡©us == 0) 8165 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , bdaddr , addr_ty³ ); 8167 deviû = `btd_ad­‹r_fšd_deviû ( ad­‹r , bdaddr , addr_ty³ ); 8169 ià( ¡©us =ð MGMT_STATUS_AUTH_FAILED && ad­‹r -> pšcode_»que¡ed ) { 8171 ià( deviû !ð NULL ) { 8172 ià( `deviû_bÚdšg_©‹m±_»Œy ( deviû ) == 0) 8178 ià( ¡©us =ð MGMT_STATUS_DISCONNECTED && 8179 deviû && `deviû_is_»Œyšg (device)) 8183 `bÚdšg_com¶‘e ( ad­‹r , bdaddr , addr_ty³ , ¡©us ); 8184 } } 8186  s·œ_deviû_d©a { 8187  btd_ad­‹r * mad­‹r ; 8188 bdaddr_t mbdaddr ; 8189 ušt8_t maddr_ty³ ; 8192  $ä“_·œ_deviû_d©a (* u£r_d©a ) 8194  ·œ_deviû_d©a * d©a = u£r_d©a ; 8196 `g_ä“ ( d©a ); 8197 } } 8199  gboÞ—n $·œ_deviû_timeout ( gpoš‹r u£r_d©a ) 8201  ·œ_deviû_d©a * d©a = u£r_d©a ; 8202  btd_ad­‹r * ad­‹r = d©a ->adapter; 8204 `”rÜ ("Paœ deviûimed ouˆfÜ hci%u", ad­‹r -> dev_id ); 8206 ad­‹r -> ·œ_deviû_timeout = 0; 8208 `ad­‹r_ÿnûl_bÚdšg ( ad­‹r , & d©a -> bdaddr , d©a-> addr_ty³ ); 8210  FALSE ; 8211 } } 8213  $·œ_deviû_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 8214 cÚ¡ * ·¿m , * u£r_d©a ) 8216 cÚ¡  mgmt_½_·œ_deviû * ½ = ·¿m ; 8217  ·œ_deviû_d©a * d©a = u£r_d©a ; 8218  btd_ad­‹r * ad­‹r = d©a ->adapter; 8220 `DBG ("% (0x%02x)", `mgmt_”r¡r ( ¡©us ), status); 8222 ad­‹r -> ·œ_deviû_id = 0; 8224 ià( ad­‹r -> ·œ_deviû_timeout > 0) { 8225 `g_sourû_»move ( ad­‹r -> ·œ_deviû_timeout ); 8226 ad­‹r -> ·œ_deviû_timeout = 0; 8235 ià( ¡©us !ð MGMT_STATUS_SUCCESS && Ëngth < (* ½ )) { 8236 `”rÜ ("Pair device failed: %s (0x%02x)", 8237 `mgmt_”r¡r ( ¡©us ), status); 8239 `bÚdšg_©‹m±_com¶‘e ( ad­‹r , & d©a -> bdaddr , 8240 d©a -> addr_ty³ , ¡©us ); 8244 ià( Ëngth < (* ½ )) { 8245 `”rÜ ("Too small…air device„esponse"); 8249 `bÚdšg_©‹m±_com¶‘e ( ad­‹r , & ½ -> addr . bdaddr ,„p->addr. ty³ , 8250 ¡©us ); 8251 } } 8253  $ad­‹r_ü—‹_bÚdšg ( btd_ad­‹r * ad­‹r , cÚ¡ bdaddr_t * bdaddr , 8254 ušt8_t addr_ty³ , ušt8_ˆ io_ÿp ) 8256 ià( ad­‹r -> ·œ_deviû_id > 0) { 8257 `”rÜ ("Unable…air since‡nother…airing is in…rogress"); 8258  - EBUSY ; 8261 #iâdeà __TIZEN_PATCH__ 8262 `su¥’d_discov”y ( ad­‹r ); 8264  `ad­‹r_bÚdšg_©‹m± ( ad­‹r , bdaddr , addr_ty³ , io_ÿp ); 8265 } } 8268  $ad­‹r_bÚdšg_©‹m± ( btd_ad­‹r * ad­‹r , cÚ¡ bdaddr_t * bdaddr , 8269 ušt8_t addr_ty³ , ušt8_ˆ io_ÿp ) 8271  mgmt_ý_·œ_deviû ý ; 8272  addr [18]; 8273  ·œ_deviû_d©a * d©a ; 8274  id ; 8276 `ba2¡r ( bdaddr , addr ); 8277 `DBG ("hci%u bdaddr %sype %d io_cap 0x%02x", 8278 ad­‹r -> dev_id , addr , addr_ty³ , io_ÿp ); 8281 ad­‹r -> pšcode_»que¡ed = çl£ ; 8283 `mem£t (& ý , 0, (cp)); 8284 `baýy (& ý . addr . bdaddr , bdaddr); 8285 ý . addr . ty³ = addr_ty³ ; 8286 ý . io_ÿp = io_cap; 8288 d©a = `g_Ãw0 ( ·œ_deviû_d©a , 1); 8289 d©a -> ad­‹r =‡dapter; 8290 `baýy (& d©a -> bdaddr , bdaddr); 8291 d©a -> addr_ty³ =‡ddr_type; 8293 id = `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_PAIR_DEVICE , 8294 ad­‹r -> dev_id , ( ý ), &cp, 8295 ·œ_deviû_com¶‘e , d©a , 8296 ä“_·œ_deviû_d©a ); 8298 ià( id == 0) { 8299 `”rÜ ("FažedØ·œ % fÜ hci%u", addr , ad­‹r -> dev_id ); 8300 `ä“_·œ_deviû_d©a ( d©a ); 8301  - EIO ; 8304 ad­‹r -> ·œ_deviû_id = id ; 8310 ad­‹r -> ·œ_deviû_timeout = `g_timeout_add_£cÚds ( BONDING_TIMEOUT , 8311 ·œ_deviû_timeout , d©a ); 8314 } } 8316  $discÚÃù_nÙify ( btd_deviû * dev , ušt8_t »asÚ ) 8318 GSLi¡ * l ; 8320  l = discÚÃù_li¡ ;†;† = `g_¦i¡_Ãxt (l)) { 8321 btd_discÚÃù_cb discÚÃù_cb = l -> d©a ; 8322 `discÚÃù_cb ( dev , »asÚ ); 8324 } } 8326  $dev_discÚÃùed ( btd_ad­‹r * ad­‹r , 8327 cÚ¡  mgmt_addr_šfo * addr , 8328 ušt8_t »asÚ ) 8330  btd_deviû * deviû ; 8331  d¡ [18]; 8333 `ba2¡r (& addr -> bdaddr , d¡ ); 8335 `DBG ("Deviû % discÚÃùed,„—sÚ %u", d¡ , »asÚ ); 8337 deviû = `btd_ad­‹r_fšd_deviû ( ad­‹r , & addr -> bdaddr ,‡ddr-> ty³ ); 8339 #ifdeà __TIZEN_PATCH__ 8340 ià( deviû ) { 8341 `deviû_£t_discÚÃù_»asÚ ( deviû , »asÚ ); 8342 `ad­‹r_»move_cÚÃùiÚ ( ad­‹r , deviû , addr -> ty³ ); 8343 `discÚÃù_nÙify ( deviû , »asÚ ); 8344 ià( `deviû_is_bÚded ( deviû , addr -> ty³ )) { 8345 `DBG ("add¸ty³ %d, bÚded", addr -> ty³ ); 8350 ià( deviû ) { 8351 `ad­‹r_»move_cÚÃùiÚ ( ad­‹r , deviû , addr -> ty³ ); 8352 `discÚÃù_nÙify ( deviû , »asÚ ); 8356 `bÚdšg_©‹m±_com¶‘e ( ad­‹r , & addr -> bdaddr ,‡ddr-> ty³ , 8357 MGMT_STATUS_DISCONNECTED ); 8358 } } 8360  $btd_add_discÚÃù_cb ( btd_discÚÃù_cb func ) 8362 discÚÃù_li¡ = `g_¦i¡_­³nd (discÚÃù_li¡, func ); 8363 } } 8365  $btd_»move_discÚÃù_cb ( btd_discÚÃù_cb func ) 8367 discÚÃù_li¡ = `g_¦i¡_»move (discÚÃù_li¡, func ); 8368 } } 8370  $discÚÃù_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 8371 cÚ¡ * ·¿m , * u£r_d©a ) 8373 cÚ¡  mgmt_½_discÚÃù * ½ = ·¿m ; 8374  btd_ad­‹r * ad­‹r = u£r_d©a ; 8376 ià( ¡©us =ð MGMT_STATUS_NOT_CONNECTED ) { 8377 `w¬n ("Disconnecting failed:‡lready disconnected"); 8378 } ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 8379 `”rÜ ("Failedo disconnect device: %s (0x%02x)", 8380 `mgmt_”r¡r ( ¡©us ), status); 8384 ià( Ëngth < (* ½ )) { 8385 `”rÜ ("Too small device disconnect„esponse"); 8389 `dev_discÚÃùed ( ad­‹r , & ½ -> addr , MGMT_DEV_DISCONN_LOCAL_HOST ); 8390 } } 8392  $btd_ad­‹r_discÚÃù_deviû ( btd_ad­‹r * ad­‹r , 8393 cÚ¡ bdaddr_t * bdaddr , 8394 ušt8_t bdaddr_ty³ ) 8397  mgmt_ý_discÚÃù ý ; 8399 `mem£t (& ý , 0, (cp)); 8400 `baýy (& ý . addr . bdaddr , bdaddr); 8401 ý . addr . ty³ = bdaddr_ty³ ; 8403 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_DISCONNECT , 8404 ad­‹r -> dev_id , ( ý ), &cp, 8405 discÚÃù_com¶‘e , ad­‹r , NULL ) > 0) 8408  - EIO ; 8409 } } 8411  $auth_çžed_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 8412 cÚ¡ * ·¿m , * u£r_d©a ) 8414 cÚ¡  mgmt_ev_auth_çžed * ev = ·¿m ; 8415  btd_ad­‹r * ad­‹r = u£r_d©a ; 8417 ià( Ëngth < (* ev )) { 8418 `”rÜ ("Too small‡uth failed mgmtƒvent"); 8422 `bÚdšg_©‹m±_com¶‘e ( ad­‹r , & ev -> addr . bdaddr ,ƒv->addr. ty³ , 8423 ev -> ¡©us ); 8424 } } 8426  $¡Üe_lšk_key ( btd_ad­‹r * ad­‹r , 8427  btd_deviû * deviû , cÚ¡ ušt8_t * key , 8428 ušt8_t ty³ , ušt8_ˆ pš_Ëngth ) 8430  ad­‹r_addr [18]; 8431  deviû_addr [18]; 8432  fž’ame [ PATH_MAX ]; 8433 GKeyFže * key_fže ; 8434 gsize Ëngth = 0; 8435  key_¡r [33]; 8436 * ¡r ; 8437  i ; 8439 `ba2¡r ( `btd_ad­‹r_g‘_add»ss ( ad­‹r ), ad­‹r_addr ); 8440 `ba2¡r ( `deviû_g‘_add»ss ( deviû ), deviû_addr ); 8442 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/šfo", ad­‹r_addr , 8443 deviû_addr ); 8444 key_fže = `g_key_fže_Ãw (); 8445 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 8447  i = 0; i < 16; i++) 8448 `¥rštf ( key_¡r + ( i * 2), "%2.2X", key [i]); 8450 `g_key_fže_£t_¡ršg ( key_fže , "LškKey", "Key", key_¡r ); 8452 `g_key_fže_£t_š‹g” ( key_fže , "LškKey", "Ty³", ty³ ); 8453 `g_key_fže_£t_š‹g” ( key_fže , "LškKey", "PINL’gth", pš_Ëngth ); 8455 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 8457 ¡r = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 8458 `g_fže_£t_cÚ‹Ás ( fž’ame , ¡r , Ëngth , NULL ); 8459 `g_ä“ ( ¡r ); 8461 `g_key_fže_ä“ ( key_fže ); 8462 } } 8464  $Ãw_lšk_key_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 8465 cÚ¡ * ·¿m , * u£r_d©a ) 8467 cÚ¡  mgmt_ev_Ãw_lšk_key * ev = ·¿m ; 8468 cÚ¡  mgmt_addr_šfo * addr = & ev -> key .addr; 8469  btd_ad­‹r * ad­‹r = u£r_d©a ; 8470  btd_deviû * deviû ; 8471  d¡ [18]; 8473 ià( Ëngth < (* ev )) { 8474 `”rÜ ("Too small‚ew†ink keyƒvent"); 8478 `ba2¡r (& addr -> bdaddr , d¡ ); 8480 `DBG ("hci%u‚ew key fÜ % ty³ %u…š_ËÀ%u", ad­‹r -> dev_id , 8481 d¡ , ev -> key . ty³ ,ƒv->key. pš_Ën ); 8483 ià( ev -> key . pš_Ën > 16) { 8484 `”rÜ ("Invalid PIN†ength (%u) in‚ew_keyƒvent", 8485 ev -> key . pš_Ën ); 8489 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & addr -> bdaddr ,‡ddr-> ty³ ); 8490 ià(! deviû ) { 8491 `”rÜ ("UÇbËØg‘ deviû objeù fÜ %s", d¡ ); 8495 ià( ev -> ¡Üe_hšt ) { 8496 cÚ¡  mgmt_lšk_key_šfo * key = & ev ->key; 8498 `¡Üe_lšk_key ( ad­‹r , deviû , key -> v® , key-> ty³ , 8499 key -> pš_Ën ); 8501 `deviû_£t_bÚded ( deviû , BDADDR_BREDR ); 8503 ià( `deviû_is_‹mpܬy ( deviû )) 8504 `btd_deviû_£t_‹mpܬy ( deviû , FALSE ); 8507 `bÚdšg_com¶‘e ( ad­‹r , & addr -> bdaddr ,‡ddr-> ty³ , 0); 8508 } } 8510  $¡Üe_lÚg‹rmkey (cÚ¡ bdaddr_t * loÿl , cÚ¡ bdaddr_ˆ* ³” , 8511 ušt8_t bdaddr_ty³ , cÚ¡ * key , 8512 ušt8_t ma¡” , ušt8_ˆ auth’tiÿ‹d , 8513 ušt8_t ’c_size , ušt16_t ediv , 8514 ušt64_t ¿nd ) 8516 cÚ¡ * group = ma¡” ? "LongTermKey" : "SlaveLongTermKey"; 8517  ad­‹r_addr [18]; 8518  deviû_addr [18]; 8519  fž’ame [ PATH_MAX ]; 8520 GKeyFže * key_fže ; 8521  key_¡r [33]; 8522 gsize Ëngth = 0; 8523 * ¡r ; 8524  i ; 8526 ià( ma¡” != 0x00 && master != 0x01) { 8527 `”rÜ ("UnsuµÜ‹d LTKy³ %u", ma¡” ); 8531 `ba2¡r ( loÿl , ad­‹r_addr ); 8532 `ba2¡r ( ³” , deviû_addr ); 8534 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/šfo", ad­‹r_addr , 8535 deviû_addr ); 8536 key_fže = `g_key_fže_Ãw (); 8537 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 8540 `g_key_fže_»move_key ( key_fže , "LÚgT”mKey", "Ma¡”", NULL ); 8542  i = 0; i < 16; i++) 8543 `¥rštf ( key_¡r + ( i * 2), "%2.2X", key [i]); 8545 `g_key_fže_£t_¡ršg ( key_fže , group , "Key", key_¡r ); 8547 `g_key_fže_£t_š‹g” ( key_fže , group , "Authenticated", 8548 auth’tiÿ‹d ); 8549 `g_key_fže_£t_š‹g” ( key_fže , group , "EncSize", ’c_size ); 8551 `g_key_fže_£t_š‹g” ( key_fže , group , "EDiv", ediv ); 8552 `g_key_fže_£t_ušt64 ( key_fže , group , "Rªd", ¿nd ); 8554 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 8556 ¡r = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 8557 `g_fže_£t_cÚ‹Ás ( fž’ame , ¡r , Ëngth , NULL ); 8558 `g_ä“ ( ¡r ); 8560 `g_key_fže_ä“ ( key_fže ); 8561 } } 8563  $Ãw_lÚg_‹rm_key_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 8564 cÚ¡ * ·¿m , * u£r_d©a ) 8566 cÚ¡  mgmt_ev_Ãw_lÚg_‹rm_key * ev = ·¿m ; 8567 cÚ¡  mgmt_addr_šfo * addr = & ev -> key .addr; 8568  btd_ad­‹r * ad­‹r = u£r_d©a ; 8569  btd_deviû * deviû ; 8570 boÞ ³rsi¡’t ; 8571  d¡ [18]; 8573 ià( Ëngth < (* ev )) { 8574 `”rÜ ("Too small†ongerm keyƒvent"); 8578 `ba2¡r (& addr -> bdaddr , d¡ ); 8580 `DBG ("hci%u‚ew LTK for %sype %uƒnc_size %u", 8581 ad­‹r -> dev_id , d¡ , ev -> key . ty³ ,ƒv->key. ’c_size ); 8583 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & addr -> bdaddr ,‡ddr-> ty³ ); 8584 ià(! deviû ) { 8585 `”rÜ ("UÇbËØg‘ deviû objeù fÜ %s", d¡ ); 8600 ià( addr -> ty³ =ð BDADDR_LE_RANDOM && 8601 ( addr -> bdaddr . b [5] & 0xc0) != 0xc0) 8602 ³rsi¡’t = çl£ ; 8604 ³rsi¡’t = !! ev -> ¡Üe_hšt ; 8606 ià( ³rsi¡’t ) { 8607 cÚ¡  mgmt_Ék_šfo * key = & ev ->key; 8608 cÚ¡ bdaddr_t * bdaddr = `btd_ad­‹r_g‘_add»ss ( ad­‹r ); 8609 ušt16_t ediv ; 8610 ušt64_t ¿nd ; 8612 ediv = `Ë16_to_ýu ( key ->ediv); 8613 ¿nd = `Ë64_to_ýu ( key ->rand); 8615 `¡Üe_lÚg‹rmkey ( bdaddr , & key -> addr .bdaddr, 8616 key -> addr . ty³ , key-> v® , key-> ma¡” , 8617 key -> ty³ , key-> ’c_size , ediv , ¿nd ); 8619 `deviû_£t_bÚded ( deviû , addr -> ty³ ); 8621 ià( `deviû_is_‹mpܬy ( deviû )) 8622 `btd_deviû_£t_‹mpܬy ( deviû , FALSE ); 8625 `bÚdšg_com¶‘e ( ad­‹r , & addr -> bdaddr ,‡ddr-> ty³ , 0); 8626 } } 8628  $¡Üe_c¤k (cÚ¡ bdaddr_t * loÿl , cÚ¡ bdaddr_ˆ* ³” , 8629 ušt8_t bdaddr_ty³ , cÚ¡ * key , 8630 ušt8_t ma¡” ) 8632 cÚ¡ * group ; 8633  ad­‹r_addr [18]; 8634  deviû_addr [18]; 8635  fž’ame [ PATH_MAX ]; 8636 GKeyFže * key_fže ; 8637  key_¡r [33]; 8638 gsize Ëngth = 0; 8639 * ¡r ; 8640  i ; 8642 ià( ma¡” == 0x00) 8643 group = "LocalSignatureKey"; 8644 ià( ma¡” == 0x01) 8645 group = "RemoteSignatureKey"; 8647 `w¬n ("UnsuµÜ‹d CSRKy³ %u", ma¡” ); 8651 `ba2¡r ( loÿl , ad­‹r_addr ); 8652 `ba2¡r ( ³” , deviû_addr ); 8654 `¢´štf ( fž’ame , (fž’ame), STORAGEDIR "/%s/%s/info", 8655 ad­‹r_addr , deviû_addr ); 8657 key_fže = `g_key_fže_Ãw (); 8658 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 8660  i = 0; i < 16; i++) 8661 `¥rštf ( key_¡r + ( i * 2), "%2.2X", key [i]); 8663 `g_key_fže_£t_¡ršg ( key_fže , group , "Key", key_¡r ); 8665 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 8667 ¡r = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 8668 `g_fže_£t_cÚ‹Ás ( fž’ame , ¡r , Ëngth , NULL ); 8669 `g_ä“ ( ¡r ); 8671 `g_key_fže_ä“ ( key_fže ); 8672 } } 8674  $Ãw_c¤k_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 8675 cÚ¡ * ·¿m , * u£r_d©a ) 8677 cÚ¡  mgmt_ev_Ãw_c¤k * ev = ·¿m ; 8678 cÚ¡  mgmt_addr_šfo * addr = & ev -> key .addr; 8679 cÚ¡  mgmt_c¤k_šfo * key = & ev ->key; 8680  btd_ad­‹r * ad­‹r = u£r_d©a ; 8681 cÚ¡ bdaddr_t * bdaddr = `btd_ad­‹r_g‘_add»ss ( ad­‹r ); 8682  btd_deviû * deviû ; 8683  d¡ [18]; 8685 ià( Ëngth < (* ev )) { 8686 `”rÜ ("Too small CSRKƒvent"); 8690 `ba2¡r (& addr -> bdaddr , d¡ ); 8692 `DBG ("hci%u‚ew CSRK fÜ % ma¡” %u", ad­‹r -> dev_id , d¡ , 8693 ev -> key . ma¡” ); 8695 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & addr -> bdaddr ,‡ddr-> ty³ ); 8696 ià(! deviû ) { 8697 `”rÜ ("UÇbËØg‘ deviû objeù fÜ %s", d¡ ); 8701 ià(! ev -> ¡Üe_hšt ) 8704 `¡Üe_c¤k ( bdaddr , & key -> addr .bdaddr, key->addr. ty³ , key-> v® , 8705 key -> ma¡” ); 8707 ià( `deviû_is_‹mpܬy ( deviû )) 8708 `btd_deviû_£t_‹mpܬy ( deviû , FALSE ); 8709 } } 8711  $¡Üe_œk ( btd_ad­‹r * ad­‹r , cÚ¡ bdaddr_t * ³” , 8712 ušt8_t bdaddr_ty³ , cÚ¡ * key ) 8714  ad­‹r_addr [18]; 8715  deviû_addr [18]; 8716  fž’ame [ PATH_MAX ]; 8717 GKeyFže * key_fže ; 8718 * ¡Üe_d©a ; 8719  ¡r [33]; 8720 size_t Ëngth = 0; 8721  i ; 8723 `ba2¡r (& ad­‹r -> bdaddr , ad­‹r_addr ); 8724 `ba2¡r ( ³” , deviû_addr ); 8726 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/šfo", ad­‹r_addr , 8727 deviû_addr ); 8728 key_fže = `g_key_fže_Ãw (); 8729 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 8731  i = 0; i < 16; i++) 8732 `¥rštf ( ¡r + ( i * 2), "%2.2X", key [i]); 8734 `g_key_fže_£t_¡ršg ( key_fže , "Id’t™yResÞvšgKey", "Key", ¡r ); 8736 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 8738 ¡Üe_d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 8739 `g_fže_£t_cÚ‹Ás ( fž’ame , ¡Üe_d©a , Ëngth , NULL ); 8740 `g_ä“ ( ¡Üe_d©a ); 8742 `g_key_fže_ä“ ( key_fže ); 8743 } } 8745  $Ãw_œk_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 8746 cÚ¡ * ·¿m , * u£r_d©a ) 8748 cÚ¡  mgmt_ev_Ãw_œk * ev = ·¿m ; 8749 cÚ¡  mgmt_addr_šfo * addr = & ev -> key .addr; 8750 cÚ¡  mgmt_œk_šfo * œk = & ev -> key ; 8751  btd_ad­‹r * ad­‹r = u£r_d©a ; 8752  btd_deviû * deviû , * du¶iÿ‹ ; 8753 boÞ ³rsi¡’t ; 8754  d¡ [18], ½a [18]; 8756 ià( Ëngth < (* ev )) { 8757 `”rÜ ("Too small New IRKƒvent"); 8761 `ba2¡r (& addr -> bdaddr , d¡ ); 8762 `ba2¡r (& ev -> ½a ,„pa); 8764 `DBG ("hci%u‚ew IRK fÜ % RPA %s", ad­‹r -> dev_id , d¡ , ½a ); 8766 ià( `bacmp (& ev -> ½a , BDADDR_ANY )) { 8767 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & ev -> ½a , 8768 BDADDR_LE_RANDOM ); 8769 du¶iÿ‹ = `btd_ad­‹r_fšd_deviû ( ad­‹r , & addr -> bdaddr , 8770 addr -> ty³ ); 8771 ià( du¶iÿ‹ =ð deviû ) 8772 du¶iÿ‹ = NULL ; 8774 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & addr -> bdaddr , 8775 addr -> ty³ ); 8776 du¶iÿ‹ = NULL ; 8779 ià(! deviû ) { 8780 `”rÜ ("UÇbËØg‘ deviû objeù fÜ %s", d¡ ); 8784 `deviû_upd©e_addr ( deviû , & addr -> bdaddr ,‡ddr-> ty³ ); 8786 ià( du¶iÿ‹ ) 8787 `deviû_m”ge_du¶iÿ‹ ( deviû , du¶iÿ‹ ); 8789 ³rsi¡’t = !! ev -> ¡Üe_hšt ; 8790 ià(! ³rsi¡’t ) 8793 `¡Üe_œk ( ad­‹r , & addr -> bdaddr ,‡ddr-> ty³ , œk -> v® ); 8795 ià( `deviû_is_‹mpܬy ( deviû )) 8796 `btd_deviû_£t_‹mpܬy ( deviû , FALSE ); 8797 } } 8799  $¡Üe_cÚn_·¿m ( btd_ad­‹r * ad­‹r , cÚ¡ bdaddr_t * ³” , 8800 ušt8_t bdaddr_ty³ , ušt16_t mš_š‹rv® , 8801 ušt16_t max_š‹rv® , ušt16_ˆ Ï‹ncy , 8802 ušt16_t timeout ) 8804  ad­‹r_addr [18]; 8805  deviû_addr [18]; 8806  fž’ame [ PATH_MAX ]; 8807 GKeyFže * key_fže ; 8808 * ¡Üe_d©a ; 8809 size_t Ëngth = 0; 8811 `ba2¡r (& ad­‹r -> bdaddr , ad­‹r_addr ); 8812 `ba2¡r ( ³” , deviû_addr ); 8814 `DBG (""); 8816 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/šfo", ad­‹r_addr , 8817 deviû_addr ); 8818 key_fže = `g_key_fže_Ãw (); 8819 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 8821 `g_key_fže_£t_š‹g” ( key_fže , "ConnectionParameters", 8822 "MšIÁ”v®", mš_š‹rv® ); 8823 `g_key_fže_£t_š‹g” ( key_fže , "ConnectionParameters", 8824 "MaxIÁ”v®", max_š‹rv® ); 8825 `g_key_fže_£t_š‹g” ( key_fže , "ConnectionParameters", 8826 "L©’cy", Ï‹ncy ); 8827 `g_key_fže_£t_š‹g” ( key_fže , "ConnectionParameters", 8828 "Timeout", timeout ); 8830 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 8832 ¡Üe_d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 8833 `g_fže_£t_cÚ‹Ás ( fž’ame , ¡Üe_d©a , Ëngth , NULL ); 8834 `g_ä“ ( ¡Üe_d©a ); 8836 `g_key_fže_ä“ ( key_fže ); 8837 } } 8839  $Ãw_cÚn_·¿m ( ušt16_t šdex , ušt16_ˆ Ëngth , 8840 cÚ¡ * ·¿m , * u£r_d©a ) 8842 cÚ¡  mgmt_ev_Ãw_cÚn_·¿m * ev = ·¿m ; 8843  btd_ad­‹r * ad­‹r = u£r_d©a ; 8844 ušt16_t mš , max , Ï‹ncy , timeout ; 8845  btd_deviû * dev ; 8846  d¡ [18]; 8849 ià( Ëngth < (* ev )) { 8850 `”rÜ ("Too small New Connection Parameterƒvent"); 8854 `ba2¡r (& ev -> addr . bdaddr , d¡ ); 8856 mš = `btohs ( ev -> mš_š‹rv® ); 8857 max = `btohs ( ev -> max_š‹rv® ); 8858 Ï‹ncy = `btohs ( ev ->latency); 8859 timeout = `btohs ( ev ->timeout); 8861 `DBG ("hci%u %s (%u) min 0x%04x max 0x%04x†atency 0x%04ximeout 0x%04x", 8862 ad­‹r -> dev_id , d¡ , ev -> addr . ty³ , mš , max , Ï‹ncy , timeout ); 8864 dev = `btd_ad­‹r_g‘_deviû ( ad­‹r , & ev -> addr . bdaddr ,ƒv->addr. ty³ ); 8865 ià(! dev ) { 8866 `”rÜ ("UÇbËØg‘ deviû objeù fÜ %s", d¡ ); 8870 ià(! ev -> ¡Üe_hšt ) 8873 `¡Üe_cÚn_·¿m ( ad­‹r , & ev -> addr . bdaddr ,ƒv->addr. ty³ , 8874 ev -> mš_š‹rv® ,ƒv-> max_š‹rv® , 8875 ev -> Ï‹ncy ,ƒv-> timeout ); 8876 } } 8878  $ad­‹r_£t_io_ÿ·bž™y ( btd_ad­‹r * ad­‹r , ušt8_t io_ÿp ) 8880  mgmt_ý_£t_io_ÿ·bž™y ý ; 8882 `mem£t (& ý , 0, (cp)); 8883 ý . io_ÿ·bž™y = io_ÿp ; 8885 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_SET_IO_CAPABILITY , 8886 ad­‹r -> dev_id , ( ý ), &cp, 8887 NULL , NULL, NULL) > 0) 8890  - EIO ; 8891 } } 8893  $btd_ad­‹r_add_»mÙe_oob_d©a ( btd_ad­‹r * ad­‹r , 8894 cÚ¡ bdaddr_t * bdaddr , 8895 ušt8_t * hash , ušt8_ˆ* ¿ndomiz” ) 8897  mgmt_ý_add_»mÙe_oob_d©a ý ; 8898  addr [18]; 8900 `ba2¡r ( bdaddr , addr ); 8901 `DBG ("hci%d bdadd¸%s", ad­‹r -> dev_id , addr ); 8903 `mem£t (& ý , 0, (cp)); 8904 `baýy (& ý . addr . bdaddr , bdaddr); 8905 `memýy ( ý . hash192 , hash , 16); 8907 ià( ¿ndomiz” ) 8908 `memýy ( ý . ¿nd192 , ¿ndomiz” , 16); 8910 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_ADD_REMOTE_OOB_DATA , 8911 ad­‹r -> dev_id , ( ý ), &cp, 8912 NULL , NULL, NULL) > 0) 8915  - EIO ; 8916 } } 8918  $btd_ad­‹r_»move_»mÙe_oob_d©a ( btd_ad­‹r * ad­‹r , 8919 cÚ¡ bdaddr_t * bdaddr ) 8921  mgmt_ý_»move_»mÙe_oob_d©a ý ; 8922  addr [18]; 8924 `ba2¡r ( bdaddr , addr ); 8925 `DBG ("hci%d bdadd¸%s", ad­‹r -> dev_id , addr ); 8927 `mem£t (& ý , 0, (cp)); 8928 `baýy (& ý . addr . bdaddr , bdaddr); 8930 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_REMOVE_REMOTE_OOB_DATA , 8931 ad­‹r -> dev_id , ( ý ), &cp, 8932 NULL , NULL, NULL) > 0) 8935  - EIO ; 8936 } } 8938 boÞ $btd_ad­‹r_s¥_’abËd ( btd_ad­‹r * ad­‹r ) 8940 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_SSP ) 8941  Œue ; 8943  çl£ ; 8944 } } 8946  $btd_ad­‹r_£t_oob_hªdËr ( btd_ad­‹r * ad­‹r , 8947  oob_hªdËr * hªdËr ) 8949 ad­‹r -> oob_hªdËr = hªdËr ; 8950 } } 8952 gboÞ—n $btd_ad­‹r_check_oob_hªdËr ( btd_ad­‹r * ad­‹r ) 8954  ad­‹r -> oob_hªdËr !ð NULL ; 8955 } } 8957  $»ad_loÿl_oob_d©a_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 8958 cÚ¡ * ·¿m , * u£r_d©a ) 8960 cÚ¡  mgmt_½_»ad_loÿl_oob_d©a * ½ = ·¿m ; 8961  btd_ad­‹r * ad­‹r = u£r_d©a ; 8962 cÚ¡ ušt8_t * hash , * ¿ndomiz” ; 8964 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 8965 `”rÜ ("Read†ocal OOB data failed: %s (0x%02x)", 8966 `mgmt_”r¡r ( ¡©us ), status); 8967 hash = NULL ; 8968 ¿ndomiz” = NULL ; 8969 } ià( Ëngth < (* ½ )) { 8970 `”rÜ ("Too small„ead†ocal OOB data„esponse"); 8973 hash = ½ ->hash; 8974 ¿ndomiz” = ½ ->randomizer; 8977 ià(! ad­‹r -> oob_hªdËr || !ad­‹r->oob_hªdËr-> »ad_loÿl_cb ) 8980 ad­‹r -> oob_hªdËr -> `»ad_loÿl_cb ×d­‹r, hash , ¿ndomiz” , 8981 ad­‹r -> oob_hªdËr -> u£r_d©a ); 8983 `g_ä“ ( ad­‹r -> oob_hªdËr ); 8984 ad­‹r -> oob_hªdËr = NULL ; 8985 } } 8987  $btd_ad­‹r_»ad_loÿl_oob_d©a ( btd_ad­‹r * ad­‹r ) 8989 `DBG ("hci%u", ad­‹r -> dev_id ); 8991 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_READ_LOCAL_OOB_DATA , 8992 ad­‹r -> dev_id , 0, NULL , »ad_loÿl_oob_d©a_com¶‘e , 8993 ad­‹r , NULL ) > 0) 8996  - EIO ; 8997 } } 8999  btd_ad­‹r_fÜ_—ch_deviû ( btd_ad­‹r * ad­‹r , 9000 (* cb )( btd_deviû * deviû , * d©a ), 9001 * d©a ) 9003 `g_¦i¡_fÜ—ch ( ad­‹r -> deviûs , ( GFunc è cb , d©a ); 9004 } } 9006  $ad­‹r_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 9008  btd_ad­‹r * ad­‹r = (btd_ad­‹¸*è a ; 9009 cÚ¡ bdaddr_t * bdaddr = b ; 9011  `bacmp (& ad­‹r -> bdaddr , bdaddr); 9012 } } 9014  $ad­‹r_id_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 9016  btd_ad­‹r * ad­‹r = (btd_ad­‹¸*è a ; 9017 ušt16_t id = `GPOINTER_TO_UINT ( b ); 9019  ad­‹r -> dev_id =ð id ? 0 : -1; 9020 } } 9022  btd_ad­‹r * $ad­‹r_fšd (cÚ¡ bdaddr_t * sba ) 9024 GSLi¡ * m©ch ; 9026 m©ch = `g_¦i¡_fšd_cu¡om ( ad­‹rs , sba , ad­‹r_cmp ); 9027 ià(! m©ch ) 9028  NULL ; 9030  m©ch -> d©a ; 9031 } } 9033  btd_ad­‹r * $ad­‹r_fšd_by_id ( id ) 9035 GSLi¡ * m©ch ; 9037 m©ch = `g_¦i¡_fšd_cu¡om ( ad­‹rs , `GINT_TO_POINTER ( id ), 9038 ad­‹r_id_cmp ); 9039 ià(! m©ch ) 9040  NULL ; 9042  m©ch -> d©a ; 9043 } } 9045  $ad­‹r_fÜ—ch ( ad­‹r_cb func , gpoš‹r u£r_d©a ) 9047 `g_¦i¡_fÜ—ch ( ad­‹rs , ( GFunc è func , u£r_d©a ); 9048 } } 9050  $£t_did ( btd_ad­‹r * ad­‹r , ušt16_t v’dÜ , 9051 ušt16_t ´oduù , ušt16_ˆ v”siÚ , ušt16_ˆ sourû ) 9053  mgmt_ý_£t_deviû_id ý ; 9055 `DBG ("hci%u source %x vendor %x…roduct %x version %x", 9056 ad­‹r -> dev_id , sourû , v’dÜ , ´oduù , v”siÚ ); 9058 `mem£t (& ý , 0, (cp)); 9060 ý . sourû = `htobs (source); 9061 ý . v’dÜ = `htobs (vendor); 9062 ý . ´oduù = `htobs (product); 9063 ý . v”siÚ = `htobs (version); 9065 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_SET_DEVICE_ID , 9066 ad­‹r -> dev_id , ( ý ), &cp, 9067 NULL , NULL, NULL) > 0) 9070  - EIO ; 9071 } } 9073  $ad­‹r_»gi¡” ( btd_ad­‹r * ad­‹r ) 9075  ag’t *agent; 9077 ià( pow”šg_down ) 9078  - EBUSY ; 9080 ad­‹r -> ·th = `g_¡rdup_´štf ("/Üg/bluez/hci%d",‡d­‹r-> dev_id ); 9082 ià(! `g_dbus_»gi¡”_š‹rçû ( dbus_cÚn , 9083 ad­‹r -> ·th , ADAPTER_INTERFACE , 9084 #ifdeà __TIZEN_PATCH__ 9085 ad­‹r_m‘hods , ad­‹r_sigÇls , 9087 ad­‹r_m‘hods , NULL , 9089 ad­‹r_´Ý”t›s , ad­‹r , 9090 ad­‹r_ä“ )) { 9091 `”rÜ ("Adapter interface init failed on…ath %s", 9092 ad­‹r -> ·th ); 9093 `g_ä“ ( ad­‹r -> ·th ); 9094 ad­‹r -> ·th = NULL ; 9095  - EINVAL ; 9098 ià( ad­‹rs =ð NULL ) 9099 ad­‹r -> is_deçuÉ = Œue ; 9101 ad­‹rs = `g_¦i¡_­³nd ×d­‹rs, ad­‹r ); 9103 ag’t = `ag’t_g‘ ( NULL ); 9104 ià( ag’t ) { 9105 ušt8_t io_ÿp = `ag’t_g‘_io_ÿ·bž™y ( ag’t ); 9106 `ad­‹r_£t_io_ÿ·bž™y ( ad­‹r , io_ÿp ); 9107 `ag’t_uÄef ( ag’t ); 9110 `btd_ad­‹r_g©t_£rv”_¡¬t ( ad­‹r ); 9112 `lßd_cÚfig ( ad­‹r ); 9113 `fix_¡Üage ( ad­‹r ); 9114 `lßd_driv”s ( ad­‹r ); 9115 `btd_´ofže_fÜ—ch ( ´obe_´ofže , ad­‹r ); 9116 `þ—r_blocked ( ad­‹r ); 9117 `lßd_deviûs ( ad­‹r ); 9119 #ifdeà __TIZEN_PATCH__ 9120 ià( ad­‹r -> Ë_´ivacy_’abËd && 9121 ( ad­‹r -> suµÜ‹d_£‰šgs & MGMT_SETTING_PRIVACY )) 9122 `£t_´ivacy ( ad­‹r , Œue ); 9124 `DBG ("LE…rivacy feature‚ot configured or supported"); 9129 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED ) 9130 `lßd_cÚÃùiÚs ( ad­‹r ); 9132 ad­‹r -> š™Ÿlized = TRUE ; 9134 ià( maš_Ýts . did_sourû ) { 9137 `ad­‹r_£rviû_š£¹ ( ad­‹r , `sdp_»cÜd_fšd (0x10000)); 9138 `£t_did ( ad­‹r , maš_Ýts . did_v’dÜ , maš_Ýts. did_´oduù , 9139 maš_Ýts . did_v”siÚ , maš_Ýts. did_sourû ); 9142 `DBG ("Ad­‹¸% »gi¡”ed", ad­‹r -> ·th ); 9145 } } 9147  $ad­‹r_uÄegi¡” ( btd_ad­‹r * ad­‹r ) 9149 `DBG ("UÄegi¡”…©h: %s", ad­‹r -> ·th ); 9151 ad­‹rs = `g_¦i¡_»move ×d­‹rs, ad­‹r ); 9153 ià( ad­‹r -> is_deçuÉ && ad­‹rs !ð NULL ) { 9154  btd_ad­‹r * Ãw_deçuÉ ; 9156 Ãw_deçuÉ = `ad­‹r_fšd_by_id ( `hci_g‘_rou‹ ( NULL )); 9157 ià( Ãw_deçuÉ =ð NULL ) 9158 Ãw_deçuÉ = ad­‹rs -> d©a ; 9160 Ãw_deçuÉ -> is_deçuÉ = Œue ; 9163 ad­‹r_li¡ = `g_li¡_»move ×d­‹r_li¡, ad­‹r ); 9165 `ad­‹r_»move ( ad­‹r ); 9166 `btd_ad­‹r_uÄef ( ad­‹r ); 9169 } } 9171  $discÚÃùed_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 9172 cÚ¡ * ·¿m , * u£r_d©a ) 9174 cÚ¡  mgmt_ev_deviû_discÚÃùed * ev = ·¿m ; 9175  btd_ad­‹r * ad­‹r = u£r_d©a ; 9176 ušt8_t »asÚ ; 9178 ià( Ëngth < ( mgmt_addr_šfo )) { 9179 `”rÜ ("Too small device disconnectedƒvent"); 9183 ià( Ëngth < (* ev )) 9184 »asÚ = MGMT_DEV_DISCONN_UNKNOWN ; 9186 »asÚ = ev ->reason; 9188 `dev_discÚÃùed ( ad­‹r , & ev -> addr , »asÚ ); 9189 } } 9191  $cÚÃùed_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 9192 cÚ¡ * ·¿m , * u£r_d©a ) 9194 cÚ¡  mgmt_ev_deviû_cÚÃùed * ev = ·¿m ; 9195  btd_ad­‹r * ad­‹r = u£r_d©a ; 9196  btd_deviû * deviû ; 9197  eœ_d©a ƒir_data; 9198 ušt16_t eœ_Ën ; 9199  addr [18]; 9201 ià( Ëngth < (* ev )) { 9202 `”rÜ ("Too small device connectedƒvent"); 9206 eœ_Ën = `btohs ( ev ->eir_len); 9207 ià( Ëngth < (* ev è+ eœ_Ën ) { 9208 `”rÜ ("Too small device connectedƒvent"); 9212 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 9214 `DBG ("hci%u deviû % cÚÃùedƒœ_ËÀ%u", šdex , addr , eœ_Ën ); 9216 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & ev -> addr . bdaddr , 9217 ev -> addr . ty³ ); 9218 ià(! deviû ) { 9219 `”rÜ ("UÇbËØg‘ deviû objeù fÜ %s", addr ); 9223 `mem£t (& eœ_d©a , 0, (eir_data)); 9224 ià( eœ_Ën > 0) 9225 `eœ_·r£ (& eœ_d©a , ev -> eœ , eœ_Ën ); 9227 ià( eœ_d©a . þass != 0) 9228 `deviû_£t_þass ( deviû , eœ_d©a . þass ); 9230 `ad­‹r_add_cÚÃùiÚ ( ad­‹r , deviû , ev -> addr . ty³ ); 9232 ià( eœ_d©a . Çme !ð NULL ) { 9233 `deviû_¡Üe_ÿched_Çme ( deviû , eœ_d©a . Çme ); 9234 `btd_deviû_deviû_£t_Çme ( deviû , eœ_d©a . Çme ); 9237 ià( eœ_d©a . msd_li¡ ) 9238 `ad­‹r_msd_nÙify ( ad­‹r , deviû , eœ_d©a . msd_li¡ ); 9240 `eœ_d©a_ä“ (& eœ_d©a ); 9241 } } 9243  $deviû_blocked_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 9244 cÚ¡ * ·¿m , * u£r_d©a ) 9246 cÚ¡  mgmt_ev_deviû_blocked * ev = ·¿m ; 9247  btd_ad­‹r * ad­‹r = u£r_d©a ; 9248  btd_deviû * deviû ; 9249  addr [18]; 9251 ià( Ëngth < (* ev )) { 9252 `”rÜ ("Too small device blockedƒvent"); 9256 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 9257 `DBG ("hci%u % blocked", šdex , addr ); 9259 deviû = `btd_ad­‹r_fšd_deviû ( ad­‹r , & ev -> addr . bdaddr , 9260 ev -> addr . ty³ ); 9261 ià( deviû ) 9262 `deviû_block ( deviû , TRUE ); 9263 } } 9265  $deviû_unblocked_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 9266 cÚ¡ * ·¿m , * u£r_d©a ) 9268 cÚ¡  mgmt_ev_deviû_unblocked * ev = ·¿m ; 9269  btd_ad­‹r * ad­‹r = u£r_d©a ; 9270  btd_deviû * deviû ; 9271  addr [18]; 9273 ià( Ëngth < (* ev )) { 9274 `”rÜ ("Too small device unblockedƒvent"); 9278 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 9279 `DBG ("hci%u % unblocked", šdex , addr ); 9281 deviû = `btd_ad­‹r_fšd_deviû ( ad­‹r , & ev -> addr . bdaddr , 9282 ev -> addr . ty³ ); 9283 ià( deviû ) 9284 `deviû_unblock ( deviû , FALSE , TRUE ); 9285 } } 9287  $cÚn_çž_nÙify ( btd_deviû * dev , ušt8_t ¡©us ) 9289 GSLi¡ * l ; 9291  l = cÚn_çž_li¡ ;†;† = `g_¦i¡_Ãxt (l)) { 9292 btd_cÚn_çž_cb cÚn_çž_cb = l -> d©a ; 9293 `cÚn_çž_cb ( dev , ¡©us ); 9295 } } 9297  $btd_add_cÚn_çž_cb ( btd_cÚn_çž_cb func ) 9299 cÚn_çž_li¡ = `g_¦i¡_­³nd (cÚn_çž_li¡, func ); 9300 } } 9302  $btd_»move_cÚn_çž_cb ( btd_cÚn_çž_cb func ) 9304 cÚn_çž_li¡ = `g_¦i¡_»move (cÚn_çž_li¡, func ); 9305 } } 9307  $cÚÃù_çžed_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 9308 cÚ¡ * ·¿m , * u£r_d©a ) 9310 cÚ¡  mgmt_ev_cÚÃù_çžed * ev = ·¿m ; 9311  btd_ad­‹r * ad­‹r = u£r_d©a ; 9312  btd_deviû * deviû ; 9313  addr [18]; 9315 ià( Ëngth < (* ev )) { 9316 `”rÜ ("Too small connect failedƒvent"); 9320 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 9322 `DBG ("hci%u % ¡©u %u", šdex , addr , ev -> ¡©us ); 9324 deviû = `btd_ad­‹r_fšd_deviû ( ad­‹r , & ev -> addr . bdaddr , 9325 ev -> addr . ty³ ); 9326 ià( deviû ) { 9327 `cÚn_çž_nÙify ( deviû , ev -> ¡©us ); 9332 ià( `deviû_is_bÚdšg ( deviû , NULL )) 9333 `deviû_ÿnûl_auth’tiÿtiÚ ( deviû , FALSE ); 9337 `bÚdšg_©‹m±_com¶‘e ( ad­‹r , & ev -> addr . bdaddr ,ƒv->addr. ty³ , 9338 ev -> ¡©us ); 9343 ià( deviû && `deviû_is_bÚdšg (deviû, NULL ) 9344 && ! `deviû_is_»Œyšg ( deviû )) { 9345 `deviû_ÿnûl_auth’tiÿtiÚ ( deviû , TRUE ); 9346 `deviû_bÚdšg_çžed ( deviû , ev -> ¡©us ); 9349 #iâdeà __TIZEN_PATCH__ 9352 ià( deviû && ! `deviû_is_bÚdšg (deviû, NULL ) 9353 && `deviû_is_‹mpܬy ( deviû )) 9354 `btd_ad­‹r_»move_deviû ( ad­‹r , deviû ); 9356 } } 9358  $»move_keys ( btd_ad­‹r * ad­‹r , 9359  btd_deviû * deviû , ušt8_t ty³ ) 9361  ad­‹r_addr [18]; 9362  deviû_addr [18]; 9363  fž’ame [ PATH_MAX ]; 9364 GKeyFže * key_fže ; 9365 gsize Ëngth = 0; 9366 * ¡r ; 9368 `ba2¡r ( `btd_ad­‹r_g‘_add»ss ( ad­‹r ), ad­‹r_addr ); 9369 `ba2¡r ( `deviû_g‘_add»ss ( deviû ), deviû_addr ); 9371 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/šfo", ad­‹r_addr , 9372 deviû_addr ); 9373 key_fže = `g_key_fže_Ãw (); 9374 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 9376 ià( ty³ =ð BDADDR_BREDR ) { 9377 `g_key_fže_»move_group ( key_fže , "LškKey", NULL ); 9379 `g_key_fže_»move_group ( key_fže , "LÚgT”mKey", NULL ); 9380 `g_key_fže_»move_group ( key_fže , "LoÿlSigÇtu»Key", NULL ); 9381 `g_key_fže_»move_group ( key_fže , "RemÙeSigÇtu»Key", NULL ); 9382 `g_key_fže_»move_group ( key_fže , "Id’t™yResÞvšgKey", NULL ); 9385 ¡r = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 9386 `g_fže_£t_cÚ‹Ás ( fž’ame , ¡r , Ëngth , NULL ); 9387 `g_ä“ ( ¡r ); 9389 `g_key_fže_ä“ ( key_fže ); 9390 } } 9392  $uÅaœed_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 9393 cÚ¡ * ·¿m , * u£r_d©a ) 9395 cÚ¡  mgmt_ev_deviû_uÅaœed * ev = ·¿m ; 9396  btd_ad­‹r * ad­‹r = u£r_d©a ; 9397  btd_deviû * deviû ; 9398  addr [18]; 9400 ià( Ëngth < (* ev )) { 9401 `”rÜ ("Too small device unpairedƒvent"); 9405 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 9407 `DBG ("hci%u‡dd¸%s", šdex , addr ); 9409 deviû = `btd_ad­‹r_fšd_deviû ( ad­‹r , & ev -> addr . bdaddr , 9410 ev -> addr . ty³ ); 9411 ià(! deviû ) { 9412 `w¬n ("NØdeviû objeù fÜ uÅaœed deviû %s", addr ); 9416 `»move_keys ( ad­‹r , deviû , ev -> addr . ty³ ); 9417 `deviû_£t_uÅaœed ( deviû , ev -> addr . ty³ ); 9418 } } 9420 #ifdeà __TIZEN_PATCH__ 9421  $£t_´ivacy_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 9422 cÚ¡ * ·¿m , * u£r_d©a ) 9424  btd_ad­‹r * ad­‹r = u£r_d©a ; 9426 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) 9427 `”rÜ ("Setting…rivacy failed for hci%u: %s (0x%02x)", 9428 ad­‹r -> dev_id , `mgmt_”r¡r ( ¡©us ), status); 9430 `DBG ("Privacy feature is set/unset successfully for hci%u", 9431 ad­‹r -> dev_id ); 9432 } } 9434  boÞ $£t_´ivacy ( btd_ad­‹r * ad­‹r , boÞ ´ivacy ) 9436  mgmt_ý_£t_´ivacy ý ; 9437 cÚ¡  ‹¡block [ MGMT_IRK_SIZE ]; 9439 `mem£t (& ý , 0, (cp)); 9441 ià( ´ivacy ) { 9442 ià(! `memcmp ( ad­‹r -> loÿl_œk , ‹¡block , MGMT_IRK_SIZE )) { 9443 ý . ´ivacy = GEN_IRK_THEN_ENABLE_PRIVACY ; 9444 `mem£t ( ý . œk , 0, MGMT_IRK_SIZE ); 9446 ý . ´ivacy = ENABLE_PRIVACY ; 9447 `memýy ( ý . œk , ad­‹r -> loÿl_œk , MGMT_IRK_SIZE ); 9450 ý . ´ivacy = DISABLE_PRIVACY ; 9451 `mem£t ( ý . œk , 0, MGMT_IRK_SIZE ); 9453 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_SET_PRIVACY , 9454 ad­‹r -> dev_id , ( ý ), &cp, 9455 £t_´ivacy_com¶‘e , ad­‹r , NULL ) > 0) 9456  Œue ; 9458 `”rÜ ("Failedo set…rivacy‡nd†oad†ocal irk for index %u", 9459 ad­‹r -> dev_id ); 9461  çl£ ; 9462 } } 9465  $þ—r_deviûs_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 9466 cÚ¡ * ·¿m , * u£r_d©a ) 9468 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 9469 `”rÜ ("Failedo clear devices: %s (0x%02x)", 9470 `mgmt_”r¡r ( ¡©us ), status); 9473 } } 9475  $þ—r_deviûs ( btd_ad­‹r * ad­‹r ) 9477  mgmt_ý_»move_deviû ý ; 9479 ià(! k”Ãl_cÚn_cÚŒÞ ) 9482 `mem£t (& ý , 0, (cp)); 9484 `DBG ("£ndšg cˬ deviû commªd fÜ index %u", ad­‹r -> dev_id ); 9486 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_REMOVE_DEVICE , 9487 ad­‹r -> dev_id , ( ý ), &cp, 9488 þ—r_deviûs_com¶‘e , ad­‹r , NULL ) > 0) 9491 `”rÜ ("FažedØþ—¸deviû fÜ index %u", ad­‹r -> dev_id ); 9493  - EIO ; 9494 } } 9496  $»ad_šfo_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 9497 cÚ¡ * ·¿m , * u£r_d©a ) 9499  btd_ad­‹r * ad­‹r = u£r_d©a ; 9500 cÚ¡  mgmt_½_»ad_šfo * ½ = ·¿m ; 9501 ušt32_t missšg_£‰šgs ; 9502  ”r ; 9504 `DBG ("šdex %u stu 0x%02x", ad­‹r -> dev_id , ¡©us ); 9506 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 9507 `”rÜ ("Failedo„ead info for index %u: %s (0x%02x)", 9508 ad­‹r -> dev_id , `mgmt_”r¡r ( ¡©us ), status); 9509  çžed ; 9512 ià( Ëngth < (* ½ )) { 9513 `”rÜ ("Too small„ead info complete„esponse"); 9514  çžed ; 9517 ià( `bacmp (& ½ -> bdaddr , BDADDR_ANY ) == 0) { 9518 `”rÜ ("NØBlu‘oÙh‡dd»s fÜ index %u", ad­‹r -> dev_id ); 9519  çžed ; 9530 `baýy (& ad­‹r -> bdaddr , & ½ ->bdaddr); 9531 ad­‹r -> dev_þass = ½ ->dev_class[0] | (rp->dev_class[1] << 8) | 9532 ( ½ -> dev_þass [2] << 16); 9533 ad­‹r -> Çme = `g_¡rdup ((cÚ¡ *è ½ ->name); 9534 ad­‹r -> shÜt_Çme = `g_¡rdup ((cÚ¡ *è ½ ->short_name); 9536 ad­‹r -> suµÜ‹d_£‰šgs = `btohl ( ½ ->supported_settings); 9537 ad­‹r -> cu¼’t_£‰šgs = `btohl ( ½ ->current_settings); 9539 #ifdeà __TIZEN_PATCH__ 9540 `ad­‹r_check_v”siÚ ( ad­‹r , ½ -> v”siÚ ); 9543 `þ—r_uuids ( ad­‹r ); 9544 `þ—r_deviûs ( ad­‹r ); 9546 missšg_£‰šgs = ad­‹r -> cu¼’t_£‰šgs ^ 9547 ad­‹r -> suµÜ‹d_£‰šgs ; 9549  maš_Ýts . mode ) { 9550  BT_MODE_DUAL : 9551 ià( missšg_£‰šgs & MGMT_SETTING_SSP ) 9552 `£t_mode ( ad­‹r , MGMT_OP_SET_SSP , 0x01); 9553 ià( missšg_£‰šgs & MGMT_SETTING_LE ) 9554 `£t_mode ( ad­‹r , MGMT_OP_SET_LE , 0x01); 9555 ià( missšg_£‰šgs & MGMT_SETTING_BREDR ) 9556 `£t_mode ( ad­‹r , MGMT_OP_SET_BREDR , 0x01); 9558  BT_MODE_BREDR : 9559 ià(!( ad­‹r -> suµÜ‹d_£‰šgs & MGMT_SETTING_BREDR )) { 9560 `”rÜ ("Ignoring‡dapter withouth BR/EDR support"); 9561  çžed ; 9564 ià( missšg_£‰šgs & MGMT_SETTING_SSP ) 9565 `£t_mode ( ad­‹r , MGMT_OP_SET_SSP , 0x01); 9566 ià( missšg_£‰šgs & MGMT_SETTING_BREDR ) 9567 `£t_mode ( ad­‹r , MGMT_OP_SET_BREDR , 0x01); 9568 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_LE ) 9569 `£t_mode ( ad­‹r , MGMT_OP_SET_LE , 0x00); 9571  BT_MODE_LE : 9572 ià(!( ad­‹r -> suµÜ‹d_£‰šgs & MGMT_SETTING_LE )) { 9573 `”rÜ ("Ignoring‡dapter withouth LE support"); 9574  çžed ; 9577 ià( missšg_£‰šgs & MGMT_SETTING_LE ) 9578 `£t_mode ( ad­‹r , MGMT_OP_SET_LE , 0x01); 9579 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_BREDR ) 9580 `£t_mode ( ad­‹r , MGMT_OP_SET_BREDR , 0x00); 9584 ià( missšg_£‰šgs & MGMT_SETTING_SECURE_CONN ) 9585 `£t_mode ( ad­‹r , MGMT_OP_SET_SECURE_CONN , 0x01); 9587 ”r = `ad­‹r_»gi¡” ( ad­‹r ); 9588 ià( ”r < 0) { 9589 `”rÜ ("Unableo„egister‚ew‡dapter"); 9590  çžed ; 9600 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_NEW_SETTINGS ,‡d­‹r-> dev_id , 9601 Ãw_£‰šgs_ÿÎback , ad­‹r , NULL ); 9603 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_CLASS_OF_DEV_CHANGED , 9604 ad­‹r -> dev_id , 9605 dev_þass_chªged_ÿÎback , 9606 ad­‹r , NULL ); 9607 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_LOCAL_NAME_CHANGED , 9608 ad­‹r -> dev_id , 9609 loÿl_Çme_chªged_ÿÎback , 9610 ad­‹r , NULL ); 9612 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_DISCOVERING , 9613 ad­‹r -> dev_id , 9614 discov”šg_ÿÎback , 9615 ad­‹r , NULL ); 9617 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_DEVICE_FOUND , 9618 ad­‹r -> dev_id , 9619 deviû_found_ÿÎback , 9620 ad­‹r , NULL ); 9622 #ifdeà __TIZEN_PATCH__ 9623 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_LE_DEVICE_FOUND , 9624 ad­‹r -> dev_id , 9625 Ë_deviû_found_ÿÎback , 9626 ad­‹r , NULL ); 9629 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_DEVICE_DISCONNECTED , 9630 ad­‹r -> dev_id , 9631 discÚÃùed_ÿÎback , 9632 ad­‹r , NULL ); 9634 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_DEVICE_CONNECTED , 9635 ad­‹r -> dev_id , 9636 cÚÃùed_ÿÎback , 9637 ad­‹r , NULL ); 9639 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_CONNECT_FAILED , 9640 ad­‹r -> dev_id , 9641 cÚÃù_çžed_ÿÎback , 9642 ad­‹r , NULL ); 9644 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_DEVICE_UNPAIRED , 9645 ad­‹r -> dev_id , 9646 uÅaœed_ÿÎback , 9647 ad­‹r , NULL ); 9649 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_AUTH_FAILED , 9650 ad­‹r -> dev_id , 9651 auth_çžed_ÿÎback , 9652 ad­‹r , NULL ); 9654 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_NEW_LINK_KEY , 9655 ad­‹r -> dev_id , 9656 Ãw_lšk_key_ÿÎback , 9657 ad­‹r , NULL ); 9659 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_NEW_LONG_TERM_KEY , 9660 ad­‹r -> dev_id , 9661 Ãw_lÚg_‹rm_key_ÿÎback , 9662 ad­‹r , NULL ); 9664 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_NEW_CSRK , 9665 ad­‹r -> dev_id , 9666 Ãw_c¤k_ÿÎback , 9667 ad­‹r , NULL ); 9669 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_NEW_IRK , 9670 ad­‹r -> dev_id , 9671 Ãw_œk_ÿÎback , 9672 ad­‹r , NULL ); 9674 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_NEW_CONN_PARAM , 9675 ad­‹r -> dev_id , 9676 Ãw_cÚn_·¿m , 9677 ad­‹r , NULL ); 9679 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_DEVICE_BLOCKED , 9680 ad­‹r -> dev_id , 9681 deviû_blocked_ÿÎback , 9682 ad­‹r , NULL ); 9683 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_DEVICE_UNBLOCKED , 9684 ad­‹r -> dev_id , 9685 deviû_unblocked_ÿÎback , 9686 ad­‹r , NULL ); 9688 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_PIN_CODE_REQUEST , 9689 ad­‹r -> dev_id , 9690 pš_code_»que¡_ÿÎback , 9691 ad­‹r , NULL ); 9693 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_USER_CONFIRM_REQUEST , 9694 ad­‹r -> dev_id , 9695 u£r_cÚfœm_»que¡_ÿÎback , 9696 ad­‹r , NULL ); 9698 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_USER_PASSKEY_REQUEST , 9699 ad­‹r -> dev_id , 9700 u£r_·sskey_»que¡_ÿÎback , 9701 ad­‹r , NULL ); 9703 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_PASSKEY_NOTIFY , 9704 ad­‹r -> dev_id , 9705 u£r_·sskey_nÙify_ÿÎback , 9706 ad­‹r , NULL ); 9708 #ifdeà __TIZEN_PATCH__ 9709 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_RSSI_ALERT , 9710 ad­‹r -> dev_id , 9711 rssi_®”t_ÿÎback , 9712 ad­‹r , NULL ); 9714 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_RAW_RSSI , 9715 ad­‹r -> dev_id , 9716 g‘_¿w_rssi_ÿÎback , 9717 ad­‹r , NULL ); 9719 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_RSSI_ENABLED , 9720 ad­‹r -> dev_id , 9721 rssi_’abËd_ÿÎback , 9722 ad­‹r , NULL ); 9724 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_RSSI_DISABLED , 9725 ad­‹r -> dev_id , 9726 rssi_di§bËd_ÿÎback , 9727 ad­‹r , NULL ); 9729 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_NEW_LOCAL_IRK , 9730 ad­‹r -> dev_id , 9731 Ãw_loÿl_œk_ÿÎback , 9732 ad­‹r , NULL ); 9734 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_HARDWARE_ERROR , 9735 ad­‹r -> dev_id , 9736 h¬dw¬e_”rÜ_ÿÎback , 9737 ad­‹r , NULL ); 9739 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_TX_TIMEOUT_ERROR , 9740 ad­‹r -> dev_id , 9741 tx_timeout_”rÜ_ÿÎback , 9742 ad­‹r , NULL ); 9744 `mgmt_»gi¡” ( ad­‹r -> mgmt , MGMT_EV_DEVICE_NAME_UPDATE , 9745 ad­‹r -> dev_id , 9746 deviû_Çme_upd©e_ÿÎback , 9747 ad­‹r , NULL ); 9750 `£t_dev_þass ( ad­‹r ); 9752 `£t_Çme ( ad­‹r , `btd_ad­‹r_g‘_Çme (adapter)); 9754 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_BONDABLE )) 9755 `£t_mode ( ad­‹r , MGMT_OP_SET_BONDABLE , 0x01); 9757 ià(! k”Ãl_cÚn_cÚŒÞ ) 9758 `£t_mode ( ad­‹r , MGMT_OP_SET_CONNECTABLE , 0x01); 9759 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_CONNECTABLE ) 9760 `£t_mode ( ad­‹r , MGMT_OP_SET_CONNECTABLE , 0x00); 9762 ià( ad­‹r -> ¡Üed_discov”abË && !ad­‹r-> discov”abË_timeout ) 9763 `£t_discov”abË ( ad­‹r , 0x01, 0); 9765 ià( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED ) 9766 `ad­‹r_¡¬t ( ad­‹r ); 9767 #ifdeà __TIZEN_PATCH__ 9769 `£t_mode ( ad­‹r , MGMT_OP_SET_POWERED , 0x01); 9774 çžed : 9784 ad­‹r_li¡ = `g_li¡_»move ×d­‹r_li¡, ad­‹r ); 9786 `btd_ad­‹r_uÄef ( ad­‹r ); 9787 } } 9789  $šdex_added ( ušt16_t šdex , ušt16_ˆ Ëngth , cÚ¡ * ·¿m , 9790 * u£r_d©a ) 9792  btd_ad­‹r * ad­‹r ; 9794 `DBG ("šdex %u", šdex ); 9796 ad­‹r = `btd_ad­‹r_lookup ( šdex ); 9797 ià( ad­‹r ) { 9798 `w¬n ("Ignoring index‡dded for‡n‡lreadyƒxisting‡dapter"); 9802 ad­‹r = `btd_ad­‹r_Ãw ( šdex ); 9803 ià(! ad­‹r ) { 9804 `”rÜ ("UÇbËØü—‹‚ew‡d­‹¸fÜ index %u", šdex ); 9819 ad­‹r_li¡ = `g_li¡_­³nd ×d­‹r_li¡, ad­‹r ); 9821 `DBG ("£ndšg„—d infØcommªd fÜ index %u", šdex ); 9823 ià( `mgmt_£nd ( mgmt_ma¡” , MGMT_OP_READ_INFO , šdex , 0, NULL , 9824 »ad_šfo_com¶‘e , ad­‹r , NULL ) > 0) 9827 `”rÜ ("FažedØ»ad cÚŒÞ˸šfØfÜ index %u", šdex ); 9829 ad­‹r_li¡ = `g_li¡_»move ×d­‹r_li¡, ad­‹r ); 9831 `btd_ad­‹r_uÄef ( ad­‹r ); 9832 } } 9834  $šdex_»moved ( ušt16_t šdex , ušt16_ˆ Ëngth , cÚ¡ * ·¿m , 9835 * u£r_d©a ) 9837  btd_ad­‹r * ad­‹r ; 9839 `DBG ("šdex %u", šdex ); 9841 ad­‹r = `btd_ad­‹r_lookup ( šdex ); 9842 ià(! ad­‹r ) { 9843 `w¬n ("Ignoring index„emoval for‡‚on-existent‡dapter"); 9847 `ad­‹r_uÄegi¡” ( ad­‹r ); 9848 } } 9850  $»ad_šdex_li¡_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 9851 cÚ¡ * ·¿m , * u£r_d©a ) 9853 cÚ¡  mgmt_½_»ad_šdex_li¡ * ½ = ·¿m ; 9854 ušt16_t num ; 9855  i ; 9857 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 9858 `”rÜ ("Failedo„ead index†ist: %s (0x%02x)", 9859 `mgmt_”r¡r ( ¡©us ), status); 9863 ià( Ëngth < (* ½ )) { 9864 `”rÜ ("Wrong size of„ead index†ist„esponse"); 9868 num = `btohs ( ½ -> num_cÚŒÞËrs ); 9870 `DBG ("Numb” oàcÚŒÞËrs: %d", num ); 9872 ià( num * ( ušt16_t è+ (* ½ è!ð Ëngth ) { 9873 `”rÜ ("Incorrect…acket size for index†ist„esponse"); 9877  i = 0; i < num ; i++) { 9878 ušt16_t šdex ; 9880 šdex = `btohs ( ½ ->šdex[ i ]); 9882 `DBG ("Found index %u", šdex ); 9890 `šdex_added ( šdex , 0, NULL , NULL); 9892 } } 9894  $»ad_commªds_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 9895 cÚ¡ * ·¿m , * u£r_d©a ) 9897 cÚ¡  mgmt_½_»ad_commªds * ½ = ·¿m ; 9898 ušt16_t num_commªds , num_ev’ts ; 9899 cÚ¡ ušt16_t * Ýcode ; 9900 size_t ex³ùed_Ën ; 9901  i ; 9903 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 9904 `”rÜ ("Failedo„ead supported commands: %s (0x%02x)", 9905 `mgmt_”r¡r ( ¡©us ), status); 9909 ià( Ëngth < (* ½ )) { 9910 `”rÜ ("Wrong size of„ead commands„esponse"); 9914 num_commªds = `btohs ( ½ ->num_commands); 9915 num_ev’ts = `btohs ( ½ ->num_events); 9917 `DBG ("Numb” oàcommªds: %d", num_commªds ); 9918 `DBG ("Numb” oàev’ts: %d", num_ev’ts ); 9920 ex³ùed_Ën = (* ½ è+ num_commªds * ( ušt16_t ) + 9921 num_ev’ts * ( ušt16_t ); 9923 ià( Ëngth < ex³ùed_Ën ) { 9924 `”rÜ ("Too small„eply for supported commands: (%u != %zu)", 9925 Ëngth , ex³ùed_Ën ); 9929 Ýcode = ½ -> Ýcodes ; 9931  i = 0; i < num_commªds ; i++) { 9932 ušt16_t Ý = `g‘_Ë16 ( Ýcode ++); 9934 ià( Ý =ð MGMT_OP_ADD_DEVICE ) { 9935 `DBG ("enabling kernel-side connection control"); 9936 k”Ãl_cÚn_cÚŒÞ = Œue ; 9939 } } 9941  $»ad_v”siÚ_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 9942 cÚ¡ * ·¿m , * u£r_d©a ) 9944 cÚ¡  mgmt_½_»ad_v”siÚ * ½ = ·¿m ; 9946 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 9947 `”rÜ ("Failedo„ead version information: %s (0x%02x)", 9948 `mgmt_”r¡r ( ¡©us ), status); 9952 ià( Ëngth < (* ½ )) { 9953 `”rÜ ("Wrong size of„ead version„esponse"); 9957 mgmt_v”siÚ = ½ -> v”siÚ ; 9958 mgmt_»visiÚ = `btohs ( ½ -> »visiÚ ); 9960 `šfo ("Bluetooth management interface %u.%u initialized", 9961 mgmt_v”siÚ , mgmt_»visiÚ ); 9963 ià( mgmt_v”siÚ < 1) { 9964 `”rÜ ("Version 1.0 or†ater of management interface„equired"); 9965 `abÜt (); 9968 `DBG ("sending„ead supported commands command"); 9974 `mgmt_£nd ( mgmt_ma¡” , MGMT_OP_READ_COMMANDS , 9975 MGMT_INDEX_NONE , 0, NULL , 9976 »ad_commªds_com¶‘e , NULL , NULL); 9978 `mgmt_»gi¡” ( mgmt_ma¡” , MGMT_EV_INDEX_ADDED , MGMT_INDEX_NONE , 9979 šdex_added , NULL , NULL); 9980 `mgmt_»gi¡” ( mgmt_ma¡” , MGMT_EV_INDEX_REMOVED , MGMT_INDEX_NONE , 9981 šdex_»moved , NULL , NULL); 9983 `DBG ("sending„ead index†ist command"); 9985 ià( `mgmt_£nd ( mgmt_ma¡” , MGMT_OP_READ_INDEX_LIST , 9986 MGMT_INDEX_NONE , 0, NULL , 9987 »ad_šdex_li¡_com¶‘e , NULL , NULL) > 0) 9990 `”rÜ ("Failedo„ead controller index†ist"); 9991 } } 9993  $mgmt_debug (cÚ¡ * ¡r , * u£r_d©a ) 9995 cÚ¡ * ´efix = u£r_d©a ; 9997 `šfo ("%s%s", ´efix , ¡r ); 9998 } } 10000  $ad­‹r_š™ () 10002 dbus_cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 10004 mgmt_ma¡” = `mgmt_Ãw_deçuÉ (); 10005 ià(! mgmt_ma¡” ) { 10006 `”rÜ ("Failedo‡ccess management interface"); 10007  - EIO ; 10010 ià( `g‘’v ("MGMT_DEBUG")) 10011 `mgmt_£t_debug ( mgmt_ma¡” , mgmt_debug , "mgmt: ", NULL ); 10013 `DBG ("sending„ead version command"); 10015 ià( `mgmt_£nd ( mgmt_ma¡” , MGMT_OP_READ_VERSION , 10016 MGMT_INDEX_NONE , 0, NULL , 10017 »ad_v”siÚ_com¶‘e , NULL , NULL) > 0) 10020 `”rÜ ("Failedo„ead management version information"); 10022  - EIO ; 10023 } } 10025  $ad­‹r_þ—nup () 10027 `g_li¡_ä“ ( ad­‹r_li¡ ); 10029  ad­‹rs ) { 10030  btd_ad­‹r * ad­‹r = ad­‹rs -> d©a ; 10032 `ad­‹r_»move ( ad­‹r ); 10033 ad­‹rs = `g_¦i¡_»move ×d­‹rs, ad­‹r ); 10034 `btd_ad­‹r_uÄef ( ad­‹r ); 10044 `mgmt_uÄegi¡”_šdex ( mgmt_ma¡” , MGMT_INDEX_NONE ); 10054 `mgmt_ÿnûl_šdex ( mgmt_ma¡” , MGMT_INDEX_NONE ); 10056 `mgmt_uÄef ( mgmt_ma¡” ); 10057 mgmt_ma¡” = NULL ; 10059 dbus_cÚn = NULL ; 10060 } } 10062  $ad­‹r_shutdown () 10064 GLi¡ * li¡ ; 10066 `DBG (""); 10068 pow”šg_down = Œue ; 10070  li¡ = `g_li¡_fœ¡ ( ad­‹r_li¡ );†ist; 10071 li¡ = `g_li¡_Ãxt (list)) { 10072  btd_ad­‹r * ad­‹r = li¡ -> d©a ; 10074 ià(!( ad­‹r -> cu¼’t_£‰šgs & MGMT_SETTING_POWERED )) 10077 `£t_mode ( ad­‹r , MGMT_OP_SET_POWERED , 0x00); 10079 ad­‹r_»maššg ++; 10082 ià(! ad­‹r_»maššg ) 10083 `btd_ex™ (); 10084 } } 10091 boÞ $btd_Ë_cÚÃù_befÜe_·œšg () 10093 ià( `MGMT_VERSION ( mgmt_v”siÚ , mgmt_»visiÚ ) < MGMT_VERSION(1, 4)) 10094  Œue ; 10096  çl£ ; 10097 } } 10099 #ifdeà __TIZEN_PATCH__ 10100  $»ad_rssi_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 10101 cÚ¡ * ·¿m , * u£r_d©a ) 10103 cÚ¡  mgmt_½_»ad_rssi * ½ = ·¿m ; 10104  btd_deviû * deviû = u£r_d©a ; 10106 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 10107 `”rÜ ("read RSSI failed: %s (0x%02x)", 10108 `mgmt_”r¡r ( ¡©us ), status); 10112 ià( Ëngth < (* ½ )) { 10113 `”rÜ ("Too small„ead„ssi„esponse"); 10117 ià(! ½ -> ¡©us ) { 10118 `deviû_£t_rssi ( deviû , ½ -> rssi ); 10121 } } 10123  $btd_ad­‹r_»ad_rssi ( btd_ad­‹r * ad­‹r , bdaddr_t * bdaddr , 10124  btd_deviû * deviû ) 10126  mgmt_ý_»ad_rssi ý ; 10128 `DBG ("btd_adapter_read_rssi"); 10129 `mem£t (& ý , 0, (cp)); 10130 `baýy (& ý . bdaddr , bdaddr); 10132 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_READ_RSSI , 10133 ad­‹r -> dev_id , ( ý ), &cp, 10134 »ad_rssi_com¶‘e , deviû , NULL ) > 0) 10136  - EIO ; 10137 } } 10139  $btd_ad­‹r_l2ÿp_cÚn_·¿m_upd©e ( btd_ad­‹r * ad­‹r , 10140 bdaddr_t * bdaddr , ušt16_t š‹rv®_mš , 10141 ušt16_t š‹rv®_max , ušt16_ˆ Ï‹ncy , 10142 ušt16_t su³rvisiÚ_time_out ) 10144  mgmt_ý_l2ÿp_cÚn_·¿m_upd©e ý ; 10146 `mem£t (& ý , 0, (cp)); 10147 ià( bdaddr ) 10148 `baýy (& ý . bdaddr , bdaddr); 10150  - EIO ; 10152 ý . š‹rv®_mš = interval_min; 10153 ý . š‹rv®_max = interval_max; 10154 ý . Ï‹ncy =†atency; 10155 ý . su³rvisiÚ_time_out = supervision_time_out; 10156 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_L2CAP_CONN_PARAM_UPDATE , 10157 ad­‹r -> dev_id , ( ý ), &cp, 10158 NULL , NULL, NULL) > 0) 10161  - EIO ; 10162 } } 10164  $wr™e_auth_·ylßd_timeout_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 10165 cÚ¡ * ·¿m , * u£r_d©a ) 10167 cÚ¡  mgmt_½_wr™e_auth_·ylßd_timeout * ½ = ·¿m ; 10169 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 10170 `”rÜ ("Failedo write‡uth…ayloadimeout: %s (0x%02x)", 10171 `mgmt_”r¡r ( ¡©us ), status); 10175 ià( Ëngth < (* ½ )) { 10176 `”rÜ ("Wrong size of write‡uth…ayloadimeout…arameter"); 10179 } } 10181  $btd_ad­‹r_wr™e_auth_·ylßd_timeout ( btd_ad­‹r * ad­‹r , 10182 bdaddr_t * bdaddr , ušt32_t ·ylßd_timeout , 10183  btd_deviû * deviû ) 10185  mgmt_ý_wr™e_auth_·ylßd_timeout ý ; 10186 `mem£t (& ý , 0, (cp)); 10187 `baýy (& ý . bdaddr , bdaddr); 10189 ià( ·ylßd_timeout > 65536) 10190  - EIO ; 10192 ý . auth_·ylßd_timeout = ·ylßd_timeout ; 10194 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_WRITE_AUTH_PAYLOAD_TIMEOUT , 10195 ad­‹r -> dev_id , ( ý ), &cp, 10196 wr™e_auth_·ylßd_timeout_com¶‘e , deviû , NULL ) > 0) 10198  - EIO ; 10199 } } 10201  $»ad_auth_·ylßd_timeout_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 10202 cÚ¡ * ·¿m , * u£r_d©a ) 10204 cÚ¡  mgmt_½_»ad_auth_·ylßd_timeout * ½ = ·¿m ; 10205  btd_deviû * deviû = u£r_d©a ; 10206 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 10207 `”rÜ ("read‡uth…ayloadimeout failed: %s (0x%02x)", 10208 `mgmt_”r¡r ( ¡©us ), status); 10212 ià( Ëngth < (* ½ )) { 10213 `”rÜ ("Too small„ead…ayload„esponse"); 10217 ià(! ½ -> ¡©us ) { 10218 `deviû_£t_·ylßd_timeout ( deviû , ½ -> auth_·ylßd_timeout ); 10221 } } 10223  $btd_ad­‹r_»ad_auth_·ylßd_timeout ( btd_ad­‹r * ad­‹r , 10224 bdaddr_t * bdaddr ,  btd_deviû * deviû ) 10226  mgmt_ý_»ad_auth_·ylßd_timeout ý ; 10227 `mem£t (& ý , 0, (cp)); 10228 `baýy (& ý . bdaddr , bdaddr); 10230 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_READ_AUTH_PAYLOAD_TIMEOUT , 10231 ad­‹r -> dev_id , ( ý ), &cp, 10232 »ad_auth_·ylßd_timeout_com¶‘e , deviû , NULL ) > 0) 10234  - EIO ; 10235 } } 10237  $btd_ad­‹r_Ë_cÚn_upd©e ( btd_ad­‹r * ad­‹r , bdaddr_t * bdaddr , 10238 ušt16_t š‹rv®_mš , ušt16_ˆ š‹rv®_max , 10239 ušt16_t Ï‹ncy , ušt16_ˆ su³rvisiÚ_time_out ) 10241  mgmt_ý_Ë_cÚn_upd©e ý ; 10243 `mem£t (& ý , 0, (cp)); 10245 ià( NULL !ð bdaddr ) 10246 `baýy (& ý . bdaddr , bdaddr); 10248  - EIO ; 10250 ý . š‹rv®_mš = interval_min; 10251 ý . š‹rv®_max = interval_max; 10252 ý . Ï‹ncy =†atency; 10253 ý . su³rvisiÚ_time_out = supervision_time_out; 10255 ià( `mgmt_£nd ( ad­‹r -> mgmt , MGMT_OP_LE_CONN_UPDATE , 10256 ad­‹r -> dev_id , ( ý ), &cp, 10257 NULL , NULL, NULL) > 0) 10260  - EIO ; 10261 } } 10263 GSLi¡ * $btd_ad­‹r_g‘_cÚÃùiÚs ( btd_ad­‹r * ad­‹r ) 10266  ad­‹r -> cÚÃùiÚs ; 10267 } } @src/adapter.h 25  ~ 26  ~ 27  ~ 28  ~ 29  ~ 30  ~ 31  ~<¡dboÞ.h > 33  #MAX_NAME_LENGTH 248 ) 36  #INVALID_PASSKEY 0xffffffff ) 38 #ifdeà __TIZEN_PATCH__ 39  #BT_DISC_TYPE_DEFAULT 0 ) 40  #BT_DISC_TYPE_BREDR_ONLY 1 ) 41  #BT_DISC_TYPE_LE_ONLY 2 ) 42  #BT_DISC_TYPE_LE_BREDR 3 ) 45  gbtd_ad­‹r ; 46  gbtd_deviû ; 48  btd_ad­‹r * btd_ad­‹r_g‘_deçuÉ (); 49 boÞ btd_ad­‹r_is_deçuÉ ( btd_ad­‹r * ad­‹r ); 50 ušt16_t btd_ad­‹r_g‘_šdex ( btd_ad­‹r * ad­‹r ); 52 (* tad­‹r_cb è( tbtd_ad­‹r * tad­‹r , tgpoš‹r tu£r_d©a ); 54 (* toob_»ad_loÿl_cb_t è( tbtd_ad­‹r * tad­‹r , 55 cÚ¡ tušt8_t * thash , 56 cÚ¡ tušt8_t * t¿ndomiz” , 57 * tu£r_d©a ); 58 (* toob_bÚdšg_cb_t è( tbtd_ad­‹r * tad­‹r , 59 cÚ¡ tbdaddr_t * tbdaddr , tušt8_t t¡©us , 60 * tu£r_d©a ); 62  soob_hªdËr { 63 oob_»ad_loÿl_cb_t »ad_loÿl_cb ; 64 oob_bÚdšg_cb_t bÚdšg_cb ; 65 bdaddr_t »mÙe_addr ; 66 * u£r_d©a ; 69  `ad­‹r_š™ (); 70  `ad­‹r_þ—nup (); 71  `ad­‹r_shutdown (); 73 (* tbtd_discÚÃù_cb è( tbtd_deviû * tdeviû , tušt8_t t»asÚ ); 74  `btd_add_discÚÃù_cb ( btd_discÚÃù_cb func ); 75  `btd_»move_discÚÃù_cb ( btd_discÚÃù_cb func ); 77 (* tbtd_cÚn_çž_cb è( tbtd_deviû * tdeviû , tušt8_t t¡©us ); 78  `btd_add_cÚn_çž_cb ( btd_cÚn_çž_cb func ); 79  `btd_»move_cÚn_çž_cb ( btd_cÚn_çž_cb func ); 81  btd_ad­‹r * `ad­‹r_fšd (cÚ¡ bdaddr_t * sba ); 82  btd_ad­‹r * `ad­‹r_fšd_by_id ( id ); 83  `ad­‹r_fÜ—ch ( ad­‹r_cb func , gpoš‹r u£r_d©a ); 85 boÞ `btd_ad­‹r_g‘_·œabË ( btd_ad­‹r * ad­‹r ); 86 boÞ `btd_ad­‹r_g‘_pow”ed ( btd_ad­‹r * ad­‹r ); 87 boÞ `btd_ad­‹r_g‘_cÚÃùabË ( btd_ad­‹r * ad­‹r ); 89 ušt32_t `btd_ad­‹r_g‘_þass ( btd_ad­‹r * ad­‹r ); 90 cÚ¡ * `btd_ad­‹r_g‘_Çme ( btd_ad­‹r * ad­‹r ); 91  `btd_ad­‹r_»move_deviû ( btd_ad­‹r * ad­‹r , 92  btd_deviû * dev ); 93  btd_deviû * `btd_ad­‹r_g‘_deviû ( btd_ad­‹r * ad­‹r , 94 cÚ¡ bdaddr_t * addr , 95 ušt8_t addr_ty³ ); 96 sdp_li¡_t * `btd_ad­‹r_g‘_£rviûs ( btd_ad­‹r * ad­‹r ); 98  btd_deviû * `btd_ad­‹r_fšd_deviû ( btd_ad­‹r * ad­‹r , 99 cÚ¡ bdaddr_t * d¡ , 100 ušt8_t d¡_ty³ ); 102 cÚ¡ * `ad­‹r_g‘_·th ( btd_ad­‹r * ad­‹r ); 103 cÚ¡ bdaddr_t * `btd_ad­‹r_g‘_add»ss ( btd_ad­‹r * ad­‹r ); 104  `ad­‹r_£t_Çme ( btd_ad­‹r * ad­‹r , cÚ¡ * Çme ); 106  `ad­‹r_£rviû_add ( btd_ad­‹r * ad­‹r , sdp_»cÜd_t * »c ); 107  `ad­‹r_£rviû_»move ( btd_ad­‹r * ad­‹r , ušt32_t hªdË ); 109  ag’t * `ad­‹r_g‘_ag’t ( btd_ad­‹r * ad­‹r ); 111  btd_ad­‹r * `btd_ad­‹r_»f (btd_ad­‹¸* ad­‹r ); 112  `btd_ad­‹r_uÄef ( btd_ad­‹r * ad­‹r ); 114  `btd_ad­‹r_£t_þass ( btd_ad­‹r * ad­‹r , ušt8_t majÜ , 115 ušt8_t mšÜ ); 117  sbtd_ad­‹r_driv” { 118 cÚ¡ * Çme ; 119 (* ´obe è( btd_ad­‹r * ad­‹r ); 120 (* »move è( btd_ad­‹r * ad­‹r ); 123 (* t£rviû_auth_cb è( tDBusE¼Ü * td”r , * tu£r_d©a ); 125  `ad­‹r_add_´ofže ( btd_ad­‹r * ad­‹r , gpoš‹r p ); 126  `ad­‹r_»move_´ofže ( btd_ad­‹r * ad­‹r , gpoš‹r p ); 127  `btd_»gi¡”_ad­‹r_driv” ( btd_ad­‹r_driv” * driv” ); 128  `btd_uÄegi¡”_ad­‹r_driv” ( btd_ad­‹r_driv” * driv” ); 129 gušt `btd_»que¡_authÜiz©iÚ (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ , 130 cÚ¡ * uuid , £rviû_auth_cb cb , * u£r_d©a ); 131  `btd_ÿnûl_authÜiz©iÚ ( gušt id ); 133  `btd_ad­‹r_»¡Üe_pow”ed ( btd_ad­‹r * ad­‹r ); 135  $ssize_t (* tbtd_ad­‹r_pš_cb_t è( tbtd_ad­‹r * tad­‹r , 136  tbtd_deviû * tdev , * tout , tboÞ * tdi¥Ïy , 137  t©‹m± ); 138  `btd_ad­‹r_»gi¡”_pš_cb ( btd_ad­‹r * ad­‹r , 139 btd_ad­‹r_pš_cb_t cb ); 140  `btd_ad­‹r_uÄegi¡”_pš_cb ( btd_ad­‹r * ad­‹r , 141 btd_ad­‹r_pš_cb_t cb ); 143  btd_ad­‹r_pš_cb_™” * `btd_ad­‹r_pš_cb_™”_Ãw ( 144  btd_ad­‹r * ad­‹r ); 145  `btd_ad­‹r_pš_cb_™”_ä“ ( btd_ad­‹r_pš_cb_™” * ™” ); 146 boÞ `btd_ad­‹r_pš_cb_™”_’d ( btd_ad­‹r_pš_cb_™” * ™” ); 148 (* tbtd_msd_cb_t è( tbtd_ad­‹r * tad­‹r , 149  tbtd_deviû * tdev , 150 tušt16_t tcom·ny , 151 cÚ¡ tušt8_t * td©a , 152 tušt8_t td©a_Ën ); 153  `btd_ad­‹r_»gi¡”_msd_cb ( btd_ad­‹r * ad­‹r , 154 btd_msd_cb_t cb ); 155  `btd_ad­‹r_uÄegi¡”_msd_cb ( btd_ad­‹r * ad­‹r , 156 btd_msd_cb_t cb ); 161  `btd_ad­‹r_£t_ç¡_cÚÃùabË ( btd_ad­‹r * ad­‹r , 162 gboÞ—n ’abË ); 164  `btd_ad­‹r_»ad_þock ( btd_ad­‹r * ad­‹r , cÚ¡ bdaddr_t * bdaddr , 165  which ,  timeout , ušt32_t * þock , 166 ušt16_t * accu¿cy ); 168  `btd_ad­‹r_block_add»ss ( btd_ad­‹r * ad­‹r , 169 cÚ¡ bdaddr_t * bdaddr , ušt8_t bdaddr_ty³ ); 170  `btd_ad­‹r_unblock_add»ss ( btd_ad­‹r * ad­‹r , 171 cÚ¡ bdaddr_t * bdaddr , ušt8_t bdaddr_ty³ ); 173  `btd_ad­‹r_discÚÃù_deviû ( btd_ad­‹r * ad­‹r , 174 cÚ¡ bdaddr_t * bdaddr , 175 ušt8_t bdaddr_ty³ ); 177  `btd_ad­‹r_»move_bÚdšg ( btd_ad­‹r * ad­‹r , 178 cÚ¡ bdaddr_t * bdaddr , ušt8_t bdaddr_ty³ ); 180  `btd_ad­‹r_pšcode_»¶y ( btd_ad­‹r * ad­‹r , 181 cÚ¡ bdaddr_t * bdaddr , 182 cÚ¡ * pš , size_t pš_Ën ); 183  `btd_ad­‹r_cÚfœm_»¶y ( btd_ad­‹r * ad­‹r , 184 cÚ¡ bdaddr_t * bdaddr , ušt8_t bdaddr_ty³ , 185 gboÞ—n sucûss ); 186  `btd_ad­‹r_·sskey_»¶y ( btd_ad­‹r * ad­‹r , 187 cÚ¡ bdaddr_t * bdaddr , ušt8_t bdaddr_ty³ , 188 ušt32_t ·sskey ); 190  `ad­‹r_ü—‹_bÚdšg ( btd_ad­‹r * ad­‹r , cÚ¡ bdaddr_t * bdaddr , 191 ušt8_t addr_ty³ , ušt8_ˆ io_ÿp ); 193  `ad­‹r_bÚdšg_©‹m± ( btd_ad­‹r * ad­‹r , cÚ¡ bdaddr_t * bdaddr , 194 ušt8_t addr_ty³ , ušt8_ˆ io_ÿp ); 196  `ad­‹r_ÿnûl_bÚdšg ( btd_ad­‹r * ad­‹r , cÚ¡ bdaddr_t * bdaddr , 197 ušt8_t addr_ty³ ); 199  `ad­‹r_£t_io_ÿ·bž™y ( btd_ad­‹r * ad­‹r , ušt8_t io_ÿp ); 201  `btd_ad­‹r_»ad_loÿl_oob_d©a ( btd_ad­‹r * ad­‹r ); 203  `btd_ad­‹r_add_»mÙe_oob_d©a ( btd_ad­‹r * ad­‹r , 204 cÚ¡ bdaddr_t * bdaddr , 205 ušt8_t * hash , ušt8_ˆ* ¿ndomiz” ); 207  `btd_ad­‹r_»move_»mÙe_oob_d©a ( btd_ad­‹r * ad­‹r , 208 cÚ¡ bdaddr_t * bdaddr ); 210  `btd_ad­‹r_g©t_£rv”_¡¬t ( btd_ad­‹r * ad­‹r ); 211  `btd_ad­‹r_g©t_£rv”_¡Ý ( btd_ad­‹r * ad­‹r ); 213 boÞ `btd_ad­‹r_s¥_’abËd ( btd_ad­‹r * ad­‹r ); 215  `ad­‹r_cÚÃù_li¡_add ( btd_ad­‹r * ad­‹r , 216  btd_deviû * deviû ); 217  `ad­‹r_cÚÃù_li¡_»move ( btd_ad­‹r * ad­‹r , 218  btd_deviû * deviû ); 219  `ad­‹r_auto_cÚÃù_add ( btd_ad­‹r * ad­‹r , 220  btd_deviû * deviû ); 221  `ad­‹r_auto_cÚÃù_»move ( btd_ad­‹r * ad­‹r , 222  btd_deviû * deviû ); 223  `ad­‹r_wh™–i¡_add ( btd_ad­‹r * ad­‹r , 224  btd_deviû * dev ); 225  `ad­‹r_wh™–i¡_»move ( btd_ad­‹r * ad­‹r , 226  btd_deviû * dev ); 228  `btd_ad­‹r_£t_oob_hªdËr ( btd_ad­‹r * ad­‹r , 229  oob_hªdËr * hªdËr ); 230 gboÞ—n `btd_ad­‹r_check_oob_hªdËr ( btd_ad­‹r * ad­‹r ); 232  `btd_ad­‹r_fÜ_—ch_deviû ( btd_ad­‹r * ad­‹r , 233 (* cb )( btd_deviû * deviû , * d©a ), 234 * d©a ); 236 boÞ `btd_Ë_cÚÃù_befÜe_·œšg (); 238 #ifdeà __TIZEN_PATCH__ 239  `btd_ad­‹r_»ad_rssi ( btd_ad­‹r * ad­‹r , bdaddr_t * bdaddr , 240  btd_deviû * deviû ); 241  `btd_ad­‹r_l2ÿp_cÚn_·¿m_upd©e ( btd_ad­‹r * ad­‹r , 242 bdaddr_t * bdaddr , ušt16_t š‹rv®_mš , 243 ušt16_t š‹rv®_max , ušt16_ˆ Ï‹ncy , 244 ušt16_t su³rvisiÚ_time_out ); 245  `btd_ad­‹r_wr™e_auth_·ylßd_timeout ( btd_ad­‹r * ad­‹r , 246 bdaddr_t * bdaddr , ušt32_t ·ylßd_timeout , 247  btd_deviû * deviû ); 248  `btd_ad­‹r_»ad_auth_·ylßd_timeout ( btd_ad­‹r * ad­‹r , 249 bdaddr_t * bdaddr ,  btd_deviû * deviû ); 250  `btd_ad­‹r_Ë_cÚn_upd©e ( btd_ad­‹r * ad­‹r , bdaddr_t * bdaddr , 251 ušt16_t š‹rv®_mš , ušt16_ˆ š‹rv®_max , 252 ušt16_t Ï‹ncy , ušt16_ˆ su³rvisiÚ_time_out ); 253 gboÞ—n `ad­‹r_þ—r_Ë_wh™e_li¡ ( btd_ad­‹r * ad­‹r ); 254 gboÞ—n `ad­‹r_add_Ë_wh™e_li¡ ( btd_ad­‹r * ad­‹r ,  btd_deviû * deviû ); 256 gboÞ—n `btd_ad­‹r_is_Ë_auto_cÚÃù ( btd_ad­‹r * ad­‹r ); 257  `btd_ad­‹r_£t_Ë_auto_cÚÃù ( btd_ad­‹r * ad­‹r , gboÞ—n auto_cÚÃù ); 258 gboÞ—n `btd_ad­‹r_di§bË_Ë_auto_cÚÃù ( btd_ad­‹r * ad­‹r ); 259  `ad­‹r_check_v”siÚ ( btd_ad­‹r * ad­‹r , ušt8_t hci_v” ); 260 GSLi¡ * `btd_ad­‹r_g‘_cÚÃùiÚs ( btd_ad­‹r * ad­‹r ); @src/agent.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<¡dlib.h > 32  ~<¡dboÞ.h > 33  ~ 34  ~ 36  ~ 37  ~ 39  ~ 40  ~ 41  ~ 43  ~"log.h " 44  ~"”rÜ.h " 45  ~"hcid.h " 46  ~"dbus-commÚ.h " 47  ~"ad­‹r.h " 48  ~"deviû.h " 49  ~"ag’t.h " 50  ~"sh¬ed/queue.h " 52  #IO_CAPABILITY_DISPLAYONLY 0x00 ) 53  #IO_CAPABILITY_DISPLAYYESNO 0x01 ) 54  #IO_CAPABILITY_KEYBOARDONLY 0x02 ) 55  #IO_CAPABILITY_NOINPUTNOOUTPUT 0x03 ) 56  #IO_CAPABILITY_KEYBOARDDISPLAY 0x04 ) 57  #IO_CAPABILITY_INVALID 0xFF ) 59  #REQUEST_TIMEOUT (60 * 1000è ) 60  #AGENT_INTERFACE "Üg.bluez.Ag’t1" ) 62  GHashTabË * gag’t_li¡ ; 63  queue * gdeçuÉ_ag’ts = NULL ; 66 mAGENT_REQUEST_PASSKEY , 67 mAGENT_REQUEST_CONFIRMATION , 68 mAGENT_REQUEST_AUTHORIZATION , 69 mAGENT_REQUEST_PINCODE , 70 mAGENT_REQUEST_AUTHORIZE_SERVICE , 71 mAGENT_REQUEST_DISPLAY_PINCODE , 72 } tag’t_»que¡_ty³_t ; 74  sag’t { 75  m»f ; 76 * mowÃr ; 77 * m·th ; 78 ušt8_t mÿ·bž™y ; 79  ag’t_»que¡ * m»que¡ ; 80 gušt mw©ch ; 83  sag’t_»que¡ { 84 ag’t_»que¡_ty³_t mty³ ; 85  ag’t * mag’t ; 86 DBusMes§ge * mmsg ; 87 DBusP’dšgC®l * mÿÎ ; 88 * mcb ; 89 * mu£r_d©a ; 90 GDe¡royNÙify mde¡roy ; 93  $ag’t_»Ëa£ ( ag’t *agent) 95 DBusMes§ge * mes§ge ; 97 `DBG ("R–—sšg‡g’ˆ%s, %s", ag’t -> owÃr ,‡g’t-> ·th ); 99 ià( ag’t -> »que¡ ) 100 `ag’t_ÿnûl ( ag’t ); 102 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ag’t -> owÃr ,‡g’t-> ·th , 103 AGENT_INTERFACE , "Release"); 104 ià( mes§ge =ð NULL ) { 105 `”rÜ ("Couldn't‡llocate D-Bus message"); 109 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), mes§ge ); 110 } } 112  $£nd_ÿnûl_»que¡ ( ag’t_»que¡ * »q ) 114 DBusMes§ge * mes§ge ; 116 `DBG ("S’dšg CªûÈ»que¡Ø%s, %s", »q -> ag’t -> owÃr , 117 »q -> ag’t -> ·th ); 119 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( »q -> ag’t -> owÃr ,„eq->ag’t-> ·th , 120 AGENT_INTERFACE , "Cancel"); 121 ià( mes§ge =ð NULL ) { 122 `”rÜ ("Couldn't‡llocate D-Bus message"); 123  - ENOMEM ; 126 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), mes§ge ); 129 } } 131  $ag’t_»que¡_ä“ ( ag’t_»que¡ * »q , gboÞ—n de¡roy ) 133 ià( »q -> msg ) 134 `dbus_mes§ge_uÄef ( »q -> msg ); 135 ià( »q -> ÿÎ ) 136 `dbus_³ndšg_ÿÎ_uÄef ( »q -> ÿÎ ); 137 ià( »q -> ag’t &&„eq->ag’t-> »que¡ ) 138 »q -> ag’t -> »que¡ = NULL ; 139 ià( de¡roy && »q ->destroy) 140 »q -> `de¡roy Ôeq-> u£r_d©a ); 141 `g_ä“ ( »q ); 142 } } 144  $£t_io_ÿp ( btd_ad­‹r * ad­‹r , gpoš‹r u£r_d©a ) 146  ag’t *ag’ˆð u£r_d©a ; 147 ušt8_t io_ÿp ; 149 ià( ag’t ) 150 io_ÿp = ag’t -> ÿ·bž™y ; 152 io_ÿp = IO_CAPABILITY_NOINPUTNOOUTPUT ; 154 `ad­‹r_£t_io_ÿ·bž™y ( ad­‹r , io_ÿp ); 155 } } 157  boÞ $add_deçuÉ_ag’t ( ag’t *agent) 159 ià( `queue_³ek_h—d ( deçuÉ_ag’ts è=ð ag’t ) 160  Œue ; 162 `queue_»move ( deçuÉ_ag’ts , ag’t ); 164 ià(! `queue_push_h—d ( deçuÉ_ag’ts , ag’t )) 165  çl£ ; 167 `DBG ("Deçuɇg’ˆ£ˆtØ% %s", ag’t -> owÃr ,‡g’t-> ·th ); 169 `ad­‹r_fÜ—ch ( £t_io_ÿp , ag’t ); 171  Œue ; 172 } } 174  $»move_deçuÉ_ag’t ( ag’t *agent) 176 ià( `queue_³ek_h—d ( deçuÉ_ag’ts è!ð ag’t ) { 177 `queue_»move ( deçuÉ_ag’ts , ag’t ); 181 `queue_»move ( deçuÉ_ag’ts , ag’t ); 183 ag’t = `queue_³ek_h—d ( deçuÉ_ag’ts ); 184 ià( ag’t ) 185 `DBG ("Deçuɇg’ˆ£ˆtØ% %s", ag’t -> owÃr ,‡g’t-> ·th ); 187 `DBG ("Default‡gent cleared"); 189 `ad­‹r_fÜ—ch ( £t_io_ÿp , ag’t ); 190 } } 192  $ag’t_discÚÃù ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 194  ag’t *ag’ˆð u£r_d©a ; 196 `DBG ("Ag’ˆ% discÚÃùed", ag’t -> owÃr ); 198 ià( ag’t -> w©ch > 0) { 199 `g_dbus_»move_w©ch ( cÚn , ag’t -> w©ch ); 200 ag’t -> w©ch = 0; 203 `»move_deçuÉ_ag’t ( ag’t ); 205 `g_hash_bË_»move ( ag’t_li¡ , ag’t -> owÃr ); 206 } } 208  ag’t * $ag’t_»f ( ag’t *agent) 210 ag’t -> »f ++; 212 `DBG ("%p:„ef=%d", ag’t ,‡g’t-> »f ); 214  ag’t ; 215 } } 217  $ag’t_uÄef ( ag’t *agent) 219 ag’t -> »f --; 221 `DBG ("%p:„ef=%d", ag’t ,‡g’t-> »f ); 223 ià( ag’t -> »f > 0) 226 ià( ag’t -> »que¡ ) { 227 DBusE¼Ü ”r ; 228 ag’t_pšcode_cb pšcode_cb ; 229 ag’t_·sskey_cb ·sskey_cb ; 230 ag’t_cb cb ; 232 `dbus_”rÜ_š™ (& ”r ); 233 `dbus_£t_”rÜ_cÚ¡ (& ”r , ERROR_INTERFACE ".Failed", 236  ag’t -> »que¡ -> ty³ ) { 237  AGENT_REQUEST_PINCODE : 238 pšcode_cb = ag’t -> »que¡ -> cb ; 239 `pšcode_cb ( ag’t , & ”r , NULL ,‡g’t-> »que¡ -> u£r_d©a ); 241  AGENT_REQUEST_PASSKEY : 242 ·sskey_cb = ag’t -> »que¡ -> cb ; 243 `·sskey_cb ( ag’t , & ”r , 0,‡g’t-> »que¡ -> u£r_d©a ); 245  AGENT_REQUEST_CONFIRMATION : 246  AGENT_REQUEST_AUTHORIZATION : 247  AGENT_REQUEST_AUTHORIZE_SERVICE : 248  AGENT_REQUEST_DISPLAY_PINCODE : 250 cb = ag’t -> »que¡ ->cb; 251 `cb ( ag’t , & ”r ,‡g’t-> »que¡ -> u£r_d©a ); 254 `dbus_”rÜ_ä“ (& ”r ); 256 `ag’t_ÿnûl ( ag’t ); 259 `g_ä“ ( ag’t -> owÃr ); 260 `g_ä“ ( ag’t -> ·th ); 262 `g_ä“ ( ag’t ); 263 } } 265  ag’t * $ag’t_g‘ (cÚ¡ * owÃr ) 267  ag’t *agent; 269 ià( owÃr ) { 270 ag’t = `g_hash_bË_lookup ( ag’t_li¡ , owÃr ); 271 ià( ag’t ) 272  `ag’t_»f ( ag’t ); 275 ià(! `queue_i£m±y ( deçuÉ_ag’ts )) 276  `ag’t_»f ( `queue_³ek_h—d ( deçuÉ_ag’ts )); 278  NULL ; 279 } } 281  ag’t * $ag’t_ü—‹ ÐcÚ¡ * Çme , cÚ¡ * ·th , 282 ušt8_t ÿ·bž™y ) 284  ag’t *agent; 286 ag’t = `g_Ãw0 (agent, 1); 288 ag’t -> owÃr = `g_¡rdup ( Çme ); 289 ag’t -> ·th = `g_¡rdup (path); 290 ag’t -> ÿ·bž™y = capability; 292 ag’t -> w©ch = `g_dbus_add_discÚÃù_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), 293 Çme , ag’t_discÚÃù , 294 ag’t , NULL ); 296  `ag’t_»f ( ag’t ); 297 } } 299  ag’t_»que¡ * $ag’t_»que¡_Ãw ( ag’t *agent, 300 ag’t_»que¡_ty³_t ty³ , 301 * cb , 302 * u£r_d©a , 303 GDe¡royNÙify de¡roy ) 305  ag’t_»que¡ * »q ; 307 »q = `g_Ãw0 ( ag’t_»que¡ , 1); 309 »q -> ag’t =‡gent; 310 »q -> ty³ =ype; 311 »q -> cb = cb; 312 »q -> u£r_d©a = user_data; 313 »q -> de¡roy = destroy; 315  »q ; 316 } } 318  $ag’t_ÿnûl ( ag’t *agent) 320 ià(! ag’t -> »que¡ ) 321  - EINVAL ; 323 ià( ag’t -> »que¡ -> ÿÎ ) { 324 `dbus_³ndšg_ÿÎ_ÿnûl ( ag’t -> »que¡ -> ÿÎ ); 325 `£nd_ÿnûl_»que¡ ( ag’t -> »que¡ ); 328 `ag’t_»que¡_ä“ ( ag’t -> »que¡ , TRUE ); 329 ag’t -> »que¡ = NULL ; 332 } } 334  $sim¶e_ag’t_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 336  ag’t_»que¡ * »q = u£r_d©a ; 337  ag’t *ag’ˆð »q ->agent; 338 DBusMes§ge * mes§ge ; 339 DBusE¼Ü ”r ; 340 ag’t_cb cb = »q ->cb; 344 mes§ge = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 347 `ag’t_»f ( ag’t ); 349 `dbus_”rÜ_š™ (& ”r ); 350 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”r , mes§ge )) { 351 `DBG ("ag’ˆ”rÜ„•ly: %s, %s", ”r . Çme ,ƒ¼. mes§ge ); 353 `cb ( ag’t , & ”r , »q -> u£r_d©a ); 355 ià( `dbus_”rÜ_has_Çme (& ”r , DBUS_ERROR_NO_REPLY )) { 356 `”rÜ ("Timed out waiting for„eply from‡gent"); 357 `ag’t_ÿnûl ( ag’t ); 358 `dbus_mes§ge_uÄef ( mes§ge ); 359 `dbus_”rÜ_ä“ (& ”r ); 360 `ag’t_uÄef ( ag’t ); 364 `dbus_”rÜ_ä“ (& ”r ); 365  dÚe ; 368 ià(! `dbus_mes§ge_g‘_¬gs ( mes§ge , & ”r , DBUS_TYPE_INVALID )) { 369 `”rÜ ("WrÚg„•ly sigÇtu»: %s", ”r . mes§ge ); 370 `cb ( ag’t , & ”r , »q -> u£r_d©a ); 371 `dbus_”rÜ_ä“ (& ”r ); 372  dÚe ; 375 `cb ( ag’t , NULL , »q -> u£r_d©a ); 376 dÚe : 377 `dbus_mes§ge_uÄef ( mes§ge ); 379 ag’t -> »que¡ = NULL ; 380 `ag’t_»que¡_ä“ ( »q , TRUE ); 381 `ag’t_uÄef ( ag’t ); 382 } } 384  $ag’t_ÿÎ_authÜize_£rviû ( ag’t_»que¡ * »q , 385 cÚ¡ * deviû_·th , 386 cÚ¡ * uuid ) 388  ag’t *ag’ˆð »q ->agent; 390 »q -> msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ag’t -> owÃr ,‡g’t-> ·th , 391 AGENT_INTERFACE , "AuthorizeService"); 392 ià(! »q -> msg ) { 393 `”rÜ ("Couldn't‡llocate D-Bus message"); 394  - ENOMEM ; 397 `dbus_mes§ge_­³nd_¬gs ( »q -> msg , 398 DBUS_TYPE_OBJECT_PATH , & deviû_·th , 399 DBUS_TYPE_STRING , & uuid , 400 DBUS_TYPE_INVALID ); 402 ià( `g_dbus_£nd_mes§ge_w™h_»¶y ( `btd_g‘_dbus_cÚÃùiÚ (), 403 »q -> msg , &»q-> ÿÎ , 404 REQUEST_TIMEOUT è=ð FALSE ) { 405 `”rÜ ("D-Bus send failed"); 406  - EIO ; 409 `dbus_³ndšg_ÿÎ_£t_nÙify ( »q -> ÿÎ , sim¶e_ag’t_»¶y ,„eq, NULL ); 411 } } 413  $ag’t_authÜize_£rviû ( ag’t *ag’t, cÚ¡ * ·th , 414 cÚ¡ * uuid , ag’t_cb cb , 415 * u£r_d©a , GDe¡royNÙify de¡roy ) 417  ag’t_»que¡ * »q ; 418  ”r ; 420 ià( ag’t -> »que¡ ) 421  - EBUSY ; 423 »q = `ag’t_»que¡_Ãw ( ag’t , AGENT_REQUEST_AUTHORIZE_SERVICE , cb , 424 u£r_d©a , de¡roy ); 426 ”r = `ag’t_ÿÎ_authÜize_£rviû ( »q , ·th , uuid ); 427 ià( ”r < 0) { 428 `ag’t_»que¡_ä“ ( »q , FALSE ); 429  - ENOMEM ; 432 ag’t -> »que¡ = »q ; 434 `DBG ("authÜiz£rviû„eque¡ wa £Á fÜ %s", ·th ); 437 } } 439  $pšcode_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 441  ag’t_»que¡ * »q = u£r_d©a ; 442  ag’t *ag’ˆð »q ->agent; 443 ag’t_pšcode_cb cb = »q ->cb; 444 DBusMes§ge * mes§ge ; 445 DBusE¼Ü ”r ; 446 size_t Ën ; 447 * pš ; 451 mes§ge = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 454 `ag’t_»f ( ag’t ); 456 `dbus_”rÜ_š™ (& ”r ); 457 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”r , mes§ge )) { 458 `”rÜ ("Agent %s„eplied with‡nƒrror: %s, %s", 459 ag’t -> ·th , ”r . Çme ,ƒ¼. mes§ge ); 461 `cb ( ag’t , & ”r , NULL , »q -> u£r_d©a ); 462 `dbus_”rÜ_ä“ (& ”r ); 463  dÚe ; 466 ià(! `dbus_mes§ge_g‘_¬gs ( mes§ge , & ”r , 467 DBUS_TYPE_STRING , & pš , 468 DBUS_TYPE_INVALID )) { 469 `”rÜ ("WrÚg…asskey„•ly sigÇtu»: %s", ”r . mes§ge ); 470 `cb ( ag’t , & ”r , NULL , »q -> u£r_d©a ); 471 `dbus_”rÜ_ä“ (& ”r ); 472  dÚe ; 475 Ën = `¡¾’ ( pš ); 477 ià( Ën > 16 ||†en < 1) { 478 `”rÜ ("Inv®id PIN†’gth (%zuèäom‡g’t", Ën ); 479 `dbus_£t_”rÜ_cÚ¡ (& ”r , ERROR_INTERFACE ".InvalidArgs", 481 `cb ( ag’t , & ”r , NULL , »q -> u£r_d©a ); 482 `dbus_”rÜ_ä“ (& ”r ); 483  dÚe ; 486 `cb ( ag’t , NULL , pš , »q -> u£r_d©a ); 488 dÚe : 489 ià( mes§ge ) 490 `dbus_mes§ge_uÄef ( mes§ge ); 492 `dbus_³ndšg_ÿÎ_ÿnûl ( »q -> ÿÎ ); 493 ag’t -> »que¡ = NULL ; 494 `ag’t_»que¡_ä“ ( »q , TRUE ); 495 `ag’t_uÄef ( ag’t ); 496 } } 498  $pšcode_»que¡_Ãw ( ag’t_»que¡ * »q , cÚ¡ * deviû_·th , 499 dbus_boÞ_t £cu» ) 501  ag’t *ag’ˆð »q ->agent; 506 »q -> msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ag’t -> owÃr ,‡g’t-> ·th , 507 AGENT_INTERFACE , "RequestPinCode"); 508 ià( »q -> msg =ð NULL ) { 509 `”rÜ ("Couldn't‡llocate D-Bus message"); 510  - ENOMEM ; 513 `dbus_mes§ge_­³nd_¬gs ( »q -> msg , DBUS_TYPE_OBJECT_PATH , & deviû_·th , 514 DBUS_TYPE_INVALID ); 516 ià( `g_dbus_£nd_mes§ge_w™h_»¶y ( `btd_g‘_dbus_cÚÃùiÚ (), »q -> msg , 517 & »q -> ÿÎ , REQUEST_TIMEOUT è=ð FALSE ) { 518 `”rÜ ("D-Bus send failed"); 519  - EIO ; 522 `dbus_³ndšg_ÿÎ_£t_nÙify ( »q -> ÿÎ , pšcode_»¶y ,„eq, NULL ); 524 } } 526  $ag’t_»que¡_pšcode ( ag’t *ag’t,  btd_deviû * deviû , 527 ag’t_pšcode_cb cb , gboÞ—n £cu» , 528 * u£r_d©a , GDe¡royNÙify de¡roy ) 530  ag’t_»que¡ * »q ; 531 cÚ¡ * dev_·th = `deviû_g‘_·th ( deviû ); 532  ”r ; 534 ià( ag’t -> »que¡ ) 535  - EBUSY ; 537 »q = `ag’t_»que¡_Ãw ( ag’t , AGENT_REQUEST_PINCODE , cb , 538 u£r_d©a , de¡roy ); 540 ”r = `pšcode_»que¡_Ãw ( »q , dev_·th , £cu» ); 541 ià( ”r < 0) 542  çžed ; 544 ag’t -> »que¡ = »q ; 548 çžed : 549 `ag’t_»que¡_ä“ ( »q , FALSE ); 550  ”r ; 551 } } 553  $·sskey_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 555  ag’t_»que¡ * »q = u£r_d©a ; 556  ag’t *ag’ˆð »q ->agent; 557 ag’t_·sskey_cb cb = »q ->cb; 558 DBusMes§ge * mes§ge ; 559 DBusE¼Ü ”r ; 560 ušt32_t ·sskey ; 564 mes§ge = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 566 `dbus_”rÜ_š™ (& ”r ); 567 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”r , mes§ge )) { 568 `”rÜ ("Agent„eplied with‡nƒrror: %s, %s", 569 ”r . Çme ,ƒ¼. mes§ge ); 570 `cb ( ag’t , & ”r , 0, »q -> u£r_d©a ); 571 `dbus_”rÜ_ä“ (& ”r ); 572  dÚe ; 575 ià(! `dbus_mes§ge_g‘_¬gs ( mes§ge , & ”r , 576 DBUS_TYPE_UINT32 , & ·sskey , 577 DBUS_TYPE_INVALID )) { 578 `”rÜ ("WrÚg…asskey„•ly sigÇtu»: %s", ”r . mes§ge ); 579 `cb ( ag’t , & ”r , 0, »q -> u£r_d©a ); 580 `dbus_”rÜ_ä“ (& ”r ); 581  dÚe ; 584 `cb ( ag’t , NULL , ·sskey , »q -> u£r_d©a ); 586 dÚe : 587 ià( mes§ge ) 588 `dbus_mes§ge_uÄef ( mes§ge ); 590 `dbus_³ndšg_ÿÎ_ÿnûl ( »q -> ÿÎ ); 591 ag’t -> »que¡ = NULL ; 592 `ag’t_»que¡_ä“ ( »q , TRUE ); 593 } } 595  $·sskey_»que¡_Ãw ( ag’t_»que¡ * »q , 596 cÚ¡ * deviû_·th ) 598  ag’t *ag’ˆð »q ->agent; 600 »q -> msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ag’t -> owÃr ,‡g’t-> ·th , 601 AGENT_INTERFACE , "RequestPasskey"); 602 ià( »q -> msg =ð NULL ) { 603 `”rÜ ("Couldn't‡llocate D-Bus message"); 604  - ENOMEM ; 607 `dbus_mes§ge_­³nd_¬gs ( »q -> msg , DBUS_TYPE_OBJECT_PATH , & deviû_·th , 608 DBUS_TYPE_INVALID ); 610 ià( `g_dbus_£nd_mes§ge_w™h_»¶y ( `btd_g‘_dbus_cÚÃùiÚ (), »q -> msg , 611 & »q -> ÿÎ , REQUEST_TIMEOUT è=ð FALSE ) { 612 `”rÜ ("D-Bus send failed"); 613  - EIO ; 616 `dbus_³ndšg_ÿÎ_£t_nÙify ( »q -> ÿÎ , ·sskey_»¶y ,„eq, NULL ); 618 } } 620  $ag’t_»que¡_·sskey ( ag’t *ag’t,  btd_deviû * deviû , 621 ag’t_·sskey_cb cb , * u£r_d©a , 622 GDe¡royNÙify de¡roy ) 624  ag’t_»que¡ * »q ; 625 cÚ¡ * dev_·th = `deviû_g‘_·th ( deviû ); 626  ”r ; 628 ià( ag’t -> »que¡ ) 629  - EBUSY ; 631 `DBG ("Calling Agent.RequestPasskey:‚ame=%s,…ath=%s", 632 ag’t -> owÃr ,‡g’t-> ·th ); 634 »q = `ag’t_»que¡_Ãw ( ag’t , AGENT_REQUEST_PASSKEY , cb , 635 u£r_d©a , de¡roy ); 637 ”r = `·sskey_»que¡_Ãw ( »q , dev_·th ); 638 ià( ”r < 0) 639  çžed ; 641 ag’t -> »que¡ = »q ; 645 çžed : 646 `ag’t_»que¡_ä“ ( »q , FALSE ); 647  ”r ; 648 } } 650  $cÚfœm©iÚ_»que¡_Ãw ( ag’t_»que¡ * »q , 651 cÚ¡ * deviû_·th , 652 ušt32_t ·sskey ) 654  ag’t *ag’ˆð »q ->agent; 656 »q -> msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ag’t -> owÃr ,‡g’t-> ·th , 657 AGENT_INTERFACE , "RequestConfirmation"); 658 ià( »q -> msg =ð NULL ) { 659 `”rÜ ("Couldn't‡llocate D-Bus message"); 660  - ENOMEM ; 663 `dbus_mes§ge_­³nd_¬gs ( »q -> msg , 664 DBUS_TYPE_OBJECT_PATH , & deviû_·th , 665 DBUS_TYPE_UINT32 , & ·sskey , 666 DBUS_TYPE_INVALID ); 668 ià( `g_dbus_£nd_mes§ge_w™h_»¶y ( `btd_g‘_dbus_cÚÃùiÚ (), »q -> msg , 669 & »q -> ÿÎ , REQUEST_TIMEOUT è=ð FALSE ) { 670 `”rÜ ("D-Bus send failed"); 671  - EIO ; 674 `dbus_³ndšg_ÿÎ_£t_nÙify ( »q -> ÿÎ , sim¶e_ag’t_»¶y ,„eq, NULL ); 677 } } 679  $ag’t_»que¡_cÚfœm©iÚ ( ag’t *ag’t,  btd_deviû * deviû , 680 ušt32_t ·sskey , ag’t_cb cb , 681 * u£r_d©a , GDe¡royNÙify de¡roy ) 683  ag’t_»que¡ * »q ; 684 cÚ¡ * dev_·th = `deviû_g‘_·th ( deviû ); 685  ”r ; 687 ià( ag’t -> »que¡ ) 688  - EBUSY ; 690 `DBG ("Calling Agent.RequestConfirmation:‚ame=%s,…ath=%s,…asskey=%06u", 691 ag’t -> owÃr ,‡g’t-> ·th , ·sskey ); 693 »q = `ag’t_»que¡_Ãw ( ag’t , AGENT_REQUEST_CONFIRMATION , cb , 694 u£r_d©a , de¡roy ); 696 ”r = `cÚfœm©iÚ_»que¡_Ãw ( »q , dev_·th , ·sskey ); 697 ià( ”r < 0) 698  çžed ; 700 ag’t -> »que¡ = »q ; 704 çžed : 705 `ag’t_»que¡_ä“ ( »q , FALSE ); 706  ”r ; 707 } } 709  $authÜiz©iÚ_»que¡_Ãw ( ag’t_»que¡ * »q , 710 cÚ¡ * deviû_·th ) 712  ag’t *ag’ˆð »q ->agent; 714 »q -> msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ag’t -> owÃr ,‡g’t-> ·th , 715 AGENT_INTERFACE , "RequestAuthorization"); 716 ià( »q -> msg =ð NULL ) { 717 `”rÜ ("Couldn't‡llocate D-Bus message"); 718  - ENOMEM ; 721 `dbus_mes§ge_­³nd_¬gs ( »q -> msg , 722 DBUS_TYPE_OBJECT_PATH , & deviû_·th , 723 DBUS_TYPE_INVALID ); 725 ià( `g_dbus_£nd_mes§ge_w™h_»¶y ( `btd_g‘_dbus_cÚÃùiÚ (), »q -> msg , 726 & »q -> ÿÎ , REQUEST_TIMEOUT è=ð FALSE ) { 727 `”rÜ ("D-Bus send failed"); 728  - EIO ; 731 `dbus_³ndšg_ÿÎ_£t_nÙify ( »q -> ÿÎ , sim¶e_ag’t_»¶y ,„eq, NULL ); 734 } } 736  $ag’t_»que¡_authÜiz©iÚ ( ag’t *ag’t,  btd_deviû * deviû , 737 ag’t_cb cb , * u£r_d©a , 738 GDe¡royNÙify de¡roy ) 740  ag’t_»que¡ * »q ; 741 cÚ¡ * dev_·th = `deviû_g‘_·th ( deviû ); 742  ”r ; 744 ià( ag’t -> »que¡ ) 745  - EBUSY ; 747 `DBG ("Calling Agent.RequestAuthorization:‚ame=%s,…ath=%s", 748 ag’t -> owÃr ,‡g’t-> ·th ); 750 »q = `ag’t_»que¡_Ãw ( ag’t , AGENT_REQUEST_AUTHORIZATION , cb , 751 u£r_d©a , de¡roy ); 753 ”r = `authÜiz©iÚ_»que¡_Ãw ( »q , dev_·th ); 754 ià( ”r < 0) 755  çžed ; 757 ag’t -> »que¡ = »q ; 761 çžed : 762 `ag’t_»que¡_ä“ ( »q , FALSE ); 763  ”r ; 764 } } 766  $ag’t_di¥Ïy_·sskey ( ag’t *ag’t,  btd_deviû * deviû , 767 ušt32_t ·sskey , ušt16_t ’‹»d ) 769 DBusMes§ge * mes§ge ; 770 cÚ¡ * dev_·th = `deviû_g‘_·th ( deviû ); 772 mes§ge = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ag’t -> owÃr ,‡g’t-> ·th , 773 AGENT_INTERFACE , "DisplayPasskey"); 774 ià(! mes§ge ) { 775 `”rÜ ("Couldn't‡llocate D-Bus message"); 779 `dbus_mes§ge_­³nd_¬gs ( mes§ge , 780 DBUS_TYPE_OBJECT_PATH , & dev_·th , 781 DBUS_TYPE_UINT32 , & ·sskey , 782 DBUS_TYPE_UINT16 , & ’‹»d , 783 DBUS_TYPE_INVALID ); 785 ià(! `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), mes§ge )) { 786 `”rÜ ("D-Bus send failed"); 791 } } 793  $di¥Ïy_pšcode_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 795  ag’t_»que¡ * »q = u£r_d©a ; 796  ag’t *ag’ˆð »q ->agent; 797 DBusMes§ge * mes§ge ; 798 DBusE¼Ü ”r ; 799 ag’t_cb cb = »q ->cb; 803 ag’t -> »que¡ = NULL ; 807 mes§ge = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 809 `dbus_”rÜ_š™ (& ”r ); 810 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”r , mes§ge )) { 811 `”rÜ ("Agent„eplied with‡nƒrror: %s, %s", 812 ”r . Çme ,ƒ¼. mes§ge ); 814 `cb ( ag’t , & ”r , »q -> u£r_d©a ); 816 ià( `dbus_”rÜ_has_Çme (& ”r , DBUS_ERROR_NO_REPLY )) { 817 `ag’t_ÿnûl ( ag’t ); 818 `dbus_mes§ge_uÄef ( mes§ge ); 819 `dbus_”rÜ_ä“ (& ”r ); 823 `dbus_”rÜ_ä“ (& ”r ); 824  dÚe ; 827 ià(! `dbus_mes§ge_g‘_¬gs ( mes§ge , & ”r , DBUS_TYPE_INVALID )) { 828 `”rÜ ("WrÚg„•ly sigÇtu»: %s", ”r . mes§ge ); 829 `cb ( ag’t , & ”r , »q -> u£r_d©a ); 830 `dbus_”rÜ_ä“ (& ”r ); 831  dÚe ; 834 `cb ( ag’t , NULL , »q -> u£r_d©a ); 835 dÚe : 836 `dbus_mes§ge_uÄef ( mes§ge ); 838 `ag’t_»que¡_ä“ ( »q , TRUE ); 839 } } 841  $di¥Ïy_pšcode_»que¡_Ãw ( ag’t_»que¡ * »q , 842 cÚ¡ * deviû_·th , 843 cÚ¡ * pšcode ) 845  ag’t *ag’ˆð »q ->agent; 847 »q -> msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ag’t -> owÃr ,‡g’t-> ·th , 848 AGENT_INTERFACE , "DisplayPinCode"); 849 ià( »q -> msg =ð NULL ) { 850 `”rÜ ("Couldn't‡llocate D-Bus message"); 851  - ENOMEM ; 854 `dbus_mes§ge_­³nd_¬gs ( »q -> msg , 855 DBUS_TYPE_OBJECT_PATH , & deviû_·th , 856 DBUS_TYPE_STRING , & pšcode , 857 DBUS_TYPE_INVALID ); 859 ià( `g_dbus_£nd_mes§ge_w™h_»¶y ( `btd_g‘_dbus_cÚÃùiÚ (), »q -> msg , 860 & »q -> ÿÎ , REQUEST_TIMEOUT è=ð FALSE ) { 861 `”rÜ ("D-Bus send failed"); 862  - EIO ; 865 `dbus_³ndšg_ÿÎ_£t_nÙify ( »q -> ÿÎ , di¥Ïy_pšcode_»¶y , 866 »q , NULL ); 869 } } 871  $ag’t_di¥Ïy_pšcode ( ag’t *ag’t,  btd_deviû * deviû , 872 cÚ¡ * pšcode , ag’t_cb cb , 873 * u£r_d©a , GDe¡royNÙify de¡roy ) 875  ag’t_»que¡ * »q ; 876 cÚ¡ * dev_·th = `deviû_g‘_·th ( deviû ); 877  ”r ; 879 ià( ag’t -> »que¡ ) 880  - EBUSY ; 882 `DBG ("Calling Agent.DisplayPinCode:‚ame=%s,…ath=%s,…incode=%s", 883 ag’t -> owÃr ,‡g’t-> ·th , pšcode ); 885 »q = `ag’t_»que¡_Ãw ( ag’t , AGENT_REQUEST_DISPLAY_PINCODE , cb , 886 u£r_d©a , de¡roy ); 888 ”r = `di¥Ïy_pšcode_»que¡_Ãw ( »q , dev_·th , pšcode ); 889 ià( ”r < 0) 890  çžed ; 892 ag’t -> »que¡ = »q ; 896 çžed : 897 `ag’t_»que¡_ä“ ( »q , FALSE ); 898  ”r ; 899 } } 901 ušt8_t $ag’t_g‘_io_ÿ·bž™y ( ag’t *agent) 903  ag’t -> ÿ·bž™y ; 904 } } 906  $ag’t_de¡roy ( gpoš‹r d©a ) 908  ag’t *ag’ˆð d©a ; 910 `DBG ("ag’ˆ%s", ag’t -> owÃr ); 912 ià( ag’t -> w©ch > 0) { 913 `g_dbus_»move_w©ch ( `btd_g‘_dbus_cÚÃùiÚ (), ag’t -> w©ch ); 914 ag’t -> w©ch = 0; 915 `ag’t_»Ëa£ ( ag’t ); 918 `»move_deçuÉ_ag’t ( ag’t ); 920 `ag’t_uÄef ( ag’t ); 921 } } 923  ušt8_t $·r£_io_ÿ·bž™y (cÚ¡ * ÿ·bž™y ) 925 ià( `g_¡r_equ® ( ÿ·bž™y , "")) 926  IO_CAPABILITY_DISPLAYYESNO ; 927 ià( `g_¡r_equ® ( ÿ·bž™y , "DisplayOnly")) 928  IO_CAPABILITY_DISPLAYONLY ; 929 ià( `g_¡r_equ® ( ÿ·bž™y , "DisplayYesNo")) 930  IO_CAPABILITY_DISPLAYYESNO ; 931 ià( `g_¡r_equ® ( ÿ·bž™y , "KeyboardOnly")) 932  IO_CAPABILITY_KEYBOARDONLY ; 933 ià( `g_¡r_equ® ( ÿ·bž™y , "NoInputNoOutput")) 934  IO_CAPABILITY_NOINPUTNOOUTPUT ; 935 ià( `g_¡r_equ® ( ÿ·bž™y , "KeyboardDisplay")) 936  IO_CAPABILITY_KEYBOARDDISPLAY ; 937  IO_CAPABILITY_INVALID ; 938 } } 940  DBusMes§ge * $»gi¡”_ag’t ( DBusCÚÃùiÚ * cÚn , 941 DBusMes§ge * msg , * u£r_d©a ) 943  ag’t *agent; 944 cÚ¡ * £nd” , * ·th , * ÿ·bž™y ; 945 ušt8_t ÿp ; 947 £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 949 ag’t = `g_hash_bË_lookup ( ag’t_li¡ , £nd” ); 950 ià( ag’t ) 951  `btd_”rÜ_®»ady_exi¡s ( msg ); 953 ià( `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 954 DBUS_TYPE_STRING , & ÿ·bž™y , 955 DBUS_TYPE_INVALID è=ð FALSE ) 956  `btd_”rÜ_šv®id_¬gs ( msg ); 958 ÿp = `·r£_io_ÿ·bž™y ( ÿ·bž™y ); 959 ià( ÿp =ð IO_CAPABILITY_INVALID ) 960  `btd_”rÜ_šv®id_¬gs ( msg ); 962 ag’t = `ag’t_ü—‹ ( £nd” , ·th , ÿp ); 963 ià(! ag’t ) 964  `btd_”rÜ_šv®id_¬gs ( msg ); 966 `DBG ("ag’ˆ%s", ag’t -> owÃr ); 968 `g_hash_bË_»¶aû ( ag’t_li¡ , ag’t -> owÃr ,‡gent); 970  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 971 } } 973  DBusMes§ge * $uÄegi¡”_ag’t ( DBusCÚÃùiÚ * cÚn , 974 DBusMes§ge * msg , * u£r_d©a ) 976  ag’t *agent; 977 cÚ¡ * £nd” , * ·th ; 979 £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 981 ag’t = `g_hash_bË_lookup ( ag’t_li¡ , £nd” ); 982 ià(! ag’t ) 983  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 985 `DBG ("ag’ˆ%s", ag’t -> owÃr ); 987 ià( `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 988 DBUS_TYPE_INVALID è=ð FALSE ) 989  `btd_”rÜ_šv®id_¬gs ( msg ); 991 ià( `g_¡r_equ® ( ·th , ag’t ->·thè=ð FALSE ) 992  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 994 `ag’t_discÚÃù ( cÚn , ag’t ); 996  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 997 } } 999  DBusMes§ge * $»que¡_deçuÉ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 1000 * u£r_d©a ) 1002  ag’t *agent; 1003 cÚ¡ * £nd” , * ·th ; 1005 £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 1007 ag’t = `g_hash_bË_lookup ( ag’t_li¡ , £nd” ); 1008 ià(! ag’t ) 1009  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 1011 ià( `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 1012 DBUS_TYPE_INVALID è=ð FALSE ) 1013  `btd_”rÜ_šv®id_¬gs ( msg ); 1015 ià( `g_¡r_equ® ( ·th , ag’t ->·thè=ð FALSE ) 1016  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 1018 ià(! `add_deçuÉ_ag’t ( ag’t )) 1019  `btd_”rÜ_çžed ( msg , "Failedo set‡s default"); 1021  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 1022 } } 1024 cÚ¡ GDBusM‘hodTabË gm‘hods [] = { 1025 { GDBUS_METHOD ("RegisterAgent", 1026 GDBUS_ARGS ({ "agent", "o"}, { "capability", "s" }), 1027 NULL , »gi¡”_ag’t ) }, 1028 { GDBUS_METHOD ("UÄegi¡”Ag’t", GDBUS_ARGS ({ "agent", "o" }), 1029 NULL , uÄegi¡”_ag’t ) }, 1030 { GDBUS_METHOD ("Reque¡DeçuÉAg’t", GDBUS_ARGS ({ "agent", "o" }), 1031 NULL , »que¡_deçuÉ ) }, 1035  $btd_ag’t_š™ () 1037 ag’t_li¡ = `g_hash_bË_Ãw_fuÎ ( g_¡r_hash , g_¡r_equ® , 1038 NULL , ag’t_de¡roy ); 1040 deçuÉ_ag’ts = `queue_Ãw (); 1042 `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1044 m‘hods , NULL , NULL, NULL, NULL); 1045 } } 1047  $btd_ag’t_þ—nup () 1049 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 1052 `g_hash_bË_de¡roy ( ag’t_li¡ ); 1053 `queue_de¡roy ( deçuÉ_ag’ts , NULL ); 1054 } } @src/agent.h 25  gag’t ; 27 (* tag’t_cb è( tag’t *ag’t, tDBusE¼Ü * t”r , 28 * tu£r_d©a ); 30 (* tag’t_pšcode_cb è( tag’t *ag’t, tDBusE¼Ü * t”r , 31 cÚ¡ * tpšcode , * tu£r_d©a ); 33 (* tag’t_·sskey_cb è( tag’t *ag’t, tDBusE¼Ü * t”r , 34 tušt32_t t·sskey , * tu£r_d©a ); 36  ag’t * `ag’t_»f (agent *agent); 37  `ag’t_uÄef ( ag’t *agent); 39  ag’t * `ag’t_g‘ (cÚ¡ * owÃr ); 41  `ag’t_authÜize_£rviû ( ag’t *ag’t, cÚ¡ * ·th , 42 cÚ¡ * uuid , ag’t_cb cb , 43 * u£r_d©a , GDe¡royNÙify de¡roy ); 45  `ag’t_»que¡_pšcode ( ag’t *ag’t,  btd_deviû * deviû , 46 ag’t_pšcode_cb cb , gboÞ—n £cu» , 47 * u£r_d©a , GDe¡royNÙify de¡roy ); 49  `ag’t_»que¡_·sskey ( ag’t *ag’t,  btd_deviû * deviû , 50 ag’t_·sskey_cb cb , * u£r_d©a , 51 GDe¡royNÙify de¡roy ); 53  `ag’t_»que¡_cÚfœm©iÚ ( ag’t *ag’t,  btd_deviû * deviû , 54 ušt32_t ·sskey , ag’t_cb cb , 55 * u£r_d©a , GDe¡royNÙify de¡roy ); 57  `ag’t_»que¡_authÜiz©iÚ ( ag’t *ag’t,  btd_deviû * deviû , 58 ag’t_cb cb , * u£r_d©a , 59 GDe¡royNÙify de¡roy ); 61  `ag’t_di¥Ïy_·sskey ( ag’t *ag’t,  btd_deviû * deviû , 62 ušt32_t ·sskey , ušt16_t ’‹»d ); 64  `ag’t_di¥Ïy_pšcode ( ag’t *ag’t,  btd_deviû * deviû , 65 cÚ¡ * pšcode , ag’t_cb cb , 66 * u£r_d©a , GDe¡royNÙify de¡roy ); 68  `ag’t_ÿnûl ( ag’t *agent); 70 ušt8_t `ag’t_g‘_io_ÿ·bž™y ( ag’t *agent); 72  `btd_ag’t_š™ (); 73  `btd_ag’t_þ—nup (); @src/attio.h 25 (* t©tio_cÚÃù_cb è( tGA‰rib * t©Œib , tgpoš‹r tu£r_d©a ); 26 (* t©tio_discÚÃù_cb è( tgpoš‹r tu£r_d©a ); 28 gušt `btd_deviû_add_©tio_ÿÎback ( btd_deviû * deviû , 29 ©tio_cÚÃù_cb cfunc , 30 ©tio_discÚÃù_cb dcfunc , 31 gpoš‹r u£r_d©a ); 33 gboÞ—n `btd_deviû_»move_©tio_ÿÎback ( btd_deviû * deviû , gušt id ); @src/attrib-server.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<”ºo.h > 30  ~<¡dšt.h > 31  ~<¡dboÞ.h > 32  ~<¡ršg.h > 33  ~ 34  ~ 35  ~ 37  ~ 38  ~ 39  ~ 41  ~"lib/uuid.h " 42  ~"btio/btio.h " 43  ~"log.h " 44  ~"ad­‹r.h " 45  ~"deviû.h " 46  ~"¤c/sh¬ed/utž.h " 47  ~"©Œib/g©Œib.h " 48  ~"©Œib/©t.h " 49  ~"©Œib/g©t.h " 50  ~"©Œib/©t-d©aba£.h " 51  ~"‹xtfže.h " 52  ~"¡Üage.h " 54  ~"©Œib-£rv”.h " 56  GSLi¡ * g£rv”s = NULL ; 58  sg©t_£rv” { 59  btd_ad­‹r * mad­‹r ; 60 GIOChªÃl * ml2ÿp_io ; 61 GIOChªÃl * mË_io ; 62 ušt32_t mg©t_sdp_hªdË ; 63 ušt32_t mg­_sdp_hªdË ; 64 GLi¡ * md©aba£ ; 65 GSLi¡ * mþ›Ás ; 66 ušt16_t mÇme_hªdË ; 67 ušt16_t m­³¬ªû_hªdË ; 70  sg©t_chªÃl { 71 GA‰rib * m©Œib ; 72 gušt mmtu ; 73 gboÞ—n mË ; 74 gušt mid ; 75 gboÞ—n m’üy±ed ; 76  g©t_£rv” * m£rv” ; 77 gušt mþ—nup_id ; 78  btd_deviû * mdeviû ; 81  sgroup_–em { 82 ušt16_t mhªdË ; 83 ušt16_t m’d ; 84 ušt8_t * md©a ; 85 ušt16_t mËn ; 88  bt_uuid_t g´im_uuid = { 89 . ty³ = BT_UUID16 , 90 . gv®ue . gu16 = GATT_PRIM_SVC_UUID 92  bt_uuid_t g¢d_uuid = { 93 . ty³ = BT_UUID16 , 94 . gv®ue . gu16 = GATT_SND_SVC_UUID 96  bt_uuid_t gccc_uuid = { 97 . ty³ = BT_UUID16 , 98 . gv®ue . gu16 = GATT_CLIENT_CHARAC_CFG_UUID 101  šlše  $put_uuid_Ë (cÚ¡ bt_uuid_t * ¤c , * d¡ ) 103 ià( ¤c -> ty³ =ð BT_UUID16 ) 104 `put_Ë16 ( ¤c -> v®ue . u16 , d¡ ); 107 `bsw­_128 (& ¤c -> v®ue . u128 , d¡ ); 108 } } 110  $©Œib_ä“ (* d©a ) 112  ©Œibu‹ * a = d©a ; 114 `g_ä“ ( a -> d©a ); 115 `g_ä“ ( a ); 116 } } 118  $chªÃl_ä“ ( g©t_chªÃl * chªÃl ) 121 ià( chªÃl -> þ—nup_id ) 122 `g_sourû_»move ( chªÃl -> þ—nup_id ); 124 ià( chªÃl -> deviû ) 125 `btd_deviû_uÄef ( chªÃl -> deviû ); 127 `g_©Œib_uÄef ( chªÃl -> ©Œib ); 128 `g_ä“ ( chªÃl ); 129 } } 131  $g©t_£rv”_ä“ ( g©t_£rv” * £rv” ) 133 `g_li¡_ä“_fuÎ ( £rv” -> d©aba£ , ©Œib_ä“ ); 135 ià( £rv” -> l2ÿp_io !ð NULL ) { 136 `g_io_chªÃl_shutdown ( £rv” -> l2ÿp_io , FALSE , NULL ); 137 `g_io_chªÃl_uÄef ( £rv” -> l2ÿp_io ); 140 ià( £rv” -> Ë_io !ð NULL ) { 141 `g_io_chªÃl_shutdown ( £rv” -> Ë_io , FALSE , NULL ); 142 `g_io_chªÃl_uÄef ( £rv” -> Ë_io ); 145 `g_¦i¡_ä“_fuÎ ( £rv” -> þ›Ás , ( GDe¡royNÙify è chªÃl_ä“ ); 147 ià( £rv” -> g©t_sdp_hªdË > 0) 148 `ad­‹r_£rviû_»move ( £rv” -> ad­‹r , 149 £rv” -> g©t_sdp_hªdË ); 151 ià( £rv” -> g­_sdp_hªdË > 0) 152 `ad­‹r_£rviû_»move ( £rv” -> ad­‹r , s”v”-> g­_sdp_hªdË ); 154 ià( £rv” -> ad­‹r !ð NULL ) 155 `btd_ad­‹r_uÄef ( £rv” -> ad­‹r ); 157 `g_ä“ ( £rv” ); 158 } } 160  $ad­‹r_cmp_addr ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 162 cÚ¡  g©t_£rv” * £rv” = a ; 163 cÚ¡ bdaddr_t * bdaddr = b ; 165  `bacmp ( `btd_ad­‹r_g‘_add»ss ( £rv” -> ad­‹r ), bdaddr ); 166 } } 168  $ad­‹r_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 170 cÚ¡  g©t_£rv” * £rv” = a ; 171 cÚ¡  btd_ad­‹r * ad­‹r = b ; 173 ià( £rv” -> ad­‹r ==‡dapter) 177 } } 179  g©t_£rv” * $fšd_g©t_£rv” (cÚ¡ bdaddr_t * bdaddr ) 181 GSLi¡ * l ; 183 l = `g_¦i¡_fšd_cu¡om ( £rv”s , bdaddr , ad­‹r_cmp_addr ); 184 ià( l =ð NULL ) { 185  addr [18]; 187 `ba2¡r ( bdaddr , addr ); 188 `”rÜ ("NØGATT s”v” found iÀ%s", addr ); 189  NULL ; 192  l -> d©a ; 193 } } 195  sdp_»cÜd_t * $£rv”_»cÜd_Ãw ( uuid_t * uuid , ušt16_t ¡¬t , ušt16_ˆ ’d ) 197 sdp_li¡_t * svþass_id , * ­£q , * ´Ùo [2], * roÙ , * ­rÙo ; 198 uuid_t roÙ_uuid , ´Ùo_uuid , l2ÿp ; 199 sdp_»cÜd_t * »cÜd ; 200 sdp_d©a_t * psm , * sh , * eh ; 201 ušt16_t Í = ATT_PSM ; 203 ià( uuid =ð NULL ) 204  NULL ; 206 ià( ¡¬t > ’d ) 207  NULL ; 209 »cÜd = `sdp_»cÜd_®loc (); 210 ià( »cÜd =ð NULL ) 211  NULL ; 213 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 214 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 215 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 216 `sdp_li¡_ä“ ( roÙ , NULL ); 218 svþass_id = `sdp_li¡_­³nd ( NULL , uuid ); 219 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 220 `sdp_li¡_ä“ ( svþass_id , NULL ); 222 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 223 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp ); 224 psm = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 225 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], psm ); 226 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 228 `sdp_uuid16_ü—‹ (& ´Ùo_uuid , ATT_UUID ); 229 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & ´Ùo_uuid ); 230 sh = `sdp_d©a_®loc ( SDP_UINT16 , & ¡¬t ); 231 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], sh ); 232 eh = `sdp_d©a_®loc ( SDP_UINT16 , & ’d ); 233 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], eh ); 234 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 236 ­rÙo = `sdp_li¡_­³nd ( NULL , ­£q ); 237 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 239 `sdp_d©a_ä“ ( psm ); 240 `sdp_d©a_ä“ ( sh ); 241 `sdp_d©a_ä“ ( eh ); 242 `sdp_li¡_ä“ ( ´Ùo [0], NULL ); 243 `sdp_li¡_ä“ ( ´Ùo [1], NULL ); 244 `sdp_li¡_ä“ ( ­£q , NULL ); 245 `sdp_li¡_ä“ ( ­rÙo , NULL ); 247  »cÜd ; 248 } } 250  $hªdË_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 252 cÚ¡  ©Œibu‹ * ©Œib = a ; 253 ušt16_t hªdË = `GPOINTER_TO_UINT ( b ); 255  ©Œib -> hªdË - handle; 256 } } 258  $©Œibu‹_cmp ( gcÚ¡poš‹r a1 , gcÚ¡poš‹¸ a2 ) 260 cÚ¡  ©Œibu‹ * ©Œib1 = a1 ; 261 cÚ¡  ©Œibu‹ * ©Œib2 = a2 ; 263  ©Œib1 -> hªdË - ©Œib2 ->handle; 264 } } 266 #ifdeà __TIZEN_PATCH__ 267  $©Œibu‹_uuid_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 269 cÚ¡  ©Œibu‹ * ©Œib1 = a ; 270 cÚ¡ bt_uuid_t * uuid = b ; 272  `bt_uuid_cmp (& ©Œib1 -> uuid , uuid); 273 } } 275  ©Œibu‹ * $©Œibu‹_fšd ( btd_ad­‹r * ad­‹r , bt_uuid_t * uuid ) 277 GLi¡ * l ; 278  g©t_£rv” * £rv” ; 281 l = `g_¦i¡_fšd_cu¡om ( £rv”s , ad­‹r , ad­‹r_cmp ); 282 ià(! l ) 283  NULL ; 285 £rv” = l -> d©a ; 287 l = `g_li¡_fšd_cu¡om ( £rv” -> d©aba£ , `GUINT_TO_POINTER ( uuid ), 288 ©Œibu‹_uuid_cmp ); 289 ià(! l ) 290  NULL ; 292  l -> d©a ; 293 } } 296  ©Œibu‹ * $fšd_svc_¿nge ( g©t_£rv” * £rv” , 297 ušt16_t ¡¬t , ušt16_ˆ* ’d ) 299  ©Œibu‹ * ©Œib ; 300 gušt h = ¡¬t ; 301 GLi¡ * l ; 303 ià( ’d =ð NULL ) 304  NULL ; 306 l = `g_li¡_fšd_cu¡om ( £rv” -> d©aba£ , `GUINT_TO_POINTER ( h ), 307 hªdË_cmp ); 308 ià(! l ) 309  NULL ; 311 ©Œib = l -> d©a ; 313 ià( `bt_uuid_cmp (& ©Œib -> uuid , & ´im_uuid ) != 0 && 314 `bt_uuid_cmp (& ©Œib -> uuid , & ¢d_uuid ) != 0) 315  NULL ; 317 * ’d = ¡¬t ; 319  l =†-> Ãxt ;†;† =†->next) { 320  ©Œibu‹ * a = l -> d©a ; 322 ià( `bt_uuid_cmp (& a -> uuid , & ´im_uuid ) == 0 || 323 `bt_uuid_cmp (& a -> uuid , & ¢d_uuid ) == 0) 326 * ’d = a -> hªdË ; 329  ©Œib ; 330 } } 332  ušt32_t $©Œib_ü—‹_sdp_Ãw ( g©t_£rv” * £rv” , 333 ušt16_t hªdË , cÚ¡ * Çme ) 335 sdp_»cÜd_t * »cÜd ; 336  ©Œibu‹ * a ; 337 ušt16_t ’d = 0; 338 uuid_t svc , g­_uuid ; 340 a = `fšd_svc_¿nge ( £rv” , hªdË , & ’d ); 342 ià( a =ð NULL ) 345 ià( a -> Ën == 2) 346 `sdp_uuid16_ü—‹ (& svc , `g‘_Ë16 ( a -> d©a )); 347 #ifdeà __TIZEN_PATCH__ 348 ià( a -> Ën == 4) 349 `sdp_uuid32_ü—‹ (& svc , `g‘_Ë32 ( a -> d©a )); 351 ià( a -> Ën == 16) { 352 ušt8_t be128 [16]; 355 `bsw­_128 ( a -> d©a , be128 ); 356 `sdp_uuid128_ü—‹ (& svc , be128 ); 360 »cÜd = `£rv”_»cÜd_Ãw (& svc , hªdË , ’d ); 361 ià( »cÜd =ð NULL ) 364 ià( Çme !ð NULL ) 365 `sdp_£t_šfo_©Œ ( »cÜd , Çme , "BlueZ", NULL ); 367 `sdp_uuid16_ü—‹ (& g­_uuid , GENERIC_ACCESS_PROFILE_ID ); 368 ià( `sdp_uuid_cmp (& svc , & g­_uuid ) == 0) { 369 `sdp_£t_u¾_©Œ ( »cÜd , "http://www.bluez.org/", 374 ià( `ad­‹r_£rviû_add ( £rv” -> ad­‹r , »cÜd ) == 0) 375  »cÜd -> hªdË ; 377 `sdp_»cÜd_ä“ ( »cÜd ); 379 } } 381  ©Œibu‹ * $©Œib_db_add_Ãw ( g©t_£rv” * £rv” , 382 ušt16_t hªdË , bt_uuid_t * uuid , 383  »ad_»q ,  wr™e_»q , 384 cÚ¡ ušt8_t * v®ue , size_t Ën ) 386  ©Œibu‹ * a ; 387 gušt h = hªdË ; 389 `DBG ("hªdË=0x%04x", hªdË ); 391 ià( `g_li¡_fšd_cu¡om ( £rv” -> d©aba£ , `GUINT_TO_POINTER ( h ), 392 hªdË_cmp )) 393  NULL ; 395 a = `g_Ãw0 ( ©Œibu‹ , 1); 396 a -> Ën =†en; 397 a -> d©a = `g_memdup ( v®ue , Ën ); 398 a -> hªdË = handle; 399 a -> uuid = *uuid; 400 a -> »ad_»q =„ead_req; 401 a -> wr™e_»q = write_req; 403 £rv” -> d©aba£ = `g_li¡_š£¹_sÜ‹d (£rv”->d©aba£, a , 404 ©Œibu‹_cmp ); 406  a ; 407 } } 409  boÞ $g_©Œib_is_’üy±ed ( GA‰rib * ©Œib ) 411 BtIOSecLev– £c_Ëv– ; 412 GIOChªÃl * io = `g_©Œib_g‘_chªÃl ( ©Œib ); 414 ià(! `bt_io_g‘ ( io , NULL , BT_IO_OPT_SEC_LEVEL , & £c_Ëv– , 415 BT_IO_OPT_INVALID )) 416  FALSE ; 418  £c_Ëv– > BT_IO_SEC_LOW ; 419 } } 421  ušt8_t $©t_check_»qs ( g©t_chªÃl * chªÃl , ušt8_t Ýcode , 422  »qs ) 428 ià(! chªÃl -> ’üy±ed ) 429 chªÃl -> ’üy±ed = `g_©Œib_is_’üy±ed (chªÃl-> ©Œib ); 430 ià( »qs =ð ATT_AUTHENTICATION && ! chªÃl -> ’üy±ed ) 431  ATT_ECODE_AUTHENTICATION ; 432 ià( »qs =ð ATT_AUTHORIZATION ) 433  ATT_ECODE_AUTHORIZATION ; 435  Ýcode ) { 436  ATT_OP_READ_BY_GROUP_REQ : 437  ATT_OP_READ_BY_TYPE_REQ : 438  ATT_OP_READ_REQ : 439  ATT_OP_READ_BLOB_REQ : 440  ATT_OP_READ_MULTI_REQ : 441 ià( »qs =ð ATT_NOT_PERMITTED ) 442  ATT_ECODE_READ_NOT_PERM ; 444  ATT_OP_PREP_WRITE_REQ : 445  ATT_OP_WRITE_REQ : 446  ATT_OP_WRITE_CMD : 447 ià( »qs =ð ATT_NOT_PERMITTED ) 448  ATT_ECODE_WRITE_NOT_PERM ; 453 } } 455  ušt16_t $»ad_by_group ( g©t_chªÃl * chªÃl , ušt16_t ¡¬t , 456 ušt16_t ’d , bt_uuid_t * uuid , 457 ušt8_t * pdu , size_t Ën ) 459  ©t_d©a_li¡ * adl ; 460  ©Œibu‹ * a ; 461  group_–em * cur , * Þd = NULL ; 462 GSLi¡ * l , * groups ; 463 GLi¡ * dl , * d©aba£ ; 464 ušt16_t Ëngth , Ï¡_hªdË , Ï¡_size = 0; 465 ušt8_t ¡©us ; 466  i ; 468 ià( ¡¬t > ’d || start == 0x0000) 469  `’c_”rÜ_»¥ ( ATT_OP_READ_BY_GROUP_REQ , ¡¬t , 470 ATT_ECODE_INVALID_HANDLE , pdu , Ën ); 477 ià( `bt_uuid_cmp ( uuid , & ´im_uuid ) != 0 && 478 `bt_uuid_cmp ( uuid , & ¢d_uuid ) != 0) 479  `’c_”rÜ_»¥ ( ATT_OP_READ_BY_GROUP_REQ , 0x0000, 480 ATT_ECODE_UNSUPP_GRP_TYPE , pdu , Ën ); 482 Ï¡_hªdË = ’d ; 483 d©aba£ = chªÃl -> £rv” ->database; 484  dl = d©aba£ , groups = NULL , cur = NULL; dl; dÈðdl-> Ãxt ) { 486 a = dl -> d©a ; 488 ià( a -> hªdË < ¡¬t ) 491 ià( a -> hªdË >ð ’d ) 495 ià( Þd && ( `bt_uuid_cmp (& a -> uuid , & ´im_uuid ) == 0 || 496 `bt_uuid_cmp (& a -> uuid , & ¢d_uuid ) == 0)) { 497 Þd -> ’d = Ï¡_hªdË ; 498 Þd = NULL ; 501 ià( `bt_uuid_cmp (& a -> uuid , uuid) != 0) { 503 ià( Þd ) 504 Ï¡_hªdË = a -> hªdË ; 508 ià( Ï¡_size && (Ï¡_siz!ð a -> Ën )) 511 ¡©us = `©t_check_»qs ( chªÃl , ATT_OP_READ_BY_GROUP_REQ , 512 a -> »ad_»q ); 514 ià( ¡©us =ð0x00 && a -> »ad_cb ) 515 ¡©us = a -> `»ad_cb ×, chªÃl -> deviû , 516 a -> cb_u£r_d©a ); 518 ià( ¡©us ) { 519 `g_¦i¡_ä“_fuÎ ( groups , g_ä“ ); 520  `’c_”rÜ_»¥ ( ATT_OP_READ_BY_GROUP_REQ , 521 a -> hªdË , ¡©us , pdu , Ën ); 524 cur = `g_Ãw0 ( group_–em , 1); 525 cur -> hªdË = a ->handle; 526 cur -> d©a = a ->data; 527 cur -> Ën = a ->len; 530 groups = `g_¦i¡_­³nd (groups, cur ); 532 Ï¡_size = a -> Ën ; 533 Þd = cur ; 534 Ï¡_hªdË = cur -> hªdË ; 537 ià( groups =ð NULL ) 538  `’c_”rÜ_»¥ ( ATT_OP_READ_BY_GROUP_REQ , ¡¬t , 539 ATT_ECODE_ATTR_NOT_FOUND , pdu , Ën ); 541 ià( dl =ð NULL ) 542 cur -> ’d = a -> hªdË ; 543 #ifdeà __TIZEN_PATCH__ 544 ià( a -> hªdË =ð ’d &&ƒnd == 0xffff) 545 cur -> ’d = a -> hªdË ; 548 cur -> ’d = Ï¡_hªdË ; 550 Ëngth = `g_¦i¡_Ëngth ( groups ); 552 adl = `©t_d©a_li¡_®loc ( Ëngth , Ï¡_size + 4); 553 ià( adl =ð NULL ) { 554 `g_¦i¡_ä“_fuÎ ( groups , g_ä“ ); 555  `’c_”rÜ_»¥ ( ATT_OP_READ_BY_GROUP_REQ , ¡¬t , 556 ATT_ECODE_UNLIKELY , pdu , Ën ); 559  i = 0, l = groups ;†;† =†-> Ãxt , i++) { 560 ušt8_t * v®ue ; 562 cur = l -> d©a ; 564 v®ue = (*è adl -> d©a [ i ]; 566 `put_Ë16 ( cur -> hªdË , v®ue ); 567 `put_Ë16 ( cur -> ’d , & v®ue [2]); 569 `memýy (& v®ue [4], cur -> d©a , cur-> Ën ); 572 Ëngth = `’c_»ad_by_g½_»¥ ( adl , pdu , Ën ); 574 `©t_d©a_li¡_ä“ ( adl ); 575 `g_¦i¡_ä“_fuÎ ( groups , g_ä“ ); 577  Ëngth ; 578 } } 580  ušt16_t $»ad_by_ty³ ( g©t_chªÃl * chªÃl , ušt16_t ¡¬t , 581 ušt16_t ’d , bt_uuid_t * uuid , 582 ušt8_t * pdu , size_t Ën ) 584  ©t_d©a_li¡ * adl ; 585 GSLi¡ * l , * ty³s ; 586 GLi¡ * dl , * d©aba£ ; 587  ©Œibu‹ * a ; 588 ušt16_t num , Ëngth ; 589 ušt8_t ¡©us ; 590  i ; 592 ià( ¡¬t > ’d || start == 0x0000) 593  `’c_”rÜ_»¥ ( ATT_OP_READ_BY_TYPE_REQ , ¡¬t , 594 ATT_ECODE_INVALID_HANDLE , pdu , Ën ); 596 d©aba£ = chªÃl -> £rv” ->database; 597  dl = d©aba£ , Ëngth = 0, ty³s = NULL ; dl; dÈðdl-> Ãxt ) { 599 a = dl -> d©a ; 601 ià( a -> hªdË < ¡¬t ) 604 ià( a -> hªdË > ’d ) 607 ià( `bt_uuid_cmp (& a -> uuid , uuid) != 0) 610 ¡©us = `©t_check_»qs ( chªÃl , ATT_OP_READ_BY_TYPE_REQ , 611 a -> »ad_»q ); 613 ià( ¡©us =ð0x00 && a -> »ad_cb ) 614 ¡©us = a -> `»ad_cb ×, chªÃl -> deviû , 615 a -> cb_u£r_d©a ); 617 ià( ¡©us ) { 618 `g_¦i¡_ä“ ( ty³s ); 619  `’c_”rÜ_»¥ ( ATT_OP_READ_BY_TYPE_REQ , 620 a -> hªdË , ¡©us , pdu , Ën ); 624 ià( Ëngth == 0) 625 Ëngth = a -> Ën ; 626 ià( a -> Ën !ð Ëngth ) 629 ty³s = `g_¦i¡_­³nd Ñy³s, a ); 632 ià( ty³s =ð NULL ) 633  `’c_”rÜ_»¥ ( ATT_OP_READ_BY_TYPE_REQ , ¡¬t , 634 ATT_ECODE_ATTR_NOT_FOUND , pdu , Ën ); 636 num = `g_¦i¡_Ëngth ( ty³s ); 639 Ëngth += 2; 641 adl = `©t_d©a_li¡_®loc ( num , Ëngth ); 642 ià( adl =ð NULL ) { 643 `g_¦i¡_ä“ ( ty³s ); 644  `’c_”rÜ_»¥ ( ATT_OP_READ_BY_TYPE_REQ , ¡¬t , 645 ATT_ECODE_UNLIKELY , pdu , Ën ); 648  i = 0, l = ty³s ;†; i++,† =†-> Ãxt ) { 649 ušt8_t * v®ue ; 651 a = l -> d©a ; 653 v®ue = (*è adl -> d©a [ i ]; 655 `put_Ë16 ( a -> hªdË , v®ue ); 658 `memýy (& v®ue [2], a -> d©a ,‡-> Ën ); 661 Ëngth = `’c_»ad_by_ty³_»¥ ( adl , pdu , Ën ); 663 `©t_d©a_li¡_ä“ ( adl ); 664 `g_¦i¡_ä“ ( ty³s ); 666  Ëngth ; 667 } } 669  ušt16_t $fšd_šfo ( g©t_chªÃl * chªÃl , ušt16_t ¡¬t , 670 ušt16_t ’d , ušt8_t * pdu , size_t Ën ) 672  ©Œibu‹ * a ; 673  ©t_d©a_li¡ * adl ; 674 GSLi¡ * l , * šfo ; 675 GLi¡ * dl , * d©aba£ ; 676 ušt8_t fÜm© , Ï¡_ty³ = BT_UUID_UNSPEC ; 677 ušt16_t Ëngth , num ; 678  i ; 680 ià( ¡¬t > ’d || start == 0x0000) 681  `’c_”rÜ_»¥ ( ATT_OP_FIND_INFO_REQ , ¡¬t , 682 ATT_ECODE_INVALID_HANDLE , pdu , Ën ); 684 d©aba£ = chªÃl -> £rv” ->database; 685  dl = d©aba£ , šfo = NULL , num = 0; dl; dÈðdl-> Ãxt ) { 686 a = dl -> d©a ; 688 ià( a -> hªdË < ¡¬t ) 691 ià( a -> hªdË > ’d ) 694 ià( Ï¡_ty³ =ð BT_UUID_UNSPEC ) 695 Ï¡_ty³ = a -> uuid . ty³ ; 697 ià( a -> uuid . ty³ !ð Ï¡_ty³ ) 700 šfo = `g_¦i¡_­³nd (šfo, a ); 701 num ++; 703 Ï¡_ty³ = a -> uuid . ty³ ; 706 ià( šfo =ð NULL ) 707  `’c_”rÜ_»¥ ( ATT_OP_FIND_INFO_REQ , ¡¬t , 708 ATT_ECODE_ATTR_NOT_FOUND , pdu , Ën ); 710 ià( Ï¡_ty³ =ð BT_UUID16 ) { 711 Ëngth = 2; 712 fÜm© = 0x01; 713 } ià( Ï¡_ty³ =ð BT_UUID128 ) { 714 Ëngth = 16; 715 fÜm© = 0x02; 717 `g_¦i¡_ä“ ( šfo ); 721 adl = `©t_d©a_li¡_®loc ( num , Ëngth + 2); 722 ià( adl =ð NULL ) { 723 `g_¦i¡_ä“ ( šfo ); 724  `’c_”rÜ_»¥ ( ATT_OP_FIND_INFO_REQ , ¡¬t , 725 ATT_ECODE_UNLIKELY , pdu , Ën ); 728  i = 0, l = šfo ;†; i++,† =†-> Ãxt ) { 729 ušt8_t * v®ue ; 731 a = l -> d©a ; 733 v®ue = (*è adl -> d©a [ i ]; 735 `put_Ë16 ( a -> hªdË , v®ue ); 738 `put_uuid_Ë (& a -> uuid , & v®ue [2]); 741 Ëngth = `’c_fšd_šfo_»¥ ( fÜm© , adl , pdu , Ën ); 743 `©t_d©a_li¡_ä“ ( adl ); 744 `g_¦i¡_ä“ ( šfo ); 746  Ëngth ; 747 } } 749  ušt16_t $fšd_by_ty³ ( g©t_chªÃl * chªÃl , ušt16_t ¡¬t , 750 ušt16_t ’d , bt_uuid_t * uuid , 751 cÚ¡ ušt8_t * v®ue , size_t vËn , 752 ušt8_t * Ýdu , size_t mtu ) 754  ©Œibu‹ * a ; 755  ©t_¿nge * ¿nge ; 756 GSLi¡ * m©ches ; 757 GLi¡ * dl , * d©aba£ ; 758 ušt16_t Ën ; 760 ià( ¡¬t > ’d || start == 0x0000) 761  `’c_”rÜ_»¥ ( ATT_OP_FIND_BY_TYPE_REQ , ¡¬t , 762 ATT_ECODE_INVALID_HANDLE , Ýdu , mtu ); 765 d©aba£ = chªÃl -> £rv” ->database; 766  dl = d©aba£ , m©ches = NULL , ¿nge = NULL; dl; dÈðdl-> Ãxt ) { 767 a = dl -> d©a ; 769 ià( a -> hªdË < ¡¬t ) 772 ià( a -> hªdË > ’d ) 776 ià(( `bt_uuid_cmp (& a -> uuid , uuidè=ð0è&& (a-> Ën =ð vËn ) && 777 ( `memcmp ( a -> d©a , v®ue , vËn ) == 0)) { 779 ¿nge = `g_Ãw0 ( ©t_¿nge , 1); 780 ¿nge -> ¡¬t = a -> hªdË ; 783 ¿nge -> ’d = a -> hªdË ; 785 m©ches = `g_¦i¡_­³nd (m©ches, ¿nge ); 786 } ià( ¿nge ) { 790 ià( `bt_uuid_cmp (& a -> uuid , & ´im_uuid ) == 0 || 791 `bt_uuid_cmp (& a -> uuid , & ¢d_uuid ) == 0) 792 ¿nge = NULL ; 795 ¿nge -> ’d = a -> hªdË ; 799 ià( m©ches =ð NULL ) 800  `’c_”rÜ_»¥ ( ATT_OP_FIND_BY_TYPE_REQ , ¡¬t , 801 ATT_ECODE_ATTR_NOT_FOUND , Ýdu , mtu ); 803 Ën = `’c_fšd_by_ty³_»¥ ( m©ches , Ýdu , mtu ); 805 `g_¦i¡_ä“_fuÎ ( m©ches , g_ä“ ); 807  Ën ; 808 } } 810  $»ad_deviû_ccc ( btd_deviû * deviû , ušt16_t hªdË , 811 ušt16_t * v®ue ) 813 * fž’ame ; 814 GKeyFže * key_fže ; 815  group [6]; 816 * ¡r ; 817  cÚfig ; 818  ”r = 0; 820 fž’ame = `btd_deviû_g‘_¡Üage_·th ( deviû , "ccc"); 821 ià(! fž’ame ) { 822 `w¬n ("Unableo get ccc storage…ath for device"); 823  - ENOENT ; 826 key_fže = `g_key_fže_Ãw (); 827 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 829 `¥rštf ( group , "%hu", hªdË ); 831 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , group , "V®ue", NULL ); 832 ià(! ¡r || `ssÿnf (¡r, "%04X", & cÚfig ) != 1) 833 ”r = - ENOENT ; 835 * v®ue = cÚfig ; 837 `g_ä“ ( ¡r ); 838 `g_ä“ ( fž’ame ); 839 `g_key_fže_ä“ ( key_fže ); 841  ”r ; 842 } } 844  ušt16_t $»ad_v®ue ( g©t_chªÃl * chªÃl , ušt16_t hªdË , 845 ušt8_t * pdu , size_t Ën ) 847  ©Œibu‹ * a ; 848 ušt8_t ¡©us ; 849 GLi¡ * l ; 850 ušt16_t cccv® ; 851 gušt h = hªdË ; 853 l = `g_li¡_fšd_cu¡om ( chªÃl -> £rv” -> d©aba£ , 854 `GUINT_TO_POINTER ( h ), hªdË_cmp ); 855 ià(! l ) 856  `’c_”rÜ_»¥ ( ATT_OP_READ_REQ , hªdË , 857 ATT_ECODE_INVALID_HANDLE , pdu , Ën ); 859 a = l -> d©a ; 861 ià( `bt_uuid_cmp (& ccc_uuid , & a -> uuid ) == 0 && 862 `»ad_deviû_ccc ( chªÃl -> deviû , hªdË , & cccv® ) == 0) { 863 ušt8_t cÚfig [2]; 865 `put_Ë16 ( cccv® , cÚfig ); 866  `’c_»ad_»¥ ( cÚfig , (cÚfig), pdu , Ën ); 869 ¡©us = `©t_check_»qs ( chªÃl , ATT_OP_READ_REQ , a -> »ad_»q ); 871 ià( ¡©us =ð0x00 && a -> »ad_cb ) 872 ¡©us = a -> `»ad_cb ×, chªÃl -> deviû ,‡-> cb_u£r_d©a ); 874 ià( ¡©us ) 875  `’c_”rÜ_»¥ ( ATT_OP_READ_REQ , hªdË , ¡©us , pdu , 876 Ën ); 878  `’c_»ad_»¥ ( a -> d©a ,‡-> Ën , pdu ,†en); 879 } } 881  ušt16_t $»ad_blob ( g©t_chªÃl * chªÃl , ušt16_t hªdË , 882 ušt16_t off£t , ušt8_t * pdu , size_t Ën ) 884  ©Œibu‹ * a ; 885 ušt8_t ¡©us ; 886 GLi¡ * l ; 887 ušt16_t cccv® ; 888 gušt h = hªdË ; 890 l = `g_li¡_fšd_cu¡om ( chªÃl -> £rv” -> d©aba£ , 891 `GUINT_TO_POINTER ( h ), hªdË_cmp ); 892 ià(! l ) 893  `’c_”rÜ_»¥ ( ATT_OP_READ_BLOB_REQ , hªdË , 894 ATT_ECODE_INVALID_HANDLE , pdu , Ën ); 896 a = l -> d©a ; 898 ià( a -> Ën <ð off£t ) 899  `’c_”rÜ_»¥ ( ATT_OP_READ_BLOB_REQ , hªdË , 900 ATT_ECODE_INVALID_OFFSET , pdu , Ën ); 902 ià( `bt_uuid_cmp (& ccc_uuid , & a -> uuid ) == 0 && 903 `»ad_deviû_ccc ( chªÃl -> deviû , hªdË , & cccv® ) == 0) { 904 ušt8_t cÚfig [2]; 906 `put_Ë16 ( cccv® , cÚfig ); 907  `’c_»ad_blob_»¥ ( cÚfig , (cÚfig), off£t , 908 pdu , Ën ); 911 ¡©us = `©t_check_»qs ( chªÃl , ATT_OP_READ_BLOB_REQ , a -> »ad_»q ); 913 ià( ¡©us =ð0x00 && a -> »ad_cb ) 914 ¡©us = a -> `»ad_cb ×, chªÃl -> deviû ,‡-> cb_u£r_d©a ); 916 ià( ¡©us ) 917  `’c_”rÜ_»¥ ( ATT_OP_READ_BLOB_REQ , hªdË , ¡©us , 918 pdu , Ën ); 920  `’c_»ad_blob_»¥ ( a -> d©a ,‡-> Ën , off£t , pdu ,†en); 921 } } 923  ušt16_t $wr™e_v®ue ( g©t_chªÃl * chªÃl , ušt16_t hªdË , 924 cÚ¡ ušt8_t * v®ue , size_t vËn , 925 ušt8_t * pdu , size_t Ën ) 927  ©Œibu‹ * a ; 928 ušt8_t ¡©us ; 929 GLi¡ * l ; 930 gušt h = hªdË ; 932 l = `g_li¡_fšd_cu¡om ( chªÃl -> £rv” -> d©aba£ , 933 `GUINT_TO_POINTER ( h ), hªdË_cmp ); 934 ià(! l ) 935  `’c_”rÜ_»¥ ( ATT_OP_WRITE_REQ , hªdË , 936 ATT_ECODE_INVALID_HANDLE , pdu , Ën ); 938 a = l -> d©a ; 940 ¡©us = `©t_check_»qs ( chªÃl , ATT_OP_WRITE_REQ , a -> wr™e_»q ); 941 ià( ¡©us ) 942  `’c_”rÜ_»¥ ( ATT_OP_WRITE_REQ , hªdË , ¡©us , pdu , 943 Ën ); 945 ià( `bt_uuid_cmp (& ccc_uuid , & a -> uuid ) != 0) { 947 `©Œib_db_upd©e ( chªÃl -> £rv” -> ad­‹r , hªdË , NULL , 948 v®ue , vËn , NULL ); 950 ià( a -> wr™e_cb ) { 951 ¡©us = a -> `wr™e_cb ×, chªÃl -> deviû , 952 a -> cb_u£r_d©a ); 953 ià( ¡©us ) 954  `’c_”rÜ_»¥ ( ATT_OP_WRITE_REQ , hªdË , 955 ¡©us , pdu , Ën ); 958 ušt16_t cccv® = `g‘_Ë16 ( v®ue ); 959 * fž’ame ; 960 GKeyFže * key_fže ; 961  group [6], v®ue [5]; 962 * d©a ; 963 gsize Ëngth = 0; 965 fž’ame = `btd_deviû_g‘_¡Üage_·th ( chªÃl -> deviû , "ccc"); 966 ià(! fž’ame ) { 967 `w¬n ("Unableo get ccc storage…ath for device"); 968  `’c_”rÜ_»¥ ( ATT_OP_WRITE_REQ , hªdË , 969 ATT_ECODE_WRITE_NOT_PERM , 970 pdu , Ën ); 973 key_fže = `g_key_fže_Ãw (); 974 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 976 `¥rštf ( group , "%hu", hªdË ); 977 `¥rštf ( v®ue , "%hX", cccv® ); 978 `g_key_fže_£t_¡ršg ( key_fže , group , "V®ue", v®ue ); 980 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 981 ià( Ëngth > 0) { 982 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 983 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 986 #ifdeà __TIZEN_PATCH__ 987 `g_ä“ ( fž’ame ); 988 fž’ame = `btd_deviû_g‘_¡Üage_·th ( chªÃl -> deviû , "ccc_sc"); 989 ià(! fž’ame ) { 990 `w¬n ("Unableo get ccc storage…ath for device"); 991  `’c_”rÜ_»¥ ( ATT_OP_WRITE_REQ , hªdË , 992 ATT_ECODE_WRITE_NOT_PERM , 993 pdu , Ën ); 996 `g_key_fže_ä“ ( key_fže ); 997 key_fže = `g_key_fže_Ãw (); 998 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 1000 `mem£t (& group , 0x00, 6); 1001 `mem£t (& v®ue , 0x00, 5); 1002 `¥rštf ( group , "%hu", hªdË ); 1003 `¥rštf ( v®ue , "%hX", cccv® ); 1004 `g_key_fže_£t_¡ršg ( key_fže , group , "V®ue", v®ue ); 1006 `g_ä“ ( d©a ); 1007 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 1008 ià( Ëngth > 0) { 1009 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 1010 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 1014 `g_ä“ ( d©a ); 1015 `g_ä“ ( fž’ame ); 1016 `g_key_fže_ä“ ( key_fže ); 1019  `’c_wr™e_»¥ ( pdu ); 1020 } } 1022  ušt16_t $mtu_exchªge ( g©t_chªÃl * chªÃl , ušt16_t mtu , 1023 ušt8_t * pdu , size_t Ën ) 1025 GE¼Ü * g”r = NULL ; 1026 GIOChªÃl * io ; 1027 ušt16_t imtu ; 1029 ià( mtu < ATT_DEFAULT_LE_MTU ) 1030  `’c_”rÜ_»¥ ( ATT_OP_MTU_REQ , 0, 1031 ATT_ECODE_REQ_NOT_SUPP , pdu , Ën ); 1033 io = `g_©Œib_g‘_chªÃl ( chªÃl -> ©Œib ); 1035 `bt_io_g‘ ( io , & g”r , BT_IO_OPT_IMTU , & imtu , BT_IO_OPT_INVALID ); 1036 ià( g”r ) { 1037 `”rÜ ("bt_io_g‘: %s", g”r -> mes§ge ); 1038 `g_”rÜ_ä“ ( g”r ); 1039  `’c_”rÜ_»¥ ( ATT_OP_MTU_REQ , 0, ATT_ECODE_UNLIKELY , 1040 pdu , Ën ); 1043 chªÃl -> mtu = `MIN (mtu, imtu ); 1044 `g_©Œib_£t_mtu ( chªÃl -> ©Œib , chªÃl-> mtu ); 1046  `’c_mtu_»¥ ( imtu , pdu , Ën ); 1047 } } 1049  $chªÃl_»move ( g©t_chªÃl * chªÃl ) 1051 chªÃl -> £rv” -> þ›Ás = `g_¦i¡_»move (channel->server->clients, 1052 chªÃl ); 1053 #ifdeà __TIZEN_PATCH__ 1054 ià( chªÃl -> £rv” -> þ›Ás =ð NULL ) { 1055 `deviû_£t_g©t_cÚÃùed ( chªÃl -> deviû , FALSE ); 1058 `chªÃl_ä“ ( chªÃl ); 1059 } } 1061  gboÞ—n $chªÃl_w©ch_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 1062 gpoš‹r u£r_d©a ) 1064 `chªÃl_»move ( u£r_d©a ); 1066  FALSE ; 1067 } } 1069  $chªÃl_hªdËr (cÚ¡ ušt8_t * du , ušt16_t Ën , 1070 gpoš‹r u£r_d©a ) 1072  g©t_chªÃl * chªÃl = u£r_d©a ; 1073 ušt8_t Ýdu [ chªÃl -> mtu ]; 1074 ušt16_t Ëngth , ¡¬t , ’d , mtu , off£t ; 1075 bt_uuid_t uuid ; 1076 ušt8_t ¡©us = 0; 1077 size_t vËn ; 1078 ušt8_t * v®ue = `g_©Œib_g‘_bufãr ( chªÃl -> ©Œib , & vËn ); 1080 `DBG ("Ý 0x%02x", du [0]); 1082 ià( Ën > vËn ) { 1083 `”rÜ ("Too much data on ATT socket"); 1084 ¡©us = ATT_ECODE_INVALID_PDU ; 1085  dÚe ; 1088  du [0]) { 1089  ATT_OP_READ_BY_GROUP_REQ : 1090 Ëngth = `dec_»ad_by_g½_»q ( du , Ën , & ¡¬t , & ’d , & uuid ); 1091 ià( Ëngth == 0) { 1092 ¡©us = ATT_ECODE_INVALID_PDU ; 1093  dÚe ; 1096 Ëngth = `»ad_by_group ( chªÃl , ¡¬t , ’d , & uuid , Ýdu , 1097 chªÃl -> mtu ); 1099  ATT_OP_READ_BY_TYPE_REQ : 1100 Ëngth = `dec_»ad_by_ty³_»q ( du , Ën , & ¡¬t , & ’d , & uuid ); 1101 ià( Ëngth == 0) { 1102 ¡©us = ATT_ECODE_INVALID_PDU ; 1103  dÚe ; 1106 Ëngth = `»ad_by_ty³ ( chªÃl , ¡¬t , ’d , & uuid , Ýdu , 1107 chªÃl -> mtu ); 1109  ATT_OP_READ_REQ : 1110 Ëngth = `dec_»ad_»q ( du , Ën , & ¡¬t ); 1111 ià( Ëngth == 0) { 1112 ¡©us = ATT_ECODE_INVALID_PDU ; 1113  dÚe ; 1116 Ëngth = `»ad_v®ue ( chªÃl , ¡¬t , Ýdu , chªÃl-> mtu ); 1118  ATT_OP_READ_BLOB_REQ : 1119 Ëngth = `dec_»ad_blob_»q ( du , Ën , & ¡¬t , & off£t ); 1120 ià( Ëngth == 0) { 1121 ¡©us = ATT_ECODE_INVALID_PDU ; 1122  dÚe ; 1125 Ëngth = `»ad_blob ( chªÃl , ¡¬t , off£t , Ýdu , chªÃl-> mtu ); 1127  ATT_OP_MTU_REQ : 1128 ià(! chªÃl -> Ë ) { 1129 ¡©us = ATT_ECODE_REQ_NOT_SUPP ; 1130  dÚe ; 1133 Ëngth = `dec_mtu_»q ( du , Ën , & mtu ); 1134 ià( Ëngth == 0) { 1135 ¡©us = ATT_ECODE_INVALID_PDU ; 1136  dÚe ; 1139 Ëngth = `mtu_exchªge ( chªÃl , mtu , Ýdu , channel->mtu); 1141  ATT_OP_FIND_INFO_REQ : 1142 Ëngth = `dec_fšd_šfo_»q ( du , Ën , & ¡¬t , & ’d ); 1143 ià( Ëngth == 0) { 1144 ¡©us = ATT_ECODE_INVALID_PDU ; 1145  dÚe ; 1148 Ëngth = `fšd_šfo ( chªÃl , ¡¬t , ’d , Ýdu , chªÃl-> mtu ); 1149 #ifdeà __TIZEN_PATCH__ 1150 ià( Ëngth =ð0 && ¡¬t =ð ’d ) { 1151 ¡©us = ATT_ECODE_ATTR_NOT_FOUND ; 1152  dÚe ; 1156  ATT_OP_WRITE_REQ : 1157 Ëngth = `dec_wr™e_»q ( du , Ën , & ¡¬t , v®ue , & vËn ); 1158 ià( Ëngth == 0) { 1159 ¡©us = ATT_ECODE_INVALID_PDU ; 1160  dÚe ; 1163 Ëngth = `wr™e_v®ue ( chªÃl , ¡¬t , v®ue , vËn , Ýdu , 1164 chªÃl -> mtu ); 1166  ATT_OP_WRITE_CMD : 1167 Ëngth = `dec_wr™e_cmd ( du , Ën , & ¡¬t , v®ue , & vËn ); 1168 ià( Ëngth > 0) 1169 `wr™e_v®ue ( chªÃl , ¡¬t , v®ue , vËn , Ýdu , 1170 chªÃl -> mtu ); 1172  ATT_OP_FIND_BY_TYPE_REQ : 1173 Ëngth = `dec_fšd_by_ty³_»q ( du , Ën , & ¡¬t , & ’d , 1174 & uuid , v®ue , & vËn ); 1175 ià( Ëngth == 0) { 1176 ¡©us = ATT_ECODE_INVALID_PDU ; 1177  dÚe ; 1180 Ëngth = `fšd_by_ty³ ( chªÃl , ¡¬t , ’d , & uuid , v®ue , vËn , 1181 Ýdu , chªÃl -> mtu ); 1183  ATT_OP_HANDLE_CNF : 1185  ATT_OP_HANDLE_IND : 1186  ATT_OP_HANDLE_NOTIFY : 1189  ATT_OP_READ_MULTI_REQ : 1190  ATT_OP_PREP_WRITE_REQ : 1191  ATT_OP_EXEC_WRITE_REQ : 1193 `DBG ("UnsuµÜ‹d„eque¡ 0x%02x", du [0]); 1194 ¡©us = ATT_ECODE_REQ_NOT_SUPP ; 1195  dÚe ; 1198 ià( Ëngth == 0) 1199 ¡©us = ATT_ECODE_IO ; 1201 dÚe : 1202 ià( ¡©us ) 1203 Ëngth = `’c_”rÜ_»¥ ( du [0], 0x0000, ¡©us , Ýdu , 1204 chªÃl -> mtu ); 1206 `g_©Œib_£nd ( chªÃl -> ©Œib , 0, Ýdu , Ëngth , NULL , NULL, NULL); 1207 } } 1209 GA‰rib * $©Œib_äom_deviû ( btd_deviû * deviû ) 1211  btd_ad­‹r * ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 1212  g©t_£rv” * £rv” ; 1213 GSLi¡ * l ; 1215 l = `g_¦i¡_fšd_cu¡om ( £rv”s , ad­‹r , ad­‹r_cmp ); 1216 ià(! l ) 1217  NULL ; 1219 £rv” = l -> d©a ; 1221  l = £rv” -> þ›Ás ;†;† =†-> Ãxt ) { 1222  g©t_chªÃl * chªÃl = l -> d©a ; 1224 ià( chªÃl -> deviû == device) 1225  `g_©Œib_»f ( chªÃl -> ©Œib ); 1228  NULL ; 1229 } } 1231 gušt $©Œib_chªÃl_©ch ( GA‰rib * ©Œib ) 1233  g©t_£rv” * £rv” ; 1234  btd_deviû * deviû ; 1235  g©t_chªÃl * chªÃl ; 1236 bdaddr_t ¤c , d¡ ; 1237 GIOChªÃl * io ; 1238 GE¼Ü * g”r = NULL ; 1239 ušt8_t bdaddr_ty³ ; 1240 ušt16_t cid ; 1241 gušt mtu = 0; 1243 io = `g_©Œib_g‘_chªÃl ( ©Œib ); 1245 `bt_io_g‘ ( io , & g”r , 1246 BT_IO_OPT_SOURCE_BDADDR , & ¤c , 1247 BT_IO_OPT_DEST_BDADDR , & d¡ , 1248 BT_IO_OPT_DEST_TYPE , & bdaddr_ty³ , 1249 BT_IO_OPT_CID , & cid , 1250 BT_IO_OPT_IMTU , & mtu , 1251 BT_IO_OPT_INVALID ); 1252 ià( g”r ) { 1253 `”rÜ ("bt_io_g‘: %s", g”r -> mes§ge ); 1254 `g_”rÜ_ä“ ( g”r ); 1258 £rv” = `fšd_g©t_£rv” (& ¤c ); 1259 ià( £rv” =ð NULL ) 1262 chªÃl = `g_Ãw0 ( g©t_chªÃl , 1); 1263 chªÃl -> £rv” = server; 1265 deviû = `btd_ad­‹r_fšd_deviû ( £rv” -> ad­‹r , & d¡ , bdaddr_ty³ ); 1266 ià( deviû =ð NULL ) { 1267 `”rÜ ("Device object‚ot found for‡ttrib server"); 1268 `g_ä“ ( chªÃl ); 1272 #ifdeà __TIZEN_PATCH__ 1273 `deviû_£t_g©t_cÚÃùed ( deviû , TRUE ); 1276 ià(! `deviû_is_bÚded ( deviû , bdaddr_ty³ )) { 1277 * fž’ame ; 1279 fž’ame = `btd_deviû_g‘_¡Üage_·th ( deviû , "ccc"); 1280 ià( fž’ame ) { 1281 `uÆšk ( fž’ame ); 1282 `g_ä“ ( fž’ame ); 1286 ià( cid !ð ATT_CID ) { 1287 chªÃl -> Ë = FALSE ; 1288 chªÃl -> mtu = mtu; 1290 chªÃl -> Ë = TRUE ; 1291 chªÃl -> mtu = ATT_DEFAULT_LE_MTU ; 1294 chªÃl -> ©Œib = `g_©Œib_»f (attrib); 1295 chªÃl -> id = `g_©Œib_»gi¡” (chªÃl-> ©Œib , GATTRIB_ALL_REQS , 1296 GATTRIB_ALL_HANDLES , chªÃl_hªdËr , chªÃl , NULL ); 1298 chªÃl -> þ—nup_id = `g_io_add_w©ch ( io , G_IO_HUP , chªÃl_w©ch_cb , 1299 chªÃl ); 1300 #ifdeà __TIZEN_PATCH__ 1301 `deviû_£t_©Œib ( deviû , chªÃl -> id , chªÃl-> ©Œib ); 1303 chªÃl -> deviû = `btd_deviû_»f (device); 1305 £rv” -> þ›Ás = `g_¦i¡_­³nd (£rv”->þ›Ás, chªÃl ); 1307  chªÃl -> id ; 1308 } } 1310  $chªÃl_id_cmp ( gcÚ¡poš‹r d©a , gcÚ¡poš‹¸ u£r_d©a ) 1312 cÚ¡  g©t_chªÃl * chªÃl = d©a ; 1313 gušt id = `GPOINTER_TO_UINT ( u£r_d©a ); 1315  chªÃl -> id - id; 1316 } } 1318 gboÞ—n $©Œib_chªÃl_d‘ach ( GA‰rib * ©Œib , gušt id ) 1320  g©t_£rv” * £rv” ; 1321  g©t_chªÃl * chªÃl ; 1322 GE¼Ü * g”r = NULL ; 1323 GIOChªÃl * io ; 1324 bdaddr_t ¤c ; 1325 GSLi¡ * l ; 1327 io = `g_©Œib_g‘_chªÃl ( ©Œib ); 1329 `bt_io_g‘ ( io , & g”r , BT_IO_OPT_SOURCE_BDADDR , & ¤c , BT_IO_OPT_INVALID ); 1331 ià( g”r !ð NULL ) { 1332 `”rÜ ("bt_io_g‘: %s", g”r -> mes§ge ); 1333 `g_”rÜ_ä“ ( g”r ); 1334  FALSE ; 1337 £rv” = `fšd_g©t_£rv” (& ¤c ); 1338 ià( £rv” =ð NULL ) 1339  FALSE ; 1341 l = `g_¦i¡_fšd_cu¡om ( £rv” -> þ›Ás , `GUINT_TO_POINTER ( id ), 1342 chªÃl_id_cmp ); 1343 ià(! l ) 1344  FALSE ; 1346 chªÃl = l -> d©a ; 1348 `g_©Œib_uÄegi¡” ( chªÃl -> ©Œib , chªÃl-> id ); 1349 `chªÃl_»move ( chªÃl ); 1351  TRUE ; 1352 } } 1354  $cÚÃù_ev’t ( GIOChªÃl * io , GE¼Ü * g”r , * u£r_d©a ) 1356  btd_ad­‹r * ad­‹r ; 1357  btd_deviû * deviû ; 1358 ušt8_t d¡_ty³ ; 1359 bdaddr_t ¤c , d¡ ; 1361 `DBG (""); 1363 ià( g”r ) { 1364 `”rÜ ("%s", g”r -> mes§ge ); 1368 `bt_io_g‘ ( io , & g”r , 1369 BT_IO_OPT_SOURCE_BDADDR , & ¤c , 1370 BT_IO_OPT_DEST_BDADDR , & d¡ , 1371 BT_IO_OPT_DEST_TYPE , & d¡_ty³ , 1372 BT_IO_OPT_INVALID ); 1373 ià( g”r ) { 1374 `”rÜ ("bt_io_g‘: %s", g”r -> mes§ge ); 1375 `g_”rÜ_ä“ ( g”r ); 1379 ad­‹r = `ad­‹r_fšd (& ¤c ); 1380 ià(! ad­‹r ) 1383 deviû = `btd_ad­‹r_g‘_deviû ( ad­‹r , & d¡ , d¡_ty³ ); 1384 ià(! deviû ) 1387 `deviû_©ch_©t ( deviû , io ); 1388 } } 1390  gboÞ—n $»gi¡”_cÜe_£rviûs ( g©t_£rv” * £rv” ) 1392 ušt8_t ©v® [256]; 1393 bt_uuid_t uuid ; 1394 ušt16_t ­³¬ªû = 0x0000; 1395 #ifdeà __TIZEN_PATCH__ 1396 ušt16_t £rviû_chªged_hªdË ; 1400 `bt_uuid16_ü—‹ (& uuid , GATT_PRIM_SVC_UUID ); 1401 `put_Ë16 ( GENERIC_ACCESS_PROFILE_ID , & ©v® [0]); 1402 `©Œib_db_add_Ãw ( £rv” , 0x0001, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 1403 ©v® , 2); 1406 £rv” -> Çme_hªdË = 0x0006; 1407 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_UUID ); 1408 ©v® [0] = GATT_CHR_PROP_READ ; 1409 `put_Ë16 ( £rv” -> Çme_hªdË , & ©v® [1]); 1410 `put_Ë16 ( GATT_CHARAC_DEVICE_NAME , & ©v® [3]); 1411 `©Œib_db_add_Ãw ( £rv” , 0x0004, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 1412 ©v® , 5); 1415 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_DEVICE_NAME ); 1416 `©Œib_db_add_Ãw ( £rv” , s”v”-> Çme_hªdË , & uuid , ATT_NONE , 1417 ATT_NOT_PERMITTED , NULL , 0); 1420 £rv” -> ­³¬ªû_hªdË = 0x0008; 1421 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_UUID ); 1422 ©v® [0] = GATT_CHR_PROP_READ ; 1423 `put_Ë16 ( £rv” -> ­³¬ªû_hªdË , & ©v® [1]); 1424 `put_Ë16 ( GATT_CHARAC_APPEARANCE , & ©v® [3]); 1425 `©Œib_db_add_Ãw ( £rv” , 0x0007, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 1426 ©v® , 5); 1429 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_APPEARANCE ); 1430 `put_Ë16 ( ­³¬ªû , & ©v® [0]); 1431 `©Œib_db_add_Ãw ( £rv” , s”v”-> ­³¬ªû_hªdË , & uuid , ATT_NONE , 1432 ATT_NOT_PERMITTED , ©v® , 2); 1433 £rv” -> g­_sdp_hªdË = `©Œib_ü—‹_sdp_Ãw (server, 0x0001, 1435 ià( £rv” -> g­_sdp_hªdË == 0) { 1436 `”rÜ ("Failedo„egister GAP service„ecord"); 1437  FALSE ; 1441 `bt_uuid16_ü—‹ (& uuid , GATT_PRIM_SVC_UUID ); 1442 `put_Ë16 ( GENERIC_ATTRIB_PROFILE_ID , & ©v® [0]); 1443 `©Œib_db_add_Ãw ( £rv” , 0x0010, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 1444 ©v® , 2); 1446 #ifdeà __TIZEN_PATCH__ 1448 £rviû_chªged_hªdË = 0x0012; 1449 `bt_uuid16_ü—‹ (& uuid , GATT_CLIENT_CHARAC_CFG_UUID ); 1451 ©v® [0] = GATT_CHR_PROP_READ ; 1452 `put_Ë16 ( £rviû_chªged_hªdË , & ©v® [1]); 1453 `put_Ë16 ( GATT_CHARAC_SERVICE_CHANGED , & ©v® [3]); 1454 `put_Ë16 ( GATT_CLIENT_CHARAC_CFG_IND_BIT , ©v® ); 1455 `©Œib_db_add_Ãw ( £rv” , 0x0011, & uuid , ATT_NONE , ATT_NOT_PERMITTED , 1456 ©v® , 4); 1459 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_SERVICE_CHANGED ); 1460 `©Œib_db_add_Ãw ( £rv” , £rviû_chªged_hªdË , & uuid , ATT_NONE , 1461 ATT_NOT_PERMITTED , NULL , 0); 1464 £rv” -> g©t_sdp_hªdË = `©Œib_ü—‹_sdp_Ãw (server, 0x0010, 1466 ià( £rv” -> g©t_sdp_hªdË == 0) { 1467 `”rÜ ("Failedo„egister GATT service„ecord"); 1468  FALSE ; 1471  TRUE ; 1472 } } 1474  $btd_ad­‹r_g©t_£rv”_¡¬t ( btd_ad­‹r * ad­‹r ) 1476  g©t_£rv” * £rv” ; 1477 GE¼Ü * g”r = NULL ; 1478 cÚ¡ bdaddr_t * addr ; 1480 `DBG ("S¹ GATT s”v” iÀhci%d", `btd_ad­‹r_g‘_šdex ( ad­‹r )); 1482 £rv” = `g_Ãw0 ( g©t_£rv” , 1); 1483 £rv” -> ad­‹r = `btd_ad­‹r_»f (adapter); 1485 addr = `btd_ad­‹r_g‘_add»ss ( £rv” -> ad­‹r ); 1488 £rv” -> l2ÿp_io = `bt_io_li¡’ ( cÚÃù_ev’t , NULL , NULL, NULL, & g”r , 1489 BT_IO_OPT_SOURCE_BDADDR , addr , 1490 BT_IO_OPT_PSM , ATT_PSM , 1491 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 1492 BT_IO_OPT_INVALID ); 1494 ià( £rv” -> l2ÿp_io =ð NULL ) { 1495 `”rÜ ("%s", g”r -> mes§ge ); 1496 `g_”rÜ_ä“ ( g”r ); 1497 `g©t_£rv”_ä“ ( £rv” ); 1501 ià(! `»gi¡”_cÜe_£rviûs ( £rv” )) { 1502 `g©t_£rv”_ä“ ( £rv” ); 1507 £rv” -> Ë_io = `bt_io_li¡’ ( cÚÃù_ev’t , NULL , 1508 & £rv” -> Ë_io , NULL , & g”r , 1509 BT_IO_OPT_SOURCE_BDADDR , addr , 1510 BT_IO_OPT_SOURCE_TYPE , BDADDR_LE_PUBLIC , 1511 BT_IO_OPT_CID , ATT_CID , 1512 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 1513 BT_IO_OPT_INVALID ); 1515 ià( £rv” -> Ë_io =ð NULL ) { 1516 `”rÜ ("%s", g”r -> mes§ge ); 1517 `g_”rÜ_ä“ ( g”r ); 1521 £rv”s = `g_¦i¡_´•’d (£rv”s, £rv” ); 1523 } } 1525  $btd_ad­‹r_g©t_£rv”_¡Ý ( btd_ad­‹r * ad­‹r ) 1527  g©t_£rv” * £rv” ; 1528 GSLi¡ * l ; 1530 l = `g_¦i¡_fšd_cu¡om ( £rv”s , ad­‹r , ad­‹r_cmp ); 1531 ià( l =ð NULL ) 1534 `DBG ("StÝ GATT s”v” iÀhci%d", `btd_ad­‹r_g‘_šdex ( ad­‹r )); 1536 £rv” = l -> d©a ; 1537 £rv”s = `g_¦i¡_»move (£rv”s, £rv” ); 1538 `g©t_£rv”_ä“ ( £rv” ); 1539 } } 1541 ušt32_t $©Œib_ü—‹_sdp ( btd_ad­‹r * ad­‹r , ušt16_t hªdË , 1542 cÚ¡ * Çme ) 1544 GSLi¡ * l ; 1546 l = `g_¦i¡_fšd_cu¡om ( £rv”s , ad­‹r , ad­‹r_cmp ); 1547 ià( l =ð NULL ) 1550  `©Œib_ü—‹_sdp_Ãw ( l -> d©a , hªdË , Çme ); 1551 } } 1553  $©Œib_ä“_sdp ( btd_ad­‹r * ad­‹r , ušt32_t sdp_hªdË ) 1555 `ad­‹r_£rviû_»move ( ad­‹r , sdp_hªdË ); 1556 } } 1558  ušt16_t $fšd_uuid16_avaž ( btd_ad­‹r * ad­‹r , ušt16_t n™ems ) 1560  g©t_£rv” * £rv” ; 1561 ušt16_t hªdË ; 1562 GSLi¡ * l ; 1563 GLi¡ * dl ; 1565 l = `g_¦i¡_fšd_cu¡om ( £rv”s , ad­‹r , ad­‹r_cmp ); 1566 ià( l =ð NULL ) 1569 £rv” = l -> d©a ; 1570 ià( £rv” -> d©aba£ =ð NULL ) 1573  dl = £rv” -> d©aba£ , hªdË = 0x0001; dl; dÈðdl-> Ãxt ) { 1574  ©Œibu‹ * a = dl -> d©a ; 1576 ià(( `bt_uuid_cmp (& a -> uuid , & ´im_uuid ) == 0 || 1577 `bt_uuid_cmp (& a -> uuid , & ¢d_uuid ) == 0) && 1578 a -> hªdË - hªdË >ð n™ems ) 1580  hªdË ; 1582 ià( a -> Ën =ð16 && ( `bt_uuid_cmp (&a-> uuid , & ´im_uuid ) == 0 || 1583 `bt_uuid_cmp (& a -> uuid , & ¢d_uuid ) == 0)) { 1588 ià( a -> hªdË == 0xffff) 1591 hªdË = a ->handle + 1; 1594 ià(0xfffà- hªdË + 1 >ð n™ems ) 1595  hªdË ; 1598 } } 1600  ušt16_t $fšd_uuid128_avaž ( btd_ad­‹r * ad­‹r , ušt16_t n™ems ) 1602 ušt16_t hªdË = 0, ’d = 0xffff; 1603  g©t_£rv” * £rv” ; 1604 GLi¡ * dl ; 1605 GSLi¡ * l ; 1607 l = `g_¦i¡_fšd_cu¡om ( £rv”s , ad­‹r , ad­‹r_cmp ); 1608 ià( l =ð NULL ) 1611 £rv” = l -> d©a ; 1612 ià( £rv” -> d©aba£ =ð NULL ) 1613  0xfffà- n™ems + 1; 1615  dl = `g_li¡_Ï¡ ( £rv” -> d©aba£ ); dl; dÈðdl-> ´ev ) { 1616  ©Œibu‹ * a = dl -> d©a ; 1618 ià( hªdË == 0) 1619 hªdË = a ->handle; 1621 ià( `bt_uuid_cmp (& a -> uuid , & ´im_uuid ) != 0 && 1622 `bt_uuid_cmp (& a -> uuid , & ¢d_uuid ) != 0) 1625 ià( ’d - hªdË >ð n™ems ) 1626  ’d - n™ems + 1; 1628 ià( a -> Ën == 2) { 1633 ià( a -> hªdË == 0x0001) 1636 ’d = a -> hªdË - 1; 1637 hªdË = 0; 1640 ià( ’d - 0x0001 >ð n™ems ) 1641  ’d - n™ems + 1; 1644 } } 1646 ušt16_t $©Œib_db_fšd_avaž ( btd_ad­‹r * ad­‹r , bt_uuid_t * svc_uuid , 1647 ušt16_t n™ems ) 1649 `g_as£¹ ( n™ems > 0); 1651 ià( svc_uuid -> ty³ =ð BT_UUID16 ) 1652  `fšd_uuid16_avaž ( ad­‹r , n™ems ); 1653 ià( svc_uuid -> ty³ =ð BT_UUID128 ) 1654  `fšd_uuid128_avaž ( ad­‹r , n™ems ); 1656  uuid¡r [ MAX_LEN_UUID_STR ]; 1658 `bt_uuid_to_¡ršg ( svc_uuid , uuid¡r , MAX_LEN_UUID_STR ); 1659 `”rÜ ("Service uuid: %s is‚either‡ 16-bit‚or‡ 128-bit uuid", 1660 uuid¡r ); 1663 } } 1665  ©Œibu‹ * $©Œib_db_add ( btd_ad­‹r * ad­‹r , ušt16_t hªdË , 1666 bt_uuid_t * uuid ,  »ad_»q , 1667  wr™e_»q , cÚ¡ ušt8_t * v®ue , 1668 size_t Ën ) 1670 GSLi¡ * l ; 1672 l = `g_¦i¡_fšd_cu¡om ( £rv”s , ad­‹r , ad­‹r_cmp ); 1673 ià( l =ð NULL ) 1674  NULL ; 1676  `©Œib_db_add_Ãw ( l -> d©a , hªdË , uuid , »ad_»q , wr™e_»q , 1677 v®ue , Ën ); 1678 } } 1680  $©Œib_db_upd©e ( btd_ad­‹r * ad­‹r , ušt16_t hªdË , 1681 bt_uuid_t * uuid , cÚ¡ ušt8_t * v®ue , 1682 size_t Ën ,  ©Œibu‹ ** ©Œ ) 1684  g©t_£rv” * £rv” ; 1685  ©Œibu‹ * a ; 1686 GSLi¡ * l ; 1687 GLi¡ * dl ; 1688 gušt h = hªdË ; 1690 l = `g_¦i¡_fšd_cu¡om ( £rv”s , ad­‹r , ad­‹r_cmp ); 1691 ià( l =ð NULL ) 1692  - ENOENT ; 1694 £rv” = l -> d©a ; 1696 `DBG ("hªdË=0x%04x", hªdË ); 1698 dl = `g_li¡_fšd_cu¡om ( £rv” -> d©aba£ , `GUINT_TO_POINTER ( h ), 1699 hªdË_cmp ); 1700 ià( dl =ð NULL ) 1701  - ENOENT ; 1703 a = dl -> d©a ; 1705 a -> d©a = `g_Œy_»®loc ×->d©a, Ën ); 1706 ià( Ën && a -> d©a =ð NULL ) 1707  - ENOMEM ; 1709 a -> Ën =†en; 1710 `memýy ( a -> d©a , v®ue , Ën ); 1712 ià( uuid !ð NULL ) 1713 a -> uuid = *uuid; 1715 ià( ©Œ ) 1716 * ©Œ = a ; 1719 } } 1721  $©Œib_db_d– ( btd_ad­‹r * ad­‹r , ušt16_t hªdË ) 1723  g©t_£rv” * £rv” ; 1724  ©Œibu‹ * a ; 1725 GSLi¡ * l ; 1726 GLi¡ * dl ; 1727 gušt h = hªdË ; 1729 l = `g_¦i¡_fšd_cu¡om ( £rv”s , ad­‹r , ad­‹r_cmp ); 1730 ià( l =ð NULL ) 1731  - ENOENT ; 1733 £rv” = l -> d©a ; 1735 `DBG ("hªdË=0x%04x", hªdË ); 1737 dl = `g_li¡_fšd_cu¡om ( £rv” -> d©aba£ , `GUINT_TO_POINTER ( h ), 1738 hªdË_cmp ); 1739 ià( dl =ð NULL ) 1740  - ENOENT ; 1742 a = dl -> d©a ; 1743 £rv” -> d©aba£ = `g_li¡_»move (£rv”->d©aba£, a ); 1744 `g_ä“ ( a -> d©a ); 1745 `g_ä“ ( a ); 1748 } } 1750 #ifdeà __TIZEN_PATCH__ 1751  ušt8_t $©Œib_g‘_ccc_šfo ( btd_deviû * deviû , ušt16_t hªdË ) 1753 ušt16_t cccv® = 0; 1754 * fž’ame ; 1755 GKeyFže * key_fže ; 1756  group [6]; 1757 * v®ue ; 1759 fž’ame = `btd_deviû_g‘_¡Üage_·th ( deviû , "ccc"); 1760 ià(! fž’ame ) { 1761 `w¬n ("Unableo get ccc storage…ath for device"); 1765 key_fže = `g_key_fže_Ãw (); 1766 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 1767 `¥rštf ( group , "%hu", hªdË ); 1770 v®ue = `g_key_fže_g‘_¡ršg ( key_fže , group , "V®ue", NULL ); 1771 ià(! v®ue ) 1774 `ssÿnf ( v®ue , "%hX", & cccv® ); 1776 `g_ä“ ( fž’ame ); 1777 `g_key_fže_ä“ ( key_fže ); 1779  cccv® ; 1780 } } 1782  $©Œib_£nd_sc_šd ( btd_deviû * deviû , GA‰rib * ©Œib , 1783 ušt16_t ¡¬t_hªdË , ušt16_ˆ ’d_hªdË , 1784 size_t vËn ) 1786 size_t Ëngth = 0; 1787 ušt8_t * pdu ; 1788 size_t mtu ; 1790 pdu = `g_©Œib_g‘_bufãr ( ©Œib , & mtu ); 1791 Ëngth = `£nd_sc_šdiÿtiÚ ( ¡¬t_hªdË , ’d_hªdË , vËn , pdu , mtu ); 1792 `g_©Œib_£nd ( ©Œib , 0, pdu , Ëngth , NULL , NULL, NULL); 1793 } } 1795  $©Œib_£nd_nÙy_šd ( btd_deviû * deviû , GA‰rib * ©Œib , 1796 ušt16_t hªdË , ušt16_ˆ desc_hªdË , 1797 ušt8_t * v®ue , size_t vËn ) 1799 size_t Ëngth = 0; 1800 ušt16_t cccv® ; 1801 ušt8_t * pdu ; 1802 size_t mtu ; 1804 cccv® = `©Œib_g‘_ccc_šfo ( deviû , desc_hªdË ); 1805 ià(! cccv® ) 1808 pdu = `g_©Œib_g‘_bufãr ( ©Œib , & mtu ); 1809 ià( cccv® =ð GATT_CLIENT_CHARAC_CFG_NOTIF_BIT ) { 1810 Ëngth = `’c_nÙifiÿtiÚ ( hªdË , v®ue , vËn , pdu , mtu ); 1811 `g_©Œib_£nd ( ©Œib , 0, pdu , Ëngth , NULL , NULL, NULL); 1812 } ià( cccv® =ð GATT_CLIENT_CHARAC_CFG_IND_BIT ) { 1813 Ëngth = `’c_šdiÿtiÚ ( hªdË , v®ue , vËn , pdu , mtu ); 1814 `g_©Œib_£nd ( ©Œib , 0, pdu , Ëngth , NULL , NULL, NULL); 1816 } } 1819  $©Œib_g­_£t ( btd_ad­‹r * ad­‹r , ušt16_t uuid , 1820 cÚ¡ ušt8_t * v®ue , size_t Ën ) 1822  g©t_£rv” * £rv” ; 1823 ušt16_t hªdË ; 1824 GSLi¡ * l ; 1826 l = `g_¦i¡_fšd_cu¡om ( £rv”s , ad­‹r , ad­‹r_cmp ); 1827 ià( l =ð NULL ) 1828  - ENOENT ; 1830 £rv” = l -> d©a ; 1834  uuid ) { 1835  GATT_CHARAC_DEVICE_NAME : 1836 hªdË = £rv” -> Çme_hªdË ; 1838  GATT_CHARAC_APPEARANCE : 1839 hªdË = £rv” -> ­³¬ªû_hªdË ; 1842  - ENOSYS ; 1845  `©Œib_db_upd©e ( ad­‹r , hªdË , NULL , v®ue , Ën , NULL); 1846 } } @src/attrib-server.h 25 ušt16_t ©Œib_db_fšd_avaž ( btd_ad­‹r * ad­‹r , bt_uuid_t * svc_uuid , 26 ušt16_t n™ems ); 27  ©Œibu‹ * ©Œib_db_add ( btd_ad­‹r * ad­‹r , ušt16_t hªdË , 28 bt_uuid_t * uuid ,  »ad_»q , 29  wr™e_»q , cÚ¡ ušt8_t * v®ue , 30 size_t Ën ); 31  ©Œib_db_upd©e ( btd_ad­‹r * ad­‹r , ušt16_t hªdË , 32 bt_uuid_t * uuid , cÚ¡ ušt8_t * v®ue , 33 size_t Ën ,  ©Œibu‹ ** ©Œ ); 34  ©Œib_db_d– ( btd_ad­‹r * ad­‹r , ušt16_t hªdË ); 35  ©Œib_g­_£t ( btd_ad­‹r * ad­‹r , ušt16_t uuid , 36 cÚ¡ ušt8_t * v®ue , size_t Ën ); 37 ušt32_t ©Œib_ü—‹_sdp ( btd_ad­‹r * ad­‹r , ušt16_t hªdË , 38 cÚ¡ * Çme ); 39  ©Œib_ä“_sdp ( btd_ad­‹r * ad­‹r , ušt32_t sdp_hªdË ); 40 GA‰rib * ©Œib_äom_deviû ( btd_deviû * deviû ); 41 gušt ©Œib_chªÃl_©ch ( GA‰rib * ©Œib ); 42 gboÞ—n ©Œib_chªÃl_d‘ach ( GA‰rib * ©Œib , gušt id ); 43 #ifdeà __TIZEN_PATCH__ 44  ©Œibu‹ * ©Œibu‹_fšd ( btd_ad­‹r * ad­‹r , bt_uuid_t * uuid ); 45  ©Œib_£nd_nÙy_šd ( btd_deviû * deviû , GA‰rib * ©Œib , 46 ušt16_t hªdË , ušt16_ˆ desc_hªdË , 47 ušt8_t * v®ue , size_t vËn ); 48 ušt16_t £nd_sc_šdiÿtiÚ (ušt16_ˆ hªdË , ušt16_ˆ ’d_hªdË , size_t vËn , 49 ušt8_t * pdu , size_t Ën ); @src/dbus-common.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡dio.h > 31  ~<¡dšt.h > 33  ~ 34  ~ 35  ~ 37  ~"log.h " 39  ~"dbus-commÚ.h " 41  DBusCÚÃùiÚ * gcÚÃùiÚ = NULL ; 43  $­³nd_v¬ŸÁ ( DBusMes§geI‹r * ™” ,  ty³ , * v® ) 45 DBusMes§geI‹r v®ue ; 46  sig [2] = { ty³ , '\0' }; 48 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_VARIANT , sig , & v®ue ); 50 `dbus_mes§ge_™”_­³nd_basic (& v®ue , ty³ , v® ); 52 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v®ue ); 53 } } 55  $­³nd_¬¿y_v¬ŸÁ ( DBusMes§geI‹r * ™” ,  ty³ , * v® , 56  n_–em’ts ) 58 DBusMes§geI‹r v¬ŸÁ , ¬¿y ; 59  ty³_sig [2] = { ty³ , '\0' }; 60  ¬¿y_sig [3] = { DBUS_TYPE_ARRAY , ty³ , '\0' }; 62 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_VARIANT , 63 ¬¿y_sig , & v¬ŸÁ ); 65 `dbus_mes§ge_™”_Ý’_cÚš” (& v¬ŸÁ , DBUS_TYPE_ARRAY , 66 ty³_sig , & ¬¿y ); 68 ià( `dbus_ty³_is_fixed ( ty³ è=ð TRUE ) { 69 `dbus_mes§ge_™”_­³nd_fixed_¬¿y (& ¬¿y , ty³ , v® , 70 n_–em’ts ); 71 } ià( ty³ =ð DBUS_TYPE_STRING ||y³ =ð DBUS_TYPE_OBJECT_PATH ) { 72 cÚ¡ *** ¡r_¬¿y = v® ; 73  i ; 75  i = 0; i < n_–em’ts ; i++) 76 `dbus_mes§ge_™”_­³nd_basic (& ¬¿y , ty³ , 77 &((* ¡r_¬¿y )[ i ])); 80 `dbus_mes§ge_™”_þo£_cÚš” (& v¬ŸÁ , & ¬¿y ); 82 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v¬ŸÁ ); 83 } } 85  $diù_­³nd_’Œy ( DBusMes§geI‹r * diù , 86 cÚ¡ * key ,  ty³ , * v® ) 88 DBusMes§geI‹r ’Œy ; 90 ià( ty³ =ð DBUS_TYPE_STRING ) { 91 cÚ¡ * ¡r = *((cÚ¡ **è v® ); 92 ià( ¡r =ð NULL ) 96 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , 97 NULL , & ’Œy ); 99 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & key ); 101 `­³nd_v¬ŸÁ (& ’Œy , ty³ , v® ); 103 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & ’Œy ); 104 } } 106  $diù_­³nd_¬¿y ( DBusMes§geI‹r * diù , cÚ¡ * key ,  ty³ , 107 * v® ,  n_–em’ts ) 109 DBusMes§geI‹r ’Œy ; 111 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , 112 NULL , & ’Œy ); 114 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & key ); 116 `­³nd_¬¿y_v¬ŸÁ (& ’Œy , ty³ , v® , n_–em’ts ); 118 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & ’Œy ); 119 } } 121  $£t_dbus_cÚÃùiÚ ( DBusCÚÃùiÚ * cÚn ) 123 cÚÃùiÚ = cÚn ; 124 } } 126 DBusCÚÃùiÚ * $btd_g‘_dbus_cÚÃùiÚ () 128  cÚÃùiÚ ; 129 } } 131 cÚ¡ * $þass_to_icÚ ( ušt32_t þass ) 133 ( þass & 0x1f00) >> 8) { 137 ( þass & 0xfc) >> 2) { 150 ( þass & 0xfc) >> 2) { 165 ( þass & 0xc0) >> 6) { 167 ( þass & 0x1e) >> 2) { 176 ( þass & 0x1e) >> 2) { 185 ià( þass & 0x80) 187 ià( þass & 0x20) 192  NULL ; 193 } } 195 cÚ¡ * $g­_­³¬ªû_to_icÚ ( ušt16_t ­³¬ªû ) 197 ( ­³¬ªû & 0xffc0) >> 6) { 211  ­³¬ªû & 0x3f) { 227  NULL ; 228 } } @src/dbus-common.h 24  diù_­³nd_’Œy ( DBusMes§geI‹r * diù , 25 cÚ¡ * key ,  ty³ , * v® ); 27  diù_­³nd_¬¿y ( DBusMes§geI‹r * diù , cÚ¡ * key ,  ty³ , 28 * v® ,  n_–em’ts ); 30  £t_dbus_cÚÃùiÚ ( DBusCÚÃùiÚ * cÚn ); 31 DBusCÚÃùiÚ * btd_g‘_dbus_cÚÃùiÚ (); 33 cÚ¡ * þass_to_icÚ ( ušt32_t þass ); 34 cÚ¡ * g­_­³¬ªû_to_icÚ ( ušt16_t ­³¬ªû ); @src/device.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<¡dlib.h > 31  ~ 32  ~ 33  ~<¡dboÞ.h > 34  ~<”ºo.h > 35  ~ 36  ~ 38  ~ 39  ~ 40  ~ 42  ~ 43  ~ 44  ~ 46  ~"log.h " 48  ~"lib/uuid.h " 49  ~"¤c/sh¬ed/utž.h " 50  ~"¤c/sh¬ed/©t.h " 51  ~"¤c/sh¬ed/queue.h " 52  ~"¤c/sh¬ed/g©t-db.h " 53  ~"¤c/sh¬ed/g©t-þ›Á.h " 54  ~"btio/btio.h " 55  ~"lib/mgmt.h " 56  ~"©Œib/©t.h " 57  ~"hcid.h " 58  ~"ad­‹r.h " 59  ~"©Œib/g©Œib.h " 60  ~"©tio.h " 61 #ifdeà __TIZEN_PATCH__ 62  ~"eœ.h " 63  ~"©Œib/þ›Á.h " 65  ~"deviû.h " 66  ~"g©t-þ›Á.h " 67  ~"´ofže.h " 68  ~"£rviû.h " 69  ~"dbus-commÚ.h " 70  ~"”rÜ.h " 71  ~"uuid-h–³r.h " 72  ~"sdp-þ›Á.h " 73  ~"©Œib/g©t.h " 74  ~"ag’t.h " 75  ~"‹xtfže.h " 76  ~"¡Üage.h " 77  ~"©Œib-£rv”.h " 78 #ifdeà __TIZEN_PATCH__ 79  ~"sdp-xml.h " 80  ~"g©t.h " 83  #IO_CAPABILITY_NOINPUTNOOUTPUT 0x03 ) 85  #DISCONNECT_TIMER 2 ) 86  #DISCOVERY_TIMER 1 ) 88 #iâdeà MIN 89  #MIN ( a , b è(×è< (bè? (aè: (b)) ) 92 #ifdeà __TIZEN_PATCH__ 93  #DEV_SIMUL_CONTROLLER 0x08 ) 95  #DEV_SIMUL_HOST 0x10 ) 97  #DEV_MAX_MANUFACTURER_DATA_LEN 248 ) 100  #BT_ADDRESS_STRING_SIZE 18 ) 103  DBusCÚÃùiÚ * gdbus_cÚn = NULL ; 104  g£rviû_¡©e_cb_id ; 106  sbtd_discÚÃù_d©a { 107 gušt mid ; 108 discÚÃù_w©ch mw©ch ; 109 * mu£r_d©a ; 110 GDe¡royNÙify mde¡roy ; 113  sbÚdšg_»q { 114 DBusMes§ge * mmsg ; 115 gušt mli¡’”_id ; 116  btd_deviû * mdeviû ; 117 ušt8_t mbdaddr_ty³ ; 118  ag’t * mag’t ; 119  btd_ad­‹r_pš_cb_™” * mcb_™” ; 120 ušt8_t m¡©us ; 121 gušt m»Œy_tim” ; 122  time¥ec m©‹m±_¡¬t_time ; 123  mÏ¡_©‹m±_du¿tiÚ_ms ; 127 mAUTH_TYPE_PINCODE , 128 mAUTH_TYPE_PASSKEY , 129 mAUTH_TYPE_CONFIRM , 130 mAUTH_TYPE_NOTIFY_PASSKEY , 131 mAUTH_TYPE_NOTIFY_PINCODE , 132 } tauth_ty³_t ; 134  sauth’tiÿtiÚ_»q { 135 auth_ty³_t mty³ ; 136  ag’t * mag’t ; 137  btd_deviû * mdeviû ; 138 ušt32_t m·sskey ; 139 * mpšcode ; 140 gboÞ—n m£cu» ; 143  sbrow£_»q { 144 DBusMes§ge * mmsg ; 145  btd_deviû * mdeviû ; 146 GSLi¡ * mm©ch_uuids ; 147 GSLi¡ * m´ofžes_added ; 148 sdp_li¡_t * m»cÜds ; 149  m£¬ch_uuid ; 150  m»cÚÃù_©‹m± ; 151 gušt mli¡’”_id ; 152 ušt16_t msdp_æags ; 155  sšþuded_£¬ch { 156  brow£_»q * m»q ; 157 GSLi¡ * m£rviûs ; 158 GSLi¡ * mcu¼’t ; 161  s©tio_d©a { 162 gušt mid ; 163 ©tio_cÚÃù_cb mcfunc ; 164 ©tio_discÚÃù_cb mdcfunc ; 165 gpoš‹r mu£r_d©a ; 168  ssvc_ÿÎback { 169  mid ; 170 gušt midË_id ; 171  btd_deviû * mdev ; 172 deviû_svc_cb_t mfunc ; 173 * mu£r_d©a ; 176 #ifdeà __TIZEN_PATCH__ 177  sË_adv_»pÜt_šfo { 178 ušt8_t mæags ; 179  mmªuçùu»r_d©a [ DEV_MAX_MANUFACTURER_DATA_LEN ]; 180 ušt8_t mmªuçùu»r_d©a_Ën ; 184 (* t©tio_”rÜ_cb è(cÚ¡ tGE¼Ü * tg”r , tgpoš‹r tu£r_d©a ); 185 (* t©tio_sucûss_cb è( tgpoš‹r tu£r_d©a ); 187  s©t_ÿÎbacks { 188 ©tio_”rÜ_cb ”r ; 189 ©tio_sucûss_cb sucûss ; 190 gpoš‹r u£r_d©a ; 194  sb—»r_¡©e { 195 boÞ ·œed ; 196 boÞ bÚded ; 197 boÞ cÚÃùed ; 198 boÞ svc_»sÞved ; 201 #ifdeà __TIZEN_PATCH__ 203 DEV_PAIRED_NONE = 0, 204 DEV_PAIRED_BREDR = 1, 205 DEV_PAIRED_LE , 206 DEV_PAIRED_BREDR_LE , 207 } tdev_·œed_¡©e ; 210 DEV_CONNECTED_NONE = 0, 211 DEV_CONNECTED_BREDR = 1, 212 DEV_CONNECTED_LE , 213 DEV_CONNECTED_BREDR_LE , 214 } tdev_cÚÃùed_¡©e ; 217  sbtd_deviû { 218  »f_couÁ ; 220 bdaddr_t bdaddr ; 221 ušt8_t bdaddr_ty³ ; 222 * ·th ; 223 boÞ b»dr ; 224 boÞ Ë ; 225 boÞ ³ndšg_·œed ; 226 boÞ svc_»äeshed ; 227 GSLi¡ * svc_ÿÎbacks ; 228 GSLi¡ * eœ_uuids ; 229  Çme [ MAX_NAME_LENGTH + 1]; 230 * ®Ÿs ; 231 ušt32_t þass ; 232 ušt16_t v’dÜ_¤c ; 233 ušt16_t v’dÜ ; 234 ušt16_t ´oduù ; 235 ušt16_t v”siÚ ; 236 ušt16_t ­³¬ªû ; 237 * mod®Ÿs ; 238  btd_ad­‹r * ad­‹r ; 239 GSLi¡ * uuids ; 240 GSLi¡ * ´im¬›s ; 241 GSLi¡ * £rviûs ; 242 #ifdeà __TIZEN_PATCH__ 243 GSLi¡ * g©t_£rviûs ; 245 GSLi¡ * ³ndšg ; 246 GSLi¡ * w©ches ; 247 gboÞ—n ‹mpܬy ; 248 gušt discÚn_tim” ; 249 gušt discov_tim” ; 250  brow£_»q * brow£ ; 251  bÚdšg_»q * bÚdšg ; 252  auth’tiÿtiÚ_»q * authr ; 253 GSLi¡ * discÚÃùs ; 254 DBusMes§ge * cÚÃù ; 255 DBusMes§ge * discÚÃù ; 256 GA‰rib * ©Œib ; 257 GSLi¡ * ©tios ; 258 GSLi¡ * ©tios_ofæše ; 259 gušt ©chid ; 261  bt_©t * ©t ; 262 ušt16_t ©t_mtu ; 263  ©t_discÚn_id ; 270  g©t_db * db ; 271  bt_g©t_þ›Á * þ›Á ; 273  btd_g©t_þ›Á * þ›Á_dbus ; 275  b—»r_¡©e b»dr_¡©e ; 276  b—»r_¡©e Ë_¡©e ; 278 sdp_li¡_t * tmp_»cÜds ; 280 time_t b»dr_£’ ; 281 time_t Ë_£’ ; 283 gboÞ—n Œu¡ed ; 284 gboÞ—n blocked ; 285 gboÞ—n auto_cÚÃù ; 286 gboÞ—n di§bË_auto_cÚÃù ; 287 gboÞ—n g’”®_cÚÃù ; 289 boÞ Ëgacy ; 290 št8_t rssi ; 292 GIOChªÃl * ©t_io ; 293 gušt ¡Üe_id ; 294 #ifdeà __TIZEN_PATCH__ 295 boÞ Ëgacy_·œšg ; 296 * mªuçùu»r_d©a ; 297  mªuçùu»r_d©a_Ën ; 298  Ë_adv_»pÜt_šfo Ë_adv_d©a ; 299  »mÙe_ã©u»_æags ; 300 gušt ©tio_id ; 301 gboÞ—n g©t_cÚÃùed ; 302 ušt16_t auth_·ylßd_timeout ; 303 ušt8_t disc_»asÚ ; 304 ušt8_t Ï¡_bdaddr_ty³ ; 305 gboÞ—n Ë_auto_cÚÃù ; 306 gušt auto_id ; 310 cÚ¡ ušt16_t uuid_li¡ [] = { 311 L2CAP_UUID , 312 PNP_INFO_SVCLASS_ID , 313 PUBLIC_BROWSE_GROUP , 315 } }; 317  deviû_brow£_g©t ( btd_deviû * deviû , DBusMes§ge * msg ); 318  deviû_brow£_sdp ( btd_deviû * deviû , DBusMes§ge * msg ); 319 #ifdeà __TIZEN_PATCH__ 320  deviû_cu¡om_brow£_sdp ( btd_deviû * deviû , 321 DBusMes§ge * msg , uuid_t * £¬ch ); 325  b—»r_¡©e * $g‘_¡©e ( btd_deviû * dev , 326 ušt8_t bdaddr_ty³ ) 328 ià( bdaddr_ty³ =ð BDADDR_BREDR ) 329  & dev -> b»dr_¡©e ; 331  & dev -> Ë_¡©e ; 332 } } 334  GSLi¡ * $fšd_£rviû_w™h_´ofže ( GSLi¡ * li¡ ,  btd_´ofže * p ) 336 GSLi¡ * l ; 338  l = li¡ ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 339  btd_£rviû * £rviû = l -> d©a ; 341 ià( `btd_£rviû_g‘_´ofže ( £rviû è=ð p ) 342  l ; 345  NULL ; 346 } } 348  GSLi¡ * $fšd_£rviû_w™h_¡©e ( GSLi¡ * li¡ , 349 btd_£rviû_¡©e_t ¡©e ) 351 GSLi¡ * l ; 353  l = li¡ ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 354  btd_£rviû * £rviû = l -> d©a ; 356 ià( `btd_£rviû_g‘_¡©e ( £rviû è=ð ¡©e ) 357  l ; 360  NULL ; 361 } } 363  GSLi¡ * $fšd_£rviû_w™h_g©t_hªdËs ( GSLi¡ * li¡ , 364 ušt16_t ¡¬t_hªdË , 365 ušt16_t ’d_hªdË ) 367 GSLi¡ * l ; 368 ušt16_t svc_¡¬t , svc_’d ; 370  l = li¡ ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 371  btd_£rviû * £rviû = l -> d©a ; 373 ià(! `btd_£rviû_g‘_g©t_hªdËs ( £rviû , & svc_¡¬t , 374 & svc_’d )) 377 ià( svc_¡¬t =𠡬t_hªdË && svc_’d =ð ’d_hªdË ) 378  l ; 381  NULL ; 382 } } 384  $upd©e_‹chnÞog›s ( GKeyFže * fže ,  btd_deviû * dev ) 386 cÚ¡ * li¡ [2]; 387 size_t Ën = 0; 389 ià( dev -> b»dr ) 390 li¡ [ Ën ++] = "BR/EDR"; 392 ià( dev -> Ë ) { 393 cÚ¡ * ty³ ; 395 ià( dev -> bdaddr_ty³ =ð BDADDR_LE_PUBLIC ) 396 ty³ = "public"; 398 ty³ = "static"; 400 `g_key_fže_£t_¡ršg ( fže , "G’”®", "Add»ssTy³", ty³ ); 402 li¡ [ Ën ++] = "LE"; 405 `g_key_fže_£t_¡ršg_li¡ ( fže , "General", "SupportedTechnologies", 406 li¡ , Ën ); 407 } } 409 #ifdeà __TIZEN_PATCH__ 410 * $mªuçùu»r_d©a2¡r (* d©a ,  size ) 412  ¡r [ DEV_MAX_MANUFACTURER_DATA_LEN * 3 + 1]; 413  tmp [5]; 414  i ; 416 ¡r [0] = '\0'; 417  i = 0; i < size ; i++) { 418 `¢´štf ( tmp , Ñmp), "%d ", d©a [ i ]); 419 `g_¡¾ÿt ( ¡r , tmp , (str)); 422  `g_¡rdup ( ¡r ); 423 } } 425  $lßd_mªuçùu»r_d©a_2dig™ (* d©a ,  Ën , * buf ) 427  i ; 428 ** ¥l™ ; 430 ¥l™ = `g_¡r¥l™ ( d©a , " ", 0); 432  i = 0; i < Ën ; i++) { 433 ià( ¥l™ [ i ] =ð NULL ) 436 buf [ i ] = () `g_ascii_¡¹ouÎ ( ¥l™ [i], NULL , 10); 439 `g_¡rä“v ( ¥l™ ); 442 } } 445  gboÞ—n $¡Üe_deviû_šfo_cb ( gpoš‹r u£r_d©a ) 447  btd_deviû * deviû = u£r_d©a ; 448 GKeyFže * key_fže ; 449  fž’ame [ PATH_MAX ]; 450  ad­‹r_addr [18]; 451  deviû_addr [18]; 452 * ¡r ; 453  þass [9]; 454 ** uuids = NULL ; 455 gsize Ëngth = 0; 457 deviû -> ¡Üe_id = 0; 459 `ba2¡r ( `btd_ad­‹r_g‘_add»ss ( deviû -> ad­‹r ), ad­‹r_addr ); 460 `ba2¡r (& deviû -> bdaddr , deviû_addr ); 461 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/šfo", ad­‹r_addr , 462 deviû_addr ); 464 key_fže = `g_key_fže_Ãw (); 465 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 467 `g_key_fže_£t_¡ršg ( key_fže , "G’”®", "Name", deviû -> Çme ); 469 ià( deviû -> ®Ÿs !ð NULL ) 470 `g_key_fže_£t_¡ršg ( key_fže , "General", "Alias", 471 deviû -> ®Ÿs ); 473 `g_key_fže_»move_key ( key_fže , "G’”®", "AlŸs", NULL ); 475 ià( deviû -> þass ) { 476 `¥rštf ( þass , "0x%6.6x", deviû ->class); 477 `g_key_fže_£t_¡ršg ( key_fže , "G’”®", "CÏss", þass ); 479 `g_key_fže_»move_key ( key_fže , "G’”®", "CÏss", NULL ); 482 ià( deviû -> ­³¬ªû ) { 483 `¥rštf ( þass , "0x%4.4x", deviû -> ­³¬ªû ); 484 `g_key_fže_£t_¡ršg ( key_fže , "G’”®", "Aµ—¿nû", þass ); 486 `g_key_fže_»move_key ( key_fže , "G’”®", "Aµ—¿nû", NULL ); 489 `upd©e_‹chnÞog›s ( key_fže , deviû ); 491 `g_key_fže_£t_boÞ—n ( key_fže , "General", "Trusted", 492 deviû -> Œu¡ed ); 494 `g_key_fže_£t_boÞ—n ( key_fže , "General", "Blocked", 495 deviû -> blocked ); 497 ià( deviû -> uuids ) { 498 GSLi¡ * l ; 499  i ; 501 uuids = `g_Ãw0 (*, `g_¦i¡_Ëngth ( deviû ->uuids) + 1); 502  i = 0, l = deviû -> uuids ;†;† = `g_¦i¡_Ãxt (l), i++) 503 uuids [ i ] = l -> d©a ; 504 `g_key_fže_£t_¡ršg_li¡ ( key_fže , "General", "Services", 505 (cÚ¡ **) uuids , i ); 507 `g_key_fže_»move_key ( key_fže , "G’”®", "S”viûs", NULL ); 510 #ifdeà __TIZEN_PATCH__ 511 ià( deviû -> Ë_adv_d©a . æags ) { 512 `g_key_fže_£t_š‹g” ( key_fže , "General", "Flags", 513 deviû -> Ë_adv_d©a . æags ); 515 `g_key_fže_»move_key ( key_fže , "G’”®", "FÏgs", NULL ); 518 ià( deviû -> mªuçùu»r_d©a ) { 519 ¡r = `mªuçùu»r_d©a2¡r ( deviû -> mªuçùu»r_d©a , 520 deviû -> mªuçùu»r_d©a_Ën ); 521 `g_key_fže_£t_¡ršg ( key_fže , "General", 523 ¡r ); 524 `g_ä“ ( ¡r ); 525 `g_key_fže_£t_š‹g” ( key_fže , "General", 527 deviû -> mªuçùu»r_d©a_Ën ); 529 `g_key_fže_»move_key ( key_fže , "General", 530 "Mªuçùu»rD©a", NULL ); 531 `g_key_fže_»move_key ( key_fže , "General", 532 "Mªuçùu»rD©aL’", NULL ); 536 ià( deviû -> v’dÜ_¤c ) { 537 `g_key_fže_£t_š‹g” ( key_fže , "DeviceID", "Source", 538 deviû -> v’dÜ_¤c ); 539 `g_key_fže_£t_š‹g” ( key_fže , "DeviceID", "Vendor", 540 deviû -> v’dÜ ); 541 `g_key_fže_£t_š‹g” ( key_fže , "DeviceID", "Product", 542 deviû -> ´oduù ); 543 `g_key_fže_£t_š‹g” ( key_fže , "DeviceID", "Version", 544 deviû -> v”siÚ ); 546 `g_key_fže_»move_group ( key_fže , "DeviûID", NULL ); 549 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 551 ¡r = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 552 `g_fže_£t_cÚ‹Ás ( fž’ame , ¡r , Ëngth , NULL ); 553 `g_ä“ ( ¡r ); 555 `g_key_fže_ä“ ( key_fže ); 556 `g_ä“ ( uuids ); 558  FALSE ; 559 } } 561  boÞ $deviû_add»ss_is_´iv©e ( btd_deviû * dev ) 563 ià( dev -> bdaddr_ty³ !ð BDADDR_LE_RANDOM ) 564  çl£ ; 566  dev -> bdaddr . b [5] >> 6) { 569  Œue ; 571  çl£ ; 573 } } 575  $¡Üe_deviû_šfo ( btd_deviû * deviû ) 577 ià( deviû -> ‹mpܬy || deviû-> ¡Üe_id > 0) 580 ià( `deviû_add»ss_is_´iv©e ( deviû )) { 581 `w¬n ("Can't store info for…rivate‡ddressed device %s", 582 deviû -> ·th ); 586 deviû -> ¡Üe_id = `g_idË_add ( ¡Üe_deviû_šfo_cb , device); 587 } } 589  $deviû_¡Üe_ÿched_Çme ( btd_deviû * dev , cÚ¡ * Çme ) 591  fž’ame [ PATH_MAX ]; 592  s_addr [18], d_addr [18]; 593 GKeyFže * key_fže ; 594 * d©a ; 595 gsize Ëngth = 0; 597 ià( `deviû_add»ss_is_´iv©e ( dev )) { 598 `w¬n ("Can't store‚ame for…rivate‡ddressed device %s", 599 dev -> ·th ); 603 `ba2¡r ( `btd_ad­‹r_g‘_add»ss ( dev -> ad­‹r ), s_addr ); 604 `ba2¡r (& dev -> bdaddr , d_addr ); 605 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/ÿche/%s", s_addr , d_addr ); 606 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 608 key_fže = `g_key_fže_Ãw (); 609 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 610 `g_key_fže_£t_¡ršg ( key_fže , "G’”®", "Name", Çme ); 612 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 613 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 614 `g_ä“ ( d©a ); 616 `g_key_fže_ä“ ( key_fže ); 617 } } 619  $brow£_»que¡_ä“ ( brow£_»q * »q ) 621 ià( »q -> li¡’”_id ) 622 `g_dbus_»move_w©ch ( dbus_cÚn , »q -> li¡’”_id ); 623 ià( »q -> msg ) 624 `dbus_mes§ge_uÄef ( »q -> msg ); 625 `g_¦i¡_ä“_fuÎ ( »q -> ´ofžes_added , g_ä“ ); 626 ià( »q -> »cÜds ) 627 `sdp_li¡_ä“ ( »q -> »cÜds , ( sdp_ä“_func_t è sdp_»cÜd_ä“ ); 629 `g_ä“ ( »q ); 630 } } 632  $g©t_þ›Á_þ—nup ( btd_deviû * deviû ) 634 ià(! deviû -> þ›Á ) 637 `bt_g©t_þ›Á_£t_£rviû_chªged ( deviû -> þ›Á , NULL , NULL, NULL); 638 `bt_g©t_þ›Á_£t_»ady_hªdËr ( deviû -> þ›Á , NULL , NULL, NULL); 639 `bt_g©t_þ›Á_uÄef ( deviû -> þ›Á ); 640 deviû -> þ›Á = NULL ; 642 ià(! deviû -> Ë_¡©e . bÚded ) 643 `g©t_db_þ—r ( deviû -> db ); 644 } } 646  $©tio_þ—nup ( btd_deviû * deviû ) 648 ià( deviû -> ©chid ) { 649 `©Œib_chªÃl_d‘ach ( deviû -> ©Œib , deviû-> ©chid ); 650 deviû -> ©chid = 0; 653 ià( deviû -> ©t_discÚn_id ) 654 `bt_©t_uÄegi¡”_discÚÃù ( deviû -> ©t , 655 deviû -> ©t_discÚn_id ); 657 ià( deviû -> ©t_io ) { 658 `g_io_chªÃl_shutdown ( deviû -> ©t_io , FALSE , NULL ); 659 `g_io_chªÃl_uÄef ( deviû -> ©t_io ); 660 deviû -> ©t_io = NULL ; 663 `g©t_þ›Á_þ—nup ( deviû ); 665 ià( deviû -> ©t ) { 666 `bt_©t_uÄef ( deviû -> ©t ); 667 deviû -> ©t = NULL ; 670 ià( deviû -> ©Œib ) { 671 GA‰rib * ©Œib = deviû ->attrib; 672 deviû -> ©Œib = NULL ; 673 `g_©Œib_ÿnûl_®l ( ©Œib ); 674 `g_©Œib_uÄef ( ©Œib ); 676 } } 678  $brow£_»que¡_ÿnûl ( brow£_»q * »q ) 680  btd_deviû * deviû = »q ->device; 681  btd_ad­‹r * ad­‹r = deviû ->adapter; 683 `bt_ÿnûl_discov”y ( `btd_ad­‹r_g‘_add»ss ( ad­‹r ), & deviû -> bdaddr ); 685 `©tio_þ—nup ( deviû ); 687 deviû -> brow£ = NULL ; 688 `brow£_»que¡_ä“ ( »q ); 689 } } 691  $svc_dev_»move ( gpoš‹r u£r_d©a ) 693  svc_ÿÎback * cb = u£r_d©a ; 695 ià( cb -> idË_id > 0) 696 `g_sourû_»move ( cb -> idË_id ); 698 cb -> `func (cb-> dev , - ENODEV , cb-> u£r_d©a ); 700 `g_ä“ ( cb ); 701 } } 703  $deviû_ä“ ( gpoš‹r u£r_d©a ) 705  btd_deviû * deviû = u£r_d©a ; 707 `btd_g©t_þ›Á_de¡roy ( deviû -> þ›Á_dbus ); 708 deviû -> þ›Á_dbus = NULL ; 710 `g_¦i¡_ä“_fuÎ ( deviû -> uuids , g_ä“ ); 711 `g_¦i¡_ä“_fuÎ ( deviû -> ´im¬›s , g_ä“ ); 712 `g_¦i¡_ä“_fuÎ ( deviû -> ©tios , g_ä“ ); 713 `g_¦i¡_ä“_fuÎ ( deviû -> ©tios_ofæše , g_ä“ ); 714 `g_¦i¡_ä“_fuÎ ( deviû -> svc_ÿÎbacks , svc_dev_»move ); 715 #ifdeà __TIZEN_PATCH__ 716 `g_¦i¡_ä“_fuÎ ( deviû -> g©t_£rviûs , g_ä“ ); 719 `©tio_þ—nup ( deviû ); 721 `g©t_db_uÄef ( deviû -> db ); 723 ià( deviû -> tmp_»cÜds ) 724 `sdp_li¡_ä“ ( deviû -> tmp_»cÜds , 725 ( sdp_ä“_func_t è sdp_»cÜd_ä“ ); 727 ià( deviû -> discÚn_tim” ) 728 `g_sourû_»move ( deviû -> discÚn_tim” ); 730 ià( deviû -> discov_tim” ) 731 `g_sourû_»move ( deviû -> discov_tim” ); 733 ià( deviû -> cÚÃù ) 734 `dbus_mes§ge_uÄef ( deviû -> cÚÃù ); 736 ià( deviû -> discÚÃù ) 737 `dbus_mes§ge_uÄef ( deviû -> discÚÃù ); 739 #ifdeà __TIZEN_PATCH__ 740 ià( deviû -> auto_id ) 741 `g_sourû_»move ( deviû -> auto_id ); 743 ià( deviû -> Ë_auto_cÚÃù ) 744 `btd_ad­‹r_di§bË_Ë_auto_cÚÃù ( deviû -> ad­‹r ); 747 `DBG ("%p", deviû ); 749 ià( deviû -> authr ) { 750 ià( deviû -> authr -> ag’t ) 751 `ag’t_uÄef ( deviû -> authr -> ag’t ); 752 `g_ä“ ( deviû -> authr -> pšcode ); 753 `g_ä“ ( deviû -> authr ); 756 ià( deviû -> eœ_uuids ) 757 `g_¦i¡_ä“_fuÎ ( deviû -> eœ_uuids , g_ä“ ); 759 `g_ä“ ( deviû -> ·th ); 760 `g_ä“ ( deviû -> ®Ÿs ); 761 `ä“ ( deviû -> mod®Ÿs ); 762 `g_ä“ ( deviû ); 763 } } 765 #ifdeà __TIZEN_PATCH__ 766  $deviû_£t_»mÙe_ã©u»_æag ( btd_deviû * deviû ,  æags ) 768 deviû -> »mÙe_ã©u»_æags = æags ; 769 } } 771 gboÞ—n $deviû_is_b»d¾e ( btd_deviû * deviû ) 773  ( deviû -> »mÙe_ã©u»_æags & 774 ( DEV_SIMUL_CONTROLLER | DEV_SIMUL_HOST )); 775 } } 778  ušt8_t $deviû_g‘_·œed_¡©e ( btd_deviû * deviû ) 780 ušt8_t ·œed = DEV_PAIRED_NONE ; 782 ià( deviû -> b»dr_¡©e . ·œed && deviû-> Ë_¡©e .paired) 783 ·œed = DEV_PAIRED_BREDR_LE ; 784 ià( deviû -> Ë_¡©e . ·œed ) 785 ·œed = DEV_PAIRED_LE ; 786 ià( deviû -> b»dr_¡©e . ·œed ) 787 ·œed = DEV_PAIRED_BREDR ; 789  ·œed ; 790 } } 794 boÞ $deviû_is_·œed ( btd_deviû * deviû , ušt8_t bdaddr_ty³ ) 796  b—»r_¡©e * ¡©e = `g‘_¡©e ( deviû , bdaddr_ty³ ); 798  ¡©e -> ·œed ; 799 } } 801 boÞ $deviû_is_bÚded ( btd_deviû * deviû , ušt8_t bdaddr_ty³ ) 803  b—»r_¡©e * ¡©e = `g‘_¡©e ( deviû , bdaddr_ty³ ); 805  ¡©e -> bÚded ; 806 } } 808 gboÞ—n $deviû_is_Œu¡ed ( btd_deviû * deviû ) 810  deviû -> Œu¡ed ; 811 } } 813  gboÞ—n $dev_´Ý”ty_g‘_add»ss (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 814 DBusMes§geI‹r * ™” , * d©a ) 816  btd_deviû * deviû = d©a ; 817  d¡addr [18]; 818 cÚ¡ * ±r = d¡addr ; 820 `ba2¡r (& deviû -> bdaddr , d¡addr ); 821 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ±r ); 823  TRUE ; 824 } } 826  gboÞ—n $dev_´Ý”ty_g‘_Çme (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 827 DBusMes§geI‹r * ™” , * d©a ) 829  btd_deviû * deviû = d©a ; 830 cÚ¡ * ±r = deviû -> Çme ; 832 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ±r ); 834  TRUE ; 835 } } 837  gboÞ—n $dev_´Ý”ty_exi¡s_Çme (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 838 * d©a ) 840  btd_deviû * dev = d©a ; 842  `deviû_Çme_known ( dev ); 843 } } 845  gboÞ—n $dev_´Ý”ty_g‘_®Ÿs (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 846 DBusMes§geI‹r * ™” , * d©a ) 848  btd_deviû * deviû = d©a ; 849  d¡addr [18]; 850 cÚ¡ * ±r ; 853 ià( deviû -> ®Ÿs !ð NULL ) 854 ±r = deviû -> ®Ÿs ; 855 ià( `¡¾’ ( deviû -> Çme ) > 0) { 856 ±r = deviû -> Çme ; 858 `ba2¡r (& deviû -> bdaddr , d¡addr ); 859 #iâdeà __TIZEN_PATCH__ 860 `g_¡rd–im™ ( d¡addr , ":", '-'); 862 ±r = d¡addr ; 865 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ±r ); 867  TRUE ; 868 } } 870  $£t_®Ÿs ( GDBusP’dšgPrÝ”tyS‘ id , cÚ¡ * ®Ÿs , 871 * d©a ) 873  btd_deviû * deviû = d©a ; 876 ià(( deviû -> ®Ÿs =ð NULL && `g_¡r_equ® (alias, "")) || 877 `g_¡rcmp0 ( deviû -> ®Ÿs ,‡lias) == 0) { 878 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 882 `g_ä“ ( deviû -> ®Ÿs ); 883 deviû -> ®Ÿs = `g_¡r_equ® ×lŸs, ""è? NULL : `g_¡rdup (alias); 885 `¡Üe_deviû_šfo ( deviû ); 887 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 888 DEVICE_INTERFACE , "Alias"); 890 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 891 } } 893  $dev_´Ý”ty_£t_®Ÿs (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 894 DBusMes§geI‹r * v®ue , 895 GDBusP’dšgPrÝ”tyS‘ id , * d©a ) 897 cÚ¡ * ®Ÿs ; 899 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( v®ue è!ð DBUS_TYPE_STRING ) { 900 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 901 ERROR_INTERFACE ".InvalidArguments", 906 `dbus_mes§ge_™”_g‘_basic ( v®ue , & ®Ÿs ); 908 `£t_®Ÿs ( id , ®Ÿs , d©a ); 909 } } 911  gboÞ—n $dev_´Ý”ty_exi¡s_þass (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 912 * d©a ) 914  btd_deviû * deviû = d©a ; 916  deviû -> þass != 0; 917 } } 919  gboÞ—n $dev_´Ý”ty_g‘_þass (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 920 DBusMes§geI‹r * ™” , * d©a ) 922  btd_deviû * deviû = d©a ; 924 ià( deviû -> þass == 0) 925  FALSE ; 927 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT32 , & deviû -> þass ); 929  TRUE ; 930 } } 932  gboÞ—n $g‘_­³¬ªû (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a , 933 ušt16_t * ­³¬ªû ) 935  btd_deviû * deviû = d©a ; 937 ià( `dev_´Ý”ty_exi¡s_þass ( ´Ý”ty , d©a )) 938  FALSE ; 940 ià( deviû -> ­³¬ªû ) { 941 * ­³¬ªû = deviû ->appearance; 942  TRUE ; 945  FALSE ; 946 } } 948  gboÞ—n $dev_´Ý”ty_exi¡s_­³¬ªû ( 949 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 951 ušt16_t ­³¬ªû ; 953  `g‘_­³¬ªû ( ´Ý”ty , d©a , & ­³¬ªû ); 954 } } 956  gboÞ—n $dev_´Ý”ty_g‘_­³¬ªû (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 957 DBusMes§geI‹r * ™” , * d©a ) 959 ušt16_t ­³¬ªû ; 961 ià(! `g‘_­³¬ªû ( ´Ý”ty , d©a , & ­³¬ªû )) 962  FALSE ; 964 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT16 , & ­³¬ªû ); 966  TRUE ; 967 } } 969 cÚ¡ * $g‘_icÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 971  btd_deviû * deviû = d©a ; 972 cÚ¡ * icÚ = NULL ; 973 ušt16_t ­³¬ªû ; 975 ià( deviû -> þass != 0) 976 icÚ = `þass_to_icÚ ( deviû -> þass ); 977 ià( `g‘_­³¬ªû ( ´Ý”ty , d©a , & ­³¬ªû )) 978 icÚ = `g­_­³¬ªû_to_icÚ ( ­³¬ªû ); 980  icÚ ; 981 } } 983  gboÞ—n $dev_´Ý”ty_exi¡s_icÚ ( 984 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 986  `g‘_icÚ ( ´Ý”ty , d©a è!ð NULL ; 987 } } 989  gboÞ—n $dev_´Ý”ty_g‘_icÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 990 DBusMes§geI‹r * ™” , * d©a ) 992 cÚ¡ * icÚ ; 994 icÚ = `g‘_icÚ ( ´Ý”ty , d©a ); 995 ià( icÚ =ð NULL ) 996  FALSE ; 998 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & icÚ ); 1000  TRUE ; 1001 } } 1003  gboÞ—n $dev_´Ý”ty_g‘_·œed (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1004 DBusMes§geI‹r * ™” , * d©a ) 1006  btd_deviû * dev = d©a ; 1010 ušt8_t v® = `deviû_g‘_·œed_¡©e ( dev ); 1012 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BYTE , & v® ); 1014 dbus_boÞ_t v® ; 1016 ià( dev -> b»dr_¡©e . ·œed || dev-> Ë_¡©e .paired) 1017 v® = TRUE ; 1019 v® = FALSE ; 1021 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v® ); 1024  TRUE ; 1025 } } 1027  gboÞ—n $dev_´Ý”ty_g‘_Ëgacy (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1028 DBusMes§geI‹r * ™” , * d©a ) 1030  btd_deviû * deviû = d©a ; 1031 dbus_boÞ_t v® = deviû -> Ëgacy ; 1033 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v® ); 1035  TRUE ; 1036 } } 1038  gboÞ—n $dev_´Ý”ty_g‘_rssi (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1039 DBusMes§geI‹r * ™” , * d©a ) 1041  btd_deviû * dev = d©a ; 1042 dbus_št16_t v® = dev -> rssi ; 1044 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_INT16 , & v® ); 1046  TRUE ; 1047 } } 1049  gboÞ—n $dev_´Ý”ty_exi¡s_rssi (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1050 * d©a ) 1052  btd_deviû * dev = d©a ; 1054 ià( dev -> rssi == 0) 1055  FALSE ; 1057  TRUE ; 1058 } } 1060  gboÞ—n $dev_´Ý”ty_g‘_Œu¡ed (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1061 DBusMes§geI‹r * ™” , * d©a ) 1063  btd_deviû * deviû = d©a ; 1064 gboÞ—n v® = `deviû_is_Œu¡ed ( deviû ); 1066 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v® ); 1068  TRUE ; 1069 } } 1071  $£t_Œu¡ ( GDBusP’dšgPrÝ”tyS‘ id , gboÞ—n v®ue , * d©a ) 1073  btd_deviû * deviû = d©a ; 1075 `btd_deviû_£t_Œu¡ed ( deviû , v®ue ); 1077 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 1078 } } 1080  $dev_´Ý”ty_£t_Œu¡ed (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1081 DBusMes§geI‹r * v®ue , 1082 GDBusP’dšgPrÝ”tyS‘ id , * d©a ) 1084 dbus_boÞ_t b ; 1086 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( v®ue è!ð DBUS_TYPE_BOOLEAN ) { 1087 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 1088 ERROR_INTERFACE ".InvalidArguments", 1093 `dbus_mes§ge_™”_g‘_basic ( v®ue , & b ); 1095 `£t_Œu¡ ( id , b , d©a ); 1096 } } 1098  gboÞ—n $dev_´Ý”ty_g‘_blocked (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1099 DBusMes§geI‹r * ™” , * d©a ) 1101  btd_deviû * deviû = d©a ; 1103 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , 1104 & deviû -> blocked ); 1106  TRUE ; 1107 } } 1109  $£t_blocked ( GDBusP’dšgPrÝ”tyS‘ id , gboÞ—n v®ue , * d©a ) 1111  btd_deviû * deviû = d©a ; 1112  ”r ; 1114 ià( v®ue ) 1115 ”r = `deviû_block ( deviû , FALSE ); 1117 ”r = `deviû_unblock ( deviû , FALSE , FALSE); 1119 - ”r ) { 1121 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 1123  EINVAL : 1124 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , ERROR_INTERFACE ".Failed", 1128 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , ERROR_INTERFACE ".Failed", 1129 `¡»¼Ü (- ”r )); 1132 } } 1135  $dev_´Ý”ty_£t_blocked (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1136 DBusMes§geI‹r * v®ue , 1137 GDBusP’dšgPrÝ”tyS‘ id , * d©a ) 1139 dbus_boÞ_t b ; 1141 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( v®ue è!ð DBUS_TYPE_BOOLEAN ) { 1142 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 1143 ERROR_INTERFACE ".InvalidArguments", 1148 `dbus_mes§ge_™”_g‘_basic ( v®ue , & b ); 1150 `£t_blocked ( id , b , d©a ); 1151 } } 1153 #ifdeà __TIZEN_PATCH__ 1155  ušt8_t $deviû_g‘_cÚÃùed_¡©e ( btd_deviû * deviû ) 1157 ià( deviû -> b»dr_¡©e . cÚÃùed && deviû-> Ë_¡©e .connected) 1158  DEV_CONNECTED_BREDR_LE ; 1159 ià( deviû -> b»dr_¡©e . cÚÃùed ) 1160  DEV_CONNECTED_BREDR ; 1161 ià( deviû -> Ë_¡©e . cÚÃùed ) 1162  DEV_CONNECTED_LE ; 1164  DEV_CONNECTED_NONE ; 1165 } } 1168  gboÞ—n $dev_´Ý”ty_g‘_·ylßd (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1169 DBusMes§geI‹r * ™” , * d©a ) 1171  btd_deviû * dev = d©a ; 1172 dbus_ušt16_t ·ylßd_timeout = dev -> auth_·ylßd_timeout ; 1174 `dbus_mes§ge_™”_­³nd_basic ( ™” , 1175 DBUS_TYPE_UINT16 , & ·ylßd_timeout ); 1177  TRUE ; 1178 } } 1180  gboÞ—n $dev_´Ý”ty_g‘_Ï¡_addr_ty³ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1181 DBusMes§geI‹r * ™” , * d©a ) 1183  btd_deviû * dev = d©a ; 1184 ušt8_t Ï¡_addr_ty³ = dev -> Ï¡_bdaddr_ty³ ; 1186 `dbus_mes§ge_™”_­³nd_basic ( ™” , 1187 DBUS_TYPE_BYTE , & Ï¡_addr_ty³ ); 1189  TRUE ; 1190 } } 1194  gboÞ—n $dev_´Ý”ty_g‘_cÚÃùed (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1195 DBusMes§geI‹r * ™” , * d©a ) 1197  btd_deviû * dev = d©a ; 1201 ušt8_t cÚÃùed = `deviû_g‘_cÚÃùed_¡©e ( dev ); 1203 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BYTE , 1204 & cÚÃùed ); 1206 dbus_boÞ_t cÚÃùed ; 1208 ià( dev -> b»dr_¡©e . cÚÃùed || dev-> Ë_¡©e .connected) 1209 cÚÃùed = TRUE ; 1211 cÚÃùed = FALSE ; 1213 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & cÚÃùed ); 1216  TRUE ; 1217 } } 1219 #ifdeà __TIZEN_PATCH__ 1220  gboÞ—n $dev_´Ý”ty_g‘_g©t_cÚÃùed (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1221 DBusMes§geI‹r * ™” , * d©a ) 1223  btd_deviû * deviû = d©a ; 1224 dbus_boÞ_t g©t_cÚÃùed ; 1226 ià( deviû -> g©t_cÚÃùed ) 1227 g©t_cÚÃùed = TRUE ; 1229 g©t_cÚÃùed = FALSE ; 1231 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , 1232 & g©t_cÚÃùed ); 1234  TRUE ; 1235 } } 1238  gboÞ—n $dev_´Ý”ty_g‘_uuids (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1239 DBusMes§geI‹r * ™” , * d©a ) 1241  btd_deviû * dev = d©a ; 1242 DBusMes§geI‹r ’Œy ; 1243 GSLi¡ * l ; 1245 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1246 DBUS_TYPE_STRING_AS_STRING , & ’Œy ); 1248 ià( dev -> b»dr_¡©e . svc_»sÞved || dev-> Ë_¡©e .svc_resolved) 1249 l = dev -> uuids ; 1250 ià( dev -> eœ_uuids ) 1251 l = dev -> eœ_uuids ; 1253 l = dev -> uuids ; 1255 ; l !ð NULL ;† =†-> Ãxt ) 1256 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , 1257 & l -> d©a ); 1259 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ’Œy ); 1261  TRUE ; 1262 } } 1264  gboÞ—n $dev_´Ý”ty_g‘_mod®Ÿs (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1265 DBusMes§geI‹r * ™” , * d©a ) 1267  btd_deviû * deviû = d©a ; 1269 ià(! deviû -> mod®Ÿs ) 1270  FALSE ; 1272 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , 1273 & deviû -> mod®Ÿs ); 1275  TRUE ; 1276 } } 1278  gboÞ—n $dev_´Ý”ty_exi¡s_mod®Ÿs (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1279 * d©a ) 1281  btd_deviû * deviû = d©a ; 1283  deviû -> mod®Ÿs ? TRUE : FALSE ; 1284 } } 1286  gboÞ—n $dev_´Ý”ty_g‘_ad­‹r (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1287 DBusMes§geI‹r * ™” , * d©a ) 1289  btd_deviû * deviû = d©a ; 1290 cÚ¡ * ¡r = `ad­‹r_g‘_·th ( deviû -> ad­‹r ); 1292 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ¡r ); 1294  TRUE ; 1295 } } 1297 #ifdeà __TIZEN_PATCH__ 1298  gboÞ—n $dev_´Ý”ty_g‘_´im_£rviûs (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1299 DBusMes§geI‹r * ™” , * d©a ) 1301  btd_deviû * deviû = d©a ; 1302 gch¬ * ©Œib_d©a ; 1303 DBusMes§geI‹r ¬¿y ; 1304 GSLi¡ * l ; 1305 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1306 DBUS_TYPE_STRING_AS_STRING , 1307 & ¬¿y ); 1309  l = deviû -> ´im¬›s ;† !ð NULL ;† =†-> Ãxt ) { 1310  g©t_´im¬y * ´im¬y = l -> d©a ; 1312 `DBG ("start handle = 0x%04x,ƒnd grp handle = 0x%04x " 1313 "uuid: %s\n", ´im¬y -> ¿nge . ¡¬t ,…rim¬y->¿nge. ’d , 1314 ´im¬y -> uuid ); 1322 ©Œib_d©a = `g_¡rdup_´štf ("%04x""#""%04x""#""%s", 1323 ´im¬y -> ¿nge . ¡¬t ,´im¬y->¿nge. ’d ,´im¬y-> uuid ); 1325 `DBG ("©Œib_d©¨¡ršg: %s", ©Œib_d©a ); 1327 `dbus_mes§ge_™”_­³nd_basic (& ¬¿y , DBUS_TYPE_STRING , 1328 & ©Œib_d©a ); 1332 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ¬¿y ); 1334  TRUE ; 1335 } } 1337  gboÞ—n $´Ý”ty_g‘_æag (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1338 DBusMes§geI‹r * ™” , * u£r_d©a ) 1340  btd_deviû * deviû = u£r_d©a ; 1341 dbus_ušt16_t v® = deviû -> Ë_adv_d©a . æags ; 1343 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT16 , & v® ); 1345  TRUE ; 1346 } } 1348  gboÞ—n $´Ý”ty_g‘_mªuçùu»r_d©a_Ën (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1349 DBusMes§geI‹r * ™” , * u£r_d©a ) 1351  btd_deviû * deviû = u£r_d©a ; 1352 dbus_ušt16_t v® = deviû -> mªuçùu»r_d©a_Ën ; 1354 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT16 , & v® ); 1356  TRUE ; 1357 } } 1359  gboÞ—n $´Ý”ty_g‘_mªuçùu»r_d©a (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1360 DBusMes§geI‹r * ™” , * u£r_d©a ) 1362  btd_deviû * deviû = u£r_d©a ; 1363  ¡r [ DEV_MAX_MANUFACTURER_DATA_LEN ] = {0}; 1364 DBusMes§geI‹r ¬¿y ; 1366 `mem£t ( ¡r , 0, DEV_MAX_MANUFACTURER_DATA_LEN ); 1367 ià( deviû -> mªuçùu»r_d©a_Ën ) 1368 `memýy ( ¡r , deviû -> mªuçùu»r_d©a , 1369 deviû -> mªuçùu»r_d©a_Ën ); 1371 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1372 DBUS_TYPE_BYTE_AS_STRING , & ¬¿y ); 1374 `dbus_mes§ge_™”_­³nd_fixed_¬¿y (& ¬¿y , DBUS_TYPE_BYTE , 1375 & deviû -> mªuçùu»r_d©a , 1376 deviû -> mªuçùu»r_d©a_Ën ); 1378 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ¬¿y ); 1380  TRUE ; 1381 } } 1383 gboÞ—n $deviû_g‘_g©t_cÚÃùed (cÚ¡  btd_deviû * deviû ) 1385  deviû -> g©t_cÚÃùed ; 1386 } } 1389  gboÞ—n $discÚÃù_®l ( gpoš‹r u£r_d©a ) 1391  btd_deviû * deviû = u£r_d©a ; 1393 deviû -> discÚn_tim” = 0; 1395 ià( deviû -> b»dr_¡©e . cÚÃùed ) 1396 `btd_ad­‹r_discÚÃù_deviû ( deviû -> ad­‹r , &deviû-> bdaddr , 1397 BDADDR_BREDR ); 1399 ià( deviû -> Ë_¡©e . cÚÃùed ) 1400 `btd_ad­‹r_discÚÃù_deviû ( deviû -> ad­‹r , &deviû-> bdaddr , 1401 deviû -> bdaddr_ty³ ); 1403  FALSE ; 1404 } } 1406 #ifdeà BLUEZ5_GATT_CLIENT 1407 gboÞ—n $discÚÃù_Ë_deviû ( gpoš‹r u£r_d©a ) 1409  btd_deviû * deviû = u£r_d©a ; 1410 deviû -> discÚn_tim” = 0; 1412 ià( deviû -> Ë_¡©e . cÚÃùed ) { 1413 ià(! `btd_ad­‹r_discÚÃù_deviû ( deviû -> ad­‹r , 1414 & deviû -> bdaddr , BDADDR_LE_PUBLIC )) 1415  TRUE ; 1418  FALSE ; 1419 } } 1422  $deviû_block ( btd_deviû * deviû , gboÞ—n upd©e_Úly ) 1424  ”r = 0; 1426 ià( deviû -> blocked ) 1429 `discÚÃù_®l ( deviû ); 1431  deviû -> £rviûs !ð NULL ) { 1432  btd_£rviû * £rviû = deviû -> £rviûs -> d©a ; 1434 deviû -> £rviûs = `g_¦i¡_»move (deviû->£rviûs, £rviû ); 1435 `£rviû_»move ( £rviû ); 1438 ià(! upd©e_Úly ) { 1439 ià( deviû -> Ë ) 1440 ”r = `btd_ad­‹r_block_add»ss ( deviû -> ad­‹r , 1441 & deviû -> bdaddr , 1442 deviû -> bdaddr_ty³ ); 1443 ià(! ”r && deviû -> b»dr ) 1444 ”r = `btd_ad­‹r_block_add»ss ( deviû -> ad­‹r , 1445 & deviû -> bdaddr , 1446 BDADDR_BREDR ); 1449 ià( ”r < 0) 1450  ”r ; 1452 deviû -> blocked = TRUE ; 1454 `¡Üe_deviû_šfo ( deviû ); 1456 `btd_deviû_£t_‹mpܬy ( deviû , FALSE ); 1458 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 1459 DEVICE_INTERFACE , "Blocked"); 1462 } } 1464  $deviû_unblock ( btd_deviû * deviû , gboÞ—n sž’t , 1465 gboÞ—n upd©e_Úly ) 1467  ”r = 0; 1469 ià(! deviû -> blocked ) 1472 ià(! upd©e_Úly ) { 1473 ià( deviû -> Ë ) 1474 ”r = `btd_ad­‹r_unblock_add»ss ( deviû -> ad­‹r , 1475 & deviû -> bdaddr , 1476 deviû -> bdaddr_ty³ ); 1477 ià(! ”r && deviû -> b»dr ) 1478 ”r = `btd_ad­‹r_unblock_add»ss ( deviû -> ad­‹r , 1479 & deviû -> bdaddr , 1480 BDADDR_BREDR ); 1483 ià( ”r < 0) 1484  ”r ; 1486 deviû -> blocked = FALSE ; 1488 `¡Üe_deviû_šfo ( deviû ); 1490 ià(! sž’t ) { 1491 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 1492 DEVICE_INTERFACE , "Blocked"); 1493 `deviû_´obe_´ofžes ( deviû , deviû-> uuids ); 1497 } } 1499  $discov”_£rviûs_»q_ex™ ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 1501  brow£_»q * »q = u£r_d©a ; 1503 `DBG ("DiscoverServices„equestorƒxited"); 1505 `brow£_»que¡_ÿnûl ( »q ); 1506 } } 1508  $bÚdšg_»que¡_ÿnûl ( bÚdšg_»q * bÚdšg ) 1510  btd_deviû * deviû = bÚdšg ->device; 1511  btd_ad­‹r * ad­‹r = deviû ->adapter; 1513 `ad­‹r_ÿnûl_bÚdšg ( ad­‹r , & deviû -> bdaddr , deviû-> bdaddr_ty³ ); 1514 } } 1516  $dev_discÚn_£rviû ( gpoš‹r a , gpoš‹¸ b ) 1518 `btd_£rviû_discÚÃù ( a ); 1519 } } 1521  $deviû_»que¡_discÚÃù ( btd_deviû * deviû , DBusMes§ge * msg ) 1523 ià( deviû -> bÚdšg ) 1524 `bÚdšg_»que¡_ÿnûl ( deviû -> bÚdšg ); 1526 ià( deviû -> brow£ ) 1527 `brow£_»que¡_ÿnûl ( deviû -> brow£ ); 1529 ià( deviû -> cÚÃù ) { 1530 DBusMes§ge * »¶y = `btd_”rÜ_çžed ( deviû -> cÚÃù , 1532 `g_dbus_£nd_mes§ge ( dbus_cÚn , »¶y ); 1533 `dbus_mes§ge_uÄef ( deviû -> cÚÃù ); 1534 deviû -> cÚÃù = NULL ; 1537 ià( `btd_deviû_is_cÚÃùed ( deviû è&& msg ) 1538 deviû -> discÚÃùs = `g_¦i¡_­³nd (device->disconnects, 1539 `dbus_mes§ge_»f ( msg )); 1541 ià( deviû -> discÚn_tim” ) 1544 `g_¦i¡_fÜ—ch ( deviû -> £rviûs , dev_discÚn_£rviû , NULL ); 1546 `g_¦i¡_ä“ ( deviû -> ³ndšg ); 1547 deviû -> ³ndšg = NULL ; 1549  deviû -> w©ches ) { 1550  btd_discÚÃù_d©a * d©a = deviû -> w©ches ->data; 1552 ià( d©a -> w©ch ) 1554 d©a -> `w©ch ( deviû , deviû-> ‹mpܬy , 1555 d©a -> u£r_d©a ); 1558 ià(! `g_¦i¡_fšd ( deviû -> w©ches , d©a )) 1561 deviû -> w©ches = `g_¦i¡_»move (deviû->w©ches, d©a ); 1562 `g_ä“ ( d©a ); 1565 ià(! `btd_deviû_is_cÚÃùed ( deviû )) { 1566 ià( msg ) 1567 `g_dbus_£nd_»¶y ( dbus_cÚn , msg , DBUS_TYPE_INVALID ); 1571 deviû -> discÚn_tim” = `g_timeout_add_£cÚds ( DISCONNECT_TIMER , 1572 discÚÃù_®l , 1573 deviû ); 1574 } } 1576  $deviû_£t_auto_cÚÃù ( btd_deviû * deviû , gboÞ—n ’abË ) 1578  addr [18]; 1580 ià(! deviû || !deviû-> Ë ) 1583 `ba2¡r (& deviû -> bdaddr , addr ); 1585 `DBG ("% autØcÚÃù: %d", addr , ’abË ); 1587 ià( deviû -> auto_cÚÃù =ð ’abË ) 1590 deviû -> auto_cÚÃù = ’abË ; 1593 ià( ’abË =ð FALSE ) { 1594 `ad­‹r_cÚÃù_li¡_»move ( deviû -> ad­‹r , device); 1595 `ad­‹r_auto_cÚÃù_»move ( deviû -> ad­‹r , device); 1600 `ad­‹r_auto_cÚÃù_add ( deviû -> ad­‹r , device); 1602 ià( deviû -> ©Œib ) { 1603 `DBG ("Already connected"); 1607 `ad­‹r_cÚÃù_li¡_add ( deviû -> ad­‹r , device); 1608 } } 1610  DBusMes§ge * $dev_discÚÃù ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 1611 * u£r_d©a ) 1613  btd_deviû * deviû = u£r_d©a ; 1619 ià( deviû -> auto_cÚÃù ) { 1620 deviû -> di§bË_auto_cÚÃù = TRUE ; 1621 `deviû_£t_auto_cÚÃù ( deviû , FALSE ); 1624 `deviû_»que¡_discÚÃù ( deviû , msg ); 1626  NULL ; 1627 } } 1629  $cÚÃù_Ãxt ( btd_deviû * dev ) 1631  btd_£rviû * £rviû ; 1632  ”r = - ENOENT ; 1634  dev -> ³ndšg ) { 1635 £rviû = dev -> ³ndšg -> d©a ; 1637 ià( `btd_£rviû_cÚÃù ( £rviû ) == 0) 1640 dev -> ³ndšg = `g_¦i¡_d–‘e_lšk (dev->pending, dev->pending); 1643  ”r ; 1644 } } 1646  $deviû_´ofže_cÚÃùed ( btd_deviû * dev , 1647  btd_´ofže * ´ofže ,  ”r ) 1649  btd_£rviû * ³ndšg ; 1650 GSLi¡ * l ; 1652 `DBG ("% % (%d)", ´ofže -> Çme , `¡»¼Ü (- ”r ), -err); 1654 ià(! ”r ) 1655 `btd_deviû_£t_‹mpܬy ( dev , FALSE ); 1657 ià( dev -> ³ndšg =ð NULL ) 1660 ià(! `btd_deviû_is_cÚÃùed ( dev )) { 1661 - ”r ) { 1662  EHOSTDOWN : 1663  EHOSTUNREACH : 1664  ECONNABORTED : 1665  dÚe ; 1670 ³ndšg = dev ->³ndšg-> d©a ; 1671 l = `fšd_£rviû_w™h_´ofže ( dev -> ³ndšg , ´ofže ); 1672 ià( l !ð NULL ) 1673 dev -> ³ndšg = `g_¦i¡_d–‘e_lšk (dev->³ndšg, l ); 1679 ià( ´ofže !ð `btd_£rviû_g‘_´ofže ( ³ndšg )) 1682 ià( `cÚÃù_Ãxt ( dev ) == 0) 1685 dÚe : 1686 `g_¦i¡_ä“ ( dev -> ³ndšg ); 1687 dev -> ³ndšg = NULL ; 1689 ià(! dev -> cÚÃù ) 1692 ià(! ”r && `dbus_mes§ge_is_m‘hod_ÿÎ ( dev -> cÚÃù , DEVICE_INTERFACE , 1694 dev -> g’”®_cÚÃù = TRUE ; 1696 `DBG ("»tuºšg„e¥Ú£Ø%s", `dbus_mes§ge_g‘_£nd” ( dev -> cÚÃù )); 1698 l = `fšd_£rviû_w™h_¡©e ( dev -> £rviûs , BTD_SERVICE_STATE_CONNECTED ); 1700 ià( ”r && l =ð NULL ) 1701 `g_dbus_£nd_mes§ge ( dbus_cÚn , 1702 `btd_”rÜ_çžed ( dev -> cÚÃù , `¡»¼Ü (- ”r ))); 1705 ià( dev -> b»dr && !dev-> svc_»äeshed ) 1706 `deviû_brow£_sdp ( dev , NULL ); 1707 #ifdeà __TIZEN_PATCH__ 1708 ià( ”r ) 1709 `g_dbus_£nd_mes§ge ( dbus_cÚn , 1710 `btd_”rÜ_çžed ( dev -> cÚÃù , `¡»¼Ü (- ”r ))); 1712 `g_dbus_£nd_»¶y ( dbus_cÚn , dev -> cÚÃù , DBUS_TYPE_INVALID ); 1714 `g_dbus_£nd_»¶y ( dbus_cÚn , dev -> cÚÃù , DBUS_TYPE_INVALID ); 1718 `dbus_mes§ge_uÄef ( dev -> cÚÃù ); 1719 dev -> cÚÃù = NULL ; 1720 } } 1722  $deviû_add_eœ_uuids ( btd_deviû * dev , GSLi¡ * uuids ) 1724 GSLi¡ * l ; 1725 boÞ added = çl£ ; 1727 ià( dev -> b»dr_¡©e . svc_»sÞved || dev-> Ë_¡©e .svc_resolved) 1730  l = uuids ;† !ð NULL ;† =†-> Ãxt ) { 1731 cÚ¡ * ¡r = l -> d©a ; 1732 ià( `g_¦i¡_fšd_cu¡om ( dev -> eœ_uuids , ¡r , bt_uuid_¡rcmp )) 1734 added = Œue ; 1735 dev -> eœ_uuids = `g_¦i¡_­³nd (dev->eœ_uuids, `g_¡rdup ( ¡r )); 1738 ià( added ) 1739 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , dev -> ·th , 1740 DEVICE_INTERFACE , "UUIDs"); 1741 } } 1743  btd_£rviû * $fšd_cÚÃùabË_£rviû ( btd_deviû * dev , 1744 cÚ¡ * uuid ) 1746 GSLi¡ * l ; 1747 #ifdeà __TIZEN_PATCH__ 1748  btd_£rviû * s = NULL ; 1750  l = dev -> £rviûs ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 1751  btd_£rviû * £rviû = l -> d©a ; 1752  btd_´ofže * p = `btd_£rviû_g‘_´ofže ( £rviû ); 1754 ià(! p -> cÚÃù || !p-> »mÙe_uuid ) 1757 #iâdeà __TIZEN_PATCH__ 1758 ià( `¡rÿ£cmp ( uuid , p -> »mÙe_uuid ) == 0) 1759  £rviû ; 1761 ià( `¡rÿ£cmp ( uuid , p -> »mÙe_uuid ) == 0) { 1762 s = £rviû ; 1763 ià( `ext_´ofže_is_»gi¡”ed_as_þ›Á_rÞe ( p è=ð TRUE ) { 1764  £rviû ; 1771 #ifdeà __TIZEN_PATCH__ 1772 ià( s ) 1773  s ; 1776  NULL ; 1777 } } 1779  $£rviû_´io_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 1781  btd_´ofže * p1 = `btd_£rviû_g‘_´ofže ( a ); 1782  btd_´ofže * p2 = `btd_£rviû_g‘_´ofže ( b ); 1784  p2 -> ´iÜ™y - p1 ->priority; 1785 } } 1787  GSLi¡ * $ü—‹_³ndšg_li¡ ( btd_deviû * dev , cÚ¡ * uuid ) 1789  btd_£rviû * £rviû ; 1790  btd_´ofže * p ; 1791 GSLi¡ * l ; 1792 #ifdeà __TIZEN_PATCH__ 1793 boÞ hs_hf_v”ify = FALSE ; 1796 ià( uuid ) { 1797 £rviû = `fšd_cÚÃùabË_£rviû ( dev , uuid ); 1798 ià( £rviû ) 1799  `g_¦i¡_´•’d ( dev -> ³ndšg , £rviû ); 1800 #ifdeà __TIZEN_PATCH__ 1801 ià(( £rviû =ð NULL ) && 1802 ( `g_¡rcmp0 ( uuid , HFP_HS_UUID ) == 0)) { 1803 `DBG ("HFP service‚ot found check for HSP service"); 1804 £rviû = `fšd_cÚÃùabË_£rviû ( dev , HSP_HS_UUID ); 1805 ià( £rviû ) 1806  `g_¦i¡_´•’d ( dev -> ³ndšg , £rviû ); 1809  dev -> ³ndšg ; 1812  l = dev -> £rviûs ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 1813 £rviû = l -> d©a ; 1814 p = `btd_£rviû_g‘_´ofže ( £rviû ); 1816 #ifdeà __TIZEN_PATCH__ 1817 `DBG ("´ofžuuid %s", p -> »mÙe_uuid ); 1818 ià( `g_¡rcmp0 ( p -> »mÙe_uuid , HSP_HS_UUID ) == 0) { 1819 `DBG ("HSP service is found check for HFP service"); 1820  btd_£rviû * £rviû ; 1821  btd_´ofže * p ; 1822 GSLi¡ * h ; 1824  h = dev -> £rviûs ; h !ð NULL ; h = `g_¦i¡_Ãxt (h)) { 1825 £rviû = h -> d©a ; 1826 p = `btd_£rviû_g‘_´ofže ( £rviû ); 1828 ià( `g_¡rcmp0 ( p -> »mÙe_uuid , HFP_HS_UUID ) == 0) { 1829 `DBG ("HFP found,ignore HSP "); 1830 hs_hf_v”ify = TRUE ; 1834 ià( hs_hf_v”ify ) 1838 ià(! p -> auto_cÚÃù ) 1841 ià( `g_¦i¡_fšd ( dev -> ³ndšg , £rviû )) 1844 ià( `btd_£rviû_g‘_¡©e ( £rviû ) != 1845 BTD_SERVICE_STATE_DISCONNECTED ) 1848 dev -> ³ndšg = `g_¦i¡_š£¹_sÜ‹d (dev->³ndšg, £rviû , 1849 £rviû_´io_cmp ); 1852  dev -> ³ndšg ; 1853 } } 1855  $btd_deviû_cÚÃù_£rviûs ( btd_deviû * dev , GSLi¡ * £rviûs ) 1857 GSLi¡ * l ; 1859 ià( dev -> ³ndšg || dev-> cÚÃù || dev-> brow£ ) 1860  - EBUSY ; 1862 ià(! `btd_ad­‹r_g‘_pow”ed ( dev -> ad­‹r )) 1863  - ENETDOWN ; 1865 ià(! dev -> b»dr_¡©e . svc_»sÞved ) 1866  - ENOENT ; 1868  l = £rviûs ;†;† = `g_¦i¡_Ãxt (l)) { 1869  btd_£rviû * £rviû = l -> d©a ; 1871 dev -> ³ndšg = `g_¦i¡_­³nd (dev->pending, 1872 `btd_£rviû_»f ( £rviû )); 1875  `cÚÃù_Ãxt ( dev ); 1876 } } 1878  DBusMes§ge * $cÚÃù_´ofžes ( btd_deviû * dev , ušt8_t bdaddr_ty³ , 1879 DBusMes§ge * msg , cÚ¡ * uuid ) 1881  b—»r_¡©e * ¡©e = `g‘_¡©e ( dev , bdaddr_ty³ ); 1882  ”r ; 1884 `DBG ("% %s, cl›Á %s", dev -> ·th , uuid ? uuid : "(all)", 1885 `dbus_mes§ge_g‘_£nd” ( msg )); 1887 #ifdeà __TIZEN_PATCH__ 1888 ià( dev -> ³ndšg || dev-> cÚÃù ) 1889  `btd_”rÜ_š_´og»ss ( msg ); 1891 ià( dev -> ³ndšg || dev-> cÚÃù || dev-> brow£ ) 1892  `btd_”rÜ_š_´og»ss ( msg ); 1895 ià(! `btd_ad­‹r_g‘_pow”ed ( dev -> ad­‹r )) 1896  `btd_”rÜ_nÙ_»ady ( msg ); 1898 `btd_deviû_£t_‹mpܬy ( dev , FALSE ); 1900 ià(! ¡©e -> svc_»sÞved ) 1901  »sÞve_£rviûs ; 1903 dev -> ³ndšg = `ü—‹_³ndšg_li¡ (dev, uuid ); 1904 ià(! dev -> ³ndšg ) { 1905 ià( dev -> svc_»äeshed ) { 1906 ià( `fšd_£rviû_w™h_¡©e ( dev -> £rviûs , 1907 BTD_SERVICE_STATE_CONNECTED )) 1908  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 1910  `btd_”rÜ_nÙ_avažabË ( msg ); 1913  »sÞve_£rviûs ; 1916 ”r = `cÚÃù_Ãxt ( dev ); 1917 ià( ”r < 0) 1918  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 1920 dev -> cÚÃù = `dbus_mes§ge_»f ( msg ); 1922  NULL ; 1924 »sÞve_£rviûs : 1925 `DBG ("ResÞvšg s”viû fÜ %s", dev -> ·th ); 1927 ià( bdaddr_ty³ =ð BDADDR_BREDR ) 1928 ”r = `deviû_brow£_sdp ( dev , msg ); 1930 ”r = `deviû_brow£_g©t ( dev , msg ); 1931 ià( ”r < 0) 1932  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 1934  NULL ; 1935 } } 1937  #NVAL_TIME (( time_t è-1) ) 1938  #SEEN_TRESHHOLD 300 ) 1940  ušt8_t $£Ëù_cÚn_b—»r ( btd_deviû * dev ) 1942 time_t b»dr_Ï¡ = NVAL_TIME , Ë_Ï¡ = NVAL_TIME; 1943 time_t cu¼’t = `time ( NULL ); 1945 ià( dev -> b»dr_£’ ) { 1946 b»dr_Ï¡ = cu¼’t - dev -> b»dr_£’ ; 1947 ià( b»dr_Ï¡ > SEEN_TRESHHOLD ) 1948 b»dr_Ï¡ = NVAL_TIME ; 1951 ià( dev -> Ë_£’ ) { 1952 Ë_Ï¡ = cu¼’t - dev -> Ë_£’ ; 1953 ià( Ë_Ï¡ > SEEN_TRESHHOLD ) 1954 Ë_Ï¡ = NVAL_TIME ; 1957 ià( dev -> b»dr && (!dev-> Ë || Ë_Ï¡ =ð NVAL_TIME )) 1958  BDADDR_BREDR ; 1960 ià( dev -> Ë && (!dev-> b»dr || b»dr_Ï¡ =ð NVAL_TIME )) 1961  dev -> bdaddr_ty³ ; 1963 ià( b»dr_Ï¡ < Ë_Ï¡ ) 1964  BDADDR_BREDR ; 1966  dev -> bdaddr_ty³ ; 1967 } } 1969  DBusMes§ge * $dev_cÚÃù ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 1970 * u£r_d©a ) 1972  btd_deviû * dev = u£r_d©a ; 1973 ušt8_t bdaddr_ty³ ; 1975 ià( dev -> b»dr_¡©e . cÚÃùed ) 1976 bdaddr_ty³ = dev ->bdaddr_type; 1977 ià( dev -> Ë_¡©e . cÚÃùed && dev-> b»dr ) 1978 bdaddr_ty³ = BDADDR_BREDR ; 1980 bdaddr_ty³ = `£Ëù_cÚn_b—»r ( dev ); 1982 ià( bdaddr_ty³ !ð BDADDR_BREDR ) { 1983  ”r ; 1985 ià( dev -> Ë_¡©e . cÚÃùed ) 1986  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 1988 `btd_deviû_£t_‹mpܬy ( dev , FALSE ); 1990 ià( dev -> di§bË_auto_cÚÃù ) { 1991 dev -> di§bË_auto_cÚÃù = FALSE ; 1992 `deviû_£t_auto_cÚÃù ( dev , TRUE ); 1995 ”r = `deviû_cÚÃù_Ë ( dev ); 1996 ià( ”r < 0) 1997  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 1999 dev -> cÚÃù = `dbus_mes§ge_»f ( msg ); 2001  NULL ; 2004  `cÚÃù_´ofžes ( dev , bdaddr_ty³ , msg , NULL ); 2005 } } 2007  DBusMes§ge * $cÚÃù_´ofže ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 2008 * u£r_d©a ) 2010  btd_deviû * dev = u£r_d©a ; 2011 cÚ¡ * ·‰”n ; 2012 * uuid ; 2013 DBusMes§ge * »¶y ; 2015 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & ·‰”n , 2016 DBUS_TYPE_INVALID )) 2017  `btd_”rÜ_šv®id_¬gs ( msg ); 2019 uuid = `bt_Çme2¡ršg ( ·‰”n ); 2020 »¶y = `cÚÃù_´ofžes ( dev , BDADDR_BREDR , msg , uuid ); 2021 `ä“ ( uuid ); 2023  »¶y ; 2024 } } 2026  $deviû_´ofže_discÚÃùed ( btd_deviû * dev , 2027  btd_´ofže * ´ofže ,  ”r ) 2029 ià(! dev -> discÚÃù ) 2032 ià( ”r ) 2033 `g_dbus_£nd_mes§ge ( dbus_cÚn , 2034 `btd_”rÜ_çžed ( dev -> discÚÃù , 2035 `¡»¼Ü (- ”r ))); 2037 `g_dbus_£nd_»¶y ( dbus_cÚn , dev -> discÚÃù , 2038 DBUS_TYPE_INVALID ); 2040 `dbus_mes§ge_uÄef ( dev -> discÚÃù ); 2041 dev -> discÚÃù = NULL ; 2042 } } 2044  DBusMes§ge * $discÚÃù_´ofže ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 2045 * u£r_d©a ) 2047  btd_deviû * dev = u£r_d©a ; 2048  btd_£rviû * £rviû ; 2049 cÚ¡ * ·‰”n ; 2050 * uuid ; 2051  ”r ; 2053 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & ·‰”n , 2054 DBUS_TYPE_INVALID )) 2055  `btd_”rÜ_šv®id_¬gs ( msg ); 2057 uuid = `bt_Çme2¡ršg ( ·‰”n ); 2058 ià( uuid =ð NULL ) 2059  `btd_”rÜ_šv®id_¬gs ( msg ); 2061 £rviû = `fšd_cÚÃùabË_£rviû ( dev , uuid ); 2062 #ifdeà __TIZEN_PATCH__ 2063 ià(( £rviû =ð NULL è&& ( `g_¡rcmp0 ( uuid , HFP_HS_UUID ) == 0)) { 2064 `DBG ("HFP service is‚ot found check for HSP service"); 2065 £rviû = `fšd_cÚÃùabË_£rviû ( dev , HSP_HS_UUID ); 2068 `ä“ ( uuid ); 2070 ià(! £rviû ) 2071  `btd_”rÜ_šv®id_¬gs ( msg ); 2073 ià( dev -> discÚÃù ) 2074  `btd_”rÜ_š_´og»ss ( msg ); 2076 dev -> discÚÃù = `dbus_mes§ge_»f ( msg ); 2078 ”r = `btd_£rviû_discÚÃù ( £rviû ); 2079 ià( ”r == 0) 2080  NULL ; 2082 `dbus_mes§ge_uÄef ( dev -> discÚÃù ); 2083 dev -> discÚÃù = NULL ; 2085 ià( ”r =ð- ENOTSUP ) 2086  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 2088  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 2089 } } 2091  $deviû_svc_»sÞved ( btd_deviû * dev , ušt8_t bdaddr_ty³ , 2092  ”r ) 2094  b—»r_¡©e * ¡©e = `g‘_¡©e ( dev , bdaddr_ty³ ); 2095 DBusMes§ge * »¶y ; 2096  brow£_»q * »q = dev -> brow£ ; 2098 `DBG ("% ”¸%d", dev -> ·th , ”r ); 2100 ¡©e -> svc_»sÞved = Œue ; 2101 dev -> brow£ = NULL ; 2107 ià( ¡©e -> cÚÃùed ) 2108 dev -> svc_»äeshed = Œue ; 2110 `g_¦i¡_ä“_fuÎ ( dev -> eœ_uuids , g_ä“ ); 2111 dev -> eœ_uuids = NULL ; 2113 ià( dev -> ³ndšg_·œed ) { 2114 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , dev -> ·th , 2115 DEVICE_INTERFACE , "Paired"); 2116 dev -> ³ndšg_·œed = çl£ ; 2119  dev -> svc_ÿÎbacks ) { 2120  svc_ÿÎback * cb = dev -> svc_ÿÎbacks -> d©a ; 2122 ià( cb -> idË_id > 0) 2123 `g_sourû_»move ( cb -> idË_id ); 2125 cb -> `func ( dev , ”r , cb-> u£r_d©a ); 2127 dev -> svc_ÿÎbacks = `g_¦i¡_d–‘e_lšk (dev->svc_callbacks, 2128 dev -> svc_ÿÎbacks ); 2129 `g_ä“ ( cb ); 2132 ià(! dev -> ‹mpܬy ) 2133 `¡Üe_deviû_šfo ( dev ); 2135 ià(! »q || !»q-> msg ) 2138 ià( `dbus_mes§ge_is_m‘hod_ÿÎ ( »q -> msg , DEVICE_INTERFACE , 2140 `g_dbus_£nd_»¶y ( dbus_cÚn , »q -> msg , DBUS_TYPE_INVALID ); 2144 ià( ”r ) { 2145 »¶y = `btd_”rÜ_çžed ( »q -> msg , `¡»¼Ü (- ”r )); 2146 `g_dbus_£nd_mes§ge ( dbus_cÚn , »¶y ); 2150 ià( `dbus_mes§ge_is_m‘hod_ÿÎ ( »q -> msg , DEVICE_INTERFACE , "Connect")) 2151 »¶y = `dev_cÚÃù ( dbus_cÚn , »q -> msg , dev ); 2152 ià( `dbus_mes§ge_is_m‘hod_ÿÎ ( »q -> msg , DEVICE_INTERFACE , 2154 »¶y = `cÚÃù_´ofže ( dbus_cÚn , »q -> msg , dev ); 2158 `dbus_mes§ge_uÄef ( »q -> msg ); 2159 »q -> msg = NULL ; 2161 ià( »¶y ) 2162 `g_dbus_£nd_mes§ge ( dbus_cÚn , »¶y ); 2163 } } 2165  bÚdšg_»q * $bÚdšg_»que¡_Ãw ( DBusMes§ge * msg , 2166  btd_deviû * deviû , 2167 ušt8_t bdaddr_ty³ , 2168  ag’t *agent) 2170  bÚdšg_»q * bÚdšg ; 2171  addr [18]; 2173 `ba2¡r (& deviû -> bdaddr , addr ); 2174 `DBG ("Reque¡šg bÚdšg fÜ %s", addr ); 2176 bÚdšg = `g_Ãw0 ( bÚdšg_»q , 1); 2178 bÚdšg -> msg = `dbus_mes§ge_»f (msg); 2179 bÚdšg -> bdaddr_ty³ = bdaddr_type; 2181 bÚdšg -> cb_™” = `btd_ad­‹r_pš_cb_™”_Ãw ( deviû -> ad­‹r ); 2186 `þock_g‘time ( CLOCK_MONOTONIC , & bÚdšg -> ©‹m±_¡¬t_time ); 2188 ià( ag’t ) 2189 bÚdšg -> ag’t = `ag’t_»f (agent); 2191  bÚdšg ; 2192 } } 2194  $deviû_bÚdšg_»¡¬t_tim” ( btd_deviû * deviû ) 2196 ià(! deviû || !deviû-> bÚdšg ) 2199 `þock_g‘time ( CLOCK_MONOTONIC , & deviû -> bÚdšg -> ©‹m±_¡¬t_time ); 2200 } } 2202  $bÚdšg_»que¡_¡Ý_tim” ( bÚdšg_»q * bÚdšg ) 2204  time¥ec cu¼’t ; 2206 `þock_g‘time ( CLOCK_MONOTONIC , & cu¼’t ); 2209 bÚdšg -> Ï¡_©‹m±_du¿tiÚ_ms = 2210 ( cu¼’t . tv_£c - bÚdšg -> ©‹m±_¡¬t_time .tv_sec) * 1000L + 2211 ( cu¼’t . tv_n£c - bÚdšg -> ©‹m±_¡¬t_time .tv_nsec) 2213 } } 2223  $deviû_bÚdšg_Ï¡_du¿tiÚ ( btd_deviû * deviû ) 2225  bÚdšg_»q * bÚdšg = deviû ->bonding; 2227 ià(! bÚdšg ) 2230  bÚdšg -> Ï¡_©‹m±_du¿tiÚ_ms ; 2231 } } 2233  $ü—‹_bÚd_»q_ex™ ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 2235  btd_deviû * deviû = u£r_d©a ; 2236  addr [18]; 2238 `ba2¡r (& deviû -> bdaddr , addr ); 2239 `DBG ("%s:„eque¡Üƒx™ed befÜbÚdšg wa com¶‘ed", addr ); 2241 ià( deviû -> authr ) 2242 `deviû_ÿnûl_auth’tiÿtiÚ ( deviû , FALSE ); 2244 ià( deviû -> bÚdšg ) { 2245 deviû -> bÚdšg -> li¡’”_id = 0; 2246 `deviû_»que¡_discÚÃù ( deviû , NULL ); 2248 } } 2250  DBusMes§ge * $·œ_deviû ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 2251 * d©a ) 2253  btd_deviû * deviû = d©a ; 2254  btd_ad­‹r * ad­‹r = deviû ->adapter; 2255 #iâdeà __TIZEN_PATCH__ 2256  b—»r_¡©e * ¡©e ; 2258 ušt8_t bdaddr_ty³ ; 2259 cÚ¡ * £nd” ; 2260  ag’t *agent; 2261  bÚdšg_»q * bÚdšg ; 2262 ušt8_t io_ÿp ; 2263 #ifdeà __TIZEN_PATCH__ 2264 ušt8_t cÚn_ty³ ; 2265 boÞ cÚÃù_Ë = FALSE ; 2267  ”r ; 2269 `btd_deviû_£t_‹mpܬy ( deviû , FALSE ); 2271 #ifdeà __TIZEN_PATCH__ 2272 ià( `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_BYTE , & cÚn_ty³ , 2273 DBUS_TYPE_INVALID è=ð FALSE ) 2275 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_INVALID )) 2277  `btd_”rÜ_šv®id_¬gs ( msg ); 2279 ià( deviû -> bÚdšg ) 2280  `btd_”rÜ_š_´og»ss ( msg ); 2282 #ifdeà __TIZEN_PATCH__ 2283 ià( cÚn_ty³ =ð DEV_CONN_DEFAULT ) { 2284 ià( `deviû_is_bÚded ( deviû , DEV_CONN_BREDR )) 2285  `btd_”rÜ_®»ady_exi¡s ( msg ); 2286 ià( `deviû_is_bÚded ( deviû , DEV_CONN_LE )) 2287  `btd_”rÜ_®»ady_exi¡s ( msg ); 2290 ià( `deviû_is_bÚded ( deviû , cÚn_ty³ )) 2291  `btd_”rÜ_®»ady_exi¡s ( msg ); 2293 bdaddr_ty³ = deviû ->bdaddr_type; 2295 ià( deviû -> b»dr_¡©e . bÚded ) 2296 bdaddr_ty³ = deviû ->bdaddr_type; 2297 ià( deviû -> Ë_¡©e . bÚded ) 2298 bdaddr_ty³ = BDADDR_BREDR ; 2300 bdaddr_ty³ = `£Ëù_cÚn_b—»r ( deviû ); 2302 ¡©e = `g‘_¡©e ( deviû , bdaddr_ty³ ); 2304 ià( ¡©e -> bÚded ) 2305  `btd_”rÜ_®»ady_exi¡s ( msg ); 2308 #ifdeà __TIZEN_PATCH__ 2309 ià(( `deviû_is_b»d¾e ( deviû è|| bdaddr_ty³ !ð BDADDR_BREDR ) && 2310 cÚn_ty³ =ð DEV_CONN_LE ) { 2311 `DBG ("Le Connect„equest"); 2312 cÚÃù_Ë = TRUE ; 2316 £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 2318 ag’t = `ag’t_g‘ ( £nd” ); 2319 ià( ag’t ) 2320 io_ÿp = `ag’t_g‘_io_ÿ·bž™y ( ag’t ); 2322 io_ÿp = IO_CAPABILITY_NOINPUTNOOUTPUT ; 2324 #ifdeà __TIZEN_PATCH__ 2325 ià((( cÚn_ty³ =ð DEV_CONN_DEFAULT && bdaddr_ty³ !ð BDADDR_BREDR ) || 2326 ( cÚÃù_Ë )è&& ! deviû -> Ë_¡©e . cÚÃùed ) 2327 bÚdšg = `bÚdšg_»que¡_Ãw ( msg , deviû , bdaddr_ty³ , ag’t ); 2329 bÚdšg = `bÚdšg_»que¡_Ãw ( msg , deviû , BDADDR_BREDR , ag’t ); 2331 bÚdšg = `bÚdšg_»que¡_Ãw ( msg , deviû , bdaddr_ty³ , ag’t ); 2334 ià( ag’t ) 2335 `ag’t_uÄef ( ag’t ); 2337 bÚdšg -> li¡’”_id = `g_dbus_add_discÚÃù_w©ch ( dbus_cÚn , 2338 £nd” , ü—‹_bÚd_»q_ex™ , 2339 deviû , NULL ); 2341 deviû -> bÚdšg = bonding; 2342 bÚdšg -> deviû = device; 2349 #ifdeà __TIZEN_PATCH__ 2350 ià((( cÚn_ty³ =ð DEV_CONN_DEFAULT && bdaddr_ty³ !ð BDADDR_BREDR ) || 2351 ( cÚÃù_Ë )è&& ! deviû -> Ë_¡©e . cÚÃùed ) 2352 ”r = `deviû_cÚÃù_Ë ( deviû ); 2354 ”r = `ad­‹r_ü—‹_bÚdšg ( ad­‹r , & deviû -> bdaddr , 2355 BDADDR_BREDR , io_ÿp ); 2357 ià( bdaddr_ty³ !ð BDADDR_BREDR ) { 2358 ià(! ¡©e -> cÚÃùed && `btd_Ë_cÚÃù_befÜe_·œšg ()) 2359 ”r = `deviû_cÚÃù_Ë ( deviû ); 2361 ”r = `ad­‹r_ü—‹_bÚdšg ( ad­‹r , & deviû -> bdaddr , 2362 deviû -> bdaddr_ty³ , 2363 io_ÿp ); 2365 ”r = `ad­‹r_ü—‹_bÚdšg ( ad­‹r , & deviû -> bdaddr , 2366 BDADDR_BREDR , io_ÿp ); 2370 ià( ”r < 0) 2371  `btd_”rÜ_çžed ( msg , `¡»¼Ü (- ”r )); 2373  NULL ; 2374 } } 2376  DBusMes§ge * $Ãw_auth’tiÿtiÚ_»tuº ( DBusMes§ge * msg , ušt8_t ¡©us ) 2378  ¡©us ) { 2379  MGMT_STATUS_SUCCESS : 2380  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2382  MGMT_STATUS_CONNECT_FAILED : 2383  `dbus_mes§ge_Ãw_”rÜ ( msg , 2384 ERROR_INTERFACE ".ConnectionAttemptFailed", 2386  MGMT_STATUS_TIMEOUT : 2387  `dbus_mes§ge_Ãw_”rÜ ( msg , 2388 ERROR_INTERFACE ".AuthenticationTimeout", 2390  MGMT_STATUS_BUSY : 2391  MGMT_STATUS_REJECTED : 2392  `dbus_mes§ge_Ãw_”rÜ ( msg , 2393 ERROR_INTERFACE ".AuthenticationRejected", 2395  MGMT_STATUS_CANCELLED : 2396  MGMT_STATUS_NO_RESOURCES : 2397  MGMT_STATUS_DISCONNECTED : 2398  `dbus_mes§ge_Ãw_”rÜ ( msg , 2399 ERROR_INTERFACE ".AuthenticationCanceled", 2402  `dbus_mes§ge_Ãw_”rÜ ( msg , 2403 ERROR_INTERFACE ".AuthenticationFailed", 2406 } } 2408  $bÚdšg_»que¡_ä“ ( bÚdšg_»q * bÚdšg ) 2410 ià(! bÚdšg ) 2413 ià( bÚdšg -> li¡’”_id ) 2414 `g_dbus_»move_w©ch ( dbus_cÚn , bÚdšg -> li¡’”_id ); 2416 ià( bÚdšg -> msg ) 2417 `dbus_mes§ge_uÄef ( bÚdšg -> msg ); 2419 ià( bÚdšg -> cb_™” ) 2420 `g_ä“ ( bÚdšg -> cb_™” ); 2422 ià( bÚdšg -> ag’t ) { 2423 `ag’t_ÿnûl ( bÚdšg -> ag’t ); 2424 `ag’t_uÄef ( bÚdšg -> ag’t ); 2425 bÚdšg -> ag’t = NULL ; 2428 ià( bÚdšg -> »Œy_tim” ) 2429 `g_sourû_»move ( bÚdšg -> »Œy_tim” ); 2431 ià( bÚdšg -> deviû ) 2432 bÚdšg -> deviû ->bÚdšg = NULL ; 2434 `g_ä“ ( bÚdšg ); 2435 } } 2437  $deviû_ÿnûl_bÚdšg ( btd_deviû * deviû , ušt8_t ¡©us ) 2439  bÚdšg_»q * bÚdšg = deviû ->bonding; 2440 DBusMes§ge * »¶y ; 2441  addr [18]; 2443 ià(! bÚdšg ) 2446 `ba2¡r (& deviû -> bdaddr , addr ); 2447 `DBG ("Cªûlšg bÚdšg„eque¡ fÜ %s", addr ); 2449 ià( deviû -> authr ) 2450 `deviû_ÿnûl_auth’tiÿtiÚ ( deviû , FALSE ); 2452 »¶y = `Ãw_auth’tiÿtiÚ_»tuº ( bÚdšg -> msg , ¡©us ); 2453 `g_dbus_£nd_mes§ge ( dbus_cÚn , »¶y ); 2455 `bÚdšg_»que¡_ÿnûl ( bÚdšg ); 2456 `bÚdšg_»que¡_ä“ ( bÚdšg ); 2457 } } 2459  DBusMes§ge * $ÿnûl_·œšg ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 2460 * d©a ) 2462  btd_deviû * deviû = d©a ; 2463  bÚdšg_»q * »q = deviû -> bÚdšg ; 2465 `DBG (""); 2467 ià(! »q ) 2468  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 2470 `deviû_ÿnûl_bÚdšg ( deviû , MGMT_STATUS_CANCELLED ); 2472  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2473 } } 2475 #ifdeà __TIZEN_PATCH__ 2476  DBusMes§ge * $»ad_rssi ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 2477 * u£r_d©a ) 2479  btd_deviû * deviû = u£r_d©a ; 2480 `DBG ("read_rssi"); 2481  ¡©us = `btd_ad­‹r_»ad_rssi ( deviû -> ad­‹r , 2482 & deviû -> bdaddr , device); 2483 ià( ¡©us != 0) 2484  `btd_”rÜ_çžed ( msg , "Unableo„ead„ssi"); 2486  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2487 } } 2489  DBusMes§ge * $l2ÿp_cÚn_·¿m_upd©e ( DBusCÚÃùiÚ * cÚn , 2490 DBusMes§ge * msg , * u£r_d©a ) 2492  btd_deviû * deviû = u£r_d©a ; 2493 ušt32_t š‹rv®_mš , š‹rv®_max , Ï‹ncy , time_out ; 2494  ¡©us ; 2496 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 2497 DBUS_TYPE_UINT32 , & š‹rv®_mš , 2498 DBUS_TYPE_UINT32 , & š‹rv®_max , 2499 DBUS_TYPE_UINT32 , & Ï‹ncy , 2500 DBUS_TYPE_UINT32 , & time_out , 2501 DBUS_TYPE_INVALID )) 2502  `btd_”rÜ_šv®id_¬gs ( msg ); 2504 ¡©us = `btd_ad­‹r_l2ÿp_cÚn_·¿m_upd©e ( deviû -> ad­‹r , 2505 & deviû -> bdaddr , š‹rv®_mš , 2506 š‹rv®_max , Ï‹ncy , time_out ); 2507 ià( ¡©us != 0) 2508  `btd_”rÜ_çžed ( msg , "Unableo update L2cap connection…arameter"); 2510  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2511 } } 2513  DBusMes§ge * $»ad_auth_·ylßd_timeout ( DBusCÚÃùiÚ * cÚn , 2514 DBusMes§ge * msg , * u£r_d©a ) 2516  btd_deviû * deviû = u£r_d©a ; 2517 `DBG ("read_auth_payload_timeout"); 2518  ¡©us = `btd_ad­‹r_»ad_auth_·ylßd_timeout ( deviû -> ad­‹r , 2519 & deviû -> bdaddr , device); 2520 ià( ¡©us != 0) 2521  `btd_”rÜ_çžed ( msg , 2524  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2525 } } 2527  DBusMes§ge * $g‘_´im_£rviûs ( DBusCÚÃùiÚ * cÚn , 2528 DBusMes§ge * msg , * u£r_d©a ) 2530  btd_deviû * deviû = u£r_d©a ; 2531 DBusMes§ge * »¶y ; 2532 cÚ¡ * deviû_·th ; 2533 DBusMes§geI‹r ™” , ¬¿y_™” ; 2534 GSLi¡ * l ; 2536 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2538 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 2540 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 2541 DBUS_TYPE_OBJECT_PATH_AS_STRING , & ¬¿y_™” ); 2542 deviû_·th = `deviû_g‘_·th ( deviû ); 2544  l = deviû -> ´im¬›s ;† !ð NULL ;† =†-> Ãxt ) { 2545  g©t_´im¬y * ´im¬y = l -> d©a ; 2546 gch¬ * ©Œib_d©a ; 2554 ©Œib_d©a = `g_¡rdup_´štf ("%s/£rviû%04x", deviû_·th , 2555 ´im¬y -> ¿nge . ¡¬t ); 2557 `DBG ("©Œib_d©¨¡ršg: %s", ©Œib_d©a ); 2559 `dbus_mes§ge_™”_­³nd_basic (& ¬¿y_™” , 2560 DBUS_TYPE_OBJECT_PATH , & ©Œib_d©a ); 2564 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & ¬¿y_™” ); 2566  »¶y ; 2567 } } 2569  DBusMes§ge * $discov”_£rviûs ( DBusCÚÃùiÚ * cÚn , 2570 DBusMes§ge * msg , * u£r_d©a ) 2572  btd_deviû * deviû = u£r_d©a ; 2573 cÚ¡ * ·‰”n ; 2574  ”r ; 2576 ià( deviû -> brow£ ) 2577  `btd_”rÜ_š_´og»ss ( msg ); 2579 ià( `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & ·‰”n , 2580 DBUS_TYPE_INVALID è=ð FALSE ) 2581  `btd_”rÜ_šv®id_¬gs ( msg ); 2583 ià( `¡¾’ ( ·‰”n ) == 0) { 2584 ”r = `deviû_cu¡om_brow£_sdp ( deviû , msg , NULL ); 2585 ià( ”r < 0) 2586  çž ; 2588 uuid_t uuid ; 2590 ià( `bt_¡ršg2uuid (& uuid , ·‰”n ) < 0) 2591  `btd_”rÜ_šv®id_¬gs ( msg ); 2593 `sdp_uuid128_to_uuid (& uuid ); 2595 ”r = `deviû_cu¡om_brow£_sdp ( deviû , msg , & uuid ); 2596 ià( ”r < 0) 2597  çž ; 2600  NULL ; 2602 çž : 2603  `btd_”rÜ_çžed ( msg , 2605 } } 2607 cÚ¡ * $brow£_»que¡_g‘_»que¡Ü ( brow£_»q * »q ) 2609 ià(! »q -> msg ) 2610  NULL ; 2612  `dbus_mes§ge_g‘_£nd” ( »q -> msg ); 2613 } } 2615  $™”_­³nd_»cÜd ( DBusMes§geI‹r * diù , ušt32_t hªdË , 2616 cÚ¡ * »cÜd ) 2618 DBusMes§geI‹r ’Œy ; 2620 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , 2621 NULL , & ’Œy ); 2623 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_UINT32 , & hªdË ); 2625 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & »cÜd ); 2627 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & ’Œy ); 2628 } } 2630  $discov”_£rviûs_»¶y ( brow£_»q * »q ,  ”r , 2631 sdp_li¡_t * »cs ) 2633 DBusMes§ge * »¶y ; 2634 DBusMes§geI‹r ™” , diù ; 2635 sdp_li¡_t * £q ; 2637 ià(! »q -> msg ) 2640 ià( ”r ) { 2641 cÚ¡ * ”r_if ; 2643 ià( ”r =ð- EHOSTDOWN ) 2644 ”r_if = ERROR_INTERFACE ".ConnectionAttemptFailed"; 2646 ”r_if = ERROR_INTERFACE ".Failed"; 2648 »¶y = `dbus_mes§ge_Ãw_”rÜ ( »q -> msg , ”r_if , 2649 `¡»¼Ü (- ”r )); 2650 `g_dbus_£nd_mes§ge ( dbus_cÚn , »¶y ); 2654 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( »q -> msg ); 2655 ià(! »¶y ) 2658 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 2660 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 2661 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 2662 DBUS_TYPE_UINT32_AS_STRING DBUS_TYPE_STRING_AS_STRING 2663 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 2665  £q = »cs ; seq; seq = seq-> Ãxt ) { 2666 sdp_»cÜd_t * »c = (sdp_»cÜd_ˆ*è £q -> d©a ; 2667 GSŒšg * »suÉ ; 2669 ià(! »c ) 2672 »suÉ = `g_¡ršg_Ãw ( NULL ); 2674 `cÚv”t_sdp_»cÜd_to_xml ( »c , »suÉ , 2675 (*è g_¡ršg_­³nd ); 2677 ià( »suÉ -> Ën ) 2678 `™”_­³nd_»cÜd (& diù , »c -> hªdË , »suÉ -> ¡r ); 2680 `g_¡ršg_ä“ ( »suÉ , TRUE ); 2683 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & diù ); 2685 `g_dbus_£nd_mes§ge ( dbus_cÚn , »¶y ); 2686 } } 2688  DBusMes§ge * $ÿnûl_discov” ( DBusCÚÃùiÚ * cÚn , 2689 DBusMes§ge * msg , * u£r_d©a ) 2691  btd_deviû * deviû = u£r_d©a ; 2692 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 2693 cÚ¡ * »que¡Ü ; 2695 ià(! deviû -> brow£ ) 2696  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 2698 ià(! `dbus_mes§ge_is_m‘hod_ÿÎ ( deviû -> brow£ -> msg , DEVICE_INTERFACE , 2700  `btd_”rÜ_nÙ_authÜized ( msg ); 2702 »que¡Ü = `brow£_»que¡_g‘_»que¡Ü ( deviû -> brow£ ); 2705 ià(! »que¡Ü || ! `g_¡r_equ® Ôeque¡Ü, £nd” )) 2706  `btd_”rÜ_nÙ_authÜized ( msg ); 2708 `discov”_£rviûs_»¶y ( deviû -> brow£ , - ECANCELED , NULL ); 2710 ià( deviû -> brow£ ) 2711 `brow£_»que¡_ÿnûl ( deviû -> brow£ ); 2713  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2714 } } 2716  DBusMes§ge * $wr™e_auth_·ylßd_timeout ( DBusCÚÃùiÚ * cÚn , 2717 DBusMes§ge * msg , * u£r_d©a ) 2719  btd_deviû * deviû = u£r_d©a ; 2720 dbus_ušt32_t ·ylßd_timeout ; 2722 `DBG ("write_auth_payload_timeout"); 2724 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_UINT32 , 2725 & ·ylßd_timeout , DBUS_TYPE_INVALID )) 2726  `btd_”rÜ_šv®id_¬gs ( msg ); 2728  ¡©us = `btd_ad­‹r_wr™e_auth_·ylßd_timeout ( deviû -> ad­‹r , 2729 & deviû -> bdaddr , ·ylßd_timeout , device); 2731 ià( ¡©us != 0) 2732  `btd_”rÜ_çžed ( msg , 2735  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2736 } } 2738  $deviû_£t_©Œib ( btd_deviû * deviû , gušt ©chid , GA‰rib * ©Œib ) 2740 ià( deviû =ð NULL ) { 2741 `”rÜ ("device is NULL"); 2745 deviû -> ©chid =‡ttachid; 2746 deviû -> ©Œib = `g_©Œib_»f (attrib); 2747 } } 2749  $deviû_un£t_©Œib ( btd_deviû * deviû ) 2751 ià( deviû =ð NULL ) { 2752 `”rÜ ("device is NULL"); 2756 ià( deviû -> ©Œib =ð NULL ) { 2757 `”rÜ ("attrib is NULL"); 2761 deviû -> ©chid = 0; 2763 `g_©Œib_uÄef ( deviû -> ©Œib ); 2764 deviû -> ©Œib = NULL ; 2765 } } 2767  $deviû_£t_g©t_cÚÃùed ( btd_deviû * deviû , gboÞ—n cÚÃùed ) 2769 ià( deviû =ð NULL ) { 2770 `”rÜ ("device is NULL"); 2774 ià( deviû -> g©t_cÚÃùed =ð cÚÃùed ) 2777 deviû -> g©t_cÚÃùed = cÚÃùed ; 2779 `DBG ("G©tCÚÃùed %d", cÚÃùed ); 2781 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 2782 DEVICE_INTERFACE , "GattConnected"); 2783 } } 2785  gboÞ—n $©t_cÚÃù ( gpoš‹r u£r_d©a ) 2787  btd_deviû * deviû = u£r_d©a ; 2789 deviû -> auto_id = 0; 2791 `deviû_cÚÃù_Ë ( deviû ); 2793  FALSE ; 2794 } } 2796  DBusMes§ge * $cÚÃù_Ë ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 2797 * u£r_d©a ) 2799  btd_deviû * deviû = u£r_d©a ; 2800 dbus_boÞ_t auto_cÚÃù = FALSE ; 2802 `DBG ("bdaddr_ty³ %d", deviû -> bdaddr_ty³ ); 2809 ià( deviû -> bdaddr_ty³ =ð BDADDR_BREDR ) 2810 deviû = `btd_ad­‹r_g‘_deviû (deviû-> ad­‹r , &deviû-> bdaddr , BDADDR_LE_PUBLIC ); 2812 ià( deviû -> g©t_cÚÃùed ) 2813  `btd_”rÜ_®»ady_cÚÃùed ( msg ); 2815 deviû -> auto_cÚÃù = FALSE ; 2817 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_BOOLEAN , 2818 & auto_cÚÃù , DBUS_TYPE_INVALID )) 2819  `btd_”rÜ_šv®id_¬gs ( msg ); 2821 ià( auto_cÚÃù ) { 2822 `DBG ("Start LE‡uto connection"); 2824 ià( deviû -> Ë_auto_cÚÃù ) { 2825 `DBG ("Already‡uto connection is started..."); 2826  `btd_”rÜ_®»ady_cÚÃùed ( msg ); 2829 ià( `btd_ad­‹r_is_Ë_auto_cÚÃù ( deviû -> ad­‹r )) { 2830 `DBG ("Already‡uto connection is started"); 2831  `btd_”rÜ_®»ady_cÚÃùed ( msg ); 2833 deviû -> Ë_auto_cÚÃù = TRUE ; 2836 `ad­‹r_þ—r_Ë_wh™e_li¡ ( deviû -> ad­‹r ); 2839 `ad­‹r_add_Ë_wh™e_li¡ ( deviû -> ad­‹r , device); 2842 ià( deviû -> ©t_io =ð NULL ) 2843 deviû -> ©tio_id = `btd_deviû_add_©tio_ÿÎback (device, 2844 NULL , NULL, deviû ); 2846 ià( deviû -> auto_id == 0) 2847 deviû -> auto_id = `g_timeout_add (200, ©t_cÚÃù , device); 2849  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2850 } } 2852  DBusMes§ge * $discÚÃù_Ë ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 2853 * u£r_d©a ) 2855  btd_deviû * deviû = u£r_d©a ; 2857 ià( deviû -> bdaddr_ty³ =ð BDADDR_BREDR ) 2858  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 2860 ià( deviû -> Ë_auto_cÚÃù && !deviû-> g©t_cÚÃùed ) { 2861 `DBG ("le_auto_connect : %d, gatt_connected : %d,‡ttrib : %p", 2862 deviû -> Ë_auto_cÚÃù , deviû-> g©t_cÚÃùed , deviû-> ©Œib ); 2864 `DBG ("Cancel LE‡uto connection"); 2866 `btd_ad­‹r_di§bË_Ë_auto_cÚÃù ( deviû -> ad­‹r ); 2867 deviû -> Ë_auto_cÚÃù = FALSE ; 2868  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2871 if(! deviû -> g©t_cÚÃùed || !deviû-> ©Œib ) 2872  `btd_”rÜ_nÙ_cÚÃùed ( msg ); 2874 `discÚÃù_®l ( deviû ); 2876  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2877 } } 2879  DBusMes§ge * $is_cÚÃùed_´ofže ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 2880 * u£r_d©a ) 2882  btd_deviû * dev = u£r_d©a ; 2883  btd_£rviû * £rviû ; 2884 #iâdeà __TIZEN_PATCH__ 2885  btd_´ofže * ´ofže ; 2887 btd_£rviû_¡©e_t ¡©e ; 2888 cÚ¡ * ·‰”n ; 2889 * uuid ; 2890 DBusMes§ge * »¶y ; 2891 dbus_boÞ_t v® ; 2893 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & ·‰”n , 2894 DBUS_TYPE_INVALID )) 2895  `btd_”rÜ_šv®id_¬gs ( msg ); 2897 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2898 ià(! »¶y ) 2899  `btd_”rÜ_šv®id_¬gs ( »¶y ); 2901 uuid = `bt_Çme2¡ršg ( ·‰”n ); 2902 `DBG ("is_cÚÃùed_´ofže_uuid : %s", uuid ); 2903 £rviû = `btd_deviû_g‘_£rviû ( dev , uuid ); 2904 #ifdeà __TIZEN_PATCH__ 2905 ià(( £rviû =ð NULL è&& ( `g_¡rcmp0 ( uuid , HFP_HS_UUID ) == 0)) { 2906 `DBG ("HFP service is‚ot found check for HSP service"); 2907 £rviû = `btd_deviû_g‘_£rviû ( dev , HSP_HS_UUID ); 2909 ià( uuid ) 2910 `ä“ ( uuid ); 2912 ià(! £rviû ) 2913  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 2915 ¡©e = `btd_£rviû_g‘_¡©e ( £rviû ); 2916 `DBG ("CÚÃùed S‹ : %d", ¡©e ); 2918 ià( ¡©e =ð BTD_SERVICE_STATE_CONNECTED ) 2919 v® = TRUE ; 2921 v® = FALSE ; 2923 `dbus_mes§ge_­³nd_¬gs ( »¶y , 2924 DBUS_TYPE_BOOLEAN , & v® , 2925 DBUS_TYPE_INVALID ); 2927  »¶y ; 2928 } } 2930  DBusMes§ge * $Ë_cÚn_upd©e ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 2931 * u£r_d©a ) 2933  btd_deviû * deviû = u£r_d©a ; 2934 ušt32_t š‹rv®_mš , š‹rv®_max , Ï‹ncy , time_out ; 2935  ¡©us ; 2936  addr [ BT_ADDRESS_STRING_SIZE ]; 2938 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 2939 DBUS_TYPE_UINT32 , & š‹rv®_mš , 2940 DBUS_TYPE_UINT32 , & š‹rv®_max , 2941 DBUS_TYPE_UINT32 , & Ï‹ncy , 2942 DBUS_TYPE_UINT32 , & time_out , 2943 DBUS_TYPE_INVALID )) 2944  `btd_”rÜ_šv®id_¬gs ( msg ); 2946 `ba2¡r (& deviû -> bdaddr , addr ); 2948 `DBG ("RemÙdeviû‡dd»ss: %s", addr ); 2949 `DBG ("Interval min: %u, Interval max: %u, Latency: %u, Timeout: %u", 2950 š‹rv®_mš , š‹rv®_max , Ï‹ncy , time_out ); 2952 ¡©us = `btd_ad­‹r_Ë_cÚn_upd©e ( deviû -> ad­‹r , 2953 & deviû -> bdaddr , š‹rv®_mš , 2954 š‹rv®_max , Ï‹ncy , time_out ); 2956 ià( ¡©us != 0) 2957  `btd_”rÜ_çžed ( msg , "Unableo update LE connection"); 2959  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2960 } } 2963 cÚ¡ GDBusM‘hodTabË gdeviû_m‘hods [] = { 2964 { GDBUS_ASYNC_METHOD ("DiscÚÃù", NULL , NULL, dev_discÚÃù ) }, 2965 { GDBUS_ASYNC_METHOD ("CÚÃù", NULL , NULL, dev_cÚÃù ) }, 2966 { GDBUS_ASYNC_METHOD ("CÚÃùProfže", GDBUS_ARGS ({ "UUID", "s" }), 2967 NULL , cÚÃù_´ofže ) }, 2968 { GDBUS_ASYNC_METHOD ("DiscÚÃùProfže", GDBUS_ARGS ({ "UUID", "s" }), 2969 NULL , discÚÃù_´ofže ) }, 2970 #ifdeà __TIZEN_PATCH__ 2971 { GDBUS_ASYNC_METHOD ("Pair", 2972 GDBUS_ARGS ({ "cÚn_ty³", "y" }), NULL , 2973 ·œ_deviû ) }, 2975 { GDBUS_ASYNC_METHOD ("Paœ", NULL , NULL, ·œ_deviû ) }, 2977 { GDBUS_METHOD ("CªûlPaœšg", NULL , NULL, ÿnûl_·œšg ) }, 2978 #ifdeà __TIZEN_PATCH__ 2979 { GDBUS_METHOD ("R—dRSSI", NULL , NULL, »ad_rssi ) }, 2980 { GDBUS_METHOD ("L2capConnParamUpdate", 2981 GDBUS_ARGS ({ "interval_min", "u" }, 2983 { "time_out", "u" }), NULL , 2984 l2ÿp_cÚn_·¿m_upd©e ) }, 2985 { GDBUS_METHOD ("ConnectLE", 2986 GDBUS_ARGS ({ "auto_connect", "b"}), 2987 NULL , cÚÃù_Ë ) }, 2988 { GDBUS_METHOD ("DiscÚÃùLE", NULL , NULL, discÚÃù_Ë ) }, 2989 { GDBUS_METHOD ("WritePayloadTimeout", 2990 GDBUS_ARGS ({"auth_payload_timeout", "u"}), 2991 NULL , wr™e_auth_·ylßd_timeout )}, 2992 { GDBUS_METHOD ("R—dPaylßdTimeout", NULL , 2993 NULL , »ad_auth_·ylßd_timeout )}, 2994 { GDBUS_METHOD ("IsCÚÃùedProfže", GDBUS_ARGS ({ "UUID", "s" }), 2995 GDBUS_ARGS ({ "IsCÚÃùed", "b" }), is_cÚÃùed_´ofže )}, 2996 { GDBUS_METHOD ("LeConnUpdate", 2997 GDBUS_ARGS ({ "interval_min", "u" }, 2999 { "time_out", "u" }), NULL , 3000 Ë_cÚn_upd©e ) }, 3001 { GDBUS_METHOD ("GetPrimServices", 3002 NULL , GDBUS_ARGS ({ "Services", "ao" }), 3003 g‘_´im_£rviûs ) }, 3004 { GDBUS_ASYNC_METHOD ("DiscoverServices", 3005 GDBUS_ARGS ({ "·‰”n", "s" }), NULL , 3006 discov”_£rviûs ) }, 3007 { GDBUS_METHOD ("CªûlDiscov”y", NULL , NULL, ÿnûl_discov” ) }, 3012 cÚ¡ GDBusPrÝ”tyTabË gdeviû_´Ý”t›s [] = { 3013 { "Add»ss", "s", dev_´Ý”ty_g‘_add»ss }, 3014 { "Name", "s", dev_´Ý”ty_g‘_Çme , NULL , dev_´Ý”ty_exi¡s_Çme }, 3015 { "AlŸs", "s", dev_´Ý”ty_g‘_®Ÿs , dev_´Ý”ty_£t_®Ÿs }, 3016 { "CÏss", "u", dev_´Ý”ty_g‘_þass , NULL , 3017 dev_´Ý”ty_exi¡s_þass }, 3018 { "Aµ—¿nû", "q", dev_´Ý”ty_g‘_­³¬ªû , NULL , 3019 dev_´Ý”ty_exi¡s_­³¬ªû }, 3020 { "IcÚ", "s", dev_´Ý”ty_g‘_icÚ , NULL , 3021 dev_´Ý”ty_exi¡s_icÚ }, 3024 { "Paœed", "y", dev_´Ý”ty_g‘_·œed }, 3026 { "Paœed", "b", dev_´Ý”ty_g‘_·œed }, 3028 { "Tru¡ed", "b", dev_´Ý”ty_g‘_Œu¡ed , dev_´Ý”ty_£t_Œu¡ed }, 3029 { "Blocked", "b", dev_´Ý”ty_g‘_blocked , dev_´Ý”ty_£t_blocked }, 3030 { "LegacyPaœšg", "b", dev_´Ý”ty_g‘_Ëgacy }, 3031 { "RSSI", "n", dev_´Ý”ty_g‘_rssi , NULL , dev_´Ý”ty_exi¡s_rssi }, 3034 { "CÚÃùed", "y", dev_´Ý”ty_g‘_cÚÃùed }, 3036 { "CÚÃùed", "b", dev_´Ý”ty_g‘_cÚÃùed }, 3038 { "UUIDs", "as", dev_´Ý”ty_g‘_uuids }, 3039 { "Mod®Ÿs", "s", dev_´Ý”ty_g‘_mod®Ÿs , NULL , 3040 dev_´Ý”ty_exi¡s_mod®Ÿs }, 3041 { "Ad­‹r", "o", dev_´Ý”ty_g‘_ad­‹r }, 3042 #ifdeà __TIZEN_PATCH__ 3044 { "LegacyPaœed", "b", dev_´Ý”ty_g‘_·œed }, 3045 { "S”viûs", "as", dev_´Ý”ty_g‘_´im_£rviûs }, 3046 { "FÏg", "q", ´Ý”ty_g‘_æag }, 3047 { "Mªuçùu»rD©aL’", "q", ´Ý”ty_g‘_mªuçùu»r_d©a_Ën }, 3048 { "Mªuçùu»rD©a", "ay", ´Ý”ty_g‘_mªuçùu»r_d©a }, 3049 { "G©tCÚÃùed", "b", dev_´Ý”ty_g‘_g©t_cÚÃùed }, 3050 { "PaylßdTimeout", "q", dev_´Ý”ty_g‘_·ylßd }, 3051 { "La¡AddrTy³", "y", dev_´Ý”ty_g‘_Ï¡_addr_ty³ }, 3057 #ifdeà __TIZEN_PATCH__ 3058 cÚ¡ GDBusSigÇlTabË gdeviû_sigÇls [] = { 3059 { GDBUS_SIGNAL ("Disconnected", 3060 GDBUS_ARGS ({ "bdaddr_type", "y" }, { "reason", "y" })) }, 3061 { GDBUS_SIGNAL ("DeviceConnected", 3062 GDBUS_ARGS ({ "bdaddr_type", "y"})) }, 3063 { GDBUS_SIGNAL ("ProfileStateChanged", 3064 GDBUS_ARGS ({ "profile", "s"}, {"state", "i"})) }, 3065 { GDBUS_SIGNAL ("AdvReport", 3066 GDBUS_ARGS ({"Address","s"}, 3075 ušt8_t $btd_deviû_g‘_bdaddr_ty³ ( btd_deviû * dev ) 3077  dev -> bdaddr_ty³ ; 3078 } } 3080 boÞ $btd_deviû_is_cÚÃùed ( btd_deviû * dev ) 3082  dev -> b»dr_¡©e . cÚÃùed || dev-> Ë_¡©e .connected; 3083 } } 3085  $deviû_add_cÚÃùiÚ ( btd_deviû * dev , ušt8_t bdaddr_ty³ ) 3087  b—»r_¡©e * ¡©e = `g‘_¡©e ( dev , bdaddr_ty³ ); 3089 `deviû_upd©e_Ï¡_£’ ( dev , bdaddr_ty³ ); 3091 ià( ¡©e -> cÚÃùed ) { 3092  addr [18]; 3093 `ba2¡r (& dev -> bdaddr , addr ); 3094 `”rÜ ("Deviû % i ®»ady cÚÃùed", addr ); 3099 ià( bdaddr_ty³ =ð BDADDR_BREDR ) 3100 `deviû_£t_b»dr_suµÜt ( dev ); 3102 `deviû_£t_Ë_suµÜt ( dev , bdaddr_ty³ ); 3104 ¡©e -> cÚÃùed = Œue ; 3106 ià( dev -> Ë_¡©e . cÚÃùed && dev-> b»dr_¡©e .connected) 3109 #iâdeà __TIZEN_PATCH__ 3110 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , dev -> ·th , DEVICE_INTERFACE , 3113 `g_dbus_em™_sigÇl ( dbus_cÚn , dev -> ·th , 3114 DEVICE_INTERFACE , "DeviceConnected", 3115 DBUS_TYPE_BYTE , & bdaddr_ty³ , 3116 DBUS_TYPE_INVALID ); 3118 } } 3120  $deviû_»move_cÚÃùiÚ ( btd_deviû * deviû , ušt8_t bdaddr_ty³ ) 3122  b—»r_¡©e * ¡©e = `g‘_¡©e ( deviû , bdaddr_ty³ ); 3124 ià(! ¡©e -> cÚÃùed ) 3127 ¡©e -> cÚÃùed = çl£ ; 3128 deviû -> svc_»äeshed = çl£ ; 3129 deviû -> g’”®_cÚÃù = FALSE ; 3131 ià( deviû -> discÚn_tim” > 0) { 3132 `g_sourû_»move ( deviû -> discÚn_tim” ); 3133 deviû -> discÚn_tim” = 0; 3136 #ifdeà __TIZEN_PATCH__ 3137 ià( deviû -> brow£ ) { 3139 deviû -> brow£ = NULL ; 3143  deviû -> discÚÃùs ) { 3144 DBusMes§ge * msg = deviû -> discÚÃùs -> d©a ; 3146 `g_dbus_£nd_»¶y ( dbus_cÚn , msg , DBUS_TYPE_INVALID ); 3147 deviû -> discÚÃùs = `g_¦i¡_»move (deviû->discÚÃùs, msg ); 3148 `dbus_mes§ge_uÄef ( msg ); 3151 ià( ¡©e -> ·œed && !¡©e-> bÚded ) 3152 `btd_ad­‹r_»move_bÚdšg ( deviû -> ad­‹r , &deviû-> bdaddr , 3153 bdaddr_ty³ ); 3155 ià( deviû -> b»dr_¡©e . cÚÃùed || deviû-> Ë_¡©e .connected) 3158 #iâdeà __TIZEN_PATCH__ 3159 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 3160 DEVICE_INTERFACE , "Connected"); 3162 `g_dbus_em™_sigÇl ( dbus_cÚn , deviû -> ·th , 3163 DEVICE_INTERFACE , "Disconnected", 3164 DBUS_TYPE_BYTE , & bdaddr_ty³ , 3165 DBUS_TYPE_BYTE , & deviû -> disc_»asÚ , 3166 DBUS_TYPE_INVALID ); 3168 } } 3170 gušt $deviû_add_discÚÃù_w©ch ( btd_deviû * deviû , 3171 discÚÃù_w©ch w©ch , * u£r_d©a , 3172 GDe¡royNÙify de¡roy ) 3174  btd_discÚÃù_d©a * d©a ; 3175  gušt id = 0; 3177 d©a = `g_Ãw0 ( btd_discÚÃù_d©a , 1); 3178 d©a -> id = ++id; 3179 d©a -> w©ch = watch; 3180 d©a -> u£r_d©a = user_data; 3181 d©a -> de¡roy = destroy; 3183 deviû -> w©ches = `g_¦i¡_­³nd (deviû->w©ches, d©a ); 3185  d©a -> id ; 3186 } } 3188  $deviû_»move_discÚÃù_w©ch ( btd_deviû * deviû , gušt id ) 3190 GSLi¡ * l ; 3192  l = deviû -> w©ches ;†;† =†-> Ãxt ) { 3193  btd_discÚÃù_d©a * d©a = l ->data; 3195 ià( d©a -> id == id) { 3196 deviû -> w©ches = `g_¦i¡_»move (device->watches, 3197 d©a ); 3198 ià( d©a -> de¡roy ) 3199 d©a -> `de¡roy (d©a-> u£r_d©a ); 3200 `g_ä“ ( d©a ); 3204 } } 3206 * $lßd_ÿched_Çme ( btd_deviû * deviû , cÚ¡ * loÿl , 3207 cÚ¡ * ³” ) 3209  fž’ame [ PATH_MAX ]; 3210 GKeyFže * key_fže ; 3211 * ¡r = NULL ; 3212  Ën ; 3214 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/ÿche/%s", loÿl , ³” ); 3216 key_fže = `g_key_fže_Ãw (); 3218 ià(! `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL )) 3219  çžed ; 3221 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , "G’”®", "Name", NULL ); 3222 ià( ¡r ) { 3223 Ën = `¡¾’ ( ¡r ); 3224 ià( Ën > HCI_MAX_NAME_LENGTH ) 3225 ¡r [ HCI_MAX_NAME_LENGTH ] = '\0'; 3228 çžed : 3229 `g_key_fže_ä“ ( key_fže ); 3231  ¡r ; 3232 } } 3234  $lßd_šfo ( btd_deviû * deviû , cÚ¡ * loÿl , 3235 cÚ¡ * ³” , GKeyFže * key_fže ) 3237 * ¡r ; 3238 gboÞ—n ¡Üe_Ãeded = FALSE ; 3239 gboÞ—n blocked ; 3240 ** uuids ; 3241  sourû , v’dÜ , ´oduù , v”siÚ ; 3242 ** ‹chno , ** t ; 3243 #ifdeà __TIZEN_PATCH__ 3244  buf [ DEV_MAX_MANUFACTURER_DATA_LEN ] = { 0, }; 3249 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , "G’”®", "Name", NULL ); 3250 ià( ¡r =ð NULL ) { 3251 ¡r = `lßd_ÿched_Çme ( deviû , loÿl , ³” ); 3252 ià( ¡r ) 3253 ¡Üe_Ãeded = TRUE ; 3256 ià( ¡r ) { 3257 `¡rýy ( deviû -> Çme , ¡r ); 3258 `g_ä“ ( ¡r ); 3262 deviû -> ®Ÿs = `g_key_fže_g‘_¡ršg ( key_fže , "General", "Alias", 3263 NULL ); 3266 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , "G’”®", "CÏss", NULL ); 3267 ià( ¡r ) { 3268 ušt32_t þass ; 3270 ià( `ssÿnf ( ¡r , "%x", & þass ) == 1) 3271 deviû -> þass = class; 3272 `g_ä“ ( ¡r ); 3276 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , "G’”®", "Aµ—¿nû", NULL ); 3277 ià( ¡r ) { 3278 deviû -> ­³¬ªû = `¡¹Þ ( ¡r , NULL , 16); 3279 `g_ä“ ( ¡r ); 3282 #ifdeà __TIZEN_PATCH__ 3283 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , "G’”®", "Mªuçùu»rD©aL’", NULL ); 3284 ià( ¡r ) { 3285 deviû -> mªuçùu»r_d©a_Ën = `¡¹Þ ( ¡r , NULL , 10); 3286 `g_ä“ ( ¡r ); 3288 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , "G’”®", "Mªuçùu»rD©a", NULL ); 3289 ià( ¡r ) { 3290 `lßd_mªuçùu»r_d©a_2dig™ ( ¡r , 3291 deviû -> mªuçùu»r_d©a_Ën , buf ); 3292 deviû -> mªuçùu»r_d©a = `g_memdup ( buf , 3293 deviû -> mªuçùu»r_d©a_Ën ); 3294 `g_ä“ ( ¡r ); 3300 ‹chno = `g_key_fže_g‘_¡ršg_li¡ ( key_fže , "General", 3301 "SuµÜ‹dTechnÞog›s", NULL , NULL); 3302 ià(! ‹chno ) 3303  Ãxt ; 3305  t = ‹chno ; *t;++) { 3306 ià( `g_¡r_equ® (* t , "BR/EDR")) 3307 deviû -> b»dr = Œue ; 3308 ià( `g_¡r_equ® (* t , "LE")) 3309 deviû -> Ë = Œue ; 3311 `”rÜ ("Unknown deviceechnology"); 3314 ià(! deviû -> Ë ) { 3315 deviû -> bdaddr_ty³ = BDADDR_BREDR ; 3317 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , "General", 3318 "Add»ssTy³", NULL ); 3320 ià( ¡r && `g_¡r_equ® (str, "public")) 3321 deviû -> bdaddr_ty³ = BDADDR_LE_PUBLIC ; 3322 ià( ¡r && `g_¡r_equ® (str, "static")) 3323 deviû -> bdaddr_ty³ = BDADDR_LE_RANDOM ; 3325 `”rÜ ("Unknown LE deviceechnology"); 3327 `g_ä“ ( ¡r ); 3330 `g_¡rä“v ( ‹chno ); 3332 Ãxt : 3334 deviû -> Œu¡ed = `g_key_fže_g‘_boÞ—n ( key_fže , "General", 3335 "Tru¡ed", NULL ); 3338 blocked = `g_key_fže_g‘_boÞ—n ( key_fže , "G’”®", "Blocked", NULL ); 3339 ià( blocked ) 3340 `deviû_block ( deviû , FALSE ); 3343 uuids = `g_key_fže_g‘_¡ršg_li¡ ( key_fže , "General", "Services", 3344 NULL , NULL); 3345 ià( uuids ) { 3346 ** uuid ; 3348  uuid = uuids ; *uuid; uuid++) { 3349 GSLi¡ * m©ch ; 3351 m©ch = `g_¦i¡_fšd_cu¡om ( deviû -> uuids , * uuid , 3352 bt_uuid_¡rcmp ); 3353 ià( m©ch ) 3356 deviû -> uuids = `g_¦i¡_š£¹_sÜ‹d (device->uuids, 3357 `g_¡rdup (* uuid ), 3358 bt_uuid_¡rcmp ); 3360 `g_¡rä“v ( uuids ); 3363 deviû -> b»dr_¡©e . svc_»sÞved = Œue ; 3367 sourû = `g_key_fže_g‘_š‹g” ( key_fže , "DeviûID", "Sourû", NULL ); 3368 ià( sourû ) { 3369 v’dÜ = `g_key_fže_g‘_š‹g” ( key_fže , "DeviceID", 3370 "V’dÜ", NULL ); 3372 ´oduù = `g_key_fže_g‘_š‹g” ( key_fže , "DeviceID", 3373 "Produù", NULL ); 3375 v”siÚ = `g_key_fže_g‘_š‹g” ( key_fže , "DeviceID", 3376 "V”siÚ", NULL ); 3378 `btd_deviû_£t_²pid ( deviû , sourû , v’dÜ , ´oduù , v”siÚ ); 3381 ià( ¡Üe_Ãeded ) 3382 `¡Üe_deviû_šfo ( deviû ); 3383 } } 3385  $lßd_©t_šfo ( btd_deviû * deviû , cÚ¡ * loÿl , 3386 cÚ¡ * ³” ) 3388  fž’ame [ PATH_MAX ]; 3389 GKeyFže * key_fže ; 3390 * ´im_uuid , * ¡r ; 3391 ** groups , ** hªdË , * £rviû_uuid ; 3392  g©t_´im¬y * ´im ; 3393 uuid_t uuid ; 3394  tmp [3]; 3395  i ; 3397 `sdp_uuid16_ü—‹ (& uuid , GATT_PRIM_SVC_UUID ); 3398 ´im_uuid = `bt_uuid2¡ršg (& uuid ); 3400 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/©Œibu‹s", loÿl , 3401 ³” ); 3403 key_fže = `g_key_fže_Ãw (); 3404 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 3405 groups = `g_key_fže_g‘_groups ( key_fže , NULL ); 3407  hªdË = groups ; *handle; handle++) { 3408 gboÞ—n uuid_ok ; 3409  ’d ; 3411 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , * hªdË , "UUID", NULL ); 3412 ià(! ¡r ) 3415 uuid_ok = `g_¡r_equ® ( ¡r , ´im_uuid ); 3416 `g_ä“ ( ¡r ); 3418 ià(! uuid_ok ) 3421 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , * hªdË , "V®ue", NULL ); 3422 ià(! ¡r ) 3425 ’d = `g_key_fže_g‘_š‹g” ( key_fže , * hªdË , 3426 "EndGroupHªdË", NULL ); 3427 ià( ’d == 0) { 3428 `g_ä“ ( ¡r ); 3432 ´im = `g_Ãw0 ( g©t_´im¬y , 1); 3433 ´im -> ¿nge . ¡¬t = `©oi (* hªdË ); 3434 ´im -> ¿nge . ’d =ƒnd; 3436  `¡¾’ ( ¡r )) { 3438 uuid . ty³ = SDP_UUID16 ; 3439 `ssÿnf ( ¡r , "%04hx", & uuid . v®ue . uuid16 ); 3442 uuid . ty³ = SDP_UUID32 ; 3443 `ssÿnf ( ¡r , "%08x", & uuid . v®ue . uuid32 ); 3446 uuid . ty³ = SDP_UUID128 ; 3447 `mem£t ( tmp , 0, (tmp)); 3448  i = 0; i < 16; i++) { 3449 `memýy ( tmp , ¡r + ( i * 2), 2); 3450 uuid . v®ue . uuid128 . d©a [ i ] = 3451 ( ušt8_t è `¡¹Þ ( tmp , NULL , 16); 3455 `g_ä“ ( ¡r ); 3456 `g_ä“ ( ´im ); 3460 £rviû_uuid = `bt_uuid2¡ršg (& uuid ); 3461 `memýy ( ´im -> uuid , £rviû_uuid , MAX_LEN_UUID_STR ); 3462 `ä“ ( £rviû_uuid ); 3463 `g_ä“ ( ¡r ); 3465 deviû -> ´im¬›s = `g_¦i¡_­³nd (deviû->´im¬›s, ´im ); 3468 `g_¡rä“v ( groups ); 3469 `g_key_fže_ä“ ( key_fže ); 3470 `ä“ ( ´im_uuid ); 3471 } } 3473  $deviû_»gi¡”_´im¬›s ( btd_deviû * deviû , 3474 GSLi¡ * ´im_li¡ ,  psm ) 3476 deviû -> ´im¬›s = `g_¦i¡_cÚÿt (deviû->´im¬›s, ´im_li¡ ); 3477 #ifdeà __TIZEN_PATCH__ 3478 deviû -> g©t_£rviûs = `©Œib_þ›Á_»gi¡” ( dbus_cÚn , deviû, psm , NULL , 3479 ´im_li¡ ); 3481 } } 3483  $add_´im¬y ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 3485 GSLi¡ ** Ãw_£rviûs = u£r_d©a ; 3486  g©t_´im¬y * ´im ; 3487 bt_uuid_t uuid ; 3489 ´im = `g_Ãw0 ( g©t_´im¬y , 1); 3490 ià(! ´im ) { 3491 `DBG ("Failedo‡llocate gatt_primary structure"); 3495 `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( ©Œ , & ´im -> ¿nge . ¡¬t , 3496 & ´im -> ¿nge . ’d ); 3497 `g©t_db_©Œibu‹_g‘_£rviû_uuid ( ©Œ , & uuid ); 3498 `bt_uuid_to_¡ršg (& uuid , ´im ->uuid, (prim->uuid)); 3500 * Ãw_£rviûs = `g_¦i¡_­³nd (*Ãw_£rviûs, ´im ); 3501 } } 3503  $deviû_add_uuids ( btd_deviû * deviû , GSLi¡ * uuids ) 3505 GSLi¡ * l ; 3507  l = uuids ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 3508 GSLi¡ * m©ch = `g_¦i¡_fšd_cu¡om ( deviû -> uuids , l -> d©a , 3509 bt_uuid_¡rcmp ); 3510 ià( m©ch ) 3513 deviû -> uuids = `g_¦i¡_š£¹_sÜ‹d (device->uuids, 3514 `g_¡rdup ( l -> d©a ), 3515 bt_uuid_¡rcmp ); 3518 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 3519 DEVICE_INTERFACE , "UUIDs"); 3520 } } 3522  ¡Üe_£rviûs ( btd_deviû * deviû ); 3524  sg©t_´obe_d©a { 3525  btd_deviû * mdev ; 3526 boÞ m®l_£rviûs ; 3527 GSLi¡ * muuids ; 3528  g©t_db_©Œibu‹ * mcur_©Œ ; 3529  mcur_uuid [ MAX_LEN_UUID_STR ]; 3530 ušt16_t m¡¬t_hªdË , m’d_hªdË ; 3531 GSLi¡ * mv®id_£rviûs ; 3534  boÞ $deviû_m©ch_´ofže ( btd_deviû * deviû , 3535  btd_´ofže * ´ofže , 3536 GSLi¡ * uuids ) 3538 ià( ´ofže -> »mÙe_uuid =ð NULL ) 3539  çl£ ; 3541 ià( `g_¦i¡_fšd_cu¡om ( uuids , ´ofže -> »mÙe_uuid , 3542 bt_uuid_¡rcmp è=ð NULL ) 3543  çl£ ; 3545  Œue ; 3546 } } 3548  $dev_´obe_g©t ( btd_´ofže * p , * u£r_d©a ) 3550  g©t_´obe_d©a * d©a = u£r_d©a ; 3551  btd_£rviû * £rviû ; 3553 ià( p -> deviû_´obe =ð NULL ) 3556 ià(! p -> »mÙe_uuid || `bt_uuid_¡rcmp Õ->»mÙe_uuid, d©a -> cur_uuid )) 3559 £rviû = `£rviû_ü—‹_g©t ( d©a -> dev , p , d©a-> ¡¬t_hªdË , 3560 d©a -> ’d_hªdË ); 3561 ià(! £rviû ) 3564 ià( `£rviû_´obe ( £rviû ) < 0) { 3565 `btd_£rviû_uÄef ( £rviû ); 3569 d©a -> dev -> £rviûs = `g_¦i¡_­³nd (d©a->dev->£rviûs, £rviû ); 3571 ià( d©a -> ®l_£rviûs ) 3572 d©a -> v®id_£rviûs = `g_¦i¡_­³nd (data->valid_services, 3573 £rviû ); 3574 } } 3576  boÞ $m©ch_exi¡šg_£rviû ( g©t_´obe_d©a * d©a ) 3578  btd_deviû * dev = d©a ->dev; 3579  btd_£rviû * £rviû ; 3580  btd_´ofže * ´ofže ; 3581 ušt16_t ¡¬t , ’d ; 3582 GSLi¡ * l , * tmp ; 3588  l = dev -> £rviûs ;† !ð NULL ;) { 3589 £rviû = l -> d©a ; 3590 ´ofže = `btd_£rviû_g‘_´ofže ( £rviû ); 3593 ià(! ´ofže -> »mÙe_uuid || 3594 ! `btd_£rviû_g‘_g©t_hªdËs ( £rviû , & ¡¬t , & ’d )) { 3595 l = `g_¦i¡_Ãxt (l); 3600 ià( ¡¬t > d©a -> ’d_hªdË || ’d < d©a-> ¡¬t_hªdË ) { 3601 l = `g_¦i¡_Ãxt (l); 3610 ià( ¡¬t =ð d©a -> ¡¬t_hªdË && ’d =ðd©a-> ’d_hªdË && 3611 ! `bt_uuid_¡rcmp ( ´ofže -> »mÙe_uuid , d©a -> cur_uuid )) { 3612 ià( d©a -> ®l_£rviûs ) 3613 d©a -> v®id_£rviûs = `g_¦i¡_­³nd ( 3614 d©a -> v®id_£rviûs , £rviû ); 3615  Œue ; 3626 tmp = l -> Ãxt ; 3627 dev -> £rviûs = `g_¦i¡_d–‘e_lšk (dev->£rviûs, l ); 3628 dev -> ³ndšg = `g_¦i¡_»move (dev->³ndšg, £rviû ); 3629 `£rviû_»move ( £rviû ); 3631 l = tmp ; 3635  çl£ ; 3636 } } 3638  $dev_´obe_g©t_´ofže ( g©t_db_©Œibu‹ * ©Œ , 3639 * u£r_d©a ) 3641  g©t_´obe_d©a * d©a = u£r_d©a ; 3642 bt_uuid_t uuid ; 3643 GSLi¡ * l = NULL ; 3645 `g©t_db_©Œibu‹_g‘_£rviû_d©a ( ©Œ , & d©a -> ¡¬t_hªdË , 3646 & d©a -> ’d_hªdË , NULL , 3647 & uuid ); 3648 `bt_uuid_to_¡ršg (& uuid , d©a -> cur_uuid , (data->cur_uuid)); 3650 d©a -> cur_©Œ = ©Œ ; 3653 ià(! `m©ch_exi¡šg_£rviû ( d©a )) 3654 `btd_´ofže_fÜ—ch ( dev_´obe_g©t , d©a ); 3656 ià( d©a -> ®l_£rviûs ) { 3657 d©a -> uuids = `g_¦i¡_­³nd (data->uuids, 3658 `g_¡rdup ( d©a -> cur_uuid )); 3662 l = `g_¦i¡_­³nd Ö, `g_¡rdup ( d©a -> cur_uuid )); 3663 `deviû_add_uuids ( d©a -> dev , l ); 3664 } } 3666  $deviû_´obe_g©t_´ofže ( btd_deviû * deviû , 3667  g©t_db_©Œibu‹ * ©Œ ) 3669  g©t_´obe_d©a d©a ; 3671 `mem£t (& d©a , 0, (data)); 3673 d©a . dev = deviû ; 3675 `dev_´obe_g©t_´ofže ( ©Œ , & d©a ); 3676 `g_¦i¡_ä“_fuÎ ( d©a . uuids , g_ä“ ); 3677 } } 3679  $»move_šv®id_£rviûs ( g©t_´obe_d©a * d©a ) 3681  btd_deviû * dev = d©a ->dev; 3682  btd_£rviû * £rviû ; 3683 GSLi¡ * l , * tmp ; 3685  l = dev -> £rviûs ;† !ð NULL ;) { 3686 £rviû = l -> d©a ; 3688 ià( `g_¦i¡_fšd ( d©a -> v®id_£rviûs , £rviû )) { 3689 l = `g_¦i¡_Ãxt (l); 3694 tmp = l -> Ãxt ; 3695 dev -> £rviûs = `g_¦i¡_d–‘e_lšk (dev->£rviûs, l ); 3696 dev -> ³ndšg = `g_¦i¡_»move (dev->³ndšg, £rviû ); 3697 `£rviû_»move ( £rviû ); 3699 l = tmp ; 3701 } } 3703  $deviû_´obe_g©t_´ofžes ( btd_deviû * deviû ) 3705  g©t_´obe_d©a d©a ; 3706  addr [18]; 3708 `ba2¡r (& deviû -> bdaddr , addr ); 3710 ià( deviû -> blocked ) { 3711 `DBG ("Skpšg…rofže fÜ blocked deviû %s", addr ); 3715 `mem£t (& d©a , 0, (data)); 3717 d©a . dev = deviû ; 3718 d©a . ®l_£rviûs = Œue ; 3720 `g©t_db_fÜ—ch_£rviû ( deviû -> db , NULL , dev_´obe_g©t_´ofže , 3721 & d©a ); 3722 `deviû_add_uuids ( deviû , d©a . uuids ); 3723 `g_¦i¡_ä“_fuÎ ( d©a . uuids , g_ä“ ); 3725 `»move_šv®id_£rviûs (& d©a ); 3726 `g_¦i¡_ä“ ( d©a . v®id_£rviûs ); 3727 } } 3729  $deviû_acû±_g©t_´ofžes ( btd_deviû * deviû ) 3731 GSLi¡ * l ; 3733  l = deviû -> £rviûs ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) 3734 `£rviû_acû± ( l -> d©a ); 3735 } } 3737  $deviû_»move_g©t_´ofže ( btd_deviû * deviû , 3738  g©t_db_©Œibu‹ * ©Œ ) 3740 ušt16_t ¡¬t , ’d ; 3741  btd_£rviû * £rviû ; 3742 GSLi¡ * l ; 3744 `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( ©Œ , & ¡¬t , & ’d ); 3746 l = `fšd_£rviû_w™h_g©t_hªdËs ( deviû -> £rviûs , ¡¬t , ’d ); 3747 ià(! l ) 3750 £rviû = l -> d©a ; 3751 deviû -> £rviûs = `g_¦i¡_d–‘e_lšk (deviû->£rviûs, l ); 3752 deviû -> ³ndšg = `g_¦i¡_»move (deviû->³ndšg, £rviû ); 3753 `£rviû_»move ( £rviû ); 3754 } } 3756  $g©t_£rviû_added ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 3758  btd_deviû * deviû = u£r_d©a ; 3759 GSLi¡ * Ãw_£rviû = NULL ; 3760 ušt16_t ¡¬t , ’d ; 3761 GSLi¡ * l ; 3763 ià(! `bt_g©t_þ›Á_is_»ady ( deviû -> þ›Á )) 3766 `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( ©Œ , & ¡¬t , & ’d ); 3768 `DBG ("¡¬t: 0x%04x,ƒnd: 0x%04x", ¡¬t , ’d ); 3774 `add_´im¬y ( ©Œ , & Ãw_£rviû ); 3775 ià(! Ãw_£rviû ) 3778 `deviû_»gi¡”_´im¬›s ( deviû , Ãw_£rviû , -1); 3780 `deviû_´obe_g©t_´ofže ( deviû , ©Œ ); 3782 l = `fšd_£rviû_w™h_g©t_hªdËs ( deviû -> £rviûs , ¡¬t , ’d ); 3783 ià( l ) 3784 `£rviû_acû± ( l -> d©a ); 3786 `¡Üe_£rviûs ( deviû ); 3788 `btd_g©t_þ›Á_£rviû_added ( deviû -> þ›Á_dbus , ©Œ ); 3789 } } 3791  gšt $´im_©Œ_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 3793 cÚ¡  g©t_´im¬y * ´im = a ; 3794 cÚ¡  g©t_db_©Œibu‹ * ©Œ = b ; 3795 ušt16_t ¡¬t , ’d ; 3797 `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( ©Œ , & ¡¬t , & ’d ); 3799  !( ´im -> ¿nge . ¡¬t =𡬈&&…rim->¿nge. ’d ==ƒnd); 3800 } } 3802  gšt $´im_uuid_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 3804 cÚ¡  g©t_´im¬y * ´im = a ; 3805 cÚ¡ * uuid = b ; 3807  `bt_uuid_¡rcmp ( ´im -> uuid , uuid); 3808 } } 3810  $g©t_£rviû_»moved ( g©t_db_©Œibu‹ * ©Œ , 3811 * u£r_d©a ) 3813  btd_deviû * deviû = u£r_d©a ; 3814 GSLi¡ * l ; 3815  g©t_´im¬y * ´im ; 3816 ušt16_t ¡¬t , ’d ; 3818 ià(! `bt_g©t_þ›Á_is_»ady ( deviû -> þ›Á )) 3821 `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( ©Œ , & ¡¬t , & ’d ); 3823 `DBG ("¡¬t: 0x%04x,ƒnd: 0x%04x", ¡¬t , ’d ); 3826 l = `g_¦i¡_fšd_cu¡om ( deviû -> ´im¬›s , ©Œ , ´im_©Œ_cmp ); 3827 ià(! l ) 3830 ´im = l -> d©a ; 3831 deviû -> ´im¬›s = `g_¦i¡_d–‘e_lšk (deviû->´im¬›s, l ); 3840 ià( deviû -> þ›Á || deviû-> ‹mpܬy =ð TRUE ) 3841 `deviû_»move_g©t_´ofže ( deviû , ©Œ ); 3847 l = `g_¦i¡_fšd_cu¡om ( deviû -> uuids , ´im -> uuid , bt_uuid_¡rcmp ); 3849 ià(! `g_¦i¡_fšd_cu¡om ( deviû -> ´im¬›s , ´im -> uuid , 3850 ´im_uuid_cmp )) { 3851 deviû -> uuids = `g_¦i¡_d–‘e_lšk (deviû->uuids, l ); 3852 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 3853 DEVICE_INTERFACE , "UUIDs"); 3856 `g_ä“ ( ´im ); 3858 `¡Üe_£rviûs ( deviû ); 3860 `btd_g©t_þ›Á_£rviû_»moved ( deviû -> þ›Á_dbus , ©Œ ); 3861 } } 3863  btd_deviû * $deviû_Ãw ( btd_ad­‹r * ad­‹r , 3864 cÚ¡ * add»ss ) 3866 * add»ss_up ; 3867  btd_deviû * deviû ; 3868 cÚ¡ * ad­‹r_·th = `ad­‹r_g‘_·th ( ad­‹r ); 3870 `DBG ("add»s %s", add»ss ); 3872 deviû = `g_Œy_m®loc0 (( btd_deviû )); 3873 ià( deviû =ð NULL ) 3874  NULL ; 3876 deviû -> db = `g©t_db_Ãw (); 3877 ià(! deviû -> db ) { 3878 `g_ä“ ( deviû ); 3879  NULL ; 3882 add»ss_up = `g_ascii_¡rup ( add»ss , -1); 3883 deviû -> ·th = `g_¡rdup_´štf ("%s/dev_%s", ad­‹r_·th , add»ss_up ); 3884 `g_¡rd–im™ ( deviû -> ·th , ":", '_'); 3885 `g_ä“ ( add»ss_up ); 3887 `¡r2ba ( add»ss , & deviû -> bdaddr ); 3889 deviû -> þ›Á_dbus = `btd_g©t_þ›Á_Ãw (device); 3890 ià(! deviû -> þ›Á_dbus ) { 3891 `”rÜ ("Failedo create btd_gatt_client"); 3892 `deviû_ä“ ( deviû ); 3893  NULL ; 3896 `DBG ("C»©šg deviû %s", deviû -> ·th ); 3898 ià( `g_dbus_»gi¡”_š‹rçû ( dbus_cÚn , 3899 deviû -> ·th , DEVICE_INTERFACE , 3900 #ifdeà __TIZEN_PATCH__ 3901 deviû_m‘hods , deviû_sigÇls , 3903 deviû_m‘hods , NULL , 3905 deviû_´Ý”t›s , deviû , 3906 deviû_ä“ è=ð FALSE ) { 3907 `”rÜ ("UÇbËØ»gi¡” deviû iÁ”çû fÜ %s", add»ss ); 3908 `deviû_ä“ ( deviû ); 3909  NULL ; 3912 deviû -> ad­‹r =‡dapter; 3913 deviû -> ‹mpܬy = TRUE ; 3915 `g©t_db_»gi¡” ( deviû -> db , g©t_£rviû_added , g©t_£rviû_»moved , 3916 deviû , NULL ); 3918  `btd_deviû_»f ( deviû ); 3919 } } 3921  btd_deviû * $deviû_ü—‹_äom_¡Üage ( btd_ad­‹r * ad­‹r , 3922 cÚ¡ * add»ss , GKeyFže * key_fže ) 3924  btd_deviû * deviû ; 3925 cÚ¡ bdaddr_t * ¤c ; 3926  ¤ÿddr [18]; 3928 `DBG ("add»s %s", add»ss ); 3930 deviû = `deviû_Ãw ( ad­‹r , add»ss ); 3931 ià( deviû =ð NULL ) 3932  NULL ; 3934 ¤c = `btd_ad­‹r_g‘_add»ss ( ad­‹r ); 3935 `ba2¡r ( ¤c , ¤ÿddr ); 3937 `lßd_šfo ( deviû , ¤ÿddr , add»ss , key_fže ); 3938 `lßd_©t_šfo ( deviû , ¤ÿddr , add»ss ); 3940  deviû ; 3941 } } 3943  btd_deviû * $deviû_ü—‹ ( btd_ad­‹r * ad­‹r , 3944 cÚ¡ bdaddr_t * bdaddr , ušt8_t bdaddr_ty³ ) 3946  btd_deviû * deviû ; 3947 cÚ¡ bdaddr_t * sba ; 3948  ¤c [18], d¡ [18]; 3949 * ¡r ; 3951 `ba2¡r ( bdaddr , d¡ ); 3952 `DBG ("d¡ %s", d¡ ); 3954 deviû = `deviû_Ãw ( ad­‹r , d¡ ); 3955 ià( deviû =ð NULL ) 3956  NULL ; 3958 deviû -> bdaddr_ty³ = bdaddr_type; 3960 ià( bdaddr_ty³ =ð BDADDR_BREDR ) 3961 deviû -> b»dr = Œue ; 3963 deviû -> Ë = Œue ; 3965 sba = `btd_ad­‹r_g‘_add»ss ( ad­‹r ); 3966 `ba2¡r ( sba , ¤c ); 3968 ¡r = `lßd_ÿched_Çme ( deviû , ¤c , d¡ ); 3969 ià( ¡r ) { 3970 `¡rýy ( deviû -> Çme , ¡r ); 3971 `g_ä“ ( ¡r ); 3974  deviû ; 3975 } } 3977 * $btd_deviû_g‘_¡Üage_·th ( btd_deviû * deviû , 3978 cÚ¡ * fž’ame ) 3980  ¤ÿddr [18], d¡addr [18]; 3982 ià( `deviû_add»ss_is_´iv©e ( deviû )) { 3983 `w¬n ("Refusing storage…ath for…rivate‡ddressed device %s", 3984 deviû -> ·th ); 3985  NULL ; 3988 `ba2¡r ( `btd_ad­‹r_g‘_add»ss ( deviû -> ad­‹r ), ¤ÿddr ); 3989 `ba2¡r (& deviû -> bdaddr , d¡addr ); 3991 ià(! fž’ame ) 3992  `g_¡rdup_´štf ( STORAGEDIR "/%s/%s", ¤ÿddr , d¡addr ); 3994  `g_¡rdup_´štf ( STORAGEDIR "/%s/%s/%s", ¤ÿddr , d¡addr , 3995 fž’ame ); 3996 } } 3998  $btd_deviû_deviû_£t_Çme ( btd_deviû * deviû , cÚ¡ * Çme ) 4000 ià( `¡ºcmp ( Çme , deviû ->Çme, MAX_NAME_LENGTH ) == 0) 4003 `DBG ("% %s", deviû -> ·th , Çme ); 4005 `¡ºýy ( deviû -> Çme ,‚ame, MAX_NAME_LENGTH ); 4007 `¡Üe_deviû_šfo ( deviû ); 4009 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 4010 DEVICE_INTERFACE , "Name"); 4012 ià( deviû -> ®Ÿs !ð NULL ) 4015 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 4016 DEVICE_INTERFACE , "Alias"); 4017 } } 4019  $deviû_g‘_Çme ( btd_deviû * deviû , * Çme , size_t Ën ) 4021 ià( Çme !ð NULL && Ën > 0) { 4022 `¡ºýy ( Çme , deviû ->Çme, Ën - 1); 4023 Çme [ Ën - 1] = '\0'; 4025 } } 4027 boÞ $deviû_Çme_known ( btd_deviû * deviû ) 4029  deviû -> Çme [0] != '\0'; 4030 } } 4032  $deviû_£t_þass ( btd_deviû * deviû , ušt32_t þass ) 4034 ià( deviû -> þass == class) 4037 `DBG ("% 0x%06X", deviû -> ·th , þass ); 4039 deviû -> þass = class; 4041 `¡Üe_deviû_šfo ( deviû ); 4043 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 4044 DEVICE_INTERFACE , "Class"); 4045 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 4046 DEVICE_INTERFACE , "Icon"); 4047 } } 4049  $deviû_upd©e_addr ( btd_deviû * deviû , cÚ¡ bdaddr_t * bdaddr , 4050 ušt8_t bdaddr_ty³ ) 4052 ià(! `bacmp ( bdaddr , & deviû ->bdaddr) && 4053 bdaddr_ty³ =ð deviû ->bdaddr_type) 4059 deviû -> Ë = Œue ; 4061 `baýy (& deviû -> bdaddr , bdaddr); 4062 deviû -> bdaddr_ty³ = bdaddr_type; 4064 `¡Üe_deviû_šfo ( deviû ); 4066 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 4067 DEVICE_INTERFACE , "Address"); 4068 } } 4070  $deviû_£t_b»dr_suµÜt ( btd_deviû * deviû ) 4072 ià( deviû -> b»dr ) 4075 deviû -> b»dr = Œue ; 4076 `¡Üe_deviû_šfo ( deviû ); 4077 } } 4079  $deviû_£t_Ë_suµÜt ( btd_deviû * deviû , ušt8_t bdaddr_ty³ ) 4081 ià( deviû -> Ë ) 4084 deviû -> Ë = Œue ; 4085 deviû -> bdaddr_ty³ = bdaddr_type; 4087 `¡Üe_deviû_šfo ( deviû ); 4088 } } 4090  $deviû_upd©e_Ï¡_£’ ( btd_deviû * deviû , ušt8_t bdaddr_ty³ ) 4092 ià( bdaddr_ty³ =ð BDADDR_BREDR ) 4093 deviû -> b»dr_£’ = `time ( NULL ); 4095 deviû -> Ë_£’ = `time ( NULL ); 4096 } } 4105  $deviû_m”ge_du¶iÿ‹ ( btd_deviû * dev , btd_deviû * dup ) 4107 GSLi¡ * l ; 4109 `DBG (""); 4111 dev -> b»dr = dup ->bredr; 4113 dev -> Œu¡ed = dup ->trusted; 4114 dev -> blocked = dup ->blocked; 4116  l = dup -> uuids ;†;† = `g_¦i¡_Ãxt (l)) 4117 dev -> uuids = `g_¦i¡_­³nd (dev->uuids, `g_¡rdup ( l -> d©a )); 4119 ià( dev -> Çme [0] == '\0') 4120 `¡rýy ( dev -> Çme , dup ->name); 4122 ià(! dev -> ®Ÿs ) 4123 dev -> ®Ÿs = `g_¡rdup ( dup ->alias); 4125 dev -> þass = dup ->class; 4127 dev -> v’dÜ_¤c = dup ->vendor_src; 4128 dev -> v’dÜ = dup ->vendor; 4129 dev -> ´oduù = dup ->product; 4130 dev -> v”siÚ = dup ->version; 4131 } } 4133 ušt32_t $btd_deviû_g‘_þass ( btd_deviû * deviû ) 4135  deviû -> þass ; 4136 } } 4138 ušt16_t $btd_deviû_g‘_v’dÜ ( btd_deviû * deviû ) 4140  deviû -> v’dÜ ; 4141 } } 4143 ušt16_t $btd_deviû_g‘_v’dÜ_¤c ( btd_deviû * deviû ) 4145  deviû -> v’dÜ_¤c ; 4146 } } 4148 ušt16_t $btd_deviû_g‘_´oduù ( btd_deviû * deviû ) 4150  deviû -> ´oduù ; 4151 } } 4153 ušt16_t $btd_deviû_g‘_v”siÚ ( btd_deviû * deviû ) 4155  deviû -> v”siÚ ; 4156 } } 4158  $d–‘e_fÞd”_Œ“ (cÚ¡ * dœÇme ) 4160 DIR * dœ ; 4161  dœ’t * ’Œy ; 4162  fž’ame [ PATH_MAX ]; 4164 dœ = `Ý’dœ ( dœÇme ); 4165 ià( dœ =ð NULL ) 4168 ( ’Œy = `»addœ ( dœ )è!ð NULL ) { 4169 ià( `g_¡r_equ® ( ’Œy -> d_Çme , ".") || 4170 `g_¡r_equ® ( ’Œy -> d_Çme , "..")) 4173 ià( ’Œy -> d_ty³ =ð DT_UNKNOWN ) 4174 ’Œy -> d_ty³ = `utž_g‘_dt ( dœÇme ,ƒÁry-> d_Çme ); 4176 `¢´štf ( fž’ame , PATH_MAX , "%s/%s", dœÇme , ’Œy -> d_Çme ); 4178 ià( ’Œy -> d_ty³ =ð DT_DIR ) 4179 `d–‘e_fÞd”_Œ“ ( fž’ame ); 4181 `uÆšk ( fž’ame ); 4183 `þo£dœ ( dœ ); 4185 `rmdœ ( dœÇme ); 4186 } } 4188  $deviû_»move_¡Üed ( btd_deviû * deviû ) 4190 cÚ¡ bdaddr_t * ¤c = `btd_ad­‹r_g‘_add»ss ( deviû -> ad­‹r ); 4191  ad­‹r_addr [18]; 4192  deviû_addr [18]; 4193  fž’ame [ PATH_MAX ]; 4194 GKeyFže * key_fže ; 4195 * d©a ; 4196 gsize Ëngth = 0; 4198 ià( deviû -> b»dr_¡©e . bÚded ) { 4199 deviû -> b»dr_¡©e . bÚded = çl£ ; 4200 `btd_ad­‹r_»move_bÚdšg ( deviû -> ad­‹r , &deviû-> bdaddr , 4201 BDADDR_BREDR ); 4204 ià( deviû -> Ë_¡©e . bÚded ) { 4205 deviû -> Ë_¡©e . bÚded = çl£ ; 4206 `btd_ad­‹r_»move_bÚdšg ( deviû -> ad­‹r , &deviû-> bdaddr , 4207 deviû -> bdaddr_ty³ ); 4210 deviû -> b»dr_¡©e . ·œed = çl£ ; 4211 deviû -> Ë_¡©e . ·œed = çl£ ; 4213 ià( deviû -> blocked ) 4214 `deviû_unblock ( deviû , TRUE , FALSE ); 4216 `ba2¡r ( ¤c , ad­‹r_addr ); 4217 `ba2¡r (& deviû -> bdaddr , deviû_addr ); 4219 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s", ad­‹r_addr , 4220 deviû_addr ); 4221 `d–‘e_fÞd”_Œ“ ( fž’ame ); 4223 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/ÿche/%s", ad­‹r_addr , 4224 deviû_addr ); 4226 key_fže = `g_key_fže_Ãw (); 4227 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 4228 `g_key_fže_»move_group ( key_fže , "S”viûRecÜds", NULL ); 4230 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 4231 ià( Ëngth > 0) { 4232 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 4233 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 4236 `g_ä“ ( d©a ); 4237 `g_key_fže_ä“ ( key_fže ); 4238 } } 4240 #ifdeà __TIZEN_PATCH__ 4241  $deviû_uÅaœ ( btd_deviû * deviû , gboÞ—n »move_¡Üed ) 4243 `DBG ("+"); 4244 `DBG ("UÅaœšg deviû %s", deviû -> ·th ); 4246 ià( deviû -> bÚdšg ) { 4247 ušt8_t ¡©us ; 4249 ià( deviû -> b»dr_¡©e . cÚÃùed ) 4250 ¡©us = MGMT_STATUS_DISCONNECTED ; 4252 ¡©us = MGMT_STATUS_CONNECT_FAILED ; 4254 `deviû_ÿnûl_bÚdšg ( deviû , ¡©us ); 4257 ià( deviû -> brow£ ) 4258 `brow£_»que¡_ÿnûl ( deviû -> brow£ ); 4260 `©Œib_þ›Á_uÄegi¡” ( deviû -> g©t_£rviûs ); 4269 `g_¦i¡_ä“ ( deviû -> ³ndšg ); 4270 deviû -> ³ndšg = NULL ; 4272 ià( `btd_deviû_is_cÚÃùed ( deviû )) 4273 `discÚÃù_®l ( deviû ); 4275 ià( deviû -> ¡Üe_id > 0) { 4276 `g_sourû_»move ( deviû -> ¡Üe_id ); 4277 deviû -> ¡Üe_id = 0; 4279 ià(! »move_¡Üed ) 4280 `¡Üe_deviû_šfo_cb ( deviû ); 4283 ià( »move_¡Üed ) 4284 `deviû_»move_¡Üed ( deviû ); 4286 deviû -> b»dr_¡©e . ·œed = 0; 4287 deviû -> Ë_¡©e . ·œed = 0; 4288 deviû -> b»dr_¡©e . svc_»sÞved = çl£ ; 4289 deviû -> Œu¡ed = çl£ ; 4290 ià( deviû -> ®Ÿs !ð NULL ) { 4297 `DBG ("Freeing device‡lias‚ame"); 4298 `g_ä“ ( deviû -> ®Ÿs ); 4299 deviû -> ®Ÿs = NULL ; 4301 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 4302 DEVICE_INTERFACE , "Paired"); 4304 `DBG ("-"); 4305 } } 4308  $deviû_»move ( btd_deviû * deviû , gboÞ—n »move_¡Üed ) 4310 `DBG ("Removšg deviû %s", deviû -> ·th ); 4312 ià( deviû -> bÚdšg ) { 4313 ušt8_t ¡©us ; 4315 ià( deviû -> b»dr_¡©e . cÚÃùed ) 4316 ¡©us = MGMT_STATUS_DISCONNECTED ; 4318 ¡©us = MGMT_STATUS_CONNECT_FAILED ; 4320 `deviû_ÿnûl_bÚdšg ( deviû , ¡©us ); 4323 ià( deviû -> brow£ ) 4324 `brow£_»que¡_ÿnûl ( deviû -> brow£ ); 4326 #ifdeà __TIZEN_PATCH__ 4327 `©Œib_þ›Á_uÄegi¡” ( deviû -> g©t_£rviûs ); 4330  deviû -> £rviûs !ð NULL ) { 4331  btd_£rviû * £rviû = deviû -> £rviûs -> d©a ; 4333 deviû -> £rviûs = `g_¦i¡_»move (deviû->£rviûs, £rviû ); 4334 `£rviû_»move ( £rviû ); 4337 `g_¦i¡_ä“ ( deviû -> ³ndšg ); 4338 deviû -> ³ndšg = NULL ; 4340 ià( `btd_deviû_is_cÚÃùed ( deviû )) 4341 `discÚÃù_®l ( deviû ); 4343 ià( deviû -> ¡Üe_id > 0) { 4344 `g_sourû_»move ( deviû -> ¡Üe_id ); 4345 deviû -> ¡Üe_id = 0; 4347 ià(! »move_¡Üed ) 4348 `¡Üe_deviû_šfo_cb ( deviû ); 4351 ià( »move_¡Üed ) 4352 `deviû_»move_¡Üed ( deviû ); 4354 `btd_deviû_uÄef ( deviû ); 4355 } } 4357  $deviû_add»ss_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 4359 cÚ¡  btd_deviû * deviû = a ; 4360 cÚ¡ * add»ss = b ; 4361  addr [18]; 4363 `ba2¡r (& deviû -> bdaddr , addr ); 4364  `¡rÿ£cmp ( addr , add»ss ); 4365 } } 4367  $deviû_bdaddr_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 4369 cÚ¡  btd_deviû * deviû = a ; 4370 cÚ¡ bdaddr_t * bdaddr = b ; 4372  `bacmp (& deviû -> bdaddr , bdaddr); 4373 } } 4375  boÞ $addr_is_public ( ušt8_t addr_ty³ ) 4377 ià( addr_ty³ =ð BDADDR_BREDR ||‡ddr_ty³ =ð BDADDR_LE_PUBLIC ) 4378  Œue ; 4380  çl£ ; 4381 } } 4383  $deviû_addr_ty³_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 4385 cÚ¡  btd_deviû * dev = a ; 4386 cÚ¡  deviû_addr_ty³ * addr = b ; 4387  cmp ; 4389 cmp = `bacmp (& dev -> bdaddr , & addr ->bdaddr); 4396 ià(! cmp && `addr_is_public ( addr -> bdaddr_ty³ ) && 4397 `addr_is_public ( dev -> bdaddr_ty³ )) 4400 ià( addr -> bdaddr_ty³ =ð BDADDR_BREDR ) { 4401 ià(! dev -> b»dr ) 4404  cmp ; 4407 ià(! dev -> Ë ) 4410 ià( addr -> bdaddr_ty³ !ð dev ->bdaddr_type) 4413  cmp ; 4414 } } 4416  gboÞ—n $»cÜd_has_uuid (cÚ¡ sdp_»cÜd_t * »c , 4417 cÚ¡ * ´ofže_uuid ) 4419 sdp_li¡_t * ·t ; 4421  ·t = »c -> ·‰”n ;…© !ð NULL ;…© =…©-> Ãxt ) { 4422 * uuid ; 4423  »t ; 4425 uuid = `bt_uuid2¡ršg ( ·t -> d©a ); 4426 ià(! uuid ) 4429 »t = `¡rÿ£cmp ( uuid , ´ofže_uuid ); 4431 `ä“ ( uuid ); 4433 ià( »t == 0) 4434  TRUE ; 4437  FALSE ; 4438 } } 4440 GSLi¡ * $btd_deviû_g‘_uuids ( btd_deviû * deviû ) 4442  deviû -> uuids ; 4443 } } 4445  s´obe_d©a { 4446  btd_deviû * mdev ; 4447 GSLi¡ * muuids ; 4450  $dev_´obe ( btd_´ofže * p , * u£r_d©a ) 4452  ´obe_d©a * d = u£r_d©a ; 4453  btd_£rviû * £rviû ; 4455 ià( p -> deviû_´obe =ð NULL ) 4458 ià(! `deviû_m©ch_´ofže ( d -> dev , p , d-> uuids )) 4461 £rviû = `£rviû_ü—‹ ( d -> dev , p ); 4463 ià( `£rviû_´obe ( £rviû ) < 0) { 4464 `btd_£rviû_uÄef ( £rviû ); 4468 d -> dev -> £rviûs = `g_¦i¡_­³nd (d->dev->£rviûs, £rviû ); 4469 } } 4471  $deviû_´obe_´ofže ( gpoš‹r a , gpoš‹¸ b ) 4473  btd_deviû * deviû = a ; 4474  btd_´ofže * ´ofže = b ; 4475  btd_£rviû * £rviû ; 4477 ià( ´ofže -> deviû_´obe =ð NULL ) 4480 ià(! `deviû_m©ch_´ofže ( deviû , ´ofže , deviû-> uuids )) 4483 £rviû = `£rviû_ü—‹ ( deviû , ´ofže ); 4485 ià( `£rviû_´obe ( £rviû ) < 0) { 4486 `btd_£rviû_uÄef ( £rviû ); 4490 deviû -> £rviûs = `g_¦i¡_­³nd (deviû->£rviûs, £rviû ); 4492 ià(! ´ofže -> auto_cÚÃù || ! deviû -> g’”®_cÚÃù ) 4495 deviû -> ³ndšg = `g_¦i¡_­³nd (deviû->³ndšg, £rviû ); 4497 ià( `g_¦i¡_Ëngth ( deviû -> ³ndšg ) == 1) 4498 `cÚÃù_Ãxt ( deviû ); 4499 } } 4501  $deviû_»move_´ofže ( gpoš‹r a , gpoš‹¸ b ) 4503  btd_deviû * deviû = a ; 4504  btd_´ofže * ´ofže = b ; 4505  btd_£rviû * £rviû ; 4506 GSLi¡ * l ; 4508 l = `fšd_£rviû_w™h_´ofže ( deviû -> £rviûs , ´ofže ); 4509 ià( l =ð NULL ) 4512 £rviû = l -> d©a ; 4513 deviû -> £rviûs = `g_¦i¡_d–‘e_lšk (deviû->£rviûs, l ); 4514 deviû -> ³ndšg = `g_¦i¡_»move (deviû->³ndšg, £rviû ); 4515 `£rviû_»move ( £rviû ); 4516 } } 4518  $deviû_´obe_´ofžes ( btd_deviû * deviû , GSLi¡ * uuids ) 4520  ´obe_d©a d = { deviû , uuids }; 4521  addr [18]; 4523 `ba2¡r (& deviû -> bdaddr , addr ); 4525 ià( deviû -> blocked ) { 4526 `DBG ("Skpšg…rofže fÜ blocked deviû %s", addr ); 4527  add_uuids ; 4530 `DBG ("Probšg…rofže fÜ deviû %s", addr ); 4532 `btd_´ofže_fÜ—ch ( dev_´obe , & d ); 4534 add_uuids : 4535 `deviû_add_uuids ( deviû , uuids ); 4536 } } 4538  $¡Üe_sdp_»cÜd ( GKeyFže * key_fže , sdp_»cÜd_t * »c ) 4540  hªdË_¡r [11]; 4541 sdp_buf_t buf ; 4542  size , i ; 4543 * ¡r ; 4545 `¥rštf ( hªdË_¡r , "0x%8.8X", »c -> hªdË ); 4547 ià( `sdp_g’_»cÜd_pdu ( »c , & buf ) < 0) 4550 size = buf . d©a_size ; 4552 ¡r = `g_m®loc0 ( size *2+1); 4554  i = 0; i < size ; i++) 4555 `¥rštf ( ¡r + ( i * 2), "%02X", buf . d©a [i]); 4557 `g_key_fže_£t_¡ršg ( key_fže , "S”viûRecÜds", hªdË_¡r , ¡r ); 4559 `ä“ ( buf . d©a ); 4560 `g_ä“ ( ¡r ); 4561 } } 4563  $¡Üe_´im¬›s_äom_sdp_»cÜd ( GKeyFže * key_fže , 4564 sdp_»cÜd_t * »c ) 4566 uuid_t uuid ; 4567 * ©t_uuid , * ´im_uuid ; 4568 ušt16_t ¡¬t = 0, ’d = 0, psm = 0; 4569  hªdË [6], uuid_¡r [33]; 4570  i ; 4572 `sdp_uuid16_ü—‹ (& uuid , ATT_UUID ); 4573 ©t_uuid = `bt_uuid2¡ršg (& uuid ); 4575 `sdp_uuid16_ü—‹ (& uuid , GATT_PRIM_SVC_UUID ); 4576 ´im_uuid = `bt_uuid2¡ršg (& uuid ); 4578 ià(! `»cÜd_has_uuid ( »c , ©t_uuid )) 4579  dÚe ; 4581 ià(! `g©t_·r£_»cÜd ( »c , & uuid , & psm , & ¡¬t , & ’d )) 4582  dÚe ; 4584 `¥rštf ( hªdË , "%hu", ¡¬t ); 4585  uuid . ty³ ) { 4586  SDP_UUID16 : 4587 `¥rštf ( uuid_¡r , "%4.4X", uuid . v®ue . uuid16 ); 4589  SDP_UUID32 : 4590 `¥rštf ( uuid_¡r , "%8.8X", uuid . v®ue . uuid32 ); 4592  SDP_UUID128 : 4593  i = 0; i < 16; i++) 4594 `¥rštf ( uuid_¡r + ( i * 2), "%2.2X", 4595 uuid . v®ue . uuid128 . d©a [ i ]); 4598 uuid_¡r [0] = '\0'; 4601 `g_key_fže_£t_¡ršg ( key_fže , hªdË , "UUID", ´im_uuid ); 4602 `g_key_fže_£t_¡ršg ( key_fže , hªdË , "V®ue", uuid_¡r ); 4603 `g_key_fže_£t_š‹g” ( key_fže , hªdË , "EndGroupHªdË", ’d ); 4605 dÚe : 4606 `ä“ ( ´im_uuid ); 4607 `ä“ ( ©t_uuid ); 4608 } } 4610  $»c_cmp (cÚ¡ * a , cÚ¡ * b ) 4612 cÚ¡ sdp_»cÜd_t * r1 = a ; 4613 cÚ¡ sdp_»cÜd_t * r2 = b ; 4615  r1 -> hªdË - r2 ->handle; 4616 } } 4618  $upd©e_»cÜd ( brow£_»q * »q , cÚ¡ * uuid , 4619 sdp_»cÜd_t * »c ) 4621 GSLi¡ * l ; 4624 ià( `sdp_li¡_fšd ( »q -> »cÜds , »c , »c_cmp )) 4625  - EALREADY ; 4628 »q -> »cÜds = `sdp_li¡_­³nd Ôeq->»cÜds, `sdp_cÝy_»cÜd ( »c )); 4631 l = `g_¦i¡_fšd_cu¡om ( »q -> deviû -> uuids , uuid , bt_uuid_¡rcmp ); 4632 ià( l =ð NULL ) { 4633 l = `g_¦i¡_fšd_cu¡om ( »q -> ´ofžes_added , uuid , 4634 bt_uuid_¡rcmp ); 4635 ià( l !ð NULL ) 4637 »q -> ´ofžes_added = `g_¦i¡_­³nd (req->profiles_added, 4638 `g_¡rdup ( uuid )); 4642 } } 4644  $upd©e_b»dr_£rviûs ( brow£_»q * »q , sdp_li¡_t * »cs ) 4646  btd_deviû * deviû = »q ->device; 4647 sdp_li¡_t * £q ; 4648  ¤ÿddr [18], d¡addr [18]; 4649  sdp_fže [ PATH_MAX ]; 4650  ©t_fže [ PATH_MAX ]; 4651 GKeyFže * sdp_key_fže = NULL ; 4652 GKeyFže * ©t_key_fže = NULL ; 4653 * d©a ; 4654 gsize Ëngth = 0; 4656 `ba2¡r ( `btd_ad­‹r_g‘_add»ss ( deviû -> ad­‹r ), ¤ÿddr ); 4657 `ba2¡r (& deviû -> bdaddr , d¡addr ); 4659 ià(! deviû -> ‹mpܬy ) { 4660 `¢´štf ( sdp_fže , PATH_MAX , STORAGEDIR "/%s/cache/%s", 4661 ¤ÿddr , d¡addr ); 4663 sdp_key_fže = `g_key_fže_Ãw (); 4664 `g_key_fže_lßd_äom_fže ( sdp_key_fže , sdp_fže , 0, NULL ); 4666 `¢´štf ( ©t_fže , PATH_MAX , STORAGEDIR "/%s/%s/attributes", 4667 ¤ÿddr , d¡addr ); 4669 ©t_key_fže = `g_key_fže_Ãw (); 4670 `g_key_fže_lßd_äom_fže ( ©t_key_fže , ©t_fže , 0, NULL ); 4673  £q = »cs ; seq; seq = seq-> Ãxt ) { 4674 sdp_»cÜd_t * »c = (sdp_»cÜd_ˆ*è £q -> d©a ; 4675 sdp_li¡_t * svcþass = NULL ; 4676 * ´ofže_uuid ; 4678 ià(! »c ) 4681 ià( `sdp_g‘_£rviû_þas£s ( »c , & svcþass ) < 0) 4685 ià( svcþass =ð NULL ) { 4686 `DBG ("Skipping„ecord with‚o service classes"); 4691 ´ofže_uuid = `bt_uuid2¡ršg ( svcþass -> d©a ); 4692 ià(! ´ofže_uuid ) { 4693 `sdp_li¡_ä“ ( svcþass , ä“ ); 4697 ià( `bt_uuid_¡rcmp ( ´ofže_uuid , PNP_UUID ) == 0) { 4698 ušt16_t sourû , v’dÜ , ´oduù , v”siÚ ; 4699 sdp_d©a_t * pdli¡ ; 4701 pdli¡ = `sdp_d©a_g‘ ( »c , SDP_ATTR_VENDOR_ID_SOURCE ); 4702 sourû = pdli¡ ?…dli¡-> v® . ušt16 : 0x0000; 4704 pdli¡ = `sdp_d©a_g‘ ( »c , SDP_ATTR_VENDOR_ID ); 4705 v’dÜ = pdli¡ ?…dli¡-> v® . ušt16 : 0x0000; 4707 pdli¡ = `sdp_d©a_g‘ ( »c , SDP_ATTR_PRODUCT_ID ); 4708 ´oduù = pdli¡ ?…dli¡-> v® . ušt16 : 0x0000; 4710 pdli¡ = `sdp_d©a_g‘ ( »c , SDP_ATTR_VERSION ); 4711 v”siÚ = pdli¡ ?…dli¡-> v® . ušt16 : 0x0000; 4713 ià( sourû || v’dÜ || ´oduù || v”siÚ ) 4714 `btd_deviû_£t_²pid ( deviû , sourû , v’dÜ , 4715 ´oduù , v”siÚ ); 4718 ià( `upd©e_»cÜd ( »q , ´ofže_uuid , »c ) < 0) 4719  Ãxt ; 4721 ià( sdp_key_fže ) 4722 `¡Üe_sdp_»cÜd ( sdp_key_fže , »c ); 4724 ià( ©t_key_fže ) 4725 `¡Üe_´im¬›s_äom_sdp_»cÜd ( ©t_key_fže , »c ); 4727 Ãxt : 4728 `ä“ ( ´ofže_uuid ); 4729 `sdp_li¡_ä“ ( svcþass , ä“ ); 4732 ià( sdp_key_fže ) { 4733 d©a = `g_key_fže_to_d©a ( sdp_key_fže , & Ëngth , NULL ); 4734 ià( Ëngth > 0) { 4735 `ü—‹_fže ( sdp_fže , S_IRUSR | S_IWUSR ); 4736 `g_fže_£t_cÚ‹Ás ( sdp_fže , d©a , Ëngth , NULL ); 4739 `g_ä“ ( d©a ); 4740 `g_key_fže_ä“ ( sdp_key_fže ); 4743 ià( ©t_key_fže ) { 4744 d©a = `g_key_fže_to_d©a ( ©t_key_fže , & Ëngth , NULL ); 4745 ià( Ëngth > 0) { 4746 `ü—‹_fže ( ©t_fže , S_IRUSR | S_IWUSR ); 4747 `g_fže_£t_cÚ‹Ás ( ©t_fže , d©a , Ëngth , NULL ); 4750 `g_ä“ ( d©a ); 4751 `g_key_fže_ä“ ( ©t_key_fže ); 4753 } } 4755  $´im¬y_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 4757  `memcmp ( a , b , ( g©t_´im¬y )); 4758 } } 4760  $upd©e_g©t_uuids ( brow£_»q * »q , GSLi¡ * cu¼’t , 4761 GSLi¡ * found ) 4763 GSLi¡ * l , * lm©ch ; 4766  l = found ;†;† = `g_¦i¡_Ãxt (l)) { 4767  g©t_´im¬y * ´im = l -> d©a ; 4770 lm©ch = `g_¦i¡_fšd_cu¡om ( cu¼’t , ´im , ´im¬y_cmp ); 4771 ià( lm©ch ) 4775 »q -> ´ofžes_added = `g_¦i¡_­³nd (req->profiles_added, 4776 `g_¡rdup ( ´im -> uuid )); 4778 `DBG ("UUID Added: %s", ´im -> uuid ); 4780 } } 4782  GSLi¡ * $deviû_£rviûs_äom_»cÜd ( btd_deviû * deviû , 4783 GSLi¡ * ´ofžes ) 4785 GSLi¡ * l , * ´im_li¡ = NULL ; 4786 * ©t_uuid ; 4787 uuid_t ´Ùo_uuid ; 4789 `sdp_uuid16_ü—‹ (& ´Ùo_uuid , ATT_UUID ); 4790 ©t_uuid = `bt_uuid2¡ršg (& ´Ùo_uuid ); 4792  l = ´ofžes ;†;† =†-> Ãxt ) { 4793 cÚ¡ * ´ofže_uuid = l -> d©a ; 4794 cÚ¡ sdp_»cÜd_t * »c ; 4795  g©t_´im¬y * ´im ; 4796 ušt16_t ¡¬t = 0, ’d = 0, psm = 0; 4797 uuid_t ´im_uuid ; 4799 »c = `btd_deviû_g‘_»cÜd ( deviû , ´ofže_uuid ); 4800 ià(! »c ) 4803 ià(! `»cÜd_has_uuid ( »c , ©t_uuid )) 4806 ià(! `g©t_·r£_»cÜd ( »c , & ´im_uuid , & psm , & ¡¬t , & ’d )) 4809 ´im = `g_Ãw0 ( g©t_´im¬y , 1); 4810 ´im -> ¿nge . ¡¬t = start; 4811 ´im -> ¿nge . ’d =ƒnd; 4812 `sdp_uuid2¡º (& ´im_uuid , ´im -> uuid , (prim->uuid)); 4814 ´im_li¡ = `g_¦i¡_­³nd Õrim_li¡, ´im ); 4817 `ä“ ( ©t_uuid ); 4819  ´im_li¡ ; 4820 } } 4822  $£¬ch_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r u£r_d©a ) 4824  brow£_»q * »q = u£r_d©a ; 4825  btd_deviû * deviû = »q ->device; 4826 GSLi¡ * ´im¬›s ; 4827  addr [18]; 4829 `ba2¡r (& deviû -> bdaddr , addr ); 4831 ià( ”r < 0) { 4832 `”rÜ ("%s:ƒrror updating services: %s (%d)", 4833 addr , `¡»¼Ü (- ”r ), -err); 4834  £nd_»¶y ; 4837 `upd©e_b»dr_£rviûs ( »q , »cs ); 4839 ià( deviû -> tmp_»cÜds ) 4840 `sdp_li¡_ä“ ( deviû -> tmp_»cÜds , 4841 ( sdp_ä“_func_t è sdp_»cÜd_ä“ ); 4843 deviû -> tmp_»cÜds = »q -> »cÜds ; 4844 »q -> »cÜds = NULL ; 4846 ià(! »q -> ´ofžes_added ) { 4847 `DBG ("%s: NØ£rviû upd©e", addr ); 4848  £nd_»¶y ; 4851 ´im¬›s = `deviû_£rviûs_äom_»cÜd ( deviû , »q -> ´ofžes_added ); 4852 ià( ´im¬›s ) 4853 `deviû_»gi¡”_´im¬›s ( deviû , ´im¬›s , ATT_PSM ); 4862 `deviû_´obe_´ofžes ( deviû , »q -> ´ofžes_added ); 4865 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , »q -> deviû -> ·th , 4866 DEVICE_INTERFACE , "UUIDs"); 4868 £nd_»¶y : 4869 #ifdeà __TIZEN_PATCH__ 4870 ià(! »q -> msg ) 4871  dÚe ; 4875 ià( `dbus_mes§ge_is_m‘hod_ÿÎ ( »q -> msg , DEVICE_INTERFACE , 4877 `discov”_£rviûs_»¶y ( »q , ”r , deviû -> tmp_»cÜds ); 4879 dÚe : 4882 `deviû_svc_»sÞved ( deviû , BDADDR_BREDR , ”r ); 4883 `brow£_»que¡_ä“ ( »q ); 4884 } } 4886  $brow£_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r u£r_d©a ) 4888  brow£_»q * »q = u£r_d©a ; 4889  btd_deviû * deviû = »q ->device; 4890  btd_ad­‹r * ad­‹r = deviû ->adapter; 4891 uuid_t uuid ; 4895 ià( ”r < 0 || ( »q -> £¬ch_uuid =ð2 &&„eq-> »cÜds )) { 4896 ià( ”r =ð- ECONNRESET && »q -> »cÚÃù_©‹m± < 1) { 4897 »q -> £¬ch_uuid --; 4898 »q -> »cÚÃù_©‹m± ++; 4900  dÚe ; 4903 `upd©e_b»dr_£rviûs ( »q , »cs ); 4906 ià( uuid_li¡ [ »q -> £¬ch_uuid ]) { 4907 `sdp_uuid16_ü—‹ (& uuid , uuid_li¡ [ »q -> £¬ch_uuid ++]); 4908 `bt_£¬ch_£rviû ( `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 4909 & deviû -> bdaddr , & uuid , 4910 brow£_cb , u£r_d©a , NULL , 4911 »q -> sdp_æags ); 4915 dÚe : 4916 `£¬ch_cb ( »cs , ”r , u£r_d©a ); 4917 } } 4919  $¡Üe_£rviûs ( btd_deviû * deviû ) 4921  btd_ad­‹r * ad­‹r = deviû ->adapter; 4922  fž’ame [ PATH_MAX ]; 4923  ¤c_addr [18], d¡_addr [18]; 4924 uuid_t uuid ; 4925 * ´im_uuid ; 4926 GKeyFže * key_fže ; 4927 GSLi¡ * l ; 4928 * d©a ; 4929 gsize Ëngth = 0; 4931 ià( `deviû_add»ss_is_´iv©e ( deviû )) { 4932 `w¬n ("Can't store services for…rivate‡ddressed device %s", 4933 deviû -> ·th ); 4937 `sdp_uuid16_ü—‹ (& uuid , GATT_PRIM_SVC_UUID ); 4938 ´im_uuid = `bt_uuid2¡ršg (& uuid ); 4939 ià( ´im_uuid =ð NULL ) 4942 `ba2¡r ( `btd_ad­‹r_g‘_add»ss ( ad­‹r ), ¤c_addr ); 4943 `ba2¡r (& deviû -> bdaddr , d¡_addr ); 4945 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/%s/©Œibu‹s", ¤c_addr , 4946 d¡_addr ); 4947 key_fže = `g_key_fže_Ãw (); 4949  l = deviû -> ´im¬›s ;†;† =†-> Ãxt ) { 4950  g©t_´im¬y * ´im¬y = l -> d©a ; 4951  hªdË [6], uuid_¡r [33]; 4952  i ; 4954 `¥rštf ( hªdË , "%hu", ´im¬y -> ¿nge . ¡¬t ); 4956 `bt_¡ršg2uuid (& uuid , ´im¬y ->uuid); 4957 `sdp_uuid128_to_uuid (& uuid ); 4959  uuid . ty³ ) { 4960  SDP_UUID16 : 4961 `¥rštf ( uuid_¡r , "%4.4X", uuid . v®ue . uuid16 ); 4963  SDP_UUID32 : 4964 `¥rštf ( uuid_¡r , "%8.8X", uuid . v®ue . uuid32 ); 4966  SDP_UUID128 : 4967  i = 0; i < 16; i++) 4968 `¥rštf ( uuid_¡r + ( i * 2), "%2.2X", 4969 uuid . v®ue . uuid128 . d©a [ i ]); 4972 uuid_¡r [0] = '\0'; 4975 `g_key_fže_£t_¡ršg ( key_fže , hªdË , "UUID", ´im_uuid ); 4976 `g_key_fže_£t_¡ršg ( key_fže , hªdË , "V®ue", uuid_¡r ); 4977 `g_key_fže_£t_š‹g” ( key_fže , hªdË , "EndGroupHandle", 4978 ´im¬y -> ¿nge . ’d ); 4981 d©a = `g_key_fže_to_d©a ( key_fže , & Ëngth , NULL ); 4982 ià( Ëngth > 0) { 4983 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR ); 4984 `g_fže_£t_cÚ‹Ás ( fž’ame , d©a , Ëngth , NULL ); 4987 `ä“ ( ´im_uuid ); 4988 `g_ä“ ( d©a ); 4989 `g_key_fže_ä“ ( key_fže ); 4990 } } 4992  boÞ $deviû_g‘_auto_cÚÃù ( btd_deviû * deviû ) 4994 ià( deviû -> di§bË_auto_cÚÃù ) 4995  çl£ ; 4997  deviû -> auto_cÚÃù ; 4998 } } 5000  $©tio_cÚÃùed ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 5002  ©tio_d©a * ©tio = d©a ; 5003 GA‰rib * ©Œib = u£r_d©a ; 5005 `DBG (""); 5007 ià( ©tio -> cfunc ) 5008 ©tio -> `cfunc ( ©Œib ,‡‰io-> u£r_d©a ); 5009 } } 5011  $©tio_discÚÃùed ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 5013  ©tio_d©a * ©tio = d©a ; 5015 `DBG (""); 5017 ià( ©tio -> dcfunc ) 5018 ©tio -> `dcfunc ׉io-> u£r_d©a ); 5019 } } 5021  $©t_discÚÃùed_cb ( ”r , * u£r_d©a ) 5023  btd_deviû * deviû = u£r_d©a ; 5025 `DBG (""); 5027 ià( deviû -> brow£ ) 5028  dÚe ; 5030 `DBG ("% (%d)", `¡»¼Ü ( ”r ),ƒrr); 5032 `g_¦i¡_fÜ—ch ( deviû -> ©tios , ©tio_discÚÃùed , NULL ); 5034 `btd_g©t_þ›Á_discÚÃùed ( deviû -> þ›Á_dbus ); 5036 ià(! `deviû_g‘_auto_cÚÃù ( deviû )) { 5037 `DBG ("Automatic connection disabled"); 5038  dÚe ; 5046 ià( ”r =ð ETIMEDOUT ||ƒ¼ =ð ECONNRESET ||ƒ¼ =ð ECONNABORTED ) 5047 `ad­‹r_cÚÃù_li¡_add ( deviû -> ad­‹r , device); 5049 dÚe : 5050 `©tio_þ—nup ( deviû ); 5051 } } 5053  $£nd_Ë_brow£_»¥Ú£ ( brow£_»q * »q ) 5055  btd_deviû * dev = »q -> deviû ; 5056  b—»r_¡©e * ¡©e = & dev -> Ë_¡©e ; 5057 DBusMes§ge * »¶y , * msg = »q ->msg; 5059 ià(! msg ) 5062 ià(! `dbus_mes§ge_is_m‘hod_ÿÎ ( msg , DEVICE_INTERFACE , "Pair")) { 5063 »¶y = `btd_”rÜ_çžed ( msg , "Service discovery failed"); 5064 `g_dbus_£nd_mes§ge ( dbus_cÚn , »¶y ); 5068 ià(! ¡©e -> ·œed ) { 5069 »¶y = `btd_”rÜ_çžed ( msg , "Not…aired"); 5070 `g_dbus_£nd_mes§ge ( dbus_cÚn , »¶y ); 5074 ià(! dev -> b»dr_¡©e . ·œed && dev-> ³ndšg_·œed ) { 5075 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , dev -> ·th , 5076 DEVICE_INTERFACE , "Paired"); 5077 dev -> ³ndšg_·œed = çl£ ; 5080 `g_dbus_£nd_»¶y ( dbus_cÚn , msg , DBUS_TYPE_INVALID ); 5081 } } 5083  $»gi¡”_g©t_£rviûs ( brow£_»q * »q ) 5085  btd_deviû * deviû = »q ->device; 5086 GSLi¡ * £rviûs = NULL ; 5088 ià(! `bt_g©t_þ›Á_is_»ady ( deviû -> þ›Á )) 5095 `g©t_db_fÜ—ch_£rviû ( deviû -> db , NULL , add_´im¬y , & £rviûs ); 5097 `btd_deviû_£t_‹mpܬy ( deviû , FALSE ); 5099 `upd©e_g©t_uuids ( »q , deviû -> ´im¬›s , £rviûs ); 5100 `g_¦i¡_ä“_fuÎ ( deviû -> ´im¬›s , g_ä“ ); 5101 deviû -> ´im¬›s = NULL ; 5103 `deviû_»gi¡”_´im¬›s ( deviû , £rviûs , -1); 5105 `deviû_´obe_g©t_´ofžes ( deviû ); 5107 `deviû_svc_»sÞved ( deviû , deviû-> bdaddr_ty³ , 0); 5109 `¡Üe_£rviûs ( deviû ); 5111 `brow£_»que¡_ä“ ( »q ); 5112 } } 5114  $g©t_þ›Á_»ady_cb ( boÞ sucûss , ušt8_t ©t_ecode , 5115 * u£r_d©a ) 5117  btd_deviû * deviû = u£r_d©a ; 5119 `DBG ("¡©us: %s,ƒ¼Ü: %u", sucûss ? "sucûss" : "çžed", ©t_ecode ); 5121 ià(! sucûss ) { 5122 ià( deviû -> brow£ ) { 5123  brow£_»q * »q = deviû -> brow£ ; 5125 `£nd_Ë_brow£_»¥Ú£ ( »q ); 5126 deviû -> brow£ = NULL ; 5127 `brow£_»que¡_ä“ ( »q ); 5133 deviû -> ©t_mtu = `bt_©t_g‘_mtu (deviû-> ©t ); 5134 `g_©Œib_£t_mtu ( deviû -> ©Œib , deviû-> ©t_mtu ); 5136 `DBG ("MTU: %u", deviû -> ©t_mtu ); 5138 ià( deviû -> brow£ ) 5139 `»gi¡”_g©t_£rviûs ( deviû -> brow£ ); 5141 `deviû_acû±_g©t_´ofžes ( deviû ); 5143 `g_¦i¡_fÜ—ch ( deviû -> ©tios , ©tio_cÚÃùed , deviû-> ©Œib ); 5145 `btd_g©t_þ›Á_»ady ( deviû -> þ›Á_dbus ); 5146 } } 5148  $g©t_þ›Á_£rviû_chªged ( ušt16_t ¡¬t_hªdË , 5149 ušt16_t ’d_hªdË , 5150 * u£r_d©a ) 5152 `DBG ("¡¬ˆ0x%04x,ƒnd: 0x%04x", ¡¬t_hªdË , ’d_hªdË ); 5153 } } 5155  $g©t_þ›Á_š™ ( btd_deviû * deviû ) 5157 `g©t_þ›Á_þ—nup ( deviû ); 5159 deviû -> þ›Á = `bt_g©t_þ›Á_Ãw (deviû-> db , deviû-> ©t , 5160 deviû -> ©t_mtu ); 5161 ià(! deviû -> þ›Á ) { 5162 `DBG ("Failedo initialize"); 5166 ià(! `bt_g©t_þ›Á_£t_»ady_hªdËr ( deviû -> þ›Á , 5167 g©t_þ›Á_»ady_cb , 5168 deviû , NULL )) { 5169 `DBG ("Failedo set„eady handler"); 5170 `g©t_þ›Á_þ—nup ( deviû ); 5174 ià(! `bt_g©t_þ›Á_£t_£rviû_chªged ( deviû -> þ›Á , 5175 g©t_þ›Á_£rviû_chªged , 5176 deviû , NULL )) { 5177 `DBG ("Failedo set service changed handler"); 5178 `g©t_þ›Á_þ—nup ( deviû ); 5181 } } 5183 boÞ $deviû_©ch_©t ( btd_deviû * dev , GIOChªÃl * io ) 5185 GE¼Ü * g”r = NULL ; 5186 GA‰rib * ©Œib ; 5187 BtIOSecLev– £c_Ëv– ; 5188 ušt16_t mtu ; 5189 ušt16_t cid ; 5191 `bt_io_g‘ ( io , & g”r , BT_IO_OPT_SEC_LEVEL , & £c_Ëv– , 5192 BT_IO_OPT_IMTU , & mtu , 5193 BT_IO_OPT_CID , & cid , 5194 BT_IO_OPT_INVALID ); 5196 ià( g”r ) { 5197 `”rÜ ("bt_io_g‘: %s", g”r -> mes§ge ); 5198 `g_”rÜ_ä“ ( g”r ); 5199  çl£ ; 5202 ià( £c_Ëv– =ð BT_IO_SEC_LOW && dev -> Ë_¡©e . ·œed ) { 5203 `DBG ("Elevating security†evel since LTK is‡vailable"); 5205 £c_Ëv– = BT_IO_SEC_MEDIUM ; 5206 `bt_io_£t ( io , & g”r , BT_IO_OPT_SEC_LEVEL , £c_Ëv– , 5207 BT_IO_OPT_INVALID ); 5208 ià( g”r ) { 5209 `”rÜ ("bt_io_£t: %s", g”r -> mes§ge ); 5210 `g_”rÜ_ä“ ( g”r ); 5211  çl£ ; 5215 dev -> ©t_mtu = `MIN ( mtu , BT_ATT_MAX_LE_MTU ); 5216 ©Œib = `g_©Œib_Ãw ( io , dev -> ©t_mtu ); 5217 ià(! ©Œib ) { 5218 `”rÜ ("Unableo create‚ew GAttrib instance"); 5219  çl£ ; 5222 dev -> ©chid = `©Œib_chªÃl_©ch ( ©Œib ); 5223 ià( dev -> ©chid == 0) { 5224 `g_©Œib_uÄef ( ©Œib ); 5225 `”rÜ ("Attribute server‡ttach failure!"); 5226  çl£ ; 5229 dev -> ©Œib =‡ttrib; 5230 dev -> ©t = `g_©Œib_g‘_©t ( ©Œib ); 5232 `bt_©t_»f ( dev -> ©t ); 5234 dev -> ©t_discÚn_id = `bt_©t_»gi¡”_discÚÃù (dev-> ©t , 5235 ©t_discÚÃùed_cb , dev , NULL ); 5236 `bt_©t_£t_þo£_Ú_uÄef ( dev -> ©t , Œue ); 5238 `g©t_þ›Á_š™ ( dev ); 5245 `ad­‹r_cÚÃù_li¡_»move ( dev -> ad­‹r , dev); 5247  Œue ; 5248 } } 5250  $©t_cÚÃù_cb ( GIOChªÃl * io , GE¼Ü * g”r , gpoš‹r u£r_d©a ) 5252  ©t_ÿÎbacks * ©tcb = u£r_d©a ; 5253  btd_deviû * deviû = ©tcb -> u£r_d©a ; 5254 DBusMes§ge * »¶y ; 5255 ušt8_t io_ÿp ; 5256  ”r = 0; 5258 `g_io_chªÃl_uÄef ( deviû -> ©t_io ); 5259 deviû -> ©t_io = NULL ; 5261 #ifdeà __TIZEN_PATCH__ 5262 ià( `btd_ad­‹r_is_Ë_auto_cÚÃù ( deviû -> ad­‹r )) { 5263 `DBG ("LE‡uto connection is done"); 5264 `btd_ad­‹r_£t_Ë_auto_cÚÃù ( deviû -> ad­‹r , FALSE ); 5265 deviû -> Ë_auto_cÚÃù = FALSE ; 5269 ià( g”r ) { 5270 `DBG ("%s", g”r -> mes§ge ); 5272 ià( ©tcb -> ”r ) 5273 ©tcb -> `”r ( g”r , u£r_d©a ); 5275 ”r = - ECONNABORTED ; 5276  dÚe ; 5279 ià(! `deviû_©ch_©t ( deviû , io )) 5280  dÚe ; 5282 ià( ©tcb -> sucûss ) 5283 ©tcb -> `sucûss ( u£r_d©a ); 5285 ià(! deviû -> bÚdšg ) 5286  dÚe ; 5288 ià( deviû -> bÚdšg -> ag’t ) 5289 io_ÿp = `ag’t_g‘_io_ÿ·bž™y ( deviû -> bÚdšg -> ag’t ); 5291 io_ÿp = IO_CAPABILITY_NOINPUTNOOUTPUT ; 5293 ”r = `ad­‹r_ü—‹_bÚdšg ( deviû -> ad­‹r , &deviû-> bdaddr , 5294 deviû -> bdaddr_ty³ , io_ÿp ); 5295 dÚe : 5296 ià( deviû -> bÚdšg && ”r < 0) { 5297 »¶y = `btd_”rÜ_çžed ( deviû -> bÚdšg -> msg , `¡»¼Ü (- ”r )); 5298 `g_dbus_£nd_mes§ge ( dbus_cÚn , »¶y ); 5299 `bÚdšg_»que¡_ÿnûl ( deviû -> bÚdšg ); 5300 `bÚdšg_»que¡_ä“ ( deviû -> bÚdšg ); 5303 ià( deviû -> cÚÃù ) { 5304 ià(! deviû -> Ë_¡©e . svc_»sÞved ) 5305 `deviû_brow£_g©t ( deviû , NULL ); 5307 ià( ”r < 0) 5308 »¶y = `btd_”rÜ_çžed ( deviû -> cÚÃù , 5309 `¡»¼Ü (- ”r )); 5311 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( deviû -> cÚÃù ); 5313 `g_dbus_£nd_mes§ge ( dbus_cÚn , »¶y ); 5314 `dbus_mes§ge_uÄef ( deviû -> cÚÃù ); 5315 deviû -> cÚÃù = NULL ; 5318 `g_ä“ ( ©tcb ); 5319 } } 5321  $©t_”rÜ_cb (cÚ¡ GE¼Ü * g”r , gpoš‹r u£r_d©a ) 5323  ©t_ÿÎbacks * ©tcb = u£r_d©a ; 5324  btd_deviû * deviû = ©tcb -> u£r_d©a ; 5326 ià( `g_”rÜ_m©ches ( g”r , BT_IO_ERROR , ECONNABORTED )) 5329 ià( `deviû_g‘_auto_cÚÃù ( deviû )) { 5330 `DBG ("Enabling‡utomatic connections"); 5331 `ad­‹r_cÚÃù_li¡_add ( deviû -> ad­‹r , device); 5333 } } 5335  $deviû_cÚÃù_Ë ( btd_deviû * dev ) 5337  btd_ad­‹r * ad­‹r = dev ->adapter; 5338  ©t_ÿÎbacks * ©tcb ; 5339 BtIOSecLev– £c_Ëv– ; 5340 GIOChªÃl * io ; 5341 GE¼Ü * g”r = NULL ; 5342  addr [18]; 5343 #ifdeà __TIZEN_PATCH__ 5344 bdaddr_t * dba ; 5345 bdaddr_t Ë_auto_cÚÃù_ba = { {0, } }; 5349 ià( dev -> ©t_io ) 5350  - EALREADY ; 5352 `ba2¡r (& dev -> bdaddr , addr ); 5354 `DBG ("CÚÃùiÚ‡‰em±o: %s", addr ); 5356 ©tcb = `g_Ãw0 ( ©t_ÿÎbacks , 1); 5357 ©tcb -> ”r = ©t_”rÜ_cb ; 5358 ©tcb -> u£r_d©a = dev ; 5360 ià( dev -> Ë_¡©e . ·œed ) 5361 £c_Ëv– = BT_IO_SEC_MEDIUM ; 5363 £c_Ëv– = BT_IO_SEC_LOW ; 5369 #iâdeà __TIZEN_PATCH__ 5370 io = `bt_io_cÚÃù ( ©t_cÚÃù_cb , ©tcb , NULL , & g”r , 5371 BT_IO_OPT_SOURCE_BDADDR , 5372 `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 5373 BT_IO_OPT_SOURCE_TYPE , BDADDR_LE_PUBLIC , 5374 BT_IO_OPT_DEST_BDADDR , & dev -> bdaddr , 5375 BT_IO_OPT_DEST_TYPE , dev -> bdaddr_ty³ , 5376 BT_IO_OPT_CID , ATT_CID , 5377 BT_IO_OPT_SEC_LEVEL , £c_Ëv– , 5378 BT_IO_OPT_INVALID ); 5380 ià( dev -> Ë_auto_cÚÃù ) 5381 dba = & Ë_auto_cÚÃù_ba ; 5383 dba = & dev -> bdaddr ; 5385 io = `bt_io_cÚÃù ( ©t_cÚÃù_cb , ©tcb , NULL , & g”r , 5386 BT_IO_OPT_SOURCE_BDADDR , 5387 `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 5388 BT_IO_OPT_SOURCE_TYPE , BDADDR_LE_PUBLIC , 5389 BT_IO_OPT_DEST_BDADDR , dba , 5390 BT_IO_OPT_DEST_TYPE , dev -> bdaddr_ty³ , 5391 BT_IO_OPT_CID , ATT_CID , 5392 BT_IO_OPT_SEC_LEVEL , £c_Ëv– , 5393 BT_IO_OPT_INVALID ); 5395 ià( dev -> Ë_auto_cÚÃù ) { 5396 ià( io ) 5397 `btd_ad­‹r_£t_Ë_auto_cÚÃù ( ad­‹r , TRUE ); 5399 `btd_ad­‹r_£t_Ë_auto_cÚÃù ( dev -> ad­‹r , FALSE ); 5400 dev -> Ë_auto_cÚÃù = FALSE ; 5405 ià( io =ð NULL ) { 5406 ià( dev -> bÚdšg ) { 5407 DBusMes§ge * »¶y = `btd_”rÜ_çžed ( 5408 dev -> bÚdšg -> msg , g”r -> mes§ge ); 5410 `g_dbus_£nd_mes§ge ( dbus_cÚn , »¶y ); 5411 `bÚdšg_»que¡_ÿnûl ( dev -> bÚdšg ); 5412 `bÚdšg_»que¡_ä“ ( dev -> bÚdšg ); 5415 `”rÜ ("ATT bt_io_cÚÃù(%s): %s", addr , g”r -> mes§ge ); 5416 `g_”rÜ_ä“ ( g”r ); 5417 `g_ä“ ( ©tcb ); 5418  - EIO ; 5422 dev -> ©t_io = io ; 5425 } } 5427  $©t_brow£_”rÜ_cb (cÚ¡ GE¼Ü * g”r , gpoš‹r u£r_d©a ) 5429  ©t_ÿÎbacks * ©tcb = u£r_d©a ; 5430  btd_deviû * deviû = ©tcb -> u£r_d©a ; 5431  brow£_»q * »q = deviû -> brow£ ; 5433 `£nd_Ë_brow£_»¥Ú£ ( »q ); 5434 deviû -> brow£ = NULL ; 5435 `brow£_»que¡_ä“ ( »q ); 5436 } } 5438  $brow£_g©t_þ›Á ( brow£_»q * »q ) 5440  btd_deviû * deviû = »q ->device; 5442 ià(! deviû -> þ›Á ) { 5443 `DBG ("No instance currently‡ttached"); 5451 ià( `bt_g©t_þ›Á_is_»ady ( deviû -> þ›Á )) 5452 `»gi¡”_g©t_£rviûs ( »q ); 5453 } } 5455  $©t_brow£_cb ( gpoš‹r u£r_d©a ) 5457  ©t_ÿÎbacks * ©tcb = u£r_d©a ; 5458  btd_deviû * deviû = ©tcb -> u£r_d©a ; 5460 `brow£_g©t_þ›Á ( deviû -> brow£ ); 5461 } } 5463  $deviû_brow£_g©t ( btd_deviû * deviû , DBusMes§ge * msg ) 5465  btd_ad­‹r * ad­‹r = deviû ->adapter; 5466  ©t_ÿÎbacks * ©tcb ; 5467  brow£_»q * »q ; 5469 ià( deviû -> brow£ ) 5470  - EBUSY ; 5472 »q = `g_Ãw0 ( brow£_»q , 1); 5473 »q -> deviû = device; 5475 deviû -> brow£ = »q ; 5477 ià( deviû -> ©Œib ) { 5478 `brow£_g©t_þ›Á ( deviû -> brow£ ); 5479  dÚe ; 5482 ©tcb = `g_Ãw0 ( ©t_ÿÎbacks , 1); 5483 ©tcb -> ”r = ©t_brow£_”rÜ_cb ; 5484 ©tcb -> sucûss = ©t_brow£_cb ; 5485 ©tcb -> u£r_d©a = deviû ; 5487 deviû -> ©t_io = `bt_io_cÚÃù ( ©t_cÚÃù_cb , 5488 ©tcb , NULL , NULL, 5489 BT_IO_OPT_SOURCE_BDADDR , 5490 `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 5491 BT_IO_OPT_SOURCE_TYPE , BDADDR_LE_PUBLIC , 5492 BT_IO_OPT_DEST_BDADDR , & deviû -> bdaddr , 5493 BT_IO_OPT_DEST_TYPE , deviû -> bdaddr_ty³ , 5494 BT_IO_OPT_CID , ATT_CID , 5495 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 5496 BT_IO_OPT_INVALID ); 5498 ià( deviû -> ©t_io =ð NULL ) { 5499 deviû -> brow£ = NULL ; 5500 `brow£_»que¡_ä“ ( »q ); 5501 `g_ä“ ( ©tcb ); 5502  - EIO ; 5505 dÚe : 5507 ià( msg ) { 5508 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 5510 »q -> msg = `dbus_mes§ge_»f (msg); 5513 »q -> li¡’”_id = `g_dbus_add_discÚÃù_w©ch ( dbus_cÚn , 5514 £nd” , 5515 discov”_£rviûs_»q_ex™ , 5516 »q , NULL ); 5520 } } 5522  ušt16_t $g‘_sdp_æags ( btd_deviû * deviû ) 5524 ušt16_t vid , pid ; 5526 vid = `btd_deviû_g‘_v’dÜ ( deviû ); 5527 pid = `btd_deviû_g‘_´oduù ( deviû ); 5533 ià( vid =ð0x054ø&& pid == 0x05c4) 5534  SDP_LARGE_MTU ; 5536 ià( `btd_ad­‹r_s¥_’abËd ( deviû -> ad­‹r )) 5540 ià(! `¡ºcmp ( deviû -> Çme , "Wœ–es CÚŒÞËr", MAX_NAME_LENGTH ) && 5541 deviû -> þass == 0x2508) 5542  SDP_LARGE_MTU ; 5545 } } 5547  $deviû_brow£_sdp ( btd_deviû * deviû , DBusMes§ge * msg ) 5549  btd_ad­‹r * ad­‹r = deviû ->adapter; 5550  brow£_»q * »q ; 5551 uuid_t uuid ; 5552  ”r ; 5554 ià( deviû -> brow£ ) 5555  - EBUSY ; 5557 »q = `g_Ãw0 ( brow£_»q , 1); 5558 »q -> deviû = device; 5559 `sdp_uuid16_ü—‹ (& uuid , uuid_li¡ [ »q -> £¬ch_uuid ++]); 5561 »q -> sdp_æags = `g‘_sdp_æags ( deviû ); 5563 ”r = `bt_£¬ch_£rviû ( `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 5564 & deviû -> bdaddr , & uuid , brow£_cb , »q , NULL , 5565 »q -> sdp_æags ); 5566 ià( ”r < 0) { 5567 `brow£_»que¡_ä“ ( »q ); 5568  ”r ; 5571 deviû -> brow£ = »q ; 5573 ià( msg ) { 5574 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 5576 »q -> msg = `dbus_mes§ge_»f (msg); 5579 »q -> li¡’”_id = `g_dbus_add_discÚÃù_w©ch ( dbus_cÚn , 5580 £nd” , 5581 discov”_£rviûs_»q_ex™ , 5582 »q , NULL ); 5585  ”r ; 5586 } } 5588 #ifdeà __TIZEN_PATCH__ 5589  $deviû_cu¡om_brow£_sdp ( btd_deviû * deviû , 5590 DBusMes§ge * msg , uuid_t * £¬ch ) 5592  btd_ad­‹r * ad­‹r = deviû ->adapter; 5593  brow£_»q * »q ; 5594 uuid_t uuid ; 5595  ”r ; 5597 ià( deviû -> brow£ ) 5598  - EBUSY ; 5600 »q = `g_Ãw0 ( brow£_»q , 1); 5601 »q -> deviû = device; 5602 ià( £¬ch ) { 5603 `memýy (& uuid , £¬ch , ( uuid_t )); 5605 `sdp_uuid16_ü—‹ (& uuid , uuid_li¡ [ »q -> £¬ch_uuid ++]); 5608 »q -> sdp_æags = `g‘_sdp_æags ( deviû ); 5610 ”r = `bt_£¬ch_£rviû ( `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 5611 & deviû -> bdaddr , & uuid , brow£_cb , »q , NULL , 5612 »q -> sdp_æags ); 5613 ià( ”r < 0) { 5614 `brow£_»que¡_ä“ ( »q ); 5615  ”r ; 5618 deviû -> brow£ = »q ; 5620 ià( msg ) { 5621 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 5623 »q -> msg = `dbus_mes§ge_»f (msg); 5626 »q -> li¡’”_id = `g_dbus_add_discÚÃù_w©ch ( dbus_cÚn , 5627 £nd” , 5628 discov”_£rviûs_»q_ex™ , 5629 »q , NULL ); 5631  ”r ; 5632 } } 5634  $deviû_£t_Ï¡_addr_ty³ ( btd_deviû * deviû , ušt8_t ty³ ) 5636 ià(! deviû ) 5639 `DBG ("La¡‡dd¸ty³ %d", ty³ ); 5641 deviû -> Ï¡_bdaddr_ty³ = ty³ ; 5642 } } 5645  $deviû_discov”_£rviûs ( btd_deviû * deviû ) 5647  ”r ; 5649 ià( deviû -> b»dr ) 5650 ”r = `deviû_brow£_sdp ( deviû , NULL ); 5652 ”r = `deviû_brow£_g©t ( deviû , NULL ); 5654 ià( ”r =ð0 && deviû -> discov_tim” ) { 5655 `g_sourû_»move ( deviû -> discov_tim” ); 5656 deviû -> discov_tim” = 0; 5659  ”r ; 5660 } } 5662  btd_ad­‹r * $deviû_g‘_ad­‹r ( btd_deviû * deviû ) 5664 ià(! deviû ) 5665  NULL ; 5667  deviû -> ad­‹r ; 5668 } } 5670 cÚ¡ bdaddr_t * $deviû_g‘_add»ss ( btd_deviû * deviû ) 5672  & deviû -> bdaddr ; 5673 } } 5675 cÚ¡ * $deviû_g‘_·th (cÚ¡  btd_deviû * deviû ) 5677 ià(! deviû ) 5678  NULL ; 5680  deviû -> ·th ; 5681 } } 5683 gboÞ—n $deviû_is_‹mpܬy ( btd_deviû * deviû ) 5685  deviû -> ‹mpܬy ; 5686 } } 5688  $btd_deviû_£t_‹mpܬy ( btd_deviû * deviû , gboÞ—n ‹mpܬy ) 5690 ià(! deviû ) 5693 ià( deviû -> ‹mpܬy ==emporary) 5696 `DBG ("‹mpܬy %d", ‹mpܬy ); 5698 ià( ‹mpܬy ) { 5699 ià( deviû -> b»dr ) 5700 `ad­‹r_wh™–i¡_»move ( deviû -> ad­‹r , device); 5701 `ad­‹r_cÚÃù_li¡_»move ( deviû -> ad­‹r , device); 5703 ià( deviû -> b»dr ) 5704 `ad­‹r_wh™–i¡_add ( deviû -> ad­‹r , device); 5705 `¡Üe_deviû_šfo ( deviû ); 5708 deviû -> ‹mpܬy =emporary; 5709 } } 5711  $btd_deviû_£t_Œu¡ed ( btd_deviû * deviû , gboÞ—n Œu¡ed ) 5713 ià(! deviû ) 5716 ià( deviû -> Œu¡ed ==rusted) 5719 `DBG ("Œu¡ed %d", Œu¡ed ); 5721 deviû -> Œu¡ed =rusted; 5723 `¡Üe_deviû_šfo ( deviû ); 5725 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 5726 DEVICE_INTERFACE , "Trusted"); 5727 } } 5729  $deviû_£t_bÚded ( btd_deviû * deviû , ušt8_t bdaddr_ty³ ) 5731 ià(! deviû ) 5734 `DBG (""); 5736 ià( bdaddr_ty³ =ð BDADDR_BREDR ) 5737 deviû -> b»dr_¡©e . bÚded = Œue ; 5739 deviû -> Ë_¡©e . bÚded = Œue ; 5740 } } 5742  $deviû_£t_Ëgacy ( btd_deviû * deviû , boÞ Ëgacy ) 5744 ià(! deviû ) 5747 `DBG ("Ëgacy %d", Ëgacy ); 5749 ià( deviû -> Ëgacy ==†egacy) 5752 deviû -> Ëgacy =†egacy; 5754 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 5755 DEVICE_INTERFACE , "LegacyPairing"); 5756 } } 5758  $deviû_£t_rssi ( btd_deviû * deviû , št8_t rssi ) 5760 ià(! deviû ) 5763 #ifdeà __TIZEN_PATCH__ 5764 ià( rssi =ð0 || deviû ->rssi == 0) { 5765 ià( deviû -> rssi ==„ssi) 5769 deviû -> rssi =„ssi; 5770 `DBG ("rss˜%d", rssi ); 5772 ià( rssi =ð0 || deviû ->rssi == 0) { 5773 ià( deviû -> rssi ==„ssi) 5776 `DBG ("rss˜%d", rssi ); 5778 deviû -> rssi =„ssi; 5780  d– ; 5782 ià( deviû -> rssi >„ssi) 5783 d– = deviû -> rssi -„ssi; 5785 d– = rssi - deviû ->rssi; 5788 ià( d– < 8) 5791 `DBG ("rss˜%d d– %d", rssi , d– ); 5793 deviû -> rssi =„ssi; 5797 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 5798 DEVICE_INTERFACE , "RSSI"); 5799 } } 5801  gboÞ—n $¡¬t_discov”y ( gpoš‹r u£r_d©a ) 5803  btd_deviû * deviû = u£r_d©a ; 5805 ià( deviû -> b»dr ) 5806 `deviû_brow£_sdp ( deviû , NULL ); 5808 `deviû_brow£_g©t ( deviû , NULL ); 5810 deviû -> discov_tim” = 0; 5812  FALSE ; 5813 } } 5815  $deviû_£t_·œed ( btd_deviû * dev , ušt8_t bdaddr_ty³ ) 5817  b—»r_¡©e * ¡©e = `g‘_¡©e ( dev , bdaddr_ty³ ); 5819 ià( ¡©e -> ·œed ) 5822 ¡©e -> ·œed = Œue ; 5827 ià( dev -> b»dr_¡©e . ·œed =ðdev-> Ë_¡©e .paired) 5830 ià(! ¡©e -> svc_»sÞved ) { 5831 dev -> ³ndšg_·œed = Œue ; 5835 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , dev -> ·th , 5836 DEVICE_INTERFACE , "Paired"); 5837 } } 5839  $deviû_£t_uÅaœed ( btd_deviû * dev , ušt8_t bdaddr_ty³ ) 5841  b—»r_¡©e * ¡©e = `g‘_¡©e ( dev , bdaddr_ty³ ); 5843 ià(! ¡©e -> ·œed ) 5846 ¡©e -> ·œed = çl£ ; 5852 ià( dev -> b»dr_¡©e . ·œed !ðdev-> Ë_¡©e .paired) { 5854 ià( ¡©e -> cÚÃùed ) 5855 `deviû_»que¡_discÚÃù ( dev , NULL ); 5860 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , dev -> ·th , 5861 DEVICE_INTERFACE , "Paired"); 5863 `btd_deviû_£t_‹mpܬy ( dev , TRUE ); 5865 ià( `btd_deviû_is_cÚÃùed ( dev )) 5866 `deviû_»que¡_discÚÃù ( dev , NULL ); 5868 `btd_ad­‹r_»move_deviû ( dev -> ad­‹r , dev); 5869 } } 5871  $deviû_auth_»q_ä“ ( btd_deviû * deviû ) 5873  auth’tiÿtiÚ_»q * authr = deviû ->authr; 5875 ià(! authr ) 5878 ià( authr -> ag’t ) 5879 `ag’t_uÄef ( authr -> ag’t ); 5881 `g_ä“ ( authr -> pšcode ); 5882 `g_ä“ ( authr ); 5884 deviû -> authr = NULL ; 5885 } } 5887 boÞ $deviû_is_»Œyšg ( btd_deviû * deviû ) 5889  bÚdšg_»q * bÚdšg = deviû ->bonding; 5891  bÚdšg && bÚdšg-> »Œy_tim” > 0; 5892 } } 5894  $deviû_bÚdšg_com¶‘e ( btd_deviû * deviû , ušt8_t bdaddr_ty³ , 5895 ušt8_t ¡©us ) 5897  bÚdšg_»q * bÚdšg = deviû ->bonding; 5898  auth’tiÿtiÚ_»q * auth = deviû -> authr ; 5899  b—»r_¡©e * ¡©e = `g‘_¡©e ( deviû , bdaddr_ty³ ); 5901 `DBG ("bÚdšg %°¡©u 0x%02x", bÚdšg , ¡©us ); 5903 ià( auth &&‡uth-> ag’t ) 5904 `ag’t_ÿnûl ( auth -> ag’t ); 5906 ià( ¡©us ) { 5907 `deviû_ÿnûl_auth’tiÿtiÚ ( deviû , TRUE ); 5908 `deviû_bÚdšg_çžed ( deviû , ¡©us ); 5909 #ifdeà __TIZEN_PATCH__ 5910 deviû -> Ëgacy_·œšg = çl£ ; 5914 #ifdeà __TIZEN_PATCH__ 5915 deviû -> Ëgacy_·œšg = çl£ ; 5917 `deviû_auth_»q_ä“ ( deviû ); 5920 ià( ¡©e -> ·œed ) 5923 `deviû_£t_·œed ( deviû , bdaddr_ty³ ); 5928 ià( ¡©e -> svc_»sÞved && bÚdšg ) { 5929 `g_dbus_£nd_»¶y ( dbus_cÚn , bÚdšg -> msg , DBUS_TYPE_INVALID ); 5930 `bÚdšg_»que¡_ä“ ( bÚdšg ); 5938 ià( bÚdšg ) { 5939 `DBG ("Proceeding with service discovery"); 5942 ià( deviû -> discov_tim” ) { 5943 `g_sourû_»move ( deviû -> discov_tim” ); 5944 deviû -> discov_tim” = 0; 5947 ià( bdaddr_ty³ =ð BDADDR_BREDR ) 5948 `deviû_brow£_sdp ( deviû , bÚdšg -> msg ); 5950 `deviû_brow£_g©t ( deviû , bÚdšg -> msg ); 5952 `bÚdšg_»que¡_ä“ ( bÚdšg ); 5953 } ià(! ¡©e -> svc_»sÞved ) { 5954 ià(! deviû -> brow£ && !deviû-> discov_tim” && 5955 maš_Ýts . »v”£_sdp ) { 5959 `DBG ("settingimer for„everse service discovery"); 5960 deviû -> discov_tim” = `g_timeout_add_£cÚds ( 5961 DISCOVERY_TIMER , 5962 ¡¬t_discov”y , 5963 deviû ); 5966 } } 5968  gboÞ—n $svc_idË_cb ( gpoš‹r u£r_d©a ) 5970  svc_ÿÎback * cb = u£r_d©a ; 5971  btd_deviû * dev = cb ->dev; 5973 dev -> svc_ÿÎbacks = `g_¦i¡_»move (dev->svc_ÿÎbacks, cb ); 5975 cb -> `func (cb-> dev , 0, cb-> u£r_d©a ); 5977 `g_ä“ ( cb ); 5979  FALSE ; 5980 } } 5982  $deviû_wa™_fÜ_svc_com¶‘e ( btd_deviû * dev , 5983 deviû_svc_cb_t func , 5984 * u£r_d©a ) 5987  b—»r_¡©e * ¡©e = & dev -> b»dr_¡©e ; 5988  id = 0; 5989  svc_ÿÎback * cb ; 5991 cb = `g_Ãw0 ( svc_ÿÎback , 1); 5992 cb -> func = func; 5993 cb -> u£r_d©a = user_data; 5994 cb -> dev = dev; 5995 cb -> id = ++id; 5997 dev -> svc_ÿÎbacks = `g_¦i¡_´•’d (dev->svc_ÿÎbacks, cb ); 5999 ià( ¡©e -> svc_»sÞved || ! maš_Ýts . »v”£_sdp ) 6000 cb -> idË_id = `g_idË_add ( svc_idË_cb , cb); 6001 ià( dev -> discov_tim” > 0) { 6002 `g_sourû_»move ( dev -> discov_tim” ); 6003 dev -> discov_tim” = `g_idË_add ( ¡¬t_discov”y , dev); 6006  cb -> id ; 6007 } } 6009 boÞ $deviû_»move_svc_com¶‘e_ÿÎback ( btd_deviû * dev , 6010  id ) 6012 GSLi¡ * l ; 6014  l = dev -> svc_ÿÎbacks ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 6015  svc_ÿÎback * cb = l -> d©a ; 6017 ià( cb -> id != id) 6020 ià( cb -> idË_id > 0) 6021 `g_sourû_»move ( cb -> idË_id ); 6023 dev -> svc_ÿÎbacks = `g_¦i¡_»move (dev->svc_ÿÎbacks, cb ); 6024 `g_ä“ ( cb ); 6026  Œue ; 6029  çl£ ; 6030 } } 6032 gboÞ—n $deviû_is_bÚdšg ( btd_deviû * deviû , cÚ¡ * £nd” ) 6034  bÚdšg_»q * bÚdšg = deviû ->bonding; 6036 ià(! deviû -> bÚdšg ) 6037  FALSE ; 6039 ià(! £nd” ) 6040  TRUE ; 6042  `g_¡r_equ® ( £nd” , `dbus_mes§ge_g‘_£nd” ( bÚdšg -> msg )); 6043 } } 6045  gboÞ—n $deviû_bÚdšg_»Œy ( gpoš‹r d©a ) 6047  btd_deviû * deviû = d©a ; 6048  btd_ad­‹r * ad­‹r = `deviû_g‘_ad­‹r ( deviû ); 6049  bÚdšg_»q * bÚdšg = deviû ->bonding; 6050 ušt8_t io_ÿp ; 6051  ”r ; 6053 ià(! bÚdšg ) 6054  FALSE ; 6056 `DBG ("retrying bonding"); 6057 bÚdšg -> »Œy_tim” = 0; 6063 `deviû_bÚdšg_»¡¬t_tim” ( deviû ); 6065 ià( bÚdšg -> ag’t ) 6066 io_ÿp = `ag’t_g‘_io_ÿ·bž™y ( bÚdšg -> ag’t ); 6068 io_ÿp = IO_CAPABILITY_NOINPUTNOOUTPUT ; 6070 ”r = `ad­‹r_bÚdšg_©‹m± ( ad­‹r , & deviû -> bdaddr , 6071 deviû -> bdaddr_ty³ , io_ÿp ); 6072 ià( ”r < 0) 6073 `deviû_bÚdšg_com¶‘e ( deviû , bÚdšg -> bdaddr_ty³ , 6074 bÚdšg -> ¡©us ); 6076  FALSE ; 6077 } } 6079  $deviû_bÚdšg_©‹m±_»Œy ( btd_deviû * deviû ) 6081  bÚdšg_»q * bÚdšg = deviû ->bonding; 6084 ià( `deviû_is_»Œyšg ( deviû )) 6087 ià(! bÚdšg ) 6088  - EINVAL ; 6092 `bÚdšg_»que¡_¡Ý_tim” ( bÚdšg ); 6094 ià( `btd_ad­‹r_pš_cb_™”_’d ( bÚdšg -> cb_™” )) 6095  - EINVAL ; 6097 `DBG ("scheduling„etry"); 6098 bÚdšg -> »Œy_tim” = `g_timeout_add (3000, 6099 deviû_bÚdšg_»Œy , deviû ); 6101 } } 6103  $deviû_bÚdšg_çžed ( btd_deviû * deviû , ušt8_t ¡©us ) 6105  bÚdšg_»q * bÚdšg = deviû ->bonding; 6106 DBusMes§ge * »¶y ; 6108 `DBG ("¡©u %u", ¡©us ); 6110 ià(! bÚdšg ) { 6111 #ifdeà __TIZEN_PATCH__ 6112 ià( deviû -> Ëgacy_·œšg ) { 6113 `DBG ("Emit LegacyPaired"); 6114 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 6115 DEVICE_INTERFACE , "LegacyPaired"); 6120 #ifdeà __TIZEN_PATCH__ 6121 `btd_deviû_£t_‹mpܬy ( deviû , TRUE ); 6124 ià( deviû -> authr ) 6125 `deviû_ÿnûl_auth’tiÿtiÚ ( deviû , FALSE ); 6127 »¶y = `Ãw_auth’tiÿtiÚ_»tuº ( bÚdšg -> msg , ¡©us ); 6128 `g_dbus_£nd_mes§ge ( dbus_cÚn , »¶y ); 6130 `bÚdšg_»que¡_ä“ ( bÚdšg ); 6131 } } 6133  btd_ad­‹r_pš_cb_™” * $deviû_bÚdšg_™” ( btd_deviû * deviû ) 6135 ià( deviû -> bÚdšg =ð NULL ) 6136  NULL ; 6138  deviû -> bÚdšg -> cb_™” ; 6139 } } 6141  $pšcode_cb ( ag’t *ag’t, DBusE¼Ü * ”r , cÚ¡ * pš , 6142 * d©a ) 6144  auth’tiÿtiÚ_»q * auth = d©a ; 6145  btd_deviû * deviû = auth ->device; 6148 ià( auth -> ag’t =ð NULL ) 6151 `btd_ad­‹r_pšcode_»¶y ( deviû -> ad­‹r , &deviû-> bdaddr , 6152 pš ,…š ? `¡¾’ (pin) : 0); 6154 `ag’t_uÄef ( deviû -> authr -> ag’t ); 6155 deviû -> authr -> ag’t = NULL ; 6156 } } 6158  $cÚfœm_cb ( ag’t *ag’t, DBusE¼Ü * ”r , * d©a ) 6160  auth’tiÿtiÚ_»q * auth = d©a ; 6161  btd_deviû * deviû = auth ->device; 6164 ià( auth -> ag’t =ð NULL ) 6167 #ifdeà __TIZEN_PATCH__ 6168 ià( deviû -> b»dr =ð TRUE ) 6169 `btd_ad­‹r_cÚfœm_»¶y ( deviû -> ad­‹r , &deviû-> bdaddr , 6170 BDADDR_BREDR , 6171 ”r ? FALSE : TRUE ); 6174 `btd_ad­‹r_cÚfœm_»¶y ( deviû -> ad­‹r , &deviû-> bdaddr , 6175 deviû -> bdaddr_ty³ , 6176 ”r ? FALSE : TRUE ); 6178 `ag’t_uÄef ( deviû -> authr -> ag’t ); 6179 deviû -> authr -> ag’t = NULL ; 6180 } } 6182  $·sskey_cb ( ag’t *ag’t, DBusE¼Ü * ”r , 6183 ušt32_t ·sskey , * d©a ) 6185  auth’tiÿtiÚ_»q * auth = d©a ; 6186  btd_deviû * deviû = auth ->device; 6189 ià( auth -> ag’t =ð NULL ) 6192 ià( ”r ) 6193 ·sskey = INVALID_PASSKEY ; 6195 `btd_ad­‹r_·sskey_»¶y ( deviû -> ad­‹r , &deviû-> bdaddr , 6196 deviû -> bdaddr_ty³ , ·sskey ); 6198 `ag’t_uÄef ( deviû -> authr -> ag’t ); 6199 deviû -> authr -> ag’t = NULL ; 6200 } } 6202  $di¥Ïy_pšcode_cb ( ag’t *ag’t, DBusE¼Ü * ”r , * d©a ) 6204  auth’tiÿtiÚ_»q * auth = d©a ; 6205  btd_deviû * deviû = auth ->device; 6207 `pšcode_cb ( ag’t , ”r , auth -> pšcode ,‡uth); 6209 `g_ä“ ( deviû -> authr -> pšcode ); 6210 deviû -> authr -> pšcode = NULL ; 6211 } } 6213  auth’tiÿtiÚ_»q * $Ãw_auth ( btd_deviû * deviû , 6214 auth_ty³_t ty³ , gboÞ—n £cu» ) 6216  auth’tiÿtiÚ_»q * auth ; 6217  ag’t *agent; 6218  addr [18]; 6220 `ba2¡r (& deviû -> bdaddr , addr ); 6221 `DBG ("Reque¡šg‡g’ˆauth’tiÿtiÚ fÜ %s", addr ); 6223 ià( deviû -> authr ) { 6224 `”rÜ ("Auth’tiÿtiڇ̗dy„eque¡ed fÜ %s", addr ); 6225  NULL ; 6228 ià( deviû -> bÚdšg && deviû->bÚdšg-> ag’t ) 6229 ag’t = `ag’t_»f ( deviû -> bÚdšg ->agent); 6231 ag’t = `ag’t_g‘ ( NULL ); 6233 ià(! ag’t ) { 6234 `”rÜ ("NØag’ˆavažabË fÜ„eque¡y³ %d", ty³ ); 6235  NULL ; 6238 auth = `g_Ãw0 ( auth’tiÿtiÚ_»q , 1); 6239 auth -> ag’t =‡gent; 6240 auth -> deviû = device; 6241 auth -> ty³ =ype; 6242 auth -> £cu» = secure; 6243 deviû -> authr = auth ; 6245  auth ; 6246 } } 6248  $deviû_»que¡_pšcode ( btd_deviû * deviû , gboÞ—n £cu» ) 6250  auth’tiÿtiÚ_»q * auth ; 6251  ”r ; 6253 auth = `Ãw_auth ( deviû , AUTH_TYPE_PINCODE , £cu» ); 6254 ià(! auth ) 6255  - EPERM ; 6257 ”r = `ag’t_»que¡_pšcode ( auth -> ag’t , deviû , pšcode_cb , £cu» , 6258 auth , NULL ); 6259 ià( ”r < 0) { 6260 `”rÜ ("Failed„equesting‡uthentication"); 6261 `deviû_auth_»q_ä“ ( deviû ); 6264  ”r ; 6265 } } 6267  $deviû_»que¡_·sskey ( btd_deviû * deviû ) 6269  auth’tiÿtiÚ_»q * auth ; 6270  ”r ; 6272 auth = `Ãw_auth ( deviû , AUTH_TYPE_PASSKEY , FALSE ); 6273 ià(! auth ) 6274  - EPERM ; 6276 ”r = `ag’t_»que¡_·sskey ( auth -> ag’t , deviû , ·sskey_cb ,‡uth, 6277 NULL ); 6278 ià( ”r < 0) { 6279 `”rÜ ("Failed„equesting‡uthentication"); 6280 `deviû_auth_»q_ä“ ( deviû ); 6283  ”r ; 6284 } } 6286  $deviû_cÚfœm_·sskey ( btd_deviû * deviû , ušt32_t ·sskey , 6287 ušt8_t cÚfœm_hšt ) 6290  auth’tiÿtiÚ_»q * auth ; 6291  ”r ; 6293 auth = `Ãw_auth ( deviû , AUTH_TYPE_CONFIRM , FALSE ); 6294 ià(! auth ) 6295  - EPERM ; 6297 auth -> ·sskey =…asskey; 6299 #iâdeà TIZEN_WEARABLE 6300 ià( cÚfœm_hšt ) 6301 ”r = `ag’t_»que¡_authÜiz©iÚ ( auth -> ag’t , deviû , 6302 cÚfœm_cb , auth , NULL ); 6305 ”r = `ag’t_»que¡_cÚfœm©iÚ ( auth -> ag’t , deviû , ·sskey , 6306 cÚfœm_cb , auth , NULL ); 6308 ià( ”r < 0) { 6309 `”rÜ ("Failed„equesting‡uthentication"); 6310 `deviû_auth_»q_ä“ ( deviû ); 6313  ”r ; 6314 } } 6316  $deviû_nÙify_·sskey ( btd_deviû * deviû , ušt32_t ·sskey , 6317 ušt8_t ’‹»d ) 6319  auth’tiÿtiÚ_»q * auth ; 6320  ”r ; 6322 ià( deviû -> authr ) { 6323 auth = deviû -> authr ; 6324 ià( auth -> ty³ !ð AUTH_TYPE_NOTIFY_PASSKEY ) 6325  - EPERM ; 6327 auth = `Ãw_auth ( deviû , AUTH_TYPE_NOTIFY_PASSKEY , FALSE ); 6328 ià(! auth ) 6329  - EPERM ; 6332 ”r = `ag’t_di¥Ïy_·sskey ( auth -> ag’t , deviû , ·sskey , ’‹»d ); 6333 ià( ”r < 0) { 6334 `”rÜ ("Failed„equesting‡uthentication"); 6335 `deviû_auth_»q_ä“ ( deviû ); 6338  ”r ; 6339 } } 6341  $deviû_nÙify_pšcode ( btd_deviû * deviû , gboÞ—n £cu» , 6342 cÚ¡ * pšcode ) 6344  auth’tiÿtiÚ_»q * auth ; 6345  ”r ; 6347 auth = `Ãw_auth ( deviû , AUTH_TYPE_NOTIFY_PINCODE , £cu» ); 6348 ià(! auth ) 6349  - EPERM ; 6351 auth -> pšcode = `g_¡rdup (pincode); 6353 ”r = `ag’t_di¥Ïy_pšcode ( auth -> ag’t , deviû , pšcode , 6354 di¥Ïy_pšcode_cb , auth , NULL ); 6355 ià( ”r < 0) { 6356 `”rÜ ("Failed„equesting‡uthentication"); 6357 `deviû_auth_»q_ä“ ( deviû ); 6360  ”r ; 6361 } } 6363  $ÿnûl_auth’tiÿtiÚ ( auth’tiÿtiÚ_»q * auth ) 6365  ag’t *agent; 6366 DBusE¼Ü ”r ; 6368 ià(! auth || !auth-> ag’t ) 6371 ag’t = auth ->agent; 6372 auth -> ag’t = NULL ; 6374 `dbus_”rÜ_š™ (& ”r ); 6375 `dbus_£t_”rÜ_cÚ¡ (& ”r , ERROR_INTERFACE ".CªûËd", NULL ); 6377  auth -> ty³ ) { 6378  AUTH_TYPE_PINCODE : 6379 `pšcode_cb ( ag’t , & ”r , NULL , auth ); 6381  AUTH_TYPE_CONFIRM : 6382 `cÚfœm_cb ( ag’t , & ”r , auth ); 6384  AUTH_TYPE_PASSKEY : 6385 `·sskey_cb ( ag’t , & ”r , 0, auth ); 6387  AUTH_TYPE_NOTIFY_PASSKEY : 6390  AUTH_TYPE_NOTIFY_PINCODE : 6391 `pšcode_cb ( ag’t , & ”r , NULL , auth ); 6395 `dbus_”rÜ_ä“ (& ”r ); 6396 } } 6398  $deviû_ÿnûl_auth’tiÿtiÚ ( btd_deviû * deviû , gboÞ—n abÜ‹d ) 6400  auth’tiÿtiÚ_»q * auth = deviû -> authr ; 6401  addr [18]; 6403 ià(! auth ) 6406 `ba2¡r (& deviû -> bdaddr , addr ); 6407 `DBG ("Cªûlšg‡uth’tiÿtiÚ„eque¡ fÜ %s", addr ); 6409 ià( auth -> ag’t ) 6410 `ag’t_ÿnûl ( auth -> ag’t ); 6412 ià(! abÜ‹d ) 6413 `ÿnûl_auth’tiÿtiÚ ( auth ); 6415 `deviû_auth_»q_ä“ ( deviû ); 6416 } } 6418 gboÞ—n $deviû_is_auth’tiÿtšg ( btd_deviû * deviû ) 6420  ( deviû -> authr !ð NULL ); 6421 } } 6423  g©t_´im¬y * $btd_deviû_g‘_´im¬y ( btd_deviû * deviû , 6424 cÚ¡ * uuid ) 6426 GSLi¡ * m©ch ; 6428 m©ch = `g_¦i¡_fšd_cu¡om ( deviû -> ´im¬›s , uuid , bt_uuid_¡rcmp ); 6429 ià( m©ch ) 6430  m©ch -> d©a ; 6432  NULL ; 6433 } } 6435 GSLi¡ * $btd_deviû_g‘_´im¬›s ( btd_deviû * deviû ) 6437  deviû -> ´im¬›s ; 6438 } } 6440  g©t_db * $btd_deviû_g‘_g©t_db ( btd_deviû * deviû ) 6442 ià(! deviû ) 6443  NULL ; 6445  deviû -> db ; 6446 } } 6448  bt_g©t_þ›Á * $btd_deviû_g‘_g©t_þ›Á ( btd_deviû * deviû ) 6450 ià(! deviû ) 6451  NULL ; 6453  deviû -> þ›Á ; 6454 } } 6456  $btd_deviû_g©t_£t_£rviû_chªged ( btd_deviû * deviû , 6457 ušt16_t ¡¬t , ušt16_ˆ ’d ) 6463 } } 6465  $btd_deviû_add_uuid ( btd_deviû * deviû , cÚ¡ * uuid ) 6467 GSLi¡ * uuid_li¡ ; 6468 * Ãw_uuid ; 6470 ià( `g_¦i¡_fšd_cu¡om ( deviû -> uuids , uuid , bt_uuid_¡rcmp )) 6473 Ãw_uuid = `g_¡rdup ( uuid ); 6474 uuid_li¡ = `g_¦i¡_­³nd ( NULL , Ãw_uuid ); 6476 `deviû_´obe_´ofžes ( deviû , uuid_li¡ ); 6478 `g_ä“ ( Ãw_uuid ); 6479 `g_¦i¡_ä“ ( uuid_li¡ ); 6481 `¡Üe_deviû_šfo ( deviû ); 6483 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 6484 DEVICE_INTERFACE , "UUIDs"); 6485 } } 6487  sdp_li¡_t * $»ad_deviû_»cÜds ( btd_deviû * deviû ) 6489  loÿl [18], ³” [18]; 6490  fž’ame [ PATH_MAX ]; 6491 GKeyFže * key_fže ; 6492 ** keys , ** hªdË ; 6493 * ¡r ; 6494 sdp_li¡_t * »cs = NULL ; 6495 sdp_»cÜd_t * »c ; 6497 `ba2¡r ( `btd_ad­‹r_g‘_add»ss ( deviû -> ad­‹r ), loÿl ); 6498 `ba2¡r (& deviû -> bdaddr , ³” ); 6500 `¢´štf ( fž’ame , PATH_MAX , STORAGEDIR "/%s/ÿche/%s", loÿl , ³” ); 6502 key_fže = `g_key_fže_Ãw (); 6503 `g_key_fže_lßd_äom_fže ( key_fže , fž’ame , 0, NULL ); 6504 keys = `g_key_fže_g‘_keys ( key_fže , "S”viûRecÜds", NULL , NULL); 6506  hªdË = keys ; handle && *handle; handle++) { 6507 ¡r = `g_key_fže_g‘_¡ršg ( key_fže , "ServiceRecords", 6508 * hªdË , NULL ); 6509 ià(! ¡r ) 6512 »c = `»cÜd_äom_¡ršg ( ¡r ); 6513 »cs = `sdp_li¡_­³nd Ôecs, »c ); 6514 `g_ä“ ( ¡r ); 6517 `g_¡rä“v ( keys ); 6518 `g_key_fže_ä“ ( key_fže ); 6520  »cs ; 6521 } } 6523 cÚ¡ sdp_»cÜd_t * $btd_deviû_g‘_»cÜd ( btd_deviû * deviû , 6524 cÚ¡ * uuid ) 6526 ià( deviû -> tmp_»cÜds ) { 6527 cÚ¡ sdp_»cÜd_t * »cÜd ; 6529 »cÜd = `fšd_»cÜd_š_li¡ ( deviû -> tmp_»cÜds , uuid ); 6530 ià( »cÜd !ð NULL ) 6531  »cÜd ; 6533 `sdp_li¡_ä“ ( deviû -> tmp_»cÜds , 6534 ( sdp_ä“_func_t è sdp_»cÜd_ä“ ); 6535 deviû -> tmp_»cÜds = NULL ; 6538 deviû -> tmp_»cÜds = `»ad_deviû_»cÜds (device); 6539 ià(! deviû -> tmp_»cÜds ) 6540  NULL ; 6542  `fšd_»cÜd_š_li¡ ( deviû -> tmp_»cÜds , uuid ); 6543 } } 6545  btd_deviû * $btd_deviû_»f ( btd_deviû * deviû ) 6547 `__sync_ãtch_ªd_add (& deviû -> »f_couÁ , 1); 6549  deviû ; 6550 } } 6552  $btd_deviû_uÄef ( btd_deviû * deviû ) 6554 ià( `__sync_sub_ªd_ãtch (& deviû -> »f_couÁ , 1)) 6557 ià(! deviû -> ·th ) { 6558 `”rÜ ("freeing device without‡n object…ath"); 6562 `DBG ("F»ešg deviû %s", deviû -> ·th ); 6564 `g_dbus_uÄegi¡”_š‹rçû ( dbus_cÚn , deviû -> ·th , DEVICE_INTERFACE ); 6565 } } 6567  $deviû_g‘_­³¬ªû ( btd_deviû * deviû , ušt16_t * v®ue ) 6569 ià( deviû -> ­³¬ªû == 0) 6572 ià( v®ue ) 6573 * v®ue = deviû -> ­³¬ªû ; 6576 } } 6578  $deviû_£t_­³¬ªû ( btd_deviû * deviû , ušt16_t v®ue ) 6580 cÚ¡ * icÚ = `g­_­³¬ªû_to_icÚ ( v®ue ); 6582 ià( deviû -> ­³¬ªû =ð v®ue ) 6585 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 6586 DEVICE_INTERFACE , "Appearance"); 6588 ià( icÚ ) 6589 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 6590 DEVICE_INTERFACE , "Icon"); 6592 deviû -> ­³¬ªû = v®ue ; 6593 `¡Üe_deviû_šfo ( deviû ); 6594 } } 6596 #ifdeà __TIZEN_PATCH__ 6597  $deviû_£t_mªuçùu»r_šfo ( btd_deviû * deviû ,  eœ_d©a * eœ ) 6599 ià(! deviû ) 6602 ià( eœ -> mªuçùu»r_d©a_Ën == 0) 6605 deviû -> mªuçùu»r_d©a = `g_memdup ( eœ ->manufacturer_data, 6606 eœ -> mªuçùu»r_d©a_Ën ); 6607 deviû -> mªuçùu»r_d©a_Ën = eœ ->manufacturer_data_len; 6609 `¡Üe_deviû_šfo ( deviû ); 6611 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 6612 DEVICE_INTERFACE , "ManufacturerDataLen"); 6614 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 6615 DEVICE_INTERFACE , "ManufacturerData"); 6616 } } 6619  $deviû_£t_adv_»pÜt_šfo ( btd_deviû * deviû , * d©a , ušt8_t d©a_Ën , 6620 ušt8_t adv_ty³ ) 6622 ià(! deviû ) 6625  ³”_addr [18]; 6626 cÚ¡ * ·ddr = ³”_addr ; 6627 dbus_št32_t rssi = deviû ->rssi; 6628  adv_Ën = d©a_Ën ; 6630 `ba2¡r (& deviû -> bdaddr , ³”_addr ); 6632 `g_dbus_em™_sigÇl ( dbus_cÚn , deviû -> ·th , 6633 DEVICE_INTERFACE , "AdvReport", 6634 DBUS_TYPE_STRING , & ·ddr , 6635 DBUS_TYPE_BYTE , & deviû -> bdaddr_ty³ , 6636 DBUS_TYPE_BYTE , & adv_ty³ , 6637 DBUS_TYPE_INT32 , & rssi , 6638 DBUS_TYPE_INT32 , & adv_Ën , 6639 DBUS_TYPE_ARRAY , DBUS_TYPE_BYTE , & d©a , d©a_Ën , 6640 DBUS_TYPE_INVALID ); 6641 } } 6643  $deviû_£t_·ylßd_timeout ( btd_deviû * deviû , 6644 ušt16_t ·ylßd_timeout ) 6646 ià(! deviû ) 6648 ià( deviû -> auth_·ylßd_timeout =ð ·ylßd_timeout ) 6651 `DBG ("Paylßdimeouˆ%d", ·ylßd_timeout ); 6653 deviû -> auth_·ylßd_timeout = ·ylßd_timeout ; 6654 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 6655 DEVICE_INTERFACE , "PayloadTimeout"); 6656 } } 6658  $deviû_£t_discÚÃù_»asÚ ( btd_deviû * deviû , ušt8_t »asÚ ) 6660 deviû -> disc_»asÚ = »asÚ ; 6661 } } 6663  $btd_deviû_discÚÃù ( btd_deviû * deviû ) 6665  d¡ [18]; 6666  btd_£rviû * £rviû ; 6667 btd_£rviû_¡©e_t ¡©e ; 6669 `ba2¡r (& deviû -> bdaddr , d¡ ); 6671 `DBG (""); 6672 ià( deviû -> b»dr_¡©e . cÚÃùed =ð çl£ ) 6675 £rviû = `btd_deviû_g‘_£rviû ( deviû , HFP_HS_UUID ); 6676 ià(! £rviû ) 6679 ¡©e = `btd_£rviû_g‘_¡©e ( £rviû ); 6680 `DBG ("CÚÃùed S‹ : %d", ¡©e ); 6682 ià( ¡©e =ð BTD_SERVICE_STATE_DISCONNECTED ) { 6683 `btd_ad­‹r_discÚÃù_deviû ( deviû -> ad­‹r , &deviû-> bdaddr , 6684 BDADDR_BREDR ); 6688 } } 6691  gboÞ—n $nÙify_©tios ( gpoš‹r u£r_d©a ) 6693  btd_deviû * deviû = u£r_d©a ; 6695 `DBG (""); 6697 ià( deviû -> ©Œib =ð NULL ) 6698  FALSE ; 6700 `g_¦i¡_fÜ—ch ( deviû -> ©tios_ofæše , ©tio_cÚÃùed , deviû-> ©Œib ); 6701 deviû -> ©tios = `g_¦i¡_cÚÿt (deviû->©tios, deviû-> ©tios_ofæše ); 6702 deviû -> ©tios_ofæše = NULL ; 6704  FALSE ; 6705 } } 6707 gušt $btd_deviû_add_©tio_ÿÎback ( btd_deviû * deviû , 6708 ©tio_cÚÃù_cb cfunc , 6709 ©tio_discÚÃù_cb dcfunc , 6710 gpoš‹r u£r_d©a ) 6712  ©tio_d©a * ©tio ; 6713  gušt ©tio_id = 0; 6715 `DBG ("%°»gi¡”ed ATT cÚÃùiÚ c®lback", deviû ); 6717 ©tio = `g_Ãw0 ( ©tio_d©a , 1); 6718 ©tio -> id = ++ ©tio_id ; 6719 ©tio -> cfunc = cfunc; 6720 ©tio -> dcfunc = dcfunc; 6721 ©tio -> u£r_d©a = user_data; 6723 #ifdeà __TIZEN_PATCH__ 6731 `deviû_£t_auto_cÚÃù ( deviû , FALSE ); 6733 `deviû_£t_auto_cÚÃù ( deviû , TRUE ); 6738 ià(! deviû -> ©Œib ) 6739 deviû -> ©Œib = `©Œib_äom_deviû (device); 6741 ià( deviû -> ©Œib && cfunc ) { 6742 deviû -> ©tios_ofæše = `g_¦i¡_­³nd (device->attios_offline, 6743 ©tio ); 6744 `g_idË_add ( nÙify_©tios , deviû ); 6745  ©tio -> id ; 6748 deviû -> ©tios = `g_¦i¡_­³nd (deviû->©tios, ©tio ); 6750  ©tio -> id ; 6751 } } 6753  $©tio_id_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 6755 cÚ¡  ©tio_d©a * ©tio = a ; 6756 gušt id = `GPOINTER_TO_UINT ( b ); 6758  ©tio -> id - id; 6759 } } 6761 gboÞ—n $btd_deviû_»move_©tio_ÿÎback ( btd_deviû * deviû , gušt id ) 6763  ©tio_d©a * ©tio ; 6764 GSLi¡ * l ; 6766 l = `g_¦i¡_fšd_cu¡om ( deviû -> ©tios , `GUINT_TO_POINTER ( id ), 6767 ©tio_id_cmp ); 6768 ià( l ) { 6769 ©tio = l -> d©a ; 6770 deviû -> ©tios = `g_¦i¡_»move (deviû->©tios, ©tio ); 6772 l = `g_¦i¡_fšd_cu¡om ( deviû -> ©tios_ofæše , 6773 `GUINT_TO_POINTER ( id ), ©tio_id_cmp ); 6774 ià(! l ) 6775  FALSE ; 6777 ©tio = l -> d©a ; 6778 deviû -> ©tios_ofæše = `g_¦i¡_»move (device->attios_offline, 6779 ©tio ); 6782 `g_ä“ ( ©tio ); 6784 #ifdeà __TIZEN_PATCH__ 6785 ià( deviû -> auto_id ) { 6786 `g_sourû_»move ( deviû -> auto_id ); 6787 deviû -> auto_id = 0; 6790 ià( deviû -> Ë_auto_cÚÃù ) { 6791 deviû -> Ë_auto_cÚÃù = FALSE ; 6792 `btd_ad­‹r_di§bË_Ë_auto_cÚÃù ( deviû -> ad­‹r ); 6793 `DBG ("remove‡ttio callback"); 6797  TRUE ; 6798 } } 6800  $btd_deviû_£t_²pid ( btd_deviû * deviû , ušt16_t sourû , 6801 ušt16_t v’dÜ , ušt16_ˆ ´oduù , ušt16_ˆ v”siÚ ) 6803 ià( deviû -> v’dÜ_¤c =ð sourû && deviû-> v”siÚ == version && 6804 deviû -> v’dÜ =ðv’dÜ && deviû-> ´oduù ==…roduct) 6807 deviû -> v’dÜ_¤c = sourû ; 6808 deviû -> v’dÜ = vendor; 6809 deviû -> ´oduù =…roduct; 6810 deviû -> v”siÚ = version; 6812 `ä“ ( deviû -> mod®Ÿs ); 6813 deviû -> mod®Ÿs = `bt_mod®Ÿs ( sourû , v’dÜ , ´oduù , v”siÚ ); 6815 `g_dbus_em™_´Ý”ty_chªged ( dbus_cÚn , deviû -> ·th , 6816 DEVICE_INTERFACE , "Modalias"); 6818 `¡Üe_deviû_šfo ( deviû ); 6819 } } 6821  $£rviû_¡©e_chªged ( btd_£rviû * £rviû , 6822 btd_£rviû_¡©e_t Þd_¡©e , 6823 btd_£rviû_¡©e_t Ãw_¡©e , 6824 * u£r_d©a ) 6826  btd_´ofže * ´ofže = `btd_£rviû_g‘_´ofže ( £rviû ); 6827  btd_deviû * deviû = `btd_£rviû_g‘_deviû ( £rviû ); 6828  ”r = `btd_£rviû_g‘_”rÜ ( £rviû ); 6830 #ifdeà __TIZEN_PATCH__ 6831 ià(! ”r ) { 6832 `g_dbus_em™_sigÇl ( dbus_cÚn , deviû -> ·th , 6833 DEVICE_INTERFACE , "ProfileStateChanged", 6834 DBUS_TYPE_STRING , & ´ofže -> »mÙe_uuid , 6835 DBUS_TYPE_INT32 , & Ãw_¡©e , 6836 DBUS_TYPE_INVALID ); 6839 ià( Ãw_¡©e =ð BTD_SERVICE_STATE_CONNECTING || 6840 Ãw_¡©e =ð BTD_SERVICE_STATE_DISCONNECTING || 6841 Ãw_¡©e =ð BTD_SERVICE_STATE_UNAVAILABLE ) 6843 ià( Ãw_¡©e =ð BTD_SERVICE_STATE_CONNECTING || 6844 Ãw_¡©e =ð BTD_SERVICE_STATE_DISCONNECTING ) 6848 ià( Þd_¡©e =ð BTD_SERVICE_STATE_CONNECTING ) 6849 `deviû_´ofže_cÚÃùed ( deviû , ´ofže , ”r ); 6850 ià( Þd_¡©e =ð BTD_SERVICE_STATE_DISCONNECTING ) 6851 `deviû_´ofže_discÚÃùed ( deviû , ´ofže , ”r ); 6852 } } 6854  btd_£rviû * $btd_deviû_g‘_£rviû ( btd_deviû * dev , 6855 cÚ¡ * »mÙe_uuid ) 6857 GSLi¡ * l ; 6859  l = dev -> £rviûs ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 6860  btd_£rviû * £rviû = l -> d©a ; 6861  btd_´ofže * p = `btd_£rviû_g‘_´ofže ( £rviû ); 6863 ià( `g_¡r_equ® ( p -> »mÙe_uuid ,„emote_uuid)) 6864  £rviû ; 6867  NULL ; 6868 } } 6870  $btd_deviû_š™ () 6872 dbus_cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 6873 £rviû_¡©e_cb_id = `btd_£rviû_add_¡©e_cb ( 6874 £rviû_¡©e_chªged , NULL ); 6875 } } 6877  $btd_deviû_þ—nup () 6879 `btd_£rviû_»move_¡©e_cb ( £rviû_¡©e_cb_id ); 6880 } } 6882 #ifdeà __TIZEN_PATCH__ 6883  $btd_deviû_£t_Ëgacy_·œšg ( btd_deviû * dev , boÞ Ëgacy_·œšg ) 6885 dev -> Ëgacy_·œšg =†egacy_pairing; 6886 } } @src/device.h 25 #ifdeà __TIZEN_PATCH__ 26  ~"©Œib/g©Œib.h " 29  #DEVICE_INTERFACE "Üg.bluez.Deviû1" ) 31  gbtd_deviû ; 33 #ifdeà __TIZEN_PATCH__ 35  #DEV_CONN_DEFAULT 0xFF ) 36  #DEV_CONN_BREDR 0x00 ) 37  #DEV_CONN_LE 0x01 ) 40  btd_deviû * deviû_ü—‹ ( btd_ad­‹r * ad­‹r , 41 cÚ¡ bdaddr_t * add»ss , ušt8_t bdaddr_ty³ ); 42  btd_deviû * deviû_ü—‹_äom_¡Üage ( btd_ad­‹r * ad­‹r , 43 cÚ¡ * add»ss , GKeyFže * key_fže ); 44 * btd_deviû_g‘_¡Üage_·th ( btd_deviû * deviû , 45 cÚ¡ * fž’ame ); 47  btd_deviû_deviû_£t_Çme ( btd_deviû * deviû , cÚ¡ * Çme ); 48  deviû_¡Üe_ÿched_Çme ( btd_deviû * dev , cÚ¡ * Çme ); 49  deviû_g‘_Çme ( btd_deviû * deviû , * Çme , size_t Ën ); 50 boÞ deviû_Çme_known ( btd_deviû * deviû ); 51  deviû_£t_þass ( btd_deviû * deviû , ušt32_t þass ); 52  deviû_upd©e_addr ( btd_deviû * deviû , cÚ¡ bdaddr_t * bdaddr , 53 ušt8_t bdaddr_ty³ ); 54  deviû_£t_b»dr_suµÜt ( btd_deviû * deviû ); 55  deviû_£t_Ë_suµÜt ( btd_deviû * deviû , ušt8_t bdaddr_ty³ ); 56  deviû_upd©e_Ï¡_£’ ( btd_deviû * deviû , ušt8_t bdaddr_ty³ ); 57  deviû_m”ge_du¶iÿ‹ ( btd_deviû * dev , btd_deviû * dup ); 58 ušt32_t btd_deviû_g‘_þass ( btd_deviû * deviû ); 59 ušt16_t btd_deviû_g‘_v’dÜ ( btd_deviû * deviû ); 60 ušt16_t btd_deviû_g‘_v’dÜ_¤c ( btd_deviû * deviû ); 61 ušt16_t btd_deviû_g‘_´oduù ( btd_deviû * deviû ); 62 ušt16_t btd_deviû_g‘_v”siÚ ( btd_deviû * deviû ); 63  deviû_»move ( btd_deviû * deviû , gboÞ—n »move_¡Üed ); 64  deviû_add»ss_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ); 65  deviû_bdaddr_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ); 68  sdeviû_addr_ty³ { 69 bdaddr_t mbdaddr ; 70 ušt8_t mbdaddr_ty³ ; 73  deviû_addr_ty³_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ); 74 GSLi¡ * btd_deviû_g‘_uuids ( btd_deviû * deviû ); 75  deviû_´obe_´ofžes ( btd_deviû * deviû , GSLi¡ * ´ofžes ); 76 cÚ¡ sdp_»cÜd_t * btd_deviû_g‘_»cÜd ( btd_deviû * deviû , 77 cÚ¡ * uuid ); 78  g©t_´im¬y * btd_deviû_g‘_´im¬y ( btd_deviû * deviû , 79 cÚ¡ * uuid ); 80 GSLi¡ * btd_deviû_g‘_´im¬›s ( btd_deviû * deviû ); 81  g©t_db * btd_deviû_g‘_g©t_db ( btd_deviû * deviû ); 82  bt_g©t_þ›Á * btd_deviû_g‘_g©t_þ›Á ( btd_deviû * deviû ); 83  btd_deviû_g©t_£t_£rviû_chªged ( btd_deviû * deviû , 84 ušt16_t ¡¬t , ušt16_ˆ ’d ); 85 boÞ deviû_©ch_©t ( btd_deviû * dev , GIOChªÃl * io ); 86  btd_deviû_add_uuid ( btd_deviû * deviû , cÚ¡ * uuid ); 87  deviû_add_eœ_uuids ( btd_deviû * dev , GSLi¡ * uuids ); 88  deviû_´obe_´ofže ( gpoš‹r a , gpoš‹¸ b ); 89  deviû_»move_´ofže ( gpoš‹r a , gpoš‹¸ b ); 90  btd_ad­‹r * deviû_g‘_ad­‹r ( btd_deviû * deviû ); 91 cÚ¡ bdaddr_t * deviû_g‘_add»ss ( btd_deviû * deviû ); 92 cÚ¡ * deviû_g‘_·th (cÚ¡  btd_deviû * deviû ); 93 #ifdeà __TIZEN_PATCH__ 94  deviû_£t_»mÙe_ã©u»_æag ( btd_deviû * deviû ,  æags ); 95 gboÞ—n deviû_is_b»d¾e ( btd_deviû * deviû ); 96  deviû_£t_discÚÃù_»asÚ ( btd_deviû * deviû , ušt8_t »asÚ ); 97  deviû_£t_g©t_cÚÃùed ( btd_deviû * deviû , gboÞ—n cÚÃùed ); 98  deviû_£t_©Œib ( btd_deviû * deviû , gušt ©chid , GA‰rib * ©Œib ); 99  deviû_un£t_©Œib ( btd_deviû * deviû ); 100  deviû_uÅaœ ( btd_deviû * deviû , gboÞ—n »move_¡Üed ); 101 gboÞ—n deviû_g‘_g©t_cÚÃùed (cÚ¡  btd_deviû * deviû ); 103 gboÞ—n deviû_is_‹mpܬy ( btd_deviû * deviû ); 104 boÞ deviû_is_·œed ( btd_deviû * deviû , ušt8_t bdaddr_ty³ ); 105 boÞ deviû_is_bÚded ( btd_deviû * deviû , ušt8_t bdaddr_ty³ ); 106 gboÞ—n deviû_is_Œu¡ed ( btd_deviû * deviû ); 107  deviû_£t_·œed ( btd_deviû * dev , ušt8_t bdaddr_ty³ ); 108  deviû_£t_uÅaœed ( btd_deviû * dev , ušt8_t bdaddr_ty³ ); 109  btd_deviû_£t_‹mpܬy ( btd_deviû * deviû , gboÞ—n ‹mpܬy ); 110  btd_deviû_£t_Œu¡ed ( btd_deviû * deviû , gboÞ—n Œu¡ed ); 111  deviû_£t_bÚded ( btd_deviû * deviû , ušt8_t bdaddr_ty³ ); 112  deviû_£t_Ëgacy ( btd_deviû * deviû , boÞ Ëgacy ); 113  deviû_£t_rssi ( btd_deviû * deviû , št8_t rssi ); 114 boÞ btd_deviû_is_cÚÃùed ( btd_deviû * dev ); 115 ušt8_t btd_deviû_g‘_bdaddr_ty³ ( btd_deviû * dev ); 116 boÞ deviû_is_»Œyšg ( btd_deviû * deviû ); 117  deviû_bÚdšg_com¶‘e ( btd_deviû * deviû , ušt8_t bdaddr_ty³ , 118 ušt8_t ¡©us ); 119 gboÞ—n deviû_is_bÚdšg ( btd_deviû * deviû , cÚ¡ * £nd” ); 120  deviû_bÚdšg_©‹m±_çžed ( btd_deviû * deviû , ušt8_t ¡©us ); 121  deviû_bÚdšg_çžed ( btd_deviû * deviû , ušt8_t ¡©us ); 122  btd_ad­‹r_pš_cb_™” * deviû_bÚdšg_™” ( btd_deviû * deviû ); 123  deviû_bÚdšg_©‹m±_»Œy ( btd_deviû * deviû ); 124  deviû_bÚdšg_Ï¡_du¿tiÚ ( btd_deviû * deviû ); 125  deviû_bÚdšg_»¡¬t_tim” ( btd_deviû * deviû ); 126  deviû_»que¡_pšcode ( btd_deviû * deviû , gboÞ—n £cu» ); 127  deviû_»que¡_·sskey ( btd_deviû * deviû ); 128  deviû_cÚfœm_·sskey ( btd_deviû * deviû , ušt32_t ·sskey , 129 ušt8_t cÚfœm_hšt ); 130  deviû_nÙify_·sskey ( btd_deviû * deviû , ušt32_t ·sskey , 131 ušt8_t ’‹»d ); 132  deviû_nÙify_pšcode ( btd_deviû * deviû , gboÞ—n £cu» , 133 cÚ¡ * pšcode ); 134  deviû_ÿnûl_auth’tiÿtiÚ ( btd_deviû * deviû , gboÞ—n abÜ‹d ); 135 gboÞ—n deviû_is_auth’tiÿtšg ( btd_deviû * deviû ); 136  deviû_add_cÚÃùiÚ ( btd_deviû * dev , ušt8_t bdaddr_ty³ ); 137  deviû_»move_cÚÃùiÚ ( btd_deviû * deviû , ušt8_t bdaddr_ty³ ); 138  deviû_»que¡_discÚÃù ( btd_deviû * deviû , DBusMes§ge * msg ); 140 (* tdiscÚÃù_w©ch è( tbtd_deviû * tdeviû , tgboÞ—n t»mov® , 141 * tu£r_d©a ); 143 gušt `deviû_add_discÚÃù_w©ch ( btd_deviû * deviû , 144 discÚÃù_w©ch w©ch , * u£r_d©a , 145 GDe¡royNÙify de¡roy ); 146  `deviû_»move_discÚÃù_w©ch ( btd_deviû * deviû , gušt id ); 147  `deviû_g‘_­³¬ªû ( btd_deviû * deviû , ušt16_t * v®ue ); 148  `deviû_£t_­³¬ªû ( btd_deviû * deviû , ušt16_t v®ue ); 150 #ifdeà __TIZEN_PATCH__ 151  eœ_d©a ; 152  `deviû_£t_mªuçùu»r_šfo ( btd_deviû * dev ,  eœ_d©a * eœ ); 153  `deviû_£t_adv_»pÜt_šfo ( btd_deviû * deviû , * d©a , 154 ušt8_t d©a_Ën , ušt8_ˆ adv_šfo ); 155  `deviû_£t_·ylßd_timeout ( btd_deviû * deviû , 156 ušt16_t ·ylßd_timeout ); 157  `deviû_£t_Ï¡_addr_ty³ ( btd_deviû * deviû , ušt8_t ty³ ); 160  btd_deviû * `btd_deviû_»f (btd_deviû * deviû ); 161  `btd_deviû_uÄef ( btd_deviû * deviû ); 163  `deviû_block ( btd_deviû * deviû , gboÞ—n upd©e_Úly ); 164  `deviû_unblock ( btd_deviû * deviû , gboÞ—n sž’t , 165 gboÞ—n upd©e_Úly ); 166  `btd_deviû_£t_²pid ( btd_deviû * deviû , ušt16_t sourû , 167 ušt16_t v’dÜ , ušt16_ˆ ´oduù , ušt16_ˆ v”siÚ ); 169  `deviû_cÚÃù_Ë ( btd_deviû * dev ); 171 (* tdeviû_svc_cb_t è( tbtd_deviû * tdev ,  t”r , 172 * tu£r_d©a ); 174  `deviû_wa™_fÜ_svc_com¶‘e ( btd_deviû * dev , 175 deviû_svc_cb_t func , 176 * u£r_d©a ); 177 boÞ `deviû_»move_svc_com¶‘e_ÿÎback ( btd_deviû * dev , 178  id ); 180  btd_£rviû * `btd_deviû_g‘_£rviû ( btd_deviû * dev , 181 cÚ¡ * »mÙe_uuid ); 183 #ifdeà __TIZEN_PATCH__ 184  `btd_deviû_discÚÃù ( btd_deviû * dev ); 185  `btd_deviû_£t_Ëgacy_·œšg ( btd_deviû * dev , boÞ Ëgacy_·œšg ); 188  `deviû_discov”_£rviûs ( btd_deviû * deviû ); 189  `btd_deviû_cÚÃù_£rviûs ( btd_deviû * dev , GSLi¡ * £rviûs ); 191  `btd_deviû_š™ (); 192  `btd_deviû_þ—nup (); 193 #ifdeà BLUEZ5_GATT_CLIENT 194 gboÞ—n `discÚÃù_Ë_deviû ( gpoš‹r u£r_d©a ); @src/eir.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<”ºo.h > 30  ~<ùy³.h > 31  ~<¡dlib.h > 32  ~<¡dšt.h > 33  ~<¡dboÞ.h > 34  ~ 36  ~ 37  ~ 38  ~ 40  ~"¤c/sh¬ed/utž.h " 41  ~"uuid-h–³r.h " 42  ~"eœ.h " 44  #EIR_OOB_MIN (2 + 6) ) 46  $eœ_d©a_ä“ ( eœ_d©a * eœ ) 48 `g_¦i¡_ä“_fuÎ ( eœ -> £rviûs , ä“ ); 49 eœ -> £rviûs = NULL ; 50 `g_ä“ ( eœ -> Çme ); 51 eœ -> Çme = NULL ; 52 `g_ä“ ( eœ -> hash ); 53 eœ -> hash = NULL ; 54 `g_ä“ ( eœ -> ¿ndomiz” ); 55 eœ -> ¿ndomiz” = NULL ; 56 `g_¦i¡_ä“_fuÎ ( eœ -> msd_li¡ , g_ä“ ); 57 eœ -> msd_li¡ = NULL ; 58 #ifdeà __TIZEN_PATCH__ 59 `g_ä“ ( eœ -> mªuçùu»r_d©a ); 60 eœ -> mªuçùu»r_d©a = NULL ; 62 } } 64  $eœ_·r£_uuid16 ( eœ_d©a * eœ , cÚ¡ * d©a , 65 ušt8_t Ën ) 67 cÚ¡ ušt16_t * uuid16 = d©a ; 68 uuid_t £rviû ; 69 * uuid_¡r ; 70  i ; 72 £rviû . ty³ = SDP_UUID16 ; 73  i = 0; i < Ën / 2; i++, uuid16 ++) { 74 £rviû . v®ue . uuid16 = `g‘_Ë16 (uuid16); 76 uuid_¡r = `bt_uuid2¡ršg (& £rviû ); 77 ià(! uuid_¡r ) 79 eœ -> £rviûs = `g_¦i¡_­³nd Óœ->£rviûs, uuid_¡r ); 81 } } 83  $eœ_·r£_uuid32 ( eœ_d©a * eœ , cÚ¡ * d©a , 84 ušt8_t Ën ) 86 cÚ¡ ušt32_t * uuid32 = d©a ; 87 uuid_t £rviû ; 88 * uuid_¡r ; 89  i ; 91 £rviû . ty³ = SDP_UUID32 ; 92  i = 0; i < Ën / 4; i++, uuid32 ++) { 93 £rviû . v®ue . uuid32 = `g‘_Ë32 (uuid32); 95 uuid_¡r = `bt_uuid2¡ršg (& £rviû ); 96 ià(! uuid_¡r ) 98 eœ -> £rviûs = `g_¦i¡_­³nd Óœ->£rviûs, uuid_¡r ); 100 } } 102  $eœ_·r£_uuid128 ( eœ_d©a * eœ , cÚ¡ ušt8_t * d©a , 103 ušt8_t Ën ) 105 cÚ¡ ušt8_t * uuid_±r = d©a ; 106 uuid_t £rviû ; 107 * uuid_¡r ; 108  i ; 109  k ; 111 £rviû . ty³ = SDP_UUID128 ; 112  i = 0; i < Ën / 16; i++) { 113  k = 0; k < 16; k++) 114 £rviû . v®ue . uuid128 . d©a [ k ] = uuid_±r [16 - k - 1]; 115 uuid_¡r = `bt_uuid2¡ršg (& £rviû ); 116 ià(! uuid_¡r ) 118 eœ -> £rviûs = `g_¦i¡_­³nd Óœ->£rviûs, uuid_¡r ); 119 uuid_±r += 16; 121 } } 123 * $Çme2utf8 (cÚ¡ ušt8_t * Çme , ušt8_ˆ Ën ) 125 #ifdeà __TIZEN_PATCH__ 126 * utf8_Çme ; 127 * š_Çme ; 128 * ±r ; 130 š_Çme = `g_m®loc0 ((è* ( Ën + 1)); 131 `memýy ( š_Çme , Çme , (è* Ën ); 132 š_Çme [ Ën ] = '\0'; 134 ià(! `g_utf8_v®id©e ( š_Çme , -1, (cÚ¡ **)& ±r )) 135 * ±r = '\0'; 137 utf8_Çme = `g_¡rdup ( š_Çme ); 138 `g_ä“ ( š_Çme ); 140  utf8_Çme ; 142  utf8_Çme [ HCI_MAX_NAME_LENGTH + 2]; 143  i ; 145 ià( `g_utf8_v®id©e ((cÚ¡ *è Çme , Ën , NULL )) 146  `g_¡ºdup ((*è Çme , Ën ); 148 `mem£t ( utf8_Çme , 0, (utf8_name)); 149 `¡ºýy ( utf8_Çme , (*è Çme , Ën ); 152  i = 0; utf8_Çme [i] != '\0'; i++) { 153 ià(! `i§scii ( utf8_Çme [ i ])) 154 utf8_Çme [ i ] = ' '; 158 `g_¡r¡r ( utf8_Çme ); 160  `g_¡rdup ( utf8_Çme ); 162 } } 164  $eœ_·r£_msd ( eœ_d©a * eœ , cÚ¡ ušt8_t * d©a , 165 ušt8_t Ën ) 167  eœ_msd * msd ; 169 ià( Ën < 2 ||†’ > 2 + ( msd -> d©a )) 172 msd = `g_m®loc ((*msd)); 173 msd -> com·ny = `g‘_Ë16 ( d©a ); 174 msd -> d©a_Ën = Ën - 2; 175 `memýy (& msd -> d©a , d©¨+ 2, msd-> d©a_Ën ); 177 eœ -> msd_li¡ = `g_¦i¡_­³nd Óœ->msd_li¡, msd ); 178 } } 180  $eœ_·r£ ( eœ_d©a * eœ , cÚ¡ ušt8_t *eœ_d©a, ušt8_ˆ eœ_Ën ) 182 ušt16_t Ën = 0; 184 eœ -> æags = 0; 185 eœ -> tx_pow” = 127; 188 ià( eœ_d©a =ð NULL ) 191  Ën < eœ_Ën - 1) { 192 ušt8_t f›ld_Ën = eœ_d©a [0]; 193 cÚ¡ ušt8_t * d©a ; 194 ušt8_t d©a_Ën ; 197 ià( f›ld_Ën == 0) 200 Ën +ð f›ld_Ën + 1; 203 ià( Ën > eœ_Ën ) 206 d©a = & eœ_d©a [2]; 207 d©a_Ën = f›ld_Ën - 1; 209  eœ_d©a [1]) { 210  EIR_UUID16_SOME : 211  EIR_UUID16_ALL : 212 `eœ_·r£_uuid16 ( eœ , d©a , d©a_Ën ); 215  EIR_UUID32_SOME : 216  EIR_UUID32_ALL : 217 `eœ_·r£_uuid32 ( eœ , d©a , d©a_Ën ); 220  EIR_UUID128_SOME : 221  EIR_UUID128_ALL : 222 `eœ_·r£_uuid128 ( eœ , d©a , d©a_Ën ); 225  EIR_FLAGS : 226 ià( d©a_Ën > 0) 227 eœ -> æags = * d©a ; 230  EIR_NAME_SHORT : 231  EIR_NAME_COMPLETE : 234  d©a_Ën > 0 && d©a [data_len - 1] == '\0') 235 d©a_Ën --; 237 `g_ä“ ( eœ -> Çme ); 239 eœ -> Çme = `Çme2utf8 ( d©a , d©a_Ën ); 240 eœ -> Çme_com¶‘e = eœ_d©a [1] =ð EIR_NAME_COMPLETE ; 243  EIR_TX_POWER : 244 ià( d©a_Ën < 1) 246 eœ -> tx_pow” = ( št8_t è d©a [0]; 249  EIR_CLASS_OF_DEV : 250 ià( d©a_Ën < 3) 252 eœ -> þass = d©a [0] | (data[1] << 8) | 253 ( d©a [2] << 16); 256  EIR_GAP_APPEARANCE : 257 ià( d©a_Ën < 2) 259 eœ -> ­³¬ªû = `g‘_Ë16 ( d©a ); 262  EIR_SSP_HASH : 263 ià( d©a_Ën < 16) 265 eœ -> hash = `g_memdup ( d©a , 16); 268  EIR_SSP_RANDOMIZER : 269 ià( d©a_Ën < 16) 271 eœ -> ¿ndomiz” = `g_memdup ( d©a , 16); 274  EIR_DEVICE_ID : 275 ià( d©a_Ën < 8) 278 eœ -> did_sourû = d©a [0] | (data[1] << 8); 279 eœ -> did_v’dÜ = d©a [2] | (data[3] << 8); 280 eœ -> did_´oduù = d©a [4] | (data[5] << 8); 281 eœ -> did_v”siÚ = d©a [6] | (data[7] << 8); 284  EIR_MANUFACTURER_DATA : 285 #ifdeà __TIZEN_PATCH__ 286 ià( d©a_Ën < 1) 289 eœ -> mªuçùu»r_d©a = `g_memdup ( d©a , 290 d©a_Ën ); 291 eœ -> mªuçùu»r_d©a_Ën = d©a_Ën ; 293 `eœ_·r£_msd ( eœ , d©a , d©a_Ën ); 298 eœ_d©a +ð f›ld_Ën + 1; 300 } } 302  $eœ_·r£_oob ( eœ_d©a * eœ , ušt8_t *eœ_d©a, ušt16_t eœ_Ën ) 305 ià( eœ_Ën < EIR_OOB_MIN ) 308 ià( eœ_Ën !ð `g‘_Ë16 ( eœ_d©a )) 311 eœ_d©a +ð( ušt16_t ); 312 eœ_Ën -ð( ušt16_t ); 314 `memýy (& eœ -> addr , eœ_d©a , ( bdaddr_t )); 315 eœ_d©a +ð( bdaddr_t ); 316 eœ_Ën -ð( bdaddr_t ); 319 ià( eœ_Ën > 0) 320 `eœ_·r£ ( eœ , eœ_d©a , eœ_Ën ); 323 } } 325  #SIZEOF_UUID128 16 ) 327  $eœ_g’”©e_uuid128 ( sdp_li¡_t * li¡ , ušt8_t * ±r , 328 ušt16_t * eœ_Ën ) 330  i , k , uuid_couÁ = 0; 331 ušt16_t Ën = * eœ_Ën ; 332 ušt8_t * uuid128 ; 333 boÞ Œunÿ‹d = çl£ ; 336 uuid128 = ±r + 2; 338 ; li¡ ;†i¡ =†i¡-> Ãxt ) { 339 sdp_»cÜd_t * »c = li¡ -> d©a ; 340 uuid_t * uuid = & »c -> svþass ; 341 ušt8_t * uuid128_d©a = uuid -> v®ue . uuid128 . d©a ; 343 ià( uuid -> ty³ !ð SDP_UUID128 ) 347 ià(( Ën + 2 + SIZEOF_UUID128 è> HCI_MAX_EIR_LENGTH ) { 348 Œunÿ‹d = Œue ; 353  i = 0; i < uuid_couÁ ; i++) { 354  k = 0; k < SIZEOF_UUID128 ; k++) { 355 ià( uuid128 [ i * SIZEOF_UUID128 + k ] != 356 uuid128_d©a [ SIZEOF_UUID128 - 1 - k ]) 359 ià( k =ð SIZEOF_UUID128 ) 363 ià( i < uuid_couÁ ) 367  k = 0; k < SIZEOF_UUID128 ; k++) 368 uuid128 [ uuid_couÁ * SIZEOF_UUID128 + k ] = 369 uuid128_d©a [ SIZEOF_UUID128 - 1 - k ]; 371 Ën +ð SIZEOF_UUID128 ; 372 uuid_couÁ ++; 375 ià( uuid_couÁ > 0 || Œunÿ‹d ) { 377 ±r [0] = ( uuid_couÁ * SIZEOF_UUID128 ) + 1; 379 ±r [1] = Œunÿ‹d ? EIR_UUID128_SOME : EIR_UUID128_ALL ; 380 Ën += 2; 381 * eœ_Ën = Ën ; 383 } } 385  $eœ_ü—‹_oob (cÚ¡ bdaddr_t * addr , cÚ¡ * Çme , ušt32_t cod , 386 cÚ¡ ušt8_t * hash , cÚ¡ ušt8_ˆ* ¿ndomiz” , 387 ušt16_t did_v’dÜ , ušt16_ˆ did_´oduù , 388 ušt16_t did_v”siÚ , ušt16_ˆ did_sourû , 389 sdp_li¡_t * uuids , ušt8_t * d©a ) 391 sdp_li¡_t * l ; 392 ušt8_t * ±r = d©a ; 393 ušt16_t eœ_ÝtiÚ®_Ën = 0; 394 ušt16_t eœ_tÙ®_Ën ; 395 ušt16_t uuid16 [ HCI_MAX_EIR_LENGTH / 2]; 396  i , uuid_couÁ = 0; 397 boÞ Œunÿ‹d = çl£ ; 398 size_t Çme_Ën ; 400 eœ_tÙ®_Ën = ( ušt16_t è+ ( bdaddr_t ); 401 ±r +ð( ušt16_t ); 403 `memýy ( ±r , addr , ( bdaddr_t )); 404 ±r +ð( bdaddr_t ); 406 ià( cod > 0) { 407 ušt8_t þass [3]; 409 þass [0] = ( ušt8_t è cod ; 410 þass [1] = ( ušt8_t è( cod >> 8); 411 þass [2] = ( ušt8_t è( cod >> 16); 413 * ±r ++ = 4; 414 * ±r ++ = EIR_CLASS_OF_DEV ; 416 `memýy ( ±r , þass , (class)); 417 ±r +ð( þass ); 419 eœ_ÝtiÚ®_Ën +ð( þass ) + 2; 422 ià( hash ) { 423 * ±r ++ = 17; 424 * ±r ++ = EIR_SSP_HASH ; 426 `memýy ( ±r , hash , 16); 427 ±r += 16; 429 eœ_ÝtiÚ®_Ën += 16 + 2; 432 ià( ¿ndomiz” ) { 433 * ±r ++ = 17; 434 * ±r ++ = EIR_SSP_RANDOMIZER ; 436 `memýy ( ±r , ¿ndomiz” , 16); 437 ±r += 16; 439 eœ_ÝtiÚ®_Ën += 16 + 2; 442 Çme_Ën = `¡¾’ ( Çme ); 444 ià( Çme_Ën > 0) { 446 ià( Çme_Ën > 48) { 447 Çme_Ën = 48; 448 ±r [1] = EIR_NAME_SHORT ; 450 ±r [1] = EIR_NAME_COMPLETE ; 453 ±r [0] = Çme_Ën + 1; 455 `memýy ( ±r + 2, Çme , Çme_Ën ); 457 eœ_ÝtiÚ®_Ën +ð( Çme_Ën + 2); 458 ±r +ð( Çme_Ën + 2); 461 ià( did_v’dÜ != 0x0000) { 462 * ±r ++ = 9; 463 * ±r ++ = EIR_DEVICE_ID ; 464 * ±r ++ = ( did_sourû & 0x00ff); 465 * ±r ++ = ( did_sourû & 0xff00) >> 8; 466 * ±r ++ = ( did_v’dÜ & 0x00ff); 467 * ±r ++ = ( did_v’dÜ & 0xff00) >> 8; 468 * ±r ++ = ( did_´oduù & 0x00ff); 469 * ±r ++ = ( did_´oduù & 0xff00) >> 8; 470 * ±r ++ = ( did_v”siÚ & 0x00ff); 471 * ±r ++ = ( did_v”siÚ & 0xff00) >> 8; 472 eœ_ÝtiÚ®_Ën += 10; 476  l = uuids ;† !ð NULL ;† =†-> Ãxt ) { 477 sdp_»cÜd_t * »c = l -> d©a ; 478 uuid_t * uuid = & »c -> svþass ; 480 ià( uuid -> ty³ !ð SDP_UUID16 ) 483 ià( uuid -> v®ue . uuid16 < 0x1100) 486 ià( uuid -> v®ue . uuid16 =ð PNP_INFO_SVCLASS_ID ) 490 ià(( eœ_ÝtiÚ®_Ën + 2 + ( ušt16_t )) > 491 HCI_MAX_EIR_LENGTH ) { 492 Œunÿ‹d = Œue ; 497  i = 0; i < uuid_couÁ ; i++) 498 ià( uuid16 [ i ] =ð uuid -> v®ue .uuid16) 501 ià( i < uuid_couÁ ) 504 uuid16 [ uuid_couÁ ++] = uuid -> v®ue .uuid16; 505 eœ_ÝtiÚ®_Ën +ð( ušt16_t ); 508 ià( uuid_couÁ > 0) { 510 ±r [0] = ( uuid_couÁ * ( ušt16_t )) + 1; 512 ±r [1] = Œunÿ‹d ? EIR_UUID16_SOME : EIR_UUID16_ALL ; 514 ±r += 2; 515 eœ_ÝtiÚ®_Ën += 2; 517  i = 0; i < uuid_couÁ ; i++) { 518 * ±r ++ = ( uuid16 [ i ] & 0x00ff); 519 * ±r ++ = ( uuid16 [ i ] & 0xff00) >> 8; 524 ià( eœ_ÝtiÚ®_Ën <ð HCI_MAX_EIR_LENGTH - 2) 525 `eœ_g’”©e_uuid128 ( uuids , ±r , & eœ_ÝtiÚ®_Ën ); 527 eœ_tÙ®_Ën +ð eœ_ÝtiÚ®_Ën ; 530 `put_Ë16 ( eœ_tÙ®_Ën , d©a ); 532  eœ_tÙ®_Ën ; 533 } } @src/eir.h 25  #EIR_FLAGS 0x01 ) 26  #EIR_UUID16_SOME 0x02 ) 27  #EIR_UUID16_ALL 0x03 ) 28  #EIR_UUID32_SOME 0x04 ) 29  #EIR_UUID32_ALL 0x05 ) 30  #EIR_UUID128_SOME 0x06 ) 31  #EIR_UUID128_ALL 0x07 ) 32  #EIR_NAME_SHORT 0x08 ) 33  #EIR_NAME_COMPLETE 0x09 ) 34  #EIR_TX_POWER 0x0A ) 35  #EIR_CLASS_OF_DEV 0x0D ) 36  #EIR_SSP_HASH 0x0E ) 37  #EIR_SSP_RANDOMIZER 0x0F ) 38  #EIR_DEVICE_ID 0x10 ) 39  #EIR_GAP_APPEARANCE 0x19 ) 40  #EIR_MANUFACTURER_DATA 0xFF ) 43  #EIR_LIM_DISC 0x01 ) 44  #EIR_GEN_DISC 0x02 ) 45  #EIR_BREDR_UNSUP 0x04 ) 46  #EIR_CONTROLLER 0x08 ) 48  #EIR_SIM_HOST 0x10 ) 51  #EIR_MSD_MAX_LEN 236 ) 53  seœ_msd { 54 ušt16_t mcom·ny ; 55 ušt8_t md©a [ EIR_MSD_MAX_LEN ]; 56 ušt8_t md©a_Ën ; 59  seœ_d©a { 60 GSLi¡ * m£rviûs ; 61  mæags ; 62 * mÇme ; 63 ušt32_t mþass ; 64 ušt16_t m­³¬ªû ; 65 boÞ mÇme_com¶‘e ; 66 št8_t mtx_pow” ; 67 ušt8_t * mhash ; 68 ušt8_t * m¿ndomiz” ; 69 bdaddr_t maddr ; 70 ušt16_t mdid_v’dÜ ; 71 ušt16_t mdid_´oduù ; 72 ušt16_t mdid_v”siÚ ; 73 ušt16_t mdid_sourû ; 74 GSLi¡ * mmsd_li¡ ; 75 #ifdeà __TIZEN_PATCH__ 76 * mmªuçùu»r_d©a ; 77 ušt8_t mmªuçùu»r_d©a_Ën ; 81  eœ_d©a_ä“ ( eœ_d©a * eœ ); 82  eœ_·r£ ( eœ_d©a * eœ , cÚ¡ ušt8_t *eœ_d©a, ušt8_ˆ eœ_Ën ); 83  eœ_·r£_oob ( eœ_d©a * eœ , ušt8_t *eœ_d©a, ušt16_t eœ_Ën ); 84  eœ_ü—‹_oob (cÚ¡ bdaddr_t * addr , cÚ¡ * Çme , ušt32_t cod , 85 cÚ¡ ušt8_t * hash , cÚ¡ ušt8_ˆ* ¿ndomiz” , 86 ušt16_t did_v’dÜ , ušt16_ˆ did_´oduù , 87 ušt16_t did_v”siÚ , ušt16_ˆ did_sourû , 88 sdp_li¡_t * uuids , ušt8_t * d©a ); @src/error.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~ 32  ~"”rÜ.h " 34 DBusMes§ge * $btd_”rÜ_šv®id_¬gs ( DBusMes§ge * msg ) 36  `btd_”rÜ_šv®id_¬gs_¡r ( msg , 38 } } 40 DBusMes§ge * $btd_”rÜ_šv®id_¬gs_¡r ( DBusMes§ge * msg , cÚ¡ * ¡r ) 42  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".InvalidArguments", 43 ¡r ); 44 } } 46 DBusMes§ge * $btd_”rÜ_busy ( DBusMes§ge * msg ) 48  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".InProgress", 50 } } 52 DBusMes§ge * $btd_”rÜ_®»ady_exi¡s ( DBusMes§ge * msg ) 54  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".AlreadyExists", 56 } } 58 DBusMes§ge * $btd_”rÜ_nÙ_suµÜ‹d ( DBusMes§ge * msg ) 60  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".NotSupported", 62 } } 64 DBusMes§ge * $btd_”rÜ_nÙ_cÚÃùed ( DBusMes§ge * msg ) 66  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".NotConnected", 68 } } 70 DBusMes§ge * $btd_”rÜ_®»ady_cÚÃùed ( DBusMes§ge * msg ) 72  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".AlreadyConnected", 74 } } 76 DBusMes§ge * $btd_”rÜ_š_´og»ss ( DBusMes§ge * msg ) 78  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".InProgress", 80 } } 82 DBusMes§ge * $btd_”rÜ_nÙ_avažabË ( DBusMes§ge * msg ) 84  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".NotAvailable", 86 } } 88 DBusMes§ge * $btd_”rÜ_dÛs_nÙ_exi¡ ( DBusMes§ge * msg ) 90  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".DoesNotExist", 92 } } 94 DBusMes§ge * $btd_”rÜ_nÙ_authÜized ( DBusMes§ge * msg ) 96  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".NotAuthorized", 98 } } 100 DBusMes§ge * $btd_”rÜ_nÙ_³rm™‹d ( DBusMes§ge * msg , cÚ¡ * ¡r ) 102  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".NÙP”m™‹d", ¡r ); 103 } } 105 DBusMes§ge * $btd_”rÜ_no_such_ad­‹r ( DBusMes§ge * msg ) 107  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".NoSuchAdapter", 109 } } 111 DBusMes§ge * $btd_”rÜ_ag’t_nÙ_avažabË ( DBusMes§ge * msg ) 113  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".AgentNotAvailable", 115 } } 117 DBusMes§ge * $btd_”rÜ_nÙ_»ady ( DBusMes§ge * msg ) 119  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".NotReady", 121 } } 123 DBusMes§ge * $btd_”rÜ_çžed ( DBusMes§ge * msg , cÚ¡ * ¡r ) 125  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE 126 ".Fažed", "%s", ¡r ); 127 } } @src/error.h 26  ~ 28  #ERROR_INTERFACE "Üg.bluez.E¼Ü" ) 30 DBusMes§ge * btd_”rÜ_šv®id_¬gs (DBusMes§g* msg ); 31 DBusMes§ge * btd_”rÜ_šv®id_¬gs_¡r (DBusMes§g* msg , cÚ¡ * ¡r ); 32 DBusMes§ge * btd_”rÜ_busy (DBusMes§g* msg ); 33 DBusMes§ge * btd_”rÜ_®»ady_exi¡s (DBusMes§g* msg ); 34 DBusMes§ge * btd_”rÜ_nÙ_suµÜ‹d (DBusMes§g* msg ); 35 DBusMes§ge * btd_”rÜ_nÙ_cÚÃùed (DBusMes§g* msg ); 36 DBusMes§ge * btd_”rÜ_®»ady_cÚÃùed (DBusMes§g* msg ); 37 DBusMes§ge * btd_”rÜ_nÙ_avažabË (DBusMes§g* msg ); 38 DBusMes§ge * btd_”rÜ_š_´og»ss (DBusMes§g* msg ); 39 DBusMes§ge * btd_”rÜ_dÛs_nÙ_exi¡ (DBusMes§g* msg ); 40 DBusMes§ge * btd_”rÜ_nÙ_authÜized (DBusMes§g* msg ); 41 DBusMes§ge * btd_”rÜ_nÙ_³rm™‹d (DBusMes§g* msg , cÚ¡ * ¡r ); 42 DBusMes§ge * btd_”rÜ_no_such_ad­‹r (DBusMes§g* msg ); 43 DBusMes§ge * btd_”rÜ_ag’t_nÙ_avažabË (DBusMes§g* msg ); 44 DBusMes§ge * btd_”rÜ_nÙ_»ady (DBusMes§g* msg ); 45 DBusMes§ge * btd_”rÜ_çžed (DBusMes§g* msg , cÚ¡ * ¡r ); @src/gatt-client.c 20 #ifdeà HAVE_CONFIG_H 21  ~ 24  ~<¡dboÞ.h > 25  ~<¡dšt.h > 27  ~ 28  ~ 30  ~ 32  ~"log.h " 33  ~"”rÜ.h " 34  ~"ad­‹r.h " 35  ~"deviû.h " 36  ~"lib/uuid.h " 37  ~"¤c/sh¬ed/queue.h " 38  ~"¤c/sh¬ed/©t.h " 39  ~"¤c/sh¬ed/g©t-db.h " 40  ~"¤c/sh¬ed/g©t-þ›Á.h " 41  ~"¤c/sh¬ed/utž.h " 42  ~"g©t-þ›Á.h " 43  ~"dbus-commÚ.h " 45  #GATT_SERVICE_IFACE "Üg.bluez.G©tS”viû1" ) 46  #GATT_CHARACTERISTIC_IFACE "Üg.bluez.G©tCh¬aù”i¡ic1" ) 47  #GATT_DESCRIPTOR_IFACE "Üg.bluez.G©tDesütÜ1" ) 49  sbtd_g©t_þ›Á { 50  btd_deviû * mdeviû ; 51  mdevaddr [18]; 52  g©t_db * mdb ; 53  bt_g©t_þ›Á * mg©t ; 55  queue * m£rviûs ; 58  s£rviû { 59  btd_g©t_þ›Á * mþ›Á ; 60 boÞ m´im¬y ; 61 ušt16_t m¡¬t_hªdË ; 62 ušt16_t m’d_hªdË ; 63 bt_uuid_t muuid ; 64 * m·th ; 65  queue * mchrcs ; 66 boÞ mchrcs_»ady ; 69  sch¬aù”i¡ic { 70  £rviû * m£rviû ; 71  g©t_db_©Œibu‹ * m©Œ ; 72 ušt16_t mhªdË ; 73 ušt16_t mv®ue_hªdË ; 74 ušt8_t m´Ýs ; 75 bt_uuid_t muuid ; 76 * m·th ; 78 boÞ mš_»ad ; 79 boÞ mš_wr™e ; 81  queue * mdescs ; 84  sdesütÜ { 85  ch¬aù”i¡ic * mchrc ; 86  g©t_db_©Œibu‹ * m©Œ ; 87 ušt16_t mhªdË ; 88 bt_uuid_t muuid ; 89 * m·th ; 91 boÞ mš_»ad ; 92 boÞ mš_wr™e ; 95  gboÞ—n $desütÜ_g‘_uuid (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 96 DBusMes§geI‹r * ™” , * d©a ) 98  uuid [ MAX_LEN_UUID_STR + 1]; 99 cÚ¡ * ±r = uuid ; 100  desütÜ * desc = d©a ; 102 `bt_uuid_to_¡ršg (& desc -> uuid , uuid, (uuid)); 103 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ±r ); 105  TRUE ; 106 } } 108  gboÞ—n $desütÜ_g‘_ch¬aù”i¡ic ( 109 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 110 DBusMes§geI‹r * ™” , * d©a ) 112  desütÜ * desc = d©a ; 113 cÚ¡ * ¡r = desc -> chrc -> ·th ; 115 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ¡r ); 117  TRUE ; 118 } } 120  $»ad_cb ( g©t_db_©Œibu‹ * ©Œib ,  ”r , 121 cÚ¡ ušt8_t * v®ue , size_t Ëngth , 122 * u£r_d©a ) 124 DBusMes§geI‹r * ¬¿y = u£r_d©a ; 126 ià( ”r ) 129 `dbus_mes§ge_™”_­³nd_fixed_¬¿y ( ¬¿y , DBUS_TYPE_BYTE , & v®ue , 130 Ëngth ); 131 } } 133  gboÞ—n $desütÜ_g‘_v®ue (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 134 DBusMes§geI‹r * ™” , * d©a ) 136  desütÜ * desc = d©a ; 137 DBusMes§geI‹r ¬¿y ; 139 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , "y", & ¬¿y ); 141 `g©t_db_©Œibu‹_»ad ( desc -> ©Œ , 0, 0, NULL , »ad_cb , & ¬¿y ); 143 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ¬¿y ); 145  TRUE ; 146 } } 148  $»ad_check_cb ( g©t_db_©Œibu‹ * ©Œib ,  ”r , 149 cÚ¡ ušt8_t * v®ue , size_t Ëngth , 150 * u£r_d©a ) 152 gboÞ—n * »t = u£r_d©a ; 154 ià( ”r || Ëngth == 0) { 155 * »t = FALSE ; 159 * »t = TRUE ; 160 } } 162  gboÞ—n $desütÜ_v®ue_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 163 * d©a ) 165  desütÜ * desc = d©a ; 166 gboÞ—n »t ; 168 `g©t_db_©Œibu‹_»ad ( desc -> ©Œ , 0, 0, NULL , »ad_check_cb , & »t ); 170  »t ; 171 } } 173  boÞ $·r£_v®ue_¬g ( DBusMes§ge * msg , ušt8_t ** v®ue , 174 size_t * v®ue_Ën ) 176 DBusMes§geI‹r ™” , ¬¿y ; 177 ušt8_t * v® ; 178  Ën ; 180 ià(! `dbus_mes§ge_™”_š™ ( msg , & ™” )) 181  çl£ ; 183 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_ARRAY ) 184  çl£ ; 186 `dbus_mes§ge_™”_»cur£ (& ™” , & ¬¿y ); 187 `dbus_mes§ge_™”_g‘_fixed_¬¿y (& ¬¿y , & v® , & Ën ); 188 `dbus_mes§ge_™”_Ãxt (& ™” ); 190 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_INVALID ) 191  çl£ ; 193 ià( Ën < 0) 194  çl£ ; 196 * v®ue = v® ; 197 * v®ue_Ën = Ën ; 199  Œue ; 200 } } 202  $boÞ (* tasync_dbus_Ý_com¶‘e_t )(* td©a ); 204  sasync_dbus_Ý { 205  »f_couÁ ; 206 DBusMes§ge * msg ; 207 * d©a ; 208 ušt16_t off£t ; 209 async_dbus_Ý_com¶‘e_t com¶‘e ; 212  $async_dbus_Ý_ä“ (* d©a ) 214  async_dbus_Ý * Ý = d©a ; 216 `dbus_mes§ge_uÄef ( Ý -> msg ); 217 `ä“ ( Ý ); 218 } } 220  async_dbus_Ý * $async_dbus_Ý_»f ( async_dbus_Ý * Ý ) 222 `__sync_ãtch_ªd_add (& Ý -> »f_couÁ , 1); 224  Ý ; 225 } } 227  $async_dbus_Ý_uÄef (* d©a ) 229  async_dbus_Ý * Ý = d©a ; 231 ià( `__sync_sub_ªd_ãtch (& Ý -> »f_couÁ , 1)) 234 `async_dbus_Ý_ä“ ( Ý ); 235 } } 237  $mes§ge_­³nd_by‹_¬¿y ( DBusMes§ge * msg , cÚ¡ ušt8_t * by‹s , 238 size_t Ën ) 240 DBusMes§geI‹r ™” , ¬¿y ; 242 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 243 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , "y", & ¬¿y ); 244 `dbus_mes§ge_™”_­³nd_fixed_¬¿y (& ¬¿y , DBUS_TYPE_BYTE , & by‹s , 245 Ën ); 246 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & ¬¿y ); 247 } } 249  DBusMes§ge * $ü—‹_g©t_dbus_”rÜ ( DBusMes§ge * msg , ušt8_t ©t_ecode ) 251  ©t_ecode ) { 252  BT_ATT_ERROR_READ_NOT_PERMITTED : 253  `btd_”rÜ_nÙ_³rm™‹d ( msg , "Read‚ot…ermitted"); 254  BT_ATT_ERROR_WRITE_NOT_PERMITTED : 255  `btd_”rÜ_nÙ_³rm™‹d ( msg , "Write‚ot…ermitted"); 256  BT_ATT_ERROR_AUTHENTICATION : 257  BT_ATT_ERROR_INSUFFICIENT_ENCRYPTION : 258  BT_ATT_ERROR_INSUFFICIENT_ENCRYPTION_KEY_SIZE : 259  `btd_”rÜ_nÙ_³rm™‹d ( msg , "Not…aired"); 260  BT_ATT_ERROR_INVALID_OFFSET : 261  `btd_”rÜ_šv®id_¬gs_¡r ( msg , "Invalid offset"); 262  BT_ATT_ERROR_INVALID_ATTRIBUTE_VALUE_LEN : 263  `btd_”rÜ_šv®id_¬gs_¡r ( msg , "Invalid Length"); 264  BT_ATT_ERROR_AUTHORIZATION : 265  `btd_”rÜ_nÙ_authÜized ( msg ); 266  BT_ATT_ERROR_REQUEST_NOT_SUPPORTED : 267  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 269  `btd_”rÜ_çžed ( msg , "Operation failed"); 271  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE , 273 ©t_ecode ); 276  NULL ; 277 } } 279  $wr™e_desütÜ_cb ( g©t_db_©Œibu‹ * ©Œ ,  ”r , 280 * u£r_d©a ) 282  desütÜ * desc = u£r_d©a ; 284 ià( ”r ) 287 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), desc -> ·th , 288 GATT_DESCRIPTOR_IFACE , "Value"); 289 } } 291  $»ad_Ý_cb ( g©t_db_©Œibu‹ * ©Œib ,  ”r , 292 cÚ¡ ušt8_t * v®ue , size_t Ëngth , 293 * u£r_d©a ) 295  async_dbus_Ý * Ý = u£r_d©a ; 296 DBusMes§ge * »¶y ; 298 ià( ”r ) { 299 `”rÜ ("Failedo„ead‡ttribute"); 303 »¶y = `g_dbus_ü—‹_»¶y ( Ý -> msg , DBUS_TYPE_INVALID ); 304 ià(! »¶y ) { 305 `”rÜ ("Failedo‡llocate D-Bus message„eply"); 309 `mes§ge_­³nd_by‹_¬¿y ( »¶y , v®ue , Ëngth ); 311 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y ); 312 } } 314  $desc_»ad_cb ( boÞ sucûss , ušt8_t ©t_ecode , 315 cÚ¡ ušt8_t * v®ue , ušt16_t Ëngth , 316 * u£r_d©a ) 318  async_dbus_Ý * Ý = u£r_d©a ; 319  desütÜ * desc = Ý -> d©a ; 320  £rviû *£rviû = desc -> chrc ->service; 322 ià(! sucûss ) { 323 DBusMes§ge * »¶y = `ü—‹_g©t_dbus_”rÜ ( Ý -> msg , ©t_ecode ); 325 desc -> š_»ad = çl£ ; 326 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y ); 330 `g©t_db_©Œibu‹_wr™e ( desc -> ©Œ , 0, v®ue , Ëngth , 0, NULL , 331 wr™e_desütÜ_cb , desc ); 338 ià( Ëngth =ð `bt_g©t_þ›Á_g‘_mtu ( £rviû -> þ›Á -> g©t ) - 1) { 339 Ý -> off£t +ð Ëngth ; 340 ià( `bt_g©t_þ›Á_»ad_lÚg_v®ue ( £rviû -> þ›Á -> g©t , 341 desc -> hªdË , 342 Ý -> off£t , 343 desc_»ad_cb , 344 `async_dbus_Ý_»f ( Ý ), 345 async_dbus_Ý_uÄef )) 349 desc -> š_»ad = çl£ ; 352 `g©t_db_©Œibu‹_»ad ( desc -> ©Œ , 0, 0, NULL , »ad_Ý_cb , Ý ); 353 } } 355  DBusMes§ge * $desütÜ_»ad_v®ue ( DBusCÚÃùiÚ * cÚn , 356 DBusMes§ge * msg , * u£r_d©a ) 358  desütÜ * desc = u£r_d©a ; 359  bt_g©t_þ›Á * g©t = desc -> chrc -> £rviû -> þ›Á ->gatt; 360  async_dbus_Ý * Ý ; 362 ià( desc -> š_»ad ) 363  `btd_”rÜ_š_´og»ss ( msg ); 365 Ý = `Ãw0 ( async_dbus_Ý , 1); 366 ià(! Ý ) 367  `btd_”rÜ_çžed ( msg , "Failedo initialize„equest"); 369 Ý -> msg = `dbus_mes§ge_»f (msg); 370 Ý -> d©a = desc ; 372 ià( `bt_g©t_þ›Á_»ad_v®ue ( g©t , desc -> hªdË , desc_»ad_cb , 373 `async_dbus_Ý_»f ( Ý ), 374 async_dbus_Ý_uÄef )) { 375 desc -> š_»ad = Œue ; 376  NULL ; 379 `async_dbus_Ý_ä“ ( Ý ); 381  `btd_”rÜ_çžed ( msg , "Failedo send„ead„equest"); 382 } } 384  $wr™e_»suÉ_cb ( boÞ sucûss , boÞ »lŸbË_”rÜ , 385 ušt8_t ©t_ecode , * u£r_d©a ) 387  async_dbus_Ý * Ý = u£r_d©a ; 388 DBusMes§ge * »¶y ; 390 ià( Ý -> com¶‘e && !Ý-> `com¶‘e (Ý-> d©a )) { 391 »¶y = `btd_”rÜ_çžed ( Ý -> msg , "Operation failed"); 392  dÚe ; 395 ià(! sucûss ) { 396 ià( »lŸbË_”rÜ ) 397 »¶y = `btd_”rÜ_çžed ( Ý -> msg , 400 »¶y = `ü—‹_g©t_dbus_”rÜ ( Ý -> msg , ©t_ecode ); 402  dÚe ; 405 »¶y = `g_dbus_ü—‹_»¶y ( Ý -> msg , DBUS_TYPE_INVALID ); 406 ià(! »¶y ) { 407 `”rÜ ("Failedo‡llocate D-Bus message„eply"); 411 dÚe : 412 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y ); 413 } } 416  $wr™e_cb ( boÞ sucûss , ušt8_t ©t_ecode , * u£r_d©a ) 418 `wr™e_»suÉ_cb ( sucûss , çl£ , ©t_ecode , u£r_d©a ); 419 } } 421  boÞ $¡¬t_lÚg_wr™e ( DBusMes§ge * msg , ušt16_t hªdË , 422  bt_g©t_þ›Á * g©t , 423 boÞ »lŸbË , cÚ¡ ušt8_t * v®ue , 424 size_t v®ue_Ën , * d©a , 425 async_dbus_Ý_com¶‘e_t com¶‘e ) 427  async_dbus_Ý * Ý ; 429 Ý = `Ãw0 ( async_dbus_Ý , 1); 430 ià(! Ý ) 431  çl£ ; 433 Ý -> msg = `dbus_mes§ge_»f (msg); 434 Ý -> d©a = data; 435 Ý -> com¶‘e = complete; 437 ià( `bt_g©t_þ›Á_wr™e_lÚg_v®ue ( g©t , »lŸbË , hªdË , 438 0, v®ue , v®ue_Ën , 439 wr™e_»suÉ_cb , Ý , 440 async_dbus_Ý_ä“ )) 441  Œue ; 443 `async_dbus_Ý_ä“ ( Ý ); 445  çl£ ; 446 } } 448  boÞ $¡¬t_wr™e_»que¡ ( DBusMes§ge * msg , ušt16_t hªdË , 449  bt_g©t_þ›Á * g©t , 450 cÚ¡ ušt8_t * v®ue , size_t v®ue_Ën , 451 * d©a , 452 async_dbus_Ý_com¶‘e_t com¶‘e ) 454  async_dbus_Ý * Ý ; 456 Ý = `Ãw0 ( async_dbus_Ý , 1); 457 ià(! Ý ) 458  çl£ ; 460 Ý -> msg = `dbus_mes§ge_»f (msg); 461 Ý -> d©a = data; 462 Ý -> com¶‘e = complete; 464 ià( `bt_g©t_þ›Á_wr™e_v®ue ( g©t , hªdË , v®ue , v®ue_Ën , 465 wr™e_cb , Ý , 466 async_dbus_Ý_ä“ )) 467  Œue ; 469 `async_dbus_Ý_ä“ ( Ý ); 471  çl£ ; 472 } } 474  boÞ $desc_wr™e_com¶‘e (* d©a ) 476  desütÜ * desc = d©a ; 478 desc -> š_wr™e = çl£ ; 484  !! desc -> chrc ; 485 } } 487  DBusMes§ge * $desütÜ_wr™e_v®ue ( DBusCÚÃùiÚ * cÚn , 488 DBusMes§ge * msg , * u£r_d©a ) 490  desütÜ * desc = u£r_d©a ; 491  bt_g©t_þ›Á * g©t = desc -> chrc -> £rviû -> þ›Á ->gatt; 492 ušt8_t * v®ue = NULL ; 493 size_t v®ue_Ën = 0; 494 boÞ »suÉ ; 495 bt_uuid_t uuid ; 497 ià( desc -> š_wr™e ) 498  `btd_”rÜ_š_´og»ss ( msg ); 500 ià(! `·r£_v®ue_¬g ( msg , & v®ue , & v®ue_Ën )) 501  `btd_”rÜ_šv®id_¬gs ( msg ); 508 `bt_uuid16_ü—‹ (& uuid , GATT_CLIENT_CHARAC_CFG_UUID ); 509 ià( `bt_uuid_cmp (& desc -> uuid , &uuid)) 510  `btd_”rÜ_nÙ_³rm™‹d ( msg , "Write‚ot…ermitted"); 516 ià( v®ue_Ën <ð(è `bt_g©t_þ›Á_g‘_mtu ( g©t ) - 3) 517 »suÉ = `¡¬t_wr™e_»que¡ ( msg , desc -> hªdË , g©t , v®ue , 518 v®ue_Ën , desc , 519 desc_wr™e_com¶‘e ); 521 »suÉ = `¡¬t_lÚg_wr™e ( msg , desc -> hªdË , g©t , çl£ , v®ue , 522 v®ue_Ën , desc , 523 desc_wr™e_com¶‘e ); 525 ià(! »suÉ ) 526  `btd_”rÜ_çžed ( msg , "Failedo initiate write"); 528 desc -> š_wr™e = Œue ; 530  NULL ; 531 } } 533 cÚ¡ GDBusPrÝ”tyTabË gdesütÜ_´Ý”t›s [] = { 534 { "UUID", "s", desütÜ_g‘_uuid , NULL , NULL, 535 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 536 { "Ch¬aù”i¡ic", "o", desütÜ_g‘_ch¬aù”i¡ic , NULL , NULL, 537 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 538 { "V®ue", "ay", desütÜ_g‘_v®ue , NULL , desütÜ_v®ue_exi¡s , 539 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 543 cÚ¡ GDBusM‘hodTabË gdesütÜ_m‘hods [] = { 544 { GDBUS_EXPERIMENTAL_ASYNC_METHOD ("R—dV®ue", NULL , 545 GDBUS_ARGS ({ "value", "ay" }), 546 desütÜ_»ad_v®ue ) }, 547 { GDBUS_EXPERIMENTAL_ASYNC_METHOD ("WriteValue", 548 GDBUS_ARGS ({ "value", "ay" }), 549 NULL , 550 desütÜ_wr™e_v®ue ) }, 554  $desütÜ_ä“ (* d©a ) 556  desütÜ * desc = d©a ; 558 `g_ä“ ( desc -> ·th ); 559 `ä“ ( desc ); 560 } } 562  desütÜ * $desütÜ_ü—‹ ( g©t_db_©Œibu‹ * ©Œ , 563  ch¬aù”i¡ic * chrc ) 565  desütÜ * desc ; 567 desc = `Ãw0 ( desütÜ , 1); 568 ià(! desc ) 569  NULL ; 571 desc -> chrc = chrc; 572 desc -> ©Œ =‡ttr; 573 desc -> hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( ©Œ ); 575 `bt_uuid_to_uuid128 ( `g©t_db_©Œibu‹_g‘_ty³ ( ©Œ ), & desc -> uuid ); 577 desc -> ·th = `g_¡rdup_´štf ("%s/desc%04x", chrc ->·th, desc-> hªdË ); 579 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), desc -> ·th , 580 GATT_DESCRIPTOR_IFACE , 581 desütÜ_m‘hods , NULL , 582 desütÜ_´Ý”t›s , 583 desc , desütÜ_ä“ )) { 584 `”rÜ ("Unableo„egister GATT descriptor with handle 0x%04x", 585 desc -> hªdË ); 586 `desütÜ_ä“ ( desc ); 588  NULL ; 591 `DBG ("ExpÜ‹d GATT ch¬aù”i¡iødesütÜ: %s", desc -> ·th ); 593  desc ; 594 } } 596  $uÄegi¡”_desütÜ (* d©a ) 598  desütÜ * desc = d©a ; 600 `DBG ("Removšg GATT desütÜ: %s", desc -> ·th ); 602 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), desc -> ·th , 603 GATT_DESCRIPTOR_IFACE ); 604 } } 606  gboÞ—n $ch¬aù”i¡ic_g‘_uuid (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 607 DBusMes§geI‹r * ™” , * d©a ) 609  uuid [ MAX_LEN_UUID_STR + 1]; 610 cÚ¡ * ±r = uuid ; 611  ch¬aù”i¡ic * chrc = d©a ; 613 `bt_uuid_to_¡ršg (& chrc -> uuid , uuid, (uuid)); 614 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ±r ); 616  TRUE ; 617 } } 619  gboÞ—n $ch¬aù”i¡ic_g‘_£rviû (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 620 DBusMes§geI‹r * ™” , * d©a ) 622  ch¬aù”i¡ic * chrc = d©a ; 623 cÚ¡ * ¡r = chrc -> £rviû -> ·th ; 625 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ¡r ); 627  TRUE ; 628 } } 630  gboÞ—n $ch¬aù”i¡ic_g‘_v®ue (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 631 DBusMes§geI‹r * ™” , * d©a ) 633  ch¬aù”i¡ic * chrc = d©a ; 634 DBusMes§geI‹r ¬¿y ; 636 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , "y", & ¬¿y ); 638 `g©t_db_©Œibu‹_»ad ( chrc -> ©Œ , 0, 0, NULL , »ad_cb , & ¬¿y ); 640 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ¬¿y ); 642  TRUE ; 643 } } 645  gboÞ—n $ch¬aù”i¡ic_v®ue_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 646 * d©a ) 648  ch¬aù”i¡ic * chrc = d©a ; 649 gboÞ—n »t ; 651 `g©t_db_©Œibu‹_»ad ( chrc -> ©Œ , 0, 0, NULL , »ad_check_cb , & »t ); 653  TRUE ; 654 } } 656  gboÞ—n $ch¬aù”i¡ic_g‘_nÙifyšg (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 657 DBusMes§geI‹r * ™” , * d©a ) 659 dbus_boÞ_t nÙifyšg = FALSE ; 666 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & nÙifyšg ); 668  TRUE ; 669 } } 672 ušt8_t m´Ý ; 673 * m¡r ; 674 } g´Ý”t›s [] = { 676 { BT_GATT_CHRC_PROP_BROADCAST , "broadcast" }, 677 { BT_GATT_CHRC_PROP_READ , "read" }, 678 { BT_GATT_CHRC_PROP_WRITE_WITHOUT_RESP , "write-without-response" }, 679 { BT_GATT_CHRC_PROP_WRITE , "write" }, 680 { BT_GATT_CHRC_PROP_NOTIFY , "notify" }, 681 { BT_GATT_CHRC_PROP_INDICATE , "indicate" }, 682 { BT_GATT_CHRC_PROP_AUTH , "authenticated-signed-writes" }, 686  gboÞ—n $ch¬aù”i¡ic_g‘_æags (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 687 DBusMes§geI‹r * ™” , * d©a ) 689  ch¬aù”i¡ic * chrc = d©a ; 690 DBusMes§geI‹r ¬¿y ; 691  i ; 693 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , "s", & ¬¿y ); 695  i = 0; ´Ý”t›s [i]. ¡r ; i++) { 696 ià( chrc -> ´Ýs & ´Ý”t›s [ i ]. ´Ý ) 697 `dbus_mes§ge_™”_­³nd_basic (& ¬¿y , DBUS_TYPE_STRING , 698 & ´Ý”t›s [ i ]. ¡r ); 706 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ¬¿y ); 708  TRUE ; 709 } } 711  $wr™e_ch¬aù”i¡ic_cb ( g©t_db_©Œibu‹ * ©Œ ,  ”r , 712 * u£r_d©a ) 714  ch¬aù”i¡ic * chrc = u£r_d©a ; 716 ià( ”r ) 719 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), chrc -> ·th , 720 GATT_CHARACTERISTIC_IFACE , "Value"); 721 } } 723  $chrc_»ad_cb ( boÞ sucûss , ušt8_t ©t_ecode , cÚ¡ ušt8_ˆ* v®ue , 724 ušt16_t Ëngth , * u£r_d©a ) 726  async_dbus_Ý * Ý = u£r_d©a ; 727  ch¬aù”i¡ic * chrc = Ý -> d©a ; 728  £rviû *£rviû = chrc ->service; 730 ià(! sucûss ) { 731 DBusMes§ge * »¶y = `ü—‹_g©t_dbus_”rÜ ( Ý -> msg , ©t_ecode ); 733 chrc -> š_»ad = çl£ ; 734 `g_dbus_£nd_mes§ge ( `btd_g‘_dbus_cÚÃùiÚ (), »¶y ); 738 `g©t_db_©Œibu‹_wr™e ( chrc -> ©Œ , 0, v®ue , Ëngth , Ý -> off£t , NULL , 739 wr™e_ch¬aù”i¡ic_cb , chrc ); 746 ià( Ëngth =ð `bt_g©t_þ›Á_g‘_mtu ( £rviû -> þ›Á -> g©t ) - 1) { 747 Ý -> off£t +ð Ëngth ; 748 ià( `bt_g©t_þ›Á_»ad_lÚg_v®ue ( £rviû -> þ›Á -> g©t , 749 chrc -> v®ue_hªdË , 750 Ý -> off£t , 751 chrc_»ad_cb , 752 `async_dbus_Ý_»f ( Ý ), 753 async_dbus_Ý_uÄef )) 757 chrc -> š_»ad = çl£ ; 760 `g©t_db_©Œibu‹_»ad ( chrc -> ©Œ , 0, 0, NULL , »ad_Ý_cb , Ý ); 761 } } 763  DBusMes§ge * $ch¬aù”i¡ic_»ad_v®ue ( DBusCÚÃùiÚ * cÚn , 764 DBusMes§ge * msg , * u£r_d©a ) 766  ch¬aù”i¡ic * chrc = u£r_d©a ; 767  bt_g©t_þ›Á * g©t = chrc -> £rviû -> þ›Á ->gatt; 768  async_dbus_Ý * Ý ; 770 ià( chrc -> š_»ad ) 771  `btd_”rÜ_š_´og»ss ( msg ); 773 Ý = `Ãw0 ( async_dbus_Ý , 1); 774 ià(! Ý ) 775  `btd_”rÜ_çžed ( msg , "Failedo initialize„equest"); 777 Ý -> msg = `dbus_mes§ge_»f (msg); 778 Ý -> d©a = chrc ; 780 ià( `bt_g©t_þ›Á_»ad_v®ue ( g©t , chrc -> v®ue_hªdË , chrc_»ad_cb , 781 `async_dbus_Ý_»f ( Ý ), 782 async_dbus_Ý_uÄef )) { 783 chrc -> š_»ad = Œue ; 784  NULL ; 787 `async_dbus_Ý_ä“ ( Ý ); 789  `btd_”rÜ_çžed ( msg , "Failedo send„ead„equest"); 790 } } 792  boÞ $chrc_wr™e_com¶‘e (* d©a ) 794  ch¬aù”i¡ic * chrc = d©a ; 796 chrc -> š_wr™e = çl£ ; 802  !! chrc -> £rviû ; 803 } } 805  DBusMes§ge * $ch¬aù”i¡ic_wr™e_v®ue ( DBusCÚÃùiÚ * cÚn , 806 DBusMes§ge * msg , * u£r_d©a ) 808  ch¬aù”i¡ic * chrc = u£r_d©a ; 809  bt_g©t_þ›Á * g©t = chrc -> £rviû -> þ›Á ->gatt; 810 ušt8_t * v®ue = NULL ; 811 size_t v®ue_Ën = 0; 813 ià( chrc -> š_wr™e ) 814  `btd_”rÜ_š_´og»ss ( msg ); 816 ià(! `·r£_v®ue_¬g ( msg , & v®ue , & v®ue_Ën )) 817  `btd_”rÜ_šv®id_¬gs ( msg ); 819 ià(!( chrc -> ´Ýs & ( BT_GATT_CHRC_PROP_WRITE | 820 BT_GATT_CHRC_PROP_WRITE_WITHOUT_RESP ))) 821  `btd_”rÜ_nÙ_suµÜ‹d ( msg ); 834 ià( chrc -> ´Ýs & BT_GATT_CHRC_PROP_WRITE ) { 835 ušt16_t mtu ; 836 boÞ »suÉ ; 838 mtu = `bt_g©t_þ›Á_g‘_mtu ( g©t ); 839 ià(! mtu ) 840  `btd_”rÜ_çžed ( msg , "No ATTransport"); 842 ià( v®ue_Ën <ð(è mtu - 3) 843 »suÉ = `¡¬t_wr™e_»que¡ ( msg , chrc -> v®ue_hªdË , 844 g©t , v®ue , 845 v®ue_Ën , chrc , 846 chrc_wr™e_com¶‘e ); 848 »suÉ = `¡¬t_lÚg_wr™e ( msg , chrc -> v®ue_hªdË , g©t , 849 çl£ , v®ue , v®ue_Ën , chrc , 850 chrc_wr™e_com¶‘e ); 852 ià( »suÉ ) 853  dÚe_async ; 856 ià(( chrc -> ´Ýs & BT_GATT_CHRC_PROP_WRITE_WITHOUT_RESP ) && 857 `bt_g©t_þ›Á_wr™e_w™hout_»¥Ú£ ( g©t , 858 chrc -> v®ue_hªdË , 859 çl£ , v®ue , 860 v®ue_Ën )) 861  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 863  `btd_”rÜ_çžed ( msg , "Failedo initiate write"); 865 dÚe_async : 866 chrc -> š_wr™e = Œue ; 868  NULL ; 869 } } 871  DBusMes§ge * $ch¬aù”i¡ic_¡¬t_nÙify ( DBusCÚÃùiÚ * cÚn , 872 DBusMes§ge * msg , * u£r_d©a ) 875  `btd_”rÜ_çžed ( msg , "Not implemented"); 876 } } 878  DBusMes§ge * $ch¬aù”i¡ic_¡Ý_nÙify ( DBusCÚÃùiÚ * cÚn , 879 DBusMes§ge * msg , * u£r_d©a ) 882  `btd_”rÜ_çžed ( msg , "Not implemented"); 883 } } 885  $­³nd_desc_·th (* d©a , * u£r_d©a ) 887  desütÜ * desc = d©a ; 888 DBusMes§geI‹r * ¬¿y = u£r_d©a ; 890 `dbus_mes§ge_™”_­³nd_basic ( ¬¿y , DBUS_TYPE_OBJECT_PATH , 891 & desc -> ·th ); 892 } } 894  gboÞ—n $ch¬aù”i¡ic_g‘_desütÜs ( 895 cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 896 DBusMes§geI‹r * ™” , * d©a ) 898  ch¬aù”i¡ic * chrc = d©a ; 899 DBusMes§geI‹r ¬¿y ; 901 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , "o", & ¬¿y ); 903 `queue_fÜ—ch ( chrc -> descs , ­³nd_desc_·th , & ¬¿y ); 905 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ¬¿y ); 907  TRUE ; 908 } } 910 cÚ¡ GDBusPrÝ”tyTabË gch¬aù”i¡ic_´Ý”t›s [] = { 911 { "UUID", "s", ch¬aù”i¡ic_g‘_uuid , NULL , NULL, 912 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 913 { "S”viû", "o", ch¬aù”i¡ic_g‘_£rviû , NULL , NULL, 914 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 915 { "V®ue", "ay", ch¬aù”i¡ic_g‘_v®ue , NULL , 916 ch¬aù”i¡ic_v®ue_exi¡s , 917 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 918 { "NÙifyšg", "b", ch¬aù”i¡ic_g‘_nÙifyšg , NULL , NULL, 919 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 920 { "FÏgs", "as", ch¬aù”i¡ic_g‘_æags , NULL , NULL, 921 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 922 { "DesütÜs", "ao", ch¬aù”i¡ic_g‘_desütÜs , NULL , NULL, 923 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 927 cÚ¡ GDBusM‘hodTabË gch¬aù”i¡ic_m‘hods [] = { 928 { GDBUS_EXPERIMENTAL_ASYNC_METHOD ("R—dV®ue", NULL , 929 GDBUS_ARGS ({ "value", "ay" }), 930 ch¬aù”i¡ic_»ad_v®ue ) }, 931 { GDBUS_EXPERIMENTAL_ASYNC_METHOD ("WriteValue", 932 GDBUS_ARGS ({ "value", "ay" }), 933 NULL , 934 ch¬aù”i¡ic_wr™e_v®ue ) }, 935 { GDBUS_EXPERIMENTAL_ASYNC_METHOD ("S¹NÙify", NULL , NULL, 936 ch¬aù”i¡ic_¡¬t_nÙify ) }, 937 { GDBUS_EXPERIMENTAL_METHOD ("StÝNÙify", NULL , NULL, 938 ch¬aù”i¡ic_¡Ý_nÙify ) }, 942  $ch¬aù”i¡ic_ä“ (* d©a ) 944  ch¬aù”i¡ic * chrc = d©a ; 946 `queue_de¡roy ( chrc -> descs , NULL ); 947 `g_ä“ ( chrc -> ·th ); 948 `ä“ ( chrc ); 949 } } 951  ch¬aù”i¡ic * $ch¬aù”i¡ic_ü—‹ ( 952  g©t_db_©Œibu‹ * ©Œ , 953  £rviû *service) 955  ch¬aù”i¡ic * chrc ; 956 bt_uuid_t uuid ; 958 chrc = `Ãw0 ( ch¬aù”i¡ic , 1); 959 ià(! chrc ) 960  NULL ; 962 chrc -> descs = `queue_Ãw (); 963 ià(! chrc -> descs ) { 964 `ä“ ( chrc ); 965  NULL ; 968 chrc -> £rviû = service; 970 `g©t_db_©Œibu‹_g‘_ch¬_d©a ( ©Œ , & chrc -> hªdË , 971 & chrc -> v®ue_hªdË , 972 & chrc -> ´Ýs , & uuid ); 973 chrc -> ©Œ = `g©t_db_g‘_©Œibu‹ ( £rviû -> þ›Á -> db , 974 chrc -> v®ue_hªdË ); 975 `bt_uuid_to_uuid128 (& uuid , & chrc ->uuid); 977 chrc -> ·th = `g_¡rdup_´štf ("%s/ch¬%04x", £rviû ->path, 978 chrc -> hªdË ); 980 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), chrc -> ·th , 981 GATT_CHARACTERISTIC_IFACE , 982 ch¬aù”i¡ic_m‘hods , NULL , 983 ch¬aù”i¡ic_´Ý”t›s , 984 chrc , ch¬aù”i¡ic_ä“ )) { 985 `”rÜ ("Unableo„egister GATT characteristic with handle " 986 "0x%04x", chrc -> hªdË ); 987 `ch¬aù”i¡ic_ä“ ( chrc ); 989  NULL ; 992 `DBG ("ExpÜ‹d GATT ch¬aù”i¡ic: %s", chrc -> ·th ); 994  chrc ; 995 } } 997  $uÄegi¡”_ch¬aù”i¡ic (* d©a ) 999  ch¬aù”i¡ic * chrc = d©a ; 1001 `DBG ("Removšg GATT ch¬aù”i¡ic: %s", chrc -> ·th ); 1003 `queue_»move_®l ( chrc -> descs , NULL , NULL, uÄegi¡”_desütÜ ); 1005 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), chrc -> ·th , 1006 GATT_CHARACTERISTIC_IFACE ); 1007 } } 1009  gboÞ—n $£rviû_g‘_uuid (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1010 DBusMes§geI‹r * ™” , * d©a ) 1012  uuid [ MAX_LEN_UUID_STR + 1]; 1013 cÚ¡ * ±r = uuid ; 1014  £rviû *£rviû = d©a ; 1016 `bt_uuid_to_¡ršg (& £rviû -> uuid , uuid, (uuid)); 1017 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ±r ); 1019  TRUE ; 1020 } } 1022  gboÞ—n $£rviû_g‘_deviû (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1023 DBusMes§geI‹r * ™” , * d©a ) 1025  £rviû *£rviû = d©a ; 1026 cÚ¡ * ¡r = `deviû_g‘_·th ( £rviû -> þ›Á -> deviû ); 1028 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ¡r ); 1030  TRUE ; 1031 } } 1033  gboÞ—n $£rviû_g‘_´im¬y (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1034 DBusMes§geI‹r * ™” , * d©a ) 1036  £rviû *£rviû = d©a ; 1037 dbus_boÞ_t ´im¬y ; 1039 ´im¬y = £rviû ->´im¬y ? TRUE : FALSE ; 1041 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & ´im¬y ); 1043  TRUE ; 1044 } } 1046  $­³nd_chrc_·th (* d©a , * u£r_d©a ) 1048  ch¬aù”i¡ic * chrc = d©a ; 1049 DBusMes§geI‹r * ¬¿y = u£r_d©a ; 1051 `dbus_mes§ge_™”_­³nd_basic ( ¬¿y , DBUS_TYPE_OBJECT_PATH , 1052 & chrc -> ·th ); 1053 } } 1055  gboÞ—n $£rviû_g‘_ch¬aù”i¡ics (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1056 DBusMes§geI‹r * ™” , * d©a ) 1058  £rviû *£rviû = d©a ; 1059 DBusMes§geI‹r ¬¿y ; 1061 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , "o", & ¬¿y ); 1063 ià( £rviû -> chrcs_»ady ) 1064 `queue_fÜ—ch ( £rviû -> chrcs , ­³nd_chrc_·th , & ¬¿y ); 1066 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ¬¿y ); 1068  TRUE ; 1069 } } 1071 cÚ¡ GDBusPrÝ”tyTabË g£rviû_´Ý”t›s [] = { 1072 { "UUID", "s", £rviû_g‘_uuid , NULL , NULL, 1073 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 1074 { "Deviû", "o", £rviû_g‘_deviû , NULL , NULL, 1075 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 1076 { "Prim¬y", "b", £rviû_g‘_´im¬y , NULL , NULL, 1077 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 1078 { "Ch¬aù”i¡ics", "ao", £rviû_g‘_ch¬aù”i¡ics , NULL , NULL, 1079 G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, 1083  $£rviû_ä“ (* d©a ) 1085  £rviû *£rviû = d©a ; 1087 `queue_de¡roy ( £rviû -> chrcs , NULL ); 1088 `g_ä“ ( £rviû -> ·th ); 1089 `ä“ ( £rviû ); 1090 } } 1092  £rviû * $£rviû_ü—‹ ( g©t_db_©Œibu‹ * ©Œ , 1093  btd_g©t_þ›Á * þ›Á ) 1095  £rviû *service; 1096 cÚ¡ * deviû_·th = `deviû_g‘_·th ( þ›Á -> deviû ); 1097 bt_uuid_t uuid ; 1099 £rviû = `Ãw0 (service, 1); 1100 ià(! £rviû ) 1101  NULL ; 1103 £rviû -> chrcs = `queue_Ãw (); 1104 ià(! £rviû -> chrcs ) { 1105 `ä“ ( £rviû ); 1106  NULL ; 1109 £rviû -> þ›Á = client; 1111 `g©t_db_©Œibu‹_g‘_£rviû_d©a ( ©Œ , & £rviû -> ¡¬t_hªdË , 1112 & £rviû -> ’d_hªdË , 1113 & £rviû -> ´im¬y , 1114 & uuid ); 1115 `bt_uuid_to_uuid128 (& uuid , & £rviû ->uuid); 1117 £rviû -> ·th = `g_¡rdup_´štf ("%s/£rviû%04x", deviû_·th , 1118 £rviû -> ¡¬t_hªdË ); 1120 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), £rviû -> ·th , 1121 GATT_SERVICE_IFACE , 1122 NULL , NULL, 1123 £rviû_´Ý”t›s , 1124 £rviû , £rviû_ä“ )) { 1125 `”rÜ ("Unableo„egister GATT service with handle 0x%04x for " 1127 £rviû -> ¡¬t_hªdË , 1128 þ›Á -> devaddr ); 1129 `£rviû_ä“ ( £rviû ); 1131  NULL ; 1134 `DBG ("ExpÜ‹d GATT s”viû: %s", £rviû -> ·th ); 1136  £rviû ; 1137 } } 1139  $uÄegi¡”_£rviû (* d©a ) 1141  £rviû *£rviû = d©a ; 1143 `DBG ("Removšg GATT s”viû: %s", £rviû -> ·th ); 1145 `queue_»move_®l ( £rviû -> chrcs , NULL , NULL, uÄegi¡”_ch¬aù”i¡ic ); 1147 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), £rviû -> ·th , 1148 GATT_SERVICE_IFACE ); 1149 } } 1151  sexpÜt_d©a { 1152 * mroÙ ; 1153 boÞ mçžed ; 1156  $expÜt_desc ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 1158  desütÜ * desc ; 1159  expÜt_d©a * d©a = u£r_d©a ; 1160  ch¬aù”i¡ic * ch¬ac = d©a -> roÙ ; 1162 ià( d©a -> çžed ) 1165 desc = `desütÜ_ü—‹ ( ©Œ , ch¬ac ); 1166 ià(! desc ) { 1167 d©a -> çžed = Œue ; 1171 `queue_push_ž ( ch¬ac -> descs , desc ); 1172 } } 1174  boÞ $ü—‹_desütÜs ( g©t_db_©Œibu‹ * ©Œ , 1175  ch¬aù”i¡ic * ch¬ac ) 1177  expÜt_d©a d©a ; 1179 d©a . roÙ = ch¬ac ; 1180 d©a . çžed = çl£ ; 1182 `g©t_db_£rviû_fÜ—ch_desc ( ©Œ , expÜt_desc , & d©a ); 1184  ! d©a . çžed ; 1185 } } 1187  $expÜt_ch¬ ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 1189  ch¬aù”i¡ic * ch¬ac ; 1190  expÜt_d©a * d©a = u£r_d©a ; 1191  £rviû *£rviû = d©a -> roÙ ; 1193 ià( d©a -> çžed ) 1196 ch¬ac = `ch¬aù”i¡ic_ü—‹ ( ©Œ , £rviû ); 1197 ià(! ch¬ac ) 1198  çž ; 1200 ià(! `ü—‹_desütÜs ( ©Œ , ch¬ac )) { 1201 `uÄegi¡”_ch¬aù”i¡ic ( ch¬ac ); 1202  çž ; 1205 `queue_push_ž ( £rviû -> chrcs , ch¬ac ); 1209 çž : 1210 d©a -> çžed = Œue ; 1211 } } 1213  boÞ $ü—‹_ch¬aù”i¡ics ( g©t_db_©Œibu‹ * ©Œ , 1214  £rviû *service) 1216  expÜt_d©a d©a ; 1218 d©a . roÙ = £rviû ; 1219 d©a . çžed = çl£ ; 1221 `g©t_db_£rviû_fÜ—ch_ch¬ ( ©Œ , expÜt_ch¬ , & d©a ); 1223  ! d©a . çžed ; 1224 } } 1226  $nÙify_chrcs (* d©a , * u£r_d©a ) 1228  £rviû *£rviû = d©a ; 1230 £rviû -> chrcs_»ady = Œue ; 1232 `g_dbus_em™_´Ý”ty_chªged ( `btd_g‘_dbus_cÚÃùiÚ (), £rviû -> ·th , 1233 GATT_SERVICE_IFACE , 1235 } } 1237  gboÞ—n $£t_chrcs_»ady ( gpoš‹r u£r_d©a ) 1239  btd_g©t_þ›Á * þ›Á = u£r_d©a ; 1241 ià(! þ›Á -> g©t ) 1242  FALSE ; 1244 `queue_fÜ—ch ( þ›Á -> £rviûs , nÙify_chrcs , NULL ); 1246  FALSE ; 1247 } } 1249  $expÜt_£rviû ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 1251  btd_g©t_þ›Á * þ›Á = u£r_d©a ; 1252  £rviû *service; 1254 £rviû = `£rviû_ü—‹ ( ©Œ , þ›Á ); 1255 ià(! £rviû ) 1258 ià(! `ü—‹_ch¬aù”i¡ics ( ©Œ , £rviû )) { 1259 `”rÜ ("Exporting characteristics failed"); 1260 `uÄegi¡”_£rviû ( £rviû ); 1264 `queue_push_ž ( þ›Á -> £rviûs , £rviû ); 1265 } } 1267  $ü—‹_£rviûs ( btd_g©t_þ›Á * þ›Á ) 1269 `DBG ("ExpÜtšg objeù fÜ GATT s”viûs: %s", þ›Á -> devaddr ); 1271 `g©t_db_fÜ—ch_£rviû ( þ›Á -> db , NULL , expÜt_£rviû , client); 1278 `g_idË_add ( £t_chrcs_»ady , þ›Á ); 1279 } } 1281  btd_g©t_þ›Á * $btd_g©t_þ›Á_Ãw ( btd_deviû * deviû ) 1283  btd_g©t_þ›Á * þ›Á ; 1284  g©t_db * db ; 1286 ià(! deviû ) 1287  NULL ; 1289 db = `btd_deviû_g‘_g©t_db ( deviû ); 1290 ià(! db ) 1291  NULL ; 1293 þ›Á = `Ãw0 ( btd_g©t_þ›Á , 1); 1294 ià(! þ›Á ) 1295  NULL ; 1297 þ›Á -> £rviûs = `queue_Ãw (); 1298 ià(! þ›Á -> £rviûs ) { 1299 `ä“ ( þ›Á ); 1300  NULL ; 1303 þ›Á -> deviû = device; 1304 `ba2¡r ( `deviû_g‘_add»ss ( deviû ), þ›Á -> devaddr ); 1306 þ›Á -> db = `g©t_db_»f (db); 1308  þ›Á ; 1309 } } 1311  $btd_g©t_þ›Á_de¡roy ( btd_g©t_þ›Á * þ›Á ) 1313 ià(! þ›Á ) 1316 `queue_de¡roy ( þ›Á -> £rviûs , uÄegi¡”_£rviû ); 1317 `bt_g©t_þ›Á_uÄef ( þ›Á -> g©t ); 1318 `g©t_db_uÄef ( þ›Á -> db ); 1319 `ä“ ( þ›Á ); 1320 } } 1322  $btd_g©t_þ›Á_»ady ( btd_g©t_þ›Á * þ›Á ) 1324  bt_g©t_þ›Á * g©t ; 1326 ià(! þ›Á ) 1329 g©t = `btd_deviû_g‘_g©t_þ›Á ( þ›Á -> deviû ); 1330 ià(! g©t ) { 1331 `”rÜ ("GATT client‚ot initialized"); 1335 `bt_g©t_þ›Á_uÄef ( þ›Á -> g©t ); 1336 þ›Á -> g©t = `bt_g©t_þ›Á_»f (gatt); 1338 `ü—‹_£rviûs ( þ›Á ); 1339 } } 1341  $btd_g©t_þ›Á_£rviû_added ( btd_g©t_þ›Á * þ›Á , 1342  g©t_db_©Œibu‹ * ©Œib ) 1345 } } 1347  $btd_g©t_þ›Á_£rviû_»moved ( btd_g©t_þ›Á * þ›Á , 1348  g©t_db_©Œibu‹ * ©Œib ) 1351 } } 1353  $btd_g©t_þ›Á_discÚÃùed ( btd_g©t_þ›Á * þ›Á ) 1355 ià(! þ›Á ) 1358 `DBG ("Device disconnected. Cleaning up"); 1364 `queue_»move_®l ( þ›Á -> £rviûs , NULL , NULL, uÄegi¡”_£rviû ); 1366 `bt_g©t_þ›Á_uÄef ( þ›Á -> g©t ); 1367 þ›Á -> g©t = NULL ; 1368 } } @src/gatt-client.h 20  gbtd_g©t_þ›Á ; 22  btd_g©t_þ›Á * btd_g©t_þ›Á_Ãw ( btd_deviû * deviû ); 23  btd_g©t_þ›Á_de¡roy ( btd_g©t_þ›Á * þ›Á ); 25  btd_g©t_þ›Á_»ady ( btd_g©t_þ›Á * þ›Á ); 26  btd_g©t_þ›Á_£rviû_added ( btd_g©t_þ›Á * þ›Á , 27  g©t_db_©Œibu‹ * ©Œib ); 28  btd_g©t_þ›Á_£rviû_»moved ( btd_g©t_þ›Á * þ›Á , 29  g©t_db_©Œibu‹ * ©Œib ); 30  btd_g©t_þ›Á_discÚÃùed ( btd_g©t_þ›Á * þ›Á ); @src/gatt-dbus.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dšt.h > 29  ~<”ºo.h > 31  ~ 32  ~ 33  ~ 35  ~"ad­‹r.h " 36  ~"deviû.h " 37  ~"lib/uuid.h " 38  ~"dbus-commÚ.h " 39  ~"log.h " 41  ~"”rÜ.h " 42  ~"©Œib/g©Œib.h " 43  ~"©Œib/©t.h " 44  ~"©Œib/g©t.h " 45  ~"g©t.h " 46  ~"g©t-dbus.h " 48  #GATT_MGR_IFACE "Üg.bluez.G©tMªag”1" ) 49  #GATT_SERVICE_IFACE "Üg.bluez.G©tS”viû1" ) 50  #GATT_CHR_IFACE "Üg.bluez.G©tCh¬aù”i¡ic1" ) 51  #GATT_DESCRIPTOR_IFACE "Üg.bluez.G©tDesütÜ1" ) 53  sex‹º®_£rviû { 54 * mowÃr ; 55 * m·th ; 56 DBusMes§ge * m»g ; 57 GDBusCl›Á * mþ›Á ; 58 GSLi¡ * m´ox›s ; 59  btd_©Œibu‹ * m£rviû ; 62  s´oxy_wr™e_d©a { 63 btd_©Œ_wr™e_»suÉ_t m»suÉ_cb ; 64 * mu£r_d©a ; 71  GHashTabË * g´oxy_hash ; 73  DBusMes§ge * g‘_£rviû ( DBusCÚÃùiÚ * cÚn , 74 DBusMes§ge * msg , * u£r_d©a ); 76  GSLi¡ * gex‹º®_£rviûs ; 78  $ex‹º®_£rviû_·th_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 80 cÚ¡  ex‹º®_£rviû * esvc = a ; 81 cÚ¡ * ·th = b ; 83  `g_¡rcmp0 ( esvc -> ·th ,…ath); 84 } } 86  gboÞ—n $ex‹º®_£rviû_de¡roy (* u£r_d©a ) 88  ex‹º®_£rviû * esvc = u£r_d©a ; 90 `g_dbus_þ›Á_uÄef ( esvc -> þ›Á ); 92 ià( esvc -> »g ) 93 `dbus_mes§ge_uÄef ( esvc -> »g ); 95 `g_ä“ ( esvc -> owÃr ); 96 `g_ä“ ( esvc -> ·th ); 97 `g_ä“ ( esvc ); 99  FALSE ; 100 } } 102  $ex‹º®_£rviû_ä“ (* u£r_d©a ) 104  ex‹º®_£rviû * esvc = u£r_d©a ; 110 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( esvc -> þ›Á , NULL , NULL); 112 `ex‹º®_£rviû_de¡roy ( u£r_d©a ); 113 } } 115  $»move_£rviû ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 117  ex‹º®_£rviû * esvc = u£r_d©a ; 119 ex‹º®_£rviûs = `g_¦i¡_»move Óx‹º®_£rviûs, esvc ); 121 ià( esvc -> £rviû ) 122 `btd_g©t_»move_£rviû ( esvc -> £rviû ); 128 `g_idË_add ( ex‹º®_£rviû_de¡roy , esvc ); 129 } } 131  $´oxy_·th_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 133 GDBusProxy * ´oxy1 = (GDBusProxy *è a ; 134 GDBusProxy * ´oxy2 = (GDBusProxy *è b ; 135 cÚ¡ * ·th1 = `g_dbus_´oxy_g‘_·th ( ´oxy1 ); 136 cÚ¡ * ·th2 = `g_dbus_´oxy_g‘_·th ( ´oxy2 ); 138  `g_¡rcmp0 ( ·th1 , ·th2 ); 139 } } 141  ušt8_t $æags_¡ršg2št (cÚ¡ * ´Ý” ) 143 ušt8_t v®ue ; 146 ià(! `¡rcmp ("brßdÿ¡", ´Ý” )) 147 v®ue = GATT_CHR_PROP_BROADCAST ; 148 ià(! `¡rcmp ("»ad", ´Ý” )) 149 v®ue = GATT_CHR_PROP_READ ; 150 ià(! `¡rcmp ("wr™e-w™hout-»¥Ú£", ´Ý” )) 151 v®ue = GATT_CHR_PROP_WRITE_WITHOUT_RESP ; 152 ià(! `¡rcmp ("wr™e", ´Ý” )) 153 v®ue = GATT_CHR_PROP_WRITE ; 154 ià(! `¡rcmp ("nÙify", ´Ý” )) 155 v®ue = GATT_CHR_PROP_NOTIFY ; 156 ià(! `¡rcmp ("šdiÿ‹", ´Ý” )) 157 v®ue = GATT_CHR_PROP_INDICATE ; 158 ià(! `¡rcmp ("auth’tiÿ‹d-sigÃd-wr™es", ´Ý” )) 159 v®ue = GATT_CHR_PROP_AUTH ; 161 v®ue = 0; 165  v®ue ; 166 } } 168  ušt8_t $æags_g‘_b™mask ( DBusMes§geI‹r * ™” ) 170 DBusMes§geI‹r i¡r ; 171 ušt8_t ´Ýmask = 0, ´Ý ; 172 cÚ¡ * ¡r ; 174 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY ) 175  çž ; 177 `dbus_mes§ge_™”_»cur£ ( ™” , & i¡r ); 180 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& i¡r è!ð DBUS_TYPE_STRING ) 181  çž ; 183 `dbus_mes§ge_™”_g‘_basic (& i¡r , & ¡r ); 184 ´Ý = `æags_¡ršg2št ( ¡r ); 185 ià(! ´Ý ) 186  çž ; 188 ´Ýmask |ð ´Ý ; 189 }  `dbus_mes§ge_™”_Ãxt (& i¡r )); 191  ´Ýmask ; 193 çž : 194 `”rÜ ("Characteristic Flags: Invalid‡rgument!"); 197 } } 199  $´oxy_added ( GDBusProxy * ´oxy , * u£r_d©a ) 201  ex‹º®_£rviû * esvc = u£r_d©a ; 202 cÚ¡ * š‹rçû , * ·th ; 204 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 205 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 207 ià(! `g_¡r_has_´efix ( ·th , esvc ->path)) 210 ià( `g_¡rcmp0 ( š‹rçû , GATT_CHR_IFACE ) != 0 && 211 `g_¡rcmp0 ( š‹rçû , GATT_SERVICE_IFACE ) != 0 && 212 `g_¡rcmp0 ( š‹rçû , GATT_DESCRIPTOR_IFACE ) != 0) 215 `DBG ("·th % içû %s", ·th , š‹rçû ); 222 esvc -> ´ox›s = `g_¦i¡_š£¹_sÜ‹d Ósvc->´ox›s, ´oxy , 223 ´oxy_·th_cmp ); 224 } } 226  $´oxy_»moved ( GDBusProxy * ´oxy , * u£r_d©a ) 228  ex‹º®_£rviû * esvc = u£r_d©a ; 229 cÚ¡ * š‹rçû , * ·th ; 231 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 232 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 234 `DBG ("·th % içû %s", ·th , š‹rçû ); 236 esvc -> ´ox›s = `g_¦i¡_»move Ósvc->´ox›s, ´oxy ); 237 } } 239 #ifdeà __TIZEN_PATCH__ 240  $´oxy_´Ý_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 241 DBusMes§geI‹r * ™” , * u£r_d©a ) 243 DBusMes§geI‹r ™”_uuid , ¬¿y ; 244 cÚ¡ * ¡r ; 245 bt_uuid_t uuid ; 246 ušt8_t * v®ue ; 247 size_t Ën ; 249 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY ) 252 `dbus_mes§ge_™”_»cur£ ( ™” , & ¬¿y ); 253 `dbus_mes§ge_™”_g‘_fixed_¬¿y (& ¬¿y , & v®ue , & Ën ); 255 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "UUID", & ™”_uuid )) 258 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™”_uuid è!ð DBUS_TYPE_STRING ) 261 `dbus_mes§ge_™”_g‘_basic (& ™”_uuid , & ¡r ); 263 ià( `bt_¡ršg_to_uuid (& uuid , ¡r ) < 0) 268 `btd_g©t_upd©e_ch¬ (& uuid , v®ue , Ën ); 269 } } 272 #ifdeà __TIZEN_PATCH__ 273  ušt8_t $´oxy_»ad_cb ( btd_©Œibu‹ * ©Œ , 274 btd_©Œ_»ad_»suÉ_t »suÉ , * u£r_d©a ) 276  $´oxy_»ad_cb ( btd_©Œibu‹ * ©Œ , 277 btd_©Œ_»ad_»suÉ_t »suÉ , * u£r_d©a ) 280 DBusMes§geI‹r ™” , ¬¿y ; 281 GDBusProxy * ´oxy ; 282 ušt8_t * v®ue ; 283  Ën ; 291 ´oxy = `g_hash_bË_lookup ( ´oxy_hash , ©Œ ); 292 ià(! ´oxy ) { 293 #ifdeà __TIZEN_PATCH__ 294  `»suÉ (- ENOENT , NULL , 0, u£r_d©a ); 296 `»suÉ (- ENOENT , NULL , 0, u£r_d©a ); 301 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "V®ue", & ™” )) { 303 #ifdeà __TIZEN_PATCH__ 304  `»suÉ (- EPERM , NULL , 0, u£r_d©a ); 306 `»suÉ (- EPERM , NULL , 0, u£r_d©a ); 311 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_ARRAY ) { 312 `DBG ("External service inconsistent!"); 313 #ifdeà __TIZEN_PATCH__ 314  `»suÉ (- EPERM , NULL , 0, u£r_d©a ); 316 `»suÉ (- EPERM , NULL , 0, u£r_d©a ); 321 `dbus_mes§ge_™”_»cur£ (& ™” , & ¬¿y ); 322 `dbus_mes§ge_™”_g‘_fixed_¬¿y (& ¬¿y , & v®ue , & Ën ); 324 `DBG ("©Œibu‹: %°»ad %d by‹s", ©Œ , Ën ); 326 #ifdeà __TIZEN_PATCH__ 327  `»suÉ (0, v®ue , Ën , u£r_d©a ); 329 `»suÉ (0, v®ue , Ën , u£r_d©a ); 331 } } 333  $´oxy_wr™e_»¶y (cÚ¡ DBusE¼Ü * d”r , * u£r_d©a ) 335  ´oxy_wr™e_d©a * wd©a = u£r_d©a ; 336  ”r ; 344 ià(! `dbus_”rÜ_is_£t ( d”r )) { 345 ”r = 0; 346  dÚe ; 349 `DBG ("Wr™»¶y: %s", d”r -> mes§ge ); 351 ià( `dbus_”rÜ_has_Çme ( d”r , DBUS_ERROR_NO_REPLY )) 352 ”r = - ETIMEDOUT ; 353 ià( `dbus_”rÜ_has_Çme ( d”r , ERROR_INTERFACE ".InvalidArguments")) 354 ”r = - EINVAL ; 356 ”r = - EPROTO ; 358 dÚe : 359 ià( wd©a && wd©a-> »suÉ_cb ) 360 wd©a -> `»suÉ_cb ( ”r , wd©a-> u£r_d©a ); 361 } } 363 #ifdeà __TIZEN_PATCH__ 364  ušt8_t $´oxy_wr™e_cb ( btd_©Œibu‹ * ©Œ , 365 cÚ¡ ušt8_t * v®ue , size_t Ën , 366 btd_©Œ_wr™e_»suÉ_t »suÉ , 367 * u£r_d©a ) 369  $´oxy_wr™e_cb ( btd_©Œibu‹ * ©Œ , 370 cÚ¡ ušt8_t * v®ue , size_t Ën , 371 btd_©Œ_wr™e_»suÉ_t »suÉ , 372 * u£r_d©a ) 375 GDBusProxy * ´oxy ; 377 ´oxy = `g_hash_bË_lookup ( ´oxy_hash , ©Œ ); 378 ià(! ´oxy ) { 379 #ifdeà __TIZEN_PATCH__ 380  `»suÉ (- ENOENT , u£r_d©a ); 382 `»suÉ (- ENOENT , u£r_d©a ); 396 ià( »suÉ ) { 397  ´oxy_wr™e_d©a * wd©a ; 399 wd©a = `g_Ãw0 ( ´oxy_wr™e_d©a , 1); 400 wd©a -> »suÉ_cb = »suÉ ; 401 wd©a -> u£r_d©a = user_data; 403 #ifdeà __TIZEN_PATCH__ 404 `btd_g©t_£t_nÙify_šdiÿ‹_æag ( ©Œ , FALSE ); 407 ià(! `g_dbus_´oxy_£t_´Ý”ty_¬¿y ( ´oxy , "Value", 408 DBUS_TYPE_BYTE , v®ue , Ën , 409 ´oxy_wr™e_»¶y , 410 wd©a , g_ä“ )) { 411 `g_ä“ ( wd©a ); 412 #ifdeà __TIZEN_PATCH__ 413  `»suÉ (- ENOENT , u£r_d©a ); 415 `»suÉ (- ENOENT , u£r_d©a ); 425 #ifdeà __TIZEN_PATCH__ 426 `btd_g©t_£t_nÙify_šdiÿ‹_æag ( ©Œ , FALSE ); 428 `g_dbus_´oxy_£t_´Ý”ty_¬¿y ( ´oxy , "V®ue", DBUS_TYPE_BYTE , 429 v®ue , Ën , ´oxy_wr™e_»¶y , 430 NULL , NULL); 433 `DBG ("Server: Write‡ttribute callback %s", 434 `g_dbus_´oxy_g‘_·th ( ´oxy )); 435 #ifdeà __TIZEN_PATCH__ 439 } } 441  $»gi¡”_ex‹º®_£rviû ( ex‹º®_£rviû * esvc , 442 GDBusProxy * ´oxy ) 444 DBusMes§geI‹r ™” ; 445 cÚ¡ * ¡r , * ·th , * içû ; 446 bt_uuid_t uuid ; 448 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 449 içû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 450 ià( `g_¡rcmp0 ( esvc -> ·th ,…ath) != 0 || 451 `g_¡rcmp0 ( içû , GATT_SERVICE_IFACE ) != 0) 452  - EINVAL ; 454 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "UUID", & ™” )) 455  - EINVAL ; 457 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_STRING ) 458  - EINVAL ; 460 `dbus_mes§ge_™”_g‘_basic (& ™” , & ¡r ); 462 ià( `bt_¡ršg_to_uuid (& uuid , ¡r ) < 0) 463  - EINVAL ; 465 #ifdeà __TIZEN_PATCH__ 466 esvc -> £rviû = `btd_g©t_add_£rviû (& uuid , ·th ); 468 esvc -> £rviû = `btd_g©t_add_£rviû (& uuid ); 470 ià(! esvc -> £rviû ) 471  - EINVAL ; 474 } } 476  $add_ch¬ ( GDBusProxy * ´oxy , cÚ¡ bt_uuid_t * uuid ) 478 DBusMes§geI‹r ™” ; 479  btd_©Œibu‹ * ©Œ ; 480 btd_©Œ_wr™e_t wr™e_cb ; 481 btd_©Œ_»ad_t »ad_cb ; 482 ušt8_t ´Ýmask = 0; 483 #ifdeà __TIZEN_PATCH__ 484 cÚ¡ * ·th ; 492 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "FÏgs", & ™” )) 493 ´Ýmask = `æags_g‘_b™mask (& ™” ); 495 ´Ýmask = GATT_CHR_PROP_WRITE_WITHOUT_RESP 496 | GATT_CHR_PROP_WRITE 497 | GATT_CHR_PROP_READ ; 498 ià(! ´Ýmask ) 499  - EINVAL ; 501 ià( ´Ýmask & GATT_CHR_PROP_READ ) 502 »ad_cb = ´oxy_»ad_cb ; 504 »ad_cb = NULL ; 506 ià( ´Ýmask & ( GATT_CHR_PROP_WRITE | GATT_CHR_PROP_WRITE_WITHOUT_RESP )) 507 wr™e_cb = ´oxy_wr™e_cb ; 509 wr™e_cb = NULL ; 511 #ifdeà __TIZEN_PATCH__ 512 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 513 ©Œ = `btd_g©t_add_ch¬ ( uuid , ´Ýmask , ·th , »ad_cb , wr™e_cb ); 515 ©Œ = `btd_g©t_add_ch¬ ( uuid , ´Ýmask , »ad_cb , wr™e_cb ); 517 ià(! ©Œ ) 518  - ENOMEM ; 520 `g_hash_bË_š£¹ ( ´oxy_hash , ©Œ , `g_dbus_´oxy_»f ( ´oxy )); 523 } } 525  $add_ch¬_desc ( GDBusProxy * ´oxy , cÚ¡ bt_uuid_t * uuid ) 527  btd_©Œibu‹ * ©Œ ; 528 #ifdeà __TIZEN_PATCH__ 529 cÚ¡ * ·th ; 532 #ifdeà __TIZEN_PATCH__ 533 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 534 ©Œ = `btd_g©t_add_ch¬_desc ( uuid , ·th , ´oxy_»ad_cb , ´oxy_wr™e_cb ); 536 ©Œ = `btd_g©t_add_ch¬_desc ( uuid , ´oxy_»ad_cb , ´oxy_wr™e_cb ); 538 ià(! ©Œ ) 539  - ENOMEM ; 541 `g_hash_bË_š£¹ ( ´oxy_hash , ©Œ , `g_dbus_´oxy_»f ( ´oxy )); 544 } } 546  $»gi¡”_ex‹º®_ch¬aù”i¡ics ( GSLi¡ * ´ox›s ) 549 GSLi¡ * li¡ ; 551  li¡ = ´ox›s ;†i¡;†i¡ = `g_¦i¡_Ãxt (list)) { 552 GDBusProxy * ´oxy = li¡ -> d©a ; 553 DBusMes§geI‹r ™” ; 554 bt_uuid_t uuid ; 555 cÚ¡ * ·th , * içû , * ¡r ; 556  »t ; 559 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "UUID", & ™” )) 560  - EINVAL ; 562 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_STRING ) 563  - EINVAL ; 565 `dbus_mes§ge_™”_g‘_basic (& ™” , & ¡r ); 567 ià( `bt_¡ršg_to_uuid (& uuid , ¡r ) < 0) 568  - EINVAL ; 570 içû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 571 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 573 ià(! `¡rcmp ( GATT_CHR_IFACE , içû )) 574 »t = `add_ch¬ ( ´oxy , & uuid ); 576 »t = `add_ch¬_desc ( ´oxy , & uuid ); 578 ià( »t < 0) 579  »t ; 581 `DBG ("Added GATT: % (%s)", ·th , ¡r ); 585 } } 587  $þ›Á_»ady ( GDBusCl›Á * þ›Á , * u£r_d©a ) 589  ex‹º®_£rviû * esvc = u£r_d©a ; 590 GDBusProxy * ´oxy ; 591 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 592 DBusMes§ge * »¶y ; 594 ià(! esvc -> ´ox›s ) 595  çž ; 597 ´oxy = esvc -> ´ox›s -> d©a ; 598 ià( `»gi¡”_ex‹º®_£rviû ( esvc , ´oxy ) < 0) 599  çž ; 601 ià( `»gi¡”_ex‹º®_ch¬aù”i¡ics ( `g_¦i¡_Ãxt ( esvc -> ´ox›s )) < 0) 602  çž ; 604 `DBG ("Added GATT s”viû %s", esvc -> ·th ); 606 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( esvc -> »g ); 607 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 609 `dbus_mes§ge_uÄef ( esvc -> »g ); 610 esvc -> »g = NULL ; 611 #ifdeà __TIZEN_PATCH__ 612 `btd_g©t_upd©e_©Œ_db (); 617 çž : 618 `”rÜ ("Could‚Ù„egi¡”ƒx‹º® s”viû: %s", esvc -> ·th ); 624 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( esvc -> þ›Á , NULL , NULL); 626 `»move_£rviû ( cÚn , esvc ); 628 »¶y = `btd_”rÜ_šv®id_¬gs ( esvc -> »g ); 629 `g_dbus_£nd_mes§ge ( cÚn , »¶y ); 630 } } 632  ex‹º®_£rviû * $ex‹º®_£rviû_Ãw ( DBusCÚÃùiÚ * cÚn , 633 DBusMes§ge * msg , cÚ¡ * ·th ) 635  ex‹º®_£rviû * esvc ; 636 GDBusCl›Á * þ›Á ; 637 cÚ¡ * £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 639 þ›Á = `g_dbus_þ›Á_Ãw ( cÚn , £nd” , "/"); 640 ià(! þ›Á ) 641  NULL ; 643 esvc = `g_Ãw0 ( ex‹º®_£rviû , 1); 644 esvc -> owÃr = `g_¡rdup ( £nd” ); 645 esvc -> »g = `dbus_mes§ge_»f ( msg ); 646 esvc -> þ›Á = client; 647 esvc -> ·th = `g_¡rdup (path); 649 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( þ›Á , »move_£rviû , esvc ); 651 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( þ›Á , ´oxy_added , ´oxy_»moved , 652 #ifdeà __TIZEN_PATCH__ 653 ´oxy_´Ý_chªged , esvc ); 655 NULL , esvc ); 658 `g_dbus_þ›Á_£t_»ady_w©ch ( þ›Á , þ›Á_»ady , esvc ); 660  esvc ; 661 } } 663 #ifdeà __TIZEN_PATCH__ 664  DBusMes§ge * $g‘_£rviû ( DBusCÚÃùiÚ * cÚn , 665 DBusMes§ge * msg , * u£r_d©a ) 667 * uuid_¡r = NULL ; 668 bt_uuid_t uuid ; 669 * ·th = NULL ; 670 DBusMes§ge * »¶y = NULL ; 672 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_STRING , & uuid_¡r , 673 DBUS_TYPE_INVALID )) 674  `btd_”rÜ_šv®id_¬gs ( msg ); 676 ià( `bt_¡ršg_to_uuid (& uuid , uuid_¡r ) < 0) 677  `btd_”rÜ_šv®id_¬gs ( msg ); 679 ·th = `btd_g‘_£rviû_·th ( uuid ); 680 ià( ·th ) 681 »¶y = `£rviû_­³nd_diù ( uuid , msg ); 683 »¶y = `btd_”rÜ_çžed ( msg , "Service Not Registered"); 685  »¶y ; 686 } } 689  DBusMes§ge * $»gi¡”_£rviû ( DBusCÚÃùiÚ * cÚn , 690 DBusMes§ge * msg , * u£r_d©a ) 692  ex‹º®_£rviû * esvc ; 693 DBusMes§geI‹r ™” ; 694 cÚ¡ * ·th ; 696 ià(! `dbus_mes§ge_™”_š™ ( msg , & ™” )) 697  `btd_”rÜ_šv®id_¬gs ( msg ); 699 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_OBJECT_PATH ) 700  `btd_”rÜ_šv®id_¬gs ( msg ); 702 `dbus_mes§ge_™”_g‘_basic (& ™” , & ·th ); 704 ià( `g_¦i¡_fšd_cu¡om ( ex‹º®_£rviûs , ·th , 705 ex‹º®_£rviû_·th_cmp )) 706  `btd_”rÜ_®»ady_exi¡s ( msg ); 708 esvc = `ex‹º®_£rviû_Ãw ( cÚn , msg , ·th ); 709 ià(! esvc ) 710  `btd_”rÜ_çžed ( msg , "Notƒnough„esources"); 712 ex‹º®_£rviûs = `g_¦i¡_´•’d Óx‹º®_£rviûs, esvc ); 714 `DBG ("New s”viû %p: %s", esvc , ·th ); 716  NULL ; 717 } } 719  DBusMes§ge * $uÄegi¡”_£rviû ( DBusCÚÃùiÚ * cÚn , 720 DBusMes§ge * msg , * u£r_d©a ) 722  ex‹º®_£rviû * esvc ; 723 DBusMes§geI‹r ™” ; 724 cÚ¡ * ·th ; 725 GSLi¡ * li¡ ; 727 ià(! `dbus_mes§ge_™”_š™ ( msg , & ™” )) 728  `btd_”rÜ_šv®id_¬gs ( msg ); 730 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_OBJECT_PATH ) 731  `btd_”rÜ_šv®id_¬gs ( msg ); 733 `dbus_mes§ge_™”_g‘_basic (& ™” , & ·th ); 735 li¡ = `g_¦i¡_fšd_cu¡om ( ex‹º®_£rviûs , ·th , 736 ex‹º®_£rviû_·th_cmp ); 737 ià(! li¡ ) 738  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 740 esvc = li¡ -> d©a ; 742 #ifdeà __TIZEN_PATCH__ 743 ià( `¡rcmp ( `dbus_mes§ge_g‘_£nd” ( msg ), esvc -> owÃr )) 745 ià(! `¡rcmp ( `dbus_mes§ge_g‘_£nd” ( msg ), esvc -> owÃr )) 747  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 753 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( esvc -> þ›Á , NULL , NULL); 755 `»move_£rviû ( cÚn , esvc ); 757  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 758 } } 760 cÚ¡ GDBusM‘hodTabË gm‘hods [] = { 761 #ifdeà __TIZEN_PATCH__ 762 { GDBUS_ASYNC_METHOD ("RegisterService", 764 { GDBUS_EXPERIMENTAL_ASYNC_METHOD ("RegisterService", 766 GDBUS_ARGS ({ "service", "o"}, 768 NULL , »gi¡”_£rviû ) }, 769 #ifdeà __TIZEN_PATCH__ 770 { GDBUS_METHOD ("UnregisterService", 772 { GDBUS_EXPERIMENTAL_METHOD ("UnregisterService", 774 GDBUS_ARGS ({"service", "o"}), 775 NULL , uÄegi¡”_£rviû ) }, 776 #ifdeà __TIZEN_PATCH__ 777 { GDBUS_METHOD ("GetService", 779 { GDBUS_EXPERIMENTAL_METHOD ("GetService", 781 GDBUS_ARGS ({ "uuid", "s"}), 782 GDBUS_ARGS ({ "service", "a{sv}"}) 783 , g‘_£rviû ) }, 787 gboÞ—n $g©t_dbus_mªag”_»gi¡” () 789 ià(! `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 790 "/Üg/bluez", GATT_MGR_IFACE , 791 m‘hods , NULL , NULL, NULL, NULL)) 792  FALSE ; 794 ´oxy_hash = `g_hash_bË_Ãw_fuÎ ( g_dœeù_hash , g_dœeù_equ® , 795 NULL , ( GDe¡royNÙify è g_dbus_´oxy_uÄef ); 797  TRUE ; 798 } } 800  $g©t_dbus_mªag”_uÄegi¡” () 805 ià(! ´oxy_hash ) 808 `g_hash_bË_de¡roy ( ´oxy_hash ); 809 ´oxy_hash = NULL ; 811 `g_¦i¡_ä“_fuÎ ( ex‹º®_£rviûs , ex‹º®_£rviû_ä“ ); 813 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), "/org/bluez", 814 GATT_MGR_IFACE ); 815 } } @src/gatt-dbus.h 24 gboÞ—n g©t_dbus_mªag”_»gi¡” (); 25  g©t_dbus_mªag”_uÄegi¡” (); @src/gatt.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~<¡dboÞ.h > 30 #ifdeà __TIZEN_PATCH__ 31  ~<”ºo.h > 32  ~ 33  ~ 36  ~"log.h " 37  ~"lib/uuid.h " 38  ~"©Œib/©t.h " 39  ~"¤c/sh¬ed/utž.h " 41  ~"g©t-dbus.h " 42  ~"g©t.h " 43 #ifdeà __TIZEN_PATCH__ 44  ~"ad­‹r.h " 45  ~"©Œib/g©t-£rviû.h " 46  ~"©Œib/©t-d©aba£.h " 47  ~"©Œib/g©Œib.h " 48  ~"©Œib/g©t.h " 49  ~"¤c/©Œib-£rv”.h " 50  ~"¤c/deviû.h " 54 cÚ¡ bt_uuid_t g´im¬y_uuid = { . ty³ = BT_UUID16 , 55 . gv®ue . gu16 = GATT_PRIM_SVC_UUID }; 57 cÚ¡ bt_uuid_t gchr_uuid = { . ty³ = BT_UUID16 , 58 . gv®ue . gu16 = GATT_CHARAC_UUID }; 59 #ifdeà __TIZEN_PATCH__ 61  #ATT_CHAR_READ_VALUE 0x01 ) 62  #ATT_CHAR_RD_WRT_CB 0x02 ) 63  #GATT_TYPE_PRIM_SVC 0x01 ) 64  #GATT_TYPE_CHARAC_SVC 0x02 ) 65  #GATT_TYPE_CHARAC_VALUE 0x03 ) 66  #GATT_TYPE_DESC_CCC 0x04 ) 67  #GATT_TYPE_DESC_USR 0x05 ) 70  sbtd_©Œibu‹ { 71 ušt16_t mhªdË ; 72 #ifdeà __TIZEN_PATCH__ 73 ušt16_t m©Œ_¡¬t_hªdË ; 74 ušt16_t m©Œ_’d_hªdË ; 75 boÞ mnÙify_šdiÿ‹ ; 76 * m·th ; 78 bt_uuid_t mty³ ; 79 btd_©Œ_»ad_t m»ad_cb ; 80 btd_©Œ_wr™e_t mwr™e_cb ; 81 ušt16_t mv®ue_Ën ; 82 ušt8_t mv®ue [0]; 85 #ifdeà __TIZEN_PATCH__ 86  s³ndšg_hndl { 87 ušt16_t mhªdË ; 88 ušt16_t mty³ ; 89  ³ndšg_hndl * mÃxt ; 92  ³ndšg_hndl * ghndl_li¡_h—d = NULL ; 93  ³ndšg_hndl * ghndl_li¡ = NULL ; 96  GLi¡ * gloÿl_©Œibu‹_db ; 97  ušt16_t gÃxt_hªdË = 0x0001; 99  šlše  $put_uuid_Ë (cÚ¡ bt_uuid_t * ¤c , * d¡ ) 101 ià( ¤c -> ty³ =ð BT_UUID16 ) 102 `put_Ë16 ( ¤c -> v®ue . u16 , d¡ ); 103 ià( ¤c -> ty³ =ð BT_UUID32 ) 104 `put_Ë32 ( ¤c -> v®ue . u32 , d¡ ); 107 `bsw­_128 (& ¤c -> v®ue . u128 , d¡ ); 108 } } 115  btd_©Œibu‹ * $Ãw_cÚ¡_©Œibu‹ (cÚ¡ bt_uuid_t * ty³ , 116 cÚ¡ ušt8_t * v®ue , 117 ušt16_t Ën ) 119  btd_©Œibu‹ * ©Œ ; 121 ©Œ = `m®loc0 (( btd_©Œibu‹ è+ Ën ); 122 ià(! ©Œ ) 123  NULL ; 125 ©Œ -> ty³ = *type; 126 `memýy (& ©Œ -> v®ue , v®ue, Ën ); 127 ©Œ -> v®ue_Ën = Ën ; 129  ©Œ ; 130 } } 132  btd_©Œibu‹ * $Ãw_©Œibu‹ (cÚ¡ bt_uuid_t * ty³ , 133 btd_©Œ_»ad_t »ad_cb , 134 btd_©Œ_wr™e_t wr™e_cb ) 136  btd_©Œibu‹ * ©Œ ; 138 ©Œ = `Ãw0 ( btd_©Œibu‹ , 1); 139 ià(! ©Œ ) 140  NULL ; 142 ©Œ -> ty³ = *type; 143 ©Œ -> »ad_cb =„ead_cb; 144 ©Œ -> wr™e_cb = write_cb; 145 #ifdeà __TIZEN_PATCH__ 146 ©Œ -> nÙify_šdiÿ‹ = TRUE ; 149  ©Œ ; 150 } } 152  boÞ $is_£rviû (cÚ¡  btd_©Œibu‹ * ©Œ ) 154 ià( ©Œ -> ty³ .ty³ !ð BT_UUID16 ) 155  çl£ ; 157 ià( ©Œ -> ty³ . v®ue . u16 =ð GATT_PRIM_SVC_UUID || 158 ©Œ -> ty³ . v®ue . u16 =ð GATT_SND_SVC_UUID ) 159  Œue ; 161  çl£ ; 162 } } 164  $loÿl_d©aba£_add ( ušt16_t hªdË ,  btd_©Œibu‹ * ©Œ ) 166 ©Œ -> hªdË = handle; 168 loÿl_©Œibu‹_db = `g_li¡_­³nd Öoÿl_©Œibu‹_db, ©Œ ); 171 } } 173 #ifdeà __TIZEN_PATCH__ 174  $©Œ_uuid_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 176 cÚ¡  btd_©Œibu‹ * ©Œib1 = a ; 177 cÚ¡ bt_uuid_t * uuid = b ; 179 ià( ©Œib1 -> ty³ . v®ue . u16 !ð GATT_PRIM_SVC_UUID ) { 180  `bt_uuid_cmp (& ©Œib1 -> ty³ , uuid ); 182 bt_uuid_t ´im_uuid ; 183 ´im_uuid = `©t_g‘_uuid ( ©Œib1 -> v®ue ,‡‰rib1-> v®ue_Ën ); 185  `bt_uuid_cmp (& ´im_uuid , uuid ); 187 } } 189  $hªdË_cmp ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 191 cÚ¡  btd_©Œibu‹ * ©Œib = a ; 192 ušt16_t hªdË = `GPOINTER_TO_UINT ( b ); 194  ©Œib -> hªdË - handle; 195 } } 197  $©Œibu‹_cmp ( gcÚ¡poš‹r a1 , gcÚ¡poš‹¸ a2 ) 199 cÚ¡  btd_©Œibu‹ * ©Œib1 = a1 ; 200 cÚ¡  btd_©Œibu‹ * ©Œib2 = a2 ; 202  ©Œib1 -> hªdË - ©Œib2 ->handle; 203 } } 205  $¡Üe_¡¬t_’d_hªdË ( bt_uuid_t * uuid , ušt16_t ¡¬t_hªdË , 206 ušt16_t ’d_hªdË ) 208 GLi¡ * l ; 209  btd_©Œibu‹ * ©Œib ; 211 l = `g_li¡_fšd_cu¡om ( loÿl_©Œibu‹_db , `GUINT_TO_POINTER ( uuid ), 212 ©Œ_uuid_cmp ); 214 ià(! l ) 217 ©Œib = l -> d©a ; 218 ©Œib -> ©Œ_¡¬t_hªdË = ¡¬t_hªdË ; 219 ©Œib -> ©Œ_’d_hªdË = ’d_hªdË ; 221 `g_li¡_š£¹_sÜ‹d ( loÿl_©Œibu‹_db , ©Œib , ©Œibu‹_cmp ); 224 } } 226  $g‘_¡¬t_’d_hªdË ( bt_uuid_t * uuid , ušt16_t * ¡¬t_hªdË , 227 ušt16_t * ’d_hªdË ) 229 GLi¡ * l ; 230  btd_©Œibu‹ * ©Œib ; 232 l = `g_li¡_fšd_cu¡om ( loÿl_©Œibu‹_db , `GUINT_TO_POINTER ( uuid ), 233 ©Œ_uuid_cmp ); 236 ià(! l ) 239 ©Œib = l -> d©a ; 240 * ¡¬t_hªdË = ©Œib -> ©Œ_¡¬t_hªdË ; 241 * ’d_hªdË = ©Œib -> ©Œ_’d_hªdË ; 242 } } 244  btd_©Œibu‹ * $fšd_loÿl_©Œ ( bt_uuid_t * uuid ) 246 GLi¡ * l ; 248 l = `g_li¡_fšd_cu¡om ( loÿl_©Œibu‹_db , 249 `GUINT_TO_POINTER ( uuid ), 250 ©Œ_uuid_cmp ); 252 ià(! l ) 253  NULL ; 255  l -> d©a ; 256 } } 258  ušt8_t $»ad_»suÉ ( ”r , ušt8_t * v®ue , size_t Ën , 259 * u£r_d©a ) 261  ©Œibu‹ * a = u£r_d©a ; 262  btd_ad­‹r * ad­‹r ; 263 ušt8_t ¡©us = 0; 265 ad­‹r = `btd_ad­‹r_g‘_deçuÉ (); 266 ià(! ad­‹r ) 267  FALSE ; 269 ià(! ”r ) 270 ¡©us = `©Œib_db_upd©e ( ad­‹r , a -> hªdË , 271 NULL , v®ue , Ën , NULL); 273  ”r ; 275  ¡©us ; 276 } } 278  ušt8_t $wr™e_»suÉ ( ”r , * u£r_d©a ) 280 `DBG (" "); 281  ”r ; 282 } } 284  ušt8_t $»ad_desc_©Œ_db_v®ue ( ©Œibu‹ * a , 285  btd_deviû * deviû , 286 gpoš‹r u£r_d©a ) 288  btd_©Œibu‹ * loÿl_©Œ ; 289 ušt8_t ¡©us = 0; 291 loÿl_©Œ = `fšd_loÿl_©Œ (& a -> uuid ); 292 ià( loÿl_©Œ &&†oÿl_©Œ-> »ad_cb ) { 293 ¡©us = loÿl_©Œ -> `»ad_cb Öoÿl_©Œ, »ad_»suÉ , a ); 295  - ENOENT ; 297  ¡©us ; 298 } } 300  ušt8_t $»ad_ch¬_©Œ_db_v®ue ( ©Œibu‹ * a , 301  btd_deviû * deviû , 302 gpoš‹r u£r_d©a ) 304  btd_©Œibu‹ * loÿl_©Œ ; 305 ušt8_t ¡©us = 0; 307 loÿl_©Œ = `fšd_loÿl_©Œ (& a -> uuid ); 308 ià( loÿl_©Œ &&†oÿl_©Œ-> »ad_cb ) { 309 ¡©us = loÿl_©Œ -> `»ad_cb Öoÿl_©Œ, »ad_»suÉ , a ); 311  - ENOENT ; 313  ¡©us ; 314 } } 316  ušt8_t $wr™e_ch¬_©Œ_db_v®ue ( ©Œibu‹ * a , 317  btd_deviû * deviû , 318 gpoš‹r u£r_d©a ) 320  btd_©Œibu‹ * loÿl_©Œ ; 321 ušt8_t ¡©us = 0; 322 * ±r = ( ušt8_t *) a -> d©a ; 324 loÿl_©Œ = `fšd_loÿl_©Œ (& a -> uuid ); 325 ià( loÿl_©Œ &&†oÿl_©Œ-> wr™e_cb ) { 326 ià( a -> d©a ) { 327 ¡©us = loÿl_©Œ -> `wr™e_cb Öoÿl_©Œ, ±r , 328 a -> Ën , NULL ,‡); 331  - ENOENT ; 333  ¡©us ; 334 } } 336  $ä“_³ndšg_hndl_li¡ () 338  ³ndšg_hndl * ‹mp_³ndšg_hndl_li¡ = NULL ; 342 ià( hndl_li¡_h—d ) { 343 hndl_li¡ = hndl_li¡_h—d ; 344 ‹mp_³ndšg_hndl_li¡ = hndl_li¡_h—d ; 345  ‹mp_³ndšg_hndl_li¡ ) { 346 hndl_li¡ = hndl_li¡-> Ãxt ; 347 `g_ä“ ( ‹mp_³ndšg_hndl_li¡ ); 348 ‹mp_³ndšg_hndl_li¡ = hndl_li¡ ; 351 hndl_li¡_h—d = NULL ; 353 } } 355  $g‘_©Œ_ch¬_size () 357 GLi¡ * l ; 358 ušt16_t Ãx_hndl = 0x0001; 359  ³ndšg_hndl * ‹mp_li¡ ; 360  btd_©Œibu‹ * loÿl_©Œ ; 361  ©Œ_size = 0; 364  ‹mp_li¡ = hndl_li¡_h—d ;emp_li¡ !ð NULL ; 365 ‹mp_li¡ =emp_li¡-> Ãxt ) { 366 l = `g_li¡_fšd_cu¡om ( loÿl_©Œibu‹_db , 367 `GUINT_TO_POINTER ( Ãx_hndl ), 368 hªdË_cmp ); 369 ià( l ) { 370 loÿl_©Œ = l -> d©a ; 371 ià( ‹mp_li¡ -> ty³ =ð GATT_TYPE_CHARAC_SVC ) { 372 ©Œ_size += 2; 375 ià( ‹mp_li¡ -> Ãxt ) 376 Ãx_hndl = ‹mp_li¡ -> Ãxt -> hªdË ; 378  ©Œ_size ; 379 } } 381  $g‘_©Œ_desc_size () 383 GLi¡ * l ; 384 ušt16_t Ãx_hndl = 0x0001; 385  ³ndšg_hndl * ‹mp_li¡ ; 386  ©Œ_size = 0; 388  ‹mp_li¡ = hndl_li¡_h—d ;emp_li¡ !ð NULL ; 389 ‹mp_li¡ =emp_li¡-> Ãxt ) { 390 l = `g_li¡_fšd_cu¡om ( loÿl_©Œibu‹_db , 391 `GUINT_TO_POINTER ( Ãx_hndl ), 392 hªdË_cmp ); 393 ià( l ) { 394 ià( ‹mp_li¡ -> ty³ =ð GATT_TYPE_DESC_USR ) 395 ©Œ_size += 1; 397 ià( ‹mp_li¡ -> Ãxt ) 398 Ãx_hndl = ‹mp_li¡ -> Ãxt -> hªdË ; 400  ©Œ_size ; 401 } } 403  $is_cÚÃùed ( gpoš‹r a1 , gpoš‹¸ a2 ) 405 cÚ¡  btd_deviû * dev = a1 ; 407 ià( `deviû_g‘_g©t_cÚÃùed ( dev )) 411 } } 413 boÞ $g©t_£nd_£rviû_chªged_šd ( btd_ad­‹r * ad­‹r , bt_uuid_t * uuid , 414 ušt16_t ¡¬t_hªdË , ušt16_ˆ ’d_hªdË ) 416 GA‰rib * ©Œib ; 417 GLi¡ * l , * cÚÃùiÚs ; 418 size_t Ën ; 419  btd_deviû * dev ; 421 `DBG ("+"); 422 cÚÃùiÚs = ( GLi¡ *) `btd_ad­‹r_g‘_cÚÃùiÚs ( ad­‹r ); 425 l = `g_li¡_fšd_cu¡om ( cÚÃùiÚs , `GUINT_TO_POINTER ( NULL ), 426 is_cÚÃùed ); 428 ià( l ) { 429 dev = l -> d©a ; 430 ià( `deviû_is_Œu¡ed ( dev )) { 431 ©Œib = `©Œib_äom_deviû ( dev ); 433 Ën = (( ušt16_t è* ( ’d_hªdË - ¡¬t_hªdË )); 434 `©Œib_£nd_sc_šd ( dev , ©Œib , ¡¬t_hªdË , 435 ’d_hªdË , Ën ); 436 `g_©Œib_uÄef ( ©Œib ); 438 cÚÃùiÚs = ( GLi¡ *) `g_¦i¡_Ãxt (connections); 441 }  l ); 443  TRUE ; 444 } } 446 ušt16_t $£nd_sc_šdiÿtiÚ ( ušt16_t ¡¬t_hªdË , ušt16_ˆ ’d_hªdË , size_t vËn , 447 ušt8_t * pdu , size_t Ën ) 449 cÚ¡ ušt16_t mš_Ën = ( pdu [0]) + (uint16_t); 451 ià( pdu =ð NULL ) 454 ià( Ën < ( vËn + mš_Ën )) 457 pdu [0] = ATT_OP_HANDLE_IND ; 461 `put_Ë16 ( ¡¬t_hªdË , & pdu [1]); 462 `put_Ë16 ( ’d_hªdË , & pdu [3]); 464  vËn + mš_Ën ; 465 } } 467 boÞ $btd_g©t_upd©e_©Œ_db () 469 GLi¡ * l ; 470 ušt16_t Ãx_hndl = 0x0001; 471  ³ndšg_hndl * ‹mp_li¡ ; 472  btd_©Œibu‹ * loÿl_©Œ ; 473  btd_©Œibu‹ * ‹mp_©t = NULL ; 474 gboÞ—n svc_added ; 475 bt_uuid_t ´im_uuid ; 476 bt_uuid_t ch¬_uuid = {0}; 477  btd_ad­‹r * ad­‹r ; 478 ušt8_t ch¬_©Œ_size = 0, u¤_desc_©Œ_size = 0, tÙ®_©Œ_size = 0; 479 ušt16_t ¡¬t_hªdË , ’d_hªdË , Ãxt_hªdË ; 480 boÞ Ãw_£rviû_add = FALSE ; 481 boÞ Ãw_ch¬_desc_add = FALSE ; 483 ad­‹r = `btd_ad­‹r_g‘_deçuÉ (); 484 ià(! ad­‹r ) 485  FALSE ; 487 ià(! hndl_li¡_h—d ) 488  FALSE ; 490 Ãx_hndl = hndl_li¡_h—d -> hªdË ; 491  ‹mp_li¡ = hndl_li¡_h—d ;emp_li¡ !ð NULL ; 492 ‹mp_li¡ =emp_li¡-> Ãxt ) { 493 l = `g_li¡_fšd_cu¡om ( loÿl_©Œibu‹_db , 494 `GUINT_TO_POINTER ( Ãx_hndl ), hªdË_cmp ); 495 ià(! l ) 498 loÿl_©Œ = l -> d©a ; 500 ià( loÿl_©Œ -> ty³ . v®ue . u16 =ð GATT_PRIM_SVC_UUID && 501 ‹mp_li¡ -> ty³ =ð GATT_TYPE_PRIM_SVC ) { 502 Ãw_£rviû_add = FALSE ; 503 ´im_uuid = `©t_g‘_uuid ( loÿl_©Œ -> v®ue , 504 loÿl_©Œ -> v®ue_Ën ); 505 ch¬_©Œ_size = `g‘_©Œ_ch¬_size (); 506 u¤_desc_©Œ_size = `g‘_©Œ_desc_size (); 507 tÙ®_©Œ_size = ch¬_©Œ_size + u¤_desc_©Œ_size + 1; 509 Ãxt_hªdË = `g©t_´im_£rviû_add ( ad­‹r , 510 GATT_PRIM_SVC_UUID , & ´im_uuid , 511 tÙ®_©Œ_size , & ¡¬t_hªdË ); 512 Ãw_ch¬_desc_add = TRUE ; 513 } ià(( loÿl_©Œ -> ty³ . v®ue . u16 =ð GATT_CHARAC_UUID || 514 ‹mp_li¡ -> ty³ =ð GATT_TYPE_CHARAC_VALUE ) && 515 Ãw_ch¬_desc_add ) { 517 ià(! ‹mp_©t ) { 518 * ±r = ( ušt8_t *) loÿl_©Œ -> v®ue ; 519 ušt8_t v®ue [ loÿl_©Œ -> v®ue_Ën ]; 520 `memýy ( v®ue , ±r , loÿl_©Œ -> v®ue_Ën ); 521 ‹mp_©t = `Ãw_cÚ¡_©Œibu‹ (& loÿl_©Œ -> ty³ , 522 v®ue , loÿl_©Œ -> v®ue_Ën ); 523 ià(! ‹mp_©t ) 524  FALSE ; 526 ‹mp_©t -> v®ue_Ën = loÿl_©Œ ->value_len; 527 ‹mp_©t -> wr™e_cb = loÿl_©Œ ->write_cb; 528 ‹mp_©t -> »ad_cb ð loÿl_©Œ ->read_cb; 530 ch¬_uuid = loÿl_©Œ -> ty³ ; 532 ià( ‹mp_li¡ -> ty³ =ð GATT_TYPE_CHARAC_VALUE ) { 534 svc_added = `g©t_add_ch¬aù”i¡ic ( ad­‹r , 535 & Ãxt_hªdË ,‚ext_handle, 536 GATT_OPT_CHR_UUID , & ch¬_uuid , 537 GATT_OPT_CHR_PROPS , 538 ‹mp_©t -> v®ue [0], 539 GATT_OPT_CHR_VALUE_CB , ATTRIB_READ , 540 »ad_ch¬_©Œ_db_v®ue , ad­‹r , 541 GATT_OPT_CHR_VALUE_CB , ATTRIB_WRITE , 542 wr™e_ch¬_©Œ_db_v®ue , ad­‹r , 543 GATT_OPT_INVALID ); 545 ’d_hªdË = Ãxt_hªdË - 1; 546 ià(! svc_added ) { 547 Ãw_£rviû_add = FALSE ; 548 Ãw_ch¬_desc_add = FALSE ; 551 Ãw_£rviû_add = TRUE ; 553 `ä“ ( ‹mp_©t ); 554 ‹mp_©t = NULL ; 556 } ià( ‹mp_li¡ -> ty³ =ð GATT_TYPE_DESC_USR && 557 Ãw_ch¬_desc_add ) { 558 bt_uuid_t desc_uuid ; 560 ià( loÿl_©Œ -> ty³ .ty³ =ð BT_UUID16 ) { 561 `g‘_uuid ( BT_UUID16 , & loÿl_©Œ -> ty³ . v®ue . u16 , 562 & desc_uuid ); 563 } ià( loÿl_©Œ -> ty³ .ty³ =ð BT_UUID32 ) { 564 `g‘_uuid ( BT_UUID32 , & loÿl_©Œ -> ty³ . v®ue . u32 , 565 & desc_uuid ); 573 `memýy (& desc_uuid . v®ue . u128 , 574 & loÿl_©Œ -> ty³ . v®ue . u128 , 16); 575 desc_uuid . ty³ = BT_UUID128 ; 577 svc_added = `g©t_add_desütÜ ( ad­‹r , 578 & Ãxt_hªdË ,‚ext_handle, 579 GATT_OPT_DESC_UUID , & desc_uuid , 580 GATT_OPT_DESC_VALUE_CB , ATTRIB_READ , 581 »ad_desc_©Œ_db_v®ue , ad­‹r , 582 GATT_OPT_INVALID ); 583 ’d_hªdË = Ãxt_hªdË - 1; 584 ià(! svc_added ) { 585 Ãw_£rviû_add = FALSE ; 588 Ãw_£rviû_add = TRUE ; 592 ià( ‹mp_li¡ -> Ãxt ) 593 Ãx_hndl = ‹mp_li¡ -> Ãxt -> hªdË ; 595 ià( Ãw_£rviû_add ) { 596 `DBG ("Service Added"); 597 `¡Üe_¡¬t_’d_hªdË (& ´im_uuid , ¡¬t_hªdË , ’d_hªdË ); 599 `DBG ("Failedo‡dd service"); 600 ¡¬t_hªdË = 0; 601 ’d_hªdË = 0; 603 `g‘_¡¬t_’d_hªdË (& ´im_uuid , & ¡¬t_hªdË , & ’d_hªdË ); 604 `©Œib_»move_£rviû ( ad­‹r , ¡¬t_hªdË , ’d_hªdË ); 606 `g©t_£nd_£rviû_chªged_šd ( ad­‹r , & ´im_uuid , ¡¬t_hªdË , 607 ’d_hªdË ); 608 `ä“_³ndšg_hndl_li¡ (); 610  TRUE ; 611 } } 613 * $btd_g‘_£rviû_·th ( bt_uuid_t uuid ) 615 GLi¡ * l ; 616  btd_©Œibu‹ * ©Œib ; 618 l = `g_li¡_fšd_cu¡om ( loÿl_©Œibu‹_db , `GUINT_TO_POINTER (& uuid ), 619 ©Œ_uuid_cmp ); 621 ià(! l ) 622  NULL ; 624 ©Œib = l -> d©a ; 625  ©Œib -> ·th ; 626 } } 628 DBusMes§ge * $£rviû_­³nd_diù ( bt_uuid_t uuid , DBusMes§ge * msg ) 630 GLi¡ * li¡ ; 631 DBusMes§ge * »¶y = NULL ; 632 DBusMes§geI‹r ™” ; 633 DBusMes§geI‹r diù ; 634  n_ch¬ = 1; 635 boÞ £rviû_found = FALSE ; 637 li¡ = `g_li¡_fšd_cu¡om ( loÿl_©Œibu‹_db , `GUINT_TO_POINTER (& uuid ), 638 ©Œ_uuid_cmp ); 640 ià(! li¡ ) 641  NULL ; 643 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 644 ià(! »¶y ) 645  NULL ; 647 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 649 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , 650 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 651 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 652 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 654 ; li¡ ;†i¡ = `g_li¡_Ãxt (list)) { 655  btd_©Œibu‹ * ©Œib = li¡ -> d©a ; 656 ià( ©Œib -> ty³ . v®ue . u16 =ð GATT_PRIM_SVC_UUID && ! £rviû_found ) { 658 £rviû_found = TRUE ; 659 ià( ©Œib -> ·th ) { 661 `diù_­³nd_’Œy (& diù , "S”viû", DBUS_TYPE_OBJECT_PATH , 662 & ©Œib -> ·th ); 664  NULL ; 665 } ià( ©Œib -> ty³ . v®ue . u16 =ð GATT_CHARAC_UUID && £rviû_found ) { 667 ià( ©Œib -> ·th ) { 669 gch¬ * key = `g_¡rdup_´štf ("Ch¬aù”i¡ic%d", n_ch¬ ++); 670 `diù_­³nd_’Œy (& diù , key , DBUS_TYPE_OBJECT_PATH , 671 & ©Œib -> ·th ); 672 `g_ä“ ( key ); 674 } ià( ©Œib -> ty³ . v®ue . u16 =ð GATT_CHARAC_USER_DESC_UUID && £rviû_found ) { 676 ià( ©Œib -> ·th ) { 678 gch¬ * key = `g_¡rdup ("Descriptor"); 679 `diù_­³nd_’Œy (& diù , key , DBUS_TYPE_OBJECT_PATH , 680 & ©Œib -> ·th ); 681 `g_ä“ ( key ); 683 } ià( ©Œib -> ty³ . v®ue . u16 =ð GATT_PRIM_SVC_UUID && £rviû_found ) { 687 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & diù ); 688  »¶y ; 689 } } 691  $»move_©Œ_£rviû ( btd_©Œibu‹ * £rviû ) 693 ušt16_t ¡¬t_hªdË , ’d_hªdË ; 694 bt_uuid_t ´im_uuid ; 695  btd_ad­‹r * ad­‹r ; 697 ad­‹r = `btd_ad­‹r_g‘_deçuÉ (); 698 ià(! ad­‹r ) 701 ´im_uuid = `©t_g‘_uuid ( £rviû -> v®ue , s”viû-> v®ue_Ën ); 702 `g‘_¡¬t_’d_hªdË (& ´im_uuid , & ¡¬t_hªdË , & ’d_hªdË ); 703 `©Œib_»move_£rviû ( ad­‹r , ¡¬t_hªdË , ’d_hªdË ); 704 `g©t_£nd_£rviû_chªged_šd ( ad­‹r , & ´im_uuid , ¡¬t_hªdË , ’d_hªdË ); 705 } } 707  $btd_g©t_£t_nÙify_šdiÿ‹_æag ( btd_©Œibu‹ * ©Œib , 708 boÞ nÙify_šdiÿ‹ ) 710 ©Œib -> nÙify_šdiÿ‹ =‚otify_indicate; 711 `g_li¡_š£¹_sÜ‹d ( loÿl_©Œibu‹_db , ©Œib , 712 ©Œibu‹_cmp ); 713 } } 716 #ifdeà __TIZEN_PATCH__ 717  btd_©Œibu‹ * $btd_g©t_add_£rviû (cÚ¡ bt_uuid_t * uuid , 718 cÚ¡ * ·th ) 720  btd_©Œibu‹ * $btd_g©t_add_£rviû (cÚ¡ bt_uuid_t * uuid ) 723  btd_©Œibu‹ * ©Œ ; 724 ušt16_t Ën = `bt_uuid_Ën ( uuid ); 725 ušt8_t v®ue [ Ën ]; 740 `put_uuid_Ë ( uuid , v®ue ); 742 ©Œ = `Ãw_cÚ¡_©Œibu‹ (& ´im¬y_uuid , v®ue , Ën ); 743 ià(! ©Œ ) 744  NULL ; 746 #ifdeà __TIZEN_PATCH__ 747 ©Œ -> ·th = `g_¡rdup (path); 750 ià(! hndl_li¡ ) { 751 hndl_li¡ = `g_Ãw0 ( ³ndšg_hndl , 1); 752 hndl_li¡_h—d = hndl_li¡ ; 753 hndl_li¡ -> ty³ = GATT_TYPE_PRIM_SVC ; 754 hndl_li¡ -> hªdË = Ãxt_hªdË ; 755 hndl_li¡ -> Ãxt = NULL ; 759 ià( `loÿl_d©aba£_add ( Ãxt_hªdË , ©Œ ) < 0) { 760 `ä“ ( ©Œ ); 761  NULL ; 765 Ãxt_hªdË =‚ext_handle + 1; 767  ©Œ ; 768 } } 770  $btd_g©t_»move_£rviû ( btd_©Œibu‹ * £rviû ) 772 GLi¡ * li¡ = `g_li¡_fšd ( loÿl_©Œibu‹_db , £rviû ); 773 boÞ fœ¡_node ; 774 #ifdeà __TIZEN_PATCH__ 775  btd_©Œibu‹ * ©Œib_rmv = NULL ; 778 ià(! li¡ ) 781 #ifdeà __TIZEN_PATCH__ 782 ©Œib_rmv = li¡ -> d©a ; 785 `»move_©Œ_£rviû ( ©Œib_rmv ); 788 fœ¡_node = loÿl_©Œibu‹_db =ð li¡ ; 791 `ä“ ( li¡ -> d©a ); 792 li¡ = `g_li¡_d–‘e_lšk (list,†ist); 795  li¡ && ! `is_£rviû Öi¡-> d©a )) { 796 #iâdeà __TIZEN_PATCH__ 797 `ä“ ( li¡ -> d©a ); 799 li¡ = `g_li¡_d–‘e_lšk (list,†ist); 807 ià( fœ¡_node ) 808 loÿl_©Œibu‹_db = li¡ ; 809 } } 811 #ifdeà __TIZEN_PATCH__ 812 boÞ $btd_g©t_upd©e_ch¬ (cÚ¡ bt_uuid_t * uuid , ušt8_t * v®ue , size_t Ën ) 814 GLi¡ * l ; 815  btd_©Œibu‹ * ©Œib ; 816  btd_ad­‹r * ad­‹r ; 817 ušt8_t ´Ý”t›s ; 818 boÞ nÙify_šdiÿ‹ ; 820 ad­‹r = `btd_ad­‹r_g‘_deçuÉ (); 821 ià(! ad­‹r ) 822  FALSE ; 824 l = `g_li¡_fšd_cu¡om ( loÿl_©Œibu‹_db , `GUINT_TO_POINTER ( uuid ), 825 ©Œ_uuid_cmp ); 827 ià(! l ) 828  FALSE ; 830 ©Œib = l -> d©a ; 831 nÙify_šdiÿ‹ = ©Œib ->notify_indicate; 832 `g_li¡_š£¹_sÜ‹d ( loÿl_©Œibu‹_db , ©Œib , ©Œibu‹_cmp ); 834 l = `g_li¡_fšd_cu¡om ( loÿl_©Œibu‹_db , 835 `GUINT_TO_POINTER ( ©Œib -> hªdË - 1), 836 hªdË_cmp ); 838 ià(! l ) 839  FALSE ; 841 ©Œib = l -> d©a ; 842 ´Ý”t›s = ©Œib -> v®ue [0]; 844 ià( `g©t_upd©e_db ( ad­‹r , uuid , v®ue , Ën )) { 849 ià( ´Ý”t›s & ( GATT_CHR_PROP_NOTIFY 850 | GATT_CHR_PROP_INDICATE )) { 854 ià( nÙify_šdiÿ‹ =ð FALSE ) { 855 l = `g_li¡_fšd_cu¡om ( loÿl_©Œibu‹_db , 856 `GUINT_TO_POINTER ( ©Œib -> hªdË + 1), 857 hªdË_cmp ); 859 ià(! l ) 860  FALSE ; 861 ©Œib = l -> d©a ; 862 `btd_g©t_£t_nÙify_šdiÿ‹_æag ( ©Œib , TRUE ); 864 `g©t_£nd_nÙy_šd ( ad­‹r , uuid , v®ue , Ën ); 868  TRUE ; 869 } } 872 #ifdeà __TIZEN_PATCH__ 873  btd_©Œibu‹ * $btd_g©t_add_ch¬ (cÚ¡ bt_uuid_t * uuid , 874 ušt8_t ´Ý”t›s , 875 cÚ¡ * ·th , 876 btd_©Œ_»ad_t »ad_cb , 877 btd_©Œ_wr™e_t wr™e_cb ) 879  btd_©Œibu‹ * $btd_g©t_add_ch¬ (cÚ¡ bt_uuid_t * uuid , 880 ušt8_t ´Ý”t›s , 881 btd_©Œ_»ad_t »ad_cb , 882 btd_©Œ_wr™e_t wr™e_cb ) 885  btd_©Œibu‹ * ch¬_deþ , * ch¬_v®ue = NULL ; 888 ušt16_t Ën = 1 + 2 + `bt_uuid_Ën ( uuid ); 889 ušt8_t v®ue [ Ën ]; 905 v®ue [0] = ´Ý”t›s ; 911 `put_uuid_Ë ( uuid , & v®ue [3]); 913 ch¬_deþ = `Ãw_cÚ¡_©Œibu‹ (& chr_uuid , v®ue , Ën ); 914 ià(! ch¬_deþ ) 915  çž ; 917 #ifdeà __TIZEN_PATCH__ 918 ch¬_deþ -> ·th = `g_¡rdup (path); 921 ch¬_v®ue = `Ãw_©Œibu‹ ( uuid , »ad_cb , wr™e_cb ); 922 ià(! ch¬_v®ue ) 923  çž ; 925 #ifdeà __TIZEN_PATCH__ 926 ch¬_v®ue -> ·th = `g_¡rdup (path); 929 ià( `loÿl_d©aba£_add ( Ãxt_hªdË , ch¬_deþ ) < 0) 930  çž ; 932 #ifdeà __TIZEN_PATCH__ 935 ià( hndl_li¡ && hndl_li¡-> Ãxt =ð NULL ) { 936 hndl_li¡ -> Ãxt = `g_Ãw0 ( ³ndšg_hndl , 1); 937 hndl_li¡ = hndl_li¡-> Ãxt ; 938 hndl_li¡ -> ty³ = GATT_TYPE_CHARAC_SVC ; 939 hndl_li¡ -> hªdË = Ãxt_hªdË ; 940 hndl_li¡ -> Ãxt = NULL ; 944 Ãxt_hªdË =‚ext_handle + 1; 959 ià( `loÿl_d©aba£_add ( Ãxt_hªdË , ch¬_v®ue ) < 0) 961  çž ; 963 #ifdeà __TIZEN_PATCH__ 966 ià( hndl_li¡ && hndl_li¡-> Ãxt =ð NULL ) { 967 hndl_li¡ -> Ãxt = `g_Ãw0 ( ³ndšg_hndl , 1); 968 hndl_li¡ = hndl_li¡-> Ãxt ; 969 hndl_li¡ -> ty³ = GATT_TYPE_CHARAC_VALUE ; 970 hndl_li¡ -> hªdË = Ãxt_hªdË ; 971 hndl_li¡ -> Ãxt = NULL ; 975 Ãxt_hªdË =‚ext_handle + 1; 983 `put_Ë16 ( ch¬_v®ue -> hªdË , & ch¬_deþ -> v®ue [1]); 985  ch¬_v®ue ; 987 çž : 988 #ifdeà __TIZEN_PATCH__ 989 ià( ch¬_deþ ) 990 `ä“ ( ch¬_deþ ); 991 ià( ch¬_v®ue ) 992 `g_ä“ ( ch¬_v®ue ); 994 `ä“ ( ch¬_deþ ); 995 `ä“ ( ch¬_v®ue ); 998  NULL ; 999 } } 1001 #ifdeà __TIZEN_PATCH__ 1002  btd_©Œibu‹ * $btd_g©t_add_ch¬_desc (cÚ¡ bt_uuid_t * uuid , 1003 cÚ¡ * ·th , 1004 btd_©Œ_»ad_t »ad_cb , 1005 btd_©Œ_wr™e_t wr™e_cb ) 1007  btd_©Œibu‹ * $btd_g©t_add_ch¬_desc (cÚ¡ bt_uuid_t * uuid , 1008 btd_©Œ_»ad_t »ad_cb , 1009 btd_©Œ_wr™e_t wr™e_cb ) 1012  btd_©Œibu‹ * ©Œ ; 1025 ©Œ = `Ãw_©Œibu‹ ( uuid , »ad_cb , wr™e_cb ); 1026 ià(! ©Œ ) 1027  NULL ; 1029 ià( `loÿl_d©aba£_add ( Ãxt_hªdË , ©Œ ) < 0) { 1030 `ä“ ( ©Œ ); 1031  NULL ; 1034 #ifdeà __TIZEN_PATCH__ 1035 ©Œ -> ·th = `g_¡rdup (path); 1039 ià( hndl_li¡ && hndl_li¡-> Ãxt =ð NULL ) { 1040 hndl_li¡ -> Ãxt = `g_Ãw0 ( ³ndšg_hndl , 1); 1041 hndl_li¡ = hndl_li¡-> Ãxt ; 1042 hndl_li¡ -> ty³ = GATT_TYPE_DESC_USR ; 1043 hndl_li¡ -> hªdË = Ãxt_hªdË ;; 1044 hndl_li¡ -> Ãxt = NULL ; 1048 Ãxt_hªdË =‚ext_handle + 1; 1050  ©Œ ; 1051 } } 1053  $g©t_š™ () 1055 `DBG ("Starting GATT server"); 1057 `g©t_dbus_mªag”_»gi¡” (); 1058 } } 1060  $g©t_þ—nup () 1062 `DBG ("Stopping GATT server"); 1064 `g©t_dbus_mªag”_uÄegi¡” (); 1065 } } @src/gatt.h 24  gbtd_©Œibu‹ ; 26  g©t_š™ (); 28  g©t_þ—nup (); 38 #ifdeà __TIZEN_PATCH__ 39  $ušt8_t (* tbtd_©Œ_»ad_»suÉ_t è( t”r , tušt8_t * tv®ue , tsize_t tËn , 40 * tu£r_d©a ); 42 (* tbtd_©Œ_»ad_»suÉ_t è( t”r , tušt8_t * tv®ue , tsize_t tËn , 43 * tu£r_d©a ); 54 #ifdeà __TIZEN_PATCH__ 55  $ušt8_t (* tbtd_©Œ_»ad_t è( tbtd_©Œibu‹ * t©Œ , 56 tbtd_©Œ_»ad_»suÉ_t t»suÉ , 57 * tu£r_d©a ); 59 (* tbtd_©Œ_»ad_t è( tbtd_©Œibu‹ * t©Œ , 60 tbtd_©Œ_»ad_»suÉ_t t»suÉ , 61 * tu£r_d©a ); 71 #ifdeà __TIZEN_PATCH__ 72  $ušt8_t (* tbtd_©Œ_wr™e_»suÉ_t è( t”r , * tu£r_d©a ); 74 (* tbtd_©Œ_wr™e_»suÉ_t è( t”r , * tu£r_d©a ); 86 #ifdeà __TIZEN_PATCH__ 87  $ušt8_t (* tbtd_©Œ_wr™e_t è( tbtd_©Œibu‹ * t©Œ , 88 cÚ¡ tušt8_t * tv®ue , tsize_t tËn , 89 tbtd_©Œ_wr™e_»suÉ_t t»suÉ , 90 * tu£r_d©a ); 92 (* tbtd_©Œ_wr™e_t è( tbtd_©Œibu‹ * t©Œ , 93 cÚ¡ tušt8_t * tv®ue , tsize_t tËn , 94 tbtd_©Œ_wr™e_»suÉ_t t»suÉ , 95 * tu£r_d©a ); 105 #ifdeà __TIZEN_PATCH__ 106  btd_©Œibu‹ * `btd_g©t_add_£rviû (cÚ¡ bt_uuid_t * uuid , cÚ¡ * ·th ); 108  btd_©Œibu‹ * `btd_g©t_add_£rviû (cÚ¡ bt_uuid_t * uuid ); 111 #ifdeà __TIZEN_PATCH__ 115 boÞ `btd_g©t_upd©e_©Œ_db (); 120 * `btd_g‘_£rviû_·th ( bt_uuid_t uuid ); 126 DBusMes§ge * `£rviû_­³nd_diù ( bt_uuid_t uuid , DBusMes§g* msg ); 133  `btd_g©t_£t_nÙify_šdiÿ‹_æag ( btd_©Œibu‹ * ©Œib , 134 boÞ nÙify_šdiÿ‹ ); 142  `btd_g©t_»move_£rviû ( btd_©Œibu‹ * £rviû ); 157 #ifdeà __TIZEN_PATCH__ 158  btd_©Œibu‹ * `btd_g©t_add_ch¬ (cÚ¡ bt_uuid_t * uuid , 159 ušt8_t ´Ý”t›s , 160 cÚ¡ * ·th , 161 btd_©Œ_»ad_t »ad_cb , 162 btd_©Œ_wr™e_t wr™e_cb ); 164  btd_©Œibu‹ * `btd_g©t_add_ch¬ (cÚ¡ bt_uuid_t * uuid , 165 ušt8_t ´Ý”t›s , 166 btd_©Œ_»ad_t »ad_cb , 167 btd_©Œ_wr™e_t wr™e_cb ); 183 #ifdeà __TIZEN_PATCH__ 184  btd_©Œibu‹ * `btd_g©t_add_ch¬_desc (cÚ¡ bt_uuid_t * uuid , 185 cÚ¡ * ·th , 186 btd_©Œ_»ad_t »ad_cb , 187 btd_©Œ_wr™e_t wr™e_cb ); 189  btd_©Œibu‹ * `btd_g©t_add_ch¬_desc (cÚ¡ bt_uuid_t * uuid , 190 btd_©Œ_»ad_t »ad_cb , 191 btd_©Œ_wr™e_t wr™e_cb ); 194 #ifdeà __TIZEN_PATCH__ 204 boÞ `btd_g©t_upd©e_ch¬ (cÚ¡ bt_uuid_t * uuid , ušt8_t * v®ue , size_t Ën ); @src/hcid.h 27 mBT_MODE_DUAL , 28 mBT_MODE_BREDR , 29 mBT_MODE_LE , 30 } tbt_mode_t ; 32  smaš_Ýts { 33 * mÇme ; 34 ušt32_t mþass ; 35 ušt16_t mautÙo ; 36 ušt32_t m·œto ; 37 ušt32_t mdiscovto ; 38 gboÞ—n m»v”£_sdp ; 39 gboÞ—n mÇme_»sÞv ; 40 gboÞ—n mdebug_keys ; 41 #ifdeà __TIZEN_PATCH__ 42 gboÞ—n mË_´ivacy ; 45 ušt16_t mdid_sourû ; 46 ušt16_t mdid_v’dÜ ; 47 ušt16_t mdid_´oduù ; 48 ušt16_t mdid_v”siÚ ; 50 bt_mode_t mmode ; 53  maš_Ýts main_opts; 55 gboÞ—n ¶ugš_š™ (cÚ¡ * ’abË , cÚ¡ * di§bË ); 56  ¶ugš_þ—nup (); 58  rfkžl_š™ (); 59  rfkžl_ex™ (); 61 GKeyFže * btd_g‘_maš_cÚf (); 63  btd_ex™ (); @src/log.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡d¬g.h > 30  ~ 32  ~ 34  ~"log.h " 36  $šfo (cÚ¡ * fÜm© , ...) 38 va_li¡ ­ ; 40 `va_¡¬t ( ­ , fÜm© ); 42 `vsy¦og ( LOG_INFO , fÜm© , ­ ); 44 `va_’d ( ­ ); 45 } } 47  $w¬n (cÚ¡ * fÜm© , ...) 49 va_li¡ ­ ; 51 `va_¡¬t ( ­ , fÜm© ); 53 `vsy¦og ( LOG_WARNING , fÜm© , ­ ); 55 `va_’d ( ­ ); 56 } } 58  $”rÜ (cÚ¡ * fÜm© , ...) 60 va_li¡ ­ ; 62 `va_¡¬t ( ­ , fÜm© ); 64 `vsy¦og ( LOG_ERR , fÜm© , ­ ); 66 `va_’d ( ­ ); 67 } } 69  $btd_debug (cÚ¡ * fÜm© , ...) 71 va_li¡ ­ ; 73 `va_¡¬t ( ­ , fÜm© ); 75 `vsy¦og ( LOG_DEBUG , fÜm© , ­ ); 77 `va_’d ( ­ ); 78 } } 80  btd_debug_desc __¡¬t___debug []; 81  btd_debug_desc __¡Ý___debug []; 83 ** g’abËd = NULL ; 85  gboÞ—n $is_’abËd ( btd_debug_desc * desc ) 87  i ; 89 ià( ’abËd =ð NULL ) 92  i = 0; ’abËd [i] !ð NULL ; i++) 93 ià( desc -> fže !ð NULL && `g_·‰”n_m©ch_sim¶e ( ’abËd [ i ], 94 desc -> fže è=ð TRUE ) 98 } } 100  $__btd_’abË_debug ( btd_debug_desc * ¡¬t , 101  btd_debug_desc * ¡Ý ) 103  btd_debug_desc * desc ; 105 ià( ¡¬t =ð NULL || ¡Ý == NULL) 108  desc = ¡¬t ; desø< ¡Ý ; desc++) { 109 ià( `is_’abËd ( desc )) 110 desc -> æags |ð BTD_DEBUG_FLAG_PRINT ; 112 } } 114  $__btd_toggË_debug () 116  btd_debug_desc * desc ; 118  desc = __¡¬t___debug ; desø< __¡Ý___debug ; desc++) 119 desc -> æags |ð BTD_DEBUG_FLAG_PRINT ; 120 } } 122 #ifdeà __TIZEN_PATCH__ 123  $__hci_©ch_log_š™ () 125  ÝtiÚ = LOG_NDELAY | LOG_PID ; 127 ’abËd = `g_¡r¥l™_£t ( `g_¡rdup ("*"), ":, ", 0); 129 `__btd_’abË_debug ( __¡¬t___debug , __¡Ý___debug ); 131 `Ý’log ("hcŸ‰ach", ÝtiÚ , LOG_DAEMON ); 133 `sy¦og ( LOG_INFO , "hciattach daemon for debugging"); 134 } } 138  $__btd_log_š™ (cÚ¡ * debug ,  d‘ach ) 140  ÝtiÚ = LOG_NDELAY | LOG_PID ; 142 ià( debug !ð NULL ) 143 ’abËd = `g_¡r¥l™_£t ( debug , ":, ", 0); 145 `__btd_’abË_debug ( __¡¬t___debug , __¡Ý___debug ); 147 ià(! d‘ach ) 148 ÝtiÚ |ð LOG_PERROR ; 150 `Ý’log ("blu‘oÙhd", ÝtiÚ , LOG_DAEMON ); 152 `sy¦og ( LOG_INFO , "Blu‘oÙh d«mÚ %s", VERSION ); 153 } } 155  $__btd_log_þ—nup () 157 `þo£log (); 159 `g_¡rä“v ( ’abËd ); 160 } } @src/log.h 24  $šfo (cÚ¡ * fÜm© , ...è `__©Œibu‹__ (( `fÜm© ( ´štf , 1, 2))); 25  $w¬n (cÚ¡ * fÜm© , ...è `__©Œibu‹__ (( `fÜm© ( ´štf , 1, 2))); 26  $”rÜ (cÚ¡ * fÜm© , ...è `__©Œibu‹__ (( `fÜm© ( ´štf , 1, 2))); 28  $btd_debug (cÚ¡ * fÜm© , ...è `__©Œibu‹__ (( `fÜm© ( ´štf , 1, 2))); 30 #ifdeà __TIZEN_PATCH__ 31  `__hci_©ch_log_š™ (); 33  `__btd_log_š™ (cÚ¡ * debug ,  d‘ach ); 34  `__btd_log_þ—nup (); 35  `__btd_toggË_debug (); 37  sbtd_debug_desc { 38 cÚ¡ * fže ; 39  #BTD_DEBUG_FLAG_DEFAULT (0) ) 40  #BTD_DEBUG_FLAG_PRINT (1 << 0) ) 41  æags ; 42 } `__©Œibu‹__ (( `®igÃd (8))); 44  `__btd_’abË_debug ( btd_debug_desc * ¡¬t , 45  btd_debug_desc * ¡Ý ); 55  #DBG ( fmt , ¬g ...) do { \ 56  btd_debug_desc __btd_debug_desc \ 57 `__©Œibu‹__ (( u£d , `£ùiÚ ("__debug"), `®igÃd (8))) = { \ 58 . fže = __FILE__ , . æags = BTD_DEBUG_FLAG_DEFAULT , \ 60 ià( __btd_debug_desc . æags & BTD_DEBUG_FLAG_PRINT ) \ 61 `btd_debug ("%s:%s(è" fmt , __FILE__ , __func__ , ## ¬g ); \ 62 } } 0) ) @src/main.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<”ºo.h > 31  ~<¡dio.h > 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 35  ~ 36  ~ 37  ~ 38  ~ 40  ~ 42  ~ 44  ~ 46  ~ 48  ~"log.h " 50  ~"lib/uuid.h " 51  ~"hcid.h " 52  ~"sdpd.h " 53  ~"ad­‹r.h " 54  ~"deviû.h " 55  ~"dbus-commÚ.h " 56  ~"ag’t.h " 57  ~"´ofže.h " 58  ~"g©t.h " 59  ~"sy¡emd.h " 61  #BLUEZ_NAME "Üg.bluez" ) 63  #DEFAULT_PAIRABLE_TIMEOUT 0 ) 64  #DEFAULT_DISCOVERABLE_TIMEOUT 180 ) 66  #SHUTDOWN_GRACE_SECONDS 10 ) 68  maš_Ýts gmaš_Ýts ; 69  GKeyFže * gmaš_cÚf ; 71 cÚ¡ * cÚ¡ gsuµÜ‹d_ÝtiÚs [] = { 83 #ifdeà __TIZEN_PATCH__ 88 GKeyFže * $btd_g‘_maš_cÚf () 90  maš_cÚf ; 91 } } 93  GKeyFže * $lßd_cÚfig (cÚ¡ * fže ) 95 GE¼Ü * ”r = NULL ; 96 GKeyFže * keyfže ; 98 keyfže = `g_key_fže_Ãw (); 100 `g_key_fže_£t_li¡_£·¿tÜ ( keyfže , ','); 102 ià(! `g_key_fže_lßd_äom_fže ( keyfže , fže , 0, & ”r )) { 103 ià(! `g_”rÜ_m©ches ( ”r , G_FILE_ERROR , G_FILE_ERROR_NOENT )) 104 `”rÜ ("P¬sšg % çžed: %s", fže , ”r -> mes§ge ); 105 `g_”rÜ_ä“ ( ”r ); 106 `g_key_fže_ä“ ( keyfže ); 107  NULL ; 110  keyfže ; 111 } } 113  $·r£_did (cÚ¡ * did ) 115  »suÉ ; 116 ušt16_t v’dÜ , ´oduù , v”siÚ , sourû ; 119 v”siÚ = 0x0000; 120 sourû = 0x0002; 122 »suÉ = `ssÿnf ( did , "bluetooth:%4hx:%4hx:%4hx", 123 & v’dÜ , & ´oduù , & v”siÚ ); 124 ià( »suÉ !ð EOF &&„esult >= 2) { 125 sourû = 0x0001; 126  dÚe ; 129 »suÉ = `ssÿnf ( did , "usb:%4hx:%4hx:%4hx", 130 & v’dÜ , & ´oduù , & v”siÚ ); 131 ià( »suÉ !ð EOF &&„esult >= 2) 132  dÚe ; 134 »suÉ = `ssÿnf ( did , "%4hx:%4hx:%4hx", & v’dÜ , & ´oduù , & v”siÚ ); 135 ià( »suÉ =ð EOF ||„esult < 2) 138 dÚe : 139 maš_Ýts . did_sourû = sourû ; 140 maš_Ýts . did_v’dÜ = v’dÜ ; 141 maš_Ýts . did_´oduù = ´oduù ; 142 maš_Ýts . did_v”siÚ = v”siÚ ; 143 } } 145  $check_cÚfig ( GKeyFže * cÚfig ) 147 cÚ¡ * v®id_groups [] = { "G’”®", "PÞicy", NULL }; 148 ** keys ; 149  i ; 151 ià(! cÚfig ) 154 keys = `g_key_fže_g‘_groups ( cÚfig , NULL ); 156  i = 0; keys !ð NULL && keys[i] != NULL; i++) { 157 cÚ¡ ** group ; 158 boÞ m©ch = çl£ ; 160  group = v®id_groups ; *group; group++) { 161 ià( `g_¡r_equ® ( keys [ i ], * group )) { 162 m©ch = Œue ; 167 ià(! m©ch ) 168 `w¬n ("UnknowÀgrou°% š maš.cÚf", keys [ i ]); 171 `g_¡rä“v ( keys ); 173 keys = `g_key_fže_g‘_keys ( cÚfig , "G’”®", NULL , NULL); 175  i = 0; keys !ð NULL && keys[i] != NULL; i++) { 176 boÞ found ; 177  j ; 179 found = çl£ ; 180  j = 0; j < `G_N_ELEMENTS ( suµÜ‹d_ÝtiÚs ); j++) { 181 ià( `g_¡r_equ® ( keys [ i ], suµÜ‹d_ÝtiÚs [ j ])) { 182 found = Œue ; 187 ià(! found ) 188 `w¬n ("UnknowÀkey % š maš.cÚf", keys [ i ]); 191 `g_¡rä“v ( keys ); 192 } } 194  $g‘_mode (cÚ¡ * ¡r ) 196 ià( `¡rcmp ( ¡r , "dual") == 0) 197  BT_MODE_DUAL ; 198 ià( `¡rcmp ( ¡r , "bredr") == 0) 199  BT_MODE_BREDR ; 200 ià( `¡rcmp ( ¡r , "le") == 0) 201  BT_MODE_LE ; 203 `”rÜ ("UnknowÀcÚŒÞ˸mod\"%s\"", ¡r ); 205  BT_MODE_DUAL ; 206 } } 208  $·r£_cÚfig ( GKeyFže * cÚfig ) 210 GE¼Ü * ”r = NULL ; 211 * ¡r ; 212  v® ; 213 gboÞ—n boÞ—n ; 215 ià(! cÚfig ) 218 `check_cÚfig ( cÚfig ); 220 `DBG ("parsing main.conf"); 222 v® = `g_key_fže_g‘_š‹g” ( cÚfig , "General", 223 "Discov”abËTimeout", & ”r ); 224 ià( ”r ) { 225 `DBG ("%s", ”r -> mes§ge ); 226 `g_þ—r_”rÜ (& ”r ); 228 `DBG ("discovto=%d", v® ); 229 maš_Ýts . discovto = v® ; 232 v® = `g_key_fže_g‘_š‹g” ( cÚfig , "General", 233 "PaœabËTimeout", & ”r ); 234 ià( ”r ) { 235 `DBG ("%s", ”r -> mes§ge ); 236 `g_þ—r_”rÜ (& ”r ); 238 `DBG ("·œto=%d", v® ); 239 maš_Ýts . ·œto = v® ; 242 v® = `g_key_fže_g‘_š‹g” ( cÚfig , "General", "AutoConnectTimeout", 243 & ”r ); 244 ià( ”r ) { 245 `DBG ("%s", ”r -> mes§ge ); 246 `g_þ—r_”rÜ (& ”r ); 248 `DBG ("auto_to=%d", v® ); 249 maš_Ýts . autÙo = v® ; 252 ¡r = `g_key_fže_g‘_¡ršg ( cÚfig , "G’”®", "Name", & ”r ); 253 ià( ”r ) { 254 `DBG ("%s", ”r -> mes§ge ); 255 `g_þ—r_”rÜ (& ”r ); 257 `DBG ("Çme=%s", ¡r ); 258 `g_ä“ ( maš_Ýts . Çme ); 259 maš_Ýts . Çme = ¡r ; 262 ¡r = `g_key_fže_g‘_¡ršg ( cÚfig , "G’”®", "CÏss", & ”r ); 263 ià( ”r ) { 264 `DBG ("%s", ”r -> mes§ge ); 265 `g_þ—r_”rÜ (& ”r ); 267 `DBG ("þass=%s", ¡r ); 268 maš_Ýts . þass = `¡¹Þ ( ¡r , NULL , 16); 269 `g_ä“ ( ¡r ); 272 ¡r = `g_key_fže_g‘_¡ršg ( cÚfig , "G’”®", "DeviûID", & ”r ); 273 ià( ”r ) { 274 `DBG ("%s", ”r -> mes§ge ); 275 `g_þ—r_”rÜ (& ”r ); 277 `DBG ("deviûid=%s", ¡r ); 278 `·r£_did ( ¡r ); 279 `g_ä“ ( ¡r ); 282 boÞ—n = `g_key_fže_g‘_boÞ—n ( cÚfig , "General", 283 "Rev”£S”viûDiscov”y", & ”r ); 284 ià( ”r ) { 285 `DBG ("%s", ”r -> mes§ge ); 286 `g_þ—r_”rÜ (& ”r ); 288 maš_Ýts . »v”£_sdp = boÞ—n ; 290 boÞ—n = `g_key_fže_g‘_boÞ—n ( cÚfig , "General", 291 "NameResÞvšg", & ”r ); 292 ià( ”r ) 293 `g_þ—r_”rÜ (& ”r ); 295 maš_Ýts . Çme_»sÞv = boÞ—n ; 297 boÞ—n = `g_key_fže_g‘_boÞ—n ( cÚfig , "General", 298 "DebugKeys", & ”r ); 299 ià( ”r ) 300 `g_þ—r_”rÜ (& ”r ); 302 maš_Ýts . debug_keys = boÞ—n ; 304 ¡r = `g_key_fže_g‘_¡ršg ( cÚfig , "G’”®", "CÚŒÞËrMode", & ”r ); 305 ià( ”r ) { 306 `g_þ—r_”rÜ (& ”r ); 308 `DBG ("CÚŒÞËrMode=%s", ¡r ); 309 maš_Ýts . mode = `g‘_mode ( ¡r ); 310 `g_ä“ ( ¡r ); 313 #ifdeà __TIZEN_PATCH__ 314 boÞ—n = `g_key_fže_g‘_boÞ—n ( cÚfig , "General", 315 "EÇbËLEPrivacy", & ”r ); 316 ià( ”r ) 317 `g_þ—r_”rÜ (& ”r ); 319 maš_Ýts . Ë_´ivacy = boÞ—n ; 321 } } 323  $š™_deçuÉs () 325 ušt8_t majÜ , mšÜ ; 328 `mem£t (& maš_Ýts , 0, (main_opts)); 329 maš_Ýts . Çme = `g_¡rdup_´štf ("BlueZ %s", VERSION ); 330 maš_Ýts . þass = 0x000000; 331 maš_Ýts . ·œto = DEFAULT_PAIRABLE_TIMEOUT ; 332 maš_Ýts . discovto = DEFAULT_DISCOVERABLE_TIMEOUT ; 333 maš_Ýts . »v”£_sdp = TRUE ; 334 maš_Ýts . Çme_»sÞv = TRUE ; 335 maš_Ýts . debug_keys = FALSE ; 336 #ifdeà __TIZEN_PATCH__ 337 maš_Ýts . Ë_´ivacy = TRUE ; 340 ià( `ssÿnf ( VERSION , "%hhu.%hhu", & majÜ , & mšÜ ) != 2) 343 maš_Ýts . did_sourû = 0x0002; 344 maš_Ýts . did_v’dÜ = 0x1d6b; 345 maš_Ýts . did_´oduù = 0x0246; 346 maš_Ýts . did_v”siÚ = ( majÜ << 8 | mšÜ ); 347 } } 349  GMašLoÝ * gev’t_loÝ ; 351  $btd_ex™ () 353 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 354 } } 356  gboÞ—n $qu™_ev’ŽoÝ ( gpoš‹r u£r_d©a ) 358 `btd_ex™ (); 359  FALSE ; 360 } } 362  gboÞ—n $sigÇl_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 363 gpoš‹r u£r_d©a ) 365  __‹rmš©ed = 0; 366  sigÇlfd_sigšfo si ; 367 ssize_t »suÉ ; 368  fd ; 370 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) 371  FALSE ; 373 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 375 »suÉ = `»ad ( fd , & si , (si)); 376 ià( »suÉ !ð( si )) 377  FALSE ; 379  si . ssi_signo ) { 380  SIGINT : 381  SIGTERM : 382 ià( __‹rmš©ed == 0) { 383 `šfo ("Terminating"); 384 `g_timeout_add_£cÚds ( SHUTDOWN_GRACE_SECONDS , 385 qu™_ev’ŽoÝ , NULL ); 387 `sd_nÙify (0, "STATUS=Powering down"); 388 `ad­‹r_shutdown (); 391 __‹rmš©ed = 1; 393  SIGUSR2 : 394 `__btd_toggË_debug (); 398  TRUE ; 399 } } 401  gušt $£tup_sigÇlfd () 403 GIOChªÃl * chªÃl ; 404 gušt sourû ; 405 sig£t_t mask ; 406  fd ; 408 `sigem±y£t (& mask ); 409 `sigadd£t (& mask , SIGINT ); 410 `sigadd£t (& mask , SIGTERM ); 411 `sigadd£t (& mask , SIGUSR2 ); 413 ià( `sig´ocmask ( SIG_BLOCK , & mask , NULL ) < 0) { 414 `³¼Ü ("Failedo set signal mask"); 418 fd = `sigÇlfd (-1, & mask , 0); 419 ià( fd < 0) { 420 `³¼Ü ("Failedo create signal descriptor"); 424 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 426 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 427 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 428 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 430 sourû = `g_io_add_w©ch ( chªÃl , 431 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 432 sigÇl_hªdËr , NULL ); 434 `g_io_chªÃl_uÄef ( chªÃl ); 436  sourû ; 437 } } 439 * gÝtiÚ_debug = NULL ; 440 * gÝtiÚ_¶ugš = NULL ; 441 * gÝtiÚ_nÝlugš = NULL ; 442  gboÞ—n gÝtiÚ_com·t = FALSE ; 443  gboÞ—n gÝtiÚ_d‘ach = TRUE ; 444  gboÞ—n gÝtiÚ_v”siÚ = FALSE ; 445  gboÞ—n gÝtiÚ_ex³rim’l = FALSE ; 447  $ä“_ÝtiÚs () 449 `g_ä“ ( ÝtiÚ_debug ); 450 ÝtiÚ_debug = NULL ; 452 `g_ä“ ( ÝtiÚ_¶ugš ); 453 ÝtiÚ_¶ugš = NULL ; 455 `g_ä“ ( ÝtiÚ_nÝlugš ); 456 ÝtiÚ_nÝlugš = NULL ; 457 } } 459  $discÚÃù_dbus () 461 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 463 ià(! cÚn || ! `dbus_cÚÃùiÚ_g‘_is_cÚÃùed (conn)) 466 `g_dbus_d‘ach_objeù_mªag” ( cÚn ); 467 `£t_dbus_cÚÃùiÚ ( NULL ); 469 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 470 } } 472  $discÚÃùed_dbus ( DBusCÚÃùiÚ * cÚn , * d©a ) 474 `šfo ("Disconnected from D-Bus. Exiting."); 475 `g_maš_loÝ_qu™ ( ev’t_loÝ ); 476 } } 478  $cÚÃù_dbus () 480 DBusCÚÃùiÚ * cÚn ; 481 DBusE¼Ü ”r ; 483 `dbus_”rÜ_š™ (& ”r ); 485 cÚn = `g_dbus_£tup_bus ( DBUS_BUS_SYSTEM , BLUEZ_NAME , & ”r ); 486 ià(! cÚn ) { 487 ià( `dbus_”rÜ_is_£t (& ”r )) { 488 `g_´š‹¼ ("D-Bu £tu°çžed: %s\n", ”r . mes§ge ); 489 `dbus_”rÜ_ä“ (& ”r ); 490  - EIO ; 492  - EALREADY ; 495 `£t_dbus_cÚÃùiÚ ( cÚn ); 497 `g_dbus_£t_discÚÃù_funùiÚ ( cÚn , discÚÃùed_dbus , NULL , NULL); 498 `g_dbus_©ch_objeù_mªag” ( cÚn ); 501 } } 503  gboÞ—n $w©chdog_ÿÎback ( gpoš‹r u£r_d©a ) 505 `sd_nÙify (0, "WATCHDOG=1"); 507  TRUE ; 508 } } 510  gboÞ—n $·r£_debug (cÚ¡ * key , cÚ¡ * v®ue , 511 gpoš‹r u£r_d©a , GE¼Ü ** ”rÜ ) 513 ià( v®ue ) 514 ÝtiÚ_debug = `g_¡rdup ( v®ue ); 516 ÝtiÚ_debug = `g_¡rdup ("*"); 518  TRUE ; 519 } } 521  GO±iÚEÁry gÝtiÚs [] = { 522 { "debug", 'd', G_OPTION_FLAG_OPTIONAL_ARG , 523 G_OPTION_ARG_CALLBACK , ·r£_debug , 525 { "¶ugš", 'p', 0, G_OPTION_ARG_STRING , & ÝtiÚ_¶ugš , 527 { "nÝlugš", 'P', 0, G_OPTION_ARG_STRING , & ÝtiÚ_nÝlugš , 529 { "com·t", 'C', 0, G_OPTION_ARG_NONE , & ÝtiÚ_com·t , 531 { "ex³rim’l", 'E', 0, G_OPTION_ARG_NONE , & ÝtiÚ_ex³rim’l , 533 { "nod‘ach", 'n', G_OPTION_FLAG_REVERSE , 534 G_OPTION_ARG_NONE , & ÝtiÚ_d‘ach , 536 { "v”siÚ", 'v', 0, G_OPTION_ARG_NONE , & ÝtiÚ_v”siÚ , 538 { NULL }, 541  $maš ( ¬gc , * ¬gv []) 543 GO±iÚCÚ‹xt * cÚ‹xt ; 544 GE¼Ü * ”r = NULL ; 545 ušt16_t sdp_mtu = 0; 546 ušt32_t sdp_æags = 0; 547  gdbus_æags = 0; 548 gušt sigÇl , w©chdog ; 549 cÚ¡ * w©chdog_u£c ; 551 `š™_deçuÉs (); 553 cÚ‹xt = `g_ÝtiÚ_cÚ‹xt_Ãw ( NULL ); 554 `g_ÝtiÚ_cÚ‹xt_add_maš_’Œ›s ( cÚ‹xt , ÝtiÚs , NULL ); 556 ià( `g_ÝtiÚ_cÚ‹xt_·r£ ( cÚ‹xt , & ¬gc , & ¬gv , & ”r è=ð FALSE ) { 557 ià( ”r !ð NULL ) { 558 `g_´š‹¼ ("%s\n", ”r -> mes§ge ); 559 `g_”rÜ_ä“ ( ”r ); 561 `g_´š‹¼ ("An unknownƒrror occurred\n"); 562 `ex™ (1); 565 `g_ÝtiÚ_cÚ‹xt_ä“ ( cÚ‹xt ); 567 ià( ÝtiÚ_v”siÚ =ð TRUE ) { 568 `´štf ("%s\n", VERSION ); 569 `ex™ (0); 572 `umask (0077); 574 ev’t_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 576 sigÇl = `£tup_sigÇlfd (); 578 `__btd_log_š™ ( ÝtiÚ_debug , ÝtiÚ_d‘ach ); 580 `sd_nÙify (0, "STATUS=Starting up"); 582 maš_cÚf = `lßd_cÚfig ( CONFIGDIR "/main.conf"); 584 `·r£_cÚfig ( maš_cÚf ); 586 ià( `cÚÃù_dbus () < 0) { 587 `”rÜ ("Unableo get on D-Bus"); 588 `ex™ (1); 591 ià( ÝtiÚ_ex³rim’l ) 592 gdbus_æags = G_DBUS_FLAG_ENABLE_EXPERIMENTAL ; 594 `g_dbus_£t_æags ( gdbus_æags ); 596 `g©t_š™ (); 598 ià( `ad­‹r_š™ () < 0) { 599 `”rÜ ("Adapter handling initialization failed"); 600 `ex™ (1); 603 `btd_deviû_š™ (); 604 `btd_ag’t_š™ (); 605 `btd_´ofže_š™ (); 607 ià( ÝtiÚ_com·t =ð TRUE ) 608 sdp_æags |ð SDP_SERVER_COMPAT ; 610 `¡¬t_sdp_£rv” ( sdp_mtu , sdp_æags ); 612 ià( maš_Ýts . did_sourû > 0) 613 `»gi¡”_deviû_id ( maš_Ýts . did_sourû , maš_Ýts. did_v’dÜ , 614 maš_Ýts . did_´oduù , maš_Ýts. did_v”siÚ ); 620 `¶ugš_š™ ( ÝtiÚ_¶ugš , ÝtiÚ_nÝlugš ); 623 `ä“_ÝtiÚs (); 625 `rfkžl_š™ (); 627 `DBG ("Entering main†oop"); 629 `sd_nÙify (0, "STATUS=Running"); 630 `sd_nÙify (0, "READY=1"); 632 w©chdog_u£c = `g‘’v ("WATCHDOG_USEC"); 633 ià( w©chdog_u£c ) { 634  £cÚds ; 636 £cÚds = `©oi ( w©chdog_u£c ) / (1000 * 1000); 637 `šfo ("W©chdogimeouˆi %d secÚds", £cÚds ); 639 w©chdog = `g_timeout_add_£cÚds_fuÎ ( G_PRIORITY_HIGH , 640 £cÚds / 2, 641 w©chdog_ÿÎback , 642 NULL , NULL); 644 w©chdog = 0; 646 `g_maš_loÝ_run ( ev’t_loÝ ); 648 `sd_nÙify (0, "STATUS=Quitting"); 650 `g_sourû_»move ( sigÇl ); 652 `¶ugš_þ—nup (); 654 `btd_´ofže_þ—nup (); 655 `btd_ag’t_þ—nup (); 656 `btd_deviû_þ—nup (); 658 `ad­‹r_þ—nup (); 660 `g©t_þ—nup (); 662 `rfkžl_ex™ (); 664 `¡Ý_sdp_£rv” (); 666 `g_maš_loÝ_uÄef ( ev’t_loÝ ); 668 ià( maš_cÚf ) 669 `g_key_fže_ä“ ( maš_cÚf ); 671 `discÚÃù_dbus (); 673 `šfo ("Exit"); 675 ià( w©chdog > 0) 676 `g_sourû_»move ( w©chdog ); 678 `__btd_log_þ—nup (); 681 } } @src/oob.c 26  ~"ad­‹r.h " 27  ~"oob.h " 29  oob_»ad_cb_t gloÿl_oob_»ad_cb = NULL ; 31  $oob_»gi¡”_cb ( oob_»ad_cb_t cb ) 33 loÿl_oob_»ad_cb = cb ; 34 } } 36 #ifdeà __TIZEN_PATCH__ 37  $oob_»ad_loÿl_d©a_com¶‘e ( btd_ad­‹r * ad­‹r , ušt8_t * hash , 38 ušt8_t * ¿ndomiz” , * u£r_d©a ) 40  $oob_»ad_loÿl_d©a_com¶‘e ( btd_ad­‹r * ad­‹r , ušt8_t * hash , 41 ušt8_t * ¿ndomiz” ) 44 ià( loÿl_oob_»ad_cb ) 45 `loÿl_oob_»ad_cb ( ad­‹r , hash , ¿ndomiz” ); 46 } } @src/oob.h 26 (* toob_»ad_cb_t è( tbtd_ad­‹r * tad­‹r , tušt8_t * thash , 27 tušt8_t * t¿ndomiz” ); 29  `oob_»gi¡”_cb ( oob_»ad_cb_t cb ); 30 #ifdeà __TIZEN_PATCH__ 31  `oob_»ad_loÿl_d©a_com¶‘e ( btd_ad­‹r * ad­‹r , ušt8_t * hash , 32 ušt8_t * ¿ndomiz” , * u£r_d©a ); 34  `oob_»ad_loÿl_d©a_com¶‘e ( btd_ad­‹r * ad­‹r , ušt8_t * hash , 35 ušt8_t * ¿ndomiz” ); @src/oui.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~"oui.h " 30 #ifdeà HAVE_UDEV_HWDB_NEW 31  ~ 33 * $b©ocomp (cÚ¡ bdaddr_t * ba ) 35  udev *udev; 36  udev_hwdb * hwdb ; 37  udev_li¡_’Œy * h—d , * ’Œy ; 38  mod®Ÿs [11], * comp = NULL ; 40 `¥rštf ( mod®Ÿs , "OUI:%2.2X%2.2X%2.2X", ba -> b [5], ba->b[4], ba->b[3]); 42 udev = `udev_Ãw (); 43 ià(! udev ) 44  NULL ; 46 hwdb = `udev_hwdb_Ãw ( udev ); 47 ià(! hwdb ) 48  dÚe ; 50 h—d = `udev_hwdb_g‘_´Ý”t›s_li¡_’Œy ( hwdb , mod®Ÿs , 0); 52 `udev_li¡_’Œy_fÜ—ch ( ’Œy , h—d ) { 53 cÚ¡ * Çme = `udev_li¡_’Œy_g‘_Çme ( ’Œy ); 55 ià( Çme && ! `¡rcmp (name, "ID_OUI_FROM_DATABASE")) { 56 comp = `¡rdup ( `udev_li¡_’Œy_g‘_v®ue ( ’Œy )); 61 hwdb = `udev_hwdb_uÄef (hwdb); 63 dÚe : 64 udev = `udev_uÄef (udev); 66  comp ; 67 } } 69 * $b©ocomp (cÚ¡ bdaddr_t * ba ) 71  NULL ; 72 } } @src/oui.h 24  ~ 26 * b©ocomp (cÚ¡ bdaddr_t * ba ); @src/plugin.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<”ºo.h > 29  ~ 30  ~<¡ršg.h > 31  ~ 33  ~ 35  ~ 37  ~"btio/btio.h " 38  ~"¤c/¶ugš.h " 39  ~"¤c/log.h " 40  ~"¤c/hcid.h " 42  GSLi¡ * g¶ugšs = NULL ; 44  sblu‘oÙh_¶ugš { 45 * mhªdË ; 46 gboÞ—n maùive ; 47  blu‘oÙh_¶ugš_desc * mdesc ; 50  $com·»_´iÜ™y ( gcÚ¡poš‹r a , gcÚ¡poš‹¸ b ) 52 cÚ¡  blu‘oÙh_¶ugš * ¶ugš1 = a ; 53 cÚ¡  blu‘oÙh_¶ugš * ¶ugš2 = b ; 55  ¶ugš2 -> desc -> ´iÜ™y - ¶ugš1 ->desc->priority; 56 } } 58  gboÞ—n $add_¶ugš (* hªdË ,  blu‘oÙh_¶ugš_desc * desc ) 60  blu‘oÙh_¶ugš * ¶ugš ; 62 ià( desc -> š™ =ð NULL ) 63  FALSE ; 65 ià( `g_¡r_equ® ( desc -> v”siÚ , VERSION è=ð FALSE ) { 66 `”rÜ ("V”siÚ mism©ch fÜ %s", desc -> Çme ); 67  FALSE ; 70 `DBG ("Lßdšg % ¶ugš", desc -> Çme ); 72 ¶ugš = `g_Œy_Ãw0 ( blu‘oÙh_¶ugš , 1); 73 ià( ¶ugš =ð NULL ) 74  FALSE ; 76 ¶ugš -> hªdË = handle; 77 ¶ugš -> aùive = FALSE ; 78 ¶ugš -> desc = desc; 80 `__btd_’abË_debug ( desc -> debug_¡¬t , desc-> debug_¡Ý ); 82 ¶ugšs = `g_¦i¡_š£¹_sÜ‹d Õlugšs, ¶ugš , com·»_´iÜ™y ); 84  TRUE ; 85 } } 87  gboÞ—n $’abË_¶ugš (cÚ¡ * Çme , ** þi_’abË , 88 ** þi_di§bË ) 90 ià( þi_di§bË ) { 91 ; * þi_di§bË ; cli_disable++) 92 ià( `g_·‰”n_m©ch_sim¶e (* þi_di§bË , Çme )) 94 ià(* þi_di§bË ) { 95 `šfo ("Exþudšg (þiè%s", Çme ); 96  FALSE ; 100 ià( þi_’abË ) { 101 ; * þi_’abË ; cli_enable++) 102 ià( `g_·‰”n_m©ch_sim¶e (* þi_’abË , Çme )) 104 ià(!* þi_’abË ) { 105 `šfo ("IgnÜšg (þiè%s", Çme ); 106  FALSE ; 110  TRUE ; 111 } } 113  ~"¤c/bužtš.h " 115 gboÞ—n $¶ugš_š™ (cÚ¡ * ’abË , cÚ¡ * di§bË ) 117 GSLi¡ * li¡ ; 118 GDœ * dœ ; 119 cÚ¡ * fže ; 120 ** þi_di§bËd , ** þi_’abËd ; 121  i ; 125 `bt_io_”rÜ_qu¬k (); 127 ià( ’abË ) 128 þi_’abËd = `g_¡r¥l™_£t ( ’abË , ", ", -1); 130 þi_’abËd = NULL ; 132 ià( di§bË ) 133 þi_di§bËd = `g_¡r¥l™_£t ( di§bË , ", ", -1); 135 þi_di§bËd = NULL ; 137 `DBG ("Loading builtin…lugins"); 139  i = 0; __blu‘oÙh_bužtš [i]; i++) { 140 ià(! `’abË_¶ugš ( __blu‘oÙh_bužtš [ i ]-> Çme , þi_’abËd , 141 þi_di§bËd )) 144 `add_¶ugš ( NULL , __blu‘oÙh_bužtš [ i ]); 147 ià( `¡¾’ ( PLUGINDIR ) == 0) 148  ¡¬t ; 150 `DBG ("Lßdšg…lugš %s", PLUGINDIR ); 152 dœ = `g_dœ_Ý’ ( PLUGINDIR , 0, NULL ); 153 ià(! dœ ) 154  ¡¬t ; 156 ( fže = `g_dœ_»ad_Çme ( dœ )è!ð NULL ) { 157  blu‘oÙh_¶ugš_desc * desc ; 158 * hªdË ; 159 * fž’ame ; 161 ià( `g_¡r_has_´efix ( fže , "lib"è=ð TRUE || 162 `g_¡r_has_suffix ( fže , ".so"è=ð FALSE ) 165 fž’ame = `g_bužd_fž’ame ( PLUGINDIR , fže , NULL ); 167 hªdË = `dlÝ’ ( fž’ame , RTLD_NOW ); 168 ià( hªdË =ð NULL ) { 169 `”rÜ ("Cª'ˆlßd…lugš %s: %s", fž’ame , 170 `dË¼Ü ()); 171 `g_ä“ ( fž’ame ); 175 `g_ä“ ( fž’ame ); 177 desc = `dlsym ( hªdË , "bluetooth_plugin_desc"); 178 ià( desc =ð NULL ) { 179 `”rÜ ("Cª'ˆlßd…lugš desütiÚ: %s", `dË¼Ü ()); 180 `dlþo£ ( hªdË ); 184 ià(! `’abË_¶ugš ( desc -> Çme , þi_’abËd , þi_di§bËd )) { 185 `dlþo£ ( hªdË ); 189 ià( `add_¶ugš ( hªdË , desc è=ð FALSE ) 190 `dlþo£ ( hªdË ); 193 `g_dœ_þo£ ( dœ ); 195 ¡¬t : 196  li¡ = ¶ugšs ;†i¡;†i¡ =†i¡-> Ãxt ) { 197  blu‘oÙh_¶ugš * ¶ugš = li¡ -> d©a ; 198  ”r ; 200 ”r = ¶ugš -> desc -> `š™ (); 201 ià( ”r < 0) { 202 ià( ”r =ð- ENOSYS ) 203 `w¬n ("System does‚ot support %s…lugin", 204 ¶ugš -> desc -> Çme ); 206 `”rÜ ("Failedo init %s…lugin", 207 ¶ugš -> desc -> Çme ); 211 ¶ugš -> aùive = TRUE ; 214 `g_¡rä“v ( þi_’abËd ); 215 `g_¡rä“v ( þi_di§bËd ); 217  TRUE ; 218 } } 220  $¶ugš_þ—nup () 222 GSLi¡ * li¡ ; 224 `DBG ("Cleanup…lugins"); 226  li¡ = ¶ugšs ;†i¡;†i¡ =†i¡-> Ãxt ) { 227  blu‘oÙh_¶ugš * ¶ugš = li¡ -> d©a ; 229 ià( ¶ugš -> aùive =ð TRUE &&…lugš-> desc -> ex™ ) 230 ¶ugš -> desc -> `ex™ (); 232 ià( ¶ugš -> hªdË !ð NULL ) 233 `dlþo£ ( ¶ugš -> hªdË ); 235 `g_ä“ ( ¶ugš ); 238 `g_¦i¡_ä“ ( ¶ugšs ); 239 } } @src/plugin.h 23  #BLUETOOTH_PLUGIN_PRIORITY_LOW -100 ) 24  #BLUETOOTH_PLUGIN_PRIORITY_DEFAULT 0 ) 25  #BLUETOOTH_PLUGIN_PRIORITY_HIGH 100 ) 27  sblu‘oÙh_¶ugš_desc { 28 cÚ¡ * mÇme ; 29 cÚ¡ * mv”siÚ ; 30  m´iÜ™y ; 31 (* mš™ ) (); 32 (* mex™ ) (); 33 * mdebug_¡¬t ; 34 * mdebug_¡Ý ; 37 #ifdeà BLUETOOTH_PLUGIN_BUILTIN 38  #BLUETOOTH_PLUGIN_DEFINE ( Çme , v”siÚ , ´iÜ™y , š™ , ex™ ) \ 39  blu‘oÙh_¶ugš_desc __blu‘oÙh_bužtš_ ## Çme = { \ 40 #Çme, v”siÚ , ´iÜ™y , š™ , ex™ \ 41 }; ) 43  #BLUETOOTH_PLUGIN_DEFINE ( Çme , v”siÚ , ´iÜ™y , š™ , ex™ ) \ 44  btd_debug_desc __¡¬t___debug [] \ 45 `__©Œibu‹__ (( w—k , `visibž™y ("hidden"))); \ 46  btd_debug_desc __¡Ý___debug [] \ 47 `__©Œibu‹__ (( w—k , `visibž™y ("hidden"))); \ 48  blu‘oÙh_¶ugš_desc bluetooth_plugin_desc \ 49 `__©Œibu‹__ (( `visibž™y ("default"))); \ 50  blu‘oÙh_¶ugš_desc bluetooth_plugin_desc = { \ 51 #Çme, v”siÚ , ´iÜ™y , š™ , ex™ , \ 52 __¡¬t___debug , __¡Ý___debug \ 53 }; ) @src/profile.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dboÞ.h > 29  ~<¡dšt.h > 30  ~<¡dlib.h > 31  ~<”ºo.h > 33  ~ 34  ~ 35  ~ 37  ~ 38  ~ 39  ~ 41  ~"btio/btio.h " 42  ~"lib/uuid.h " 43  ~"sdpd.h " 44  ~"log.h " 45  ~"”rÜ.h " 46  ~"uuid-h–³r.h " 47  ~"dbus-commÚ.h " 48  ~"sdp-þ›Á.h " 49  ~"sdp-xml.h " 50  ~"ad­‹r.h " 51  ~"deviû.h " 52  ~"´ofže.h " 53  ~"£rviû.h " 55  #DUN_DEFAULT_CHANNEL 1 ) 56  #SPP_DEFAULT_CHANNEL 3 ) 57  #HFP_HF_DEFAULT_CHANNEL 7 ) 58  #OPP_DEFAULT_CHANNEL 9 ) 59  #FTP_DEFAULT_CHANNEL 10 ) 60  #BIP_DEFAULT_CHANNEL 11 ) 61  #HSP_AG_DEFAULT_CHANNEL 12 ) 62  #HFP_AG_DEFAULT_CHANNEL 13 ) 63  #SYNC_DEFAULT_CHANNEL 14 ) 64  #PBAP_DEFAULT_CHANNEL 15 ) 65  #MAS_DEFAULT_CHANNEL 16 ) 66  #MNS_DEFAULT_CHANNEL 17 ) 68  #BTD_PROFILE_PSM_AUTO -1 ) 69  #BTD_PROFILE_CHAN_AUTO -1 ) 71  #HFP_HF_RECORD \ 72 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\" /> \ \ <©Œibu‹ id=\"0x0311\"> \ \ \ " ) 112  #HFP_AG_RECORD \ 113 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\" /> \ \ <©Œibu‹ id=\"0x0311\"> \ \ \ <©Œibu‹ id=\"0x0301\" > \ \ \ " ) 156  #HSP_AG_RECORD \ 157 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\" /> \ \ " ) 194 #ifdeà __TIZEN_PATCH__ 195  #SPP_RECORD \ 196 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ %s \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ %s \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\" /> \ \ " ) 233  #LANG_SEQ \ 234 "<©Œibu‹ id=\"0x0006\"> \ <£qu’û> \ \ \ \ \ " ) 242  #SPP_RECORD \ 243 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ %s \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\" /> \ \ " ) 281  #DUN_RECORD \ 282 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\" /> \ \ " ) 319 #ifdeà __TIZEN_PATCH__ 320  #OPP_RECORD \ 321 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ <£qu’û> \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0303\"> \ <£qu’û> \ \ \ \ \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\" /> \ \ " ) 371  #OPP_RECORD \ 372 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ <£qu’û> \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0303\"> \ <£qu’û> \ \ \ \ \ \ \ \ \ \ <©Œibu‹ id=\"0x0200\"> \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\" /> \ \ " ) 426  #FTP_RECORD \ 427 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ <£qu’û> \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0200\"> \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\" /> \ \ " ) 469  #PCE_RECORD \ 470 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\" /> \ \ " ) 495 #ifdeà PBAP_SIM_ENABLE 496  #PBAP_ACCESS "0x03" ) 498  #PBAP_ACCESS "0x01" ) 502  #PSE_RECORD \ 503 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ <£qu’û> \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\" /> \ \ <©Œibu‹ id=\"0x0314\"> \ \ \ <©Œibu‹ id=\"0x0317\"> \ \ \ " ) 548  #MAS_RECORD \ 549 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ <£qu’û> \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\"/> \ \ <©Œibu‹ id=\"0x0315\"> \ \ \ <©Œibu‹ id=\"0x0316\"> \ \ \ <©Œibu‹ id=\"0x0317\"> \ \ \ " ) 597  #MNS_RECORD \ 598 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ <£qu’û> \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\"/> \ \ <©Œibu‹ id=\"0x0200\"> \ \ \ <©Œibu‹ id=\"0x0317\"> \ \ \ " ) 643  #SYNC_RECORD \ 644 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ \ <£qu’û> \ \ \ \ <£qu’û> \ \ \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\"/> \ \ <©Œibu‹ id=\"0x0301\"> \ <£qu’û> \ \ \ \ " ) 688  #GENERIC_RECORD \ 689 " \ <»cÜd> \ <©Œibu‹ id=\"0x0001\"> \ <£qu’û> \ \ \ \ <©Œibu‹ id=\"0x0004\"> \ <£qu’û> \ <£qu’û> \ \ %s \ \ %s \ \ \ <©Œibu‹ id=\"0x0005\"> \ <£qu’û> \ \ \ \ %s \ <©Œibu‹ id=\"0x0100\"> \ <‹xˆv®ue=\"%s\" /> \ \ " ) 716  gext_io ; 718  sext_´ofže { 719  btd_´ofže mp ; 721 * mÇme ; 722 * mowÃr ; 723 * m·th ; 724 * muuid ; 725 * m£rviû ; 726 * mrÞe ; 728 * m»cÜd ; 729 *(* mg‘_»cÜd )( ext_´ofže * mext ,  ext_io * ml2ÿp , 730  ext_io * mrfcomm ); 732 * m»mÙe_uuid ; 734 gušt mid ; 736 BtIOMode mmode ; 737 BtIOSecLev– m£c_Ëv– ; 738 boÞ mauthÜize ; 740 boÞ m’abË_þ›Á ; 741 boÞ m’abË_£rv” ; 743  mloÿl_psm ; 744  mloÿl_chª ; 746 ušt16_t m»mÙe_psm ; 747 ušt8_t m»mÙe_chª ; 749 ušt16_t mv”siÚ ; 750 ušt16_t mã©u»s ; 752 GSLi¡ * m»cÜds ; 753 GSLi¡ * m£rv”s ; 754 GSLi¡ * mcÚns ; 756 GSLi¡ * mcÚÃùs ; 759  sext_io { 760  ext_´ofže * mext ; 761  m´Ùo ; 762 GIOChªÃl * mio ; 763 gušt mio_id ; 764  btd_ad­‹r * mad­‹r ; 765  btd_deviû * mdeviû ; 766  btd_£rviû * m£rviû ; 768 boÞ m»sÞvšg ; 769 boÞ mcÚÃùed ; 771 ušt16_t mv”siÚ ; 772 ušt16_t mã©u»s ; 774 ušt16_t mpsm ; 775 ušt8_t mchª ; 777 gušt mauth_id ; 778 DBusP’dšgC®l * m³ndšg ; 781  sext_»cÜd { 782  btd_ad­‹r * mad­‹r ; 783 ušt32_t mhªdË ; 786  sbtd_´ofže_cu¡om_´Ý”ty { 787 * muuid ; 788 * mty³ ; 789 * mÇme ; 790 btd_´ofže_´Ý_exi¡s mexi¡s ; 791 btd_´ofže_´Ý_g‘ mg‘ ; 792 * mu£r_d©a ; 795  GSLi¡ * gcu¡om_´Ýs = NULL ; 797  GSLi¡ * g´ofžes = NULL ; 798  GSLi¡ * gext_´ofžes = NULL ; 800  btd_´ofže_fÜ—ch ((* func )( btd_´ofže * p , * d©a ), 801 * d©a ) 803 GSLi¡ * l , * Ãxt ; 805  l = ´ofžes ;† !ð NULL ;† = Ãxt ) { 806  btd_´ofže * ´ofže = l -> d©a ; 808 Ãxt = `g_¦i¡_Ãxt ( l ); 810 `func ( ´ofže , d©a ); 813  l = ext_´ofžes ;† !ð NULL ;† = Ãxt ) { 814  ext_´ofže * ´ofže = l -> d©a ; 816 Ãxt = `g_¦i¡_Ãxt ( l ); 818 `func (& ´ofže -> p , d©a ); 820 } } 822  $btd_´ofže_»gi¡” ( btd_´ofže * ´ofže ) 824 ´ofžes = `g_¦i¡_­³nd Õrofžes, ´ofže ); 826 } } 828  $btd_´ofže_uÄegi¡” ( btd_´ofže * ´ofže ) 830 ´ofžes = `g_¦i¡_»move Õrofžes, ´ofže ); 831 } } 833  ext_´ofže * $fšd_ext_´ofže (cÚ¡ * owÃr , 834 cÚ¡ * ·th ) 836 GSLi¡ * l ; 838  l = ext_´ofžes ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 839  ext_´ofže * ext = l -> d©a ; 841 ià(! `g_¡r_equ® ( ext -> owÃr , owner)) 844 ià( `g_¡r_equ® ( ext -> ·th ,…ath)) 845  ext ; 848  NULL ; 849 } } 851  $ext_io_de¡roy ( gpoš‹r p ) 853  ext_io *ext_iØð p ; 855 ià( ext_io -> io_id > 0) 856 `g_sourû_»move ( ext_io -> io_id ); 858 ià( ext_io -> io ) { 859 `g_io_chªÃl_shutdown ( ext_io -> io , FALSE , NULL ); 860 `g_io_chªÃl_uÄef ( ext_io -> io ); 863 ià( ext_io -> auth_id != 0) 864 `btd_ÿnûl_authÜiz©iÚ ( ext_io -> auth_id ); 866 ià( ext_io -> ³ndšg ) { 867 `dbus_³ndšg_ÿÎ_ÿnûl ( ext_io -> ³ndšg ); 868 `dbus_³ndšg_ÿÎ_uÄef ( ext_io -> ³ndšg ); 871 ià( ext_io -> »sÞvšg ) 872 `bt_ÿnûl_discov”y ( `btd_ad­‹r_g‘_add»ss ( ext_io -> ad­‹r ), 873 `deviû_g‘_add»ss ( ext_io -> deviû )); 875 ià( ext_io -> ad­‹r ) 876 `btd_ad­‹r_uÄef ( ext_io -> ad­‹r ); 878 ià( ext_io -> deviû ) 879 `btd_deviû_uÄef ( ext_io -> deviû ); 881 ià( ext_io -> £rviû ) 882 `btd_£rviû_uÄef ( ext_io -> £rviû ); 884 `g_ä“ ( ext_io ); 885 } } 887  gboÞ—n $ext_io_discÚÃùed ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 888 gpoš‹r u£r_d©a ) 890  ext_io * cÚn = u£r_d©a ; 891  ext_´ofže * ext = cÚn ->ext; 892 GE¼Ü * g”r = NULL ; 893  addr [18]; 895 ià( cÚd & G_IO_NVAL ) 896  FALSE ; 898 `bt_io_g‘ ( io , & g”r , BT_IO_OPT_DEST , addr , BT_IO_OPT_INVALID ); 899 ià( g”r !ð NULL ) { 900 `”rÜ ("Unableo get io data for %s: %s", 901 ext -> Çme , g”r -> mes§ge ); 902 `g_”rÜ_ä“ ( g”r ); 903  drÝ ; 906 `DBG ("% discÚÃùed from %s", ext -> Çme , addr ); 907 drÝ : 908 ià( cÚn -> £rviû ) 909 `btd_£rviû_discÚÃùšg_com¶‘e ( cÚn -> £rviû , 0); 911 ext -> cÚns = `g_¦i¡_»move Óxt->cÚns, cÚn ); 912 `ext_io_de¡roy ( cÚn ); 913  FALSE ; 914 } } 916  $Ãw_cÚn_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 918  ext_io * cÚn = u£r_d©a ; 919  ext_´ofže * ext = cÚn ->ext; 920 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 921 DBusE¼Ü ”r ; 923 `dbus_”rÜ_š™ (& ”r ); 924 `dbus_£t_”rÜ_äom_mes§ge (& ”r , »¶y ); 926 `dbus_mes§ge_uÄef ( »¶y ); 928 `dbus_³ndšg_ÿÎ_uÄef ( cÚn -> ³ndšg ); 929 cÚn -> ³ndšg = NULL ; 931 ià(! `dbus_”rÜ_is_£t (& ”r )) { 932 ià( cÚn -> £rviû ) 933 `btd_£rviû_cÚÃùšg_com¶‘e ( cÚn -> £rviû , 0); 935 cÚn -> cÚÃùed = Œue ; 939 `”rÜ ("% »¶›d w™h‡À”rÜ: %s, %s", ext -> Çme , 940 ”r . Çme ,ƒ¼. mes§ge ); 942 ià( cÚn -> £rviû ) 943 `btd_£rviû_cÚÃùšg_com¶‘e ( cÚn -> £rviû , - ECONNREFUSED ); 945 `dbus_”rÜ_ä“ (& ”r ); 947 ext -> cÚns = `g_¦i¡_»move Óxt->cÚns, cÚn ); 948 `ext_io_de¡roy ( cÚn ); 949 } } 951  $discÚn_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 953  ext_io * cÚn = u£r_d©a ; 954  ext_´ofže * ext = cÚn ->ext; 955 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 956 DBusE¼Ü ”r ; 958 `dbus_”rÜ_š™ (& ”r ); 959 `dbus_£t_”rÜ_äom_mes§ge (& ”r , »¶y ); 961 `dbus_mes§ge_uÄef ( »¶y ); 963 `dbus_³ndšg_ÿÎ_uÄef ( cÚn -> ³ndšg ); 964 cÚn -> ³ndšg = NULL ; 966 ià(! `dbus_”rÜ_is_£t (& ”r )) { 967 ià( cÚn -> £rviû ) 968 `btd_£rviû_discÚÃùšg_com¶‘e ( cÚn -> £rviû , 0); 970  discÚÃù ; 973 `”rÜ ("% »¶›d w™h‡À”rÜ: %s, %s", ext -> Çme , 974 ”r . Çme ,ƒ¼. mes§ge ); 976 ià( cÚn -> £rviû ) 977 `btd_£rviû_discÚÃùšg_com¶‘e ( cÚn -> £rviû , 978 - ECONNREFUSED ); 980 `dbus_”rÜ_ä“ (& ”r ); 982 discÚÃù : 983 ext -> cÚns = `g_¦i¡_»move Óxt->cÚns, cÚn ); 984 `ext_io_de¡roy ( cÚn ); 985 } } 987  s´Ý_­³nd_d©a { 988 DBusMes§geI‹r * mdiù ; 989  ext_io * mio ; 992  $­³nd_´Ý ( gpoš‹r a , gpoš‹¸ b ) 994  btd_´ofže_cu¡om_´Ý”ty * p = a ; 995  ´Ý_­³nd_d©a * d©a = b ; 996 DBusMes§geI‹r ’Œy , v®ue , * diù = d©a ->dict; 997  btd_deviû * dev = d©a -> io -> deviû ; 998  ext_´ofže * ext = d©a -> io ->ext; 999 cÚ¡ * uuid = ext -> £rviû ?ƒxt->service :ƒxt->uuid; 1001 ià( `¡rÿ£cmp ( p -> uuid , uuid) != 0) 1004 ià( p -> exi¡s && !p-> `exi¡s Õ-> uuid , dev ,…-> u£r_d©a )) 1007 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , NULL , 1008 & ’Œy ); 1009 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & p -> Çme ); 1010 `dbus_mes§ge_™”_Ý’_cÚš” (& ’Œy , DBUS_TYPE_VARIANT , p -> ty³ , 1011 & v®ue ); 1013 p -> `g‘ Õ-> uuid , dev , & v®ue ,…-> u£r_d©a ); 1015 `dbus_mes§ge_™”_þo£_cÚš” (& ’Œy , & v®ue ); 1016 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & ’Œy ); 1017 } } 1019  ušt16_t $g‘_suµÜ‹d_ã©u»s (cÚ¡ sdp_»cÜd_t * »c ) 1021 sdp_d©a_t * d©a ; 1023 d©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_SUPPORTED_FEATURES ); 1024 ià(! d©a || d©a-> dtd !ð SDP_UINT16 ) 1027  d©a -> v® . ušt16 ; 1028 } } 1030  ušt16_t $g‘_´ofže_v”siÚ (cÚ¡ sdp_»cÜd_t * »c ) 1032 sdp_li¡_t * descs ; 1033 ušt16_t v”siÚ ; 1035 ià( `sdp_g‘_´ofže_descs ( »c , & descs ) < 0) 1038 ià( descs && descs-> d©a ) { 1039 sdp_´ofže_desc_t * desc = descs -> d©a ; 1040 v”siÚ = desc ->version; 1042 v”siÚ = 0; 1045 `sdp_li¡_ä“ ( descs , ä“ ); 1047  v”siÚ ; 1048 } } 1050  boÞ $£nd_Ãw_cÚÃùiÚ ( ext_´ofže * ext ,  ext_io * cÚn ) 1052 DBusMes§ge * msg ; 1053 DBusMes§geI‹r ™” , diù ; 1054  ´Ý_­³nd_d©a d©a = { & diù , cÚn }; 1055 cÚ¡ * »mÙe_uuid = ext ->remote_uuid; 1056 cÚ¡ sdp_»cÜd_t * »c ; 1057 cÚ¡ * ·th ; 1058  fd ; 1060 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ext -> owÃr ,ƒxt-> ·th , 1063 ià(! msg ) { 1064 `”rÜ ("UÇbËØü—‹ NewCÚÃùiÚ c®ÈfÜ %s", ext -> Çme ); 1065  çl£ ; 1068 ià( »mÙe_uuid ) { 1069 »c = `btd_deviû_g‘_»cÜd ( cÚn -> deviû , »mÙe_uuid ); 1070 ià( »c ) { 1071 cÚn -> ã©u»s = `g‘_suµÜ‹d_ã©u»s ( »c ); 1072 cÚn -> v”siÚ = `g‘_´ofže_v”siÚ ( »c ); 1076 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 1078 ·th = `deviû_g‘_·th ( cÚn -> deviû ); 1079 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 1081 fd = `g_io_chªÃl_unix_g‘_fd ( cÚn -> io ); 1082 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_UNIX_FD , & fd ); 1084 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , "{sv}", & diù ); 1086 ià( cÚn -> v”siÚ ) 1087 `diù_­³nd_’Œy (& diù , "V”siÚ", DBUS_TYPE_UINT16 , 1088 & cÚn -> v”siÚ ); 1090 ià( cÚn -> ã©u»s ) 1091 `diù_­³nd_’Œy (& diù , "F—tu»s", DBUS_TYPE_UINT16 , 1092 & cÚn -> ã©u»s ); 1094 `g_¦i¡_fÜ—ch ( cu¡om_´Ýs , ­³nd_´Ý , & d©a ); 1096 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & diù ); 1098 ià(! `g_dbus_£nd_mes§ge_w™h_»¶y ( `btd_g‘_dbus_cÚÃùiÚ (), 1099 msg , & cÚn -> ³ndšg , -1)) { 1100 `”rÜ ("%s: s’dšg NewCÚÃùiÚ fažed", ext -> Çme ); 1101 `dbus_mes§ge_uÄef ( msg ); 1102  çl£ ; 1105 `dbus_mes§ge_uÄef ( msg ); 1107 `dbus_³ndšg_ÿÎ_£t_nÙify ( cÚn -> ³ndšg , Ãw_cÚn_»¶y , cÚn, NULL ); 1109  Œue ; 1110 } } 1112  $ext_cÚÃù ( GIOChªÃl * io , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 1114  ext_io * cÚn = u£r_d©a ; 1115  ext_´ofže * ext = cÚn ->ext; 1116 GE¼Ü * io_”r = NULL ; 1117  addr [18]; 1119 ià(! `bt_io_g‘ ( io , & io_”r , 1120 BT_IO_OPT_DEST , addr , 1121 BT_IO_OPT_INVALID )) { 1122 `”rÜ ("UÇbËØg‘ cÚÃù d©¨fÜ %s: %s", ext -> Çme , 1123 io_”r -> mes§ge ); 1124 ià( ”r ) { 1125 `g_”rÜ_ä“ ( io_”r ); 1126 io_”r = NULL ; 1128 ”r = io_”r ; 1130  drÝ ; 1133 ià( ”r !ð NULL ) { 1134 `”rÜ ("% çžedØcÚÃùØ%s: %s", ext -> Çme , addr , 1135 ”r -> mes§ge ); 1136  drÝ ; 1139 `DBG ("% cÚÃùedØ%s", ext -> Çme , addr ); 1141 ià( cÚn -> io_id == 0) { 1142 GIOCÚd™iÚ cÚd = G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1143 cÚn -> io_id = `g_io_add_w©ch ( io , cÚd , ext_io_discÚÃùed , 1144 cÚn ); 1147 ià( `£nd_Ãw_cÚÃùiÚ ( ext , cÚn )) 1150 drÝ : 1151 ià( cÚn -> £rviû ) 1152 `btd_£rviû_cÚÃùšg_com¶‘e ( cÚn -> £rviû , 1153 ”r ? -”r-> code : - EIO ); 1155 ià( io_”r ) 1156 `g_”rÜ_ä“ ( io_”r ); 1158 ext -> cÚns = `g_¦i¡_»move Óxt->cÚns, cÚn ); 1159 `ext_io_de¡roy ( cÚn ); 1160 } } 1162  $ext_auth ( DBusE¼Ü * ”r , * u£r_d©a ) 1164  ext_io * cÚn = u£r_d©a ; 1165  ext_´ofže * ext = cÚn ->ext; 1166 GE¼Ü * g”r = NULL ; 1167  addr [18]; 1169 cÚn -> auth_id = 0; 1171 `bt_io_g‘ ( cÚn -> io , & g”r , BT_IO_OPT_DEST , addr , BT_IO_OPT_INVALID ); 1172 ià( g”r !ð NULL ) { 1173 `”rÜ ("Unableo get connect data for %s: %s", 1174 ext -> Çme , g”r -> mes§ge ); 1175 `g_”rÜ_ä“ ( g”r ); 1176  drÝ ; 1179 ià( ”r && `dbus_”rÜ_is_£t (err)) { 1180 `”rÜ ("% »jeùed %s: %s", ext -> Çme , addr , ”r -> mes§ge ); 1181  drÝ ; 1184 ià(! `bt_io_acû± ( cÚn -> io , ext_cÚÃù , cÚn, NULL , & g”r )) { 1185 `”rÜ ("bt_io_acû±: %s", g”r -> mes§ge ); 1186 `g_”rÜ_ä“ ( g”r ); 1187  drÝ ; 1190 `DBG ("% authÜizedØcÚÃùØ%s", addr , ext -> Çme ); 1194 drÝ : 1195 ext -> cÚns = `g_¦i¡_»move Óxt->cÚns, cÚn ); 1196 `ext_io_de¡roy ( cÚn ); 1197 } } 1199  ext_io * $ü—‹_cÚn ( ext_io * £rv” , GIOChªÃl * io , 1200 bdaddr_t * ¤c , bdaddr_ˆ* d¡ ) 1202  btd_deviû * deviû ; 1203  btd_£rviû * £rviû ; 1204  ext_io * cÚn ; 1205 GIOCÚd™iÚ cÚd ; 1206  addr [18]; 1208 deviû = `btd_ad­‹r_fšd_deviû ( £rv” -> ad­‹r , d¡ , BDADDR_BREDR ); 1209 ià( deviû =ð NULL ) { 1210 `ba2¡r ( d¡ , addr ); 1211 `”rÜ ("% deviû % nÙ found", £rv” -> ext -> Çme , addr ); 1212  NULL ; 1216 ià(! £rv” -> ext -> ’abË_þ›Á ) { 1217 £rviû = NULL ; 1218  dÚe ; 1221 `btd_deviû_add_uuid ( deviû , £rv” -> ext -> »mÙe_uuid ); 1222 £rviû = `btd_deviû_g‘_£rviû ( deviû , £rv” -> ext -> »mÙe_uuid ); 1223 ià( £rviû =ð NULL ) { 1224 `ba2¡r ( d¡ , addr ); 1225 `”rÜ ("% £rviû‚Ù found fÜ deviû %s", £rv” -> ext -> Çme , 1226 addr ); 1227  NULL ; 1230 dÚe : 1231 cÚn = `g_Ãw0 ( ext_io , 1); 1232 cÚn -> io = `g_io_chªÃl_»f (io); 1233 cÚn -> ´Ùo = £rv” ->proto; 1234 cÚn -> ext = £rv” ->ext; 1235 cÚn -> ad­‹r = `btd_ad­‹r_»f ( £rv” ->adapter); 1236 cÚn -> deviû = `btd_deviû_»f (device); 1238 ià( £rviû ) 1239 cÚn -> £rviû = `btd_£rviû_»f (service); 1241 cÚd = G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1242 cÚn -> io_id = `g_io_add_w©ch ( io , cÚd , ext_io_discÚÃùed , conn); 1244  cÚn ; 1245 } } 1247  $ext_cÚfœm ( GIOChªÃl * io , gpoš‹r u£r_d©a ) 1249  ext_io * £rv” = u£r_d©a ; 1250  ext_´ofže * ext = £rv” ->ext; 1251 cÚ¡ * uuid = ext -> £rviû ?ƒxt->service :ƒxt->uuid; 1252  ext_io * cÚn ; 1253 GE¼Ü * g”r = NULL ; 1254 bdaddr_t ¤c , d¡ ; 1255  addr [18]; 1257 `bt_io_g‘ ( io , & g”r , 1258 BT_IO_OPT_SOURCE_BDADDR , & ¤c , 1259 BT_IO_OPT_DEST_BDADDR , & d¡ , 1260 BT_IO_OPT_DEST , addr , 1261 BT_IO_OPT_INVALID ); 1262 ià( g”r !ð NULL ) { 1263 `”rÜ ("% çžedØg‘ cÚÃù d©a: %s", ext -> Çme , 1264 g”r -> mes§ge ); 1265 `g_”rÜ_ä“ ( g”r ); 1269 `DBG ("šcomšg cÚÃù from %s", addr ); 1271 cÚn = `ü—‹_cÚn ( £rv” , io , & ¤c , & d¡ ); 1272 ià( cÚn =ð NULL ) 1275 cÚn -> auth_id = `btd_»que¡_authÜiz©iÚ (& ¤c , & d¡ , uuid , ext_auth , 1276 cÚn ); 1277 ià( cÚn -> auth_id == 0) { 1278 `”rÜ ("% authÜiz©iÚ fažu»", ext -> Çme ); 1279 `ext_io_de¡roy ( cÚn ); 1283 ext -> cÚns = `g_¦i¡_­³nd Óxt->cÚns, cÚn ); 1285 `DBG ("% authÜizšg cÚÃùiÚ from %s", ext -> Çme , addr ); 1286 } } 1288  $ext_dœeù_cÚÃù ( GIOChªÃl * io , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 1290  ext_io * £rv” = u£r_d©a ; 1291  ext_´ofže * ext = £rv” ->ext; 1292 GE¼Ü * g”r = NULL ; 1293  ext_io * cÚn ; 1294 bdaddr_t ¤c , d¡ ; 1296 `bt_io_g‘ ( io , & g”r , 1297 BT_IO_OPT_SOURCE_BDADDR , & ¤c , 1298 BT_IO_OPT_DEST_BDADDR , & d¡ , 1299 BT_IO_OPT_INVALID ); 1300 ià( g”r !ð NULL ) { 1301 `”rÜ ("% çžedØg‘ cÚÃù d©a: %s", ext -> Çme , 1302 g”r -> mes§ge ); 1303 `g_”rÜ_ä“ ( g”r ); 1307 cÚn = `ü—‹_cÚn ( £rv” , io , & ¤c , & d¡ ); 1308 ià( cÚn =ð NULL ) 1311 ext -> cÚns = `g_¦i¡_­³nd Óxt->cÚns, cÚn ); 1313 `ext_cÚÃù ( io , ”r , cÚn ); 1314 } } 1316  ušt32_t $ext_»gi¡”_»cÜd ( ext_´ofže * ext , 1317  ext_io * l2ÿp , 1318  ext_io * rfcomm , 1319  btd_ad­‹r * a ) 1321 sdp_»cÜd_t * »c ; 1322 * dyn_»cÜd = NULL ; 1323 cÚ¡ * »cÜd = ext ->record; 1325 ià(! »cÜd && ext -> g‘_»cÜd ) { 1326 dyn_»cÜd = ext -> `g‘_»cÜd Óxt, l2ÿp , rfcomm ); 1327 »cÜd = dyn_»cÜd ; 1330 ià(! »cÜd ) 1333 »c = `sdp_xml_·r£_»cÜd ( »cÜd , `¡¾’ (record)); 1335 `g_ä“ ( dyn_»cÜd ); 1337 ià(! »c ) { 1338 `”rÜ ("UÇbËØ·r£„ecÜd fÜ %s", ext -> Çme ); 1342 ià( `ad­‹r_£rviû_add ( a , »c ) < 0) { 1343 `”rÜ ("Failedo„egister service„ecord"); 1344 `sdp_»cÜd_ä“ ( »c ); 1348  »c -> hªdË ; 1349 } } 1351  ušt32_t $ext_¡¬t_£rv”s ( ext_´ofže * ext , 1352  btd_ad­‹r * ad­‹r ) 1354  ext_io * l2ÿp = NULL ; 1355  ext_io * rfcomm = NULL ; 1356 BtIOCÚfœm cÚfœm ; 1357 BtIOCÚÃù cÚÃù ; 1358 GE¼Ü * ”r = NULL ; 1359 GIOChªÃl * io ; 1361 ià( ext -> authÜize ) { 1362 cÚfœm = ext_cÚfœm ; 1363 cÚÃù = NULL ; 1365 cÚfœm = NULL ; 1366 cÚÃù = ext_dœeù_cÚÃù ; 1369 ià( ext -> loÿl_psm ) { 1370 ušt16_t psm ; 1372 ià( ext -> loÿl_psm > 0) 1373 psm = ext -> loÿl_psm ; 1375 psm = 0; 1377 l2ÿp = `g_Ãw0 ( ext_io , 1); 1378 l2ÿp -> ext =ƒxt; 1380 io = `bt_io_li¡’ ( cÚÃù , cÚfœm , l2ÿp , NULL , & ”r , 1381 BT_IO_OPT_SOURCE_BDADDR , 1382 `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 1383 BT_IO_OPT_MODE , ext -> mode , 1384 BT_IO_OPT_PSM , psm , 1385 BT_IO_OPT_SEC_LEVEL , ext -> £c_Ëv– , 1386 BT_IO_OPT_INVALID ); 1387 ià( ”r !ð NULL ) { 1388 `”rÜ ("L2CAP server failed for %s: %s", 1389 ext -> Çme , ”r -> mes§ge ); 1390 `g_ä“ ( l2ÿp ); 1391 l2ÿp = NULL ; 1392 `g_þ—r_”rÜ (& ”r ); 1393  çžed ; 1395 ià( psm == 0) 1396 `bt_io_g‘ ( io , NULL , BT_IO_OPT_PSM , & psm , 1397 BT_IO_OPT_INVALID ); 1398 l2ÿp -> io = io; 1399 l2ÿp -> ´Ùo = BTPROTO_L2CAP ; 1400 l2ÿp -> psm =…sm; 1401 l2ÿp -> ad­‹r = `btd_ad­‹r_»f (adapter); 1402 ext -> £rv”s = `g_¦i¡_­³nd Óxt->£rv”s, l2ÿp ); 1403 `DBG ("% li¡’šg oÀPSM %u", ext -> Çme , psm ); 1407 ià( ext -> loÿl_chª ) { 1408 ušt8_t chª ; 1410 ià( ext -> loÿl_chª > 0) 1411 chª = ext -> loÿl_chª ; 1413 chª = 0; 1415 rfcomm = `g_Ãw0 ( ext_io , 1); 1416 rfcomm -> ext =ƒxt; 1418 io = `bt_io_li¡’ ( cÚÃù , cÚfœm , rfcomm , NULL , & ”r , 1419 BT_IO_OPT_SOURCE_BDADDR , 1420 `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 1421 BT_IO_OPT_CHANNEL , chª , 1422 BT_IO_OPT_SEC_LEVEL , ext -> £c_Ëv– , 1423 BT_IO_OPT_INVALID ); 1424 ià( ”r !ð NULL ) { 1425 `”rÜ ("RFCOMM server failed for %s: %s", 1426 ext -> Çme , ”r -> mes§ge ); 1427 `g_ä“ ( rfcomm ); 1428 `g_þ—r_”rÜ (& ”r ); 1429  çžed ; 1431 ià( chª == 0) 1432 `bt_io_g‘ ( io , NULL , BT_IO_OPT_CHANNEL , & chª , 1433 BT_IO_OPT_INVALID ); 1434 rfcomm -> io = io; 1435 rfcomm -> ´Ùo = BTPROTO_RFCOMM ; 1436 rfcomm -> chª = chan; 1437 rfcomm -> ad­‹r = `btd_ad­‹r_»f (adapter); 1438 ext -> £rv”s = `g_¦i¡_­³nd Óxt->£rv”s, rfcomm ); 1439 `DBG ("% li¡’šg oÀchª %u", ext -> Çme , chª ); 1443  `ext_»gi¡”_»cÜd ( ext , l2ÿp , rfcomm , ad­‹r ); 1445 çžed : 1446 ià( l2ÿp ) { 1447 ext -> £rv”s = `g_¦i¡_»move Óxt->£rv”s, l2ÿp ); 1448 `ext_io_de¡roy ( l2ÿp ); 1452 } } 1454  ext_´ofže * $fšd_ext ( btd_´ofže * p ) 1456 GSLi¡ * l ; 1458 l = `g_¦i¡_fšd ( ext_´ofžes , p ); 1459 ià(! l ) 1460  NULL ; 1462  l -> d©a ; 1463 } } 1465 #ifdeà __TIZEN_PATCH__ 1466 gboÞ—n $ext_´ofže_is_»gi¡”ed_as_þ›Á_rÞe ( btd_´ofže * p ) 1468  ext_´ofže * ext = `fšd_ext ( p ); 1469 ià( ext &&ƒxt-> rÞe ) { 1470 if( `¡rÿ£cmp ( ext -> rÞe , "client") == 0) { 1471  TRUE ; 1473  FALSE ; 1476  FALSE ; 1477 } } 1480  $ext_ad­‹r_´obe ( btd_´ofže * p , 1481  btd_ad­‹r * ad­‹r ) 1483  ext_´ofže * ext ; 1484  ext_»cÜd * »c ; 1485 ušt32_t hªdË ; 1487 ext = `fšd_ext ( p ); 1488 ià(! ext ) 1489  - ENOENT ; 1491 `DBG ("\"%s\"…robed", ext -> Çme ); 1493 hªdË = `ext_¡¬t_£rv”s ( ext , ad­‹r ); 1494 ià(! hªdË ) 1497 »c = `g_Ãw0 ( ext_»cÜd , 1); 1498 »c -> ad­‹r = `btd_ad­‹r_»f (adapter); 1499 »c -> hªdË = handle; 1501 ext -> »cÜds = `g_¦i¡_­³nd Óxt->»cÜds, »c ); 1504 } } 1506  $ext_»move_»cÜds ( ext_´ofže * ext , 1507  btd_ad­‹r * ad­‹r ) 1509 GSLi¡ * l , * Ãxt ; 1511  l = ext -> »cÜds ;† !ð NULL ;† = Ãxt ) { 1512  ext_»cÜd * r = l -> d©a ; 1514 Ãxt = `g_¦i¡_Ãxt ( l ); 1516 ià( ad­‹r && r ->adapter !=‡dapter) 1519 ext -> »cÜds = `g_¦i¡_»move Óxt->»cÜds, r ); 1521 `ad­‹r_£rviû_»move ( ad­‹r , r -> hªdË ); 1522 `btd_ad­‹r_uÄef ( r -> ad­‹r ); 1523 `g_ä“ ( r ); 1525 } } 1527  $ext_ad­‹r_»move ( btd_´ofže * p , 1528  btd_ad­‹r * ad­‹r ) 1530  ext_´ofže * ext ; 1531 GSLi¡ * l , * Ãxt ; 1533 ext = `fšd_ext ( p ); 1534 ià(! ext ) 1537 `DBG ("\"%s\"„emoved", ext -> Çme ); 1539 `ext_»move_»cÜds ( ext , ad­‹r ); 1541  l = ext -> £rv”s ;† !ð NULL ;† = Ãxt ) { 1542  ext_io * £rv” = l -> d©a ; 1544 Ãxt = `g_¦i¡_Ãxt ( l ); 1546 ià( £rv” -> ad­‹r !=‡dapter) 1549 ext -> £rv”s = `g_¦i¡_»move Óxt->£rv”s, £rv” ); 1550 `ext_io_de¡roy ( £rv” ); 1552 } } 1554  $ext_deviû_´obe ( btd_£rviû * £rviû ) 1556  btd_´ofže * p = `btd_£rviû_g‘_´ofže ( £rviû ); 1557  ext_´ofže * ext ; 1559 ext = `fšd_ext ( p ); 1560 ià(! ext ) 1561  - ENOENT ; 1563 `DBG ("% ´obed w™h UUID %s", ext -> Çme , p -> »mÙe_uuid ); 1566 } } 1568  ext_io * $fšd_cÚÃùiÚ ( ext_´ofže * ext , 1569  btd_deviû * dev ) 1571 GSLi¡ * l ; 1573  l = ext -> cÚns ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 1574  ext_io * cÚn = l -> d©a ; 1576 ià( cÚn -> deviû =ð dev ) 1577  cÚn ; 1580  NULL ; 1581 } } 1583  $ext_deviû_»move ( btd_£rviû * £rviû ) 1585  btd_´ofže * p = `btd_£rviû_g‘_´ofže ( £rviû ); 1586  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 1587  ext_´ofže * ext ; 1588  ext_io * cÚn ; 1590 ext = `fšd_ext ( p ); 1591 ià(! ext ) 1594 `DBG ("%s", ext -> Çme ); 1596 cÚn = `fšd_cÚÃùiÚ ( ext , dev ); 1597 ià( cÚn ) { 1598 ext -> cÚns = `g_¦i¡_»move Óxt->cÚns, cÚn ); 1599 `ext_io_de¡roy ( cÚn ); 1601 } } 1603  $cÚÃù_io ( ext_io * cÚn , cÚ¡ bdaddr_t * ¤c , 1604 cÚ¡ bdaddr_t * d¡ ) 1606  ext_´ofže * ext = cÚn ->ext; 1607 GE¼Ü * g”r = NULL ; 1608 GIOChªÃl * io ; 1610 ià( cÚn -> psm ) { 1611 cÚn -> ´Ùo = BTPROTO_L2CAP ; 1612 io = `bt_io_cÚÃù ( ext_cÚÃù , cÚn , NULL , & g”r , 1613 BT_IO_OPT_SOURCE_BDADDR , ¤c , 1614 BT_IO_OPT_DEST_BDADDR , d¡ , 1615 BT_IO_OPT_SEC_LEVEL , ext -> £c_Ëv– , 1616 BT_IO_OPT_PSM , cÚn -> psm , 1617 BT_IO_OPT_INVALID ); 1619 cÚn -> ´Ùo = BTPROTO_RFCOMM ; 1620 io = `bt_io_cÚÃù ( ext_cÚÃù , cÚn , NULL , & g”r , 1621 BT_IO_OPT_SOURCE_BDADDR , ¤c , 1622 BT_IO_OPT_DEST_BDADDR , d¡ , 1623 BT_IO_OPT_SEC_LEVEL , ext -> £c_Ëv– , 1624 BT_IO_OPT_CHANNEL , cÚn -> chª , 1625 BT_IO_OPT_INVALID ); 1628 ià( g”r !ð NULL ) { 1629 `”rÜ ("UÇbËØcÚÃù %s: %s", ext -> Çme , g”r -> mes§ge ); 1630 `g_”rÜ_ä“ ( g”r ); 1631  - EIO ; 1634 cÚn -> io = io; 1637 } } 1639  ušt16_t $g‘_gÛp_l2ÿp_psm ( sdp_»cÜd_t * »c ) 1641 sdp_d©a_t * d©a ; 1643 d©a = `sdp_d©a_g‘ ( »c , SDP_ATTR_GOEP_L2CAP_PSM ); 1644 ià(! d©a ) 1647 ià( d©a -> dtd !ð SDP_UINT16 ) 1651 ià(( d©a -> v® . ušt16 & 0x0101) != 0x0001) 1654  d©a -> v® . ušt16 ; 1655 } } 1657  $»cÜd_cb ( sdp_li¡_t * »cs ,  ”r , gpoš‹r u£r_d©a ) 1659  ext_io * cÚn = u£r_d©a ; 1660  ext_´ofže * ext = cÚn ->ext; 1661 sdp_li¡_t * r ; 1663 cÚn -> »sÞvšg = çl£ ; 1665 ià( ”r < 0) { 1666 `”rÜ ("UÇbËØg‘ % SDP„ecÜd: %s", ext -> Çme , 1667 `¡»¼Ü (- ”r )); 1668  çžed ; 1671 ià(! »cs || !»cs-> d©a ) { 1672 `”rÜ ("NØSDP„ecÜd found fÜ %s", ext -> Çme ); 1673 ”r = - ENOTSUP ; 1674  çžed ; 1677  r = »cs ;„ !ð NULL ;„ =„-> Ãxt ) { 1678 sdp_»cÜd_t * »c = r -> d©a ; 1679 sdp_li¡_t * ´Ùos ; 1680  pÜt ; 1681 #ifdeà __TIZEN_PATCH__ 1682 * ´ofže_uuid ; 1683 sdp_li¡_t * svcþass = NULL ; 1685 ià( `sdp_g‘_£rviû_þas£s ( »c , & svcþass ) < 0) 1689 ià( svcþass =ð NULL ) { 1690 `DBG ("Skipping„ecord with‚o service classes"); 1695 ´ofže_uuid = `bt_uuid2¡ršg ( svcþass -> d©a ); 1696 ià(! ´ofže_uuid ) { 1697 `sdp_li¡_ä“ ( svcþass , ä“ ); 1701 `sdp_li¡_ä“ ( svcþass , ä“ ); 1703 `DBG ("´ofžuuid % p܈uuid %s", ´ofže_uuid , ext -> »mÙe_uuid ); 1705 ià( `g_¡ºÿ£cmp ( ´ofže_uuid , ext -> »mÙe_uuid , 1706 `¡¾’ ( ´ofže_uuid )) != 0) { 1707 `ä“ ( ´ofže_uuid ); 1711 `ä“ ( ´ofže_uuid ); 1714 ià( `sdp_g‘_acûss_´Ùos ( »c , & ´Ùos ) < 0) { 1715 `”rÜ ("Unableo get…roto†ist from %s„ecord", 1716 ext -> Çme ); 1717 ”r = - ENOTSUP ; 1718  çžed ; 1721 pÜt = `sdp_g‘_´Ùo_pÜt ( ´Ùos , L2CAP_UUID ); 1722 ià( pÜt > 0) 1723 cÚn -> psm = pÜt ; 1725 pÜt = `sdp_g‘_´Ùo_pÜt ( ´Ùos , RFCOMM_UUID ); 1726 ià( pÜt > 0) 1727 cÚn -> chª = pÜt ; 1729 ià( cÚn -> psm =ð0 && `sdp_g‘_´Ùo_desc ( ´Ùos , OBEX_UUID )) 1730 cÚn -> psm = `g‘_gÛp_l2ÿp_psm ( »c ); 1732 cÚn -> ã©u»s = `g‘_suµÜ‹d_ã©u»s ( »c ); 1733 cÚn -> v”siÚ = `g‘_´ofže_v”siÚ ( »c ); 1735 `sdp_li¡_fÜ—ch ( ´Ùos , ( sdp_li¡_func_t è sdp_li¡_ä“ , 1736 NULL ); 1737 `sdp_li¡_ä“ ( ´Ùos , NULL ); 1739 ià( cÚn -> chª || cÚn-> psm ) 1743 ià(! cÚn -> chª && !cÚn-> psm ) { 1744 `”rÜ ("Failedo find L2CAP PSM or RFCOMM channel for %s", 1745 ext -> Çme ); 1746 ”r = - ENOTSUP ; 1747  çžed ; 1750 ”r = `cÚÃù_io ( cÚn , `btd_ad­‹r_g‘_add»ss (cÚn-> ad­‹r ), 1751 `deviû_g‘_add»ss ( cÚn -> deviû )); 1752 ià( ”r < 0) { 1753 `”rÜ ("CÚÃùšg % çžed: %s", ext -> Çme , `¡»¼Ü (- ”r )); 1754  çžed ; 1759 çžed : 1760 ià( cÚn -> £rviû ) 1761 `btd_£rviû_cÚÃùšg_com¶‘e ( cÚn -> £rviû , ”r ); 1763 ext -> cÚns = `g_¦i¡_»move Óxt->cÚns, cÚn ); 1764 `ext_io_de¡roy ( cÚn ); 1765 } } 1767  $»sÞve_£rviû ( ext_io * cÚn , cÚ¡ bdaddr_t * ¤c , 1768 cÚ¡ bdaddr_t * d¡ ) 1770  ext_´ofže * ext = cÚn ->ext; 1771 uuid_t uuid ; 1772  ”r ; 1774 `bt_¡ršg2uuid (& uuid , ext -> »mÙe_uuid ); 1775 `sdp_uuid128_to_uuid (& uuid ); 1777 ”r = `bt_£¬ch_£rviû ( ¤c , d¡ , & uuid , »cÜd_cb , cÚn , NULL , 0); 1778 ià( ”r == 0) 1779 cÚn -> »sÞvšg = Œue ; 1781  ”r ; 1782 } } 1784  $ext_cÚÃù_dev ( btd_£rviû * £rviû ) 1786  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 1787  btd_´ofže * ´ofže = `btd_£rviû_g‘_´ofže ( £rviû ); 1788  btd_ad­‹r * ad­‹r ; 1789  ext_io * cÚn ; 1790  ext_´ofže * ext ; 1791  ”r ; 1793 ext = `fšd_ext ( ´ofže ); 1794 ià(! ext ) 1795  - ENOENT ; 1797 cÚn = `fšd_cÚÃùiÚ ( ext , dev ); 1798 ià( cÚn ) 1799  - EALREADY ; 1801 ad­‹r = `deviû_g‘_ad­‹r ( dev ); 1803 cÚn = `g_Ãw0 ( ext_io , 1); 1804 cÚn -> ext =ƒxt; 1806 ià( ext -> »mÙe_psm ||ƒxt-> »mÙe_chª ) { 1807 cÚn -> psm = ext -> »mÙe_psm ; 1808 cÚn -> chª = ext -> »mÙe_chª ; 1809 ”r = `cÚÃù_io ( cÚn , `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 1810 `deviû_g‘_add»ss ( dev )); 1812 ”r = `»sÞve_£rviû ( cÚn , `btd_ad­‹r_g‘_add»ss ( ad­‹r ), 1813 `deviû_g‘_add»ss ( dev )); 1816 ià( ”r < 0) 1817  çžed ; 1819 cÚn -> ad­‹r = `btd_ad­‹r_»f (adapter); 1820 cÚn -> deviû = `btd_deviû_»f ( dev ); 1821 cÚn -> £rviû = `btd_£rviû_»f (service); 1823 ext -> cÚns = `g_¦i¡_­³nd Óxt->cÚns, cÚn ); 1827 çžed : 1828 `g_ä“ ( cÚn ); 1829  ”r ; 1830 } } 1832  $£nd_discÚn_»q ( ext_´ofže * ext ,  ext_io * cÚn ) 1834 DBusMes§ge * msg ; 1835 cÚ¡ * ·th ; 1837 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ext -> owÃr ,ƒxt-> ·th , 1840 ià(! msg ) { 1841 `”rÜ ("Unableo create RequestDisconnection call for %s", 1842 ext -> Çme ); 1843  - ENOMEM ; 1846 ·th = `deviû_g‘_·th ( cÚn -> deviû ); 1847 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_OBJECT_PATH , & ·th , 1848 DBUS_TYPE_INVALID ); 1850 ià(! `g_dbus_£nd_mes§ge_w™h_»¶y ( `btd_g‘_dbus_cÚÃùiÚ (), 1851 msg , & cÚn -> ³ndšg , -1)) { 1852 `”rÜ ("%s: s’dšg Reque¡DiscÚÃùiÚ fažed", ext -> Çme ); 1853 `dbus_mes§ge_uÄef ( msg ); 1854  - EIO ; 1857 `dbus_mes§ge_uÄef ( msg ); 1859 `dbus_³ndšg_ÿÎ_£t_nÙify ( cÚn -> ³ndšg , discÚn_»¶y , cÚn, NULL ); 1862 } } 1864  $ext_discÚÃù_dev ( btd_£rviû * £rviû ) 1866  btd_deviû * dev = `btd_£rviû_g‘_deviû ( £rviû ); 1867  btd_´ofže * ´ofže = `btd_£rviû_g‘_´ofže ( £rviû ); 1868  ext_´ofže * ext ; 1869  ext_io * cÚn ; 1870  ”r ; 1872 ext = `fšd_ext ( ´ofže ); 1873 ià(! ext ) 1874  - ENOENT ; 1876 cÚn = `fšd_cÚÃùiÚ ( ext , dev ); 1877 ià(! cÚn || !cÚn-> cÚÃùed ) 1878  - ENOTCONN ; 1880 ià( cÚn -> ³ndšg ) 1881  - EBUSY ; 1883 ”r = `£nd_discÚn_»q ( ext , cÚn ); 1884 ià( ”r < 0) 1885  ”r ; 1888 } } 1890 * $g‘_hå_hf_»cÜd ( ext_´ofže * ext ,  ext_io * l2ÿp , 1891  ext_io * rfcomm ) 1893  `g_¡rdup_´štf ( HFP_HF_RECORD , rfcomm -> chª , ext -> v”siÚ , 1894 ext -> Çme ,ƒxt-> ã©u»s ); 1895 } } 1897 * $g‘_hå_ag_»cÜd ( ext_´ofže * ext ,  ext_io * l2ÿp , 1898  ext_io * rfcomm ) 1900  `g_¡rdup_´štf ( HFP_AG_RECORD , rfcomm -> chª , ext -> v”siÚ , 1901 ext -> Çme ,ƒxt-> ã©u»s ); 1902 } } 1904 * $g‘_h¥_ag_»cÜd ( ext_´ofže * ext ,  ext_io * l2ÿp , 1905  ext_io * rfcomm ) 1907  `g_¡rdup_´štf ( HSP_AG_RECORD , rfcomm -> chª , ext -> v”siÚ , 1908 ext -> Çme ); 1909 } } 1911 * $g‘_¥p_»cÜd ( ext_´ofže * ext ,  ext_io * l2ÿp , 1912  ext_io * rfcomm ) 1914 * svc , * »c ; 1915 #ifdeà __TIZEN_PATCH__ 1916 * Ïn_£q ; 1917 ušt16_t code_ISO639 = (0x65 << 8) | 0x6e; 1918 ušt16_t ’codšg = 106; 1919 ušt16_t ba£_off£t = SDP_PRIMARY_LANG_BASE ; 1922 ià( ext -> £rviû ) 1923 svc = `g_¡rdup_´štf ("", ext -> £rviû ); 1925 svc = `g_¡rdup (""); 1927 #ifdeà __TIZEN_PATCH__ 1928 Ïn_£q = `g_¡rdup_´štf ( LANG_SEQ , code_ISO639 , ’codšg , 1929 ba£_off£t ); 1930 »c = `g_¡rdup_´štf ( SPP_RECORD , svc , rfcomm -> chª , Ïn_£q , ext -> v”siÚ , 1931 ext -> Çme ); 1932 `g_ä“ ( Ïn_£q ); 1934 »c = `g_¡rdup_´štf ( SPP_RECORD , svc , rfcomm -> chª , ext -> v”siÚ , 1935 ext -> Çme ); 1937 `g_ä“ ( svc ); 1938  »c ; 1939 } } 1941 * $g‘_dun_»cÜd ( ext_´ofže * ext ,  ext_io * l2ÿp , 1942  ext_io * rfcomm ) 1944  `g_¡rdup_´štf ( DUN_RECORD , rfcomm -> chª , ext -> v”siÚ , 1945 ext -> Çme ); 1946 } } 1948 * $g‘_pû_»cÜd ( ext_´ofže * ext ,  ext_io * l2ÿp , 1949  ext_io * rfcomm ) 1951  `g_¡rdup_´štf ( PCE_RECORD , ext -> v”siÚ ,ƒxt-> Çme ); 1952 } } 1954 * $g‘_p£_»cÜd ( ext_´ofže * ext ,  ext_io * l2ÿp , 1955  ext_io * rfcomm ) 1957  `g_¡rdup_´štf ( PSE_RECORD , rfcomm -> chª , ext -> v”siÚ , 1958 ext -> Çme ); 1959 } } 1961 * $g‘_mas_»cÜd ( ext_´ofže * ext ,  ext_io * l2ÿp , 1962  ext_io * rfcomm ) 1964  `g_¡rdup_´štf ( MAS_RECORD , rfcomm -> chª , ext -> v”siÚ , 1965 ext -> Çme ); 1966 } } 1968 * $g‘_mns_»cÜd ( ext_´ofže * ext ,  ext_io * l2ÿp , 1969  ext_io * rfcomm ) 1971 ušt16_t psm = 0; 1972 ušt8_t chª = 0; 1974 ià( l2ÿp ) 1975 psm = l2ÿp ->psm; 1976 ià( rfcomm ) 1977 chª = rfcomm ->chan; 1979  `g_¡rdup_´štf ( MNS_RECORD , chª , ext -> v”siÚ ,ƒxt-> Çme , psm ); 1980 } } 1982 * $g‘_sync_»cÜd ( ext_´ofže * ext ,  ext_io * l2ÿp , 1983  ext_io * rfcomm ) 1985  `g_¡rdup_´štf ( SYNC_RECORD , rfcomm -> chª , ext -> v”siÚ , 1986 ext -> Çme ); 1987 } } 1989 * $g‘_Ýp_»cÜd ( ext_´ofže * ext ,  ext_io * l2ÿp , 1990  ext_io * rfcomm ) 1992 ušt16_t psm = 0; 1993 ušt8_t chª = 0; 1995 ià( l2ÿp ) 1996 psm = l2ÿp ->psm; 1997 ià( rfcomm ) 1998 chª = rfcomm ->chan; 2000 #ifdeà __TIZEN_PATCH__ 2001  `g_¡rdup_´štf ( OPP_RECORD , chª , ext -> v”siÚ ,ƒxt-> Çme ); 2003  `g_¡rdup_´štf ( OPP_RECORD , chª , ext -> v”siÚ , psm ,ƒxt-> Çme ); 2005 } } 2007 * $g‘_áp_»cÜd ( ext_´ofže * ext ,  ext_io * l2ÿp , 2008  ext_io * rfcomm ) 2010 ušt16_t psm = 0; 2011 ušt8_t chª = 0; 2013 ià( l2ÿp ) 2014 psm = l2ÿp ->psm; 2015 ià( rfcomm ) 2016 chª = rfcomm ->chan; 2018  `g_¡rdup_´štf ( FTP_RECORD , chª , ext -> v”siÚ , psm ,ƒxt-> Çme ); 2019 } } 2021  #RFCOMM_SEQ "<£qu’û> \ \ \ " ) 2026  #VERSION_ATTR \ 2027 "<©Œibu‹ id=\"0x0009\"> \ <£qu’û> \ <£qu’û> \ \ \ \ \ " ) 2036 * $g‘_g’”ic_»cÜd ( ext_´ofže * ext ,  ext_io * l2ÿp , 2037  ext_io * rfcomm ) 2039  uuid_¡r [ MAX_LEN_UUID_STR ], svc_¡r [MAX_LEN_UUID_STR], psm [30]; 2040 * rf_£q , * v”_©Œ , * »c ; 2041 uuid_t uuid ; 2043 `bt_¡ršg2uuid (& uuid , ext ->uuid); 2044 `sdp_uuid2¡º (& uuid , uuid_¡r , (uuid_str)); 2046 ià( ext -> £rviû ) { 2047 `bt_¡ršg2uuid (& uuid , ext -> £rviû ); 2048 `sdp_uuid2¡º (& uuid , svc_¡r , (svc_str)); 2050 `¡ºýy ( svc_¡r , uuid_¡r , (svc_str)); 2053 ià( l2ÿp ) 2054 `¢´štf ( psm , (psm), "", 2055 l2ÿp -> psm ); 2057 psm [0] = '\0'; 2059 ià( rfcomm ) 2060 rf_£q = `g_¡rdup_´štf ( RFCOMM_SEQ , rfcomm -> chª ); 2062 rf_£q = `g_¡rdup (""); 2064 ià( ext -> v”siÚ ) 2065 v”_©Œ = `g_¡rdup_´štf ( VERSION_ATTR , uuid_¡r , 2066 ext -> v”siÚ ); 2068 v”_©Œ = `g_¡rdup (""); 2070 »c = `g_¡rdup_´štf ( GENERIC_RECORD , svc_¡r , psm , rf_£q , v”_©Œ , 2071 ext -> Çme ); 2073 `g_ä“ ( rf_£q ); 2074 `g_ä“ ( v”_©Œ ); 2076  »c ; 2077 } } 2079  sdeçuÉ_£‰šgs { 2080 cÚ¡ * muuid ; 2081 cÚ¡ * mÇme ; 2082  m´iÜ™y ; 2083 cÚ¡ * m»mÙe_uuid ; 2084  mchªÃl ; 2085  mpsm ; 2086 BtIOMode mmode ; 2087 BtIOSecLev– m£c_Ëv– ; 2088 boÞ mauthÜize ; 2089 boÞ mauto_cÚÃù ; 2090 * (* mg‘_»cÜd )( ext_´ofže * mext , 2091  ext_io * ml2ÿp , 2092  ext_io * mrfcomm ); 2093 ušt16_t mv”siÚ ; 2094 ušt16_t mã©u»s ; 2095 } gdeçuÉs [] = { 2097 . uuid = SPP_UUID , 2098 . gÇme = "Serial Port", 2099 . gchªÃl = SPP_DEFAULT_CHANNEL , 2100 . gauthÜize = Œue , 2101 . gg‘_»cÜd = g‘_¥p_»cÜd , 2102 #ifdeà __TIZEN_PATCH__ 2103 . gv”siÚ = 0x0100, 2105 . gv”siÚ = 0x0102, 2108 . guuid = DUN_GW_UUID , 2109 . gÇme = "Dial-Up Networking", 2110 . gchªÃl = DUN_DEFAULT_CHANNEL , 2111 . gauthÜize = Œue , 2112 . gg‘_»cÜd = g‘_dun_»cÜd , 2113 . gv”siÚ = 0x0102, 2115 . guuid = HFP_HS_UUID , 2116 . gÇme = "Hands-Free unit", 2117 . g´iÜ™y = BTD_PROFILE_PRIORITY_HIGH , 2118 . g»mÙe_uuid = HFP_AG_UUID , 2119 . gchªÃl = HFP_HF_DEFAULT_CHANNEL , 2120 . gauthÜize = Œue , 2121 . gauto_cÚÃù = Œue , 2122 . gg‘_»cÜd = g‘_hå_hf_»cÜd , 2123 . gv”siÚ = 0x0105, 2125 . guuid = HFP_AG_UUID , 2126 . gÇme = "Hands-Free Voice gateway", 2127 . g´iÜ™y = BTD_PROFILE_PRIORITY_HIGH , 2128 . g»mÙe_uuid = HFP_HS_UUID , 2129 . gchªÃl = HFP_AG_DEFAULT_CHANNEL , 2130 . gauthÜize = Œue , 2131 . gauto_cÚÃù = Œue , 2132 . gg‘_»cÜd = g‘_hå_ag_»cÜd , 2133 . gv”siÚ = 0x0105, 2135 . guuid = HSP_AG_UUID , 2136 . gÇme = "Headset Voice gateway", 2137 . g´iÜ™y = BTD_PROFILE_PRIORITY_HIGH , 2138 . g»mÙe_uuid = HSP_HS_UUID , 2139 . gchªÃl = HSP_AG_DEFAULT_CHANNEL , 2140 . gauthÜize = Œue , 2141 . gauto_cÚÃù = Œue , 2142 . gg‘_»cÜd = g‘_h¥_ag_»cÜd , 2143 . gv”siÚ = 0x0102, 2145 . guuid = OBEX_OPP_UUID , 2146 . gÇme = "Object Push", 2147 . gchªÃl = OPP_DEFAULT_CHANNEL , 2148 . gpsm = BTD_PROFILE_PSM_AUTO , 2149 . gmode = BT_IO_MODE_ERTM , 2150 . g£c_Ëv– = BT_IO_SEC_LOW , 2151 #ifdeà __TIZEN_PATCH__ 2152 . gauthÜize = Œue , 2154 . gauthÜize = çl£ , 2156 . gg‘_»cÜd = g‘_Ýp_»cÜd , 2157 #ifdeà __TIZEN_PATCH__ 2158 . gv”siÚ = 0x0100, 2160 . gv”siÚ = 0x0102, 2163 . guuid = OBEX_FTP_UUID , 2164 . gÇme = "File Transfer", 2165 . gchªÃl = FTP_DEFAULT_CHANNEL , 2166 . gpsm = BTD_PROFILE_PSM_AUTO , 2167 . gmode = BT_IO_MODE_ERTM , 2168 . gauthÜize = Œue , 2169 . gg‘_»cÜd = g‘_áp_»cÜd , 2170 . gv”siÚ = 0x0102, 2172 . guuid = OBEX_SYNC_UUID , 2173 . gÇme = "Synchronization", 2174 . gchªÃl = SYNC_DEFAULT_CHANNEL , 2175 . gauthÜize = Œue , 2176 . gg‘_»cÜd = g‘_sync_»cÜd , 2177 . gv”siÚ = 0x0100, 2179 . guuid = OBEX_PSE_UUID , 2180 . gÇme = "Phone Book Access", 2181 . gchªÃl = PBAP_DEFAULT_CHANNEL , 2182 . gauthÜize = Œue , 2183 . gg‘_»cÜd = g‘_p£_»cÜd , 2184 . gv”siÚ = 0x0101, 2186 . guuid = OBEX_PCE_UUID , 2187 . gÇme = "Phone Book Access Client", 2188 . g»mÙe_uuid = OBEX_PSE_UUID , 2189 . gauthÜize = Œue , 2190 . gg‘_»cÜd = g‘_pû_»cÜd , 2191 . gv”siÚ = 0x0102, 2193 . guuid = OBEX_MAS_UUID , 2194 . gÇme = "Message Access", 2195 . gchªÃl = MAS_DEFAULT_CHANNEL , 2196 . gauthÜize = Œue , 2197 . gg‘_»cÜd = g‘_mas_»cÜd , 2198 . gv”siÚ = 0x0100 2200 . guuid = OBEX_MNS_UUID , 2201 . gÇme = "Message Notification", 2202 . gchªÃl = MNS_DEFAULT_CHANNEL , 2203 . gpsm = BTD_PROFILE_PSM_AUTO , 2204 . gmode = BT_IO_MODE_ERTM , 2205 . gauthÜize = Œue , 2206 . gg‘_»cÜd = g‘_mns_»cÜd , 2207 . gv”siÚ = 0x0102 2211  $ext_£t_deçuÉs ( ext_´ofže * ext ) 2213  i ; 2215 ext -> mode = BT_IO_MODE_BASIC ; 2216 ext -> £c_Ëv– = BT_IO_SEC_MEDIUM ; 2217 ext -> authÜize = Œue ; 2218 ext -> ’abË_þ›Á = Œue ; 2219 ext -> ’abË_£rv” = Œue ; 2220 ext -> »mÙe_uuid = NULL ; 2222  i = 0; i < `G_N_ELEMENTS ( deçuÉs ); i++) { 2223  deçuÉ_£‰šgs * £‰šgs = & deçuÉs [ i ]; 2224 cÚ¡ * »mÙe_uuid ; 2226 ià( `¡rÿ£cmp ( ext -> uuid , £‰šgs ->uuid) != 0) 2229 ià( £‰šgs -> »mÙe_uuid ) 2230 »mÙe_uuid = £‰šgs ->remote_uuid; 2232 »mÙe_uuid = ext -> uuid ; 2234 ext -> »mÙe_uuid = `g_¡rdup (remote_uuid); 2236 ià( £‰šgs -> chªÃl ) 2237 ext -> loÿl_chª = £‰šgs -> chªÃl ; 2239 ià( £‰šgs -> psm ) 2240 ext -> loÿl_psm = £‰šgs -> psm ; 2242 ià( £‰šgs -> £c_Ëv– ) 2243 ext -> £c_Ëv– = £‰šgs ->sec_level; 2245 ià( £‰šgs -> mode ) 2246 ext -> mode = £‰šgs ->mode; 2248 ext -> authÜize = £‰šgs ->authorize; 2250 ià( £‰šgs -> auto_cÚÃù ) 2251 ext -> p . auto_cÚÃù = Œue ; 2253 ià( £‰šgs -> ´iÜ™y ) 2254 ext -> p . ´iÜ™y = £‰šgs ->priority; 2256 ià( £‰šgs -> g‘_»cÜd ) 2257 ext -> g‘_»cÜd = £‰šgs ->get_record; 2259 ià( £‰šgs -> v”siÚ ) 2260 ext -> v”siÚ = £‰šgs ->version; 2262 ià( £‰šgs -> ã©u»s ) 2263 ext -> ã©u»s = £‰šgs ->features; 2265 ià( £‰šgs -> Çme ) 2266 ext -> Çme = `g_¡rdup ( £‰šgs ->name); 2268 } } 2270  $·r£_ext_Ýt ( ext_´ofže * ext , cÚ¡ * key , 2271 DBusMes§geI‹r * v®ue ) 2273  ty³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( v®ue ); 2274 cÚ¡ * ¡r ; 2275 ušt16_t u16 ; 2276 dbus_boÞ_t b ; 2278 ià( `¡rÿ£cmp ( key , "Name") == 0) { 2279 ià( ty³ !ð DBUS_TYPE_STRING ) 2280  - EINVAL ; 2281 `dbus_mes§ge_™”_g‘_basic ( v®ue , & ¡r ); 2282 `g_ä“ ( ext -> Çme ); 2283 ext -> Çme = `g_¡rdup ( ¡r ); 2284 } ià( `¡rÿ£cmp ( key , "AutoConnect") == 0) { 2285 ià( ty³ !ð DBUS_TYPE_BOOLEAN ) 2286  - EINVAL ; 2287 `dbus_mes§ge_™”_g‘_basic ( v®ue , & b ); 2288 ext -> p . auto_cÚÃù = b ; 2289 } ià( `¡rÿ£cmp ( key , "PSM") == 0) { 2290 ià( ty³ !ð DBUS_TYPE_UINT16 ) 2291  - EINVAL ; 2292 `dbus_mes§ge_™”_g‘_basic ( v®ue , & u16 ); 2293 ext -> loÿl_psm = u16 ? u16 : BTD_PROFILE_PSM_AUTO ; 2294 } ià( `¡rÿ£cmp ( key , "Channel") == 0) { 2295 ià( ty³ !ð DBUS_TYPE_UINT16 ) 2296  - EINVAL ; 2298 `dbus_mes§ge_™”_g‘_basic ( v®ue , & u16 ); 2299 ià( u16 > 31) 2300  - EINVAL ; 2301 ext -> loÿl_chª = u16 ? u16 : BTD_PROFILE_CHAN_AUTO ; 2302 } ià( `¡rÿ£cmp ( key , "RequireAuthentication") == 0) { 2303 ià( ty³ !ð DBUS_TYPE_BOOLEAN ) 2304  - EINVAL ; 2306 `dbus_mes§ge_™”_g‘_basic ( v®ue , & b ); 2307 ià( b ) 2308 ext -> £c_Ëv– = BT_IO_SEC_MEDIUM ; 2310 ext -> £c_Ëv– = BT_IO_SEC_LOW ; 2311 } ià( `¡rÿ£cmp ( key , "RequireAuthorization") == 0) { 2312 ià( ty³ !ð DBUS_TYPE_BOOLEAN ) 2313  - EINVAL ; 2314 `dbus_mes§ge_™”_g‘_basic ( v®ue , & b ); 2315 ext -> authÜize = b ; 2316 } ià( `¡rÿ£cmp ( key , "Role") == 0) { 2317 ià( ty³ !ð DBUS_TYPE_STRING ) 2318  - EINVAL ; 2319 `dbus_mes§ge_™”_g‘_basic ( v®ue , & ¡r ); 2320 `g_ä“ ( ext -> rÞe ); 2321 ext -> rÞe = `g_¡rdup ( ¡r ); 2323 ià( `g_¡r_equ® ( ext -> rÞe , "client")) { 2324 ext -> ’abË_£rv” = çl£ ; 2325 ext -> ’abË_þ›Á = Œue ; 2326 } ià( `g_¡r_equ® ( ext -> rÞe , "server")) { 2327 ext -> ’abË_£rv” = Œue ; 2328 ext -> ’abË_þ›Á = çl£ ; 2330 } ià( `¡rÿ£cmp ( key , "ServiceRecord") == 0) { 2331 ià( ty³ !ð DBUS_TYPE_STRING ) 2332  - EINVAL ; 2333 `dbus_mes§ge_™”_g‘_basic ( v®ue , & ¡r ); 2334 `g_ä“ ( ext -> »cÜd ); 2335 ext -> »cÜd = `g_¡rdup ( ¡r ); 2336 ext -> ’abË_£rv” = Œue ; 2337 } ià( `¡rÿ£cmp ( key , "Version") == 0) { 2338 ušt16_t v” ; 2340 ià( ty³ !ð DBUS_TYPE_UINT16 ) 2341  - EINVAL ; 2343 `dbus_mes§ge_™”_g‘_basic ( v®ue , & v” ); 2344 ext -> v”siÚ = v” ; 2345 } ià( `¡rÿ£cmp ( key , "Features") == 0) { 2346 ušt16_t ã© ; 2348 ià( ty³ !ð DBUS_TYPE_UINT16 ) 2349  - EINVAL ; 2351 `dbus_mes§ge_™”_g‘_basic ( v®ue , & ã© ); 2352 ext -> ã©u»s = ã© ; 2353 } ià( `¡rÿ£cmp ( key , "Service") == 0) { 2354 ià( ty³ !ð DBUS_TYPE_STRING ) 2355  - EINVAL ; 2356 `dbus_mes§ge_™”_g‘_basic ( v®ue , & ¡r ); 2357 `ä“ ( ext -> £rviû ); 2358 ext -> £rviû = `bt_Çme2¡ršg ( ¡r ); 2362 } } 2364  $£t_£rviû ( ext_´ofže * ext ) 2366 ià( `¡rÿ£cmp ( ext -> uuid , HSP_HS_UUID ) == 0) { 2367 ext -> £rviû = `¡rdup Óxt-> uuid ); 2368 } ià( `¡rÿ£cmp ( ext -> uuid , HSP_AG_UUID ) == 0) { 2369 ext -> £rviû =ƒxt-> uuid ; 2370 ext -> uuid = `¡rdup ( HSP_HS_UUID ); 2371 } ià( `¡rÿ£cmp ( ext -> uuid , HFP_HS_UUID ) == 0) { 2372 ext -> £rviû = `¡rdup Óxt-> uuid ); 2373 } ià( `¡rÿ£cmp ( ext -> uuid , HFP_AG_UUID ) == 0) { 2374 ext -> £rviû =ƒxt-> uuid ; 2375 ext -> uuid = `¡rdup ( HFP_HS_UUID ); 2376 } ià( `¡rÿ£cmp ( ext -> uuid , OBEX_SYNC_UUID ) == 0 || 2377 `¡rÿ£cmp ( ext -> uuid , OBEX_OPP_UUID ) == 0 || 2378 `¡rÿ£cmp ( ext -> uuid , OBEX_FTP_UUID ) == 0) { 2379 ext -> £rviû = `¡rdup Óxt-> uuid ); 2380 } ià( `¡rÿ£cmp ( ext -> uuid , OBEX_PSE_UUID ) == 0 || 2381 `¡rÿ£cmp ( ext -> uuid , OBEX_PCE_UUID ) == 0) { 2382 ext -> £rviû =ƒxt-> uuid ; 2383 ext -> uuid = `¡rdup ( OBEX_PBAP_UUID ); 2384 } ià( `¡rÿ£cmp ( ext -> uuid , OBEX_MAS_UUID ) == 0 || 2385 `¡rÿ£cmp ( ext -> uuid , OBEX_MNS_UUID ) == 0) { 2386 ext -> £rviû =ƒxt-> uuid ; 2387 ext -> uuid = `¡rdup ( OBEX_MAP_UUID ); 2389 } } 2391  ext_´ofže * $ü—‹_ext (cÚ¡ * owÃr , cÚ¡ * ·th , 2392 cÚ¡ * uuid , 2393 DBusMes§geI‹r * Ýts ) 2395  btd_´ofže * p ; 2396  ext_´ofže * ext ; 2398 ext = `g_Ãw0 ( ext_´ofže , 1); 2400 ext -> uuid = `bt_Çme2¡ršg (uuid); 2401 ià( ext -> uuid =ð NULL ) { 2402 `g_ä“ ( ext ); 2403  NULL ; 2406 ext -> owÃr = `g_¡rdup (owner); 2407 ext -> ·th = `g_¡rdup (path); 2409 `ext_£t_deçuÉs ( ext ); 2411  `dbus_mes§ge_™”_g‘_¬g_ty³ ( Ýts è=ð DBUS_TYPE_DICT_ENTRY ) { 2412 DBusMes§geI‹r v®ue , ’Œy ; 2413 cÚ¡ * key ; 2415 `dbus_mes§ge_™”_»cur£ ( Ýts , & ’Œy ); 2416 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & key ); 2418 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 2419 `dbus_mes§ge_™”_»cur£ (& ’Œy , & v®ue ); 2421 ià( `·r£_ext_Ýt ( ext , key , & v®ue ) < 0) 2422 `”rÜ ("Inv®id v®ufÜ…rofžÝtiÚ %s", key ); 2424 `dbus_mes§ge_™”_Ãxt ( Ýts ); 2427 ià(! ext -> £rviû ) 2428 `£t_£rviû ( ext ); 2430 ià( ext -> ’abË_£rv” && !Óxt-> »cÜd ||ƒxt-> g‘_»cÜd )) 2431 ext -> g‘_»cÜd = g‘_g’”ic_»cÜd ; 2433 ià(! ext -> Çme ) 2434 ext -> Çme = `g_¡rdup_´štf ("%s%s/%s", owÃr , ·th , uuid ); 2436 ià(! ext -> »mÙe_uuid ) { 2437 ià( ext -> £rviû ) 2438 ext -> »mÙe_uuid = `g_¡rdup Óxt-> £rviû ); 2440 ext -> »mÙe_uuid = `g_¡rdup Óxt-> uuid ); 2443 p = & ext ->p; 2445 p -> Çme = ext ->name; 2446 p -> loÿl_uuid = ext -> £rviû ?ƒxt->£rviû :ƒxt-> uuid ; 2447 p -> »mÙe_uuid = ext ->remote_uuid; 2449 ià( ext -> ’abË_£rv” ) { 2450 p -> ad­‹r_´obe = ext_ad­‹r_´obe ; 2451 p -> ad­‹r_»move = ext_ad­‹r_»move ; 2454 ià( ext -> ’abË_þ›Á ) { 2455 p -> deviû_´obe = ext_deviû_´obe ; 2456 p -> deviû_»move = ext_deviû_»move ; 2457 p -> cÚÃù = ext_cÚÃù_dev ; 2458 p -> discÚÃù = ext_discÚÃù_dev ; 2461 `DBG ("C»©ed \"%s\"", ext -> Çme ); 2463 ext_´ofžes = `g_¦i¡_­³nd Óxt_´ofžes, ext ); 2465 `ad­‹r_fÜ—ch ( ad­‹r_add_´ofže , & ext -> p ); 2467  ext ; 2468 } } 2470  $»move_ext ( ext_´ofže * ext ) 2472 `ad­‹r_fÜ—ch ( ad­‹r_»move_´ofže , & ext -> p ); 2474 ext_´ofžes = `g_¦i¡_»move Óxt_´ofžes, ext ); 2476 `DBG ("Removed \"%s\"", ext -> Çme ); 2478 `ext_»move_»cÜds ( ext , NULL ); 2480 `g_¦i¡_ä“_fuÎ ( ext -> £rv”s , ext_io_de¡roy ); 2481 `g_¦i¡_ä“_fuÎ ( ext -> cÚns , ext_io_de¡roy ); 2483 `g_ä“ ( ext -> »mÙe_uuid ); 2484 `g_ä“ ( ext -> Çme ); 2485 `g_ä“ ( ext -> owÃr ); 2486 `ä“ ( ext -> uuid ); 2487 `ä“ ( ext -> £rviû ); 2488 `g_ä“ ( ext -> rÞe ); 2489 `g_ä“ ( ext -> ·th ); 2490 `g_ä“ ( ext -> »cÜd ); 2492 `g_ä“ ( ext ); 2493 } } 2495  $ext_ex™ed ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 2497  ext_´ofže * ext = u£r_d©a ; 2499 `DBG ("\"%s\"ƒx™ed", ext -> Çme ); 2501 `»move_ext ( ext ); 2502 } } 2504  DBusMes§ge * $»gi¡”_´ofže ( DBusCÚÃùiÚ * cÚn , 2505 DBusMes§ge * msg , * u£r_d©a ) 2507 cÚ¡ * ·th , * £nd” , * uuid ; 2508 DBusMes§geI‹r ¬gs , Ýts ; 2509  ext_´ofže * ext ; 2511 £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 2513 `DBG ("£nd” %s", £nd” ); 2515 `dbus_mes§ge_™”_š™ ( msg , & ¬gs ); 2517 `dbus_mes§ge_™”_g‘_basic (& ¬gs , & ·th ); 2518 `dbus_mes§ge_™”_Ãxt (& ¬gs ); 2520 ext = `fšd_ext_´ofže ( £nd” , ·th ); 2521 ià( ext ) 2522  `btd_”rÜ_®»ady_exi¡s ( msg ); 2524 `dbus_mes§ge_™”_g‘_basic (& ¬gs , & uuid ); 2525 `dbus_mes§ge_™”_Ãxt (& ¬gs ); 2527 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬gs è!ð DBUS_TYPE_ARRAY ) 2528  `btd_”rÜ_šv®id_¬gs ( msg ); 2530 `dbus_mes§ge_™”_»cur£ (& ¬gs , & Ýts ); 2532 ext = `ü—‹_ext ( £nd” , ·th , uuid , & Ýts ); 2533 ià(! ext ) 2534  `btd_”rÜ_šv®id_¬gs ( msg ); 2536 ext -> id = `g_dbus_add_discÚÃù_w©ch ( cÚn , £nd” , ext_ex™ed ,ƒxt, 2537 NULL ); 2539  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2540 } } 2542  DBusMes§ge * $uÄegi¡”_´ofže ( DBusCÚÃùiÚ * cÚn , 2543 DBusMes§ge * msg , * u£r_d©a ) 2545 cÚ¡ * ·th , * £nd” ; 2546  ext_´ofže * ext ; 2548 £nd” = `dbus_mes§ge_g‘_£nd” ( msg ); 2550 `DBG ("£nd” %s", £nd” ); 2552 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , DBUS_TYPE_OBJECT_PATH , & ·th , 2553 DBUS_TYPE_INVALID )) 2554  `btd_”rÜ_šv®id_¬gs ( msg ); 2556 ext = `fšd_ext_´ofže ( £nd” , ·th ); 2557 ià(! ext ) 2558  `btd_”rÜ_dÛs_nÙ_exi¡ ( msg ); 2560 `g_dbus_»move_w©ch ( cÚn , ext -> id ); 2561 `»move_ext ( ext ); 2563  `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 2564 } } 2566 cÚ¡ GDBusM‘hodTabË gm‘hods [] = { 2567 { GDBUS_METHOD ("RegisterProfile", 2568 GDBUS_ARGS ({ "profile", "o"}, { "UUID", "s" }, 2570 NULL , »gi¡”_´ofže ) }, 2571 #ifdeà __TIZEN_PATCH__ 2573 { GDBUS_METHOD ("RegisterProfile1", 2574 GDBUS_ARGS ({ "profile", "o"}, { "UUID", "s" }, 2576 NULL , »gi¡”_´ofže ) }, 2579 { GDBUS_METHOD ("UÄegi¡”Profže", GDBUS_ARGS ({ "profile", "o" }), 2580 NULL , uÄegi¡”_´ofže ) }, 2584  btd_´ofže_cu¡om_´Ý”ty * $fšd_cu¡om_´Ý (cÚ¡ * uuid , 2585 cÚ¡ * Çme ) 2587 GSLi¡ * l ; 2589  l = cu¡om_´Ýs ;†;† =†-> Ãxt ) { 2590  btd_´ofže_cu¡om_´Ý”ty * ´Ý = l -> d©a ; 2592 ià( `¡rÿ£cmp ( ´Ý -> uuid , uuid) != 0) 2595 ià( `g_¡rcmp0 ( ´Ý -> Çme ,‚ame) == 0) 2596  ´Ý ; 2599  NULL ; 2600 } } 2602 boÞ $btd_´ofže_add_cu¡om_´Ý (cÚ¡ * uuid , cÚ¡ * ty³ , 2603 cÚ¡ * Çme , 2604 btd_´ofže_´Ý_exi¡s exi¡s , 2605 btd_´ofže_´Ý_g‘ g‘ , 2606 * u£r_d©a ) 2608  btd_´ofže_cu¡om_´Ý”ty * ´Ý ; 2610 ´Ý = `fšd_cu¡om_´Ý ( uuid , Çme ); 2611 ià( ´Ý !ð NULL ) 2612  çl£ ; 2614 ´Ý = `g_Ãw0 ( btd_´ofže_cu¡om_´Ý”ty , 1); 2616 ´Ý -> uuid = `¡rdup (uuid); 2617 ´Ý -> ty³ = `g_¡rdup (type); 2618 ´Ý -> Çme = `g_¡rdup (name); 2619 ´Ý -> exi¡s =ƒxists; 2620 ´Ý -> g‘ = get; 2621 ´Ý -> u£r_d©a = user_data; 2623 cu¡om_´Ýs = `g_¦i¡_­³nd (cu¡om_´Ýs, ´Ý ); 2625  Œue ; 2626 } } 2628  $ä“_´Ý”ty ( gpoš‹r d©a ) 2630  btd_´ofže_cu¡om_´Ý”ty * p = d©a ; 2632 `g_ä“ ( p -> uuid ); 2633 `g_ä“ ( p -> ty³ ); 2634 `g_ä“ ( p -> Çme ); 2636 `g_ä“ ( p ); 2637 } } 2639 boÞ $btd_´ofže_»move_cu¡om_´Ý (cÚ¡ * uuid , cÚ¡ * Çme ) 2641  btd_´ofže_cu¡om_´Ý”ty * ´Ý ; 2643 ´Ý = `fšd_cu¡om_´Ý ( uuid , Çme ); 2644 ià( ´Ý =ð NULL ) 2645  çl£ ; 2647 cu¡om_´Ýs = `g_¦i¡_»move (cu¡om_´Ýs, ´Ý ); 2648 `ä“_´Ý”ty ( ´Ý ); 2650  çl£ ; 2651 } } 2653  $btd_´ofže_š™ () 2655 `g_dbus_»gi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 2657 m‘hods , NULL , NULL, NULL, NULL); 2658 } } 2660  $btd_´ofže_þ—nup () 2662  ext_´ofžes ) { 2663  ext_´ofže * ext = ext_´ofžes -> d©a ; 2664 DBusCÚÃùiÚ * cÚn = `btd_g‘_dbus_cÚÃùiÚ (); 2665 DBusMes§ge * msg ; 2667 `DBG ("R–—sšg \"%s\"", ext -> Çme ); 2669 `g_¦i¡_ä“_fuÎ ( ext -> cÚns , ext_io_de¡roy ); 2670 ext -> cÚns = NULL ; 2672 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( ext -> owÃr ,ƒxt-> ·th , 2675 ià( msg ) 2676 `g_dbus_£nd_mes§ge ( cÚn , msg ); 2678 `g_dbus_»move_w©ch ( cÚn , ext -> id ); 2679 `»move_ext ( ext ); 2683 `g_¦i¡_ä“_fuÎ ( cu¡om_´Ýs , ä“_´Ý”ty ); 2684 cu¡om_´Ýs = NULL ; 2686 `g_dbus_uÄegi¡”_š‹rçû ( `btd_g‘_dbus_cÚÃùiÚ (), 2688 } } @src/profile.h 24  #BTD_PROFILE_PRIORITY_LOW 0 ) 25  #BTD_PROFILE_PRIORITY_MEDIUM 1 ) 26  #BTD_PROFILE_PRIORITY_HIGH 2 ) 28  gbtd_£rviû ; 30  sbtd_´ofže { 31 cÚ¡ * mÇme ; 32  m´iÜ™y ; 34 cÚ¡ * mloÿl_uuid ; 35 cÚ¡ * m»mÙe_uuid ; 37 boÞ mauto_cÚÃù ; 39 (* mdeviû_´obe è( btd_£rviû * m£rviû ); 40 (* mdeviû_»move è( btd_£rviû * m£rviû ); 42 (* mcÚÃù è( btd_£rviû * m£rviû ); 43 (* mdiscÚÃù è( btd_£rviû * m£rviû ); 45 (* macû± è( btd_£rviû * m£rviû ); 47 (* mad­‹r_´obe è( btd_´ofže * mp , 48  btd_ad­‹r * mad­‹r ); 49 (* mad­‹r_»move è( btd_´ofže * mp , 50  btd_ad­‹r * mad­‹r ); 53  btd_´ofže_fÜ—ch ((* func )( btd_´ofže * p , * d©a ), 54 * d©a ); 56  `btd_´ofže_»gi¡” ( btd_´ofže * ´ofže ); 57  `btd_´ofže_uÄegi¡” ( btd_´ofže * ´ofže ); 59  $boÞ (* tbtd_´ofže_´Ý_exi¡s )(cÚ¡ * tuuid , 60  tbtd_deviû * tdev , 61 * tu£r_d©a ); 63  $boÞ (* tbtd_´ofže_´Ý_g‘ )(cÚ¡ * tuuid , 64  tbtd_deviû * tdev , 65 tDBusMes§geI‹r * t™” , 66 * tu£r_d©a ); 68 boÞ `btd_´ofže_add_cu¡om_´Ý (cÚ¡ * uuid , cÚ¡ * ty³ , 69 cÚ¡ * Çme , 70 btd_´ofže_´Ý_exi¡s exi¡s , 71 btd_´ofže_´Ý_g‘ g‘ , 72 * u£r_d©a ); 73 boÞ `btd_´ofže_»move_cu¡om_´Ý (cÚ¡ * uuid , cÚ¡ * Çme ); 75  `btd_´ofže_š™ (); 76  `btd_´ofže_þ—nup (); @src/rfkill.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<”ºo.h > 29  ~<¡dio.h > 30  ~ 31  ~ 32  ~<¡dšt.h > 33  ~<¡dlib.h > 34  ~<¡ršg.h > 36  ~ 38  ~"log.h " 39  ~"ad­‹r.h " 40  ~"hcid.h " 42 erfkžl_ty³ { 43 mRFKILL_TYPE_ALL = 0, 44 mRFKILL_TYPE_WLAN , 45 mRFKILL_TYPE_BLUETOOTH , 46 mRFKILL_TYPE_UWB , 47 mRFKILL_TYPE_WIMAX , 48 mRFKILL_TYPE_WWAN , 51 erfkžl_Ý”©iÚ { 52 mRFKILL_OP_ADD = 0, 53 mRFKILL_OP_DEL , 54 mRFKILL_OP_CHANGE , 55 mRFKILL_OP_CHANGE_ALL , 58  srfkžl_ev’t { 59 ušt32_t midx ; 60 ušt8_t mty³ ; 61 ušt8_t mÝ ; 62 ušt8_t msoá ; 63 ušt8_t mh¬d ; 66  gboÞ—n $rfkžl_ev’t ( GIOChªÃl * chª , 67 GIOCÚd™iÚ cÚd , gpoš‹r d©a ) 69  buf [32]; 70  rfkžl_ev’t * ev’t = (*è buf ; 71  btd_ad­‹r * ad­‹r ; 72  sy¢ame [ PATH_MAX ]; 73 ssize_t Ën ; 74  fd , id ; 76 ià( cÚd & ( G_IO_NVAL | G_IO_HUP | G_IO_ERR )) 77  FALSE ; 79 fd = `g_io_chªÃl_unix_g‘_fd ( chª ); 81 `mem£t ( buf , 0, (buf)); 83 Ën = `»ad ( fd , buf , (buf)); 84 ià( Ën < 0) { 85 ià( ”ºo =ð EAGAIN ) 86  TRUE ; 87  FALSE ; 90 ià( Ën !ð( rfkžl_ev’t )) 91  TRUE ; 93 `DBG ("RFKILLƒvent idx %uype %u op %u soft %u hard %u", 94 ev’t -> idx ,ƒv’t-> ty³ ,ƒv’t-> Ý , 95 ev’t -> soá ,ƒv’t-> h¬d ); 97 ià( ev’t -> soá ||ƒv’t-> h¬d ) 98  TRUE ; 100 ià( ev’t -> Ý !ð RFKILL_OP_CHANGE ) 101  TRUE ; 103 ià( ev’t -> ty³ !ð RFKILL_TYPE_BLUETOOTH && 104 ev’t -> ty³ !ð RFKILL_TYPE_ALL ) 105  TRUE ; 107 `¢´štf ( sy¢ame , (sysname) - 1, 108 "/sys/þass/rfkžl/rfkžl%u/Çme", ev’t -> idx ); 110 fd = `Ý’ ( sy¢ame , O_RDONLY ); 111 ià( fd < 0) 112  TRUE ; 114 `mem£t ( sy¢ame , 0, (sysname)); 116 ià( `»ad ( fd , sy¢ame , (sysname) - 1) < 4) { 117 `þo£ ( fd ); 118  TRUE ; 121 `þo£ ( fd ); 123 ià( `g_¡r_has_´efix ( sy¢ame , "hci"è=ð FALSE ) 124  TRUE ; 126 id = `©oi ( sy¢ame + 3); 127 ià( id < 0) 128  TRUE ; 130 ad­‹r = `ad­‹r_fšd_by_id ( id ); 131 ià(! ad­‹r ) 132  TRUE ; 134 `DBG ("RFKILL unblock fÜ hci%d", id ); 136 `btd_ad­‹r_»¡Üe_pow”ed ( ad­‹r ); 138  TRUE ; 139 } } 141  gušt gw©ch = 0; 143  $rfkžl_š™ () 145  fd ; 146 GIOChªÃl * chªÃl ; 148 fd = `Ý’ ("/dev/rfkžl", O_RDWR ); 149 ià( fd < 0) { 150 `”rÜ ("Failedo open RFKILL control device"); 154 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 155 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 157 w©ch = `g_io_add_w©ch ( chªÃl , 158 G_IO_IN | G_IO_NVAL | G_IO_HUP | G_IO_ERR , 159 rfkžl_ev’t , NULL ); 161 `g_io_chªÃl_uÄef ( chªÃl ); 162 } } 164  $rfkžl_ex™ () 166 ià( w©ch == 0) 169 `g_sourû_»move ( w©ch ); 170 w©ch = 0; 171 } } @src/sdp-client.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<”ºo.h > 30  ~ 31  ~ 32  ~ 34  ~ 36  ~"btio/btio.h " 37  ~"log.h " 38  ~"sdp-þ›Á.h " 41  #CACHE_TIMEOUT 2 ) 43  sÿched_sdp_£ssiÚ { 44 bdaddr_t m¤c ; 45 bdaddr_t md¡ ; 46 sdp_£ssiÚ_t * m£ssiÚ ; 47 gušt mtim” ; 48 gušt mio_id ; 51  GSLi¡ * gÿched_sdp_£ssiÚs = NULL ; 53  $þ—nup_ÿched_£ssiÚ ( ÿched_sdp_£ssiÚ * ÿched ) 55 ÿched_sdp_£ssiÚs = `g_¦i¡_»move (ÿched_sdp_£ssiÚs, ÿched ); 56 `sdp_þo£ ( ÿched -> £ssiÚ ); 57 `g_ä“ ( ÿched ); 58 } } 60  gboÞ—n $ÿched_£ssiÚ_expœed ( gpoš‹r u£r_d©a ) 62  ÿched_sdp_£ssiÚ * ÿched = u£r_d©a ; 64 `g_sourû_»move ( ÿched -> io_id ); 65 `þ—nup_ÿched_£ssiÚ ( ÿched ); 67  FALSE ; 68 } } 70  sdp_£ssiÚ_t * $g‘_ÿched_sdp_£ssiÚ (cÚ¡ bdaddr_t * ¤c , 71 cÚ¡ bdaddr_t * d¡ ) 73 GSLi¡ * l ; 75  l = ÿched_sdp_£ssiÚs ;† !ð NULL ;† =†-> Ãxt ) { 76  ÿched_sdp_£ssiÚ * c = l -> d©a ; 77 sdp_£ssiÚ_t * £ssiÚ ; 79 ià( `bacmp (& c -> ¤c , srcè|| bacmp(&c-> d¡ , dst)) 82 `g_sourû_»move ( c -> tim” ); 83 `g_sourû_»move ( c -> io_id ); 85 £ssiÚ = c ->session; 87 ÿched_sdp_£ssiÚs = `g_¦i¡_»move (ÿched_sdp_£ssiÚs, c ); 88 `g_ä“ ( c ); 90  £ssiÚ ; 93  NULL ; 94 } } 96  gboÞ—n $discÚÃù_w©ch ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 97 gpoš‹r u£r_d©a ) 99  ÿched_sdp_£ssiÚ * ÿched = u£r_d©a ; 101 `g_sourû_»move ( ÿched -> tim” ); 102 `þ—nup_ÿched_£ssiÚ ( ÿched ); 104  FALSE ; 105 } } 107  $ÿche_sdp_£ssiÚ ( bdaddr_t * ¤c , bdaddr_ˆ* d¡ , 108 sdp_£ssiÚ_t * £ssiÚ ) 110  ÿched_sdp_£ssiÚ * ÿched ; 111  sk ; 112 GIOChªÃl * chª ; 114 ÿched = `g_Ãw0 ( ÿched_sdp_£ssiÚ , 1); 116 `baýy (& ÿched -> ¤c , src); 117 `baýy (& ÿched -> d¡ , dst); 119 ÿched -> £ssiÚ = session; 121 ÿched_sdp_£ssiÚs = `g_¦i¡_­³nd (ÿched_sdp_£ssiÚs, ÿched ); 123 ÿched -> tim” = `g_timeout_add_£cÚds ( CACHE_TIMEOUT , 124 ÿched_£ssiÚ_expœed , 125 ÿched ); 128 sk = `sdp_g‘_sock‘ ( £ssiÚ ); 129 chª = `g_io_chªÃl_unix_Ãw ( sk ); 131 ÿched -> io_id = `g_io_add_w©ch ( chª , G_IO_HUP | G_IO_ERR | G_IO_NVAL , 132 discÚÃù_w©ch , ÿched ); 134 `g_io_chªÃl_uÄef ( chª ); 135 } } 137  s£¬ch_cÚ‹xt { 138 bdaddr_t m¤c ; 139 bdaddr_t md¡ ; 140 sdp_£ssiÚ_t * m£ssiÚ ; 141 bt_ÿÎback_t mcb ; 142 bt_de¡roy_t mde¡roy ; 143 gpoš‹r mu£r_d©a ; 144 uuid_t muuid ; 145 gušt mio_id ; 148  GSLi¡ * gcÚ‹xt_li¡ = NULL ; 150  $£¬ch_cÚ‹xt_þ—nup ( £¬ch_cÚ‹xt * ùxt ) 152 cÚ‹xt_li¡ = `g_¦i¡_»move (cÚ‹xt_li¡, ùxt ); 154 ià( ùxt -> de¡roy ) 155 ùxt -> `de¡roy (ùxt-> u£r_d©a ); 157 `g_ä“ ( ùxt ); 158 } } 160  $£¬ch_com¶‘ed_cb ( ušt8_t ty³ , ušt16_t ¡©us , 161 ušt8_t * r¥ , size_t size , * u£r_d©a ) 163  £¬ch_cÚ‹xt * ùxt = u£r_d©a ; 164 sdp_li¡_t * »cs = NULL ; 165  sÿÂed , £qËn = 0, by‹¦eá = size ; 166 ušt8_t d©aTy³ ; 167  ”r = 0; 169 ià( ¡©us || ty³ !ð SDP_SVC_SEARCH_ATTR_RSP ) { 170 ”r = - EPROTO ; 171  dÚe ; 174 sÿÂed = `sdp_exŒaù_£qty³ ( r¥ , by‹¦eá , & d©aTy³ , & £qËn ); 175 ià(! sÿÂed || ! £qËn ) 176  dÚe ; 178 r¥ +ð sÿÂed ; 179 by‹¦eá -ð sÿÂed ; 181 sdp_»cÜd_t * »c ; 182  »csize ; 184 »csize = 0; 185 »c = `sdp_exŒaù_pdu ( r¥ , by‹¦eá , & »csize ); 186 ià(! »c ) 189 ià(! »csize ) { 190 `sdp_»cÜd_ä“ ( »c ); 194 sÿÂed +ð »csize ; 195 r¥ +ð »csize ; 196 by‹¦eá -ð »csize ; 198 »cs = `sdp_li¡_­³nd Ôecs, »c ); 199 }  sÿÂed < ( ssize_t è size && by‹¦eá > 0); 201 dÚe : 202 `ÿche_sdp_£ssiÚ (& ùxt -> ¤c , &ùxt-> d¡ , ctxt-> £ssiÚ ); 204 ià( ùxt -> cb ) 205 ùxt -> `cb ( »cs , ”r , ctxt-> u£r_d©a ); 207 ià( »cs ) 208 `sdp_li¡_ä“ ( »cs , ( sdp_ä“_func_t è sdp_»cÜd_ä“ ); 210 `£¬ch_cÚ‹xt_þ—nup ( ùxt ); 211 } } 213  gboÞ—n $£¬ch_´oûss_cb ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 214 gpoš‹r u£r_d©a ) 216  £¬ch_cÚ‹xt * ùxt = u£r_d©a ; 218 ià( cÚd & ( G_IO_ERR | G_IO_HUP | G_IO_NVAL )) { 219 `sdp_þo£ ( ùxt -> £ssiÚ ); 220 ùxt -> £ssiÚ = NULL ; 222 ià( ùxt -> cb ) 223 ùxt -> `cb ( NULL , - EIO , ctxt-> u£r_d©a ); 225 `£¬ch_cÚ‹xt_þ—nup ( ùxt ); 226  FALSE ; 230 ià( `sdp_´oûss ( ùxt -> £ssiÚ ) < 0) 231  FALSE ; 233  TRUE ; 234 } } 236  gboÞ—n $cÚÃù_w©ch ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 237 gpoš‹r u£r_d©a ) 239  £¬ch_cÚ‹xt * ùxt = u£r_d©a ; 240 sdp_li¡_t * £¬ch , * ©Œids ; 241 ušt32_t ¿nge = 0x0000ffff; 242 sockËn_t Ën ; 243  sk , ”r , sk_”r = 0; 245 sk = `g_io_chªÃl_unix_g‘_fd ( chª ); 246 ùxt -> io_id = 0; 248 Ën = ( sk_”r ); 249 ià( `g‘sockÝt ( sk , SOL_SOCKET , SO_ERROR , & sk_”r , & Ën ) < 0) 250 ”r = - ”ºo ; 252 ”r = - sk_”r ; 254 ià( ”r != 0) 255  çžed ; 257 ià( `sdp_£t_nÙify ( ùxt -> £ssiÚ , £¬ch_com¶‘ed_cb , ctxt) < 0) { 258 ”r = - EIO ; 259  çžed ; 262 £¬ch = `sdp_li¡_­³nd ( NULL , & ùxt -> uuid ); 263 ©Œids = `sdp_li¡_­³nd ( NULL , & ¿nge ); 264 ià( `sdp_£rviû_£¬ch_©Œ_async ( ùxt -> £ssiÚ , 265 £¬ch , SDP_ATTR_REQ_RANGE , ©Œids ) < 0) { 266 `sdp_li¡_ä“ ( ©Œids , NULL ); 267 `sdp_li¡_ä“ ( £¬ch , NULL ); 268 ”r = - EIO ; 269  çžed ; 272 `sdp_li¡_ä“ ( ©Œids , NULL ); 273 `sdp_li¡_ä“ ( £¬ch , NULL ); 276 ùxt -> io_id = `g_io_add_w©ch ( chª , 277 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 278 £¬ch_´oûss_cb , ùxt ); 279  FALSE ; 281 çžed : 282 `sdp_þo£ ( ùxt -> £ssiÚ ); 283 ùxt -> £ssiÚ = NULL ; 285 ià( ùxt -> cb ) 286 ùxt -> `cb ( NULL , ”r , ctxt-> u£r_d©a ); 288 `£¬ch_cÚ‹xt_þ—nup ( ùxt ); 290  FALSE ; 291 } } 293  $ü—‹_£¬ch_cÚ‹xt ( £¬ch_cÚ‹xt ** ùxt , 294 cÚ¡ bdaddr_t * ¤c , 295 cÚ¡ bdaddr_t * d¡ , 296 uuid_t * uuid , ušt16_t æags ) 298 sdp_£ssiÚ_t * s ; 299 GIOChªÃl * chª ; 300 ušt32_t ´io = 1; 301  sk ; 303 ià(! ùxt ) 304  - EINVAL ; 306 s = `g‘_ÿched_sdp_£ssiÚ ( ¤c , d¡ ); 307 ià(! s ) 308 s = `sdp_cÚÃù ( ¤c , d¡ , SDP_NON_BLOCKING | æags ); 310 ià(! s ) 311  - ”ºo ; 313 * ùxt = `g_Œy_m®loc0 (( £¬ch_cÚ‹xt )); 314 ià(!* ùxt ) { 315 `sdp_þo£ ( s ); 316  - ENOMEM ; 319 `baýy (&(* ùxt )-> ¤c , src); 320 `baýy (&(* ùxt )-> d¡ , dst); 321 (* ùxt )-> £ssiÚ = s ; 322 (* ùxt )-> uuid = *uuid; 324 sk = `sdp_g‘_sock‘ ( s ); 328 ià( `£tsockÝt ( sk , SOL_SOCKET , SO_PRIORITY , & ´io , (prio)) < 0) 329 `w¬n ("Setting SDP…riority failed: %s (%d)", 330 `¡»¼Ü ( ”ºo ),ƒrrno); 332 chª = `g_io_chªÃl_unix_Ãw ( sk ); 333 (* ùxt )-> io_id = `g_io_add_w©ch ( chª , 334 G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 335 cÚÃù_w©ch , * ùxt ); 336 `g_io_chªÃl_uÄef ( chª ); 339 } } 341  $bt_£¬ch_£rviû (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ , 342 uuid_t * uuid , bt_ÿÎback_t cb , * u£r_d©a , 343 bt_de¡roy_t de¡roy , ušt16_t æags ) 345  £¬ch_cÚ‹xt * ùxt = NULL ; 346  ”r ; 348 ià(! cb ) 349  - EINVAL ; 351 ”r = `ü—‹_£¬ch_cÚ‹xt (& ùxt , ¤c , d¡ , uuid , æags ); 352 ià( ”r < 0) 353  ”r ; 355 ùxt -> cb = cb; 356 ùxt -> de¡roy = destroy; 357 ùxt -> u£r_d©a = user_data; 359 cÚ‹xt_li¡ = `g_¦i¡_­³nd (cÚ‹xt_li¡, ùxt ); 362 } } 364  $fšd_by_bdaddr ( gcÚ¡poš‹r d©a , gcÚ¡poš‹¸ u£r_d©a ) 366 cÚ¡  £¬ch_cÚ‹xt * ùxt = d©a , * £¬ch = u£r_d©a ; 367  »t ; 369 »t = `bacmp (& ùxt -> ¤c , & £¬ch ->src); 370 ià( »t != 0) 371  »t ; 373  `bacmp (& ùxt -> d¡ , & £¬ch ->dst); 374 } } 376  $bt_ÿnûl_discov”y (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ ) 378  £¬ch_cÚ‹xt m©ch , * ùxt ; 379 GSLi¡ * l ; 381 `mem£t (& m©ch , 0, (match)); 382 `baýy (& m©ch . ¤c , src); 383 `baýy (& m©ch . d¡ , dst); 386 l = `g_¦i¡_fšd_cu¡om ( cÚ‹xt_li¡ , & m©ch , fšd_by_bdaddr ); 387 ià( l =ð NULL ) 388  - ENOENT ; 390 ùxt = l -> d©a ; 392 ià(! ùxt -> £ssiÚ ) 393  - ENOTCONN ; 395 ià( ùxt -> io_id ) 396 `g_sourû_»move ( ùxt -> io_id ); 398 ià( ùxt -> £ssiÚ ) 399 `sdp_þo£ ( ùxt -> £ssiÚ ); 401 `£¬ch_cÚ‹xt_þ—nup ( ùxt ); 404 } } 406  $bt_þ—r_ÿched_£ssiÚ (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ ) 408 sdp_£ssiÚ_t * £ssiÚ ; 410 £ssiÚ = `g‘_ÿched_sdp_£ssiÚ ( ¤c , d¡ ); 411 ià( £ssiÚ ) 412 `sdp_þo£ ( £ssiÚ ); 413 } } @src/sdp-client.h 24 (* tbt_ÿÎback_t è( tsdp_li¡_t * t»cs ,  t”r , tgpoš‹r tu£r_d©a ); 25 (* tbt_de¡roy_t è( tgpoš‹r tu£r_d©a ); 27  `bt_£¬ch_£rviû (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ , 28 uuid_t * uuid , bt_ÿÎback_t cb , * u£r_d©a , 29 bt_de¡roy_t de¡roy , ušt16_t æags ); 30  `bt_ÿnûl_discov”y (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ ); 31  `bt_þ—r_ÿched_£ssiÚ (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ ); @src/sdp-xml.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<ùy³.h > 31  ~<¡ršg.h > 32  ~ 33  ~<¡dlib.h > 35  ~ 37  ~ 38  ~ 40  ~"sdp-xml.h " 42  #DBG (...è()(0) ) 43  #”rÜ (...è()(0) ) 45  #SDP_XML_ENCODING_NORMAL 0 ) 46  #SDP_XML_ENCODING_HEX 1 ) 48  #STRBUFSIZE 1024 ) 49  #MAXINDENT 64 ) 51  ssdp_xml_d©a { 52 * m‹xt ; 53  msize ; 54 sdp_d©a_t * md©a ; 55  sdp_xml_d©a * mÃxt ; 56  mty³ ; 57 * mÇme ; 61  scÚ‹xt_d©a { 62 sdp_»cÜd_t * m»cÜd ; 63 sdp_d©a_t m©Œ_d©a ; 64  sdp_xml_d©a * m¡ack_h—d ; 65 ušt16_t m©Œ_id ; 68  $compu‹_£q_size ( sdp_d©a_t * d©a ) 70  un™_size = d©a -> un™Size ; 71 sdp_d©a_t * £q = d©a -> v® . d©a£q ; 73 ; £q ; seq = seq-> Ãxt ) 74 un™_size +ð £q -> un™Size ; 76  un™_size ; 77 } } 79  #DEFAULT_XML_DATA_SIZE 1024 ) 81  sdp_xml_d©a * $sdp_xml_d©a_®loc () 83  sdp_xml_d©a * –em ; 85 –em = `m®loc (( sdp_xml_d©a )); 86 ià(! –em ) 87  NULL ; 89 `mem£t ( –em , 0, ( sdp_xml_d©a )); 92 –em -> size = DEFAULT_XML_DATA_SIZE ; 93 –em -> ‹xt = `m®loc ( DEFAULT_XML_DATA_SIZE ); 94 ià(! –em -> ‹xt ) { 95 `ä“ ( –em ); 96  NULL ; 98 –em -> ‹xt [0] = '\0'; 100  –em ; 101 } } 103  sdp_xml_d©a * $sdp_xml_d©a_ex·nd ( sdp_xml_d©a * –em ) 105 * Ãwbuf ; 107 Ãwbuf = `m®loc ( –em -> size * 2); 108 ià(! Ãwbuf ) 109  NULL ; 111 `memýy ( Ãwbuf , –em -> ‹xt ,ƒËm-> size ); 112 –em -> size *= 2; 113 `ä“ ( –em -> ‹xt ); 115 –em -> ‹xt = Ãwbuf ; 117  –em ; 118 } } 120  sdp_d©a_t * $sdp_xml_·r£_uuid128 (cÚ¡ * d©a ) 122 ušt128_t v® ; 123  i , j ; 125  buf [3]; 127 `mem£t (& v® , 0, (val)); 129 buf [2] = '\0'; 131  j = 0, i = 0; i < `¡¾’ ( d©a );) { 132 ià( d©a [ i ] == '-') { 133 i ++; 137 buf [0] = d©a [ i ]; 138 buf [1] = d©a [ i + 1]; 140 v® . d©a [ j ++] = `¡¹oul ( buf , 0, 16); 141 i += 2; 144  `sdp_d©a_®loc ( SDP_UUID128 , & v® ); 145 } } 147  sdp_d©a_t * $sdp_xml_·r£_uuid (cÚ¡ * d©a , sdp_»cÜd_t * »cÜd ) 149 sdp_d©a_t * »t ; 150 * ’d±r ; 151 ušt32_t v® ; 152 ušt16_t v®2 ; 153  Ën ; 155 Ën = `¡¾’ ( d©a ); 157 ià( Ën == 36) { 158 »t = `sdp_xml_·r£_uuid128 ( d©a ); 159  »suÉ ; 162 v® = `¡¹Þl ( d©a , & ’d±r , 16); 165 ià(* ’d±r != '\0') 166  NULL ; 168 ià( v® > USHRT_MAX ) { 169 »t = `sdp_d©a_®loc ( SDP_UUID32 , & v® ); 170  »suÉ ; 173 v®2 = v® ; 175 »t = `sdp_d©a_®loc ( SDP_UUID16 , & v®2 ); 177 »suÉ : 178 ià( »cÜd && »t ) 179 `sdp_·‰”n_add_uuid ( »cÜd , & »t -> v® . uuid ); 181  »t ; 182 } } 184  sdp_d©a_t * $sdp_xml_·r£_št (cÚ¡ * d©a , ušt8_t dtd ) 186 * ’d±r ; 187 sdp_d©a_t * »t = NULL ; 189  dtd ) { 190  SDP_BOOL : 192 ušt8_t v® = 0; 194 ià(! `¡rcmp ("Œue", d©a )) 195 v® = 1; 196 ià(! `¡rcmp ("çl£", d©a )) 197 v® = 0; 199  NULL ; 201 »t = `sdp_d©a_®loc ( dtd , & v® ); 205  SDP_INT8 : 207 št8_t v® = `¡¹oul ( d©a , & ’d±r , 0); 210 ià(( ’d±r !ð d©a ) && (*endptr != '\0')) 211  NULL ; 213 »t = `sdp_d©a_®loc ( dtd , & v® ); 217  SDP_UINT8 : 219 ušt8_t v® = `¡¹oul ( d©a , & ’d±r , 0); 222 ià(( ’d±r !ð d©a ) && (*endptr != '\0')) 223  NULL ; 225 »t = `sdp_d©a_®loc ( dtd , & v® ); 229  SDP_INT16 : 231 št16_t v® = `¡¹oul ( d©a , & ’d±r , 0); 234 ià(( ’d±r !ð d©a ) && (*endptr != '\0')) 235  NULL ; 237 »t = `sdp_d©a_®loc ( dtd , & v® ); 241  SDP_UINT16 : 243 ušt16_t v® = `¡¹oul ( d©a , & ’d±r , 0); 246 ià(( ’d±r !ð d©a ) && (*endptr != '\0')) 247  NULL ; 249 »t = `sdp_d©a_®loc ( dtd , & v® ); 253  SDP_INT32 : 255 št32_t v® = `¡¹oul ( d©a , & ’d±r , 0); 258 ià(( ’d±r !ð d©a ) && (*endptr != '\0')) 259  NULL ; 261 »t = `sdp_d©a_®loc ( dtd , & v® ); 265  SDP_UINT32 : 267 ušt32_t v® = `¡¹oul ( d©a , & ’d±r , 0); 270 ià(( ’d±r !ð d©a ) && (*endptr != '\0')) 271  NULL ; 273 »t = `sdp_d©a_®loc ( dtd , & v® ); 277  SDP_INT64 : 279 št64_t v® = `¡¹ouÎ ( d©a , & ’d±r , 0); 282 ià(( ’d±r !ð d©a ) && (*endptr != '\0')) 283  NULL ; 285 »t = `sdp_d©a_®loc ( dtd , & v® ); 289  SDP_UINT64 : 291 ušt64_t v® = `¡¹ouÎ ( d©a , & ’d±r , 0); 294 ià(( ’d±r !ð d©a ) && (*endptr != '\0')) 295  NULL ; 297 »t = `sdp_d©a_®loc ( dtd , & v® ); 301  SDP_INT128 : 302  SDP_UINT128 : 304 ušt128_t v® ; 305  i = 0; 306  buf [3]; 308 buf [2] = '\0'; 310 ; i < 32; i += 2) { 311 buf [0] = d©a [ i ]; 312 buf [1] = d©a [ i + 1]; 314 v® . d©a [ i >> 1] = `¡¹oul ( buf , 0, 16); 317 »t = `sdp_d©a_®loc ( dtd , & v® ); 323  »t ; 324 } } 326 * $sdp_xml_·r£_¡ršg_decode (cÚ¡ * d©a ,  ’codšg , 327 ušt32_t * Ëngth ) 329  Ën = `¡¾’ ( d©a ); 330 * ‹xt ; 332 ià( ’codšg =ð SDP_XML_ENCODING_NORMAL ) { 333 ‹xt = `¡rdup ( d©a ); 334 * Ëngth = Ën ; 336  buf [3], * decoded ; 337  i ; 339 decoded = `m®loc (( Ën >> 1) + 1); 340 ià(! decoded ) 341  NULL ; 344 Ën = (len >> 1) << 1; 346 buf [2] = '\0'; 348  i = 0; i < Ën ; i += 2) { 349 buf [0] = d©a [ i ]; 350 buf [1] = d©a [ i + 1]; 352 decoded [ i >> 1] = `¡¹oul ( buf , 0, 16); 355 decoded [ Ën >> 1] = '\0'; 356 ‹xt = decoded ; 357 * Ëngth = Ën >> 1; 360  ‹xt ; 361 } } 363  sdp_d©a_t * $sdp_xml_·r£_u¾ (cÚ¡ * d©a ) 365 ušt8_t dtd = SDP_URL_STR8 ; 366 * u¾ ; 367 ušt32_t Ëngth ; 368 sdp_d©a_t * »t ; 370 u¾ = `sdp_xml_·r£_¡ršg_decode ( d©a , 371 SDP_XML_ENCODING_NORMAL , & Ëngth ); 372 ià(! u¾ ) 373  NULL ; 375 ià( Ëngth > UCHAR_MAX ) 376 dtd = SDP_URL_STR16 ; 378 »t = `sdp_d©a_®loc_w™h_Ëngth ( dtd , u¾ , Ëngth ); 380 `ä“ ( u¾ ); 382  »t ; 383 } } 385  sdp_d©a_t * $sdp_xml_·r£_‹xt (cÚ¡ * d©a ,  ’codšg ) 387 ušt8_t dtd = SDP_TEXT_STR8 ; 388 * ‹xt ; 389 ušt32_t Ëngth ; 390 sdp_d©a_t * »t ; 392 ‹xt = `sdp_xml_·r£_¡ršg_decode ( d©a , ’codšg , & Ëngth ); 393 ià(! ‹xt ) 394  NULL ; 396 ià( Ëngth > UCHAR_MAX ) 397 dtd = SDP_TEXT_STR16 ; 399 »t = `sdp_d©a_®loc_w™h_Ëngth ( dtd , ‹xt , Ëngth ); 401 `ä“ ( ‹xt ); 403  »t ; 404 } } 406  sdp_d©a_t * $sdp_xml_·r£_nž (cÚ¡ * d©a ) 408  `sdp_d©a_®loc ( SDP_DATA_NIL , 0); 409 } } 411  sdp_d©a_t * $sdp_xml_·r£_d©©y³ (cÚ¡ * – , 412  sdp_xml_d©a * –em , 413 sdp_»cÜd_t * »cÜd ) 415 cÚ¡ * d©a = –em -> ‹xt ; 417 ià(! `¡rcmp ( – , "boolean")) 418  `sdp_xml_·r£_št ( d©a , SDP_BOOL ); 419 ià(! `¡rcmp ( – , "uint8")) 420  `sdp_xml_·r£_št ( d©a , SDP_UINT8 ); 421 ià(! `¡rcmp ( – , "uint16")) 422  `sdp_xml_·r£_št ( d©a , SDP_UINT16 ); 423 ià(! `¡rcmp ( – , "uint32")) 424  `sdp_xml_·r£_št ( d©a , SDP_UINT32 ); 425 ià(! `¡rcmp ( – , "uint64")) 426  `sdp_xml_·r£_št ( d©a , SDP_UINT64 ); 427 ià(! `¡rcmp ( – , "uint128")) 428  `sdp_xml_·r£_št ( d©a , SDP_UINT128 ); 429 ià(! `¡rcmp ( – , "int8")) 430  `sdp_xml_·r£_št ( d©a , SDP_INT8 ); 431 ià(! `¡rcmp ( – , "int16")) 432  `sdp_xml_·r£_št ( d©a , SDP_INT16 ); 433 ià(! `¡rcmp ( – , "int32")) 434  `sdp_xml_·r£_št ( d©a , SDP_INT32 ); 435 ià(! `¡rcmp ( – , "int64")) 436  `sdp_xml_·r£_št ( d©a , SDP_INT64 ); 437 ià(! `¡rcmp ( – , "int128")) 438  `sdp_xml_·r£_št ( d©a , SDP_INT128 ); 439 ià(! `¡rcmp ( – , "uuid")) 440  `sdp_xml_·r£_uuid ( d©a , »cÜd ); 441 ià(! `¡rcmp ( – , "url")) 442  `sdp_xml_·r£_u¾ ( d©a ); 443 ià(! `¡rcmp ( – , "text")) 444  `sdp_xml_·r£_‹xt ( d©a , –em -> ty³ ); 445 ià(! `¡rcmp ( – , "nil")) 446  `sdp_xml_·r£_nž ( d©a ); 448  NULL ; 449 } } 450  $–em’t_¡¬t ( GM¬kupP¬£CÚ‹xt * cÚ‹xt , 451 cÚ¡ * –em’t_Çme , cÚ¡ ** ©Œibu‹_Çmes , 452 cÚ¡ ** ©Œibu‹_v®ues , gpoš‹r u£r_d©a , GE¼Ü ** ”r ) 454  cÚ‹xt_d©a * ùx_d©a = u£r_d©a ; 456 ià(! `¡rcmp ( –em’t_Çme , "record")) 459 ià(! `¡rcmp ( –em’t_Çme , "attribute")) { 460  i ; 461  i = 0; ©Œibu‹_Çmes [i]; i++) { 462 ià(! `¡rcmp ( ©Œibu‹_Çmes [ i ], "id")) { 463 ùx_d©a -> ©Œ_id = `¡¹Þ ( ©Œibu‹_v®ues [ i ], 0, 0); 467 `DBG ("New‡‰ribu‹ 0x%04x", ùx_d©a -> ©Œ_id ); 471 ià( ùx_d©a -> ¡ack_h—d ) { 472  sdp_xml_d©a * Ãw–em = `sdp_xml_d©a_®loc (); 473 Ãw–em -> Ãxt = ùx_d©a -> ¡ack_h—d ; 474 ùx_d©a -> ¡ack_h—d = Ãw–em ; 476 ùx_d©a -> ¡ack_h—d = `sdp_xml_d©a_®loc (); 477 ùx_d©a -> ¡ack_h—d -> Ãxt = NULL ; 480 ià(! `¡rcmp ( –em’t_Çme , "sequence")) 481 ùx_d©a -> ¡ack_h—d -> d©a = `sdp_d©a_®loc ( SDP_SEQ8 , NULL ); 482 ià(! `¡rcmp ( –em’t_Çme , "alternate")) 483 ùx_d©a -> ¡ack_h—d -> d©a = `sdp_d©a_®loc ( SDP_ALT8 , NULL ); 485  i ; 487  i = 0; ©Œibu‹_Çmes [i]; i++) { 488 ià(! `¡rcmp ( ©Œibu‹_Çmes [ i ], "value")) { 489  cu¾’ = `¡¾’ ( ùx_d©a -> ¡ack_h—d -> ‹xt ); 490  ©ŒËn = `¡¾’ ( ©Œibu‹_v®ues [ i ]); 493 ( cu¾’ + 1 + ©ŒËn è> ùx_d©a -> ¡ack_h—d -> size ) 494 `sdp_xml_d©a_ex·nd ( ùx_d©a -> ¡ack_h—d ); 496 `memýy ( ùx_d©a -> ¡ack_h—d -> ‹xt + cu¾’ , 497 ©Œibu‹_v®ues [ i ], ©ŒËn ); 498 ùx_d©a -> ¡ack_h—d -> ‹xt [ cu¾’ + ©ŒËn ] = '\0'; 501 ià(! `¡rcmp ( ©Œibu‹_Çmes [ i ], "encoding")) { 502 ià(! `¡rcmp ( ©Œibu‹_v®ues [ i ], "hex")) 503 ùx_d©a -> ¡ack_h—d -> ty³ = 1; 506 ià(! `¡rcmp ( ©Œibu‹_Çmes [ i ], "name")) 507 ùx_d©a -> ¡ack_h—d -> Çme = `¡rdup ( ©Œibu‹_v®ues [ i ]); 510 ùx_d©a -> ¡ack_h—d -> d©a = `sdp_xml_·r£_d©©y³ ( –em’t_Çme , 511 ùx_d©a -> ¡ack_h—d , ctx_d©a-> »cÜd ); 513 ià( ùx_d©a -> ¡ack_h—d -> d©a =ð NULL ) 514 `”rÜ ("Cª'ˆ·r£ƒËm’ˆ%s", –em’t_Çme ); 516 } } 518  $sdp_xml_d©a_ä“ ( sdp_xml_d©a * –em ) 520 ià( –em -> d©a ) 521 `sdp_d©a_ä“ ( –em -> d©a ); 523 `ä“ ( –em -> Çme ); 524 `ä“ ( –em -> ‹xt ); 525 `ä“ ( –em ); 526 } } 528  $–em’t_’d ( GM¬kupP¬£CÚ‹xt * cÚ‹xt , 529 cÚ¡ * –em’t_Çme , gpoš‹r u£r_d©a , GE¼Ü ** ”r ) 531  cÚ‹xt_d©a * ùx_d©a = u£r_d©a ; 532  sdp_xml_d©a * –em ; 533 #ifdeà __TIZEN_PATCH__ 534 ià( –em’t_Çme =ð NULL ) 538 ià(! `¡rcmp ( –em’t_Çme , "record")) 541 ià(! `¡rcmp ( –em’t_Çme , "attribute")) { 542 ià( ùx_d©a -> ¡ack_h—d && ctx_d©a->¡ack_h—d-> d©a ) { 543  »t = `sdp_©Œ_add ( ùx_d©a -> »cÜd , ctx_d©a-> ©Œ_id , 544 ùx_d©a -> ¡ack_h—d -> d©a ); 545 ià( »t == -1) 546 `DBG ("Could‚ot‡dd‡ttribute 0x%04x", 547 ùx_d©a -> ©Œ_id ); 549 ùx_d©a -> ¡ack_h—d -> d©a = NULL ; 550 `sdp_xml_d©a_ä“ ( ùx_d©a -> ¡ack_h—d ); 551 ùx_d©a -> ¡ack_h—d = NULL ; 553 `DBG ("NØd©¨f܇‰ribu‹ 0x%04x", ùx_d©a -> ©Œ_id ); 558 ià(! ùx_d©a -> ¡ack_h—d || !ùx_d©a->¡ack_h—d-> d©a ) { 559 `DBG ("NØd©¨fÜ %s", –em’t_Çme ); 563 ià(! `¡rcmp ( –em’t_Çme , "sequence")) { 564 ùx_d©a -> ¡ack_h—d -> d©a -> un™Size = `compu‹_£q_size (ctx_data->stack_head->data); 566 ià( ùx_d©a -> ¡ack_h—d -> d©a -> un™Size > USHRT_MAX ) { 567 ùx_d©a -> ¡ack_h—d -> d©a -> un™Size +ð( ušt32_t ); 568 ùx_d©a -> ¡ack_h—d -> d©a -> dtd = SDP_SEQ32 ; 569 } ià( ùx_d©a -> ¡ack_h—d -> d©a -> un™Size > UCHAR_MAX ) { 570 ùx_d©a -> ¡ack_h—d -> d©a -> un™Size +ð( ušt16_t ); 571 ùx_d©a -> ¡ack_h—d -> d©a -> dtd = SDP_SEQ16 ; 573 ùx_d©a -> ¡ack_h—d -> d©a -> un™Size +ð( ušt8_t ); 575 } ià(! `¡rcmp ( –em’t_Çme , "alternate")) { 576 ùx_d©a -> ¡ack_h—d -> d©a -> un™Size = `compu‹_£q_size (ctx_data->stack_head->data); 578 ià( ùx_d©a -> ¡ack_h—d -> d©a -> un™Size > USHRT_MAX ) { 579 ùx_d©a -> ¡ack_h—d -> d©a -> un™Size +ð( ušt32_t ); 580 ùx_d©a -> ¡ack_h—d -> d©a -> dtd = SDP_ALT32 ; 581 } ià( ùx_d©a -> ¡ack_h—d -> d©a -> un™Size > UCHAR_MAX ) { 582 ùx_d©a -> ¡ack_h—d -> d©a -> un™Size +ð( ušt16_t ); 583 ùx_d©a -> ¡ack_h—d -> d©a -> dtd = SDP_ALT16 ; 585 ùx_d©a -> ¡ack_h—d -> d©a -> un™Size +ð( ušt8_t ); 589 ià( ùx_d©a -> ¡ack_h—d -> Ãxt && ctx_d©a->¡ack_h—d-> d©a && 590 ùx_d©a -> ¡ack_h—d -> Ãxt -> d©a ) { 591  ùx_d©a -> ¡ack_h—d -> Ãxt -> d©a -> dtd ) { 592  SDP_SEQ8 : 593  SDP_SEQ16 : 594  SDP_SEQ32 : 595  SDP_ALT8 : 596  SDP_ALT16 : 597  SDP_ALT32 : 598 ùx_d©a -> ¡ack_h—d -> Ãxt -> d©a -> v® . d©a£q = 599 `sdp_£q_­³nd ( ùx_d©a -> ¡ack_h—d -> Ãxt -> d©a -> v® . d©a£q , 600 ùx_d©a -> ¡ack_h—d -> d©a ); 601 ùx_d©a -> ¡ack_h—d -> d©a = NULL ; 605 –em = ùx_d©a -> ¡ack_h—d ; 606 ùx_d©a -> ¡ack_h—d = ctx_d©a->¡ack_h—d-> Ãxt ; 608 `sdp_xml_d©a_ä“ ( –em ); 610 } } 612  GM¬kupP¬£r g·r£r = { 613 –em’t_¡¬t , –em’t_’d , NULL , NULL, NULL 616 sdp_»cÜd_t * $sdp_xml_·r£_»cÜd (cÚ¡ * d©a ,  size ) 618 GM¬kupP¬£CÚ‹xt * ùx ; 619  cÚ‹xt_d©a * ùx_d©a ; 620 sdp_»cÜd_t * »cÜd ; 622 ùx_d©a = `m®loc ((*ctx_data)); 623 ià(! ùx_d©a ) 624  NULL ; 626 »cÜd = `sdp_»cÜd_®loc (); 627 ià(! »cÜd ) { 628 `ä“ ( ùx_d©a ); 629  NULL ; 632 `mem£t ( ùx_d©a , 0, (*ctx_data)); 633 ùx_d©a -> »cÜd =„ecord; 635 ùx = `g_m¬kup_·r£_cÚ‹xt_Ãw (& ·r£r , 0, ùx_d©a , NULL ); 637 ià( `g_m¬kup_·r£_cÚ‹xt_·r£ ( ùx , d©a , size , NULL è=ð FALSE ) { 638 `”rÜ ("XML…arsingƒrror"); 639 `g_m¬kup_·r£_cÚ‹xt_ä“ ( ùx ); 640 `sdp_»cÜd_ä“ ( »cÜd ); 641 `ä“ ( ùx_d©a ); 642  NULL ; 645 `g_m¬kup_·r£_cÚ‹xt_ä“ ( ùx ); 647 `ä“ ( ùx_d©a ); 649  »cÜd ; 650 } } 653  cÚv”t_¿w_d©a_to_xml ( sdp_d©a_t * v®ue ,  šd’t_Ëv– , 654 * d©a , (* ­³nd” )(*, const *)) 656  i , hex ; 657  buf [ STRBUFSIZE ]; 658  šd’t [ MAXINDENT ]; 660 ià(! v®ue ) 663 ià( šd’t_Ëv– >ð MAXINDENT ) 664 šd’t_Ëv– = MAXINDENT - 2; 666  i = 0; i < šd’t_Ëv– ; i++) 667 šd’t [ i ] = '\t'; 669 šd’t [ i ] = '\0'; 670 buf [ STRBUFSIZE - 1] = '\0'; 672  v®ue -> dtd ) { 673  SDP_DATA_NIL : 674 `­³nd” ( d©a , šd’t ); 675 `­³nd” ( d©a , "\n"); 678  SDP_BOOL : 679 `­³nd” ( d©a , šd’t ); 680 `­³nd” ( d©a , " v® . ušt8 ? "true" : "false"); 682 `­³nd” ( d©a , "\" />\n"); 685  SDP_UINT8 : 686 `­³nd” ( d©a , šd’t ); 687 `­³nd” ( d©a , " v® . ušt8 ); 689 `­³nd” ( d©a , buf ); 690 `­³nd” ( d©a , "\" />\n"); 693  SDP_UINT16 : 694 `­³nd” ( d©a , šd’t ); 695 `­³nd” ( d©a , " v® . ušt16 ); 697 `­³nd” ( d©a , buf ); 698 `­³nd” ( d©a , "\" />\n"); 701  SDP_UINT32 : 702 `­³nd” ( d©a , šd’t ); 703 `­³nd” ( d©a , " v® . ušt32 ); 705 `­³nd” ( d©a , buf ); 706 `­³nd” ( d©a , "\" />\n"); 709  SDP_UINT64 : 710 `­³nd” ( d©a , šd’t ); 711 `­³nd” ( d©a , " v® . ušt64 ); 713 `­³nd” ( d©a , buf ); 714 `­³nd” ( d©a , "\" />\n"); 717  SDP_UINT128 : 718 `­³nd” ( d©a , šd’t ); 719 `­³nd” ( d©a , " v® . ušt128 . d©a [ i ]); 726 `­³nd” ( d©a , buf ); 727 `­³nd” ( d©a , "\" />\n"); 730  SDP_INT8 : 731 `­³nd” ( d©a , šd’t ); 732 `­³nd” ( d©a , " v® . št8 ); 734 `­³nd” ( d©a , buf ); 735 `­³nd” ( d©a , "\" />\n"); 738  SDP_INT16 : 739 `­³nd” ( d©a , šd’t ); 740 `­³nd” ( d©a , " v® . št16 ); 742 `­³nd” ( d©a , buf ); 743 `­³nd” ( d©a , "\" />\n"); 746  SDP_INT32 : 747 `­³nd” ( d©a , šd’t ); 748 `­³nd” ( d©a , " v® . št32 ); 750 `­³nd” ( d©a , buf ); 751 `­³nd” ( d©a , "\" />\n"); 754  SDP_INT64 : 755 `­³nd” ( d©a , šd’t ); 756 `­³nd” ( d©a , " v® . št64 ); 758 `­³nd” ( d©a , buf ); 759 `­³nd” ( d©a , "\" />\n"); 762  SDP_INT128 : 763 `­³nd” ( d©a , šd’t ); 764 `­³nd” ( d©a , " v® . št128 . d©a [ i ]); 770 `­³nd” ( d©a , buf ); 772 `­³nd” ( d©a , "\" />\n"); 775  SDP_UUID16 : 776 `­³nd” ( d©a , šd’t ); 777 `­³nd” ( d©a , " v® . uuid .v®ue. uuid16 ); 779 `­³nd” ( d©a , buf ); 780 `­³nd” ( d©a , "\" />\n"); 783  SDP_UUID32 : 784 `­³nd” ( d©a , šd’t ); 785 `­³nd” ( d©a , " v® . uuid .v®ue. uuid32 ); 787 `­³nd” ( d©a , buf ); 788 `­³nd” ( d©a , "\" />\n"); 791  SDP_UUID128 : 792 `­³nd” ( d©a , šd’t ); 793 `­³nd” ( d©a , " v® . uuid .value. 798 uuid128 . d©a [0], 799 (è v®ue -> v® . uuid .value. 800 uuid128 . d©a [1], 801 (è v®ue -> v® . uuid .value. 802 uuid128 . d©a [2], 803 (è v®ue -> v® . uuid .value. 804 uuid128 . d©a [3], 805 (è v®ue -> v® . uuid .value. 806 uuid128 . d©a [4], 807 (è v®ue -> v® . uuid .value. 808 uuid128 . d©a [5], 809 (è v®ue -> v® . uuid .value. 810 uuid128 . d©a [6], 811 (è v®ue -> v® . uuid .value. 812 uuid128 . d©a [7], 813 (è v®ue -> v® . uuid .value. 814 uuid128 . d©a [8], 815 (è v®ue -> v® . uuid .value. 816 uuid128 . d©a [9], 817 (è v®ue -> v® . uuid .value. 818 uuid128 . d©a [10], 819 (è v®ue -> v® . uuid .value. 820 uuid128 . d©a [11], 821 (è v®ue -> v® . uuid .value. 822 uuid128 . d©a [12], 823 (è v®ue -> v® . uuid .value. 824 uuid128 . d©a [13], 825 (è v®ue -> v® . uuid .value. 826 uuid128 . d©a [14], 827 (è v®ue -> v® . uuid .value. 828 uuid128 . d©a [15]); 830 `­³nd” ( d©a , buf ); 831 `­³nd” ( d©a , "\" />\n"); 834  SDP_TEXT_STR8 : 835  SDP_TEXT_STR16 : 836  SDP_TEXT_STR32 : 838  num_ch¬s_to_esÿ³ = 0; 839  Ëngth = v®ue -> un™Size - 1; 840 * ¡rBuf ; 842 hex = 0; 844  i = 0; i < Ëngth ; i++) { 845 ià(! `i¥ršt ( v®ue -> v® . ¡r [ i ]) && 846 v®ue -> v® . ¡r [ i ] != '\0') { 847 hex = 1; 852 ià(( v®ue -> v® . ¡r [ i ] == '<') || 853 ( v®ue -> v® . ¡r [ i ] == '>') || 854 ( v®ue -> v® . ¡r [ i ] == '"') || 855 ( v®ue -> v® . ¡r [ i ] == '&')) 856 num_ch¬s_to_esÿ³ ++; 859 `­³nd” ( d©a , šd’t ); 861 `­³nd” ( d©a , " un™Size -1) * 2 + 1)); 867 ià(! ¡rBuf ) { 868 `DBG ("No memoryo convert„aw datao xml"); 876  i = 0; i < ( v®ue -> un™Size -1); i++) 877 `¥rštf (& ¡rBuf [ i *()*2], 879 (è v®ue -> v® . ¡r [ i ]); 881 ¡rBuf [( v®ue -> un™Size -1) * 2] = '\0'; 883  j ; 885 ¡rBuf = `m®loc (() * 886 ( v®ue -> un™Size + 1 + num_ch¬s_to_esÿ³ * 4)); 887 ià(! ¡rBuf ) { 888 `DBG ("No memoryo convert„aw datao xml"); 891  i = 0, j = 0; i < Ëngth ; i++) { 892 ià( v®ue -> v® . ¡r [ i ] == '&') { 893 ¡rBuf [ j ++] = '&'; 894 ¡rBuf [ j ++] = 'a'; 895 ¡rBuf [ j ++] = 'm'; 896 ¡rBuf [ j ++] = 'p'; 897 } ià( v®ue -> v® . ¡r [ i ] == '<') { 898 ¡rBuf [ j ++] = '&'; 899 ¡rBuf [ j ++] = 'l'; 900 ¡rBuf [ j ++] = 't'; 901 } ià( v®ue -> v® . ¡r [ i ] == '>') { 902 ¡rBuf [ j ++] = '&'; 903 ¡rBuf [ j ++] = 'g'; 904 ¡rBuf [ j ++] = 't'; 905 } ià( v®ue -> v® . ¡r [ i ] == '"') { 906 ¡rBuf [ j ++] = '&'; 907 ¡rBuf [ j ++] = 'q'; 908 ¡rBuf [ j ++] = 'u'; 909 ¡rBuf [ j ++] = 'o'; 910 ¡rBuf [ j ++] = 't'; 911 } ià( v®ue -> v® . ¡r [ i ] == '\0') { 912 ¡rBuf [ j ++] = ' '; 914 ¡rBuf [ j ++] = v®ue -> v® . ¡r [ i ]; 918 ¡rBuf [ j ] = '\0'; 921 `­³nd” ( d©a , "value=\""); 922 `­³nd” ( d©a , ¡rBuf ); 923 `­³nd” ( d©a , "\" />\n"); 924 `ä“ ( ¡rBuf ); 928  SDP_URL_STR8 : 929  SDP_URL_STR16 : 930  SDP_URL_STR32 : 932 * ¡rBuf ; 934 `­³nd” ( d©a , šd’t ); 935 `­³nd” ( d©a , " v® . ¡r , v®ue-> un™Size - 1); 937 `­³nd” ( d©a , ¡rBuf ); 938 `ä“ ( ¡rBuf ); 939 `­³nd” ( d©a , "\" />\n"); 943  SDP_SEQ8 : 944  SDP_SEQ16 : 945  SDP_SEQ32 : 946 `­³nd” ( d©a , šd’t ); 947 `­³nd” ( d©a , "\n"); 949 `cÚv”t_¿w_d©a_to_xml ( v®ue -> v® . d©a£q , 950 šd’t_Ëv– + 1, d©a , ­³nd” ); 952 `­³nd” ( d©a , šd’t ); 953 `­³nd” ( d©a , "\n"); 957  SDP_ALT8 : 958  SDP_ALT16 : 959  SDP_ALT32 : 960 `­³nd” ( d©a , šd’t ); 962 `­³nd” ( d©a , "\n"); 964 `cÚv”t_¿w_d©a_to_xml ( v®ue -> v® . d©a£q , 965 šd’t_Ëv– + 1, d©a , ­³nd” ); 966 `­³nd” ( d©a , šd’t ); 968 `­³nd” ( d©a , "\n"); 973 `cÚv”t_¿w_d©a_to_xml ( v®ue -> Ãxt , šd’t_Ëv– , d©a , ­³nd” ); 974 } } 976  scÚv”siÚ_d©a { 977 * md©a ; 978 (* m­³nd” )(* md©a , const *); 981  $cÚv”t_¿w_©Œ_to_xml_func (* v® , * d©a ) 983  cÚv”siÚ_d©a * cd = d©a ; 984 sdp_d©a_t * v®ue = v® ; 985  buf [ STRBUFSIZE ]; 987 buf [ STRBUFSIZE - 1] = '\0'; 988 `¢´štf ( buf , STRBUFSIZE - 1, "\t\n", 989 v®ue -> ©ŒId ); 990 cd -> `­³nd” (cd-> d©a , buf ); 992 `cÚv”t_¿w_d©a_to_xml ( v®ue , 2, cd -> d©a , cd-> ­³nd” ); 994 cd -> `­³nd” (cd-> d©a , "\t\n"); 995 } } 1003  cÚv”t_sdp_»cÜd_to_xml ( sdp_»cÜd_t * »c , 1004 * d©a , (* ­³nd” )(*, const *)) 1006  cÚv”siÚ_d©a cd ; 1008 cd . d©a = data; 1009 cd . ­³nd” =‡ppender; 1011 ià( »c &&„ec-> ©Œli¡ ) { 1012 `­³nd” ( d©a , "\n\n"); 1013 `­³nd” ( d©a , "\n"); 1014 `sdp_li¡_fÜ—ch ( »c -> ©Œli¡ , 1015 cÚv”t_¿w_©Œ_to_xml_func , & cd ); 1016 `­³nd” ( d©a , "\n"); 1018 } } @src/sdp-xml.h 25 #iâdeà __SDP_XML_H 26  #__SDP_XML_H ) 28  ~ 30  cÚv”t_sdp_»cÜd_to_xml ( sdp_»cÜd_t * »c , 31 * u£r_d©a , (* ­³nd_func ) (*, const *)); 33 sdp_»cÜd_t * `sdp_xml_·r£_»cÜd (cÚ¡ * d©a ,  size ); @src/sdpd-database.c 27 #ifdeà HAVE_CONFIG_H 28  ~ 31  ~<¡dlib.h > 33  ~ 34  ~ 35  ~ 37  ~"sdpd.h " 38  ~"log.h " 40  sdp_li¡_t * g£rviû_db ; 41  sdp_li¡_t * gacûss_db ; 44 ušt32_t mhªdË ; 45 bdaddr_t mdeviû ; 46 } tsdp_acûss_t ; 53  $»cÜd_sÜt (cÚ¡ * r1 , cÚ¡ * r2 ) 55 cÚ¡ sdp_»cÜd_t * »c1 = r1 ; 56 cÚ¡ sdp_»cÜd_t * »c2 = r2 ; 58 ià(! »c1 || ! »c2 ) { 59 `”rÜ ("NULL RECORD LIST FATAL"); 63  »c1 -> hªdË - »c2 ->handle; 64 } } 66  $acûss_sÜt (cÚ¡ * r1 , cÚ¡ * r2 ) 68 cÚ¡ sdp_acûss_t * »c1 = r1 ; 69 cÚ¡ sdp_acûss_t * »c2 = r2 ; 71 ià(! »c1 || ! »c2 ) { 72 `”rÜ ("NULL RECORD LIST FATAL"); 76  »c1 -> hªdË - »c2 ->handle; 77 } } 79  $acûss_ä“ (* p ) 81 `ä“ ( p ); 82 } } 87  $sdp_svcdb_»£t () 89 `sdp_li¡_ä“ ( £rviû_db , ( sdp_ä“_func_t è sdp_»cÜd_ä“ ); 90 £rviû_db = NULL ; 92 `sdp_li¡_ä“ ( acûss_db , acûss_ä“ ); 93 acûss_db = NULL ; 94 } } 96  s_šdexed { 97  msock ; 98 sdp_»cÜd_t * m»cÜd ; 99 } tsdp_šdexed_t ; 101  sdp_li¡_t * gsock‘_šdex ; 106  $sdp_svcdb_cÞËù_®l ( sock ) 108 sdp_li¡_t * p , * q ; 110  p = sock‘_šdex , q = 0;…; ) { 111 sdp_šdexed_t * ™em = p -> d©a ; 112 ià( ™em -> sock == sock) { 113 sdp_li¡_t * Ãxt = p ->next; 114 `sdp_»cÜd_»move ( ™em -> »cÜd -> hªdË ); 115 `sdp_»cÜd_ä“ ( ™em -> »cÜd ); 116 `ä“ ( ™em ); 117 ià( q ) 118 q -> Ãxt =‚ext; 120 sock‘_šdex = Ãxt ; 121 `ä“ ( p ); 122 p = Ãxt ; 123 } ià( ™em -> sock > sock) 126 q = p ; 127 p =…-> Ãxt ; 130 } } 132  $sdp_svcdb_cÞËù ( sdp_»cÜd_t * »c ) 134 sdp_li¡_t * p , * q ; 136  p = sock‘_šdex , q = 0;…; q =…,… =…-> Ãxt ) { 137 sdp_šdexed_t * ™em = p -> d©a ; 138 ià( »c =ð ™em -> »cÜd ) { 139 `ä“ ( ™em ); 140 ià( q ) 141 q -> Ãxt = p ->next; 143 sock‘_šdex = p -> Ãxt ; 144 `ä“ ( p ); 148 } } 150  $com·»_šdiûs (cÚ¡ * i1 , cÚ¡ * i2 ) 152 cÚ¡ sdp_šdexed_t * s1 = i1 ; 153 cÚ¡ sdp_šdexed_t * s2 = i2 ; 154  s1 -> sock - s2 ->sock; 155 } } 157  $sdp_svcdb_£t_cÞËùabË ( sdp_»cÜd_t * »cÜd ,  sock ) 159 sdp_šdexed_t * ™em = `m®loc ((sdp_indexed_t)); 161 ià(! ™em ) { 162 `SDPDBG ("No memory"); 166 ™em -> sock = sock; 167 ™em -> »cÜd =„ecord; 168 sock‘_šdex = `sdp_li¡_š£¹_sÜ‹d (sock‘_šdex, ™em , com·»_šdiûs ); 169 } } 174  $sdp_»cÜd_add (cÚ¡ bdaddr_t * deviû , sdp_»cÜd_t * »c ) 176 sdp_acûss_t * dev ; 178 `SDPDBG ("Addšg„eø: 0x%lx", (è »c ); 179 `SDPDBG ("w™h hªdË : 0x%x", »c -> hªdË ); 181 £rviû_db = `sdp_li¡_š£¹_sÜ‹d (£rviû_db, »c , »cÜd_sÜt ); 183 dev = `m®loc ((*dev)); 184 ià(! dev ) 187 `baýy (& dev -> deviû , device); 188 dev -> hªdË = »c ->handle; 190 acûss_db = `sdp_li¡_š£¹_sÜ‹d ×cûss_db, dev , acûss_sÜt ); 191 } } 193  sdp_li¡_t * $»cÜd_loÿ‹ ( ušt32_t hªdË ) 195 ià( £rviû_db ) { 196 sdp_li¡_t * p ; 197 sdp_»cÜd_t r ; 199 r . hªdË = handle; 200 p = `sdp_li¡_fšd ( £rviû_db , & r , »cÜd_sÜt ); 201  p ; 204 `SDPDBG ("Could‚Ù fšd svcReøfÜ : 0x%x", hªdË ); 205  NULL ; 206 } } 208  sdp_li¡_t * $acûss_loÿ‹ ( ušt32_t hªdË ) 210 ià( acûss_db ) { 211 sdp_li¡_t * p ; 212 sdp_acûss_t a ; 214 a . hªdË = handle; 215 p = `sdp_li¡_fšd ( acûss_db , & a , acûss_sÜt ); 216  p ; 219 `SDPDBG ("Could‚Ù fšd‡cûs d©¨fÜ : 0x%x", hªdË ); 220  NULL ; 221 } } 226 sdp_»cÜd_t * $sdp_»cÜd_fšd ( ušt32_t hªdË ) 228 sdp_li¡_t * p = `»cÜd_loÿ‹ ( hªdË ); 230 ià(! p ) { 231 `SDPDBG ("Couldn'ˆfšd„ecÜd fÜ : 0x%x", hªdË ); 235  p -> d©a ; 236 } } 241  $sdp_»cÜd_»move ( ušt32_t hªdË ) 243 sdp_li¡_t * p = `»cÜd_loÿ‹ ( hªdË ); 244 sdp_»cÜd_t * r ; 245 sdp_acûss_t * a ; 247 ià(! p ) { 248 `”rÜ ("Remov: Couldn'ˆfšd„ecÜd fÜ : 0x%x", hªdË ); 252 r = p -> d©a ; 253 ià( r ) 254 £rviû_db = `sdp_li¡_»move (£rviû_db, r ); 256 p = `acûss_loÿ‹ ( hªdË ); 257 ià( p =ð NULL ||…-> d©a == NULL) 260 a = p -> d©a ; 262 acûss_db = `sdp_li¡_»move ×cûss_db, a ); 263 `acûss_ä“ ( a ); 266 } } 271 sdp_li¡_t * $sdp_g‘_»cÜd_li¡ () 273  £rviû_db ; 274 } } 276  $sdp_check_acûss ( ušt32_t hªdË , bdaddr_t * deviû ) 278 sdp_li¡_t * p = `acûss_loÿ‹ ( hªdË ); 279 sdp_acûss_t * a ; 281 ià(! p ) 284 a = p -> d©a ; 285 ià(! a ) 288 ià( `bacmp (& a -> deviû , device) && 289 `bacmp (& a -> deviû , BDADDR_ANY ) && 290 `bacmp ( deviû , BDADDR_ANY )) 294 } } 296 ušt32_t $sdp_Ãxt_hªdË () 298 ušt32_t hªdË = 0x10000; 300  `sdp_»cÜd_fšd ( hªdË )) 301 hªdË ++; 303  hªdË ; 304 } } @src/sdpd-request.c 27 #ifdeà HAVE_CONFIG_H 28  ~ 31  ~<”ºo.h > 32  ~<¡dlib.h > 33  ~ 35  ~ 36  ~ 37  ~ 38  ~ 40  ~"¤c/sh¬ed/utž.h " 42  ~"sdpd.h " 43  ~"log.h " 46 ušt32_t mtime¡amp ; 48 ušt16_t mmaxBy‹sS’t ; 49 ušt16_t mÏ¡IndexS’t ; 50 } mcS‹V®ue ; 51 } tsdp_cÚt_¡©e_t ; 53  #SDP_CONT_STATE_SIZE (( ušt8_t è+ ( sdp_cÚt_¡©e_t )) ) 55  #MIN ( x , y è((xè< (y)è? (x): (y) ) 57  _sdp_c¡©e_li¡ tsdp_c¡©e_li¡_t ; 59  s_sdp_c¡©e_li¡ { 60 sdp_c¡©e_li¡_t * mÃxt ; 61 ušt32_t mtime¡amp ; 62 sdp_buf_t mbuf ; 65  sdp_c¡©e_li¡_t * gc¡©es ; 68  sdp_buf_t * $sdp_g‘_ÿched_r¥ ( sdp_cÚt_¡©e_t * c¡©e ) 70 sdp_c¡©e_li¡_t * p ; 72  p = c¡©es ;…;… =…-> Ãxt ) 73 ià( p -> time¡amp =ð c¡©e ->timestamp) 74  & p -> buf ; 76 } } 78  ušt32_t $sdp_c¡©e_®loc_buf ( sdp_buf_t * buf ) 80 sdp_c¡©e_li¡_t * c¡©e = `m®loc ((sdp_cstate_list_t)); 81 ušt8_t * d©a = `m®loc ( buf -> d©a_size ); 83 `memýy ( d©a , buf ->d©a, buf-> d©a_size ); 84 `mem£t ((*) c¡©e , 0, ( sdp_c¡©e_li¡_t )); 85 c¡©e -> buf . d©a = data; 86 c¡©e -> buf . d©a_size = buf->data_size; 87 c¡©e -> buf . buf_size = buf-> d©a_size ; 88 c¡©e -> time¡amp = `sdp_g‘_time (); 89 c¡©e -> Ãxt = c¡©es ; 90 c¡©es = c¡©e ; 91  c¡©e -> time¡amp ; 92 } } 95  #SDP_TYPE_UUID 0xã ) 96  #SDP_TYPE_ATTRID 0xff ) 98  s©Œid { 99 ušt8_t mdtd ; 101 ušt16_t mušt16 ; 102 ušt32_t mušt32 ; 112  $exŒaù_des ( ušt8_t * buf ,  Ën , sdp_li¡_t ** svcReqSeq , ušt8_ˆ* pD©aTy³ , ušt8_ˆ ex³ùedTy³ ) 114 ušt8_t £qTy³ ; 115  sÿÂed , d©a_size = 0; 116  numb”OfEËm’ts = 0; 117  £qËn = 0; 118 sdp_li¡_t * pSeq = NULL ; 119 ušt8_t d©aTy³ ; 120  ¡©us = 0; 121 cÚ¡ ušt8_t * p ; 122 size_t bufsize ; 124 sÿÂed = `sdp_exŒaù_£qty³ ( buf , Ën , & £qTy³ , & d©a_size ); 126 `SDPDBG ("Seqy³ : %d", £qTy³ ); 127 ià(! sÿÂed || ( £qTy³ !ð SDP_SEQ8 && seqTy³ !ð SDP_SEQ16 )) { 128 `”rÜ ("Unknown seqype"); 131 p = buf + sÿÂed ; 132 bufsize = Ën - sÿÂed ; 134 `SDPDBG ("D©¨siz: %d", d©a_size ); 137 * pEËm = NULL ; 138  loÿlSeqL’gth = 0; 139 uuid_t * puuid ; 141 ià( bufsize < ( ušt8_t )) { 142 `SDPDBG ("->Unexpectedƒnd of buffer"); 143  çžed ; 146 d©aTy³ = * p ; 148 `SDPDBG ("D©¨ty³: 0x%02x", d©aTy³ ); 150 ià( ex³ùedTy³ =ð SDP_TYPE_UUID ) { 151 ià( d©aTy³ !ð SDP_UUID16 && d©aTy³ !ð SDP_UUID32 && d©aTy³ !ð SDP_UUID128 ) { 152 `SDPDBG ("->Unexpected Dataype (expected UUID_ANY)"); 153  çžed ; 155 } ià( ex³ùedTy³ =ð SDP_TYPE_ATTRID && 156 ( d©aTy³ !ð SDP_UINT16 && d©aTy³ !ð SDP_UINT32 )) { 157 `SDPDBG ("->Unexpected Dataype (expected 0x%02x or 0x%02x)", 158 SDP_UINT16 , SDP_UINT32 ); 159  çžed ; 160 } ià( ex³ùedTy³ !ð SDP_TYPE_ATTRID && d©aTy³ !=ƒxpectedType) { 161 `SDPDBG ("->UÃx³ùed D©¨ty³ (ex³ùed 0x%02x)", ex³ùedTy³ ); 162  çžed ; 165  d©aTy³ ) { 166  SDP_UINT16 : 167 p +ð( ušt8_t ); 168 £qËn +ð( ušt8_t ); 169 bufsize -ð( ušt8_t ); 170 ià( bufsize < ( ušt16_t )) { 171 `SDPDBG ("->Unexpectedƒnd of buffer"); 172  çžed ; 175 ià( ex³ùedTy³ =ð SDP_TYPE_ATTRID ) { 176  ©Œid * aid ; 177 aid = `m®loc (( ©Œid )); 178 aid -> dtd = d©aTy³ ; 179 aid -> ušt16 = `g‘_be16 ( p ); 180 pEËm = (*è aid ; 182 ušt16_t tmp ; 184 `memýy (& tmp , p , (tmp)); 186 pEËm = `m®loc (( ušt16_t )); 187 `put_be16 ( tmp , pEËm ); 189 p +ð( ušt16_t ); 190 £qËn +ð( ušt16_t ); 191 bufsize -ð( ušt16_t ); 193  SDP_UINT32 : 194 p +ð( ušt8_t ); 195 £qËn +ð( ušt8_t ); 196 bufsize -ð( ušt8_t ); 197 ià( bufsize < ()( ušt32_t )) { 198 `SDPDBG ("->Unexpectedƒnd of buffer"); 199  çžed ; 202 ià( ex³ùedTy³ =ð SDP_TYPE_ATTRID ) { 203  ©Œid * aid ; 204 aid = `m®loc (( ©Œid )); 205 aid -> dtd = d©aTy³ ; 206 aid -> ušt32 = `g‘_be32 ( p ); 208 pEËm = (*è aid ; 210 ušt32_t tmp ; 212 `memýy (& tmp , p , (tmp)); 214 pEËm = `m®loc (( ušt32_t )); 215 `put_be32 ( tmp , pEËm ); 217 p +ð( ušt32_t ); 218 £qËn +ð( ušt32_t ); 219 bufsize -ð( ušt32_t ); 221  SDP_UUID16 : 222  SDP_UUID32 : 223  SDP_UUID128 : 224 puuid = `m®loc (( uuid_t )); 225 ¡©us = `sdp_uuid_exŒaù ( p , bufsize , puuid , & loÿlSeqL’gth ); 226 ià( ¡©us < 0) { 227 `ä“ ( puuid ); 228  çžed ; 231 pEËm = (*è puuid ; 232 £qËn +ð loÿlSeqL’gth ; 233 p +ð loÿlSeqL’gth ; 234 bufsize -ð loÿlSeqL’gth ; 239 ià( ¡©us == 0) { 240 pSeq = `sdp_li¡_­³nd ÕSeq, pEËm ); 241 numb”OfEËm’ts ++; 242 `SDPDBG ("NØoà–em’t : %d", numb”OfEËm’ts ); 244 ià( £qËn =ð d©a_size ) 246 ià( £qËn > d©a_size || seqËÀ> Ën ) 247  çžed ; 249 `ä“ ( pEËm ); 251 * svcReqSeq = pSeq ; 252 sÿÂed +ð £qËn ; 253 * pD©aTy³ = d©aTy³ ; 254  sÿÂed ; 256 çžed : 257 `sdp_li¡_ä“ ( pSeq , ä“ ); 259 } } 261  $sdp_£t_c¡©e_pdu ( sdp_buf_t * buf , sdp_cÚt_¡©e_t * c¡©e ) 263 ušt8_t * pd©a = buf -> d©a + buf-> d©a_size ; 264  Ëngth = 0; 266 ià( c¡©e ) { 267 `SDPDBG ("NÚ‚uÎ sdp_c¡©e_ˆid : 0x%x", c¡©e -> time¡amp ); 268 * pd©a = ( sdp_cÚt_¡©e_t ); 269 pd©a +ð( ušt8_t ); 270 Ëngth +ð( ušt8_t ); 271 `memýy ( pd©a , c¡©e , ( sdp_cÚt_¡©e_t )); 272 Ëngth +ð( sdp_cÚt_¡©e_t ); 275 * pd©a = 0; 276 Ëngth +ð( ušt8_t ); 278 buf -> d©a_size +ð Ëngth ; 279  Ëngth ; 280 } } 282  $sdp_c¡©e_g‘ ( ušt8_t * bufãr , size_t Ën , 283 sdp_cÚt_¡©e_t ** c¡©e ) 285 ušt8_t cS‹Size = * bufãr ; 287 `SDPDBG ("CÚtšu©iÚ S‹ siz: %d", cS‹Size ); 289 ià( cS‹Size == 0) { 290 * c¡©e = NULL ; 294 bufãr ++; 295 Ën --; 297 ià( Ën < ( sdp_cÚt_¡©e_t )) 298  - EINVAL ; 305 * c¡©e = `m®loc (( sdp_cÚt_¡©e_t )); 306 ià(!(* c¡©e )) 307  - ENOMEM ; 309 `memýy (* c¡©e , bufãr , ( sdp_cÚt_¡©e_t )); 311 `SDPDBG ("C¡©TS : 0x%x", (* c¡©e )-> time¡amp ); 312 `SDPDBG ("By‹ £Á : %d", (* c¡©e )-> cS‹V®ue . maxBy‹sS’t ); 315 } } 328  $sdp_m©ch_uuid ( sdp_li¡_t * £¬ch , sdp_li¡_ˆ* ·‰”n ) 335  ·Ž’ = `sdp_li¡_Ën ( ·‰”n ); 337 ià( ·Ž’ < `sdp_li¡_Ën ( £¬ch )) 339 ; £¬ch ; s—rch = s—rch-> Ãxt ) { 340 uuid_t * uuid128 ; 341 * d©a = £¬ch ->data; 342 sdp_li¡_t * li¡ ; 343 ià( d©a =ð NULL ) 347 uuid128 = `sdp_uuid_to_uuid128 (( uuid_t *) d©a ); 348 li¡ = `sdp_li¡_fšd ( ·‰”n , uuid128 , sdp_uuid128_cmp ); 349 `bt_ä“ ( uuid128 ); 350 ià(! li¡ ) 354 } } 361  $£rviû_£¬ch_»q ( sdp_»q_t * »q , sdp_buf_t * buf ) 363  ¡©us = 0, i , ¶’ , mËn , mtu , sÿÂed ; 364 sdp_li¡_t * ·‰”n = NULL ; 365 ušt16_t ex³ùed , aùu® , r¥_couÁ = 0; 366 ušt8_t dtd ; 367 sdp_cÚt_¡©e_t * c¡©e = NULL ; 368 ušt8_t * pCacheBufãr = NULL ; 369  hªdËSize = 0; 370 ušt32_t cS‹Id = 0; 371 ušt8_t * pTÙ®RecÜdCouÁ , * pCu¼’tRecÜdCouÁ ; 372 ušt8_t * pd©a = »q -> buf + ( sdp_pdu_hdr_t ); 373 size_t d©a_Ëá = »q -> Ën - ( sdp_pdu_hdr_t ); 375 sÿÂed = `exŒaù_des ( pd©a , d©a_Ëá , & ·‰”n , & dtd , SDP_TYPE_UUID ); 377 ià( sÿÂed == -1) { 378 ¡©us = SDP_INVALID_SYNTAX ; 379  dÚe ; 381 pd©a +ð sÿÂed ; 382 d©a_Ëá -ð sÿÂed ; 384 ¶’ = `Áohs ((( sdp_pdu_hdr_t *)( »q -> buf ))->plen); 385 mËn = sÿÂed + ( ušt16_t ) + 1; 387 ià( ¶’ < mËn ||…ËÀ!ðmËÀ+ *( ušt8_t *)( pd©a +( ušt16_t ))) { 388 ¡©us = SDP_INVALID_SYNTAX ; 389  dÚe ; 392 ià( d©a_Ëá < ( ušt16_t )) { 393 ¡©us = SDP_INVALID_SYNTAX ; 394  dÚe ; 397 ex³ùed = `g‘_be16 ( pd©a ); 399 `SDPDBG ("Ex³ùed couÁ: %d", ex³ùed ); 400 `SDPDBG ("By‹ sÿÂed : %d", sÿÂed ); 402 pd©a +ð( ušt16_t ); 403 d©a_Ëá -ð( ušt16_t ); 409 ià( `sdp_c¡©e_g‘ ( pd©a , d©a_Ëá , & c¡©e ) < 0) { 410 ¡©us = SDP_INVALID_SYNTAX ; 411  dÚe ; 414 mtu = »q ->mtu - ( sdp_pdu_hdr_t è- ( ušt16_t è- (ušt16_tè- SDP_CONT_STATE_SIZE ; 415 aùu® = `MIN ( ex³ùed , mtu >> 2); 418 pd©a = buf -> d©a ; 421 pTÙ®RecÜdCouÁ = pd©a ; 422 `put_be16 (0, pd©a ); 423 pd©a +ð( ušt16_t ); 424 buf -> d©a_size +ð( ušt16_t ); 427 pCu¼’tRecÜdCouÁ = pd©a ; 428 `put_be16 (0, pd©a ); 429 pd©a +ð( ušt16_t ); 430 buf -> d©a_size +ð( ušt16_t ); 432 ià( c¡©e =ð NULL ) { 434 sdp_li¡_t * li¡ = `sdp_g‘_»cÜd_li¡ (); 436 hªdËSize = 0; 437 ; li¡ && r¥_couÁ < ex³ùed ;†i¡ =†i¡-> Ãxt ) { 438 sdp_»cÜd_t * »c = li¡ -> d©a ; 440 `SDPDBG ("Checkšg svcReø: 0x%x", »c -> hªdË ); 442 ià( `sdp_m©ch_uuid ( ·‰”n , »c ->pattern) > 0 && 443 `sdp_check_acûss ( »c -> hªdË , & »q -> deviû )) { 444 r¥_couÁ ++; 445 `put_be32 ( »c -> hªdË , pd©a ); 446 pd©a +ð( ušt32_t ); 447 hªdËSize +ð( ušt32_t ); 451 `SDPDBG ("M©ch couÁ: %d", r¥_couÁ ); 453 buf -> d©a_size +ð hªdËSize ; 454 `put_be16 ( r¥_couÁ , pTÙ®RecÜdCouÁ ); 455 `put_be16 ( r¥_couÁ , pCu¼’tRecÜdCouÁ ); 457 ià( r¥_couÁ > aùu® ) { 459 cS‹Id = `sdp_c¡©e_®loc_buf ( buf ); 464 buf -> d©a_size -ð hªdËSize ; 467 `sdp_£t_c¡©e_pdu ( buf , NULL ); 472 ià( c¡©e || cS‹Id > 0) { 473  Ï¡Index = 0; 475 ià( c¡©e ) { 480 sdp_buf_t * pCache = `sdp_g‘_ÿched_r¥ ( c¡©e ); 481 ià( pCache ) { 482 pCacheBufãr = pCache -> d©a ; 484 r¥_couÁ = `g‘_be16 ( pCacheBufãr ); 487 Ï¡Index = c¡©e -> cS‹V®ue . Ï¡IndexS’t ; 489 ¡©us = SDP_INVALID_CSTATE ; 490  dÚe ; 493 pCacheBufãr = buf -> d©a ; 494 Ï¡Index = 0; 502 pd©a = pCu¼’tRecÜdCouÁ + ( ušt16_t ); 505 pCacheBufãr +ð2 * ( ušt16_t ); 507 ià( c¡©e ) { 508 hªdËSize = 0; 509  i = Ï¡Index ; (˜-†a¡Indexè< aùu® && i < r¥_couÁ ; i++) { 510 `memýy ( pd©a , pCacheBufãr + i * ( ušt32_t ), (uint32_t)); 511 pd©a +ð( ušt32_t ); 512 hªdËSize +ð( ušt32_t ); 515 hªdËSize = aùu® << 2; 516 i = aùu® ; 519 buf -> d©a_size +ð hªdËSize ; 520 `put_be16 ( r¥_couÁ , pTÙ®RecÜdCouÁ ); 521 `put_be16 ( i - Ï¡Index , pCu¼’tRecÜdCouÁ ); 523 ià( i =ð r¥_couÁ ) { 525 `sdp_£t_c¡©e_pdu ( buf , NULL ); 531 sdp_cÚt_¡©e_t ÃwS‹ ; 533 `SDPDBG ("Setting‚on-NULL sdp_cstate_t"); 535 ià( c¡©e ) 536 `memýy (& ÃwS‹ , c¡©e , ( sdp_cÚt_¡©e_t )); 538 `mem£t (& ÃwS‹ , 0, ( sdp_cÚt_¡©e_t )); 539 ÃwS‹ . time¡amp = cS‹Id ; 541 ÃwS‹ . cS‹V®ue . Ï¡IndexS’t = i ; 542 `sdp_£t_c¡©e_pdu ( buf , & ÃwS‹ ); 546 dÚe : 547 `ä“ ( c¡©e ); 548 ià( ·‰”n ) 549 `sdp_li¡_ä“ ( ·‰”n , ä“ ); 551  ¡©us ; 552 } } 561  $exŒaù_©Œs ( sdp_»cÜd_t * »c , sdp_li¡_t * £q , sdp_buf_t * buf ) 563 sdp_buf_t pdu ; 565 ià(! »c ) 566  SDP_INVALID_RECORD_HANDLE ; 568 ià( £q =ð NULL ) { 569 `SDPDBG ("Attribute sequence is NULL"); 573 `SDPDBG ("EÁr› š‡‰¸£q : %d", `sdp_li¡_Ën ( £q )); 575 `sdp_g’_»cÜd_pdu ( »c , & pdu ); 577 ; £q ; seq = seq-> Ãxt ) { 578  ©Œid * aid = £q -> d©a ; 580 `SDPDBG ("A‰rD©aTy³ : %d", aid -> dtd ); 582 ià( aid -> dtd =ð SDP_UINT16 ) { 583 ušt16_t ©Œ = aid -> ušt16 ; 584 sdp_d©a_t * a = `sdp_d©a_g‘ ( »c , ©Œ ); 585 ià( a ) 586 `sdp_­³nd_to_pdu ( buf , a ); 587 } ià( aid -> dtd =ð SDP_UINT32 ) { 588 ušt32_t ¿nge = aid -> ušt32 ; 589 ušt16_t ©Œ ; 590 ušt16_t low = (0xffff0000 & ¿nge ) >> 16; 591 ušt16_t high = 0x0000fffà& ¿nge ; 592 sdp_d©a_t * d©a ; 594 `SDPDBG ("©Œ„ªg: 0x%x", ¿nge ); 595 `SDPDBG ("Low id : 0x%x", low ); 596 `SDPDBG ("High id : 0x%x", high ); 598 ià( low =ð0x0000 && high =ð0xfffà&& pdu . d©a_size <ð buf -> buf_size ) { 600 `memýy ( buf -> d©a , pdu .d©a,…du. d©a_size ); 601 buf -> d©a_size = pdu .data_size; 605  ©Œ = low ;‡‰¸< high ;‡ttr++) { 606 d©a = `sdp_d©a_g‘ ( »c , ©Œ ); 607 ià( d©a ) 608 `sdp_­³nd_to_pdu ( buf , d©a ); 610 d©a = `sdp_d©a_g‘ ( »c , high ); 611 ià( d©a ) 612 `sdp_­³nd_to_pdu ( buf , d©a ); 614 `”rÜ ("UÃx³ùed d©¨ty³ : 0x%x", aid -> dtd ); 615 `”rÜ ("Expect uint16_t or uint32_t"); 616 `ä“ ( pdu . d©a ); 617  SDP_INVALID_SYNTAX ; 621 `ä“ ( pdu . d©a ); 624 } } 632  $£rviû_©Œ_»q ( sdp_»q_t * »q , sdp_buf_t * buf ) 634 sdp_cÚt_¡©e_t * c¡©e = NULL ; 635 ušt8_t * pRe¥Ú£ = NULL ; 636  c¡©e_size = 0; 637 sdp_li¡_t * £q = NULL ; 638 ušt8_t dtd = 0; 639  sÿÂed = 0; 640  max_r¥_size ; 641  ¡©us = 0, ¶’ , mËn ; 642 ušt8_t * pd©a = »q -> buf + ( sdp_pdu_hdr_t ); 643 size_t d©a_Ëá = »q -> Ën - ( sdp_pdu_hdr_t ); 644 ušt32_t hªdË ; 646 ià( d©a_Ëá < ( ušt32_t )) { 647 ¡©us = SDP_INVALID_SYNTAX ; 648  dÚe ; 651 hªdË = `g‘_be32 ( pd©a ); 653 pd©a +ð( ušt32_t ); 654 d©a_Ëá -ð( ušt32_t ); 656 ià( d©a_Ëá < ( ušt16_t )) { 657 ¡©us = SDP_INVALID_SYNTAX ; 658  dÚe ; 661 max_r¥_size = `g‘_be16 ( pd©a ); 663 pd©a +ð( ušt16_t ); 664 d©a_Ëá -ð( ušt16_t ); 666 ià( d©a_Ëá < ( sdp_pdu_hdr_t )) { 667 ¡©us = SDP_INVALID_SYNTAX ; 668  dÚe ; 672 sÿÂed = `exŒaù_des ( pd©a , d©a_Ëá , & £q , & dtd , SDP_TYPE_ATTRID ); 673 ià( sÿÂed == -1) { 674 ¡©us = SDP_INVALID_SYNTAX ; 675  dÚe ; 677 pd©a +ð sÿÂed ; 678 d©a_Ëá -ð sÿÂed ; 680 ¶’ = `Áohs ((( sdp_pdu_hdr_t *)( »q -> buf ))->plen); 681 mËn = sÿÂed + ( ušt32_t è+ ( ušt16_t ) + 1; 683 ià( ¶’ < mËn ||…ËÀ!ðmËÀ+ *( ušt8_t *) pd©a ) { 684 ¡©us = SDP_INVALID_PDU_SIZE ; 685  dÚe ; 692 ià( `sdp_c¡©e_g‘ ( pd©a , d©a_Ëá , & c¡©e ) < 0) { 693 ¡©us = SDP_INVALID_SYNTAX ; 694  dÚe ; 697 `SDPDBG ("SvcRecHªdË : 0x%x", hªdË ); 698 `SDPDBG ("max_r¥_siz: %d", max_r¥_size ); 704 ià( max_r¥_size < 0x0007) { 705 ¡©us = SDP_INVALID_SYNTAX ; 706  dÚe ; 713 max_r¥_size = `MIN (max_r¥_size, »q -> mtu - ( sdp_pdu_hdr_t ) - 714 ( ušt32_t è- SDP_CONT_STATE_SIZE - ( ušt16_t )); 717 buf -> d©a +ð( ušt16_t ); 718 buf -> buf_size -ð( ušt16_t ); 720 ià( c¡©e ) { 721 sdp_buf_t * pCache = `sdp_g‘_ÿched_r¥ ( c¡©e ); 723 `SDPDBG ("Obšed cached„¥ : %p", pCache ); 725 ià( pCache ) { 726  £Á = `MIN ( max_r¥_size , pCache -> d©a_size - c¡©e -> cS‹V®ue . maxBy‹sS’t ); 727 pRe¥Ú£ = pCache -> d©a ; 728 `memýy ( buf -> d©a , pRe¥Ú£ + c¡©e -> cS‹V®ue . maxBy‹sS’t , £Á ); 729 buf -> d©a_size +ð £Á ; 730 c¡©e -> cS‹V®ue . maxBy‹sS’t +ð £Á ; 732 `SDPDBG ("Response size : %d sending‚ow : %d bytes sent so far : %d", 733 pCache -> d©a_size , £Á , c¡©e -> cS‹V®ue . maxBy‹sS’t ); 734 ià( c¡©e -> cS‹V®ue . maxBy‹sS’t =ð pCache -> d©a_size ) 735 c¡©e_size = `sdp_£t_c¡©e_pdu ( buf , NULL ); 737 c¡©e_size = `sdp_£t_c¡©e_pdu ( buf , c¡©e ); 739 ¡©us = SDP_INVALID_CSTATE ; 740 `”rÜ ("NULL cache buffer‡nd‚on-NULL continuation state"); 743 sdp_»cÜd_t * »c = `sdp_»cÜd_fšd ( hªdË ); 744 ¡©us = `exŒaù_©Œs ( »c , £q , buf ); 745 ià( buf -> d©a_size > max_r¥_size ) { 746 sdp_cÚt_¡©e_t ÃwS‹ ; 748 `mem£t ((*)& ÃwS‹ , 0, ( sdp_cÚt_¡©e_t )); 749 ÃwS‹ . time¡amp = `sdp_c¡©e_®loc_buf ( buf ); 754 `SDPDBG ("C»©šg cÚtšu©iÚ s‹ oàsiz: %d", buf -> d©a_size ); 755 buf -> d©a_size = max_r¥_size ; 756 ÃwS‹ . cS‹V®ue . maxBy‹sS’t = max_r¥_size ; 757 c¡©e_size = `sdp_£t_c¡©e_pdu ( buf , & ÃwS‹ ); 759 ià( buf -> d©a_size == 0) 760 `sdp_­³nd_to_buf ( buf , NULL , 0); 761 c¡©e_size = `sdp_£t_c¡©e_pdu ( buf , NULL ); 766 buf -> d©a -ð( ušt16_t ); 767 buf -> buf_size +ð( ušt16_t ); 769 dÚe : 770 `ä“ ( c¡©e ); 771 ià( £q ) 772 `sdp_li¡_ä“ ( £q , ä“ ); 773 ià( ¡©us ) 774  ¡©us ; 777 `put_be16 ( buf -> d©a_size - c¡©e_size , buf-> d©a ); 778 buf -> d©a_size +ð( ušt16_t ); 780 } } 785  $£rviû_£¬ch_©Œ_»q ( sdp_»q_t * »q , sdp_buf_t * buf ) 787  ¡©us = 0, ¶’ , tÙsÿÂed ; 788 ušt8_t * pd©a , * pRe¥Ú£ = NULL ; 789  max ; 790  sÿÂed , r¥_couÁ = 0; 791 sdp_li¡_t * ·‰”n = NULL , * £q = NULL, * svcLi¡ ; 792 sdp_cÚt_¡©e_t * c¡©e = NULL ; 793  c¡©e_size = 0; 794 ušt8_t dtd = 0; 795 sdp_buf_t tmpbuf ; 796 size_t d©a_Ëá ; 798 tmpbuf . d©a = NULL ; 799 pd©a = »q -> buf + ( sdp_pdu_hdr_t ); 800 d©a_Ëá = »q -> Ën - ( sdp_pdu_hdr_t ); 801 sÿÂed = `exŒaù_des ( pd©a , d©a_Ëá , & ·‰”n , & dtd , SDP_TYPE_UUID ); 802 ià( sÿÂed == -1) { 803 ¡©us = SDP_INVALID_SYNTAX ; 804  dÚe ; 806 tÙsÿÂed = sÿÂed ; 808 `SDPDBG ("By‹ sÿÂed: %d", sÿÂed ); 810 pd©a +ð sÿÂed ; 811 d©a_Ëá -ð sÿÂed ; 813 ià( d©a_Ëá < ( ušt16_t )) { 814 ¡©us = SDP_INVALID_SYNTAX ; 815  dÚe ; 818 max = `g‘_be16 ( pd©a ); 820 pd©a +ð( ušt16_t ); 821 d©a_Ëá -ð( ušt16_t ); 823 `SDPDBG ("Max A‰¸ex³ùed: %d", max ); 825 ià( d©a_Ëá < ( sdp_pdu_hdr_t )) { 826 ¡©us = SDP_INVALID_SYNTAX ; 827  dÚe ; 831 sÿÂed = `exŒaù_des ( pd©a , d©a_Ëá , & £q , & dtd , SDP_TYPE_ATTRID ); 832 ià( sÿÂed == -1) { 833 ¡©us = SDP_INVALID_SYNTAX ; 834  dÚe ; 837 pd©a +ð sÿÂed ; 838 d©a_Ëá -ð sÿÂed ; 840 tÙsÿÂed +ð sÿÂed + ( ušt16_t ) + 1; 842 ¶’ = `Áohs ((( sdp_pdu_hdr_t *)( »q -> buf ))->plen); 843 ià( ¶’ < tÙsÿÂed ||…ËÀ!ðtÙsÿÂed + *( ušt8_t *) pd©a ) { 844 ¡©us = SDP_INVALID_PDU_SIZE ; 845  dÚe ; 852 ià( `sdp_c¡©e_g‘ ( pd©a , d©a_Ëá , & c¡©e ) < 0) { 853 ¡©us = SDP_INVALID_SYNTAX ; 854  dÚe ; 857 svcLi¡ = `sdp_g‘_»cÜd_li¡ (); 859 tmpbuf . d©a = `m®loc ( USHRT_MAX ); 860 tmpbuf . d©a_size = 0; 861 tmpbuf . buf_size = USHRT_MAX ; 862 `mem£t ( tmpbuf . d©a , 0, USHRT_MAX ); 868 max = `MIN (max, »q -> mtu - ( sdp_pdu_hdr_t è- SDP_CONT_STATE_SIZE - ( ušt16_t )); 871 buf -> d©a +ð( ušt16_t ); 872 buf -> buf_size -ð( ušt16_t ); 874 ià( c¡©e =ð NULL ) { 876 sdp_li¡_t * p ; 877  p = svcLi¡ ;…;… =…-> Ãxt ) { 878 sdp_»cÜd_t * »c = p -> d©a ; 879 ià( `sdp_m©ch_uuid ( ·‰”n , »c ->pattern) > 0 && 880 `sdp_check_acûss ( »c -> hªdË , & »q -> deviû )) { 881 r¥_couÁ ++; 882 ¡©us = `exŒaù_©Œs ( »c , £q , & tmpbuf ); 884 `SDPDBG ("Re¥Ú£ couÁ : %d", r¥_couÁ ); 885 `SDPDBG ("LoÿÈPDU siz: %d", tmpbuf . d©a_size ); 886 ià( ¡©us ) { 887 `SDPDBG ("Extract‡ttr from„ecord„eturnsƒrr"); 890 ià( buf -> d©a_size + tmpbuf .d©a_siz< buf-> buf_size ) { 892 `sdp_­³nd_to_buf ( buf , tmpbuf . d©a ,mpbuf. d©a_size ); 893 tmpbuf . d©a_size = 0; 894 `mem£t ( tmpbuf . d©a , 0, USHRT_MAX ); 896 `”rÜ ("Relocation‚eeded"); 899 `SDPDBG ("N‘ PDU siz: %d", buf -> d©a_size ); 902 ià( buf -> d©a_size > max ) { 903 sdp_cÚt_¡©e_t ÃwS‹ ; 905 `mem£t ((*)& ÃwS‹ , 0, ( sdp_cÚt_¡©e_t )); 906 ÃwS‹ . time¡amp = `sdp_c¡©e_®loc_buf ( buf ); 911 buf -> d©a_size = max ; 912 ÃwS‹ . cS‹V®ue . maxBy‹sS’t = max ; 913 c¡©e_size = `sdp_£t_c¡©e_pdu ( buf , & ÃwS‹ ); 915 c¡©e_size = `sdp_£t_c¡©e_pdu ( buf , NULL ); 918 sdp_buf_t * pCache = `sdp_g‘_ÿched_r¥ ( c¡©e ); 919 ià( pCache ) { 920 ušt16_t £Á = `MIN ( max , pCache -> d©a_size - c¡©e -> cS‹V®ue . maxBy‹sS’t ); 921 pRe¥Ú£ = pCache -> d©a ; 922 `memýy ( buf -> d©a , pRe¥Ú£ + c¡©e -> cS‹V®ue . maxBy‹sS’t , £Á ); 923 buf -> d©a_size +ð £Á ; 924 c¡©e -> cS‹V®ue . maxBy‹sS’t +ð £Á ; 925 ià( c¡©e -> cS‹V®ue . maxBy‹sS’t =ð pCache -> d©a_size ) 926 c¡©e_size = `sdp_£t_c¡©e_pdu ( buf , NULL ); 928 c¡©e_size = `sdp_£t_c¡©e_pdu ( buf , c¡©e ); 930 ¡©us = SDP_INVALID_CSTATE ; 931 `SDPDBG ("Non-null continuation state, but‚ull cache buffer"); 935 ià(! r¥_couÁ && ! c¡©e ) { 937 buf -> d©a_size = 0; 938 `sdp_­³nd_to_buf ( buf , tmpbuf . d©a ,mpbuf. d©a_size ); 939 `sdp_£t_c¡©e_pdu ( buf , NULL ); 943 buf -> d©a -ð( ušt16_t ); 944 buf -> buf_size +ð( ušt16_t ); 946 ià(! ¡©us ) { 948 `put_be16 ( buf -> d©a_size - c¡©e_size , buf-> d©a ); 949 buf -> d©a_size +ð( ušt16_t ); 952 dÚe : 953 `ä“ ( c¡©e ); 954 `ä“ ( tmpbuf . d©a ); 955 ià( ·‰”n ) 956 `sdp_li¡_ä“ ( ·‰”n , ä“ ); 957 ià( £q ) 958 `sdp_li¡_ä“ ( £q , ä“ ); 959  ¡©us ; 960 } } 967  $´oûss_»que¡ ( sdp_»q_t * »q ) 969 sdp_pdu_hdr_t * »qhdr = (sdp_pdu_hdr_ˆ*) »q -> buf ; 970 sdp_pdu_hdr_t * r¥hdr ; 971 sdp_buf_t r¥ ; 972 ušt8_t * buf = `m®loc ( USHRT_MAX ); 973  ¡©us = SDP_INVALID_SYNTAX ; 975 `mem£t ( buf , 0, USHRT_MAX ); 976 r¥ . d©a = buf + ( sdp_pdu_hdr_t ); 977 r¥ . d©a_size = 0; 978 r¥ . buf_size = USHRT_MAX - ( sdp_pdu_hdr_t ); 979 r¥hdr = ( sdp_pdu_hdr_t *) buf ; 981 ià( `Áohs ( »qhdr -> ¶’ è!ð »q -> Ën - ( sdp_pdu_hdr_t )) { 982 ¡©us = SDP_INVALID_PDU_SIZE ; 983  £nd_r¥ ; 985  »qhdr -> pdu_id ) { 986  SDP_SVC_SEARCH_REQ : 987 `SDPDBG ("Got‡ svc srch„eq"); 988 ¡©us = `£rviû_£¬ch_»q ( »q , & r¥ ); 989 r¥hdr -> pdu_id = SDP_SVC_SEARCH_RSP ; 991  SDP_SVC_ATTR_REQ : 992 `SDPDBG ("Got‡ svc‡ttr„eq"); 993 ¡©us = `£rviû_©Œ_»q ( »q , & r¥ ); 994 r¥hdr -> pdu_id = SDP_SVC_ATTR_RSP ; 996  SDP_SVC_SEARCH_ATTR_REQ : 997 `SDPDBG ("Got‡ svc srch‡ttr„eq"); 998 ¡©us = `£rviû_£¬ch_©Œ_»q ( »q , & r¥ ); 999 r¥hdr -> pdu_id = SDP_SVC_SEARCH_ATTR_RSP ; 1002  SDP_SVC_REGISTER_REQ : 1003 `SDPDBG ("Service„egister„equest"); 1004 ià( »q -> loÿl ) { 1005 ¡©us = `£rviû_»gi¡”_»q ( »q , & r¥ ); 1006 r¥hdr -> pdu_id = SDP_SVC_REGISTER_RSP ; 1009  SDP_SVC_UPDATE_REQ : 1010 `SDPDBG ("Service update„equest"); 1011 ià( »q -> loÿl ) { 1012 ¡©us = `£rviû_upd©e_»q ( »q , & r¥ ); 1013 r¥hdr -> pdu_id = SDP_SVC_UPDATE_RSP ; 1016  SDP_SVC_REMOVE_REQ : 1017 `SDPDBG ("Service„emoval„equest"); 1018 ià( »q -> loÿl ) { 1019 ¡©us = `£rviû_»move_»q ( »q , & r¥ ); 1020 r¥hdr -> pdu_id = SDP_SVC_REMOVE_RSP ; 1024 `”rÜ ("UnknowÀPDU ID : 0x%x„eûived", »qhdr -> pdu_id ); 1025 ¡©us = SDP_INVALID_SYNTAX ; 1029 £nd_r¥ : 1030 ià( ¡©us ) { 1031 r¥hdr -> pdu_id = SDP_ERROR_RSP ; 1032 `put_be16 ( ¡©us , r¥ . d©a ); 1033 r¥ . d©a_size = ( ušt16_t ); 1036 `SDPDBG ("S’dšg„¥. stu %d", ¡©us ); 1038 r¥hdr -> tid = »qhdr ->tid; 1039 r¥hdr -> ¶’ = `htÚs ( r¥ . d©a_size ); 1042 r¥ . d©a_size +ð( sdp_pdu_hdr_t ); 1043 r¥ . d©a = buf ; 1046 ià( `£nd ( »q -> sock , r¥ . d©a ,„¥. d©a_size , 0) < 0) 1047 `”rÜ ("£nd: % (%d)", `¡»¼Ü ( ”ºo ),ƒrrno); 1049 `SDPDBG ("By‹ S’ˆ: %d", r¥ . d©a_size ); 1051 `ä“ ( r¥ . d©a ); 1052 `ä“ ( »q -> buf ); 1053 } } 1055  $hªdË_š‹º®_»que¡ ( sk ,  mtu , * d©a ,  Ën ) 1057 sdp_»q_t »q ; 1059 `baýy (& »q . deviû , BDADDR_ANY ); 1060 `baýy (& »q . bdaddr , BDADDR_LOCAL ); 1061 »q . loÿl = 0; 1062 »q . sock = sk ; 1063 »q . mtu = mtu; 1064 »q . æags = 0; 1065 »q . buf = d©a ; 1066 »q . Ën =†en; 1068 `´oûss_»que¡ (& »q ); 1069 } } 1071  $hªdË_»que¡ ( sk , ušt8_t * d©a ,  Ën ) 1073  sockaddr_l2 § ; 1074 sockËn_t size ; 1075 sdp_»q_t »q ; 1077 size = ( § ); 1078 ià( `g‘³”Çme ( sk , ( sockaddr *è& § , & size ) < 0) { 1079 `”rÜ ("g‘³”Çme: %s", `¡»¼Ü ( ”ºo )); 1083 ià( § . l2_çmžy =ð AF_BLUETOOTH ) { 1084  l2ÿp_ÝtiÚs lo ; 1086 `mem£t (& lo , 0, (lo)); 1087 size = ( lo ); 1089 ià( `g‘sockÝt ( sk , SOL_L2CAP , L2CAP_OPTIONS , & lo , & size ) < 0) { 1090 `”rÜ ("g‘sockÝt: %s", `¡»¼Ü ( ”ºo )); 1094 `baýy (& »q . bdaddr , & § . l2_bdaddr ); 1095 »q . mtu = lo . omtu ; 1096 »q . loÿl = 0; 1097 `mem£t (& § , 0, (sa)); 1098 size = ( § ); 1100 ià( `g‘sockÇme ( sk , ( sockaddr *è& § , & size ) < 0) { 1101 `”rÜ ("g‘sockÇme: %s", `¡»¼Ü ( ”ºo )); 1105 `baýy (& »q . deviû , & § . l2_bdaddr ); 1107 `baýy (& »q . deviû , BDADDR_ANY ); 1108 `baýy (& »q . bdaddr , BDADDR_LOCAL ); 1109 »q . mtu = 2048; 1110 »q . loÿl = 1; 1113 »q . sock = sk ; 1114 »q . buf = d©a ; 1115 »q . Ën =†en; 1117 `´oûss_»que¡ (& »q ); 1118 } } @src/sdpd-server.c 27 #ifdeà HAVE_CONFIG_H 28  ~ 31  ~<”ºo.h > 32  ~ 33  ~<¡dlib.h > 34  ~ 36  ~ 37  ~ 38  ~ 39  ~ 41  ~ 43  ~ 45  ~"log.h " 46  ~"sdpd.h " 48  gušt gl2ÿp_id = 0, gunix_id = 0; 50  gl2ÿp_sock , gunix_sock ; 57  $š™_£rv” ( ušt16_t mtu ,  ma¡” ,  com·t ) 59  l2ÿp_ÝtiÚs Ýts ; 60  sockaddr_l2 l2addr ; 61  sockaddr_un uÇddr ; 62 sockËn_t ÝŽ’ ; 65 `»gi¡”_public_brow£_group (); 68 `»gi¡”_£rv”_£rviû (); 71 l2ÿp_sock = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_L2CAP ); 72 ià( l2ÿp_sock < 0) { 73 `”rÜ ("Ý’šg L2CAP sock‘: %s", `¡»¼Ü ( ”ºo )); 77 `mem£t (& l2addr , 0, (l2addr)); 78 l2addr . l2_çmžy = AF_BLUETOOTH ; 79 `baýy (& l2addr . l2_bdaddr , BDADDR_ANY ); 80 l2addr . l2_psm = `htobs ( SDP_PSM ); 82 ià( `bšd ( l2ÿp_sock , ( sockaddr *è& l2addr , (l2addr)) < 0) { 83 `”rÜ ("bšdšg L2CAP sock‘: %s", `¡»¼Ü ( ”ºo )); 87 ià( ma¡” ) { 88  Ýt = L2CAP_LM_MASTER ; 89 ià( `£tsockÝt ( l2ÿp_sock , SOL_L2CAP , L2CAP_LM , & Ýt , (opt)) < 0) { 90 `”rÜ ("£tsockÝt: %s", `¡»¼Ü ( ”ºo )); 95 ià( mtu > 0) { 96 `mem£t (& Ýts , 0, (opts)); 97 ÝŽ’ = ( Ýts ); 99 ià( `g‘sockÝt ( l2ÿp_sock , SOL_L2CAP , L2CAP_OPTIONS , & Ýts , & ÝŽ’ ) < 0) { 100 `”rÜ ("g‘sockÝt: %s", `¡»¼Ü ( ”ºo )); 104 Ýts . omtu = mtu ; 105 Ýts . imtu = mtu ; 107 ià( `£tsockÝt ( l2ÿp_sock , SOL_L2CAP , L2CAP_OPTIONS , & Ýts , (opts)) < 0) { 108 `”rÜ ("£tsockÝt: %s", `¡»¼Ü ( ”ºo )); 113 ià( `li¡’ ( l2ÿp_sock , 5) < 0) { 114 `”rÜ ("li¡’: %s", `¡»¼Ü ( ”ºo )); 118 ià(! com·t ) { 119 unix_sock = -1; 124 unix_sock = `sock‘ ( PF_UNIX , SOCK_STREAM , 0); 125 ià( unix_sock < 0) { 126 `”rÜ ("Ý’šg UNIX sock‘: %s", `¡»¼Ü ( ”ºo )); 130 `mem£t (& uÇddr , 0, (unaddr)); 131 uÇddr . sun_çmžy = AF_UNIX ; 132 `¡rýy ( uÇddr . sun_·th , SDP_UNIX_PATH ); 134 `uÆšk ( uÇddr . sun_·th ); 136 ià( `bšd ( unix_sock , ( sockaddr *è& uÇddr , (unaddr)) < 0) { 137 `”rÜ ("bšdšg UNIX sock‘: %s", `¡»¼Ü ( ”ºo )); 141 ià( `li¡’ ( unix_sock , 5) < 0) { 142 `”rÜ ("li¡’ UNIX sock‘: %s", `¡»¼Ü ( ”ºo )); 146 `chmod ( SDP_UNIX_PATH , S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP ); 149 } } 151  gboÞ—n $io_£ssiÚ_ev’t ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , gpoš‹r d©a ) 153 sdp_pdu_hdr_t hdr ; 154 ušt8_t * buf ; 155  sk , Ën , size ; 157 ià( cÚd & G_IO_NVAL ) 158  FALSE ; 160 sk = `g_io_chªÃl_unix_g‘_fd ( chª ); 162 ià( cÚd & ( G_IO_HUP | G_IO_ERR )) { 163 `sdp_svcdb_cÞËù_®l ( sk ); 164  FALSE ; 167 Ën = `»cv ( sk , & hdr , ( sdp_pdu_hdr_t ), MSG_PEEK ); 168 ià( Ën !ð( sdp_pdu_hdr_t )) { 169 `sdp_svcdb_cÞËù_®l ( sk ); 170  FALSE ; 173 size = ( sdp_pdu_hdr_t è+ `Áohs ( hdr . ¶’ ); 174 buf = `m®loc ( size ); 175 ià(! buf ) 176  TRUE ; 178 Ën = `»cv ( sk , buf , size , 0); 183 ià( Ën <= 0) { 184 `sdp_svcdb_cÞËù_®l ( sk ); 185 `ä“ ( buf ); 186  FALSE ; 189 `hªdË_»que¡ ( sk , buf , Ën ); 191  TRUE ; 192 } } 194  gboÞ—n $io_acû±_ev’t ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , gpoš‹r d©a ) 196 GIOChªÃl * io ; 197  nsk ; 199 ià( cÚd & ( G_IO_HUP | G_IO_ERR | G_IO_NVAL )) 200  FALSE ; 202 ià( d©a =ð& l2ÿp_sock ) { 203  sockaddr_l2 addr ; 204 sockËn_t Ën = ( addr ); 206 nsk = `acû± ( l2ÿp_sock , ( sockaddr *è& addr , & Ën ); 207 } ià( d©a =ð& unix_sock ) { 208  sockaddr_un addr ; 209 sockËn_t Ën = ( addr ); 211 nsk = `acû± ( unix_sock , ( sockaddr *è& addr , & Ën ); 213  FALSE ; 215 ià( nsk < 0) { 216 `”rÜ ("Cª'ˆacû± cÚÃùiÚ: %s", `¡»¼Ü ( ”ºo )); 217  TRUE ; 220 io = `g_io_chªÃl_unix_Ãw ( nsk ); 221 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 223 `g_io_add_w©ch ( io , G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL , 224 io_£ssiÚ_ev’t , d©a ); 226 `g_io_chªÃl_uÄef ( io ); 228  TRUE ; 229 } } 231  $¡¬t_sdp_£rv” ( ušt16_t mtu , ušt32_t æags ) 233  com·t = æags & SDP_SERVER_COMPAT ; 234  ma¡” = æags & SDP_SERVER_MASTER ; 235 GIOChªÃl * io ; 237 `šfo ("Starting SDP server"); 239 ià( `š™_£rv” ( mtu , ma¡” , com·t ) < 0) { 240 `”rÜ ("Server initialization failed"); 244 io = `g_io_chªÃl_unix_Ãw ( l2ÿp_sock ); 245 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 247 l2ÿp_id = `g_io_add_w©ch ( io , G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL , 248 io_acû±_ev’t , & l2ÿp_sock ); 249 `g_io_chªÃl_uÄef ( io ); 251 ià( com·t && unix_sock > `fž’o ( ¡d”r )) { 252 io = `g_io_chªÃl_unix_Ãw ( unix_sock ); 253 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 255 unix_id = `g_io_add_w©ch ( io , 256 G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL , 257 io_acû±_ev’t , & unix_sock ); 258 `g_io_chªÃl_uÄef ( io ); 262 } } 264  $¡Ý_sdp_£rv” () 266 `šfo ("Stopping SDP server"); 268 `sdp_svcdb_»£t (); 270 ià( unix_id > 0) 271 `g_sourû_»move ( unix_id ); 273 ià( l2ÿp_id > 0) 274 `g_sourû_»move ( l2ÿp_id ); 276 l2ÿp_id = unix_id = 0; 277 l2ÿp_sock = unix_sock = -1; 278 } } @src/sdpd-service.c 27 #ifdeà HAVE_CONFIG_H 28  ~ 31  ~<”ºo.h > 32  ~<¡dlib.h > 33  ~ 34  ~ 36  ~ 37  ~ 38  ~ 40  ~ 42  ~"¤c/sh¬ed/utž.h " 43  ~"sdpd.h " 44  ~"log.h " 46  sdp_»cÜd_t * g£rv” = NULL ; 47  ušt32_t gfixed_dbts = 0; 53  sdp_v”siÚ_t gsdpVnumA¼ay [1] = { 56 cÚ¡  gsdpS”v”VnumEÁr›s = 1; 63 ušt32_t $sdp_g‘_time () 69  timev® tm ; 71 `g‘timeofday (& tm , NULL ); 72  ( ušt32_t è tm . tv_£c ; 73 } } 84  $upd©e_db_time¡amp () 86 ià( fixed_dbts ) { 87 sdp_d©a_t * d = `sdp_d©a_®loc ( SDP_UINT32 , & fixed_dbts ); 88 `sdp_©Œ_»¶aû ( £rv” , SDP_ATTR_SVCDB_STATE , d ); 90 ušt32_t dbts = `sdp_g‘_time (); 91 sdp_d©a_t * d = `sdp_d©a_®loc ( SDP_UINT32 , & dbts ); 92 `sdp_©Œ_»¶aû ( £rv” , SDP_ATTR_SVCDB_STATE , d ); 94 } } 96  $£t_fixed_db_time¡amp ( ušt32_t dbts ) 98 fixed_dbts = dbts ; 99 } } 101  $»gi¡”_public_brow£_group () 103 sdp_li¡_t * brow£li¡ ; 104 uuid_t bgscid , pbgid ; 105 sdp_d©a_t * sdpd©a ; 106 sdp_»cÜd_t * brow£ = `sdp_»cÜd_®loc (); 108 brow£ -> hªdË = SDP_SERVER_RECORD_HANDLE + 1; 110 `sdp_»cÜd_add ( BDADDR_ANY , brow£ ); 111 sdpd©a = `sdp_d©a_®loc ( SDP_UINT32 , & brow£ -> hªdË ); 112 `sdp_©Œ_add ( brow£ , SDP_ATTR_RECORD_HANDLE , sdpd©a ); 114 `sdp_uuid16_ü—‹ (& bgscid , BROWSE_GRP_DESC_SVCLASS_ID ); 115 brow£li¡ = `sdp_li¡_­³nd (0, & bgscid ); 116 `sdp_£t_£rviû_þas£s ( brow£ , brow£li¡ ); 117 `sdp_li¡_ä“ ( brow£li¡ , 0); 119 `sdp_uuid16_ü—‹ (& pbgid , PUBLIC_BROWSE_GROUP ); 120 `sdp_©Œ_add_Ãw ( brow£ , SDP_ATTR_GROUP_ID , 121 SDP_UUID16 , & pbgid . v®ue . uuid16 ); 122 } } 130  $»gi¡”_£rv”_£rviû () 132 sdp_li¡_t * þassIDLi¡ ; 133 uuid_t þassID ; 134 ** v”siÚs , ** v”siÚDTDs ; 135 ušt8_t dtd ; 136 sdp_d©a_t * pD©a ; 137  i ; 139 £rv” = `sdp_»cÜd_®loc (); 140 £rv” -> ·‰”n = NULL ; 143 £rv” -> hªdË = SDP_SERVER_RECORD_HANDLE ; 145 `sdp_»cÜd_add ( BDADDR_ANY , £rv” ); 146 `sdp_©Œ_add ( £rv” , SDP_ATTR_RECORD_HANDLE , 147 `sdp_d©a_®loc ( SDP_UINT32 , & £rv” -> hªdË )); 149 `sdp_uuid16_ü—‹ (& þassID , SDP_SERVER_SVCLASS_ID ); 150 þassIDLi¡ = `sdp_li¡_­³nd (0, & þassID ); 151 `sdp_£t_£rviû_þas£s ( £rv” , þassIDLi¡ ); 152 `sdp_li¡_ä“ ( þassIDLi¡ , 0); 159 v”siÚs = `m®loc ( sdpS”v”VnumEÁr›s * (*)); 160 v”siÚDTDs = `m®loc ( sdpS”v”VnumEÁr›s * (*)); 161 dtd = SDP_UINT16 ; 162  i = 0; i < sdpS”v”VnumEÁr›s ; i++) { 163 ušt16_t * v”siÚ = `m®loc ((uint16_t)); 164 * v”siÚ = sdpVnumA¼ay [ i ]. majÜ ; 165 * v”siÚ = (*version << 8); 166 * v”siÚ |ð sdpVnumA¼ay [ i ]. mšÜ ; 167 v”siÚs [ i ] = v”siÚ ; 168 v”siÚDTDs [ i ] = & dtd ; 170 pD©a = `sdp_£q_®loc ( v”siÚDTDs , v”siÚs , sdpS”v”VnumEÁr›s ); 171  i = 0; i < sdpS”v”VnumEÁr›s ; i++) 172 `ä“ ( v”siÚs [ i ]); 173 `ä“ ( v”siÚs ); 174 `ä“ ( v”siÚDTDs ); 175 `sdp_©Œ_add ( £rv” , SDP_ATTR_VERSION_NUM_LIST , pD©a ); 177 `upd©e_db_time¡amp (); 178 } } 180  $»gi¡”_deviû_id ( ušt16_t sourû , ušt16_ˆ v’dÜ , 181 ušt16_t ´oduù , ušt16_ˆ v”siÚ ) 183 cÚ¡ ušt16_t ¥ec = 0x0103; 184 cÚ¡ ušt8_t ´im¬y = 1; 185 sdp_li¡_t * þass_li¡ , * group_li¡ , * ´ofže_li¡ ; 186 uuid_t þass_uuid , group_uuid ; 187 sdp_d©a_t * sdp_d©a , * ´im¬y_d©a , * sourû_d©a ; 188 sdp_d©a_t * ¥ec_d©a , * v’dÜ_d©a , * ´oduù_d©a , * v”siÚ_d©a ; 189 sdp_´ofže_desc_t ´ofže ; 190 sdp_»cÜd_t * »cÜd = `sdp_»cÜd_®loc (); 192 `DBG ("Adding device id„ecord for %04x:%04x:%04x:%04x", 193 sourû , v’dÜ , ´oduù , v”siÚ ); 195 »cÜd -> hªdË = `sdp_Ãxt_hªdË (); 197 `sdp_»cÜd_add ( BDADDR_ANY , »cÜd ); 198 sdp_d©a = `sdp_d©a_®loc ( SDP_UINT32 , & »cÜd -> hªdË ); 199 `sdp_©Œ_add ( »cÜd , SDP_ATTR_RECORD_HANDLE , sdp_d©a ); 201 `sdp_uuid16_ü—‹ (& þass_uuid , PNP_INFO_SVCLASS_ID ); 202 þass_li¡ = `sdp_li¡_­³nd (0, & þass_uuid ); 203 `sdp_£t_£rviû_þas£s ( »cÜd , þass_li¡ ); 204 `sdp_li¡_ä“ ( þass_li¡ , NULL ); 206 `sdp_uuid16_ü—‹ (& group_uuid , PUBLIC_BROWSE_GROUP ); 207 group_li¡ = `sdp_li¡_­³nd ( NULL , & group_uuid ); 208 `sdp_£t_brow£_groups ( »cÜd , group_li¡ ); 209 `sdp_li¡_ä“ ( group_li¡ , NULL ); 211 `sdp_uuid16_ü—‹ (& ´ofže . uuid , PNP_INFO_PROFILE_ID ); 212 ´ofže . v”siÚ = ¥ec ; 213 ´ofže_li¡ = `sdp_li¡_­³nd ( NULL , & ´ofže ); 214 `sdp_£t_´ofže_descs ( »cÜd , ´ofže_li¡ ); 215 `sdp_li¡_ä“ ( ´ofže_li¡ , NULL ); 217 ¥ec_d©a = `sdp_d©a_®loc ( SDP_UINT16 , & ¥ec ); 218 `sdp_©Œ_add ( »cÜd , 0x0200, ¥ec_d©a ); 220 v’dÜ_d©a = `sdp_d©a_®loc ( SDP_UINT16 , & v’dÜ ); 221 `sdp_©Œ_add ( »cÜd , 0x0201, v’dÜ_d©a ); 223 ´oduù_d©a = `sdp_d©a_®loc ( SDP_UINT16 , & ´oduù ); 224 `sdp_©Œ_add ( »cÜd , 0x0202, ´oduù_d©a ); 226 v”siÚ_d©a = `sdp_d©a_®loc ( SDP_UINT16 , & v”siÚ ); 227 `sdp_©Œ_add ( »cÜd , 0x0203, v”siÚ_d©a ); 229 ´im¬y_d©a = `sdp_d©a_®loc ( SDP_BOOL , & ´im¬y ); 230 `sdp_©Œ_add ( »cÜd , 0x0204, ´im¬y_d©a ); 232 sourû_d©a = `sdp_d©a_®loc ( SDP_UINT16 , & sourû ); 233 `sdp_©Œ_add ( »cÜd , 0x0205, sourû_d©a ); 235 `upd©e_db_time¡amp (); 236 } } 238  $add_»cÜd_to_£rv” (cÚ¡ bdaddr_t * ¤c , sdp_»cÜd_t * »c ) 240 sdp_d©a_t * d©a ; 241 sdp_li¡_t * ·‰”n ; 243 ià( »c -> hªdË == 0xffffffff) { 244 »c -> hªdË = `sdp_Ãxt_hªdË (); 245 ià( »c -> hªdË < 0x10000) 246  - ENOSPC ; 248 ià( `sdp_»cÜd_fšd ( »c -> hªdË )) 249  - EEXIST ; 252 `DBG ("Addšg„ecÜd w™h hªdË 0x%05x", »c -> hªdË ); 254 `sdp_»cÜd_add ( ¤c , »c ); 256 d©a = `sdp_d©a_®loc ( SDP_UINT32 , & »c -> hªdË ); 257 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_RECORD_HANDLE , d©a ); 259 ià( `sdp_d©a_g‘ ( »c , SDP_ATTR_BROWSE_GRP_LIST è=ð NULL ) { 260 uuid_t uuid ; 261 `sdp_uuid16_ü—‹ (& uuid , PUBLIC_BROWSE_GROUP ); 262 `sdp_·‰”n_add_uuid ( »c , & uuid ); 265  ·‰”n = »c ->·‰”n;…©‹º;…©‹º =…©‹º-> Ãxt ) { 266  uuid [32]; 268 ià( ·‰”n -> d©a =ð NULL ) 271 `sdp_uuid2¡º (( uuid_t *è ·‰”n -> d©a , uuid , (uuid)); 272 `DBG ("RecÜd…©‹º UUID %s", uuid ); 275 `upd©e_db_time¡amp (); 278 } } 280  $»move_»cÜd_äom_£rv” ( ušt32_t hªdË ) 282 sdp_»cÜd_t * »c ; 285 ià( hªdË =ð SDP_SERVER_RECORD_HANDLE ) 286  - EINVAL ; 288 `DBG ("Removšg„ecÜd w™h hªdË 0x%05x", hªdË ); 290 »c = `sdp_»cÜd_fšd ( hªdË ); 291 ià(! »c ) 292  - ENOENT ; 294 ià( `sdp_»cÜd_»move ( hªdË ) == 0) 295 `upd©e_db_time¡amp (); 297 `sdp_»cÜd_ä“ ( »c ); 300 } } 303  sdp_»cÜd_t * $exŒaù_pdu_£rv” ( bdaddr_t * deviû , ušt8_t * p , 304  bufsize , 305 ušt32_t hªdËEx³ùed , * sÿÂed ) 307  exŒaùStus = -1, loÿlExŒaùedL’gth = 0; 308 ušt8_t dtd ; 309  £qËn = 0; 310 sdp_»cÜd_t * »c = NULL ; 311 ušt16_t ©ŒId , lookAh—dA‰rId ; 312 sdp_d©a_t * pA‰r = NULL ; 313 ušt32_t hªdË = 0xffffffff; 315 * sÿÂed = `sdp_exŒaù_£qty³ ( p , bufsize , & dtd , & £qËn ); 316 p +ð* sÿÂed ; 317 bufsize -ð* sÿÂed ; 319 ià( bufsize < ( ušt8_t ) + (uint8_t)) { 320 `SDPDBG ("Unexpectedƒnd of…acket"); 321  NULL ; 324 lookAh—dA‰rId = `g‘_be16 ( p + ( ušt8_t )); 326 `SDPDBG ("Look‡h—d‡‰¸id : %d", lookAh—dA‰rId ); 328 ià( lookAh—dA‰rId =ð SDP_ATTR_RECORD_HANDLE ) { 329 ià( bufsize < (( ušt8_t ) * 2) + 330 ( ušt16_t è+ ( ušt32_t )) { 331 `SDPDBG ("Unexpectedƒnd of…acket"); 332  NULL ; 334 hªdË = `g‘_be32 ( p + ( ušt8_t è+ ( ušt16_t ) + 335 ( ušt8_t )); 336 `SDPDBG ("SvcRecHªdË : 0x%x", hªdË ); 337 »c = `sdp_»cÜd_fšd ( hªdË ); 338 } ià( hªdËEx³ùed != 0xffffffff) 339 »c = `sdp_»cÜd_fšd ( hªdËEx³ùed ); 341 ià(! »c ) { 342 »c = `sdp_»cÜd_®loc (); 343 »c -> ©Œli¡ = NULL ; 344 ià( lookAh—dA‰rId =ð SDP_ATTR_RECORD_HANDLE ) { 345 »c -> hªdË = handle; 346 `sdp_»cÜd_add ( deviû , »c ); 347 } ià( hªdËEx³ùed != 0xffffffff) { 348 »c -> hªdË = hªdËEx³ùed ; 349 `sdp_»cÜd_add ( deviû , »c ); 352 `sdp_li¡_ä“ ( »c -> ©Œli¡ , ( sdp_ä“_func_t è sdp_d©a_ä“ ); 353 »c -> ©Œli¡ = NULL ; 356  loÿlExŒaùedL’gth < £qËn ) { 357  ©ŒSize = ( ušt8_t ); 358  ©ŒV®ueL’gth = 0; 360 ià( bufsize < ©ŒSize + ( ušt16_t )) { 361 `SDPDBG ("Unexpectedƒnd of…acket: Terminatingƒxtraction of‡ttributes"); 365 `SDPDBG ("Extract PDU, sequenceLength: %d†ocalExtractedLength: %d", 366 £qËn , loÿlExŒaùedL’gth ); 367 dtd = *( ušt8_t *è p ; 369 ©ŒId = `g‘_be16 ( p + ©ŒSize ); 370 ©ŒSize +ð( ušt16_t ); 372 `SDPDBG ("DTD oà©ŒId : %d A‰¸id : 0x%x", dtd , ©ŒId ); 374 pA‰r = `sdp_exŒaù_©Œ ( p + ©ŒSize , bufsize -‡ttrSize, 375 & ©ŒV®ueL’gth , »c ); 377 `SDPDBG ("A‰¸id : 0x%x‡‰rV®ueL’gth : %d", ©ŒId , ©ŒV®ueL’gth ); 379 ©ŒSize +ð ©ŒV®ueL’gth ; 380 ià( pA‰r =ð NULL ) { 381 `SDPDBG ("Terminatingƒxtraction of‡ttributes"); 384 loÿlExŒaùedL’gth +ð ©ŒSize ; 385 p +ð ©ŒSize ; 386 bufsize -ð ©ŒSize ; 387 `sdp_©Œ_»¶aû ( »c , ©ŒId , pA‰r ); 388 exŒaùStus = 0; 389 `SDPDBG ("Extract PDU, seqLength: %d†ocalExtractedLength: %d", 390 £qËn , loÿlExŒaùedL’gth ); 393 ià( exŒaùStus == 0) { 394 `SDPDBG ("Successfulƒxtracting of Svc Rec‡ttributes"); 395 #ifdeà SDP_DEBUG 396 `sdp_´št_£rviû_©Œ ( »c -> ©Œli¡ ); 398 * sÿÂed +ð £qËn ; 400  »c ; 401 } } 406  $£rviû_»gi¡”_»q ( sdp_»q_t * »q , sdp_buf_t * r¥ ) 408  sÿÂed = 0; 409 sdp_d©a_t * hªdË ; 410 ušt8_t * p = »q -> buf + ( sdp_pdu_hdr_t ); 411  bufsize = »q -> Ën - ( sdp_pdu_hdr_t ); 412 sdp_»cÜd_t * »c ; 414 »q -> æags = * p ++; 415 ià( »q -> æags & SDP_DEVICE_RECORD ) { 416 `baýy (& »q -> deviû , ( bdaddr_t *è p ); 417 p +ð( bdaddr_t ); 418 bufsize -ð( bdaddr_t ); 422 »c = `exŒaù_pdu_£rv” (& »q -> deviû , p , bufsize , 0xffffffff, & sÿÂed ); 423 ià(! »c ) 424  šv®id ; 426 ià( »c -> hªdË == 0xffffffff) { 427 »c -> hªdË = `sdp_Ãxt_hªdË (); 428 ià( »c -> hªdË < 0x10000) { 429 `sdp_»cÜd_ä“ ( »c ); 430  šv®id ; 433 ià( `sdp_»cÜd_fšd ( »c -> hªdË )) { 437  sucûss ; 441 `sdp_»cÜd_add (& »q -> deviû , »c ); 442 ià(!( »q -> æags & SDP_RECORD_PERSIST )) 443 `sdp_svcdb_£t_cÞËùabË ( »c , »q -> sock ); 445 hªdË = `sdp_d©a_®loc ( SDP_UINT32 , & »c ->handle); 446 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_RECORD_HANDLE , hªdË ); 448 sucûss : 451 ià( `sdp_d©a_g‘ ( »c , SDP_ATTR_BROWSE_GRP_LIST è=ð NULL ) { 452 uuid_t uuid ; 453 `sdp_uuid16_ü—‹ (& uuid , PUBLIC_BROWSE_GROUP ); 454 `sdp_·‰”n_add_uuid ( »c , & uuid ); 457 `upd©e_db_time¡amp (); 460 `put_be32 ( »c -> hªdË , r¥ -> d©a ); 461 r¥ -> d©a_size = ( ušt32_t ); 465 šv®id : 466 `put_be16 ( SDP_INVALID_SYNTAX , r¥ -> d©a ); 467 r¥ -> d©a_size = ( ušt16_t ); 470 } } 475  $£rviû_upd©e_»q ( sdp_»q_t * »q , sdp_buf_t * r¥ ) 477 sdp_»cÜd_t * Üec , * Äec ; 478  ¡©us = 0, sÿÂed = 0; 479 ušt8_t * p = »q -> buf + ( sdp_pdu_hdr_t ); 480  bufsize = »q -> Ën - ( sdp_pdu_hdr_t ); 481 ušt32_t hªdË = `g‘_be32 ( p ); 483 `SDPDBG ("SvøReøHªdË: 0x%x", hªdË ); 485 p +ð( ušt32_t ); 486 bufsize -ð( ušt32_t ); 488 Üec = `sdp_»cÜd_fšd ( hªdË ); 490 `SDPDBG ("SvcRecOld: %p", Üec ); 492 ià(! Üec ) { 493 ¡©us = SDP_INVALID_RECORD_HANDLE ; 494  dÚe ; 497 Äec = `exŒaù_pdu_£rv” ( BDADDR_ANY , p , bufsize , hªdË , & sÿÂed ); 498 ià(! Äec ) { 499 ¡©us = SDP_INVALID_SYNTAX ; 500  dÚe ; 503 `as£¹ ( Äec =ð Üec ); 505 `upd©e_db_time¡amp (); 507 dÚe : 508 p = r¥ -> d©a ; 509 `put_be16 ( ¡©us , p ); 510 r¥ -> d©a_size = ( ušt16_t ); 511  ¡©us ; 512 } } 517  $£rviû_»move_»q ( sdp_»q_t * »q , sdp_buf_t * r¥ ) 519 ušt8_t * p = »q -> buf + ( sdp_pdu_hdr_t ); 520 ušt32_t hªdË = `g‘_be32 ( p ); 521 sdp_»cÜd_t * »c ; 522  ¡©us = 0; 526 »c = `sdp_»cÜd_fšd ( hªdË ); 527 ià( »c ) { 528 `sdp_svcdb_cÞËù ( »c ); 529 ¡©us = `sdp_»cÜd_»move ( hªdË ); 530 `sdp_»cÜd_ä“ ( »c ); 531 ià( ¡©us == 0) 532 `upd©e_db_time¡amp (); 534 ¡©us = SDP_INVALID_RECORD_HANDLE ; 535 `SDPDBG ("Could‚Ù fšd„ecÜd : 0x%x", hªdË ); 538 p = r¥ -> d©a ; 539 `put_be16 ( ¡©us , p ); 540 r¥ -> d©a_size = ( ušt16_t ); 542  ¡©us ; 543 } } @src/sdpd.h 27  ~ 28  ~ 30 #ifdeà SDP_DEBUG 31  ~ 32  #SDPDBG ( fmt , ¬g ...è `sy¦og ( LOG_DEBUG , "%s: " fmˆ"\n", __func__ , ##‡rg) ) 34  #SDPDBG ( fmt ...) ) 37  s»que¡ { 38 bdaddr_t mdeviû ; 39 bdaddr_t mbdaddr ; 40  mloÿl ; 41  msock ; 42  mmtu ; 43  mæags ; 44 ušt8_t * mbuf ; 45  mËn ; 46 } tsdp_»q_t ; 48  hªdË_š‹º®_»que¡ ( sk ,  mtu , * d©a ,  Ën ); 49  hªdË_»que¡ ( sk , ušt8_t * d©a ,  Ën ); 51  £t_fixed_db_time¡amp ( ušt32_t dbts ); 53  £rviû_»gi¡”_»q ( sdp_»q_t * »q , sdp_buf_t * r¥ ); 54  £rviû_upd©e_»q ( sdp_»q_t * »q , sdp_buf_t * r¥ ); 55  £rviû_»move_»q ( sdp_»q_t * »q , sdp_buf_t * r¥ ); 57  »gi¡”_public_brow£_group (); 58  »gi¡”_£rv”_£rviû (); 59  »gi¡”_deviû_id ( ušt16_t sourû , ušt16_ˆ v’dÜ , 60 ušt16_t ´oduù , ušt16_ˆ v”siÚ ); 62  »cÜd_sÜt (cÚ¡ * r1 , cÚ¡ * r2 ); 63  sdp_svcdb_»£t (); 64  sdp_svcdb_cÞËù_®l ( sock ); 65  sdp_svcdb_£t_cÞËùabË ( sdp_»cÜd_t * »c ,  sock ); 66  sdp_svcdb_cÞËù ( sdp_»cÜd_t * »c ); 67 sdp_»cÜd_t * sdp_»cÜd_fšd ( ušt32_t hªdË ); 68  sdp_»cÜd_add (cÚ¡ bdaddr_t * deviû , sdp_»cÜd_t * »c ); 69  sdp_»cÜd_»move ( ušt32_t hªdË ); 70 sdp_li¡_t * sdp_g‘_»cÜd_li¡ (); 71  sdp_check_acûss ( ušt32_t hªdË , bdaddr_t * deviû ); 72 ušt32_t sdp_Ãxt_hªdË (); 74 ušt32_t sdp_g‘_time (); 76  #SDP_SERVER_COMPAT (1 << 0) ) 77  #SDP_SERVER_MASTER (1 << 1) ) 79  ¡¬t_sdp_£rv” ( ušt16_t mtu , ušt32_t æags ); 80  ¡Ý_sdp_£rv” (); 82  add_»cÜd_to_£rv” (cÚ¡ bdaddr_t * ¤c , sdp_»cÜd_t * »c ); 83  »move_»cÜd_äom_£rv” ( ušt32_t hªdË ); @src/service.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡dlib.h > 30  ~ 31  ~ 32  ~ 33  ~<¡dboÞ.h > 34  ~ 35  ~ 36  ~<”ºo.h > 38  ~ 40  ~ 42  ~"log.h " 44  ~"ad­‹r.h " 45  ~"deviû.h " 46  ~"´ofže.h " 47  ~"£rviû.h " 49  sbtd_£rviû { 50  m»f ; 51  btd_deviû * mdeviû ; 52  btd_´ofže * m´ofže ; 53 * mu£r_d©a ; 54 btd_£rviû_¡©e_t m¡©e ; 55  m”r ; 56 ušt16_t m¡¬t_hªdË ; 57 ušt16_t m’d_hªdË ; 60  s£rviû_¡©e_ÿÎback { 61 btd_£rviû_¡©e_cb mcb ; 62 * mu£r_d©a ; 63  mid ; 66  GSLi¡ * g¡©e_ÿÎbacks = NULL ; 68 cÚ¡ * $¡©e2¡r ( btd_£rviû_¡©e_t ¡©e ) 70  ¡©e ) { 71  BTD_SERVICE_STATE_UNAVAILABLE : 73  BTD_SERVICE_STATE_DISCONNECTED : 75  BTD_SERVICE_STATE_CONNECTING : 77  BTD_SERVICE_STATE_CONNECTED : 79  BTD_SERVICE_STATE_DISCONNECTING : 83  NULL ; 84 } } 86  $chªge_¡©e ( btd_£rviû * £rviû , btd_£rviû_¡©e_t ¡©e , 87  ”r ) 89 btd_£rviû_¡©e_t Þd = £rviû -> ¡©e ; 90  addr [18]; 91 GSLi¡ * l ; 93 ià( ¡©e =ð Þd ) 96 `as£¹ ( £rviû -> deviû !ð NULL ); 97 `as£¹ ( £rviû -> ´ofže !ð NULL ); 99 £rviû -> ¡©e = state; 100 £rviû -> ”r =ƒrr; 102 `ba2¡r ( `deviû_g‘_add»ss ( £rviû -> deviû ), addr ); 103 `DBG ("%p: deviû % ´ofž% ¡©chªged: % -> % (%d)", £rviû , 104 addr , £rviû -> ´ofže -> Çme , 105 `¡©e2¡r ( Þd ), s‹2¡r( ¡©e ), ”r ); 107  l = ¡©e_ÿÎbacks ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 108  £rviû_¡©e_ÿÎback * cb = l -> d©a ; 110 cb -> `cb ( £rviû , Þd , ¡©e , cb-> u£r_d©a ); 112 } } 114  btd_£rviû * $btd_£rviû_»f ( btd_£rviû * £rviû ) 116 £rviû -> »f ++; 118 `DBG ("%p:„ef=%d", £rviû , s”viû-> »f ); 120  £rviû ; 121 } } 123  $btd_£rviû_uÄef ( btd_£rviû * £rviû ) 125 £rviû -> »f --; 127 `DBG ("%p:„ef=%d", £rviû , s”viû-> »f ); 129 ià( £rviû -> »f > 0) 132 `g_ä“ ( £rviû ); 133 } } 135  btd_£rviû * $£rviû_ü—‹ ( btd_deviû * deviû , 136  btd_´ofže * ´ofže ) 138  btd_£rviû * £rviû ; 140 £rviû = `g_Œy_Ãw0 ( btd_£rviû , 1); 141 ià(! £rviû ) { 142 `”rÜ ("service_create: failedo‡lloc memory"); 143  NULL ; 146 £rviû -> »f = 1; 147 £rviû -> deviû = device; 148 £rviû -> ´ofže =…rofile; 149 £rviû -> ¡©e = BTD_SERVICE_STATE_UNAVAILABLE ; 151  £rviû ; 152 } } 154  btd_£rviû * $£rviû_ü—‹_g©t ( btd_deviû * deviû , 155  btd_´ofže * ´ofže , 156 ušt16_t ¡¬t_hªdË , 157 ušt16_t ’d_hªdË ) 159  btd_£rviû * £rviû ; 161 ià(! ¡¬t_hªdË || ! ’d_hªdË || start_handle >ƒnd_handle) 162  NULL ; 164 £rviû = `£rviû_ü—‹ ( deviû , ´ofže ); 165 ià(! £rviû ) 166  NULL ; 168 £rviû -> ¡¬t_hªdË = start_handle; 169 £rviû -> ’d_hªdË =ƒnd_handle; 171  £rviû ; 172 } } 174  $£rviû_´obe ( btd_£rviû * £rviû ) 176  addr [18]; 177  ”r ; 179 `as£¹ ( £rviû -> ¡©e =ð BTD_SERVICE_STATE_UNAVAILABLE ); 181 ”r = £rviû -> ´ofže -> `deviû_´obe (service); 182 ià( ”r == 0) { 183 `chªge_¡©e ( £rviû , BTD_SERVICE_STATE_DISCONNECTED , 0); 187 `ba2¡r ( `deviû_g‘_add»ss ( £rviû -> deviû ), addr ); 188 `”rÜ ("% ´ofž´obçžed fÜ %s", £rviû -> ´ofže -> Çme , addr ); 190  ”r ; 191 } } 193  $£rviû_»move ( btd_£rviû * £rviû ) 195 `chªge_¡©e ( £rviû , BTD_SERVICE_STATE_UNAVAILABLE , 0); 196 £rviû -> ´ofže -> `deviû_»move (service); 197 £rviû -> deviû = NULL ; 198 £rviû -> ´ofže = NULL ; 199 `btd_£rviû_uÄef ( £rviû ); 200 } } 202  $£rviû_acû± ( btd_£rviû * £rviû ) 204  addr [18]; 205  ”r ; 207 ià(! £rviû -> ´ofže -> acû± ) 210 ”r = £rviû -> ´ofže -> `acû± (service); 211 ià(! ”r ) 214 `ba2¡r ( `deviû_g‘_add»ss ( £rviû -> deviû ), addr ); 215 `”rÜ ("% ´ofžacû± fažed fÜ %s", £rviû -> ´ofže -> Çme , addr ); 217  ”r ; 218 } } 220  $btd_£rviû_cÚÃù ( btd_£rviû * £rviû ) 222  btd_´ofže * ´ofže = £rviû ->profile; 223  addr [18]; 224  ”r ; 225 #ifdeà __TIZEN_PATCH__ 226 ià( ´ofže !ð NULL && !´ofže-> cÚÃù ) 228 ià(! ´ofže -> cÚÃù ) 230  - ENOTSUP ; 232  £rviû -> ¡©e ) { 233  BTD_SERVICE_STATE_UNAVAILABLE : 234  - EINVAL ; 235  BTD_SERVICE_STATE_DISCONNECTED : 237  BTD_SERVICE_STATE_CONNECTING : 238  BTD_SERVICE_STATE_CONNECTED : 239  - EALREADY ; 240  BTD_SERVICE_STATE_DISCONNECTING : 241  - EBUSY ; 244 ”r = ´ofže -> `cÚÃù ( £rviû ); 245 ià( ”r == 0) { 246 `chªge_¡©e ( £rviû , BTD_SERVICE_STATE_CONNECTING , 0); 250 `ba2¡r ( `deviû_g‘_add»ss ( £rviû -> deviû ), addr ); 251 `”rÜ ("% ´ofžcÚÃù fažed fÜ %s: %s", ´ofže -> Çme , addr , 252 `¡»¼Ü (- ”r )); 254  ”r ; 255 } } 257  $btd_£rviû_discÚÃù ( btd_£rviû * £rviû ) 259  btd_´ofže * ´ofže = £rviû ->profile; 260  addr [18]; 261  ”r ; 263 ià(! ´ofže -> discÚÃù ) 264  - ENOTSUP ; 266  £rviû -> ¡©e ) { 267  BTD_SERVICE_STATE_UNAVAILABLE : 268  - EINVAL ; 269  BTD_SERVICE_STATE_DISCONNECTED : 270  BTD_SERVICE_STATE_DISCONNECTING : 271  - EALREADY ; 272  BTD_SERVICE_STATE_CONNECTING : 273  BTD_SERVICE_STATE_CONNECTED : 277 `chªge_¡©e ( £rviû , BTD_SERVICE_STATE_DISCONNECTING , 0); 279 ”r = ´ofže -> `discÚÃù ( £rviû ); 280 ià( ”r == 0) 283 ià( ”r =ð- ENOTCONN ) { 284 `btd_£rviû_discÚÃùšg_com¶‘e ( £rviû , 0); 288 `ba2¡r ( `deviû_g‘_add»ss ( £rviû -> deviû ), addr ); 289 `”rÜ ("% ´ofždiscÚÃù fažed fÜ %s: %s", ´ofže -> Çme , addr , 290 `¡»¼Ü (- ”r )); 292 `btd_£rviû_discÚÃùšg_com¶‘e ( £rviû , ”r ); 294  ”r ; 295 } } 297  btd_deviû * $btd_£rviû_g‘_deviû (cÚ¡  btd_£rviû * £rviû ) 299  £rviû -> deviû ; 300 } } 302  btd_´ofže * $btd_£rviû_g‘_´ofže (cÚ¡  btd_£rviû * £rviû ) 304  £rviû -> ´ofže ; 305 } } 307  $btd_£rviû_£t_u£r_d©a ( btd_£rviû * £rviû , * u£r_d©a ) 309 `as£¹ ( £rviû -> ¡©e =ð BTD_SERVICE_STATE_UNAVAILABLE ); 310 £rviû -> u£r_d©a = user_data; 311 } } 313 * $btd_£rviû_g‘_u£r_d©a (cÚ¡  btd_£rviû * £rviû ) 315  £rviû -> u£r_d©a ; 316 } } 318 btd_£rviû_¡©e_t $btd_£rviû_g‘_¡©e (cÚ¡  btd_£rviû * £rviû ) 320  £rviû -> ¡©e ; 321 } } 323  $btd_£rviû_g‘_”rÜ (cÚ¡  btd_£rviû * £rviû ) 325  £rviû -> ”r ; 326 } } 328 boÞ $btd_£rviû_g‘_g©t_hªdËs (cÚ¡  btd_£rviû * £rviû , 329 ušt16_t * ¡¬t_hªdË , 330 ušt16_t * ’d_hªdË ) 332 ià(! £rviû || !£rviû-> ¡¬t_hªdË || !£rviû-> ’d_hªdË ) 333  çl£ ; 335 ià( ¡¬t_hªdË ) 336 * ¡¬t_hªdË = £rviû ->start_handle; 338 ià( ’d_hªdË ) 339 * ’d_hªdË = £rviû ->end_handle; 341  Œue ; 342 } } 344  $btd_£rviû_add_¡©e_cb ( btd_£rviû_¡©e_cb cb , * u£r_d©a ) 346  £rviû_¡©e_ÿÎback * ¡©e_cb ; 347  id = 0; 349 ¡©e_cb = `g_Ãw0 ( £rviû_¡©e_ÿÎback , 1); 350 ¡©e_cb -> cb = cb; 351 ¡©e_cb -> u£r_d©a = user_data; 352 ¡©e_cb -> id = ++id; 354 ¡©e_ÿÎbacks = `g_¦i¡_­³nd (¡©e_ÿÎbacks, ¡©e_cb ); 356  ¡©e_cb -> id ; 357 } } 359 boÞ $btd_£rviû_»move_¡©e_cb ( id ) 361 GSLi¡ * l ; 363  l = ¡©e_ÿÎbacks ;† !ð NULL ;† = `g_¦i¡_Ãxt (l)) { 364  £rviû_¡©e_ÿÎback * cb = l -> d©a ; 366 ià( cb && cb-> id == id) { 367 ¡©e_ÿÎbacks = `g_¦i¡_»move (¡©e_ÿÎbacks, cb ); 368 `g_ä“ ( cb ); 369  Œue ; 373  çl£ ; 374 } } 376  $btd_£rviû_cÚÃùšg_com¶‘e ( btd_£rviû * £rviû ,  ”r ) 378 ià( £rviû -> ¡©e !ð BTD_SERVICE_STATE_DISCONNECTED && 379 £rviû -> ¡©e !ð BTD_SERVICE_STATE_CONNECTING ) 382 ià( ”r == 0) 383 `chªge_¡©e ( £rviû , BTD_SERVICE_STATE_CONNECTED , 0); 385 `chªge_¡©e ( £rviû , BTD_SERVICE_STATE_DISCONNECTED , ”r ); 386 } } 388  $btd_£rviû_discÚÃùšg_com¶‘e ( btd_£rviû * £rviû ,  ”r ) 390 ià( £rviû -> ¡©e !ð BTD_SERVICE_STATE_CONNECTED && 391 £rviû -> ¡©e !ð BTD_SERVICE_STATE_DISCONNECTING ) 394 ià( ”r == 0) 395 `chªge_¡©e ( £rviû , BTD_SERVICE_STATE_DISCONNECTED , 0); 397 `chªge_¡©e ( £rviû , BTD_SERVICE_STATE_CONNECTED , ”r ); 398 } } @src/service.h 25 mBTD_SERVICE_STATE_UNAVAILABLE , 26 mBTD_SERVICE_STATE_DISCONNECTED , 27 mBTD_SERVICE_STATE_CONNECTING , 28 mBTD_SERVICE_STATE_CONNECTED , 29 mBTD_SERVICE_STATE_DISCONNECTING , 30 } tbtd_£rviû_¡©e_t ; 32  gbtd_£rviû ; 33  gbtd_deviû ; 34  gbtd_´ofže ; 36 (* tbtd_£rviû_¡©e_cb è( tbtd_£rviû * t£rviû , 37 tbtd_£rviû_¡©e_t tÞd_¡©e , 38 tbtd_£rviû_¡©e_t tÃw_¡©e , 39 * tu£r_d©a ); 41  btd_£rviû * `btd_£rviû_»f (btd_£rviû * £rviû ); 42  `btd_£rviû_uÄef ( btd_£rviû * £rviû ); 45  btd_£rviû * `£rviû_ü—‹ ( btd_deviû * deviû , 46  btd_´ofže * ´ofže ); 47  btd_£rviû * `£rviû_ü—‹_g©t ( btd_deviû * deviû , 48  btd_´ofže * ´ofže , 49 ušt16_t ¡¬t_hªdË , 50 ušt16_t ’d_hªdË ); 52  `£rviû_´obe ( btd_£rviû * £rviû ); 53  `£rviû_»move ( btd_£rviû * £rviû ); 55  `£rviû_acû± ( btd_£rviû * £rviû ); 58  `btd_£rviû_cÚÃù ( btd_£rviû * £rviû ); 59  `btd_£rviû_discÚÃù ( btd_£rviû * £rviû ); 62  btd_deviû * `btd_£rviû_g‘_deviû (cÚ¡  btd_£rviû * £rviû ); 63  btd_´ofže * `btd_£rviû_g‘_´ofže (cÚ¡  btd_£rviû * £rviû ); 64 btd_£rviû_¡©e_t `btd_£rviû_g‘_¡©e (cÚ¡  btd_£rviû * £rviû ); 65  `btd_£rviû_g‘_”rÜ (cÚ¡  btd_£rviû * £rviû ); 66 boÞ `btd_£rviû_g‘_g©t_hªdËs (cÚ¡  btd_£rviû * £rviû , 67 ušt16_t * ¡¬t_hªdË , 68 ušt16_t * ’d_hªdË ); 70  `btd_£rviû_add_¡©e_cb ( btd_£rviû_¡©e_cb cb , 71 * u£r_d©a ); 72 boÞ `btd_£rviû_»move_¡©e_cb ( id ); 75  `btd_£rviû_cÚÃùšg_com¶‘e ( btd_£rviû * £rviû ,  ”r ); 76  `btd_£rviû_discÚÃùšg_com¶‘e ( btd_£rviû * £rviû ,  ”r ); 77  `btd_£rviû_£t_u£r_d©a ( btd_£rviû * £rviû , * u£r_d©a ); 78 * `btd_£rviû_g‘_u£r_d©a (cÚ¡  btd_£rviû * £rviû ); @src/shared/att-types.h 24  ~<¡dšt.h > 26 #iâdeà __·cked 27  #__·cked `__©Œibu‹__ (( ·cked )) ) 30  #BT_ATT_DEFAULT_LE_MTU 23 ) 31  #BT_ATT_MAX_LE_MTU 517 ) 34  #BT_ATT_OP_ERROR_RSP 0x01 ) 35  #BT_ATT_OP_MTU_REQ 0x02 ) 36  #BT_ATT_OP_MTU_RSP 0x03 ) 37  #BT_ATT_OP_FIND_INFO_REQ 0x04 ) 38  #BT_ATT_OP_FIND_INFO_RSP 0x05 ) 39  #BT_ATT_OP_FIND_BY_TYPE_VAL_REQ 0x06 ) 40  #BT_ATT_OP_FIND_BY_TYPE_VAL_RSP 0x07 ) 41  #BT_ATT_OP_READ_BY_TYPE_REQ 0x08 ) 42  #BT_ATT_OP_READ_BY_TYPE_RSP 0x09 ) 43  #BT_ATT_OP_READ_REQ 0x0a ) 44  #BT_ATT_OP_READ_RSP 0x0b ) 45  #BT_ATT_OP_READ_BLOB_REQ 0x0c ) 46  #BT_ATT_OP_READ_BLOB_RSP 0x0d ) 47  #BT_ATT_OP_READ_MULT_REQ 0x0e ) 48  #BT_ATT_OP_READ_MULT_RSP 0x0f ) 49  #BT_ATT_OP_READ_BY_GRP_TYPE_REQ 0x10 ) 50  #BT_ATT_OP_READ_BY_GRP_TYPE_RSP 0x11 ) 51  #BT_ATT_OP_WRITE_REQ 0x12 ) 52  #BT_ATT_OP_WRITE_RSP 0x13 ) 53  #BT_ATT_OP_WRITE_CMD 0x52 ) 54  #BT_ATT_OP_SIGNED_WRITE_CMD 0xD2 ) 55  #BT_ATT_OP_PREP_WRITE_REQ 0x16 ) 56  #BT_ATT_OP_PREP_WRITE_RSP 0x17 ) 57  #BT_ATT_OP_EXEC_WRITE_REQ 0x18 ) 58  #BT_ATT_OP_EXEC_WRITE_RSP 0x19 ) 59  #BT_ATT_OP_HANDLE_VAL_NOT 0x1B ) 60  #BT_ATT_OP_HANDLE_VAL_IND 0x1D ) 61  #BT_ATT_OP_HANDLE_VAL_CONF 0x1E ) 65  sbt_©t_pdu_”rÜ_r¥ { 66 ušt8_t mÝcode ; 67 ušt16_t mhªdË ; 68 ušt8_t mecode ; 69 } g__·cked ; 72  #BT_ATT_ALL_REQUESTS 0x00 ) 75  #BT_ATT_ERROR_INVALID_HANDLE 0x01 ) 76  #BT_ATT_ERROR_READ_NOT_PERMITTED 0x02 ) 77  #BT_ATT_ERROR_WRITE_NOT_PERMITTED 0x03 ) 78  #BT_ATT_ERROR_INVALID_PDU 0x04 ) 79  #BT_ATT_ERROR_AUTHENTICATION 0x05 ) 80  #BT_ATT_ERROR_REQUEST_NOT_SUPPORTED 0x06 ) 81  #BT_ATT_ERROR_INVALID_OFFSET 0x07 ) 82  #BT_ATT_ERROR_AUTHORIZATION 0x08 ) 83  #BT_ATT_ERROR_PREPARE_QUEUE_FULL 0x09 ) 84  #BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND 0x0A ) 85  #BT_ATT_ERROR_ATTRIBUTE_NOT_LONG 0x0B ) 86  #BT_ATT_ERROR_INSUFFICIENT_ENCRYPTION_KEY_SIZE 0x0C ) 87  #BT_ATT_ERROR_INVALID_ATTRIBUTE_VALUE_LEN 0x0D ) 88  #BT_ATT_ERROR_UNLIKELY 0x0E ) 89  #BT_ATT_ERROR_INSUFFICIENT_ENCRYPTION 0x0F ) 90  #BT_ATT_ERROR_UNSUPPORTED_GROUP_TYPE 0x10 ) 91  #BT_ATT_ERROR_INSUFFICIENT_RESOURCES 0x11 ) 98  #BT_ATT_PERM_READ 0x01 ) 99  #BT_ATT_PERM_WRITE 0x02 ) 100  #BT_ATT_PERM_ENCRYPT 0x04 ) 101  #BT_ATT_PERM_AUTHEN 0x08 ) 102  #BT_ATT_PERM_AUTHOR 0x10 ) 103  #BT_ATT_PERM_NONE 0x20 ) 106  #BT_GATT_CHRC_PROP_BROADCAST 0x01 ) 107  #BT_GATT_CHRC_PROP_READ 0x02 ) 108  #BT_GATT_CHRC_PROP_WRITE_WITHOUT_RESP 0x04 ) 109  #BT_GATT_CHRC_PROP_WRITE 0x08 ) 110  #BT_GATT_CHRC_PROP_NOTIFY 0x10 ) 111  #BT_GATT_CHRC_PROP_INDICATE 0x20 ) 112  #BT_GATT_CHRC_PROP_AUTH 0x40 ) 113  #BT_GATT_CHRC_PROP_EXT_PROP 0x80 ) 116  #BT_GATT_CHRC_EXT_PROP_RELIABLE_WRITE 0x01 ) 117  #BT_GATT_CHRC_EXT_PROP_WRITABLE_AUX 0x02 ) @src/shared/att.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~ 30  ~<”ºo.h > 32  ~"¤c/sh¬ed/io.h " 33  ~"¤c/sh¬ed/queue.h " 34  ~"¤c/sh¬ed/utž.h " 35  ~"¤c/sh¬ed/timeout.h " 36  ~"lib/uuid.h " 37  ~"¤c/sh¬ed/©t.h " 39  #ATT_MIN_PDU_LEN 1 ) 40  #ATT_OP_CMD_MASK 0x40 ) 41  #ATT_OP_SIGNED_MASK 0x80 ) 42  #ATT_TIMEOUT_INTERVAL 30000 ) 50  #BT_ERROR_CCC_IMPROPERLY_CONFIGURED 0xfd ) 51  #BT_ERROR_ALREADY_IN_PROGRESS 0xã ) 52  #BT_ERROR_OUT_OF_RANGE 0xff ) 54  g©t_£nd_Ý ; 56  sbt_©t { 57  m»f_couÁ ; 58  mfd ; 59  io * mio ; 61  queue * m»q_queue ; 62  ©t_£nd_Ý * m³ndšg_»q ; 63  queue * mšd_queue ; 64  ©t_£nd_Ý * m³ndšg_šd ; 65  queue * mwr™e_queue ; 66 boÞ mwr™”_aùive ; 68  queue * mnÙify_li¡ ; 69  queue * mdiscÚn_li¡ ; 71 boÞ mš_»q ; 73 ušt8_t * mbuf ; 74 ušt16_t mmtu ; 76  mÃxt_£nd_id ; 77  mÃxt_»g_id ; 79 bt_©t_timeout_func_t mtimeout_ÿÎback ; 80 bt_©t_de¡roy_func_t mtimeout_de¡roy ; 81 * mtimeout_d©a ; 83 bt_©t_debug_func_t mdebug_ÿÎback ; 84 bt_©t_de¡roy_func_t mdebug_de¡roy ; 85 * mdebug_d©a ; 88 e©t_Ý_ty³ { 89 mATT_OP_TYPE_REQ , 90 mATT_OP_TYPE_RSP , 91 mATT_OP_TYPE_CMD , 92 mATT_OP_TYPE_IND , 93 mATT_OP_TYPE_NOT , 94 mATT_OP_TYPE_CONF , 95 mATT_OP_TYPE_UNKNOWN , 99 ušt8_t mÝcode ; 100 ©t_Ý_ty³ mty³ ; 101 } g©t_Ýcode_ty³_bË [] = { 102 { BT_ATT_OP_ERROR_RSP , ATT_OP_TYPE_RSP }, 103 { BT_ATT_OP_MTU_REQ , ATT_OP_TYPE_REQ }, 104 { BT_ATT_OP_MTU_RSP , ATT_OP_TYPE_RSP }, 105 { BT_ATT_OP_FIND_INFO_REQ , ATT_OP_TYPE_REQ }, 106 { BT_ATT_OP_FIND_INFO_RSP , ATT_OP_TYPE_RSP }, 107 { BT_ATT_OP_FIND_BY_TYPE_VAL_REQ , ATT_OP_TYPE_REQ }, 108 { BT_ATT_OP_FIND_BY_TYPE_VAL_RSP , ATT_OP_TYPE_RSP }, 109 { BT_ATT_OP_READ_BY_TYPE_REQ , ATT_OP_TYPE_REQ }, 110 { BT_ATT_OP_READ_BY_TYPE_RSP , ATT_OP_TYPE_RSP }, 111 { BT_ATT_OP_READ_REQ , ATT_OP_TYPE_REQ }, 112 { BT_ATT_OP_READ_RSP , ATT_OP_TYPE_RSP }, 113 { BT_ATT_OP_READ_BLOB_REQ , ATT_OP_TYPE_REQ }, 114 { BT_ATT_OP_READ_BLOB_RSP , ATT_OP_TYPE_RSP }, 115 { BT_ATT_OP_READ_MULT_REQ , ATT_OP_TYPE_REQ }, 116 { BT_ATT_OP_READ_MULT_RSP , ATT_OP_TYPE_RSP }, 117 { BT_ATT_OP_READ_BY_GRP_TYPE_REQ , ATT_OP_TYPE_REQ }, 118 { BT_ATT_OP_READ_BY_GRP_TYPE_RSP , ATT_OP_TYPE_RSP }, 119 { BT_ATT_OP_WRITE_REQ , ATT_OP_TYPE_REQ }, 120 { BT_ATT_OP_WRITE_RSP , ATT_OP_TYPE_RSP }, 121 { BT_ATT_OP_WRITE_CMD , ATT_OP_TYPE_CMD }, 122 { BT_ATT_OP_SIGNED_WRITE_CMD , ATT_OP_TYPE_CMD }, 123 { BT_ATT_OP_PREP_WRITE_REQ , ATT_OP_TYPE_REQ }, 124 { BT_ATT_OP_PREP_WRITE_RSP , ATT_OP_TYPE_RSP }, 125 { BT_ATT_OP_EXEC_WRITE_REQ , ATT_OP_TYPE_REQ }, 126 { BT_ATT_OP_EXEC_WRITE_RSP , ATT_OP_TYPE_RSP }, 127 { BT_ATT_OP_HANDLE_VAL_NOT , ATT_OP_TYPE_NOT }, 128 { BT_ATT_OP_HANDLE_VAL_IND , ATT_OP_TYPE_IND }, 129 { BT_ATT_OP_HANDLE_VAL_CONF , ATT_OP_TYPE_CONF }, 133  ©t_Ý_ty³ $g‘_Ý_ty³ ( ušt8_t Ýcode ) 135  i ; 137  i = 0; ©t_Ýcode_ty³_bË [i]. Ýcode ; i++) { 138 ià( ©t_Ýcode_ty³_bË [ i ]. Ýcode == opcode) 139  ©t_Ýcode_ty³_bË [ i ]. ty³ ; 142  ATT_OP_TYPE_UNKNOWN ; 143 } } 146 ušt8_t m»q_Ýcode ; 147 ušt8_t mr¥_Ýcode ; 148 } g©t_»q_r¥_m­pšg_bË [] = { 149 { BT_ATT_OP_MTU_REQ , BT_ATT_OP_MTU_RSP }, 150 { BT_ATT_OP_FIND_INFO_REQ , BT_ATT_OP_FIND_INFO_RSP }, 151 { BT_ATT_OP_FIND_BY_TYPE_VAL_REQ , BT_ATT_OP_FIND_BY_TYPE_VAL_RSP }, 152 { BT_ATT_OP_READ_BY_TYPE_REQ , BT_ATT_OP_READ_BY_TYPE_RSP }, 153 { BT_ATT_OP_READ_REQ , BT_ATT_OP_READ_RSP }, 154 { BT_ATT_OP_READ_BLOB_REQ , BT_ATT_OP_READ_BLOB_RSP }, 155 { BT_ATT_OP_READ_MULT_REQ , BT_ATT_OP_READ_MULT_RSP }, 156 { BT_ATT_OP_READ_BY_GRP_TYPE_REQ , BT_ATT_OP_READ_BY_GRP_TYPE_RSP }, 157 { BT_ATT_OP_WRITE_REQ , BT_ATT_OP_WRITE_RSP }, 158 { BT_ATT_OP_PREP_WRITE_REQ , BT_ATT_OP_PREP_WRITE_RSP }, 159 { BT_ATT_OP_EXEC_WRITE_REQ , BT_ATT_OP_EXEC_WRITE_RSP }, 163  ušt8_t $g‘_»q_Ýcode ( ušt8_t r¥_Ýcode ) 165  i ; 167  i = 0; ©t_»q_r¥_m­pšg_bË [i]. r¥_Ýcode ; i++) { 168 ià( ©t_»q_r¥_m­pšg_bË [ i ]. r¥_Ýcode ==„sp_opcode) 169  ©t_»q_r¥_m­pšg_bË [ i ]. »q_Ýcode ; 173 } } 175  s©t_£nd_Ý { 176  mid ; 177  mtimeout_id ; 178 ©t_Ý_ty³ mty³ ; 179 ušt16_t mÝcode ; 180 * mpdu ; 181 ušt16_t mËn ; 182 bt_©t_»¥Ú£_func_t mÿÎback ; 183 bt_©t_de¡roy_func_t mde¡roy ; 184 * mu£r_d©a ; 187  $de¡roy_©t_£nd_Ý (* d©a ) 189  ©t_£nd_Ý * Ý = d©a ; 191 ià( Ý -> timeout_id ) 192 `timeout_»move ( Ý -> timeout_id ); 194 ià( Ý -> de¡roy ) 195 Ý -> `de¡roy (Ý-> u£r_d©a ); 197 `ä“ ( Ý -> pdu ); 198 `ä“ ( Ý ); 199 } } 201  $ÿnûl_©t_£nd_Ý ( ©t_£nd_Ý * Ý ) 203 ià( Ý -> de¡roy ) 204 Ý -> `de¡roy (Ý-> u£r_d©a ); 206 Ý -> u£r_d©a = NULL ; 207 Ý -> ÿÎback = NULL ; 208 Ý -> de¡roy = NULL ; 209 } } 211  s©t_nÙify { 212  mid ; 213 ušt16_t mÝcode ; 214 bt_©t_nÙify_func_t mÿÎback ; 215 bt_©t_de¡roy_func_t mde¡roy ; 216 * mu£r_d©a ; 219  $de¡roy_©t_nÙify (* d©a ) 221  ©t_nÙify * nÙify = d©a ; 223 ià( nÙify -> de¡roy ) 224 nÙify -> `de¡roy ÒÙify-> u£r_d©a ); 226 `ä“ ( nÙify ); 227 } } 229  boÞ $m©ch_nÙify_id (cÚ¡ * a , cÚ¡ * b ) 231 cÚ¡  ©t_nÙify * nÙify = a ; 232  id = `PTR_TO_UINT ( b ); 234  nÙify -> id == id; 235 } } 237  s©t_discÚn { 238  mid ; 239 boÞ m»moved ; 240 bt_©t_discÚÃù_func_t mÿÎback ; 241 bt_©t_de¡roy_func_t mde¡roy ; 242 * mu£r_d©a ; 245  $de¡roy_©t_discÚn (* d©a ) 247  ©t_discÚn * discÚn = d©a ; 249 ià( discÚn -> de¡roy ) 250 discÚn -> `de¡roy (discÚn-> u£r_d©a ); 252 `ä“ ( discÚn ); 253 } } 255  boÞ $m©ch_discÚn_id (cÚ¡ * a , cÚ¡ * b ) 257 cÚ¡  ©t_discÚn * discÚn = a ; 258  id = `PTR_TO_UINT ( b ); 260  discÚn -> id == id; 261 } } 263  boÞ $’code_pdu ( ©t_£nd_Ý * Ý , cÚ¡ * pdu , 264 ušt16_t Ëngth , ušt16_ˆ mtu ) 266 ušt16_t pdu_Ën = 1; 268 ià( Ëngth && pdu ) 269 pdu_Ën +ð Ëngth ; 271 ià( pdu_Ën > mtu ) 272  çl£ ; 274 Ý -> Ën = pdu_Ën ; 275 Ý -> pdu = `m®loc (Ý-> Ën ); 276 ià(! Ý -> pdu ) 277  çl£ ; 279 (( ušt8_t *è Ý -> pdu )[0] = op-> Ýcode ; 280 ià( pdu_Ën > 1) 281 `memýy ( Ý -> pdu + 1,…du, Ëngth ); 283  Œue ; 284 } } 286  ©t_£nd_Ý * $ü—‹_©t_£nd_Ý ( ušt8_t Ýcode , cÚ¡ * pdu , 287 ušt16_t Ëngth , ušt16_ˆ mtu , 288 bt_©t_»¥Ú£_func_t ÿÎback , 289 * u£r_d©a , 290 bt_©t_de¡roy_func_t de¡roy ) 292  ©t_£nd_Ý * Ý ; 293 ©t_Ý_ty³ Ý_ty³ ; 295 ià( Ëngth && ! pdu ) 296  NULL ; 298 Ý_ty³ = `g‘_Ý_ty³ ( Ýcode ); 299 ià( Ý_ty³ =ð ATT_OP_TYPE_UNKNOWN ) 300  NULL ; 306 ià( ÿÎback && Ý_ty³ !ð ATT_OP_TYPE_REQ && op_ty³ !ð ATT_OP_TYPE_IND ) 307  NULL ; 312 ià(! ÿÎback && ( Ý_ty³ =ð ATT_OP_TYPE_REQ || op_ty³ =ð ATT_OP_TYPE_IND )) 313  NULL ; 315 Ý = `Ãw0 ( ©t_£nd_Ý , 1); 316 ià(! Ý ) 317  NULL ; 319 Ý -> ty³ = Ý_ty³ ; 320 Ý -> Ýcode = opcode; 321 Ý -> ÿÎback = callback; 322 Ý -> de¡roy = destroy; 323 Ý -> u£r_d©a = user_data; 325 ià(! `’code_pdu ( Ý , pdu , Ëngth , mtu )) { 326 `ä“ ( Ý ); 327  NULL ; 330  Ý ; 331 } } 333  ©t_£nd_Ý * $pick_Ãxt_£nd_Ý ( bt_©t * ©t ) 335  ©t_£nd_Ý * Ý ; 338 Ý = `queue_pÝ_h—d ( ©t -> wr™e_queue ); 339 ià( Ý ) 340  Ý ; 345 ià(! ©t -> ³ndšg_»q ) { 346 Ý = `queue_pÝ_h—d ( ©t -> »q_queue ); 347 ià( Ý ) 348  Ý ; 354 ià(! ©t -> ³ndšg_šd ) { 355 Ý = `queue_pÝ_h—d ( ©t -> šd_queue ); 356 ià( Ý ) 357  Ý ; 360  NULL ; 361 } } 363  stimeout_d©a { 364  bt_©t * m©t ; 365  mid ; 368  boÞ $timeout_cb (* u£r_d©a ) 370  timeout_d©a * timeout = u£r_d©a ; 371  bt_©t * ©t = timeout ->att; 372  ©t_£nd_Ý * Ý = NULL ; 374 ià( ©t -> ³ndšg_»q &&‡‰->³ndšg_»q-> id =ð timeout ->id) { 375 Ý = ©t -> ³ndšg_»q ; 376 ©t -> ³ndšg_»q = NULL ; 377 } ià( ©t -> ³ndšg_šd &&‡‰->³ndšg_šd-> id =ð timeout ->id) { 378 Ý = ©t -> ³ndšg_šd ; 379 ©t -> ³ndšg_šd = NULL ; 382 ià(! Ý ) 383  çl£ ; 385 `utž_debug ( ©t -> debug_ÿÎback ,‡‰-> debug_d©a , 386 "O³¿tiÚimed out: 0x%02x", Ý -> Ýcode ); 388 ià( ©t -> timeout_ÿÎback ) 389 ©t -> `timeout_ÿÎback ( Ý -> id , op-> Ýcode ,‡‰-> timeout_d©a ); 391 Ý -> timeout_id = 0; 392 `de¡roy_©t_£nd_Ý ( Ý ); 399 `io_shutdown ( ©t -> io ); 401  çl£ ; 402 } } 404  $wr™e_w©ch_de¡roy (* u£r_d©a ) 406  bt_©t * ©t = u£r_d©a ; 408 ©t -> wr™”_aùive = çl£ ; 409 } } 411  boÞ $ÿn_wr™e_d©a ( io *io, * u£r_d©a ) 413  bt_©t * ©t = u£r_d©a ; 414  ©t_£nd_Ý * Ý ; 415  timeout_d©a * timeout ; 416 ssize_t »t ; 417  iovec iov ; 419 Ý = `pick_Ãxt_£nd_Ý ( ©t ); 420 ià(! Ý ) 421  çl£ ; 423 iov . iov_ba£ = Ý -> pdu ; 424 iov . iov_Ën = Ý -> Ën ; 426 »t = `io_£nd ( io , & iov , 1); 427 ià( »t < 0) { 428 `utž_debug ( ©t -> debug_ÿÎback ,‡‰-> debug_d©a , 429 "wr™çžed: %s", `¡»¼Ü (- »t )); 430 ià( Ý -> ÿÎback ) 431 Ý -> `ÿÎback ( BT_ATT_OP_ERROR_RSP , NULL , 0, 432 Ý -> u£r_d©a ); 434 `de¡roy_©t_£nd_Ý ( Ý ); 435  Œue ; 438 `utž_debug ( ©t -> debug_ÿÎback ,‡‰-> debug_d©a , 439 "ATT o°0x%02x", Ý -> Ýcode ); 441 `utž_hexdump ('<', Ý -> pdu , »t , ©t -> debug_ÿÎback ,‡‰-> debug_d©a ); 447  Ý -> ty³ ) { 448  ATT_OP_TYPE_REQ : 449 ©t -> ³ndšg_»q = Ý ; 451  ATT_OP_TYPE_IND : 452 ©t -> ³ndšg_šd = Ý ; 454  ATT_OP_TYPE_RSP : 456 ©t -> š_»q = çl£ ; 459  ATT_OP_TYPE_CMD : 460  ATT_OP_TYPE_NOT : 461  ATT_OP_TYPE_CONF : 462  ATT_OP_TYPE_UNKNOWN : 464 `de¡roy_©t_£nd_Ý ( Ý ); 465  Œue ; 468 timeout = `Ãw0 ( timeout_d©a , 1); 469 ià(! timeout ) 470  Œue ; 472 timeout -> ©t =‡tt; 473 timeout -> id = Ý ->id; 474 Ý -> timeout_id = `timeout_add ( ATT_TIMEOUT_INTERVAL , timeout_cb , 475 timeout , ä“ ); 478  Œue ; 479 } } 481  $wakeup_wr™” ( bt_©t * ©t ) 483 ià( ©t -> wr™”_aùive ) 489 ià( `queue_i£m±y ( ©t -> wr™e_queue )) { 490 ià(( ©t -> ³ndšg_»q || `queue_i£m±y ׉-> »q_queue )) && 491 ( ©t -> ³ndšg_šd || `queue_i£m±y ׉-> šd_queue ))) 495 ià(! `io_£t_wr™e_hªdËr ( ©t -> io , ÿn_wr™e_d©a ,‡tt, 496 wr™e_w©ch_de¡roy )) 499 ©t -> wr™”_aùive = Œue ; 500 } } 502  $discÚn_hªdËr (* d©a , * u£r_d©a ) 504  ©t_discÚn * discÚn = d©a ; 505  ”r = `PTR_TO_INT ( u£r_d©a ); 507 ià( discÚn -> »moved ) 510 ià( discÚn -> ÿÎback ) 511 discÚn -> `ÿÎback ( ”r , discÚn-> u£r_d©a ); 512 } } 514  boÞ $discÚÃù_cb ( io *io, * u£r_d©a ) 516  bt_©t * ©t = u£r_d©a ; 517  ”r ; 518 sockËn_t Ën ; 520 Ën = ( ”r ); 522 ià( `g‘sockÝt ( ©t -> fd , SOL_SOCKET , SO_ERROR , & ”r , & Ën ) < 0) { 523 `utž_debug ( ©t -> debug_ÿÎback ,‡‰-> debug_d©a , 525 `¡»¼Ü ( ”ºo )); 526 ”r = 0; 529 `utž_debug ( ©t -> debug_ÿÎback ,‡‰-> debug_d©a , 531 `¡»¼Ü ( ”r )); 533 `io_de¡roy ( ©t -> io ); 534 ©t -> io = NULL ; 536 `bt_©t_ÿnûl_®l ( ©t ); 538 `bt_©t_»f ( ©t ); 540 `queue_fÜ—ch ( ©t -> discÚn_li¡ , discÚn_hªdËr , `INT_TO_PTR ( ”r )); 542 `bt_©t_uÄegi¡”_®l ( ©t ); 543 `bt_©t_uÄef ( ©t ); 545  çl£ ; 546 } } 548  $hªdË_r¥ ( bt_©t * ©t , ušt8_t Ýcode , ušt8_ˆ* pdu , 549 ssize_t pdu_Ën ) 551  ©t_£nd_Ý * Ý = ©t -> ³ndšg_»q ; 552 ušt8_t »q_Ýcode ; 553 ušt8_t r¥_Ýcode ; 554 ušt8_t * r¥_pdu = NULL ; 555 ušt16_t r¥_pdu_Ën = 0; 561 ià(! Ý ) { 562 `utž_debug ( ©t -> debug_ÿÎback ,‡‰-> debug_d©a , 564 `io_shutdown ( ©t -> io ); 572 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 573 ià( pdu_Ën != 4) 574  çž ; 576 »q_Ýcode = pdu [0]; 577 } ià(!( »q_Ýcode = `g‘_»q_Ýcode ( Ýcode ))) 578  çž ; 580 ià( »q_Ýcode !ð Ý -> Ýcode ) 581  çž ; 583 r¥_Ýcode = Ýcode ; 585 ià( pdu_Ën > 0) { 586 r¥_pdu = pdu ; 587 r¥_pdu_Ën = pdu_Ën ; 590  dÚe ; 592 çž : 593 `utž_debug ( ©t -> debug_ÿÎback ,‡‰-> debug_d©a , 594 "FažedØhªdË„e¥Ú£ PDU; opcode: 0x%02x", Ýcode ); 596 r¥_Ýcode = BT_ATT_OP_ERROR_RSP ; 598 dÚe : 599 ià( Ý -> ÿÎback ) 600 Ý -> `ÿÎback ( r¥_Ýcode , r¥_pdu , r¥_pdu_Ën , op-> u£r_d©a ); 602 `de¡roy_©t_£nd_Ý ( Ý ); 603 ©t -> ³ndšg_»q = NULL ; 605 `wakeup_wr™” ( ©t ); 606 } } 608  $hªdË_cÚf ( bt_©t * ©t , ušt8_t * pdu , ssize_t pdu_Ën ) 610  ©t_£nd_Ý * Ý = ©t -> ³ndšg_šd ; 616 ià(! Ý || pdu_Ën ) { 617 `utž_debug ( ©t -> debug_ÿÎback ,‡‰-> debug_d©a , 619 `io_shutdown ( ©t -> io ); 623 ià( Ý -> ÿÎback ) 624 Ý -> `ÿÎback ( BT_ATT_OP_HANDLE_VAL_CONF , NULL , 0, op-> u£r_d©a ); 626 `de¡roy_©t_£nd_Ý ( Ý ); 627 ©t -> ³ndšg_šd = NULL ; 629 `wakeup_wr™” ( ©t ); 630 } } 632  snÙify_d©a { 633 ušt8_t mÝcode ; 634 ušt8_t * mpdu ; 635 ssize_t mpdu_Ën ; 636 boÞ mhªdËr_found ; 639  boÞ $Ýcode_m©ch ( ušt8_t Ýcode , ušt8_ˆ ‹¡_Ýcode ) 641 ©t_Ý_ty³ Ý_ty³ = `g‘_Ý_ty³ ( ‹¡_Ýcode ); 643 ià( Ýcode =ð BT_ATT_ALL_REQUESTS && ( Ý_ty³ =ð ATT_OP_TYPE_REQ || 644 Ý_ty³ =ð ATT_OP_TYPE_CMD )) 645  Œue ; 647  Ýcode =ð ‹¡_Ýcode ; 648 } } 650  $nÙify_hªdËr (* d©a , * u£r_d©a ) 652  ©t_nÙify * nÙify = d©a ; 653  nÙify_d©a * nÙ_d©a = u£r_d©a ; 655 ià(! `Ýcode_m©ch ( nÙify -> Ýcode , nÙ_d©a ->opcode)) 658 nÙ_d©a -> hªdËr_found = Œue ; 660 ià( nÙify -> ÿÎback ) 661 nÙify -> `ÿÎback ( nÙ_d©a -> Ýcode ,‚Ù_d©a-> pdu , 662 nÙ_d©a -> pdu_Ën , nÙify -> u£r_d©a ); 663 } } 665  $»¥Úd_nÙ_suµÜ‹d ( bt_©t * ©t , ušt8_t Ýcode ) 667 ušt8_t pdu [4]; 669 pdu [0] = Ýcode ; 670 pdu [1] = 0; 671 pdu [2] = 0; 672 pdu [3] = BT_ATT_ERROR_REQUEST_NOT_SUPPORTED ; 674 `bt_©t_£nd ( ©t , BT_ATT_OP_ERROR_RSP , pdu , Õdu), NULL , NULL, 675 NULL ); 676 } } 678  $hªdË_nÙify ( bt_©t * ©t , ušt8_t Ýcode , ušt8_ˆ* pdu , 679 ssize_t pdu_Ën ) 681  nÙify_d©a d©a ; 683 `bt_©t_»f ( ©t ); 685 `mem£t (& d©a , 0, (data)); 686 d©a . Ýcode = opcode; 688 ià( pdu_Ën > 0) { 689 d©a . pdu =…du; 690 d©a . pdu_Ën =…du_len; 693 `queue_fÜ—ch ( ©t -> nÙify_li¡ , nÙify_hªdËr , & d©a ); 695 `bt_©t_uÄef ( ©t ); 701 ià(! d©a . hªdËr_found && `g‘_Ý_ty³ ( Ýcode è=ð ATT_OP_TYPE_REQ ) 702 `»¥Úd_nÙ_suµÜ‹d ( ©t , Ýcode ); 703 } } 705  boÞ $ÿn_»ad_d©a ( io *io, * u£r_d©a ) 707  bt_©t * ©t = u£r_d©a ; 708 ušt8_t Ýcode ; 709 ušt8_t * pdu ; 710 ssize_t by‹s_»ad ; 712 by‹s_»ad = `»ad ( ©t -> fd ,‡‰-> buf ,‡‰-> mtu ); 713 ià( by‹s_»ad < 0) 714  çl£ ; 716 `utž_hexdump ('>', ©t -> buf , by‹s_»ad , 717 ©t -> debug_ÿÎback ,‡‰-> debug_d©a ); 719 ià( by‹s_»ad < ATT_MIN_PDU_LEN ) 720  Œue ; 722 pdu = ©t -> buf ; 723 Ýcode = pdu [0]; 725 `bt_©t_»f ( ©t ); 728  `g‘_Ý_ty³ ( Ýcode )) { 729  ATT_OP_TYPE_RSP : 730 `utž_debug ( ©t -> debug_ÿÎback ,‡‰-> debug_d©a , 731 "ATT„e¥Ú£„eûived: 0x%02x", Ýcode ); 732 `hªdË_r¥ ( ©t , Ýcode , pdu + 1, by‹s_»ad - 1); 734  ATT_OP_TYPE_CONF : 735 `utž_debug ( ©t -> debug_ÿÎback ,‡‰-> debug_d©a , 736 "ATT cÚfœm©iÚ„eûived: 0x%02x", Ýcode ); 737 `hªdË_cÚf ( ©t , pdu + 1, by‹s_»ad - 1); 739  ATT_OP_TYPE_REQ : 745 ià( ©t -> š_»q ) { 746 `utž_debug ( ©t -> debug_ÿÎback ,‡‰-> debug_d©a , 748 "³ndšg: 0x%02x", Ýcode ); 749 `io_shutdown ( ©t -> io ); 750 `bt_©t_uÄef ( ©t ); 752  çl£ ; 755 ©t -> š_»q = Œue ; 758  ATT_OP_TYPE_CMD : 759  ATT_OP_TYPE_NOT : 760  ATT_OP_TYPE_UNKNOWN : 761  ATT_OP_TYPE_IND : 766 `utž_debug ( ©t -> debug_ÿÎback ,‡‰-> debug_d©a , 767 "ATT PDU„eûived: 0x%02x", Ýcode ); 768 `hªdË_nÙify ( ©t , Ýcode , pdu + 1, by‹s_»ad - 1); 772 `bt_©t_uÄef ( ©t ); 774  Œue ; 775 } } 777  $bt_©t_ä“ ( bt_©t * ©t ) 779 ià( ©t -> ³ndšg_»q ) 780 `de¡roy_©t_£nd_Ý ( ©t -> ³ndšg_»q ); 782 ià( ©t -> ³ndšg_šd ) 783 `de¡roy_©t_£nd_Ý ( ©t -> ³ndšg_šd ); 785 `io_de¡roy ( ©t -> io ); 787 `queue_de¡roy ( ©t -> »q_queue , NULL ); 788 `queue_de¡roy ( ©t -> šd_queue , NULL ); 789 `queue_de¡roy ( ©t -> wr™e_queue , NULL ); 790 `queue_de¡roy ( ©t -> nÙify_li¡ , NULL ); 791 `queue_de¡roy ( ©t -> discÚn_li¡ , NULL ); 793 ià( ©t -> timeout_de¡roy ) 794 ©t -> `timeout_de¡roy ׉-> timeout_d©a ); 796 ià( ©t -> debug_de¡roy ) 797 ©t -> `debug_de¡roy ׉-> debug_d©a ); 799 `ä“ ( ©t -> buf ); 801 `ä“ ( ©t ); 802 } } 804  bt_©t * $bt_©t_Ãw ( fd ) 806  bt_©t * ©t ; 808 ià( fd < 0) 809  NULL ; 811 ©t = `Ãw0 ( bt_©t , 1); 812 ià(! ©t ) 813  NULL ; 815 ©t -> fd = fd; 817 ©t -> mtu = BT_ATT_DEFAULT_LE_MTU ; 818 ©t -> buf = `m®loc ׉-> mtu ); 819 ià(! ©t -> buf ) 820  çž ; 822 ©t -> io = `io_Ãw ( fd ); 823 ià(! ©t -> io ) 824  çž ; 826 ©t -> »q_queue = `queue_Ãw (); 827 ià(! ©t -> »q_queue ) 828  çž ; 830 ©t -> šd_queue = `queue_Ãw (); 831 ià(! ©t -> šd_queue ) 832  çž ; 834 ©t -> wr™e_queue = `queue_Ãw (); 835 ià(! ©t -> wr™e_queue ) 836  çž ; 838 ©t -> nÙify_li¡ = `queue_Ãw (); 839 ià(! ©t -> nÙify_li¡ ) 840  çž ; 842 ©t -> discÚn_li¡ = `queue_Ãw (); 843 ià(! ©t -> discÚn_li¡ ) 844  çž ; 846 ià(! `io_£t_»ad_hªdËr ( ©t -> io , ÿn_»ad_d©a ,‡‰, NULL )) 847  çž ; 849 ià(! `io_£t_discÚÃù_hªdËr ( ©t -> io , discÚÃù_cb ,‡‰, NULL )) 850  çž ; 852  `bt_©t_»f ( ©t ); 854 çž : 855 `bt_©t_ä“ ( ©t ); 857  NULL ; 858 } } 860  bt_©t * $bt_©t_»f ( bt_©t * ©t ) 862 ià(! ©t ) 863  NULL ; 865 `__sync_ãtch_ªd_add (& ©t -> »f_couÁ , 1); 867  ©t ; 868 } } 870  $bt_©t_uÄef ( bt_©t * ©t ) 872 ià(! ©t ) 875 ià( `__sync_sub_ªd_ãtch (& ©t -> »f_couÁ , 1)) 878 `bt_©t_uÄegi¡”_®l ( ©t ); 879 `bt_©t_ÿnûl_®l ( ©t ); 881 `bt_©t_ä“ ( ©t ); 882 } } 884 boÞ $bt_©t_£t_þo£_Ú_uÄef ( bt_©t * ©t , boÞ do_þo£ ) 886 ià(! ©t || !©t-> io ) 887  çl£ ; 889  `io_£t_þo£_Ú_de¡roy ( ©t -> io , do_þo£ ); 890 } } 892 boÞ $bt_©t_£t_debug ( bt_©t * ©t , bt_©t_debug_func_t ÿÎback , 893 * u£r_d©a , bt_©t_de¡roy_func_t de¡roy ) 895 ià(! ©t ) 896  çl£ ; 898 ià( ©t -> debug_de¡roy ) 899 ©t -> `debug_de¡roy ׉-> debug_d©a ); 901 ©t -> debug_ÿÎback = ÿÎback ; 902 ©t -> debug_de¡roy = de¡roy ; 903 ©t -> debug_d©a = u£r_d©a ; 905  Œue ; 906 } } 908 ušt16_t $bt_©t_g‘_mtu ( bt_©t * ©t ) 910 ià(! ©t ) 913  ©t -> mtu ; 914 } } 916 boÞ $bt_©t_£t_mtu ( bt_©t * ©t , ušt16_t mtu ) 918 * buf ; 920 ià(! ©t ) 921  çl£ ; 923 ià( mtu < BT_ATT_DEFAULT_LE_MTU ) 924  çl£ ; 926 buf = `m®loc ( mtu ); 927 ià(! buf ) 928  çl£ ; 930 `ä“ ( ©t -> buf ); 932 ©t -> mtu = mtu; 933 ©t -> buf = buf; 935  Œue ; 936 } } 938 boÞ $bt_©t_£t_timeout_cb ( bt_©t * ©t , bt_©t_timeout_func_t ÿÎback , 939 * u£r_d©a , 940 bt_©t_de¡roy_func_t de¡roy ) 942 ià(! ©t ) 943  çl£ ; 945 ià( ©t -> timeout_de¡roy ) 946 ©t -> `timeout_de¡roy ׉-> timeout_d©a ); 948 ©t -> timeout_ÿÎback = ÿÎback ; 949 ©t -> timeout_de¡roy = de¡roy ; 950 ©t -> timeout_d©a = u£r_d©a ; 952  Œue ; 953 } } 955  $bt_©t_»gi¡”_discÚÃù ( bt_©t * ©t , 956 bt_©t_discÚÃù_func_t ÿÎback , 957 * u£r_d©a , 958 bt_©t_de¡roy_func_t de¡roy ) 960  ©t_discÚn * discÚn ; 962 ià(! ©t || !©t-> io ) 965 discÚn = `Ãw0 ( ©t_discÚn , 1); 966 ià(! discÚn ) 969 discÚn -> ÿÎback = callback; 970 discÚn -> de¡roy = destroy; 971 discÚn -> u£r_d©a = user_data; 973 ià( ©t -> Ãxt_»g_id < 1) 974 ©t -> Ãxt_»g_id = 1; 976 discÚn -> id = ©t -> Ãxt_»g_id ++; 978 ià(! `queue_push_ž ( ©t -> discÚn_li¡ , discÚn )) { 979 `ä“ ( discÚn ); 983  discÚn -> id ; 984 } } 986 boÞ $bt_©t_uÄegi¡”_discÚÃù ( bt_©t * ©t ,  id ) 988  ©t_discÚn * discÚn ; 990 ià(! ©t || ! id ) 991  çl£ ; 993 discÚn = `queue_»move_if ( ©t -> discÚn_li¡ , m©ch_discÚn_id , 994 `UINT_TO_PTR ( id )); 995 ià(! discÚn ) 996  çl£ ; 998 `de¡roy_©t_discÚn ( discÚn ); 999  Œue ; 1000 } } 1002  $bt_©t_£nd ( bt_©t * ©t , ušt8_t Ýcode , 1003 cÚ¡ * pdu , ušt16_t Ëngth , 1004 bt_©t_»¥Ú£_func_t ÿÎback , * u£r_d©a , 1005 bt_©t_de¡roy_func_t de¡roy ) 1007  ©t_£nd_Ý * Ý ; 1008 boÞ »suÉ ; 1010 ià(! ©t || !©t-> io ) 1013 Ý = `ü—‹_©t_£nd_Ý ( Ýcode , pdu , Ëngth , ©t -> mtu , ÿÎback , 1014 u£r_d©a , de¡roy ); 1015 ià(! Ý ) 1018 ià( ©t -> Ãxt_£nd_id < 1) 1019 ©t -> Ãxt_£nd_id = 1; 1021 Ý -> id = ©t -> Ãxt_£nd_id ++; 1024  Ý -> ty³ ) { 1025  ATT_OP_TYPE_REQ : 1026 »suÉ = `queue_push_ž ( ©t -> »q_queue , Ý ); 1028  ATT_OP_TYPE_IND : 1029 »suÉ = `queue_push_ž ( ©t -> šd_queue , Ý ); 1031  ATT_OP_TYPE_CMD : 1032  ATT_OP_TYPE_NOT : 1033  ATT_OP_TYPE_UNKNOWN : 1034  ATT_OP_TYPE_RSP : 1035  ATT_OP_TYPE_CONF : 1037 »suÉ = `queue_push_ž ( ©t -> wr™e_queue , Ý ); 1041 ià(! »suÉ ) { 1042 `ä“ ( Ý -> pdu ); 1043 `ä“ ( Ý ); 1047 `wakeup_wr™” ( ©t ); 1049  Ý -> id ; 1050 } } 1052  boÞ $m©ch_Ý_id (cÚ¡ * a , cÚ¡ * b ) 1054 cÚ¡  ©t_£nd_Ý * Ý = a ; 1055  id = `PTR_TO_UINT ( b ); 1057  Ý -> id == id; 1058 } } 1060 boÞ $bt_©t_ÿnûl ( bt_©t * ©t ,  id ) 1062  ©t_£nd_Ý * Ý ; 1064 ià(! ©t || ! id ) 1065  çl£ ; 1067 ià( ©t -> ³ndšg_»q &&‡‰->³ndšg_»q-> id == id) { 1069 `ÿnûl_©t_£nd_Ý ( ©t -> ³ndšg_»q ); 1070  Œue ; 1073 ià( ©t -> ³ndšg_šd &&‡‰->³ndšg_šd-> id == id) { 1075 `ÿnûl_©t_£nd_Ý ( ©t -> ³ndšg_šd ); 1076  Œue ; 1079 Ý = `queue_»move_if ( ©t -> »q_queue , m©ch_Ý_id , `UINT_TO_PTR ( id )); 1080 ià( Ý ) 1081  dÚe ; 1083 Ý = `queue_»move_if ( ©t -> šd_queue , m©ch_Ý_id , `UINT_TO_PTR ( id )); 1084 ià( Ý ) 1085  dÚe ; 1087 Ý = `queue_»move_if ( ©t -> wr™e_queue , m©ch_Ý_id , `UINT_TO_PTR ( id )); 1088 ià( Ý ) 1089  dÚe ; 1091 ià(! Ý ) 1092  çl£ ; 1094 dÚe : 1095 `de¡roy_©t_£nd_Ý ( Ý ); 1097 `wakeup_wr™” ( ©t ); 1099  Œue ; 1100 } } 1102 boÞ $bt_©t_ÿnûl_®l ( bt_©t * ©t ) 1104 ià(! ©t ) 1105  çl£ ; 1107 `queue_»move_®l ( ©t -> »q_queue , NULL , NULL, de¡roy_©t_£nd_Ý ); 1108 `queue_»move_®l ( ©t -> šd_queue , NULL , NULL, de¡roy_©t_£nd_Ý ); 1109 `queue_»move_®l ( ©t -> wr™e_queue , NULL , NULL, de¡roy_©t_£nd_Ý ); 1111 ià( ©t -> ³ndšg_»q ) 1113 `ÿnûl_©t_£nd_Ý ( ©t -> ³ndšg_»q ); 1115 ià( ©t -> ³ndšg_šd ) 1117 `ÿnûl_©t_£nd_Ý ( ©t -> ³ndšg_šd ); 1119  Œue ; 1120 } } 1122  ušt8_t $©t_ecode_äom_”rÜ ( ”r ) 1129 ià( ”r > 0 &&ƒ¼ < UINT8_MAX ) 1130  ”r ; 1136  ”r ) { 1137 - ENOENT : 1138  BT_ATT_ERROR_INVALID_HANDLE ; 1139 - ENOMEM : 1140  BT_ATT_ERROR_INSUFFICIENT_RESOURCES ; 1141 - EALREADY : 1142  BT_ERROR_ALREADY_IN_PROGRESS ; 1143 - EOVERFLOW : 1144  BT_ERROR_OUT_OF_RANGE ; 1147  BT_ATT_ERROR_UNLIKELY ; 1148 } } 1150  $bt_©t_£nd_”rÜ_r¥ ( bt_©t * ©t , ušt8_t Ýcode , 1151 ušt16_t hªdË ,  ”rÜ ) 1153  bt_©t_pdu_”rÜ_r¥ pdu ; 1154 ušt8_t ecode ; 1156 ià(! ©t || ! Ýcode ) 1159 ecode = `©t_ecode_äom_”rÜ ( ”rÜ ); 1161 `mem£t (& pdu , 0, (pdu)); 1163 pdu . Ýcode = opcode; 1164 `put_Ë16 ( hªdË , & pdu .handle); 1165 pdu . ecode =ƒcode; 1167  `bt_©t_£nd ( ©t , BT_ATT_OP_ERROR_RSP , & pdu , (pdu), 1168 NULL , NULL, NULL); 1169 } } 1171  $bt_©t_»gi¡” ( bt_©t * ©t , ušt8_t Ýcode , 1172 bt_©t_nÙify_func_t ÿÎback , 1173 * u£r_d©a , 1174 bt_©t_de¡roy_func_t de¡roy ) 1176  ©t_nÙify * nÙify ; 1178 ià(! ©t || ! ÿÎback || !©t-> io ) 1181 nÙify = `Ãw0 ( ©t_nÙify , 1); 1182 ià(! nÙify ) 1185 nÙify -> Ýcode = opcode; 1186 nÙify -> ÿÎback = callback; 1187 nÙify -> de¡roy = destroy; 1188 nÙify -> u£r_d©a = user_data; 1190 ià( ©t -> Ãxt_»g_id < 1) 1191 ©t -> Ãxt_»g_id = 1; 1193 nÙify -> id = ©t -> Ãxt_»g_id ++; 1195 ià(! `queue_push_ž ( ©t -> nÙify_li¡ , nÙify )) { 1196 `ä“ ( nÙify ); 1200  nÙify -> id ; 1201 } } 1203 boÞ $bt_©t_uÄegi¡” ( bt_©t * ©t ,  id ) 1205  ©t_nÙify * nÙify ; 1207 ià(! ©t || ! id ) 1208  çl£ ; 1210 nÙify = `queue_»move_if ( ©t -> nÙify_li¡ , m©ch_nÙify_id , 1211 `UINT_TO_PTR ( id )); 1212 ià(! nÙify ) 1213  çl£ ; 1215 `de¡roy_©t_nÙify ( nÙify ); 1216  Œue ; 1217 } } 1219 boÞ $bt_©t_uÄegi¡”_®l ( bt_©t * ©t ) 1221 ià(! ©t ) 1222  çl£ ; 1224 `queue_»move_®l ( ©t -> nÙify_li¡ , NULL , NULL, de¡roy_©t_nÙify ); 1225 `queue_»move_®l ( ©t -> discÚn_li¡ , NULL , NULL, de¡roy_©t_discÚn ); 1227  Œue ; 1228 } } @src/shared/att.h 24  ~<¡dboÞ.h > 25  ~<¡dšt.h > 27  ~"¤c/sh¬ed/©t-ty³s.h " 29  gbt_©t ; 31  bt_©t * bt_©t_Ãw ( fd ); 33  bt_©t * bt_©t_»f (bt_©ˆ* ©t ); 34  bt_©t_uÄef ( bt_©t * ©t ); 36 boÞ bt_©t_£t_þo£_Ú_uÄef ( bt_©t * ©t , boÞ do_þo£ ); 38 (* tbt_©t_»¥Ú£_func_t )( tušt8_t tÝcode , cÚ¡ * tpdu , 39 tušt16_t tËngth , * tu£r_d©a ); 40 (* tbt_©t_nÙify_func_t )( tušt8_t tÝcode , cÚ¡ * tpdu , 41 tušt16_t tËngth , * tu£r_d©a ); 42 (* tbt_©t_de¡roy_func_t )(* tu£r_d©a ); 43 (* tbt_©t_debug_func_t )(cÚ¡ * t¡r , * tu£r_d©a ); 44 (* tbt_©t_timeout_func_t )( tid , tušt8_t tÝcode , 45 * tu£r_d©a ); 46 (* tbt_©t_discÚÃù_func_t )( t”r , * tu£r_d©a ); 48 boÞ `bt_©t_£t_debug ( bt_©t * ©t , bt_©t_debug_func_t ÿÎback , 49 * u£r_d©a , bt_©t_de¡roy_func_t de¡roy ); 51 ušt16_t `bt_©t_g‘_mtu ( bt_©t * ©t ); 52 boÞ `bt_©t_£t_mtu ( bt_©t * ©t , ušt16_t mtu ); 54 boÞ `bt_©t_£t_timeout_cb ( bt_©t * ©t , bt_©t_timeout_func_t ÿÎback , 55 * u£r_d©a , 56 bt_©t_de¡roy_func_t de¡roy ); 58  `bt_©t_£nd ( bt_©t * ©t , ušt8_t Ýcode , 59 cÚ¡ * pdu , ušt16_t Ëngth , 60 bt_©t_»¥Ú£_func_t ÿÎback , 61 * u£r_d©a , 62 bt_©t_de¡roy_func_t de¡roy ); 63 boÞ `bt_©t_ÿnûl ( bt_©t * ©t ,  id ); 64 boÞ `bt_©t_ÿnûl_®l ( bt_©t * ©t ); 66  `bt_©t_£nd_”rÜ_r¥ ( bt_©t * ©t , ušt8_t Ýcode , 67 ušt16_t hªdË ,  ”rÜ ); 69  `bt_©t_»gi¡” ( bt_©t * ©t , ušt8_t Ýcode , 70 bt_©t_nÙify_func_t ÿÎback , 71 * u£r_d©a , 72 bt_©t_de¡roy_func_t de¡roy ); 73 boÞ `bt_©t_uÄegi¡” ( bt_©t * ©t ,  id ); 75  `bt_©t_»gi¡”_discÚÃù ( bt_©t * ©t , 76 bt_©t_discÚÃù_func_t ÿÎback , 77 * u£r_d©a , 78 bt_©t_de¡roy_func_t de¡roy ); 79 boÞ `bt_©t_uÄegi¡”_discÚÃù ( bt_©t * ©t ,  id ); 81 boÞ `bt_©t_uÄegi¡”_®l ( bt_©t * ©t ); @src/shared/btsnoop.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<’dŸn.h > 29  ~ 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 33  ~<¬·/š‘.h > 34  ~ 36  ~"¤c/sh¬ed/bt¢oÝ.h " 38  sbt¢oÝ_hdr { 39 ušt8_t mid [8]; 40 ušt32_t mv”siÚ ; 41 ušt32_t mty³ ; 42 } __©Œibu‹__ (( ·cked )); 43  #BTSNOOP_HDR_SIZE (( bt¢oÝ_hdr )) ) 45  sbt¢oÝ_pkt { 46 ušt32_t msize ; 47 ušt32_t mËn ; 48 ušt32_t mæags ; 49 ušt32_t mdrÝs ; 50 ušt64_t mts ; 51 ušt8_t md©a [0]; 52 } __©Œibu‹__ (( ·cked )); 53  #BTSNOOP_PKT_SIZE (( bt¢oÝ_pkt )) ) 55 cÚ¡ ušt8_t gbt¢oÝ_id [] = { 0x62, 0x74, 0x73, 0x6e, 58 cÚ¡ ušt32_t gbt¢oÝ_v”siÚ = 1; 60  spklg_pkt { 61 ušt32_t mËn ; 62 ušt64_t mts ; 63 ušt8_t mty³ ; 64 } __©Œibu‹__ (( ·cked )); 65  #PKLG_PKT_SIZE (( pklg_pkt )) ) 67  sbt¢oÝ { 68  m»f_couÁ ; 69  mfd ; 70  mæags ; 71 ušt32_t mty³ ; 72 ušt16_t mšdex ; 73 boÞ mabÜ‹d ; 74 boÞ mpklg_fÜm© ; 77  bt¢oÝ * $bt¢oÝ_Ý’ (cÚ¡ * ·th ,  æags ) 79  bt¢oÝ *btsnoop; 80  bt¢oÝ_hdr hdr ; 81 ssize_t Ën ; 83 bt¢oÝ = `ÿÎoc (1, (*btsnoop)); 84 ià(! bt¢oÝ ) 85  NULL ; 87 bt¢oÝ -> fd = `Ý’ ( ·th , O_RDONLY | O_CLOEXEC ); 88 ià( bt¢oÝ -> fd < 0) { 89 `ä“ ( bt¢oÝ ); 90  NULL ; 93 bt¢oÝ -> æags = flags; 95 Ën = `»ad ( bt¢oÝ -> fd , & hdr , BTSNOOP_HDR_SIZE ); 96 ià( Ën < 0 ||†’ !ð BTSNOOP_HDR_SIZE ) 97  çžed ; 99 ià(! `memcmp ( hdr . id , bt¢oÝ_id , (btsnoop_id))) { 101 ià( `be32toh ( hdr . v”siÚ è!ð bt¢oÝ_v”siÚ ) 102  çžed ; 104 bt¢oÝ -> ty³ = `be32toh ( hdr .type); 105 bt¢oÝ -> šdex = 0xffff; 107 ià(!( bt¢oÝ -> æags & BTSNOOP_FLAG_PKLG_SUPPORT )) 108  çžed ; 111 ià( hdr . id [0] != 0x00 || hdr.id[1] != 0x00) 112  çžed ; 114 bt¢oÝ -> ty³ = BTSNOOP_TYPE_MONITOR ; 115 bt¢oÝ -> šdex = 0xffff; 116 bt¢oÝ -> pklg_fÜm© = Œue ; 119 `l£ek ( bt¢oÝ -> fd , 0, SEEK_SET ); 122  `bt¢oÝ_»f ( bt¢oÝ ); 124 çžed : 125 `þo£ ( bt¢oÝ -> fd ); 126 `ä“ ( bt¢oÝ ); 128  NULL ; 129 } } 131  bt¢oÝ * $bt¢oÝ_ü—‹ (cÚ¡ * ·th , ušt32_t ty³ ) 133  bt¢oÝ *btsnoop; 134  bt¢oÝ_hdr hdr ; 135 ssize_t wr™‹n ; 137 bt¢oÝ = `ÿÎoc (1, (*btsnoop)); 138 ià(! bt¢oÝ ) 139  NULL ; 141 bt¢oÝ -> fd = `Ý’ ( ·th , O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC , 142 S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ); 143 ià( bt¢oÝ -> fd < 0) { 144 `ä“ ( bt¢oÝ ); 145  NULL ; 148 bt¢oÝ -> ty³ =ype; 149 bt¢oÝ -> šdex = 0xffff; 151 `memýy ( hdr . id , bt¢oÝ_id , (btsnoop_id)); 152 hdr . v”siÚ = `htobe32 ( bt¢oÝ_v”siÚ ); 153 hdr . ty³ = `htobe32 ( bt¢oÝ ->type); 155 wr™‹n = `wr™e ( bt¢oÝ -> fd , & hdr , BTSNOOP_HDR_SIZE ); 156 ià( wr™‹n < 0) { 157 `þo£ ( bt¢oÝ -> fd ); 158 `ä“ ( bt¢oÝ ); 159  NULL ; 162  `bt¢oÝ_»f ( bt¢oÝ ); 163 } } 165  bt¢oÝ * $bt¢oÝ_»f ( bt¢oÝ *btsnoop) 167 ià(! bt¢oÝ ) 168  NULL ; 170 `__sync_ãtch_ªd_add (& bt¢oÝ -> »f_couÁ , 1); 172  bt¢oÝ ; 173 } } 175  $bt¢oÝ_uÄef ( bt¢oÝ *btsnoop) 177 ià(! bt¢oÝ ) 180 ià( `__sync_sub_ªd_ãtch (& bt¢oÝ -> »f_couÁ , 1)) 183 ià( bt¢oÝ -> fd >= 0) 184 `þo£ ( bt¢oÝ -> fd ); 186 `ä“ ( bt¢oÝ ); 187 } } 189 ušt32_t $bt¢oÝ_g‘_ty³ ( bt¢oÝ *btsnoop) 191 ià(! bt¢oÝ ) 192  BTSNOOP_TYPE_INVALID ; 194  bt¢oÝ -> ty³ ; 195 } } 197 boÞ $bt¢oÝ_wr™e ( bt¢oÝ *bt¢oÝ,  timev® * tv , 198 ušt32_t æags , cÚ¡ * d©a , ušt16_t size ) 200  bt¢oÝ_pkt pkt ; 201 ušt64_t ts ; 202 ssize_t wr™‹n ; 204 ià(! bt¢oÝ || ! tv ) 205  çl£ ; 207 ts = ( tv -> tv_£c - 946684800Îè* 1000000Î +v-> tv_u£c ; 209 pkt . size = `htobe32 (size); 210 pkt . Ën = `htobe32 ( size ); 211 pkt . æags = `htobe32 (flags); 212 pkt . drÝs = `htobe32 (0); 213 pkt . ts = `htobe64 (ts + 0x00E03AB44A676000ll); 215 wr™‹n = `wr™e ( bt¢oÝ -> fd , & pkt , BTSNOOP_PKT_SIZE ); 216 ià( wr™‹n < 0) 217  çl£ ; 219 ià( d©a && size > 0) { 220 wr™‹n = `wr™e ( bt¢oÝ -> fd , d©a , size ); 221 ià( wr™‹n < 0) 222  çl£ ; 225  Œue ; 226 } } 228  ušt32_t $g‘_æags_äom_Ýcode ( ušt16_t Ýcode ) 230  Ýcode ) { 231  BTSNOOP_OPCODE_NEW_INDEX : 232  BTSNOOP_OPCODE_DEL_INDEX : 234  BTSNOOP_OPCODE_COMMAND_PKT : 236  BTSNOOP_OPCODE_EVENT_PKT : 238  BTSNOOP_OPCODE_ACL_TX_PKT : 240  BTSNOOP_OPCODE_ACL_RX_PKT : 242  BTSNOOP_OPCODE_SCO_TX_PKT : 243  BTSNOOP_OPCODE_SCO_RX_PKT : 248 } } 250 boÞ $bt¢oÝ_wr™e_hci ( bt¢oÝ *bt¢oÝ,  timev® * tv , 251 ušt16_t šdex , ušt16_ˆ Ýcode , 252 cÚ¡ * d©a , ušt16_t size ) 254 ušt32_t æags ; 256 ià(! bt¢oÝ ) 257  çl£ ; 259  bt¢oÝ -> ty³ ) { 260  BTSNOOP_TYPE_HCI : 261 ià( bt¢oÝ -> šdex == 0xffff) 262 bt¢oÝ -> šdex = index; 264 ià( šdex !ð bt¢oÝ ->index) 265  çl£ ; 267 æags = `g‘_æags_äom_Ýcode ( Ýcode ); 268 ià( æags == 0xff) 269  çl£ ; 272  BTSNOOP_TYPE_MONITOR : 273 æags = ( šdex << 16è| Ýcode ; 277  çl£ ; 280  `bt¢oÝ_wr™e ( bt¢oÝ , tv , æags , d©a , size ); 281 } } 283 boÞ $bt¢oÝ_wr™e_phy ( bt¢oÝ *bt¢oÝ,  timev® * tv , 284 ušt16_t äequ’cy , cÚ¡ * d©a , ušt16_ˆ size ) 286 ušt32_t æags ; 288 ià(! bt¢oÝ ) 289  çl£ ; 291  bt¢oÝ -> ty³ ) { 292  BTSNOOP_TYPE_SIMULATOR : 293 æags = (1 << 16è| äequ’cy ; 297  çl£ ; 300  `bt¢oÝ_wr™e ( bt¢oÝ , tv , æags , d©a , size ); 301 } } 303  ušt16_t $g‘_Ýcode_äom_pklg ( ušt8_t ty³ ) 305  ty³ ) { 307  BTSNOOP_OPCODE_COMMAND_PKT ; 309  BTSNOOP_OPCODE_EVENT_PKT ; 311  BTSNOOP_OPCODE_ACL_TX_PKT ; 313  BTSNOOP_OPCODE_ACL_RX_PKT ; 317 } } 319  boÞ $pklg_»ad_hci ( bt¢oÝ *bt¢oÝ,  timev® * tv , 320 ušt16_t * šdex , ušt16_ˆ* Ýcode , 321 * d©a , ušt16_t * size ) 323  pklg_pkt pkt ; 324 ušt32_t tÜ—d ; 325 ušt64_t ts ; 326 ssize_t Ën ; 328 Ën = `»ad ( bt¢oÝ -> fd , & pkt , PKLG_PKT_SIZE ); 329 ià( Ën == 0) 330  çl£ ; 332 ià( Ën < 0 ||†’ !ð PKLG_PKT_SIZE ) { 333 bt¢oÝ -> abÜ‹d = Œue ; 334  çl£ ; 337 tÜ—d = `be32toh ( pkt . Ën ) - 9; 339 ts = `be64toh ( pkt .ts); 340 tv -> tv_£c = ts >> 32; 341 tv -> tv_u£c = ts & 0xffffffff; 343 * šdex = 0; 344 * Ýcode = `g‘_Ýcode_äom_pklg ( pkt . ty³ ); 346 Ën = `»ad ( bt¢oÝ -> fd , d©a , tÜ—d ); 347 ià( Ën < 0) { 348 bt¢oÝ -> abÜ‹d = Œue ; 349  çl£ ; 352 * size = tÜ—d ; 354  Œue ; 355 } } 357  ušt16_t $g‘_Ýcode_äom_æags ( ušt8_t ty³ , ušt32_t æags ) 359  ty³ ) { 361  BTSNOOP_OPCODE_COMMAND_PKT ; 363 ià( æags & 0x01) 364  BTSNOOP_OPCODE_ACL_RX_PKT ; 366  BTSNOOP_OPCODE_ACL_TX_PKT ; 368 ià( æags & 0x01) 369  BTSNOOP_OPCODE_SCO_RX_PKT ; 371  BTSNOOP_OPCODE_SCO_TX_PKT ; 373  BTSNOOP_OPCODE_EVENT_PKT ; 375 ià( æags & 0x02) { 376 ià( æags & 0x01) 377  BTSNOOP_OPCODE_EVENT_PKT ; 379  BTSNOOP_OPCODE_COMMAND_PKT ; 381 ià( æags & 0x01) 382  BTSNOOP_OPCODE_ACL_RX_PKT ; 384  BTSNOOP_OPCODE_ACL_TX_PKT ; 390 } } 392 boÞ $bt¢oÝ_»ad_hci ( bt¢oÝ *bt¢oÝ,  timev® * tv , 393 ušt16_t * šdex , ušt16_ˆ* Ýcode , 394 * d©a , ušt16_t * size ) 396  bt¢oÝ_pkt pkt ; 397 ušt32_t tÜ—d , æags ; 398 ušt64_t ts ; 399 ušt8_t pkt_ty³ ; 400 ssize_t Ën ; 402 ià(! bt¢oÝ || bt¢oÝ-> abÜ‹d ) 403  çl£ ; 405 ià( bt¢oÝ -> pklg_fÜm© ) 406  `pklg_»ad_hci ( bt¢oÝ , tv , šdex , Ýcode , d©a , size ); 408 Ën = `»ad ( bt¢oÝ -> fd , & pkt , BTSNOOP_PKT_SIZE ); 409 ià( Ën == 0) 410  çl£ ; 412 ià( Ën < 0 ||†’ !ð BTSNOOP_PKT_SIZE ) { 413 bt¢oÝ -> abÜ‹d = Œue ; 414  çl£ ; 417 tÜ—d = `be32toh ( pkt . size ); 418 ià( tÜ—d > BTSNOOP_MAX_PACKET_SIZE ) { 419 bt¢oÝ -> abÜ‹d = Œue ; 420  çl£ ; 423 æags = `be32toh ( pkt .flags); 425 ts = `be64toh ( pkt .ts) - 0x00E03AB44A676000ll; 426 tv -> tv_£c = ( ts / 1000000ll) + 946684800ll; 427 tv -> tv_u£c = ts % 1000000ll; 429  bt¢oÝ -> ty³ ) { 430  BTSNOOP_TYPE_HCI : 431 * šdex = 0; 432 * Ýcode = `g‘_Ýcode_äom_æags (0xff, æags ); 435  BTSNOOP_TYPE_UART : 436 Ën = `»ad ( bt¢oÝ -> fd , & pkt_ty³ , 1); 437 ià( Ën < 0) { 438 bt¢oÝ -> abÜ‹d = Œue ; 439  çl£ ; 441 tÜ—d --; 443 * šdex = 0; 444 * Ýcode = `g‘_Ýcode_äom_æags ( pkt_ty³ , æags ); 447  BTSNOOP_TYPE_MONITOR : 448 * šdex = æags >> 16; 449 * Ýcode = æags & 0xffff; 453 bt¢oÝ -> abÜ‹d = Œue ; 454  çl£ ; 457 Ën = `»ad ( bt¢oÝ -> fd , d©a , tÜ—d ); 458 ià( Ën < 0) { 459 bt¢oÝ -> abÜ‹d = Œue ; 460  çl£ ; 463 * size = tÜ—d ; 465  Œue ; 466 } } 468 boÞ $bt¢oÝ_»ad_phy ( bt¢oÝ *bt¢oÝ,  timev® * tv , 469 ušt16_t * äequ’cy , * d©a , ušt16_ˆ* size ) 471  çl£ ; 472 } } @src/shared/btsnoop.h 24  ~<¡dšt.h > 25  ~<¡dboÞ.h > 26  ~ 28  #BTSNOOP_TYPE_INVALID 0 ) 29  #BTSNOOP_TYPE_HCI 1001 ) 30  #BTSNOOP_TYPE_UART 1002 ) 31  #BTSNOOP_TYPE_BCSP 1003 ) 32  #BTSNOOP_TYPE_3WIRE 1004 ) 33  #BTSNOOP_TYPE_MONITOR 2001 ) 34  #BTSNOOP_TYPE_SIMULATOR 2002 ) 36  #BTSNOOP_FLAG_PKLG_SUPPORT (1 << 0) ) 38  #BTSNOOP_OPCODE_NEW_INDEX 0 ) 39  #BTSNOOP_OPCODE_DEL_INDEX 1 ) 40  #BTSNOOP_OPCODE_COMMAND_PKT 2 ) 41  #BTSNOOP_OPCODE_EVENT_PKT 3 ) 42  #BTSNOOP_OPCODE_ACL_TX_PKT 4 ) 43  #BTSNOOP_OPCODE_ACL_RX_PKT 5 ) 44  #BTSNOOP_OPCODE_SCO_TX_PKT 6 ) 45  #BTSNOOP_OPCODE_SCO_RX_PKT 7 ) 47  #BTSNOOP_MAX_PACKET_SIZE (1486 + 4) ) 49  sbt¢oÝ_Ýcode_Ãw_šdex { 50 ušt8_t mty³ ; 51 ušt8_t mbus ; 52 ušt8_t mbdaddr [6]; 53  mÇme [8]; 54 } __©Œibu‹__ (( ·cked )); 56  gbt¢oÝ ; 58  bt¢oÝ * bt¢oÝ_Ý’ (cÚ¡ * ·th ,  æags ); 59  bt¢oÝ * bt¢oÝ_ü—‹ (cÚ¡ * ·th , ušt32_t ty³ ); 61  bt¢oÝ * bt¢oÝ_»f (btsnoop *btsnoop); 62  bt¢oÝ_uÄef ( bt¢oÝ *btsnoop); 64 ušt32_t bt¢oÝ_g‘_ty³ ( bt¢oÝ *btsnoop); 66 boÞ bt¢oÝ_wr™e ( bt¢oÝ *bt¢oÝ,  timev® * tv , 67 ušt32_t æags , cÚ¡ * d©a , ušt16_t size ); 68 boÞ bt¢oÝ_wr™e_hci ( bt¢oÝ *bt¢oÝ,  timev® * tv , 69 ušt16_t šdex , ušt16_ˆ Ýcode , 70 cÚ¡ * d©a , ušt16_t size ); 71 boÞ bt¢oÝ_wr™e_phy ( bt¢oÝ *bt¢oÝ,  timev® * tv , 72 ušt16_t äequ’cy , cÚ¡ * d©a , ušt16_ˆ size ); 74 boÞ bt¢oÝ_»ad_hci ( bt¢oÝ *bt¢oÝ,  timev® * tv , 75 ušt16_t * šdex , ušt16_ˆ* Ýcode , 76 * d©a , ušt16_t * size ); 77 boÞ bt¢oÝ_»ad_phy ( bt¢oÝ *bt¢oÝ,  timev® * tv , 78 ušt16_t * äequ’cy , * d©a , ušt16_ˆ* size ); @src/shared/crypto.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~ 30  ~<¡ršg.h > 31  ~ 33  ~"¤c/sh¬ed/utž.h " 34  ~"¤c/sh¬ed/üy±o.h " 36 #iâdeà PF_ALG 37  ~ 39  ssockaddr_®g { 40 __u16 m§lg_çmžy ; 41 __u8 m§lg_ty³ [14]; 42 __u32 m§lg_ã© ; 43 __u32 m§lg_mask ; 44 __u8 m§lg_Çme [64]; 47  saf_®g_iv { 48 __u32 mivËn ; 49 __u8 miv [0]; 52  #ALG_SET_KEY 1 ) 53  #ALG_SET_IV 2 ) 54  #ALG_SET_OP 3 ) 56  #ALG_OP_DECRYPT 0 ) 57  #ALG_OP_ENCRYPT 1 ) 59  #PF_ALG 38 ) 60  #AF_ALG PF_ALG ) 62  ~ 65 #iâdeà SOL_ALG 66  #SOL_ALG 279 ) 70  #CMAC_MSG_MAX 80 ) 72  sbt_üy±o { 73  m»f_couÁ ; 74  mecb_«s ; 75  mu¿ndom ; 76  mcmac_«s ; 79  $u¿ndom_£tup () 81  fd ; 83 fd = `Ý’ ("/dev/u¿ndom", O_RDONLY ); 84 ià( fd < 0) 87  fd ; 88 } } 90  $ecb_«s_£tup () 92  sockaddr_®g §lg ; 93  fd ; 95 fd = `sock‘ ( PF_ALG , SOCK_SEQPACKET | SOCK_CLOEXEC , 0); 96 ià( fd < 0) 99 `mem£t (& §lg , 0, (salg)); 100 §lg . §lg_çmžy = AF_ALG ; 101 `¡rýy ((*è §lg . §lg_ty³ , "skcipher"); 102 `¡rýy ((*è §lg . §lg_Çme , "ecb(aes)"); 104 ià( `bšd ( fd , ( sockaddr *è& §lg , (salg)) < 0) { 105 `þo£ ( fd ); 109  fd ; 110 } } 112  $cmac_«s_£tup () 114  sockaddr_®g §lg ; 115  fd ; 117 fd = `sock‘ ( PF_ALG , SOCK_SEQPACKET | SOCK_CLOEXEC , 0); 118 ià( fd < 0) 121 `mem£t (& §lg , 0, (salg)); 122 §lg . §lg_çmžy = AF_ALG ; 123 `¡rýy ((*è §lg . §lg_ty³ , "hash"); 124 `¡rýy ((*è §lg . §lg_Çme , "cmac(aes)"); 126 ià( `bšd ( fd , ( sockaddr *è& §lg , (salg)) < 0) { 127 `þo£ ( fd ); 131  fd ; 132 } } 134  bt_üy±o * $bt_üy±o_Ãw () 136  bt_üy±o * üy±o ; 138 üy±o = `Ãw0 ( bt_üy±o , 1); 139 ià(! üy±o ) 140  NULL ; 142 üy±o -> ecb_«s = `ecb_«s_£tup (); 143 ià( üy±o -> ecb_«s < 0) { 144 `ä“ ( üy±o ); 145  NULL ; 148 üy±o -> u¿ndom = `u¿ndom_£tup (); 149 ià( üy±o -> u¿ndom < 0) { 150 `þo£ ( üy±o -> ecb_«s ); 151 `ä“ ( üy±o ); 152  NULL ; 155 üy±o -> cmac_«s = `cmac_«s_£tup (); 156 ià( üy±o -> cmac_«s < 0) { 157 `þo£ ( üy±o -> u¿ndom ); 158 `þo£ ( üy±o -> ecb_«s ); 159 `ä“ ( üy±o ); 160  NULL ; 163  `bt_üy±o_»f ( üy±o ); 164 } } 166  bt_üy±o * $bt_üy±o_»f ( bt_üy±o * üy±o ) 168 ià(! üy±o ) 169  NULL ; 171 `__sync_ãtch_ªd_add (& üy±o -> »f_couÁ , 1); 173  üy±o ; 174 } } 176  $bt_üy±o_uÄef ( bt_üy±o * üy±o ) 178 ià(! üy±o ) 181 ià( `__sync_sub_ªd_ãtch (& üy±o -> »f_couÁ , 1)) 184 `þo£ ( üy±o -> u¿ndom ); 185 `þo£ ( üy±o -> ecb_«s ); 186 `þo£ ( üy±o -> cmac_«s ); 188 `ä“ ( üy±o ); 189 } } 191 boÞ $bt_üy±o_¿ndom_by‹s ( bt_üy±o * üy±o , 192 ušt8_t * buf , ušt8_ˆ num_by‹s ) 194 ssize_t Ën ; 196 ià(! üy±o ) 197  çl£ ; 199 Ën = `»ad ( üy±o -> u¿ndom , buf , num_by‹s ); 200 ià( Ën < num_by‹s ) 201  çl£ ; 203  Œue ; 204 } } 206  $®g_Ãw ( fd , cÚ¡ * keyv® , sockËn_t keyËn ) 208 ià( `£tsockÝt ( fd , SOL_ALG , ALG_SET_KEY , keyv® , keyËn ) < 0) 212  `acû± ( fd , NULL , 0); 213 } } 215  boÞ $®g_’üy± ( fd , cÚ¡ * šbuf , size_t šËn , 216 * outbuf , size_t ouŽ’ ) 218 __u32 ®g_Ý = ALG_OP_ENCRYPT ; 219  cbuf [ `CMSG_SPACE (( ®g_Ý ))]; 220  cmsghdr * cmsg ; 221  msghdr msg ; 222  iovec iov ; 223 ssize_t Ën ; 225 `mem£t ( cbuf , 0, (cbuf)); 226 `mem£t (& msg , 0, (msg)); 228 msg . msg_cÚŒÞ = cbuf ; 229 msg . msg_cÚŒÞËn = ( cbuf ); 231 cmsg = `CMSG_FIRSTHDR (& msg ); 232 cmsg -> cmsg_Ëv– = SOL_ALG ; 233 cmsg -> cmsg_ty³ = ALG_SET_OP ; 234 cmsg -> cmsg_Ën = `CMSG_LEN (( ®g_Ý )); 235 `memýy ( `CMSG_DATA ( cmsg ), & ®g_Ý , (alg_op)); 237 iov . iov_ba£ = (*è šbuf ; 238 iov . iov_Ën = šËn ; 240 msg . msg_iov = & iov ; 241 msg . msg_iovËn = 1; 243 Ën = `£ndmsg ( fd , & msg , 0); 244 ià( Ën < 0) 245  çl£ ; 247 Ën = `»ad ( fd , outbuf , ouŽ’ ); 248 ià( Ën < 0) 249  çl£ ; 251  Œue ; 252 } } 254  šlše  $sw­_buf (cÚ¡ ušt8_t * ¤c , ušt8_ˆ* d¡ , ušt16_t Ën ) 256  i ; 258  i = 0; i < Ën ; i++) 259 d¡ [ Ën - 1 - i ] = ¤c [i]; 260 } } 262 boÞ $bt_üy±o_sign_©t ( bt_üy±o * üy±o , cÚ¡ ušt8_t key [16], 263 cÚ¡ ušt8_t * m , ušt16_t m_Ën , 264 ušt32_t sign_út , ušt8_t sigÇtu» [12]) 266  fd ; 267  Ën ; 268 ušt8_t tmp [16], out [16]; 269 ušt16_t msg_Ën = m_Ën + ( ušt32_t ); 270 ušt8_t msg [ msg_Ën ]; 271 ušt8_t msg_s [ msg_Ën ]; 273 ià(! üy±o ) 274  çl£ ; 276 `mem£t ( msg , 0, msg_Ën ); 277 `memýy ( msg , m , m_Ën ); 280 `put_Ë32 ( sign_út , msg + m_Ën ); 283 `sw­_buf ( key , tmp , 16); 285 fd = `®g_Ãw ( üy±o -> cmac_«s , tmp , 16); 286 ià( fd < 0) 287  çl£ ; 290 `sw­_buf ( msg , msg_s , msg_Ën ); 292 Ën = `£nd ( fd , msg_s , msg_Ën , 0); 293 ià( Ën < 0) { 294 `þo£ ( fd ); 295  çl£ ; 298 Ën = `»ad ( fd , out , 16); 299 ià( Ën < 0) { 300 `þo£ ( fd ); 301  çl£ ; 304 `þo£ ( fd ); 310 `put_be32 ( sign_út , out + 8); 317 `sw­_buf ( out , tmp , 16); 318 `memýy ( sigÇtu» , tmp + 4, 12); 320  Œue ; 321 } } 335 boÞ $bt_üy±o_e ( bt_üy±o * üy±o , cÚ¡ ušt8_t key [16], 336 cÚ¡ ušt8_t ¶aš‹xt [16], ušt8_ˆ ’üy±ed [16]) 338 ušt8_t tmp [16], š [16], out [16]; 339  fd ; 341 ià(! üy±o ) 342  çl£ ; 345 `sw­_buf ( key , tmp , 16); 347 fd = `®g_Ãw ( üy±o -> ecb_«s , tmp , 16); 348 ià( fd < 0) 349  çl£ ; 353 `sw­_buf ( ¶aš‹xt , š , 16); 355 ià(! `®g_’üy± ( fd , š , 16, out , 16)) { 356 `þo£ ( fd ); 357  çl£ ; 361 `sw­_buf ( out , ’üy±ed , 16); 363 `þo£ ( fd ); 365  Œue ; 366 } } 400 boÞ $bt_üy±o_ah ( bt_üy±o * üy±o , cÚ¡ ušt8_t k [16], 401 cÚ¡ ušt8_t r [3], ušt8_ˆ hash [3]) 403 ušt8_t ½ [16]; 404 ušt8_t ’üy±ed [16]; 406 ià(! üy±o ) 407  çl£ ; 410 `memýy ( ½ , r , 3); 411 `mem£t ( ½ + 3, 0, 13); 414 ià(! `bt_üy±o_e ( üy±o , k , ½ , ’üy±ed )) 415  çl£ ; 418 `memýy ( hash , ’üy±ed , 3); 420  Œue ; 421 } } 424 ušt64_t ma , mb ; 425 } tu128 ; 427  šlše  $u128_xÜ (cÚ¡ ušt8_t p [16], cÚ¡ ušt8_ˆ q [16], 428 ušt8_t r [16]) 430 u128 µ , qq , ¼ ; 432 `memýy (& µ , p , 16); 433 `memýy (& qq , q , 16); 435 ¼ . a = µ .¨^ qq .a; 436 ¼ . b = µ .b ^ qq .b; 438 `memýy ( r , & ¼ , 16); 439 } } 493 boÞ $bt_üy±o_c1 ( bt_üy±o * üy±o , cÚ¡ ušt8_t k [16], 494 cÚ¡ ušt8_t r [16], cÚ¡ ušt8_ˆ ´es [7], 495 cÚ¡ ušt8_t ´eq [7], ušt8_ˆ Ÿt , 496 cÚ¡ ušt8_t Ÿ [6], ušt8_ˆ ¿t , 497 cÚ¡ ušt8_t ¿ [6], ušt8_ˆ »s [16]) 499 ušt8_t p1 [16], p2 [16]; 502 p1 [0] = Ÿt ; 503 p1 [1] = ¿t ; 504 `memýy ( p1 + 2, ´eq , 7); 505 `memýy ( p1 + 9, ´es , 7); 508 `memýy ( p2 , ¿ , 6); 509 `memýy ( p2 + 6, Ÿ , 6); 510 `mem£t ( p2 + 12, 0, 4); 513 `u128_xÜ ( r , p1 , »s ); 516 ià(! `bt_üy±o_e ( üy±o , k , »s ,„es)) 517  çl£ ; 520 `u128_xÜ ( »s , p2 ,„es); 523  `bt_üy±o_e ( üy±o , k , »s ,„es); 524 } } 557 boÞ $bt_üy±o_s1 ( bt_üy±o * üy±o , cÚ¡ ušt8_t k [16], 558 cÚ¡ ušt8_t r1 [16], cÚ¡ ušt8_ˆ r2 [16], 559 ušt8_t »s [16]) 561 `memýy ( »s , r2 , 8); 562 `memýy ( »s + 8, r1 , 8); 564  `bt_üy±o_e ( üy±o , k , »s ,„es); 565 } } 567  boÞ $«s_cmac ( bt_üy±o * üy±o , ušt8_t key [16], ušt8_ˆ* msg , 568 size_t msg_Ën , ušt8_t »s [16]) 570 ušt8_t key_msb [16], out [16], msg_msb [ CMAC_MSG_MAX ]; 571 ssize_t Ën ; 572  fd ; 574 ià( msg_Ën > CMAC_MSG_MAX ) 575  çl£ ; 577 `sw­_buf ( key , key_msb , 16); 578 fd = `®g_Ãw ( üy±o -> cmac_«s , key_msb , 16); 579 ià( fd < 0) 580  çl£ ; 582 `sw­_buf ( msg , msg_msb , msg_Ën ); 583 Ën = `£nd ( fd , msg_msb , msg_Ën , 0); 584 ià( Ën < 0) { 585 `þo£ ( fd ); 586  çl£ ; 589 Ën = `»ad ( fd , out , 16); 590 ià( Ën < 0) { 591 `þo£ ( fd ); 592  çl£ ; 595 `sw­_buf ( out , »s , 16); 597 `þo£ ( fd ); 599  Œue ; 600 } } 602 boÞ $bt_üy±o_f4 ( bt_üy±o * üy±o , ušt8_t u [32], ušt8_ˆ v [32], 603 ušt8_t x [16], ušt8_ˆ z , ušt8_ˆ »s [16]) 605 ušt8_t m [65]; 607 ià(! üy±o ) 608  çl£ ; 610 m [0] = z ; 611 `memýy (& m [1], v , 32); 612 `memýy (& m [33], u , 32); 614  `«s_cmac ( üy±o , x , m , (m), »s ); 615 } } 617 boÞ $bt_üy±o_f5 ( bt_üy±o * üy±o , ušt8_t w [32], ušt8_ˆ n1 [16], 618 ušt8_t n2 [16], ušt8_ˆ a1 [7], ušt8_ˆ a2 [7], 619 ušt8_t mackey [16], ušt8_ˆ Ék [16]) 621 ušt8_t bŽe [4] = { 0x65, 0x6c, 0x74, 0x62 }; 622 ušt8_t §É [16] = { 0xbe, 0x83, 0x60, 0x5a, 0xdb, 0x0b, 0x37, 0x60, 624 ušt8_t Ëngth [2] = { 0x00, 0x01 }; 625 ušt8_t m [53], t [16]; 627 ià(! `«s_cmac ( üy±o , §É , w , 32, t )) 628  çl£ ; 630 `memýy (& m [0], Ëngth , 2); 631 `memýy (& m [2], a2 , 7); 632 `memýy (& m [9], a1 , 7); 633 `memýy (& m [16], n2 , 16); 634 `memýy (& m [32], n1 , 16); 635 `memýy (& m [48], bŽe , 4); 637 m [52] = 0; 638 ià(! `«s_cmac ( üy±o , t , m , (m), mackey )) 639  çl£ ; 641 m [52] = 1; 642  `«s_cmac ( üy±o , t , m , (m), Ék ); 643 } } 645 boÞ $bt_üy±o_f6 ( bt_üy±o * üy±o , ušt8_t w [16], ušt8_ˆ n1 [16], 646 ušt8_t n2 [16], ušt8_ˆ r [16], ušt8_ˆ io_ÿp [3], 647 ušt8_t a1 [7], ušt8_ˆ a2 [7], ušt8_ˆ »s [16]) 649 ušt8_t m [65]; 651 `memýy (& m [0], a2 , 7); 652 `memýy (& m [7], a1 , 7); 653 `memýy (& m [14], io_ÿp , 3); 654 `memýy (& m [17], r , 16); 655 `memýy (& m [33], n2 , 16); 656 `memýy (& m [49], n1 , 16); 658  `«s_cmac ( üy±o , w , m , (m), »s ); 659 } } 661 boÞ $bt_üy±o_g2 ( bt_üy±o * üy±o , ušt8_t u [32], ušt8_ˆ v [32], 662 ušt8_t x [16], ušt8_ˆ y [16], ušt32_t * v® ) 664 ušt8_t m [80], tmp [16]; 666 `memýy (& m [0], y , 16); 667 `memýy (& m [16], v , 32); 668 `memýy (& m [48], u , 32); 670 ià(! `«s_cmac ( üy±o , x , m , (m), tmp )) 671  çl£ ; 673 * v® = `g‘_Ë32 ( tmp ); 674 * v® %= 1000000; 676  Œue ; 677 } } @src/shared/crypto.h 24  ~<¡dboÞ.h > 25  ~<¡dšt.h > 27  gbt_üy±o ; 29  bt_üy±o * bt_üy±o_Ãw (); 31  bt_üy±o * bt_üy±o_»f (bt_üy±Ø* üy±o ); 32  bt_üy±o_uÄef ( bt_üy±o * üy±o ); 34 boÞ bt_üy±o_¿ndom_by‹s ( bt_üy±o * üy±o , 35 ušt8_t * buf , ušt8_ˆ num_by‹s ); 37 boÞ bt_üy±o_e ( bt_üy±o * üy±o , cÚ¡ ušt8_t key [16], 38 cÚ¡ ušt8_t ¶aš‹xt [16], ušt8_ˆ ’üy±ed [16]); 39 boÞ bt_üy±o_ah ( bt_üy±o * üy±o , cÚ¡ ušt8_t k [16], 40 cÚ¡ ušt8_t r [3], ušt8_ˆ hash [3]); 41 boÞ bt_üy±o_c1 ( bt_üy±o * üy±o , cÚ¡ ušt8_t k [16], 42 cÚ¡ ušt8_t r [16], cÚ¡ ušt8_ˆ ´es [7], 43 cÚ¡ ušt8_t ´eq [7], ušt8_ˆ Ÿt , 44 cÚ¡ ušt8_t Ÿ [6], ušt8_ˆ ¿t , 45 cÚ¡ ušt8_t ¿ [6], ušt8_ˆ »s [16]); 46 boÞ bt_üy±o_s1 ( bt_üy±o * üy±o , cÚ¡ ušt8_t k [16], 47 cÚ¡ ušt8_t r1 [16], cÚ¡ ušt8_ˆ r2 [16], 48 ušt8_t »s [16]); 49 boÞ bt_üy±o_f4 ( bt_üy±o * üy±o , ušt8_t u [32], ušt8_ˆ v [32], 50 ušt8_t x [16], ušt8_ˆ z , ušt8_ˆ »s [16]); 51 boÞ bt_üy±o_f5 ( bt_üy±o * üy±o , ušt8_t w [32], ušt8_ˆ n1 [16], 52 ušt8_t n2 [16], ušt8_ˆ a1 [7], ušt8_ˆ a2 [7], 53 ušt8_t mackey [16], ušt8_ˆ Ék [16]); 54 boÞ bt_üy±o_f6 ( bt_üy±o * üy±o , ušt8_t w [16], ušt8_ˆ n1 [16], 55 ušt8_t n2 [16], ušt8_ˆ r [16], ušt8_ˆ io_ÿp [3], 56 ušt8_t a1 [7], ušt8_ˆ a2 [7], ušt8_ˆ »s [16]); 57 boÞ bt_üy±o_g2 ( bt_üy±o * üy±o , ušt8_t u [32], ušt8_ˆ v [32], 58 ušt8_t x [16], ušt8_ˆ y [16], ušt32_t * v® ); 59 boÞ bt_üy±o_sign_©t ( bt_üy±o * üy±o , cÚ¡ ušt8_t key [16], 60 cÚ¡ ušt8_t * m , ušt16_t m_Ën , 61 ušt32_t sign_út , ušt8_t sigÇtu» [12]); @src/shared/ecc.c 27  ~ 28  ~ 29  ~ 30  ~<¡ršg.h > 32  ~"ecc.h " 35  #ECC_BYTES 32 ) 38  #NUM_ECC_DIGITS ( ECC_BYTES / 8) ) 40  secc_pošt { 41 ušt64_t mx [ NUM_ECC_DIGITS ]; 42 ušt64_t my [ NUM_ECC_DIGITS ]; 45  #MAX_TRIES 16 ) 48 ušt64_t mm_low ; 49 ušt64_t mm_high ; 50 } tušt128_t ; 52  #CURVE_P_32 { 0xFFFFFFFFFFFFFFFFull, 0x00000000FFFFFFFFull, \ 53 0x0000000000000000uÎ, 0xFFFFFFFF00000001uÎ } ) 55  #CURVE_G_32 { \ 60 } ) 62  #CURVE_N_32 { 0xF3B9CAC2FC632551ull, 0xBCE6FAADA7179E84ull, \ 63 0xFFFFFFFFFFFFFFFFuÎ, 0xFFFFFFFF00000000uÎ } ) 65  ušt64_t gcurve_p [ NUM_ECC_DIGITS ] = CURVE_P_32 ; 66  ecc_pošt gcurve_g = CURVE_G_32 ; 67  ušt64_t gcurve_n [ NUM_ECC_DIGITS ] = CURVE_N_32 ; 69  boÞ $g‘_¿ndom_numb” ( ušt64_t * vli ) 71 * ±r = (*è vli ; 72 size_t Ëá = ECC_BYTES ; 73  fd ; 75 fd = `Ý’ ("/dev/u¿ndom", O_RDONLY | O_CLOEXEC ); 76 ià( fd < 0) { 77 fd = `Ý’ ("/dev/¿ndom", O_RDONLY | O_CLOEXEC ); 78 ià( fd < 0) 79  çl£ ; 82  Ëá > 0) { 83 ssize_t »t ; 85 »t = `»ad ( fd , ±r , Ëá ); 86 ià( »t <= 0) { 87 `þo£ ( fd ); 88  çl£ ; 91 Ëá -ð »t ; 92 ±r +ð »t ; 95 `þo£ ( fd ); 97  Œue ; 98 } } 100  $vli_þ—r ( ušt64_t * vli ) 102  i ; 104  i = 0; i < NUM_ECC_DIGITS ; i++) 105 vli [ i ] = 0; 106 } } 109  boÞ $vli_is_z”o (cÚ¡ ušt64_t * vli ) 111  i ; 113  i = 0; i < NUM_ECC_DIGITS ; i++) { 114 ià( vli [ i ]) 115  çl£ ; 118  Œue ; 119 } } 122  ušt64_t $vli_‹¡_b™ (cÚ¡ ušt64_t * vli ,  b™ ) 124  ( vli [ b™ / 64] & (( ušt64_t ) 1 << (bit % 64))); 125 } } 128  $vli_num_dig™s (cÚ¡ ušt64_t * vli ) 130  i ; 136  i = NUM_ECC_DIGITS - 1; i >ð0 && vli [i] == 0; i--); 138  ( i + 1); 139 } } 142  $vli_num_b™s (cÚ¡ ušt64_t * vli ) 144  i , num_dig™s ; 145 ušt64_t dig™ ; 147 num_dig™s = `vli_num_dig™s ( vli ); 148 ià( num_dig™s == 0) 151 dig™ = vli [ num_dig™s - 1]; 152  i = 0; dig™ ; i++) 153 dig™ >>= 1; 155  (( num_dig™s - 1è* 64 + i ); 156 } } 159  $vli_£t ( ušt64_t * de¡ , cÚ¡ ušt64_ˆ* ¤c ) 161  i ; 163  i = 0; i < NUM_ECC_DIGITS ; i++) 164 de¡ [ i ] = ¤c [i]; 165 } } 168  $vli_cmp (cÚ¡ ušt64_t * Ëá , cÚ¡ ušt64_ˆ* right ) 170  i ; 172  i = NUM_ECC_DIGITS - 1; i >= 0; i--) { 173 ià( Ëá [ i ] > right [i]) 175 ià( Ëá [ i ] < right [i]) 180 } } 185  ušt64_t $vli_lshiá ( ušt64_t * »suÉ , cÚ¡ ušt64_ˆ* š , 186  shiá ) 188 ušt64_t ÿ¼y = 0; 189  i ; 191  i = 0; i < NUM_ECC_DIGITS ; i++) { 192 ušt64_t ‹mp = š [ i ]; 194 »suÉ [ i ] = ( ‹mp << shiá è| ÿ¼y ; 195 ÿ¼y = ‹mp >> (64 - shiá ); 198  ÿ¼y ; 199 } } 202  $vli_rshiá1 ( ušt64_t * vli ) 204 ušt64_t * ’d = vli ; 205 ušt64_t ÿ¼y = 0; 207 vli +ð NUM_ECC_DIGITS ; 209  vli -- > ’d ) { 210 ušt64_t ‹mp = * vli ; 211 * vli = ( ‹mp >> 1è| ÿ¼y ; 212 ÿ¼y = ‹mp << 63; 214 } } 217  ušt64_t $vli_add ( ušt64_t * »suÉ , cÚ¡ ušt64_ˆ* Ëá , 218 cÚ¡ ušt64_t * right ) 220 ušt64_t ÿ¼y = 0; 221  i ; 223  i = 0; i < NUM_ECC_DIGITS ; i++) { 224 ušt64_t sum ; 226 sum = Ëá [ i ] + right [i] + ÿ¼y ; 227 ià( sum !ð Ëá [ i ]) 228 ÿ¼y = ( sum < Ëá [ i ]); 230 »suÉ [ i ] = sum ; 233  ÿ¼y ; 234 } } 237  ušt64_t $vli_sub ( ušt64_t * »suÉ , cÚ¡ ušt64_ˆ* Ëá , 238 cÚ¡ ušt64_t * right ) 240 ušt64_t bÜrow = 0; 241  i ; 243  i = 0; i < NUM_ECC_DIGITS ; i++) { 244 ušt64_t diff ; 246 diff = Ëá [ i ] - right [i] - bÜrow ; 247 ià( diff !ð Ëá [ i ]) 248 bÜrow = ( diff > Ëá [ i ]); 250 »suÉ [ i ] = diff ; 253  bÜrow ; 254 } } 256  ušt128_t $mul_64_64 ( ušt64_t Ëá , ušt64_ˆ right ) 258 ušt64_t a0 = Ëá & 0xffffffffull; 259 ušt64_t a1 = Ëá >> 32; 260 ušt64_t b0 = right & 0xffffffffull; 261 ušt64_t b1 = right >> 32; 262 ušt64_t m0 = a0 * b0 ; 263 ušt64_t m1 = a0 * b1 ; 264 ušt64_t m2 = a1 * b0 ; 265 ušt64_t m3 = a1 * b1 ; 266 ušt128_t »suÉ ; 268 m2 +ð( m0 >> 32); 269 m2 +ð m1 ; 272 ià( m2 < m1 ) 273 m3 += 0x100000000ull; 275 »suÉ . m_low = ( m0 & 0xffffffffuÎè| ( m2 << 32); 276 »suÉ . m_high = m3 + ( m2 >> 32); 278  »suÉ ; 279 } } 281  ušt128_t $add_128_128 ( ušt128_t a , ušt128_ˆ b ) 283 ušt128_t »suÉ ; 285 »suÉ . m_low = a .m_low + b .m_low; 286 »suÉ . m_high = a .m_high + b .m_high + (»suÉ. m_low <‡.m_low); 288  »suÉ ; 289 } } 291  $vli_muÉ ( ušt64_t * »suÉ , cÚ¡ ušt64_ˆ* Ëá , 292 cÚ¡ ušt64_t * right ) 294 ušt128_t r01 = { 0, 0 }; 295 ušt64_t r2 = 0; 296  i , k ; 301  k = 0; k < NUM_ECC_DIGITS * 2 - 1; k++) { 302  mš ; 304 ià( k < NUM_ECC_DIGITS ) 305 mš = 0; 307 mš = ( k + 1è- NUM_ECC_DIGITS ; 309  i = mš ; i <ð k && i < NUM_ECC_DIGITS ; i++) { 310 ušt128_t ´oduù ; 312 ´oduù = `mul_64_64 ( Ëá [ i ], right [ k - i]); 314 r01 = `add_128_128 Ô01, ´oduù ); 315 r2 +ð( r01 . m_high < ´oduù .m_high); 318 »suÉ [ k ] = r01 . m_low ; 319 r01 . m_low =„01. m_high ; 320 r01 . m_high = r2 ; 321 r2 = 0; 324 »suÉ [ NUM_ECC_DIGITS * 2 - 1] = r01 . m_low ; 325 } } 327  $vli_squ¬e ( ušt64_t * »suÉ , cÚ¡ ušt64_ˆ* Ëá ) 329 ušt128_t r01 = { 0, 0 }; 330 ušt64_t r2 = 0; 331  i , k ; 333  k = 0; k < NUM_ECC_DIGITS * 2 - 1; k++) { 334  mš ; 336 ià( k < NUM_ECC_DIGITS ) 337 mš = 0; 339 mš = ( k + 1è- NUM_ECC_DIGITS ; 341  i = mš ; i <ð k && i <= k - i; i++) { 342 ušt128_t ´oduù ; 344 ´oduù = `mul_64_64 ( Ëá [ i ],†eá[ k - i]); 346 ià( i < k - i) { 347 r2 +ð ´oduù . m_high >> 63; 348 ´oduù . m_high = (product.m_high << 1) | 349 ( ´oduù . m_low >> 63); 350 ´oduù . m_low <<= 1; 353 r01 = `add_128_128 Ô01, ´oduù ); 354 r2 +ð( r01 . m_high < ´oduù .m_high); 357 »suÉ [ k ] = r01 . m_low ; 358 r01 . m_low =„01. m_high ; 359 r01 . m_high = r2 ; 360 r2 = 0; 363 »suÉ [ NUM_ECC_DIGITS * 2 - 1] = r01 . m_low ; 364 } } 369  $vli_mod_add ( ušt64_t * »suÉ , cÚ¡ ušt64_ˆ* Ëá , 370 cÚ¡ ušt64_t * right , cÚ¡ ušt64_ˆ* mod ) 372 ušt64_t ÿ¼y ; 374 ÿ¼y = `vli_add ( »suÉ , Ëá , right ); 379 ià( ÿ¼y || `vli_cmp ( »suÉ , mod ) >= 0) 380 `vli_sub ( »suÉ ,„esuÉ, mod ); 381 } } 386  $vli_mod_sub ( ušt64_t * »suÉ , cÚ¡ ušt64_ˆ* Ëá , 387 cÚ¡ ušt64_t * right , cÚ¡ ušt64_ˆ* mod ) 389 ušt64_t bÜrow = `vli_sub ( »suÉ , Ëá , right ); 395 ià( bÜrow ) 396 `vli_add ( »suÉ ,„esuÉ, mod ); 397 } } 401  $vli_mmod_ç¡ ( ušt64_t * »suÉ , cÚ¡ ušt64_ˆ* ´oduù ) 403 ušt64_t tmp [ NUM_ECC_DIGITS ]; 404  ÿ¼y ; 407 `vli_£t ( »suÉ , ´oduù ); 410 tmp [0] = 0; 411 tmp [1] = ´oduù [5] & 0xffffffff00000000ull; 412 tmp [2] = ´oduù [6]; 413 tmp [3] = ´oduù [7]; 414 ÿ¼y = `vli_lshiá ( tmp ,mp, 1); 415 ÿ¼y +ð `vli_add ( »suÉ ,„esuÉ, tmp ); 418 tmp [1] = ´oduù [6] << 32; 419 tmp [2] = ( ´oduù [6] >> 32) | (product[7] << 32); 420 tmp [3] = ´oduù [7] >> 32; 421 ÿ¼y +ð `vli_lshiá ( tmp ,mp, 1); 422 ÿ¼y +ð `vli_add ( »suÉ ,„esuÉ, tmp ); 425 tmp [0] = ´oduù [4]; 426 tmp [1] = ´oduù [5] & 0xffffffff; 427 tmp [2] = 0; 428 tmp [3] = ´oduù [7]; 429 ÿ¼y +ð `vli_add ( »suÉ ,„esuÉ, tmp ); 432 tmp [0] = ( ´oduù [4] >> 32) | (product[5] << 32); 433 tmp [1] = ( ´oduù [5] >> 32) | (product[6] & 0xffffffff00000000ull); 434 tmp [2] = ´oduù [7]; 435 tmp [3] = ( ´oduù [6] >> 32) | (product[4] << 32); 436 ÿ¼y +ð `vli_add ( »suÉ ,„esuÉ, tmp ); 439 tmp [0] = ( ´oduù [5] >> 32) | (product[6] << 32); 440 tmp [1] = ( ´oduù [6] >> 32); 441 tmp [2] = 0; 442 tmp [3] = ( ´oduù [4] & 0xffffffff) | (product[5] << 32); 443 ÿ¼y -ð `vli_sub ( »suÉ ,„esuÉ, tmp ); 446 tmp [0] = ´oduù [6]; 447 tmp [1] = ´oduù [7]; 448 tmp [2] = 0; 449 tmp [3] = ( ´oduù [4] >> 32) | (product[5] & 0xffffffff00000000ull); 450 ÿ¼y -ð `vli_sub ( »suÉ ,„esuÉ, tmp ); 453 tmp [0] = ( ´oduù [6] >> 32) | (product[7] << 32); 454 tmp [1] = ( ´oduù [7] >> 32) | (product[4] << 32); 455 tmp [2] = ( ´oduù [4] >> 32) | (product[5] << 32); 456 tmp [3] = ( ´oduù [6] << 32); 457 ÿ¼y -ð `vli_sub ( »suÉ ,„esuÉ, tmp ); 460 tmp [0] = ´oduù [7]; 461 tmp [1] = ´oduù [4] & 0xffffffff00000000ull; 462 tmp [2] = ´oduù [5]; 463 tmp [3] = ´oduù [6] & 0xffffffff00000000ull; 464 ÿ¼y -ð `vli_sub ( »suÉ ,„esuÉ, tmp ); 466 ià( ÿ¼y < 0) { 468 ÿ¼y +ð `vli_add ( »suÉ ,„esuÉ, curve_p ); 469 }  ÿ¼y < 0); 471  ÿ¼y || `vli_cmp ( curve_p , »suÉ ) != 1) 472 ÿ¼y -ð `vli_sub ( »suÉ ,„esuÉ, curve_p ); 474 } } 477  $vli_mod_muÉ_ç¡ ( ušt64_t * »suÉ , cÚ¡ ušt64_ˆ* Ëá , 478 cÚ¡ ušt64_t * right ) 480 ušt64_t ´oduù [2 * NUM_ECC_DIGITS ]; 482 `vli_muÉ ( ´oduù , Ëá , right ); 483 `vli_mmod_ç¡ ( »suÉ , ´oduù ); 484 } } 487  $vli_mod_squ¬e_ç¡ ( ušt64_t * »suÉ , cÚ¡ ušt64_ˆ* Ëá ) 489 ušt64_t ´oduù [2 * NUM_ECC_DIGITS ]; 491 `vli_squ¬e ( ´oduù , Ëá ); 492 `vli_mmod_ç¡ ( »suÉ , ´oduù ); 493 } } 495  #EVEN ( vli è(!(vli[0] & 1)) ) 500  $vli_mod_šv ( ušt64_t * »suÉ , cÚ¡ ušt64_ˆ* šput , 501 cÚ¡ ušt64_t * mod ) 503 ušt64_t a [ NUM_ECC_DIGITS ], b [NUM_ECC_DIGITS]; 504 ušt64_t u [ NUM_ECC_DIGITS ], v [NUM_ECC_DIGITS]; 505 ušt64_t ÿ¼y ; 506  cmp_»suÉ ; 508 ià( `vli_is_z”o ( šput )) { 509 `vli_þ—r ( »suÉ ); 513 `vli_£t ( a , šput ); 514 `vli_£t ( b , mod ); 515 `vli_þ—r ( u ); 516 u [0] = 1; 517 `vli_þ—r ( v ); 519 ( cmp_»suÉ = `vli_cmp ( a , b )) != 0) { 520 ÿ¼y = 0; 522 ià( `EVEN ( a )) { 523 `vli_rshiá1 ( a ); 525 ià(! `EVEN ( u )) 526 ÿ¼y = `vli_add ( u , u, mod ); 528 `vli_rshiá1 ( u ); 529 ià( ÿ¼y ) 530 u [ NUM_ECC_DIGITS - 1] |= 0x8000000000000000ull; 531 } ià( `EVEN ( b )) { 532 `vli_rshiá1 ( b ); 534 ià(! `EVEN ( v )) 535 ÿ¼y = `vli_add ( v , v, mod ); 537 `vli_rshiá1 ( v ); 538 ià( ÿ¼y ) 539 v [ NUM_ECC_DIGITS - 1] |= 0x8000000000000000ull; 540 } ià( cmp_»suÉ > 0) { 541 `vli_sub ( a ,‡, b ); 542 `vli_rshiá1 ( a ); 544 ià( `vli_cmp ( u , v ) < 0) 545 `vli_add ( u , u, mod ); 547 `vli_sub ( u , u, v ); 548 ià(! `EVEN ( u )) 549 ÿ¼y = `vli_add ( u , u, mod ); 551 `vli_rshiá1 ( u ); 552 ià( ÿ¼y ) 553 u [ NUM_ECC_DIGITS - 1] |= 0x8000000000000000ull; 555 `vli_sub ( b , b, a ); 556 `vli_rshiá1 ( b ); 558 ià( `vli_cmp ( v , u ) < 0) 559 `vli_add ( v , v, mod ); 561 `vli_sub ( v , v, u ); 562 ià(! `EVEN ( v )) 563 ÿ¼y = `vli_add ( v , v, mod ); 565 `vli_rshiá1 ( v ); 566 ià( ÿ¼y ) 567 v [ NUM_ECC_DIGITS - 1] |= 0x8000000000000000ull; 571 `vli_£t ( »suÉ , u ); 572 } } 577  boÞ $ecc_pošt_is_z”o (cÚ¡  ecc_pošt * pošt ) 579  ( `vli_is_z”o ( pošt -> x è&& vli_is_z”oÕošt-> y )); 580 } } 587  $ecc_pošt_doubË_jacobŸn ( ušt64_t * x1 , ušt64_ˆ* y1 , ušt64_ˆ* z1 ) 590 ušt64_t t4 [ NUM_ECC_DIGITS ]; 591 ušt64_t t5 [ NUM_ECC_DIGITS ]; 593 ià( `vli_is_z”o ( z1 )) 596 `vli_mod_squ¬e_ç¡ ( t4 , y1 ); 597 `vli_mod_muÉ_ç¡ ( t5 , x1 , t4 ); 598 `vli_mod_squ¬e_ç¡ ( t4 ,4); 599 `vli_mod_muÉ_ç¡ ( y1 , y1, z1 ); 600 `vli_mod_squ¬e_ç¡ ( z1 , z1); 602 `vli_mod_add ( x1 , x1, z1 , curve_p ); 603 `vli_mod_add ( z1 , z1, z1, curve_p ); 604 `vli_mod_sub ( z1 , x1 , z1, curve_p ); 605 `vli_mod_muÉ_ç¡ ( x1 , x1, z1 ); 607 `vli_mod_add ( z1 , x1 , x1, curve_p ); 608 `vli_mod_add ( x1 , x1, z1 , curve_p ); 609 ià( `vli_‹¡_b™ ( x1 , 0)) { 610 ušt64_t ÿ¼y = `vli_add ( x1 , x1, curve_p ); 611 `vli_rshiá1 ( x1 ); 612 x1 [ NUM_ECC_DIGITS - 1] |ð ÿ¼y << 63; 614 `vli_rshiá1 ( x1 ); 618 `vli_mod_squ¬e_ç¡ ( z1 , x1 ); 619 `vli_mod_sub ( z1 , z1, t5 , curve_p ); 620 `vli_mod_sub ( z1 , z1, t5 , curve_p ); 621 `vli_mod_sub ( t5 ,5, z1 , curve_p ); 622 `vli_mod_muÉ_ç¡ ( x1 , x1, t5 ); 623 `vli_mod_sub ( t4 , x1 ,4, curve_p ); 625 `vli_£t ( x1 , z1 ); 626 `vli_£t ( z1 , y1 ); 627 `vli_£t ( y1 , t4 ); 628 } } 631  $­¶y_z ( ušt64_t * x1 , ušt64_ˆ* y1 , ušt64_ˆ* z ) 633 ušt64_t t1 [ NUM_ECC_DIGITS ]; 635 `vli_mod_squ¬e_ç¡ ( t1 , z ); 636 `vli_mod_muÉ_ç¡ ( x1 , x1, t1 ); 637 `vli_mod_muÉ_ç¡ ( t1 ,1, z ); 638 `vli_mod_muÉ_ç¡ ( y1 , y1, t1 ); 639 } } 642  $xycz_š™Ÿl_doubË ( ušt64_t * x1 , ušt64_ˆ* y1 , ušt64_ˆ* x2 , 643 ušt64_t * y2 , ušt64_ˆ* p_š™Ÿl_z ) 645 ušt64_t z [ NUM_ECC_DIGITS ]; 647 `vli_£t ( x2 , x1 ); 648 `vli_£t ( y2 , y1 ); 650 `vli_þ—r ( z ); 651 z [0] = 1; 653 ià( p_š™Ÿl_z ) 654 `vli_£t ( z , p_š™Ÿl_z ); 656 `­¶y_z ( x1 , y1 , z ); 658 `ecc_pošt_doubË_jacobŸn ( x1 , y1 , z ); 660 `­¶y_z ( x2 , y2 , z ); 661 } } 667  $xycz_add ( ušt64_t * x1 , ušt64_ˆ* y1 , ušt64_ˆ* x2 , ušt64_ˆ* y2 ) 670 ušt64_t t5 [ NUM_ECC_DIGITS ]; 672 `vli_mod_sub ( t5 , x2 , x1 , curve_p ); 673 `vli_mod_squ¬e_ç¡ ( t5 ,5); 674 `vli_mod_muÉ_ç¡ ( x1 , x1, t5 ); 675 `vli_mod_muÉ_ç¡ ( x2 , x2, t5 ); 676 `vli_mod_sub ( y2 , y2, y1 , curve_p ); 677 `vli_mod_squ¬e_ç¡ ( t5 , y2 ); 679 `vli_mod_sub ( t5 ,5, x1 , curve_p ); 680 `vli_mod_sub ( t5 ,5, x2 , curve_p ); 681 `vli_mod_sub ( x2 , x2, x1 , curve_p ); 682 `vli_mod_muÉ_ç¡ ( y1 , y1, x2 ); 683 `vli_mod_sub ( x2 , x1 , t5 , curve_p ); 684 `vli_mod_muÉ_ç¡ ( y2 , y2, x2 ); 685 `vli_mod_sub ( y2 , y2, y1 , curve_p ); 687 `vli_£t ( x2 , t5 ); 688 } } 694  $xycz_add_c ( ušt64_t * x1 , ušt64_ˆ* y1 , ušt64_ˆ* x2 , ušt64_ˆ* y2 ) 697 ušt64_t t5 [ NUM_ECC_DIGITS ]; 698 ušt64_t t6 [ NUM_ECC_DIGITS ]; 699 ušt64_t t7 [ NUM_ECC_DIGITS ]; 701 `vli_mod_sub ( t5 , x2 , x1 , curve_p ); 702 `vli_mod_squ¬e_ç¡ ( t5 ,5); 703 `vli_mod_muÉ_ç¡ ( x1 , x1, t5 ); 704 `vli_mod_muÉ_ç¡ ( x2 , x2, t5 ); 705 `vli_mod_add ( t5 , y2 , y1 , curve_p ); 706 `vli_mod_sub ( y2 , y2, y1 , curve_p ); 708 `vli_mod_sub ( t6 , x2 , x1 , curve_p ); 709 `vli_mod_muÉ_ç¡ ( y1 , y1, t6 ); 710 `vli_mod_add ( t6 , x1 , x2 , curve_p ); 711 `vli_mod_squ¬e_ç¡ ( x2 , y2 ); 712 `vli_mod_sub ( x2 , x2, t6 , curve_p ); 714 `vli_mod_sub ( t7 , x1 , x2 , curve_p ); 715 `vli_mod_muÉ_ç¡ ( y2 , y2, t7 ); 716 `vli_mod_sub ( y2 , y2, y1 , curve_p ); 718 `vli_mod_squ¬e_ç¡ ( t7 , t5 ); 719 `vli_mod_sub ( t7 ,7, t6 , curve_p ); 720 `vli_mod_sub ( t6 , t7 , x1 , curve_p ); 721 `vli_mod_muÉ_ç¡ ( t6 ,6, t5 ); 722 `vli_mod_sub ( y1 , t6 , y1, curve_p ); 724 `vli_£t ( x1 , t7 ); 725 } } 727  $ecc_pošt_muÉ ( ecc_pošt * »suÉ , 728 cÚ¡  ecc_pošt * pošt , 729 ušt64_t * sÿÏr , ušt64_ˆ* š™Ÿl_z , 730  num_b™s ) 733 ušt64_t rx [2][ NUM_ECC_DIGITS ]; 734 ušt64_t ry [2][ NUM_ECC_DIGITS ]; 735 ušt64_t z [ NUM_ECC_DIGITS ]; 736  i , nb ; 738 `vli_£t ( rx [1], pošt -> x ); 739 `vli_£t ( ry [1], pošt -> y ); 741 `xycz_š™Ÿl_doubË ( rx [1], ry [1],„x[0],„y[0], š™Ÿl_z ); 743  i = num_b™s - 2; i > 0; i--) { 744 nb = ! `vli_‹¡_b™ ( sÿÏr , i ); 745 `xycz_add_c ( rx [1 - nb ], ry [1 -‚b],„x[nb],„y[nb]); 746 `xycz_add ( rx [ nb ], ry [nb],„x[1 -‚b],„y[1 -‚b]); 749 nb = ! `vli_‹¡_b™ ( sÿÏr , 0); 750 `xycz_add_c ( rx [1 - nb ], ry [1 -‚b],„x[nb],„y[nb]); 753 `vli_mod_sub ( z , rx [1],„x[0], curve_p ); 754 `vli_mod_muÉ_ç¡ ( z , z, ry [1 - nb ]); 755 `vli_mod_muÉ_ç¡ ( z , z, pošt -> x ); 756 `vli_mod_šv ( z , z, curve_p ); 757 `vli_mod_muÉ_ç¡ ( z , z, pošt -> y ); 758 `vli_mod_muÉ_ç¡ ( z , z, rx [1 - nb ]); 761 `xycz_add ( rx [ nb ], ry [nb],„x[1 -‚b],„y[1 -‚b]); 763 `­¶y_z ( rx [0], ry [0], z ); 765 `vli_£t ( »suÉ -> x , rx [0]); 766 `vli_£t ( »suÉ -> y , ry [0]); 767 } } 770  $ecc_by‹s2Çtive (cÚ¡ ušt8_t by‹s [ ECC_BYTES ], 771 ušt64_t Çtive [ NUM_ECC_DIGITS ]) 773  i ; 775  i = 0; i < NUM_ECC_DIGITS ; i++) { 776 cÚ¡ ušt8_t * dig™ = by‹s + 8 * ( NUM_ECC_DIGITS - 1 - i ); 778 Çtive [ NUM_ECC_DIGITS - 1 - i ] = 779 (( ušt64_t è dig™ [0] << 0) | 780 (( ušt64_t è dig™ [1] << 8) | 781 (( ušt64_t è dig™ [2] << 16) | 782 (( ušt64_t è dig™ [3] << 24) | 783 (( ušt64_t è dig™ [4] << 32) | 784 (( ušt64_t è dig™ [5] << 40) | 785 (( ušt64_t è dig™ [6] << 48) | 786 (( ušt64_t è dig™ [7] << 56); 788 } } 791  $ecc_Çtive2by‹s (cÚ¡ ušt64_t Çtive [ NUM_ECC_DIGITS ], 792 ušt8_t by‹s [ ECC_BYTES ]) 794  i ; 796  i = 0; i < NUM_ECC_DIGITS ; i++) { 797 ušt8_t * dig™ = by‹s + 8 * ( NUM_ECC_DIGITS - 1 - i ); 799 dig™ [0] = Çtive [ NUM_ECC_DIGITS - 1 - i ] >> 0; 800 dig™ [1] = Çtive [ NUM_ECC_DIGITS - 1 - i ] >> 8; 801 dig™ [2] = Çtive [ NUM_ECC_DIGITS - 1 - i ] >> 16; 802 dig™ [3] = Çtive [ NUM_ECC_DIGITS - 1 - i ] >> 24; 803 dig™ [4] = Çtive [ NUM_ECC_DIGITS - 1 - i ] >> 32; 804 dig™ [5] = Çtive [ NUM_ECC_DIGITS - 1 - i ] >> 40; 805 dig™ [6] = Çtive [ NUM_ECC_DIGITS - 1 - i ] >> 48; 806 dig™ [7] = Çtive [ NUM_ECC_DIGITS - 1 - i ] >> 56; 808 } } 810 boÞ $ecc_make_key ( ušt8_t public_key [64], ušt8_ˆ ´iv©e_key [32]) 812  ecc_pošt pk ; 813 ušt64_t ´iv [ NUM_ECC_DIGITS ]; 814  Œ›s = 0; 817 ià(! `g‘_¿ndom_numb” ( ´iv è|| ( Œ›s ++ >ð MAX_TRIES )) 818  çl£ ; 820 ià( `vli_is_z”o ( ´iv )) 824 ià( `vli_cmp ( curve_n , ´iv ) != 1) 827 `ecc_pošt_muÉ (& pk , & curve_g , ´iv , NULL , `vli_num_b™s (priv)); 828 }  `ecc_pošt_is_z”o (& pk )); 830 `ecc_Çtive2by‹s ( ´iv , ´iv©e_key ); 831 `ecc_Çtive2by‹s ( pk . x , public_key ); 832 `ecc_Çtive2by‹s ( pk . y , & public_key [32]); 834  Œue ; 835 } } 837 boÞ $ecdh_sh¬ed_£ü‘ (cÚ¡ ušt8_t public_key [64], 838 cÚ¡ ušt8_t ´iv©e_key [32], 839 ušt8_t £ü‘ [32]) 841 ušt64_t ´iv [ NUM_ECC_DIGITS ]; 842 ušt64_t ¿nd [ NUM_ECC_DIGITS ]; 843  ecc_pošt ´oduù , pk ; 845 ià(! `g‘_¿ndom_numb” ( ¿nd )) 846  çl£ ; 848 `ecc_by‹s2Çtive ( public_key , pk . x ); 849 `ecc_by‹s2Çtive (& public_key [32], pk . y ); 850 `ecc_by‹s2Çtive ( ´iv©e_key , ´iv ); 852 `ecc_pošt_muÉ (& ´oduù , & pk , ´iv , ¿nd , `vli_num_b™s (priv)); 854 `ecc_Çtive2by‹s ( ´oduù . x , £ü‘ ); 856  ! `ecc_pošt_is_z”o (& ´oduù ); 857 } } @src/shared/ecc.h 27  ~<¡dboÞ.h > 28  ~<¡dšt.h > 38 boÞ ecc_make_key ( ušt8_t public_key [64], ušt8_ˆ ´iv©e_key [32]); 56 boÞ ecdh_sh¬ed_£ü‘ (cÚ¡ ušt8_t public_key [64], 57 cÚ¡ ušt8_t ´iv©e_key [32], 58 ušt8_t £ü‘ [32]); @src/shared/gap.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡dlib.h > 31  ~"lib/blu‘oÙh.h " 32  ~"lib/mgmt.h " 34  ~"¤c/sh¬ed/utž.h " 35  ~"¤c/sh¬ed/queue.h " 36  ~"¤c/sh¬ed/mgmt.h " 37  ~"¤c/sh¬ed/g­.h " 39  #FLAG_MGMT_CONN_CONTROL (0 << 1) ) 41  sbt_g­ { 42  m»f_couÁ ; 43 ušt16_t mšdex ; 44  mgmt * mmgmt ; 46 ušt8_t mmgmt_v”siÚ ; 47 ušt16_t mmgmt_»visiÚ ; 48 boÞ mmgmt_»ady ; 50  mæags ; 52 bt_g­_»ady_func_t m»ady_hªdËr ; 53 bt_g­_de¡roy_func_t m»ady_de¡roy ; 54 * m»ady_d©a ; 56 ušt8_t m¡©ic_addr [6]; 57 ušt8_t mloÿl_œk [16]; 58  queue * mœk_li¡ ; 61  sœk_’Œy { 62 ušt8_t maddr_ty³ ; 63 ušt8_t maddr [6]; 64 ušt8_t mkey [16]; 67  $œk_’Œy_ä“ (* d©a ) 69  œk_’Œy * œk = d©a ; 71 `ä“ ( œk ); 72 } } 74  $»ady_¡©us ( bt_g­ * g­ , boÞ ¡©us ) 76 g­ -> mgmt_»ady = ¡©us ; 78 ià( g­ -> »ady_hªdËr ) 79 g­ -> `»ady_hªdËr ( ¡©us , g­-> »ady_d©a ); 80 } } 82  $»ad_commªds_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 83 cÚ¡ * ·¿m , * u£r_d©a ) 85  bt_g­ * g­ = u£r_d©a ; 86 cÚ¡  mgmt_½_»ad_commªds * ½ = ·¿m ; 87 ušt16_t num_commªds , num_ev’ts ; 88 cÚ¡ ušt16_t * Ýcode ; 89 size_t ex³ùed_Ën ; 90  i ; 92 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 93 `»ady_¡©us ( g­ , çl£ ); 97 ià( Ëngth < (* ½ )) { 98 `»ady_¡©us ( g­ , çl£ ); 102 num_commªds = `Ë16_to_ýu ( ½ ->num_commands); 103 num_ev’ts = `Ë16_to_ýu ( ½ ->num_events); 105 ex³ùed_Ën = (* ½ è+ num_commªds * ( ušt16_t ) + 106 num_ev’ts * ( ušt16_t ); 108 ià( Ëngth < ex³ùed_Ën ) { 109 `»ady_¡©us ( g­ , çl£ ); 113 Ýcode = ½ -> Ýcodes ; 115  i = 0; i < num_commªds ; i++) { 116 ušt16_t Ý = `g‘_Ë16 ( Ýcode ++); 118 ià( Ý =ð MGMT_OP_ADD_DEVICE ) 119 g­ -> æags |ð FLAG_MGMT_CONN_CONTROL ; 122 `»ady_¡©us ( g­ , Œue ); 123 } } 125  $»ad_v”siÚ_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 126 cÚ¡ * ·¿m , * u£r_d©a ) 128  bt_g­ * g­ = u£r_d©a ; 129 cÚ¡  mgmt_½_»ad_v”siÚ * ½ = ·¿m ; 131 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 132 `»ady_¡©us ( g­ , çl£ ); 136 ià( Ëngth < (* ½ )) { 137 `»ady_¡©us ( g­ , çl£ ); 141 g­ -> mgmt_v”siÚ = ½ -> v”siÚ ; 142 g­ -> mgmt_»visiÚ = `Ë16_to_ýu ( ½ -> »visiÚ ); 144 ià(! `mgmt_£nd ( g­ -> mgmt , MGMT_OP_READ_COMMANDS , 145 MGMT_INDEX_NONE , 0, NULL , 146 »ad_commªds_com¶‘e , g­ , NULL )) { 147 `»ady_¡©us ( g­ , çl£ ); 150 } } 152  bt_g­ * $bt_g­_Ãw_deçuÉ () 154  `bt_g­_Ãw_šdex (0x0000); 155 } } 157  bt_g­ * $bt_g­_Ãw_šdex ( ušt16_t šdex ) 159  bt_g­ * g­ ; 161 ià( šdex =ð MGMT_INDEX_NONE ) 162  NULL ; 164 g­ = `Ãw0 ( bt_g­ , 1); 165 ià(! g­ ) 166  NULL ; 168 g­ -> šdex = index; 170 g­ -> mgmt = `mgmt_Ãw_deçuÉ (); 171 ià(! g­ -> mgmt ) { 172 `ä“ ( g­ ); 173  NULL ; 176 g­ -> œk_li¡ = `queue_Ãw (); 178 g­ -> mgmt_»ady = çl£ ; 180 ià(! `mgmt_£nd ( g­ -> mgmt , MGMT_OP_READ_VERSION , 181 MGMT_INDEX_NONE , 0, NULL , 182 »ad_v”siÚ_com¶‘e , g­ , NULL )) { 183 `mgmt_uÄef ( g­ -> mgmt ); 184  NULL ; 187  `bt_g­_»f ( g­ ); 188 } } 190  bt_g­ * $bt_g­_»f ( bt_g­ * g­ ) 192 ià(! g­ ) 193  NULL ; 195 `__sync_ãtch_ªd_add (& g­ -> »f_couÁ , 1); 197  g­ ; 198 } } 200  $bt_g­_uÄef ( bt_g­ * g­ ) 202 ià(! g­ ) 205 ià( `__sync_sub_ªd_ãtch (& g­ -> »f_couÁ , 1)) 208 g­ -> mgmt_»ady = çl£ ; 210 `mgmt_ÿnûl_®l ( g­ -> mgmt ); 211 `mgmt_uÄegi¡”_®l ( g­ -> mgmt ); 213 ià( g­ -> »ady_de¡roy ) 214 g­ -> `»ady_de¡roy (g­-> »ady_d©a ); 216 `queue_de¡roy ( g­ -> œk_li¡ , œk_’Œy_ä“ ); 218 `mgmt_uÄef ( g­ -> mgmt ); 220 `ä“ ( g­ ); 221 } } 223 boÞ $bt_g­_£t_»ady_hªdËr ( bt_g­ * g­ , 224 bt_g­_»ady_func_t hªdËr , * u£r_d©a , 225 bt_g­_de¡roy_func_t de¡roy ) 227 ià(! g­ ) 228  çl£ ; 230 ià( g­ -> »ady_de¡roy ) 231 g­ -> `»ady_de¡roy (g­-> »ady_d©a ); 233 g­ -> »ady_hªdËr = hªdËr ; 234 g­ -> »ady_de¡roy = de¡roy ; 235 g­ -> »ady_d©a = u£r_d©a ; 237  Œue ; 238 } } 240 boÞ $bt_g­_£t_¡©ic_addr ( bt_g­ * g­ , ušt8_t addr [6]) 242 ià(! g­ ) 243  çl£ ; 245 `memýy ( g­ -> ¡©ic_addr , addr , 6); 247  Œue ; 248 } } 250 boÞ $bt_g­_£t_loÿl_œk ( bt_g­ * g­ , ušt8_t key [16]) 252 ià(! g­ ) 253  çl£ ; 255 `memýy ( g­ -> loÿl_œk , key , 16); 257  Œue ; 258 } } 260 boÞ $bt_g­_add_³”_œk ( bt_g­ * g­ , ušt8_t addr_ty³ , 261 ušt8_t addr [6], ušt8_ˆ key [16]) 263  œk_’Œy * œk ; 265 ià(! g­ ) 266  çl£ ; 268 ià( addr_ty³ > BT_GAP_ADDR_TYPE_LE_RANDOM ) 269  çl£ ; 271 œk = `Ãw0 ( œk_’Œy , 1); 272 ià(! œk ) 273  çl£ ; 275 œk -> addr_ty³ =‡ddr_type; 276 `memýy ( œk -> addr ,‡ddr, 6); 277 `memýy ( œk -> key , key, 16); 279  Œue ; 280 } } @src/shared/gap.h 24  ~<¡dboÞ.h > 25  ~<¡dšt.h > 27  #BT_GAP_ADDR_TYPE_BREDR 0x00 ) 28  #BT_GAP_ADDR_TYPE_LE_PUBLIC 0x01 ) 29  #BT_GAP_ADDR_TYPE_LE_RANDOM 0x02 ) 31  gbt_g­ ; 33  bt_g­ * bt_g­_Ãw_deçuÉ (); 34  bt_g­ * bt_g­_Ãw_šdex ( ušt16_t šdex ); 36  bt_g­ * bt_g­_»f (bt_g­ * g­ ); 37  bt_g­_uÄef ( bt_g­ * g­ ); 39 (* tbt_g­_de¡roy_func_t )(* tu£r_d©a ); 40 (* tbt_g­_»ady_func_t )( tboÞ tsucûss , * tu£r_d©a ); 42 boÞ `bt_g­_£t_»ady_hªdËr ( bt_g­ * g­ , 43 bt_g­_»ady_func_t hªdËr , * u£r_d©a , 44 bt_g­_de¡roy_func_t de¡roy ); 46 boÞ `bt_g­_£t_¡©ic_addr ( bt_g­ * g­ , ušt8_t addr [6]); 47 boÞ `bt_g­_£t_loÿl_œk ( bt_g­ * g­ , ušt8_t key [16]); 48 boÞ `bt_g­_add_³”_œk ( bt_g­ * g­ , ušt8_t addr_ty³ , 49 ušt8_t addr [6], ušt8_ˆ key [16]); @src/shared/gatt-client.c 24  ~"¤c/sh¬ed/©t.h " 25  ~"lib/uuid.h " 26  ~"¤c/sh¬ed/g©t-h–³rs.h " 27  ~"¤c/sh¬ed/utž.h " 28  ~"¤c/sh¬ed/queue.h " 29  ~"¤c/sh¬ed/g©t-db.h " 30  ~"¤c/sh¬ed/g©t-þ›Á.h " 32 #ifdeà BLUEZ5_GATT_CLIENT 33  ~"../log.h " 36  ~ 37  ~ 39 #iâdeà MAX 40  #MAX ( a , b è(×è> (bè? (aè: (b)) ) 43 #iâdeà MIN 44  #MIN ( a , b è(×è< (bè? (aè: (b)) ) 47  #UUID_BYTES ( BT_GATT_UUID_SIZE * ( ušt8_t )) ) 49  #GATT_SVC_UUID 0x1801 ) 50  #SVC_CHNGD_UUID 0x2a05 ) 52  sbt_g©t_þ›Á { 53  bt_©t * m©t ; 54  m»f_couÁ ; 56 bt_g©t_þ›Á_ÿÎback_t m»ady_ÿÎback ; 57 bt_g©t_þ›Á_de¡roy_func_t m»ady_de¡roy ; 58 * m»ady_d©a ; 60 bt_g©t_þ›Á_£rviû_chªged_ÿÎback_t msvc_chngd_ÿÎback ; 61 bt_g©t_þ›Á_de¡roy_func_t msvc_chngd_de¡roy ; 62 * msvc_chngd_d©a ; 64 bt_g©t_þ›Á_debug_func_t mdebug_ÿÎback ; 65 bt_g©t_þ›Á_de¡roy_func_t mdebug_de¡roy ; 66 * mdebug_d©a ; 68  g©t_db * mdb ; 69 boÞ mš_š™ ; 70 boÞ m»ady ; 78  queue * mlÚg_wr™e_queue ; 79 boÞ mš_lÚg_wr™e ; 82  queue * mnÙify_li¡ ; 83  queue * mnÙify_chrcs ; 84  mÃxt_»g_id ; 85  mdisc_id , mnÙify_id , mšd_id ; 91  msvc_chngd_šd_id ; 92  queue * msvc_chngd_queue ; 93 boÞ mš_svc_chngd ; 96  snÙify_chrc { 97 ušt16_t mv®ue_hªdË ; 98 ušt16_t mccc_hªdË ; 99 ušt16_t m´Ý”t›s ; 100  mnÙify_couÁ ; 105  queue * m»g_nÙify_queue ; 106  mccc_wr™e_id ; 109  snÙify_d©a { 110  bt_g©t_þ›Á * mþ›Á ; 111 boÞ mšv®id ; 112  mid ; 113  m»f_couÁ ; 114  nÙify_chrc * mchrc ; 115 bt_g©t_þ›Á_nÙify_id_ÿÎback_t mÿÎback ; 116 bt_g©t_þ›Á_nÙify_ÿÎback_t mnÙify ; 117 * mu£r_d©a ; 118 bt_g©t_þ›Á_de¡roy_func_t mde¡roy ; 121  nÙify_d©a * $nÙify_d©a_»f ( nÙify_d©a *notify_data) 123 `__sync_ãtch_ªd_add (& nÙify_d©a -> »f_couÁ , 1); 125  nÙify_d©a ; 126 } } 128  $nÙify_d©a_uÄef (* d©a ) 130  nÙify_d©a *nÙify_d©¨ð d©a ; 132 ià( `__sync_sub_ªd_ãtch (& nÙify_d©a -> »f_couÁ , 1)) 135 ià( nÙify_d©a -> de¡roy ) 136 nÙify_d©a -> `de¡roy ÒÙify_d©a-> u£r_d©a ); 138 `ä“ ( nÙify_d©a ); 139 } } 141  $fšd_ccc ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 143  g©t_db_©Œibu‹ ** ccc_±r = u£r_d©a ; 144 bt_uuid_t uuid ; 146 ià(* ccc_±r ) 149 `bt_uuid16_ü—‹ (& uuid , GATT_CLIENT_CHARAC_CFG_UUID ); 151 ià( `bt_uuid_cmp (& uuid , `g©t_db_©Œibu‹_g‘_ty³ ( ©Œ ))) 154 * ccc_±r = ©Œ ; 155 } } 157  nÙify_chrc * $nÙify_chrc_ü—‹ ( bt_g©t_þ›Á * þ›Á , 158 ušt16_t v®ue_hªdË ) 160  g©t_db_©Œibu‹ * ©Œ , * ccc ; 161  nÙify_chrc * chrc ; 162 bt_uuid_t uuid ; 163 ušt8_t ´Ý”t›s ; 166 ©Œ = `g©t_db_g‘_©Œibu‹ ( þ›Á -> db , v®ue_hªdË - 1); 167 ià(! ©Œ ) 168  NULL ; 170 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_UUID ); 171 ià( `bt_uuid_cmp (& uuid , `g©t_db_©Œibu‹_g‘_ty³ ( ©Œ ))) 172  NULL ; 174 ià(! `g©t_db_©Œibu‹_g‘_ch¬_d©a ( ©Œ , NULL , NULL, 175 & ´Ý”t›s , NULL )) 176  NULL ; 179 ccc = NULL ; 180 `g©t_db_£rviû_fÜ—ch_desc ( ©Œ , fšd_ccc , & ccc ); 181 ià(! ccc ) 182  NULL ; 184 chrc = `Ãw0 ( nÙify_chrc , 1); 185 ià(! chrc ) 186  NULL ; 188 chrc -> »g_nÙify_queue = `queue_Ãw (); 189 ià(! chrc -> »g_nÙify_queue ) { 190 `ä“ ( chrc ); 191  NULL ; 194 chrc -> v®ue_hªdË = value_handle; 195 chrc -> ccc_hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( ccc ); 196 chrc -> ´Ý”t›s =…roperties; 198 `queue_push_ž ( þ›Á -> nÙify_chrcs , chrc ); 200  chrc ; 201 } } 203  $nÙify_chrc_ä“ (* d©a ) 205  nÙify_chrc * chrc = d©a ; 207 `queue_de¡roy ( chrc -> »g_nÙify_queue , nÙify_d©a_uÄef ); 208 `ä“ ( chrc ); 209 } } 211  boÞ $m©ch_nÙify_d©a_id (cÚ¡ * a , cÚ¡ * b ) 213 cÚ¡  nÙify_d©a *nÙify_d©¨ð a ; 214  id = `PTR_TO_UINT ( b ); 216  nÙify_d©a -> id == id; 217 } } 219  shªdË_¿nge { 220 ušt16_t m¡¬t ; 221 ušt16_t m’d ; 224  boÞ $m©ch_nÙify_d©a_hªdË_¿nge (cÚ¡ * a , cÚ¡ * b ) 226 cÚ¡  nÙify_d©a *nÙify_d©¨ð a ; 227  nÙify_chrc * chrc = nÙify_d©a ->chrc; 228 cÚ¡  hªdË_¿nge * ¿nge = b ; 230  chrc -> v®ue_hªdË >ð ¿nge -> ¡¬t && 231 chrc -> v®ue_hªdË <ð ¿nge -> ’d ; 232 } } 234  boÞ $m©ch_nÙify_chrc_hªdË_¿nge (cÚ¡ * a , cÚ¡ * b ) 236 cÚ¡  nÙify_chrc * chrc = a ; 237 cÚ¡  hªdË_¿nge * ¿nge = b ; 239  chrc -> v®ue_hªdË >ð ¿nge -> ¡¬t && 240 chrc -> v®ue_hªdË <ð ¿nge -> ’d ; 241 } } 243  $g©t_þ›Á_»move_®l_nÙify_š_¿nge ( 244  bt_g©t_þ›Á * þ›Á , 245 ušt16_t ¡¬t_hªdË , ušt16_ˆ ’d_hªdË ) 247  hªdË_¿nge ¿nge ; 249 ¿nge . ¡¬t = ¡¬t_hªdË ; 250 ¿nge . ’d = ’d_hªdË ; 252 `queue_»move_®l ( þ›Á -> nÙify_li¡ , m©ch_nÙify_d©a_hªdË_¿nge , 253 & ¿nge , nÙify_d©a_uÄef ); 254 } } 256  $g©t_þ›Á_»move_nÙify_chrcs_š_¿nge ( 257  bt_g©t_þ›Á * þ›Á , 258 ušt16_t ¡¬t_hªdË , ušt16_ˆ ’d_hªdË ) 260  hªdË_¿nge ¿nge ; 262 ¿nge . ¡¬t = ¡¬t_hªdË ; 263 ¿nge . ’d = ’d_hªdË ; 265 `queue_»move_®l ( þ›Á -> nÙify_chrcs , m©ch_nÙify_chrc_hªdË_¿nge , 266 & ¿nge , nÙify_chrc_ä“ ); 267 } } 269  gdiscov”y_Ý ; 271 (* tdiscov”y_Ý_com¶‘e_func_t )( tdiscov”y_Ý * tÝ , 272 tboÞ tsucûss , 273 tušt8_t t©t_ecode ); 274 (* tdiscov”y_Ý_çž_func_t )( tdiscov”y_Ý * tÝ ); 276  sdiscov”y_Ý { 277  bt_g©t_þ›Á * þ›Á ; 278  queue * ³ndšg_svcs ; 279  queue * ³ndšg_chrcs ; 280  queue * tmp_queue ; 281  g©t_db_©Œibu‹ * cur_svc ; 282 boÞ sucûss ; 283 ušt16_t ¡¬t ; 284 ušt16_t ’d ; 285  »f_couÁ ; 286 discov”y_Ý_com¶‘e_func_t com¶‘e_func ; 287 discov”y_Ý_çž_func_t çžu»_func ; 290  $discov”y_Ý_ä“ ( discov”y_Ý * Ý ) 292 `queue_de¡roy ( Ý -> ³ndšg_svcs , NULL ); 293 `queue_de¡roy ( Ý -> ³ndšg_chrcs , ä“ ); 294 `queue_de¡roy ( Ý -> tmp_queue , NULL ); 295 `ä“ ( Ý ); 296 } } 298  discov”y_Ý * $discov”y_Ý_ü—‹ ( bt_g©t_þ›Á * þ›Á , 299 ušt16_t ¡¬t , ušt16_ˆ ’d , 300 discov”y_Ý_com¶‘e_func_t com¶‘e_func , 301 discov”y_Ý_çž_func_t çžu»_func ) 303  discov”y_Ý * Ý ; 305 Ý = `Ãw0 ( discov”y_Ý , 1); 306 ià(! Ý ) 307  NULL ; 309 Ý -> ³ndšg_svcs = `queue_Ãw (); 310 ià(! Ý -> ³ndšg_svcs ) 311  çž ; 313 Ý -> ³ndšg_chrcs = `queue_Ãw (); 314 ià(! Ý -> ³ndšg_chrcs ) 315  çž ; 317 Ý -> tmp_queue = `queue_Ãw (); 318 ià(! Ý -> tmp_queue ) 319  çž ; 321 Ý -> þ›Á = client; 322 Ý -> com¶‘e_func = complete_func; 323 Ý -> çžu»_func = failure_func; 324 Ý -> ¡¬t = start; 325 Ý -> ’d =ƒnd; 327  Ý ; 329 çž : 330 `discov”y_Ý_ä“ ( Ý ); 331  NULL ; 332 } } 334  discov”y_Ý * $discov”y_Ý_»f ( discov”y_Ý * Ý ) 336 `__sync_ãtch_ªd_add (& Ý -> »f_couÁ , 1); 338  Ý ; 339 } } 341  $discov”y_Ý_uÄef (* d©a ) 343  discov”y_Ý * Ý = d©a ; 345 ià( `__sync_sub_ªd_ãtch (& Ý -> »f_couÁ , 1)) 348 ià(! Ý -> sucûss ) 349 Ý -> `çžu»_func (op); 351 `discov”y_Ý_ä“ ( Ý ); 352 } } 354  discov”_chrcs_cb ( boÞ sucûss , ušt8_t ©t_ecode , 355  bt_g©t_»suÉ * »suÉ , 356 * u£r_d©a ); 358  $discov”_šþ_cb ( boÞ sucûss , ušt8_t ©t_ecode , 359  bt_g©t_»suÉ * »suÉ , * u£r_d©a ) 361  discov”y_Ý * Ý = u£r_d©a ; 362  bt_g©t_þ›Á * þ›Á = Ý ->client; 363  bt_g©t_™” ™” ; 364  g©t_db_©Œibu‹ * ©Œ , * tmp ; 365 ušt16_t hªdË , ¡¬t , ’d ; 366 ušt128_t u128 ; 367 bt_uuid_t uuid ; 368  uuid_¡r [ MAX_LEN_UUID_STR ]; 369  šþudes_couÁ , i ; 371 ià(! sucûss ) { 372 ià( ©t_ecode =ð BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND ) 373  Ãxt ; 375  çžed ; 379 ©Œ = Ý -> cur_svc ; 380 ià(! ©Œ ) 381  çžed ; 383 ià(! »suÉ || ! `bt_g©t_™”_š™ (& ™” ,„esult)) 384  çžed ; 386 šþudes_couÁ = `bt_g©t_»suÉ_šþuded_couÁ ( »suÉ ); 387 ià( šþudes_couÁ == 0) 388  çžed ; 390 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 392 šþudes_couÁ ); 394  i = 0; i < šþudes_couÁ ; i++) { 395 ià(! `bt_g©t_™”_Ãxt_šþuded_£rviû (& ™” , & hªdË , & ¡¬t , 396 & ’d , u128 . d©a )) 399 `bt_uuid128_ü—‹ (& uuid , u128 ); 402 `bt_uuid_to_¡ršg (& uuid , uuid_¡r , (uuid_str)); 403 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 405 "uuid: %s", hªdË , ¡¬t , ’d , uuid_¡r ); 407 tmp = `g©t_db_g‘_©Œibu‹ ( þ›Á -> db , ¡¬t ); 408 ià(! tmp ) 409  çžed ; 411 tmp = `g©t_db_£rviû_add_šþuded ( ©Œ ,mp); 412 ià(! tmp ) 413  çžed ; 421 ià( `g©t_db_©Œibu‹_g‘_hªdË ( tmp è!ð hªdË ) 422  çžed ; 425 Ãxt : 427 ©Œ = `queue_pÝ_h—d ( Ý -> ³ndšg_svcs ); 428 ià(! ©Œ ) { 429  queue * tmp_queue ; 431 tmp_queue = Ý -> ³ndšg_svcs ; 432 Ý -> ³ndšg_svcs = op-> tmp_queue ; 433 Ý -> tmp_queue =mp_queue; 439 ©Œ = `queue_pÝ_h—d ( Ý -> ³ndšg_svcs ); 440 ià(! ©Œ ) 441  çžed ; 443 ià(! `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( ©Œ , & ¡¬t , & ’d )) 444  çžed ; 446 Ý -> cur_svc = ©Œ ; 447 ià( `bt_g©t_discov”_ch¬aù”i¡ics ( þ›Á -> ©t , 448 ¡¬t , ’d , 449 discov”_chrcs_cb , 450 `discov”y_Ý_»f ( Ý ), 451 discov”y_Ý_uÄef )) 454 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 456 `discov”y_Ý_uÄef ( Ý ); 457  çžed ; 460 `queue_push_ž ( Ý -> tmp_queue , ©Œ ); 461 Ý -> cur_svc = ©Œ ; 462 ià(! `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( ©Œ , & ¡¬t , & ’d )) 463  çžed ; 465 ià( `bt_g©t_discov”_šþuded_£rviûs ( þ›Á -> ©t , ¡¬t , ’d , 466 discov”_šþ_cb , 467 `discov”y_Ý_»f ( Ý ), 468 discov”y_Ý_uÄef )) 471 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 473 `discov”y_Ý_uÄef ( Ý ); 475 çžed : 476 Ý -> sucûss = çl£ ; 477 Ý -> `com¶‘e_func (Ý, çl£ , ©t_ecode ); 478 } } 480  schrc { 481 ušt16_t m¡¬t_hªdË ; 482 ušt16_t m’d_hªdË ; 483 ušt16_t mv®ue_hªdË ; 484 ušt8_t m´Ý”t›s ; 485 bt_uuid_t muuid ; 488  discov”_descs_cb ( boÞ sucûss , ušt8_t ©t_ecode , 489  bt_g©t_»suÉ * »suÉ , 490 * u£r_d©a ); 492  boÞ $discov”_descs ( discov”y_Ý * Ý , boÞ * discov”šg ) 494  bt_g©t_þ›Á * þ›Á = Ý ->client; 495  g©t_db_©Œibu‹ * ©Œ ; 496  chrc * chrc_d©a ; 497 ušt16_t desc_¡¬t ; 499 * discov”šg = çl£ ; 501 ( chrc_d©a = `queue_pÝ_h—d ( Ý -> ³ndšg_chrcs ))) { 502 ©Œ = `g©t_db_£rviû_add_ch¬aù”i¡ic ( Ý -> cur_svc , 503 & chrc_d©a -> uuid , 0, 504 chrc_d©a -> ´Ý”t›s , 505 NULL , NULL, NULL); 507 ià(! ©Œ ) 508  çžed ; 510 ià( `g©t_db_©Œibu‹_g‘_hªdË ( ©Œ ) != 511 chrc_d©a -> v®ue_hªdË ) 512  çžed ; 514 desc_¡¬t = chrc_d©a -> v®ue_hªdË + 1; 516 ià( desc_¡¬t > chrc_d©a -> ’d_hªdË ) { 517 `ä“ ( chrc_d©a ); 521 ià( `bt_g©t_discov”_desütÜs ( þ›Á -> ©t , desc_¡¬t , 522 chrc_d©a -> ’d_hªdË , 523 discov”_descs_cb , 524 `discov”y_Ý_»f ( Ý ), 525 discov”y_Ý_uÄef )) { 526 * discov”šg = Œue ; 527  dÚe ; 530 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 532 `discov”y_Ý_uÄef ( Ý ); 534  çžed ; 537 dÚe : 538 `ä“ ( chrc_d©a ); 539  Œue ; 541 çžed : 542 `ä“ ( chrc_d©a ); 543  çl£ ; 544 } } 546  $discov”_descs_cb ( boÞ sucûss , ušt8_t ©t_ecode , 547  bt_g©t_»suÉ * »suÉ , 548 * u£r_d©a ) 550  discov”y_Ý * Ý = u£r_d©a ; 551  bt_g©t_þ›Á * þ›Á = Ý ->client; 552  bt_g©t_™” ™” ; 553  g©t_db_©Œibu‹ * ©Œ ; 554 ušt16_t hªdË , ¡¬t , ’d ; 555 ušt128_t u128 ; 556 bt_uuid_t uuid ; 557  uuid_¡r [ MAX_LEN_UUID_STR ]; 558  desc_couÁ ; 559 boÞ discov”šg ; 561 ià(! sucûss ) { 562 ià( ©t_ecode =ð BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND ) { 563 sucûss = Œue ; 564  Ãxt ; 567  dÚe ; 570 ià(! »suÉ || ! `bt_g©t_™”_š™ (& ™” ,„esult)) 571  çžed ; 573 desc_couÁ = `bt_g©t_»suÉ_desütÜ_couÁ ( »suÉ ); 574 ià( desc_couÁ == 0) 575  çžed ; 577 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 578 "DesütÜ found: %u", desc_couÁ ); 580  `bt_g©t_™”_Ãxt_desütÜ (& ™” , & hªdË , u128 . d©a )) { 581 `bt_uuid128_ü—‹ (& uuid , u128 ); 584 `bt_uuid_to_¡ršg (& uuid , uuid_¡r , (uuid_str)); 585 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 587 hªdË , uuid_¡r ); 589 ©Œ = `g©t_db_£rviû_add_desütÜ ( Ý -> cur_svc , & uuid , 0, 590 NULL , NULL, NULL); 591 ià(! ©Œ ) 592  çžed ; 594 ià( `g©t_db_©Œibu‹_g‘_hªdË ( ©Œ è!ð hªdË ) 595  çžed ; 598 ià(! `discov”_descs ( Ý , & discov”šg )) 599  çžed ; 601 ià( discov”šg ) 604 Ãxt : 606 `g©t_db_£rviû_£t_aùive ( Ý -> cur_svc , Œue ); 608 ©Œ = `queue_pÝ_h—d ( Ý -> ³ndšg_svcs ); 609 ià(! ©Œ ) 610  dÚe ; 612 ià(! `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( ©Œ , & ¡¬t , & ’d )) 613  çžed ; 616 Ý -> cur_svc = ©Œ ; 617 ià( `bt_g©t_discov”_ch¬aù”i¡ics ( þ›Á -> ©t , ¡¬t , ’d , 618 discov”_chrcs_cb , 619 `discov”y_Ý_»f ( Ý ), 620 discov”y_Ý_uÄef )) 623 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 625 `discov”y_Ý_uÄef ( Ý ); 627 çžed : 628 sucûss = çl£ ; 630 dÚe : 631 Ý -> sucûss = success; 632 Ý -> `com¶‘e_func (Ý, sucûss , ©t_ecode ); 633 } } 635  $discov”_chrcs_cb ( boÞ sucûss , ušt8_t ©t_ecode , 636  bt_g©t_»suÉ * »suÉ , 637 * u£r_d©a ) 639  discov”y_Ý * Ý = u£r_d©a ; 640  bt_g©t_þ›Á * þ›Á = Ý ->client; 641  bt_g©t_™” ™” ; 642  g©t_db_©Œibu‹ * ©Œ ; 643  chrc * chrc_d©a ; 644 ušt16_t ¡¬t , ’d , v®ue ; 645 ušt8_t ´Ý”t›s ; 646 ušt128_t u128 ; 647 bt_uuid_t uuid ; 648  uuid_¡r [ MAX_LEN_UUID_STR ]; 649  chrc_couÁ ; 650 boÞ discov”šg ; 652 ià(! sucûss ) { 653 ià( ©t_ecode =ð BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND ) { 654 sucûss = Œue ; 655  Ãxt ; 658  dÚe ; 661 ià(! Ý -> cur_svc || ! »suÉ || ! `bt_g©t_™”_š™ (& ™” ,„esult)) 662  çžed ; 664 chrc_couÁ = `bt_g©t_»suÉ_ch¬aù”i¡ic_couÁ ( »suÉ ); 665 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 666 "Ch¬aù”i¡ic found: %u", chrc_couÁ ); 668 ià( chrc_couÁ == 0) 669  çžed ; 671  `bt_g©t_™”_Ãxt_ch¬aù”i¡ic (& ™” , & ¡¬t , & ’d , & v®ue , 672 & ´Ý”t›s , u128 . d©a )) { 673 `bt_uuid128_ü—‹ (& uuid , u128 ); 676 `bt_uuid_to_¡ršg (& uuid , uuid_¡r , (uuid_str)); 677 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 680 ¡¬t , ’d , v®ue , ´Ý”t›s , uuid_¡r ); 682 chrc_d©a = `Ãw0 ( chrc , 1); 683 ià(! chrc_d©a ) 684  çžed ; 686 chrc_d©a -> ¡¬t_hªdË = ¡¬t ; 687 chrc_d©a -> ’d_hªdË = ’d ; 688 chrc_d©a -> v®ue_hªdË = v®ue ; 689 chrc_d©a -> ´Ý”t›s =…roperties; 690 chrc_d©a -> uuid = uuid; 692 `queue_push_ž ( Ý -> ³ndšg_chrcs , chrc_d©a ); 699 ià(! `discov”_descs ( Ý , & discov”šg )) 700  çžed ; 702 ià( discov”šg ) 705 Ãxt : 707 `g©t_db_£rviû_£t_aùive ( Ý -> cur_svc , Œue ); 709 ©Œ = `queue_pÝ_h—d ( Ý -> ³ndšg_svcs ); 710 ià(! ©Œ ) 711  dÚe ; 713 ià(! `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( ©Œ , & ¡¬t , & ’d )) 714  çžed ; 717 Ý -> cur_svc = ©Œ ; 718 ià( `bt_g©t_discov”_ch¬aù”i¡ics ( þ›Á -> ©t , ¡¬t , ’d , 719 discov”_chrcs_cb , 720 `discov”y_Ý_»f ( Ý ), 721 discov”y_Ý_uÄef )) 724 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 726 `discov”y_Ý_uÄef ( Ý ); 728 çžed : 729 sucûss = çl£ ; 731 dÚe : 732 Ý -> sucûss = success; 733 Ý -> `com¶‘e_func (Ý, sucûss , ©t_ecode ); 734 } } 736  $discov”_£cÚd¬y_cb ( boÞ sucûss , ušt8_t ©t_ecode , 737  bt_g©t_»suÉ * »suÉ , 738 * u£r_d©a ) 740  discov”y_Ý * Ý = u£r_d©a ; 741  bt_g©t_þ›Á * þ›Á = Ý ->client; 742  bt_g©t_™” ™” ; 743  g©t_db_©Œibu‹ * ©Œ ; 744 ušt16_t ¡¬t , ’d ; 745 ušt128_t u128 ; 746 bt_uuid_t uuid ; 747  uuid_¡r [ MAX_LEN_UUID_STR ]; 749 ià(! sucûss ) { 750 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 752 " ATT ECODE: 0x%02x", ©t_ecode ); 753  ©t_ecode ) { 754  BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND : 755  BT_ATT_ERROR_UNSUPPORTED_GROUP_TYPE : 756  Ãxt ; 758  dÚe ; 762 ià(! »suÉ || ! `bt_g©t_™”_š™ (& ™” ,„esult)) { 763 sucûss = çl£ ; 764  dÚe ; 767 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 769 `bt_g©t_»suÉ_£rviû_couÁ ( »suÉ )); 771  `bt_g©t_™”_Ãxt_£rviû (& ™” , & ¡¬t , & ’d , u128 . d©a )) { 772 `bt_uuid128_ü—‹ (& uuid , u128 ); 775 `bt_uuid_to_¡ršg (& uuid , uuid_¡r , (uuid_str)); 776 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 778 ¡¬t , ’d , uuid_¡r ); 781 ©Œ = `g©t_db_š£¹_£rviû ( þ›Á -> db , ¡¬t , & uuid , çl£ , 782 ’d - ¡¬t + 1); 783 ià(! ©Œ ) { 784 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 786 sucûss = çl£ ; 787  dÚe ; 790 `queue_push_ž ( Ý -> ³ndšg_svcs , ©Œ ); 793 Ãxt : 795 ©Œ = `queue_pÝ_h—d ( Ý -> ³ndšg_svcs ); 798 ià(! ©Œ ) 799  dÚe ; 805 `queue_push_ž ( Ý -> tmp_queue , ©Œ ); 806 Ý -> cur_svc = ©Œ ; 808 ià(! `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( ©Œ , & ¡¬t , & ’d )) { 809 sucûss = çl£ ; 810  dÚe ; 813 ià( `bt_g©t_discov”_šþuded_£rviûs ( þ›Á -> ©t , ¡¬t , ’d , 814 discov”_šþ_cb , 815 `discov”y_Ý_»f ( Ý ), 816 discov”y_Ý_uÄef )) 819 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 821 `discov”y_Ý_uÄef ( Ý ); 823 dÚe : 824 Ý -> sucûss = success; 825 Ý -> `com¶‘e_func (Ý, sucûss , ©t_ecode ); 826 } } 828  $discov”_´im¬y_cb ( boÞ sucûss , ušt8_t ©t_ecode , 829  bt_g©t_»suÉ * »suÉ , 830 * u£r_d©a ) 832  discov”y_Ý * Ý = u£r_d©a ; 833  bt_g©t_þ›Á * þ›Á = Ý ->client; 834  bt_g©t_™” ™” ; 835  g©t_db_©Œibu‹ * ©Œ ; 836 ušt16_t ¡¬t , ’d ; 837 ušt128_t u128 ; 838 bt_uuid_t uuid ; 839  uuid_¡r [ MAX_LEN_UUID_STR ]; 841 ià(! sucûss ) { 842 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 844 " ATT ECODE: 0x%02x", ©t_ecode ); 845  dÚe ; 848 ià(! »suÉ || ! `bt_g©t_™”_š™ (& ™” ,„esult)) { 849 sucûss = çl£ ; 850  dÚe ; 853 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 855 `bt_g©t_»suÉ_£rviû_couÁ ( »suÉ )); 857  `bt_g©t_™”_Ãxt_£rviû (& ™” , & ¡¬t , & ’d , u128 . d©a )) { 858 `bt_uuid128_ü—‹ (& uuid , u128 ); 861 `bt_uuid_to_¡ršg (& uuid , uuid_¡r , (uuid_str)); 862 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 864 ¡¬t , ’d , uuid_¡r ); 866 ©Œ = `g©t_db_š£¹_£rviû ( þ›Á -> db , ¡¬t , & uuid , Œue , 867 ’d - ¡¬t + 1); 868 ià(! ©Œ ) { 869 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 871 sucûss = çl£ ; 872  dÚe ; 875 `queue_push_ž ( Ý -> ³ndšg_svcs , ©Œ ); 879 ià( `bt_g©t_discov”_£cÚd¬y_£rviûs ( þ›Á -> ©t , NULL , 880 Ý -> ¡¬t , op-> ’d , 881 discov”_£cÚd¬y_cb , 882 `discov”y_Ý_»f ( Ý ), 883 discov”y_Ý_uÄef )) 886 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 888 `discov”y_Ý_uÄef ( Ý ); 889 sucûss = çl£ ; 891 dÚe : 892 Ý -> sucûss = success; 893 Ý -> `com¶‘e_func (Ý, sucûss , ©t_ecode ); 894 } } 896  $nÙify_þ›Á_»ady ( bt_g©t_þ›Á * þ›Á , boÞ sucûss , 897 ušt8_t ©t_ecode ) 899 ià(! þ›Á -> »ady_ÿÎback ) 902 `bt_g©t_þ›Á_»f ( þ›Á ); 903 þ›Á -> `»ady_ÿÎback ( sucûss , ©t_ecode , cl›Á-> »ady_d©a ); 904 `bt_g©t_þ›Á_uÄef ( þ›Á ); 905 } } 907  $exchªge_mtu_cb ( boÞ sucûss , ušt8_t ©t_ecode , * u£r_d©a ) 909  discov”y_Ý * Ý = u£r_d©a ; 910  bt_g©t_þ›Á * þ›Á = Ý ->client; 912 Ý -> sucûss = success; 914 ià(! sucûss ) { 915 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 917 ©t_ecode ); 919 þ›Á -> š_š™ = çl£ ; 920 `nÙify_þ›Á_»ady ( þ›Á , sucûss , ©t_ecode ); 925 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 927 `bt_©t_g‘_mtu ( þ›Á -> ©t )); 930 ià(! `g©t_db_i£m±y ( þ›Á -> db )) { 931 Ý -> `com¶‘e_func (Ý, Œue , 0); 935 ià( `bt_g©t_discov”_®l_´im¬y_£rviûs ( þ›Á -> ©t , NULL , 936 discov”_´im¬y_cb , 937 `discov”y_Ý_»f ( Ý ), 938 discov”y_Ý_uÄef )) 941 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 944 þ›Á -> š_š™ = çl£ ; 945 `nÙify_þ›Á_»ady ( þ›Á , çl£ , ©t_ecode ); 947 `discov”y_Ý_uÄef ( Ý ); 948 } } 950  s£rviû_chªged_Ý { 951  bt_g©t_þ›Á * mþ›Á ; 952 ušt16_t m¡¬t_hªdË ; 953 ušt16_t m’d_hªdË ; 956 #ifdeà BLUEZ5_GATT_CLIENT 957 boÞ $bt_g©t_discov”_£rviûs ( bt_g©t_þ›Á * þ›Á ) 959  discov”y_Ý * Ý ; 961 ià(! þ›Á -> »ady ) 962  çl£ ; 964 Ý = `Ãw0 ( discov”y_Ý , 1); 965 ià(! Ý ) 966  çl£ ; 968 Ý -> þ›Á = client; 969 `g©t_þ›Á_þ—r_£rviûs ( Ý -> þ›Á ); 971 ià( `bt_g©t_discov”_®l_´im¬y_£rviûs ( þ›Á -> ©t , NULL , 972 discov”_´im¬y_cb , 973 `discov”y_Ý_»f ( Ý ), 974 discov”y_Ý_uÄef )) 975  Œue ; 977 `discov”y_Ý_uÄef ( Ý ); 979  çl£ ; 980 } } 983  $£rviû_chªged_»»gi¡”_cb ( id , ušt16_t ©t_ecode , 984 * u£r_d©a ) 986  bt_g©t_þ›Á * þ›Á = u£r_d©a ; 988 ià(! id || ©t_ecode ) { 989 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 994 þ›Á -> svc_chngd_šd_id = id ; 996 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 999 } } 1001  ´oûss_£rviû_chªged ( bt_g©t_þ›Á * þ›Á , 1002 ušt16_t ¡¬t_hªdË , 1003 ušt16_t ’d_hªdË ); 1004  £rviû_chªged_cb ( ušt16_t v®ue_hªdË , cÚ¡ ušt8_t * v®ue , 1005 ušt16_t Ëngth , * u£r_d©a ); 1007  $£rviû_chªged_com¶‘e ( discov”y_Ý * Ý , boÞ sucûss , 1008 ušt8_t ©t_ecode ) 1010  bt_g©t_þ›Á * þ›Á = Ý ->client; 1011  £rviû_chªged_Ý * Ãxt_sc_Ý ; 1012 ušt16_t ¡¬t_hªdË = Ý -> ¡¬t ; 1013 ušt16_t ’d_hªdË = Ý -> ’d ; 1014  g©t_db_©Œibu‹ * ©Œ ; 1015 bt_uuid_t uuid ; 1016  queue * q ; 1018 þ›Á -> š_svc_chngd = çl£ ; 1020 ià(! sucûss && ©t_ecode !ð BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND ) { 1021 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 1023 "”rÜ: 0x%02x", ©t_ecode ); 1025 `g©t_db_þ—r_¿nge ( þ›Á -> db , ¡¬t_hªdË , ’d_hªdË ); 1029 ià( þ›Á -> svc_chngd_ÿÎback ) 1030 þ›Á -> `svc_chngd_ÿÎback ( ¡¬t_hªdË , ’d_hªdË , 1031 þ›Á -> svc_chngd_d©a ); 1034 Ãxt_sc_Ý = `queue_pÝ_h—d ( þ›Á -> svc_chngd_queue ); 1035 ià( Ãxt_sc_Ý ) { 1036 `´oûss_£rviû_chªged ( þ›Á , Ãxt_sc_Ý -> ¡¬t_hªdË , 1037 Ãxt_sc_Ý -> ’d_hªdË ); 1038 `ä“ ( Ãxt_sc_Ý ); 1043 q = `queue_Ãw (); 1044 ià(! q ) 1047 `bt_uuid16_ü—‹ (& uuid , SVC_CHNGD_UUID ); 1049 `g©t_db_fšd_by_ty³ ( þ›Á -> db , ¡¬t_hªdË , ’d_hªdË , & uuid , q ); 1050 ià( `queue_i£m±y ( q )) { 1051 `queue_de¡roy ( q , NULL ); 1055 ©Œ = `queue_pÝ_h—d ( q ); 1056 `queue_de¡roy ( q , NULL ); 1061 ià( `bt_g©t_þ›Á_»gi¡”_nÙify ( þ›Á , 1062 `g©t_db_©Œibu‹_g‘_hªdË ( ©Œ ), 1063 £rviû_chªged_»»gi¡”_cb , 1064 £rviû_chªged_cb , 1065 þ›Á , NULL )) 1068 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 1070 } } 1072  $£rviû_chªged_çžu» ( discov”y_Ý * Ý ) 1074 `g©t_db_þ—r_¿nge ( Ý -> þ›Á -> db , op-> ¡¬t , op-> ’d ); 1075 } } 1077  $´oûss_£rviû_chªged ( bt_g©t_þ›Á * þ›Á , 1078 ušt16_t ¡¬t_hªdË , 1079 ušt16_t ’d_hªdË ) 1081  discov”y_Ý * Ý ; 1084 `g©t_þ›Á_»move_®l_nÙify_š_¿nge ( þ›Á , ¡¬t_hªdË , 1085 ’d_hªdË ); 1086 `g©t_þ›Á_»move_nÙify_chrcs_š_¿nge ( þ›Á , ¡¬t_hªdË , 1087 ’d_hªdË ); 1092 `g©t_db_þ—r_¿nge ( þ›Á -> db , ¡¬t_hªdË , ’d_hªdË ); 1094 Ý = `discov”y_Ý_ü—‹ ( þ›Á , ¡¬t_hªdË , ’d_hªdË , 1095 £rviû_chªged_com¶‘e , 1096 £rviû_chªged_çžu» ); 1097 ià(! Ý ) 1098  çž ; 1100 ià( `bt_g©t_discov”_´im¬y_£rviûs ( þ›Á -> ©t , NULL , 1101 ¡¬t_hªdË , ’d_hªdË , 1102 discov”_´im¬y_cb , 1103 `discov”y_Ý_»f ( Ý ), 1104 discov”y_Ý_uÄef )) { 1105 þ›Á -> š_svc_chngd = Œue ; 1109 çž : 1110 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 1113 `discov”y_Ý_ä“ ( Ý ); 1114 } } 1116  $£rviû_chªged_cb ( ušt16_t v®ue_hªdË , cÚ¡ ušt8_t * v®ue , 1117 ušt16_t Ëngth , * u£r_d©a ) 1119  bt_g©t_þ›Á * þ›Á = u£r_d©a ; 1120  £rviû_chªged_Ý * Ý ; 1121 ušt16_t ¡¬t , ’d ; 1123 ià( Ëngth != 4) 1126 ¡¬t = `g‘_Ë16 ( v®ue ); 1127 ’d = `g‘_Ë16 ( v®ue + 2); 1129 ià( ¡¬t > ’d ) { 1130 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 1135 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 1137 ¡¬t , ’d ); 1139 ià(! þ›Á -> š_svc_chngd ) { 1140 `´oûss_£rviû_chªged ( þ›Á , ¡¬t , ’d ); 1144 Ý = `Ãw0 ( £rviû_chªged_Ý , 1); 1145 ià(! Ý ) 1148 Ý -> ¡¬t_hªdË = ¡¬t ; 1149 Ý -> ’d_hªdË = ’d ; 1151 `queue_push_ž ( þ›Á -> svc_chngd_queue , Ý ); 1152 } } 1154  $£rviû_chªged_»gi¡”_cb ( id , ušt16_t ©t_ecode , 1155 * u£r_d©a ) 1157 boÞ sucûss ; 1158  bt_g©t_þ›Á * þ›Á = u£r_d©a ; 1160 ià(! id || ©t_ecode ) { 1161 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 1163 sucûss = çl£ ; 1164  dÚe ; 1167 þ›Á -> svc_chngd_šd_id = id ; 1168 þ›Á -> »ady = Œue ; 1169 sucûss = Œue ; 1170 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 1171 "Regi¡”ed hªd˸fÜ \"S”viû Chªged\": %u", id ); 1173 dÚe : 1174 `nÙify_þ›Á_»ady ( þ›Á , sucûss , ©t_ecode ); 1175 } } 1177  $š™_com¶‘e ( discov”y_Ý * Ý , boÞ sucûss , 1178 ušt8_t ©t_ecode ) 1180  bt_g©t_þ›Á * þ›Á = Ý ->client; 1181 boÞ »gi¡”ed ; 1182  g©t_db_©Œibu‹ * ©Œ ; 1183 bt_uuid_t uuid ; 1184  queue * q ; 1186 þ›Á -> š_š™ = çl£ ; 1188 ià(! sucûss ) 1189  çž ; 1191 q = `queue_Ãw (); 1192 ià(! q ) 1193  çž ; 1195 `bt_uuid16_ü—‹ (& uuid , SVC_CHNGD_UUID ); 1197 `g©t_db_fšd_by_ty³ ( þ›Á -> db , 0x0001, 0xffff, & uuid , q ); 1198 ià( `queue_i£m±y ( q )) { 1199 `queue_de¡roy ( q , NULL ); 1200 þ›Á -> »ady = Œue ; 1201  dÚe ; 1204 ©Œ = `queue_pÝ_h—d ( q ); 1205 `queue_de¡roy ( q , NULL ); 1212 þ›Á -> »ady = Œue ; 1213 »gi¡”ed = `bt_g©t_þ›Á_»gi¡”_nÙify ( þ›Á , 1214 `g©t_db_©Œibu‹_g‘_hªdË ( ©Œ ), 1215 £rviû_chªged_»gi¡”_cb , 1216 £rviû_chªged_cb , 1217 þ›Á , NULL ); 1218 þ›Á -> »ady = çl£ ; 1220 ià( »gi¡”ed ) 1223 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 1226 çž : 1227 `utž_debug ( þ›Á -> debug_ÿÎback , cl›Á-> debug_d©a , 1230 Ý -> sucûss = çl£ ; 1232 dÚe : 1233 `nÙify_þ›Á_»ady ( þ›Á , sucûss , ©t_ecode ); 1234 } } 1236  $š™_çž ( discov”y_Ý * Ý ) 1238 `g©t_db_þ—r ( Ý -> þ›Á -> db ); 1239 } } 1241  boÞ $g©t_þ›Á_š™ ( bt_g©t_þ›Á * þ›Á , ušt16_t mtu ) 1243  discov”y_Ý * Ý ; 1245 ià( þ›Á -> š_š™ || cl›Á-> »ady ) 1246  çl£ ; 1248 Ý = `discov”y_Ý_ü—‹ ( þ›Á , 0x0001, 0xffff, š™_com¶‘e , 1249 š™_çž ); 1250 ià(! Ý ) 1251  çl£ ; 1254 ià(! `bt_g©t_exchªge_mtu ( þ›Á -> ©t , `MAX ( BT_ATT_DEFAULT_LE_MTU , mtu ), 1255 exchªge_mtu_cb , 1256 `discov”y_Ý_»f ( Ý ), 1257 discov”y_Ý_uÄef )) { 1258 `discov”y_Ý_ä“ ( Ý ); 1259  çl£ ; 1262 þ›Á -> š_š™ = Œue ; 1264  Œue ; 1265 } } 1267  spdu_d©a { 1268 cÚ¡ * mpdu ; 1269 ušt16_t mËngth ; 1272  $com¶‘e_nÙify_»que¡ (* d©a ) 1274  nÙify_d©a *nÙify_d©¨ð d©a ; 1277 `__sync_ãtch_ªd_add (& nÙify_d©a -> chrc -> nÙify_couÁ , 1); 1280 `queue_push_ž ( nÙify_d©a -> þ›Á -> nÙify_li¡ , 1281 `nÙify_d©a_»f ( nÙify_d©a )); 1286 ià( nÙify_d©a -> þ›Á -> Ãxt_»g_id < 1) 1287 nÙify_d©a -> þ›Á -> Ãxt_»g_id = 1; 1289 nÙify_d©a -> id =‚Ùify_d©a-> þ›Á -> Ãxt_»g_id ++; 1290 nÙify_d©a -> `ÿÎback ÒÙify_d©a-> id , 0,‚Ùify_d©a-> u£r_d©a ); 1291 } } 1293  boÞ $nÙify_d©a_wr™e_ccc ( nÙify_d©a *nÙify_d©a, boÞ ’abË , 1294 bt_©t_»¥Ú£_func_t ÿÎback ) 1296 ušt8_t pdu [4]; 1298 `as£¹ ( nÙify_d©a -> chrc -> ccc_hªdË ); 1299 `mem£t ( pdu , 0, (pdu)); 1300 `put_Ë16 ( nÙify_d©a -> chrc -> ccc_hªdË , pdu ); 1302 ià( ’abË ) { 1306 ià( nÙify_d©a -> chrc -> ´Ý”t›s & BT_GATT_CHRC_PROP_NOTIFY ) 1307 pdu [2] = 0x01; 1309 ià( nÙify_d©a -> chrc -> ´Ý”t›s & BT_GATT_CHRC_PROP_INDICATE ) 1310 pdu [2] |= 0x02; 1312 ià(! pdu [2]) 1313  çl£ ; 1316 nÙify_d©a -> chrc -> ccc_wr™e_id = `bt_©t_£nd ÒÙify_d©a-> þ›Á -> ©t , 1317 BT_ATT_OP_WRITE_REQ , 1318 pdu , (pdu), 1319 ÿÎback , 1320 nÙify_d©a , nÙify_d©a_uÄef ); 1322  !! nÙify_d©a -> chrc -> ccc_wr™e_id ; 1323 } } 1325  ušt8_t $´oûss_”rÜ (cÚ¡ * pdu , ušt16_t Ëngth ) 1327 cÚ¡  bt_©t_pdu_”rÜ_r¥ * ”rÜ_pdu ; 1329 ià(! pdu || Ëngth !ð( bt_©t_pdu_”rÜ_r¥ )) 1332 ”rÜ_pdu = pdu ; 1334  ”rÜ_pdu -> ecode ; 1335 } } 1337  $’abË_ccc_ÿÎback ( ušt8_t Ýcode , cÚ¡ * pdu , 1338 ušt16_t Ëngth , * u£r_d©a ) 1340  nÙify_d©a *nÙify_d©¨ð u£r_d©a ; 1341 ušt16_t ©t_ecode ; 1343 `as£¹ (! nÙify_d©a -> chrc -> nÙify_couÁ ); 1344 `as£¹ ( nÙify_d©a -> chrc -> ccc_wr™e_id ); 1346 nÙify_d©a -> chrc -> ccc_wr™e_id = 0; 1348 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 1349 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 1355 nÙify_d©a -> `ÿÎback (0, ©t_ecode ,‚Ùify_d©a-> u£r_d©a ); 1357 ( nÙify_d©a = `queue_pÝ_h—d ( 1358 nÙify_d©a -> chrc -> »g_nÙify_queue ))) { 1360 ià( `nÙify_d©a_wr™e_ccc ( nÙify_d©a , Œue , 1361 ’abË_ccc_ÿÎback )) 1369 `bt_g©t_þ›Á_»f ( nÙify_d©a -> þ›Á ); 1371 `com¶‘e_nÙify_»que¡ ( nÙify_d©a ); 1372 `queue_»move_®l ( nÙify_d©a -> chrc -> »g_nÙify_queue , NULL , NULL, 1373 com¶‘e_nÙify_»que¡ ); 1375 `bt_g©t_þ›Á_uÄef ( nÙify_d©a -> þ›Á ); 1376 } } 1378  $di§bË_ccc_ÿÎback ( ušt8_t Ýcode , cÚ¡ * pdu , 1379 ušt16_t Ëngth , * u£r_d©a ) 1381  nÙify_d©a *nÙify_d©¨ð u£r_d©a ; 1382  nÙify_d©a * Ãxt_d©a ; 1384 `as£¹ (! nÙify_d©a -> chrc -> nÙify_couÁ ); 1385 `as£¹ ( nÙify_d©a -> chrc -> ccc_wr™e_id ); 1387 nÙify_d©a -> chrc -> ccc_wr™e_id = 0; 1393 Ãxt_d©a = `queue_pÝ_h—d ( nÙify_d©a -> chrc -> »g_nÙify_queue ); 1394 ià(! Ãxt_d©a || `nÙify_d©a_wr™e_ccc ( nÙify_d©a , Œue , 1395 ’abË_ccc_ÿÎback )) 1398 } } 1400  $com¶‘e_uÄegi¡”_nÙify (* d©a ) 1402  nÙify_d©a *nÙify_d©¨ð d©a ; 1404 ià( `__sync_sub_ªd_ãtch (& nÙify_d©a -> chrc -> nÙify_couÁ , 1)) { 1405 `nÙify_d©a_uÄef ( nÙify_d©a ); 1409 `nÙify_d©a_wr™e_ccc ( nÙify_d©a , çl£ , di§bË_ccc_ÿÎback ); 1410 } } 1412  $nÙify_hªdËr (* d©a , * u£r_d©a ) 1414  nÙify_d©a *nÙify_d©¨ð d©a ; 1415  pdu_d©a *pdu_d©¨ð u£r_d©a ; 1416 ušt16_t v®ue_hªdË ; 1417 cÚ¡ ušt8_t * v®ue = NULL ; 1419 v®ue_hªdË = `g‘_Ë16 ( pdu_d©a -> pdu ); 1421 ià( nÙify_d©a -> chrc -> v®ue_hªdË != value_handle) 1424 ià( pdu_d©a -> Ëngth > 2) 1425 v®ue = pdu_d©a -> pdu + 2; 1427 ià( nÙify_d©a -> nÙify ) 1428 nÙify_d©a -> `nÙify ( v®ue_hªdË , v®ue , pdu_d©a -> Ëngth - 2, 1429 nÙify_d©a -> u£r_d©a ); 1430 } } 1432  $nÙify_cb ( ušt8_t Ýcode , cÚ¡ * pdu , ušt16_t Ëngth , 1433 * u£r_d©a ) 1435  bt_g©t_þ›Á * þ›Á = u£r_d©a ; 1436  pdu_d©a …du_data; 1438 `bt_g©t_þ›Á_»f ( þ›Á ); 1440 `mem£t (& pdu_d©a , 0, (pdu_data)); 1441 pdu_d©a . pdu =…du; 1442 pdu_d©a . Ëngth =†ength; 1444 `queue_fÜ—ch ( þ›Á -> nÙify_li¡ , nÙify_hªdËr , & pdu_d©a ); 1446 ià( Ýcode =ð BT_ATT_OP_HANDLE_VAL_IND ) 1447 `bt_©t_£nd ( þ›Á -> ©t , BT_ATT_OP_HANDLE_VAL_CONF , NULL , 0, 1448 NULL , NULL, NULL); 1450 `bt_g©t_þ›Á_uÄef ( þ›Á ); 1451 } } 1453  lÚg_wr™e_Ý_uÄef (* d©a ); 1455  $bt_g©t_þ›Á_ä“ ( bt_g©t_þ›Á * þ›Á ) 1457 ià( þ›Á -> »ady_de¡roy ) 1458 þ›Á -> `»ady_de¡roy (þ›Á-> »ady_d©a ); 1460 ià( þ›Á -> debug_de¡roy ) 1461 þ›Á -> `debug_de¡roy (þ›Á-> debug_d©a ); 1463 ià( þ›Á -> ©t ) { 1464 `bt_©t_uÄegi¡”_discÚÃù ( þ›Á -> ©t , cl›Á-> disc_id ); 1465 `bt_©t_uÄegi¡” ( þ›Á -> ©t , cl›Á-> nÙify_id ); 1466 `bt_©t_uÄegi¡” ( þ›Á -> ©t , cl›Á-> šd_id ); 1467 `bt_©t_uÄef ( þ›Á -> ©t ); 1470 `g©t_db_uÄef ( þ›Á -> db ); 1472 `queue_de¡roy ( þ›Á -> svc_chngd_queue , ä“ ); 1473 `queue_de¡roy ( þ›Á -> lÚg_wr™e_queue , lÚg_wr™e_Ý_uÄef ); 1474 `queue_de¡roy ( þ›Á -> nÙify_li¡ , nÙify_d©a_uÄef ); 1475 `queue_de¡roy ( þ›Á -> nÙify_chrcs , nÙify_chrc_ä“ ); 1477 `ä“ ( þ›Á ); 1478 } } 1480  $©t_discÚÃù_cb ( ”r , * u£r_d©a ) 1482  bt_g©t_þ›Á * þ›Á = u£r_d©a ; 1483 boÞ š_š™ = þ›Á ->in_init; 1485 þ›Á -> disc_id = 0; 1487 `bt_©t_uÄef ( þ›Á -> ©t ); 1488 þ›Á -> ©t = NULL ; 1490 þ›Á -> š_š™ = çl£ ; 1491 þ›Á -> »ady = çl£ ; 1493 ià( š_š™ ) 1494 `nÙify_þ›Á_»ady ( þ›Á , çl£ , 0); 1495 } } 1497  bt_g©t_þ›Á * $bt_g©t_þ›Á_Ãw ( g©t_db * db , 1498  bt_©t * ©t , 1499 ušt16_t mtu ) 1501  bt_g©t_þ›Á * þ›Á ; 1503 ià(! ©t || ! db ) 1504  NULL ; 1506 þ›Á = `Ãw0 ( bt_g©t_þ›Á , 1); 1507 ià(! þ›Á ) 1508  NULL ; 1510 þ›Á -> disc_id = `bt_©t_»gi¡”_discÚÃù ( ©t , ©t_discÚÃù_cb , 1511 þ›Á , NULL ); 1512 ià(! þ›Á -> disc_id ) 1513  çž ; 1515 þ›Á -> lÚg_wr™e_queue = `queue_Ãw (); 1516 ià(! þ›Á -> lÚg_wr™e_queue ) 1517  çž ; 1519 þ›Á -> svc_chngd_queue = `queue_Ãw (); 1520 ià(! þ›Á -> svc_chngd_queue ) 1521  çž ; 1523 þ›Á -> nÙify_li¡ = `queue_Ãw (); 1524 ià(! þ›Á -> nÙify_li¡ ) 1525  çž ; 1527 þ›Á -> nÙify_chrcs = `queue_Ãw (); 1528 ià(! þ›Á -> nÙify_chrcs ) 1529  çž ; 1531 þ›Á -> nÙify_id = `bt_©t_»gi¡” ( ©t , BT_ATT_OP_HANDLE_VAL_NOT , 1532 nÙify_cb , þ›Á , NULL ); 1533 ià(! þ›Á -> nÙify_id ) 1534  çž ; 1536 þ›Á -> šd_id = `bt_©t_»gi¡” ( ©t , BT_ATT_OP_HANDLE_VAL_IND , 1537 nÙify_cb , þ›Á , NULL ); 1538 ià(! þ›Á -> šd_id ) 1539  çž ; 1541 þ›Á -> ©t = `bt_©t_»f (att); 1542 þ›Á -> db = `g©t_db_»f (db); 1544 ià(! `g©t_þ›Á_š™ ( þ›Á , mtu )) 1545  çž ; 1547  `bt_g©t_þ›Á_»f ( þ›Á ); 1549 çž : 1550 `bt_g©t_þ›Á_ä“ ( þ›Á ); 1551  NULL ; 1552 } } 1554  bt_g©t_þ›Á * $bt_g©t_þ›Á_»f ( bt_g©t_þ›Á * þ›Á ) 1556 ià(! þ›Á ) 1557  NULL ; 1559 `__sync_ãtch_ªd_add (& þ›Á -> »f_couÁ , 1); 1561  þ›Á ; 1562 } } 1564  $bt_g©t_þ›Á_uÄef ( bt_g©t_þ›Á * þ›Á ) 1566 ià(! þ›Á ) 1569 ià( `__sync_sub_ªd_ãtch (& þ›Á -> »f_couÁ , 1)) 1572 `bt_g©t_þ›Á_ä“ ( þ›Á ); 1573 } } 1575 boÞ $bt_g©t_þ›Á_is_»ady ( bt_g©t_þ›Á * þ›Á ) 1577  ( þ›Á && cl›Á-> »ady ); 1578 } } 1580 boÞ $bt_g©t_þ›Á_£t_»ady_hªdËr ( bt_g©t_þ›Á * þ›Á , 1581 bt_g©t_þ›Á_ÿÎback_t ÿÎback , 1582 * u£r_d©a , 1583 bt_g©t_þ›Á_de¡roy_func_t de¡roy ) 1585 ià(! þ›Á ) 1586  çl£ ; 1588 ià( þ›Á -> »ady_de¡roy ) 1589 þ›Á -> `»ady_de¡roy (þ›Á-> »ady_d©a ); 1591 þ›Á -> »ady_ÿÎback = ÿÎback ; 1592 þ›Á -> »ady_de¡roy = de¡roy ; 1593 þ›Á -> »ady_d©a = u£r_d©a ; 1595  Œue ; 1596 } } 1598 boÞ $bt_g©t_þ›Á_£t_£rviû_chªged ( bt_g©t_þ›Á * þ›Á , 1599 bt_g©t_þ›Á_£rviû_chªged_ÿÎback_t ÿÎback , 1600 * u£r_d©a , 1601 bt_g©t_þ›Á_de¡roy_func_t de¡roy ) 1603 ià(! þ›Á ) 1604  çl£ ; 1606 ià( þ›Á -> svc_chngd_de¡roy ) 1607 þ›Á -> `svc_chngd_de¡roy (þ›Á-> svc_chngd_d©a ); 1609 þ›Á -> svc_chngd_ÿÎback = ÿÎback ; 1610 þ›Á -> svc_chngd_de¡roy = de¡roy ; 1611 þ›Á -> svc_chngd_d©a = u£r_d©a ; 1613  Œue ; 1614 } } 1616 boÞ $bt_g©t_þ›Á_£t_debug ( bt_g©t_þ›Á * þ›Á , 1617 bt_g©t_þ›Á_debug_func_t ÿÎback , 1618 * u£r_d©a , 1619 bt_g©t_þ›Á_de¡roy_func_t de¡roy ) { 1620 ià(! þ›Á ) 1621  çl£ ; 1623 ià( þ›Á -> debug_de¡roy ) 1624 þ›Á -> `debug_de¡roy (þ›Á-> debug_d©a ); 1626 þ›Á -> debug_ÿÎback = ÿÎback ; 1627 þ›Á -> debug_de¡roy = de¡roy ; 1628 þ›Á -> debug_d©a = u£r_d©a ; 1630  Œue ; 1631 } } 1633 ušt16_t $bt_g©t_þ›Á_g‘_mtu ( bt_g©t_þ›Á * þ›Á ) 1635 ià(! þ›Á || !þ›Á-> ©t ) 1638  `bt_©t_g‘_mtu ( þ›Á -> ©t ); 1639 } } 1641  s»ad_Ý { 1642 bt_g©t_þ›Á_»ad_ÿÎback_t mÿÎback ; 1643 * mu£r_d©a ; 1644 bt_g©t_þ›Á_de¡roy_func_t mde¡roy ; 1647  $de¡roy_»ad_Ý (* d©a ) 1649  »ad_Ý * Ý = d©a ; 1651 ià( Ý -> de¡roy ) 1652 Ý -> `de¡roy (Ý-> u£r_d©a ); 1654 `ä“ ( Ý ); 1655 } } 1657  $»ad_cb ( ušt8_t Ýcode , cÚ¡ * pdu , ušt16_t Ëngth , 1658 * u£r_d©a ) 1660  »ad_Ý * Ý = u£r_d©a ; 1661 boÞ sucûss ; 1662 ušt8_t ©t_ecode = 0; 1663 cÚ¡ ušt8_t * v®ue = NULL ; 1664 ušt16_t v®ue_Ën = 0; 1666 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 1667 sucûss = çl£ ; 1668 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 1669  dÚe ; 1672 ià( Ýcode !ð BT_ATT_OP_READ_RSP || (! pdu && Ëngth )) { 1673 sucûss = çl£ ; 1674  dÚe ; 1677 sucûss = Œue ; 1678 v®ue_Ën = Ëngth ; 1679 ià( v®ue_Ën ) 1680 v®ue = pdu ; 1682 dÚe : 1683 ià( Ý -> ÿÎback ) 1684 Ý -> `ÿÎback ( sucûss , ©t_ecode , v®ue , Ëngth , op-> u£r_d©a ); 1685 } } 1687 boÞ $bt_g©t_þ›Á_»ad_v®ue ( bt_g©t_þ›Á * þ›Á , 1688 ušt16_t v®ue_hªdË , 1689 bt_g©t_þ›Á_»ad_ÿÎback_t ÿÎback , 1690 * u£r_d©a , 1691 bt_g©t_þ›Á_de¡roy_func_t de¡roy ) 1693  »ad_Ý * Ý ; 1694 ušt8_t pdu [2]; 1696 ià(! þ›Á ) 1697  çl£ ; 1699 Ý = `Ãw0 ( »ad_Ý , 1); 1700 ià(! Ý ) 1701  çl£ ; 1703 Ý -> ÿÎback = callback; 1704 Ý -> u£r_d©a = user_data; 1705 Ý -> de¡roy = destroy; 1707 `put_Ë16 ( v®ue_hªdË , pdu ); 1709 ià(! `bt_©t_£nd ( þ›Á -> ©t , BT_ATT_OP_READ_REQ , pdu , (pdu), 1710 »ad_cb , Ý , 1711 de¡roy_»ad_Ý )) { 1712 `ä“ ( Ý ); 1713  çl£ ; 1716  Œue ; 1717 } } 1719  $»ad_muÉË_cb ( ušt8_t Ýcode , cÚ¡ * pdu , ušt16_t Ëngth , 1720 * u£r_d©a ) 1722  »ad_Ý * Ý = u£r_d©a ; 1723 ušt8_t ©t_ecode ; 1724 boÞ sucûss ; 1726 ià( Ýcode !ð BT_ATT_OP_READ_MULT_RSP || (! pdu && Ëngth )) { 1727 sucûss = çl£ ; 1729 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) 1730 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 1732 ©t_ecode = 0; 1734 pdu = NULL ; 1735 Ëngth = 0; 1737 sucûss = Œue ; 1738 ©t_ecode = 0; 1741 ià( Ý -> ÿÎback ) 1742 Ý -> `ÿÎback ( sucûss , ©t_ecode , pdu , Ëngth , op-> u£r_d©a ); 1743 } } 1745 boÞ $bt_g©t_þ›Á_»ad_muÉË ( bt_g©t_þ›Á * þ›Á , 1746 ušt16_t * hªdËs , ušt8_t num_hªdËs , 1747 bt_g©t_þ›Á_»ad_ÿÎback_t ÿÎback , 1748 * u£r_d©a , 1749 bt_g©t_þ›Á_de¡roy_func_t de¡roy ) 1751 ušt8_t pdu [ num_hªdËs * 2]; 1752  »ad_Ý * Ý ; 1753  i ; 1755 ià(! þ›Á ) 1756  çl£ ; 1758 ià( num_hªdËs < 2) 1759  çl£ ; 1761 ià( num_hªdËs * 2 > `bt_©t_g‘_mtu ( þ›Á -> ©t ) - 1) 1762  çl£ ; 1764 Ý = `Ãw0 ( »ad_Ý , 1); 1765 ià(! Ý ) 1766  çl£ ; 1768 Ý -> ÿÎback = callback; 1769 Ý -> u£r_d©a = user_data; 1770 Ý -> de¡roy = destroy; 1772  i = 0; i < num_hªdËs ; i++) 1773 `put_Ë16 ( hªdËs [ i ], pdu + (2 * i)); 1775 ià(! `bt_©t_£nd ( þ›Á -> ©t , BT_ATT_OP_READ_MULT_REQ , pdu , (pdu), 1776 »ad_muÉË_cb , Ý , de¡roy_»ad_Ý )) { 1777 `ä“ ( Ý ); 1778  çl£ ; 1781  Œue ; 1782 } } 1784  s»ad_lÚg_Ý { 1785  bt_g©t_þ›Á * mþ›Á ; 1786  m»f_couÁ ; 1787 ušt16_t mv®ue_hªdË ; 1788 size_t mÜig_off£t ; 1789 size_t moff£t ; 1790  queue * mblobs ; 1791 bt_g©t_þ›Á_»ad_ÿÎback_t mÿÎback ; 1792 * mu£r_d©a ; 1793 bt_g©t_þ›Á_de¡roy_func_t mde¡roy ; 1796  sblob { 1797 ušt8_t * md©a ; 1798 ušt16_t moff£t ; 1799 ušt16_t mËngth ; 1802  blob * $ü—‹_blob (cÚ¡ ušt8_t * d©a , ušt16_t Ën , 1803 ušt16_t off£t ) 1805  blob *blob; 1807 blob = `Ãw0 (blob, 1); 1808 ià(! blob ) 1809  NULL ; 1811 blob -> d©a = `m®loc ( Ën ); 1812 ià(! blob -> d©a ) { 1813 `ä“ ( blob ); 1814  NULL ; 1817 `memýy ( blob -> d©a , d©a, Ën ); 1818 blob -> Ëngth = Ën ; 1819 blob -> off£t = offset; 1821  blob ; 1822 } } 1824  $de¡roy_blob (* d©a ) 1826  blob *blob = d©a ; 1828 `ä“ ( blob -> d©a ); 1829 `ä“ ( blob ); 1830 } } 1832  »ad_lÚg_Ý * $»ad_lÚg_Ý_»f ( »ad_lÚg_Ý * Ý ) 1834 `__sync_ãtch_ªd_add (& Ý -> »f_couÁ , 1); 1836  Ý ; 1837 } } 1839  $»ad_lÚg_Ý_uÄef (* d©a ) 1841  »ad_lÚg_Ý * Ý = d©a ; 1843 ià( `__sync_sub_ªd_ãtch (& Ý -> »f_couÁ , 1)) 1846 ià( Ý -> de¡roy ) 1847 Ý -> `de¡roy (Ý-> u£r_d©a ); 1849 `queue_de¡roy ( Ý -> blobs , de¡roy_blob ); 1851 `ä“ ( Ý ); 1852 } } 1854  $­³nd_blob (* d©a , * u£r_d©a ) 1856  blob *blob = d©a ; 1857 ušt8_t * v®ue = u£r_d©a ; 1859 `memýy ( v®ue + blob -> off£t , blob-> d©a , blob-> Ëngth ); 1860 } } 1862  $com¶‘e_»ad_lÚg_Ý ( »ad_lÚg_Ý * Ý , boÞ sucûss , 1863 ušt8_t ©t_ecode ) 1865 ušt8_t * v®ue = NULL ; 1866 ušt16_t Ëngth = 0; 1868 ià(! sucûss ) 1869  dÚe ; 1871 Ëngth = Ý -> off£t - op-> Üig_off£t ; 1873 ià(! Ëngth ) 1874  dÚe ; 1876 v®ue = `m®loc ( Ëngth ); 1877 ià(! v®ue ) { 1878 sucûss = çl£ ; 1879  dÚe ; 1882 `queue_fÜ—ch ( Ý -> blobs , ­³nd_blob , v®ue - op-> Üig_off£t ); 1884 dÚe : 1885 ià( Ý -> ÿÎback ) 1886 Ý -> `ÿÎback ( sucûss , ©t_ecode , v®ue , Ëngth , op-> u£r_d©a ); 1888 `ä“ ( v®ue ); 1889 } } 1891  $»ad_lÚg_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 1892 ušt16_t Ëngth , * u£r_d©a ) 1894  »ad_lÚg_Ý * Ý = u£r_d©a ; 1895  blob *blob; 1896 boÞ sucûss ; 1897 ušt8_t ©t_ecode = 0; 1899 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 1900 sucûss = çl£ ; 1901 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 1902  dÚe ; 1905 ià( Ýcode !ð BT_ATT_OP_READ_BLOB_RSP || (! pdu && Ëngth )) { 1906 sucûss = çl£ ; 1907  dÚe ; 1910 ià(! Ëngth ) 1911  sucûss ; 1913 blob = `ü—‹_blob ( pdu , Ëngth , Ý -> off£t ); 1914 ià(! blob ) { 1915 sucûss = çl£ ; 1916  dÚe ; 1919 `queue_push_ž ( Ý -> blobs , blob ); 1920 Ý -> off£t +ð Ëngth ; 1921 ià( Ý -> off£t > UINT16_MAX ) 1922  sucûss ; 1924 ià( Ëngth >ð `bt_©t_g‘_mtu ( Ý -> þ›Á -> ©t ) - 1) { 1925 ušt8_t pdu [4]; 1927 `put_Ë16 ( Ý -> v®ue_hªdË , pdu ); 1928 `put_Ë16 ( Ý -> off£t , pdu + 2); 1930 ià( `bt_©t_£nd ( Ý -> þ›Á -> ©t , BT_ATT_OP_READ_BLOB_REQ , 1931 pdu , (pdu), 1932 »ad_lÚg_cb , 1933 `»ad_lÚg_Ý_»f ( Ý ), 1934 »ad_lÚg_Ý_uÄef )) 1937 `»ad_lÚg_Ý_uÄef ( Ý ); 1938 sucûss = çl£ ; 1939  dÚe ; 1942 sucûss : 1943 sucûss = Œue ; 1945 dÚe : 1946 `com¶‘e_»ad_lÚg_Ý ( Ý , sucûss , ©t_ecode ); 1947 } } 1949 boÞ $bt_g©t_þ›Á_»ad_lÚg_v®ue ( bt_g©t_þ›Á * þ›Á , 1950 ušt16_t v®ue_hªdË , ušt16_ˆ off£t , 1951 bt_g©t_þ›Á_»ad_ÿÎback_t ÿÎback , 1952 * u£r_d©a , 1953 bt_g©t_þ›Á_de¡roy_func_t de¡roy ) 1955  »ad_lÚg_Ý * Ý ; 1956 ušt8_t pdu [4]; 1958 ià(! þ›Á ) 1959  çl£ ; 1961 Ý = `Ãw0 ( »ad_lÚg_Ý , 1); 1962 ià(! Ý ) 1963  çl£ ; 1965 Ý -> blobs = `queue_Ãw (); 1966 ià(! Ý -> blobs ) { 1967 `ä“ ( Ý ); 1968  çl£ ; 1971 Ý -> þ›Á = client; 1972 Ý -> v®ue_hªdË = value_handle; 1973 Ý -> Üig_off£t = off£t ; 1974 Ý -> off£t = offset; 1975 Ý -> ÿÎback = callback; 1976 Ý -> u£r_d©a = user_data; 1977 Ý -> de¡roy = destroy; 1979 `put_Ë16 ( v®ue_hªdË , pdu ); 1980 `put_Ë16 ( off£t , pdu + 2); 1982 ià(! `bt_©t_£nd ( þ›Á -> ©t , BT_ATT_OP_READ_BLOB_REQ , pdu , (pdu), 1983 »ad_lÚg_cb , 1984 `»ad_lÚg_Ý_»f ( Ý ), 1985 »ad_lÚg_Ý_uÄef )) { 1986 `queue_de¡roy ( Ý -> blobs , ä“ ); 1987 `ä“ ( Ý ); 1988  çl£ ; 1991  Œue ; 1992 } } 1994 boÞ $bt_g©t_þ›Á_wr™e_w™hout_»¥Ú£ ( bt_g©t_þ›Á * þ›Á , 1995 ušt16_t v®ue_hªdË , 1996 boÞ sigÃd_wr™e , 1997 cÚ¡ ušt8_t * v®ue , ušt16_t Ëngth ) { 1998 ušt8_t pdu [2 + Ëngth ]; 2000 ià(! þ›Á ) 2004 ià( sigÃd_wr™e ) 2007 `put_Ë16 ( v®ue_hªdË , pdu ); 2008 `memýy ( pdu + 2, v®ue , Ëngth ); 2010  `bt_©t_£nd ( þ›Á -> ©t , BT_ATT_OP_WRITE_CMD , pdu , (pdu), 2011 NULL , NULL, NULL); 2012 } } 2014  swr™e_Ý { 2015 bt_g©t_»suÉ_ÿÎback_t mÿÎback ; 2016 * mu£r_d©a ; 2017 bt_g©t_de¡roy_func_t mde¡roy ; 2020  $de¡roy_wr™e_Ý (* d©a ) 2022  wr™e_Ý * Ý = d©a ; 2024 ià( Ý -> de¡roy ) 2025 Ý -> `de¡roy (Ý-> u£r_d©a ); 2027 `ä“ ( Ý ); 2028 } } 2030  $wr™e_cb ( ušt8_t Ýcode , cÚ¡ * pdu , ušt16_t Ëngth , 2031 * u£r_d©a ) 2033  wr™e_Ý * Ý = u£r_d©a ; 2034 boÞ sucûss = Œue ; 2035 ušt8_t ©t_ecode = 0; 2037 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 2038 sucûss = çl£ ; 2039 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 2040  dÚe ; 2043 ià( Ýcode !ð BT_ATT_OP_WRITE_RSP || pdu || Ëngth ) 2044 sucûss = çl£ ; 2046 dÚe : 2047 ià( Ý -> ÿÎback ) 2048 Ý -> `ÿÎback ( sucûss , ©t_ecode , op-> u£r_d©a ); 2049 } } 2051 boÞ $bt_g©t_þ›Á_wr™e_v®ue ( bt_g©t_þ›Á * þ›Á , 2052 ušt16_t v®ue_hªdË , 2053 cÚ¡ ušt8_t * v®ue , ušt16_t Ëngth , 2054 bt_g©t_þ›Á_ÿÎback_t ÿÎback , 2055 * u£r_d©a , 2056 bt_g©t_þ›Á_de¡roy_func_t de¡roy ) 2058  wr™e_Ý * Ý ; 2059 ušt8_t pdu [2 + Ëngth ]; 2061 ià(! þ›Á ) 2062  çl£ ; 2064 Ý = `Ãw0 ( wr™e_Ý , 1); 2065 ià(! Ý ) 2066  çl£ ; 2068 Ý -> ÿÎback = callback; 2069 Ý -> u£r_d©a = user_data; 2070 Ý -> de¡roy = destroy; 2072 `put_Ë16 ( v®ue_hªdË , pdu ); 2073 `memýy ( pdu + 2, v®ue , Ëngth ); 2075 ià(! `bt_©t_£nd ( þ›Á -> ©t , BT_ATT_OP_WRITE_REQ , pdu , (pdu), 2076 wr™e_cb , Ý , 2077 de¡roy_wr™e_Ý )) { 2078 `ä“ ( Ý ); 2079  çl£ ; 2082  Œue ; 2083 } } 2085  slÚg_wr™e_Ý { 2086  bt_g©t_þ›Á * mþ›Á ; 2087  m»f_couÁ ; 2088 boÞ m»lŸbË ; 2089 boÞ msucûss ; 2090 ušt8_t m©t_ecode ; 2091 boÞ m»lŸbË_”rÜ ; 2092 ušt16_t mv®ue_hªdË ; 2093 ušt8_t * mv®ue ; 2094 ušt16_t mËngth ; 2095 ušt16_t moff£t ; 2096 ušt16_t mšdex ; 2097 ušt16_t mcur_Ëngth ; 2098 bt_g©t_þ›Á_wr™e_lÚg_ÿÎback_t mÿÎback ; 2099 * mu£r_d©a ; 2100 bt_g©t_þ›Á_de¡roy_func_t mde¡roy ; 2103  lÚg_wr™e_Ý * $lÚg_wr™e_Ý_»f ( lÚg_wr™e_Ý * Ý ) 2105 `__sync_ãtch_ªd_add (& Ý -> »f_couÁ , 1); 2107  Ý ; 2108 } } 2110  $lÚg_wr™e_Ý_uÄef (* d©a ) 2112  lÚg_wr™e_Ý * Ý = d©a ; 2114 ià( `__sync_sub_ªd_ãtch (& Ý -> »f_couÁ , 1)) 2117 ià( Ý -> de¡roy ) 2118 Ý -> `de¡roy (Ý-> u£r_d©a ); 2120 `ä“ ( Ý -> v®ue ); 2121 `ä“ ( Ý ); 2122 } } 2124  ´•¬e_wr™e_cb ( ušt8_t Ýcode , cÚ¡ * pdu , ušt16_t Ëngth , 2125 * u£r_d©a ); 2126  com¶‘e_wr™e_lÚg_Ý ( lÚg_wr™e_Ý * Ý , boÞ sucûss , 2127 ušt8_t ©t_ecode , boÞ »lŸbË_”rÜ ); 2129  $hªdË_Ãxt_´•_wr™e ( lÚg_wr™e_Ý * Ý ) 2131 boÞ sucûss = Œue ; 2132 ušt8_t * pdu ; 2134 pdu = `m®loc ( Ý -> cur_Ëngth + 4); 2135 ià(! pdu ) { 2136 sucûss = çl£ ; 2137  dÚe ; 2140 `put_Ë16 ( Ý -> v®ue_hªdË , pdu ); 2141 `put_Ë16 ( Ý -> off£t + op-> šdex , pdu + 2); 2142 `memýy ( pdu + 4, Ý -> v®ue + op-> šdex , op-> cur_Ëngth ); 2144 ià(! `bt_©t_£nd ( Ý -> þ›Á -> ©t , BT_ATT_OP_PREP_WRITE_REQ , 2145 pdu , Ý -> cur_Ëngth + 4, 2146 ´•¬e_wr™e_cb , 2147 `lÚg_wr™e_Ý_»f ( Ý ), 2148 lÚg_wr™e_Ý_uÄef )) { 2149 `lÚg_wr™e_Ý_uÄef ( Ý ); 2150 sucûss = çl£ ; 2153 `ä“ ( pdu ); 2159 ià( sucûss ) 2162 dÚe : 2163 `com¶‘e_wr™e_lÚg_Ý ( Ý , sucûss , 0, çl£ ); 2164 } } 2166  $¡¬t_Ãxt_lÚg_wr™e ( bt_g©t_þ›Á * þ›Á ) 2168  lÚg_wr™e_Ý * Ý ; 2170 ià( `queue_i£m±y ( þ›Á -> lÚg_wr™e_queue )) { 2171 þ›Á -> š_lÚg_wr™e = çl£ ; 2175 Ý = `queue_pÝ_h—d ( þ›Á -> lÚg_wr™e_queue ); 2176 ià(! Ý ) 2179 `hªdË_Ãxt_´•_wr™e ( Ý ); 2184 `lÚg_wr™e_Ý_uÄef ( Ý ); 2185 } } 2187  $execu‹_wr™e_cb ( ušt8_t Ýcode , cÚ¡ * pdu , ušt16_t Ëngth , 2188 * u£r_d©a ) 2190  lÚg_wr™e_Ý * Ý = u£r_d©a ; 2191 boÞ sucûss = Ý ->success; 2192 ušt8_t ©t_ecode = Ý ->att_ecode; 2194 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 2195 sucûss = çl£ ; 2196 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 2197 } ià( Ýcode !ð BT_ATT_OP_EXEC_WRITE_RSP || pdu || Ëngth ) 2198 sucûss = çl£ ; 2200 ià( Ý -> ÿÎback ) 2201 Ý -> `ÿÎback ( sucûss , op-> »lŸbË_”rÜ , ©t_ecode , 2202 Ý -> u£r_d©a ); 2204 `¡¬t_Ãxt_lÚg_wr™e ( Ý -> þ›Á ); 2205 } } 2207  $com¶‘e_wr™e_lÚg_Ý ( lÚg_wr™e_Ý * Ý , boÞ sucûss , 2208 ušt8_t ©t_ecode , boÞ »lŸbË_”rÜ ) 2210 ušt8_t pdu ; 2212 Ý -> sucûss = success; 2213 Ý -> ©t_ecode =‡tt_ecode; 2214 Ý -> »lŸbË_”rÜ =„eliable_error; 2216 ià( sucûss ) 2217 pdu = 0x01; 2219 pdu = 0x00; 2221 ià( `bt_©t_£nd ( Ý -> þ›Á -> ©t , BT_ATT_OP_EXEC_WRITE_REQ , 2222 & pdu , (pdu), 2223 execu‹_wr™e_cb , 2224 `lÚg_wr™e_Ý_»f ( Ý ), 2225 lÚg_wr™e_Ý_uÄef )) 2228 `lÚg_wr™e_Ý_uÄef ( Ý ); 2229 sucûss = çl£ ; 2231 ià( Ý -> ÿÎback ) 2232 Ý -> `ÿÎback ( sucûss , »lŸbË_”rÜ , ©t_ecode , op-> u£r_d©a ); 2234 `¡¬t_Ãxt_lÚg_wr™e ( Ý -> þ›Á ); 2235 } } 2237  $´•¬e_wr™e_cb ( ušt8_t Ýcode , cÚ¡ * pdu , ušt16_t Ëngth , 2238 * u£r_d©a ) 2240  lÚg_wr™e_Ý * Ý = u£r_d©a ; 2241 boÞ sucûss = Œue ; 2242 boÞ »lŸbË_”rÜ = çl£ ; 2243 ušt8_t ©t_ecode = 0; 2244 ušt16_t Ãxt_šdex ; 2246 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 2247 sucûss = çl£ ; 2248 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 2249  dÚe ; 2252 ià( Ýcode !ð BT_ATT_OP_PREP_WRITE_RSP ) { 2253 sucûss = çl£ ; 2254  dÚe ; 2257 ià( Ý -> »lŸbË ) { 2258 ià(! pdu || Ëngth !ð( Ý -> cur_Ëngth + 4)) { 2259 sucûss = çl£ ; 2260 »lŸbË_”rÜ = Œue ; 2261  dÚe ; 2264 ià( `g‘_Ë16 ( pdu è!ð Ý -> v®ue_hªdË || 2265 `g‘_Ë16 ( pdu + 2è!ð( Ý -> off£t + op-> šdex )) { 2266 sucûss = çl£ ; 2267 »lŸbË_”rÜ = Œue ; 2268  dÚe ; 2271 ià( `memcmp ( pdu + 4, Ý -> v®ue + op-> šdex , op-> cur_Ëngth )) { 2272 sucûss = çl£ ; 2273 »lŸbË_”rÜ = Œue ; 2274  dÚe ; 2278 Ãxt_šdex = Ý -> šdex + op-> cur_Ëngth ; 2279 ià( Ãxt_šdex =ð Ý -> Ëngth ) { 2281  dÚe ; 2287 ià( Ý -> cur_Ëngth >ð `bt_©t_g‘_mtu (Ý-> þ›Á -> ©t ) - 5) { 2288 Ý -> šdex = Ãxt_šdex ; 2289 Ý -> cur_Ëngth = `MIN (Ý-> Ëngth - op-> šdex , 2290 `bt_©t_g‘_mtu ( Ý -> þ›Á -> ©t ) - 5); 2291 `hªdË_Ãxt_´•_wr™e ( Ý ); 2295 dÚe : 2296 `com¶‘e_wr™e_lÚg_Ý ( Ý , sucûss , ©t_ecode , »lŸbË_”rÜ ); 2297 } } 2299 boÞ $bt_g©t_þ›Á_wr™e_lÚg_v®ue ( bt_g©t_þ›Á * þ›Á , 2300 boÞ »lŸbË , 2301 ušt16_t v®ue_hªdË , ušt16_ˆ off£t , 2302 cÚ¡ ušt8_t * v®ue , ušt16_t Ëngth , 2303 bt_g©t_þ›Á_wr™e_lÚg_ÿÎback_t ÿÎback , 2304 * u£r_d©a , 2305 bt_g©t_þ›Á_de¡roy_func_t de¡roy ) 2307  lÚg_wr™e_Ý * Ý ; 2308 ušt8_t * pdu ; 2309 boÞ ¡©us ; 2311 ià(! þ›Á ) 2312  çl£ ; 2314 ià(( size_t )( Ëngth + off£t è> UINT16_MAX ) 2315  çl£ ; 2320 ià(! Ëngth || ! v®ue ) 2321  çl£ ; 2323 Ý = `Ãw0 ( lÚg_wr™e_Ý , 1); 2324 ià(! Ý ) 2325  çl£ ; 2327 Ý -> v®ue = `m®loc ( Ëngth ); 2328 ià(! Ý -> v®ue ) { 2329 `ä“ ( Ý ); 2330  çl£ ; 2333 `memýy ( Ý -> v®ue , v®ue, Ëngth ); 2335 Ý -> þ›Á = client; 2336 Ý -> »lŸbË =„eliable; 2337 Ý -> v®ue_hªdË = value_handle; 2338 Ý -> Ëngth =†ength; 2339 Ý -> off£t = offset; 2340 Ý -> cur_Ëngth = `MIN ( Ëngth , `bt_©t_g‘_mtu ( þ›Á -> ©t ) - 5); 2341 Ý -> ÿÎback = callback; 2342 Ý -> u£r_d©a = user_data; 2343 Ý -> de¡roy = destroy; 2345 ià( þ›Á -> š_lÚg_wr™e ) { 2346 `queue_push_ž ( þ›Á -> lÚg_wr™e_queue , 2347 `lÚg_wr™e_Ý_»f ( Ý )); 2348  Œue ; 2351 pdu = `m®loc ( Ý -> cur_Ëngth + 4); 2352 ià(! pdu ) { 2353 `ä“ ( Ý -> v®ue ); 2354 `ä“ ( Ý ); 2355  çl£ ; 2358 `put_Ë16 ( v®ue_hªdË , pdu ); 2359 `put_Ë16 ( off£t , pdu + 2); 2360 `memýy ( pdu + 4, Ý -> v®ue , op-> cur_Ëngth ); 2362 ¡©us = `bt_©t_£nd ( þ›Á -> ©t , BT_ATT_OP_PREP_WRITE_REQ , 2363 pdu , Ý -> cur_Ëngth + 4, 2364 ´•¬e_wr™e_cb , 2365 `lÚg_wr™e_Ý_»f ( Ý ), 2366 lÚg_wr™e_Ý_uÄef ); 2368 `ä“ ( pdu ); 2370 ià(! ¡©us ) { 2371 `ä“ ( Ý -> v®ue ); 2372 `ä“ ( Ý ); 2373  çl£ ; 2376 þ›Á -> š_lÚg_wr™e = Œue ; 2378  Œue ; 2379 } } 2381  boÞ $m©ch_nÙify_chrc_v®ue_hªdË (cÚ¡ * a , cÚ¡ * b ) 2383 cÚ¡  nÙify_chrc * chrc = a ; 2384 ušt16_t v®ue_hªdË = `PTR_TO_UINT ( b ); 2386  chrc -> v®ue_hªdË == value_handle; 2387 } } 2389 boÞ $bt_g©t_þ›Á_»gi¡”_nÙify ( bt_g©t_þ›Á * þ›Á , 2390 ušt16_t chrc_v®ue_hªdË , 2391 bt_g©t_þ›Á_nÙify_id_ÿÎback_t ÿÎback , 2392 bt_g©t_þ›Á_nÙify_ÿÎback_t nÙify , 2393 * u£r_d©a , 2394 bt_g©t_þ›Á_de¡roy_func_t de¡roy ) 2396  nÙify_d©a *notify_data; 2397  nÙify_chrc * chrc = NULL ; 2399 ià(! þ›Á || !þ›Á-> db || ! chrc_v®ue_hªdË || ! ÿÎback ) 2400  çl£ ; 2402 ià(! `bt_g©t_þ›Á_is_»ady ( þ›Á è|| cl›Á-> š_svc_chngd ) 2403  çl£ ; 2406 chrc = `queue_fšd ( þ›Á -> nÙify_chrcs , m©ch_nÙify_chrc_v®ue_hªdË , 2407 `UINT_TO_PTR ( chrc_v®ue_hªdË )); 2409 ià(! chrc ) { 2414 chrc = `nÙify_chrc_ü—‹ ( þ›Á , chrc_v®ue_hªdË ); 2415 ià(! chrc ) 2416  çl£ ; 2421 ià( chrc -> nÙify_couÁ =ð INT_MAX ) 2422  çl£ ; 2424 nÙify_d©a = `Ãw0 (notify_data, 1); 2425 ià(! nÙify_d©a ) 2426  çl£ ; 2428 nÙify_d©a -> þ›Á = client; 2429 nÙify_d©a -> »f_couÁ = 1; 2430 nÙify_d©a -> chrc = chrc; 2431 nÙify_d©a -> ÿÎback = callback; 2432 nÙify_d©a -> nÙify =‚otify; 2433 nÙify_d©a -> u£r_d©a = user_data; 2434 nÙify_d©a -> de¡roy = destroy; 2440 ià( chrc -> ccc_wr™e_id ) { 2441 `queue_push_ž ( chrc -> »g_nÙify_queue , nÙify_d©a ); 2442  Œue ; 2448 ià( chrc -> nÙify_couÁ > 0) { 2449 `com¶‘e_nÙify_»que¡ ( nÙify_d©a ); 2450  Œue ; 2454 ià(! `nÙify_d©a_wr™e_ccc ( nÙify_d©a , Œue , ’abË_ccc_ÿÎback )) { 2455 `ä“ ( nÙify_d©a ); 2456  çl£ ; 2459  Œue ; 2460 } } 2462 boÞ $bt_g©t_þ›Á_uÄegi¡”_nÙify ( bt_g©t_þ›Á * þ›Á , 2463  id ) 2465  nÙify_d©a *notify_data; 2467 ià(! þ›Á || ! id ) 2468  çl£ ; 2470 nÙify_d©a = `queue_»move_if ( þ›Á -> nÙify_li¡ , m©ch_nÙify_d©a_id , 2471 `UINT_TO_PTR ( id )); 2472 ià(! nÙify_d©a ) 2473  çl£ ; 2475 `as£¹ ( nÙify_d©a -> chrc -> nÙify_couÁ > 0); 2476 `as£¹ (! nÙify_d©a -> chrc -> ccc_wr™e_id ); 2478 `com¶‘e_uÄegi¡”_nÙify ( nÙify_d©a ); 2479  Œue ; 2480 } } @src/shared/gatt-client.h 24  ~<¡dboÞ.h > 25  ~<¡dšt.h > 26  ~<¡ddef.h > 28  #BT_GATT_UUID_SIZE 16 ) 30  gbt_g©t_þ›Á ; 32  bt_g©t_þ›Á * bt_g©t_þ›Á_Ãw ( g©t_db * db , 33  bt_©t * ©t , 34 ušt16_t mtu ); 36  bt_g©t_þ›Á * bt_g©t_þ›Á_»f (bt_g©t_þ›Á * þ›Á ); 37  bt_g©t_þ›Á_uÄef ( bt_g©t_þ›Á * þ›Á ); 39 (* tbt_g©t_þ›Á_de¡roy_func_t )(* tu£r_d©a ); 40 (* tbt_g©t_þ›Á_ÿÎback_t )( tboÞ tsucûss , tušt8_t t©t_ecode , 41 * tu£r_d©a ); 42 (* tbt_g©t_þ›Á_debug_func_t )(cÚ¡ * t¡r , * tu£r_d©a ); 43 (* tbt_g©t_þ›Á_»ad_ÿÎback_t )( tboÞ tsucûss , tušt8_t t©t_ecode , 44 cÚ¡ tušt8_t * tv®ue , tušt16_t tËngth , 45 * tu£r_d©a ); 46 (* tbt_g©t_þ›Á_wr™e_lÚg_ÿÎback_t )( tboÞ tsucûss , 47 tboÞ t»lŸbË_”rÜ , tušt8_t t©t_ecode , 48 * tu£r_d©a ); 49 (* tbt_g©t_þ›Á_nÙify_ÿÎback_t )( tušt16_t tv®ue_hªdË , 50 cÚ¡ tušt8_t * tv®ue , tušt16_t tËngth , 51 * tu£r_d©a ); 52 (* tbt_g©t_þ›Á_nÙify_id_ÿÎback_t )( tid , 53 tušt16_t t©t_ecode , 54 * tu£r_d©a ); 55 (* tbt_g©t_þ›Á_£rviû_chªged_ÿÎback_t )( tušt16_t t¡¬t_hªdË , 56 tušt16_t t’d_hªdË , 57 * tu£r_d©a ); 59 boÞ `bt_g©t_þ›Á_is_»ady ( bt_g©t_þ›Á * þ›Á ); 60 boÞ `bt_g©t_þ›Á_£t_»ady_hªdËr ( bt_g©t_þ›Á * þ›Á , 61 bt_g©t_þ›Á_ÿÎback_t ÿÎback , 62 * u£r_d©a , 63 bt_g©t_þ›Á_de¡roy_func_t de¡roy ); 64 boÞ `bt_g©t_þ›Á_£t_£rviû_chªged ( bt_g©t_þ›Á * þ›Á , 65 bt_g©t_þ›Á_£rviû_chªged_ÿÎback_t ÿÎback , 66 * u£r_d©a , 67 bt_g©t_þ›Á_de¡roy_func_t de¡roy ); 68 boÞ `bt_g©t_þ›Á_£t_debug ( bt_g©t_þ›Á * þ›Á , 69 bt_g©t_þ›Á_debug_func_t ÿÎback , 70 * u£r_d©a , 71 bt_g©t_þ›Á_de¡roy_func_t de¡roy ); 73 ušt16_t `bt_g©t_þ›Á_g‘_mtu ( bt_g©t_þ›Á * þ›Á ); 75 boÞ `bt_g©t_þ›Á_»ad_v®ue ( bt_g©t_þ›Á * þ›Á , 76 ušt16_t v®ue_hªdË , 77 bt_g©t_þ›Á_»ad_ÿÎback_t ÿÎback , 78 * u£r_d©a , 79 bt_g©t_þ›Á_de¡roy_func_t de¡roy ); 80 boÞ `bt_g©t_þ›Á_»ad_lÚg_v®ue ( bt_g©t_þ›Á * þ›Á , 81 ušt16_t v®ue_hªdË , ušt16_ˆ off£t , 82 bt_g©t_þ›Á_»ad_ÿÎback_t ÿÎback , 83 * u£r_d©a , 84 bt_g©t_þ›Á_de¡roy_func_t de¡roy ); 85 boÞ `bt_g©t_þ›Á_»ad_muÉË ( bt_g©t_þ›Á * þ›Á , 86 ušt16_t * hªdËs , ušt8_t num_hªdËs , 87 bt_g©t_þ›Á_»ad_ÿÎback_t ÿÎback , 88 * u£r_d©a , 89 bt_g©t_þ›Á_de¡roy_func_t de¡roy ); 91 boÞ `bt_g©t_þ›Á_wr™e_w™hout_»¥Ú£ ( bt_g©t_þ›Á * þ›Á , 92 ušt16_t v®ue_hªdË , 93 boÞ sigÃd_wr™e , 94 cÚ¡ ušt8_t * v®ue , ušt16_t Ëngth ); 95 boÞ `bt_g©t_þ›Á_wr™e_v®ue ( bt_g©t_þ›Á * þ›Á , 96 ušt16_t v®ue_hªdË , 97 cÚ¡ ušt8_t * v®ue , ušt16_t Ëngth , 98 bt_g©t_þ›Á_ÿÎback_t ÿÎback , 99 * u£r_d©a , 100 bt_g©t_þ›Á_de¡roy_func_t de¡roy ); 101 boÞ `bt_g©t_þ›Á_wr™e_lÚg_v®ue ( bt_g©t_þ›Á * þ›Á , 102 boÞ »lŸbË , 103 ušt16_t v®ue_hªdË , ušt16_ˆ off£t , 104 cÚ¡ ušt8_t * v®ue , ušt16_t Ëngth , 105 bt_g©t_þ›Á_wr™e_lÚg_ÿÎback_t ÿÎback , 106 * u£r_d©a , 107 bt_g©t_þ›Á_de¡roy_func_t de¡roy ); 109 boÞ `bt_g©t_þ›Á_»gi¡”_nÙify ( bt_g©t_þ›Á * þ›Á , 110 ušt16_t chrc_v®ue_hªdË , 111 bt_g©t_þ›Á_nÙify_id_ÿÎback_t ÿÎback , 112 bt_g©t_þ›Á_nÙify_ÿÎback_t nÙify , 113 * u£r_d©a , 114 bt_g©t_þ›Á_de¡roy_func_t de¡roy ); 115 boÞ `bt_g©t_þ›Á_uÄegi¡”_nÙify ( bt_g©t_þ›Á * þ›Á , 116  id ); 117 #ifdeà BLUEZ5_GATT_CLIENT 118 boÞ `bt_g©t_discov”_£rviûs ( bt_g©t_þ›Á * þ›Á ); @src/shared/gatt-db.c 24  ~<¡dboÞ.h > 25  ~<”ºo.h > 27  ~"lib/uuid.h " 28  ~"¤c/sh¬ed/utž.h " 29  ~"¤c/sh¬ed/queue.h " 30  ~"¤c/sh¬ed/timeout.h " 31  ~"¤c/sh¬ed/g©t-db.h " 33 #iâdeà MAX 34  #MAX ( a , b è(×è> (bè? (aè: (b)) ) 37  #MAX_CHAR_DECL_VALUE_LEN 19 ) 38  #MAX_INCLUDED_VALUE_LEN 6 ) 39  #ATTRIBUTE_TIMEOUT 1000 ) 41 cÚ¡ bt_uuid_t g´im¬y_£rviû_uuid = { . ty³ = BT_UUID16 , 42 . gv®ue . gu16 = GATT_PRIM_SVC_UUID }; 43 cÚ¡ bt_uuid_t g£cÚd¬y_£rviû_uuid = { . ty³ = BT_UUID16 , 44 . gv®ue . gu16 = GATT_SND_SVC_UUID }; 45 cÚ¡ bt_uuid_t gch¬aù”i¡ic_uuid = { . ty³ = BT_UUID16 , 46 . gv®ue . gu16 = GATT_CHARAC_UUID }; 47 cÚ¡ bt_uuid_t gšþuded_£rviû_uuid = { . ty³ = BT_UUID16 , 48 . gv®ue . gu16 = GATT_INCLUDE_UUID }; 50  sg©t_db { 51  m»f_couÁ ; 52 ušt16_t mÃxt_hªdË ; 53  queue * m£rviûs ; 55  queue * mnÙify_li¡ ; 56  mÃxt_nÙify_id ; 59  snÙify { 60  mid ; 61 g©t_db_©Œibu‹_cb_t m£rviû_added ; 62 g©t_db_©Œibu‹_cb_t m£rviû_»moved ; 63 g©t_db_de¡roy_func_t mde¡roy ; 64 * mu£r_d©a ; 67  s³ndšg_»ad { 68  g©t_db_©Œibu‹ * m©Œib ; 69  mid ; 70  mtimeout_id ; 71 g©t_db_©Œibu‹_»ad_t mfunc ; 72 * mu£r_d©a ; 75  s³ndšg_wr™e { 76  g©t_db_©Œibu‹ * m©Œib ; 77  mid ; 78  mtimeout_id ; 79 g©t_db_©Œibu‹_wr™e_t mfunc ; 80 * mu£r_d©a ; 83  sg©t_db_©Œibu‹ { 84  g©t_db_£rviû * m£rviû ; 85 ušt16_t mhªdË ; 86 bt_uuid_t muuid ; 87 ušt32_t m³rmissiÚs ; 88 ušt16_t mv®ue_Ën ; 89 ušt8_t * mv®ue ; 91 g©t_db_»ad_t m»ad_func ; 92 g©t_db_wr™e_t mwr™e_func ; 93 * mu£r_d©a ; 95  m»ad_id ; 96  queue * m³ndšg_»ads ; 98  mwr™e_id ; 99  queue * m³ndšg_wr™es ; 102  sg©t_db_£rviû { 103  g©t_db * mdb ; 104 boÞ maùive ; 105 ušt16_t mnum_hªdËs ; 106  g©t_db_©Œibu‹ ** m©Œibu‹s ; 109  $©Œibu‹_de¡roy ( g©t_db_©Œibu‹ * ©Œibu‹ ) 112 ià(! ©Œibu‹ ) 115 `queue_de¡roy ( ©Œibu‹ -> ³ndšg_»ads , ä“ ); 116 `queue_de¡roy ( ©Œibu‹ -> ³ndšg_wr™es , ä“ ); 118 `ä“ ( ©Œibu‹ -> v®ue ); 119 `ä“ ( ©Œibu‹ ); 120 } } 122  g©t_db_©Œibu‹ * $Ãw_©Œibu‹ ( g©t_db_£rviû * £rviû , 123 cÚ¡ bt_uuid_t * ty³ , 124 cÚ¡ ušt8_t * v® , 125 ušt16_t Ën ) 127  g©t_db_©Œibu‹ * ©Œibu‹ ; 129 ©Œibu‹ = `Ãw0 ( g©t_db_©Œibu‹ , 1); 130 ià(! ©Œibu‹ ) 131  NULL ; 133 ©Œibu‹ -> £rviû = service; 134 ©Œibu‹ -> uuid = * ty³ ; 135 ©Œibu‹ -> v®ue_Ën = Ën ; 136 ià( Ën ) { 137 ©Œibu‹ -> v®ue = `m®loc0 ( Ën ); 138 ià(! ©Œibu‹ -> v®ue ) 139  çžed ; 141 `memýy ( ©Œibu‹ -> v®ue , v® , Ën ); 144 ©Œibu‹ -> ³ndšg_»ads = `queue_Ãw (); 145 ià(! ©Œibu‹ -> ³ndšg_»ads ) 146  çžed ; 148 ©Œibu‹ -> ³ndšg_wr™es = `queue_Ãw (); 149 ià(! ©Œibu‹ -> ³ndšg_»ads ) 150  çžed ; 152  ©Œibu‹ ; 154 çžed : 155 `©Œibu‹_de¡roy ( ©Œibu‹ ); 156  NULL ; 157 } } 159  g©t_db * $g©t_db_»f ( g©t_db * db ) 161 ià(! db ) 162  NULL ; 164 `__sync_ãtch_ªd_add (& db -> »f_couÁ , 1); 166  db ; 167 } } 169  g©t_db * $g©t_db_Ãw () 171  g©t_db * db ; 173 db = `Ãw0 ( g©t_db , 1); 174 ià(! db ) 175  NULL ; 177 db -> £rviûs = `queue_Ãw (); 178 ià(! db -> £rviûs ) { 179 `ä“ ( db ); 180  NULL ; 183 db -> nÙify_li¡ = `queue_Ãw (); 184 ià(! db -> nÙify_li¡ ) { 185 `queue_de¡roy ( db -> £rviûs , NULL ); 186 `ä“ ( db ); 187  NULL ; 190 db -> Ãxt_hªdË = 0x0001; 192  `g©t_db_»f ( db ); 193 } } 195  $nÙify_de¡roy (* d©a ) 197  nÙify *nÙify = d©a ; 199 ià( nÙify -> de¡roy ) 200 nÙify -> `de¡roy ÒÙify-> u£r_d©a ); 202 `ä“ ( nÙify ); 203 } } 205  boÞ $m©ch_nÙify_id (cÚ¡ * a , cÚ¡ * b ) 207 cÚ¡  nÙify *nÙify = a ; 208  id = `PTR_TO_UINT ( b ); 210  nÙify -> id == id; 211 } } 213  snÙify_d©a { 214  g©t_db_©Œibu‹ * m©Œ ; 215 boÞ madded ; 218  $hªdË_nÙify (* d©a , * u£r_d©a ) 220  nÙify *nÙify = d©a ; 221  nÙify_d©a *nÙify_d©¨ð u£r_d©a ; 223 ià( nÙify_d©a -> added ) 224 nÙify -> `£rviû_added ( nÙify_d©a -> ©Œ ,‚Ùify-> u£r_d©a ); 226 nÙify -> `£rviû_»moved ( nÙify_d©a -> ©Œ ,‚Ùify-> u£r_d©a ); 227 } } 229  $nÙify_£rviû_chªged ( g©t_db * db , 230  g©t_db_£rviû * £rviû , 231 boÞ added ) 233  nÙify_d©a d©a ; 235 ià( `queue_i£m±y ( db -> nÙify_li¡ )) 238 d©a . ©Œ = £rviû -> ©Œibu‹s [0]; 239 d©a . added =‡dded; 241 `g©t_db_»f ( db ); 243 `queue_fÜ—ch ( db -> nÙify_li¡ , hªdË_nÙify , & d©a ); 245 `g©t_db_uÄef ( db ); 246 } } 248  $g©t_db_£rviû_de¡roy (* d©a ) 250  g©t_db_£rviû * £rviû = d©a ; 251  i ; 253 ià( £rviû -> aùive ) 254 `nÙify_£rviû_chªged ( £rviû -> db , s”viû, çl£ ); 256  i = 0; i < £rviû -> num_hªdËs ; i++) 257 `©Œibu‹_de¡roy ( £rviû -> ©Œibu‹s [ i ]); 259 `ä“ ( £rviû -> ©Œibu‹s ); 260 `ä“ ( £rviû ); 261 } } 263  $g©t_db_de¡roy ( g©t_db * db ) 265 ià(! db ) 272 `queue_de¡roy ( db -> nÙify_li¡ , nÙify_de¡roy ); 273 db -> nÙify_li¡ = NULL ; 275 `queue_de¡roy ( db -> £rviûs , g©t_db_£rviû_de¡roy ); 276 `ä“ ( db ); 277 } } 279  $g©t_db_uÄef ( g©t_db * db ) 281 ià(! db ) 284 ià( `__sync_sub_ªd_ãtch (& db -> »f_couÁ , 1)) 287 `g©t_db_de¡roy ( db ); 288 } } 290 boÞ $g©t_db_i£m±y ( g©t_db * db ) 292 ià(! db ) 293  Œue ; 295  `queue_i£m±y ( db -> £rviûs ); 296 } } 298  $uuid_to_Ë (cÚ¡ bt_uuid_t * uuid , ušt8_t * d¡ ) 300 bt_uuid_t uuid128 ; 302 ià( uuid -> ty³ =ð BT_UUID16 ) { 303 `put_Ë16 ( uuid -> v®ue . u16 , d¡ ); 304  `bt_uuid_Ën ( uuid ); 307 `bt_uuid_to_uuid128 ( uuid , & uuid128 ); 308 `bsw­_128 (& uuid128 . v®ue . u128 , d¡ ); 309  `bt_uuid_Ën (& uuid128 ); 310 } } 312  boÞ $Ë_to_uuid (cÚ¡ ušt8_t * ¤c , size_t Ën , bt_uuid_t * uuid ) 314 ušt128_t u128 ; 316 ià( Ën == 2) { 317 `bt_uuid16_ü—‹ ( uuid , `g‘_Ë16 ( ¤c )); 318  Œue ; 321 ià( Ën == 4) { 322 `bt_uuid32_ü—‹ ( uuid , `g‘_Ë32 ( ¤c )); 323  Œue ; 326 ià( Ën != 16) 327  çl£ ; 329 `bsw­_128 ( ¤c , & u128 ); 330 `bt_uuid128_ü—‹ ( uuid , u128 ); 332  Œue ; 333 } } 335  g©t_db_£rviû * $g©t_db_£rviû_ü—‹ (cÚ¡ bt_uuid_t * uuid , 336 boÞ ´im¬y , 337 ušt16_t num_hªdËs ) 339  g©t_db_£rviû * £rviû ; 340 cÚ¡ bt_uuid_t * ty³ ; 341 ušt8_t v®ue [16]; 342 ušt16_t Ën ; 344 ià( num_hªdËs < 1) 345  NULL ; 347 £rviû = `Ãw0 ( g©t_db_£rviû , 1); 348 ià(! £rviû ) 349  NULL ; 351 £rviû -> ©Œibu‹s = `Ãw0 ( g©t_db_©Œibu‹ *, num_hªdËs ); 352 ià(! £rviû -> ©Œibu‹s ) { 353 `ä“ ( £rviû ); 354  NULL ; 357 ià( ´im¬y ) 358 ty³ = & ´im¬y_£rviû_uuid ; 360 ty³ = & £cÚd¬y_£rviû_uuid ; 362 Ën = `uuid_to_Ë ( uuid , v®ue ); 364 £rviû -> ©Œibu‹s [0] = `Ãw_©Œibu‹ (£rviû, ty³ , v®ue , Ën ); 365 ià(! £rviû -> ©Œibu‹s [0]) { 366 `g©t_db_£rviû_de¡roy ( £rviû ); 367  NULL ; 370  £rviû ; 371 } } 374 boÞ $g©t_db_»move_£rviû ( g©t_db * db , 375  g©t_db_©Œibu‹ * ©Œib ) 377  g©t_db_£rviû * £rviû ; 379 ià(! db || ! ©Œib ) 380  çl£ ; 382 £rviû = ©Œib ->service; 384 `queue_»move ( db -> £rviûs , £rviû ); 386 `g©t_db_£rviû_de¡roy ( £rviû ); 388  Œue ; 389 } } 391 boÞ $g©t_db_þ—r ( g©t_db * db ) 393 ià(! db ) 394  çl£ ; 396 `queue_»move_®l ( db -> £rviûs , NULL , NULL, g©t_db_£rviû_de¡roy ); 398 db -> Ãxt_hªdË = 0; 400  Œue ; 401 } } 403  $g©t_db_£rviû_g‘_hªdËs (cÚ¡  g©t_db_£rviû * £rviû , 404 ušt16_t * ¡¬t_hªdË , 405 ušt16_t * ’d_hªdË ) 407 ià( ¡¬t_hªdË ) 408 * ¡¬t_hªdË = £rviû -> ©Œibu‹s [0]-> hªdË ; 410 ià( ’d_hªdË ) 411 * ’d_hªdË = £rviû -> ©Œibu‹s [0]-> hªdË + 412 £rviû -> num_hªdËs - 1; 413 } } 415  sþ—r_¿nge { 416 ušt16_t m¡¬t , m’d ; 419  boÞ $m©ch_¿nge (cÚ¡ * a , cÚ¡ * b ) 421 cÚ¡  g©t_db_£rviû * £rviû = a ; 422 cÚ¡  þ—r_¿nge * ¿nge = b ; 423 ušt16_t svc_¡¬t , svc_’d ; 425 `g©t_db_£rviû_g‘_hªdËs ( £rviû , & svc_¡¬t , & svc_’d ); 427  svc_¡¬t <ð ¿nge -> ’d && svc_’d >ð¿nge-> ¡¬t ; 428 } } 430 boÞ $g©t_db_þ—r_¿nge ( g©t_db * db , ušt16_t ¡¬t_hªdË , 431 ušt16_t ’d_hªdË ) 433  þ—r_¿nge ¿nge ; 435 ià(! db || ¡¬t_hªdË > ’d_hªdË ) 436  çl£ ; 438 ¿nge . ¡¬t = ¡¬t_hªdË ; 439 ¿nge . ’d = ’d_hªdË ; 441 `queue_»move_®l ( db -> £rviûs , m©ch_¿nge , & ¿nge , 442 g©t_db_£rviû_de¡roy ); 444  Œue ; 445 } } 447  boÞ $fšd_š£¹_loc ( g©t_db * db , ušt16_t ¡¬t , ušt16_ˆ ’d , 448  g©t_db_£rviû ** aá” ) 450 cÚ¡  queue_’Œy * £rviûs_’Œy ; 451  g©t_db_£rviû * £rviû ; 452 ušt16_t cur_¡¬t , cur_’d ; 454 * aá” = NULL ; 456 £rviûs_’Œy = `queue_g‘_’Œ›s ( db -> £rviûs ); 458  £rviûs_’Œy ) { 459 £rviû = £rviûs_’Œy -> d©a ; 461 `g©t_db_£rviû_g‘_hªdËs ( £rviû , & cur_¡¬t , & cur_’d ); 463 ià( ¡¬t >ð cur_¡¬t && s¹ <ð cur_’d ) 464  çl£ ; 466 ià( ’d >ð cur_¡¬t &&ƒnd <ð cur_’d ) 467  çl£ ; 469 ià( ’d < cur_¡¬t ) 470  Œue ; 472 * aá” = £rviû ; 473 £rviûs_’Œy = s”viûs_’Œy-> Ãxt ; 476  Œue ; 477 } } 479  g©t_db_©Œibu‹ * $g©t_db_š£¹_£rviû ( g©t_db * db , 480 ušt16_t hªdË , 481 cÚ¡ bt_uuid_t * uuid , 482 boÞ ´im¬y , 483 ušt16_t num_hªdËs ) 485  g©t_db_£rviû * £rviû , * aá” ; 487 aá” = NULL ; 489 ià(! db || hªdË < 1) 490  NULL ; 492 ià( num_hªdËs < 1 || ( hªdË +‚um_hªdË - 1è> UINT16_MAX ) 493  NULL ; 495 ià(! `fšd_š£¹_loc ( db , hªdË , hªdË + num_hªdËs - 1, & aá” )) 496  NULL ; 498 £rviû = `g©t_db_£rviû_ü—‹ ( uuid , ´im¬y , num_hªdËs ); 500 ià(! £rviû ) 501  NULL ; 503 ià( aá” ) { 504 ià(! `queue_push_aá” ( db -> £rviûs , aá” , £rviû )) 505  çž ; 506 } ià(! `queue_push_h—d ( db -> £rviûs , £rviû )) { 507  çž ; 510 £rviû -> db = db; 511 £rviû -> ©Œibu‹s [0]-> hªdË = handle; 512 £rviû -> num_hªdËs =‚um_handles; 515 db -> Ãxt_hªdË = `MAX ( hªdË + num_hªdËs , db->next_handle); 517  £rviû -> ©Œibu‹s [0]; 519 çž : 520 `g©t_db_£rviû_de¡roy ( £rviû ); 521  NULL ; 522 } } 524  g©t_db_©Œibu‹ * $g©t_db_add_£rviû ( g©t_db * db , 525 cÚ¡ bt_uuid_t * uuid , 526 boÞ ´im¬y , 527 ušt16_t num_hªdËs ) 529  `g©t_db_š£¹_£rviû ( db , db-> Ãxt_hªdË , uuid , ´im¬y , 530 num_hªdËs ); 531 } } 533  $g©t_db_»gi¡” ( g©t_db * db , 534 g©t_db_©Œibu‹_cb_t £rviû_added , 535 g©t_db_©Œibu‹_cb_t £rviû_»moved , 536 * u£r_d©a , 537 g©t_db_de¡roy_func_t de¡roy ) 539  nÙify *notify; 541 ià(! db || !( £rviû_added || £rviû_»moved )) 544 nÙify = `Ãw0 (notify, 1); 545 ià(! nÙify ) 548 nÙify -> £rviû_added = service_added; 549 nÙify -> £rviû_»moved = service_removed; 550 nÙify -> de¡roy = destroy; 551 nÙify -> u£r_d©a = user_data; 553 ià( db -> Ãxt_nÙify_id < 1) 554 db -> Ãxt_nÙify_id = 1; 556 nÙify -> id = db -> Ãxt_nÙify_id ++; 558 ià(! `queue_push_ž ( db -> nÙify_li¡ , nÙify )) { 559 `ä“ ( nÙify ); 563  nÙify -> id ; 564 } } 566 boÞ $g©t_db_uÄegi¡” ( g©t_db * db ,  id ) 568  nÙify *notify; 570 ià(! db || ! id ) 571  çl£ ; 573 nÙify = `queue_fšd ( db -> nÙify_li¡ , m©ch_nÙify_id , `UINT_TO_PTR ( id )); 574 ià(! nÙify ) 575  çl£ ; 577 `queue_»move ( db -> nÙify_li¡ , nÙify ); 578 `nÙify_de¡roy ( nÙify ); 580  Œue ; 581 } } 583  ušt16_t $g‘_©Œibu‹_šdex ( g©t_db_£rviû * £rviû , 584  ’d_off£t ) 586  i = 0; 589  i < ( £rviû -> num_hªdËs - ’d_off£t ) && 590 £rviû -> ©Œibu‹s [ i ]) 591 i ++; 593  i =ð( £rviû -> num_hªdËs - ’d_off£t ) ? 0 : i; 594 } } 596  ušt16_t $g‘_hªdË_©_šdex ( g©t_db_£rviû * £rviû , 597  šdex ) 599  £rviû -> ©Œibu‹s [ šdex ]-> hªdË ; 600 } } 602  g©t_db_©Œibu‹ * 603 $©Œibu‹_upd©e ( g©t_db_£rviû * £rviû ,  šdex ) 605 ušt16_t ´evious_hªdË ; 610 ´evious_hªdË = £rviû -> ©Œibu‹s [ šdex - 1]-> hªdË ; 611 £rviû -> ©Œibu‹s [ šdex ]-> hªdË = ´evious_hªdË + 1; 613  £rviû -> ©Œibu‹s [ šdex ]; 614 } } 616  $£t_©Œibu‹_d©a ( g©t_db_©Œibu‹ * ©Œibu‹ , 617 g©t_db_»ad_t »ad_func , 618 g©t_db_wr™e_t wr™e_func , 619 ušt32_t ³rmissiÚs , 620 * u£r_d©a ) 622 ©Œibu‹ -> ³rmissiÚs =…ermissions; 623 ©Œibu‹ -> »ad_func =„ead_func; 624 ©Œibu‹ -> wr™e_func = write_func; 625 ©Œibu‹ -> u£r_d©a = user_data; 626 } } 628  g©t_db_©Œibu‹ * 629 $g©t_db_£rviû_add_ch¬aù”i¡ic ( g©t_db_©Œibu‹ * ©Œib , 630 cÚ¡ bt_uuid_t * uuid , 631 ušt32_t ³rmissiÚs , 632 ušt8_t ´Ý”t›s , 633 g©t_db_»ad_t »ad_func , 634 g©t_db_wr™e_t wr™e_func , 635 * u£r_d©a ) 637  g©t_db_£rviû * £rviû ; 638 ušt8_t v®ue [ MAX_CHAR_DECL_VALUE_LEN ]; 639 ušt16_t Ën = 0; 640  i ; 642 ià(! ©Œib ) 643  NULL ; 645 £rviû = ©Œib ->service; 647 i = `g‘_©Œibu‹_šdex ( £rviû , 1); 648 ià(! i ) 649  NULL ; 651 v®ue [0] = ´Ý”t›s ; 652 Ën +ð( ´Ý”t›s ); 654 `put_Ë16 ( `g‘_hªdË_©_šdex ( £rviû , i - 1è+ 2, & v®ue [1]); 655 Ën +ð( ušt16_t ); 656 Ën +ð `uuid_to_Ë ( uuid , & v®ue [3]); 658 £rviû -> ©Œibu‹s [ i ] = `Ãw_©Œibu‹ (£rviû, & ch¬aù”i¡ic_uuid , 659 v®ue , Ën ); 660 ià(! £rviû -> ©Œibu‹s [ i ]) 661  NULL ; 663 `©Œibu‹_upd©e ( £rviû , i ++); 665 £rviû -> ©Œibu‹s [ i ] = `Ãw_©Œibu‹ (£rviû, uuid , NULL , 0); 666 ià(! £rviû -> ©Œibu‹s [ i ]) { 667 `ä“ ( £rviû -> ©Œibu‹s [ i - 1]); 668  NULL ; 671 `£t_©Œibu‹_d©a ( £rviû -> ©Œibu‹s [ i ], »ad_func , wr™e_func , 672 ³rmissiÚs , u£r_d©a ); 674  `©Œibu‹_upd©e ( £rviû , i ); 675 } } 677  g©t_db_©Œibu‹ * 678 $g©t_db_£rviû_add_desütÜ ( g©t_db_©Œibu‹ * ©Œib , 679 cÚ¡ bt_uuid_t * uuid , 680 ušt32_t ³rmissiÚs , 681 g©t_db_»ad_t »ad_func , 682 g©t_db_wr™e_t wr™e_func , 683 * u£r_d©a ) 685  g©t_db_£rviû * £rviû ; 686  i ; 688 ià(! ©Œib ) 689  çl£ ; 691 £rviû = ©Œib ->service; 693 i = `g‘_©Œibu‹_šdex ( £rviû , 0); 694 ià(! i ) 695  NULL ; 697 £rviû -> ©Œibu‹s [ i ] = `Ãw_©Œibu‹ (£rviû, uuid , NULL , 0); 698 ià(! £rviû -> ©Œibu‹s [ i ]) 699  NULL ; 701 `£t_©Œibu‹_d©a ( £rviû -> ©Œibu‹s [ i ], »ad_func , wr™e_func , 702 ³rmissiÚs , u£r_d©a ); 704  `©Œibu‹_upd©e ( £rviû , i ); 705 } } 707  g©t_db_©Œibu‹ * 708 $g©t_db_£rviû_add_šþuded ( g©t_db_©Œibu‹ * ©Œib , 709  g©t_db_©Œibu‹ * šþude ) 711  g©t_db_£rviû * £rviû , * šþuded ; 712 ušt8_t v®ue [ MAX_INCLUDED_VALUE_LEN ]; 713 ušt16_t šþuded_hªdË , Ën = 0; 714  šdex ; 716 ià(! ©Œib || ! šþude ) 717  NULL ; 719 £rviû = ©Œib ->service; 720 šþuded = šþude -> £rviû ; 723 ià( šþude !ð šþuded -> ©Œibu‹s [0]) 724 šþude = šþuded -> ©Œibu‹s [0]; 726 šþuded_hªdË = šþude -> hªdË ; 728 `put_Ë16 ( šþuded_hªdË , & v®ue [ Ën ]); 729 Ën +ð( ušt16_t ); 731 `put_Ë16 ( šþuded_hªdË + šþuded -> num_hªdËs - 1, & v®ue [ Ën ]); 732 Ën +ð( ušt16_t ); 737 ià( šþude -> v®ue_Ën =ð( ušt16_t )) { 738 `memýy (& v®ue [ Ën ], šþude ->v®ue, inþude-> v®ue_Ën ); 739 Ën +ð šþude -> v®ue_Ën ; 742 šdex = `g‘_©Œibu‹_šdex ( £rviû , 0); 743 ià(! šdex ) 744  NULL ; 746 £rviû -> ©Œibu‹s [ šdex ] = `Ãw_©Œibu‹ (service, 747 & šþuded_£rviû_uuid , 748 v®ue , Ën ); 749 ià(! £rviû -> ©Œibu‹s [ šdex ]) 750  NULL ; 757 `£t_©Œibu‹_d©a ( £rviû -> ©Œibu‹s [ šdex ], NULL , NULL, 0, NULL); 759  `©Œibu‹_upd©e ( £rviû , šdex ); 760 } } 762 boÞ $g©t_db_£rviû_£t_aùive ( g©t_db_©Œibu‹ * ©Œib , boÞ aùive ) 764  g©t_db_£rviû * £rviû ; 766 ià(! ©Œib ) 767  çl£ ; 769 £rviû = ©Œib ->service; 770 £rviû -> aùive =‡ctive; 772 `nÙify_£rviû_chªged ( £rviû -> db , s”viû, aùive ); 774  Œue ; 775 } } 777  $g©t_db_»ad_by_group_ty³ ( g©t_db * db , ušt16_t ¡¬t_hªdË , 778 ušt16_t ’d_hªdË , 779 cÚ¡ bt_uuid_t ty³ , 780  queue *queue) 782 cÚ¡  queue_’Œy * £rviûs_’Œy ; 783  g©t_db_£rviû * £rviû ; 784 ušt16_t g½_¡¬t , g½_’d , uuid_size ; 786 uuid_size = 0; 788 £rviûs_’Œy = `queue_g‘_’Œ›s ( db -> £rviûs ); 790  £rviûs_’Œy ) { 791 £rviû = £rviûs_’Œy -> d©a ; 793 ià(! £rviû -> aùive ) 794  Ãxt_£rviû ; 796 ià( `bt_uuid_cmp (& ty³ , & £rviû -> ©Œibu‹s [0]-> uuid )) 797  Ãxt_£rviû ; 799 g½_¡¬t = £rviû -> ©Œibu‹s [0]-> hªdË ; 800 g½_’d = g½_¡¬t + £rviû -> num_hªdËs - 1; 802 ià( g½_’d < ¡¬t_hªdË || g½_¡¬t > ’d_hªdË ) 803  Ãxt_£rviû ; 805 ià( g½_¡¬t < ¡¬t_hªdË || g½_¡¬ˆ> ’d_hªdË ) 806  Ãxt_£rviû ; 808 ià(! uuid_size ) 809 uuid_size = £rviû -> ©Œibu‹s [0]-> v®ue_Ën ; 810 ià( uuid_size !ð £rviû -> ©Œibu‹s [0]-> v®ue_Ën ) 813 `queue_push_ž ( queue , £rviû -> ©Œibu‹s [0]); 815 Ãxt_£rviû : 816 £rviûs_’Œy = s”viûs_’Œy-> Ãxt ; 818 } } 820  sfšd_by_ty³_v®ue_d©a { 821  queue * mqueue ; 822 bt_uuid_t muuid ; 823 ušt16_t m¡¬t_hªdË ; 824 ušt16_t m’d_hªdË ; 827  $fšd_by_ty³ (* d©a , * u£r_d©a ) 829  fšd_by_ty³_v®ue_d©a * £¬ch_d©a = u£r_d©a ; 830  g©t_db_£rviû * £rviû = d©a ; 831  g©t_db_©Œibu‹ * ©Œibu‹ ; 832  i ; 834 ià(! £rviû -> aùive ) 837  i = 0; i < £rviû -> num_hªdËs ; i++) { 838 ©Œibu‹ = £rviû -> ©Œibu‹s [ i ]; 840 ià(! ©Œibu‹ ) 843 ià(( ©Œibu‹ -> hªdË < £¬ch_d©a -> ¡¬t_hªdË ) || 844 ( ©Œibu‹ -> hªdË > £¬ch_d©a -> ’d_hªdË )) 847 ià( `bt_uuid_cmp (& £¬ch_d©a -> uuid , & ©Œibu‹ ->uuid)) 850 `queue_push_ž ( £¬ch_d©a -> queue , ©Œibu‹ ); 852 } } 854  $g©t_db_fšd_by_ty³ ( g©t_db * db , ušt16_t ¡¬t_hªdË , 855 ušt16_t ’d_hªdË , 856 cÚ¡ bt_uuid_t * ty³ , 857  queue *queue) 859  fšd_by_ty³_v®ue_d©a d©a ; 861 d©a . uuid = * ty³ ; 862 d©a . ¡¬t_hªdË = start_handle; 863 d©a . ’d_hªdË =ƒnd_handle; 864 d©a . queue = queue; 866 `queue_fÜ—ch ( db -> £rviûs , fšd_by_ty³ , & d©a ); 867 } } 869  s»ad_by_ty³_d©a { 870  queue * mqueue ; 871 bt_uuid_t muuid ; 872 ušt16_t m¡¬t_hªdË ; 873 ušt16_t m’d_hªdË ; 876  $»ad_by_ty³ (* d©a , * u£r_d©a ) 878  »ad_by_ty³_d©a * £¬ch_d©a = u£r_d©a ; 879  g©t_db_£rviû * £rviû = d©a ; 880  g©t_db_©Œibu‹ * ©Œibu‹ ; 881  i ; 883 ià(! £rviû -> aùive ) 886  i = 0; i < £rviû -> num_hªdËs ; i++) { 887 ©Œibu‹ = £rviû -> ©Œibu‹s [ i ]; 888 ià(! ©Œibu‹ ) 891 ià( ©Œibu‹ -> hªdË < £¬ch_d©a -> ¡¬t_hªdË ) 894 ià( ©Œibu‹ -> hªdË > £¬ch_d©a -> ’d_hªdË ) 897 ià( `bt_uuid_cmp (& £¬ch_d©a -> uuid , & ©Œibu‹ ->uuid)) 900 `queue_push_ž ( £¬ch_d©a -> queue , ©Œibu‹ ); 902 } } 904  $g©t_db_»ad_by_ty³ ( g©t_db * db , ušt16_t ¡¬t_hªdË , 905 ušt16_t ’d_hªdË , 906 cÚ¡ bt_uuid_t ty³ , 907  queue *queue) 909  »ad_by_ty³_d©a d©a ; 910 d©a . uuid = ty³ ; 911 d©a . ¡¬t_hªdË = start_handle; 912 d©a . ’d_hªdË =ƒnd_handle; 913 d©a . queue = queue; 915 `queue_fÜ—ch ( db -> £rviûs , »ad_by_ty³ , & d©a ); 916 } } 919  sfšd_šfÜm©iÚ_d©a { 920  queue * mqueue ; 921 ušt16_t m¡¬t_hªdË ; 922 ušt16_t m’d_hªdË ; 925  $fšd_šfÜm©iÚ (* d©a , * u£r_d©a ) 927  fšd_šfÜm©iÚ_d©a * £¬ch_d©a = u£r_d©a ; 928  g©t_db_£rviû * £rviû = d©a ; 929  g©t_db_©Œibu‹ * ©Œibu‹ ; 930  i ; 932 ià(! £rviû -> aùive ) 936 ià(( £rviû -> ©Œibu‹s [0]-> hªdË + s”viû-> num_hªdËs - 1) < 937 £¬ch_d©a -> ¡¬t_hªdË ) 940  i = 0; i < £rviû -> num_hªdËs ; i++) { 941 ©Œibu‹ = £rviû -> ©Œibu‹s [ i ]; 942 ià(! ©Œibu‹ ) 945 ià( ©Œibu‹ -> hªdË < £¬ch_d©a -> ¡¬t_hªdË ) 948 ià( ©Œibu‹ -> hªdË > £¬ch_d©a -> ’d_hªdË ) 951 `queue_push_ž ( £¬ch_d©a -> queue , ©Œibu‹ ); 953 } } 955  $g©t_db_fšd_šfÜm©iÚ ( g©t_db * db , ušt16_t ¡¬t_hªdË , 956 ušt16_t ’d_hªdË , 957  queue *queue) 959  fšd_šfÜm©iÚ_d©a d©a ; 961 d©a . ¡¬t_hªdË = start_handle; 962 d©a . ’d_hªdË =ƒnd_handle; 963 d©a . queue = queue; 965 `queue_fÜ—ch ( db -> £rviûs , fšd_šfÜm©iÚ , & d©a ); 966 } } 968  $g©t_db_fÜ—ch_£rviû ( g©t_db * db , cÚ¡ bt_uuid_t * uuid , 969 g©t_db_©Œibu‹_cb_t func , 970 * u£r_d©a ) 972 `g©t_db_fÜ—ch_£rviû_š_¿nge ( db , uuid , func , u£r_d©a , 0x0001, 974 } } 976  sfÜ—ch_d©a { 977 g©t_db_©Œibu‹_cb_t mfunc ; 978 cÚ¡ bt_uuid_t * muuid ; 979 * mu£r_d©a ; 980 ušt16_t m¡¬t , m’d ; 983  $fÜ—ch_£rviû_š_¿nge (* d©a , * u£r_d©a ) 985  g©t_db_£rviû * £rviû = d©a ; 986  fÜ—ch_d©a *fÜ—ch_d©¨ð u£r_d©a ; 987 ušt16_t svc_¡¬t ; 988 bt_uuid_t uuid ; 990 svc_¡¬t = `g‘_hªdË_©_šdex ( £rviû , 0); 992 ià( svc_¡¬t > fÜ—ch_d©a -> ’d || svc_¡¬ˆ< fÜ—ch_d©a-> ¡¬t ) 995 ià( fÜ—ch_d©a -> uuid ) { 996 `g©t_db_©Œibu‹_g‘_£rviû_uuid ( £rviû -> ©Œibu‹s [0], 997 & uuid ); 998 ià( `bt_uuid_cmp (& uuid , fÜ—ch_d©a ->uuid)) 1002 fÜ—ch_d©a -> `func ( £rviû -> ©Œibu‹s [0], fÜ—ch_d©a-> u£r_d©a ); 1003 } } 1005  $g©t_db_fÜ—ch_£rviû_š_¿nge ( g©t_db * db , 1006 cÚ¡ bt_uuid_t * uuid , 1007 g©t_db_©Œibu‹_cb_t func , 1008 * u£r_d©a , 1009 ušt16_t ¡¬t_hªdË , 1010 ušt16_t ’d_hªdË ) 1012  fÜ—ch_d©a d©a ; 1014 ià(! db || ! func || ¡¬t_hªdË > ’d_hªdË ) 1017 d©a . func = func; 1018 d©a . uuid = uuid; 1019 d©a . u£r_d©a = user_data; 1020 d©a . ¡¬t = ¡¬t_hªdË ; 1021 d©a . ’d = ’d_hªdË ; 1023 `queue_fÜ—ch ( db -> £rviûs , fÜ—ch_£rviû_š_¿nge , & d©a ); 1024 } } 1026  $g©t_db_£rviû_fÜ—ch ( g©t_db_©Œibu‹ * ©Œib , 1027 cÚ¡ bt_uuid_t * uuid , 1028 g©t_db_©Œibu‹_cb_t func , 1029 * u£r_d©a ) 1031  g©t_db_£rviû * £rviû ; 1032  g©t_db_©Œibu‹ * ©Œ ; 1033 ušt16_t i ; 1035 ià(! ©Œib || ! func ) 1038 £rviû = ©Œib ->service; 1040  i = 0; i < £rviû -> num_hªdËs ; i++) { 1041 ©Œ = £rviû -> ©Œibu‹s [ i ]; 1042 ià(! ©Œ ) 1045 ià( uuid && `bt_uuid_cmp (uuid, & ©Œ ->uuid)) 1048 `func ( ©Œ , u£r_d©a ); 1050 } } 1052  $g©t_db_£rviû_fÜ—ch_ch¬ ( g©t_db_©Œibu‹ * ©Œib , 1053 g©t_db_©Œibu‹_cb_t func , 1054 * u£r_d©a ) 1056 `g©t_db_£rviû_fÜ—ch ( ©Œib , & ch¬aù”i¡ic_uuid , func , u£r_d©a ); 1057 } } 1059  $g©t_db_£rviû_fÜ—ch_desc ( g©t_db_©Œibu‹ * ©Œib , 1060 g©t_db_©Œibu‹_cb_t func , 1061 * u£r_d©a ) 1063  g©t_db_£rviû * £rviû ; 1064  g©t_db_©Œibu‹ * ©Œ ; 1065 ušt16_t i ; 1067 ià(! ©Œib || ! func ) 1071 ià( `bt_uuid_cmp (& ch¬aù”i¡ic_uuid , & ©Œib -> uuid )) 1074 £rviû = ©Œib ->service; 1077 i = ©Œib -> hªdË - £rviû -> ©Œibu‹s [0]->handle + 2; 1078 ; i < £rviû -> num_hªdËs ; i++) { 1079 ©Œ = £rviû -> ©Œibu‹s [ i ]; 1080 ià(! ©Œ ) 1084 ià(! `bt_uuid_cmp (& ch¬aù”i¡ic_uuid , & ©Œ -> uuid ) || 1085 ! `bt_uuid_cmp (& šþuded_£rviû_uuid , & ©Œ -> uuid )) 1088 `func ( ©Œ , u£r_d©a ); 1090 } } 1092  $g©t_db_£rviû_fÜ—ch_šþ ( g©t_db_©Œibu‹ * ©Œib , 1093 g©t_db_©Œibu‹_cb_t func , 1094 * u£r_d©a ) 1096 `g©t_db_£rviû_fÜ—ch ( ©Œib , & šþuded_£rviû_uuid , func , 1097 u£r_d©a ); 1098 } } 1100  boÞ $fšd_£rviû_fÜ_hªdË (cÚ¡ * d©a , cÚ¡ * u£r_d©a ) 1102 cÚ¡  g©t_db_£rviû * £rviû = d©a ; 1103 ušt16_t hªdË = `PTR_TO_UINT ( u£r_d©a ); 1104 ušt16_t ¡¬t , ’d ; 1106 ¡¬t = £rviû -> ©Œibu‹s [0]-> hªdË ; 1107 ’d = ¡¬t + £rviû -> num_hªdËs ; 1109  ( ¡¬t <ð hªdË è&& (hªdË < ’d ); 1110 } } 1112  g©t_db_©Œibu‹ * $g©t_db_g‘_©Œibu‹ ( g©t_db * db , 1113 ušt16_t hªdË ) 1115  g©t_db_£rviû * £rviû ; 1116 ušt16_t £rviû_hªdË ; 1118 ià(! db || ! hªdË ) 1119  NULL ; 1121 £rviû = `queue_fšd ( db -> £rviûs , fšd_£rviû_fÜ_hªdË , 1122 `UINT_TO_PTR ( hªdË )); 1123 ià(! £rviû ) 1124  NULL ; 1126 £rviû_hªdË = £rviû -> ©Œibu‹s [0]-> hªdË ; 1133  £rviû -> ©Œibu‹s [ hªdË - £rviû_hªdË ]; 1134 } } 1136 cÚ¡ bt_uuid_t * $g©t_db_©Œibu‹_g‘_ty³ ( 1137 cÚ¡  g©t_db_©Œibu‹ * ©Œib ) 1139 ià(! ©Œib ) 1140  NULL ; 1142  & ©Œib -> uuid ; 1143 } } 1145 ušt16_t $g©t_db_©Œibu‹_g‘_hªdË (cÚ¡  g©t_db_©Œibu‹ * ©Œib ) 1147 ià(! ©Œib ) 1150  ©Œib -> hªdË ; 1151 } } 1153 boÞ $g©t_db_©Œibu‹_g‘_£rviû_uuid (cÚ¡  g©t_db_©Œibu‹ * ©Œib , 1154 bt_uuid_t * uuid ) 1156  g©t_db_£rviû * £rviû ; 1158 ià(! ©Œib || ! uuid ) 1159  çl£ ; 1161 £rviû = ©Œib ->service; 1163 ià( £rviû -> ©Œibu‹s [0]-> v®ue_Ën =ð( ušt16_t )) { 1164 ušt16_t v®ue ; 1166 v®ue = `g‘_Ë16 ( £rviû -> ©Œibu‹s [0]->value); 1167 `bt_uuid16_ü—‹ ( uuid , v®ue ); 1169  Œue ; 1172 ià( £rviû -> ©Œibu‹s [0]-> v®ue_Ën =ð( ušt128_t )) { 1173 ušt128_t v®ue ; 1175 `bsw­_128 ( £rviû -> ©Œibu‹s [0]-> v®ue , &value); 1176 `bt_uuid128_ü—‹ ( uuid , v®ue ); 1178  Œue ; 1181  çl£ ; 1182 } } 1184 boÞ $g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( 1185 cÚ¡  g©t_db_©Œibu‹ * ©Œib , 1186 ušt16_t * ¡¬t_hªdË , 1187 ušt16_t * ’d_hªdË ) 1189  g©t_db_£rviû * £rviû ; 1191 ià(! ©Œib ) 1192  çl£ ; 1194 £rviû = ©Œib ->service; 1196 `g©t_db_£rviû_g‘_hªdËs ( £rviû , ¡¬t_hªdË , ’d_hªdË ); 1198  Œue ; 1199 } } 1201 boÞ $g©t_db_©Œibu‹_g‘_£rviû_d©a (cÚ¡  g©t_db_©Œibu‹ * ©Œib , 1202 ušt16_t * ¡¬t_hªdË , 1203 ušt16_t * ’d_hªdË , 1204 boÞ * ´im¬y , 1205 bt_uuid_t * uuid ) 1207  g©t_db_£rviû * £rviû ; 1208  g©t_db_©Œibu‹ * deþ ; 1210 ià(! ©Œib ) 1211  çl£ ; 1213 £rviû = ©Œib ->service; 1214 deþ = £rviû -> ©Œibu‹s [0]; 1216 `g©t_db_£rviû_g‘_hªdËs ( £rviû , ¡¬t_hªdË , ’d_hªdË ); 1218 ià( ´im¬y ) 1219 * ´im¬y = `bt_uuid_cmp (& deþ -> uuid , & £cÚd¬y_£rviû_uuid ); 1221 ià(! uuid ) 1222  Œue ; 1228  `Ë_to_uuid ( deþ -> v®ue , deþ-> v®ue_Ën , uuid ); 1229 } } 1231 boÞ $g©t_db_©Œibu‹_g‘_ch¬_d©a (cÚ¡  g©t_db_©Œibu‹ * ©Œib , 1232 ušt16_t * hªdË , 1233 ušt16_t * v®ue_hªdË , 1234 ušt8_t * ´Ý”t›s , 1235 bt_uuid_t * uuid ) 1237 ià(! ©Œib ) 1238  çl£ ; 1240 ià( `bt_uuid_cmp (& ch¬aù”i¡ic_uuid , & ©Œib -> uuid )) 1241  çl£ ; 1249 ià(! ©Œib -> v®ue || (©Œib-> v®ue_Ën != 5 && 1250 ©Œib -> v®ue_Ën != 19)) 1251  çl£ ; 1253 ià( hªdË ) 1254 * hªdË = ©Œib ->handle; 1256 ià( ´Ý”t›s ) 1257 * ´Ý”t›s = ©Œib -> v®ue [0]; 1259 ià( v®ue_hªdË ) 1260 * v®ue_hªdË = `g‘_Ë16 ( ©Œib -> v®ue + 1); 1262 ià(! uuid ) 1263  Œue ; 1265  `Ë_to_uuid ( ©Œib -> v®ue + 3,‡‰rib-> v®ue_Ën - 3, uuid ); 1266 } } 1268 boÞ $g©t_db_©Œibu‹_g‘_šþ_d©a (cÚ¡  g©t_db_©Œibu‹ * ©Œib , 1269 ušt16_t * hªdË , 1270 ušt16_t * ¡¬t_hªdË , 1271 ušt16_t * ’d_hªdË ) 1273 ià(! ©Œib ) 1274  çl£ ; 1276 ià( `bt_uuid_cmp (& šþuded_£rviû_uuid , & ©Œib -> uuid )) 1277  çl£ ; 1285 ià(! ©Œib -> v®ue ||‡‰rib-> v®ue_Ën < 4 ||‡ttrib->value_len > 6) 1286  çl£ ; 1292 ià( hªdË ) 1293 * hªdË = ©Œib ->handle; 1295 ià( ¡¬t_hªdË ) 1296 * ¡¬t_hªdË = `g‘_Ë16 ( ©Œib -> v®ue ); 1298 ià( ’d_hªdË ) 1299 * ’d_hªdË = `g‘_Ë16 ( ©Œib -> v®ue + 2); 1301  Œue ; 1302 } } 1304 boÞ $g©t_db_©Œibu‹_g‘_³rmissiÚs (cÚ¡  g©t_db_©Œibu‹ * ©Œib , 1305 ušt32_t * ³rmissiÚs ) 1307 ià(! ©Œib || ! ³rmissiÚs ) 1308  çl£ ; 1310 * ³rmissiÚs = ©Œib ->permissions; 1312  Œue ; 1313 } } 1315  $³ndšg_»ad_»suÉ ( ³ndšg_»ad * p ,  ”r , 1316 cÚ¡ ušt8_t * d©a , size_t Ëngth ) 1318 ià( p -> timeout_id > 0) 1319 `timeout_»move ( p -> timeout_id ); 1321 p -> `func Õ-> ©Œib , ”r , d©a , Ëngth ,…-> u£r_d©a ); 1323 `ä“ ( p ); 1324 } } 1326  boÞ $»ad_timeout (* u£r_d©a ) 1328  ³ndšg_»ad * p = u£r_d©a ; 1330 p -> timeout_id = 0; 1332 `queue_»move ( p -> ©Œib -> ³ndšg_»ads ,…); 1334 `³ndšg_»ad_»suÉ ( p , - ETIMEDOUT , NULL , 0); 1336  çl£ ; 1337 } } 1339 boÞ $g©t_db_©Œibu‹_»ad ( g©t_db_©Œibu‹ * ©Œib , ušt16_t off£t , 1340 ušt8_t Ýcode , bdaddr_t * bdaddr , 1341 g©t_db_©Œibu‹_»ad_t func , * u£r_d©a ) 1343 ušt8_t * v®ue ; 1345 ià(! ©Œib || ! func ) 1346  çl£ ; 1348 ià( ©Œib -> »ad_func ) { 1349  ³ndšg_»ad * p ; 1351 p = `Ãw0 ( ³ndšg_»ad , 1); 1352 ià(! p ) 1353  çl£ ; 1355 p -> ©Œib =‡ttrib; 1356 p -> id = ++ ©Œib -> »ad_id ; 1357 p -> timeout_id = `timeout_add ( ATTRIBUTE_TIMEOUT , »ad_timeout , 1358 p , NULL ); 1359 p -> func = func; 1360 p -> u£r_d©a = user_data; 1362 `queue_push_ž ( ©Œib -> ³ndšg_»ads , p ); 1364 ©Œib -> `»ad_func ׉rib, p -> id , off£t , Ýcode , bdaddr , 1365 ©Œib -> u£r_d©a ); 1366  Œue ; 1370 ià( off£t > ©Œib -> v®ue_Ën ) 1371  çl£ ; 1374 v®ue = off£t =ð ©Œib -> v®ue_Ën ? NULL : &attrib->value[offset]; 1376 `func ( ©Œib , 0, v®ue ,‡‰rib-> v®ue_Ën - off£t , u£r_d©a ); 1378  Œue ; 1379 } } 1381  boÞ $fšd_³ndšg (cÚ¡ * a , cÚ¡ * b ) 1383 cÚ¡  ³ndšg_»ad * p = a ; 1384  id = `PTR_TO_UINT ( b ); 1386  p -> id == id; 1387 } } 1389 boÞ $g©t_db_©Œibu‹_»ad_»suÉ ( g©t_db_©Œibu‹ * ©Œib , 1390  id ,  ”r , 1391 cÚ¡ ušt8_t * v®ue , size_t Ëngth ) 1393  ³ndšg_»ad * p ; 1395 ià(! ©Œib || ! id ) 1396  çl£ ; 1398 p = `queue_»move_if ( ©Œib -> ³ndšg_»ads , fšd_³ndšg , 1399 `UINT_TO_PTR ( id )); 1400 ià(! p ) 1401  çl£ ; 1403 `³ndšg_»ad_»suÉ ( p , ”r , v®ue , Ëngth ); 1405  Œue ; 1406 } } 1408  $³ndšg_wr™e_»suÉ ( ³ndšg_wr™e * p ,  ”r ) 1410 ià( p -> timeout_id > 0) 1411 `timeout_»move ( p -> timeout_id ); 1413 p -> `func Õ-> ©Œib , ”r ,…-> u£r_d©a ); 1415 `ä“ ( p ); 1416 } } 1418  boÞ $wr™e_timeout (* u£r_d©a ) 1420  ³ndšg_wr™e * p = u£r_d©a ; 1422 p -> timeout_id = 0; 1424 `queue_»move ( p -> ©Œib -> ³ndšg_wr™es ,…); 1426 `³ndšg_wr™e_»suÉ ( p , - ETIMEDOUT ); 1428  çl£ ; 1429 } } 1431 boÞ $g©t_db_©Œibu‹_wr™e ( g©t_db_©Œibu‹ * ©Œib , ušt16_t off£t , 1432 cÚ¡ ušt8_t * v®ue , size_t Ën , 1433 ušt8_t Ýcode , bdaddr_t * bdaddr , 1434 g©t_db_©Œibu‹_wr™e_t func , 1435 * u£r_d©a ) 1437 ià(! ©Œib || ! func ) 1438  çl£ ; 1440 ià( ©Œib -> wr™e_func ) { 1441  ³ndšg_wr™e * p ; 1443 p = `Ãw0 ( ³ndšg_wr™e , 1); 1444 ià(! p ) 1445  çl£ ; 1447 p -> ©Œib =‡ttrib; 1448 p -> id = ++ ©Œib -> wr™e_id ; 1449 p -> timeout_id = `timeout_add ( ATTRIBUTE_TIMEOUT , wr™e_timeout , 1450 p , NULL ); 1451 p -> func = func; 1452 p -> u£r_d©a = user_data; 1454 `queue_push_ž ( ©Œib -> ³ndšg_wr™es , p ); 1456 ©Œib -> `wr™e_func ׉rib, p -> id , off£t , v®ue , Ën , Ýcode , 1457 bdaddr , ©Œib -> u£r_d©a ); 1458  Œue ; 1462 ià(! ©Œib -> v®ue || off£t >ð©Œib-> v®ue_Ën || 1463 Ën > (è( ©Œib -> v®ue_Ën - off£t )) { 1464 * buf ; 1466 buf = `»®loc ( ©Œib -> v®ue , Ën + off£t ); 1467 ià(! buf ) 1468  çl£ ; 1470 ©Œib -> v®ue = buf ; 1473 ià(! ©Œib -> v®ue_Ën ) 1474 `mem£t ( ©Œib -> v®ue , 0, off£t ); 1476 ©Œib -> v®ue_Ën = Ën + off£t ; 1479 `memýy (& ©Œib -> v®ue [ off£t ], v®ue, Ën ); 1481 `func ( ©Œib , 0, u£r_d©a ); 1483  Œue ; 1484 } } 1486 boÞ $g©t_db_©Œibu‹_wr™e_»suÉ ( g©t_db_©Œibu‹ * ©Œib , 1487  id ,  ”r ) 1489  ³ndšg_wr™e * p ; 1491 ià(! ©Œib || ! id ) 1492  çl£ ; 1494 p = `queue_»move_if ( ©Œib -> ³ndšg_wr™es , fšd_³ndšg , 1495 `UINT_TO_PTR ( id )); 1496 ià(! p ) 1497  çl£ ; 1499 `³ndšg_wr™e_»suÉ ( p , ”r ); 1501  Œue ; 1502 } } @src/shared/gatt-db.h 24  gg©t_db ; 25  gg©t_db_©Œibu‹ ; 27  g©t_db * g©t_db_Ãw (); 29  g©t_db * g©t_db_»f (g©t_db * db ); 30  g©t_db_uÄef ( g©t_db * db ); 32 boÞ g©t_db_i£m±y ( g©t_db * db ); 34  g©t_db_©Œibu‹ * g©t_db_add_£rviû ( g©t_db * db , 35 cÚ¡ bt_uuid_t * uuid , 36 boÞ ´im¬y , 37 ušt16_t num_hªdËs ); 39 boÞ g©t_db_»move_£rviû ( g©t_db * db , 40  g©t_db_©Œibu‹ * ©Œib ); 41 boÞ g©t_db_þ—r ( g©t_db * db ); 42 boÞ g©t_db_þ—r_¿nge ( g©t_db * db , ušt16_t ¡¬t_hªdË , 43 ušt16_t ’d_hªdË ); 45  g©t_db_©Œibu‹ * g©t_db_š£¹_£rviû ( g©t_db * db , 46 ušt16_t hªdË , 47 cÚ¡ bt_uuid_t * uuid , 48 boÞ ´im¬y , 49 ušt16_t num_hªdËs ); 51 (* tg©t_db_»ad_t è( tg©t_db_©Œibu‹ * t©Œib , 52  tid , tušt16_t toff£t , 53 tušt8_t tÝcode , tbdaddr_t * tbdaddr , 54 * tu£r_d©a ); 56 (* tg©t_db_wr™e_t è( tg©t_db_©Œibu‹ * t©Œib , 57  tid , tušt16_t toff£t , 58 cÚ¡ tušt8_t * tv®ue , tsize_t tËn , 59 tušt8_t tÝcode , tbdaddr_t * tbdaddr , 60 * tu£r_d©a ); 62  g©t_db_©Œibu‹ * 63 `g©t_db_£rviû_add_ch¬aù”i¡ic ( g©t_db_©Œibu‹ * ©Œib , 64 cÚ¡ bt_uuid_t * uuid , 65 ušt32_t ³rmissiÚs , 66 ušt8_t ´Ý”t›s , 67 g©t_db_»ad_t »ad_func , 68 g©t_db_wr™e_t wr™e_func , 69 * u£r_d©a ); 71  g©t_db_©Œibu‹ * 72 `g©t_db_£rviû_add_desütÜ ( g©t_db_©Œibu‹ * ©Œib , 73 cÚ¡ bt_uuid_t * uuid , 74 ušt32_t ³rmissiÚs , 75 g©t_db_»ad_t »ad_func , 76 g©t_db_wr™e_t wr™e_func , 77 * u£r_d©a ); 79  g©t_db_©Œibu‹ * 80 `g©t_db_£rviû_add_šþuded ( g©t_db_©Œibu‹ * ©Œib , 81  g©t_db_©Œibu‹ * šþude ); 83 boÞ `g©t_db_£rviû_£t_aùive ( g©t_db_©Œibu‹ * ©Œib , boÞ aùive ); 85  `g©t_db_»ad_by_group_ty³ ( g©t_db * db , ušt16_t ¡¬t_hªdË , 86 ušt16_t ’d_hªdË , 87 cÚ¡ bt_uuid_t ty³ , 88  queue *queue); 90  `g©t_db_fšd_by_ty³ ( g©t_db * db , ušt16_t ¡¬t_hªdË , 91 ušt16_t ’d_hªdË , 92 cÚ¡ bt_uuid_t * ty³ , 93  queue *queue); 95  `g©t_db_»ad_by_ty³ ( g©t_db * db , ušt16_t ¡¬t_hªdË , 96 ušt16_t ’d_hªdË , 97 cÚ¡ bt_uuid_t ty³ , 98  queue *queue); 100  `g©t_db_fšd_šfÜm©iÚ ( g©t_db * db , ušt16_t ¡¬t_hªdË , 101 ušt16_t ’d_hªdË , 102  queue *queue); 105 (* tg©t_db_©Œibu‹_cb_t )( tg©t_db_©Œibu‹ * t©Œib , 106 * tu£r_d©a ); 108  `g©t_db_fÜ—ch_£rviû ( g©t_db * db , cÚ¡ bt_uuid_t * uuid , 109 g©t_db_©Œibu‹_cb_t func , 110 * u£r_d©a ); 111  `g©t_db_fÜ—ch_£rviû_š_¿nge ( g©t_db * db , 112 cÚ¡ bt_uuid_t * uuid , 113 g©t_db_©Œibu‹_cb_t func , 114 * u£r_d©a , 115 ušt16_t ¡¬t_hªdË , 116 ušt16_t ’d_hªdË ); 118  `g©t_db_£rviû_fÜ—ch ( g©t_db_©Œibu‹ * ©Œib , 119 cÚ¡ bt_uuid_t * uuid , 120 g©t_db_©Œibu‹_cb_t func , 121 * u£r_d©a ); 122  `g©t_db_£rviû_fÜ—ch_ch¬ ( g©t_db_©Œibu‹ * ©Œib , 123 g©t_db_©Œibu‹_cb_t func , 124 * u£r_d©a ); 125  `g©t_db_£rviû_fÜ—ch_desc ( g©t_db_©Œibu‹ * ©Œib , 126 g©t_db_©Œibu‹_cb_t func , 127 * u£r_d©a ); 128  `g©t_db_£rviû_fÜ—ch_šþ ( g©t_db_©Œibu‹ * ©Œib , 129 g©t_db_©Œibu‹_cb_t func , 130 * u£r_d©a ); 132 (* tg©t_db_de¡roy_func_t )(* tu£r_d©a ); 134  `g©t_db_»gi¡” ( g©t_db * db , 135 g©t_db_©Œibu‹_cb_t £rviû_added , 136 g©t_db_©Œibu‹_cb_t £rviû_»moved , 137 * u£r_d©a , 138 g©t_db_de¡roy_func_t de¡roy ); 139 boÞ `g©t_db_uÄegi¡” ( g©t_db * db ,  id ); 141  g©t_db_©Œibu‹ * `g©t_db_g‘_©Œibu‹ ( g©t_db * db , 142 ušt16_t hªdË ); 144 cÚ¡ bt_uuid_t * `g©t_db_©Œibu‹_g‘_ty³ ( 145 cÚ¡  g©t_db_©Œibu‹ * ©Œib ); 147 ušt16_t `g©t_db_©Œibu‹_g‘_hªdË (cÚ¡  g©t_db_©Œibu‹ * ©Œib ); 149 boÞ `g©t_db_©Œibu‹_g‘_£rviû_uuid (cÚ¡  g©t_db_©Œibu‹ * ©Œib , 150 bt_uuid_t * uuid ); 152 boÞ `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( 153 cÚ¡  g©t_db_©Œibu‹ * ©Œib , 154 ušt16_t * ¡¬t_hªdË , 155 ušt16_t * ’d_hªdË ); 157 boÞ `g©t_db_©Œibu‹_g‘_£rviû_d©a (cÚ¡  g©t_db_©Œibu‹ * ©Œib , 158 ušt16_t * ¡¬t_hªdË , 159 ušt16_t * ’d_hªdË , 160 boÞ * ´im¬y , 161 bt_uuid_t * uuid ); 163 boÞ `g©t_db_©Œibu‹_g‘_ch¬_d©a (cÚ¡  g©t_db_©Œibu‹ * ©Œib , 164 ušt16_t * hªdË , 165 ušt16_t * v®ue_hªdË , 166 ušt8_t * ´Ý”t›s , 167 bt_uuid_t * uuid ); 169 boÞ `g©t_db_©Œibu‹_g‘_šþ_d©a (cÚ¡  g©t_db_©Œibu‹ * ©Œib , 170 ušt16_t * hªdË , 171 ušt16_t * ¡¬t_hªdË , 172 ušt16_t * ’d_hªdË ); 174 boÞ `g©t_db_©Œibu‹_g‘_³rmissiÚs (cÚ¡  g©t_db_©Œibu‹ * ©Œib , 175 ušt32_t * ³rmissiÚs ); 177 (* tg©t_db_©Œibu‹_»ad_t è( tg©t_db_©Œibu‹ * t©Œib , 178  t”r , cÚ¡ tušt8_t * tv®ue , 179 tsize_t tËngth , * tu£r_d©a ); 181 boÞ `g©t_db_©Œibu‹_»ad ( g©t_db_©Œibu‹ * ©Œib , ušt16_t off£t , 182 ušt8_t Ýcode , bdaddr_t * bdaddr , 183 g©t_db_©Œibu‹_»ad_t func , * u£r_d©a ); 185 boÞ `g©t_db_©Œibu‹_»ad_»suÉ ( g©t_db_©Œibu‹ * ©Œib , 186  id ,  ”r , 187 cÚ¡ ušt8_t * v®ue , size_t Ëngth ); 189 (* tg©t_db_©Œibu‹_wr™e_t è( tg©t_db_©Œibu‹ * t©Œib , 190  t”r , * tu£r_d©a ); 192 boÞ `g©t_db_©Œibu‹_wr™e ( g©t_db_©Œibu‹ * ©Œib , ušt16_t off£t , 193 cÚ¡ ušt8_t * v®ue , size_t Ën , 194 ušt8_t Ýcode , bdaddr_t * bdaddr , 195 g©t_db_©Œibu‹_wr™e_t func , 196 * u£r_d©a ); 198 boÞ `g©t_db_©Œibu‹_wr™e_»suÉ ( g©t_db_©Œibu‹ * ©Œib , 199  id ,  ”r ); @src/shared/gatt-helpers.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~"¤c/sh¬ed/queue.h " 30  ~"¤c/sh¬ed/©t.h " 31  ~"lib/uuid.h " 32  ~"¤c/sh¬ed/g©t-h–³rs.h " 33  ~"¤c/sh¬ed/utž.h " 35 #iâdeà MIN 36  #MIN ( a , b è(×è< (bè? (aè: (b)) ) 39  sbt_g©t_»suÉ { 40 ušt8_t mÝcode ; 41 * mpdu ; 42 ušt16_t mpdu_Ën ; 43 ušt16_t md©a_Ën ; 45 * mÝ ; 47  bt_g©t_»suÉ * mÃxt ; 50  bt_g©t_»suÉ * $»suÉ_ü—‹ ( ušt8_t Ýcode , cÚ¡ * pdu , 51 ušt16_t pdu_Ën , 52 ušt16_t d©a_Ën , 53 * Ý ) 55  bt_g©t_»suÉ * »suÉ ; 57 »suÉ = `Ãw0 ( bt_g©t_»suÉ , 1); 58 ià(! »suÉ ) 59  NULL ; 61 »suÉ -> pdu = `m®loc ( pdu_Ën ); 62 ià(! »suÉ -> pdu ) { 63 `ä“ ( »suÉ ); 64  NULL ; 67 »suÉ -> Ýcode = opcode; 68 »suÉ -> pdu_Ën =…du_len; 69 »suÉ -> d©a_Ën = data_len; 70 »suÉ -> Ý = op; 72 `memýy ( »suÉ -> pdu ,…du, pdu_Ën ); 74  »suÉ ; 75 } } 77  $»suÉ_de¡roy ( bt_g©t_»suÉ * »suÉ ) 79  bt_g©t_»suÉ * Ãxt ; 81  »suÉ ) { 82 Ãxt = »suÉ ->next; 84 `ä“ ( »suÉ -> pdu ); 85 `ä“ ( »suÉ ); 87 »suÉ = Ãxt ; 89 } } 91  $»suÉ_–em’t_couÁ ( bt_g©t_»suÉ * »suÉ ) 93  couÁ = 0; 94  bt_g©t_»suÉ * cur ; 96 cur = »suÉ ; 98  cur ) { 99 couÁ +ð cur -> pdu_Ën / cur-> d©a_Ën ; 100 cur = cur-> Ãxt ; 103  couÁ ; 104 } } 106  $bt_g©t_»suÉ_£rviû_couÁ ( bt_g©t_»suÉ * »suÉ ) 108 ià(! »suÉ ) 111 ià( »suÉ -> Ýcode !ð BT_ATT_OP_READ_BY_GRP_TYPE_RSP && 112 »suÉ -> Ýcode !ð BT_ATT_OP_FIND_BY_TYPE_VAL_RSP ) 115  `»suÉ_–em’t_couÁ ( »suÉ ); 116 } } 118  $bt_g©t_»suÉ_ch¬aù”i¡ic_couÁ ( bt_g©t_»suÉ * »suÉ ) 120 ià(! »suÉ ) 123 ià( »suÉ -> Ýcode !ð BT_ATT_OP_READ_BY_TYPE_RSP ) 133 ià( »suÉ -> d©a_Ën != 21 &&„esult->data_len != 7) 136  `»suÉ_–em’t_couÁ ( »suÉ ); 137 } } 139  $bt_g©t_»suÉ_desütÜ_couÁ ( bt_g©t_»suÉ * »suÉ ) 141 ià(! »suÉ ) 144 ià( »suÉ -> Ýcode !ð BT_ATT_OP_FIND_INFO_RSP ) 147  `»suÉ_–em’t_couÁ ( »suÉ ); 148 } } 150  $bt_g©t_»suÉ_šþuded_couÁ ( bt_g©t_»suÉ * »suÉ ) 152  bt_g©t_»suÉ * cur ; 153  couÁ = 0; 155 ià(! »suÉ ) 158 ià( »suÉ -> Ýcode !ð BT_ATT_OP_READ_BY_TYPE_RSP ) 168 ià( »suÉ -> d©a_Ën != 6 &&„esult->data_len != 8) 171  cur = »suÉ ; cur; cu¸ðcur-> Ãxt ) 172 ià( cur -> Ýcode =ð BT_ATT_OP_READ_BY_TYPE_RSP ) 173 couÁ +ð cur -> pdu_Ën / cur-> d©a_Ën ; 175  couÁ ; 176 } } 178 boÞ $bt_g©t_™”_š™ ( bt_g©t_™” * ™” ,  bt_g©t_»suÉ * »suÉ ) 180 ià(! ™” || ! »suÉ ) 181  çl£ ; 183 ™” -> »suÉ =„esult; 184 ™” -> pos = 0; 186  Œue ; 187 } } 189 cÚ¡ ušt8_t gbt_ba£_uuid [16] = { 194  boÞ $cÚv”t_uuid_Ë (cÚ¡ ušt8_t * ¤c , size_t Ën , ušt8_ˆ d¡ [16]) 196 ià( Ën == 16) { 197 `bsw­_128 ( ¤c , d¡ ); 198  Œue ; 201 ià( Ën != 2) 202  çl£ ; 204 `memýy ( d¡ , bt_ba£_uuid , (bt_base_uuid)); 205 d¡ [2] = ¤c [1]; 206 d¡ [3] = ¤c [0]; 208  Œue ; 209 } } 211  sdiscov”y_Ý { 212  bt_©t * m©t ; 213 ušt16_t m’d_hªdË ; 214  m»f_couÁ ; 215 bt_uuid_t muuid ; 216 ušt16_t m£rviû_ty³ ; 217  bt_g©t_»suÉ * m»suÉ_h—d ; 218  bt_g©t_»suÉ * m»suÉ_ž ; 219 bt_g©t_discov”y_ÿÎback_t mÿÎback ; 220 * mu£r_d©a ; 221 bt_g©t_de¡roy_func_t mde¡roy ; 224  bt_g©t_»suÉ * $»suÉ_­³nd ( ušt8_t Ýcode , cÚ¡ * pdu , 225 ušt16_t pdu_Ën , 226 ušt16_t d©a_Ën , 227  discov”y_Ý * Ý ) 229  bt_g©t_»suÉ * »suÉ ; 231 »suÉ = `»suÉ_ü—‹ ( Ýcode , pdu , pdu_Ën , d©a_Ën , Ý ); 232 ià(! »suÉ ) 233  NULL ; 235 ià(! Ý -> »suÉ_h—d ) 236 Ý -> »suÉ_h—d = op-> »suÉ_ž = »suÉ ; 238 Ý -> »suÉ_ž -> Ãxt = »suÉ ; 239 Ý -> »suÉ_ž = »suÉ ; 242  »suÉ ; 243 } } 245 boÞ $bt_g©t_™”_Ãxt_šþuded_£rviû ( bt_g©t_™” * ™” , 246 ušt16_t * hªdË , ušt16_ˆ* ¡¬t_hªdË , 247 ušt16_t * ’d_hªdË , ušt8_t uuid [16]) 249  bt_g©t_»suÉ * »ad_»suÉ ; 250  discov”y_Ý * Ý ; 251 cÚ¡ * pdu_±r ; 252  i = 0; 254 ià(! ™” || !™”-> »suÉ || ! hªdË || ! ¡¬t_hªdË || ! ’d_hªdË 255 || ! uuid ) 256  çl£ ; 259 ià( ™” -> »suÉ -> Ýcode !ð BT_ATT_OP_READ_BY_TYPE_RSP ) 260  çl£ ; 263 Ý = ™” -> »suÉ ->op; 264 ià( Ý -> uuid . ty³ !ð BT_UUID_UNSPEC ) 265  çl£ ; 273 ià( ™” -> »suÉ -> d©a_Ën != 8 && iter->result->data_len != 6) 274  çl£ ; 276 pdu_±r = ™” -> »suÉ -> pdu + i‹r-> pos ; 279 ià( ™” -> »suÉ -> d©a_Ën == 8) { 280 * hªdË = `g‘_Ë16 ( pdu_±r ); 281 * ¡¬t_hªdË = `g‘_Ë16 ( pdu_±r + 2); 282 * ’d_hªdË = `g‘_Ë16 ( pdu_±r + 4); 283 `cÚv”t_uuid_Ë ( pdu_±r + 6, 2, uuid ); 285 ™” -> pos +ð™”-> »suÉ -> d©a_Ën ; 287 ià( ™” -> pos =ð™”-> »suÉ -> pdu_Ën ) { 288 ™” -> »suÉ = i‹r->»suÉ-> Ãxt ; 289 ™” -> pos = 0; 292  Œue ; 295 * hªdË = `g‘_Ë16 ( pdu_±r ); 296 * ¡¬t_hªdË = `g‘_Ë16 ( pdu_±r + 2); 297 * ’d_hªdË = `g‘_Ë16 ( pdu_±r + 4); 298 »ad_»suÉ = ™” -> »suÉ ; 305  »ad_»suÉ =„—d_»suÉ-> Ãxt ;„—d_»suÉ; i ++) { 306 ià( i >ð( ™” -> pos / i‹r-> »suÉ -> d©a_Ën )) 309 »ad_»suÉ =„—d_»suÉ-> Ãxt ; 312 ià(! »ad_»suÉ ) 313  çl£ ; 315 `cÚv”t_uuid_Ë ( »ad_»suÉ -> pdu ,„—d_»suÉ-> d©a_Ën , uuid ); 316 ™” -> pos +ð™”-> »suÉ -> d©a_Ën ; 317 ià( ™” -> pos =ð™”-> »suÉ -> pdu_Ën ) { 318 ™” -> »suÉ = »ad_»suÉ -> Ãxt ; 319 ™” -> pos = 0; 322  Œue ; 323 } } 325 boÞ $bt_g©t_™”_Ãxt_£rviû ( bt_g©t_™” * ™” , 326 ušt16_t * ¡¬t_hªdË , ušt16_ˆ* ’d_hªdË , 327 ušt8_t uuid [16]) 329  discov”y_Ý * Ý ; 330 cÚ¡ * pdu_±r ; 331 bt_uuid_t tmp ; 333 ià(! ™” || !™”-> »suÉ || ! ¡¬t_hªdË || ! ’d_hªdË || ! uuid ) 334  çl£ ; 336 Ý = ™” -> »suÉ ->op; 337 pdu_±r = ™” -> »suÉ -> pdu + i‹r-> pos ; 339  ™” -> »suÉ -> Ýcode ) { 340  BT_ATT_OP_READ_BY_GRP_TYPE_RSP : 341 * ¡¬t_hªdË = `g‘_Ë16 ( pdu_±r ); 342 * ’d_hªdË = `g‘_Ë16 ( pdu_±r + 2); 343 `cÚv”t_uuid_Ë ( pdu_±r + 4, ™” -> »suÉ -> d©a_Ën - 4, uuid ); 345  BT_ATT_OP_FIND_BY_TYPE_VAL_RSP : 346 * ¡¬t_hªdË = `g‘_Ë16 ( pdu_±r ); 347 * ’d_hªdË = `g‘_Ë16 ( pdu_±r + 2); 349 `bt_uuid_to_uuid128 (& Ý -> uuid , & tmp ); 350 `memýy ( uuid , tmp . v®ue . u128 . d©a , 16); 353  çl£ ; 357 ™” -> pos +ð™”-> »suÉ -> d©a_Ën ; 358 ià( ™” -> pos =ð™”-> »suÉ -> pdu_Ën ) { 359 ™” -> »suÉ = i‹r->»suÉ-> Ãxt ; 360 ™” -> pos = 0; 363  Œue ; 364 } } 366 boÞ $bt_g©t_™”_Ãxt_ch¬aù”i¡ic ( bt_g©t_™” * ™” , 367 ušt16_t * ¡¬t_hªdË , ušt16_ˆ* ’d_hªdË , 368 ušt16_t * v®ue_hªdË , ušt8_t * ´Ý”t›s , 369 ušt8_t uuid [16]) 371  discov”y_Ý * Ý ; 372 cÚ¡ * pdu_±r ; 374 ià(! ™” || !™”-> »suÉ || ! ¡¬t_hªdË || ! ’d_hªdË || 375 ! v®ue_hªdË || ! ´Ý”t›s || ! uuid ) 376  çl£ ; 378 ià( ™” -> »suÉ -> Ýcode !ð BT_ATT_OP_READ_BY_TYPE_RSP ) 379  çl£ ; 382 Ý = ™” -> »suÉ ->op; 383 ià( Ý -> uuid . ty³ !ð BT_UUID_UNSPEC ) 384  çl£ ; 392 ià( ™” -> »suÉ -> d©a_Ën != 21 && iter->result->data_len != 7) 393  çl£ ; 395 pdu_±r = ™” -> »suÉ -> pdu + i‹r-> pos ; 397 * ¡¬t_hªdË = `g‘_Ë16 ( pdu_±r ); 398 * ´Ý”t›s = (( ušt8_t *è pdu_±r )[2]; 399 * v®ue_hªdË = `g‘_Ë16 ( pdu_±r + 3); 400 `cÚv”t_uuid_Ë ( pdu_±r + 5, ™” -> »suÉ -> d©a_Ën - 5, uuid ); 402 ™” -> pos +ð™”-> »suÉ -> d©a_Ën ; 403 ià( ™” -> pos =ð™”-> »suÉ -> pdu_Ën ) { 404 ™” -> »suÉ = i‹r->»suÉ-> Ãxt ; 405 ™” -> pos = 0; 408 ià(! ™” -> »suÉ ) { 409 * ’d_hªdË = Ý ->end_handle; 410  Œue ; 413 * ’d_hªdË = `g‘_Ë16 ( ™” -> »suÉ -> pdu + i‹r-> pos ) - 1; 415  Œue ; 416 } } 418 boÞ $bt_g©t_™”_Ãxt_desütÜ ( bt_g©t_™” * ™” , ušt16_t * hªdË , 419 ušt8_t uuid [16]) 421 cÚ¡ * pdu_±r ; 423 ià(! ™” || !™”-> »suÉ || ! hªdË || ! uuid ) 424  çl£ ; 426 ià( ™” -> »suÉ -> Ýcode !ð BT_ATT_OP_FIND_INFO_RSP ) 427  çl£ ; 429 pdu_±r = ™” -> »suÉ -> pdu + i‹r-> pos ; 431 * hªdË = `g‘_Ë16 ( pdu_±r ); 432 `cÚv”t_uuid_Ë ( pdu_±r + 2, ™” -> »suÉ -> d©a_Ën - 2, uuid ); 434 ™” -> pos +ð™”-> »suÉ -> d©a_Ën ; 435 ià( ™” -> pos =ð™”-> »suÉ -> pdu_Ën ) { 436 ™” -> »suÉ = i‹r->»suÉ-> Ãxt ; 437 ™” -> pos = 0; 440  Œue ; 441 } } 443 boÞ $bt_g©t_™”_Ãxt_»ad_by_ty³ ( bt_g©t_™” * ™” , 444 ušt16_t * hªdË , ušt16_ˆ* Ëngth , 445 cÚ¡ ušt8_t ** v®ue ) 447  discov”y_Ý * Ý ; 448 cÚ¡ * pdu_±r ; 450 ià(! ™” || !™”-> »suÉ || ! hªdË || ! Ëngth || ! v®ue ) 451  çl£ ; 453 ià( ™” -> »suÉ -> Ýcode !ð BT_ATT_OP_READ_BY_TYPE_RSP ) 454  çl£ ; 460 Ý = ™” -> »suÉ ->op; 461 ià( Ý -> uuid . ty³ =ð BT_UUID_UNSPEC ) 462  çl£ ; 464 pdu_±r = ™” -> »suÉ -> pdu + i‹r-> pos ; 466 * hªdË = `g‘_Ë16 ( pdu_±r ); 467 * Ëngth = ™” -> »suÉ -> d©a_Ën - 2; 468 * v®ue = pdu_±r + 2; 470 ™” -> pos +ð™”-> »suÉ -> d©a_Ën ; 471 ià( ™” -> pos =ð™”-> »suÉ -> pdu_Ën ) { 472 ™” -> »suÉ = i‹r->»suÉ-> Ãxt ; 473 ™” -> pos = 0; 476  Œue ; 477 } } 479  smtu_Ý { 480  bt_©t * m©t ; 481 ušt16_t mþ›Á_rx_mtu ; 482 bt_g©t_»suÉ_ÿÎback_t mÿÎback ; 483 * mu£r_d©a ; 484 bt_g©t_de¡roy_func_t mde¡roy ; 487  $de¡roy_mtu_Ý (* u£r_d©a ) 489  mtu_Ý * Ý = u£r_d©a ; 491 ià( Ý -> de¡roy ) 492 Ý -> `de¡roy (Ý-> u£r_d©a ); 494 `ä“ ( Ý ); 495 } } 497  ušt8_t $´oûss_”rÜ (cÚ¡ * pdu , ušt16_t Ëngth ) 499 cÚ¡  bt_©t_pdu_”rÜ_r¥ * ”rÜ_pdu ; 501 ià(! pdu || Ëngth !ð( bt_©t_pdu_”rÜ_r¥ )) 504 ”rÜ_pdu = pdu ; 506  ”rÜ_pdu -> ecode ; 507 } } 509  $mtu_cb ( ušt8_t Ýcode , cÚ¡ * pdu , ušt16_t Ëngth , 510 * u£r_d©a ) 512  mtu_Ý * Ý = u£r_d©a ; 513 boÞ sucûss = Œue ; 514 ušt8_t ©t_ecode = 0; 515 ušt16_t £rv”_rx_mtu ; 517 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 518 sucûss = çl£ ; 519 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 520  dÚe ; 523 ià( Ýcode !ð BT_ATT_OP_MTU_RSP || ! pdu || Ëngth != 2) { 524 sucûss = çl£ ; 525  dÚe ; 528 £rv”_rx_mtu = `g‘_Ë16 ( pdu ); 529 `bt_©t_£t_mtu ( Ý -> ©t , `MIN (Ý-> þ›Á_rx_mtu , £rv”_rx_mtu )); 531 dÚe : 532 ià( Ý -> ÿÎback ) 533 Ý -> `ÿÎback ( sucûss , ©t_ecode , op-> u£r_d©a ); 534 } } 536 boÞ $bt_g©t_exchªge_mtu ( bt_©t * ©t , ušt16_t þ›Á_rx_mtu , 537 bt_g©t_»suÉ_ÿÎback_t ÿÎback , 538 * u£r_d©a , 539 bt_g©t_de¡roy_func_t de¡roy ) 541  mtu_Ý * Ý ; 542 ušt8_t pdu [2]; 544 ià(! ©t || ! þ›Á_rx_mtu ) 545  çl£ ; 547 Ý = `Ãw0 ( mtu_Ý , 1); 548 ià(! Ý ) 549  çl£ ; 551 Ý -> ©t =‡tt; 552 Ý -> þ›Á_rx_mtu = client_rx_mtu; 553 Ý -> ÿÎback = callback; 554 Ý -> u£r_d©a = user_data; 555 Ý -> de¡roy = destroy; 557 `put_Ë16 ( þ›Á_rx_mtu , pdu ); 559 ià(! `bt_©t_£nd ( ©t , BT_ATT_OP_MTU_REQ , pdu , (pdu), 560 mtu_cb , Ý , 561 de¡roy_mtu_Ý )) { 562 `ä“ ( Ý ); 563  çl£ ; 566  Œue ; 567 } } 569  $put_uuid_Ë (cÚ¡ bt_uuid_t * ¤c , * d¡ ) 571 bt_uuid_t uuid ; 573  ¤c -> ty³ ) { 574  BT_UUID16 : 575 `put_Ë16 ( ¤c -> v®ue . u16 , d¡ ); 577  BT_UUID128 : 578 `bsw­_128 (& ¤c -> v®ue . u128 , d¡ ); 580  BT_UUID32 : 581 `bt_uuid_to_uuid128 ( ¤c , & uuid ); 582 `bsw­_128 (& uuid . v®ue . u128 , d¡ ); 584  BT_UUID_UNSPEC : 588 } } 590  šlše  $g‘_uuid_Ën (cÚ¡ bt_uuid_t * uuid ) 592 ià(! uuid ) 595  ( uuid -> ty³ =ð BT_UUID16 ) ? 2 : 16; 596 } } 598  discov”y_Ý * $discov”y_Ý_»f ( discov”y_Ý * Ý ) 600 `__sync_ãtch_ªd_add (& Ý -> »f_couÁ , 1); 602  Ý ; 603 } } 605  $discov”y_Ý_uÄef (* d©a ) 607  discov”y_Ý * Ý = d©a ; 609 ià( `__sync_sub_ªd_ãtch (& Ý -> »f_couÁ , 1)) 612 ià( Ý -> de¡roy ) 613 Ý -> `de¡roy (Ý-> u£r_d©a ); 615 `»suÉ_de¡roy ( Ý -> »suÉ_h—d ); 617 `ä“ ( Ý ); 618 } } 620  $»ad_by_g½_ty³_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 621 ušt16_t Ëngth , * u£r_d©a ) 623  discov”y_Ý * Ý = u£r_d©a ; 624 boÞ sucûss ; 625 ušt8_t ©t_ecode = 0; 626  bt_g©t_»suÉ * fš®_»suÉ = NULL ; 627  bt_g©t_»suÉ * cur_»suÉ ; 628 size_t d©a_Ëngth ; 629 size_t li¡_Ëngth ; 630 ušt16_t Ï¡_’d ; 632 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 633 sucûss = çl£ ; 634 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 636 ià( ©t_ecode =ð BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND && 637 Ý -> »suÉ_h—d ) 638  sucûss ; 640  dÚe ; 650 ià( Ýcode !ð BT_ATT_OP_READ_BY_GRP_TYPE_RSP || ! pdu || Ëngth < 7) { 651 sucûss = çl£ ; 652  dÚe ; 655 d©a_Ëngth = (( ušt8_t *è pdu )[0]; 656 li¡_Ëngth = Ëngth - 1; 658 ià(( li¡_Ëngth % d©a_Ëngth ) || 659 ( d©a_Ëngth != 6 && data_length != 20)) { 660 sucûss = çl£ ; 661  dÚe ; 667 cur_»suÉ = `»suÉ_­³nd ( Ýcode , pdu + 1, li¡_Ëngth , d©a_Ëngth , 668 Ý ); 669 ià(! cur_»suÉ ) { 670 sucûss = çl£ ; 671  dÚe ; 674 Ï¡_’d = `g‘_Ë16 ( pdu + Ëngth - d©a_Ëngth + 2); 675 ià( Ï¡_’d < Ý -> ’d_hªdË ) { 676 ušt8_t pdu [6]; 678 `put_Ë16 ( Ï¡_’d + 1, pdu ); 679 `put_Ë16 ( Ý -> ’d_hªdË , pdu + 2); 680 `put_Ë16 ( Ý -> £rviû_ty³ , pdu + 4); 682 ià( `bt_©t_£nd ( Ý -> ©t , BT_ATT_OP_READ_BY_GRP_TYPE_REQ , 683 pdu , (pdu), 684 »ad_by_g½_ty³_cb , 685 `discov”y_Ý_»f ( Ý ), 686 discov”y_Ý_uÄef )) 689 `discov”y_Ý_uÄef ( Ý ); 690 sucûss = çl£ ; 691  dÚe ; 699 ià( Ï¡_’d =ð0xfffà&&†a¡_’d !ð Ý -> ’d_hªdË ) 700 `put_Ë16 ( Ý -> ’d_hªdË , 701 cur_»suÉ -> pdu + Ëngth - d©a_Ëngth + 1); 703 sucûss : 705 fš®_»suÉ = Ý -> »suÉ_h—d ; 706 sucûss = Œue ; 708 dÚe : 709 ià( Ý -> ÿÎback ) 710 Ý -> `ÿÎback ( sucûss , ©t_ecode , fš®_»suÉ , op-> u£r_d©a ); 711 } } 713  $fšd_by_ty³_v®_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 714 ušt16_t Ëngth , * u£r_d©a ) 716  discov”y_Ý * Ý = u£r_d©a ; 717 boÞ sucûss ; 718 ušt8_t ©t_ecode = 0; 719  bt_g©t_»suÉ * fš®_»suÉ = NULL ; 720 ušt16_t Ï¡_’d ; 722 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 723 sucûss = çl£ ; 724 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 726 ià( ©t_ecode =ð BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND && 727 Ý -> »suÉ_h—d ) 728  sucûss ; 730  dÚe ; 736 ià( Ýcode !ð BT_ATT_OP_FIND_BY_TYPE_VAL_RSP || ! pdu || ! Ëngth || 737 Ëngth % 4) { 738 sucûss = çl£ ; 739  dÚe ; 742 ià(! `»suÉ_­³nd ( Ýcode , pdu , Ëngth , 4, Ý )) { 743 sucûss = çl£ ; 744  dÚe ; 753 Ï¡_’d = `g‘_Ë16 ( pdu + Ëngth - 2); 754 ià( Ï¡_’d < Ý -> ’d_hªdË ) { 755 ušt8_t pdu [6 + `g‘_uuid_Ën (& Ý -> uuid )]; 757 `put_Ë16 ( Ï¡_’d + 1, pdu ); 758 `put_Ë16 ( Ý -> ’d_hªdË , pdu + 2); 759 `put_Ë16 ( Ý -> £rviû_ty³ , pdu + 4); 760 `put_uuid_Ë (& Ý -> uuid , pdu + 6); 762 ià( `bt_©t_£nd ( Ý -> ©t , BT_ATT_OP_FIND_BY_TYPE_VAL_REQ , 763 pdu , (pdu), 764 fšd_by_ty³_v®_cb , 765 `discov”y_Ý_»f ( Ý ), 766 discov”y_Ý_uÄef )) 769 `discov”y_Ý_uÄef ( Ý ); 770 sucûss = çl£ ; 771  dÚe ; 774 sucûss : 776 fš®_»suÉ = Ý -> »suÉ_h—d ; 777 sucûss = Œue ; 779 dÚe : 780 ià( Ý -> ÿÎback ) 781 Ý -> `ÿÎback ( sucûss , ©t_ecode , fš®_»suÉ , op-> u£r_d©a ); 782 } } 784  boÞ $discov”_£rviûs ( bt_©t * ©t , bt_uuid_t * uuid , 785 ušt16_t ¡¬t , ušt16_ˆ ’d , 786 bt_g©t_discov”y_ÿÎback_t ÿÎback , 787 * u£r_d©a , 788 bt_g©t_de¡roy_func_t de¡roy , 789 boÞ ´im¬y ) 791  discov”y_Ý * Ý ; 792 boÞ »suÉ ; 794 ià(! ©t ) 795  çl£ ; 797 Ý = `Ãw0 ( discov”y_Ý , 1); 798 ià(! Ý ) 799  çl£ ; 801 Ý -> ©t =‡tt; 802 Ý -> ’d_hªdË = ’d ; 803 Ý -> ÿÎback = callback; 804 Ý -> u£r_d©a = user_data; 805 Ý -> de¡roy = destroy; 807 Ý -> £rviû_ty³ = ´im¬y ? GATT_PRIM_SVC_UUID : GATT_SND_SVC_UUID ; 810 ià(! uuid ) { 811 ušt8_t pdu [6]; 813 `put_Ë16 ( ¡¬t , pdu ); 814 `put_Ë16 ( ’d , pdu + 2); 815 `put_Ë16 ( Ý -> £rviû_ty³ , pdu + 4); 817 »suÉ = `bt_©t_£nd ( ©t , BT_ATT_OP_READ_BY_GRP_TYPE_REQ , 818 pdu , (pdu), 819 »ad_by_g½_ty³_cb , 820 `discov”y_Ý_»f ( Ý ), 821 discov”y_Ý_uÄef ); 823 ušt8_t pdu [6 + `g‘_uuid_Ën ( uuid )]; 825 ià( uuid -> ty³ =ð BT_UUID_UNSPEC ) { 826 `ä“ ( Ý ); 827  çl£ ; 831 Ý -> uuid = *uuid; 833 `put_Ë16 ( ¡¬t , pdu ); 834 `put_Ë16 ( ’d , pdu + 2); 835 `put_Ë16 ( Ý -> £rviû_ty³ , pdu + 4); 836 `put_uuid_Ë (& Ý -> uuid , pdu + 6); 838 »suÉ = `bt_©t_£nd ( ©t , BT_ATT_OP_FIND_BY_TYPE_VAL_REQ , 839 pdu , (pdu), 840 fšd_by_ty³_v®_cb , 841 `discov”y_Ý_»f ( Ý ), 842 discov”y_Ý_uÄef ); 845 ià(! »suÉ ) 846 `ä“ ( Ý ); 848  »suÉ ; 849 } } 851 boÞ $bt_g©t_discov”_®l_´im¬y_£rviûs ( bt_©t * ©t , bt_uuid_t * uuid , 852 bt_g©t_discov”y_ÿÎback_t ÿÎback , 853 * u£r_d©a , 854 bt_g©t_de¡roy_func_t de¡roy ) 856  `bt_g©t_discov”_´im¬y_£rviûs ( ©t , uuid , 0x0001, 0xffff, 857 ÿÎback , u£r_d©a , 858 de¡roy ); 859 } } 861 boÞ $bt_g©t_discov”_´im¬y_£rviûs ( bt_©t * ©t , bt_uuid_t * uuid , 862 ušt16_t ¡¬t , ušt16_ˆ ’d , 863 bt_g©t_discov”y_ÿÎback_t ÿÎback , 864 * u£r_d©a , 865 bt_g©t_de¡roy_func_t de¡roy ) 867  `discov”_£rviûs ( ©t , uuid , ¡¬t , ’d , ÿÎback , u£r_d©a , 868 de¡roy , Œue ); 869 } } 871 boÞ $bt_g©t_discov”_£cÚd¬y_£rviûs ( bt_©t * ©t , bt_uuid_t * uuid , 872 ušt16_t ¡¬t , ušt16_ˆ ’d , 873 bt_g©t_discov”y_ÿÎback_t ÿÎback , 874 * u£r_d©a , 875 bt_g©t_de¡roy_func_t de¡roy ) 877  `discov”_£rviûs ( ©t , uuid , ¡¬t , ’d , ÿÎback , u£r_d©a , 878 de¡roy , çl£ ); 879 } } 881  s»ad_šþ_d©a { 882  discov”y_Ý * mÝ ; 883  bt_g©t_»suÉ * m»suÉ ; 884  mpos ; 885  m»f_couÁ ; 888  »ad_šþ_d©a * $Ãw_»ad_šþuded ( bt_g©t_»suÉ * »s ) 890  »ad_šþ_d©a * d©a ; 892 d©a = `Ãw0 ( »ad_šþ_d©a , 1); 893 ià(! d©a ) 894  NULL ; 896 d©a -> Ý = `discov”y_Ý_»f ( »s ->op); 897 d©a -> »suÉ = »s ; 899  d©a ; 900 } }; 902  »ad_šþ_d©a * $»ad_šþuded_»f ( »ad_šþ_d©a * d©a ) 904 `__sync_ãtch_ªd_add (& d©a -> »f_couÁ , 1); 906  d©a ; 907 } } 909  $»ad_šþuded_uÄef (* d©a ) 911  »ad_šþ_d©a * »ad_d©a = d©a ; 913 ià( `__sync_sub_ªd_ãtch (& »ad_d©a -> »f_couÁ , 1)) 916 `discov”y_Ý_uÄef ( »ad_d©a -> Ý ); 918 `ä“ ( »ad_d©a ); 919 } } 921  discov”_šþuded_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 922 ušt16_t Ëngth , * u£r_d©a ); 924  $»ad_šþuded_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 925 ušt16_t Ëngth , * u£r_d©a ) 927  »ad_šþ_d©a * d©a = u£r_d©a ; 928  bt_g©t_»suÉ * fš®_»suÉ = NULL ; 929  discov”y_Ý * Ý = d©a ->op; 930 ušt8_t ©t_ecode = 0; 931 ušt8_t »ad_pdu [2]; 932 boÞ sucûss ; 934 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 935 sucûss = çl£ ; 936 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 937  dÚe ; 940 ià( Ýcode !ð BT_ATT_OP_READ_RSP || (! pdu && Ëngth )) { 941 sucûss = çl£ ; 942  dÚe ; 949 ià( Ëngth != 16) { 950 sucûss = çl£ ; 951  dÚe ; 954 ià(! `»suÉ_­³nd ( Ýcode , pdu , Ëngth ,†’gth, Ý )) { 955 sucûss = çl£ ; 956  dÚe ; 959 ià( d©a -> pos =ðd©a-> »suÉ -> pdu_Ën ) { 960 ušt16_t Ï¡_hªdË ; 961 ušt8_t pdu [6]; 963 Ï¡_hªdË = `g‘_Ë16 ( d©a -> »suÉ -> pdu + d©a-> pos - 964 d©a -> »suÉ -> d©a_Ën ); 965 ià( Ï¡_hªdË =ð Ý -> ’d_hªdË ) { 966 fš®_»suÉ = Ý -> »suÉ_h—d ; 967 sucûss = Œue ; 968  dÚe ; 971 `put_Ë16 ( Ï¡_hªdË + 1, pdu ); 972 `put_Ë16 ( Ý -> ’d_hªdË , pdu + 2); 973 `put_Ë16 ( GATT_INCLUDE_UUID , pdu + 4); 975 ià( `bt_©t_£nd ( Ý -> ©t , BT_ATT_OP_READ_BY_TYPE_REQ , 976 pdu , Õdu), discov”_šþuded_cb , 977 `discov”y_Ý_»f ( Ý ), discov”y_Ý_uÄef )) 980 `discov”y_Ý_uÄef ( Ý ); 981 sucûss = çl£ ; 982  dÚe ; 985 `memýy ( »ad_pdu , d©a -> »suÉ -> pdu + d©a-> pos + 2, ( ušt16_t )); 987 d©a -> pos +ðd©a-> »suÉ -> d©a_Ën ; 989 ià( `bt_©t_£nd ( Ý -> ©t , BT_ATT_OP_READ_REQ , »ad_pdu , (read_pdu), 990 »ad_šþuded_cb , `»ad_šþuded_»f ( d©a ), 991 »ad_šþuded_uÄef )) 994 `»ad_šþuded_uÄef ( d©a ); 995 sucûss = çl£ ; 997 dÚe : 998 ià( Ý -> ÿÎback ) 999 Ý -> `ÿÎback ( sucûss , ©t_ecode , fš®_»suÉ , op-> u£r_d©a ); 1000 } } 1002  $»ad_šþuded ( »ad_šþ_d©a * d©a ) 1004  discov”y_Ý * Ý = d©a ->op; 1005 ušt8_t pdu [2]; 1007 `memýy ( pdu , d©a -> »suÉ ->pdu + 2, ( ušt16_t )); 1009 d©a -> pos +ðd©a-> »suÉ -> d©a_Ën ; 1011 ià( `bt_©t_£nd ( Ý -> ©t , BT_ATT_OP_READ_REQ , pdu , (pdu), 1012 »ad_šþuded_cb , 1013 `»ad_šþuded_»f ( d©a ), 1014 »ad_šþuded_uÄef )) 1017 `»ad_šþuded_uÄef ( d©a ); 1019 ià( Ý -> ÿÎback ) 1020 Ý -> `ÿÎback ( çl£ , 0, NULL , d©a ->Ý-> u£r_d©a ); 1021 } } 1023  $discov”_šþuded_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 1024 ušt16_t Ëngth , * u£r_d©a ) 1026  bt_g©t_»suÉ * fš®_»suÉ = NULL ; 1027  discov”y_Ý * Ý = u£r_d©a ; 1028  bt_g©t_»suÉ * cur_»suÉ ; 1029 ušt8_t ©t_ecode = 0; 1030 ušt16_t Ï¡_hªdË ; 1031 size_t d©a_Ëngth ; 1032 boÞ sucûss ; 1034 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 1035 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 1037 ià( ©t_ecode =ð BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND && 1038 Ý -> »suÉ_h—d ) 1039  dÚe ; 1041 sucûss = çl£ ; 1042  çžed ; 1045 ià( Ýcode !ð BT_ATT_OP_READ_BY_TYPE_RSP || ! pdu || Ëngth < 6) { 1046 sucûss = çl£ ; 1047  çžed ; 1050 d©a_Ëngth = ((cÚ¡ ušt8_t *è pdu )[0]; 1061 ià(( d©a_Ëngth != 8 && data_length != 6) || 1062 ( Ëngth - 1è% d©a_Ëngth ) { 1063 sucûss = çl£ ; 1064  çžed ; 1067 cur_»suÉ = `»suÉ_­³nd ( Ýcode , pdu + 1, Ëngth - 1, d©a_Ëngth , 1068 Ý ); 1069 ià(! cur_»suÉ ) { 1070 sucûss = çl£ ; 1071  çžed ; 1074 ià( d©a_Ëngth == 6) { 1075  »ad_šþ_d©a * d©a ; 1077 d©a = `Ãw_»ad_šþuded ( cur_»suÉ ); 1078 ià(! d©a ) { 1079 sucûss = çl£ ; 1080  çžed ; 1083 `»ad_šþuded ( d©a ); 1087 Ï¡_hªdË = `g‘_Ë16 ( pdu + Ëngth - d©a_Ëngth ); 1088 ià( Ï¡_hªdË !ð Ý -> ’d_hªdË ) { 1089 ušt8_t pdu [6]; 1091 `put_Ë16 ( Ï¡_hªdË + 1, pdu ); 1092 `put_Ë16 ( Ý -> ’d_hªdË , pdu + 2); 1093 `put_Ë16 ( GATT_INCLUDE_UUID , pdu + 4); 1095 ià( `bt_©t_£nd ( Ý -> ©t , BT_ATT_OP_READ_BY_TYPE_REQ , 1096 pdu , (pdu), 1097 discov”_šþuded_cb , 1098 `discov”y_Ý_»f ( Ý ), 1099 discov”y_Ý_uÄef )) 1102 `discov”y_Ý_uÄef ( Ý ); 1103 sucûss = çl£ ; 1104  çžed ; 1107 dÚe : 1108 sucûss = Œue ; 1109 fš®_»suÉ = Ý -> »suÉ_h—d ; 1111 çžed : 1112 ià( Ý -> ÿÎback ) 1113 Ý -> `ÿÎback ( sucûss , ©t_ecode , fš®_»suÉ , op-> u£r_d©a ); 1114 } } 1116 boÞ $bt_g©t_discov”_šþuded_£rviûs ( bt_©t * ©t , 1117 ušt16_t ¡¬t , ušt16_ˆ ’d , 1118 bt_g©t_discov”y_ÿÎback_t ÿÎback , 1119 * u£r_d©a , 1120 bt_g©t_de¡roy_func_t de¡roy ) 1122  discov”y_Ý * Ý ; 1123 ušt8_t pdu [6]; 1125 ià(! ©t ) 1126  çl£ ; 1128 Ý = `Ãw0 ( discov”y_Ý , 1); 1129 ià(! Ý ) 1130  çl£ ; 1132 Ý -> ©t =‡tt; 1133 Ý -> ÿÎback = callback; 1134 Ý -> u£r_d©a = user_data; 1135 Ý -> de¡roy = destroy; 1136 Ý -> ’d_hªdË = ’d ; 1138 `put_Ë16 ( ¡¬t , pdu ); 1139 `put_Ë16 ( ’d , pdu + 2); 1140 `put_Ë16 ( GATT_INCLUDE_UUID , pdu + 4); 1142 ià(! `bt_©t_£nd ( ©t , BT_ATT_OP_READ_BY_TYPE_REQ , 1143 pdu , (pdu), 1144 discov”_šþuded_cb , 1145 `discov”y_Ý_»f ( Ý ), 1146 discov”y_Ý_uÄef )) { 1147 `ä“ ( Ý ); 1148  çl£ ; 1151  Œue ; 1152 } } 1154  $discov”_chrcs_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 1155 ušt16_t Ëngth , * u£r_d©a ) 1157  discov”y_Ý * Ý = u£r_d©a ; 1158 boÞ sucûss ; 1159 ušt8_t ©t_ecode = 0; 1160  bt_g©t_»suÉ * fš®_»suÉ = NULL ; 1161 size_t d©a_Ëngth ; 1162 ušt16_t Ï¡_hªdË ; 1164 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 1165 sucûss = çl£ ; 1166 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 1168 ià( ©t_ecode =ð BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND && 1169 Ý -> »suÉ_h—d ) 1170  sucûss ; 1172  dÚe ; 1183 ià( Ýcode !ð BT_ATT_OP_READ_BY_TYPE_RSP || ! pdu || Ëngth < 8) { 1184 sucûss = çl£ ; 1185  dÚe ; 1188 d©a_Ëngth = (( ušt8_t *è pdu )[0]; 1190 ià((( Ëngth - 1è% d©a_Ëngth ) || 1191 ( d©a_Ëngth != 7 && data_length != 21)) { 1192 sucûss = çl£ ; 1193  dÚe ; 1196 ià(! `»suÉ_­³nd ( Ýcode , pdu + 1, Ëngth - 1, 1197 d©a_Ëngth , Ý )) { 1198 sucûss = çl£ ; 1199  dÚe ; 1201 Ï¡_hªdË = `g‘_Ë16 ( pdu + Ëngth - d©a_Ëngth ); 1202 ià( Ï¡_hªdË !ð Ý -> ’d_hªdË ) { 1203 ušt8_t pdu [6]; 1205 `put_Ë16 ( Ï¡_hªdË + 1, pdu ); 1206 `put_Ë16 ( Ý -> ’d_hªdË , pdu + 2); 1207 `put_Ë16 ( GATT_CHARAC_UUID , pdu + 4); 1209 ià( `bt_©t_£nd ( Ý -> ©t , BT_ATT_OP_READ_BY_TYPE_REQ , 1210 pdu , (pdu), 1211 discov”_chrcs_cb , 1212 `discov”y_Ý_»f ( Ý ), 1213 discov”y_Ý_uÄef )) 1216 `discov”y_Ý_uÄef ( Ý ); 1217 sucûss = çl£ ; 1218  dÚe ; 1221 sucûss : 1222 fš®_»suÉ = Ý -> »suÉ_h—d ; 1223 sucûss = Œue ; 1225 dÚe : 1226 ià( Ý -> ÿÎback ) 1227 Ý -> `ÿÎback ( sucûss , ©t_ecode , fš®_»suÉ , 1228 Ý -> u£r_d©a ); 1229 } } 1231 boÞ $bt_g©t_discov”_ch¬aù”i¡ics ( bt_©t * ©t , 1232 ušt16_t ¡¬t , ušt16_ˆ ’d , 1233 bt_g©t_discov”y_ÿÎback_t ÿÎback , 1234 * u£r_d©a , 1235 bt_g©t_de¡roy_func_t de¡roy ) 1237  discov”y_Ý * Ý ; 1238 ušt8_t pdu [6]; 1240 ià(! ©t ) 1241  çl£ ; 1243 Ý = `Ãw0 ( discov”y_Ý , 1); 1244 ià(! Ý ) 1245  çl£ ; 1247 Ý -> ©t =‡tt; 1248 Ý -> ÿÎback = callback; 1249 Ý -> u£r_d©a = user_data; 1250 Ý -> de¡roy = destroy; 1251 Ý -> ’d_hªdË = ’d ; 1253 `put_Ë16 ( ¡¬t , pdu ); 1254 `put_Ë16 ( ’d , pdu + 2); 1255 `put_Ë16 ( GATT_CHARAC_UUID , pdu + 4); 1257 ià(! `bt_©t_£nd ( ©t , BT_ATT_OP_READ_BY_TYPE_REQ , 1258 pdu , (pdu), 1259 discov”_chrcs_cb , 1260 `discov”y_Ý_»f ( Ý ), 1261 discov”y_Ý_uÄef )) { 1262 `ä“ ( Ý ); 1263  çl£ ; 1266  Œue ; 1267 } } 1269  $»ad_by_ty³_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 1270 ušt16_t Ëngth , * u£r_d©a ) 1272  discov”y_Ý * Ý = u£r_d©a ; 1273 boÞ sucûss ; 1274 ušt8_t ©t_ecode = 0; 1275 size_t d©a_Ëngth ; 1276 ušt16_t Ï¡_hªdË ; 1278 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 1279 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 1281 ià( ©t_ecode =ð BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND && 1282 Ý -> »suÉ_h—d ) 1283 sucûss = Œue ; 1285 sucûss = çl£ ; 1287  dÚe ; 1290 ià( Ýcode !ð BT_ATT_OP_READ_BY_TYPE_RSP || ! pdu ) { 1291 sucûss = çl£ ; 1292 ©t_ecode = 0; 1293  dÚe ; 1296 d©a_Ëngth = (( ušt8_t *è pdu )[0]; 1297 ià((( Ëngth - 1è% d©a_Ëngth )) { 1298 sucûss = çl£ ; 1299 ©t_ecode = 0; 1300  dÚe ; 1303 ià(! `»suÉ_­³nd ( Ýcode , pdu + 1, Ëngth - 1, d©a_Ëngth , Ý )) { 1304 sucûss = çl£ ; 1305 ©t_ecode = 0; 1306  dÚe ; 1309 Ï¡_hªdË = `g‘_Ë16 ( pdu + Ëngth - d©a_Ëngth ); 1310 ià( Ï¡_hªdË !ð Ý -> ’d_hªdË ) { 1311 ušt8_t pdu [4 + `g‘_uuid_Ën (& Ý -> uuid )]; 1313 `put_Ë16 ( Ï¡_hªdË + 1, pdu ); 1314 `put_Ë16 ( Ý -> ’d_hªdË , pdu + 2); 1315 `put_uuid_Ë (& Ý -> uuid , pdu + 4); 1317 ià( `bt_©t_£nd ( Ý -> ©t , BT_ATT_OP_READ_BY_TYPE_REQ , 1318 pdu , (pdu), 1319 »ad_by_ty³_cb , 1320 `discov”y_Ý_»f ( Ý ), 1321 discov”y_Ý_uÄef )) 1324 `discov”y_Ý_uÄef ( Ý ); 1325 sucûss = çl£ ; 1326  dÚe ; 1329 sucûss = Œue ; 1331 dÚe : 1332 ià( Ý -> ÿÎback ) 1333 Ý -> `ÿÎback ( sucûss , ©t_ecode , sucûs ? op-> »suÉ_h—d : 1334 NULL , Ý -> u£r_d©a ); 1335 } } 1337 boÞ $bt_g©t_»ad_by_ty³ ( bt_©t * ©t , ušt16_t ¡¬t , ušt16_ˆ ’d , 1338 cÚ¡ bt_uuid_t * uuid , 1339 bt_g©t_discov”y_ÿÎback_t ÿÎback , 1340 * u£r_d©a , 1341 bt_g©t_de¡roy_func_t de¡roy ) 1343  discov”y_Ý * Ý ; 1344 ušt8_t pdu [4 + `g‘_uuid_Ën ( uuid )]; 1346 ià(! ©t || ! uuid || uuid-> ty³ =ð BT_UUID_UNSPEC ) 1347  çl£ ; 1349 Ý = `Ãw0 ( discov”y_Ý , 1); 1350 ià(! Ý ) 1351  çl£ ; 1353 Ý -> ©t =‡tt; 1354 Ý -> ÿÎback = callback; 1355 Ý -> u£r_d©a = user_data; 1356 Ý -> de¡roy = destroy; 1357 Ý -> ’d_hªdË = ’d ; 1358 Ý -> uuid = *uuid; 1360 `put_Ë16 ( ¡¬t , pdu ); 1361 `put_Ë16 ( ’d , pdu + 2); 1362 `put_uuid_Ë ( uuid , pdu + 4); 1364 ià(! `bt_©t_£nd ( ©t , BT_ATT_OP_READ_BY_TYPE_REQ , pdu , (pdu), 1365 »ad_by_ty³_cb , `discov”y_Ý_»f ( Ý ), 1366 discov”y_Ý_uÄef )) { 1367 `ä“ ( Ý ); 1368  çl£ ; 1371  Œue ; 1372 } } 1374  $discov”_descs_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 1375 ušt16_t Ëngth , * u£r_d©a ) 1377  discov”y_Ý * Ý = u£r_d©a ; 1378 boÞ sucûss ; 1379 ušt8_t ©t_ecode = 0; 1380  bt_g©t_»suÉ * fš®_»suÉ = NULL ; 1381 ušt8_t fÜm© ; 1382 ušt16_t Ï¡_hªdË ; 1383 size_t d©a_Ëngth ; 1385 ià( Ýcode =ð BT_ATT_OP_ERROR_RSP ) { 1386 sucûss = çl£ ; 1387 ©t_ecode = `´oûss_”rÜ ( pdu , Ëngth ); 1389 ià( ©t_ecode =ð BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND && 1390 Ý -> »suÉ_h—d ) 1391  sucûss ; 1393  dÚe ; 1402 ià( Ýcode !ð BT_ATT_OP_FIND_INFO_RSP || ! pdu || Ëngth < 5) { 1403 sucûss = çl£ ; 1404  dÚe ; 1407 fÜm© = (( ušt8_t *è pdu )[0]; 1409 ià( fÜm© == 0x01) 1410 d©a_Ëngth = 4; 1411 ià( fÜm© == 0x02) 1412 d©a_Ëngth = 18; 1414 sucûss = çl£ ; 1415  dÚe ; 1418 ià(( Ëngth - 1è% d©a_Ëngth ) { 1419 sucûss = çl£ ; 1420  dÚe ; 1423 ià(! `»suÉ_­³nd ( Ýcode , pdu + 1, Ëngth - 1, d©a_Ëngth , Ý )) { 1424 sucûss = çl£ ; 1425  dÚe ; 1428 Ï¡_hªdË = `g‘_Ë16 ( pdu + Ëngth - d©a_Ëngth ); 1429 ià( Ï¡_hªdË !ð Ý -> ’d_hªdË ) { 1430 ušt8_t pdu [4]; 1432 `put_Ë16 ( Ï¡_hªdË + 1, pdu ); 1433 `put_Ë16 ( Ý -> ’d_hªdË , pdu + 2); 1435 ià( `bt_©t_£nd ( Ý -> ©t , BT_ATT_OP_FIND_INFO_REQ , 1436 pdu , (pdu), 1437 discov”_descs_cb , 1438 `discov”y_Ý_»f ( Ý ), 1439 discov”y_Ý_uÄef )) 1442 `discov”y_Ý_uÄef ( Ý ); 1443 sucûss = çl£ ; 1444  dÚe ; 1447 sucûss : 1448 fš®_»suÉ = Ý -> »suÉ_h—d ; 1449 sucûss = Œue ; 1451 dÚe : 1452 ià( Ý -> ÿÎback ) 1453 Ý -> `ÿÎback ( sucûss , ©t_ecode , fš®_»suÉ , op-> u£r_d©a ); 1454 } } 1456 boÞ $bt_g©t_discov”_desütÜs ( bt_©t * ©t , 1457 ušt16_t ¡¬t , ušt16_ˆ ’d , 1458 bt_g©t_discov”y_ÿÎback_t ÿÎback , 1459 * u£r_d©a , 1460 bt_g©t_de¡roy_func_t de¡roy ) 1462  discov”y_Ý * Ý ; 1463 ušt8_t pdu [4]; 1465 ià(! ©t ) 1466  çl£ ; 1468 Ý = `Ãw0 ( discov”y_Ý , 1); 1469 ià(! Ý ) 1470  çl£ ; 1472 Ý -> ©t =‡tt; 1473 Ý -> ÿÎback = callback; 1474 Ý -> u£r_d©a = user_data; 1475 Ý -> de¡roy = destroy; 1476 Ý -> ’d_hªdË = ’d ; 1478 `put_Ë16 ( ¡¬t , pdu ); 1479 `put_Ë16 ( ’d , pdu + 2); 1481 ià(! `bt_©t_£nd ( ©t , BT_ATT_OP_FIND_INFO_REQ , pdu , (pdu), 1482 discov”_descs_cb , 1483 `discov”y_Ý_»f ( Ý ), 1484 discov”y_Ý_uÄef )) { 1485 `ä“ ( Ý ); 1486  çl£ ; 1489  Œue ; 1490 } } @src/shared/gatt-helpers.h 28  ~<¡dboÞ.h > 29  ~<¡dšt.h > 31  gbt_g©t_»suÉ ; 33  sbt_g©t_™” { 34  bt_g©t_»suÉ * m»suÉ ; 35 ušt16_t mpos ; 38  bt_g©t_»suÉ_£rviû_couÁ ( bt_g©t_»suÉ * »suÉ ); 39  bt_g©t_»suÉ_ch¬aù”i¡ic_couÁ ( bt_g©t_»suÉ * »suÉ ); 40  bt_g©t_»suÉ_desütÜ_couÁ ( bt_g©t_»suÉ * »suÉ ); 41  bt_g©t_»suÉ_šþuded_couÁ ( bt_g©t_»suÉ * »suÉ ); 43 boÞ bt_g©t_™”_š™ ( bt_g©t_™” * ™” ,  bt_g©t_»suÉ * »suÉ ); 44 boÞ bt_g©t_™”_Ãxt_£rviû ( bt_g©t_™” * ™” , 45 ušt16_t * ¡¬t_hªdË , ušt16_ˆ* ’d_hªdË , 46 ušt8_t uuid [16]); 47 boÞ bt_g©t_™”_Ãxt_ch¬aù”i¡ic ( bt_g©t_™” * ™” , 48 ušt16_t * ¡¬t_hªdË , ušt16_ˆ* ’d_hªdË , 49 ušt16_t * v®ue_hªdË , ušt8_t * ´Ý”t›s , 50 ušt8_t uuid [16]); 51 boÞ bt_g©t_™”_Ãxt_desütÜ ( bt_g©t_™” * ™” , ušt16_t * hªdË , 52 ušt8_t uuid [16]); 53 boÞ bt_g©t_™”_Ãxt_šþuded_£rviû ( bt_g©t_™” * ™” , 54 ušt16_t * hªdË , ušt16_ˆ* ¡¬t_hªdË , 55 ušt16_t * ’d_hªdË , ušt8_t uuid [16]); 56 boÞ bt_g©t_™”_Ãxt_»ad_by_ty³ ( bt_g©t_™” * ™” , 57 ušt16_t * hªdË , ušt16_ˆ* Ëngth , 58 cÚ¡ ušt8_t ** v®ue ); 60 (* tbt_g©t_de¡roy_func_t )(* tu£r_d©a ); 62 (* tbt_g©t_»suÉ_ÿÎback_t )( tboÞ tsucûss , tušt8_t t©t_ecode , 63 * tu£r_d©a ); 64 (* tbt_g©t_discov”y_ÿÎback_t )( tboÞ tsucûss , tušt8_t t©t_ecode , 65  tbt_g©t_»suÉ * t»suÉ , 66 * tu£r_d©a ); 68 boÞ `bt_g©t_exchªge_mtu ( bt_©t * ©t , ušt16_t þ›Á_rx_mtu , 69 bt_g©t_»suÉ_ÿÎback_t ÿÎback , 70 * u£r_d©a , 71 bt_g©t_de¡roy_func_t de¡roy ); 73 boÞ `bt_g©t_discov”_®l_´im¬y_£rviûs ( bt_©t * ©t , bt_uuid_t * uuid , 74 bt_g©t_discov”y_ÿÎback_t ÿÎback , 75 * u£r_d©a , 76 bt_g©t_de¡roy_func_t de¡roy ); 77 boÞ `bt_g©t_discov”_´im¬y_£rviûs ( bt_©t * ©t , bt_uuid_t * uuid , 78 ušt16_t ¡¬t , ušt16_ˆ ’d , 79 bt_g©t_discov”y_ÿÎback_t ÿÎback , 80 * u£r_d©a , 81 bt_g©t_de¡roy_func_t de¡roy ); 82 boÞ `bt_g©t_discov”_£cÚd¬y_£rviûs ( bt_©t * ©t , bt_uuid_t * uuid , 83 ušt16_t ¡¬t , ušt16_ˆ ’d , 84 bt_g©t_discov”y_ÿÎback_t ÿÎback , 85 * u£r_d©a , 86 bt_g©t_de¡roy_func_t de¡roy ); 87 boÞ `bt_g©t_discov”_šþuded_£rviûs ( bt_©t * ©t , 88 ušt16_t ¡¬t , ušt16_ˆ ’d , 89 bt_g©t_discov”y_ÿÎback_t ÿÎback , 90 * u£r_d©a , 91 bt_g©t_de¡roy_func_t de¡roy ); 92 boÞ `bt_g©t_discov”_ch¬aù”i¡ics ( bt_©t * ©t , 93 ušt16_t ¡¬t , ušt16_ˆ ’d , 94 bt_g©t_discov”y_ÿÎback_t ÿÎback , 95 * u£r_d©a , 96 bt_g©t_de¡roy_func_t de¡roy ); 97 boÞ `bt_g©t_discov”_desütÜs ( bt_©t * ©t , 98 ušt16_t ¡¬t , ušt16_ˆ ’d , 99 bt_g©t_discov”y_ÿÎback_t ÿÎback , 100 * u£r_d©a , 101 bt_g©t_de¡roy_func_t de¡roy ); 103 boÞ `bt_g©t_»ad_by_ty³ ( bt_©t * ©t , ušt16_t ¡¬t , ušt16_ˆ ’d , 104 cÚ¡ bt_uuid_t * uuid , 105 bt_g©t_discov”y_ÿÎback_t ÿÎback , 106 * u£r_d©a , 107 bt_g©t_de¡roy_func_t de¡roy ); @src/shared/gatt-server.c 24  ~ 25  ~<”ºo.h > 27  ~"¤c/sh¬ed/©t.h " 28  ~"lib/uuid.h " 29  ~"¤c/sh¬ed/queue.h " 30  ~"¤c/sh¬ed/g©t-db.h " 31  ~"¤c/sh¬ed/g©t-£rv”.h " 32  ~"¤c/sh¬ed/g©t-h–³rs.h " 33  ~"¤c/sh¬ed/utž.h " 35 #iâdeà MAX 36  #MAX ( a , b è(×è> (bè? (aè: (b)) ) 39 #iâdeà MIN 40  #MIN ( a , b è(×è< (bè? (aè: (b)) ) 47  #DEFAULT_MAX_PREP_QUEUE_LEN 30 ) 49  sasync_»ad_Ý { 50  bt_g©t_£rv” * m£rv” ; 51 ušt8_t mÝcode ; 52 boÞ mdÚe ; 53 ušt8_t * mpdu ; 54 size_t mpdu_Ën ; 55 size_t mv®ue_Ën ; 56  queue * mdb_d©a ; 59  sasync_wr™e_Ý { 60  bt_g©t_£rv” * m£rv” ; 61 ušt8_t mÝcode ; 64  s´•_wr™e_d©a { 65  bt_g©t_£rv” * m£rv” ; 66 ušt8_t * mv®ue ; 67 ušt16_t mhªdË ; 68 ušt16_t moff£t ; 69 ušt16_t mËngth ; 72  $´•_wr™e_d©a_de¡roy (* u£r_d©a ) 74  ´•_wr™e_d©a * d©a = u£r_d©a ; 76 `ä“ ( d©a -> v®ue ); 77 `ä“ ( d©a ); 78 } } 80  sbt_g©t_£rv” { 81  g©t_db * mdb ; 82  bt_©t * m©t ; 83  m»f_couÁ ; 84 ušt16_t mmtu ; 86  mmtu_id ; 87  m»ad_by_g½_ty³_id ; 88  m»ad_by_ty³_id ; 89  mfšd_šfo_id ; 90  mwr™e_id ; 91  mwr™e_cmd_id ; 92  m»ad_id ; 93  m»ad_blob_id ; 94  m´•_wr™e_id ; 95  mexec_wr™e_id ; 97  queue * m´•_queue ; 98  mmax_´•_queue_Ën ; 100  async_»ad_Ý * m³ndšg_»ad_Ý ; 101  async_wr™e_Ý * m³ndšg_wr™e_Ý ; 103 bt_g©t_£rv”_debug_func_t mdebug_ÿÎback ; 104 bt_g©t_£rv”_de¡roy_func_t mdebug_de¡roy ; 105 * mdebug_d©a ; 108  $bt_g©t_£rv”_ä“ ( bt_g©t_£rv” * £rv” ) 110 ià( £rv” -> debug_de¡roy ) 111 £rv” -> `debug_de¡roy (£rv”-> debug_d©a ); 113 `bt_©t_uÄegi¡” ( £rv” -> ©t , s”v”-> mtu_id ); 114 `bt_©t_uÄegi¡” ( £rv” -> ©t , s”v”-> »ad_by_g½_ty³_id ); 115 `bt_©t_uÄegi¡” ( £rv” -> ©t , s”v”-> »ad_by_ty³_id ); 116 `bt_©t_uÄegi¡” ( £rv” -> ©t , s”v”-> fšd_šfo_id ); 117 `bt_©t_uÄegi¡” ( £rv” -> ©t , s”v”-> wr™e_id ); 118 `bt_©t_uÄegi¡” ( £rv” -> ©t , s”v”-> wr™e_cmd_id ); 119 `bt_©t_uÄegi¡” ( £rv” -> ©t , s”v”-> »ad_id ); 120 `bt_©t_uÄegi¡” ( £rv” -> ©t , s”v”-> »ad_blob_id ); 121 `bt_©t_uÄegi¡” ( £rv” -> ©t , s”v”-> ´•_wr™e_id ); 122 `bt_©t_uÄegi¡” ( £rv” -> ©t , s”v”-> exec_wr™e_id ); 124 ià( £rv” -> ³ndšg_»ad_Ý ) 125 £rv” -> ³ndšg_»ad_Ý ->£rv” = NULL ; 127 ià( £rv” -> ³ndšg_wr™e_Ý ) 128 £rv” -> ³ndšg_wr™e_Ý ->£rv” = NULL ; 130 `queue_de¡roy ( £rv” -> ´•_queue , ´•_wr™e_d©a_de¡roy ); 132 `g©t_db_uÄef ( £rv” -> db ); 133 `bt_©t_uÄef ( £rv” -> ©t ); 134 `ä“ ( £rv” ); 135 } } 137  boÞ $g‘_uuid_Ë (cÚ¡ ušt8_t * uuid , size_t Ën , bt_uuid_t * out_uuid ) 139 ušt128_t u128 ; 141  Ën ) { 143 `bt_uuid16_ü—‹ ( out_uuid , `g‘_Ë16 ( uuid )); 144  Œue ; 146 `bsw­_128 ( uuid , & u128 . d©a ); 147 `bt_uuid128_ü—‹ ( out_uuid , u128 ); 148  Œue ; 150  çl£ ; 153  çl£ ; 154 } } 156  $©Œibu‹_»ad_cb ( g©t_db_©Œibu‹ * ©Œib ,  ”r , 157 cÚ¡ ušt8_t * v®ue , size_t Ëngth , 158 * u£r_d©a ) 160  iovec * iov = u£r_d©a ; 162 iov -> iov_ba£ = (*è v®ue ; 163 iov -> iov_Ën = Ëngth ; 164 } } 166  boÞ $’code_»ad_by_g½_ty³_r¥ ( g©t_db * db ,  queue * q , 167 ušt16_t mtu , 168 ušt8_t * pdu , ušt16_t * Ën ) 170  ™” = 0; 171 ušt16_t ¡¬t_hªdË , ’d_hªdË ; 172  iovec v®ue ; 173 ušt8_t d©a_v®_Ën ; 175 * Ën = 0; 177  `queue_³ek_h—d ( q )) { 178  g©t_db_©Œibu‹ * ©Œib = `queue_pÝ_h—d ( q ); 180 v®ue . iov_ba£ = NULL ; 181 v®ue . iov_Ën = 0; 187 ià(! `g©t_db_©Œibu‹_»ad ( ©Œib , 0, 188 BT_ATT_OP_READ_BY_GRP_TYPE_REQ , 189 NULL , ©Œibu‹_»ad_cb , 190 & v®ue è|| !v®ue. iov_Ën ) 191  çl£ ; 198 ià( ™” == 0) { 199 d©a_v®_Ën = `MIN (MIN(() mtu - 6, 251), 200 v®ue . iov_Ën ); 201 pdu [0] = d©a_v®_Ën + 4; 202 ™” ++; 203 } ià( v®ue . iov_Ën !ð d©a_v®_Ën ) 207 ià( ™” + d©a_v®_Ën + 4 > mtu - 1) 210 `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( ©Œib , & ¡¬t_hªdË , 211 & ’d_hªdË ); 213 `put_Ë16 ( ¡¬t_hªdË , pdu + ™” ); 214 `put_Ë16 ( ’d_hªdË , pdu + ™” + 2); 215 `memýy ( pdu + ™” + 4, v®ue . iov_ba£ , d©a_v®_Ën ); 217 ™” +ð d©a_v®_Ën + 4; 220 * Ën = ™” ; 222  Œue ; 223 } } 225  $»ad_by_g½_ty³_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 226 ušt16_t Ëngth , * u£r_d©a ) 228  bt_g©t_£rv” * £rv” = u£r_d©a ; 229 ušt16_t ¡¬t , ’d ; 230 bt_uuid_t ty³ ; 231 bt_uuid_t ´im , ¢d ; 232 ušt16_t mtu = `bt_©t_g‘_mtu ( £rv” -> ©t ); 233 ušt8_t r¥_pdu [ mtu ]; 234 ušt16_t r¥_Ën ; 235 ušt8_t ecode = 0; 236 ušt16_t ehªdË = 0; 237  queue * q = NULL ; 239 ià( Ëngth != 6 &&†ength != 20) { 240 ecode = BT_ATT_ERROR_INVALID_PDU ; 241  ”rÜ ; 244 q = `queue_Ãw (); 245 ià(! q ) { 246 ecode = BT_ATT_ERROR_INSUFFICIENT_RESOURCES ; 247  ”rÜ ; 250 ¡¬t = `g‘_Ë16 ( pdu ); 251 ’d = `g‘_Ë16 ( pdu + 2); 252 `g‘_uuid_Ë ( pdu + 4, Ëngth - 4, & ty³ ); 254 `utž_debug ( £rv” -> debug_ÿÎback , s”v”-> debug_d©a , 256 ¡¬t , ’d ); 258 ià(! ¡¬t || ! ’d ) { 259 ecode = BT_ATT_ERROR_INVALID_HANDLE ; 260  ”rÜ ; 263 ehªdË = ¡¬t ; 265 ià( ¡¬t > ’d ) { 266 ecode = BT_ATT_ERROR_INVALID_HANDLE ; 267  ”rÜ ; 276 `bt_uuid16_ü—‹ (& ´im , GATT_PRIM_SVC_UUID ); 277 `bt_uuid16_ü—‹ (& ¢d , GATT_SND_SVC_UUID ); 278 ià( `bt_uuid_cmp (& ty³ , & ´im è&& bt_uuid_cmp(&ty³, & ¢d )) { 279 ecode = BT_ATT_ERROR_UNSUPPORTED_GROUP_TYPE ; 280  ”rÜ ; 283 `g©t_db_»ad_by_group_ty³ ( £rv” -> db , ¡¬t , ’d , ty³ , q ); 285 ià( `queue_i£m±y ( q )) { 286 ecode = BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND ; 287  ”rÜ ; 290 ià(! `’code_»ad_by_g½_ty³_r¥ ( £rv” -> db , q , mtu , r¥_pdu , 291 & r¥_Ën )) { 292 ecode = BT_ATT_ERROR_UNLIKELY ; 293  ”rÜ ; 296 `queue_de¡roy ( q , NULL ); 298 `bt_©t_£nd ( £rv” -> ©t , BT_ATT_OP_READ_BY_GRP_TYPE_RSP , 299 r¥_pdu , r¥_Ën , 300 NULL , NULL, NULL); 304 ”rÜ : 305 `queue_de¡roy ( q , NULL ); 306 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , Ýcode , ehªdË , ecode ); 307 } } 309  $async_»ad_Ý_de¡roy ( async_»ad_Ý * Ý ) 311 ià( Ý -> £rv” ) 312 Ý -> £rv” -> ³ndšg_»ad_Ý = NULL ; 314 `queue_de¡roy ( Ý -> db_d©a , NULL ); 315 `ä“ ( Ý -> pdu ); 316 `ä“ ( Ý ); 317 } } 319  ´oûss_»ad_by_ty³ ( async_»ad_Ý * Ý ); 321  $»ad_by_ty³_»ad_com¶‘e_cb ( g©t_db_©Œibu‹ * ©Œ , 322  ”r , cÚ¡ ušt8_t * v®ue , 323 size_t Ën , * u£r_d©a ) 325  async_»ad_Ý * Ý = u£r_d©a ; 326  bt_g©t_£rv” * £rv” = Ý ->server; 327 ušt16_t mtu ; 328 ušt16_t hªdË ; 330 ià(! £rv” ) { 331 `async_»ad_Ý_de¡roy ( Ý ); 335 mtu = `bt_©t_g‘_mtu ( £rv” -> ©t ); 336 hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( ©Œ ); 339 ià( ”r ) { 340 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , BT_ATT_OP_READ_BY_TYPE_REQ , 341 hªdË , ”r ); 342 `async_»ad_Ý_de¡roy ( Ý ); 346 ià( Ý -> pdu_Ën == 0) { 347 Ý -> v®ue_Ën = `MIN (MIN((è mtu - 4, 253), Ën ); 348 Ý -> pdu [0] = op-> v®ue_Ën + 2; 349 Ý -> pdu_Ën ++; 350 } ià( Ën !ð Ý -> v®ue_Ën ) { 351 Ý -> dÚe = Œue ; 352  dÚe ; 356 ià( Ý -> pdu_Ën + op-> v®ue_Ën + 2 > (è mtu - 1) { 357 Ý -> dÚe = Œue ; 358  dÚe ; 362 `put_Ë16 ( hªdË , Ý -> pdu + op-> pdu_Ën ); 363 `memýy ( Ý -> pdu + op-> pdu_Ën + 2, v®ue , op-> v®ue_Ën ); 365 Ý -> pdu_Ën +ðÝ-> v®ue_Ën + 2; 367 ià( Ý -> pdu_Ën =ð(è mtu - 1) 368 Ý -> dÚe = Œue ; 370 dÚe : 371 `´oûss_»ad_by_ty³ ( Ý ); 372 } } 374  $´oûss_»ad_by_ty³ ( async_»ad_Ý * Ý ) 376  bt_g©t_£rv” * £rv” = Ý ->server; 377 ušt8_t ecode ; 378  g©t_db_©Œibu‹ * ©Œ ; 379 ušt32_t ³rm ; 381 ©Œ = `queue_pÝ_h—d ( Ý -> db_d©a ); 383 ià( Ý -> dÚe || ! ©Œ ) { 384 `bt_©t_£nd ( £rv” -> ©t , BT_ATT_OP_READ_BY_TYPE_RSP , Ý -> pdu , 385 Ý -> pdu_Ën , 386 NULL , NULL, 387 NULL ); 388 `async_»ad_Ý_de¡roy ( Ý ); 392 ià(! `g©t_db_©Œibu‹_g‘_³rmissiÚs ( ©Œ , & ³rm )) { 393 ecode = BT_ATT_ERROR_UNLIKELY ; 394  ”rÜ ; 403 ià( ³rm && !Õ”m & BT_ATT_PERM_READ )) { 404 ecode = BT_ATT_ERROR_READ_NOT_PERMITTED ; 405  ”rÜ ; 408 ià( `g©t_db_©Œibu‹_»ad ( ©Œ , 0, Ý -> Ýcode , NULL , 409 »ad_by_ty³_»ad_com¶‘e_cb , Ý )) 412 ecode = BT_ATT_ERROR_UNLIKELY ; 414 ”rÜ : 415 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , BT_ATT_OP_READ_BY_TYPE_REQ , 416 `g©t_db_©Œibu‹_g‘_hªdË ( ©Œ ), ecode ); 417 `async_»ad_Ý_de¡roy ( Ý ); 418 } } 420  $»ad_by_ty³_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 421 ušt16_t Ëngth , * u£r_d©a ) 423  bt_g©t_£rv” * £rv” = u£r_d©a ; 424 ušt16_t ¡¬t , ’d ; 425 bt_uuid_t ty³ ; 426 ušt16_t ehªdË = 0; 427 ušt8_t ecode ; 428  queue * q = NULL ; 429  async_»ad_Ý * Ý ; 431 ià( Ëngth != 6 &&†ength != 20) { 432 ecode = BT_ATT_ERROR_INVALID_PDU ; 433  ”rÜ ; 436 q = `queue_Ãw (); 437 ià(! q ) { 438 ecode = BT_ATT_ERROR_INSUFFICIENT_RESOURCES ; 439  ”rÜ ; 442 ¡¬t = `g‘_Ë16 ( pdu ); 443 ’d = `g‘_Ë16 ( pdu + 2); 444 `g‘_uuid_Ë ( pdu + 4, Ëngth - 4, & ty³ ); 446 `utž_debug ( £rv” -> debug_ÿÎback , s”v”-> debug_d©a , 448 ¡¬t , ’d ); 450 ià(! ¡¬t || ! ’d ) { 451 ecode = BT_ATT_ERROR_INVALID_HANDLE ; 452  ”rÜ ; 455 ehªdË = ¡¬t ; 457 ià( ¡¬t > ’d ) { 458 ecode = BT_ATT_ERROR_INVALID_HANDLE ; 459  ”rÜ ; 462 `g©t_db_»ad_by_ty³ ( £rv” -> db , ¡¬t , ’d , ty³ , q ); 464 ià( `queue_i£m±y ( q )) { 465 ecode = BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND ; 466  ”rÜ ; 469 ià( £rv” -> ³ndšg_»ad_Ý ) { 470 ecode = BT_ATT_ERROR_UNLIKELY ; 471  ”rÜ ; 474 Ý = `Ãw0 ( async_»ad_Ý , 1); 475 ià(! Ý ) { 476 ecode = BT_ATT_ERROR_INSUFFICIENT_RESOURCES ; 477  ”rÜ ; 480 Ý -> pdu = `m®loc ( `bt_©t_g‘_mtu ( £rv” -> ©t )); 481 ià(! Ý -> pdu ) { 482 `ä“ ( Ý ); 483 ecode = BT_ATT_ERROR_INSUFFICIENT_RESOURCES ; 484  ”rÜ ; 487 Ý -> Ýcode = opcode; 488 Ý -> £rv” = server; 489 Ý -> db_d©a = q ; 490 £rv” -> ³ndšg_»ad_Ý = Ý ; 492 `´oûss_»ad_by_ty³ ( Ý ); 496 ”rÜ : 497 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , Ýcode , ehªdË , ecode ); 498 `queue_de¡roy ( q , NULL ); 499 } } 501  $put_uuid_Ë (cÚ¡ bt_uuid_t * ¤c , * d¡ ) 503 bt_uuid_t uuid ; 505  ¤c -> ty³ ) { 506  BT_UUID16 : 507 `put_Ë16 ( ¤c -> v®ue . u16 , d¡ ); 509  BT_UUID128 : 510 `bsw­_128 (& ¤c -> v®ue . u128 , d¡ ); 512  BT_UUID32 : 513 `bt_uuid_to_uuid128 ( ¤c , & uuid ); 514 `bsw­_128 (& uuid . v®ue . u128 , d¡ ); 516  BT_UUID_UNSPEC : 520 } } 522  boÞ $’code_fšd_šfo_r¥ ( g©t_db * db ,  queue * q , 523 ušt16_t mtu , 524 ušt8_t * pdu , ušt16_t * Ën ) 526 ušt16_t hªdË ; 527  g©t_db_©Œibu‹ * ©Œ ; 528 cÚ¡ bt_uuid_t * ty³ ; 529  uuid_Ën , cur_uuid_Ën ; 530  ™” = 0; 532 * Ën = 0; 534  `queue_³ek_h—d ( q )) { 535 ©Œ = `queue_pÝ_h—d ( q ); 536 hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( ©Œ ); 537 ty³ = `g©t_db_©Œibu‹_g‘_ty³ ( ©Œ ); 538 ià(! hªdË || ! ty³ ) 539  çl£ ; 541 cur_uuid_Ën = `bt_uuid_Ën ( ty³ ); 543 ià( ™” == 0) { 544  cur_uuid_Ën ) { 546 uuid_Ën = 2; 547 pdu [0] = 0x01; 551 uuid_Ën = 16; 552 pdu [0] = 0x02; 555  çl£ ; 558 ™” ++; 559 } ià( cur_uuid_Ën !ð uuid_Ën ) 562 ià( ™” + uuid_Ën + 2 > mtu - 1) 565 `put_Ë16 ( hªdË , pdu + ™” ); 566 `put_uuid_Ë ( ty³ , pdu + ™” + 2); 568 ™” +ð uuid_Ën + 2; 571 * Ën = ™” ; 573  Œue ; 574 } } 576  $fšd_šfo_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 577 ušt16_t Ëngth , * u£r_d©a ) 579  bt_g©t_£rv” * £rv” = u£r_d©a ; 580 ušt16_t ¡¬t , ’d ; 581 ušt16_t mtu = `bt_©t_g‘_mtu ( £rv” -> ©t ); 582 ušt8_t r¥_pdu [ mtu ]; 583 ušt16_t r¥_Ën ; 584 ušt8_t ecode = 0; 585 ušt16_t ehªdË = 0; 586  queue * q = NULL ; 588 ià( Ëngth != 4) { 589 ecode = BT_ATT_ERROR_INVALID_PDU ; 590  ”rÜ ; 593 q = `queue_Ãw (); 594 ià(! q ) { 595 ecode = BT_ATT_ERROR_INSUFFICIENT_RESOURCES ; 596  ”rÜ ; 599 ¡¬t = `g‘_Ë16 ( pdu ); 600 ’d = `g‘_Ë16 ( pdu + 2); 602 `utž_debug ( £rv” -> debug_ÿÎback , s”v”-> debug_d©a , 604 ¡¬t , ’d ); 606 ià(! ¡¬t || ! ’d ) { 607 ecode = BT_ATT_ERROR_INVALID_HANDLE ; 608  ”rÜ ; 611 ehªdË = ¡¬t ; 613 ià( ¡¬t > ’d ) { 614 ecode = BT_ATT_ERROR_INVALID_HANDLE ; 615  ”rÜ ; 618 `g©t_db_fšd_šfÜm©iÚ ( £rv” -> db , ¡¬t , ’d , q ); 620 ià( `queue_i£m±y ( q )) { 621 ecode = BT_ATT_ERROR_ATTRIBUTE_NOT_FOUND ; 622  ”rÜ ; 625 ià(! `’code_fšd_šfo_r¥ ( £rv” -> db , q , mtu , r¥_pdu , & r¥_Ën )) { 626 ecode = BT_ATT_ERROR_UNLIKELY ; 627  ”rÜ ; 630 `bt_©t_£nd ( £rv” -> ©t , BT_ATT_OP_FIND_INFO_RSP , r¥_pdu , r¥_Ën , 631 NULL , NULL, NULL); 632 `queue_de¡roy ( q , NULL ); 636 ”rÜ : 637 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , Ýcode , ehªdË , ecode ); 638 `queue_de¡roy ( q , NULL ); 640 } } 642  $async_wr™e_Ý_de¡roy ( async_wr™e_Ý * Ý ) 644 ià( Ý -> £rv” ) 645 Ý -> £rv” -> ³ndšg_wr™e_Ý = NULL ; 647 `ä“ ( Ý ); 648 } } 650  $wr™e_com¶‘e_cb ( g©t_db_©Œibu‹ * ©Œ ,  ”r , 651 * u£r_d©a ) 653  async_wr™e_Ý * Ý = u£r_d©a ; 654  bt_g©t_£rv” * £rv” = Ý ->server; 655 ušt16_t hªdË ; 657 ià(! £rv” || Ý -> Ýcode =ð BT_ATT_OP_WRITE_CMD ) { 658 `async_wr™e_Ý_de¡roy ( Ý ); 662 hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( ©Œ ); 664 ià( ”r ) 665 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , Ý -> Ýcode , hªdË , ”r ); 667 `bt_©t_£nd ( £rv” -> ©t , BT_ATT_OP_WRITE_RSP , NULL , 0, 668 NULL , NULL, NULL); 670 `async_wr™e_Ý_de¡roy ( Ý ); 671 } } 673  $wr™e_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 674 ušt16_t Ëngth , * u£r_d©a ) 676  bt_g©t_£rv” * £rv” = u£r_d©a ; 677  g©t_db_©Œibu‹ * ©Œ ; 678 ušt16_t hªdË = 0; 679  async_wr™e_Ý * Ý = NULL ; 680 ušt8_t ecode ; 681 ušt32_t ³rm ; 683 ià( Ëngth < 2) { 684 ecode = BT_ATT_ERROR_INVALID_PDU ; 685  ”rÜ ; 688 hªdË = `g‘_Ë16 ( pdu ); 689 ©Œ = `g©t_db_g‘_©Œibu‹ ( £rv” -> db , hªdË ); 690 ià(! ©Œ ) { 691 ecode = BT_ATT_ERROR_INVALID_HANDLE ; 692  ”rÜ ; 695 `utž_debug ( £rv” -> debug_ÿÎback , s”v”-> debug_d©a , 697 ( Ýcode =ð BT_ATT_OP_WRITE_REQ ) ? "Req" : "Cmd", 698 hªdË ); 700 ià(! `g©t_db_©Œibu‹_g‘_³rmissiÚs ( ©Œ , & ³rm )) { 701 ecode = BT_ATT_ERROR_INVALID_HANDLE ; 702  ”rÜ ; 705 ià(!( ³rm & BT_ATT_PERM_WRITE )) { 706 ecode = BT_ATT_ERROR_WRITE_NOT_PERMITTED ; 707  ”rÜ ; 710 ià( £rv” -> ³ndšg_wr™e_Ý ) { 711 ecode = BT_ATT_ERROR_UNLIKELY ; 712  ”rÜ ; 715 Ý = `Ãw0 ( async_wr™e_Ý , 1); 716 ià(! Ý ) { 717 ecode = BT_ATT_ERROR_INSUFFICIENT_RESOURCES ; 718  ”rÜ ; 721 Ý -> £rv” = server; 722 Ý -> Ýcode = opcode; 723 £rv” -> ³ndšg_wr™e_Ý = Ý ; 725 ià( `g©t_db_©Œibu‹_wr™e ( ©Œ , 0, pdu + 2, Ëngth - 2, Ýcode , 726 NULL , wr™e_com¶‘e_cb , Ý )) 729 ià( Ý ) 730 `async_wr™e_Ý_de¡roy ( Ý ); 732 ecode = BT_ATT_ERROR_UNLIKELY ; 734 ”rÜ : 735 ià( Ýcode =ð BT_ATT_OP_WRITE_CMD ) 738 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , Ýcode , hªdË , ecode ); 739 } } 741  ušt8_t $g‘_»ad_r¥_Ýcode ( ušt8_t Ýcode ) 744  Ýcode ) { 745  BT_ATT_OP_READ_REQ : 746  BT_ATT_OP_READ_RSP ; 747  BT_ATT_OP_READ_BLOB_REQ : 748  BT_ATT_OP_READ_BLOB_RSP ; 762 } } 764  $»ad_com¶‘e_cb ( g©t_db_©Œibu‹ * ©Œ ,  ”r , 765 cÚ¡ ušt8_t * v®ue , size_t Ën , 766 * u£r_d©a ) 768  async_»ad_Ý * Ý = u£r_d©a ; 769  bt_g©t_£rv” * £rv” = Ý ->server; 770 ušt8_t r¥_Ýcode ; 771 ušt16_t mtu ; 772 ušt16_t hªdË ; 774 ià(! £rv” ) { 775 `async_»ad_Ý_de¡roy ( Ý ); 779 mtu = `bt_©t_g‘_mtu ( £rv” -> ©t ); 780 hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( ©Œ ); 782 ià( ”r ) { 783 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , Ý -> Ýcode , hªdË , ”r ); 784 `async_»ad_Ý_de¡roy ( Ý ); 788 r¥_Ýcode = `g‘_»ad_r¥_Ýcode ( Ý -> Ýcode ); 790 `bt_©t_£nd ( £rv” -> ©t , r¥_Ýcode , Ën ? v®ue : NULL , 791 `MIN ((è mtu - 1, Ën ), 792 NULL , NULL, NULL); 793 `async_»ad_Ý_de¡roy ( Ý ); 794 } } 796  $hªdË_»ad_»q ( bt_g©t_£rv” * £rv” , ušt8_t Ýcode , 797 ušt16_t hªdË , 798 ušt16_t off£t ) 800  g©t_db_©Œibu‹ * ©Œ ; 801 ušt8_t ecode ; 802 ušt32_t ³rm ; 803  async_»ad_Ý * Ý = NULL ; 805 ©Œ = `g©t_db_g‘_©Œibu‹ ( £rv” -> db , hªdË ); 806 ià(! ©Œ ) { 807 ecode = BT_ATT_ERROR_INVALID_HANDLE ; 808  ”rÜ ; 811 `utž_debug ( £rv” -> debug_ÿÎback , s”v”-> debug_d©a , 813 Ýcode =ð BT_ATT_OP_READ_BLOB_REQ ? "Blob " : "", 814 hªdË ); 816 ià(! `g©t_db_©Œibu‹_g‘_³rmissiÚs ( ©Œ , & ³rm )) { 817 ecode = BT_ATT_ERROR_INVALID_HANDLE ; 818  ”rÜ ; 821 ià( ³rm && !Õ”m & BT_ATT_PERM_READ )) { 822 ecode = BT_ATT_ERROR_READ_NOT_PERMITTED ; 823  ”rÜ ; 826 ià( £rv” -> ³ndšg_»ad_Ý ) { 827 ecode = BT_ATT_ERROR_UNLIKELY ; 828  ”rÜ ; 831 Ý = `Ãw0 ( async_»ad_Ý , 1); 832 ià(! Ý ) { 833 ecode = BT_ATT_ERROR_INSUFFICIENT_RESOURCES ; 834  ”rÜ ; 837 Ý -> Ýcode = opcode; 838 Ý -> £rv” = server; 839 £rv” -> ³ndšg_»ad_Ý = Ý ; 841 ià( `g©t_db_©Œibu‹_»ad ( ©Œ , off£t , Ýcode , NULL , 842 »ad_com¶‘e_cb , Ý )) 845 ecode = BT_ATT_ERROR_UNLIKELY ; 847 ”rÜ : 848 ià( Ý ) 849 `async_»ad_Ý_de¡roy ( Ý ); 851 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , Ýcode , hªdË , ecode ); 852 } } 854  $»ad_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 855 ušt16_t Ëngth , * u£r_d©a ) 857  bt_g©t_£rv” * £rv” = u£r_d©a ; 858 ušt16_t hªdË ; 860 ià( Ëngth != 2) { 861 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , Ýcode , 0, 862 BT_ATT_ERROR_INVALID_PDU ); 866 hªdË = `g‘_Ë16 ( pdu ); 868 `hªdË_»ad_»q ( £rv” , Ýcode , hªdË , 0); 869 } } 871  $»ad_blob_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 872 ušt16_t Ëngth , * u£r_d©a ) 874  bt_g©t_£rv” * £rv” = u£r_d©a ; 875 ušt16_t hªdË , off£t ; 877 ià( Ëngth != 4) { 878 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , Ýcode , 0, 879 BT_ATT_ERROR_INVALID_PDU ); 883 hªdË = `g‘_Ë16 ( pdu ); 884 off£t = `g‘_Ë16 ( pdu + 2); 886 `hªdË_»ad_»q ( £rv” , Ýcode , hªdË , off£t ); 887 } } 889  $´•_wr™e_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 890 ušt16_t Ëngth , * u£r_d©a ) 892  bt_g©t_£rv” * £rv” = u£r_d©a ; 893  ´•_wr™e_d©a * ´•_d©a = NULL ; 894 ušt16_t hªdË = 0; 895 ušt16_t off£t ; 896  g©t_db_©Œibu‹ * ©Œ ; 897 ušt8_t ecode ; 898 ušt32_t ³rm ; 900 ià( Ëngth < 4) { 901 ecode = BT_ATT_ERROR_INVALID_PDU ; 902  ”rÜ ; 905 ià( `queue_Ëngth ( £rv” -> ´•_queue è>ð£rv”-> max_´•_queue_Ën ) { 906 ecode = BT_ATT_ERROR_PREPARE_QUEUE_FULL ; 907  ”rÜ ; 910 hªdË = `g‘_Ë16 ( pdu ); 911 off£t = `g‘_Ë16 ( pdu + 2); 913 ©Œ = `g©t_db_g‘_©Œibu‹ ( £rv” -> db , hªdË ); 914 ià(! ©Œ ) { 915 ecode = BT_ATT_ERROR_INVALID_HANDLE ; 916  ”rÜ ; 919 `utž_debug ( £rv” -> debug_ÿÎback , s”v”-> debug_d©a , 920 "P»°Wr™Req - hªdË: 0x%04x", hªdË ); 922 ià(! `g©t_db_©Œibu‹_g‘_³rmissiÚs ( ©Œ , & ³rm )) { 923 ecode = BT_ATT_ERROR_INVALID_HANDLE ; 924  ”rÜ ; 934 ià(!( ³rm & BT_ATT_PERM_WRITE )) { 935 ecode = BT_ATT_ERROR_WRITE_NOT_PERMITTED ; 936  ”rÜ ; 939 ´•_d©a = `Ãw0 ( ´•_wr™e_d©a , 1); 940 ià(! ´•_d©a ) { 941 ecode = BT_ATT_ERROR_INSUFFICIENT_RESOURCES ; 942  ”rÜ ; 945 ´•_d©a -> Ëngth =†ength - 4; 946 ià( ´•_d©a -> Ëngth ) { 947 ´•_d©a -> v®ue = `m®loc Õ»p_d©a-> Ëngth ); 948 ià(! ´•_d©a -> v®ue ) { 949 ecode = BT_ATT_ERROR_INSUFFICIENT_RESOURCES ; 950  ”rÜ ; 954 ´•_d©a -> £rv” = server; 955 ´•_d©a -> hªdË = handle; 956 ´•_d©a -> off£t = offset; 957 `memýy ( ´•_d©a -> v®ue , pdu + 4,…»p_d©a-> Ëngth ); 959 `queue_push_ž ( £rv” -> ´•_queue , ´•_d©a ); 961 `bt_©t_£nd ( £rv” -> ©t , BT_ATT_OP_PREP_WRITE_RSP , pdu , Ëngth , NULL , 962 NULL , NULL); 965 ”rÜ : 966 ià( ´•_d©a ) 967 `´•_wr™e_d©a_de¡roy ( ´•_d©a ); 969 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , Ýcode , hªdË , ecode ); 971 } } 973  exec_Ãxt_´•_wr™e ( bt_g©t_£rv” * £rv” , 974 ušt16_t ehªdË ,  ”r ); 976  $exec_wr™e_com¶‘e_cb ( g©t_db_©Œibu‹ * ©Œ ,  ”r , 977 * u£r_d©a ) 979  bt_g©t_£rv” * £rv” = u£r_d©a ; 980 ušt16_t hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( ©Œ ); 982 `exec_Ãxt_´•_wr™e ( £rv” , hªdË , ”r ); 983 } } 985  $exec_Ãxt_´•_wr™e ( bt_g©t_£rv” * £rv” , 986 ušt16_t ehªdË ,  ”r ) 988  ´•_wr™e_d©a * Ãxt = NULL ; 989  g©t_db_©Œibu‹ * ©Œ ; 990 boÞ ¡©us ; 992 ià( ”r ) 993  ”rÜ ; 995 Ãxt = `queue_pÝ_h—d ( £rv” -> ´•_queue ); 996 ià(! Ãxt ) { 997 `bt_©t_£nd ( £rv” -> ©t , BT_ATT_OP_EXEC_WRITE_RSP , NULL , 0, 998 NULL , NULL, NULL); 1002 ©Œ = `g©t_db_g‘_©Œibu‹ ( £rv” -> db , Ãxt -> hªdË ); 1003 ià(! ©Œ ) { 1004 ”r = BT_ATT_ERROR_UNLIKELY ; 1005  ”rÜ ; 1008 ¡©us = `g©t_db_©Œibu‹_wr™e ( ©Œ , Ãxt -> off£t , 1009 Ãxt -> v®ue ,‚ext-> Ëngth , 1010 BT_ATT_OP_EXEC_WRITE_REQ , NULL , 1011 exec_wr™e_com¶‘e_cb , £rv” ); 1013 `´•_wr™e_d©a_de¡roy ( Ãxt ); 1015 ià( ¡©us ) 1018 ”r = BT_ATT_ERROR_UNLIKELY ; 1020 ”rÜ : 1021 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , BT_ATT_OP_EXEC_WRITE_REQ , 1022 ehªdË , ”r ); 1023 } } 1025  $exec_wr™e_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 1026 ušt16_t Ëngth , * u£r_d©a ) 1028  bt_g©t_£rv” * £rv” = u£r_d©a ; 1029 ušt8_t æags ; 1030 ušt8_t ecode ; 1031 boÞ wr™e ; 1033 ià( Ëngth != 1) { 1034 ecode = BT_ATT_ERROR_INVALID_PDU ; 1035  ”rÜ ; 1038 æags = (( ušt8_t *è pdu )[0]; 1040 `utž_debug ( £rv” -> debug_ÿÎback , s”v”-> debug_d©a , 1041 "ExeøWr™Req - fÏgs: 0x%02x", æags ); 1043 ià( æags == 0x00) 1044 wr™e = çl£ ; 1045 ià( æags == 0x01) 1046 wr™e = Œue ; 1048 ecode = BT_ATT_ERROR_INVALID_PDU ; 1049  ”rÜ ; 1052 ià(! wr™e ) { 1053 `queue_»move_®l ( £rv” -> ´•_queue , NULL , NULL, 1054 ´•_wr™e_d©a_de¡roy ); 1055 `bt_©t_£nd ( £rv” -> ©t , BT_ATT_OP_EXEC_WRITE_RSP , NULL , 0, 1056 NULL , NULL, NULL); 1060 `exec_Ãxt_´•_wr™e ( £rv” , 0, 0); 1064 ”rÜ : 1065 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , Ýcode , 0, ecode ); 1066 } } 1068  $exchªge_mtu_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 1069 ušt16_t Ëngth , * u£r_d©a ) 1071  bt_g©t_£rv” * £rv” = u£r_d©a ; 1072 ušt16_t þ›Á_rx_mtu ; 1073 ušt16_t fš®_mtu ; 1074 ušt8_t r¥_pdu [2]; 1076 ià( Ëngth != 2) { 1077 `bt_©t_£nd_”rÜ_r¥ ( £rv” -> ©t , Ýcode , 0, 1078 BT_ATT_ERROR_INVALID_PDU ); 1082 þ›Á_rx_mtu = `g‘_Ë16 ( pdu ); 1083 fš®_mtu = `MAX ( `MIN ( þ›Á_rx_mtu , £rv” -> mtu ), BT_ATT_DEFAULT_LE_MTU ); 1086 `put_Ë16 ( £rv” -> mtu , r¥_pdu ); 1087 `bt_©t_£nd ( £rv” -> ©t , BT_ATT_OP_MTU_RSP , r¥_pdu , 2, NULL , NULL, 1088 NULL ); 1091 £rv” -> mtu = fš®_mtu ; 1092 `bt_©t_£t_mtu ( £rv” -> ©t , fš®_mtu ); 1094 `utž_debug ( £rv” -> debug_ÿÎback , s”v”-> debug_d©a , 1095 "MTUƒxchªgcom¶‘e, w™h MTU: %u", fš®_mtu ); 1096 } } 1098  boÞ $g©t_£rv”_»gi¡”_©t_hªdËrs ( bt_g©t_£rv” * £rv” ) 1101 £rv” -> mtu_id = `bt_©t_»gi¡” (£rv”-> ©t , BT_ATT_OP_MTU_REQ , 1102 exchªge_mtu_cb , 1103 £rv” , NULL ); 1104 ià(! £rv” -> mtu_id ) 1105  çl£ ; 1108 £rv” -> »ad_by_g½_ty³_id = `bt_©t_»gi¡” (£rv”-> ©t , 1109 BT_ATT_OP_READ_BY_GRP_TYPE_REQ , 1110 »ad_by_g½_ty³_cb , 1111 £rv” , NULL ); 1112 ià(! £rv” -> »ad_by_g½_ty³_id ) 1113  çl£ ; 1116 £rv” -> »ad_by_ty³_id = `bt_©t_»gi¡” (£rv”-> ©t , 1117 BT_ATT_OP_READ_BY_TYPE_REQ , 1118 »ad_by_ty³_cb , 1119 £rv” , NULL ); 1120 ià(! £rv” -> »ad_by_ty³_id ) 1121  çl£ ; 1124 £rv” -> fšd_šfo_id = `bt_©t_»gi¡” (£rv”-> ©t , 1125 BT_ATT_OP_FIND_INFO_REQ , 1126 fšd_šfo_cb , 1127 £rv” , NULL ); 1128 ià(! £rv” -> fšd_šfo_id ) 1129  çl£ ; 1132 £rv” -> wr™e_id = `bt_©t_»gi¡” (£rv”-> ©t , BT_ATT_OP_WRITE_REQ , 1133 wr™e_cb , 1134 £rv” , NULL ); 1135 ià(! £rv” -> wr™e_id ) 1136  çl£ ; 1139 £rv” -> wr™e_cmd_id = `bt_©t_»gi¡” (£rv”-> ©t , BT_ATT_OP_WRITE_CMD , 1140 wr™e_cb , 1141 £rv” , NULL ); 1142 ià(! £rv” -> wr™e_cmd_id ) 1143  çl£ ; 1146 £rv” -> »ad_id = `bt_©t_»gi¡” (£rv”-> ©t , BT_ATT_OP_READ_REQ , 1147 »ad_cb , 1148 £rv” , NULL ); 1149 ià(! £rv” -> »ad_id ) 1150  çl£ ; 1153 £rv” -> »ad_blob_id = `bt_©t_»gi¡” (£rv”-> ©t , 1154 BT_ATT_OP_READ_BLOB_REQ , 1155 »ad_blob_cb , 1156 £rv” , NULL ); 1157 ià(! £rv” -> »ad_blob_id ) 1158  çl£ ; 1161 £rv” -> ´•_wr™e_id = `bt_©t_»gi¡” (£rv”-> ©t , 1162 BT_ATT_OP_PREP_WRITE_REQ , 1163 ´•_wr™e_cb , £rv” , NULL ); 1164 ià(! £rv” -> ´•_wr™e_id ) 1165  çl£ ; 1168 £rv” -> exec_wr™e_id = `bt_©t_»gi¡” (£rv”-> ©t , 1169 BT_ATT_OP_EXEC_WRITE_REQ , 1170 exec_wr™e_cb , £rv” , NULL ); 1171 ià(! £rv” -> exec_wr™e_id ) 1172  NULL ; 1174  Œue ; 1175 } } 1177  bt_g©t_£rv” * $bt_g©t_£rv”_Ãw ( g©t_db * db , 1178  bt_©t * ©t , ušt16_t mtu ) 1180  bt_g©t_£rv” * £rv” ; 1182 ià(! ©t || ! db ) 1183  NULL ; 1185 £rv” = `Ãw0 ( bt_g©t_£rv” , 1); 1186 ià(! £rv” ) 1187  NULL ; 1189 £rv” -> db = `g©t_db_»f (db); 1190 £rv” -> ©t = `bt_©t_»f (att); 1191 £rv” -> mtu = `MAX (mtu, BT_ATT_DEFAULT_LE_MTU ); 1192 £rv” -> max_´•_queue_Ën = DEFAULT_MAX_PREP_QUEUE_LEN ; 1194 £rv” -> ´•_queue = `queue_Ãw (); 1195 ià(! £rv” -> ´•_queue ) { 1196 `bt_g©t_£rv”_ä“ ( £rv” ); 1197  NULL ; 1200 ià(! `g©t_£rv”_»gi¡”_©t_hªdËrs ( £rv” )) { 1201 `bt_g©t_£rv”_ä“ ( £rv” ); 1202  NULL ; 1205  `bt_g©t_£rv”_»f ( £rv” ); 1206 } } 1208  bt_g©t_£rv” * $bt_g©t_£rv”_»f ( bt_g©t_£rv” * £rv” ) 1210 ià(! £rv” ) 1211  NULL ; 1213 `__sync_ãtch_ªd_add (& £rv” -> »f_couÁ , 1); 1215  £rv” ; 1216 } } 1218  $bt_g©t_£rv”_uÄef ( bt_g©t_£rv” * £rv” ) 1220 ià(! £rv” ) 1223 ià( `__sync_sub_ªd_ãtch (& £rv” -> »f_couÁ , 1)) 1226 `bt_g©t_£rv”_ä“ ( £rv” ); 1227 } } 1229 boÞ $bt_g©t_£rv”_£t_debug ( bt_g©t_£rv” * £rv” , 1230 bt_g©t_£rv”_debug_func_t ÿÎback , 1231 * u£r_d©a , 1232 bt_g©t_£rv”_de¡roy_func_t de¡roy ) 1234 ià(! £rv” ) 1235  çl£ ; 1237 ià( £rv” -> debug_de¡roy ) 1238 £rv” -> `debug_de¡roy (£rv”-> debug_d©a ); 1240 £rv” -> debug_ÿÎback = ÿÎback ; 1241 £rv” -> debug_de¡roy = de¡roy ; 1242 £rv” -> debug_d©a = u£r_d©a ; 1244  Œue ; 1245 } } 1247 boÞ $bt_g©t_£rv”_£nd_nÙifiÿtiÚ ( bt_g©t_£rv” * £rv” , 1248 ušt16_t hªdË , cÚ¡ ušt8_t * v®ue , 1249 ušt16_t Ëngth ) 1251 ušt16_t pdu_Ën ; 1252 ušt8_t * pdu ; 1253 boÞ »suÉ ; 1255 ià(! £rv” || ( Ëngth && ! v®ue )) 1256  çl£ ; 1258 pdu_Ën = `MIN ( `bt_©t_g‘_mtu ( £rv” -> ©t ), Ëngth + 2); 1259 pdu = `m®loc ( pdu_Ën ); 1260 ià(! pdu ) 1261  çl£ ; 1263 `put_Ë16 ( hªdË , pdu ); 1264 `memýy ( pdu + 2, v®ue , Ëngth ); 1266 »suÉ = !! `bt_©t_£nd ( £rv” -> ©t , BT_ATT_OP_HANDLE_VAL_NOT , pdu , 1267 pdu_Ën , NULL , NULL, NULL); 1268 `ä“ ( pdu ); 1270  »suÉ ; 1271 } } 1273  sšd_d©a { 1274 bt_g©t_£rv”_cÚf_func_t mÿÎback ; 1275 bt_g©t_£rv”_de¡roy_func_t mde¡roy ; 1276 * mu£r_d©a ; 1279  $de¡roy_šd_d©a (* u£r_d©a ) 1281  šd_d©a * d©a = u£r_d©a ; 1283 ià( d©a -> de¡roy ) 1284 d©a -> `de¡roy (d©a-> u£r_d©a ); 1286 `ä“ ( d©a ); 1287 } } 1289  $cÚf_cb ( ušt8_t Ýcode , cÚ¡ * pdu , 1290 ušt16_t Ëngth , * u£r_d©a ) 1292  šd_d©a * d©a = u£r_d©a ; 1294 ià( d©a -> ÿÎback ) 1295 d©a -> `ÿÎback (d©a-> u£r_d©a ); 1296 } } 1298 boÞ $bt_g©t_£rv”_£nd_šdiÿtiÚ ( bt_g©t_£rv” * £rv” , 1299 ušt16_t hªdË , cÚ¡ ušt8_t * v®ue , 1300 ušt16_t Ëngth , 1301 bt_g©t_£rv”_cÚf_func_t ÿÎback , 1302 * u£r_d©a , 1303 bt_g©t_£rv”_de¡roy_func_t de¡roy ) 1305 ušt16_t pdu_Ën ; 1306 ušt8_t * pdu ; 1307  šd_d©a * d©a ; 1308 boÞ »suÉ ; 1310 ià(! £rv” || ( Ëngth && ! v®ue )) 1311  çl£ ; 1313 pdu_Ën = `MIN ( `bt_©t_g‘_mtu ( £rv” -> ©t ), Ëngth + 2); 1314 pdu = `m®loc ( pdu_Ën ); 1315 ià(! pdu ) 1316  çl£ ; 1318 d©a = `Ãw0 ( šd_d©a , 1); 1319 ià(! d©a ) { 1320 `ä“ ( pdu ); 1321  çl£ ; 1324 d©a -> ÿÎback = callback; 1325 d©a -> de¡roy = destroy; 1326 d©a -> u£r_d©a = user_data; 1328 `put_Ë16 ( hªdË , pdu ); 1329 `memýy ( pdu + 2, v®ue , Ëngth ); 1331 »suÉ = !! `bt_©t_£nd ( £rv” -> ©t , BT_ATT_OP_HANDLE_VAL_IND , pdu , 1332 pdu_Ën , cÚf_cb , 1333 d©a , de¡roy_šd_d©a ); 1334 ià(! »suÉ ) 1335 `de¡roy_šd_d©a ( d©a ); 1337 `ä“ ( pdu ); 1339  »suÉ ; 1340 } } @src/shared/gatt-server.h 24  ~<¡dšt.h > 26  gbt_g©t_£rv” ; 28  bt_g©t_£rv” * bt_g©t_£rv”_Ãw ( g©t_db * db , 29  bt_©t * ©t , ušt16_t mtu ); 31  bt_g©t_£rv” * bt_g©t_£rv”_»f (bt_g©t_£rv” * £rv” ); 32  bt_g©t_£rv”_uÄef ( bt_g©t_£rv” * £rv” ); 34 (* tbt_g©t_£rv”_de¡roy_func_t )(* tu£r_d©a ); 35 (* tbt_g©t_£rv”_debug_func_t )(cÚ¡ * t¡r , * tu£r_d©a ); 36 (* tbt_g©t_£rv”_cÚf_func_t )(* tu£r_d©a ); 38 boÞ `bt_g©t_£rv”_£t_debug ( bt_g©t_£rv” * £rv” , 39 bt_g©t_£rv”_debug_func_t ÿÎback , 40 * u£r_d©a , 41 bt_g©t_£rv”_de¡roy_func_t de¡roy ); 43 boÞ `bt_g©t_£rv”_£nd_nÙifiÿtiÚ ( bt_g©t_£rv” * £rv” , 44 ušt16_t hªdË , cÚ¡ ušt8_t * v®ue , 45 ušt16_t Ëngth ); 47 boÞ `bt_g©t_£rv”_£nd_šdiÿtiÚ ( bt_g©t_£rv” * £rv” , 48 ušt16_t hªdË , cÚ¡ ušt8_t * v®ue , 49 ušt16_t Ëngth , 50 bt_g©t_£rv”_cÚf_func_t ÿÎback , 51 * u£r_d©a , 52 bt_g©t_£rv”_de¡roy_func_t de¡roy ); @src/shared/hci-crypto.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡ršg.h > 30  ~"mÚ™Ü/bt.h " 31  ~"¤c/sh¬ed/utž.h " 32  ~"¤c/sh¬ed/hci.h " 33  ~"¤c/sh¬ed/hci-üy±o.h " 35  süy±o_d©a { 36 ušt8_t msize ; 37 bt_hci_üy±o_func_t mÿÎback ; 38 * mu£r_d©a ; 41  $Ë_’üy±_ÿÎback (cÚ¡ * »¥Ú£ , ušt8_t size , 42 * u£r_d©a ) 44  üy±o_d©a * d©a = u£r_d©a ; 45 cÚ¡  bt_hci_r¥_Ë_’üy± * r¥ = »¥Ú£ ; 47 ià( r¥ -> ¡©us ) { 48 d©a -> `ÿÎback ( NULL , 0, d©a-> u£r_d©a ); 52 d©a -> `ÿÎback ( r¥ ->d©a, d©a-> size , d©a-> u£r_d©a ); 53 } } 55  boÞ $Ë_’üy± ( bt_hci * hci , ušt8_t size , 56 cÚ¡ ušt8_t key [16], cÚ¡ ušt8_ˆ ¶aš‹xt [16], 57 bt_hci_üy±o_func_t ÿÎback , * u£r_d©a ) 59  üy±o_d©a * d©a ; 60  bt_hci_cmd_Ë_’üy± cmd ; 62 ià(! ÿÎback || ! size || size > 16) 63  çl£ ; 65 `memýy ( cmd . key , key, 16); 66 `memýy ( cmd . ¶aš‹xt ,…laintext, 16); 68 d©a = `Ãw0 ( üy±o_d©a , 1); 69 ià(! d©a ) 70  çl£ ; 72 d©a -> size = size; 73 d©a -> ÿÎback = callback; 74 d©a -> u£r_d©a = user_data; 76 ià(! `bt_hci_£nd ( hci , BT_HCI_CMD_LE_ENCRYPT , & cmd , (cmd), 77 Ë_’üy±_ÿÎback , d©a , ä“ )) { 78 `ä“ ( d©a ); 79  çl£ ; 82  Œue ; 83 } } 85  $´ªd_ÿÎback (cÚ¡ * »¥Ú£ , ušt8_t size , 86 * u£r_d©a ) 88  üy±o_d©a * d©a = u£r_d©a ; 89 cÚ¡  bt_hci_r¥_Ë_¿nd * r¥ = »¥Ú£ ; 90 ušt8_t ´ªd [3]; 92 ià( r¥ -> ¡©us ) { 93 d©a -> `ÿÎback ( NULL , 0, d©a-> u£r_d©a ); 97 ´ªd [0] = ( r¥ -> numb” & 0xff0000) >> 16; 98 ´ªd [1] = ( r¥ -> numb” & 0x00ff00) >> 8; 99 ´ªd [2] = ( r¥ -> numb” & 0x00003f) | 0x40; 101 d©a -> `ÿÎback ( ´ªd , 3, d©a-> u£r_d©a ); 102 } } 104 boÞ $bt_hci_üy±o_´ªd ( bt_hci * hci , 105 bt_hci_üy±o_func_t ÿÎback , * u£r_d©a ) 107  üy±o_d©a * d©a ; 109 ià(! ÿÎback ) 110  çl£ ; 112 d©a = `Ãw0 ( üy±o_d©a , 1); 113 ià(! d©a ) 114  çl£ ; 116 d©a -> ÿÎback = callback; 117 d©a -> u£r_d©a = user_data; 119 ià(! `bt_hci_£nd ( hci , BT_HCI_CMD_LE_RAND , NULL , 0, 120 ´ªd_ÿÎback , d©a , ä“ )) { 121 `ä“ ( d©a ); 122  çl£ ; 125  Œue ; 126 } } 128 boÞ $bt_hci_üy±o_e ( bt_hci * hci , 129 cÚ¡ ušt8_t key [16], cÚ¡ ušt8_ˆ ¶aš‹xt [16], 130 bt_hci_üy±o_func_t ÿÎback , * u£r_d©a ) 132  `Ë_’üy± ( hci , 16, key , ¶aš‹xt , ÿÎback , u£r_d©a ); 133 } } 135 boÞ $bt_hci_üy±o_d1 ( bt_hci * hci , 136 cÚ¡ ušt8_t k [16], ušt16_t d , ušt16_ˆ r , 137 bt_hci_üy±o_func_t ÿÎback , * u£r_d©a ) 139 ušt8_t dp [16]; 142 dp [0] = d & 0xff; 143 dp [1] = d >> 8; 144 dp [2] = r & 0xff; 145 dp [3] = r >> 8; 146 `mem£t ( dp + 4, 0, 12); 149  `Ë_’üy± ( hci , 16, k , dp , ÿÎback , u£r_d©a ); 150 } } 152 boÞ $bt_hci_üy±o_dm ( bt_hci * hci , 153 cÚ¡ ušt8_t k [16], cÚ¡ ušt8_ˆ r [8], 154 bt_hci_üy±o_func_t ÿÎback , * u£r_d©a ) 156 ušt8_t ½ [16]; 159 `memýy ( ½ , r , 8); 160 `mem£t ( ½ + 8, 0, 8); 163  `Ë_’üy± ( hci , 8, k , ½ , ÿÎback , u£r_d©a ); 164 } } 166 boÞ $bt_hci_üy±o_ah ( bt_hci * hci , 167 cÚ¡ ušt8_t k [16], cÚ¡ ušt8_ˆ r [3], 168 bt_hci_üy±o_func_t ÿÎback , * u£r_d©a ) 170 ušt8_t ½ [16]; 173 `memýy ( ½ , r , 3); 174 `mem£t ( ½ + 3, 0, 13); 177  `Ë_’üy± ( hci , 3, k , ½ , ÿÎback , u£r_d©a ); 178 } } @src/shared/hci-crypto.h 24  ~<¡dboÞ.h > 25  ~<¡dšt.h > 27  gbt_hci ; 29 (* tbt_hci_üy±o_func_t )(cÚ¡ * td©a , tušt8_t tsize , 30 * tu£r_d©a ); 32 boÞ `bt_hci_üy±o_´ªd ( bt_hci * hci , 33 bt_hci_üy±o_func_t ÿÎback , * u£r_d©a ); 34 boÞ `bt_hci_üy±o_e ( bt_hci * hci , 35 cÚ¡ ušt8_t key [16], cÚ¡ ušt8_ˆ ¶aš‹xt [16], 36 bt_hci_üy±o_func_t ÿÎback , * u£r_d©a ); 37 boÞ `bt_hci_üy±o_d1 ( bt_hci * hci , 38 cÚ¡ ušt8_t k [16], ušt16_t d , ušt16_ˆ r , 39 bt_hci_üy±o_func_t ÿÎback , * u£r_d©a ); 40 boÞ `bt_hci_üy±o_dm ( bt_hci * hci , 41 cÚ¡ ušt8_t k [16], cÚ¡ ušt8_ˆ r [8], 42 bt_hci_üy±o_func_t ÿÎback , * u£r_d©a ); 43 boÞ `bt_hci_üy±o_ah ( bt_hci * hci , 44 cÚ¡ ušt8_t k [16], cÚ¡ ušt8_ˆ r [3], 45 bt_hci_üy±o_func_t ÿÎback , * u£r_d©a ); @src/shared/hci.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~ 30  ~<¡ršg.h > 31  ~ 32  ~ 34  ~"mÚ™Ü/bt.h " 35  ~"mÚ™Ü/mašloÝ.h " 36  ~"¤c/sh¬ed/io.h " 37  ~"¤c/sh¬ed/utž.h " 38  ~"¤c/sh¬ed/queue.h " 39  ~"¤c/sh¬ed/hci.h " 41  #BTPROTO_HCI 1 ) 42  ssockaddr_hci { 43 §_çmžy_t mhci_çmžy ; 44  mhci_dev ; 45  mhci_chªÃl ; 47  #HCI_CHANNEL_RAW 0 ) 48  #HCI_CHANNEL_USER 1 ) 50  #SOL_HCI 0 ) 51  #HCI_FILTER 2 ) 52  shci_fž‹r { 53 ušt32_t mty³_mask ; 54 ušt32_t mev’t_mask [2]; 55 ušt16_t mÝcode ; 58  sbt_hci { 59  m»f_couÁ ; 60  io * mio ; 61 boÞ mis_¡»am ; 62 boÞ mwr™”_aùive ; 63 ušt8_t mnum_cmds ; 64  mÃxt_cmd_id ; 65  mÃxt_evt_id ; 66  queue * mcmd_queue ; 67  queue * mr¥_queue ; 68  queue * mevt_li¡ ; 71  scmd { 72  mid ; 73 ušt16_t mÝcode ; 74 * md©a ; 75 ušt8_t msize ; 76 bt_hci_ÿÎback_func_t mÿÎback ; 77 bt_hci_de¡roy_func_t mde¡roy ; 78 * mu£r_d©a ; 81  sevt { 82  mid ; 83 ušt8_t mev’t ; 84 bt_hci_ÿÎback_func_t mÿÎback ; 85 bt_hci_de¡roy_func_t mde¡roy ; 86 * mu£r_d©a ; 89  $cmd_ä“ (* d©a ) 91  cmd *cmd = d©a ; 93 ià( cmd -> de¡roy ) 94 cmd -> `de¡roy (cmd-> u£r_d©a ); 96 `ä“ ( cmd -> d©a ); 97 `ä“ ( cmd ); 98 } } 100  $evt_ä“ (* d©a ) 102  evt *evˆð d©a ; 104 ià( evt -> de¡roy ) 105 evt -> `de¡roy Óvt-> u£r_d©a ); 107 `ä“ ( evt ); 108 } } 110  $£nd_commªd ( bt_hci * hci , ušt16_t Ýcode , 111 * d©a , ušt8_t size ) 113 ušt8_t ty³ = BT_H4_CMD_PKT ; 114  bt_hci_cmd_hdr hdr ; 115  iovec iov [3]; 116  iovút ; 118 ià( hci -> num_cmds < 1) 121 hdr . Ýcode = `ýu_to_Ë16 (opcode); 122 hdr . ¶’ = size ; 124 iov [0]. iov_ba£ = & ty³ ; 125 iov [0]. iov_Ën = 1; 126 iov [1]. iov_ba£ = & hdr ; 127 iov [1]. iov_Ën = ( hdr ); 129 ià( size > 0) { 130 iov [2]. iov_ba£ = d©a ; 131 iov [2]. iov_Ën = size ; 132 iovút = 3; 134 iovút = 2; 136 ià( `io_£nd ( hci -> io , iov , iovút ) < 0) 139 hci -> num_cmds --; 140 } } 142  boÞ $io_wr™e_ÿÎback ( io *io, * u£r_d©a ) 144  bt_hci * hci = u£r_d©a ; 145  cmd *cmd; 147 cmd = `queue_pÝ_h—d ( hci -> cmd_queue ); 148 ià( cmd ) { 149 `£nd_commªd ( hci , cmd -> Ýcode , cmd-> d©a , cmd-> size ); 150 `queue_push_ž ( hci -> r¥_queue , cmd ); 153 hci -> wr™”_aùive = çl£ ; 155  çl£ ; 156 } } 158  $wakeup_wr™” ( bt_hci * hci ) 160 ià( hci -> wr™”_aùive ) 163 ià( hci -> num_cmds < 1) 166 ià( `queue_i£m±y ( hci -> cmd_queue )) 169 ià(! `io_£t_wr™e_hªdËr ( hci -> io , io_wr™e_ÿÎback , hci, NULL )) 172 hci -> wr™”_aùive = Œue ; 173 } } 175  boÞ $m©ch_cmd_Ýcode (cÚ¡ * a , cÚ¡ * b ) 177 cÚ¡  cmd *cmd = a ; 178 ušt16_t Ýcode = `PTR_TO_UINT ( b ); 180  cmd -> Ýcode == opcode; 181 } } 183  $´oûss_»¥Ú£ ( bt_hci * hci , ušt16_t Ýcode , 184 cÚ¡ * d©a , size_t size ) 186  cmd *cmd; 188 ià( Ýcode =ð BT_HCI_CMD_NOP ) 189  dÚe ; 191 cmd = `queue_»move_if ( hci -> r¥_queue , m©ch_cmd_Ýcode , 192 `UINT_TO_PTR ( Ýcode )); 193 ià(! cmd ) 196 ià( cmd -> ÿÎback ) 197 cmd -> `ÿÎback ( d©a , size , cmd-> u£r_d©a ); 199 `cmd_ä“ ( cmd ); 201 dÚe : 202 `wakeup_wr™” ( hci ); 203 } } 205  $´oûss_nÙify (* d©a , * u£r_d©a ) 207  bt_hci_evt_hdr * hdr = u£r_d©a ; 208  evt *evˆð d©a ; 210 ià( evt -> ev’t =ð hdr ->evt) 211 evt -> `ÿÎback ( u£r_d©a + ( bt_hci_evt_hdr ), 212 hdr -> ¶’ , evt -> u£r_d©a ); 213 } } 215  $´oûss_ev’t ( bt_hci * hci , cÚ¡ * d©a , size_t size ) 217 cÚ¡  bt_hci_evt_hdr * hdr = d©a ; 218 cÚ¡  bt_hci_evt_cmd_com¶‘e * cc ; 219 cÚ¡  bt_hci_evt_cmd_¡©us * cs ; 221 ià( size < ( bt_hci_evt_hdr )) 224 d©a +ð( bt_hci_evt_hdr ); 225 size -ð( bt_hci_evt_hdr ); 227 ià( hdr -> ¶’ !ð size ) 230  hdr -> evt ) { 231  BT_HCI_EVT_CMD_COMPLETE : 232 ià( size < (* cc )) 234 cc = d©a ; 235 hci -> num_cmds = cc -> ncmd ; 236 `´oûss_»¥Ú£ ( hci , `Ë16_to_ýu ( cc -> Ýcode ), 237 d©a + (* cc ), 238 size - (* cc )); 241  BT_HCI_EVT_CMD_STATUS : 242 ià( size < (* cs )) 244 cs = d©a ; 245 hci -> num_cmds = cs -> ncmd ; 246 `´oûss_»¥Ú£ ( hci , `Ë16_to_ýu ( cs -> Ýcode ), &cs-> ¡©us , 1); 250 `queue_fÜ—ch ( hci -> evt_li¡ , ´oûss_nÙify , (*è hdr ); 253 } } 255  boÞ $io_»ad_ÿÎback ( io *io, * u£r_d©a ) 257  bt_hci * hci = u£r_d©a ; 258 ušt8_t buf [512]; 259 ssize_t Ën ; 260  fd ; 262 fd = `io_g‘_fd ( hci -> io ); 263 ià( fd < 0) 264  çl£ ; 266 ià( hci -> is_¡»am ) 267  çl£ ; 269 Ën = `»ad ( fd , buf , (buf)); 270 ià( Ën < 0) 271  çl£ ; 273 ià( Ën < 1) 274  Œue ; 276  buf [0]) { 277  BT_H4_EVT_PKT : 278 `´oûss_ev’t ( hci , buf + 1, Ën - 1); 282  Œue ; 283 } } 285  bt_hci * $ü—‹_hci ( fd ) 287  bt_hci * hci ; 289 ià( fd < 0) 290  NULL ; 292 hci = `Ãw0 ( bt_hci , 1); 293 ià(! hci ) 294  NULL ; 296 hci -> io = `io_Ãw ( fd ); 297 ià(! hci -> io ) { 298 `ä“ ( hci ); 299  NULL ; 302 hci -> is_¡»am = Œue ; 303 hci -> wr™”_aùive = çl£ ; 304 hci -> num_cmds = 1; 305 hci -> Ãxt_cmd_id = 1; 306 hci -> Ãxt_evt_id = 1; 308 hci -> cmd_queue = `queue_Ãw (); 309 ià(! hci -> cmd_queue ) { 310 `io_de¡roy ( hci -> io ); 311 `ä“ ( hci ); 312  NULL ; 315 hci -> r¥_queue = `queue_Ãw (); 316 ià(! hci -> r¥_queue ) { 317 `queue_de¡roy ( hci -> cmd_queue , NULL ); 318 `io_de¡roy ( hci -> io ); 319 `ä“ ( hci ); 320  NULL ; 323 hci -> evt_li¡ = `queue_Ãw (); 324 ià(! hci -> evt_li¡ ) { 325 `queue_de¡roy ( hci -> r¥_queue , NULL ); 326 `queue_de¡roy ( hci -> cmd_queue , NULL ); 327 `io_de¡roy ( hci -> io ); 328 `ä“ ( hci ); 329  NULL ; 332 ià(! `io_£t_»ad_hªdËr ( hci -> io , io_»ad_ÿÎback , hci, NULL )) { 333 `queue_de¡roy ( hci -> evt_li¡ , NULL ); 334 `queue_de¡roy ( hci -> r¥_queue , NULL ); 335 `queue_de¡roy ( hci -> cmd_queue , NULL ); 336 `io_de¡roy ( hci -> io ); 337 `ä“ ( hci ); 338  NULL ; 341  `bt_hci_»f ( hci ); 342 } } 344  bt_hci * $bt_hci_Ãw ( fd ) 346  bt_hci * hci ; 348 hci = `ü—‹_hci ( fd ); 349 ià(! hci ) 350  NULL ; 352  hci ; 353 } } 355  $ü—‹_sock‘ ( ušt16_t šdex , ušt16_ˆ chªÃl ) 357  sockaddr_hci addr ; 358  fd ; 360 fd = `sock‘ ( PF_BLUETOOTH , SOCK_RAW | SOCK_CLOEXEC | SOCK_NONBLOCK , 361 BTPROTO_HCI ); 362 ià( fd < 0) 365 `mem£t (& addr , 0, (addr)); 366 addr . hci_çmžy = AF_BLUETOOTH ; 367 addr . hci_dev = šdex ; 368 addr . hci_chªÃl = chªÃl ; 370 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 371 `þo£ ( fd ); 375  fd ; 376 } } 378  bt_hci * $bt_hci_Ãw_u£r_chªÃl ( ušt16_t šdex ) 380  bt_hci * hci ; 381  fd ; 383 fd = `ü—‹_sock‘ ( šdex , HCI_CHANNEL_USER ); 384 ià( fd < 0) 385  NULL ; 387 hci = `ü—‹_hci ( fd ); 388 ià(! hci ) { 389 `þo£ ( fd ); 390  NULL ; 393 hci -> is_¡»am = çl£ ; 395 `bt_hci_£t_þo£_Ú_uÄef ( hci , Œue ); 397  hci ; 398 } } 400  bt_hci * $bt_hci_Ãw_¿w_deviû ( ušt16_t šdex ) 402  bt_hci * hci ; 403  hci_fž‹r æt ; 404  fd ; 406 fd = `ü—‹_sock‘ ( šdex , HCI_CHANNEL_RAW ); 407 ià( fd < 0) 408  NULL ; 410 `mem£t (& æt , 0, (flt)); 411 æt . ty³_mask = 1 << BT_H4_EVT_PKT ; 412 æt . ev’t_mask [0] = 0xffffffff; 413 æt . ev’t_mask [1] = 0xffffffff; 415 ià( `£tsockÝt ( fd , SOL_HCI , HCI_FILTER , & æt , (flt)) < 0) { 416 `þo£ ( fd ); 417  NULL ; 420 hci = `ü—‹_hci ( fd ); 421 ià(! hci ) { 422 `þo£ ( fd ); 423  NULL ; 426 hci -> is_¡»am = çl£ ; 428 `bt_hci_£t_þo£_Ú_uÄef ( hci , Œue ); 430  hci ; 431 } } 433  bt_hci * $bt_hci_»f ( bt_hci * hci ) 435 ià(! hci ) 436  NULL ; 438 `__sync_ãtch_ªd_add (& hci -> »f_couÁ , 1); 440  hci ; 441 } } 443  $bt_hci_uÄef ( bt_hci * hci ) 445 ià(! hci ) 448 ià( `__sync_sub_ªd_ãtch (& hci -> »f_couÁ , 1)) 451 `queue_de¡roy ( hci -> evt_li¡ , evt_ä“ ); 452 `queue_de¡roy ( hci -> cmd_queue , cmd_ä“ ); 453 `queue_de¡roy ( hci -> r¥_queue , cmd_ä“ ); 455 `io_de¡roy ( hci -> io ); 457 `ä“ ( hci ); 458 } } 460 boÞ $bt_hci_£t_þo£_Ú_uÄef ( bt_hci * hci , boÞ do_þo£ ) 462 ià(! hci ) 463  çl£ ; 465  `io_£t_þo£_Ú_de¡roy ( hci -> io , do_þo£ ); 466 } } 468  $bt_hci_£nd ( bt_hci * hci , ušt16_t Ýcode , 469 cÚ¡ * d©a , ušt8_t size , 470 bt_hci_ÿÎback_func_t ÿÎback , 471 * u£r_d©a , bt_hci_de¡roy_func_t de¡roy ) 473  cmd *cmd; 475 ià(! hci ) 478 cmd = `Ãw0 (cmd, 1); 479 ià(! cmd ) 482 cmd -> Ýcode = opcode; 483 cmd -> size = size; 485 ià( cmd -> size > 0) { 486 cmd -> d©a = `m®loc (cmd-> size ); 487 ià(! cmd -> d©a ) { 488 `ä“ ( cmd ); 492 `memýy ( cmd -> d©a , d©a, cmd-> size ); 495 ià( hci -> Ãxt_cmd_id < 1) 496 hci -> Ãxt_cmd_id = 1; 498 cmd -> id = hci -> Ãxt_cmd_id ++; 500 cmd -> ÿÎback = callback; 501 cmd -> de¡roy = destroy; 502 cmd -> u£r_d©a = user_data; 504 ià(! `queue_push_ž ( hci -> cmd_queue , cmd )) { 505 `ä“ ( cmd -> d©a ); 506 `ä“ ( cmd ); 510 `wakeup_wr™” ( hci ); 512  cmd -> id ; 513 } } 515  boÞ $m©ch_cmd_id (cÚ¡ * a , cÚ¡ * b ) 517 cÚ¡  cmd *cmd = a ; 518  id = `PTR_TO_UINT ( b ); 520  cmd -> id == id; 521 } } 523 boÞ $bt_hci_ÿnûl ( bt_hci * hci ,  id ) 525  cmd *cmd; 527 ià(! hci || ! id ) 528  çl£ ; 530 cmd = `queue_»move_if ( hci -> cmd_queue , m©ch_cmd_id , `UINT_TO_PTR ( id )); 531 ià(! cmd ) { 532 cmd = `queue_»move_if ( hci -> r¥_queue , m©ch_cmd_id , 533 `UINT_TO_PTR ( id )); 534 ià(! cmd ) 535  çl£ ; 538 `cmd_ä“ ( cmd ); 540 `wakeup_wr™” ( hci ); 542  Œue ; 543 } } 545 boÞ $bt_hci_æush ( bt_hci * hci ) 547 ià(! hci ) 548  çl£ ; 550 ià( hci -> wr™”_aùive ) { 551 `io_£t_wr™e_hªdËr ( hci -> io , NULL , NULL, NULL); 552 hci -> wr™”_aùive = çl£ ; 555 `queue_»move_®l ( hci -> cmd_queue , NULL , NULL, cmd_ä“ ); 556 `queue_»move_®l ( hci -> r¥_queue , NULL , NULL, cmd_ä“ ); 558  Œue ; 559 } } 561  $bt_hci_»gi¡” ( bt_hci * hci , ušt8_t ev’t , 562 bt_hci_ÿÎback_func_t ÿÎback , 563 * u£r_d©a , bt_hci_de¡roy_func_t de¡roy ) 565  evt *evt; 567 ià(! hci ) 570 evt = `Ãw0 (evt, 1); 571 ià(! evt ) 574 evt -> ev’t =ƒvent; 576 ià( hci -> Ãxt_evt_id < 1) 577 hci -> Ãxt_evt_id = 1; 579 evt -> id = hci -> Ãxt_evt_id ++; 581 evt -> ÿÎback = callback; 582 evt -> de¡roy = destroy; 583 evt -> u£r_d©a = user_data; 585 ià(! `queue_push_ž ( hci -> evt_li¡ , evt )) { 586 `ä“ ( evt ); 590  evt -> id ; 591 } } 593  boÞ $m©ch_evt_id (cÚ¡ * a , cÚ¡ * b ) 595 cÚ¡  evt *evˆð a ; 596  id = `PTR_TO_UINT ( b ); 598  evt -> id == id; 599 } } 601 boÞ $bt_hci_uÄegi¡” ( bt_hci * hci ,  id ) 603  evt *evt; 605 ià(! hci || ! id ) 606  çl£ ; 608 evt = `queue_»move_if ( hci -> evt_li¡ , m©ch_evt_id , `UINT_TO_PTR ( id )); 609 ià(! evt ) 610  çl£ ; 612 `evt_ä“ ( evt ); 614  Œue ; 615 } } @src/shared/hci.h 24  ~<¡dboÞ.h > 25  ~<¡dšt.h > 27 (* tbt_hci_de¡roy_func_t )(* tu£r_d©a ); 29  bt_hci ; 31  bt_hci * `bt_hci_Ãw ( fd ); 32  bt_hci * `bt_hci_Ãw_u£r_chªÃl ( ušt16_t šdex ); 33  bt_hci * `bt_hci_Ãw_¿w_deviû ( ušt16_t šdex ); 35  bt_hci * `bt_hci_»f (bt_hc˜* hci ); 36  `bt_hci_uÄef ( bt_hci * hci ); 38 boÞ `bt_hci_£t_þo£_Ú_uÄef ( bt_hci * hci , boÞ do_þo£ ); 40 (* tbt_hci_ÿÎback_func_t )(cÚ¡ * td©a , tušt8_t tsize , 41 * tu£r_d©a ); 43  `bt_hci_£nd ( bt_hci * hci , ušt16_t Ýcode , 44 cÚ¡ * d©a , ušt8_t size , 45 bt_hci_ÿÎback_func_t ÿÎback , 46 * u£r_d©a , bt_hci_de¡roy_func_t de¡roy ); 47 boÞ `bt_hci_ÿnûl ( bt_hci * hci ,  id ); 48 boÞ `bt_hci_æush ( bt_hci * hci ); 50  `bt_hci_»gi¡” ( bt_hci * hci , ušt8_t ev’t , 51 bt_hci_ÿÎback_func_t ÿÎback , 52 * u£r_d©a , bt_hci_de¡roy_func_t de¡roy ); 53 boÞ `bt_hci_uÄegi¡” ( bt_hci * hci ,  id ); @src/shared/hfp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~ 30  ~<¡ršg.h > 31  ~<¡d¬g.h > 32  ~<ùy³.h > 34  ~"¤c/sh¬ed/utž.h " 35  ~"¤c/sh¬ed/ršgbuf.h " 36  ~"¤c/sh¬ed/queue.h " 37  ~"¤c/sh¬ed/io.h " 38  ~"¤c/sh¬ed/hå.h " 40  shå_gw { 41  m»f_couÁ ; 42  mfd ; 43 boÞ mþo£_Ú_uÄef ; 44  io * mio ; 45  ršgbuf * m»ad_buf ; 46  ršgbuf * mwr™e_buf ; 47  queue * mcmd_hªdËrs ; 48 boÞ mwr™”_aùive ; 49 boÞ m»suÉ_³ndšg ; 50 hå_commªd_func_t mcommªd_ÿÎback ; 51 hå_de¡roy_func_t mcommªd_de¡roy ; 52 * mcommªd_d©a ; 53 hå_debug_func_t mdebug_ÿÎback ; 54 hå_de¡roy_func_t mdebug_de¡roy ; 55 * mdebug_d©a ; 57 hå_discÚÃù_func_t mdiscÚÃù_ÿÎback ; 58 hå_de¡roy_func_t mdiscÚÃù_de¡roy ; 59 * mdiscÚÃù_d©a ; 61 boÞ mš_discÚÃù ; 62 boÞ mde¡royed ; 65  shå_hf { 66  m»f_couÁ ; 67  mfd ; 68 boÞ mþo£_Ú_uÄef ; 69  io * mio ; 70  ršgbuf * m»ad_buf ; 71  ršgbuf * mwr™e_buf ; 73 boÞ mwr™”_aùive ; 74  queue * mcmd_queue ; 76  queue * mev’t_hªdËrs ; 78 hå_debug_func_t mdebug_ÿÎback ; 79 hå_de¡roy_func_t mdebug_de¡roy ; 80 * mdebug_d©a ; 82 hå_discÚÃù_func_t mdiscÚÃù_ÿÎback ; 83 hå_de¡roy_func_t mdiscÚÃù_de¡roy ; 84 * mdiscÚÃù_d©a ; 86 boÞ mš_discÚÃù ; 87 boÞ mde¡royed ; 90  scmd_hªdËr { 91 * m´efix ; 92 * mu£r_d©a ; 93 hå_de¡roy_func_t mde¡roy ; 94 hå_»suÉ_func_t mÿÎback ; 97  shå_cÚ‹xt { 98 cÚ¡ * md©a ; 99  moff£t ; 102  scmd_»¥Ú£ { 103 hå_»¥Ú£_func_t m»¥_cb ; 104  hå_cÚ‹xt * m»¥Ú£ ; 105 * m»¥_d©a ; 106 * mu£r_d©a ; 109  sev’t_hªdËr { 110 * m´efix ; 111 * mu£r_d©a ; 112 hå_de¡roy_func_t mde¡roy ; 113 hå_hf_»suÉ_func_t mÿÎback ; 116  $de¡roy_cmd_hªdËr (* d©a ) 118  cmd_hªdËr * hªdËr = d©a ; 120 ià( hªdËr -> de¡roy ) 121 hªdËr -> `de¡roy (hªdËr-> u£r_d©a ); 123 `ä“ ( hªdËr -> ´efix ); 125 `ä“ ( hªdËr ); 126 } } 128  boÞ $m©ch_hªdËr_´efix (cÚ¡ * a , cÚ¡ * b ) 130 cÚ¡  cmd_hªdËr * hªdËr = a ; 131 cÚ¡ * ´efix = b ; 133 ià( `¡rcmp ( hªdËr -> ´efix ,…refix) != 0) 134  çl£ ; 136  Œue ; 137 } } 139  $wr™e_w©ch_de¡roy (* u£r_d©a ) 141  hå_gw * hå = u£r_d©a ; 143 hå -> wr™”_aùive = çl£ ; 144 } } 146  boÞ $ÿn_wr™e_d©a ( io *io, * u£r_d©a ) 148  hå_gw * hå = u£r_d©a ; 149 ssize_t by‹s_wr™‹n ; 151 by‹s_wr™‹n = `ršgbuf_wr™e ( hå -> wr™e_buf , hå-> fd ); 152 ià( by‹s_wr™‹n < 0) 153  çl£ ; 155 ià( `ršgbuf_Ën ( hå -> wr™e_buf ) > 0) 156  Œue ; 158  çl£ ; 159 } } 161  $wakeup_wr™” ( hå_gw * hå ) 163 ià( hå -> wr™”_aùive ) 166 ià(! `ršgbuf_Ën ( hå -> wr™e_buf )) 169 ià(! `io_£t_wr™e_hªdËr ( hå -> io , ÿn_wr™e_d©a , 170 hå , wr™e_w©ch_de¡roy )) 173 hå -> wr™”_aùive = Œue ; 174 } } 176  $sk_wh™e¥aû ( hå_cÚ‹xt * cÚ‹xt ) 178  cÚ‹xt -> d©a [cÚ‹xt-> off£t ] == ' ') 179 cÚ‹xt -> off£t ++; 180 } } 182  $hªdË_unknown_©_commªd ( hå_gw * hå , 183 cÚ¡ * d©a ) 185 ià( hå -> commªd_ÿÎback ) { 186 hå -> `commªd_ÿÎback ( d©a , hå-> commªd_d©a ); 187 hå -> »suÉ_³ndšg = Œue ; 189 `hå_gw_£nd_»suÉ ( hå , HFP_RESULT_ERROR ); 191 } } 193  boÞ $hªdË_©_commªd ( hå_gw * hå , cÚ¡ * d©a ) 195  cmd_hªdËr * hªdËr ; 196 cÚ¡ * £·¿tÜs = ";?=\0"; 197  hå_cÚ‹xt cÚ‹xt ; 198 hå_gw_cmd_ty³ ty³ ; 199  lookup_´efix [18]; 200 ušt8_t ´ef_Ën = 0; 201 cÚ¡ * ´efix ; 202  i ; 204 cÚ‹xt . off£t = 0; 205 cÚ‹xt . d©a = data; 207 `sk_wh™e¥aû (& cÚ‹xt ); 209 ià( `¡¾’ ( d©a + cÚ‹xt . off£t ) < 3) 210  çl£ ; 212 ià( `¡ºcmp ( d©a + cÚ‹xt . off£t , "AT", 2)) 213 ià( `¡ºcmp ( d©a + cÚ‹xt . off£t , "at", 2)) 214  çl£ ; 216 cÚ‹xt . off£t += 2; 217 ´efix = d©a + cÚ‹xt . off£t ; 219 ià( `i§Íha ( ´efix [0])) { 220 lookup_´efix [ ´ef_Ën ++] = `touµ” ( ´efix [0]); 222 ´ef_Ën = `¡rc¥n ( ´efix , £·¿tÜs ); 223 ià( ´ef_Ën > 17 ||…ref_len < 2) 224  çl£ ; 226  i = 0; i < ´ef_Ën ; i++) 227 lookup_´efix [ i ] = `touµ” ( ´efix [i]); 230 lookup_´efix [ ´ef_Ën ] = '\0'; 231 cÚ‹xt . off£t +ð ´ef_Ën ; 233 ià( lookup_´efix [0] == 'D') { 234 ty³ = HFP_GW_CMD_TYPE_SET ; 235  dÚe ; 238 ià( d©a [ cÚ‹xt . off£t ] == '=') { 239 cÚ‹xt . off£t ++; 240 ià( d©a [ cÚ‹xt . off£t ] == '?') { 241 cÚ‹xt . off£t ++; 242 ty³ = HFP_GW_CMD_TYPE_TEST ; 244 ty³ = HFP_GW_CMD_TYPE_SET ; 246  dÚe ; 249 ià( d©a [ cÚ‹xt . off£t ] == '?') { 250 cÚ‹xt . off£t ++; 251 ty³ = HFP_GW_CMD_TYPE_READ ; 252  dÚe ; 255 ty³ = HFP_GW_CMD_TYPE_COMMAND ; 257 dÚe : 259 hªdËr = `queue_fšd ( hå -> cmd_hªdËrs , m©ch_hªdËr_´efix , 260 lookup_´efix ); 261 ià(! hªdËr ) { 262 `hªdË_unknown_©_commªd ( hå , d©a ); 263  Œue ; 266 hªdËr -> `ÿÎback (& cÚ‹xt , ty³ , hªdËr-> u£r_d©a ); 268  Œue ; 269 } } 271  $Ãxt_f›ld ( hå_cÚ‹xt * cÚ‹xt ) 273 ià( cÚ‹xt -> d©a [cÚ‹xt-> off£t ] == ',') 274 cÚ‹xt -> off£t ++; 275 } } 277 boÞ $hå_cÚ‹xt_g‘_numb”_deçuÉ ( hå_cÚ‹xt * cÚ‹xt , 278 * v® , 279  deçuÉ_v® ) 281 `sk_wh™e¥aû ( cÚ‹xt ); 283 ià( cÚ‹xt -> d©a [cÚ‹xt-> off£t ] == ',') { 284 ià( v® ) 285 * v® = deçuÉ_v® ; 287 cÚ‹xt -> off£t ++; 288  Œue ; 291  `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , v® ); 292 } } 294 boÞ $hå_cÚ‹xt_g‘_numb” ( hå_cÚ‹xt * cÚ‹xt , 295 * v® ) 297  i ; 298  tmp = 0; 300 `sk_wh™e¥aû ( cÚ‹xt ); 302 i = cÚ‹xt -> off£t ; 304  cÚ‹xt -> d©a [ i ] >= '0' && context->data[i] <= '9') 305 tmp =m°* 10 + cÚ‹xt -> d©a [ i ++] - '0'; 307 ià( i =ð cÚ‹xt -> off£t ) 308  çl£ ; 310 ià( v® ) 311 * v® = tmp ; 312 cÚ‹xt -> off£t = i ; 314 `sk_wh™e¥aû ( cÚ‹xt ); 315 `Ãxt_f›ld ( cÚ‹xt ); 317  Œue ; 318 } } 320 boÞ $hå_cÚ‹xt_Ý’_cÚš” ( hå_cÚ‹xt * cÚ‹xt ) 322 `sk_wh™e¥aû ( cÚ‹xt ); 325 ià( cÚ‹xt -> d©a [cÚ‹xt-> off£t ] != '(') 326  çl£ ; 328 cÚ‹xt -> off£t ++; 330  Œue ; 331 } } 333 boÞ $hå_cÚ‹xt_þo£_cÚš” ( hå_cÚ‹xt * cÚ‹xt ) 335 `sk_wh™e¥aû ( cÚ‹xt ); 338 ià( cÚ‹xt -> d©a [cÚ‹xt-> off£t ] != ')') 339  çl£ ; 341 cÚ‹xt -> off£t ++; 343 `Ãxt_f›ld ( cÚ‹xt ); 345  Œue ; 346 } } 348 boÞ $hå_cÚ‹xt_g‘_¡ršg ( hå_cÚ‹xt * cÚ‹xt , * buf , 349 ušt8_t Ën ) 351  i = 0; 352 cÚ¡ * d©a = cÚ‹xt ->data; 353  off£t ; 355 `sk_wh™e¥aû ( cÚ‹xt ); 357 ià( d©a [ cÚ‹xt -> off£t ] != '"') 358  çl£ ; 360 off£t = cÚ‹xt ->offset; 361 off£t ++; 363  d©a [ off£t ] != '\0' && data[offset] != '"') { 364 ià( i =ð Ën ) 365  çl£ ; 367 buf [ i ++] = d©a [ off£t ]; 368 off£t ++; 371 ià( i =ð Ën ) 372  çl£ ; 374 buf [ i ] = '\0'; 376 ià( d©a [ off£t ] == '"') 377 off£t ++; 379  çl£ ; 381 cÚ‹xt -> off£t = offset; 383 `sk_wh™e¥aû ( cÚ‹xt ); 384 `Ãxt_f›ld ( cÚ‹xt ); 386  Œue ; 387 } } 389 boÞ $hå_cÚ‹xt_g‘_unquÙed_¡ršg ( hå_cÚ‹xt * cÚ‹xt , 390 * buf , ušt8_t Ën ) 392 cÚ¡ * d©a = cÚ‹xt ->data; 393  off£t ; 394  i = 0; 395  c ; 397 `sk_wh™e¥aû ( cÚ‹xt ); 399 c = d©a [ cÚ‹xt -> off£t ]; 400 ià( c == '"' || c == ')' || c == '(') 401  çl£ ; 403 off£t = cÚ‹xt ->offset; 405  d©a [ off£t ] != '\0' && data[offset] != ',' && 406 d©a [ off£t ] != ')') { 407 ià( i =ð Ën ) 408  çl£ ; 410 buf [ i ++] = d©a [ off£t ]; 411 off£t ++; 414 ià( i =ð Ën ) 415  çl£ ; 417 buf [ i ] = '\0'; 419 cÚ‹xt -> off£t = offset; 421 `Ãxt_f›ld ( cÚ‹xt ); 423  Œue ; 424 } } 426 boÞ $hå_cÚ‹xt_has_Ãxt ( hå_cÚ‹xt * cÚ‹xt ) 428  cÚ‹xt -> d©a [cÚ‹xt-> off£t ] != '\0'; 429 } } 431  $hå_cÚ‹xt_sk_f›ld ( hå_cÚ‹xt * cÚ‹xt ) 433 cÚ¡ * d©a = cÚ‹xt ->data; 434  off£t = cÚ‹xt ->offset; 436  d©a [ off£t ] != '\0' && data[offset] != ',') 437 off£t ++; 439 cÚ‹xt -> off£t = offset; 440 `Ãxt_f›ld ( cÚ‹xt ); 441 } } 443 boÞ $hå_cÚ‹xt_g‘_¿nge ( hå_cÚ‹xt * cÚ‹xt , ušt32_t * mš , 444 ušt32_t * max ) 446 ušt32_t l , h ; 447 ušt32_t ¡¬t ; 449 ¡¬t = cÚ‹xt -> off£t ; 451 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & l )) 452  çžed ; 454 ià( cÚ‹xt -> d©a [cÚ‹xt-> off£t ] != '-') 455  çžed ; 457 cÚ‹xt -> off£t ++; 459 ià(! `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & h )) 460  çžed ; 462 * mš = l ; 463 * max = h ; 465 `Ãxt_f›ld ( cÚ‹xt ); 467  Œue ; 469 çžed : 470 cÚ‹xt -> off£t = ¡¬t ; 471  çl£ ; 472 } } 474  $´oûss_šput ( hå_gw * hå ) 476 * ¡r , * ±r ; 477 size_t Ën , couÁ ; 478 boÞ ä“_±r = çl£ ; 479 boÞ »ad_agaš ; 482 ¡r = `ršgbuf_³ek ( hå -> »ad_buf , 0, & Ën ); 483 ià(! ¡r ) 486 ±r = `memchr ( ¡r , '\r', Ën ); 487 ià(! ±r ) { 488 * ¡r2 ; 489 size_t Ën2 ; 495 ià( Ën =ð `ršgbuf_Ën ( hå -> »ad_buf )) 498 ¡r2 = `ršgbuf_³ek ( hå -> »ad_buf , Ën , & Ën2 ); 499 ià(! ¡r2 ) 502 ±r = `memchr ( ¡r2 , '\r', Ën2 ); 503 ià(! ±r ) 506 * ±r = '\0'; 508 couÁ = Ën2 + Ën ; 509 ±r = `m®loc ( couÁ ); 510 ià(! ±r ) 513 `memýy ( ±r , ¡r , Ën ); 514 `memýy ( ±r + Ën , ¡r2 , Ën2 ); 516 ä“_±r = Œue ; 517 ¡r = ±r ; 519 couÁ = ±r - ¡r ; 520 * ±r = '\0'; 523 ià(! `hªdË_©_commªd ( hå , ¡r )) 529 »ad_agaš = Œue ; 538 »ad_agaš = ! hå -> »suÉ_³ndšg ; 540 `ršgbuf_d¿š ( hå -> »ad_buf , couÁ + 1); 542 ià( ä“_±r ) 543 `ä“ ( ±r ); 545 }  »ad_agaš ); 546 } } 548  $»ad_w©ch_de¡roy (* u£r_d©a ) 550 } } 552  boÞ $ÿn_»ad_d©a ( io *io, * u£r_d©a ) 554  hå_gw * hå = u£r_d©a ; 555 ssize_t by‹s_»ad ; 557 by‹s_»ad = `ršgbuf_»ad ( hå -> »ad_buf , hå-> fd ); 558 ià( by‹s_»ad < 0) 559  çl£ ; 561 ià( hå -> »suÉ_³ndšg ) 562  Œue ; 564 `´oûss_šput ( hå ); 566  Œue ; 567 } } 569  hå_gw * $hå_gw_Ãw ( fd ) 571  hå_gw * hå ; 573 ià( fd < 0) 574  NULL ; 576 hå = `Ãw0 ( hå_gw , 1); 577 ià(! hå ) 578  NULL ; 580 hå -> fd = fd; 581 hå -> þo£_Ú_uÄef = çl£ ; 583 hå -> »ad_buf = `ršgbuf_Ãw (4096); 584 ià(! hå -> »ad_buf ) { 585 `ä“ ( hå ); 586  NULL ; 589 hå -> wr™e_buf = `ršgbuf_Ãw (4096); 590 ià(! hå -> wr™e_buf ) { 591 `ršgbuf_ä“ ( hå -> »ad_buf ); 592 `ä“ ( hå ); 593  NULL ; 596 hå -> io = `io_Ãw ( fd ); 597 ià(! hå -> io ) { 598 `ršgbuf_ä“ ( hå -> wr™e_buf ); 599 `ršgbuf_ä“ ( hå -> »ad_buf ); 600 `ä“ ( hå ); 601  NULL ; 604 hå -> cmd_hªdËrs = `queue_Ãw (); 605 ià(! hå -> cmd_hªdËrs ) { 606 `io_de¡roy ( hå -> io ); 607 `ršgbuf_ä“ ( hå -> wr™e_buf ); 608 `ršgbuf_ä“ ( hå -> »ad_buf ); 609 `ä“ ( hå ); 610  NULL ; 613 ià(! `io_£t_»ad_hªdËr ( hå -> io , ÿn_»ad_d©a , 614 hå , »ad_w©ch_de¡roy )) { 615 `queue_de¡roy ( hå -> cmd_hªdËrs , 616 de¡roy_cmd_hªdËr ); 617 `io_de¡roy ( hå -> io ); 618 `ršgbuf_ä“ ( hå -> wr™e_buf ); 619 `ršgbuf_ä“ ( hå -> »ad_buf ); 620 `ä“ ( hå ); 621  NULL ; 624 hå -> wr™”_aùive = çl£ ; 625 hå -> »suÉ_³ndšg = çl£ ; 627  `hå_gw_»f ( hå ); 628 } } 630  hå_gw * $hå_gw_»f ( hå_gw * hå ) 632 ià(! hå ) 633  NULL ; 635 `__sync_ãtch_ªd_add (& hå -> »f_couÁ , 1); 637  hå ; 638 } } 640  $hå_gw_uÄef ( hå_gw * hå ) 642 ià(! hå ) 645 ià( `__sync_sub_ªd_ãtch (& hå -> »f_couÁ , 1)) 648 `hå_gw_£t_commªd_hªdËr ( hå , NULL , NULL, NULL); 650 `io_£t_wr™e_hªdËr ( hå -> io , NULL , NULL, NULL); 651 `io_£t_»ad_hªdËr ( hå -> io , NULL , NULL, NULL); 652 `io_£t_discÚÃù_hªdËr ( hå -> io , NULL , NULL, NULL); 654 `io_de¡roy ( hå -> io ); 655 hå -> io = NULL ; 657 ià( hå -> þo£_Ú_uÄef ) 658 `þo£ ( hå -> fd ); 660 `hå_gw_£t_debug ( hå , NULL , NULL, NULL); 662 `ršgbuf_ä“ ( hå -> »ad_buf ); 663 hå -> »ad_buf = NULL ; 665 `ršgbuf_ä“ ( hå -> wr™e_buf ); 666 hå -> wr™e_buf = NULL ; 668 `queue_de¡roy ( hå -> cmd_hªdËrs , de¡roy_cmd_hªdËr ); 669 hå -> cmd_hªdËrs = NULL ; 671 ià(! hå -> š_discÚÃù ) { 672 `ä“ ( hå ); 676 hå -> de¡royed = Œue ; 677 } } 679  $»ad_Œacšg (cÚ¡ * buf , size_t couÁ , * u£r_d©a ) 681  hå_gw * hå = u£r_d©a ; 683 `utž_hexdump ('>', buf , couÁ , hå -> debug_ÿÎback , hå-> debug_d©a ); 684 } } 686  $wr™e_Œacšg (cÚ¡ * buf , size_t couÁ , * u£r_d©a ) 688  hå_gw * hå = u£r_d©a ; 690 `utž_hexdump ('<', buf , couÁ , hå -> debug_ÿÎback , hå-> debug_d©a ); 691 } } 693 boÞ $hå_gw_£t_debug ( hå_gw * hå , hå_debug_func_t ÿÎback , 694 * u£r_d©a , hå_de¡roy_func_t de¡roy ) 696 ià(! hå ) 697  çl£ ; 699 ià( hå -> debug_de¡roy ) 700 hå -> `debug_de¡roy (hå-> debug_d©a ); 702 hå -> debug_ÿÎback = ÿÎback ; 703 hå -> debug_de¡roy = de¡roy ; 704 hå -> debug_d©a = u£r_d©a ; 706 ià( hå -> debug_ÿÎback ) { 707 `ršgbuf_£t_šput_Œacšg ( hå -> »ad_buf , »ad_Œacšg , hfp); 708 `ršgbuf_£t_šput_Œacšg ( hå -> wr™e_buf , wr™e_Œacšg , hfp); 710 `ršgbuf_£t_šput_Œacšg ( hå -> »ad_buf , NULL , NULL); 711 `ršgbuf_£t_šput_Œacšg ( hå -> wr™e_buf , NULL , NULL); 714  Œue ; 715 } } 717 boÞ $hå_gw_£t_þo£_Ú_uÄef ( hå_gw * hå , boÞ do_þo£ ) 719 ià(! hå ) 720  çl£ ; 722 hå -> þo£_Ú_uÄef = do_þo£ ; 724  Œue ; 725 } } 727 boÞ $hå_gw_£nd_»suÉ ( hå_gw * hå , hå_»suÉ »suÉ ) 729 cÚ¡ * ¡r ; 731 ià(! hå ) 732  çl£ ; 734  »suÉ ) { 735  HFP_RESULT_OK : 736 ¡r = "OK"; 738  HFP_RESULT_ERROR : 739 ¡r = "ERROR"; 741  HFP_RESULT_RING : 742  HFP_RESULT_NO_CARRIER : 743  HFP_RESULT_BUSY : 744  HFP_RESULT_NO_ANSWER : 745  HFP_RESULT_DELAYED : 746  HFP_RESULT_BLACKLISTED : 747  HFP_RESULT_CME_ERROR : 748  HFP_RESULT_NO_DIALTONE : 749  HFP_RESULT_CONNECT : 751  çl£ ; 754 ià( `ršgbuf_´štf ( hå -> wr™e_buf , "\r\n%s\r\n", ¡r ) < 0) 755  çl£ ; 757 `wakeup_wr™” ( hå ); 763 ià( hå -> »suÉ_³ndšg ) { 764 hå -> »suÉ_³ndšg = çl£ ; 765 `ÿn_»ad_d©a ( hå -> io , hfp); 768  Œue ; 769 } } 771 boÞ $hå_gw_£nd_”rÜ ( hå_gw * hå , hå_”rÜ ”rÜ ) 773 ià(! hå ) 774  çl£ ; 776 ià( `ršgbuf_´štf ( hå -> wr™e_buf , "\r\n+CME ERROR: %u\r\n", ”rÜ ) < 0) 777  çl£ ; 779 `wakeup_wr™” ( hå ); 781 hå -> »suÉ_³ndšg = çl£ ; 783  Œue ; 784 } } 786 boÞ $hå_gw_£nd_šfo ( hå_gw * hå , cÚ¡ * fÜm© , ...) 788 va_li¡ ­ ; 789 * fmt ; 790  Ën ; 792 ià(! hå || ! fÜm© ) 793  çl£ ; 795 ià( `a¥rštf (& fmt , "\r\n%s\r\n", fÜm© ) < 0) 796  çl£ ; 798 `va_¡¬t ( ­ , fÜm© ); 799 Ën = `ršgbuf_v´štf ( hå -> wr™e_buf , fmt , ­ ); 800 `va_’d ( ­ ); 802 `ä“ ( fmt ); 804 ià( Ën < 0) 805  çl£ ; 807 ià( hå -> »suÉ_³ndšg ) 808  Œue ; 810 `wakeup_wr™” ( hå ); 812  Œue ; 813 } } 815 boÞ $hå_gw_£t_commªd_hªdËr ( hå_gw * hå , 816 hå_commªd_func_t ÿÎback , 817 * u£r_d©a , hå_de¡roy_func_t de¡roy ) 819 ià(! hå ) 820  çl£ ; 822 ià( hå -> commªd_de¡roy ) 823 hå -> `commªd_de¡roy (hå-> commªd_d©a ); 825 hå -> commªd_ÿÎback = ÿÎback ; 826 hå -> commªd_de¡roy = de¡roy ; 827 hå -> commªd_d©a = u£r_d©a ; 829  Œue ; 830 } } 832 boÞ $hå_gw_»gi¡” ( hå_gw * hå , hå_»suÉ_func_t ÿÎback , 833 cÚ¡ * ´efix , 834 * u£r_d©a , 835 hå_de¡roy_func_t de¡roy ) 837  cmd_hªdËr * hªdËr ; 839 hªdËr = `Ãw0 ( cmd_hªdËr , 1); 840 ià(! hªdËr ) 841  çl£ ; 843 hªdËr -> ÿÎback = callback; 844 hªdËr -> u£r_d©a = user_data; 846 hªdËr -> ´efix = `¡rdup (prefix); 847 ià(! hªdËr -> ´efix ) { 848 `ä“ ( hªdËr ); 849  çl£ ; 852 ià( `queue_fšd ( hå -> cmd_hªdËrs , m©ch_hªdËr_´efix , 853 hªdËr -> ´efix )) { 854 `de¡roy_cmd_hªdËr ( hªdËr ); 855  çl£ ; 858 hªdËr -> de¡roy = destroy; 860  `queue_push_ž ( hå -> cmd_hªdËrs , hªdËr ); 861 } } 863 boÞ $hå_gw_uÄegi¡” ( hå_gw * hå , cÚ¡ * ´efix ) 865  cmd_hªdËr * hªdËr ; 866 * lookup_´efix ; 868 lookup_´efix = `¡rdup ( ´efix ); 869 ià(! lookup_´efix ) 870  çl£ ; 872 hªdËr = `queue_»move_if ( hå -> cmd_hªdËrs , m©ch_hªdËr_´efix , 873 lookup_´efix ); 874 `ä“ ( lookup_´efix ); 876 ià(! hªdËr ) 877  çl£ ; 879 `de¡roy_cmd_hªdËr ( hªdËr ); 881  Œue ; 882 } } 884  $discÚÃù_w©ch_de¡roy (* u£r_d©a ) 886  hå_gw * hå = u£r_d©a ; 888 ià( hå -> discÚÃù_de¡roy ) 889 hå -> `discÚÃù_de¡roy (hå-> discÚÃù_d©a ); 891 ià( hå -> de¡royed ) 892 `ä“ ( hå ); 893 } } 895  boÞ $io_discÚÃùed ( io *io, * u£r_d©a ) 897  hå_gw * hå = u£r_d©a ; 899 hå -> š_discÚÃù = Œue ; 901 ià( hå -> discÚÃù_ÿÎback ) 902 hå -> `discÚÃù_ÿÎback (hå-> discÚÃù_d©a ); 904 hå -> š_discÚÃù = çl£ ; 906  çl£ ; 907 } } 909 boÞ $hå_gw_£t_discÚÃù_hªdËr ( hå_gw * hå , 910 hå_discÚÃù_func_t ÿÎback , 911 * u£r_d©a , 912 hå_de¡roy_func_t de¡roy ) 914 ià(! hå ) 915  çl£ ; 917 ià( hå -> discÚÃù_de¡roy ) 918 hå -> `discÚÃù_de¡roy (hå-> discÚÃù_d©a ); 920 ià(! `io_£t_discÚÃù_hªdËr ( hå -> io , io_discÚÃùed , hfp, 921 discÚÃù_w©ch_de¡roy )) { 922 hå -> discÚÃù_ÿÎback = NULL ; 923 hå -> discÚÃù_de¡roy = NULL ; 924 hå -> discÚÃù_d©a = NULL ; 925  çl£ ; 928 hå -> discÚÃù_ÿÎback = ÿÎback ; 929 hå -> discÚÃù_de¡roy = de¡roy ; 930 hå -> discÚÃù_d©a = u£r_d©a ; 932  Œue ; 933 } } 935 boÞ $hå_gw_discÚÃù ( hå_gw * hå ) 937 ià(! hå ) 938  çl£ ; 940  `io_shutdown ( hå -> io ); 941 } } 943  boÞ $m©ch_hªdËr_ev’t_´efix (cÚ¡ * a , cÚ¡ * b ) 945 cÚ¡  ev’t_hªdËr * hªdËr = a ; 946 cÚ¡ * ´efix = b ; 948 ià( `¡rcmp ( hªdËr -> ´efix ,…refix) != 0) 949  çl£ ; 951  Œue ; 952 } } 954  $de¡roy_ev’t_hªdËr (* d©a ) 956  ev’t_hªdËr * hªdËr = d©a ; 958 ià( hªdËr -> de¡roy ) 959 hªdËr -> `de¡roy (hªdËr-> u£r_d©a ); 961 `ä“ ( hªdËr -> ´efix ); 963 `ä“ ( hªdËr ); 964 } } 966  boÞ $hf_ÿn_wr™e_d©a ( io *io, * u£r_d©a ) 968  hå_hf * hå = u£r_d©a ; 969 ssize_t by‹s_wr™‹n ; 971 by‹s_wr™‹n = `ršgbuf_wr™e ( hå -> wr™e_buf , hå-> fd ); 972 ià( by‹s_wr™‹n < 0) 973  çl£ ; 975 ià( `ršgbuf_Ën ( hå -> wr™e_buf ) > 0) 976  Œue ; 978  çl£ ; 979 } } 981  $hf_wr™e_w©ch_de¡roy (* u£r_d©a ) 983  hå_hf * hå = u£r_d©a ; 985 hå -> wr™”_aùive = çl£ ; 986 } } 988  $hf_sk_wh™e¥aû ( hå_cÚ‹xt * cÚ‹xt ) 990  cÚ‹xt -> d©a [cÚ‹xt-> off£t ] == ' ') 991 cÚ‹xt -> off£t ++; 992 } } 994  boÞ $is_»¥Ú£ (cÚ¡ * ´efix , hå_»suÉ * »suÉ , 995 hå_”rÜ * cme_”r , 996  hå_cÚ‹xt * cÚ‹xt ) 998 ià( `¡rcmp ( ´efix , "OK") == 0) { 999 * »suÉ = HFP_RESULT_OK ; 1004 * cme_”r = 0; 1005  Œue ; 1008 ià( `¡rcmp ( ´efix , "ERROR") == 0) { 1009 * »suÉ = HFP_RESULT_ERROR ; 1010 * cme_”r = 0; 1011  Œue ; 1014 ià( `¡rcmp ( ´efix , "NO CARRIER") == 0) { 1015 * »suÉ = HFP_RESULT_NO_CARRIER ; 1016 * cme_”r = 0; 1017  Œue ; 1020 ià( `¡rcmp ( ´efix , "NO ANSWER") == 0) { 1021 * »suÉ = HFP_RESULT_NO_ANSWER ; 1022 * cme_”r = 0; 1023  Œue ; 1026 ià( `¡rcmp ( ´efix , "BUSY") == 0) { 1027 * »suÉ = HFP_RESULT_BUSY ; 1028 * cme_”r = 0; 1029  Œue ; 1032 ià( `¡rcmp ( ´efix , "DELAYED") == 0) { 1033 * »suÉ = HFP_RESULT_DELAYED ; 1034 * cme_”r = 0; 1035  Œue ; 1038 ià( `¡rcmp ( ´efix , "BLACKLISTED") == 0) { 1039 * »suÉ = HFP_RESULT_BLACKLISTED ; 1040 * cme_”r = 0; 1041  Œue ; 1044 ià( `¡rcmp ( ´efix , "+CME ERROR") == 0) { 1045 ušt32_t v® ; 1047 * »suÉ = HFP_RESULT_CME_ERROR ; 1049 ià( `hå_cÚ‹xt_g‘_numb” ( cÚ‹xt , & v® ) && 1050 v® <ð HFP_ERROR_NETWORK_NOT_ALLOWED ) 1051 * cme_”r = v® ; 1053 * cme_”r = HFP_ERROR_AG_FAILURE ; 1055  Œue ; 1058  çl£ ; 1059 } } 1061  $hf_wakeup_wr™” ( hå_hf * hå ) 1063 ià( hå -> wr™”_aùive ) 1066 ià(! `ršgbuf_Ën ( hå -> wr™e_buf )) 1069 ià(! `io_£t_wr™e_hªdËr ( hå -> io , hf_ÿn_wr™e_d©a , 1070 hå , hf_wr™e_w©ch_de¡roy )) 1073 hå -> wr™”_aùive = Œue ; 1074 } } 1076  $hf_ÿÎ_´efix_hªdËr ( hå_hf * hå , cÚ¡ * d©a ) 1078  ev’t_hªdËr * hªdËr ; 1079 cÚ¡ * £·¿tÜs = ";:\0"; 1080  hå_cÚ‹xt cÚ‹xt ; 1081 hå_»suÉ »suÉ ; 1082 hå_”rÜ cme_”r ; 1083  lookup_´efix [18]; 1084 ušt8_t ´ef_Ën = 0; 1085 cÚ¡ * ´efix ; 1086  i ; 1088 cÚ‹xt . off£t = 0; 1089 cÚ‹xt . d©a = data; 1091 `hf_sk_wh™e¥aû (& cÚ‹xt ); 1093 ià( `¡¾’ ( d©a + cÚ‹xt . off£t ) < 2) 1096 ´efix = d©a + cÚ‹xt . off£t ; 1098 ´ef_Ën = `¡rc¥n ( ´efix , £·¿tÜs ); 1099 ià( ´ef_Ën > 17 ||…ref_len < 2) 1102  i = 0; i < ´ef_Ën ; i++) 1103 lookup_´efix [ i ] = `touµ” ( ´efix [i]); 1105 lookup_´efix [ ´ef_Ën ] = '\0'; 1106 cÚ‹xt . off£t +ð ´ef_Ën + 1; 1108 ià( `is_»¥Ú£ ( lookup_´efix , & »suÉ , & cme_”r , & cÚ‹xt )) { 1109  cmd_»¥Ú£ * cmd ; 1111 cmd = `queue_³ek_h—d ( hå -> cmd_queue ); 1112 ià(! cmd ) 1115 cmd -> `»¥_cb ( »suÉ , cme_”r , cmd-> u£r_d©a ); 1117 `queue_»move ( hå -> cmd_queue , cmd ); 1118 `ä“ ( cmd ); 1120 `hf_wakeup_wr™” ( hå ); 1124 hªdËr = `queue_fšd ( hå -> ev’t_hªdËrs , m©ch_hªdËr_ev’t_´efix , 1125 lookup_´efix ); 1126 ià(! hªdËr ) 1129 hªdËr -> `ÿÎback (& cÚ‹xt , hªdËr-> u£r_d©a ); 1130 } } 1132 * $fšd_ü_lf (* ¡r , size_t Ën ) 1134 * ±r ; 1135 size_t couÁ , off£t ; 1137 off£t = 0; 1139 ±r = `memchr ( ¡r , '\r', Ën ); 1140  ±r ) { 1145 couÁ = ±r - ¡r ; 1146 ià(( couÁ < ( Ën - 1)è&& *( ±r + 1) == '\n') 1147  ±r ; 1150 off£t +ð couÁ + 1; 1152 ià( off£t >ð Ën ) 1153  NULL ; 1155 ±r = `memchr ( ¡r + off£t , '\r', Ën - offset); 1158  NULL ; 1159 } } 1161  $hf_´oûss_šput ( hå_hf * hå ) 1163 * ¡r , * ±r , * ¡r2 , * tmp ; 1164 size_t Ën , couÁ , off£t , Ën2 ; 1165 boÞ ä“_tmp = çl£ ; 1167 ¡r = `ršgbuf_³ek ( hå -> »ad_buf , 0, & Ën ); 1168 ià(! ¡r ) 1171 off£t = 0; 1173 ±r = `fšd_ü_lf ( ¡r , Ën ); 1174  ±r ) { 1175 couÁ = ±r - ( ¡r + off£t ); 1176 ià( couÁ == 0) { 1178 off£t += 2; 1180 * ±r = '\0'; 1181 `hf_ÿÎ_´efix_hªdËr ( hå , ¡r + off£t ); 1182 off£t +ð couÁ + 2; 1185 ±r = `fšd_ü_lf ( ¡r + off£t , Ën - offset); 1192 ià( Ën =ð `ršgbuf_Ën ( hå -> »ad_buf )) 1193  dÚe ; 1196 ià( ä“_tmp ) 1197  dÚe ; 1199 ¡r2 = `ršgbuf_³ek ( hå -> »ad_buf , Ën , & Ën2 ); 1200 ià(! ¡r2 ) 1201  dÚe ; 1203 ±r = `fšd_ü_lf ( ¡r2 , Ën2 ); 1204 ià(! ±r ) { 1206 ±r = `memchr ( ¡r2 , '\n', Ën2 ); 1207 ià(! ±r ) 1208  dÚe ; 1211 couÁ = ±r - ¡r2 ; 1213 ià( couÁ ) { 1214 * ±r = '\0'; 1216 tmp = `m®loc ( Ën + couÁ ); 1217 ià(! tmp ) 1218  dÚe ; 1221 `memýy ( tmp , ¡r , Ën ); 1222 `memýy ( tmp + Ën , ¡r2 , couÁ ); 1224 ä“_tmp = Œue ; 1226 ¡r [ Ën -1] = '\0'; 1227 tmp = ¡r ; 1230 `hf_ÿÎ_´efix_hªdËr ( hå , tmp ); 1231 off£t +ð couÁ ; 1233 dÚe : 1234 `ršgbuf_d¿š ( hå -> »ad_buf , off£t ); 1236 ià( ä“_tmp ) 1237 `ä“ ( tmp ); 1238 } } 1240  boÞ $hf_ÿn_»ad_d©a ( io *io, * u£r_d©a ) 1242  hå_hf * hå = u£r_d©a ; 1243 ssize_t by‹s_»ad ; 1245 by‹s_»ad = `ršgbuf_»ad ( hå -> »ad_buf , hå-> fd ); 1246 ià( by‹s_»ad < 0) 1247  çl£ ; 1249 `hf_´oûss_šput ( hå ); 1251  Œue ; 1252 } } 1254  hå_hf * $hå_hf_Ãw ( fd ) 1256  hå_hf * hå ; 1258 ià( fd < 0) 1259  NULL ; 1261 hå = `Ãw0 ( hå_hf , 1); 1262 ià(! hå ) 1263  NULL ; 1265 hå -> fd = fd; 1266 hå -> þo£_Ú_uÄef = çl£ ; 1268 hå -> »ad_buf = `ršgbuf_Ãw (4096); 1269 ià(! hå -> »ad_buf ) { 1270 `ä“ ( hå ); 1271  NULL ; 1274 hå -> wr™e_buf = `ršgbuf_Ãw (4096); 1275 ià(! hå -> wr™e_buf ) { 1276 `ršgbuf_ä“ ( hå -> »ad_buf ); 1277 `ä“ ( hå ); 1278  NULL ; 1281 hå -> io = `io_Ãw ( fd ); 1282 ià(! hå -> io ) { 1283 `ršgbuf_ä“ ( hå -> wr™e_buf ); 1284 `ršgbuf_ä“ ( hå -> »ad_buf ); 1285 `ä“ ( hå ); 1286  NULL ; 1289 hå -> ev’t_hªdËrs = `queue_Ãw (); 1290 ià(! hå -> ev’t_hªdËrs ) { 1291 `io_de¡roy ( hå -> io ); 1292 `ršgbuf_ä“ ( hå -> wr™e_buf ); 1293 `ršgbuf_ä“ ( hå -> »ad_buf ); 1294 `ä“ ( hå ); 1295  NULL ; 1298 hå -> cmd_queue = `queue_Ãw (); 1299 ià(! hå -> cmd_queue ) { 1300 `io_de¡roy ( hå -> io ); 1301 `ršgbuf_ä“ ( hå -> wr™e_buf ); 1302 `ršgbuf_ä“ ( hå -> »ad_buf ); 1303 `queue_de¡roy ( hå -> ev’t_hªdËrs , NULL ); 1304 `ä“ ( hå ); 1305  NULL ; 1308 hå -> wr™”_aùive = çl£ ; 1310 ià(! `io_£t_»ad_hªdËr ( hå -> io , hf_ÿn_»ad_d©a , hfp, 1311 »ad_w©ch_de¡roy )) { 1312 `queue_de¡roy ( hå -> ev’t_hªdËrs , 1313 de¡roy_ev’t_hªdËr ); 1314 `io_de¡roy ( hå -> io ); 1315 `ršgbuf_ä“ ( hå -> wr™e_buf ); 1316 `ršgbuf_ä“ ( hå -> »ad_buf ); 1317 `ä“ ( hå ); 1318  NULL ; 1321  `hå_hf_»f ( hå ); 1322 } } 1324  hå_hf * $hå_hf_»f ( hå_hf * hå ) 1326 ià(! hå ) 1327  NULL ; 1329 `__sync_ãtch_ªd_add (& hå -> »f_couÁ , 1); 1331  hå ; 1332 } } 1334  $hå_hf_uÄef ( hå_hf * hå ) 1336 ià(! hå ) 1339 ià( `__sync_sub_ªd_ãtch (& hå -> »f_couÁ , 1)) 1342 `io_£t_wr™e_hªdËr ( hå -> io , NULL , NULL, NULL); 1343 `io_£t_»ad_hªdËr ( hå -> io , NULL , NULL, NULL); 1344 `io_£t_discÚÃù_hªdËr ( hå -> io , NULL , NULL, NULL); 1346 `io_de¡roy ( hå -> io ); 1347 hå -> io = NULL ; 1349 ià( hå -> þo£_Ú_uÄef ) 1350 `þo£ ( hå -> fd ); 1352 `hå_hf_£t_debug ( hå , NULL , NULL, NULL); 1354 `ršgbuf_ä“ ( hå -> »ad_buf ); 1355 hå -> »ad_buf = NULL ; 1357 `ršgbuf_ä“ ( hå -> wr™e_buf ); 1358 hå -> wr™e_buf = NULL ; 1360 `queue_de¡roy ( hå -> ev’t_hªdËrs , de¡roy_ev’t_hªdËr ); 1361 hå -> ev’t_hªdËrs = NULL ; 1363 `queue_de¡roy ( hå -> cmd_queue , ä“ ); 1364 hå -> cmd_queue = NULL ; 1366 ià(! hå -> š_discÚÃù ) { 1367 `ä“ ( hå ); 1371 hå -> de¡royed = Œue ; 1372 } } 1374  $hf_»ad_Œacšg (cÚ¡ * buf , size_t couÁ , 1375 * u£r_d©a ) 1377  hå_hf * hå = u£r_d©a ; 1379 `utž_hexdump ('>', buf , couÁ , hå -> debug_ÿÎback , hå-> debug_d©a ); 1380 } } 1382  $hf_wr™e_Œacšg (cÚ¡ * buf , size_t couÁ , 1383 * u£r_d©a ) 1385  hå_hf * hå = u£r_d©a ; 1387 `utž_hexdump ('<', buf , couÁ , hå -> debug_ÿÎback , hå-> debug_d©a ); 1388 } } 1390 boÞ $hå_hf_£t_debug ( hå_hf * hå , hå_debug_func_t ÿÎback , 1391 * u£r_d©a , hå_de¡roy_func_t de¡roy ) 1393 ià(! hå ) 1394  çl£ ; 1396 ià( hå -> debug_de¡roy ) 1397 hå -> `debug_de¡roy (hå-> debug_d©a ); 1399 hå -> debug_ÿÎback = ÿÎback ; 1400 hå -> debug_de¡roy = de¡roy ; 1401 hå -> debug_d©a = u£r_d©a ; 1403 ià( hå -> debug_ÿÎback ) { 1404 `ršgbuf_£t_šput_Œacšg ( hå -> »ad_buf , hf_»ad_Œacšg , hfp); 1405 `ršgbuf_£t_šput_Œacšg ( hå -> wr™e_buf , hf_wr™e_Œacšg , 1406 hå ); 1408 `ršgbuf_£t_šput_Œacšg ( hå -> »ad_buf , NULL , NULL); 1409 `ršgbuf_£t_šput_Œacšg ( hå -> wr™e_buf , NULL , NULL); 1412  Œue ; 1413 } } 1415 boÞ $hå_hf_£t_þo£_Ú_uÄef ( hå_hf * hå , boÞ do_þo£ ) 1417 ià(! hå ) 1418  çl£ ; 1420 hå -> þo£_Ú_uÄef = do_þo£ ; 1422  Œue ; 1423 } } 1425 boÞ $hå_hf_£nd_commªd ( hå_hf * hå , hå_»¥Ú£_func_t »¥_cb , 1426 * u£r_d©a , cÚ¡ * fÜm© , ...) 1428 va_li¡ ­ ; 1429 * fmt ; 1430  Ën ; 1431  cmd_»¥Ú£ * cmd ; 1433 ià(! hå || ! fÜm© || ! »¥_cb ) 1434  çl£ ; 1436 ià( `a¥rštf (& fmt , "%s\r", fÜm© ) < 0) 1437  çl£ ; 1439 cmd = `Ãw0 ( cmd_»¥Ú£ , 1); 1440 ià(! cmd ) { 1441 `ä“ ( fmt ); 1442  çl£ ; 1445 `va_¡¬t ( ­ , fÜm© ); 1446 Ën = `ršgbuf_v´štf ( hå -> wr™e_buf , fmt , ­ ); 1447 `va_’d ( ­ ); 1449 `ä“ ( fmt ); 1451 ià( Ën < 0) { 1452 `ä“ ( cmd ); 1453  çl£ ; 1456 cmd -> »¥_cb =„esp_cb; 1457 cmd -> u£r_d©a = user_data; 1459 ià(! `queue_push_ž ( hå -> cmd_queue , cmd )) { 1460 `ršgbuf_d¿š ( hå -> wr™e_buf , Ën ); 1461 `ä“ ( cmd ); 1462  çl£ ; 1465 `hf_wakeup_wr™” ( hå ); 1467  Œue ; 1468 } } 1470 boÞ $hå_hf_»gi¡” ( hå_hf * hå , hå_hf_»suÉ_func_t ÿÎback , 1471 cÚ¡ * ´efix , 1472 * u£r_d©a , 1473 hå_de¡roy_func_t de¡roy ) 1475  ev’t_hªdËr * hªdËr ; 1477 ià(! ÿÎback ) 1478  çl£ ; 1480 hªdËr = `Ãw0 ( ev’t_hªdËr , 1); 1481 ià(! hªdËr ) 1482  çl£ ; 1484 hªdËr -> ÿÎback = callback; 1485 hªdËr -> u£r_d©a = user_data; 1487 hªdËr -> ´efix = `¡rdup (prefix); 1488 ià(! hªdËr -> ´efix ) { 1489 `ä“ ( hªdËr ); 1490  çl£ ; 1493 ià( `queue_fšd ( hå -> ev’t_hªdËrs , m©ch_hªdËr_ev’t_´efix , 1494 hªdËr -> ´efix )) { 1495 `de¡roy_ev’t_hªdËr ( hªdËr ); 1496  çl£ ; 1499 hªdËr -> de¡roy = destroy; 1501  `queue_push_ž ( hå -> ev’t_hªdËrs , hªdËr ); 1502 } } 1504 boÞ $hå_hf_uÄegi¡” ( hå_hf * hå , cÚ¡ * ´efix ) 1506  cmd_hªdËr * hªdËr ; 1509 hªdËr = `queue_»move_if ( hå -> ev’t_hªdËrs , 1510 m©ch_hªdËr_ev’t_´efix , 1511 (*è ´efix ); 1513 ià(! hªdËr ) 1514  çl£ ; 1516 `de¡roy_ev’t_hªdËr ( hªdËr ); 1518  Œue ; 1519 } } 1521  $hf_discÚÃù_w©ch_de¡roy (* u£r_d©a ) 1523  hå_hf * hå = u£r_d©a ; 1525 ià( hå -> discÚÃù_de¡roy ) 1526 hå -> `discÚÃù_de¡roy (hå-> discÚÃù_d©a ); 1528 ià( hå -> de¡royed ) 1529 `ä“ ( hå ); 1530 } } 1532  boÞ $hf_io_discÚÃùed ( io *io, * u£r_d©a ) 1534  hå_hf * hå = u£r_d©a ; 1536 hå -> š_discÚÃù = Œue ; 1538 ià( hå -> discÚÃù_ÿÎback ) 1539 hå -> `discÚÃù_ÿÎback (hå-> discÚÃù_d©a ); 1541 hå -> š_discÚÃù = çl£ ; 1543  çl£ ; 1544 } } 1546 boÞ $hå_hf_£t_discÚÃù_hªdËr ( hå_hf * hå , 1547 hå_discÚÃù_func_t ÿÎback , 1548 * u£r_d©a , 1549 hå_de¡roy_func_t de¡roy ) 1551 ià(! hå ) 1552  çl£ ; 1554 ià( hå -> discÚÃù_de¡roy ) 1555 hå -> `discÚÃù_de¡roy (hå-> discÚÃù_d©a ); 1557 ià(! `io_£t_discÚÃù_hªdËr ( hå -> io , hf_io_discÚÃùed , hfp, 1558 hf_discÚÃù_w©ch_de¡roy )) { 1559 hå -> discÚÃù_ÿÎback = NULL ; 1560 hå -> discÚÃù_de¡roy = NULL ; 1561 hå -> discÚÃù_d©a = NULL ; 1562  çl£ ; 1565 hå -> discÚÃù_ÿÎback = ÿÎback ; 1566 hå -> discÚÃù_de¡roy = de¡roy ; 1567 hå -> discÚÃù_d©a = u£r_d©a ; 1569  Œue ; 1570 } } 1572 boÞ $hå_hf_discÚÃù ( hå_hf * hå ) 1574 ià(! hå ) 1575  çl£ ; 1577  `io_shutdown ( hå -> io ); 1578 } } @src/shared/hfp.h 24  ~<¡dboÞ.h > 26 ehå_»suÉ { 27 mHFP_RESULT_OK = 0, 28 mHFP_RESULT_CONNECT = 1, 29 mHFP_RESULT_RING = 2, 30 mHFP_RESULT_NO_CARRIER = 3, 31 mHFP_RESULT_ERROR = 4, 32 mHFP_RESULT_NO_DIALTONE = 6, 33 mHFP_RESULT_BUSY = 7, 34 mHFP_RESULT_NO_ANSWER = 8, 35 mHFP_RESULT_DELAYED = 9, 36 mHFP_RESULT_BLACKLISTED = 10, 37 mHFP_RESULT_CME_ERROR = 11, 40 ehå_”rÜ { 41 mHFP_ERROR_AG_FAILURE = 0, 42 mHFP_ERROR_NO_CONNECTION_TO_PHONE = 1, 43 mHFP_ERROR_OPERATION_NOT_ALLOWED = 3, 44 mHFP_ERROR_OPERATION_NOT_SUPPORTED = 4, 45 mHFP_ERROR_PH_SIM_PIN_REQUIRED = 5, 46 mHFP_ERROR_SIM_NOT_INSERTED = 10, 47 mHFP_ERROR_SIM_PIN_REQUIRED = 11, 48 mHFP_ERROR_SIM_PUK_REQUIRED = 12, 49 mHFP_ERROR_SIM_FAILURE = 13, 50 mHFP_ERROR_SIM_BUSY = 14, 51 mHFP_ERROR_INCORRECT_PASSWORD = 16, 52 mHFP_ERROR_SIM_PIN2_REQUIRED = 17, 53 mHFP_ERROR_SIM_PUK2_REQUIRED = 18, 54 mHFP_ERROR_MEMORY_FULL = 20, 55 mHFP_ERROR_INVALID_INDEX = 21, 56 mHFP_ERROR_MEMORY_FAILURE = 23, 57 mHFP_ERROR_TEXT_STRING_TOO_LONG = 24, 58 mHFP_ERROR_INVALID_CHARS_IN_TEXT_STRING = 25, 59 mHFP_ERROR_DIAL_STRING_TO_LONG = 26, 60 mHFP_ERROR_INVALID_CHARS_IN_DIAL_STRING = 27, 61 mHFP_ERROR_NO_NETWORK_SERVICE = 30, 62 mHFP_ERROR_NETWORK_TIMEOUT = 31, 63 mHFP_ERROR_NETWORK_NOT_ALLOWED = 32, 66 ehå_gw_cmd_ty³ { 67 mHFP_GW_CMD_TYPE_READ , 68 mHFP_GW_CMD_TYPE_SET , 69 mHFP_GW_CMD_TYPE_TEST , 70 mHFP_GW_CMD_TYPE_COMMAND 73  ghå_cÚ‹xt ; 75 (* thå_»suÉ_func_t )( thå_cÚ‹xt * tcÚ‹xt , 76 thå_gw_cmd_ty³ tty³ , * tu£r_d©a ); 78 (* thå_de¡roy_func_t )(* tu£r_d©a ); 79 (* thå_debug_func_t )(cÚ¡ * t¡r , * tu£r_d©a ); 81 (* thå_commªd_func_t )(cÚ¡ * tcommªd , * tu£r_d©a ); 82 (* thå_discÚÃù_func_t )(* tu£r_d©a ); 84  hå_gw ; 86  hå_gw * `hå_gw_Ãw ( fd ); 88  hå_gw * `hå_gw_»f (hå_gw * hå ); 89  `hå_gw_uÄef ( hå_gw * hå ); 91 boÞ `hå_gw_£t_debug ( hå_gw * hå , hå_debug_func_t ÿÎback , 92 * u£r_d©a , hå_de¡roy_func_t de¡roy ); 94 boÞ `hå_gw_£t_þo£_Ú_uÄef ( hå_gw * hå , boÞ do_þo£ ); 95 boÞ `hå_gw_£t_³rmissive_syÁax ( hå_gw * hå , boÞ ³rmissive ); 97 boÞ `hå_gw_£nd_»suÉ ( hå_gw * hå , hå_»suÉ »suÉ ); 98 boÞ `hå_gw_£nd_”rÜ ( hå_gw * hå , hå_”rÜ ”rÜ ); 99 boÞ $hå_gw_£nd_šfo ( hå_gw * hå , cÚ¡ * fÜm© , ...) 100 `__©Œibu‹__ (( `fÜm© ( ´štf , 2, 3))); 102 boÞ `hå_gw_£t_commªd_hªdËr ( hå_gw * hå , 103 hå_commªd_func_t ÿÎback , 104 * u£r_d©a , hå_de¡roy_func_t de¡roy ); 106 boÞ `hå_gw_£t_discÚÃù_hªdËr ( hå_gw * hå , 107 hå_discÚÃù_func_t ÿÎback , 108 * u£r_d©a , 109 hå_de¡roy_func_t de¡roy ); 111 boÞ `hå_gw_discÚÃù ( hå_gw * hå ); 113 boÞ `hå_gw_»gi¡” ( hå_gw * hå , hå_»suÉ_func_t ÿÎback , 114 cÚ¡ * ´efix , 115 * u£r_d©a , 116 hå_de¡roy_func_t de¡roy ); 117 boÞ `hå_gw_uÄegi¡” ( hå_gw * hå , cÚ¡ * ´efix ); 119 boÞ `hå_cÚ‹xt_g‘_numb” ( hå_cÚ‹xt * cÚ‹xt , 120 * v® ); 121 boÞ `hå_cÚ‹xt_g‘_numb”_deçuÉ ( hå_cÚ‹xt * cÚ‹xt , 122 * v® , 123  deçuÉ_v® ); 124 boÞ `hå_cÚ‹xt_Ý’_cÚš” ( hå_cÚ‹xt * cÚ‹xt ); 125 boÞ `hå_cÚ‹xt_þo£_cÚš” ( hå_cÚ‹xt * cÚ‹xt ); 126 boÞ `hå_cÚ‹xt_g‘_¡ršg ( hå_cÚ‹xt * cÚ‹xt , * buf , 127 ušt8_t Ën ); 128 boÞ `hå_cÚ‹xt_g‘_unquÙed_¡ršg ( hå_cÚ‹xt * cÚ‹xt , 129 * buf , ušt8_t Ën ); 130 boÞ `hå_cÚ‹xt_g‘_¿nge ( hå_cÚ‹xt * cÚ‹xt , * mš , 131 * max ); 132 boÞ `hå_cÚ‹xt_has_Ãxt ( hå_cÚ‹xt * cÚ‹xt ); 133  `hå_cÚ‹xt_sk_f›ld ( hå_cÚ‹xt * cÚ‹xt ); 135 (* thå_hf_»suÉ_func_t )( thå_cÚ‹xt * tcÚ‹xt , 136 * tu£r_d©a ); 138 (* thå_»¥Ú£_func_t )( thå_»suÉ t»suÉ , 139 thå_”rÜ tcme_”r , 140 * tu£r_d©a ); 142  hå_hf ; 144  hå_hf * `hå_hf_Ãw ( fd ); 146  hå_hf * `hå_hf_»f (hå_hà* hå ); 147  `hå_hf_uÄef ( hå_hf * hå ); 148 boÞ `hå_hf_£t_debug ( hå_hf * hå , hå_debug_func_t ÿÎback , 149 * u£r_d©a , hå_de¡roy_func_t de¡roy ); 150 boÞ `hå_hf_£t_þo£_Ú_uÄef ( hå_hf * hå , boÞ do_þo£ ); 151 boÞ `hå_hf_£t_discÚÃù_hªdËr ( hå_hf * hå , 152 hå_discÚÃù_func_t ÿÎback , 153 * u£r_d©a , 154 hå_de¡roy_func_t de¡roy ); 155 boÞ `hå_hf_discÚÃù ( hå_hf * hå ); 156 boÞ `hå_hf_»gi¡” ( hå_hf * hå , hå_hf_»suÉ_func_t ÿÎback , 157 cÚ¡ * ´efix , * u£r_d©a , 158 hå_de¡roy_func_t de¡roy ); 159 boÞ `hå_hf_uÄegi¡” ( hå_hf * hå , cÚ¡ * ´efix ); 160 boÞ `hå_hf_£nd_commªd ( hå_hf * hå , hå_»¥Ú£_func_t »¥_cb , 161 * u£r_d©a , cÚ¡ * fÜm© , ...); @src/shared/io-glib.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<”ºo.h > 30  ~ 32  ~"¤c/sh¬ed/io.h " 34  sio_w©ch { 35  io * mio ; 36 gušt mid ; 37 io_ÿÎback_func_t mÿÎback ; 38 io_de¡roy_func_t mde¡roy ; 39 * mu£r_d©a ; 42  sio { 43  m»f_couÁ ; 44 GIOChªÃl * mchªÃl ; 45  io_w©ch * m»ad_w©ch ; 46  io_w©ch * mwr™e_w©ch ; 47  io_w©ch * mdiscÚÃù_w©ch ; 50  io * $io_»f ( io *io) 52 ià(! io ) 53  NULL ; 55 `__sync_ãtch_ªd_add (& io -> »f_couÁ , 1); 57  io ; 58 } } 60  $io_uÄef ( io *io) 62 ià(! io ) 65 ià( `__sync_sub_ªd_ãtch (& io -> »f_couÁ , 1)) 68 `g_ä“ ( io ); 69 } } 71  io * $io_Ãw ( fd ) 73  io *io; 75 ià( fd < 0) 76  NULL ; 78 io = `g_Œy_Ãw0 (io, 1); 79 ià(! io ) 80  NULL ; 82 io -> chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 84 `g_io_chªÃl_£t_’codšg ( io -> chªÃl , NULL , NULL); 85 `g_io_chªÃl_£t_bufã»d ( io -> chªÃl , FALSE ); 87 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io -> chªÃl , FALSE ); 89  `io_»f ( io ); 90 } } 92  $w©ch_de¡roy (* u£r_d©a ) 94  io_w©ch * w©ch = u£r_d©a ; 95  io *iØð w©ch ->io; 97 ià( w©ch =ð io -> »ad_w©ch ) 98 io -> »ad_w©ch = NULL ; 99 ià( w©ch =ð io -> wr™e_w©ch ) 100 io -> wr™e_w©ch = NULL ; 101 ià( w©ch =ð io -> discÚÃù_w©ch ) 102 io -> discÚÃù_w©ch = NULL ; 104 ià( w©ch -> de¡roy ) 105 w©ch -> `de¡roy (w©ch-> u£r_d©a ); 107 `io_uÄef ( w©ch -> io ); 108 `g_ä“ ( w©ch ); 109 } } 111  $io_de¡roy ( io *io) 113 ià(! io ) 116 ià( io -> »ad_w©ch ) { 117 `g_sourû_»move ( io -> »ad_w©ch -> id ); 118 io -> »ad_w©ch = NULL ; 121 ià( io -> wr™e_w©ch ) { 122 `g_sourû_»move ( io -> wr™e_w©ch -> id ); 123 io -> wr™e_w©ch = NULL ; 126 ià( io -> discÚÃù_w©ch ) { 127 `g_sourû_»move ( io -> discÚÃù_w©ch -> id ); 128 io -> discÚÃù_w©ch = NULL ; 131 `g_io_chªÃl_uÄef ( io -> chªÃl ); 132 io -> chªÃl = NULL ; 134 `io_uÄef ( io ); 135 } } 137  $io_g‘_fd ( io *io) 139 ià(! io ) 140  - ENOTCONN ; 142  `g_io_chªÃl_unix_g‘_fd ( io -> chªÃl ); 143 } } 145 boÞ $io_£t_þo£_Ú_de¡roy ( io *io, boÞ do_þo£ ) 147 ià(! io ) 148  çl£ ; 150 ià( do_þo£ ) 151 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io -> chªÃl , TRUE ); 153 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io -> chªÃl , FALSE ); 155  Œue ; 156 } } 158  gboÞ—n $w©ch_ÿÎback ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 159 gpoš‹r u£r_d©a ) 161  io_w©ch * w©ch = u£r_d©a ; 162 boÞ »suÉ , de¡roy ; 164 de¡roy = w©ch =ðw©ch-> io -> discÚÃù_w©ch ; 166 ià(! de¡roy && ( cÚd & ( G_IO_ERR | G_IO_NVAL ))) 167  FALSE ; 169 ià( w©ch -> ÿÎback ) 170 »suÉ = w©ch -> `ÿÎback (w©ch-> io , w©ch-> u£r_d©a ); 172 »suÉ = çl£ ; 174  »suÉ ? TRUE : FALSE ; 175 } } 177  io_w©ch * $w©ch_Ãw ( io *io, GIOCÚd™iÚ cÚd , 178 io_ÿÎback_func_t ÿÎback , * u£r_d©a , 179 io_de¡roy_func_t de¡roy ) 181  io_w©ch * w©ch ; 183 w©ch = `g_Œy_Ãw0 ( io_w©ch , 1); 184 ià(! w©ch ) 185  NULL ; 187 w©ch -> io = `io_»f (io); 188 w©ch -> ÿÎback = callback; 189 w©ch -> de¡roy = destroy; 190 w©ch -> u£r_d©a = user_data; 192 w©ch -> id = `g_io_add_w©ch_fuÎ ( io -> chªÃl , G_PRIORITY_DEFAULT , 193 cÚd | G_IO_ERR | G_IO_NVAL , 194 w©ch_ÿÎback , w©ch , 195 w©ch_de¡roy ); 196 ià( w©ch -> id == 0) { 197 `w©ch_de¡roy ( w©ch ); 198  NULL ; 201  w©ch ; 202 } } 204  boÞ $io_£t_hªdËr ( io *io, GIOCÚd™iÚ cÚd , 205 io_ÿÎback_func_t ÿÎback , * u£r_d©a , 206 io_de¡roy_func_t de¡roy ) 208  io_w©ch ** w©ch ; 210 ià(! io ) 211  çl£ ; 213  cÚd ) { 214  G_IO_IN : 215 w©ch = & io -> »ad_w©ch ; 217  G_IO_OUT : 218 w©ch = & io -> wr™e_w©ch ; 220  G_IO_HUP : 221 w©ch = & io -> discÚÃù_w©ch ; 223  G_IO_PRI : 224  G_IO_ERR : 225  G_IO_NVAL : 227  çl£ ; 230 ià(* w©ch ) { 231 `g_sourû_»move ((* w©ch )-> id ); 232 * w©ch = NULL ; 235 ià(! ÿÎback ) 236  Œue ; 238 * w©ch = `w©ch_Ãw ( io , cÚd , ÿÎback , u£r_d©a , de¡roy ); 239 ià(!* w©ch ) 240  çl£ ; 242  Œue ; 243 } } 245 boÞ $io_£t_»ad_hªdËr ( io *io, io_ÿÎback_func_t ÿÎback , 246 * u£r_d©a , io_de¡roy_func_t de¡roy ) 248  `io_£t_hªdËr ( io , G_IO_IN , ÿÎback , u£r_d©a , de¡roy ); 249 } } 251 boÞ $io_£t_wr™e_hªdËr ( io *io, io_ÿÎback_func_t ÿÎback , 252 * u£r_d©a , io_de¡roy_func_t de¡roy ) 254  `io_£t_hªdËr ( io , G_IO_OUT , ÿÎback , u£r_d©a , de¡roy ); 255 } } 257 boÞ $io_£t_discÚÃù_hªdËr ( io *io, io_ÿÎback_func_t ÿÎback , 258 * u£r_d©a , io_de¡roy_func_t de¡roy ) 260  `io_£t_hªdËr ( io , G_IO_HUP , ÿÎback , u£r_d©a , de¡roy ); 261 } } 263 ssize_t $io_£nd ( io *io, cÚ¡  iovec * iov ,  iovút ) 265  fd ; 266 ssize_t »t ; 268 ià(! io || !io-> chªÃl ) 269  - ENOTCONN ; 271 fd = `io_g‘_fd ( io ); 274 »t = `wr™ev ( fd , iov , iovút ); 275 }  »t < 0 && ”ºo =ð EINTR ); 277 ià( »t < 0) 278  - ”ºo ; 280  »t ; 281 } } 283 boÞ $io_shutdown ( io *io) 285 ià(! io || !io-> chªÃl ) 286  çl£ ; 288  `g_io_chªÃl_shutdown ( io -> chªÃl , TRUE , NULL ) 289 =ð G_IO_STATUS_NORMAL ; 290 } } @src/shared/io-mainloop.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~<”ºo.h > 30  ~ 32  ~"mÚ™Ü/mašloÝ.h " 33  ~"¤c/sh¬ed/utž.h " 34  ~"¤c/sh¬ed/io.h " 36  sio { 37  m»f_couÁ ; 38  mfd ; 39 ušt32_t mev’ts ; 40 boÞ mþo£_Ú_de¡roy ; 41 io_ÿÎback_func_t m»ad_ÿÎback ; 42 io_de¡roy_func_t m»ad_de¡roy ; 43 * m»ad_d©a ; 44 io_ÿÎback_func_t mwr™e_ÿÎback ; 45 io_de¡roy_func_t mwr™e_de¡roy ; 46 * mwr™e_d©a ; 47 io_ÿÎback_func_t mdiscÚÃù_ÿÎback ; 48 io_de¡roy_func_t mdiscÚÃù_de¡roy ; 49 * mdiscÚÃù_d©a ; 52  io * $io_»f ( io *io) 54 ià(! io ) 55  NULL ; 57 `__sync_ãtch_ªd_add (& io -> »f_couÁ , 1); 59  io ; 60 } } 62  $io_uÄef ( io *io) 64 ià(! io ) 67 ià( `__sync_sub_ªd_ãtch (& io -> »f_couÁ , 1)) 70 `ä“ ( io ); 71 } } 73  $io_þ—nup (* u£r_d©a ) 75  io *iØð u£r_d©a ; 77 ià( io -> wr™e_de¡roy ) 78 io -> `wr™e_de¡roy (io-> wr™e_d©a ); 80 ià( io -> »ad_de¡roy ) 81 io -> `»ad_de¡roy (io-> »ad_d©a ); 83 ià( io -> discÚÃù_de¡roy ) 84 io -> `discÚÃù_de¡roy (io-> discÚÃù_d©a ); 86 ià( io -> þo£_Ú_de¡roy ) 87 `þo£ ( io -> fd ); 89 io -> fd = -1; 90 } } 92  $io_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 94  io *iØð u£r_d©a ; 96 `io_»f ( io ); 98 ià(( ev’ts & ( EPOLLRDHUP | EPOLLHUP | EPOLLERR ))) { 99 io -> »ad_ÿÎback = NULL ; 100 io -> wr™e_ÿÎback = NULL ; 102 ià(! io -> discÚÃù_ÿÎback ) { 103 `mašloÝ_»move_fd ( io -> fd ); 104 `io_uÄef ( io ); 108 ià(! io -> `discÚÃù_ÿÎback (io, io-> discÚÃù_d©a )) { 109 ià( io -> discÚÃù_de¡roy ) 110 io -> `discÚÃù_de¡roy (io-> discÚÃù_d©a ); 112 io -> discÚÃù_ÿÎback = NULL ; 113 io -> discÚÃù_de¡roy = NULL ; 114 io -> discÚÃù_d©a = NULL ; 116 io -> ev’ts &ð~ EPOLLRDHUP ; 118 `mašloÝ_modify_fd ( io -> fd , io-> ev’ts ); 122 ià(( ev’ts & EPOLLIN è&& io -> »ad_ÿÎback ) { 123 ià(! io -> `»ad_ÿÎback (io, io-> »ad_d©a )) { 124 ià( io -> »ad_de¡roy ) 125 io -> `»ad_de¡roy (io-> »ad_d©a ); 127 io -> »ad_ÿÎback = NULL ; 128 io -> »ad_de¡roy = NULL ; 129 io -> »ad_d©a = NULL ; 131 io -> ev’ts &ð~ EPOLLIN ; 133 `mašloÝ_modify_fd ( io -> fd , io-> ev’ts ); 137 ià(( ev’ts & EPOLLOUT è&& io -> wr™e_ÿÎback ) { 138 ià(! io -> `wr™e_ÿÎback (io, io-> wr™e_d©a )) { 139 ià( io -> wr™e_de¡roy ) 140 io -> `wr™e_de¡roy (io-> wr™e_d©a ); 142 io -> wr™e_ÿÎback = NULL ; 143 io -> wr™e_de¡roy = NULL ; 144 io -> wr™e_d©a = NULL ; 146 io -> ev’ts &ð~ EPOLLOUT ; 148 `mašloÝ_modify_fd ( io -> fd , io-> ev’ts ); 152 `io_uÄef ( io ); 153 } } 155  io * $io_Ãw ( fd ) 157  io *io; 159 ià( fd < 0) 160  NULL ; 162 io = `Ãw0 (io, 1); 163 ià(! io ) 164  NULL ; 166 io -> fd = fd; 167 io -> ev’ts = 0; 168 io -> þo£_Ú_de¡roy = çl£ ; 170 ià( `mašloÝ_add_fd ( io -> fd , io-> ev’ts , io_ÿÎback , 171 io , io_þ—nup ) < 0) { 172 `ä“ ( io ); 173  NULL ; 176  `io_»f ( io ); 177 } } 179  $io_de¡roy ( io *io) 181 ià(! io ) 184 io -> »ad_ÿÎback = NULL ; 185 io -> wr™e_ÿÎback = NULL ; 186 io -> discÚÃù_ÿÎback = NULL ; 188 `mašloÝ_»move_fd ( io -> fd ); 190 `io_uÄef ( io ); 191 } } 193  $io_g‘_fd ( io *io) 195 ià(! io ) 196  - ENOTCONN ; 198  io -> fd ; 199 } } 201 boÞ $io_£t_þo£_Ú_de¡roy ( io *io, boÞ do_þo£ ) 203 ià(! io ) 204  çl£ ; 206 io -> þo£_Ú_de¡roy = do_þo£ ; 208  Œue ; 209 } } 211 boÞ $io_£t_»ad_hªdËr ( io *io, io_ÿÎback_func_t ÿÎback , 212 * u£r_d©a , io_de¡roy_func_t de¡roy ) 214 ušt32_t ev’ts ; 216 ià(! io || io-> fd < 0) 217  çl£ ; 219 ià( io -> »ad_de¡roy ) 220 io -> `»ad_de¡roy (io-> »ad_d©a ); 222 ià( ÿÎback ) 223 ev’ts = io ->ev’t | EPOLLIN ; 225 ev’ts = io ->ev’t & ~ EPOLLIN ; 227 io -> »ad_ÿÎback = ÿÎback ; 228 io -> »ad_de¡roy = de¡roy ; 229 io -> »ad_d©a = u£r_d©a ; 231 ià( ev’ts =ð io ->events) 232  Œue ; 234 ià( `mašloÝ_modify_fd ( io -> fd , ev’ts ) < 0) 235  çl£ ; 237 io -> ev’ts =ƒvents; 239  Œue ; 240 } } 242 boÞ $io_£t_wr™e_hªdËr ( io *io, io_ÿÎback_func_t ÿÎback , 243 * u£r_d©a , io_de¡roy_func_t de¡roy ) 245 ušt32_t ev’ts ; 247 ià(! io || io-> fd < 0) 248  çl£ ; 250 ià( io -> wr™e_de¡roy ) 251 io -> `wr™e_de¡roy (io-> wr™e_d©a ); 253 ià( ÿÎback ) 254 ev’ts = io ->ev’t | EPOLLOUT ; 256 ev’ts = io ->ev’t & ~ EPOLLOUT ; 258 io -> wr™e_ÿÎback = ÿÎback ; 259 io -> wr™e_de¡roy = de¡roy ; 260 io -> wr™e_d©a = u£r_d©a ; 262 ià( ev’ts =ð io ->events) 263  Œue ; 265 ià( `mašloÝ_modify_fd ( io -> fd , ev’ts ) < 0) 266  çl£ ; 268 io -> ev’ts =ƒvents; 270  Œue ; 271 } } 273 boÞ $io_£t_discÚÃù_hªdËr ( io *io, io_ÿÎback_func_t ÿÎback , 274 * u£r_d©a , io_de¡roy_func_t de¡roy ) 276 ušt32_t ev’ts ; 278 ià(! io || io-> fd < 0) 279  çl£ ; 281 ià( io -> discÚÃù_de¡roy ) 282 io -> `discÚÃù_de¡roy (io-> discÚÃù_d©a ); 284 ià( ÿÎback ) 285 ev’ts = io ->ev’t | EPOLLRDHUP ; 287 ev’ts = io ->ev’t & ~ EPOLLRDHUP ; 289 io -> discÚÃù_ÿÎback = ÿÎback ; 290 io -> discÚÃù_de¡roy = de¡roy ; 291 io -> discÚÃù_d©a = u£r_d©a ; 293 ià( ev’ts =ð io ->events) 294  Œue ; 296 ià( `mašloÝ_modify_fd ( io -> fd , ev’ts ) < 0) 297  çl£ ; 299 io -> ev’ts =ƒvents; 301  Œue ; 302 } } 304 ssize_t $io_£nd ( io *io, cÚ¡  iovec * iov ,  iovút ) 306 ssize_t »t ; 308 ià(! io || io-> fd < 0) 309  - ENOTCONN ; 312 »t = `wr™ev ( io -> fd , iov , iovút ); 313 }  »t < 0 && ”ºo =ð EINTR ); 315 ià( »t < 0) 316  - ”ºo ; 318  »t ; 319 } } 321 boÞ $io_shutdown ( io *io) 323 ià(! io || io-> fd < 0) 324  çl£ ; 326  `shutdown ( io -> fd , SHUT_RDWR ) == 0; 327 } } @src/shared/io.h 24  ~<¡dboÞ.h > 25  ~ 27 (* tio_de¡roy_func_t )(* td©a ); 29  io ; 31  io * `io_Ãw ( fd ); 32  `io_de¡roy ( io *io); 34  `io_g‘_fd ( io *io); 35 boÞ `io_£t_þo£_Ú_de¡roy ( io *io, boÞ do_þo£ ); 37 ssize_t `io_£nd ( io *io, cÚ¡  iovec * iov ,  iovút ); 38 boÞ `io_shutdown ( io *io); 40  $boÞ (* tio_ÿÎback_func_t )( tio *io, * tu£r_d©a ); 42 boÞ `io_£t_»ad_hªdËr ( io *io, io_ÿÎback_func_t ÿÎback , 43 * u£r_d©a , io_de¡roy_func_t de¡roy ); 44 boÞ `io_£t_wr™e_hªdËr ( io *io, io_ÿÎback_func_t ÿÎback , 45 * u£r_d©a , io_de¡roy_func_t de¡roy ); 46 boÞ `io_£t_discÚÃù_hªdËr ( io *io, io_ÿÎback_func_t ÿÎback , 47 * u£r_d©a , io_de¡roy_func_t de¡roy ); @src/shared/mgmt.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~ 30  ~<¡ršg.h > 31  ~<”ºo.h > 33  ~"lib/blu‘oÙh.h " 34  ~"lib/mgmt.h " 35  ~"lib/hci.h " 37  ~"¤c/sh¬ed/io.h " 38  ~"¤c/sh¬ed/queue.h " 39  ~"¤c/sh¬ed/utž.h " 40  ~"¤c/sh¬ed/mgmt.h " 42  smgmt { 43  m»f_couÁ ; 44  mfd ; 45 boÞ mþo£_Ú_uÄef ; 46  io * mio ; 47 boÞ mwr™”_aùive ; 48  queue * m»que¡_queue ; 49  queue * m»¶y_queue ; 50  queue * m³ndšg_li¡ ; 51  queue * mnÙify_li¡ ; 52  mÃxt_»que¡_id ; 53  mÃxt_nÙify_id ; 54 * mbuf ; 55 ušt16_t mËn ; 56 mgmt_debug_func_t mdebug_ÿÎback ; 57 mgmt_de¡roy_func_t mdebug_de¡roy ; 58 * mdebug_d©a ; 61  smgmt_»que¡ { 62  mid ; 63 ušt16_t mÝcode ; 64 ušt16_t mšdex ; 65 * mbuf ; 66 ušt16_t mËn ; 67 mgmt_»que¡_func_t mÿÎback ; 68 mgmt_de¡roy_func_t mde¡roy ; 69 * mu£r_d©a ; 72  smgmt_nÙify { 73  mid ; 74 ušt16_t mev’t ; 75 ušt16_t mšdex ; 76 mgmt_nÙify_func_t mÿÎback ; 77 mgmt_de¡roy_func_t mde¡roy ; 78 * mu£r_d©a ; 81  $de¡roy_»que¡ (* d©a ) 83  mgmt_»que¡ * »que¡ = d©a ; 85 ià( »que¡ -> de¡roy ) 86 »que¡ -> `de¡roy Ôeque¡-> u£r_d©a ); 88 `ä“ ( »que¡ -> buf ); 89 `ä“ ( »que¡ ); 90 } } 92  boÞ $m©ch_»que¡_id (cÚ¡ * a , cÚ¡ * b ) 94 cÚ¡  mgmt_»que¡ * »que¡ = a ; 95  id = `PTR_TO_UINT ( b ); 97  »que¡ -> id == id; 98 } } 100  boÞ $m©ch_»que¡_šdex (cÚ¡ * a , cÚ¡ * b ) 102 cÚ¡  mgmt_»que¡ * »que¡ = a ; 103 ušt16_t šdex = `PTR_TO_UINT ( b ); 105  »que¡ -> šdex == index; 106 } } 108  $de¡roy_nÙify (* d©a ) 110  mgmt_nÙify * nÙify = d©a ; 112 ià( nÙify -> de¡roy ) 113 nÙify -> `de¡roy ÒÙify-> u£r_d©a ); 115 `ä“ ( nÙify ); 116 } } 118  boÞ $m©ch_nÙify_id (cÚ¡ * a , cÚ¡ * b ) 120 cÚ¡  mgmt_nÙify * nÙify = a ; 121  id = `PTR_TO_UINT ( b ); 123  nÙify -> id == id; 124 } } 126  boÞ $m©ch_nÙify_šdex (cÚ¡ * a , cÚ¡ * b ) 128 cÚ¡  mgmt_nÙify * nÙify = a ; 129 ušt16_t šdex = `PTR_TO_UINT ( b ); 131  nÙify -> šdex == index; 132 } } 134  $wr™e_w©ch_de¡roy (* u£r_d©a ) 136  mgmt *mgmˆð u£r_d©a ; 138 mgmt -> wr™”_aùive = çl£ ; 139 } } 141  boÞ $£nd_»que¡ ( mgmt *mgmt,  mgmt_»que¡ * »que¡ ) 143  iovec iov ; 144 ssize_t »t ; 146 iov . iov_ba£ = »que¡ -> buf ; 147 iov . iov_Ën = »que¡ -> Ën ; 149 »t = `io_£nd ( mgmt -> io , & iov , 1); 150 ià( »t < 0) { 151 `utž_debug ( mgmt -> debug_ÿÎback , mgmt-> debug_d©a , 152 "wr™çžed: %s", `¡»¼Ü (- »t )); 153 ià( »que¡ -> ÿÎback ) 154 »que¡ -> `ÿÎback ( MGMT_STATUS_FAILED , 0, NULL , 155 »que¡ -> u£r_d©a ); 156 `de¡roy_»que¡ ( »que¡ ); 157  çl£ ; 160 `utž_debug ( mgmt -> debug_ÿÎback , mgmt-> debug_d©a , 162 »que¡ -> šdex ,„eque¡-> Ýcode ); 164 `utž_hexdump ('<', »que¡ -> buf , »t , mgmt -> debug_ÿÎback , 165 mgmt -> debug_d©a ); 167 `queue_push_ž ( mgmt -> ³ndšg_li¡ , »que¡ ); 169  Œue ; 170 } } 172  boÞ $ÿn_wr™e_d©a ( io *io, * u£r_d©a ) 174  mgmt *mgmˆð u£r_d©a ; 175  mgmt_»que¡ * »que¡ ; 176 boÞ ÿn_wr™e ; 178 »que¡ = `queue_pÝ_h—d ( mgmt -> »¶y_queue ); 179 ià(! »que¡ ) { 181 ià(! `queue_i£m±y ( mgmt -> ³ndšg_li¡ )) 182  çl£ ; 184 »que¡ = `queue_pÝ_h—d ( mgmt -> »que¡_queue ); 185 ià(! »que¡ ) 186  çl£ ; 188 ÿn_wr™e = çl£ ; 191 ÿn_wr™e = ! `queue_i£m±y ( mgmt -> »¶y_queue ); 194 ià(! `£nd_»que¡ ( mgmt , »que¡ )) 195  Œue ; 197  ÿn_wr™e ; 198 } } 200  $wakeup_wr™” ( mgmt *mgmt) 202 ià(! `queue_i£m±y ( mgmt -> ³ndšg_li¡ )) { 204 ià( `queue_i£m±y ( mgmt -> »¶y_queue )) 208 ià( mgmt -> wr™”_aùive ) 211 mgmt -> wr™”_aùive = Œue ; 213 `io_£t_wr™e_hªdËr ( mgmt -> io , ÿn_wr™e_d©a , mgmt, 214 wr™e_w©ch_de¡roy ); 215 } } 217  sÝcode_šdex { 218 ušt16_t mÝcode ; 219 ušt16_t mšdex ; 222  boÞ $m©ch_»que¡_Ýcode_šdex (cÚ¡ * a , cÚ¡ * b ) 224 cÚ¡  mgmt_»que¡ * »que¡ = a ; 225 cÚ¡  Ýcode_šdex * m©ch = b ; 227  »que¡ -> Ýcode =ð m©ch ->opcode && 228 »que¡ -> šdex =ð m©ch ->index; 229 } } 231  $»que¡_com¶‘e ( mgmt *mgmt, ušt8_t ¡©us , 232 ušt16_t Ýcode , ušt16_ˆ šdex , 233 ušt16_t Ëngth , cÚ¡ * ·¿m ) 235  Ýcode_šdex m©ch = { . Ýcode = opcode, . šdex = index }; 236  mgmt_»que¡ * »que¡ ; 238 »que¡ = `queue_»move_if ( mgmt -> ³ndšg_li¡ , 239 m©ch_»que¡_Ýcode_šdex , & m©ch ); 240 ià( »que¡ ) { 241 ià( »que¡ -> ÿÎback ) 242 »que¡ -> `ÿÎback ( ¡©us , Ëngth , ·¿m , 243 »que¡ -> u£r_d©a ); 245 `de¡roy_»que¡ ( »que¡ ); 248 `wakeup_wr™” ( mgmt ); 249 } } 251  sev’t_šdex { 252 ušt16_t mev’t ; 253 ušt16_t mšdex ; 254 ušt16_t mËngth ; 255 cÚ¡ * m·¿m ; 258  $nÙify_hªdËr (* d©a , * u£r_d©a ) 260  mgmt_nÙify * nÙify = d©a ; 261  ev’t_šdex * m©ch = u£r_d©a ; 263 ià( nÙify -> ev’t !ð m©ch ->event) 266 ià( nÙify -> šdex !ð m©ch ->šdex &&‚Ùify->šdex !ð MGMT_INDEX_NONE ) 269 ià( nÙify -> ÿÎback ) 270 nÙify -> `ÿÎback ( m©ch -> šdex , m©ch-> Ëngth , m©ch-> ·¿m , 271 nÙify -> u£r_d©a ); 272 } } 274  $´oûss_nÙify ( mgmt *mgmt, ušt16_t ev’t , ušt16_ˆ šdex , 275 ušt16_t Ëngth , cÚ¡ * ·¿m ) 277  ev’t_šdex m©ch = { . ev’t =ƒv’t, . šdex = index, 278 . Ëngth =†’gth, . ·¿m =…aram }; 280 `queue_fÜ—ch ( mgmt -> nÙify_li¡ , nÙify_hªdËr , & m©ch ); 281 } } 283  boÞ $ÿn_»ad_d©a ( io *io, * u£r_d©a ) 285  mgmt *mgmˆð u£r_d©a ; 286  mgmt_hdr * hdr ; 287  mgmt_ev_cmd_com¶‘e * cc ; 288  mgmt_ev_cmd_¡©us * cs ; 289 ssize_t by‹s_»ad ; 290 ušt16_t Ýcode , ev’t , šdex , Ëngth ; 292 by‹s_»ad = `»ad ( mgmt -> fd , mgmt-> buf , mgmt-> Ën ); 293 ià( by‹s_»ad < 0) 294  çl£ ; 296 `utž_hexdump ('>', mgmt -> buf , by‹s_»ad , 297 mgmt -> debug_ÿÎback , mgmt-> debug_d©a ); 299 ià( by‹s_»ad < MGMT_HDR_SIZE ) 300  Œue ; 302 hdr = mgmt -> buf ; 303 ev’t = `btohs ( hdr -> Ýcode ); 304 šdex = `btohs ( hdr ->index); 305 Ëngth = `btohs ( hdr -> Ën ); 307 ià( by‹s_»ad < Ëngth + MGMT_HDR_SIZE ) 308  Œue ; 310 `mgmt_»f ( mgmt ); 312  ev’t ) { 313  MGMT_EV_CMD_COMPLETE : 314 cc = mgmt -> buf + MGMT_HDR_SIZE ; 315 Ýcode = `btohs ( cc ->opcode); 317 `utž_debug ( mgmt -> debug_ÿÎback , mgmt-> debug_d©a , 319 šdex , Ýcode , cc -> ¡©us ); 321 `»que¡_com¶‘e ( mgmt , cc -> ¡©us , Ýcode , šdex , Ëngth - 3, 322 mgmt -> buf + MGMT_HDR_SIZE + 3); 324  MGMT_EV_CMD_STATUS : 325 cs = mgmt -> buf + MGMT_HDR_SIZE ; 326 Ýcode = `btohs ( cs ->opcode); 328 `utž_debug ( mgmt -> debug_ÿÎback , mgmt-> debug_d©a , 330 šdex , Ýcode , cs -> ¡©us ); 332 `»que¡_com¶‘e ( mgmt , cs -> ¡©us , Ýcode , šdex , 0, NULL ); 335 `utž_debug ( mgmt -> debug_ÿÎback , mgmt-> debug_d©a , 336 "[0x%04x]ƒv’ˆ0x%04x", šdex , ev’t ); 338 `´oûss_nÙify ( mgmt , ev’t , šdex , Ëngth , 339 mgmt -> buf + MGMT_HDR_SIZE ); 343 `mgmt_uÄef ( mgmt ); 345  Œue ; 346 } } 348  mgmt * $mgmt_Ãw ( fd ) 350  mgmt *mgmt; 352 ià( fd < 0) 353  NULL ; 355 mgmt = `Ãw0 (mgmt, 1); 356 ià(! mgmt ) 357  NULL ; 359 mgmt -> fd = fd; 360 mgmt -> þo£_Ú_uÄef = çl£ ; 362 mgmt -> Ën = 512; 363 mgmt -> buf = `m®loc (mgmt-> Ën ); 364 ià(! mgmt -> buf ) { 365 `ä“ ( mgmt ); 366  NULL ; 369 mgmt -> io = `io_Ãw ( fd ); 370 ià(! mgmt -> io ) { 371 `ä“ ( mgmt -> buf ); 372 `ä“ ( mgmt ); 373  NULL ; 376 mgmt -> »que¡_queue = `queue_Ãw (); 377 ià(! mgmt -> »que¡_queue ) { 378 `io_de¡roy ( mgmt -> io ); 379 `ä“ ( mgmt -> buf ); 380 `ä“ ( mgmt ); 381  NULL ; 384 mgmt -> »¶y_queue = `queue_Ãw (); 385 ià(! mgmt -> »¶y_queue ) { 386 `queue_de¡roy ( mgmt -> »que¡_queue , NULL ); 387 `io_de¡roy ( mgmt -> io ); 388 `ä“ ( mgmt -> buf ); 389 `ä“ ( mgmt ); 390  NULL ; 393 mgmt -> ³ndšg_li¡ = `queue_Ãw (); 394 ià(! mgmt -> ³ndšg_li¡ ) { 395 `queue_de¡roy ( mgmt -> »¶y_queue , NULL ); 396 `queue_de¡roy ( mgmt -> »que¡_queue , NULL ); 397 `io_de¡roy ( mgmt -> io ); 398 `ä“ ( mgmt -> buf ); 399 `ä“ ( mgmt ); 400  NULL ; 403 mgmt -> nÙify_li¡ = `queue_Ãw (); 404 ià(! mgmt -> nÙify_li¡ ) { 405 `queue_de¡roy ( mgmt -> ³ndšg_li¡ , NULL ); 406 `queue_de¡roy ( mgmt -> »¶y_queue , NULL ); 407 `queue_de¡roy ( mgmt -> »que¡_queue , NULL ); 408 `io_de¡roy ( mgmt -> io ); 409 `ä“ ( mgmt -> buf ); 410 `ä“ ( mgmt ); 411  NULL ; 414 ià(! `io_£t_»ad_hªdËr ( mgmt -> io , ÿn_»ad_d©a , mgmt, NULL )) { 415 `queue_de¡roy ( mgmt -> nÙify_li¡ , NULL ); 416 `queue_de¡roy ( mgmt -> ³ndšg_li¡ , NULL ); 417 `queue_de¡roy ( mgmt -> »¶y_queue , NULL ); 418 `queue_de¡roy ( mgmt -> »que¡_queue , NULL ); 419 `io_de¡roy ( mgmt -> io ); 420 `ä“ ( mgmt -> buf ); 421 `ä“ ( mgmt ); 422  NULL ; 425 mgmt -> wr™”_aùive = çl£ ; 427  `mgmt_»f ( mgmt ); 428 } } 430  mgmt * $mgmt_Ãw_deçuÉ () 432  mgmt *mgmt; 434  sockaddr commÚ ; 435  sockaddr_hci hci ; 436 } addr ; 437  fd ; 439 fd = `sock‘ ( PF_BLUETOOTH , SOCK_RAW | SOCK_CLOEXEC | SOCK_NONBLOCK , 440 BTPROTO_HCI ); 441 ià( fd < 0) 442  NULL ; 444 `mem£t (& addr , 0, (addr)); 445 addr . hci . hci_çmžy = AF_BLUETOOTH ; 446 addr . hci . hci_dev = HCI_DEV_NONE ; 447 addr . hci . hci_chªÃl = HCI_CHANNEL_CONTROL ; 449 ià( `bšd ( fd , & addr . commÚ , ×ddr. hci )) < 0) { 450 `þo£ ( fd ); 451  NULL ; 454 mgmt = `mgmt_Ãw ( fd ); 455 ià(! mgmt ) { 456 `þo£ ( fd ); 457  NULL ; 460 mgmt -> þo£_Ú_uÄef = Œue ; 462  mgmt ; 463 } } 465  mgmt * $mgmt_»f ( mgmt *mgmt) 467 ià(! mgmt ) 468  NULL ; 470 `__sync_ãtch_ªd_add (& mgmt -> »f_couÁ , 1); 472  mgmt ; 473 } } 475  $mgmt_uÄef ( mgmt *mgmt) 477 ià(! mgmt ) 480 ià( `__sync_sub_ªd_ãtch (& mgmt -> »f_couÁ , 1)) 483 `mgmt_uÄegi¡”_®l ( mgmt ); 484 `mgmt_ÿnûl_®l ( mgmt ); 486 `queue_de¡roy ( mgmt -> »¶y_queue , NULL ); 487 `queue_de¡roy ( mgmt -> »que¡_queue , NULL ); 489 `io_£t_wr™e_hªdËr ( mgmt -> io , NULL , NULL, NULL); 490 `io_£t_»ad_hªdËr ( mgmt -> io , NULL , NULL, NULL); 492 `io_de¡roy ( mgmt -> io ); 493 mgmt -> io = NULL ; 495 ià( mgmt -> þo£_Ú_uÄef ) 496 `þo£ ( mgmt -> fd ); 498 ià( mgmt -> debug_de¡roy ) 499 mgmt -> `debug_de¡roy (mgmt-> debug_d©a ); 501 `ä“ ( mgmt -> buf ); 502 mgmt -> buf = NULL ; 504 `queue_de¡roy ( mgmt -> nÙify_li¡ , NULL ); 505 `queue_de¡roy ( mgmt -> ³ndšg_li¡ , NULL ); 506 `ä“ ( mgmt ); 509 } } 511 boÞ $mgmt_£t_debug ( mgmt *mgmt, mgmt_debug_func_t ÿÎback , 512 * u£r_d©a , mgmt_de¡roy_func_t de¡roy ) 514 ià(! mgmt ) 515  çl£ ; 517 ià( mgmt -> debug_de¡roy ) 518 mgmt -> `debug_de¡roy (mgmt-> debug_d©a ); 520 mgmt -> debug_ÿÎback = ÿÎback ; 521 mgmt -> debug_de¡roy = de¡roy ; 522 mgmt -> debug_d©a = u£r_d©a ; 524  Œue ; 525 } } 527 boÞ $mgmt_£t_þo£_Ú_uÄef ( mgmt *mgmt, boÞ do_þo£ ) 529 ià(! mgmt ) 530  çl£ ; 532 mgmt -> þo£_Ú_uÄef = do_þo£ ; 534  Œue ; 535 } } 537  mgmt_»que¡ * $ü—‹_»que¡ ( ušt16_t Ýcode , ušt16_ˆ šdex , 538 ušt16_t Ëngth , cÚ¡ * ·¿m , 539 mgmt_»que¡_func_t ÿÎback , 540 * u£r_d©a , mgmt_de¡roy_func_t de¡roy ) 542  mgmt_»que¡ * »que¡ ; 543  mgmt_hdr * hdr ; 545 ià(! Ýcode ) 546  NULL ; 548 ià( Ëngth > 0 && ! ·¿m ) 549  NULL ; 551 »que¡ = `Ãw0 ( mgmt_»que¡ , 1); 552 ià(! »que¡ ) 553  NULL ; 555 »que¡ -> Ën = Ëngth + MGMT_HDR_SIZE ; 556 »que¡ -> buf = `m®loc Ôeque¡-> Ën ); 557 ià(! »que¡ -> buf ) { 558 `ä“ ( »que¡ ); 559  NULL ; 562 ià( Ëngth > 0) 563 `memýy ( »que¡ -> buf + MGMT_HDR_SIZE , ·¿m , Ëngth ); 565 hdr = »que¡ -> buf ; 566 hdr -> Ýcode = `htobs (opcode); 567 hdr -> šdex = `htobs (index); 568 hdr -> Ën = `htobs ( Ëngth ); 570 »que¡ -> Ýcode = opcode; 571 »que¡ -> šdex = index; 573 »que¡ -> ÿÎback = callback; 574 »que¡ -> de¡roy = destroy; 575 »que¡ -> u£r_d©a = user_data; 577  »que¡ ; 578 } } 580  $mgmt_£nd ( mgmt *mgmt, ušt16_t Ýcode , ušt16_ˆ šdex , 581 ušt16_t Ëngth , cÚ¡ * ·¿m , 582 mgmt_»que¡_func_t ÿÎback , 583 * u£r_d©a , mgmt_de¡roy_func_t de¡roy ) 585  mgmt_»que¡ * »que¡ ; 587 ià(! mgmt ) 590 »que¡ = `ü—‹_»que¡ ( Ýcode , šdex , Ëngth , ·¿m , 591 ÿÎback , u£r_d©a , de¡roy ); 592 ià(! »que¡ ) 595 ià( mgmt -> Ãxt_»que¡_id < 1) 596 mgmt -> Ãxt_»que¡_id = 1; 598 »que¡ -> id = mgmt -> Ãxt_»que¡_id ++; 600 ià(! `queue_push_ž ( mgmt -> »que¡_queue , »que¡ )) { 601 `ä“ ( »que¡ -> buf ); 602 `ä“ ( »que¡ ); 606 `wakeup_wr™” ( mgmt ); 608  »que¡ -> id ; 609 } } 611  $mgmt_£nd_nowa™ ( mgmt *mgmt, ušt16_t Ýcode , ušt16_ˆ šdex , 612 ušt16_t Ëngth , cÚ¡ * ·¿m , 613 mgmt_»que¡_func_t ÿÎback , 614 * u£r_d©a , mgmt_de¡roy_func_t de¡roy ) 616  mgmt_»que¡ * »que¡ ; 618 ià(! mgmt ) 621 »que¡ = `ü—‹_»que¡ ( Ýcode , šdex , Ëngth , ·¿m , 622 ÿÎback , u£r_d©a , de¡roy ); 623 ià(! »que¡ ) 626 ià( mgmt -> Ãxt_»que¡_id < 1) 627 mgmt -> Ãxt_»que¡_id = 1; 629 »que¡ -> id = mgmt -> Ãxt_»que¡_id ++; 631 ià(! `£nd_»que¡ ( mgmt , »que¡ )) 634  »que¡ -> id ; 635 } } 637  $mgmt_»¶y ( mgmt *mgmt, ušt16_t Ýcode , ušt16_ˆ šdex , 638 ušt16_t Ëngth , cÚ¡ * ·¿m , 639 mgmt_»que¡_func_t ÿÎback , 640 * u£r_d©a , mgmt_de¡roy_func_t de¡roy ) 642  mgmt_»que¡ * »que¡ ; 644 ià(! mgmt ) 647 »que¡ = `ü—‹_»que¡ ( Ýcode , šdex , Ëngth , ·¿m , 648 ÿÎback , u£r_d©a , de¡roy ); 649 ià(! »que¡ ) 652 ià( mgmt -> Ãxt_»que¡_id < 1) 653 mgmt -> Ãxt_»que¡_id = 1; 655 »que¡ -> id = mgmt -> Ãxt_»que¡_id ++; 657 ià(! `queue_push_ž ( mgmt -> »¶y_queue , »que¡ )) { 658 `ä“ ( »que¡ -> buf ); 659 `ä“ ( »que¡ ); 663 `wakeup_wr™” ( mgmt ); 665  »que¡ -> id ; 666 } } 668 boÞ $mgmt_ÿnûl ( mgmt *mgmt,  id ) 670  mgmt_»que¡ * »que¡ ; 672 ià(! mgmt || ! id ) 673  çl£ ; 675 »que¡ = `queue_»move_if ( mgmt -> »que¡_queue , m©ch_»que¡_id , 676 `UINT_TO_PTR ( id )); 677 ià( »que¡ ) 678  dÚe ; 680 »que¡ = `queue_»move_if ( mgmt -> »¶y_queue , m©ch_»que¡_id , 681 `UINT_TO_PTR ( id )); 682 ià( »que¡ ) 683  dÚe ; 685 »que¡ = `queue_»move_if ( mgmt -> ³ndšg_li¡ , m©ch_»que¡_id , 686 `UINT_TO_PTR ( id )); 687 ià(! »que¡ ) 688  çl£ ; 690 dÚe : 691 `de¡roy_»que¡ ( »que¡ ); 693 `wakeup_wr™” ( mgmt ); 695  Œue ; 696 } } 698 boÞ $mgmt_ÿnûl_šdex ( mgmt *mgmt, ušt16_t šdex ) 700 ià(! mgmt ) 701  çl£ ; 703 `queue_»move_®l ( mgmt -> »que¡_queue , m©ch_»que¡_šdex , 704 `UINT_TO_PTR ( šdex ), de¡roy_»que¡ ); 705 `queue_»move_®l ( mgmt -> »¶y_queue , m©ch_»que¡_šdex , 706 `UINT_TO_PTR ( šdex ), de¡roy_»que¡ ); 707 `queue_»move_®l ( mgmt -> ³ndšg_li¡ , m©ch_»que¡_šdex , 708 `UINT_TO_PTR ( šdex ), de¡roy_»que¡ ); 710  Œue ; 711 } } 713 boÞ $mgmt_ÿnûl_®l ( mgmt *mgmt) 715 ià(! mgmt ) 716  çl£ ; 718 `queue_»move_®l ( mgmt -> ³ndšg_li¡ , NULL , NULL, de¡roy_»que¡ ); 719 `queue_»move_®l ( mgmt -> »¶y_queue , NULL , NULL, de¡roy_»que¡ ); 720 `queue_»move_®l ( mgmt -> »que¡_queue , NULL , NULL, de¡roy_»que¡ ); 722  Œue ; 723 } } 725  $mgmt_»gi¡” ( mgmt *mgmt, ušt16_t ev’t , ušt16_ˆ šdex , 726 mgmt_nÙify_func_t ÿÎback , 727 * u£r_d©a , mgmt_de¡roy_func_t de¡roy ) 729  mgmt_nÙify * nÙify ; 731 ià(! mgmt || ! ev’t ) 734 nÙify = `Ãw0 ( mgmt_nÙify , 1); 735 ià(! nÙify ) 738 nÙify -> ev’t =ƒvent; 739 nÙify -> šdex = index; 741 nÙify -> ÿÎback = callback; 742 nÙify -> de¡roy = destroy; 743 nÙify -> u£r_d©a = user_data; 745 ià( mgmt -> Ãxt_nÙify_id < 1) 746 mgmt -> Ãxt_nÙify_id = 1; 748 nÙify -> id = mgmt -> Ãxt_nÙify_id ++; 750 ià(! `queue_push_ž ( mgmt -> nÙify_li¡ , nÙify )) { 751 `ä“ ( nÙify ); 755  nÙify -> id ; 756 } } 758 boÞ $mgmt_uÄegi¡” ( mgmt *mgmt,  id ) 760  mgmt_nÙify * nÙify ; 762 ià(! mgmt || ! id ) 763  çl£ ; 765 nÙify = `queue_»move_if ( mgmt -> nÙify_li¡ , m©ch_nÙify_id , 766 `UINT_TO_PTR ( id )); 767 ià(! nÙify ) 768  çl£ ; 770 `de¡roy_nÙify ( nÙify ); 771  Œue ; 772 } } 774 boÞ $mgmt_uÄegi¡”_šdex ( mgmt *mgmt, ušt16_t šdex ) 776 ià(! mgmt ) 777  çl£ ; 779 `queue_»move_®l ( mgmt -> nÙify_li¡ , m©ch_nÙify_šdex , 780 `UINT_TO_PTR ( šdex ), de¡roy_nÙify ); 782  Œue ; 783 } } 785 boÞ $mgmt_uÄegi¡”_®l ( mgmt *mgmt) 787 ià(! mgmt ) 788  çl£ ; 790 `queue_»move_®l ( mgmt -> nÙify_li¡ , NULL , NULL, de¡roy_nÙify ); 792  Œue ; 793 } } @src/shared/mgmt.h 24  ~<¡dboÞ.h > 25  ~<¡dšt.h > 27  #MGMT_VERSION ( v , r è(((vè<< 16è+ (r)) ) 29 (* tmgmt_de¡roy_func_t )(* tu£r_d©a ); 31  mgmt ; 33  mgmt * `mgmt_Ãw ( fd ); 34  mgmt * `mgmt_Ãw_deçuÉ (); 36  mgmt * `mgmt_»f (mgmt *mgmt); 37  `mgmt_uÄef ( mgmt *mgmt); 39 (* tmgmt_debug_func_t )(cÚ¡ * t¡r , * tu£r_d©a ); 41 boÞ `mgmt_£t_debug ( mgmt *mgmt, mgmt_debug_func_t ÿÎback , 42 * u£r_d©a , mgmt_de¡roy_func_t de¡roy ); 44 boÞ `mgmt_£t_þo£_Ú_uÄef ( mgmt *mgmt, boÞ do_þo£ ); 46 (* tmgmt_»que¡_func_t )( tušt8_t t¡©us , tušt16_t tËngth , 47 cÚ¡ * t·¿m , * tu£r_d©a ); 49  `mgmt_£nd ( mgmt *mgmt, ušt16_t Ýcode , ušt16_ˆ šdex , 50 ušt16_t Ëngth , cÚ¡ * ·¿m , 51 mgmt_»que¡_func_t ÿÎback , 52 * u£r_d©a , mgmt_de¡roy_func_t de¡roy ); 53  `mgmt_£nd_nowa™ ( mgmt *mgmt, ušt16_t Ýcode , ušt16_ˆ šdex , 54 ušt16_t Ëngth , cÚ¡ * ·¿m , 55 mgmt_»que¡_func_t ÿÎback , 56 * u£r_d©a , mgmt_de¡roy_func_t de¡roy ); 57  `mgmt_»¶y ( mgmt *mgmt, ušt16_t Ýcode , ušt16_ˆ šdex , 58 ušt16_t Ëngth , cÚ¡ * ·¿m , 59 mgmt_»que¡_func_t ÿÎback , 60 * u£r_d©a , mgmt_de¡roy_func_t de¡roy ); 61 boÞ `mgmt_ÿnûl ( mgmt *mgmt,  id ); 62 boÞ `mgmt_ÿnûl_šdex ( mgmt *mgmt, ušt16_t šdex ); 63 boÞ `mgmt_ÿnûl_®l ( mgmt *mgmt); 65 (* tmgmt_nÙify_func_t )( tušt16_t tšdex , ušt16_ˆ tËngth , 66 cÚ¡ * t·¿m , * tu£r_d©a ); 68  `mgmt_»gi¡” ( mgmt *mgmt, ušt16_t ev’t , ušt16_ˆ šdex , 69 mgmt_nÙify_func_t ÿÎback , 70 * u£r_d©a , mgmt_de¡roy_func_t de¡roy ); 71 boÞ `mgmt_uÄegi¡” ( mgmt *mgmt,  id ); 72 boÞ `mgmt_uÄegi¡”_šdex ( mgmt *mgmt, ušt16_t šdex ); 73 boÞ `mgmt_uÄegi¡”_®l ( mgmt *mgmt); @src/shared/pcap.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~ 30  ~<¡dlib.h > 32  ~"¤c/sh¬ed/utž.h " 33  ~"¤c/sh¬ed/pÿp.h " 35  spÿp_hdr { 36 ušt32_t mmagic_numb” ; 37 ušt16_t mv”siÚ_majÜ ; 38 ušt16_t mv”siÚ_mšÜ ; 39 št32_t mthiszÚe ; 40 ušt32_t msigfigs ; 41 ušt32_t m¢­Ën ; 42 ušt32_t mÃtwÜk ; 43 } __©Œibu‹__ (( ·cked )); 44  #PCAP_HDR_SIZE (( pÿp_hdr )) ) 46  spÿp_pkt { 47 ušt32_t mts_£c ; 48 ušt32_t mts_u£c ; 49 ušt32_t mšþ_Ën ; 50 ušt32_t mÜig_Ën ; 51 } __©Œibu‹__ (( ·cked )); 52  #PCAP_PKT_SIZE (( pÿp_pkt )) ) 54  spÿp_µi { 55 ušt8_t mv”siÚ ; 56 ušt8_t mæags ; 57 ušt16_t mËn ; 58 ušt32_t mdÉ ; 59 } __©Œibu‹__ (( ·cked )); 60  #PCAP_PPI_SIZE (( pÿp_µi )) ) 62  spÿp { 63  m»f_couÁ ; 64  mfd ; 65 ušt32_t mty³ ; 66 ušt32_t m¢­Ën ; 69  pÿp * $pÿp_Ý’ (cÚ¡ * ·th ) 71  pÿp *pcap; 72  pÿp_hdr hdr ; 73 ssize_t Ën ; 75 pÿp = `ÿÎoc (1, (*pcap)); 76 ià(! pÿp ) 77  NULL ; 79 pÿp -> fd = `Ý’ ( ·th , O_RDONLY | O_CLOEXEC ); 80 ià( pÿp -> fd < 0) { 81 `ä“ ( pÿp ); 82  NULL ; 85 Ën = `»ad ( pÿp -> fd , & hdr , PCAP_HDR_SIZE ); 86 ià( Ën < 0 ||†’ !ð PCAP_HDR_SIZE ) 87  çžed ; 89 ià( hdr . magic_numb” != 0xa1b2c3d4) 90  çžed ; 92 ià( hdr . v”siÚ_majÜ !ð2 || hdr. v”siÚ_mšÜ != 4) 93  çžed ; 95 pÿp -> ¢­Ën = hdr .snaplen; 96 pÿp -> ty³ = hdr . ÃtwÜk ; 98  `pÿp_»f ( pÿp ); 100 çžed : 101 `þo£ ( pÿp -> fd ); 102 `ä“ ( pÿp ); 104  NULL ; 105 } } 107  pÿp * $pÿp_»f ( pÿp *pcap) 109 ià(! pÿp ) 110  NULL ; 112 `__sync_ãtch_ªd_add (& pÿp -> »f_couÁ , 1); 114  pÿp ; 115 } } 117  $pÿp_uÄef ( pÿp *pcap) 119 ià(! pÿp ) 122 ià( `__sync_sub_ªd_ãtch (& pÿp -> »f_couÁ , 1)) 125 ià( pÿp -> fd >= 0) 126 `þo£ ( pÿp -> fd ); 128 `ä“ ( pÿp ); 129 } } 131 ušt32_t $pÿp_g‘_ty³ ( pÿp *pcap) 133 ià(! pÿp ) 134  PCAP_TYPE_INVALID ; 136  pÿp -> ty³ ; 137 } } 139 ušt32_t $pÿp_g‘_¢­Ën ( pÿp *pcap) 141 ià(! pÿp ) 144  pÿp -> ¢­Ën ; 145 } } 147 boÞ $pÿp_»ad ( pÿp *pÿp,  timev® * tv , 148 * d©a , ušt32_t size , ušt32_ˆ* Ën ) 150  pÿp_pkt pkt ; 151 ušt32_t tÜ—d ; 152 ssize_t by‹s_»ad ; 154 ià(! pÿp ) 155  çl£ ; 157 by‹s_»ad = `»ad ( pÿp -> fd , & pkt , PCAP_PKT_SIZE ); 158 ià( by‹s_»ad !ð PCAP_PKT_SIZE ) 159  çl£ ; 161 ià( pkt . šþ_Ën > size ) 162 tÜ—d = size ; 164 tÜ—d = pkt . šþ_Ën ; 166 by‹s_»ad = `»ad ( pÿp -> fd , d©a , tÜ—d ); 167 ià( by‹s_»ad < 0) 168  çl£ ; 170 ià( tv ) { 171 tv -> tv_£c = pkt . ts_£c ; 172 tv -> tv_u£c = pkt . ts_u£c ; 175 ià( Ën ) 176 * Ën = tÜ—d ; 178  Œue ; 179 } } 181 boÞ $pÿp_»ad_µi ( pÿp *pÿp,  timev® * tv , ušt32_t * ty³ , 182 * d©a , ušt32_t size , 183 ušt32_t * off£t , ušt32_ˆ* Ën ) 185  pÿp_pkt pkt ; 186  pÿp_µi µi ; 187 ušt16_t µh_Ën ; 188 ušt32_t tÜ—d ; 189 ssize_t by‹s_»ad ; 191 ià(! pÿp ) 192  çl£ ; 194 by‹s_»ad = `»ad ( pÿp -> fd , & pkt , PCAP_PKT_SIZE ); 195 ià( by‹s_»ad !ð PCAP_PKT_SIZE ) 196  çl£ ; 198 ià( pkt . šþ_Ën > size ) 199 tÜ—d = size ; 201 tÜ—d = pkt . šþ_Ën ; 203 by‹s_»ad = `»ad ( pÿp -> fd , & µi , PCAP_PPI_SIZE ); 204 ià( by‹s_»ad !ð PCAP_PPI_SIZE ) 205  çl£ ; 207 ià( µi . æags ) 208  çl£ ; 210 µh_Ën = `Ë16_to_ýu ( µi . Ën ); 211 ià( µh_Ën < PCAP_PPI_SIZE ) 212  çl£ ; 214 by‹s_»ad = `»ad ( pÿp -> fd , d©a , tÜ—d - PCAP_PPI_SIZE ); 215 ià( by‹s_»ad < 0) 216  çl£ ; 218 ià( tv ) { 219 tv -> tv_£c = pkt . ts_£c ; 220 tv -> tv_u£c = pkt . ts_u£c ; 223 ià( ty³ ) 224 * ty³ = `Ë32_to_ýu ( µi . dÉ ); 226 ià( off£t ) 227 * off£t = µh_Ën - PCAP_PPI_SIZE ; 229 ià( Ën ) 230 * Ën = tÜ—d - µh_Ën ; 232  Œue ; 233 } } @src/shared/pcap.h 24  ~<¡dšt.h > 25  ~<¡dboÞ.h > 26  ~ 28  #PCAP_TYPE_INVALID 0 ) 29  #PCAP_TYPE_USER0 147 ) 30  #PCAP_TYPE_PPI 192 ) 31  #PCAP_TYPE_BLUETOOTH_LE_LL 251 ) 33  gpÿp ; 35  pÿp * pÿp_Ý’ (cÚ¡ * ·th ); 37  pÿp * pÿp_»f (pcap *pcap); 38  pÿp_uÄef ( pÿp *pcap); 40 ušt32_t pÿp_g‘_ty³ ( pÿp *pcap); 41 ušt32_t pÿp_g‘_¢­Ën ( pÿp *pcap); 43 boÞ pÿp_»ad ( pÿp *pÿp,  timev® * tv , 44 * d©a , ušt32_t size , ušt32_ˆ* Ën ); 45 boÞ pÿp_»ad_µi ( pÿp *pÿp,  timev® * tv , ušt32_t * ty³ , 46 * d©a , ušt32_t size , 47 ušt32_t * off£t , ušt32_ˆ* Ën ); @src/shared/queue.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~"¤c/sh¬ed/utž.h " 29  ~"¤c/sh¬ed/queue.h " 31  squeue { 32  m»f_couÁ ; 33  queue_’Œy * mh—d ; 34  queue_’Œy * mž ; 35  m’Œ›s ; 38  queue * $queue_»f ( queue *queue) 40 ià(! queue ) 41  NULL ; 43 `__sync_ãtch_ªd_add (& queue -> »f_couÁ , 1); 45  queue ; 46 } } 48  $queue_uÄef ( queue *queue) 50 ià( `__sync_sub_ªd_ãtch (& queue -> »f_couÁ , 1)) 53 `ä“ ( queue ); 54 } } 56  queue * $queue_Ãw () 58  queue *queue; 60 queue = `Ãw0 (queue, 1); 61 ià(! queue ) 62  NULL ; 64 queue -> h—d = NULL ; 65 queue -> ž = NULL ; 66 queue -> ’Œ›s = 0; 68  `queue_»f ( queue ); 69 } } 71  $queue_de¡roy ( queue *queue, queue_de¡roy_func_t de¡roy ) 73 ià(! queue ) 76 `queue_»move_®l ( queue , NULL , NULL, de¡roy ); 78 `queue_uÄef ( queue ); 79 } } 81  queue_’Œy * $queue_’Œy_»f ( queue_’Œy * ’Œy ) 83 ià(! ’Œy ) 84  NULL ; 86 `__sync_ãtch_ªd_add (& ’Œy -> »f_couÁ , 1); 88  ’Œy ; 89 } } 91  $queue_’Œy_uÄef ( queue_’Œy * ’Œy ) 93 ià( `__sync_sub_ªd_ãtch (& ’Œy -> »f_couÁ , 1)) 96 `ä“ ( ’Œy ); 97 } } 99  queue_’Œy * $queue_’Œy_Ãw (* d©a ) 101  queue_’Œy * ’Œy ; 103 ’Œy = `Ãw0 ( queue_’Œy , 1); 104 ià(! ’Œy ) 105  NULL ; 107 ’Œy -> d©a = data; 109  `queue_’Œy_»f ( ’Œy ); 110 } } 112 boÞ $queue_push_ž ( queue *queue, * d©a ) 114  queue_’Œy * ’Œy ; 116 ià(! queue ) 117  çl£ ; 119 ’Œy = `queue_’Œy_Ãw ( d©a ); 120 ià(! ’Œy ) 121  çl£ ; 123 ià( queue -> ž ) 124 queue -> ž -> Ãxt = ’Œy ; 126 queue -> ž = ’Œy ; 128 ià(! queue -> h—d ) 129 queue -> h—d = ’Œy ; 131 queue -> ’Œ›s ++; 133  Œue ; 134 } } 136 boÞ $queue_push_h—d ( queue *queue, * d©a ) 138  queue_’Œy * ’Œy ; 140 ià(! queue ) 141  çl£ ; 143 ’Œy = `queue_’Œy_Ãw ( d©a ); 144 ià(! ’Œy ) 145  çl£ ; 147 ’Œy -> Ãxt = queue -> h—d ; 149 queue -> h—d = ’Œy ; 151 ià(! queue -> ž ) 152 queue -> ž = ’Œy ; 154 queue -> ’Œ›s ++; 156  Œue ; 157 } } 159 boÞ $queue_push_aá” ( queue *queue, * ’Œy , * d©a ) 161  queue_’Œy * q’Œy , * tmp , * Ãw_’Œy ; 163 q’Œy = NULL ; 165 ià(! queue ) 166  çl£ ; 168  tmp = queue -> h—d ;mp;m°ðtmp-> Ãxt ) { 169 ià( tmp -> d©a =ð ’Œy ) { 170 q’Œy = tmp ; 175 ià(! q’Œy ) 176  çl£ ; 178 Ãw_’Œy = `queue_’Œy_Ãw ( d©a ); 179 ià(! Ãw_’Œy ) 180  çl£ ; 182 Ãw_’Œy -> Ãxt = q’Œy ->next; 184 ià(! q’Œy -> Ãxt ) 185 queue -> ž = Ãw_’Œy ; 187 q’Œy -> Ãxt = Ãw_’Œy ; 188 queue -> ’Œ›s ++; 190  Œue ; 191 } } 193 * $queue_pÝ_h—d ( queue *queue) 195  queue_’Œy * ’Œy ; 196 * d©a ; 198 ià(! queue || !queue-> h—d ) 199  NULL ; 201 ’Œy = queue -> h—d ; 203 ià(! queue -> h—d -> Ãxt ) { 204 queue -> h—d = NULL ; 205 queue -> ž = NULL ; 207 queue -> h—d = queue->h—d-> Ãxt ; 209 d©a = ’Œy ->data; 211 `queue_’Œy_uÄef ( ’Œy ); 212 queue -> ’Œ›s --; 214  d©a ; 215 } } 217 * $queue_³ek_h—d ( queue *queue) 219 ià(! queue || !queue-> h—d ) 220  NULL ; 222  queue -> h—d -> d©a ; 223 } } 225 * $queue_³ek_ž ( queue *queue) 227 ià(! queue || !queue-> ž ) 228  NULL ; 230  queue -> ž -> d©a ; 231 } } 233  $queue_fÜ—ch ( queue *queue, queue_fÜ—ch_func_t funùiÚ , 234 * u£r_d©a ) 236  queue_’Œy * ’Œy ; 238 ià(! queue || ! funùiÚ ) 241 ’Œy = queue -> h—d ; 242 ià(! ’Œy ) 245 `queue_»f ( queue ); 246  ’Œy && queue -> h—d && queue-> »f_couÁ > 1) { 247  queue_’Œy * Ãxt ; 249 `queue_’Œy_»f ( ’Œy ); 251 `funùiÚ ( ’Œy -> d©a , u£r_d©a ); 253 Ãxt = ’Œy ->next; 255 `queue_’Œy_uÄef ( ’Œy ); 257 ’Œy = Ãxt ; 259 `queue_uÄef ( queue ); 260 } } 262  boÞ $dœeù_m©ch (cÚ¡ * a , cÚ¡ * b ) 264  a =ð b ; 265 } } 267 * $queue_fšd ( queue *queue, queue_m©ch_func_t funùiÚ , 268 cÚ¡ * m©ch_d©a ) 270  queue_’Œy * ’Œy ; 272 ià(! queue ) 273  NULL ; 275 ià(! funùiÚ ) 276 funùiÚ = dœeù_m©ch ; 278  ’Œy = queue -> h—d ;ƒÁry;ƒÁry =ƒÁry-> Ãxt ) 279 ià( `funùiÚ ( ’Œy -> d©a , m©ch_d©a )) 280  ’Œy -> d©a ; 282  NULL ; 283 } } 285 boÞ $queue_»move ( queue *queue, * d©a ) 287  queue_’Œy * ’Œy , * ´ev ; 289 ià(! queue ) 290  çl£ ; 292  ’Œy = queue -> h—d , ´ev = NULL ;ƒntry; 293 ´ev = ’Œy ,ƒÁry =ƒÁry-> Ãxt ) { 294 ià( ’Œy -> d©a != data) 297 ià( ´ev ) 298 ´ev -> Ãxt = ’Œy ->next; 300 queue -> h—d = ’Œy -> Ãxt ; 302 ià(! ’Œy -> Ãxt ) 303 queue -> ž = ´ev ; 305 `queue_’Œy_uÄef ( ’Œy ); 306 queue -> ’Œ›s --; 308  Œue ; 311  çl£ ; 312 } } 314 * $queue_»move_if ( queue *queue, queue_m©ch_func_t funùiÚ , 315 * u£r_d©a ) 317  queue_’Œy * ’Œy , * ´ev = NULL ; 319 ià(! queue || ! funùiÚ ) 320  NULL ; 322 ’Œy = queue -> h—d ; 324  ’Œy ) { 325 ià( `funùiÚ ( ’Œy -> d©a , u£r_d©a )) { 326 * d©a ; 328 ià( ´ev ) 329 ´ev -> Ãxt = ’Œy ->next; 331 queue -> h—d = ’Œy -> Ãxt ; 333 ià(! ’Œy -> Ãxt ) 334 queue -> ž = ´ev ; 336 d©a = ’Œy ->data; 338 `queue_’Œy_uÄef ( ’Œy ); 339 queue -> ’Œ›s --; 341  d©a ; 343 ´ev = ’Œy ; 344 ’Œy =ƒÁry-> Ãxt ; 348  NULL ; 349 } } 351  $queue_»move_®l ( queue *queue, queue_m©ch_func_t funùiÚ , 352 * u£r_d©a , queue_de¡roy_func_t de¡roy ) 354  queue_’Œy * ’Œy ; 355  couÁ = 0; 357 ià(! queue ) 360 ’Œy = queue -> h—d ; 362 ià( funùiÚ ) { 363  ’Œy ) { 364 * d©a ; 366 d©a = `queue_»move_if ( queue , funùiÚ , u£r_d©a ); 367 ià(! d©a ) 370 ià( de¡roy ) 371 `de¡roy ( d©a ); 373 couÁ ++; 376 queue -> ’Œ›s -ð couÁ ; 378 queue -> h—d = NULL ; 379 queue -> ž = NULL ; 380 queue -> ’Œ›s = 0; 382  ’Œy ) { 383  queue_’Œy * tmp = ’Œy ; 385 ’Œy =ƒÁry-> Ãxt ; 387 ià( de¡roy ) 388 `de¡roy ( tmp -> d©a ); 390 `queue_’Œy_uÄef ( tmp ); 391 couÁ ++; 395  couÁ ; 396 } } 398 cÚ¡  queue_’Œy * $queue_g‘_’Œ›s ( queue *queue) 400 ià(! queue ) 401  NULL ; 403  queue -> h—d ; 404 } } 406  $queue_Ëngth ( queue *queue) 408 ià(! queue ) 411  queue -> ’Œ›s ; 412 } } 414 boÞ $queue_i£m±y ( queue *queue) 416 ià(! queue ) 417  Œue ; 419  queue -> ’Œ›s == 0; 420 } } @src/shared/queue.h 24  ~<¡dboÞ.h > 26 (* tqueue_de¡roy_func_t )(* td©a ); 28  queue ; 30  squeue_’Œy { 31  »f_couÁ ; 32 * d©a ; 33  queue_’Œy * Ãxt ; 36  queue * `queue_Ãw (); 37  `queue_de¡roy ( queue *queue, queue_de¡roy_func_t de¡roy ); 39 boÞ `queue_push_ž ( queue *queue, * d©a ); 40 boÞ `queue_push_h—d ( queue *queue, * d©a ); 41 boÞ `queue_push_aá” ( queue *queue, * ’Œy , * d©a ); 42 * `queue_pÝ_h—d ( queue *queue); 43 * `queue_³ek_h—d ( queue *queue); 44 * `queue_³ek_ž ( queue *queue); 46 (* tqueue_fÜ—ch_func_t )(* td©a , * tu£r_d©a ); 48  `queue_fÜ—ch ( queue *queue, queue_fÜ—ch_func_t funùiÚ , 49 * u£r_d©a ); 51  $boÞ (* tqueue_m©ch_func_t )(cÚ¡ * td©a , cÚ¡ * tm©ch_d©a ); 53 * `queue_fšd ( queue *queue, queue_m©ch_func_t funùiÚ , 54 cÚ¡ * m©ch_d©a ); 56 boÞ `queue_»move ( queue *queue, * d©a ); 57 * `queue_»move_if ( queue *queue, queue_m©ch_func_t funùiÚ , 58 * u£r_d©a ); 59  `queue_»move_®l ( queue *queue, queue_m©ch_func_t funùiÚ , 60 * u£r_d©a , queue_de¡roy_func_t de¡roy ); 62 cÚ¡  queue_’Œy * `queue_g‘_’Œ›s ( queue *queue); 64  `queue_Ëngth ( queue *queue); 65 boÞ `queue_i£m±y ( queue *queue); @src/shared/ringbuf.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡ršg.h > 30  ~ 31  ~ 33  ~"¤c/sh¬ed/utž.h " 34  ~"¤c/sh¬ed/ršgbuf.h " 36 #iâdeà MIN 37  #MIN ( x , y è((x)<(y)?(x):(y)) ) 40  sršgbuf { 41 * mbufãr ; 42 size_t msize ; 43 size_t mš ; 44 size_t mout ; 45 ršgbuf_Œacšg_func_t mš_Œacšg ; 46 * mš_d©a ; 49  #RINGBUF_RESET 0 ) 52  šlše  $æs ( x ) 54  x ? (xè* 8 - `__bužtš_þz (x) : 0; 55 } } 58  šlše  $®ign_pow”2 ( u ) 60  1 << `æs ( u - 1); 61 } } 63  ršgbuf * $ršgbuf_Ãw ( size_t size ) 65  ršgbuf *ringbuf; 66 size_t »®_size ; 68 ià( size < 2 || siz> UINT_MAX ) 69  NULL ; 72 »®_size = `®ign_pow”2 ( size ); 74 ršgbuf = `Ãw0 (ringbuf, 1); 75 ià(! ršgbuf ) 76  NULL ; 78 ršgbuf -> bufãr = `m®loc ( »®_size ); 79 ià(! ršgbuf -> bufãr ) { 80 `ä“ ( ršgbuf ); 81  NULL ; 84 ršgbuf -> size = »®_size ; 85 ršgbuf -> š = RINGBUF_RESET ; 86 ršgbuf -> out = RINGBUF_RESET ; 88  ršgbuf ; 89 } } 91  $ršgbuf_ä“ ( ršgbuf *ringbuf) 93 ià(! ršgbuf ) 96 `ä“ ( ršgbuf -> bufãr ); 97 `ä“ ( ršgbuf ); 98 } } 100 boÞ $ršgbuf_£t_šput_Œacšg ( ršgbuf *ringbuf, 101 ršgbuf_Œacšg_func_t ÿÎback , * u£r_d©a ) 103 ià(! ršgbuf ) 104  çl£ ; 106 ršgbuf -> š_Œacšg = ÿÎback ; 107 ršgbuf -> š_d©a = u£r_d©a ; 109  Œue ; 110 } } 112 size_t $ršgbuf_ÿ·c™y ( ršgbuf *ringbuf) 114 ià(! ršgbuf ) 117  ršgbuf -> size ; 118 } } 120 size_t $ršgbuf_Ën ( ršgbuf *ringbuf) 122 ià(! ršgbuf ) 125  ršgbuf -> š -„šgbuf-> out ; 126 } } 128 size_t $ršgbuf_d¿š ( ršgbuf *ršgbuf, size_t couÁ ) 130 size_t Ën ; 132 ià(! ršgbuf ) 135 Ën = `MIN ( couÁ , ršgbuf -> š -„šgbuf-> out ); 136 ià(! Ën ) 139 ršgbuf -> out +ð Ën ; 141 ià( ršgbuf -> out =ðršgbuf-> š ) { 142 ršgbuf -> š = RINGBUF_RESET ; 143 ršgbuf -> out = RINGBUF_RESET ; 146  Ën ; 147 } } 149 * $ršgbuf_³ek ( ršgbuf *ršgbuf, size_t off£t , size_ˆ* Ën_now¿p ) 151 ià(! ršgbuf ) 152  NULL ; 154 off£t = ( ršgbuf -> out + off£tè& (ršgbuf-> size - 1); 156 ià( Ën_now¿p ) { 157 size_t Ën = ršgbuf -> š -„šgbuf-> out ; 158 * Ën_now¿p = `MIN ( Ën , ršgbuf -> size - off£t ); 161  ršgbuf -> bufãr + off£t ; 162 } } 164 ssize_t $ršgbuf_wr™e ( ršgbuf *ršgbuf,  fd ) 166 size_t Ën , off£t , ’d ; 167  iovec iov [2]; 168 ssize_t cÚsumed ; 170 ià(! ršgbuf || fd < 0) 174 Ën = ršgbuf -> š -„šgbuf-> out ; 175 ià(! Ën ) 179 off£t = ršgbuf -> out & (ršgbuf-> size - 1); 180 ’d = `MIN ( Ën , ršgbuf -> size - off£t ); 182 iov [0]. iov_ba£ = ršgbuf -> bufãr + off£t ; 183 iov [0]. iov_Ën = ’d ; 186 iov [1]. iov_ba£ = ršgbuf -> bufãr ; 187 iov [1]. iov_Ën = Ën - ’d ; 189 cÚsumed = `wr™ev ( fd , iov , 2); 190 ià( cÚsumed < 0) 193 ršgbuf -> out +ð cÚsumed ; 195 ià( ršgbuf -> out =ðršgbuf-> š ) { 196 ršgbuf -> š = RINGBUF_RESET ; 197 ršgbuf -> out = RINGBUF_RESET ; 200  cÚsumed ; 201 } } 203 size_t $ršgbuf_avaž ( ršgbuf *ringbuf) 205 ià(! ršgbuf ) 208  ršgbuf -> size -„šgbuf-> š +„šgbuf-> out ; 209 } } 211  $ršgbuf_´štf ( ršgbuf *ršgbuf, cÚ¡ * fÜm© , ...) 213 va_li¡ ­ ; 214  Ën ; 216 `va_¡¬t ( ­ , fÜm© ); 217 Ën = `ršgbuf_v´štf ( ršgbuf , fÜm© , ­ ); 218 `va_’d ( ­ ); 220  Ën ; 221 } } 223  $ršgbuf_v´štf ( ršgbuf *ršgbuf, cÚ¡ * fÜm© , va_li¡ ­ ) 225 size_t avaž , off£t , ’d ; 226 * ¡r ; 227  Ën ; 229 ià(! ršgbuf || ! fÜm© ) 233 avaž = ršgbuf -> size -„šgbuf-> š +„šgbuf-> out ; 234 ià(! avaž ) 237 Ën = `va¥rštf (& ¡r , fÜm© , ­ ); 238 ià( Ën < 0) 241 ià(( size_t è Ën > avaž ) { 242 `ä“ ( ¡r ); 247 off£t = ršgbuf -> š & (ršgbuf-> size - 1); 248 ’d = `MIN (( size_t è Ën , ršgbuf -> size - off£t ); 249 `memýy ( ršgbuf -> bufãr + off£t , ¡r , ’d ); 251 ià( ršgbuf -> š_Œacšg ) 252 ršgbuf -> `š_Œacšg Ôšgbuf-> bufãr + off£t , ’d , 253 ršgbuf -> š_d©a ); 255 ià( Ën - ’d > 0) { 257 `memýy ( ršgbuf -> bufãr , ¡r + ’d , Ën -ƒnd); 259 ià( ršgbuf -> š_Œacšg ) 260 ršgbuf -> `š_Œacšg Ôšgbuf-> bufãr , Ën - ’d , 261 ršgbuf -> š_d©a ); 264 `ä“ ( ¡r ); 266 ršgbuf -> š +ð Ën ; 268  Ën ; 269 } } 271 ssize_t $ršgbuf_»ad ( ršgbuf *ršgbuf,  fd ) 273 size_t avaž , off£t , ’d ; 274  iovec iov [2]; 275 ssize_t cÚsumed ; 277 ià(! ršgbuf || fd < 0) 281 avaž = ršgbuf -> size -„šgbuf-> š +„šgbuf-> out ; 282 ià(! avaž ) 286 off£t = ršgbuf -> š & (ršgbuf-> size - 1); 287 ’d = `MIN ( avaž , ršgbuf -> size - off£t ); 289 iov [0]. iov_ba£ = ršgbuf -> bufãr + off£t ; 290 iov [0]. iov_Ën = ’d ; 293 iov [1]. iov_ba£ = ršgbuf -> bufãr ; 294 iov [1]. iov_Ën = avaž - ’d ; 296 cÚsumed = `»adv ( fd , iov , 2); 297 ià( cÚsumed < 0) 300 ià( ršgbuf -> š_Œacšg ) { 301 size_t Ën = `MIN ((size_tè cÚsumed , ’d ); 302 ršgbuf -> `š_Œacšg Ôšgbuf-> bufãr + off£t , Ën , 303 ršgbuf -> š_d©a ); 304 ià( cÚsumed - Ën > 0) 305 ršgbuf -> `š_Œacšg Ôšgbuf-> bufãr , cÚsumed - Ën , 306 ršgbuf -> š_d©a ); 309 ršgbuf -> š +ð cÚsumed ; 311  cÚsumed ; 312 } } @src/shared/ringbuf.h 24  ~<¡dlib.h > 25  ~<¡d¬g.h > 26  ~<¡dboÞ.h > 28 (* tršgbuf_Œacšg_func_t )(cÚ¡ * tbuf , tsize_t tcouÁ , 29 * tu£r_d©a ); 31  ršgbuf ; 33  ršgbuf * `ršgbuf_Ãw ( size_t size ); 34  `ršgbuf_ä“ ( ršgbuf *ringbuf); 36 boÞ `ršgbuf_£t_šput_Œacšg ( ršgbuf *ringbuf, 37 ršgbuf_Œacšg_func_t ÿÎback , * u£r_d©a ); 39 size_t `ršgbuf_ÿ·c™y ( ršgbuf *ringbuf); 41 size_t `ršgbuf_Ën ( ršgbuf *ringbuf); 42 size_t `ršgbuf_d¿š ( ršgbuf *ršgbuf, size_ˆ couÁ ); 43 * `ršgbuf_³ek ( ršgbuf *ršgbuf, size_t off£t , size_ˆ* Ën_now¿p ); 44 ssize_t `ršgbuf_wr™e ( ršgbuf *ršgbuf,  fd ); 46 size_t `ršgbuf_avaž ( ršgbuf *ringbuf); 47  $ršgbuf_´štf ( ršgbuf *ršgbuf, cÚ¡ * fÜm© , ...) 48 `__©Œibu‹__ (( `fÜm© ( ´štf , 2, 3))); 49  `ršgbuf_v´štf ( ršgbuf *ršgbuf, cÚ¡ * fÜm© , va_li¡ ­ ); 50 ssize_t `ršgbuf_»ad ( ršgbuf *ršgbuf,  fd ); @src/shared/tester.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 33  ~ 34  ~ 36  ~ 38  ~"¤c/sh¬ed/utž.h " 39  ~"¤c/sh¬ed/‹¡”.h " 41  #COLOR_OFF "\x1B[0m" ) 42  #COLOR_BLACK "\x1B[0;30m" ) 43  #COLOR_RED "\x1B[0;31m" ) 44  #COLOR_GREEN "\x1B[0;32m" ) 45  #COLOR_YELLOW "\x1B[0;33m" ) 46  #COLOR_BLUE "\x1B[0;34m" ) 47  #COLOR_MAGENTA "\x1B[0;35m" ) 48  #COLOR_CYAN "\x1B[0;36m" ) 49  #COLOR_WHITE "\x1B[0;37m" ) 50  #COLOR_HIGHLIGHT "\x1B[1;39m" ) 52  #´št_‹xt ( cÞÜ , fmt , ¬gs ...) \ 53 `´štf ( cÞÜ fmt COLOR_OFF "\n", ## ¬gs ) ) 55  #´št_summ¬y ( Ïb– , cÞÜ , v®ue , fmt , ¬gs ...) \ 56 `´štf ("%-52 " cÞÜ "%-10s" COLOR_OFF fmt "\n", \ 57 Ïb– , v®ue , ## ¬gs ) ) 59  #´št_´og»ss ( Çme , cÞÜ , fmt , ¬gs ...) \ 60 `´štf ( COLOR_HIGHLIGHT "%s" COLOR_OFF " - " \ 61 cÞÜ fmt COLOR_OFF "\n", Çme , ## ¬gs ) ) 63 e‹¡_»suÉ { 64 mTEST_RESULT_NOT_RUN , 65 mTEST_RESULT_PASSED , 66 mTEST_RESULT_FAILED , 67 mTEST_RESULT_TIMED_OUT , 70 e‹¡_¡age { 71 mTEST_STAGE_INVALID , 72 mTEST_STAGE_PRE_SETUP , 73 mTEST_STAGE_SETUP , 74 mTEST_STAGE_RUN , 75 mTEST_STAGE_TEARDOWN , 76 mTEST_STAGE_POST_TEARDOWN , 79  s‹¡_ÿ£ { 80 * mÇme ; 81 ‹¡_»suÉ m»suÉ ; 82 ‹¡_¡age m¡age ; 83 cÚ¡ * m‹¡_d©a ; 84 ‹¡”_d©a_func_t m´e_£tup_func ; 85 ‹¡”_d©a_func_t m£tup_func ; 86 ‹¡”_d©a_func_t m‹¡_func ; 87 ‹¡”_d©a_func_t m‹¬down_func ; 88 ‹¡”_d©a_func_t mpo¡_‹¬down_func ; 89 gdoubË m¡¬t_time ; 90 gdoubË m’d_time ; 91  mtimeout ; 92  mtimeout_id ; 93 ‹¡”_de¡roy_func_t mde¡roy ; 94 * mu£r_d©a ; 97  GMašLoÝ * gmaš_loÝ ; 99  GLi¡ * g‹¡_li¡ ; 100  GLi¡ * g‹¡_cu¼’t ; 101  GTim” * g‹¡_tim” ; 103  gboÞ—n gÝtiÚ_v”siÚ = FALSE ; 104  gboÞ—n gÝtiÚ_qu›t = FALSE ; 105  gboÞ—n gÝtiÚ_debug = FALSE ; 106  gboÞ—n gÝtiÚ_li¡ = FALSE ; 107 cÚ¡ * gÝtiÚ_´efix = NULL ; 109  $‹¡_de¡roy ( gpoš‹r d©a ) 111  ‹¡_ÿ£ * ‹¡ = d©a ; 113 ià( ‹¡ -> timeout_id > 0) 114 `g_sourû_»move ( ‹¡ -> timeout_id ); 116 ià( ‹¡ -> de¡roy ) 117 ‹¡ -> `de¡roy Ñe¡-> u£r_d©a ); 119 `ä“ ( ‹¡ -> Çme ); 120 `ä“ ( ‹¡ ); 121 } } 123  $‹¡”_´št (cÚ¡ * fÜm© , ...) 125 va_li¡ ­ ; 127 ià( `‹¡”_u£_qu›t ()) 130 `´štf (" %s", COLOR_WHITE ); 131 `va_¡¬t ( ­ , fÜm© ); 132 `v´štf ( fÜm© , ­ ); 133 `va_’d ( ­ ); 134 `´štf ("%s\n", COLOR_OFF ); 135 } } 137  $‹¡”_debug (cÚ¡ * fÜm© , ...) 139 va_li¡ ­ ; 141 ià(! `‹¡”_u£_debug ()) 144 `´štf (" %s", COLOR_WHITE ); 145 `va_¡¬t ( ­ , fÜm© ); 146 `v´štf ( fÜm© , ­ ); 147 `va_’d ( ­ ); 148 `´štf ("%s\n", COLOR_OFF ); 149 } } 151  $‹¡”_w¬n (cÚ¡ * fÜm© , ...) 153 va_li¡ ­ ; 155 `´štf (" %s", COLOR_WHITE ); 156 `va_¡¬t ( ­ , fÜm© ); 157 `v´štf ( fÜm© , ­ ); 158 `va_’d ( ­ ); 159 `´štf ("%s\n", COLOR_OFF ); 160 } } 162  $deçuÉ_´e_£tup (cÚ¡ * ‹¡_d©a ) 164 `‹¡”_´e_£tup_com¶‘e (); 165 } } 167  $deçuÉ_£tup (cÚ¡ * ‹¡_d©a ) 169 `‹¡”_£tup_com¶‘e (); 170 } } 172  $deçuÉ_‹¬down (cÚ¡ * ‹¡_d©a ) 174 `‹¡”_‹¬down_com¶‘e (); 175 } } 177  $deçuÉ_po¡_‹¬down (cÚ¡ * ‹¡_d©a ) 179 `‹¡”_po¡_‹¬down_com¶‘e (); 180 } } 182  $‹¡”_add_fuÎ (cÚ¡ * Çme , cÚ¡ * ‹¡_d©a , 183 ‹¡”_d©a_func_t ´e_£tup_func , 184 ‹¡”_d©a_func_t £tup_func , 185 ‹¡”_d©a_func_t ‹¡_func , 186 ‹¡”_d©a_func_t ‹¬down_func , 187 ‹¡”_d©a_func_t po¡_‹¬down_func , 188  timeout , 189 * u£r_d©a , ‹¡”_de¡roy_func_t de¡roy ) 191  ‹¡_ÿ£ * ‹¡ ; 193 ià(! ‹¡_func ) 196 ià( ÝtiÚ_´efix && ! `g_¡r_has_´efix ( Çme , option_prefix)) { 197 ià( de¡roy ) 198 `de¡roy ( u£r_d©a ); 202 ià( ÝtiÚ_li¡ ) { 203 `´štf ("%s\n", Çme ); 204 ià( de¡roy ) 205 `de¡roy ( u£r_d©a ); 209 ‹¡ = `Ãw0 ( ‹¡_ÿ£ , 1); 210 ià(! ‹¡ ) { 211 ià( de¡roy ) 212 `de¡roy ( u£r_d©a ); 216 ‹¡ -> Çme = `¡rdup (name); 217 ‹¡ -> »suÉ = TEST_RESULT_NOT_RUN ; 218 ‹¡ -> ¡age = TEST_STAGE_INVALID ; 220 ‹¡ -> ‹¡_d©a =est_data; 222 ià( ´e_£tup_func ) 223 ‹¡ -> ´e_£tup_func =…re_setup_func; 225 ‹¡ -> ´e_£tup_func = deçuÉ_´e_£tup ; 227 ià( £tup_func ) 228 ‹¡ -> £tup_func = setup_func; 230 ‹¡ -> £tup_func = deçuÉ_£tup ; 232 ‹¡ -> ‹¡_func =est_func; 234 ià( ‹¬down_func ) 235 ‹¡ -> ‹¬down_func =eardown_func; 237 ‹¡ -> ‹¬down_func = deçuÉ_‹¬down ; 239 ià( po¡_‹¬down_func ) 240 ‹¡ -> po¡_‹¬down_func =…ost_teardown_func; 242 ‹¡ -> po¡_‹¬down_func = deçuÉ_po¡_‹¬down ; 244 ‹¡ -> timeout =imeout; 246 ‹¡ -> de¡roy = destroy; 247 ‹¡ -> u£r_d©a = user_data; 249 ‹¡_li¡ = `g_li¡_­³nd Ñe¡_li¡, ‹¡ ); 250 } } 252  $‹¡”_add (cÚ¡ * Çme , cÚ¡ * ‹¡_d©a , 253 ‹¡”_d©a_func_t £tup_func , 254 ‹¡”_d©a_func_t ‹¡_func , 255 ‹¡”_d©a_func_t ‹¬down_func ) 257 `‹¡”_add_fuÎ ( Çme , ‹¡_d©a , NULL , £tup_func , ‹¡_func , 258 ‹¬down_func , NULL , 0, NULL, NULL); 259 } } 261 * $‹¡”_g‘_d©a () 263  ‹¡_ÿ£ * ‹¡ ; 265 ià(! ‹¡_cu¼’t ) 266  NULL ; 268 ‹¡ = ‹¡_cu¼’t -> d©a ; 270  ‹¡ -> u£r_d©a ; 271 } } 273  $‹¡”_summ¬ize () 275  nÙ_run = 0, ·s£d = 0, çžed = 0; 276 gdoubË executiÚ_time ; 277 GLi¡ * li¡ ; 279 `´štf ("\n"); 280 `´št_‹xt ( COLOR_HIGHLIGHT , ""); 281 `´št_‹xt ( COLOR_HIGHLIGHT , "Test Summary"); 282 `´št_‹xt ( COLOR_HIGHLIGHT , "------------"); 284  li¡ = `g_li¡_fœ¡ ( ‹¡_li¡ );†i¡;†i¡ = `g_li¡_Ãxt (list)) { 285  ‹¡_ÿ£ * ‹¡ = li¡ -> d©a ; 286 gdoubË exec_time ; 288 exec_time = ‹¡ -> ’d_time -e¡-> ¡¬t_time ; 290  ‹¡ -> »suÉ ) { 291  TEST_RESULT_NOT_RUN : 292 `´št_summ¬y ( ‹¡ -> Çme , COLOR_YELLOW , "Not Run", ""); 293 nÙ_run ++; 295  TEST_RESULT_PASSED : 296 `´št_summ¬y ( ‹¡ -> Çme , COLOR_GREEN , "Passed", 297 "%8.3à£cÚds", exec_time ); 298 ·s£d ++; 300  TEST_RESULT_FAILED : 301 `´št_summ¬y ( ‹¡ -> Çme , COLOR_RED , "Failed", 302 "%8.3à£cÚds", exec_time ); 303 çžed ++; 305  TEST_RESULT_TIMED_OUT : 306 `´št_summ¬y ( ‹¡ -> Çme , COLOR_RED , "Timed out", 307 "%8.3à£cÚds", exec_time ); 308 çžed ++; 313 `´štf ("\nTotal: %d, " 314 COLOR_GREEN "Pas£d: %d (%.1f%%)" COLOR_OFF ", " 315 COLOR_RED "Fažed: %d" COLOR_OFF ", " 316 COLOR_YELLOW "NÙ Run: %d" COLOR_OFF "\n", 317 nÙ_run + ·s£d + çžed ,…assed, 318 (è ·s£d * 100 / ( nÙ_run +…as£d + çžed ), 319 çžed , nÙ_run ); 321 executiÚ_time = `g_tim”_–­£d ( ‹¡_tim” , NULL ); 322 `´štf ("Ov”®ÈexecutiÚime: %.3g secÚds\n", executiÚ_time ); 324 } } 326  gboÞ—n $‹¬down_ÿÎback ( gpoš‹r u£r_d©a ) 328  ‹¡_ÿ£ * ‹¡ = u£r_d©a ; 330 ‹¡ -> ¡age = TEST_STAGE_TEARDOWN ; 332 `´št_´og»ss ( ‹¡ -> Çme , COLOR_MAGENTA , "teardown"); 333 ‹¡ -> `‹¬down_func Ñe¡-> ‹¡_d©a ); 335  FALSE ; 336 } } 338  gboÞ—n $‹¡_timeout ( gpoš‹r u£r_d©a ) 340  ‹¡_ÿ£ * ‹¡ = u£r_d©a ; 342 ‹¡ -> timeout_id = 0; 344 ià(! ‹¡_cu¼’t ) 345  FALSE ; 347 ‹¡ -> »suÉ = TEST_RESULT_TIMED_OUT ; 348 `´št_´og»ss ( ‹¡ -> Çme , COLOR_RED , "testimed out"); 350 `g_idË_add ( ‹¬down_ÿÎback , ‹¡ ); 352  FALSE ; 353 } } 355  $Ãxt_‹¡_ÿ£ () 357  ‹¡_ÿ£ * ‹¡ ; 359 ià( ‹¡_cu¼’t ) 360 ‹¡_cu¼’t = `g_li¡_Ãxt (test_current); 362 ‹¡_cu¼’t = ‹¡_li¡ ; 364 ià(! ‹¡_cu¼’t ) { 365 `g_tim”_¡Ý ( ‹¡_tim” ); 367 `g_maš_loÝ_qu™ ( maš_loÝ ); 371 ‹¡ = ‹¡_cu¼’t -> d©a ; 373 `´štf ("\n"); 374 `´št_´og»ss ( ‹¡ -> Çme , COLOR_BLACK , "init"); 376 ‹¡ -> ¡¬t_time = `g_tim”_–­£d ( ‹¡_tim” , NULL ); 378 ià( ‹¡ -> timeout > 0) 379 ‹¡ -> timeout_id = `g_timeout_add_£cÚds Ñe¡-> timeout , 380 ‹¡_timeout , ‹¡ ); 382 ‹¡ -> ¡age = TEST_STAGE_PRE_SETUP ; 384 ‹¡ -> `´e_£tup_func Ñe¡-> ‹¡_d©a ); 385 } } 387  gboÞ—n $£tup_ÿÎback ( gpoš‹r u£r_d©a ) 389  ‹¡_ÿ£ * ‹¡ = u£r_d©a ; 391 ‹¡ -> ¡age = TEST_STAGE_SETUP ; 393 `´št_´og»ss ( ‹¡ -> Çme , COLOR_BLUE , "setup"); 394 ‹¡ -> `£tup_func Ñe¡-> ‹¡_d©a ); 396  FALSE ; 397 } } 399  gboÞ—n $run_ÿÎback ( gpoš‹r u£r_d©a ) 401  ‹¡_ÿ£ * ‹¡ = u£r_d©a ; 403 ‹¡ -> ¡age = TEST_STAGE_RUN ; 405 `´št_´og»ss ( ‹¡ -> Çme , COLOR_BLACK , "run"); 406 ‹¡ -> `‹¡_func Ñe¡-> ‹¡_d©a ); 408  FALSE ; 409 } } 411  gboÞ—n $dÚe_ÿÎback ( gpoš‹r u£r_d©a ) 413  ‹¡_ÿ£ * ‹¡ = u£r_d©a ; 415 ‹¡ -> ’d_time = `g_tim”_–­£d ( ‹¡_tim” , NULL ); 417 `´št_´og»ss ( ‹¡ -> Çme , COLOR_BLACK , "done"); 418 `Ãxt_‹¡_ÿ£ (); 420  FALSE ; 421 } } 423  $‹¡”_´e_£tup_com¶‘e () 425  ‹¡_ÿ£ * ‹¡ ; 427 ià(! ‹¡_cu¼’t ) 430 ‹¡ = ‹¡_cu¼’t -> d©a ; 432 ià( ‹¡ -> ¡age !ð TEST_STAGE_PRE_SETUP ) 435 `g_idË_add ( £tup_ÿÎback , ‹¡ ); 436 } } 438  $‹¡”_´e_£tup_çžed () 440  ‹¡_ÿ£ * ‹¡ ; 442 ià(! ‹¡_cu¼’t ) 445 ‹¡ = ‹¡_cu¼’t -> d©a ; 447 ià( ‹¡ -> ¡age !ð TEST_STAGE_PRE_SETUP ) 450 `´št_´og»ss ( ‹¡ -> Çme , COLOR_RED , "pre setup failed"); 452 `g_idË_add ( dÚe_ÿÎback , ‹¡ ); 453 } } 455  $‹¡”_£tup_com¶‘e () 457  ‹¡_ÿ£ * ‹¡ ; 459 ià(! ‹¡_cu¼’t ) 462 ‹¡ = ‹¡_cu¼’t -> d©a ; 464 ià( ‹¡ -> ¡age !ð TEST_STAGE_SETUP ) 467 `´št_´og»ss ( ‹¡ -> Çme , COLOR_BLUE , "setup complete"); 469 `g_idË_add ( run_ÿÎback , ‹¡ ); 470 } } 472  $‹¡”_£tup_çžed () 474  ‹¡_ÿ£ * ‹¡ ; 476 ià(! ‹¡_cu¼’t ) 479 ‹¡ = ‹¡_cu¼’t -> d©a ; 481 ià( ‹¡ -> ¡age !ð TEST_STAGE_SETUP ) 484 ‹¡ -> ¡age = TEST_STAGE_POST_TEARDOWN ; 486 ià( ‹¡ -> timeout_id > 0) { 487 `g_sourû_»move ( ‹¡ -> timeout_id ); 488 ‹¡ -> timeout_id = 0; 491 `´št_´og»ss ( ‹¡ -> Çme , COLOR_RED , "setup failed"); 492 `´št_´og»ss ( ‹¡ -> Çme , COLOR_MAGENTA , "teardown"); 494 ‹¡ -> `po¡_‹¬down_func Ñe¡-> ‹¡_d©a ); 495 } } 497  $‹¡”_‹¡_·s£d () 499  ‹¡_ÿ£ * ‹¡ ; 501 ià(! ‹¡_cu¼’t ) 504 ‹¡ = ‹¡_cu¼’t -> d©a ; 506 ià( ‹¡ -> ¡age !ð TEST_STAGE_RUN ) 509 ià( ‹¡ -> timeout_id > 0) { 510 `g_sourû_»move ( ‹¡ -> timeout_id ); 511 ‹¡ -> timeout_id = 0; 514 ‹¡ -> »suÉ = TEST_RESULT_PASSED ; 515 `´št_´og»ss ( ‹¡ -> Çme , COLOR_GREEN , "test…assed"); 517 `g_idË_add ( ‹¬down_ÿÎback , ‹¡ ); 518 } } 520  $‹¡”_‹¡_çžed () 522  ‹¡_ÿ£ * ‹¡ ; 524 ià(! ‹¡_cu¼’t ) 527 ‹¡ = ‹¡_cu¼’t -> d©a ; 529 ià( ‹¡ -> ¡age !ð TEST_STAGE_RUN ) 532 ià( ‹¡ -> timeout_id > 0) { 533 `g_sourû_»move ( ‹¡ -> timeout_id ); 534 ‹¡ -> timeout_id = 0; 537 ‹¡ -> »suÉ = TEST_RESULT_FAILED ; 538 `´št_´og»ss ( ‹¡ -> Çme , COLOR_RED , "test failed"); 540 `g_idË_add ( ‹¬down_ÿÎback , ‹¡ ); 541 } } 543  $‹¡”_‹¬down_com¶‘e () 545  ‹¡_ÿ£ * ‹¡ ; 547 ià(! ‹¡_cu¼’t ) 550 ‹¡ = ‹¡_cu¼’t -> d©a ; 552 ià( ‹¡ -> ¡age !ð TEST_STAGE_TEARDOWN ) 555 ‹¡ -> ¡age = TEST_STAGE_POST_TEARDOWN ; 557 ‹¡ -> `po¡_‹¬down_func Ñe¡-> ‹¡_d©a ); 558 } } 560  $‹¡”_‹¬down_çžed () 562  ‹¡_ÿ£ * ‹¡ ; 564 ià(! ‹¡_cu¼’t ) 567 ‹¡ = ‹¡_cu¼’t -> d©a ; 569 ià( ‹¡ -> ¡age !ð TEST_STAGE_TEARDOWN ) 572 ‹¡ -> ¡age = TEST_STAGE_POST_TEARDOWN ; 574 `‹¡”_po¡_‹¬down_çžed (); 575 } } 577  $‹¡”_po¡_‹¬down_com¶‘e () 579  ‹¡_ÿ£ * ‹¡ ; 581 ià(! ‹¡_cu¼’t ) 584 ‹¡ = ‹¡_cu¼’t -> d©a ; 586 ià( ‹¡ -> ¡age !ð TEST_STAGE_POST_TEARDOWN ) 589 `´št_´og»ss ( ‹¡ -> Çme , COLOR_MAGENTA , "teardown complete"); 591 `g_idË_add ( dÚe_ÿÎback , ‹¡ ); 592 } } 594  $‹¡”_po¡_‹¬down_çžed () 596  ‹¡_ÿ£ * ‹¡ ; 598 ià(! ‹¡_cu¼’t ) 601 ‹¡ = ‹¡_cu¼’t -> d©a ; 603 ià( ‹¡ -> ¡age !ð TEST_STAGE_POST_TEARDOWN ) 606 `´št_´og»ss ( ‹¡ -> Çme , COLOR_RED , "teardown failed"); 608 `g_idË_add ( dÚe_ÿÎback , ‹¡ ); 609 } } 611  gboÞ—n $¡¬t_‹¡” ( gpoš‹r u£r_d©a ) 613 ‹¡_tim” = `g_tim”_Ãw (); 615 `Ãxt_‹¡_ÿ£ (); 617  FALSE ; 618 } } 620  swa™_d©a { 621  m£cÚds ; 622  ‹¡_ÿ£ * m‹¡ ; 623 ‹¡”_wa™_func_t mfunc ; 624 * mu£r_d©a ; 627  gboÞ—n $wa™_ÿÎback ( gpoš‹r u£r_d©a ) 629  wa™_d©a * wa™ = u£r_d©a ; 630  ‹¡_ÿ£ * ‹¡ = wa™ ->test; 632 wa™ -> £cÚds --; 634 ià( wa™ -> £cÚds > 0) { 635 `´št_´og»ss ( ‹¡ -> Çme , COLOR_BLACK , "%u seconds†eft", 636 wa™ -> £cÚds ); 637  TRUE ; 640 `´št_´og»ss ( ‹¡ -> Çme , COLOR_BLACK , "waiting done"); 642 wa™ -> `func (wa™-> u£r_d©a ); 644 `ä“ ( wa™ ); 646  FALSE ; 647 } } 649  $‹¡”_wa™ ( £cÚds , ‹¡”_wa™_func_t func , 650 * u£r_d©a ) 652  ‹¡_ÿ£ * ‹¡ ; 653  wa™_d©a * wa™ ; 655 ià(! func || £cÚds < 1) 658 ià(! ‹¡_cu¼’t ) 661 ‹¡ = ‹¡_cu¼’t -> d©a ; 663 wa™ = `Ãw0 ( wa™_d©a , 1); 664 ià(! wa™ ) 667 wa™ -> £cÚds = seconds; 668 wa™ -> ‹¡ =est; 669 wa™ -> func = func; 670 wa™ -> u£r_d©a = user_data; 672 `g_timeout_add (1000, wa™_ÿÎback , wa™ ); 674 `´št_´og»ss ( ‹¡ -> Çme , COLOR_BLACK , "wa™šg %u secÚds", £cÚds ); 675 } } 677  gboÞ—n $sigÇl_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd™iÚ , 678 gpoš‹r u£r_d©a ) 680  __‹rmš©ed = 0; 681  sigÇlfd_sigšfo si ; 682 ssize_t »suÉ ; 683  fd ; 685 ià( cÚd™iÚ & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 686 `g_maš_loÝ_qu™ ( maš_loÝ ); 687  FALSE ; 690 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 692 »suÉ = `»ad ( fd , & si , (si)); 693 ià( »suÉ !ð( si )) 694  FALSE ; 696  si . ssi_signo ) { 697  SIGINT : 698  SIGTERM : 699 ià( __‹rmš©ed == 0) 700 `g_maš_loÝ_qu™ ( maš_loÝ ); 702 __‹rmš©ed = 1; 706  TRUE ; 707 } } 709  gušt $£tup_sigÇlfd () 711 GIOChªÃl * chªÃl ; 712 gušt sourû ; 713 sig£t_t mask ; 714  fd ; 716 `sigem±y£t (& mask ); 717 `sigadd£t (& mask , SIGINT ); 718 `sigadd£t (& mask , SIGTERM ); 720 ià( `sig´ocmask ( SIG_BLOCK , & mask , NULL ) < 0) { 721 `³¼Ü ("Failedo set signal mask"); 725 fd = `sigÇlfd (-1, & mask , 0); 726 ià( fd < 0) { 727 `³¼Ü ("Failedo create signal descriptor"); 731 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 733 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 734 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 735 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 737 sourû = `g_io_add_w©ch ( chªÃl , 738 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 739 sigÇl_hªdËr , NULL ); 741 `g_io_chªÃl_uÄef ( chªÃl ); 743  sourû ; 744 } } 746 boÞ $‹¡”_u£_qu›t () 748  ÝtiÚ_qu›t =ð TRUE ? Œue : çl£ ; 749 } } 751 boÞ $‹¡”_u£_debug () 753  ÝtiÚ_debug =ð TRUE ? Œue : çl£ ; 754 } } 756  GO±iÚEÁry gÝtiÚs [] = { 757 { "v”siÚ", 'v', 0, G_OPTION_ARG_NONE , & ÝtiÚ_v”siÚ , 759 { "qu›t", 'q', 0, G_OPTION_ARG_NONE , & ÝtiÚ_qu›t , 761 { "debug", 'd', 0, G_OPTION_ARG_NONE , & ÝtiÚ_debug , 763 { "li¡", 'l', 0, G_OPTION_ARG_NONE , & ÝtiÚ_li¡ , 765 { "´efix", 'p', 0, G_OPTION_ARG_STRING , & ÝtiÚ_´efix , 767 { NULL }, 770  $‹¡”_š™ (* ¬gc , *** ¬gv ) 772 GO±iÚCÚ‹xt * cÚ‹xt ; 773 GE¼Ü * ”rÜ = NULL ; 775 cÚ‹xt = `g_ÝtiÚ_cÚ‹xt_Ãw ( NULL ); 776 `g_ÝtiÚ_cÚ‹xt_add_maš_’Œ›s ( cÚ‹xt , ÝtiÚs , NULL ); 778 ià( `g_ÝtiÚ_cÚ‹xt_·r£ ( cÚ‹xt , ¬gc , ¬gv , & ”rÜ è=ð FALSE ) { 779 ià( ”rÜ !ð NULL ) { 780 `g_´š‹¼ ("%s\n", ”rÜ -> mes§ge ); 781 `g_”rÜ_ä“ ( ”rÜ ); 783 `g_´š‹¼ ("An unknownƒrror occurred\n"); 784 `ex™ (1); 787 `g_ÝtiÚ_cÚ‹xt_ä“ ( cÚ‹xt ); 789 ià( ÝtiÚ_v”siÚ =ð TRUE ) { 790 `g_´št ("%s\n", VERSION ); 791 `ex™ ( EXIT_SUCCESS ); 794 maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 796 ‹¡_li¡ = NULL ; 797 ‹¡_cu¼’t = NULL ; 798 } } 800  $‹¡”_run () 802 gušt sigÇl ; 804 ià(! maš_loÝ ) 805  EXIT_FAILURE ; 807 ià( ÝtiÚ_li¡ ) { 808 `g_maš_loÝ_uÄef ( maš_loÝ ); 809  EXIT_SUCCESS ; 812 sigÇl = `£tup_sigÇlfd (); 814 `g_idË_add ( ¡¬t_‹¡” , NULL ); 815 `g_maš_loÝ_run ( maš_loÝ ); 817 `g_sourû_»move ( sigÇl ); 819 `g_maš_loÝ_uÄef ( maš_loÝ ); 821 `‹¡”_summ¬ize (); 823 `g_li¡_ä“_fuÎ ( ‹¡_li¡ , ‹¡_de¡roy ); 825  EXIT_SUCCESS ; 826 } } @src/shared/tester.h 24  ~<¡dboÞ.h > 26  ‹¡”_š™ (* ¬gc , *** ¬gv ); 27  ‹¡”_run (); 29 boÞ ‹¡”_u£_qu›t (); 30 boÞ ‹¡”_u£_debug (); 32  $‹¡”_´št (cÚ¡ * fÜm© , ...) 33 `__©Œibu‹__ (( `fÜm© ( ´štf , 1, 2))); 34  $‹¡”_w¬n (cÚ¡ * fÜm© , ...) 35 `__©Œibu‹__ (( `fÜm© ( ´štf , 1, 2))); 36  $‹¡”_debug (cÚ¡ * fÜm© , ...) 37 `__©Œibu‹__ (( `fÜm© ( ´štf , 1, 2))); 39 (* t‹¡”_de¡roy_func_t )(* tu£r_d©a ); 40 (* t‹¡”_d©a_func_t )(cÚ¡ * t‹¡_d©a ); 42  `‹¡”_add_fuÎ (cÚ¡ * Çme , cÚ¡ * ‹¡_d©a , 43 ‹¡”_d©a_func_t ´e_£tup_func , 44 ‹¡”_d©a_func_t £tup_func , 45 ‹¡”_d©a_func_t ‹¡_func , 46 ‹¡”_d©a_func_t ‹¬down_func , 47 ‹¡”_d©a_func_t po¡_‹¬down_func , 48  timeout , 49 * u£r_d©a , ‹¡”_de¡roy_func_t de¡roy ); 51  `‹¡”_add (cÚ¡ * Çme , cÚ¡ * ‹¡_d©a , 52 ‹¡”_d©a_func_t £tup_func , 53 ‹¡”_d©a_func_t ‹¡_func , 54 ‹¡”_d©a_func_t ‹¬down_func ); 56 * `‹¡”_g‘_d©a (); 58  `‹¡”_´e_£tup_com¶‘e (); 59  `‹¡”_´e_£tup_çžed (); 61  `‹¡”_£tup_com¶‘e (); 62  `‹¡”_£tup_çžed (); 64  `‹¡”_‹¡_·s£d (); 65  `‹¡”_‹¡_çžed (); 67  `‹¡”_‹¬down_com¶‘e (); 68  `‹¡”_‹¬down_çžed (); 70  `‹¡”_po¡_‹¬down_com¶‘e (); 71  `‹¡”_po¡_‹¬down_çžed (); 73 (* t‹¡”_wa™_func_t )(* tu£r_d©a ); 75  `‹¡”_wa™ ( £cÚds , ‹¡”_wa™_func_t func , 76 * u£r_d©a ); @src/shared/timeout-glib.c 20  ~"timeout.h " 22  ~ 24  stimeout_d©a { 25 timeout_func_t mfunc ; 26 timeout_de¡roy_func_t mde¡roy ; 27 * mu£r_d©a ; 30  gboÞ—n $timeout_ÿÎback ( gpoš‹r u£r_d©a ) 32  timeout_d©a * d©a = u£r_d©a ; 34 ià( d©a -> `func (d©a-> u£r_d©a )) 35  TRUE ; 37  FALSE ; 38 } } 40  $timeout_de¡roy ( gpoš‹r u£r_d©a ) 42  timeout_d©a * d©a = u£r_d©a ; 44 ià( d©a -> de¡roy ) 45 d©a -> `de¡roy (d©a-> u£r_d©a ); 47 `g_ä“ ( d©a ); 48 } } 50  $timeout_add ( timeout , timeout_func_t func , 51 * u£r_d©a , timeout_de¡roy_func_t de¡roy ) 53  timeout_d©a * d©a ; 54 gušt id ; 56 d©a = `g_Œy_Ãw0 ( timeout_d©a , 1); 57 ià(! d©a ) 60 d©a -> func = func; 61 d©a -> de¡roy = destroy; 62 d©a -> u£r_d©a = user_data; 64 id = `g_timeout_add_fuÎ ( G_PRIORITY_DEFAULT , timeout , timeout_ÿÎback , 65 d©a , timeout_de¡roy ); 66 ià(! id ) 67 `g_ä“ ( d©a ); 69  id ; 70 } } 72  $timeout_»move ( id ) 74 GSourû * sourû = `g_maš_cÚ‹xt_fšd_sourû_by_id ( NULL , id ); 76 ià( sourû ) 77 `g_sourû_de¡roy ( sourû ); 78 } } @src/shared/timeout-mainloop.c 20  ~<¡dlib.h > 22  ~"mÚ™Ü/mašloÝ.h " 24  ~"utž.h " 25  ~"timeout.h " 27  stimeout_d©a { 28  mid ; 29 timeout_func_t mfunc ; 30 timeout_de¡roy_func_t mde¡roy ; 31  mtimeout ; 32 * mu£r_d©a ; 35  $timeout_ÿÎback ( id , * u£r_d©a ) 37  timeout_d©a * d©a = u£r_d©a ; 39 ià( d©a -> `func (d©a-> u£r_d©a ) && 40 ! `mašloÝ_modify_timeout ( d©a -> id , d©a-> timeout )) 43 `mašloÝ_»move_timeout ( d©a -> id ); 44 } } 46  $timeout_de¡roy (* u£r_d©a ) 48  timeout_d©a * d©a = u£r_d©a ; 50 ià( d©a -> de¡roy ) 51 d©a -> `de¡roy (d©a-> u£r_d©a ); 53 `ä“ ( d©a ); 54 } } 56  $timeout_add ( timeout , timeout_func_t func , 57 * u£r_d©a , timeout_de¡roy_func_t de¡roy ) 59  timeout_d©a * d©a ; 61 d©a = `Ãw0 ( timeout_d©a , 1); 62 ià(! d©a ) 65 d©a -> func = func; 66 d©a -> u£r_d©a = user_data; 67 d©a -> timeout =imeout; 68 d©a -> de¡roy = destroy; 70 d©a -> id = `mašloÝ_add_timeout ( timeout , timeout_ÿÎback , data, 71 timeout_de¡roy ); 72 ià( d©a -> id < 0) { 73 `ä“ ( d©a ); 77  (è d©a -> id ; 78 } } 80  $timeout_»move ( id ) 82 ià(! id ) 85 `mašloÝ_»move_timeout ((è id ); 86 } } @src/shared/timeout.h 20  ~<¡dboÞ.h > 22  $boÞ (* ttimeout_func_t )(* tu£r_d©a ); 23 (* ttimeout_de¡roy_func_t )(* tu£r_d©a ); 25  `timeout_add ( timeout , timeout_func_t func , 26 * u£r_d©a , timeout_de¡roy_func_t de¡roy ); 27  `timeout_»move ( id ); @src/shared/uhid.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~ 30  ~<¡ršg.h > 31  ~<”ºo.h > 32  ~ 34  ~"¤c/sh¬ed/io.h " 35  ~"¤c/sh¬ed/utž.h " 36  ~"¤c/sh¬ed/queue.h " 37  ~"¤c/sh¬ed/uhid.h " 39  #UHID_DEVICE_FILE "/dev/uhid" ) 41  sbt_uhid { 42  m»f_couÁ ; 43  io * mio ; 44  mnÙify_id ; 45  queue * mnÙify_li¡ ; 48  suhid_nÙify { 49  mid ; 50 ušt32_t mev’t ; 51 bt_uhid_ÿÎback_t mfunc ; 52 * mu£r_d©a ; 55  $uhid_ä“ ( bt_uhid * uhid ) 57 ià( uhid -> io ) 58 `io_de¡roy ( uhid -> io ); 60 ià( uhid -> nÙify_li¡ ) 61 `queue_de¡roy ( uhid -> nÙify_li¡ , ä“ ); 63 `ä“ ( uhid ); 64 } } 66  $nÙify_hªdËr (* d©a , * u£r_d©a ) 68  uhid_nÙify * nÙify = d©a ; 69  uhid_ev’t * ev = u£r_d©a ; 71 ià( nÙify -> ev’t !ð ev -> ty³ ) 74 ià( nÙify -> func ) 75 nÙify -> `func ( ev ,‚Ùify-> u£r_d©a ); 76 } } 78  boÞ $uhid_»ad_hªdËr ( io *io, * u£r_d©a ) 80  bt_uhid * uhid = u£r_d©a ; 81  fd ; 82 ssize_t Ën ; 83  uhid_ev’t ev ; 85 fd = `io_g‘_fd ( io ); 86 ià( fd < 0) 87  çl£ ; 89 `mem£t (& ev , 0, (ev)); 91 Ën = `»ad ( fd , & ev , (ev)); 92 ià( Ën < 0) 93  çl£ ; 95 ià(( size_t è Ën < ( ev . ty³ )) 96  çl£ ; 98 `queue_fÜ—ch ( uhid -> nÙify_li¡ , nÙify_hªdËr , & ev ); 100  Œue ; 101 } } 103  bt_uhid * $bt_uhid_Ãw_deçuÉ () 105  bt_uhid * uhid ; 106  fd ; 108 fd = `Ý’ ( UHID_DEVICE_FILE , O_RDWR | O_CLOEXEC ); 109 ià( fd < 0) 110  NULL ; 112 uhid = `bt_uhid_Ãw ( fd ); 113 ià(! uhid ) { 114 `þo£ ( fd ); 115  NULL ; 118 `io_£t_þo£_Ú_de¡roy ( uhid -> io , Œue ); 120  uhid ; 121 } } 123  bt_uhid * $bt_uhid_Ãw ( fd ) 125  bt_uhid * uhid ; 127 uhid = `Ãw0 ( bt_uhid , 1); 128 ià(! uhid ) 129  NULL ; 131 uhid -> io = `io_Ãw ( fd ); 132 ià(! uhid -> io ) 133  çžed ; 135 uhid -> nÙify_li¡ = `queue_Ãw (); 136 ià(! uhid -> nÙify_li¡ ) 137  çžed ; 139 ià(! `io_£t_»ad_hªdËr ( uhid -> io , uhid_»ad_hªdËr , uhid, NULL )) 140  çžed ; 142  `bt_uhid_»f ( uhid ); 144 çžed : 145 `uhid_ä“ ( uhid ); 146  NULL ; 147 } } 149  bt_uhid * $bt_uhid_»f ( bt_uhid * uhid ) 151 ià(! uhid ) 152  NULL ; 154 `__sync_ãtch_ªd_add (& uhid -> »f_couÁ , 1); 156  uhid ; 157 } } 159  $bt_uhid_uÄef ( bt_uhid * uhid ) 161 ià(! uhid ) 164 ià( `__sync_sub_ªd_ãtch (& uhid -> »f_couÁ , 1)) 167 `uhid_ä“ ( uhid ); 168 } } 170 boÞ $bt_uhid_£t_þo£_Ú_uÄef ( bt_uhid * uhid , boÞ do_þo£ ) 172 ià(! uhid || !uhid-> io ) 173  çl£ ; 175 `io_£t_þo£_Ú_de¡roy ( uhid -> io , do_þo£ ); 177  Œue ; 178 } } 180  $bt_uhid_»gi¡” ( bt_uhid * uhid , ušt32_t ev’t , 181 bt_uhid_ÿÎback_t func , * u£r_d©a ) 183  uhid_nÙify * nÙify ; 185 ià(! uhid ) 188 nÙify = `Ãw0 ( uhid_nÙify , 1); 189 ià(! nÙify ) 192 nÙify -> id = uhid -> nÙify_id ++; 193 nÙify -> ev’t =ƒvent; 194 nÙify -> func = func; 195 nÙify -> u£r_d©a = user_data; 197 ià(! `queue_push_ž ( uhid -> nÙify_li¡ , nÙify )) { 198 `ä“ ( nÙify ); 202  nÙify -> id ; 203 } } 205  boÞ $m©ch_nÙify_id (cÚ¡ * a , cÚ¡ * b ) 207 cÚ¡  uhid_nÙify * nÙify = a ; 208  id = `PTR_TO_UINT ( b ); 210  nÙify -> id == id; 211 } } 213 boÞ $bt_uhid_uÄegi¡” ( bt_uhid * uhid ,  id ) 215  uhid_nÙify * nÙify ; 217 ià(! uhid || ! id ) 218  çl£ ; 220 nÙify = `queue_»move_if ( uhid -> nÙify_li¡ , m©ch_nÙify_id , 221 `UINT_TO_PTR ( id )); 222 ià(! nÙify ) 223  çl£ ; 225 `ä“ ( nÙify ); 226  Œue ; 227 } } 229  $bt_uhid_£nd ( bt_uhid * uhid , cÚ¡  uhid_ev’t * ev ) 231 ssize_t Ën ; 232  iovec iov ; 234 ià(! uhid -> io ) 235  - ENOTCONN ; 237 iov . iov_ba£ = (*è ev ; 238 iov . iov_Ën = (* ev ); 240 Ën = `io_£nd ( uhid -> io , & iov , 1); 241 ià( Ën < 0) 242  - ”ºo ; 245  Ën !ð(* ev è? - EIO : 0; 246 } } @src/shared/uhid.h 24  ~<¡dboÞ.h > 25  ~<¡dšt.h > 27  ~"´ofžes/šput/uhid_cÝy.h " 29  gbt_uhid ; 31  bt_uhid * bt_uhid_Ãw_deçuÉ (); 32  bt_uhid * bt_uhid_Ãw ( fd ); 34  bt_uhid * bt_uhid_»f (bt_uhid * uhid ); 35  bt_uhid_uÄef ( bt_uhid * uhid ); 37 boÞ bt_uhid_£t_þo£_Ú_uÄef ( bt_uhid * uhid , boÞ do_þo£ ); 39 (* tbt_uhid_ÿÎback_t )( tuhid_ev’t * tev , * tu£r_d©a ); 40  `bt_uhid_»gi¡” ( bt_uhid * uhid , ušt32_t ev’t , 41 bt_uhid_ÿÎback_t func , * u£r_d©a ); 42 boÞ `bt_uhid_uÄegi¡” ( bt_uhid * uhid ,  id ); 44  `bt_uhid_£nd ( bt_uhid * uhid , cÚ¡  uhid_ev’t * ev ); @src/shared/util.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<ùy³.h > 30  ~<¡d¬g.h > 31  ~ 32  ~ 33  ~ 34  ~ 35  ~ 37  ~"¤c/sh¬ed/utž.h " 39  $utž_debug ( utž_debug_func_t funùiÚ , * u£r_d©a , 40 cÚ¡ * fÜm© , ...) 42  ¡r [78]; 43 va_li¡ ­ ; 45 ià(! funùiÚ || ! fÜm© ) 48 `va_¡¬t ( ­ , fÜm© ); 49 `v¢´štf ( ¡r , (¡r), fÜm© , ­ ); 50 `va_’d ( ­ ); 52 `funùiÚ ( ¡r , u£r_d©a ); 53 } } 55  $utž_hexdump (cÚ¡  dœ , cÚ¡ * buf , size_t Ën , 56 utž_debug_func_t funùiÚ , * u£r_d©a ) 58 cÚ¡  hexdig™s [] = "0123456789abcdef"; 59  ¡r [68]; 60 size_t i ; 62 ià(! funùiÚ || ! Ën ) 65 ¡r [0] = dœ ; 67  i = 0; i < Ën ; i++) { 68 ¡r [(( i % 16) * 3) + 1] = ' '; 69 ¡r [(( i % 16è* 3è+ 2] = hexdig™s [ buf [i] >> 4]; 70 ¡r [(( i % 16è* 3è+ 3] = hexdig™s [ buf [i] & 0xf]; 71 ¡r [( i % 16è+ 51] = `i¥ršt ( buf [i]) ? buf[i] : '.'; 73 ià(( i + 1) % 16 == 0) { 74 ¡r [49] = ' '; 75 ¡r [50] = ' '; 76 ¡r [67] = '\0'; 77 `funùiÚ ( ¡r , u£r_d©a ); 78 ¡r [0] = ' '; 82 ià( i % 16 > 0) { 83 size_t j ; 84  j = ( i % 16); j < 16; j++) { 85 ¡r [( j * 3) + 1] = ' '; 86 ¡r [( j * 3) + 2] = ' '; 87 ¡r [( j * 3) + 3] = ' '; 88 ¡r [ j + 51] = ' '; 90 ¡r [49] = ' '; 91 ¡r [50] = ' '; 92 ¡r [67] = '\0'; 93 `funùiÚ ( ¡r , u£r_d©a ); 95 } } 98  $utž_g‘_dt (cÚ¡ * ·»Á , cÚ¡ * Çme ) 100  fž’ame [ PATH_MAX ]; 101  ¡© ¡ ; 103 `¢´štf ( fž’ame , (fž’ame), "%s/%s", ·»Á , Çme ); 104 ià( `l¡© ( fž’ame , & ¡ è=ð0 && `S_ISDIR (¡. ¡_mode )) 105  DT_DIR ; 107  DT_UNKNOWN ; 108 } } @src/shared/util.h 24  ~<¡dšt.h > 25  ~<¡dlib.h > 26  ~<®loÿ.h > 27  ~ 29 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 30  #Ë16_to_ýu ( v® è(v®) ) 31  #Ë32_to_ýu ( v® è(v®) ) 32  #Ë64_to_ýu ( v® è(v®) ) 33  #ýu_to_Ë16 ( v® è(v®) ) 34  #ýu_to_Ë32 ( v® è(v®) ) 35  #ýu_to_Ë64 ( v® è(v®) ) 36  #be16_to_ýu ( v® è `bsw­_16 (v®) ) 37  #be32_to_ýu ( v® è `bsw­_32 (v®) ) 38  #be64_to_ýu ( v® è `bsw­_64 (v®) ) 39  #ýu_to_be16 ( v® è `bsw­_16 (v®) ) 40  #ýu_to_be32 ( v® è `bsw­_32 (v®) ) 41  #ýu_to_be64 ( v® è `bsw­_64 (v®) ) 42 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 43  #Ë16_to_ýu ( v® è `bsw­_16 (v®) ) 44  #Ë32_to_ýu ( v® è `bsw­_32 (v®) ) 45  #Ë64_to_ýu ( v® è `bsw­_64 (v®) ) 46  #ýu_to_Ë16 ( v® è `bsw­_16 (v®) ) 47  #ýu_to_Ë32 ( v® è `bsw­_32 (v®) ) 48  #ýu_to_Ë64 ( v® è `bsw­_64 (v®) ) 49  #be16_to_ýu ( v® è(v®) ) 50  #be32_to_ýu ( v® è(v®) ) 51  #be64_to_ýu ( v® è(v®) ) 52  #ýu_to_be16 ( v® è(v®) ) 53  #ýu_to_be32 ( v® è(v®) ) 54  #ýu_to_be64 ( v® è(v®) ) 59  #g‘_uÇligÃd ( ±r ) \ 60 `__ex‹nsiÚ__ ({ \ 61  `__©Œibu‹__ (( ·cked )) { \ 62 `__ty³of__ (*( ±r )è __v ; \ 63 } * __p = ( `__ty³of__ (__p)è( ±r ); \ 64 __p -> __v ; \ 65 }) ) 67  #put_uÇligÃd ( v® , ±r ) \ 69  `__©Œibu‹__ (( ·cked )) { \ 70 `__ty³of__ (*( ±r )è __v ; \ 71 } * __p = ( `__ty³of__ (__p)è( ±r ); \ 72 __p -> __v = ( v® ); \ 73 } 0) ) 75  #PTR_TO_UINT ( p è((è(( ušŒ_t èÕ))) ) 76  #UINT_TO_PTR ( u è((*è(( ušŒ_t è(u))) ) 78  #PTR_TO_INT ( p è((è(( šŒ_t èÕ))) ) 79  #INT_TO_PTR ( u è((*è(( šŒ_t è(u))) ) 81  #Ãw0 ( t , n è(Ñ*è `ÿÎoc (Ò), Ñ))) ) 82  #Ãwa ( t , n è(Ñ*è `®loÿ (Ñ)*Ò))) ) 83  #m®loc0 ( n è( `ÿÎoc (Ò), 1)) ) 85 (* tutž_debug_func_t )(cÚ¡ * t¡r , * tu£r_d©a ); 87  $utž_debug ( utž_debug_func_t funùiÚ , * u£r_d©a , 88 cÚ¡ * fÜm© , ...) 89 `__©Œibu‹__ (( `fÜm© ( ´štf , 3, 4))); 91  `utž_hexdump (cÚ¡  dœ , cÚ¡ * buf , size_t Ën , 92 utž_debug_func_t funùiÚ , * u£r_d©a ); 94  `utž_g‘_dt (cÚ¡ * ·»Á , cÚ¡ * Çme ); 96  šlše  $bsw­_128 (cÚ¡ * ¤c , * d¡ ) 98 cÚ¡ ušt8_t * s = ¤c ; 99 ušt8_t * d = d¡ ; 100  i ; 102  i = 0; i < 16; i++) 103 d [15 - i ] = s [i]; 104 } } 106  šlše ušt16_t $g‘_Ë16 (cÚ¡ * ±r ) 108  `Ë16_to_ýu ( `g‘_uÇligÃd ((cÚ¡ ušt16_t *è ±r )); 109 } } 111  šlše ušt16_t $g‘_be16 (cÚ¡ * ±r ) 113  `be16_to_ýu ( `g‘_uÇligÃd ((cÚ¡ ušt16_t *è ±r )); 114 } } 116  šlše ušt32_t $g‘_Ë32 (cÚ¡ * ±r ) 118  `Ë32_to_ýu ( `g‘_uÇligÃd ((cÚ¡ ušt32_t *è ±r )); 119 } } 121  šlše ušt32_t $g‘_be32 (cÚ¡ * ±r ) 123  `be32_to_ýu ( `g‘_uÇligÃd ((cÚ¡ ušt32_t *è ±r )); 124 } } 126  šlše ušt64_t $g‘_Ë64 (cÚ¡ * ±r ) 128  `Ë64_to_ýu ( `g‘_uÇligÃd ((cÚ¡ ušt64_t *è ±r )); 129 } } 131  šlše ušt64_t $g‘_be64 (cÚ¡ * ±r ) 133  `be64_to_ýu ( `g‘_uÇligÃd ((cÚ¡ ušt64_t *è ±r )); 134 } } 136  šlše  $put_Ë16 ( ušt16_t v® , * d¡ ) 138 `put_uÇligÃd ( `ýu_to_Ë16 ( v® ), ( ušt16_t *è d¡ ); 139 } } 141  šlše  $put_be16 ( ušt16_t v® , cÚ¡ * ±r ) 143 `put_uÇligÃd ( `ýu_to_be16 ( v® ), ( ušt16_t *è ±r ); 144 } } 146  šlše  $put_Ë32 ( ušt32_t v® , * d¡ ) 148 `put_uÇligÃd ( `ýu_to_Ë32 ( v® ), ( ušt32_t *è d¡ ); 149 } } 151  šlše  $put_be32 ( ušt32_t v® , * d¡ ) 153 `put_uÇligÃd ( `ýu_to_be32 ( v® ), ( ušt32_t *è d¡ ); 154 } } 156  šlše  $put_Ë64 ( ušt64_t v® , * d¡ ) 158 `put_uÇligÃd ( `ýu_to_Ë64 ( v® ), ( ušt64_t *è d¡ ); 159 } } 161  šlše  $put_be64 ( ušt64_t v® , * d¡ ) 163 `put_uÇligÃd ( `ýu_to_be64 ( v® ), ( ušt64_t *è d¡ ); 164 } } @src/storage.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<ùy³.h > 32  ~ 33  ~ 34  ~<¡dlib.h > 35  ~ 36  ~ 37  ~ 39  ~ 41  ~ 42  ~ 43  ~ 45  ~"lib/uuid.h " 46  ~"‹xtfže.h " 47  ~"uuid-h–³r.h " 48  ~"¡Üage.h " 51  #GLOBAL_TRUST "[®l]" ) 53  sm©ch { 54 GSLi¡ * mkeys ; 55 * m·‰”n ; 58  šlše  $ü—‹_fž’ame (* buf , size_t size , 59 cÚ¡ bdaddr_t * bdaddr , cÚ¡ * Çme ) 61  addr [18]; 63 `ba2¡r ( bdaddr , addr ); 65  `ü—‹_Çme ( buf , size , STORAGEDIR , addr , Çme ); 66 } } 68  $»ad_discov”abË_timeout (cÚ¡ * ¤c , * timeout ) 70  fž’ame [ PATH_MAX ], * ¡r ; 72 `ü—‹_Çme ( fž’ame , PATH_MAX , STORAGEDIR , ¤c , "config"); 74 ¡r = `‹xtfže_g‘ ( fž’ame , "discovto"); 75 ià(! ¡r ) 76  - ENOENT ; 78 ià( `ssÿnf ( ¡r , "%d", timeout ) != 1) { 79 `ä“ ( ¡r ); 80  - ENOENT ; 83 `ä“ ( ¡r ); 86 } } 88  $»ad_·œabË_timeout (cÚ¡ * ¤c , * timeout ) 90  fž’ame [ PATH_MAX ], * ¡r ; 92 `ü—‹_Çme ( fž’ame , PATH_MAX , STORAGEDIR , ¤c , "config"); 94 ¡r = `‹xtfže_g‘ ( fž’ame , "pairto"); 95 ià(! ¡r ) 96  - ENOENT ; 98 ià( `ssÿnf ( ¡r , "%d", timeout ) != 1) { 99 `ä“ ( ¡r ); 100  - ENOENT ; 103 `ä“ ( ¡r ); 106 } } 108  $»ad_Ú_mode (cÚ¡ * ¤c , * mode ,  Ëngth ) 110  fž’ame [ PATH_MAX ], * ¡r ; 112 `ü—‹_Çme ( fž’ame , PATH_MAX , STORAGEDIR , ¤c , "config"); 114 ¡r = `‹xtfže_g‘ ( fž’ame , "onmode"); 115 ià(! ¡r ) 116  - ENOENT ; 118 `¡ºýy ( mode , ¡r , Ëngth ); 119 mode [ Ëngth - 1] = '\0'; 121 `ä“ ( ¡r ); 124 } } 126  $»ad_loÿl_Çme (cÚ¡ bdaddr_t * bdaddr , * Çme ) 128  fž’ame [ PATH_MAX ], * ¡r ; 129  Ën ; 131 `ü—‹_fž’ame ( fž’ame , PATH_MAX , bdaddr , "config"); 133 ¡r = `‹xtfže_g‘ ( fž’ame , "name"); 134 ià(! ¡r ) 135  - ENOENT ; 137 Ën = `¡¾’ ( ¡r ); 138 ià( Ën > HCI_MAX_NAME_LENGTH ) 139 ¡r [ HCI_MAX_NAME_LENGTH ] = '\0'; 140 `¡rýy ( Çme , ¡r ); 142 `ä“ ( ¡r ); 145 } } 147 #ifdeà __TIZEN_PATCH__ 148  $wr™e_deviû_ch¬aù”i¡ics (cÚ¡ bdaddr_t * sba , cÚ¡ bdaddr_ˆ* dba , 149 ušt8_t bdaddr_ty³ , ušt16_t hªdË , 150 cÚ¡ * ch¬s ) 152  fž’ame [ PATH_MAX + 1], addr [18], key [25]; 154 `ü—‹_fž’ame ( fž’ame , PATH_MAX , sba , "characteristics"); 156 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ); 158 `ba2¡r ( dba , addr ); 159 `¢´štf ( key , (key), "%17s#%hhu#%04X", addr , bdaddr_ty³ , hªdË ); 161  `‹xtfže_put ( fž’ame , key , ch¬s ); 162 } } 164 * $»ad_deviû_ch¬aù”i¡ics (cÚ¡ bdaddr_t * sba , cÚ¡ bdaddr_ˆ* dba , 165 ušt8_t bdaddr_ty³ , ušt16_t hªdË ) 167  fž’ame [ PATH_MAX + 1], addr [18], key [25]; 169 `ü—‹_fž’ame ( fž’ame , PATH_MAX , sba , "characteristics"); 171 `ba2¡r ( dba , addr ); 172 `¢´štf ( key , (key), "%17s#%hhu#%04X", addr , bdaddr_ty³ , hªdË ); 174  `‹xtfže_g‘ ( fž’ame , key ); 175 } } 177  $wr™e_deviû_©Œibu‹ (cÚ¡ bdaddr_t * sba , cÚ¡ bdaddr_ˆ* dba , 178 ušt8_t bdaddr_ty³ , ušt16_t hªdË , 179 cÚ¡ * ch¬s ) 181  fž’ame [ PATH_MAX + 1], addr [18], key [25]; 183 `ü—‹_fž’ame ( fž’ame , PATH_MAX , sba , "attributes"); 185 `ü—‹_fže ( fž’ame , S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ); 187 `ba2¡r ( dba , addr ); 188 `¢´štf ( key , (key), "%17s#%hhu#%04X", addr , bdaddr_ty³ , hªdË ); 190  `‹xtfže_put ( fž’ame , key , ch¬s ); 191 } } 194 sdp_»cÜd_t * $»cÜd_äom_¡ršg (cÚ¡ * ¡r ) 196 sdp_»cÜd_t * »c ; 197  size , i , Ën ; 198 ušt8_t * pd©a ; 199  tmp [3]; 201 size = `¡¾’ ( ¡r )/2; 202 pd©a = `g_m®loc0 ( size ); 204 tmp [2] = 0; 205  i = 0; i < size ; i++) { 206 `memýy ( tmp , ¡r + ( i * 2), 2); 207 pd©a [ i ] = ( ušt8_t è `¡¹Þ ( tmp , NULL , 16); 210 »c = `sdp_exŒaù_pdu ( pd©a , size , & Ën ); 211 `g_ä“ ( pd©a ); 213  »c ; 214 } } 216 sdp_»cÜd_t * $fšd_»cÜd_š_li¡ ( sdp_li¡_t * »cs , cÚ¡ * uuid ) 218 sdp_li¡_t * £q ; 220  £q = »cs ; seq; seq = seq-> Ãxt ) { 221 sdp_»cÜd_t * »c = (sdp_»cÜd_ˆ*è £q -> d©a ; 222 sdp_li¡_t * svcþass = NULL ; 223 * uuid_¡r ; 225 ià( `sdp_g‘_£rviû_þas£s ( »c , & svcþass ) < 0) 229 uuid_¡r = `bt_uuid2¡ršg ( svcþass -> d©a ); 230 ià(! uuid_¡r ) { 231 `sdp_li¡_ä“ ( svcþass , ä“ ); 235 ià(! `¡rÿ£cmp ( uuid_¡r , uuid )) { 236 `sdp_li¡_ä“ ( svcþass , ä“ ); 237 `ä“ ( uuid_¡r ); 238  »c ; 241 `sdp_li¡_ä“ ( svcþass , ä“ ); 242 `ä“ ( uuid_¡r ); 244  NULL ; 245 } } @src/storage.h 24  »ad_discov”abË_timeout (cÚ¡ * ¤c , * timeout ); 25  »ad_·œabË_timeout (cÚ¡ * ¤c , * timeout ); 26  »ad_Ú_mode (cÚ¡ * ¤c , * mode ,  Ëngth ); 27  »ad_loÿl_Çme (cÚ¡ bdaddr_t * bdaddr , * Çme ); 28 #ifdeà __TIZEN_PATCH__ 29  wr™e_deviû_ch¬aù”i¡ics (cÚ¡ bdaddr_t * sba , cÚ¡ bdaddr_ˆ* dba , 30 ušt8_t bdaddr_ty³ , ušt16_t hªdË , 31 cÚ¡ * ch¬s ); 32 * »ad_deviû_ch¬aù”i¡ics (cÚ¡ bdaddr_t * sba , cÚ¡ bdaddr_ˆ* dba , 33 ušt8_t bdaddr_ty³ , ušt16_t hªdË ); 34  wr™e_deviû_©Œibu‹ (cÚ¡ bdaddr_t * sba , cÚ¡ bdaddr_ˆ* dba , 35 ušt8_t bdaddr_ty³ , ušt16_t hªdË , 36 cÚ¡ * ch¬s ); 38 sdp_»cÜd_t * »cÜd_äom_¡ršg (cÚ¡ * ¡r ); 39 sdp_»cÜd_t * fšd_»cÜd_š_li¡ ( sdp_li¡_t * »cs , cÚ¡ * uuid ); @src/systemd.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ddef.h > 33  ~<¡ršg.h > 34  ~ 35  ~ 37  ~"sy¡emd.h " 39  $sd_li¡’_fds ( un£t_’vœÚm’t ) 42 } } 44  $sd_nÙify ( un£t_’vœÚm’t , cÚ¡ * ¡©e ) 46 cÚ¡ * sock ; 47  sockaddr_un addr ; 48  msghdr msghdr; 49  iovec iovec; 50  fd , ”r ; 52 ià(! ¡©e ) { 53 ”r = - EINVAL ; 54  dÚe ; 57 sock = `g‘’v ("NOTIFY_SOCKET"); 58 ià(! sock ) 62 ià( sock [0] != '@' && sock[0] != '/') { 63 ”r = - EINVAL ; 64  dÚe ; 67 fd = `sock‘ ( AF_UNIX , SOCK_DGRAM | SOCK_CLOEXEC , 0); 68 ià( fd < 0) { 69 ”r = - ”ºo ; 70  dÚe ; 73 `mem£t (& addr , 0, (addr)); 74 addr . sun_çmžy = AF_UNIX ; 75 `¡ºýy ( addr . sun_·th , sock , (addr.sun_path)); 77 ià( addr . sun_·th [0] == '@') 78 addr . sun_·th [0] = '\0'; 80 `mem£t (& iovec , 0, (iovec)); 81 iovec . iov_ba£ = (*è ¡©e ; 82 iovec . iov_Ën = `¡¾’ ( ¡©e ); 84 `mem£t (& msghdr , 0, (msghdr)); 85 msghdr . msg_Çme = & addr ; 86 msghdr . msg_Çm–’ = `off£tof ( sockaddr_un , sun_·th ) + 87 `¡¾’ ( sock ); 89 ià( msghdr . msg_Çm–’ > ( sockaddr_un )) 90 msghdr . msg_Çm–’ = ( sockaddr_un ); 92 msghdr . msg_iov = & iovec ; 93 msghdr . msg_iovËn = 1; 95 ià( `£ndmsg ( fd , & msghdr , MSG_NOSIGNAL ) < 0) 96 ”r = - ”ºo ; 98 ”r = 1; 100 `þo£ ( fd ); 102 dÚe : 103 ià( un£t_’vœÚm’t ) 104 `un£‹nv ("NOTIFY_SOCKET"); 106  ”r ; 107 } } @src/systemd.h 24  #SD_LISTEN_FDS_START 3 ) 26  sd_li¡’_fds ( un£t_’vœÚm’t ); 28  sd_nÙify ( un£t_’vœÚm’t , cÚ¡ * ¡©e ); @src/textfile.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<ùy³.h > 31  ~ 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 35  ~ 36  ~ 37  ~ 38  ~ 40  ~"‹xtfže.h " 42  $ü—‹_dœs (cÚ¡ * fž’ame , cÚ¡ mode_t mode ) 44  ¡© ¡ ; 45  dœ [ PATH_MAX + 1], * ´ev , * Ãxt ; 46  ”r ; 48 ”r = `¡© ( fž’ame , & ¡ ); 49 ià(! ”r && `S_ISREG ( ¡ . ¡_mode )) 52 `mem£t ( dœ , 0, PATH_MAX + 1); 53 `¡rÿt ( dœ , "/"); 55 ´ev = `¡rchr ( fž’ame , '/'); 57  ´ev ) { 58 Ãxt = `¡rchr ( ´ev + 1, '/'); 59 ià(! Ãxt ) 62 ià( Ãxt - ´ev == 1) { 63 ´ev = Ãxt ; 67 `¡ºÿt ( dœ , ´ev + 1, Ãxt -…rev); 68 `mkdœ ( dœ , mode ); 70 ´ev = Ãxt ; 74 } } 76  $ü—‹_fže (cÚ¡ * fž’ame , cÚ¡ mode_t mode ) 78  fd ; 80 `ü—‹_dœs ( fž’ame , S_IRUSR | S_IWUSR | S_IXUSR ); 82 fd = `Ý’ ( fž’ame , O_RDWR | O_CREAT , mode ); 83 ià( fd < 0) 84  fd ; 86 `þo£ ( fd ); 89 } } 91  $ü—‹_Çme (* buf , size_t size , cÚ¡ * ·th , cÚ¡ * add»ss , cÚ¡ * Çme ) 93  `¢´štf ( buf , size , "%s/%s/%s", ·th , add»ss , Çme ); 94 } } 96  šlše * $fšd_key (* m­ , size_t size , cÚ¡ * key , size_ˆ Ën ,  iÿ£ ) 98 * ±r = m­ ; 99 size_t ±¾’ = size ; 101  ±¾’ > Ën + 1) { 102  cmp = ( iÿ£ è? `¡ºÿ£cmp ( ±r , key , Ën è: `¡ºcmp (ptr, key,†en); 103 ià( cmp == 0) { 104 ià( ±r =ð m­ && *ÕŒ + Ën ) == ' ') 105  ±r ; 107 ià((*( ±r - 1) == '\r' || *(ptr - 1) == '\n') && 108 *( ±r + Ën ) == ' ') 109  ±r ; 112 ià( iÿ£ ) { 113 * p1 = `memchr ( ±r + 1, `tÞow” (* key ), ±¾’ - 1); 114 * p2 = `memchr ( ±r + 1, `touµ” (* key ), ±¾’ - 1); 116 ià(! p1 ) 117 ±r = p2 ; 118 ià(! p2 ) 119 ±r = p1 ; 121 ±r = ( p1 < p2 ) ?…1 :…2; 123 ±r = `memchr ÕŒ + 1, * key , ±¾’ - 1); 125 ià(! ±r ) 126  NULL ; 128 ±¾’ = size - ( ±r - m­ ); 131  NULL ; 132 } } 134  šlše  $wr™e_key_v®ue ( fd , cÚ¡ * key , cÚ¡ * v®ue ) 136 * ¡r ; 137 size_t size ; 138  ”r = 0; 140 size = `¡¾’ ( key è+ sŒËn( v®ue ) + 2; 142 ¡r = `m®loc ( size + 1); 143 ià(! ¡r ) 144  ENOMEM ; 146 `¥rštf ( ¡r , "% %s\n", key , v®ue ); 148 ià( `wr™e ( fd , ¡r , size ) < 0) 149 ”r = - ”ºo ; 151 `ä“ ( ¡r ); 153  ”r ; 154 } } 156 * $¡ºpbrk (cÚ¡ * s , ssize_t Ën , cÚ¡ * acû± ) 158 cÚ¡ * p = s ; 159 cÚ¡ * ’d ; 161 ’d = s + Ën - 1; 163  p <ð ’d && *p) { 164 cÚ¡ * a = acû± ; 166 * a ) { 167 ià(* p =ð* a ) 168  (*è p ; 169 a ++; 172 p ++; 175  NULL ; 176 } } 178  $wr™e_key (cÚ¡ * ·thÇme , cÚ¡ * key , cÚ¡ * v®ue ,  iÿ£ ) 180  ¡© ¡ ; 181 * m­ , * off , * ’d , * ¡r ; 182 off_t size ; 183 size_t ba£ ; 184  fd , Ën , ”r = 0; 186 fd = `Ý’ ( ·thÇme , O_RDWR ); 187 ià( fd < 0) 188  - ”ºo ; 190 ià( `æock ( fd , LOCK_EX ) < 0) { 191 ”r = - ”ºo ; 192  þo£ ; 195 ià( `f¡© ( fd , & ¡ ) < 0) { 196 ”r = - ”ºo ; 197  uÆock ; 200 size = ¡ . ¡_size ; 202 ià(! size ) { 203 ià( v®ue ) { 204 `l£ek ( fd , size , SEEK_SET ); 205 ”r = `wr™e_key_v®ue ( fd , key , v®ue ); 207  uÆock ; 210 m­ = `mm­ ( NULL , size , PROT_READ | PROT_WRITE , 211 MAP_PRIVATE | MAP_LOCKED , fd , 0); 212 ià(! m­ || m­ =ð MAP_FAILED ) { 213 ”r = - ”ºo ; 214  uÆock ; 217 Ën = `¡¾’ ( key ); 218 off = `fšd_key ( m­ , size , key , Ën , iÿ£ ); 219 ià(! off ) { 220 `munm­ ( m­ , size ); 221 ià( v®ue ) { 222 `l£ek ( fd , size , SEEK_SET ); 223 ”r = `wr™e_key_v®ue ( fd , key , v®ue ); 225  uÆock ; 228 ba£ = off - m­ ; 230 ’d = `¡ºpbrk ( off , size , "\r\n"); 231 ià(! ’d ) { 232 ”r = - EILSEQ ; 233  unm­ ; 236 ià( v®ue && (( ssize_t è `¡¾’ (v®ueè=ð ’d - off - Ën - 1) && 237 ! `¡ºcmp ( off + Ën + 1, v®ue , ’d - off -†en - 1)) 238  unm­ ; 240 Ën = `¡r¥n ( ’d , "\r\n"); 241 ’d +ð Ën ; 243 Ën = size - ( ’d - m­ ); 244 ià(! Ën ) { 245 `munm­ ( m­ , size ); 246 ià( `árunÿ‹ ( fd , ba£ ) < 0) { 247 ”r = - ”ºo ; 248  uÆock ; 250 `l£ek ( fd , ba£ , SEEK_SET ); 251 ià( v®ue ) 252 ”r = `wr™e_key_v®ue ( fd , key , v®ue ); 254  uÆock ; 257 ià( Ën < 0 ||†’ > size ) { 258 ”r = - EILSEQ ; 259  unm­ ; 262 ¡r = `m®loc ( Ën ); 263 ià(! ¡r ) { 264 ”r = - ”ºo ; 265  unm­ ; 268 `memýy ( ¡r , ’d , Ën ); 270 `munm­ ( m­ , size ); 271 ià( `árunÿ‹ ( fd , ba£ ) < 0) { 272 ”r = - ”ºo ; 273 `ä“ ( ¡r ); 274  uÆock ; 276 `l£ek ( fd , ba£ , SEEK_SET ); 277 ià( v®ue ) 278 ”r = `wr™e_key_v®ue ( fd , key , v®ue ); 280 ià( `wr™e ( fd , ¡r , Ën ) < 0) 281 ”r = - ”ºo ; 283 `ä“ ( ¡r ); 285  uÆock ; 287 unm­ : 288 `munm­ ( m­ , size ); 290 uÆock : 291 `æock ( fd , LOCK_UN ); 293 þo£ : 294 `fd©async ( fd ); 296 `þo£ ( fd ); 297 ”ºo = - ”r ; 299  ”r ; 300 } } 302 * $»ad_key (cÚ¡ * ·thÇme , cÚ¡ * key ,  iÿ£ ) 304  ¡© ¡ ; 305 * m­ , * off , * ’d , * ¡r = NULL ; 306 off_t size ; size_t Ën ; 307  fd , ”r = 0; 309 fd = `Ý’ ( ·thÇme , O_RDONLY ); 310 ià( fd < 0) 311  NULL ; 313 ià( `æock ( fd , LOCK_SH ) < 0) { 314 ”r = - ”ºo ; 315  þo£ ; 318 ià( `f¡© ( fd , & ¡ ) < 0) { 319 ”r = - ”ºo ; 320  uÆock ; 323 size = ¡ . ¡_size ; 325 m­ = `mm­ ( NULL , size , PROT_READ , MAP_SHARED , fd , 0); 326 ià(! m­ || m­ =ð MAP_FAILED ) { 327 ”r = - ”ºo ; 328  uÆock ; 331 Ën = `¡¾’ ( key ); 332 off = `fšd_key ( m­ , size , key , Ën , iÿ£ ); 333 ià(! off ) { 334 ”r = - EILSEQ ; 335  unm­ ; 338 ’d = `¡ºpbrk ( off , size - (ofà- m­ ), "\r\n"); 339 ià(! ’d ) { 340 ”r = - EILSEQ ; 341  unm­ ; 344 ¡r = `m®loc ( ’d - off - Ën ); 345 ià(! ¡r ) { 346 ”r = - EILSEQ ; 347  unm­ ; 350 `mem£t ( ¡r , 0, ’d - off - Ën ); 351 `¡ºýy ( ¡r , off + Ën + 1, ’d - off -†en - 1); 353 unm­ : 354 `munm­ ( m­ , size ); 356 uÆock : 357 `æock ( fd , LOCK_UN ); 359 þo£ : 360 `þo£ ( fd ); 361 ”ºo = - ”r ; 363  ¡r ; 364 } } 366  $‹xtfže_put (cÚ¡ * ·thÇme , cÚ¡ * key , cÚ¡ * v®ue ) 368  `wr™e_key ( ·thÇme , key , v®ue , 0); 369 } } 371  $‹xtfže_d– (cÚ¡ * ·thÇme , cÚ¡ * key ) 373  `wr™e_key ( ·thÇme , key , NULL , 0); 374 } } 376 * $‹xtfže_g‘ (cÚ¡ * ·thÇme , cÚ¡ * key ) 378  `»ad_key ( ·thÇme , key , 0); 379 } } 381  $‹xtfže_fÜ—ch (cÚ¡ * ·thÇme , ‹xtfže_cb func , * d©a ) 383  ¡© ¡ ; 384 * m­ , * off , * ’d , * key , * v®ue ; 385 off_t size ; size_t Ën ; 386  fd , ”r = 0; 388 fd = `Ý’ ( ·thÇme , O_RDONLY ); 389 ià( fd < 0) 390  - ”ºo ; 392 ià( `æock ( fd , LOCK_SH ) < 0) { 393 ”r = - ”ºo ; 394  þo£ ; 397 ià( `f¡© ( fd , & ¡ ) < 0) { 398 ”r = - ”ºo ; 399  uÆock ; 402 size = ¡ . ¡_size ; 404 m­ = `mm­ ( NULL , size , PROT_READ , MAP_SHARED , fd , 0); 405 ià(! m­ || m­ =ð MAP_FAILED ) { 406 ”r = - ”ºo ; 407  uÆock ; 410 off = m­ ; 412  size - ( off - m­ ) > 0) { 413 ’d = `¡ºpbrk ( off , size - (ofà- m­ ), " "); 414 ià(! ’d ) { 415 ”r = - EILSEQ ; 419 Ën = ’d - off ; 421 key = `m®loc ( Ën + 1); 422 ià(! key ) { 423 ”r = - ”ºo ; 427 `mem£t ( key , 0, Ën + 1); 428 `memýy ( key , off , Ën ); 430 off = ’d + 1; 432 ià( size - ( off - m­ ) < 0) { 433 ”r = - EILSEQ ; 434 `ä“ ( key ); 438 ’d = `¡ºpbrk ( off , size - (ofà- m­ ), "\r\n"); 439 ià(! ’d ) { 440 ”r = - EILSEQ ; 441 `ä“ ( key ); 445 Ën = ’d - off ; 447 v®ue = `m®loc ( Ën + 1); 448 ià(! v®ue ) { 449 ”r = - ”ºo ; 450 `ä“ ( key ); 454 `mem£t ( v®ue , 0, Ën + 1); 455 `memýy ( v®ue , off , Ën ); 457 `func ( key , v®ue , d©a ); 459 `ä“ ( key ); 460 `ä“ ( v®ue ); 462 off = ’d + 1; 465 `munm­ ( m­ , size ); 467 uÆock : 468 `æock ( fd , LOCK_UN ); 470 þo£ : 471 `þo£ ( fd ); 472 ”ºo = - ”r ; 475 } } @src/textfile.h 24  ü—‹_fže (cÚ¡ * fž’ame , cÚ¡ mode_t mode ); 25  ü—‹_Çme (* buf , size_t size , cÚ¡ * ·th , 26 cÚ¡ * add»ss , cÚ¡ * Çme ); 28  ‹xtfže_put (cÚ¡ * ·thÇme , cÚ¡ * key , cÚ¡ * v®ue ); 29  ‹xtfže_d– (cÚ¡ * ·thÇme , cÚ¡ * key ); 30 * ‹xtfže_g‘ (cÚ¡ * ·thÇme , cÚ¡ * key ); 32 (* t‹xtfže_cb è(* tkey , * tv®ue , * td©a ); 34  `‹xtfže_fÜ—ch (cÚ¡ * ·thÇme , ‹xtfže_cb func , * d©a ); @src/uinput.h 24 #iâdeà __UINPUT_H 25  #__UINPUT_H ) 27 #ifdeà __ýlu¥lus 31  ~<¡dšt.h > 32  ~ 33  ~ 37  #EV_SYN 0x00 ) 38  #EV_KEY 0x01 ) 39  #EV_REL 0x02 ) 40  #EV_ABS 0x03 ) 41  #EV_MSC 0x04 ) 42  #EV_LED 0x11 ) 43  #EV_SND 0x12 ) 44  #EV_REP 0x14 ) 45  #EV_FF 0x15 ) 46  #EV_PWR 0x16 ) 47  #EV_FF_STATUS 0x17 ) 48  #EV_MAX 0x1f ) 52  #SYN_REPORT 0 ) 53  #SYN_CONFIG 1 ) 66  #KEY_RESERVED 0 ) 67  #KEY_ESC 1 ) 68  #KEY_1 2 ) 69  #KEY_2 3 ) 70  #KEY_3 4 ) 71  #KEY_4 5 ) 72  #KEY_5 6 ) 73  #KEY_6 7 ) 74  #KEY_7 8 ) 75  #KEY_8 9 ) 76  #KEY_9 10 ) 77  #KEY_0 11 ) 78  #KEY_MINUS 12 ) 79  #KEY_EQUAL 13 ) 80  #KEY_BACKSPACE 14 ) 81  #KEY_TAB 15 ) 82  #KEY_Q 16 ) 83  #KEY_W 17 ) 84  #KEY_E 18 ) 85  #KEY_R 19 ) 86  #KEY_T 20 ) 87  #KEY_Y 21 ) 88  #KEY_U 22 ) 89  #KEY_I 23 ) 90  #KEY_O 24 ) 91  #KEY_P 25 ) 92  #KEY_LEFTBRACE 26 ) 93  #KEY_RIGHTBRACE 27 ) 94  #KEY_ENTER 28 ) 95  #KEY_LEFTCTRL 29 ) 96  #KEY_A 30 ) 97  #KEY_S 31 ) 98  #KEY_D 32 ) 99  #KEY_F 33 ) 100  #KEY_G 34 ) 101  #KEY_H 35 ) 102  #KEY_J 36 ) 103  #KEY_K 37 ) 104  #KEY_L 38 ) 105  #KEY_SEMICOLON 39 ) 106  #KEY_APOSTROPHE 40 ) 107  #KEY_GRAVE 41 ) 108  #KEY_LEFTSHIFT 42 ) 109  #KEY_BACKSLASH 43 ) 110  #KEY_Z 44 ) 111  #KEY_X 45 ) 112  #KEY_C 46 ) 113  #KEY_V 47 ) 114  #KEY_B 48 ) 115  #KEY_N 49 ) 116  #KEY_M 50 ) 117  #KEY_COMMA 51 ) 118  #KEY_DOT 52 ) 119  #KEY_SLASH 53 ) 120  #KEY_RIGHTSHIFT 54 ) 121  #KEY_KPASTERISK 55 ) 122  #KEY_LEFTALT 56 ) 123  #KEY_SPACE 57 ) 124  #KEY_CAPSLOCK 58 ) 125  #KEY_F1 59 ) 126  #KEY_F2 60 ) 127  #KEY_F3 61 ) 128  #KEY_F4 62 ) 129  #KEY_F5 63 ) 130  #KEY_F6 64 ) 131  #KEY_F7 65 ) 132  #KEY_F8 66 ) 133  #KEY_F9 67 ) 134  #KEY_F10 68 ) 135  #KEY_NUMLOCK 69 ) 136  #KEY_SCROLLLOCK 70 ) 137  #KEY_KP7 71 ) 138  #KEY_KP8 72 ) 139  #KEY_KP9 73 ) 140  #KEY_KPMINUS 74 ) 141  #KEY_KP4 75 ) 142  #KEY_KP5 76 ) 143  #KEY_KP6 77 ) 144  #KEY_KPPLUS 78 ) 145  #KEY_KP1 79 ) 146  #KEY_KP2 80 ) 147  #KEY_KP3 81 ) 148  #KEY_KP0 82 ) 149  #KEY_KPDOT 83 ) 151  #KEY_ZENKAKUHANKAKU 85 ) 152  #KEY_102ND 86 ) 153  #KEY_F11 87 ) 154  #KEY_F12 88 ) 155  #KEY_RO 89 ) 156  #KEY_KATAKANA 90 ) 157  #KEY_HIRAGANA 91 ) 158  #KEY_HENKAN 92 ) 159  #KEY_KATAKANAHIRAGANA 93 ) 160  #KEY_MUHENKAN 94 ) 161  #KEY_KPJPCOMMA 95 ) 162  #KEY_KPENTER 96 ) 163  #KEY_RIGHTCTRL 97 ) 164  #KEY_KPSLASH 98 ) 165  #KEY_SYSRQ 99 ) 166  #KEY_RIGHTALT 100 ) 167  #KEY_LINEFEED 101 ) 168  #KEY_HOME 102 ) 169  #KEY_UP 103 ) 170  #KEY_PAGEUP 104 ) 171  #KEY_LEFT 105 ) 172  #KEY_RIGHT 106 ) 173  #KEY_END 107 ) 174  #KEY_DOWN 108 ) 175  #KEY_PAGEDOWN 109 ) 176  #KEY_INSERT 110 ) 177  #KEY_DELETE 111 ) 178  #KEY_MACRO 112 ) 179  #KEY_MUTE 113 ) 180  #KEY_VOLUMEDOWN 114 ) 181  #KEY_VOLUMEUP 115 ) 182  #KEY_POWER 116 ) 183  #KEY_KPEQUAL 117 ) 184  #KEY_KPPLUSMINUS 118 ) 185  #KEY_PAUSE 119 ) 187  #KEY_KPCOMMA 121 ) 188  #KEY_HANGEUL 122 ) 189  #KEY_HANGUEL KEY_HANGEUL ) 190  #KEY_HANJA 123 ) 191  #KEY_YEN 124 ) 192  #KEY_LEFTMETA 125 ) 193  #KEY_RIGHTMETA 126 ) 194  #KEY_COMPOSE 127 ) 196  #KEY_STOP 128 ) 197  #KEY_AGAIN 129 ) 198  #KEY_PROPS 130 ) 199  #KEY_UNDO 131 ) 200  #KEY_FRONT 132 ) 201  #KEY_COPY 133 ) 202  #KEY_OPEN 134 ) 203  #KEY_PASTE 135 ) 204  #KEY_FIND 136 ) 205  #KEY_CUT 137 ) 206  #KEY_HELP 138 ) 207  #KEY_MENU 139 ) 208  #KEY_CALC 140 ) 209  #KEY_SETUP 141 ) 210  #KEY_SLEEP 142 ) 211  #KEY_WAKEUP 143 ) 212  #KEY_FILE 144 ) 213  #KEY_SENDFILE 145 ) 214  #KEY_DELETEFILE 146 ) 215  #KEY_XFER 147 ) 216  #KEY_PROG1 148 ) 217  #KEY_PROG2 149 ) 218  #KEY_WWW 150 ) 219  #KEY_MSDOS 151 ) 220  #KEY_COFFEE 152 ) 221  #KEY_SCREENLOCK KEY_COFFEE ) 222  #KEY_DIRECTION 153 ) 223  #KEY_CYCLEWINDOWS 154 ) 224  #KEY_MAIL 155 ) 225  #KEY_BOOKMARKS 156 ) 226  #KEY_COMPUTER 157 ) 227  #KEY_BACK 158 ) 228  #KEY_FORWARD 159 ) 229  #KEY_CLOSECD 160 ) 230  #KEY_EJECTCD 161 ) 231  #KEY_EJECTCLOSECD 162 ) 232  #KEY_NEXTSONG 163 ) 233  #KEY_PLAYPAUSE 164 ) 234  #KEY_PREVIOUSSONG 165 ) 235  #KEY_STOPCD 166 ) 236  #KEY_RECORD 167 ) 237  #KEY_REWIND 168 ) 238  #KEY_PHONE 169 ) 239  #KEY_ISO 170 ) 240  #KEY_CONFIG 171 ) 241  #KEY_HOMEPAGE 172 ) 242  #KEY_REFRESH 173 ) 243  #KEY_EXIT 174 ) 244  #KEY_MOVE 175 ) 245  #KEY_EDIT 176 ) 246  #KEY_SCROLLUP 177 ) 247  #KEY_SCROLLDOWN 178 ) 248  #KEY_KPLEFTPAREN 179 ) 249  #KEY_KPRIGHTPAREN 180 ) 250  #KEY_NEW 181 ) 251  #KEY_REDO 182 ) 253  #KEY_F13 183 ) 254  #KEY_F14 184 ) 255  #KEY_F15 185 ) 256  #KEY_F16 186 ) 257  #KEY_F17 187 ) 258  #KEY_F18 188 ) 259  #KEY_F19 189 ) 260  #KEY_F20 190 ) 261  #KEY_F21 191 ) 262  #KEY_F22 192 ) 263  #KEY_F23 193 ) 264  #KEY_F24 194 ) 266  #KEY_PLAYCD 200 ) 267  #KEY_PAUSECD 201 ) 268  #KEY_PROG3 202 ) 269  #KEY_PROG4 203 ) 270  #KEY_SUSPEND 205 ) 271  #KEY_CLOSE 206 ) 272  #KEY_PLAY 207 ) 273  #KEY_FASTFORWARD 208 ) 274  #KEY_BASSBOOST 209 ) 275  #KEY_PRINT 210 ) 276  #KEY_HP 211 ) 277  #KEY_CAMERA 212 ) 278  #KEY_SOUND 213 ) 279  #KEY_QUESTION 214 ) 280  #KEY_EMAIL 215 ) 281  #KEY_CHAT 216 ) 282  #KEY_SEARCH 217 ) 283  #KEY_CONNECT 218 ) 284  #KEY_FINANCE 219 ) 285  #KEY_SPORT 220 ) 286  #KEY_SHOP 221 ) 287  #KEY_ALTERASE 222 ) 288  #KEY_CANCEL 223 ) 289  #KEY_BRIGHTNESSDOWN 224 ) 290  #KEY_BRIGHTNESSUP 225 ) 291  #KEY_MEDIA 226 ) 293  #KEY_SWITCHVIDEOMODE 227 ) 295  #KEY_KBDILLUMTOGGLE 228 ) 296  #KEY_KBDILLUMDOWN 229 ) 297  #KEY_KBDILLUMUP 230 ) 299  #KEY_SEND 231 ) 300  #KEY_REPLY 232 ) 301  #KEY_FORWARDMAIL 233 ) 302  #KEY_SAVE 234 ) 303  #KEY_DOCUMENTS 235 ) 305  #KEY_BATTERY 236 ) 307  #KEY_BLUETOOTH 237 ) 308  #KEY_WLAN 238 ) 309  #KEY_UWB 239 ) 311  #KEY_UNKNOWN 240 ) 313  #KEY_VIDEO_NEXT 241 ) 314  #KEY_VIDEO_PREV 242 ) 315  #KEY_BRIGHTNESS_CYCLE 243 ) 316  #KEY_BRIGHTNESS_ZERO 244 ) 317  #KEY_DISPLAY_OFF 245 ) 319  #KEY_WIMAX 246 ) 323  #BTN_MISC 0x100 ) 324  #BTN_0 0x100 ) 325  #BTN_1 0x101 ) 326  #BTN_2 0x102 ) 327  #BTN_3 0x103 ) 328  #BTN_4 0x104 ) 329  #BTN_5 0x105 ) 330  #BTN_6 0x106 ) 331  #BTN_7 0x107 ) 332  #BTN_8 0x108 ) 333  #BTN_9 0x109 ) 335  #BTN_MOUSE 0x110 ) 336  #BTN_LEFT 0x110 ) 337  #BTN_RIGHT 0x111 ) 338  #BTN_MIDDLE 0x112 ) 339  #BTN_SIDE 0x113 ) 340  #BTN_EXTRA 0x114 ) 341  #BTN_FORWARD 0x115 ) 342  #BTN_BACK 0x116 ) 343  #BTN_TASK 0x117 ) 345  #BTN_JOYSTICK 0x120 ) 346  #BTN_TRIGGER 0x120 ) 347  #BTN_THUMB 0x121 ) 348  #BTN_THUMB2 0x122 ) 349  #BTN_TOP 0x123 ) 350  #BTN_TOP2 0x124 ) 351  #BTN_PINKIE 0x125 ) 352  #BTN_BASE 0x126 ) 353  #BTN_BASE2 0x127 ) 354  #BTN_BASE3 0x128 ) 355  #BTN_BASE4 0x129 ) 356  #BTN_BASE5 0x12a ) 357  #BTN_BASE6 0x12b ) 358  #BTN_DEAD 0x12f ) 360  #BTN_GAMEPAD 0x130 ) 361  #BTN_A 0x130 ) 362  #BTN_B 0x131 ) 363  #BTN_C 0x132 ) 364  #BTN_X 0x133 ) 365  #BTN_Y 0x134 ) 366  #BTN_Z 0x135 ) 367  #BTN_TL 0x136 ) 368  #BTN_TR 0x137 ) 369  #BTN_TL2 0x138 ) 370  #BTN_TR2 0x139 ) 371  #BTN_SELECT 0x13a ) 372  #BTN_START 0x13b ) 373  #BTN_MODE 0x13c ) 374  #BTN_THUMBL 0x13d ) 375  #BTN_THUMBR 0x13e ) 377  #BTN_DIGI 0x140 ) 378  #BTN_TOOL_PEN 0x140 ) 379  #BTN_TOOL_RUBBER 0x141 ) 380  #BTN_TOOL_BRUSH 0x142 ) 381  #BTN_TOOL_PENCIL 0x143 ) 382  #BTN_TOOL_AIRBRUSH 0x144 ) 383  #BTN_TOOL_FINGER 0x145 ) 384  #BTN_TOOL_MOUSE 0x146 ) 385  #BTN_TOOL_LENS 0x147 ) 386  #BTN_TOUCH 0x14a ) 387  #BTN_STYLUS 0x14b ) 388  #BTN_STYLUS2 0x14c ) 389  #BTN_TOOL_DOUBLETAP 0x14d ) 390  #BTN_TOOL_TRIPLETAP 0x14e ) 392  #BTN_WHEEL 0x150 ) 393  #BTN_GEAR_DOWN 0x150 ) 394  #BTN_GEAR_UP 0x151 ) 396  #KEY_OK 0x160 ) 397  #KEY_SELECT 0x161 ) 398  #KEY_GOTO 0x162 ) 399  #KEY_CLEAR 0x163 ) 400  #KEY_POWER2 0x164 ) 401  #KEY_OPTION 0x165 ) 402  #KEY_INFO 0x166 ) 403  #KEY_TIME 0x167 ) 404  #KEY_VENDOR 0x168 ) 405  #KEY_ARCHIVE 0x169 ) 406  #KEY_PROGRAM 0x16¨ ) 407  #KEY_CHANNEL 0x16b ) 408  #KEY_FAVORITES 0x16c ) 409  #KEY_EPG 0x16d ) 410  #KEY_PVR 0x16 ) 411  #KEY_MHP 0x16f ) 412  #KEY_LANGUAGE 0x170 ) 413  #KEY_TITLE 0x171 ) 414  #KEY_SUBTITLE 0x172 ) 415  #KEY_ANGLE 0x173 ) 416  #KEY_ZOOM 0x174 ) 417  #KEY_MODE 0x175 ) 418  #KEY_KEYBOARD 0x176 ) 419  #KEY_SCREEN 0x177 ) 420  #KEY_PC 0x178 ) 421  #KEY_TV 0x179 ) 422  #KEY_TV2 0x17¨ ) 423  #KEY_VCR 0x17b ) 424  #KEY_VCR2 0x17ø ) 425  #KEY_SAT 0x17d ) 426  #KEY_SAT2 0x17e ) 427  #KEY_CD 0x17à ) 428  #KEY_TAPE 0x180 ) 429  #KEY_RADIO 0x181 ) 430  #KEY_TUNER 0x182 ) 431  #KEY_PLAYER 0x183 ) 432  #KEY_TEXT 0x184 ) 433  #KEY_DVD 0x185 ) 434  #KEY_AUX 0x186 ) 435  #KEY_MP3 0x187 ) 436  #KEY_AUDIO 0x188 ) 437  #KEY_VIDEO 0x189 ) 438  #KEY_DIRECTORY 0x18a ) 439  #KEY_LIST 0x18b ) 440  #KEY_MEMO 0x18ø ) 441  #KEY_CALENDAR 0x18d ) 442  #KEY_RED 0x18e ) 443  #KEY_GREEN 0x18f ) 444  #KEY_YELLOW 0x190 ) 445  #KEY_BLUE 0x191 ) 446  #KEY_CHANNELUP 0x192 ) 447  #KEY_CHANNELDOWN 0x193 ) 448  #KEY_FIRST 0x194 ) 449  #KEY_LAST 0x195 ) 450  #KEY_AB 0x196 ) 451  #KEY_NEXT 0x197 ) 452  #KEY_RESTART 0x198 ) 453  #KEY_SLOW 0x199 ) 454  #KEY_SHUFFLE 0x19a ) 455  #KEY_BREAK 0x19b ) 456  #KEY_PREVIOUS 0x19c ) 457  #KEY_DIGITS 0x19d ) 458  #KEY_TEEN 0x19e ) 459  #KEY_TWEN 0x19f ) 460  #KEY_VIDEOPHONE 0x1a0 ) 461  #KEY_GAMES 0x1a1 ) 462  #KEY_ZOOMIN 0x1a2 ) 463  #KEY_ZOOMOUT 0x1a3 ) 464  #KEY_ZOOMRESET 0x1a4 ) 465  #KEY_WORDPROCESSOR 0x1a5 ) 466  #KEY_EDITOR 0x1a6 ) 467  #KEY_SPREADSHEET 0x1a7 ) 468  #KEY_GRAPHICSEDITOR 0x1a8 ) 469  #KEY_PRESENTATION 0x1a9 ) 470  #KEY_DATABASE 0x1¯ ) 471  #KEY_NEWS 0x1ab ) 472  #KEY_VOICEMAIL 0x1aø ) 473  #KEY_ADDRESSBOOK 0x1ad ) 474  #KEY_MESSENGER 0x1« ) 475  #KEY_DISPLAYTOGGLE 0x1aà ) 476  #KEY_SPELLCHECK 0x1b0 ) 477  #KEY_LOGOFF 0x1b1 ) 479  #KEY_DOLLAR 0x1b2 ) 480  #KEY_EURO 0x1b3 ) 482  #KEY_FRAMEBACK 0x1b4 ) 483  #KEY_FRAMEFORWARD 0x1b5 ) 484  #KEY_CONTEXT_MENU 0x1b6 ) 485  #KEY_MEDIA_REPEAT 0x1b7 ) 487  #KEY_DEL_EOL 0x1c0 ) 488  #KEY_DEL_EOS 0x1c1 ) 489  #KEY_INS_LINE 0x1c2 ) 490  #KEY_DEL_LINE 0x1c3 ) 492  #KEY_FN 0x1d0 ) 493  #KEY_FN_ESC 0x1d1 ) 494  #KEY_FN_F1 0x1d2 ) 495  #KEY_FN_F2 0x1d3 ) 496  #KEY_FN_F3 0x1d4 ) 497  #KEY_FN_F4 0x1d5 ) 498  #KEY_FN_F5 0x1d6 ) 499  #KEY_FN_F6 0x1d7 ) 500  #KEY_FN_F7 0x1d8 ) 501  #KEY_FN_F8 0x1d9 ) 502  #KEY_FN_F9 0x1da ) 503  #KEY_FN_F10 0x1db ) 504  #KEY_FN_F11 0x1dc ) 505  #KEY_FN_F12 0x1dd ) 506  #KEY_FN_1 0x1de ) 507  #KEY_FN_2 0x1df ) 508  #KEY_FN_D 0x1e0 ) 509  #KEY_FN_E 0x1e1 ) 510  #KEY_FN_F 0x1e2 ) 511  #KEY_FN_S 0x1e3 ) 512  #KEY_FN_B 0x1e4 ) 514  #KEY_BRL_DOT1 0x1f1 ) 515  #KEY_BRL_DOT2 0x1f2 ) 516  #KEY_BRL_DOT3 0x1f3 ) 517  #KEY_BRL_DOT4 0x1f4 ) 518  #KEY_BRL_DOT5 0x1f5 ) 519  #KEY_BRL_DOT6 0x1f6 ) 520  #KEY_BRL_DOT7 0x1f7 ) 521  #KEY_BRL_DOT8 0x1f8 ) 522  #KEY_BRL_DOT9 0x1f9 ) 523  #KEY_BRL_DOT10 0x1ç ) 526  #KEY_MIN_INTERESTING KEY_MUTE ) 527  #KEY_MAX 0x1ff ) 528  #KEY_CNT ( KEY_MAX +1) ) 534  #REL_X 0x00 ) 535  #REL_Y 0x01 ) 536  #REL_Z 0x02 ) 537  #REL_RX 0x03 ) 538  #REL_RY 0x04 ) 539  #REL_RZ 0x05 ) 540  #REL_HWHEEL 0x06 ) 541  #REL_DIAL 0x07 ) 542  #REL_WHEEL 0x08 ) 543  #REL_MISC 0x09 ) 544  #REL_MAX 0x0f ) 545  #REL_CNT ( REL_MAX +1) ) 551  #ABS_X 0x00 ) 552  #ABS_Y 0x01 ) 553  #ABS_Z 0x02 ) 554  #ABS_RX 0x03 ) 555  #ABS_RY 0x04 ) 556  #ABS_RZ 0x05 ) 557  #ABS_THROTTLE 0x06 ) 558  #ABS_RUDDER 0x07 ) 559  #ABS_WHEEL 0x08 ) 560  #ABS_GAS 0x09 ) 561  #ABS_BRAKE 0x0a ) 562  #ABS_HAT0X 0x10 ) 563  #ABS_HAT0Y 0x11 ) 564  #ABS_HAT1X 0x12 ) 565  #ABS_HAT1Y 0x13 ) 566  #ABS_HAT2X 0x14 ) 567  #ABS_HAT2Y 0x15 ) 568  #ABS_HAT3X 0x16 ) 569  #ABS_HAT3Y 0x17 ) 570  #ABS_PRESSURE 0x18 ) 571  #ABS_DISTANCE 0x19 ) 572  #ABS_TILT_X 0x1a ) 573  #ABS_TILT_Y 0x1b ) 574  #ABS_TOOL_WIDTH 0x1c ) 575  #ABS_VOLUME 0x20 ) 576  #ABS_MISC 0x28 ) 577  #ABS_MAX 0x3f ) 578  #ABS_CNT ( ABS_MAX +1) ) 584  #SW_LID 0x00 ) 585  #SW_TABLET_MODE 0x01 ) 586  #SW_HEADPHONE_INSERT 0x02 ) 587  #SW_RFKILL_ALL 0x03 ) 589  #SW_RADIO SW_RFKILL_ALL ) 590  #SW_MICROPHONE_INSERT 0x04 ) 591  #SW_DOCK 0x05 ) 592  #SW_MAX 0x0f ) 593  #SW_CNT ( SW_MAX +1) ) 599  #MSC_SERIAL 0x00 ) 600  #MSC_PULSELED 0x01 ) 601  #MSC_GESTURE 0x02 ) 602  #MSC_RAW 0x03 ) 603  #MSC_SCAN 0x04 ) 604  #MSC_MAX 0x07 ) 605  #MSC_CNT ( MSC_MAX +1) ) 611  #LED_NUML 0x00 ) 612  #LED_CAPSL 0x01 ) 613  #LED_SCROLLL 0x02 ) 614  #LED_COMPOSE 0x03 ) 615  #LED_KANA 0x04 ) 616  #LED_SLEEP 0x05 ) 617  #LED_SUSPEND 0x06 ) 618  #LED_MUTE 0x07 ) 619  #LED_MISC 0x08 ) 620  #LED_MAIL 0x09 ) 621  #LED_CHARGING 0x0a ) 622  #LED_MAX 0x0f ) 623  #LED_CNT ( LED_MAX +1) ) 629  #REP_DELAY 0x00 ) 630  #REP_PERIOD 0x01 ) 631  #REP_MAX 0x01 ) 637  #SND_CLICK 0x00 ) 638  #SND_BELL 0x01 ) 639  #SND_TONE 0x02 ) 640  #SND_MAX 0x07 ) 641  #SND_CNT ( SND_MAX +1) ) 647  #ID_BUS 0 ) 648  #ID_VENDOR 1 ) 649  #ID_PRODUCT 2 ) 650  #ID_VERSION 3 ) 652  #BUS_PCI 0x01 ) 653  #BUS_ISAPNP 0x02 ) 654  #BUS_USB 0x03 ) 655  #BUS_HIL 0x04 ) 656  #BUS_BLUETOOTH 0x05 ) 657  #BUS_VIRTUAL 0x06 ) 659  #BUS_ISA 0x10 ) 660  #BUS_I8042 0x11 ) 661  #BUS_XTKBD 0x12 ) 662  #BUS_RS232 0x13 ) 663  #BUS_GAMEPORT 0x14 ) 664  #BUS_PARPORT 0x15 ) 665  #BUS_AMIGA 0x16 ) 666  #BUS_ADB 0x17 ) 667  #BUS_I2C 0x18 ) 668  #BUS_HOST 0x19 ) 669  #BUS_GSC 0x1A ) 670  #BUS_ATARI 0x1B ) 674  #UINPUT_IOCTL_BASE 'U' ) 676  #UI_DEV_CREATE `_IO ( UINPUT_IOCTL_BASE , 1) ) 677  #UI_DEV_DESTROY `_IO ( UINPUT_IOCTL_BASE , 2) ) 679  #UI_SET_EVBIT `_IOW ( UINPUT_IOCTL_BASE , 100, ) ) 680  #UI_SET_KEYBIT `_IOW ( UINPUT_IOCTL_BASE , 101, ) ) 681  #UI_SET_RELBIT `_IOW ( UINPUT_IOCTL_BASE , 102, ) ) 682  #UI_SET_ABSBIT `_IOW ( UINPUT_IOCTL_BASE , 103, ) ) 683  #UI_SET_MSCBIT `_IOW ( UINPUT_IOCTL_BASE , 104, ) ) 684  #UI_SET_LEDBIT `_IOW ( UINPUT_IOCTL_BASE , 105, ) ) 685  #UI_SET_SNDBIT `_IOW ( UINPUT_IOCTL_BASE , 106, ) ) 686  #UI_SET_FFBIT `_IOW ( UINPUT_IOCTL_BASE , 107, ) ) 687  #UI_SET_PHYS `_IOW ( UINPUT_IOCTL_BASE , 108, *) ) 688  #UI_SET_SWBIT `_IOW ( UINPUT_IOCTL_BASE , 109, ) ) 690 #iâdeà NBITS 691  #NBITS ( x è((((xè- 1è/ ((è* 8)è+ 1) ) 694  #UINPUT_MAX_NAME_SIZE 80 ) 696  sušput_id { 697 ušt16_t bu¡y³ ; 698 ušt16_t v’dÜ ; 699 ušt16_t ´oduù ; 700 ušt16_t v”siÚ ; 703  sušput_dev { 704  Çme [ UINPUT_MAX_NAME_SIZE ]; 705  ušput_id id ; 706  ff_efãùs_max ; 707  absmax [ ABS_MAX + 1]; 708  absmš [ ABS_MAX + 1]; 709  absfuzz [ ABS_MAX + 1]; 710  absæ© [ ABS_MAX + 1]; 713  sušput_ev’t { 714  timev® time ; 715 ušt16_t ty³ ; 716 ušt16_t code ; 717 št32_t v®ue ; 720 #ifdeà __ýlu¥lus @src/uuid-helper.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~<¡dio.h > 30  ~<¡dboÞ.h > 31  ~<”ºo.h > 32  ~<¬·/š‘.h > 34  ~ 35  ~ 36  ~ 38  ~"uuid-h–³r.h " 40 * $bt_mod®Ÿs ( ušt16_t sourû , ušt16_ˆ v’dÜ , 41 ušt16_t ´oduù , ušt16_ˆ v”siÚ ) 43 * ¡r ; 44  ”r ; 46  sourû ) { 48 ”r = `a¥rštf (& ¡r , "%s:v%04Xp%04Xd%04X", 49 "blu‘oÙh", v’dÜ , ´oduù , v”siÚ ); 52 ”r = `a¥rštf (& ¡r , "%s:v%04Xp%04Xd%04X", 53 "usb", v’dÜ , ´oduù , v”siÚ ); 56  NULL ; 59 ià( ”r < 0) 60  NULL ; 62  ¡r ; 63 } } 65 * $bt_uuid2¡ršg ( uuid_t * uuid ) 67 * ¡r ; 68 uuid_t uuid128 ; 69  d©a0 ; 70  d©a1 ; 71  d©a2 ; 72  d©a3 ; 73  d©a4 ; 74  d©a5 ; 75  ”r ; 77 ià(! uuid ) 78  NULL ; 80  uuid -> ty³ ) { 81  SDP_UUID16 : 82 `sdp_uuid16_to_uuid128 (& uuid128 , uuid ); 84  SDP_UUID32 : 85 `sdp_uuid32_to_uuid128 (& uuid128 , uuid ); 87  SDP_UUID128 : 88 `memýy (& uuid128 , uuid , ( uuid_t )); 92  NULL ; 95 `memýy (& d©a0 , & uuid128 . v®ue .uuid128. d©a [0], 4); 96 `memýy (& d©a1 , & uuid128 . v®ue .uuid128. d©a [4], 2); 97 `memýy (& d©a2 , & uuid128 . v®ue .uuid128. d©a [6], 2); 98 `memýy (& d©a3 , & uuid128 . v®ue .uuid128. d©a [8], 2); 99 `memýy (& d©a4 , & uuid128 . v®ue .uuid128. d©a [10], 4); 100 `memýy (& d©a5 , & uuid128 . v®ue .uuid128. d©a [14], 2); 102 ”r = `a¥rštf (& ¡r , "%.8x-%.4x-%.4x-%.4x-%.8x%.4x", 103 `Áohl ( d©a0 ), `Áohs ( d©a1 ), 104 `Áohs ( d©a2 ),‚tohs( d©a3 ), 105 `Áohl ( d©a4 ), `Áohs ( d©a5 )); 106 ià( ”r < 0) 107  NULL ; 109  ¡r ; 110 } } 113 cÚ¡ * mÇme ; 114 ušt16_t mþass ; 115 } gbt_£rviûs [] = { 116 { "pb­", PBAP_SVCLASS_ID }, 117 { "§p", SAP_SVCLASS_ID }, 118 { "áp", OBEX_FILETRANS_SVCLASS_ID }, 119 { "bµ", BASIC_PRINTING_SVCLASS_ID }, 120 { "b", IMAGING_SVCLASS_ID }, 121 { "synch", IRMC_SYNC_SVCLASS_ID }, 122 { "dun", DIALUP_NET_SVCLASS_ID }, 123 { "Ýp", OBEX_OBJPUSH_SVCLASS_ID }, 124 { "çx", FAX_SVCLASS_ID }, 125 { "¥p", SERIAL_PORT_SVCLASS_ID }, 126 { "h¥", HEADSET_SVCLASS_ID }, 127 { "h¥-hs", HEADSET_SVCLASS_ID }, 128 { "h¥-ag", HEADSET_AGW_SVCLASS_ID }, 129 { "hå", HANDSFREE_SVCLASS_ID }, 130 { "hå-hf", HANDSFREE_SVCLASS_ID }, 131 { "hå-ag", HANDSFREE_AGW_SVCLASS_ID }, 132 { "pb­-pû", PBAP_PCE_SVCLASS_ID }, 133 { "pb­-p£", PBAP_PSE_SVCLASS_ID }, 134 { "m­-m£", MAP_MSE_SVCLASS_ID }, 135 { "m­-mas", MAP_MSE_SVCLASS_ID }, 136 { "m­-mû", MAP_MCE_SVCLASS_ID }, 137 { "m­-mns", MAP_MCE_SVCLASS_ID }, 138 { "gnss", GNSS_SERVER_SVCLASS_ID }, 142  ušt16_t $Çme2þass (cÚ¡ * ·‰”n ) 144  i ; 146  i = 0; bt_£rviûs [i]. Çme ; i++) { 147 ià( `¡rÿ£cmp ( bt_£rviûs [ i ]. Çme , ·‰”n ) == 0) 148  bt_£rviûs [ i ]. þass ; 152 } } 154  šlše boÞ $is_uuid128 (cÚ¡ * ¡ršg ) 156  ( `¡¾’ ( ¡ršg ) == 36 && 157 ¡ršg [8] == '-' && 158 ¡ršg [13] == '-' && 159 ¡ršg [18] == '-' && 160 ¡ršg [23] == '-'); 161 } } 163  $¡ršg2uuid16 ( uuid_t * uuid , cÚ¡ * ¡ršg ) 165  Ëngth = `¡¾’ ( ¡ršg ); 166 * ’d±r = NULL ; 167 ušt16_t u16 ; 169 ià( Ëngth != 4 &&†ength != 6) 170  - EINVAL ; 172 u16 = `¡¹Þ ( ¡ršg , & ’d±r , 16); 173 ià( ’d±r && *endptr == '\0') { 174 `sdp_uuid16_ü—‹ ( uuid , u16 ); 178  - EINVAL ; 179 } } 181 * $bt_Çme2¡ršg (cÚ¡ * ·‰”n ) 183 uuid_t uuid ; 184 ušt16_t uuid16 ; 185  i ; 188 ià( `is_uuid128 ( ·‰”n )) 189  `¡rdup ( ·‰”n ); 192 uuid16 = `Çme2þass ( ·‰”n ); 193 ià( uuid16 ) 194  ´oûed ; 197 uuid16 = `¡¹Þ ( ·‰”n , NULL , 16); 198  i = 0; bt_£rviûs [i]. þass ; i++) { 199 ià( bt_£rviûs [ i ]. þass =ð uuid16 ) 200  ´oûed ; 203  NULL ; 205 ´oûed : 206 `sdp_uuid16_ü—‹ (& uuid , uuid16 ); 208  `bt_uuid2¡ršg (& uuid ); 209 } } 211  $bt_¡ršg2uuid ( uuid_t * uuid , cÚ¡ * ¡ršg ) 213 ušt32_t d©a0 , d©a4 ; 214 ušt16_t d©a1 , d©a2 , d©a3 , d©a5 ; 216 ià( `is_uuid128 ( ¡ršg ) && 217 `ssÿnf ( ¡ršg , "%08x-%04hx-%04hx-%04hx-%08x%04hx", 218 & d©a0 , & d©a1 , & d©a2 , & d©a3 , & d©a4 , & d©a5 ) == 6) { 219 ušt8_t v® [16]; 221 d©a0 = `htÚl (data0); 222 d©a1 = `htÚs (data1); 223 d©a2 = `htÚs (data2); 224 d©a3 = `htÚs (data3); 225 d©a4 = `htÚl (data4); 226 d©a5 = `htÚs (data5); 228 `memýy (& v® [0], & d©a0 , 4); 229 `memýy (& v® [4], & d©a1 , 2); 230 `memýy (& v® [6], & d©a2 , 2); 231 `memýy (& v® [8], & d©a3 , 2); 232 `memýy (& v® [10], & d©a4 , 4); 233 `memýy (& v® [14], & d©a5 , 2); 235 `sdp_uuid128_ü—‹ ( uuid , v® ); 239 ušt16_t þass = `Çme2þass ( ¡ršg ); 240 ià( þass ) { 241 `sdp_uuid16_ü—‹ ( uuid , þass ); 245  `¡ršg2uuid16 ( uuid , ¡ršg ); 247 } } @src/uuid-helper.h 24 * bt_mod®Ÿs ( ušt16_t sourû , ušt16_ˆ v’dÜ , 25 ušt16_t ´oduù , ušt16_ˆ v”siÚ ); 26 * bt_uuid2¡ršg ( uuid_t * uuid ); 27 * bt_Çme2¡ršg (cÚ¡ * ¡ršg ); 28  bt_¡ršg2uuid ( uuid_t * uuid , cÚ¡ * ¡ršg ); @tools/3dsp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<ùy³.h > 29  ~<¡dio.h > 30  ~<¡dlib.h > 31  ~<¡ršg.h > 32  ~ 34  ~"mÚ™Ü/mašloÝ.h " 35  ~"mÚ™Ü/bt.h " 36  ~"¤c/sh¬ed/timeout.h " 37  ~"¤c/sh¬ed/utž.h " 38  ~"¤c/sh¬ed/hci.h " 40  #LT_ADDR 0x01 ) 41  #PKT_TYPE 0x0008 ) 42  #SERVICE_DATA LT_ADDR ) 44  bt_hci * ghci_dev ; 46  boÞ g»£t_Ú_š™ = çl£ ; 47  boÞ g»£t_Ú_shutdown = çl£ ; 49  boÞ $shutdown_timeout (* u£r_d©a ) 51 `mašloÝ_qu™ (); 53  çl£ ; 54 } } 56  $shutdown_com¶‘e (cÚ¡ * d©a , ušt8_t size , * u£r_d©a ) 58  id = `PTR_TO_UINT ( u£r_d©a ); 60 `timeout_»move ( id ); 61 `mašloÝ_qu™ (); 62 } } 64  $shutdown_deviû () 66  id ; 68 `bt_hci_æush ( hci_dev ); 70 ià( »£t_Ú_shutdown ) { 71 id = `timeout_add (5000, shutdown_timeout , NULL , NULL); 73 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_RESET , NULL , 0, 74 shutdown_com¶‘e , `UINT_TO_PTR ( id ), NULL ); 76 `mašloÝ_qu™ (); 77 } } 79  $¦ave_brßdÿ¡_»ûive (cÚ¡ * d©a , ušt8_t size , 80 * u£r_d©a ) 82 `´štf ("Slave broadcast„eceiptionƒnabled\n"); 83 } } 85  $sync_Œaš_»ûived (cÚ¡ * d©a , ušt8_t size , 86 * u£r_d©a ) 88 cÚ¡  bt_hci_evt_sync_Œaš_»ûived * evt = d©a ; 89  bt_hci_cmd_£t_¦ave_brßdÿ¡_»ûive cmd ; 91 ià( evt -> ¡©us ) { 92 `´štf ("Failedo synchronize with 3D display\n"); 93 `shutdown_deviû (); 97 cmd . ’abË = 0x01; 98 `memýy ( cmd . bdaddr , evt ->bdaddr, 6); 99 cmd . É_addr = evt ->lt_addr; 100 cmd . š‹rv® = evt ->interval; 101 cmd . off£t = evt ->offset; 102 cmd . š¡ªt = evt ->instant; 103 cmd . timeout = `ýu_to_Ë16 (0xfffe); 104 cmd . accu¿cy = 250; 105 cmd . sk = 20; 106 cmd . pkt_ty³ = `ýu_to_Ë16 ( PKT_TYPE ); 107 `memýy ( cmd . m­ , evt ->map, 10); 109 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_SET_SLAVE_BROADCAST_RECEIVE , 110 & cmd , (cmd), 111 ¦ave_brßdÿ¡_»ûive , NULL , NULL); 112 } } 114  $Œunÿ‹d_·ge_com¶‘e (cÚ¡ * d©a , ušt8_t size , 115 * u£r_d©a ) 117 cÚ¡  bt_hci_evt_Œunÿ‹d_·ge_com¶‘e * evt = d©a ; 118  bt_hci_cmd_»ûive_sync_Œaš cmd ; 120 ià( evt -> ¡©us ) { 121 `´štf ("Failedo contact 3D display\n"); 122 `shutdown_deviû (); 126 `´štf ("Attempto synchronize with 3D display\n"); 128 `bt_hci_»gi¡” ( hci_dev , BT_HCI_EVT_SYNC_TRAIN_RECEIVED , 129 sync_Œaš_»ûived , NULL , NULL); 131 `memýy ( cmd . bdaddr , evt ->bdaddr, 6); 132 cmd . timeout = `ýu_to_Ë16 (0x4000); 133 cmd . wšdow = `ýu_to_Ë16 (0x0100); 134 cmd . š‹rv® = `ýu_to_Ë16 (0x0080); 136 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_RECEIVE_SYNC_TRAIN , & cmd , (cmd), 137 NULL , NULL, NULL); 138 } } 140  $ext_šquœy_»suÉ (cÚ¡ * d©a , ušt8_t size , * u£r_d©a ) 142 cÚ¡  bt_hci_evt_ext_šquœy_»suÉ * evt = d©a ; 144 ià( evt -> dev_þass [0] != 0x3c ||ƒvt->dev_class[1] != 0x04 145 || evt -> dev_þass [2] != 0x08) 148 ià( evt -> d©a [0]) { 149  bt_hci_cmd_Œunÿ‹d_·ge cmd ; 151 `´štf ("Found 3D display\n"); 153 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_INQUIRY_CANCEL , NULL , 0, 154 NULL , NULL, NULL); 156 `bt_hci_»gi¡” ( hci_dev , BT_HCI_EVT_TRUNCATED_PAGE_COMPLETE , 157 Œunÿ‹d_·ge_com¶‘e , NULL , NULL); 159 `memýy ( cmd . bdaddr , evt ->bdaddr, 6); 160 cmd . psÿn_»p_mode = evt ->pscan_rep_mode; 161 cmd . þock_off£t = evt ->clock_offset; 163 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_TRUNCATED_PAGE , 164 & cmd , (cmd), NULL , NULL, NULL); 166 } } 168  $šquœy_com¶‘e (cÚ¡ * d©a , ušt8_t size , * u£r_d©a ) 170 `´štf ("No 3D display found\n"); 172 `shutdown_deviû (); 173 } } 175  $šquœy_¡¬‹d (cÚ¡ * d©a , ušt8_t size , * u£r_d©a ) 177 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 179 ià( ¡©us ) { 180 `´štf ("Failedo search for 3D display\n"); 181 `shutdown_deviû (); 185 `´štf ("Searching for 3D display\n"); 186 } } 188  $¡¬t_gÏs£s () 190  bt_hci_cmd_šquœy cmd ; 191 ušt8_t evtmask1 [] = { 0x03, 0xe0, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00 }; 192 ušt8_t evtmask2 [] = { 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00 }; 193 ušt8_t šqmode = 0x02; 195 ià( »£t_Ú_š™ ) { 196 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_RESET , NULL , 0, 197 NULL , NULL, NULL); 198 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_SET_EVENT_MASK , evtmask1 , 8, 199 NULL , NULL, NULL); 202 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_SET_EVENT_MASK_PAGE2 , evtmask2 , 8, 203 NULL , NULL, NULL); 204 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_WRITE_INQUIRY_MODE , & šqmode , 1, 205 NULL , NULL, NULL); 207 `bt_hci_»gi¡” ( hci_dev , BT_HCI_EVT_INQUIRY_COMPLETE , 208 šquœy_com¶‘e , NULL , NULL); 209 `bt_hci_»gi¡” ( hci_dev , BT_HCI_EVT_EXT_INQUIRY_RESULT , 210 ext_šquœy_»suÉ , NULL , NULL); 212 cmd . Ïp [0] = 0x33; 213 cmd . Ïp [1] = 0x8b; 214 cmd . Ïp [2] = 0x9e; 215 cmd . Ëngth = 0x08; 216 cmd . num_»¥ = 0x00; 218 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_INQUIRY , & cmd , (cmd), 219 šquœy_¡¬‹d , NULL , NULL); 220 } } 222  $cÚn_»que¡ (cÚ¡ * d©a , ušt8_t size , * u£r_d©a ) 224 cÚ¡  bt_hci_evt_cÚn_»que¡ * evt = d©a ; 225  bt_hci_cmd_acû±_cÚn_»que¡ cmd ; 227 `´štf ("Incoming connection from 3D glasses\n"); 229 `memýy ( cmd . bdaddr , evt ->bdaddr, 6); 230 cmd . rÞe = 0x00; 232 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_ACCEPT_CONN_REQUEST , & cmd , (cmd), 233 NULL , NULL, NULL); 234 } } 236  boÞ gsync_Œaš_aùive = çl£ ; 238  $sync_Œaš_com¶‘e (cÚ¡ * d©a , ušt8_t size , 239 * u£r_d©a ) 241 sync_Œaš_aùive = çl£ ; 242 } } 244  $¦ave_·ge_»¥Ú£_timeout (cÚ¡ * d©a , ušt8_t size , 245 * u£r_d©a ) 247  bt_hci_cmd_wr™e_sync_Œaš_·¿ms cmd ; 249 ià( sync_Œaš_aùive ) 252 `´štf ("Starting‚ew synchronizationrain\n"); 254 cmd . mš_š‹rv® = `ýu_to_Ë16 (0x0050); 255 cmd . max_š‹rv® = `ýu_to_Ë16 (0x00a0); 256 cmd . timeout = `ýu_to_Ë32 (0x0002ee00); 257 cmd . £rviû_d©a = SERVICE_DATA ; 259 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_WRITE_SYNC_TRAIN_PARAMS , 260 & cmd , (cmd), NULL , NULL, NULL); 262 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_READ_SYNC_TRAIN_PARAMS , NULL , 0, 263 NULL , NULL, NULL); 265 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_START_SYNC_TRAIN , NULL , 0, 266 NULL , NULL, NULL); 268 sync_Œaš_aùive = Œue ; 269 } } 271  $šquœy_»¥_tx_pow” (cÚ¡ * d©a , ušt8_t size , 272 * u£r_d©a ) 274 cÚ¡  bt_hci_r¥_»ad_šquœy_»¥_tx_pow” * r¥ = d©a ; 275  bt_hci_cmd_wr™e_ext_šquœy_»¥Ú£ cmd ; 276 ušt8_t šqd©a [] = { 0x03, 0x3d, 0x03, 0x43, 0x02, 0x0a, 0x00, 0x00 }; 277 ušt8_t devþass [] = { 0x3c, 0x04, 0x08 }; 278 ušt8_t sÿnmode = 0x03; 280 šqd©a [6] = ( ušt8_t è r¥ -> Ëv– ; 282 cmd . ãc = 0x00; 283 `mem£t ( cmd . d©a , 0, (cmd.data)); 284 `memýy ( cmd . d©a , šqd©a , (inqdata)); 286 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE , 287 & cmd , (cmd), NULL , NULL, NULL); 289 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_WRITE_CLASS_OF_DEV , devþass , 3, 290 NULL , NULL, NULL); 291 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_WRITE_SCAN_ENABLE , & sÿnmode , 1, 292 NULL , NULL, NULL); 293 } } 295  $¡¬t_di¥Ïy () 297  bt_hci_cmd_£t_¦ave_brßdÿ¡ cmd ; 298 ušt8_t bÿ¡d©a [20] = { LT_ADDR , 0x03, 0x11, 0x23, 0x42, }; 299 ušt8_t evtmask1 [] = { 0x1c, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 300 ušt8_t evtmask2 [] = { 0x00, 0xc0, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00 }; 301 ušt8_t s¥mode = 0x01; 302 ušt8_t Éaddr = LT_ADDR ; 304 ià( »£t_Ú_š™ ) { 305 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_RESET , NULL , 0, 306 NULL , NULL, NULL); 307 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_SET_EVENT_MASK , evtmask1 , 8, 308 NULL , NULL, NULL); 311 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_SET_EVENT_MASK_PAGE2 , evtmask2 , 8, 312 NULL , NULL, NULL); 313 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE , & s¥mode , 1, 314 NULL , NULL, NULL); 315 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_SET_RESERVED_LT_ADDR , & Éaddr , 1, 316 NULL , NULL, NULL); 317 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_READ_SYNC_TRAIN_PARAMS , NULL , 0, 318 NULL , NULL, NULL); 320 `bt_hci_»gi¡” ( hci_dev , BT_HCI_EVT_CONN_REQUEST , 321 cÚn_»que¡ , NULL , NULL); 323 `bt_hci_»gi¡” ( hci_dev , BT_HCI_EVT_SLAVE_PAGE_RESPONSE_TIMEOUT , 324 ¦ave_·ge_»¥Ú£_timeout , NULL , NULL); 325 `bt_hci_»gi¡” ( hci_dev , BT_HCI_EVT_SYNC_TRAIN_COMPLETE , 326 sync_Œaš_com¶‘e , NULL , NULL); 328 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_READ_INQUIRY_RESP_TX_POWER , NULL , 0, 329 šquœy_»¥_tx_pow” , NULL , NULL); 331 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_SET_SLAVE_BROADCAST_DATA , 332 bÿ¡d©a , (bÿ¡d©a), NULL , NULL, NULL); 334 cmd . ’abË = 0x01; 335 cmd . É_addr = LT_ADDR ; 336 cmd . Ío_®lowed = 0x01; 337 cmd . pkt_ty³ = `ýu_to_Ë16 ( PKT_TYPE ); 338 cmd . mš_š‹rv® = `ýu_to_Ë16 (0x0050); 339 cmd . max_š‹rv® = `ýu_to_Ë16 (0x00a0); 340 cmd . timeout = `ýu_to_Ë16 (0xfffe); 342 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_SET_SLAVE_BROADCAST , & cmd , (cmd), 343 NULL , NULL, NULL); 344 } } 346  $sigÇl_ÿÎback ( signum , * u£r_d©a ) 348  boÞ ‹rmš©ed = çl£ ; 350  signum ) { 351  SIGINT : 352  SIGTERM : 353 ià(! ‹rmš©ed ) { 354 `shutdown_deviû (); 355 ‹rmš©ed = Œue ; 359 } } 361  $u§ge () 363 `´štf ("3dsp - 3D Synchronization Profileesting\n" 365 `´štf ("\t3dsp [options]\n"); 366 `´štf ("options:\n" 371 } } 373 cÚ¡  ÝtiÚ gmaš_ÝtiÚs [] = { 374 { "di¥Ïy", no_¬gum’t , NULL , 'D' }, 375 { "gÏs£s", no_¬gum’t , NULL , 'G' }, 376 { "šdex", »quœed_¬gum’t , NULL , 'i' }, 377 { "¿w", no_¬gum’t , NULL , 'r' }, 378 { "v”siÚ", no_¬gum’t , NULL , 'v' }, 379 { "h–p", no_¬gum’t , NULL , 'h' }, 383  $maš ( ¬gc , * ¬gv []) 385 boÞ di¥Ïy_rÞe = çl£ , gÏs£s_rÞe = false; 386 ušt16_t šdex = 0; 387 cÚ¡ * ¡r ; 388 boÞ u£_¿w = çl£ ; 389 sig£t_t mask ; 390  ex™_¡©us ; 393  Ýt ; 395 Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "DGi:rvh", maš_ÝtiÚs , NULL ); 396 ià( Ýt < 0) 399  Ýt ) { 401 di¥Ïy_rÞe = Œue ; 404 gÏs£s_rÞe = Œue ; 407 ià( `¡¾’ ( Ýrg è> 3 && ! `¡ºcmp (optarg, "hci", 3)) 408 ¡r = Ýrg + 3; 410 ¡r = Ýrg ; 411 ià(! `isdig™ (* ¡r )) { 412 `u§ge (); 413  EXIT_FAILURE ; 415 šdex = `©oi ( ¡r ); 418 u£_¿w = Œue ; 421 `´štf ("%s\n", VERSION ); 422  EXIT_SUCCESS ; 424 `u§ge (); 425  EXIT_SUCCESS ; 427  EXIT_FAILURE ; 431 ià( ¬gc - Ýtšd > 0) { 432 `årštf ( ¡d”r , "Invalid command†ine…arameters\n"); 433  EXIT_FAILURE ; 436 ià( di¥Ïy_rÞe =ð gÏs£s_rÞe ) { 437 `årštf ( ¡d”r , "Specifyƒither display or glasses„ole\n"); 438  EXIT_FAILURE ; 441 `mašloÝ_š™ (); 443 `sigem±y£t (& mask ); 444 `sigadd£t (& mask , SIGINT ); 445 `sigadd£t (& mask , SIGTERM ); 447 `mašloÝ_£t_sigÇl (& mask , sigÇl_ÿÎback , NULL , NULL); 449 `´štf ("3D SynchrÚiz©iÚ Profž‹¡šg v” %s\n", VERSION ); 451 ià( u£_¿w ) { 452 hci_dev = `bt_hci_Ãw_¿w_deviû ( šdex ); 453 ià(! hci_dev ) { 454 `årštf ( ¡d”r , "Failedo open HCI„aw device\n"); 455  EXIT_FAILURE ; 458 hci_dev = `bt_hci_Ãw_u£r_chªÃl ( šdex ); 459 ià(! hci_dev ) { 460 `årštf ( ¡d”r , "Failedo open HCI user channel\n"); 461  EXIT_FAILURE ; 464 »£t_Ú_š™ = Œue ; 465 »£t_Ú_shutdown = Œue ; 468 ià( di¥Ïy_rÞe ) 469 `¡¬t_di¥Ïy (); 470 ià( gÏs£s_rÞe ) 471 `¡¬t_gÏs£s (); 473 ex™_¡©us = `mašloÝ_run (); 475 `bt_hci_uÄef ( hci_dev ); 477  ex™_¡©us ; 478 } } @tools/amptest.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~<®loÿ.h > 33  ~<¡dlib.h > 34  ~<¡dboÞ.h > 35  ~ 36  ~ 37  ~ 39  ~ 40  ~ 41  ~ 43  $aùiv©e_amp_cÚŒÞËr ( dev_id ) 45  hci_dev_šfo di ; 46  hci_fž‹r æt ; 47  fd ; 49 `´štf ("hci%d: Aùiv©šg cÚŒÞËr\n", dev_id ); 51 fd = `sock‘ ( AF_BLUETOOTH , SOCK_RAW , BTPROTO_HCI ); 52 ià( fd < 0) { 53 `³¼Ü ("Failedo open„aw HCI socket"); 57 di . dev_id = dev_id; 59 ià( `ioùl ( fd , HCIGETDEVINFO , (*è& di ) < 0) { 60 `³¼Ü ("Failedo get HCI device info"); 61 `þo£ ( fd ); 65 ià(! `hci_‹¡_b™ ( HCI_UP , & di . æags )) { 66 ià( `ioùl ( fd , HCIDEVUP , dev_id ) < 0) { 67 ià( ”ºo !ð EALREADY ) { 68 `³¼Ü ("Failedo bring up HCI device"); 69 `þo£ ( fd ); 75 `þo£ ( fd ); 77 fd = `hci_Ý’_dev ( dev_id ); 78 ià( fd < 0) { 79 `³¼Ü ("Failedo open HCI device"); 83 `hci_fž‹r_þ—r (& æt ); 84 `hci_fž‹r_£t_±y³ ( HCI_EVENT_PKT , & æt ); 85 `hci_fž‹r_£t_ev’t ( EVT_CHANNEL_SELECTED , & æt ); 86 `hci_fž‹r_£t_ev’t ( EVT_PHYSICAL_LINK_COMPLETE , & æt ); 87 `hci_fž‹r_£t_ev’t ( EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE , & æt ); 89 ià( `£tsockÝt ( fd , SOL_HCI , HCI_FILTER , & æt , (flt)) < 0) { 90 `³¼Ü ("Failedo setup HCI device filter"); 91 `þo£ ( fd ); 95  fd ; 96 } } 98  boÞ $»ad_loÿl_amp_šfo ( dev_id , ušt16_t * max_assoc_Ën ) 100 »ad_loÿl_amp_šfo_½ ½ ; 101  hci_»que¡ rq ; 102  fd ; 104 `´štf ("hci%d: R—dšg†oÿÈAMP infÜm©iÚ\n", dev_id ); 106 fd = `hci_Ý’_dev ( dev_id ); 107 ià( fd < 0) { 108 `³¼Ü ("Failedo open HCI device"); 109  çl£ ; 112 `mem£t (& ½ , 0, (rp)); 114 `mem£t (& rq , 0, (rq)); 115 rq . ogf = OGF_STATUS_PARAM ; 116 rq . ocf = OCF_READ_LOCAL_AMP_INFO ; 117 rq . ½¬am = & ½ ; 118 rq . ¾’ = READ_LOCAL_AMP_INFO_RP_SIZE ; 120 ià( `hci_£nd_»q ( fd , & rq , 1000) < 0) { 121 `³¼Ü ("Failed sending HCI„equest"); 122 `hci_þo£_dev ( fd ); 123  çl£ ; 126 ià( ½ . ¡©us ) { 127 `årštf ( ¡d”r , "Fažed HCI commªd: 0x%02x\n", ½ . ¡©us ); 128 `hci_þo£_dev ( fd ); 129  çl£ ; 132 `´štf ("\tAMP stus: 0x%02x\n", ½ . amp_¡©us ); 133 `´štf ("\tCÚŒÞ˸ty³: 0x%02x\n", ½ . cÚŒÞËr_ty³ ); 134 `´štf ("\tMax ASSOC†’gth: %d\n", `btohs ( ½ . max_amp_assoc_Ëngth )); 136 * max_assoc_Ën = `btohs ( ½ . max_amp_assoc_Ëngth ); 138 `hci_þo£_dev ( fd ); 140  Œue ; 141 } } 143  boÞ $»ad_loÿl_amp_assoc ( dev_id , ušt8_t phy_hªdË , 144 ušt16_t max_assoc_Ën , 145 ušt8_t * assoc_d©a , 146 ušt16_t * assoc_Ën ) 148 »ad_loÿl_amp_assoc_ý ý ; 149 »ad_loÿl_amp_assoc_½ ½ ; 150  hci_»que¡ rq ; 151  fd ; 153 `´štf ("hci%d: R—dšg†oÿÈAMP‡ssocŸtiÚ\n", dev_id ); 155 fd = `hci_Ý’_dev ( dev_id ); 156 ià( fd < 0) { 157 `³¼Ü ("Failedo open HCI device"); 158  çl£ ; 161 `mem£t (& ý , 0, (cp)); 162 ý . hªdË = phy_hªdË ; 163 ý . Ëngth_so_çr = `htobs (0); 164 ý . assoc_Ëngth = `htobs ( max_assoc_Ën ); 165 `mem£t (& ½ , 0, (rp)); 167 `mem£t (& rq , 0, (rq)); 168 rq . ogf = OGF_STATUS_PARAM ; 169 rq . ocf = OCF_READ_LOCAL_AMP_ASSOC ; 170 rq . ý¬am = & ý ; 171 rq . þ’ = READ_LOCAL_AMP_ASSOC_CP_SIZE ; 172 rq . ½¬am = & ½ ; 173 rq . ¾’ = READ_LOCAL_AMP_ASSOC_RP_SIZE ; 175 ià( `hci_£nd_»q ( fd , & rq , 1000) < 0) { 176 `³¼Ü ("Failed sending HCI„equest"); 177 `hci_þo£_dev ( fd ); 178  çl£ ; 181 ià( ½ . ¡©us ) { 182 `årštf ( ¡d”r , "Fažed HCI commªd: 0x%02x\n", ½ . ¡©us ); 183 `hci_þo£_dev ( fd ); 184  çl£ ; 187 `´štf ("\tRemaš ASSOC†’gth: %d\n", `btohs ( ½ . Ëngth )); 189 * assoc_Ën = `btohs ( ½ . Ëngth ); 190 `memýy ( assoc_d©a , ½ . äagm’t , * assoc_Ën ); 192 `hci_þo£_dev ( fd ); 194  Œue ; 195 } } 197  boÞ $wr™e_»mÙe_amp_assoc ( dev_id , ušt8_t phy_hªdË , 198 ušt8_t * assoc_d©a , 199 ušt16_t assoc_Ën ) 201 wr™e_»mÙe_amp_assoc_ý ý ; 202 wr™e_»mÙe_amp_assoc_½ ½ ; 203  hci_»que¡ rq ; 204  fd ; 206 `´štf ("hci%d: Wr™šg„emÙAMP‡ssocŸtiÚ\n", dev_id ); 208 fd = `hci_Ý’_dev ( dev_id ); 209 ià( fd < 0) { 210 `³¼Ü ("Failedo open HCI device"); 211  çl£ ; 214 `mem£t (& ý , 0, (cp)); 215 ý . hªdË = phy_hªdË ; 216 ý . Ëngth_so_çr = `htobs (0); 217 ý . »maššg_Ëngth = `htobs ( assoc_Ën ); 218 `memýy ( ý . äagm’t , assoc_d©a , assoc_Ën ); 219 `mem£t (& ½ , 0, (rp)); 221 `mem£t (& rq , 0, (rq)); 222 rq . ogf = OGF_STATUS_PARAM ; 223 rq . ocf = OCF_WRITE_REMOTE_AMP_ASSOC ; 224 rq . ý¬am = & ý ; 225 rq . þ’ = 5 + assoc_Ën ; 226 rq . ½¬am = & ½ ; 227 rq . ¾’ = WRITE_REMOTE_AMP_ASSOC_RP_SIZE ; 229 ià( `hci_£nd_»q ( fd , & rq , 1000) < 0) { 230 `³¼Ü ("Failed sending HCI„equest"); 231 `hci_þo£_dev ( fd ); 232  çl£ ; 235 ià( ½ . ¡©us ) { 236 `årštf ( ¡d”r , "Fažed HCI commªd: 0x%02x\n", ½ . ¡©us ); 237 `hci_þo£_dev ( fd ); 238  çl£ ; 241 `hci_þo£_dev ( fd ); 243  Œue ; 244 } } 246  boÞ $chªÃl_£Ëùed_ev’t ( dev_id ,  fd , ušt8_t phy_hªdË ) 248 `´štf ("hci%d: Wa™šg fÜ chªÃÈ£Ëùedƒv’t\n", dev_id ); 251 ušt8_t buf [ HCI_MAX_EVENT_SIZE ]; 252 hci_ev’t_hdr * hdr ; 253  pÞlfd p ; 254  n , Ën ; 256 p . fd = fd; 257 p . ev’ts = POLLIN ; 259 n = `pÞl (& p , 1, 10000); 260 ià( n < 0) { 261 ià( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINTR ) 264 `³¼Ü ("Failedo…oll HCI device"); 265  çl£ ; 268 ià( n == 0) { 269 `årštf ( ¡d”r , "Failureo„eceiveƒvent\n"); 270  çl£ ; 273 Ën = `»ad ( fd , buf , (buf)); 274 ià( Ën < 0) { 275 ià( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINTR ) 278 `³¼Ü ("Failedo„ead from HCI device"); 279  çl£ ; 282 hdr = (*è( buf + 1); 284 ià( hdr -> evt =ð EVT_CHANNEL_SELECTED ) 288  Œue ; 289 } } 291  boÞ $ü—‹_physiÿl_lšk ( dev_id , ušt8_t phy_hªdË ) 293 ü—‹_physiÿl_lšk_ý ý ; 294 evt_cmd_¡©us evt ; 295  hci_»que¡ rq ; 296  i , fd ; 298 `´štf ("hci%d: C»©šg…hysiÿÈlšk\n", dev_id ); 300 fd = `hci_Ý’_dev ( dev_id ); 301 ià( fd < 0) { 302 `³¼Ü ("Failedo open HCI device"); 303  çl£ ; 306 `mem£t (& ý , 0, (cp)); 307 ý . hªdË = phy_hªdË ; 308 ý . key_Ëngth = 32; 309 ý . key_ty³ = 0x03; 310  i = 0; i < ý . key_Ëngth ; i++) 311 ý . key [ i ] = 0x23; 312 `mem£t (& evt , 0, (evt)); 314 `mem£t (& rq , 0, (rq)); 315 rq . ogf = OGF_LINK_CTL ; 316 rq . ocf = OCF_CREATE_PHYSICAL_LINK ; 317 rq . ev’t = EVT_CMD_STATUS ; 318 rq . ý¬am = & ý ; 319 rq . þ’ = CREATE_PHYSICAL_LINK_CP_SIZE ; 320 rq . ½¬am = & evt ; 321 rq . ¾’ = EVT_CMD_STATUS_SIZE ; 323 ià( `hci_£nd_»q ( fd , & rq , 1000) < 0) { 324 `³¼Ü ("Failed sending HCI„equest"); 325 `hci_þo£_dev ( fd ); 326  çl£ ; 329 ià( evt . ¡©us ) { 330 `årštf ( ¡d”r , "Fažed HCI commªd: 0x%02x\n", evt . ¡©us ); 331 `hci_þo£_dev ( fd ); 332  çl£ ; 335 `hci_þo£_dev ( fd ); 337  Œue ; 338 } } 340  boÞ $acû±_physiÿl_lšk ( dev_id , ušt8_t phy_hªdË ) 342 acû±_physiÿl_lšk_ý ý ; 343 evt_cmd_¡©us evt ; 344  hci_»que¡ rq ; 345  i , fd ; 347 `´štf ("hci%d: Acû±šg…hysiÿÈlšk\n", dev_id ); 349 fd = `hci_Ý’_dev ( dev_id ); 350 ià( fd < 0) { 351 `³¼Ü ("Failedo open HCI device"); 352  çl£ ; 355 `mem£t (& ý , 0, (cp)); 356 ý . hªdË = phy_hªdË ; 357 ý . key_Ëngth = 32; 358 ý . key_ty³ = 0x03; 359  i = 0; i < ý . key_Ëngth ; i++) 360 ý . key [ i ] = 0x23; 361 `mem£t (& evt , 0, (evt)); 363 `mem£t (& rq , 0, (rq)); 364 rq . ogf = OGF_LINK_CTL ; 365 rq . ocf = OCF_ACCEPT_PHYSICAL_LINK ; 366 rq . ev’t = EVT_CMD_STATUS ; 367 rq . ý¬am = & ý ; 368 rq . þ’ = ACCEPT_PHYSICAL_LINK_CP_SIZE ; 369 rq . ½¬am = & evt ; 370 rq . ¾’ = EVT_CMD_STATUS_SIZE ; 372 ià( `hci_£nd_»q ( fd , & rq , 1000) < 0) { 373 `³¼Ü ("Failed sending HCI„equest"); 374 `hci_þo£_dev ( fd ); 375  çl£ ; 378 ià( evt . ¡©us ) { 379 `årštf ( ¡d”r , "Fažed HCI commªd: 0x%02x\n", evt . ¡©us ); 380 `hci_þo£_dev ( fd ); 381  çl£ ; 384 `hci_þo£_dev ( fd ); 386  Œue ; 387 } } 389  boÞ $discÚÃù_physiÿl_lšk ( dev_id , ušt8_t phy_hªdË , 390 ušt8_t »asÚ ) 392 discÚÃù_physiÿl_lšk_ý ý ; 393 evt_cmd_¡©us evt ; 394  hci_»que¡ rq ; 395  fd ; 397 `´štf ("hci%d: DiscÚÃùšg…hysiÿÈlšk\n", dev_id ); 399 fd = `hci_Ý’_dev ( dev_id ); 400 ià( fd < 0) { 401 `³¼Ü ("Failedo open HCI device"); 402  çl£ ; 405 `mem£t (& ý , 0, (cp)); 406 ý . hªdË = phy_hªdË ; 407 ý . »asÚ =„eason; 409 `mem£t (& rq , 0, (rq)); 410 rq . ogf = OGF_LINK_CTL ; 411 rq . ocf = OCF_DISCONNECT_PHYSICAL_LINK ; 412 rq . ev’t = EVT_CMD_STATUS ; 413 rq . ý¬am = & ý ; 414 rq . þ’ = DISCONNECT_PHYSICAL_LINK_CP_SIZE ; 415 rq . ½¬am = & evt ; 416 rq . ¾’ = EVT_CMD_STATUS_SIZE ; 418 ià( `hci_£nd_»q ( fd , & rq , 1000) < 0) { 419 `³¼Ü ("Failed sending HCI„equest"); 420 `hci_þo£_dev ( fd ); 421  çl£ ; 424 ià( evt . ¡©us ) { 425 `årštf ( ¡d”r , "Fažed HCI commªd: 0x%02x\n", evt . ¡©us ); 426 `hci_þo£_dev ( fd ); 427  çl£ ; 430 `hci_þo£_dev ( fd ); 432  Œue ; 433 } } 435  boÞ $physiÿl_lšk_com¶‘e_ev’t ( dev_id ,  fd , 436 ušt8_t phy_hªdË ) 438 `´štf ("hci%d: Wa™šg fÜ…hysiÿÈlšk com¶‘ev’t\n", dev_id ); 441 ušt8_t buf [ HCI_MAX_EVENT_SIZE ]; 442 hci_ev’t_hdr * hdr ; 443  Ën ; 445 Ën = `»ad ( fd , buf , (buf)); 446 ià( Ën < 0) { 447 ià( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINTR ) 450 `³¼Ü ("Failedo„ead from HCI device"); 451  çl£ ; 454 hdr = (*è( buf + 1); 456 ià( hdr -> evt =ð EVT_PHYSICAL_LINK_COMPLETE ) 460  Œue ; 461 } } 463  boÞ $discÚÃù_physiÿl_lšk_com¶‘e_ev’t ( dev_id ,  fd , 464 ušt8_t phy_hªdË ) 466 `´štf ("hci%d: Wa™šg fÜ…hysiÿÈlšk discÚÃùƒv’t\n", dev_id ); 469 ušt8_t buf [ HCI_MAX_EVENT_SIZE ]; 470 hci_ev’t_hdr * hdr ; 471  Ën ; 473 Ën = `»ad ( fd , buf , (buf)); 474 ià( Ën < 0) { 475 ià( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINTR ) 478 `³¼Ü ("Failedo„ead from HCI device"); 479  çl£ ; 482 hdr = (*è( buf + 1); 484 ià( hdr -> evt =ð EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE ) 488  Œue ; 489 } } 491  gamp1_dev_id = -1; 492  gamp2_dev_id = -1; 494  boÞ $fšd_amp_cÚŒÞËr () 496  hci_dev_li¡_»q * dl ; 497  hci_dev_»q * dr ; 498  fd , i ; 499 boÞ »suÉ ; 501 fd = `sock‘ ( AF_BLUETOOTH , SOCK_RAW , BTPROTO_HCI ); 502 ià( fd < 0) { 503 `³¼Ü ("Failedo open„aw HCI socket"); 504  çl£ ; 507 dl = `m®loc ( HCI_MAX_DEV * ( hci_dev_»q è+ ( ušt16_t )); 508 ià(! dl ) { 509 `³¼Ü ("Failed‡llocate HCI device„equest memory"); 510 `þo£ ( fd ); 511  çl£ ; 514 dl -> dev_num = HCI_MAX_DEV ; 515 dr = dl -> dev_»q ; 517 ià( `ioùl ( fd , HCIGETDEVLIST , (*è dl ) < 0) { 518 `³¼Ü ("Failedo get HCI device†ist"); 519 »suÉ = çl£ ; 520  dÚe ; 523  i = 0; i< dl -> dev_num ; i++) { 524  hci_dev_šfo di ; 526 di . dev_id = ( dr + i )->dev_id; 528 ià( `ioùl ( fd , HCIGETDEVINFO , (*è& di ) < 0) 531 ià((( di . ty³ & 0x30è>> 4è!ð HCI_AMP ) 534 ià( amp1_dev_id < 0) 535 amp1_dev_id = di . dev_id ; 536 ià( amp2_dev_id < 0) { 537 ià( di . dev_id < amp1_dev_id ) { 538 amp2_dev_id = amp1_dev_id ; 539 amp1_dev_id = di . dev_id ; 541 amp2_dev_id = di . dev_id ; 545 »suÉ = Œue ; 547 dÚe : 548 `ä“ ( dl ); 549 `þo£ ( fd ); 550  »suÉ ; 551 } } 553  $maš ( ¬gc ,* ¬gv []) 555  amp1_ev’t_fd , amp2_ev’t_fd ; 556 ušt16_t amp1_max_assoc_Ën , amp2_max_assoc_Ën ; 557 ušt8_t * amp1_assoc_d©a , * amp2_assoc_d©a ; 558 ušt16_t amp1_assoc_Ën , amp2_assoc_Ën ; 559 ušt8_t amp1_phy_hªdË , amp2_phy_hªdË ; 561 ià(! `fšd_amp_cÚŒÞËr ()) 562  EXIT_FAILURE ; 564 ià( amp1_dev_id < 0 || amp2_dev_id < 0) { 565 `årštf ( ¡d”r , "Two AMP controllers‡re„equired\n"); 566  EXIT_FAILURE ; 569 `´štf ("hci%d: AMP in™ŸtÜ\n", amp1_dev_id ); 570 `´štf ("hci%d: AMP‡cû±Ü\n", amp2_dev_id ); 572 amp1_ev’t_fd = `aùiv©e_amp_cÚŒÞËr ( amp1_dev_id ); 573 ià( amp1_ev’t_fd < 0) 574  EXIT_FAILURE ; 576 amp2_ev’t_fd = `aùiv©e_amp_cÚŒÞËr ( amp2_dev_id ); 577 ià( amp2_ev’t_fd < 0) { 578 `hci_þo£_dev ( amp1_ev’t_fd ); 579  EXIT_FAILURE ; 582 ià(! `»ad_loÿl_amp_šfo ( amp1_dev_id , & amp1_max_assoc_Ën )) 583  EXIT_FAILURE ; 585 amp1_assoc_d©a = `®loÿ ( amp1_max_assoc_Ën ); 587 `´štf ("--> AMP_Get_Info_Request (Amp_ID B)\n"); 589 ià(! `»ad_loÿl_amp_šfo ( amp2_dev_id , & amp2_max_assoc_Ën )) 590  EXIT_FAILURE ; 592 amp2_assoc_d©a = `®loÿ ( amp2_max_assoc_Ën ); 594 `´štf ("<-- AMP_Get_Info_Response (Amp_ID B, Status)\n"); 596 `´štf ("--> AMP_Get_AMP_Assoc_Request (Amp_ID B)\n"); 598 ià(! `»ad_loÿl_amp_assoc ( amp2_dev_id , 0x00, amp2_max_assoc_Ën , 599 amp2_assoc_d©a , & amp2_assoc_Ën )) 600  EXIT_FAILURE ; 602 `´štf ("<-- AMP_Get_AMP_Assoc_Response (Amp_ID B, AMP_Assoc B)\n"); 604 amp1_phy_hªdË = 0x04; 606 ià(! `ü—‹_physiÿl_lšk ( amp1_dev_id , amp1_phy_hªdË )) 607  EXIT_FAILURE ; 609 ià(! `wr™e_»mÙe_amp_assoc ( amp1_dev_id , amp1_phy_hªdË , 610 amp2_assoc_d©a , amp2_assoc_Ën )) 611  EXIT_FAILURE ; 613 `´štf ("hci%d: SigÇÈMACØsÿn\n", amp1_dev_id ); 615 `´štf ("hci%d: SigÇÈMACØ¡¬t\n", amp1_dev_id ); 617 ià(! `chªÃl_£Ëùed_ev’t ( amp1_dev_id , amp1_ev’t_fd , 618 amp1_phy_hªdË )) 619  EXIT_FAILURE ; 621 ià(! `»ad_loÿl_amp_assoc ( amp1_dev_id , amp1_phy_hªdË , 622 amp1_max_assoc_Ën , 623 amp1_assoc_d©a , & amp1_assoc_Ën )) 624  EXIT_FAILURE ; 626 `´štf ("--> AMP_Create_Physical_Link_Request (Remote-Amp-ID B, AMP_Assoc A)\n"); 628 amp2_phy_hªdË = 0x05; 630 ià(! `acû±_physiÿl_lšk ( amp2_dev_id , amp2_phy_hªdË )) 631  EXIT_FAILURE ; 633 ià(! `wr™e_»mÙe_amp_assoc ( amp2_dev_id , amp2_phy_hªdË , 634 amp1_assoc_d©a , amp1_assoc_Ën )) 635  EXIT_FAILURE ; 637 `´štf ("hci%d: SigÇÈMACØ¡¬t\n", amp2_dev_id ); 639 `´štf ("<-- AMP_Create_Physical_Link_Response (Local-Amp-ID B, Status)\n"); 641 ià(! `physiÿl_lšk_com¶‘e_ev’t ( amp2_dev_id , amp2_ev’t_fd , 642 amp2_phy_hªdË )) 643  EXIT_FAILURE ; 645 ià(! `physiÿl_lšk_com¶‘e_ev’t ( amp1_dev_id , amp1_ev’t_fd , 646 amp1_phy_hªdË )) 647  EXIT_FAILURE ; 651 ià(! `discÚÃù_physiÿl_lšk ( amp1_dev_id , amp1_phy_hªdË , 0x13)) 652  EXIT_FAILURE ; 654 ià(! `discÚÃù_physiÿl_lšk_com¶‘e_ev’t ( amp1_dev_id , 655 amp1_ev’t_fd , 656 amp1_phy_hªdË )) 657  EXIT_FAILURE ; 659 ià(! `discÚÃù_physiÿl_lšk_com¶‘e_ev’t ( amp2_dev_id , 660 amp2_ev’t_fd , 661 amp2_phy_hªdË )) 662  EXIT_FAILURE ; 664 `hci_þo£_dev ( amp2_ev’t_fd ); 665 `hci_þo£_dev ( amp1_ev’t_fd ); 667  EXIT_SUCCESS ; 668 } } @tools/avinfo.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<ùy³.h > 32  ~ 33  ~ 34  ~<¡dlib.h > 35  ~<¡ršg.h > 36  ~ 37  ~<¡dšt.h > 38  ~ 39  ~ 40  ~ 42  ~"´ofžes/audio/a2dp-codecs.h " 44  ~ 45  ~ 46  ~ 47  ~ 49  #AVDTP_PSM 25 ) 52  #AVDTP_DISCOVER 0x01 ) 53  #AVDTP_GET_CAPABILITIES 0x02 ) 55  #AVDTP_PKT_TYPE_SINGLE 0x00 ) 57  #AVDTP_MSG_TYPE_COMMAND 0x00 ) 60  #AVDTP_MEDIA_TRANSPORT 0x01 ) 61  #AVDTP_REPORTING 0x02 ) 62  #AVDTP_RECOVERY 0x03 ) 63  #AVDTP_CONTENT_PROTECTION 0x04 ) 64  #AVDTP_HEADER_COMPRESSION 0x05 ) 65  #AVDTP_MULTIPLEXING 0x06 ) 66  #AVDTP_MEDIA_CODEC 0x07 ) 69  #AVDTP_SEP_TYPE_SOURCE 0x00 ) 70  #AVDTP_SEP_TYPE_SINK 0x01 ) 73  #AVDTP_MEDIA_TYPE_AUDIO 0x00 ) 74  #AVDTP_MEDIA_TYPE_VIDEO 0x01 ) 75  #AVDTP_MEDIA_TYPE_MULTIMEDIA 0x02 ) 77  savd_£rviû_ÿ·bž™y { 78 ušt8_t mÿ‹gÜy ; 79 ušt8_t mËngth ; 80 ušt8_t md©a [0]; 81 } __©Œibu‹__ (( ·cked )); 83 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 85  savd_h—d” { 86 ušt8_t mmes§ge_ty³ :2; 87 ušt8_t m·ck‘_ty³ :2; 88 ušt8_t mŒª§ùiÚ :4; 89 ušt8_t msigÇl_id :6; 90 ušt8_t mrç0 :2; 91 } __©Œibu‹__ (( ·cked )); 93  s£id_šfo { 94 ušt8_t mrç0 :1; 95 ušt8_t mšu£ :1; 96 ušt8_t m£id :6; 97 ušt8_t mrç2 :3; 98 ušt8_t mty³ :1; 99 ušt8_t mmedŸ_ty³ :4; 100 } __©Œibu‹__ (( ·cked )); 102  s£id_»q { 103  avd_h—d” mh—d” ; 104 ušt8_t mrç0 :2; 105 ušt8_t maý_£id :6; 106 } __©Œibu‹__ (( ·cked )); 108  savd_medŸ_codec_ÿ·bž™y { 109 ušt8_t mrç0 :4; 110 ušt8_t mmedŸ_ty³ :4; 111 ušt8_t mmedŸ_codec_ty³ ; 112 ušt8_t md©a [0]; 113 } __©Œibu‹__ (( ·cked )); 115 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 117  savd_h—d” { 118 ušt8_t mŒª§ùiÚ :4; 119 ušt8_t m·ck‘_ty³ :2; 120 ušt8_t mmes§ge_ty³ :2; 121 ušt8_t mrç0 :2; 122 ušt8_t msigÇl_id :6; 123 } __©Œibu‹__ (( ·cked )); 125  s£id_šfo { 126 ušt8_t m£id :6; 127 ušt8_t mšu£ :1; 128 ušt8_t mrç0 :1; 129 ušt8_t mmedŸ_ty³ :4; 130 ušt8_t mty³ :1; 131 ušt8_t mrç2 :3; 132 } __©Œibu‹__ (( ·cked )); 134  s£id_»q { 135  avd_h—d” mh—d” ; 136 ušt8_t maý_£id :6; 137 ušt8_t mrç0 :2; 138 } __©Œibu‹__ (( ·cked )); 140  savd_medŸ_codec_ÿ·bž™y { 141 ušt8_t mmedŸ_ty³ :4; 142 ušt8_t mrç0 :4; 143 ušt8_t mmedŸ_codec_ty³ ; 144 ušt8_t md©a [0]; 145 } __©Œibu‹__ (( ·cked )); 151  sdiscov”_»¥ { 152  avd_h—d” mh—d” ; 153  £id_šfo m£ps [0]; 154 } __©Œibu‹__ (( ·cked )); 156  sg‘ÿp_»¥ { 157  avd_h—d” mh—d” ; 158 ušt8_t mÿps [0]; 159 } __©Œibu‹__ (( ·cked )); 161  $´št_­tx ( a2dp_­tx_t * ­tx ) 163 `´štf ("\t\tVendor Specific Value (aptX)"); 165 `´štf ("\n\t\t\tFrequencies: "); 166 ià( ­tx -> äequ’cy & APTX_SAMPLING_FREQ_16000 ) 167 `´štf ("16kHz "); 168 ià( ­tx -> äequ’cy & APTX_SAMPLING_FREQ_32000 ) 169 `´štf ("32kHz "); 170 ià( ­tx -> äequ’cy & APTX_SAMPLING_FREQ_44100 ) 171 `´štf ("44.1kHz "); 172 ià( ­tx -> äequ’cy & APTX_SAMPLING_FREQ_48000 ) 173 `´štf ("48kHz "); 175 `´štf ("\n\t\t\tChannel modes: "); 176 ià( ­tx -> chªÃl_mode & APTX_CHANNEL_MODE_MONO ) 177 `´štf ("Mono "); 178 ià( ­tx -> chªÃl_mode & APTX_CHANNEL_MODE_STEREO ) 179 `´štf ("Stereo "); 181 `´štf ("\n"); 182 } } 184  $´št_v’dÜ ( a2dp_v’dÜ_codec_t * v’dÜ ) 186 ušt32_t v’dÜ_id = `btohl ( v’dÜ ->vendor_id); 187 ušt16_t codec_id = `btohs ( v’dÜ ->codec_id); 189 `´štf ("\tMedia Codec: Vendor Specific A2DP Codec"); 191 `´štf ("\n\t\tV’dÜ ID 0x%08x", v’dÜ_id ); 193 `´štf ("\n\t\tV’dÜ S³cifiøCodeøID 0x%04x\n", codec_id ); 195 ià( v’dÜ_id =ð APTX_VENDOR_ID && codec_id =ð APTX_CODEC_ID ) 196 `´št_­tx ((*è v’dÜ ); 197 } } 199  $´št_m³g24 ( a2dp_¯c_t * ¯c ) 201  äeq = `AAC_GET_FREQUENCY (* ¯c ); 202  b™¿‹ = `AAC_GET_BITRATE (* ¯c ); 204 `´štf ("\tMedia Codec: MPEG24\n\t\tObject Types: "); 206 ià( ¯c -> objeù_ty³ & AAC_OBJECT_TYPE_MPEG2_AAC_LC ) 207 `´štf ("MPEG-2 AAC LC "); 208 ià( ¯c -> objeù_ty³ & AAC_OBJECT_TYPE_MPEG4_AAC_LC ) 209 `´štf ("MPEG-4 AAC LC "); 210 ià( ¯c -> objeù_ty³ & AAC_OBJECT_TYPE_MPEG4_AAC_LTP ) 211 `´štf ("MPEG-4 AAC LTP "); 212 ià( ¯c -> objeù_ty³ & AAC_OBJECT_TYPE_MPEG4_AAC_SCA ) 213 `´štf ("MPEG-4 AAC scalable "); 215 `´štf ("\n\t\tFrequencies: "); 216 ià( äeq & AAC_SAMPLING_FREQ_8000 ) 217 `´štf ("8kHz "); 218 ià( äeq & AAC_SAMPLING_FREQ_11025 ) 219 `´štf ("11.025kHz "); 220 ià( äeq & AAC_SAMPLING_FREQ_12000 ) 221 `´štf ("12kHz "); 222 ià( äeq & AAC_SAMPLING_FREQ_16000 ) 223 `´štf ("16kHz "); 224 ià( äeq & AAC_SAMPLING_FREQ_22050 ) 225 `´štf ("22.05kHz "); 226 ià( äeq & AAC_SAMPLING_FREQ_24000 ) 227 `´štf ("24kHz "); 228 ià( äeq & AAC_SAMPLING_FREQ_32000 ) 229 `´štf ("32kHz "); 230 ià( äeq & AAC_SAMPLING_FREQ_44100 ) 231 `´štf ("44.1kHz "); 232 ià( äeq & AAC_SAMPLING_FREQ_48000 ) 233 `´štf ("48kHz "); 234 ià( äeq & AAC_SAMPLING_FREQ_64000 ) 235 `´štf ("64kHz "); 236 ià( äeq & AAC_SAMPLING_FREQ_88200 ) 237 `´štf ("88.2kHz "); 238 ià( äeq & AAC_SAMPLING_FREQ_96000 ) 239 `´štf ("96kHz "); 241 `´štf ("\n\t\tChannels: "); 242 ià( ¯c -> chªÃls & AAC_CHANNELS_1 ) 243 `´štf ("1 "); 244 ià( ¯c -> chªÃls & AAC_CHANNELS_2 ) 245 `´štf ("2 "); 247 `´štf ("\n\t\tB™¿‹: %u", b™¿‹ ); 249 `´štf ("\n\t\tVBR: %s", ¯c -> vbr ? "Yes\n" : "No\n"); 250 } } 252  $´št_m³g12 ( a2dp_m³g_t * m³g ) 254 `´štf ("\tMedia Codec: MPEG12\n\t\tChannel Modes: "); 256 ià( m³g -> chªÃl_mode & MPEG_CHANNEL_MODE_MONO ) 257 `´štf ("Mono "); 258 ià( m³g -> chªÃl_mode & MPEG_CHANNEL_MODE_DUAL_CHANNEL ) 259 `´štf ("DualChannel "); 260 ià( m³g -> chªÃl_mode & MPEG_CHANNEL_MODE_STEREO ) 261 `´štf ("Stereo "); 262 ià( m³g -> chªÃl_mode & MPEG_CHANNEL_MODE_JOINT_STEREO ) 263 `´štf ("JointStereo"); 265 `´štf ("\n\t\tFrequencies: "); 266 ià( m³g -> äequ’cy & MPEG_SAMPLING_FREQ_16000 ) 267 `´štf ("16Khz "); 268 ià( m³g -> äequ’cy & MPEG_SAMPLING_FREQ_22050 ) 269 `´štf ("22.05Khz "); 270 ià( m³g -> äequ’cy & MPEG_SAMPLING_FREQ_24000 ) 271 `´štf ("24Khz "); 272 ià( m³g -> äequ’cy & MPEG_SAMPLING_FREQ_32000 ) 273 `´štf ("32Khz "); 274 ià( m³g -> äequ’cy & MPEG_SAMPLING_FREQ_44100 ) 275 `´štf ("44.1Khz "); 276 ià( m³g -> äequ’cy & MPEG_SAMPLING_FREQ_48000 ) 277 `´štf ("48Khz "); 279 `´štf ("\n\t\tCRC: %s", m³g -> üc ? "Yes" : "No"); 281 `´štf ("\n\t\tLayer: "); 282 ià( m³g -> Ïy” & MPEG_LAYER_MP1 ) 283 `´štf ("1 "); 284 ià( m³g -> Ïy” & MPEG_LAYER_MP2 ) 285 `´štf ("2 "); 286 ià( m³g -> Ïy” & MPEG_LAYER_MP3 ) 287 `´štf ("3 "); 289 `´štf ("\n\t\tBit Rate: "); 290 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_FREE ) 291 `´štf ("Free format"); 293 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_32000 ) 294 `´štf ("32kbps "); 295 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_40000 ) 296 `´štf ("40kbps "); 297 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_48000 ) 298 `´štf ("48kbps "); 299 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_56000 ) 300 `´štf ("56kbps "); 301 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_64000 ) 302 `´štf ("64kbps "); 303 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_80000 ) 304 `´štf ("80kbps "); 305 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_96000 ) 306 `´štf ("96kbps "); 307 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_112000 ) 308 `´štf ("112kbps "); 309 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_128000 ) 310 `´štf ("128kbps "); 311 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_160000 ) 312 `´štf ("160kbps "); 313 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_192000 ) 314 `´štf ("192kbps "); 315 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_224000 ) 316 `´štf ("224kbps "); 317 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_256000 ) 318 `´štf ("256kbps "); 319 ià( m³g -> b™¿‹ & MPEG_BIT_RATE_320000 ) 320 `´štf ("320kbps "); 323 `´štf ("\n\t\tVBR: %s", m³g -> b™¿‹ & MPEG_BIT_RATE_VBR ? "Yes" : 326 `´štf ("\n\t\tPayload Format: "); 327 ià( m³g -> mpf ) 328 `´štf ("RFC-2250 RFC-3119\n"); 330 `´štf ("RFC-2250\n"); 331 } } 333  $´št_sbc ( a2dp_sbc_t * sbc ) 335 `´štf ("\tMedia Codec: SBC\n\t\tChannel Modes: "); 337 ià( sbc -> chªÃl_mode & SBC_CHANNEL_MODE_MONO ) 338 `´štf ("Mono "); 339 ià( sbc -> chªÃl_mode & SBC_CHANNEL_MODE_DUAL_CHANNEL ) 340 `´štf ("DualChannel "); 341 ià( sbc -> chªÃl_mode & SBC_CHANNEL_MODE_STEREO ) 342 `´štf ("Stereo "); 343 ià( sbc -> chªÃl_mode & SBC_CHANNEL_MODE_JOINT_STEREO ) 344 `´štf ("JointStereo"); 346 `´štf ("\n\t\tFrequencies: "); 347 ià( sbc -> äequ’cy & SBC_SAMPLING_FREQ_16000 ) 348 `´štf ("16Khz "); 349 ià( sbc -> äequ’cy & SBC_SAMPLING_FREQ_32000 ) 350 `´štf ("32Khz "); 351 ià( sbc -> äequ’cy & SBC_SAMPLING_FREQ_44100 ) 352 `´štf ("44.1Khz "); 353 ià( sbc -> äequ’cy & SBC_SAMPLING_FREQ_48000 ) 354 `´štf ("48Khz "); 356 `´štf ("\n\t\tSubbands: "); 357 ià( sbc -> ®loÿtiÚ_m‘hod & SBC_SUBBANDS_4 ) 358 `´štf ("4 "); 359 ià( sbc -> ®loÿtiÚ_m‘hod & SBC_SUBBANDS_8 ) 360 `´štf ("8"); 362 `´štf ("\n\t\tBlocks: "); 363 ià( sbc -> block_Ëngth & SBC_BLOCK_LENGTH_4 ) 364 `´štf ("4 "); 365 ià( sbc -> block_Ëngth & SBC_BLOCK_LENGTH_8 ) 366 `´štf ("8 "); 367 ià( sbc -> block_Ëngth & SBC_BLOCK_LENGTH_12 ) 368 `´štf ("12 "); 369 ià( sbc -> block_Ëngth & SBC_BLOCK_LENGTH_16 ) 370 `´štf ("16 "); 372 `´štf ("\n\t\tBitpool Range: %d-%d\n", 373 sbc -> mš_b™poÞ , sbc-> max_b™poÞ ); 374 } } 376  $´št_medŸ_codec ( avd_medŸ_codec_ÿ·bž™y * ÿp ) 378  ÿp -> medŸ_codec_ty³ ) { 379  A2DP_CODEC_SBC : 380 `´št_sbc ((*è ÿp -> d©a ); 382  A2DP_CODEC_MPEG12 : 383 `´št_m³g12 ((*è ÿp -> d©a ); 385  A2DP_CODEC_MPEG24 : 386 `´št_m³g24 ((*è ÿp -> d©a ); 388  A2DP_CODEC_VENDOR : 389 `´št_v’dÜ ((*è ÿp -> d©a ); 392 `´štf ("\tMedia Codec: Unknown\n"); 394 } } 396  $´št_ÿps (* d©a ,  size ) 398  ´oûs£d ; 400  ´oûs£d = 0;…roûs£d + 2 < size ;) { 401  avd_£rviû_ÿ·bž™y * ÿp ; 403 ÿp = d©a ; 405 ià( ´oûs£d + 2 + ÿp -> Ëngth > size ) { 406 `´štf ("Invalid capability data in getcap„esp\n"); 410  ÿp -> ÿ‹gÜy ) { 411  AVDTP_MEDIA_TRANSPORT : 412  AVDTP_REPORTING : 413  AVDTP_RECOVERY : 414  AVDTP_CONTENT_PROTECTION : 415  AVDTP_MULTIPLEXING : 418  AVDTP_MEDIA_CODEC : 419 `´št_medŸ_codec ((*è ÿp -> d©a ); 423 ´oûs£d +ð2 + ÿp -> Ëngth ; 424 d©a +ð2 + ÿp -> Ëngth ; 426 } } 428  $š™_»que¡ ( avd_h—d” * h—d” ,  »que¡_id ) 430  Œª§ùiÚ = 0; 432 h—d” -> ·ck‘_ty³ = AVDTP_PKT_TYPE_SINGLE ; 433 h—d” -> mes§ge_ty³ = AVDTP_MSG_TYPE_COMMAND ; 434 h—d” -> Œª§ùiÚ =ransaction; 435 h—d” -> sigÇl_id = »que¡_id ; 438 h—d” -> rç0 = 0; 440 Œª§ùiÚ = (transaction + 1) % 16; 441 } } 443  ssize_t $avd_£nd ( sk , * d©a ,  Ën ) 445 ssize_t »t ; 447 »t = `£nd ( sk , d©a , Ën , 0); 449 ià( »t < 0) 450 »t = - ”ºo ; 451 ià( »t !ð Ën ) 452 »t = - EIO ; 454 ià( »t < 0) { 455 `´štf ("Unableo send message: %s (%zd)\n", 456 `¡»¼Ü (- »t ), -ret); 457  »t ; 460  »t ; 461 } } 463  ssize_t $avd_»ûive ( sk , * d©a ,  Ën ) 465 ssize_t »t ; 467 »t = `»cv ( sk , d©a , Ën , 0); 469 ià( »t < 0) { 470 `´štf ("Unableo„eceive message: %s (%d)\n", 471 `¡»¼Ü ( ”ºo ),ƒrrno); 472  - ”ºo ; 475  »t ; 476 } } 478  ssize_t $avd_g‘_ÿps ( sk ,  £id ) 480  £id_»q »q ; 481  bufãr [1024]; 482  g‘ÿp_»¥ * ÿps = (*è bufãr ; 483 ssize_t »t ; 485 `mem£t (& »q , 0, (req)); 486 `š™_»que¡ (& »q . h—d” , AVDTP_GET_CAPABILITIES ); 487 »q . aý_£id = £id ; 489 »t = `avd_£nd ( sk , & »q , (req)); 490 ià( »t < 0) 491  »t ; 493 `mem£t (& bufãr , 0, (buffer)); 494 »t = `avd_»ûive ( sk , ÿps , ( bufãr )); 495 ià( »t < 0) 496  »t ; 498 ià(( size_t è »t < (( g‘ÿp_»¥ ) + 4 + 499 ( avd_medŸ_codec_ÿ·bž™y ))) { 500 `´štf ("Invalid capabilities\n"); 504 `´št_ÿps ( ÿps , »t ); 507 } } 509  ssize_t $avd_discov” ( sk ) 511  avd_h—d” »q ; 512  bufãr [256]; 513  discov”_»¥ * discov” = (*è bufãr ; 514  £ps , i ; 515 ssize_t »t ; 517 `mem£t (& »q , 0, (req)); 518 `š™_»que¡ (& »q , AVDTP_DISCOVER ); 520 »t = `avd_£nd ( sk , & »q , (req)); 521 ià( »t < 0) 522  »t ; 524 `mem£t (& bufãr , 0, (buffer)); 525 »t = `avd_»ûive ( sk , discov” , ( bufãr )); 526 ià( »t < 0) 527  »t ; 529 £ps = ( »t - ( avd_h—d” )è/ ( £id_šfo ); 530  i = 0; i < £ps ; i++) { 531 cÚ¡ * ty³ , * medŸ ; 533  discov” -> £ps [ i ]. ty³ ) { 534  AVDTP_SEP_TYPE_SOURCE : 535 ty³ = "Source"; 537  AVDTP_SEP_TYPE_SINK : 538 ty³ = "Sink"; 541 ty³ = "Invalid"; 544  discov” -> £ps [ i ]. medŸ_ty³ ) { 545  AVDTP_MEDIA_TYPE_AUDIO : 546 medŸ = "Audio"; 548  AVDTP_MEDIA_TYPE_VIDEO : 549 medŸ = "Video"; 551  AVDTP_MEDIA_TYPE_MULTIMEDIA : 552 medŸ = "Multimedia"; 555 medŸ = "Invalid"; 558 `´štf ("Stream End-Point #%d: %s %s %s\n", 559 discov” -> £ps [ i ]. £id , medŸ , ty³ , 560 discov” -> £ps [ i ]. šu£ ? "*" : ""); 562 `avd_g‘_ÿps ( sk , discov” -> £ps [ i ]. £id ); 566 } } 568  $l2ÿp_cÚÃù ( bdaddr_t * ¤c , bdaddr_ˆ* d¡ ) 570  sockaddr_l2 l2a ; 571  sk ; 573 `mem£t (& l2a , 0, (l2a)); 574 l2a . l2_çmžy = AF_BLUETOOTH ; 575 `baýy (& l2a . l2_bdaddr , ¤c ); 577 sk = `sock‘ ( AF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_L2CAP ); 578 ià( sk < 0) { 579 `´štf ("CªnÙ c»©L2CAP sock‘. %s(%d)\n", `¡»¼Ü ( ”ºo ), 580 ”ºo ); 581  - ”ºo ; 584 ià( `bšd ( sk , ( sockaddr *è& l2a , (l2a)) < 0) { 585 `´štf ("Bšd fažed. % (%d)\n", `¡»¼Ü ( ”ºo ),ƒrrno); 586 `þo£ ( sk ); 587  - ”ºo ; 590 `mem£t (& l2a , 0, (l2a)); 591 l2a . l2_çmžy = AF_BLUETOOTH ; 592 `baýy (& l2a . l2_bdaddr , d¡ ); 593 l2a . l2_psm = `htobs ( AVDTP_PSM ); 595 ià( `cÚÃù ( sk , ( sockaddr *è& l2a , (l2a)) < 0) { 596 `´štf ("CÚÃù fažed. %s(%d)\n", `¡»¼Ü ( ”ºo ),ƒrrno); 597 `þo£ ( sk ); 598  - ”ºo ; 601  sk ; 602 } } 604  $u§ge () 606 `´štf ("avšfØ- Audio/VideØInfØToÞ v” %s\n", VERSION ); 607 `´štf ("Usage:\n" 609 `´štf ("Options:\n" 612 } } 614  ÝtiÚ gmaš_ÝtiÚs [] = { 620  $maš ( ¬gc , * ¬gv []) 622 bdaddr_t ¤c , d¡ ; 623  Ýt , sk , dev_id ; 625 ià( ¬gc < 2) { 626 `u§ge (); 627 `ex™ (0); 630 `baýy (& ¤c , BDADDR_ANY ); 631 dev_id = `hci_g‘_rou‹ (& ¤c ); 632 ià(( dev_id < 0è|| ( `hci_devba (dev_id, & ¤c ) < 0)) { 633 `´štf ("Cannot find‡ny†ocal‡dapter\n"); 634 `ex™ (-1); 637 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+i:h", maš_ÝtiÚs , NULL )) != -1) { 638  Ýt ) { 640 ià(! `¡ºcmp ( Ýrg , "hci", 3)) 641 `hci_devba ( `©oi ( Ýrg + 3), & ¤c ); 643 `¡r2ba ( Ýrg , & ¤c ); 648 `u§ge (); 649 `ex™ (0); 653 `´štf ("Connecting ... \n"); 655 ià( `bachk ( ¬gv [ Ýtšd ]) < 0) { 656 `´štf ("Invalid‡rgument\n"); 657 `ex™ (1); 660 `¡r2ba ( ¬gv [ Ýtšd ], & d¡ ); 661 sk = `l2ÿp_cÚÃù (& ¤c , & d¡ ); 662 ià( sk < 0) 663 `ex™ (1); 665 ià( `avd_discov” ( sk ) < 0) 666 `ex™ (1); 669 } } @tools/avtest.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 34  ~ 35  ~ 36  ~<Ãtš‘/š.h > 38  ~ 39  ~ 40  ~ 41  ~ 42  ~ 44  #AVDTP_PKT_TYPE_SINGLE 0x00 ) 45  #AVDTP_PKT_TYPE_START 0x01 ) 46  #AVDTP_PKT_TYPE_CONTINUE 0x02 ) 47  #AVDTP_PKT_TYPE_END 0x03 ) 49  #AVDTP_MSG_TYPE_COMMAND 0x00 ) 50  #AVDTP_MSG_TYPE_GEN_REJECT 0x01 ) 51  #AVDTP_MSG_TYPE_ACCEPT 0x02 ) 52  #AVDTP_MSG_TYPE_REJECT 0x03 ) 54  #AVDTP_DISCOVER 0x01 ) 55  #AVDTP_GET_CAPABILITIES 0x02 ) 56  #AVDTP_SET_CONFIGURATION 0x03 ) 57  #AVDTP_GET_CONFIGURATION 0x04 ) 58  #AVDTP_RECONFIGURE 0x05 ) 59  #AVDTP_OPEN 0x06 ) 60  #AVDTP_START 0x07 ) 61  #AVDTP_CLOSE 0x08 ) 62  #AVDTP_SUSPEND 0x09 ) 63  #AVDTP_ABORT 0x0A ) 65  #AVDTP_SEP_TYPE_SOURCE 0x00 ) 66  #AVDTP_SEP_TYPE_SINK 0x01 ) 68  #AVDTP_MEDIA_TYPE_AUDIO 0x00 ) 69  #AVDTP_MEDIA_TYPE_VIDEO 0x01 ) 70  #AVDTP_MEDIA_TYPE_MULTIMEDIA 0x02 ) 72 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 74  savd_h—d” { 75 ušt8_t mmes§ge_ty³ :2; 76 ušt8_t m·ck‘_ty³ :2; 77 ušt8_t mŒª§ùiÚ :4; 78 ušt8_t msigÇl_id :6; 79 ušt8_t mrç0 :2; 80 } __©Œibu‹__ (( ·cked )); 82  s£id_šfo { 83 ušt8_t mrç0 :1; 84 ušt8_t mšu£ :1; 85 ušt8_t m£id :6; 86 ušt8_t mrç2 :3; 87 ušt8_t mty³ :1; 88 ušt8_t mmedŸ_ty³ :4; 89 } __©Œibu‹__ (( ·cked )); 91  savd_¡¬t_h—d” { 92 ušt8_t mmes§ge_ty³ :2; 93 ušt8_t m·ck‘_ty³ :2; 94 ušt8_t mŒª§ùiÚ :4; 95 ušt8_t mno_of_·ck‘s ; 96 ušt8_t msigÇl_id :6; 97 ušt8_t mrç0 :2; 98 } __©Œibu‹__ (( ·cked )); 100  savd_cÚtšue_h—d” { 101 ušt8_t mmes§ge_ty³ :2; 102 ušt8_t m·ck‘_ty³ :2; 103 ušt8_t mŒª§ùiÚ :4; 104 } __©Œibu‹__ (( ·cked )); 106  savùp_h—d” { 107 ušt8_t mid :1; 108 ušt8_t mü :1; 109 ušt8_t m·ck‘_ty³ :2; 110 ušt8_t mŒª§ùiÚ :4; 111 ušt16_t mpid ; 112 } __©Œibu‹__ (( ·cked )); 113  #AVCTP_HEADER_LENGTH 3 ) 115 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 117  savd_h—d” { 118 ušt8_t mŒª§ùiÚ :4; 119 ušt8_t m·ck‘_ty³ :2; 120 ušt8_t mmes§ge_ty³ :2; 121 ušt8_t mrç0 :2; 122 ušt8_t msigÇl_id :6; 123 } __©Œibu‹__ (( ·cked )); 125  s£id_šfo { 126 ušt8_t m£id :6; 127 ušt8_t mšu£ :1; 128 ušt8_t mrç0 :1; 129 ušt8_t mmedŸ_ty³ :4; 130 ušt8_t mty³ :1; 131 ušt8_t mrç2 :3; 132 } __©Œibu‹__ (( ·cked )); 134  savd_¡¬t_h—d” { 135 ušt8_t mŒª§ùiÚ :4; 136 ušt8_t m·ck‘_ty³ :2; 137 ušt8_t mmes§ge_ty³ :2; 138 ušt8_t mno_of_·ck‘s ; 139 ušt8_t mrç0 :2; 140 ušt8_t msigÇl_id :6; 141 } __©Œibu‹__ (( ·cked )); 143  savd_cÚtšue_h—d” { 144 ušt8_t mŒª§ùiÚ :4; 145 ušt8_t m·ck‘_ty³ :2; 146 ušt8_t mmes§ge_ty³ :2; 147 } __©Œibu‹__ (( ·cked )); 149  savùp_h—d” { 150 ušt8_t mŒª§ùiÚ :4; 151 ušt8_t m·ck‘_ty³ :2; 152 ušt8_t mü :1; 153 ušt8_t mid :1; 154 ušt16_t mpid ; 155 } __©Œibu‹__ (( ·cked )); 156  #AVCTP_HEADER_LENGTH 3 ) 162  #AVCTP_COMMAND 0 ) 163  #AVCTP_RESPONSE 1 ) 165  #AVCTP_PACKET_SINGLE 0 ) 167 cÚ¡  gmedŸ_Œª¥Üt [] = { 180  gmedŸ_sock = -1; 182  $dump_avùp_h—d” ( avùp_h—d” * hdr ) 184 `´štf ("TL %d PT %d CR %d IPID %d PID 0x%04x\n", hdr -> Œª§ùiÚ , 185 hdr -> ·ck‘_ty³ , hdr-> ü , hdr-> id , `Áohs (hdr-> pid )); 186 } } 188  $dump_avd_h—d” ( avd_h—d” * hdr ) 190 `´štf ("TL %d PT %d MT %d SI %d\n", hdr -> Œª§ùiÚ , 191 hdr -> ·ck‘_ty³ , hdr-> mes§ge_ty³ , hdr-> sigÇl_id ); 192 } } 194  $dump_bufãr (cÚ¡ * buf ,  Ën ) 196  i ; 198  i = 0; i < Ën ; i++) 199 `´štf ("%02x ", buf [ i ]); 200 `´štf ("\n"); 201 } } 203  $´oûss_avd ( ¤v_sk ,  sk ,  »jeù , 204  äagm’t ) 206  buf [672]; 207 ssize_t Ën ; 210  avd_h—d” * hdr = (*è buf ; 212 Ën = `»ad ( sk , buf , (buf)); 213 ià( Ën <= 0) { 214 `³¼Ü ("Read failed"); 218 `dump_bufãr ( buf , Ën ); 219 `dump_avd_h—d” ( hdr ); 221 ià( hdr -> ·ck‘_ty³ !ð AVDTP_PKT_TYPE_SINGLE ) { 222 `årštf ( ¡d”r , "Only single…ackets‡re supported\n"); 226 ià( hdr -> mes§ge_ty³ !ð AVDTP_MSG_TYPE_COMMAND ) { 227 `årštf ( ¡d”r , "Ignoring‚on-command messages\n"); 231  hdr -> sigÇl_id ) { 232  AVDTP_DISCOVER : 233 ià( »jeù =ð AVDTP_DISCOVER ) { 234 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_REJECT ; 235 buf [2] = 0x29; 236 `´štf ("Rejecting discover command\n"); 237 Ën = `wr™e ( sk , buf , 3); 239  £id_šfo * £i = (*è( buf + 2); 240 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_ACCEPT ; 241 buf [2] = 0x00; 242 buf [3] = 0x00; 243 £i -> £id = 0x01; 244 £i -> ty³ = AVDTP_SEP_TYPE_SINK ; 245 £i -> medŸ_ty³ = AVDTP_MEDIA_TYPE_AUDIO ; 246 `´štf ("Accepting discover command\n"); 247 Ën = `wr™e ( sk , buf , 4); 251  AVDTP_GET_CAPABILITIES : 252 ià( »jeù =ð AVDTP_GET_CAPABILITIES ) { 253 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_REJECT ; 254 buf [2] = 0x29; 255 `´štf ("Rejecting get capabilties command\n"); 256 Ën = `wr™e ( sk , buf , 3); 257 } ià( äagm’t ) { 258  avd_¡¬t_h—d” * ¡¬t = (*è buf ; 260 `´štf ("Sending fragmented„eplyo getcap\n"); 262 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_ACCEPT ; 265 hdr -> ·ck‘_ty³ = AVDTP_PKT_TYPE_START ; 266 ¡¬t -> sigÇl_id = AVDTP_GET_CAPABILITIES ; 267 ¡¬t -> no_of_·ck‘s = 3; 268 `memýy (& buf [3], medŸ_Œª¥Üt , 269 ( medŸ_Œª¥Üt )); 270 Ën = `wr™e ( sk , buf , 271 3 + ( medŸ_Œª¥Üt )); 274 hdr -> ·ck‘_ty³ = AVDTP_PKT_TYPE_CONTINUE ; 275 `memýy (& buf [1], medŸ_Œª¥Üt , 276 ( medŸ_Œª¥Üt )); 277 Ën = `wr™e ( sk , buf , 278 1 + ( medŸ_Œª¥Üt )); 281 hdr -> ·ck‘_ty³ = AVDTP_PKT_TYPE_END ; 282 `memýy (& buf [1], medŸ_Œª¥Üt , 283 ( medŸ_Œª¥Üt )); 284 Ën = `wr™e ( sk , buf , 285 1 + ( medŸ_Œª¥Üt )); 287 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_ACCEPT ; 288 `memýy (& buf [2], medŸ_Œª¥Üt , 289 ( medŸ_Œª¥Üt )); 290 `´štf ("Accepting get capabilities command\n"); 291 Ën = `wr™e ( sk , buf , 292 2 + ( medŸ_Œª¥Üt )); 296  AVDTP_SET_CONFIGURATION : 297 ià( »jeù =ð AVDTP_SET_CONFIGURATION ) { 298 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_REJECT ; 299 buf [2] = buf[4]; 300 buf [3] = 0x13; 301 `´štf ("Rejecting set configuration command\n"); 302 Ën = `wr™e ( sk , buf , 4); 304 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_ACCEPT ; 305 `´štf ("Accepting set configuration command\n"); 306 Ën = `wr™e ( sk , buf , 2); 310  AVDTP_GET_CONFIGURATION : 311 ià( »jeù =ð AVDTP_GET_CONFIGURATION ) { 312 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_REJECT ; 313 buf [2] = 0x12; 314 `´štf ("Rejecting get configuration command\n"); 315 Ën = `wr™e ( sk , buf , 3); 317 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_ACCEPT ; 318 `´štf ("Accepting get configuration command\n"); 319 Ën = `wr™e ( sk , buf , 2); 323  AVDTP_OPEN : 324 ià( »jeù =ð AVDTP_OPEN ) { 325 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_REJECT ; 326 buf [2] = 0x31; 327 `´štf ("Rejecting open command\n"); 328 Ën = `wr™e ( sk , buf , 3); 330  sockaddr_l2 addr ; 331 sockËn_t ÝŽ’ ; 333 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_ACCEPT ; 334 `´štf ("Accepting open command\n"); 335 Ën = `wr™e ( sk , buf , 2); 337 `mem£t (& addr , 0, (addr)); 338 ÝŽ’ = ( addr ); 340 medŸ_sock = `acû± ( ¤v_sk , 341 ( sockaddr *è& addr , 342 & ÝŽ’ ); 343 ià( medŸ_sock < 0) { 344 `³¼Ü ("Accept failed"); 350  AVDTP_START : 351 ià( »jeù =ð AVDTP_ABORT ) 352 `´štf ("Ignoring starto cause‡bort"); 353 ià( »jeù =ð AVDTP_START ) { 354 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_REJECT ; 355 buf [3] = 0x31; 356 `´štf ("Rejecting start command\n"); 357 Ën = `wr™e ( sk , buf , 4); 359 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_ACCEPT ; 360 `´štf ("Accepting start command\n"); 361 Ën = `wr™e ( sk , buf , 2); 365  AVDTP_CLOSE : 366 ià( »jeù =ð AVDTP_CLOSE ) { 367 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_REJECT ; 368 buf [2] = 0x31; 369 `´štf ("Rejecting close command\n"); 370 Ën = `wr™e ( sk , buf , 3); 372 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_ACCEPT ; 373 `´štf ("Accepting close command\n"); 374 Ën = `wr™e ( sk , buf , 2); 375 ià( medŸ_sock >= 0) { 376 `þo£ ( medŸ_sock ); 377 medŸ_sock = -1; 382  AVDTP_SUSPEND : 383 ià( »jeù =ð AVDTP_SUSPEND ) { 384 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_REJECT ; 385 buf [3] = 0x31; 386 `´štf ("Rejecting suspend command\n"); 387 Ën = `wr™e ( sk , buf , 4); 389 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_ACCEPT ; 390 `´štf ("Accepting suspend command\n"); 391 Ën = `wr™e ( sk , buf , 2); 395  AVDTP_ABORT : 396 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_ACCEPT ; 397 `´štf ("Accepting‡bort command\n"); 398 Ën = `wr™e ( sk , buf , 2); 399 ià( medŸ_sock >= 0) { 400 `þo£ ( medŸ_sock ); 401 medŸ_sock = -1; 406 buf [1] = 0x00; 407 `´štf ("Unknown command\n"); 408 Ën = `wr™e ( sk , buf , 2); 412 } } 414  $´oûss_avùp ( sk ,  »jeù ) 416  buf [672]; 417 ssize_t Ën ; 420  avùp_h—d” * hdr = (*è buf ; 422 Ën = `»ad ( sk , buf , (buf)); 423 ià( Ën <= 0) { 424 `³¼Ü ("Read failed"); 428 `dump_bufãr ( buf , Ën ); 430 ià( Ën >ð AVCTP_HEADER_LENGTH ) 431 `dump_avùp_h—d” ( hdr ); 433 } } 435  $£t_mšimum_mtu ( sk ) 437  l2ÿp_ÝtiÚs l2o ; 438 sockËn_t ÝŽ’ ; 440 `mem£t (& l2o , 0, (l2o)); 441 ÝŽ’ = ( l2o ); 443 ià( `g‘sockÝt ( sk , SOL_L2CAP , L2CAP_OPTIONS , & l2o , & ÝŽ’ ) < 0) { 444 `³¼Ü ("getsockopt"); 448 l2o . imtu = 48; 449 l2o . omtu = 48; 451 ià( `£tsockÝt ( sk , SOL_L2CAP , L2CAP_OPTIONS , & l2o , (l2o)) < 0) { 452 `³¼Ü ("setsockopt"); 457 } } 459  $do_li¡’ (cÚ¡ bdaddr_t * ¤c ,  »jeù ,  äagm’t ) 461  sockaddr_l2 addr ; 462 sockËn_t ÝŽ’ ; 463  sk , nsk ; 465 sk = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_L2CAP ); 466 ià( sk < 0) { 467 `³¼Ü ("Can't create socket"); 471 `mem£t (& addr , 0, (addr)); 472 addr . l2_çmžy = AF_BLUETOOTH ; 473 `baýy (& addr . l2_bdaddr , ¤c ); 474 addr . l2_psm = `htobs (25); 476 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 477 `³¼Ü ("Can't bind socket"); 478  ”rÜ ; 481 ià( äagm’t ) 482 `£t_mšimum_mtu ( sk ); 484 ià( `li¡’ ( sk , 10)) { 485 `³¼Ü ("Can't†isten onhe socket"); 486  ”rÜ ; 490 `mem£t (& addr , 0, (addr)); 491 ÝŽ’ = ( addr ); 493 nsk = `acû± ( sk , ( sockaddr *è& addr , & ÝŽ’ ); 494 ià( nsk < 0) { 495 `³¼Ü ("Accept failed"); 499 `´oûss_avd ( sk , nsk , »jeù , äagm’t ); 501 ià( medŸ_sock >= 0) { 502 `þo£ ( medŸ_sock ); 503 medŸ_sock = -1; 506 `þo£ ( nsk ); 509 ”rÜ : 510 `þo£ ( sk ); 511 } } 513  $do_cÚÃù (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ ,  avùp , 514  äagm’t ) 516  sockaddr_l2 addr ; 517  sk , ”r ; 519 sk = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_L2CAP ); 520 ià( sk < 0) { 521 `³¼Ü ("Can't create socket"); 525 `mem£t (& addr , 0, (addr)); 526 addr . l2_çmžy = AF_BLUETOOTH ; 527 `baýy (& addr . l2_bdaddr , ¤c ); 529 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 530 `³¼Ü ("Can't bind socket"); 531  ”rÜ ; 534 ià( äagm’t ) 535 `£t_mšimum_mtu ( sk ); 537 `mem£t (& addr , 0, (addr)); 538 addr . l2_çmžy = AF_BLUETOOTH ; 539 `baýy (& addr . l2_bdaddr , d¡ ); 540 addr . l2_psm = `htobs ( avùp ? 23 : 25); 542 ”r = `cÚÃù ( sk , ( sockaddr *è& addr , (addr)); 543 ià( ”r < 0) { 544 `³¼Ü ("Unableo connect"); 545  ”rÜ ; 548  sk ; 550 ”rÜ : 551 `þo£ ( sk ); 553 } } 555  $do_avd_£nd ( sk , cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ , 556  cmd ,  šv®id ,  ´ecÚf ) 558  buf [672]; 559  avd_h—d” * hdr = (*è buf ; 560 ssize_t Ën ; 562 `mem£t ( buf , 0, (buf)); 564  cmd ) { 565  AVDTP_DISCOVER : 566 ià( šv®id ) 567 hdr -> mes§ge_ty³ = 0x01; 569 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_COMMAND ; 570 hdr -> ·ck‘_ty³ = AVDTP_PKT_TYPE_SINGLE ; 571 hdr -> sigÇl_id = AVDTP_DISCOVER ; 572 Ën = `wr™e ( sk , buf , 2); 575  AVDTP_GET_CAPABILITIES : 576 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_COMMAND ; 577 hdr -> ·ck‘_ty³ = AVDTP_PKT_TYPE_SINGLE ; 578 hdr -> sigÇl_id = AVDTP_GET_CAPABILITIES ; 579 buf [2] = 1 << 2; 580 Ën = `wr™e ( sk , buf , šv®id ? 2 : 3); 583  AVDTP_SET_CONFIGURATION : 584 ià( ´ecÚf ) 585 `do_avd_£nd ( sk , ¤c , d¡ , cmd , 0, 0); 586 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_COMMAND ; 587 hdr -> ·ck‘_ty³ = AVDTP_PKT_TYPE_SINGLE ; 588 hdr -> sigÇl_id = AVDTP_SET_CONFIGURATION ; 589 buf [2] = 1 << 2; 590 buf [3] = 1 << 2; 591 `memýy (& buf [4], medŸ_Œª¥Üt , (media_transport)); 592 ià( šv®id ) 593 buf [5] = 0x01; 594 Ën = `wr™e ( sk , buf , 4 + ( medŸ_Œª¥Üt )); 597  AVDTP_GET_CONFIGURATION : 598 ià( ´ecÚf ) 599 `do_avd_£nd ( sk , ¤c , d¡ , AVDTP_SET_CONFIGURATION , 0, 0); 600 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_COMMAND ; 601 hdr -> ·ck‘_ty³ = AVDTP_PKT_TYPE_SINGLE ; 602 hdr -> sigÇl_id = AVDTP_GET_CONFIGURATION ; 603 ià( šv®id ) 604 buf [2] = 13 << 2; 606 buf [2] = 1 << 2; 607 Ën = `wr™e ( sk , buf , 3); 610  AVDTP_OPEN : 611 ià( ´ecÚf ) 612 `do_avd_£nd ( sk , ¤c , d¡ , AVDTP_SET_CONFIGURATION , 0, 0); 613 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_COMMAND ; 614 hdr -> ·ck‘_ty³ = AVDTP_PKT_TYPE_SINGLE ; 615 hdr -> sigÇl_id = AVDTP_OPEN ; 616 buf [2] = 1 << 2; 617 Ën = `wr™e ( sk , buf , 3); 620  AVDTP_START : 621 ià( ´ecÚf ) 622 `do_avd_£nd ( sk , ¤c , d¡ , AVDTP_SET_CONFIGURATION , 0, 0); 623 ià(! šv®id ) 624 `do_avd_£nd ( sk , ¤c , d¡ , AVDTP_OPEN , 0, 0); 625 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_COMMAND ; 626 hdr -> ·ck‘_ty³ = AVDTP_PKT_TYPE_SINGLE ; 627 hdr -> sigÇl_id = AVDTP_START ; 628 buf [2] = 1 << 2; 629 Ën = `wr™e ( sk , buf , 3); 632  AVDTP_CLOSE : 633 ià( ´ecÚf ) { 634 `do_avd_£nd ( sk , ¤c , d¡ , AVDTP_SET_CONFIGURATION , 0, 0); 635 `do_avd_£nd ( sk , ¤c , d¡ , AVDTP_OPEN , 0, 0); 637 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_COMMAND ; 638 hdr -> ·ck‘_ty³ = AVDTP_PKT_TYPE_SINGLE ; 639 hdr -> sigÇl_id = AVDTP_CLOSE ; 640 ià( šv®id ) 641 buf [2] = 13 << 2; 643 buf [2] = 1 << 2; 644 Ën = `wr™e ( sk , buf , 3); 647  AVDTP_SUSPEND : 648 ià( šv®id ) 649 `do_avd_£nd ( sk , ¤c , d¡ , AVDTP_OPEN , 0, ´ecÚf ); 651 `do_avd_£nd ( sk , ¤c , d¡ , AVDTP_START , 0, ´ecÚf ); 652 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_COMMAND ; 653 hdr -> ·ck‘_ty³ = AVDTP_PKT_TYPE_SINGLE ; 654 hdr -> sigÇl_id = AVDTP_SUSPEND ; 655 buf [2] = 1 << 2; 656 Ën = `wr™e ( sk , buf , 3); 659  AVDTP_ABORT : 660 `do_avd_£nd ( sk , ¤c , d¡ , AVDTP_OPEN , 0, 1); 661 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_COMMAND ; 662 hdr -> ·ck‘_ty³ = AVDTP_PKT_TYPE_SINGLE ; 663 hdr -> sigÇl_id = AVDTP_ABORT ; 664 buf [2] = 1 << 2; 665 Ën = `wr™e ( sk , buf , 3); 669 hdr -> mes§ge_ty³ = AVDTP_MSG_TYPE_COMMAND ; 670 hdr -> ·ck‘_ty³ = AVDTP_PKT_TYPE_SINGLE ; 671 hdr -> sigÇl_id = cmd ; 672 Ën = `wr™e ( sk , buf , 2); 677 Ën = `»ad ( sk , buf , (buf)); 679 `dump_bufãr ( buf , Ën ); 680 `dump_avd_h—d” ( hdr ); 681 }  Ën < 2 || ( hdr -> mes§ge_ty³ !ð AVDTP_MSG_TYPE_ACCEPT && 682 hdr -> mes§ge_ty³ !ð AVDTP_MSG_TYPE_REJECT && 683 hdr -> mes§ge_ty³ !ð AVDTP_MSG_TYPE_GEN_REJECT )); 685 ià( cmd =ð AVDTP_OPEN && Ën >= 2 && 686 hdr -> mes§ge_ty³ =ð AVDTP_MSG_TYPE_ACCEPT ) 687 medŸ_sock = `do_cÚÃù ( ¤c , d¡ , 0, 0); 688 } } 690  $do_avùp_£nd ( sk ,  šv®id ) 692  buf [672]; 693  avùp_h—d” * hdr = (*è buf ; 694  ¶ay_´es£d [] = { 0x00, 0x48, 0x7c, 0x44, 0x00 }; 695 ssize_t Ën ; 697 `mem£t ( buf , 0, (buf)); 699 hdr -> ·ck‘_ty³ = AVCTP_PACKET_SINGLE ; 700 hdr -> ü = AVCTP_COMMAND ; 701 ià( šv®id ) 702 hdr -> pid = 0xffff; 704 hdr -> pid = `htÚs ( AV_REMOTE_SVCLASS_ID ); 706 `memýy (& buf [ AVCTP_HEADER_LENGTH ], ¶ay_´es£d , (play_pressed)); 708 Ën = `wr™e ( sk , buf , AVCTP_HEADER_LENGTH + ( ¶ay_´es£d )); 710 Ën = `»ad ( sk , buf , (buf)); 712 `dump_bufãr ( buf , Ën ); 713 ià( Ën >ð AVCTP_HEADER_LENGTH ) 714 `dump_avùp_h—d” ( hdr ); 715 } } 717  $u§ge () 719 `´štf ("av‹¡ - Audio/VideØ‹¡šg v” %s\n", VERSION ); 720 `´štf ("Usage:\n" 722 `´štf ("Options:\n" 730 } } 732  ÝtiÚ gmaš_ÝtiÚs [] = { 745  $·r£_cmd (cÚ¡ * ¬g ) 747 ià(! `¡ºcmp ( ¬g , "discov", 6)) 748  AVDTP_DISCOVER ; 749 ià(! `¡ºcmp ( ¬g , "capa", 4)) 750  AVDTP_GET_CAPABILITIES ; 751 ià(! `¡ºcmp ( ¬g , "getcapa", 7)) 752  AVDTP_GET_CAPABILITIES ; 753 ià(! `¡ºcmp ( ¬g , "setconf", 7)) 754  AVDTP_SET_CONFIGURATION ; 755 ià(! `¡ºcmp ( ¬g , "getconf", 7)) 756  AVDTP_GET_CONFIGURATION ; 757 ià(! `¡ºcmp ( ¬g , "open", 4)) 758  AVDTP_OPEN ; 759 ià(! `¡ºcmp ( ¬g , "start", 5)) 760  AVDTP_START ; 761 ià(! `¡ºcmp ( ¬g , "close", 5)) 762  AVDTP_CLOSE ; 763 ià(! `¡ºcmp ( ¬g , "suspend", 7)) 764  AVDTP_SUSPEND ; 765 ià(! `¡ºcmp ( ¬g , "abort", 7)) 766  AVDTP_ABORT ; 768  `©oi ( ¬g ); 769 } } 772 mMODE_NONE , mMODE_REJECT , mMODE_SEND , 775  $maš ( ¬gc , * ¬gv []) 777  cmd = 0x00; 778 bdaddr_t ¤c , d¡ ; 779  Ýt , mode = MODE_NONE , sk , šv®id = 0, ´ecÚf = 0, äagm’t = 0; 780  avùp = 0, wa™_befÜe_ex™ = 0; 782 `baýy (& ¤c , BDADDR_ANY ); 783 `baýy (& d¡ , BDADDR_ANY ); 785 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+i:r:s:f:hcFCw:", 786 maš_ÝtiÚs , NULL )è!ð EOF ) { 787  Ýt ) { 789 ià(! `¡ºcmp ( Ýrg , "hci", 3)) 790 `hci_devba ( `©oi ( Ýrg + 3), & ¤c ); 792 `¡r2ba ( Ýrg , & ¤c ); 796 mode = MODE_REJECT ; 797 cmd = `·r£_cmd ( Ýrg ); 801 šv®id = 1; 805 mode = MODE_SEND ; 806 cmd = `·r£_cmd ( Ýrg ); 810 ´ecÚf = 1; 814 äagm’t = 1; 818 avùp = 1; 822 wa™_befÜe_ex™ = `©oi ( Ýrg ); 827 `u§ge (); 828 `ex™ (0); 832 ià( ¬gv [ Ýtšd ]) 833 `¡r2ba ( ¬gv [ Ýtšd ], & d¡ ); 835 ià( avùp ) { 836 avùp = mode ; 837 mode = MODE_SEND ; 840  mode ) { 841  MODE_REJECT : 842 `do_li¡’ (& ¤c , cmd , äagm’t ); 844  MODE_SEND : 845 sk = `do_cÚÃù (& ¤c , & d¡ , avùp , äagm’t ); 846 ià( sk < 0) 847 `ex™ (1); 848 ià( avùp ) { 849 ià( avùp =ð MODE_SEND ) 850 `do_avùp_£nd ( sk , šv®id ); 852 `´oûss_avùp ( sk , cmd ); 854 `do_avd_£nd ( sk , & ¤c , & d¡ , cmd , šv®id , ´ecÚf ); 855 ià( wa™_befÜe_ex™ ) { 856 `´štf ("Wa™šg %d secÚd befÜex™šg\n", wa™_befÜe_ex™ ); 857 `¦“p ( wa™_befÜe_ex™ ); 859 ià( medŸ_sock >= 0) 860 `þo£ ( medŸ_sock ); 861 `þo£ ( sk ); 864 `årštf ( ¡d”r , "No operating mode specified!\n"); 865 `ex™ (1); 869 } } @tools/bccmd.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<¡dlib.h > 31  ~ 32  ~ 34  ~ 35  ~ 36  ~ 38  ~"c¤.h " 40  #CSR_TRANSPORT_UNKNOWN 0 ) 41  #CSR_TRANSPORT_HCI 1 ) 42  #CSR_TRANSPORT_USB 2 ) 43  #CSR_TRANSPORT_BCSP 3 ) 44  #CSR_TRANSPORT_H4 4 ) 45  #CSR_TRANSPORT_3WIRE 5 ) 47  #CSR_STORES_PSI (0x0001) ) 48  #CSR_STORES_PSF (0x0002) ) 49  #CSR_STORES_PSROM (0x0004) ) 50  #CSR_STORES_PSRAM (0x0008) ) 51  #CSR_STORES_DEFAULT ( CSR_STORES_PSI | CSR_STORES_PSF ) ) 53  #CSR_TYPE_NULL 0 ) 54  #CSR_TYPE_COMPLEX 1 ) 55  #CSR_TYPE_UINT8 2 ) 56  #CSR_TYPE_UINT16 3 ) 57  #CSR_TYPE_UINT32 4 ) 59  #CSR_TYPE_ARRAY CSR_TYPE_COMPLEX ) 60  #CSR_TYPE_BDADDR CSR_TYPE_COMPLEX ) 62  šlše  $Œª¥Üt_Ý’ ( Œª¥Üt , * deviû , ¥“d_t bc¥_¿‹ ) 64  Œª¥Üt ) { 65  CSR_TRANSPORT_HCI : 66  `c¤_Ý’_hci ( deviû ); 67  CSR_TRANSPORT_USB : 68  `c¤_Ý’_usb ( deviû ); 69  CSR_TRANSPORT_BCSP : 70  `c¤_Ý’_bc¥ ( deviû , bc¥_¿‹ ); 71  CSR_TRANSPORT_H4 : 72  `c¤_Ý’_h4 ( deviû ); 73  CSR_TRANSPORT_3WIRE : 74  `c¤_Ý’_3wœe ( deviû ); 76 `årštf ( ¡d”r , "Unsupportedransport\n"); 79 } } 81  šlše  $Œª¥Üt_»ad ( Œª¥Üt , ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 83  Œª¥Üt ) { 84  CSR_TRANSPORT_HCI : 85  `c¤_»ad_hci ( v¬id , v®ue , Ëngth ); 86  CSR_TRANSPORT_USB : 87  `c¤_»ad_usb ( v¬id , v®ue , Ëngth ); 88  CSR_TRANSPORT_BCSP : 89  `c¤_»ad_bc¥ ( v¬id , v®ue , Ëngth ); 90  CSR_TRANSPORT_H4 : 91  `c¤_»ad_h4 ( v¬id , v®ue , Ëngth ); 92  CSR_TRANSPORT_3WIRE : 93  `c¤_»ad_3wœe ( v¬id , v®ue , Ëngth ); 95 ”ºo = EOPNOTSUPP ; 98 } } 100  šlše  $Œª¥Üt_wr™e ( Œª¥Üt , ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 102  Œª¥Üt ) { 103  CSR_TRANSPORT_HCI : 104  `c¤_wr™e_hci ( v¬id , v®ue , Ëngth ); 105  CSR_TRANSPORT_USB : 106  `c¤_wr™e_usb ( v¬id , v®ue , Ëngth ); 107  CSR_TRANSPORT_BCSP : 108  `c¤_wr™e_bc¥ ( v¬id , v®ue , Ëngth ); 109  CSR_TRANSPORT_H4 : 110  `c¤_wr™e_h4 ( v¬id , v®ue , Ëngth ); 111  CSR_TRANSPORT_3WIRE : 112  `c¤_wr™e_3wœe ( v¬id , v®ue , Ëngth ); 114 ”ºo = EOPNOTSUPP ; 117 } } 119  šlše  $Œª¥Üt_þo£ ( Œª¥Üt ) 121  Œª¥Üt ) { 122  CSR_TRANSPORT_HCI : 123 `c¤_þo£_hci (); 125  CSR_TRANSPORT_USB : 126 `c¤_þo£_usb (); 128  CSR_TRANSPORT_BCSP : 129 `c¤_þo£_bc¥ (); 131  CSR_TRANSPORT_H4 : 132 `c¤_þo£_h4 (); 134  CSR_TRANSPORT_3WIRE : 135 `c¤_þo£_3wœe (); 138 } } 141 ušt16_t mpskey ; 142  mty³ ; 143  msize ; 144 * m¡r ; 145 } g¡Üage [] = { 146 { CSR_PSKEY_BDADDR , CSR_TYPE_BDADDR , 8, "bdaddr" }, 147 { CSR_PSKEY_COUNTRYCODE , CSR_TYPE_UINT16 , 0, "country" }, 148 { CSR_PSKEY_CLASSOFDEVICE , CSR_TYPE_UINT32 , 0, "devclass" }, 149 { CSR_PSKEY_ENC_KEY_LMIN , CSR_TYPE_UINT16 , 0, "keymin" }, 150 { CSR_PSKEY_ENC_KEY_LMAX , CSR_TYPE_UINT16 , 0, "keymax" }, 151 { CSR_PSKEY_LOCAL_SUPPORTED_FEATURES , CSR_TYPE_ARRAY , 8, "features" }, 152 { CSR_PSKEY_LOCAL_SUPPORTED_COMMANDS , CSR_TYPE_ARRAY , 18, "commands" }, 153 { CSR_PSKEY_HCI_LMP_LOCAL_VERSION , CSR_TYPE_UINT16 , 0, "version" }, 154 { CSR_PSKEY_LMP_REMOTE_VERSION , CSR_TYPE_UINT8 , 0, "remver" }, 155 { CSR_PSKEY_HOSTIO_USE_HCI_EXTN , CSR_TYPE_UINT16 , 0, "hciextn" }, 156 { CSR_PSKEY_HOSTIO_MAP_SCO_PCM , CSR_TYPE_UINT16 , 0, "mapsco" }, 157 { CSR_PSKEY_UART_BAUDRATE , CSR_TYPE_UINT16 , 0, "baudrate" }, 158 { CSR_PSKEY_HOST_INTERFACE , CSR_TYPE_UINT16 , 0, "hostintf" }, 159 { CSR_PSKEY_ANA_FREQ , CSR_TYPE_UINT16 , 0, "anafreq" }, 160 { CSR_PSKEY_ANA_FTRIM , CSR_TYPE_UINT16 , 0, "anaftrim" }, 161 { CSR_PSKEY_USB_VENDOR_ID , CSR_TYPE_UINT16 , 0, "usbvid" }, 162 { CSR_PSKEY_USB_PRODUCT_ID , CSR_TYPE_UINT16 , 0, "usbpid" }, 163 { CSR_PSKEY_USB_DFU_PRODUCT_ID , CSR_TYPE_UINT16 , 0, "dfupid" }, 164 { CSR_PSKEY_INITIAL_BOOTMODE , CSR_TYPE_UINT16 , 0, "bootmode" }, 168 * $¡Üe¡o¡r ( ušt16_t ¡Ües ) 170  ¡Ües ) { 184 } } 186 * $memÜyto¡r ( ušt16_t ty³ ) 188  ty³ ) { 200 } } 202  #OPT_RANGE ( mš , max ) \ 203 ià( ¬gc < ( mš )è{ ”ºo = EINVAL ;  -1; } \ 204 ià( ¬gc > ( max )è{ ”ºo = E2BIG ;  -1; } ) 206  ÝtiÚ gh–p_ÝtiÚs [] = { 211  $Ýt_h–p ( ¬gc , * ¬gv [], * h–p ) 213  Ýt ; 215 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+h", h–p_ÝtiÚs , NULL )è!ð EOF ) { 216  Ýt ) { 218 ià( h–p ) 219 * h–p = 1; 224  Ýtšd ; 225 } } 227  #OPT_HELP ( ¿nge , h–p ) \ 228 `Ýt_h–p ( ¬gc , ¬gv , ( h–p )); \ 229 ¬gc -ð Ýtšd ; ¬gv += optind; optind = 0; \ 230 `OPT_RANGE (( ¿nge ), (¿nge)) ) 232  $cmd_bužddef ( Œª¥Üt ,  ¬gc , * ¬gv []) 234 ušt8_t ¬¿y [8]; 235 ušt16_t def = 0x0000, Ãxtdef = 0x0000; 236  ”r = 0; 238 `OPT_HELP (0, NULL ); 240 `´štf ("Build definitions:\n"); 243 `mem£t ( ¬¿y , 0, (array)); 244 ¬¿y [0] = def & 0xff; 245 ¬¿y [1] = def >> 8; 247 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_GET_NEXT_BUILDDEF , ¬¿y , 8); 248 ià( ”r < 0) 251 Ãxtdef = ¬¿y [2] | (array[3] << 8); 253 ià( Ãxtdef == 0x0000) 256 def = Ãxtdef ; 258 `´štf ("0x%04x - %s\n", def , `c¤_bužddeáo¡r (def)); 261  ”r ; 262 } } 264  $cmd_keyËn ( Œª¥Üt ,  ¬gc , * ¬gv []) 266 ušt8_t ¬¿y [8]; 267 ušt16_t hªdË , keyËn ; 268  ”r ; 270 `OPT_HELP (1, NULL ); 272 hªdË = `©oi ( ¬gv [0]); 274 `mem£t ( ¬¿y , 0, (array)); 275 ¬¿y [0] = hªdË & 0xff; 276 ¬¿y [1] = hªdË >> 8; 278 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_CRYPT_KEY_LENGTH , ¬¿y , 8); 279 ià( ”r < 0) 282 hªdË = ¬¿y [0] | (array[1] << 8); 283 keyËn = ¬¿y [2] | (array[3] << 8); 285 `´štf ("Cry± key†’gth: %d b™\n", keyËn * 8); 288 } } 290  $cmd_þock ( Œª¥Üt ,  ¬gc , * ¬gv []) 292 ušt8_t ¬¿y [8]; 293 ušt32_t þock ; 294  ”r ; 296 `OPT_HELP (0, NULL ); 298 `mem£t ( ¬¿y , 0, (array)); 300 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_BT_CLOCK , ¬¿y , 8); 301 ià( ”r < 0) 304 þock = ¬¿y [2] | (array[3] << 8) | (array[0] << 16) | (array[1] << 24); 306 `´štf ("Blu‘oÙh clock: 0x%04x (%d)\n", þock , clock); 309 } } 311  $cmd_¿nd ( Œª¥Üt ,  ¬gc , * ¬gv []) 313 ušt8_t ¬¿y [8]; 314 ušt16_t ¿nd ; 315  ”r ; 317 `OPT_HELP (0, NULL ); 319 `mem£t ( ¬¿y , 0, (array)); 321 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_RAND , ¬¿y , 8); 322 ià( ”r < 0) 325 ¿nd = ¬¿y [0] | (array[1] << 8); 327 `´štf ("Rªdom‚umb”: 0x%02x (%d)\n", ¿nd ,„and); 330 } } 332  $cmd_ch»v ( Œª¥Üt ,  ¬gc , * ¬gv []) 334 ušt8_t ¬¿y [8]; 335 ušt16_t »v ; 336 * ¡r ; 337  ”r ; 339 `OPT_HELP (0, NULL ); 341 `mem£t ( ¬¿y , 0, (array)); 343 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_CHIPREV , ¬¿y , 8); 344 ià( ”r < 0) 347 »v = ¬¿y [0] | (array[1] << 8); 349  »v ) { 351 ¡r = "BC1 ES"; 354 ¡r = "BC1"; 357 ¡r = "BC2-External A"; 360 ¡r = "BC2-External B"; 363 ¡r = "BC2-ROM"; 366 ¡r = "BC3-Multimedia"; 369 ¡r = "BC3-ROM"; 372 ¡r = "BC3-Flash"; 375 ¡r = "BC4-External"; 378 ¡r = "BC4-ROM"; 381 ¡r = "NA"; 385 `´štf ("Ch„evisiÚ: 0x%04x (%s)\n", »v , ¡r ); 388 } } 390  $cmd_buždÇme ( Œª¥Üt ,  ¬gc , * ¬gv []) 392 ušt8_t ¬¿y [131]; 393  Çme [64]; 394  i ; 395  ”r ; 397 `OPT_HELP (0, NULL ); 399 `mem£t ( ¬¿y , 0, (array)); 401 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_READ_BUILD_NAME , ¬¿y , 128); 402 ià( ”r < 0) 405  i = 0; i < ( Çme ); i++) 406 Çme [ i ] = ¬¿y [(i * 2) + 4]; 408 `´štf ("Bužd‚ame: %s\n", Çme ); 411 } } 413  $cmd_·niÿrg ( Œª¥Üt ,  ¬gc , * ¬gv []) 415 ušt8_t ¬¿y [8]; 416 ušt16_t ”rÜ ; 417  ”r ; 419 `OPT_HELP (0, NULL ); 421 `mem£t ( ¬¿y , 0, (array)); 423 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_PANIC_ARG , ¬¿y , 8); 424 ià( ”r < 0) 427 ”rÜ = ¬¿y [0] | (array[1] << 8); 429 `´štf ("Pªiøcode: 0x%02x (%s)\n", ”rÜ , 430 ”rÜ < 0x100 ? "valid" : "invalid"); 433 } } 435  $cmd_çuɬg ( Œª¥Üt ,  ¬gc , * ¬gv []) 437 ušt8_t ¬¿y [8]; 438 ušt16_t ”rÜ ; 439  ”r ; 441 `OPT_HELP (0, NULL ); 443 `mem£t ( ¬¿y , 0, (array)); 445 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_FAULT_ARG , ¬¿y , 8); 446 ià( ”r < 0) 449 ”rÜ = ¬¿y [0] | (array[1] << 8); 451 `´štf ("FauÉ code: 0x%02x (%s)\n", ”rÜ , 452 ”rÜ < 0x100 ? "valid" : "invalid"); 455 } } 457  $cmd_cÞd»£t ( Œª¥Üt ,  ¬gc , * ¬gv []) 459  `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_COLD_RESET , NULL , 0); 460 } } 462  $cmd_w¬m»£t ( Œª¥Üt ,  ¬gc , * ¬gv []) 464  `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_WARM_RESET , NULL , 0); 465 } } 467  $cmd_di§bËtx ( Œª¥Üt ,  ¬gc , * ¬gv []) 469  `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_DISABLE_TX , NULL , 0); 470 } } 472  $cmd_’abËtx ( Œª¥Üt ,  ¬gc , * ¬gv []) 474  `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_ENABLE_TX , NULL , 0); 475 } } 477  $cmd_sšgËchª ( Œª¥Üt ,  ¬gc , * ¬gv []) 479 ušt8_t ¬¿y [8]; 480 ušt16_t chªÃl ; 482 `OPT_HELP (1, NULL ); 484 chªÃl = `©oi ( ¬gv [0]); 486 ià( chªÃl > 2401 && channel < 2481) 487 chªÃl -= 2402; 489 ià( chªÃl > 78) { 490 ”ºo = EINVAL ; 494 `mem£t ( ¬¿y , 0, (array)); 495 ¬¿y [0] = chªÃl & 0xff; 496 ¬¿y [1] = chªÃl >> 8; 498  `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_SINGLE_CHAN , ¬¿y , 8); 499 } } 501  $cmd_hÝpšgÚ ( Œª¥Üt ,  ¬gc , * ¬gv []) 503  `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_HOPPING_ON , NULL , 0); 504 } } 506  $cmd_¹txd©a1 ( Œª¥Üt ,  ¬gc , * ¬gv []) 508 ušt8_t ¬¿y [8]; 509 ušt16_t äeq , Ëv– ; 511 `OPT_HELP (2, NULL ); 513 äeq = `©oi ( ¬gv [0]); 515 ià(! `¡ºÿ£cmp ( ¬gv [1], "0x", 2)) 516 Ëv– = `¡¹Þ ( ¬gv [1], NULL , 16); 518 Ëv– = `©oi ( ¬gv [1]); 520 `mem£t ( ¬¿y , 0, (array)); 521 ¬¿y [0] = 0x04; 522 ¬¿y [1] = 0x00; 523 ¬¿y [2] = äeq & 0xff; 524 ¬¿y [3] = äeq >> 8; 525 ¬¿y [4] = Ëv– & 0xff; 526 ¬¿y [5] = Ëv– >> 8; 528  `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_RADIOTEST , ¬¿y , 8); 529 } } 531  $cmd_¿diÙe¡ ( Œª¥Üt ,  ¬gc , * ¬gv []) 533 ušt8_t ¬¿y [8]; 534 ušt16_t äeq , Ëv– , ‹¡ ; 536 `OPT_HELP (3, NULL ); 538 äeq = `©oi ( ¬gv [0]); 540 ià(! `¡ºÿ£cmp ( ¬gv [1], "0x", 2)) 541 Ëv– = `¡¹Þ ( ¬gv [1], NULL , 16); 543 Ëv– = `©oi ( ¬gv [1]); 545 ‹¡ = `©oi ( ¬gv [2]); 547 `mem£t ( ¬¿y , 0, (array)); 548 ¬¿y [0] = ‹¡ & 0xff; 549 ¬¿y [1] = ‹¡ >> 8; 550 ¬¿y [2] = äeq & 0xff; 551 ¬¿y [3] = äeq >> 8; 552 ¬¿y [4] = Ëv– & 0xff; 553 ¬¿y [5] = Ëv– >> 8; 555  `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_RADIOTEST , ¬¿y , 8); 556 } } 558  $cmd_memty³s ( Œª¥Üt ,  ¬gc , * ¬gv []) 560 ušt8_t ¬¿y [8]; 561 ušt16_t ty³ , ¡Ües [4] = { 0x0001, 0x0002, 0x0004, 0x0008 }; 562  i , ”r ; 564 `OPT_HELP (0, NULL ); 566  i = 0; i < 4; i++) { 567 `mem£t ( ¬¿y , 0, (array)); 568 ¬¿y [0] = ¡Ües [ i ] & 0xff; 569 ¬¿y [1] = ¡Ües [ i ] >> 8; 571 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_PS_MEMORY_TYPE , ¬¿y , 8); 572 ià( ”r < 0) 575 ty³ = ¬¿y [2] + (array[3] << 8); 577 `´štf ("% (0x%04xèð% (%d)\n", `¡Üe¡o¡r ( ¡Ües [ i ]), 578 ¡Ües [ i ], `memÜyto¡r ( ty³ ),ype); 582 } } 584  ÝtiÚ gpskey_ÝtiÚs [] = { 591  $Ýt_pskey ( ¬gc , * ¬gv [], ušt16_t * ¡Ües , * »£t , * h–p ) 593  Ýt ; 595 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+s:rh", pskey_ÝtiÚs , NULL )è!ð EOF ) { 596  Ýt ) { 598 ià(! ¡Ües ) 600 ià(! `¡rÿ£cmp ( Ýrg , "default")) 601 * ¡Ües = 0x0000; 602 ià(! `¡rÿ£cmp ( Ýrg , "implementation")) 603 * ¡Ües = 0x0001; 604 ià(! `¡rÿ£cmp ( Ýrg , "factory")) 605 * ¡Ües = 0x0002; 606 ià(! `¡rÿ£cmp ( Ýrg , "rom")) 607 * ¡Ües = 0x0004; 608 ià(! `¡rÿ£cmp ( Ýrg , "ram")) 609 * ¡Ües = 0x0008; 610 ià(! `¡rÿ£cmp ( Ýrg , "psi")) 611 * ¡Ües = 0x0001; 612 ià(! `¡rÿ£cmp ( Ýrg , "psf")) 613 * ¡Ües = 0x0002; 614 ià(! `¡rÿ£cmp ( Ýrg , "psrom")) 615 * ¡Ües = 0x0004; 616 ià(! `¡rÿ£cmp ( Ýrg , "psram")) 617 * ¡Ües = 0x0008; 618 ià(! `¡ºÿ£cmp ( Ýrg , "0x", 2)) 619 * ¡Ües = `¡¹Þ ( Ýrg , NULL , 16); 621 * ¡Ües = `©oi ( Ýrg ); 625 ià( »£t ) 626 * »£t = 1; 630 ià( h–p ) 631 * h–p = 1; 636  Ýtšd ; 637 } } 639  #OPT_PSKEY ( mš , max , ¡Ües , »£t , h–p ) \ 640 `Ýt_pskey ( ¬gc , ¬gv , ( ¡Ües ), ( »£t ), ( h–p )); \ 641 ¬gc -ð Ýtšd ; ¬gv += optind; optind = 0; \ 642 `OPT_RANGE (( mš ), ( max )) ) 644  $cmd_psg‘ ( Œª¥Üt ,  ¬gc , * ¬gv []) 646 ušt8_t ¬¿y [128]; 647 ušt16_t pskey , Ëngth , v®ue , ¡Ües = CSR_STORES_DEFAULT ; 648 ušt32_t v®32 ; 649  i , ”r , »£t = 0; 651 `mem£t ( ¬¿y , 0, (array)); 653 `OPT_PSKEY (1, 1, & ¡Ües , & »£t , NULL ); 655 ià( `¡ºÿ£cmp ( ¬gv [0], "0x", 2)) { 656 pskey = `©oi ( ¬gv [0]); 658  i = 0; ¡Üage [i]. pskey ; i++) { 659 ià( `¡rÿ£cmp ( ¡Üage [ i ]. ¡r , ¬gv [0])) 662 pskey = ¡Üage [ i ].pskey; 666 pskey = `¡¹Þ ( ¬gv [0] + 2, NULL , 16); 668 `mem£t ( ¬¿y , 0, (array)); 669 ¬¿y [0] = pskey & 0xff; 670 ¬¿y [1] = pskey >> 8; 671 ¬¿y [2] = ¡Ües & 0xff; 672 ¬¿y [3] = ¡Ües >> 8; 674 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_PS_SIZE , ¬¿y , 8); 675 ià( ”r < 0) 676  ”r ; 678 Ëngth = ¬¿y [2] + (array[3] << 8); 679 ià( Ëngth + 6 > (è( ¬¿y ) / 2) 680  - EIO ; 682 `mem£t ( ¬¿y , 0, (array)); 683 ¬¿y [0] = pskey & 0xff; 684 ¬¿y [1] = pskey >> 8; 685 ¬¿y [2] = Ëngth & 0xff; 686 ¬¿y [3] = Ëngth >> 8; 687 ¬¿y [4] = ¡Ües & 0xff; 688 ¬¿y [5] = ¡Ües >> 8; 690 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_PS , ¬¿y , ( Ëngth + 3) * 2); 691 ià( ”r < 0) 692  ”r ; 694  Ëngth ) { 696 v®ue = ¬¿y [6] | (array[7] << 8); 697 `´štf ("%s: 0x%04x (%d)\n", `c¤_pskeyto¡r ( pskey ), v®ue , value); 701 v®32 = ¬¿y [8] | (array[9] << 8) | (array[6] << 16) | (array[7] << 24); 702 `´štf ("%s: 0x%08x (%d)\n", `c¤_pskeyto¡r ( pskey ), v®32 , val32); 706 `´štf ("%s:", `c¤_pskeyto¡r ( pskey )); 707  i = 0; i < Ëngth ; i++) 708 `´štf (" 0x%02x%02x", ¬¿y [( i * 2) + 6],‡rray[(i * 2) + 7]); 709 `´štf ("\n"); 713 ià( »£t ) 714 `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_WARM_RESET , NULL , 0); 716  ”r ; 717 } } 719  $cmd_ps£t ( Œª¥Üt ,  ¬gc , * ¬gv []) 721 ušt8_t ¬¿y [128]; 722 ušt16_t pskey , Ëngth , v®ue , ¡Ües = CSR_STORES_PSRAM ; 723 ušt32_t v®32 ; 724  i , ”r , »£t = 0; 726 `mem£t ( ¬¿y , 0, (array)); 728 `OPT_PSKEY (2, 81, & ¡Ües , & »£t , NULL ); 730 ià( `¡ºÿ£cmp ( ¬gv [0], "0x", 2)) { 731 pskey = `©oi ( ¬gv [0]); 733  i = 0; ¡Üage [i]. pskey ; i++) { 734 ià( `¡rÿ£cmp ( ¡Üage [ i ]. ¡r , ¬gv [0])) 737 pskey = ¡Üage [ i ].pskey; 741 pskey = `¡¹Þ ( ¬gv [0] + 2, NULL , 16); 743 `mem£t ( ¬¿y , 0, (array)); 744 ¬¿y [0] = pskey & 0xff; 745 ¬¿y [1] = pskey >> 8; 746 ¬¿y [2] = ¡Ües & 0xff; 747 ¬¿y [3] = ¡Ües >> 8; 749 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_PS_SIZE , ¬¿y , 8); 750 ià( ”r < 0) 751  ”r ; 753 Ëngth = ¬¿y [2] + (array[3] << 8); 754 ià( Ëngth + 6 > (è( ¬¿y ) / 2) 755  - EIO ; 757 `mem£t ( ¬¿y , 0, (array)); 758 ¬¿y [0] = pskey & 0xff; 759 ¬¿y [1] = pskey >> 8; 760 ¬¿y [2] = Ëngth & 0xff; 761 ¬¿y [3] = Ëngth >> 8; 762 ¬¿y [4] = ¡Ües & 0xff; 763 ¬¿y [5] = ¡Ües >> 8; 765 ¬gc --; 766 ¬gv ++; 768  Ëngth ) { 770 ià( ¬gc != 1) { 771 ”ºo = E2BIG ; 775 ià(! `¡ºÿ£cmp ( ¬gv [0], "0x", 2)) 776 v®ue = `¡¹Þ ( ¬gv [0] + 2, NULL , 16); 778 v®ue = `©oi ( ¬gv [0]); 780 ¬¿y [6] = v®ue & 0xff; 781 ¬¿y [7] = v®ue >> 8; 785 ià( ¬gc != 1) { 786 ”ºo = E2BIG ; 790 ià(! `¡ºÿ£cmp ( ¬gv [0], "0x", 2)) 791 v®32 = `¡¹Þ ( ¬gv [0] + 2, NULL , 16); 793 v®32 = `©oi ( ¬gv [0]); 795 ¬¿y [6] = ( v®32 & 0xff0000) >> 16; 796 ¬¿y [7] = v®32 >> 24; 797 ¬¿y [8] = v®32 & 0xff; 798 ¬¿y [9] = ( v®32 & 0xff00) >> 8; 802 ià( ¬gc !ð Ëngth * 2) { 803 ”ºo = EINVAL ; 807  i = 0; i < Ëngth * 2; i++) 808 ià(! `¡ºÿ£cmp ( ¬gv [0], "0x", 2)) 809 ¬¿y [ i + 6] = `¡¹Þ ( ¬gv [i] + 2, NULL , 16); 811 ¬¿y [ i + 6] = `©oi ( ¬gv [i]); 815 ”r = `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_PS , ¬¿y , ( Ëngth + 3) * 2); 816 ià( ”r < 0) 817  ”r ; 819 ià( »£t ) 820 `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_WARM_RESET , NULL , 0); 822  ”r ; 823 } } 825  $cmd_psþr ( Œª¥Üt ,  ¬gc , * ¬gv []) 827 ušt8_t ¬¿y [8]; 828 ušt16_t pskey , ¡Ües = CSR_STORES_PSRAM ; 829  i , ”r , »£t = 0; 831 `OPT_PSKEY (1, 1, & ¡Ües , & »£t , NULL ); 833 ià( `¡ºÿ£cmp ( ¬gv [0], "0x", 2)) { 834 pskey = `©oi ( ¬gv [0]); 836  i = 0; ¡Üage [i]. pskey ; i++) { 837 ià( `¡rÿ£cmp ( ¡Üage [ i ]. ¡r , ¬gv [0])) 840 pskey = ¡Üage [ i ].pskey; 844 pskey = `¡¹Þ ( ¬gv [0] + 2, NULL , 16); 846 `mem£t ( ¬¿y , 0, (array)); 847 ¬¿y [0] = pskey & 0xff; 848 ¬¿y [1] = pskey >> 8; 849 ¬¿y [2] = ¡Ües & 0xff; 850 ¬¿y [3] = ¡Ües >> 8; 852 ”r = `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_PS_CLR_STORES , ¬¿y , 8); 853 ià( ”r < 0) 854  ”r ; 856 ià( »£t ) 857 `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_WARM_RESET , NULL , 0); 859  ”r ; 860 } } 862  $cmd_p¦i¡ ( Œª¥Üt ,  ¬gc , * ¬gv []) 864 ušt8_t ¬¿y [8]; 865 ušt16_t pskey = 0x0000, Ëngth , ¡Ües = CSR_STORES_DEFAULT ; 866  ”r , »£t = 0; 868 `OPT_PSKEY (0, 0, & ¡Ües , & »£t , NULL ); 871 `mem£t ( ¬¿y , 0, (array)); 872 ¬¿y [0] = pskey & 0xff; 873 ¬¿y [1] = pskey >> 8; 874 ¬¿y [2] = ¡Ües & 0xff; 875 ¬¿y [3] = ¡Ües >> 8; 877 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_PS_NEXT , ¬¿y , 8); 878 ià( ”r < 0) 881 pskey = ¬¿y [4] + (array[5] << 8); 882 ià( pskey == 0x0000) 885 `mem£t ( ¬¿y , 0, (array)); 886 ¬¿y [0] = pskey & 0xff; 887 ¬¿y [1] = pskey >> 8; 888 ¬¿y [2] = ¡Ües & 0xff; 889 ¬¿y [3] = ¡Ües >> 8; 891 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_PS_SIZE , ¬¿y , 8); 892 ià( ”r < 0) 895 Ëngth = ¬¿y [2] + (array[3] << 8); 897 `´štf ("0x%04x - % (%d by‹s)\n", pskey , 898 `c¤_pskeyto¡r ( pskey ), Ëngth * 2); 901 ià( »£t ) 902 `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_WARM_RESET , NULL , 0); 905 } } 907  $cmd_p¤—d ( Œª¥Üt ,  ¬gc , * ¬gv []) 909 ušt8_t ¬¿y [256]; 910 ušt16_t pskey = 0x0000, Ëngth , ¡Ües = CSR_STORES_DEFAULT ; 911 * ¡r , v® [7]; 912  i , ”r , »£t = 0; 914 `OPT_PSKEY (0, 0, & ¡Ües , & »£t , NULL ); 917 `mem£t ( ¬¿y , 0, (array)); 918 ¬¿y [0] = pskey & 0xff; 919 ¬¿y [1] = pskey >> 8; 920 ¬¿y [2] = ¡Ües & 0xff; 921 ¬¿y [3] = ¡Ües >> 8; 923 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_PS_NEXT , ¬¿y , 8); 924 ià( ”r < 0) 927 pskey = ¬¿y [4] + (array[5] << 8); 928 ià( pskey == 0x0000) 931 `mem£t ( ¬¿y , 0, (array)); 932 ¬¿y [0] = pskey & 0xff; 933 ¬¿y [1] = pskey >> 8; 934 ¬¿y [2] = ¡Ües & 0xff; 935 ¬¿y [3] = ¡Ües >> 8; 937 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_PS_SIZE , ¬¿y , 8); 938 ià( ”r < 0) 941 Ëngth = ¬¿y [2] + (array[3] << 8); 942 ià( Ëngth + 6 > (è( ¬¿y ) / 2) 945 `mem£t ( ¬¿y , 0, (array)); 946 ¬¿y [0] = pskey & 0xff; 947 ¬¿y [1] = pskey >> 8; 948 ¬¿y [2] = Ëngth & 0xff; 949 ¬¿y [3] = Ëngth >> 8; 950 ¬¿y [4] = ¡Ües & 0xff; 951 ¬¿y [5] = ¡Ües >> 8; 953 ”r = `Œª¥Üt_»ad ( Œª¥Üt , CSR_VARID_PS , ¬¿y , ( Ëngth + 3) * 2); 954 ià( ”r < 0) 957 ¡r = `c¤_pskeytov® ( pskey ); 958 ià(! `¡rÿ£cmp ( ¡r , "UNKNOWN")) { 959 `¥rštf ( v® , "0x%04x", pskey ); 960 ¡r = NULL ; 963 `´štf ("// %s%s\n&%04x =", ¡r ? "PSKEY_" : "", 964 ¡r ? sŒ : v® , pskey ); 965  i = 0; i < Ëngth ; i++) 966 `´štf (" %02x%02x", ¬¿y [( i * 2) + 7],‡rray[(i * 2) + 6]); 967 `´štf ("\n"); 970 ià( »£t ) 971 `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_WARM_RESET , NULL , 0); 974 } } 976  $cmd_p¦ßd ( Œª¥Üt ,  ¬gc , * ¬gv []) 978 ušt8_t ¬¿y [256]; 979 ušt16_t pskey , Ëngth , size , ¡Ües = CSR_STORES_PSRAM ; 980 * ¡r , v® [7]; 981  ”r , »£t = 0; 983 `OPT_PSKEY (1, 1, & ¡Ües , & »£t , NULL ); 985 `p¤_»ad ( ¬gv [0]); 987 `mem£t ( ¬¿y , 0, (array)); 988 size = ( ¬¿y ) - 6; 990  `p¤_g‘ (& pskey , ¬¿y + 6, & size ) == 0) { 991 ¡r = `c¤_pskeytov® ( pskey ); 992 ià(! `¡rÿ£cmp ( ¡r , "UNKNOWN")) { 993 `¥rštf ( v® , "0x%04x", pskey ); 994 ¡r = NULL ; 997 `´štf ("Lßdšg %s% ... ", ¡r ? "PSKEY_" : "", 998 ¡r ? sŒ : v® ); 999 `fæush ( ¡dout ); 1001 Ëngth = size / 2; 1003 ¬¿y [0] = pskey & 0xff; 1004 ¬¿y [1] = pskey >> 8; 1005 ¬¿y [2] = Ëngth & 0xff; 1006 ¬¿y [3] = Ëngth >> 8; 1007 ¬¿y [4] = ¡Ües & 0xff; 1008 ¬¿y [5] = ¡Ües >> 8; 1010 ”r = `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_PS , ¬¿y , size + 6); 1012 `´štf ("%s\n", ”r < 0 ? "failed" : "done"); 1014 `mem£t ( ¬¿y , 0, (array)); 1015 size = ( ¬¿y ) - 6; 1018 ià( »£t ) 1019 `Œª¥Üt_wr™e ( Œª¥Üt , CSR_VARID_WARM_RESET , NULL , 0); 1022 } } 1024  $cmd_pscheck ( Œª¥Üt ,  ¬gc , * ¬gv []) 1026 ušt8_t ¬¿y [256]; 1027 ušt16_t pskey , size ; 1028  i ; 1030 `OPT_HELP (1, NULL ); 1032 `p¤_»ad ( ¬gv [0]); 1034  `p¤_g‘ (& pskey , ¬¿y , & size ) == 0) { 1035 `´štf ("0x%04x =", pskey ); 1036  i = 0; i < size ; i++) 1037 `´štf (" 0x%02x", ¬¿y [ i ]); 1038 `´štf ("\n"); 1042 } } 1045 * m¡r ; 1046 (* mfunc )( mŒª¥Üt ,  m¬gc , * m¬gv []); 1047 * m¬g ; 1048 * mdoc ; 1049 } gcommªds [] = { 1050 { "bužddef", cmd_bužddef , "", "Get build definitions" }, 1051 { "keyËn", cmd_keyËn , "", "Get current crypt key†ength" }, 1052 { "þock", cmd_þock , "", "Get†ocal Bluetooth clock" }, 1053 { "¿nd", cmd_¿nd , "", "Get„andom‚umber" }, 1054 { "ch»v", cmd_ch»v , "", "Get chip„evision" }, 1055 { "buždÇme", cmd_buždÇme , "", "Gethe full build‚ame" }, 1056 { "·niÿrg", cmd_·niÿrg , "", "Get…anic code‡rgument" }, 1057 { "çuɬg", cmd_çuɬg , "", "Get fault code‡rgument" }, 1058 { "cÞd»£t", cmd_cÞd»£t , "", "Perform cold„eset" }, 1059 { "w¬m»£t", cmd_w¬m»£t , "", "Perform warm„eset" }, 1060 { "di§bËtx", cmd_di§bËtx , "", "Disable TX onhe device" }, 1061 { "’abËtx", cmd_’abËtx , "", "Enable TX onhe device" }, 1062 { "sšgËchª", cmd_sšgËchª ,"", "Lock„adio on specific channel" }, 1063 { "hÝpšgÚ", cmd_hÝpšgÚ , "", "Reverto channel hopping" }, 1064 { "¹txd©a1", cmd_¹txd©a1 , " ", "TXData1„adioest" }, 1065 { "¿diÙe¡", cmd_¿diÙe¡ , " ", "Run„adioests" }, 1066 { "memty³s", cmd_memty³s , NULL , "Get memoryypes" }, 1067 { "psg‘", cmd_psg‘ , "", "Get value for PS key" }, 1068 { "ps£t", cmd_ps£t , " ", "Set value for PS key" }, 1069 { "psþr", cmd_psþr , "", "Clear value for PS key" }, 1070 { "p¦i¡", cmd_p¦i¡ , NULL , "List‡ll PS keys" }, 1071 { "p¤—d", cmd_p¤—d , NULL , "Read‡ll PS keys" }, 1072 { "p¦ßd", cmd_p¦ßd , "", "Load‡ll PS keys from PSR file" }, 1073 { "pscheck", cmd_pscheck , "", "Check PSR file" }, 1074 { NULL } 1077  $u§ge () 1079  i , pos = 0; 1081 `´štf ("bccmd - Utility forhe CSR BCCMD interface\n\n"); 1082 `´štf ("Usage:\n" 1085 `´štf ("Options:\n" 1092 `´štf ("Transports:\n" 1095 `´štf ("Commands:\n"); 1096  i = 0; commªds [i]. ¡r ; i++) 1097 `´štf ("\t%-10 %-20s\t%s\n", commªds [ i ]. ¡r , 1098 commªds [ i ]. ¬g ? commands[i].arg : " ", 1099 commªds [ i ]. doc ); 1100 `´štf ("\n"); 1102 `´štf ("Keys:\n\t"); 1103  i = 0; ¡Üage [i]. pskey ; i++) { 1104 `´štf ("% ", ¡Üage [ i ]. ¡r ); 1105 pos +ð `¡¾’ ( ¡Üage [ i ]. ¡r ) + 1; 1106 ià( pos > 60) { 1107 `´štf ("\n\t"); 1108 pos = 0; 1111 `´štf ("\n"); 1112 } } 1114  ÝtiÚ gmaš_ÝtiÚs [] = { 1122  $maš ( ¬gc , * ¬gv []) 1124 * deviû = NULL ; 1125  i , ”r , Ýt , Œª¥Üt = CSR_TRANSPORT_HCI ; 1126 ¥“d_t bc¥_¿‹ = B38400 ; 1128 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+t:d:i:b:h", maš_ÝtiÚs , NULL )è!ð EOF ) { 1129  Ýt ) { 1131 ià(! `¡rÿ£cmp ( Ýrg , "hci")) 1132 Œª¥Üt = CSR_TRANSPORT_HCI ; 1133 ià(! `¡rÿ£cmp ( Ýrg , "usb")) 1134 Œª¥Üt = CSR_TRANSPORT_USB ; 1135 ià(! `¡rÿ£cmp ( Ýrg , "bcsp")) 1136 Œª¥Üt = CSR_TRANSPORT_BCSP ; 1137 ià(! `¡rÿ£cmp ( Ýrg , "h4")) 1138 Œª¥Üt = CSR_TRANSPORT_H4 ; 1139 ià(! `¡rÿ£cmp ( Ýrg , "h5")) 1140 Œª¥Üt = CSR_TRANSPORT_3WIRE ; 1141 ià(! `¡rÿ£cmp ( Ýrg , "3wire")) 1142 Œª¥Üt = CSR_TRANSPORT_3WIRE ; 1143 ià(! `¡rÿ£cmp ( Ýrg , "twutl")) 1144 Œª¥Üt = CSR_TRANSPORT_3WIRE ; 1146 Œª¥Üt = CSR_TRANSPORT_UNKNOWN ; 1151 deviû = `¡rdup ( Ýrg ); 1154  `©oi ( Ýrg )) { 1155 9600: bc¥_¿‹ = B9600 ; ; 1156 19200: bc¥_¿‹ = B19200 ; ; 1157 38400: bc¥_¿‹ = B38400 ; ; 1158 57600: bc¥_¿‹ = B57600 ; ; 1159 115200: bc¥_¿‹ = B115200 ; ; 1160 230400: bc¥_¿‹ = B230400 ; ; 1161 460800: bc¥_¿‹ = B460800 ; ; 1162 500000: bc¥_¿‹ = B500000 ; ; 1163 576000: bc¥_¿‹ = B576000 ; ; 1164 921600: bc¥_¿‹ = B921600 ; ; 1165 1000000: bc¥_¿‹ = B1000000 ; ; 1166 1152000: bc¥_¿‹ = B1152000 ; ; 1167 1500000: bc¥_¿‹ = B1500000 ; ; 1168 2000000: bc¥_¿‹ = B2000000 ; ; 1169 #ifdeà B2500000 1170 2500000: bc¥_¿‹ = B2500000 ; ; 1172 #ifdeà B3000000 1173 3000000: bc¥_¿‹ = B3000000 ; ; 1175 #ifdeà B3500000 1176 3500000: bc¥_¿‹ = B3500000 ; ; 1178 #ifdeà B4000000 1179 4000000: bc¥_¿‹ = B4000000 ; ; 1182 `´štf ("Unknown BCSP baud„ate specified, defaultingo 38400bps\n"); 1183 bc¥_¿‹ = B38400 ; 1188 `u§ge (); 1189 `ex™ (0); 1193 ¬gc -ð Ýtšd ; 1194 ¬gv +ð Ýtšd ; 1195 Ýtšd = 0; 1197 ià( ¬gc < 1) { 1198 `u§ge (); 1199 `ex™ (1); 1202 ià( `Œª¥Üt_Ý’ ( Œª¥Üt , deviû , bc¥_¿‹ ) < 0) 1203 `ex™ (1); 1205 `ä“ ( deviû ); 1207  i = 0; commªds [i]. ¡r ; i++) { 1208 ià( `¡rÿ£cmp ( commªds [ i ]. ¡r , ¬gv [0])) 1211 ”r = commªds [ i ]. `func ( Œª¥Üt , ¬gc , ¬gv ); 1213 `Œª¥Üt_þo£ ( Œª¥Üt ); 1215 ià( ”r < 0) { 1216 `årštf ( ¡d”r , "Can'tƒxecute command: %s (%d)\n", 1217 `¡»¼Ü ( ”ºo ),ƒrrno); 1218 `ex™ (1); 1221 `ex™ (0); 1224 `årštf ( ¡d”r , "Unsupported command\n"); 1226 `Œª¥Üt_þo£ ( Œª¥Üt ); 1228 `ex™ (1); 1229 } } @tools/bdaddr.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<¡dlib.h > 31  ~ 32  ~ 33  ~ 34  ~ 36  ~ 37  ~ 38  ~ 40  ~"¤c/oui.h " 42  gŒªs›Á = 0; 44  $g’”ic_»£t_deviû ( dd ) 46 bdaddr_t bdaddr ; 47  ”r ; 49 ”r = `hci_£nd_cmd ( dd , 0x03, 0x0003, 0, NULL ); 50 ià( ”r < 0) 51  ”r ; 53  `hci_»ad_bd_addr ( dd , & bdaddr , 10000); 54 } } 56  #OCF_ERICSSON_WRITE_BD_ADDR 0x000d ) 58 bdaddr_t mbdaddr ; 59 } t__©Œibu‹__ (( t·cked )è t”icssÚ_wr™e_bd_addr_ý ; 61  $”icssÚ_wr™e_bd_addr ( dd , bdaddr_t * bdaddr ) 63  hci_»que¡ rq ; 64 ”icssÚ_wr™e_bd_addr_ý ý ; 66 `mem£t (& ý , 0, (cp)); 67 `baýy (& ý . bdaddr , bdaddr); 69 `mem£t (& rq , 0, (rq)); 70 rq . ogf = OGF_VENDOR_CMD ; 71 rq . ocf = OCF_ERICSSON_WRITE_BD_ADDR ; 72 rq . ý¬am = & ý ; 73 rq . þ’ = ( ý ); 74 rq . ½¬am = NULL ; 75 rq . ¾’ = 0; 77 ià( `hci_£nd_»q ( dd , & rq , 1000) < 0) 81 } } 83  #OCF_ERICSSON_STORE_IN_FLASH 0x0022 ) 85 ušt8_t mu£r_id ; 86 ušt8_t mæash_Ëngth ; 87 ušt8_t mæash_d©a [253]; 88 } t__©Œibu‹__ (( t·cked )è t”icssÚ_¡Üe_š_æash_ý ; 90  $”icssÚ_¡Üe_š_æash ( dd , ušt8_t u£r_id , ušt8_ˆ æash_Ëngth , ušt8_ˆ* æash_d©a ) 92  hci_»que¡ rq ; 93 ”icssÚ_¡Üe_š_æash_ý ý ; 95 `mem£t (& ý , 0, (cp)); 96 ý . u£r_id = user_id; 97 ý . æash_Ëngth = flash_length; 98 ià( æash_Ëngth > 0) 99 `memýy ( ý . æash_d©a , fÏsh_d©a, æash_Ëngth ); 101 `mem£t (& rq , 0, (rq)); 102 rq . ogf = OGF_VENDOR_CMD ; 103 rq . ocf = OCF_ERICSSON_STORE_IN_FLASH ; 104 rq . ý¬am = & ý ; 105 rq . þ’ = ( ý ); 106 rq . ½¬am = NULL ; 107 rq . ¾’ = 0; 109 ià( `hci_£nd_»q ( dd , & rq , 1000) < 0) 113 } } 115  $c¤_wr™e_bd_addr ( dd , bdaddr_t * bdaddr ) 117  cmd [] = { 0x02, 0x00, 0x0c, 0x00, 0x11, 0x47, 0x03, 0x70, 121  ý [254], ½ [254]; 122  hci_»que¡ rq ; 124 ià( Œªs›Á ) 125 cmd [14] = 0x08; 127 cmd [16] = bdaddr -> b [2]; 128 cmd [17] = 0x00; 129 cmd [18] = bdaddr -> b [0]; 130 cmd [19] = bdaddr -> b [1]; 131 cmd [20] = bdaddr -> b [3]; 132 cmd [21] = 0x00; 133 cmd [22] = bdaddr -> b [4]; 134 cmd [23] = bdaddr -> b [5]; 136 `mem£t (& ý , 0, (cp)); 137 ý [0] = 0xc2; 138 `memýy ( ý + 1, cmd , (cmd)); 140 `mem£t (& rq , 0, (rq)); 141 rq . ogf = OGF_VENDOR_CMD ; 142 rq . ocf = 0x00; 143 rq . ev’t = EVT_VENDOR ; 144 rq . ý¬am = ý ; 145 rq . þ’ = ( cmd ) + 1; 146 rq . ½¬am = ½ ; 147 rq . ¾’ = ( ½ ); 149 ià( `hci_£nd_»q ( dd , & rq , 2000) < 0) 152 ià( ½ [0] != 0xc2) { 153 ”ºo = EIO ; 157 ià(( ½ [9] + (rp[10] << 8)) != 0) { 158 ”ºo = ENXIO ; 163 } } 165  $c¤_»£t_deviû ( dd ) 167  cmd [] = { 0x02, 0x00, 0x09, 0x00, 171  ý [254], ½ [254]; 172  hci_»que¡ rq ; 174 ià( Œªs›Á ) 175 cmd [6] = 0x02; 177 `mem£t (& ý , 0, (cp)); 178 ý [0] = 0xc2; 179 `memýy ( ý + 1, cmd , (cmd)); 181 `mem£t (& rq , 0, (rq)); 182 rq . ogf = OGF_VENDOR_CMD ; 183 rq . ocf = 0x00; 184 rq . ev’t = EVT_VENDOR ; 185 rq . ý¬am = ý ; 186 rq . þ’ = ( cmd ) + 1; 187 rq . ½¬am = ½ ; 188 rq . ¾’ = ( ½ ); 190 ià( `hci_£nd_»q ( dd , & rq , 2000) < 0) 194 } } 196  #OCF_TI_WRITE_BD_ADDR 0x0006 ) 198 bdaddr_t mbdaddr ; 199 } t__©Œibu‹__ (( t·cked )è tti_wr™e_bd_addr_ý ; 201  $ti_wr™e_bd_addr ( dd , bdaddr_t * bdaddr ) 203  hci_»que¡ rq ; 204 ti_wr™e_bd_addr_ý ý ; 206 `mem£t (& ý , 0, (cp)); 207 `baýy (& ý . bdaddr , bdaddr); 209 `mem£t (& rq , 0, (rq)); 210 rq . ogf = OGF_VENDOR_CMD ; 211 rq . ocf = OCF_TI_WRITE_BD_ADDR ; 212 rq . ý¬am = & ý ; 213 rq . þ’ = ( ý ); 214 rq . ½¬am = NULL ; 215 rq . ¾’ = 0; 217 ià( `hci_£nd_»q ( dd , & rq , 1000) < 0) 221 } } 223  #OCF_BCM_WRITE_BD_ADDR 0x0001 ) 225 bdaddr_t mbdaddr ; 226 } t__©Œibu‹__ (( t·cked )è tbcm_wr™e_bd_addr_ý ; 228  $bcm_wr™e_bd_addr ( dd , bdaddr_t * bdaddr ) 230  hci_»que¡ rq ; 231 bcm_wr™e_bd_addr_ý ý ; 233 `mem£t (& ý , 0, (cp)); 234 `baýy (& ý . bdaddr , bdaddr); 236 `mem£t (& rq , 0, (rq)); 237 rq . ogf = OGF_VENDOR_CMD ; 238 rq . ocf = OCF_BCM_WRITE_BD_ADDR ; 239 rq . ý¬am = & ý ; 240 rq . þ’ = ( ý ); 241 rq . ½¬am = NULL ; 242 rq . ¾’ = 0; 244 ià( `hci_£nd_»q ( dd , & rq , 1000) < 0) 248 } } 250  #OCF_ZEEVO_WRITE_BD_ADDR 0x0001 ) 252 bdaddr_t mbdaddr ; 253 } t__©Œibu‹__ (( t·cked )è tz“vo_wr™e_bd_addr_ý ; 255  $z“vo_wr™e_bd_addr ( dd , bdaddr_t * bdaddr ) 257  hci_»que¡ rq ; 258 z“vo_wr™e_bd_addr_ý ý ; 260 `mem£t (& ý , 0, (cp)); 261 `baýy (& ý . bdaddr , bdaddr); 263 `mem£t (& rq , 0, (rq)); 264 rq . ogf = OGF_VENDOR_CMD ; 265 rq . ocf = OCF_ZEEVO_WRITE_BD_ADDR ; 266 rq . ý¬am = & ý ; 267 rq . þ’ = ( ý ); 268 rq . ½¬am = NULL ; 269 rq . ¾’ = 0; 271 ià( `hci_£nd_»q ( dd , & rq , 1000) < 0) 275 } } 277  #OCF_MRVL_WRITE_BD_ADDR 0x0022 ) 279 ušt8_t m·¿m‘”_id ; 280 ušt8_t mbdaddr_Ën ; 281 bdaddr_t mbdaddr ; 282 } t__©Œibu‹__ (( t·cked )è tmrvl_wr™e_bd_addr_ý ; 284  $mrvl_wr™e_bd_addr ( dd , bdaddr_t * bdaddr ) 286 mrvl_wr™e_bd_addr_ý ý ; 288 `mem£t (& ý , 0, (cp)); 289 ý . ·¿m‘”_id = 0xFE; 290 ý . bdaddr_Ën = 6; 291 `baýy (& ý . bdaddr , bdaddr); 293 ià( `hci_£nd_cmd ( dd , OGF_VENDOR_CMD , OCF_MRVL_WRITE_BD_ADDR , 294 ( ý ), &cp) < 0) 297 `¦“p (1); 299 } } 301  $¡_wr™e_bd_addr ( dd , bdaddr_t * bdaddr ) 303  `”icssÚ_¡Üe_š_æash ( dd , 0xã, 6, ( ušt8_t *è bdaddr ); 304 } } 307 ušt16_t mcompid ; 308 (* mwr™e_bd_addr )( mdd , bdaddr_t * mbdaddr ); 309 (* m»£t_deviû )( mdd ); 310 } gv’dÜ [] = { 311 { 0, ”icssÚ_wr™e_bd_addr , NULL }, 312 { 10, c¤_wr™e_bd_addr , c¤_»£t_deviû }, 313 { 13, ti_wr™e_bd_addr , NULL }, 314 { 15, bcm_wr™e_bd_addr , g’”ic_»£t_deviû }, 315 { 18, z“vo_wr™e_bd_addr , NULL }, 316 { 48, ¡_wr™e_bd_addr , g’”ic_»£t_deviû }, 317 { 57, ”icssÚ_wr™e_bd_addr , g’”ic_»£t_deviû }, 318 { 72, mrvl_wr™e_bd_addr , g’”ic_»£t_deviû }, 319 { 65535, NULL , NULL }, 322  $u§ge () 324 `´štf ("bdaddr - Utility for changinghe Bluetooth device‡ddress\n\n"); 325 `´štf ("Usage:\n" 327 } } 329  ÝtiÚ gmaš_ÝtiÚs [] = { 337  $maš ( ¬gc , * ¬gv []) 339  hci_dev_šfo di ; 340  hci_v”siÚ v” ; 341 bdaddr_t bdaddr ; 342  addr [18], * comp ; 343  i , dd , Ýt , dev = 0, »£t = 0; 345 `baýy (& bdaddr , BDADDR_ANY ); 347 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+i:¹h", maš_ÝtiÚs , NULL )) != -1) { 348  Ýt ) { 350 dev = `hci_devid ( Ýrg ); 351 ià( dev < 0) { 352 `³¼Ü ("Invalid device"); 353 `ex™ (1); 358 »£t = 1; 362 Œªs›Á = 1; 367 `u§ge (); 368 `ex™ (0); 372 ¬gc -ð Ýtšd ; 373 ¬gv +ð Ýtšd ; 374 Ýtšd = 0; 376 dd = `hci_Ý’_dev ( dev ); 377 ià( dd < 0) { 378 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 379 dev , `¡»¼Ü ( ”ºo ),ƒrrno); 380 `ex™ (1); 383 ià( `hci_devšfo ( dev , & di ) < 0) { 384 `årštf ( ¡d”r , "Can't get device info for hci%d: %s (%d)\n", 385 dev , `¡»¼Ü ( ”ºo ),ƒrrno); 386 `hci_þo£_dev ( dd ); 387 `ex™ (1); 390 ià( `hci_»ad_loÿl_v”siÚ ( dd , & v” , 1000) < 0) { 391 `årštf ( ¡d”r , "Can't„ead version info for hci%d: %s (%d)\n", 392 dev , `¡»¼Ü ( ”ºo ),ƒrrno); 393 `hci_þo£_dev ( dd ); 394 `ex™ (1); 397 ià(! `bacmp (& di . bdaddr , BDADDR_ANY )) { 398 ià( `hci_»ad_bd_addr ( dd , & bdaddr , 1000) < 0) { 399 `årštf ( ¡d”r , "Can't„ead‡ddress for hci%d: %s (%d)\n", 400 dev , `¡»¼Ü ( ”ºo ),ƒrrno); 401 `hci_þo£_dev ( dd ); 402 `ex™ (1); 405 `baýy (& bdaddr , & di .bdaddr); 407 `´štf ("Manufacturer: %s (%d)\n", 408 `bt_compidto¡r ( v” . mªuçùu»r ), ver.manufacturer); 410 comp = `b©ocomp (& bdaddr ); 412 `ba2¡r (& bdaddr , addr ); 413 `´štf ("Deviû‡dd»ss: %s", addr ); 415 ià( comp ) { 416 `´štf (" (%s)\n", comp ); 417 `ä“ ( comp ); 419 `´štf ("\n"); 421 ià( ¬gc < 1) { 422 `hci_þo£_dev ( dd ); 423 `ex™ (0); 426 `¡r2ba ( ¬gv [0], & bdaddr ); 427 ià(! `bacmp (& bdaddr , BDADDR_ANY )) { 428 `hci_þo£_dev ( dd ); 429 `ex™ (0); 432  i = 0; v’dÜ [i]. compid != 65535; i++) 433 ià( v” . mªuçùu»r =ð v’dÜ [ i ]. compid ) { 434 comp = `b©ocomp (& bdaddr ); 436 `ba2¡r (& bdaddr , addr ); 437 `´štf ("New BD‡dd»ss: %s", addr ); 439 ià( comp ) { 440 `´štf (" (%s)\n\n", comp ); 441 `ä“ ( comp ); 443 `´štf ("\n\n"); 446 ià( v’dÜ [ i ]. `wr™e_bd_addr ( dd , & bdaddr ) < 0) { 447 `årštf ( ¡d”r , "Can't write‚ew‡ddress\n"); 448 `hci_þo£_dev ( dd ); 449 `ex™ (1); 452 `´štf ("Address changed - "); 454 ià( »£t && v’dÜ [ i ]. »£t_deviû ) { 455 ià( v’dÜ [ i ]. `»£t_deviû ( dd ) < 0) { 456 `´štf ("Reset device manually\n"); 458 `ioùl ( dd , HCIDEVRESET , dev ); 459 `´štf ("Device„eset successfully\n"); 462 `´štf ("Reset device‚ow\n"); 469 `hci_þo£_dev ( dd ); 470 `ex™ (0); 473 `hci_þo£_dev ( dd ); 475 `´štf ("\n"); 476 `årštf ( ¡d”r , "Unsupported manufacturer\n"); 478 `ex™ (1); 479 } } @tools/bluemoon.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<ùy³.h > 29  ~<¡dio.h > 30  ~ 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 34  ~ 35  ~ 36  ~ 38  ~"mÚ™Ü/mašloÝ.h " 39  ~"mÚ™Ü/bt.h " 40  ~"¤c/sh¬ed/utž.h " 41  ~"¤c/sh¬ed/hci.h " 43  #CMD_NO_OPERATION 0xfc02 ) 45  #CMD_READ_VERSION 0xfc05 ) 46  sr¥_»ad_v”siÚ { 47 ušt8_t m¡©us ; 48 ušt8_t mhw_¶©fÜm ; 49 ušt8_t mhw_v¬ŸÁ ; 50 ušt8_t mhw_»visiÚ ; 51 ušt8_t mfw_v¬ŸÁ ; 52 ušt8_t mfw_»visiÚ ; 53 ušt8_t mfw_bužd_ ; 54 ušt8_t mfw_bužd_cw ; 55 ušt8_t mfw_bužd_yy ; 56 ušt8_t mfw_·tch ; 57 } __©Œibu‹__ (( ·cked )); 59  #CMD_READ_BOOT_PARAMS 0xfc0d ) 60  sr¥_»ad_boÙ_·¿ms { 61 ušt8_t m¡©us ; 62 ušt8_t mÙp_fÜm© ; 63 ušt8_t mÙp_cÚ‹Á ; 64 ušt8_t mÙp_·tch ; 65 ušt16_t mdev_»vid ; 66 ušt8_t m£cu»_boÙ ; 67 ušt8_t mkey_äom_hdr ; 68 ušt8_t mkey_ty³ ; 69 ušt8_t mÙp_lock ; 70 ušt8_t m­i_lock ; 71 ušt8_t mdebug_lock ; 72 ušt8_t mÙp_bdaddr [6]; 73 ušt8_t mmš_fw_bužd_ ; 74 ušt8_t mmš_fw_bužd_cw ; 75 ušt8_t mmš_fw_bužd_yy ; 76 ušt8_t mlim™ed_cû ; 77 ušt8_t muÆocked_¡©e ; 78 } __©Œibu‹__ (( ·cked )); 80  #CMD_WRITE_BOOT_PARAMS 0xfc0e ) 81  scmd_wr™e_boÙ_·¿ms { 82 ušt32_t mboÙ_addr ; 83 ušt8_t mfw_bužd_ ; 84 ušt8_t mfw_bužd_cw ; 85 ušt8_t mfw_bužd_yy ; 86 } __©Œibu‹__ (( ·cked )); 88  #CMD_MANUFACTURER_MODE 0xfc11 ) 89  scmd_mªuçùu»r_mode { 90 ušt8_t mmode_sw™ch ; 91 ušt8_t m»£t ; 92 } __©Œibu‹__ (( ·cked )); 94  #CMD_WRITE_BD_DATA 0xfc2f ) 95  scmd_wr™e_bd_d©a { 96 ušt8_t mbdaddr [6]; 97 ušt8_t m»£rved1 [6]; 98 ušt8_t mã©u»s [8]; 99 ušt8_t mË_ã©u»s ; 100 ušt8_t m»£rved2 [32]; 101 ušt8_t mlmp_v”siÚ ; 102 ušt8_t m»£rved3 [26]; 103 } __©Œibu‹__ (( ·cked )); 105  #CMD_READ_BD_DATA 0xfc30 ) 106  sr¥_»ad_bd_d©a { 107 ušt8_t m¡©us ; 108 ušt8_t mbdaddr [6]; 109 ušt8_t m»£rved1 [6]; 110 ušt8_t mã©u»s [8]; 111 ušt8_t mË_ã©u»s ; 112 ušt8_t m»£rved2 [32]; 113 ušt8_t mlmp_v”siÚ ; 114 ušt8_t m»£rved3 [26]; 115 } __©Œibu‹__ (( ·cked )); 117  #CMD_WRITE_BD_ADDRESS 0xfc31 ) 118  scmd_wr™e_bd_add»ss { 119 ušt8_t mbdaddr [6]; 120 } __©Œibu‹__ (( ·cked )); 122  #CMD_ACT_DEACT_TRACES 0xfc43 ) 123  scmd_aù_d—ù_Œaûs { 124 ušt8_t mtx_Œaû ; 125 ušt8_t mtx_¬q ; 126 ušt8_t mrx_Œaû ; 127 } __©Œibu‹__ (( ·cked )); 129  #CMD_MEMORY_WRITE 0xfc8e ) 131  bt_hci * ghci_dev ; 132  ušt16_t ghci_šdex = 0; 134  #FIRMWARE_BASE_PATH "/lib/fœmw¬e" ) 136  boÞ g£t_bdaddr = çl£ ; 137 cÚ¡ * g£t_bdaddr_v®ue = NULL ; 138  boÞ gg‘_bdd©a = çl£ ; 139  boÞ glßd_fœmw¬e = çl£ ; 140 cÚ¡ * glßd_fœmw¬e_v®ue = NULL ; 141  ušt8_t * gfœmw¬e_d©a = NULL ; 142  size_t gfœmw¬e_size = 0; 143  size_t gfœmw¬e_off£t = 0; 144  boÞ gcheck_fœmw¬e = çl£ ; 145 cÚ¡ * gcheck_fœmw¬e_v®ue = NULL ; 146 ušt8_t gmªuçùu»r_mode_»£t = 0x00; 147  boÞ gu£_mªuçùu»r_mode = çl£ ; 148  boÞ g£t_Œaûs = çl£ ; 149  boÞ g»£t_Ú_ex™ = çl£ ; 151  $»£t_com¶‘e (cÚ¡ * d©a , ušt8_t size , * u£r_d©a ) 153 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 155 ià( ¡©us ) { 156 `årštf ( ¡d”r , "FažedØ»£ˆ(0x%02x)\n", ¡©us ); 157 `mašloÝ_qu™ (); 161 `mašloÝ_qu™ (); 162 } } 164  $Ëave_mªuçùu»r_mode_com¶‘e (cÚ¡ * d©a , ušt8_t size , 165 * u£r_d©a ) 167 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 169 ià( ¡©us ) { 170 `årštf ( ¡d”r , "Failedo†eave manufacturer mode (0x%02x)\n", 171 ¡©us ); 172 `mašloÝ_qu™ (); 176 ià( »£t_Ú_ex™ ) { 177 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_RESET , NULL , 0, 178 »£t_com¶‘e , NULL , NULL); 182 `mašloÝ_qu™ (); 183 } } 185  $shutdown_deviû () 187 `bt_hci_æush ( hci_dev ); 189 `ä“ ( fœmw¬e_d©a ); 191 ià( u£_mªuçùu»r_mode ) { 192  cmd_mªuçùu»r_mode cmd ; 194 cmd . mode_sw™ch = 0x00; 195 cmd . »£t = mªuçùu»r_mode_»£t ; 197 `bt_hci_£nd ( hci_dev , CMD_MANUFACTURER_MODE , & cmd , (cmd), 198 Ëave_mªuçùu»r_mode_com¶‘e , NULL , NULL); 202 ià( »£t_Ú_ex™ ) { 203 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_RESET , NULL , 0, 204 »£t_com¶‘e , NULL , NULL); 208 `mašloÝ_qu™ (); 209 } } 211  $wr™e_bd_add»ss_com¶‘e (cÚ¡ * d©a , ušt8_t size , 212 * u£r_d©a ) 214 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 216 ià( ¡©us ) { 217 `årštf ( ¡d”r , "FažedØwr™add»s (0x%02x)\n", ¡©us ); 218 `mašloÝ_qu™ (); 222 `shutdown_deviû (); 223 } } 225  $»ad_bd_addr_com¶‘e (cÚ¡ * d©a , ušt8_t size , 226 * u£r_d©a ) 228 cÚ¡  bt_hci_r¥_»ad_bd_addr * r¥ = d©a ; 229  cmd_wr™e_bd_add»ss cmd ; 231 ià( r¥ -> ¡©us ) { 232 `årštf ( ¡d”r , "Failedo„ead‡ddress (0x%02x)\n", 233 r¥ -> ¡©us ); 234 `mašloÝ_qu™ (); 235 `shutdown_deviû (); 239 ià( £t_bdaddr_v®ue ) { 240 `årštf ( ¡d”r , "Setting‡ddress is‚ot supported\n"); 241 `mašloÝ_qu™ (); 245 `´štf ("Controller Address\n"); 246 `´štf ("\tOld BD_ADDR: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n", 247 r¥ -> bdaddr [5],„sp->bdaddr[4], 248 r¥ -> bdaddr [3],„sp->bdaddr[2], 249 r¥ -> bdaddr [1],„sp->bdaddr[0]); 251 `memýy ( cmd . bdaddr , r¥ ->bdaddr, 6); 252 cmd . bdaddr [0] = ( hci_šdex & 0xff); 254 `´štf ("\tNew BD_ADDR: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n", 255 cmd . bdaddr [5], cmd.bdaddr[4], 256 cmd . bdaddr [3], cmd.bdaddr[2], 257 cmd . bdaddr [1], cmd.bdaddr[0]); 259 `bt_hci_£nd ( hci_dev , CMD_WRITE_BD_ADDRESS , & cmd , (cmd), 260 wr™e_bd_add»ss_com¶‘e , NULL , NULL); 261 } } 263  $aù_d—ù_Œaûs_com¶‘e (cÚ¡ * d©a , ušt8_t size , 264 * u£r_d©a ) 266 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 268 ià( ¡©us ) { 269 `årštf ( ¡d”r , "FažedØaùiv©Œaû (0x%02x)\n", ¡©us ); 270 `shutdown_deviû (); 274 `shutdown_deviû (); 275 } } 277  $aù_d—ù_Œaûs () 279  cmd_aù_d—ù_Œaûs cmd ; 281 cmd . tx_Œaû = 0x03; 282 cmd . tx_¬q = 0x03; 283 cmd . rx_Œaû = 0x03; 285 `bt_hci_£nd ( hci_dev , CMD_ACT_DEACT_TRACES , & cmd , (cmd), 286 aù_d—ù_Œaûs_com¶‘e , NULL , NULL); 287 } } 289  $wr™e_bd_d©a_com¶‘e (cÚ¡ * d©a , ušt8_t size , 290 * u£r_d©a ) 292 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 294 ià( ¡©us ) { 295 `årštf ( ¡d”r , "FažedØwr™d©¨(0x%02x)\n", ¡©us ); 296 `shutdown_deviû (); 300 ià( £t_Œaûs ) { 301 `aù_d—ù_Œaûs (); 305 `shutdown_deviû (); 306 } } 308  $»ad_bd_d©a_com¶‘e (cÚ¡ * d©a , ušt8_t size , 309 * u£r_d©a ) 311 cÚ¡  r¥_»ad_bd_d©a * r¥ = d©a ; 313 ià( r¥ -> ¡©us ) { 314 `årštf ( ¡d”r , "FažedØ»ad d©¨(0x%02x)\n", r¥ -> ¡©us ); 315 `shutdown_deviû (); 319 `´štf ("Controller Data\n"); 320 `´štf ("\tBD_ADDR: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n", 321 r¥ -> bdaddr [5],„sp->bdaddr[4], 322 r¥ -> bdaddr [3],„sp->bdaddr[2], 323 r¥ -> bdaddr [1],„sp->bdaddr[0]); 325 `´štf ("\tLMP V”siÚ: %u\n", r¥ -> lmp_v”siÚ ); 326 `´štf ("\tLMP Features: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x" 328 r¥ -> ã©u»s [0],„sp->features[1], 329 r¥ -> ã©u»s [2],„sp->features[3], 330 r¥ -> ã©u»s [4],„sp->features[5], 331 r¥ -> ã©u»s [6],„sp->features[7]); 332 `´štf ("\tLE F—tu»s: 0x%2.2x\n", r¥ -> Ë_ã©u»s ); 334 ià( £t_bdaddr ) { 335  cmd_wr™e_bd_d©a cmd ; 337 `memýy ( cmd . bdaddr , r¥ ->bdaddr, 6); 338 cmd . bdaddr [0] = ( hci_šdex & 0xff); 339 cmd . lmp_v”siÚ = 0x07; 340 `memýy ( cmd . ã©u»s , r¥ ->features, 8); 341 cmd . Ë_ã©u»s = r¥ ->le_features; 342 cmd . Ë_ã©u»s |= 0x1e; 343 `memýy ( cmd . »£rved1 , r¥ ->reserved1, (cmd.reserved1)); 344 `memýy ( cmd . »£rved2 , r¥ ->reserved2, (cmd.reserved2)); 345 `memýy ( cmd . »£rved3 , r¥ ->reserved3, (cmd.reserved3)); 347 `bt_hci_£nd ( hci_dev , CMD_WRITE_BD_DATA , & cmd , (cmd), 348 wr™e_bd_d©a_com¶‘e , NULL , NULL); 352 `shutdown_deviû (); 353 } } 355  $fœmw¬e_commªd_com¶‘e (cÚ¡ * d©a , ušt8_t size , 356 * u£r_d©a ) 358 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 360 ià( ¡©us ) { 361 `årštf ( ¡d”r , "FažedØlßd fœmw¬(0x%02x)\n", ¡©us ); 362 mªuçùu»r_mode_»£t = 0x01; 363 `shutdown_deviû (); 367 ià( fœmw¬e_off£t >ð fœmw¬e_size ) { 368 `´štf ("Activating firmware\n"); 369 mªuçùu»r_mode_»£t = 0x02; 370 `shutdown_deviû (); 374 ià( fœmw¬e_d©a [ fœmw¬e_off£t ] == 0x01) { 375 ušt16_t Ýcode ; 376 ušt8_t dËn ; 378 Ýcode = fœmw¬e_d©a [ fœmw¬e_off£t + 2] << 8 | 379 fœmw¬e_d©a [ fœmw¬e_off£t + 1]; 380 dËn = fœmw¬e_d©a [ fœmw¬e_off£t + 3]; 382 `bt_hci_£nd ( hci_dev , Ýcode , fœmw¬e_d©a + 383 fœmw¬e_off£t + 4, dËn , 384 fœmw¬e_commªd_com¶‘e , NULL , NULL); 386 fœmw¬e_off£t +ð dËn + 4; 388 ià( fœmw¬e_d©a [ fœmw¬e_off£t ] == 0x02) { 389 dËn = fœmw¬e_d©a [ fœmw¬e_off£t + 2]; 390 fœmw¬e_off£t +ð dËn + 3; 393 `årštf ( ¡d”r , "Invalid…acket in firmware\n"); 394 mªuçùu»r_mode_»£t = 0x01; 395 `shutdown_deviû (); 398 } } 400  $’‹r_mªuçùu»r_mode_com¶‘e (cÚ¡ * d©a , ušt8_t size , 401 * u£r_d©a ) 403 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 405 ià( ¡©us ) { 406 `årštf ( ¡d”r , "Failedoƒnter manufacturer mode (0x%02x)\n", 407 ¡©us ); 408 `mašloÝ_qu™ (); 412 ià( lßd_fœmw¬e ) { 413 ušt8_t ¡©us = BT_HCI_ERR_SUCCESS ; 414 `fœmw¬e_commªd_com¶‘e (& ¡©us , (¡©us), NULL ); 418 ià( g‘_bdd©a || £t_bdaddr ) { 419 `bt_hci_£nd ( hci_dev , CMD_READ_BD_DATA , NULL , 0, 420 »ad_bd_d©a_com¶‘e , NULL , NULL); 424 ià( £t_Œaûs ) { 425 `aù_d—ù_Œaûs (); 429 `shutdown_deviû (); 430 } } 432  $»que¡_fœmw¬e (cÚ¡ * ·th ) 434  cmd_num = 0; 435  evt_num = 0; 436  ¡© ¡ ; 437 ssize_t Ën ; 438  fd ; 440 fd = `Ý’ ( ·th , O_RDONLY ); 441 ià( fd < 0) { 442 `årštf ( ¡d”r , "FažedØÝ’ fœmw¬%s\n", ·th ); 443 `shutdown_deviû (); 447 ià( `f¡© ( fd , & ¡ ) < 0) { 448 `årštf ( ¡d”r , "Failedo get firmware size\n"); 449 `þo£ ( fd ); 450 `shutdown_deviû (); 454 fœmw¬e_d©a = `m®loc ( ¡ . ¡_size ); 455 ià(! fœmw¬e_d©a ) { 456 `årštf ( ¡d”r , "Failedo‡llocate firmware buffer\n"); 457 `þo£ ( fd ); 458 `shutdown_deviû (); 462 Ën = `»ad ( fd , fœmw¬e_d©a , ¡ . ¡_size ); 463 ià( Ën < 0) { 464 `årštf ( ¡d”r , "Failedo„ead firmware file\n"); 465 `þo£ ( fd ); 466 `shutdown_deviû (); 470 `þo£ ( fd ); 472 ià( Ën < ¡ . ¡_size ) { 473 `årštf ( ¡d”r , "Firmware size does‚ot match buffer\n"); 474 `shutdown_deviû (); 478 fœmw¬e_size = Ën ; 480 ià( fœmw¬e_d©a [0] == 0xff) 481 fœmw¬e_off£t = 1; 483  fœmw¬e_off£t < fœmw¬e_size ) { 484 ušt16_t Ýcode ; 485 ušt8_t evt , dËn ; 487  fœmw¬e_d©a [ fœmw¬e_off£t ]) { 489 Ýcode = fœmw¬e_d©a [ fœmw¬e_off£t + 2] << 8 | 490 fœmw¬e_d©a [ fœmw¬e_off£t + 1]; 491 dËn = fœmw¬e_d©a [ fœmw¬e_off£t + 3]; 493 ià( Ýcode !ð CMD_MEMORY_WRITE ) 494 `´štf ("UÃx³ùed opcod0x%02x\n", Ýcode ); 496 fœmw¬e_off£t +ð dËn + 4; 497 cmd_num ++; 501 evt = fœmw¬e_d©a [ fœmw¬e_off£t + 1]; 502 dËn = fœmw¬e_d©a [ fœmw¬e_off£t + 2]; 504 ià( evt !ð BT_HCI_EVT_CMD_COMPLETE ) 505 `´štf ("UÃx³ùedƒv’ˆ0x%02x\n", evt ); 507 fœmw¬e_off£t +ð dËn + 3; 508 evt_num ++; 512 `årštf ( ¡d”r , "Invalid firmware file\n"); 513 `shutdown_deviû (); 518 `´štf ("Fœmw¬w™h %u commªd ªd %uƒv’ts\n", cmd_num , evt_num ); 520 ià( fœmw¬e_d©a [0] == 0xff) 521 fœmw¬e_off£t = 1; 522 } } 524  $»ad_boÙ_·¿ms_com¶‘e (cÚ¡ * d©a , ušt8_t size , 525 * u£r_d©a ) 527 cÚ¡  r¥_»ad_boÙ_·¿ms * r¥ = d©a ; 529 ià( r¥ -> ¡©us ) { 530 `årštf ( ¡d”r , "Failedo„ead boot…arams (0x%02x)\n", 531 r¥ -> ¡©us ); 532 `mašloÝ_qu™ (); 536 ià( size !ð(* r¥ )) { 537 `årštf ( ¡d”r , "Size mismatch for„ead boot…arams\n"); 538 `mašloÝ_qu™ (); 542 `´štf ("Secure Boot Parameters\n"); 543 `´štf ("\tOTP FÜm© V”siÚ:\t%u\n", r¥ -> Ùp_fÜm© ); 544 `´štf ("\tOTP CÚ‹Á V”siÚ:\t%u\n", r¥ -> Ùp_cÚ‹Á ); 545 `´štf ("\tOTP ROM P©ch V”siÚ:\t%u\n", r¥ -> Ùp_·tch ); 546 `´štf ("\tDeviû RevisiÚ ID:\t%u\n", `Ë16_to_ýu ( r¥ -> dev_»vid )); 547 `´štf ("\tSecu» BoÙ EÇbË:\t%u\n", r¥ -> £cu»_boÙ ); 548 `´štf ("\tTakKey From H—d”:\t%u\n", r¥ -> key_äom_hdr ); 549 `´štf ("\tRSA Key Ty³:\t\t%u\n", r¥ -> key_ty³ ); 550 `´štf ("\tOTP Lock:\t\t%u\n", r¥ -> Ùp_lock ); 551 `´štf ("\tAPI Lock:\t\t%u\n", r¥ -> ­i_lock ); 552 `´štf ("\tDebug Lock:\t\t%u\n", r¥ -> debug_lock ); 553 `´štf ("\tMš FW Bužd Numb”:\t%u-%u.%u\n", r¥ -> mš_fw_bužd_ , 554 r¥ -> mš_fw_bužd_cw , 2000 +„¥-> mš_fw_bužd_yy ); 555 `´štf ("\tLim™ed CCEØISSC:\t%u\n", r¥ -> lim™ed_cû ); 556 `´štf ("\tUÆocked S‹:\t\t%u\n", r¥ -> uÆocked_¡©e ); 558 `mašloÝ_qu™ (); 559 } } 562 ušt8_t mv® ; 563 cÚ¡ * m¡r ; 564 } ghw_v¬ŸÁ_bË [] = { 575 ušt8_t mv® ; 576 cÚ¡ * m¡r ; 577 } gfw_v¬ŸÁ_bË [] = { 584  $»ad_v”siÚ_com¶‘e (cÚ¡ * d©a , ušt8_t size , 585 * u£r_d©a ) 587 cÚ¡  r¥_»ad_v”siÚ * r¥ = d©a ; 588 cÚ¡ * ¡r ; 589  i ; 591 ià( r¥ -> ¡©us ) { 592 `årštf ( ¡d”r , "Failedo„ead version (0x%02x)\n", 593 r¥ -> ¡©us ); 594 `mašloÝ_qu™ (); 598 ià( size !ð(* r¥ )) { 599 `årštf ( ¡d”r , "Size mismatch for„ead version„esponse\n"); 600 `mašloÝ_qu™ (); 604 ià( lßd_fœmw¬e ) { 605 ià( lßd_fœmw¬e_v®ue ) { 606 `´štf ("Fœmw¬e: %s\n", lßd_fœmw¬e_v®ue ); 607 `»que¡_fœmw¬e ( lßd_fœmw¬e_v®ue ); 609  fw_Çme [ PATH_MAX ]; 611 `¢´štf ( fw_Çme , (fw_name), 613 FIRMWARE_BASE_PATH , "intel", 614 r¥ -> hw_¶©fÜm ,„¥-> hw_v¬ŸÁ , 615 r¥ -> hw_»visiÚ ,„¥-> fw_v¬ŸÁ , 616 r¥ -> fw_»visiÚ ,„¥-> fw_bužd_ , 617 r¥ -> fw_bužd_cw ,„¥-> fw_bužd_yy ); 619 `´štf ("Fœmw¬e: %s\n", fw_Çme ); 620 `´štf ("P©ch†ev–: %d\n", r¥ -> fw_·tch ); 621 `»que¡_fœmw¬e ( fw_Çme ); 625 ià( u£_mªuçùu»r_mode ) { 626  cmd_mªuçùu»r_mode cmd ; 628 cmd . mode_sw™ch = 0x01; 629 cmd . »£t = 0x00; 631 `bt_hci_£nd ( hci_dev , CMD_MANUFACTURER_MODE , & cmd , (cmd), 632 ’‹r_mªuçùu»r_mode_com¶‘e , NULL , NULL); 636 ià( £t_bdaddr ) { 637 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_READ_BD_ADDR , NULL , 0, 638 »ad_bd_addr_com¶‘e , NULL , NULL); 642 `´štf ("Controller Version Information\n"); 643 `´štf ("\tH¬dw¬PÏtfÜm:\t%u\n", r¥ -> hw_¶©fÜm ); 645 ¡r = "Reserved"; 647  i = 0; hw_v¬ŸÁ_bË [i]. ¡r ; i++) { 648 ià( hw_v¬ŸÁ_bË [ i ]. v® =ð r¥ -> hw_v¬ŸÁ ) { 649 ¡r = hw_v¬ŸÁ_bË [ i ].str; 654 `´štf ("\tH¬dw¬V¬ŸÁ:\t% (0x%02x)\n", ¡r , r¥ -> hw_v¬ŸÁ ); 655 `´štf ("\tH¬dw¬RevisiÚ:\t%u.%u\n", r¥ -> hw_»visiÚ >> 4, 656 r¥ -> hw_»visiÚ & 0x0f); 658 ¡r = "Reserved"; 660  i = 0; fw_v¬ŸÁ_bË [i]. ¡r ; i++) { 661 ià( fw_v¬ŸÁ_bË [ i ]. v® =ð r¥ -> fw_v¬ŸÁ ) { 662 ¡r = fw_v¬ŸÁ_bË [ i ].str; 667 `´štf ("\tFœmw¬V¬ŸÁ:\t% (0x%02x)\n", ¡r , r¥ -> fw_v¬ŸÁ ); 668 `´štf ("\tFœmw¬RevisiÚ:\t%u.%u\n", r¥ -> fw_»visiÚ >> 4, 669 r¥ -> fw_»visiÚ & 0x0f); 670 `´štf ("\tFœmw¬Bužd Numb”:\t%u-%u.%u\n", r¥ -> fw_bužd_ , 671 r¥ -> fw_bužd_cw , 2000 +„¥-> fw_bužd_yy ); 672 `´štf ("\tFœmw¬P©ch Numb”:\t%u\n", r¥ -> fw_·tch ); 674 ià( r¥ -> hw_v¬ŸÁ =ð0x0b &&„¥-> fw_v¬ŸÁ == 0x06) { 675 `bt_hci_£nd ( hci_dev , CMD_READ_BOOT_PARAMS , NULL , 0, 676 »ad_boÙ_·¿ms_com¶‘e , NULL , NULL); 680 `mašloÝ_qu™ (); 681 } } 683  scss_hdr { 684 ušt32_t mmoduË_ty³ ; 685 ušt32_t mh—d”_Ën ; 686 ušt32_t mh—d”_v”siÚ ; 687 ušt32_t mmoduË_id ; 688 ušt32_t mmoduË_v’dÜ ; 689 ušt32_t md©e ; 690 ušt32_t msize ; 691 ušt32_t mkey_size ; 692 ušt32_t mmodulus_size ; 693 ušt32_t mexpÚ’t_size ; 694 ušt8_t m»£rved [88]; 695 } __©Œibu‹__ (( ·cked )); 697  $ª®yze_fœmw¬e (cÚ¡ * ·th ) 699  cmd_num = 0; 700  css_hdr * css ; 701  ¡© ¡ ; 702 ssize_t Ën ; 703  fd ; 705 fd = `Ý’ ( ·th , O_RDONLY ); 706 ià( fd < 0) { 707 `årštf ( ¡d”r , "FažedØÝ’ fœmw¬%s\n", ·th ); 711 ià( `f¡© ( fd , & ¡ ) < 0) { 712 `årštf ( ¡d”r , "Failedo get firmware size\n"); 713 `þo£ ( fd ); 717 fœmw¬e_d©a = `m®loc ( ¡ . ¡_size ); 718 ià(! fœmw¬e_d©a ) { 719 `årštf ( ¡d”r , "Failedo‡llocate firmware buffer\n"); 720 `þo£ ( fd ); 724 Ën = `»ad ( fd , fœmw¬e_d©a , ¡ . ¡_size ); 725 ià( Ën < 0) { 726 `årštf ( ¡d”r , "Failedo„ead firmware file\n"); 727 `þo£ ( fd ); 728  dÚe ; 731 `þo£ ( fd ); 733 ià( Ën !ð ¡ . ¡_size ) { 734 `årštf ( ¡d”r , "Failedo„ead complete firmware file\n"); 735  dÚe ; 739 ià(( size_t è Ën < (* css )) { 740 `årštf ( ¡d”r , "Firmware file isoo short\n"); 741  dÚe ; 744 css = (*è fœmw¬e_d©a ; 746 `´štf ("ModuËy³:\t%u\n", `Ë32_to_ýu ( css -> moduË_ty³ )); 747 `´štf ("Header†en:\t%u DWORDs / %u bytes\n", 748 `Ë32_to_ýu ( css -> h—d”_Ën ), 749 `Ë32_to_ýu ( css -> h—d”_Ën ) * 4); 750 `´štf ("Header version:\t%u.%u\n", 751 `Ë32_to_ýu ( css -> h—d”_v”siÚ ) >> 16, 752 `Ë32_to_ýu ( css -> h—d”_v”siÚ ) & 0xffff); 753 `´štf ("ModuË ID:\t%u\n", `Ë32_to_ýu ( css -> moduË_id )); 754 `´štf ("ModuË v’dÜ:\t%u\n", `Ë32_to_ýu ( css -> moduË_v’dÜ )); 755 `´štf ("D©e:\t\t%u\n", `Ë32_to_ýu ( css -> d©e )); 756 `´štf ("Size:\t\t%u DWORD / %u by‹s\n", `Ë32_to_ýu ( css -> size ), 757 `Ë32_to_ýu ( css -> size ) * 4); 758 `´štf ("Key size:\t%u DWORDs / %u bytes\n", 759 `Ë32_to_ýu ( css -> key_size ), 760 `Ë32_to_ýu ( css -> key_size ) * 4); 761 `´štf ("Modulus size:\t%u DWORDs / %u bytes\n", 762 `Ë32_to_ýu ( css -> modulus_size ), 763 `Ë32_to_ýu ( css -> modulus_size ) * 4); 764 `´štf ("Exponent size:\t%u DWORDs / %u bytes\n", 765 `Ë32_to_ýu ( css -> expÚ’t_size ), 766 `Ë32_to_ýu ( css -> expÚ’t_size ) * 4); 767 `´štf ("\n"); 770 ià( Ën !ð `Ë32_to_ýu ( css -> size ) * 4) { 771 `årštf ( ¡d”r , "CSS.size does‚ot match file†ength\n"); 772  dÚe ; 775 ià( `Ë32_to_ýu ( css -> h—d”_Ën ) != ((*css) / 4) + 776 `Ë32_to_ýu ( css -> key_size ) + 777 `Ë32_to_ýu ( css -> modulus_size ) + 778 `Ë32_to_ýu ( css -> expÚ’t_size )) { 779 `årštf ( ¡d”r , "CSS.headerLen does‚ot match data sizes\n"); 780  dÚe ; 783 fœmw¬e_size = `Ë32_to_ýu ( css -> size ) * 4; 784 fœmw¬e_off£t = `Ë32_to_ýu ( css -> h—d”_Ën ) * 4; 786  fœmw¬e_off£t < fœmw¬e_size ) { 787 ušt16_t Ýcode ; 788 ušt8_t dËn ; 790 Ýcode = `g‘_Ë16 ( fœmw¬e_d©a + fœmw¬e_off£t ); 791 dËn = fœmw¬e_d©a [ fœmw¬e_off£t + 2]; 793  Ýcode ) { 794  CMD_NO_OPERATION : 795  CMD_WRITE_BOOT_PARAMS : 796  CMD_MEMORY_WRITE : 799 `´štf ("UÃx³ùed opcod0x%02x\n", Ýcode ); 803 fœmw¬e_off£t +ð dËn + 3; 804 cmd_num ++; 807 `´štf ("Fœmw¬w™h %u commªds\n", cmd_num ); 809 dÚe : 810 `ä“ ( fœmw¬e_d©a ); 811 } } 813  $sigÇl_ÿÎback ( signum , * u£r_d©a ) 815  signum ) { 816  SIGINT : 817  SIGTERM : 818 `mašloÝ_qu™ (); 821 } } 823  $u§ge () 825 `´štf ("bluemoon - Bluemoon configuration utility\n" 827 `´štf ("\tbluemoon [options]\n"); 828 `´štf ("Options:\n" 835 } } 837 cÚ¡  ÝtiÚ gmaš_ÝtiÚs [] = { 838 { "bdaddr", ÝtiÚ®_¬gum’t , NULL , 'A' }, 839 { "bdd©a", no_¬gum’t , NULL , 'D' }, 840 { "fœmw¬e", ÝtiÚ®_¬gum’t , NULL , 'F' }, 841 { "check", »quœed_¬gum’t , NULL , 'C' }, 842 { "Œaûs", no_¬gum’t , NULL , 'T' }, 843 { "»£t", no_¬gum’t , NULL , 'R' }, 844 { "šdex", »quœed_¬gum’t , NULL , 'i' }, 845 { "v”siÚ", no_¬gum’t , NULL , 'v' }, 846 { "h–p", no_¬gum’t , NULL , 'h' }, 850  $maš ( ¬gc , * ¬gv []) 852 cÚ¡ * ¡r ; 853 sig£t_t mask ; 854  ex™_¡©us ; 857  Ýt ; 859 Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "A::DF::C:TRi:vh", 860 maš_ÝtiÚs , NULL ); 861 ià( Ýt < 0) 864  Ýt ) { 866 ià( Ýrg ) 867 £t_bdaddr_v®ue = Ýrg ; 868 £t_bdaddr = Œue ; 871 u£_mªuçùu»r_mode = Œue ; 872 g‘_bdd©a = Œue ; 875 u£_mªuçùu»r_mode = Œue ; 876 ià( Ýrg ) 877 lßd_fœmw¬e_v®ue = Ýrg ; 878 lßd_fœmw¬e = Œue ; 881 check_fœmw¬e_v®ue = Ýrg ; 882 check_fœmw¬e = Œue ; 885 u£_mªuçùu»r_mode = Œue ; 886 £t_Œaûs = Œue ; 889 »£t_Ú_ex™ = Œue ; 892 ià( `¡¾’ ( Ýrg è> 3 && ! `¡ºcmp (optarg, "hci", 3)) 893 ¡r = Ýrg + 3; 895 ¡r = Ýrg ; 896 ià(! `isdig™ (* ¡r )) { 897 `u§ge (); 898  EXIT_FAILURE ; 900 hci_šdex = `©oi ( ¡r ); 903 `´štf ("%s\n", VERSION ); 904  EXIT_SUCCESS ; 906 `u§ge (); 907  EXIT_SUCCESS ; 909  EXIT_FAILURE ; 913 ià( ¬gc - Ýtšd > 0) { 914 `årštf ( ¡d”r , "Invalid command†ine…arameters\n"); 915  EXIT_FAILURE ; 918 `mašloÝ_š™ (); 920 `sigem±y£t (& mask ); 921 `sigadd£t (& mask , SIGINT ); 922 `sigadd£t (& mask , SIGTERM ); 924 `mašloÝ_£t_sigÇl (& mask , sigÇl_ÿÎback , NULL , NULL); 926 `´štf ("BluemoÚ cÚfigu¿tiÚ utž™y v” %s\n", VERSION ); 928 ià( check_fœmw¬e ) { 929 `ª®yze_fœmw¬e ( check_fœmw¬e_v®ue ); 930  EXIT_SUCCESS ; 933 hci_dev = `bt_hci_Ãw_u£r_chªÃl ( hci_šdex ); 934 ià(! hci_dev ) { 935 `årštf ( ¡d”r , "Failedo open HCI user channel\n"); 936  EXIT_FAILURE ; 939 `bt_hci_£nd ( hci_dev , CMD_READ_VERSION , NULL , 0, 940 »ad_v”siÚ_com¶‘e , NULL , NULL); 942 ex™_¡©us = `mašloÝ_run (); 944 `bt_hci_uÄef ( hci_dev ); 946  ex™_¡©us ; 947 } } @tools/bluetooth-player.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡dboÞ.h > 30  ~<”ºo.h > 31  ~ 32  ~<¡dlib.h > 33  ~ 34  ~ 36  ~<»adlše/»adlše.h > 37  ~<»adlše/hi¡Üy.h > 38  ~ 39  ~ 41  ~<þ›Á/di¥Ïy.h > 44  #COLORED_NEW COLOR_GREEN "NEW" COLOR_OFF ) 45  #COLORED_CHG COLOR_YELLOW "CHG" COLOR_OFF ) 46  #COLORED_DEL COLOR_RED "DEL" COLOR_OFF ) 48  #PROMPT_ON COLOR_BLUE "[blu‘oÙh]" COLOR_OFF "# " ) 49  #PROMPT_OFF "[blu‘oÙh]# " ) 51  #BLUEZ_MEDIA_PLAYER_INTERFACE "Üg.bluez.MedŸPÏy”1" ) 52  #BLUEZ_MEDIA_FOLDER_INTERFACE "Üg.bluez.MedŸFÞd”1" ) 53  #BLUEZ_MEDIA_ITEM_INTERFACE "Üg.bluez.MedŸI‹m1" ) 55  GMašLoÝ * gmaš_loÝ ; 56  DBusCÚÃùiÚ * gdbus_cÚn ; 57  GDBusProxy * gdeçuÉ_¶ay” ; 58  GSLi¡ * g¶ay”s = NULL ; 59  GSLi¡ * gfÞd”s = NULL ; 60  GSLi¡ * g™ems = NULL ; 62  $cÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 64 `¾_£t_´om± ( PROMPT_ON ); 65 `´štf ("\r"); 66 `¾_Ú_Ãw_lše (); 67 `¾_»di¥Ïy (); 68 } } 70  $discÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 72 `¾_£t_´om± ( PROMPT_OFF ); 73 `´štf ("\r"); 74 `¾_Ú_Ãw_lše (); 75 `¾_»di¥Ïy (); 76 } } 78  $cmd_qu™ ( ¬gc , * ¬gv []) 80 `g_maš_loÝ_qu™ ( maš_loÝ ); 81 } } 83  boÞ $check_deçuÉ_¶ay” () 85 ià(! deçuÉ_¶ay” ) { 86 `¾_´štf ("No default…layer‡vailable\n"); 87  FALSE ; 90  TRUE ; 91 } } 93  $¶ay_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 95 DBusE¼Ü ”rÜ ; 97 `dbus_”rÜ_š™ (& ”rÜ ); 99 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 100 `¾_´štf ("Fažedضay: %s\n", ”rÜ . Çme ); 101 `dbus_”rÜ_ä“ (& ”rÜ ); 105 `¾_´štf ("Play successful\n"); 106 } } 108  GDBusProxy * $fšd_™em (cÚ¡ * ·th ) 110 GSLi¡ * l ; 112  l = ™ems ;†;† = `g_¦i¡_Ãxt (l)) { 113 GDBusProxy * ´oxy = l -> d©a ; 115 ià( `¡rcmp ( ·th , `g_dbus_´oxy_g‘_·th ( ´oxy )) == 0) 116  ´oxy ; 119  NULL ; 120 } } 122  $cmd_¶ay_™em ( ¬gc , * ¬gv []) 124 GDBusProxy * ´oxy ; 126 ´oxy = `fšd_™em ( ¬gv [1]); 127 ià( ´oxy =ð NULL ) { 128 `¾_´štf ("I‹m % nÙ‡važabË\n", ¬gv [1]); 132 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "PÏy", NULL , ¶ay_»¶y , 133 NULL , NULLè=ð FALSE ) { 134 `¾_´štf ("Failedo…lay\n"); 138 `¾_´štf ("A‰em±šgضay %s\n", ¬gv [1]); 139 } } 141  $cmd_¶ay ( ¬gc , * ¬gv []) 143 ià( ¬gc > 1) 144  `cmd_¶ay_™em ( ¬gc , ¬gv ); 146 ià(! `check_deçuÉ_¶ay” ()) 149 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( deçuÉ_¶ay” , "PÏy", NULL , ¶ay_»¶y , 150 NULL , NULLè=ð FALSE ) { 151 `¾_´štf ("Failedo…lay\n"); 155 `¾_´štf ("Attemptingo…lay\n"); 156 } } 158  $·u£_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 160 DBusE¼Ü ”rÜ ; 162 `dbus_”rÜ_š™ (& ”rÜ ); 164 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 165 `¾_´štf ("FažedØ·u£: %s\n", ”rÜ . Çme ); 166 `dbus_”rÜ_ä“ (& ”rÜ ); 170 `¾_´štf ("Pause successful\n"); 171 } } 173  $cmd_·u£ ( ¬gc , * ¬gv []) 175 ià(! `check_deçuÉ_¶ay” ()) 178 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( deçuÉ_¶ay” , "Pau£", NULL , 179 ·u£_»¶y , NULL , NULLè=ð FALSE ) { 180 `¾_´štf ("Failedo…lay\n"); 184 `¾_´štf ("Attemptingo…ause\n"); 185 } } 187  $¡Ý_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 189 DBusE¼Ü ”rÜ ; 191 `dbus_”rÜ_š™ (& ”rÜ ); 193 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 194 `¾_´štf ("FažedØ¡Ý: %s\n", ”rÜ . Çme ); 195 `dbus_”rÜ_ä“ (& ”rÜ ); 199 `¾_´štf ("Stop successful\n"); 200 } } 202  $cmd_¡Ý ( ¬gc , * ¬gv []) 204 ià(! `check_deçuÉ_¶ay” ()) 207 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( deçuÉ_¶ay” , "StÝ", NULL , ¡Ý_»¶y , 208 NULL , NULLè=ð FALSE ) { 209 `¾_´štf ("Failedo stop\n"); 213 `¾_´štf ("Attemptingo stop\n"); 214 } } 216  $Ãxt_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 218 DBusE¼Ü ”rÜ ; 220 `dbus_”rÜ_š™ (& ”rÜ ); 222 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 223 `¾_´štf ("FažedØjum°tØÃxt: %s\n", ”rÜ . Çme ); 224 `dbus_”rÜ_ä“ (& ”rÜ ); 228 `¾_´štf ("Next successful\n"); 229 } } 231  $cmd_Ãxt ( ¬gc , * ¬gv []) 233 ià(! `check_deçuÉ_¶ay” ()) 236 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( deçuÉ_¶ay” , "Next", NULL , Ãxt_»¶y , 237 NULL , NULLè=ð FALSE ) { 238 `¾_´štf ("Failedo jumpo‚ext\n"); 242 `¾_´štf ("Attemptingo jumpo‚ext\n"); 243 } } 245  $´evious_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 247 DBusE¼Ü ”rÜ ; 249 `dbus_”rÜ_š™ (& ”rÜ ); 251 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 252 `¾_´štf ("FažedØjum°tØ´evious: %s\n", ”rÜ . Çme ); 253 `dbus_”rÜ_ä“ (& ”rÜ ); 257 `¾_´štf ("Previous successful\n"); 258 } } 260  $cmd_´evious ( ¬gc , * ¬gv []) 262 ià(! `check_deçuÉ_¶ay” ()) 265 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( deçuÉ_¶ay” , "P»vious", NULL , 266 ´evious_»¶y , NULL , NULLè=ð FALSE ) { 267 `¾_´štf ("Failedo jumpo…revious\n"); 271 `¾_´štf ("Attemptingo jumpo…revious\n"); 272 } } 274  $ç¡_fÜw¬d_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 276 DBusE¼Ü ”rÜ ; 278 `dbus_”rÜ_š™ (& ”rÜ ); 280 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 281 `¾_´štf ("FažedØç¡ fÜw¬d: %s\n", ”rÜ . Çme ); 282 `dbus_”rÜ_ä“ (& ”rÜ ); 286 `¾_´štf ("FastForward successful\n"); 287 } } 289  $cmd_ç¡_fÜw¬d ( ¬gc , * ¬gv []) 291 ià(! `check_deçuÉ_¶ay” ()) 294 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( deçuÉ_¶ay” , "Fa¡FÜw¬d", NULL , 295 ç¡_fÜw¬d_»¶y , NULL , NULLè=ð FALSE ) { 296 `¾_´štf ("Failedo jumpo…revious\n"); 300 `¾_´štf ("Fast forward…layback\n"); 301 } } 303  $»wšd_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 305 DBusE¼Ü ”rÜ ; 307 `dbus_”rÜ_š™ (& ”rÜ ); 309 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 310 `¾_´štf ("FažedØ»wšd: %s\n", ”rÜ . Çme ); 311 `dbus_”rÜ_ä“ (& ”rÜ ); 315 `¾_´štf ("Rewind successful\n"); 316 } } 318  $cmd_»wšd ( ¬gc , * ¬gv []) 320 ià(! `check_deçuÉ_¶ay” ()) 323 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( deçuÉ_¶ay” , "Rewšd", NULL , 324 »wšd_»¶y , NULL , NULLè=ð FALSE ) { 325 `¾_´štf ("Failedo„ewind\n"); 329 `¾_´štf ("Rewind…layback\n"); 330 } } 332  $g’”ic_ÿÎback (cÚ¡ DBusE¼Ü * ”rÜ , * u£r_d©a ) 334 * ¡r = u£r_d©a ; 336 ià( `dbus_”rÜ_is_£t ( ”rÜ )) 337 `¾_´štf ("FažedØ£ˆ%s: %s\n", ¡r , ”rÜ -> Çme ); 339 `¾_´štf ("Chªgšg % sucûeded\n", ¡r ); 340 } } 342  $cmd_equ®iz” ( ¬gc , * ¬gv []) 344 * v®ue ; 345 DBusMes§geI‹r ™” ; 347 ià(! `check_deçuÉ_¶ay” ()) 350 ià( ¬gc < 2) { 351 `¾_´štf ("Missing on/off‡rgument\n"); 355 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( deçuÉ_¶ay” , "Equ®iz”", & ™” )) { 356 `¾_´štf ("Operation‚ot supported\n"); 360 v®ue = `g_¡rdup ( ¬gv [1]); 362 ià( `g_dbus_´oxy_£t_´Ý”ty_basic ( deçuÉ_¶ay” , "Equalizer", 363 DBUS_TYPE_STRING , & v®ue , 364 g’”ic_ÿÎback , v®ue , 365 g_ä“ è=ð FALSE ) { 366 `¾_´štf ("Failedo settingƒqualizer\n"); 367 `g_ä“ ( v®ue ); 371 `¾_´štf ("Attemptingo setƒqualizer\n"); 372 } } 374  $cmd_»³© ( ¬gc , * ¬gv []) 376 * v®ue ; 377 DBusMes§geI‹r ™” ; 379 ià(! `check_deçuÉ_¶ay” ()) 382 ià( ¬gc < 2) { 383 `¾_´štf ("Missing mode‡rgument\n"); 387 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( deçuÉ_¶ay” , "R•—t", & ™” )) { 388 `¾_´štf ("Operation‚ot supported\n"); 392 v®ue = `g_¡rdup ( ¬gv [1]); 394 ià( `g_dbus_´oxy_£t_´Ý”ty_basic ( deçuÉ_¶ay” , "Repeat", 395 DBUS_TYPE_STRING , & v®ue , 396 g’”ic_ÿÎback , v®ue , 397 g_ä“ è=ð FALSE ) { 398 `¾_´štf ("Failedo set„epeat\n"); 399 `g_ä“ ( v®ue ); 403 `¾_´štf ("Attemptingo set„epeat\n"); 404 } } 406  $cmd_shufæe ( ¬gc , * ¬gv []) 408 * v®ue ; 409 DBusMes§geI‹r ™” ; 411 ià(! `check_deçuÉ_¶ay” ()) 414 ià( ¬gc < 2) { 415 `¾_´štf ("Missing mode‡rgument\n"); 419 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( deçuÉ_¶ay” , "Shufæe", & ™” )) { 420 `¾_´štf ("Operation‚ot supported\n"); 424 v®ue = `g_¡rdup ( ¬gv [1]); 426 ià( `g_dbus_´oxy_£t_´Ý”ty_basic ( deçuÉ_¶ay” , "Shuffle", 427 DBUS_TYPE_STRING , & v®ue , 428 g’”ic_ÿÎback , v®ue , 429 g_ä“ è=ð FALSE ) { 430 `¾_´štf ("Failedo set shuffle\n"); 431 `g_ä“ ( v®ue ); 435 `¾_´štf ("Attemptingo set shuffle\n"); 436 } } 438  $cmd_sÿn ( ¬gc , * ¬gv []) 440 * v®ue ; 441 DBusMes§geI‹r ™” ; 443 ià(! `check_deçuÉ_¶ay” ()) 446 ià( ¬gc < 2) { 447 `¾_´štf ("Missing mode‡rgument\n"); 451 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( deçuÉ_¶ay” , "Shufæe", & ™” )) { 452 `¾_´štf ("Operation‚ot supported\n"); 456 v®ue = `g_¡rdup ( ¬gv [1]); 458 ià( `g_dbus_´oxy_£t_´Ý”ty_basic ( deçuÉ_¶ay” , "Shuffle", 459 DBUS_TYPE_STRING , & v®ue , 460 g’”ic_ÿÎback , v®ue , 461 g_ä“ è=ð FALSE ) { 462 `¾_´štf ("Failedo set scan\n"); 463 `g_ä“ ( v®ue ); 467 `¾_´štf ("Attemptingo set scan\n"); 468 } } 470 * $´oxy_desütiÚ ( GDBusProxy * ´oxy , cÚ¡ * t™Ë , 471 cÚ¡ * desütiÚ ) 473 cÚ¡ * ·th ; 475 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 477  `g_¡rdup_´štf ("%s%s%s%s %s ", 478 desütiÚ ? "[" : "", 479 desütiÚ ? : "", 480 desütiÚ ? "] " : "", 481 t™Ë , ·th ); 482 } } 484  $´št_¶ay” ( GDBusProxy * ´oxy , cÚ¡ * desütiÚ ) 486 * ¡r ; 488 ¡r = `´oxy_desütiÚ ( ´oxy , "PÏy”", desütiÚ ); 490 `¾_´štf ("%s%s\n", ¡r , deçuÉ_¶ay” =ð ´oxy ? "[default]" : ""); 492 `g_ä“ ( ¡r ); 493 } } 495  $cmd_li¡ ( ¬gc , * ¬g []) 497 GSLi¡ * l ; 499  l = ¶ay”s ;†;† = `g_¦i¡_Ãxt (l)) { 500 GDBusProxy * ´oxy = l -> d©a ; 501 `´št_¶ay” ( ´oxy , NULL ); 503 } } 505  GDBusProxy * $fšd_¶ay” (cÚ¡ * ·th ) 507 GSLi¡ * l ; 509  l = ¶ay”s ;†;† = `g_¦i¡_Ãxt (l)) { 510 GDBusProxy * ´oxy = l -> d©a ; 512 ià( `¡rcmp ( ·th , `g_dbus_´oxy_g‘_·th ( ´oxy )) == 0) 513  ´oxy ; 516  NULL ; 517 } } 519  $´št_™” (cÚ¡ * Ïb– , cÚ¡ * Çme , 520 DBusMes§geI‹r * ™” ) 522 dbus_boÞ_t v®boÞ ; 523 dbus_ušt32_t v®u32 ; 524 dbus_ušt16_t v®u16 ; 525 dbus_št16_t v®s16 ; 526 cÚ¡ * v®¡r ; 527 DBusMes§geI‹r sub™” ; 529 ià( ™” =ð NULL ) { 530 `¾_´štf ("%s% i nž\n", Ïb– , Çme ); 534  `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” )) { 535  DBUS_TYPE_INVALID : 536 `¾_´štf ("%s% i šv®id\n", Ïb– , Çme ); 538  DBUS_TYPE_STRING : 539  DBUS_TYPE_OBJECT_PATH : 540 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®¡r ); 541 `¾_´štf ("%s%s: %s\n", Ïb– , Çme , v®¡r ); 543  DBUS_TYPE_BOOLEAN : 544 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®boÞ ); 545 `¾_´štf ("%s%s: %s\n", Ïb– , Çme , 546 v®boÞ =ð TRUE ? "yes" : "no"); 548  DBUS_TYPE_UINT32 : 549 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®u32 ); 550 `¾_´štf ("%s%s: 0x%06x\n", Ïb– , Çme , v®u32 ); 552  DBUS_TYPE_UINT16 : 553 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®u16 ); 554 `¾_´štf ("%s%s: 0x%04x\n", Ïb– , Çme , v®u16 ); 556  DBUS_TYPE_INT16 : 557 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®s16 ); 558 `¾_´štf ("%s%s: %d\n", Ïb– , Çme , v®s16 ); 560  DBUS_TYPE_VARIANT : 561 `dbus_mes§ge_™”_»cur£ ( ™” , & sub™” ); 562 `´št_™” ( Ïb– , Çme , & sub™” ); 564  DBUS_TYPE_ARRAY : 565 `dbus_mes§ge_™”_»cur£ ( ™” , & sub™” ); 566  `dbus_mes§ge_™”_g‘_¬g_ty³ (& sub™” ) != 567 DBUS_TYPE_INVALID ) { 568 `´št_™” ( Ïb– , Çme , & sub™” ); 569 `dbus_mes§ge_™”_Ãxt (& sub™” ); 572  DBUS_TYPE_DICT_ENTRY : 573 `dbus_mes§ge_™”_»cur£ ( ™” , & sub™” ); 574 `dbus_mes§ge_™”_g‘_basic (& sub™” , & v®¡r ); 575 `dbus_mes§ge_™”_Ãxt (& sub™” ); 576 `´št_™” ( Ïb– , v®¡r , & sub™” ); 579 `¾_´štf ("%s% ha unsuµÜ‹dy³\n", Ïb– , Çme ); 582 } } 584  $´št_´Ý”ty ( GDBusProxy * ´oxy , cÚ¡ * Çme ) 586 DBusMes§geI‹r ™” ; 588 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , Çme , & ™” è=ð FALSE ) 591 `´št_™” ("\t", Çme , & ™” ); 592 } } 594  GDBusProxy * $fšd_fÞd” (cÚ¡ * ·th ) 596 GSLi¡ * l ; 598  l = fÞd”s ;†;† = `g_¦i¡_Ãxt (l)) { 599 GDBusProxy * ´oxy = l -> d©a ; 601 ià( `¡rcmp ( ·th , `g_dbus_´oxy_g‘_·th ( ´oxy )) == 0) 602  ´oxy ; 605  NULL ; 606 } } 608  $cmd_show_™em ( ¬gc , * ¬gv []) 610 GDBusProxy * ´oxy ; 612 ià( ¬gc < 2) { 613 `¾_´štf ("Missing item‡ddress‡rgument\n"); 617 ´oxy = `fšd_™em ( ¬gv [1]); 618 ià(! ´oxy ) { 619 `¾_´štf ("I‹m % nÙ‡važabË\n", ¬gv [1]); 623 `¾_´štf ("I‹m %s\n", `g_dbus_´oxy_g‘_·th ( ´oxy )); 625 `´št_´Ý”ty ( ´oxy , "Player"); 626 `´št_´Ý”ty ( ´oxy , "Name"); 627 `´št_´Ý”ty ( ´oxy , "Type"); 628 `´št_´Ý”ty ( ´oxy , "FolderType"); 629 `´št_´Ý”ty ( ´oxy , "Playable"); 630 `´št_´Ý”ty ( ´oxy , "Metadata"); 631 } } 633  $cmd_show ( ¬gc , * ¬gv []) 635 GDBusProxy * ´oxy ; 636 GDBusProxy * fÞd” ; 637 GDBusProxy * ™em ; 638 DBusMes§geI‹r ™” ; 639 cÚ¡ * ·th ; 641 ià( ¬gc < 2) { 642 ià( `check_deçuÉ_¶ay” (è=ð FALSE ) 645 ´oxy = deçuÉ_¶ay” ; 647 ´oxy = `fšd_¶ay” ( ¬gv [1]); 648 ià(! ´oxy ) { 649 `¾_´štf ("PÏy” % nÙ‡važabË\n", ¬gv [1]); 654 `¾_´štf ("PÏy” %s\n", `g_dbus_´oxy_g‘_·th ( ´oxy )); 656 `´št_´Ý”ty ( ´oxy , "Name"); 657 `´št_´Ý”ty ( ´oxy , "Repeat"); 658 `´št_´Ý”ty ( ´oxy , "Equalizer"); 659 `´št_´Ý”ty ( ´oxy , "Shuffle"); 660 `´št_´Ý”ty ( ´oxy , "Scan"); 661 `´št_´Ý”ty ( ´oxy , "Status"); 662 `´št_´Ý”ty ( ´oxy , "Position"); 663 `´št_´Ý”ty ( ´oxy , "Track"); 665 fÞd” = `fšd_fÞd” ( `g_dbus_´oxy_g‘_·th ( ´oxy )); 666 ià( fÞd” =ð NULL ) 669 `¾_´štf ("FÞd” %s\n", `g_dbus_´oxy_g‘_·th ( ´oxy )); 671 `´št_´Ý”ty ( fÞd” , "Name"); 672 `´št_´Ý”ty ( fÞd” , "NumberOfItems"); 674 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "PÏyli¡", & ™” )) 677 `dbus_mes§ge_™”_g‘_basic (& ™” , & ·th ); 679 ™em = `fšd_™em ( ·th ); 680 ià( ™em =ð NULL ) 683 `¾_´štf ("PÏyli¡ %s\n", ·th ); 685 `´št_´Ý”ty ( ™em , "Name"); 686 } } 688  $cmd_£Ëù ( ¬gc , * ¬gv []) 690 GDBusProxy * ´oxy ; 692 ià( ¬gc < 2) { 693 `¾_´štf ("Missing…layer‡ddress‡rgument\n"); 697 ´oxy = `fšd_¶ay” ( ¬gv [1]); 698 ià( ´oxy =ð NULL ) { 699 `¾_´štf ("PÏy” % nÙ‡važabË\n", ¬gv [1]); 703 ià( deçuÉ_¶ay” =ð ´oxy ) 706 deçuÉ_¶ay” = ´oxy , 707 `´št_¶ay” ( ´oxy , NULL ); 708 } } 710  $chªge_fÞd”_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 712 DBusE¼Ü ”rÜ ; 714 `dbus_”rÜ_š™ (& ”rÜ ); 716 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 717 `¾_´štf ("FažedØchªgfÞd”: %s\n", ”rÜ . Çme ); 718 `dbus_”rÜ_ä“ (& ”rÜ ); 722 `¾_´štf ("ChangeFolder successful\n"); 723 } } 725  $chªge_fÞd”_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 727 cÚ¡ * ·th = u£r_d©a ; 729 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 730 } } 732  $cmd_chªge_fÞd” ( ¬gc , * ¬gv []) 734 GDBusProxy * ´oxy ; 736 ià( ¬gc < 2) { 737 `¾_´štf ("Missing item‡rgument\n"); 741 ià( `dbus_v®id©e_·th ( ¬gv [1], NULL è=ð FALSE ) { 742 `¾_´štf ("Not‡ valid…ath\n"); 746 ià( `check_deçuÉ_¶ay” (è=ð FALSE ) 749 ´oxy = `fšd_fÞd” ( `g_dbus_´oxy_g‘_·th ( deçuÉ_¶ay” )); 750 ià( ´oxy =ð NULL ) { 751 `¾_´štf ("Operation‚ot supported\n"); 755 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "ChªgeFÞd”", chªge_fÞd”_£tup , 756 chªge_fÞd”_»¶y , ¬gv [1], NULL è=ð FALSE ) { 757 `¾_´štf ("Failedo change current folder\n"); 761 `¾_´štf ("Attemptingo change folder\n"); 762 } } 764  $­³nd_v¬ŸÁ ( DBusMes§geI‹r * ™” ,  ty³ , * v® ) 766 DBusMes§geI‹r v®ue ; 767  sig [2] = { ty³ , '\0' }; 769 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_VARIANT , sig , & v®ue ); 771 `dbus_mes§ge_™”_­³nd_basic (& v®ue , ty³ , v® ); 773 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v®ue ); 774 } } 776  $diù_­³nd_’Œy ( DBusMes§geI‹r * diù , 777 cÚ¡ * key ,  ty³ , * v® ) 779 DBusMes§geI‹r ’Œy ; 781 ià( ty³ =ð DBUS_TYPE_STRING ) { 782 cÚ¡ * ¡r = *((cÚ¡ **è v® ); 783 ià( ¡r =ð NULL ) 787 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , 788 NULL , & ’Œy ); 790 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & key ); 792 `­³nd_v¬ŸÁ (& ’Œy , ty³ , v® ); 794 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & ’Œy ); 795 } } 797  sli¡_™ems_¬gs { 798  m¡¬t ; 799  m’d ; 802  $li¡_™ems_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 804  li¡_™ems_¬gs * ¬gs = u£r_d©a ; 805 DBusMes§geI‹r diù ; 807 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 808 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 809 DBUS_TYPE_STRING_AS_STRING 810 DBUS_TYPE_VARIANT_AS_STRING 811 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 812 & diù ); 814 ià( ¬gs -> ¡¬t < 0) 815  dÚe ; 817 `diù_­³nd_’Œy (& diù , "S¹", DBUS_TYPE_UINT32 , & ¬gs -> ¡¬t ); 819 ià( ¬gs -> ’d < 0) 820  dÚe ; 822 `diù_­³nd_’Œy (& diù , "End", DBUS_TYPE_UINT32 , & ¬gs -> ’d ); 824 dÚe : 825 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 826 } } 828  $li¡_™ems_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 830 DBusE¼Ü ”rÜ ; 832 `dbus_”rÜ_š™ (& ”rÜ ); 834 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 835 `¾_´štf ("FažedØli¡ i‹ms: %s\n", ”rÜ . Çme ); 836 `dbus_”rÜ_ä“ (& ”rÜ ); 840 `¾_´štf ("ListItems successful\n"); 841 } } 843  $cmd_li¡_™ems ( ¬gc , * ¬gv []) 845 GDBusProxy * ´oxy ; 846  li¡_™ems_¬gs * ¬gs ; 848 ià( `check_deçuÉ_¶ay” (è=ð FALSE ) 851 ´oxy = `fšd_fÞd” ( `g_dbus_´oxy_g‘_·th ( deçuÉ_¶ay” )); 852 ià( ´oxy =ð NULL ) { 853 `¾_´štf ("Operation‚ot supported\n"); 857 ¬gs = `g_Ãw0 ( li¡_™ems_¬gs , 1); 858 ¬gs -> ¡¬t = -1; 859 ¬gs -> ’d = -1; 861 ià( ¬gc < 2) 862  dÚe ; 864 ”ºo = 0; 865 ¬gs -> ¡¬t = `¡¹Þ ( ¬gv [1], NULL , 10); 866 ià( ”ºo != 0) { 867 `¾_´štf ("%s(%d)\n", `¡»¼Ü ( ”ºo ),ƒrrno); 868 `g_ä“ ( ¬gs ); 872 ià( ¬gc < 3) 873  dÚe ; 875 ”ºo = 0; 876 ¬gs -> ’d = `¡¹Þ ( ¬gv [2], NULL , 10); 877 ià( ”ºo != 0) { 878 `¾_´štf ("%s(%d)\n", `¡»¼Ü ( ”ºo ),ƒrrno); 879 `g_ä“ ( ¬gs ); 883 dÚe : 884 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "Li¡I‹ms", li¡_™ems_£tup , 885 li¡_™ems_»¶y , ¬gs , g_ä“ è=ð FALSE ) { 886 `¾_´štf ("Failedo change current folder\n"); 887 `g_ä“ ( ¬gs ); 891 `¾_´štf ("Attemptingo†ist items\n"); 892 } } 894  $£¬ch_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 896 * ¡ršg = u£r_d©a ; 897 DBusMes§geI‹r diù ; 899 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¡ršg ); 901 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 902 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 903 DBUS_TYPE_STRING_AS_STRING 904 DBUS_TYPE_VARIANT_AS_STRING 905 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 906 & diù ); 908 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 909 } } 911  $£¬ch_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 913 DBusE¼Ü ”rÜ ; 915 `dbus_”rÜ_š™ (& ”rÜ ); 917 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 918 `¾_´štf ("FažedØ£¬ch: %s\n", ”rÜ . Çme ); 919 `dbus_”rÜ_ä“ (& ”rÜ ); 923 `¾_´štf ("Search successful\n"); 924 } } 926  $cmd_£¬ch ( ¬gc , * ¬gv []) 928 GDBusProxy * ´oxy ; 929 * ¡ršg ; 931 ià( ¬gc < 2) { 932 `¾_´štf ("Missing string‡rgument\n"); 936 ià( `check_deçuÉ_¶ay” (è=ð FALSE ) 939 ´oxy = `fšd_fÞd” ( `g_dbus_´oxy_g‘_·th ( deçuÉ_¶ay” )); 940 ià( ´oxy =ð NULL ) { 941 `¾_´štf ("Operation‚ot supported\n"); 945 ¡ršg = `g_¡rdup ( ¬gv [1]); 947 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "S—rch", £¬ch_£tup , 948 £¬ch_»¶y , ¡ršg , g_ä“ è=ð FALSE ) { 949 `¾_´štf ("Failedo search\n"); 950 `g_ä“ ( ¡ršg ); 954 `¾_´štf ("Attemptingo search\n"); 955 } } 957  $add_to_now¶ayšg_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 959 DBusE¼Ü ”rÜ ; 961 `dbus_”rÜ_š™ (& ”rÜ ); 963 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 964 `¾_´štf ("FažedØqueue: %s\n", ”rÜ . Çme ); 965 `dbus_”rÜ_ä“ (& ”rÜ ); 969 `¾_´štf ("AddToNowPlaying successful\n"); 970 } } 972  $cmd_queue ( ¬gc , * ¬gv []) 974 GDBusProxy * ´oxy ; 976 ià( ¬gc < 2) { 977 `¾_´štf ("Missing item‡ddress‡rgument\n"); 981 ´oxy = `fšd_™em ( ¬gv [1]); 982 ià( ´oxy =ð NULL ) { 983 `¾_´štf ("I‹m % nÙ‡važabË\n", ¬gv [1]); 987 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "AddtoNowPÏyšg", NULL , 988 add_to_now¶ayšg_»¶y , NULL , 989 NULL è=ð FALSE ) { 990 `¾_´štf ("Failedo…lay\n"); 994 `¾_´štf ("A‰em±šgØqueu%s\n", ¬gv [1]); 995 } } 998 cÚ¡ * mcmd ; 999 cÚ¡ * m¬g ; 1000 (* mfunc è( m¬gc , * m¬gv []); 1001 cÚ¡ * mdesc ; 1002 } gcmd_bË [] = { 1003 { "li¡", NULL , cmd_li¡ , "List‡vailable…layers" }, 1004 { "show", "[¶ay”]", cmd_show , "Player information" }, 1005 { "£Ëù", "<¶ay”>", cmd_£Ëù , "Select default…layer" }, 1006 { "¶ay", "[™em]", cmd_¶ay , "Start…layback" }, 1007 { "·u£", NULL , cmd_·u£ , "Pause…layback" }, 1008 { "¡Ý", NULL , cmd_¡Ý , "Stop…layback" }, 1009 { "Ãxt", NULL , cmd_Ãxt , "Jumpo‚ext item" }, 1010 { "´evious", NULL , cmd_´evious , "Jumpo…revious item" }, 1011 { "ç¡-fÜw¬d", NULL , cmd_ç¡_fÜw¬d , 1013 { "»wšd", NULL , cmd_»wšd , "Rewind…layback" }, 1014 { "equ®iz”", "<Ú/off>", cmd_equ®iz” , 1016 { "»³©", "", cmd_»³© , 1018 { "shufæe", "<®É¿cks/group/off>", cmd_shufæe , 1020 { "sÿn", "<®É¿cks/group/off>", cmd_sÿn , 1022 { "chªge-fÞd”", "<™em>", cmd_chªge_fÞd” , 1024 { "li¡-™ems", "[¡¬t] [’d]", cmd_li¡_™ems , 1026 { "£¬ch", "¡ršg", cmd_£¬ch , 1028 { "queue", "<™em>", cmd_queue , "Add itemo…laylist queue" }, 1029 { "show-™em", "<™em>", cmd_show_™em , "Show item information" }, 1030 { "qu™", NULL , cmd_qu™ , "Quit…rogram" }, 1031 { "ex™", NULL , cmd_qu™ }, 1036 * $cmd_g’”©Ü (cÚ¡ * ‹xt ,  ¡©e ) 1038  šdex , Ën ; 1039 cÚ¡ * cmd ; 1041 ià(! ¡©e ) { 1042 šdex = 0; 1043 Ën = `¡¾’ ( ‹xt ); 1046 ( cmd = cmd_bË [ šdex ].cmd)) { 1047 šdex ++; 1049 ià(! `¡ºcmp ( cmd , ‹xt , Ën )) 1050  `¡rdup ( cmd ); 1053  NULL ; 1054 } } 1056 ** $cmd_com¶‘iÚ (cÚ¡ * ‹xt ,  ¡¬t ,  ’d ) 1058 ** m©ches = NULL ; 1060 ià( ¡¬t == 0) { 1061 ¾_com¶‘iÚ_di¥Ïy_m©ches_hook = NULL ; 1062 m©ches = `¾_com¶‘iÚ_m©ches ( ‹xt , cmd_g’”©Ü ); 1065 ià(! m©ches ) 1066 ¾_©‹m±ed_com¶‘iÚ_ov” = 1; 1068  m©ches ; 1069 } } 1071  $¾_hªdËr (* šput ) 1073  ¬gc ; 1074 ** ¬gv = NULL ; 1075  i ; 1077 ià(! šput ) { 1078 `¾_š£¹_‹xt ("quit"); 1079 `¾_»di¥Ïy (); 1080 `¾_ülf (); 1081 `g_maš_loÝ_qu™ ( maš_loÝ ); 1085 ià(! `¡¾’ ( šput )) 1086  dÚe ; 1088 `g_¡r¡r ( šput ); 1089 `add_hi¡Üy ( šput ); 1091 ¬gv = `g_¡r¥l™ ( šput , " ", -1); 1092 ià( ¬gv =ð NULL ) 1093  dÚe ; 1095  ¬gc = 0; ¬gv [argc];) 1096 ¬gc ++; 1098 ià( ¬gc == 0) 1099  dÚe ; 1101  i = 0; cmd_bË [i]. cmd ; i++) { 1102 ià( `¡rcmp ( ¬gv [0], cmd_bË [ i ]. cmd )) 1105 ià( cmd_bË [ i ]. func ) { 1106 cmd_bË [ i ]. `func ( ¬gc , ¬gv ); 1107  dÚe ; 1111 ià( `¡rcmp ( ¬gv [0], "help")) { 1112 `´štf ("Invalid command\n"); 1113  dÚe ; 1116 `´štf ("Available commands:\n"); 1118  i = 0; cmd_bË [i]. cmd ; i++) { 1119 ià( cmd_bË [ i ]. desc ) 1120 `´štf ("\t% %s\t%s\n", cmd_bË [ i ]. cmd , 1121 cmd_bË [ i ]. ¬g ? : " ", 1122 cmd_bË [ i ]. desc ); 1125 dÚe : 1126 `g_¡rä“v ( ¬gv ); 1127 `ä“ ( šput ); 1128 } } 1130  gboÞ—n gÝtiÚ_v”siÚ = FALSE ; 1132  GO±iÚEÁry gÝtiÚs [] = { 1133 { "v”siÚ", 'v', 0, G_OPTION_ARG_NONE , & ÝtiÚ_v”siÚ , 1135 { NULL }, 1138  gboÞ—n $sigÇl_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd™iÚ , 1139 gpoš‹r u£r_d©a ) 1141  __‹rmš©ed = 0; 1142  sigÇlfd_sigšfo si ; 1143 ssize_t »suÉ ; 1144  fd ; 1146 ià( cÚd™iÚ & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 1147 `g_maš_loÝ_qu™ ( maš_loÝ ); 1148  FALSE ; 1151 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 1153 »suÉ = `»ad ( fd , & si , (si)); 1154 ià( »suÉ !ð( si )) 1155  FALSE ; 1157  si . ssi_signo ) { 1158  SIGINT : 1159 `¾_»¶aû_lše ("", 0); 1160 `¾_ülf (); 1161 `¾_Ú_Ãw_lše (); 1162 `¾_»di¥Ïy (); 1164  SIGTERM : 1165 ià( __‹rmš©ed == 0) { 1166 `¾_»¶aû_lše ("", 0); 1167 `¾_ülf (); 1168 `g_maš_loÝ_qu™ ( maš_loÝ ); 1171 __‹rmš©ed = 1; 1175  TRUE ; 1176 } } 1178  gušt $£tup_sigÇlfd () 1180 GIOChªÃl * chªÃl ; 1181 gušt sourû ; 1182 sig£t_t mask ; 1183  fd ; 1185 `sigem±y£t (& mask ); 1186 `sigadd£t (& mask , SIGINT ); 1187 `sigadd£t (& mask , SIGTERM ); 1189 ià( `sig´ocmask ( SIG_BLOCK , & mask , NULL ) < 0) { 1190 `³¼Ü ("Failedo set signal mask"); 1194 fd = `sigÇlfd (-1, & mask , 0); 1195 ià( fd < 0) { 1196 `³¼Ü ("Failedo create signal descriptor"); 1200 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 1202 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 1203 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 1204 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 1206 sourû = `g_io_add_w©ch ( chªÃl , 1207 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 1208 sigÇl_hªdËr , NULL ); 1210 `g_io_chªÃl_uÄef ( chªÃl ); 1212  sourû ; 1213 } } 1215  gboÞ—n $šput_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd™iÚ , 1216 gpoš‹r u£r_d©a ) 1218 ià( cÚd™iÚ & ( G_IO_HUP | G_IO_ERR | G_IO_NVAL )) { 1219 `g_maš_loÝ_qu™ ( maš_loÝ ); 1220  FALSE ; 1223 `¾_ÿÎback_»ad_ch¬ (); 1224  TRUE ; 1225 } } 1227  gušt $£tup_¡ªd¬d_šput () 1229 GIOChªÃl * chªÃl ; 1230 gušt sourû ; 1232 chªÃl = `g_io_chªÃl_unix_Ãw ( `fž’o ( ¡dš )); 1234 sourû = `g_io_add_w©ch ( chªÃl , 1235 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 1236 šput_hªdËr , NULL ); 1238 `g_io_chªÃl_uÄef ( chªÃl ); 1240  sourû ; 1241 } } 1243  $¶ay”_added ( GDBusProxy * ´oxy ) 1245 ¶ay”s = `g_¦i¡_­³nd ÕÏy”s, ´oxy ); 1247 ià( deçuÉ_¶ay” =ð NULL ) 1248 deçuÉ_¶ay” = ´oxy ; 1250 `´št_¶ay” ( ´oxy , COLORED_NEW ); 1251 } } 1253  $´št_fÞd” ( GDBusProxy * ´oxy , cÚ¡ * desütiÚ ) 1255 cÚ¡ * ·th ; 1257 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 1259 `¾_´štf ("%s%s%sFÞd” %s\n", desütiÚ ? "[" : "", 1260 desütiÚ ? : "", 1261 desütiÚ ? "] " : "", 1262 ·th ); 1263 } } 1265  $fÞd”_added ( GDBusProxy * ´oxy ) 1267 fÞd”s = `g_¦i¡_­³nd (fÞd”s, ´oxy ); 1269 `´št_fÞd” ( ´oxy , COLORED_NEW ); 1270 } } 1272  $´št_™em ( GDBusProxy * ´oxy , cÚ¡ * desütiÚ ) 1274 cÚ¡ * ·th , * Çme ; 1275 DBusMes§geI‹r ™” ; 1277 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 1279 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Name", & ™” )) 1280 `dbus_mes§ge_™”_g‘_basic (& ™” , & Çme ); 1282 Çme = ""; 1284 `¾_´štf ("%s%s%sI‹m % %s\n", desütiÚ ? "[" : "", 1285 desütiÚ ? : "", 1286 desütiÚ ? "] " : "", 1287 ·th , Çme ); 1288 } } 1290  $™em_added ( GDBusProxy * ´oxy ) 1292 ™ems = `g_¦i¡_­³nd (™ems, ´oxy ); 1294 `´št_™em ( ´oxy , COLORED_NEW ); 1295 } } 1297  $´oxy_added ( GDBusProxy * ´oxy , * u£r_d©a ) 1299 cÚ¡ * š‹rçû ; 1301 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 1303 ià(! `¡rcmp ( š‹rçû , BLUEZ_MEDIA_PLAYER_INTERFACE )) 1304 `¶ay”_added ( ´oxy ); 1305 ià(! `¡rcmp ( š‹rçû , BLUEZ_MEDIA_FOLDER_INTERFACE )) 1306 `fÞd”_added ( ´oxy ); 1307 ià(! `¡rcmp ( š‹rçû , BLUEZ_MEDIA_ITEM_INTERFACE )) 1308 `™em_added ( ´oxy ); 1309 } } 1311  $¶ay”_»moved ( GDBusProxy * ´oxy ) 1313 `´št_¶ay” ( ´oxy , COLORED_DEL ); 1315 ià( deçuÉ_¶ay” =ð ´oxy ) 1316 deçuÉ_¶ay” = NULL ; 1318 ¶ay”s = `g_¦i¡_»move ÕÏy”s, ´oxy ); 1319 } } 1321  $fÞd”_»moved ( GDBusProxy * ´oxy ) 1323 fÞd”s = `g_¦i¡_»move (fÞd”s, ´oxy ); 1325 `´št_fÞd” ( ´oxy , COLORED_DEL ); 1326 } } 1328  $™em_»moved ( GDBusProxy * ´oxy ) 1330 ™ems = `g_¦i¡_»move (™ems, ´oxy ); 1332 `´št_™em ( ´oxy , COLORED_DEL ); 1333 } } 1335  $´oxy_»moved ( GDBusProxy * ´oxy , * u£r_d©a ) 1337 cÚ¡ * š‹rçû ; 1339 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 1341 ià(! `¡rcmp ( š‹rçû , BLUEZ_MEDIA_PLAYER_INTERFACE )) 1342 `¶ay”_»moved ( ´oxy ); 1343 ià(! `¡rcmp ( š‹rçû , BLUEZ_MEDIA_FOLDER_INTERFACE )) 1344 `fÞd”_»moved ( ´oxy ); 1345 ià(! `¡rcmp ( š‹rçû , BLUEZ_MEDIA_ITEM_INTERFACE )) 1346 `™em_»moved ( ´oxy ); 1347 } } 1349  $¶ay”_´Ý”ty_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 1350 DBusMes§geI‹r * ™” ) 1352 * ¡r ; 1354 ¡r = `´oxy_desütiÚ ( ´oxy , "PÏy”", COLORED_CHG ); 1355 `´št_™” ( ¡r , Çme , ™” ); 1356 `g_ä“ ( ¡r ); 1357 } } 1359  $fÞd”_´Ý”ty_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 1360 DBusMes§geI‹r * ™” ) 1362 * ¡r ; 1364 ¡r = `´oxy_desütiÚ ( ´oxy , "FÞd”", COLORED_CHG ); 1365 `´št_™” ( ¡r , Çme , ™” ); 1366 `g_ä“ ( ¡r ); 1367 } } 1369  $™em_´Ý”ty_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 1370 DBusMes§geI‹r * ™” ) 1372 * ¡r ; 1374 ¡r = `´oxy_desütiÚ ( ´oxy , "I‹m", COLORED_CHG ); 1375 `´št_™” ( ¡r , Çme , ™” ); 1376 `g_ä“ ( ¡r ); 1377 } } 1379  $´Ý”ty_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 1380 DBusMes§geI‹r * ™” , * u£r_d©a ) 1382 cÚ¡ * š‹rçû ; 1384 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 1386 ià(! `¡rcmp ( š‹rçû , BLUEZ_MEDIA_PLAYER_INTERFACE )) 1387 `¶ay”_´Ý”ty_chªged ( ´oxy , Çme , ™” ); 1388 ià(! `¡rcmp ( š‹rçû , BLUEZ_MEDIA_FOLDER_INTERFACE )) 1389 `fÞd”_´Ý”ty_chªged ( ´oxy , Çme , ™” ); 1390 ià(! `¡rcmp ( š‹rçû , BLUEZ_MEDIA_ITEM_INTERFACE )) 1391 `™em_´Ý”ty_chªged ( ´oxy , Çme , ™” ); 1392 } } 1394  $maš ( ¬gc , * ¬gv []) 1396 GO±iÚCÚ‹xt * cÚ‹xt ; 1397 GE¼Ü * ”rÜ = NULL ; 1398 GDBusCl›Á * þ›Á ; 1399 gušt sigÇl , šput ; 1401 cÚ‹xt = `g_ÝtiÚ_cÚ‹xt_Ãw ( NULL ); 1402 `g_ÝtiÚ_cÚ‹xt_add_maš_’Œ›s ( cÚ‹xt , ÝtiÚs , NULL ); 1404 ià( `g_ÝtiÚ_cÚ‹xt_·r£ ( cÚ‹xt , & ¬gc , & ¬gv , & ”rÜ è=ð FALSE ) { 1405 ià( ”rÜ !ð NULL ) { 1406 `g_´š‹¼ ("%s\n", ”rÜ -> mes§ge ); 1407 `g_”rÜ_ä“ ( ”rÜ ); 1409 `g_´š‹¼ ("An unknownƒrror occurred\n"); 1410 `ex™ (1); 1413 `g_ÝtiÚ_cÚ‹xt_ä“ ( cÚ‹xt ); 1415 ià( ÝtiÚ_v”siÚ =ð TRUE ) { 1416 `´štf ("%s\n", VERSION ); 1417 `ex™ (0); 1420 maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1421 dbus_cÚn = `g_dbus_£tup_bus ( DBUS_BUS_SYSTEM , NULL , NULL); 1423 ¾_©‹m±ed_com¶‘iÚ_funùiÚ = cmd_com¶‘iÚ ; 1425 ¾_”a£_em±y_lše = 1; 1426 `¾_ÿÎback_hªdËr_š¡®l ( NULL , ¾_hªdËr ); 1428 `¾_£t_´om± ( PROMPT_OFF ); 1429 `¾_»di¥Ïy (); 1431 šput = `£tup_¡ªd¬d_šput (); 1432 sigÇl = `£tup_sigÇlfd (); 1433 þ›Á = `g_dbus_þ›Á_Ãw ( dbus_cÚn , "org.bluez", "/org/bluez"); 1435 `g_dbus_þ›Á_£t_cÚÃù_w©ch ( þ›Á , cÚÃù_hªdËr , NULL ); 1436 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( þ›Á , discÚÃù_hªdËr , NULL ); 1438 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( þ›Á , ´oxy_added , ´oxy_»moved , 1439 ´Ý”ty_chªged , NULL ); 1441 `g_maš_loÝ_run ( maš_loÝ ); 1443 `g_dbus_þ›Á_uÄef ( þ›Á ); 1444 `g_sourû_»move ( sigÇl ); 1445 `g_sourû_»move ( šput ); 1447 `¾_mes§ge (""); 1448 `¾_ÿÎback_hªdËr_»move (); 1450 `dbus_cÚÃùiÚ_uÄef ( dbus_cÚn ); 1451 `g_maš_loÝ_uÄef ( maš_loÝ ); 1454 } } @tools/btattach.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 35  ~ 36  ~<‹rmios.h > 37  ~ 38  ~ 40  ~ 41  ~ 42  ~ 44  ~"hcŸ‰ach.h " 45  ~"mÚ™Ü/mašloÝ.h " 46  ~"mÚ™Ü/bt.h " 47  ~"¤c/sh¬ed/timeout.h " 48  ~"¤c/sh¬ed/utž.h " 49  ~"¤c/sh¬ed/hci.h " 51  $Ý’_£rŸl (cÚ¡ * ·th ) 53  ‹rmios ti ; 54  fd , §ved_ldisc , ldisc = N_HCI ; 56 fd = `Ý’ ( ·th , O_RDWR | O_NOCTTY ); 57 ià( fd < 0) { 58 `³¼Ü ("Failedo open serial…ort"); 62 ià( `tcæush ( fd , TCIOFLUSH ) < 0) { 63 `³¼Ü ("Failedo flush serial…ort"); 64 `þo£ ( fd ); 68 ià( `ioùl ( fd , TIOCGETD , & §ved_ldisc ) < 0) { 69 `³¼Ü ("Failed get serial†ine discipline"); 70 `þo£ ( fd ); 75 `mem£t (& ti , 0, (ti)); 76 `cfmak”aw (& ti ); 78 ti . c_cæag |ð( B115200 | CLOCAL | CREAD ); 81 ti . c_cæag |ð CRTSCTS ; 83 ià( `tc£‰r ( fd , TCSANOW , & ti ) < 0) { 84 `³¼Ü ("Failedo set serial…ort settings"); 85 `þo£ ( fd ); 89 ià( `ioùl ( fd , TIOCSETD , & ldisc ) < 0) { 90 `³¼Ü ("Failed set serial†ine discipline"); 91 `þo£ ( fd ); 95 `´štf ("Sw™ched†šdisclšäom %dØ%d\n", §ved_ldisc , ldisc ); 97  fd ; 98 } } 100  $loÿl_v”siÚ_ÿÎback (cÚ¡ * d©a , ušt8_t size , 101 * u£r_d©a ) 103 cÚ¡  bt_hci_r¥_»ad_loÿl_v”siÚ * r¥ = d©a ; 105 `´štf ("Mªuçùu»r: %u\n", `Ë16_to_ýu ( r¥ -> mªuçùu»r )); 106 } } 108  $©ch_´Ùo (cÚ¡ * ·th ,  ´Ùo , 109  æags ) 111  fd , dev_id ; 113 fd = `Ý’_£rŸl ( ·th ); 114 ià( fd < 0) 117 ià( `ioùl ( fd , HCIUARTSETFLAGS , æags ) < 0) { 118 `³¼Ü ("Failedo set flags"); 119 `þo£ ( fd ); 123 ià( `ioùl ( fd , HCIUARTSETPROTO , ´Ùo ) < 0) { 124 `³¼Ü ("Failedo set…rotocol"); 125 `þo£ ( fd ); 129 dev_id = `ioùl ( fd , HCIUARTGETDEVICE ); 130 ià( dev_id < 0) { 131 `³¼Ü ("Failedo get device id"); 132 `þo£ ( fd ); 136 `´štf ("Deviû index %d‡‰ached\n", dev_id ); 138 ià( æags & (1 << HCI_UART_RAW_DEVICE )) { 139  ©‹m±s = 6; 140  bt_hci * hci ; 142  ©‹m±s -- > 0) { 143 hci = `bt_hci_Ãw_u£r_chªÃl ( dev_id ); 144 ià( hci ) 147 `u¦“p (250 * 1000); 150 ià(! hci ) { 151 `årštf ( ¡d”r , "Failedo open HCI user channel\n"); 152 `þo£ ( fd ); 156 `bt_hci_£nd ( hci , BT_HCI_CMD_READ_LOCAL_VERSION , NULL , 0, 157 loÿl_v”siÚ_ÿÎback , NULL , NULL); 160  fd ; 161 } } 163  $u¬t_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 165 `´štf ("UART callback handling\n"); 166 } } 168  $sigÇl_ÿÎback ( signum , * u£r_d©a ) 170  boÞ ‹rmš©ed = çl£ ; 172  signum ) { 173  SIGINT : 174  SIGTERM : 175 ià(! ‹rmš©ed ) { 176 `mašloÝ_qu™ (); 177 ‹rmš©ed = Œue ; 181 } } 182  $u§ge () 184 `´štf ("btattach - Bluetooth serial utility\n" 186 `´štf ("\tbtattach [options]\n"); 187 `´štf ("options:\n" 191 } } 193 cÚ¡  ÝtiÚ gmaš_ÝtiÚs [] = { 194 { "b»dr", »quœed_¬gum’t , NULL , 'B' }, 195 { "amp", »quœed_¬gum’t , NULL , 'A' }, 196 { "v”siÚ", no_¬gum’t , NULL , 'v' }, 197 { "h–p", no_¬gum’t , NULL , 'h' }, 201  $maš ( ¬gc , * ¬gv []) 203 cÚ¡ * b»dr_·th = NULL , * amp_·th = NULL; 204 boÞ ¿w_deviû = çl£ ; 205 sig£t_t mask ; 206  ex™_¡©us , couÁ = 0; 209  Ýt ; 211 Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "B:A:Rvh", 212 maš_ÝtiÚs , NULL ); 213 ià( Ýt < 0) 216  Ýt ) { 218 b»dr_·th = Ýrg ; 221 amp_·th = Ýrg ; 224 ¿w_deviû = Œue ; 227 `´štf ("%s\n", VERSION ); 228  EXIT_SUCCESS ; 230 `u§ge (); 231  EXIT_SUCCESS ; 233  EXIT_FAILURE ; 237 ià( ¬gc - Ýtšd > 0) { 238 `årštf ( ¡d”r , "Invalid command†ine…arameters\n"); 239  EXIT_FAILURE ; 242 `mašloÝ_š™ (); 244 `sigem±y£t (& mask ); 245 `sigadd£t (& mask , SIGINT ); 246 `sigadd£t (& mask , SIGTERM ); 248 `mašloÝ_£t_sigÇl (& mask , sigÇl_ÿÎback , NULL , NULL); 250 ià( b»dr_·th ) { 251  æags ; 252  fd ; 254 `´štf ("A‰achšg BR/EDR cÚŒÞ˸tØ%s\n", b»dr_·th ); 256 æags = (1 << HCI_UART_RESET_ON_INIT ); 258 ià( ¿w_deviû ) 259 æags = (1 << HCI_UART_RAW_DEVICE ); 261 fd = `©ch_´Ùo ( b»dr_·th , HCI_UART_H4 , æags ); 262 ià( fd >= 0) { 263 `mašloÝ_add_fd ( fd , 0, u¬t_ÿÎback , NULL , NULL); 264 couÁ ++; 268 ià( amp_·th ) { 269  æags ; 270  fd ; 272 `´štf ("A‰achšg AMP cÚŒÞ˸tØ%s\n", amp_·th ); 274 æags = (1 << HCI_UART_RESET_ON_INIT ) | 275 (1 << HCI_UART_CREATE_AMP ); 277 ià( ¿w_deviû ) 278 æags = (1 << HCI_UART_RAW_DEVICE ); 280 fd = `©ch_´Ùo ( amp_·th , HCI_UART_H4 , æags ); 281 ià( fd >= 0) { 282 `mašloÝ_add_fd ( fd , 0, u¬t_ÿÎback , NULL , NULL); 283 couÁ ++; 287 ià( couÁ < 1) { 288 `årštf ( ¡d”r , "No controller‡ttached\n"); 289  EXIT_FAILURE ; 292 ex™_¡©us = `mašloÝ_run (); 294  ex™_¡©us ; 295 } } @tools/btgatt-client.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~<¡dio.h > 28  ~<¡dboÞ.h > 29  ~<¡dšt.h > 30  ~<¡dlib.h > 31  ~ 32  ~ 33  ~ 34  ~<”ºo.h > 36  ~ 37  ~ 38  ~ 39  ~ 40  ~"lib/uuid.h " 42  ~"mÚ™Ü/mašloÝ.h " 43  ~"¤c/sh¬ed/utž.h " 44  ~"¤c/sh¬ed/©t.h " 45  ~"¤c/sh¬ed/queue.h " 46  ~"¤c/sh¬ed/g©t-db.h " 47  ~"¤c/sh¬ed/g©t-þ›Á.h " 49  #ATT_CID 4 ) 51  #PRLOG (...) \ 52 `´štf ( __VA_ARGS__ ); `´št_´om± (); ) 54  #COLOR_OFF "\x1B[0m" ) 55  #COLOR_RED "\x1B[0;91m" ) 56  #COLOR_GREEN "\x1B[0;92m" ) 57  #COLOR_YELLOW "\x1B[0;93m" ) 58  #COLOR_BLUE "\x1B[0;94m" ) 59  #COLOR_MAGENTA "\x1B[0;95m" ) 60  #COLOR_BOLDGRAY "\x1B[1;30m" ) 61  #COLOR_BOLDWHITE "\x1B[1;37m" ) 63  boÞ gv”bo£ = çl£ ; 65  sþ›Á { 66  mfd ; 67  g©t_db * mdb ; 68  bt_g©t_þ›Á * mg©t ; 71  $´št_´om± () 73 `´štf ( COLOR_BLUE "[GATT cl›Á]" COLOR_OFF "# "); 74 `fæush ( ¡dout ); 75 } } 77  $©t_discÚÃù_cb ( ”r , * u£r_d©a ) 79 `´štf ("Deviû discÚÃùed: %s\n", `¡»¼Ü ( ”r )); 81 `mašloÝ_qu™ (); 82 } } 84  $©t_debug_cb (cÚ¡ * ¡r , * u£r_d©a ) 86 cÚ¡ * ´efix = u£r_d©a ; 88 `PRLOG ( COLOR_BOLDGRAY "%s" COLOR_BOLDWHITE "%s\n" COLOR_OFF , ´efix , ¡r ); 89 } } 91  $g©t_debug_cb (cÚ¡ * ¡r , * u£r_d©a ) 93 cÚ¡ * ´efix = u£r_d©a ; 95 `PRLOG ( COLOR_GREEN "%s%s\n" COLOR_OFF , ´efix , ¡r ); 96 } } 98  »ady_cb ( boÞ sucûss , ušt8_t ©t_ecode , * u£r_d©a ); 99  £rviû_chªged_cb ( ušt16_t ¡¬t_hªdË , ušt16_ˆ ’d_hªdË , 100 * u£r_d©a ); 102  $log_£rviû_ev’t ( g©t_db_©Œibu‹ * ©Œ , cÚ¡ * ¡r ) 104  uuid_¡r [ MAX_LEN_UUID_STR ]; 105 bt_uuid_t uuid ; 106 ušt16_t ¡¬t , ’d ; 108 `g©t_db_©Œibu‹_g‘_£rviû_uuid ( ©Œ , & uuid ); 109 `bt_uuid_to_¡ršg (& uuid , uuid_¡r , (uuid_str)); 111 `g©t_db_©Œibu‹_g‘_£rviû_hªdËs ( ©Œ , & ¡¬t , & ’d ); 113 `PRLOG ("% - UUID: % ¡¬t: 0x%04xƒnd: 0x%04x\n", ¡r , uuid_¡r , 114 ¡¬t , ’d ); 115 } } 117  $£rviû_added_cb ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 119 `log_£rviû_ev’t ( ©Œ , "Service Added"); 120 } } 122  $£rviû_»moved_cb ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 124 `log_£rviû_ev’t ( ©Œ , "Service Removed"); 125 } } 127  þ›Á * $þ›Á_ü—‹ ( fd , ušt16_t mtu ) 129  þ›Á * þi ; 130  bt_©t * ©t ; 132 þi = `Ãw0 ( þ›Á , 1); 133 ià(! þi ) { 134 `årštf ( ¡d”r , "Failedo‡llocate memory for client\n"); 135  NULL ; 138 ©t = `bt_©t_Ãw ( fd ); 139 ià(! ©t ) { 140 `årštf ( ¡d”r , "Failedo initialze ATTransport†ayer\n"); 141 `bt_©t_uÄef ( ©t ); 142 `ä“ ( þi ); 143  NULL ; 146 ià(! `bt_©t_£t_þo£_Ú_uÄef ( ©t , Œue )) { 147 `årštf ( ¡d”r , "Failedo set up ATTransport†ayer\n"); 148 `bt_©t_uÄef ( ©t ); 149 `ä“ ( þi ); 150  NULL ; 153 ià(! `bt_©t_»gi¡”_discÚÃù ( ©t , ©t_discÚÃù_cb , NULL , NULL)) { 154 `årštf ( ¡d”r , "Failedo set ATT disconnect handler\n"); 155 `bt_©t_uÄef ( ©t ); 156 `ä“ ( þi ); 157  NULL ; 160 þi -> fd = fd; 161 þi -> db = `g©t_db_Ãw (); 162 ià(! þi -> db ) { 163 `årštf ( ¡d”r , "Failedo create GATT database\n"); 164 `bt_©t_uÄef ( ©t ); 165 `ä“ ( þi ); 166  NULL ; 169 þi -> g©t = `bt_g©t_þ›Á_Ãw (þi-> db , ©t , mtu ); 170 ià(! þi -> g©t ) { 171 `årštf ( ¡d”r , "Failedo create GATT client\n"); 172 `g©t_db_uÄef ( þi -> db ); 173 `bt_©t_uÄef ( ©t ); 174 `ä“ ( þi ); 175  NULL ; 178 `g©t_db_»gi¡” ( þi -> db , £rviû_added_cb , £rviû_»moved_cb , 179 NULL , NULL); 181 ià( v”bo£ ) { 182 `bt_©t_£t_debug ( ©t , ©t_debug_cb , "©t: ", NULL ); 183 `bt_g©t_þ›Á_£t_debug ( þi -> g©t , g©t_debug_cb , "gatt: ", 184 NULL ); 187 `bt_g©t_þ›Á_£t_»ady_hªdËr ( þi -> g©t , »ady_cb , cli, NULL ); 188 `bt_g©t_þ›Á_£t_£rviû_chªged ( þi -> g©t , £rviû_chªged_cb , cli, 189 NULL ); 192 `bt_©t_uÄef ( ©t ); 193 `g©t_db_uÄef ( þi -> db ); 195  þi ; 196 } } 198  $þ›Á_de¡roy ( þ›Á * þi ) 200 `bt_g©t_þ›Á_uÄef ( þi -> g©t ); 201 } } 203  $´št_uuid (cÚ¡ bt_uuid_t * uuid ) 205  uuid_¡r [ MAX_LEN_UUID_STR ]; 206 bt_uuid_t uuid128 ; 208 `bt_uuid_to_uuid128 ( uuid , & uuid128 ); 209 `bt_uuid_to_¡ršg (& uuid128 , uuid_¡r , (uuid_str)); 211 `´štf ("%s\n", uuid_¡r ); 212 } } 214  $´št_šþ ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 216  þ›Á * þi = u£r_d©a ; 217 ušt16_t hªdË , ¡¬t , ’d ; 218  g©t_db_©Œibu‹ * £rviû ; 219 bt_uuid_t uuid ; 221 ià(! `g©t_db_©Œibu‹_g‘_šþ_d©a ( ©Œ , & hªdË , & ¡¬t , & ’d )) 224 £rviû = `g©t_db_g‘_©Œibu‹ ( þi -> db , ¡¬t ); 225 ià(! £rviû ) 228 `g©t_db_©Œibu‹_g‘_£rviû_uuid ( £rviû , & uuid ); 230 `´štf ("\ˆ " COLOR_GREEN "šþude" COLOR_OFF " - handle: " 232 "uuid: ", hªdË , ¡¬t , ’d ); 233 `´št_uuid (& uuid ); 234 } } 236  $´št_desc ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 238 `´štf ("\t\ˆ " COLOR_MAGENTA "desü" COLOR_OFF 240 `g©t_db_©Œibu‹_g‘_hªdË ( ©Œ )); 241 `´št_uuid ( `g©t_db_©Œibu‹_g‘_ty³ ( ©Œ )); 242 } } 244  $´št_chrc ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 246 ušt16_t hªdË , v®ue_hªdË ; 247 ušt8_t ´Ý”t›s ; 248 bt_uuid_t uuid ; 250 ià(! `g©t_db_©Œibu‹_g‘_ch¬_d©a ( ©Œ , & hªdË , 251 & v®ue_hªdË , 252 & ´Ý”t›s , 253 & uuid )) 256 `´štf ("\ˆ " COLOR_YELLOW "ch¬ac" COLOR_OFF 259 hªdË , v®ue_hªdË , ´Ý”t›s ); 260 `´št_uuid (& uuid ); 262 `g©t_db_£rviû_fÜ—ch_desc ( ©Œ , ´št_desc , NULL ); 263 } } 265  $´št_£rviû ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 267  þ›Á * þi = u£r_d©a ; 268 ušt16_t ¡¬t , ’d ; 269 boÞ ´im¬y ; 270 bt_uuid_t uuid ; 272 ià(! `g©t_db_©Œibu‹_g‘_£rviû_d©a ( ©Œ , & ¡¬t , & ’d , & ´im¬y , 273 & uuid )) 276 `´štf ( COLOR_RED "£rviû" COLOR_OFF " - start: 0x%04x, " 278 ¡¬t , ’d , ´im¬y ? "primary" : "secondary"); 279 `´št_uuid (& uuid ); 281 `g©t_db_£rviû_fÜ—ch_šþ ( ©Œ , ´št_šþ , þi ); 282 `g©t_db_£rviû_fÜ—ch_ch¬ ( ©Œ , ´št_chrc , NULL ); 284 `´štf ("\n"); 285 } } 287  $´št_£rviûs ( þ›Á * þi ) 289 `´štf ("\n"); 291 `g©t_db_fÜ—ch_£rviû ( þi -> db , NULL , ´št_£rviû , cli); 292 } } 294  $´št_£rviûs_by_uuid ( þ›Á * þi , cÚ¡ bt_uuid_t * uuid ) 296 `´štf ("\n"); 298 `g©t_db_fÜ—ch_£rviû ( þi -> db , uuid , ´št_£rviû , cli); 299 } } 301  $´št_£rviûs_by_hªdË ( þ›Á * þi , ušt16_t hªdË ) 303 `´štf ("\n"); 306 `g©t_db_fÜ—ch_£rviû ( þi -> db , NULL , ´št_£rviû , cli); 307 } } 309  $»ady_cb ( boÞ sucûss , ušt8_t ©t_ecode , * u£r_d©a ) 311  þ›Á * þi = u£r_d©a ; 313 ià(! sucûss ) { 314 `PRLOG ("GATT discovery…rocedures failed -ƒrror code: 0x%02x\n", 315 ©t_ecode ); 319 `PRLOG ("GATT discovery…rocedures complete\n"); 321 `´št_£rviûs ( þi ); 322 `´št_´om± (); 323 } } 325  $£rviû_chªged_cb ( ušt16_t ¡¬t_hªdË , ušt16_ˆ ’d_hªdË , 326 * u£r_d©a ) 328  þ›Á * þi = u£r_d©a ; 330 `´štf ("\nService Changed handled - start: 0x%04xƒnd: 0x%04x\n", 331 ¡¬t_hªdË , ’d_hªdË ); 333 `g©t_db_fÜ—ch_£rviû_š_¿nge ( þi -> db , NULL , ´št_£rviû , cli, 334 ¡¬t_hªdË , ’d_hªdË ); 335 `´št_´om± (); 336 } } 338  $£rviûs_u§ge () 340 `´štf ("Usage: services [options]\nOptions:\n" 346 } } 348  boÞ $·r£_¬gs (* ¡r ,  ex³ùed_¬gc , ** ¬gv , * ¬gc ) 350 ** ­ ; 352  ­ = ¬gv ; (*­ = `¡r£p (& ¡r , " \t")è!ð NULL ;) { 353 ià(** ­ == '\0') 356 (* ¬gc )++; 357 ­ ++; 359 ià(* ¬gc > ex³ùed_¬gc ) 360  çl£ ; 363  Œue ; 364 } } 366  $cmd_£rviûs ( þ›Á * þi , * cmd_¡r ) 368 * ¬gv [3]; 369  ¬gc = 0; 371 ià(! `bt_g©t_þ›Á_is_»ady ( þi -> g©t )) { 372 `´štf ("GATT client‚ot initialized\n"); 376 ià(! `·r£_¬gs ( cmd_¡r , 2, ¬gv , & ¬gc )) { 377 `£rviûs_u§ge (); 381 ià(! ¬gc ) { 382 `´št_£rviûs ( þi ); 386 ià( ¬gc != 2) { 387 `£rviûs_u§ge (); 391 ià(! `¡rcmp ( ¬gv [0], "-u") || !strcmp(argv[0], "--uuid")) { 392 bt_uuid_t tmp , uuid ; 394 ià( `bt_¡ršg_to_uuid (& tmp , ¬gv [1]) < 0) { 395 `´štf ("Inv®id UUID: %s\n", ¬gv [1]); 399 `bt_uuid_to_uuid128 (& tmp , & uuid ); 401 `´št_£rviûs_by_uuid ( þi , & uuid ); 402 } ià(! `¡rcmp ( ¬gv [0], "-a") || !strcmp(argv[0], "--handle")) { 403 ušt16_t hªdË ; 404 * ’d±r = NULL ; 406 hªdË = `¡¹Þ ( ¬gv [1], & ’d±r , 0); 407 ià(! ’d±r || *endptr != '\0') { 408 `´štf ("Inv®id s¹ hªdË: %s\n", ¬gv [1]); 412 `´št_£rviûs_by_hªdË ( þi , hªdË ); 414 `£rviûs_u§ge (); 415 } } 417  $»ad_muÉË_u§ge () 419 `´štf ("Usage:„ead-multiple ...\n"); 420 } } 422  $»ad_muÉË_cb ( boÞ sucûss , ušt8_t ©t_ecode , 423 cÚ¡ ušt8_t * v®ue , ušt16_t Ëngth , 424 * u£r_d©a ) 426  i ; 428 ià(! sucûss ) { 429 `PRLOG ("\nR—d muÉË„eque¡ fažed: 0x%02x\n", ©t_ecode ); 433 `´štf ("\nR—d muÉË v®u(%u by‹s):", Ëngth ); 435  i = 0; i < Ëngth ; i++) 436 `´štf ("%02x ", v®ue [ i ]); 438 `PRLOG ("\n"); 439 } } 441  $cmd_»ad_muÉË ( þ›Á * þi , * cmd_¡r ) 443  ¬gc = 0; 444 ušt16_t * v®ue ; 445 * ¬gv [512]; 446  i ; 447 * ’d±r = NULL ; 449 ià(! `bt_g©t_þ›Á_is_»ady ( þi -> g©t )) { 450 `´štf ("GATT client‚ot initialized\n"); 454 ià(! `·r£_¬gs ( cmd_¡r , ( ¬gv ),‡rgv, & ¬gc ) ||‡rgc < 2) { 455 `»ad_muÉË_u§ge (); 459 v®ue = `m®loc (( ušt16_t è* ¬gc ); 461  i = 0; i < ¬gc ; i++) { 462 v®ue [ i ] = `¡¹Þ ( ¬gv [i], & ’d±r , 0); 463 ià( ’d±r =ð ¬gv [ i ] || *’d±¸!ð'\0' || ! v®ue [i]) { 464 `´štf ("Inv®id v®uby‹: %s\n", ¬gv [ i ]); 465 `ä“ ( v®ue ); 470 ià(! `bt_g©t_þ›Á_»ad_muÉË ( þi -> g©t , v®ue , ¬gc , 471 »ad_muÉË_cb , NULL , NULL)) 472 `´štf ("Failedo initiate„ead multiple…rocedure\n"); 474 `ä“ ( v®ue ); 475 } } 477  $»ad_v®ue_u§ge () 479 `´štf ("Usage:„ead-value \n"); 480 } } 482  $»ad_cb ( boÞ sucûss , ušt8_t ©t_ecode , cÚ¡ ušt8_ˆ* v®ue , 483 ušt16_t Ëngth , * u£r_d©a ) 485  i ; 487 ià(! sucûss ) { 488 `PRLOG ("\nR—d„eque¡ fažed: 0x%02x\n", ©t_ecode ); 492 `´štf ("\nRead value"); 494 ià( Ëngth == 0) { 495 `PRLOG (": 0 bytes\n"); 499 `´štf (" (%u by‹s): ", Ëngth ); 501  i = 0; i < Ëngth ; i++) 502 `´štf ("%02x ", v®ue [ i ]); 504 `PRLOG ("\n"); 505 } } 507  $cmd_»ad_v®ue ( þ›Á * þi , * cmd_¡r ) 509 * ¬gv [2]; 510  ¬gc = 0; 511 ušt16_t hªdË ; 512 * ’d±r = NULL ; 514 ià(! `bt_g©t_þ›Á_is_»ady ( þi -> g©t )) { 515 `´štf ("GATT client‚ot initialized\n"); 519 ià(! `·r£_¬gs ( cmd_¡r , 1, ¬gv , & ¬gc ) ||‡rgc != 1) { 520 `»ad_v®ue_u§ge (); 524 hªdË = `¡¹Þ ( ¬gv [0], & ’d±r , 0); 525 ià(! ’d±r || *’d±¸!ð'\0' || ! hªdË ) { 526 `´štf ("Inv®id v®uhªdË: %s\n", ¬gv [0]); 530 ià(! `bt_g©t_þ›Á_»ad_v®ue ( þi -> g©t , hªdË , »ad_cb , 531 NULL , NULL)) 532 `´štf ("Failedo initiate„ead value…rocedure\n"); 533 } } 535  $»ad_lÚg_v®ue_u§ge () 537 `´štf ("Usage:„ead-long-value \n"); 538 } } 540  $cmd_»ad_lÚg_v®ue ( þ›Á * þi , * cmd_¡r ) 542 * ¬gv [3]; 543  ¬gc = 0; 544 ušt16_t hªdË ; 545 ušt16_t off£t ; 546 * ’d±r = NULL ; 548 ià(! `bt_g©t_þ›Á_is_»ady ( þi -> g©t )) { 549 `´štf ("GATT client‚ot initialized\n"); 553 ià(! `·r£_¬gs ( cmd_¡r , 2, ¬gv , & ¬gc ) ||‡rgc != 2) { 554 `»ad_lÚg_v®ue_u§ge (); 558 hªdË = `¡¹Þ ( ¬gv [0], & ’d±r , 0); 559 ià(! ’d±r || *’d±¸!ð'\0' || ! hªdË ) { 560 `´štf ("Inv®id v®uhªdË: %s\n", ¬gv [0]); 564 ’d±r = NULL ; 565 off£t = `¡¹Þ ( ¬gv [1], & ’d±r , 0); 566 ià(! ’d±r || *endptr != '\0') { 567 `´štf ("Inv®id off£t: %s\n", ¬gv [1]); 571 ià(! `bt_g©t_þ›Á_»ad_lÚg_v®ue ( þi -> g©t , hªdË , off£t , »ad_cb , 572 NULL , NULL)) 573 `´štf ("Failedo initiate„ead†ong value…rocedure\n"); 574 } } 576  $wr™e_v®ue_u§ge () 578 `´štf ("Usage: write-value [options] \n" 583 } } 585  ÝtiÚ gwr™e_v®ue_ÝtiÚs [] = { 590  $wr™e_cb ( boÞ sucûss , ušt8_t ©t_ecode , * u£r_d©a ) 592 ià( sucûss ) { 593 `PRLOG ("\nWrite successful\n"); 595 `PRLOG ("\nWr™çžed: 0x%02x\n", ©t_ecode ); 597 } } 599  $cmd_wr™e_v®ue ( þ›Á * þi , * cmd_¡r ) 601  Ýt , i ; 602 * ¬gvbuf [516]; 603 ** ¬gv = ¬gvbuf ; 604  ¬gc = 1; 605 ušt16_t hªdË ; 606 * ’d±r = NULL ; 607  Ëngth ; 608 ušt8_t * v®ue = NULL ; 609 boÞ w™hout_»¥Ú£ = çl£ ; 611 ià(! `bt_g©t_þ›Á_is_»ady ( þi -> g©t )) { 612 `´štf ("GATT client‚ot initialized\n"); 616 ià(! `·r£_¬gs ( cmd_¡r , 514, ¬gv + 1, & ¬gc )) { 617 `´štf ("Too many‡rguments\n"); 618 `wr™e_v®ue_u§ge (); 622 Ýtšd = 0; 623 ¬gv [0] = "write-value"; 624 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+w", wr™e_v®ue_ÝtiÚs , 625 NULL )) != -1) { 626  Ýt ) { 628 w™hout_»¥Ú£ = Œue ; 631 `wr™e_v®ue_u§ge (); 636 ¬gc -ð Ýtšd ; 637 ¬gv +ð Ýtšd ; 639 ià( ¬gc < 1) { 640 `wr™e_v®ue_u§ge (); 644 hªdË = `¡¹Þ ( ¬gv [0], & ’d±r , 0); 645 ià(! ’d±r || *’d±¸!ð'\0' || ! hªdË ) { 646 `´štf ("Inv®id hªdË: %s\n", ¬gv [0]); 650 Ëngth = ¬gc - 1; 652 ià( Ëngth > 0) { 653 ià( Ëngth > UINT16_MAX ) { 654 `´štf ("Write valueoo†ong\n"); 658 v®ue = `m®loc ( Ëngth ); 659 ià(! v®ue ) { 660 `´štf ("Failedo construct write value\n"); 664  i = 1; i < ¬gc ; i++) { 665 ià( `¡¾’ ( ¬gv [ i ]) != 2) { 666 `´štf ("Invalid value byte: %s\n", 667 ¬gv [ i ]); 668  dÚe ; 671 v®ue [ i -1] = `¡¹Þ ( ¬gv [i], & ’d±r , 0); 672 ià( ’d±r =ð ¬gv [ i ] || *endptr != '\0' 673 || ”ºo =ð ERANGE ) { 674 `´štf ("Invalid value byte: %s\n", 675 ¬gv [ i ]); 676  dÚe ; 681 ià( w™hout_»¥Ú£ ) { 682 ià(! `bt_g©t_þ›Á_wr™e_w™hout_»¥Ú£ ( þi -> g©t , hªdË , 683 çl£ , v®ue , Ëngth )) { 684 `´štf ("Failedo initiate write without„esponse " 686  dÚe ; 689 `´štf ("Write command sent\n"); 690  dÚe ; 693 ià(! `bt_g©t_þ›Á_wr™e_v®ue ( þi -> g©t , hªdË , v®ue , Ëngth , 694 wr™e_cb , 695 NULL , NULL)) 696 `´štf ("Failedo initiate write…rocedure\n"); 698 dÚe : 699 `ä“ ( v®ue ); 700 } } 702  $wr™e_lÚg_v®ue_u§ge () 704 `´štf ("Usage: write-long-value [options] " 710 } } 712  ÝtiÚ gwr™e_lÚg_v®ue_ÝtiÚs [] = { 717  $wr™e_lÚg_cb ( boÞ sucûss , boÞ »lŸbË_”rÜ , ušt8_t ©t_ecode , 718 * u£r_d©a ) 720 ià( sucûss ) { 721 `PRLOG ("Write successful\n"); 722 } ià( »lŸbË_”rÜ ) { 723 `PRLOG ("Reliable write‚ot verified\n"); 725 `PRLOG ("Wr™çžed: 0x%02x\n", ©t_ecode ); 727 } } 729  $cmd_wr™e_lÚg_v®ue ( þ›Á * þi , * cmd_¡r ) 731  Ýt , i ; 732 * ¬gvbuf [516]; 733 ** ¬gv = ¬gvbuf ; 734  ¬gc = 1; 735 ušt16_t hªdË ; 736 ušt16_t off£t ; 737 * ’d±r = NULL ; 738  Ëngth ; 739 ušt8_t * v®ue = NULL ; 740 boÞ »lŸbË_wr™es = çl£ ; 742 ià(! `bt_g©t_þ›Á_is_»ady ( þi -> g©t )) { 743 `´štf ("GATT client‚ot initialized\n"); 747 ià(! `·r£_¬gs ( cmd_¡r , 514, ¬gv + 1, & ¬gc )) { 748 `´štf ("Too many‡rguments\n"); 749 `wr™e_v®ue_u§ge (); 753 Ýtšd = 0; 754 ¬gv [0] = "write-long-value"; 755 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+r", wr™e_lÚg_v®ue_ÝtiÚs , 756 NULL )) != -1) { 757  Ýt ) { 759 »lŸbË_wr™es = Œue ; 762 `wr™e_lÚg_v®ue_u§ge (); 767 ¬gc -ð Ýtšd ; 768 ¬gv +ð Ýtšd ; 770 ià( ¬gc < 2) { 771 `wr™e_lÚg_v®ue_u§ge (); 775 hªdË = `¡¹Þ ( ¬gv [0], & ’d±r , 0); 776 ià(! ’d±r || *’d±¸!ð'\0' || ! hªdË ) { 777 `´štf ("Inv®id hªdË: %s\n", ¬gv [0]); 781 ’d±r = NULL ; 782 off£t = `¡¹Þ ( ¬gv [1], & ’d±r , 0); 783 ià(! ’d±r || *’d±¸!ð'\0' || ”ºo =ð ERANGE ) { 784 `´štf ("Inv®id off£t: %s\n", ¬gv [1]); 788 Ëngth = ¬gc - 2; 790 ià( Ëngth > 0) { 791 ià( Ëngth > UINT16_MAX ) { 792 `´štf ("Write valueoo†ong\n"); 796 v®ue = `m®loc ( Ëngth ); 797 ià(! v®ue ) { 798 `´štf ("Failedo construct write value\n"); 802  i = 2; i < ¬gc ; i++) { 803 ià( `¡¾’ ( ¬gv [ i ]) != 2) { 804 `´štf ("Invalid value byte: %s\n", 805 ¬gv [ i ]); 806 `ä“ ( v®ue ); 810 v®ue [ i -2] = `¡¹Þ ( ¬gv [i], & ’d±r , 0); 811 ià( ’d±r =ð ¬gv [ i ] || *endptr != '\0' 812 || ”ºo =ð ERANGE ) { 813 `´štf ("Invalid value byte: %s\n", 814 ¬gv [ i ]); 815 `ä“ ( v®ue ); 821 ià(! `bt_g©t_þ›Á_wr™e_lÚg_v®ue ( þi -> g©t , »lŸbË_wr™es , hªdË , 822 off£t , v®ue , Ëngth , 823 wr™e_lÚg_cb , 824 NULL , NULL)) 825 `´štf ("Failedo initiate†ong write…rocedure\n"); 827 `ä“ ( v®ue ); 828 } } 830  $»gi¡”_nÙify_u§ge () 832 `´štf ("Usage:„egister-notify \n"); 833 } } 835  $nÙify_cb ( ušt16_t v®ue_hªdË , cÚ¡ ušt8_t * v®ue , 836 ušt16_t Ëngth , * u£r_d©a ) 838  i ; 840 `´štf ("\n\tHªdË V®uNÙ/Ind: 0x%04x - ", v®ue_hªdË ); 842 ià( Ëngth == 0) { 843 `PRLOG ("(0 bytes)\n"); 847 `´štf ("(%u by‹s): ", Ëngth ); 849  i = 0; i < Ëngth ; i++) 850 `´štf ("%02x ", v®ue [ i ]); 852 `PRLOG ("\n"); 853 } } 855  $»gi¡”_nÙify_cb ( id , ušt16_t ©t_ecode , 856 * u£r_d©a ) 858 ià(! id ) { 859 `PRLOG ("Failedo„egister‚otify handler " 860 "-ƒ¼Ü code: 0x%02x\n", ©t_ecode ); 864 `PRLOG ("Regi¡”ed‚Ùify hªd˸w™h id: %u\n", id ); 865 } } 867  $cmd_»gi¡”_nÙify ( þ›Á * þi , * cmd_¡r ) 869 * ¬gv [2]; 870  ¬gc = 0; 871 ušt16_t v®ue_hªdË ; 872 * ’d±r = NULL ; 874 ià(! `bt_g©t_þ›Á_is_»ady ( þi -> g©t )) { 875 `´štf ("GATT client‚ot initialized\n"); 879 ià(! `·r£_¬gs ( cmd_¡r , 1, ¬gv , & ¬gc ) ||‡rgc != 1) { 880 `»gi¡”_nÙify_u§ge (); 884 v®ue_hªdË = `¡¹Þ ( ¬gv [0], & ’d±r , 0); 885 ià(! ’d±r || *’d±¸!ð'\0' || ! v®ue_hªdË ) { 886 `´štf ("Inv®id v®uhªdË: %s\n", ¬gv [0]); 890 ià(! `bt_g©t_þ›Á_»gi¡”_nÙify ( þi -> g©t , v®ue_hªdË , 891 »gi¡”_nÙify_cb , 892 nÙify_cb , NULL , NULL)) 893 `´štf ("Failedo„egister‚otify handler\n"); 895 `´štf ("\n"); 896 } } 898  $uÄegi¡”_nÙify_u§ge () 900 `´štf ("Usage: unregister-notify \n"); 901 } } 903  $cmd_uÄegi¡”_nÙify ( þ›Á * þi , * cmd_¡r ) 905 * ¬gv [2]; 906  ¬gc = 0; 907  id ; 908 * ’d±r = NULL ; 910 ià(! `bt_g©t_þ›Á_is_»ady ( þi -> g©t )) { 911 `´štf ("GATT client‚ot initialized\n"); 915 ià(! `·r£_¬gs ( cmd_¡r , 1, ¬gv , & ¬gc ) ||‡rgc != 1) { 916 `uÄegi¡”_nÙify_u§ge (); 920 id = `¡¹Þ ( ¬gv [0], & ’d±r , 0); 921 ià(! ’d±r || *’d±¸!ð'\0' || ! id ) { 922 `´štf ("Inv®id‚Ùify id: %s\n", ¬gv [0]); 926 ià(! `bt_g©t_þ›Á_uÄegi¡”_nÙify ( þi -> g©t , id )) { 927 `´štf ("FažedØuÄegi¡”‚Ùify hªd˸w™h id: %u\n", id ); 931 `´štf ("UÄegi¡”ed‚Ùify hªd˸w™h id: %u\n", id ); 932 } } 934  cmd_h–p ( þ›Á * þi , * cmd_¡r ); 936 (* tcommªd_func_t )( tþ›Á * tþi , * tcmd_¡r ); 939 * cmd ; 940 commªd_func_t func ; 941 * doc ; 942 } commªd [] = { 943 { "h–p", cmd_h–p , "\tDisplay help message" }, 944 { "£rviûs", cmd_£rviûs , "\tShow discovered services" }, 945 { "»ad-v®ue", cmd_»ad_v®ue , 947 { "»ad-lÚg-v®ue", cmd_»ad_lÚg_v®ue , 949 { "»ad-muÉË", cmd_»ad_muÉË , "\tRead Multiple" }, 950 { "wr™e-v®ue", cmd_wr™e_v®ue , 952 { "wr™e-lÚg-v®ue", cmd_wr™e_lÚg_v®ue , 954 { "»gi¡”-nÙify", cmd_»gi¡”_nÙify , 956 { "uÄegi¡”-nÙify", cmd_uÄegi¡”_nÙify , 959 } }; 961  $cmd_h–p ( þ›Á * þi , * cmd_¡r ) 963  i ; 965 `´štf ("Commands:\n"); 966  i = 0; commªd [i]. cmd ; i++) 967 `´štf ("\t%-15s\t%s\n", commªd [ i ]. cmd , commªd[i]. doc ); 968 } } 970  $´om±_»ad_cb ( fd , ušt32_t ev’ts , * u£r_d©a ) 972 ssize_t »ad ; 973 size_t Ën = 0; 974 * lše = NULL ; 975 * cmd = NULL , * ¬gs ; 976  þ›Á * þi = u£r_d©a ; 977  i ; 979 ià( ev’ts & ( EPOLLRDHUP | EPOLLHUP | EPOLLERR )) { 980 `mašloÝ_qu™ (); 984 ià(( »ad = `g‘lše (& lše , & Ën , ¡dš )) == -1) 987 ià( »ad <= 1) { 988 `cmd_h–p ( þi , NULL ); 989 `´št_´om± (); 993 lše [ »ad -1] = '\0'; 994 ¬gs = lše ; 996 ( cmd = `¡r£p (& ¬gs , " \t"))) 997 ià(* cmd != '\0') 1000 ià(! cmd ) 1001  çžed ; 1003  i = 0; commªd [i]. cmd ; i++) { 1004 ià( `¡rcmp ( commªd [ i ]. cmd , cmd) == 0) 1008 ià( commªd [ i ]. cmd ) 1009 commªd [ i ]. `func ( þi , ¬gs ); 1011 `årštf ( ¡d”r , "UnknowÀcommªd: %s\n", lše ); 1013 çžed : 1014 `´št_´om± (); 1016 `ä“ ( lše ); 1017 } } 1019  $sigÇl_cb ( signum , * u£r_d©a ) 1021  signum ) { 1022  SIGINT : 1023  SIGTERM : 1024 `mašloÝ_qu™ (); 1029 } } 1031  $l2ÿp_Ë_©t_cÚÃù ( bdaddr_t * ¤c , bdaddr_ˆ* d¡ , ušt8_t d¡_ty³ , 1032  £c ) 1034  sock ; 1035  sockaddr_l2 ¤ÿddr , d¡addr ; 1036  bt_£cur™y bt£c ; 1038 ià( v”bo£ ) { 1039  ¤ÿddr_¡r [18], d¡addr_¡r [18]; 1041 `ba2¡r ( ¤c , ¤ÿddr_¡r ); 1042 `ba2¡r ( d¡ , d¡addr_¡r ); 1044 `´štf ("btgatt-client: Opening L2CAP LE connection on ATT " 1046 ¤ÿddr_¡r , d¡addr_¡r ); 1049 sock = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_L2CAP ); 1050 ià( sock < 0) { 1051 `³¼Ü ("Failedo create L2CAP socket"); 1056 `mem£t (& ¤ÿddr , 0, (srcaddr)); 1057 ¤ÿddr . l2_çmžy = AF_BLUETOOTH ; 1058 ¤ÿddr . l2_cid = `htobs ( ATT_CID ); 1059 ¤ÿddr . l2_bdaddr_ty³ = 0; 1060 `baýy (& ¤ÿddr . l2_bdaddr , ¤c ); 1062 ià( `bšd ( sock , ( sockaddr *)& ¤ÿddr , (srcaddr)) < 0) { 1063 `³¼Ü ("Failedo bind L2CAP socket"); 1064 `þo£ ( sock ); 1069 `mem£t (& bt£c , 0, (btsec)); 1070 bt£c . Ëv– = £c ; 1071 ià( `£tsockÝt ( sock , SOL_BLUETOOTH , BT_SECURITY , & bt£c , 1072 ( bt£c )) != 0) { 1073 `årštf ( ¡d”r , "Failedo set L2CAP security†evel\n"); 1074 `þo£ ( sock ); 1079 `mem£t (& d¡addr , 0, (dstaddr)); 1080 d¡addr . l2_çmžy = AF_BLUETOOTH ; 1081 d¡addr . l2_cid = `htobs ( ATT_CID ); 1082 d¡addr . l2_bdaddr_ty³ = d¡_ty³ ; 1083 `baýy (& d¡addr . l2_bdaddr , d¡ ); 1085 `´štf ("Connectingo device..."); 1086 `fæush ( ¡dout ); 1088 ià( `cÚÃù ( sock , ( sockaddr *è& d¡addr , (dstaddr)) < 0) { 1089 `³¼Ü (" Failedo connect"); 1090 `þo£ ( sock ); 1094 `´štf (" Done\n"); 1096  sock ; 1097 } } 1099  $u§ge () 1101 `´štf ("btgatt-client\n"); 1102 `´štf ("Usage:\n\tbtgatt-client [options]\n"); 1104 `´štf ("Options:\n" 1113 } } 1115  ÝtiÚ gmaš_ÝtiÚs [] = { 1126  $maš ( ¬gc , * ¬gv []) 1128  Ýt ; 1129  £c = BT_SECURITY_LOW ; 1130 ušt16_t mtu = 0; 1131 ušt8_t d¡_ty³ = BDADDR_LE_PUBLIC ; 1132 boÞ d¡_addr_giv’ = çl£ ; 1133 bdaddr_t ¤c_addr , d¡_addr ; 1134  dev_id = -1; 1135  fd ; 1136 sig£t_t mask ; 1137  þ›Á * þi ; 1139 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+hvs:m:t:d:i:", 1140 maš_ÝtiÚs , NULL )) != -1) { 1141  Ýt ) { 1143 `u§ge (); 1144  EXIT_SUCCESS ; 1146 v”bo£ = Œue ; 1149 ià( `¡rcmp ( Ýrg , "low") == 0) 1150 £c = BT_SECURITY_LOW ; 1151 ià( `¡rcmp ( Ýrg , "medium") == 0) 1152 £c = BT_SECURITY_MEDIUM ; 1153 ià( `¡rcmp ( Ýrg , "high") == 0) 1154 £c = BT_SECURITY_HIGH ; 1156 `årštf ( ¡d”r , "Invalid security†evel\n"); 1157  EXIT_FAILURE ; 1161  ¬g ; 1163 ¬g = `©oi ( Ýrg ); 1164 ià( ¬g <= 0) { 1165 `årštf ( ¡d”r , "Inv®id MTU: %d\n", ¬g ); 1166  EXIT_FAILURE ; 1169 ià( ¬g > UINT16_MAX ) { 1170 `årštf ( ¡d”r , "MTUoØÏrge: %d\n", ¬g ); 1171  EXIT_FAILURE ; 1174 mtu = ( ušt16_t ) ¬g ; 1178 ià( `¡rcmp ( Ýrg , "random") == 0) 1179 d¡_ty³ = BDADDR_LE_RANDOM ; 1180 ià( `¡rcmp ( Ýrg , "public") == 0) 1181 d¡_ty³ = BDADDR_LE_PUBLIC ; 1183 `årštf ( ¡d”r , 1185  EXIT_FAILURE ; 1189 ià( `¡r2ba ( Ýrg , & d¡_addr ) < 0) { 1190 `årštf ( ¡d”r , "Invalid„emote‡ddress: %s\n", 1191 Ýrg ); 1192  EXIT_FAILURE ; 1195 d¡_addr_giv’ = Œue ; 1199 dev_id = `hci_devid ( Ýrg ); 1200 ià( dev_id < 0) { 1201 `³¼Ü ("Invalid‡dapter"); 1202  EXIT_FAILURE ; 1207 `årštf ( ¡d”r , "Inv®id o±iÚ: %c\n", Ýt ); 1208  EXIT_FAILURE ; 1212 ià(! ¬gc ) { 1213 `u§ge (); 1214  EXIT_SUCCESS ; 1217 ¬gc -ð Ýtšd ; 1218 ¬gv +ð Ýtšd ; 1219 Ýtšd = 0; 1221 ià( ¬gc ) { 1222 `u§ge (); 1223  EXIT_SUCCESS ; 1226 ià( dev_id == -1) 1227 `baýy (& ¤c_addr , BDADDR_ANY ); 1228 ià( `hci_devba ( dev_id , & ¤c_addr ) < 0) { 1229 `³¼Ü ("Adapter‚ot‡vailable"); 1230  EXIT_FAILURE ; 1233 ià(! d¡_addr_giv’ ) { 1234 `årštf ( ¡d”r , "Destination‡ddress„equired!\n"); 1235  EXIT_FAILURE ; 1238 `mašloÝ_š™ (); 1240 fd = `l2ÿp_Ë_©t_cÚÃù (& ¤c_addr , & d¡_addr , d¡_ty³ , £c ); 1241 ià( fd < 0) 1242  EXIT_FAILURE ; 1244 þi = `þ›Á_ü—‹ ( fd , mtu ); 1245 ià(! þi ) { 1246 `þo£ ( fd ); 1247  EXIT_FAILURE ; 1250 ià( `mašloÝ_add_fd ( `fž’o ( ¡dš ), 1251 EPOLLIN | EPOLLRDHUP | EPOLLHUP | EPOLLERR , 1252 ´om±_»ad_cb , þi , NULL ) < 0) { 1253 `årštf ( ¡d”r , "Failedo initialize console\n"); 1254  EXIT_FAILURE ; 1257 `sigem±y£t (& mask ); 1258 `sigadd£t (& mask , SIGINT ); 1259 `sigadd£t (& mask , SIGTERM ); 1261 `mašloÝ_£t_sigÇl (& mask , sigÇl_cb , NULL , NULL); 1263 `´št_´om± (); 1265 `mašloÝ_run (); 1267 `´štf ("\n\nShutting down...\n"); 1269 `þ›Á_de¡roy ( þi ); 1271  EXIT_SUCCESS ; 1272 } } @tools/btgatt-server.c 19 #ifdeà HAVE_CONFIG_H 20  ~ 23  ~<¡dio.h > 24  ~<¡dboÞ.h > 25  ~<¡dšt.h > 26  ~ 27  ~<¡dlib.h > 28  ~ 29  ~ 30  ~<”ºo.h > 32  ~ 33  ~ 34  ~ 35  ~ 36  ~"lib/uuid.h " 38  ~"mÚ™Ü/mašloÝ.h " 39  ~"¤c/sh¬ed/utž.h " 40  ~"¤c/sh¬ed/©t.h " 41  ~"¤c/sh¬ed/queue.h " 42  ~"¤c/sh¬ed/timeout.h " 43  ~"¤c/sh¬ed/g©t-db.h " 44  ~"¤c/sh¬ed/g©t-£rv”.h " 46  #UUID_GAP 0x1800 ) 47  #UUID_GATT 0x1801 ) 48  #UUID_HEART_RATE 0x180d ) 49  #UUID_HEART_RATE_MSRMT 0x2a37 ) 50  #UUID_HEART_RATE_BODY 0x2a38 ) 51  #UUID_HEART_RATE_CTRL 0x2a39 ) 53  #ATT_CID 4 ) 55  #PRLOG (...) \ 57 `´štf ( __VA_ARGS__ ); \ 58 `´št_´om± (); \ 59 } 0) ) 61 #iâdeà MIN 62  #MIN ( a , b è(×è< (bè? (aè: (b)) ) 65  #COLOR_OFF "\x1B[0m" ) 66  #COLOR_RED "\x1B[0;91m" ) 67  #COLOR_GREEN "\x1B[0;92m" ) 68  #COLOR_YELLOW "\x1B[0;93m" ) 69  #COLOR_BLUE "\x1B[0;94m" ) 70  #COLOR_MAGENTA "\x1B[0;95m" ) 71  #COLOR_BOLDGRAY "\x1B[1;30m" ) 72  #COLOR_BOLDWHITE "\x1B[1;37m" ) 74 cÚ¡  g‹¡_deviû_Çme [] = "Very Long Test Device Name For Testing " 76  boÞ gv”bo£ = çl£ ; 78  s£rv” { 79  mfd ; 80  g©t_db * mdb ; 81  bt_g©t_£rv” * mg©t ; 83 ušt8_t * mdeviû_Çme ; 84 size_t mÇme_Ën ; 86 ušt16_t mg©t_svc_chngd_hªdË ; 87 boÞ msvc_chngd_’abËd ; 89 ušt16_t mhr_hªdË ; 90 ušt16_t mhr_m¤mt_hªdË ; 91 ušt16_t mhr_’”gy_ex³nded ; 92 boÞ mhr_visibË ; 93 boÞ mhr_m¤mt_’abËd ; 94  mhr_“_couÁ ; 95  mhr_timeout_id ; 98  $´št_´om± () 100 `´štf ( COLOR_BLUE "[GATT s”v”]" COLOR_OFF "# "); 101 `fæush ( ¡dout ); 102 } } 104  $©t_discÚÃù_cb ( ”r , * u£r_d©a ) 106 `´štf ("Deviû discÚÃùed: %s\n", `¡»¼Ü ( ”r )); 108 `mašloÝ_qu™ (); 109 } } 111  $©t_debug_cb (cÚ¡ * ¡r , * u£r_d©a ) 113 cÚ¡ * ´efix = u£r_d©a ; 115 `PRLOG ( COLOR_BOLDGRAY "%s" COLOR_BOLDWHITE "%s\n" COLOR_OFF , ´efix , 116 ¡r ); 117 } } 119  $g©t_debug_cb (cÚ¡ * ¡r , * u£r_d©a ) 121 cÚ¡ * ´efix = u£r_d©a ; 123 `PRLOG ( COLOR_GREEN "%s%s\n" COLOR_OFF , ´efix , ¡r ); 124 } } 126  $g­_deviû_Çme_»ad_cb ( g©t_db_©Œibu‹ * ©Œib , 127  id , ušt16_t off£t , 128 ušt8_t Ýcode , bdaddr_t * bdaddr , 129 * u£r_d©a ) 131  £rv” *£rv” = u£r_d©a ; 132 ušt8_t ”rÜ = 0; 133 size_t Ën = 0; 134 cÚ¡ ušt8_t * v®ue = NULL ; 136 `PRLOG ("GAP Device Name Read called\n"); 138 Ën = £rv” -> Çme_Ën ; 140 ià( off£t > Ën ) { 141 ”rÜ = BT_ATT_ERROR_INVALID_OFFSET ; 142  dÚe ; 145 Ën -ð off£t ; 146 v®ue = Ën ? & £rv” -> deviû_Çme [ off£t ] : NULL ; 148 dÚe : 149 `g©t_db_©Œibu‹_»ad_»suÉ ( ©Œib , id , ”rÜ , v®ue , Ën ); 150 } } 152  $g­_deviû_Çme_wr™e_cb ( g©t_db_©Œibu‹ * ©Œib , 153  id , ušt16_t off£t , 154 cÚ¡ ušt8_t * v®ue , size_t Ën , 155 ušt8_t Ýcode , bdaddr_t * bdaddr , 156 * u£r_d©a ) 158  £rv” *£rv” = u£r_d©a ; 159 ušt8_t ”rÜ = 0; 161 `PRLOG ("GAP Device Name Write called\n"); 164 ià(!( off£t + Ën )) { 165 `ä“ ( £rv” -> deviû_Çme ); 166 £rv” -> deviû_Çme = NULL ; 167 £rv” -> Çme_Ën = 0; 168  dÚe ; 172 ià( off£t > £rv” -> Çme_Ën ) { 173 ”rÜ = BT_ATT_ERROR_INVALID_OFFSET ; 174  dÚe ; 177 ià( off£t + Ën !ð £rv” -> Çme_Ën ) { 178 ušt8_t * Çme ; 180 Çme = `»®loc ( £rv” -> deviû_Çme , off£t + Ën ); 181 ià(! Çme ) { 182 ”rÜ = BT_ATT_ERROR_INSUFFICIENT_RESOURCES ; 183  dÚe ; 186 £rv” -> deviû_Çme = Çme ; 187 £rv” -> Çme_Ën = off£t + Ën ; 190 ià( v®ue ) 191 `memýy ( £rv” -> deviû_Çme + off£t , v®ue , Ën ); 193 dÚe : 194 `g©t_db_©Œibu‹_wr™e_»suÉ ( ©Œib , id , ”rÜ ); 195 } } 197  $g­_deviû_Çme_ext_´Ý_»ad_cb ( g©t_db_©Œibu‹ * ©Œib , 198  id , ušt16_t off£t , 199 ušt8_t Ýcode , bdaddr_t * bdaddr , 200 * u£r_d©a ) 202 ušt8_t v®ue [2]; 204 `PRLOG ("Device Name Extended Properties Read called\n"); 206 v®ue [0] = BT_GATT_CHRC_EXT_PROP_RELIABLE_WRITE ; 207 v®ue [1] = 0; 209 `g©t_db_©Œibu‹_»ad_»suÉ ( ©Œib , id , 0, v®ue , (value)); 210 } } 212  $g©t_£rviû_chªged_cb ( g©t_db_©Œibu‹ * ©Œib , 213  id , ušt16_t off£t , 214 ušt8_t Ýcode , bdaddr_t * bdaddr , 215 * u£r_d©a ) 217 `PRLOG ("Service Changed Read called\n"); 219 `g©t_db_©Œibu‹_»ad_»suÉ ( ©Œib , id , 0, NULL , 0); 220 } } 222  $g©t_svc_chngd_ccc_»ad_cb ( g©t_db_©Œibu‹ * ©Œib , 223  id , ušt16_t off£t , 224 ušt8_t Ýcode , bdaddr_t * bdaddr , 225 * u£r_d©a ) 227  £rv” *£rv” = u£r_d©a ; 228 ušt8_t v®ue [2]; 230 `PRLOG ("Service Changed CCC Read called\n"); 232 v®ue [0] = £rv” -> svc_chngd_’abËd ? 0x02 : 0x00; 233 v®ue [1] = 0x00; 235 `g©t_db_©Œibu‹_»ad_»suÉ ( ©Œib , id , 0, v®ue , (value)); 236 } } 238  $g©t_svc_chngd_ccc_wr™e_cb ( g©t_db_©Œibu‹ * ©Œib , 239  id , ušt16_t off£t , 240 cÚ¡ ušt8_t * v®ue , size_t Ën , 241 ušt8_t Ýcode , bdaddr_t * bdaddr , 242 * u£r_d©a ) 244  £rv” *£rv” = u£r_d©a ; 245 ušt8_t ecode = 0; 247 `PRLOG ("Service Changed CCC Write called\n"); 249 ià(! v®ue || Ën != 2) { 250 ecode = BT_ATT_ERROR_INVALID_ATTRIBUTE_VALUE_LEN ; 251  dÚe ; 254 ià( off£t ) { 255 ecode = BT_ATT_ERROR_INVALID_OFFSET ; 256  dÚe ; 259 ià( v®ue [0] == 0x00) 260 £rv” -> svc_chngd_’abËd = çl£ ; 261 ià( v®ue [0] == 0x02) 262 £rv” -> svc_chngd_’abËd = Œue ; 264 ecode = 0x80; 266 `PRLOG ("Service Changed Enabled: %s\n", 267 £rv” -> svc_chngd_’abËd ? "true" : "false"); 269 dÚe : 270 `g©t_db_©Œibu‹_wr™e_»suÉ ( ©Œib , id , ecode ); 271 } } 273  $hr_m¤mt_ccc_»ad_cb ( g©t_db_©Œibu‹ * ©Œib , 274  id , ušt16_t off£t , 275 ušt8_t Ýcode , bdaddr_t * bdaddr , 276 * u£r_d©a ) 278  £rv” *£rv” = u£r_d©a ; 279 ušt8_t v®ue [2]; 281 v®ue [0] = £rv” -> hr_m¤mt_’abËd ? 0x01 : 0x00; 282 v®ue [1] = 0x00; 284 `g©t_db_©Œibu‹_»ad_»suÉ ( ©Œib , id , 0, v®ue , 2); 285 } } 287  boÞ $hr_m¤mt_cb (* u£r_d©a ) 289  £rv” *£rv” = u£r_d©a ; 290 boÞ ex³nded_´e£Á = !( £rv” -> hr_“_couÁ % 10); 291 ušt16_t Ën = 2; 292 ušt8_t pdu [4]; 293 ušt32_t cur_“ ; 295 pdu [0] = 0x06; 296 pdu [1] = 90 + ( `¿nd () % 40); 298 ià( ex³nded_´e£Á ) { 299 pdu [0] |= 0x08; 300 `put_Ë16 ( £rv” -> hr_’”gy_ex³nded , pdu + 2); 301 Ën += 2; 304 `bt_g©t_£rv”_£nd_nÙifiÿtiÚ ( £rv” -> g©t , 305 £rv” -> hr_m¤mt_hªdË , 306 pdu , Ën ); 309 cur_“ = £rv” -> hr_’”gy_ex³nded ; 310 £rv” -> hr_’”gy_ex³nded = `MIN ( UINT16_MAX , cur_“ + 10); 311 £rv” -> hr_“_couÁ ++; 313  Œue ; 314 } } 316  $upd©e_hr_m¤mt_simuÏtiÚ ( £rv” *server) 318 ià(! £rv” -> hr_m¤mt_’abËd || !£rv”-> hr_visibË ) { 319 `timeout_»move ( £rv” -> hr_timeout_id ); 323 £rv” -> hr_timeout_id = `timeout_add (1000, hr_m¤mt_cb , s”v”, NULL ); 324 } } 326  $hr_m¤mt_ccc_wr™e_cb ( g©t_db_©Œibu‹ * ©Œib , 327  id , ušt16_t off£t , 328 cÚ¡ ušt8_t * v®ue , size_t Ën , 329 ušt8_t Ýcode , bdaddr_t * bdaddr , 330 * u£r_d©a ) 332  £rv” *£rv” = u£r_d©a ; 333 ušt8_t ecode = 0; 335 ià(! v®ue || Ën != 2) { 336 ecode = BT_ATT_ERROR_INVALID_ATTRIBUTE_VALUE_LEN ; 337  dÚe ; 340 ià( off£t ) { 341 ecode = BT_ATT_ERROR_INVALID_OFFSET ; 342  dÚe ; 345 ià( v®ue [0] == 0x00) 346 £rv” -> hr_m¤mt_’abËd = çl£ ; 347 ià( v®ue [0] == 0x01) { 348 ià( £rv” -> hr_m¤mt_’abËd ) { 349 `PRLOG ("HR Measurement Already Enabled\n"); 350  dÚe ; 353 £rv” -> hr_m¤mt_’abËd = Œue ; 355 ecode = 0x80; 357 `PRLOG ("HR: Measurement Enabled: %s\n", 358 £rv” -> hr_m¤mt_’abËd ? "true" : "false"); 360 `upd©e_hr_m¤mt_simuÏtiÚ ( £rv” ); 362 dÚe : 363 `g©t_db_©Œibu‹_wr™e_»suÉ ( ©Œib , id , ecode ); 364 } } 366  $hr_cÚŒÞ_pošt_wr™e_cb ( g©t_db_©Œibu‹ * ©Œib , 367  id , ušt16_t off£t , 368 cÚ¡ ušt8_t * v®ue , size_t Ën , 369 ušt8_t Ýcode , bdaddr_t * bdaddr , 370 * u£r_d©a ) 372  £rv” *£rv” = u£r_d©a ; 373 ušt8_t ecode = 0; 375 ià(! v®ue || Ën != 1) { 376 ecode = BT_ATT_ERROR_INVALID_ATTRIBUTE_VALUE_LEN ; 377  dÚe ; 380 ià( off£t ) { 381 ecode = BT_ATT_ERROR_INVALID_OFFSET ; 382  dÚe ; 385 ià( v®ue [0] == 1) { 386 `PRLOG ("HR: Energy Expended value„eset\n"); 387 £rv” -> hr_’”gy_ex³nded = 0; 390 dÚe : 391 `g©t_db_©Œibu‹_wr™e_»suÉ ( ©Œib , id , ecode ); 392 } } 394  $cÚfœm_wr™e ( g©t_db_©Œibu‹ * ©Œ ,  ”r , 395 * u£r_d©a ) 397 ià(! ”r ) 400 `årštf ( ¡d”r , "E¼Ü cachšg‡‰ribu‹ %°-ƒ¼: %d\n", ©Œ , ”r ); 401 `ex™ (1); 402 } } 404  $pÝuÏ‹_g­_£rviû ( £rv” *server) 406 bt_uuid_t uuid ; 407  g©t_db_©Œibu‹ * £rviû , * tmp ; 408 ušt16_t ­³¬ªû ; 411 `bt_uuid16_ü—‹ (& uuid , UUID_GAP ); 412 £rviû = `g©t_db_add_£rviû ( £rv” -> db , & uuid , Œue , 6); 418 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_DEVICE_NAME ); 419 `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , & uuid , 420 BT_ATT_PERM_READ | BT_ATT_PERM_WRITE , 421 BT_GATT_CHRC_PROP_READ , 422 g­_deviû_Çme_»ad_cb , 423 g­_deviû_Çme_wr™e_cb , 424 £rv” ); 426 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_EXT_PROPER_UUID ); 427 `g©t_db_£rviû_add_desütÜ ( £rviû , & uuid , BT_ATT_PERM_READ , 428 g­_deviû_Çme_ext_´Ý_»ad_cb , 429 NULL , £rv” ); 435 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_APPEARANCE ); 436 tmp = `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , & uuid , 437 BT_ATT_PERM_READ , 438 BT_GATT_CHRC_PROP_READ , 439 NULL , NULL, £rv” ); 445 `put_Ë16 (128, & ­³¬ªû ); 446 `g©t_db_©Œibu‹_wr™e ( tmp , 0, (*è& ­³¬ªû , 447 ( ­³¬ªû ), 448 BT_ATT_OP_WRITE_REQ , 449 NULL , cÚfœm_wr™e , 450 NULL ); 452 `g©t_db_£rviû_£t_aùive ( £rviû , Œue ); 453 } } 455  $pÝuÏ‹_g©t_£rviû ( £rv” *server) 457 bt_uuid_t uuid ; 458  g©t_db_©Œibu‹ * £rviû , * svc_chngd ; 461 `bt_uuid16_ü—‹ (& uuid , UUID_GATT ); 462 £rviû = `g©t_db_add_£rviû ( £rv” -> db , & uuid , Œue , 4); 464 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_SERVICE_CHANGED ); 465 svc_chngd = `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , & uuid , 466 BT_ATT_PERM_READ , 467 BT_GATT_CHRC_PROP_READ | BT_GATT_CHRC_PROP_INDICATE , 468 g©t_£rviû_chªged_cb , 469 NULL , £rv” ); 470 £rv” -> g©t_svc_chngd_hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( svc_chngd ); 472 `bt_uuid16_ü—‹ (& uuid , GATT_CLIENT_CHARAC_CFG_UUID ); 473 `g©t_db_£rviû_add_desütÜ ( £rviû , & uuid , 474 BT_ATT_PERM_READ | BT_ATT_PERM_WRITE , 475 g©t_svc_chngd_ccc_»ad_cb , 476 g©t_svc_chngd_ccc_wr™e_cb , £rv” ); 478 `g©t_db_£rviû_£t_aùive ( £rviû , Œue ); 479 } } 481  $pÝuÏ‹_hr_£rviû ( £rv” *server) 483 bt_uuid_t uuid ; 484  g©t_db_©Œibu‹ * £rviû , * hr_m¤mt , * body ; 485 ušt8_t body_loc = 1; 488 `bt_uuid16_ü—‹ (& uuid , UUID_HEART_RATE ); 489 £rviû = `g©t_db_add_£rviû ( £rv” -> db , & uuid , Œue , 8); 490 £rv” -> hr_hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( £rviû ); 493 `bt_uuid16_ü—‹ (& uuid , UUID_HEART_RATE_MSRMT ); 494 hr_m¤mt = `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , & uuid , 495 BT_ATT_PERM_NONE , 496 BT_GATT_CHRC_PROP_NOTIFY , 497 NULL , NULL, NULL); 498 £rv” -> hr_m¤mt_hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( hr_m¤mt ); 500 `bt_uuid16_ü—‹ (& uuid , GATT_CLIENT_CHARAC_CFG_UUID ); 501 `g©t_db_£rviû_add_desütÜ ( £rviû , & uuid , 502 BT_ATT_PERM_READ | BT_ATT_PERM_WRITE , 503 hr_m¤mt_ccc_»ad_cb , 504 hr_m¤mt_ccc_wr™e_cb , £rv” ); 510 `bt_uuid16_ü—‹ (& uuid , UUID_HEART_RATE_BODY ); 511 body = `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , & uuid , 512 BT_ATT_PERM_READ , 513 BT_GATT_CHRC_PROP_READ , 514 NULL , NULL, £rv” ); 515 `g©t_db_©Œibu‹_wr™e ( body , 0, (*è& body_loc , (body_loc), 516 BT_ATT_OP_WRITE_REQ , 517 NULL , cÚfœm_wr™e , 518 NULL ); 521 `bt_uuid16_ü—‹ (& uuid , UUID_HEART_RATE_CTRL ); 522 `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû , & uuid , 523 BT_ATT_PERM_WRITE , 524 BT_GATT_CHRC_PROP_WRITE , 525 NULL , hr_cÚŒÞ_pošt_wr™e_cb , 526 £rv” ); 528 ià( £rv” -> hr_visibË ) 529 `g©t_db_£rviû_£t_aùive ( £rviû , Œue ); 530 } } 532  $pÝuÏ‹_db ( £rv” *server) 534 `pÝuÏ‹_g­_£rviû ( £rv” ); 535 `pÝuÏ‹_g©t_£rviû ( £rv” ); 536 `pÝuÏ‹_hr_£rviû ( £rv” ); 537 } } 539  £rv” * $£rv”_ü—‹ ( fd , ušt16_t mtu , boÞ hr_visibË ) 541  £rv” *server; 542  bt_©t * ©t ; 543 size_t Çme_Ën = `¡¾’ ( ‹¡_deviû_Çme ); 545 £rv” = `Ãw0 (server, 1); 546 ià(! £rv” ) { 547 `årštf ( ¡d”r , "Failedo‡llocate memory for server\n"); 548  NULL ; 551 ©t = `bt_©t_Ãw ( fd ); 552 ià(! ©t ) { 553 `årštf ( ¡d”r , "Failedo initialze ATTransport†ayer\n"); 554  çž ; 557 ià(! `bt_©t_£t_þo£_Ú_uÄef ( ©t , Œue )) { 558 `årštf ( ¡d”r , "Failedo set up ATTransport†ayer\n"); 559  çž ; 562 ià(! `bt_©t_»gi¡”_discÚÃù ( ©t , ©t_discÚÃù_cb , NULL , NULL)) { 563 `årštf ( ¡d”r , "Failedo set ATT disconnect handler\n"); 564  çž ; 567 £rv” -> Çme_Ën =‚ame_len + 1; 568 £rv” -> deviû_Çme = `m®loc ( Çme_Ën + 1); 569 ià(! £rv” -> deviû_Çme ) { 570 `årštf ( ¡d”r , "Failedo‡llocate memory for device‚ame\n"); 571  çž ; 574 `memýy ( £rv” -> deviû_Çme , ‹¡_deviû_Çme , Çme_Ën ); 575 £rv” -> deviû_Çme [ Çme_Ën ] = '\0'; 577 £rv” -> fd = fd; 578 £rv” -> db = `g©t_db_Ãw (); 579 ià(! £rv” -> db ) { 580 `årštf ( ¡d”r , "Failedo create GATT database\n"); 581  çž ; 584 £rv” -> g©t = `bt_g©t_£rv”_Ãw (£rv”-> db , ©t , mtu ); 585 ià(! £rv” -> g©t ) { 586 `årštf ( ¡d”r , "Failedo create GATT server\n"); 587  çž ; 590 £rv” -> hr_visibË = hr_visible; 592 ià( v”bo£ ) { 593 `bt_©t_£t_debug ( ©t , ©t_debug_cb , "©t: ", NULL ); 594 `bt_g©t_£rv”_£t_debug ( £rv” -> g©t , g©t_debug_cb , 595 "£rv”: ", NULL ); 599 `¤ªd ( `time ( NULL )); 602 `bt_©t_uÄef ( ©t ); 603 `pÝuÏ‹_db ( £rv” ); 605  £rv” ; 607 çž : 608 `g©t_db_uÄef ( £rv” -> db ); 609 `ä“ ( £rv” -> deviû_Çme ); 610 `bt_©t_uÄef ( ©t ); 611 `ä“ ( £rv” ); 613  NULL ; 614 } } 616  $£rv”_de¡roy ( £rv” *server) 618 `timeout_»move ( £rv” -> hr_timeout_id ); 619 `bt_g©t_£rv”_uÄef ( £rv” -> g©t ); 620 `g©t_db_uÄef ( £rv” -> db ); 621 } } 623  $u§ge () 625 `´štf ("btgatt-server\n"); 626 `´štf ("Usage:\n\tbtgatt-server [options]\n"); 628 `´štf ("Options:\n" 636 } } 638  ÝtiÚ gmaš_ÝtiÚs [] = { 648  $l2ÿp_Ë_©t_li¡’_ªd_acû± ( bdaddr_t * ¤c ,  £c ) 650  sk , nsk ; 651  sockaddr_l2 ¤ÿddr , addr ; 652 sockËn_t ÝŽ’ ; 653  bt_£cur™y bt£c ; 654  ba [18]; 656 sk = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_L2CAP ); 657 ià( sk < 0) { 658 `³¼Ü ("Failedo create L2CAP socket"); 663 `mem£t (& ¤ÿddr , 0, (srcaddr)); 664 ¤ÿddr . l2_çmžy = AF_BLUETOOTH ; 665 ¤ÿddr . l2_cid = `htobs ( ATT_CID ); 666 ¤ÿddr . l2_bdaddr_ty³ = 0; 667 `baýy (& ¤ÿddr . l2_bdaddr , ¤c ); 669 ià( `bšd ( sk , ( sockaddr *è& ¤ÿddr , (srcaddr)) < 0) { 670 `³¼Ü ("Failedo bind L2CAP socket"); 671  çž ; 675 `mem£t (& bt£c , 0, (btsec)); 676 bt£c . Ëv– = £c ; 677 ià( `£tsockÝt ( sk , SOL_BLUETOOTH , BT_SECURITY , & bt£c , 678 ( bt£c )) != 0) { 679 `årštf ( ¡d”r , "Failedo set L2CAP security†evel\n"); 680  çž ; 683 ià( `li¡’ ( sk , 10) < 0) { 684 `³¼Ü ("Listening on socket failed"); 685  çž ; 688 `´štf ("Started†istening on ATT channel. Waiting for connections\n"); 690 `mem£t (& addr , 0, (addr)); 691 ÝŽ’ = ( addr ); 692 nsk = `acû± ( sk , ( sockaddr *è& addr , & ÝŽ’ ); 693 ià( nsk < 0) { 694 `³¼Ü ("Accept failed"); 695  çž ; 698 `ba2¡r (& addr . l2_bdaddr , ba ); 699 `´štf ("CÚÃù from %s\n", ba ); 700 `þo£ ( sk ); 702  nsk ; 704 çž : 705 `þo£ ( sk ); 707 } } 709  $nÙify_u§ge () 711 `´štf ("Usage:‚otify [options] \n" 716 } } 718  ÝtiÚ gnÙify_ÝtiÚs [] = { 723  boÞ $·r£_¬gs (* ¡r ,  ex³ùed_¬gc , ** ¬gv , * ¬gc ) 725 ** ­ ; 727  ­ = ¬gv ; (*­ = `¡r£p (& ¡r , " \t")è!ð NULL ;) { 728 ià(** ­ == '\0') 731 (* ¬gc )++; 732 ­ ++; 734 ià(* ¬gc > ex³ùed_¬gc ) 735  çl£ ; 738  Œue ; 739 } } 741  $cÚf_cb (* u£r_d©a ) 743 `PRLOG ("Received confirmation\n"); 744 } } 746  $cmd_nÙify ( £rv” *£rv”, * cmd_¡r ) 748  Ýt , i ; 749 * ¬gvbuf [516]; 750 ** ¬gv = ¬gvbuf ; 751  ¬gc = 1; 752 ušt16_t hªdË ; 753 * ’d±r = NULL ; 754  Ëngth ; 755 ušt8_t * v®ue = NULL ; 756 boÞ šdiÿ‹ = çl£ ; 758 ià(! `·r£_¬gs ( cmd_¡r , 514, ¬gv + 1, & ¬gc )) { 759 `´štf ("Too many‡rguments\n"); 760 `nÙify_u§ge (); 764 Ýtšd = 0; 765 ¬gv [0] = "notify"; 766 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+i", nÙify_ÝtiÚs , 767 NULL )) != -1) { 768  Ýt ) { 770 šdiÿ‹ = Œue ; 773 `nÙify_u§ge (); 778 ¬gc -ð Ýtšd ; 779 ¬gv +ð Ýtšd ; 781 ià( ¬gc < 1) { 782 `nÙify_u§ge (); 786 hªdË = `¡¹Þ ( ¬gv [0], & ’d±r , 16); 787 ià(! ’d±r || *’d±¸!ð'\0' || ! hªdË ) { 788 `´štf ("Inv®id hªdË: %s\n", ¬gv [0]); 792 Ëngth = ¬gc - 1; 794 ià( Ëngth > 0) { 795 ià( Ëngth > UINT16_MAX ) { 796 `´štf ("Valueoo†ong\n"); 800 v®ue = `m®loc ( Ëngth ); 801 ià(! v®ue ) { 802 `´štf ("Failedo construct value\n"); 806  i = 1; i < ¬gc ; i++) { 807 ià( `¡¾’ ( ¬gv [ i ]) != 2) { 808 `´štf ("Invalid value byte: %s\n", 809 ¬gv [ i ]); 810  dÚe ; 813 v®ue [ i -1] = `¡¹Þ ( ¬gv [i], & ’d±r , 16); 814 ià( ’d±r =ð ¬gv [ i ] || *endptr != '\0' 815 || ”ºo =ð ERANGE ) { 816 `´štf ("Invalid value byte: %s\n", 817 ¬gv [ i ]); 818  dÚe ; 823 ià( šdiÿ‹ ) { 824 ià(! `bt_g©t_£rv”_£nd_šdiÿtiÚ ( £rv” -> g©t , hªdË , 825 v®ue , Ëngth , 826 cÚf_cb , NULL , NULL)) 827 `´štf ("Failedo initiate indication\n"); 828 } ià(! `bt_g©t_£rv”_£nd_nÙifiÿtiÚ ( £rv” -> g©t , hªdË , 829 v®ue , Ëngth )) 830 `´štf ("Failedo initiate‚otification\n"); 832 dÚe : 833 `ä“ ( v®ue ); 834 } } 836  $h—¹_¿‹_u§ge () 838 `´štf ("Usage: heart-rate on|off\n"); 839 } } 841  $cmd_h—¹_¿‹ ( £rv” *£rv”, * cmd_¡r ) 843 boÞ ’abË ; 844 ušt8_t pdu [4]; 845  g©t_db_©Œibu‹ * ©Œ ; 847 ià(! cmd_¡r ) { 848 `h—¹_¿‹_u§ge (); 852 ià( `¡rcmp ( cmd_¡r , "on") == 0) 853 ’abË = Œue ; 854 ià( `¡rcmp ( cmd_¡r , "off") == 0) 855 ’abË = çl£ ; 857 `h—¹_¿‹_u§ge (); 861 ià( ’abË =ð £rv” -> hr_visibË ) { 862 `´štf ("Heart Rate Service‡lready %s\n", 863 ’abË ? "visible" : "hidden"); 867 £rv” -> hr_visibË = ’abË ; 868 ©Œ = `g©t_db_g‘_©Œibu‹ ( £rv” -> db , s”v”-> hr_hªdË ); 869 `g©t_db_£rviû_£t_aùive ( ©Œ , £rv” -> hr_visibË ); 870 `upd©e_hr_m¤mt_simuÏtiÚ ( £rv” ); 872 ià(! £rv” -> svc_chngd_’abËd ) 875 `put_Ë16 ( £rv” -> hr_hªdË , pdu ); 876 `put_Ë16 ( £rv” -> hr_hªdË + 7, pdu + 2); 878 £rv” -> hr_m¤mt_’abËd = çl£ ; 879 `upd©e_hr_m¤mt_simuÏtiÚ ( £rv” ); 881 `bt_g©t_£rv”_£nd_šdiÿtiÚ ( £rv” -> g©t , 882 £rv” -> g©t_svc_chngd_hªdË , 883 pdu , 4, cÚf_cb , NULL , NULL); 884 } } 886  $´št_uuid (cÚ¡ bt_uuid_t * uuid ) 888  uuid_¡r [ MAX_LEN_UUID_STR ]; 889 bt_uuid_t uuid128 ; 891 `bt_uuid_to_uuid128 ( uuid , & uuid128 ); 892 `bt_uuid_to_¡ršg (& uuid128 , uuid_¡r , (uuid_str)); 894 `´štf ("%s\n", uuid_¡r ); 895 } } 897  $´št_šþ ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 899  £rv” *£rv” = u£r_d©a ; 900 ušt16_t hªdË , ¡¬t , ’d ; 901  g©t_db_©Œibu‹ * £rviû ; 902 bt_uuid_t uuid ; 904 ià(! `g©t_db_©Œibu‹_g‘_šþ_d©a ( ©Œ , & hªdË , & ¡¬t , & ’d )) 907 £rviû = `g©t_db_g‘_©Œibu‹ ( £rv” -> db , ¡¬t ); 908 ià(! £rviû ) 911 `g©t_db_©Œibu‹_g‘_£rviû_uuid ( £rviû , & uuid ); 913 `´štf ("\ˆ " COLOR_GREEN "šþude" COLOR_OFF " - handle: " 915 "uuid: ", hªdË , ¡¬t , ’d ); 916 `´št_uuid (& uuid ); 917 } } 919  $´št_desc ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 921 `´štf ("\t\ˆ " COLOR_MAGENTA "desü" COLOR_OFF 923 `g©t_db_©Œibu‹_g‘_hªdË ( ©Œ )); 924 `´št_uuid ( `g©t_db_©Œibu‹_g‘_ty³ ( ©Œ )); 925 } } 927  $´št_chrc ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 929 ušt16_t hªdË , v®ue_hªdË ; 930 ušt8_t ´Ý”t›s ; 931 bt_uuid_t uuid ; 933 ià(! `g©t_db_©Œibu‹_g‘_ch¬_d©a ( ©Œ , & hªdË , 934 & v®ue_hªdË , 935 & ´Ý”t›s , 936 & uuid )) 939 `´štf ("\ˆ " COLOR_YELLOW "ch¬ac" COLOR_OFF 942 hªdË , v®ue_hªdË , ´Ý”t›s ); 943 `´št_uuid (& uuid ); 945 `g©t_db_£rviû_fÜ—ch_desc ( ©Œ , ´št_desc , NULL ); 946 } } 948  $´št_£rviû ( g©t_db_©Œibu‹ * ©Œ , * u£r_d©a ) 950  £rv” *£rv” = u£r_d©a ; 951 ušt16_t ¡¬t , ’d ; 952 boÞ ´im¬y ; 953 bt_uuid_t uuid ; 955 ià(! `g©t_db_©Œibu‹_g‘_£rviû_d©a ( ©Œ , & ¡¬t , & ’d , & ´im¬y , 956 & uuid )) 959 `´štf ( COLOR_RED "£rviû" COLOR_OFF " - start: 0x%04x, " 961 ¡¬t , ’d , ´im¬y ? "primary" : "secondary"); 962 `´št_uuid (& uuid ); 964 `g©t_db_£rviû_fÜ—ch_šþ ( ©Œ , ´št_šþ , £rv” ); 965 `g©t_db_£rviû_fÜ—ch_ch¬ ( ©Œ , ´št_chrc , NULL ); 967 `´štf ("\n"); 968 } } 970  $cmd_£rviûs ( £rv” *£rv”, * cmd_¡r ) 972 `g©t_db_fÜ—ch_£rviû ( £rv” -> db , NULL , ´št_£rviû , server); 973 } } 975  cmd_h–p ( £rv” *£rv”, * cmd_¡r ); 977 (* tcommªd_func_t )( t£rv” *£rv”, * tcmd_¡r ); 980 * cmd ; 981 commªd_func_t func ; 982 * doc ; 983 } commªd [] = { 984 { "h–p", cmd_h–p , "\tDisplay help message" }, 985 { "nÙify", cmd_nÙify , "\tSend handle-value‚otification" }, 986 { "h—¹-¿‹", cmd_h—¹_¿‹ , "\tHide/Unhide Heart Rate Service" }, 987 { "£rviûs", cmd_£rviûs , "\tEnumerate‡ll services" }, 989 } }; 991  $cmd_h–p ( £rv” *£rv”, * cmd_¡r ) 993  i ; 995 `´štf ("Commands:\n"); 996  i = 0; commªd [i]. cmd ; i++) 997 `´štf ("\t%-15s\t%s\n", commªd [ i ]. cmd , commªd[i]. doc ); 998 } } 1000  $´om±_»ad_cb ( fd , ušt32_t ev’ts , * u£r_d©a ) 1002 ssize_t »ad ; 1003 size_t Ën = 0; 1004 * lše = NULL ; 1005 * cmd = NULL , * ¬gs ; 1006  £rv” *£rv” = u£r_d©a ; 1007  i ; 1009 ià( ev’ts & ( EPOLLRDHUP | EPOLLHUP | EPOLLERR )) { 1010 `mašloÝ_qu™ (); 1014 »ad = `g‘lše (& lše , & Ën , ¡dš ); 1015 ià( »ad < 0) 1018 ià( »ad <= 1) { 1019 `cmd_h–p ( £rv” , NULL ); 1020 `´št_´om± (); 1024 lše [ »ad -1] = '\0'; 1025 ¬gs = lše ; 1027 ( cmd = `¡r£p (& ¬gs , " \t"))) 1028 ià(* cmd != '\0') 1031 ià(! cmd ) 1032  çžed ; 1034  i = 0; commªd [i]. cmd ; i++) { 1035 ià( `¡rcmp ( commªd [ i ]. cmd , cmd) == 0) 1039 ià( commªd [ i ]. cmd ) 1040 commªd [ i ]. `func ( £rv” , ¬gs ); 1042 `årštf ( ¡d”r , "UnknowÀcommªd: %s\n", lše ); 1044 çžed : 1045 `´št_´om± (); 1047 `ä“ ( lše ); 1048 } } 1050  $sigÇl_cb ( signum , * u£r_d©a ) 1052  signum ) { 1053  SIGINT : 1054  SIGTERM : 1055 `mašloÝ_qu™ (); 1060 } } 1062  $maš ( ¬gc , * ¬gv []) 1064  Ýt ; 1065 bdaddr_t ¤c_addr ; 1066  dev_id = -1; 1067  fd ; 1068  £c = BT_SECURITY_LOW ; 1069 ušt16_t mtu = 0; 1070 sig£t_t mask ; 1071 boÞ hr_visibË = çl£ ; 1072  £rv” *server; 1074 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+hvrs:m:i:", 1075 maš_ÝtiÚs , NULL )) != -1) { 1076  Ýt ) { 1078 `u§ge (); 1079  EXIT_SUCCESS ; 1081 v”bo£ = Œue ; 1084 hr_visibË = Œue ; 1087 ià( `¡rcmp ( Ýrg , "low") == 0) 1088 £c = BT_SECURITY_LOW ; 1089 ià( `¡rcmp ( Ýrg , "medium") == 0) 1090 £c = BT_SECURITY_MEDIUM ; 1091 ià( `¡rcmp ( Ýrg , "high") == 0) 1092 £c = BT_SECURITY_HIGH ; 1094 `årštf ( ¡d”r , "Invalid security†evel\n"); 1095  EXIT_FAILURE ; 1099  ¬g ; 1101 ¬g = `©oi ( Ýrg ); 1102 ià( ¬g <= 0) { 1103 `årštf ( ¡d”r , "Inv®id MTU: %d\n", ¬g ); 1104  EXIT_FAILURE ; 1107 ià( ¬g > UINT16_MAX ) { 1108 `årštf ( ¡d”r , "MTUoØÏrge: %d\n", ¬g ); 1109  EXIT_FAILURE ; 1112 mtu = ( ušt16_t è ¬g ; 1116 dev_id = `hci_devid ( Ýrg ); 1117 ià( dev_id < 0) { 1118 `³¼Ü ("Invalid‡dapter"); 1119  EXIT_FAILURE ; 1124 `årštf ( ¡d”r , "Inv®id o±iÚ: %c\n", Ýt ); 1125  EXIT_FAILURE ; 1129 ¬gc -ð Ýtšd ; 1130 ¬gv -ð Ýtšd ; 1131 Ýtšd = 0; 1133 ià( ¬gc ) { 1134 `u§ge (); 1135  EXIT_SUCCESS ; 1138 ià( dev_id == -1) 1139 `baýy (& ¤c_addr , BDADDR_ANY ); 1140 ià( `hci_devba ( dev_id , & ¤c_addr ) < 0) { 1141 `³¼Ü ("Adapter‚ot‡vailable"); 1142  EXIT_FAILURE ; 1145 fd = `l2ÿp_Ë_©t_li¡’_ªd_acû± (& ¤c_addr , £c ); 1146 ià( fd < 0) { 1147 `årštf ( ¡d”r , "Failedo‡ccept L2CAP ATT connection\n"); 1148  EXIT_FAILURE ; 1151 `mašloÝ_š™ (); 1153 £rv” = `£rv”_ü—‹ ( fd , mtu , hr_visibË ); 1154 ià(! £rv” ) { 1155 `þo£ ( fd ); 1156  EXIT_FAILURE ; 1159 ià( `mašloÝ_add_fd ( `fž’o ( ¡dš ), 1160 EPOLLIN | EPOLLRDHUP | EPOLLHUP | EPOLLERR , 1161 ´om±_»ad_cb , £rv” , NULL ) < 0) { 1162 `årštf ( ¡d”r , "Failedo initialize console\n"); 1163 `£rv”_de¡roy ( £rv” ); 1165  EXIT_FAILURE ; 1168 `´štf ("Running GATT server\n"); 1170 `sigem±y£t (& mask ); 1171 `sigadd£t (& mask , SIGINT ); 1172 `sigadd£t (& mask , SIGTERM ); 1174 `mašloÝ_£t_sigÇl (& mask , sigÇl_cb , NULL , NULL); 1176 `´št_´om± (); 1178 `mašloÝ_run (); 1180 `´štf ("\n\nShutting down...\n"); 1182 `£rv”_de¡roy ( £rv” ); 1184  EXIT_SUCCESS ; 1185 } } @tools/btinfo.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<ùy³.h > 30  ~<¡dio.h > 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 34  ~ 35  ~ 36  ~ 38  ~"mÚ™Ü/mašloÝ.h " 39  ~"mÚ™Ü/bt.h " 40  ~"¤c/sh¬ed/timeout.h " 41  ~"¤c/sh¬ed/utž.h " 42  ~"¤c/sh¬ed/hci.h " 44  #BTPROTO_HCI 1 ) 46  shci_dev_¡©s { 47 ušt32_t m”r_rx ; 48 ušt32_t m”r_tx ; 49 ušt32_t mcmd_tx ; 50 ušt32_t mevt_rx ; 51 ušt32_t maþ_tx ; 52 ušt32_t maþ_rx ; 53 ušt32_t msco_tx ; 54 ušt32_t msco_rx ; 55 ušt32_t mby‹_rx ; 56 ušt32_t mby‹_tx ; 59  shci_dev_šfo { 60 ušt16_t mdev_id ; 61  mÇme [8]; 62 ušt8_t mbdaddr [6]; 63 ušt32_t mæags ; 64 ušt8_t mty³ ; 65 ušt8_t mã©u»s [8]; 66 ušt32_t mpkt_ty³ ; 67 ušt32_t mlšk_pÞicy ; 68 ušt32_t mlšk_mode ; 69 ušt16_t maþ_mtu ; 70 ušt16_t maþ_pkts ; 71 ušt16_t msco_mtu ; 72 ušt16_t msco_pkts ; 73  hci_dev_¡©s m¡© ; 76  #HCIDEVUP `_IOW ('H', 201, ) ) 77  #HCIDEVDOWN `_IOW ('H', 202, ) ) 78  #HCIGETDEVINFO `_IOR ('H', 211, ) ) 80  #HCI_UP (1 << 0) ) 82  #HCI_BREDR 0x00 ) 83  #HCI_AMP 0x01 ) 85  hci_dev_šfo ghci_šfo ; 86  ušt8_t ghci_ty³ ; 87  bt_hci * ghci_dev ; 89  boÞ g»£t_Ú_š™ = çl£ ; 90  boÞ g»£t_Ú_shutdown = çl£ ; 92  boÞ $shutdown_timeout (* u£r_d©a ) 94 `mašloÝ_qu™ (); 96  çl£ ; 97 } } 99  $shutdown_com¶‘e (cÚ¡ * d©a , ušt8_t size , * u£r_d©a ) 101  id = `PTR_TO_UINT ( u£r_d©a ); 103 `timeout_»move ( id ); 104 `mašloÝ_qu™ (); 105 } } 107  $shutdown_deviû () 109  id ; 111 `bt_hci_æush ( hci_dev ); 113 ià( »£t_Ú_shutdown ) { 114 id = `timeout_add (5000, shutdown_timeout , NULL , NULL); 116 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_RESET , NULL , 0, 117 shutdown_com¶‘e , `UINT_TO_PTR ( id ), NULL ); 119 `mašloÝ_qu™ (); 120 } } 122  $loÿl_v”siÚ_ÿÎback (cÚ¡ * d©a , ušt8_t size , 123 * u£r_d©a ) 125 cÚ¡  bt_hci_r¥_»ad_loÿl_v”siÚ * r¥ = d©a ; 127 `´štf ("HCI v”siÚ: %u\n", r¥ -> hci_v” ); 128 `´štf ("HCI„evisiÚ: %u\n", `Ë16_to_ýu ( r¥ -> hci_»v )); 130  hci_ty³ ) { 131  HCI_BREDR : 132 `´štf ("LMP v”siÚ: %u\n", r¥ -> lmp_v” ); 133 `´štf ("LMP subv”siÚ: %u\n", `Ë16_to_ýu ( r¥ -> lmp_subv” )); 135  HCI_AMP : 136 `´štf ("PAL v”siÚ: %u\n", r¥ -> lmp_v” ); 137 `´štf ("PAL subv”siÚ: %u\n", `Ë16_to_ýu ( r¥ -> lmp_subv” )); 141 `´štf ("Mªuçùu»r: %u\n", `Ë16_to_ýu ( r¥ -> mªuçùu»r )); 142 } } 144  $loÿl_commªds_ÿÎback (cÚ¡ * d©a , ušt8_t size , 145 * u£r_d©a ) 147 `shutdown_deviû (); 148 } } 150  $loÿl_ã©u»s_ÿÎback (cÚ¡ * d©a , ušt8_t size , 151 * u£r_d©a ) 153 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_READ_LOCAL_COMMANDS , NULL , 0, 154 loÿl_commªds_ÿÎback , NULL , NULL); 155 } } 157  boÞ $cmd_loÿl ( ¬gc , * ¬gv []) 159 ià( »£t_Ú_š™ ) 160 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_RESET , NULL , 0, 161 NULL , NULL, NULL); 163 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_READ_LOCAL_VERSION , NULL , 0, 164 loÿl_v”siÚ_ÿÎback , NULL , NULL); 166 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_READ_LOCAL_FEATURES , NULL , 0, 167 loÿl_ã©u»s_ÿÎback , NULL , NULL); 169  Œue ; 170 } } 172  $boÞ (* tcmd_func_t )( t¬gc , * t¬gv []); 175 cÚ¡ * Çme ; 176 cmd_func_t func ; 177 cÚ¡ * h–p ; 178 } cmd_bË [] = { 179 { "loÿl", cmd_loÿl , "Print†ocal controller details" }, 181 } }; 183  $sigÇl_ÿÎback ( signum , * u£r_d©a ) 185  boÞ ‹rmš©ed = çl£ ; 187  signum ) { 188  SIGINT : 189  SIGTERM : 190 ià(! ‹rmš©ed ) { 191 `shutdown_deviû (); 192 ‹rmš©ed = Œue ; 196 } } 198  $u§ge () 200  i ; 202 `´štf ("btinfo - Bluetooth deviceestingool\n" 204 `´štf ("\tbtinfo [options] \n"); 205 `´štf ("options:\n" 208 `´štf ("commands:\n"); 209  i = 0; cmd_bË [i]. Çme ; i++) 210 `´štf ("\t%-25s%s\n", cmd_bË [ i ]. Çme , cmd_bË[i]. h–p ); 211 } } 213 cÚ¡  ÝtiÚ gmaš_ÝtiÚs [] = { 214 { "šdex", »quœed_¬gum’t , NULL , 'i' }, 215 { "»£t", no_¬gum’t , NULL , 'r' }, 216 { "¿w", no_¬gum’t , NULL , 'R' }, 217 { "v”siÚ", no_¬gum’t , NULL , 'v' }, 218 { "h–p", no_¬gum’t , NULL , 'h' }, 222  $maš ( ¬gc , * ¬gv []) 224 cmd_func_t func = NULL ; 225 ušt16_t šdex = 0; 226 cÚ¡ * ¡r ; 227 boÞ u£_¿w = çl£ ; 228 boÞ pow”_down = çl£ ; 229 sig£t_t mask ; 230  fd , i , ex™_¡©us ; 233  Ýt ; 235 Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "i:rRvh", maš_ÝtiÚs , NULL ); 236 ià( Ýt < 0) 239  Ýt ) { 241 ià( `¡¾’ ( Ýrg è> 3 && ! `¡ºcmp (optarg, "hci", 3)) 242 ¡r = Ýrg + 3; 244 ¡r = Ýrg ; 245 ià(! `isdig™ (* ¡r )) { 246 `u§ge (); 247  EXIT_FAILURE ; 249 šdex = `©oi ( ¡r ); 252 »£t_Ú_š™ = Œue ; 255 u£_¿w = Œue ; 258 `´štf ("%s\n", VERSION ); 259  EXIT_SUCCESS ; 261 `u§ge (); 262  EXIT_SUCCESS ; 264  EXIT_FAILURE ; 268 ià( ¬gc - Ýtšd < 1) { 269 `årštf ( ¡d”r , "Missing command‡rgument\n"); 270  EXIT_FAILURE ; 273  i = 0; cmd_bË [i]. Çme ; i++) { 274 ià(! `¡rcmp ( cmd_bË [ i ]. Çme , ¬gv [ Ýtšd ])) { 275 func = cmd_bË [ i ].func; 280 ià(! func ) { 281 `årštf ( ¡d”r , "Unsupported command specified\n"); 282  EXIT_FAILURE ; 285 `mašloÝ_š™ (); 287 `sigem±y£t (& mask ); 288 `sigadd£t (& mask , SIGINT ); 289 `sigadd£t (& mask , SIGTERM ); 291 `mašloÝ_£t_sigÇl (& mask , sigÇl_ÿÎback , NULL , NULL); 293 `´štf ("Blu‘oÙh infÜm©iÚ utž™y v” %s\n", VERSION ); 295 fd = `sock‘ ( AF_BLUETOOTH , SOCK_RAW | SOCK_CLOEXEC , BTPROTO_HCI ); 296 ià( fd < 0) { 297 `³¼Ü ("Failedo open HCI„aw socket"); 298  EXIT_FAILURE ; 301 `mem£t (& hci_šfo , 0, (hci_info)); 302 hci_šfo . dev_id = šdex ; 304 ià( `ioùl ( fd , HCIGETDEVINFO , (*è& hci_šfo ) < 0) { 305 `³¼Ü ("Failedo get HCI device information"); 306 `þo£ ( fd ); 307  EXIT_FAILURE ; 310 ià( u£_¿w && !( hci_šfo . æags & HCI_UP )) { 311 `´štf ("Powering on controller\n"); 313 ià( `ioùl ( fd , HCIDEVUP , hci_šfo . dev_id ) < 0) { 314 `³¼Ü ("Failedo…ower on controller"); 315 `þo£ ( fd ); 316  EXIT_FAILURE ; 319 pow”_down = Œue ; 322 `þo£ ( fd ); 324 hci_ty³ = ( hci_šfo . ty³ & 0x30) >> 4; 326 ià( u£_¿w ) { 327 hci_dev = `bt_hci_Ãw_¿w_deviû ( šdex ); 328 ià(! hci_dev ) { 329 `årštf ( ¡d”r , "Failedo open HCI„aw device\n"); 330  EXIT_FAILURE ; 333 hci_dev = `bt_hci_Ãw_u£r_chªÃl ( šdex ); 334 ià(! hci_dev ) { 335 `årštf ( ¡d”r , "Failedo open HCI user channel\n"); 336  EXIT_FAILURE ; 339 »£t_Ú_š™ = Œue ; 340 »£t_Ú_shutdown = Œue ; 343 ià(! `func ( ¬gc - Ýtšd - 1, ¬gv + optind + 1)) { 344 `bt_hci_uÄef ( hci_dev ); 345  EXIT_FAILURE ; 348 ex™_¡©us = `mašloÝ_run (); 350 `bt_hci_uÄef ( hci_dev ); 352 ià( u£_¿w && pow”_down ) { 353 fd = `sock‘ ( AF_BLUETOOTH , SOCK_RAW | SOCK_CLOEXEC , BTPROTO_HCI ); 354 ià( fd >= 0) { 355 `´štf ("Powering down controller\n"); 357 ià( `ioùl ( fd , HCIDEVDOWN , hci_šfo . dev_id ) < 0) 358 `³¼Ü ("Failedo…ower down controller"); 360 `þo£ ( fd ); 364  ex™_¡©us ; 365 } } @tools/btiotest.c 25 #ifdeà HAVE_CONFIG_H 26  ~"cÚfig.h " 29  ~<¡dio.h > 30  ~<¡dlib.h > 31  ~<¡dšt.h > 32  ~<”ºo.h > 33  ~<¡ršg.h > 34  ~ 36  ~ 38  ~ 40  ~"btio/btio.h " 42  #DEFAULT_ACCEPT_TIMEOUT 2 ) 43  gÝt_upd©e_£c = 0; 45  sio_d©a { 46 gušt m»f ; 47 GIOChªÃl * mio ; 48  m»jeù ; 49  mdiscÚn ; 50  macû± ; 51  mvoiû ; 54  $io_d©a_uÄef ( io_d©a * d©a ) 56 d©a -> »f --; 58 ià( d©a -> »f ) 61 ià( d©a -> io ) 62 `g_io_chªÃl_uÄef ( d©a -> io ); 64 `g_ä“ ( d©a ); 65 } } 67  io_d©a * $io_d©a_»f ( io_d©a * d©a ) 69 d©a -> »f ++; 70  d©a ; 71 } } 73  io_d©a * $io_d©a_Ãw ( GIOChªÃl * io ,  »jeù ,  discÚn , 74  acû± ) 76  io_d©a * d©a ; 78 d©a = `g_Ãw0 ( io_d©a , 1); 79 d©a -> io = io; 80 d©a -> »jeù =„eject; 81 d©a -> discÚn = disconn; 82 d©a -> acû± =‡ccept; 84  `io_d©a_»f ( d©a ); 85 } } 87  gboÞ—n $io_w©ch ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , gpoš‹r u£r_d©a ) 89 `´štf ("Disconnected\n"); 90  FALSE ; 91 } } 93  gboÞ—n $discÚn_timeout ( gpoš‹r u£r_d©a ) 95  io_d©a * d©a = u£r_d©a ; 97 `´štf ("Disconnecting\n"); 99 `g_io_chªÃl_shutdown ( d©a -> io , TRUE , NULL ); 101  FALSE ; 102 } } 104  $upd©e_£c_Ëv– ( io_d©a * d©a ) 106 GE¼Ü * ”r = NULL ; 107  £c_Ëv– ; 109 ià(! `bt_io_g‘ ( d©a -> io , & ”r , BT_IO_OPT_SEC_LEVEL , & £c_Ëv– , 110 BT_IO_OPT_INVALID )) { 111 `´štf ("bt_io_g‘(OPT_SEC_LEVEL): %s\n", ”r -> mes§ge ); 112 `g_þ—r_”rÜ (& ”r ); 116 `´štf ("£c_Ëv–=%d\n", £c_Ëv– ); 118 ià( Ýt_upd©e_£c =ð £c_Ëv– ) 121 ià(! `bt_io_£t ( d©a -> io , & ”r , BT_IO_OPT_SEC_LEVEL , Ýt_upd©e_£c , 122 BT_IO_OPT_INVALID )) { 123 `´štf ("bt_io_£t(OPT_SEC_LEVEL): %s\n", ”r -> mes§ge ); 124 `g_þ—r_”rÜ (& ”r ); 126 } } 128  $cÚÃù_cb ( GIOChªÃl * io , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 130  io_d©a * d©a = u£r_d©a ; 131 GIOCÚd™iÚ cÚd ; 132  addr [18]; 133 ušt16_t hªdË , omtu , imtu ; 134 ušt8_t þs [3], key_size ; 136 ià( ”r ) { 137 `´štf ("CÚÃùšg fažed: %s\n", ”r -> mes§ge ); 141 ià(! `bt_io_g‘ ( io , & ”r , 142 BT_IO_OPT_DEST , addr , 143 BT_IO_OPT_HANDLE , & hªdË , 144 BT_IO_OPT_CLASS , þs , 145 BT_IO_OPT_INVALID )) { 146 `´štf ("Unableo get destination‡ddress: %s\n", 147 ”r -> mes§ge ); 148 `g_þ—r_”rÜ (& ”r ); 149 `¡rýy ( addr , "(unknown)"); 152 `´štf ("Successfully connectedo %s. handle=%u, class=%02x%02x%02x\n", 153 addr , hªdË , þs [0], cls[1], cls[2]); 155 ià(! `bt_io_g‘ ( io , & ”r , BT_IO_OPT_OMTU , & omtu , 156 BT_IO_OPT_IMTU , & imtu , 157 BT_IO_OPT_INVALID )) { 158 `´štf ("UÇbËØg‘ MTU sizes: %s\n", ”r -> mes§ge ); 159 `g_þ—r_”rÜ (& ”r ); 161 `´štf ("imtu=%u, omtu=%u\n", imtu , omtu ); 163 ià(! `bt_io_g‘ ( io , & ”r , BT_IO_OPT_KEY_SIZE , & key_size , 164 BT_IO_OPT_INVALID )) { 165 `´štf ("UÇbËØg‘ Key size: %s\n", ”r -> mes§ge ); 166 `g_þ—r_”rÜ (& ”r ); 168 `´štf ("key_size=%u\n", key_size ); 170 ià( d©a -> discÚn == 0) { 171 `g_io_chªÃl_shutdown ( io , TRUE , NULL ); 172 `´štf ("Disconnected\n"); 176 ià( d©a -> io =ð NULL ) 177 d©a -> io = `g_io_chªÃl_»f (io); 179 ià( d©a -> discÚn > 0) { 180 `io_d©a_»f ( d©a ); 181 `g_timeout_add_£cÚds_fuÎ ( G_PRIORITY_DEFAULT , d©a -> discÚn , 182 discÚn_timeout , d©a , 183 ( GDe¡royNÙify è io_d©a_uÄef ); 187 `io_d©a_»f ( d©a ); 189 ià( Ýt_upd©e_£c > 0) 190 `upd©e_£c_Ëv– ( d©a ); 192 cÚd = G_IO_NVAL | G_IO_HUP | G_IO_ERR ; 193 `g_io_add_w©ch_fuÎ ( io , G_PRIORITY_DEFAULT , cÚd , io_w©ch , d©a , 194 ( GDe¡royNÙify è io_d©a_uÄef ); 195 } } 197  gboÞ—n $cÚfœm_timeout ( gpoš‹r u£r_d©a ) 199  io_d©a * d©a = u£r_d©a ; 201 ià( d©a -> »jeù >= 0) { 202 `´štf ("Rejecting connection\n"); 203 `g_io_chªÃl_shutdown ( d©a -> io , TRUE , NULL ); 204  FALSE ; 207 `´štf ("Accepting connection\n"); 209 `io_d©a_»f ( d©a ); 211 ià( Ýt_upd©e_£c > 0) 212 `upd©e_£c_Ëv– ( d©a ); 214 ià(! `bt_io_acû± ( d©a -> io , cÚÃù_cb , data, 215 ( GDe¡royNÙify è io_d©a_uÄef , NULL )) { 216 `´štf ("bt_io_accept() failed\n"); 217 `io_d©a_uÄef ( d©a ); 220  FALSE ; 221 } } 223  $cÚfœm_cb ( GIOChªÃl * io , gpoš‹r u£r_d©a ) 225  addr [18]; 226  io_d©a * d©a = u£r_d©a ; 227 GE¼Ü * ”r = NULL ; 229 ià(! `bt_io_g‘ ( io , & ”r , BT_IO_OPT_DEST , addr , BT_IO_OPT_INVALID )) { 230 `´štf ("bt_io_g‘(OPT_DEST): %s\n", ”r -> mes§ge ); 231 `g_þ—r_”rÜ (& ”r ); 233 `´štf ("GÙ cÚfœm©iÚ„eque¡ fÜ %s\n", addr ); 235 ià( d©a -> acû± < 0 && d©a-> »jeù < 0) 238 ià( d©a -> »jeù == 0) { 239 `´štf ("Rejecting connection\n"); 240 `g_io_chªÃl_shutdown ( io , TRUE , NULL ); 244 ià( d©a -> voiû ) { 245 ià(! `bt_io_£t ( io , & ”r , BT_IO_OPT_VOICE , d©a -> voiû , 246 BT_IO_OPT_INVALID )) { 247 `´štf ("bt_io_£t(OPT_VOICE): %s\n", ”r -> mes§ge ); 248 `g_þ—r_”rÜ (& ”r ); 252 d©a -> io = `g_io_chªÃl_»f (io); 253 `io_d©a_»f ( d©a ); 255 ià( d©a -> acû± == 0) { 256 ià(! `bt_io_acû± ( io , cÚÃù_cb , d©a , 257 ( GDe¡royNÙify è io_d©a_uÄef , 258 & ”r )) { 259 `´štf ("bt_io_acû±(èçžed: %s\n", ”r -> mes§ge ); 260 `g_þ—r_”rÜ (& ”r ); 261 `io_d©a_uÄef ( d©a ); 265  £cÚds = ( d©a -> »jeù > 0) ? 266 d©a -> »jeù : d©a-> acû± ; 267 `g_timeout_add_£cÚds_fuÎ ( G_PRIORITY_DEFAULT , £cÚds , 268 cÚfœm_timeout , d©a , 269 ( GDe¡royNÙify è io_d©a_uÄef ); 271 } } 273  $l2ÿp_cÚÃù (cÚ¡ * ¤c , cÚ¡ * d¡ , ušt8_t addr_ty³ , 274 ušt16_t psm , ušt16_ˆ cid ,  discÚn , 275  £c ,  ´io ) 277  io_d©a * d©a ; 278 GE¼Ü * ”r = NULL ; 279 ušt8_t ¤c_ty³ ; 281 `´štf ("CÚÃùšgØ% L2CAP PSM %u\n", d¡ , psm ); 283 d©a = `io_d©a_Ãw ( NULL , -1, discÚn , -1); 285 ià( addr_ty³ !ð BDADDR_BREDR ) 286 ¤c_ty³ = BDADDR_LE_PUBLIC ; 288 ¤c_ty³ = BDADDR_BREDR ; 290 ià( ¤c ) 291 d©a -> io = `bt_io_cÚÃù ( cÚÃù_cb , data, 292 ( GDe¡royNÙify è io_d©a_uÄef , 293 & ”r , 294 BT_IO_OPT_SOURCE , ¤c , 295 BT_IO_OPT_SOURCE_TYPE , ¤c_ty³ , 296 BT_IO_OPT_DEST , d¡ , 297 BT_IO_OPT_DEST_TYPE , addr_ty³ , 298 BT_IO_OPT_PSM , psm , 299 BT_IO_OPT_CID , cid , 300 BT_IO_OPT_SEC_LEVEL , £c , 301 BT_IO_OPT_PRIORITY , ´io , 302 BT_IO_OPT_INVALID ); 304 d©a -> io = `bt_io_cÚÃù ( cÚÃù_cb , data, 305 ( GDe¡royNÙify è io_d©a_uÄef , 306 & ”r , 307 BT_IO_OPT_SOURCE_TYPE , ¤c_ty³ , 308 BT_IO_OPT_DEST , d¡ , 309 BT_IO_OPT_DEST_TYPE , addr_ty³ , 310 BT_IO_OPT_PSM , psm , 311 BT_IO_OPT_CID , cid , 312 BT_IO_OPT_SEC_LEVEL , £c , 313 BT_IO_OPT_PRIORITY , ´io , 314 BT_IO_OPT_INVALID ); 316 ià(! d©a -> io ) { 317 `´štf ("CÚÃùšgØ% çžed: %s\n", d¡ , ”r -> mes§ge ); 318 `g_”rÜ_ä“ ( ”r ); 319 `ex™ ( EXIT_FAILURE ); 321 } } 323  $l2ÿp_li¡’ (cÚ¡ * ¤c , ušt8_t addr_ty³ , ušt16_t psm , 324 ušt16_t cid ,  deãr ,  »jeù , 325  discÚn ,  acû± ,  £c , 326 gboÞ—n ma¡” ) 328  io_d©a * d©a ; 329 BtIOCÚÃù cÚn ; 330 BtIOCÚfœm cfm ; 331 GIOChªÃl * l2_¤v ; 332 GE¼Ü * ”r = NULL ; 334 ià( deãr ) { 335 cÚn = NULL ; 336 cfm = cÚfœm_cb ; 338 cÚn = cÚÃù_cb ; 339 cfm = NULL ; 342 ià( cid ) 343 `´štf ("Li¡’šg oÀL2CAP CID 0x%04x (%u)\n", cid , cid); 345 `´štf ("Li¡’šg oÀL2CAP PSM 0x%04x (%u)\n", psm ,…sm); 348 d©a = `io_d©a_Ãw ( NULL , »jeù , discÚn , acû± ); 350 ià( ¤c ) 351 l2_¤v = `bt_io_li¡’ ( cÚn , cfm , d©a , 352 ( GDe¡royNÙify è io_d©a_uÄef , 353 & ”r , 354 BT_IO_OPT_SOURCE , ¤c , 355 BT_IO_OPT_SOURCE_TYPE , addr_ty³ , 356 BT_IO_OPT_PSM , psm , 357 BT_IO_OPT_CID , cid , 358 BT_IO_OPT_SEC_LEVEL , £c , 359 BT_IO_OPT_MASTER , ma¡” , 360 BT_IO_OPT_INVALID ); 362 l2_¤v = `bt_io_li¡’ ( cÚn , cfm , d©a , 363 ( GDe¡royNÙify è io_d©a_uÄef , 364 & ”r , 365 BT_IO_OPT_SOURCE_TYPE , addr_ty³ , 366 BT_IO_OPT_PSM , psm , 367 BT_IO_OPT_CID , cid , 368 BT_IO_OPT_SEC_LEVEL , £c , 369 BT_IO_OPT_MASTER , ma¡” , 370 BT_IO_OPT_INVALID ); 372 ià(! l2_¤v ) { 373 `´štf ("Li¡’šg fažed: %s\n", ”r -> mes§ge ); 374 `g_”rÜ_ä“ ( ”r ); 375 `ex™ ( EXIT_FAILURE ); 378 `g_io_chªÃl_uÄef ( l2_¤v ); 379 } } 381  $rfcomm_cÚÃù (cÚ¡ * ¤c , cÚ¡ * d¡ , ušt8_t ch , 382  discÚn ,  £c ) 384  io_d©a * d©a ; 385 GE¼Ü * ”r = NULL ; 387 `´štf ("CÚÃùšgØ% RFCOMM chªÃÈ%u\n", d¡ , ch ); 389 d©a = `io_d©a_Ãw ( NULL , -1, discÚn , -1); 391 ià( ¤c ) 392 d©a -> io = `bt_io_cÚÃù ( cÚÃù_cb , data, 393 ( GDe¡royNÙify è io_d©a_uÄef , 394 & ”r , 395 BT_IO_OPT_SOURCE , ¤c , 396 BT_IO_OPT_DEST , d¡ , 397 BT_IO_OPT_CHANNEL , ch , 398 BT_IO_OPT_SEC_LEVEL , £c , 399 BT_IO_OPT_INVALID ); 401 d©a -> io = `bt_io_cÚÃù ( cÚÃù_cb , data, 402 ( GDe¡royNÙify è io_d©a_uÄef , 403 & ”r , 404 BT_IO_OPT_DEST , d¡ , 405 BT_IO_OPT_CHANNEL , ch , 406 BT_IO_OPT_SEC_LEVEL , £c , 407 BT_IO_OPT_INVALID ); 409 ià(! d©a -> io ) { 410 `´štf ("CÚÃùšgØ% çžed: %s\n", d¡ , ”r -> mes§ge ); 411 `g_”rÜ_ä“ ( ”r ); 412 `ex™ ( EXIT_FAILURE ); 414 } } 416  $rfcomm_li¡’ (cÚ¡ * ¤c , ušt8_t ch , gboÞ—n deãr , 417  »jeù ,  discÚn ,  acû± , 418  £c , gboÞ—n ma¡” ) 420  io_d©a * d©a ; 421 BtIOCÚÃù cÚn ; 422 BtIOCÚfœm cfm ; 423 GIOChªÃl * rc_¤v ; 424 GE¼Ü * ”r = NULL ; 426 ià( deãr ) { 427 cÚn = NULL ; 428 cfm = cÚfœm_cb ; 430 cÚn = cÚÃù_cb ; 431 cfm = NULL ; 434 d©a = `io_d©a_Ãw ( NULL , »jeù , discÚn , acû± ); 436 ià( ¤c ) 437 rc_¤v = `bt_io_li¡’ ( cÚn , cfm , 438 d©a , ( GDe¡royNÙify è io_d©a_uÄef , 439 & ”r , 440 BT_IO_OPT_SOURCE , ¤c , 441 BT_IO_OPT_CHANNEL , ch , 442 BT_IO_OPT_SEC_LEVEL , £c , 443 BT_IO_OPT_MASTER , ma¡” , 444 BT_IO_OPT_INVALID ); 446 rc_¤v = `bt_io_li¡’ ( cÚn , cfm , 447 d©a , ( GDe¡royNÙify è io_d©a_uÄef , 448 & ”r , 449 BT_IO_OPT_CHANNEL , ch , 450 BT_IO_OPT_SEC_LEVEL , £c , 451 BT_IO_OPT_MASTER , ma¡” , 452 BT_IO_OPT_INVALID ); 454 ià(! rc_¤v ) { 455 `´štf ("Li¡’šg fažed: %s\n", ”r -> mes§ge ); 456 `g_”rÜ_ä“ ( ”r ); 457 `ex™ ( EXIT_FAILURE ); 460 `bt_io_g‘ ( rc_¤v , & ”r , BT_IO_OPT_CHANNEL , & ch , BT_IO_OPT_INVALID ); 462 `´štf ("Li¡’šg oÀRFCOMM chªÃÈ%u\n", ch ); 464 `g_io_chªÃl_uÄef ( rc_¤v ); 465 } } 467  $sco_cÚÃù (cÚ¡ * ¤c , cÚ¡ * d¡ ,  discÚn , 468  voiû ) 470  io_d©a * d©a ; 471 GE¼Ü * ”r = NULL ; 473 `´štf ("CÚÃùšg SCOØ%s\n", d¡ ); 475 d©a = `io_d©a_Ãw ( NULL , -1, discÚn , -1); 477 ià( ¤c ) 478 d©a -> io = `bt_io_cÚÃù ( cÚÃù_cb , data, 479 ( GDe¡royNÙify è io_d©a_uÄef , 480 & ”r , 481 BT_IO_OPT_SOURCE , ¤c , 482 BT_IO_OPT_DEST , d¡ , 483 BT_IO_OPT_VOICE , voiû , 484 BT_IO_OPT_INVALID ); 486 d©a -> io = `bt_io_cÚÃù ( cÚÃù_cb , data, 487 ( GDe¡royNÙify è io_d©a_uÄef , 488 & ”r , 489 BT_IO_OPT_DEST , d¡ , 490 BT_IO_OPT_VOICE , voiû , 491 BT_IO_OPT_INVALID ); 493 ià(! d©a -> io ) { 494 `´štf ("CÚÃùšgØ% çžed: %s\n", d¡ , ”r -> mes§ge ); 495 `g_”rÜ_ä“ ( ”r ); 496 `ex™ ( EXIT_FAILURE ); 498 } } 500  $sco_li¡’ (cÚ¡ * ¤c , gboÞ—n deãr ,  »jeù , 501  discÚn ,  acû± ,  voiû ) 503  io_d©a * d©a ; 504 BtIOCÚÃù cÚn ; 505 BtIOCÚfœm cfm ; 506 GIOChªÃl * sco_¤v ; 507 GE¼Ü * ”r = NULL ; 509 `´štf ("Listening for SCO connections\n"); 511 ià( deãr ) { 512 cÚn = NULL ; 513 cfm = cÚfœm_cb ; 515 cÚn = cÚÃù_cb ; 516 cfm = NULL ; 519 d©a = `io_d©a_Ãw ( NULL , »jeù , discÚn , acû± ); 521 d©a -> voiû = voice; 523 ià( ¤c ) 524 sco_¤v = `bt_io_li¡’ ( cÚn , cfm , d©a , 525 ( GDe¡royNÙify è io_d©a_uÄef , 526 & ”r , 527 BT_IO_OPT_SOURCE , ¤c , 528 BT_IO_OPT_VOICE , voiû , 529 BT_IO_OPT_INVALID ); 531 sco_¤v = `bt_io_li¡’ ( cÚn , cfm , d©a , 532 ( GDe¡royNÙify è io_d©a_uÄef , 533 & ”r , 534 BT_IO_OPT_VOICE , voiû , 535 BT_IO_OPT_INVALID ); 537 ià(! sco_¤v ) { 538 `´štf ("Li¡’šg fažed: %s\n", ”r -> mes§ge ); 539 `g_”rÜ_ä“ ( ”r ); 540 `ex™ ( EXIT_FAILURE ); 543 `g_io_chªÃl_uÄef ( sco_¤v ); 544 } } 546  gÝt_chªÃl = -1; 547  gÝt_psm = 0; 548  gboÞ—n gÝt_sco = FALSE ; 549  gboÞ—n gÝt_deãr = FALSE ; 550  gšt gÝt_voiû = 0; 551 * gÝt_dev = NULL ; 552  gÝt_»jeù = -1; 553  gÝt_discÚn = -1; 554  gÝt_acû± = DEFAULT_ACCEPT_TIMEOUT ; 555  gÝt_£c = 0; 556  gboÞ—n gÝt_ma¡” = FALSE ; 557  gÝt_´iÜ™y = 0; 558  gÝt_cid = 0; 559  gušt8 gÝt_addr_ty³ = 0; 561  GMašLoÝ * gmaš_loÝ ; 563  GO±iÚEÁry gÝtiÚs [] = { 564 { "chªÃl", 'c', 0, G_OPTION_ARG_INT , & Ýt_chªÃl , 566 { "psm", 'p', 0, G_OPTION_ARG_INT , & Ýt_psm , 568 { "cid", 'j', 0, G_OPTION_ARG_INT , & Ýt_cid , 570 { "addr-ty³", 't', 0, G_OPTION_ARG_INT , & Ýt_addr_ty³ , 573 { "sco", 's', 0, G_OPTION_ARG_NONE , & Ýt_sco , 575 { "deãr", 'd', 0, G_OPTION_ARG_NONE , & Ýt_deãr , 577 { "voiû", 'V', 0, G_OPTION_ARG_INT , & Ýt_voiû , 580 { "£c-Ëv–", 'S', 0, G_OPTION_ARG_INT , & Ýt_£c , 582 { "upd©e-£c-Ëv–", 'U', 0, G_OPTION_ARG_INT , & Ýt_upd©e_£c , 584 { "dev", 'i', 0, G_OPTION_ARG_STRING , & Ýt_dev , 586 { "»jeù", 'r', 0, G_OPTION_ARG_INT , & Ýt_»jeù , 588 { "discÚÃù", 'D', 0, G_OPTION_ARG_INT , & Ýt_discÚn , 590 { "acû±", 'a', 0, G_OPTION_ARG_INT , & Ýt_acû± , 592 { "ma¡”", 'm', 0, G_OPTION_ARG_NONE , & Ýt_ma¡” , 594 { "´iÜ™y", 'P', 0, G_OPTION_ARG_INT , & Ýt_´iÜ™y , 598 { NULL }, 601  $sig_‹rm ( sig ) 603 `g_maš_loÝ_qu™ ( maš_loÝ ); 604 } } 606  $maš ( ¬gc , * ¬gv []) 608 GO±iÚCÚ‹xt * cÚ‹xt ; 610 cÚ‹xt = `g_ÝtiÚ_cÚ‹xt_Ãw ( NULL ); 611 `g_ÝtiÚ_cÚ‹xt_add_maš_’Œ›s ( cÚ‹xt , ÝtiÚs , NULL ); 613 ià(! `g_ÝtiÚ_cÚ‹xt_·r£ ( cÚ‹xt , & ¬gc , & ¬gv , NULL )) 614 `ex™ ( EXIT_FAILURE ); 616 `g_ÝtiÚ_cÚ‹xt_ä“ ( cÚ‹xt ); 618 `´štf ("accept=%d„eject=%d discon=%d defer=%d sec=%d update_sec=%d" 619 "…rio=%d voiû=0x%04x\n", Ýt_acû± , Ýt_»jeù , Ýt_discÚn , 620 Ýt_deãr , Ýt_£c , Ýt_upd©e_£c , Ýt_´iÜ™y , Ýt_voiû ); 622 ià( Ýt_psm || Ýt_cid ) { 623 ià( ¬gc > 1) 624 `l2ÿp_cÚÃù ( Ýt_dev , ¬gv [1], Ýt_addr_ty³ , 625 Ýt_psm , Ýt_cid , Ýt_discÚn , 626 Ýt_£c , Ýt_´iÜ™y ); 628 `l2ÿp_li¡’ ( Ýt_dev , Ýt_addr_ty³ , Ýt_psm , Ýt_cid , 629 Ýt_deãr , Ýt_»jeù , Ýt_discÚn , 630 Ýt_acû± , Ýt_£c , Ýt_ma¡” ); 633 ià( Ýt_chªÃl != -1) { 634 ià( ¬gc > 1) 635 `rfcomm_cÚÃù ( Ýt_dev , ¬gv [1], Ýt_chªÃl , 636 Ýt_discÚn , Ýt_£c ); 638 `rfcomm_li¡’ ( Ýt_dev , Ýt_chªÃl , Ýt_deãr , 639 Ýt_»jeù , Ýt_discÚn , Ýt_acû± , 640 Ýt_£c , Ýt_ma¡” ); 643 ià( Ýt_sco ) { 644 ià( ¬gc > 1) 645 `sco_cÚÃù ( Ýt_dev , ¬gv [1], Ýt_discÚn , Ýt_voiû ); 647 `sco_li¡’ ( Ýt_dev , Ýt_deãr , Ýt_»jeù , 648 Ýt_discÚn , Ýt_acû± , Ýt_voiû ); 651 `sigÇl ( SIGTERM , sig_‹rm ); 652 `sigÇl ( SIGINT , sig_‹rm ); 654 maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 656 `g_maš_loÝ_run ( maš_loÝ ); 658 `g_maš_loÝ_uÄef ( maš_loÝ ); 660 `´štf ("Exiting\n"); 662 `ex™ ( EXIT_SUCCESS ); 663 } } @tools/btmgmt.c 22 #ifdeà HAVE_CONFIG_H 23  ~ 26  ~<¡dio.h > 27  ~<”ºo.h > 28  ~ 29  ~<¡dlib.h > 30  ~<¡ršg.h > 31  ~ 32  ~ 33  ~ 34  ~ 35  ~ 36  ~ 37  ~ 38  ~<¡dboÞ.h > 40  ~ 41  ~ 42  ~ 43  ~ 44  ~ 46  ~"¤c/uuid-h–³r.h " 47  ~"lib/mgmt.h " 49  ~"mÚ™Ü/mašloÝ.h " 50  ~"¤c/sh¬ed/utž.h " 51  ~"¤c/sh¬ed/mgmt.h " 52  ~"¤c/sh¬ed/g­.h " 54  boÞ gmÚ™Ü = çl£ ; 55  boÞ gdiscov”y = çl£ ; 56  boÞ g»sÞve_Çmes = Œue ; 58  g³ndšg = 0; 60 #iâdeà MIN 61  #MIN ( x , y è((xè< (yè? (xè: (y)) ) 64  size_t $cÚv”t_hex¡r (cÚ¡ * hex¡r , ušt8_t * buf , size_t buæ’ ) 66 size_t i , Ën ; 68 Ën = `MIN (( `¡¾’ ( hex¡r è/ 2), buæ’ ); 69 `mem£t ( buf , 0, Ën ); 71  i = 0; i < Ën ; i++) 72 `ssÿnf ( hex¡r + ( i * 2), "%02hhX", & buf [i]); 74  Ën ; 75 } } 77  boÞ $lßd_id’t™y ( ušt16_t šdex ,  mgmt_œk_šfo * œk ) 79  id’t™y_·th [ PATH_MAX ]; 80 * addr , * key ; 81  ty³ ; 82  n ; 83 FILE * å ; 85 `¢´štf ( id’t™y_·th , (identity_path), 86 "/sys/k”Ãl/debug/blu‘oÙh/hci%u/id’t™y", šdex ); 88 å = `fÝ’ ( id’t™y_·th , "r"); 89 ià(! å ) { 90 `³¼Ü ("Failedo open identity file"); 91  çl£ ; 94 n = `fsÿnf ( å , "%m[0-9a-f:] (ty³ %uè%m[0-9a-f]", & addr , & ty³ , & key ); 96 `fþo£ ( å ); 98 ià( n != 3) 99  çl£ ; 101 `¡r2ba ( addr , & œk ->addr. bdaddr ); 102 `cÚv”t_hex¡r ( key , œk -> v® , (irk->val)); 104 `ä“ ( addr ); 105 `ä“ ( key ); 107  ty³ ) { 109 œk -> addr . ty³ = BDADDR_LE_PUBLIC ; 112 œk -> addr . ty³ = BDADDR_LE_RANDOM ; 115 `årštf ( ¡d”r , "Inv®id‡dd»s ty³ %u\n", ty³ ); 116  çl£ ; 119  Œue ; 120 } } 122  $cÚŒÞËr_”rÜ ( ušt16_t šdex , ušt16_ˆ Ën , 123 cÚ¡ * ·¿m , * u£r_d©a ) 125 cÚ¡  mgmt_ev_cÚŒÞËr_”rÜ * ev = ·¿m ; 127 ià( Ën < (* ev )) { 128 `årštf ( ¡d”r , 129 "ToØsh܈(%u by‹sècÚŒÞ˸”r܃v’t\n", Ën ); 133 ià( mÚ™Ü ) 134 `´štf ("hci%uƒ¼Ü 0x%02x\n", šdex , ev -> ”rÜ_code ); 135 } } 137  $šdex_added ( ušt16_t šdex , ušt16_ˆ Ën , 138 cÚ¡ * ·¿m , * u£r_d©a ) 140 ià( mÚ™Ü ) 141 `´štf ("hci%u‡dded\n", šdex ); 142 } } 144  $šdex_»moved ( ušt16_t šdex , ušt16_ˆ Ën , 145 cÚ¡ * ·¿m , * u£r_d©a ) 147 ià( mÚ™Ü ) 148 `´štf ("hci%u„emoved\n", šdex ); 149 } } 151  $uncÚf_šdex_added ( ušt16_t šdex , ušt16_ˆ Ën , 152 cÚ¡ * ·¿m , * u£r_d©a ) 154 ià( mÚ™Ü ) 155 `´štf ("hci%u‡dded (uncÚfigu»d)\n", šdex ); 156 } } 158  $uncÚf_šdex_»moved ( ušt16_t šdex , ušt16_ˆ Ën , 159 cÚ¡ * ·¿m , * u£r_d©a ) 161 ià( mÚ™Ü ) 162 `´štf ("hci%u„emoved (uncÚfigu»d)\n", šdex ); 163 } } 165 cÚ¡ * gÝtiÚs_¡r [] = { 170  $´št_ÝtiÚs ( ušt32_t ÝtiÚs ) 172  i ; 174  i = 0; i < `NELEM ( ÝtiÚs_¡r ); i++) { 175 ià(( ÝtiÚs & (1 << i )) != 0) 176 `´štf ("% ", ÝtiÚs_¡r [ i ]); 178 } } 180  $Ãw_cÚfig_ÝtiÚs ( ušt16_t šdex , ušt16_ˆ Ën , 181 cÚ¡ * ·¿m , * u£r_d©a ) 183 cÚ¡ ušt32_t * ev = ·¿m ; 185 ià( Ën < (* ev )) { 186 `årštf ( ¡d”r , "ToØsh܈Ãw_cÚfig_ÝtiÚ ev’ˆ(%u)\n", Ën ); 190 ià( mÚ™Ü ) { 191 `´štf ("hci%u‚ew_cÚfig_ÝtiÚs: ", šdex ); 192 `´št_ÝtiÚs ( `g‘_Ë32 ( ev )); 193 `´štf ("\n"); 195 } } 197 cÚ¡ * g£‰šgs_¡r [] = { 215  $´št_£‰šgs ( ušt32_t £‰šgs ) 217  i ; 219  i = 0; i < `NELEM ( £‰šgs_¡r ); i++) { 220 ià(( £‰šgs & (1 << i )) != 0) 221 `´štf ("% ", £‰šgs_¡r [ i ]); 223 } } 225  $Ãw_£‰šgs ( ušt16_t šdex , ušt16_ˆ Ën , 226 cÚ¡ * ·¿m , * u£r_d©a ) 228 cÚ¡ ušt32_t * ev = ·¿m ; 230 ià( Ën < (* ev )) { 231 `årštf ( ¡d”r , "ToØsh܈Ãw_£‰šg ev’ˆ(%u)\n", Ën ); 235 ià( mÚ™Ü ) { 236 `´štf ("hci%u‚ew_£‰šgs: ", šdex ); 237 `´št_£‰šgs ( `g‘_Ë32 ( ev )); 238 `´štf ("\n"); 240 } } 242  $discov”šg ( ušt16_t šdex , ušt16_ˆ Ën , cÚ¡ * ·¿m , 243 * u£r_d©a ) 245 cÚ¡  mgmt_ev_discov”šg * ev = ·¿m ; 247 ià( Ën < (* ev )) { 248 `årštf ( ¡d”r , "Too short (%u bytes) discoveringƒvent\n", 249 Ën ); 253 ià( ev -> discov”šg =ð0 && discov”y ) { 254 `mašloÝ_qu™ (); 258 ià( mÚ™Ü ) 259 `´štf ("hci%uy³ %u discov”šg %s\n", šdex , 260 ev -> ty³ ,ƒv-> discov”šg ? "on" : "off"); 261 } } 263  $Ãw_lšk_key ( ušt16_t šdex , ušt16_ˆ Ën , cÚ¡ * ·¿m , 264 * u£r_d©a ) 266 cÚ¡  mgmt_ev_Ãw_lšk_key * ev = ·¿m ; 268 ià( Ën !ð(* ev )) { 269 `årštf ( ¡d”r , "Invalid‚ew_link_key†ength (%u bytes)\n", 270 Ën ); 274 ià( mÚ™Ü ) { 275  addr [18]; 276 `ba2¡r (& ev -> key . addr . bdaddr ,‡ddr); 277 `´štf ("hci%u‚ew_link_key %sype 0x%02x…in_len %d " 278 "¡Üe_hšˆ%u\n", šdex , addr , ev -> key . ty³ , 279 ev -> key . pš_Ën ,ƒv-> ¡Üe_hšt ); 281 } } 283 cÚ¡ * $ty³¡r ( ušt8_t ty³ ) 285 cÚ¡ * ¡r [] = { "BR/EDR", "LE Public", "LE Random" }; 287 ià( ty³ <ð BDADDR_LE_RANDOM ) 288  ¡r [ ty³ ]; 291 } } 293  $cÚÃùed ( ušt16_t šdex , ušt16_ˆ Ën , cÚ¡ * ·¿m , 294 * u£r_d©a ) 296 cÚ¡  mgmt_ev_deviû_cÚÃùed * ev = ·¿m ; 297 ušt16_t eœ_Ën ; 299 ià( Ën < (* ev )) { 300 `årštf ( ¡d”r , 301 "Inv®id cÚÃùedƒv’ˆËngth (%u by‹s)\n", Ën ); 305 eœ_Ën = `g‘_Ë16 (& ev ->eir_len); 306 ià( Ën !ð(* ev è+ eœ_Ën ) { 307 `årštf ( ¡d”r , "Invalid connectedƒvent†ength " 308 "(%u by‹s,ƒœ_ËÀ%u by‹s)\n", Ën , eœ_Ën ); 312 ià( mÚ™Ü ) { 313  addr [18]; 314 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 315 `´štf ("hci%u % ty³ % cÚÃùedƒœ_ËÀ%u\n", šdex , addr , 316 `ty³¡r ( ev -> addr . ty³ ), eœ_Ën ); 318 } } 320  $discÚÃùed ( ušt16_t šdex , ušt16_ˆ Ën , cÚ¡ * ·¿m , 321 * u£r_d©a ) 323 cÚ¡  mgmt_ev_deviû_discÚÃùed * ev = ·¿m ; 325 ià( Ën < ( mgmt_addr_šfo )) { 326 `årštf ( ¡d”r , 327 "Inv®id discÚÃùedƒv’ˆËngth (%u by‹s)\n", Ën ); 331 ià( mÚ™Ü ) { 332  addr [18]; 333 ušt8_t »asÚ ; 335 ià( Ën < (* ev )) 336 »asÚ = MGMT_DEV_DISCONN_UNKNOWN ; 338 »asÚ = ev ->reason; 340 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 341 `´štf ("hci%u %sype %s disconnected with„eason %u\n", 342 šdex , addr , `ty³¡r ( ev ->addr. ty³ ), »asÚ ); 344 } } 346  $cÚn_çžed ( ušt16_t šdex , ušt16_ˆ Ën , cÚ¡ * ·¿m , 347 * u£r_d©a ) 349 cÚ¡  mgmt_ev_cÚÃù_çžed * ev = ·¿m ; 351 ià( Ën !ð(* ev )) { 352 `årštf ( ¡d”r , 353 "Inv®id cÚÃù_çžedƒv’ˆËngth (%u by‹s)\n", Ën ); 357 ià( mÚ™Ü ) { 358  addr [18]; 359 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 360 `´štf ("hci%u %sype %s connect failed (status 0x%02x, %s)\n", 361 šdex , addr , `ty³¡r ( ev ->addr. ty³ ),ƒv-> ¡©us , 362 `mgmt_”r¡r ( ev -> ¡©us )); 364 } } 366  $auth_çžed ( ušt16_t šdex , ušt16_ˆ Ën , cÚ¡ * ·¿m , 367 * u£r_d©a ) 369 cÚ¡  mgmt_ev_auth_çžed * ev = ·¿m ; 371 ià( Ën !ð(* ev )) { 372 `årštf ( ¡d”r , 373 "Inv®id‡uth_çžedƒv’ˆËngth (%u by‹s)\n", Ën ); 377 ià( mÚ™Ü ) { 378  addr [18]; 379 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 380 `´štf ("hci%u %s‡uth failed with status 0x%02x (%s)\n", 381 šdex , addr , ev -> ¡©us , `mgmt_”r¡r (ev->status)); 383 } } 385  $loÿl_Çme_chªged ( ušt16_t šdex , ušt16_ˆ Ën , cÚ¡ * ·¿m , 386 * u£r_d©a ) 388 cÚ¡  mgmt_ev_loÿl_Çme_chªged * ev = ·¿m ; 390 ià( Ën !ð(* ev )) { 391 `årštf ( ¡d”r , 392 "Inv®id†oÿl_Çme_chªged†’gth (%u by‹s)\n", Ën ); 396 ià( mÚ™Ü ) 397 `´štf ("hci%u‚amchªged: %s\n", šdex , ev -> Çme ); 398 } } 400  $cÚfœm_Çme_r¥ ( ušt8_t ¡©us , ušt16_t Ën , 401 cÚ¡ * ·¿m , * u£r_d©a ) 403 cÚ¡  mgmt_½_cÚfœm_Çme * ½ = ·¿m ; 404  addr [18]; 406 ià( Ën =ð0 && ¡©us != 0) { 407 `årštf ( ¡d”r , 409 ¡©us , `mgmt_”r¡r (status)); 413 ià( Ën !ð(* ½ )) { 414 `årštf ( ¡d”r , "confirm_name„sp†ength %u instead of %zu\n", 415 Ën , (* ½ )); 419 `ba2¡r (& ½ -> addr . bdaddr ,‡ddr); 421 ià( ¡©us != 0) 422 `årštf ( ¡d”r , "confirm_name for %s failed: 0x%02x (%s)\n", 423 addr , ¡©us , `mgmt_”r¡r (status)); 425 `´štf ("cÚfœm_Çmsucûeded fÜ %s\n", addr ); 426 } } 428 * $eœ_g‘_Çme (cÚ¡ ušt8_t * eœ , ušt16_t eœ_Ën ) 430 ušt8_t ·r£d = 0; 432 ià( eœ_Ën < 2) 433  NULL ; 435  ·r£d < eœ_Ën - 1) { 436 ušt8_t f›ld_Ën = eœ [0]; 438 ià( f›ld_Ën == 0) 441 ·r£d +ð f›ld_Ën + 1; 443 ià( ·r£d > eœ_Ën ) 447 ià( eœ [1] == 0x09 ||ƒir[1] == 0x08) 448  `¡ºdup ((*è& eœ [2], f›ld_Ën - 1); 450 eœ +ð f›ld_Ën + 1; 453  NULL ; 454 } } 456  $eœ_g‘_æags (cÚ¡ ušt8_t * eœ , ušt16_t eœ_Ën ) 458 ušt8_t ·r£d = 0; 460 ià( eœ_Ën < 2) 463  ·r£d < eœ_Ën - 1) { 464 ušt8_t f›ld_Ën = eœ [0]; 466 ià( f›ld_Ën == 0) 469 ·r£d +ð f›ld_Ën + 1; 471 ià( ·r£d > eœ_Ën ) 475 ià( eœ [1] == 0x01) 476  eœ [2]; 478 eœ +ð f›ld_Ën + 1; 482 } } 484  $deviû_found ( ušt16_t šdex , ušt16_ˆ Ën , cÚ¡ * ·¿m , 485 * u£r_d©a ) 487 cÚ¡  mgmt_ev_deviû_found * ev = ·¿m ; 488  mgmt *mgmˆð u£r_d©a ; 489 ušt16_t eœ_Ën ; 490 ušt32_t æags ; 492 ià( Ën < (* ev )) { 493 `årštf ( ¡d”r , 494 "ToØsh܈deviû_found†’gth (%u by‹s)\n", Ën ); 498 æags = `btohl ( ev ->flags); 500 eœ_Ën = `g‘_Ë16 (& ev ->eir_len); 501 ià( Ën !ð(* ev è+ eœ_Ën ) { 502 `årštf ( ¡d”r , "dev_found:ƒxpected %zu bytes, got %u bytes\n", 503 (* ev è+ eœ_Ën , Ën ); 507 ià( mÚ™Ü || discov”y ) { 508  addr [18], * Çme ; 510 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 511 `´štf ("hci%u dev_found: %sype %s„ssi %d " 512 "æag 0x%04x ", šdex , addr , 513 `ty³¡r ( ev -> addr . ty³ ),ƒv-> rssi , æags ); 515 ià( ev -> addr . ty³ !ð BDADDR_BREDR ) 516 `´štf ("AD flags 0x%02x ", 517 `eœ_g‘_æags ( ev -> eœ , eœ_Ën )); 519 Çme = `eœ_g‘_Çme ( ev -> eœ , eœ_Ën ); 520 ià( Çme ) 521 `´štf ("Çm%s\n", Çme ); 523 `´štf ("eœ_ËÀ%u\n", eœ_Ën ); 525 `ä“ ( Çme ); 528 ià( discov”y && ( æags & MGMT_DEV_FOUND_CONFIRM_NAME )) { 529  mgmt_ý_cÚfœm_Çme ý ; 531 `mem£t (& ý , 0, (cp)); 532 `memýy (& ý . addr , & ev ->addr, (cp.addr)); 533 ià( »sÞve_Çmes ) 534 ý . Çme_known = 0; 536 ý . Çme_known = 1; 538 `mgmt_»¶y ( mgmt , MGMT_OP_CONFIRM_NAME , šdex , ( ý ), &cp, 539 cÚfœm_Çme_r¥ , NULL , NULL); 541 } } 543  $pš_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 544 * u£r_d©a ) 546 ià( ¡©us != 0) { 547 `årštf ( ¡d”r , 549 ¡©us , `mgmt_”r¡r (status)); 550 `mašloÝ_qu™ (); 554 `´štf ("PIN Reply successful\n"); 555 } } 557  $mgmt_pš_»¶y ( mgmt *mgmt, ušt16_t šdex , 558 cÚ¡  mgmt_addr_šfo * addr , 559 cÚ¡ * pš , size_t Ën ) 561  mgmt_ý_pš_code_»¶y ý ; 563 `mem£t (& ý , 0, (cp)); 564 `memýy (& ý . addr ,‡ddr, (cp.addr)); 565 ý . pš_Ën = Ën ; 566 `memýy ( ý . pš_code , pš , Ën ); 568  `mgmt_»¶y ( mgmt , MGMT_OP_PIN_CODE_REPLY , šdex , ( ý ), &cp, 569 pš_r¥ , NULL , NULL); 570 } } 572  $pš_Ãg_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 573 * u£r_d©a ) 575 ià( ¡©us != 0) { 576 `årštf ( ¡d”r , 578 ¡©us , `mgmt_”r¡r (status)); 579 `mašloÝ_qu™ (); 583 `´štf ("PIN Negative Reply successful\n"); 584 } } 586  $mgmt_pš_Ãg_»¶y ( mgmt *mgmt, ušt16_t šdex , 587 cÚ¡  mgmt_addr_šfo * addr ) 589  mgmt_ý_pš_code_Ãg_»¶y ý ; 591 `mem£t (& ý , 0, (cp)); 592 `memýy (& ý . addr ,‡ddr, (cp.addr)); 594  `mgmt_»¶y ( mgmt , MGMT_OP_PIN_CODE_NEG_REPLY , šdex , 595 ( ý ), &ý, pš_Ãg_r¥ , NULL , NULL); 596 } } 598  $»que¡_pš ( ušt16_t šdex , ušt16_ˆ Ën , cÚ¡ * ·¿m , 599 * u£r_d©a ) 601 cÚ¡  mgmt_ev_pš_code_»que¡ * ev = ·¿m ; 602  mgmt *mgmˆð u£r_d©a ; 603  pš [18]; 604 size_t pš_Ën ; 606 ià( Ën !ð(* ev )) { 607 `årštf ( ¡d”r , 608 "Inv®id…š_cod»que¡†’gth (%u by‹s)\n", Ën ); 612 ià( mÚ™Ü ) { 613  addr [18]; 614 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 615 `´štf ("hci%u % »que¡ PIN\n", šdex , addr ); 618 `´štf ("PIN Request (pressƒntero„eject) >> "); 619 `fæush ( ¡dout ); 621 `mem£t ( pš , 0, (pin)); 623 ià( `fg‘s ( pš , Õš), ¡dš è=ð NULL ||…in[0] == '\n') { 624 `mgmt_pš_Ãg_»¶y ( mgmt , šdex , & ev -> addr ); 628 pš_Ën = `¡¾’ ( pš ); 629 ià( pš [ pš_Ën - 1] == '\n') { 630 pš [ pš_Ën - 1] = '\0'; 631 pš_Ën --; 634 `mgmt_pš_»¶y ( mgmt , šdex , & ev -> addr , pš , pš_Ën ); 635 } } 637  $cÚfœm_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 638 * u£r_d©a ) 640 ià( ¡©us != 0) { 641 `årštf ( ¡d”r , 643 ¡©us , `mgmt_”r¡r (status)); 644 `mašloÝ_qu™ (); 648 `´štf ("User Confirm Reply successful\n"); 649 } } 651  $mgmt_cÚfœm_»¶y ( mgmt *mgmt, ušt16_t šdex , 652 cÚ¡  mgmt_addr_šfo * addr ) 654  mgmt_ý_u£r_cÚfœm_»¶y ý ; 656 `mem£t (& ý , 0, (cp)); 657 `memýy (& ý . addr ,‡ddr, (*addr)); 659  `mgmt_»¶y ( mgmt , MGMT_OP_USER_CONFIRM_REPLY , šdex , 660 ( ý ), &ý, cÚfœm_r¥ , NULL , NULL); 661 } } 663  $cÚfœm_Ãg_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 664 * u£r_d©a ) 666 ià( ¡©us != 0) { 667 `årštf ( ¡d”r , 669 ¡©us , `mgmt_”r¡r (status)); 670 `mašloÝ_qu™ (); 674 `´štf ("User Confirm Negative Reply successful\n"); 675 } } 677  $mgmt_cÚfœm_Ãg_»¶y ( mgmt *mgmt, ušt16_t šdex , 678 cÚ¡  mgmt_addr_šfo * addr ) 680  mgmt_ý_u£r_cÚfœm_»¶y ý ; 682 `mem£t (& ý , 0, (cp)); 683 `memýy (& ý . addr ,‡ddr, (*addr)); 685  `mgmt_»¶y ( mgmt , MGMT_OP_USER_CONFIRM_NEG_REPLY , šdex , 686 ( ý ), &ý, cÚfœm_Ãg_r¥ , NULL , NULL); 687 } } 690  $u£r_cÚfœm ( ušt16_t šdex , ušt16_ˆ Ën , cÚ¡ * ·¿m , 691 * u£r_d©a ) 693 cÚ¡  mgmt_ev_u£r_cÚfœm_»que¡ * ev = ·¿m ; 694  mgmt *mgmˆð u£r_d©a ; 695  r¥ [5]; 696 size_t r¥_Ën ; 697 ušt32_t v® ; 698  addr [18]; 700 ià( Ën !ð(* ev )) { 701 `årštf ( ¡d”r , 702 "Inv®id u£r_cÚfœm„eque¡†’gth (%u)\n", Ën ); 706 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 707 v® = `g‘_Ë32 (& ev -> v®ue ); 709 ià( mÚ™Ü ) 710 `´štf ("hci%u % U£¸CÚfœm %06u hšˆ%u\n", šdex , addr , 711 v® , ev -> cÚfœm_hšt ); 713 ià( ev -> cÚfœm_hšt ) 714 `´štf ("Acû±…aœšg w™h % (yes/noè>> ", addr ); 716 `´štf ("CÚfœm v®u%06u fÜ % (yes/noè>> ", v® , addr ); 718 `fæush ( ¡dout ); 720 `mem£t ( r¥ , 0, (rsp)); 722 ià( `fg‘s ( r¥ , Ô¥), ¡dš è=ð NULL ||„sp[0] == '\n') { 723 `mgmt_cÚfœm_Ãg_»¶y ( mgmt , šdex , & ev -> addr ); 727 r¥_Ën = `¡¾’ ( r¥ ); 728 ià( r¥ [ r¥_Ën - 1] == '\n') 729 r¥ [ r¥_Ën - 1] = '\0'; 731 ià( r¥ [0] == 'y' ||„sp[0] == 'Y') 732 `mgmt_cÚfœm_»¶y ( mgmt , šdex , & ev -> addr ); 734 `mgmt_cÚfœm_Ãg_»¶y ( mgmt , šdex , & ev -> addr ); 735 } } 737  $·sskey_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 738 * u£r_d©a ) 740 ià( ¡©us != 0) { 741 `årštf ( ¡d”r , 743 ¡©us , `mgmt_”r¡r (status)); 744 `mašloÝ_qu™ (); 748 `´štf ("User Passkey Reply successful\n"); 749 } } 751  $mgmt_·sskey_»¶y ( mgmt *mgmt, ušt16_t šdex , 752 cÚ¡  mgmt_addr_šfo * addr , 753 ušt32_t ·sskey ) 755  mgmt_ý_u£r_·sskey_»¶y ý ; 757 `mem£t (& ý , 0, (cp)); 758 `memýy (& ý . addr ,‡ddr, (*addr)); 759 `put_Ë32 ( ·sskey , & ý .passkey); 761  `mgmt_»¶y ( mgmt , MGMT_OP_USER_PASSKEY_REPLY , šdex , 762 ( ý ), &ý, ·sskey_r¥ , NULL , NULL); 763 } } 765  $·sskey_Ãg_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 766 * u£r_d©a ) 768 ià( ¡©us != 0) { 769 `årštf ( ¡d”r , 771 ¡©us , `mgmt_”r¡r (status)); 772 `mašloÝ_qu™ (); 776 `´štf ("User Passkey Negative Reply successful\n"); 777 } } 779  $mgmt_·sskey_Ãg_»¶y ( mgmt *mgmt, ušt16_t šdex , 780 cÚ¡  mgmt_addr_šfo * addr ) 782  mgmt_ý_u£r_·sskey_»¶y ý ; 784 `mem£t (& ý , 0, (cp)); 785 `memýy (& ý . addr ,‡ddr, (*addr)); 787  `mgmt_»¶y ( mgmt , MGMT_OP_USER_PASSKEY_NEG_REPLY , šdex , 788 ( ý ), &ý, ·sskey_Ãg_r¥ , NULL , NULL); 789 } } 792  $»que¡_·sskey ( ušt16_t šdex , ušt16_ˆ Ën , cÚ¡ * ·¿m , 793 * u£r_d©a ) 795 cÚ¡  mgmt_ev_u£r_·sskey_»que¡ * ev = ·¿m ; 796  mgmt *mgmˆð u£r_d©a ; 797  ·sskey [7]; 799 ià( Ën !ð(* ev )) { 800 `årštf ( ¡d”r , 801 "Inv®id…asskey„eque¡†’gth (%u by‹s)\n", Ën ); 805 ià( mÚ™Ü ) { 806  addr [18]; 807 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 808 `´štf ("hci%u % »que¡…asskey\n", šdex , addr ); 811 `´štf ("Passkey Request (pressƒntero„eject) >> "); 812 `fæush ( ¡dout ); 814 `mem£t ( ·sskey , 0, (passkey)); 816 ià( `fg‘s ( ·sskey , Õasskey), ¡dš è=ð NULL || 817 ·sskey [0] == '\n') { 818 `mgmt_·sskey_Ãg_»¶y ( mgmt , šdex , & ev -> addr ); 822 Ën = `¡¾’ ( ·sskey ); 823 ià( ·sskey [ Ën - 1] == '\n') { 824 ·sskey [ Ën - 1] = '\0'; 825 Ën --; 828 `mgmt_·sskey_»¶y ( mgmt , šdex , & ev -> addr , `©oi ( ·sskey )); 829 } } 831  $·sskey_nÙify ( ušt16_t šdex , ušt16_ˆ Ën , cÚ¡ * ·¿m , 832 * u£r_d©a ) 834 cÚ¡  mgmt_ev_·sskey_nÙify * ev = ·¿m ; 836 ià( Ën !ð(* ev )) { 837 `årštf ( ¡d”r , 838 "Inv®id…asskey„eque¡†’gth (%u by‹s)\n", Ën ); 842 ià( mÚ™Ü ) { 843  addr [18]; 844 `ba2¡r (& ev -> addr . bdaddr ,‡ddr); 845 `´štf ("hci%u % »que¡…asskey\n", šdex , addr ); 848 `´štf ("Passkey NÙify: %06u (’‹»d %u)\n", `g‘_Ë32 (& ev -> ·sskey ), 849 ev -> ’‹»d ); 850 } } 852  $cmd_mÚ™Ü ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 853 ** ¬gv ) 855 `´štf ("Monitoring mgmtƒvents...\n"); 856 mÚ™Ü = Œue ; 857 } } 859  $v”siÚ_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 860 * u£r_d©a ) 862 cÚ¡  mgmt_½_»ad_v”siÚ * ½ = ·¿m ; 864 ià( ¡©us != 0) { 865 `årštf ( ¡d”r , "Reading mgmt version failed with status" 866 " 0x%02x (%s)\n", ¡©us , `mgmt_”r¡r (status)); 867  dÚe ; 870 ià( Ën < (* ½ )) { 871 `årštf ( ¡d”r , "ToØsm®Èv”siÚ„•ly (%u by‹s)\n", Ën ); 872  dÚe ; 875 `´štf ("MGMT V”siÚ %u,„evisiÚ %u\n", ½ -> v”siÚ , 876 `g‘_Ë16 (& ½ -> »visiÚ )); 878 dÚe : 879 `mašloÝ_qu™ (); 880 } } 882  $cmd_v”siÚ ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 883 ** ¬gv ) 885 ià( `mgmt_£nd ( mgmt , MGMT_OP_READ_VERSION , MGMT_INDEX_NONE , 886 0, NULL , v”siÚ_r¥ , NULL, NULL) == 0) { 887 `årštf ( ¡d”r , "Unableo send„ead_version cmd\n"); 888 `ex™ ( EXIT_FAILURE ); 890 } } 892  $commªds_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 893 * u£r_d©a ) 895 cÚ¡  mgmt_½_»ad_commªds * ½ = ·¿m ; 896 ušt16_t num_commªds , num_ev’ts ; 897 cÚ¡ ušt16_t * Ýcode ; 898 size_t ex³ùed_Ën ; 899  i ; 901 ià( ¡©us != 0) { 902 `årštf ( ¡d”r , "Reading supported commands failed with status" 903 " 0x%02x (%s)\n", ¡©us , `mgmt_”r¡r (status)); 904  dÚe ; 907 ià( Ën < (* ½ )) { 908 `årštf ( ¡d”r , "ToØsm®Ècommªd »¶y (%u by‹s)\n", Ën ); 909  dÚe ; 912 num_commªds = `g‘_Ë16 (& ½ ->num_commands); 913 num_ev’ts = `g‘_Ë16 (& ½ ->num_events); 915 ex³ùed_Ën = (* ½ è+ num_commªds * ( ušt16_t ) + 916 num_ev’ts * ( ušt16_t ); 918 ià( Ën < ex³ùed_Ën ) { 919 `årštf ( ¡d”r , "Too small commands„eply (%u != %zu)\n", 920 Ën , ex³ùed_Ën ); 921  dÚe ; 924 Ýcode = ½ -> Ýcodes ; 926 `´štf ("%u commªds:\n", num_commªds ); 927  i = 0; i < num_commªds ; i++) { 928 ušt16_t Ý = `g‘_Ë16 ( Ýcode ++); 929 `´štf ("\t% (0x%04x)\n", `mgmt_Ý¡r ( Ý ), op); 932 `´štf ("%uƒv’ts:\n", num_ev’ts ); 933  i = 0; i < num_ev’ts ; i++) { 934 ušt16_t ev = `g‘_Ë16 ( Ýcode ++); 935 `´štf ("\t% (0x%04x)\n", `mgmt_ev¡r ( ev ),ƒv); 938 dÚe : 939 `mašloÝ_qu™ (); 940 } } 942  $cmd_commªds ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 943 ** ¬gv ) 945 ià( `mgmt_£nd ( mgmt , MGMT_OP_READ_COMMANDS , MGMT_INDEX_NONE , 946 0, NULL , commªds_r¥ , NULL, NULL) == 0) { 947 `årštf ( ¡d”r , "Unableo send„ead_commands cmd\n"); 948 `ex™ ( EXIT_FAILURE ); 950 } } 952  $uncÚf_šdex_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 953 * u£r_d©a ) 955 cÚ¡  mgmt_½_»ad_uncÚf_šdex_li¡ * ½ = ·¿m ; 956 ušt16_t couÁ ; 957  i ; 959 ià( ¡©us != 0) { 960 `årštf ( ¡d”r , 962 ¡©us , `mgmt_”r¡r (status)); 963  dÚe ; 966 ià( Ën < (* ½ )) { 967 `årštf ( ¡d”r , "Too small index†ist„eply (%u bytes)\n", 968 Ën ); 969  dÚe ; 972 couÁ = `g‘_Ë16 (& ½ -> num_cÚŒÞËrs ); 974 ià( Ën < (* ½ è+ couÁ * ( ušt16_t )) { 975 `årštf ( ¡d”r , 977 couÁ , Ën ); 978  dÚe ; 981 `´štf ("Unconfigured index†ist with %u item%s\n", 982 couÁ , count != 1 ? "s" : ""); 984  i = 0; i < couÁ ; i++) { 985 ušt16_t šdex ; 987 šdex = `g‘_Ë16 (& ½ ->šdex[ i ]); 989 `´štf ("\thci%u\n", šdex ); 993 dÚe : 994 `mašloÝ_qu™ (); 995 } } 997  $cÚfig_šfo_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 998 * u£r_d©a ) 1000 cÚ¡  mgmt_½_»ad_cÚfig_šfo * ½ = ·¿m ; 1001 ušt16_t šdex = `PTR_TO_UINT ( u£r_d©a ); 1003 ià( ¡©us != 0) { 1004 `årštf ( ¡d”r , 1006 šdex , ¡©us , `mgmt_”r¡r (status)); 1007  dÚe ; 1010 ià( Ën < (* ½ )) { 1011 `årštf ( ¡d”r , "ToØsm®ÈšfØ»¶y (%u by‹s)\n", Ën ); 1012  dÚe ; 1015 `´štf ("hci%u:\tmªuçùu»¸%u\n", šdex , `g‘_Ë16 (& ½ -> mªuçùu»r )); 1017 `´štf ("\tsupported options: "); 1018 `´št_ÝtiÚs ( `g‘_Ë32 (& ½ -> suµÜ‹d_ÝtiÚs )); 1019 `´štf ("\n"); 1021 `´štf ("\tmissing options: "); 1022 `´št_ÝtiÚs ( `g‘_Ë32 (& ½ -> missšg_ÝtiÚs )); 1023 `´štf ("\n"); 1025 dÚe : 1026 `mašloÝ_qu™ (); 1027 } } 1029  $cmd_cÚfig ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 1031 * d©a ; 1033 ià( šdex =ð MGMT_INDEX_NONE ) { 1034 ià( `mgmt_£nd ( mgmt , MGMT_OP_READ_UNCONF_INDEX_LIST , 1035 MGMT_INDEX_NONE , 0, NULL , 1036 uncÚf_šdex_r¥ , mgmt , NULL ) == 0) { 1037 `årštf ( ¡d”r , "Unableo send unconf_index_list cmd\n"); 1038 `ex™ ( EXIT_FAILURE ); 1044 d©a = `UINT_TO_PTR ( šdex ); 1046 ià( `mgmt_£nd ( mgmt , MGMT_OP_READ_CONFIG_INFO , šdex , 0, NULL , 1047 cÚfig_šfo_r¥ , d©a , NULL ) == 0) { 1048 `årštf ( ¡d”r , "Unableo send„ead_config_info cmd\n"); 1049 `ex™ ( EXIT_FAILURE ); 1051 } } 1053  $šfo_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 1054 * u£r_d©a ) 1056 cÚ¡  mgmt_½_»ad_šfo * ½ = ·¿m ; 1057 ušt16_t šdex = `PTR_TO_UINT ( u£r_d©a ); 1058  addr [18]; 1060 ³ndšg --; 1062 ià( ¡©us != 0) { 1063 `årštf ( ¡d”r , 1065 šdex , ¡©us , `mgmt_”r¡r (status)); 1066  dÚe ; 1069 ià( Ën < (* ½ )) { 1070 `årštf ( ¡d”r , "ToØsm®ÈšfØ»¶y (%u by‹s)\n", Ën ); 1071  dÚe ; 1074 `ba2¡r (& ½ -> bdaddr , addr ); 1075 `´štf ("hci%u:\taddr %s version %u manufacturer %u" 1076 " cÏs 0x%02x%02x%02x\n", šdex , 1077 addr , ½ -> v”siÚ , `g‘_Ë16 (&½-> mªuçùu»r ), 1078 ½ -> dev_þass [2],„p->dev_class[1],„p->dev_class[0]); 1080 `´štf ("\tsupported settings: "); 1081 `´št_£‰šgs ( `g‘_Ë32 (& ½ -> suµÜ‹d_£‰šgs )); 1083 `´štf ("\n\tcurrent settings: "); 1084 `´št_£‰šgs ( `g‘_Ë32 (& ½ -> cu¼’t_£‰šgs )); 1086 `´štf ("\n\Šam%s\n", ½ -> Çme ); 1087 `´štf ("\tsh܈Çm%s\n", ½ -> shÜt_Çme ); 1089 ià( ³ndšg > 0) 1092 dÚe : 1093 `mašloÝ_qu™ (); 1094 } } 1096  $šdex_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 1097 * u£r_d©a ) 1099 cÚ¡  mgmt_½_»ad_šdex_li¡ * ½ = ·¿m ; 1100  mgmt *mgmˆð u£r_d©a ; 1101 ušt16_t couÁ ; 1102  i ; 1104 ià( ¡©us != 0) { 1105 `årštf ( ¡d”r , 1107 ¡©us , `mgmt_”r¡r (status)); 1108  dÚe ; 1111 ià( Ën < (* ½ )) { 1112 `årštf ( ¡d”r , "Too small index†ist„eply (%u bytes)\n", 1113 Ën ); 1114  dÚe ; 1117 couÁ = `g‘_Ë16 (& ½ -> num_cÚŒÞËrs ); 1119 ià( Ën < (* ½ è+ couÁ * ( ušt16_t )) { 1120 `årštf ( ¡d”r , 1122 couÁ , Ën ); 1123  dÚe ; 1126 ià( mÚ™Ü ) 1127 `´štf ("Index†ist with %u item%s\n", 1128 couÁ , count != 1 ? "s" : ""); 1130 ià( couÁ == 0) 1131  dÚe ; 1133 ià( mÚ™Ü && couÁ > 0) 1134 `´štf ("\t"); 1136  i = 0; i < couÁ ; i++) { 1137 ušt16_t šdex ; 1138 * d©a ; 1140 šdex = `g‘_Ë16 (& ½ ->šdex[ i ]); 1142 ià( mÚ™Ü ) 1143 `´štf ("hci%u ", šdex ); 1145 d©a = `UINT_TO_PTR ( šdex ); 1147 ià( `mgmt_£nd ( mgmt , MGMT_OP_READ_INFO , šdex , 0, NULL , 1148 šfo_r¥ , d©a , NULL ) == 0) { 1149 `årštf ( ¡d”r , "Unableo send„ead_info cmd\n"); 1150  dÚe ; 1153 ³ndšg ++; 1156 ià( mÚ™Ü && couÁ > 0) 1157 `´štf ("\n"); 1161 dÚe : 1162 `mašloÝ_qu™ (); 1163 } } 1165  $cmd_šfo ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 1167 * d©a ; 1169 ià( šdex =ð MGMT_INDEX_NONE ) { 1170 ià( `mgmt_£nd ( mgmt , MGMT_OP_READ_INDEX_LIST , 1171 MGMT_INDEX_NONE , 0, NULL , 1172 šdex_r¥ , mgmt , NULL ) == 0) { 1173 `årštf ( ¡d”r , "Unableo send index_list cmd\n"); 1174 `ex™ ( EXIT_FAILURE ); 1180 d©a = `UINT_TO_PTR ( šdex ); 1182 ià( `mgmt_£nd ( mgmt , MGMT_OP_READ_INFO , šdex , 0, NULL , šfo_r¥ , 1183 d©a , NULL ) == 0) { 1184 `årštf ( ¡d”r , "Unableo send„ead_info cmd\n"); 1185 `ex™ ( EXIT_FAILURE ); 1187 } } 1190  scommªd_d©a { 1191 ušt16_t mid ; 1192 ušt16_t mÝ ; 1193 (* mÿÎback è( ušt16_t mid , ušt16_ˆ mÝ , ušt8_t m¡©us , 1194 ušt16_t mËn , cÚ¡ * m·¿m ); 1197  $cmd_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 1198 * u£r_d©a ) 1200  commªd_d©a * d©a = u£r_d©a ; 1202 d©a -> `ÿÎback (d©a-> Ý , d©a-> id , ¡©us , Ën , ·¿m ); 1203 } } 1205  £nd_cmd ( mgmt *mgmt, ušt16_t Ý , ušt16_ˆ id , 1206 ušt16_t Ën , cÚ¡ * ·¿m , 1207 (* cb )( ušt16_t id , ušt16_ˆ Ý , 1208 ušt8_t ¡©us , ušt16_t Ën , 1209 cÚ¡ * ·¿m )) 1211  commªd_d©a * d©a ; 1212  £nd_id ; 1214 d©a = `Ãw0 ( commªd_d©a , 1); 1215 ià(! d©a ) 1218 d©a -> id = id; 1219 d©a -> Ý = op; 1220 d©a -> ÿÎback = cb ; 1222 £nd_id = `mgmt_£nd ( mgmt , Ý , id , Ën , ·¿m , cmd_r¥ , d©a , ä“ ); 1223 ià( £nd_id == 0) 1224 `ä“ ( d©a ); 1226  £nd_id ; 1227 } } 1229  $£‰šg_r¥ ( ušt16_t Ý , ušt16_ˆ id , ušt8_t ¡©us , ušt16_ˆ Ën , 1230 cÚ¡ * ·¿m ) 1232 cÚ¡ ušt32_t * ½ = ·¿m ; 1234 ià( ¡©us != 0) { 1235 `årštf ( ¡d”r , 1237 `mgmt_Ý¡r ( Ý ), id , ¡©us , `mgmt_”r¡r (status)); 1238  dÚe ; 1241 ià( Ën < (* ½ )) { 1242 `årštf ( ¡d”r , "Too small %s„esponse (%u bytes)\n", 1243 `mgmt_Ý¡r ( Ý ), Ën ); 1244  dÚe ; 1247 `´štf ("hci%u % com¶‘e, s‘tšgs: ", id , `mgmt_Ý¡r ( Ý )); 1248 `´št_£‰šgs ( `g‘_Ë32 ( ½ )); 1249 `´štf ("\n"); 1251 dÚe : 1252 `mašloÝ_qu™ (); 1253 } } 1255  $cmd_£‰šg ( mgmt *mgmt, ušt16_t šdex , ušt16_ˆ Ý , 1256  ¬gc , ** ¬gv ) 1258 ušt8_t v® ; 1260 ià( ¬gc < 2) { 1261 `´štf ("Specify \"on\" or \"off\"\n"); 1262 `ex™ ( EXIT_FAILURE ); 1265 ià( `¡rÿ£cmp ( ¬gv [1], "on") == 0 || strcasecmp(argv[1], "yes") == 0) 1266 v® = 1; 1267 ià( `¡rÿ£cmp ( ¬gv [1], "off") == 0) 1268 v® = 0; 1270 v® = `©oi ( ¬gv [1]); 1272 ià( šdex =ð MGMT_INDEX_NONE ) 1273 šdex = 0; 1275 ià( `£nd_cmd ( mgmt , Ý , šdex , ( v® ), &v®, £‰šg_r¥ ) == 0) { 1276 `årštf ( ¡d”r , "UÇbËØ£nd % cmd\n", `mgmt_Ý¡r ( Ý )); 1277 `ex™ ( EXIT_FAILURE ); 1279 } } 1281  $cmd_pow” ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 1283 `cmd_£‰šg ( mgmt , šdex , MGMT_OP_SET_POWERED , ¬gc , ¬gv ); 1284 } } 1286  $cmd_discov ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 1287 ** ¬gv ) 1289  mgmt_ý_£t_discov”abË ý ; 1291 ià( ¬gc < 2) { 1292 `´štf ("U§ge: btmgmˆ%  [timeout]\n", ¬gv [0]); 1293 `ex™ ( EXIT_FAILURE ); 1296 `mem£t (& ý , 0, (cp)); 1298 ià( `¡rÿ£cmp ( ¬gv [1], "on") == 0 || strcasecmp(argv[1], "yes") == 0) 1299 ý . v® = 1; 1300 ià( `¡rÿ£cmp ( ¬gv [1], "off") == 0) 1301 ý . v® = 0; 1302 ià( `¡rÿ£cmp ( ¬gv [1], "limited") == 0) 1303 ý . v® = 2; 1305 ý . v® = `©oi ( ¬gv [1]); 1307 ià( ¬gc > 2) 1308 ý . timeout = `htobs ( `©oi ( ¬gv [2])); 1310 ià( šdex =ð MGMT_INDEX_NONE ) 1311 šdex = 0; 1313 ià( `£nd_cmd ( mgmt , MGMT_OP_SET_DISCOVERABLE , šdex , ( ý ), &cp, 1314 £‰šg_r¥ ) == 0) { 1315 `årštf ( ¡d”r , "Unableo send set_discoverable cmd\n"); 1316 `ex™ ( EXIT_FAILURE ); 1318 } } 1320  $cmd_cÚÃùabË ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 1321 ** ¬gv ) 1323 `cmd_£‰šg ( mgmt , šdex , MGMT_OP_SET_CONNECTABLE , ¬gc , ¬gv ); 1324 } } 1326  $cmd_ç¡_cÚn ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 1327 ** ¬gv ) 1329 `cmd_£‰šg ( mgmt , šdex , MGMT_OP_SET_FAST_CONNECTABLE , ¬gc , ¬gv ); 1330 } } 1332  $cmd_bÚdabË ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 1333 ** ¬gv ) 1335 `cmd_£‰šg ( mgmt , šdex , MGMT_OP_SET_BONDABLE , ¬gc , ¬gv ); 1336 } } 1338  $cmd_lšk£c ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 1339 ** ¬gv ) 1341 `cmd_£‰šg ( mgmt , šdex , MGMT_OP_SET_LINK_SECURITY , ¬gc , ¬gv ); 1342 } } 1344  $cmd_s¥ ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 1346 `cmd_£‰šg ( mgmt , šdex , MGMT_OP_SET_SSP , ¬gc , ¬gv ); 1347 } } 1349  $cmd_sc ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 1351 ušt8_t v® ; 1353 ià( ¬gc < 2) { 1354 `´štf ("Specify \"on\" or \"off\" or \"only\"\n"); 1355 `ex™ ( EXIT_FAILURE ); 1358 ià( `¡rÿ£cmp ( ¬gv [1], "on") == 0 || strcasecmp(argv[1], "yes") == 0) 1359 v® = 1; 1360 ià( `¡rÿ£cmp ( ¬gv [1], "off") == 0) 1361 v® = 0; 1362 ià( `¡rÿ£cmp ( ¬gv [1], "only") == 0) 1363 v® = 2; 1365 v® = `©oi ( ¬gv [1]); 1367 ià( šdex =ð MGMT_INDEX_NONE ) 1368 šdex = 0; 1370 ià( `£nd_cmd ( mgmt , MGMT_OP_SET_SECURE_CONN , šdex , 1371 ( v® ), &v®, £‰šg_r¥ ) == 0) { 1372 `årštf ( ¡d”r , "Unableo send set_secure_conn cmd\n"); 1373 `ex™ ( EXIT_FAILURE ); 1375 } } 1377  $cmd_hs ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 1379 `cmd_£‰šg ( mgmt , šdex , MGMT_OP_SET_HS , ¬gc , ¬gv ); 1380 } } 1382  $cmd_Ë ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 1384 `cmd_£‰šg ( mgmt , šdex , MGMT_OP_SET_LE , ¬gc , ¬gv ); 1385 } } 1387  $cmd_adv”tisšg ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 1388 ** ¬gv ) 1390 `cmd_£‰šg ( mgmt , šdex , MGMT_OP_SET_ADVERTISING , ¬gc , ¬gv ); 1391 } } 1393  $cmd_b»dr ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 1395 `cmd_£‰šg ( mgmt , šdex , MGMT_OP_SET_BREDR , ¬gc , ¬gv ); 1396 } } 1398  $cmd_´ivacy ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 1399 ** ¬gv ) 1401  mgmt_ý_£t_´ivacy ý ; 1403 ià( ¬gc < 2) { 1404 `´štf ("Specify \"on\" or \"off\"\n"); 1405 `ex™ ( EXIT_FAILURE ); 1408 ià( `¡rÿ£cmp ( ¬gv [1], "on") == 0 || strcasecmp(argv[1], "yes") == 0) 1409 ý . ´ivacy = 0x01; 1410 ià( `¡rÿ£cmp ( ¬gv [1], "off") == 0) 1411 ý . ´ivacy = 0x00; 1413 ý . ´ivacy = `©oi ( ¬gv [1]); 1415 ià( šdex =ð MGMT_INDEX_NONE ) 1416 šdex = 0; 1418 ià( ¬gc > 2) { 1419 ià( `cÚv”t_hex¡r ( ¬gv [2], ý . œk , 1420 ( ý . œk )) != (cp.irk)) { 1421 `årštf ( ¡d”r , "Invalid key format\n"); 1422 `ex™ ( EXIT_FAILURE ); 1425  fd ; 1427 fd = `Ý’ ("/dev/u¿ndom", O_RDONLY ); 1428 ià( fd < 0) { 1429 `årštf ( ¡d”r , "open(/dev/urandom): %s\n", 1430 `¡»¼Ü ( ”ºo )); 1431 `ex™ ( EXIT_FAILURE ); 1434 ià( `»ad ( fd , ý . œk , (cp.irk)) != (cp.irk)) { 1435 `årštf ( ¡d”r , "Reading from urandom failed\n"); 1436 `þo£ ( fd ); 1437 `ex™ ( EXIT_FAILURE ); 1440 `þo£ ( fd ); 1443 ià( `£nd_cmd ( mgmt , MGMT_OP_SET_PRIVACY , šdex , ( ý ), &cp, 1444 £‰šg_r¥ ) == 0) { 1445 `årštf ( ¡d”r , "Unableo send Set Privacy command\n"); 1446 `ex™ ( EXIT_FAILURE ); 1448 } } 1450  $þass_r¥ ( ušt16_t Ý , ušt16_ˆ id , ušt8_t ¡©us , ušt16_ˆ Ën , 1451 cÚ¡ * ·¿m ) 1453 cÚ¡  mgmt_ev_þass_of_dev_chªged * ½ = ·¿m ; 1455 ià( Ën =ð0 && ¡©us != 0) { 1456 `årštf ( ¡d”r , "%s failed, status 0x%02x (%s)\n", 1457 `mgmt_Ý¡r ( Ý ), ¡©us , `mgmt_”r¡r (status)); 1458  dÚe ; 1461 ià( Ën !ð(* ½ )) { 1462 `årštf ( ¡d”r , "UÃx³ùed % ËÀ%u\n", `mgmt_Ý¡r ( Ý ), Ën ); 1463  dÚe ; 1466 `´štf ("% sucûeded. CÏs 0x%02x%02x%02x\n", `mgmt_Ý¡r ( Ý ), 1467 ½ -> þass_of_dev [2],„p->class_of_dev[1],„p->class_of_dev[0]); 1469 dÚe : 1470 `mašloÝ_qu™ (); 1471 } } 1473  $cmd_þass ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 1475 ušt8_t þass [2]; 1477 ià( ¬gc < 3) { 1478 `´štf ("U§ge: btmgmˆ%  \n", ¬gv [0]); 1479 `ex™ ( EXIT_FAILURE ); 1482 þass [0] = `©oi ( ¬gv [1]); 1483 þass [1] = `©oi ( ¬gv [2]); 1485 ià( šdex =ð MGMT_INDEX_NONE ) 1486 šdex = 0; 1488 ià( `£nd_cmd ( mgmt , MGMT_OP_SET_DEV_CLASS , šdex , ( þass ), class, 1489 þass_r¥ ) == 0) { 1490 `årštf ( ¡d”r , "Unableo send set_dev_class cmd\n"); 1491 `ex™ ( EXIT_FAILURE ); 1493 } } 1495  $discÚÃù_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 1496 * u£r_d©a ) 1498 cÚ¡  mgmt_½_discÚÃù * ½ = ·¿m ; 1499  addr [18]; 1501 ià( Ën =ð0 && ¡©us != 0) { 1502 `årštf ( ¡d”r , "Disconnect failed with status 0x%02x (%s)\n", 1503 ¡©us , `mgmt_”r¡r (status)); 1504  dÚe ; 1507 ià( Ën !ð(* ½ )) { 1508 `årštf ( ¡d”r , "Invalid disconnect„esponse†ength (%u)\n", 1509 Ën ); 1510  dÚe ; 1513 `ba2¡r (& ½ -> addr . bdaddr ,‡ddr); 1515 ià( ¡©us == 0) 1516 `´štf ("% discÚÃùed\n", addr ); 1518 `årštf ( ¡d”r , 1520 addr , ¡©us , `mgmt_”r¡r (status)); 1522 dÚe : 1523 `mašloÝ_qu™ (); 1524 } } 1526  $discÚÃù_u§ge () 1528 `´štf ("Usage: btmgmt disconnect [-type] \n"); 1529 } } 1531  ÝtiÚ gdiscÚÃù_ÝtiÚs [] = { 1537  $cmd_discÚÃù ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 1538 ** ¬gv ) 1540  mgmt_ý_discÚÃù ý ; 1541 ušt8_t ty³ = BDADDR_BREDR ; 1542  Ýt ; 1544 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+t:h", discÚÃù_ÝtiÚs , 1545 NULL )) != -1) { 1546  Ýt ) { 1548 ty³ = `¡¹Þ ( Ýrg , NULL , 0); 1552 `discÚÃù_u§ge (); 1553 `ex™ ( EXIT_SUCCESS ); 1557 ¬gc -ð Ýtšd ; 1558 ¬gv +ð Ýtšd ; 1559 Ýtšd = 0; 1561 ià( ¬gc < 1) { 1562 `discÚÃù_u§ge (); 1563 `ex™ ( EXIT_FAILURE ); 1566 ià( šdex =ð MGMT_INDEX_NONE ) 1567 šdex = 0; 1569 `mem£t (& ý , 0, (cp)); 1570 `¡r2ba ( ¬gv [0], & ý . addr . bdaddr ); 1571 ý . addr . ty³ =ype; 1573 ià( `mgmt_£nd ( mgmt , MGMT_OP_DISCONNECT , šdex , ( ý ), &cp, 1574 discÚÃù_r¥ , NULL , NULL) == 0) { 1575 `årštf ( ¡d”r , "Unableo send disconnect cmd\n"); 1576 `ex™ ( EXIT_FAILURE ); 1578 } } 1580  $cÚ_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 1581 * u£r_d©a ) 1583 cÚ¡  mgmt_½_g‘_cÚÃùiÚs * ½ = ·¿m ; 1584 ušt16_t couÁ , i ; 1586 ià( Ën < (* ½ )) { 1587 `årštf ( ¡d”r , "Too small (%u bytes) get_connections„sp\n", 1588 Ën ); 1589  dÚe ; 1592 couÁ = `g‘_Ë16 (& ½ -> cÚn_couÁ ); 1593 ià( Ën !ð(* ½ è+ couÁ * ( mgmt_addr_šfo )) { 1594 `årštf ( ¡d”r , "Invalid get_connections†ength " 1595 " (couÁ=%u,†’=%u)\n", couÁ , Ën ); 1596  dÚe ; 1599  i = 0; i < couÁ ; i++) { 1600  addr [18]; 1602 `ba2¡r (& ½ -> addr [ i ]. bdaddr ,‡ddr); 1604 `´štf ("% ty³ %s\n", addr , `ty³¡r ( ½ ->addr[ i ]. ty³ )); 1607 dÚe : 1608 `mašloÝ_qu™ (); 1609 } } 1611  $cmd_cÚ ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 1613 ià( šdex =ð MGMT_INDEX_NONE ) 1614 šdex = 0; 1616 ià( `mgmt_£nd ( mgmt , MGMT_OP_GET_CONNECTIONS , šdex , 0, NULL , 1617 cÚ_r¥ , NULL , NULL) == 0) { 1618 `årštf ( ¡d”r , "Unableo send get_connections cmd\n"); 1619 `ex™ ( EXIT_FAILURE ); 1621 } } 1623  $fšd_£rviû_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 1624 * u£r_d©a ) 1626 ià( ¡©us != 0) { 1627 `årštf ( ¡d”r , 1629 ¡©us , `mgmt_”r¡r (status)); 1630 `mašloÝ_qu™ (); 1634 `´štf ("Service discovery started\n"); 1635 discov”y = Œue ; 1636 } } 1638  $fšd_£rviû_u§ge () 1640 `´štf ("Usage: btmgmt find-service [-u UUID] [-r RSSI_Threshold] [-l|-b]\n"); 1641 } } 1643  ÝtiÚ gfšd_£rviû_ÝtiÚs [] = { 1644 { "h–p", no_¬gum’t , 0, 'h' }, 1645 { "Ë-Úly", no_¬gum’t , 0, 'l' }, 1646 { "b»dr-Úly", no_¬gum’t , 0, 'b' }, 1647 { "uuid", »quœed_¬gum’t , 0, 'u' }, 1648 { "rssi", »quœed_¬gum’t , 0, 'r' }, 1652  $uuid_to_uuid128 ( uuid_t * uuid128 , cÚ¡ uuid_ˆ* uuid ) 1654 ià( uuid -> ty³ =ð SDP_UUID16 ) 1655 `sdp_uuid16_to_uuid128 ( uuid128 , uuid ); 1656 ià( uuid -> ty³ =ð SDP_UUID32 ) 1657 `sdp_uuid32_to_uuid128 ( uuid128 , uuid ); 1659 `memýy ( uuid128 , uuid , (*uuid)); 1660 } } 1662  #MAX_UUIDS 4 ) 1664  $cmd_fšd_£rviû ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 1665 ** ¬gv ) 1667  mgmt_ý_¡¬t_£rviû_discov”y * ý ; 1668 ušt8_t buf [(* ý è+ 16 * MAX_UUIDS ]; 1669 uuid_t uuid ; 1670 ušt128_t ušt128 ; 1671 uuid_t uuid128 ; 1672 ušt8_t ty³ ; 1673 št8_t rssi ; 1674 ušt16_t couÁ ; 1675  Ýt ; 1677 ià( šdex =ð MGMT_INDEX_NONE ) 1678 šdex = 0; 1680 ty³ = 0; 1681 `hci_£t_b™ ( BDADDR_BREDR , & ty³ ); 1682 `hci_£t_b™ ( BDADDR_LE_PUBLIC , & ty³ ); 1683 `hci_£t_b™ ( BDADDR_LE_RANDOM , & ty³ ); 1684 rssi = 127; 1685 couÁ = 0; 1687 ià( ¬gc == 1) { 1688 `fšd_£rviû_u§ge (); 1689 `ex™ ( EXIT_FAILURE ); 1692 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+lbu:r:p:h", 1693 fšd_£rviû_ÝtiÚs , NULL )) != -1) { 1694  Ýt ) { 1696 `hci_þ—r_b™ ( BDADDR_BREDR , & ty³ ); 1697 `hci_£t_b™ ( BDADDR_LE_PUBLIC , & ty³ ); 1698 `hci_£t_b™ ( BDADDR_LE_RANDOM , & ty³ ); 1701 `hci_£t_b™ ( BDADDR_BREDR , & ty³ ); 1702 `hci_þ—r_b™ ( BDADDR_LE_PUBLIC , & ty³ ); 1703 `hci_þ—r_b™ ( BDADDR_LE_RANDOM , & ty³ ); 1706 ià( couÁ =ð MAX_UUIDS ) { 1707 `´štf ("Max %u UUID suµÜ‹d\n", MAX_UUIDS ); 1708 `ex™ ( EXIT_FAILURE ); 1711 ià( `bt_¡ršg2uuid (& uuid , Ýrg ) < 0) { 1712 `´štf ("Inv®id UUID: %s\n", Ýrg ); 1713 `ex™ ( EXIT_FAILURE ); 1715 ý = (*è buf ; 1716 `uuid_to_uuid128 (& uuid128 , & uuid ); 1717 `Áoh128 (( ušt128_t *è uuid128 . v®ue .uuid128. d©a , 1718 & ušt128 ); 1719 `htob128 (& ušt128 , ( ušt128_t *è ý -> uuids [ couÁ ++]); 1722 rssi = `©oi ( Ýrg ); 1725 `fšd_£rviû_u§ge (); 1726 `ex™ ( EXIT_SUCCESS ); 1728 `fšd_£rviû_u§ge (); 1729 `ex™ ( EXIT_FAILURE ); 1733 ¬gc -ð Ýtšd ; 1734 ¬gv +ð Ýtšd ; 1735 Ýtšd = 0; 1737 ià( ¬gc > 0) { 1738 `fšd_£rviû_u§ge (); 1739 `ex™ ( EXIT_FAILURE ); 1742 ý = (*è buf ; 1743 ý -> ty³ =ype; 1744 ý -> rssi =„ssi; 1745 ý -> uuid_couÁ = `ýu_to_Ë16 ( couÁ ); 1747 ià( `mgmt_£nd ( mgmt , MGMT_OP_START_SERVICE_DISCOVERY , šdex , 1748 (* ý è+ couÁ * 16, cp, 1749 fšd_£rviû_r¥ , NULL , NULL) == 0) { 1750 `årštf ( ¡d”r , "Unableo send start_service_discovery cmd\n"); 1751 `ex™ ( EXIT_FAILURE ); 1753 } } 1755  $fšd_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 1756 * u£r_d©a ) 1758 ià( ¡©us != 0) { 1759 `årštf ( ¡d”r , 1761 ¡©us , `mgmt_”r¡r (status)); 1762 `mašloÝ_qu™ (); 1766 `´štf ("Discovery started\n"); 1767 discov”y = Œue ; 1768 } } 1770  $fšd_u§ge () 1772 `´štf ("Usage: btmgmt find [-l|-b]>\n"); 1773 } } 1775  ÝtiÚ gfšd_ÝtiÚs [] = { 1782  $cmd_fšd ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 1784  mgmt_ý_¡¬t_discov”y ý ; 1785 ušt8_t ty³ ; 1786  Ýt ; 1788 ià( šdex =ð MGMT_INDEX_NONE ) 1789 šdex = 0; 1791 ty³ = 0; 1792 `hci_£t_b™ ( BDADDR_BREDR , & ty³ ); 1793 `hci_£t_b™ ( BDADDR_LE_PUBLIC , & ty³ ); 1794 `hci_£t_b™ ( BDADDR_LE_RANDOM , & ty³ ); 1796 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+lbh", fšd_ÝtiÚs , 1797 NULL )) != -1) { 1798  Ýt ) { 1800 `hci_þ—r_b™ ( BDADDR_BREDR , & ty³ ); 1801 `hci_£t_b™ ( BDADDR_LE_PUBLIC , & ty³ ); 1802 `hci_£t_b™ ( BDADDR_LE_RANDOM , & ty³ ); 1805 `hci_£t_b™ ( BDADDR_BREDR , & ty³ ); 1806 `hci_þ—r_b™ ( BDADDR_LE_PUBLIC , & ty³ ); 1807 `hci_þ—r_b™ ( BDADDR_LE_RANDOM , & ty³ ); 1811 `fšd_u§ge (); 1812 `ex™ ( EXIT_SUCCESS ); 1816 ¬gc -ð Ýtšd ; 1817 ¬gv +ð Ýtšd ; 1818 Ýtšd = 0; 1820 `mem£t (& ý , 0, (cp)); 1821 ý . ty³ =ype; 1823 ià( `mgmt_£nd ( mgmt , MGMT_OP_START_DISCOVERY , šdex , ( ý ), &cp, 1824 fšd_r¥ , NULL , NULL) == 0) { 1825 `årštf ( ¡d”r , "Unableo send start_discovery cmd\n"); 1826 `ex™ ( EXIT_FAILURE ); 1828 } } 1830  $Çme_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 1831 * u£r_d©a ) 1833 ià( ¡©us != 0) 1834 `årštf ( ¡d”r , "Unableo set†ocal‚ame " 1836 ¡©us , `mgmt_”r¡r (status)); 1838 `mašloÝ_qu™ (); 1839 } } 1841  $cmd_Çme ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 1843  mgmt_ý_£t_loÿl_Çme ý ; 1845 ià( ¬gc < 2) { 1846 `´štf ("U§ge: btmgmˆ% <Çme> [shÜŠame]\n", ¬gv [0]); 1847 `ex™ ( EXIT_FAILURE ); 1850 ià( šdex =ð MGMT_INDEX_NONE ) 1851 šdex = 0; 1853 `mem£t (& ý , 0, (cp)); 1854 `¡ºýy ((*è ý . Çme , ¬gv [1], HCI_MAX_NAME_LENGTH ); 1855 ià( ¬gc > 2) 1856 `¡ºýy ((*è ý . shÜt_Çme , ¬gv [2], 1857 MGMT_MAX_SHORT_NAME_LENGTH ); 1859 ià( `mgmt_£nd ( mgmt , MGMT_OP_SET_LOCAL_NAME , šdex , ( ý ), &cp, 1860 Çme_r¥ , NULL , NULL) == 0) { 1861 `årštf ( ¡d”r , "Unableo send set_name cmd\n"); 1862 `ex™ ( EXIT_FAILURE ); 1864 } } 1866  $·œ_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 1867 * u£r_d©a ) 1869 cÚ¡  mgmt_½_·œ_deviû * ½ = ·¿m ; 1870  addr [18]; 1872 ià( Ën =ð0 && ¡©us != 0) { 1873 `årštf ( ¡d”r , "Pairing failed with status 0x%02x (%s)\n", 1874 ¡©us , `mgmt_”r¡r (status)); 1875  dÚe ; 1878 ià( Ën !ð(* ½ )) { 1879 `årštf ( ¡d”r , "UÃx³ùed…aœ_r¥†’ %u\n", Ën ); 1880  dÚe ; 1883 `ba2¡r (& ½ -> addr . bdaddr ,‡ddr); 1885 ià( ¡©us != 0) { 1886 `årštf ( ¡d”r , 1888 addr , `ty³¡r ( ½ ->addr. ty³ ), ¡©us , 1889 `mgmt_”r¡r ( ¡©us )); 1890  dÚe ; 1893 `´štf ("Paœed w™h % (%s)\n", addr , `ty³¡r ( ½ ->addr. ty³ )); 1895 dÚe : 1896 `mašloÝ_qu™ (); 1897 } } 1899  $·œ_u§ge () 1901 `´štf ("Usage: btmgmt…air [-c cap] [-type] \n"); 1902 } } 1904  ÝtiÚ g·œ_ÝtiÚs [] = { 1911  $cmd_·œ ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 1913  mgmt_ý_·œ_deviû ý ; 1914 ušt8_t ÿp = 0x01; 1915 ušt8_t ty³ = BDADDR_BREDR ; 1916  addr [18]; 1917  Ýt ; 1919 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+c:t:h", ·œ_ÝtiÚs , 1920 NULL )) != -1) { 1921  Ýt ) { 1923 ÿp = `¡¹Þ ( Ýrg , NULL , 0); 1926 ty³ = `¡¹Þ ( Ýrg , NULL , 0); 1930 `·œ_u§ge (); 1931 `ex™ ( EXIT_SUCCESS ); 1935 ¬gc -ð Ýtšd ; 1936 ¬gv +ð Ýtšd ; 1937 Ýtšd = 0; 1939 ià( ¬gc < 1) { 1940 `·œ_u§ge (); 1941 `ex™ ( EXIT_FAILURE ); 1944 ià( šdex =ð MGMT_INDEX_NONE ) 1945 šdex = 0; 1947 `mem£t (& ý , 0, (cp)); 1948 `¡r2ba ( ¬gv [0], & ý . addr . bdaddr ); 1949 ý . addr . ty³ =ype; 1950 ý . io_ÿp = ÿp ; 1952 `ba2¡r (& ý . addr . bdaddr ,‡ddr); 1953 `´štf ("Paœšg w™h % (%s)\n", addr , `ty³¡r ( ý .addr. ty³ )); 1955 ià( `mgmt_£nd ( mgmt , MGMT_OP_PAIR_DEVICE , šdex , ( ý ), &cp, 1956 ·œ_r¥ , NULL , NULL) == 0) { 1957 `årštf ( ¡d”r , "Unableo send…air_device cmd\n"); 1958 `ex™ ( EXIT_FAILURE ); 1960 } } 1962  $ÿnûl_·œ_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 1963 * u£r_d©a ) 1965 cÚ¡  mgmt_addr_šfo * ½ = ·¿m ; 1966  addr [18]; 1968 ià( Ën =ð0 && ¡©us != 0) { 1969 `årštf ( ¡d”r , "Cancel Pairing failed with 0x%02x (%s)\n", 1970 ¡©us , `mgmt_”r¡r (status)); 1971  dÚe ; 1974 ià( Ën !ð(* ½ )) { 1975 `årštf ( ¡d”r , "UÃx³ùed cªûl_·œ_r¥†’ %u\n", Ën ); 1976  dÚe ; 1979 `ba2¡r (& ½ -> bdaddr , addr ); 1981 ià( ¡©us != 0) { 1982 `årštf ( ¡d”r , 1984 addr , `ty³¡r ( ½ -> ty³ ), ¡©us , 1985 `mgmt_”r¡r ( ¡©us )); 1986  dÚe ; 1989 `´štf ("Paœšg CªûÎed w™h %s\n", addr ); 1991 dÚe : 1992 `mašloÝ_qu™ (); 1993 } } 1995  $ÿnûl_·œ_u§ge () 1997 `´štf ("Usage: btmgmt cancelpair [-type] \n"); 1998 } } 2000  ÝtiÚ gÿnûl_·œ_ÝtiÚs [] = { 2006  $cmd_ÿnûl_·œ ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 2007 ** ¬gv ) 2009  mgmt_addr_šfo ý ; 2010 ušt8_t ty³ = BDADDR_BREDR ; 2011  Ýt ; 2013 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+t:h", ÿnûl_·œ_ÝtiÚs , 2014 NULL )) != -1) { 2015  Ýt ) { 2017 ty³ = `¡¹Þ ( Ýrg , NULL , 0); 2021 `ÿnûl_·œ_u§ge (); 2022 `ex™ ( EXIT_SUCCESS ); 2026 ¬gc -ð Ýtšd ; 2027 ¬gv +ð Ýtšd ; 2028 Ýtšd = 0; 2030 ià( ¬gc < 1) { 2031 `ÿnûl_·œ_u§ge (); 2032 `ex™ ( EXIT_FAILURE ); 2035 ià( šdex =ð MGMT_INDEX_NONE ) 2036 šdex = 0; 2038 `mem£t (& ý , 0, (cp)); 2039 `¡r2ba ( ¬gv [0], & ý . bdaddr ); 2040 ý . ty³ =ype; 2042 ià( `mgmt_£nd ( mgmt , MGMT_OP_CANCEL_PAIR_DEVICE , šdex , ( ý ), &cp, 2043 ÿnûl_·œ_r¥ , NULL , NULL) == 0) { 2044 `årštf ( ¡d”r , "Unableo send cancel_pair_device cmd\n"); 2045 `ex™ ( EXIT_FAILURE ); 2047 } } 2049  $uÅaœ_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 2050 * u£r_d©a ) 2052 cÚ¡  mgmt_½_uÅaœ_deviû * ½ = ·¿m ; 2053  addr [18]; 2055 ià( Ën =ð0 && ¡©us != 0) { 2056 `årštf ( ¡d”r , "Unpair device failed. status 0x%02x (%s)\n", 2057 ¡©us , `mgmt_”r¡r (status)); 2058  dÚe ; 2061 ià( Ën !ð(* ½ )) { 2062 `årštf ( ¡d”r , "UÃx³ùed uÅaœ_deviû_r¥†’ %u\n", Ën ); 2063  dÚe ; 2066 `ba2¡r (& ½ -> addr . bdaddr ,‡ddr); 2068 ià( ¡©us != 0) { 2069 `årštf ( ¡d”r , 2071 addr , ¡©us , `mgmt_”r¡r (status)); 2072  dÚe ; 2075 `´štf ("% uÅaœed\n", addr ); 2077 dÚe : 2078 `mašloÝ_qu™ (); 2079 } } 2081  $uÅaœ_u§ge () 2083 `´štf ("Usage: btmgmt unpair [-type] \n"); 2084 } } 2086  ÝtiÚ guÅaœ_ÝtiÚs [] = { 2092  $cmd_uÅaœ ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 2093 ** ¬gv ) 2095  mgmt_ý_uÅaœ_deviû ý ; 2096 ušt8_t ty³ = BDADDR_BREDR ; 2097  Ýt ; 2099 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+t:h", uÅaœ_ÝtiÚs , 2100 NULL )) != -1) { 2101  Ýt ) { 2103 ty³ = `¡¹Þ ( Ýrg , NULL , 0); 2107 `uÅaœ_u§ge (); 2108 `ex™ ( EXIT_SUCCESS ); 2112 ¬gc -ð Ýtšd ; 2113 ¬gv +ð Ýtšd ; 2114 Ýtšd = 0; 2116 ià( ¬gc < 1) { 2117 `uÅaœ_u§ge (); 2118 `ex™ ( EXIT_FAILURE ); 2121 ià( šdex =ð MGMT_INDEX_NONE ) 2122 šdex = 0; 2124 `mem£t (& ý , 0, (cp)); 2125 `¡r2ba ( ¬gv [0], & ý . addr . bdaddr ); 2126 ý . addr . ty³ =ype; 2127 ý . discÚÃù = 1; 2129 ià( `mgmt_£nd ( mgmt , MGMT_OP_UNPAIR_DEVICE , šdex , ( ý ), &cp, 2130 uÅaœ_r¥ , NULL , NULL) == 0) { 2131 `årštf ( ¡d”r , "Unableo send unpair_device cmd\n"); 2132 `ex™ ( EXIT_FAILURE ); 2134 } } 2136  $keys_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 2137 * u£r_d©a ) 2139 ià( ¡©us != 0) 2140 `årštf ( ¡d”r , "Load keys failed with status 0x%02x (%s)\n", 2141 ¡©us , `mgmt_”r¡r (status)); 2143 `´štf ("Keys successfully†oaded\n"); 2145 `mašloÝ_qu™ (); 2146 } } 2148  $cmd_keys ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 2150  mgmt_ý_lßd_lšk_keys ý ; 2152 ià( šdex =ð MGMT_INDEX_NONE ) 2153 šdex = 0; 2155 `mem£t (& ý , 0, (cp)); 2157 ià( `mgmt_£nd ( mgmt , MGMT_OP_LOAD_LINK_KEYS , šdex , ( ý ), &cp, 2158 keys_r¥ , NULL , NULL) == 0) { 2159 `årštf ( ¡d”r , "Unableo send†oad_keys cmd\n"); 2160 `ex™ ( EXIT_FAILURE ); 2162 } } 2164  $Éks_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 2165 * u£r_d©a ) 2167 ià( ¡©us != 0) 2168 `årštf ( ¡d”r , "Load keys failed with status 0x%02x (%s)\n", 2169 ¡©us , `mgmt_”r¡r (status)); 2171 `´štf ("Longerm keys successfully†oaded\n"); 2173 `mašloÝ_qu™ (); 2174 } } 2176  $cmd_Éks ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 2178  mgmt_ý_lßd_lÚg_‹rm_keys ý ; 2180 ià( šdex =ð MGMT_INDEX_NONE ) 2181 šdex = 0; 2183 `mem£t (& ý , 0, (cp)); 2185 ià( `mgmt_£nd ( mgmt , MGMT_OP_LOAD_LONG_TERM_KEYS , šdex , ( ý ), &cp, 2186 Éks_r¥ , NULL , NULL) == 0) { 2187 `årštf ( ¡d”r , "Unableo send†oad_ltks cmd\n"); 2188 `ex™ ( EXIT_FAILURE ); 2190 } } 2192  $œks_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 2193 * u£r_d©a ) 2195 ià( ¡©us != 0) 2196 `årštf ( ¡d”r , "Load IRKs failed with status 0x%02x (%s)\n", 2197 ¡©us , `mgmt_”r¡r (status)); 2199 `´štf ("Identity Resolving Keys successfully†oaded\n"); 2201 `mašloÝ_qu™ (); 2202 } } 2204  $œks_u§ge () 2206 `´štf ("Usage: btmgmt irks [--local]\n"); 2207 } } 2209  ÝtiÚ gœks_ÝtiÚs [] = { 2215  #MAX_IRKS 4 ) 2217  $cmd_œks ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 2219  mgmt_ý_lßd_œks * ý ; 2220 ušt8_t buf [(* ý è+ 23 * MAX_IRKS ]; 2221 ušt16_t couÁ , loÿl_šdex ; 2222  Ýt ; 2224 ià( šdex =ð MGMT_INDEX_NONE ) 2225 šdex = 0; 2227 ý = (*è buf ; 2228 couÁ = 0; 2230 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+l:h", 2231 œks_ÝtiÚs , NULL )) != -1) { 2232  Ýt ) { 2234 ià( couÁ >ð MAX_IRKS ) { 2235 `årštf ( ¡d”r , "Number of IRKsƒxceeded\n"); 2236 `ex™ ( EXIT_FAILURE ); 2238 ià( `¡¾’ ( Ýrg ) > 3 && 2239 `¡ºÿ£cmp ( Ýrg , "hci", 3) == 0) 2240 loÿl_šdex = `©oi ( Ýrg + 3); 2242 loÿl_šdex = `©oi ( Ýrg ); 2243 ià(! `lßd_id’t™y ( loÿl_šdex , & ý -> œks [ couÁ ])) { 2244 `årštf ( ¡d”r , "Unableo†oad identity\n"); 2245 `ex™ ( EXIT_FAILURE ); 2247 couÁ ++; 2250 `œks_u§ge (); 2251 `ex™ ( EXIT_SUCCESS ); 2253 `œks_u§ge (); 2254 `ex™ ( EXIT_FAILURE ); 2258 ¬gc -ð Ýtšd ; 2259 ¬gv +ð Ýtšd ; 2260 Ýtšd = 0; 2262 ià( ¬gc > 0) { 2263 `œks_u§ge (); 2264 `ex™ ( EXIT_FAILURE ); 2267 ý -> œk_couÁ = `ýu_to_Ë16 ( couÁ ); 2269 ià( `mgmt_£nd ( mgmt , MGMT_OP_LOAD_IRKS , šdex , 2270 (* ý è+ couÁ * 23, cp, 2271 œks_r¥ , NULL , NULL) == 0) { 2272 `årštf ( ¡d”r , "Unableo send†oad_irks cmd\n"); 2273 `ex™ ( EXIT_FAILURE ); 2275 } } 2277  $block_r¥ ( ušt16_t Ý , ušt16_ˆ id , ušt8_t ¡©us , ušt16_ˆ Ën , 2278 cÚ¡ * ·¿m ) 2280 cÚ¡  mgmt_addr_šfo * ½ = ·¿m ; 2281  addr [18]; 2283 ià( Ën =ð0 && ¡©us != 0) { 2284 `årštf ( ¡d”r , "%s failed, status 0x%02x (%s)\n", 2285 `mgmt_Ý¡r ( Ý ), ¡©us , `mgmt_”r¡r (status)); 2286  dÚe ; 2289 ià( Ën !ð(* ½ )) { 2290 `årštf ( ¡d”r , "UÃx³ùed % ËÀ%u\n", `mgmt_Ý¡r ( Ý ), Ën ); 2291  dÚe ; 2294 `ba2¡r (& ½ -> bdaddr , addr ); 2296 ià( ¡©us != 0) { 2297 `årštf ( ¡d”r , "%s %s (%s) failed. status 0x%02x (%s)\n", 2298 `mgmt_Ý¡r ( Ý ), addr , `ty³¡r ( ½ -> ty³ ), 2299 ¡©us , `mgmt_”r¡r (status)); 2300  dÚe ; 2303 `´štf ("% % sucûeded\n", `mgmt_Ý¡r ( Ý ), addr ); 2305 dÚe : 2306 `mašloÝ_qu™ (); 2307 } } 2309  $block_u§ge () 2311 `´štf ("Usage: btmgmt block [-type] \n"); 2312 } } 2314  ÝtiÚ gblock_ÝtiÚs [] = { 2320  $cmd_block ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 2322  mgmt_ý_block_deviû ý ; 2323 ušt8_t ty³ = BDADDR_BREDR ; 2324  Ýt ; 2326 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+t:h", block_ÝtiÚs , 2327 NULL )) != -1) { 2328  Ýt ) { 2330 ty³ = `¡¹Þ ( Ýrg , NULL , 0); 2334 `block_u§ge (); 2335 `ex™ ( EXIT_SUCCESS ); 2339 ¬gc -ð Ýtšd ; 2340 ¬gv +ð Ýtšd ; 2341 Ýtšd = 0; 2343 ià( ¬gc < 1) { 2344 `block_u§ge (); 2345 `ex™ ( EXIT_FAILURE ); 2348 ià( šdex =ð MGMT_INDEX_NONE ) 2349 šdex = 0; 2351 `mem£t (& ý , 0, (cp)); 2352 `¡r2ba ( ¬gv [0], & ý . addr . bdaddr ); 2353 ý . addr . ty³ =ype; 2355 ià( `£nd_cmd ( mgmt , MGMT_OP_BLOCK_DEVICE , šdex , ( ý ), &cp, 2356 block_r¥ ) == 0) { 2357 `årštf ( ¡d”r , "Unableo send block_device cmd\n"); 2358 `ex™ ( EXIT_FAILURE ); 2360 } } 2362  $unblock_u§ge () 2364 `´štf ("Usage: btmgmt unblock [-type] \n"); 2365 } } 2367  $cmd_unblock ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 2368 ** ¬gv ) 2370  mgmt_ý_unblock_deviû ý ; 2371 ušt8_t ty³ = BDADDR_BREDR ; 2372  Ýt ; 2374 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+t:h", block_ÝtiÚs , 2375 NULL )) != -1) { 2376  Ýt ) { 2378 ty³ = `¡¹Þ ( Ýrg , NULL , 0); 2382 `unblock_u§ge (); 2383 `ex™ ( EXIT_SUCCESS ); 2387 ¬gc -ð Ýtšd ; 2388 ¬gv +ð Ýtšd ; 2389 Ýtšd = 0; 2391 ià( ¬gc < 1) { 2392 `unblock_u§ge (); 2393 `ex™ ( EXIT_FAILURE ); 2396 ià( šdex =ð MGMT_INDEX_NONE ) 2397 šdex = 0; 2399 `mem£t (& ý , 0, (cp)); 2400 `¡r2ba ( ¬gv [0], & ý . addr . bdaddr ); 2401 ý . addr . ty³ =ype; 2403 ià( `£nd_cmd ( mgmt , MGMT_OP_UNBLOCK_DEVICE , šdex , ( ý ), &cp, 2404 block_r¥ ) == 0) { 2405 `årštf ( ¡d”r , "Unableo send unblock_device cmd\n"); 2406 `ex™ ( EXIT_FAILURE ); 2408 } } 2410  $cmd_add_uuid ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 2411 ** ¬gv ) 2413  mgmt_ý_add_uuid ý ; 2414 ušt128_t ušt128 ; 2415 uuid_t uuid , uuid128 ; 2417 ià( ¬gc < 3) { 2418 `´štf ("UUID‡nd service hint‚eeded\n"); 2419 `ex™ ( EXIT_FAILURE ); 2422 ià( šdex =ð MGMT_INDEX_NONE ) 2423 šdex = 0; 2425 ià( `bt_¡ršg2uuid (& uuid , ¬gv [1]) < 0) { 2426 `´štf ("Inv®id UUID: %s\n", ¬gv [1]); 2427 `ex™ ( EXIT_FAILURE ); 2430 `mem£t (& ý , 0, (cp)); 2432 `uuid_to_uuid128 (& uuid128 , & uuid ); 2433 `Áoh128 (( ušt128_t *è uuid128 . v®ue .uuid128. d©a , & ušt128 ); 2434 `htob128 (& ušt128 , ( ušt128_t *è ý . uuid ); 2436 ý . svc_hšt = `©oi ( ¬gv [2]); 2438 ià( `£nd_cmd ( mgmt , MGMT_OP_ADD_UUID , šdex , ( ý ), &cp, 2439 þass_r¥ ) == 0) { 2440 `årštf ( ¡d”r , "Unableo send‡dd_uuid cmd\n"); 2441 `ex™ ( EXIT_FAILURE ); 2443 } } 2445  $cmd_»move_uuid ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 2446 ** ¬gv ) 2448  mgmt_ý_»move_uuid ý ; 2449 ušt128_t ušt128 ; 2450 uuid_t uuid , uuid128 ; 2452 ià( ¬gc < 2) { 2453 `´štf ("UUID‚eeded\n"); 2454 `ex™ ( EXIT_FAILURE ); 2457 ià( šdex =ð MGMT_INDEX_NONE ) 2458 šdex = 0; 2460 ià( `bt_¡ršg2uuid (& uuid , ¬gv [1]) < 0) { 2461 `´štf ("Inv®id UUID: %s\n", ¬gv [1]); 2462 `ex™ ( EXIT_FAILURE ); 2465 `mem£t (& ý , 0, (cp)); 2467 `uuid_to_uuid128 (& uuid128 , & uuid ); 2468 `Áoh128 (( ušt128_t *è uuid128 . v®ue .uuid128. d©a , & ušt128 ); 2469 `htob128 (& ušt128 , ( ušt128_t *è ý . uuid ); 2471 ià( `£nd_cmd ( mgmt , MGMT_OP_REMOVE_UUID , šdex , ( ý ), &cp, 2472 þass_r¥ ) == 0) { 2473 `årštf ( ¡d”r , "Unableo send„emove_uuid cmd\n"); 2474 `ex™ ( EXIT_FAILURE ); 2476 } } 2478  $cmd_þr_uuids ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , 2479 ** ¬gv ) 2481 * uuid_ªy = "00000000-0000-0000-0000-000000000000"; 2482 * rm_¬gv [] = { "rm-uuid", uuid_ªy , NULL }; 2484 `cmd_»move_uuid ( mgmt , šdex , 2, rm_¬gv ); 2485 } } 2487  $loÿl_oob_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 2488 * u£r_d©a ) 2490 cÚ¡  mgmt_½_»ad_loÿl_oob_d©a * ½ = ·¿m ; 2491 cÚ¡  mgmt_½_»ad_loÿl_oob_ext_d©a * ½_ext = ·¿m ; 2492  i ; 2494 ià( ¡©us != 0) { 2495 `årštf ( ¡d”r , "Read Local OOB Data failed " 2497 ¡©us , `mgmt_”r¡r (status)); 2498  dÚe ; 2501 ià( Ën < (* ½ )) { 2502 `årštf ( ¡d”r , "Too small (%u bytes)„ead_local_oob„sp\n", 2503 Ën ); 2504  dÚe ; 2507 `´štf ("Hash C from P-192: "); 2508  i = 0; i < 16; i++) 2509 `´štf ("%02x", ½ -> hash [ i ]); 2510 `´štf ("\n"); 2512 `´štf ("Randomizer R with P-192: "); 2513  i = 0; i < 16; i++) 2514 `´štf ("%02x", ½ -> ¿ndomiz” [ i ]); 2515 `´štf ("\n"); 2517 ià( Ën < (* ½_ext )) 2518  dÚe ; 2520 `´štf ("Hash C from P-256: "); 2521  i = 0; i < 16; i++) 2522 `´štf ("%02x", ½_ext -> hash256 [ i ]); 2523 `´štf ("\n"); 2525 `´štf ("Randomizer R with P-256: "); 2526  i = 0; i < 16; i++) 2527 `´štf ("%02x", ½_ext -> ¿ndomiz”256 [ i ]); 2528 `´štf ("\n"); 2530 dÚe : 2531 `mašloÝ_qu™ (); 2532 } } 2534  $cmd_loÿl_oob ( mgmt *mgmt, ušt16_t šdex , 2535  ¬gc , ** ¬gv ) 2537 ià( šdex =ð MGMT_INDEX_NONE ) 2538 šdex = 0; 2540 ià( `mgmt_£nd ( mgmt , MGMT_OP_READ_LOCAL_OOB_DATA , šdex , 0, NULL , 2541 loÿl_oob_r¥ , NULL , NULL) == 0) { 2542 `årštf ( ¡d”r , "Unableo send„ead_local_oob cmd\n"); 2543 `ex™ ( EXIT_FAILURE ); 2545 } } 2547  $»mÙe_oob_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 2548 * u£r_d©a ) 2550 cÚ¡  mgmt_addr_šfo * ½ = ·¿m ; 2551  addr [18]; 2553 ià( ¡©us != 0) { 2554 `årštf ( ¡d”r , "Add Remote OOB Data failed: 0x%02x (%s)\n", 2555 ¡©us , `mgmt_”r¡r (status)); 2559 ià( Ën < (* ½ )) { 2560 `årštf ( ¡d”r , "Too small (%u bytes)‡dd_remote_oob„sp\n", 2561 Ën ); 2565 `ba2¡r (& ½ -> bdaddr , addr ); 2566 `´štf ("RemÙOOB d©¨added fÜ % (%u)\n", addr , ½ -> ty³ ); 2567 } } 2569  $»mÙe_oob_u§ge () 2571 `´štf ("Usage: btmgmt„emote-oob [-t ] " 2574 } } 2576  ÝtiÚ g»mÙe_oob_Ýt [] = { 2582  $cmd_»mÙe_oob ( mgmt *mgmt, ušt16_t šdex , 2583  ¬gc , ** ¬gv ) 2585  mgmt_ý_add_»mÙe_oob_d©a ý ; 2586  Ýt ; 2588 `mem£t (& ý , 0, (cp)); 2589 ý . addr . ty³ = BDADDR_BREDR ; 2591 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+t:r:R:h:H:", 2592 »mÙe_oob_Ýt , NULL )) != -1) { 2593  Ýt ) { 2595 ý . addr . ty³ = `¡¹Þ ( Ýrg , NULL , 0); 2598 `cÚv”t_hex¡r ( Ýrg , ý . ¿nd192 , 16); 2601 `cÚv”t_hex¡r ( Ýrg , ý . hash192 , 16); 2604 `cÚv”t_hex¡r ( Ýrg , ý . ¿nd256 , 16); 2607 `cÚv”t_hex¡r ( Ýrg , ý . hash256 , 16); 2610 `»mÙe_oob_u§ge (); 2611 `ex™ ( EXIT_SUCCESS ); 2615 ¬gc -ð Ýtšd ; 2616 ¬gv +ð Ýtšd ; 2617 Ýtšd = 0; 2619 ià( ¬gc < 1) { 2620 `»mÙe_oob_u§ge (); 2621 `ex™ ( EXIT_FAILURE ); 2624 ià( šdex =ð MGMT_INDEX_NONE ) 2625 šdex = 0; 2627 `¡r2ba ( ¬gv [0], & ý . addr . bdaddr ); 2629 `´štf ("Addšg OOB d©¨fÜ % (%s)\n", ¬gv [0], `ty³¡r ( ý . addr . ty³ )); 2631 ià( `mgmt_£nd ( mgmt , MGMT_OP_ADD_REMOTE_OOB_DATA , šdex , 2632 ( ý ), &ý, »mÙe_oob_r¥ , 2633 NULL , NULL) == 0) { 2634 `årštf ( ¡d”r , "Unableo send‡dd_remote_oob cmd\n"); 2635 `ex™ ( EXIT_FAILURE ); 2637 } } 2639  $did_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 2640 * u£r_d©a ) 2642 ià( ¡©us != 0) 2643 `årštf ( ¡d”r , "Set Device ID failed " 2645 ¡©us , `mgmt_”r¡r (status)); 2647 `´štf ("Device ID successfully set\n"); 2649 `mašloÝ_qu™ (); 2650 } } 2652  $did_u§ge () 2654 `´štf ("Usage: btmgmt did :::\n"); 2655 `´štf ("…ossible source values: bluetooth, usb\n"); 2656 } } 2658  $cmd_did ( mgmt *mgmt, ušt16_t šdex ,  ¬gc , ** ¬gv ) 2660  mgmt_ý_£t_deviû_id ý ; 2661 ušt16_t v’dÜ , ´oduù , v”siÚ , sourû ; 2662  »suÉ ; 2664 ià( ¬gc < 2) { 2665 `did_u§ge (); 2666 `ex™ ( EXIT_FAILURE ); 2669 »suÉ = `ssÿnf ( ¬gv [1], "blu‘oÙh:%4hx:%4hx:%4hx", & v’dÜ , & ´oduù , 2670 & v”siÚ ); 2671 ià( »suÉ == 3) { 2672 sourû = 0x0001; 2673  dÚe ; 2676 »suÉ = `ssÿnf ( ¬gv [1], "usb:%4hx:%4hx:%4hx", & v’dÜ , & ´oduù , 2677 & v”siÚ ); 2678 ià( »suÉ == 3) { 2679 sourû = 0x0002; 2680  dÚe ; 2683 `did_u§ge (); 2684 `ex™ ( EXIT_FAILURE ); 2686 dÚe : 2687 ià( šdex =ð MGMT_INDEX_NONE ) 2688 šdex = 0; 2690 ý . sourû = `htobs (source); 2691 ý . v’dÜ = `htobs (vendor); 2692 ý . ´oduù = `htobs (product); 2693 ý . v”siÚ = `htobs (version); 2695 ià( `mgmt_£nd ( mgmt , MGMT_OP_SET_DEVICE_ID , šdex , ( ý ), &cp, 2696 did_r¥ , NULL , NULL) == 0) { 2697 `årštf ( ¡d”r , "Unableo send set_device_id cmd\n"); 2698 `ex™ ( EXIT_FAILURE ); 2700 } } 2702  $¡©ic_addr_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 2703 * u£r_d©a ) 2705 ià( ¡©us != 0) 2706 `årštf ( ¡d”r , "Set static‡ddress failed " 2708 ¡©us , `mgmt_”r¡r (status)); 2710 `´štf ("Static‡ddress successfully set\n"); 2712 `mašloÝ_qu™ (); 2713 } } 2715  $¡©ic_addr_u§ge () 2717 `´štf ("Usage: btmgmt static-addr
\n"); 2718 } } 2720  $cmd_¡©ic_addr ( mgmt *mgmt, ušt16_t šdex , 2721  ¬gc , ** ¬gv ) 2723  mgmt_ý_£t_¡©ic_add»ss ý ; 2725 ià( ¬gc < 2) { 2726 `¡©ic_addr_u§ge (); 2727 `ex™ ( EXIT_FAILURE ); 2730 ià( šdex =ð MGMT_INDEX_NONE ) 2731 šdex = 0; 2733 `¡r2ba ( ¬gv [1], & ý . bdaddr ); 2735 ià( `mgmt_£nd ( mgmt , MGMT_OP_SET_STATIC_ADDRESS , šdex , ( ý ), &cp, 2736 ¡©ic_addr_r¥ , NULL , NULL) == 0) { 2737 `årštf ( ¡d”r , "Unableo send set_static_address cmd\n"); 2738 `ex™ ( EXIT_FAILURE ); 2740 } } 2742  $ÝtiÚs_r¥ ( ušt16_t Ý , ušt16_ˆ id , ušt8_t ¡©us , 2743 ušt16_t Ën , cÚ¡ * ·¿m ) 2745 cÚ¡ ušt32_t * ½ = ·¿m ; 2747 ià( ¡©us != 0) { 2748 `årštf ( ¡d”r , 2750 `mgmt_Ý¡r ( Ý ), id , ¡©us , `mgmt_”r¡r (status)); 2751  dÚe ; 2754 ià( Ën < (* ½ )) { 2755 `årštf ( ¡d”r , "Too small %s„esponse (%u bytes)\n", 2756 `mgmt_Ý¡r ( Ý ), Ën ); 2757  dÚe ; 2760 `´štf ("hci%u % com¶‘e, o±iÚs: ", id , `mgmt_Ý¡r ( Ý )); 2761 `´št_ÝtiÚs ( `g‘_Ë32 ( ½ )); 2762 `´štf ("\n"); 2764 dÚe : 2765 `mašloÝ_qu™ (); 2766 } } 2768  $cmd_public_addr ( mgmt *mgmt, ušt16_t šdex , 2769  ¬gc , ** ¬gv ) 2771  mgmt_ý_£t_public_add»ss ý ; 2773 ià( ¬gc < 2) { 2774 `´štf ("Usage: btmgmt…ublic-addr
\n"); 2775 `ex™ ( EXIT_FAILURE ); 2778 ià( šdex =ð MGMT_INDEX_NONE ) 2779 šdex = 0; 2781 `¡r2ba ( ¬gv [1], & ý . bdaddr ); 2783 ià( `£nd_cmd ( mgmt , MGMT_OP_SET_PUBLIC_ADDRESS , šdex , ( ý ), &cp, 2784 ÝtiÚs_r¥ ) == 0) { 2785 `årštf ( ¡d”r , "Unableo send Set Public Address cmd\n"); 2786 `ex™ ( EXIT_FAILURE ); 2788 } } 2790  $cmd_ext_cÚfig ( mgmt *mgmt, ušt16_t šdex , 2791  ¬gc , ** ¬gv ) 2793  mgmt_ý_£t_ex‹º®_cÚfig ý ; 2795 ià( ¬gc < 2) { 2796 `´štf ("Specify \"on\" or \"off\"\n"); 2797 `ex™ ( EXIT_FAILURE ); 2800 ià( `¡rÿ£cmp ( ¬gv [1], "on") == 0 || strcasecmp(argv[1], "yes") == 0) 2801 ý . cÚfig = 0x01; 2802 ià( `¡rÿ£cmp ( ¬gv [1], "off") == 0) 2803 ý . cÚfig = 0x00; 2805 ý . cÚfig = `©oi ( ¬gv [1]); 2807 ià( šdex =ð MGMT_INDEX_NONE ) 2808 šdex = 0; 2810 ià( `£nd_cmd ( mgmt , MGMT_OP_SET_EXTERNAL_CONFIG , šdex , ( ý ), &cp, 2811 ÝtiÚs_r¥ ) == 0) { 2812 `årštf ( ¡d”r , "Unableo send Set External Config cmd\n"); 2813 `ex™ ( EXIT_FAILURE ); 2815 } } 2817  $cmd_debug_keys ( mgmt *mgmt, ušt16_t šdex , 2818  ¬gc , ** ¬gv ) 2820 `cmd_£‰šg ( mgmt , šdex , MGMT_OP_SET_DEBUG_KEYS , ¬gc , ¬gv ); 2821 } } 2823  $cÚn_šfo_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 2824 * u£r_d©a ) 2826 cÚ¡  mgmt_½_g‘_cÚn_šfo * ½ = ·¿m ;  addr [18]; 2828 ià( Ën =ð0 && ¡©us != 0) { 2829 `årštf ( ¡d”r , "Get Conn Info failed, status 0x%02x (%s)\n", 2830 ¡©us , `mgmt_”r¡r (status)); 2831  dÚe ; 2834 ià( Ën < (* ½ )) { 2835 `årštf ( ¡d”r , "UÃx³ùed G‘ CÚÀInfØËÀ%u\n", Ën ); 2836  dÚe ; 2839 `ba2¡r (& ½ -> addr . bdaddr ,‡ddr); 2841 ià( ¡©us != 0) { 2842 `årštf ( ¡d”r , "Get Conn Info for %s (%s) failed. status 0x%02x (%s)\n", 2843 addr , `ty³¡r ( ½ ->addr. ty³ ), 2844 ¡©us , `mgmt_”r¡r (status)); 2845  dÚe ; 2848 `´štf ("Connection Information for %s (%s)\n", 2849 addr , `ty³¡r ( ½ ->addr. ty³ )); 2850 `´štf ("\tRSSI %d\n\tTX…ower %d\n\tmaximum TX…ower %d\n", 2851 ½ -> rssi ,„p-> tx_pow” ,„p-> max_tx_pow” ); 2853 dÚe : 2854 `mašloÝ_qu™ (); 2855 } } 2857  $cÚn_šfo_u§ge () 2859 `´štf ("Usage: btmgmt conn-info [-type] \n"); 2860 } } 2862  ÝtiÚ gcÚn_šfo_ÝtiÚs [] = { 2868  $cmd_cÚn_šfo ( mgmt *mgmt, ušt16_t šdex , 2869  ¬gc , ** ¬gv ) 2871  mgmt_ý_g‘_cÚn_šfo ý ; 2872 ušt8_t ty³ = BDADDR_BREDR ; 2873  Ýt ; 2875 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+t:h", cÚn_šfo_ÝtiÚs , 2876 NULL )) != -1) { 2877  Ýt ) { 2879 ty³ = `¡¹Þ ( Ýrg , NULL , 0); 2883 `cÚn_šfo_u§ge (); 2884 `ex™ ( EXIT_SUCCESS ); 2888 ¬gc -ð Ýtšd ; 2889 ¬gv +ð Ýtšd ; 2890 Ýtšd = 0; 2892 ià( ¬gc < 1) { 2893 `cÚn_šfo_u§ge (); 2894 `ex™ ( EXIT_FAILURE ); 2897 ià( šdex =ð MGMT_INDEX_NONE ) 2898 šdex = 0; 2900 `mem£t (& ý , 0, (cp)); 2901 `¡r2ba ( ¬gv [0], & ý . addr . bdaddr ); 2902 ý . addr . ty³ =ype; 2904 ià( `mgmt_£nd ( mgmt , MGMT_OP_GET_CONN_INFO , šdex , ( ý ), &cp, 2905 cÚn_šfo_r¥ , NULL , NULL) == 0) { 2906 `årštf ( ¡d”r , "Unableo send get_conn_info cmd\n"); 2907 `ex™ ( EXIT_FAILURE ); 2909 } } 2911  $io_ÿp_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 2912 * u£r_d©a ) 2914 ià( ¡©us != 0) 2915 `årštf ( ¡d”r , "Could‚ot set IO Capability with " 2917 ¡©us , `mgmt_”r¡r (status)); 2919 `´štf ("IO Capabilities successfully set\n"); 2921 `mašloÝ_qu™ (); 2922 } } 2924  $io_ÿp_u§ge () 2926 `´štf ("Usage: btmgmt io-cap \n"); 2927 } } 2929  $cmd_io_ÿp ( mgmt *mgmt, ušt16_t šdex , 2930  ¬gc , ** ¬gv ) 2932  mgmt_ý_£t_io_ÿ·bž™y ý ; 2933 ušt8_t ÿp ; 2935 ià( ¬gc < 2) { 2936 `io_ÿp_u§ge (); 2937 `ex™ ( EXIT_FAILURE ); 2940 ià( šdex =ð MGMT_INDEX_NONE ) 2941 šdex = 0; 2943 ÿp = `¡¹Þ ( ¬gv [1], NULL , 0); 2944 `mem£t (& ý , 0, (cp)); 2945 ý . io_ÿ·bž™y = ÿp ; 2947 ià( `mgmt_£nd ( mgmt , MGMT_OP_SET_IO_CAPABILITY , šdex , ( ý ), &cp, 2948 io_ÿp_r¥ , NULL , NULL) == 0) { 2949 `årštf ( ¡d”r , "Unableo send set-io-cap cmd\n"); 2950 `ex™ ( EXIT_FAILURE ); 2952 } } 2954  $sÿn_·¿ms_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 2955 * u£r_d©a ) 2957 ià( ¡©us != 0) 2958 `årštf ( ¡d”r , "Set scan…arameters failed with status 0x%02x (%s)\n", 2959 ¡©us , `mgmt_”r¡r (status)); 2961 `´štf ("Scan…arameters successfully set\n"); 2963 `mašloÝ_qu™ (); 2964 } } 2966  $sÿn_·¿ms_u§ge () 2968 `´štf ("Usage: btmgmt scan-params \n"); 2969 } } 2971  $cmd_sÿn_·¿ms ( mgmt *mgmt, ušt16_t šdex , 2972  ¬gc , ** ¬gv ) 2974  mgmt_ý_£t_sÿn_·¿ms ý ; 2976 ià( ¬gc < 3) { 2977 `sÿn_·¿ms_u§ge (); 2978 `ex™ ( EXIT_FAILURE ); 2981 ià( šdex =ð MGMT_INDEX_NONE ) 2982 šdex = 0; 2984 ý . š‹rv® = `¡¹Þ ( ¬gv [1], NULL , 0); 2985 ý . wšdow = `¡¹Þ ( ¬gv [2], NULL , 0); 2987 ià( `mgmt_£nd ( mgmt , MGMT_OP_SET_SCAN_PARAMS , šdex , ( ý ), &cp, 2988 sÿn_·¿ms_r¥ , NULL , NULL) == 0) { 2989 `årštf ( ¡d”r , "Unableo send set_scan_params cmd\n"); 2990 `ex™ ( EXIT_FAILURE ); 2992 } } 2994  $þock_šfo_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 2995 * u£r_d©a ) 2997 cÚ¡  mgmt_½_g‘_þock_šfo * ½ = ·¿m ; 2999 ià( Ën < (* ½ )) { 3000 `årštf ( ¡d”r , "UÃx³ùed G‘ Clock InfØËÀ%u\n", Ën ); 3001 `ex™ ( EXIT_FAILURE ); 3004 ià( ¡©us ) { 3005 `årštf ( ¡d”r , "Get Clock Info failed with status 0x%02x (%s)\n", 3006 ¡©us , `mgmt_”r¡r (status)); 3007 `ex™ ( EXIT_FAILURE ); 3010 `´štf ("LoÿÈClock: %u\n", `Ë32_to_ýu ( ½ -> loÿl_þock )); 3011 `´štf ("PicÚ‘ Clock: %u\n", `Ë32_to_ýu ( ½ -> picÚ‘_þock )); 3012 `´štf ("Accu¿ry: %u\n", `Ë16_to_ýu ( ½ -> accu¿cy )); 3014 `mašloÝ_qu™ (); 3015 } } 3017  $cmd_þock_šfo ( mgmt *mgmt, ušt16_t šdex , 3018  ¬gc , ** ¬gv ) 3020  mgmt_ý_g‘_þock_šfo ý ; 3022 ià( šdex =ð MGMT_INDEX_NONE ) 3023 šdex = 0; 3025 `mem£t (& ý , 0, (cp)); 3027 ià( ¬gc > 1) 3028 `¡r2ba ( ¬gv [1], & ý . addr . bdaddr ); 3030 ià( `mgmt_£nd ( mgmt , MGMT_OP_GET_CLOCK_INFO , šdex , ( ý ), &cp, 3031 þock_šfo_r¥ , NULL , NULL) == 0) { 3032 `årštf ( ¡d”r , "Unableo send get_clock_info cmd\n"); 3033 `ex™ ( EXIT_FAILURE ); 3035 } } 3037  $add_deviû_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 3038 * u£r_d©a ) 3040 ià( ¡©us != 0) 3041 `årštf ( ¡d”r , "Add device failed with status 0x%02x (%s)\n", 3042 ¡©us , `mgmt_”r¡r (status)); 3043 `mašloÝ_qu™ (); 3044 } } 3046  $add_deviû_u§ge () 3048 `´štf ("Usage: btmgmt‡dd-device [-a‡ction] [-type]
\n"); 3049 } } 3051  ÝtiÚ gadd_deviû_ÝtiÚs [] = { 3058  $cmd_add_deviû ( mgmt *mgmt, ušt16_t šdex , 3059  ¬gc , ** ¬gv ) 3061  mgmt_ý_add_deviû ý ; 3062 ušt8_t aùiÚ = 0x00; 3063 ušt8_t ty³ = BDADDR_BREDR ; 3064  addr [18]; 3065  Ýt ; 3067 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+a:t:h", add_deviû_ÝtiÚs , 3068 NULL )) != -1) { 3069  Ýt ) { 3071 aùiÚ = `¡¹Þ ( Ýrg , NULL , 0); 3074 ty³ = `¡¹Þ ( Ýrg , NULL , 0); 3078 `add_deviû_u§ge (); 3079 `ex™ ( EXIT_SUCCESS ); 3083 ¬gc -ð Ýtšd ; 3084 ¬gv +ð Ýtšd ; 3085 Ýtšd = 0; 3087 ià( ¬gc < 1) { 3088 `add_deviû_u§ge (); 3089 `ex™ ( EXIT_FAILURE ); 3092 ià( šdex =ð MGMT_INDEX_NONE ) 3093 šdex = 0; 3095 `mem£t (& ý , 0, (cp)); 3096 `¡r2ba ( ¬gv [0], & ý . addr . bdaddr ); 3097 ý . addr . ty³ =ype; 3098 ý . aùiÚ =‡ction; 3100 `ba2¡r (& ý . addr . bdaddr ,‡ddr); 3101 `´štf ("Addšg deviû w™h % (%s)\n", addr , `ty³¡r ( ý .addr. ty³ )); 3103 ià( `mgmt_£nd ( mgmt , MGMT_OP_ADD_DEVICE , šdex , ( ý ), &cp, 3104 add_deviû_r¥ , NULL , NULL) == 0) { 3105 `årštf ( ¡d”r , "Unableo send‡dd device command\n"); 3106 `ex™ ( EXIT_FAILURE ); 3108 } } 3110  $»move_deviû_r¥ ( ušt8_t ¡©us , ušt16_t Ën , cÚ¡ * ·¿m , 3111 * u£r_d©a ) 3113 ià( ¡©us != 0) 3114 `årštf ( ¡d”r , "Remove device failed with status 0x%02x (%s)\n", 3115 ¡©us , `mgmt_”r¡r (status)); 3116 `mašloÝ_qu™ (); 3117 } } 3119  $d–_deviû_u§ge () 3121 `´štf ("Usage: btmgmt del-device [-type]
\n"); 3122 } } 3124  ÝtiÚ gd–_deviû_ÝtiÚs [] = { 3130  $cmd_d–_deviû ( mgmt *mgmt, ušt16_t šdex , 3131  ¬gc , ** ¬gv ) 3133  mgmt_ý_»move_deviû ý ; 3134 ušt8_t ty³ = BDADDR_BREDR ; 3135  addr [18]; 3136  Ýt ; 3138 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+t:h", d–_deviû_ÝtiÚs , 3139 NULL )) != -1) { 3140  Ýt ) { 3142 ty³ = `¡¹Þ ( Ýrg , NULL , 0); 3146 `d–_deviû_u§ge (); 3147 `ex™ ( EXIT_SUCCESS ); 3151 ¬gc -ð Ýtšd ; 3152 ¬gv +ð Ýtšd ; 3153 Ýtšd = 0; 3155 ià( ¬gc < 1) { 3156 `d–_deviû_u§ge (); 3157 `ex™ ( EXIT_FAILURE ); 3160 ià( šdex =ð MGMT_INDEX_NONE ) 3161 šdex = 0; 3163 `mem£t (& ý , 0, (cp)); 3164 `¡r2ba ( ¬gv [0], & ý . addr . bdaddr ); 3165 ý . addr . ty³ =ype; 3167 `ba2¡r (& ý . addr . bdaddr ,‡ddr); 3168 `´štf ("Removšg deviû w™h % (%s)\n", addr , `ty³¡r ( ý .addr. ty³ )); 3170 ià( `mgmt_£nd ( mgmt , MGMT_OP_REMOVE_DEVICE , šdex , ( ý ), &cp, 3171 »move_deviû_r¥ , NULL , NULL) == 0) { 3172 `årštf ( ¡d”r , "Unableo send„emove device command\n"); 3173 `ex™ ( EXIT_FAILURE ); 3175 } } 3177  $cmd_þr_deviûs ( mgmt *mgmt, ušt16_t šdex , 3178  ¬gc , ** ¬gv ) 3180 * bdaddr_ªy = "00:00:00:00:00:00"; 3181 * rm_¬gv [] = { "d–-deviû", bdaddr_ªy , NULL }; 3183 `cmd_d–_deviû ( mgmt , šdex , 2, rm_¬gv ); 3184 } } 3187 * mcmd ; 3188 (* mfunc )( mgmt * mmgmt , ušt16_t mšdex ,  m¬gc , ** m¬gv ); 3189 * mdoc ; 3190 } gcommªd [] = { 3191 { "mÚ™Ü", cmd_mÚ™Ü , "Monitorƒvents" }, 3192 { "v”siÚ", cmd_v”siÚ , "Gethe MGMT Version" }, 3193 { "commªds", cmd_commªds , "List supported commands" }, 3194 { "cÚfig", cmd_cÚfig , "Show configuration info" }, 3195 { "šfo", cmd_šfo , "Show controller info" }, 3196 { "pow”", cmd_pow” , "Toggle…owered state" }, 3197 { "discov", cmd_discov , "Toggle discoverable state" }, 3198 { "cÚÃùabË", cmd_cÚÃùabË ,"Toggle connectable state" }, 3199 { "ç¡-cÚn", cmd_ç¡_cÚn , "Toggle fast connectable state" }, 3200 { "bÚdabË", cmd_bÚdabË , "Toggle bondable state" }, 3201 { "·œabË", cmd_bÚdabË , "Toggle bondable state" }, 3202 { "lšk£c", cmd_lšk£c , "Toggle†ink†evel security" }, 3203 { "s¥", cmd_s¥ , "Toggle SSP mode" }, 3204 { "sc", cmd_sc , "Toogle SC support" }, 3205 { "hs", cmd_hs , "Toggle HS support" }, 3206 { "Ë", cmd_Ë , "Toggle LE support" }, 3207 { "adv”tisšg", cmd_adv”tisšg ,"Toggle LE‡dvertising", }, 3208 { "b»dr", cmd_b»dr , "Toggle BR/EDR support", }, 3209 { "´ivacy", cmd_´ivacy , "Toggle…rivacy support" }, 3210 { "þass", cmd_þass , "Set device major/minor class" }, 3211 { "discÚÃù", cmd_discÚÃù , "Disconnect device" }, 3212 { "cÚ", cmd_cÚ , "List connections" }, 3213 { "fšd", cmd_fšd , "Discover‚earby devices" }, 3214 { "fšd-£rviû", cmd_fšd_£rviû , "Discover‚earby service" }, 3215 { "Çme", cmd_Çme , "Set†ocal‚ame" }, 3216 { "·œ", cmd_·œ , "Pair with‡„emote device" }, 3217 { "ÿnûÍaœ", cmd_ÿnûl_·œ ,"Cancel…airing" }, 3218 { "uÅaœ", cmd_uÅaœ , "Unpair device" }, 3219 { "keys", cmd_keys , "Load Link Keys" }, 3220 { "Éks", cmd_Éks , "Load Long Term Keys" }, 3221 { "œks", cmd_œks , "Load Identity Resolving Keys" }, 3222 { "block", cmd_block , "Block Device" }, 3223 { "unblock", cmd_unblock , "Unblock Device" }, 3224 { "add-uuid", cmd_add_uuid , "Add UUID" }, 3225 { "rm-uuid", cmd_»move_uuid ,"Remove UUID" }, 3226 { "þr-uuids", cmd_þr_uuids , "Clear UUIDs" }, 3227 { "loÿl-oob", cmd_loÿl_oob , "Local OOB data" }, 3228 { "»mÙe-oob", cmd_»mÙe_oob , "Remote OOB data" }, 3229 { "did", cmd_did , "Set Device ID" }, 3230 { "¡©ic-addr", cmd_¡©ic_addr ,"Set static‡ddress" }, 3231 { "public-addr", cmd_public_addr ,"Set…ublic‡ddress" }, 3232 { "ext-cÚfig", cmd_ext_cÚfig , "External configuration" }, 3233 { "debug-keys", cmd_debug_keys , "Toogle debug keys" }, 3234 { "cÚn-šfo", cmd_cÚn_šfo , "Get connection information" }, 3235 { "io-ÿp", cmd_io_ÿp , "Set IO Capability" }, 3236 { "sÿn-·¿ms", cmd_sÿn_·¿ms ,"Set Scan Parameters" }, 3237 { "g‘-þock", cmd_þock_šfo , "Get Clock Information" }, 3238 { "add-deviû", cmd_add_deviû , "Add Device" }, 3239 { "d–-deviû", cmd_d–_deviû , "Remove Device" }, 3240 { "þr-deviûs", cmd_þr_deviûs ,"Clear Devices" }, 3244  $g­_»ady ( boÞ ¡©us , * u£r_d©a ) 3246 } } 3248  $u§ge () 3250  i ; 3252 `´štf ("btmgmˆv” %s\n", VERSION ); 3253 `´štf ("Usage:\n" 3256 `´štf ("Options:\n" 3261 `´štf ("Commands:\n"); 3262  i = 0; commªd [i]. cmd ; i++) 3263 `´štf ("\t%-15s\t%s\n", commªd [ i ]. cmd , commªd[i]. doc ); 3265 `´štf ("\n" 3268 } } 3270  ÝtiÚ gmaš_ÝtiÚs [] = { 3277  $maš ( ¬gc , * ¬gv []) 3279  bt_g­ * g­ ; 3280  Ýt , i ; 3281 ušt16_t šdex = MGMT_INDEX_NONE ; 3282  mgmt *mgmt; 3283  ex™_¡©us ; 3285 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+hvi:", 3286 maš_ÝtiÚs , NULL )) != -1) { 3287  Ýt ) { 3289 ià( `¡¾’ ( Ýrg ) > 3 && 3290 `¡ºÿ£cmp ( Ýrg , "hci", 3) == 0) 3291 šdex = `©oi ( Ýrg + 3); 3293 šdex = `©oi ( Ýrg ); 3296 mÚ™Ü = Œue ; 3300 `u§ge (); 3305 ¬gc -ð Ýtšd ; 3306 ¬gv +ð Ýtšd ; 3307 Ýtšd = 0; 3309 ià( ¬gc < 1) { 3310 `u§ge (); 3314 `mašloÝ_š™ (); 3316 ià( šdex =ð MGMT_INDEX_NONE ) 3317 g­ = `bt_g­_Ãw_deçuÉ (); 3319 g­ = `bt_g­_Ãw_šdex ( šdex ); 3321 `bt_g­_£t_»ady_hªdËr ( g­ , g­_»ady , NULL , NULL); 3323 mgmt = `mgmt_Ãw_deçuÉ (); 3324 ià(! mgmt ) { 3325 `årštf ( ¡d”r , "Unableo open mgmt_socket\n"); 3326  EXIT_FAILURE ; 3329  i = 0; commªd [i]. cmd ; i++) { 3330 ià( `¡rcmp ( commªd [ i ]. cmd , ¬gv [0]) != 0) 3333 commªd [ i ]. `func ( mgmt , šdex , ¬gc , ¬gv ); 3337 ià( commªd [ i ]. cmd =ð NULL ) { 3338 `årštf ( ¡d”r , "UnknowÀcommªd: %s\n", ¬gv [0]); 3339 `mgmt_uÄef ( mgmt ); 3340  EXIT_FAILURE ; 3343 `mgmt_»gi¡” ( mgmt , MGMT_EV_CONTROLLER_ERROR , šdex , cÚŒÞËr_”rÜ , 3344 NULL , NULL); 3345 `mgmt_»gi¡” ( mgmt , MGMT_EV_INDEX_ADDED , šdex , šdex_added , 3346 NULL , NULL); 3347 `mgmt_»gi¡” ( mgmt , MGMT_EV_INDEX_REMOVED , šdex , šdex_»moved , 3348 NULL , NULL); 3349 `mgmt_»gi¡” ( mgmt , MGMT_EV_NEW_SETTINGS , šdex , Ãw_£‰šgs , 3350 NULL , NULL); 3351 `mgmt_»gi¡” ( mgmt , MGMT_EV_DISCOVERING , šdex , discov”šg , 3352 NULL , NULL); 3353 `mgmt_»gi¡” ( mgmt , MGMT_EV_NEW_LINK_KEY , šdex , Ãw_lšk_key , 3354 NULL , NULL); 3355 `mgmt_»gi¡” ( mgmt , MGMT_EV_DEVICE_CONNECTED , šdex , cÚÃùed , 3356 NULL , NULL); 3357 `mgmt_»gi¡” ( mgmt , MGMT_EV_DEVICE_DISCONNECTED , šdex , discÚÃùed , 3358 NULL , NULL); 3359 `mgmt_»gi¡” ( mgmt , MGMT_EV_CONNECT_FAILED , šdex , cÚn_çžed , 3360 NULL , NULL); 3361 `mgmt_»gi¡” ( mgmt , MGMT_EV_AUTH_FAILED , šdex , auth_çžed , 3362 NULL , NULL); 3363 `mgmt_»gi¡” ( mgmt , MGMT_EV_LOCAL_NAME_CHANGED , šdex , 3364 loÿl_Çme_chªged , NULL , NULL); 3365 `mgmt_»gi¡” ( mgmt , MGMT_EV_DEVICE_FOUND , šdex , deviû_found , 3366 mgmt , NULL ); 3367 `mgmt_»gi¡” ( mgmt , MGMT_EV_PIN_CODE_REQUEST , šdex , »que¡_pš , 3368 mgmt , NULL ); 3369 `mgmt_»gi¡” ( mgmt , MGMT_EV_USER_CONFIRM_REQUEST , šdex , u£r_cÚfœm , 3370 mgmt , NULL ); 3371 `mgmt_»gi¡” ( mgmt , MGMT_EV_USER_PASSKEY_REQUEST , šdex , 3372 »que¡_·sskey , mgmt , NULL ); 3373 `mgmt_»gi¡” ( mgmt , MGMT_EV_PASSKEY_NOTIFY , šdex , 3374 ·sskey_nÙify , mgmt , NULL ); 3375 `mgmt_»gi¡” ( mgmt , MGMT_EV_UNCONF_INDEX_ADDED , šdex , 3376 uncÚf_šdex_added , NULL , NULL); 3377 `mgmt_»gi¡” ( mgmt , MGMT_EV_UNCONF_INDEX_REMOVED , šdex , 3378 uncÚf_šdex_»moved , NULL , NULL); 3379 `mgmt_»gi¡” ( mgmt , MGMT_EV_NEW_CONFIG_OPTIONS , šdex , 3380 Ãw_cÚfig_ÝtiÚs , NULL , NULL); 3382 ex™_¡©us = `mašloÝ_run (); 3384 `mgmt_ÿnûl_®l ( mgmt ); 3385 `mgmt_uÄegi¡”_®l ( mgmt ); 3386 `mgmt_uÄef ( mgmt ); 3388 `bt_g­_uÄef ( g­ ); 3390  ex™_¡©us ; 3391 } } @tools/btproxy.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<ùy³.h > 32  ~ 33  ~ 34  ~<¡dlib.h > 35  ~<¡ršg.h > 36  ~ 37  ~<¡dboÞ.h > 38  ~<‹rmios.h > 39  ~ 40  ~ 41  ~ 43  ~<Ãtdb.h > 44  ~<¬·/š‘.h > 46  ~"¤c/sh¬ed/utž.h " 47  ~"mÚ™Ü/mašloÝ.h " 48  ~"mÚ™Ü/bt.h " 50  #BTPROTO_HCI 1 ) 51  ssockaddr_hci { 52 §_çmžy_t mhci_çmžy ; 53  mhci_dev ; 54  mhci_chªÃl ; 56  #HCI_CHANNEL_USER 1 ) 58  ušt16_t ghci_šdex = 0; 59  boÞ gþ›Á_aùive = çl£ ; 60  boÞ gdebug_’abËd = çl£ ; 62  $hexdump_´št (cÚ¡ * ¡r , * u£r_d©a ) 64 `´štf ("%s%s\n", (*è u£r_d©a , ¡r ); 65 } } 67  s´oxy { 69  mho¡_fd ; 70 ušt8_t mho¡_buf [4096]; 71 ušt16_t mho¡_Ën ; 72 boÞ mho¡_shutdown ; 75  mdev_fd ; 76 ušt8_t mdev_buf [4096]; 77 ušt16_t mdev_Ën ; 78 boÞ mdev_shutdown ; 81  boÞ $wr™e_·ck‘ ( fd , cÚ¡ * d©a , size_t size , 82 * u£r_d©a ) 84  size > 0) { 85 ssize_t wr™‹n ; 87 wr™‹n = `wr™e ( fd , d©a , size ); 88 ià( wr™‹n < 0) { 89 ià( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINTR ) 91  çl£ ; 94 ià( debug_’abËd ) 95 `utž_hexdump ('<', d©a , wr™‹n , hexdump_´št , 96 u£r_d©a ); 98 d©a +ð wr™‹n ; 99 size -ð wr™‹n ; 102  Œue ; 103 } } 105  $ho¡_»ad_de¡roy (* u£r_d©a ) 107  ´oxy *´oxy = u£r_d©a ; 109 `´štf ("Closing host descriptor\n"); 111 ià( ´oxy -> ho¡_shutdown ) 112 `shutdown ( ´oxy -> ho¡_fd , SHUT_RDWR ); 114 `þo£ ( ´oxy -> ho¡_fd ); 115 ´oxy -> ho¡_fd = -1; 117 ià( ´oxy -> dev_fd < 0) { 118 þ›Á_aùive = çl£ ; 119 `ä“ ( ´oxy ); 121 `mašloÝ_»move_fd ( ´oxy -> dev_fd ); 122 } } 124  $ho¡_»ad_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 126  ´oxy *´oxy = u£r_d©a ; 127  bt_hci_cmd_hdr * cmd_hdr ; 128  bt_hci_aþ_hdr * aþ_hdr ; 129  bt_hci_sco_hdr * sco_hdr ; 130 ssize_t Ën ; 131 ušt16_t pkŽ’ ; 133 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 134 `årštf ( ¡d”r , "Error from host descriptor\n"); 135 `mašloÝ_»move_fd ( ´oxy -> ho¡_fd ); 139 ià( ev’ts & EPOLLRDHUP ) { 140 `årštf ( ¡d”r , "Remote hangup of host descriptor\n"); 141 `mašloÝ_»move_fd ( ´oxy -> ho¡_fd ); 145 Ën = `»ad ( ´oxy -> ho¡_fd ,…roxy-> ho¡_buf +…roxy-> ho¡_Ën , 146 ( ´oxy -> ho¡_buf è-…roxy-> ho¡_Ën ); 147 ià( Ën < 0) { 148 ià( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINTR ) 151 `årštf ( ¡d”r , "Read from host descriptor failed\n"); 152 `mašloÝ_»move_fd ( ´oxy -> ho¡_fd ); 156 ià( debug_’abËd ) 157 `utž_hexdump ('>', ´oxy -> ho¡_buf +…roxy-> ho¡_Ën , Ën , 158 hexdump_´št , "H: "); 160 ´oxy -> ho¡_Ën +ð Ën ; 162 ´oûss_·ck‘ : 163 ià( ´oxy -> ho¡_Ën < 1) 166  ´oxy -> ho¡_buf [0]) { 167  BT_H4_CMD_PKT : 168 ià( ´oxy -> ho¡_Ën < 1 + (* cmd_hdr )) 171 cmd_hdr = (*è( ´oxy -> ho¡_buf + 1); 172 pkŽ’ = 1 + (* cmd_hdr è+ cmd_hdr-> ¶’ ; 174  BT_H4_ACL_PKT : 175 ià( ´oxy -> ho¡_Ën < 1 + (* aþ_hdr )) 178 aþ_hdr = (*è( ´oxy -> ho¡_buf + 1); 179 pkŽ’ = 1 + (* aþ_hdr è+ `ýu_to_Ë16 ×þ_hdr-> dËn ); 181  BT_H4_SCO_PKT : 182 ià( ´oxy -> ho¡_Ën < 1 + (* sco_hdr )) 185 sco_hdr = (*è( ´oxy -> ho¡_buf + 1); 186 pkŽ’ = 1 + (* sco_hdr è+ sco_hdr-> dËn ; 190 ´oxy -> ho¡_Ën = 0; 193 `årštf ( ¡d”r , "Received unknown host…acketype 0x%02x\n", 194 ´oxy -> ho¡_buf [0]); 195 `mašloÝ_»move_fd ( ´oxy -> ho¡_fd ); 199 ià( ´oxy -> ho¡_Ën < pkŽ’ ) 202 ià(! `wr™e_·ck‘ ( ´oxy -> dev_fd ,…roxy-> ho¡_buf , pkŽ’ , "D: ")) { 203 `årštf ( ¡d”r , "Writeo device descriptor failed\n"); 204 `mašloÝ_»move_fd ( ´oxy -> dev_fd ); 208 ià( ´oxy -> ho¡_Ën > pkŽ’ ) { 209 `memmove ( ´oxy -> ho¡_buf ,…roxy->ho¡_buà+ pkŽ’ , 210 ´oxy -> ho¡_Ën - pkŽ’ ); 211 ´oxy -> ho¡_Ën -ð pkŽ’ ; 212  ´oûss_·ck‘ ; 215 ´oxy -> ho¡_Ën = 0; 216 } } 218  $dev_»ad_de¡roy (* u£r_d©a ) 220  ´oxy *´oxy = u£r_d©a ; 222 `´štf ("Closing device descriptor\n"); 224 ià( ´oxy -> dev_shutdown ) 225 `shutdown ( ´oxy -> dev_fd , SHUT_RDWR ); 227 `þo£ ( ´oxy -> dev_fd ); 228 ´oxy -> dev_fd = -1; 230 ià( ´oxy -> ho¡_fd < 0) { 231 þ›Á_aùive = çl£ ; 232 `ä“ ( ´oxy ); 234 `mašloÝ_»move_fd ( ´oxy -> ho¡_fd ); 235 } } 237  $dev_»ad_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 239  ´oxy *´oxy = u£r_d©a ; 240  bt_hci_evt_hdr * evt_hdr ; 241  bt_hci_aþ_hdr * aþ_hdr ; 242  bt_hci_sco_hdr * sco_hdr ; 243 ssize_t Ën ; 244 ušt16_t pkŽ’ ; 246 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 247 `årštf ( ¡d”r , "Error from device descriptor\n"); 248 `mašloÝ_»move_fd ( ´oxy -> dev_fd ); 252 ià( ev’ts & EPOLLRDHUP ) { 253 `årštf ( ¡d”r , "Remote hangup of device descriptor\n"); 254 `mašloÝ_»move_fd ( ´oxy -> ho¡_fd ); 258 Ën = `»ad ( ´oxy -> dev_fd ,…roxy-> dev_buf +…roxy-> dev_Ën , 259 ( ´oxy -> dev_buf è-…roxy-> dev_Ën ); 260 ià( Ën < 0) { 261 ià( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINTR ) 264 `årštf ( ¡d”r , "Read from device descriptor failed\n"); 265 `mašloÝ_»move_fd ( ´oxy -> dev_fd ); 269 ià( debug_’abËd ) 270 `utž_hexdump ('>', ´oxy -> dev_buf +…roxy-> dev_Ën , Ën , 271 hexdump_´št , "D: "); 273 ´oxy -> dev_Ën +ð Ën ; 275 ´oûss_·ck‘ : 276 ià( ´oxy -> dev_Ën < 1) 279  ´oxy -> dev_buf [0]) { 280  BT_H4_EVT_PKT : 281 ià( ´oxy -> dev_Ën < 1 + (* evt_hdr )) 284 evt_hdr = (*è( ´oxy -> dev_buf + 1); 285 pkŽ’ = 1 + (* evt_hdr è+ƒvt_hdr-> ¶’ ; 287  BT_H4_ACL_PKT : 288 ià( ´oxy -> dev_Ën < 1 + (* aþ_hdr )) 291 aþ_hdr = (*è( ´oxy -> dev_buf + 1); 292 pkŽ’ = 1 + (* aþ_hdr è+ `ýu_to_Ë16 ×þ_hdr-> dËn ); 294  BT_H4_SCO_PKT : 295 ià( ´oxy -> dev_Ën < 1 + (* sco_hdr )) 298 sco_hdr = (*è( ´oxy -> dev_buf + 1); 299 pkŽ’ = 1 + (* sco_hdr è+ sco_hdr-> dËn ; 302 `årštf ( ¡d”r , "Received unknown device…acketype 0x%02x\n", 303 ´oxy -> dev_buf [0]); 304 `mašloÝ_»move_fd ( ´oxy -> dev_fd ); 308 ià( ´oxy -> dev_Ën < pkŽ’ ) 311 ià(! `wr™e_·ck‘ ( ´oxy -> ho¡_fd ,…roxy-> dev_buf , pkŽ’ , "H: ")) { 312 `årštf ( ¡d”r , "Writeo host descriptor failed\n"); 313 `mašloÝ_»move_fd ( ´oxy -> ho¡_fd ); 317 ià( ´oxy -> dev_Ën > pkŽ’ ) { 318 `memmove ( ´oxy -> dev_buf ,…roxy->dev_buà+ pkŽ’ , 319 ´oxy -> dev_Ën - pkŽ’ ); 320 ´oxy -> dev_Ën -ð pkŽ’ ; 321  ´oûss_·ck‘ ; 324 ´oxy -> dev_Ën = 0; 325 } } 327  boÞ $£tup_´oxy ( ho¡_fd , boÞ ho¡_shutdown , 328  dev_fd , boÞ dev_shutdown ) 330  ´oxy *proxy; 332 ´oxy = `Ãw0 (proxy, 1); 333 ià(! ´oxy ) 334  NULL ; 336 ´oxy -> ho¡_fd = host_fd; 337 ´oxy -> ho¡_shutdown = host_shutdown; 339 ´oxy -> dev_fd = dev_fd; 340 ´oxy -> dev_shutdown = dev_shutdown; 342 `mašloÝ_add_fd ( ´oxy -> ho¡_fd , EPOLLIN | EPOLLRDHUP , 343 ho¡_»ad_ÿÎback , ´oxy , ho¡_»ad_de¡roy ); 345 `mašloÝ_add_fd ( ´oxy -> dev_fd , EPOLLIN | EPOLLRDHUP , 346 dev_»ad_ÿÎback , ´oxy , dev_»ad_de¡roy ); 348  Œue ; 349 } } 351  $Ý’_chªÃl ( ušt16_t šdex ) 353  sockaddr_hci addr ; 354  fd ; 356 `´štf ("O³nšg u£¸chªÃÈfÜ hci%u\n", hci_šdex ); 358 fd = `sock‘ ( PF_BLUETOOTH , SOCK_RAW | SOCK_CLOEXEC , BTPROTO_HCI ); 359 ià( fd < 0) { 360 `³¼Ü ("Failedo open Bluetooth socket"); 364 `mem£t (& addr , 0, (addr)); 365 addr . hci_çmžy = AF_BLUETOOTH ; 366 addr . hci_dev = šdex ; 367 addr . hci_chªÃl = HCI_CHANNEL_USER ; 369 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 370 `þo£ ( fd ); 371 `³¼Ü ("Failedo bind Bluetooth socket"); 375  fd ; 376 } } 378  $£rv”_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 381  sockaddr commÚ ; 382  sockaddr_un sun ; 383  sockaddr_š sš ; 384 } addr ; 385 sockËn_t Ën ; 386  ho¡_fd , dev_fd ; 388 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 389 `mašloÝ_qu™ (); 393 `mem£t (& addr , 0, (addr)); 394 Ën = ( addr ); 396 ià( `g‘sockÇme ( fd , & addr . commÚ , & Ën ) < 0) { 397 `³¼Ü ("Failedo get socket‚ame"); 401 ho¡_fd = `acû± ( fd , & addr . commÚ , & Ën ); 402 ià( ho¡_fd < 0) { 403 `³¼Ü ("Failedo‡ccept client socket"); 407 ià( þ›Á_aùive ) { 408 `årštf ( ¡d”r , "Active client‡lready…resent\n"); 409 `þo£ ( ho¡_fd ); 413 dev_fd = `Ý’_chªÃl ( hci_šdex ); 414 ià( dev_fd < 0) { 415 `þo£ ( ho¡_fd ); 419 `´štf ("New client connected\n"); 421 ià(! `£tup_´oxy ( ho¡_fd , Œue , dev_fd , çl£ )) { 422 `þo£ ( dev_fd ); 423 `þo£ ( ho¡_fd ); 427 þ›Á_aùive = Œue ; 428 } } 430  $Ý’_unix (cÚ¡ * ·th ) 432  sockaddr_un addr ; 433  fd ; 435 `uÆšk ( ·th ); 437 fd = `sock‘ ( PF_UNIX , SOCK_STREAM | SOCK_CLOEXEC , 0); 438 ià( fd < 0) { 439 `³¼Ü ("Failedo open Unix server socket"); 443 `mem£t (& addr , 0, (addr)); 444 addr . sun_çmžy = AF_UNIX ; 445 `¡rýy ( addr . sun_·th , ·th ); 447 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 448 `³¼Ü ("Failedo bind Unix server socket"); 449 `þo£ ( fd ); 453 ià( `li¡’ ( fd , 1) < 0) { 454 `³¼Ü ("Failedo†isten Unix server socket"); 455 `þo£ ( fd ); 459 ià( `chmod ( ·th , 0666) < 0) 460 `³¼Ü ("Failedo change mode"); 462  fd ; 463 } } 465  $Ý’_tý (cÚ¡ * add»ss ,  pÜt ) 467  sockaddr_š addr ; 468  fd , Ýt = 1; 470 fd = `sock‘ ( PF_INET , SOCK_STREAM | SOCK_CLOEXEC , 0); 471 ià( fd < 0) { 472 `³¼Ü ("Failedo open TCP server socket"); 476 `£tsockÝt ( fd , SOL_SOCKET , SO_REUSEADDR , & Ýt , (opt)); 478 `mem£t (& addr , 0, (addr)); 479 addr . sš_çmžy = AF_INET ; 480 addr . sš_addr . s_addr = `š‘_addr ( add»ss ); 481 addr . sš_pÜt = `htÚs ( pÜt ); 483 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 484 `³¼Ü ("Failedo bind TCP server socket"); 485 `þo£ ( fd ); 489 ià( `li¡’ ( fd , 1) < 0) { 490 `³¼Ü ("Failedo†isten TCP server socket"); 491 `þo£ ( fd ); 495  fd ; 496 } } 498  $cÚÃù_tý (cÚ¡ * add»ss ,  pÜt ) 500  sockaddr_š addr ; 501  fd ; 503 fd = `sock‘ ( PF_INET , SOCK_STREAM | SOCK_CLOEXEC , 0); 504 ià( fd < 0) { 505 `³¼Ü ("Failedo open TCP client socket"); 509 `mem£t (& addr , 0, (addr)); 510 addr . sš_çmžy = AF_INET ; 511 addr . sš_addr . s_addr = `š‘_addr ( add»ss ); 512 addr . sš_pÜt = `htÚs ( pÜt ); 514 ià( `cÚÃù ( fd , ( sockaddr *è& addr , (addr)) < 0) { 515 `³¼Ü ("Failedo connect TCP client socket"); 516 `þo£ ( fd ); 520  fd ; 521 } } 523  $Ý’_vhci ( ušt8_t ty³ ) 525 ušt8_t ü—‹_»q [2] = { 0xff, ty³ }; 526 ssize_t wr™‹n ; 527  fd ; 529 fd = `Ý’ ("/dev/vhci", O_RDWR | O_CLOEXEC ); 530 ià( fd < 0) { 531 `³¼Ü ("Failedo open /dev/vhci device"); 535 wr™‹n = `wr™e ( fd , ü—‹_»q , (create_req)); 536 ià( wr™‹n < 0) { 537 `³¼Ü ("Failedo set deviceype"); 538 `þo£ ( fd ); 542  fd ; 543 } } 545  $sigÇl_ÿÎback ( signum , * u£r_d©a ) 547  signum ) { 548  SIGINT : 549  SIGTERM : 550 `mašloÝ_qu™ (); 553 } } 555  $u§ge () 557 `´štf ("btproxy - Bluetooth controller…roxy\n" 559 `´štf ("\tbtproxy [options]\n"); 560 `´štf ("Options:\n" 568 } } 570 cÚ¡  ÝtiÚ gmaš_ÝtiÚs [] = { 571 { "cÚÃù", »quœed_¬gum’t , NULL , 'c' }, 572 { "li¡’", ÝtiÚ®_¬gum’t , NULL , 'l' }, 573 { "unix", ÝtiÚ®_¬gum’t , NULL , 'u' }, 574 { "pÜt", »quœed_¬gum’t , NULL , 'p' }, 575 { "šdex", »quœed_¬gum’t , NULL , 'i' }, 576 { "debug", no_¬gum’t , NULL , 'd' }, 577 { "v”siÚ", no_¬gum’t , NULL , 'v' }, 578 { "h–p", no_¬gum’t , NULL , 'h' }, 582  $maš ( ¬gc , * ¬gv []) 584 cÚ¡ * cÚÃù_add»ss = NULL ; 585 cÚ¡ * £rv”_add»ss = NULL ; 586 cÚ¡ * unix_·th = NULL ; 587  tý_pÜt = 0xb1ee; 588 cÚ¡ * ¡r ; 589 sig£t_t mask ; 592  Ýt ; 594 Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "c:l::u::p:i:dvh", 595 maš_ÝtiÚs , NULL ); 596 ià( Ýt < 0) 599  Ýt ) { 601 cÚÃù_add»ss = Ýrg ; 604 ià( Ýrg ) 605 £rv”_add»ss = Ýrg ; 607 £rv”_add»ss = "0.0.0.0"; 610 ià( Ýrg ) 611 unix_·th = Ýrg ; 613 unix_·th = "/tmp/bt-server-bredr"; 616 tý_pÜt = `©oi ( Ýrg ); 619 ià( `¡¾’ ( Ýrg è> 3 && ! `¡ºcmp (optarg, "hci", 3)) 620 ¡r = Ýrg + 3; 622 ¡r = Ýrg ; 623 ià(! `isdig™ (* ¡r )) { 624 `u§ge (); 625  EXIT_FAILURE ; 627 hci_šdex = `©oi ( ¡r ); 630 debug_’abËd = Œue ; 633 `´štf ("%s\n", VERSION ); 634  EXIT_SUCCESS ; 636 `u§ge (); 637  EXIT_SUCCESS ; 639  EXIT_FAILURE ; 643 ià( ¬gc - Ýtšd > 0) { 644 `årštf ( ¡d”r , "Invalid command†ine…arameters\n"); 645  EXIT_FAILURE ; 648 ià( unix_·th && £rv”_add»ss ) { 649 `årštf ( ¡d”r , "Invalido specify TCP‡nd Unix servers\n"); 650  EXIT_FAILURE ; 653 ià( cÚÃù_add»ss && ( unix_·th || £rv”_add»ss )) { 654 `årštf ( ¡d”r , "Invalido specify client‡nd server mode\n"); 655  EXIT_FAILURE ; 658 `mašloÝ_š™ (); 660 `sigem±y£t (& mask ); 661 `sigadd£t (& mask , SIGINT ); 662 `sigadd£t (& mask , SIGTERM ); 664 `mašloÝ_£t_sigÇl (& mask , sigÇl_ÿÎback , NULL , NULL); 666 ià( cÚÃù_add»ss ) { 667  ho¡_fd , dev_fd ; 669 `´štf ("CÚÃùšgØ%s:%u\n", cÚÃù_add»ss , tý_pÜt ); 671 dev_fd = `cÚÃù_tý ( cÚÃù_add»ss , tý_pÜt ); 672 ià( dev_fd < 0) 673  EXIT_FAILURE ; 675 `´štf ("Opening virtual device\n"); 677 ho¡_fd = `Ý’_vhci (0x00); 678 ià( ho¡_fd < 0) { 679 `þo£ ( dev_fd ); 680  EXIT_FAILURE ; 683 ià(! `£tup_´oxy ( ho¡_fd , çl£ , dev_fd , Œue )) { 684 `þo£ ( dev_fd ); 685 `þo£ ( ho¡_fd ); 686  EXIT_FAILURE ; 689  £rv”_fd ; 691 ià( unix_·th ) { 692 `´štf ("Li¡’šg oÀ%s\n", unix_·th ); 694 £rv”_fd = `Ý’_unix ( unix_·th ); 695 } ià( £rv”_add»ss ) { 696 `´štf ("Li¡’šg oÀ%s:%u\n", £rv”_add»ss , 697 tý_pÜt ); 699 £rv”_fd = `Ý’_tý ( £rv”_add»ss , tý_pÜt ); 701 `årštf ( ¡d”r , "Missingƒmulator device\n"); 702  EXIT_FAILURE ; 705 ià( £rv”_fd < 0) 706  EXIT_FAILURE ; 708 `mašloÝ_add_fd ( £rv”_fd , EPOLLIN , £rv”_ÿÎback , 709 NULL , NULL); 712  `mašloÝ_run (); 713 } } @tools/btsnoop.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~ 33  ~<¡dlib.h > 34  ~<¡dšt.h > 35  ~<¡dboÞ.h > 36  ~<¡ršg.h > 37  ~ 38  ~<’dŸn.h > 39  ~<¬·/š‘.h > 40  ~ 42  ~"¤c/sh¬ed/bt¢oÝ.h " 44  sbt¢oÝ_hdr { 45 ušt8_t mid [8]; 46 ušt32_t mv”siÚ ; 47 ušt32_t mty³ ; 48 } __©Œibu‹__ (( ·cked )); 49  #BTSNOOP_HDR_SIZE (( bt¢oÝ_hdr )) ) 51  sbt¢oÝ_pkt { 52 ušt32_t msize ; 53 ušt32_t mËn ; 54 ušt32_t mæags ; 55 ušt32_t mdrÝs ; 56 ušt64_t mts ; 57 ušt8_t md©a [0]; 58 } __©Œibu‹__ (( ·cked )); 59  #BTSNOOP_PKT_SIZE (( bt¢oÝ_pkt )) ) 61 cÚ¡ ušt8_t gbt¢oÝ_id [] = { 0x62, 0x74, 0x73, 0x6e, 64 cÚ¡ ušt32_t gbt¢oÝ_v”siÚ = 1; 66  $ü—‹_bt¢oÝ (cÚ¡ * ·th ) 68  bt¢oÝ_hdr hdr ; 69 ssize_t wr™‹n ; 70  fd ; 72 fd = `Ý’ ( ·th , O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC , 73 S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ); 74 ià( fd < 0) { 75 `³¼Ü ("failedo output file"); 79 `memýy ( hdr . id , bt¢oÝ_id , (btsnoop_id)); 80 hdr . v”siÚ = `htobe32 ( bt¢oÝ_v”siÚ ); 81 hdr . ty³ = `htobe32 (2001); 83 wr™‹n = `wr™e ( fd , & hdr , BTSNOOP_HDR_SIZE ); 84 ià( wr™‹n < 0) { 85 `³¼Ü ("failedo write output header"); 86 `þo£ ( fd ); 90  fd ; 91 } } 93  $Ý’_bt¢oÝ (cÚ¡ * ·th , ušt32_t * ty³ ) 95  bt¢oÝ_hdr hdr ; 96 ssize_t Ën ; 97  fd ; 99 fd = `Ý’ ( ·th , O_RDONLY | O_CLOEXEC ); 100 ià( fd < 0) { 101 `³¼Ü ("failedo open input file"); 105 Ën = `»ad ( fd , & hdr , BTSNOOP_HDR_SIZE ); 106 ià( Ën < 0 ||†’ !ð BTSNOOP_HDR_SIZE ) { 107 `³¼Ü ("failedo„ead input header"); 108 `þo£ ( fd ); 112 ià( `memcmp ( hdr . id , bt¢oÝ_id , (btsnoop_id))) { 113 `årštf ( ¡d”r , "not‡ valid btsnoop header\n"); 114 `þo£ ( fd ); 118 ià( `be32toh ( hdr . v”siÚ è!ð bt¢oÝ_v”siÚ ) { 119 `årštf ( ¡d”r , "invalid btsnoop version\n"); 120 `þo£ ( fd ); 124 ià( ty³ ) 125 * ty³ = `be32toh ( hdr .type); 127  fd ; 128 } } 130  #MAX_MERGE 8 ) 132  $commªd_m”ge (cÚ¡ * ouut ,  ¬gc , * ¬gv []) 134  bt¢oÝ_pkt šput_pkt [ MAX_MERGE ]; 135  buf [2048]; 136  ouut_fd , šput_fd [ MAX_MERGE ], num_šput = 0; 137  i , £Ëù_šput ; 138 ssize_t Ën , wr™‹n ; 139 ušt32_t tÜ—d , æags ; 140 ušt16_t šdex , Ýcode ; 142 ià( ¬gc > MAX_MERGE ) { 143 `årštf ( ¡d”r , "Úly u°tØ%d fže ®lowed\n", MAX_MERGE ); 147  i = 0; i < ¬gc ; i++) { 148 ušt32_t ty³ ; 149  fd ; 151 fd = `Ý’_bt¢oÝ ( ¬gv [ i ], & ty³ ); 152 ià( fd < 0) 155 ià( ty³ != 1002) { 156 `årštf ( ¡d”r , "unsupported†ink dataype %u\n", 157 ty³ ); 158 `þo£ ( fd ); 162 šput_fd [ num_šput ++] = fd ; 165 ià( num_šput !ð ¬gc ) { 166 `årštf ( ¡d”r , "failedo open‡ll input files\n"); 167  þo£_šput ; 170 ouut_fd = `ü—‹_bt¢oÝ ( ouut ); 171 ià( ouut_fd < 0) 172  þo£_šput ; 174  i = 0; i < num_šput ; i++) { 175 Ën = `»ad ( šput_fd [ i ], & šput_pkt [i], BTSNOOP_PKT_SIZE ); 176 ià( Ën < 0 ||†’ !ð BTSNOOP_PKT_SIZE ) { 177 `þo£ ( šput_fd [ i ]); 178 šput_fd [ i ] = -1; 182 Ãxt_·ck‘ : 183 £Ëù_šput = -1; 185  i = 0; i < num_šput ; i++) { 186 ušt64_t ts ; 188 ià( šput_fd [ i ] < 0) 191 ià( £Ëù_šput < 0) { 192 £Ëù_šput = i ; 196 ts = `be64toh ( šput_pkt [ i ].ts); 198 ià( ts < `be64toh ( šput_pkt [ £Ëù_šput ].ts)) 199 £Ëù_šput = i ; 202 ià( £Ëù_šput < 0) 203  þo£_ouut ; 205 tÜ—d = `be32toh ( šput_pkt [ £Ëù_šput ]. size ); 206 æags = `be32toh ( šput_pkt [ £Ëù_šput ].flags); 208 Ën = `»ad ( šput_fd [ £Ëù_šput ], buf , tÜ—d ); 209 ià( Ën < 0 ||†’ !ð( ssize_t è tÜ—d ) { 210 `þo£ ( šput_fd [ £Ëù_šput ]); 211 šput_fd [ £Ëù_šput ] = -1; 212  Ãxt_·ck‘ ; 215 wr™‹n = `htobe32 ( tÜ—d - 1); 216 šput_pkt [ £Ëù_šput ]. size = wr™‹n ; 217 šput_pkt [ £Ëù_šput ]. Ën = wr™‹n ; 219  buf [0]) { 221 Ýcode = BTSNOOP_OPCODE_COMMAND_PKT ; 224 ià( æags & 0x01) 225 Ýcode = BTSNOOP_OPCODE_ACL_RX_PKT ; 227 Ýcode = BTSNOOP_OPCODE_ACL_TX_PKT ; 230 ià( æags & 0x01) 231 Ýcode = BTSNOOP_OPCODE_SCO_RX_PKT ; 233 Ýcode = BTSNOOP_OPCODE_ACL_TX_PKT ; 236 Ýcode = BTSNOOP_OPCODE_EVENT_PKT ; 239  sk_wr™e ; 242 šdex = £Ëù_šput ; 243 šput_pkt [ £Ëù_šput ]. æags = `htobe32 (( šdex << 16è| Ýcode ); 245 wr™‹n = `wr™e ( ouut_fd , & šput_pkt [ £Ëù_šput ], BTSNOOP_PKT_SIZE ); 246 ià( wr™‹n !ð BTSNOOP_PKT_SIZE ) { 247 `årštf ( ¡d”r , "write of…acket header failed\n"); 248  þo£_ouut ; 251 wr™‹n = `wr™e ( ouut_fd , buf + 1, tÜ—d - 1); 252 ià( wr™‹n !ð( ssize_t è tÜ—d - 1) { 253 `årštf ( ¡d”r , "write of…acket data failed\n"); 254  þo£_ouut ; 257 sk_wr™e : 258 Ën = `»ad ( šput_fd [ £Ëù_šput ], 259 & šput_pkt [ £Ëù_šput ], BTSNOOP_PKT_SIZE ); 260 ià( Ën < 0 ||†’ !ð BTSNOOP_PKT_SIZE ) { 261 `þo£ ( šput_fd [ £Ëù_šput ]); 262 šput_fd [ £Ëù_šput ] = -1; 265  Ãxt_·ck‘ ; 267 þo£_ouut : 268 `þo£ ( ouut_fd ); 270 þo£_šput : 271  i = 0; i < num_šput ; i++) 272 `þo£ ( šput_fd [ i ]); 273 } } 275  $commªd_exŒaù_eœ (cÚ¡ * šput ) 277  bt¢oÝ_pkt pkt ; 278  buf [2048]; 279 ssize_t Ën ; 280 ušt32_t ty³ , tÜ—d , æags ; 281 ušt16_t Ýcode ; 282  fd , couÁ = 0; 284 fd = `Ý’_bt¢oÝ ( šput , & ty³ ); 285 ià( fd < 0) 288 ià( ty³ != 2001) { 289 `årštf ( ¡d”r , "unsuµÜ‹d†šk d©¨ty³ %u\n", ty³ ); 290 `þo£ ( fd ); 294 Ãxt_·ck‘ : 295 Ën = `»ad ( fd , & pkt , BTSNOOP_PKT_SIZE ); 296 ià( Ën < 0 ||†’ !ð BTSNOOP_PKT_SIZE ) 297  þo£_šput ; 299 tÜ—d = `be32toh ( pkt . size ); 300 æags = `be32toh ( pkt .flags); 302 Ýcode = æags & 0x00ff; 304 Ën = `»ad ( fd , buf , tÜ—d ); 305 ià( Ën < 0 ||†’ !ð( ssize_t è tÜ—d ) { 306 `årštf ( ¡d”r , "failedo„ead…acket data\n"); 307  þo£_šput ; 310  Ýcode ) { 311  BTSNOOP_OPCODE_EVENT_PKT : 313 ià( buf [0] == 0x2f) { 314 ušt8_t * eœ_±r , eœ_Ën , i ; 316 eœ_Ën = buf [1] - 15; 317 eœ_±r = buf + 17; 319 ià( eœ_Ën < 1 ||ƒir_len > 240) 322 `´štf ("\t[Extended Inquiry Data with %u bytes]\n", 323 eœ_Ën ); 324 `´štf ("\t\t"); 325  i = 0; i < eœ_Ën ; i++) { 326 `´štf ("0x%02x", eœ_±r [ i ]); 327 ià((( i + 1) % 8) == 0) { 328 ià( i < eœ_Ën - 1) 329 `´štf (",\n\t\t"); 331 ià( i < eœ_Ën - 1) 332 `´štf (", "); 335 `´štf ("\n"); 337 couÁ ++; 342  Ãxt_·ck‘ ; 344 þo£_šput : 345 `þo£ ( fd ); 346 } } 348  $commªd_exŒaù_ad (cÚ¡ * šput ) 350  bt¢oÝ_pkt pkt ; 351  buf [2048]; 352 ssize_t Ën ; 353 ušt32_t ty³ , tÜ—d , æags ; 354 ušt16_t Ýcode ; 355  fd , couÁ = 0; 357 fd = `Ý’_bt¢oÝ ( šput , & ty³ ); 358 ià( fd < 0) 361 ià( ty³ != 2001) { 362 `årštf ( ¡d”r , "unsuµÜ‹d†šk d©¨ty³ %u\n", ty³ ); 363 `þo£ ( fd ); 367 Ãxt_·ck‘ : 368 Ën = `»ad ( fd , & pkt , BTSNOOP_PKT_SIZE ); 369 ià( Ën < 0 ||†’ !ð BTSNOOP_PKT_SIZE ) 370  þo£_šput ; 372 tÜ—d = `be32toh ( pkt . size ); 373 æags = `be32toh ( pkt .flags); 375 Ýcode = æags & 0x00ff; 377 Ën = `»ad ( fd , buf , tÜ—d ); 378 ià( Ën < 0 ||†’ !ð( ssize_t è tÜ—d ) { 379 `årštf ( ¡d”r , "failedo„ead…acket data\n"); 380  þo£_šput ; 383  Ýcode ) { 384  BTSNOOP_OPCODE_EVENT_PKT : 386 ià( buf [0] == 0x3e && buf[2] == 0x02) { 387 ušt8_t * ad_±r , ad_Ën , i ; 389 ad_Ën = buf [12]; 390 ad_±r = buf + 13; 392 ià( ad_Ën < 1 ||‡d_len > 40) 395 `´štf ("\t[Adv”tisšg D©¨w™h %u by‹s]\n", ad_Ën ); 396 `´štf ("\t\t"); 397  i = 0; i < ad_Ën ; i++) { 398 `´štf ("0x%02x", ad_±r [ i ]); 399 ià((( i + 1) % 8) == 0) { 400 ià( i < ad_Ën - 1) 401 `´štf (",\n\t\t"); 403 ià( i < ad_Ën - 1) 404 `´štf (", "); 407 `´štf ("\n"); 409 couÁ ++; 414  Ãxt_·ck‘ ; 416 þo£_šput : 417 `þo£ ( fd ); 418 } } 419 cÚ¡ ušt8_t gcÚn_com¶‘e [] = { 0x04, 0x03, 0x0B, 0x00 }; 420 cÚ¡ ušt8_t gdisc_com¶‘e [] = { 0x04, 0x05, 0x04, 0x00 }; 422  $commªd_exŒaù_sdp (cÚ¡ * šput ) 424  bt¢oÝ_pkt pkt ; 425  buf [2048]; 426 ssize_t Ën ; 427 ušt32_t ty³ , tÜ—d ; 428 ušt16_t cu¼’t_cid = 0x0000; 429 ušt8_t pdu_buf [512]; 430 ušt16_t pdu_Ën = 0; 431 boÞ pdu_fœ¡ = çl£ ; 432  fd , couÁ = 0; 434 fd = `Ý’_bt¢oÝ ( šput , & ty³ ); 435 ià( fd < 0) 438 ià( ty³ != 1002) { 439 `årštf ( ¡d”r , "unsuµÜ‹d†šk d©¨ty³ %u\n", ty³ ); 440 `þo£ ( fd ); 444 Ãxt_·ck‘ : 445 Ën = `»ad ( fd , & pkt , BTSNOOP_PKT_SIZE ); 446 ià( Ën < 0 ||†’ !ð BTSNOOP_PKT_SIZE ) 447  þo£_šput ; 449 tÜ—d = `be32toh ( pkt . size ); 451 Ën = `»ad ( fd , buf , tÜ—d ); 452 ià( Ën < 0 ||†’ !ð( ssize_t è tÜ—d ) { 453 `årštf ( ¡d”r , "failedo„ead…acket data\n"); 454  þo£_šput ; 457 ià( buf [0] == 0x02) { 458 ušt8_t aþ_æags ; 461 aþ_æags = buf [2] >> 4; 464 ià( aþ_æags & 0x02) { 465 ià( cu¼’t_cid =ð0x0040 && pdu_Ën > 0) { 466  i ; 467 ià(! pdu_fœ¡ ) 468 `´štf (",\n"); 469 `´štf ("\t\traw_pdu("); 470  i = 0; i < pdu_Ën ; i++) { 471 `´štf ("0x%02x", pdu_buf [ i ]); 472 ià((( i + 1) % 8) == 0) { 473 ià( i < pdu_Ën - 1) 474 `´štf (",\n\t\t\t"); 476 ià( i < pdu_Ën - 1) 477 `´štf (", "); 480 `´štf (")"); 481 pdu_fœ¡ = çl£ ; 485 cu¼’t_cid = buf [8] << 8 | buf[7]; 486 `memýy ( pdu_buf , buf + 9, Ën - 9); 487 pdu_Ën = Ën - 9; 488 } ià( aþ_æags & 0x01) { 489 `memýy ( pdu_buf + pdu_Ën , buf + 5, Ën - 5); 490 pdu_Ën +ð Ën - 5; 494 ià(( size_t è Ën > ( cÚn_com¶‘e )) { 495 ià( `memcmp ( buf , cÚn_com¶‘e , (conn_complete)) == 0) { 496 `´štf ("\tdefše_‹¡(\"/‹¡/%u\",\n", ++ couÁ ); 497 pdu_fœ¡ = Œue ; 501 ià(( size_t è Ën > ( disc_com¶‘e )) { 502 ià( `memcmp ( buf , disc_com¶‘e , (disc_complete)) == 0) { 503 `´štf (");\n"); 507  Ãxt_·ck‘ ; 509 þo£_šput : 510 `þo£ ( fd ); 511 } } 513  $u§ge () 515 `´štf ("btsnooprace file handlingool\n" 517 `´štf ("\tbtsnoop [files]\n"); 518 `´štf ("commands:\n" 522 } } 524 cÚ¡  ÝtiÚ gmaš_ÝtiÚs [] = { 525 { "m”ge", »quœed_¬gum’t , NULL , 'm' }, 526 { "exŒaù", »quœed_¬gum’t , NULL , 'e' }, 527 { "ty³", »quœed_¬gum’t , NULL , 't' }, 528 { "v”siÚ", no_¬gum’t , NULL , 'v' }, 529 { "h–p", no_¬gum’t , NULL , 'h' }, 533 ’um { mINVALID , mMERGE , mEXTRACT }; 535  $maš ( ¬gc , * ¬gv []) 537 cÚ¡ * ouut_·th = NULL ; 538 cÚ¡ * šput_·th = NULL ; 539 cÚ¡ * ty³ = NULL ; 540  commªd = INVALID ; 543  Ýt ; 545 Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "m:e:t:vh", maš_ÝtiÚs , NULL ); 546 ià( Ýt < 0) 549  Ýt ) { 551 commªd = MERGE ; 552 ouut_·th = Ýrg ; 555 commªd = EXTRACT ; 556 šput_·th = Ýrg ; 559 ty³ = Ýrg ; 562 `´štf ("%s\n", VERSION ); 563  EXIT_SUCCESS ; 565 `u§ge (); 566  EXIT_SUCCESS ; 568  EXIT_FAILURE ; 572  commªd ) { 573  MERGE : 574 ià( ¬gc - Ýtšd < 1) { 575 `årštf ( ¡d”r , "input files„equired\n"); 576  EXIT_FAILURE ; 579 `commªd_m”ge ( ouut_·th , ¬gc - Ýtšd , ¬gv + optind); 582  EXTRACT : 583 ià( ¬gc - Ýtšd > 0) { 584 `årštf ( ¡d”r , "extra‡rguments‚ot‡llowed\n"); 585  EXIT_FAILURE ; 588 ià(! ty³ ) { 589 `årštf ( ¡d”r , "noƒxtractype specified\n"); 590  EXIT_FAILURE ; 593 ià(! `¡rÿ£cmp ( ty³ , "eir")) 594 `commªd_exŒaù_eœ ( šput_·th ); 595 ià(! `¡rÿ£cmp ( ty³ , "ad")) 596 `commªd_exŒaù_ad ( šput_·th ); 597 ià(! `¡rÿ£cmp ( ty³ , "sdp")) 598 `commªd_exŒaù_sdp ( šput_·th ); 600 `årštf ( ¡d”r , "extractype‚ot supported\n"); 604 `u§ge (); 605  EXIT_FAILURE ; 608  EXIT_SUCCESS ; 609 } } @tools/ciptool.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<¡dlib.h > 31  ~ 32  ~<¡ršg.h > 33  ~ 34  ~ 35  ~ 36  ~ 37  ~ 39  ~ 40  ~ 41  ~ 42  ~ 43  ~ 44  ~ 45  ~ 47 vÞ©ž sig_©omic_t g__io_ÿnûËd = 0; 49  $sig_hup ( sig ) 52 } } 54  $sig_‹rm ( sig ) 56 __io_ÿnûËd = 1; 57 } } 59 * gcm_¡©e [] = { 72 * $cm_æag¡o¡r ( ušt32_t æags ) 74  ¡r [100] = ""; 76 `¡rÿt ( ¡r , "["); 78 ià( æags & (1 << CMTP_LOOPBACK )) 79 `¡rÿt ( ¡r , "loopback"); 81 `¡rÿt ( ¡r , "]"); 83  ¡r ; 84 } } 86  $g‘_psm ( bdaddr_t * ¤c , bdaddr_ˆ* d¡ , * psm ) 88 sdp_£ssiÚ_t * s ; 89 sdp_li¡_t * ¤ch , * ©Œs , * r¥ ; 90 uuid_t svþass ; 91 ušt16_t ©Œ ; 92  ”r ; 94 ià(!( s = `sdp_cÚÃù ( ¤c , d¡ , 0))) 97 `sdp_uuid16_ü—‹ (& svþass , CIP_SVCLASS_ID ); 98 ¤ch = `sdp_li¡_­³nd ( NULL , & svþass ); 100 ©Œ = SDP_ATTR_PROTO_DESC_LIST ; 101 ©Œs = `sdp_li¡_­³nd ( NULL , & ©Œ ); 103 ”r = `sdp_£rviû_£¬ch_©Œ_»q ( s , ¤ch , SDP_ATTR_REQ_INDIVIDUAL , ©Œs , & r¥ ); 105 `sdp_þo£ ( s ); 107 ià( ”r ) 110 ; r¥ ;„¥ =„¥-> Ãxt ) { 111 sdp_»cÜd_t * »c = (sdp_»cÜd_ˆ*è r¥ -> d©a ; 112 sdp_li¡_t * ´Ùos ; 114 ià(! `sdp_g‘_acûss_´Ùos ( »c , & ´Ùos )) { 115  p = `sdp_g‘_´Ùo_pÜt ( ´Ùos , L2CAP_UUID ); 116 ià( p > 0) { 117 * psm = p ; 124 } } 126  $do_cÚÃù ( ùl ,  dev_id , bdaddr_t * ¤c , bdaddr_ˆ* d¡ ,  psm , ušt32_t æags ) 128  cm_cÚÇdd_»q »q ; 129  hci_dev_šfo di ; 130  sockaddr_l2 addr ; 131  l2ÿp_ÝtiÚs Ýts ; 132 sockËn_t size ; 133  sk ; 135 `hci_devšfo ( dev_id , & di ); 136 ià(!( di . lšk_pÞicy & HCI_LP_RSWITCH )) { 137 `´štf ("Local device is‚ot‡ccepting„ole switch\n"); 140 ià(( sk = `sock‘ ( AF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_L2CAP )) < 0) { 141 `³¼Ü ("Can't create L2CAP socket"); 142 `ex™ (1); 145 `mem£t (& addr , 0, (addr)); 146 addr . l2_çmžy = AF_BLUETOOTH ; 147 `baýy (& addr . l2_bdaddr , ¤c ); 149 ià( `bšd ( sk , ( sockaddr *)& addr , (addr)) < 0) { 150 `³¼Ü ("Can't bind L2CAP socket"); 151 `þo£ ( sk ); 152 `ex™ (1); 155 `mem£t (& Ýts , 0, (opts)); 156 size = ( Ýts ); 158 ià( `g‘sockÝt ( sk , SOL_L2CAP , L2CAP_OPTIONS , & Ýts , & size ) < 0) { 159 `³¼Ü ("Can't get L2CAP options"); 160 `þo£ ( sk ); 161 `ex™ (1); 164 Ýts . imtu = CMTP_DEFAULT_MTU ; 165 Ýts . omtu = CMTP_DEFAULT_MTU ; 166 Ýts . æush_to = 0xffff; 168 ià( `£tsockÝt ( sk , SOL_L2CAP , L2CAP_OPTIONS , & Ýts , (opts)) < 0) { 169 `³¼Ü ("Can't set L2CAP options"); 170 `þo£ ( sk ); 171 `ex™ (1); 174 `mem£t (& addr , 0, (addr)); 175 addr . l2_çmžy = AF_BLUETOOTH ; 176 `baýy (& addr . l2_bdaddr , d¡ ); 177 addr . l2_psm = `htobs ( psm ); 179 ià( `cÚÃù ( sk , ( sockaddr *)& addr , (addr)) < 0) { 180 `³¼Ü ("Can't connect L2CAP socket"); 181 `þo£ ( sk ); 182 `ex™ (1); 185 »q . sock = sk ; 186 »q . æags = flags; 188 ià( `ioùl ( ùl , CMTPCONNADD , & »q ) < 0) { 189 `³¼Ü ("Can't create connection"); 190 `ex™ (1); 193  sk ; 194 } } 196  $cmd_show ( ùl , bdaddr_t * bdaddr ,  ¬gc , ** ¬gv ) 198  cm_cÚÆi¡_»q »q ; 199  cm_cÚnšfo ci [16]; 200  addr [18]; 201  i ; 203 »q . úum = 16; 204 »q . ci = ci; 206 ià( `ioùl ( ùl , CMTPGETCONNLIST , & »q ) < 0) { 207 `³¼Ü ("Can't get connection†ist"); 208 `ex™ (1); 211  i = 0; i < »q . úum ; i++) { 212 `ba2¡r (& ci [ i ]. bdaddr , addr ); 213 `´štf ("%d % % %s\n", ci [ i ]. num , addr , 214 cm_¡©e [ ci [ i ]. ¡©e ], 215 ci [ i ]. æags ? `cm_æag¡o¡r (ci[i].flags) : ""); 217 } } 219  $cmd_£¬ch ( ùl , bdaddr_t * bdaddr ,  ¬gc , ** ¬gv ) 221 šquœy_šfo * šfo = NULL ; 222 bdaddr_t ¤c , d¡ ; 223  psm ; 224  i , dev_id , num_r¥ , Ëngth , æags ; 225  addr [18]; 226 ušt8_t þass [3]; 228 `ba2¡r ( bdaddr , addr ); 229 dev_id = `hci_devid ( addr ); 230 ià( dev_id < 0) { 231 dev_id = `hci_g‘_rou‹ ( NULL ); 232 `hci_devba ( dev_id , & ¤c ); 234 `baýy (& ¤c , bdaddr ); 236 Ëngth = 8; 237 num_r¥ = 0; 238 æags = 0; 240 `´štf ("Searching ...\n"); 242 num_r¥ = `hci_šquœy ( dev_id , Ëngth ,‚um_r¥, NULL , & šfo , æags ); 244  i = 0; i < num_r¥ ; i++) { 245 `memýy ( þass , ( šfo + i )-> dev_þass , 3); 246 ià(( þass [1] == 2) && ((class[0] / 4) == 5)) { 247 `baýy (& d¡ , &( šfo + i )-> bdaddr ); 248 `ba2¡r (& d¡ , addr ); 250 `´štf ("\tCheckšg s”viû fÜ %s\n", addr ); 251 ià(! `g‘_psm (& ¤c , & d¡ , & psm )) 254 `bt_ä“ ( šfo ); 256 `´štf ("\tCÚÃùšgØdeviû %s\n", addr ); 257 `do_cÚÃù ( ùl , dev_id , & ¤c , & d¡ , psm , 0); 262 `bt_ä“ ( šfo ); 263 `årštf ( ¡d”r , "\tNo devices in„ange or visible\n"); 264 `ex™ (1); 265 } } 267  $cmd_ü—‹ ( ùl , bdaddr_t * bdaddr ,  ¬gc , ** ¬gv ) 269 bdaddr_t ¤c , d¡ ; 270  psm ; 271  dev_id ; 272  addr [18]; 274 ià( ¬gc < 2) 277 `¡r2ba ( ¬gv [1], & d¡ ); 279 `ba2¡r ( bdaddr , addr ); 280 dev_id = `hci_devid ( addr ); 281 ià( dev_id < 0) { 282 dev_id = `hci_g‘_rou‹ (& d¡ ); 283 `hci_devba ( dev_id , & ¤c ); 285 `baýy (& ¤c , bdaddr ); 287 ià( ¬gc < 3) { 288 ià(! `g‘_psm (& ¤c , & d¡ , & psm )) 289 psm = 4099; 291 psm = `©oi ( ¬gv [2]); 293 `do_cÚÃù ( ùl , dev_id , & ¤c , & d¡ , psm , 0); 294 } } 296  $cmd_»Ëa£ ( ùl , bdaddr_t * bdaddr ,  ¬gc , ** ¬gv ) 298  cm_cÚnd–_»q »q ; 299  cm_cÚÆi¡_»q þ ; 300  cm_cÚnšfo ci [16]; 302 ià( ¬gc < 2) { 303 þ . úum = 16; 304 þ . ci = ci; 306 ià( `ioùl ( ùl , CMTPGETCONNLIST , & þ ) < 0) { 307 `³¼Ü ("Can't get connection†ist"); 308 `ex™ (1); 311 ià( þ . úum == 0) 314 ià( þ . úum != 1) { 315 `årštf ( ¡d”r , "You haveo specifiyhe device‡ddress.\n"); 316 `ex™ (1); 319 `baýy (& »q . bdaddr , & ci [0].bdaddr); 321 `¡r2ba ( ¬gv [1], & »q . bdaddr ); 323 ià( `ioùl ( ùl , CMTPCONNDEL , & »q ) < 0) { 324 `³¼Ü ("Can't„elease connection"); 325 `ex™ (1); 327 } } 329  $cmd_loÝback ( ùl , bdaddr_t * bdaddr ,  ¬gc , ** ¬gv ) 331  cm_cÚnd–_»q »q ; 332  sigaùiÚ § ; 333  pÞlfd p ; 334 sig£t_t sigs ; 335 bdaddr_t ¤c , d¡ ; 336  psm ; 337  dev_id , sk ; 338  addr [18]; 340 ià( ¬gc < 2) 343 `¡r2ba ( ¬gv [1], & d¡ ); 345 `ba2¡r ( bdaddr , addr ); 346 dev_id = `hci_devid ( addr ); 347 ià( dev_id < 0) { 348 dev_id = `hci_g‘_rou‹ (& d¡ ); 349 `hci_devba ( dev_id , & ¤c ); 351 `baýy (& ¤c , bdaddr ); 353 `ba2¡r (& d¡ , addr ); 354 `´štf ("CÚÃùšgØ% š†oÝback mode\n", addr ); 356 ià( ¬gc < 3) { 357 ià(! `g‘_psm (& ¤c , & d¡ , & psm )) 358 psm = 4099; 360 psm = `©oi ( ¬gv [2]); 362 sk = `do_cÚÃù ( ùl , dev_id , & ¤c , & d¡ , psm , (1 << CMTP_LOOPBACK )); 364 `´štf ("Press CTRL-C for hangup\n"); 366 `mem£t (& § , 0, (sa)); 367 § . §_æags = SA_NOCLDSTOP ; 368 § . §_hªdËr = SIG_IGN ; 369 `sigaùiÚ ( SIGCHLD , & § , NULL ); 370 `sigaùiÚ ( SIGPIPE , & § , NULL ); 372 § . §_hªdËr = sig_‹rm ; 373 `sigaùiÚ ( SIGTERM , & § , NULL ); 374 `sigaùiÚ ( SIGINT , & § , NULL ); 376 § . §_hªdËr = sig_hup ; 377 `sigaùiÚ ( SIGHUP , & § , NULL ); 379 `sigfžl£t (& sigs ); 380 `sigd–£t (& sigs , SIGCHLD ); 381 `sigd–£t (& sigs , SIGPIPE ); 382 `sigd–£t (& sigs , SIGTERM ); 383 `sigd–£t (& sigs , SIGINT ); 384 `sigd–£t (& sigs , SIGHUP ); 386 p . fd = sk ; 387 p . ev’ts = POLLERR | POLLHUP ; 389 ! __io_ÿnûËd ) { 390 p . »v’ts = 0; 391 ià( `µÞl (& p , 1, NULL , & sigs ) > 0) 395 `baýy (& »q . bdaddr , & d¡ ); 396 `ioùl ( ùl , CMTPCONNDEL , & »q ); 397 } } 400 * mcmd ; 401 * m®t ; 402 (* mfunc )( mùl , bdaddr_t * mbdaddr ,  m¬gc , ** m¬gv ); 403 * mÝt ; 404 * mdoc ; 405 } gcommªd [] = { 406 { "show", "li¡", cmd_show , 0, "Show„emote connections" }, 407 { "£¬ch", "sÿn", cmd_£¬ch , 0, "Search for‡„emote device" }, 408 { "cÚÃù", "ü—‹", cmd_ü—‹ , "", "Connect‡„emote device" }, 409 { "»Ëa£", "discÚÃù", cmd_»Ëa£ , "[bdaddr]", "Disconnecthe„emote device" }, 410 { "loÝback", "‹¡", cmd_loÝback , "", "Loopbackest of‡ device" }, 411 { NULL , NULL, NULL, 0, 0 } 414  $u§ge () 416  i ; 418 `´štf ("ciptool - Bluetooth Common ISDN Access Profile (CIP)\n\n"); 420 `´štf ("Usage:\n" 424 `´štf ("Options:\n" 429 `´štf ("Commands:\n"); 430  i = 0; commªd [i]. cmd ; i++) 431 `´štf ("\t%-8 %-10s\t%s\n", commªd [ i ]. cmd , 432 commªd [ i ]. Ýt ? command[i].opt : " ", 433 commªd [ i ]. doc ); 434 `´štf ("\n"); 435 } } 437  ÝtiÚ gmaš_ÝtiÚs [] = { 443  $maš ( ¬gc , * ¬gv []) 445 bdaddr_t bdaddr ; 446  i , Ýt , ùl ; 448 `baýy (& bdaddr , BDADDR_ANY ); 450 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+i:h", maš_ÝtiÚs , NULL )) != -1) { 451  Ýt ) { 453 ià(! `¡ºcmp ( Ýrg , "hci", 3)) 454 `hci_devba ( `©oi ( Ýrg + 3), & bdaddr ); 456 `¡r2ba ( Ýrg , & bdaddr ); 459 `u§ge (); 460 `ex™ (0); 462 `ex™ (0); 466 ¬gc -ð Ýtšd ; 467 ¬gv +ð Ýtšd ; 468 Ýtšd = 0; 470 ià( ¬gc < 1) { 471 `u§ge (); 475 ià(( ùl = `sock‘ ( AF_BLUETOOTH , SOCK_RAW , BTPROTO_CMTP )) < 0 ) { 476 `³¼Ü ("Can't open CMTP control socket"); 477 `ex™ (1); 480  i = 0; commªd [i]. cmd ; i++) { 481 ià( `¡ºcmp ( commªd [ i ]. cmd , ¬gv [0], 4è&& sŒncmp(commªd[i]. ®t ,‡rgv[0], 4)) 483 commªd [ i ]. `func ( ùl , & bdaddr , ¬gc , ¬gv ); 484 `þo£ ( ùl ); 485 `ex™ (0); 488 `u§ge (); 490 `þo£ ( ùl ); 493 } } @tools/cltest.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~<®loÿ.h > 33  ~<¡dlib.h > 34  ~<¡dboÞ.h > 35  ~ 36  ~ 37  ~ 39  ~ 40  ~ 41  ~ 42  ~ 44  ~"mÚ™Ü/mašloÝ.h " 46  boÞ $£nd_mes§ge (cÚ¡ bdaddr_t * ¤c , cÚ¡ bdaddr_ˆ* d¡ , 47 ušt16_t psm ) 49 cÚ¡  buf [] = { 0x42, 0x23 }; 50  sockaddr_l2 addr ; 51 ssize_t Ën ; 52  fd ; 54 fd = `sock‘ ( PF_BLUETOOTH , SOCK_DGRAM | SOCK_CLOEXEC , BTPROTO_L2CAP ); 55 ià( fd < 0) { 56 `³¼Ü ("Failedo createransmitter socket"); 57  çl£ ; 60 `mem£t (& addr , 0, (addr)); 61 addr . l2_çmžy = AF_BLUETOOTH ; 62 `baýy (& addr . l2_bdaddr , ¤c ); 64 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 65 `³¼Ü ("Failedo bindransmitter socket"); 66 `þo£ ( fd ); 67  çl£ ; 70 `mem£t (& addr , 0, (addr)); 71 addr . l2_çmžy = AF_BLUETOOTH ; 72 `baýy (& addr . l2_bdaddr , d¡ ); 73 addr . l2_psm = `htobs ( psm ); 75 ià( `cÚÃù ( fd , ( sockaddr *è& addr , (addr)) < 0) { 76 `³¼Ü ("Failedo connectransmitter socket"); 77 `þo£ ( fd ); 78  çl£ ; 81 Ën = `£nd ( fd , buf , (buf), 0); 82 ià( Ën < 0) { 83 `³¼Ü ("Failedo send message"); 84 `þo£ ( fd ); 85  çl£ ; 88  Œue ; 89 } } 91  $»ûiv”_ÿÎback ( fd , ušt32_t ev’ts , * u£r_d©a ) 93  buf [512]; 94  sockaddr_l2 addr ; 95 sockËn_t add¾’ = ( addr ); 96  ¡r [18]; 97 ssize_t Ën , i ; 99 ià( ev’ts & ( EPOLLERR | EPOLLHUP )) { 100 `þo£ ( fd ); 101 `mašloÝ_»move_fd ( fd ); 105 Ën = `»cväom ( fd , buf , (buf), 0, 106 ( sockaddr *è& addr , & add¾’ ); 107 ià( Ën < 0) { 108 `³¼Ü ("Failedo„eceive data"); 112 ià( add¾’ > 0) { 113 `ba2¡r (& addr . l2_bdaddr , ¡r ); 114 `´štf ("RX Add»ss: % PSM: %d CID: %d\n", ¡r , 115 `btohs ( addr . l2_psm ), btohs×ddr. l2_cid )); 118 `´štf ("RX Data:"); 119  i = 0; i < Ën ; i++) 120 `´štf (" 0x%02x", buf [ i ]); 121 `´štf ("\n"); 122 } } 124  boÞ $ü—‹_»ûiv” (cÚ¡ bdaddr_t * bdaddr , ušt16_t psm ) 126  sockaddr_l2 addr ; 127  fd ; 129 fd = `sock‘ ( PF_BLUETOOTH , SOCK_DGRAM | SOCK_CLOEXEC , BTPROTO_L2CAP ); 130 ià( fd < 0) { 131 `³¼Ü ("Failedo create„eceiver socket"); 132  çl£ ; 135 `mem£t (& addr , 0, (addr)); 136 addr . l2_çmžy = AF_BLUETOOTH ; 137 `baýy (& addr . l2_bdaddr , bdaddr ); 138 addr . l2_psm = `htobs ( psm ); 140 ià( `bšd ( fd , ( sockaddr *è& addr , (addr)) < 0) { 141 `³¼Ü ("Failedo bind„eceiver socket"); 142 `þo£ ( fd ); 143  çl£ ; 146 `mašloÝ_add_fd ( fd , EPOLLIN , »ûiv”_ÿÎback , NULL , NULL); 148  Œue ; 149 } } 151  boÞ $aùiv©e_cÚŒÞËr ( fd ,  hci_dev_šfo * di ) 153 ià(! `hci_‹¡_b™ ( HCI_UP , & di -> æags )) { 154  addr [18]; 156 `ba2¡r (& di -> bdaddr , addr ); 157 `´štf ("Aùiv©šg cÚŒÞ˸%s\n", addr ); 159 ià( `ioùl ( fd , HCIDEVUP , di -> dev_id ) < 0) { 160 ià( ”ºo !ð EALREADY ) { 161 `³¼Ü ("Failedo bring up HCI device"); 162  çl£ ; 166  Œue ; 167 } } 169  boÞ $’abË_cÚÃùiÚs ( fd ,  hci_dev_šfo * di ) 171 ià(! `hci_‹¡_b™ ( HCI_PSCAN , & di -> æags )) { 172  hci_dev_»q dr ; 173  addr [18]; 175 `ba2¡r (& di -> bdaddr , addr ); 176 `´štf ("EÇblšg cÚÃùiÚ Ú %s\n", addr ); 178 dr . dev_id = di ->dev_id; 179 dr . dev_Ýt = SCAN_PAGE ; 181 ià( `ioùl ( fd , HCISETSCAN , (è& dr ) < 0) { 182 `³¼Ü ("Failedoƒnable connections"); 183  çl£ ; 186  Œue ; 187 } } 189  bdaddr_t gbdaddr_¤c ; 190  bdaddr_t gbdaddr_d¡ ; 192  boÞ $fšd_cÚŒÞËrs () 194  hci_dev_li¡_»q * dl ; 195  hci_dev_»q * dr ; 196 boÞ »suÉ ; 197  fd , i ; 199 fd = `sock‘ ( AF_BLUETOOTH , SOCK_RAW , BTPROTO_HCI ); 200 ià( fd < 0) { 201 `³¼Ü ("Failedo open„aw HCI socket"); 202  çl£ ; 205 dl = `m®loc ( HCI_MAX_DEV * ( hci_dev_»q è+ ( ušt16_t )); 206 ià(! dl ) { 207 `³¼Ü ("Failed‡llocate HCI device„equest memory"); 208 `þo£ ( fd ); 209  çl£ ; 212 dl -> dev_num = HCI_MAX_DEV ; 213 dr = dl -> dev_»q ; 215 ià( `ioùl ( fd , HCIGETDEVLIST , (*è dl ) < 0) { 216 `³¼Ü ("Failedo get HCI device†ist"); 217 »suÉ = çl£ ; 218  dÚe ; 221 »suÉ = Œue ; 223  i = 0; i< dl -> dev_num && »suÉ ; i++) { 224  hci_dev_šfo di ; 226 di . dev_id = ( dr + i )->dev_id; 228 ià( `ioùl ( fd , HCIGETDEVINFO , (*è& di ) < 0) 231 ià((( di . ty³ & 0x30è>> 4è!ð HCI_BREDR ) 234 ià(! `bacmp (& bdaddr_¤c , BDADDR_ANY )) { 235 `baýy (& bdaddr_¤c , & di . bdaddr ); 236 »suÉ = `aùiv©e_cÚŒÞËr ( fd , & di ); 237 } ià(! `bacmp (& bdaddr_d¡ , BDADDR_ANY )) { 238 `baýy (& bdaddr_d¡ , & di . bdaddr ); 239 »suÉ = `aùiv©e_cÚŒÞËr ( fd , & di ); 240 ià( »suÉ ) 241 »suÉ = `’abË_cÚÃùiÚs ( fd , & di ); 245 dÚe : 246 `ä“ ( dl ); 247 `þo£ ( fd ); 248  »suÉ ; 249 } } 251  $maš ( ¬gc ,* ¬gv []) 253  addr_¤c [18], addr_d¡ [18]; 255 `baýy (& bdaddr_¤c , BDADDR_ANY ); 256 `baýy (& bdaddr_d¡ , BDADDR_ANY ); 258 ià(! `fšd_cÚŒÞËrs ()) 259  EXIT_FAILURE ; 261 ià(! `bacmp (& bdaddr_¤c , BDADDR_ANY ) || 262 ! `bacmp (& bdaddr_d¡ , BDADDR_ANY )) { 263 `årštf ( ¡d”r , "Two controllers‡re„equired\n"); 264  EXIT_FAILURE ; 267 `ba2¡r (& bdaddr_¤c , addr_¤c ); 268 `ba2¡r (& bdaddr_d¡ , addr_d¡ ); 270 `´štf ("% -> %s\n", addr_¤c , addr_d¡ ); 272 `mašloÝ_š™ (); 274 `ü—‹_»ûiv” (& bdaddr_d¡ , 0x0021); 275 `£nd_mes§ge (& bdaddr_¤c , & bdaddr_d¡ , 0x0021); 277  `mašloÝ_run (); 278 } } @tools/csr.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 34  ~ 35  ~ 36  ~ 38  ~ 39  ~ 40  ~ 42  ~"c¤.h " 44  sp¤_d©a { 45 ušt16_t mpskey ; 46 ušt8_t * mv®ue ; 47 ušt8_t msize ; 48  p¤_d©a * mÃxt ; 51  p¤_d©a * gh—d = NULL , * gž = NULL; 54 ušt16_t mid ; 55 * m¡r ; 56 } gc¤_m­ [] = { 455 * $c¤_bužddeáo¡r ( ušt16_t def ) 457  def ) { 559 } } 561 * $c¤_buždidto¡r ( ušt16_t id ) 563  ¡r [12]; 564  i ; 566  i = 0; c¤_m­ [i]. id ; i++) 567 ià( c¤_m­ [ i ]. id == id) 568  c¤_m­ [ i ]. ¡r ; 570 `¢´štf ( ¡r , 11, "Bužd %d", id ); 571  ¡r ; 572 } } 574 * $c¤_chv”to¡r ( ušt16_t v” , ušt16_ˆ »v ) 576  v” ) { 580  »v ) { 588  »v ) { 599  »v ) { 616 } } 618 * $c¤_pskeyto¡r ( ušt16_t pskey ) 620  pskey ) { 621  CSR_PSKEY_BDADDR : 623  CSR_PSKEY_COUNTRYCODE : 625  CSR_PSKEY_CLASSOFDEVICE : 627  CSR_PSKEY_DEVICE_DRIFT : 629  CSR_PSKEY_DEVICE_JITTER : 631  CSR_PSKEY_MAX_ACLS : 633  CSR_PSKEY_MAX_SCOS : 635  CSR_PSKEY_MAX_REMOTE_MASTERS : 637  CSR_PSKEY_ENABLE_MASTERY_WITH_SLAVERY : 639  CSR_PSKEY_H_HC_FC_MAX_ACL_PKT_LEN : 641  CSR_PSKEY_H_HC_FC_MAX_SCO_PKT_LEN : 643  CSR_PSKEY_H_HC_FC_MAX_ACL_PKTS : 645  CSR_PSKEY_H_HC_FC_MAX_SCO_PKTS : 647  CSR_PSKEY_LC_FC_BUFFER_LOW_WATER_MARK : 649  CSR_PSKEY_LC_MAX_TX_POWER : 651  CSR_PSKEY_TX_GAIN_RAMP : 653  CSR_PSKEY_LC_POWER_TABLE : 655  CSR_PSKEY_LC_PEER_POWER_PERIOD : 657  CSR_PSKEY_LC_FC_POOLS_LOW_WATER_MARK : 659  CSR_PSKEY_LC_DEFAULT_TX_POWER : 661  CSR_PSKEY_LC_RSSI_GOLDEN_RANGE : 663  CSR_PSKEY_LC_COMBO_DISABLE_PIO_MASK : 665  CSR_PSKEY_LC_COMBO_PRIORITY_PIO_MASK : 667  CSR_PSKEY_LC_COMBO_DOT11_CHANNEL_PIO_BASE : 669  CSR_PSKEY_LC_COMBO_DOT11_BLOCK_CHANNELS : 671  CSR_PSKEY_LC_MAX_TX_POWER_NO_RSSI : 673  CSR_PSKEY_LC_CONNECTION_RX_WINDOW : 675  CSR_PSKEY_LC_COMBO_DOT11_TX_PROTECTION_MODE : 677  CSR_PSKEY_LC_ENHANCED_POWER_TABLE : 679  CSR_PSKEY_LC_WIDEBAND_RSSI_CONFIG : 681  CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_LEAD : 683  CSR_PSKEY_BT_CLOCK_INIT : 685  CSR_PSKEY_TX_MR_MOD_DELAY : 687  CSR_PSKEY_RX_MR_SYNC_TIMING : 689  CSR_PSKEY_RX_MR_SYNC_CONFIG : 691  CSR_PSKEY_LC_LOST_SYNC_SLOTS : 693  CSR_PSKEY_RX_MR_SAMP_CONFIG : 695  CSR_PSKEY_AGC_HYST_LEVELS : 697  CSR_PSKEY_RX_LEVEL_LOW_SIGNAL : 699  CSR_PSKEY_AGC_IQ_LVL_VALUES : 701  CSR_PSKEY_MR_FTRIM_OFFSET_12DB : 703  CSR_PSKEY_MR_FTRIM_OFFSET_6DB : 705  CSR_PSKEY_NO_CAL_ON_BOOT : 707  CSR_PSKEY_RSSI_HI_TARGET : 709  CSR_PSKEY_PREFERRED_MIN_ATTENUATION : 711  CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_OVERRIDE : 713  CSR_PSKEY_LC_MULTISLOT_HOLDOFF : 715  CSR_PSKEY_FREE_KEY_PIGEON_HOLE : 717  CSR_PSKEY_LINK_KEY_BD_ADDR0 : 719  CSR_PSKEY_LINK_KEY_BD_ADDR1 : 721  CSR_PSKEY_LINK_KEY_BD_ADDR2 : 723  CSR_PSKEY_LINK_KEY_BD_ADDR3 : 725  CSR_PSKEY_LINK_KEY_BD_ADDR4 : 727  CSR_PSKEY_LINK_KEY_BD_ADDR5 : 729  CSR_PSKEY_LINK_KEY_BD_ADDR6 : 731  CSR_PSKEY_LINK_KEY_BD_ADDR7 : 733  CSR_PSKEY_LINK_KEY_BD_ADDR8 : 735  CSR_PSKEY_LINK_KEY_BD_ADDR9 : 737  CSR_PSKEY_LINK_KEY_BD_ADDR10 : 739  CSR_PSKEY_LINK_KEY_BD_ADDR11 : 741  CSR_PSKEY_LINK_KEY_BD_ADDR12 : 743  CSR_PSKEY_LINK_KEY_BD_ADDR13 : 745  CSR_PSKEY_LINK_KEY_BD_ADDR14 : 747  CSR_PSKEY_LINK_KEY_BD_ADDR15 : 749  CSR_PSKEY_ENC_KEY_LMIN : 751  CSR_PSKEY_ENC_KEY_LMAX : 753  CSR_PSKEY_LOCAL_SUPPORTED_FEATURES : 755  CSR_PSKEY_LM_USE_UNIT_KEY : 757  CSR_PSKEY_HCI_NOP_DISABLE : 759  CSR_PSKEY_LM_MAX_EVENT_FILTERS : 761  CSR_PSKEY_LM_USE_ENC_MODE_BROADCAST : 763  CSR_PSKEY_LM_TEST_SEND_ACCEPTED_TWICE : 765  CSR_PSKEY_LM_MAX_PAGE_HOLD_TIME : 767  CSR_PSKEY_AFH_ADAPTATION_RESPONSE_TIME : 769  CSR_PSKEY_AFH_OPTIONS : 771  CSR_PSKEY_AFH_RSSI_RUN_PERIOD : 773  CSR_PSKEY_AFH_REENABLE_CHANNEL_TIME : 775  CSR_PSKEY_NO_DROP_ON_ACR_MS_FAIL : 777  CSR_PSKEY_MAX_PRIVATE_KEYS : 779  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR0 : 781  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR1 : 783  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR2 : 785  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR3 : 787  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR4 : 789  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR5 : 791  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR6 : 793  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR7 : 795  CSR_PSKEY_LOCAL_SUPPORTED_COMMANDS : 797  CSR_PSKEY_LM_MAX_ABSENCE_INDEX : 799  CSR_PSKEY_DEVICE_NAME : 801  CSR_PSKEY_AFH_RSSI_THRESHOLD : 803  CSR_PSKEY_LM_CASUAL_SCAN_INTERVAL : 805  CSR_PSKEY_AFH_MIN_MAP_CHANGE : 807  CSR_PSKEY_AFH_RSSI_LP_RUN_PERIOD : 809  CSR_PSKEY_HCI_LMP_LOCAL_VERSION : 811  CSR_PSKEY_LMP_REMOTE_VERSION : 813  CSR_PSKEY_HOLD_ERROR_MESSAGE_NUMBER : 815  CSR_PSKEY_DFU_ATTRIBUTES : 817  CSR_PSKEY_DFU_DETACH_TO : 819  CSR_PSKEY_DFU_TRANSFER_SIZE : 821  CSR_PSKEY_DFU_ENABLE : 823  CSR_PSKEY_DFU_LIN_REG_ENABLE : 825  CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_MSB : 827  CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_LSB : 829  CSR_PSKEY_DFUENC_VMAPP_PK_M_DASH : 831  CSR_PSKEY_DFUENC_VMAPP_PK_R2N_MSB : 833  CSR_PSKEY_DFUENC_VMAPP_PK_R2N_LSB : 835  CSR_PSKEY_BCSP_LM_PS_BLOCK : 837  CSR_PSKEY_HOSTIO_FC_PS_BLOCK : 839  CSR_PSKEY_HOSTIO_PROTOCOL_INFO0 : 841  CSR_PSKEY_HOSTIO_PROTOCOL_INFO1 : 843  CSR_PSKEY_HOSTIO_PROTOCOL_INFO2 : 845  CSR_PSKEY_HOSTIO_PROTOCOL_INFO3 : 847  CSR_PSKEY_HOSTIO_PROTOCOL_INFO4 : 849  CSR_PSKEY_HOSTIO_PROTOCOL_INFO5 : 851  CSR_PSKEY_HOSTIO_PROTOCOL_INFO6 : 853  CSR_PSKEY_HOSTIO_PROTOCOL_INFO7 : 855  CSR_PSKEY_HOSTIO_PROTOCOL_INFO8 : 857  CSR_PSKEY_HOSTIO_PROTOCOL_INFO9 : 859  CSR_PSKEY_HOSTIO_PROTOCOL_INFO10 : 861  CSR_PSKEY_HOSTIO_PROTOCOL_INFO11 : 863  CSR_PSKEY_HOSTIO_PROTOCOL_INFO12 : 865  CSR_PSKEY_HOSTIO_PROTOCOL_INFO13 : 867  CSR_PSKEY_HOSTIO_PROTOCOL_INFO14 : 869  CSR_PSKEY_HOSTIO_PROTOCOL_INFO15 : 871  CSR_PSKEY_HOSTIO_UART_RESET_TIMEOUT : 873  CSR_PSKEY_HOSTIO_USE_HCI_EXTN : 875  CSR_PSKEY_HOSTIO_USE_HCI_EXTN_CCFC : 877  CSR_PSKEY_HOSTIO_HCI_EXTN_PAYLOAD_SIZE : 879  CSR_PSKEY_BCSP_LM_CNF_CNT_LIMIT : 881  CSR_PSKEY_HOSTIO_MAP_SCO_PCM : 883  CSR_PSKEY_HOSTIO_AWKWARD_PCM_SYNC : 885  CSR_PSKEY_HOSTIO_BREAK_POLL_PERIOD : 887  CSR_PSKEY_HOSTIO_MIN_UART_HCI_SCO_SIZE : 889  CSR_PSKEY_HOSTIO_MAP_SCO_CODEC : 891  CSR_PSKEY_PCM_CVSD_TX_HI_FREQ_BOOST : 893  CSR_PSKEY_PCM_CVSD_RX_HI_FREQ_BOOST : 895  CSR_PSKEY_PCM_CONFIG32 : 897  CSR_PSKEY_USE_OLD_BCSP_LE : 899  CSR_PSKEY_PCM_CVSD_USE_NEW_FILTER : 901  CSR_PSKEY_PCM_FORMAT : 903  CSR_PSKEY_CODEC_OUT_GAIN : 905  CSR_PSKEY_CODEC_IN_GAIN : 907  CSR_PSKEY_CODEC_PIO : 909  CSR_PSKEY_PCM_LOW_JITTER_CONFIG : 911  CSR_PSKEY_HOSTIO_SCO_PCM_THRESHOLDS : 913  CSR_PSKEY_HOSTIO_SCO_HCI_THRESHOLDS : 915  CSR_PSKEY_HOSTIO_MAP_SCO_PCM_SLOT : 917  CSR_PSKEY_UART_BAUDRATE : 919  CSR_PSKEY_UART_CONFIG_BCSP : 921  CSR_PSKEY_UART_CONFIG_H4 : 923  CSR_PSKEY_UART_CONFIG_H5 : 925  CSR_PSKEY_UART_CONFIG_USR : 927  CSR_PSKEY_UART_TX_CRCS : 929  CSR_PSKEY_UART_ACK_TIMEOUT : 931  CSR_PSKEY_UART_TX_MAX_ATTEMPTS : 933  CSR_PSKEY_UART_TX_WINDOW_SIZE : 935  CSR_PSKEY_UART_HOST_WAKE : 937  CSR_PSKEY_HOSTIO_THROTTLE_TIMEOUT : 939  CSR_PSKEY_PCM_ALWAYS_ENABLE : 941  CSR_PSKEY_UART_HOST_WAKE_SIGNAL : 943  CSR_PSKEY_UART_CONFIG_H4DS : 945  CSR_PSKEY_H4DS_WAKE_DURATION : 947  CSR_PSKEY_H4DS_MAXWU : 949  CSR_PSKEY_H4DS_LE_TIMER_PERIOD : 951  CSR_PSKEY_H4DS_TWU_TIMER_PERIOD : 953  CSR_PSKEY_H4DS_UART_IDLE_TIMER_PERIOD : 955  CSR_PSKEY_ANA_FTRIM : 957  CSR_PSKEY_WD_TIMEOUT : 959  CSR_PSKEY_WD_PERIOD : 961  CSR_PSKEY_HOST_INTERFACE : 963  CSR_PSKEY_HQ_HOST_TIMEOUT : 965  CSR_PSKEY_HQ_ACTIVE : 967  CSR_PSKEY_BCCMD_SECURITY_ACTIVE : 969  CSR_PSKEY_ANA_FREQ : 971  CSR_PSKEY_PIO_PROTECT_MASK : 973  CSR_PSKEY_PMALLOC_SIZES : 975  CSR_PSKEY_UART_BAUD_RATE : 977  CSR_PSKEY_UART_CONFIG : 979  CSR_PSKEY_STUB : 981  CSR_PSKEY_TXRX_PIO_CONTROL : 983  CSR_PSKEY_ANA_RX_LEVEL : 985  CSR_PSKEY_ANA_RX_FTRIM : 987  CSR_PSKEY_PSBC_DATA_VERSION : 989  CSR_PSKEY_PCM0_ATTENUATION : 991  CSR_PSKEY_LO_LVL_MAX : 993  CSR_PSKEY_LO_ADC_AMPL_MIN : 995  CSR_PSKEY_LO_ADC_AMPL_MAX : 997  CSR_PSKEY_IQ_TRIM_CHANNEL : 999  CSR_PSKEY_IQ_TRIM_GAIN : 1001  CSR_PSKEY_IQ_TRIM_ENABLE : 1003  CSR_PSKEY_TX_OFFSET_HALF_MHZ : 1005  CSR_PSKEY_GBL_MISC_ENABLES : 1007  CSR_PSKEY_UART_SLEEP_TIMEOUT : 1009  CSR_PSKEY_DEEP_SLEEP_STATE : 1011  CSR_PSKEY_IQ_ENABLE_PHASE_TRIM : 1013  CSR_PSKEY_HCI_HANDLE_FREEZE_PERIOD : 1015  CSR_PSKEY_MAX_FROZEN_HCI_HANDLES : 1017  CSR_PSKEY_PAGETABLE_DESTRUCTION_DELAY : 1019  CSR_PSKEY_IQ_TRIM_PIO_SETTINGS : 1021  CSR_PSKEY_USE_EXTERNAL_CLOCK : 1023  CSR_PSKEY_DEEP_SLEEP_WAKE_CTS : 1025  CSR_PSKEY_FC_HC2H_FLUSH_DELAY : 1027  CSR_PSKEY_RX_HIGHSIDE : 1029  CSR_PSKEY_TX_PRE_LVL : 1031  CSR_PSKEY_RX_SINGLE_ENDED : 1033  CSR_PSKEY_TX_FILTER_CONFIG : 1035  CSR_PSKEY_CLOCK_REQUEST_ENABLE : 1037  CSR_PSKEY_RX_MIN_ATTEN : 1039  CSR_PSKEY_XTAL_TARGET_AMPLITUDE : 1041  CSR_PSKEY_PCM_MIN_CPU_CLOCK : 1043  CSR_PSKEY_HOST_INTERFACE_PIO_USB : 1045  CSR_PSKEY_CPU_IDLE_MODE : 1047  CSR_PSKEY_DEEP_SLEEP_CLEAR_RTS : 1049  CSR_PSKEY_RF_RESONANCE_TRIM : 1051  CSR_PSKEY_DEEP_SLEEP_PIO_WAKE : 1053  CSR_PSKEY_DRAIN_BORE_TIMERS : 1055  CSR_PSKEY_DRAIN_TX_POWER_BASE : 1057  CSR_PSKEY_MODULE_ID : 1059  CSR_PSKEY_MODULE_DESIGN : 1061  CSR_PSKEY_MODULE_SECURITY_CODE : 1063  CSR_PSKEY_VM_DISABLE : 1065  CSR_PSKEY_MOD_MANUF0 : 1067  CSR_PSKEY_MOD_MANUF1 : 1069  CSR_PSKEY_MOD_MANUF2 : 1071  CSR_PSKEY_MOD_MANUF3 : 1073  CSR_PSKEY_MOD_MANUF4 : 1075  CSR_PSKEY_MOD_MANUF5 : 1077  CSR_PSKEY_MOD_MANUF6 : 1079  CSR_PSKEY_MOD_MANUF7 : 1081  CSR_PSKEY_MOD_MANUF8 : 1083  CSR_PSKEY_MOD_MANUF9 : 1085  CSR_PSKEY_DUT_VM_DISABLE : 1087  CSR_PSKEY_USR0 : 1089  CSR_PSKEY_USR1 : 1091  CSR_PSKEY_USR2 : 1093  CSR_PSKEY_USR3 : 1095  CSR_PSKEY_USR4 : 1097  CSR_PSKEY_USR5 : 1099  CSR_PSKEY_USR6 : 1101  CSR_PSKEY_USR7 : 1103  CSR_PSKEY_USR8 : 1105  CSR_PSKEY_USR9 : 1107  CSR_PSKEY_USR10 : 1109  CSR_PSKEY_USR11 : 1111  CSR_PSKEY_USR12 : 1113  CSR_PSKEY_USR13 : 1115  CSR_PSKEY_USR14 : 1117  CSR_PSKEY_USR15 : 1119  CSR_PSKEY_USR16 : 1121  CSR_PSKEY_USR17 : 1123  CSR_PSKEY_USR18 : 1125  CSR_PSKEY_USR19 : 1127  CSR_PSKEY_USR20 : 1129  CSR_PSKEY_USR21 : 1131  CSR_PSKEY_USR22 : 1133  CSR_PSKEY_USR23 : 1135  CSR_PSKEY_USR24 : 1137  CSR_PSKEY_USR25 : 1139  CSR_PSKEY_USR26 : 1141  CSR_PSKEY_USR27 : 1143  CSR_PSKEY_USR28 : 1145  CSR_PSKEY_USR29 : 1147  CSR_PSKEY_USR30 : 1149  CSR_PSKEY_USR31 : 1151  CSR_PSKEY_USR32 : 1153  CSR_PSKEY_USR33 : 1155  CSR_PSKEY_USR34 : 1157  CSR_PSKEY_USR35 : 1159  CSR_PSKEY_USR36 : 1161  CSR_PSKEY_USR37 : 1163  CSR_PSKEY_USR38 : 1165  CSR_PSKEY_USR39 : 1167  CSR_PSKEY_USR40 : 1169  CSR_PSKEY_USR41 : 1171  CSR_PSKEY_USR42 : 1173  CSR_PSKEY_USR43 : 1175  CSR_PSKEY_USR44 : 1177  CSR_PSKEY_USR45 : 1179  CSR_PSKEY_USR46 : 1181  CSR_PSKEY_USR47 : 1183  CSR_PSKEY_USR48 : 1185  CSR_PSKEY_USR49 : 1187  CSR_PSKEY_USB_VERSION : 1189  CSR_PSKEY_USB_DEVICE_CLASS_CODES : 1191  CSR_PSKEY_USB_VENDOR_ID : 1193  CSR_PSKEY_USB_PRODUCT_ID : 1195  CSR_PSKEY_USB_MANUF_STRING : 1197  CSR_PSKEY_USB_PRODUCT_STRING : 1199  CSR_PSKEY_USB_SERIAL_NUMBER_STRING : 1201  CSR_PSKEY_USB_CONFIG_STRING : 1203  CSR_PSKEY_USB_ATTRIBUTES : 1205  CSR_PSKEY_USB_MAX_POWER : 1207  CSR_PSKEY_USB_BT_IF_CLASS_CODES : 1209  CSR_PSKEY_USB_LANGID : 1211  CSR_PSKEY_USB_DFU_CLASS_CODES : 1213  CSR_PSKEY_USB_DFU_PRODUCT_ID : 1215  CSR_PSKEY_USB_PIO_DETACH : 1217  CSR_PSKEY_USB_PIO_WAKEUP : 1219  CSR_PSKEY_USB_PIO_PULLUP : 1221  CSR_PSKEY_USB_PIO_VBUS : 1223  CSR_PSKEY_USB_PIO_WAKE_TIMEOUT : 1225  CSR_PSKEY_USB_PIO_RESUME : 1227  CSR_PSKEY_USB_BT_SCO_IF_CLASS_CODES : 1229  CSR_PSKEY_USB_SUSPEND_PIO_LEVEL : 1231  CSR_PSKEY_USB_SUSPEND_PIO_DIR : 1233  CSR_PSKEY_USB_SUSPEND_PIO_MASK : 1235  CSR_PSKEY_USB_ENDPOINT_0_MAX_PACKET_SIZE : 1237  CSR_PSKEY_USB_CONFIG : 1239  CSR_PSKEY_RADIOTEST_ATTEN_INIT : 1241  CSR_PSKEY_RADIOTEST_FIRST_TRIM_TIME : 1243  CSR_PSKEY_RADIOTEST_SUBSEQUENT_TRIM_TIME : 1245  CSR_PSKEY_RADIOTEST_LO_LVL_TRIM_ENABLE : 1247  CSR_PSKEY_RADIOTEST_DISABLE_MODULATION : 1249  CSR_PSKEY_RFCOMM_FCON_THRESHOLD : 1251  CSR_PSKEY_RFCOMM_FCOFF_THRESHOLD : 1253  CSR_PSKEY_IPV6_STATIC_ADDR : 1255  CSR_PSKEY_IPV4_STATIC_ADDR : 1257  CSR_PSKEY_IPV6_STATIC_PREFIX_LEN : 1259  CSR_PSKEY_IPV6_STATIC_ROUTER_ADDR : 1261  CSR_PSKEY_IPV4_STATIC_SUBNET_MASK : 1263  CSR_PSKEY_IPV4_STATIC_ROUTER_ADDR : 1265  CSR_PSKEY_MDNS_NAME : 1267  CSR_PSKEY_FIXED_PIN : 1269  CSR_PSKEY_MDNS_PORT : 1271  CSR_PSKEY_MDNS_TTL : 1273  CSR_PSKEY_MDNS_IPV4_ADDR : 1275  CSR_PSKEY_ARP_CACHE_TIMEOUT : 1277  CSR_PSKEY_HFP_POWER_TABLE : 1279  CSR_PSKEY_DRAIN_BORE_TIMER_COUNTERS : 1281  CSR_PSKEY_DRAIN_BORE_COUNTERS : 1283  CSR_PSKEY_LOOP_FILTER_TRIM : 1285  CSR_PSKEY_DRAIN_BORE_CURRENT_PEAK : 1287  CSR_PSKEY_VM_E2_CACHE_LIMIT : 1289  CSR_PSKEY_FORCE_16MHZ_REF_PIO : 1291  CSR_PSKEY_CDMA_LO_REF_LIMITS : 1293  CSR_PSKEY_CDMA_LO_ERROR_LIMITS : 1295  CSR_PSKEY_CLOCK_STARTUP_DELAY : 1297  CSR_PSKEY_DEEP_SLEEP_CORRECTION_FACTOR : 1299  CSR_PSKEY_TEMPERATURE_CALIBRATION : 1301  CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA : 1303  CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL : 1305  CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB : 1307  CSR_PSKEY_TEMPERATURE_VS_DELTA_ANA_FTRIM : 1309  CSR_PSKEY_TEST_DELTA_OFFSET : 1311  CSR_PSKEY_RX_DYNAMIC_LVL_OFFSET : 1313  CSR_PSKEY_TEST_FORCE_OFFSET : 1315  CSR_PSKEY_RF_TRAP_BAD_DIVISION_RATIOS : 1317  CSR_PSKEY_RADIOTEST_CDMA_LO_REF_LIMITS : 1319  CSR_PSKEY_INITIAL_BOOTMODE : 1321  CSR_PSKEY_ONCHIP_HCI_CLIENT : 1323  CSR_PSKEY_RX_ATTEN_BACKOFF : 1325  CSR_PSKEY_RX_ATTEN_UPDATE_RATE : 1327  CSR_PSKEY_SYNTH_TXRX_THRESHOLDS : 1329  CSR_PSKEY_MIN_WAIT_STATES : 1331  CSR_PSKEY_RSSI_CORRECTION : 1333  CSR_PSKEY_SCHED_THROTTLE_TIMEOUT : 1335  CSR_PSKEY_DEEP_SLEEP_USE_EXTERNAL_CLOCK : 1337  CSR_PSKEY_TRIM_RADIO_FILTERS : 1339  CSR_PSKEY_TRANSMIT_OFFSET : 1341  CSR_PSKEY_USB_VM_CONTROL : 1343  CSR_PSKEY_MR_ANA_RX_FTRIM : 1345  CSR_PSKEY_I2C_CONFIG : 1347  CSR_PSKEY_IQ_LVL_RX : 1349  CSR_PSKEY_MR_TX_FILTER_CONFIG : 1351  CSR_PSKEY_MR_TX_CONFIG2 : 1353  CSR_PSKEY_USB_DONT_RESET_BOOTMODE_ON_HOST_RESET : 1355  CSR_PSKEY_LC_USE_THROTTLING : 1357  CSR_PSKEY_CHARGER_TRIM : 1359  CSR_PSKEY_CLOCK_REQUEST_FEATURES : 1361  CSR_PSKEY_TRANSMIT_OFFSET_CLASS1 : 1363  CSR_PSKEY_TX_AVOID_PA_CLASS1_PIO : 1365  CSR_PSKEY_MR_PIO_CONFIG : 1367  CSR_PSKEY_UART_CONFIG2 : 1369  CSR_PSKEY_CLASS1_IQ_LVL : 1371  CSR_PSKEY_CLASS1_TX_CONFIG2 : 1373  CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA_CLASS1 : 1375  CSR_PSKEY_TEMPERATURE_VS_DELTA_EXTERNAL_PA_CLASS1 : 1377  CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL_MR : 1379  CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_HEADER : 1381  CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_PAYLOAD : 1383  CSR_PSKEY_RX_MR_EQ_TAPS : 1385  CSR_PSKEY_TX_PRE_LVL_CLASS1 : 1387  CSR_PSKEY_ANALOGUE_ATTENUATOR : 1389  CSR_PSKEY_MR_RX_FILTER_TRIM : 1391  CSR_PSKEY_MR_RX_FILTER_RESPONSE : 1393  CSR_PSKEY_PIO_WAKEUP_STATE : 1395  CSR_PSKEY_MR_TX_IF_ATTEN_OFF_TEMP : 1397  CSR_PSKEY_LO_DIV_LATCH_BYPASS : 1399  CSR_PSKEY_LO_VCO_STANDBY : 1401  CSR_PSKEY_SLOW_CLOCK_FILTER_SHIFT : 1403  CSR_PSKEY_SLOW_CLOCK_FILTER_DIVIDER : 1405  CSR_PSKEY_USB_ATTRIBUTES_POWER : 1407  CSR_PSKEY_USB_ATTRIBUTES_WAKEUP : 1409  CSR_PSKEY_DFU_ATTRIBUTES_MANIFESTATION_TOLERANT : 1411  CSR_PSKEY_DFU_ATTRIBUTES_CAN_UPLOAD : 1413  CSR_PSKEY_DFU_ATTRIBUTES_CAN_DOWNLOAD : 1415  CSR_PSKEY_UART_CONFIG_STOP_BITS : 1417  CSR_PSKEY_UART_CONFIG_PARITY_BIT : 1419  CSR_PSKEY_UART_CONFIG_FLOW_CTRL_EN : 1421  CSR_PSKEY_UART_CONFIG_RTS_AUTO_EN : 1423  CSR_PSKEY_UART_CONFIG_RTS : 1425  CSR_PSKEY_UART_CONFIG_TX_ZERO_EN : 1427  CSR_PSKEY_UART_CONFIG_NON_BCSP_EN : 1429  CSR_PSKEY_UART_CONFIG_RX_RATE_DELAY : 1431  CSR_PSKEY_UART_SEQ_TIMEOUT : 1433  CSR_PSKEY_UART_SEQ_RETRIES : 1435  CSR_PSKEY_UART_SEQ_WINSIZE : 1437  CSR_PSKEY_UART_USE_CRC_ON_TX : 1439  CSR_PSKEY_UART_HOST_INITIAL_STATE : 1441  CSR_PSKEY_UART_HOST_ATTENTION_SPAN : 1443  CSR_PSKEY_UART_HOST_WAKEUP_TIME : 1445  CSR_PSKEY_UART_HOST_WAKEUP_WAIT : 1447  CSR_PSKEY_BCSP_LM_MODE : 1449  CSR_PSKEY_BCSP_LM_SYNC_RETRIES : 1451  CSR_PSKEY_BCSP_LM_TSHY : 1453  CSR_PSKEY_UART_DFU_CONFIG_STOP_BITS : 1455  CSR_PSKEY_UART_DFU_CONFIG_PARITY_BIT : 1457  CSR_PSKEY_UART_DFU_CONFIG_FLOW_CTRL_EN : 1459  CSR_PSKEY_UART_DFU_CONFIG_RTS_AUTO_EN : 1461  CSR_PSKEY_UART_DFU_CONFIG_RTS : 1463  CSR_PSKEY_UART_DFU_CONFIG_TX_ZERO_EN : 1465  CSR_PSKEY_UART_DFU_CONFIG_NON_BCSP_EN : 1467  CSR_PSKEY_UART_DFU_CONFIG_RX_RATE_DELAY : 1469  CSR_PSKEY_AMUX_AIO0 : 1471  CSR_PSKEY_AMUX_AIO1 : 1473  CSR_PSKEY_AMUX_AIO2 : 1475  CSR_PSKEY_AMUX_AIO3 : 1477  CSR_PSKEY_LOCAL_NAME_SIMPLIFIED : 1479  CSR_PSKEY_EXTENDED_STUB : 1484 } } 1486 * $c¤_pskeytov® ( ušt16_t pskey ) 1488  pskey ) { 1489  CSR_PSKEY_BDADDR : 1491  CSR_PSKEY_COUNTRYCODE : 1493  CSR_PSKEY_CLASSOFDEVICE : 1495  CSR_PSKEY_DEVICE_DRIFT : 1497  CSR_PSKEY_DEVICE_JITTER : 1499  CSR_PSKEY_MAX_ACLS : 1501  CSR_PSKEY_MAX_SCOS : 1503  CSR_PSKEY_MAX_REMOTE_MASTERS : 1505  CSR_PSKEY_ENABLE_MASTERY_WITH_SLAVERY : 1507  CSR_PSKEY_H_HC_FC_MAX_ACL_PKT_LEN : 1509  CSR_PSKEY_H_HC_FC_MAX_SCO_PKT_LEN : 1511  CSR_PSKEY_H_HC_FC_MAX_ACL_PKTS : 1513  CSR_PSKEY_H_HC_FC_MAX_SCO_PKTS : 1515  CSR_PSKEY_LC_FC_BUFFER_LOW_WATER_MARK : 1517  CSR_PSKEY_LC_MAX_TX_POWER : 1519  CSR_PSKEY_TX_GAIN_RAMP : 1521  CSR_PSKEY_LC_POWER_TABLE : 1523  CSR_PSKEY_LC_PEER_POWER_PERIOD : 1525  CSR_PSKEY_LC_FC_POOLS_LOW_WATER_MARK : 1527  CSR_PSKEY_LC_DEFAULT_TX_POWER : 1529  CSR_PSKEY_LC_RSSI_GOLDEN_RANGE : 1531  CSR_PSKEY_LC_COMBO_DISABLE_PIO_MASK : 1533  CSR_PSKEY_LC_COMBO_PRIORITY_PIO_MASK : 1535  CSR_PSKEY_LC_COMBO_DOT11_CHANNEL_PIO_BASE : 1537  CSR_PSKEY_LC_COMBO_DOT11_BLOCK_CHANNELS : 1539  CSR_PSKEY_LC_MAX_TX_POWER_NO_RSSI : 1541  CSR_PSKEY_LC_CONNECTION_RX_WINDOW : 1543  CSR_PSKEY_LC_COMBO_DOT11_TX_PROTECTION_MODE : 1545  CSR_PSKEY_LC_ENHANCED_POWER_TABLE : 1547  CSR_PSKEY_LC_WIDEBAND_RSSI_CONFIG : 1549  CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_LEAD : 1551  CSR_PSKEY_BT_CLOCK_INIT : 1553  CSR_PSKEY_TX_MR_MOD_DELAY : 1555  CSR_PSKEY_RX_MR_SYNC_TIMING : 1557  CSR_PSKEY_RX_MR_SYNC_CONFIG : 1559  CSR_PSKEY_LC_LOST_SYNC_SLOTS : 1561  CSR_PSKEY_RX_MR_SAMP_CONFIG : 1563  CSR_PSKEY_AGC_HYST_LEVELS : 1565  CSR_PSKEY_RX_LEVEL_LOW_SIGNAL : 1567  CSR_PSKEY_AGC_IQ_LVL_VALUES : 1569  CSR_PSKEY_MR_FTRIM_OFFSET_12DB : 1571  CSR_PSKEY_MR_FTRIM_OFFSET_6DB : 1573  CSR_PSKEY_NO_CAL_ON_BOOT : 1575  CSR_PSKEY_RSSI_HI_TARGET : 1577  CSR_PSKEY_PREFERRED_MIN_ATTENUATION : 1579  CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_OVERRIDE : 1581  CSR_PSKEY_LC_MULTISLOT_HOLDOFF : 1583  CSR_PSKEY_FREE_KEY_PIGEON_HOLE : 1585  CSR_PSKEY_LINK_KEY_BD_ADDR0 : 1587  CSR_PSKEY_LINK_KEY_BD_ADDR1 : 1589  CSR_PSKEY_LINK_KEY_BD_ADDR2 : 1591  CSR_PSKEY_LINK_KEY_BD_ADDR3 : 1593  CSR_PSKEY_LINK_KEY_BD_ADDR4 : 1595  CSR_PSKEY_LINK_KEY_BD_ADDR5 : 1597  CSR_PSKEY_LINK_KEY_BD_ADDR6 : 1599  CSR_PSKEY_LINK_KEY_BD_ADDR7 : 1601  CSR_PSKEY_LINK_KEY_BD_ADDR8 : 1603  CSR_PSKEY_LINK_KEY_BD_ADDR9 : 1605  CSR_PSKEY_LINK_KEY_BD_ADDR10 : 1607  CSR_PSKEY_LINK_KEY_BD_ADDR11 : 1609  CSR_PSKEY_LINK_KEY_BD_ADDR12 : 1611  CSR_PSKEY_LINK_KEY_BD_ADDR13 : 1613  CSR_PSKEY_LINK_KEY_BD_ADDR14 : 1615  CSR_PSKEY_LINK_KEY_BD_ADDR15 : 1617  CSR_PSKEY_ENC_KEY_LMIN : 1619  CSR_PSKEY_ENC_KEY_LMAX : 1621  CSR_PSKEY_LOCAL_SUPPORTED_FEATURES : 1623  CSR_PSKEY_LM_USE_UNIT_KEY : 1625  CSR_PSKEY_HCI_NOP_DISABLE : 1627  CSR_PSKEY_LM_MAX_EVENT_FILTERS : 1629  CSR_PSKEY_LM_USE_ENC_MODE_BROADCAST : 1631  CSR_PSKEY_LM_TEST_SEND_ACCEPTED_TWICE : 1633  CSR_PSKEY_LM_MAX_PAGE_HOLD_TIME : 1635  CSR_PSKEY_AFH_ADAPTATION_RESPONSE_TIME : 1637  CSR_PSKEY_AFH_OPTIONS : 1639  CSR_PSKEY_AFH_RSSI_RUN_PERIOD : 1641  CSR_PSKEY_AFH_REENABLE_CHANNEL_TIME : 1643  CSR_PSKEY_NO_DROP_ON_ACR_MS_FAIL : 1645  CSR_PSKEY_MAX_PRIVATE_KEYS : 1647  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR0 : 1649  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR1 : 1651  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR2 : 1653  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR3 : 1655  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR4 : 1657  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR5 : 1659  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR6 : 1661  CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR7 : 1663  CSR_PSKEY_LOCAL_SUPPORTED_COMMANDS : 1665  CSR_PSKEY_LM_MAX_ABSENCE_INDEX : 1667  CSR_PSKEY_DEVICE_NAME : 1669  CSR_PSKEY_AFH_RSSI_THRESHOLD : 1671  CSR_PSKEY_LM_CASUAL_SCAN_INTERVAL : 1673  CSR_PSKEY_AFH_MIN_MAP_CHANGE : 1675  CSR_PSKEY_AFH_RSSI_LP_RUN_PERIOD : 1677  CSR_PSKEY_HCI_LMP_LOCAL_VERSION : 1679  CSR_PSKEY_LMP_REMOTE_VERSION : 1681  CSR_PSKEY_HOLD_ERROR_MESSAGE_NUMBER : 1683  CSR_PSKEY_DFU_ATTRIBUTES : 1685  CSR_PSKEY_DFU_DETACH_TO : 1687  CSR_PSKEY_DFU_TRANSFER_SIZE : 1689  CSR_PSKEY_DFU_ENABLE : 1691  CSR_PSKEY_DFU_LIN_REG_ENABLE : 1693  CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_MSB : 1695  CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_LSB : 1697  CSR_PSKEY_DFUENC_VMAPP_PK_M_DASH : 1699  CSR_PSKEY_DFUENC_VMAPP_PK_R2N_MSB : 1701  CSR_PSKEY_DFUENC_VMAPP_PK_R2N_LSB : 1703  CSR_PSKEY_BCSP_LM_PS_BLOCK : 1705  CSR_PSKEY_HOSTIO_FC_PS_BLOCK : 1707  CSR_PSKEY_HOSTIO_PROTOCOL_INFO0 : 1709  CSR_PSKEY_HOSTIO_PROTOCOL_INFO1 : 1711  CSR_PSKEY_HOSTIO_PROTOCOL_INFO2 : 1713  CSR_PSKEY_HOSTIO_PROTOCOL_INFO3 : 1715  CSR_PSKEY_HOSTIO_PROTOCOL_INFO4 : 1717  CSR_PSKEY_HOSTIO_PROTOCOL_INFO5 : 1719  CSR_PSKEY_HOSTIO_PROTOCOL_INFO6 : 1721  CSR_PSKEY_HOSTIO_PROTOCOL_INFO7 : 1723  CSR_PSKEY_HOSTIO_PROTOCOL_INFO8 : 1725  CSR_PSKEY_HOSTIO_PROTOCOL_INFO9 : 1727  CSR_PSKEY_HOSTIO_PROTOCOL_INFO10 : 1729  CSR_PSKEY_HOSTIO_PROTOCOL_INFO11 : 1731  CSR_PSKEY_HOSTIO_PROTOCOL_INFO12 : 1733  CSR_PSKEY_HOSTIO_PROTOCOL_INFO13 : 1735  CSR_PSKEY_HOSTIO_PROTOCOL_INFO14 : 1737  CSR_PSKEY_HOSTIO_PROTOCOL_INFO15 : 1739  CSR_PSKEY_HOSTIO_UART_RESET_TIMEOUT : 1741  CSR_PSKEY_HOSTIO_USE_HCI_EXTN : 1743  CSR_PSKEY_HOSTIO_USE_HCI_EXTN_CCFC : 1745  CSR_PSKEY_HOSTIO_HCI_EXTN_PAYLOAD_SIZE : 1747  CSR_PSKEY_BCSP_LM_CNF_CNT_LIMIT : 1749  CSR_PSKEY_HOSTIO_MAP_SCO_PCM : 1751  CSR_PSKEY_HOSTIO_AWKWARD_PCM_SYNC : 1753  CSR_PSKEY_HOSTIO_BREAK_POLL_PERIOD : 1755  CSR_PSKEY_HOSTIO_MIN_UART_HCI_SCO_SIZE : 1757  CSR_PSKEY_HOSTIO_MAP_SCO_CODEC : 1759  CSR_PSKEY_PCM_CVSD_TX_HI_FREQ_BOOST : 1761  CSR_PSKEY_PCM_CVSD_RX_HI_FREQ_BOOST : 1763  CSR_PSKEY_PCM_CONFIG32 : 1765  CSR_PSKEY_USE_OLD_BCSP_LE : 1767  CSR_PSKEY_PCM_CVSD_USE_NEW_FILTER : 1769  CSR_PSKEY_PCM_FORMAT : 1771  CSR_PSKEY_CODEC_OUT_GAIN : 1773  CSR_PSKEY_CODEC_IN_GAIN : 1775  CSR_PSKEY_CODEC_PIO : 1777  CSR_PSKEY_PCM_LOW_JITTER_CONFIG : 1779  CSR_PSKEY_HOSTIO_SCO_PCM_THRESHOLDS : 1781  CSR_PSKEY_HOSTIO_SCO_HCI_THRESHOLDS : 1783  CSR_PSKEY_HOSTIO_MAP_SCO_PCM_SLOT : 1785  CSR_PSKEY_UART_BAUDRATE : 1787  CSR_PSKEY_UART_CONFIG_BCSP : 1789  CSR_PSKEY_UART_CONFIG_H4 : 1791  CSR_PSKEY_UART_CONFIG_H5 : 1793  CSR_PSKEY_UART_CONFIG_USR : 1795  CSR_PSKEY_UART_TX_CRCS : 1797  CSR_PSKEY_UART_ACK_TIMEOUT : 1799  CSR_PSKEY_UART_TX_MAX_ATTEMPTS : 1801  CSR_PSKEY_UART_TX_WINDOW_SIZE : 1803  CSR_PSKEY_UART_HOST_WAKE : 1805  CSR_PSKEY_HOSTIO_THROTTLE_TIMEOUT : 1807  CSR_PSKEY_PCM_ALWAYS_ENABLE : 1809  CSR_PSKEY_UART_HOST_WAKE_SIGNAL : 1811  CSR_PSKEY_UART_CONFIG_H4DS : 1813  CSR_PSKEY_H4DS_WAKE_DURATION : 1815  CSR_PSKEY_H4DS_MAXWU : 1817  CSR_PSKEY_H4DS_LE_TIMER_PERIOD : 1819  CSR_PSKEY_H4DS_TWU_TIMER_PERIOD : 1821  CSR_PSKEY_H4DS_UART_IDLE_TIMER_PERIOD : 1823  CSR_PSKEY_ANA_FTRIM : 1825  CSR_PSKEY_WD_TIMEOUT : 1827  CSR_PSKEY_WD_PERIOD : 1829  CSR_PSKEY_HOST_INTERFACE : 1831  CSR_PSKEY_HQ_HOST_TIMEOUT : 1833  CSR_PSKEY_HQ_ACTIVE : 1835  CSR_PSKEY_BCCMD_SECURITY_ACTIVE : 1837  CSR_PSKEY_ANA_FREQ : 1839  CSR_PSKEY_PIO_PROTECT_MASK : 1841  CSR_PSKEY_PMALLOC_SIZES : 1843  CSR_PSKEY_UART_BAUD_RATE : 1845  CSR_PSKEY_UART_CONFIG : 1847  CSR_PSKEY_STUB : 1849  CSR_PSKEY_TXRX_PIO_CONTROL : 1851  CSR_PSKEY_ANA_RX_LEVEL : 1853  CSR_PSKEY_ANA_RX_FTRIM : 1855  CSR_PSKEY_PSBC_DATA_VERSION : 1857  CSR_PSKEY_PCM0_ATTENUATION : 1859  CSR_PSKEY_LO_LVL_MAX : 1861  CSR_PSKEY_LO_ADC_AMPL_MIN : 1863  CSR_PSKEY_LO_ADC_AMPL_MAX : 1865  CSR_PSKEY_IQ_TRIM_CHANNEL : 1867  CSR_PSKEY_IQ_TRIM_GAIN : 1869  CSR_PSKEY_IQ_TRIM_ENABLE : 1871  CSR_PSKEY_TX_OFFSET_HALF_MHZ : 1873  CSR_PSKEY_GBL_MISC_ENABLES : 1875  CSR_PSKEY_UART_SLEEP_TIMEOUT : 1877  CSR_PSKEY_DEEP_SLEEP_STATE : 1879  CSR_PSKEY_IQ_ENABLE_PHASE_TRIM : 1881  CSR_PSKEY_HCI_HANDLE_FREEZE_PERIOD : 1883  CSR_PSKEY_MAX_FROZEN_HCI_HANDLES : 1885  CSR_PSKEY_PAGETABLE_DESTRUCTION_DELAY : 1887  CSR_PSKEY_IQ_TRIM_PIO_SETTINGS : 1889  CSR_PSKEY_USE_EXTERNAL_CLOCK : 1891  CSR_PSKEY_DEEP_SLEEP_WAKE_CTS : 1893  CSR_PSKEY_FC_HC2H_FLUSH_DELAY : 1895  CSR_PSKEY_RX_HIGHSIDE : 1897  CSR_PSKEY_TX_PRE_LVL : 1899  CSR_PSKEY_RX_SINGLE_ENDED : 1901  CSR_PSKEY_TX_FILTER_CONFIG : 1903  CSR_PSKEY_CLOCK_REQUEST_ENABLE : 1905  CSR_PSKEY_RX_MIN_ATTEN : 1907  CSR_PSKEY_XTAL_TARGET_AMPLITUDE : 1909  CSR_PSKEY_PCM_MIN_CPU_CLOCK : 1911  CSR_PSKEY_HOST_INTERFACE_PIO_USB : 1913  CSR_PSKEY_CPU_IDLE_MODE : 1915  CSR_PSKEY_DEEP_SLEEP_CLEAR_RTS : 1917  CSR_PSKEY_RF_RESONANCE_TRIM : 1919  CSR_PSKEY_DEEP_SLEEP_PIO_WAKE : 1921  CSR_PSKEY_DRAIN_BORE_TIMERS : 1923  CSR_PSKEY_DRAIN_TX_POWER_BASE : 1925  CSR_PSKEY_MODULE_ID : 1927  CSR_PSKEY_MODULE_DESIGN : 1929  CSR_PSKEY_MODULE_SECURITY_CODE : 1931  CSR_PSKEY_VM_DISABLE : 1933  CSR_PSKEY_MOD_MANUF0 : 1935  CSR_PSKEY_MOD_MANUF1 : 1937  CSR_PSKEY_MOD_MANUF2 : 1939  CSR_PSKEY_MOD_MANUF3 : 1941  CSR_PSKEY_MOD_MANUF4 : 1943  CSR_PSKEY_MOD_MANUF5 : 1945  CSR_PSKEY_MOD_MANUF6 : 1947  CSR_PSKEY_MOD_MANUF7 : 1949  CSR_PSKEY_MOD_MANUF8 : 1951  CSR_PSKEY_MOD_MANUF9 : 1953  CSR_PSKEY_DUT_VM_DISABLE : 1955  CSR_PSKEY_USR0 : 1957  CSR_PSKEY_USR1 : 1959  CSR_PSKEY_USR2 : 1961  CSR_PSKEY_USR3 : 1963  CSR_PSKEY_USR4 : 1965  CSR_PSKEY_USR5 : 1967  CSR_PSKEY_USR6 : 1969  CSR_PSKEY_USR7 : 1971  CSR_PSKEY_USR8 : 1973  CSR_PSKEY_USR9 : 1975  CSR_PSKEY_USR10 : 1977  CSR_PSKEY_USR11 : 1979  CSR_PSKEY_USR12 : 1981  CSR_PSKEY_USR13 : 1983  CSR_PSKEY_USR14 : 1985  CSR_PSKEY_USR15 : 1987  CSR_PSKEY_USR16 : 1989  CSR_PSKEY_USR17 : 1991  CSR_PSKEY_USR18 : 1993  CSR_PSKEY_USR19 : 1995  CSR_PSKEY_USR20 : 1997  CSR_PSKEY_USR21 : 1999  CSR_PSKEY_USR22 : 2001  CSR_PSKEY_USR23 : 2003  CSR_PSKEY_USR24 : 2005  CSR_PSKEY_USR25 : 2007  CSR_PSKEY_USR26 : 2009  CSR_PSKEY_USR27 : 2011  CSR_PSKEY_USR28 : 2013  CSR_PSKEY_USR29 : 2015  CSR_PSKEY_USR30 : 2017  CSR_PSKEY_USR31 : 2019  CSR_PSKEY_USR32 : 2021  CSR_PSKEY_USR33 : 2023  CSR_PSKEY_USR34 : 2025  CSR_PSKEY_USR35 : 2027  CSR_PSKEY_USR36 : 2029  CSR_PSKEY_USR37 : 2031  CSR_PSKEY_USR38 : 2033  CSR_PSKEY_USR39 : 2035  CSR_PSKEY_USR40 : 2037  CSR_PSKEY_USR41 : 2039  CSR_PSKEY_USR42 : 2041  CSR_PSKEY_USR43 : 2043  CSR_PSKEY_USR44 : 2045  CSR_PSKEY_USR45 : 2047  CSR_PSKEY_USR46 : 2049  CSR_PSKEY_USR47 : 2051  CSR_PSKEY_USR48 : 2053  CSR_PSKEY_USR49 : 2055  CSR_PSKEY_USB_VERSION : 2057  CSR_PSKEY_USB_DEVICE_CLASS_CODES : 2059  CSR_PSKEY_USB_VENDOR_ID : 2061  CSR_PSKEY_USB_PRODUCT_ID : 2063  CSR_PSKEY_USB_MANUF_STRING : 2065  CSR_PSKEY_USB_PRODUCT_STRING : 2067  CSR_PSKEY_USB_SERIAL_NUMBER_STRING : 2069  CSR_PSKEY_USB_CONFIG_STRING : 2071  CSR_PSKEY_USB_ATTRIBUTES : 2073  CSR_PSKEY_USB_MAX_POWER : 2075  CSR_PSKEY_USB_BT_IF_CLASS_CODES : 2077  CSR_PSKEY_USB_LANGID : 2079  CSR_PSKEY_USB_DFU_CLASS_CODES : 2081  CSR_PSKEY_USB_DFU_PRODUCT_ID : 2083  CSR_PSKEY_USB_PIO_DETACH : 2085  CSR_PSKEY_USB_PIO_WAKEUP : 2087  CSR_PSKEY_USB_PIO_PULLUP : 2089  CSR_PSKEY_USB_PIO_VBUS : 2091  CSR_PSKEY_USB_PIO_WAKE_TIMEOUT : 2093  CSR_PSKEY_USB_PIO_RESUME : 2095  CSR_PSKEY_USB_BT_SCO_IF_CLASS_CODES : 2097  CSR_PSKEY_USB_SUSPEND_PIO_LEVEL : 2099  CSR_PSKEY_USB_SUSPEND_PIO_DIR : 2101  CSR_PSKEY_USB_SUSPEND_PIO_MASK : 2103  CSR_PSKEY_USB_ENDPOINT_0_MAX_PACKET_SIZE : 2105  CSR_PSKEY_USB_CONFIG : 2107  CSR_PSKEY_RADIOTEST_ATTEN_INIT : 2109  CSR_PSKEY_RADIOTEST_FIRST_TRIM_TIME : 2111  CSR_PSKEY_RADIOTEST_SUBSEQUENT_TRIM_TIME : 2113  CSR_PSKEY_RADIOTEST_LO_LVL_TRIM_ENABLE : 2115  CSR_PSKEY_RADIOTEST_DISABLE_MODULATION : 2117  CSR_PSKEY_RFCOMM_FCON_THRESHOLD : 2119  CSR_PSKEY_RFCOMM_FCOFF_THRESHOLD : 2121  CSR_PSKEY_IPV6_STATIC_ADDR : 2123  CSR_PSKEY_IPV4_STATIC_ADDR : 2125  CSR_PSKEY_IPV6_STATIC_PREFIX_LEN : 2127  CSR_PSKEY_IPV6_STATIC_ROUTER_ADDR : 2129  CSR_PSKEY_IPV4_STATIC_SUBNET_MASK : 2131  CSR_PSKEY_IPV4_STATIC_ROUTER_ADDR : 2133  CSR_PSKEY_MDNS_NAME : 2135  CSR_PSKEY_FIXED_PIN : 2137  CSR_PSKEY_MDNS_PORT : 2139  CSR_PSKEY_MDNS_TTL : 2141  CSR_PSKEY_MDNS_IPV4_ADDR : 2143  CSR_PSKEY_ARP_CACHE_TIMEOUT : 2145  CSR_PSKEY_HFP_POWER_TABLE : 2147  CSR_PSKEY_DRAIN_BORE_TIMER_COUNTERS : 2149  CSR_PSKEY_DRAIN_BORE_COUNTERS : 2151  CSR_PSKEY_LOOP_FILTER_TRIM : 2153  CSR_PSKEY_DRAIN_BORE_CURRENT_PEAK : 2155  CSR_PSKEY_VM_E2_CACHE_LIMIT : 2157  CSR_PSKEY_FORCE_16MHZ_REF_PIO : 2159  CSR_PSKEY_CDMA_LO_REF_LIMITS : 2161  CSR_PSKEY_CDMA_LO_ERROR_LIMITS : 2163  CSR_PSKEY_CLOCK_STARTUP_DELAY : 2165  CSR_PSKEY_DEEP_SLEEP_CORRECTION_FACTOR : 2167  CSR_PSKEY_TEMPERATURE_CALIBRATION : 2169  CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA : 2171  CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL : 2173  CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB : 2175  CSR_PSKEY_TEMPERATURE_VS_DELTA_ANA_FTRIM : 2177  CSR_PSKEY_TEST_DELTA_OFFSET : 2179  CSR_PSKEY_RX_DYNAMIC_LVL_OFFSET : 2181  CSR_PSKEY_TEST_FORCE_OFFSET : 2183  CSR_PSKEY_RF_TRAP_BAD_DIVISION_RATIOS : 2185  CSR_PSKEY_RADIOTEST_CDMA_LO_REF_LIMITS : 2187  CSR_PSKEY_INITIAL_BOOTMODE : 2189  CSR_PSKEY_ONCHIP_HCI_CLIENT : 2191  CSR_PSKEY_RX_ATTEN_BACKOFF : 2193  CSR_PSKEY_RX_ATTEN_UPDATE_RATE : 2195  CSR_PSKEY_SYNTH_TXRX_THRESHOLDS : 2197  CSR_PSKEY_MIN_WAIT_STATES : 2199  CSR_PSKEY_RSSI_CORRECTION : 2201  CSR_PSKEY_SCHED_THROTTLE_TIMEOUT : 2203  CSR_PSKEY_DEEP_SLEEP_USE_EXTERNAL_CLOCK : 2205  CSR_PSKEY_TRIM_RADIO_FILTERS : 2207  CSR_PSKEY_TRANSMIT_OFFSET : 2209  CSR_PSKEY_USB_VM_CONTROL : 2211  CSR_PSKEY_MR_ANA_RX_FTRIM : 2213  CSR_PSKEY_I2C_CONFIG : 2215  CSR_PSKEY_IQ_LVL_RX : 2217  CSR_PSKEY_MR_TX_FILTER_CONFIG : 2219  CSR_PSKEY_MR_TX_CONFIG2 : 2221  CSR_PSKEY_USB_DONT_RESET_BOOTMODE_ON_HOST_RESET : 2223  CSR_PSKEY_LC_USE_THROTTLING : 2225  CSR_PSKEY_CHARGER_TRIM : 2227  CSR_PSKEY_CLOCK_REQUEST_FEATURES : 2229  CSR_PSKEY_TRANSMIT_OFFSET_CLASS1 : 2231  CSR_PSKEY_TX_AVOID_PA_CLASS1_PIO : 2233  CSR_PSKEY_MR_PIO_CONFIG : 2235  CSR_PSKEY_UART_CONFIG2 : 2237  CSR_PSKEY_CLASS1_IQ_LVL : 2239  CSR_PSKEY_CLASS1_TX_CONFIG2 : 2241  CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA_CLASS1 : 2243  CSR_PSKEY_TEMPERATURE_VS_DELTA_EXTERNAL_PA_CLASS1 : 2245  CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL_MR : 2247  CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_HEADER : 2249  CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_PAYLOAD : 2251  CSR_PSKEY_RX_MR_EQ_TAPS : 2253  CSR_PSKEY_TX_PRE_LVL_CLASS1 : 2255  CSR_PSKEY_ANALOGUE_ATTENUATOR : 2257  CSR_PSKEY_MR_RX_FILTER_TRIM : 2259  CSR_PSKEY_MR_RX_FILTER_RESPONSE : 2261  CSR_PSKEY_PIO_WAKEUP_STATE : 2263  CSR_PSKEY_MR_TX_IF_ATTEN_OFF_TEMP : 2265  CSR_PSKEY_LO_DIV_LATCH_BYPASS : 2267  CSR_PSKEY_LO_VCO_STANDBY : 2269  CSR_PSKEY_SLOW_CLOCK_FILTER_SHIFT : 2271  CSR_PSKEY_SLOW_CLOCK_FILTER_DIVIDER : 2273  CSR_PSKEY_USB_ATTRIBUTES_POWER : 2275  CSR_PSKEY_USB_ATTRIBUTES_WAKEUP : 2277  CSR_PSKEY_DFU_ATTRIBUTES_MANIFESTATION_TOLERANT : 2279  CSR_PSKEY_DFU_ATTRIBUTES_CAN_UPLOAD : 2281  CSR_PSKEY_DFU_ATTRIBUTES_CAN_DOWNLOAD : 2283  CSR_PSKEY_UART_CONFIG_STOP_BITS : 2285  CSR_PSKEY_UART_CONFIG_PARITY_BIT : 2287  CSR_PSKEY_UART_CONFIG_FLOW_CTRL_EN : 2289  CSR_PSKEY_UART_CONFIG_RTS_AUTO_EN : 2291  CSR_PSKEY_UART_CONFIG_RTS : 2293  CSR_PSKEY_UART_CONFIG_TX_ZERO_EN : 2295  CSR_PSKEY_UART_CONFIG_NON_BCSP_EN : 2297  CSR_PSKEY_UART_CONFIG_RX_RATE_DELAY : 2299  CSR_PSKEY_UART_SEQ_TIMEOUT : 2301  CSR_PSKEY_UART_SEQ_RETRIES : 2303  CSR_PSKEY_UART_SEQ_WINSIZE : 2305  CSR_PSKEY_UART_USE_CRC_ON_TX : 2307  CSR_PSKEY_UART_HOST_INITIAL_STATE : 2309  CSR_PSKEY_UART_HOST_ATTENTION_SPAN : 2311  CSR_PSKEY_UART_HOST_WAKEUP_TIME : 2313  CSR_PSKEY_UART_HOST_WAKEUP_WAIT : 2315  CSR_PSKEY_BCSP_LM_MODE : 2317  CSR_PSKEY_BCSP_LM_SYNC_RETRIES : 2319  CSR_PSKEY_BCSP_LM_TSHY : 2321  CSR_PSKEY_UART_DFU_CONFIG_STOP_BITS : 2323  CSR_PSKEY_UART_DFU_CONFIG_PARITY_BIT : 2325  CSR_PSKEY_UART_DFU_CONFIG_FLOW_CTRL_EN : 2327  CSR_PSKEY_UART_DFU_CONFIG_RTS_AUTO_EN : 2329  CSR_PSKEY_UART_DFU_CONFIG_RTS : 2331  CSR_PSKEY_UART_DFU_CONFIG_TX_ZERO_EN : 2333  CSR_PSKEY_UART_DFU_CONFIG_NON_BCSP_EN : 2335  CSR_PSKEY_UART_DFU_CONFIG_RX_RATE_DELAY : 2337  CSR_PSKEY_AMUX_AIO0 : 2339  CSR_PSKEY_AMUX_AIO1 : 2341  CSR_PSKEY_AMUX_AIO2 : 2343  CSR_PSKEY_AMUX_AIO3 : 2345  CSR_PSKEY_LOCAL_NAME_SIMPLIFIED : 2347  CSR_PSKEY_EXTENDED_STUB : 2352 } } 2354  $c¤_wr™e_v¬id_v®u–ess ( dd , ušt16_t £qnum , ušt16_ˆ v¬id ) 2356  cmd [] = { 0x02, 0x00, 0x09, 0x00, 2357 £qnum & 0xff, seqnum >> 8, v¬id & 0xff, varid >> 8, 0x00, 0x00, 2360  ý [254], ½ [254]; 2361  hci_»que¡ rq ; 2363 `mem£t (& ý , 0, (cp)); 2364 ý [0] = 0xc2; 2365 `memýy ( ý + 1, cmd , (cmd)); 2367  v¬id ) { 2368  CSR_VARID_COLD_RESET : 2369  CSR_VARID_WARM_RESET : 2370  CSR_VARID_COLD_HALT : 2371  CSR_VARID_WARM_HALT : 2372  `hci_£nd_cmd ( dd , OGF_VENDOR_CMD , 0x00, ( cmd è+ 1, ý ); 2375 `mem£t (& rq , 0, (rq)); 2376 rq . ogf = OGF_VENDOR_CMD ; 2377 rq . ocf = 0x00; 2378 rq . ev’t = EVT_VENDOR ; 2379 rq . ý¬am = ý ; 2380 rq . þ’ = ( cmd ) + 1; 2381 rq . ½¬am = ½ ; 2382 rq . ¾’ = ( ½ ); 2384 ià( `hci_£nd_»q ( dd , & rq , 2000) < 0) 2387 ià( ½ [0] != 0xc2) { 2388 ”ºo = EIO ; 2392 ià(( ½ [9] + (rp[10] << 8)) != 0) { 2393 ”ºo = ENXIO ; 2398 } } 2400  $c¤_wr™e_v¬id_com¶ex ( dd , ušt16_t £qnum , ušt16_ˆ v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 2402  cmd [] = { 0x02, 0x00, (( Ëngth / 2) + 5) & 0xff, ((length / 2) + 5) >> 8, 2403 £qnum & 0xff, seqnum >> 8, v¬id & 0xff, varid >> 8, 0x00, 0x00, 2406  ý [254], ½ [254]; 2407  hci_»que¡ rq ; 2409 `mem£t (& ý , 0, (cp)); 2410 ý [0] = 0xc2; 2411 `memýy ( ý + 1, cmd , (cmd)); 2412 `memýy ( ý + 11, v®ue , Ëngth ); 2414 `mem£t (& rq , 0, (rq)); 2415 rq . ogf = OGF_VENDOR_CMD ; 2416 rq . ocf = 0x00; 2417 rq . ev’t = EVT_VENDOR ; 2418 rq . ý¬am = ý ; 2419 rq . þ’ = ( cmd è+ Ëngth + 1; 2420 rq . ½¬am = ½ ; 2421 rq . ¾’ = ( ½ ); 2423 ià( `hci_£nd_»q ( dd , & rq , 2000) < 0) 2426 ià( ½ [0] != 0xc2) { 2427 ”ºo = EIO ; 2431 ià(( ½ [9] + (rp[10] << 8)) != 0) { 2432 ”ºo = ENXIO ; 2437 } } 2439  $c¤_»ad_v¬id_com¶ex ( dd , ušt16_t £qnum , ušt16_ˆ v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 2441  cmd [] = { 0x00, 0x00, (( Ëngth / 2) + 5) & 0xff, ((length / 2) + 5) >> 8, 2442 £qnum & 0xff, seqnum >> 8, v¬id & 0xff, varid >> 8, 0x00, 0x00, 2445  ý [254], ½ [254]; 2446  hci_»que¡ rq ; 2448 `mem£t (& ý , 0, (cp)); 2449 ý [0] = 0xc2; 2450 `memýy ( ý + 1, cmd , (cmd)); 2451 `memýy ( ý + 11, v®ue , Ëngth ); 2453 `mem£t (& rq , 0, (rq)); 2454 rq . ogf = OGF_VENDOR_CMD ; 2455 rq . ocf = 0x00; 2456 rq . ev’t = EVT_VENDOR ; 2457 rq . ý¬am = ý ; 2458 rq . þ’ = ( cmd è+ Ëngth + 1; 2459 rq . ½¬am = ½ ; 2460 rq . ¾’ = ( ½ ); 2462 ià( `hci_£nd_»q ( dd , & rq , 2000) < 0) 2465 ià( ½ [0] != 0xc2) { 2466 ”ºo = EIO ; 2470 ià(( ½ [9] + (rp[10] << 8)) != 0) { 2471 ”ºo = ENXIO ; 2475 `memýy ( v®ue , ½ + 11, Ëngth ); 2478 } } 2480  $c¤_»ad_v¬id_ušt16 ( dd , ušt16_t £qnum , ušt16_ˆ v¬id , ušt16_ˆ* v®ue ) 2482  cmd [] = { 0x00, 0x00, 0x09, 0x00, 2483 £qnum & 0xff, seqnum >> 8, v¬id & 0xff, varid >> 8, 0x00, 0x00, 2486  ý [254], ½ [254]; 2487  hci_»que¡ rq ; 2489 `mem£t (& ý , 0, (cp)); 2490 ý [0] = 0xc2; 2491 `memýy ( ý + 1, cmd , (cmd)); 2493 `mem£t (& rq , 0, (rq)); 2494 rq . ogf = OGF_VENDOR_CMD ; 2495 rq . ocf = 0x00; 2496 rq . ev’t = EVT_VENDOR ; 2497 rq . ý¬am = ý ; 2498 rq . þ’ = ( cmd ) + 1; 2499 rq . ½¬am = ½ ; 2500 rq . ¾’ = ( ½ ); 2502 ià( `hci_£nd_»q ( dd , & rq , 2000) < 0) 2505 ià( ½ [0] != 0xc2) { 2506 ”ºo = EIO ; 2510 ià(( ½ [9] + (rp[10] << 8)) != 0) { 2511 ”ºo = ENXIO ; 2515 * v®ue = ½ [11] + (rp[12] << 8); 2518 } } 2520  $c¤_»ad_v¬id_ušt32 ( dd , ušt16_t £qnum , ušt16_ˆ v¬id , ušt32_t * v®ue ) 2522  cmd [] = { 0x00, 0x00, 0x09, 0x00, 2523 £qnum & 0xff, seqnum >> 8, v¬id & 0xff, varid >> 8, 0x00, 0x00, 2526  ý [254], ½ [254]; 2527  hci_»que¡ rq ; 2529 `mem£t (& ý , 0, (cp)); 2530 ý [0] = 0xc2; 2531 `memýy ( ý + 1, cmd , (cmd)); 2533 `mem£t (& rq , 0, (rq)); 2534 rq . ogf = OGF_VENDOR_CMD ; 2535 rq . ocf = 0x00; 2536 rq . ev’t = EVT_VENDOR ; 2537 rq . ý¬am = ý ; 2538 rq . þ’ = ( cmd ) + 1; 2539 rq . ½¬am = ½ ; 2540 rq . ¾’ = ( ½ ); 2542 ià( `hci_£nd_»q ( dd , & rq , 2000) < 0) 2545 ià( ½ [0] != 0xc2) { 2546 ”ºo = EIO ; 2550 ià(( ½ [9] + (rp[10] << 8)) != 0) { 2551 ”ºo = ENXIO ; 2555 * v®ue = (( ½ [11] + (rp[12] << 8)) << 16) + (rp[13] + (rp[14] << 8)); 2558 } } 2560  $c¤_»ad_pskey_com¶ex ( dd , ušt16_t £qnum , ušt16_ˆ pskey , ušt16_ˆ ¡Ües , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 2562  cmd [] = { 0x00, 0x00, (( Ëngth / 2) + 8) & 0xff, ((length / 2) + 8) >> 8, 2563 £qnum & 0xff, seqnum >> 8, 0x03, 0x70, 0x00, 0x00, 2564 pskey & 0xff,…skey >> 8, 2565 ( Ëngth / 2) & 0xff, (length / 2) >> 8, 2566 ¡Ües & 0xff, stores >> 8, 0x00, 0x00 }; 2568  ý [254], ½ [254]; 2569  hci_»que¡ rq ; 2571 `mem£t (& ý , 0, (cp)); 2572 ý [0] = 0xc2; 2573 `memýy ( ý + 1, cmd , (cmd)); 2575 `mem£t (& rq , 0, (rq)); 2576 rq . ogf = OGF_VENDOR_CMD ; 2577 rq . ocf = 0x00; 2578 rq . ev’t = EVT_VENDOR ; 2579 rq . ý¬am = ý ; 2580 rq . þ’ = ( cmd è+ Ëngth - 1; 2581 rq . ½¬am = ½ ; 2582 rq . ¾’ = ( ½ ); 2584 ià( `hci_£nd_»q ( dd , & rq , 2000) < 0) 2587 ià( ½ [0] != 0xc2) { 2588 ”ºo = EIO ; 2592 ià(( ½ [9] + (rp[10] << 8)) != 0) { 2593 ”ºo = ENXIO ; 2597 `memýy ( v®ue , ½ + 17, Ëngth ); 2600 } } 2602  $c¤_wr™e_pskey_com¶ex ( dd , ušt16_t £qnum , ušt16_ˆ pskey , ušt16_ˆ ¡Ües , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 2604  cmd [] = { 0x02, 0x00, (( Ëngth / 2) + 8) & 0xff, ((length / 2) + 8) >> 8, 2605 £qnum & 0xff, seqnum >> 8, 0x03, 0x70, 0x00, 0x00, 2606 pskey & 0xff,…skey >> 8, 2607 ( Ëngth / 2) & 0xff, (length / 2) >> 8, 2608 ¡Ües & 0xff, stores >> 8, 0x00, 0x00 }; 2610  ý [254], ½ [254]; 2611  hci_»que¡ rq ; 2613 `mem£t (& ý , 0, (cp)); 2614 ý [0] = 0xc2; 2615 `memýy ( ý + 1, cmd , (cmd)); 2617 `memýy ( ý + 17, v®ue , Ëngth ); 2619 `mem£t (& rq , 0, (rq)); 2620 rq . ogf = OGF_VENDOR_CMD ; 2621 rq . ocf = 0x00; 2622 rq . ev’t = EVT_VENDOR ; 2623 rq . ý¬am = ý ; 2624 rq . þ’ = ( cmd è+ Ëngth - 1; 2625 rq . ½¬am = ½ ; 2626 rq . ¾’ = ( ½ ); 2628 ià( `hci_£nd_»q ( dd , & rq , 2000) < 0) 2631 ià( ½ [0] != 0xc2) { 2632 ”ºo = EIO ; 2636 ià(( ½ [9] + (rp[10] << 8)) != 0) { 2637 ”ºo = ENXIO ; 2642 } } 2644  $c¤_»ad_pskey_ušt16 ( dd , ušt16_t £qnum , ušt16_ˆ pskey , ušt16_ˆ ¡Ües , ušt16_ˆ* v®ue ) 2646 ušt8_t ¬¿y [2] = { 0x00, 0x00 }; 2647  ”r ; 2649 ”r = `c¤_»ad_pskey_com¶ex ( dd , £qnum , pskey , ¡Ües , ¬¿y , 2); 2651 * v®ue = ¬¿y [0] + (array[1] << 8); 2653  ”r ; 2654 } } 2656  $c¤_wr™e_pskey_ušt16 ( dd , ušt16_t £qnum , ušt16_ˆ pskey , ušt16_ˆ ¡Ües , ušt16_ˆ v®ue ) 2658 ušt8_t ¬¿y [2] = { v®ue & 0xff, value >> 8 }; 2660  `c¤_wr™e_pskey_com¶ex ( dd , £qnum , pskey , ¡Ües , ¬¿y , 2); 2661 } } 2663  $c¤_»ad_pskey_ušt32 ( dd , ušt16_t £qnum , ušt16_ˆ pskey , ušt16_ˆ ¡Ües , ušt32_t * v®ue ) 2665 ušt8_t ¬¿y [4] = { 0x00, 0x00, 0x00, 0x00 }; 2666  ”r ; 2668 ”r = `c¤_»ad_pskey_com¶ex ( dd , £qnum , pskey , ¡Ües , ¬¿y , 4); 2670 * v®ue = (( ¬¿y [0] + (array[1] << 8)) << 16) + 2671 ( ¬¿y [2] + (array[3] << 8)); 2673  ”r ; 2674 } } 2676  $c¤_wr™e_pskey_ušt32 ( dd , ušt16_t £qnum , ušt16_ˆ pskey , ušt16_ˆ ¡Ües , ušt32_t v®ue ) 2678 ušt8_t ¬¿y [4] = { ( v®ue & 0xff0000) >> 16, value >> 24, 2679 v®ue & 0xff, (value & 0xff00) >> 8 }; 2681  `c¤_wr™e_pskey_com¶ex ( dd , £qnum , pskey , ¡Ües , ¬¿y , 4); 2682 } } 2684  $p¤_put ( ušt16_t pskey , ušt8_t * v®ue , ušt16_ˆ size ) 2686  p¤_d©a * ™em ; 2688 ™em = `m®loc ((*item)); 2689 ià(! ™em ) 2690  - ENOMEM ; 2692 ™em -> pskey =…skey; 2694 ià( size > 0) { 2695 ™em -> v®ue = `m®loc ( size ); 2696 ià(! ™em -> v®ue ) { 2697 `ä“ ( ™em ); 2698  - ENOMEM ; 2701 `memýy ( ™em -> v®ue , v®ue, size ); 2702 ™em -> size = size; 2704 ™em -> v®ue = NULL ; 2705 ™em -> size = 0; 2708 ™em -> Ãxt = NULL ; 2710 ià(! h—d ) 2711 h—d = ™em ; 2713 ž -> Ãxt = ™em ; 2715 ž = ™em ; 2718 } } 2720  $p¤_g‘ ( ušt16_t * pskey , ušt8_t * v®ue , ušt16_ˆ* size ) 2722  p¤_d©a * ™em = h—d ; 2724 ià(! h—d ) 2725  - ENOENT ; 2727 * pskey = ™em ->pskey; 2729 ià( ™em -> v®ue ) { 2730 ià( v®ue && ™em -> size > 0) 2731 `memýy ( v®ue , ™em ->v®ue, i‹m-> size ); 2732 `ä“ ( ™em -> v®ue ); 2733 * size = ™em ->size; 2735 * size = 0; 2737 ià( h—d =ð ž ) 2738 ž = NULL ; 2740 h—d = h—d-> Ãxt ; 2741 `ä“ ( ™em ); 2744 } } 2746  $·r£_lše (* ¡r ) 2748 ušt8_t ¬¿y [256]; 2749 ušt16_t v®ue , pskey , Ëngth = 0; 2750 * off , * ’d ; 2752 pskey = `¡¹Þ ( ¡r + 1, NULL , 16); 2753 off = `¡r¡r ( ¡r , "="); 2754 ià(! off ) 2755  - EIO ; 2757 off ++; 2760 v®ue = `¡¹Þ ( off , & ’d , 16); 2761 ià( v®ue =ð0 && off =ð ’d ) 2764 ¬¿y [ Ëngth ++] = v®ue & 0xff; 2765 ¬¿y [ Ëngth ++] = v®ue >> 8; 2767 ià(* ’d == '\0') 2770 off = ’d + 1; 2773  `p¤_put ( pskey , ¬¿y , Ëngth ); 2774 } } 2776  $p¤_»ad (cÚ¡ * fž’ame ) 2778  ¡© ¡ ; 2779 * ¡r , * m­ , * off , * ’d ; 2780  fd , ”r = 0; 2782 fd = `Ý’ ( fž’ame , O_RDONLY ); 2783 ià( fd < 0) 2784  fd ; 2786 ià( `f¡© ( fd , & ¡ ) < 0) { 2787 ”r = - ”ºo ; 2788  þo£ ; 2791 m­ = `mm­ (0, ¡ . ¡_size , PROT_READ , MAP_SHARED , fd , 0); 2792 ià(! m­ || m­ =ð MAP_FAILED ) { 2793 ”r = - ”ºo ; 2794  þo£ ; 2797 off = m­ ; 2800 ià(* off == '\r' || *off == '\n') { 2801 off ++; 2805 ’d = `¡½brk ( off , "\r\n"); 2806 ià(! ’d ) 2809 ¡r = `m®loc ( ’d - off + 1); 2810 ià(! ¡r ) 2813 `mem£t ( ¡r , 0, ’d - off + 1); 2814 `¡ºýy ( ¡r , off , ’d - off); 2815 ià(* ¡r == '&') 2816 `·r£_lše ( ¡r ); 2818 `ä“ ( ¡r ); 2819 off = ’d + 1; 2822 `munm­ ( m­ , ¡ . ¡_size ); 2824 þo£ : 2825 `þo£ ( fd ); 2827  ”r ; 2828 } } 2830  $p¤_´št () 2832 ušt8_t ¬¿y [256]; 2833 ušt16_t pskey , Ëngth ; 2834 * ¡r , v® [7]; 2835  i ; 2838 ià( `p¤_g‘ (& pskey , ¬¿y , & Ëngth ) < 0) 2841 ¡r = `c¤_pskeytov® ( pskey ); 2842 ià(! `¡rÿ£cmp ( ¡r , "UNKNOWN")) { 2843 `¥rštf ( v® , "0x%04x", pskey ); 2844 ¡r = NULL ; 2847 `´štf ("// %s%s\n&%04x =", ¡r ? "PSKEY_" : "", 2848 ¡r ? sŒ : v® , pskey ); 2849  i = 0; i < Ëngth / 2; i++) 2850 `´štf (" %02x%02x", ¬¿y [ i * 2 + 1],‡rray[i * 2]); 2851 `´štf ("\n"); 2855 } } @tools/csr.h 24  ~<¡dšt.h > 25  ~<‹rmios.h > 27  #CSR_VARID_PS_CLR_ALL 0x000b ) 28  #CSR_VARID_PS_FACTORY_SET 0x000ø ) 29  #CSR_VARID_PS_CLR_ALL_STORES 0x082d ) 30  #CSR_VARID_BC01_STATUS 0x2801 ) 31  #CSR_VARID_BUILDID 0x2819 ) 32  #CSR_VARID_CHIPVER 0x281¨ ) 33  #CSR_VARID_CHIPREV 0x281b ) 34  #CSR_VARID_INTERFACE_VERSION 0x2825 ) 35  #CSR_VARID_RAND 0x282¨ ) 36  #CSR_VARID_MAX_CRYPT_KEY_LENGTH 0x282ø ) 37  #CSR_VARID_CHIPANAREV 0x2836 ) 38  #CSR_VARID_BUILDID_LOADER 0x2838 ) 39  #CSR_VARID_BT_CLOCK 0x2c00 ) 40  #CSR_VARID_PS_NEXT 0x3005 ) 41  #CSR_VARID_PS_SIZE 0x3006 ) 42  #CSR_VARID_CRYPT_KEY_LENGTH 0x3008 ) 43  #CSR_VARID_PICONET_INSTANCE 0x3009 ) 44  #CSR_VARID_GET_CLR_EVT 0x300¨ ) 45  #CSR_VARID_GET_NEXT_BUILDDEF 0x300b ) 46  #CSR_VARID_PS_MEMORY_TYPE 0x3012 ) 47  #CSR_VARID_READ_BUILD_NAME 0x301ø ) 48  #CSR_VARID_COLD_RESET 0x4001 ) 49  #CSR_VARID_WARM_RESET 0x4002 ) 50  #CSR_VARID_COLD_HALT 0x4003 ) 51  #CSR_VARID_WARM_HALT 0x4004 ) 52  #CSR_VARID_INIT_BT_STACK 0x4005 ) 53  #CSR_VARID_ACTIVATE_BT_STACK 0x4006 ) 54  #CSR_VARID_ENABLE_TX 0x4007 ) 55  #CSR_VARID_DISABLE_TX 0x4008 ) 56  #CSR_VARID_RECAL 0x4009 ) 57  #CSR_VARID_PS_FACTORY_RESTORE 0x400d ) 58  #CSR_VARID_PS_FACTORY_RESTORE_ALL 0x400 ) 59  #CSR_VARID_PS_DEFRAG_RESET 0x400à ) 60  #CSR_VARID_KILL_VM_APPLICATION 0x4010 ) 61  #CSR_VARID_HOPPING_ON 0x4011 ) 62  #CSR_VARID_CANCEL_PAGE 0x4012 ) 63  #CSR_VARID_PS_CLR 0x4818 ) 64  #CSR_VARID_MAP_SCO_PCM 0x481ø ) 65  #CSR_VARID_SINGLE_CHAN 0x482 ) 66  #CSR_VARID_RADIOTEST 0x5004 ) 67  #CSR_VARID_PS_CLR_STORES 0x500ø ) 68  #CSR_VARID_NO_VARIABLE 0x6000 ) 69  #CSR_VARID_CONFIG_UART 0x6802 ) 70  #CSR_VARID_PANIC_ARG 0x6805 ) 71  #CSR_VARID_FAULT_ARG 0x6806 ) 72  #CSR_VARID_MAX_TX_POWER 0x6827 ) 73  #CSR_VARID_DEFAULT_TX_POWER 0x682b ) 74  #CSR_VARID_PS 0x7003 ) 76  #CSR_PSKEY_BDADDR 0x0001 ) 77  #CSR_PSKEY_COUNTRYCODE 0x0002 ) 78  #CSR_PSKEY_CLASSOFDEVICE 0x0003 ) 79  #CSR_PSKEY_DEVICE_DRIFT 0x0004 ) 80  #CSR_PSKEY_DEVICE_JITTER 0x0005 ) 81  #CSR_PSKEY_MAX_ACLS 0x000d ) 82  #CSR_PSKEY_MAX_SCOS 0x000 ) 83  #CSR_PSKEY_MAX_REMOTE_MASTERS 0x000à ) 84  #CSR_PSKEY_ENABLE_MASTERY_WITH_SLAVERY 0x0010 ) 85  #CSR_PSKEY_H_HC_FC_MAX_ACL_PKT_LEN 0x0011 ) 86  #CSR_PSKEY_H_HC_FC_MAX_SCO_PKT_LEN 0x0012 ) 87  #CSR_PSKEY_H_HC_FC_MAX_ACL_PKTS 0x0013 ) 88  #CSR_PSKEY_H_HC_FC_MAX_SCO_PKTS 0x0014 ) 89  #CSR_PSKEY_LC_FC_BUFFER_LOW_WATER_MARK 0x0015 ) 90  #CSR_PSKEY_LC_MAX_TX_POWER 0x0017 ) 91  #CSR_PSKEY_TX_GAIN_RAMP 0x001d ) 92  #CSR_PSKEY_LC_POWER_TABLE 0x001 ) 93  #CSR_PSKEY_LC_PEER_POWER_PERIOD 0x001à ) 94  #CSR_PSKEY_LC_FC_POOLS_LOW_WATER_MARK 0x0020 ) 95  #CSR_PSKEY_LC_DEFAULT_TX_POWER 0x0021 ) 96  #CSR_PSKEY_LC_RSSI_GOLDEN_RANGE 0x0022 ) 97  #CSR_PSKEY_LC_COMBO_DISABLE_PIO_MASK 0x0028 ) 98  #CSR_PSKEY_LC_COMBO_PRIORITY_PIO_MASK 0x0029 ) 99  #CSR_PSKEY_LC_COMBO_DOT11_CHANNEL_PIO_BASE 0x002¨ ) 100  #CSR_PSKEY_LC_COMBO_DOT11_BLOCK_CHANNELS 0x002b ) 101  #CSR_PSKEY_LC_MAX_TX_POWER_NO_RSSI 0x002d ) 102  #CSR_PSKEY_LC_CONNECTION_RX_WINDOW 0x002 ) 103  #CSR_PSKEY_LC_COMBO_DOT11_TX_PROTECTION_MODE 0x0030 ) 104  #CSR_PSKEY_LC_ENHANCED_POWER_TABLE 0x0031 ) 105  #CSR_PSKEY_LC_WIDEBAND_RSSI_CONFIG 0x0032 ) 106  #CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_LEAD 0x0033 ) 107  #CSR_PSKEY_BT_CLOCK_INIT 0x0034 ) 108  #CSR_PSKEY_TX_MR_MOD_DELAY 0x0038 ) 109  #CSR_PSKEY_RX_MR_SYNC_TIMING 0x0039 ) 110  #CSR_PSKEY_RX_MR_SYNC_CONFIG 0x003¨ ) 111  #CSR_PSKEY_LC_LOST_SYNC_SLOTS 0x003b ) 112  #CSR_PSKEY_RX_MR_SAMP_CONFIG 0x003ø ) 113  #CSR_PSKEY_AGC_HYST_LEVELS 0x003d ) 114  #CSR_PSKEY_RX_LEVEL_LOW_SIGNAL 0x003 ) 115  #CSR_PSKEY_AGC_IQ_LVL_VALUES 0x003à ) 116  #CSR_PSKEY_MR_FTRIM_OFFSET_12DB 0x0040 ) 117  #CSR_PSKEY_MR_FTRIM_OFFSET_6DB 0x0041 ) 118  #CSR_PSKEY_NO_CAL_ON_BOOT 0x0042 ) 119  #CSR_PSKEY_RSSI_HI_TARGET 0x0043 ) 120  #CSR_PSKEY_PREFERRED_MIN_ATTENUATION 0x0044 ) 121  #CSR_PSKEY_LC_COMBO_DOT11_PRIORITY_OVERRIDE 0x0045 ) 122  #CSR_PSKEY_LC_MULTISLOT_HOLDOFF 0x0047 ) 123  #CSR_PSKEY_FREE_KEY_PIGEON_HOLE 0x00c9 ) 124  #CSR_PSKEY_LINK_KEY_BD_ADDR0 0x00ÿ ) 125  #CSR_PSKEY_LINK_KEY_BD_ADDR1 0x00cb ) 126  #CSR_PSKEY_LINK_KEY_BD_ADDR2 0x00cø ) 127  #CSR_PSKEY_LINK_KEY_BD_ADDR3 0x00cd ) 128  #CSR_PSKEY_LINK_KEY_BD_ADDR4 0x00û ) 129  #CSR_PSKEY_LINK_KEY_BD_ADDR5 0x00cà ) 130  #CSR_PSKEY_LINK_KEY_BD_ADDR6 0x00d0 ) 131  #CSR_PSKEY_LINK_KEY_BD_ADDR7 0x00d1 ) 132  #CSR_PSKEY_LINK_KEY_BD_ADDR8 0x00d2 ) 133  #CSR_PSKEY_LINK_KEY_BD_ADDR9 0x00d3 ) 134  #CSR_PSKEY_LINK_KEY_BD_ADDR10 0x00d4 ) 135  #CSR_PSKEY_LINK_KEY_BD_ADDR11 0x00d5 ) 136  #CSR_PSKEY_LINK_KEY_BD_ADDR12 0x00d6 ) 137  #CSR_PSKEY_LINK_KEY_BD_ADDR13 0x00d7 ) 138  #CSR_PSKEY_LINK_KEY_BD_ADDR14 0x00d8 ) 139  #CSR_PSKEY_LINK_KEY_BD_ADDR15 0x00d9 ) 140  #CSR_PSKEY_ENC_KEY_LMIN 0x00d¨ ) 141  #CSR_PSKEY_ENC_KEY_LMAX 0x00db ) 142  #CSR_PSKEY_LOCAL_SUPPORTED_FEATURES 0x00eà ) 143  #CSR_PSKEY_LM_USE_UNIT_KEY 0x00f0 ) 144  #CSR_PSKEY_HCI_NOP_DISABLE 0x00f2 ) 145  #CSR_PSKEY_LM_MAX_EVENT_FILTERS 0x00f4 ) 146  #CSR_PSKEY_LM_USE_ENC_MODE_BROADCAST 0x00f5 ) 147  #CSR_PSKEY_LM_TEST_SEND_ACCEPTED_TWICE 0x00f6 ) 148  #CSR_PSKEY_LM_MAX_PAGE_HOLD_TIME 0x00f7 ) 149  #CSR_PSKEY_AFH_ADAPTATION_RESPONSE_TIME 0x00f8 ) 150  #CSR_PSKEY_AFH_OPTIONS 0x00f9 ) 151  #CSR_PSKEY_AFH_RSSI_RUN_PERIOD 0x00ç ) 152  #CSR_PSKEY_AFH_REENABLE_CHANNEL_TIME 0x00fb ) 153  #CSR_PSKEY_NO_DROP_ON_ACR_MS_FAIL 0x00fø ) 154  #CSR_PSKEY_MAX_PRIVATE_KEYS 0x00fd ) 155  #CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR0 0x00ã ) 156  #CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR1 0x00fà ) 157  #CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR2 0x0100 ) 158  #CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR3 0x0101 ) 159  #CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR4 0x0102 ) 160  #CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR5 0x0103 ) 161  #CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR6 0x0104 ) 162  #CSR_PSKEY_PRIVATE_LINK_KEY_BD_ADDR7 0x0105 ) 163  #CSR_PSKEY_LOCAL_SUPPORTED_COMMANDS 0x0106 ) 164  #CSR_PSKEY_LM_MAX_ABSENCE_INDEX 0x0107 ) 165  #CSR_PSKEY_DEVICE_NAME 0x0108 ) 166  #CSR_PSKEY_AFH_RSSI_THRESHOLD 0x0109 ) 167  #CSR_PSKEY_LM_CASUAL_SCAN_INTERVAL 0x010¨ ) 168  #CSR_PSKEY_AFH_MIN_MAP_CHANGE 0x010b ) 169  #CSR_PSKEY_AFH_RSSI_LP_RUN_PERIOD 0x010ø ) 170  #CSR_PSKEY_HCI_LMP_LOCAL_VERSION 0x010d ) 171  #CSR_PSKEY_LMP_REMOTE_VERSION 0x010 ) 172  #CSR_PSKEY_HOLD_ERROR_MESSAGE_NUMBER 0x0113 ) 173  #CSR_PSKEY_DFU_ATTRIBUTES 0x0136 ) 174  #CSR_PSKEY_DFU_DETACH_TO 0x0137 ) 175  #CSR_PSKEY_DFU_TRANSFER_SIZE 0x0138 ) 176  #CSR_PSKEY_DFU_ENABLE 0x0139 ) 177  #CSR_PSKEY_DFU_LIN_REG_ENABLE 0x013¨ ) 178  #CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_MSB 0x015 ) 179  #CSR_PSKEY_DFUENC_VMAPP_PK_MODULUS_LSB 0x015à ) 180  #CSR_PSKEY_DFUENC_VMAPP_PK_M_DASH 0x0160 ) 181  #CSR_PSKEY_DFUENC_VMAPP_PK_R2N_MSB 0x0161 ) 182  #CSR_PSKEY_DFUENC_VMAPP_PK_R2N_LSB 0x0162 ) 183  #CSR_PSKEY_BCSP_LM_PS_BLOCK 0x0192 ) 184  #CSR_PSKEY_HOSTIO_FC_PS_BLOCK 0x0193 ) 185  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO0 0x0194 ) 186  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO1 0x0195 ) 187  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO2 0x0196 ) 188  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO3 0x0197 ) 189  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO4 0x0198 ) 190  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO5 0x0199 ) 191  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO6 0x019¨ ) 192  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO7 0x019b ) 193  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO8 0x019ø ) 194  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO9 0x019d ) 195  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO10 0x019 ) 196  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO11 0x019à ) 197  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO12 0x01a0 ) 198  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO13 0x01a1 ) 199  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO14 0x01a2 ) 200  #CSR_PSKEY_HOSTIO_PROTOCOL_INFO15 0x01a3 ) 201  #CSR_PSKEY_HOSTIO_UART_RESET_TIMEOUT 0x01a4 ) 202  #CSR_PSKEY_HOSTIO_USE_HCI_EXTN 0x01a5 ) 203  #CSR_PSKEY_HOSTIO_USE_HCI_EXTN_CCFC 0x01a6 ) 204  #CSR_PSKEY_HOSTIO_HCI_EXTN_PAYLOAD_SIZE 0x01a7 ) 205  #CSR_PSKEY_BCSP_LM_CNF_CNT_LIMIT 0x01¯ ) 206  #CSR_PSKEY_HOSTIO_MAP_SCO_PCM 0x01ab ) 207  #CSR_PSKEY_HOSTIO_AWKWARD_PCM_SYNC 0x01aø ) 208  #CSR_PSKEY_HOSTIO_BREAK_POLL_PERIOD 0x01ad ) 209  #CSR_PSKEY_HOSTIO_MIN_UART_HCI_SCO_SIZE 0x01« ) 210  #CSR_PSKEY_HOSTIO_MAP_SCO_CODEC 0x01b0 ) 211  #CSR_PSKEY_PCM_CVSD_TX_HI_FREQ_BOOST 0x01b1 ) 212  #CSR_PSKEY_PCM_CVSD_RX_HI_FREQ_BOOST 0x01b2 ) 213  #CSR_PSKEY_PCM_CONFIG32 0x01b3 ) 214  #CSR_PSKEY_USE_OLD_BCSP_LE 0x01b4 ) 215  #CSR_PSKEY_PCM_CVSD_USE_NEW_FILTER 0x01b5 ) 216  #CSR_PSKEY_PCM_FORMAT 0x01b6 ) 217  #CSR_PSKEY_CODEC_OUT_GAIN 0x01b7 ) 218  #CSR_PSKEY_CODEC_IN_GAIN 0x01b8 ) 219  #CSR_PSKEY_CODEC_PIO 0x01b9 ) 220  #CSR_PSKEY_PCM_LOW_JITTER_CONFIG 0x01b¨ ) 221  #CSR_PSKEY_HOSTIO_SCO_PCM_THRESHOLDS 0x01bb ) 222  #CSR_PSKEY_HOSTIO_SCO_HCI_THRESHOLDS 0x01bø ) 223  #CSR_PSKEY_HOSTIO_MAP_SCO_PCM_SLOT 0x01bd ) 224  #CSR_PSKEY_UART_BAUDRATE 0x01b ) 225  #CSR_PSKEY_UART_CONFIG_BCSP 0x01bà ) 226  #CSR_PSKEY_UART_CONFIG_H4 0x01c0 ) 227  #CSR_PSKEY_UART_CONFIG_H5 0x01c1 ) 228  #CSR_PSKEY_UART_CONFIG_USR 0x01c2 ) 229  #CSR_PSKEY_UART_TX_CRCS 0x01c3 ) 230  #CSR_PSKEY_UART_ACK_TIMEOUT 0x01c4 ) 231  #CSR_PSKEY_UART_TX_MAX_ATTEMPTS 0x01c5 ) 232  #CSR_PSKEY_UART_TX_WINDOW_SIZE 0x01c6 ) 233  #CSR_PSKEY_UART_HOST_WAKE 0x01c7 ) 234  #CSR_PSKEY_HOSTIO_THROTTLE_TIMEOUT 0x01c8 ) 235  #CSR_PSKEY_PCM_ALWAYS_ENABLE 0x01c9 ) 236  #CSR_PSKEY_UART_HOST_WAKE_SIGNAL 0x01ÿ ) 237  #CSR_PSKEY_UART_CONFIG_H4DS 0x01cb ) 238  #CSR_PSKEY_H4DS_WAKE_DURATION 0x01cø ) 239  #CSR_PSKEY_H4DS_MAXWU 0x01cd ) 240  #CSR_PSKEY_H4DS_LE_TIMER_PERIOD 0x01cà ) 241  #CSR_PSKEY_H4DS_TWU_TIMER_PERIOD 0x01d0 ) 242  #CSR_PSKEY_H4DS_UART_IDLE_TIMER_PERIOD 0x01d1 ) 243  #CSR_PSKEY_ANA_FTRIM 0x01f6 ) 244  #CSR_PSKEY_WD_TIMEOUT 0x01f7 ) 245  #CSR_PSKEY_WD_PERIOD 0x01f8 ) 246  #CSR_PSKEY_HOST_INTERFACE 0x01f9 ) 247  #CSR_PSKEY_HQ_HOST_TIMEOUT 0x01fb ) 248  #CSR_PSKEY_HQ_ACTIVE 0x01fø ) 249  #CSR_PSKEY_BCCMD_SECURITY_ACTIVE 0x01fd ) 250  #CSR_PSKEY_ANA_FREQ 0x01ã ) 251  #CSR_PSKEY_PIO_PROTECT_MASK 0x0202 ) 252  #CSR_PSKEY_PMALLOC_SIZES 0x0203 ) 253  #CSR_PSKEY_UART_BAUD_RATE 0x0204 ) 254  #CSR_PSKEY_UART_CONFIG 0x0205 ) 255  #CSR_PSKEY_STUB 0x0207 ) 256  #CSR_PSKEY_TXRX_PIO_CONTROL 0x0209 ) 257  #CSR_PSKEY_ANA_RX_LEVEL 0x020b ) 258  #CSR_PSKEY_ANA_RX_FTRIM 0x020ø ) 259  #CSR_PSKEY_PSBC_DATA_VERSION 0x020d ) 260  #CSR_PSKEY_PCM0_ATTENUATION 0x020à ) 261  #CSR_PSKEY_LO_LVL_MAX 0x0211 ) 262  #CSR_PSKEY_LO_ADC_AMPL_MIN 0x0212 ) 263  #CSR_PSKEY_LO_ADC_AMPL_MAX 0x0213 ) 264  #CSR_PSKEY_IQ_TRIM_CHANNEL 0x0214 ) 265  #CSR_PSKEY_IQ_TRIM_GAIN 0x0215 ) 266  #CSR_PSKEY_IQ_TRIM_ENABLE 0x0216 ) 267  #CSR_PSKEY_TX_OFFSET_HALF_MHZ 0x0217 ) 268  #CSR_PSKEY_GBL_MISC_ENABLES 0x0221 ) 269  #CSR_PSKEY_UART_SLEEP_TIMEOUT 0x0222 ) 270  #CSR_PSKEY_DEEP_SLEEP_STATE 0x0229 ) 271  #CSR_PSKEY_IQ_ENABLE_PHASE_TRIM 0x022d ) 272  #CSR_PSKEY_HCI_HANDLE_FREEZE_PERIOD 0x0237 ) 273  #CSR_PSKEY_MAX_FROZEN_HCI_HANDLES 0x0238 ) 274  #CSR_PSKEY_PAGETABLE_DESTRUCTION_DELAY 0x0239 ) 275  #CSR_PSKEY_IQ_TRIM_PIO_SETTINGS 0x023¨ ) 276  #CSR_PSKEY_USE_EXTERNAL_CLOCK 0x023b ) 277  #CSR_PSKEY_DEEP_SLEEP_WAKE_CTS 0x023ø ) 278  #CSR_PSKEY_FC_HC2H_FLUSH_DELAY 0x023d ) 279  #CSR_PSKEY_RX_HIGHSIDE 0x023 ) 280  #CSR_PSKEY_TX_PRE_LVL 0x0240 ) 281  #CSR_PSKEY_RX_SINGLE_ENDED 0x0242 ) 282  #CSR_PSKEY_TX_FILTER_CONFIG 0x0243 ) 283  #CSR_PSKEY_CLOCK_REQUEST_ENABLE 0x0246 ) 284  #CSR_PSKEY_RX_MIN_ATTEN 0x0249 ) 285  #CSR_PSKEY_XTAL_TARGET_AMPLITUDE 0x024b ) 286  #CSR_PSKEY_PCM_MIN_CPU_CLOCK 0x024d ) 287  #CSR_PSKEY_HOST_INTERFACE_PIO_USB 0x0250 ) 288  #CSR_PSKEY_CPU_IDLE_MODE 0x0251 ) 289  #CSR_PSKEY_DEEP_SLEEP_CLEAR_RTS 0x0252 ) 290  #CSR_PSKEY_RF_RESONANCE_TRIM 0x0254 ) 291  #CSR_PSKEY_DEEP_SLEEP_PIO_WAKE 0x0255 ) 292  #CSR_PSKEY_DRAIN_BORE_TIMERS 0x0256 ) 293  #CSR_PSKEY_DRAIN_TX_POWER_BASE 0x0257 ) 294  #CSR_PSKEY_MODULE_ID 0x0259 ) 295  #CSR_PSKEY_MODULE_DESIGN 0x025¨ ) 296  #CSR_PSKEY_MODULE_SECURITY_CODE 0x025ø ) 297  #CSR_PSKEY_VM_DISABLE 0x025d ) 298  #CSR_PSKEY_MOD_MANUF0 0x025 ) 299  #CSR_PSKEY_MOD_MANUF1 0x025à ) 300  #CSR_PSKEY_MOD_MANUF2 0x0260 ) 301  #CSR_PSKEY_MOD_MANUF3 0x0261 ) 302  #CSR_PSKEY_MOD_MANUF4 0x0262 ) 303  #CSR_PSKEY_MOD_MANUF5 0x0263 ) 304  #CSR_PSKEY_MOD_MANUF6 0x0264 ) 305  #CSR_PSKEY_MOD_MANUF7 0x0265 ) 306  #CSR_PSKEY_MOD_MANUF8 0x0266 ) 307  #CSR_PSKEY_MOD_MANUF9 0x0267 ) 308  #CSR_PSKEY_DUT_VM_DISABLE 0x0268 ) 309  #CSR_PSKEY_USR0 0x028¨ ) 310  #CSR_PSKEY_USR1 0x028b ) 311  #CSR_PSKEY_USR2 0x028ø ) 312  #CSR_PSKEY_USR3 0x028d ) 313  #CSR_PSKEY_USR4 0x028 ) 314  #CSR_PSKEY_USR5 0x028à ) 315  #CSR_PSKEY_USR6 0x0290 ) 316  #CSR_PSKEY_USR7 0x0291 ) 317  #CSR_PSKEY_USR8 0x0292 ) 318  #CSR_PSKEY_USR9 0x0293 ) 319  #CSR_PSKEY_USR10 0x0294 ) 320  #CSR_PSKEY_USR11 0x0295 ) 321  #CSR_PSKEY_USR12 0x0296 ) 322  #CSR_PSKEY_USR13 0x0297 ) 323  #CSR_PSKEY_USR14 0x0298 ) 324  #CSR_PSKEY_USR15 0x0299 ) 325  #CSR_PSKEY_USR16 0x029¨ ) 326  #CSR_PSKEY_USR17 0x029b ) 327  #CSR_PSKEY_USR18 0x029ø ) 328  #CSR_PSKEY_USR19 0x029d ) 329  #CSR_PSKEY_USR20 0x029 ) 330  #CSR_PSKEY_USR21 0x029à ) 331  #CSR_PSKEY_USR22 0x02a0 ) 332  #CSR_PSKEY_USR23 0x02a1 ) 333  #CSR_PSKEY_USR24 0x02a2 ) 334  #CSR_PSKEY_USR25 0x02a3 ) 335  #CSR_PSKEY_USR26 0x02a4 ) 336  #CSR_PSKEY_USR27 0x02a5 ) 337  #CSR_PSKEY_USR28 0x02a6 ) 338  #CSR_PSKEY_USR29 0x02a7 ) 339  #CSR_PSKEY_USR30 0x02a8 ) 340  #CSR_PSKEY_USR31 0x02a9 ) 341  #CSR_PSKEY_USR32 0x02¯ ) 342  #CSR_PSKEY_USR33 0x02ab ) 343  #CSR_PSKEY_USR34 0x02aø ) 344  #CSR_PSKEY_USR35 0x02ad ) 345  #CSR_PSKEY_USR36 0x02« ) 346  #CSR_PSKEY_USR37 0x02aà ) 347  #CSR_PSKEY_USR38 0x02b0 ) 348  #CSR_PSKEY_USR39 0x02b1 ) 349  #CSR_PSKEY_USR40 0x02b2 ) 350  #CSR_PSKEY_USR41 0x02b3 ) 351  #CSR_PSKEY_USR42 0x02b4 ) 352  #CSR_PSKEY_USR43 0x02b5 ) 353  #CSR_PSKEY_USR44 0x02b6 ) 354  #CSR_PSKEY_USR45 0x02b7 ) 355  #CSR_PSKEY_USR46 0x02b8 ) 356  #CSR_PSKEY_USR47 0x02b9 ) 357  #CSR_PSKEY_USR48 0x02b¨ ) 358  #CSR_PSKEY_USR49 0x02bb ) 359  #CSR_PSKEY_USB_VERSION 0x02bø ) 360  #CSR_PSKEY_USB_DEVICE_CLASS_CODES 0x02bd ) 361  #CSR_PSKEY_USB_VENDOR_ID 0x02b ) 362  #CSR_PSKEY_USB_PRODUCT_ID 0x02bà ) 363  #CSR_PSKEY_USB_MANUF_STRING 0x02c1 ) 364  #CSR_PSKEY_USB_PRODUCT_STRING 0x02c2 ) 365  #CSR_PSKEY_USB_SERIAL_NUMBER_STRING 0x02c3 ) 366  #CSR_PSKEY_USB_CONFIG_STRING 0x02c4 ) 367  #CSR_PSKEY_USB_ATTRIBUTES 0x02c5 ) 368  #CSR_PSKEY_USB_MAX_POWER 0x02c6 ) 369  #CSR_PSKEY_USB_BT_IF_CLASS_CODES 0x02c7 ) 370  #CSR_PSKEY_USB_LANGID 0x02c9 ) 371  #CSR_PSKEY_USB_DFU_CLASS_CODES 0x02ÿ ) 372  #CSR_PSKEY_USB_DFU_PRODUCT_ID 0x02cb ) 373  #CSR_PSKEY_USB_PIO_DETACH 0x02û ) 374  #CSR_PSKEY_USB_PIO_WAKEUP 0x02cà ) 375  #CSR_PSKEY_USB_PIO_PULLUP 0x02d0 ) 376  #CSR_PSKEY_USB_PIO_VBUS 0x02d1 ) 377  #CSR_PSKEY_USB_PIO_WAKE_TIMEOUT 0x02d2 ) 378  #CSR_PSKEY_USB_PIO_RESUME 0x02d3 ) 379  #CSR_PSKEY_USB_BT_SCO_IF_CLASS_CODES 0x02d4 ) 380  #CSR_PSKEY_USB_SUSPEND_PIO_LEVEL 0x02d5 ) 381  #CSR_PSKEY_USB_SUSPEND_PIO_DIR 0x02d6 ) 382  #CSR_PSKEY_USB_SUSPEND_PIO_MASK 0x02d7 ) 383  #CSR_PSKEY_USB_ENDPOINT_0_MAX_PACKET_SIZE 0x02d8 ) 384  #CSR_PSKEY_USB_CONFIG 0x02d9 ) 385  #CSR_PSKEY_RADIOTEST_ATTEN_INIT 0x0320 ) 386  #CSR_PSKEY_RADIOTEST_FIRST_TRIM_TIME 0x0326 ) 387  #CSR_PSKEY_RADIOTEST_SUBSEQUENT_TRIM_TIME 0x0327 ) 388  #CSR_PSKEY_RADIOTEST_LO_LVL_TRIM_ENABLE 0x0328 ) 389  #CSR_PSKEY_RADIOTEST_DISABLE_MODULATION 0x032ø ) 390  #CSR_PSKEY_RFCOMM_FCON_THRESHOLD 0x0352 ) 391  #CSR_PSKEY_RFCOMM_FCOFF_THRESHOLD 0x0353 ) 392  #CSR_PSKEY_IPV6_STATIC_ADDR 0x0354 ) 393  #CSR_PSKEY_IPV4_STATIC_ADDR 0x0355 ) 394  #CSR_PSKEY_IPV6_STATIC_PREFIX_LEN 0x0356 ) 395  #CSR_PSKEY_IPV6_STATIC_ROUTER_ADDR 0x0357 ) 396  #CSR_PSKEY_IPV4_STATIC_SUBNET_MASK 0x0358 ) 397  #CSR_PSKEY_IPV4_STATIC_ROUTER_ADDR 0x0359 ) 398  #CSR_PSKEY_MDNS_NAME 0x035¨ ) 399  #CSR_PSKEY_FIXED_PIN 0x035b ) 400  #CSR_PSKEY_MDNS_PORT 0x035ø ) 401  #CSR_PSKEY_MDNS_TTL 0x035d ) 402  #CSR_PSKEY_MDNS_IPV4_ADDR 0x035 ) 403  #CSR_PSKEY_ARP_CACHE_TIMEOUT 0x035à ) 404  #CSR_PSKEY_HFP_POWER_TABLE 0x0360 ) 405  #CSR_PSKEY_DRAIN_BORE_TIMER_COUNTERS 0x03e7 ) 406  #CSR_PSKEY_DRAIN_BORE_COUNTERS 0x03e6 ) 407  #CSR_PSKEY_LOOP_FILTER_TRIM 0x03e4 ) 408  #CSR_PSKEY_DRAIN_BORE_CURRENT_PEAK 0x03e3 ) 409  #CSR_PSKEY_VM_E2_CACHE_LIMIT 0x03e2 ) 410  #CSR_PSKEY_FORCE_16MHZ_REF_PIO 0x03e1 ) 411  #CSR_PSKEY_CDMA_LO_REF_LIMITS 0x03dà ) 412  #CSR_PSKEY_CDMA_LO_ERROR_LIMITS 0x03d ) 413  #CSR_PSKEY_CLOCK_STARTUP_DELAY 0x03dd ) 414  #CSR_PSKEY_DEEP_SLEEP_CORRECTION_FACTOR 0x03dø ) 415  #CSR_PSKEY_TEMPERATURE_CALIBRATION 0x03db ) 416  #CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA 0x03d¨ ) 417  #CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL 0x03d9 ) 418  #CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB 0x03d8 ) 419  #CSR_PSKEY_TEMPERATURE_VS_DELTA_ANA_FTRIM 0x03d7 ) 420  #CSR_PSKEY_TEST_DELTA_OFFSET 0x03d6 ) 421  #CSR_PSKEY_RX_DYNAMIC_LVL_OFFSET 0x03d4 ) 422  #CSR_PSKEY_TEST_FORCE_OFFSET 0x03d3 ) 423  #CSR_PSKEY_RF_TRAP_BAD_DIVISION_RATIOS 0x03cà ) 424  #CSR_PSKEY_RADIOTEST_CDMA_LO_REF_LIMITS 0x03û ) 425  #CSR_PSKEY_INITIAL_BOOTMODE 0x03cd ) 426  #CSR_PSKEY_ONCHIP_HCI_CLIENT 0x03cø ) 427  #CSR_PSKEY_RX_ATTEN_BACKOFF 0x03ÿ ) 428  #CSR_PSKEY_RX_ATTEN_UPDATE_RATE 0x03c9 ) 429  #CSR_PSKEY_SYNTH_TXRX_THRESHOLDS 0x03c7 ) 430  #CSR_PSKEY_MIN_WAIT_STATES 0x03c6 ) 431  #CSR_PSKEY_RSSI_CORRECTION 0x03c5 ) 432  #CSR_PSKEY_SCHED_THROTTLE_TIMEOUT 0x03c4 ) 433  #CSR_PSKEY_DEEP_SLEEP_USE_EXTERNAL_CLOCK 0x03c3 ) 434  #CSR_PSKEY_TRIM_RADIO_FILTERS 0x03c2 ) 435  #CSR_PSKEY_TRANSMIT_OFFSET 0x03c1 ) 436  #CSR_PSKEY_USB_VM_CONTROL 0x03c0 ) 437  #CSR_PSKEY_MR_ANA_RX_FTRIM 0x03bà ) 438  #CSR_PSKEY_I2C_CONFIG 0x03b ) 439  #CSR_PSKEY_IQ_LVL_RX 0x03bd ) 440  #CSR_PSKEY_MR_TX_FILTER_CONFIG 0x03bb ) 441  #CSR_PSKEY_MR_TX_CONFIG2 0x03b¨ ) 442  #CSR_PSKEY_USB_DONT_RESET_BOOTMODE_ON_HOST_RESET 0x03b9 ) 443  #CSR_PSKEY_LC_USE_THROTTLING 0x03b8 ) 444  #CSR_PSKEY_CHARGER_TRIM 0x03b7 ) 445  #CSR_PSKEY_CLOCK_REQUEST_FEATURES 0x03b6 ) 446  #CSR_PSKEY_TRANSMIT_OFFSET_CLASS1 0x03b4 ) 447  #CSR_PSKEY_TX_AVOID_PA_CLASS1_PIO 0x03b3 ) 448  #CSR_PSKEY_MR_PIO_CONFIG 0x03b2 ) 449  #CSR_PSKEY_UART_CONFIG2 0x03b1 ) 450  #CSR_PSKEY_CLASS1_IQ_LVL 0x03b0 ) 451  #CSR_PSKEY_CLASS1_TX_CONFIG2 0x03aà ) 452  #CSR_PSKEY_TEMPERATURE_VS_DELTA_INTERNAL_PA_CLASS1 0x03« ) 453  #CSR_PSKEY_TEMPERATURE_VS_DELTA_EXTERNAL_PA_CLASS1 0x03ad ) 454  #CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_PRE_LVL_MR 0x03aø ) 455  #CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_HEADER 0x03ab ) 456  #CSR_PSKEY_TEMPERATURE_VS_DELTA_TX_BB_MR_PAYLOAD 0x03¯ ) 457  #CSR_PSKEY_RX_MR_EQ_TAPS 0x03a9 ) 458  #CSR_PSKEY_TX_PRE_LVL_CLASS1 0x03a8 ) 459  #CSR_PSKEY_ANALOGUE_ATTENUATOR 0x03a7 ) 460  #CSR_PSKEY_MR_RX_FILTER_TRIM 0x03a6 ) 461  #CSR_PSKEY_MR_RX_FILTER_RESPONSE 0x03a5 ) 462  #CSR_PSKEY_PIO_WAKEUP_STATE 0x039à ) 463  #CSR_PSKEY_MR_TX_IF_ATTEN_OFF_TEMP 0x0394 ) 464  #CSR_PSKEY_LO_DIV_LATCH_BYPASS 0x0393 ) 465  #CSR_PSKEY_LO_VCO_STANDBY 0x0392 ) 466  #CSR_PSKEY_SLOW_CLOCK_FILTER_SHIFT 0x0391 ) 467  #CSR_PSKEY_SLOW_CLOCK_FILTER_DIVIDER 0x0390 ) 468  #CSR_PSKEY_USB_ATTRIBUTES_POWER 0x03f2 ) 469  #CSR_PSKEY_USB_ATTRIBUTES_WAKEUP 0x03f3 ) 470  #CSR_PSKEY_DFU_ATTRIBUTES_MANIFESTATION_TOLERANT 0x03f4 ) 471  #CSR_PSKEY_DFU_ATTRIBUTES_CAN_UPLOAD 0x03f5 ) 472  #CSR_PSKEY_DFU_ATTRIBUTES_CAN_DOWNLOAD 0x03f6 ) 473  #CSR_PSKEY_UART_CONFIG_STOP_BITS 0x03fø ) 474  #CSR_PSKEY_UART_CONFIG_PARITY_BIT 0x03fd ) 475  #CSR_PSKEY_UART_CONFIG_FLOW_CTRL_EN 0x03ã ) 476  #CSR_PSKEY_UART_CONFIG_RTS_AUTO_EN 0x03fà ) 477  #CSR_PSKEY_UART_CONFIG_RTS 0x0400 ) 478  #CSR_PSKEY_UART_CONFIG_TX_ZERO_EN 0x0401 ) 479  #CSR_PSKEY_UART_CONFIG_NON_BCSP_EN 0x0402 ) 480  #CSR_PSKEY_UART_CONFIG_RX_RATE_DELAY 0x0403 ) 481  #CSR_PSKEY_UART_SEQ_TIMEOUT 0x0405 ) 482  #CSR_PSKEY_UART_SEQ_RETRIES 0x0406 ) 483  #CSR_PSKEY_UART_SEQ_WINSIZE 0x0407 ) 484  #CSR_PSKEY_UART_USE_CRC_ON_TX 0x0408 ) 485  #CSR_PSKEY_UART_HOST_INITIAL_STATE 0x0409 ) 486  #CSR_PSKEY_UART_HOST_ATTENTION_SPAN 0x040¨ ) 487  #CSR_PSKEY_UART_HOST_WAKEUP_TIME 0x040b ) 488  #CSR_PSKEY_UART_HOST_WAKEUP_WAIT 0x040ø ) 489  #CSR_PSKEY_BCSP_LM_MODE 0x0410 ) 490  #CSR_PSKEY_BCSP_LM_SYNC_RETRIES 0x0411 ) 491  #CSR_PSKEY_BCSP_LM_TSHY 0x0412 ) 492  #CSR_PSKEY_UART_DFU_CONFIG_STOP_BITS 0x0417 ) 493  #CSR_PSKEY_UART_DFU_CONFIG_PARITY_BIT 0x0418 ) 494  #CSR_PSKEY_UART_DFU_CONFIG_FLOW_CTRL_EN 0x0419 ) 495  #CSR_PSKEY_UART_DFU_CONFIG_RTS_AUTO_EN 0x041¨ ) 496  #CSR_PSKEY_UART_DFU_CONFIG_RTS 0x041b ) 497  #CSR_PSKEY_UART_DFU_CONFIG_TX_ZERO_EN 0x041ø ) 498  #CSR_PSKEY_UART_DFU_CONFIG_NON_BCSP_EN 0x041d ) 499  #CSR_PSKEY_UART_DFU_CONFIG_RX_RATE_DELAY 0x041 ) 500  #CSR_PSKEY_AMUX_AIO0 0x041à ) 501  #CSR_PSKEY_AMUX_AIO1 0x0420 ) 502  #CSR_PSKEY_AMUX_AIO2 0x0421 ) 503  #CSR_PSKEY_AMUX_AIO3 0x0422 ) 504  #CSR_PSKEY_LOCAL_NAME_SIMPLIFIED 0x0423 ) 505  #CSR_PSKEY_EXTENDED_STUB 0x2001 ) 507 * c¤_bužddeáo¡r ( ušt16_t def ); 508 * c¤_buždidto¡r ( ušt16_t id ); 509 * c¤_chv”to¡r ( ušt16_t v” , ušt16_ˆ »v ); 510 * c¤_pskeyto¡r ( ušt16_t pskey ); 511 * c¤_pskeytov® ( ušt16_t pskey ); 513  c¤_Ý’_hci (* deviû ); 514  c¤_»ad_hci ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ); 515  c¤_wr™e_hci ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ); 516  c¤_þo£_hci (); 518  c¤_Ý’_usb (* deviû ); 519  c¤_»ad_usb ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ); 520  c¤_wr™e_usb ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ); 521  c¤_þo£_usb (); 523  c¤_Ý’_bc¥ (* deviû , ¥“d_t bc¥_¿‹ ); 524  c¤_»ad_bc¥ ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ); 525  c¤_wr™e_bc¥ ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ); 526  c¤_þo£_bc¥ (); 528  c¤_Ý’_h4 (* deviû ); 529  c¤_»ad_h4 ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ); 530  c¤_wr™e_h4 ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ); 531  c¤_þo£_h4 (); 533  c¤_Ý’_3wœe (* deviû ); 534  c¤_»ad_3wœe ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ); 535  c¤_wr™e_3wœe ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ); 536  c¤_þo£_3wœe (); 538  c¤_wr™e_v¬id_v®u–ess ( dd , ušt16_t £qnum , ušt16_ˆ v¬id ); 539  c¤_wr™e_v¬id_com¶ex ( dd , ušt16_t £qnum , ušt16_ˆ v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ); 540  c¤_»ad_v¬id_com¶ex ( dd , ušt16_t £qnum , ušt16_ˆ v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ); 541  c¤_»ad_v¬id_ušt16 ( dd , ušt16_t £qnum , ušt16_ˆ v¬id , ušt16_ˆ* v®ue ); 542  c¤_»ad_v¬id_ušt32 ( dd , ušt16_t £qnum , ušt16_ˆ v¬id , ušt32_t * v®ue ); 543  c¤_»ad_pskey_com¶ex ( dd , ušt16_t £qnum , ušt16_ˆ pskey , ušt16_ˆ ¡Ües , ušt8_t * v®ue , ušt16_ˆ Ëngth ); 544  c¤_wr™e_pskey_com¶ex ( dd , ušt16_t £qnum , ušt16_ˆ pskey , ušt16_ˆ ¡Ües , ušt8_t * v®ue , ušt16_ˆ Ëngth ); 545  c¤_»ad_pskey_ušt16 ( dd , ušt16_t £qnum , ušt16_ˆ pskey , ušt16_ˆ ¡Ües , ušt16_ˆ* v®ue ); 546  c¤_wr™e_pskey_ušt16 ( dd , ušt16_t £qnum , ušt16_ˆ pskey , ušt16_ˆ ¡Ües , ušt16_ˆ v®ue ); 547  c¤_»ad_pskey_ušt32 ( dd , ušt16_t £qnum , ušt16_ˆ pskey , ušt16_ˆ ¡Ües , ušt32_t * v®ue ); 548  c¤_wr™e_pskey_ušt32 ( dd , ušt16_t £qnum , ušt16_ˆ pskey , ušt16_ˆ ¡Ües , ušt32_t v®ue ); 550  p¤_put ( ušt16_t pskey , ušt8_t * v®ue , ušt16_ˆ size ); 551  p¤_g‘ ( ušt16_t * pskey , ušt8_t * v®ue , ušt16_ˆ* size ); 552  p¤_»ad (cÚ¡ * fž’ame ); 553  p¤_´št (); @tools/csr_3wire.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<¡dšt.h > 32  ~"c¤.h " 34  ušt16_t g£qnum = 0x0000; 36  $c¤_Ý’_3wœe (* deviû ) 38 `årštf ( ¡d”r , "Transport‚ot implemented\n"); 41 } } 43  $do_commªd ( ušt16_t commªd , ušt16_ˆ £qnum , ušt16_ˆ v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 45 ”ºo = EIO ; 48 } } 50  $c¤_»ad_3wœe ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 52  `do_commªd (0x0000, £qnum ++, v¬id , v®ue , Ëngth ); 53 } } 55  $c¤_wr™e_3wœe ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 57  `do_commªd (0x0002, £qnum ++, v¬id , v®ue , Ëngth ); 58 } } 60  $c¤_þo£_3wœe () 62 } } @tools/csr_bcsp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~ 32  ~<¡ršg.h > 33  ~<¡dšt.h > 34  ~<‹rmios.h > 36  ~"c¤.h " 37  ~"ubc¥.h " 39  ušt16_t g£qnum = 0x0000; 41  gfd = -1; 43  ubc¥_·ck‘ g£nd_·ck‘ ; 44  ušt8_t g£nd_bufãr [512]; 46  ubc¥_·ck‘ g»ûive_·ck‘ ; 47  ušt8_t g»ûive_bufãr [512]; 49  $c¤_Ý’_bc¥ (* deviû , ¥“d_t bc¥_¿‹ ) 51  ‹rmios ti ; 52 ušt8_t d–ay , aùiv™y = 0x00; 53  timeout = 0; 55 ià(! deviû ) 56 deviû = "/dev/ttyS0"; 58 fd = `Ý’ ( deviû , O_RDWR | O_NOCTTY ); 59 ià( fd < 0) { 60 `årštf ( ¡d”r , "Can't open serial…ort: %s (%d)\n", 61 `¡»¼Ü ( ”ºo ),ƒrrno); 65 `tcæush ( fd , TCIOFLUSH ); 67 ià( `tcg‘©Œ ( fd , & ti ) < 0) { 68 `årštf ( ¡d”r , "Can't get…ort settings: %s (%d)\n", 69 `¡»¼Ü ( ”ºo ),ƒrrno); 70 `þo£ ( fd ); 74 `cfmak”aw (& ti ); 76 ti . c_cæag |ð CLOCAL ; 77 ti . c_cæag &ð~ CRTSCTS ; 78 ti . c_cæag |ð PARENB ; 79 ti . c_cæag &ð~ PARODD ; 80 ti . c_cæag &ð~ CSIZE ; 81 ti . c_cæag |ð CS8 ; 82 ti . c_cæag &ð~ CSTOPB ; 84 ti . c_cc [ VMIN ] = 1; 85 ti . c_cc [ VTIME ] = 0; 87 `cf£to¥“d (& ti , bc¥_¿‹ ); 89 ià( `tc£‰r ( fd , TCSANOW , & ti ) < 0) { 90 `årštf ( ¡d”r , "Can't change…ort settings: %s (%d)\n", 91 `¡»¼Ü ( ”ºo ),ƒrrno); 92 `þo£ ( fd ); 96 `tcæush ( fd , TCIOFLUSH ); 98 ià( `fúŽ ( fd , F_SETFL , fúŽ(fd, F_GETFL , 0è| O_NONBLOCK ) < 0) { 99 `årštf ( ¡d”r , "Can't set‚on blocking mode: %s (%d)\n", 100 `¡»¼Ü ( ”ºo ),ƒrrno); 101 `þo£ ( fd ); 105 `mem£t (& £nd_·ck‘ , 0, (send_packet)); 106 `mem£t (& »ûive_·ck‘ , 0, (receive_packet)); 108 `ubc¥_š™Ÿlize (); 110 £nd_·ck‘ . Ëngth = 512; 111 £nd_·ck‘ . ·ylßd = £nd_bufãr ; 113 »ûive_·ck‘ . Ëngth = 512; 114 »ûive_·ck‘ . ·ylßd = »ûive_bufãr ; 116 `ubc¥_»ûive_·ck‘ (& »ûive_·ck‘ ); 119 d–ay = `ubc¥_pÞl (& aùiv™y ); 121 ià( aùiv™y & UBCSP_PACKET_SENT ) 124 ià( d–ay ) { 125 `u¦“p ( d–ay * 100); 127 ià( timeout ++ > 5000) { 128 `årštf ( ¡d”r , "Initializationimed out\n"); 135 } } 137  $put_u¬t ( ušt8_t ch ) 139 ià( `wr™e ( fd , & ch , 1) < 0) 140 `årštf ( ¡d”r , "UART writeƒrror\n"); 141 } } 143 ušt8_t $g‘_u¬t ( ušt8_t * ch ) 145  »s = `»ad ( fd , ch , 1); 146  »s > 0 ?„es : 0; 147 } } 149  $do_commªd ( ušt16_t commªd , ušt16_ˆ £qnum , ušt16_ˆ v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 151  ý [254], ½ [254]; 152 ušt8_t cmd [10]; 153 ušt16_t size ; 154 ušt8_t d–ay , aùiv™y = 0x00; 155  timeout = 0, £Á = 0; 157 size = ( Ëngth < 8) ? 9 : ((length + 1) / 2) + 5; 159 cmd [0] = commªd & 0xff; 160 cmd [1] = commªd >> 8; 161 cmd [2] = size & 0xff; 162 cmd [3] = size >> 8; 163 cmd [4] = £qnum & 0xff; 164 cmd [5] = £qnum >> 8; 165 cmd [6] = v¬id & 0xff; 166 cmd [7] = v¬id >> 8; 167 cmd [8] = 0x00; 168 cmd [9] = 0x00; 170 `mem£t ( ý , 0, (cp)); 171 ý [0] = 0x00; 172 ý [1] = 0xfc; 173 ý [2] = ( size * 2) + 1; 174 ý [3] = 0xc2; 175 `memýy ( ý + 4, cmd , (cmd)); 176 `memýy ( ý + 14, v®ue , Ëngth ); 178 »ûive_·ck‘ . Ëngth = 512; 179 `ubc¥_»ûive_·ck‘ (& »ûive_·ck‘ ); 181 £nd_·ck‘ . chªÃl = 5; 182 £nd_·ck‘ . »lŸbË = 1; 183 £nd_·ck‘ . Ëngth = ( size * 2) + 4; 184 `memýy ( £nd_·ck‘ . ·ylßd , ý , ( size * 2) + 4); 186 `ubc¥_£nd_·ck‘ (& £nd_·ck‘ ); 189 d–ay = `ubc¥_pÞl (& aùiv™y ); 191 ià( aùiv™y & UBCSP_PACKET_SENT ) { 192  v¬id ) { 193  CSR_VARID_COLD_RESET : 194  CSR_VARID_WARM_RESET : 195  CSR_VARID_COLD_HALT : 196  CSR_VARID_WARM_HALT : 200 £Á = 1; 201 timeout = 0; 204 ià( aùiv™y & UBCSP_PACKET_RECEIVED ) { 205 ià( £Á && »ûive_·ck‘ . chªÃl == 5 && 206 »ûive_·ck‘ . ·ylßd [0] == 0xff) { 207 `memýy ( ½ , »ûive_·ck‘ . ·ylßd , 208 »ûive_·ck‘ . Ëngth ); 212 »ûive_·ck‘ . Ëngth = 512; 213 `ubc¥_»ûive_·ck‘ (& »ûive_·ck‘ ); 214 timeout = 0; 217 ià( d–ay ) { 218 `u¦“p ( d–ay * 100); 220 ià( timeout ++ > 5000) { 221 `årštf ( ¡d”r , "Operationimed out\n"); 222 ”ºo = ETIMEDOUT ; 228 ià( ½ [0] != 0xff ||„p[2] != 0xc2) { 229 ”ºo = EIO ; 233 ià(( ½ [11] + (rp[12] << 8)) != 0) { 234 ”ºo = ENXIO ; 238 `memýy ( v®ue , ½ + 13, Ëngth ); 241 } } 243  $c¤_»ad_bc¥ ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 245  `do_commªd (0x0000, £qnum ++, v¬id , v®ue , Ëngth ); 246 } } 248  $c¤_wr™e_bc¥ ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 250  `do_commªd (0x0002, £qnum ++, v¬id , v®ue , Ëngth ); 251 } } 253  $c¤_þo£_bc¥ () 255 `þo£ ( fd ); 256 } } @tools/csr_h4.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~ 32  ~<¡ršg.h > 33  ~<¡dšt.h > 34  ~<‹rmios.h > 36  ~"c¤.h " 38  ušt16_t g£qnum = 0x0000; 40  gfd = -1; 42  $c¤_Ý’_h4 (* deviû ) 44  ‹rmios ti ; 46 ià(! deviû ) 47 deviû = "/dev/ttyS0"; 49 fd = `Ý’ ( deviû , O_RDWR | O_NOCTTY ); 50 ià( fd < 0) { 51 `årštf ( ¡d”r , "Can't open serial…ort: %s (%d)\n", 52 `¡»¼Ü ( ”ºo ),ƒrrno); 56 `tcæush ( fd , TCIOFLUSH ); 58 ià( `tcg‘©Œ ( fd , & ti ) < 0) { 59 `årštf ( ¡d”r , "Can't get…ort settings: %s (%d)\n", 60 `¡»¼Ü ( ”ºo ),ƒrrno); 61 `þo£ ( fd ); 65 `cfmak”aw (& ti ); 67 ti . c_cæag |ð CLOCAL ; 68 ti . c_cæag |ð CRTSCTS ; 70 `cf£to¥“d (& ti , B38400 ); 72 ià( `tc£‰r ( fd , TCSANOW , & ti ) < 0) { 73 `årštf ( ¡d”r , "Can't change…ort settings: %s (%d)\n", 74 `¡»¼Ü ( ”ºo ),ƒrrno); 75 `þo£ ( fd ); 79 `tcæush ( fd , TCIOFLUSH ); 82 } } 84  $do_commªd ( ušt16_t commªd , ušt16_ˆ £qnum , ušt16_ˆ v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 86  ý [254], ½ [254]; 87 ušt8_t cmd [10]; 88 ušt16_t size ; 89  Ën , off£t = 3; 91 size = ( Ëngth < 8) ? 9 : ((length + 1) / 2) + 5; 93 cmd [0] = commªd & 0xff; 94 cmd [1] = commªd >> 8; 95 cmd [2] = size & 0xff; 96 cmd [3] = size >> 8; 97 cmd [4] = £qnum & 0xff; 98 cmd [5] = £qnum >> 8; 99 cmd [6] = v¬id & 0xff; 100 cmd [7] = v¬id >> 8; 101 cmd [8] = 0x00; 102 cmd [9] = 0x00; 104 `mem£t ( ý , 0, (cp)); 105 ý [0] = 0x01; 106 ý [1] = 0x00; 107 ý [2] = 0xfc; 108 ý [3] = ( size * 2) + 1; 109 ý [4] = 0xc2; 110 `memýy ( ý + 5, cmd , (cmd)); 111 `memýy ( ý + 15, v®ue , Ëngth ); 113 ià( `wr™e ( fd , ý , ( size * 2) + 5) < 0) 116  v¬id ) { 117  CSR_VARID_COLD_RESET : 118  CSR_VARID_WARM_RESET : 119  CSR_VARID_COLD_HALT : 120  CSR_VARID_WARM_HALT : 125 ià( `»ad ( fd , ½ , 1) < 1) 127 }  ½ [0] != 0x04); 129 ià( `»ad ( fd , ½ + 1, 2) < 2) 133 Ën = `»ad ( fd , ½ + off£t , (rp) - offset); 134 off£t +ð Ën ; 135 }  off£t < ½ [2] + 3); 137 ià( ½ [0] != 0x04 ||„p[1] != 0xff ||„p[3] != 0xc2) { 138 ”ºo = EIO ; 142 ià(( ½ [12] + (rp[13] << 8)) != 0) { 143 ”ºo = ENXIO ; 147 `memýy ( v®ue , ½ + 14, Ëngth ); 150 } } 152  $c¤_»ad_h4 ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 154  `do_commªd (0x0000, £qnum ++, v¬id , v®ue , Ëngth ); 155 } } 157  $c¤_wr™e_h4 ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 159  `do_commªd (0x0002, £qnum ++, v¬id , v®ue , Ëngth ); 160 } } 162  $c¤_þo£_h4 () 164 `þo£ ( fd ); 165 } } @tools/csr_hci.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<¡ršg.h > 31  ~ 33  ~ 34  ~ 35  ~ 37  ~"c¤.h " 39  ušt16_t g£qnum = 0x0000; 41  gdd = -1; 43  $c¤_Ý’_hci (* deviû ) 45  hci_dev_šfo di ; 46  hci_v”siÚ v” ; 47  dev = 0; 49 ià( deviû ) { 50 dev = `hci_devid ( deviû ); 51 ià( dev < 0) { 52 `årštf ( ¡d”r , "Device‚ot‡vailable\n"); 57 dd = `hci_Ý’_dev ( dev ); 58 ià( dd < 0) { 59 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 60 dev , `¡»¼Ü ( ”ºo ),ƒrrno); 64 ià( `hci_devšfo ( dev , & di ) < 0) { 65 `årštf ( ¡d”r , "Can't get device info for hci%d: %s (%d)\n", 66 dev , `¡»¼Ü ( ”ºo ),ƒrrno); 67 `hci_þo£_dev ( dd ); 71 ià( `hci_»ad_loÿl_v”siÚ ( dd , & v” , 1000) < 0) { 72 `årštf ( ¡d”r , "Can't„ead version info for hci%d: %s (%d)\n", 73 dev , `¡»¼Ü ( ”ºo ),ƒrrno); 74 `hci_þo£_dev ( dd ); 78 ià( v” . mªuçùu»r != 10) { 79 `årštf ( ¡d”r , "Unsupported manufacturer\n"); 80 `hci_þo£_dev ( dd ); 85 } } 87  $do_commªd ( ušt16_t commªd , ušt16_ˆ £qnum , ušt16_ˆ v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 89  ý [254], ½ [254]; 90  hci_»que¡ rq ; 91 ušt8_t cmd [10]; 92 ušt16_t size ; 94 size = ( Ëngth < 8) ? 9 : ((length + 1) / 2) + 5; 96 cmd [0] = commªd & 0xff; 97 cmd [1] = commªd >> 8; 98 cmd [2] = size & 0xff; 99 cmd [3] = size >> 8; 100 cmd [4] = £qnum & 0xff; 101 cmd [5] = £qnum >> 8; 102 cmd [6] = v¬id & 0xff; 103 cmd [7] = v¬id >> 8; 104 cmd [8] = 0x00; 105 cmd [9] = 0x00; 107 `mem£t ( ý , 0, (cp)); 108 ý [0] = 0xc2; 109 `memýy ( ý + 1, cmd , (cmd)); 110 `memýy ( ý + 11, v®ue , Ëngth ); 112  v¬id ) { 113  CSR_VARID_COLD_RESET : 114  CSR_VARID_WARM_RESET : 115  CSR_VARID_COLD_HALT : 116  CSR_VARID_WARM_HALT : 117  `hci_£nd_cmd ( dd , OGF_VENDOR_CMD , 0x00, ( size * 2è+ 1, ý ); 120 `mem£t (& rq , 0, (rq)); 121 rq . ogf = OGF_VENDOR_CMD ; 122 rq . ocf = 0x00; 123 rq . ev’t = EVT_VENDOR ; 124 rq . ý¬am = ý ; 125 rq . þ’ = ( size * 2) + 1; 126 rq . ½¬am = ½ ; 127 rq . ¾’ = ( ½ ); 129 ià( `hci_£nd_»q ( dd , & rq , 2000) < 0) 132 ià( ½ [0] != 0xc2) { 133 ”ºo = EIO ; 137 ià(( ½ [9] + (rp[10] << 8)) != 0) { 138 ”ºo = ENXIO ; 142 `memýy ( v®ue , ½ + 11, Ëngth ); 145 } } 147  $c¤_»ad_hci ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 149  `do_commªd (0x0000, £qnum ++, v¬id , v®ue , Ëngth ); 150 } } 152  $c¤_wr™e_hci ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 154  `do_commªd (0x0002, £qnum ++, v¬id , v®ue , Ëngth ); 155 } } 157  $c¤_þo£_hci () 159 `hci_þo£_dev ( dd ); 160 } } @tools/csr_usb.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<ùy³.h > 31  ~ 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 35  ~ 36  ~ 37  ~ 39  ~"c¤.h " 41  #USB_TYPE_CLASS (0x01 << 5) ) 43  #USB_RECIP_DEVICE 0x00 ) 45  #USB_ENDPOINT_IN 0x80 ) 46  #USB_ENDPOINT_OUT 0x00 ) 48  susbfs_ù¾Œªsãr { 49 ušt8_t mbmReque¡Ty³ ; 50 ušt8_t mbReque¡ ; 51 ušt16_t mwV®ue ; 52 ušt16_t mwIndex ; 53 ušt16_t mwL’gth ; 54 ušt32_t mtimeout ; 55 * md©a ; 58  susbfs_bulkŒªsãr { 59  m• ; 60  mËn ; 61  mtimeout ; 62 * md©a ; 65  #USBFS_IOCTL_CONTROL `_IOWR ('U', 0,  usbfs_ù¾Œªsãr ) ) 66  #USBFS_IOCTL_BULK `_IOWR ('U', 2,  usbfs_bulkŒªsãr ) ) 67  #USBFS_IOCTL_CLAIMINTF `_IOR ('U', 15, ) ) 68  #USBFS_IOCTL_RELEASEINTF `_IOR ('U', 16, ) ) 70  $»ad_v®ue (cÚ¡ * Çme , cÚ¡ * ©Œ , cÚ¡ * fÜm© ) 72  ·th [ PATH_MAX ]; 73 FILE * fže ; 74  n , v®ue ; 76 `¢´štf ( ·th , Õ©h), "/sys/bus/usb/deviûs/%s/%s", Çme , ©Œ ); 78 fže = `fÝ’ ( ·th , "r"); 79 ià(! fže ) 82 n = `fsÿnf ( fže , fÜm© , & v®ue ); 83 ià( n != 1) { 84 `fþo£ ( fže ); 88 `fþo£ ( fže ); 89  v®ue ; 90 } } 92 * $check_deviû (cÚ¡ * Çme ) 94  ·th [ PATH_MAX ]; 95  bu¢um , devnum , v’dÜ , ´oduù ; 97 bu¢um = `»ad_v®ue ( Çme , "busnum", "%d"); 98 ià( bu¢um < 0) 99  NULL ; 101 devnum = `»ad_v®ue ( Çme , "devnum", "%d"); 102 ià( devnum < 0) 103  NULL ; 105 `¢´štf ( ·th , Õ©h), "/dev/bus/usb/%03u/%03u", bu¢um , devnum ); 107 v’dÜ = `»ad_v®ue ( Çme , "idVendor", "%04x"); 108 ià( v’dÜ < 0) 109  NULL ; 111 ´oduù = `»ad_v®ue ( Çme , "idProduct", "%04x"); 112 ià( ´oduù < 0) 113  NULL ; 115 ià( v’dÜ !ð0x0a12 || ´oduù != 0x0001) 116  NULL ; 118  `¡rdup ( ·th ); 119 } } 121 * $fšd_deviû () 123 * ·th = NULL ; 124 DIR * dœ ; 126 dœ = `Ý’dœ ("/sys/bus/usb/devices"); 127 ià(! dœ ) 128  NULL ; 131  dœ’t * d ; 133 d = `»addœ ( dœ ); 134 ià(! d ) 137 ià((! `isdig™ ( d -> d_Çme [0]è&& `¡ºcmp (d->d_name, "usb", 3)) 138 || `¡rchr ( d -> d_Çme , ':')) 141 ·th = `check_deviû ( d -> d_Çme ); 142 ià( ·th ) 146 `þo£dœ ( dœ ); 148  ·th ; 149 } } 151  ušt16_t g£qnum = 0x0000; 152  ghªdË = -1; 154  $c¤_Ý’_usb (* deviû ) 156  š‹rçû = 0; 157 * ·th ; 159 ·th = `fšd_deviû (); 160 ià(! ·th ) { 161 `årštf ( ¡d”r , "Device‚ot‡vailable\n"); 165 hªdË = `Ý’ ( ·th , O_RDWR , O_CLOEXEC | O_NONBLOCK ); 167 `ä“ ( ·th ); 169 ià( hªdË < 0) { 170 `årštf ( ¡d”r , "Can't open device: %s (%d)\n", 171 `¡»¼Ü ( ”ºo ),ƒrrno); 175 ià( `ioùl ( hªdË , USBFS_IOCTL_CLAIMINTF , & š‹rçû ) < 0) { 176 `årštf ( ¡d”r , "Can't claim interface: %s (%d)\n", 177 `¡»¼Ü ( ”ºo ),ƒrrno); 178 `þo£ ( hªdË ); 179 hªdË = -1; 184 } } 186  $cÚŒÞ_wr™e ( fd , * d©a ,  size ) 188  usbfs_ù¾Œªsãr Œªsãr ; 190 Œªsãr . bmReque¡Ty³ = USB_TYPE_CLASS | USB_ENDPOINT_OUT | 191 USB_RECIP_DEVICE ; 192 Œªsãr . bReque¡ = 0; 193 Œªsãr . wV®ue = 0; 194 Œªsãr . wIndex = 0; 195 Œªsãr . wL’gth = size , 196 Œªsãr . timeout = 2000; 197 Œªsãr . d©a = data; 199 ià( `ioùl ( fd , USBFS_IOCTL_CONTROL , & Œªsãr ) < 0) { 200 `årštf ( ¡d”r , "Controlransfer failed: %s (%d)\n", 201 `¡»¼Ü ( ”ºo ),ƒrrno); 206 } } 208  $š‹¼u±_»ad ( fd ,  ’dpošt , 209 * d©a ,  size ) 211  usbfs_bulkŒªsãr Œªsãr ; 213 Œªsãr . • = ’dpošt ; 214 Œªsãr . Ën = size , 215 Œªsãr . timeout = 20; 216 Œªsãr . d©a = data; 218  `ioùl ( fd , USBFS_IOCTL_BULK , & Œªsãr ); 219 } } 221  $do_commªd ( ušt16_t commªd , ušt16_ˆ £qnum , ušt16_ˆ v¬id , 222 ušt8_t * v®ue , ušt16_t Ëngth ) 224  ý [254], ½ [254]; 225 ušt8_t cmd [10]; 226 ušt16_t size ; 227  Ën , off£t = 0; 229 size = ( Ëngth < 8) ? 9 : ((length + 1) / 2) + 5; 231 cmd [0] = commªd & 0xff; 232 cmd [1] = commªd >> 8; 233 cmd [2] = size & 0xff; 234 cmd [3] = size >> 8; 235 cmd [4] = £qnum & 0xff; 236 cmd [5] = £qnum >> 8; 237 cmd [6] = v¬id & 0xff; 238 cmd [7] = v¬id >> 8; 239 cmd [8] = 0x00; 240 cmd [9] = 0x00; 242 `mem£t ( ý , 0, (cp)); 243 ý [0] = 0x00; 244 ý [1] = 0xfc; 245 ý [2] = ( size * 2) + 1; 246 ý [3] = 0xc2; 247 `memýy ( ý + 4, cmd , (cmd)); 248 `memýy ( ý + 14, v®ue , Ëngth ); 250 `š‹¼u±_»ad ( hªdË , USB_ENDPOINT_IN | 0x01, ½ , (rp)); 252 `cÚŒÞ_wr™e ( hªdË , ý , ( size * 2) + 4); 254  v¬id ) { 255  CSR_VARID_COLD_RESET : 256  CSR_VARID_WARM_RESET : 257  CSR_VARID_COLD_HALT : 258  CSR_VARID_WARM_HALT : 263 Ën = `š‹¼u±_»ad ( hªdË , USB_ENDPOINT_IN | 0x01, 264 ½ + off£t , (rp) - offset); 265 ià( Ën < 0) 267 off£t +ð Ën ; 268 }  Ën > 0); 270 ià( ½ [0] != 0xff ||„p[2] != 0xc2) { 271 ”ºo = EIO ; 275 ià(( ½ [11] + (rp[12] << 8)) != 0) { 276 ”ºo = ENXIO ; 280 `memýy ( v®ue , ½ + 13, Ëngth ); 283 } } 285  $c¤_»ad_usb ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 287  `do_commªd (0x0000, £qnum ++, v¬id , v®ue , Ëngth ); 288 } } 290  $c¤_wr™e_usb ( ušt16_t v¬id , ušt8_t * v®ue , ušt16_ˆ Ëngth ) 292  `do_commªd (0x0002, £qnum ++, v¬id , v®ue , Ëngth ); 293 } } 295  $c¤_þo£_usb () 297  š‹rçû = 0; 299 `ioùl ( hªdË , USBFS_IOCTL_RELEASEINTF , & š‹rçû ); 301 `þo£ ( hªdË ); 302 hªdË = -1; 303 } } @tools/gap-tester.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 30  ~"¤c/sh¬ed/‹¡”.h " 31  ~"emuÏtÜ/hc›mu.h " 33  DBusCÚÃùiÚ * gdbus_cÚn = NULL ; 34  GDBusCl›Á * gdbus_þ›Á = NULL ; 35  GDBusProxy * gad­‹r_´oxy = NULL ; 37  hc›mu * ghc›mu_¡ack = NULL ; 39  $cÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 41 `‹¡”_´št ("Connectedo daemon"); 43 hc›mu_¡ack = `hc›mu_Ãw ( HCIEMU_TYPE_BREDRLE ); 44 } } 46  $discÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 48 `‹¡”_´št ("Disconnected from daemon"); 50 `dbus_cÚÃùiÚ_uÄef ( dbus_cÚn ); 51 dbus_cÚn = NULL ; 53 `‹¡”_‹¬down_com¶‘e (); 54 } } 56  gboÞ—n $com·»_¡ršg_´Ý”ty ( GDBusProxy * ´oxy , cÚ¡ * Çme , 57 cÚ¡ * v®ue ) 59 DBusMes§geI‹r ™” ; 60 cÚ¡ * ¡r ; 62 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , Çme , & ™” è=ð FALSE ) 63  FALSE ; 65 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_STRING ) 66  FALSE ; 68 `dbus_mes§ge_™”_g‘_basic (& ™” , & ¡r ); 70  `g_¡r_equ® ( ¡r , v®ue ); 71 } } 73  $´oxy_added ( GDBusProxy * ´oxy , * u£r_d©a ) 75 cÚ¡ * š‹rçû ; 77 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 79 ià( `g_¡r_equ® ( š‹rçû , "Üg.bluez.Ad­‹r1"è=ð TRUE ) { 80 ià( `com·»_¡ršg_´Ý”ty ( ´oxy , "Address", 81 `hc›mu_g‘_add»ss ( hc›mu_¡ack )è=ð TRUE ) { 82 ad­‹r_´oxy = ´oxy ; 83 `‹¡”_´št ("Found‡dapter"); 85 `‹¡”_£tup_com¶‘e (); 88 } } 90  $´oxy_»moved ( GDBusProxy * ´oxy , * u£r_d©a ) 92 cÚ¡ * š‹rçû ; 94 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 96 ià( `g_¡r_equ® ( š‹rçû , "Üg.bluez.Ad­‹r1"è=ð TRUE ) { 97 ià( ad­‹r_´oxy =ð ´oxy ) { 98 ad­‹r_´oxy = NULL ; 99 `‹¡”_´št ("Adapter„emoved"); 101 `g_dbus_þ›Á_uÄef ( dbus_þ›Á ); 102 dbus_þ›Á = NULL ; 105 } } 107  $‹¡_£tup (cÚ¡ * ‹¡_d©a ) 109 dbus_cÚn = `g_dbus_£tup_´iv©e ( DBUS_BUS_SYSTEM , NULL , NULL); 111 dbus_þ›Á = `g_dbus_þ›Á_Ãw ( dbus_cÚn , "org.bluez", "/org/bluez"); 113 `g_dbus_þ›Á_£t_cÚÃù_w©ch ( dbus_þ›Á , cÚÃù_hªdËr , NULL ); 114 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( dbus_þ›Á , 115 discÚÃù_hªdËr , NULL ); 117 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( dbus_þ›Á , ´oxy_added , 118 ´oxy_»moved , NULL , NULL); 119 } } 121  $‹¡_run (cÚ¡ * ‹¡_d©a ) 123 `‹¡”_‹¡_·s£d (); 124 } } 126  $‹¡_‹¬down (cÚ¡ * ‹¡_d©a ) 128 `hc›mu_uÄef ( hc›mu_¡ack ); 129 hc›mu_¡ack = NULL ; 130 } } 132  $maš ( ¬gc , * ¬gv []) 134 `‹¡”_š™ (& ¬gc , & ¬gv ); 136 `‹¡”_add ("Ad­‹¸£tup", NULL , ‹¡_£tup , ‹¡_run , ‹¡_‹¬down ); 138  `‹¡”_run (); 139 } } @tools/gatt-service.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<”ºo.h > 29  ~<¡dio.h > 30  ~<¡dboÞ.h > 31  ~ 32  ~ 34  ~ 35  ~ 36  ~ 38  ~"¤c/”rÜ.h " 40  #GATT_MGR_IFACE "Üg.bluez.G©tMªag”1" ) 41  #GATT_SERVICE_IFACE "Üg.bluez.G©tS”viû1" ) 42  #GATT_CHR_IFACE "Üg.bluez.G©tCh¬aù”i¡ic1" ) 43  #GATT_DESCRIPTOR_IFACE "Üg.bluez.G©tDesütÜ1" ) 46  #IAS_UUID "00001802-0000-1000-8000-00805f9b34fb" ) 47  #ALERT_LEVEL_CHR_UUID "00002a06-0000-1000-8000-00805f9b34fb" ) 50  #READ_WRITE_DESCRIPTOR_UUID "8260c653-1a54-426b-9e36-e84c238bc669" ) 52  GMašLoÝ * gmaš_loÝ ; 53  GSLi¡ * g£rviûs ; 54  DBusCÚÃùiÚ * gcÚÃùiÚ ; 56  sch¬aù”i¡ic { 57 * muuid ; 58 * m·th ; 59 ušt8_t * mv®ue ; 60  mvËn ; 61 cÚ¡ ** m´Ýs ; 64  sdesütÜ { 65 * muuid ; 66 * m·th ; 67 ušt8_t * mv®ue ; 68  mvËn ; 76 cÚ¡ cÚ¡ * gŸs_®”t_Ëv–_´Ýs [] = { 78 NULL }; 80  gboÞ—n $desc_g‘_uuid (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 81 DBusMes§geI‹r * ™” , * u£r_d©a ) 83  desütÜ * desc = u£r_d©a ; 85 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & desc -> uuid ); 87  TRUE ; 88 } } 90  gboÞ—n $desc_g‘_v®ue (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 91 DBusMes§geI‹r * ™” , * u£r_d©a ) 93  desütÜ * desc = u£r_d©a ; 94 DBusMes§geI‹r ¬¿y ; 96 `´štf ("DesütÜ(%s): G‘(\"V®ue\")\n", desc -> uuid ); 98 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 99 DBUS_TYPE_BYTE_AS_STRING , & ¬¿y ); 101 ià( desc -> vËn && desc-> v®ue ) 102 `dbus_mes§ge_™”_­³nd_fixed_¬¿y (& ¬¿y , DBUS_TYPE_BYTE , 103 & desc -> v®ue , desc-> vËn ); 105 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ¬¿y ); 107  TRUE ; 108 } } 110  $desc_£t_v®ue (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 111 DBusMes§geI‹r * ™” , 112 GDBusP’dšgPrÝ”tyS‘ id , * u£r_d©a ) 114  desütÜ * desc = u£r_d©a ; 115 DBusMes§geI‹r ¬¿y ; 116 cÚ¡ ušt8_t * v®ue ; 117  vËn ; 119 `´štf ("DesütÜ(%s): S‘(\"V®ue\", ...)\n", desc -> uuid ); 121 `dbus_mes§ge_™”_»cur£ ( ™” , & ¬¿y ); 122 `dbus_mes§ge_™”_g‘_fixed_¬¿y (& ¬¿y , & v®ue , & vËn ); 124 `g_ä“ ( desc -> v®ue ); 125 desc -> v®ue = `g_memdup (v®ue, vËn ); 126 desc -> vËn = vlen; 128 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 130 `g_dbus_em™_´Ý”ty_chªged ( cÚÃùiÚ , desc -> ·th , 131 GATT_DESCRIPTOR_IFACE , "Value"); 133 } } 135 cÚ¡ GDBusPrÝ”tyTabË gdesc_´Ý”t›s [] = { 136 { "UUID", "s", desc_g‘_uuid }, 137 { "V®ue", "ay", desc_g‘_v®ue , desc_£t_v®ue , NULL }, 141  gboÞ—n $chr_g‘_uuid (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 142 DBusMes§geI‹r * ™” , * u£r_d©a ) 144  ch¬aù”i¡ic * chr = u£r_d©a ; 146 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & chr -> uuid ); 148  TRUE ; 149 } } 151  gboÞ—n $chr_g‘_v®ue (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 152 DBusMes§geI‹r * ™” , * u£r_d©a ) 154  ch¬aù”i¡ic * chr = u£r_d©a ; 155 DBusMes§geI‹r ¬¿y ; 157 `´štf ("Ch¬aù”i¡ic(%s): G‘(\"V®ue\")\n", chr -> uuid ); 159 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 160 DBUS_TYPE_BYTE_AS_STRING , & ¬¿y ); 162 `dbus_mes§ge_™”_­³nd_fixed_¬¿y (& ¬¿y , DBUS_TYPE_BYTE , 163 & chr -> v®ue , chr-> vËn ); 165 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ¬¿y ); 167  TRUE ; 168 } } 170  gboÞ—n $chr_g‘_´Ýs (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 171 DBusMes§geI‹r * ™” , * d©a ) 173  ch¬aù”i¡ic * chr = d©a ; 174 DBusMes§geI‹r ¬¿y ; 175  i ; 177 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 178 DBUS_TYPE_STRING_AS_STRING , & ¬¿y ); 180  i = 0; chr -> ´Ýs [i]; i++) 181 `dbus_mes§ge_™”_­³nd_basic (& ¬¿y , 182 DBUS_TYPE_STRING , & chr -> ´Ýs [ i ]); 184 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ¬¿y ); 186  TRUE ; 187 } } 189  $chr_£t_v®ue (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 190 DBusMes§geI‹r * ™” , 191 GDBusP’dšgPrÝ”tyS‘ id , * u£r_d©a ) 193  ch¬aù”i¡ic * chr = u£r_d©a ; 194 DBusMes§geI‹r ¬¿y ; 195 ušt8_t * v®ue ; 196  Ën ; 198 `´štf ("Ch¬aù”i¡ic(%s): S‘('V®ue', ...)\n", chr -> uuid ); 200 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_ARRAY ) { 201 `´štf ("Invalid value for Set('Value'...)\n"); 202 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 203 ERROR_INTERFACE ".InvalidArguments", 208 `dbus_mes§ge_™”_»cur£ ( ™” , & ¬¿y ); 209 `dbus_mes§ge_™”_g‘_fixed_¬¿y (& ¬¿y , & v®ue , & Ën ); 211 `g_ä“ ( chr -> v®ue ); 212 chr -> v®ue = `g_memdup (v®ue, Ën ); 213 chr -> vËn = Ën ; 215 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 216 `g_dbus_em™_´Ý”ty_chªged ( cÚÃùiÚ , chr -> ·th , 217 GATT_CHR_IFACE , "Value"); 218 } } 220 cÚ¡ GDBusPrÝ”tyTabË gchr_´Ý”t›s [] = { 221 { "UUID", "s", chr_g‘_uuid }, 222 { "V®ue", "ay", chr_g‘_v®ue , chr_£t_v®ue , NULL }, 223 { "FÏgs", "as", chr_g‘_´Ýs , NULL , NULL }, 227  gboÞ—n $£rviû_g‘_uuid (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 228 DBusMes§geI‹r * ™” , * u£r_d©a ) 230 cÚ¡ * uuid = u£r_d©a ; 232 `´štf ("G‘ UUID: %s\n", uuid ); 234 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & uuid ); 236  TRUE ; 237 } } 239  gboÞ—n $£rviû_g‘_šþudes (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 240 DBusMes§geI‹r * ™” , * u£r_d©a ) 242 cÚ¡ * uuid = u£r_d©a ; 244 `´štf ("G‘ Inþudes: %s\n", uuid ); 246  TRUE ; 247 } } 249  gboÞ—n $£rviû_exi¡_šþudes (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 250 * u£r_d©a ) 252 cÚ¡ * uuid = u£r_d©a ; 254 `´štf ("Exi¡ Inþudes: %s\n", uuid ); 256  FALSE ; 257 } } 259 cÚ¡ GDBusPrÝ”tyTabË g£rviû_´Ý”t›s [] = { 260 { "UUID", "s", £rviû_g‘_uuid }, 261 { "Inþudes", "ao", £rviû_g‘_šþudes , NULL , 262 £rviû_exi¡_šþudes }, 266  $chr_içû_de¡roy ( gpoš‹r u£r_d©a ) 268  ch¬aù”i¡ic * chr = u£r_d©a ; 270 `g_ä“ ( chr -> uuid ); 271 `g_ä“ ( chr -> v®ue ); 272 `g_ä“ ( chr -> ·th ); 273 `g_ä“ ( chr ); 274 } } 276  $desc_içû_de¡roy ( gpoš‹r u£r_d©a ) 278  desütÜ * desc = u£r_d©a ; 280 `g_ä“ ( desc -> uuid ); 281 `g_ä“ ( desc -> v®ue ); 282 `g_ä“ ( desc -> ·th ); 283 `g_ä“ ( desc ); 284 } } 286  gboÞ—n $»gi¡”_ch¬aù”i¡ic (cÚ¡ * chr_uuid , 287 cÚ¡ ušt8_t * v®ue ,  vËn , 288 cÚ¡ ** ´Ýs , 289 cÚ¡ * desc_uuid , 290 cÚ¡ * £rviû_·th ) 292  ch¬aù”i¡ic * chr ; 293  desütÜ * desc ; 294  id = 1; 296 chr = `g_Ãw0 ( ch¬aù”i¡ic , 1); 297 chr -> uuid = `g_¡rdup ( chr_uuid ); 298 chr -> v®ue = `g_memdup (v®ue, vËn ); 299 chr -> vËn = vlen; 300 chr -> ´Ýs =…rops; 301 chr -> ·th = `g_¡rdup_´štf ("%s/ch¬aù”i¡ic%d", £rviû_·th , id ++); 303 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚÃùiÚ , chr -> ·th , GATT_CHR_IFACE , 304 NULL , NULL, chr_´Ý”t›s , 305 chr , chr_içû_de¡roy )) { 306 `´štf ("Couldn't„egister characteristic interface\n"); 307 `chr_içû_de¡roy ( chr ); 308  FALSE ; 311 ià(! desc_uuid ) 312  TRUE ; 314 desc = `g_Ãw0 ( desütÜ , 1); 315 desc -> uuid = `g_¡rdup ( desc_uuid ); 316 desc -> ·th = `g_¡rdup_´štf ("%s/desütÜ%d", chr ->·th, id ++); 318 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚÃùiÚ , desc -> ·th , 319 GATT_DESCRIPTOR_IFACE , 320 NULL , NULL, desc_´Ý”t›s , 321 desc , desc_içû_de¡roy )) { 322 `´štf ("Couldn't„egister descriptor interface\n"); 323 `g_dbus_uÄegi¡”_š‹rçû ( cÚÃùiÚ , chr -> ·th , 324 GATT_CHR_IFACE ); 326 `desc_içû_de¡roy ( desc ); 327  FALSE ; 330  TRUE ; 331 } } 333 * $»gi¡”_£rviû (cÚ¡ * uuid ) 335  id = 1; 336 * ·th ; 338 ·th = `g_¡rdup_´štf ("/£rviû%d", id ++); 339 ià(! `g_dbus_»gi¡”_š‹rçû ( cÚÃùiÚ , ·th , GATT_SERVICE_IFACE , 340 NULL , NULL, £rviû_´Ý”t›s , 341 `g_¡rdup ( uuid ), g_ä“ )) { 342 `´štf ("Couldn't„egister service interface\n"); 343 `g_ä“ ( ·th ); 344  NULL ; 347  ·th ; 348 } } 350  $ü—‹_£rviûs () 352 * £rviû_·th ; 353 ušt8_t Ëv– = 0; 355 £rviû_·th = `»gi¡”_£rviû ( IAS_UUID ); 356 ià(! £rviû_·th ) 360 ià(! `»gi¡”_ch¬aù”i¡ic ( ALERT_LEVEL_CHR_UUID , 361 & Ëv– , (level), 362 Ÿs_®”t_Ëv–_´Ýs , 363 READ_WRITE_DESCRIPTOR_UUID , 364 £rviû_·th )) { 365 `´štf ("Couldn't„egister Alert Level characteristic (IAS)\n"); 366 `g_dbus_uÄegi¡”_š‹rçû ( cÚÃùiÚ , £rviû_·th , 367 GATT_SERVICE_IFACE ); 368 `g_ä“ ( £rviû_·th ); 372 £rviûs = `g_¦i¡_´•’d (£rviûs, £rviû_·th ); 373 `´štf ("Regi¡”ed s”viû: %s\n", £rviû_·th ); 374 } } 376  $»gi¡”_ex‹º®_£rviû_»¶y ( DBusP’dšgC®l * ÿÎ , 377 * u£r_d©a ) 379 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 380 DBusE¼Ü d”r ; 382 `dbus_”rÜ_š™ (& d”r ); 383 `dbus_£t_”rÜ_äom_mes§ge (& d”r , »¶y ); 385 ià( `dbus_”rÜ_is_£t (& d”r )) 386 `´štf ("Regi¡”S”viû: %s\n", d”r . mes§ge ); 388 `´štf ("RegisterService: OK\n"); 390 `dbus_mes§ge_uÄef ( »¶y ); 391 `dbus_”rÜ_ä“ (& d”r ); 392 } } 394  $»gi¡”_ex‹º®_£rviû ( gpoš‹r a , gpoš‹¸ b ) 396 DBusCÚÃùiÚ * cÚn = b ; 397 cÚ¡ * ·th = a ; 398 DBusMes§ge * msg ; 399 DBusP’dšgC®l * ÿÎ ; 400 DBusMes§geI‹r ™” , diù ; 402 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ("org.bluez", "/org/bluez", 403 GATT_MGR_IFACE , "RegisterService"); 404 ià(! msg ) { 405 `´štf ("Couldn't‡llocate D-Bus message\n"); 409 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 411 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 413 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , "{sv}", & diù ); 417 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & diù ); 419 ià(! `g_dbus_£nd_mes§ge_w™h_»¶y ( cÚn , msg , & ÿÎ , -1)) { 420 `dbus_mes§ge_uÄef ( msg ); 424 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , »gi¡”_ex‹º®_£rviû_»¶y , 425 NULL , NULL); 427 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 428 } } 430  $cÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚn , * u£r_d©a ) 432 `g_¦i¡_fÜ—ch ( £rviûs , »gi¡”_ex‹º®_£rviû , cÚn ); 433 } } 435  gboÞ—n $sigÇl_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 436 gpoš‹r u£r_d©a ) 438  boÞ __‹rmš©ed = çl£ ; 439  sigÇlfd_sigšfo si ; 440 ssize_t »suÉ ; 441  fd ; 443 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) 444  FALSE ; 446 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 448 »suÉ = `»ad ( fd , & si , (si)); 449 ià( »suÉ !ð( si )) 450  FALSE ; 452  si . ssi_signo ) { 453  SIGINT : 454  SIGTERM : 455 ià(! __‹rmš©ed ) { 456 `´štf ("Terminating\n"); 457 `g_maš_loÝ_qu™ ( maš_loÝ ); 460 __‹rmš©ed = Œue ; 464  TRUE ; 465 } } 467  gušt $£tup_sigÇlfd () 469 GIOChªÃl * chªÃl ; 470 gušt sourû ; 471 sig£t_t mask ; 472  fd ; 474 `sigem±y£t (& mask ); 475 `sigadd£t (& mask , SIGINT ); 476 `sigadd£t (& mask , SIGTERM ); 478 ià( `sig´ocmask ( SIG_BLOCK , & mask , NULL ) < 0) { 479 `³¼Ü ("Failedo set signal mask"); 483 fd = `sigÇlfd (-1, & mask , 0); 484 ià( fd < 0) { 485 `³¼Ü ("Failedo create signal descriptor"); 489 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 491 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 492 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 493 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 495 sourû = `g_io_add_w©ch ( chªÃl , 496 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 497 sigÇl_hªdËr , NULL ); 499 `g_io_chªÃl_uÄef ( chªÃl ); 501  sourû ; 502 } } 504  $maš ( ¬gc , * ¬gv []) 506 GDBusCl›Á * þ›Á ; 507 gušt sigÇl ; 509 sigÇl = `£tup_sigÇlfd (); 510 ià( sigÇl == 0) 511  - ”ºo ; 513 cÚÃùiÚ = `g_dbus_£tup_bus ( DBUS_BUS_SYSTEM , NULL , NULL); 515 maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 517 `g_dbus_©ch_objeù_mªag” ( cÚÃùiÚ ); 519 `´štf ("gatt-service unique‚ame: %s\n", 520 `dbus_bus_g‘_unique_Çme ( cÚÃùiÚ )); 522 `ü—‹_£rviûs (); 524 þ›Á = `g_dbus_þ›Á_Ãw ( cÚÃùiÚ , "org.bluez", "/org/bluez"); 526 `g_dbus_þ›Á_£t_cÚÃù_w©ch ( þ›Á , cÚÃù_hªdËr , NULL ); 528 `g_maš_loÝ_run ( maš_loÝ ); 530 `g_dbus_þ›Á_uÄef ( þ›Á ); 532 `g_sourû_»move ( sigÇl ); 534 `g_¦i¡_ä“_fuÎ ( £rviûs , g_ä“ ); 535 `dbus_cÚÃùiÚ_uÄef ( cÚÃùiÚ ); 538 } } @tools/hci-tester.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~<¡ršg.h > 31  ~"mÚ™Ü/bt.h " 32  ~"¤c/sh¬ed/hci.h " 33  ~"¤c/sh¬ed/utž.h " 34  ~"¤c/sh¬ed/‹¡”.h " 36  su£r_d©a { 37 cÚ¡ * m‹¡_d©a ; 38 ušt16_t mšdex_ut ; 39 ušt16_t mšdex_É ; 40  bt_hci * mhci_ut ; 41  bt_hci * mhci_É ; 43 ušt8_t mbdaddr_ut [6]; 44 ušt8_t mbdaddr_É [6]; 45 ušt16_t mhªdË_ut ; 48  $‹¡_´e_£tup_É_add»ss (cÚ¡ * d©a , ušt8_t size , 49 * u£r_d©a ) 51  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 52 cÚ¡  bt_hci_r¥_»ad_bd_addr * r¥ = d©a ; 54 ià( r¥ -> ¡©us ) { 55 `‹¡”_w¬n ("Read†owerester‡ddress failed (0x%02x)", 56 r¥ -> ¡©us ); 57 `‹¡”_´e_£tup_çžed (); 61 `memýy ( u£r -> bdaddr_É , r¥ -> bdaddr , 6); 63 `‹¡”_´e_£tup_com¶‘e (); 64 } } 66  $‹¡_´e_£tup_É_com¶‘e (cÚ¡ * d©a , ušt8_t size , 67 * u£r_d©a ) 69  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 70 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 72 ià( ¡©us ) { 73 `‹¡”_w¬n ("Re£ˆlow”e¡” fažed (0x%02x)", ¡©us ); 74 `‹¡”_´e_£tup_çžed (); 78 ià(! `bt_hci_£nd ( u£r -> hci_É , BT_HCI_CMD_READ_BD_ADDR , NULL , 0, 79 ‹¡_´e_£tup_É_add»ss , NULL , NULL)) { 80 `‹¡”_w¬n ("Failedo„ead†owerester‡ddress"); 81 `‹¡”_´e_£tup_çžed (); 84 } } 86  $‹¡_´e_£tup_ut_add»ss (cÚ¡ * d©a , ušt8_t size , 87 * u£r_d©a ) 89  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 90 cÚ¡  bt_hci_r¥_»ad_bd_addr * r¥ = d©a ; 92 ià( r¥ -> ¡©us ) { 93 `‹¡”_w¬n ("Read upperester‡ddress failed (0x%02x)", 94 r¥ -> ¡©us ); 95 `‹¡”_´e_£tup_çžed (); 99 `memýy ( u£r -> bdaddr_ut , r¥ -> bdaddr , 6); 101 u£r -> hci_É = `bt_hci_Ãw_u£r_chªÃl (u£r-> šdex_É ); 102 ià(! u£r -> hci_É ) { 103 `‹¡”_w¬n ("Failedo setup†owerester user channel"); 104 `‹¡”_´e_£tup_çžed (); 108 ià(! `bt_hci_£nd ( u£r -> hci_É , BT_HCI_CMD_RESET , NULL , 0, 109 ‹¡_´e_£tup_É_com¶‘e , NULL , NULL)) { 110 `‹¡”_w¬n ("Failedo„eset†owerester"); 111 `‹¡”_´e_£tup_çžed (); 114 } } 116  $‹¡_´e_£tup_ut_com¶‘e (cÚ¡ * d©a , ušt8_t size , 117 * u£r_d©a ) 119  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 120 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 122 ià( ¡©us ) { 123 `‹¡”_w¬n ("Re£ˆuµ”e¡” fažed (0x%02x)", ¡©us ); 124 `‹¡”_´e_£tup_çžed (); 128 ià( u£r -> šdex_É == 0xffff) { 129 `‹¡”_´e_£tup_com¶‘e (); 133 ià(! `bt_hci_£nd ( u£r -> hci_ut , BT_HCI_CMD_READ_BD_ADDR , NULL , 0, 134 ‹¡_´e_£tup_ut_add»ss , NULL , NULL)) { 135 `‹¡”_w¬n ("Failedo„ead upperester‡ddress"); 136 `‹¡”_´e_£tup_çžed (); 139 } } 141  $‹¡_´e_£tup (cÚ¡ * ‹¡_d©a ) 143  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 145 u£r -> hci_ut = `bt_hci_Ãw_u£r_chªÃl (u£r-> šdex_ut ); 146 ià(! u£r -> hci_ut ) { 147 `‹¡”_w¬n ("Failedo setup upperester user channel"); 148 `‹¡”_´e_£tup_çžed (); 152 ià(! `bt_hci_£nd ( u£r -> hci_ut , BT_HCI_CMD_RESET , NULL , 0, 153 ‹¡_´e_£tup_ut_com¶‘e , NULL , NULL)) { 154 `‹¡”_w¬n ("Failedo„eset upperester"); 155 `‹¡”_´e_£tup_çžed (); 158 } } 160  $‹¡_po¡_‹¬down (cÚ¡ * ‹¡_d©a ) 162  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 164 `bt_hci_uÄef ( u£r -> hci_É ); 165 u£r -> hci_É = NULL ; 167 `bt_hci_uÄef ( u£r -> hci_ut ); 168 u£r -> hci_ut = NULL ; 170 `‹¡”_po¡_‹¬down_com¶‘e (); 171 } } 173  $u£r_d©a_ä“ (* d©a ) 175  u£r_d©a * u£r = d©a ; 177 `ä“ ( u£r ); 178 } } 180  #‹¡_hci ( Çme , d©a , £tup , func , ‹¬down ) \ 182  u£r_d©a * u£r ; \ 183 u£r = `ÿÎoc (1, ( u£r_d©a )); \ 184 ià(! u£r ) \ 186 u£r -> ‹¡_d©a = d©a ; \ 187 u£r -> šdex_ut = 0; \ 188 u£r -> šdex_É = 1; \ 189 `‹¡”_add_fuÎ ( Çme , d©a , \ 190 ‹¡_´e_£tup , £tup , func , ‹¬down , \ 191 ‹¡_po¡_‹¬down , 30, u£r , u£r_d©a_ä“ ); \ 192 } 0) ) 194  #‹¡_hci_loÿl ( Çme , d©a , £tup , func ) \ 196  u£r_d©a * u£r ; \ 197 u£r = `ÿÎoc (1, ( u£r_d©a )); \ 198 ià(! u£r ) \ 200 u£r -> ‹¡_d©a = d©a ; \ 201 u£r -> šdex_ut = 0; \ 202 u£r -> šdex_É = 0xffff; \ 203 `‹¡”_add_fuÎ ( Çme , d©a , \ 204 ‹¡_´e_£tup , £tup , func , NULL , \ 205 ‹¡_po¡_‹¬down , 30, u£r , u£r_d©a_ä“ ); \ 206 } 0) ) 208  $£tup_ã©u»s_com¶‘e (cÚ¡ * d©a , ušt8_t size , 209 * u£r_d©a ) 211 cÚ¡  bt_hci_r¥_»ad_loÿl_ã©u»s * r¥ = d©a ; 213 ià( r¥ -> ¡©us ) { 214 `‹¡”_w¬n ("FažedØg‘ HCI f—tu» (0x%02x)", r¥ -> ¡©us ); 215 `‹¡”_£tup_çžed (); 219 `‹¡”_£tup_com¶‘e (); 220 } } 222  $£tup_ã©u»s (cÚ¡ * ‹¡_d©a ) 224  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 226 ià(! `bt_hci_£nd ( u£r -> hci_ut , BT_HCI_CMD_READ_LOCAL_FEATURES , NULL , 0, 227 £tup_ã©u»s_com¶‘e , NULL , NULL)) { 228 `‹¡”_w¬n ("Failedo send HCI features command"); 229 `‹¡”_£tup_çžed (); 232 } } 234  $‹¡_»£t (cÚ¡ * ‹¡_d©a ) 236 `‹¡”_‹¡_·s£d (); 237 } } 239  $‹¡_commªd_com¶‘e (cÚ¡ * d©a , ušt8_t size , 240 * u£r_d©a ) 242 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 244 ià( ¡©us ) { 245 `‹¡”_w¬n ("HCI commªd fažed (0x%02x)", ¡©us ); 246 `‹¡”_‹¡_çžed (); 250 `‹¡”_‹¡_·s£d (); 251 } } 253  $‹¡_commªd ( ušt16_t Ýcode ) 255  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 257 ià(! `bt_hci_£nd ( u£r -> hci_ut , Ýcode , NULL , 0, 258 ‹¡_commªd_com¶‘e , NULL , NULL)) { 259 `‹¡”_w¬n ("FažedØ£nd HCI commªd 0x%04x", Ýcode ); 260 `‹¡”_‹¡_çžed (); 263 } } 265  $‹¡_»ad_loÿl_v”siÚ_šfÜm©iÚ (cÚ¡ * ‹¡_d©a ) 267 `‹¡_commªd ( BT_HCI_CMD_READ_LOCAL_VERSION ); 268 } } 270  $‹¡_»ad_loÿl_suµÜ‹d_commªds (cÚ¡ * ‹¡_d©a ) 272 `‹¡_commªd ( BT_HCI_CMD_READ_LOCAL_COMMANDS ); 273 } } 275  $‹¡_»ad_loÿl_suµÜ‹d_ã©u»s (cÚ¡ * ‹¡_d©a ) 277 `‹¡_commªd ( BT_HCI_CMD_READ_LOCAL_FEATURES ); 278 } } 280  $‹¡_loÿl_ex‹nded_ã©u»s_com¶‘e (cÚ¡ * d©a , 281 ušt8_t size , * u£r_d©a ) 283 cÚ¡  bt_hci_r¥_»ad_loÿl_ext_ã©u»s * r¥ = d©a ; 285 ià( r¥ -> ¡©us ) { 286 `‹¡”_w¬n ("Failedo get HCIƒxtended features (0x%02x)", 287 r¥ -> ¡©us ); 288 `‹¡”_‹¡_çžed (); 292 `‹¡”_‹¡_·s£d (); 293 } } 295  $‹¡_»ad_loÿl_ex‹nded_ã©u»s (cÚ¡ * ‹¡_d©a ) 297  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 298  bt_hci_cmd_»ad_loÿl_ext_ã©u»s cmd ; 300 cmd . ·ge = 0x00; 302 ià(! `bt_hci_£nd ( u£r -> hci_ut , BT_HCI_CMD_READ_LOCAL_EXT_FEATURES , 303 & cmd , (cmd), 304 ‹¡_loÿl_ex‹nded_ã©u»s_com¶‘e , 305 NULL , NULL)) { 306 `‹¡”_w¬n ("Failedo send HCIƒxtended features command"); 307 `‹¡”_‹¡_çžed (); 310 } } 312  $‹¡_»ad_bufãr_size (cÚ¡ * ‹¡_d©a ) 314 `‹¡_commªd ( BT_HCI_CMD_READ_BUFFER_SIZE ); 315 } } 317  $‹¡_»ad_couÁry_code (cÚ¡ * ‹¡_d©a ) 319 `‹¡_commªd ( BT_HCI_CMD_READ_COUNTRY_CODE ); 320 } } 322  $‹¡_»ad_bd_addr (cÚ¡ * ‹¡_d©a ) 324 `‹¡_commªd ( BT_HCI_CMD_READ_BD_ADDR ); 325 } } 327  $‹¡_»ad_loÿl_suµÜ‹d_codecs (cÚ¡ * ‹¡_d©a ) 329 `‹¡_commªd ( BT_HCI_CMD_READ_LOCAL_CODECS ); 330 } } 332  $‹¡_Ë_»ad_wh™e_li¡_size (cÚ¡ * ‹¡_d©a ) 334 `‹¡_commªd ( BT_HCI_CMD_LE_READ_WHITE_LIST_SIZE ); 335 } } 337  $‹¡_Ë_þ—r_wh™e_li¡ (cÚ¡ * ‹¡_d©a ) 339 `‹¡_commªd ( BT_HCI_CMD_LE_CLEAR_WHITE_LIST ); 340 } } 342  $‹¡_šquœy_com¶‘e (cÚ¡ * d©a , ušt8_t size , 343 * u£r_d©a ) 345 cÚ¡  bt_hci_evt_šquœy_com¶‘e * evt = d©a ; 347 ià( evt -> ¡©us ) { 348 `‹¡”_w¬n ("HCI inquiry complete failed (0x%02x)", 349 evt -> ¡©us ); 350 `‹¡”_‹¡_çžed (); 354 `‹¡”_‹¡_·s£d (); 355 } } 357  $‹¡_šquœy_¡©us (cÚ¡ * d©a , ušt8_t size , 358 * u£r_d©a ) 360 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 362 ià( ¡©us ) { 363 `‹¡”_w¬n ("HCI inquœy commªd fažed (0x%02x)", ¡©us ); 364 `‹¡”_‹¡_çžed (); 367 } } 369  $‹¡_šquœy_lŸc (cÚ¡ * ‹¡_d©a ) 371  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 372  bt_hci_cmd_šquœy cmd ; 374 `bt_hci_»gi¡” ( u£r -> hci_ut , BT_HCI_EVT_INQUIRY_COMPLETE , 375 ‹¡_šquœy_com¶‘e , NULL , NULL); 377 cmd . Ïp [0] = 0x00; 378 cmd . Ïp [1] = 0x8b; 379 cmd . Ïp [2] = 0x9e; 380 cmd . Ëngth = 0x08; 381 cmd . num_»¥ = 0x00; 383 ià(! `bt_hci_£nd ( u£r -> hci_ut , BT_HCI_CMD_INQUIRY , & cmd , (cmd), 384 ‹¡_šquœy_¡©us , NULL , NULL)) { 385 `‹¡”_w¬n ("Failedo send HCI inquiry command"); 386 `‹¡”_‹¡_çžed (); 389 } } 391  $£tup_É_cÚÃùabË_com¶‘e (cÚ¡ * d©a , ušt8_t size , 392 * u£r_d©a ) 394 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 396 ià( ¡©us ) { 397 `‹¡”_w¬n ("FažedØ£ˆHCI sÿÀ’abË (0x%02x)", ¡©us ); 398 `‹¡”_£tup_çžed (); 402 `‹¡”_£tup_com¶‘e (); 403 } } 405  $£tup_É_cÚÃù_»que¡_acû± (cÚ¡ * d©a , ušt8_t size , 406 * u£r_d©a ) 408  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 409 cÚ¡  bt_hci_evt_cÚn_»que¡ * evt = d©a ; 410  bt_hci_cmd_acû±_cÚn_»que¡ cmd ; 412 `memýy ( cmd . bdaddr , evt ->bdaddr, 6); 413 cmd . rÞe = 0x01; 415 ià(! `bt_hci_£nd ( u£r -> hci_É , BT_HCI_CMD_ACCEPT_CONN_REQUEST , 416 & cmd , (cmd), NULL , NULL, NULL)) { 417 `‹¡”_w¬n ("Failedo send HCI‡ccept connection command"); 420 } } 422  $£tup_É_cÚÃùabË (cÚ¡ * ‹¡_d©a ) 424  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 425  bt_hci_cmd_wr™e_sÿn_’abË cmd ; 427 `bt_hci_»gi¡” ( u£r -> hci_É , BT_HCI_EVT_CONN_REQUEST , 428 £tup_É_cÚÃù_»que¡_acû± , NULL , NULL); 430 cmd . ’abË = 0x02; 432 ià(! `bt_hci_£nd ( u£r -> hci_É , BT_HCI_CMD_WRITE_SCAN_ENABLE , 433 & cmd , (cmd), 434 £tup_É_cÚÃùabË_com¶‘e , NULL , NULL)) { 435 `‹¡”_w¬n ("Failedo send HCI scanƒnable command"); 436 `‹¡”_£tup_çžed (); 439 } } 441  $‹¡_ü—‹_cÚÃùiÚ_discÚÃù (* u£r_d©a ) 443 `‹¡”_‹¡_·s£d (); 444 } } 446  $‹¡_ü—‹_cÚÃùiÚ_com¶‘e (cÚ¡ * d©a , ušt8_t size , 447 * u£r_d©a ) 449  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 450 cÚ¡  bt_hci_evt_cÚn_com¶‘e * evt = d©a ; 452 ià( evt -> ¡©us ) { 453 `‹¡”_w¬n ("HCI create connection complete failed (0x%02x)", 454 evt -> ¡©us ); 455 `‹¡”_‹¡_çžed (); 459 u£r -> hªdË_ut = `Ë16_to_ýu ( evt -> hªdË ); 461 `‹¡”_wa™ (2, ‹¡_ü—‹_cÚÃùiÚ_discÚÃù , NULL ); 462 } } 464  $‹¡_ü—‹_cÚÃùiÚ_¡©us (cÚ¡ * d©a , ušt8_t size , 465 * u£r_d©a ) 467 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 469 ià( ¡©us ) { 470 `‹¡”_w¬n ("HCI create connection command failed (0x%02x)", 471 ¡©us ); 472 `‹¡”_‹¡_çžed (); 475 } } 477  $‹¡_ü—‹_cÚÃùiÚ (cÚ¡ * ‹¡_d©a ) 479  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 480  bt_hci_cmd_ü—‹_cÚn cmd ; 482 `bt_hci_»gi¡” ( u£r -> hci_ut , BT_HCI_EVT_CONN_COMPLETE , 483 ‹¡_ü—‹_cÚÃùiÚ_com¶‘e , NULL , NULL); 485 `memýy ( cmd . bdaddr , u£r -> bdaddr_É , 6); 486 cmd . pkt_ty³ = `ýu_to_Ë16 (0x0008); 487 cmd . psÿn_»p_mode = 0x02; 488 cmd . psÿn_mode = 0x00; 489 cmd . þock_off£t = `ýu_to_Ë16 (0x0000); 490 cmd . rÞe_sw™ch = 0x01; 492 ià(! `bt_hci_£nd ( u£r -> hci_ut , BT_HCI_CMD_CREATE_CONN , 493 & cmd , (cmd), 494 ‹¡_ü—‹_cÚÃùiÚ_¡©us , 495 NULL , NULL)) { 496 `‹¡”_w¬n ("Failedo send HCI create connection command"); 497 `‹¡”_‹¡_çžed (); 500 } } 502  $‹¬down_timeout (* u£r_d©a ) 504 `‹¡”_‹¬down_com¶‘e (); 505 } } 507  $‹¬down_discÚÃù_¡©us (cÚ¡ * d©a , ušt8_t size , 508 * u£r_d©a ) 510 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 512 ià( ¡©us ) { 513 `‹¡”_w¬n ("HCI discÚÃù fažed (0x%02x)", ¡©us ); 514 `‹¡”_‹¬down_çžed (); 518 `‹¡”_wa™ (1, ‹¬down_timeout , NULL ); 519 } } 521  $‹¬down_cÚÃùiÚ (cÚ¡ * ‹¡_d©a ) 523  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 524  bt_hci_cmd_discÚÃù cmd ; 526 cmd . hªdË = `ýu_to_Ë16 ( u£r -> hªdË_ut ); 527 cmd . »asÚ = 0x13; 529 ià(! `bt_hci_£nd ( u£r -> hci_ut , BT_HCI_CMD_DISCONNECT , 530 & cmd , (cmd), 531 ‹¬down_discÚÃù_¡©us , 532 NULL , NULL)) { 533 `‹¡”_w¬n ("Failedo send HCI disconnect command"); 534 `‹¡”_‹¡_çžed (); 537 } } 539  $‹¡_adv_»pÜt (cÚ¡ * d©a , ušt8_t size , * u£r_d©a ) 541  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 542 ušt8_t subev’t = *((ušt8_ˆ*è d©a ); 543 cÚ¡  bt_hci_evt_Ë_adv_»pÜt * Ïr = d©a + 1; 545  subev’t ) { 546  BT_HCI_EVT_LE_ADV_REPORT : 547 ià(! `memcmp ( Ïr -> addr , u£r -> bdaddr_ut , 6)) 548 `‹¡”_£tup_com¶‘e (); 551 } } 553  $£tup_adv”tisšg_š™Ÿ‹d (cÚ¡ * ‹¡_d©a ) 555  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 556  bt_hci_cmd_£t_ev’t_mask £m ; 557  bt_hci_cmd_Ë_£t_ev’t_mask l£m ; 558  bt_hci_cmd_Ë_£t_sÿn_’abË ls£ ; 559  bt_hci_cmd_Ë_£t_adv_·¿m‘”s l§p ; 560  bt_hci_cmd_Ë_£t_adv_’abË l§e ; 562 `bt_hci_»gi¡” ( u£r -> hci_É , BT_HCI_EVT_LE_META_EVENT , 563 ‹¡_adv_»pÜt , NULL , NULL); 565 `mem£t ( £m . mask , 0, 8); 566 £m . mask [1] |= 0x20; 567 £m . mask [1] |= 0x40; 568 £m . mask [7] |= 0x20; 570 `bt_hci_£nd ( u£r -> hci_É , BT_HCI_CMD_SET_EVENT_MASK , 571 & £m , (£m), NULL , NULL, NULL); 573 `mem£t ( l£m . mask , 0, 8); 574 l£m . mask [0] |= 0x02; 576 `bt_hci_£nd ( u£r -> hci_É , BT_HCI_CMD_LE_SET_EVENT_MASK , 577 & l£m , Ö£m), NULL , NULL, NULL); 579 ls£ . ’abË = 0x01; 580 ls£ . fž‹r_dup = 0x00; 582 `bt_hci_£nd ( u£r -> hci_É , BT_HCI_CMD_LE_SET_SCAN_ENABLE , 583 & ls£ , Ös£), NULL , NULL, NULL); 585 l§p . mš_š‹rv® = `ýu_to_Ë16 (0x0800); 586 l§p . max_š‹rv® = `ýu_to_Ë16 (0x0800); 587 l§p . ty³ = 0x03; 588 l§p . own_addr_ty³ = 0x00; 589 l§p . dœeù_addr_ty³ = 0x00; 590 `mem£t ( l§p . dœeù_addr , 0, 6); 591 l§p . chªÃl_m­ = 0x07; 592 l§p . fž‹r_pÞicy = 0x00; 594 `bt_hci_£nd ( u£r -> hci_ut , BT_HCI_CMD_LE_SET_ADV_PARAMETERS , 595 & l§p , Ö§p), NULL , NULL, NULL); 597 l§e . ’abË = 0x01; 599 `bt_hci_£nd ( u£r -> hci_ut , BT_HCI_CMD_LE_SET_ADV_ENABLE , 600 & l§e , Ö§e), NULL , NULL, NULL); 601 } } 603  $‹¡_»£t_š_adv”tisšg_¡©e_timeout (* u£r_d©a ) 605  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 606  bt_hci_cmd_Ë_£t_adv_’abË l§e ; 607  bt_hci_cmd_Ë_£t_sÿn_’abË ls£ ; 609 l§e . ’abË = 0x00; 611 `bt_hci_£nd ( u£r -> hci_ut , BT_HCI_CMD_LE_SET_ADV_ENABLE , 612 & l§e , Ö§e), NULL , NULL, NULL); 614 ls£ . ’abË = 0x00; 615 ls£ . fž‹r_dup = 0x00; 617 `bt_hci_£nd ( u£r -> hci_É , BT_HCI_CMD_LE_SET_SCAN_ENABLE , 618 & ls£ , Ös£), NULL , NULL, NULL); 620 `‹¡”_‹¡_·s£d (); 621 } } 623  $‹¡_»£t_š_adv”tisšg_¡©e (cÚ¡ * ‹¡_d©a ) 625  u£r_d©a * u£r = `‹¡”_g‘_d©a (); 627 `bt_hci_£nd ( u£r -> hci_ut , BT_HCI_CMD_RESET , NULL , 0, NULL, NULL, NULL); 629 `‹¡”_wa™ (5, ‹¡_»£t_š_adv”tisšg_¡©e_timeout , NULL ); 630 } } 632  $maš ( ¬gc , * ¬gv []) 634 `‹¡”_š™ (& ¬gc , & ¬gv ); 636 `‹¡_hci_loÿl ("Re£t", NULL , NULL, ‹¡_»£t ); 638 `‹¡_hci_loÿl ("R—d LoÿÈV”siÚ InfÜm©iÚ", NULL , NULL, 639 ‹¡_»ad_loÿl_v”siÚ_šfÜm©iÚ ); 640 `‹¡_hci_loÿl ("R—d LoÿÈSuµÜ‹d Commªds", NULL , NULL, 641 ‹¡_»ad_loÿl_suµÜ‹d_commªds ); 642 `‹¡_hci_loÿl ("R—d LoÿÈSuµÜ‹d F—tu»s", NULL , NULL, 643 ‹¡_»ad_loÿl_suµÜ‹d_ã©u»s ); 644 `‹¡_hci_loÿl ("R—d LoÿÈEx‹nded F—tu»s", NULL , 645 £tup_ã©u»s , 646 ‹¡_»ad_loÿl_ex‹nded_ã©u»s ); 647 `‹¡_hci_loÿl ("R—d Bufã¸Size", NULL , NULL, 648 ‹¡_»ad_bufãr_size ); 649 `‹¡_hci_loÿl ("R—d CouÁry Code", NULL , NULL, 650 ‹¡_»ad_couÁry_code ); 651 `‹¡_hci_loÿl ("R—d BD_ADDR", NULL , NULL, 652 ‹¡_»ad_bd_addr ); 653 `‹¡_hci_loÿl ("R—d LoÿÈSuµÜ‹d Codecs", NULL , NULL, 654 ‹¡_»ad_loÿl_suµÜ‹d_codecs ); 656 `‹¡_hci_loÿl ("LE R—d Wh™Li¡ Size", NULL , NULL, 657 ‹¡_Ë_»ad_wh™e_li¡_size ); 658 `‹¡_hci_loÿl ("LE Cˬ Wh™Li¡", NULL , NULL, 659 ‹¡_Ë_þ—r_wh™e_li¡ ); 661 `‹¡_hci_loÿl ("Inquœy (LIAC)", NULL , NULL, ‹¡_šquœy_lŸc ); 663 `‹¡_hci ("C»©CÚÃùiÚ", NULL , 664 £tup_É_cÚÃùabË , 665 ‹¡_ü—‹_cÚÃùiÚ , 666 ‹¬down_cÚÃùiÚ ); 668 `‹¡_hci ("TP/DSU/BV-02-C Re£ˆš Adv”tisšg S‹", NULL , 669 £tup_adv”tisšg_š™Ÿ‹d , 670 ‹¡_»£t_š_adv”tisšg_¡©e , NULL ); 672  `‹¡”_run (); 673 } } @tools/hciattach.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30 #iâdeà __TIZEN_PATCH__ 31  #_GNU_SOURCE ) 33  ~<¡dio.h > 34  ~<”ºo.h > 35  ~ 36  ~ 37  ~<¡dlib.h > 38  ~<¡ršg.h > 39  ~ 40  ~ 41  ~<‹rmios.h > 42  ~ 43  ~ 44  ~ 45  ~ 46  ~ 48  ~ 49  ~ 50  ~ 52  ~"hcŸ‰ach.h " 54  su¬t_t { 55 * mty³ ; 56  mm_id ; 57  mp_id ; 58  m´Ùo ; 59  mš™_¥“d ; 60  m¥“d ; 61  mæags ; 62  mpm ; 63 * mbdaddr ; 64 (* mš™ è( mfd ,  u¬t_t * mu ,  ‹rmios * mti ); 65 (* mpo¡ è( mfd ,  u¬t_t * mu ,  ‹rmios * mti ); 68 #ifdeà __TI_PATCH__ 69 ušt16_t mdeviû_·¿m ; 73 #ifdeà __TI_PATCH__ 74  gfœmw¬e_·th = 0; 77 #ià defšed ( __TI_PATCH__ è|| defšed( __BROADCOM_PATCH__ ) 78  #TIOSETBRFPOWER 0x6000 ) 79  #BRF_DEEP_SLEEP_OPCODE_BYTE_1 0x0c ) 80  #BRF_DEEP_SLEEP_OPCODE_BYTE_2 0xfd ) 81  #BRF_DEEP_SLEEP_OPCODE \ 82 ( BRF_DEEP_SLEEP_OPCODE_BYTE_1 | ( BRF_DEEP_SLEEP_OPCODE_BYTE_2 << 8)) ) 84  #FLOW_CTL 0x0001 ) 85  #AMP_DEV 0x0002 ) 86  #ENABLE_PM 1 ) 87  #DISABLE_PM 0 ) 89 vÞ©ž sig_©omic_t g__io_ÿnûËd = 0; 91  $sig_hup ( sig ) 93 } } 95  $sig_‹rm ( sig ) 97 __io_ÿnûËd = 1; 98 } } 100  $sig_®¬m ( sig ) 102 `årštf ( ¡d”r , "Initializationimed out.\n"); 103 `ex™ (1); 104 } } 106  $u¬t_¥“d ( s ) 108  s ) { 110  B9600 ; 112  B19200 ; 114  B38400 ; 116  B57600 ; 118  B115200 ; 120  B230400 ; 122  B460800 ; 124  B500000 ; 126  B576000 ; 128  B921600 ; 130  B1000000 ; 132  B1152000 ; 134  B1500000 ; 136  B2000000 ; 137 #ifdeà B2500000 139  B2500000 ; 141 #ifdeà B3000000 143  B3000000 ; 145 #ifdeà B3500000 147  B3500000 ; 149 #ifdeà B3710000 151  B3710000 ; 153 #ifdeà B4000000 155  B4000000 ; 158  B57600 ; 160 } } 162  $£t_¥“d ( fd ,  ‹rmios * ti ,  ¥“d ) 164 ià( `cf£to¥“d ( ti , `u¬t_¥“d ( ¥“d )) < 0) 165  - ”ºo ; 167 ià( `cf£ti¥“d ( ti , `u¬t_¥“d ( ¥“d )) < 0) 168  - ”ºo ; 170 ià( `tc£‰r ( fd , TCSANOW , ti ) < 0) 171  - ”ºo ; 174 } } 179  $»ad_hci_ev’t ( fd , * buf ,  size ) 181  »maš , r ; 182  couÁ = 0; 184 ià( size <= 0) 190 r = `»ad ( fd , buf , 1); 191 ià( r <= 0) 193 ià( buf [0] == 0x04) 196 couÁ ++; 199  couÁ < 3) { 200 r = `»ad ( fd , buf + couÁ , 3 - count); 201 ià( r <= 0) 203 couÁ +ð r ; 207 ià( buf [2] < ( size - 3)) 208 »maš = buf [2]; 210 »maš = size - 3; 212 ( couÁ - 3è< »maš ) { 213 r = `»ad ( fd , buf + couÁ , »maš - (count - 3)); 214 ià( r <= 0) 216 couÁ +ð r ; 219  couÁ ; 220 } } 225  $”icssÚ ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 227  time¥ec tm = {0, 50000}; 228  cmd [5]; 230 cmd [0] = HCI_COMMAND_PKT ; 231 cmd [1] = 0x09; 232 cmd [2] = 0xfc; 233 cmd [3] = 0x01; 235  u -> ¥“d ) { 237 cmd [4] = 0x03; 240 cmd [4] = 0x02; 243 cmd [4] = 0x01; 246 cmd [4] = 0x00; 249 cmd [4] = 0x20; 252 cmd [4] = 0x25; 255 cmd [4] = 0x27; 258 cmd [4] = 0x2B; 261 cmd [4] = 0x03; 262 u -> ¥“d = 57600; 263 `årštf ( ¡d”r , "Inv®id s³ed„eque¡ed, usšg %d bp š¡—d\n", u -> ¥“d ); 268 ià( `wr™e ( fd , cmd , 5) != 5) { 269 `³¼Ü ("Failedo write init command"); 273 `Çno¦“p (& tm , NULL ); 275 } } 280  $digi ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 282  time¥ec tm = {0, 50000}; 283  cmd [5]; 286 cmd [0] = HCI_COMMAND_PKT ; 287 cmd [1] = 0x07; 288 cmd [2] = 0xfc; 289 cmd [3] = 0x01; 291  u -> ¥“d ) { 293 cmd [4] = 0x08; 296 cmd [4] = 0x09; 299 cmd [4] = 0x09; 300 u -> ¥“d = 115200; 305 ià( `wr™e ( fd , cmd , 5) != 5) { 306 `³¼Ü ("Failedo write init command"); 310 `Çno¦“p (& tm , NULL ); 312 } } 314  $‹xas ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 316  `‹xas_š™ ( fd , & u -> ¥“d , ti ); 317 } } 319  $‹xas2 ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 321  `‹xas_po¡ ( fd , ti ); 322 } } 324  $‹xa§É ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 326  `‹xa§É_š™ ( fd , u -> ¥“d , ti ); 327 } } 329  $©h3k_ps ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 331  `©h3k_š™ ( fd , u -> ¥“d , u-> š™_¥“d , u-> bdaddr , ti ); 332 } } 334  $©h3k_pm ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 336  `©h3k_po¡ ( fd , u -> pm ); 337 } } 339  $qu®comm ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 341  `qu®comm_š™ ( fd , u -> ¥“d , ti , u-> bdaddr ); 342 } } 344  $š‹l ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 346  `š‹l_š™ ( fd , u -> š™_¥“d , &u-> ¥“d , ti ); 347 } } 349  $bcm43xx ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 351  `bcm43xx_š™ ( fd , u -> š™_¥“d , u-> ¥“d , ti , u-> bdaddr ); 352 } } 354  $»ad_check ( fd , * buf ,  couÁ ) 356  »s ; 359 »s = `»ad ( fd , buf , couÁ ); 360 ià( »s != -1) { 361 buf +ð »s ; 362 couÁ -ð »s ; 364 }  couÁ && ( ”ºo =ð0 ||ƒ¼nØ=ð EINTR )); 366 ià( couÁ ) 370 } } 375  g£rŸl_fd ; 376  gbc¥_max_»Œ›s = 10; 378  $bc¥_tshy_sig_®¬m ( sig ) 380  bc¥_sync_pkt [10] = {0xc0,0x00,0x41,0x00,0xbe,0xda,0xdc,0xed,0xed,0xc0}; 381  »Œ›s = 0; 383 ià( »Œ›s < bc¥_max_»Œ›s ) { 384 »Œ›s ++; 385 ià( `wr™e ( £rŸl_fd , & bc¥_sync_pkt , 10) < 0) 387 `®¬m (1); 391 `tcæush ( £rŸl_fd , TCIOFLUSH ); 392 `årštf ( ¡d”r , "BCSP initializationimed out\n"); 393 `ex™ (1); 394 } } 396  $bc¥_tcÚf_sig_®¬m ( sig ) 398  bc¥_cÚf_pkt [10] = {0xc0,0x00,0x41,0x00,0xbe,0xad,0xef,0xac,0xed,0xc0}; 399  »Œ›s = 0; 401 ià( »Œ›s < bc¥_max_»Œ›s ){ 402 »Œ›s ++; 403 ià( `wr™e ( £rŸl_fd , & bc¥_cÚf_pkt , 10) < 0) 405 `®¬m (1); 409 `tcæush ( £rŸl_fd , TCIOFLUSH ); 410 `årštf ( ¡d”r , "BCSP initializationimed out\n"); 411 `ex™ (1); 412 } } 414  $bc¥ ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 416  by‹ , bc¥h [4], bc¥p [4], 417 bc¥_sync_»¥_pkt [10] = {0xc0,0x00,0x41,0x00,0xbe,0xac,0xaf,0xef,0xee,0xc0}, 418 bc¥_cÚf_»¥_pkt [10] = {0xc0,0x00,0x41,0x00,0xbe,0xde,0xad,0xd0,0xd0,0xc0}, 419 bc¥sync [4] = {0xda, 0xdc, 0xed, 0xed}, 420 bc¥synüe¥ [4] = {0xac,0xaf,0xef,0xee}, 421 bc¥cÚf [4] = {0xad,0xef,0xac,0xed}, 422 bc¥cÚäe¥ [4] = {0xde,0xad,0xd0,0xd0}; 423  sigaùiÚ § ; 424  Ën ; 426 ià( `£t_¥“d ( fd , ti , u -> ¥“d ) < 0) { 427 `³¼Ü ("Can't set default baud„ate"); 431 ti -> c_cæag |ð PARENB ; 432 ti -> c_cæag &ð~( PARODD ); 434 ià( `tc£‰r ( fd , TCSANOW , ti ) < 0) { 435 `³¼Ü ("Can't set…ort settings"); 439 `®¬m (0); 441 £rŸl_fd = fd ; 442 `mem£t (& § , 0, (sa)); 443 § . §_æags = SA_NOCLDSTOP ; 444 § . §_hªdËr = bc¥_tshy_sig_®¬m ; 445 `sigaùiÚ ( SIGALRM , & § , NULL ); 449 `bc¥_tshy_sig_®¬m (0); 452 ià( `»ad_check ( fd , & by‹ , 1) == -1){ 453 `³¼Ü ("Failedo„ead"); 456 }  by‹ != 0xC0); 459 iàÐ `»ad_check ( fd , & bc¥h [0], 1) == -1){ 460 `³¼Ü ("Failedo„ead"); 463 }  bc¥h [0] == 0xC0); 465 iàÐ `»ad_check ( fd , & bc¥h [1], 3) == -1){ 466 `³¼Ü ("Failedo„ead"); 470 ià((( bc¥h [0] + bcsph[1] + bcsph[2]) & 0xFF) != ()~bcsph[3]) 472 ià( bc¥h [1] != 0x41 || bcsph[2] != 0x00) 475 ià( `»ad_check ( fd , & bc¥p , 4) == -1){ 476 `³¼Ü ("Failedo„ead"); 480 ià(! `memcmp ( bc¥p , bc¥sync , 4)) { 481 ià( `wr™e ( fd , & bc¥_sync_»¥_pkt ,10) < 0) 483 } ià(! `memcmp ( bc¥p , bc¥synüe¥ , 4)) 489 `®¬m (0); 490 § . §_hªdËr = bc¥_tcÚf_sig_®¬m ; 491 `sigaùiÚ ( SIGALRM , & § , NULL ); 492 `®¬m (1); 496 ià( `»ad_check ( fd , & by‹ , 1) == -1){ 497 `³¼Ü ("Failedo„ead"); 500 }  by‹ != 0xC0); 503 ià( `»ad_check ( fd , & bc¥h [0], 1) == -1){ 504 `³¼Ü ("Failedo„ead"); 507 }  bc¥h [0] == 0xC0); 509 ià( `»ad_check ( fd , & bc¥h [1], 3) == -1){ 510 `³¼Ü ("Failedo„ead"); 514 ià((( bc¥h [0] + bcsph[1] + bcsph[2]) & 0xFF) != ()~bcsph[3]) 517 ià( bc¥h [1] != 0x41 || bcsph[2] != 0x00) 520 ià( `»ad_check ( fd , & bc¥p , 4) == -1){ 521 `³¼Ü ("Failedo„ead"); 525 ià(! `memcmp ( bc¥p , bc¥sync , 4)) 526 Ën = `wr™e ( fd , & bc¥_sync_»¥_pkt , 10); 527 ià(! `memcmp ( bc¥p , bc¥cÚf , 4)) 528 Ën = `wr™e ( fd , & bc¥_cÚf_»¥_pkt , 10); 529 ià(! `memcmp ( bc¥p , bc¥cÚäe¥ , 4)) 534 ià( Ën < 0) 535  - ”ºo ; 541 } } 549  $c¤ ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 551  time¥ec tm = {0, 10000000}; 552  cmd [30]; 553  »¥ [30]; 554  þ’ = 0; 555  c¤_£q = 0; 556  divisÜ ; 571 þ’ = 5 + (5 + 6) * 2; 573 cmd [0] = HCI_COMMAND_PKT ; 574 cmd [1] = 0x00; 575 cmd [2] = 0xfc; 576 cmd [3] = 1 + (5 + 6) * 2; 578 cmd [4] = 0xC2; 580 cmd [5] = 0x00; 581 cmd [6] = 0x00; 582 cmd [7] = 5 + 4; 583 cmd [8] = 0x00; 584 cmd [9] = c¤_£q & 0xFF; 585 cmd [10] = ( c¤_£q >> 8) & 0xFF; 586 c¤_£q ++; 587 cmd [11] = 0x19; 588 cmd [12] = 0x28; 589 cmd [13] = 0x00; 590 cmd [14] = 0x00; 592 `mem£t ( cmd + 15, 0, 6 * 2); 596 ià( `wr™e ( fd , cmd , þ’ ) != clen) { 597 `³¼Ü ("Failedo write init command (GET_BUILD_ID)"); 602 ià( `»ad_hci_ev’t ( fd , »¥ , 100) < 0) { 603 `³¼Ü ("Failedo„ead init„esponse (GET_BUILD_ID)"); 609 }  »¥ [1] != 0xFF); 611 #ifdeà CSR_DEBUG 613  ‹mp [512]; 614  i ; 615  i =0; i < ¾’ ; i++) 616 `¥rštf ( ‹mp + ( i *3), "-%02X", »¥ [i]); 617 `årštf ( ¡d”r , "R—dšg CSR bužd ID %d [%s]\n", ¾’ , ‹mp + 1); 623 `årštf ( ¡d”r , "CSR build ID 0x%02X-0x%02X\n", 624 »¥ [15] & 0xFF,„esp[14] & 0xFF); 627 þ’ = 5 + (5 + 4)*2; 629 cmd [3] = 1 + (5 + 4)*2; 631 cmd [9] = c¤_£q & 0xFF; 632 cmd [10] = ( c¤_£q >> 8) & 0xFF; 633 c¤_£q ++; 634 cmd [11] = 0x02; 635 cmd [12] = 0x68; 637 #ifdeà CSR_DEBUG 640 ià( `wr™e ( fd , cmd , þ’ ) != clen) { 641 `³¼Ü ("Failedo write init command (GET_BUILD_ID)"); 646 ià( `»ad_hci_ev’t ( fd , »¥ , 100) < 0) { 647 `³¼Ü ("Failedo„ead init„esponse (GET_BUILD_ID)"); 653 }  »¥ [1] != 0xFF); 656  ‹mp [512]; 657  i ; 658  i =0; i < ¾’ ; i++) 659 `¥rštf ( ‹mp + ( i *3), "-%02X", »¥ [i]); 660 `årštf ( ¡d”r , "R—dšg CSR UART s³ed %d [%s]\n", ¾’ , ‹mp +1); 664 ià( u -> ¥“d > 1500000) { 665 `årštf ( ¡d”r , "Speed %doo high. Remaining‡t %d baud\n", 666 u -> ¥“d , u-> š™_¥“d ); 667 u -> ¥“d = u-> š™_¥“d ; 668 } ià( u -> ¥“d !ð57600 && `u¬t_¥“d (u->¥“dè=ð B57600 ) { 670 `årštf ( ¡d”r , "Speed %d unrecognised. Remaining‡t %d baud\n", 671 u -> ¥“d , u-> š™_¥“d ); 672 u -> ¥“d = u-> š™_¥“d ; 674 ià( u -> ¥“d =ðu-> š™_¥“d ) 679 cmd [5] = 0x02; 680 cmd [6] = 0x00; 681 cmd [9] = c¤_£q & 0xFF; 682 cmd [10] = ( c¤_£q >> 8) & 0xFF; 683 c¤_£q ++; 685 divisÜ = ( u -> ¥“d *64+7812)/15625; 688 cmd [15] = ( divisÜ ) & 0xFF; 689 cmd [16] = ( divisÜ >> 8) & 0xFF; 692 #ifdeà CSR_DEBUG 694  ‹mp [512]; 695  i ; 696  i = 0; i < þ’ ; i++) 697 `¥rštf ( ‹mp + ( i *3), "-%02X", cmd [i]); 698 `årštf ( ¡d”r , "Wr™šg CSR UART s³ed %d [%s]\n", þ’ , ‹mp + 1); 706 ià( `wr™e ( fd , cmd , þ’ ) != clen) { 707 `³¼Ü ("Failedo write init command (SET_UART_SPEED)"); 711 `Çno¦“p (& tm , NULL ); 713 } } 719  $swave ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 721  time¥ec tm = { 0, 500000 }; 722  cmd [10], r¥ [100]; 723  r ; 731 cmd [0] = HCI_COMMAND_PKT ; 732 cmd [1] = 0x0B; 733 cmd [2] = 0xfc; 734 cmd [3] = 0x06; 735 cmd [4] = 0x01; 736 cmd [5] = 0x11; 737 cmd [6] = 0x03; 738 cmd [7] = 0x01; 739 cmd [8] = 0x01; 741  u -> ¥“d ) { 743 cmd [9] = 0x03; 746 cmd [9] = 0x02; 749 cmd [9] = 0x01; 752 cmd [9] = 0x00; 755 u -> ¥“d = 115200; 756 cmd [9] = 0x00; 761 ià( `wr™e ( fd , cmd , 10) != 10) { 762 `³¼Ü ("Failedo write init command"); 771 `Çno¦“p (& tm , NULL ); 773 r = `»ad ( fd , r¥ , (rsp)); 774 ià( r > 0) { 796 cmd [0] = HCI_COMMAND_PKT ; 797 cmd [1] = 0x03; 798 cmd [2] = 0x0c; 799 cmd [3] = 0x00; 802 ià( `wr™e ( fd , cmd , 4) != 4) { 803 `³¼Ü ("Can't write Silicon Wave„eset cmd."); 807 `Çno¦“p (& tm , NULL ); 818 } } 824  $¡ ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 826  time¥ec tm = {0, 50000}; 827  cmd [5]; 830 cmd [0] = HCI_COMMAND_PKT ; 831 cmd [1] = 0x46; 832 cmd [2] = 0xfc; 833 cmd [3] = 0x01; 835  u -> ¥“d ) { 837 cmd [4] = 0x09; 840 cmd [4] = 0x0b; 843 cmd [4] = 0x0d; 846 cmd [4] = 0x0e; 849 cmd [4] = 0x10; 852 cmd [4] = 0x12; 855 cmd [4] = 0x13; 858 cmd [4] = 0x14; 861 cmd [4] = 0x10; 862 u -> ¥“d = 115200; 867 ià( `wr™e ( fd , cmd , 5) != 5) { 868 `³¼Ü ("Failedo write init command"); 872 `Çno¦“p (& tm , NULL ); 874 } } 876  $¡lc2500 ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 878 bdaddr_t bdaddr ; 879  »¥ [10]; 880  n ; 881  rv®ue ; 884 rv®ue = `”icssÚ ( fd , u , ti ); 885 ià( rv®ue != 0) 886  rv®ue ; 888 #ifdeà STLC2500_DEBUG 889 `årštf ( ¡d”r , "Setting speed\n"); 891 ià( `£t_¥“d ( fd , ti , u -> ¥“d ) < 0) { 892 `³¼Ü ("Can't set baud„ate"); 896 #ifdeà STLC2500_DEBUG 897 `årštf ( ¡d”r , "Speed set...\n"); 901 ià(( n = `»ad_hci_ev’t ( fd , »¥ , 10)) < 0) { 902 `årštf ( ¡d”r , "Failedo set baud„ate on chip\n"); 906 #ifdeà STLC2500_DEBUG 907  i = 0; i < n ; i++) { 908 `årštf ( ¡d”r , "»¥[%d] = %02x\n", i , »¥ [i]); 912 `¡r2ba ( u -> bdaddr , &bdaddr); 913  `¡lc2500_š™ ( fd , & bdaddr ); 914 } } 916  $bgb2xx ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 918 bdaddr_t bdaddr ; 920 `¡r2ba ( u -> bdaddr , &bdaddr); 922  `bgb2xx_š™ ( fd , & bdaddr ); 923 } } 929  $bcm2035 ( fd ,  u¬t_t * u ,  ‹rmios * ti ) 931  n ; 932  cmd [30], »¥ [30]; 935 `mem£t ( cmd , 0, (cmd)); 936 `mem£t ( »¥ , 0, (resp)); 937 cmd [0] = HCI_COMMAND_PKT ; 938 cmd [1] = 0x03; 939 cmd [2] = 0x0c; 940 cmd [3] = 0x00; 943 ià( `wr™e ( fd , cmd , 4) != 4) { 944 `årštf ( ¡d”r , "Failedo write„eset command\n"); 949 ià(( n = `»ad_hci_ev’t ( fd , »¥ , 4)) < 0) { 950 `årštf ( ¡d”r , "Failedo„eset chip\n"); 954 ià( u -> bdaddr !ð NULL ) { 956 `mem£t ( cmd , 0, (cmd)); 957 `mem£t ( »¥ , 0, (resp)); 958 cmd [0] = HCI_COMMAND_PKT ; 959 cmd [1] = 0x01; 960 cmd [2] = 0xfc; 961 cmd [3] = 0x06; 962 `¡r2ba ( u -> bdaddr , ( bdaddr_t *è( cmd + 4)); 965 ià( `wr™e ( fd , cmd , 10) != 10) { 966 `årštf ( ¡d”r , "Failedo write BD_ADDR command\n"); 971 ià(( n = `»ad_hci_ev’t ( fd , »¥ , 10)) < 0) { 972 `årštf ( ¡d”r , "Failedo set BD_ADDR\n"); 978 `mem£t ( cmd , 0, (cmd)); 979 `mem£t ( »¥ , 0, (resp)); 980 cmd [0] = HCI_COMMAND_PKT ; 981 cmd [1] = 0x01; 982 cmd [2] = 0x10; 983 cmd [3] = 0x00; 986 ià( `wr™e ( fd , cmd , 4) != 4) { 987 `årštf ( ¡d”r , "Failedo write \"read†ocal version\" " 993 ià(( n = `»ad_hci_ev’t ( fd , »¥ , 4)) < 0) { 994 `årštf ( ¡d”r , "Failedo„ead†ocal version\n"); 999 `mem£t ( cmd , 0, (cmd)); 1000 `mem£t ( »¥ , 0, (resp)); 1001 cmd [0] = HCI_COMMAND_PKT ; 1002 cmd [1] = 0x02; 1003 cmd [2] = 0x10; 1004 cmd [3] = 0x00; 1007 ià( `wr™e ( fd , cmd , 4) != 4) { 1008 `årštf ( ¡d”r , "Failedo write \"read†ocal supported " 1014 ià(( n = `»ad_hci_ev’t ( fd , »¥ , 4)) < 0) { 1015 `årštf ( ¡d”r , "Failedo„ead†ocal supported commands\n"); 1020 `mem£t ( cmd , 0, (cmd)); 1021 `mem£t ( »¥ , 0, (resp)); 1024 #iâdeà __BROADCOM_PATCH__ 1025 cmd [0] = HCI_COMMAND_PKT ; 1026 cmd [1] = 0x18; 1027 cmd [2] = 0xfc; 1028 cmd [3] = 0x02; 1029  u -> ¥“d ) { 1031 cmd [4] = 0x00; 1032 cmd [5] = 0xe6; 1035 cmd [4] = 0x22; 1036 cmd [5] = 0xfa; 1039 cmd [4] = 0x22; 1040 cmd [5] = 0xfd; 1043 cmd [4] = 0x55; 1044 cmd [5] = 0xff; 1048 cmd [4] = 0x00; 1049 cmd [5] = 0xf3; 1052 `årštf ( ¡d”r , "Baud„ate…arameters: DHBR=0x%2x,DLBR=0x%2x\n", 1053 cmd [4], cmd[5]); 1056 ià( `wr™e ( fd , cmd , 6) != 6) { 1057 `årštf ( ¡d”r , "Failedo write \"set baud„ate\" command\n"); 1061 cmd [0] = HCI_COMMAND_PKT ; 1062 cmd [1] = 0x18; 1063 cmd [2] = 0xfc; 1065  u -> ¥“d ) { 1076 cmd [3] = 0x06; 1077 cmd [4] = 0x00; 1078 cmd [5] = 0x00; 1079 cmd [6] = u -> ¥“d & 0xFF; 1080 cmd [7] = ( u -> ¥“d >> 8) & 0xFF; 1081 cmd [8] = ( u -> ¥“d >> 16) & 0xFF; 1082 cmd [9] = ( u -> ¥“d >> 24) & 0xFF; 1084 `årštf ( ¡d”r , "S‘hbaud„©%d : 0x%02x,0x%02x,0x%02x,0x%02x\n", u -> ¥“d , cmd [6],cmd[7],cmd[8],cmd[9] ); 1087 ià( `wr™e ( fd , cmd , 10) != 10) { 1088 `årštf ( ¡d”r , "Failedo write \"set baud„ate\" command\n"); 1094 ià(( n = `»ad_hci_ev’t ( fd , »¥ , 6)) < 0) { 1095 `årštf ( ¡d”r , "Failedo set baud„ate\n"); 1100 } } 1102  u¬t_t gu¬t [] = { 1103 { "ªy", 0x0000, 0x0000, HCI_UART_H4 , 115200, 115200, 1104 FLOW_CTL , DISABLE_PM , NULL , NULL }, 1105 { "”icssÚ", 0x0000, 0x0000, HCI_UART_H4 , 57600, 115200, 1106 FLOW_CTL , DISABLE_PM , NULL , ”icssÚ }, 1108 { "digi", 0x0000, 0x0000, HCI_UART_H4 , 9600, 115200, 1109 FLOW_CTL , DISABLE_PM , NULL , digi }, 1111 { "bc¥", 0x0000, 0x0000, HCI_UART_BCSP , 115200, 115200, 1112 0, DISABLE_PM , NULL , bc¥ }, 1115 { "xœcom", 0x0105, 0x080a, HCI_UART_H4 , 115200, 115200, 1116 FLOW_CTL , DISABLE_PM , NULL , NULL }, 1119 { "c¤", 0x0000, 0x0000, HCI_UART_H4 , 115200, 115200, 1120 FLOW_CTL , DISABLE_PM , NULL , c¤ }, 1123 { "bboxes", 0x0160, 0x0002, HCI_UART_H4 , 115200, 460800, 1124 FLOW_CTL , DISABLE_PM , NULL , c¤ }, 1127 { "swave", 0x0000, 0x0000, HCI_UART_H4 , 115200, 115200, 1128 FLOW_CTL , DISABLE_PM , NULL , swave }, 1131 #ifdeà __TI_PATCH__ 1133 { "‹xas", 0x0000, 0x0000, HCI_UART_LL , 115200,3000000, FLOW_CTL , NULL , ‹xas , NULL , BRF_DEEP_SLEEP_OPCODE }, 1136 { "‹xas", 0x0000, 0x0000, HCI_UART_LL , 115200, 115200, 1137 FLOW_CTL , DISABLE_PM , NULL , ‹xas , ‹xas2 }, 1139 { "‹xa§É", 0x0000, 0x0000, HCI_UART_LL , 115200, 115200, 1140 FLOW_CTL , DISABLE_PM , NULL , ‹xa§É , NULL }, 1144 { "¡", 0x0000, 0x0000, HCI_UART_H4 , 57600, 115200, 1145 FLOW_CTL , DISABLE_PM , NULL , ¡ }, 1148 { "¡lc2500", 0x0000, 0x0000, HCI_UART_H4 , 115200, 115200, 1149 FLOW_CTL , DISABLE_PM , "00:80:E1:00:AB:BA", ¡lc2500 }, 1152 { "phžs", 0x0000, 0x0000, HCI_UART_H4 , 115200, 115200, 1153 FLOW_CTL , DISABLE_PM , NULL , NULL }, 1156 { "bgb2xx", 0x0000, 0x0000, HCI_UART_H4 , 115200, 115200, 1157 FLOW_CTL , DISABLE_PM , "BD:B2:10:00:AB:BA", bgb2xx }, 1160 { "picoÿrd", 0x025e, 0x1000, HCI_UART_H4 , 115200, 115200, 1161 FLOW_CTL , DISABLE_PM , NULL , NULL }, 1164 { "šv’‹l", 0x0000, 0x0000, HCI_UART_H4 , 115200, 115200, 1165 FLOW_CTL , DISABLE_PM , NULL , NULL }, 1168 { "comÚe", 0xffff, 0x0101, HCI_UART_BCSP , 115200, 115200, 1169 0, DISABLE_PM , NULL , bc¥ }, 1172 { "tdk", 0x0105, 0x4254, HCI_UART_BCSP , 115200, 115200, 1173 0, DISABLE_PM , NULL , bc¥ }, 1176 { "sock‘", 0x0104, 0x0096, HCI_UART_BCSP , 230400, 230400, 1177 0, DISABLE_PM , NULL , bc¥ }, 1180 { "3com", 0x0101, 0x0041, HCI_UART_H4 , 115200, 115200, 1181 FLOW_CTL , DISABLE_PM , NULL , c¤ }, 1184 { "bt2000c", 0x022d, 0x2000, HCI_UART_H4 , 57600, 460800, 1185 FLOW_CTL , DISABLE_PM , NULL , c¤ }, 1188 { "zoom", 0x0279, 0x950b, HCI_UART_BCSP , 115200, 115200, 1189 0, DISABLE_PM , NULL , bc¥ }, 1192 { "s™ecom", 0x0279, 0x950b, HCI_UART_BCSP , 115200, 115200, 1193 0, DISABLE_PM , NULL , bc¥ }, 1196 { "bžliÚtÚ", 0x0279, 0x950b, HCI_UART_BCSP , 115200, 115200, 1197 0, DISABLE_PM , NULL , bc¥ }, 1200 { "bcm2035", 0x0A5C, 0x2035, HCI_UART_H4 , 115200, 460800, 1201 FLOW_CTL , DISABLE_PM , NULL , bcm2035 }, 1204 { "bcm43xx", 0x0000, 0x0000, HCI_UART_H4 , 115200, 3000000, 1205 FLOW_CTL , DISABLE_PM , NULL , bcm43xx , NULL }, 1207 { "©h3k", 0x0000, 0x0000, HCI_UART_ATH3K , 115200, 115200, 1208 FLOW_CTL , DISABLE_PM , NULL , ©h3k_ps , ©h3k_pm }, 1211 { "qu®comm", 0x0000, 0x0000, HCI_UART_H4 , 115200, 115200, 1212 FLOW_CTL , DISABLE_PM , NULL , qu®comm , NULL }, 1215 { "š‹l", 0x0000, 0x0000, HCI_UART_H4 , 115200, 115200, 1216 FLOW_CTL , DISABLE_PM , NULL , š‹l , NULL }, 1219 { "3wœe", 0x0000, 0x0000, HCI_UART_3WIRE , 115200, 115200, 1220 0, DISABLE_PM , NULL , NULL, NULL }, 1223 { "amp", 0x0000, 0x0000, HCI_UART_H4 , 115200, 115200, 1224 AMP_DEV , DISABLE_PM , NULL , NULL, NULL }, 1226 { NULL , 0 } 1229  u¬t_t * $g‘_by_id ( m_id ,  p_id ) 1231  i ; 1232  i = 0; u¬t [i]. ty³ ; i++) { 1233 ià( u¬t [ i ]. m_id =ðm_id && u¬t[i]. p_id ==…_id) 1234  & u¬t [ i ]; 1236  NULL ; 1237 } } 1239  u¬t_t * $g‘_by_ty³ (* ty³ ) 1241  i ; 1242  i = 0; u¬t [i]. ty³ ; i++) { 1243 ià(! `¡rcmp ( u¬t [ i ]. ty³ ,ype)) 1244  & u¬t [ i ]; 1246  NULL ; 1247 } } 1249 #ifdeà __BROADCOM_PATCH__ 1250  $’abË_hci (* dev ,  u¬t_t * u ) 1252  fd , i ; 1253  æags = 0; 1255 fd = `Ý’ ( dev , O_RDWR | O_NOCTTY ); 1256 ià( fd < 0) { 1257 `årštf ( ¡d”r , "Can't open serial…ort"); 1261 `tcæush ( fd , TCIOFLUSH ); 1264 i = N_HCI ; 1265 ià( `ioùl ( fd , TIOCSETD , & i ) < 0) { 1266 `årštf ( ¡d”r , "Can't set†ine discipline"); 1267 `þo£ ( fd ); 1271 ià( æags && `ioùl ( fd , HCIUARTSETFLAGS , flags) < 0) { 1272 `årštf ( ¡d”r , "Can't set UART flags"); 1273 `þo£ ( fd ); 1277 `tcæush ( fd , TCIOFLUSH ); 1279 ià( `ioùl ( fd , HCIUARTSETPROTO , u -> ´Ùo ) < 0) { 1280 `årštf ( ¡d”r , "Can't set device"); 1281 `þo£ ( fd ); 1285  fd ; 1286 } } 1291  $š™_u¬t (* dev ,  u¬t_t * u ,  £nd_b»ak ,  ¿w ) 1293  ‹rmios ti ; 1294  fd , i ; 1295  æags = 0; 1298 #ià `defšed ( __TI_PATCH__ è|| defšed( __BROADCOM_PATCH__ ) 1299  pow” ; 1302 ià( ¿w ) 1303 æags |ð1 << HCI_UART_RAW_DEVICE ; 1305 ià( u -> æags & AMP_DEV ) 1306 æags |ð1 << HCI_UART_CREATE_AMP ; 1308 fd = `Ý’ ( dev , O_RDWR | O_NOCTTY ); 1309 ià( fd < 0) { 1310 `³¼Ü ("Can't open serial…ort"); 1314 `tcæush ( fd , TCIOFLUSH ); 1316 ià( `tcg‘©Œ ( fd , & ti ) < 0) { 1317 `³¼Ü ("Can't get…ort settings"); 1321 `cfmak”aw (& ti ); 1324 #iâdeà __BROADCOM_PATCH__ 1325 ti . c_cæag |ð CLOCAL ; 1326 ià( u -> æags & FLOW_CTL ) 1327 ti . c_cæag |ð CRTSCTS ; 1329 ti . c_cæag &ð~ CRTSCTS ; 1332 ià( `tc£‰r ( fd , TCSANOW , & ti ) < 0) { 1333 `³¼Ü ("Can't set…ort settings"); 1338 ià( `£t_¥“d ( fd , & ti , u -> š™_¥“d ) < 0) { 1339 `³¼Ü ("Can't set initial baud„ate"); 1343 `tcæush ( fd , TCIOFLUSH ); 1345 ià( £nd_b»ak ) { 1346 `tc£ndb»ak ( fd , 0); 1347 `u¦“p (500000); 1351 #ià `defšed ( __TI_PATCH__ è|| defšed( __BROADCOM_PATCH__ ) 1353 pow” = 1; 1354 `ioùl ( fd , TIOSETBRFPOWER , & pow” ); 1356 #ifdeà __TI_PATCH__ 1357 `u¦“p (500000); 1360 ià( u -> š™ && u-> `š™ ( fd , u, & ti ) < 0) 1363 `tcæush ( fd , TCIOFLUSH ); 1366 ià( `£t_¥“d ( fd , & ti , u -> ¥“d ) < 0) { 1367 `³¼Ü ("Can't set baud„ate"); 1372 i = N_HCI ; 1373 ià( `ioùl ( fd , TIOCSETD , & i ) < 0) { 1374 `³¼Ü ("Can't set†ine discipline"); 1378 ià( æags && `ioùl ( fd , HCIUARTSETFLAGS , flags) < 0) { 1379 `³¼Ü ("Can't set UART flags"); 1383 ià( `ioùl ( fd , HCIUARTSETPROTO , u -> ´Ùo ) < 0) { 1384 `³¼Ü ("Can't set device"); 1389 ià( u -> po¡ && u-> `po¡ ( fd , u, & ti ) < 0) 1393  fd ; 1394 } } 1398  $u§ge () 1400 `´štf ("hciattach - HCI UART driver initialization utility\n"); 1401 `´štf ("Usage:\n"); 1404 #ifdeà __TI_PATCH__ 1407 `´štf ("\thciattach [-n] [-p] [-b] [-g device_param] [-r] [-f]" 1412 `´štf ("\thciattach [-n] [-p] [-b] [-r] [-timeout] [-s initial_speed]" 1416 `´štf ("\thciattach -l\n"); 1417 } } 1419  $maš ( ¬gc , * ¬gv []) 1421  u¬t_t * u = NULL ; 1422 #iâdeà __BROADCOM_PATCH__ 1423  d‘ach , ´šid , ¿w , Ýt , i , n , ld , ”r ; 1425  d‘ach , ´šid , Ýt , i , n , ld , ”r ; 1427  to = 10; 1428  š™_¥“d = 0; 1429 #iâdeà __BROADCOM_PATCH__ 1430  £nd_b»ak = 0; 1432 pid_t pid ; 1433  sigaùiÚ § ; 1434  pÞlfd p ; 1435 sig£t_t sigs ; 1436  dev [ PATH_MAX ]; 1439 #ià `defšed ( __TI_PATCH__ è|| defšed( __BROADCOM_PATCH__ ) 1440  pow” ; 1442 #ifdeà __TI_PATCH__ 1443 ušt16_t deviû_·¿m = 0; 1444  »£t_deviû = 0; 1445  bt_fd ; 1447 d‘ach = 1; 1448 ´šid = 0; 1449 #iâdeà __BROADCOM_PATCH__ 1450 ¿w = 0; 1452 #ifdeà __TI_PATCH__ 1453 ( Ýt = `g‘Ýt ( ¬gc , ¬gv , "bÅrá:g:s:l")è!ð EOF ) { 1455 ( Ýt = `g‘Ýt ( ¬gc , ¬gv , "bÅt:s:Ì")è!ð EOF ) { 1457  Ýt ) { 1459 #iâdeà __BROADCOM_PATCH__ 1460 £nd_b»ak = 1; 1465 d‘ach = 0; 1469 ´šid = 1; 1473 to = `©oi ( Ýrg ); 1477 #ifdeà __TI_PATCH__ 1479 deviû_·¿m = ( ušt16_t ) `¡¹Þ ( Ýrg , NULL , 16); 1483 »£t_deviû = 1; 1487 fœmw¬e_·th = 1; 1491 š™_¥“d = `©oi ( Ýrg ); 1495  i = 0; u¬t [i]. ty³ ; i++) { 1496 `´štf ("%-10s0x%04x,0x%04x\n", u¬t [ i ]. ty³ , 1497 u¬t [ i ]. m_id , u¬t[i]. p_id ); 1499 `ex™ (0); 1502 #iâdeà __BROADCOM_PATCH__ 1503 ¿w = 1; 1508 `u§ge (); 1509 `ex™ (1); 1513 n = ¬gc - Ýtšd ; 1515 #ifdeà __TI_PATCH__ 1516 ià(! »£t_deviû || (»£t_deviû && n < 1)) 1518 ià( n < 2) { 1519 `u§ge (); 1520 `ex™ (1); 1523  n = 0; Ýtšd < ¬gc ;‚++, optind++) { 1524 * Ýt ; 1526 Ýt = ¬gv [ Ýtšd ]; 1528  n ) { 1530 dev [0] = 0; 1531 ià(! `¡rchr ( Ýt , '/')) 1532 `¡rýy ( dev , "/dev/"); 1533 `¡rÿt ( dev , Ýt ); 1537 ià( `¡rchr ( ¬gv [ Ýtšd ], ',')) { 1538  m_id , p_id ; 1539 `ssÿnf ( ¬gv [ Ýtšd ], "%x,%x", & m_id , & p_id ); 1540 u = `g‘_by_id ( m_id , p_id ); 1542 u = `g‘_by_ty³ ( Ýt ); 1545 ià(! u ) { 1546 `årštf ( ¡d”r , "Unknown deviceype or id\n"); 1547 `ex™ (1); 1553 u -> ¥“d = `©oi ( ¬gv [ Ýtšd ]); 1557 ià(! `¡rcmp ("æow", ¬gv [ Ýtšd ])) 1558 u -> æags |ð FLOW_CTL ; 1560 u -> æags &ð~ FLOW_CTL ; 1564 ià(! `¡rcmp ("¦“p", ¬gv [ Ýtšd ])) 1565 u -> pm = ENABLE_PM ; 1567 u -> pm = DISABLE_PM ; 1571 u -> bdaddr = ¬gv [ Ýtšd ]; 1576 #ifdeà __TI_PATCH__ 1577 ià( »£t_deviû ) 1580 bt_fd = `Ý’ ( dev , O_RDWR | O_NOCTTY ); 1581 ià( bt_fd < 0) { 1582 `³¼Ü ("Can't open serial…ort"); 1586 pow” = 0; 1587 `ioùl ( bt_fd , TIOSETBRFPOWER , & pow” ); 1592 ià(! u ) { 1593 `årštf ( ¡d”r , "Unknown deviceype or id\n"); 1594 `ex™ (1); 1597 #ifdeà __TIZEN_PATCH__ 1603 ià( š™_¥“d ) 1604 u -> š™_¥“d = init_speed; 1605 #ifdeà __TI_PATCH__ 1608 ià( deviû_·¿m ) 1609 u -> deviû_·¿m = device_param; 1612 `mem£t (& § , 0, (sa)); 1613 § . §_æags = SA_NOCLDSTOP ; 1614 § . §_hªdËr = sig_®¬m ; 1615 `sigaùiÚ ( SIGALRM , & § , NULL ); 1618 `®¬m ( to ); 1619 bc¥_max_»Œ›s = to ; 1620 #ifdeà __BROADCOM_PATCH__ 1621 n = `’abË_hci ( dev , u ); 1623 n = `š™_u¬t ( dev , u , £nd_b»ak , ¿w ); 1625 ià( n < 0) { 1626 `³¼Ü ("Can't initialize device"); 1627 `ex™ (1); 1630 `´štf ("Device setup complete\n"); 1632 `®¬m (0); 1634 `mem£t (& § , 0, (sa)); 1635 § . §_æags = SA_NOCLDSTOP ; 1636 § . §_hªdËr = SIG_IGN ; 1637 `sigaùiÚ ( SIGCHLD , & § , NULL ); 1638 `sigaùiÚ ( SIGPIPE , & § , NULL ); 1640 § . §_hªdËr = sig_‹rm ; 1641 `sigaùiÚ ( SIGTERM , & § , NULL ); 1642 `sigaùiÚ ( SIGINT , & § , NULL ); 1644 § . §_hªdËr = sig_hup ; 1645 `sigaùiÚ ( SIGHUP , & § , NULL ); 1647 ià( d‘ach ) { 1648 ià(( pid = `fÜk ())) { 1649 ià( ´šid ) 1650 `´štf ("%d\n", pid ); 1654  i = 0; i < 20; i++) 1655 ià( i !ð n ) 1656 `þo£ ( i ); 1659 p . fd = n ; 1660 p . ev’ts = POLLERR | POLLHUP ; 1662 `sigfžl£t (& sigs ); 1663 `sigd–£t (& sigs , SIGCHLD ); 1664 `sigd–£t (& sigs , SIGPIPE ); 1665 `sigd–£t (& sigs , SIGTERM ); 1666 `sigd–£t (& sigs , SIGINT ); 1667 `sigd–£t (& sigs , SIGHUP ); 1669 ! __io_ÿnûËd ) { 1670 p . »v’ts = 0; 1671 ”r = `µÞl (& p , 1, NULL , & sigs ); 1672 ià( ”r < 0 && ”ºo =ð EINTR ) 1674 ià( ”r ) 1679 ld = N_TTY ; 1680 ià( `ioùl ( n , TIOCSETD , & ld ) < 0) { 1681 `³¼Ü ("Can't„estore†ine discipline"); 1682 `ex™ (1); 1686 #ià `defšed ( __TI_PATCH__ è|| defšed( __BROADCOM_PATCH__ ) 1688 pow” = 0; 1689 `ioùl ( n , TIOSETBRFPOWER , & pow” ); 1692 } } @tools/hciattach.h 24  ~<‹rmios.h > 26 #iâdeà N_HCI 27  #N_HCI 15 ) 30  #HCIUARTSETPROTO `_IOW ('U', 200, ) ) 31  #HCIUARTGETPROTO `_IOR ('U', 201, ) ) 32  #HCIUARTGETDEVICE `_IOR ('U', 202, ) ) 33  #HCIUARTSETFLAGS `_IOW ('U', 203, ) ) 34  #HCIUARTGETFLAGS `_IOR ('U', 204, ) ) 36  #HCI_UART_H4 0 ) 37  #HCI_UART_BCSP 1 ) 38  #HCI_UART_3WIRE 2 ) 39  #HCI_UART_H4DS 3 ) 40  #HCI_UART_LL 4 ) 41  #HCI_UART_ATH3K 5 ) 43  #HCI_UART_RAW_DEVICE 0 ) 44  #HCI_UART_RESET_ON_INIT 1 ) 45  #HCI_UART_CREATE_AMP 2 ) 47  »ad_hci_ev’t ( fd , * buf ,  size ); 48  £t_¥“d ( fd ,  ‹rmios * ti ,  ¥“d ); 49  u¬t_¥“d ( ¥“d ); 51  ‹xas_š™ ( fd , * ¥“d ,  ‹rmios * ti ); 52  ‹xas_po¡ ( fd ,  ‹rmios * ti ); 53  ‹xa§É_š™ ( fd ,  ¥“d ,  ‹rmios * ti ); 54  ¡lc2500_š™ ( fd , bdaddr_t * bdaddr ); 55  bgb2xx_š™ ( dd , bdaddr_t * bdaddr ); 56  ©h3k_š™ ( fd ,  ¥“d ,  š™_¥“d , * bdaddr , 57  ‹rmios * ti ); 58  ©h3k_po¡ ( fd ,  pm ); 59  qu®comm_š™ ( fd ,  ¥“d ,  ‹rmios * ti , cÚ¡ * bdaddr ); 60  š‹l_š™ ( fd ,  š™_¥“d , * ¥“d ,  ‹rmios * ti ); 61  bcm43xx_š™ ( fd ,  def_¥“d ,  ¥“d ,  ‹rmios * ti , 62 cÚ¡ * bdaddr ); @tools/hciattach_ath3k.c 20 #ifdeà HAVE_CONFIG_H 21  ~ 24  ~<¡dio.h > 25  ~<”ºo.h > 26  ~ 27  ~<¡dlib.h > 28  ~<¡ršg.h > 29  ~<ùy³.h > 30  ~ 31  ~ 32  ~ 33  ~ 34  ~ 36  ~ 37  ~ 38  ~ 40  ~"hcŸ‰ach.h " 42  #TRUE 1 ) 43  #FALSE 0 ) 45  #FW_PATH "/lib/fœmw¬e/¬3k/" ) 47  sps_cfg_’Œy { 48 ušt32_t mid ; 49 ušt32_t mËn ; 50 ušt8_t * md©a ; 53  sps_’Œy_ty³ { 54  mty³ ; 55  m¬¿y ; 58  #MAX_TAGS 50 ) 59  #PS_HDR_LEN 4 ) 60  #HCI_VENDOR_CMD_OGF 0x3F ) 61  #HCI_PS_CMD_OCF 0x0B ) 63  ps_cfg_’Œy gps_li¡ [ MAX_TAGS ]; 65  $lßd_hci_ps_hdr ( ušt8_t * cmd , ušt8_ˆ ps_Ý ,  Ën ,  šdex ) 67 hci_commªd_hdr * ch = (*) cmd ; 69 ch -> Ýcode = `htobs ( `cmd_Ýcode_·ck ( HCI_VENDOR_CMD_OGF , 70 HCI_PS_CMD_OCF )); 71 ch -> ¶’ = Ën + PS_HDR_LEN ; 72 cmd +ð HCI_COMMAND_HDR_SIZE ; 74 cmd [0] = ps_Ý ; 75 cmd [1] = šdex ; 76 cmd [2] = šdex >> 8; 77 cmd [3] = Ën ; 78 } } 80  #PS_EVENT_LEN 100 ) 86  $£nd_hci_cmd_sync ( dev , ušt8_t * cmd ,  Ën , ušt8_ˆ** ev’t ) 88  ”r ; 89 ušt8_t * hci_ev’t ; 90 ušt8_t pkt_ty³ = HCI_COMMAND_PKT ; 92 ià( Ën == 0) 93  Ën ; 95 ià( `wr™e ( dev , & pkt_ty³ , 1) != 1) 96  - EILSEQ ; 97 ià( `wr™e ( dev , (*) cmd , Ën ) !=†en) 98  - EILSEQ ; 100 hci_ev’t = ( ušt8_t *) `m®loc ( PS_EVENT_LEN ); 101 ià(! hci_ev’t ) 102  - ENOMEM ; 104 ”r = `»ad_hci_ev’t ( dev , (*) hci_ev’t , PS_EVENT_LEN ); 105 ià( ”r > 0) { 106 * ev’t = hci_ev’t ; 108 `ä“ ( hci_ev’t ); 109  - EILSEQ ; 112  Ën ; 113 } } 115  #HCI_EV_SUCCESS 0x00 ) 117  $»ad_ps_ev’t ( ušt8_t * ev’t , ušt16_t ocf ) 119 hci_ev’t_hdr * eh ; 120 ušt16_t Ýcode = `htobs ( `cmd_Ýcode_·ck ( HCI_VENDOR_CMD_OGF , ocf )); 122 ev’t ++; 124 eh = (*) ev’t ; 125 ev’t +ð HCI_EVENT_HDR_SIZE ; 127 ià( eh -> evt =ð EVT_CMD_COMPLETE ) { 128 evt_cmd_com¶‘e * cc = (*) ev’t ; 130 ev’t +ð EVT_CMD_COMPLETE_SIZE ; 132 ià( cc -> Ýcode =ðÝcod&& ev’t [0] =ð HCI_EV_SUCCESS ) 135  - EILSEQ ; 138  - EILSEQ ; 139 } } 141  $wr™e_cmd ( fd , ušt8_t * bufãr ,  Ën ) 143 ušt8_t * ev’t ; 144  ”r ; 146 ”r = `£nd_hci_cmd_sync ( fd , bufãr , Ën , & ev’t ); 147 ià( ”r < 0) 148  ”r ; 150 ”r = `»ad_ps_ev’t ( ev’t , HCI_PS_CMD_OCF ); 152 `ä“ ( ev’t ); 154  ”r ; 155 } } 157  #PS_WRITE 1 ) 158  #PS_RESET 2 ) 159  #WRITE_PATCH 8 ) 160  #ENABLE_PATCH 11 ) 162  #HCI_PS_CMD_HDR_LEN 7 ) 164  #PS_RESET_PARAM_LEN 6 ) 165  #HCI_MAX_CMD_SIZE 260 ) 166  #PS_RESET_CMD_LEN ( HCI_PS_CMD_HDR_LEN + PS_RESET_PARAM_LEN ) ) 168  #PS_ID_MASK 0xFF ) 171  $wr™e_ps_cmd ( fd , ušt8_t Ýcode , ušt32_t ps_·¿m ) 173 ušt8_t cmd [ HCI_MAX_CMD_SIZE ]; 174 ušt32_t i ; 176  Ýcode ) { 177  ENABLE_PATCH : 178 `lßd_hci_ps_hdr ( cmd , Ýcode , 0, 0x00); 180 ià( `wr™e_cmd ( fd , cmd , HCI_PS_CMD_HDR_LEN ) < 0) 181  - EILSEQ ; 184  PS_RESET : 185 `lßd_hci_ps_hdr ( cmd , Ýcode , PS_RESET_PARAM_LEN , 0x00); 187 cmd [7] = 0x00; 188 cmd [ PS_RESET_CMD_LEN - 2] = ps_·¿m & PS_ID_MASK ; 189 cmd [ PS_RESET_CMD_LEN - 1] = ( ps_·¿m >> 8è& PS_ID_MASK ; 191 ià( `wr™e_cmd ( fd , cmd , PS_RESET_CMD_LEN ) < 0) 192  - EILSEQ ; 195  PS_WRITE : 196  i = 0; i < ps_·¿m ; i++) { 197 `lßd_hci_ps_hdr ( cmd , Ýcode , ps_li¡ [ i ]. Ën , 198 ps_li¡ [ i ]. id ); 200 `memýy (& cmd [ HCI_PS_CMD_HDR_LEN ], ps_li¡ [ i ]. d©a , 201 ps_li¡ [ i ]. Ën ); 203 ià( `wr™e_cmd ( fd , cmd , ps_li¡ [ i ]. Ën + 204 HCI_PS_CMD_HDR_LEN ) < 0) 205  - EILSEQ ; 211 } } 213  #__is_d–im ( ch è((chè=ð':') ) 214  #MAX_PREAMBLE_LEN 4 ) 217  $g‘_ps_ty³ (* ±r ,  šdex , * ty³ , * sub_ty³ ) 219  i ; 220  d–im = FALSE ; 222 ià( šdex > MAX_PREAMBLE_LEN ) 223  - EILSEQ ; 225  i = 1; i < šdex ; i++) { 226 ià( `__is_d–im ( ±r [ i ])) { 227 d–im = TRUE ; 231 ià( `i§Íha ( ±r [ i ])) { 232 ià( d–im =ð FALSE ) 233 (* ty³ èð `touµ” ( ±r [ i ]); 235 (* sub_ty³ èð `touµ” ( ±r [ i ]); 240 } } 242  #ARRAY 'A' ) 243  #STRING 'S' ) 244  #DECIMAL 'D' ) 245  #BINARY 'B' ) 247  #PS_HEX 0 ) 248  #PS_DEC 1 ) 250  $g‘_šput_fÜm© (* buf ,  ps_’Œy_ty³ * fÜm© ) 252 * ±r = NULL ; 253  ty³ = '\0'; 254  sub_ty³ = '\0'; 256 fÜm© -> ty³ = PS_HEX ; 257 fÜm© -> ¬¿y = TRUE ; 259 ià( `¡r¡r ( buf , "[") != buf) 262 ±r = `¡r¡r ( buf , "]"); 263 ià(! ±r ) 264  - EILSEQ ; 266 ià( `g‘_ps_ty³ ( buf , ±r - buf, & ty³ , & sub_ty³ ) < 0) 267  - EILSEQ ; 270 ià( ty³ =ð ARRAY || sub_ty³ == ARRAY) 271 fÜm© -> ¬¿y = TRUE ; 273 ià( ty³ =ð STRING || sub_ty³ == STRING) 274 fÜm© -> ¬¿y = FALSE ; 276 ià( ty³ =ð DECIMAL ||y³ =ð BINARY ) 277 fÜm© -> ty³ = PS_DEC ; 279 fÜm© -> ty³ = PS_HEX ; 282 } } 284  #UNDEFINED 0xFFFF ) 286  $»ad_d©a_š_£ùiÚ (* buf ,  ps_’Œy_ty³ ty³ ) 288 * ±r = buf ; 290 ià(! buf ) 291  UNDEFINED ; 293 ià( buf =ð `¡r¡r (buf, "[")) { 294 ±r = `¡r¡r ( buf , "]"); 295 ià(! ±r ) 296  UNDEFINED ; 298 ±r ++; 301 ià( ty³ .ty³ =ð PS_HEX &&y³. ¬¿y !ð TRUE ) 302  `¡¹Þ ( ±r , NULL , 16); 304  UNDEFINED ; 305 } } 307  sg_šfo { 308  m£ùiÚ ; 309  mlše_couÁ ; 310  mch¬_út ; 311  mby‹_couÁ ; 314  šlše  $upd©e_ch¬_couÁ (cÚ¡ * buf ) 316 * ’d_±r ; 318 ià( `¡r¡r ( buf , "[") == buf) { 319 ’d_±r = `¡r¡r ( buf , "]"); 320 ià(! ’d_±r ) 323  ( ’d_±r - buf ) + 1; 327 } } 330  $upd©e_g_d©a ( ps_cfg_’Œy * g , 331  g_šfo * šfo , cÚ¡ * ±r ) 333  buf [3]; 335 buf [2] = '\0'; 337 `¡ºýy ( buf , & ±r [ šfo -> ch¬_út ], 2); 338 g -> d©a [ šfo -> by‹_couÁ ] = `¡¹Þ ( buf , NULL , 16); 339 šfo -> ch¬_út += 3; 340 šfo -> by‹_couÁ ++; 342 `¡ºýy ( buf , & ±r [ šfo -> ch¬_út ], 2); 343 g -> d©a [ šfo -> by‹_couÁ ] = `¡¹Þ ( buf , NULL , 16); 344 šfo -> ch¬_út += 3; 345 šfo -> by‹_couÁ ++; 346 } } 348  #PS_UNDEF 0 ) 349  #PS_ID 1 ) 350  #PS_LEN 2 ) 351  #PS_DATA 3 ) 353  #PS_MAX_LEN 500 ) 354  #LINE_SIZE_MAX ( PS_MAX_LEN * 2) ) 355  #ENTRY_PER_LINE 16 ) 357  #__check_comm’t ( buf è(((buf)[0] =ð'/'è&& ((buf)[1] =ð'/')) ) 358  #__sk_¥aû ( ¡r è*(¡rè=ð' 'è((¡r)++) ) 360  $©h_·r£_ps ( FILE * ¡»am ) 362  buf [ LINE_SIZE_MAX + 1]; 363 * ±r ; 364 ušt8_t g_út = 0; 365 št16_t by‹_couÁ = 0; 366  ps_’Œy_ty³ fÜm© ; 367  g_šfo ¡©us = { 0, 0, 0, 0 }; 370  »ad_couÁ ; 371  ps_cfg_’Œy * g ; 373 ±r = `fg‘s ( buf , LINE_SIZE_MAX , ¡»am ); 374 ià(! ±r ) 377 `__sk_¥aû ( ±r ); 378 ià( `__check_comm’t ( ±r )) 382 ià( ±r =ð `¡r¡r (ptr, "#")) { 383 ià( ¡©us . £ùiÚ !ð PS_UNDEF ) { 384  - EILSEQ ; 386 ¡©us . £ùiÚ = PS_ID ; 391 g = & ps_li¡ [ g_út ]; 393  ¡©us . £ùiÚ ) { 394  PS_ID : 395 ià( `g‘_šput_fÜm© ( ±r , & fÜm© ) < 0) 396  - EILSEQ ; 398 g -> id = `»ad_d©a_š_£ùiÚ ( ±r , fÜm© ); 399 ¡©us . £ùiÚ = PS_LEN ; 402  PS_LEN : 403 ià( `g‘_šput_fÜm© ( ±r , & fÜm© ) < 0) 404  - EILSEQ ; 406 by‹_couÁ = `»ad_d©a_š_£ùiÚ ( ±r , fÜm© ); 407 ià( by‹_couÁ > PS_MAX_LEN ) 408  - EILSEQ ; 410 g -> Ën = by‹_couÁ ; 411 g -> d©a = ( ušt8_t *) `m®loc ( by‹_couÁ ); 413 ¡©us . £ùiÚ = PS_DATA ; 414 ¡©us . lše_couÁ = 0; 417  PS_DATA : 418 ià( ¡©us . lše_couÁ == 0) 419 ià( `g‘_šput_fÜm© ( ±r , & fÜm© ) < 0) 420  - EILSEQ ; 422 `__sk_¥aû ( ±r ); 424 ¡©us . ch¬_út = `upd©e_ch¬_couÁ ( ±r ); 426 »ad_couÁ = ( by‹_couÁ > ENTRY_PER_LINE ) ? 427 ENTRY_PER_LINE : by‹_couÁ ; 429 ià( fÜm© . ty³ =ð PS_HEX && fÜm©. ¬¿y =ð TRUE ) { 430  »ad_couÁ > 0) { 431 `upd©e_g_d©a ( g , & ¡©us , ±r ); 432 »ad_couÁ -= 2; 435 ià( by‹_couÁ > ENTRY_PER_LINE ) 436 by‹_couÁ -ð ENTRY_PER_LINE ; 438 by‹_couÁ = 0; 441 ¡©us . lše_couÁ ++; 443 ià( by‹_couÁ == 0) 444 `mem£t (& ¡©us , 0x00, ( g_šfo )); 446 ià( ¡©us . £ùiÚ =ð PS_UNDEF ) 447 g_út ++; 449 ià( g_út =ð MAX_TAGS ) 450  - EILSEQ ; 453 }  ±r ); 455  g_út ; 456 } } 458  #MAX_PATCH_CMD 244 ) 459  s·tch_’Œy { 460 št16_t mËn ; 461 ušt8_t md©a [ MAX_PATCH_CMD ]; 464  #SET_PATCH_RAM_ID 0x0D ) 465  #SET_PATCH_RAM_CMD_SIZE 11 ) 466  #ADDRESS_LEN 4 ) 467  $£t_·tch_¿m ( dev , * ·tch_loc ,  Ën ) 469  ”r ; 470 ušt8_t cmd [20]; 471  i , j ; 472  loc_by‹ [3]; 473 ušt8_t * ev’t ; 474 ušt8_t * loc_±r = & cmd [7]; 476 ià(! ·tch_loc ) 479 loc_by‹ [2] = '\0'; 481 `lßd_hci_ps_hdr ( cmd , SET_PATCH_RAM_ID , ADDRESS_LEN , 0); 483  i = 0, j = 3; i < 4; i++, j--) { 484 loc_by‹ [0] = ·tch_loc [0]; 485 loc_by‹ [1] = ·tch_loc [1]; 486 loc_±r [ j ] = `¡¹Þ ( loc_by‹ , NULL , 16); 487 ·tch_loc += 2; 490 ”r = `£nd_hci_cmd_sync ( dev , cmd , SET_PATCH_RAM_CMD_SIZE , & ev’t ); 491 ià( ”r < 0) 492  ”r ; 494 ”r = `»ad_ps_ev’t ( ev’t , HCI_PS_CMD_OCF ); 496 `ä“ ( ev’t ); 498  ”r ; 499 } } 501  #PATCH_LOC_KEY "DA:" ) 502  #PATCH_LOC_STRING_LEN 8 ) 503  $ps_·tch_dowÆßd ( fd , FILE * ¡»am ) 505  by‹ [3]; 506  ±r [ MAX_PATCH_CMD + 1]; 507  by‹_út ; 508  ·tch_couÁ = 0; 509  ·tch_loc [ PATCH_LOC_STRING_LEN + 1]; 511 by‹ [2] = '\0'; 513  `fg‘s ( ±r , MAX_PATCH_CMD , ¡»am )) { 514 ià( `¡¾’ ( ±r ) <= 1) 516 ià( `¡r¡r ( ±r , PATCH_LOC_KEY ) ==…tr) { 517 `¡ºýy ( ·tch_loc , & ±r [( PATCH_LOC_KEY ) - 1], 518 PATCH_LOC_STRING_LEN ); 519 ià( `£t_·tch_¿m ( fd , ·tch_loc , (patch_loc)) < 0) 521 } ià( `isxdig™ ( ±r [0])) 527 by‹_út = `¡¹Þ ( ±r , NULL , 16); 529  by‹_út > 0) { 530  i ; 531 ušt8_t cmd [ HCI_MAX_CMD_SIZE ]; 532  ·tch_’Œy ·tch ; 534 ià( by‹_út > MAX_PATCH_CMD ) 535 ·tch . Ën = MAX_PATCH_CMD ; 537 ·tch . Ën = by‹_út ; 539  i = 0; i < ·tch . Ën ; i++) { 540 ià(! `fg‘s ( by‹ , 3, ¡»am )) 543 ·tch . d©a [ i ] = `¡¹oul ( by‹ , NULL , 16); 546 `lßd_hci_ps_hdr ( cmd , WRITE_PATCH , ·tch . Ën , ·tch_couÁ ); 547 `memýy (& cmd [ HCI_PS_CMD_HDR_LEN ], ·tch . d©a ,…©ch. Ën ); 549 ià( `wr™e_cmd ( fd , cmd , ·tch . Ën + HCI_PS_CMD_HDR_LEN ) < 0) 552 ·tch_couÁ ++; 553 by‹_út = by‹_úˆ- MAX_PATCH_CMD ; 556 ià( `wr™e_ps_cmd ( fd , ENABLE_PATCH , 0) < 0) 559  ·tch_couÁ ; 560 } } 562  #PS_RAM_SIZE 2048 ) 564  $ps_cÚfig_dowÆßd ( fd ,  g_couÁ ) 566 ià( `wr™e_ps_cmd ( fd , PS_RESET , PS_RAM_SIZE ) < 0) 569 ià( g_couÁ > 0) 570 ià( `wr™e_ps_cmd ( fd , PS_WRITE , g_couÁ ) < 0) 573 } } 575  #PS_ASIC_FILE "PS_ASIC.p¡" ) 576  #PS_FPGA_FILE "PS_FPGA.p¡" ) 578  $g‘_ps_fže_Çme ( ušt32_t devty³ , ušt32_ˆ rom_v”siÚ , 579 * ·th ) 581 * fž’ame ; 583 ià( devty³ == 0xdeadc0de) 584 fž’ame = PS_ASIC_FILE ; 586 fž’ame = PS_FPGA_FILE ; 588 `¢´štf ( ·th , MAXPATHLEN , "%s%x/%s", FW_PATH , rom_v”siÚ , fž’ame ); 589 } } 591  #PATCH_FILE "RamP©ch.txt" ) 592  #FPGA_ROM_VERSION 0x99999999 ) 593  #ROM_DEV_TYPE 0xd—dc0de ) 595  $g‘_·tch_fže_Çme ( ušt32_t dev_ty³ , ušt32_ˆ rom_v”siÚ , 596 ušt32_t bužd_v”siÚ , * ·th ) 598 ià( rom_v”siÚ =ð FPGA_ROM_VERSION && dev_ty³ !ð ROM_DEV_TYPE && 599 dev_ty³ !ð0 && bužd_v”siÚ == 1) 600 ·th [0] = '\0'; 602 `¢´štf ( ·th , MAXPATHLEN , "%s%x/%s", 603 FW_PATH , rom_v”siÚ , PATCH_FILE ); 604 } } 606  #VERIFY_CRC 9 ) 607  #PS_REGION 1 ) 608  #PATCH_REGION 2 ) 610  $g‘_©h3k_üc ( dev ) 612 ušt8_t cmd [7]; 613 ušt8_t * ev’t ; 614  ”r ; 616 `lßd_hci_ps_hdr ( cmd , VERIFY_CRC , 0, PS_REGION | PATCH_REGION ); 618 ”r = `£nd_hci_cmd_sync ( dev , cmd , (cmd), & ev’t ); 619 ià( ”r < 0) 620  ”r ; 622 ià( `»ad_ps_ev’t ( ev’t , HCI_PS_CMD_OCF ) >= 0) 623 ”r = - EILSEQ ; 625 `ä“ ( ev’t ); 627  ”r ; 628 } } 630  #DEV_REGISTER 0x4FFC ) 631  #GET_DEV_TYPE_OCF 0x05 ) 633  $g‘_deviû_ty³ ( dev , ušt32_t * code ) 635 ušt8_t cmd [8]; 636 ušt8_t * ev’t ; 637 ušt32_t »g ; 638  ”r ; 639 ušt8_t * ±r = cmd ; 640 hci_commªd_hdr * ch = (*) cmd ; 642 ch -> Ýcode = `htobs ( `cmd_Ýcode_·ck ( HCI_VENDOR_CMD_OGF , 643 GET_DEV_TYPE_OCF )); 644 ch -> ¶’ = 5; 645 ±r +ð HCI_COMMAND_HDR_SIZE ; 647 ±r [0] = ( ušt8_t ) DEV_REGISTER ; 648 ±r [1] = ( ušt8_t ) DEV_REGISTER >> 8; 649 ±r [2] = ( ušt8_t ) DEV_REGISTER >> 16; 650 ±r [3] = ( ušt8_t ) DEV_REGISTER >> 24; 651 ±r [4] = 0x04; 653 ”r = `£nd_hci_cmd_sync ( dev , cmd , (cmd), & ev’t ); 654 ià( ”r < 0) 655  ”r ; 657 ”r = `»ad_ps_ev’t ( ev’t , GET_DEV_TYPE_OCF ); 658 ià( ”r < 0) 659  þ—nup ; 661 »g = ev’t [10]; 662 »g = (»g << 8è| ev’t [9]; 663 »g = (»g << 8è| ev’t [8]; 664 »g = (»g << 8è| ev’t [7]; 665 * code = »g ; 667 þ—nup : 668 `ä“ ( ev’t ); 670  ”r ; 671 } } 673  #GET_VERSION_OCF 0x1E ) 675  $»ad_©h3k_v”siÚ ( pCÚfig , ušt32_t * rom_v”siÚ , 676 ušt32_t * bužd_v”siÚ ) 678 ušt8_t cmd [3]; 679 ušt8_t * ev’t ; 680  ”r ; 681  ¡©us ; 682 hci_commªd_hdr * ch = (*) cmd ; 684 ch -> Ýcode = `htobs ( `cmd_Ýcode_·ck ( HCI_VENDOR_CMD_OGF , 685 GET_VERSION_OCF )); 686 ch -> ¶’ = 0; 688 ”r = `£nd_hci_cmd_sync ( pCÚfig , cmd , (cmd), & ev’t ); 689 ià( ”r < 0) 690  ”r ; 692 ”r = `»ad_ps_ev’t ( ev’t , GET_VERSION_OCF ); 693 ià( ”r < 0) 694  þ—nup ; 696 ¡©us = ev’t [10]; 697 ¡©us = (¡©u << 8è| ev’t [9]; 698 ¡©us = (¡©u << 8è| ev’t [8]; 699 ¡©us = (¡©u << 8è| ev’t [7]; 700 * rom_v”siÚ = ¡©us ; 702 ¡©us = ev’t [14]; 703 ¡©us = (¡©u << 8è| ev’t [13]; 704 ¡©us = (¡©u << 8è| ev’t [12]; 705 ¡©us = (¡©u << 8è| ev’t [11]; 706 * bužd_v”siÚ = ¡©us ; 708 þ—nup : 709 `ä“ ( ev’t ); 711  ”r ; 712 } } 714  $cÚv”t_bdaddr (* ¡r_bdaddr , * bdaddr ) 716  bdby‹ [3]; 717 * ¡r_by‹ = ¡r_bdaddr ; 718  i , j ; 719  cÞÚ_´e£Á = 0; 721 ià( `¡r¡r ( ¡r_bdaddr , ":")) 722 cÞÚ_´e£Á = 1; 724 bdby‹ [2] = '\0'; 727  i = 0, j = 5; i < 6; i++, j--) { 728 bdby‹ [0] = ¡r_by‹ [0]; 729 bdby‹ [1] = ¡r_by‹ [1]; 730 bdaddr [ j ] = `¡¹Þ ( bdby‹ , NULL , 16); 732 ià( cÞÚ_´e£Á == 1) 733 ¡r_by‹ += 3; 735 ¡r_by‹ += 2; 737 } } 739  $wr™e_bdaddr ( pCÚfig , * bdaddr ) 741 ušt8_t * ev’t ; 742  ”r ; 743 ušt8_t cmd [13]; 744 ušt8_t * ±r = cmd ; 745 hci_commªd_hdr * ch = (*) cmd ; 747 `mem£t ( cmd , 0, (cmd)); 749 ch -> Ýcode = `htobs ( `cmd_Ýcode_·ck ( HCI_VENDOR_CMD_OGF , 750 HCI_PS_CMD_OCF )); 751 ch -> ¶’ = 10; 752 ±r +ð HCI_COMMAND_HDR_SIZE ; 754 ±r [0] = 0x01; 755 ±r [1] = 0x01; 756 ±r [2] = 0x00; 757 ±r [3] = 0x06; 759 `cÚv”t_bdaddr ( bdaddr , (*)& ±r [4]); 761 ”r = `£nd_hci_cmd_sync ( pCÚfig , cmd , (cmd), & ev’t ); 762 ià( ”r < 0) 763  ”r ; 765 ”r = `»ad_ps_ev’t ( ev’t , HCI_PS_CMD_OCF ); 767 `ä“ ( ev’t ); 769  ”r ; 770 } } 772  #BDADDR_FILE "¬3kbdaddr.p¡" ) 774  $wr™e_bdaddr_äom_fže ( rom_v”siÚ ,  fd ) 776 FILE * ¡»am ; 777  bdaddr [ PATH_MAX ]; 778  bdaddr_fže [ PATH_MAX ]; 780 `¢´štf ( bdaddr_fže , MAXPATHLEN , "%s%x/%s", 781 FW_PATH , rom_v”siÚ , BDADDR_FILE ); 783 ¡»am = `fÝ’ ( bdaddr_fže , "r"); 784 ià(! ¡»am ) 787 ià( `fg‘s ( bdaddr , PATH_MAX - 1, ¡»am )) 788 `wr™e_bdaddr ( fd , bdaddr ); 790 `fþo£ ( ¡»am ); 791 } } 793  $©h_ps_dowÆßd ( fd ) 795  ”r = 0; 796  g_couÁ ; 797  ·tch_couÁ = 0; 798 ušt32_t rom_v”siÚ = 0; 799 ušt32_t bužd_v”siÚ = 0; 800 ušt32_t dev_ty³ = 0; 801  ·tch_fže [ PATH_MAX ]; 802  ps_fže [ PATH_MAX ]; 803 FILE * ¡»am ; 809 ià( `g‘_deviû_ty³ ( fd , & dev_ty³ ) < 0) { 810 ”r = - EILSEQ ; 811  dowÆßd_cm¶‘e ; 814 ià( `»ad_©h3k_v”siÚ ( fd , & rom_v”siÚ , & bužd_v”siÚ ) < 0) { 815 ”r = - EILSEQ ; 816  dowÆßd_cm¶‘e ; 820 ià( `g‘_©h3k_üc ( fd ) < 0) { 821 ”r = 0; 822  dowÆßd_cm¶‘e ; 825 `g‘_ps_fže_Çme ( dev_ty³ , rom_v”siÚ , ps_fže ); 826 `g‘_·tch_fže_Çme ( dev_ty³ , rom_v”siÚ , bužd_v”siÚ , ·tch_fže ); 828 ¡»am = `fÝ’ ( ps_fže , "r"); 829 ià(! ¡»am ) { 830 `³¼Ü ("firmware file openƒrror\n"); 831 ”r = - EILSEQ ; 832  dowÆßd_cm¶‘e ; 834 g_couÁ = `©h_·r£_ps ( ¡»am ); 836 `fþo£ ( ¡»am ); 838 ià( g_couÁ < 0) { 839 ”r = - EILSEQ ; 840  dowÆßd_cm¶‘e ; 847 ià( ·tch_fže [0] == '\0') 848 ”r = 0; 850 ¡»am = `fÝ’ ( ·tch_fže , "r"); 851 ià(! ¡»am ) 852 ”r = 0; 854 ·tch_couÁ = `ps_·tch_dowÆßd ( fd , ¡»am ); 855 `fþo£ ( ¡»am ); 857 ià( ·tch_couÁ < 0) { 858 ”r = - EILSEQ ; 859  dowÆßd_cm¶‘e ; 863 ”r = `ps_cÚfig_dowÆßd ( fd , g_couÁ ); 865 dowÆßd_cm¶‘e : 866 ià(! ”r ) 867 `wr™e_bdaddr_äom_fže ( rom_v”siÚ , fd ); 869  ”r ; 870 } } 872  #HCI_SLEEP_CMD_OCF 0x04 ) 877  $©h3k_po¡ ( fd ,  pm ) 879  dev_id , dd ; 880  time¥ec tm = { 0, 50000 }; 882 `¦“p (1); 884 dev_id = `ioùl ( fd , HCIUARTGETDEVICE , 0); 885 ià( dev_id < 0) { 886 `³¼Ü ("cannot get device id"); 887  dev_id ; 890 dd = `hci_Ý’_dev ( dev_id ); 891 ià( dd < 0) { 892 `³¼Ü ("HCI device open failed"); 893  dd ; 896 ià( `ioùl ( dd , HCIDEVUP , dev_id è< 0 && ”ºo !ð EALREADY ) { 897 `³¼Ü ("hci down:Power management Disabled"); 898 `hci_þo£_dev ( dd ); 903 ià( `hci_£nd_cmd ( dd , OGF_VENDOR_CMD , HCI_SLEEP_CMD_OCF , 1, & pm ) < 0) 904 `³¼Ü ("PM command failed,…ower management Disabled"); 906 `Çno¦“p (& tm , NULL ); 907 `hci_þo£_dev ( dd ); 910 } } 912  #HCI_VENDOR_CMD_OGF 0x3F ) 913  #HCI_PS_CMD_OCF 0x0B ) 914  #HCI_CHG_BAUD_CMD_OCF 0x0C ) 916  #WRITE_BDADDR_CMD_LEN 14 ) 917  #WRITE_BAUD_CMD_LEN 6 ) 918  #MAX_CMD_LEN WRITE_BDADDR_CMD_LEN ) 920  $£t_úŒÌ_baud ( fd ,  ¥“d ) 922  baud ; 923  time¥ec tm = { 0, 500000 }; 924  cmd [ MAX_CMD_LEN ], r¥ [ HCI_MAX_EVENT_SIZE ]; 925 * ±r = cmd + 1; 926 hci_commªd_hdr * ch = (*) ±r ; 928 cmd [0] = HCI_COMMAND_PKT ; 931 ±r = cmd + 1; 932 ch -> Ýcode = `htobs ( `cmd_Ýcode_·ck ( HCI_VENDOR_CMD_OGF , 933 HCI_CHG_BAUD_CMD_OCF )); 934 ch -> ¶’ = 2; 935 ±r +ð HCI_COMMAND_HDR_SIZE ; 937 baud = ¥“d /100; 938 ±r [0] = () baud ; 939 ±r [1] = ()( baud >> 8); 941 ià( `wr™e ( fd , cmd , WRITE_BAUD_CMD_LEN ) != WRITE_BAUD_CMD_LEN) { 942 `³¼Ü ("Failedo write change baud„ate command"); 943  - ETIMEDOUT ; 946 `Çno¦“p (& tm , NULL ); 948 ià( `»ad_hci_ev’t ( fd , r¥ , (rsp)) < 0) 949  - ETIMEDOUT ; 952 } } 958  $©h3k_š™ ( fd ,  ¥“d ,  š™_¥“d , * bdaddr , 959  ‹rmios * ti ) 961  r ; 962  ”r = 0; 963  time¥ec tm = { 0, 500000 }; 964  cmd [ MAX_CMD_LEN ], r¥ [ HCI_MAX_EVENT_SIZE ]; 965 * ±r = cmd + 1; 966 hci_commªd_hdr * ch = (*) ±r ; 968 cmd [0] = HCI_COMMAND_PKT ; 971 ”r = `£t_úŒÌ_baud ( fd , ¥“d ); 972 ià( ”r < 0) 973  ”r ; 975 ”r = `£t_¥“d ( fd , ti , ¥“d ); 976 ià( ”r < 0) { 977 `³¼Ü ("Can't set„equired baud„ate"); 978  ”r ; 982 r = `©h_ps_dowÆßd ( fd ); 983 ià( r < 0) { 984 `³¼Ü ("Failedo Download configuration"); 985 ”r = - ETIMEDOUT ; 986  çžed ; 990 ià( bdaddr ) { 991 ch -> Ýcode = `htobs ( `cmd_Ýcode_·ck ( HCI_VENDOR_CMD_OGF , 992 HCI_PS_CMD_OCF )); 993 ch -> ¶’ = 10; 994 ±r +ð HCI_COMMAND_HDR_SIZE ; 996 ±r [0] = 0x01; 997 ±r [1] = 0x01; 998 ±r [2] = 0x00; 999 ±r [3] = 0x06; 1000 `¡r2ba ( bdaddr , ( bdaddr_t *)( ±r + 4)); 1002 ià( `wr™e ( fd , cmd , WRITE_BDADDR_CMD_LEN ) != 1003 WRITE_BDADDR_CMD_LEN ) { 1004 `³¼Ü ("Failedo write BD_ADDR command\n"); 1005 ”r = - ETIMEDOUT ; 1006  çžed ; 1009 ià( `»ad_hci_ev’t ( fd , r¥ , (rsp)) < 0) { 1010 `³¼Ü ("Failedo set BD_ADDR\n"); 1011 ”r = - ETIMEDOUT ; 1012  çžed ; 1017 cmd [1] = 0x03; 1018 cmd [2] = 0x0C; 1019 cmd [3] = 0x00; 1021 r = `wr™e ( fd , cmd , 4); 1022 ià( r != 4) { 1023 ”r = - ETIMEDOUT ; 1024  çžed ; 1027 `Çno¦“p (& tm , NULL ); 1028 ià( `»ad_hci_ev’t ( fd , r¥ , (rsp)) < 0) { 1029 ”r = - ETIMEDOUT ; 1030  çžed ; 1033 ”r = `£t_úŒÌ_baud ( fd , ¥“d ); 1034 ià( ”r < 0) 1035  ”r ; 1037 çžed : 1038 ià( ”r < 0) { 1039 `£t_úŒÌ_baud ( fd , š™_¥“d ); 1040 `£t_¥“d ( fd , ti , š™_¥“d ); 1043  ”r ; 1044 } } @tools/hciattach_bcm43xx.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡dlib.h > 30  ~ 31  ~<‹rmios.h > 32  ~ 33  ~ 34  ~<”ºo.h > 35  ~ 36  ~ 37  ~ 39  ~ 40  ~ 41  ~ 43  ~"hcŸ‰ach.h " 45 #iâdeà FIRMWARE_DIR 46  #FIRMWARE_DIR "/‘c/fœmw¬e" ) 49  #FW_EXT ".hcd" ) 51  #BCM43XX_CLOCK_48 1 ) 52  #BCM43XX_CLOCK_24 2 ) 54  #CMD_SUCCESS 0x00 ) 56  #CC_MIN_SIZE 7 ) 58  #MIN ( X , Y è((Xè< (Yè? (Xè: (Y)) ) 60  $bcm43xx_»ad_loÿl_Çme ( fd , * Çme , size_t size ) 62  cmd [] = { HCI_COMMAND_PKT , 0x14, 0x0C, 0x00 }; 63 * »¥ ; 64  Çme_Ën ; 66 »¥ = `m®loc ( size + CC_MIN_SIZE ); 67 ià(! »¥ ) 70 `tcæush ( fd , TCIOFLUSH ); 72 ià( `wr™e ( fd , cmd , (cmd)) != (cmd)) { 73 `årštf ( ¡d”r , "Failedo write„ead†ocal‚ame command\n"); 74  çž ; 77 ià( `»ad_hci_ev’t ( fd , »¥ , size è< CC_MIN_SIZE ) { 78 `årštf ( ¡d”r , "Failedo„ead†ocal‚ame, invalid HCIƒvent\n"); 79  çž ; 82 ià( »¥ [4] !ð cmd [1] ||„e¥[5] !ðcmd[2] ||„e¥[6] !ð CMD_SUCCESS ) { 83 `årštf ( ¡d”r , "Failedo„ead†ocal‚ame, command failure\n"); 84  çž ; 87 Çme_Ën = »¥ [2] - 1; 89 `¡ºýy ( Çme , (*è& »¥ [7], `MIN ( Çme_Ën , size )); 90 Çme [ size - 1] = 0; 92 `ä“ ( »¥ ); 95 çž : 96 `ä“ ( »¥ ); 98 } } 100  $bcm43xx_»£t ( fd ) 102  cmd [] = { HCI_COMMAND_PKT , 0x03, 0x0C, 0x00 }; 103  »¥ [ CC_MIN_SIZE ]; 105 ià( `wr™e ( fd , cmd , (cmd)) != (cmd)) { 106 `årštf ( ¡d”r , "Failedo write„eset command\n"); 110 ià( `»ad_hci_ev’t ( fd , »¥ , Ôe¥)è< CC_MIN_SIZE ) { 111 `årštf ( ¡d”r , "Failedo„eset chip, invalid HCIƒvent\n"); 115 ià( »¥ [4] !ð cmd [1] ||„e¥[5] !ðcmd[2] ||„e¥[6] !ð CMD_SUCCESS ) { 116 `årštf ( ¡d”r , "Failedo„eset chip, command failure\n"); 121 } } 123  $bcm43xx_£t_bdaddr ( fd , cÚ¡ * bdaddr ) 125  cmd [] = 126 { HCI_COMMAND_PKT , 0x01, 0xfc, 0x06, 0x00, 0x00, 128  »¥ [ CC_MIN_SIZE ]; 130 `´štf ("S‘ BDADDR UART: %s\n", bdaddr ); 132 ià( `¡r2ba ( bdaddr , ( bdaddr_t *è(& cmd [4])) < 0) { 133 `årštf ( ¡d”r , "Incorrect bdaddr\n"); 137 `tcæush ( fd , TCIOFLUSH ); 139 ià( `wr™e ( fd , cmd , (cmd)) != (cmd)) { 140 `årštf ( ¡d”r , "Failedo write set bdaddr command\n"); 144 ià( `»ad_hci_ev’t ( fd , »¥ , Ôe¥)è< CC_MIN_SIZE ) { 145 `årštf ( ¡d”r , "Failedo set bdaddr, invalid HCIƒvent\n"); 149 ià( »¥ [4] !ð cmd [1] ||„e¥[5] !ðcmd[2] ||„e¥[6] !ð CMD_SUCCESS ) { 150 `årštf ( ¡d”r , "Failedo set bdaddr, command failure\n"); 155 } } 157  $bcm43xx_£t_þock ( fd ,  þock ) 159  cmd [] = { HCI_COMMAND_PKT , 0x45, 0xfc, 0x01, 0x00 }; 160  »¥ [ CC_MIN_SIZE ]; 162 `´štf ("S‘ CÚŒÞ˸þock (%d)\n", þock ); 164 cmd [4] = þock ; 166 `tcæush ( fd , TCIOFLUSH ); 168 ià( `wr™e ( fd , cmd , (cmd)) != (cmd)) { 169 `årštf ( ¡d”r , "Failedo write update clock command\n"); 173 ià( `»ad_hci_ev’t ( fd , »¥ , Ôe¥)è< CC_MIN_SIZE ) { 174 `årštf ( ¡d”r , "Failedo update clock, invalid HCIƒvent\n"); 178 ià( »¥ [4] !ð cmd [1] ||„e¥[5] !ðcmd[2] ||„e¥[6] !ð CMD_SUCCESS ) { 179 `årštf ( ¡d”r , "Failedo update clock, command failure\n"); 184 } } 186  $bcm43xx_£t_¥“d ( fd ,  ‹rmios * ti , ušt32_t ¥“d ) 188  cmd [] = 189 { HCI_COMMAND_PKT , 0x18, 0xfc, 0x06, 0x00, 0x00, 191  »¥ [ CC_MIN_SIZE ]; 193 ià( ¥“d > 3000000 && `bcm43xx_£t_þock ( fd , BCM43XX_CLOCK_48 )) 196 `´štf ("S‘ CÚŒÞ˸UART s³edØ%d b™/s\n", ¥“d ); 198 cmd [6] = ( ušt8_t è( ¥“d ); 199 cmd [7] = ( ušt8_t è( ¥“d >> 8); 200 cmd [8] = ( ušt8_t è( ¥“d >> 16); 201 cmd [9] = ( ušt8_t è( ¥“d >> 24); 203 `tcæush ( fd , TCIOFLUSH ); 205 ià( `wr™e ( fd , cmd , (cmd)) != (cmd)) { 206 `årštf ( ¡d”r , "Failedo write update baudrate command\n"); 210 ià( `»ad_hci_ev’t ( fd , »¥ , Ôe¥)è< CC_MIN_SIZE ) { 211 `årštf ( ¡d”r , "Failedo update baudrate, invalid HCIƒvent\n"); 215 ià( »¥ [4] !ð cmd [1] ||„e¥[5] !ðcmd[2] ||„e¥[6] !ð CMD_SUCCESS ) { 216 `årštf ( ¡d”r , "Failedo update baudrate, command failure\n"); 220 ià( `£t_¥“d ( fd , ti , ¥“d ) < 0) { 221 `³¼Ü ("Can't set host baud„ate"); 226 } } 228  $bcm43xx_lßd_fœmw¬e ( fd , cÚ¡ * fw ) 230  cmd [] = { HCI_COMMAND_PKT , 0x2e, 0xfc, 0x00 }; 231  time¥ec tm_mode = { 0, 50000 }; 232  time¥ec tm_»ady = { 0, 2000000 }; 233  »¥ [ CC_MIN_SIZE ]; 234  tx_buf [1024]; 235  Ën , fd_fw , n ; 237 `´štf ("FÏsh fœmw¬%s\n", fw ); 239 fd_fw = `Ý’ ( fw , O_RDONLY ); 240 ià( fd_fw < 0) { 241 `årštf ( ¡d”r , "UÇbËØÝ’ fœmw¬(%s)\n", fw ); 245 `tcæush ( fd , TCIOFLUSH ); 247 ià( `wr™e ( fd , cmd , (cmd)) != (cmd)) { 248 `årštf ( ¡d”r , "Failedo write download mode command\n"); 249  çž ; 252 ià( `»ad_hci_ev’t ( fd , »¥ , Ôe¥)è< CC_MIN_SIZE ) { 253 `årštf ( ¡d”r , "Failedo†oad firmware, invalid HCIƒvent\n"); 254  çž ; 257 ià( »¥ [4] !ð cmd [1] ||„e¥[5] !ðcmd[2] ||„e¥[6] !ð CMD_SUCCESS ) { 258 `årštf ( ¡d”r , "Failedo†oad firmware, command failure\n"); 259  çž ; 263 `Çno¦“p (& tm_mode , NULL ); 265 `tcæush ( fd , TCIOFLUSH ); 267 ( n = `»ad ( fd_fw , & tx_buf [1], 3))) { 268 ià( n < 0) { 269 `årštf ( ¡d”r , "Failedo„ead firmware\n"); 270  çž ; 273 tx_buf [0] = HCI_COMMAND_PKT ; 275 Ën = tx_buf [3]; 277 ià( `»ad ( fd_fw , & tx_buf [4], Ën ) < 0) { 278 `årštf ( ¡d”r , "Failedo„ead firmware\n"); 279  çž ; 282 ià( `wr™e ( fd , tx_buf , Ën + 4) != (len + 4)) { 283 `årštf ( ¡d”r , "Failedo write firmware\n"); 284  çž ; 287 `»ad_hci_ev’t ( fd , »¥ , (resp)); 288 `tcæush ( fd , TCIOFLUSH ); 292 `Çno¦“p (& tm_»ady , NULL ); 294 `þo£ ( fd_fw ); 297 çž : 298 `þo£ ( fd_fw ); 300 } } 302  $bcm43xx_loÿ‹_·tch (cÚ¡ * dœ_Çme , 303 cÚ¡ * ch_Çme , * loÿtiÚ ) 305 DIR * dœ ; 306  »t = -1; 308 dœ = `Ý’dœ ( dœ_Çme ); 309 ià(! dœ ) { 310 `årštf ( ¡d”r , "Cannot open directory '%s': %s\n", 311 dœ_Çme , `¡»¼Ü ( ”ºo )); 317  dœ’t * ’Œy = `»addœ ( dœ ); 318 ià(! ’Œy ) 321 ià( ’Œy -> d_ty³ & DT_DIR ) { 322  ·th [ PATH_MAX ]; 324 ià(! `¡rcmp ( ’Œy -> d_Çme , "..") || !strcmp(entry->d_name, ".")) 327 `¢´štf ( ·th , PATH_MAX , "%s/%s", dœ_Çme , ’Œy -> d_Çme ); 329 »t = `bcm43xx_loÿ‹_·tch ( ·th , ch_Çme , loÿtiÚ ); 330 ià(! »t ) 332 } ià(! `¡ºcmp ( ch_Çme , ’Œy -> d_Çme , `¡¾’ (chip_name))) { 333  Çme_Ën = `¡¾’ ( ’Œy -> d_Çme ); 334 size_t curs_ext = Çme_Ën - ( FW_EXT ) + 1; 336 ià( curs_ext > Çme_Ën ) 339 ià( `¡ºcmp ( FW_EXT , & ’Œy -> d_Çme [ curs_ext ], (FW_EXT))) 343 `¢´štf ( loÿtiÚ , PATH_MAX , "%s/%s", dœ_Çme , ’Œy -> d_Çme ); 344 »t = 0; 349 `þo£dœ ( dœ ); 351  »t ; 352 } } 354  $bcm43xx_š™ ( fd ,  def_¥“d ,  ¥“d ,  ‹rmios * ti , 355 cÚ¡ * bdaddr ) 357  ch_Çme [20]; 358  fw_·th [ PATH_MAX ]; 360 `´štf ("bcm43xx_init\n"); 362 ià( `bcm43xx_»£t ( fd )) 365 ià( `bcm43xx_»ad_loÿl_Çme ( fd , ch_Çme , (chip_name))) 368 ià( `bcm43xx_loÿ‹_·tch ( FIRMWARE_DIR , ch_Çme , fw_·th )) { 369 `årštf ( ¡d”r , "Patch‚ot found, continue‡nyway\n"); 371 ià( `bcm43xx_£t_¥“d ( fd , ti , ¥“d )) 374 ià( `bcm43xx_lßd_fœmw¬e ( fd , fw_·th )) 378 ià( `£t_¥“d ( fd , ti , def_¥“d ) < 0) { 379 `³¼Ü ("Can't set host baud„ate"); 383 ià( `bcm43xx_»£t ( fd )) 387 ià( bdaddr ) 388 `bcm43xx_£t_bdaddr ( fd , bdaddr ); 390 ià( `bcm43xx_£t_¥“d ( fd , ti , ¥“d )) 394 } } @tools/hciattach_intel.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡dlib.h > 30  ~ 31  ~<¡ršg.h > 32  ~<”ºo.h > 33  ~ 34  ~ 35  ~ 36  ~ 38  ~ 39  ~ 40  ~ 42  ~"hcŸ‰ach.h " 44 #ifdeà INTEL_DEBUG 45  #DBGPRINT ( fmt , ¬gs ...è `´štf ("DBG: " fmˆ"\n", ##‡rgs) ) 46  #PRINT_PACKET ( buf , Ën , msg ) { \ 47  i ; \ 48 `´štf ("%s\n", msg ); \ 49  i = 0; i < Ën ; i++) \ 50 `´štf ("%02X ", buf [ i ]); \ 51 `´štf ("\n"); \ 52 } ) 54  #DBGPRINT ( fmt , ¬gs ...) ) 55  #PRINT_PACKET ( buf , Ën , msg ) ) 58  #PATCH_SEQ_EXT ".b£q" ) 59  #PATCH_FILE_PATH "/lib/fœmw¬e/š‹l/" ) 60  #PATCH_MAX_LEN 260 ) 61  #PATCH_TYPE_CMD 1 ) 62  #PATCH_TYPE_EVT 2 ) 64  #INTEL_VER_PARAM_LEN 9 ) 65  #INTEL_MFG_PARAM_LEN 2 ) 70  s·tch_’Œy { 71  mty³ ; 72  mËn ; 73  md©a [ PATCH_MAX_LEN ]; 79  s·tch_ùx { 80  mdev ; 81  mfd ; 82  m·tch_”rÜ ; 83  m»£t_’abË_·tch ; 89  $š‹l_wr™e_cmd ( dev , * buf ,  Ën ) 91  »t ; 93 `PRINT_PACKET ( buf , Ën , "<----- SEND CMD: "); 95 »t = `wr™e ( dev , buf , Ën ); 96 ià( »t < 0) 97  - ”ºo ; 99 ià( »t !ð Ën ) 102  »t ; 103 } } 108  $š‹l_»ad_evt ( dev , * buf ,  Ën ) 110  »t ; 112 »t = `»ad_hci_ev’t ( dev , buf , Ën ); 113 ià( »t < 0) 116 `PRINT_PACKET ( buf , »t , "-----> READ EVT: "); 118  »t ; 119 } } 124  $v®id©e_ev’ts ( ·tch_’Œy * ev’t , 125  ·tch_’Œy * ’Œy ) 127 ià( ev’t =ð NULL || ’Œy == NULL) { 128 `DBGPRINT ("invalid…atchƒntry…arameters"); 132 ià( ev’t -> Ën !ð ’Œy ->len) { 133 `DBGPRINT ("lengths‡re mismatched:[%d|%d]", 134 ev’t -> Ën , ’Œy ->len); 138 ià( `memcmp ( ev’t -> d©a , ’Œy ->d©a,ƒv’t-> Ën )) { 139 `DBGPRINT ("data is mismatched"); 144 } } 149  $g‘_Ãxt_·tch_’Œy ( fd ,  ·tch_’Œy * ’Œy ) 151  size ; 152  rb ; 154 ià( `»ad ( fd , & rb , 1) <= 0) 157 ’Œy -> ty³ = rb ; 159  ’Œy -> ty³ ) { 160  PATCH_TYPE_CMD : 161 ’Œy -> d©a [0] = HCI_COMMAND_PKT ; 163 ià( `»ad ( fd , & ’Œy -> d©a [1], 3) < 0) 166 size = () ’Œy -> d©a [3]; 168 ià( `»ad ( fd , & ’Œy -> d©a [4], size ) < 0) 171 ’Œy -> Ën = HCI_TYPE_LEN + HCI_COMMAND_HDR_SIZE + size ; 175  PATCH_TYPE_EVT : 176 ’Œy -> d©a [0] = HCI_EVENT_PKT ; 178 ià( `»ad ( fd , & ’Œy -> d©a [1], 2) < 0) 181 size = () ’Œy -> d©a [2]; 183 ià( `»ad ( fd , & ’Œy -> d©a [3], size ) < 0) 186 ’Œy -> Ën = HCI_TYPE_LEN + HCI_EVENT_HDR_SIZE + size ; 191 `årštf ( ¡d”r , "šv®id…©chƒÁry(%d)\n", ’Œy -> ty³ ); 195  ’Œy -> Ën ; 196 } } 201  $š‹l_dowÆßd_·tch ( ·tch_ùx * ùx ) 203  »t ; 204  ·tch_’Œy ’Œy ; 205  ·tch_’Œy ev’t ; 207 `DBGPRINT ("start…atch downloading"); 210 »t = `g‘_Ãxt_·tch_’Œy ( ùx -> fd , & ’Œy ); 211 ià( »t <= 0) { 212 ùx -> ·tch_”rÜ = 1; 216  ’Œy . ty³ ) { 217  PATCH_TYPE_CMD : 218 »t = `š‹l_wr™e_cmd ( ùx -> dev , 219 ’Œy . d©a , 220 ’Œy . Ën ); 221 ià( »t <= 0) { 222 `årštf ( ¡d”r , "failedo send cmd(%d)\n", 223 »t ); 224  »t ; 228  PATCH_TYPE_EVT : 229 »t = `š‹l_»ad_evt ( ùx -> dev , ev’t . d©a , 230 ( ev’t . d©a )); 231 ià( »t <= 0) { 232 `årštf ( ¡d”r , "failedo„eadƒvt(%d)\n", 233 »t ); 234  »t ; 236 ev’t . Ën = »t ; 238 ià( `v®id©e_ev’ts (& ev’t , & ’Œy ) < 0) { 239 `DBGPRINT ("events‡re mismatched"); 240 ùx -> ·tch_”rÜ = 1; 246 `årštf ( ¡d”r , "unknown…atchype(%d)\n", 247 ’Œy . ty³ ); 252  »t ; 253 } } 255  $Ý’_·tch_fže ( ·tch_ùx * ùx , * fw_v” ) 257  ·tch_fže [ PATH_MAX ]; 259 `¢´štf ( ·tch_fže , PATH_MAX , "%s%s%s", PATCH_FILE_PATH , 260 fw_v” , PATCH_SEQ_EXT ); 261 `DBGPRINT ("PATCH_FILE: %s", ·tch_fže ); 263 ùx -> fd = `Ý’ ( ·tch_fže , O_RDONLY ); 264 ià( ùx -> fd < 0) { 265 `DBGPRINT ("cannot open…atch file. goo…ost…atch"); 270 } } 275  $´e_·tch ( ·tch_ùx * ùx ) 277  »t , i ; 278  ·tch_’Œy ’Œy ; 279  fw_v” [ INTEL_VER_PARAM_LEN * 2]; 281 `DBGPRINT ("start…re_patch"); 283 ’Œy . d©a [0] = HCI_COMMAND_PKT ; 284 ’Œy . d©a [1] = 0x11; 285 ’Œy . d©a [2] = 0xFC; 286 ’Œy . d©a [3] = 0x02; 287 ’Œy . d©a [4] = 0x01; 288 ’Œy . d©a [5] = 0x00; 289 ’Œy . Ën = HCI_TYPE_LEN + HCI_COMMAND_HDR_SIZE + INTEL_MFG_PARAM_LEN ; 291 »t = `š‹l_wr™e_cmd ( ùx -> dev , ’Œy . d©a ,ƒÁry. Ën ); 292 ià( »t < 0) { 293 `årštf ( ¡d”r , "çžedØ£nd cmd(%d)\n", »t ); 294  »t ; 297 »t = `š‹l_»ad_evt ( ùx -> dev , ’Œy . d©a , (entry.data)); 298 ià( »t < 0) { 299 `årštf ( ¡d”r , "çžedØ»adƒvt(%d)\n", »t ); 300  »t ; 302 ’Œy . Ën = »t ; 304 ià( ’Œy . d©a [6] != 0x00) { 305 `DBGPRINT ("commªd fažed. stus=%02x", ’Œy . d©a [6]); 306 ùx -> ·tch_”rÜ = 1; 310 ’Œy . d©a [0] = HCI_COMMAND_PKT ; 311 ’Œy . d©a [1] = 0x05; 312 ’Œy . d©a [2] = 0xFC; 313 ’Œy . d©a [3] = 0x00; 314 ’Œy . Ën = HCI_TYPE_LEN + HCI_COMMAND_HDR_SIZE ; 316 »t = `š‹l_wr™e_cmd ( ùx -> dev , ’Œy . d©a ,ƒÁry. Ën ); 317 ià( »t < 0) { 318 `årštf ( ¡d”r , "çžedØ£nd cmd(%d)\n", »t ); 319  »t ; 322 »t = `š‹l_»ad_evt ( ùx -> dev , ’Œy . d©a , (entry.data)); 323 ià( »t < 0) { 324 `årštf ( ¡d”r , "çžedØ»adƒvt(%d)\n", »t ); 325  »t ; 327 ’Œy . Ën = »t ; 329 ià( ’Œy . d©a [6] != 0x00) { 330 `DBGPRINT ("commªd fažed. stus=%02x", ’Œy . d©a [6]); 331 ùx -> ·tch_”rÜ = 1; 335  i = 0; i < INTEL_VER_PARAM_LEN ; i++) 336 `¥rštf (& fw_v” [ i *2], "%02x", ’Œy . d©a [7+i]); 338 ià( `Ý’_·tch_fže ( ùx , fw_v” ) < 0) { 339 ùx -> ·tch_”rÜ = 1; 343  »t ; 344 } } 349  $is_¡¬tup_evt (* buf ) 351 ià( buf [1] == 0xFF && buf[2] == 0x01 && buf[3] == 0x00) 355 } } 360  $po¡_·tch ( ·tch_ùx * ùx ) 362  »t ; 363  ·tch_’Œy ’Œy ; 365 `DBGPRINT ("start…ost_patch"); 367 ’Œy . d©a [0] = HCI_COMMAND_PKT ; 368 ’Œy . d©a [1] = 0x11; 369 ’Œy . d©a [2] = 0xFC; 370 ’Œy . d©a [3] = 0x02; 371 ’Œy . d©a [4] = 0x00; 372 ià( ùx -> »£t_’abË_·tch ) 373 ’Œy . d©a [5] = 0x02; 375 ’Œy . d©a [5] = 0x01; 377 ’Œy . Ën = HCI_TYPE_LEN + HCI_COMMAND_HDR_SIZE + INTEL_MFG_PARAM_LEN ; 379 »t = `š‹l_wr™e_cmd ( ùx -> dev , ’Œy . d©a ,ƒÁry. Ën ); 380 ià( »t < 0) { 381 `årštf ( ¡d”r , "çžedØ£nd cmd(%d)\n", »t ); 382  »t ; 385 »t = `š‹l_»ad_evt ( ùx -> dev , ’Œy . d©a , (entry.data)); 386 ià( »t < 0) { 387 `årštf ( ¡d”r , "çžedØ»adƒvt(%d)\n", »t ); 388  »t ; 390 ’Œy . Ën = »t ; 392 ià( ’Œy . d©a [6] != 0x00) { 393 `årštf ( ¡d”r , "cmd fažed. st=%02x\n", ’Œy . d©a [6]); 398 »t = `š‹l_»ad_evt ( ùx -> dev , ’Œy . d©a , 399 ( ’Œy . d©a )); 400 ià( »t < 0) { 401 `årštf ( ¡d”r , "çžedØ»ad cmd(%d)\n", »t ); 402  »t ; 404 ’Œy . Ën = »t ; 405 } ! `is_¡¬tup_evt ( ’Œy . d©a )); 407  »t ; 408 } } 413  $š‹l_·tch_deviû ( ·tch_ùx * ùx ) 415  »t ; 417 »t = `´e_·tch ( ùx ); 418 ià( »t < 0) { 419 ià(! ùx -> ·tch_”rÜ ) { 420 `årštf ( ¡d”r , "I/Oƒrror:…re_patch failed\n"); 421  »t ; 424 `DBGPRINT ("patch failed.…roceedo…ost…atch"); 425  po¡_·tch ; 428 »t = `š‹l_dowÆßd_·tch ( ùx ); 429 ià( »t < 0) { 430 ià(! ùx -> ·tch_”rÜ ) { 431 `årštf ( ¡d”r , "I/Oƒrror: download_patch failed\n"); 432 `þo£ ( ùx -> fd ); 433  »t ; 436 `DBGPRINT ("patch done"); 437 ùx -> »£t_’abË_·tch = 1; 440 `þo£ ( ùx -> fd ); 442 po¡_·tch : 443 »t = `po¡_·tch ( ùx ); 444 ià( »t < 0) { 445 `årštf ( ¡d”r , "po¡_·tch fažed(%d)\n", »t ); 446  »t ; 450 } } 452  $£t_¹s ( dev ,  ¹sv® ) 454  ¬g ; 456 ià( `ioùl ( dev , TIOCMGET , & ¬g ) < 0) { 457 `³¼Ü ("cannot get TIOCMGET"); 458  - ”ºo ; 460 ià( ¹sv® ) 461 ¬g |ð TIOCM_RTS ; 463 ¬g &ð~ TIOCM_RTS ; 465 ià( `ioùl ( dev , TIOCMSET , & ¬g ) == -1) { 466 `³¼Ü ("cannot set TIOCMGET"); 467  - ”ºo ; 471 } } 473  $g‘_š‹l_¥“d ( ¥“d ) 475  ¥“d ) { 503 } } 509  $chªge_baud¿‹ ( dev ,  š™_¥“d , * ¥“d , 510  ‹rmios * ti ) 512  »t ; 513  br ; 514  cmd [5]; 515  evt [7]; 517 `DBGPRINT ("start baudrate change"); 519 »t = `£t_¹s ( dev , 0); 520 ià( »t < 0) { 521 `årštf ( ¡d”r , "failedo clear RTS\n"); 522  »t ; 525 cmd [0] = HCI_COMMAND_PKT ; 526 cmd [1] = 0x06; 527 cmd [2] = 0xFC; 528 cmd [3] = 0x01; 530 br = `g‘_š‹l_¥“d (* ¥“d ); 531 ià( br == 0xFF) { 532 `årštf ( ¡d”r , "¥“d %d i nÙ suµÜ‹d\n", * ¥“d ); 535 cmd [4] = br ; 537 »t = `š‹l_wr™e_cmd ( dev , cmd , (cmd)); 538 ià( »t < 0) { 539 `årštf ( ¡d”r , "çžedØ£nd cmd(%d)\n", »t ); 540  »t ; 546 `u¦“p (300000); 548 ià( `£t_¥“d ( dev , ti , * ¥“d ) < 0) { 549 `årštf ( ¡d”r , "can't seto‚ew baud„ate\n"); 553 »t = `£t_¹s ( dev , 1); 554 ià( »t < 0) { 555 `årštf ( ¡d”r , "failedo set RTS\n"); 556  »t ; 559 »t = `š‹l_»ad_evt ( dev , evt , (evt)); 560 ià( »t < 0) { 561 `årštf ( ¡d”r , "çžedØ»adƒvt(%d)\n", »t ); 562  »t ; 565 ià( evt [4] != 0x00) { 566 `årštf ( ¡d”r , 568 š™_¥“d ); 569 * ¥“d = š™_¥“d ; 573 } } 578  $š‹l_š™ ( dev ,  š™_¥“d , * ¥“d ,  ‹rmios * ti ) 580  »t = 0; 581  ·tch_ùx ùx ; 583 ià( `chªge_baud¿‹ ( dev , š™_¥“d , ¥“d , ti ) < 0) 586 ùx . dev = dev; 587 ùx . ·tch_”rÜ = 0; 588 ùx . »£t_’abË_·tch = 0; 590 »t = `š‹l_·tch_deviû (& ùx ); 591 ià( »t < 0) 592 `årštf ( ¡d”r , "failedo initializehe device"); 594  »t ; 595 } } @tools/hciattach_qualcomm.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 35  ~ 36  ~ 37  ~<‹rmios.h > 38  ~ 39  ~ 40  ~ 41  ~ 42  ~ 43  ~ 45  ~ 46  ~ 47  ~ 49  ~"hcŸ‰ach.h " 51  #FAILIF ( x , ¬gs ...) do { \ 52 ià( x ) { \ 53 `årštf ( ¡d”r , ## ¬gs ); \ 56 } 0) ) 59 ušt8_t mu¬t_´efix ; 60 hci_ev’t_hdr mhci_hdr ; 61 evt_cmd_com¶‘e mcmd_com¶‘e ; 62 ušt8_t m¡©us ; 63 ušt8_t md©a [16]; 64 } t__©Œibu‹__ (( t·cked )è tcommªd_com¶‘e_t ; 66  $»ad_commªd_com¶‘e ( fd , 67  Ýcode , 68  Ën ) 70 commªd_com¶‘e_t »¥ ; 71  v£v’t [512]; 72  n ; 75 n = `»ad_hci_ev’t ( fd , v£v’t , (vsevent)); 76 `FAILIF ( n < 0, "Failedo„ead„esponse"); 78 `FAILIF ( v£v’t [1] != 0xFF, "Failedo„ead„esponse"); 80 n = `»ad_hci_ev’t ( fd , (*)& »¥ , (resp)); 81 `FAILIF ( n < 0, "Failedo„ead„esponse"); 84 `FAILIF ( »¥ . hci_hdr . evt !ð EVT_CMD_COMPLETE , 86 "buˆ0x%02x!\n", »¥ . hci_hdr . evt ); 88 `FAILIF ( »¥ . hci_hdr . ¶’ < 4, 90 »¥ . hci_hdr . ¶’ ); 93 `FAILIF ( »¥ . cmd_com¶‘e . Ýcode != 0, 95 »¥ . cmd_com¶‘e . Ýcode ); 97  »¥ . ¡©us == 0 ? 0 : -1; 98 } } 100  $qu®comm_lßd_fœmw¬e ( fd , cÚ¡ * fœmw¬e , cÚ¡ * bdaddr_s ) 103  fw = `Ý’ ( fœmw¬e , O_RDONLY ); 105 `årštf ( ¡dout , "O³nšg fœmw¬fže: %s\n", fœmw¬e ); 107 `FAILIF ( fw < 0, 109 fœmw¬e , `¡»¼Ü ( ”ºo ),ƒrrno); 111 `årštf ( ¡dout , "Uploading firmware...\n"); 114  d©a [1024]; 115  cmdp [1 + ( hci_commªd_hdr )]; 116 hci_commªd_hdr * cmd = (hci_commªd_hd¸*è( cmdp + 1); 117  Ä ; 119 Ä = `»ad ( fw , cmdp , (cmdp)); 120 ià(! Ä ) 123 `FAILIF ( Ä !ð( cmdp ), 125 `FAILIF (* cmdp !ð HCI_COMMAND_PKT , 128 `FAILIF ( `»ad ( fw , d©a , cmd -> ¶’ ) != cmd->plen, 131 cmd -> ¶’ , cmd-> Ýcode ); 133 ià(( d©a [0] == 1) && (data[1] == 2) && (data[2] == 6)) { 134 bdaddr_t bdaddr ; 135 ià( bdaddr_s !ð NULL ) { 136 `¡r2ba ( bdaddr_s , & bdaddr ); 137 `memýy (& d©a [3], & bdaddr , ( bdaddr_t )); 142  nw ; 143  iovec iov_cmd [2]; 144 iov_cmd [0]. iov_ba£ = cmdp ; 145 iov_cmd [0]. iov_Ën = ( cmdp ); 146 iov_cmd [1]. iov_ba£ = d©a ; 147 iov_cmd [1]. iov_Ën = cmd -> ¶’ ; 148 nw = `wr™ev ( fd , iov_cmd , 2); 149 `FAILIF ( nw !ð(è( cmdp è+ cmd -> ¶’ , 152 nw ); 156 ià( `»ad_commªd_com¶‘e ( fd , cmd -> Ýcode , cmd-> ¶’ ) < 0) 159 `årštf ( ¡dout , "Firmware upload successful.\n"); 161 `þo£ ( fw ); 164 } } 166  $qu®comm_š™ ( fd ,  ¥“d ,  ‹rmios * ti , cÚ¡ * bdaddr ) 168  time¥ec tm = {0, 50000}; 169  cmd [5]; 170  »¥ [100]; 171  fw [100]; 172  n ; 174 `mem£t ( »¥ , 0, 100); 177 cmd [0] = HCI_COMMAND_PKT ; 178 cmd [1] = 0x01; 179 cmd [2] = 0x10; 180 cmd [3] = 0x00; 183 n = `wr™e ( fd , cmd , 4); 184 ià( n < 4) { 185 `³¼Ü ("Failedo write init command"); 190 ià( `»ad_hci_ev’t ( fd , »¥ , 100) < 0) { 191 `³¼Ü ("Failedo„ead init„esponse"); 196 }  »¥ [4] !ð cmd [1] &&„esp[5] != cmd[2]); 199 ià(( »¥ [11] & 0xFF) != 0x1d) 200 `årštf ( ¡d”r , 204 `årštf ( ¡d”r , 205 "Qu®comm moduË LMP v”siÚ : 0x%02x\n", »¥ [10] & 0xFF); 209  lmp_subv = »¥ [13] | (resp[14] << 8); 211 `årštf ( ¡d”r , "Qualcomm module LMP sub-version : 0x%04x\n", 212 lmp_subv ); 216 cmd [0] = HCI_COMMAND_PKT ; 217 cmd [1] = 0x00; 218 cmd [2] = 0xFC; 219 cmd [3] = 0x01; 220 cmd [4] = 0x06; 223 n = `wr™e ( fd , cmd , 5); 224 ià( n < 5) { 225 `³¼Ü ("Failedo write vendor init command"); 230 ià(( n = `»ad_hci_ev’t ( fd , »¥ , 100)) < 0) { 231 `³¼Ü ("Failedo„ead vendor init„esponse"); 235 }  »¥ [3] != 0 &&„esp[4] != 2); 237 `¢´štf ( fw , (fw), "/etc/firmware/%c%c%c%c%c%c_%c%c%c%c.bin", 238 »¥ [18],„esp[19],„esp[20],„esp[21], 239 »¥ [22],„esp[23], 240 »¥ [32],„esp[33],„esp[34],„esp[35]); 243 ià( `»ad_hci_ev’t ( fd , »¥ , 100) < 0) { 244 `³¼Ü ("Failedo„ead init„esponse"); 248 `qu®comm_lßd_fœmw¬e ( fd , fw , bdaddr ); 251 cmd [0] = HCI_COMMAND_PKT ; 252 cmd [1] = 0x03; 253 cmd [2] = 0x0C; 254 cmd [3] = 0x00; 257 n = `wr™e ( fd , cmd , 4); 258 ià( n < 4) { 259 `³¼Ü ("Failedo write„eset command"); 264 ià(( n = `»ad_hci_ev’t ( fd , »¥ , 100)) < 0) { 265 `³¼Ü ("Failedo„ead„eset„esponse"); 269 }  »¥ [4] !ð cmd [1] &&„esp[5] != cmd[2]); 271 `Çno¦“p (& tm , NULL ); 274 } } @tools/hciattach_st.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~ 32  ~<¡dlib.h > 33  ~<¡dšt.h > 34  ~<¡ršg.h > 35  ~ 36  ~ 38  ~ 40  ~"hcŸ‰ach.h " 42  gdebug = 0; 44  $do_commªd ( fd , ušt8_t ogf , ušt16_t ocf , 45 ušt8_t * ý¬am ,  þ’ , ušt8_ˆ* ½¬am ,  ¾’ ) 48  ý [260], ½ [260]; 49  Ën , size , off£t = 3; 51 ý [0] = 0x01; 52 ý [1] = ocf & 0xff; 53 ý [2] = ogf << 2 | ocf >> 8; 54 ý [3] = þ’ ; 56 ià( þ’ > 0) 57 `memýy ( ý + 4, ý¬am , þ’ ); 59 ià( debug ) { 60  i ; 61 `´štf ("[<"); 62  i = 0; i < þ’ + 4; i++) 63 `´štf (" %02x", ý [ i ]); 64 `´štf ("]\n"); 67 ià( `wr™e ( fd , ý , þ’ + 4) < 0) 71 ià( `»ad ( fd , ½ , 1) < 1) 73 }  ½ [0] != 0x04); 75 ià( `»ad ( fd , ½ + 1, 2) < 2) 79 Ën = `»ad ( fd , ½ + off£t , (rp) - offset); 80 off£t +ð Ën ; 81 }  off£t < ½ [2] + 3); 83 ià( debug ) { 84  i ; 85 `´štf ("[>"); 86  i = 0; i < off£t ; i++) 87 `´štf (" %02x", ½ [ i ]); 88 `´štf ("]\n"); 91 ià( ½ [0] != 0x04) { 92 ”ºo = EIO ; 96  ½ [1]) { 98 ià( ½ [6] != 0x00) 99  - ENXIO ; 100 off£t = 3 + 4; 101 size = ½ [2] - 4; 106 off£t = 3; 107 size = ½ [2]; 111 ià(! ½¬am || ¾’ < size ) 112  - ENXIO ; 114 `memýy ( ½¬am , ½ + off£t , size ); 116  size ; 117 } } 119  $lßd_fže ( dd , ušt16_t v”siÚ , cÚ¡ * suffix ) 121 DIR * dœ ; 122  dœ’t * d ; 123  ·thÇme [ PATH_MAX ], fž’ame [ NAME_MAX ], ´efix [20]; 124  cmd [256]; 125  buf [256]; 126 ušt8_t £qnum = 0; 127  fd , size , Ën , found_fw_fže ; 129 `mem£t ( fž’ame , 0, (filename)); 131 `¢´štf ( ´efix , (prefix), "STLC2500_R%d_%02d_", 132 v”siÚ >> 8, version & 0xff); 134 `¡rýy ( ·thÇme , "/lib/firmware"); 135 dœ = `Ý’dœ ( ·thÇme ); 136 ià(! dœ ) { 137 `¡rýy ( ·thÇme , "."); 138 dœ = `Ý’dœ ( ·thÇme ); 139 ià(! dœ ) 140  - ”ºo ; 143 found_fw_fže = 0; 145 d = `»addœ ( dœ ); 146 ià(! d ) 149 ià( `¡ºcmp ( d -> d_Çme + `¡¾’ (d->d_Çmeè- sŒËn( suffix ), 150 suffix , `¡¾’ (suffix))) 153 ià( `¡ºcmp ( d -> d_Çme , ´efix , `¡¾’ (prefix))) 156 `¢´štf ( fž’ame , (filename), "%s/%s", 157 ·thÇme , d -> d_Çme ); 158 found_fw_fže = 1; 161 `þo£dœ ( dœ ); 163 ià(! found_fw_fže ) 164  - ENOENT ; 166 `´štf ("Lßdšg fž%s\n", fž’ame ); 168 fd = `Ý’ ( fž’ame , O_RDONLY ); 169 ià( fd < 0) { 170 `³¼Ü ("Can't open firmware file"); 171  - ”ºo ; 175 size = `»ad ( fd , cmd + 1, 254); 176 ià( size <= 0) 179 cmd [0] = £qnum ; 181 Ën = `do_commªd ( dd , 0xff, 0x002e, cmd , size + 1, buf , (buf)); 182 ià( Ën < 1) 185 ià( buf [0] !ð £qnum ) { 186 `årštf ( ¡d”r , "Sequence‚umber mismatch\n"); 190 £qnum ++; 193 `þo£ ( fd ); 196 } } 198  $¡lc2500_š™ ( dd , bdaddr_t * bdaddr ) 200  cmd [16]; 201  buf [254]; 202 ušt16_t v”siÚ ; 203  Ën ; 204  ”r ; 207 Ën = `do_commªd ( dd , 0xff, 0x000f, NULL , 0, buf , (buf)); 208 ià( Ën < 0) 211 `´štf ("%s\n", buf ); 214 Ën = `do_commªd ( dd , 0x04, 0x0001, NULL , 0, buf , (buf)); 215 ià( Ën < 0) 218 v”siÚ = buf [2] << 8 | buf[1]; 220 ”r = `lßd_fže ( dd , v”siÚ , ".ptc"); 221 ià( ”r < 0) { 222 ià( ”r =ð- ENOENT ) 223 `årštf ( ¡d”r , "No ROM…atch file†oaded.\n"); 228 ”r = `lßd_fže ( dd , buf [2] << 8 | buf[1], ".ssf"); 229 ià( ”r < 0) { 230 ià( ”r =ð- ENOENT ) 231 `årštf ( ¡d”r , "No static settings file†oaded.\n"); 236 cmd [0] = 0xfe; 237 cmd [1] = 0x06; 238 `baýy (( bdaddr_t *è( cmd + 2), bdaddr ); 241 Ën = `do_commªd ( dd , 0xff, 0x0022, cmd , 8, buf , (buf)); 242 ià( Ën < 0) 246 Ën = `do_commªd ( dd , 0x03, 0x0003, NULL , 0, buf , (buf)); 247 ià( Ën < 0) 251 } } 253  $bgb2xx_š™ ( dd , bdaddr_t * bdaddr ) 255  cmd [16]; 256  buf [254]; 257  Ën ; 259 Ën = `do_commªd ( dd , 0xff, 0x000f, NULL , 0, buf , (buf)); 260 ià( Ën < 0) 263 `´štf ("%s\n", buf ); 265 cmd [0] = 0xfe; 266 cmd [1] = 0x06; 267 `baýy (( bdaddr_t *è( cmd + 2), bdaddr ); 269 Ën = `do_commªd ( dd , 0xff, 0x0022, cmd , 8, buf , (buf)); 270 ià( Ën < 0) 273 Ën = `do_commªd ( dd , 0x03, 0x0003, NULL , 0, buf , (buf)); 274 ià( Ën < 0) 278 } } @tools/hciattach_ti.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~<¡dlib.h > 33  ~<‹rmios.h > 34  ~ 35  ~ 36  ~ 37  ~ 38  ~ 40  ~ 41  ~ 42  ~ 44  ~"hcŸ‰ach.h " 46 #ifdeà HCIATTACH_DEBUG 47  #DPRINTF ( x ...è `´štf (x) ) 49  #DPRINTF ( x ...) ) 52  #HCIUARTGETDEVICE `_IOR ('U', 202, ) ) 54  #MAKEWORD ( a , b è(( ušt16_t )((( ušt8_t )×)è| ((ušt16_t)((ušt8_t)(b))è<< 8)) ) 56  #TI_MANUFACTURER_ID 13 ) 59 #ifdeà __TI_PATCH__ 60  #FIRMWARE_DIRECTORY1 "/mÁ/mmc/" ) 61  #FIRMWARE_DIRECTORY2 "/u¤/‘c/blu‘oÙh/" ) 63  #FIRMWARE_DIRECTORY "/lib/fœmw¬e/ti-cÚÃùiv™y/" ) 66  #ACTION_SEND_COMMAND 1 ) 67  #ACTION_WAIT_EVENT 2 ) 68  #ACTION_SERIAL 3 ) 69  #ACTION_DELAY 4 ) 70  #ACTION_RUN_SCRIPT 5 ) 71  #ACTION_REMARKS 6 ) 73  #BRF_DEEP_SLEEP_OPCODE_BYTE_1 0x0c ) 74  #BRF_DEEP_SLEEP_OPCODE_BYTE_2 0xfd ) 75  #BRF_DEEP_SLEEP_OPCODE \ 76 ( BRF_DEEP_SLEEP_OPCODE_BYTE_1 | ( BRF_DEEP_SLEEP_OPCODE_BYTE_2 << 8)) ) 78  #FILE_HEADER_MAGIC 0x42535442 ) 83  sbts_h—d” { 84 ušt32_t mmagic ; 85 ušt32_t mv”siÚ ; 86 ušt8_t mfutu» [24]; 87 ušt8_t maùiÚs [0]; 88 } __©Œibu‹__ (( ·cked )); 93  sbts_aùiÚ { 94 ušt16_t mty³ ; 95 ušt16_t msize ; 96 ušt8_t md©a [0]; 97 } __©Œibu‹__ (( ·cked )); 99  sbts_aùiÚ_£nd { 100 ušt8_t md©a [0]; 101 } __©Œibu‹__ (( ·cked )); 103  sbts_aùiÚ_wa™ { 104 ušt32_t mm£c ; 105 ušt32_t msize ; 106 ušt8_t md©a [0]; 107 } __©Œibu‹__ (( ·cked )); 109  sbts_aùiÚ_d–ay { 110 ušt32_t mm£c ; 111 } __©Œibu‹__ (( ·cked )); 113  sbts_aùiÚ_£rŸl { 114 ušt32_t mbaud ; 115 ušt32_t mæow_cÚŒÞ ; 116 } __©Œibu‹__ (( ·cked )); 118  FILE * $bts_lßd_süt (cÚ¡ * fže_Çme , ušt32_t * v”siÚ ) 120  bts_h—d” h—d” ; 121 FILE * å ; 123 å = `fÝ’ ( fže_Çme , "rb"); 124 ià(! å ) { 125 `³¼Ü ("can't open firmware file"); 126  NULL ; 129 ià(1 !ð `ä—d (& h—d” , ( bts_h—d” ), 1, å )) { 130 `³¼Ü ("can't„ead firmware file"); 131  ”rþo£ ; 134 ià( h—d” . magic !ð FILE_HEADER_MAGIC ) { 135 `årštf ( ¡d”r , "% nÙ‡†eg® TI fœmw¬fže\n", fže_Çme ); 136  ”rþo£ ; 139 ià( NULL !ð v”siÚ ) 140 * v”siÚ = h—d” .version; 142  å ; 144 ”rþo£ : 145 `fþo£ ( å ); 147  NULL ; 148 } } 150  $bts_ãtch_aùiÚ ( FILE * å , * aùiÚ_buf , 151  buf_size , ušt16_t * aùiÚ_ty³ ) 153  bts_aùiÚ aùiÚ_hdr ; 154  Ä—d ; 156 ià(! å ) 159 ià(1 !ð `ä—d (& aùiÚ_hdr , ( bts_aùiÚ ), 1, å )) 162 ià( aùiÚ_hdr . size > buf_size ) { 163 `årštf ( ¡d”r , "bts_next_action:‚otƒnough spaceo„ead‚ext‡ction\n"); 167 Ä—d = `ä—d ( aùiÚ_buf , ( ušt8_t ), aùiÚ_hdr . size , å ); 168 ià( Ä—d !ð( aùiÚ_hdr . size )) { 169 `årštf ( ¡d”r , "bts_next_action: fread failedo„ead‚ext‡ction\n"); 173 * aùiÚ_ty³ = aùiÚ_hdr . ty³ ; 175  Ä—d * ( ušt8_t ); 176 } } 178  $bts_uÆßd_süt ( FILE * å ) 180 ià( å ) 181 `fþo£ ( å ); 182 } } 184  $is_™_‹xas (cÚ¡ ušt8_t * »¥Úd ) 186 ušt16_t mªuçùu»r_id ; 188 mªuçùu»r_id = `MAKEWORD ( »¥Úd [11],„espond[12]); 190  TI_MANUFACTURER_ID =ð mªuçùu»r_id ? 1 : 0; 191 } } 193 cÚ¡ * $g‘_fœmw¬e_Çme (cÚ¡ ušt8_t * »¥Úd ) 195  fœmw¬e_fže_Çme [ PATH_MAX ] = {0}; 196 ušt16_t v”siÚ = 0, ch = 0, mš_v” = 0, maj_v” = 0; 198 v”siÚ = `MAKEWORD ( »¥Úd [13],„espond[14]); 199 ch = ( v”siÚ & 0x7C00) >> 10; 200 mš_v” = ( v”siÚ & 0x007F); 201 maj_v” = ( v”siÚ & 0x0380) >> 7; 203 ià( v”siÚ & 0x8000) 204 maj_v” |= 0x0008; 207 #ifdeà __TI_PATCH__ 208 FILE * å ; 209 `¥rštf ( fœmw¬e_fže_Çme , FIRMWARE_DIRECTORY1 "TIIn™_%d.%d.%d.bts", ch , maj_v” , mš_v” ); 211 ià(( å = `fÝ’ ( fœmw¬e_fže_Çme , "r")è=ð NULL ) { 212  fœmw¬e_·th ; 213 ià( fœmw¬e_·th ) 214 `¥rštf ( fœmw¬e_fže_Çme , FIRMWARE_DIRECTORY2 "TIIn™_edutm_%d.%d.%d.bts", ch , maj_v” , mš_v” ); 216 `¥rštf ( fœmw¬e_fže_Çme , FIRMWARE_DIRECTORY2 "TIIn™_%d.%d.%d.bts", ch , maj_v” , mš_v” ); 219 `fþo£ ( å ); 222 `¥rštf ( fœmw¬e_fže_Çme , FIRMWARE_DIRECTORY "TIIn™_%d.%d.%d.bts", ch , maj_v” , mš_v” ); 225  fœmw¬e_fže_Çme ; 226 } } 228  $brf_d–ay ( bts_aùiÚ_d–ay * d–ay ) 230 `u¦“p (1000 * d–ay -> m£c ); 231 } } 233  $brf_£t_£rŸl_·¿ms ( bts_aùiÚ_£rŸl * £rŸl_aùiÚ , 234  fd , * ¥“d ,  ‹rmios * ti ) 236 `årštf ( ¡d”r , "texas: changing baud„ateo %u, flow controlo %u\n", 237 £rŸl_aùiÚ -> baud , s”Ÿl_aùiÚ-> æow_cÚŒÞ ); 238 `tcæush ( fd , TCIOFLUSH ); 240 ià( £rŸl_aùiÚ -> æow_cÚŒÞ ) 241 ti -> c_cæag |ð CRTSCTS ; 243 ti -> c_cæag &ð~ CRTSCTS ; 245 ià( `tc£‰r ( fd , TCSANOW , ti ) < 0) { 246 `³¼Ü ("Can't set…ort settings"); 250 `tcæush ( fd , TCIOFLUSH ); 252 ià( `£t_¥“d ( fd , ti , £rŸl_aùiÚ -> baud ) < 0) { 253 `³¼Ü ("Can't set baud„ate"); 257 ià( ¥“d ) 258 * ¥“d = £rŸl_aùiÚ -> baud ; 261 } } 263  $brf_£nd_commªd_sock‘ ( fd ,  bts_aùiÚ_£nd * £nd_aùiÚ ) 265  »¥Ú£ [1024] = {0}; 266 hci_commªd_hdr * cmd = (hci_commªd_hd¸*è £nd_aùiÚ -> d©a ; 267 ušt16_t Ýcode = cmd ->opcode; 269  hci_»que¡ rq ; 270 `mem£t (& rq , 0, (rq)); 271 rq . ogf = `cmd_Ýcode_ogf ( Ýcode ); 272 rq . ocf = `cmd_Ýcode_ocf ( Ýcode ); 273 rq . ev’t = EVT_CMD_COMPLETE ; 274 rq . ý¬am = & £nd_aùiÚ -> d©a [3]; 275 rq . þ’ = £nd_aùiÚ -> d©a [2]; 276 rq . ½¬am = »¥Ú£ ; 277 rq . ¾’ = ( »¥Ú£ ); 279 ià( `hci_£nd_»q ( fd , & rq , 15) < 0) { 280 `³¼Ü ("Cannot send hci commando socket"); 285 ià( »¥Ú£ [0]) { 286 ”ºo = EIO ; 291 } } 293  $brf_£nd_commªd_fže ( fd ,  bts_aùiÚ_£nd * £nd_aùiÚ , 294  size ) 296  »¥Ú£ [1024] = {0}; 297  »t = 0; 300 ià( size !ð `wr™e ( fd , £nd_aùiÚ , size)) { 301 `³¼Ü ("Texas: Failedo write‡ction command"); 306 »t = `»ad_hci_ev’t ( fd , »¥Ú£ , (response)); 307 ià( »t < 0) { 308 `³¼Ü ("texas: failedo„ead command„esponse"); 313 ià( »t < 7 || 0 !𠻥ڣ [6]) { 314 `årštf Ð ¡d”r , "TI init command failed.\n" ); 315 ”ºo = EIO ; 320 } } 323  $brf_£nd_commªd ( fd ,  bts_aùiÚ_£nd * £nd_aùiÚ , 324  size ,  hcžl_š¡®Ëd ) 326  »t = 0; 327 * fixed_aùiÚ ; 330 ià( hcžl_š¡®Ëd ) { 331 fixed_aùiÚ = ((*è £nd_aùiÚ ) + 1; 332 »t = `brf_£nd_commªd_sock‘ ( fd , ( bts_aùiÚ_£nd *è fixed_aùiÚ ); 334 »t = `brf_£nd_commªd_fže ( fd , £nd_aùiÚ , size ); 337  »t ; 338 } } 340  $brf_do_aùiÚ ( ušt16_t brf_ty³ , ušt8_t * brf_aùiÚ ,  brf_size , 341  fd , * ¥“d ,  ‹rmios * ti ,  hcžl_š¡®Ëd ) 343  »t = 0; 345  brf_ty³ ) { 346  ACTION_SEND_COMMAND : 347 `DPRINTF ("W"); 348 »t = `brf_£nd_commªd ( fd , 349 ( bts_aùiÚ_£nd *è brf_aùiÚ , 350 brf_size , hcžl_š¡®Ëd ); 352  ACTION_WAIT_EVENT : 353 `DPRINTF ("R"); 355  ACTION_SERIAL : 356 `DPRINTF ("S"); 357 »t = `brf_£t_£rŸl_·¿ms (( bts_aùiÚ_£rŸl *è brf_aùiÚ , fd , ¥“d , ti ); 359  ACTION_DELAY : 360 `DPRINTF ("D"); 361 `brf_d–ay (( bts_aùiÚ_d–ay *è brf_aùiÚ ); 363  ACTION_REMARKS : 364 `DPRINTF ("C"); 367 `årštf ( ¡d”r , "brf_š™: unknowÀfœmw¬aùiÚy³ (%d)\n", brf_ty³ ); 371  »t ; 372 } } 377  $brf_aùiÚ_is_d“p_¦“p ( ušt8_t * brf_aùiÚ ,  brf_size , 378 ušt16_t brf_ty³ ) 380 ušt16_t Ýcode ; 382 ià( brf_ty³ !ð ACTION_SEND_COMMAND ) 385 ià( brf_size < 3) 388 ià( brf_aùiÚ [0] !ð HCI_COMMAND_PKT ) 392 Ýcode = brf_aùiÚ [1] | (brf_action[2] << 8); 394 ià( Ýcode !ð BRF_DEEP_SLEEP_OPCODE ) 399 } } 408  $brf_do_süt ( fd , * ¥“d ,  ‹rmios * ti , cÚ¡ * bts_fže ) 410  »t = 0, hcžl_š¡®Ëd = bts_fže ? 0 : 1; 411 ušt32_t v”s ; 412  FILE * brf_süt_fže = NULL ; 413  ušt8_t brf_aùiÚ [512]; 414  brf_size ; 415  ušt16_t brf_ty³ ; 418 ià(0 =ð hcžl_š¡®Ëd ) { 419 `DPRINTF ("Sending scripto serial device\n"); 420 brf_süt_fže = `bts_lßd_süt ( bts_fže , & v”s ); 421 ià(! brf_süt_fže ) { 422 `årštf ( ¡d”r , "Warning: cannot find BTS file: %s\n", 423 bts_fže ); 427 `årštf Ð ¡d”r , "Lßded BTS süˆv”siÚ %u\n", v”s ); 429 brf_size = `bts_ãtch_aùiÚ ( brf_süt_fže , brf_aùiÚ , 430 ( brf_aùiÚ ), & brf_ty³ ); 431 ià( brf_size == 0) { 432 `årštf ( ¡d”r , "Warning: BTS file isƒmpty !"); 437 `DPRINTF ("Sending scripto bluetooth socket\n"); 441  brf_size != 0) { 442 »t = `brf_do_aùiÚ ( brf_ty³ , brf_aùiÚ , brf_size , 443 fd , ¥“d , ti , hcžl_š¡®Ëd ); 444 ià( »t == -1) 447 brf_size = `bts_ãtch_aùiÚ ( brf_süt_fže , brf_aùiÚ , 448 ( brf_aùiÚ ), & brf_ty³ ); 453 ià(! hcžl_š¡®Ëd && 454 `brf_aùiÚ_is_d“p_¦“p ( brf_aùiÚ , 455 brf_size , brf_ty³ )) 459 `bts_uÆßd_süt ( brf_süt_fže ); 460 brf_süt_fže = NULL ; 461 `DPRINTF ("\n"); 463  »t ; 464 } } 466  $‹xas_š™ ( fd , * ¥“d ,  ‹rmios * ti ) 468  time¥ec tm = {0, 50000}; 469  cmd [4]; 470  »¥ [100]; 471 cÚ¡ * bts_fže ; 472  n ; 474 `mem£t ( »¥ ,'\0', 100); 481 cmd [0] = HCI_COMMAND_PKT ; 482 cmd [1] = 0x01; 483 cmd [2] = 0x10; 484 cmd [3] = 0x00; 487 n = `wr™e ( fd , cmd , 4); 488 ià( n < 0) { 489 `³¼Ü ("Failedo write init command (READ_LOCAL_VERSION_INFORMATION)"); 492 ià( n < 4) { 493 `årštf ( ¡d”r , "Wª‹dØwr™4 by‹s, could oÆy wr™%d. StÝ\n", n ); 498 ià( `»ad_hci_ev’t ( fd , »¥ , 100) < 0) { 499 `³¼Ü ("Failedo„ead init„esponse (READ_LOCAL_VERSION_INFORMATION)"); 504 }  »¥ [4] !ð cmd [1] &&„esp[5] != cmd[2]); 507 ià(! `is_™_‹xas ( »¥ )) { 508 `årštf ( ¡d”r ,"ERROR: module's manufacturer is‚ot Texas Instruments\n"); 512 `årštf ( ¡d”r , "Found‡ Texas Instruments' chip!\n"); 514 bts_fže = `g‘_fœmw¬e_Çme ( »¥ ); 515 `årštf ( ¡d”r , "Fœmw¬fž: %s\n", bts_fže ); 517 n = `brf_do_süt ( fd , ¥“d , ti , bts_fže ); 519 `Çno¦“p (& tm , NULL ); 521  n ; 522 } } 524  $‹xas_po¡ ( fd ,  ‹rmios * ti ) 526  dev_id , dd , »t = 0; 528 `¦“p (1); 530 dev_id = `ioùl ( fd , HCIUARTGETDEVICE , 0); 531 ià( dev_id < 0) { 532 `³¼Ü ("cannot get device id"); 536 `DPRINTF ("\nAdded deviû hci%d\n", dev_id ); 538 dd = `hci_Ý’_dev ( dev_id ); 539 ià( dd < 0) { 540 `³¼Ü ("HCI device open failed"); 544 ià( `ioùl ( dd , HCIDEVUP , dev_id è< 0 && ”ºo !ð EALREADY ) { 545 `årštf ( ¡d”r , "Cª'ˆš™ deviû hci%d: % (%d)", dev_id , 546 `¡»¼Ü ( ”ºo ),ƒrrno); 547 `hci_þo£_dev ( dd ); 551 »t = `brf_do_süt ( dd , NULL , ti , NULL); 553 `hci_þo£_dev ( dd ); 555  »t ; 556 } } @tools/hciattach_tialt.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 34  ~ 35  ~ 36  ~<‹rmios.h > 37  ~ 38  ~ 39  ~ 40  ~ 41  ~ 42  ~ 44  ~ 45  ~ 46  ~ 48  ~"hcŸ‰ach.h " 50  #FAILIF ( x , ¬gs ...) do { \ 51 ià( x ) { \ 52 `årštf ( ¡d”r , ## ¬gs ); \ 55 } 0) ) 58 ušt8_t mu¬t_´efix ; 59 hci_ev’t_hdr mhci_hdr ; 60 evt_cmd_com¶‘e mcmd_com¶‘e ; 61 ušt8_t m¡©us ; 62 ušt8_t md©a [16]; 63 } t__©Œibu‹__ (( t·cked )è tcommªd_com¶‘e_t ; 65  $»ad_commªd_com¶‘e ( fd ,  Ýcode ,  Ën ) { 66 commªd_com¶‘e_t »¥ ; 68 `FAILIF ( `»ad_hci_ev’t ( fd , (*)& »¥ , (resp)) < 0, 72 `FAILIF ( »¥ . u¬t_´efix !ð HCI_EVENT_PKT , 74 »¥ . u¬t_´efix ); 76 `FAILIF ( »¥ . hci_hdr . evt !ð EVT_CMD_COMPLETE , 78 "buˆ0x%02x!\n", »¥ . hci_hdr . evt ); 80 `FAILIF ( »¥ . hci_hdr . ¶’ < 4, 82 »¥ . hci_hdr . ¶’ ); 85 `FAILIF ( »¥ . cmd_com¶‘e . Ýcode !ð( ušt16_t )opcode, 87 »¥ . cmd_com¶‘e . Ýcode , opcode); 89  »¥ . ¡©us == 0 ? 0 : -1; 90 } } 93 ušt8_t mu¬t_´efix ; 94 hci_commªd_hdr mhci_hdr ; 95 ušt32_t m¥“d ; 96 } t__©Œibu‹__ (( t·cked )è t‹xas_¥“d_chªge_cmd_t ; 98  $‹xas_chªge_¥“d ( fd , ušt32_t ¥“d ) 101 } } 103  $‹xas_lßd_fœmw¬e ( fd , cÚ¡ * fœmw¬e ) { 105  fw = `Ý’ ( fœmw¬e , O_RDONLY ); 107 `årštf ( ¡dout , "O³nšg fœmw¬fže: %s\n", fœmw¬e ); 109 `FAILIF ( fw < 0, 111 fœmw¬e , `¡»¼Ü ( ”ºo ),ƒrrno); 113 `årštf ( ¡dout , "Uploading firmware...\n"); 116  d©a [1024]; 117  cmdp [1 + ( hci_commªd_hdr )]; 118 hci_commªd_hdr * cmd = (hci_commªd_hd¸*)( cmdp + 1); 119  Ä ; 120 Ä = `»ad ( fw , cmdp , (cmdp)); 121 ià(! Ä ) 123 `FAILIF ( Ä !ð( cmdp ), "Could‚ot„ead H4 + HCI header!\n"); 124 `FAILIF (* cmdp !ð HCI_COMMAND_PKT , "Command is‚ot‡n H4 command…acket!\n"); 126 `FAILIF ( `»ad ( fw , d©a , cmd -> ¶’ ) != cmd->plen, 128 cmd -> ¶’ , 129 cmd -> Ýcode ); 132  nw ; 134 `årštf ( ¡dout , "\topcode 0x%04x (%d bytes of data).\n", 135 cmd -> Ýcode , 136 cmd -> ¶’ ); 138  iovec iov_cmd [2]; 139 iov_cmd [0]. iov_ba£ = cmdp ; 140 iov_cmd [0]. iov_Ën = ( cmdp ); 141 iov_cmd [1]. iov_ba£ = d©a ; 142 iov_cmd [1]. iov_Ën = cmd -> ¶’ ; 143 nw = `wr™ev ( fd , iov_cmd , 2); 144 `FAILIF ( nw !ð(è( cmd è+ cmd-> ¶’ , 146 nw ); 150 ià( `»ad_commªd_com¶‘e ( fd , 151 cmd -> Ýcode , 152 cmd -> ¶’ ) < 0) { 157 `årštf ( ¡dout , "Firmware upload successful.\n"); 159 `þo£ ( fw ); 161 } } 163  $‹xa§É_š™ ( fd ,  ¥“d ,  ‹rmios * ti ) 165  time¥ec tm = {0, 50000}; 166  cmd [4]; 167  »¥ [100]; 168  n ; 170 `mem£t ( »¥ ,'\0', 100); 177 cmd [0] = HCI_COMMAND_PKT ; 178 cmd [1] = 0x01; 179 cmd [2] = 0x10; 180 cmd [3] = 0x00; 183 n = `wr™e ( fd , cmd , 4); 184 ià( n < 0) { 185 `³¼Ü ("Failedo write init command (READ_LOCAL_VERSION_INFORMATION)"); 188 ià( n < 4) { 189 `årštf ( ¡d”r , "Wª‹dØwr™4 by‹s, could oÆy wr™%d. StÝ\n", n ); 194 ià( `»ad_hci_ev’t ( fd , »¥ , 100) < 0) { 195 `³¼Ü ("Failedo„ead init„esponse (READ_LOCAL_VERSION_INFORMATION)"); 200 }  »¥ [4] !ð cmd [1] &&„esp[5] != cmd[2]); 203 ià(( »¥ [11] & 0xFF) != 0x0d) 204 `årštf ( ¡d”r ,"WARNING : module's manufacturer is‚ot Texas Instrument\n"); 207 `årštf ( ¡d”r , "Texa moduË LMP v”siÚ : 0x%02x\n", »¥ [10] & 0xFF); 211  lmp_subv = »¥ [13] | (resp[14] << 8); 212  brf_ch = ( lmp_subv & 0x7c00) >> 10; 213 cÚ¡ * c_brf_ch [8] = { 223  fw [100]; 225 `årštf ( ¡d”r , "Texa moduË LMP sub-v”siÚ : 0x%04x\n", lmp_subv ); 227 `årštf ( ¡d”r , 231 lmp_subv & 0x7f, 232 (( lmp_subv & 0x8000) >> (15-3)) | ((lmp_subv & 0x380) >> 7), 233 (( brf_ch > 7è? "unknown" : c_brf_ch [brf_chip]), 234 brf_ch ); 236 `¥rštf ( fw , "/‘c/fœmw¬e/%s.bš", c_brf_ch [ brf_ch ]); 237 `‹xas_lßd_fœmw¬e ( fd , fw ); 239 `‹xas_chªge_¥“d ( fd , ¥“d ); 241 `Çno¦“p (& tm , NULL ); 243 } } @tools/hciconfig.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡dio.h > 31  ~<”ºo.h > 32  ~<ùy³.h > 33  ~ 34  ~<¡dlib.h > 35  ~<¡ršg.h > 36  ~ 37  ~ 38  ~ 39  ~ 40  ~ 42  ~ 43  ~ 44  ~ 46  ~"¤c/‹xtfže.h " 47  ~"¤c/sh¬ed/utž.h " 48  ~"toÞs/c¤.h " 50  hci_dev_šfo gdi ; 51  g®l ; 53  ´št_dev_hdr ( hci_dev_šfo * di ); 54  ´št_dev_šfo ( ùl ,  hci_dev_šfo * di ); 56  $´št_dev_li¡ ( ùl ,  æags ) 58  hci_dev_li¡_»q * dl ; 59  hci_dev_»q * dr ; 60  i ; 62 ià(!( dl = `m®loc ( HCI_MAX_DEV * ( hci_dev_»q ) + 63 ( ušt16_t )))) { 64 `³¼Ü ("Can't‡llocate memory"); 65 `ex™ (1); 67 dl -> dev_num = HCI_MAX_DEV ; 68 dr = dl -> dev_»q ; 70 ià( `ioùl ( ùl , HCIGETDEVLIST , (*è dl ) < 0) { 71 `³¼Ü ("Can't get device†ist"); 72 `ex™ (1); 75  i = 0; i< dl -> dev_num ; i++) { 76 di . dev_id = ( dr + i )->dev_id; 77 ià( `ioùl ( ùl , HCIGETDEVINFO , (*è& di ) < 0) 79 `´št_dev_šfo ( ùl , & di ); 81 } } 83  $´št_pkt_ty³ ( hci_dev_šfo * di ) 85 * ¡r ; 86 ¡r = `hci_±y³to¡r ( di -> pkt_ty³ ); 87 `´štf ("\tPack‘y³: %s\n", ¡r ); 88 `bt_ä“ ( ¡r ); 89 } } 91  $´št_lšk_pÞicy ( hci_dev_šfo * di ) 93 `´štf ("\tLšk…Þicy: %s\n", `hci_Íto¡r ( di -> lšk_pÞicy )); 94 } } 96  $´št_lšk_mode ( hci_dev_šfo * di ) 98 * ¡r ; 99 ¡r = `hci_lmto¡r ( di -> lšk_mode ); 100 `´štf ("\tLšk mode: %s\n", ¡r ); 101 `bt_ä“ ( ¡r ); 102 } } 104  $´št_dev_ã©u»s ( hci_dev_šfo * di ,  fÜm© ) 106 `´štf ("\tFeatures: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x " 108 di -> ã©u»s [0], di->features[1], di->features[2], 109 di -> ã©u»s [3], di->features[4], di->features[5], 110 di -> ã©u»s [6], di->features[7]); 112 ià( fÜm© ) { 113 * tmp = `lmp_ã©u»¡o¡r ( di -> ã©u»s , "\t\t", 63); 114 `´štf ("%s\n", tmp ); 115 `bt_ä“ ( tmp ); 117 } } 119  $´št_Ë_¡©es ( ušt64_t ¡©es ) 121  i ; 122 cÚ¡ * Ë_¡©es [] = { 152 NULL 155 `´štf ("Supported†ink†ayer states:\n"); 156  i = 0; Ë_¡©es [i]; i++) { 157 cÚ¡ * ¡©us ; 159 ¡©us = ¡©es & (1 << i ) ? "YES" : "NO "; 160 `´štf ("\t% %s\n", ¡©us , Ë_¡©es [ i ]); 162 } } 164  $cmd_r¡© ( ùl ,  hdev , * Ýt ) 167 ià( `ioùl ( ùl , HCIDEVRESTAT , hdev ) < 0) { 168 `årštf ( ¡d”r , "Can't„eset stats counters hci%d: %s (%d)\n", 169 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 170 `ex™ (1); 172 } } 174  $cmd_sÿn ( ùl ,  hdev , * Ýt ) 176  hci_dev_»q dr ; 178 dr . dev_id = hdev ; 179 dr . dev_Ýt = SCAN_DISABLED ; 180 ià(! `¡rcmp ( Ýt , "iscan")) 181 dr . dev_Ýt = SCAN_INQUIRY ; 182 ià(! `¡rcmp ( Ýt , "pscan")) 183 dr . dev_Ýt = SCAN_PAGE ; 184 ià(! `¡rcmp ( Ýt , "piscan")) 185 dr . dev_Ýt = SCAN_PAGE | SCAN_INQUIRY ; 187 ià( `ioùl ( ùl , HCISETSCAN , (è& dr ) < 0) { 188 `årštf ( ¡d”r , "Can't set scan mode on hci%d: %s (%d)\n", 189 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 190 `ex™ (1); 192 } } 194  $cmd_Ë_addr ( ùl ,  hdev , * Ýt ) 196  hci_»que¡ rq ; 197 Ë_£t_¿ndom_add»ss_ý ý ; 198 ušt8_t ¡©us ; 199  dd , ”r , »t ; 201 ià(! Ýt ) 204 ià( hdev < 0) 205 hdev = `hci_g‘_rou‹ ( NULL ); 207 dd = `hci_Ý’_dev ( hdev ); 208 ià( dd < 0) { 209 ”r = - ”ºo ; 210 `årštf ( ¡d”r , "Could‚ot open device: %s(%d)\n", 211 `¡»¼Ü (- ”r ), -err); 212 `ex™ (1); 215 `mem£t (& ý , 0, (cp)); 217 `¡r2ba ( Ýt , & ý . bdaddr ); 219 `mem£t (& rq , 0, (rq)); 220 rq . ogf = OGF_LE_CTL ; 221 rq . ocf = OCF_LE_SET_RANDOM_ADDRESS ; 222 rq . ý¬am = & ý ; 223 rq . þ’ = LE_SET_RANDOM_ADDRESS_CP_SIZE ; 224 rq . ½¬am = & ¡©us ; 225 rq . ¾’ = 1; 227 »t = `hci_£nd_»q ( dd , & rq , 1000); 228 ià( ¡©us || »t < 0) { 229 ”r = - ”ºo ; 230 `årštf ( ¡d”r , "Can't set„andom‡ddress for hci%d: " 231 "% (%d)\n", hdev , `¡»¼Ü (- ”r ), -err); 234 `hci_þo£_dev ( dd ); 235 } } 237  $cmd_Ë_adv ( ùl ,  hdev , * Ýt ) 239  hci_»que¡ rq ; 240 Ë_£t_adv”ti£_’abË_ý adv”ti£_ý ; 241 Ë_£t_adv”tisšg_·¿m‘”s_ý adv_·¿ms_ý ; 242 ušt8_t ¡©us ; 243  dd , »t ; 245 ià( hdev < 0) 246 hdev = `hci_g‘_rou‹ ( NULL ); 248 dd = `hci_Ý’_dev ( hdev ); 249 ià( dd < 0) { 250 `³¼Ü ("Could‚ot open device"); 251 `ex™ (1); 254 `mem£t (& adv_·¿ms_ý , 0, (adv_params_cp)); 255 adv_·¿ms_ý . mš_š‹rv® = `htobs (0x0800); 256 adv_·¿ms_ý . max_š‹rv® = `htobs (0x0800); 257 ià( Ýt ) 258 adv_·¿ms_ý . advty³ = `©oi ( Ýt ); 259 adv_·¿ms_ý . chª_m­ = 7; 261 `mem£t (& rq , 0, (rq)); 262 rq . ogf = OGF_LE_CTL ; 263 rq . ocf = OCF_LE_SET_ADVERTISING_PARAMETERS ; 264 rq . ý¬am = & adv_·¿ms_ý ; 265 rq . þ’ = LE_SET_ADVERTISING_PARAMETERS_CP_SIZE ; 266 rq . ½¬am = & ¡©us ; 267 rq . ¾’ = 1; 269 »t = `hci_£nd_»q ( dd , & rq , 1000); 270 ià( »t < 0) 271  dÚe ; 273 `mem£t (& adv”ti£_ý , 0, (advertise_cp)); 274 adv”ti£_ý . ’abË = 0x01; 276 `mem£t (& rq , 0, (rq)); 277 rq . ogf = OGF_LE_CTL ; 278 rq . ocf = OCF_LE_SET_ADVERTISE_ENABLE ; 279 rq . ý¬am = & adv”ti£_ý ; 280 rq . þ’ = LE_SET_ADVERTISE_ENABLE_CP_SIZE ; 281 rq . ½¬am = & ¡©us ; 282 rq . ¾’ = 1; 284 »t = `hci_£nd_»q ( dd , & rq , 1000); 286 dÚe : 287 `hci_þo£_dev ( dd ); 289 ià( »t < 0) { 290 `årštf ( ¡d”r , "Can't set‡dvertise mode on hci%d: %s (%d)\n", 291 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 292 `ex™ (1); 295 ià( ¡©us ) { 296 `årštf ( ¡d”r , 298 hdev , ¡©us ); 299 `ex™ (1); 301 } } 303  $cmd_no_Ë_adv ( ùl ,  hdev , * Ýt ) 305  hci_»que¡ rq ; 306 Ë_£t_adv”ti£_’abË_ý adv”ti£_ý ; 307 ušt8_t ¡©us ; 308  dd , »t ; 310 ià( hdev < 0) 311 hdev = `hci_g‘_rou‹ ( NULL ); 313 dd = `hci_Ý’_dev ( hdev ); 314 ià( dd < 0) { 315 `³¼Ü ("Could‚ot open device"); 316 `ex™ (1); 319 `mem£t (& adv”ti£_ý , 0, (advertise_cp)); 321 `mem£t (& rq , 0, (rq)); 322 rq . ogf = OGF_LE_CTL ; 323 rq . ocf = OCF_LE_SET_ADVERTISE_ENABLE ; 324 rq . ý¬am = & adv”ti£_ý ; 325 rq . þ’ = LE_SET_ADVERTISE_ENABLE_CP_SIZE ; 326 rq . ½¬am = & ¡©us ; 327 rq . ¾’ = 1; 329 »t = `hci_£nd_»q ( dd , & rq , 1000); 331 `hci_þo£_dev ( dd ); 333 ià( »t < 0) { 334 `årštf ( ¡d”r , "Can't set‡dvertise mode on hci%d: %s (%d)\n", 335 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 336 `ex™ (1); 339 ià( ¡©us ) { 340 `årštf ( ¡d”r , "LE set‡dvertiseƒnable on hci%d„eturned status %d\n", 341 hdev , ¡©us ); 342 `ex™ (1); 344 } } 346  $cmd_Ë_¡©es ( ùl ,  hdev , * Ýt ) 348 Ë_»ad_suµÜ‹d_¡©es_½ ½ ; 349  hci_»que¡ rq ; 350  ”r , dd ; 352 ià( hdev < 0) 353 hdev = `hci_g‘_rou‹ ( NULL ); 355 dd = `hci_Ý’_dev ( hdev ); 356 ià( dd < 0) { 357 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 358 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 359 `ex™ (1); 362 `mem£t (& ½ , 0, (rp)); 363 `mem£t (& rq , 0, (rq)); 365 rq . ogf = OGF_LE_CTL ; 366 rq . ocf = OCF_LE_READ_SUPPORTED_STATES ; 367 rq . ½¬am = & ½ ; 368 rq . ¾’ = LE_READ_SUPPORTED_STATES_RP_SIZE ; 370 ”r = `hci_£nd_»q ( dd , & rq , 1000); 372 `hci_þo£_dev ( dd ); 374 ià( ”r < 0) { 375 `årštf ( ¡d”r , "Can't„ead LE supported states on hci%d:" 376 " %s(%d)\n", hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 377 `ex™ (1); 380 ià( ½ . ¡©us ) { 381 `årštf ( ¡d”r , "Read LE supported states on hci%d" 382 "„‘uºed stu %d\n", hdev , ½ . ¡©us ); 383 `ex™ (1); 386 `´št_Ë_¡©es ( ½ . ¡©es ); 387 } } 389  $cmd_Ÿc ( ùl ,  hdev , * Ýt ) 391  s = `hci_Ý’_dev ( hdev ); 393 ià( s < 0) { 394 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 395 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 396 `ex™ (1); 398 ià( Ýt ) { 399  l = `¡¹oul ( Ýt , 0, 16); 400 ušt8_t Ïp [3]; 401 ià(! `¡rÿ£cmp ( Ýt , "giac")) { 402 l = 0x9e8b33; 403 } ià(! `¡rÿ£cmp ( Ýt , "liac")) { 404 l = 0x9e8b00; 405 } ià( l < 0x9e8b00 ||† > 0x9e8b3f) { 406 `´štf ("Inv®id‡cûs cod0x%x\n", l ); 407 `ex™ (1); 409 Ïp [0] = ( l & 0xff); 410 Ïp [1] = ( l >> 8) & 0xff; 411 Ïp [2] = ( l >> 16) & 0xff; 412 ià( `hci_wr™e_cu¼’t_Ÿc_Ïp ( s , 1, Ïp , 1000) < 0) { 413 `´štf ("FažedØ£ˆIAC oÀhci%d: %s\n", hdev , `¡»¼Ü ( ”ºo )); 414 `ex™ (1); 417 ušt8_t Ïp [3 * MAX_IAC_LAP ]; 418  i , j ; 419 ušt8_t n ; 420 ià( `hci_»ad_cu¼’t_Ÿc_Ïp ( s , & n , Ïp , 1000) < 0) { 421 `´štf ("FažedØ»ad IAC from hci%d: %s\n", hdev , `¡»¼Ü ( ”ºo )); 422 `ex™ (1); 424 `´št_dev_hdr (& di ); 425 `´štf ("\tIAC: "); 426  i = 0; i < n ; i++) { 427 `´štf ("0x"); 428  j = 3; j--; ) 429 `´štf ("%02x", Ïp [ j + 3 * i ]); 430 ià( i < n - 1) 431 `´štf (", "); 433 `´štf ("\n"); 435 `þo£ ( s ); 436 } } 438  $cmd_auth ( ùl ,  hdev , * Ýt ) 440  hci_dev_»q dr ; 442 dr . dev_id = hdev ; 443 ià(! `¡rcmp ( Ýt , "auth")) 444 dr . dev_Ýt = AUTH_ENABLED ; 446 dr . dev_Ýt = AUTH_DISABLED ; 448 ià( `ioùl ( ùl , HCISETAUTH , (è& dr ) < 0) { 449 `årštf ( ¡d”r , "Can't set‡uth on hci%d: %s (%d)\n", 450 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 451 `ex™ (1); 453 } } 455  $cmd_’üy± ( ùl ,  hdev , * Ýt ) 457  hci_dev_»q dr ; 459 dr . dev_id = hdev ; 460 ià(! `¡rcmp ( Ýt , "encrypt")) 461 dr . dev_Ýt = ENCRYPT_P2P ; 463 dr . dev_Ýt = ENCRYPT_DISABLED ; 465 ià( `ioùl ( ùl , HCISETENCRYPT , (è& dr ) < 0) { 466 `årštf ( ¡d”r , "Can't setƒncrypt on hci%d: %s (%d)\n", 467 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 468 `ex™ (1); 470 } } 472  $cmd_up ( ùl ,  hdev , * Ýt ) 475 ià( `ioùl ( ùl , HCIDEVUP , hdev ) < 0) { 476 ià( ”ºo =ð EALREADY ) 478 `årštf ( ¡d”r , "Can't init device hci%d: %s (%d)\n", 479 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 480 `ex™ (1); 482 } } 484  $cmd_down ( ùl ,  hdev , * Ýt ) 487 ià( `ioùl ( ùl , HCIDEVDOWN , hdev ) < 0) { 488 `årštf ( ¡d”r , "Can't down device hci%d: %s (%d)\n", 489 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 490 `ex™ (1); 492 } } 494  $cmd_»£t ( ùl ,  hdev , * Ýt ) 498 ià( `ioùl ( ùl , HCIDEVRESET , hdev ) < 0 ){ 499 `årštf ( ¡d”r , "Reset failed for device hci%d: %s (%d)\n", 500 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 501 `ex™ (1); 504 `cmd_down ( ùl , hdev , "down"); 505 `cmd_up ( ùl , hdev , "up"); 506 } } 508  $cmd_±y³ ( ùl ,  hdev , * Ýt ) 510  hci_dev_»q dr ; 512 dr . dev_id = hdev ; 514 ià( `hci_¡¹Ýty³ ( Ýt , & dr . dev_Ýt )) { 515 ià( `ioùl ( ùl , HCISETPTYPE , (è& dr ) < 0) { 516 `årštf ( ¡d”r , "Can't set…kttype on hci%d: %s (%d)\n", 517 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 518 `ex™ (1); 521 `´št_dev_hdr (& di ); 522 `´št_pkt_ty³ (& di ); 524 } } 526  $cmd_Í ( ùl ,  hdev , * Ýt ) 528  hci_dev_»q dr ; 530 dr . dev_id = hdev ; 532 ià( `hci_¡¹Þp ( Ýt , & dr . dev_Ýt )) { 533 ià( `ioùl ( ùl , HCISETLINKPOL , (è& dr ) < 0) { 534 `årštf ( ¡d”r , "Can't set†ink…olicy on hci%d: %s (%d)\n", 535 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 536 `ex™ (1); 539 `´št_dev_hdr (& di ); 540 `´št_lšk_pÞicy (& di ); 542 } } 544  $cmd_lm ( ùl ,  hdev , * Ýt ) 546  hci_dev_»q dr ; 548 dr . dev_id = hdev ; 550 ià( `hci_¡¹Þm ( Ýt , & dr . dev_Ýt )) { 551 ià( `ioùl ( ùl , HCISETLINKMODE , (è& dr ) < 0) { 552 `årštf ( ¡d”r , "Can't set default†ink mode on hci%d: %s (%d)\n", 553 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 554 `ex™ (1); 557 `´št_dev_hdr (& di ); 558 `´št_lšk_mode (& di ); 560 } } 562  $cmd_aþmtu ( ùl ,  hdev , * Ýt ) 564  hci_dev_»q dr = { . dev_id = hdev }; 565 ušt16_t mtu , mpkt ; 567 ià(! Ýt ) 570 ià( `ssÿnf ( Ýt , "%4hu:%4hu", & mtu , & mpkt ) != 2) 573 dr . dev_Ýt = `htobl ( `htobs ( mpkt è| (htobs( mtu ) << 16)); 575 ià( `ioùl ( ùl , HCISETACLMTU , (è& dr ) < 0) { 576 `årštf ( ¡d”r , "Can't set ACL mtu on hci%d: %s(%d)\n", 577 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 578 `ex™ (1); 580 } } 582  $cmd_scomtu ( ùl ,  hdev , * Ýt ) 584  hci_dev_»q dr = { . dev_id = hdev }; 585 ušt16_t mtu , mpkt ; 587 ià(! Ýt ) 590 ià( `ssÿnf ( Ýt , "%4hu:%4hu", & mtu , & mpkt ) != 2) 593 dr . dev_Ýt = `htobl ( `htobs ( mpkt è| (htobs( mtu ) << 16)); 595 ià( `ioùl ( ùl , HCISETSCOMTU , (è& dr ) < 0) { 596 `årštf ( ¡d”r , "Can't set SCO mtu on hci%d: %s (%d)\n", 597 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 598 `ex™ (1); 600 } } 602  $cmd_ã©u»s ( ùl ,  hdev , * Ýt ) 604 ušt8_t ã©u»s [8], max_·ge = 0; 605 * tmp ; 606  i , dd ; 608 ià(!( di . ã©u»s [7] & LMP_EXT_FEAT )) { 609 `´št_dev_hdr (& di ); 610 `´št_dev_ã©u»s (& di , 1); 614 dd = `hci_Ý’_dev ( hdev ); 615 ià( dd < 0) { 616 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 617 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 618 `ex™ (1); 621 ià( `hci_»ad_loÿl_ext_ã©u»s ( dd , 0, & max_·ge , ã©u»s , 1000) < 0) { 622 `årštf ( ¡d”r , "Can't„eadƒxtended features hci%d: %s (%d)\n", 623 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 624 `ex™ (1); 627 `´št_dev_hdr (& di ); 628 `´štf ("\tFeatures%s: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x " 630 ( max_·ge > 0) ? "…age 0" : "", 631 ã©u»s [0], features[1], features[2], features[3], 632 ã©u»s [4], features[5], features[6], features[7]); 634 tmp = `lmp_ã©u»¡o¡r ( di . ã©u»s , "\t\t", 63); 635 `´štf ("%s\n", tmp ); 636 `bt_ä“ ( tmp ); 638  i = 1; i <ð max_·ge ; i++) { 639 ià( `hci_»ad_loÿl_ext_ã©u»s ( dd , i , NULL , 640 ã©u»s , 1000) < 0) 643 `´štf ("\tFeatures…age %d: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x " 644 "0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x\n", i , 645 ã©u»s [0], features[1], features[2], features[3], 646 ã©u»s [4], features[5], features[6], features[7]); 649 `hci_þo£_dev ( dd ); 650 } } 652  $cmd_Çme ( ùl ,  hdev , * Ýt ) 654  dd ; 656 dd = `hci_Ý’_dev ( hdev ); 657 ià( dd < 0) { 658 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 659 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 660 `ex™ (1); 663 ià( Ýt ) { 664 ià( `hci_wr™e_loÿl_Çme ( dd , Ýt , 2000) < 0) { 665 `årštf ( ¡d”r , "Can't change†ocal‚ame on hci%d: %s (%d)\n", 666 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 667 `ex™ (1); 670  Çme [249]; 671  i ; 673 ià( `hci_»ad_loÿl_Çme ( dd , ( Çme ),‚ame, 1000) < 0) { 674 `årštf ( ¡d”r , "Can't„ead†ocal‚ame on hci%d: %s (%d)\n", 675 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 676 `ex™ (1); 679  i = 0; i < 248 && Çme [i]; i++) { 680 ià((è Çme [ i ] < 32 ||‚ame[i] == 127) 681 Çme [ i ] = '.'; 684 Çme [248] = '\0'; 686 `´št_dev_hdr (& di ); 687 `´štf ("\tName: '%s'\n", Çme ); 690 `hci_þo£_dev ( dd ); 691 } } 697 * $g‘_mšÜ_deviû_Çme ( majÜ ,  mšÜ ) 699  majÜ ) { 703  mšÜ ) { 721  mšÜ ) { 739 ià( mšÜ == 0) 741  mšÜ / 8) { 761  mšÜ ) { 801  þs_¡r [48]; 803 þs_¡r [0] = '\0'; 805  mšÜ & 48) { 807 `¡ºýy ( þs_¡r , "Keyboard", (cls_str)); 810 `¡ºýy ( þs_¡r , "Pointing device", (cls_str)); 813 `¡ºýy ( þs_¡r , "Combo keyboard/pointing device", (cls_str)); 816 ià(( mšÜ & 15è&& ( `¡¾’ ( þs_¡r ) > 0)) 817 `¡rÿt ( þs_¡r , "/"); 819  mšÜ & 15) { 823 `¡ºÿt ( þs_¡r , "Joystick", 824 ( þs_¡r è- `¡¾’ (cls_str) - 1); 827 `¡ºÿt ( þs_¡r , "Gamepad", 828 ( þs_¡r è- `¡¾’ (cls_str) - 1); 831 `¡ºÿt ( þs_¡r , "Remote control", 832 ( þs_¡r è- `¡¾’ (cls_str) - 1); 835 `¡ºÿt ( þs_¡r , "Sensing device", 836 ( þs_¡r è- `¡¾’ (cls_str) - 1); 839 `¡ºÿt ( þs_¡r , "Digitizerablet", 840 ( þs_¡r è- `¡¾’ (cls_str) - 1); 843 `¡ºÿt ( þs_¡r , "Card„eader", 844 ( þs_¡r è- `¡¾’ (cls_str) - 1); 847 `¡ºÿt ( þs_¡r , "(reserved)", 848 ( þs_¡r è- `¡¾’ (cls_str) - 1); 851 ià( `¡¾’ ( þs_¡r ) > 0) 852  þs_¡r ; 856 ià( mšÜ & 4) 858 ià( mšÜ & 8) 860 ià( mšÜ & 16) 862 ià( mšÜ & 32) 866  mšÜ ) { 880  mšÜ ) { 897 } } 899  $cmd_þass ( ùl ,  hdev , * Ýt ) 901 cÚ¡ * £rviûs [] = { "Positioning", 909 cÚ¡ * majÜ_deviûs [] = { "Miscellaneous", 917  s = `hci_Ý’_dev ( hdev ); 919 ià( s < 0) { 920 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 921 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 922 `ex™ (1); 924 ià( Ýt ) { 925 ušt32_t cod = `¡¹oul ( Ýt , NULL , 16); 926 ià( `hci_wr™e_þass_of_dev ( s , cod , 2000) < 0) { 927 `årštf ( ¡d”r , "Can't write†ocal class of device on hci%d: %s (%d)\n", 928 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 929 `ex™ (1); 932 ušt8_t þs [3]; 933 ià( `hci_»ad_þass_of_dev ( s , þs , 1000) < 0) { 934 `årštf ( ¡d”r , "Can't„ead class of device on hci%d: %s (%d)\n", 935 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 936 `ex™ (1); 938 `´št_dev_hdr (& di ); 939 `´štf ("\tCÏss: 0x%02x%02x%02x\n", þs [2], cls[1], cls[0]); 940 `´štf ("\tService Classes: "); 941 ià( þs [2]) { 942  i ; 943  fœ¡ = 1; 944  i = 0; i < (( £rviûs ) / (*services)); i++) 945 ià( þs [2] & (1 << i )) { 946 ià(! fœ¡ ) 947 `´štf (", "); 948 `´štf ("%s", £rviûs [ i ]); 949 fœ¡ = 0; 952 `´štf ("Unspecified"); 953 `´štf ("\n\tDevice Class: "); 954 ià(( þs [1] & 0x1fè>ð( majÜ_deviûs ) / (*major_devices)) 955 `´štf ("Invalid Device Class!\n"); 957 `´štf ("%s, %s\n", majÜ_deviûs [ þs [1] & 0x1f], 958 `g‘_mšÜ_deviû_Çme ( þs [1] & 0x1f, cls[0] >> 2)); 960 } } 962  $cmd_voiû ( ùl ,  hdev , * Ýt ) 964 * icf [] = { "Linear", 969 * idf [] = { "1's complement", 974 * iss [] = { "8 bit", 977 * acf [] = { "CVSD", 982  s = `hci_Ý’_dev ( hdev ); 984 ià( s < 0) { 985 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 986 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 987 `ex™ (1); 989 ià( Ýt ) { 990 ušt16_t vs = `htobs ( `¡¹oul ( Ýt , NULL , 16)); 991 ià( `hci_wr™e_voiû_£‰šg ( s , vs , 2000) < 0) { 992 `årštf ( ¡d”r , "Can't write voice setting on hci%d: %s (%d)\n", 993 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 994 `ex™ (1); 997 ušt16_t vs ; 998 ušt8_t ic ; 999 ià( `hci_»ad_voiû_£‰šg ( s , & vs , 1000) < 0) { 1000 `årštf ( ¡d”r , "Can't„ead voice setting on hci%d: %s (%d)\n", 1001 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1002 `ex™ (1); 1004 vs = `htobs (vs); 1005 ic = ( vs & 0x0300) >> 8; 1006 `´št_dev_hdr (& di ); 1007 `´štf ("\tVoiû s‘tšg: 0x%04x%s\n", vs , 1008 (( vs & 0x03fc) == 0x0060) ? " (Default Condition)" : ""); 1009 `´štf ("\tIÅuˆCodšg: %s\n", icf [ ic ]); 1010 `´štf ("\tIÅuˆD©¨FÜm©: %s\n", idf [( vs & 0xc0) >> 6]); 1012 ià(! ic ) { 1013 `´štf ("\tInput Sample Size: %s\n", 1014 iss [( vs & 0x20) >> 5]); 1015 `´štf ("\t# of bits…adding‡t MSB: %d\n", 1016 ( vs & 0x1c) >> 2); 1018 `´štf ("\tAœ Codšg FÜm©: %s\n", acf [ vs & 0x03]); 1020 } } 1022  $cmd_d–key ( ùl ,  hdev , * Ýt ) 1024 bdaddr_t bdaddr ; 1025 ušt8_t ®l ; 1026  dd ; 1028 ià(! Ýt ) 1031 dd = `hci_Ý’_dev ( hdev ); 1032 ià( dd < 0) { 1033 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1034 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1035 `ex™ (1); 1038 ià(! `¡rÿ£cmp ( Ýt , "all")) { 1039 `baýy (& bdaddr , BDADDR_ANY ); 1040 ®l = 1; 1042 `¡r2ba ( Ýt , & bdaddr ); 1043 ®l = 0; 1046 ià( `hci_d–‘e_¡Üed_lšk_key ( dd , & bdaddr , ®l , 1000) < 0) { 1047 `årštf ( ¡d”r , "Can't delete stored†ink key on hci%d: %s (%d)\n", 1048 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1049 `ex™ (1); 1052 `hci_þo£_dev ( dd ); 1053 } } 1055  $cmd_oob_d©a ( ùl ,  hdev , * Ýt ) 1057 ušt8_t hash [16], ¿ndomiz” [16]; 1058  i , dd ; 1060 dd = `hci_Ý’_dev ( hdev ); 1061 ià( dd < 0) { 1062 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1063 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1064 `ex™ (1); 1067 ià( `hci_»ad_loÿl_oob_d©a ( dd , hash , ¿ndomiz” , 1000) < 0) { 1068 `årštf ( ¡d”r , "Can't„ead†ocal OOB data on hci%d: %s (%d)\n", 1069 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1070 `ex™ (1); 1073 `´št_dev_hdr (& di ); 1074 `´štf ("\tOOB Hash: "); 1075  i = 0; i < 16; i++) 1076 `´štf (" %02x", hash [ i ]); 1077 `´štf ("\n\tRandomizer:"); 1078  i = 0; i < 16; i++) 1079 `´štf (" %02x", ¿ndomiz” [ i ]); 1080 `´štf ("\n"); 1082 `hci_þo£_dev ( dd ); 1083 } } 1085  $cmd_commªds ( ùl ,  hdev , * Ýt ) 1087 ušt8_t cmds [64]; 1088 * ¡r ; 1089  i , n , dd ; 1091 dd = `hci_Ý’_dev ( hdev ); 1092 ià( dd < 0) { 1093 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1094 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1095 `ex™ (1); 1098 ià( `hci_»ad_loÿl_commªds ( dd , cmds , 1000) < 0) { 1099 `årštf ( ¡d”r , "Can't„ead support commands on hci%d: %s (%d)\n", 1100 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1101 `ex™ (1); 1104 `´št_dev_hdr (& di ); 1105  i = 0; i < 64; i++) { 1106 ià(! cmds [ i ]) 1109 `´štf ("%s Octet %-2d = 0x%02x (Bit", 1110 i ? "\t\ˆ": "\tCommªds:", i, cmds [i]); 1111  n = 0;‚ < 8;‚++) 1112 ià( cmds [ i ] & (1 << n )) 1113 `´štf (" %d", n ); 1114 `´štf (")\n"); 1117 ¡r = `hci_commªd¡o¡r ( cmds , "\t", 71); 1118 `´štf ("%s\n", ¡r ); 1119 `bt_ä“ ( ¡r ); 1121 `hci_þo£_dev ( dd ); 1122 } } 1124  $cmd_v”siÚ ( ùl ,  hdev , * Ýt ) 1126  hci_v”siÚ v” ; 1127 * hciv” , * lmpv” ; 1128  dd ; 1130 dd = `hci_Ý’_dev ( hdev ); 1131 ià( dd < 0) { 1132 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1133 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1134 `ex™ (1); 1137 ià( `hci_»ad_loÿl_v”siÚ ( dd , & v” , 1000) < 0) { 1138 `årštf ( ¡d”r , "Can't„ead version info hci%d: %s (%d)\n", 1139 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1140 `ex™ (1); 1143 hciv” = `hci_v”to¡r ( v” . hci_v” ); 1144 ià((( di . ty³ & 0x30è>> 4è=ð HCI_BREDR ) 1145 lmpv” = `lmp_v”to¡r ( v” . lmp_v” ); 1147 lmpv” = `·l_v”to¡r ( v” . lmp_v” ); 1149 `´št_dev_hdr (& di ); 1150 `´štf ("\tHCI Version: %s (0x%x) Revision: 0x%x\n" 1153 hciv” ? hciv” : "n/a", v” . hci_v” , v”. hci_»v , 1154 ((( di . ty³ & 0x30è>> 4è=ð HCI_BREDR ) ? "LMP" : "PAL", 1155 lmpv” ?†mpv” : "n/a", v” . lmp_v” , v”. lmp_subv” , 1156 `bt_compidto¡r ( v” . mªuçùu»r ), ver.manufacturer); 1158 ià( hciv” ) 1159 `bt_ä“ ( hciv” ); 1160 ià( lmpv” ) 1161 `bt_ä“ ( lmpv” ); 1163 `hci_þo£_dev ( dd ); 1164 } } 1166  $cmd_šq_l ( ùl ,  hdev , * Ýt ) 1168  dd ; 1170 dd = `hci_Ý’_dev ( hdev ); 1171 ià( dd < 0) { 1172 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1173 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1174 `ex™ (1); 1177 ià( Ýt ) { 1178 št8_t Ëv– = `©oi ( Ýt ); 1180 ià( `hci_wr™e_šquœy_Œªsm™_pow”_Ëv– ( dd , Ëv– , 2000) < 0) { 1181 `årštf ( ¡d”r , "Can't set inquiryransmit…ower†evel on hci%d: %s (%d)\n", 1182 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1183 `ex™ (1); 1186 št8_t Ëv– ; 1188 ià( `hci_»ad_šq_»¥Ú£_tx_pow”_Ëv– ( dd , & Ëv– , 1000) < 0) { 1189 `årštf ( ¡d”r , "Can't„ead inquiryransmit…ower†evel on hci%d: %s (%d)\n", 1190 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1191 `ex™ (1); 1194 `´št_dev_hdr (& di ); 1195 `´štf ("\tInquœy¿nsm™…ow”†ev–: %d\n", Ëv– ); 1198 `hci_þo£_dev ( dd ); 1199 } } 1201  $cmd_šq_mode ( ùl ,  hdev , * Ýt ) 1203  dd ; 1205 dd = `hci_Ý’_dev ( hdev ); 1206 ià( dd < 0) { 1207 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1208 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1209 `ex™ (1); 1212 ià( Ýt ) { 1213 ušt8_t mode = `©oi ( Ýt ); 1215 ià( `hci_wr™e_šquœy_mode ( dd , mode , 2000) < 0) { 1216 `årštf ( ¡d”r , "Can't set inquiry mode on hci%d: %s (%d)\n", 1217 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1218 `ex™ (1); 1221 ušt8_t mode ; 1223 ià( `hci_»ad_šquœy_mode ( dd , & mode , 1000) < 0) { 1224 `årštf ( ¡d”r , "Can't„ead inquiry mode on hci%d: %s (%d)\n", 1225 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1226 `ex™ (1); 1229 `´št_dev_hdr (& di ); 1230 `´štf ("\tInquiry mode: "); 1231  mode ) { 1233 `´štf ("Standard Inquiry\n"); 1236 `´štf ("Inquiry with RSSI\n"); 1239 `´štf ("Inquiry with RSSI or Extended Inquiry\n"); 1242 `´štf ("UnknowÀ(0x%02x)\n", mode ); 1247 `hci_þo£_dev ( dd ); 1248 } } 1250  $cmd_šq_d©a ( ùl ,  hdev , * Ýt ) 1252  i , dd ; 1254 dd = `hci_Ý’_dev ( hdev ); 1255 ià( dd < 0) { 1256 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1257 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1258 `ex™ (1); 1261 ià( Ýt ) { 1262 ušt8_t ãc = 0, d©a [ HCI_MAX_EIR_LENGTH ]; 1263  tmp [3]; 1264  i , size ; 1266 `mem£t ( d©a , 0, (data)); 1268 `mem£t ( tmp , 0, (tmp)); 1269 size = ( `¡¾’ ( Ýt ) + 1) / 2; 1270 ià( size > HCI_MAX_EIR_LENGTH ) 1271 size = HCI_MAX_EIR_LENGTH ; 1273  i = 0; i < size ; i++) { 1274 `memýy ( tmp , Ýt + ( i * 2), 2); 1275 d©a [ i ] = `¡¹Þ ( tmp , NULL , 16); 1278 ià( `hci_wr™e_ext_šquœy_»¥Ú£ ( dd , ãc , d©a , 2000) < 0) { 1279 `årštf ( ¡d”r , "Can't setƒxtended inquiry„esponse on hci%d: %s (%d)\n", 1280 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1281 `ex™ (1); 1284 ušt8_t ãc , d©a [ HCI_MAX_EIR_LENGTH ], Ën , ty³ , * ±r ; 1285 * ¡r ; 1287 ià( `hci_»ad_ext_šquœy_»¥Ú£ ( dd , & ãc , d©a , 1000) < 0) { 1288 `årštf ( ¡d”r , "Can't„eadƒxtended inquiry„esponse on hci%d: %s (%d)\n", 1289 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1290 `ex™ (1); 1293 `´št_dev_hdr (& di ); 1294 `´štf ("\tFEC %s\n\t\t", ãc ? "enabled" : "disabled"); 1295  i = 0; i < HCI_MAX_EIR_LENGTH ; i++) 1296 `´štf ("%02x%s%s", d©a [ i ], (i + 1) % 8 ? "" : " ", 1297 ( i + 1) % 16 ? " " : (i < 239 ? "\n\t\t" : "\n")); 1299 ±r = d©a ; 1300 * ±r ) { 1301 Ën = * ±r ++; 1302 ty³ = * ±r ++; 1303  ty³ ) { 1305 `´štf ("\tFlags:"); 1306  i = 0; i < Ën - 1; i++) 1307 `´štf (" 0x%2.2x", *(( ušt8_t *è( ±r + i ))); 1308 `´štf ("\n"); 1312 `´štf ("\t%s service classes:", 1313 ty³ == 0x02 ? "Shortened" : "Complete"); 1314  i = 0; i < ( Ën - 1) / 2; i++) { 1315 ušt16_t v® = `g‘_Ë16 (( ±r + ( i * 2))); 1316 `´štf (" 0x%4.4x", v® ); 1318 `´štf ("\n"); 1322 ¡r = `m®loc ( Ën ); 1323 ià( ¡r ) { 1324 `¢´štf ( ¡r , Ën , "%s", ±r ); 1325  i = 0; i < Ën - 1; i++) { 1326 ià((è ¡r [ i ] < 32 || str[i] == 127) 1327 ¡r [ i ] = '.'; 1329 `´štf ("\t%s†ocal‚ame: \'%s\'\n", 1330 ty³ =ð0x08 ? "ShÜ‹Ãd" : "Com¶‘e", ¡r ); 1331 `ä“ ( ¡r ); 1335 `´štf ("\tTX…ow”†ev–: %d\n", *(( št8_t *è ±r )); 1338 `´štf ("\tDevice ID with %d bytes data\n", 1339 Ën - 1); 1342 `´štf ("\tUnknownype 0x%02x with %d bytes data\n", 1343 ty³ , Ën - 1); 1347 ±r +ð( Ën - 1); 1350 `´štf ("\n"); 1353 `hci_þo£_dev ( dd ); 1354 } } 1356  $cmd_šq_ty³ ( ùl ,  hdev , * Ýt ) 1358  dd ; 1360 dd = `hci_Ý’_dev ( hdev ); 1361 ià( dd < 0) { 1362 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1363 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1364 `ex™ (1); 1367 ià( Ýt ) { 1368 ušt8_t ty³ = `©oi ( Ýt ); 1370 ià( `hci_wr™e_šquœy_sÿn_ty³ ( dd , ty³ , 2000) < 0) { 1371 `årštf ( ¡d”r , "Can't set inquiry scanype on hci%d: %s (%d)\n", 1372 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1373 `ex™ (1); 1376 ušt8_t ty³ ; 1378 ià( `hci_»ad_šquœy_sÿn_ty³ ( dd , & ty³ , 1000) < 0) { 1379 `årštf ( ¡d”r , "Can't„ead inquiry scanype on hci%d: %s (%d)\n", 1380 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1381 `ex™ (1); 1384 `´št_dev_hdr (& di ); 1385 `´štf ("\tInquiry scanype: %s\n", 1386 ty³ == 1 ? "Interlaced Inquiry Scan" : "Standard Inquiry Scan"); 1389 `hci_þo£_dev ( dd ); 1390 } } 1392  $cmd_šq_·rms ( ùl ,  hdev , * Ýt ) 1394  hci_»que¡ rq ; 1395  s ; 1397 ià(( s = `hci_Ý’_dev ( hdev )) < 0) { 1398 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1399 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1400 `ex™ (1); 1403 `mem£t (& rq , 0, (rq)); 1405 ià( Ýt ) { 1406  wšdow , š‹rv® ; 1407 wr™e_šq_aùiv™y_ý ý ; 1409 ià( `ssÿnf ( Ýt ,"%4u:%4u", & wšdow , & š‹rv® ) != 2) { 1410 `´štf ("Invalid‡rgument format\n"); 1411 `ex™ (1); 1414 rq . ogf = OGF_HOST_CTL ; 1415 rq . ocf = OCF_WRITE_INQ_ACTIVITY ; 1416 rq . ý¬am = & ý ; 1417 rq . þ’ = WRITE_INQ_ACTIVITY_CP_SIZE ; 1419 ý . wšdow = `htobs (( ušt16_t ) window); 1420 ý . š‹rv® = `htobs (( ušt16_t ) interval); 1422 ià( wšdow < 0x12 || window > 0x1000) 1423 `´štf ("Warning: inquiry window out of„ange!\n"); 1425 ià( š‹rv® < 0x12 || interval > 0x1000) 1426 `´štf ("Warning: inquiry interval out of„ange!\n"); 1428 ià( `hci_£nd_»q ( s , & rq , 2000) < 0) { 1429 `årštf ( ¡d”r , "Can't set inquiry…arameters‚ame on hci%d: %s (%d)\n", 1430 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1431 `ex™ (1); 1434 ušt16_t wšdow , š‹rv® ; 1435 »ad_šq_aùiv™y_½ ½ ; 1437 rq . ogf = OGF_HOST_CTL ; 1438 rq . ocf = OCF_READ_INQ_ACTIVITY ; 1439 rq . ½¬am = & ½ ; 1440 rq . ¾’ = READ_INQ_ACTIVITY_RP_SIZE ; 1442 ià( `hci_£nd_»q ( s , & rq , 1000) < 0) { 1443 `årštf ( ¡d”r , "Can't„ead inquiry…arameters on hci%d: %s (%d)\n", 1444 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1445 `ex™ (1); 1447 ià( ½ . ¡©us ) { 1448 `´štf ("Read inquiry…arameters on hci%d„eturned status %d\n", 1449 hdev , ½ . ¡©us ); 1450 `ex™ (1); 1452 `´št_dev_hdr (& di ); 1454 wšdow = `btohs ( ½ .window); 1455 š‹rv® = `btohs ( ½ .interval); 1456 `´štf ("\tInquiry interval: %u slots (%.2f ms), window: %u slots (%.2f ms)\n", 1457 š‹rv® , ()š‹rv® * 0.625, wšdow , ()window * 0.625); 1459 } } 1461  $cmd_·ge_·rms ( ùl ,  hdev , * Ýt ) 1463  hci_»que¡ rq ; 1464  s ; 1466 ià(( s = `hci_Ý’_dev ( hdev )) < 0) { 1467 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1468 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1469 `ex™ (1); 1472 `mem£t (& rq , 0, (rq)); 1474 ià( Ýt ) { 1475  wšdow , š‹rv® ; 1476 wr™e_·ge_aùiv™y_ý ý ; 1478 ià( `ssÿnf ( Ýt ,"%4u:%4u", & wšdow , & š‹rv® ) != 2) { 1479 `´štf ("Invalid‡rgument format\n"); 1480 `ex™ (1); 1483 rq . ogf = OGF_HOST_CTL ; 1484 rq . ocf = OCF_WRITE_PAGE_ACTIVITY ; 1485 rq . ý¬am = & ý ; 1486 rq . þ’ = WRITE_PAGE_ACTIVITY_CP_SIZE ; 1488 ý . wšdow = `htobs (( ušt16_t ) window); 1489 ý . š‹rv® = `htobs (( ušt16_t ) interval); 1491 ià( wšdow < 0x12 || window > 0x1000) 1492 `´štf ("Warning:…age window out of„ange!\n"); 1494 ià( š‹rv® < 0x12 || interval > 0x1000) 1495 `´štf ("Warning:…age interval out of„ange!\n"); 1497 ià( `hci_£nd_»q ( s , & rq , 2000) < 0) { 1498 `årštf ( ¡d”r , "Can't set…age…arameters‚ame on hci%d: %s (%d)\n", 1499 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1500 `ex™ (1); 1503 ušt16_t wšdow , š‹rv® ; 1504 »ad_·ge_aùiv™y_½ ½ ; 1506 rq . ogf = OGF_HOST_CTL ; 1507 rq . ocf = OCF_READ_PAGE_ACTIVITY ; 1508 rq . ½¬am = & ½ ; 1509 rq . ¾’ = READ_PAGE_ACTIVITY_RP_SIZE ; 1511 ià( `hci_£nd_»q ( s , & rq , 1000) < 0) { 1512 `årštf ( ¡d”r , "Can't„ead…age…arameters on hci%d: %s (%d)\n", 1513 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1514 `ex™ (1); 1516 ià( ½ . ¡©us ) { 1517 `´štf ("Read…age…arameters on hci%d„eturned status %d\n", 1518 hdev , ½ . ¡©us ); 1519 `ex™ (1); 1521 `´št_dev_hdr (& di ); 1523 wšdow = `btohs ( ½ .window); 1524 š‹rv® = `btohs ( ½ .interval); 1525 `´štf ("\tPage interval: %u slots (%.2f ms), " 1527 š‹rv® , ()interval * 0.625, 1528 wšdow , ()window * 0.625); 1530 } } 1532  $cmd_·ge_to ( ùl ,  hdev , * Ýt ) 1534  hci_»que¡ rq ; 1535  s ; 1537 ià(( s = `hci_Ý’_dev ( hdev )) < 0) { 1538 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1539 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1540 `ex™ (1); 1543 `mem£t (& rq , 0, (rq)); 1545 ià( Ýt ) { 1546  timeout ; 1547 wr™e_·ge_timeout_ý ý ; 1549 ià( `ssÿnf ( Ýt ,"%5u", & timeout ) != 1) { 1550 `´štf ("Invalid‡rgument format\n"); 1551 `ex™ (1); 1554 rq . ogf = OGF_HOST_CTL ; 1555 rq . ocf = OCF_WRITE_PAGE_TIMEOUT ; 1556 rq . ý¬am = & ý ; 1557 rq . þ’ = WRITE_PAGE_TIMEOUT_CP_SIZE ; 1559 ý . timeout = `htobs (( ušt16_t )imeout); 1561 ià( timeout < 0x01 ||imeout > 0xFFFF) 1562 `´štf ("Warning:…ageimeout out of„ange!\n"); 1564 ià( `hci_£nd_»q ( s , & rq , 2000) < 0) { 1565 `årštf ( ¡d”r , "Can't set…ageimeout on hci%d: %s (%d)\n", 1566 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1567 `ex™ (1); 1570 ušt16_t timeout ; 1571 »ad_·ge_timeout_½ ½ ; 1573 rq . ogf = OGF_HOST_CTL ; 1574 rq . ocf = OCF_READ_PAGE_TIMEOUT ; 1575 rq . ½¬am = & ½ ; 1576 rq . ¾’ = READ_PAGE_TIMEOUT_RP_SIZE ; 1578 ià( `hci_£nd_»q ( s , & rq , 1000) < 0) { 1579 `årštf ( ¡d”r , "Can't„ead…ageimeout on hci%d: %s (%d)\n", 1580 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1581 `ex™ (1); 1583 ià( ½ . ¡©us ) { 1584 `´štf ("Read…ageimeout on hci%d„eturned status %d\n", 1585 hdev , ½ . ¡©us ); 1586 `ex™ (1); 1588 `´št_dev_hdr (& di ); 1590 timeout = `btohs ( ½ .timeout); 1591 `´štf ("\tPageimeout: %u slots (%.2f ms)\n", 1592 timeout , ()timeout * 0.625); 1594 } } 1596  $cmd_afh_mode ( ùl ,  hdev , * Ýt ) 1598  dd ; 1600 dd = `hci_Ý’_dev ( hdev ); 1601 ià( dd < 0) { 1602 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1603 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1604 `ex™ (1); 1607 ià( Ýt ) { 1608 ušt8_t mode = `©oi ( Ýt ); 1610 ià( `hci_wr™e_afh_mode ( dd , mode , 2000) < 0) { 1611 `årštf ( ¡d”r , "Can't set AFH mode on hci%d: %s (%d)\n", 1612 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1613 `ex™ (1); 1616 ušt8_t mode ; 1618 ià( `hci_»ad_afh_mode ( dd , & mode , 1000) < 0) { 1619 `årštf ( ¡d”r , "Can't„ead AFH mode on hci%d: %s (%d)\n", 1620 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1621 `ex™ (1); 1624 `´št_dev_hdr (& di ); 1625 `´štf ("\tAFH mode: %s\n", mode == 1 ? "Enabled" : "Disabled"); 1627 } } 1629  $cmd_s¥_mode ( ùl ,  hdev , * Ýt ) 1631  dd ; 1633 dd = `hci_Ý’_dev ( hdev ); 1634 ià( dd < 0) { 1635 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1636 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1637 `ex™ (1); 1640 ià( Ýt ) { 1641 ušt8_t mode = `©oi ( Ýt ); 1643 ià( `hci_wr™e_sim¶e_·œšg_mode ( dd , mode , 2000) < 0) { 1644 `årštf ( ¡d”r , "Can't set Simple Pairing mode on hci%d: %s (%d)\n", 1645 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1646 `ex™ (1); 1649 ušt8_t mode ; 1651 ià( `hci_»ad_sim¶e_·œšg_mode ( dd , & mode , 1000) < 0) { 1652 `årštf ( ¡d”r , "Can't„ead Simple Pairing mode on hci%d: %s (%d)\n", 1653 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1654 `ex™ (1); 1657 `´št_dev_hdr (& di ); 1658 `´štf ("\tSimple Pairing mode: %s\n", 1659 mode == 1 ? "Enabled" : "Disabled"); 1661 } } 1663  $´št_»v_”icssÚ ( dd ) 1665  hci_»que¡ rq ; 1666  buf [102]; 1668 `mem£t (& rq , 0, (rq)); 1669 rq . ogf = OGF_VENDOR_CMD ; 1670 rq . ocf = 0x000f; 1671 rq . ý¬am = NULL ; 1672 rq . þ’ = 0; 1673 rq . ½¬am = & buf ; 1674 rq . ¾’ = ( buf ); 1676 ià( `hci_£nd_»q ( dd , & rq , 1000) < 0) { 1677 `´štf ("\nCan't„ead„evision info: %s (%d)\n", 1678 `¡»¼Ü ( ”ºo ),ƒrrno); 1682 `´štf ("\t%s\n", buf + 1); 1683 } } 1685  $´št_»v_c¤ ( dd , ušt16_t »v ) 1687 ušt16_t buždid , chv” , ch»v , maxkeyËn , m­sco ; 1689 ià( `c¤_»ad_v¬id_ušt16 ( dd , 0, CSR_VARID_BUILDID , & buždid ) < 0) { 1690 `´štf ("\t%s\n", `c¤_buždidto¡r ( »v )); 1694 `´štf ("\t%s\n", `c¤_buždidto¡r ( buždid )); 1696 ià(! `c¤_»ad_v¬id_ušt16 ( dd , 1, CSR_VARID_CHIPVER , & chv” )) { 1697 ià( `c¤_»ad_v¬id_ušt16 ( dd , 2, CSR_VARID_CHIPREV , & ch»v ) < 0) 1698 ch»v = 0; 1699 `´štf ("\tCh v”siÚ: %s\n", `c¤_chv”to¡r ( chv” , ch»v )); 1702 ià(! `c¤_»ad_v¬id_ušt16 ( dd , 3, CSR_VARID_MAX_CRYPT_KEY_LENGTH , & maxkeyËn )) 1703 `´štf ("\tMax key size: %d b™\n", maxkeyËn * 8); 1705 ià(! `c¤_»ad_pskey_ušt16 ( dd , 4, CSR_PSKEY_HOSTIO_MAP_SCO_PCM , 0x0000, & m­sco )) 1706 `´štf ("\tSCO m­pšg: %s\n", m­sco ? "PCM" : "HCI"); 1707 } } 1709  $´št_»v_digŸnsw” ( dd ) 1711  hci_»que¡ rq ; 1712  »q [] = { 0x07 }; 1713  buf [102]; 1715 `mem£t (& rq , 0, (rq)); 1716 rq . ogf = OGF_VENDOR_CMD ; 1717 rq . ocf = 0x000e; 1718 rq . ý¬am = »q ; 1719 rq . þ’ = ( »q ); 1720 rq . ½¬am = & buf ; 1721 rq . ¾’ = ( buf ); 1723 ià( `hci_£nd_»q ( dd , & rq , 1000) < 0) { 1724 `´štf ("\nCan't„ead„evision info: %s (%d)\n", 1725 `¡»¼Ü ( ”ºo ),ƒrrno); 1729 `´štf ("\t%s\n", buf + 1); 1730 } } 1732  $´št_»v_brßdcom ( ušt16_t hci_»v , ušt16_ˆ lmp_subv” ) 1734 `´štf ("\tFirmware %d.%d / %d\n", 1735 hci_»v & 0xff, lmp_subv” >> 8,†mp_subver & 0xff); 1736 } } 1738  $´št_»v_avm ( ušt16_t hci_»v , ušt16_ˆ lmp_subv” ) 1740 ià( lmp_subv” == 0x01) 1741 `´štf ("\tFœmw¬03.%d.%d\n", hci_»v >> 8, hci_rev & 0xff); 1743 `´štf ("\tUnknownype\n"); 1744 } } 1746  $cmd_»visiÚ ( ùl ,  hdev , * Ýt ) 1748  hci_v”siÚ v” ; 1749  dd ; 1751 dd = `hci_Ý’_dev ( hdev ); 1752 ià( dd < 0) { 1753 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1754 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1758 ià( `hci_»ad_loÿl_v”siÚ ( dd , & v” , 1000) < 0) { 1759 `årštf ( ¡d”r , "Can't„ead version info for hci%d: %s (%d)\n", 1760 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1764 `´št_dev_hdr (& di ); 1765  v” . mªuçùu»r ) { 1769 `´št_»v_”icssÚ ( dd ); 1772 `´št_»v_c¤ ( dd , v” . hci_»v ); 1775 `´št_»v_digŸnsw” ( dd ); 1778 `´št_»v_brßdcom ( v” . hci_»v , v”. lmp_subv” ); 1781 `´št_»v_avm ( v” . hci_»v , v”. lmp_subv” ); 1784 `´štf ("\tUnsupported manufacturer\n"); 1788 } } 1790  $cmd_block ( ùl ,  hdev , * Ýt ) 1792 bdaddr_t bdaddr ; 1793  dd ; 1795 ià(! Ýt ) 1798 dd = `hci_Ý’_dev ( hdev ); 1799 ià( dd < 0) { 1800 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1801 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1802 `ex™ (1); 1805 `¡r2ba ( Ýt , & bdaddr ); 1807 ià( `ioùl ( dd , HCIBLOCKADDR , & bdaddr ) < 0) { 1808 `³¼Ü ("ioctl(HCIBLOCKADDR)"); 1809 `ex™ (1); 1812 `hci_þo£_dev ( dd ); 1813 } } 1815  $cmd_unblock ( ùl ,  hdev , * Ýt ) 1817 bdaddr_t bdaddr ; 1818  dd ; 1820 ià(! Ýt ) 1823 dd = `hci_Ý’_dev ( hdev ); 1824 ià( dd < 0) { 1825 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 1826 hdev , `¡»¼Ü ( ”ºo ),ƒrrno); 1827 `ex™ (1); 1830 ià(! `¡rÿ£cmp ( Ýt , "all")) 1831 `baýy (& bdaddr , BDADDR_ANY ); 1833 `¡r2ba ( Ýt , & bdaddr ); 1835 ià( `ioùl ( dd , HCIUNBLOCKADDR , & bdaddr ) < 0) { 1836 `³¼Ü ("ioctl(HCIUNBLOCKADDR)"); 1837 `ex™ (1); 1840 `hci_þo£_dev ( dd ); 1841 } } 1843  $´št_dev_hdr ( hci_dev_šfo * di ) 1845  hdr = -1; 1846  addr [18]; 1848 ià( hdr =ð di -> dev_id ) 1850 hdr = di -> dev_id ; 1852 `ba2¡r (& di -> bdaddr , addr ); 1854 `´štf ("%s:\tTy³: %  Bus: %s\n", di -> Çme , 1855 `hci_ty³to¡r (( di -> ty³ & 0x30) >> 4), 1856 `hci_bu¡o¡r ( di -> ty³ & 0x0f)); 1857 `´štf ("\tBD Address: %s ACL MTU: %d:%d SCO MTU: %d:%d\n", 1858 addr , di -> aþ_mtu , di-> aþ_pkts , 1859 di -> sco_mtu , di-> sco_pkts ); 1860 } } 1862  $´št_dev_šfo ( ùl ,  hci_dev_šfo * di ) 1864  hci_dev_¡©s * ¡ = & di -> ¡© ; 1865 * ¡r ; 1867 `´št_dev_hdr ( di ); 1869 ¡r = `hci_dæag¡o¡r ( di -> æags ); 1870 `´štf ("\t%s\n", ¡r ); 1871 `bt_ä“ ( ¡r ); 1873 `´štf ("\tRX bytes:%d‡cl:%d sco:%dƒvents:%dƒrrors:%d\n", 1874 ¡ -> by‹_rx , st-> aþ_rx , st-> sco_rx , st-> evt_rx , st-> ”r_rx ); 1876 `´štf ("\tTX bytes:%d‡cl:%d sco:%d commands:%dƒrrors:%d\n", 1877 ¡ -> by‹_tx , st-> aþ_tx , st-> sco_tx , st-> cmd_tx , st-> ”r_tx ); 1879 ià( ®l && ! `hci_‹¡_b™ ( HCI_RAW , & di -> æags )) { 1880 `´št_dev_ã©u»s ( di , 0); 1882 ià((( di -> ty³ & 0x30è>> 4è=ð HCI_BREDR ) { 1883 `´št_pkt_ty³ ( di ); 1884 `´št_lšk_pÞicy ( di ); 1885 `´št_lšk_mode ( di ); 1887 ià( `hci_‹¡_b™ ( HCI_UP , & di -> æags )) { 1888 `cmd_Çme ( ùl , di -> dev_id , NULL ); 1889 `cmd_þass ( ùl , di -> dev_id , NULL ); 1893 ià( `hci_‹¡_b™ ( HCI_UP , & di -> æags )) 1894 `cmd_v”siÚ ( ùl , di -> dev_id , NULL ); 1897 `´štf ("\n"); 1898 } } 1901 * mcmd ; 1902 (* mfunc )( mùl ,  mhdev , * mÝt ); 1903 * mÝt ; 1904 * mdoc ; 1905 } gcommªd [] = { 1906 { "up", cmd_up , 0, "Open‡nd initialize HCI device" }, 1907 { "down", cmd_down , 0, "Close HCI device" }, 1908 { "»£t", cmd_»£t , 0, "Reset HCI device" }, 1909 { "r¡©", cmd_r¡© , 0, "Reset statistic counters" }, 1910 { "auth", cmd_auth , 0, "Enable Authentication" }, 1911 { "nßuth", cmd_auth , 0, "Disable Authentication" }, 1912 { "’üy±", cmd_’üy± , 0, "Enable Encryption" }, 1913 { "nÛnüy±", cmd_’üy± , 0, "Disable Encryption" }, 1914 { "pisÿn", cmd_sÿn , 0, "Enable Page‡nd Inquiry scan" }, 1915 { "nosÿn", cmd_sÿn , 0, "Disable scan" }, 1916 { "isÿn", cmd_sÿn , 0, "Enable Inquiry scan" }, 1917 { "psÿn", cmd_sÿn , 0, "Enable Page scan" }, 1918 { "±y³", cmd_±y³ , "[type]", "Get/Set default…acketype" }, 1919 { "lm", cmd_lm , "[mode]", "Get/Set default†ink mode" }, 1920 { "Í", cmd_Í , "[policy]", "Get/Set default†ink…olicy" }, 1921 { "Çme", cmd_Çme , "[name]", "Get/Set†ocal‚ame" }, 1922 { "þass", cmd_þass , "[class]", "Get/Set class of device" }, 1923 { "voiû", cmd_voiû , "[voice]", "Get/Set voice setting" }, 1924 { "Ÿc", cmd_Ÿc , "[iac]", "Get/Set inquiry‡ccess code" }, 1925 { "šql", cmd_šq_l , "[level]", "Get/Set inquiryransmit…ower†evel" }, 1926 { "šqmode", cmd_šq_mode , "[mode]", "Get/Set inquiry mode" }, 1927 { "šqd©a", cmd_šq_d©a , "[data]", "Get/Set inquiry data" }, 1928 { "šqty³", cmd_šq_ty³ , "[type]", "Get/Set inquiry scanype" }, 1929 { "šq·rms", cmd_šq_·rms , "[win:int]", "Get/Set inquiry scan window‡nd interval" }, 1930 { "·g•¬ms", cmd_·ge_·rms , "[win:int]", "Get/Set…age scan window‡nd interval" }, 1931 { "·g‘o", cmd_·ge_to , "[to]", "Get/Set…ageimeout" }, 1932 { "afhmode", cmd_afh_mode , "[mode]", "Get/Set AFH mode" }, 1933 { "s¥mode", cmd_s¥_mode , "[mode]", "Get/Set Simple Pairing Mode" }, 1934 { "aþmtu", cmd_aþmtu , "", "Set ACL MTU‡nd‚umber of…ackets" }, 1935 { "scomtu", cmd_scomtu , "", "Set SCO MTU‡nd‚umber of…ackets" }, 1936 { "d–key", cmd_d–key , "", "Delete†ink key fromhe device" }, 1937 { "oobd©a", cmd_oob_d©a , 0, "Get†ocal OOB data" }, 1938 { "commªds", cmd_commªds , 0, "Display supported commands" }, 1939 { "ã©u»s", cmd_ã©u»s , 0, "Display device features" }, 1940 { "v”siÚ", cmd_v”siÚ , 0, "Display version information" }, 1941 { "»visiÚ", cmd_»visiÚ , 0, "Display„evision information" }, 1942 { "block", cmd_block , "", "Add‡ deviceohe blacklist" }, 1943 { "unblock", cmd_unblock , "", "Remove‡ device fromhe blacklist" }, 1944 { "Ë¿ndaddr", cmd_Ë_addr , "", "Set LE Random Address" }, 1945 { "Ëadv", cmd_Ë_adv , "[type]", "Enable LE‡dvertising" 1948 { "nÞ—dv", cmd_no_Ë_adv , 0, "Disable LE‡dvertising" }, 1949 { "Ë¡©es", cmd_Ë_¡©es , 0, "Displayhe supported LE states" }, 1950 { NULL , NULL, 0 } 1953  $u§ge () 1955  i ; 1957 `´štf ("hciconfig - HCI device configuration utility\n"); 1958 `´štf ("Usage:\n" 1961 `´štf ("Commands:\n"); 1962  i = 0; commªd [i]. cmd ; i++) 1963 `´štf ("\t%-10 %-8s\t%s\n", commªd [ i ]. cmd , 1964 commªd [ i ]. Ýt ? command[i].opt : " ", 1965 commªd [ i ]. doc ); 1966 } } 1968  ÝtiÚ gmaš_ÝtiÚs [] = { 1974  $maš ( ¬gc , * ¬gv []) 1976  Ýt , ùl , i , cmd = 0; 1978 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "ah", maš_ÝtiÚs , NULL )) != -1) { 1979  Ýt ) { 1981 ®l = 1; 1986 `u§ge (); 1987 `ex™ (0); 1991 ¬gc -ð Ýtšd ; 1992 ¬gv +ð Ýtšd ; 1993 Ýtšd = 0; 1996 ià(( ùl = `sock‘ ( AF_BLUETOOTH , SOCK_RAW , BTPROTO_HCI )) < 0) { 1997 `³¼Ü ("Can't open HCI socket."); 1998 `ex™ (1); 2001 ià( ¬gc < 1) { 2002 `´št_dev_li¡ ( ùl , 0); 2003 `ex™ (0); 2006 di . dev_id = `©oi ( ¬gv [0] + 3); 2007 ¬gc --; ¬gv ++; 2009 ià( `ioùl ( ùl , HCIGETDEVINFO , (*è& di )) { 2010 `³¼Ü ("Can't get device info"); 2011 `ex™ (1); 2014  ¬gc > 0) { 2015  i = 0; commªd [i]. cmd ; i++) { 2016 ià( `¡ºcmp ( commªd [ i ]. cmd , 2017 * ¬gv , `¡¾’ ( commªd [ i ]. cmd ))) 2020 ià( commªd [ i ]. Ýt ) { 2021 ¬gc --; ¬gv ++; 2024 commªd [ i ]. `func ( ùl , di . dev_id , * ¬gv ); 2025 cmd = 1; 2029 ià( commªd [ i ]. cmd == 0) 2030 `årštf ( ¡d”r , "Warning: unknown command - \"%s\"\n", 2031 * ¬gv ); 2033 ¬gc --; ¬gv ++; 2036 ià(! cmd ) 2037 `´št_dev_šfo ( ùl , & di ); 2039 `þo£ ( ùl ); 2041 } } @tools/hcidump.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 35  ~ 36  ~ 37  ~ 38  ~ 39  ~ 40  ~ 42  ~"·r£r/·r£r.h " 43  ~"·r£r/sdp.h " 45  ~"lib/hci.h " 46  ~"lib/hci_lib.h " 48  #SNAP_LEN HCI_MAX_FRAME_SIZE ) 52 mPARSE , 53 mREAD , 54 mWRITE , 55 mPPPDUMP , 56 mAUDIO 60  g¢­_Ën = SNAP_LEN ; 61  gmode = PARSE ; 62 * gdump_fže = NULL ; 63 * gµpdump_fže = NULL ; 64 * gaudio_fže = NULL ; 66  shcidump_hdr { 67 ušt16_t mËn ; 68 ušt8_t mš ; 69 ušt8_t m·d ; 70 ušt32_t mts_£c ; 71 ušt32_t mts_u£c ; 72 } __©Œibu‹__ (( ·cked )); 73  #HCIDUMP_HDR_SIZE (( hcidump_hdr )) ) 75  sbt¢oÝ_hdr { 76 ušt8_t mid [8]; 77 ušt32_t mv”siÚ ; 78 ušt32_t mty³ ; 79 } __©Œibu‹__ (( ·cked )); 80  #BTSNOOP_HDR_SIZE (( bt¢oÝ_hdr )) ) 82  sbt¢oÝ_pkt { 83 ušt32_t msize ; 84 ušt32_t mËn ; 85 ušt32_t mæags ; 86 ušt32_t mdrÝs ; 87 ušt64_t mts ; 88 ušt8_t md©a [0]; 89 } __©Œibu‹__ (( ·cked )); 90  #BTSNOOP_PKT_SIZE (( bt¢oÝ_pkt )) ) 92  ušt8_t gbt¢oÝ_id [] = { 0x62, 0x74, 0x73, 0x6e, 0x6f, 0x6f, 0x70, 0x00 }; 94  ušt32_t gbt¢oÝ_v”siÚ = 0; 95  ušt32_t gbt¢oÝ_ty³ = 0; 97  spkŽog_hdr { 98 ušt32_t mËn ; 99 ušt64_t mts ; 100 ušt8_t mty³ ; 101 } __©Œibu‹__ (( ·cked )); 102  #PKTLOG_HDR_SIZE (( pkŽog_hdr )) ) 104  šlše  $»ad_n ( fd , * buf ,  Ën ) 106  t = 0, w ; 108  Ën > 0) { 109 ià(( w = `»ad ( fd , buf , Ën )) < 0) { 110 ià( ”ºo =ð EINTR ||ƒ¼nØ=ð EAGAIN ) 114 ià(! w ) 116 Ën -ð w ; buf +ðw; t += w; 118  t ; 119 } } 121  šlše  $wr™e_n ( fd , * buf ,  Ën ) 123  t = 0, w ; 125  Ën > 0) { 126 ià(( w = `wr™e ( fd , buf , Ën )) < 0) { 127 ià( ”ºo =ð EINTR ||ƒ¼nØ=ð EAGAIN ) 131 ià(! w ) 133 Ën -ð w ; buf +ðw; t += w; 135  t ; 136 } } 138  $´oûss_äames ( dev ,  sock ,  fd ,  æags ) 140  cmsghdr * cmsg ; 141  msghdr msg ; 142  iovec iv ; 143  hcidump_hdr * dh ; 144  bt¢oÝ_pkt * dp ; 145  äame äm ; 146  pÞlfd fds [2]; 147  nfds = 0; 148 * buf , * ù¾ ; 149  Ën , hdr_size = HCIDUMP_HDR_SIZE ; 151 ià( sock < 0) 154 ià( ¢­_Ën < SNAP_LEN ) 155 ¢­_Ën = SNAP_LEN ; 157 ià( æags & DUMP_BTSNOOP ) 158 hdr_size = BTSNOOP_PKT_SIZE ; 160 buf = `m®loc ( ¢­_Ën + hdr_size ); 161 ià(! buf ) { 162 `³¼Ü ("Can't‡llocate data buffer"); 166 dh = (*è buf ; 167 dp = (*è buf ; 168 äm . d©a = buf + hdr_size ; 170 ù¾ = `m®loc (100); 171 ià(! ù¾ ) { 172 `ä“ ( buf ); 173 `³¼Ü ("Can't‡llocate control buffer"); 177 ià( dev =ð HCI_DEV_NONE ) 178 `´štf ("system: "); 180 `´štf ("deviû: hci%d ", dev ); 182 `´štf ("¢­_Ën: %d fž‹r: 0x%lx\n", ¢­_Ën , ·r£r . fž‹r ); 184 `mem£t (& msg , 0, (msg)); 186 fds [ nfds ]. fd = sock ; 187 fds [ nfds ]. ev’ts = POLLIN ; 188 fds [ nfds ]. »v’ts = 0; 189 nfds ++; 192  i , n = `pÞl ( fds , nfds , -1); 193 ià( n <= 0) 196  i = 0; i < nfds ; i++) { 197 ià( fds [ i ]. »v’ts & ( POLLHUP | POLLERR | POLLNVAL )) { 198 ià( fds [ i ]. fd =ð sock ) 199 `´štf ("device: disconnected\n"); 201 `´štf ("client: disconnect\n"); 206 iv . iov_ba£ = äm . d©a ; 207 iv . iov_Ën = ¢­_Ën ; 209 msg . msg_iov = & iv ; 210 msg . msg_iovËn = 1; 211 msg . msg_cÚŒÞ = ù¾ ; 212 msg . msg_cÚŒÞËn = 100; 214 Ën = `»cvmsg ( sock , & msg , MSG_DONTWAIT ); 215 ià( Ën < 0) { 216 ià( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINTR ) 218 `³¼Ü ("Receive failed"); 223 äm . d©a_Ën = Ën ; 224 äm . dev_id = dev ; 225 äm . š = 0; 226 äm . µpdump_fd = ·r£r .pppdump_fd; 227 äm . audio_fd = ·r£r .audio_fd; 229 cmsg = `CMSG_FIRSTHDR (& msg ); 230  cmsg ) { 231  dœ ; 232  cmsg -> cmsg_ty³ ) { 233  HCI_CMSG_DIR : 234 `memýy (& dœ , `CMSG_DATA ( cmsg ), ()); 235 äm . š = ( ušt8_t è dœ ; 237  HCI_CMSG_TSTAMP : 238 `memýy (& äm . ts , `CMSG_DATA ( cmsg ), 239 ( timev® )); 242 cmsg = `CMSG_NXTHDR (& msg , cmsg); 245 äm . ±r = frm. d©a ; 246 äm . Ën = frm. d©a_Ën ; 248  mode ) { 249  WRITE : 251 ià( æags & DUMP_BTSNOOP ) { 252 ušt64_t ts ; 253 ušt8_t pkt_ty³ = ((ušt8_ˆ*è äm . d©a )[0]; 254 dp -> size = `htobe32 ( äm . d©a_Ën ); 255 dp -> Ën = dp-> size ; 256 dp -> æags = `be32toh ( äm . š & 0x01); 257 dp -> drÝs = 0; 258 ts = ( äm .ts. tv_£c - 946684800Îè* 1000000Î + frm.ts. tv_u£c ; 259 dp -> ts = `htobe64 (ts + 0x00E03AB44A676000ll); 260 ià( pkt_ty³ =ð HCI_COMMAND_PKT || 261 pkt_ty³ =ð HCI_EVENT_PKT ) 262 dp -> æags |ð `be32toh (0x02); 264 dh -> Ën = `htobs ( äm . d©a_Ën ); 265 dh -> š = äm .in; 266 dh -> ts_£c = `htobl ( äm . ts . tv_£c ); 267 dh -> ts_u£c = `htobl ( äm . ts . tv_u£c ); 270 ià( `wr™e_n ( fd , buf , äm . d©a_Ën + hdr_size ) < 0) { 271 `³¼Ü ("Writeƒrror"); 278 `·r£ (& äm ); 284 } } 286  $»ad_dump ( fd ) 288  hcidump_hdr dh ; 289  bt¢oÝ_pkt dp ; 290  pkŽog_hdr ph ; 291  äame äm ; 292  ”r ; 294 äm . d©a = `m®loc ( HCI_MAX_FRAME_SIZE ); 295 ià(! äm . d©a ) { 296 `³¼Ü ("Can't‡llocate data buffer"); 297 `ex™ (1); 301 ià( ·r£r . æags & DUMP_PKTLOG ) 302 ”r = `»ad_n ( fd , (*è& ph , PKTLOG_HDR_SIZE ); 303 ià( ·r£r . æags & DUMP_BTSNOOP ) 304 ”r = `»ad_n ( fd , (*è& dp , BTSNOOP_PKT_SIZE ); 306 ”r = `»ad_n ( fd , (*è& dh , HCIDUMP_HDR_SIZE ); 308 ià( ”r < 0) 309  çžed ; 310 ià(! ”r ) 311  dÚe ; 313 ià( ·r£r . æags & DUMP_PKTLOG ) { 314  ph . ty³ ) { 316 (( ušt8_t *è äm . d©a )[0] = HCI_COMMAND_PKT ; 317 äm . š = 0; 320 (( ušt8_t *è äm . d©a )[0] = HCI_EVENT_PKT ; 321 äm . š = 1; 324 (( ušt8_t *è äm . d©a )[0] = HCI_ACLDATA_PKT ; 325 äm . š = 0; 328 (( ušt8_t *è äm . d©a )[0] = HCI_ACLDATA_PKT ; 329 äm . š = 1; 332 `l£ek ( fd , `be32toh ( ph . Ën è- 9, SEEK_CUR ); 336 äm . d©a_Ën = `be32toh ( ph . Ën ) - 8; 337 ”r = `»ad_n ( fd , äm . d©a + 1, frm. d©a_Ën - 1); 338 } ià( ·r£r . æags & DUMP_BTSNOOP ) { 339 ušt32_t Ýcode ; 340 ušt8_t pkt_ty³ ; 342  bt¢oÝ_ty³ ) { 344 ià( `be32toh ( dp . æags ) & 0x02) { 345 ià( `be32toh ( dp . æags ) & 0x01) 346 pkt_ty³ = HCI_EVENT_PKT ; 348 pkt_ty³ = HCI_COMMAND_PKT ; 350 pkt_ty³ = HCI_ACLDATA_PKT ; 352 (( ušt8_t *è äm . d©a )[0] = pkt_ty³ ; 354 äm . d©a_Ën = `be32toh ( dp . Ën ) + 1; 355 ”r = `»ad_n ( fd , äm . d©a + 1, frm. d©a_Ën - 1); 359 äm . d©a_Ën = `be32toh ( dp . Ën ); 360 ”r = `»ad_n ( fd , äm . d©a , frm. d©a_Ën ); 364 Ýcode = `be32toh ( dp . æags ) & 0xffff; 366  Ýcode ) { 368 pkt_ty³ = HCI_COMMAND_PKT ; 369 äm . š = 0; 372 pkt_ty³ = HCI_EVENT_PKT ; 373 äm . š = 1; 376 pkt_ty³ = HCI_ACLDATA_PKT ; 377 äm . š = 0; 380 pkt_ty³ = HCI_ACLDATA_PKT ; 381 äm . š = 1; 384 pkt_ty³ = HCI_SCODATA_PKT ; 385 äm . š = 0; 388 pkt_ty³ = HCI_SCODATA_PKT ; 389 äm . š = 1; 392 pkt_ty³ = 0xff; 396 (( ušt8_t *è äm . d©a )[0] = pkt_ty³ ; 398 äm . d©a_Ën = `be32toh ( dp . Ën ) + 1; 399 ”r = `»ad_n ( fd , äm . d©a + 1, frm. d©a_Ën - 1); 402 äm . d©a_Ën = `btohs ( dh . Ën ); 403 ”r = `»ad_n ( fd , äm . d©a , frm. d©a_Ën ); 406 ià( ”r < 0) 407  çžed ; 408 ià(! ”r ) 409  dÚe ; 411 äm . ±r = frm. d©a ; 412 äm . Ën = frm. d©a_Ën ; 414 ià( ·r£r . æags & DUMP_PKTLOG ) { 415 ušt64_t ts ; 416 ts = `be64toh ( ph .ts); 417 äm . ts . tv_£c =s >> 32; 418 äm . ts . tv_u£c =s & 0xffffffff; 419 } ià( ·r£r . æags & DUMP_BTSNOOP ) { 420 ušt64_t ts ; 421 äm . š = `be32toh ( dp . æags ) & 0x01; 422 ts = `be64toh ( dp .ts) - 0x00E03AB44A676000ll; 423 äm . ts . tv_£c = (ts / 1000000ll) + 946684800ll; 424 äm . ts . tv_u£c =s % 1000000ll; 426 äm . š = dh .in; 427 äm . ts . tv_£c = `btohl ( dh . ts_£c ); 428 äm . ts . tv_u£c = `btohl ( dh . ts_u£c ); 431 `·r£ (& äm ); 434 dÚe : 435 `ä“ ( äm . d©a ); 438 çžed : 439 `³¼Ü ("Read failed"); 440 `ä“ ( äm . d©a ); 441 `ex™ (1); 442 } } 444  $Ý’_fže (* fže ,  mode ,  æags ) 446  buf [ BTSNOOP_HDR_SIZE ]; 447  bt¢oÝ_hdr * hdr = (bt¢oÝ_hd¸*è buf ; 448  fd , Ën , Ý’_æags ; 450 ià( mode =ð WRITE || mod=ð PPPDUMP || mod=ð AUDIO ) 451 Ý’_æags = O_WRONLY | O_CREAT | O_TRUNC ; 453 Ý’_æags = O_RDONLY ; 455 fd = `Ý’ ( fže , Ý’_æags , S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ); 456 ià( fd < 0) { 457 `³¼Ü ("Can't open dump file"); 458 `ex™ (1); 461 ià( mode =ð READ ) { 462 Ën = `»ad ( fd , buf , BTSNOOP_HDR_SIZE ); 463 ià( Ën !ð BTSNOOP_HDR_SIZE ) { 464 `l£ek ( fd , 0, SEEK_SET ); 465  fd ; 468 ià(! `memcmp ( hdr -> id , bt¢oÝ_id , (btsnoop_id))) { 469 ·r£r . æags |ð DUMP_BTSNOOP ; 471 bt¢oÝ_v”siÚ = `be32toh ( hdr -> v”siÚ ); 472 bt¢oÝ_ty³ = `be32toh ( hdr -> ty³ ); 474 `´štf ("btsnoop version: %d datalinkype: %d\n", 475 bt¢oÝ_v”siÚ , bt¢oÝ_ty³ ); 477 ià( bt¢oÝ_v”siÚ != 1) { 478 `årštf ( ¡d”r , "Unsupported BTSnoop version\n"); 479 `ex™ (1); 482 ià( bt¢oÝ_ty³ != 1001 && btsnoop_type != 1002 && 483 bt¢oÝ_ty³ != 2001) { 484 `årštf ( ¡d”r , "Unsupported BTSnoop datalinkype\n"); 485 `ex™ (1); 488 ià( buf [0] == 0x00 && buf[1] == 0x00) { 489 ·r£r . æags |ð DUMP_PKTLOG ; 490 `´štf ("packet†ogger data format\n"); 493 ·r£r . æags &ð~ DUMP_BTSNOOP ; 494 `l£ek ( fd , 0, SEEK_SET ); 495  fd ; 498 ià( æags & DUMP_BTSNOOP ) { 499 bt¢oÝ_v”siÚ = 1; 500 bt¢oÝ_ty³ = 1002; 502 `memýy ( hdr -> id , bt¢oÝ_id , (btsnoop_id)); 503 hdr -> v”siÚ = `htobe32 ( bt¢oÝ_v”siÚ ); 504 hdr -> ty³ = `htobe32 ( bt¢oÝ_ty³ ); 506 `´štf ("btsnoop version: %d datalinkype: %d\n", 507 bt¢oÝ_v”siÚ , bt¢oÝ_ty³ ); 509 Ën = `wr™e ( fd , buf , BTSNOOP_HDR_SIZE ); 510 ià( Ën < 0) { 511 `³¼Ü ("Can't create dump header"); 512 `ex™ (1); 515 ià( Ën !ð BTSNOOP_HDR_SIZE ) { 516 `årštf ( ¡d”r , "Header size mismatch\n"); 517 `ex™ (1); 522  fd ; 523 } } 525  $Ý’_sock‘ ( dev ,  æags ) 527  sockaddr_hci addr ; 528  hci_fž‹r æt ; 529  sk , Ýt ; 532 sk = `sock‘ ( AF_BLUETOOTH , SOCK_RAW , BTPROTO_HCI ); 533 ià( sk < 0) { 534 `³¼Ü ("Can't create„aw socket"); 538 Ýt = 1; 539 ià( `£tsockÝt ( sk , SOL_HCI , HCI_DATA_DIR , & Ýt , (opt)) < 0) { 540 `³¼Ü ("Can'tƒnable data direction info"); 544 Ýt = 1; 545 ià( `£tsockÝt ( sk , SOL_HCI , HCI_TIME_STAMP , & Ýt , (opt)) < 0) { 546 `³¼Ü ("Can'tƒnableime stamp"); 551 `hci_fž‹r_þ—r (& æt ); 552 `hci_fž‹r_®l_±y³s (& æt ); 553 `hci_fž‹r_®l_ev’ts (& æt ); 554 ià( `£tsockÝt ( sk , SOL_HCI , HCI_FILTER , & æt , (flt)) < 0) { 555 `³¼Ü ("Can't set filter"); 560 `mem£t (& addr , 0, (addr)); 561 addr . hci_çmžy = AF_BLUETOOTH ; 562 addr . hci_dev = dev ; 563 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 564 `´štf ("Can't‡ttacho device hci%d. %s(%d)\n", 565 dev , `¡»¼Ü ( ”ºo ),ƒrrno); 569  sk ; 570 } } 573 * mÇme ; 574  mæag ; 575 } gfž‹rs [] = { 576 { "lmp", FILT_LMP }, 577 { "hci", FILT_HCI }, 578 { "sco", FILT_SCO }, 579 { "l2ÿp", FILT_L2CAP }, 580 { "a2mp", FILT_A2MP }, 581 { "rfcomm", FILT_RFCOMM }, 582 { "sdp", FILT_SDP }, 583 { "bÃp", FILT_BNEP }, 584 { "cm", FILT_CMTP }, 585 { "hidp", FILT_HIDP }, 586 { "hüp", FILT_HCRP }, 587 { "©t", FILT_ATT }, 588 { "smp", FILT_SMP }, 589 { "avd", FILT_AVDTP }, 590 { "avùp", FILT_AVCTP }, 591 { "obex", FILT_OBEX }, 592 { "ÿpi", FILT_CAPI }, 593 { "µp", FILT_PPP }, 594 { "§p", FILT_SAP }, 595 { "c¤", FILT_CSR }, 596 { "dga", FILT_DGA }, 600  $·r£_fž‹r ( ¬gc , ** ¬gv ) 602  fž‹r = 0; 603  i , n ; 605  i = 0; i < ¬gc ; i++) { 606  n = 0; fž‹rs [n]. Çme ;‚++) { 607 ià(! `¡rÿ£cmp ( fž‹rs [ n ]. Çme , ¬gv [ i ])) { 608 fž‹r |ð fž‹rs [ n ]. æag ; 614  fž‹r ; 615 } } 617  $u§ge () 619 `´štf ( 644 } } 646  ÝtiÚ gmaš_ÝtiÚs [] = { 671  $maš ( ¬gc , * ¬gv []) 673  æags = 0; 674  fž‹r = 0; 675  deviû = 0; 676  deåsm = 0; 677  defcompid = DEFAULT_COMPID ; 678  Ýt , µpdump_fd = -1, audio_fd = -1; 679 ušt16_t obex_pÜt ; 681 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , 683 maš_ÝtiÚs , NULL )) != -1) { 684  Ýt ) { 686 ià( `¡rÿ£cmp ( Ýrg , "none") && strcasecmp(optarg, "system")) 687 deviû = `©oi ( Ýrg + 3); 689 deviû = HCI_DEV_NONE ; 693 ¢­_Ën = `©oi ( Ýrg ); 697 deåsm = `©oi ( Ýrg ); 701 defcompid = `©oi ( Ýrg ); 705 mode = WRITE ; 706 dump_fže = `¡rdup ( Ýrg ); 710 mode = READ ; 711 dump_fže = `¡rdup ( Ýrg ); 715 æags |ð DUMP_TSTAMP ; 719 æags |ð DUMP_ASCII ; 723 æags |ð DUMP_HEX ; 727 æags |ð DUMP_EXT ; 731 æags |ð DUMP_RAW ; 735 `£t_´Ùo (0, `©oi ( Ýrg ), 0, SDP_UUID_CMTP ); 739 `£t_´Ùo (0, `©oi ( Ýrg ), 0, SDP_UUID_HARDCOPY_CONTROL_CHANNEL ); 743 obex_pÜt = `©oi ( Ýrg ); 744 ià( obex_pÜt > 31) 745 `£t_´Ùo (0, obex_pÜt , 0, SDP_UUID_OBEX ); 747 `£t_´Ùo (0, 0, obex_pÜt , SDP_UUID_OBEX ); 751 `£t_´Ùo (0, 0, `©oi ( Ýrg ), SDP_UUID_LAN_ACCESS_PPP ); 755 `£t_´Ùo (0, 0, `©oi ( Ýrg ), SDP_UUID_SIM_ACCESS ); 759 µpdump_fže = `¡rdup ( Ýrg ); 763 audio_fže = `¡rdup ( Ýrg ); 767 æags |ð DUMP_NOVENDOR ; 771 `´štf ("%s\n", VERSION ); 772 `ex™ (0); 776 `u§ge (); 777 `ex™ (0); 781 ¬gc -ð Ýtšd ; 782 ¬gv +ð Ýtšd ; 783 Ýtšd = 0; 785 `´štf ("HCI snifã¸- Blu‘oÙh…ack‘‡Çlyz” v” %s\n", VERSION ); 787 ià( ¬gc > 0) 788 fž‹r = `·r£_fž‹r ( ¬gc , ¬gv ); 791 ià(! fž‹r ) 792 fž‹r = ~0L; 794 ià( µpdump_fže ) 795 µpdump_fd = `Ý’_fže ( µpdump_fže , PPPDUMP , æags ); 797 ià( audio_fže ) 798 audio_fd = `Ý’_fže ( audio_fže , AUDIO , æags ); 800  mode ) { 801  PARSE : 802 æags |ð DUMP_VERBOSE ; 803 `š™_·r£r ( æags , fž‹r , deåsm , defcompid , 804 µpdump_fd , audio_fd ); 805 `´oûss_äames ( deviû , `Ý’_sock‘ (deviû, æags ), -1, flags); 808  READ : 809 æags |ð DUMP_VERBOSE ; 810 `š™_·r£r ( æags , fž‹r , deåsm , defcompid , 811 µpdump_fd , audio_fd ); 812 `»ad_dump ( `Ý’_fže ( dump_fže , mode , æags )); 815  WRITE : 816 æags |ð DUMP_BTSNOOP ; 817 `´oûss_äames ( deviû , `Ý’_sock‘ (deviû, æags ), 818 `Ý’_fže ( dump_fže , mode , æags ), flags); 823 } } @tools/hcieventmask.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<¡dlib.h > 31  ~ 32  ~ 34  ~ 35  ~ 36  ~ 38  ÝtiÚ gmaš_ÝtiÚs [] = { 43  $maš ( ¬gc , * ¬gv []) 45 ušt8_t ev’ts [8] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00 }; 46  hci_dev_šfo di ; 47  hci_v”siÚ v” ; 48  dd , Ýt , dev = 0; 50 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+i:", maš_ÝtiÚs , NULL )) != -1) { 51  Ýt ) { 53 dev = `hci_devid ( Ýrg ); 54 ià( dev < 0) { 55 `³¼Ü ("Invalid device"); 56 `ex™ (1); 62 dd = `hci_Ý’_dev ( dev ); 63 ià( dd < 0) { 64 `årštf ( ¡d”r , "Can't open device hci%d: %s (%d)\n", 65 dev , `¡»¼Ü ( ”ºo ),ƒrrno); 66 `ex™ (1); 69 ià( `hci_devšfo ( dev , & di ) < 0) { 70 `årštf ( ¡d”r , "Can't get device info for hci%d: %s (%d)\n", 71 dev , `¡»¼Ü ( ”ºo ),ƒrrno); 72 `hci_þo£_dev ( dd ); 73 `ex™ (1); 76 ià( `hci_»ad_loÿl_v”siÚ ( dd , & v” , 1000) < 0) { 77 `årštf ( ¡d”r , "Can't„ead version info for hci%d: %s (%d)\n", 78 dev , `¡»¼Ü ( ”ºo ),ƒrrno); 79 `hci_þo£_dev ( dd ); 80 `ex™ (1); 83 `hci_þo£_dev ( dd ); 85 ià( v” . hci_v” > 1) { 86 ià( di . ã©u»s [5] & LMP_SNIFF_SUBR ) 87 ev’ts [5] |= 0x20; 89 ià( di . ã©u»s [5] & LMP_PAUSE_ENC ) 90 ev’ts [5] |= 0x80; 92 ià( di . ã©u»s [6] & LMP_EXT_INQ ) 93 ev’ts [5] |= 0x40; 95 ià( di . ã©u»s [6] & LMP_NFLUSH_PKTS ) 96 ev’ts [7] |= 0x01; 98 ià( di . ã©u»s [7] & LMP_LSTO ) 99 ev’ts [6] |= 0x80; 101 ià( di . ã©u»s [6] & LMP_SIMPLE_PAIR ) { 102 ev’ts [6] |= 0x01; 103 ev’ts [6] |= 0x02; 104 ev’ts [6] |= 0x04; 105 ev’ts [6] |= 0x08; 106 ev’ts [6] |= 0x10; 107 ev’ts [6] |= 0x20; 108 ev’ts [7] |= 0x04; 109 ev’ts [7] |= 0x08; 110 ev’ts [7] |= 0x10; 114 ià( di . ã©u»s [4] & LMP_LE ) 115 ev’ts [7] |= 0x20; 117 ià( di . ã©u»s [6] & LMP_LE_BREDR ) 118 ev’ts [7] |= 0x20; 121 `´štf ("Settingƒvent mask:\n"); 122 `´štf ("\thcitool cmd 0x%02x 0x%04x " 125 OGF_HOST_CTL , OCF_SET_EVENT_MASK , 126 ev’ts [0],ƒvents[1],ƒvents[2],ƒvents[3], 127 ev’ts [4],ƒvents[5],ƒvents[6],ƒvents[7]); 130 } } @tools/hcisecfilter.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~ 32  ~ 33  ~ 34  ~ 36  $maš () 38 ušt32_t ty³_mask ; 39 ušt32_t ev’t_mask [2]; 40 ušt32_t ocf_mask [4]; 43 `mem£t (& ty³_mask , 0, (type_mask)); 44 `hci_£t_b™ ( HCI_EVENT_PKT , & ty³_mask ); 46 `´štf ("Ty³ mask: { 0x%02x }\n", ty³_mask ); 49 `mem£t ( ev’t_mask , 0, (event_mask)); 50 `hci_£t_b™ ( EVT_INQUIRY_COMPLETE , ev’t_mask ); 51 `hci_£t_b™ ( EVT_INQUIRY_RESULT , ev’t_mask ); 52 `hci_£t_b™ ( EVT_CONN_COMPLETE , ev’t_mask ); 53 `hci_£t_b™ ( EVT_CONN_REQUEST , ev’t_mask ); 54 `hci_£t_b™ ( EVT_DISCONN_COMPLETE , ev’t_mask ); 55 `hci_£t_b™ ( EVT_AUTH_COMPLETE , ev’t_mask ); 56 `hci_£t_b™ ( EVT_REMOTE_NAME_REQ_COMPLETE , ev’t_mask ); 57 `hci_£t_b™ ( EVT_ENCRYPT_CHANGE , ev’t_mask ); 58 `hci_£t_b™ ( EVT_READ_REMOTE_FEATURES_COMPLETE , ev’t_mask ); 59 `hci_£t_b™ ( EVT_READ_REMOTE_VERSION_COMPLETE , ev’t_mask ); 60 `hci_£t_b™ ( EVT_CMD_COMPLETE , ev’t_mask ); 61 `hci_£t_b™ ( EVT_CMD_STATUS , ev’t_mask ); 62 `hci_£t_b™ ( EVT_READ_CLOCK_OFFSET_COMPLETE , ev’t_mask ); 63 `hci_£t_b™ ( EVT_INQUIRY_RESULT_WITH_RSSI , ev’t_mask ); 64 `hci_£t_b™ ( EVT_READ_REMOTE_EXT_FEATURES_COMPLETE , ev’t_mask ); 65 `hci_£t_b™ ( EVT_SYNC_CONN_COMPLETE , ev’t_mask ); 66 `hci_£t_b™ ( EVT_SYNC_CONN_CHANGED , ev’t_mask ); 67 `hci_£t_b™ ( EVT_EXTENDED_INQUIRY_RESULT , ev’t_mask ); 69 `´štf ("Event mask: { 0x%08x, 0x%08x }\n", 70 ev’t_mask [0],ƒvent_mask[1]); 73 `mem£t ( ocf_mask , 0, (ocf_mask)); 74 `hci_£t_b™ ( OCF_INQUIRY , ocf_mask ); 75 `hci_£t_b™ ( OCF_INQUIRY_CANCEL , ocf_mask ); 76 `hci_£t_b™ ( OCF_REMOTE_NAME_REQ , ocf_mask ); 77 `hci_£t_b™ ( OCF_REMOTE_NAME_REQ_CANCEL , ocf_mask ); 78 `hci_£t_b™ ( OCF_READ_REMOTE_FEATURES , ocf_mask ); 79 `hci_£t_b™ ( OCF_READ_REMOTE_EXT_FEATURES , ocf_mask ); 80 `hci_£t_b™ ( OCF_READ_REMOTE_VERSION , ocf_mask ); 81 `hci_£t_b™ ( OCF_READ_CLOCK_OFFSET , ocf_mask ); 82 `hci_£t_b™ ( OCF_READ_LMP_HANDLE , ocf_mask ); 84 `´štf ("OGF_LINK_CTL: { 0x%08x, 0x%08x, 0x%08x, 0x%02x }\n", 85 ocf_mask [0], ocf_mask[1], ocf_mask[2], ocf_mask[3]); 88 `mem£t ( ocf_mask , 0, (ocf_mask)); 89 `hci_£t_b™ ( OCF_ROLE_DISCOVERY , ocf_mask ); 90 `hci_£t_b™ ( OCF_READ_LINK_POLICY , ocf_mask ); 91 `hci_£t_b™ ( OCF_READ_DEFAULT_LINK_POLICY , ocf_mask ); 93 `´štf ("OGF_LINK_POLICY: { 0x%08x, 0x%08x, 0x%08x, 0x%02x }\n", 94 ocf_mask [0], ocf_mask[1], ocf_mask[2], ocf_mask[3]); 97 `mem£t ( ocf_mask , 0, (ocf_mask)); 98 `hci_£t_b™ ( OCF_READ_PIN_TYPE , ocf_mask ); 99 `hci_£t_b™ ( OCF_READ_LOCAL_NAME , ocf_mask ); 100 `hci_£t_b™ ( OCF_READ_CONN_ACCEPT_TIMEOUT , ocf_mask ); 101 `hci_£t_b™ ( OCF_READ_PAGE_TIMEOUT , ocf_mask ); 102 `hci_£t_b™ ( OCF_READ_SCAN_ENABLE , ocf_mask ); 103 `hci_£t_b™ ( OCF_READ_PAGE_ACTIVITY , ocf_mask ); 104 `hci_£t_b™ ( OCF_READ_INQ_ACTIVITY , ocf_mask ); 105 `hci_£t_b™ ( OCF_READ_AUTH_ENABLE , ocf_mask ); 106 `hci_£t_b™ ( OCF_READ_ENCRYPT_MODE , ocf_mask ); 107 `hci_£t_b™ ( OCF_READ_CLASS_OF_DEV , ocf_mask ); 108 `hci_£t_b™ ( OCF_READ_VOICE_SETTING , ocf_mask ); 109 `hci_£t_b™ ( OCF_READ_AUTOMATIC_FLUSH_TIMEOUT , ocf_mask ); 110 `hci_£t_b™ ( OCF_READ_NUM_BROADCAST_RETRANS , ocf_mask ); 111 `hci_£t_b™ ( OCF_READ_HOLD_MODE_ACTIVITY , ocf_mask ); 112 `hci_£t_b™ ( OCF_READ_TRANSMIT_POWER_LEVEL , ocf_mask ); 113 `hci_£t_b™ ( OCF_READ_LINK_SUPERVISION_TIMEOUT , ocf_mask ); 114 `hci_£t_b™ ( OCF_READ_NUM_SUPPORTED_IAC , ocf_mask ); 115 `hci_£t_b™ ( OCF_READ_CURRENT_IAC_LAP , ocf_mask ); 116 `hci_£t_b™ ( OCF_READ_PAGE_SCAN_PERIOD_MODE , ocf_mask ); 117 `hci_£t_b™ ( OCF_READ_PAGE_SCAN_MODE , ocf_mask ); 118 `hci_£t_b™ ( OCF_READ_INQUIRY_SCAN_TYPE , ocf_mask ); 119 `hci_£t_b™ ( OCF_READ_INQUIRY_MODE , ocf_mask ); 120 `hci_£t_b™ ( OCF_READ_PAGE_SCAN_TYPE , ocf_mask ); 121 `hci_£t_b™ ( OCF_READ_AFH_MODE , ocf_mask ); 122 `hci_£t_b™ ( OCF_READ_EXT_INQUIRY_RESPONSE , ocf_mask ); 123 `hci_£t_b™ ( OCF_READ_SIMPLE_PAIRING_MODE , ocf_mask ); 124 `hci_£t_b™ ( OCF_READ_INQ_RESPONSE_TX_POWER_LEVEL , ocf_mask ); 125 `hci_£t_b™ ( OCF_READ_DEFAULT_ERROR_DATA_REPORTING , ocf_mask ); 127 `´štf ("OGF_HOST_CTL: { 0x%08x, 0x%08x, 0x%08x, 0x%02x }\n", 128 ocf_mask [0], ocf_mask[1], ocf_mask[2], ocf_mask[3]); 131 `mem£t ( ocf_mask , 0, (ocf_mask)); 132 `hci_£t_b™ ( OCF_READ_LOCAL_VERSION , ocf_mask ); 133 `hci_£t_b™ ( OCF_READ_LOCAL_COMMANDS , ocf_mask ); 134 `hci_£t_b™ ( OCF_READ_LOCAL_FEATURES , ocf_mask ); 135 `hci_£t_b™ ( OCF_READ_LOCAL_EXT_FEATURES , ocf_mask ); 136 `hci_£t_b™ ( OCF_READ_BUFFER_SIZE , ocf_mask ); 137 `hci_£t_b™ ( OCF_READ_COUNTRY_CODE , ocf_mask ); 138 `hci_£t_b™ ( OCF_READ_BD_ADDR , ocf_mask ); 140 `´štf ("OGF_INFO_PARAM: { 0x%08x, 0x%08x, 0x%08x, 0x%02x }\n", 141 ocf_mask [0], ocf_mask[1], ocf_mask[2], ocf_mask[3]); 144 `mem£t ( ocf_mask , 0, (ocf_mask)); 145 `hci_£t_b™ ( OCF_READ_FAILED_CONTACT_COUNTER , ocf_mask ); 146 `hci_£t_b™ ( OCF_READ_LINK_QUALITY , ocf_mask ); 147 `hci_£t_b™ ( OCF_READ_RSSI , ocf_mask ); 148 `hci_£t_b™ ( OCF_READ_AFH_MAP , ocf_mask ); 149 `hci_£t_b™ ( OCF_READ_CLOCK , ocf_mask ); 151 `´štf ("OGF_STATUS_PARAM: { 0x%08x, 0x%08x, 0x%08x, 0x%02x }\n", 152 ocf_mask [0], ocf_mask[1], ocf_mask[2], ocf_mask[3]); 155 } } @tools/hcitool.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡dio.h > 31  ~<”ºo.h > 32  ~<ùy³.h > 33  ~ 34  ~ 35  ~<¡dlib.h > 36  ~<¡ršg.h > 37  ~ 38  ~ 39  ~ 40  ~ 41  ~ 43  ~ 44  ~ 45  ~ 47  ~"¤c/oui.h " 49 #iâdeà MIN 50  #MIN ( a , b è(×è< (bè? (aè: (b)) ) 54  #LE_LINK 0x80 ) 56  #FLAGS_AD_TYPE 0x01 ) 57  #FLAGS_LIMITED_MODE_BIT 0x01 ) 58  #FLAGS_GENERAL_MODE_BIT 0x02 ) 60  #EIR_FLAGS 0x01 ) 61  #EIR_UUID16_SOME 0x02 ) 62  #EIR_UUID16_ALL 0x03 ) 63  #EIR_UUID32_SOME 0x04 ) 64  #EIR_UUID32_ALL 0x05 ) 65  #EIR_UUID128_SOME 0x06 ) 66  #EIR_UUID128_ALL 0x07 ) 67  #EIR_NAME_SHORT 0x08 ) 68  #EIR_NAME_COMPLETE 0x09 ) 69  #EIR_TX_POWER 0x0A ) 70  #EIR_DEVICE_ID 0x10 ) 72  #fÜ_—ch_Ýt ( Ýt , , è(Ýt= `g‘Ýt_lÚg ( ¬gc , ¬gv , ? :"+", , NULL )è!ð-1) ) 74 vÞ©ž gsigÇl_»ûived = 0; 76  u§ge (); 78  $¡r2buf (cÚ¡ * ¡r , ušt8_t * buf , size_t bËn ) 80  i , dËn ; 82 ià( ¡r =ð NULL ) 83  - EINVAL ; 85 `mem£t ( buf , 0, bËn ); 87 dËn = `MIN (( `¡¾’ ( ¡r è/ 2), bËn ); 89  i = 0; i < dËn ; i++) 90 `ssÿnf ( ¡r + ( i * 2), "%02hhX", & buf [i]); 93 } } 95  $dev_šfo ( s ,  dev_id ,  ¬g ) 97  hci_dev_šfo di = { . dev_id = dev_id }; 98  addr [18]; 100 ià( `ioùl ( s , HCIGETDEVINFO , (*è& di )) 103 `ba2¡r (& di . bdaddr , addr ); 104 `´štf ("\t%s\t%s\n", di . Çme , addr ); 106 } } 108  $h–³r_¬g ( mš_num_¬g ,  max_num_¬g , * ¬gc , 109 *** ¬gv , cÚ¡ * u§ge ) 111 * ¬gc -ð Ýtšd ; 115 iàÐ(* ¬gc > max_num_¬g è&& (max_num_¬g >ð mš_num_¬g ) ) { 116 `årštf ( ¡d”r , "%s:oo many‡rguments (maximal: %i)\n", 117 * ¬gv [0], max_num_¬g ); 118 `´štf ("%s", u§ge ); 119 `ex™ (1); 123 ià(* ¬gc < mš_num_¬g ) { 124 `årštf ( ¡d”r , "%s:oo few‡rguments (minimal: %i)\n", 125 * ¬gv [0], mš_num_¬g ); 126 `´štf ("%s", u§ge ); 127 `ex™ (0); 130 * ¬gv +ð Ýtšd ; 131 } } 133 * $ty³2¡r ( ušt8_t ty³ ) 135  ty³ ) { 136  SCO_LINK : 138  ACL_LINK : 140  ESCO_LINK : 142  LE_LINK : 147 } } 149  $cÚn_li¡ ( s ,  dev_id ,  ¬g ) 151  hci_cÚn_li¡_»q * þ ; 152  hci_cÚn_šfo * ci ; 153  id = ¬g ; 154  i ; 156 ià( id !ð-1 && dev_id != id) 159 ià(!( þ = `m®loc (10 * (* ci ) + (*cl)))) { 160 `³¼Ü ("Can't‡llocate memory"); 161 `ex™ (1); 163 þ -> dev_id = dev_id; 164 þ -> cÚn_num = 10; 165 ci = þ -> cÚn_šfo ; 167 ià( `ioùl ( s , HCIGETCONNLIST , (*è þ )) { 168 `³¼Ü ("Can't get connection†ist"); 169 `ex™ (1); 172  i = 0; i < þ -> cÚn_num ; i++, ci ++) { 173  addr [18]; 174 * ¡r ; 175 `ba2¡r (& ci -> bdaddr , addr ); 176 ¡r = `hci_lmto¡r ( ci -> lšk_mode ); 177 `´štf ("\t%s %s %s handle %d state %d†m %s\n", 178 ci -> out ? "<" : ">", `ty³2¡r (ci-> ty³ ), 179 addr , ci -> hªdË , ci-> ¡©e , ¡r ); 180 `bt_ä“ ( ¡r ); 183 `ä“ ( þ ); 185 } } 187  $fšd_cÚn ( s ,  dev_id ,  ¬g ) 189  hci_cÚn_li¡_»q * þ ; 190  hci_cÚn_šfo * ci ; 191  i ; 193 ià(!( þ = `m®loc (10 * (* ci ) + (*cl)))) { 194 `³¼Ü ("Can't‡llocate memory"); 195 `ex™ (1); 197 þ -> dev_id = dev_id; 198 þ -> cÚn_num = 10; 199 ci = þ -> cÚn_šfo ; 201 ià( `ioùl ( s , HCIGETCONNLIST , (*è þ )) { 202 `³¼Ü ("Can't get connection†ist"); 203 `ex™ (1); 206  i = 0; i < þ -> cÚn_num ; i++, ci ++) 207 ià(! `bacmp (( bdaddr_t *è ¬g , & ci -> bdaddr )) { 208 `ä“ ( þ ); 212 `ä“ ( þ ); 214 } } 216  $hex_dump (* ´ef ,  width , * buf ,  Ën ) 218  i , n ; 220  i = 0, n = 1; i < Ën ; i++,‚++) { 221 ià( n == 1) 222 `´štf ("%s", ´ef ); 223 `´štf ("%2.2X ", buf [ i ]); 224 ià( n =ð width ) { 225 `´štf ("\n"); 226 n = 0; 229 ià( i && n !=1) 230 `´štf ("\n"); 231 } } 233 * $g‘_mšÜ_deviû_Çme ( majÜ ,  mšÜ ) 235  majÜ ) { 239  mšÜ ) { 257  mšÜ ) { 275 ià( mšÜ == 0) 277  mšÜ / 8) { 297  mšÜ ) { 337  þs_¡r [48]; cls_str[0] = 0; 339  mšÜ & 48) { 341 `¡ºýy ( þs_¡r , "Keyboard", (cls_str)); 344 `¡ºýy ( þs_¡r , "Pointing device", (cls_str)); 347 `¡ºýy ( þs_¡r , "Combo keyboard/pointing device", (cls_str)); 350 ià(( mšÜ & 15è&& ( `¡¾’ ( þs_¡r ) > 0)) 351 `¡rÿt ( þs_¡r , "/"); 353  mšÜ & 15) { 357 `¡ºÿt ( þs_¡r , "Joystick", 358 ( þs_¡r è- `¡¾’ (cls_str) - 1); 361 `¡ºÿt ( þs_¡r , "Gamepad", 362 ( þs_¡r è- `¡¾’ (cls_str) - 1); 365 `¡ºÿt ( þs_¡r , "Remote control", 366 ( þs_¡r è- `¡¾’ (cls_str) - 1); 369 `¡ºÿt ( þs_¡r , "Sensing device", 370 ( þs_¡r è- `¡¾’ (cls_str) - 1); 373 `¡ºÿt ( þs_¡r , "Digitizerablet", 374 ( þs_¡r è- `¡¾’ (cls_str) - 1); 377 `¡ºÿt ( þs_¡r , "Card„eader", 378 ( þs_¡r è- `¡¾’ (cls_str) - 1); 381 `¡ºÿt ( þs_¡r , "(reserved)", 382 ( þs_¡r è- `¡¾’ (cls_str) - 1); 385 ià( `¡¾’ ( þs_¡r ) > 0) 386  þs_¡r ; 390 ià( mšÜ & 4) 392 ià( mšÜ & 8) 394 ià( mšÜ & 16) 396 ià( mšÜ & 32) 400  mšÜ ) { 414  mšÜ ) { 431 } } 433 * gmajÜ_þas£s [] = { 440  ÝtiÚ gdev_ÝtiÚs [] = { 445 cÚ¡ * gdev_h–p = 449  $cmd_dev ( dev_id ,  ¬gc , ** ¬gv ) 451  Ýt ; 453 `fÜ_—ch_Ýt ( Ýt , dev_ÝtiÚs , NULL ) { 454  Ýt ) { 456 `´štf ("%s", dev_h–p ); 460 `h–³r_¬g (0, 0, & ¬gc , & ¬gv , dev_h–p ); 462 `´štf ("Devices:\n"); 464 `hci_fÜ_—ch_dev ( HCI_UP , dev_šfo , 0); 465 } } 469  ÝtiÚ gšq_ÝtiÚs [] = { 478 cÚ¡ * gšq_h–p = 485  $cmd_šq ( dev_id ,  ¬gc , ** ¬gv ) 487 šquœy_šfo * šfo = NULL ; 488 ušt8_t Ïp [3] = { 0x33, 0x8b, 0x9e }; 489  num_r¥ , Ëngth , æags ; 490  addr [18]; 491  i , l , Ýt ; 493 Ëngth = 8; 494 num_r¥ = 0; 495 æags = 0; 497 `fÜ_—ch_Ýt ( Ýt , šq_ÝtiÚs , NULL ) { 498  Ýt ) { 500 Ëngth = `©oi ( Ýrg ); 504 num_r¥ = `©oi ( Ýrg ); 508 l = `¡¹oul ( Ýrg , 0, 16); 509 ià(! `¡rÿ£cmp ( Ýrg , "giac")) { 510 l = 0x9e8b33; 511 } ià(! `¡rÿ£cmp ( Ýrg , "liac")) { 512 l = 0x9e8b00; 513 } ià( l < 0x9e8b00 ||† > 0x9e8b3f) { 514 `´štf ("Inv®id‡cûs cod0x%x\n", l ); 515 `ex™ (1); 517 Ïp [0] = ( l & 0xff); 518 Ïp [1] = ( l >> 8) & 0xff; 519 Ïp [2] = ( l >> 16) & 0xff; 523 æags |ð IREQ_CACHE_FLUSH ; 527 `´štf ("%s", šq_h–p ); 531 `h–³r_¬g (0, 0, & ¬gc , & ¬gv , šq_h–p ); 533 `´štf ("Inquiring ...\n"); 535 num_r¥ = `hci_šquœy ( dev_id , Ëngth ,‚um_r¥, Ïp , & šfo , æags ); 536 ià( num_r¥ < 0) { 537 `³¼Ü ("Inquiry failed."); 538 `ex™ (1); 541  i = 0; i < num_r¥ ; i++) { 542 `ba2¡r (&( šfo + i )-> bdaddr , addr ); 543 `´štf ("\t%s\tclock offset: 0x%4.4x\tclass: 0x%2.2x%2.2x%2.2x\n", 544 addr , `btohs (( šfo + i )-> þock_off£t ), 545 ( šfo + i )-> dev_þass [2], 546 ( šfo + i )-> dev_þass [1], 547 ( šfo + i )-> dev_þass [0]); 550 `bt_ä“ ( šfo ); 551 } } 555  ÝtiÚ gsÿn_ÝtiÚs [] = { 569 cÚ¡ * gsÿn_h–p = 573  $cmd_sÿn ( dev_id ,  ¬gc , ** ¬gv ) 575 šquœy_šfo * šfo = NULL ; 576 ušt8_t Ïp [3] = { 0x33, 0x8b, 0x9e }; 577  num_r¥ , Ëngth , æags ; 578 ušt8_t þs [3], ã©u»s [8]; 579  addr [18], Çme [249], * comp ; 580  hci_v”siÚ v”siÚ ; 581  hci_dev_šfo di ; 582  hci_cÚn_šfo_»q * ü ; 583  extþs = 0, extšf = 0, extoui = 0; 584  i , n , l , Ýt , dd , cc ; 586 Ëngth = 8; 587 num_r¥ = 0; 588 æags = 0; 590 `fÜ_—ch_Ýt ( Ýt , sÿn_ÝtiÚs , NULL ) { 591  Ýt ) { 593 Ëngth = `©oi ( Ýrg ); 597 num_r¥ = `©oi ( Ýrg ); 601 l = `¡¹oul ( Ýrg , 0, 16); 602 ià(! `¡rÿ£cmp ( Ýrg , "giac")) { 603 l = 0x9e8b33; 604 } ià(! `¡rÿ£cmp ( Ýrg , "liac")) { 605 l = 0x9e8b00; 606 } ià( l < 0x9e8b00 ||† > 0x9e8b3f) { 607 `´štf ("Inv®id‡cûs cod0x%x\n", l ); 608 `ex™ (1); 610 Ïp [0] = ( l & 0xff); 611 Ïp [1] = ( l >> 8) & 0xff; 612 Ïp [2] = ( l >> 16) & 0xff; 616 æags |ð IREQ_CACHE_FLUSH ; 620 extþs = 1; 624 extšf = 1; 628 extoui = 1; 632 extþs = 1; 633 extšf = 1; 634 extoui = 1; 638 `´štf ("%s", sÿn_h–p ); 642 `h–³r_¬g (0, 0, & ¬gc , & ¬gv , sÿn_h–p ); 644 ià( dev_id < 0) { 645 dev_id = `hci_g‘_rou‹ ( NULL ); 646 ià( dev_id < 0) { 647 `³¼Ü ("Device is‚ot‡vailable"); 648 `ex™ (1); 652 ià( `hci_devšfo ( dev_id , & di ) < 0) { 653 `³¼Ü ("Can't get device info"); 654 `ex™ (1); 657 `´štf ("Scanning ...\n"); 658 num_r¥ = `hci_šquœy ( dev_id , Ëngth ,‚um_r¥, Ïp , & šfo , æags ); 659 ià( num_r¥ < 0) { 660 `³¼Ü ("Inquiry failed"); 661 `ex™ (1); 664 dd = `hci_Ý’_dev ( dev_id ); 665 ià( dd < 0) { 666 `³¼Ü ("HCI device open failed"); 667 `ä“ ( šfo ); 668 `ex™ (1); 671 ià( extþs || extšf || extoui ) 672 `´štf ("\n"); 674  i = 0; i < num_r¥ ; i++) { 675 ušt16_t hªdË = 0; 677 ià(! extþs && ! extšf && ! extoui ) { 678 `ba2¡r (&( šfo + i )-> bdaddr , addr ); 680 ià( `hci_»ad_»mÙe_Çme_w™h_þock_off£t ( dd , 681 &( šfo + i )-> bdaddr , 682 ( šfo + i )-> psÿn_»p_mode , 683 ( šfo + i )-> þock_off£t | 0x8000, 684 ( Çme ),‚ame, 100000) < 0) 685 `¡rýy ( Çme , "n/a"); 687  n = 0;‚ < 248 && Çme [n];‚++) { 688 ià((è Çme [ i ] < 32 ||‚ame[i] == 127) 689 Çme [ i ] = '.'; 692 Çme [248] = '\0'; 694 `´štf ("\t%s\t%s\n", addr , Çme ); 698 `ba2¡r (&( šfo + i )-> bdaddr , addr ); 699 `´štf ("BD Add»ss:\t% [mod%d, clkoff£ˆ0x%4.4x]\n", addr , 700 ( šfo + i )-> psÿn_»p_mode , `btohs ((šfo+i)-> þock_off£t )); 702 ià( extoui ) { 703 comp = `b©ocomp (&( šfo + i )-> bdaddr ); 704 ià( comp ) { 705  oui [9]; 706 `ba2oui (&( šfo + i )-> bdaddr , oui ); 707 `´štf ("OUI com·ny:\t% (%s)\n", comp , oui ); 708 `ä“ ( comp ); 712 cc = 0; 714 ià( extšf ) { 715 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 716 ià( ü ) { 717 `baýy (& ü -> bdaddr , &( šfo + i )->bdaddr); 718 ü -> ty³ = ACL_LINK ; 719 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 720 hªdË = 0; 721 cc = 1; 723 hªdË = `htobs ( ü -> cÚn_šfo ->handle); 724 cc = 0; 726 `ä“ ( ü ); 729 ià( cc ) { 730 ià( `hci_ü—‹_cÚÃùiÚ ( dd , &( šfo + i )-> bdaddr , 731 `htobs ( di . pkt_ty³ & ACL_PTYPE_MASK ), 732 ( šfo + i )-> þock_off£t | 0x8000, 733 0x01, & hªdË , 25000) < 0) { 734 hªdË = 0; 735 cc = 0; 740 ià( `hci_»ad_»mÙe_Çme_w™h_þock_off£t ( dd , 741 &( šfo + i )-> bdaddr , 742 ( šfo + i )-> psÿn_»p_mode , 743 ( šfo + i )-> þock_off£t | 0x8000, 744 ( Çme ),‚ame, 100000) < 0) { 746  n = 0;‚ < 248 && Çme [n];‚++) { 747 ià((è Çme [ i ] < 32 ||‚ame[i] == 127) 748 Çme [ i ] = '.'; 751 Çme [248] = '\0'; 754 ià( `¡¾’ ( Çme ) > 0) 755 `´štf ("Deviû‚ame:\t%s\n", Çme ); 757 ià( extþs ) { 758 `memýy ( þs , ( šfo + i )-> dev_þass , 3); 759 `´štf ("Device class:\t"); 760 ià(( þs [1] & 0x1fè> ( majÜ_þas£s ) / (*)) 761 `´štf ("Invalid"); 763 `´štf ("%s, %s", majÜ_þas£s [ þs [1] & 0x1f], 764 `g‘_mšÜ_deviû_Çme ( þs [1] & 0x1f, cls[0] >> 2)); 765 `´štf (" (0x%2.2x%2.2x%2.2x)\n", þs [2], cls[1], cls[0]); 768 ià( extšf && hªdË > 0) { 769 ià( `hci_»ad_»mÙe_v”siÚ ( dd , hªdË , & v”siÚ , 20000) == 0) { 770 * v” = `lmp_v”to¡r ( v”siÚ . lmp_v” ); 771 `´štf ("Manufacturer:\t%s (%d)\n", 772 `bt_compidto¡r ( v”siÚ . mªuçùu»r ), 773 v”siÚ . mªuçùu»r ); 774 `´štf ("LMP version:\t%s (0x%x) [subver 0x%x]\n", 775 v” ? ver : "n/a", 776 v”siÚ . lmp_v” , v”siÚ. lmp_subv” ); 777 ià( v” ) 778 `bt_ä“ ( v” ); 781 ià( `hci_»ad_»mÙe_ã©u»s ( dd , hªdË , ã©u»s , 20000) == 0) { 782 * tmp = `lmp_ã©u»¡o¡r ( ã©u»s , "\t\t", 63); 783 `´štf ("LMP features:\t0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x" 785 ã©u»s [0], features[1], 786 ã©u»s [2], features[3], 787 ã©u»s [4], features[5], 788 ã©u»s [6], features[7]); 789 `´štf ("%s\n", tmp ); 790 `bt_ä“ ( tmp ); 793 ià( cc ) { 794 `u¦“p (10000); 795 `hci_discÚÃù ( dd , hªdË , HCI_OE_USER_ENDED_CONNECTION , 10000); 799 `´štf ("\n"); 802 `bt_ä“ ( šfo ); 804 `hci_þo£_dev ( dd ); 805 } } 809  ÝtiÚ gÇme_ÝtiÚs [] = { 814 cÚ¡ * gÇme_h–p = 818  $cmd_Çme ( dev_id ,  ¬gc , ** ¬gv ) 820 bdaddr_t bdaddr ; 821  Çme [248]; 822  Ýt , dd ; 824 `fÜ_—ch_Ýt ( Ýt , Çme_ÝtiÚs , NULL ) { 825  Ýt ) { 827 `´štf ("%s", Çme_h–p ); 831 `h–³r_¬g (1, 1, & ¬gc , & ¬gv , Çme_h–p ); 833 `¡r2ba ( ¬gv [0], & bdaddr ); 835 ià( dev_id < 0) { 836 dev_id = `hci_g‘_rou‹ (& bdaddr ); 837 ià( dev_id < 0) { 838 `årštf ( ¡d”r , "Device is‚ot‡vailable.\n"); 839 `ex™ (1); 843 dd = `hci_Ý’_dev ( dev_id ); 844 ià( dd < 0) { 845 `³¼Ü ("HCI device open failed"); 846 `ex™ (1); 849 ià( `hci_»ad_»mÙe_Çme ( dd , & bdaddr , ( Çme ),‚ame, 25000) == 0) 850 `´štf ("%s\n", Çme ); 852 `hci_þo£_dev ( dd ); 853 } } 857  ÝtiÚ gšfo_ÝtiÚs [] = { 862 cÚ¡ * gšfo_h–p = 866  $cmd_šfo ( dev_id ,  ¬gc , ** ¬gv ) 868 bdaddr_t bdaddr ; 869 ušt16_t hªdË ; 870 ušt8_t ã©u»s [8], max_·ge = 0; 871  Çme [249], * comp , * tmp ; 872  hci_v”siÚ v”siÚ ; 873  hci_dev_šfo di ; 874  hci_cÚn_šfo_»q * ü ; 875  i , Ýt , dd , cc = 0; 877 `fÜ_—ch_Ýt ( Ýt , šfo_ÝtiÚs , NULL ) { 878  Ýt ) { 880 `´štf ("%s", šfo_h–p ); 884 `h–³r_¬g (1, 1, & ¬gc , & ¬gv , šfo_h–p ); 886 `¡r2ba ( ¬gv [0], & bdaddr ); 888 ià( dev_id < 0) 889 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 891 ià( dev_id < 0) 892 dev_id = `hci_g‘_rou‹ (& bdaddr ); 894 ià( dev_id < 0) { 895 `årštf ( ¡d”r , "Device is‚ot‡vailable or‚ot connected.\n"); 896 `ex™ (1); 899 ià( `hci_devšfo ( dev_id , & di ) < 0) { 900 `³¼Ü ("Can't get device info"); 901 `ex™ (1); 904 `´štf ("Requesting information ...\n"); 906 dd = `hci_Ý’_dev ( dev_id ); 907 ià( dd < 0) { 908 `³¼Ü ("HCI device open failed"); 909 `ex™ (1); 912 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 913 ià(! ü ) { 914 `³¼Ü ("Can't get connection info"); 915 `þo£ ( dd ); 916 `ex™ (1); 919 `baýy (& ü -> bdaddr , &bdaddr); 920 ü -> ty³ = ACL_LINK ; 921 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 922 ià( `hci_ü—‹_cÚÃùiÚ ( dd , & bdaddr , 923 `htobs ( di . pkt_ty³ & ACL_PTYPE_MASK ), 924 0, 0x01, & hªdË , 25000) < 0) { 925 `³¼Ü ("Can't create connection"); 926 `ä“ ( ü ); 927 `þo£ ( dd ); 928 `ex™ (1); 930 `¦“p (1); 931 cc = 1; 933 hªdË = `htobs ( ü -> cÚn_šfo ->handle); 935 `ä“ ( ü ); 937 `´štf ("\tBD Add»ss: %s\n", ¬gv [0]); 939 comp = `b©ocomp (& bdaddr ); 940 ià( comp ) { 941  oui [9]; 942 `ba2oui (& bdaddr , oui ); 943 `´štf ("\tOUI Com·ny: % (%s)\n", comp , oui ); 944 `ä“ ( comp ); 947 ià( `hci_»ad_»mÙe_Çme ( dd , & bdaddr , ( Çme ),‚ame, 25000) == 0) 948 `´štf ("\tDeviû Name: %s\n", Çme ); 950 ià( `hci_»ad_»mÙe_v”siÚ ( dd , hªdË , & v”siÚ , 20000) == 0) { 951 * v” = `lmp_v”to¡r ( v”siÚ . lmp_v” ); 952 `´štf ("\tLMP Version: %s (0x%x) LMP Subversion: 0x%x\n" 954 v” ? ver : "n/a", 955 v”siÚ . lmp_v” , 956 v”siÚ . lmp_subv” , 957 `bt_compidto¡r ( v”siÚ . mªuçùu»r ), 958 v”siÚ . mªuçùu»r ); 959 ià( v” ) 960 `bt_ä“ ( v” ); 963 `mem£t ( ã©u»s , 0, (features)); 964 `hci_»ad_»mÙe_ã©u»s ( dd , hªdË , ã©u»s , 20000); 966 ià(( di . ã©u»s [7] & LMP_EXT_FEAT ) && (features[7] & LMP_EXT_FEAT)) 967 `hci_»ad_»mÙe_ext_ã©u»s ( dd , hªdË , 0, & max_·ge , 968 ã©u»s , 20000); 970 `´štf ("\tFeatures%s: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x " 972 ( max_·ge > 0) ? "…age 0" : "", 973 ã©u»s [0], features[1], features[2], features[3], 974 ã©u»s [4], features[5], features[6], features[7]); 976 tmp = `lmp_ã©u»¡o¡r ( ã©u»s , "\t\t", 63); 977 `´štf ("%s\n", tmp ); 978 `bt_ä“ ( tmp ); 980  i = 1; i <ð max_·ge ; i++) { 981 ià( `hci_»ad_»mÙe_ext_ã©u»s ( dd , hªdË , i , NULL , 982 ã©u»s , 20000) < 0) 985 `´štf ("\tFeatures…age %d: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x " 986 "0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x\n", i , 987 ã©u»s [0], features[1], features[2], features[3], 988 ã©u»s [4], features[5], features[6], features[7]); 991 ià( cc ) { 992 `u¦“p (10000); 993 `hci_discÚÃù ( dd , hªdË , HCI_OE_USER_ENDED_CONNECTION , 10000); 996 `hci_þo£_dev ( dd ); 997 } } 1001  ÝtiÚ g¥šq_ÝtiÚs [] = { 1006 cÚ¡ * g¥šq_h–p = 1010  $cmd_¥šq ( dev_id ,  ¬gc , ** ¬gv ) 1012 ušt8_t Ïp [3] = { 0x33, 0x8b, 0x9e }; 1013  hci_»que¡ rq ; 1014 ³riodic_šquœy_ý ý ; 1015  Ýt , dd ; 1017 `fÜ_—ch_Ýt ( Ýt , ¥šq_ÝtiÚs , NULL ) { 1018  Ýt ) { 1020 `´štf ("%s", ¥šq_h–p ); 1024 `h–³r_¬g (0, 0, & ¬gc , & ¬gv , ¥šq_h–p ); 1026 ià( dev_id < 0) 1027 dev_id = `hci_g‘_rou‹ ( NULL ); 1029 dd = `hci_Ý’_dev ( dev_id ); 1030 ià( dd < 0) { 1031 `³¼Ü ("Device open failed"); 1032 `ex™ ( EXIT_FAILURE ); 1035 `mem£t (& ý , 0, (cp)); 1036 `memýy ( ý . Ïp ,†ap, 3); 1037 ý . max_³riod = `htobs (16); 1038 ý . mš_³riod = `htobs (10); 1039 ý . Ëngth = 8; 1040 ý . num_r¥ = 0; 1042 `mem£t (& rq , 0, (rq)); 1043 rq . ogf = OGF_LINK_CTL ; 1044 rq . ocf = OCF_PERIODIC_INQUIRY ; 1045 rq . ý¬am = & ý ; 1046 rq . þ’ = PERIODIC_INQUIRY_CP_SIZE ; 1048 ià( `hci_£nd_»q ( dd , & rq , 100) < 0) { 1049 `³¼Ü ("Periodic inquiry failed"); 1050 `ex™ ( EXIT_FAILURE ); 1053 `hci_þo£_dev ( dd ); 1054 } } 1058  ÝtiÚ g•šq_ÝtiÚs [] = { 1063 cÚ¡ * g•šq_h–p = 1067  $cmd_•šq ( dev_id ,  ¬gc , ** ¬gv ) 1069  Ýt , dd ; 1071 `fÜ_—ch_Ýt ( Ýt , •šq_ÝtiÚs , NULL ) { 1072  Ýt ) { 1074 `´štf ("%s", •šq_h–p ); 1078 `h–³r_¬g (0, 0, & ¬gc , & ¬gv , •šq_h–p ); 1080 ià( dev_id < 0) 1081 dev_id = `hci_g‘_rou‹ ( NULL ); 1083 dd = `hci_Ý’_dev ( dev_id ); 1084 ià( dd < 0) { 1085 `³¼Ü ("Device open failed"); 1086 `ex™ ( EXIT_FAILURE ); 1089 ià( `hci_£nd_cmd ( dd , OGF_LINK_CTL , 1090 OCF_EXIT_PERIODIC_INQUIRY , 0, NULL ) < 0) { 1091 `³¼Ü ("Exit…eriodic inquiry failed"); 1092 `ex™ ( EXIT_FAILURE ); 1095 `hci_þo£_dev ( dd ); 1096 } } 1100  ÝtiÚ gcmd_ÝtiÚs [] = { 1105 cÚ¡ * gcmd_h–p = 1111  $cmd_cmd ( dev_id ,  ¬gc , ** ¬gv ) 1113  buf [ HCI_MAX_EVENT_SIZE ], * ±r = buf; 1114  hci_fž‹r æt ; 1115 hci_ev’t_hdr * hdr ; 1116  i , Ýt , Ën , dd ; 1117 ušt16_t ocf ; 1118 ušt8_t ogf ; 1120 `fÜ_—ch_Ýt ( Ýt , cmd_ÝtiÚs , NULL ) { 1121  Ýt ) { 1123 `´štf ("%s", cmd_h–p ); 1127 `h–³r_¬g (2, -1, & ¬gc , & ¬gv , cmd_h–p ); 1129 ià( dev_id < 0) 1130 dev_id = `hci_g‘_rou‹ ( NULL ); 1132 ”ºo = 0; 1133 ogf = `¡¹Þ ( ¬gv [0], NULL , 16); 1134 ocf = `¡¹Þ ( ¬gv [1], NULL , 16); 1135 ià( ”ºo =ð ERANGE || ( ogf > 0x3fè|| ( ocf > 0x3ff)) { 1136 `´štf ("%s", cmd_h–p ); 1140  i = 2, Ën = 0; i < ¬gc &&†’ < (è( buf ); i++,†en++) 1141 * ±r ++ = ( ušt8_t è `¡¹Þ ( ¬gv [ i ], NULL , 16); 1143 dd = `hci_Ý’_dev ( dev_id ); 1144 ià( dd < 0) { 1145 `³¼Ü ("Device open failed"); 1146 `ex™ ( EXIT_FAILURE ); 1150 `hci_fž‹r_þ—r (& æt ); 1151 `hci_fž‹r_£t_±y³ ( HCI_EVENT_PKT , & æt ); 1152 `hci_fž‹r_®l_ev’ts (& æt ); 1153 ià( `£tsockÝt ( dd , SOL_HCI , HCI_FILTER , & æt , (flt)) < 0) { 1154 `³¼Ü ("HCI filter setup failed"); 1155 `ex™ ( EXIT_FAILURE ); 1158 `´štf ("< HCI Commªd: ogà0x%02x, ocà0x%04x,…ËÀ%d\n", ogf , ocf , Ën ); 1159 `hex_dump (" ", 20, buf , Ën ); `fæush ( ¡dout ); 1161 ià( `hci_£nd_cmd ( dd , ogf , ocf , Ën , buf ) < 0) { 1162 `³¼Ü ("Send failed"); 1163 `ex™ ( EXIT_FAILURE ); 1166 Ën = `»ad ( dd , buf , (buf)); 1167 ià( Ën < 0) { 1168 `³¼Ü ("Read failed"); 1169 `ex™ ( EXIT_FAILURE ); 1172 hdr = (*)( buf + 1); 1173 ±r = buf + (1 + HCI_EVENT_HDR_SIZE ); 1174 Ën -ð(1 + HCI_EVENT_HDR_SIZE ); 1176 `´štf ("> HCI Ev’t: 0x%02x…ËÀ%d\n", hdr -> evt , hdr-> ¶’ ); 1177 `hex_dump (" ", 20, ±r , Ën ); `fæush ( ¡dout ); 1179 `hci_þo£_dev ( dd ); 1180 } } 1184  ÝtiÚ gcÚ_ÝtiÚs [] = { 1189 cÚ¡ * gcÚ_h–p = 1193  $cmd_cÚ ( dev_id ,  ¬gc , ** ¬gv ) 1195  Ýt ; 1197 `fÜ_—ch_Ýt ( Ýt , cÚ_ÝtiÚs , NULL ) { 1198  Ýt ) { 1200 `´štf ("%s", cÚ_h–p ); 1204 `h–³r_¬g (0, 0, & ¬gc , & ¬gv , cÚ_h–p ); 1206 `´štf ("Connections:\n"); 1208 `hci_fÜ_—ch_dev ( HCI_UP , cÚn_li¡ , dev_id ); 1209 } } 1213  ÝtiÚ gcc_ÝtiÚs [] = { 1220 cÚ¡ * gcc_h–p = 1227  $cmd_cc ( dev_id ,  ¬gc , ** ¬gv ) 1229 bdaddr_t bdaddr ; 1230 ušt16_t hªdË ; 1231 ušt8_t rÞe ; 1232  ±y³ ; 1233  dd , Ýt ; 1235 rÞe = 0x01; 1236 ±y³ = HCI_DM1 | HCI_DM3 | HCI_DM5 | HCI_DH1 | HCI_DH3 | HCI_DH5 ; 1238 `fÜ_—ch_Ýt ( Ýt , cc_ÝtiÚs , NULL ) { 1239  Ýt ) { 1241 `hci_¡¹Ýty³ ( Ýrg , & ±y³ ); 1245 rÞe = Ýrg [0] == 'm' ? 0 : 1; 1249 `´štf ("%s", cc_h–p ); 1253 `h–³r_¬g (1, 1, & ¬gc , & ¬gv , cc_h–p ); 1255 `¡r2ba ( ¬gv [0], & bdaddr ); 1257 ià( dev_id < 0) { 1258 dev_id = `hci_g‘_rou‹ (& bdaddr ); 1259 ià( dev_id < 0) { 1260 `årštf ( ¡d”r , "Device is‚ot‡vailable.\n"); 1261 `ex™ (1); 1265 dd = `hci_Ý’_dev ( dev_id ); 1266 ià( dd < 0) { 1267 `³¼Ü ("HCI device open failed"); 1268 `ex™ (1); 1271 ià( `hci_ü—‹_cÚÃùiÚ ( dd , & bdaddr , `htobs ( ±y³ ), 1272 `htobs (0x0000), rÞe , & hªdË , 25000) < 0) 1273 `³¼Ü ("Can't create connection"); 1275 `hci_þo£_dev ( dd ); 1276 } } 1280  ÝtiÚ gdc_ÝtiÚs [] = { 1285 cÚ¡ * gdc_h–p = 1289  $cmd_dc ( dev_id ,  ¬gc , ** ¬gv ) 1291  hci_cÚn_šfo_»q * ü ; 1292 bdaddr_t bdaddr ; 1293 ušt8_t »asÚ ; 1294  Ýt , dd ; 1296 `fÜ_—ch_Ýt ( Ýt , dc_ÝtiÚs , NULL ) { 1297  Ýt ) { 1299 `´štf ("%s", dc_h–p ); 1303 `h–³r_¬g (1, 2, & ¬gc , & ¬gv , dc_h–p ); 1305 `¡r2ba ( ¬gv [0], & bdaddr ); 1306 »asÚ = ( ¬gc > 1è? `©oi ( ¬gv [1]è: HCI_OE_USER_ENDED_CONNECTION ; 1308 ià( dev_id < 0) { 1309 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 1310 ià( dev_id < 0) { 1311 `årštf ( ¡d”r , "Not connected.\n"); 1312 `ex™ (1); 1316 dd = `hci_Ý’_dev ( dev_id ); 1317 ià( dd < 0) { 1318 `³¼Ü ("HCI device open failed"); 1319 `ex™ (1); 1322 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 1323 ià(! ü ) { 1324 `³¼Ü ("Can't‡llocate memory"); 1325 `ex™ (1); 1328 `baýy (& ü -> bdaddr , &bdaddr); 1329 ü -> ty³ = ACL_LINK ; 1330 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 1331 `³¼Ü ("Get connection info failed"); 1332 `ex™ (1); 1335 ià( `hci_discÚÃù ( dd , `htobs ( ü -> cÚn_šfo -> hªdË ), 1336 »asÚ , 10000) < 0) 1337 `³¼Ü ("Disconnect failed"); 1339 `ä“ ( ü ); 1341 `hci_þo£_dev ( dd ); 1342 } } 1346  ÝtiÚ g¤_ÝtiÚs [] = { 1351 cÚ¡ * g¤_h–p = 1355  $cmd_¤ ( dev_id ,  ¬gc , ** ¬gv ) 1357 bdaddr_t bdaddr ; 1358 ušt8_t rÞe ; 1359  Ýt , dd ; 1361 `fÜ_—ch_Ýt ( Ýt , ¤_ÝtiÚs , NULL ) { 1362  Ýt ) { 1364 `´štf ("%s", ¤_h–p ); 1368 `h–³r_¬g (2, 2, & ¬gc , & ¬gv , ¤_h–p ); 1370 `¡r2ba ( ¬gv [0], & bdaddr ); 1371  ¬gv [1][0]) { 1373 rÞe = 0; 1376 rÞe = 1; 1379 rÞe = `©oi ( ¬gv [1]); 1383 ià( dev_id < 0) { 1384 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 1385 ià( dev_id < 0) { 1386 `årštf ( ¡d”r , "Not connected.\n"); 1387 `ex™ (1); 1391 dd = `hci_Ý’_dev ( dev_id ); 1392 ià( dd < 0) { 1393 `³¼Ü ("HCI device open failed"); 1394 `ex™ (1); 1397 ià( `hci_sw™ch_rÞe ( dd , & bdaddr , rÞe , 10000) < 0) { 1398 `³¼Ü ("Switch„ole„equest failed"); 1399 `ex™ (1); 1402 `hci_þo£_dev ( dd ); 1403 } } 1407  ÝtiÚ grssi_ÝtiÚs [] = { 1412 cÚ¡ * grssi_h–p = 1416  $cmd_rssi ( dev_id ,  ¬gc , ** ¬gv ) 1418  hci_cÚn_šfo_»q * ü ; 1419 bdaddr_t bdaddr ; 1420 št8_t rssi ; 1421  Ýt , dd ; 1423 `fÜ_—ch_Ýt ( Ýt , rssi_ÝtiÚs , NULL ) { 1424  Ýt ) { 1426 `´štf ("%s", rssi_h–p ); 1430 `h–³r_¬g (1, 1, & ¬gc , & ¬gv , rssi_h–p ); 1432 `¡r2ba ( ¬gv [0], & bdaddr ); 1434 ià( dev_id < 0) { 1435 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 1436 ià( dev_id < 0) { 1437 `årštf ( ¡d”r , "Not connected.\n"); 1438 `ex™ (1); 1442 dd = `hci_Ý’_dev ( dev_id ); 1443 ià( dd < 0) { 1444 `³¼Ü ("HCI device open failed"); 1445 `ex™ (1); 1448 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 1449 ià(! ü ) { 1450 `³¼Ü ("Can't‡llocate memory"); 1451 `ex™ (1); 1454 `baýy (& ü -> bdaddr , &bdaddr); 1455 ü -> ty³ = ACL_LINK ; 1456 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 1457 `³¼Ü ("Get connection info failed"); 1458 `ex™ (1); 1461 ià( `hci_»ad_rssi ( dd , `htobs ( ü -> cÚn_šfo -> hªdË ), & rssi , 1000) < 0) { 1462 `³¼Ü ("Read RSSI failed"); 1463 `ex™ (1); 1466 `´štf ("RSSI„‘uº v®ue: %d\n", rssi ); 1468 `ä“ ( ü ); 1470 `hci_þo£_dev ( dd ); 1471 } } 1475  ÝtiÚ glq_ÝtiÚs [] = { 1480 cÚ¡ * glq_h–p = 1484  $cmd_lq ( dev_id ,  ¬gc , ** ¬gv ) 1486  hci_cÚn_šfo_»q * ü ; 1487 bdaddr_t bdaddr ; 1488 ušt8_t lq ; 1489  Ýt , dd ; 1491 `fÜ_—ch_Ýt ( Ýt , lq_ÝtiÚs , NULL ) { 1492  Ýt ) { 1494 `´štf ("%s", lq_h–p ); 1498 `h–³r_¬g (1, 1, & ¬gc , & ¬gv , lq_h–p ); 1500 `¡r2ba ( ¬gv [0], & bdaddr ); 1502 ià( dev_id < 0) { 1503 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 1504 ià( dev_id < 0) { 1505 `årštf ( ¡d”r , "Not connected.\n"); 1506 `ex™ (1); 1510 dd = `hci_Ý’_dev ( dev_id ); 1511 ià( dd < 0) { 1512 `³¼Ü ("HCI device open failed"); 1513 `ex™ (1); 1516 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 1517 ià(! ü ) { 1518 `³¼Ü ("Can't‡llocate memory"); 1519 `ex™ (1); 1522 `baýy (& ü -> bdaddr , &bdaddr); 1523 ü -> ty³ = ACL_LINK ; 1524 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 1525 `³¼Ü ("Get connection info failed"); 1526 `ex™ (1); 1529 ià( `hci_»ad_lšk_qu®™y ( dd , `htobs ( ü -> cÚn_šfo -> hªdË ), & lq , 1000) < 0) { 1530 `³¼Ü ("HCI„ead_link_quality„equest failed"); 1531 `ex™ (1); 1534 `´štf ("Lšk qu®™y: %d\n", lq ); 1536 `ä“ ( ü ); 1538 `hci_þo£_dev ( dd ); 1539 } } 1543  ÝtiÚ gl_ÝtiÚs [] = { 1548 cÚ¡ * gl_h–p = 1552  $cmd_l ( dev_id ,  ¬gc , ** ¬gv ) 1554  hci_cÚn_šfo_»q * ü ; 1555 bdaddr_t bdaddr ; 1556 ušt8_t ty³ ; 1557 št8_t Ëv– ; 1558  Ýt , dd ; 1560 `fÜ_—ch_Ýt ( Ýt , l_ÝtiÚs , NULL ) { 1561  Ýt ) { 1563 `´štf ("%s", l_h–p ); 1567 `h–³r_¬g (1, 2, & ¬gc , & ¬gv , l_h–p ); 1569 `¡r2ba ( ¬gv [0], & bdaddr ); 1570 ty³ = ( ¬gc > 1è? `©oi ( ¬gv [1]) : 0; 1572 ià( dev_id < 0) { 1573 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 1574 ià( dev_id < 0) { 1575 `årštf ( ¡d”r , "Not connected.\n"); 1576 `ex™ (1); 1580 dd = `hci_Ý’_dev ( dev_id ); 1581 ià( dd < 0) { 1582 `³¼Ü ("HCI device open failed"); 1583 `ex™ (1); 1586 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 1587 ià(! ü ) { 1588 `³¼Ü ("Can't‡llocate memory"); 1589 `ex™ (1); 1592 `baýy (& ü -> bdaddr , &bdaddr); 1593 ü -> ty³ = ACL_LINK ; 1594 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 1595 `³¼Ü ("Get connection info failed"); 1596 `ex™ (1); 1599 ià( `hci_»ad_Œªsm™_pow”_Ëv– ( dd , `htobs ( ü -> cÚn_šfo -> hªdË ), ty³ , & Ëv– , 1000) < 0) { 1600 `³¼Ü ("HCI„eadransmit…ower†evel„equest failed"); 1601 `ex™ (1); 1604 `´štf ("%sransmit…ower†evel: %d\n", 1605 ( ty³ =ð0è? "Cu¼’t" : "Maximum", Ëv– ); 1607 `ä“ ( ü ); 1609 `hci_þo£_dev ( dd ); 1610 } } 1614  ÝtiÚ gafh_ÝtiÚs [] = { 1619 cÚ¡ * gafh_h–p = 1623  $cmd_afh ( dev_id ,  ¬gc , ** ¬gv ) 1625  hci_cÚn_šfo_»q * ü ; 1626 bdaddr_t bdaddr ; 1627 ušt16_t hªdË ; 1628 ušt8_t mode , m­ [10]; 1629  Ýt , dd ; 1631 `fÜ_—ch_Ýt ( Ýt , afh_ÝtiÚs , NULL ) { 1632  Ýt ) { 1634 `´štf ("%s", afh_h–p ); 1638 `h–³r_¬g (1, 1, & ¬gc , & ¬gv , afh_h–p ); 1640 `¡r2ba ( ¬gv [0], & bdaddr ); 1642 ià( dev_id < 0) { 1643 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 1644 ià( dev_id < 0) { 1645 `årštf ( ¡d”r , "Not connected.\n"); 1646 `ex™ (1); 1650 dd = `hci_Ý’_dev ( dev_id ); 1651 ià( dd < 0) { 1652 `³¼Ü ("HCI device open failed"); 1653 `ex™ (1); 1656 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 1657 ià(! ü ) { 1658 `³¼Ü ("Can't‡llocate memory"); 1659 `ex™ (1); 1662 `baýy (& ü -> bdaddr , &bdaddr); 1663 ü -> ty³ = ACL_LINK ; 1664 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 1665 `³¼Ü ("Get connection info failed"); 1666 `ex™ (1); 1669 hªdË = `htobs ( ü -> cÚn_šfo ->handle); 1671 ià( `hci_»ad_afh_m­ ( dd , hªdË , & mode , m­ , 1000) < 0) { 1672 `³¼Ü ("HCI„ead AFH map„equest failed"); 1673 `ex™ (1); 1676 ià( mode == 0x01) { 1677  i ; 1678 `´štf ("AFH map: 0x"); 1679  i = 0; i < 10; i++) 1680 `´štf ("%02x", m­ [ i ]); 1681 `´štf ("\n"); 1683 `´štf ("AFH disabled\n"); 1685 `ä“ ( ü ); 1687 `hci_þo£_dev ( dd ); 1688 } } 1692  ÝtiÚ gýt_ÝtiÚs [] = { 1697 cÚ¡ * gýt_h–p = 1701  $cmd_ýt ( dev_id ,  ¬gc , ** ¬gv ) 1703  hci_cÚn_šfo_»q * ü ; 1704  hci_»que¡ rq ; 1705 £t_cÚn_±y³_ý ý ; 1706 evt_cÚn_±y³_chªged ½ ; 1707 bdaddr_t bdaddr ; 1708  ±y³ ; 1709  dd , Ýt ; 1711 `fÜ_—ch_Ýt ( Ýt , ýt_ÝtiÚs , NULL ) { 1712  Ýt ) { 1714 `´štf ("%s", ýt_h–p ); 1718 `h–³r_¬g (2, 2, & ¬gc , & ¬gv , ýt_h–p ); 1720 `¡r2ba ( ¬gv [0], & bdaddr ); 1721 `hci_¡¹Ýty³ ( ¬gv [1], & ±y³ ); 1723 ià( dev_id < 0) { 1724 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 1725 ià( dev_id < 0) { 1726 `årštf ( ¡d”r , "Not connected.\n"); 1727 `ex™ (1); 1731 dd = `hci_Ý’_dev ( dev_id ); 1732 ià( dd < 0) { 1733 `³¼Ü ("HCI device open failed"); 1734 `ex™ (1); 1737 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 1738 ià(! ü ) { 1739 `³¼Ü ("Can't‡llocate memory"); 1740 `ex™ (1); 1743 `baýy (& ü -> bdaddr , &bdaddr); 1744 ü -> ty³ = ACL_LINK ; 1745 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 1746 `³¼Ü ("Get connection info failed"); 1747 `ex™ (1); 1750 ý . hªdË = `htobs ( ü -> cÚn_šfo ->handle); 1751 ý . pkt_ty³ = ±y³ ; 1753 `mem£t (& rq , 0, (rq)); 1754 rq . ogf = OGF_LINK_CTL ; 1755 rq . ocf = OCF_SET_CONN_PTYPE ; 1756 rq . ý¬am = & ý ; 1757 rq . þ’ = SET_CONN_PTYPE_CP_SIZE ; 1758 rq . ½¬am = & ½ ; 1759 rq . ¾’ = EVT_CONN_PTYPE_CHANGED_SIZE ; 1760 rq . ev’t = EVT_CONN_PTYPE_CHANGED ; 1762 ià( `hci_£nd_»q ( dd , & rq , 100) < 0) { 1763 `³¼Ü ("Packetype change failed"); 1764 `ex™ (1); 1767 `ä“ ( ü ); 1769 `hci_þo£_dev ( dd ); 1770 } } 1774  ÝtiÚ gÍ_ÝtiÚs [] = { 1779 cÚ¡ * gÍ_h–p = 1783  $cmd_Í ( dev_id ,  ¬gc , ** ¬gv ) 1785  hci_cÚn_šfo_»q * ü ; 1786 bdaddr_t bdaddr ; 1787 ušt16_t pÞicy ; 1788  Ýt , dd ; 1790 `fÜ_—ch_Ýt ( Ýt , Í_ÝtiÚs , NULL ) { 1791  Ýt ) { 1793 `´štf ("%s", Í_h–p ); 1797 `h–³r_¬g (1, 2, & ¬gc , & ¬gv , Í_h–p ); 1799 `¡r2ba ( ¬gv [0], & bdaddr ); 1801 ià( dev_id < 0) { 1802 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 1803 ià( dev_id < 0) { 1804 `årštf ( ¡d”r , "Not connected.\n"); 1805 `ex™ (1); 1809 dd = `hci_Ý’_dev ( dev_id ); 1810 ià( dd < 0) { 1811 `³¼Ü ("HCI device open failed"); 1812 `ex™ (1); 1815 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 1816 ià(! ü ) { 1817 `³¼Ü ("Can't‡llocate memory"); 1818 `ex™ (1); 1821 `baýy (& ü -> bdaddr , &bdaddr); 1822 ü -> ty³ = ACL_LINK ; 1823 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 1824 `³¼Ü ("Get connection info failed"); 1825 `ex™ (1); 1828 ià( ¬gc == 1) { 1829 * ¡r ; 1830 ià( `hci_»ad_lšk_pÞicy ( dd , `htobs ( ü -> cÚn_šfo -> hªdË ), 1831 & pÞicy , 1000) < 0) { 1832 `³¼Ü ("HCI„ead_link_policy_settings„equest failed"); 1833 `ex™ (1); 1836 pÞicy = `btohs (policy); 1837 ¡r = `hci_Íto¡r ( pÞicy ); 1838 ià( ¡r ) { 1839 `´štf ("Lšk…Þicy s‘tšgs: %s\n", ¡r ); 1840 `bt_ä“ ( ¡r ); 1842 `årštf ( ¡d”r , "Invalig settings\n"); 1843 `ex™ (1); 1846  v® ; 1847 ià( `hci_¡¹Þp ( ¬gv [1], & v® ) < 0) { 1848 `årštf ( ¡d”r , "Invalig‡rguments\n"); 1849 `ex™ (1); 1851 pÞicy = v® ; 1853 ià( `hci_wr™e_lšk_pÞicy ( dd , `htobs ( ü -> cÚn_šfo -> hªdË ), 1854 `htobs ( pÞicy ), 1000) < 0) { 1855 `³¼Ü ("HCI write_link_policy_settings„equest failed"); 1856 `ex™ (1); 1860 `ä“ ( ü ); 1862 `hci_þo£_dev ( dd ); 1863 } } 1867  ÝtiÚ gl¡_ÝtiÚs [] = { 1872 cÚ¡ * gl¡_h–p = 1876  $cmd_l¡ ( dev_id ,  ¬gc , ** ¬gv ) 1878  hci_cÚn_šfo_»q * ü ; 1879 bdaddr_t bdaddr ; 1880 ušt16_t timeout ; 1881  Ýt , dd ; 1883 `fÜ_—ch_Ýt ( Ýt , l¡_ÝtiÚs , NULL ) { 1884  Ýt ) { 1886 `´štf ("%s", l¡_h–p ); 1890 `h–³r_¬g (1, 2, & ¬gc , & ¬gv , l¡_h–p ); 1892 `¡r2ba ( ¬gv [0], & bdaddr ); 1894 ià( dev_id < 0) { 1895 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 1896 ià( dev_id < 0) { 1897 `årštf ( ¡d”r , "Not connected.\n"); 1898 `ex™ (1); 1902 dd = `hci_Ý’_dev ( dev_id ); 1903 ià( dd < 0) { 1904 `³¼Ü ("HCI device open failed"); 1905 `ex™ (1); 1908 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 1909 ià(! ü ) { 1910 `³¼Ü ("Can't‡llocate memory"); 1911 `ex™ (1); 1914 `baýy (& ü -> bdaddr , &bdaddr); 1915 ü -> ty³ = ACL_LINK ; 1916 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 1917 `³¼Ü ("Get connection info failed"); 1918 `ex™ (1); 1921 ià( ¬gc == 1) { 1922 ià( `hci_»ad_lšk_su³rvisiÚ_timeout ( dd , `htobs ( ü -> cÚn_šfo -> hªdË ), 1923 & timeout , 1000) < 0) { 1924 `³¼Ü ("HCI„ead_link_supervision_timeout„equest failed"); 1925 `ex™ (1); 1928 timeout = `btohs (timeout); 1930 ià( timeout ) 1931 `´štf ("Link supervisionimeout: %u slots (%.2f msec)\n", 1932 timeout , ()imeout * 0.625); 1934 `´štf ("Link supervisionimeout‚everƒxpires\n"); 1936 timeout = `¡¹Þ ( ¬gv [1], NULL , 10); 1938 ià( `hci_wr™e_lšk_su³rvisiÚ_timeout ( dd , `htobs ( ü -> cÚn_šfo -> hªdË ), 1939 `htobs ( timeout ), 1000) < 0) { 1940 `³¼Ü ("HCI write_link_supervision_timeout„equest failed"); 1941 `ex™ (1); 1945 `ä“ ( ü ); 1947 `hci_þo£_dev ( dd ); 1948 } } 1952  ÝtiÚ gauth_ÝtiÚs [] = { 1957 cÚ¡ * gauth_h–p = 1961  $cmd_auth ( dev_id ,  ¬gc , ** ¬gv ) 1963  hci_cÚn_šfo_»q * ü ; 1964 bdaddr_t bdaddr ; 1965  Ýt , dd ; 1967 `fÜ_—ch_Ýt ( Ýt , auth_ÝtiÚs , NULL ) { 1968  Ýt ) { 1970 `´štf ("%s", auth_h–p ); 1974 `h–³r_¬g (1, 1, & ¬gc , & ¬gv , auth_h–p ); 1976 `¡r2ba ( ¬gv [0], & bdaddr ); 1978 ià( dev_id < 0) { 1979 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 1980 ià( dev_id < 0) { 1981 `årštf ( ¡d”r , "Not connected.\n"); 1982 `ex™ (1); 1986 dd = `hci_Ý’_dev ( dev_id ); 1987 ià( dd < 0) { 1988 `³¼Ü ("HCI device open failed"); 1989 `ex™ (1); 1992 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 1993 ià(! ü ) { 1994 `³¼Ü ("Can't‡llocate memory"); 1995 `ex™ (1); 1998 `baýy (& ü -> bdaddr , &bdaddr); 1999 ü -> ty³ = ACL_LINK ; 2000 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 2001 `³¼Ü ("Get connection info failed"); 2002 `ex™ (1); 2005 ià( `hci_auth’tiÿ‹_lšk ( dd , `htobs ( ü -> cÚn_šfo -> hªdË ), 25000) < 0) { 2006 `³¼Ü ("HCI‡uthentication„equest failed"); 2007 `ex™ (1); 2010 `ä“ ( ü ); 2012 `hci_þo£_dev ( dd ); 2013 } } 2017  ÝtiÚ g’c_ÝtiÚs [] = { 2022 cÚ¡ * g’c_h–p = 2026  $cmd_’c ( dev_id ,  ¬gc , ** ¬gv ) 2028  hci_cÚn_šfo_»q * ü ; 2029 bdaddr_t bdaddr ; 2030 ušt8_t ’üy± ; 2031  Ýt , dd ; 2033 `fÜ_—ch_Ýt ( Ýt , ’c_ÝtiÚs , NULL ) { 2034  Ýt ) { 2036 `´štf ("%s", ’c_h–p ); 2040 `h–³r_¬g (1, 2, & ¬gc , & ¬gv , ’c_h–p ); 2042 `¡r2ba ( ¬gv [0], & bdaddr ); 2044 ià( dev_id < 0) { 2045 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 2046 ià( dev_id < 0) { 2047 `årštf ( ¡d”r , "Not connected.\n"); 2048 `ex™ (1); 2052 dd = `hci_Ý’_dev ( dev_id ); 2053 ià( dd < 0) { 2054 `³¼Ü ("HCI device open failed"); 2055 `ex™ (1); 2058 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 2059 ià(! ü ) { 2060 `³¼Ü ("Can't‡llocate memory"); 2061 `ex™ (1); 2064 `baýy (& ü -> bdaddr , &bdaddr); 2065 ü -> ty³ = ACL_LINK ; 2066 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 2067 `³¼Ü ("Get connection info failed"); 2068 `ex™ (1); 2071 ’üy± = ( ¬gc > 1è? `©oi ( ¬gv [1]) : 1; 2073 ià( `hci_’üy±_lšk ( dd , `htobs ( ü -> cÚn_šfo -> hªdË ), ’üy± , 25000) < 0) { 2074 `³¼Ü ("HCI setƒncryption„equest failed"); 2075 `ex™ (1); 2078 `ä“ ( ü ); 2080 `hci_þo£_dev ( dd ); 2081 } } 2085  ÝtiÚ gkey_ÝtiÚs [] = { 2090 cÚ¡ * gkey_h–p = 2094  $cmd_key ( dev_id ,  ¬gc , ** ¬gv ) 2096  hci_cÚn_šfo_»q * ü ; 2097 bdaddr_t bdaddr ; 2098  Ýt , dd ; 2100 `fÜ_—ch_Ýt ( Ýt , key_ÝtiÚs , NULL ) { 2101  Ýt ) { 2103 `´štf ("%s", key_h–p ); 2107 `h–³r_¬g (1, 1, & ¬gc , & ¬gv , key_h–p ); 2109 `¡r2ba ( ¬gv [0], & bdaddr ); 2111 ià( dev_id < 0) { 2112 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 2113 ià( dev_id < 0) { 2114 `årštf ( ¡d”r , "Not connected.\n"); 2115 `ex™ (1); 2119 dd = `hci_Ý’_dev ( dev_id ); 2120 ià( dd < 0) { 2121 `³¼Ü ("HCI device open failed"); 2122 `ex™ (1); 2125 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 2126 ià(! ü ) { 2127 `³¼Ü ("Can't‡llocate memory"); 2128 `ex™ (1); 2131 `baýy (& ü -> bdaddr , &bdaddr); 2132 ü -> ty³ = ACL_LINK ; 2133 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 2134 `³¼Ü ("Get connection info failed"); 2135 `ex™ (1); 2138 ià( `hci_chªge_lšk_key ( dd , `htobs ( ü -> cÚn_šfo -> hªdË ), 25000) < 0) { 2139 `³¼Ü ("Changing†ink key failed"); 2140 `ex™ (1); 2143 `ä“ ( ü ); 2145 `hci_þo£_dev ( dd ); 2146 } } 2150  ÝtiÚ gþkoff_ÝtiÚs [] = { 2155 cÚ¡ * gþkoff_h–p = 2159  $cmd_þkoff ( dev_id ,  ¬gc , ** ¬gv ) 2161  hci_cÚn_šfo_»q * ü ; 2162 bdaddr_t bdaddr ; 2163 ušt16_t off£t ; 2164  Ýt , dd ; 2166 `fÜ_—ch_Ýt ( Ýt , þkoff_ÝtiÚs , NULL ) { 2167  Ýt ) { 2169 `´štf ("%s", þkoff_h–p ); 2173 `h–³r_¬g (1, 1, & ¬gc , & ¬gv , þkoff_h–p ); 2175 `¡r2ba ( ¬gv [0], & bdaddr ); 2177 ià( dev_id < 0) { 2178 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 2179 ià( dev_id < 0) { 2180 `årštf ( ¡d”r , "Not connected.\n"); 2181 `ex™ (1); 2185 dd = `hci_Ý’_dev ( dev_id ); 2186 ià( dd < 0) { 2187 `³¼Ü ("HCI device open failed"); 2188 `ex™ (1); 2191 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 2192 ià(! ü ) { 2193 `³¼Ü ("Can't‡llocate memory"); 2194 `ex™ (1); 2197 `baýy (& ü -> bdaddr , &bdaddr); 2198 ü -> ty³ = ACL_LINK ; 2199 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 2200 `³¼Ü ("Get connection info failed"); 2201 `ex™ (1); 2204 ià( `hci_»ad_þock_off£t ( dd , `htobs ( ü -> cÚn_šfo -> hªdË ), & off£t , 1000) < 0) { 2205 `³¼Ü ("Reading clock offset failed"); 2206 `ex™ (1); 2209 `´štf ("Clock off£t: 0x%4.4x\n", `btohs ( off£t )); 2211 `ä“ ( ü ); 2213 `hci_þo£_dev ( dd ); 2214 } } 2218  ÝtiÚ gþock_ÝtiÚs [] = { 2223 cÚ¡ * gþock_h–p = 2227  $cmd_þock ( dev_id ,  ¬gc , ** ¬gv ) 2229  hci_cÚn_šfo_»q * ü ; 2230 bdaddr_t bdaddr ; 2231 ušt8_t which ; 2232 ušt32_t hªdË , þock ; 2233 ušt16_t accu¿cy ; 2234  Ýt , dd ; 2236 `fÜ_—ch_Ýt ( Ýt , þock_ÝtiÚs , NULL ) { 2237  Ýt ) { 2239 `´štf ("%s", þock_h–p ); 2243 `h–³r_¬g (0, 2, & ¬gc , & ¬gv , þock_h–p ); 2245 ià( ¬gc > 0) 2246 `¡r2ba ( ¬gv [0], & bdaddr ); 2248 `baýy (& bdaddr , BDADDR_ANY ); 2250 ià( dev_id < 0 && ! `bacmp (& bdaddr , BDADDR_ANY )) 2251 dev_id = `hci_g‘_rou‹ ( NULL ); 2253 ià( dev_id < 0) { 2254 dev_id = `hci_fÜ_—ch_dev ( HCI_UP , fšd_cÚn , (è& bdaddr ); 2255 ià( dev_id < 0) { 2256 `årštf ( ¡d”r , "Not connected.\n"); 2257 `ex™ (1); 2261 dd = `hci_Ý’_dev ( dev_id ); 2262 ià( dd < 0) { 2263 `³¼Ü ("HCI device open failed"); 2264 `ex™ (1); 2267 ià( `bacmp (& bdaddr , BDADDR_ANY )) { 2268 ü = `m®loc ((*üè+ ( hci_cÚn_šfo )); 2269 ià(! ü ) { 2270 `³¼Ü ("Can't‡llocate memory"); 2271 `ex™ (1); 2274 `baýy (& ü -> bdaddr , &bdaddr); 2275 ü -> ty³ = ACL_LINK ; 2276 ià( `ioùl ( dd , HCIGETCONNINFO , (è ü ) < 0) { 2277 `³¼Ü ("Get connection info failed"); 2278 `ä“ ( ü ); 2279 `ex™ (1); 2282 hªdË = `htobs ( ü -> cÚn_šfo ->handle); 2283 which = ( ¬gc > 1è? `©oi ( ¬gv [1]) : 0x01; 2285 `ä“ ( ü ); 2287 hªdË = 0x00; 2288 which = 0x00; 2291 ià( `hci_»ad_þock ( dd , hªdË , which , & þock , & accu¿cy , 1000) < 0) { 2292 `³¼Ü ("Reading clock failed"); 2293 `ex™ (1); 2296 accu¿cy = `btohs (accuracy); 2298 `´štf ("Clock: 0x%4.4x\n", `btohl ( þock )); 2299 `´štf ("Accu¿cy: %.2àm£c\n", (è accu¿cy * 0.3125); 2301 `hci_þo£_dev ( dd ); 2302 } } 2304  $»ad_æags ( ušt8_t * æags , cÚ¡ ušt8_ˆ* d©a , size_t size ) 2306 size_t off£t ; 2308 ià(! æags || ! d©a ) 2309  - EINVAL ; 2311 off£t = 0; 2312  off£t < size ) { 2313 ušt8_t Ën = d©a [ off£t ]; 2314 ušt8_t ty³ ; 2317 ià( Ën == 0) 2320 ià( Ën + off£t > size ) 2323 ty³ = d©a [ off£t + 1]; 2325 ià( ty³ =ð FLAGS_AD_TYPE ) { 2326 * æags = d©a [ off£t + 2]; 2330 off£t +ð1 + Ën ; 2333  - ENOENT ; 2334 } } 2336  $check_»pÜt_fž‹r ( ušt8_t ´oûdu» , Ë_adv”tisšg_šfo * šfo ) 2338 ušt8_t æags ; 2341 ià( ´oûdu» == 0) 2345 ià( `»ad_æags (& æags , šfo -> d©a , info-> Ëngth )) 2348  ´oûdu» ) { 2350 ià( æags & FLAGS_LIMITED_MODE_BIT ) 2354 ià( æags & ( FLAGS_LIMITED_MODE_BIT | FLAGS_GENERAL_MODE_BIT )) 2358 `årštf ( ¡d”r , "Unknown discovery…rocedure\n"); 2362 } } 2364  $sigšt_hªdËr ( sig ) 2366 sigÇl_»ûived = sig ; 2367 } } 2369  $eœ_·r£_Çme ( ušt8_t * eœ , size_t eœ_Ën , 2370 * buf , size_t buf_Ën ) 2372 size_t off£t ; 2374 off£t = 0; 2375  off£t < eœ_Ën ) { 2376 ušt8_t f›ld_Ën = eœ [0]; 2377 size_t Çme_Ën ; 2380 ià( f›ld_Ën == 0) 2383 ià( off£t + f›ld_Ën > eœ_Ën ) 2384  çžed ; 2386  eœ [1]) { 2387  EIR_NAME_SHORT : 2388  EIR_NAME_COMPLETE : 2389 Çme_Ën = f›ld_Ën - 1; 2390 ià( Çme_Ën > buf_Ën ) 2391  çžed ; 2393 `memýy ( buf , & eœ [2], Çme_Ën ); 2397 off£t +ð f›ld_Ën + 1; 2398 eœ +ð f›ld_Ën + 1; 2401 çžed : 2402 `¢´štf ( buf , buf_Ën , "(unknown)"); 2403 } } 2405  $´št_adv”tisšg_deviûs ( dd , ušt8_t fž‹r_ty³ ) 2407  buf [ HCI_MAX_EVENT_SIZE ], * ±r ; 2408  hci_fž‹r nf , of ; 2409  sigaùiÚ § ; 2410 sockËn_t Þ’ ; 2411  Ën ; 2413 Þ’ = ( of ); 2414 ià( `g‘sockÝt ( dd , SOL_HCI , HCI_FILTER , & of , & Þ’ ) < 0) { 2415 `´štf ("Could‚ot get socket options\n"); 2419 `hci_fž‹r_þ—r (& nf ); 2420 `hci_fž‹r_£t_±y³ ( HCI_EVENT_PKT , & nf ); 2421 `hci_fž‹r_£t_ev’t ( EVT_LE_META_EVENT , & nf ); 2423 ià( `£tsockÝt ( dd , SOL_HCI , HCI_FILTER , & nf , (nf)) < 0) { 2424 `´štf ("Could‚ot set socket options\n"); 2428 `mem£t (& § , 0, (sa)); 2429 § . §_æags = SA_NOCLDSTOP ; 2430 § . §_hªdËr = sigšt_hªdËr ; 2431 `sigaùiÚ ( SIGINT , & § , NULL ); 2434 evt_Ë_m‘a_ev’t * m‘a ; 2435 Ë_adv”tisšg_šfo * šfo ; 2436  addr [18]; 2438 ( Ën = `»ad ( dd , buf , (buf))) < 0) { 2439 ià( ”ºo =ð EINTR && sigÇl_»ûived =ð SIGINT ) { 2440 Ën = 0; 2441  dÚe ; 2444 ià( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINTR ) 2446  dÚe ; 2449 ±r = buf + (1 + HCI_EVENT_HDR_SIZE ); 2450 Ën -ð(1 + HCI_EVENT_HDR_SIZE ); 2452 m‘a = (*è ±r ; 2454 ià( m‘a -> subev’t != 0x02) 2455  dÚe ; 2458 šfo = ( Ë_adv”tisšg_šfo *è( m‘a -> d©a + 1); 2459 ià( `check_»pÜt_fž‹r ( fž‹r_ty³ , šfo )) { 2460  Çme [30]; 2462 `mem£t ( Çme , 0, (name)); 2464 `ba2¡r (& šfo -> bdaddr , addr ); 2465 `eœ_·r£_Çme ( šfo -> d©a , info-> Ëngth , 2466 Çme , (name) - 1); 2468 `´štf ("% %s\n", addr , Çme ); 2472 dÚe : 2473 `£tsockÝt ( dd , SOL_HCI , HCI_FILTER , & of , (of)); 2475 ià( Ën < 0) 2479 } } 2481  ÝtiÚ gËsÿn_ÝtiÚs [] = { 2492 cÚ¡ * gËsÿn_h–p = 2501  $cmd_Ësÿn ( dev_id ,  ¬gc , ** ¬gv ) 2503  ”r , Ýt , dd ; 2504 ušt8_t own_ty³ = LE_PUBLIC_ADDRESS ; 2505 ušt8_t sÿn_ty³ = 0x01; 2506 ušt8_t fž‹r_ty³ = 0; 2507 ušt8_t fž‹r_pÞicy = 0x00; 2508 ušt16_t š‹rv® = `htobs (0x0010); 2509 ušt16_t wšdow = `htobs (0x0010); 2510 ušt8_t fž‹r_dup = 0x01; 2512 `fÜ_—ch_Ýt ( Ýt , Ësÿn_ÝtiÚs , NULL ) { 2513  Ýt ) { 2515 own_ty³ = LE_RANDOM_ADDRESS ; 2518 own_ty³ = LE_RANDOM_ADDRESS ; 2521 sÿn_ty³ = 0x00; 2524 fž‹r_pÞicy = 0x01; 2527 fž‹r_ty³ = Ýrg [0]; 2528 ià( fž‹r_ty³ != 'g' && filter_type != 'l') { 2529 `årštf ( ¡d”r , "Unknown discovery…rocedure\n"); 2530 `ex™ (1); 2533 š‹rv® = `htobs (0x0012); 2534 wšdow = `htobs (0x0012); 2537 fž‹r_dup = 0x00; 2540 `´štf ("%s", Ësÿn_h–p ); 2544 `h–³r_¬g (0, 1, & ¬gc , & ¬gv , Ësÿn_h–p ); 2546 ià( dev_id < 0) 2547 dev_id = `hci_g‘_rou‹ ( NULL ); 2549 dd = `hci_Ý’_dev ( dev_id ); 2550 ià( dd < 0) { 2551 `³¼Ü ("Could‚ot open device"); 2552 `ex™ (1); 2555 ”r = `hci_Ë_£t_sÿn_·¿m‘”s ( dd , sÿn_ty³ , š‹rv® , wšdow , 2556 own_ty³ , fž‹r_pÞicy , 10000); 2557 ià( ”r < 0) { 2558 `³¼Ü ("Set scan…arameters failed"); 2559 `ex™ (1); 2562 ”r = `hci_Ë_£t_sÿn_’abË ( dd , 0x01, fž‹r_dup , 10000); 2563 ià( ”r < 0) { 2564 `³¼Ü ("Enable scan failed"); 2565 `ex™ (1); 2568 `´štf ("LE Scan ...\n"); 2570 ”r = `´št_adv”tisšg_deviûs ( dd , fž‹r_ty³ ); 2571 ià( ”r < 0) { 2572 `³¼Ü ("Could‚ot„eceive‡dvertisingƒvents"); 2573 `ex™ (1); 2576 ”r = `hci_Ë_£t_sÿn_’abË ( dd , 0x00, fž‹r_dup , 10000); 2577 ià( ”r < 0) { 2578 `³¼Ü ("Disable scan failed"); 2579 `ex™ (1); 2582 `hci_þo£_dev ( dd ); 2583 } } 2585  ÝtiÚ gËšfo_ÝtiÚs [] = { 2592 cÚ¡ * gËšfo_h–p = 2596  $cmd_Ëšfo ( dev_id ,  ¬gc , ** ¬gv ) 2598 bdaddr_t bdaddr ; 2599 ušt16_t hªdË ; 2600 ušt8_t ã©u»s [8]; 2601  hci_v”siÚ v”siÚ ; 2602 ušt16_t š‹rv® , Ï‹ncy , max_û_Ëngth , max_š‹rv® , mš_û_Ëngth ; 2603 ušt16_t mš_š‹rv® , su³rvisiÚ_timeout , wšdow ; 2604 ušt8_t š™ŸtÜ_fž‹r , own_bdaddr_ty³ , ³”_bdaddr_ty³ ; 2605  Ýt , ”r , dd ; 2607 own_bdaddr_ty³ = LE_PUBLIC_ADDRESS ; 2608 ³”_bdaddr_ty³ = LE_PUBLIC_ADDRESS ; 2610 `fÜ_—ch_Ýt ( Ýt , Ëšfo_ÝtiÚs , NULL ) { 2611  Ýt ) { 2613 own_bdaddr_ty³ = LE_RANDOM_ADDRESS ; 2616 ³”_bdaddr_ty³ = LE_RANDOM_ADDRESS ; 2619 `´štf ("%s", Ëšfo_h–p ); 2623 `h–³r_¬g (1, 1, & ¬gc , & ¬gv , Ëšfo_h–p ); 2625 `¡r2ba ( ¬gv [0], & bdaddr ); 2627 `´štf ("Requesting information ...\n"); 2629 ià( dev_id < 0) 2630 dev_id = `hci_g‘_rou‹ ( NULL ); 2632 dd = `hci_Ý’_dev ( dev_id ); 2633 ià( dd < 0) { 2634 `³¼Ü ("Could‚ot open device"); 2635 `ex™ (1); 2638 š‹rv® = `htobs (0x0004); 2639 wšdow = `htobs (0x0004); 2640 š™ŸtÜ_fž‹r = 0; 2641 mš_š‹rv® = `htobs (0x000F); 2642 max_š‹rv® = `htobs (0x000F); 2643 Ï‹ncy = `htobs (0x0000); 2644 su³rvisiÚ_timeout = `htobs (0x0C80); 2645 mš_û_Ëngth = `htobs (0x0000); 2646 max_û_Ëngth = `htobs (0x0000); 2648 ”r = `hci_Ë_ü—‹_cÚn ( dd , š‹rv® , wšdow , š™ŸtÜ_fž‹r , 2649 ³”_bdaddr_ty³ , bdaddr , own_bdaddr_ty³ , mš_š‹rv® , 2650 max_š‹rv® , Ï‹ncy , su³rvisiÚ_timeout , 2651 mš_û_Ëngth , max_û_Ëngth , & hªdË , 25000); 2652 ià( ”r < 0) { 2653 `³¼Ü ("Could‚ot create connection"); 2654 `ex™ (1); 2657 `´štf ("\tHªdË: %d (0x%04x)\n", hªdË , handle); 2659 ià( `hci_»ad_»mÙe_v”siÚ ( dd , hªdË , & v”siÚ , 20000) == 0) { 2660 * v” = `lmp_v”to¡r ( v”siÚ . lmp_v” ); 2661 `´štf ("\tLMP Version: %s (0x%x) LMP Subversion: 0x%x\n" 2663 v” ? ver : "n/a", 2664 v”siÚ . lmp_v” , 2665 v”siÚ . lmp_subv” , 2666 `bt_compidto¡r ( v”siÚ . mªuçùu»r ), 2667 v”siÚ . mªuçùu»r ); 2668 ià( v” ) 2669 `bt_ä“ ( v” ); 2672 `mem£t ( ã©u»s , 0, (features)); 2673 `hci_Ë_»ad_»mÙe_ã©u»s ( dd , hªdË , ã©u»s , 20000); 2675 `´štf ("\tFeatures: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x " 2677 ã©u»s [0], features[1], features[2], features[3], 2678 ã©u»s [4], features[5], features[6], features[7]); 2680 `u¦“p (10000); 2681 `hci_discÚÃù ( dd , hªdË , HCI_OE_USER_ENDED_CONNECTION , 10000); 2683 `hci_þo£_dev ( dd ); 2684 } } 2686  ÝtiÚ gËcc_ÝtiÚs [] = { 2694 cÚ¡ * gËcc_h–p = 2699  $cmd_Ëcc ( dev_id ,  ¬gc , ** ¬gv ) 2701  ”r , Ýt , dd ; 2702 bdaddr_t bdaddr ; 2703 ušt16_t š‹rv® , Ï‹ncy , max_û_Ëngth , max_š‹rv® , mš_û_Ëngth ; 2704 ušt16_t mš_š‹rv® , su³rvisiÚ_timeout , wšdow , hªdË ; 2705 ušt8_t š™ŸtÜ_fž‹r , own_bdaddr_ty³ , ³”_bdaddr_ty³ ; 2707 own_bdaddr_ty³ = LE_PUBLIC_ADDRESS ; 2708 ³”_bdaddr_ty³ = LE_PUBLIC_ADDRESS ; 2709 š™ŸtÜ_fž‹r = 0; 2711 `fÜ_—ch_Ýt ( Ýt , Ëcc_ÝtiÚs , NULL ) { 2712  Ýt ) { 2714 own_bdaddr_ty³ = LE_RANDOM_ADDRESS ; 2717 ³”_bdaddr_ty³ = LE_RANDOM_ADDRESS ; 2720 š™ŸtÜ_fž‹r = 0x01; 2723 `´štf ("%s", Ëcc_h–p ); 2727 `h–³r_¬g (0, 1, & ¬gc , & ¬gv , Ëcc_h–p ); 2729 ià( dev_id < 0) 2730 dev_id = `hci_g‘_rou‹ ( NULL ); 2732 dd = `hci_Ý’_dev ( dev_id ); 2733 ià( dd < 0) { 2734 `³¼Ü ("Could‚ot open device"); 2735 `ex™ (1); 2738 `mem£t (& bdaddr , 0, ( bdaddr_t )); 2739 ià( ¬gv [0]) 2740 `¡r2ba ( ¬gv [0], & bdaddr ); 2742 š‹rv® = `htobs (0x0004); 2743 wšdow = `htobs (0x0004); 2744 mš_š‹rv® = `htobs (0x000F); 2745 max_š‹rv® = `htobs (0x000F); 2746 Ï‹ncy = `htobs (0x0000); 2747 su³rvisiÚ_timeout = `htobs (0x0C80); 2748 mš_û_Ëngth = `htobs (0x0001); 2749 max_û_Ëngth = `htobs (0x0001); 2751 ”r = `hci_Ë_ü—‹_cÚn ( dd , š‹rv® , wšdow , š™ŸtÜ_fž‹r , 2752 ³”_bdaddr_ty³ , bdaddr , own_bdaddr_ty³ , mš_š‹rv® , 2753 max_š‹rv® , Ï‹ncy , su³rvisiÚ_timeout , 2754 mš_û_Ëngth , max_û_Ëngth , & hªdË , 25000); 2755 ià( ”r < 0) { 2756 `³¼Ü ("Could‚ot create connection"); 2757 `ex™ (1); 2760 `´štf ("CÚÃùiÚ hªdË %d\n", hªdË ); 2762 `hci_þo£_dev ( dd ); 2763 } } 2765  ÝtiÚ gËwÏdd_ÝtiÚs [] = { 2771 cÚ¡ * gËwÏdd_h–p = 2775  $cmd_ËwÏdd ( dev_id ,  ¬gc , ** ¬gv ) 2777  ”r , Ýt , dd ; 2778 bdaddr_t bdaddr ; 2779 ušt8_t bdaddr_ty³ = LE_PUBLIC_ADDRESS ; 2781 `fÜ_—ch_Ýt ( Ýt , ËwÏdd_ÝtiÚs , NULL ) { 2782  Ýt ) { 2784 bdaddr_ty³ = LE_RANDOM_ADDRESS ; 2787 `´štf ("%s", ËwÏdd_h–p ); 2792 `h–³r_¬g (1, 1, & ¬gc , & ¬gv , ËwÏdd_h–p ); 2794 ià( dev_id < 0) 2795 dev_id = `hci_g‘_rou‹ ( NULL ); 2797 dd = `hci_Ý’_dev ( dev_id ); 2798 ià( dd < 0) { 2799 `³¼Ü ("Could‚ot open device"); 2800 `ex™ (1); 2803 `¡r2ba ( ¬gv [0], & bdaddr ); 2805 ”r = `hci_Ë_add_wh™e_li¡ ( dd , & bdaddr , bdaddr_ty³ , 1000); 2806 `hci_þo£_dev ( dd ); 2808 ià( ”r < 0) { 2809 ”r = - ”ºo ; 2810 `årštf ( ¡d”r , "Can't‡ddo white†ist: %s(%d)\n", 2811 `¡»¼Ü (- ”r ), -err); 2812 `ex™ (1); 2814 } } 2816  ÝtiÚ gËwÌm_ÝtiÚs [] = { 2821 cÚ¡ * gËwÌm_h–p = 2825  $cmd_ËwÌm ( dev_id ,  ¬gc , ** ¬gv ) 2827  ”r , Ýt , dd ; 2828 bdaddr_t bdaddr ; 2830 `fÜ_—ch_Ýt ( Ýt , ËwÌm_ÝtiÚs , NULL ) { 2831  Ýt ) { 2833 `´štf ("%s", ËwÌm_h–p ); 2838 `h–³r_¬g (1, 1, & ¬gc , & ¬gv , ËwÌm_h–p ); 2840 ià( dev_id < 0) 2841 dev_id = `hci_g‘_rou‹ ( NULL ); 2843 dd = `hci_Ý’_dev ( dev_id ); 2844 ià( dd < 0) { 2845 `³¼Ü ("Could‚ot open device"); 2846 `ex™ (1); 2849 `¡r2ba ( ¬gv [0], & bdaddr ); 2851 ”r = `hci_Ë_rm_wh™e_li¡ ( dd , & bdaddr , LE_PUBLIC_ADDRESS , 1000); 2852 `hci_þo£_dev ( dd ); 2854 ià( ”r < 0) { 2855 ”r = ”ºo ; 2856 `årštf ( ¡d”r , "Can't„emove from white†ist: %s(%d)\n", 2857 `¡»¼Ü ( ”r ),ƒrr); 2858 `ex™ (1); 2860 } } 2862  ÝtiÚ gËwlsz_ÝtiÚs [] = { 2867 cÚ¡ * gËwlsz_h–p = 2871  $cmd_Ëwlsz ( dev_id ,  ¬gc , ** ¬gv ) 2873  ”r , dd , Ýt ; 2874 ušt8_t size ; 2876 `fÜ_—ch_Ýt ( Ýt , Ëwlsz_ÝtiÚs , NULL ) { 2877  Ýt ) { 2879 `´štf ("%s", Ëwlsz_h–p ); 2884 `h–³r_¬g (0, 0, & ¬gc , & ¬gv , Ëwlsz_h–p ); 2886 ià( dev_id < 0) 2887 dev_id = `hci_g‘_rou‹ ( NULL ); 2889 dd = `hci_Ý’_dev ( dev_id ); 2890 ià( dd < 0) { 2891 `³¼Ü ("Could‚ot open device"); 2892 `ex™ (1); 2895 ”r = `hci_Ë_»ad_wh™e_li¡_size ( dd , & size , 1000); 2896 `hci_þo£_dev ( dd ); 2898 ià( ”r < 0) { 2899 ”r = - ”ºo ; 2900 `årštf ( ¡d”r , "Can't„ead white†ist size: %s(%d)\n", 2901 `¡»¼Ü (- ”r ), -err); 2902 `ex™ (1); 2905 `´štf ("Wh™li¡ size: %d\n", size ); 2906 } } 2908  ÝtiÚ gËwlþr_ÝtiÚs [] = { 2913 cÚ¡ * gËwlþr_h–p = 2917  $cmd_Ëwlþr ( dev_id ,  ¬gc , ** ¬gv ) 2919  ”r , dd , Ýt ; 2921 `fÜ_—ch_Ýt ( Ýt , Ëwlþr_ÝtiÚs , NULL ) { 2922  Ýt ) { 2924 `´štf ("%s", Ëwlþr_h–p ); 2929 `h–³r_¬g (0, 0, & ¬gc , & ¬gv , Ëwlþr_h–p ); 2931 ià( dev_id < 0) 2932 dev_id = `hci_g‘_rou‹ ( NULL ); 2934 dd = `hci_Ý’_dev ( dev_id ); 2935 ià( dd < 0) { 2936 `³¼Ü ("Could‚ot open device"); 2937 `ex™ (1); 2940 ”r = `hci_Ë_þ—r_wh™e_li¡ ( dd , 1000); 2941 `hci_þo£_dev ( dd ); 2943 ià( ”r < 0) { 2944 ”r = - ”ºo ; 2945 `årštf ( ¡d”r , "Can't clear white†ist: %s(%d)\n", 2946 `¡»¼Ü (- ”r ), -err); 2947 `ex™ (1); 2949 } } 2951  ÝtiÚ g˾add_ÝtiÚs [] = { 2959 cÚ¡ * g˾add_h–p = 2963  $cmd_˾add ( dev_id ,  ¬gc , ** ¬gv ) 2965  ”r , Ýt , dd ; 2966 bdaddr_t bdaddr ; 2967 ušt8_t bdaddr_ty³ = LE_PUBLIC_ADDRESS ; 2968 ušt8_t loÿl_œk [16], ³”_œk [16]; 2970 `mem£t ( loÿl_œk , 0, 16); 2971 `mem£t ( ³”_œk , 0, 16); 2973 `fÜ_—ch_Ýt ( Ýt , ˾add_ÝtiÚs , NULL ) { 2974  Ýt ) { 2976 bdaddr_ty³ = LE_RANDOM_ADDRESS ; 2979 `¡r2buf ( Ýrg , loÿl_œk , 16); 2982 `¡r2buf ( Ýrg , ³”_œk , 16); 2985 `´štf ("%s", ˾add_h–p ); 2990 `h–³r_¬g (1, 1, & ¬gc , & ¬gv , ˾add_h–p ); 2992 ià( dev_id < 0) 2993 dev_id = `hci_g‘_rou‹ ( NULL ); 2995 dd = `hci_Ý’_dev ( dev_id ); 2996 ià( dd < 0) { 2997 `³¼Ü ("Could‚ot open device"); 2998 `ex™ (1); 3001 `¡r2ba ( ¬gv [0], & bdaddr ); 3003 ”r = `hci_Ë_add_»sÞvšg_li¡ ( dd , & bdaddr , bdaddr_ty³ , 3004 ³”_œk , loÿl_œk , 1000); 3005 `hci_þo£_dev ( dd ); 3007 ià( ”r < 0) { 3008 ”r = - ”ºo ; 3009 `årštf ( ¡d”r , "Can't‡ddo„esolving†ist: %s(%d)\n", 3010 `¡»¼Ü (- ”r ), -err); 3011 `ex™ (1); 3013 } } 3015  ÝtiÚ g˾rm_ÝtiÚs [] = { 3020 cÚ¡ * g˾rm_h–p = 3024  $cmd_˾rm ( dev_id ,  ¬gc , ** ¬gv ) 3026  ”r , Ýt , dd ; 3027 bdaddr_t bdaddr ; 3029 `fÜ_—ch_Ýt ( Ýt , ˾rm_ÝtiÚs , NULL ) { 3030  Ýt ) { 3032 `´štf ("%s", ˾rm_h–p ); 3037 `h–³r_¬g (1, 1, & ¬gc , & ¬gv , ˾rm_h–p ); 3039 ià( dev_id < 0) 3040 dev_id = `hci_g‘_rou‹ ( NULL ); 3042 dd = `hci_Ý’_dev ( dev_id ); 3043 ià( dd < 0) { 3044 `³¼Ü ("Could‚ot open device"); 3045 `ex™ (1); 3048 `¡r2ba ( ¬gv [0], & bdaddr ); 3050 ”r = `hci_Ë_rm_»sÞvšg_li¡ ( dd , & bdaddr , LE_PUBLIC_ADDRESS , 1000); 3051 `hci_þo£_dev ( dd ); 3053 ià( ”r < 0) { 3054 ”r = ”ºo ; 3055 `årštf ( ¡d”r , "Can't„emove from„esolving†ist: %s(%d)\n", 3056 `¡»¼Ü ( ”r ),ƒrr); 3057 `ex™ (1); 3059 } } 3061  ÝtiÚ g˾þr_ÝtiÚs [] = { 3066 cÚ¡ * g˾þr_h–p = 3070  $cmd_˾þr ( dev_id ,  ¬gc , ** ¬gv ) 3072  ”r , dd , Ýt ; 3074 `fÜ_—ch_Ýt ( Ýt , ˾þr_ÝtiÚs , NULL ) { 3075  Ýt ) { 3077 `´štf ("%s", ˾þr_h–p ); 3082 `h–³r_¬g (0, 0, & ¬gc , & ¬gv , ˾þr_h–p ); 3084 ià( dev_id < 0) 3085 dev_id = `hci_g‘_rou‹ ( NULL ); 3087 dd = `hci_Ý’_dev ( dev_id ); 3088 ià( dd < 0) { 3089 `³¼Ü ("Could‚ot open device"); 3090 `ex™ (1); 3093 ”r = `hci_Ë_þ—r_»sÞvšg_li¡ ( dd , 1000); 3094 `hci_þo£_dev ( dd ); 3096 ià( ”r < 0) { 3097 ”r = - ”ºo ; 3098 `årštf ( ¡d”r , "Can't clear„esolving†ist: %s(%d)\n", 3099 `¡»¼Ü (- ”r ), -err); 3100 `ex™ (1); 3102 } } 3104  ÝtiÚ g˾sz_ÝtiÚs [] = { 3109 cÚ¡ * g˾sz_h–p = 3113  $cmd_˾sz ( dev_id ,  ¬gc , ** ¬gv ) 3115  ”r , dd , Ýt ; 3116 ušt8_t size ; 3118 `fÜ_—ch_Ýt ( Ýt , ˾sz_ÝtiÚs , NULL ) { 3119  Ýt ) { 3121 `´štf ("%s", ˾sz_h–p ); 3126 `h–³r_¬g (0, 0, & ¬gc , & ¬gv , ˾sz_h–p ); 3128 ià( dev_id < 0) 3129 dev_id = `hci_g‘_rou‹ ( NULL ); 3131 dd = `hci_Ý’_dev ( dev_id ); 3132 ià( dd < 0) { 3133 `³¼Ü ("Could‚ot open device"); 3134 `ex™ (1); 3137 ”r = `hci_Ë_»ad_»sÞvšg_li¡_size ( dd , & size , 1000); 3138 `hci_þo£_dev ( dd ); 3140 ià( ”r < 0) { 3141 ”r = - ”ºo ; 3142 `årštf ( ¡d”r , "Can't„ead„esolving†ist size: %s(%d)\n", 3143 `¡»¼Ü (- ”r ), -err); 3144 `ex™ (1); 3147 `´štf ("ResÞvšg†i¡ size: %d\n", size ); 3148 } } 3150  ÝtiÚ g˾Ú_ÝtiÚs [] = { 3155 cÚ¡ * g˾Ú_h–p = 3159  $cmd_Ë¾Ú ( dev_id ,  ¬gc , ** ¬gv ) 3161  ”r , dd , Ýt ; 3163 `fÜ_—ch_Ýt ( Ýt , ˾Ú_ÝtiÚs , NULL ) { 3164  Ýt ) { 3166 `´štf ("%s", ˾Ú_h–p ); 3171 `h–³r_¬g (0, 0, & ¬gc , & ¬gv , ˾Ú_h–p ); 3173 ià( dev_id < 0) 3174 dev_id = `hci_g‘_rou‹ ( NULL ); 3176 dd = `hci_Ý’_dev ( dev_id ); 3177 ià( dd < 0) { 3178 `³¼Ü ("Could‚ot open device"); 3179 `ex™ (1); 3182 ”r = `hci_Ë_£t_add»ss_»sÞutiÚ_’abË ( dd , 0x01, 1000); 3183 `hci_þo£_dev ( dd ); 3185 ià( ”r < 0) { 3186 ”r = - ”ºo ; 3187 `årštf ( ¡d”r , "Can't set‡ddress„esolutionƒnable: %s(%d)\n", 3188 `¡»¼Ü (- ”r ), -err); 3189 `ex™ (1); 3191 } } 3193  ÝtiÚ g˾off_ÝtiÚs [] = { 3198 cÚ¡ * g˾off_h–p = 3202  $cmd_˾off ( dev_id ,  ¬gc , ** ¬gv ) 3204  ”r , dd , Ýt ; 3206 `fÜ_—ch_Ýt ( Ýt , ˾off_ÝtiÚs , NULL ) { 3207  Ýt ) { 3209 `´štf ("%s", ˾off_h–p ); 3214 `h–³r_¬g (0, 0, & ¬gc , & ¬gv , ˾off_h–p ); 3216 ià( dev_id < 0) 3217 dev_id = `hci_g‘_rou‹ ( NULL ); 3219 dd = `hci_Ý’_dev ( dev_id ); 3220 ià( dd < 0) { 3221 `³¼Ü ("Could‚ot open device"); 3222 `ex™ (1); 3225 ”r = `hci_Ë_£t_add»ss_»sÞutiÚ_’abË ( dd , 0x00, 1000); 3226 `hci_þo£_dev ( dd ); 3228 ià( ”r < 0) { 3229 ”r = - ”ºo ; 3230 `årštf ( ¡d”r , "Can't set‡ddress„esolutionƒnable: %s(%d)\n", 3231 `¡»¼Ü (- ”r ), -err); 3232 `ex™ (1); 3234 } } 3236  ÝtiÚ gËdc_ÝtiÚs [] = { 3241 cÚ¡ * gËdc_h–p = 3245  $cmd_Ëdc ( dev_id ,  ¬gc , ** ¬gv ) 3247  ”r , Ýt , dd ; 3248 ušt16_t hªdË ; 3249 ušt8_t »asÚ ; 3251 `fÜ_—ch_Ýt ( Ýt , Ëdc_ÝtiÚs , NULL ) { 3252  Ýt ) { 3254 `´štf ("%s", Ëdc_h–p ); 3258 `h–³r_¬g (1, 2, & ¬gc , & ¬gv , Ëdc_h–p ); 3260 ià( dev_id < 0) 3261 dev_id = `hci_g‘_rou‹ ( NULL ); 3263 dd = `hci_Ý’_dev ( dev_id ); 3264 ià( dd < 0) { 3265 `³¼Ü ("Could‚ot open device"); 3266 `ex™ (1); 3269 hªdË = `©oi ( ¬gv [0]); 3271 »asÚ = ( ¬gc > 1è? `©oi ( ¬gv [1]è: HCI_OE_USER_ENDED_CONNECTION ; 3273 ”r = `hci_discÚÃù ( dd , hªdË , »asÚ , 10000); 3274 ià( ”r < 0) { 3275 `³¼Ü ("Could‚ot disconnect"); 3276 `ex™ (1); 3279 `hci_þo£_dev ( dd ); 3280 } } 3282  ÝtiÚ gËcup_ÝtiÚs [] = { 3292 cÚ¡ * gËcup_h–p = 3304  $cmd_Ëcup ( dev_id ,  ¬gc , ** ¬gv ) 3306 ušt16_t hªdË = 0, mš , max , Ï‹ncy , timeout ; 3307  Ýt , dd , ba£ ; 3310 mš = 0x0C8; 3311 max = 0x0960; 3312 Ï‹ncy = 0x0007; 3313 timeout = 0x0C80; 3315 `fÜ_—ch_Ýt ( Ýt , Ëcup_ÝtiÚs , NULL ) { 3316 ià( Ýrg && `¡ºÿ£cmp ("0x", optarg, 2) == 0) 3317 ba£ = 16; 3319 ba£ = 10; 3321  Ýt ) { 3323 hªdË = `¡¹oul ( Ýrg , NULL , ba£ ); 3326 mš = `¡¹oul ( Ýrg , NULL , ba£ ); 3329 max = `¡¹oul ( Ýrg , NULL , ba£ ); 3332 Ï‹ncy = `¡¹oul ( Ýrg , NULL , ba£ ); 3335 timeout = `¡¹oul ( Ýrg , NULL , ba£ ); 3338 `´štf ("%s", Ëcup_h–p ); 3343 ià( hªdË == 0) { 3344 `´štf ("%s", Ëcup_h–p ); 3348 ià( dev_id < 0) 3349 dev_id = `hci_g‘_rou‹ ( NULL ); 3351 dd = `hci_Ý’_dev ( dev_id ); 3352 ià( dd < 0) { 3353 `årštf ( ¡d”r , "HCI device open failed\n"); 3354 `ex™ (1); 3357 ià( `hci_Ë_cÚn_upd©e ( dd , `htobs ( hªdË ), htobs( mš ), htobs( max ), 3358 `htobs ( Ï‹ncy ), htobs( timeout ), 5000) < 0) { 3359  ”r = - ”ºo ; 3360 `årštf ( ¡d”r , "Could‚ot change connection…arams: %s(%d)\n", 3361 `¡»¼Ü (- ”r ), -err); 3364 `hci_þo£_dev ( dd ); 3365 } } 3368 * mcmd ; 3369 (* mfunc )( mdev_id ,  m¬gc , ** m¬gv ); 3370 * mdoc ; 3371 } gcommªd [] = { 3372 { "dev", cmd_dev , "Display†ocal devices" }, 3373 { "šq", cmd_šq , "Inquire„emote devices" }, 3374 { "sÿn", cmd_sÿn , "Scan for„emote devices" }, 3375 { "Çme", cmd_Çme , "Get‚ame from„emote device" }, 3376 { "šfo", cmd_šfo , "Get information from„emote device" }, 3377 { "¥šq", cmd_¥šq , "Start…eriodic inquiry" }, 3378 { "•šq", cmd_•šq , "Exit…eriodic inquiry" }, 3379 { "cmd", cmd_cmd , "Submit‡rbitrary HCI commands" }, 3380 { "cÚ", cmd_cÚ , "Display‡ctive connections" }, 3381 { "cc", cmd_cc , "Create connectiono„emote device" }, 3382 { "dc", cmd_dc , "Disconnect from„emote device" }, 3383 { "¤", cmd_¤ , "Switch master/slave„ole" }, 3384 { "ýt", cmd_ýt , "Change connection…acketype" }, 3385 { "rssi", cmd_rssi , "Display connection RSSI" }, 3386 { "lq", cmd_lq , "Display†ink quality" }, 3387 { "l", cmd_l , "Displayransmit…ower†evel" }, 3388 { "afh", cmd_afh , "Display AFH channel map" }, 3389 { "Í", cmd_Í , "Set/display†ink…olicy settings" }, 3390 { "l¡", cmd_l¡ , "Set/display†ink supervisionimeout" }, 3391 { "auth", cmd_auth , "Request‡uthentication" }, 3392 { "’c", cmd_’c , "Set connectionƒncryption" }, 3393 { "key", cmd_key , "Change connection†ink key" }, 3394 { "þkoff", cmd_þkoff , "Read clock offset" }, 3395 { "þock", cmd_þock , "Read†ocal or„emote clock" }, 3396 { "Ësÿn", cmd_Ësÿn , "Start LE scan" }, 3397 { "Ëšfo", cmd_Ëšfo , "Get LE„emote information" }, 3398 { "ËwÏdd", cmd_ËwÏdd , "Add deviceo LE White List" }, 3399 { "ËwÌm", cmd_ËwÌm , "Remove device from LE White List" }, 3400 { "Ëwlsz", cmd_Ëwlsz , "Read size of LE White List" }, 3401 { "Ëwlþr", cmd_Ëwlþr , "Clear LE White List" }, 3402 { "˾add", cmd_˾add , "Add deviceo LE Resolving List" }, 3403 { "˾rm", cmd_˾rm , "Remove device from LE Resolving List" }, 3404 { "˾þr", cmd_˾þr , "Clear LE Resolving List" }, 3405 { "˾sz", cmd_˾sz , "Read size of LE Resolving List" }, 3406 { "˾Ú", cmd_Ë¾Ú , "Enable LE Address Resolution" }, 3407 { "˾off", cmd_˾off , "Disable LE Address Resolution" }, 3408 { "Ëcc", cmd_Ëcc , "Create‡ LE Connection" }, 3409 { "Ëdc", cmd_Ëdc , "Disconnect‡ LE Connection" }, 3410 { "Ëcup", cmd_Ëcup , "LE Connection Update" }, 3411 { NULL , NULL, 0 } 3414  $u§ge () 3416  i ; 3418 `´štf ("hc™oÞ - HCI ToÞ v” %s\n", VERSION ); 3419 `´štf ("Usage:\n" 3421 `´štf ("Options:\n" 3424 `´štf ("Commands:\n"); 3425  i = 0; commªd [i]. cmd ; i++) 3426 `´štf ("\t%-4s\t%s\n", commªd [ i ]. cmd , 3427 commªd [ i ]. doc ); 3428 `´štf ("\n" 3431 } } 3433  ÝtiÚ gmaš_ÝtiÚs [] = { 3439  $maš ( ¬gc , * ¬gv []) 3441  Ýt , i , dev_id = -1; 3442 bdaddr_t ba ; 3444 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+i:h", maš_ÝtiÚs , NULL )) != -1) { 3445  Ýt ) { 3447 dev_id = `hci_devid ( Ýrg ); 3448 ià( dev_id < 0) { 3449 `³¼Ü ("Invalid device"); 3450 `ex™ (1); 3456 `u§ge (); 3457 `ex™ (0); 3461 ¬gc -ð Ýtšd ; 3462 ¬gv +ð Ýtšd ; 3463 Ýtšd = 0; 3465 ià( ¬gc < 1) { 3466 `u§ge (); 3467 `ex™ (0); 3470 ià( dev_id !ð-1 && `hci_devba (dev_id, & ba ) < 0) { 3471 `³¼Ü ("Device is‚ot‡vailable"); 3472 `ex™ (1); 3475  i = 0; commªd [i]. cmd ; i++) { 3476 ià( `¡ºcmp ( commªd [ i ]. cmd , 3477 ¬gv [0], `¡¾’ ( commªd [ i ]. cmd ))) 3480 commªd [ i ]. `func ( dev_id , ¬gc , ¬gv ); 3484 ià( commªd [ i ]. cmd == 0) { 3485 `årštf ( ¡d”r , "UnknowÀcommªd - \"%s\"\n", * ¬gv ); 3486 `ex™ (1); 3490 } } @tools/hex2hcd.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~<¡dio.h > 30  ~<”ºo.h > 32  #RBUF_SIZE 640 ) 34  $asc_to_št ( a ) 36 ià( a >= 'A') 37  ( a - 'A') + 10; 39  a - '0'; 40 } } 42  $hex_to_št (cÚ¡ * h ) 44  `asc_to_št (* h ) * 0x10 +‡sc_to_int(*(h + 1)); 45 } } 47  $lhex_to_št (cÚ¡ * h ) 49  `hex_to_št ( h ) * 0x100 + hex_to_int(h + 2); 50 } } 52  $check_sum (cÚ¡ * ¡r ,  Ën ) 54  sum , ÿl ; 55  i ; 56 sum = `hex_to_št ( ¡r + Ën - 2); 57  ÿl = 0, i = 1; i < Ën - 2; i += 2) 58 ÿl +ð `hex_to_št ( ¡r + i ); 59 ÿl = 0x100 - (cal & 0xFF); 60  sum =ð ÿl ; 61 } } 63  $check_hex_lše (cÚ¡ * ¡r ,  Ën ) 65 ià(( ¡r [0] !ð':'è|| ( Ën < 11è|| ! `check_sum (str,†en) || 66 ( `hex_to_št ( ¡r + 1è* 2 + 11 !ð Ën )) 69 } } 71  $maš ( ¬gc , * ¬gv []) 73  i , addr = 0; 74 FILE * iå , * oå ; 75 * rbuf ; 76 ssize_t Ën ; 77 size_t buæ’ ; 79 ià( ¬gc != 3) { 80 `´štf ("U§ge: % <špuˆhex fže> \n", ¬gv [0]); 84 iå = `fÝ’ ( ¬gv [1], "r"); 85 oå = `fÝ’ ( ¬gv [2], "w"); 86 ià(( iå =ð NULL è|| ( oå == NULL)) { 87 `puts ("failedo open file."); 88  - EIO ; 91 rbuf = NULL ; 92 ( Ën = `g‘lše (& rbuf , & buæ’ , iå )) > 0) { 93  ty³ ; 94  obuf [7]; 95  de¡_addr ; 96 ( rbuf [ Ën - 1] == '\r') || (rbuf[len - 1] == '\n')) 97 Ën --; 98 `´štf ("%d, %s\n", () Ën , rbuf ); 99 ià(! `check_hex_lše ( rbuf , Ën )) 101 ty³ = `hex_to_št ( rbuf + 7); 102  ty³ ) { 104 addr = `lhex_to_št ( rbuf + 9) * 0x10000; 105 `´štf ("bum°add¸tØ0x%08X\n", addr ); 108 de¡_addr = addr + `lhex_to_št ( rbuf + 3); 109 obuf [0] = 0x4c; 110 obuf [1] = 0xfc; 111 obuf [2] = `hex_to_št ( rbuf + 1) + 4; 112 obuf [3] = de¡_addr ; 113 obuf [4] = de¡_addr >> 8; 114 obuf [5] = de¡_addr >> 16; 115 obuf [6] = de¡_addr >> 24; 116 ià( `fwr™e ( obuf , 7, 1, oå ) != 1) 117  ouut_”r ; 118  i = 0; i < `hex_to_št ( rbuf + 1); i++) { 119 obuf [0] = `hex_to_št ( rbuf + 9 + i * 2); 120 ià( `fwr™e ( obuf , 1, 1, oå ) != 1) 121  ouut_”r ; 125 ià( `fwr™e ("\x4e\xfc\x04\xff\xff\xff\xff", 7, 1, oå ) != 1) 126  ouut_”r ; 127  ’d ; 129  - EINVAL ; 133 `puts ("hex file formattingƒrror"); 134  - EINVAL ; 136 ouut_”r : 137 `puts ("error on writing output file"); 138  - EIO ; 140 ’d : 142 } } @tools/hid2hci.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~ 33  ~<¡dšt.h > 34  ~<¡dlib.h > 35  ~<¡ršg.h > 36  ~ 37  ~ 38  ~ 39  ~ 40  ~ 41  ~ 43  ~"libudev.h " 45  #USB_REQ_SET_CONFIGURATION 0x09 ) 47  #USB_TYPE_CLASS (0x01 << 5) ) 48  #USB_TYPE_VENDOR (0x02 << 5) ) 50  #USB_RECIP_DEVICE 0x00 ) 51  #USB_RECIP_INTERFACE 0x01 ) 53  #USB_ENDPOINT_OUT 0x00 ) 55  susbfs_ù¾Œªsãr { 56 ušt8_t mbmReque¡Ty³ ; 57 ušt8_t mbReque¡ ; 58 ušt16_t mwV®ue ; 59 ušt16_t mwIndex ; 60 ušt16_t mwL’gth ; 61 ušt32_t mtimeout ; 62 * md©a ; 66  #USBFS_DISCONNECT_IF_DRIVER 0x01 ) 67  #USBFS_DISCONNECT_EXCEPT_DRIVER 0x02 ) 69  susbfs_discÚÃù { 70  mš‹rçû ; 71  mæags ; 72  mdriv” [256]; 75  #USBFS_IOCTL_CONTROL `_IOWR ('U', 0,  usbfs_ù¾Œªsãr ) ) 76  #USBFS_IOCTL_DISCONNECT `_IOR ('U', 27,  usbfs_discÚÃù ) ) 78  $cÚŒÞ_mes§ge ( fd ,  »que¡ty³ ,  »que¡ , 79  v®ue ,  šdex , 80 * by‹s ,  size ,  timeout ) 82  usbfs_ù¾Œªsãr Œªsãr ; 84 Œªsãr . bmReque¡Ty³ = »que¡ty³ ; 85 Œªsãr . bReque¡ = »que¡ ; 86 Œªsãr . wV®ue = v®ue ; 87 Œªsãr . wIndex = šdex ; 88 Œªsãr . wL’gth = size , 89 Œªsãr . timeout =imeout; 90 Œªsãr . d©a = by‹s ; 92 ià( `ioùl ( fd , USBFS_IOCTL_CONTROL , & Œªsãr ) < 0) { 93 `årštf ( ¡d”r , "Controlransfer failed: %s (%d)\n", 94 `¡»¼Ü ( ”ºo ),ƒrrno); 99 } } 101 emode { 102 mHCI = 0, 103 mHID = 1, 106  $usb_sw™ch_c¤ ( fd , mode mode) 108  ”r ; 110 ”r = `cÚŒÞ_mes§ge ( fd , USB_ENDPOINT_OUT | USB_TYPE_VENDOR | 111 USB_RECIP_DEVICE , 112 0, mode , 0, NULL , 0, 10000); 113 ià( ”r == 0) { 114 ”r = -1; 115 ”ºo = EALREADY ; 116 } ià( ”ºo =ð ETIMEDOUT ) 117 ”r = 0; 119  ”r ; 120 } } 122  $hid_log™ech_£nd_»pÜt ( fd , cÚ¡ * buf , size_t size ) 124  hiddev_»pÜt_šfo ršfo ; 125  hiddev_u§ge_»f u»f ; 126  i ; 127  ”r ; 129  i = 0; i < size ; i++) { 130 `mem£t (& u»f , 0, (uref)); 131 u»f . »pÜt_ty³ = HID_REPORT_TYPE_OUTPUT ; 132 u»f . »pÜt_id = 0x10; 133 u»f . f›ld_šdex = 0; 134 u»f . u§ge_šdex = i ; 135 u»f . u§ge_code = 0xff000001; 136 u»f . v®ue = buf [ i ] & 0x000000ff; 137 ”r = `ioùl ( fd , HIDIOCSUSAGE , & u»f ); 138 ià( ”r < 0) 139  ”r ; 142 `mem£t (& ršfo , 0, (rinfo)); 143 ršfo . »pÜt_ty³ = HID_REPORT_TYPE_OUTPUT ; 144 ršfo . »pÜt_id = 0x10; 145 ršfo . num_f›lds = 1; 146 ”r = `ioùl ( fd , HIDIOCSREPORT , & ršfo ); 148  ”r ; 149 } } 151  $hid_sw™ch_log™ech (cÚ¡ * fž’ame ) 153  »p1 [] = { 0xff, 0x80, 0x80, 0x01, 0x00, 0x00 }; 154  »p2 [] = { 0xff, 0x80, 0x00, 0x00, 0x30, 0x00 }; 155  »p3 [] = { 0xff, 0x81, 0x80, 0x00, 0x00, 0x00 }; 156  fd ; 157  ”r = -1; 159 fd = `Ý’ ( fž’ame , O_RDWR ); 160 ià( fd < 0) 161  ”r ; 163 ”r = `ioùl ( fd , HIDIOCINITREPORT , 0); 164 ià( ”r < 0) 165  out ; 167 ”r = `hid_log™ech_£nd_»pÜt ( fd , »p1 , (rep1)); 168 ià( ”r < 0) 169  out ; 171 ”r = `hid_log™ech_£nd_»pÜt ( fd , »p2 , (rep2)); 172 ià( ”r < 0) 173  out ; 175 ”r = `hid_log™ech_£nd_»pÜt ( fd , »p3 , (rep3)); 176 out : 177 `þo£ ( fd ); 178  ”r ; 179 } } 181  $usb_sw™ch_d–l ( fd , mode mode) 183  »pÜt [] = { 0x7f, 0x00, 0x00, 0x00 }; 184  usbfs_discÚÃù discÚÃù ; 185  ”r ; 187  mode ) { 188  HCI : 189 »pÜt [1] = 0x13; 191  HID : 192 »pÜt [1] = 0x14; 196 discÚÃù . š‹rçû = 0; 197 discÚÃù . æags = USBFS_DISCONNECT_EXCEPT_DRIVER ; 198 `¡rýy ( discÚÃù . driv” , "usbfs"); 200 ià( `ioùl ( fd , USBFS_IOCTL_DISCONNECT , & discÚÃù ) < 0) { 201 `årštf ( ¡d”r , "Can't claim interface: %s (%d)\n", 202 `¡»¼Ü ( ”ºo ),ƒrrno); 206 ”r = `cÚŒÞ_mes§ge ( fd , USB_ENDPOINT_OUT | USB_TYPE_CLASS | 207 USB_RECIP_INTERFACE , 208 USB_REQ_SET_CONFIGURATION , 210 »pÜt , (report), 5000); 211 ià( ”r == 0) { 212 ”r = -1; 213 ”ºo = EALREADY ; 215 ià( ”ºo =ð ETIMEDOUT ) 216 ”r = 0; 219  ”r ; 220 } } 222  $fšd_deviû ( udev_deviû * udev_dev ) 224  ·th [ PATH_MAX ]; 225 cÚ¡ * bu¢um_¡r , * devnum_¡r ; 226  bu¢um , devnum ; 227  fd ; 229 bu¢um_¡r = `udev_deviû_g‘_sy§‰r_v®ue ( udev_dev , "busnum"); 230 ià(! bu¢um_¡r ) 232 bu¢um = `¡¹Þ ( bu¢um_¡r , NULL , 10); 234 devnum_¡r = `udev_deviû_g‘_sy§‰r_v®ue ( udev_dev , "devnum"); 235 ià(! devnum_¡r ) 237 devnum = `¡¹Þ ( devnum_¡r , NULL , 10); 239 `¢´štf ( ·th , Õ©h), "/dev/bus/usb/%03d/%03d", bu¢um , devnum ); 241 fd = `Ý’ ( ·th , O_RDWR , O_CLOEXEC ); 242 ià( fd < 0) { 243 `årštf ( ¡d”r , "Can't open device: %s (%d)\n", 244 `¡»¼Ü ( ”ºo ),ƒrrno); 248  fd ; 249 } } 251  $u§ge (cÚ¡ * ”rÜ ) 253 ià( ”rÜ ) 254 `årštf ( ¡d”r ,"\n%s\n", ”rÜ ); 256 `´štf ("hid2hci - Bluetooth HIDo HCI mode switching utility\n\n"); 258 `´štf ("Usage: hid2hci [options]\n" 263 } } 265  $maš ( ¬gc , * ¬gv []) 267 cÚ¡  ÝtiÚ ÝtiÚs [] = { 268 { "h–p", no_¬gum’t , NULL , 'h' }, 269 { "mode", »quœed_¬gum’t , NULL , 'm' }, 270 { "dev·th", »quœed_¬gum’t , NULL , 'p' }, 271 { "m‘hod", »quœed_¬gum’t , NULL , 'M' }, 274 em‘hod { 275 METHOD_UNDEF , 276 METHOD_CSR , 277 METHOD_LOGITECH_HID , 278 METHOD_DELL , 279 } m‘hod = METHOD_UNDEF ; 280  udev *udev; 281  udev_deviû * udev_dev = NULL ; 282  sy¥©h [ PATH_MAX ]; 283 (* usb_sw™ch )( fd , mode modeèð NULL ; 284 mode modð HCI ; 285 cÚ¡ * dev·th = NULL ; 286  ”r = -1; 287  rc = 1; 290  ÝtiÚ ; 292 ÝtiÚ = `g‘Ýt_lÚg ( ¬gc , ¬gv , "m:p:M:h", ÝtiÚs , NULL ); 293 ià( ÝtiÚ == -1) 296  ÝtiÚ ) { 298 ià(! `¡rcmp ( Ýrg , "hid")) { 299 mode = HID ; 300 } ià(! `¡rcmp ( Ýrg , "hci")) { 301 mode = HCI ; 303 `u§ge ("error: undefined„adio mode\n"); 304 `ex™ (1); 308 dev·th = Ýrg ; 311 ià(! `¡rcmp ( Ýrg , "csr")) { 312 m‘hod = METHOD_CSR ; 313 usb_sw™ch = usb_sw™ch_c¤ ; 314 } ià(! `¡rcmp ( Ýrg , "logitech-hid")) { 315 m‘hod = METHOD_LOGITECH_HID ; 316 } ià(! `¡rcmp ( Ýrg , "dell")) { 317 m‘hod = METHOD_DELL ; 318 usb_sw™ch = usb_sw™ch_d–l ; 320 `u§ge ("error: undefined switching method\n"); 321 `ex™ (1); 325 `u§ge ( NULL ); 329 ià(! dev·th || m‘hod =ð METHOD_UNDEF ) { 330 `u§ge ("error: --devpath=‡nd --method= must be defined\n"); 331 `ex™ (1); 334 udev = `udev_Ãw (); 335 ià( udev =ð NULL ) 336  ex™ ; 338 `¢´štf ( sy¥©h , (sy¥©h), "/sys/%s", dev·th ); 339 udev_dev = `udev_deviû_Ãw_äom_sy¥©h ( udev , sy¥©h ); 340 ià( udev_dev =ð NULL ) { 341 `årštf ( ¡d”r , "”rÜ: could‚Ù fšd '%s'\n", dev·th ); 342  ex™ ; 345  m‘hod ) { 346  METHOD_CSR : 347  METHOD_DELL : { 348  udev_deviû * dev ; 349  hªdË ; 350 cÚ¡ * ty³ ; 353 dev = udev_dev ; 354 ty³ = `udev_deviû_g‘_devty³ ( dev ); 355 ià( ty³ =ð NULL || `¡rcmp (type, "usb_device") != 0) { 356 dev = `udev_deviû_g‘_·»Á_w™h_subsy¡em_devty³ (dev, 358 ià( dev =ð NULL ) { 359 `årštf ( ¡d”r , "”rÜ: could‚Ù fšd usb_deviû fÜ '%s'\n", dev·th ); 360  ex™ ; 364 hªdË = `fšd_deviû ( dev ); 365 ià( hªdË < 0) { 366 `årštf ( ¡d”r , "error: unableo handle '%s'\n", 367 `udev_deviû_g‘_sy¥©h ( dev )); 368  ex™ ; 370 ”r = `usb_sw™ch ( hªdË , mode ); 371 `þo£ ( hªdË ); 374  METHOD_LOGITECH_HID : { 375 cÚ¡ * deviû ; 377 deviû = `udev_deviû_g‘_devnode ( udev_dev ); 378 ià( deviû =ð NULL ) { 379 `årštf ( ¡d”r , "error: could‚ot find hiddev device‚ode\n"); 380  ex™ ; 382 ”r = `hid_sw™ch_log™ech ( deviû ); 385  METHOD_UNDEF : 390 ià( ”r < 0) 391 `årštf ( ¡d”r , "error: switching device '%s' failed.\n", 392 `udev_deviû_g‘_sy¥©h ( udev_dev )); 393 ex™ : 394 `udev_deviû_uÄef ( udev_dev ); 395 `udev_uÄef ( udev ); 396  rc ; 397 } } @tools/hwdb.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 30  ~ 33 ušt16_t mv’dÜ ; 34 ušt16_t m´oduù ; 35 cÚ¡ * m¡r ; 36 } g´oduù_bË [] = { 42  $maš ( ¬gc , * ¬gv []) 44 ušt16_t id ; 46 `´štf ("# This file is…art of systemd.\n"); 47 `´štf ("#\n"); 48 `´štf ("# Data imported from:\n"); 49 `´štf ("# http://www.bluetooth.org/Technical/AssignedNumbers/identifiers.htm\n"); 51  id = 0;; id++) { 52 cÚ¡ * ¡r ; 53  i ; 55 ¡r = `bt_compidto¡r ( id ); 56 ià(! ¡r ) 59 ià(! `¡rcmp ( ¡r , "internal use")) 62 ià(! `¡rcmp ( ¡r , "not‡ssigned")) 65 `´štf ("\n"); 66 `´štf ("blu‘oÙh:v%04X*\n", id ); 67 `´štf (" ID_VENDOR_FROM_DATABASE=%s\n", ¡r ); 69  i = 0; ´oduù_bË [i]. ¡r ; i++) { 70 ià( ´oduù_bË [ i ]. v’dÜ !ð id ) 73 `´štf ("\n"); 74 `´štf ("bluetooth:v%04Xp%04X*\n", 75 id , ´oduù_bË [ i ]. ´oduù ); 76 `´štf (" ID_PRODUCT_FROM_DATABASE=%s\n", 77 ´oduù_bË [ i ]. ¡r ); 82 } } @tools/ibeacon.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<ùy³.h > 30  ~<¡dio.h > 31  ~ 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 35  ~ 36  ~ 37  ~ 39  ~"mÚ™Ü/mašloÝ.h " 40  ~"mÚ™Ü/bt.h " 41  ~"¤c/sh¬ed/timeout.h " 42  ~"¤c/sh¬ed/utž.h " 43  ~"¤c/sh¬ed/hci.h " 45  gu¿ndom_fd ; 46  bt_hci * ghci_dev ; 48  boÞ $shutdown_timeout (* u£r_d©a ) 50 `mašloÝ_qu™ (); 52  çl£ ; 53 } } 55  $shutdown_com¶‘e (cÚ¡ * d©a , ušt8_t size , * u£r_d©a ) 57  id = `PTR_TO_UINT ( u£r_d©a ); 59 `timeout_»move ( id ); 60 `mašloÝ_qu™ (); 61 } } 63  $shutdown_deviû () 65 ušt8_t ’abË = 0x00; 66  id ; 68 `bt_hci_æush ( hci_dev ); 70 id = `timeout_add (5000, shutdown_timeout , NULL , NULL); 72 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_LE_SET_ADV_ENABLE , 73 & ’abË , 1, NULL , NULL, NULL); 75 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_RESET , NULL , 0, 76 shutdown_com¶‘e , `UINT_TO_PTR ( id ), NULL ); 77 } } 79  $£t_¿ndom_add»ss () 81  bt_hci_cmd_Ë_£t_¿ndom_add»ss cmd ; 82 ssize_t Ën ; 84 Ën = `»ad ( u¿ndom_fd , cmd . addr , (cmd.addr)); 85 ià( Ën < 0 ||†’ !ð( cmd . addr )) { 86 `årštf ( ¡d”r , "Failedo„ead„andom data\n"); 91 cmd . addr [5] &= 0x3f; 93 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_LE_SET_RANDOM_ADDRESS , 94 & cmd , (cmd), NULL , NULL, NULL); 95 } } 97  $£t_adv_·¿m‘”s () 99  bt_hci_cmd_Ë_£t_adv_·¿m‘”s cmd ; 101 cmd . mš_š‹rv® = `ýu_to_Ë16 (0x0800); 102 cmd . max_š‹rv® = `ýu_to_Ë16 (0x0800); 103 cmd . ty³ = 0x03; 104 cmd . own_addr_ty³ = 0x01; 105 cmd . dœeù_addr_ty³ = 0x00; 106 `mem£t ( cmd . dœeù_addr , 0, 6); 107 cmd . chªÃl_m­ = 0x07; 108 cmd . fž‹r_pÞicy = 0x00; 110 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_LE_SET_ADV_PARAMETERS , 111 & cmd , (cmd), NULL , NULL, NULL); 112 } } 114  $£t_adv_’abË () 116 ušt8_t ’abË = 0x01; 118 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_LE_SET_ADV_ENABLE , 119 & ’abË , 1, NULL , NULL, NULL); 120 } } 122  $adv_d©a_ÿÎback (cÚ¡ * d©a , ušt8_t size , 123 * u£r_d©a ) 125 ušt8_t ¡©us = *((ušt8_ˆ*è d©a ); 127 ià( ¡©us ) { 128 `årštf ( ¡d”r , "Failedo set‡dvertising data\n"); 129 `shutdown_deviû (); 133 `£t_¿ndom_add»ss (); 134 `£t_adv_·¿m‘”s (); 135 `£t_adv_’abË (); 136 } } 138  $adv_tx_pow”_ÿÎback (cÚ¡ * d©a , ušt8_t size , 139 * u£r_d©a ) 141 cÚ¡  bt_hci_r¥_Ë_»ad_adv_tx_pow” * r¥ = d©a ; 142  bt_hci_cmd_Ë_£t_adv_d©a cmd ; 144 ià( r¥ -> ¡©us ) { 145 `årštf ( ¡d”r , "Failedo„ead‡dvertising TX…ower\n"); 146 `shutdown_deviû (); 150 cmd . d©a [0] = 0x02; 151 cmd . d©a [1] = 0x01; 152 cmd . d©a [2] = 0x02; 153 cmd . d©a [2] |= 0x04; 155 cmd . d©a [3] = 0x1a; 156 cmd . d©a [4] = 0xff; 157 cmd . d©a [5] = 0x4c; 158 cmd . d©a [6] = 0x00; 159 cmd . d©a [7] = 0x02; 160 cmd . d©a [8] = 0x15; 161 `mem£t ( cmd . d©a + 9, 0, 16); 162 cmd . d©a [25] = 0x00; 163 cmd . d©a [26] = 0x00; 164 cmd . d©a [27] = 0x00; 165 cmd . d©a [28] = 0x00; 166 cmd . d©a [29] = 0xc5; 168 cmd . d©a [30] = 0x00; 170 cmd . Ën = 1 + cmd. d©a [0] + 1 + cmd.data[3]; 172 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_LE_SET_ADV_DATA , & cmd , (cmd), 173 adv_d©a_ÿÎback , NULL , NULL); 174 } } 176  $loÿl_ã©u»s_ÿÎback (cÚ¡ * d©a , ušt8_t size , 177 * u£r_d©a ) 179 cÚ¡  bt_hci_r¥_»ad_loÿl_ã©u»s * r¥ = d©a ; 181 ià( r¥ -> ¡©us ) { 182 `årštf ( ¡d”r , "Failedo„ead†ocal features\n"); 183 `shutdown_deviû (); 187 ià(!( r¥ -> ã©u»s [4] & 0x40)) { 188 `årštf ( ¡d”r , "Controller without Low Energy support\n"); 189 `shutdown_deviû (); 193 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_LE_READ_ADV_TX_POWER , NULL , 0, 194 adv_tx_pow”_ÿÎback , NULL , NULL); 195 } } 197  $¡¬t_ib—cÚ () 199 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_RESET , NULL , 0, NULL, NULL, NULL); 201 `bt_hci_£nd ( hci_dev , BT_HCI_CMD_READ_LOCAL_FEATURES , NULL , 0, 202 loÿl_ã©u»s_ÿÎback , NULL , NULL); 203 } } 205  $sigÇl_ÿÎback ( signum , * u£r_d©a ) 207  boÞ ‹rmš©ed = çl£ ; 209  signum ) { 210  SIGINT : 211  SIGTERM : 212 ià(! ‹rmš©ed ) { 213 `shutdown_deviû (); 214 ‹rmš©ed = Œue ; 218 } } 220  $u§ge () 222 `´štf ("ibeacon - Low Energy iBeaconestingool\n" 224 `´štf ("\tibeacon [options]\n"); 225 `´štf ("Options:\n" 228 } } 230 cÚ¡  ÝtiÚ gmaš_ÝtiÚs [] = { 231 { "šdex", »quœed_¬gum’t , NULL , 'i' }, 232 { "v”siÚ", no_¬gum’t , NULL , 'v' }, 233 { "h–p", no_¬gum’t , NULL , 'h' }, 237  $maš ( ¬gc , * ¬gv []) 239 ušt16_t šdex = 0; 240 cÚ¡ * ¡r ; 241 sig£t_t mask ; 242  ex™_¡©us ; 245  Ýt ; 247 Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "i:vh", maš_ÝtiÚs , NULL ); 248 ià( Ýt < 0) 251  Ýt ) { 253 ià( `¡¾’ ( Ýrg è> 3 && ! `¡ºcmp (optarg, "hci", 3)) 254 ¡r = Ýrg + 3; 256 ¡r = Ýrg ; 257 ià(! `isdig™ (* ¡r )) { 258 `u§ge (); 259  EXIT_FAILURE ; 261 šdex = `©oi ( ¡r ); 264 `´štf ("%s\n", VERSION ); 265  EXIT_SUCCESS ; 267 `u§ge (); 268  EXIT_SUCCESS ; 270  EXIT_FAILURE ; 274 ià( ¬gc - Ýtšd > 0) { 275 `årštf ( ¡d”r , "Invalid command†ine…arameters\n"); 276  EXIT_FAILURE ; 279 u¿ndom_fd = `Ý’ ("/dev/u¿ndom", O_RDONLY ); 280 ià( u¿ndom_fd < 0) { 281 `årštf ( ¡d”r , "Failedo open /dev/urandom device\n"); 282  EXIT_FAILURE ; 285 `mašloÝ_š™ (); 287 `sigem±y£t (& mask ); 288 `sigadd£t (& mask , SIGINT ); 289 `sigadd£t (& mask , SIGTERM ); 291 `mašloÝ_£t_sigÇl (& mask , sigÇl_ÿÎback , NULL , NULL); 293 `´štf ("Low EÃrgy iB—cÚ utž™y v” %s\n", VERSION ); 295 hci_dev = `bt_hci_Ãw_u£r_chªÃl ( šdex ); 296 ià(! hci_dev ) { 297 `årštf ( ¡d”r , "Failedo open HCI user channel\n"); 298 ex™_¡©us = EXIT_FAILURE ; 299  dÚe ; 302 `¡¬t_ib—cÚ (); 304 ex™_¡©us = `mašloÝ_run (); 306 `bt_hci_uÄef ( hci_dev ); 308 dÚe : 309 `þo£ ( u¿ndom_fd ); 311  ex™_¡©us ; 312 } } @tools/l2cap-tester.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~ 30  ~<”ºo.h > 31  ~<¡dboÞ.h > 33  ~ 35  ~"lib/blu‘oÙh.h " 36  ~"lib/l2ÿp.h " 37  ~"lib/mgmt.h " 39  ~"mÚ™Ü/bt.h " 40  ~"emuÏtÜ/btho¡.h " 41  ~"emuÏtÜ/hc›mu.h " 43  ~"¤c/sh¬ed/‹¡”.h " 44  ~"¤c/sh¬ed/mgmt.h " 46  s‹¡_d©a { 47 cÚ¡ * m‹¡_d©a ; 48  mgmt * mmgmt ; 49 ušt16_t mmgmt_šdex ; 50  hc›mu * mhc›mu ; 51 hc›mu_ty³ mhc›mu_ty³ ; 52  mio_id ; 53 ušt16_t mhªdË ; 54 ušt16_t mscid ; 55 ušt16_t mdcid ; 58  sl2ÿp_d©a { 59 ušt16_t mþ›Á_psm ; 60 ušt16_t m£rv”_psm ; 61 ušt16_t mcid ; 62  mex³ù_”r ; 64 ušt8_t m£nd_cmd_code ; 65 cÚ¡ * m£nd_cmd ; 66 ušt16_t m£nd_cmd_Ën ; 67 ušt8_t mex³ù_cmd_code ; 68 cÚ¡ * mex³ù_cmd ; 69 ušt16_t mex³ù_cmd_Ën ; 71 ušt16_t md©a_Ën ; 72 cÚ¡ * m»ad_d©a ; 73 cÚ¡ * mwr™e_d©a ; 75 boÞ m’abË_s¥ ; 76 ušt8_t mþ›Á_io_ÿp ; 77  m£c_Ëv– ; 78 boÞ m»jeù_s¥ ; 80 boÞ mex³ù_pš ; 81 ušt8_t mpš_Ën ; 82 cÚ¡ * mpš ; 83 ušt8_t mþ›Á_pš_Ën ; 84 cÚ¡ * mþ›Á_pš ; 87  $mgmt_debug (cÚ¡ * ¡r , * u£r_d©a ) 89 cÚ¡ * ´efix = u£r_d©a ; 91 `‹¡”_´št ("%s%s", ´efix , ¡r ); 92 } } 94  $»ad_šfo_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 95 cÚ¡ * ·¿m , * u£r_d©a ) 97  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 98 cÚ¡  mgmt_½_»ad_šfo * ½ = ·¿m ; 99  addr [18]; 100 ušt16_t mªuçùu»r ; 101 ušt32_t suµÜ‹d_£‰šgs , cu¼’t_£‰šgs ; 103 `‹¡”_´št ("Read Info callback"); 104 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 106 ià( ¡©us || ! ·¿m ) { 107 `‹¡”_´e_£tup_çžed (); 111 `ba2¡r (& ½ -> bdaddr , addr ); 112 mªuçùu»r = `btohs ( ½ ->manufacturer); 113 suµÜ‹d_£‰šgs = `btohl ( ½ ->supported_settings); 114 cu¼’t_£‰šgs = `btohl ( ½ ->current_settings); 116 `‹¡”_´št (" Add»ss: %s", addr ); 117 `‹¡”_´št (" V”siÚ: 0x%02x", ½ -> v”siÚ ); 118 `‹¡”_´št (" Mªuçùu»r: 0x%04x", mªuçùu»r ); 119 `‹¡”_´št (" SuµÜ‹d s‘tšgs: 0x%08x", suµÜ‹d_£‰šgs ); 120 `‹¡”_´št (" Cu¼’ˆ£‰šgs: 0x%08x", cu¼’t_£‰šgs ); 121 `‹¡”_´št (" Class: 0x%02x%02x%02x", 122 ½ -> dev_þass [2],„p->dev_class[1],„p->dev_class[0]); 123 `‹¡”_´št (" Name: %s", ½ -> Çme ); 124 `‹¡”_´št (" Sh܈Çme: %s", ½ -> shÜt_Çme ); 126 ià( `¡rcmp ( `hc›mu_g‘_add»ss ( d©a -> hc›mu ), addr )) { 127 `‹¡”_´e_£tup_çžed (); 131 `‹¡”_´e_£tup_com¶‘e (); 132 } } 134  $šdex_added_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 135 cÚ¡ * ·¿m , * u£r_d©a ) 137  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 139 `‹¡”_´št ("Index Added callback"); 140 `‹¡”_´št (" Index: 0x%04x", šdex ); 142 d©a -> mgmt_šdex = šdex ; 144 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_INFO , d©a-> mgmt_šdex , 0, NULL , 145 »ad_šfo_ÿÎback , NULL , NULL); 146 } } 148  $šdex_»moved_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 149 cÚ¡ * ·¿m , * u£r_d©a ) 151  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 153 `‹¡”_´št ("Index Removed callback"); 154 `‹¡”_´št (" Index: 0x%04x", šdex ); 156 ià( šdex !ð d©a -> mgmt_šdex ) 159 `mgmt_uÄegi¡”_šdex ( d©a -> mgmt , d©a-> mgmt_šdex ); 161 `mgmt_uÄef ( d©a -> mgmt ); 162 d©a -> mgmt = NULL ; 164 `‹¡”_po¡_‹¬down_com¶‘e (); 165 } } 167  $»ad_šdex_li¡_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 168 cÚ¡ * ·¿m , * u£r_d©a ) 170  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 172 `‹¡”_´št ("Read Index List callback"); 173 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 175 ià( ¡©us || ! ·¿m ) { 176 `‹¡”_´e_£tup_çžed (); 180 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_INDEX_ADDED , MGMT_INDEX_NONE , 181 šdex_added_ÿÎback , NULL , NULL); 183 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_INDEX_REMOVED , MGMT_INDEX_NONE , 184 šdex_»moved_ÿÎback , NULL , NULL); 186 d©a -> hc›mu = `hc›mu_Ãw (d©a-> hc›mu_ty³ ); 187 ià(! d©a -> hc›mu ) { 188 `‹¡”_w¬n ("Failedo setup HCIƒmulation"); 189 `‹¡”_´e_£tup_çžed (); 192 `‹¡”_´št ("New hciemu instance created"); 193 } } 195  $‹¡_´e_£tup (cÚ¡ * ‹¡_d©a ) 197  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 199 d©a -> mgmt = `mgmt_Ãw_deçuÉ (); 200 ià(! d©a -> mgmt ) { 201 `‹¡”_w¬n ("Failedo setup management interface"); 202 `‹¡”_´e_£tup_çžed (); 206 ià( `‹¡”_u£_debug ()) 207 `mgmt_£t_debug ( d©a -> mgmt , mgmt_debug , "mgmt: ", NULL ); 209 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_INDEX_LIST , MGMT_INDEX_NONE , 0, NULL , 210 »ad_šdex_li¡_ÿÎback , NULL , NULL); 211 } } 213  $‹¡_po¡_‹¬down (cÚ¡ * ‹¡_d©a ) 215  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 217 ià( d©a -> io_id > 0) { 218 `g_sourû_»move ( d©a -> io_id ); 219 d©a -> io_id = 0; 222 `hc›mu_uÄef ( d©a -> hc›mu ); 223 d©a -> hc›mu = NULL ; 224 } } 226  $‹¡_d©a_ä“ (* ‹¡_d©a ) 228  ‹¡_d©a * d©a =est_data; 230 `ä“ ( d©a ); 231 } } 233  #‹¡_l2ÿp_b»dr ( Çme , d©a , £tup , func ) \ 235  ‹¡_d©a * u£r ; \ 236 u£r = `m®loc (( ‹¡_d©a )); \ 237 ià(! u£r ) \ 239 u£r -> hc›mu_ty³ = HCIEMU_TYPE_BREDR ; \ 240 u£r -> io_id = 0; \ 241 u£r -> ‹¡_d©a = d©a ; \ 242 `‹¡”_add_fuÎ ( Çme , d©a , \ 243 ‹¡_´e_£tup , £tup , func , NULL , \ 244 ‹¡_po¡_‹¬down , 2, u£r , ‹¡_d©a_ä“ ); \ 245 } 0) ) 247  #‹¡_l2ÿp_Ë ( Çme , d©a , £tup , func ) \ 249  ‹¡_d©a * u£r ; \ 250 u£r = `m®loc (( ‹¡_d©a )); \ 251 ià(! u£r ) \ 253 u£r -> hc›mu_ty³ = HCIEMU_TYPE_LE ; \ 254 u£r -> io_id = 0; \ 255 u£r -> ‹¡_d©a = d©a ; \ 256 `‹¡”_add_fuÎ ( Çme , d©a , \ 257 ‹¡_´e_£tup , £tup , func , NULL , \ 258 ‹¡_po¡_‹¬down , 2, u£r , ‹¡_d©a_ä“ ); \ 259 } 0) ) 261  ušt8_t g·œ_deviû_pš [] = { 0x30, 0x30, 0x30, 0x30 }; 263 cÚ¡  l2ÿp_d©a gþ›Á_cÚÃù_sucûss_‹¡ = { 264 . þ›Á_psm = 0x1001, 265 . g£rv”_psm = 0x1001, 268 cÚ¡  l2ÿp_d©a gþ›Á_cÚÃù_s¥_sucûss_‹¡_1 = { 269 . þ›Á_psm = 0x1001, 270 . g£rv”_psm = 0x1001, 271 . g’abË_s¥ = Œue , 274 cÚ¡  l2ÿp_d©a gþ›Á_cÚÃù_s¥_sucûss_‹¡_2 = { 275 . þ›Á_psm = 0x1001, 276 . g£rv”_psm = 0x1001, 277 . g’abË_s¥ = Œue , 278 . g£c_Ëv– = BT_SECURITY_HIGH , 279 . gþ›Á_io_ÿp = 0x04, 282 cÚ¡  l2ÿp_d©a gþ›Á_cÚÃù_pš_sucûss_‹¡ = { 283 . þ›Á_psm = 0x1001, 284 . g£rv”_psm = 0x1001, 285 . g£c_Ëv– = BT_SECURITY_MEDIUM , 286 . gpš = ·œ_deviû_pš , 287 . gpš_Ën = ( ·œ_deviû_pš ), 288 . gþ›Á_pš = ·œ_deviû_pš , 289 . gþ›Á_pš_Ën = ( ·œ_deviû_pš ), 292  ušt8_t gl2_d©a [] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }; 294 cÚ¡  l2ÿp_d©a gþ›Á_cÚÃù_»ad_sucûss_‹¡ = { 295 . þ›Á_psm = 0x1001, 296 . g£rv”_psm = 0x1001, 297 . g»ad_d©a = l2_d©a , 298 . gd©a_Ën = ( l2_d©a ), 301 cÚ¡  l2ÿp_d©a gþ›Á_cÚÃù_wr™e_sucûss_‹¡ = { 302 . þ›Á_psm = 0x1001, 303 . g£rv”_psm = 0x1001, 304 . gwr™e_d©a = l2_d©a , 305 . gd©a_Ën = ( l2_d©a ), 308 cÚ¡  l2ÿp_d©a gþ›Á_cÚÃù_nv®_psm_‹¡_1 = { 309 . þ›Á_psm = 0x1001, 310 . gex³ù_”r = ECONNREFUSED , 313 cÚ¡  l2ÿp_d©a gþ›Á_cÚÃù_nv®_psm_‹¡_2 = { 314 . þ›Á_psm = 0x0001, 315 . gex³ù_”r = ECONNREFUSED , 318 cÚ¡  l2ÿp_d©a gþ›Á_cÚÃù_nv®_psm_‹¡_3 = { 319 . þ›Á_psm = 0x0001, 320 . gex³ù_”r = ECONNREFUSED , 321 . g’abË_s¥ = Œue , 324 cÚ¡ ušt8_t gl2ÿp_cÚÃù_»q [] = { 0x01, 0x10, 0x41, 0x00 }; 326 cÚ¡  l2ÿp_d©a gl2ÿp_£rv”_sucûss_‹¡ = { 327 . £rv”_psm = 0x1001, 328 . g£nd_cmd_code = BT_L2CAP_PDU_CONN_REQ , 329 . g£nd_cmd = l2ÿp_cÚÃù_»q , 330 . g£nd_cmd_Ën = ( l2ÿp_cÚÃù_»q ), 331 . gex³ù_cmd_code = BT_L2CAP_PDU_CONN_RSP , 334 cÚ¡  l2ÿp_d©a gl2ÿp_£rv”_»ad_sucûss_‹¡ = { 335 . £rv”_psm = 0x1001, 336 . g£nd_cmd_code = BT_L2CAP_PDU_CONN_REQ , 337 . g£nd_cmd = l2ÿp_cÚÃù_»q , 338 . g£nd_cmd_Ën = ( l2ÿp_cÚÃù_»q ), 339 . gex³ù_cmd_code = BT_L2CAP_PDU_CONN_RSP , 340 . g»ad_d©a = l2_d©a , 341 . gd©a_Ën = ( l2_d©a ), 344 cÚ¡  l2ÿp_d©a gl2ÿp_£rv”_wr™e_sucûss_‹¡ = { 345 . £rv”_psm = 0x1001, 346 . g£nd_cmd_code = BT_L2CAP_PDU_CONN_REQ , 347 . g£nd_cmd = l2ÿp_cÚÃù_»q , 348 . g£nd_cmd_Ën = ( l2ÿp_cÚÃù_»q ), 349 . gex³ù_cmd_code = BT_L2CAP_PDU_CONN_RSP , 350 . gwr™e_d©a = l2_d©a , 351 . gd©a_Ën = ( l2_d©a ), 354 cÚ¡ ušt8_t gl2ÿp_£c_block_r¥ [] = { 0x00, 0x00, 360 cÚ¡  l2ÿp_d©a gl2ÿp_£rv”_£c_block_‹¡ = { 361 . £rv”_psm = 0x1001, 362 . g£nd_cmd_code = BT_L2CAP_PDU_CONN_REQ , 363 . g£nd_cmd = l2ÿp_cÚÃù_»q , 364 . g£nd_cmd_Ën = ( l2ÿp_cÚÃù_»q ), 365 . gex³ù_cmd_code = BT_L2CAP_PDU_CONN_RSP , 366 . gex³ù_cmd = l2ÿp_£c_block_r¥ , 367 . gex³ù_cmd_Ën = ( l2ÿp_£c_block_r¥ ), 368 . g’abË_s¥ = Œue , 371 cÚ¡ ušt8_t gl2ÿp_nv®_psm_r¥ [] = { 0x00, 0x00, 377 cÚ¡  l2ÿp_d©a gl2ÿp_£rv”_nv®_psm_‹¡ = { 378 . £nd_cmd_code = BT_L2CAP_PDU_CONN_REQ , 379 . g£nd_cmd = l2ÿp_cÚÃù_»q , 380 . g£nd_cmd_Ën = ( l2ÿp_cÚÃù_»q ), 381 . gex³ù_cmd_code = BT_L2CAP_PDU_CONN_RSP , 382 . gex³ù_cmd = l2ÿp_nv®_psm_r¥ , 383 . gex³ù_cmd_Ën = ( l2ÿp_nv®_psm_r¥ ), 386 cÚ¡ ušt8_t gl2ÿp_nv®_cÚn_»q [] = { 0x00 }; 387 cÚ¡ ušt8_t gl2ÿp_nv®_pdu_r¥ [] = { 0x00, 0x00 }; 389 cÚ¡  l2ÿp_d©a gl2ÿp_£rv”_nv®_pdu_‹¡1 = { 390 . £nd_cmd_code = BT_L2CAP_PDU_CONN_REQ , 391 . g£nd_cmd = l2ÿp_nv®_cÚn_»q , 392 . g£nd_cmd_Ën = ( l2ÿp_nv®_cÚn_»q ), 393 . gex³ù_cmd_code = BT_L2CAP_PDU_CMD_REJECT , 394 . gex³ù_cmd = l2ÿp_nv®_pdu_r¥ , 395 . gex³ù_cmd_Ën = ( l2ÿp_nv®_pdu_r¥ ), 398 cÚ¡ ušt8_t gl2ÿp_nv®_dc_»q [] = { 0x12, 0x34, 0x56, 0x78 }; 399 cÚ¡ ušt8_t gl2ÿp_nv®_cid_r¥ [] = { 0x02, 0x00, 402 cÚ¡  l2ÿp_d©a gl2ÿp_£rv”_nv®_cid_‹¡1 = { 403 . £nd_cmd_code = BT_L2CAP_PDU_DISCONN_REQ , 404 . g£nd_cmd = l2ÿp_nv®_dc_»q , 405 . g£nd_cmd_Ën = ( l2ÿp_nv®_dc_»q ), 406 . gex³ù_cmd_code = BT_L2CAP_PDU_CMD_REJECT , 407 . gex³ù_cmd = l2ÿp_nv®_cid_r¥ , 408 . gex³ù_cmd_Ën = ( l2ÿp_nv®_cid_r¥ ), 411 cÚ¡ ušt8_t gl2ÿp_nv®_cfg_»q [] = { 0x12, 0x34, 0x00, 0x00 }; 412 cÚ¡ ušt8_t gl2ÿp_nv®_cfg_r¥ [] = { 0x02, 0x00, 415 cÚ¡  l2ÿp_d©a gl2ÿp_£rv”_nv®_cid_‹¡2 = { 416 . £nd_cmd_code = BT_L2CAP_PDU_CONFIG_REQ , 417 . g£nd_cmd = l2ÿp_nv®_cfg_»q , 418 . g£nd_cmd_Ën = ( l2ÿp_nv®_cfg_»q ), 419 . gex³ù_cmd_code = BT_L2CAP_PDU_CMD_REJECT , 420 . gex³ù_cmd = l2ÿp_nv®_cfg_r¥ , 421 . gex³ù_cmd_Ën = ( l2ÿp_nv®_cfg_r¥ ), 424 cÚ¡  l2ÿp_d©a gË_þ›Á_cÚÃù_sucûss_‹¡_1 = { 425 . þ›Á_psm = 0x0080, 426 . g£rv”_psm = 0x0080, 429 cÚ¡  l2ÿp_d©a gË_þ›Á_cÚÃù_sucûss_‹¡_2 = { 430 . þ›Á_psm = 0x0080, 431 . g£rv”_psm = 0x0080, 432 . g£c_Ëv– = BT_SECURITY_MEDIUM , 435 cÚ¡ ušt8_t gcmd_»jeù_r¥ [] = { 0x01, 0x01, 0x02, 0x00, 0x00, 0x00 }; 437 cÚ¡  l2ÿp_d©a gË_þ›Á_cÚÃù_»jeù_‹¡_1 = { 438 . þ›Á_psm = 0x0080, 439 . g£nd_cmd = cmd_»jeù_r¥ , 440 . g£nd_cmd_Ën = ( cmd_»jeù_r¥ ), 441 . gex³ù_”r = ECONNREFUSED , 444 cÚ¡  l2ÿp_d©a gË_þ›Á_cÚÃù_nv®_psm_‹¡ = { 445 . þ›Á_psm = 0x0080, 446 . gex³ù_”r = ECONNREFUSED , 449 cÚ¡ ušt8_t gË_cÚÃù_»q [] = { 0x80, 0x00, 456 cÚ¡  l2ÿp_d©a gË_£rv”_sucûss_‹¡ = { 457 . £rv”_psm = 0x0080, 458 . g£nd_cmd_code = BT_L2CAP_PDU_LE_CONN_REQ , 459 . g£nd_cmd = Ë_cÚÃù_»q , 460 . g£nd_cmd_Ën = ( Ë_cÚÃù_»q ), 461 . gex³ù_cmd_code = BT_L2CAP_PDU_LE_CONN_RSP , 464 cÚ¡  l2ÿp_d©a gË_©t_þ›Á_cÚÃù_sucûss_‹¡_1 = { 465 . cid = 0x0004, 466 . g£c_Ëv– = BT_SECURITY_LOW , 469 cÚ¡  l2ÿp_d©a gË_©t_£rv”_sucûss_‹¡_1 = { 470 . cid = 0x0004, 473  $þ›Á_cmd_com¶‘e ( ušt16_t Ýcode , ušt8_t ¡©us , 474 cÚ¡ * ·¿m , ušt8_t Ën , 475 * u£r_d©a ) 477  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 478 cÚ¡  l2ÿp_d©a * ‹¡ = d©a -> ‹¡_d©a ; 479  btho¡ *bthost; 481 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 483  Ýcode ) { 484  BT_HCI_CMD_WRITE_SCAN_ENABLE : 485  BT_HCI_CMD_LE_SET_ADV_ENABLE : 486 `‹¡”_´št ("Cl›Á s‘ cÚÃùabË stu 0x%02x", ¡©us ); 487 ià(! ¡©us && ‹¡ &&e¡-> ’abË_s¥ ) { 488 `btho¡_wr™e_s¥_mode ( btho¡ , 0x01); 492  BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE : 493 `‹¡”_´št ("Cl›ÁƒÇbË SSP stu 0x%02x", ¡©us ); 500 ià( ¡©us ) 501 `‹¡”_£tup_çžed (); 503 `‹¡”_£tup_com¶‘e (); 504 } } 506  $£rv”_cmd_com¶‘e ( ušt16_t Ýcode , ušt8_t ¡©us , 507 cÚ¡ * ·¿m , ušt8_t Ën , 508 * u£r_d©a ) 510  Ýcode ) { 511  BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE : 512 `‹¡”_´št ("S”v”ƒÇbË SSP stu 0x%02x", ¡©us ); 518 ià( ¡©us ) 519 `‹¡”_£tup_çžed (); 521 `‹¡”_£tup_com¶‘e (); 522 } } 524  $£tup_pow”ed_þ›Á_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 525 cÚ¡ * ·¿m , * u£r_d©a ) 527  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 528  btho¡ *bthost; 530 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 531 `‹¡”_£tup_çžed (); 535 `‹¡”_´št ("Controller…owered on"); 537 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 538 `btho¡_£t_cmd_com¶‘e_cb ( btho¡ , þ›Á_cmd_com¶‘e , u£r_d©a ); 539 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_LE ) 540 `btho¡_£t_adv_’abË ( btho¡ , 0x01, 0x00); 542 `btho¡_wr™e_sÿn_’abË ( btho¡ , 0x03); 543 } } 545  $£tup_pow”ed_£rv”_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 546 cÚ¡ * ·¿m , * u£r_d©a ) 548  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 549 cÚ¡  l2ÿp_d©a * ‹¡ = d©a -> ‹¡_d©a ; 550  btho¡ *bthost; 552 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 553 `‹¡”_£tup_çžed (); 557 `‹¡”_´št ("Controller…owered on"); 559 ià(! ‹¡ -> ’abË_s¥ ) { 560 `‹¡”_£tup_com¶‘e (); 564 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 565 `btho¡_£t_cmd_com¶‘e_cb ( btho¡ , £rv”_cmd_com¶‘e , u£r_d©a ); 566 `btho¡_wr™e_s¥_mode ( btho¡ , 0x01); 567 } } 569  $u£r_cÚfœm_»que¡_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 570 cÚ¡ * ·¿m , 571 * u£r_d©a ) 573 cÚ¡  mgmt_ev_u£r_cÚfœm_»que¡ * ev = ·¿m ; 574  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 575 cÚ¡  l2ÿp_d©a * ‹¡ = d©a -> ‹¡_d©a ; 576  mgmt_ý_u£r_cÚfœm_»¶y ý ; 577 ušt16_t Ýcode ; 579 `mem£t (& ý , 0, (cp)); 580 `memýy (& ý . addr , & ev ->addr, (cp.addr)); 582 ià( ‹¡ -> »jeù_s¥ ) 583 Ýcode = MGMT_OP_USER_CONFIRM_NEG_REPLY ; 585 Ýcode = MGMT_OP_USER_CONFIRM_REPLY ; 587 `mgmt_»¶y ( d©a -> mgmt , Ýcode , d©a-> mgmt_šdex , ( ý ), &cp, 588 NULL , NULL, NULL); 589 } } 591  $pš_code_»que¡_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 592 cÚ¡ * ·¿m , * u£r_d©a ) 594 cÚ¡  mgmt_ev_pš_code_»que¡ * ev = ·¿m ; 595  ‹¡_d©a * d©a = u£r_d©a ; 596 cÚ¡  l2ÿp_d©a * ‹¡ = d©a -> ‹¡_d©a ; 597  mgmt_ý_pš_code_»¶y ý ; 599 `mem£t (& ý , 0, (cp)); 600 `memýy (& ý . addr , & ev ->addr, (cp.addr)); 602 ià(! ‹¡ -> pš ) { 603 `mgmt_»¶y ( d©a -> mgmt , MGMT_OP_PIN_CODE_NEG_REPLY , 604 d©a -> mgmt_šdex , ( ý . addr ), &cp.addr, 605 NULL , NULL, NULL); 609 ý . pš_Ën = ‹¡ ->pin_len; 610 `memýy ( ý . pš_code , ‹¡ -> pš ,e¡-> pš_Ën ); 612 `mgmt_»¶y ( d©a -> mgmt , MGMT_OP_PIN_CODE_REPLY , d©a-> mgmt_šdex , 613 ( ý ), &ý, NULL , NULL, NULL); 614 } } 616  $btho¡_£nd_r¥ (cÚ¡ * buf , ušt16_t Ën , * u£r_d©a ) 618  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 619 cÚ¡  l2ÿp_d©a * l2d©a = d©a -> ‹¡_d©a ; 620  btho¡ *bthost; 622 ià( l2d©a -> ex³ù_cmd_Ën && Ën !=†2data->expect_cmd_len) { 623 `‹¡”_‹¡_çžed (); 627 ià( l2d©a -> ex³ù_cmd && `memcmp ( buf ,†2data->expect_cmd, 628 l2d©a -> ex³ù_cmd_Ën )) { 629 `‹¡”_‹¡_çžed (); 633 ià(! l2d©a -> £nd_cmd ) 636 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 637 `btho¡_£nd_cid ( btho¡ , d©a -> hªdË , d©a-> dcid , 638 l2d©a -> £nd_cmd ,†2d©a-> £nd_cmd_Ën ); 639 } } 641  $£nd_r¥_Ãw_cÚn ( ušt16_t hªdË , * u£r_d©a ) 643  ‹¡_d©a * d©a = u£r_d©a ; 644  btho¡ *bthost; 646 `‹¡”_´št ("New cÚÃùiÚ w™h hªdË 0x%04x", hªdË ); 648 d©a -> hªdË = handle; 650 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_LE ) 651 d©a -> dcid = 0x0005; 653 d©a -> dcid = 0x0001; 655 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 656 `btho¡_add_cid_hook ( btho¡ , d©a -> hªdË , d©a-> dcid , 657 btho¡_£nd_r¥ , NULL ); 658 } } 660  $£tup_pow”ed_commÚ () 662  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 663 cÚ¡  l2ÿp_d©a * ‹¡ = d©a -> ‹¡_d©a ; 664  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 665  ·¿m [] = { 0x01 }; 667 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_USER_CONFIRM_REQUEST , 668 d©a -> mgmt_šdex , u£r_cÚfœm_»que¡_ÿÎback , 669 NULL , NULL); 671 ià( ‹¡ && (‹¡-> pš ||e¡-> ex³ù_pš )) 672 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_PIN_CODE_REQUEST , 673 d©a -> mgmt_šdex , pš_code_»que¡_ÿÎback , 674 d©a , NULL ); 676 ià( ‹¡ &&e¡-> þ›Á_io_ÿp ) 677 `btho¡_£t_io_ÿ·bž™y ( btho¡ , ‹¡ -> þ›Á_io_ÿp ); 679 ià( ‹¡ &&e¡-> þ›Á_pš ) 680 `btho¡_£t_pš_code ( btho¡ , ‹¡ -> þ›Á_pš , 681 ‹¡ -> þ›Á_pš_Ën ); 682 ià( ‹¡ &&e¡-> »jeù_s¥ ) 683 `btho¡_£t_»jeù_u£r_cÚfœm ( btho¡ , Œue ); 685 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_LE ) 686 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_LE , d©a-> mgmt_šdex , 687 ( ·¿m ),…¬am, NULL , NULL, NULL); 689 ià( ‹¡ &&e¡-> ’abË_s¥ ) 690 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_SSP , d©a-> mgmt_šdex , 691 ( ·¿m ),…¬am, NULL , NULL, NULL); 693 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_BONDABLE , d©a-> mgmt_šdex , 694 ( ·¿m ),…¬am, NULL , NULL, NULL); 695 } } 697  $£tup_pow”ed_þ›Á (cÚ¡ * ‹¡_d©a ) 699  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 700 cÚ¡  l2ÿp_d©a * ‹¡ = d©a -> ‹¡_d©a ; 701  ·¿m [] = { 0x01 }; 703 `£tup_pow”ed_commÚ (); 705 `‹¡”_´št ("Powering on controller"); 707 ià( ‹¡ && (‹¡-> ex³ù_cmd ||e¡-> £nd_cmd )) { 708  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 709 `btho¡_£t_cÚÃù_cb ( btho¡ , £nd_r¥_Ãw_cÚn , d©a ); 712 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 713 ( ·¿m ),…¬am, £tup_pow”ed_þ›Á_ÿÎback , 714 NULL , NULL); 715 } } 717  $£tup_pow”ed_£rv” (cÚ¡ * ‹¡_d©a ) 719  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 720  ·¿m [] = { 0x01 }; 722 `£tup_pow”ed_commÚ (); 724 `‹¡”_´št ("Powering on controller"); 726 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_CONNECTABLE , d©a-> mgmt_šdex , 727 ( ·¿m ),…¬am, NULL , NULL, NULL); 729 ià( d©a -> hc›mu_ty³ !ð HCIEMU_TYPE_BREDR ) 730 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_ADVERTISING , 731 d©a -> mgmt_šdex , ( ·¿m ),…¬am, NULL , 732 NULL , NULL); 734 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 735 ( ·¿m ),…¬am, £tup_pow”ed_£rv”_ÿÎback , 736 NULL , NULL); 737 } } 739  $‹¡_basic (cÚ¡ * ‹¡_d©a ) 741  sk ; 743 sk = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_L2CAP ); 744 ià( sk < 0) { 745 `‹¡”_w¬n ("Cª'ˆü—‹ sock‘: % (%d)", `¡»¼Ü ( ”ºo ), 746 ”ºo ); 747 `‹¡”_‹¡_çžed (); 751 `þo£ ( sk ); 753 `‹¡”_‹¡_·s£d (); 754 } } 756  gboÞ—n $þ›Á_»ûived_d©a ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 757 gpoš‹r u£r_d©a ) 759  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 760 cÚ¡  l2ÿp_d©a * l2d©a = d©a -> ‹¡_d©a ; 761  buf [1024]; 762  sk ; 764 sk = `g_io_chªÃl_unix_g‘_fd ( io ); 765 ià( `»ad ( sk , buf , l2d©a -> d©a_Ën ) !=†2data->data_len) { 766 `‹¡”_w¬n ("UÇbËØ»ad %u by‹s", l2d©a -> d©a_Ën ); 767 `‹¡”_‹¡_çžed (); 768  FALSE ; 771 ià( `memcmp ( buf , l2d©a -> »ad_d©a ,†2d©a-> d©a_Ën )) 772 `‹¡”_‹¡_çžed (); 774 `‹¡”_‹¡_·s£d (); 776  FALSE ; 777 } } 779  gboÞ—n $£rv”_»ûived_d©a ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 780 gpoš‹r u£r_d©a ) 782  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 783 cÚ¡  l2ÿp_d©a * l2d©a = d©a -> ‹¡_d©a ; 784  buf [1024]; 785  sk ; 787 sk = `g_io_chªÃl_unix_g‘_fd ( io ); 788 ià( `»ad ( sk , buf , l2d©a -> d©a_Ën ) !=†2data->data_len) { 789 `‹¡”_w¬n ("UÇbËØ»ad %u by‹s", l2d©a -> d©a_Ën ); 790 `‹¡”_‹¡_çžed (); 791  FALSE ; 794 ià( `memcmp ( buf , l2d©a -> »ad_d©a ,†2d©a-> d©a_Ën )) 795 `‹¡”_‹¡_çžed (); 797 `‹¡”_‹¡_·s£d (); 799  FALSE ; 800 } } 802  $btho¡_»ûived_d©a (cÚ¡ * buf , ušt16_t Ën , 803 * u£r_d©a ) 805  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 806 cÚ¡  l2ÿp_d©a * l2d©a = d©a -> ‹¡_d©a ; 808 ià( Ën !ð l2d©a -> d©a_Ën ) { 809 `‹¡”_‹¡_çžed (); 813 ià( `memcmp ( buf , l2d©a -> wr™e_d©a ,†2d©a-> d©a_Ën )) 814 `‹¡”_‹¡_çžed (); 816 `‹¡”_‹¡_·s£d (); 817 } } 819  $£rv”_btho¡_»ûived_d©a (cÚ¡ * buf , ušt16_t Ën , 820 * u£r_d©a ) 822  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 823 cÚ¡  l2ÿp_d©a * l2d©a = d©a -> ‹¡_d©a ; 825 ià( Ën !ð l2d©a -> d©a_Ën ) { 826 `‹¡”_‹¡_çžed (); 830 ià( `memcmp ( buf , l2d©a -> wr™e_d©a ,†2d©a-> d©a_Ën )) 831 `‹¡”_‹¡_çžed (); 833 `‹¡”_‹¡_·s£d (); 834 } } 836  boÞ $check_mtu ( ‹¡_d©a * d©a ,  sk ) 838 cÚ¡  l2ÿp_d©a * l2d©a = d©a -> ‹¡_d©a ; 839  l2ÿp_ÝtiÚs l2o ; 840 sockËn_t Ën ; 842 `mem£t (& l2o , 0, (l2o)); 844 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_LE && 845 ( l2d©a -> þ›Á_psm ||†2d©a-> £rv”_psm )) { 849 Ën = ( l2o . imtu ); 850 ià( `g‘sockÝt ( sk , SOL_BLUETOOTH , BT_RCVMTU , 851 & l2o . imtu , & Ën ) < 0) { 852 `‹¡”_w¬n ("getsockopt(BT_RCVMTU): %s (%d)", 853 `¡»¼Ü ( ”ºo ),ƒrrno); 854  çl£ ; 857 Ën = ( l2o . omtu ); 858 ià( `g‘sockÝt ( sk , SOL_BLUETOOTH , BT_SNDMTU , 859 & l2o . omtu , & Ën ) < 0) { 860 `‹¡”_w¬n ("getsockopt(BT_SNDMTU): %s (%d)", 861 `¡»¼Ü ( ”ºo ),ƒrrno); 862  çl£ ; 867 Ën = ( l2o ); 868 ià( `g‘sockÝt ( sk , SOL_L2CAP , L2CAP_OPTIONS , & l2o , & Ën ) < 0) { 869 `‹¡”_w¬n ("getsockopt(L2CAP_OPTIONS): %s (%d)", 870 `¡»¼Ü ( ”ºo ),ƒrrno); 871  çl£ ; 875  Œue ; 876 } } 878  gboÞ—n $l2ÿp_cÚÃù_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 879 gpoš‹r u£r_d©a ) 881  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 882 cÚ¡  l2ÿp_d©a * l2d©a = d©a -> ‹¡_d©a ; 883  ”r , sk_”r , sk ; 884 sockËn_t Ën = ( sk_”r ); 886 d©a -> io_id = 0; 888 sk = `g_io_chªÃl_unix_g‘_fd ( io ); 890 ià( `g‘sockÝt ( sk , SOL_SOCKET , SO_ERROR , & sk_”r , & Ën ) < 0) 891 ”r = - ”ºo ; 893 ”r = - sk_”r ; 895 ià( ”r < 0) { 896 `‹¡”_w¬n ("CÚÃù fažed: % (%d)", `¡»¼Ü (- ”r ), -err); 897  çžed ; 900 `‹¡”_´št ("Successfully connected"); 902 ià(! `check_mtu ( d©a , sk )) { 903 `‹¡”_‹¡_çžed (); 904  FALSE ; 907 ià( l2d©a -> »ad_d©a ) { 908  btho¡ *bthost; 910 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 911 `g_io_add_w©ch ( io , G_IO_IN , þ›Á_»ûived_d©a , NULL ); 913 `btho¡_£nd_cid ( btho¡ , d©a -> hªdË , d©a-> dcid , 914 l2d©a -> »ad_d©a ,†2d©a-> d©a_Ën ); 916  FALSE ; 917 } ià( l2d©a -> wr™e_d©a ) { 918  btho¡ *bthost; 919 ssize_t »t ; 921 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 922 `btho¡_add_cid_hook ( btho¡ , d©a -> hªdË , d©a-> dcid , 923 btho¡_»ûived_d©a , NULL ); 925 »t = `wr™e ( sk , l2d©a -> wr™e_d©a ,†2d©a-> d©a_Ën ); 926 ià( »t !ð l2d©a -> d©a_Ën ) { 927 `‹¡”_w¬n ("Unableo write‡ll data"); 928 `‹¡”_‹¡_çžed (); 931  FALSE ; 934 çžed : 935 ià(- ”r !ð l2d©a -> ex³ù_”r ) 936 `‹¡”_‹¡_çžed (); 938 `‹¡”_‹¡_·s£d (); 940  FALSE ; 941 } } 943  $ü—‹_l2ÿp_sock ( ‹¡_d©a * d©a , ušt16_t psm , 944 ušt16_t cid ,  £c_Ëv– ) 946 cÚ¡ ušt8_t * ma¡”_bdaddr ; 947  sockaddr_l2 addr ; 948  sk , ”r ; 950 sk = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET | SOCK_NONBLOCK , 951 BTPROTO_L2CAP ); 952 ià( sk < 0) { 953 ”r = - ”ºo ; 954 `‹¡”_w¬n ("Cª'ˆü—‹ sock‘: % (%d)", `¡»¼Ü ( ”ºo ), 955 ”ºo ); 956  ”r ; 959 ma¡”_bdaddr = `hc›mu_g‘_ma¡”_bdaddr ( d©a -> hc›mu ); 960 ià(! ma¡”_bdaddr ) { 961 `‹¡”_w¬n ("No master bdaddr"); 962 `þo£ ( sk ); 963  - ENODEV ; 966 `mem£t (& addr , 0, (addr)); 967 addr . l2_çmžy = AF_BLUETOOTH ; 968 addr . l2_psm = `htobs ( psm ); 969 addr . l2_cid = `htobs ( cid ); 970 `baýy (& addr . l2_bdaddr , (*è ma¡”_bdaddr ); 971 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_LE ) 972 addr . l2_bdaddr_ty³ = BDADDR_LE_PUBLIC ; 974 addr . l2_bdaddr_ty³ = BDADDR_BREDR ; 976 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 977 ”r = - ”ºo ; 978 `‹¡”_w¬n ("Cª'ˆbšd sock‘: % (%d)", `¡»¼Ü ( ”ºo ), 979 ”ºo ); 980 `þo£ ( sk ); 981  ”r ; 984 ià( £c_Ëv– ) { 985  bt_£cur™y £c ; 987 `mem£t (& £c , 0, (sec)); 988 £c . Ëv– = £c_Ëv– ; 990 ià( `£tsockÝt ( sk , SOL_BLUETOOTH , BT_SECURITY , & £c , 991 ( £c )) < 0) { 992 ”r = - ”ºo ; 993 `‹¡”_w¬n ("Can't set security†evel: %s (%d)", 994 `¡»¼Ü ( ”ºo ),ƒrrno); 995 `þo£ ( sk ); 996  ”r ; 1000  sk ; 1001 } } 1003  $cÚÃù_l2ÿp_sock ( ‹¡_d©a * d©a ,  sk , ušt16_t psm , 1004 ušt16_t cid ) 1006 cÚ¡ ušt8_t * þ›Á_bdaddr ; 1007  sockaddr_l2 addr ; 1008  ”r ; 1010 þ›Á_bdaddr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 1011 ià(! þ›Á_bdaddr ) { 1012 `‹¡”_w¬n ("No client bdaddr"); 1013  - ENODEV ; 1016 `mem£t (& addr , 0, (addr)); 1017 addr . l2_çmžy = AF_BLUETOOTH ; 1018 `baýy (& addr . l2_bdaddr , (*è þ›Á_bdaddr ); 1019 addr . l2_psm = `htobs ( psm ); 1020 addr . l2_cid = `htobs ( cid ); 1021 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_LE ) 1022 addr . l2_bdaddr_ty³ = BDADDR_LE_PUBLIC ; 1024 addr . l2_bdaddr_ty³ = BDADDR_BREDR ; 1026 ”r = `cÚÃù ( sk , ( sockaddr *è& addr , (addr)); 1027 ià( ”r < 0 && !( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINPROGRESS )) { 1028 ”r = - ”ºo ; 1029 `‹¡”_w¬n ("Cª'ˆcÚÃù sock‘: % (%d)", `¡»¼Ü ( ”ºo ), 1030 ”ºo ); 1031  ”r ; 1035 } } 1037  $þ›Á_l2ÿp_cÚÃù_cb ( ušt16_t hªdË , ušt16_ˆ cid , 1038 * u£r_d©a ) 1040  ‹¡_d©a * d©a = u£r_d©a ; 1042 d©a -> dcid = cid ; 1043 d©a -> hªdË = handle; 1044 } } 1046  $‹¡_cÚÃù (cÚ¡ * ‹¡_d©a ) 1048  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1049 cÚ¡  l2ÿp_d©a * l2d©a = d©a -> ‹¡_d©a ; 1050 GIOChªÃl * io ; 1051  sk ; 1053 ià( l2d©a -> £rv”_psm ) { 1054  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 1056 ià(! l2d©a -> d©a_Ën ) 1057 `btho¡_add_l2ÿp_£rv” ( btho¡ , l2d©a -> £rv”_psm , 1058 NULL , NULL); 1060 `btho¡_add_l2ÿp_£rv” ( btho¡ , l2d©a -> £rv”_psm , 1061 þ›Á_l2ÿp_cÚÃù_cb , d©a ); 1064 sk = `ü—‹_l2ÿp_sock ( d©a , 0, l2d©a -> cid ,†2d©a-> £c_Ëv– ); 1065 ià( sk < 0) { 1066 `‹¡”_‹¡_çžed (); 1070 ià( `cÚÃù_l2ÿp_sock ( d©a , sk , l2d©a -> þ›Á_psm , 1071 l2d©a -> cid ) < 0) { 1072 `þo£ ( sk ); 1073 `‹¡”_‹¡_çžed (); 1077 io = `g_io_chªÃl_unix_Ãw ( sk ); 1078 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 1080 d©a -> io_id = `g_io_add_w©ch ( io , G_IO_OUT , l2ÿp_cÚÃù_cb , NULL ); 1082 `g_io_chªÃl_uÄef ( io ); 1084 `‹¡”_´št ("Connect in…rogress"); 1085 } } 1087  gboÞ—n $l2ÿp_li¡’_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 1088 gpoš‹r u£r_d©a ) 1090  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1091 cÚ¡  l2ÿp_d©a * l2d©a = d©a -> ‹¡_d©a ; 1092  sk , Ãw_sk ; 1094 d©a -> io_id = 0; 1096 sk = `g_io_chªÃl_unix_g‘_fd ( io ); 1098 Ãw_sk = `acû± ( sk , NULL , NULL); 1099 ià( Ãw_sk < 0) { 1100 `‹¡”_w¬n ("acû± fažed: % (%u)", `¡»¼Ü ( ”ºo ),ƒrrno); 1101 `‹¡”_‹¡_çžed (); 1102  FALSE ; 1105 ià(! `check_mtu ( d©a , Ãw_sk )) { 1106 `‹¡”_‹¡_çžed (); 1107  FALSE ; 1110 ià( l2d©a -> »ad_d©a ) { 1111  btho¡ *bthost; 1112 GIOChªÃl * Ãw_io ; 1114 Ãw_io = `g_io_chªÃl_unix_Ãw ( Ãw_sk ); 1115 `g_io_chªÃl_£t_þo£_Ú_uÄef ( Ãw_io , TRUE ); 1117 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 1118 `g_io_add_w©ch ( Ãw_io , G_IO_IN , £rv”_»ûived_d©a , NULL ); 1119 `btho¡_£nd_cid ( btho¡ , d©a -> hªdË , d©a-> dcid , 1120 l2d©a -> »ad_d©a ,†2d©a-> d©a_Ën ); 1122 `g_io_chªÃl_uÄef ( Ãw_io ); 1124  FALSE ; 1125 } ià( l2d©a -> wr™e_d©a ) { 1126  btho¡ *bthost; 1127 ssize_t »t ; 1129 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 1130 `btho¡_add_cid_hook ( btho¡ , d©a -> hªdË , d©a-> scid , 1131 £rv”_btho¡_»ûived_d©a , NULL ); 1133 »t = `wr™e ( Ãw_sk , l2d©a -> wr™e_d©a ,†2d©a-> d©a_Ën ); 1134 `þo£ ( Ãw_sk ); 1136 ià( »t !ð l2d©a -> d©a_Ën ) { 1137 `‹¡”_w¬n ("Unableo write‡ll data"); 1138 `‹¡”_‹¡_çžed (); 1141  FALSE ; 1144 `‹¡”_´št ("Successfully connected"); 1146 `þo£ ( Ãw_sk ); 1148 `‹¡”_‹¡_·s£d (); 1150  FALSE ; 1151 } } 1153  $þ›Á_l2ÿp_r¥ ( ušt8_t code , cÚ¡ * d©a , ušt16_t Ën , 1154 * u£r_d©a ) 1156  ‹¡_d©a *‹¡_d©¨ð u£r_d©a ; 1157 cÚ¡  l2ÿp_d©a * l2d©a = ‹¡_d©a ->test_data; 1159 `‹¡”_´št ("Cl›Á„eûived„e¥Ú£ cod0x%02x", code ); 1161 ià( code !ð l2d©a -> ex³ù_cmd_code ) { 1162 `‹¡”_w¬n ("Unexpected L2CAP„esponse code (expected 0x%02x)", 1163 l2d©a -> ex³ù_cmd_code ); 1164  çžed ; 1167 ià( code =ð BT_L2CAP_PDU_CONN_RSP ) { 1169 cÚ¡  bt_l2ÿp_pdu_cÚn_r¥ * r¥ = d©a ; 1170 ià( Ën =ð( r¥ è&& !r¥-> »suÉ && !r¥-> ¡©us ) 1173 ‹¡_d©a -> dcid = r¥ ->dcid; 1174 ‹¡_d©a -> scid = r¥ ->scid; 1176 ià( l2d©a -> d©a_Ën ) 1180 ià(! l2d©a -> ex³ù_cmd ) { 1181 `‹¡”_‹¡_·s£d (); 1185 ià( l2d©a -> ex³ù_cmd_Ën !ð Ën ) { 1186 `‹¡”_w¬n ("Unexpected L2CAP„esponse†ength (%u != %u)", 1187 Ën , l2d©a -> ex³ù_cmd_Ën ); 1188  çžed ; 1191 ià( `memcmp ( l2d©a -> ex³ù_cmd , d©a , Ën ) != 0) { 1192 `‹¡”_w¬n ("Unexpected L2CAP„esponse"); 1193  çžed ; 1196 `‹¡”_‹¡_·s£d (); 1199 çžed : 1200 `‹¡”_‹¡_çžed (); 1201 } } 1203  $£nd_»q_Ãw_cÚn ( ušt16_t hªdË , * u£r_d©a ) 1205  ‹¡_d©a * d©a = u£r_d©a ; 1206 cÚ¡  l2ÿp_d©a * l2d©a = d©a -> ‹¡_d©a ; 1207  btho¡ *bthost; 1209 `‹¡”_´št ("New cl›Á cÚÃùiÚ w™h hªdË 0x%04x", hªdË ); 1211 d©a -> hªdË = handle; 1213 ià( l2d©a -> £nd_cmd ) { 1214 btho¡_l2ÿp_r¥_cb cb ; 1216 ià( l2d©a -> ex³ù_cmd_code ) 1217 cb = þ›Á_l2ÿp_r¥ ; 1219 cb = NULL ; 1221 `‹¡”_´št ("Sending L2CAP Request from client"); 1223 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 1224 `btho¡_l2ÿp_»q ( btho¡ , hªdË , l2d©a -> £nd_cmd_code , 1225 l2d©a -> £nd_cmd ,†2d©a-> £nd_cmd_Ën , 1226 cb , d©a ); 1228 } } 1230  $‹¡_£rv” (cÚ¡ * ‹¡_d©a ) 1232  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1233 cÚ¡  l2ÿp_d©a * l2d©a = d©a -> ‹¡_d©a ; 1234 cÚ¡ ušt8_t * ma¡”_bdaddr ; 1235 ušt8_t addr_ty³ ; 1236  btho¡ *bthost; 1237 GIOChªÃl * io ; 1238  sk ; 1240 ià( l2d©a -> £rv”_psm ||†2d©a-> cid ) { 1241 sk = `ü—‹_l2ÿp_sock ( d©a , l2d©a -> £rv”_psm , 1242 l2d©a -> cid ,†2d©a-> £c_Ëv– ); 1243 ià( sk < 0) { 1244 `‹¡”_‹¡_çžed (); 1248 ià( `li¡’ ( sk , 5) < 0) { 1249 `‹¡”_w¬n ("listening on socket failed: %s (%u)", 1250 `¡»¼Ü ( ”ºo ),ƒrrno); 1251 `‹¡”_‹¡_çžed (); 1252 `þo£ ( sk ); 1256 io = `g_io_chªÃl_unix_Ãw ( sk ); 1257 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 1259 d©a -> io_id = `g_io_add_w©ch ( io , G_IO_IN , l2ÿp_li¡’_cb , 1260 NULL ); 1261 `g_io_chªÃl_uÄef ( io ); 1263 `‹¡”_´št ("Listening for connections"); 1266 ma¡”_bdaddr = `hc›mu_g‘_ma¡”_bdaddr ( d©a -> hc›mu ); 1267 ià(! ma¡”_bdaddr ) { 1268 `‹¡”_w¬n ("No master bdaddr"); 1269 `‹¡”_‹¡_çžed (); 1273 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 1274 `btho¡_£t_cÚÃù_cb ( btho¡ , £nd_»q_Ãw_cÚn , d©a ); 1276 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_BREDR ) 1277 addr_ty³ = BDADDR_BREDR ; 1279 addr_ty³ = BDADDR_LE_PUBLIC ; 1281 `btho¡_hci_cÚÃù ( btho¡ , ma¡”_bdaddr , addr_ty³ ); 1282 } } 1284  $‹¡_g‘³”Çme_nÙ_cÚÃùed (cÚ¡ * ‹¡_d©a ) 1286  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 1287  sockaddr_l2 addr ; 1288 sockËn_t Ën ; 1289  sk ; 1291 sk = `ü—‹_l2ÿp_sock ( d©a , 0, 0, 0); 1292 ià( sk < 0) { 1293 `‹¡”_‹¡_çžed (); 1297 Ën = ( addr ); 1298 ià( `g‘³”Çme ( sk , ( sockaddr *è& addr , & Ën ) == 0) { 1299 `‹¡”_w¬n ("getpeername succeeded on‚on-connected socket"); 1300 `‹¡”_‹¡_çžed (); 1301  dÚe ; 1304 ià( ”ºo !ð ENOTCONN ) { 1305 `‹¡”_w¬n ("Unexpexted getpeernameƒrror: %s (%d)", 1306 `¡»¼Ü ( ”ºo ),ƒrrno); 1307 `‹¡”_‹¡_çžed (); 1308  dÚe ; 1311 `‹¡”_‹¡_·s£d (); 1313 dÚe : 1314 `þo£ ( sk ); 1315 } } 1317  $maš ( ¬gc , * ¬gv []) 1319 `‹¡”_š™ (& ¬gc , & ¬gv ); 1321 `‹¡_l2ÿp_b»dr ("BasiøL2CAP Sock‘ - Sucûss", NULL , 1322 £tup_pow”ed_þ›Á , ‹¡_basic ); 1323 `‹¡_l2ÿp_b»dr ("NÚ-cÚÃùed g‘³”Çm- Fažu»", NULL , 1324 £tup_pow”ed_þ›Á , 1325 ‹¡_g‘³”Çme_nÙ_cÚÃùed ); 1327 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Client - Success", 1328 & þ›Á_cÚÃù_sucûss_‹¡ , 1329 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 1331 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Client SSP - Success 1", 1332 & þ›Á_cÚÃù_s¥_sucûss_‹¡_1 , 1333 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 1334 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Client SSP - Success 2", 1335 & þ›Á_cÚÃù_s¥_sucûss_‹¡_2 , 1336 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 1337 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Client PIN Code - Success", 1338 & þ›Á_cÚÃù_pš_sucûss_‹¡ , 1339 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 1341 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Client - Read Success", 1342 & þ›Á_cÚÃù_»ad_sucûss_‹¡ , 1343 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 1345 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Client - Write Success", 1346 & þ›Á_cÚÃù_wr™e_sucûss_‹¡ , 1347 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 1349 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Client - Invalid PSM 1", 1350 & þ›Á_cÚÃù_nv®_psm_‹¡_1 , 1351 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 1353 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Client - Invalid PSM 2", 1354 & þ›Á_cÚÃù_nv®_psm_‹¡_2 , 1355 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 1357 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Client - Invalid PSM 3", 1358 & þ›Á_cÚÃù_nv®_psm_‹¡_3 , 1359 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 1361 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Server - Success", 1362 & l2ÿp_£rv”_sucûss_‹¡ , 1363 £tup_pow”ed_£rv” , ‹¡_£rv” ); 1365 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Server - Read Success", 1366 & l2ÿp_£rv”_»ad_sucûss_‹¡ , 1367 £tup_pow”ed_£rv” , ‹¡_£rv” ); 1369 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Server - Write Success", 1370 & l2ÿp_£rv”_wr™e_sucûss_‹¡ , 1371 £tup_pow”ed_£rv” , ‹¡_£rv” ); 1373 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Server - Security Block", 1374 & l2ÿp_£rv”_£c_block_‹¡ , 1375 £tup_pow”ed_£rv” , ‹¡_£rv” ); 1377 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Server - Invalid PSM", 1378 & l2ÿp_£rv”_nv®_psm_‹¡ , 1379 £tup_pow”ed_£rv” , ‹¡_£rv” ); 1380 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Server - Invalid PDU", 1381 & l2ÿp_£rv”_nv®_pdu_‹¡1 , 1382 £tup_pow”ed_£rv” , ‹¡_£rv” ); 1383 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Server - Invalid Disconnect CID", 1384 & l2ÿp_£rv”_nv®_cid_‹¡1 , 1385 £tup_pow”ed_£rv” , ‹¡_£rv” ); 1386 `‹¡_l2ÿp_b»dr ("L2CAP BR/EDR Server - Invalid Config CID", 1387 & l2ÿp_£rv”_nv®_cid_‹¡2 , 1388 £tup_pow”ed_£rv” , ‹¡_£rv” ); 1390 `‹¡_l2ÿp_Ë ("L2CAP LE Client - Success", 1391 & Ë_þ›Á_cÚÃù_sucûss_‹¡_1 , 1392 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 1393 `‹¡_l2ÿp_Ë ("L2CAP LE Client SMP - Success", 1394 & Ë_þ›Á_cÚÃù_sucûss_‹¡_2 , 1395 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 1396 `‹¡_l2ÿp_Ë ("L2CAP LE Client - Command Reject", 1397 & Ë_þ›Á_cÚÃù_»jeù_‹¡_1 , 1398 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 1399 `‹¡_l2ÿp_Ë ("L2CAP LE Client - Invalid PSM", 1400 & Ë_þ›Á_cÚÃù_nv®_psm_‹¡ , 1401 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 1402 `‹¡_l2ÿp_Ë ("L2CAP LE S”v” - Sucûss", & Ë_£rv”_sucûss_‹¡ , 1403 £tup_pow”ed_£rv” , ‹¡_£rv” ); 1406 `‹¡_l2ÿp_Ë ("L2CAP LE ATT Client - Success", 1407 & Ë_©t_þ›Á_cÚÃù_sucûss_‹¡_1 , 1408 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 1409 `‹¡_l2ÿp_Ë ("L2CAP LE ATT Server - Success", 1410 & Ë_©t_£rv”_sucûss_‹¡_1 , 1411 £tup_pow”ed_£rv” , ‹¡_£rv” ); 1413  `‹¡”_run (); 1414 } } @tools/l2ping.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡dio.h > 31  ~<”ºo.h > 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 35  ~ 36  ~ 37  ~ 38  ~ 39  ~ 41  ~ 42  ~ 43  ~ 44  ~ 47  bdaddr_t gbdaddr ; 48  gsize = 44; 49  gid’t = 200; 50  gd–ay = 1; 51  gcouÁ = -1; 52  gtimeout = 10; 53  g»v”£ = 0; 54  gv”ify = 0; 57  g£Á_pkt = 0; 58  g»cv_pkt = 0; 60  $tv2æ ( timev® tv ) 62  ()( tv . tv_£c *1000.0è+ ()Ñv. tv_u£c /1000.0); 63 } } 65  $¡© ( sig ) 67  loss = £Á_pkt ? ()((£Á_pkt- »cv_pkt )/(sent_pkt/100.0)) : 0; 68 `´štf ("%d s’t, %d„eûived, %d%%†oss\n", £Á_pkt , »cv_pkt , loss ); 69 `ex™ (0); 70 } } 72  $pšg (* svr ) 74  sigaùiÚ § ; 75  sockaddr_l2 addr ; 76 sockËn_t ÝŽ’ ; 77 * £nd_buf ; 78 * »cv_buf ; 79  ¡r [18]; 80  i , sk , lo¡ ; 81 ušt8_t id ; 83 `mem£t (& § , 0, (sa)); 84 § . §_hªdËr = ¡© ; 85 `sigaùiÚ ( SIGINT , & § , NULL ); 87 £nd_buf = `m®loc ( L2CAP_CMD_HDR_SIZE + size ); 88 »cv_buf = `m®loc ( L2CAP_CMD_HDR_SIZE + size ); 89 ià(! £nd_buf || ! »cv_buf ) { 90 `³¼Ü ("Can't‡llocate buffer"); 91 `ex™ (1); 95 sk = `sock‘ ( PF_BLUETOOTH , SOCK_RAW , BTPROTO_L2CAP ); 96 ià( sk < 0) { 97 `³¼Ü ("Can't create socket"); 98  ”rÜ ; 102 `mem£t (& addr , 0, (addr)); 103 addr . l2_çmžy = AF_BLUETOOTH ; 104 `baýy (& addr . l2_bdaddr , & bdaddr ); 106 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 107 `³¼Ü ("Can't bind socket"); 108  ”rÜ ; 112 `mem£t (& addr , 0, (addr)); 113 addr . l2_çmžy = AF_BLUETOOTH ; 114 `¡r2ba ( svr , & addr . l2_bdaddr ); 116 ià( `cÚÃù ( sk , ( sockaddr *è& addr , (addr)) < 0) { 117 `³¼Ü ("Can't connect"); 118  ”rÜ ; 122 `mem£t (& addr , 0, (addr)); 123 ÝŽ’ = ( addr ); 125 ià( `g‘sockÇme ( sk , ( sockaddr *è& addr , & ÝŽ’ ) < 0) { 126 `³¼Ü ("Can't get†ocal‡ddress"); 127  ”rÜ ; 130 `ba2¡r (& addr . l2_bdaddr , ¡r ); 131 `´štf ("Pšg: % äom % (d©¨siz%dè...\n", svr , ¡r , size ); 134  i = 0; i < size ; i++) 135 £nd_buf [ L2CAP_CMD_HDR_SIZE + i ] = (i % 40) + 'A'; 137 id = id’t ; 139  couÁ == -1 || count-- > 0) { 140  timev® tv_£nd , tv_»cv , tv_diff ; 141 l2ÿp_cmd_hdr * £nd_cmd = (l2ÿp_cmd_hd¸*è £nd_buf ; 142 l2ÿp_cmd_hdr * »cv_cmd = (l2ÿp_cmd_hd¸*è »cv_buf ; 145 £nd_cmd -> id’t = id ; 146 £nd_cmd -> Ën = `htobs ( size ); 148 ià( »v”£ ) 149 £nd_cmd -> code = L2CAP_ECHO_RSP ; 151 £nd_cmd -> code = L2CAP_ECHO_REQ ; 153 `g‘timeofday (& tv_£nd , NULL ); 156 ià( `£nd ( sk , £nd_buf , L2CAP_CMD_HDR_SIZE + size , 0) <= 0) { 157 `³¼Ü ("Send failed"); 158  ”rÜ ; 162 lo¡ = 0; 164  pÞlfd pf [1]; 165  ”r ; 167 pf [0]. fd = sk ; 168 pf [0]. ev’ts = POLLIN ; 170 ià(( ”r = `pÞl ( pf , 1, timeout * 1000)) < 0) { 171 `³¼Ü ("Poll failed"); 172  ”rÜ ; 175 ià(! ”r ) { 176 lo¡ = 1; 180 ià(( ”r = `»cv ( sk , »cv_buf , L2CAP_CMD_HDR_SIZE + size , 0)) < 0) { 181 `³¼Ü ("Recv failed"); 182  ”rÜ ; 185 ià(! ”r ){ 186 `´štf ("Disconnected\n"); 187  ”rÜ ; 190 »cv_cmd -> Ën = `btohs (recv_cmd->len); 193 ià( »cv_cmd -> id’t !ð id ) 197 ià(! »v”£ && »cv_cmd -> code =ð L2CAP_ECHO_RSP ) 200 ià( »cv_cmd -> code =ð L2CAP_COMMAND_REJ ) { 201 `´štf ("Peer doesn't support Echo…ackets\n"); 202  ”rÜ ; 206 £Á_pkt ++; 208 ià(! lo¡ ) { 209 »cv_pkt ++; 211 `g‘timeofday (& tv_»cv , NULL ); 212 `tim”sub (& tv_»cv , & tv_£nd , & tv_diff ); 214 ià( v”ify ) { 216 ià( »cv_cmd -> Ën !ð size ) { 217 `årštf ( ¡d”r , "Received %d bytes,ƒxpected %d\n", 218 »cv_cmd -> Ën , size ); 219  ”rÜ ; 223 ià( `memcmp (& £nd_buf [ L2CAP_CMD_HDR_SIZE ], 224 & »cv_buf [ L2CAP_CMD_HDR_SIZE ], size )) { 225 `årštf ( ¡d”r , "Response…ayload different.\n"); 226  ”rÜ ; 230 `´štf ("%d by‹ äom % id %dim%.2fms\n", »cv_cmd -> Ën , svr , 231 id - id’t , `tv2æ ( tv_diff )); 233 ià( d–ay ) 234 `¦“p ( d–ay ); 236 `´štf ("nØ»¥Ú£ from %s: id %d\n", svr , id - id’t ); 239 ià(++ id > 254) 240 id = id’t ; 242 `¡© (0); 243 `ä“ ( £nd_buf ); 244 `ä“ ( »cv_buf ); 247 ”rÜ : 248 `þo£ ( sk ); 249 `ä“ ( £nd_buf ); 250 `ä“ ( »cv_buf ); 251 `ex™ (1); 252 } } 254  $u§ge () 256 `´štf ("l2ping - L2CAP…ing\n"); 257 `´štf ("Usage:\n"); 258 `´štf ("\tl2ping [-i device] [-s size] [-c count] [-timeout] [-d delay] [-f] [-r] [-v] \n"); 259 `´štf ("\t-f Flood…ing (delay = 0)\n"); 260 `´štf ("\t-r Reverse…ing\n"); 261 `´štf ("\t-v Verify„equest‡nd„esponse…ayload\n"); 262 } } 264  $maš ( ¬gc , * ¬gv []) 266  Ýt ; 269 `baýy (& bdaddr , BDADDR_ANY ); 271 ( Ýt = `g‘Ýt ( ¬gc , ¬gv ,"i:d:s:c:t:äv")è!ð EOF ) { 272  Ýt ) { 274 ià(! `¡ºÿ£cmp ( Ýrg , "hci", 3)) 275 `hci_devba ( `©oi ( Ýrg + 3), & bdaddr ); 277 `¡r2ba ( Ýrg , & bdaddr ); 281 d–ay = `©oi ( Ýrg ); 286 d–ay = 0; 291 »v”£ = 1; 295 v”ify = 1; 299 couÁ = `©oi ( Ýrg ); 303 timeout = `©oi ( Ýrg ); 307 size = `©oi ( Ýrg ); 311 `u§ge (); 312 `ex™ (1); 316 ià(!( ¬gc - Ýtšd )) { 317 `u§ge (); 318 `ex™ (1); 321 `pšg ( ¬gv [ Ýtšd ]); 324 } } @tools/l2test.c 26 #ifdeà HAVE_CONFIG_H 27  ~ 30  ~<¡dio.h > 31  ~<¡dboÞ.h > 32  ~<”ºo.h > 33  ~<ùy³.h > 34  ~ 35  ~ 36  ~<¡dlib.h > 37  ~ 38  ~ 39  ~ 40  ~ 41  ~ 42  ~ 43  ~ 45  ~ 46  ~ 47  ~ 48  ~ 50  ~"¤c/sh¬ed/utž.h " 52  #NIBBLE_TO_ASCII ( c è((cè< 0x0¨? (cè+ 0x30 : (cè+ 0x57) ) 54  #BREDR_DEFAULT_PSM 0x1011 ) 55  #LE_DEFAULT_PSM 0x0080 ) 59 mSEND , 60 mRECV , 61 mRECONNECT , 62 mMULTY , 63 mDUMP , 64 mCONNECT , 65 mCRECV , 66 mLSEND , 67 mSENDDUMP , 68 mLSENDDUMP , 69 mLSENDRECV , 70 mCSENDRECV , 71 mINFOREQ , 72 #ifdeà __TIZEN_PATCH__ 73 mCONFIGREQ , 75 mPAIRING , 78 #ifdeà __TIZEN_PATCH__ 79  #L2CAP_DEFAULT_RETRANS_TO 2000 ) 80  #L2CAP_DEFAULT_MONITOR_TO 12000 ) 83 * gbuf ; 86  gimtu = 672; 87  gomtu = 0; 90  gfcs = 0x01; 93  gtxwš_size = 63; 96  gmax_Œªsm™ = 3; 99  gd©a_size = -1; 100  gbufãr_size = 2048; 103  bdaddr_t gbdaddr ; 104  gpsm = 0; 105  gcid = 0; 106 #ifdeà __TIZEN_PATCH__ 107  ušt16_t gdcid = 0x0000; 111  gnum_äames = -1; 114  gcouÁ = 1; 117  g£nd_d–ay = 0; 120  g»cv_d–ay = 0; 122 * gfž’ame = NULL ; 124  grfcmode = 0; 125  gma¡” = 0; 126  gauth = 0; 127  g’ü = 0; 128  g£cu» = 0; 129  gsockty³ = SOCK_SEQPACKET ; 130  glšg” = 0; 131  g»lŸbË = 0; 132  gtime¡amp = 0; 133  gdeãr_£tup = 0; 134  g´iÜ™y = -1; 135  grcvbuf = 0; 136  gchª_pÞicy = -1; 137  gbdaddr_ty³ = 0; 139  slookup_bË { 140 cÚ¡ * mÇme ; 141  mæag ; 144  lookup_bË gl2ÿp_modes [] = { 145 { "basic", L2CAP_MODE_BASIC }, 150 { "”tm", L2CAP_MODE_ERTM }, 151 { "¡»amšg", L2CAP_MODE_STREAMING }, 155  lookup_bË gchª_pÞic›s [] = { 156 { "b»dr", BT_CHANNEL_POLICY_BREDR_ONLY }, 157 { "b»dr_´ef", BT_CHANNEL_POLICY_BREDR_PREFERRED }, 158 { "amp_´ef", BT_CHANNEL_POLICY_AMP_PREFERRED }, 159 { NULL , 0 }, 162  lookup_bË gbdaddr_ty³s [] = { 163 { "b»dr", BDADDR_BREDR }, 164 { "Ë_public", BDADDR_LE_PUBLIC }, 165 { "Ë_¿ndom", BDADDR_LE_RANDOM }, 166 { NULL , 0 }, 169  $g‘_lookup_æag ( lookup_bË * bË , * Çme ) 171  i ; 173  i = 0; bË [i]. Çme ; i++) 174 ià(! `¡rÿ£cmp ( bË [ i ]. Çme ,‚ame)) 175  bË [ i ]. æag ; 178 } } 180 cÚ¡ * $g‘_lookup_¡r ( lookup_bË * bË ,  æag ) 182  i ; 184  i = 0; bË [i]. Çme ; i++) 185 ià( bË [ i ]. æag == flag) 186  bË [ i ]. Çme ; 188  NULL ; 189 } } 191  $´št_lookup_v®ues ( lookup_bË * bË , * h—d” ) 193  i ; 195 `´štf ("%s\n", h—d” ); 197  i = 0; bË [i]. Çme ; i++) 198 `´štf ("\t%s\n", bË [ i ]. Çme ); 199 } } 201  $tv2æ ( timev® tv ) 203  () tv . tv_£c + ()Ñv. tv_u£c /1000000.0); 204 } } 206 * $Éoh ( c , * s ) 208  c1 ; 210 c1 = ( c >> 28) & 0x0f; 211 *( s ++èð `NIBBLE_TO_ASCII ( c1 ); 212 c1 = ( c >> 24) & 0x0f; 213 *( s ++èð `NIBBLE_TO_ASCII ( c1 ); 214 c1 = ( c >> 20) & 0x0f; 215 *( s ++èð `NIBBLE_TO_ASCII ( c1 ); 216 c1 = ( c >> 16) & 0x0f; 217 *( s ++èð `NIBBLE_TO_ASCII ( c1 ); 218 c1 = ( c >> 12) & 0x0f; 219 *( s ++èð `NIBBLE_TO_ASCII ( c1 ); 220 c1 = ( c >> 8) & 0x0f; 221 *( s ++èð `NIBBLE_TO_ASCII ( c1 ); 222 c1 = ( c >> 4) & 0x0f; 223 *( s ++èð `NIBBLE_TO_ASCII ( c1 ); 224 c1 = c & 0x0f; 225 *( s ++èð `NIBBLE_TO_ASCII ( c1 ); 226 * s = 0; 227  s ; 228 } } 230 * $ùoh ( c , * s ) 232  c1 ; 234 c1 = ( c >> 4) & 0x0f; 235 *( s ++èð `NIBBLE_TO_ASCII ( c1 ); 236 c1 = c & 0x0f; 237 *( s ++èð `NIBBLE_TO_ASCII ( c1 ); 238 * s = 0; 239  s ; 240 } } 242  $hexdump (* s ,  l ) 244  bä [80]; 245 * pb ; 246  i , n = 0; 248 ià( l == 0) 251  n < l ) { 252 pb = bä ; 253 pb = `Éoh ( n ,…b); 254 *( pb ++) = ':'; 255 *( pb ++) = ' '; 256  i = 0; i < 16; i++) { 257 ià( n + i >ð l ) { 258 *( pb ++) = ' '; 259 *( pb ++) = ' '; 261 pb = `ùoh (*( s + i ),…b); 262 *( pb ++) = ' '; 264 *( pb ++) = ' '; 265  i = 0; i < 16; i++) { 266 ià( n + i >ð l ) 269 *( pb ++èð( `i¥ršt (*( s + i )) ? *(s + i) : '.'); 271 * pb = 0; 272 n += 16; 273 s += 16; 274 `puts ( bä ); 276 } } 278  $g‘Ýts ( sk ,  l2ÿp_ÝtiÚs * Ýts , boÞ cÚÃùed ) 280 sockËn_t ÝŽ’ ; 281  ”r ; 283 `mem£t ( Ýts , 0, (*opts)); 285 ià( bdaddr_ty³ =ð BDADDR_BREDR ) { 286 ÝŽ’ = (* Ýts ); 287  `g‘sockÝt ( sk , SOL_L2CAP , L2CAP_OPTIONS , Ýts , & ÝŽ’ ); 290 ÝŽ’ = ( Ýts -> imtu ); 291 ”r = `g‘sockÝt ( sk , SOL_BLUETOOTH , BT_RCVMTU , & Ýts -> imtu , & ÝŽ’ ); 292 ià( ”r < 0 || ! cÚÃùed ) 293  ”r ; 295 ÝŽ’ = ( Ýts -> omtu ); 296  `g‘sockÝt ( sk , SOL_BLUETOOTH , BT_SNDMTU , & Ýts -> omtu , & ÝŽ’ ); 297 } } 299  $£tÝts ( sk ,  l2ÿp_ÝtiÚs * Ýts ) 301 ià( bdaddr_ty³ =ð BDADDR_BREDR ) 302  `£tsockÝt ( sk , SOL_L2CAP , L2CAP_OPTIONS , Ýts , 303 (* Ýts )); 305  `£tsockÝt ( sk , SOL_BLUETOOTH , BT_RCVMTU , & Ýts -> imtu , 306 ( Ýts -> imtu )); 307 } } 309  $do_cÚÃù (* svr ) 311  sockaddr_l2 addr ; 312  l2ÿp_ÝtiÚs Ýts ; 313  l2ÿp_cÚnšfo cÚn ; 314 sockËn_t ÝŽ’ ; 315  sk , Ýt ; 316  ba [18]; 319 sk = `sock‘ ( PF_BLUETOOTH , sockty³ , BTPROTO_L2CAP ); 320 ià( sk < 0) { 321 `sy¦og ( LOG_ERR , "Can't create socket: %s (%d)", 322 `¡»¼Ü ( ”ºo ),ƒrrno); 327 `mem£t (& addr , 0, (addr)); 328 addr . l2_çmžy = AF_BLUETOOTH ; 329 `baýy (& addr . l2_bdaddr , & bdaddr ); 330 addr . l2_bdaddr_ty³ = bdaddr_ty³ ; 331 ià( cid ) 332 addr . l2_cid = `htobs ( cid ); 334 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 335 `sy¦og ( LOG_ERR , "Can't bind socket: %s (%d)", 336 `¡»¼Ü ( ”ºo ),ƒrrno); 337  ”rÜ ; 341 ià( `g‘Ýts ( sk , & Ýts , çl£ ) < 0) { 342 `sy¦og ( LOG_ERR , "Can't get default L2CAP options: %s (%d)", 343 `¡»¼Ü ( ”ºo ),ƒrrno); 344  ”rÜ ; 348 Ýts . omtu = omtu; 349 Ýts . imtu = imtu; 350 Ýts . mode = rfcmode ; 352 Ýts . fcs = fcs; 353 Ýts . txwš_size =xwin_size; 354 Ýts . max_tx = max_Œªsm™ ; 356 ià( `£tÝts ( sk , & Ýts ) < 0) { 357 `sy¦og ( LOG_ERR , "Can't set L2CAP options: %s (%d)", 358 `¡»¼Ü ( ”ºo ),ƒrrno); 359  ”rÜ ; 364 ià( time¡amp ) { 365  t = 1; 367 ià( `£tsockÝt ( sk , SOL_SOCKET , SO_TIMESTAMP , & t , (t)) < 0) { 368 `sy¦og ( LOG_ERR , "Can'tƒnable SO_TIMESTAMP: %s (%d)", 369 `¡»¼Ü ( ”ºo ),ƒrrno); 370  ”rÜ ; 375 ià( chª_pÞicy != -1) { 376 ià( `£tsockÝt ( sk , SOL_BLUETOOTH , BT_CHANNEL_POLICY , 377 & chª_pÞicy , (chan_policy)) < 0) { 378 `sy¦og ( LOG_ERR , "Can'tƒnable chan…olicy : %s (%d)", 379 `¡»¼Ü ( ”ºo ),ƒrrno); 380  ”rÜ ; 385 ià( lšg” ) { 386  lšg” l = { . l_Úoff = 1, . l_lšg” =†inger }; 388 ià( `£tsockÝt ( sk , SOL_SOCKET , SO_LINGER , & l , (l)) < 0) { 389 `sy¦og ( LOG_ERR , "Can'tƒnable SO_LINGER: %s (%d)", 390 `¡»¼Ü ( ”ºo ),ƒrrno); 391  ”rÜ ; 396 Ýt = 0; 397 ià( »lŸbË ) 398 Ýt |ð L2CAP_LM_RELIABLE ; 399 ià( ma¡” ) 400 Ýt |ð L2CAP_LM_MASTER ; 401 ià( auth ) 402 Ýt |ð L2CAP_LM_AUTH ; 403 ià( ’ü ) 404 Ýt |ð L2CAP_LM_ENCRYPT ; 405 ià( £cu» ) 406 Ýt |ð L2CAP_LM_SECURE ; 408 ià( `£tsockÝt ( sk , SOL_L2CAP , L2CAP_LM , & Ýt , (opt)) < 0) { 409 `sy¦og ( LOG_ERR , "Can't set L2CAP†ink mode: %s (%d)", 410 `¡»¼Ü ( ”ºo ),ƒrrno); 411  ”rÜ ; 415 ià( rcvbuf && `£tsockÝt ( sk , SOL_SOCKET , SO_RCVBUF , 416 & rcvbuf , (rcvbuf)) < 0) { 417 `sy¦og ( LOG_ERR , "Can't set socket„cv buf size: %s (%d)", 418 `¡»¼Ü ( ”ºo ),ƒrrno); 419  ”rÜ ; 422 ÝŽ’ = ( rcvbuf ); 423 ià( `g‘sockÝt ( sk , SOL_SOCKET , SO_RCVBUF , & rcvbuf , & ÝŽ’ ) < 0) { 424 `sy¦og ( LOG_ERR , "Can't get socket„cv buf size: %s (%d)", 425 `¡»¼Ü ( ”ºo ),ƒrrno); 426  ”rÜ ; 430 `mem£t (& addr , 0, (addr)); 431 addr . l2_çmžy = AF_BLUETOOTH ; 432 `¡r2ba ( svr , & addr . l2_bdaddr ); 433 addr . l2_bdaddr_ty³ = bdaddr_ty³ ; 434 ià( cid ) 435 addr . l2_cid = `htobs ( cid ); 436 ià( psm ) 437 addr . l2_psm = `htobs ( psm ); 439  ”rÜ ; 441 ià( `cÚÃù ( sk , ( sockaddr *è& addr , (addr)) < 0 ) { 442 `sy¦og ( LOG_ERR , "Can't connect: %s (%d)", 443 `¡»¼Ü ( ”ºo ),ƒrrno); 444  ”rÜ ; 448 ià( `g‘Ýts ( sk , & Ýts , Œue ) < 0) { 449 `sy¦og ( LOG_ERR , "Can't get L2CAP options: %s (%d)", 450 `¡»¼Ü ( ”ºo ),ƒrrno); 451  ”rÜ ; 455 `mem£t (& cÚn , 0, (conn)); 456 ÝŽ’ = ( cÚn ); 458 ià( `g‘sockÝt ( sk , SOL_L2CAP , L2CAP_CONNINFO , & cÚn , & ÝŽ’ ) < 0) { 459 `sy¦og ( LOG_ERR , "Can't get L2CAP connection information: %s (%d)", 460 `¡»¼Ü ( ”ºo ),ƒrrno); 461  ”rÜ ; 464 ià( ´iÜ™y > 0 && `£tsockÝt ( sk , SOL_SOCKET , SO_PRIORITY , &priority, 465 ( ´iÜ™y )) < 0) { 466 `sy¦og ( LOG_ERR , "Can't set socket…riority: %s (%d)", 467 `¡»¼Ü ( ”ºo ),ƒrrno); 468  ”rÜ ; 471 ià( `g‘sockÝt ( sk , SOL_SOCKET , SO_PRIORITY , & Ýt , & ÝŽ’ ) < 0) { 472 `sy¦og ( LOG_ERR , "Can't get socket…riority: %s (%d)", 473 `¡»¼Ü ( ”ºo ),ƒrrno); 474  ”rÜ ; 478 `mem£t (& addr , 0, (addr)); 479 ÝŽ’ = ( addr ); 481 ià( `g‘³”Çme ( sk , ( sockaddr *è& addr , & ÝŽ’ ) < 0) { 482 `sy¦og ( LOG_ERR , "Can't get socket‚ame: %s (%d)", 483 `¡»¼Ü ( ”ºo ),ƒrrno); 484  ”rÜ ; 487 `ba2¡r (& addr . l2_bdaddr , ba ); 488 `sy¦og ( LOG_INFO , "CÚÃùedØ% (%s,…sm %d, scid %d)", ba , 489 `g‘_lookup_¡r ( bdaddr_ty³s , addr . l2_bdaddr_ty³ ), 490 addr . l2_psm ,‡ddr. l2_cid ); 493 `mem£t (& addr , 0, (addr)); 494 ÝŽ’ = ( addr ); 496 ià( `g‘sockÇme ( sk , ( sockaddr *è& addr , & ÝŽ’ ) < 0) { 497 `sy¦og ( LOG_ERR , "Can't get socket‚ame: %s (%d)", 498 `¡»¼Ü ( ”ºo ),ƒrrno); 499  ”rÜ ; 502 `ba2¡r (& addr . l2_bdaddr , ba ); 503 `sy¦og ( LOG_INFO , "LoÿÈdeviû % (%s,…sm %d, scid %d)", ba , 504 `g‘_lookup_¡r ( bdaddr_ty³s , addr . l2_bdaddr_ty³ ), 505 addr . l2_psm ,‡ddr. l2_cid ); 507 `sy¦og ( LOG_INFO , "Options [imtu %d, omtu %d, flush_to %d, " 509 Ýts . imtu , o±s. omtu , o±s. æush_to , o±s. mode , cÚn . hci_hªdË , 510 cÚn . dev_þass [2], cÚn.dev_þass[1], cÚn.dev_þass[0], Ýt , 511 rcvbuf ); 513 omtu = ( Ýts .omtu > bufãr_size ) ? buffer_size : opts.omtu; 514 imtu = ( Ýts .imtu > bufãr_size ) ? buffer_size : opts.imtu; 516  sk ; 518 ”rÜ : 519 `þo£ ( sk ); 521 } } 523  do_li¡’ ((* hªdËr )( sk )) 525  sockaddr_l2 addr ; 526  l2ÿp_ÝtiÚs Ýts ; 527  l2ÿp_cÚnšfo cÚn ; 528 sockËn_t ÝŽ’ ; 529  sk , nsk , Ýt ; 530  ba [18]; 533 sk = `sock‘ ( PF_BLUETOOTH , sockty³ , BTPROTO_L2CAP ); 534 ià( sk < 0) { 535 `sy¦og ( LOG_ERR , "Can't create socket: %s (%d)", 536 `¡»¼Ü ( ”ºo ),ƒrrno); 537 `ex™ (1); 541 `mem£t (& addr , 0, (addr)); 542 addr . l2_çmžy = AF_BLUETOOTH ; 543 `baýy (& addr . l2_bdaddr , & bdaddr ); 544 addr . l2_bdaddr_ty³ = bdaddr_ty³ ; 545 ià( cid ) 546 addr . l2_cid = `htobs ( cid ); 547 ià( psm ) 548 addr . l2_psm = `htobs ( psm ); 550 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 551 `sy¦og ( LOG_ERR , "Can't bind socket: %s (%d)", 552 `¡»¼Ü ( ”ºo ),ƒrrno); 553  ”rÜ ; 557 Ýt = 0; 558 ià( »lŸbË ) 559 Ýt |ð L2CAP_LM_RELIABLE ; 560 ià( ma¡” ) 561 Ýt |ð L2CAP_LM_MASTER ; 562 ià( auth ) 563 Ýt |ð L2CAP_LM_AUTH ; 564 ià( ’ü ) 565 Ýt |ð L2CAP_LM_ENCRYPT ; 566 ià( £cu» ) 567 Ýt |ð L2CAP_LM_SECURE ; 569 ià( Ýt && `£tsockÝt ( sk , SOL_L2CAP , L2CAP_LM , &opt, (opt)) < 0) { 570 `sy¦og ( LOG_ERR , "Can't set L2CAP†ink mode: %s (%d)", 571 `¡»¼Ü ( ”ºo ),ƒrrno); 572  ”rÜ ; 576 ià( `g‘Ýts ( sk , & Ýts , çl£ ) < 0) { 577 `sy¦og ( LOG_ERR , "Can't get default L2CAP options: %s (%d)", 578 `¡»¼Ü ( ”ºo ),ƒrrno); 579  ”rÜ ; 583 Ýts . omtu = omtu; 584 Ýts . imtu = imtu; 585 ià( rfcmode > 0) 586 Ýts . mode = rfcmode ; 588 Ýts . fcs = fcs; 589 Ýts . txwš_size =xwin_size; 590 Ýts . max_tx = max_Œªsm™ ; 592 ià( `£tÝts ( sk , & Ýts ) < 0) { 593 `sy¦og ( LOG_ERR , "Can't set L2CAP options: %s (%d)", 594 `¡»¼Ü ( ”ºo ),ƒrrno); 595  ”rÜ ; 598 ià( sockty³ =ð SOCK_DGRAM ) { 599 `hªdËr ( sk ); 604 Ýt = deãr_£tup ; 606 ià( Ýt && `£tsockÝt ( sk , SOL_BLUETOOTH , BT_DEFER_SETUP , 607 & Ýt , (opt)) < 0) { 608 `sy¦og ( LOG_ERR , "Can'tƒnable deferred setup : %s (%d)", 609 `¡»¼Ü ( ”ºo ),ƒrrno); 610  ”rÜ ; 615 ià( `li¡’ ( sk , 10)) { 616 `sy¦og ( LOG_ERR , "Can‚ot†isten onhe socket: %s (%d)", 617 `¡»¼Ü ( ”ºo ),ƒrrno); 618  ”rÜ ; 622 `mem£t (& addr , 0, (addr)); 623 ÝŽ’ = ( addr ); 625 ià( `g‘sockÇme ( sk , ( sockaddr *è& addr , & ÝŽ’ ) < 0) { 626 `sy¦og ( LOG_ERR , "Can't get socket‚ame: %s (%d)", 627 `¡»¼Ü ( ”ºo ),ƒrrno); 628  ”rÜ ; 631 psm = `btohs ( addr . l2_psm ); 632 cid = `btohs ( addr . l2_cid ); 634 `sy¦og ( LOG_INFO , "Wa™šg fÜ cÚÃùiÚ oÀpsm %d ...", psm ); 637 `mem£t (& addr , 0, (addr)); 638 ÝŽ’ = ( addr ); 640 nsk = `acû± ( sk , ( sockaddr *è& addr , & ÝŽ’ ); 641 ià( nsk < 0) { 642 `sy¦og ( LOG_ERR , "Accept failed: %s (%d)", 643 `¡»¼Ü ( ”ºo ),ƒrrno); 644  ”rÜ ; 646 ià( `fÜk ()) { 648 `þo£ ( nsk ); 652 `þo£ ( sk ); 655 ià( rcvbuf && `£tsockÝt ( nsk , SOL_SOCKET , SO_RCVBUF , &rcvbuf, 656 ( rcvbuf )) < 0) { 657 `sy¦og ( LOG_ERR , "Can't set„cv buf size: %s (%d)", 658 `¡»¼Ü ( ”ºo ),ƒrrno); 659  ”rÜ ; 662 ÝŽ’ = ( rcvbuf ); 663 ià( `g‘sockÝt ( nsk , SOL_SOCKET , SO_RCVBUF , & rcvbuf , & ÝŽ’ ) 665 `sy¦og ( LOG_ERR , "Can't get„cv buf size: %s (%d)", 666 `¡»¼Ü ( ”ºo ),ƒrrno); 667  ”rÜ ; 671 ià( `g‘Ýts ( nsk , & Ýts , Œue ) < 0) { 672 `sy¦og ( LOG_ERR , "Can't get L2CAP options: %s (%d)", 673 `¡»¼Ü ( ”ºo ),ƒrrno); 674 ià(! deãr_£tup ) { 675 `þo£ ( nsk ); 676  ”rÜ ; 681 `mem£t (& cÚn , 0, (conn)); 682 ÝŽ’ = ( cÚn ); 684 ià( `g‘sockÝt ( nsk , SOL_L2CAP , L2CAP_CONNINFO , & cÚn , & ÝŽ’ ) < 0) { 685 `sy¦og ( LOG_ERR , "Can't get L2CAP connection information: %s (%d)", 686 `¡»¼Ü ( ”ºo ),ƒrrno); 687 ià(! deãr_£tup ) { 688 `þo£ ( nsk ); 689  ”rÜ ; 693 ià( ´iÜ™y > 0 && `£tsockÝt ( nsk , SOL_SOCKET , SO_PRIORITY , 694 & ´iÜ™y , (priority)) < 0) { 695 `sy¦og ( LOG_ERR , "Can't set socket…riority: %s (%d)", 696 `¡»¼Ü ( ”ºo ),ƒrrno); 697 `þo£ ( nsk ); 698  ”rÜ ; 701 ÝŽ’ = ( ´iÜ™y ); 702 ià( `g‘sockÝt ( nsk , SOL_SOCKET , SO_PRIORITY , & Ýt , & ÝŽ’ ) < 0) { 703 `sy¦og ( LOG_ERR , "Can't get socket…riority: %s (%d)", 704 `¡»¼Ü ( ”ºo ),ƒrrno); 705  ”rÜ ; 708 `ba2¡r (& addr . l2_bdaddr , ba ); 709 `sy¦og ( LOG_INFO , "CÚÃù from % (%s,…sm %d, dcid %d)", ba , 710 `g‘_lookup_¡r ( bdaddr_ty³s , addr . l2_bdaddr_ty³ ), 711 addr . l2_psm ,‡ddr. l2_cid ); 714 `mem£t (& addr , 0, (addr)); 715 ÝŽ’ = ( addr ); 717 ià( `g‘sockÇme ( nsk , ( sockaddr *è& addr , & ÝŽ’ ) < 0) { 718 `sy¦og ( LOG_ERR , "Can't get socket‚ame: %s (%d)", 719 `¡»¼Ü ( ”ºo ),ƒrrno); 720  ”rÜ ; 723 `ba2¡r (& addr . l2_bdaddr , ba ); 724 `sy¦og ( LOG_INFO , "LoÿÈdeviû % (%s,…sm %d, scid %d)", ba , 725 `g‘_lookup_¡r ( bdaddr_ty³s , addr . l2_bdaddr_ty³ ), 726 addr . l2_psm ,‡ddr. l2_cid ); 728 `sy¦og ( LOG_INFO , "Options [imtu %d, omtu %d, " 731 Ýts . imtu , o±s. omtu , o±s. æush_to , 732 Ýts . mode , cÚn . hci_hªdË , cÚn. dev_þass [2], 733 cÚn . dev_þass [1], cÚn.dev_þass[0], Ýt , 734 rcvbuf ); 736 omtu = ( Ýts .omtu > bufãr_size ) ? buffer_size : opts.omtu; 737 imtu = ( Ýts .imtu > bufãr_size ) ? buffer_size : opts.imtu; 741 ià( time¡amp ) { 742  t = 1; 744 ià( `£tsockÝt ( nsk , SOL_SOCKET , SO_TIMESTAMP , & t , (t)) < 0) { 745 `sy¦og ( LOG_ERR , "Can'tƒnable SO_TIMESTAMP: %s (%d)", 746 `¡»¼Ü ( ”ºo ),ƒrrno); 747  ”rÜ ; 753 ià( lšg” ) { 754  lšg” l = { . l_Úoff = 1, . l_lšg” =†inger }; 756 ià( `£tsockÝt ( nsk , SOL_SOCKET , SO_LINGER , & l , (l)) < 0) { 757 `sy¦og ( LOG_ERR , "Can'tƒnable SO_LINGER: %s (%d)", 758 `¡»¼Ü ( ”ºo ),ƒrrno); 759 `þo£ ( nsk ); 760  ”rÜ ; 765 ià( deãr_£tup ) { 766 `sy¦og ( LOG_INFO , "Waiting for %d seconds", 767 `abs ( deãr_£tup ) - 1); 768 `¦“p ( `abs ( deãr_£tup ) - 1); 770 ià( deãr_£tup < 0) { 771 `þo£ ( nsk ); 772  ”rÜ ; 776 `hªdËr ( nsk ); 778 `sy¦og ( LOG_INFO , "Disconnect: %m"); 779 `ex™ (0); 782 ”rÜ : 783 `þo£ ( sk ); 784 `ex™ (1); 785 } } 787  $dump_mode ( sk ) 789 sockËn_t ÝŽ’ ; 790  Ýt , Ën ; 792 ià( d©a_size < 0) 793 d©a_size = imtu ; 795 ià( deãr_£tup ) { 796 Ën = `»ad ( sk , buf , d©a_size ); 797 ià( Ën < 0) 798 `sy¦og ( LOG_ERR , "Initial„eadƒrror: %s (%d)", 799 `¡»¼Ü ( ”ºo ),ƒrrno); 801 `sy¦og ( LOG_INFO , "In™ŸÈby‹ %d", Ën ); 804 `sy¦og ( LOG_INFO , "Receiving ..."); 806 fd_£t r£t ; 808 `FD_ZERO (& r£t ); 809 `FD_SET ( sk , & r£t ); 811 ià( `£Ëù ( sk + 1, & r£t , NULL , NULL, NULL) < 0) 814 ià(! `FD_ISSET ( sk , & r£t )) 817 Ën = `»ad ( sk , buf , d©a_size ); 818 ià( Ën <= 0) { 819 ià( Ën < 0) { 820 ià( »lŸbË && ( ”ºo =ð ECOMM )) { 821 `sy¦og ( LOG_INFO , "L2CAP Error ECOMM - clearingƒrror‡nd continuing."); 822 ÝŽ’ = ( Ýt ); 823 ià( `g‘sockÝt ( sk , SOL_SOCKET , SO_ERROR , & Ýt , & ÝŽ’ ) < 0) { 824 `sy¦og ( LOG_ERR , "Couldn't getsockopt(SO_ERROR): %s (%d)", 825 `¡»¼Ü ( ”ºo ),ƒrrno); 830 `sy¦og ( LOG_ERR , "Readƒrror: %s(%d)", 831 `¡»¼Ü ( ”ºo ),ƒrrno); 837 `sy¦og ( LOG_INFO , "Reûv›d %d by‹s", Ën ); 838 `hexdump ( buf , Ën ); 840 } } 842  $»cv_mode ( sk ) 844  timev® tv_beg , tv_’d , tv_diff ; 845  pÞlfd p ; 846  ts [30]; 847  tÙ® ; 848 ušt32_t £q ; 849 sockËn_t ÝŽ’ ; 850  Ýt , Ën ; 852 ià( d©a_size < 0) 853 d©a_size = imtu ; 855 ià( deãr_£tup ) { 856 Ën = `»ad ( sk , buf , d©a_size ); 857 ià( Ën < 0) 858 `sy¦og ( LOG_ERR , "Initial„eadƒrror: %s (%d)", 859 `¡»¼Ü ( ”ºo ),ƒrrno); 861 `sy¦og ( LOG_INFO , "In™ŸÈby‹ %d", Ën ); 864 ià( »cv_d–ay ) 865 `u¦“p ( »cv_d–ay ); 867 `sy¦og ( LOG_INFO , "Receiving ..."); 869 `mem£t ( ts , 0, (ts)); 871 p . fd = sk ; 872 p . ev’ts = POLLIN | POLLERR | POLLHUP ; 874 £q = 0; 876 `g‘timeofday (& tv_beg , NULL ); 877 tÙ® = 0; 878  tÙ® < d©a_size ) { 879 ušt32_t sq ; 880 ušt16_t l ; 881  i ; 883 p . »v’ts = 0; 884 ià( `pÞl (& p , 1, -1) <= 0) 887 ià( p . »v’ts & ( POLLERR | POLLHUP )) 890 Ën = `»cv ( sk , buf , d©a_size , 0); 891 ià( Ën < 0) { 892 ià( »lŸbË && ( ”ºo =ð ECOMM )) { 893 `sy¦og ( LOG_INFO , "L2CAP Error ECOMM - clearingƒrror‡nd continuing.\n"); 894 ÝŽ’ = ( Ýt ); 895 ià( `g‘sockÝt ( sk , SOL_SOCKET , SO_ERROR , & Ýt , & ÝŽ’ ) < 0) { 896 `sy¦og ( LOG_ERR , "Couldn't getsockopt(SO_ERROR): %s (%d)", 897 `¡»¼Ü ( ”ºo ),ƒrrno); 902 `sy¦og ( LOG_ERR , "Read failed: %s (%d)", 903 `¡»¼Ü ( ”ºo ),ƒrrno); 907 ià( Ën < 6) 910 ià( time¡amp ) { 911  timev® tv ; 913 ià( `ioùl ( sk , SIOCGSTAMP , & tv ) < 0) { 914 time¡amp = 0; 915 `mem£t ( ts , 0, (ts)); 917 `¥rštf ( ts , "[%ld.%ld] ", 918 tv . tv_£c ,v. tv_u£c ); 923 sq = `g‘_Ë32 ( buf ); 924 ià( £q !ð sq ) { 925 `sy¦og ( LOG_INFO , "£q missm©ch: %d -> %d", £q , sq ); 926 £q = sq ; 928 £q ++; 931 l = `g‘_Ë16 ( buf + 4); 932 ià( Ën !ð l ) { 933 `sy¦og ( LOG_INFO , "sizmissm©ch: %d -> %d", Ën , l ); 938  i = 6; i < Ën ; i++) { 939 ià( buf [ i ] != 0x7f) 940 `sy¦og ( LOG_INFO , "d©¨missm©ch: by‹ %d 0x%2.2x", i , buf [i]); 943 tÙ® +ð Ën ; 945 `g‘timeofday (& tv_’d , NULL ); 947 `tim”sub (& tv_’d , & tv_beg , & tv_diff ); 949 `sy¦og ( LOG_INFO ,"%s%ld by‹ š %.2à£c, %.2àkB/s", ts , tÙ® , 950 `tv2æ ( tv_diff ), ()( tÙ® /v2fl(tv_diff) ) / 1024.0); 952 } } 954  $do_£nd ( sk ) 956 ušt32_t £q ; 957  i , fd , Ën , buæ’ , size , £Á ; 959 `sy¦og ( LOG_INFO , "Sending ..."); 961 ià( d©a_size < 0) 962 d©a_size = omtu ; 964 ià( fž’ame ) { 965 fd = `Ý’ ( fž’ame , O_RDONLY ); 966 ià( fd < 0) { 967 `sy¦og ( LOG_ERR , "Open failed: %s (%d)", 968 `¡»¼Ü ( ”ºo ),ƒrrno); 969 `ex™ (1); 972 £Á = 0; 973 size = `»ad ( fd , buf , d©a_size ); 974  size > 0) { 975 buæ’ = ( size > omtu ) ? omtu : size; 977 Ën = `£nd ( sk , buf + £Á , buæ’ , 0); 979 £Á +ð Ën ; 980 size -ð Ën ; 984  i = 6; i < d©a_size ; i++) 985 buf [ i ] = 0x7f; 988 £q = 0; 989 ( num_äames == -1) || (num_frames-- > 0)) { 990 `put_Ë32 ( £q , buf ); 991 `put_Ë16 ( d©a_size , buf + 4); 993 £q ++; 995 £Á = 0; 996 size = d©a_size ; 997  size > 0) { 998 buæ’ = ( size > omtu ) ? omtu : size; 1000 Ën = `£nd ( sk , buf , buæ’ , 0); 1001 ià( Ën < 0 ||†’ !ð buæ’ ) { 1002 `sy¦og ( LOG_ERR , "Send failed: %s (%d)", 1003 `¡»¼Ü ( ”ºo ),ƒrrno); 1004 `ex™ (1); 1007 £Á +ð Ën ; 1008 size -ð Ën ; 1011 ià( num_äames && £nd_d–ay && couÁ && !( £q % count)) 1012 `u¦“p ( £nd_d–ay ); 1014 } } 1016  $£nd_mode ( sk ) 1018 `do_£nd ( sk ); 1020 `sy¦og ( LOG_INFO , "Closing channel ..."); 1021 ià( `shutdown ( sk , SHUT_RDWR ) < 0) 1022 `sy¦og ( LOG_INFO , "Close failed: %m"); 1024 `sy¦og ( LOG_INFO , "Done"); 1025 } } 1027  $£nddump_mode ( sk ) 1029 `do_£nd ( sk ); 1031 `dump_mode ( sk ); 1032 } } 1034  $£nd_ªd_»cv_mode ( sk ) 1036  æags ; 1038 ià(( æags = `fúŽ ( sk , F_GETFL , 0)) < 0) 1039 æags = 0; 1040 `fúŽ ( sk , F_SETFL , æags | O_NONBLOCK ); 1043 ià( `fÜk ()) 1044 `£nd_mode ( sk ); 1046 `»cv_mode ( sk ); 1048 } } 1050  $»cÚÃù_mode (* svr ) 1053  sk = `do_cÚÃù ( svr ); 1054 `þo£ ( sk ); 1056 } } 1058  $cÚÃù_mode (* svr ) 1060  pÞlfd p ; 1061  sk ; 1063 ià(( sk = `do_cÚÃù ( svr )) < 0) 1064 `ex™ (1); 1066 p . fd = sk ; 1067 p . ev’ts = POLLERR | POLLHUP ; 1070 p . »v’ts = 0; 1071 ià( `pÞl (& p , 1, 500)) 1075 `sy¦og ( LOG_INFO , "Disconnected"); 1077 `þo£ ( sk ); 1078 } } 1080  $muÉi_cÚÃù_mode ( ¬gc , * ¬gv []) 1082  i , n , sk ; 1085  n = 0;‚ < ¬gc ;‚++) { 1086  i = 0; i < couÁ ; i++) { 1087 ià( `fÜk ()) 1091 sk = `do_cÚÃù ( ¬gv [ n ]); 1092 `u¦“p (500); 1093 `þo£ ( sk ); 1094 `ex™ (0); 1097 `¦“p (4); 1099 } } 1101 #ifdeà __TIZEN_PATCH__ 1102  $l2ÿp_add_cÚf_Ýt (** ±r , ušt8_t ty³ , ušt8_ˆ Ën ,  v® ) 1104 l2ÿp_cÚf_Ýt * Ýt = * ±r ; 1106 `´štf ("ty³ 0x%2.2x†’ %u v® 0x%lx \n", ty³ , Ën , v® ); 1107 Ýt -> ty³ = `htobs (type); 1108 Ýt -> Ën = `htobs (len); 1110  Ýt -> Ën ) { 1112 *(( ušt8_t *è Ýt -> v® ) = val; 1115 `bt_put_Ë16 ( v® , Ýt ->val); 1118 `bt_put_Ë32 ( v® , Ýt ->val); 1121 `memýy ( Ýt -> v® , (*èv®, Ën ); 1125 * ±r +ð L2CAP_CONF_OPT_SIZE + Ën ; 1126 } } 1128  $l2ÿp_bužd_cÚf_»q (* d©a ) 1130 l2ÿp_cÚf_»q * »q = d©a ; 1131 l2ÿp_cÚf_rfc rfc ; 1132 * ±r = »q -> d©a ; 1134 »q -> dcid = `htobs (dcid); 1135 »q -> æags = `htobs (0x0000); 1137  rfcmode ) { 1138  L2CAP_MODE_BASIC : 1139 rfc . mode = `htobs ( L2CAP_MODE_BASIC ); 1140 rfc . txwš_size = `htobs (0); 1141 rfc . max_Œªsm™ = `htobs (0); 1142 rfc . »Œªs_timeout = `htobs (0); 1143 rfc . mÚ™Ü_timeout = `htobs (0); 1144 rfc . max_pdu_size = `htobs (0); 1146 `l2ÿp_add_cÚf_Ýt (& ±r , L2CAP_CONF_RFC , ( rfc ), 1147 (è& rfc ); 1151  L2CAP_MODE_ERTM : 1152 rfc . mode = `htobs ( L2CAP_MODE_ERTM ); 1153 rfc . txwš_size = `htobs (txwin_size); 1154 rfc . max_Œªsm™ = `htobs (max_transmit); 1155 rfc . »Œªs_timeout = `htobs ( L2CAP_DEFAULT_RETRANS_TO ); 1156 rfc . mÚ™Ü_timeout = `htobs ( L2CAP_DEFAULT_MONITOR_TO ); 1157 rfc . max_pdu_size = `htobs ( imtu ); 1160 `l2ÿp_add_cÚf_Ýt (& ±r , L2CAP_CONF_RFC , ( rfc ), 1161 (è& rfc ); 1164  L2CAP_MODE_STREAMING : 1165 rfc . mode = `htobs ( L2CAP_MODE_STREAMING ); 1166 rfc . txwš_size = `htobs (txwin_size); 1167 rfc . max_Œªsm™ = `htobs (max_transmit); 1168 rfc . »Œªs_timeout = `htobs ( L2CAP_DEFAULT_RETRANS_TO ); 1169 rfc . mÚ™Ü_timeout = `htobs ( L2CAP_DEFAULT_MONITOR_TO ); 1170 rfc . max_pdu_size = `htobs ( imtu ); 1173 `l2ÿp_add_cÚf_Ýt (& ±r , L2CAP_CONF_RFC , ( rfc ), 1174 (è& rfc ); 1178  L2CAP_CONF_REQ_SIZE ; 1180  ±r - d©a ; 1181 } } 1183  $cÚfig_»que¡ (* svr ) 1185  buf [48]; 1186 l2ÿp_cmd_hdr * cmd = (l2ÿp_cmd_hd¸*è buf ; 1187 ušt8_t * »q_buf = (ušt8_ˆ*è( buf + L2CAP_CMD_HDR_SIZE ); 1188 #iâdeà __TIZEN_PATCH__ 1189 ušt16_t mtu ; 1190 ušt32_t chªÃls , mask = 0x0000; 1192  sockaddr_l2 addr ; 1193 #iâdeà __TIZEN_PATCH__ 1194  sk , ”r ; 1196  sk ; 1198  d©a_Ën = 0; 1200 sk = `sock‘ ( PF_BLUETOOTH , SOCK_RAW , BTPROTO_L2CAP ); 1201 ià( sk < 0) { 1202 `³¼Ü ("Can't create socket"); 1206 `mem£t (& addr , 0, (addr)); 1207 addr . l2_çmžy = AF_BLUETOOTH ; 1208 `baýy (& addr . l2_bdaddr , & bdaddr ); 1209 addr . l2_bdaddr_ty³ = bdaddr_ty³ ; 1211 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 1212 `³¼Ü ("Can't bind socket"); 1213  çžed ; 1216 `mem£t (& addr , 0, (addr)); 1217 addr . l2_çmžy = AF_BLUETOOTH ; 1218 `¡r2ba ( svr , & addr . l2_bdaddr ); 1219 addr . l2_bdaddr_ty³ = bdaddr_ty³ ; 1221 ià( `cÚÃù ( sk , ( sockaddr *è& addr , (addr)) < 0 ) { 1222 `³¼Ü ("Can't connect socket"); 1223  çžed ; 1226 `mem£t ( buf , 0, (buf)); 1227 cmd -> code = L2CAP_CONF_REQ ; 1228 cmd -> id’t = 141; 1229 d©a_Ën = `l2ÿp_bužd_cÚf_»q ( »q_buf ); 1230 cmd -> Ën = `htobs ( d©a_Ën ); 1232 ià( `£nd ( sk , buf , L2CAP_CMD_HDR_SIZE + d©a_Ën , 0) < 0) { 1233 `³¼Ü ("Can't send info„equest"); 1234  çžed ; 1236 çžed : 1237 `þo£ ( sk ); 1238 } } 1241  $šfo_»que¡ (* svr ) 1243  buf [48]; 1244 l2ÿp_cmd_hdr * cmd = (l2ÿp_cmd_hd¸*è buf ; 1245 l2ÿp_šfo_»q * »q = (l2ÿp_šfo_»q *è( buf + L2CAP_CMD_HDR_SIZE ); 1246 l2ÿp_šfo_r¥ * r¥ = (l2ÿp_šfo_r¥ *è( buf + L2CAP_CMD_HDR_SIZE ); 1247 ušt16_t mtu ; 1248 ušt32_t chªÃls , mask = 0x0000; 1249  sockaddr_l2 addr ; 1250  sk , ”r ; 1252 sk = `sock‘ ( PF_BLUETOOTH , SOCK_RAW , BTPROTO_L2CAP ); 1253 ià( sk < 0) { 1254 `³¼Ü ("Can't create socket"); 1258 `mem£t (& addr , 0, (addr)); 1259 addr . l2_çmžy = AF_BLUETOOTH ; 1260 `baýy (& addr . l2_bdaddr , & bdaddr ); 1261 addr . l2_bdaddr_ty³ = bdaddr_ty³ ; 1263 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 1264 `³¼Ü ("Can't bind socket"); 1265  çžed ; 1268 `mem£t (& addr , 0, (addr)); 1269 addr . l2_çmžy = AF_BLUETOOTH ; 1270 `¡r2ba ( svr , & addr . l2_bdaddr ); 1271 addr . l2_bdaddr_ty³ = bdaddr_ty³ ; 1273 ià( `cÚÃù ( sk , ( sockaddr *è& addr , (addr)) < 0 ) { 1274 `³¼Ü ("Can't connect socket"); 1275  çžed ; 1278 `mem£t ( buf , 0, (buf)); 1279 cmd -> code = L2CAP_INFO_REQ ; 1280 cmd -> id’t = 141; 1281 cmd -> Ën = `htobs (2); 1282 »q -> ty³ = `htobs (0x0001); 1284 ià( `£nd ( sk , buf , L2CAP_CMD_HDR_SIZE + L2CAP_INFO_REQ_SIZE , 0) < 0) { 1285 `³¼Ü ("Can't send info„equest"); 1286  çžed ; 1289 ”r = `»cv ( sk , buf , L2CAP_CMD_HDR_SIZE + L2CAP_INFO_RSP_SIZE + 2, 0); 1290 ià( ”r < 0) { 1291 `³¼Ü ("Can't„eceive info„esponse"); 1292  çžed ; 1295  `btohs ( r¥ -> »suÉ )) { 1297 `memýy (& mtu , r¥ -> d©a , (mtu)); 1298 `´štf ("CÚÃùiÚËs MTU sizi %d\n", `btohs ( mtu )); 1301 `´štf ("Connectionless MTU is‚ot supported\n"); 1305 `mem£t ( buf , 0, (buf)); 1306 cmd -> code = L2CAP_INFO_REQ ; 1307 cmd -> id’t = 142; 1308 cmd -> Ën = `htobs (2); 1309 »q -> ty³ = `htobs (0x0002); 1311 ià( `£nd ( sk , buf , L2CAP_CMD_HDR_SIZE + L2CAP_INFO_REQ_SIZE , 0) < 0) { 1312 `³¼Ü ("Can't send info„equest"); 1313  çžed ; 1316 ”r = `»cv ( sk , buf , L2CAP_CMD_HDR_SIZE + L2CAP_INFO_RSP_SIZE + 4, 0); 1317 ià( ”r < 0) { 1318 `³¼Ü ("Can't„eceive info„esponse"); 1319  çžed ; 1322  `btohs ( r¥ -> »suÉ )) { 1324 `memýy (& mask , r¥ -> d©a , (mask)); 1325 `´štf ("Ex‹nded f—tu» mask i 0x%04x\n", `btohl ( mask )); 1326 ià( mask & L2CAP_FEAT_FLOWCTL ) 1327 `´štf (" Flow control mode\n"); 1328 ià( mask & L2CAP_FEAT_RETRANS ) 1329 `´štf (" Retransmission mode\n"); 1330 ià( mask & L2CAP_FEAT_BIDIR_QOS ) 1331 `´štf (" Bi-directional QoS\n"); 1332 ià( mask & L2CAP_FEAT_ERTM ) 1333 `´štf (" Enhanced Retransmission mode\n"); 1334 ià( mask & L2CAP_FEAT_STREAMING ) 1335 `´štf (" Streaming mode\n"); 1336 ià( mask & L2CAP_FEAT_FCS ) 1337 `´štf (" FCS Option\n"); 1338 ià( mask & L2CAP_FEAT_EXT_FLOW ) 1339 `´štf (" Extended Flow Specification\n"); 1340 ià( mask & L2CAP_FEAT_FIXED_CHAN ) 1341 `´štf (" Fixed Channels\n"); 1342 ià( mask & L2CAP_FEAT_EXT_WINDOW ) 1343 `´štf (" Extended Window Size\n"); 1344 ià( mask & L2CAP_FEAT_UCD ) 1345 `´štf (" Unicast Connectionless Data Reception\n"); 1348 `´štf ("Extended feature mask is‚ot supported\n"); 1352 ià(!( mask & 0x80)) 1353  çžed ; 1355 `mem£t ( buf , 0, (buf)); 1356 cmd -> code = L2CAP_INFO_REQ ; 1357 cmd -> id’t = 143; 1358 cmd -> Ën = `htobs (2); 1359 »q -> ty³ = `htobs (0x0003); 1361 ià( `£nd ( sk , buf , L2CAP_CMD_HDR_SIZE + L2CAP_INFO_REQ_SIZE , 0) < 0) { 1362 `³¼Ü ("Can't send info„equest"); 1363  çžed ; 1366 ”r = `»cv ( sk , buf , L2CAP_CMD_HDR_SIZE + L2CAP_INFO_RSP_SIZE + 8, 0); 1367 ià( ”r < 0) { 1368 `³¼Ü ("Can't„eceive info„esponse"); 1369  çžed ; 1372  `btohs ( r¥ -> »suÉ )) { 1374 `memýy (& chªÃls , r¥ -> d©a , (channels)); 1375 `´štf ("Fixed chªÃl li¡ i 0x%04x\n", `btohl ( chªÃls )); 1378 `´štf ("Fixed channels†ist is‚ot supported\n"); 1382 çžed : 1383 `þo£ ( sk ); 1384 } } 1386  $do_·œšg (* svr ) 1388  sockaddr_l2 addr ; 1389  sk , Ýt ; 1391 sk = `sock‘ ( PF_BLUETOOTH , SOCK_RAW , BTPROTO_L2CAP ); 1392 ià( sk < 0) { 1393 `³¼Ü ("Can't create socket"); 1397 `mem£t (& addr , 0, (addr)); 1398 addr . l2_çmžy = AF_BLUETOOTH ; 1399 `baýy (& addr . l2_bdaddr , & bdaddr ); 1400 addr . l2_bdaddr_ty³ = bdaddr_ty³ ; 1402 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 1403 `³¼Ü ("Can't bind socket"); 1404  çžed ; 1407 ià( £cu» ) 1408 Ýt = L2CAP_LM_SECURE ; 1410 Ýt = L2CAP_LM_ENCRYPT ; 1412 ià( `£tsockÝt ( sk , SOL_L2CAP , L2CAP_LM , & Ýt , (opt)) < 0) { 1413 `³¼Ü ("Can't set†ink mode"); 1414  çžed ; 1417 `mem£t (& addr , 0, (addr)); 1418 addr . l2_çmžy = AF_BLUETOOTH ; 1419 `¡r2ba ( svr , & addr . l2_bdaddr ); 1420 addr . l2_bdaddr_ty³ = bdaddr_ty³ ; 1422 ià( `cÚÃù ( sk , ( sockaddr *è& addr , (addr)) < 0 ) { 1423 `³¼Ü ("Can't connect socket"); 1424  çžed ; 1427 `´štf ("Pairing successful\n"); 1429 çžed : 1430 `þo£ ( sk ); 1431 } } 1433  $u§ge () 1435 `´štf ("l2test - L2CAPesting\n" 1437 `´štf ("\tl2test [options] [bdaddr]\n"); 1438 `´štf ("Modes:\n" 1452 #ifdeà __TIZEN_PATCH__ 1459 `´štf ("Options:\n" 1484 #ifdeà __TIZEN_PATCH__ 1490 } } 1492  $maš ( ¬gc , * ¬gv []) 1494  sigaùiÚ § ; 1495  Ýt , sk , mode = RECV , Ãed_addr = 0; 1497 `baýy (& bdaddr , BDADDR_ANY ); 1499 #ifdeà __TIZEN_PATCH__ 1500 ( Ýt = `g‘Ýt ( ¬gc , ¬gv , "rdscouwmntqxyzpb:a:" 1501 "i:P:I:O:J:B:N:L:W:C:D:X:F:Q:Z:Y:H:K:V:e:RUGAESMT")è!ð EOF ) { 1503 ( Ýt = `g‘Ýt ( ¬gc , ¬gv , "rdscuwmntqxyzpb:a:" 1504 "i:P:I:O:J:B:N:L:W:C:D:X:F:Q:Z:Y:H:K:V:RUGAESMT")è!ð EOF ) { 1506  Ýt ) { 1508 mode = RECV ; 1512 mode = SEND ; 1513 Ãed_addr = 1; 1517 mode = LSEND ; 1521 mode = CRECV ; 1522 Ãed_addr = 1; 1526 mode = DUMP ; 1530 mode = RECONNECT ; 1531 Ãed_addr = 1; 1534 #ifdeà __TIZEN_PATCH__ 1536 mode = CONFIGREQ ; 1537 Ãed_addr = 1; 1542 mode = CONNECT ; 1543 Ãed_addr = 1; 1547 mode = MULTY ; 1548 Ãed_addr = 1; 1552 mode = LSENDRECV ; 1556 mode = CSENDRECV ; 1557 Ãed_addr = 1; 1561 mode = LSENDDUMP ; 1565 mode = SENDDUMP ; 1569 mode = INFOREQ ; 1570 Ãed_addr = 1; 1574 mode = PAIRING ; 1575 Ãed_addr = 1; 1579 d©a_size = `©oi ( Ýrg ); 1583 ià(! `¡ºÿ£cmp ( Ýrg , "hci", 3)) 1584 `hci_devba ( `©oi ( Ýrg + 3), & bdaddr ); 1586 `¡r2ba ( Ýrg , & bdaddr ); 1590 psm = `©oi ( Ýrg ); 1594 imtu = `©oi ( Ýrg ); 1598 omtu = `©oi ( Ýrg ); 1602 lšg” = `©oi ( Ýrg ); 1606 deãr_£tup = `©oi ( Ýrg ); 1610 fž’ame = `¡rdup ( Ýrg ); 1614 num_äames = `©oi ( Ýrg ); 1618 couÁ = `©oi ( Ýrg ); 1622 £nd_d–ay = `©oi ( Ýrg ) * 1000; 1626 »cv_d–ay = `©oi ( Ýrg ) * 1000; 1630 rfcmode = `g‘_lookup_æag ( l2ÿp_modes , Ýrg ); 1632 ià( rfcmode == -1) { 1633 `´št_lookup_v®ues ( l2ÿp_modes , 1635 `ex™ (1); 1641 chª_pÞicy = `g‘_lookup_æag ( chª_pÞic›s , Ýrg ); 1643 ià( chª_pÞicy == -1) { 1644 `´št_lookup_v®ues ( chª_pÞic›s , 1646 `ex™ (1); 1652 ´iÜ™y = `©oi ( Ýrg ); 1656 fcs = `©oi ( Ýrg ); 1660 »lŸbË = 1; 1664 ma¡” = 1; 1668 auth = 1; 1672 ’ü = 1; 1676 £cu» = 1; 1680 sockty³ = SOCK_DGRAM ; 1684 sockty³ = SOCK_STREAM ; 1688 time¡amp = 1; 1692 max_Œªsm™ = `©oi ( Ýrg ); 1696 txwš_size = `©oi ( Ýrg ); 1700 cid = `©oi ( Ýrg ); 1704 rcvbuf = `©oi ( Ýrg ); 1708 bdaddr_ty³ = `g‘_lookup_æag ( bdaddr_ty³s , Ýrg ); 1710 ià( bdaddr_ty³ == -1) { 1711 `´št_lookup_v®ues ( bdaddr_ty³s , 1713 `ex™ (1); 1717 #ifdeà __TIZEN_PATCH__ 1719 dcid = `©oi ( Ýrg ); 1720 `´štf ("dcid %d", dcid ); 1724 `u§ge (); 1725 `ex™ (1); 1729 ià(! psm ) { 1730 ià( bdaddr_ty³ =ð BDADDR_BREDR ) 1731 psm = BREDR_DEFAULT_PSM ; 1733 psm = LE_DEFAULT_PSM ; 1736 ià( Ãed_addr && !( ¬gc - Ýtšd )) { 1737 `u§ge (); 1738 `ex™ (1); 1741 ià( d©a_size < 0) 1742 bufãr_size = ( omtu > imtu ) ? omtu : imtu; 1744 bufãr_size = d©a_size ; 1746 ià(!( buf = `m®loc ( bufãr_size ))) { 1747 `³¼Ü ("Can't‡llocate data buffer"); 1748 `ex™ (1); 1751 `mem£t (& § , 0, (sa)); 1752 § . §_hªdËr = SIG_IGN ; 1753 § . §_æags = SA_NOCLDSTOP ; 1754 `sigaùiÚ ( SIGCHLD , & § , NULL ); 1756 `Ý’log ("l2‹¡", LOG_PERROR | LOG_PID , LOG_LOCAL0 ); 1758  mode ) { 1759  RECV : 1760 `do_li¡’ ( »cv_mode ); 1763  CRECV : 1764 sk = `do_cÚÃù ( ¬gv [ Ýtšd ]); 1765 ià( sk < 0) 1766 `ex™ (1); 1767 `»cv_mode ( sk ); 1770  DUMP : 1771 `do_li¡’ ( dump_mode ); 1774  SEND : 1775 sk = `do_cÚÃù ( ¬gv [ Ýtšd ]); 1776 ià( sk < 0) 1777 `ex™ (1); 1778 `£nd_mode ( sk ); 1781  LSEND : 1782 `do_li¡’ ( £nd_mode ); 1785  RECONNECT : 1786 `»cÚÃù_mode ( ¬gv [ Ýtšd ]); 1789  MULTY : 1790 `muÉi_cÚÃù_mode ( ¬gc - Ýtšd , ¬gv + optind); 1793  CONNECT : 1794 `cÚÃù_mode ( ¬gv [ Ýtšd ]); 1797  SENDDUMP : 1798 sk = `do_cÚÃù ( ¬gv [ Ýtšd ]); 1799 ià( sk < 0) 1800 `ex™ (1); 1801 `£nddump_mode ( sk ); 1804  LSENDDUMP : 1805 `do_li¡’ ( £nddump_mode ); 1808  LSENDRECV : 1809 `do_li¡’ ( £nd_ªd_»cv_mode ); 1812  CSENDRECV : 1813 sk = `do_cÚÃù ( ¬gv [ Ýtšd ]); 1814 ià( sk < 0) 1815 `ex™ (1); 1817 `£nd_ªd_»cv_mode ( sk ); 1820  INFOREQ : 1821 `šfo_»que¡ ( ¬gv [ Ýtšd ]); 1822 `ex™ (0); 1824 #ifdeà __TIZEN_PATCH__ 1825  CONFIGREQ : 1826 `cÚfig_»que¡ ( ¬gv [ Ýtšd ]); 1827 `ex™ (0); 1830  PAIRING : 1831 `do_·œšg ( ¬gv [ Ýtšd ]); 1832 `ex™ (0); 1835 `sy¦og ( LOG_INFO , "Exit"); 1837 `þo£log (); 1840 } } @tools/mcaptest.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡dlib.h > 30  ~ 31  ~ 33  ~ 34  ~ 35  ~ 37  ~ 39  ~"btio/btio.h " 40  ~"lib/l2ÿp.h " 41  ~"´ofžes/h—Éh/mÿp.h " 44 mMODE_NONE , 45 mMODE_CONNECT , 46 mMODE_LISTEN , 49  GMašLoÝ * gmloÝ ; 51  gcýsm = 0x1003, gdýsm = 0x1005; 53  mÿp_š¡ªû * gmÿp = NULL ; 54  mÿp_mdl * gmdl = NULL ; 55  ušt16_t gmdlid ; 57  gcÚŒÞ_mode = MODE_LISTEN ; 58  gd©a_mode = MODE_LISTEN ; 60  gmdl_cÚn_»q_»suÉ = MCAP_SUCCESS ; 62  gboÞ—n g£nd_syncÿp_»q = FALSE ; 63  gboÞ—n gmþ_discÚÃù = FALSE ; 64  gboÞ—n gmdl_discÚÃù = FALSE ; 65  gmþ_discÚÃù_timeout = -1; 66  gmdl_discÚÃù_timeout = -1; 68  mÿp_mþ * gmþ = NULL ; 70  gboÞ—n gno_þo£ = FALSE ; 72  #REQ_CLOCK_ACC 0x1400 ) 74  $mdl_cÚÃùed_cb ( mÿp_mdl * mdl , * d©a ) 76  fd = -1; 78 `´štf ("%s\n", __func__ ); 80 ià( mdl_discÚÃù && mdl_discÚÃù_timeout >= 0) { 81 `¦“p ( mdl_discÚÃù_timeout ); 83 fd = `mÿp_mdl_g‘_fd ( mdl ); 85 ià( fd > 0) 86 `þo£ ( fd ); 88 } } 90  $mdl_þo£d_cb ( mÿp_mdl * mdl , * d©a ) 92 `´štf ("%s\n", __func__ ); 94 ià( mþ_discÚÃù && mþ_discÚÃù_timeout >= 0) { 95 `¦“p ( mþ_discÚÃù_timeout ); 97 `mÿp_þo£_mþ ( mþ , TRUE ); 99 } } 101  $mdl_d–‘ed_cb ( mÿp_mdl * mdl , * d©a ) 104 `´štf ("%s\n", __func__ ); 105 } } 107  $mdl_abÜ‹d_cb ( mÿp_mdl * mdl , * d©a ) 110 `´štf ("%s\n", __func__ ); 111 } } 113  ušt8_t $mdl_cÚn_»q_cb ( mÿp_mþ * mþ , ušt8_t md•id , 114 ušt16_t mdlid , ušt8_t * cÚf , * d©a ) 116  »t ; 118 `´štf ("%s\n", __func__ ); 120 »t = mdl_cÚn_»q_»suÉ ; 122 mdl_cÚn_»q_»suÉ = MCAP_SUCCESS ; 124  »t ; 125 } } 127  ušt8_t $mdl_»cÚn_»q_cb ( mÿp_mdl * mdl , * d©a ) 129 `´štf ("%s\n", __func__ ); 131  MCAP_SUCCESS ; 132 } } 134  ü—‹_mdl_cb ( mÿp_mdl *mÿp_mdl, ušt8_t ty³ , GE¼Ü * g”r , 135 gpoš‹r d©a ); 137  $mþ_»cÚÃùed ( mÿp_mþ * mþ , gpoš‹r d©a ) 139 GE¼Ü * g”r = NULL ; 141 `´štf ("%s\n", __func__ ); 143 ià( d©a_mode =ð MODE_CONNECT ) { 144 `mÿp_ü—‹_mdl ( mþ , 1, 0, ü—‹_mdl_cb , NULL , NULL, & g”r ); 145 ià( g”r ) { 146 `´štf ("Could‚Ù cÚÃù MDL: %s\n", g”r -> mes§ge ); 147 `g_”rÜ_ä“ ( g”r ); 150 } } 152  $mþ_discÚÃùed ( mÿp_mþ * mþ , gpoš‹r d©a ) 155 `´štf ("MCL disconnected\n"); 157 ià( no_þo£ ) 160 `g_maš_loÝ_qu™ ( mloÝ ); 161 } } 163  $mþ_unÿched ( mÿp_mþ * mþ , gpoš‹r d©a ) 166 `´štf ("MCL uncached unsupported\n"); 167 } } 169  $cÚÃù_mdl_cb ( mÿp_mdl * mdl , GE¼Ü * g”r , gpoš‹r d©a ) 171 mdlid = `mÿp_mdl_g‘_mdlid ( mdl ); 173 `´štf ("MDL %d cÚÃùed\n", mdlid ); 174 } } 176  $ü—‹_mdl_cb ( mÿp_mdl *mÿp_mdl, ušt8_t ty³ , GE¼Ü * g”r , 177 gpoš‹r d©a ) 179 GE¼Ü * ”r = NULL ; 181 ià( g”r ) { 182 `´štf ("MDLƒ¼Ü: %s\n", g”r -> mes§ge ); 184 ià(! no_þo£ ) 185 `g_maš_loÝ_qu™ ( mloÝ ); 190 ià( mdl ) 191 `mÿp_mdl_uÄef ( mdl ); 193 mdl = `mÿp_mdl_»f ( mÿp_mdl ); 195 ià(! `mÿp_cÚÃù_mdl ( mdl , L2CAP_MODE_ERTM , dýsm , cÚÃù_mdl_cb , NULL , 196 NULL , & ”r )) { 197 `´štf ("E¼Ü cÚÃùšgØmdl: %s\n", ”r -> mes§ge ); 198 `g_”rÜ_ä“ ( ”r ); 200 ià( no_þo£ ) 203 `g_maš_loÝ_qu™ ( mloÝ ); 205 } } 207  $sync_ÿp_cb ( mÿp_mþ * mþ , ušt8_t mÿp_”r , 208 ušt8_t btþock»s , ušt16_t synþ—d , 209 ušt16_t tm¡am´es , ušt16_ˆ tm¡am·cc , GE¼Ü * ”r , 210 gpoš‹r d©a ) 213 `´štf ("%s\n", __func__ ); 214 } } 216  $Œigg”_mdl_aùiÚ ( mode ) 218 GE¼Ü * g”r = NULL ; 219 gboÞ—n »t ; 221 »t = `mÿp_mþ_£t_cb ( mþ , NULL , & g”r , 222 MCAP_MDL_CB_CONNECTED , mdl_cÚÃùed_cb , 223 MCAP_MDL_CB_CLOSED , mdl_þo£d_cb , 224 MCAP_MDL_CB_DELETED , mdl_d–‘ed_cb , 225 MCAP_MDL_CB_ABORTED , mdl_abÜ‹d_cb , 226 MCAP_MDL_CB_REMOTE_CONN_REQ , mdl_cÚn_»q_cb , 227 MCAP_MDL_CB_REMOTE_RECONN_REQ , mdl_»cÚn_»q_cb , 228 MCAP_MDL_CB_INVALID ); 230 ià(! »t && g”r ) { 231 `´štf ("MCL cannot handle connection %s\n", 232 g”r -> mes§ge ); 233 `g_”rÜ_ä“ ( g”r ); 236 ià( mode =ð MODE_CONNECT ) { 237 `mÿp_ü—‹_mdl ( mþ , 1, 0, ü—‹_mdl_cb , NULL , NULL, & g”r ); 238 ià( g”r ) { 239 `´štf ("Could‚Ù cÚÃù MDL: %s\n", g”r -> mes§ge ); 240 `g_”rÜ_ä“ ( g”r ); 244 ià( £nd_syncÿp_»q && mÿp -> c¥_’abËd ) { 245 `mÿp_sync_š™ ( mþ ); 247 `mÿp_sync_ÿp_»q ( mþ , REQ_CLOCK_ACC , sync_ÿp_cb , NULL , & g”r ); 248 ià( g”r ) { 249 `´štf ("MCAP Synø»qƒ¼Ü: %s\n", g”r -> mes§ge ); 250 `g_”rÜ_ä“ ( g”r ); 253 } } 255  $mþ_cÚÃùed ( mÿp_mþ *mÿp_mþ, gpoš‹r d©a ) 257 `´štf ("%s\n", __func__ ); 259 ià( mþ ) { 260 `mÿp_sync_¡Ý ( mþ ); 261 `mÿp_mþ_uÄef ( mþ ); 264 mþ = `mÿp_mþ_»f ( mÿp_mþ ); 265 `Œigg”_mdl_aùiÚ ( d©a_mode ); 266 } } 268  $ü—‹_mþ_cb ( mÿp_mþ *mÿp_mþ, GE¼Ü * ”r , gpoš‹r d©a ) 270 `´štf ("%s\n", __func__ ); 272 ià( ”r ) { 273 `´štf ("Could‚Ù cÚÃù MCL: %s\n", ”r -> mes§ge ); 275 ià(! no_þo£ ) 276 `g_maš_loÝ_qu™ ( mloÝ ); 281 ià( mþ ) { 282 `mÿp_sync_¡Ý ( mþ ); 283 `mÿp_mþ_uÄef ( mþ ); 286 mþ = `mÿp_mþ_»f ( mÿp_mþ ); 287 `Œigg”_mdl_aùiÚ ( d©a_mode ); 288 } } 289  $u§ge () 291 `´štf ("mÿ±e¡ - MCAPe¡šg v” %s\n", VERSION ); 292 `´štf ("Usage:\n" 294 `´štf ("Control Link Mode:\n" 298 `´štf ("Data Link Mode:\n" 302 `´štf ("Options:\n" 307 } } 309  ÝtiÚ gmaš_ÝtiÚs [] = { 323  $maš ( ¬gc , * ¬gv []) 325 GE¼Ü * ”r = NULL ; 326 bdaddr_t ¤c , d¡ ; 327  Ýt ; 328  bda¡r [18]; 330 `hci_devba (0, & ¤c ); 331 `baýy (& d¡ , BDADDR_ANY ); 333 mloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 334 ià(! mloÝ ) { 335 `´štf ("Cannot create main†oop\n"); 337 `ex™ (1); 340 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+i:c:C:D:e:f:dghun", 341 maš_ÝtiÚs , NULL )è!ð EOF ) { 342  Ýt ) { 344 ià(! `¡ºcmp ( Ýrg , "hci", 3)) 345 `hci_devba ( `©oi ( Ýrg + 3), & ¤c ); 347 `¡r2ba ( Ýrg , & ¤c ); 352 cÚŒÞ_mode = MODE_CONNECT ; 353 `¡r2ba ( Ýrg , & d¡ ); 358 d©a_mode = MODE_CONNECT ; 363 mþ_discÚÃù = TRUE ; 364 mþ_discÚÃù_timeout = `©oi ( Ýrg ); 369 mdl_discÚÃù = TRUE ; 370 mdl_discÚÃù_timeout = `©oi ( Ýrg ); 375 £nd_syncÿp_»q = TRUE ; 380 mdl_cÚn_»q_»suÉ = MCAP_RESOURCE_UNAVAILABLE ; 385 no_þo£ = TRUE ; 390 cýsm = `©oi ( Ýrg ); 395 dýsm = `©oi ( Ýrg ); 401 `u§ge (); 402 `ex™ (0); 406 mÿp = `mÿp_ü—‹_š¡ªû (& ¤c , BT_IO_SEC_MEDIUM , cýsm , dýsm , 407 mþ_cÚÃùed , mþ_»cÚÃùed , 408 mþ_discÚÃùed , mþ_unÿched , 409 NULL , 410 NULL , & ”r ); 412 ià(! mÿp ) { 413 `´štf ("MCAP in¡ªû c»©iÚ fažed %s\n", ”r -> mes§ge ); 414 `g_”rÜ_ä“ ( ”r ); 416 `ex™ (1); 419 `mÿp_’abË_c¥ ( mÿp ); 421  cÚŒÞ_mode ) { 422  MODE_CONNECT : 423 `ba2¡r (& d¡ , bda¡r ); 424 `´štf ("CÚÃùšgØ%s\n", bda¡r ); 426 `mÿp_ü—‹_mþ ( mÿp , & d¡ , cýsm , ü—‹_mþ_cb , NULL , NULL, 427 & ”r ); 429 ià( ”r ) { 430 `´štf ("MCAP c»©”rÜ %s\n", ”r -> mes§ge ); 431 `g_”rÜ_ä“ ( ”r ); 433 `ex™ (1); 437  MODE_LISTEN : 438 `´štf ("Listening for control channel connection\n"); 441  MODE_NONE : 443  dÚe ; 446 `g_maš_loÝ_run ( mloÝ ); 448 dÚe : 449 `´štf ("Done\n"); 451 ià( mÿp ) 452 `mÿp_š¡ªû_uÄef ( mÿp ); 454 `g_maš_loÝ_uÄef ( mloÝ ); 457 } } @tools/mgmt-tester.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~<¡dboÞ.h > 30  ~ 32  ~ 34  ~"lib/blu‘oÙh.h " 35  ~"lib/hci.h " 36  ~"lib/hci_lib.h " 37  ~"lib/mgmt.h " 39  ~"mÚ™Ü/bt.h " 40  ~"emuÏtÜ/btho¡.h " 41  ~"emuÏtÜ/hc›mu.h " 43  ~"¤c/sh¬ed/utž.h " 44  ~"¤c/sh¬ed/‹¡”.h " 45  ~"¤c/sh¬ed/mgmt.h " 47  s‹¡_d©a { 48 ‹¡”_d©a_func_t m‹¡_£tup ; 49 cÚ¡ * m‹¡_d©a ; 50 ušt8_t mex³ùed_v”siÚ ; 51 ušt16_t mex³ùed_mªuçùu»r ; 52 ušt32_t mex³ùed_suµÜ‹d_£‰šgs ; 53 ušt32_t mš™Ÿl_£‰šgs ; 54  mgmt * mmgmt ; 55  mgmt * mmgmt_®t ; 56  mmgmt_£‰šgs_id ; 57  mmgmt_®t_£‰šgs_id ; 58  mmgmt_®t_ev_id ; 59 ušt8_t mmgmt_v”siÚ ; 60 ušt16_t mmgmt_»visiÚ ; 61 ušt16_t mmgmt_šdex ; 62  hc›mu * mhc›mu ; 63 hc›mu_ty³ mhc›mu_ty³ ; 64  munm‘_cÚd™iÚs ; 67  $mgmt_debug (cÚ¡ * ¡r , * u£r_d©a ) 69 cÚ¡ * ´efix = u£r_d©a ; 71 `‹¡”_´št ("%s%s", ´efix , ¡r ); 72 } } 74  $»ad_v”siÚ_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 75 cÚ¡ * ·¿m , * u£r_d©a ) 77  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 78 cÚ¡  mgmt_½_»ad_v”siÚ * ½ = ·¿m ; 80 `‹¡”_´št ("Read Version callback"); 81 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 83 ià( ¡©us || ! ·¿m ) { 84 `‹¡”_´e_£tup_çžed (); 88 d©a -> mgmt_v”siÚ = ½ -> v”siÚ ; 89 d©a -> mgmt_»visiÚ = `btohs ( ½ -> »visiÚ ); 91 `‹¡”_´št (" Version %u.%u", 92 d©a -> mgmt_v”siÚ , d©a-> mgmt_»visiÚ ); 93 } } 95  $»ad_commªds_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 96 cÚ¡ * ·¿m , * u£r_d©a ) 98 `‹¡”_´št ("Read Commands callback"); 99 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 101 ià( ¡©us || ! ·¿m ) { 102 `‹¡”_´e_£tup_çžed (); 105 } } 107  $»ad_šfo_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 108 cÚ¡ * ·¿m , * u£r_d©a ) 110  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 111 cÚ¡  mgmt_½_»ad_šfo * ½ = ·¿m ; 112  addr [18]; 113 ušt16_t mªuçùu»r ; 114 ušt32_t suµÜ‹d_£‰šgs , cu¼’t_£‰šgs ; 115  btho¡ *bthost; 117 `‹¡”_´št ("Read Info callback"); 118 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 120 ià( ¡©us || ! ·¿m ) { 121 `‹¡”_´e_£tup_çžed (); 125 `ba2¡r (& ½ -> bdaddr , addr ); 126 mªuçùu»r = `btohs ( ½ ->manufacturer); 127 suµÜ‹d_£‰šgs = `btohl ( ½ ->supported_settings); 128 cu¼’t_£‰šgs = `btohl ( ½ ->current_settings); 130 `‹¡”_´št (" Add»ss: %s", addr ); 131 `‹¡”_´št (" V”siÚ: 0x%02x", ½ -> v”siÚ ); 132 `‹¡”_´št (" Mªuçùu»r: 0x%04x", mªuçùu»r ); 133 `‹¡”_´št (" SuµÜ‹d s‘tšgs: 0x%08x", suµÜ‹d_£‰šgs ); 134 `‹¡”_´št (" Cu¼’ˆ£‰šgs: 0x%08x", cu¼’t_£‰šgs ); 135 `‹¡”_´št (" Class: 0x%02x%02x%02x", 136 ½ -> dev_þass [2],„p->dev_class[1],„p->dev_class[0]); 137 `‹¡”_´št (" Name: %s", ½ -> Çme ); 138 `‹¡”_´št (" Sh܈Çme: %s", ½ -> shÜt_Çme ); 140 ià( `¡rcmp ( `hc›mu_g‘_add»ss ( d©a -> hc›mu ), addr )) { 141 `‹¡”_´e_£tup_çžed (); 145 ià( ½ -> v”siÚ !ð d©a -> ex³ùed_v”siÚ ) { 146 `‹¡”_´e_£tup_çžed (); 150 ià( mªuçùu»r !ð d©a -> ex³ùed_mªuçùu»r ) { 151 `‹¡”_´e_£tup_çžed (); 155 ià( suµÜ‹d_£‰šgs !ð d©a -> ex³ùed_suµÜ‹d_£‰šgs ) { 156 `‹¡”_´e_£tup_çžed (); 160 ià( cu¼’t_£‰šgs !ð d©a -> š™Ÿl_£‰šgs ) { 161 `‹¡”_´e_£tup_çžed (); 165 ià( ½ -> dev_þass [0] != 0x00 ||„p->dev_class[1] != 0x00 || 166 ½ -> dev_þass [2] != 0x00) { 167 `‹¡”_´e_£tup_çžed (); 171 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 172 `btho¡_nÙify_»ady ( btho¡ , ‹¡”_´e_£tup_com¶‘e ); 173 } } 175  $šdex_added_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 176 cÚ¡ * ·¿m , * u£r_d©a ) 178  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 180 `‹¡”_´št ("Index Added callback"); 181 `‹¡”_´št (" Index: 0x%04x", šdex ); 183 d©a -> mgmt_šdex = šdex ; 185 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_INFO , d©a-> mgmt_šdex , 0, NULL , 186 »ad_šfo_ÿÎback , NULL , NULL); 187 } } 189  $šdex_»moved_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 190 cÚ¡ * ·¿m , * u£r_d©a ) 192  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 194 `‹¡”_´št ("Index Removed callback"); 195 `‹¡”_´št (" Index: 0x%04x", šdex ); 197 ià( šdex !ð d©a -> mgmt_šdex ) 200 `mgmt_uÄegi¡”_šdex ( d©a -> mgmt , d©a-> mgmt_šdex ); 201 `mgmt_uÄegi¡”_šdex ( d©a -> mgmt_®t , d©a-> mgmt_šdex ); 203 `mgmt_uÄef ( d©a -> mgmt ); 204 d©a -> mgmt = NULL ; 206 `mgmt_uÄef ( d©a -> mgmt_®t ); 207 d©a -> mgmt_®t = NULL ; 209 `‹¡”_po¡_‹¬down_com¶‘e (); 210 } } 212  $»ad_šdex_li¡_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 213 cÚ¡ * ·¿m , * u£r_d©a ) 215  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 217 `‹¡”_´št ("Read Index List callback"); 218 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 220 ià( ¡©us || ! ·¿m ) { 221 `‹¡”_´e_£tup_çžed (); 225 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_INDEX_ADDED , MGMT_INDEX_NONE , 226 šdex_added_ÿÎback , NULL , NULL); 228 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_INDEX_REMOVED , MGMT_INDEX_NONE , 229 šdex_»moved_ÿÎback , NULL , NULL); 231 d©a -> hc›mu = `hc›mu_Ãw (d©a-> hc›mu_ty³ ); 232 ià(! d©a -> hc›mu ) { 233 `‹¡”_w¬n ("Failedo setup HCIƒmulation"); 234 `‹¡”_´e_£tup_çžed (); 236 } } 238  $‹¡_´e_£tup (cÚ¡ * ‹¡_d©a ) 240  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 242 d©a -> mgmt = `mgmt_Ãw_deçuÉ (); 243 ià(! d©a -> mgmt ) { 244 `‹¡”_w¬n ("Failedo setup management interface"); 245 `‹¡”_´e_£tup_çžed (); 249 d©a -> mgmt_®t = `mgmt_Ãw_deçuÉ (); 250 ià(! d©a -> mgmt_®t ) { 251 `‹¡”_w¬n ("Failedo setup‡lternate management interface"); 252 `‹¡”_´e_£tup_çžed (); 254 `mgmt_uÄef ( d©a -> mgmt ); 255 d©a -> mgmt = NULL ; 259 ià( `‹¡”_u£_debug ()) { 260 `mgmt_£t_debug ( d©a -> mgmt , mgmt_debug , "mgmt: ", NULL ); 261 `mgmt_£t_debug ( d©a -> mgmt_®t , mgmt_debug , "mgmt-®t: ", NULL ); 264 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_VERSION , MGMT_INDEX_NONE , 0, NULL , 265 »ad_v”siÚ_ÿÎback , NULL , NULL); 267 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_COMMANDS , MGMT_INDEX_NONE , 0, NULL , 268 »ad_commªds_ÿÎback , NULL , NULL); 270 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_INDEX_LIST , MGMT_INDEX_NONE , 0, NULL , 271 »ad_šdex_li¡_ÿÎback , NULL , NULL); 272 } } 274  $‹¡_po¡_‹¬down (cÚ¡ * ‹¡_d©a ) 276  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 278 `hc›mu_uÄef ( d©a -> hc›mu ); 279 d©a -> hc›mu = NULL ; 280 } } 282  $‹¡_add_cÚd™iÚ ( ‹¡_d©a * d©a ) 284 d©a -> unm‘_cÚd™iÚs ++; 286 `‹¡”_´št ("Te¡ cÚd™iÚ‡dded,Ù® %d", d©a -> unm‘_cÚd™iÚs ); 287 } } 289  $‹¡_cÚd™iÚ_com¶‘e ( ‹¡_d©a * d©a ) 291 d©a -> unm‘_cÚd™iÚs --; 293 `‹¡”_´št ("Test condition complete, %d†eft", 294 d©a -> unm‘_cÚd™iÚs ); 296 ià( d©a -> unm‘_cÚd™iÚs > 0) 299 `‹¡”_‹¡_·s£d (); 300 } } 302  #‹¡_b»d¾e ( Çme , d©a , £tup , func ) \ 304  ‹¡_d©a * u£r ; \ 305 u£r = `m®loc (( ‹¡_d©a )); \ 306 ià(! u£r ) \ 308 u£r -> hc›mu_ty³ = HCIEMU_TYPE_BREDRLE ; \ 309 u£r -> ‹¡_£tup = £tup ; \ 310 u£r -> ‹¡_d©a = d©a ; \ 311 u£r -> ex³ùed_v”siÚ = 0x08; \ 312 u£r -> ex³ùed_mªuçùu»r = 0x003f; \ 313 u£r -> ex³ùed_suµÜ‹d_£‰šgs = 0x00003fff; \ 314 u£r -> š™Ÿl_£‰šgs = 0x00000080; \ 315 u£r -> unm‘_cÚd™iÚs = 0; \ 316 `‹¡”_add_fuÎ ( Çme , d©a , \ 317 ‹¡_´e_£tup , ‹¡_£tup , func , NULL , \ 318 ‹¡_po¡_‹¬down , 2, u£r , ä“ ); \ 319 } 0) ) 321  #‹¡_b»dr ( Çme , d©a , £tup , func ) \ 323  ‹¡_d©a * u£r ; \ 324 u£r = `m®loc (( ‹¡_d©a )); \ 325 ià(! u£r ) \ 327 u£r -> hc›mu_ty³ = HCIEMU_TYPE_BREDR ; \ 328 u£r -> ‹¡_£tup = £tup ; \ 329 u£r -> ‹¡_d©a = d©a ; \ 330 u£r -> ex³ùed_v”siÚ = 0x05; \ 331 u£r -> ex³ùed_mªuçùu»r = 0x003f; \ 332 u£r -> ex³ùed_suµÜ‹d_£‰šgs = 0x000011ff; \ 333 u£r -> š™Ÿl_£‰šgs = 0x00000080; \ 334 u£r -> unm‘_cÚd™iÚs = 0; \ 335 `‹¡”_add_fuÎ ( Çme , d©a , \ 336 ‹¡_´e_£tup , ‹¡_£tup , func , NULL , \ 337 ‹¡_po¡_‹¬down , 2, u£r , ä“ ); \ 338 } 0) ) 340  #‹¡_Ë ( Çme , d©a , £tup , func ) \ 342  ‹¡_d©a * u£r ; \ 343 u£r = `m®loc (( ‹¡_d©a )); \ 344 ià(! u£r ) \ 346 u£r -> hc›mu_ty³ = HCIEMU_TYPE_LE ; \ 347 u£r -> ‹¡_£tup = £tup ; \ 348 u£r -> ‹¡_d©a = d©a ; \ 349 u£r -> ex³ùed_v”siÚ = 0x08; \ 350 u£r -> ex³ùed_mªuçùu»r = 0x003f; \ 351 u£r -> ex³ùed_suµÜ‹d_£‰šgs = 0x00003e1b; \ 352 u£r -> š™Ÿl_£‰šgs = 0x00000200; \ 353 u£r -> unm‘_cÚd™iÚs = 0; \ 354 `‹¡”_add_fuÎ ( Çme , d©a , \ 355 ‹¡_´e_£tup , ‹¡_£tup , func , NULL , \ 356 ‹¡_po¡_‹¬down , 2, u£r , ä“ ); \ 357 } 0) ) 359  $cÚŒÞËr_£tup (cÚ¡ * ‹¡_d©a ) 361 `‹¡”_‹¡_·s£d (); 362 } } 364  sg’”ic_d©a { 365 cÚ¡ ušt16_t * m£tup_£‰šgs ; 366 boÞ m£tup_nob»dr ; 367 boÞ m£tup_lim™ed_discov ; 368 ušt16_t m£tup_ex³ù_hci_commªd ; 369 cÚ¡ * m£tup_ex³ù_hci_·¿m ; 370 ušt8_t m£tup_ex³ù_hci_Ën ; 371 ušt16_t m£tup_£nd_Ýcode ; 372 cÚ¡ * m£tup_£nd_·¿m ; 373 ušt16_t m£tup_£nd_Ën ; 374 boÞ m£nd_šdex_nÚe ; 375 ušt16_t m£nd_Ýcode ; 376 cÚ¡ * m£nd_·¿m ; 377 ušt16_t m£nd_Ën ; 378 cÚ¡ * (* m£nd_func )( ušt16_t * mËn ); 379 ušt8_t mex³ù_¡©us ; 380 cÚ¡ * mex³ù_·¿m ; 381 ušt16_t mex³ù_Ën ; 382 cÚ¡ * (* mex³ù_func )( ušt16_t * mËn ); 383 ušt32_t mex³ù_£‰šgs_£t ; 384 ušt32_t mex³ù_£‰šgs_un£t ; 385 ušt16_t mex³ù_®t_ev ; 386 cÚ¡ * mex³ù_®t_ev_·¿m ; 387 boÞ (* v”ify_®t_ev_func )(cÚ¡ * m·¿m , ušt16_t mËngth ); 388 ušt16_t mex³ù_®t_ev_Ën ; 389 ušt16_t mex³ù_hci_commªd ; 390 cÚ¡ * mex³ù_hci_·¿m ; 391 ušt8_t mex³ù_hci_Ën ; 392 cÚ¡ * (* mex³ù_hci_func )( ušt8_t * mËn ); 393 boÞ mex³ù_pš ; 394 ušt8_t mpš_Ën ; 395 cÚ¡ * mpš ; 396 ušt8_t mþ›Á_pš_Ën ; 397 cÚ¡ * mþ›Á_pš ; 398 boÞ mþ›Á_’abË_s¥ ; 399 ušt8_t mio_ÿp ; 400 ušt8_t mþ›Á_io_ÿp ; 401 ušt8_t mþ›Á_auth_»q ; 402 boÞ m»jeù_cÚfœm ; 403 boÞ mþ›Á_»jeù_cÚfœm ; 404 boÞ mju¡_wÜks ; 405 boÞ mþ›Á_’abË_Ë ; 406 boÞ mþ›Á_’abË_sc ; 407 boÞ mex³ù_sc_key ; 408 boÞ mfÜû_pow”_off ; 411 cÚ¡  gdummy_d©a [] = { 0x00 }; 413 cÚ¡  g’”ic_d©a gšv®id_commªd_‹¡ = { 414 . £nd_Ýcode = 0xffff, 415 . gex³ù_¡©us = MGMT_STATUS_UNKNOWN_COMMAND , 418 cÚ¡  g’”ic_d©a g»ad_v”siÚ_sucûss_‹¡ = { 419 . £nd_šdex_nÚe = Œue , 420 . g£nd_Ýcode = MGMT_OP_READ_VERSION , 421 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 422 . gex³ù_Ën = 3, 425 cÚ¡  g’”ic_d©a g»ad_v”siÚ_šv®id_·¿m_‹¡ = { 426 . £nd_šdex_nÚe = Œue , 427 . g£nd_Ýcode = MGMT_OP_READ_VERSION , 428 . g£nd_·¿m = dummy_d©a , 429 . g£nd_Ën = ( dummy_d©a ), 430 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 433 cÚ¡  g’”ic_d©a g»ad_v”siÚ_šv®id_šdex_‹¡ = { 434 . £nd_Ýcode = MGMT_OP_READ_VERSION , 435 . gex³ù_¡©us = MGMT_STATUS_INVALID_INDEX , 438 cÚ¡  g’”ic_d©a g»ad_commªds_šv®id_·¿m_‹¡ = { 439 . £nd_šdex_nÚe = Œue , 440 . g£nd_Ýcode = MGMT_OP_READ_COMMANDS , 441 . g£nd_·¿m = dummy_d©a , 442 . g£nd_Ën = ( dummy_d©a ), 443 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 446 cÚ¡  g’”ic_d©a g»ad_commªds_šv®id_šdex_‹¡ = { 447 . £nd_Ýcode = MGMT_OP_READ_COMMANDS , 448 . gex³ù_¡©us = MGMT_STATUS_INVALID_INDEX , 451 cÚ¡  g’”ic_d©a g»ad_šdex_li¡_šv®id_·¿m_‹¡ = { 452 . £nd_šdex_nÚe = Œue , 453 . g£nd_Ýcode = MGMT_OP_READ_INDEX_LIST , 454 . g£nd_·¿m = dummy_d©a , 455 . g£nd_Ën = ( dummy_d©a ), 456 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 459 cÚ¡  g’”ic_d©a g»ad_šdex_li¡_šv®id_šdex_‹¡ = { 460 . £nd_Ýcode = MGMT_OP_READ_INDEX_LIST , 461 . gex³ù_¡©us = MGMT_STATUS_INVALID_INDEX , 464 cÚ¡  g’”ic_d©a g»ad_šfo_šv®id_·¿m_‹¡ = { 465 . £nd_Ýcode = MGMT_OP_READ_INFO , 466 . g£nd_·¿m = dummy_d©a , 467 . g£nd_Ën = ( dummy_d©a ), 468 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 471 cÚ¡  g’”ic_d©a g»ad_šfo_šv®id_šdex_‹¡ = { 472 . £nd_šdex_nÚe = Œue , 473 . g£nd_Ýcode = MGMT_OP_READ_INFO , 474 . gex³ù_¡©us = MGMT_STATUS_INVALID_INDEX , 477 cÚ¡  g£t_pow”ed_Ú_·¿m [] = { 0x01 }; 478 cÚ¡  g£t_pow”ed_šv®id_·¿m [] = { 0x02 }; 479 cÚ¡  g£t_pow”ed_g¬bage_·¿m [] = { 0x01, 0x00 }; 480 cÚ¡  g£t_pow”ed_£‰šgs_·¿m [] = { 0x81, 0x00, 0x00, 0x00 }; 482 cÚ¡  g’”ic_d©a g£t_pow”ed_Ú_sucûss_‹¡ = { 483 . £nd_Ýcode = MGMT_OP_SET_POWERED , 484 . g£nd_·¿m = £t_pow”ed_Ú_·¿m , 485 . g£nd_Ën = ( £t_pow”ed_Ú_·¿m ), 486 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 487 . gex³ù_·¿m = £t_pow”ed_£‰šgs_·¿m , 488 . gex³ù_Ën = ( £t_pow”ed_£‰šgs_·¿m ), 489 . gex³ù_£‰šgs_£t = MGMT_SETTING_POWERED , 492 cÚ¡  g’”ic_d©a g£t_pow”ed_Ú_šv®id_·¿m_‹¡_1 = { 493 . £nd_Ýcode = MGMT_OP_SET_POWERED , 494 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 497 cÚ¡  g’”ic_d©a g£t_pow”ed_Ú_šv®id_·¿m_‹¡_2 = { 498 . £nd_Ýcode = MGMT_OP_SET_POWERED , 499 . g£nd_·¿m = £t_pow”ed_šv®id_·¿m , 500 . g£nd_Ën = ( £t_pow”ed_šv®id_·¿m ), 501 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 504 cÚ¡  g’”ic_d©a g£t_pow”ed_Ú_šv®id_·¿m_‹¡_3 = { 505 . £nd_Ýcode = MGMT_OP_SET_POWERED , 506 . g£nd_·¿m = £t_pow”ed_g¬bage_·¿m , 507 . g£nd_Ën = ( £t_pow”ed_g¬bage_·¿m ), 508 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 511 cÚ¡  g’”ic_d©a g£t_pow”ed_Ú_šv®id_šdex_‹¡ = { 512 . £nd_šdex_nÚe = Œue , 513 . g£nd_Ýcode = MGMT_OP_SET_POWERED , 514 . g£nd_·¿m = £t_pow”ed_Ú_·¿m , 515 . g£nd_Ën = ( £t_pow”ed_Ú_·¿m ), 516 . gex³ù_¡©us = MGMT_STATUS_INVALID_INDEX , 519 cÚ¡ ušt16_t g£‰šgs_pow”ed [] = { MGMT_OP_SET_POWERED , 0 }; 521 cÚ¡  g£t_pow”ed_off_·¿m [] = { 0x00 }; 522 cÚ¡  g£t_pow”ed_off_£‰šgs_·¿m [] = { 0x80, 0x00, 0x00, 0x00 }; 523 cÚ¡  g£t_pow”ed_off_þass_of_dev [] = { 0x00, 0x00, 0x00 }; 525 cÚ¡  g’”ic_d©a g£t_pow”ed_off_sucûss_‹¡ = { 526 . £tup_£‰šgs = £‰šgs_pow”ed , 527 . g£nd_Ýcode = MGMT_OP_SET_POWERED , 528 . g£nd_·¿m = £t_pow”ed_off_·¿m , 529 . g£nd_Ën = ( £t_pow”ed_off_·¿m ), 530 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 531 . gex³ù_·¿m = £t_pow”ed_off_£‰šgs_·¿m , 532 . gex³ù_Ën = ( £t_pow”ed_off_£‰šgs_·¿m ), 533 . gex³ù_£‰šgs_un£t = MGMT_SETTING_POWERED , 536 cÚ¡  g’”ic_d©a g£t_pow”ed_off_þass_‹¡ = { 537 . £nd_Ýcode = MGMT_OP_SET_POWERED , 538 . g£nd_·¿m = £t_pow”ed_off_·¿m , 539 . g£nd_Ën = ( £t_pow”ed_off_·¿m ), 540 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 541 . gex³ù_·¿m = £t_pow”ed_off_£‰šgs_·¿m , 542 . gex³ù_Ën = ( £t_pow”ed_off_£‰šgs_·¿m ), 543 . gex³ù_£‰šgs_un£t = MGMT_SETTING_POWERED , 544 . gex³ù_®t_ev = MGMT_EV_CLASS_OF_DEV_CHANGED , 545 . gex³ù_®t_ev_·¿m = £t_pow”ed_off_þass_of_dev , 546 . gex³ù_®t_ev_Ën = ( £t_pow”ed_off_þass_of_dev ), 549 cÚ¡  g’”ic_d©a g£t_pow”ed_off_šv®id_·¿m_‹¡_1 = { 550 . £tup_£‰šgs = £‰šgs_pow”ed , 551 . g£nd_Ýcode = MGMT_OP_SET_POWERED , 552 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 555 cÚ¡  g’”ic_d©a g£t_pow”ed_off_šv®id_·¿m_‹¡_2 = { 556 . £tup_£‰šgs = £‰šgs_pow”ed , 557 . g£nd_Ýcode = MGMT_OP_SET_POWERED , 558 . g£nd_·¿m = £t_pow”ed_šv®id_·¿m , 559 . g£nd_Ën = ( £t_pow”ed_šv®id_·¿m ), 560 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 563 cÚ¡  g’”ic_d©a g£t_pow”ed_off_šv®id_·¿m_‹¡_3 = { 564 . £tup_£‰šgs = £‰šgs_pow”ed , 565 . g£nd_Ýcode = MGMT_OP_SET_POWERED , 566 . g£nd_·¿m = £t_pow”ed_g¬bage_·¿m , 567 . g£nd_Ën = ( £t_pow”ed_g¬bage_·¿m ), 568 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 571 cÚ¡  g£t_cÚÃùabË_Ú_·¿m [] = { 0x01 }; 572 cÚ¡  g£t_cÚÃùabË_šv®id_·¿m [] = { 0x02 }; 573 cÚ¡  g£t_cÚÃùabË_g¬bage_·¿m [] = { 0x01, 0x00 }; 574 cÚ¡  g£t_cÚÃùabË_£‰šgs_·¿m_1 [] = { 0x82, 0x00, 0x00, 0x00 }; 575 cÚ¡  g£t_cÚÃùabË_£‰šgs_·¿m_2 [] = { 0x83, 0x00, 0x00, 0x00 }; 576 cÚ¡  g£t_cÚÃùabË_sÿn_’abË_·¿m [] = { 0x02 }; 578 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_Ú_sucûss_‹¡_1 = { 579 . £nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 580 . g£nd_·¿m = £t_cÚÃùabË_Ú_·¿m , 581 . g£nd_Ën = ( £t_cÚÃùabË_Ú_·¿m ), 582 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 583 . gex³ù_·¿m = £t_cÚÃùabË_£‰šgs_·¿m_1 , 584 . gex³ù_Ën = ( £t_cÚÃùabË_£‰šgs_·¿m_1 ), 585 . gex³ù_£‰šgs_£t = MGMT_SETTING_CONNECTABLE , 588 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_Ú_sucûss_‹¡_2 = { 589 . £tup_£‰šgs = £‰šgs_pow”ed , 590 . g£nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 591 . g£nd_·¿m = £t_cÚÃùabË_Ú_·¿m , 592 . g£nd_Ën = ( £t_cÚÃùabË_Ú_·¿m ), 593 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 594 . gex³ù_·¿m = £t_cÚÃùabË_£‰šgs_·¿m_2 , 595 . gex³ù_Ën = ( £t_cÚÃùabË_£‰šgs_·¿m_2 ), 596 . gex³ù_£‰šgs_£t = MGMT_SETTING_CONNECTABLE , 597 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_SCAN_ENABLE , 598 . gex³ù_hci_·¿m = £t_cÚÃùabË_sÿn_’abË_·¿m , 599 . gex³ù_hci_Ën = ( £t_cÚÃùabË_sÿn_’abË_·¿m ), 602 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_Ú_šv®id_·¿m_‹¡_1 = { 603 . £nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 604 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 607 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_Ú_šv®id_·¿m_‹¡_2 = { 608 . £nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 609 . g£nd_·¿m = £t_cÚÃùabË_šv®id_·¿m , 610 . g£nd_Ën = ( £t_cÚÃùabË_šv®id_·¿m ), 611 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 614 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_Ú_šv®id_·¿m_‹¡_3 = { 615 . £nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 616 . g£nd_·¿m = £t_cÚÃùabË_g¬bage_·¿m , 617 . g£nd_Ën = ( £t_cÚÃùabË_g¬bage_·¿m ), 618 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 621 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_Ú_šv®id_šdex_‹¡ = { 622 . £nd_šdex_nÚe = Œue , 623 . g£nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 624 . g£nd_·¿m = £t_cÚÃùabË_Ú_·¿m , 625 . g£nd_Ën = ( £t_cÚÃùabË_Ú_·¿m ), 626 . gex³ù_¡©us = MGMT_STATUS_INVALID_INDEX , 629  ušt16_t g£‰šgs_pow”ed_adv”tisšg [] = { MGMT_OP_SET_ADVERTISING , 630 MGMT_OP_SET_POWERED , 0 }; 632 cÚ¡  g£t_cÚÃùabË_Ë_£‰šgs_·¿m_1 [] = { 0x02, 0x02, 0x00, 0x00 }; 633 cÚ¡  g£t_cÚÃùabË_Ë_£‰šgs_·¿m_2 [] = { 0x03, 0x02, 0x00, 0x00 }; 634 cÚ¡  g£t_cÚÃùabË_Ë_£‰šgs_·¿m_3 [] = { 0x03, 0x06, 0x00, 0x00 }; 636 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_Ú_Ë_‹¡_1 = { 637 . £nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 638 . g£nd_·¿m = £t_cÚÃùabË_Ú_·¿m , 639 . g£nd_Ën = ( £t_cÚÃùabË_Ú_·¿m ), 640 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 641 . gex³ù_·¿m = £t_cÚÃùabË_Ë_£‰šgs_·¿m_1 , 642 . gex³ù_Ën = ( £t_cÚÃùabË_Ë_£‰šgs_·¿m_1 ), 643 . gex³ù_£‰šgs_£t = MGMT_SETTING_CONNECTABLE , 646 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_Ú_Ë_‹¡_2 = { 647 . £tup_£‰šgs = £‰šgs_pow”ed , 648 . g£nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 649 . g£nd_·¿m = £t_cÚÃùabË_Ú_·¿m , 650 . g£nd_Ën = ( £t_cÚÃùabË_Ú_·¿m ), 651 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 652 . gex³ù_·¿m = £t_cÚÃùabË_Ë_£‰šgs_·¿m_2 , 653 . gex³ù_Ën = ( £t_cÚÃùabË_Ë_£‰šgs_·¿m_2 ), 654 . gex³ù_£‰šgs_£t = MGMT_SETTING_CONNECTABLE , 657  ušt8_t g£t_cÚÃùabË_Ú_adv_·¿m [] = { 668 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_Ú_Ë_‹¡_3 = { 669 . £tup_£‰šgs = £‰šgs_pow”ed_adv”tisšg , 670 . g£nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 671 . g£nd_·¿m = £t_cÚÃùabË_Ú_·¿m , 672 . g£nd_Ën = ( £t_cÚÃùabË_Ú_·¿m ), 673 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 674 . gex³ù_·¿m = £t_cÚÃùabË_Ë_£‰šgs_·¿m_3 , 675 . gex³ù_Ën = ( £t_cÚÃùabË_Ë_£‰šgs_·¿m_3 ), 676 . gex³ù_£‰šgs_£t = MGMT_SETTING_CONNECTABLE , 677 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_ADV_PARAMETERS , 678 . gex³ù_hci_·¿m = £t_cÚÃùabË_Ú_adv_·¿m , 679 . gex³ù_hci_Ën = ( £t_cÚÃùabË_Ú_adv_·¿m ), 682 cÚ¡ ušt16_t g£‰šgs_cÚÃùabË [] = { MGMT_OP_SET_CONNECTABLE , 0 }; 683 cÚ¡ ušt16_t g£‰šgs_pow”ed_cÚÃùabË [] = { 684 MGMT_OP_SET_CONNECTABLE , 685 MGMT_OP_SET_POWERED , 0 }; 686 cÚ¡ ušt16_t g£‰šgs_pow”ed_discov”abË [] = { 687 MGMT_OP_SET_CONNECTABLE , 688 MGMT_OP_SET_DISCOVERABLE , 689 MGMT_OP_SET_POWERED , 0 }; 691 cÚ¡  g£t_cÚÃùabË_off_·¿m [] = { 0x00 }; 692 cÚ¡  g£t_cÚÃùabË_off_£‰šgs_1 [] = { 0x80, 0x00, 0x00, 0x00 }; 693 cÚ¡  g£t_cÚÃùabË_off_£‰šgs_2 [] = { 0x81, 0x00, 0x00, 0x00 }; 694 cÚ¡  g£t_cÚÃùabË_off_sÿn_’abË_·¿m [] = { 0x00 }; 696 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_off_sucûss_‹¡_1 = { 697 . £tup_£‰šgs = £‰šgs_cÚÃùabË , 698 . g£nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 699 . g£nd_·¿m = £t_cÚÃùabË_off_·¿m , 700 . g£nd_Ën = ( £t_cÚÃùabË_off_·¿m ), 701 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 702 . gex³ù_·¿m = £t_cÚÃùabË_off_£‰šgs_1 , 703 . gex³ù_Ën = ( £t_cÚÃùabË_off_£‰šgs_1 ), 704 . gex³ù_£‰šgs_un£t = MGMT_SETTING_CONNECTABLE , 707 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_off_sucûss_‹¡_2 = { 708 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË , 709 . g£nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 710 . g£nd_·¿m = £t_cÚÃùabË_off_·¿m , 711 . g£nd_Ën = ( £t_cÚÃùabË_off_·¿m ), 712 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 713 . gex³ù_·¿m = £t_cÚÃùabË_off_£‰šgs_2 , 714 . gex³ù_Ën = ( £t_cÚÃùabË_off_£‰šgs_2 ), 715 . gex³ù_£‰šgs_un£t = MGMT_SETTING_CONNECTABLE , 716 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_SCAN_ENABLE , 717 . gex³ù_hci_·¿m = £t_cÚÃùabË_off_sÿn_’abË_·¿m , 718 . gex³ù_hci_Ën = ( £t_cÚÃùabË_off_sÿn_’abË_·¿m ), 721 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_off_sucûss_‹¡_3 = { 722 . £tup_£‰šgs = £‰šgs_pow”ed_discov”abË , 723 . g£nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 724 . g£nd_·¿m = £t_cÚÃùabË_off_·¿m , 725 . g£nd_Ën = ( £t_cÚÃùabË_off_·¿m ), 726 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 727 . gex³ù_·¿m = £t_cÚÃùabË_off_£‰šgs_2 , 728 . gex³ù_Ën = ( £t_cÚÃùabË_off_£‰šgs_2 ), 729 . gex³ù_£‰šgs_un£t = MGMT_SETTING_CONNECTABLE , 730 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_SCAN_ENABLE , 731 . gex³ù_hci_·¿m = £t_cÚÃùabË_off_sÿn_’abË_·¿m , 732 . gex³ù_hci_Ën = ( £t_cÚÃùabË_off_sÿn_’abË_·¿m ), 735 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_off_sucûss_‹¡_4 = { 736 . £tup_£‰šgs = £‰šgs_pow”ed_discov”abË , 737 . g£nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 738 . g£nd_·¿m = £t_cÚÃùabË_off_·¿m , 739 . g£nd_Ën = ( £t_cÚÃùabË_off_·¿m ), 740 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 741 . gex³ù_·¿m = £t_cÚÃùabË_off_£‰šgs_2 , 742 . gex³ù_Ën = ( £t_cÚÃùabË_off_£‰šgs_2 ), 743 . gex³ù_£‰šgs_un£t = MGMT_SETTING_CONNECTABLE , 744 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_SCAN_ENABLE , 745 . gex³ù_hci_·¿m = £t_cÚÃùabË_sÿn_’abË_·¿m , 746 . gex³ù_hci_Ën = ( £t_cÚÃùabË_sÿn_’abË_·¿m ), 749 cÚ¡  g£t_cÚÃùabË_off_Ë_£‰šgs_1 [] = { 0x00, 0x02, 0x00, 0x00 }; 750 cÚ¡  g£t_cÚÃùabË_off_Ë_£‰šgs_2 [] = { 0x01, 0x06, 0x00, 0x00 }; 752  ušt16_t g£‰šgs_Ë_cÚÃùabË [] = { MGMT_OP_SET_LE , 753 MGMT_OP_SET_CONNECTABLE , 0 }; 755 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_off_Ë_‹¡_1 = { 756 . £tup_£‰šgs = £‰šgs_Ë_cÚÃùabË , 757 . g£nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 758 . g£nd_·¿m = £t_cÚÃùabË_off_·¿m , 759 . g£nd_Ën = ( £t_cÚÃùabË_off_·¿m ), 760 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 761 . gex³ù_·¿m = £t_cÚÃùabË_off_Ë_£‰šgs_1 , 762 . gex³ù_Ën = ( £t_cÚÃùabË_off_Ë_£‰šgs_1 ), 763 . gex³ù_£‰šgs_un£t = MGMT_SETTING_CONNECTABLE , 766  ušt16_t g£‰šgs_pow”ed_Ë_cÚÃùabË_adv”tisšg [] = { 767 MGMT_OP_SET_LE , 768 MGMT_OP_SET_CONNECTABLE , 769 MGMT_OP_SET_ADVERTISING , 770 MGMT_OP_SET_POWERED , 0 }; 772  ušt8_t g£t_cÚÃùabË_off_adv_·¿m [] = { 783 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_off_Ë_‹¡_2 = { 784 . £tup_£‰šgs = £‰šgs_pow”ed_Ë_cÚÃùabË_adv”tisšg , 785 . g£nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 786 . g£nd_·¿m = £t_cÚÃùabË_off_·¿m , 787 . g£nd_Ën = ( £t_cÚÃùabË_off_·¿m ), 788 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 789 . gex³ù_·¿m = £t_cÚÃùabË_off_Ë_£‰šgs_2 , 790 . gex³ù_Ën = ( £t_cÚÃùabË_off_Ë_£‰šgs_2 ), 791 . gex³ù_£‰šgs_un£t = MGMT_SETTING_CONNECTABLE , 792 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_ADV_PARAMETERS , 793 . gex³ù_hci_·¿m = £t_cÚÃùabË_off_adv_·¿m , 794 . gex³ù_hci_Ën = ( £t_cÚÃùabË_off_adv_·¿m ), 797  ušt16_t g£‰šgs_pow”ed_Ë_discov”abË_adv”tisšg [] = { 798 MGMT_OP_SET_LE , 799 MGMT_OP_SET_CONNECTABLE , 800 MGMT_OP_SET_ADVERTISING , 801 MGMT_OP_SET_POWERED , 802 MGMT_OP_SET_DISCOVERABLE , 0 }; 804 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_off_Ë_‹¡_3 = { 805 . £tup_£‰šgs = £‰šgs_pow”ed_Ë_discov”abË_adv”tisšg , 806 . g£nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 807 . g£nd_·¿m = £t_cÚÃùabË_off_·¿m , 808 . g£nd_Ën = ( £t_cÚÃùabË_off_·¿m ), 809 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 810 . gex³ù_·¿m = £t_cÚÃùabË_off_Ë_£‰šgs_2 , 811 . gex³ù_Ën = ( £t_cÚÃùabË_off_Ë_£‰šgs_2 ), 812 . gex³ù_£‰šgs_un£t = MGMT_SETTING_CONNECTABLE , 813 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_ADV_PARAMETERS , 814 . gex³ù_hci_·¿m = £t_cÚÃùabË_off_adv_·¿m , 815 . gex³ù_hci_Ën = ( £t_cÚÃùabË_off_adv_·¿m ), 818 cÚ¡  g’”ic_d©a g£t_cÚÃùabË_off_Ë_‹¡_4 = { 819 . £tup_£‰šgs = £‰šgs_pow”ed_Ë_discov”abË_adv”tisšg , 820 . g£tup_lim™ed_discov = Œue , 821 . g£nd_Ýcode = MGMT_OP_SET_CONNECTABLE , 822 . g£nd_·¿m = £t_cÚÃùabË_off_·¿m , 823 . g£nd_Ën = ( £t_cÚÃùabË_off_·¿m ), 824 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 825 . gex³ù_·¿m = £t_cÚÃùabË_off_Ë_£‰šgs_2 , 826 . gex³ù_Ën = ( £t_cÚÃùabË_off_Ë_£‰šgs_2 ), 827 . gex³ù_£‰šgs_un£t = MGMT_SETTING_CONNECTABLE , 828 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_ADV_PARAMETERS , 829 . gex³ù_hci_·¿m = £t_cÚÃùabË_off_adv_·¿m , 830 . gex³ù_hci_Ën = ( £t_cÚÃùabË_off_adv_·¿m ), 833 cÚ¡  g£t_ç¡_cÚn_Ú_·¿m [] = { 0x01 }; 834 cÚ¡  g£t_ç¡_cÚn_Ú_£‰šgs_1 [] = { 0x87, 0x00, 0x00, 0x00 }; 836 cÚ¡  g’”ic_d©a g£t_ç¡_cÚn_Ú_sucûss_‹¡_1 = { 837 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË , 838 . g£nd_Ýcode = MGMT_OP_SET_FAST_CONNECTABLE , 839 . g£nd_·¿m = £t_ç¡_cÚn_Ú_·¿m , 840 . g£nd_Ën = ( £t_ç¡_cÚn_Ú_·¿m ), 841 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 842 . gex³ù_·¿m = £t_ç¡_cÚn_Ú_£‰šgs_1 , 843 . gex³ù_Ën = ( £t_ç¡_cÚn_Ú_£‰šgs_1 ), 844 . gex³ù_£‰šgs_£t = MGMT_SETTING_FAST_CONNECTABLE , 847 cÚ¡  g’”ic_d©a g£t_ç¡_cÚn_Ú_nÙ_suµÜ‹d_‹¡_1 = { 848 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË , 849 . g£nd_Ýcode = MGMT_OP_SET_FAST_CONNECTABLE , 850 . g£nd_·¿m = £t_ç¡_cÚn_Ú_·¿m , 851 . g£nd_Ën = ( £t_ç¡_cÚn_Ú_·¿m ), 852 . gex³ù_¡©us = MGMT_STATUS_NOT_SUPPORTED , 855 cÚ¡  g£t_bÚdabË_Ú_·¿m [] = { 0x01 }; 856 cÚ¡  g£t_bÚdabË_šv®id_·¿m [] = { 0x02 }; 857 cÚ¡  g£t_bÚdabË_g¬bage_·¿m [] = { 0x01, 0x00 }; 858 cÚ¡  g£t_bÚdabË_£‰šgs_·¿m [] = { 0x90, 0x00, 0x00, 0x00 }; 860 cÚ¡  g’”ic_d©a g£t_bÚdabË_Ú_sucûss_‹¡ = { 861 . £nd_Ýcode = MGMT_OP_SET_BONDABLE , 862 . g£nd_·¿m = £t_bÚdabË_Ú_·¿m , 863 . g£nd_Ën = ( £t_bÚdabË_Ú_·¿m ), 864 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 865 . gex³ù_·¿m = £t_bÚdabË_£‰šgs_·¿m , 866 . gex³ù_Ën = ( £t_bÚdabË_£‰šgs_·¿m ), 867 . gex³ù_£‰šgs_£t = MGMT_SETTING_BONDABLE , 870 cÚ¡  g’”ic_d©a g£t_bÚdabË_Ú_šv®id_·¿m_‹¡_1 = { 871 . £nd_Ýcode = MGMT_OP_SET_BONDABLE , 872 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 875 cÚ¡  g’”ic_d©a g£t_bÚdabË_Ú_šv®id_·¿m_‹¡_2 = { 876 . £nd_Ýcode = MGMT_OP_SET_BONDABLE , 877 . g£nd_·¿m = £t_bÚdabË_šv®id_·¿m , 878 . g£nd_Ën = ( £t_bÚdabË_šv®id_·¿m ), 879 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 882 cÚ¡  g’”ic_d©a g£t_bÚdabË_Ú_šv®id_·¿m_‹¡_3 = { 883 . £nd_Ýcode = MGMT_OP_SET_BONDABLE , 884 . g£nd_·¿m = £t_bÚdabË_g¬bage_·¿m , 885 . g£nd_Ën = ( £t_bÚdabË_g¬bage_·¿m ), 886 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 889 cÚ¡  g’”ic_d©a g£t_bÚdabË_Ú_šv®id_šdex_‹¡ = { 890 . £nd_šdex_nÚe = Œue , 891 . g£nd_Ýcode = MGMT_OP_SET_BONDABLE , 892 . g£nd_·¿m = £t_bÚdabË_Ú_·¿m , 893 . g£nd_Ën = ( £t_bÚdabË_Ú_·¿m ), 894 . gex³ù_¡©us = MGMT_STATUS_INVALID_INDEX , 897 cÚ¡ ušt8_t g£t_discov”abË_Ú_·¿m [] = { 0x01, 0x00, 0x00 }; 898 cÚ¡ ušt8_t g£t_discov”abË_timeout_·¿m [] = { 0x01, 0x0a, 0x00 }; 899 cÚ¡ ušt8_t g£t_discov”abË_šv®id_·¿m [] = { 0x02, 0x00, 0x00 }; 900 cÚ¡ ušt8_t g£t_discov”abË_off_·¿m [] = { 0x00, 0x00, 0x00 }; 901 cÚ¡ ušt8_t g£t_discov”abË_ofáimeout_·¿m [] = { 0x00, 0x01, 0x00 }; 902 cÚ¡ ušt8_t g£t_discov”abË_g¬bage_·¿m [] = { 0x01, 0x00, 0x00, 0x00 }; 903 cÚ¡ ušt8_t g£t_discov”abË_Ú_£‰šgs_·¿m_1 [] = { 0x8a, 0x00, 0x00, 0x00 }; 904 cÚ¡ ušt8_t g£t_discov”abË_Ú_£‰šgs_·¿m_2 [] = { 0x8b, 0x00, 0x00, 0x00 }; 905 cÚ¡ ušt8_t g£t_discov”abË_off_£‰šgs_·¿m_1 [] = { 0x82, 0x00, 0x00, 0x00 }; 906 cÚ¡ ušt8_t g£t_discov”abË_off_£‰šgs_·¿m_2 [] = { 0x83, 0x00, 0x00, 0x00 }; 907 cÚ¡ ušt8_t g£t_discov”abË_Ú_sÿn_’abË_·¿m [] = { 0x03 }; 908 cÚ¡ ušt8_t g£t_discov”abË_off_sÿn_’abË_·¿m [] = { 0x02 }; 910 cÚ¡  g’”ic_d©a g£t_discov”abË_Ú_šv®id_·¿m_‹¡_1 = { 911 . £nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 912 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 915 cÚ¡  g’”ic_d©a g£t_discov”abË_Ú_šv®id_·¿m_‹¡_2 = { 916 . £nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 917 . g£nd_·¿m = £t_discov”abË_šv®id_·¿m , 918 . g£nd_Ën = ( £t_discov”abË_šv®id_·¿m ), 919 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 922 cÚ¡  g’”ic_d©a g£t_discov”abË_Ú_šv®id_·¿m_‹¡_3 = { 923 . £nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 924 . g£nd_·¿m = £t_discov”abË_g¬bage_·¿m , 925 . g£nd_Ën = ( £t_discov”abË_g¬bage_·¿m ), 926 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 929 cÚ¡  g’”ic_d©a g£t_discov”abË_Ú_šv®id_·¿m_‹¡_4 = { 930 . £nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 931 . g£nd_·¿m = £t_discov”abË_ofáimeout_·¿m , 932 . g£nd_Ën = ( £t_discov”abË_ofáimeout_·¿m ), 933 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 936 cÚ¡  g’”ic_d©a g£t_discov”abË_Ú_nÙ_pow”ed_‹¡_1 = { 937 . £nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 938 . g£nd_·¿m = £t_discov”abË_timeout_·¿m , 939 . g£nd_Ën = ( £t_discov”abË_timeout_·¿m ), 940 . gex³ù_¡©us = MGMT_STATUS_NOT_POWERED , 943 cÚ¡  g’”ic_d©a g£t_discov”abË_Ú_nÙ_pow”ed_‹¡_2 = { 944 . £tup_£‰šgs = £‰šgs_cÚÃùabË , 945 . g£nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 946 . g£nd_·¿m = £t_discov”abË_timeout_·¿m , 947 . g£nd_Ën = ( £t_discov”abË_timeout_·¿m ), 948 . gex³ù_¡©us = MGMT_STATUS_NOT_POWERED , 951 cÚ¡  g’”ic_d©a g£t_discov”abË_Ú_»jeùed_‹¡_1 = { 952 . £tup_£‰šgs = £‰šgs_pow”ed , 953 . g£nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 954 . g£nd_·¿m = £t_discov”abË_Ú_·¿m , 955 . g£nd_Ën = ( £t_discov”abË_Ú_·¿m ), 956 . gex³ù_¡©us = MGMT_STATUS_REJECTED , 959 cÚ¡  g’”ic_d©a g£t_discov”abË_Ú_»jeùed_‹¡_2 = { 960 . £tup_£‰šgs = £‰šgs_pow”ed , 961 . g£nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 962 . g£nd_·¿m = £t_discov”abË_Ú_·¿m , 963 . g£nd_Ën = ( £t_discov”abË_Ú_·¿m ), 964 . gex³ù_¡©us = MGMT_STATUS_REJECTED , 967 cÚ¡  g’”ic_d©a g£t_discov”abË_Ú_»jeùed_‹¡_3 = { 968 . £tup_£‰šgs = £‰šgs_pow”ed , 969 . g£nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 970 . g£nd_·¿m = £t_discov”abË_timeout_·¿m , 971 . g£nd_Ën = ( £t_discov”abË_timeout_·¿m ), 972 . gex³ù_¡©us = MGMT_STATUS_REJECTED , 975 cÚ¡  g’”ic_d©a g£t_discov”abË_Ú_sucûss_‹¡_1 = { 976 . £tup_£‰šgs = £‰šgs_cÚÃùabË , 977 . g£nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 978 . g£nd_·¿m = £t_discov”abË_Ú_·¿m , 979 . g£nd_Ën = ( £t_discov”abË_Ú_·¿m ), 980 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 981 . gex³ù_·¿m = £t_discov”abË_Ú_£‰šgs_·¿m_1 , 982 . gex³ù_Ën = ( £t_discov”abË_Ú_£‰šgs_·¿m_1 ), 983 . gex³ù_£‰šgs_£t = MGMT_SETTING_DISCOVERABLE , 986 cÚ¡  g’”ic_d©a g£t_discov”abË_Ú_sucûss_‹¡_2 = { 987 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË , 988 . g£nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 989 . g£nd_·¿m = £t_discov”abË_Ú_·¿m , 990 . g£nd_Ën = ( £t_discov”abË_Ú_·¿m ), 991 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 992 . gex³ù_·¿m = £t_discov”abË_Ú_£‰šgs_·¿m_2 , 993 . gex³ù_Ën = ( £t_discov”abË_Ú_£‰šgs_·¿m_2 ), 994 . gex³ù_£‰šgs_£t = MGMT_SETTING_DISCOVERABLE , 995 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_SCAN_ENABLE , 996 . gex³ù_hci_·¿m = £t_discov”abË_Ú_sÿn_’abË_·¿m , 997 . gex³ù_hci_Ën = ( £t_discov”abË_Ú_sÿn_’abË_·¿m ), 1000  ušt8_t g£t_discov_Ú_Ë_·¿m [] = { 0x0b, 0x06, 0x00, 0x00 }; 1001  ušt8_t g£t_discov_adv_d©a [32] = { 0x06, 0x02, 0x01, 0x06, 1004 cÚ¡  g’”ic_d©a g£t_discov_Ú_Ë_sucûss_1 = { 1005 . £tup_£‰šgs = £‰šgs_pow”ed_Ë_cÚÃùabË_adv”tisšg , 1006 . g£nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 1007 . g£nd_·¿m = £t_discov”abË_Ú_·¿m , 1008 . g£nd_Ën = ( £t_discov”abË_Ú_·¿m ), 1009 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1010 . gex³ù_·¿m = £t_discov_Ú_Ë_·¿m , 1011 . gex³ù_Ën = ( £t_discov_Ú_Ë_·¿m ), 1012 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_ADV_DATA , 1013 . gex³ù_hci_·¿m = £t_discov_adv_d©a , 1014 . gex³ù_hci_Ën = ( £t_discov_adv_d©a ), 1017 cÚ¡  g’”ic_d©a g£t_discov”abË_off_sucûss_‹¡_1 = { 1018 . £tup_£‰šgs = £‰šgs_cÚÃùabË , 1019 . g£nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 1020 . g£nd_·¿m = £t_discov”abË_off_·¿m , 1021 . g£nd_Ën = ( £t_discov”abË_off_·¿m ), 1022 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1023 . gex³ù_·¿m = £t_discov”abË_off_£‰šgs_·¿m_1 , 1024 . gex³ù_Ën = ( £t_discov”abË_off_£‰šgs_·¿m_1 ), 1027 cÚ¡  g’”ic_d©a g£t_discov”abË_off_sucûss_‹¡_2 = { 1028 . £tup_£‰šgs = £‰šgs_pow”ed_discov”abË , 1029 . g£nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 1030 . g£nd_·¿m = £t_discov”abË_off_·¿m , 1031 . g£nd_Ën = ( £t_discov”abË_off_·¿m ), 1032 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1033 . gex³ù_·¿m = £t_discov”abË_off_£‰šgs_·¿m_2 , 1034 . gex³ù_Ën = ( £t_discov”abË_off_£‰šgs_·¿m_2 ), 1035 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_SCAN_ENABLE , 1036 . gex³ù_hci_·¿m = £t_discov”abË_off_sÿn_’abË_·¿m , 1037 . gex³ù_hci_Ën = ( £t_discov”abË_off_sÿn_’abË_·¿m ), 1040 cÚ¡ ušt8_t g£t_lim™ed_discov_Ú_·¿m [] = { 0x02, 0x01, 0x00 }; 1042 cÚ¡  g’”ic_d©a g£t_lim™ed_discov_Ú_sucûss_1 = { 1043 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË , 1044 . g£nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 1045 . g£nd_·¿m = £t_lim™ed_discov_Ú_·¿m , 1046 . g£nd_Ën = ( £t_lim™ed_discov_Ú_·¿m ), 1047 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1048 . gex³ù_·¿m = £t_discov”abË_Ú_£‰šgs_·¿m_2 , 1049 . gex³ù_Ën = ( £t_discov”abË_Ú_£‰šgs_·¿m_2 ), 1050 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_SCAN_ENABLE , 1051 . gex³ù_hci_·¿m = £t_discov”abË_Ú_sÿn_’abË_·¿m , 1052 . gex³ù_hci_Ën = ( £t_discov”abË_Ú_sÿn_’abË_·¿m ), 1055  ušt8_t gwr™e_cu¼’t_Ÿc_Ïp_lim™ed [] = { 0x01, 0x00, 0x8b, 0x9e }; 1057 cÚ¡  g’”ic_d©a g£t_lim™ed_discov_Ú_sucûss_2 = { 1058 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË , 1059 . g£nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 1060 . g£nd_·¿m = £t_lim™ed_discov_Ú_·¿m , 1061 . g£nd_Ën = ( £t_lim™ed_discov_Ú_·¿m ), 1062 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1063 . gex³ù_·¿m = £t_discov”abË_Ú_£‰šgs_·¿m_2 , 1064 . gex³ù_Ën = ( £t_discov”abË_Ú_£‰šgs_·¿m_2 ), 1065 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_CURRENT_IAC_LAP , 1066 . gex³ù_hci_·¿m = wr™e_cu¼’t_Ÿc_Ïp_lim™ed , 1067 . gex³ù_hci_Ën = ( wr™e_cu¼’t_Ÿc_Ïp_lim™ed ), 1070  ušt8_t gwr™e_cod_lim™ed [] = { 0x00, 0x20, 0x00 }; 1072 cÚ¡  g’”ic_d©a g£t_lim™ed_discov_Ú_sucûss_3 = { 1073 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË , 1074 . g£nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 1075 . g£nd_·¿m = £t_lim™ed_discov_Ú_·¿m , 1076 . g£nd_Ën = ( £t_lim™ed_discov_Ú_·¿m ), 1077 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1078 . gex³ù_·¿m = £t_discov”abË_Ú_£‰šgs_·¿m_2 , 1079 . gex³ù_Ën = ( £t_discov”abË_Ú_£‰šgs_·¿m_2 ), 1080 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_CLASS_OF_DEV , 1081 . gex³ù_hci_·¿m = wr™e_cod_lim™ed , 1082 . gex³ù_hci_Ën = ( wr™e_cod_lim™ed ), 1085  ušt8_t g£t_lim™ed_discov_adv_d©a [32] = { 0x06, 0x02, 0x01, 0x05, 1088 cÚ¡  g’”ic_d©a g£t_lim™ed_discov_Ú_Ë_sucûss_1 = { 1089 . £tup_£‰šgs = £‰šgs_pow”ed_Ë_cÚÃùabË_adv”tisšg , 1090 . g£nd_Ýcode = MGMT_OP_SET_DISCOVERABLE , 1091 . g£nd_·¿m = £t_lim™ed_discov_Ú_·¿m , 1092 . g£nd_Ën = ( £t_lim™ed_discov_Ú_·¿m ), 1093 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1094 . gex³ù_·¿m = £t_discov_Ú_Ë_·¿m , 1095 . gex³ù_Ën = ( £t_discov_Ú_Ë_·¿m ), 1096 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_ADV_DATA , 1097 . gex³ù_hci_·¿m = £t_lim™ed_discov_adv_d©a , 1098 . gex³ù_hci_Ën = ( £t_lim™ed_discov_adv_d©a ), 1101  ušt16_t g£‰šgs_lšk_£c [] = { MGMT_OP_SET_LINK_SECURITY , 0 }; 1103 cÚ¡  g£t_lšk_£c_Ú_·¿m [] = { 0x01 }; 1104 cÚ¡  g£t_lšk_£c_šv®id_·¿m [] = { 0x02 }; 1105 cÚ¡  g£t_lšk_£c_g¬bage_·¿m [] = { 0x01, 0x00 }; 1106 cÚ¡  g£t_lšk_£c_£‰šgs_·¿m_1 [] = { 0xa0, 0x00, 0x00, 0x00 }; 1107 cÚ¡  g£t_lšk_£c_£‰šgs_·¿m_2 [] = { 0xa1, 0x00, 0x00, 0x00 }; 1108 cÚ¡  g£t_lšk_£c_auth_’abË_·¿m [] = { 0x01 }; 1110 cÚ¡  g’”ic_d©a g£t_lšk_£c_Ú_sucûss_‹¡_1 = { 1111 . £nd_Ýcode = MGMT_OP_SET_LINK_SECURITY , 1112 . g£nd_·¿m = £t_lšk_£c_Ú_·¿m , 1113 . g£nd_Ën = ( £t_lšk_£c_Ú_·¿m ), 1114 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1115 . gex³ù_·¿m = £t_lšk_£c_£‰šgs_·¿m_1 , 1116 . gex³ù_Ën = ( £t_lšk_£c_£‰šgs_·¿m_1 ), 1117 . gex³ù_£‰šgs_£t = MGMT_SETTING_LINK_SECURITY , 1120 cÚ¡  g’”ic_d©a g£t_lšk_£c_Ú_sucûss_‹¡_2 = { 1121 . £tup_£‰šgs = £‰šgs_pow”ed , 1122 . g£nd_Ýcode = MGMT_OP_SET_LINK_SECURITY , 1123 . g£nd_·¿m = £t_lšk_£c_Ú_·¿m , 1124 . g£nd_Ën = ( £t_lšk_£c_Ú_·¿m ), 1125 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1126 . gex³ù_·¿m = £t_lšk_£c_£‰šgs_·¿m_2 , 1127 . gex³ù_Ën = ( £t_lšk_£c_£‰šgs_·¿m_2 ), 1128 . gex³ù_£‰šgs_£t = MGMT_SETTING_LINK_SECURITY , 1129 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_AUTH_ENABLE , 1130 . gex³ù_hci_·¿m = £t_lšk_£c_auth_’abË_·¿m , 1131 . gex³ù_hci_Ën = ( £t_lšk_£c_auth_’abË_·¿m ), 1134 cÚ¡  g’”ic_d©a g£t_lšk_£c_Ú_sucûss_‹¡_3 = { 1135 . £tup_£‰šgs = £‰šgs_lšk_£c , 1136 . g£nd_Ýcode = MGMT_OP_SET_POWERED , 1137 . g£nd_·¿m = £t_pow”ed_Ú_·¿m , 1138 . g£nd_Ën = ( £t_pow”ed_Ú_·¿m ), 1139 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1140 . gex³ù_·¿m = £t_lšk_£c_£‰šgs_·¿m_2 , 1141 . gex³ù_Ën = ( £t_lšk_£c_£‰šgs_·¿m_2 ), 1142 . gex³ù_£‰šgs_£t = MGMT_SETTING_LINK_SECURITY , 1143 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_AUTH_ENABLE , 1144 . gex³ù_hci_·¿m = £t_lšk_£c_auth_’abË_·¿m , 1145 . gex³ù_hci_Ën = ( £t_lšk_£c_auth_’abË_·¿m ), 1148 cÚ¡  g’”ic_d©a g£t_lšk_£c_Ú_šv®id_·¿m_‹¡_1 = { 1149 . £nd_Ýcode = MGMT_OP_SET_LINK_SECURITY , 1150 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1153 cÚ¡  g’”ic_d©a g£t_lšk_£c_Ú_šv®id_·¿m_‹¡_2 = { 1154 . £nd_Ýcode = MGMT_OP_SET_LINK_SECURITY , 1155 . g£nd_·¿m = £t_lšk_£c_šv®id_·¿m , 1156 . g£nd_Ën = ( £t_lšk_£c_šv®id_·¿m ), 1157 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1160 cÚ¡  g’”ic_d©a g£t_lšk_£c_Ú_šv®id_·¿m_‹¡_3 = { 1161 . £nd_Ýcode = MGMT_OP_SET_LINK_SECURITY , 1162 . g£nd_·¿m = £t_lšk_£c_g¬bage_·¿m , 1163 . g£nd_Ën = ( £t_lšk_£c_g¬bage_·¿m ), 1164 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1167 cÚ¡  g’”ic_d©a g£t_lšk_£c_Ú_šv®id_šdex_‹¡ = { 1168 . £nd_šdex_nÚe = Œue , 1169 . g£nd_Ýcode = MGMT_OP_SET_LINK_SECURITY , 1170 . g£nd_·¿m = £t_lšk_£c_Ú_·¿m , 1171 . g£nd_Ën = ( £t_lšk_£c_Ú_·¿m ), 1172 . gex³ù_¡©us = MGMT_STATUS_INVALID_INDEX , 1175 cÚ¡ ušt16_t g£‰šgs_pow”ed_lšk_£c [] = { 1176 MGMT_OP_SET_LINK_SECURITY , 1177 MGMT_OP_SET_POWERED , 0 }; 1179 cÚ¡  g£t_lšk_£c_off_·¿m [] = { 0x00 }; 1180 cÚ¡  g£t_lšk_£c_off_£‰šgs_1 [] = { 0x80, 0x00, 0x00, 0x00 }; 1181 cÚ¡  g£t_lšk_£c_off_£‰šgs_2 [] = { 0x81, 0x00, 0x00, 0x00 }; 1182 cÚ¡  g£t_lšk_£c_off_auth_’abË_·¿m [] = { 0x00 }; 1184 cÚ¡  g’”ic_d©a g£t_lšk_£c_off_sucûss_‹¡_1 = { 1185 . £tup_£‰šgs = £‰šgs_lšk_£c , 1186 . g£nd_Ýcode = MGMT_OP_SET_LINK_SECURITY , 1187 . g£nd_·¿m = £t_lšk_£c_off_·¿m , 1188 . g£nd_Ën = ( £t_lšk_£c_off_·¿m ), 1189 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1190 . gex³ù_·¿m = £t_lšk_£c_off_£‰šgs_1 , 1191 . gex³ù_Ën = ( £t_lšk_£c_off_£‰šgs_1 ), 1192 . gex³ù_£‰šgs_un£t = MGMT_SETTING_LINK_SECURITY , 1195 cÚ¡  g’”ic_d©a g£t_lšk_£c_off_sucûss_‹¡_2 = { 1196 . £tup_£‰šgs = £‰šgs_pow”ed_lšk_£c , 1197 . g£nd_Ýcode = MGMT_OP_SET_LINK_SECURITY , 1198 . g£nd_·¿m = £t_lšk_£c_off_·¿m , 1199 . g£nd_Ën = ( £t_lšk_£c_off_·¿m ), 1200 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1201 . gex³ù_·¿m = £t_lšk_£c_off_£‰šgs_2 , 1202 . gex³ù_Ën = ( £t_lšk_£c_off_£‰šgs_2 ), 1203 . gex³ù_£‰šgs_un£t = MGMT_SETTING_LINK_SECURITY , 1204 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_AUTH_ENABLE , 1205 . gex³ù_hci_·¿m = £t_lšk_£c_off_auth_’abË_·¿m , 1206 . gex³ù_hci_Ën = ( £t_lšk_£c_off_auth_’abË_·¿m ), 1209  ušt16_t g£‰šgs_s¥ [] = { MGMT_OP_SET_SSP , 0 }; 1211 cÚ¡  g£t_s¥_Ú_·¿m [] = { 0x01 }; 1212 cÚ¡  g£t_s¥_šv®id_·¿m [] = { 0x02 }; 1213 cÚ¡  g£t_s¥_g¬bage_·¿m [] = { 0x01, 0x00 }; 1214 cÚ¡  g£t_s¥_£‰šgs_·¿m_1 [] = { 0xc0, 0x00, 0x00, 0x00 }; 1215 cÚ¡  g£t_s¥_£‰šgs_·¿m_2 [] = { 0xc1, 0x00, 0x00, 0x00 }; 1216 cÚ¡  g£t_s¥_Ú_wr™e_s¥_mode_·¿m [] = { 0x01 }; 1218 cÚ¡  g’”ic_d©a g£t_s¥_Ú_sucûss_‹¡_1 = { 1219 . £nd_Ýcode = MGMT_OP_SET_SSP , 1220 . g£nd_·¿m = £t_s¥_Ú_·¿m , 1221 . g£nd_Ën = ( £t_s¥_Ú_·¿m ), 1222 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1223 . gex³ù_·¿m = £t_s¥_£‰šgs_·¿m_1 , 1224 . gex³ù_Ën = ( £t_s¥_£‰šgs_·¿m_1 ), 1225 . gex³ù_£‰šgs_£t = MGMT_SETTING_SSP , 1228 cÚ¡  g’”ic_d©a g£t_s¥_Ú_sucûss_‹¡_2 = { 1229 . £tup_£‰šgs = £‰šgs_pow”ed , 1230 . g£nd_Ýcode = MGMT_OP_SET_SSP , 1231 . g£nd_·¿m = £t_s¥_Ú_·¿m , 1232 . g£nd_Ën = ( £t_s¥_Ú_·¿m ), 1233 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1234 . gex³ù_·¿m = £t_s¥_£‰šgs_·¿m_2 , 1235 . gex³ù_Ën = ( £t_s¥_£‰šgs_·¿m_2 ), 1236 . gex³ù_£‰šgs_£t = MGMT_SETTING_SSP , 1237 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE , 1238 . gex³ù_hci_·¿m = £t_s¥_Ú_wr™e_s¥_mode_·¿m , 1239 . gex³ù_hci_Ën = ( £t_s¥_Ú_wr™e_s¥_mode_·¿m ), 1242 cÚ¡  g’”ic_d©a g£t_s¥_Ú_sucûss_‹¡_3 = { 1243 . £tup_£‰šgs = £‰šgs_s¥ , 1244 . g£nd_Ýcode = MGMT_OP_SET_POWERED , 1245 . g£nd_·¿m = £t_pow”ed_Ú_·¿m , 1246 . g£nd_Ën = ( £t_pow”ed_Ú_·¿m ), 1247 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1248 . gex³ù_·¿m = £t_s¥_£‰šgs_·¿m_2 , 1249 . gex³ù_Ën = ( £t_s¥_£‰šgs_·¿m_2 ), 1250 . gex³ù_£‰šgs_£t = MGMT_SETTING_SSP , 1251 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE , 1252 . gex³ù_hci_·¿m = £t_s¥_Ú_wr™e_s¥_mode_·¿m , 1253 . gex³ù_hci_Ën = ( £t_s¥_Ú_wr™e_s¥_mode_·¿m ), 1256 cÚ¡  g’”ic_d©a g£t_s¥_Ú_šv®id_·¿m_‹¡_1 = { 1257 . £nd_Ýcode = MGMT_OP_SET_SSP , 1258 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1261 cÚ¡  g’”ic_d©a g£t_s¥_Ú_šv®id_·¿m_‹¡_2 = { 1262 . £nd_Ýcode = MGMT_OP_SET_SSP , 1263 . g£nd_·¿m = £t_s¥_šv®id_·¿m , 1264 . g£nd_Ën = ( £t_s¥_šv®id_·¿m ), 1265 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1268 cÚ¡  g’”ic_d©a g£t_s¥_Ú_šv®id_·¿m_‹¡_3 = { 1269 . £nd_Ýcode = MGMT_OP_SET_SSP , 1270 . g£nd_·¿m = £t_s¥_g¬bage_·¿m , 1271 . g£nd_Ën = ( £t_s¥_g¬bage_·¿m ), 1272 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1275 cÚ¡  g’”ic_d©a g£t_s¥_Ú_šv®id_šdex_‹¡ = { 1276 . £nd_šdex_nÚe = Œue , 1277 . g£nd_Ýcode = MGMT_OP_SET_SSP , 1278 . g£nd_·¿m = £t_s¥_Ú_·¿m , 1279 . g£nd_Ën = ( £t_s¥_Ú_·¿m ), 1280 . gex³ù_¡©us = MGMT_STATUS_INVALID_INDEX , 1283  ušt16_t g£‰šgs_pow”ed_s¥ [] = { MGMT_OP_SET_SSP , 1284 MGMT_OP_SET_POWERED , 0 }; 1286 cÚ¡  g£t_sc_Ú_·¿m [] = { 0x01 }; 1287 cÚ¡  g£t_sc_Úly_Ú_·¿m [] = { 0x02 }; 1288 cÚ¡  g£t_sc_šv®id_·¿m [] = { 0x03 }; 1289 cÚ¡  g£t_sc_g¬bage_·¿m [] = { 0x01, 0x00 }; 1290 cÚ¡  g£t_sc_£‰šgs_·¿m_1 [] = { 0xc0, 0x08, 0x00, 0x00 }; 1291 cÚ¡  g£t_sc_£‰šgs_·¿m_2 [] = { 0xc1, 0x08, 0x00, 0x00 }; 1292 cÚ¡  g£t_sc_Ú_wr™e_sc_suµÜt_·¿m [] = { 0x01 }; 1294 cÚ¡  g’”ic_d©a g£t_sc_Ú_sucûss_‹¡_1 = { 1295 . £tup_£‰šgs = £‰šgs_s¥ , 1296 . g£nd_Ýcode = MGMT_OP_SET_SECURE_CONN , 1297 . g£nd_·¿m = £t_sc_Ú_·¿m , 1298 . g£nd_Ën = ( £t_sc_Ú_·¿m ), 1299 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1300 . gex³ù_·¿m = £t_sc_£‰šgs_·¿m_1 , 1301 . gex³ù_Ën = ( £t_sc_£‰šgs_·¿m_1 ), 1302 . gex³ù_£‰šgs_£t = MGMT_SETTING_SECURE_CONN , 1305 cÚ¡  g’”ic_d©a g£t_sc_Ú_sucûss_‹¡_2 = { 1306 . £tup_£‰šgs = £‰šgs_pow”ed_s¥ , 1307 . g£nd_Ýcode = MGMT_OP_SET_SECURE_CONN , 1308 . g£nd_·¿m = £t_sc_Ú_·¿m , 1309 . g£nd_Ën = ( £t_sc_Ú_·¿m ), 1310 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1311 . gex³ù_·¿m = £t_sc_£‰šgs_·¿m_2 , 1312 . gex³ù_Ën = ( £t_sc_£‰šgs_·¿m_2 ), 1313 . gex³ù_£‰šgs_£t = MGMT_SETTING_SECURE_CONN , 1314 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_SECURE_CONN_SUPPORT , 1315 . gex³ù_hci_·¿m = £t_sc_Ú_wr™e_sc_suµÜt_·¿m , 1316 . gex³ù_hci_Ën = ( £t_sc_Ú_wr™e_sc_suµÜt_·¿m ), 1319 cÚ¡  g’”ic_d©a g£t_sc_Ú_šv®id_·¿m_‹¡_1 = { 1320 . £tup_£‰šgs = £‰šgs_s¥ , 1321 . g£nd_Ýcode = MGMT_OP_SET_SECURE_CONN , 1322 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1325 cÚ¡  g’”ic_d©a g£t_sc_Ú_šv®id_·¿m_‹¡_2 = { 1326 . £tup_£‰šgs = £‰šgs_s¥ , 1327 . g£nd_Ýcode = MGMT_OP_SET_SECURE_CONN , 1328 . g£nd_·¿m = £t_sc_šv®id_·¿m , 1329 . g£nd_Ën = ( £t_sc_šv®id_·¿m ), 1330 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1333 cÚ¡  g’”ic_d©a g£t_sc_Ú_šv®id_·¿m_‹¡_3 = { 1334 . £tup_£‰šgs = £‰šgs_s¥ , 1335 . g£nd_Ýcode = MGMT_OP_SET_SECURE_CONN , 1336 . g£nd_·¿m = £t_sc_g¬bage_·¿m , 1337 . g£nd_Ën = ( £t_sc_g¬bage_·¿m ), 1338 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1341 cÚ¡  g’”ic_d©a g£t_sc_Ú_šv®id_šdex_‹¡ = { 1342 . £tup_£‰šgs = £‰šgs_s¥ , 1343 . g£nd_šdex_nÚe = Œue , 1344 . g£nd_Ýcode = MGMT_OP_SET_SECURE_CONN , 1345 . g£nd_·¿m = £t_sc_Ú_·¿m , 1346 . g£nd_Ën = ( £t_sc_Ú_·¿m ), 1347 . gex³ù_¡©us = MGMT_STATUS_INVALID_INDEX , 1350 cÚ¡  g’”ic_d©a g£t_sc_Ú_nÙ_suµÜ‹d_‹¡_1 = { 1351 . £tup_£‰šgs = £‰šgs_s¥ , 1352 . g£nd_Ýcode = MGMT_OP_SET_SECURE_CONN , 1353 . g£nd_·¿m = £t_sc_Ú_·¿m , 1354 . g£nd_Ën = ( £t_sc_Ú_·¿m ), 1355 . gex³ù_¡©us = MGMT_STATUS_NOT_SUPPORTED , 1358 cÚ¡  g’”ic_d©a g£t_sc_Ú_nÙ_suµÜ‹d_‹¡_2 = { 1359 . £tup_£‰šgs = £‰šgs_pow”ed_s¥ , 1360 . g£nd_Ýcode = MGMT_OP_SET_SECURE_CONN , 1361 . g£nd_·¿m = £t_sc_Ú_·¿m , 1362 . g£nd_Ën = ( £t_sc_Ú_·¿m ), 1363 . gex³ù_¡©us = MGMT_STATUS_NOT_SUPPORTED , 1366 cÚ¡  g’”ic_d©a g£t_sc_Úly_Ú_sucûss_‹¡_1 = { 1367 . £tup_£‰šgs = £‰šgs_s¥ , 1368 . g£nd_Ýcode = MGMT_OP_SET_SECURE_CONN , 1369 . g£nd_·¿m = £t_sc_Úly_Ú_·¿m , 1370 . g£nd_Ën = ( £t_sc_Úly_Ú_·¿m ), 1371 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1372 . gex³ù_·¿m = £t_sc_£‰šgs_·¿m_1 , 1373 . gex³ù_Ën = ( £t_sc_£‰šgs_·¿m_1 ), 1374 . gex³ù_£‰šgs_£t = MGMT_SETTING_SECURE_CONN , 1377 cÚ¡  g’”ic_d©a g£t_sc_Úly_Ú_sucûss_‹¡_2 = { 1378 . £tup_£‰šgs = £‰šgs_pow”ed_s¥ , 1379 . g£nd_Ýcode = MGMT_OP_SET_SECURE_CONN , 1380 . g£nd_·¿m = £t_sc_Úly_Ú_·¿m , 1381 . g£nd_Ën = ( £t_sc_Úly_Ú_·¿m ), 1382 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1383 . gex³ù_·¿m = £t_sc_£‰šgs_·¿m_2 , 1384 . gex³ù_Ën = ( £t_sc_£‰šgs_·¿m_2 ), 1385 . gex³ù_£‰šgs_£t = MGMT_SETTING_SECURE_CONN , 1386 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_SECURE_CONN_SUPPORT , 1387 . gex³ù_hci_·¿m = £t_sc_Ú_wr™e_sc_suµÜt_·¿m , 1388 . gex³ù_hci_Ën = ( £t_sc_Ú_wr™e_sc_suµÜt_·¿m ), 1391 cÚ¡  g£t_hs_Ú_·¿m [] = { 0x01 }; 1392 cÚ¡  g£t_hs_šv®id_·¿m [] = { 0x02 }; 1393 cÚ¡  g£t_hs_g¬bage_·¿m [] = { 0x01, 0x00 }; 1394 cÚ¡  g£t_hs_£‰šgs_·¿m_1 [] = { 0xc0, 0x01, 0x00, 0x00 }; 1396 cÚ¡  g’”ic_d©a g£t_hs_Ú_sucûss_‹¡ = { 1397 . £tup_£‰šgs = £‰šgs_s¥ , 1398 . g£nd_Ýcode = MGMT_OP_SET_HS , 1399 . g£nd_·¿m = £t_hs_Ú_·¿m , 1400 . g£nd_Ën = ( £t_hs_Ú_·¿m ), 1401 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1402 . gex³ù_·¿m = £t_hs_£‰šgs_·¿m_1 , 1403 . gex³ù_Ën = ( £t_hs_£‰šgs_·¿m_1 ), 1404 . gex³ù_£‰šgs_£t = MGMT_SETTING_HS , 1407 cÚ¡  g’”ic_d©a g£t_hs_Ú_šv®id_·¿m_‹¡_1 = { 1408 . £tup_£‰šgs = £‰šgs_s¥ , 1409 . g£nd_Ýcode = MGMT_OP_SET_HS , 1410 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1413 cÚ¡  g’”ic_d©a g£t_hs_Ú_šv®id_·¿m_‹¡_2 = { 1414 . £tup_£‰šgs = £‰šgs_s¥ , 1415 . g£nd_Ýcode = MGMT_OP_SET_HS , 1416 . g£nd_·¿m = £t_hs_šv®id_·¿m , 1417 . g£nd_Ën = ( £t_hs_šv®id_·¿m ), 1418 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1421 cÚ¡  g’”ic_d©a g£t_hs_Ú_šv®id_·¿m_‹¡_3 = { 1422 . £tup_£‰šgs = £‰šgs_s¥ , 1423 . g£nd_Ýcode = MGMT_OP_SET_HS , 1424 . g£nd_·¿m = £t_hs_g¬bage_·¿m , 1425 . g£nd_Ën = ( £t_hs_g¬bage_·¿m ), 1426 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1429 cÚ¡  g’”ic_d©a g£t_hs_Ú_šv®id_šdex_‹¡ = { 1430 . £tup_£‰šgs = £‰šgs_s¥ , 1431 . g£nd_šdex_nÚe = Œue , 1432 . g£nd_Ýcode = MGMT_OP_SET_HS , 1433 . g£nd_·¿m = £t_hs_Ú_·¿m , 1434 . g£nd_Ën = ( £t_hs_Ú_·¿m ), 1435 . gex³ù_¡©us = MGMT_STATUS_INVALID_INDEX , 1438  ušt16_t g£‰šgs_Ë [] = { MGMT_OP_SET_LE , 0 }; 1440 cÚ¡  g£t_Ë_Ú_·¿m [] = { 0x01 }; 1441 cÚ¡  g£t_Ë_šv®id_·¿m [] = { 0x02 }; 1442 cÚ¡  g£t_Ë_g¬bage_·¿m [] = { 0x01, 0x00 }; 1443 cÚ¡  g£t_Ë_£‰šgs_·¿m_1 [] = { 0x80, 0x02, 0x00, 0x00 }; 1444 cÚ¡  g£t_Ë_£‰šgs_·¿m_2 [] = { 0x81, 0x02, 0x00, 0x00 }; 1445 cÚ¡  g£t_Ë_Ú_wr™e_Ë_ho¡_·¿m [] = { 0x01, 0x00 }; 1447 cÚ¡  g’”ic_d©a g£t_Ë_Ú_sucûss_‹¡_1 = { 1448 . £nd_Ýcode = MGMT_OP_SET_LE , 1449 . g£nd_·¿m = £t_Ë_Ú_·¿m , 1450 . g£nd_Ën = ( £t_Ë_Ú_·¿m ), 1451 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1452 . gex³ù_·¿m = £t_Ë_£‰šgs_·¿m_1 , 1453 . gex³ù_Ën = ( £t_Ë_£‰šgs_·¿m_1 ), 1454 . gex³ù_£‰šgs_£t = MGMT_SETTING_LE , 1457 cÚ¡  g’”ic_d©a g£t_Ë_Ú_sucûss_‹¡_2 = { 1458 . £tup_£‰šgs = £‰šgs_pow”ed , 1459 . g£nd_Ýcode = MGMT_OP_SET_LE , 1460 . g£nd_·¿m = £t_Ë_Ú_·¿m , 1461 . g£nd_Ën = ( £t_Ë_Ú_·¿m ), 1462 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1463 . gex³ù_·¿m = £t_Ë_£‰šgs_·¿m_2 , 1464 . gex³ù_Ën = ( £t_Ë_£‰šgs_·¿m_2 ), 1465 . gex³ù_£‰šgs_£t = MGMT_SETTING_LE , 1466 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_LE_HOST_SUPPORTED , 1467 . gex³ù_hci_·¿m = £t_Ë_Ú_wr™e_Ë_ho¡_·¿m , 1468 . gex³ù_hci_Ën = ( £t_Ë_Ú_wr™e_Ë_ho¡_·¿m ), 1471 cÚ¡  g’”ic_d©a g£t_Ë_Ú_sucûss_‹¡_3 = { 1472 . £tup_£‰šgs = £‰šgs_Ë , 1473 . g£nd_Ýcode = MGMT_OP_SET_POWERED , 1474 . g£nd_·¿m = £t_pow”ed_Ú_·¿m , 1475 . g£nd_Ën = ( £t_pow”ed_Ú_·¿m ), 1476 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1477 . gex³ù_·¿m = £t_Ë_£‰šgs_·¿m_2 , 1478 . gex³ù_Ën = ( £t_Ë_£‰šgs_·¿m_2 ), 1479 . gex³ù_£‰šgs_£t = MGMT_SETTING_LE , 1480 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_LE_HOST_SUPPORTED , 1481 . gex³ù_hci_·¿m = £t_Ë_Ú_wr™e_Ë_ho¡_·¿m , 1482 . gex³ù_hci_Ën = ( £t_Ë_Ú_wr™e_Ë_ho¡_·¿m ), 1485 cÚ¡  g’”ic_d©a g£t_Ë_Ú_šv®id_·¿m_‹¡_1 = { 1486 . £nd_Ýcode = MGMT_OP_SET_LE , 1487 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1490 cÚ¡  g’”ic_d©a g£t_Ë_Ú_šv®id_·¿m_‹¡_2 = { 1491 . £nd_Ýcode = MGMT_OP_SET_LE , 1492 . g£nd_·¿m = £t_Ë_šv®id_·¿m , 1493 . g£nd_Ën = ( £t_Ë_šv®id_·¿m ), 1494 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1497 cÚ¡  g’”ic_d©a g£t_Ë_Ú_šv®id_·¿m_‹¡_3 = { 1498 . £nd_Ýcode = MGMT_OP_SET_LE , 1499 . g£nd_·¿m = £t_Ë_g¬bage_·¿m , 1500 . g£nd_Ën = ( £t_Ë_g¬bage_·¿m ), 1501 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1504 cÚ¡  g’”ic_d©a g£t_Ë_Ú_šv®id_šdex_‹¡ = { 1505 . £nd_šdex_nÚe = Œue , 1506 . g£nd_Ýcode = MGMT_OP_SET_LE , 1507 . g£nd_·¿m = £t_Ë_Ú_·¿m , 1508 . g£nd_Ën = ( £t_Ë_Ú_·¿m ), 1509 . gex³ù_¡©us = MGMT_STATUS_INVALID_INDEX , 1512  ušt16_t g£‰šgs_pow”ed_Ë [] = { MGMT_OP_SET_LE , 1513 MGMT_OP_SET_POWERED , 0 }; 1515 cÚ¡  g£t_adv_Ú_·¿m [] = { 0x01 }; 1516 cÚ¡  g£t_adv_£‰šgs_·¿m_1 [] = { 0x80, 0x06, 0x00, 0x00 }; 1517 cÚ¡  g£t_adv_£‰šgs_·¿m_2 [] = { 0x81, 0x06, 0x00, 0x00 }; 1518 cÚ¡  g£t_adv_Ú_£t_adv_’abË_·¿m [] = { 0x01 }; 1520 cÚ¡  g’”ic_d©a g£t_adv_Ú_sucûss_‹¡_1 = { 1521 . £tup_£‰šgs = £‰šgs_Ë , 1522 . g£nd_Ýcode = MGMT_OP_SET_ADVERTISING , 1523 . g£nd_·¿m = £t_adv_Ú_·¿m , 1524 . g£nd_Ën = ( £t_adv_Ú_·¿m ), 1525 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1526 . gex³ù_·¿m = £t_adv_£‰šgs_·¿m_1 , 1527 . gex³ù_Ën = ( £t_adv_£‰šgs_·¿m_1 ), 1528 . gex³ù_£‰šgs_£t = MGMT_SETTING_ADVERTISING , 1531 cÚ¡  g’”ic_d©a g£t_adv_Ú_sucûss_‹¡_2 = { 1532 . £tup_£‰šgs = £‰šgs_pow”ed_Ë , 1533 . g£nd_Ýcode = MGMT_OP_SET_ADVERTISING , 1534 . g£nd_·¿m = £t_adv_Ú_·¿m , 1535 . g£nd_Ën = ( £t_adv_Ú_·¿m ), 1536 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1537 . gex³ù_·¿m = £t_adv_£‰šgs_·¿m_2 , 1538 . gex³ù_Ën = ( £t_adv_£‰šgs_·¿m_2 ), 1539 . gex³ù_£‰šgs_£t = MGMT_SETTING_ADVERTISING , 1540 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_ADV_ENABLE , 1541 . gex³ù_hci_·¿m = £t_adv_Ú_£t_adv_’abË_·¿m , 1542 . gex³ù_hci_Ën = ( £t_adv_Ú_£t_adv_’abË_·¿m ), 1545 cÚ¡  g’”ic_d©a g£t_adv_Ú_»jeùed_‹¡_1 = { 1546 . £tup_£‰šgs = £‰šgs_pow”ed , 1547 . g£nd_Ýcode = MGMT_OP_SET_ADVERTISING , 1548 . g£nd_·¿m = £t_adv_Ú_·¿m , 1549 . g£nd_Ën = ( £t_adv_Ú_·¿m ), 1550 . gex³ù_¡©us = MGMT_STATUS_REJECTED , 1553 cÚ¡  g£t_b»dr_off_·¿m [] = { 0x00 }; 1554 cÚ¡  g£t_b»dr_Ú_·¿m [] = { 0x01 }; 1555 cÚ¡  g£t_b»dr_šv®id_·¿m [] = { 0x02 }; 1556 cÚ¡  g£t_b»dr_£‰šgs_·¿m_1 [] = { 0x00, 0x02, 0x00, 0x00 }; 1557 cÚ¡  g£t_b»dr_£‰šgs_·¿m_2 [] = { 0x80, 0x02, 0x00, 0x00 }; 1558 cÚ¡  g£t_b»dr_£‰šgs_·¿m_3 [] = { 0x81, 0x02, 0x00, 0x00 }; 1560 cÚ¡  g’”ic_d©a g£t_b»dr_off_sucûss_‹¡_1 = { 1561 . £tup_£‰šgs = £‰šgs_Ë , 1562 . g£nd_Ýcode = MGMT_OP_SET_BREDR , 1563 . g£nd_·¿m = £t_b»dr_off_·¿m , 1564 . g£nd_Ën = ( £t_b»dr_off_·¿m ), 1565 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1566 . gex³ù_·¿m = £t_b»dr_£‰šgs_·¿m_1 , 1567 . gex³ù_Ën = ( £t_b»dr_£‰šgs_·¿m_1 ), 1568 . gex³ù_£‰šgs_un£t = MGMT_SETTING_BREDR , 1571 cÚ¡  g’”ic_d©a g£t_b»dr_Ú_sucûss_‹¡_1 = { 1572 . £tup_£‰šgs = £‰šgs_Ë , 1573 . g£tup_nob»dr = Œue , 1574 . g£nd_Ýcode = MGMT_OP_SET_BREDR , 1575 . g£nd_·¿m = £t_b»dr_Ú_·¿m , 1576 . g£nd_Ën = ( £t_b»dr_Ú_·¿m ), 1577 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1578 . gex³ù_·¿m = £t_b»dr_£‰šgs_·¿m_2 , 1579 . gex³ù_Ën = ( £t_b»dr_£‰šgs_·¿m_2 ), 1580 . gex³ù_£‰šgs_£t = MGMT_SETTING_BREDR , 1583 cÚ¡  g’”ic_d©a g£t_b»dr_Ú_sucûss_‹¡_2 = { 1584 . £tup_£‰šgs = £‰šgs_pow”ed_Ë , 1585 . g£tup_nob»dr = Œue , 1586 . g£nd_Ýcode = MGMT_OP_SET_BREDR , 1587 . g£nd_·¿m = £t_b»dr_Ú_·¿m , 1588 . g£nd_Ën = ( £t_b»dr_Ú_·¿m ), 1589 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1590 . gex³ù_·¿m = £t_b»dr_£‰šgs_·¿m_3 , 1591 . gex³ù_Ën = ( £t_b»dr_£‰šgs_·¿m_3 ), 1592 . gex³ù_£‰šgs_£t = MGMT_SETTING_BREDR , 1595 cÚ¡  g’”ic_d©a g£t_b»dr_off_nÙsuµ_‹¡ = { 1596 . £nd_Ýcode = MGMT_OP_SET_BREDR , 1597 . g£nd_·¿m = £t_b»dr_off_·¿m , 1598 . g£nd_Ën = ( £t_b»dr_off_·¿m ), 1599 . gex³ù_¡©us = MGMT_STATUS_NOT_SUPPORTED , 1602 cÚ¡  g’”ic_d©a g£t_b»dr_off_çžu»_‹¡_1 = { 1603 . £tup_£‰šgs = £‰šgs_pow”ed_Ë , 1604 . g£nd_Ýcode = MGMT_OP_SET_BREDR , 1605 . g£nd_·¿m = £t_b»dr_off_·¿m , 1606 . g£nd_Ën = ( £t_b»dr_off_·¿m ), 1607 . gex³ù_¡©us = MGMT_STATUS_REJECTED , 1610 cÚ¡  g’”ic_d©a g£t_b»dr_off_çžu»_‹¡_2 = { 1611 . £tup_£‰šgs = £‰šgs_pow”ed , 1612 . g£nd_Ýcode = MGMT_OP_SET_BREDR , 1613 . g£nd_·¿m = £t_b»dr_off_·¿m , 1614 . g£nd_Ën = ( £t_b»dr_off_·¿m ), 1615 . gex³ù_¡©us = MGMT_STATUS_REJECTED , 1618 cÚ¡  g’”ic_d©a g£t_b»dr_off_çžu»_‹¡_3 = { 1619 . £tup_£‰šgs = £‰šgs_Ë , 1620 . g£nd_Ýcode = MGMT_OP_SET_BREDR , 1621 . g£nd_·¿m = £t_b»dr_šv®id_·¿m , 1622 . g£nd_Ën = ( £t_b»dr_šv®id_·¿m ), 1623 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1626 cÚ¡  g£t_loÿl_Çme_·¿m [260] = { 'T', 'e', 's', 't', ' ', 1628 cÚ¡  gwr™e_loÿl_Çme_hci [248] = { 'T', 'e', 's', 't', ' ', 1630 cÚ¡  gwr™e_eœ_loÿl_Çme_hci_1 [241] = { 0x00, 1634 cÚ¡  g’”ic_d©a g£t_loÿl_Çme_‹¡_1 = { 1635 . £nd_Ýcode = MGMT_OP_SET_LOCAL_NAME , 1636 . g£nd_·¿m = £t_loÿl_Çme_·¿m , 1637 . g£nd_Ën = ( £t_loÿl_Çme_·¿m ), 1638 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1639 . gex³ù_·¿m = £t_loÿl_Çme_·¿m , 1640 . gex³ù_Ën = ( £t_loÿl_Çme_·¿m ), 1641 . gex³ù_®t_ev = MGMT_EV_LOCAL_NAME_CHANGED , 1642 . gex³ù_®t_ev_·¿m = £t_loÿl_Çme_·¿m , 1643 . gex³ù_®t_ev_Ën = ( £t_loÿl_Çme_·¿m ), 1646 cÚ¡  g’”ic_d©a g£t_loÿl_Çme_‹¡_2 = { 1647 . £tup_£‰šgs = £‰šgs_pow”ed , 1648 . g£nd_Ýcode = MGMT_OP_SET_LOCAL_NAME , 1649 . g£nd_·¿m = £t_loÿl_Çme_·¿m , 1650 . g£nd_Ën = ( £t_loÿl_Çme_·¿m ), 1651 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1652 . gex³ù_·¿m = £t_loÿl_Çme_·¿m , 1653 . gex³ù_Ën = ( £t_loÿl_Çme_·¿m ), 1654 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_LOCAL_NAME , 1655 . gex³ù_hci_·¿m = wr™e_loÿl_Çme_hci , 1656 . gex³ù_hci_Ën = ( wr™e_loÿl_Çme_hci ), 1657 . gex³ù_®t_ev = MGMT_EV_LOCAL_NAME_CHANGED , 1658 . gex³ù_®t_ev_·¿m = £t_loÿl_Çme_·¿m , 1659 . gex³ù_®t_ev_Ën = ( £t_loÿl_Çme_·¿m ), 1662 cÚ¡  g’”ic_d©a g£t_loÿl_Çme_‹¡_3 = { 1663 . £tup_£‰šgs = £‰šgs_pow”ed_s¥ , 1664 . g£nd_Ýcode = MGMT_OP_SET_LOCAL_NAME , 1665 . g£nd_·¿m = £t_loÿl_Çme_·¿m , 1666 . g£nd_Ën = ( £t_loÿl_Çme_·¿m ), 1667 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1668 . gex³ù_·¿m = £t_loÿl_Çme_·¿m , 1669 . gex³ù_Ën = ( £t_loÿl_Çme_·¿m ), 1670 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE , 1671 . gex³ù_hci_·¿m = wr™e_eœ_loÿl_Çme_hci_1 , 1672 . gex³ù_hci_Ën = ( wr™e_eœ_loÿl_Çme_hci_1 ), 1673 . gex³ù_®t_ev = MGMT_EV_LOCAL_NAME_CHANGED , 1674 . gex³ù_®t_ev_·¿m = £t_loÿl_Çme_·¿m , 1675 . gex³ù_®t_ev_Ën = ( £t_loÿl_Çme_·¿m ), 1678 cÚ¡  g¡¬t_discov”y_šv®id_·¿m [] = { 0x00 }; 1679 cÚ¡  g¡¬t_discov”y_b»dr_·¿m [] = { 0x01 }; 1680 cÚ¡  g¡¬t_discov”y_Ë_·¿m [] = { 0x06 }; 1681 cÚ¡  g¡¬t_discov”y_b»d¾e_·¿m [] = { 0x07 }; 1682 cÚ¡  g¡¬t_discov”y_v®id_hci [] = { 0x01, 0x01 }; 1683 cÚ¡  g¡¬t_discov”y_evt [] = { 0x07, 0x01 }; 1684 cÚ¡  g¡¬t_discov”y_Ë_evt [] = { 0x06, 0x01 }; 1686 cÚ¡  g’”ic_d©a g¡¬t_discov”y_nÙ_pow”ed_‹¡_1 = { 1687 . £nd_Ýcode = MGMT_OP_START_DISCOVERY , 1688 . g£nd_·¿m = ¡¬t_discov”y_b»dr_·¿m , 1689 . g£nd_Ën = ( ¡¬t_discov”y_b»dr_·¿m ), 1690 . gex³ù_¡©us = MGMT_STATUS_NOT_POWERED , 1691 . gex³ù_·¿m = ¡¬t_discov”y_b»dr_·¿m , 1692 . gex³ù_Ën = ( ¡¬t_discov”y_b»dr_·¿m ), 1695 cÚ¡  g’”ic_d©a g¡¬t_discov”y_šv®id_·¿m_‹¡_1 = { 1696 . £tup_£‰šgs = £‰šgs_pow”ed , 1697 . g£nd_Ýcode = MGMT_OP_START_DISCOVERY , 1698 . g£nd_·¿m = ¡¬t_discov”y_šv®id_·¿m , 1699 . g£nd_Ën = ( ¡¬t_discov”y_šv®id_·¿m ), 1700 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1701 . gex³ù_·¿m = ¡¬t_discov”y_šv®id_·¿m , 1702 . gex³ù_Ën = ( ¡¬t_discov”y_šv®id_·¿m ), 1705 cÚ¡  g’”ic_d©a g¡¬t_discov”y_nÙ_suµÜ‹d_‹¡_1 = { 1706 . £tup_£‰šgs = £‰šgs_pow”ed , 1707 . g£nd_Ýcode = MGMT_OP_START_DISCOVERY , 1708 . g£nd_·¿m = ¡¬t_discov”y_Ë_·¿m , 1709 . g£nd_Ën = ( ¡¬t_discov”y_Ë_·¿m ), 1710 . gex³ù_¡©us = MGMT_STATUS_REJECTED , 1711 . gex³ù_·¿m = ¡¬t_discov”y_Ë_·¿m , 1712 . gex³ù_Ën = ( ¡¬t_discov”y_Ë_·¿m ), 1715 cÚ¡  g’”ic_d©a g¡¬t_discov”y_v®id_·¿m_‹¡_1 = { 1716 . £tup_£‰šgs = £‰šgs_pow”ed_Ë , 1717 . g£nd_Ýcode = MGMT_OP_START_DISCOVERY , 1718 . g£nd_·¿m = ¡¬t_discov”y_b»d¾e_·¿m , 1719 . g£nd_Ën = ( ¡¬t_discov”y_b»d¾e_·¿m ), 1720 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1721 . gex³ù_·¿m = ¡¬t_discov”y_b»d¾e_·¿m , 1722 . gex³ù_Ën = ( ¡¬t_discov”y_b»d¾e_·¿m ), 1723 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_SCAN_ENABLE , 1724 . gex³ù_hci_·¿m = ¡¬t_discov”y_v®id_hci , 1725 . gex³ù_hci_Ën = ( ¡¬t_discov”y_v®id_hci ), 1726 . gex³ù_®t_ev = MGMT_EV_DISCOVERING , 1727 . gex³ù_®t_ev_·¿m = ¡¬t_discov”y_evt , 1728 . gex³ù_®t_ev_Ën = ( ¡¬t_discov”y_evt ), 1731 cÚ¡  g’”ic_d©a g¡¬t_discov”y_v®id_·¿m_‹¡_2 = { 1732 . £tup_£‰šgs = £‰šgs_pow”ed , 1733 . g£nd_Ýcode = MGMT_OP_START_DISCOVERY , 1734 . g£nd_·¿m = ¡¬t_discov”y_Ë_·¿m , 1735 . g£nd_Ën = ( ¡¬t_discov”y_Ë_·¿m ), 1736 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1737 . gex³ù_·¿m = ¡¬t_discov”y_Ë_·¿m , 1738 . gex³ù_Ën = ( ¡¬t_discov”y_Ë_·¿m ), 1739 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_SCAN_ENABLE , 1740 . gex³ù_hci_·¿m = ¡¬t_discov”y_v®id_hci , 1741 . gex³ù_hci_Ën = ( ¡¬t_discov”y_v®id_hci ), 1742 . gex³ù_®t_ev = MGMT_EV_DISCOVERING , 1743 . gex³ù_®t_ev_·¿m = ¡¬t_discov”y_Ë_evt , 1744 . gex³ù_®t_ev_Ën = ( ¡¬t_discov”y_Ë_evt ), 1747 cÚ¡  g’”ic_d©a g¡¬t_discov”y_v®id_·¿m_pow”_off_1 = { 1748 . £tup_£‰šgs = £‰šgs_pow”ed_Ë , 1749 . g£nd_Ýcode = MGMT_OP_START_DISCOVERY , 1750 . g£nd_·¿m = ¡¬t_discov”y_b»d¾e_·¿m , 1751 . g£nd_Ën = ( ¡¬t_discov”y_b»d¾e_·¿m ), 1752 . gex³ù_¡©us = MGMT_STATUS_NOT_POWERED , 1753 . gfÜû_pow”_off = Œue , 1754 . gex³ù_·¿m = ¡¬t_discov”y_b»d¾e_·¿m , 1755 . gex³ù_Ën = ( ¡¬t_discov”y_b»d¾e_·¿m ), 1758 cÚ¡  g¡Ý_discov”y_b»d¾e_·¿m [] = { 0x07 }; 1759 cÚ¡  g¡Ý_discov”y_b»d¾e_šv®id_·¿m [] = { 0x06 }; 1760 cÚ¡  g¡Ý_discov”y_v®id_hci [] = { 0x00, 0x00 }; 1761 cÚ¡  g¡Ý_discov”y_evt [] = { 0x07, 0x00 }; 1762 cÚ¡  g¡Ý_discov”y_b»dr_·¿m [] = { 0x01 }; 1763 cÚ¡  g¡Ý_discov”y_b»dr_discov”šg [] = { 0x01, 0x00 }; 1764 cÚ¡  g¡Ý_discov”y_šq_·¿m [] = { 0x33, 0x8b, 0x9e, 0x08, 0x00 }; 1766 cÚ¡  g’”ic_d©a g¡Ý_discov”y_sucûss_‹¡_1 = { 1767 . £tup_£‰šgs = £‰šgs_pow”ed_Ë , 1768 . g£tup_£nd_Ýcode = MGMT_OP_START_DISCOVERY , 1769 . g£tup_£nd_·¿m = ¡¬t_discov”y_b»d¾e_·¿m , 1770 . g£tup_£nd_Ën = ( ¡¬t_discov”y_b»d¾e_·¿m ), 1771 . g£nd_Ýcode = MGMT_OP_STOP_DISCOVERY , 1772 . g£nd_·¿m = ¡Ý_discov”y_b»d¾e_·¿m , 1773 . g£nd_Ën = ( ¡Ý_discov”y_b»d¾e_·¿m ), 1774 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1775 . gex³ù_·¿m = ¡Ý_discov”y_b»d¾e_·¿m , 1776 . gex³ù_Ën = ( ¡Ý_discov”y_b»d¾e_·¿m ), 1777 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_SCAN_ENABLE , 1778 . gex³ù_hci_·¿m = ¡Ý_discov”y_v®id_hci , 1779 . gex³ù_hci_Ën = ( ¡Ý_discov”y_v®id_hci ), 1780 . gex³ù_®t_ev = MGMT_EV_DISCOVERING , 1781 . gex³ù_®t_ev_·¿m = ¡Ý_discov”y_evt , 1782 . gex³ù_®t_ev_Ën = ( ¡Ý_discov”y_evt ), 1785 cÚ¡  g’”ic_d©a g¡Ý_discov”y_b»dr_sucûss_‹¡_1 = { 1786 . £tup_£‰šgs = £‰šgs_pow”ed , 1787 . g£tup_£nd_Ýcode = MGMT_OP_START_DISCOVERY , 1788 . g£tup_£nd_·¿m = ¡¬t_discov”y_b»dr_·¿m , 1789 . g£tup_£nd_Ën = ( ¡¬t_discov”y_b»dr_·¿m ), 1790 . g£nd_Ýcode = MGMT_OP_STOP_DISCOVERY , 1791 . g£nd_·¿m = ¡Ý_discov”y_b»dr_·¿m , 1792 . g£nd_Ën = ( ¡Ý_discov”y_b»dr_·¿m ), 1793 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1794 . gex³ù_·¿m = ¡Ý_discov”y_b»dr_·¿m , 1795 . gex³ù_Ën = ( ¡Ý_discov”y_b»dr_·¿m ), 1796 . gex³ù_hci_commªd = BT_HCI_CMD_INQUIRY_CANCEL , 1797 . gex³ù_®t_ev = MGMT_EV_DISCOVERING , 1798 . gex³ù_®t_ev_·¿m = ¡Ý_discov”y_b»dr_discov”šg , 1799 . gex³ù_®t_ev_Ën = ( ¡Ý_discov”y_b»dr_discov”šg ), 1802 cÚ¡  g’”ic_d©a g¡Ý_discov”y_»jeùed_‹¡_1 = { 1803 . £tup_£‰šgs = £‰šgs_pow”ed_Ë , 1804 . g£nd_Ýcode = MGMT_OP_STOP_DISCOVERY , 1805 . g£nd_·¿m = ¡Ý_discov”y_b»d¾e_·¿m , 1806 . g£nd_Ën = ( ¡Ý_discov”y_b»d¾e_·¿m ), 1807 . gex³ù_¡©us = MGMT_STATUS_REJECTED , 1808 . gex³ù_·¿m = ¡Ý_discov”y_b»d¾e_·¿m , 1809 . gex³ù_Ën = ( ¡Ý_discov”y_b»d¾e_·¿m ), 1812 cÚ¡  g’”ic_d©a g¡Ý_discov”y_šv®id_·¿m_‹¡_1 = { 1813 . £tup_£‰šgs = £‰šgs_pow”ed_Ë , 1814 . g£tup_£nd_Ýcode = MGMT_OP_START_DISCOVERY , 1815 . g£tup_£nd_·¿m = ¡¬t_discov”y_b»d¾e_·¿m , 1816 . g£tup_£nd_Ën = ( ¡¬t_discov”y_b»d¾e_·¿m ), 1817 . g£nd_Ýcode = MGMT_OP_STOP_DISCOVERY , 1818 . g£nd_·¿m = ¡Ý_discov”y_b»d¾e_šv®id_·¿m , 1819 . g£nd_Ën = ( ¡Ý_discov”y_b»d¾e_šv®id_·¿m ), 1820 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1821 . gex³ù_·¿m = ¡Ý_discov”y_b»d¾e_šv®id_·¿m , 1822 . gex³ù_Ën = ( ¡Ý_discov”y_b»d¾e_šv®id_·¿m ), 1825 cÚ¡  g¡¬t_£rviû_discov”y_šv®id_·¿m [] = { 0x00, 0x00, 0x00, 0x00 }; 1826 cÚ¡  g¡¬t_£rviû_discov”y_šv®id_»¥ [] = { 0x00 }; 1827 cÚ¡  g¡¬t_£rviû_discov”y_b»dr_·¿m [] = { 0x01, 0x00, 0x00, 0x00}; 1828 cÚ¡  g¡¬t_£rviû_discov”y_b»dr_»¥ [] = { 0x01 }; 1829 cÚ¡  g¡¬t_£rviû_discov”y_Ë_·¿m [] = { 0x06, 0x00, 0x01, 0x00, 1832 cÚ¡  g¡¬t_£rviû_discov”y_Ë_»¥ [] = { 0x06 }; 1833 cÚ¡  g¡¬t_£rviû_discov”y_b»d¾e_·¿m [] = { 0x07, 0x00, 0x01, 0x00, 1836 cÚ¡  g¡¬t_£rviû_discov”y_b»d¾e_»¥ [] = { 0x07 }; 1837 cÚ¡  g¡¬t_£rviû_discov”y_v®id_hci [] = { 0x01, 0x01 }; 1838 cÚ¡  g¡¬t_£rviû_discov”y_evt [] = { 0x07, 0x01 }; 1839 cÚ¡  g¡¬t_£rviû_discov”y_Ë_evt [] = { 0x06, 0x01 }; 1841 cÚ¡  g’”ic_d©a g¡¬t_£rviû_discov”y_nÙ_pow”ed_‹¡_1 = { 1842 . £nd_Ýcode = MGMT_OP_START_SERVICE_DISCOVERY , 1843 . g£nd_·¿m = ¡¬t_£rviû_discov”y_b»dr_·¿m , 1844 . g£nd_Ën = ( ¡¬t_£rviû_discov”y_b»dr_·¿m ), 1845 . gex³ù_¡©us = MGMT_STATUS_NOT_POWERED , 1846 . gex³ù_·¿m = ¡¬t_£rviû_discov”y_b»dr_»¥ , 1847 . gex³ù_Ën = ( ¡¬t_£rviû_discov”y_b»dr_»¥ ), 1850 cÚ¡  g’”ic_d©a g¡¬t_£rviû_discov”y_šv®id_·¿m_‹¡_1 = { 1851 . £tup_£‰šgs = £‰šgs_pow”ed , 1852 . g£nd_Ýcode = MGMT_OP_START_SERVICE_DISCOVERY , 1853 . g£nd_·¿m = ¡¬t_£rviû_discov”y_šv®id_·¿m , 1854 . g£nd_Ën = ( ¡¬t_£rviû_discov”y_šv®id_·¿m ), 1855 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1856 . gex³ù_·¿m = ¡¬t_£rviû_discov”y_šv®id_»¥ , 1857 . gex³ù_Ën = ( ¡¬t_£rviû_discov”y_šv®id_»¥ ), 1860 cÚ¡  g’”ic_d©a g¡¬t_£rviû_discov”y_nÙ_suµÜ‹d_‹¡_1 = { 1861 . £tup_£‰šgs = £‰šgs_pow”ed , 1862 . g£nd_Ýcode = MGMT_OP_START_SERVICE_DISCOVERY , 1863 . g£nd_·¿m = ¡¬t_£rviû_discov”y_Ë_·¿m , 1864 . g£nd_Ën = ( ¡¬t_£rviû_discov”y_Ë_·¿m ), 1865 . gex³ù_¡©us = MGMT_STATUS_REJECTED , 1866 . gex³ù_·¿m = ¡¬t_£rviû_discov”y_Ë_»¥ , 1867 . gex³ù_Ën = ( ¡¬t_£rviû_discov”y_Ë_»¥ ), 1870 cÚ¡  g’”ic_d©a g¡¬t_£rviû_discov”y_v®id_·¿m_‹¡_1 = { 1871 . £tup_£‰šgs = £‰šgs_pow”ed_Ë , 1872 . g£nd_Ýcode = MGMT_OP_START_SERVICE_DISCOVERY , 1873 . g£nd_·¿m = ¡¬t_£rviû_discov”y_b»d¾e_·¿m , 1874 . g£nd_Ën = ( ¡¬t_£rviû_discov”y_b»d¾e_·¿m ), 1875 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1876 . gex³ù_·¿m = ¡¬t_£rviû_discov”y_b»d¾e_»¥ , 1877 . gex³ù_Ën = ( ¡¬t_£rviû_discov”y_b»d¾e_»¥ ), 1878 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_SCAN_ENABLE , 1879 . gex³ù_hci_·¿m = ¡¬t_£rviû_discov”y_v®id_hci , 1880 . gex³ù_hci_Ën = ( ¡¬t_£rviû_discov”y_v®id_hci ), 1881 . gex³ù_®t_ev = MGMT_EV_DISCOVERING , 1882 . gex³ù_®t_ev_·¿m = ¡¬t_£rviû_discov”y_evt , 1883 . gex³ù_®t_ev_Ën = ( ¡¬t_£rviû_discov”y_evt ), 1886 cÚ¡  g’”ic_d©a g¡¬t_£rviû_discov”y_v®id_·¿m_‹¡_2 = { 1887 . £tup_£‰šgs = £‰šgs_pow”ed , 1888 . g£nd_Ýcode = MGMT_OP_START_SERVICE_DISCOVERY , 1889 . g£nd_·¿m = ¡¬t_£rviû_discov”y_Ë_·¿m , 1890 . g£nd_Ën = ( ¡¬t_£rviû_discov”y_Ë_·¿m ), 1891 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1892 . gex³ù_·¿m = ¡¬t_£rviû_discov”y_Ë_»¥ , 1893 . gex³ù_Ën = ( ¡¬t_£rviû_discov”y_Ë_»¥ ), 1894 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_SCAN_ENABLE , 1895 . gex³ù_hci_·¿m = ¡¬t_£rviû_discov”y_v®id_hci , 1896 . gex³ù_hci_Ën = ( ¡¬t_£rviû_discov”y_v®id_hci ), 1897 . gex³ù_®t_ev = MGMT_EV_DISCOVERING , 1898 . gex³ù_®t_ev_·¿m = ¡¬t_£rviû_discov”y_Ë_evt , 1899 . gex³ù_®t_ev_Ën = ( ¡¬t_£rviû_discov”y_Ë_evt ), 1902 cÚ¡  g£t_dev_þass_v®id_·¿m [] = { 0x01, 0x0c }; 1903 cÚ¡  g£t_dev_þass_z”o_r¥ [] = { 0x00, 0x00, 0x00 }; 1904 cÚ¡  g£t_dev_þass_v®id_r¥ [] = { 0x0c, 0x01, 0x00 }; 1905 cÚ¡  g£t_dev_þass_v®id_hci [] = { 0x0c, 0x01, 0x00 }; 1906 cÚ¡  g£t_dev_þass_šv®id_·¿m [] = { 0x01, 0x01 }; 1908 cÚ¡  g’”ic_d©a g£t_dev_þass_v®id_·¿m_‹¡_1 = { 1909 . £nd_Ýcode = MGMT_OP_SET_DEV_CLASS , 1910 . g£nd_·¿m = £t_dev_þass_v®id_·¿m , 1911 . g£nd_Ën = ( £t_dev_þass_v®id_·¿m ), 1912 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1913 . gex³ù_·¿m = £t_dev_þass_z”o_r¥ , 1914 . gex³ù_Ën = ( £t_dev_þass_z”o_r¥ ), 1917 cÚ¡  g’”ic_d©a g£t_dev_þass_v®id_·¿m_‹¡_2 = { 1918 . £tup_£‰šgs = £‰šgs_pow”ed , 1919 . g£nd_Ýcode = MGMT_OP_SET_DEV_CLASS , 1920 . g£nd_·¿m = £t_dev_þass_v®id_·¿m , 1921 . g£nd_Ën = ( £t_dev_þass_v®id_·¿m ), 1922 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 1923 . gex³ù_·¿m = £t_dev_þass_v®id_r¥ , 1924 . gex³ù_Ën = ( £t_dev_þass_v®id_r¥ ), 1925 . gex³ù_®t_ev = MGMT_EV_CLASS_OF_DEV_CHANGED , 1926 . gex³ù_®t_ev_·¿m = £t_dev_þass_v®id_r¥ , 1927 . gex³ù_®t_ev_Ën = ( £t_dev_þass_v®id_r¥ ), 1928 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_CLASS_OF_DEV , 1929 . gex³ù_hci_·¿m = £t_dev_þass_v®id_hci , 1930 . gex³ù_hci_Ën = ( £t_dev_þass_v®id_hci ), 1933 cÚ¡  g’”ic_d©a g£t_dev_þass_šv®id_·¿m_‹¡_1 = { 1934 . £nd_Ýcode = MGMT_OP_SET_DEV_CLASS , 1935 . g£nd_·¿m = £t_dev_þass_šv®id_·¿m , 1936 . g£nd_Ën = ( £t_dev_þass_šv®id_·¿m ), 1937 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 1940 cÚ¡  gadd_¥p_uuid_·¿m [] = { 1944 cÚ¡  gadd_dun_uuid_·¿m [] = { 1948 cÚ¡  gadd_sync_uuid_·¿m [] = { 1952 cÚ¡  gadd_Ýp_uuid_·¿m [] = { 1956 cÚ¡  gwr™e_eœ_uuid16_hci [241] = { 0x00, 1958 cÚ¡  gwr™e_eœ_muÉi_uuid16_hci_1 [241] = { 0x00, 1961 cÚ¡  gwr™e_eœ_muÉi_uuid16_hci_2 [241] = { 0x00, 1992 cÚ¡  gadd_uuid32_·¿m_1 [] = { 1996 cÚ¡  gadd_uuid32_·¿m_2 [] = { 2000 cÚ¡  gadd_uuid32_·¿m_3 [] = { 2004 cÚ¡  gadd_uuid32_·¿m_4 [] = { 2008 cÚ¡  gwr™e_eœ_uuid32_hci [241] = { 0x00, 2011 cÚ¡  gwr™e_eœ_uuid32_muÉi_hci [241] = { 0x00, 2015 cÚ¡  gwr™e_eœ_uuid32_muÉi_hci_2 [] = { 0x00, 2046 cÚ¡  gadd_uuid128_·¿m_1 [] = { 2050 cÚ¡  gadd_uuid128_·¿m_2 [] = { 2054 cÚ¡  gwr™e_eœ_uuid128_hci [241] = { 0x00, 2058 cÚ¡  gwr™e_eœ_uuid128_muÉi_hci [241] = { 0x00, 2064 cÚ¡  gwr™e_eœ_uuid128_muÉi_hci_2 [] = { 0x00, 2095 cÚ¡  gwr™e_eœ_uuid_mix_hci [241] = { 0x00, 2104 cÚ¡  g’”ic_d©a gadd_uuid16_‹¡_1 = { 2105 . £tup_£‰šgs = £‰šgs_pow”ed_s¥ , 2106 . g£nd_Ýcode = MGMT_OP_ADD_UUID , 2107 . g£nd_·¿m = add_¥p_uuid_·¿m , 2108 . g£nd_Ën = ( add_¥p_uuid_·¿m ), 2109 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2110 . gex³ù_·¿m = £t_dev_þass_z”o_r¥ , 2111 . gex³ù_Ën = ( £t_dev_þass_z”o_r¥ ), 2112 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE , 2113 . gex³ù_hci_·¿m = wr™e_eœ_uuid16_hci , 2114 . gex³ù_hci_Ën = ( wr™e_eœ_uuid16_hci ), 2117 cÚ¡  g’”ic_d©a gadd_muÉi_uuid16_‹¡_1 = { 2118 . £nd_Ýcode = MGMT_OP_ADD_UUID , 2119 . g£nd_·¿m = add_Ýp_uuid_·¿m , 2120 . g£nd_Ën = ( add_Ýp_uuid_·¿m ), 2121 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2122 . gex³ù_·¿m = £t_dev_þass_z”o_r¥ , 2123 . gex³ù_Ën = ( £t_dev_þass_z”o_r¥ ), 2124 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE , 2125 . gex³ù_hci_·¿m = wr™e_eœ_muÉi_uuid16_hci_1 , 2126 . gex³ù_hci_Ën = ( wr™e_eœ_muÉi_uuid16_hci_1 ), 2129 cÚ¡  g’”ic_d©a gadd_muÉi_uuid16_‹¡_2 = { 2130 . £nd_Ýcode = MGMT_OP_ADD_UUID , 2131 . g£nd_·¿m = add_Ýp_uuid_·¿m , 2132 . g£nd_Ën = ( add_Ýp_uuid_·¿m ), 2133 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2134 . gex³ù_·¿m = £t_dev_þass_z”o_r¥ , 2135 . gex³ù_Ën = ( £t_dev_þass_z”o_r¥ ), 2136 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE , 2137 . gex³ù_hci_·¿m = wr™e_eœ_muÉi_uuid16_hci_2 , 2138 . gex³ù_hci_Ën = ( wr™e_eœ_muÉi_uuid16_hci_2 ), 2141 cÚ¡  g’”ic_d©a gadd_uuid32_‹¡_1 = { 2142 . £tup_£‰šgs = £‰šgs_pow”ed_s¥ , 2143 . g£nd_Ýcode = MGMT_OP_ADD_UUID , 2144 . g£nd_·¿m = add_uuid32_·¿m_1 , 2145 . g£nd_Ën = ( add_uuid32_·¿m_1 ), 2146 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2147 . gex³ù_·¿m = £t_dev_þass_z”o_r¥ , 2148 . gex³ù_Ën = ( £t_dev_þass_z”o_r¥ ), 2149 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE , 2150 . gex³ù_hci_·¿m = wr™e_eœ_uuid32_hci , 2151 . gex³ù_hci_Ën = ( wr™e_eœ_uuid32_hci ), 2154 cÚ¡  g’”ic_d©a gadd_uuid32_muÉi_‹¡_1 = { 2155 . £nd_Ýcode = MGMT_OP_ADD_UUID , 2156 . g£nd_·¿m = add_uuid32_·¿m_4 , 2157 . g£nd_Ën = ( add_uuid32_·¿m_4 ), 2158 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2159 . gex³ù_·¿m = £t_dev_þass_z”o_r¥ , 2160 . gex³ù_Ën = ( £t_dev_þass_z”o_r¥ ), 2161 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE , 2162 . gex³ù_hci_·¿m = wr™e_eœ_uuid32_muÉi_hci , 2163 . gex³ù_hci_Ën = ( wr™e_eœ_uuid32_muÉi_hci ), 2166 cÚ¡  g’”ic_d©a gadd_uuid32_muÉi_‹¡_2 = { 2167 . £nd_Ýcode = MGMT_OP_ADD_UUID , 2168 . g£nd_·¿m = add_uuid32_·¿m_4 , 2169 . g£nd_Ën = ( add_uuid32_·¿m_4 ), 2170 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2171 . gex³ù_·¿m = £t_dev_þass_z”o_r¥ , 2172 . gex³ù_Ën = ( £t_dev_þass_z”o_r¥ ), 2173 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE , 2174 . gex³ù_hci_·¿m = wr™e_eœ_uuid32_muÉi_hci_2 , 2175 . gex³ù_hci_Ën = ( wr™e_eœ_uuid32_muÉi_hci_2 ), 2178 cÚ¡  g’”ic_d©a gadd_uuid128_‹¡_1 = { 2179 . £tup_£‰šgs = £‰šgs_pow”ed_s¥ , 2180 . g£nd_Ýcode = MGMT_OP_ADD_UUID , 2181 . g£nd_·¿m = add_uuid128_·¿m_1 , 2182 . g£nd_Ën = ( add_uuid128_·¿m_1 ), 2183 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2184 . gex³ù_·¿m = £t_dev_þass_z”o_r¥ , 2185 . gex³ù_Ën = ( £t_dev_þass_z”o_r¥ ), 2186 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE , 2187 . gex³ù_hci_·¿m = wr™e_eœ_uuid128_hci , 2188 . gex³ù_hci_Ën = ( wr™e_eœ_uuid128_hci ), 2191 cÚ¡  g’”ic_d©a gadd_uuid128_muÉi_‹¡_1 = { 2192 . £nd_Ýcode = MGMT_OP_ADD_UUID , 2193 . g£nd_·¿m = add_uuid128_·¿m_2 , 2194 . g£nd_Ën = ( add_uuid32_·¿m_2 ), 2195 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2196 . gex³ù_·¿m = £t_dev_þass_z”o_r¥ , 2197 . gex³ù_Ën = ( £t_dev_þass_z”o_r¥ ), 2198 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE , 2199 . gex³ù_hci_·¿m = wr™e_eœ_uuid128_muÉi_hci , 2200 . gex³ù_hci_Ën = ( wr™e_eœ_uuid128_muÉi_hci ), 2203 cÚ¡  g’”ic_d©a gadd_uuid128_muÉi_‹¡_2 = { 2204 . £nd_Ýcode = MGMT_OP_ADD_UUID , 2205 . g£nd_·¿m = add_uuid128_·¿m_2 , 2206 . g£nd_Ën = ( add_uuid128_·¿m_2 ), 2207 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2208 . gex³ù_·¿m = £t_dev_þass_z”o_r¥ , 2209 . gex³ù_Ën = ( £t_dev_þass_z”o_r¥ ), 2210 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE , 2211 . gex³ù_hci_·¿m = wr™e_eœ_uuid128_muÉi_hci_2 , 2212 . gex³ù_hci_Ën = ( wr™e_eœ_uuid128_muÉi_hci_2 ), 2215 cÚ¡  g’”ic_d©a gadd_uuid_mix_‹¡_1 = { 2216 . £nd_Ýcode = MGMT_OP_ADD_UUID , 2217 . g£nd_·¿m = add_uuid128_·¿m_2 , 2218 . g£nd_Ën = ( add_uuid128_·¿m_2 ), 2219 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2220 . gex³ù_·¿m = £t_dev_þass_z”o_r¥ , 2221 . gex³ù_Ën = ( £t_dev_þass_z”o_r¥ ), 2222 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE , 2223 . gex³ù_hci_·¿m = wr™e_eœ_uuid_mix_hci , 2224 . gex³ù_hci_Ën = ( wr™e_eœ_uuid_mix_hci ), 2227 cÚ¡  glßd_lšk_keys_v®id_·¿m_1 [] = { 0x00, 0x00, 0x00 }; 2228 cÚ¡  glßd_lšk_keys_v®id_·¿m_2 [] = { 0x01, 0x00, 0x00 }; 2229 cÚ¡  glßd_lšk_keys_šv®id_·¿m_1 [] = { 0x02, 0x00, 0x00 }; 2230 cÚ¡  glßd_lšk_keys_šv®id_·¿m_2 [] = { 0x00, 0x01, 0x00 }; 2232 cÚ¡  glßd_lšk_keys_šv®id_·¿m_3 [] = { 0x00, 0x01, 0x00, 2241 cÚ¡  g’”ic_d©a glßd_lšk_keys_sucûss_‹¡_1 = { 2242 . £nd_Ýcode = MGMT_OP_LOAD_LINK_KEYS , 2243 . g£nd_·¿m = lßd_lšk_keys_v®id_·¿m_1 , 2244 . g£nd_Ën = ( lßd_lšk_keys_v®id_·¿m_1 ), 2245 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2248 cÚ¡  g’”ic_d©a glßd_lšk_keys_sucûss_‹¡_2 = { 2249 . £nd_Ýcode = MGMT_OP_LOAD_LINK_KEYS , 2250 . g£nd_·¿m = lßd_lšk_keys_v®id_·¿m_2 , 2251 . g£nd_Ën = ( lßd_lšk_keys_v®id_·¿m_2 ), 2252 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2255 cÚ¡  g’”ic_d©a glßd_lšk_keys_šv®id_·¿ms_‹¡_1 = { 2256 . £nd_Ýcode = MGMT_OP_LOAD_LINK_KEYS , 2257 . g£nd_·¿m = lßd_lšk_keys_šv®id_·¿m_1 , 2258 . g£nd_Ën = ( lßd_lšk_keys_šv®id_·¿m_1 ), 2259 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 2262 cÚ¡  g’”ic_d©a glßd_lšk_keys_šv®id_·¿ms_‹¡_2 = { 2263 . £nd_Ýcode = MGMT_OP_LOAD_LINK_KEYS , 2264 . g£nd_·¿m = lßd_lšk_keys_šv®id_·¿m_2 , 2265 . g£nd_Ën = ( lßd_lšk_keys_šv®id_·¿m_2 ), 2266 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 2269 cÚ¡  g’”ic_d©a glßd_lšk_keys_šv®id_·¿ms_‹¡_3 = { 2270 . £nd_Ýcode = MGMT_OP_LOAD_LINK_KEYS , 2271 . g£nd_·¿m = lßd_lšk_keys_šv®id_·¿m_3 , 2272 . g£nd_Ën = ( lßd_lšk_keys_šv®id_·¿m_3 ), 2273 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 2276 cÚ¡  glßd_Éks_v®id_·¿m_1 [] = { 0x00, 0x00 }; 2278 cÚ¡  glßd_Éks_šv®id_·¿m_1 [] = { 0x01, 0x00 }; 2280 cÚ¡  glßd_Éks_šv®id_·¿m_2 [] = { 2293 cÚ¡  glßd_Éks_šv®id_·¿m_3 [] = { 2306 cÚ¡  g’”ic_d©a glßd_Éks_sucûss_‹¡_1 = { 2307 . £nd_Ýcode = MGMT_OP_LOAD_LONG_TERM_KEYS , 2308 . g£nd_·¿m = lßd_Éks_v®id_·¿m_1 , 2309 . g£nd_Ën = ( lßd_Éks_v®id_·¿m_1 ), 2310 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2313 cÚ¡  g’”ic_d©a glßd_Éks_šv®id_·¿ms_‹¡_1 = { 2314 . £nd_Ýcode = MGMT_OP_LOAD_LONG_TERM_KEYS , 2315 . g£nd_·¿m = lßd_Éks_šv®id_·¿m_1 , 2316 . g£nd_Ën = ( lßd_Éks_šv®id_·¿m_1 ), 2317 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 2320 cÚ¡  g’”ic_d©a glßd_Éks_šv®id_·¿ms_‹¡_2 = { 2321 . £nd_Ýcode = MGMT_OP_LOAD_LONG_TERM_KEYS , 2322 . g£nd_·¿m = lßd_Éks_šv®id_·¿m_2 , 2323 . g£nd_Ën = ( lßd_Éks_šv®id_·¿m_2 ), 2324 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 2327 cÚ¡  g’”ic_d©a glßd_Éks_šv®id_·¿ms_‹¡_3 = { 2328 . £nd_Ýcode = MGMT_OP_LOAD_LONG_TERM_KEYS , 2329 . g£nd_·¿m = lßd_Éks_šv®id_·¿m_3 , 2330 . g£nd_Ën = ( lßd_Éks_šv®id_·¿m_3 ), 2331 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 2334 cÚ¡  glßd_Éks_šv®id_·¿m_4 [22] = { 0x1d, 0x07 }; 2335 cÚ¡  g’”ic_d©a glßd_Éks_šv®id_·¿ms_‹¡_4 = { 2336 . £nd_Ýcode = MGMT_OP_LOAD_LONG_TERM_KEYS , 2337 . g£nd_·¿m = lßd_Éks_šv®id_·¿m_4 , 2338 . g£nd_Ën = ( lßd_Éks_šv®id_·¿m_4 ), 2339 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 2342 cÚ¡  g£t_io_ÿp_šv®id_·¿m_1 [] = { 0xff }; 2344 cÚ¡  g’”ic_d©a g£t_io_ÿp_šv®id_·¿m_‹¡_1 = { 2345 . £nd_Ýcode = MGMT_OP_SET_IO_CAPABILITY , 2346 . g£nd_·¿m = £t_io_ÿp_šv®id_·¿m_1 , 2347 . g£nd_Ën = ( £t_io_ÿp_šv®id_·¿m_1 ), 2348 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 2351 cÚ¡  g·œ_deviû_·¿m [] = { 2353 cÚ¡  g·œ_deviû_r¥ [] = { 2355 cÚ¡  g·œ_deviû_šv®id_·¿m_1 [] = { 2357 cÚ¡  g·œ_deviû_šv®id_·¿m_r¥_1 [] = { 2359 cÚ¡  g·œ_deviû_šv®id_·¿m_2 [] = { 2361 cÚ¡  g·œ_deviû_šv®id_·¿m_r¥_2 [] = { 2364 cÚ¡  g’”ic_d©a g·œ_deviû_nÙ_pow”ed_‹¡_1 = { 2365 . £nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2366 . g£nd_·¿m = ·œ_deviû_·¿m , 2367 . g£nd_Ën = ( ·œ_deviû_·¿m ), 2368 . gex³ù_¡©us = MGMT_STATUS_NOT_POWERED , 2369 . gex³ù_·¿m = ·œ_deviû_r¥ , 2370 . gex³ù_Ën = ( ·œ_deviû_r¥ ), 2373 cÚ¡  g’”ic_d©a g·œ_deviû_šv®id_·¿m_‹¡_1 = { 2374 . £nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2375 . g£nd_·¿m = ·œ_deviû_šv®id_·¿m_1 , 2376 . g£nd_Ën = ( ·œ_deviû_šv®id_·¿m_1 ), 2377 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 2378 . gex³ù_·¿m = ·œ_deviû_šv®id_·¿m_r¥_1 , 2379 . gex³ù_Ën = ( ·œ_deviû_šv®id_·¿m_r¥_1 ), 2382 cÚ¡  g’”ic_d©a g·œ_deviû_šv®id_·¿m_‹¡_2 = { 2383 . £nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2384 . g£nd_·¿m = ·œ_deviû_šv®id_·¿m_2 , 2385 . g£nd_Ën = ( ·œ_deviû_šv®id_·¿m_2 ), 2386 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 2387 . gex³ù_·¿m = ·œ_deviû_šv®id_·¿m_r¥_2 , 2388 . gex³ù_Ën = ( ·œ_deviû_šv®id_·¿m_r¥_2 ), 2391 cÚ¡ * $·œ_deviû_£nd_·¿m_func ( ušt16_t * Ën ) 2393  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2394 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 2395  ušt8_t ·¿m [8]; 2397 `memýy ( ·¿m , `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ), 6); 2398 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_LE ) 2399 ·¿m [6] = 0x01; 2401 ·¿m [6] = 0x00; 2402 ·¿m [7] = ‹¡ -> io_ÿp ; 2404 * Ën = ( ·¿m ); 2406  ·¿m ; 2407 } } 2409 cÚ¡ * $·œ_deviû_ex³ù_·¿m_func ( ušt16_t * Ën ) 2411  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2412  ušt8_t ·¿m [7]; 2414 `memýy ( ·¿m , `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ), 6); 2415 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_LE ) 2416 ·¿m [6] = 0x01; 2418 ·¿m [6] = 0x00; 2420 * Ën = ( ·¿m ); 2422  ·¿m ; 2423 } } 2425  ušt16_t g£‰šgs_pow”ed_bÚdabË [] = { MGMT_OP_SET_BONDABLE , 2426 MGMT_OP_SET_POWERED , 0 }; 2427  ušt8_t gauth_»q_·¿m [] = { 0x2a, 0x00 }; 2428  ušt8_t g·œ_deviû_pš [] = { 0x30, 0x30, 0x30, 0x30 }; 2430 cÚ¡  g’”ic_d©a g·œ_deviû_sucûss_‹¡_1 = { 2431 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË , 2432 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2433 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2434 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2435 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2436 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2437 . gex³ù_®t_ev_Ën = 26, 2438 . gex³ù_hci_commªd = BT_HCI_CMD_AUTH_REQUESTED , 2439 . gex³ù_hci_·¿m = auth_»q_·¿m , 2440 . gex³ù_hci_Ën = ( auth_»q_·¿m ), 2441 . gpš = ·œ_deviû_pš , 2442 . gpš_Ën = ( ·œ_deviû_pš ), 2443 . gþ›Á_pš = ·œ_deviû_pš , 2444 . gþ›Á_pš_Ën = ( ·œ_deviû_pš ), 2447  ušt16_t g£‰šgs_pow”ed_bÚdabË_lšk£c [] = { MGMT_OP_SET_BONDABLE , 2448 MGMT_OP_SET_POWERED , 2449 MGMT_OP_SET_LINK_SECURITY , 2452 cÚ¡  g’”ic_d©a g·œ_deviû_sucûss_‹¡_2 = { 2453 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË_lšk£c , 2454 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2455 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2456 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2457 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2458 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2459 . gex³ù_®t_ev_Ën = 26, 2460 . gex³ù_hci_commªd = BT_HCI_CMD_AUTH_REQUESTED , 2461 . gex³ù_hci_·¿m = auth_»q_·¿m , 2462 . gex³ù_hci_Ën = ( auth_»q_·¿m ), 2463 . gpš = ·œ_deviû_pš , 2464 . gpš_Ën = ( ·œ_deviû_pš ), 2465 . gþ›Á_pš = ·œ_deviû_pš , 2466 . gþ›Á_pš_Ën = ( ·œ_deviû_pš ), 2469 cÚ¡  g’”ic_d©a g·œ_deviû_Ëgacy_nÚbÚdabË_1 = { 2470 . £tup_£‰šgs = £‰šgs_pow”ed , 2471 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2472 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2473 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2474 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2475 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2476 . gex³ù_®t_ev_Ën = 26, 2477 . gpš = ·œ_deviû_pš , 2478 . gpš_Ën = ( ·œ_deviû_pš ), 2479 . gþ›Á_pš = ·œ_deviû_pš , 2480 . gþ›Á_pš_Ën = ( ·œ_deviû_pš ), 2483 cÚ¡  g’”ic_d©a g·œ_deviû_pow”_off_‹¡_1 = { 2484 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË , 2485 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2486 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2487 . gfÜû_pow”_off = Œue , 2488 . gex³ù_¡©us = MGMT_STATUS_NOT_POWERED , 2489 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2492 cÚ¡ * $þ›Á_bdaddr_·¿m_func ( ušt8_t * Ën ) 2494  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2495  ušt8_t bdaddr [6]; 2497 `memýy ( bdaddr , `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ), 6); 2499 * Ën = ( bdaddr ); 2501  bdaddr ; 2502 } } 2504 cÚ¡  g’”ic_d©a g·œ_deviû_»jeù_‹¡_1 = { 2505 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË , 2506 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2507 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2508 . gex³ù_¡©us = MGMT_STATUS_AUTH_FAILED , 2509 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2510 . gex³ù_®t_ev = MGMT_EV_AUTH_FAILED , 2511 . gex³ù_®t_ev_Ën = 8, 2512 . gex³ù_hci_commªd = BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY , 2513 . gex³ù_hci_func = þ›Á_bdaddr_·¿m_func , 2514 . gex³ù_pš = Œue , 2515 . gþ›Á_pš = ·œ_deviû_pš , 2516 . gþ›Á_pš_Ën = ( ·œ_deviû_pš ), 2519 cÚ¡  g’”ic_d©a g·œ_deviû_»jeù_‹¡_2 = { 2520 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË , 2521 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2522 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2523 . gex³ù_¡©us = MGMT_STATUS_AUTH_FAILED , 2524 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2525 . gex³ù_®t_ev = MGMT_EV_AUTH_FAILED , 2526 . gex³ù_®t_ev_Ën = 8, 2527 . gex³ù_hci_commªd = BT_HCI_CMD_AUTH_REQUESTED , 2528 . gex³ù_hci_·¿m = auth_»q_·¿m , 2529 . gex³ù_hci_Ën = ( auth_»q_·¿m ), 2530 . gpš = ·œ_deviû_pš , 2531 . gpš_Ën = ( ·œ_deviû_pš ), 2534 cÚ¡  g’”ic_d©a g·œ_deviû_»jeù_‹¡_3 = { 2535 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË_lšk£c , 2536 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2537 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2538 . gex³ù_¡©us = MGMT_STATUS_AUTH_FAILED , 2539 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2540 . gex³ù_hci_commªd = BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY , 2541 . gex³ù_hci_func = þ›Á_bdaddr_·¿m_func , 2542 . gex³ù_pš = Œue , 2543 . gþ›Á_pš = ·œ_deviû_pš , 2544 . gþ›Á_pš_Ën = ( ·œ_deviû_pš ), 2547 cÚ¡  g’”ic_d©a g·œ_deviû_»jeù_‹¡_4 = { 2548 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË_lšk£c , 2549 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2550 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2551 . gex³ù_¡©us = MGMT_STATUS_AUTH_FAILED , 2552 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2553 . gpš = ·œ_deviû_pš , 2554 . gpš_Ën = ( ·œ_deviû_pš ), 2557  ušt16_t g£‰šgs_pow”ed_bÚdabË_s¥ [] = { MGMT_OP_SET_BONDABLE , 2558 MGMT_OP_SET_SSP , 2559 MGMT_OP_SET_POWERED , 2562 cÚ¡  g’”ic_d©a g·œ_deviû_s¥_‹¡_1 = { 2563 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË_s¥ , 2564 . gþ›Á_’abË_s¥ = Œue , 2565 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2566 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2567 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2568 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2569 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2570 . gex³ù_®t_ev_Ën = 26, 2571 . gex³ù_hci_commªd = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY , 2572 . gex³ù_hci_func = þ›Á_bdaddr_·¿m_func , 2573 . gio_ÿp = 0x03, 2574 . gþ›Á_io_ÿp = 0x03, 2577 cÚ¡ * $þ›Á_io_ÿp_·¿m_func ( ušt8_t * Ën ) 2579  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2580 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 2581  ušt8_t ·¿m [9]; 2583 `memýy ( ·¿m , `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ), 6); 2584 `memýy (& ·¿m [6], ‹¡ -> ex³ù_hci_·¿m , 3); 2586 * Ën = ( ·¿m ); 2588  ·¿m ; 2589 } } 2591 cÚ¡ ušt8_t gno_bÚdšg_io_ÿp [] = { 0x03, 0x00, 0x00 }; 2592 cÚ¡  g’”ic_d©a g·œ_deviû_s¥_‹¡_2 = { 2593 . £tup_£‰šgs = £‰šgs_pow”ed_s¥ , 2594 . gþ›Á_’abË_s¥ = Œue , 2595 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2596 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2597 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2598 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2599 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2600 . gex³ù_®t_ev_Ën = 26, 2601 . gex³ù_hci_commªd = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY , 2602 . gex³ù_hci_func = þ›Á_io_ÿp_·¿m_func , 2603 . gex³ù_hci_·¿m = no_bÚdšg_io_ÿp , 2604 . gex³ù_hci_Ën = ( no_bÚdšg_io_ÿp ), 2605 . gio_ÿp = 0x03, 2606 . gþ›Á_io_ÿp = 0x03, 2609 cÚ¡ ušt8_t gbÚdšg_io_ÿp [] = { 0x03, 0x00, 0x02 }; 2610 cÚ¡  g’”ic_d©a g·œ_deviû_s¥_‹¡_3 = { 2611 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË_s¥ , 2612 . gþ›Á_’abË_s¥ = Œue , 2613 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2614 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2615 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2616 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2617 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2618 . gex³ù_®t_ev_Ën = 26, 2619 . gex³ù_hci_commªd = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY , 2620 . gex³ù_hci_func = þ›Á_io_ÿp_·¿m_func , 2621 . gex³ù_hci_·¿m = bÚdšg_io_ÿp , 2622 . gex³ù_hci_Ën = ( bÚdšg_io_ÿp ), 2623 . gio_ÿp = 0x03, 2624 . gþ›Á_io_ÿp = 0x03, 2627 cÚ¡  g’”ic_d©a g·œ_deviû_s¥_‹¡_4 = { 2628 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË_s¥ , 2629 . gþ›Á_’abË_s¥ = Œue , 2630 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2631 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2632 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2633 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2634 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2635 . gex³ù_®t_ev_Ën = 26, 2636 . gex³ù_hci_commªd = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY , 2637 . gex³ù_hci_func = þ›Á_bdaddr_·¿m_func , 2638 . gio_ÿp = 0x01, 2639 . gþ›Á_io_ÿp = 0x01, 2642 cÚ¡ ušt8_t gm™m_no_bÚdšg_io_ÿp [] = { 0x01, 0x00, 0x01 }; 2643 cÚ¡  g’”ic_d©a g·œ_deviû_s¥_‹¡_5 = { 2644 . £tup_£‰šgs = £‰šgs_pow”ed_s¥ , 2645 . gþ›Á_’abË_s¥ = Œue , 2646 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2647 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2648 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2649 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2650 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2651 . gex³ù_®t_ev_Ën = 26, 2652 . gex³ù_hci_commªd = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY , 2653 . gex³ù_hci_func = þ›Á_io_ÿp_·¿m_func , 2654 . gex³ù_hci_·¿m = m™m_no_bÚdšg_io_ÿp , 2655 . gex³ù_hci_Ën = ( m™m_no_bÚdšg_io_ÿp ), 2656 . gio_ÿp = 0x01, 2657 . gþ›Á_io_ÿp = 0x01, 2660 cÚ¡ ušt8_t gm™m_bÚdšg_io_ÿp [] = { 0x01, 0x00, 0x03 }; 2661 cÚ¡  g’”ic_d©a g·œ_deviû_s¥_‹¡_6 = { 2662 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË_s¥ , 2663 . gþ›Á_’abË_s¥ = Œue , 2664 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2665 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2666 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2667 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2668 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2669 . gex³ù_®t_ev_Ën = 26, 2670 . gex³ù_hci_commªd = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY , 2671 . gex³ù_hci_func = þ›Á_io_ÿp_·¿m_func , 2672 . gex³ù_hci_·¿m = m™m_bÚdšg_io_ÿp , 2673 . gex³ù_hci_Ën = ( m™m_bÚdšg_io_ÿp ), 2674 . gio_ÿp = 0x01, 2675 . gþ›Á_io_ÿp = 0x01, 2678 cÚ¡  g’”ic_d©a g·œ_deviû_s¥_»jeù_1 = { 2679 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË_s¥ , 2680 . gþ›Á_’abË_s¥ = Œue , 2681 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2682 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2683 . gex³ù_¡©us = MGMT_STATUS_AUTH_FAILED , 2684 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2685 . gex³ù_®t_ev = MGMT_EV_AUTH_FAILED , 2686 . gex³ù_®t_ev_Ën = 8, 2687 . gex³ù_hci_commªd = BT_HCI_CMD_USER_CONFIRM_REQUEST_NEG_REPLY , 2688 . gex³ù_hci_func = þ›Á_bdaddr_·¿m_func , 2689 . gio_ÿp = 0x01, 2690 . gþ›Á_io_ÿp = 0x01, 2691 . gþ›Á_auth_»q = 0x01, 2692 . g»jeù_cÚfœm = Œue , 2695 cÚ¡  g’”ic_d©a g·œ_deviû_s¥_»jeù_2 = { 2696 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË_s¥ , 2697 . gþ›Á_’abË_s¥ = Œue , 2698 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2699 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2700 . gex³ù_¡©us = MGMT_STATUS_AUTH_FAILED , 2701 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2702 . gex³ù_®t_ev = MGMT_EV_AUTH_FAILED , 2703 . gex³ù_®t_ev_Ën = 8, 2704 . gex³ù_hci_commªd = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY , 2705 . gex³ù_hci_func = þ›Á_bdaddr_·¿m_func , 2706 . gio_ÿp = 0x01, 2707 . gþ›Á_io_ÿp = 0x01, 2708 . gþ›Á_»jeù_cÚfœm = Œue , 2711 cÚ¡  g’”ic_d©a g·œ_deviû_s¥_nÚbÚdabË_1 = { 2712 . £tup_£‰šgs = £‰šgs_pow”ed_s¥ , 2713 . gþ›Á_’abË_s¥ = Œue , 2714 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2715 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2716 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2717 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2718 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2719 . gex³ù_®t_ev_Ën = 26, 2720 . gex³ù_hci_commªd = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY , 2721 . gex³ù_hci_func = þ›Á_bdaddr_·¿m_func , 2722 . gio_ÿp = 0x01, 2723 . gþ›Á_io_ÿp = 0x01, 2726 cÚ¡  g’”ic_d©a g·œ_deviû_Ë_sucûss_‹¡_1 = { 2727 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË , 2728 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2729 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2730 . gju¡_wÜks = Œue , 2731 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2732 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2733 . gex³ù_®t_ev = MGMT_EV_NEW_LONG_TERM_KEY , 2734 . gex³ù_®t_ev_Ën = ( mgmt_ev_Ãw_lÚg_‹rm_key ), 2737  boÞ $Ék_is_auth’tiÿ‹d (cÚ¡  mgmt_Ék_šfo * Ék ) 2739  Ék -> ty³ ) { 2742  Œue ; 2744  çl£ ; 2746 } } 2748  boÞ $Ék_is_sc (cÚ¡  mgmt_Ék_šfo * Ék ) 2750  Ék -> ty³ ) { 2754  Œue ; 2756  çl£ ; 2758 } } 2760  boÞ $v”ify_Ék (cÚ¡ * ·¿m , ušt16_t Ëngth ) 2762  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2763 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 2764 cÚ¡  mgmt_ev_Ãw_lÚg_‹rm_key * ev = ·¿m ; 2766 ià( Ëngth !ð( mgmt_ev_Ãw_lÚg_‹rm_key )) { 2767 `‹¡”_w¬n ("Inv®id‚ew†tk†’gth %u !ð%zu", Ëngth , 2768 ( mgmt_ev_Ãw_lÚg_‹rm_key )); 2769  çl£ ; 2772 ià( ‹¡ -> ju¡_wÜks && `Ék_is_auth’tiÿ‹d (& ev -> key )) { 2773 `‹¡”_w¬n ("Authenticated key for just-works"); 2774  çl£ ; 2777 ià(! ‹¡ -> ju¡_wÜks && ! `Ék_is_auth’tiÿ‹d (& ev -> key )) { 2778 `‹¡”_w¬n ("Unauthenticated key for MITM"); 2779  çl£ ; 2782 ià( ‹¡ -> ex³ù_sc_key && ! `Ék_is_sc (& ev -> key )) { 2783 `‹¡”_w¬n ("Non-LE SC key for SC…airing"); 2784  çl£ ; 2787 ià(! ‹¡ -> ex³ù_sc_key && `Ék_is_sc (& ev -> key )) { 2788 `‹¡”_w¬n ("SC key for Non-SC…airing"); 2789  çl£ ; 2792  Œue ; 2793 } } 2795 cÚ¡  g’”ic_d©a g·œ_deviû_Ë_sucûss_‹¡_2 = { 2796 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË , 2797 . gio_ÿp = 0x02, 2798 . gþ›Á_io_ÿp = 0x04, 2799 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2800 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2801 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2802 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2803 . gex³ù_®t_ev = MGMT_EV_NEW_LONG_TERM_KEY , 2804 . gex³ù_®t_ev_Ën = ( mgmt_ev_Ãw_lÚg_‹rm_key ), 2805 . gv”ify_®t_ev_func = v”ify_Ék , 2808  ušt16_t g£‰šgs_pow”ed_sc_bÚdabË_Ë_s¥ [] = { 2809 MGMT_OP_SET_BONDABLE , 2810 MGMT_OP_SET_LE , 2811 MGMT_OP_SET_SSP , 2812 MGMT_OP_SET_SECURE_CONN , 2813 MGMT_OP_SET_POWERED , 2816 cÚ¡  g’”ic_d©a g·œ_deviû_smp_b»dr_‹¡_1 = { 2817 . £tup_£‰šgs = £‰šgs_pow”ed_sc_bÚdabË_Ë_s¥ , 2818 . gþ›Á_’abË_s¥ = Œue , 2819 . gþ›Á_’abË_Ë = Œue , 2820 . gþ›Á_’abË_sc = Œue , 2821 . gex³ù_sc_key = Œue , 2822 . gju¡_wÜks = Œue , 2823 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2824 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2825 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2826 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2827 . gex³ù_®t_ev = MGMT_EV_NEW_LONG_TERM_KEY , 2828 . gex³ù_®t_ev_Ën = ( mgmt_ev_Ãw_lÚg_‹rm_key ), 2829 . gv”ify_®t_ev_func = v”ify_Ék , 2830 . gex³ù_hci_commªd = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY , 2831 . gex³ù_hci_func = þ›Á_bdaddr_·¿m_func , 2832 . gio_ÿp = 0x03, 2833 . gþ›Á_io_ÿp = 0x03, 2836 cÚ¡  g’”ic_d©a g·œ_deviû_Ë_»jeù_‹¡_1 = { 2837 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË , 2838 . gio_ÿp = 0x02, 2839 . gþ›Á_io_ÿp = 0x04, 2840 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2841 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2842 . gex³ù_¡©us = MGMT_STATUS_AUTH_FAILED , 2843 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2844 . gex³ù_®t_ev = MGMT_EV_AUTH_FAILED , 2845 . gex³ù_®t_ev_Ën = ( mgmt_ev_auth_çžed ), 2846 . g»jeù_cÚfœm = Œue , 2849  ušt16_t g£‰šgs_pow”ed_sc_bÚdabË [] = { MGMT_OP_SET_BONDABLE , 2850 MGMT_OP_SET_SECURE_CONN , 2851 MGMT_OP_SET_POWERED , 0 }; 2853 cÚ¡  g’”ic_d©a g·œ_deviû_Ë_sc_Ëgacy_‹¡_1 = { 2854 . £tup_£‰šgs = £‰šgs_pow”ed_sc_bÚdabË , 2855 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2856 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2857 . gju¡_wÜks = Œue , 2858 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2859 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2860 . gex³ù_®t_ev = MGMT_EV_NEW_LONG_TERM_KEY , 2861 . gex³ù_®t_ev_Ën = ( mgmt_ev_Ãw_lÚg_‹rm_key ), 2862 . gv”ify_®t_ev_func = v”ify_Ék , 2865 cÚ¡  g’”ic_d©a g·œ_deviû_Ë_sc_sucûss_‹¡_1 = { 2866 . £tup_£‰šgs = £‰šgs_pow”ed_sc_bÚdabË , 2867 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2868 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2869 . gju¡_wÜks = Œue , 2870 . gþ›Á_’abË_sc = Œue , 2871 . gex³ù_sc_key = Œue , 2872 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2873 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2874 . gex³ù_®t_ev = MGMT_EV_NEW_LONG_TERM_KEY , 2875 . gex³ù_®t_ev_Ën = ( mgmt_ev_Ãw_lÚg_‹rm_key ), 2876 . gv”ify_®t_ev_func = v”ify_Ék , 2879 cÚ¡  g’”ic_d©a g·œ_deviû_Ë_sc_sucûss_‹¡_2 = { 2880 . £tup_£‰šgs = £‰šgs_pow”ed_sc_bÚdabË , 2881 . g£nd_Ýcode = MGMT_OP_PAIR_DEVICE , 2882 . g£nd_func = ·œ_deviû_£nd_·¿m_func , 2883 . gþ›Á_’abË_sc = Œue , 2884 . gex³ù_sc_key = Œue , 2885 . gio_ÿp = 0x02, 2886 . gþ›Á_io_ÿp = 0x02, 2887 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 2888 . gex³ù_func = ·œ_deviû_ex³ù_·¿m_func , 2889 . gex³ù_®t_ev = MGMT_EV_NEW_LONG_TERM_KEY , 2890 . gex³ù_®t_ev_Ën = ( mgmt_ev_Ãw_lÚg_‹rm_key ), 2891 . gv”ify_®t_ev_func = v”ify_Ék , 2894  ušt16_t g£‰šgs_pow”ed_cÚÃùabË_bÚdabË [] = { 2895 MGMT_OP_SET_BONDABLE , 2896 MGMT_OP_SET_CONNECTABLE , 2897 MGMT_OP_SET_POWERED , 0 }; 2899 cÚ¡  g’”ic_d©a g·œšg_acû±Ü_Ëgacy_1 = { 2900 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË_bÚdabË , 2901 . gpš = ·œ_deviû_pš , 2902 . gpš_Ën = ( ·œ_deviû_pš ), 2903 . gþ›Á_pš = ·œ_deviû_pš , 2904 . gþ›Á_pš_Ën = ( ·œ_deviû_pš ), 2905 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2906 . gex³ù_®t_ev_Ën = 26, 2909 cÚ¡  g’”ic_d©a g·œšg_acû±Ü_Ëgacy_2 = { 2910 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË_bÚdabË , 2911 . gex³ù_pš = Œue , 2912 . gþ›Á_pš = ·œ_deviû_pš , 2913 . gþ›Á_pš_Ën = ( ·œ_deviû_pš ), 2914 . gex³ù_®t_ev = MGMT_EV_AUTH_FAILED , 2915 . gex³ù_®t_ev_Ën = 8, 2918 cÚ¡  g’”ic_d©a g·œšg_acû±Ü_Ëgacy_3 = { 2919 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË , 2920 . gþ›Á_pš = ·œ_deviû_pš , 2921 . gþ›Á_pš_Ën = ( ·œ_deviû_pš ), 2922 . gex³ù_®t_ev = MGMT_EV_AUTH_FAILED , 2923 . gex³ù_®t_ev_Ën = 8, 2924 . gex³ù_hci_commªd = BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY , 2925 . gex³ù_hci_func = þ›Á_bdaddr_·¿m_func , 2928  ušt16_t g£‰šgs_pow”ed_cÚÃùabË_bÚdabË_lšk£c [] = { 2929 MGMT_OP_SET_BONDABLE , 2930 MGMT_OP_SET_CONNECTABLE , 2931 MGMT_OP_SET_LINK_SECURITY , 2932 MGMT_OP_SET_POWERED , 0 }; 2934 cÚ¡  g’”ic_d©a g·œšg_acû±Ü_lšk£c_1 = { 2935 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË_bÚdabË_lšk£c , 2936 . gpš = ·œ_deviû_pš , 2937 . gpš_Ën = ( ·œ_deviû_pš ), 2938 . gþ›Á_pš = ·œ_deviû_pš , 2939 . gþ›Á_pš_Ën = ( ·œ_deviû_pš ), 2940 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2941 . gex³ù_®t_ev_Ën = 26, 2944 cÚ¡  g’”ic_d©a g·œšg_acû±Ü_lšk£c_2 = { 2945 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË_bÚdabË_lšk£c , 2946 . gex³ù_pš = Œue , 2947 . gþ›Á_pš = ·œ_deviû_pš , 2948 . gþ›Á_pš_Ën = ( ·œ_deviû_pš ), 2949 . gex³ù_®t_ev = MGMT_EV_CONNECT_FAILED , 2950 . gex³ù_®t_ev_Ën = 8, 2953  ušt16_t g£‰šgs_pow”ed_cÚÃùabË_bÚdabË_s¥ [] = { 2954 MGMT_OP_SET_BONDABLE , 2955 MGMT_OP_SET_CONNECTABLE , 2956 MGMT_OP_SET_SSP , 2957 MGMT_OP_SET_POWERED , 0 }; 2959 cÚ¡  g’”ic_d©a g·œšg_acû±Ü_s¥_1 = { 2960 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË_bÚdabË_s¥ , 2961 . gþ›Á_’abË_s¥ = Œue , 2962 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2963 . gex³ù_®t_ev_Ën = 26, 2964 . gex³ù_hci_commªd = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY , 2965 . gex³ù_hci_func = þ›Á_bdaddr_·¿m_func , 2966 . gio_ÿp = 0x03, 2967 . gþ›Á_io_ÿp = 0x03, 2968 . gju¡_wÜks = Œue , 2971 cÚ¡  g’”ic_d©a g·œšg_acû±Ü_s¥_2 = { 2972 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË_bÚdabË_s¥ , 2973 . gþ›Á_’abË_s¥ = Œue , 2974 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2975 . gex³ù_®t_ev_Ën = 26, 2976 . gex³ù_hci_commªd = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY , 2977 . gex³ù_hci_func = þ›Á_bdaddr_·¿m_func , 2978 . gio_ÿp = 0x01, 2979 . gþ›Á_io_ÿp = 0x01, 2982 cÚ¡  g’”ic_d©a g·œšg_acû±Ü_s¥_3 = { 2983 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË_bÚdabË_s¥ , 2984 . gþ›Á_’abË_s¥ = Œue , 2985 . gex³ù_®t_ev = MGMT_EV_NEW_LINK_KEY , 2986 . gex³ù_®t_ev_Ën = 26, 2987 . gex³ù_hci_commªd = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY , 2988 . gex³ù_hci_func = þ›Á_bdaddr_·¿m_func , 2989 . gio_ÿp = 0x01, 2990 . gþ›Á_io_ÿp = 0x01, 2991 . gju¡_wÜks = Œue , 2994 cÚ¡ * $þ›Á_io_ÿp_»jeù_·¿m_func ( ušt8_t * Ën ) 2996  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 2997  ušt8_t ·¿m [7]; 2999 `memýy ( ·¿m , `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ), 6); 3000 ·¿m [6] = 0x18; 3002 * Ën = ( ·¿m ); 3004  ·¿m ; 3005 } } 3007  ušt16_t g£‰šgs_pow”ed_cÚÃùabË_s¥ [] = { 3008 MGMT_OP_SET_CONNECTABLE , 3009 MGMT_OP_SET_SSP , 3010 MGMT_OP_SET_POWERED , 0 }; 3012 cÚ¡  g’”ic_d©a g·œšg_acû±Ü_s¥_4 = { 3013 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË_s¥ , 3014 . gþ›Á_’abË_s¥ = Œue , 3015 . gex³ù_®t_ev = MGMT_EV_AUTH_FAILED , 3016 . gex³ù_®t_ev_Ën = 8, 3017 . gex³ù_hci_commªd = BT_HCI_CMD_IO_CAPABILITY_REQUEST_NEG_REPLY , 3018 . gex³ù_hci_func = þ›Á_io_ÿp_»jeù_·¿m_func , 3019 . gio_ÿp = 0x01, 3020 . gþ›Á_io_ÿp = 0x01, 3021 . gþ›Á_auth_»q = 0x02, 3024  ušt16_t g£‰šgs_pow”ed_bÚdabË_cÚÃùabË_adv”tisšg [] = { 3025 MGMT_OP_SET_BONDABLE , 3026 MGMT_OP_SET_CONNECTABLE , 3027 MGMT_OP_SET_ADVERTISING , 3028 MGMT_OP_SET_POWERED , 0 }; 3030 cÚ¡  g’”ic_d©a g·œšg_acû±Ü_Ë_1 = { 3031 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË_cÚÃùabË_adv”tisšg , 3032 . gio_ÿp = 0x03, 3033 . gþ›Á_io_ÿp = 0x03, 3034 . gju¡_wÜks = Œue , 3035 . gex³ù_®t_ev = MGMT_EV_NEW_LONG_TERM_KEY , 3036 . gex³ù_®t_ev_Ën = ( mgmt_ev_Ãw_lÚg_‹rm_key ), 3037 . gv”ify_®t_ev_func = v”ify_Ék , 3040 cÚ¡  g’”ic_d©a g·œšg_acû±Ü_Ë_2 = { 3041 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË_cÚÃùabË_adv”tisšg , 3042 . gio_ÿp = 0x04, 3043 . gþ›Á_io_ÿp = 0x04, 3044 . gþ›Á_auth_»q = 0x05, 3045 . gex³ù_®t_ev = MGMT_EV_NEW_LONG_TERM_KEY , 3046 . gex³ù_®t_ev_Ën = ( mgmt_ev_Ãw_lÚg_‹rm_key ), 3047 . gv”ify_®t_ev_func = v”ify_Ék , 3050 cÚ¡  g’”ic_d©a g·œšg_acû±Ü_Ë_3 = { 3051 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË_cÚÃùabË_adv”tisšg , 3052 . gio_ÿp = 0x04, 3053 . gþ›Á_io_ÿp = 0x04, 3054 . gex³ù_®t_ev = MGMT_EV_AUTH_FAILED , 3055 . gex³ù_®t_ev_Ën = ( mgmt_ev_auth_çžed ), 3056 . g»jeù_cÚfœm = Œue , 3059 cÚ¡  g’”ic_d©a g·œšg_acû±Ü_Ë_4 = { 3060 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË_cÚÃùabË_adv”tisšg , 3061 . gio_ÿp = 0x02, 3062 . gþ›Á_io_ÿp = 0x04, 3063 . gþ›Á_auth_»q = 0x05, 3064 . gex³ù_®t_ev = MGMT_EV_NEW_LONG_TERM_KEY , 3065 . gex³ù_®t_ev_Ën = ( mgmt_ev_Ãw_lÚg_‹rm_key ), 3066 . gv”ify_®t_ev_func = v”ify_Ék , 3069 cÚ¡  g’”ic_d©a g·œšg_acû±Ü_Ë_5 = { 3070 . £tup_£‰šgs = £‰šgs_pow”ed_bÚdabË_cÚÃùabË_adv”tisšg , 3071 . gio_ÿp = 0x02, 3072 . gþ›Á_io_ÿp = 0x04, 3073 . gþ›Á_auth_»q = 0x05, 3074 . g»jeù_cÚfœm = Œue , 3075 . gex³ù_®t_ev = MGMT_EV_AUTH_FAILED , 3076 . gex³ù_®t_ev_Ën = ( mgmt_ev_auth_çžed ), 3079 cÚ¡  guÅaœ_deviû_·¿m [] = { 3081 cÚ¡  guÅaœ_deviû_r¥ [] = { 3083 cÚ¡  guÅaœ_deviû_šv®id_·¿m_1 [] = { 3085 cÚ¡  guÅaœ_deviû_šv®id_·¿m_r¥_1 [] = { 3087 cÚ¡  guÅaœ_deviû_šv®id_·¿m_2 [] = { 3089 cÚ¡  guÅaœ_deviû_šv®id_·¿m_r¥_2 [] = { 3092 cÚ¡  g’”ic_d©a guÅaœ_deviû_nÙ_pow”ed_‹¡_1 = { 3093 . £nd_Ýcode = MGMT_OP_UNPAIR_DEVICE , 3094 . g£nd_·¿m = uÅaœ_deviû_·¿m , 3095 . g£nd_Ën = ( uÅaœ_deviû_·¿m ), 3096 . gex³ù_¡©us = MGMT_STATUS_NOT_POWERED , 3097 . gex³ù_·¿m = uÅaœ_deviû_r¥ , 3098 . gex³ù_Ën = ( uÅaœ_deviû_r¥ ), 3101 cÚ¡  g’”ic_d©a guÅaœ_deviû_šv®id_·¿m_‹¡_1 = { 3102 . £nd_Ýcode = MGMT_OP_UNPAIR_DEVICE , 3103 . g£nd_·¿m = uÅaœ_deviû_šv®id_·¿m_1 , 3104 . g£nd_Ën = ( uÅaœ_deviû_šv®id_·¿m_1 ), 3105 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3106 . gex³ù_·¿m = uÅaœ_deviû_šv®id_·¿m_r¥_1 , 3107 . gex³ù_Ën = ( uÅaœ_deviû_šv®id_·¿m_r¥_1 ), 3110 cÚ¡  g’”ic_d©a guÅaœ_deviû_šv®id_·¿m_‹¡_2 = { 3111 . £nd_Ýcode = MGMT_OP_UNPAIR_DEVICE , 3112 . g£nd_·¿m = uÅaœ_deviû_šv®id_·¿m_2 , 3113 . g£nd_Ën = ( uÅaœ_deviû_šv®id_·¿m_2 ), 3114 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3115 . gex³ù_·¿m = uÅaœ_deviû_šv®id_·¿m_r¥_2 , 3116 . gex³ù_Ën = ( uÅaœ_deviû_šv®id_·¿m_r¥_2 ), 3119 cÚ¡  gdiscÚÃù_šv®id_·¿m_1 [] = { 3121 cÚ¡  gdiscÚÃù_šv®id_·¿m_r¥_1 [] = { 3124 cÚ¡  g’”ic_d©a gdiscÚÃù_šv®id_·¿m_‹¡_1 = { 3125 . £nd_Ýcode = MGMT_OP_DISCONNECT , 3126 . g£nd_·¿m = discÚÃù_šv®id_·¿m_1 , 3127 . g£nd_Ën = ( discÚÃù_šv®id_·¿m_1 ), 3128 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3129 . gex³ù_·¿m = discÚÃù_šv®id_·¿m_r¥_1 , 3130 . gex³ù_Ën = ( discÚÃù_šv®id_·¿m_r¥_1 ), 3133 cÚ¡  gblock_deviû_šv®id_·¿m_1 [] = { 3135 cÚ¡  gblock_deviû_šv®id_·¿m_r¥_1 [] = { 3138 cÚ¡  g’”ic_d©a gblock_deviû_šv®id_·¿m_‹¡_1 = { 3139 . £nd_Ýcode = MGMT_OP_BLOCK_DEVICE , 3140 . g£nd_·¿m = block_deviû_šv®id_·¿m_1 , 3141 . g£nd_Ën = ( block_deviû_šv®id_·¿m_1 ), 3142 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3143 . gex³ù_·¿m = block_deviû_šv®id_·¿m_r¥_1 , 3144 . gex³ù_Ën = ( block_deviû_šv®id_·¿m_r¥_1 ), 3147 cÚ¡  gunblock_deviû_šv®id_·¿m_1 [] = { 3149 cÚ¡  gunblock_deviû_šv®id_·¿m_r¥_1 [] = { 3152 cÚ¡  g’”ic_d©a gunblock_deviû_šv®id_·¿m_‹¡_1 = { 3153 . £nd_Ýcode = MGMT_OP_UNBLOCK_DEVICE , 3154 . g£nd_·¿m = unblock_deviû_šv®id_·¿m_1 , 3155 . g£nd_Ën = ( unblock_deviû_šv®id_·¿m_1 ), 3156 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3157 . gex³ù_·¿m = unblock_deviû_šv®id_·¿m_r¥_1 , 3158 . gex³ù_Ën = ( unblock_deviû_šv®id_·¿m_r¥_1 ), 3161 cÚ¡  g£t_¡©ic_addr_v®id_·¿m [] = { 3164 cÚ¡  g’”ic_d©a g£t_¡©ic_addr_sucûss_‹¡ = { 3165 . £nd_Ýcode = MGMT_OP_SET_STATIC_ADDRESS , 3166 . g£nd_·¿m = £t_¡©ic_addr_v®id_·¿m , 3167 . g£nd_Ën = ( £t_¡©ic_addr_v®id_·¿m ), 3168 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3171 cÚ¡  g’”ic_d©a g£t_¡©ic_addr_çžu»_‹¡ = { 3172 . £tup_£‰šgs = £‰šgs_pow”ed , 3173 . g£nd_Ýcode = MGMT_OP_SET_STATIC_ADDRESS , 3174 . g£nd_·¿m = £t_¡©ic_addr_v®id_·¿m , 3175 . g£nd_Ën = ( £t_¡©ic_addr_v®id_·¿m ), 3176 . gex³ù_¡©us = MGMT_STATUS_REJECTED , 3179 cÚ¡  g£t_sÿn_·¿ms_v®id_·¿m [] = { 0x60, 0x00, 0x30, 0x00 }; 3181 cÚ¡  g’”ic_d©a g£t_sÿn_·¿ms_sucûss_‹¡ = { 3182 . £nd_Ýcode = MGMT_OP_SET_SCAN_PARAMS , 3183 . g£nd_·¿m = £t_sÿn_·¿ms_v®id_·¿m , 3184 . g£nd_Ën = ( £t_sÿn_·¿ms_v®id_·¿m ), 3185 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3188 cÚ¡  glßd_œks_em±y_li¡ [] = { 0x00, 0x00 }; 3190 cÚ¡  g’”ic_d©a glßd_œks_sucûss1_‹¡ = { 3191 . £nd_Ýcode = MGMT_OP_LOAD_IRKS , 3192 . g£nd_·¿m = lßd_œks_em±y_li¡ , 3193 . g£nd_Ën = ( lßd_œks_em±y_li¡ ), 3194 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3197 cÚ¡  glßd_œks_Úe_œk [] = { 0x01, 0x00, 3202 cÚ¡  g’”ic_d©a glßd_œks_sucûss2_‹¡ = { 3203 . £nd_Ýcode = MGMT_OP_LOAD_IRKS , 3204 . g£nd_·¿m = lßd_œks_Úe_œk , 3205 . g£nd_Ën = ( lßd_œks_Úe_œk ), 3206 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3209 cÚ¡  glßd_œks_nv®_addr_ty³ [] = { 0x01, 0x00, 3214 cÚ¡  g’”ic_d©a glßd_œks_nv®_·¿m1_‹¡ = { 3215 . £nd_Ýcode = MGMT_OP_LOAD_IRKS , 3216 . g£nd_·¿m = lßd_œks_nv®_addr_ty³ , 3217 . g£nd_Ën = ( lßd_œks_nv®_addr_ty³ ), 3218 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3221 cÚ¡  glßd_œks_nv®_¿nd_addr [] = { 0x01, 0x00, 3226 cÚ¡  g’”ic_d©a glßd_œks_nv®_·¿m2_‹¡ = { 3227 . £nd_Ýcode = MGMT_OP_LOAD_IRKS , 3228 . g£nd_·¿m = lßd_œks_nv®_¿nd_addr , 3229 . g£nd_Ën = ( lßd_œks_nv®_¿nd_addr ), 3230 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3233 cÚ¡  glßd_œks_nv®_Ën [] = { 0x02, 0x00, 0xff, 0xff }; 3235 cÚ¡  g’”ic_d©a glßd_œks_nv®_·¿m3_‹¡ = { 3236 . £nd_Ýcode = MGMT_OP_LOAD_IRKS , 3237 . g£nd_·¿m = lßd_œks_nv®_Ën , 3238 . g£nd_Ën = ( lßd_œks_nv®_Ën ), 3239 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3242 cÚ¡  g’”ic_d©a glßd_œks_nÙ_suµÜ‹d_‹¡ = { 3243 . £nd_Ýcode = MGMT_OP_LOAD_IRKS , 3244 . g£nd_·¿m = lßd_œks_em±y_li¡ , 3245 . g£nd_Ën = ( lßd_œks_em±y_li¡ ), 3246 . gex³ù_¡©us = MGMT_STATUS_NOT_SUPPORTED , 3249 cÚ¡  g£t_´ivacy_v®id_·¿m [] = { 0x01, 3252 cÚ¡  g£t_´ivacy_£‰šgs_·¿m [] = { 0x80, 0x20, 0x00, 0x00 }; 3254 cÚ¡  g’”ic_d©a g£t_´ivacy_sucûss_‹¡ = { 3255 . £nd_Ýcode = MGMT_OP_SET_PRIVACY , 3256 . g£nd_·¿m = £t_´ivacy_v®id_·¿m , 3257 . g£nd_Ën = ( £t_´ivacy_v®id_·¿m ), 3258 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3259 . gex³ù_·¿m = £t_´ivacy_£‰šgs_·¿m , 3260 . gex³ù_Ën = ( £t_´ivacy_£‰šgs_·¿m ), 3261 . gex³ù_£‰šgs_£t = MGMT_SETTING_PRIVACY , 3264 cÚ¡  g’”ic_d©a g£t_´ivacy_pow”ed_‹¡ = { 3265 . £tup_£‰šgs = £‰šgs_pow”ed , 3266 . g£nd_Ýcode = MGMT_OP_SET_PRIVACY , 3267 . g£nd_·¿m = £t_´ivacy_v®id_·¿m , 3268 . g£nd_Ën = ( £t_´ivacy_v®id_·¿m ), 3269 . gex³ù_¡©us = MGMT_STATUS_REJECTED , 3272 cÚ¡  g£t_´ivacy_nv®_·¿m [] = { 0xff, 3275 cÚ¡  g’”ic_d©a g£t_´ivacy_nv®_·¿m_‹¡ = { 3276 . £nd_Ýcode = MGMT_OP_SET_PRIVACY , 3277 . g£nd_·¿m = £t_´ivacy_nv®_·¿m , 3278 . g£nd_Ën = ( £t_´ivacy_nv®_·¿m ), 3279 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3282 cÚ¡ * $g‘_cÚn_šfo_£nd_·¿m_func ( ušt16_t * Ën ) 3284  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3285  ušt8_t ·¿m [7]; 3287 `memýy ( ·¿m , `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ), 6); 3288 ·¿m [6] = 0x00; 3290 * Ën = ( ·¿m ); 3292  ·¿m ; 3293 } } 3295 cÚ¡ * $g‘_cÚn_šfo_ex³ù_·¿m_func ( ušt16_t * Ën ) 3297  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3298  ušt8_t ·¿m [10]; 3300 `memýy ( ·¿m , `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ), 6); 3301 ·¿m [6] = 0x00; 3302 ·¿m [7] = 0xff; 3303 ·¿m [8] = 0xff; 3304 ·¿m [9] = 0x04; 3306 * Ën = ( ·¿m ); 3308  ·¿m ; 3309 } } 3311 cÚ¡ * $g‘_cÚn_šfo_”rÜ_ex³ù_·¿m_func ( ušt16_t * Ën ) 3313  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3314  ušt8_t ·¿m [10]; 3317 `mem£t ( ·¿m , 0, (param)); 3319 `memýy ( ·¿m , `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ), 6); 3320 ·¿m [6] = 0x00; 3322 * Ën = ( ·¿m ); 3324  ·¿m ; 3325 } } 3327 cÚ¡  g’”ic_d©a gg‘_cÚn_šfo_sucûs1_‹¡ = { 3328 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË_bÚdabË_s¥ , 3329 . g£nd_Ýcode = MGMT_OP_GET_CONN_INFO , 3330 . g£nd_func = g‘_cÚn_šfo_£nd_·¿m_func , 3331 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3332 . gex³ù_func = g‘_cÚn_šfo_ex³ù_·¿m_func , 3335 cÚ¡  g’”ic_d©a gg‘_cÚn_šfo_ncÚ_‹¡ = { 3336 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË_bÚdabË_s¥ , 3337 . g£nd_Ýcode = MGMT_OP_GET_CONN_INFO , 3338 . g£nd_func = g‘_cÚn_šfo_£nd_·¿m_func , 3339 . gex³ù_¡©us = MGMT_STATUS_NOT_CONNECTED , 3340 . gex³ù_func = g‘_cÚn_šfo_”rÜ_ex³ù_·¿m_func , 3343 cÚ¡ * $g‘_cÚn_šfo_ex³ù_·¿m_pow”_off_func ( ušt16_t * Ën ) 3345  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3346  ušt8_t ·¿m [10]; 3348 `memýy ( ·¿m , `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ), 6); 3349 ·¿m [6] = 0x00; 3350 ·¿m [7] = 127; 3351 ·¿m [8] = 127; 3352 ·¿m [9] = 127; 3354 * Ën = ( ·¿m ); 3356  ·¿m ; 3357 } } 3359 cÚ¡  g’”ic_d©a gg‘_cÚn_šfo_pow”_off_‹¡ = { 3360 . £tup_£‰šgs = £‰šgs_pow”ed_cÚÃùabË_bÚdabË_s¥ , 3361 . g£nd_Ýcode = MGMT_OP_GET_CONN_INFO , 3362 . g£nd_func = g‘_cÚn_šfo_£nd_·¿m_func , 3363 . gfÜû_pow”_off = Œue , 3364 . gex³ù_¡©us = MGMT_STATUS_NOT_POWERED , 3365 . gex³ù_func = g‘_cÚn_šfo_ex³ù_·¿m_pow”_off_func , 3368 cÚ¡ ušt8_t glßd_cÚn_·¿m_nv®_1 [16] = { 0x12, 0x11 }; 3369 cÚ¡  g’”ic_d©a glßd_cÚn_·¿ms_çž_1 = { 3370 . £nd_Ýcode = MGMT_OP_LOAD_CONN_PARAM , 3371 . g£nd_·¿m = lßd_cÚn_·¿m_nv®_1 , 3372 . g£nd_Ën = ( lßd_cÚn_·¿m_nv®_1 ), 3373 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3376 cÚ¡ ušt8_t gadd_deviû_nv®_1 [] = { 3381 cÚ¡ ušt8_t gadd_deviû_r¥ [] = { 3385 cÚ¡  g’”ic_d©a gadd_deviû_çž_1 = { 3386 . £nd_Ýcode = MGMT_OP_ADD_DEVICE , 3387 . g£nd_·¿m = add_deviû_nv®_1 , 3388 . g£nd_Ën = ( add_deviû_nv®_1 ), 3389 . gex³ù_·¿m = add_deviû_r¥ , 3390 . gex³ù_Ën = ( add_deviû_r¥ ), 3391 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3394 cÚ¡ ušt8_t gadd_deviû_nv®_2 [] = { 3399 cÚ¡  g’”ic_d©a gadd_deviû_çž_2 = { 3400 . £nd_Ýcode = MGMT_OP_ADD_DEVICE , 3401 . g£nd_·¿m = add_deviû_nv®_2 , 3402 . g£nd_Ën = ( add_deviû_nv®_2 ), 3403 . gex³ù_·¿m = add_deviû_r¥ , 3404 . gex³ù_Ën = ( add_deviû_r¥ ), 3405 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3408 cÚ¡ ušt8_t gadd_deviû_nv®_3 [] = { 3413 cÚ¡  g’”ic_d©a gadd_deviû_çž_3 = { 3414 . £nd_Ýcode = MGMT_OP_ADD_DEVICE , 3415 . g£nd_·¿m = add_deviû_nv®_3 , 3416 . g£nd_Ën = ( add_deviû_nv®_3 ), 3417 . gex³ù_·¿m = add_deviû_r¥ , 3418 . gex³ù_Ën = ( add_deviû_r¥ ), 3419 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3422 cÚ¡ ušt8_t gadd_deviû_sucûss_·¿m_1 [] = { 3427 cÚ¡  g’”ic_d©a gadd_deviû_sucûss_1 = { 3428 . £nd_Ýcode = MGMT_OP_ADD_DEVICE , 3429 . g£nd_·¿m = add_deviû_sucûss_·¿m_1 , 3430 . g£nd_Ën = ( add_deviû_sucûss_·¿m_1 ), 3431 . gex³ù_·¿m = add_deviû_r¥ , 3432 . gex³ù_Ën = ( add_deviû_r¥ ), 3433 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3434 . gex³ù_®t_ev = MGMT_EV_DEVICE_ADDED , 3435 . gex³ù_®t_ev_·¿m = add_deviû_sucûss_·¿m_1 , 3436 . gex³ù_®t_ev_Ën = ( add_deviû_sucûss_·¿m_1 ), 3439 cÚ¡ ušt8_t gadd_deviû_sucûss_·¿m_2 [] = { 3444 cÚ¡ ušt8_t gadd_deviû_r¥_Ë [] = { 3448 cÚ¡  g’”ic_d©a gadd_deviû_sucûss_2 = { 3449 . £nd_Ýcode = MGMT_OP_ADD_DEVICE , 3450 . g£nd_·¿m = add_deviû_sucûss_·¿m_2 , 3451 . g£nd_Ën = ( add_deviû_sucûss_·¿m_2 ), 3452 . gex³ù_·¿m = add_deviû_r¥_Ë , 3453 . gex³ù_Ën = ( add_deviû_r¥_Ë ), 3454 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3455 . gex³ù_®t_ev = MGMT_EV_DEVICE_ADDED , 3456 . gex³ù_®t_ev_·¿m = add_deviû_sucûss_·¿m_2 , 3457 . gex³ù_®t_ev_Ën = ( add_deviû_sucûss_·¿m_2 ), 3460 cÚ¡ ušt8_t gadd_deviû_sucûss_·¿m_3 [] = { 3465 cÚ¡  g’”ic_d©a gadd_deviû_sucûss_3 = { 3466 . £nd_Ýcode = MGMT_OP_ADD_DEVICE , 3467 . g£nd_·¿m = add_deviû_sucûss_·¿m_3 , 3468 . g£nd_Ën = ( add_deviû_sucûss_·¿m_3 ), 3469 . gex³ù_·¿m = add_deviû_r¥_Ë , 3470 . gex³ù_Ën = ( add_deviû_r¥_Ë ), 3471 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3472 . gex³ù_®t_ev = MGMT_EV_DEVICE_ADDED , 3473 . gex³ù_®t_ev_·¿m = add_deviû_sucûss_·¿m_3 , 3474 . gex³ù_®t_ev_Ën = ( add_deviû_sucûss_·¿m_3 ), 3477 cÚ¡  g’”ic_d©a gadd_deviû_sucûss_4 = { 3478 . £tup_£‰šgs = £‰šgs_pow”ed , 3479 . g£nd_Ýcode = MGMT_OP_ADD_DEVICE , 3480 . g£nd_·¿m = add_deviû_sucûss_·¿m_1 , 3481 . g£nd_Ën = ( add_deviû_sucûss_·¿m_1 ), 3482 . gex³ù_·¿m = add_deviû_r¥ , 3483 . gex³ù_Ën = ( add_deviû_r¥ ), 3484 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3485 . gex³ù_®t_ev = MGMT_EV_DEVICE_ADDED , 3486 . gex³ù_®t_ev_·¿m = add_deviû_sucûss_·¿m_1 , 3487 . gex³ù_®t_ev_Ën = ( add_deviû_sucûss_·¿m_1 ), 3488 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_SCAN_ENABLE , 3489 . gex³ù_hci_·¿m = £t_cÚÃùabË_sÿn_’abË_·¿m , 3490 . gex³ù_hci_Ën = ( £t_cÚÃùabË_sÿn_’abË_·¿m ), 3493 cÚ¡ ušt8_t gË_sÿn_’abË [] = { 0x01, 0x01 }; 3494 cÚ¡  g’”ic_d©a gadd_deviû_sucûss_5 = { 3495 . £tup_£‰šgs = £‰šgs_pow”ed_Ë , 3496 . g£nd_Ýcode = MGMT_OP_ADD_DEVICE , 3497 . g£nd_·¿m = add_deviû_sucûss_·¿m_2 , 3498 . g£nd_Ën = ( add_deviû_sucûss_·¿m_2 ), 3499 . gex³ù_·¿m = add_deviû_r¥_Ë , 3500 . gex³ù_Ën = ( add_deviû_r¥_Ë ), 3501 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3502 . gex³ù_®t_ev = MGMT_EV_DEVICE_ADDED , 3503 . gex³ù_®t_ev_·¿m = add_deviû_sucûss_·¿m_2 , 3504 . gex³ù_®t_ev_Ën = ( add_deviû_sucûss_·¿m_2 ), 3505 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_SCAN_ENABLE , 3506 . gex³ù_hci_·¿m = Ë_sÿn_’abË , 3507 . gex³ù_hci_Ën = ( Ë_sÿn_’abË ), 3510 cÚ¡ ušt8_t g»move_deviû_nv®_1 [] = { 3514 cÚ¡  g’”ic_d©a g»move_deviû_çž_1 = { 3515 . £nd_Ýcode = MGMT_OP_REMOVE_DEVICE , 3516 . g£nd_·¿m = »move_deviû_nv®_1 , 3517 . g£nd_Ën = ( »move_deviû_nv®_1 ), 3518 . gex³ù_·¿m = »move_deviû_nv®_1 , 3519 . gex³ù_Ën = ( »move_deviû_nv®_1 ), 3520 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3523 cÚ¡ ušt8_t g»move_deviû_·¿m_1 [] = { 3527 cÚ¡  g’”ic_d©a g»move_deviû_çž_2 = { 3528 . £nd_Ýcode = MGMT_OP_REMOVE_DEVICE , 3529 . g£nd_·¿m = »move_deviû_·¿m_1 , 3530 . g£nd_Ën = ( »move_deviû_·¿m_1 ), 3531 . gex³ù_·¿m = »move_deviû_·¿m_1 , 3532 . gex³ù_Ën = ( »move_deviû_·¿m_1 ), 3533 . gex³ù_¡©us = MGMT_STATUS_INVALID_PARAMS , 3536 cÚ¡  g’”ic_d©a g»move_deviû_sucûss_1 = { 3537 . £nd_Ýcode = MGMT_OP_REMOVE_DEVICE , 3538 . g£nd_·¿m = »move_deviû_·¿m_1 , 3539 . g£nd_Ën = ( »move_deviû_·¿m_1 ), 3540 . gex³ù_·¿m = »move_deviû_·¿m_1 , 3541 . gex³ù_Ën = ( »move_deviû_·¿m_1 ), 3542 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3543 . gex³ù_®t_ev = MGMT_EV_DEVICE_REMOVED , 3544 . gex³ù_®t_ev_·¿m = »move_deviû_·¿m_1 , 3545 . gex³ù_®t_ev_Ën = ( »move_deviû_·¿m_1 ), 3548 cÚ¡  g’”ic_d©a g»move_deviû_sucûss_2 = { 3549 . £nd_Ýcode = MGMT_OP_REMOVE_DEVICE , 3550 . g£nd_·¿m = »move_deviû_·¿m_1 , 3551 . g£nd_Ën = ( »move_deviû_·¿m_1 ), 3552 . gex³ù_·¿m = »move_deviû_·¿m_1 , 3553 . gex³ù_Ën = ( »move_deviû_·¿m_1 ), 3554 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3555 . gex³ù_®t_ev = MGMT_EV_DEVICE_REMOVED , 3556 . gex³ù_®t_ev_·¿m = »move_deviû_·¿m_1 , 3557 . gex³ù_®t_ev_Ën = ( »move_deviû_·¿m_1 ), 3558 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_SCAN_ENABLE , 3559 . gex³ù_hci_·¿m = £t_cÚÃùabË_off_sÿn_’abË_·¿m , 3560 . gex³ù_hci_Ën = ( £t_cÚÃùabË_off_sÿn_’abË_·¿m ), 3563 cÚ¡  g’”ic_d©a g»move_deviû_sucûss_3 = { 3564 . £tup_£‰šgs = £‰šgs_pow”ed , 3565 . g£nd_Ýcode = MGMT_OP_REMOVE_DEVICE , 3566 . g£nd_·¿m = »move_deviû_·¿m_1 , 3567 . g£nd_Ën = ( »move_deviû_·¿m_1 ), 3568 . gex³ù_·¿m = »move_deviû_·¿m_1 , 3569 . gex³ù_Ën = ( »move_deviû_·¿m_1 ), 3570 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3571 . gex³ù_®t_ev = MGMT_EV_DEVICE_REMOVED , 3572 . gex³ù_®t_ev_·¿m = »move_deviû_·¿m_1 , 3573 . gex³ù_®t_ev_Ën = ( »move_deviû_·¿m_1 ), 3574 . gex³ù_hci_commªd = BT_HCI_CMD_WRITE_SCAN_ENABLE , 3575 . gex³ù_hci_·¿m = £t_cÚÃùabË_off_sÿn_’abË_·¿m , 3576 . gex³ù_hci_Ën = ( £t_cÚÃùabË_off_sÿn_’abË_·¿m ), 3579 cÚ¡ ušt8_t g»move_deviû_·¿m_2 [] = { 3583 cÚ¡ ušt8_t g£t_Ë_sÿn_off [] = { 0x00, 0x00 }; 3584 cÚ¡  g’”ic_d©a g»move_deviû_sucûss_4 = { 3585 . £tup_£‰šgs = £‰šgs_pow”ed , 3586 . g£nd_Ýcode = MGMT_OP_REMOVE_DEVICE , 3587 . g£nd_·¿m = »move_deviû_·¿m_2 , 3588 . g£nd_Ën = ( »move_deviû_·¿m_2 ), 3589 . gex³ù_·¿m = »move_deviû_·¿m_2 , 3590 . gex³ù_Ën = ( »move_deviû_·¿m_2 ), 3591 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3592 . gex³ù_®t_ev = MGMT_EV_DEVICE_REMOVED , 3593 . gex³ù_®t_ev_·¿m = »move_deviû_·¿m_2 , 3594 . gex³ù_®t_ev_Ën = ( »move_deviû_·¿m_2 ), 3595 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_SCAN_ENABLE , 3596 . gex³ù_hci_·¿m = £t_Ë_sÿn_off , 3597 . gex³ù_hci_Ën = ( £t_Ë_sÿn_off ), 3600 cÚ¡  g’”ic_d©a g»move_deviû_sucûss_5 = { 3601 . £nd_Ýcode = MGMT_OP_REMOVE_DEVICE , 3602 . g£nd_·¿m = »move_deviû_·¿m_2 , 3603 . g£nd_Ën = ( »move_deviû_·¿m_2 ), 3604 . gex³ù_·¿m = »move_deviû_·¿m_2 , 3605 . gex³ù_Ën = ( »move_deviû_·¿m_2 ), 3606 . gex³ù_¡©us = MGMT_STATUS_SUCCESS , 3607 . gex³ù_®t_ev = MGMT_EV_DEVICE_REMOVED , 3608 . gex³ù_®t_ev_·¿m = »move_deviû_·¿m_2 , 3609 . gex³ù_®t_ev_Ën = ( »move_deviû_·¿m_2 ), 3610 . gex³ù_hci_commªd = BT_HCI_CMD_LE_SET_SCAN_ENABLE , 3611 . gex³ù_hci_·¿m = £t_Ë_sÿn_off , 3612 . gex³ù_hci_Ën = ( £t_Ë_sÿn_off ), 3615  $þ›Á_cmd_com¶‘e ( ušt16_t Ýcode , ušt8_t ¡©us , 3616 cÚ¡ * ·¿m , ušt8_t Ën , 3617 * u£r_d©a ) 3619  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3620 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 3621  btho¡ *bthost; 3623 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 3625  Ýcode ) { 3626  BT_HCI_CMD_WRITE_SCAN_ENABLE : 3627  BT_HCI_CMD_LE_SET_ADV_ENABLE : 3628 `‹¡”_´št ("Cl›Á s‘ cÚÃùabË stu 0x%02x", ¡©us ); 3629 ià(! ¡©us && ‹¡ -> þ›Á_’abË_s¥ ) { 3630 `btho¡_wr™e_s¥_mode ( btho¡ , 0x01); 3634  BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE : 3635 `‹¡”_´št ("Cl›ÁƒÇbË SSP stu 0x%02x", ¡©us ); 3641 ià( ¡©us ) 3642 `‹¡”_£tup_çžed (); 3644 `‹¡”_£tup_com¶‘e (); 3645 } } 3647  $£tup_btho¡ () 3649  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3650  btho¡ *bthost; 3652 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 3653 `btho¡_£t_cmd_com¶‘e_cb ( btho¡ , þ›Á_cmd_com¶‘e , d©a ); 3654 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_LE ) 3655 `btho¡_£t_adv_’abË ( btho¡ , 0x01, 0x00); 3657 `btho¡_wr™e_sÿn_’abË ( btho¡ , 0x03); 3658 } } 3660  $£tup_·œšg_acû±Ü (cÚ¡ * ‹¡_d©a ) 3662  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3663 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 3665 ià(! ‹¡ -> io_ÿp ) 3668 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_IO_CAPABILITY , d©a-> mgmt_šdex , 3669 ( ‹¡ -> io_ÿp ), &test->io_cap, 3670 NULL , NULL, NULL); 3672 `£tup_btho¡ (); 3673 } } 3675  $£tup_pow”ed_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 3676 cÚ¡ * ·¿m , * u£r_d©a ) 3678 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 3679 `‹¡”_£tup_çžed (); 3683 `‹¡”_´št ("Controller…owered on"); 3685 `£tup_btho¡ (); 3686 } } 3688  $£tup_þass (cÚ¡ * ‹¡_d©a ) 3690  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3691  ·¿m [] = { 0x01 }; 3692  þass_·¿m [] = { 0x01, 0x0c }; 3694 `‹¡”_´št ("Setting device class‡nd…owering on"); 3696 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_DEV_CLASS , d©a-> mgmt_šdex , 3697 ( þass_·¿m ), class_param, 3698 NULL , NULL, NULL); 3700 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 3701 ( ·¿m ),…aram, 3702 £tup_pow”ed_ÿÎback , NULL , NULL); 3703 } } 3705  $discov”šg_ev’t ( ušt16_t šdex , ušt16_ˆ Ëngth , 3706 cÚ¡ * ·¿m , * u£r_d©a ) 3708  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3709  id = `PTR_TO_UINT ( u£r_d©a ); 3710 cÚ¡  mgmt_ev_discov”šg * ev = ·¿m ; 3712 `mgmt_uÄegi¡” ( d©a -> mgmt , id ); 3714 ià( Ëngth !ð(* ev )) { 3715 `‹¡”_w¬n ("Incorrect discoveringƒvent†ength"); 3716 `‹¡”_£tup_çžed (); 3720 ià(! ev -> discov”šg ) { 3721 `‹¡”_w¬n ("Unexpected discovery stoppedƒvent"); 3722 `‹¡”_£tup_çžed (); 3726 `‹¡”_£tup_com¶‘e (); 3727 } } 3729  $£tup_discov”y_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 3730 cÚ¡ * ·¿m , * u£r_d©a ) 3732 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 3733 `‹¡”_£tup_çžed (); 3737 `‹¡”_´št ("Discovery started"); 3738 } } 3740  $£tup_¡¬t_discov”y (cÚ¡ * ‹¡_d©a ) 3742  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3743 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 3744 cÚ¡ * £nd_·¿m = ‹¡ -> £tup_£nd_·¿m ; 3745 ušt16_t £nd_Ën = ‹¡ -> £tup_£nd_Ën ; 3746  id = 0; 3748 id = `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_DISCOVERING , d©a-> mgmt_šdex , 3749 discov”šg_ev’t , `UINT_TO_PTR ( id ), NULL ); 3751 `mgmt_£nd ( d©a -> mgmt , ‹¡ -> £tup_£nd_Ýcode , d©a-> mgmt_šdex , 3752 £nd_Ën , £nd_·¿m , £tup_discov”y_ÿÎback , 3753 NULL , NULL); 3754 } } 3756  $£tup_muÉi_uuid32 (cÚ¡ * ‹¡_d©a ) 3758  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3759  ·¿m [] = { 0x01 }; 3761 `‹¡”_´št ("Powering on controller (with 32-bit UUID)"); 3763 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_SSP , d©a-> mgmt_šdex , 3764 ( ·¿m ),…¬am, NULL , NULL, NULL); 3766 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3767 ( add_uuid32_·¿m_1 ),‡dd_uuid32_param_1, 3768 NULL , NULL, NULL); 3769 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3770 ( add_uuid32_·¿m_2 ),‡dd_uuid32_param_2, 3771 NULL , NULL, NULL); 3772 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3773 ( add_uuid32_·¿m_3 ),‡dd_uuid32_param_3, 3774 NULL , NULL, NULL); 3776 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 3777 ( ·¿m ),…aram, 3778 £tup_pow”ed_ÿÎback , NULL , NULL); 3779 } } 3781  $£tup_muÉi_uuid32_2 (cÚ¡ * ‹¡_d©a ) 3783  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3784  ·¿m [] = { 0x01 }; 3785  uuid_·¿m [] = { 3789  i ; 3791 `‹¡”_´št ("Powering on controller (with many 32-bit UUIDs)"); 3793 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_SSP , d©a-> mgmt_šdex , 3794 ( ·¿m ),…¬am, NULL , NULL, NULL); 3796  i = 0; i < 58; i++) { 3797 ušt32_t v® = `htobl (0xfffffffà- i ); 3798 `memýy (& uuid_·¿m [12], & v® , (val)); 3799 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3800 ( uuid_·¿m ), uuid_param, 3801 NULL , NULL, NULL); 3804 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 3805 ( ·¿m ),…aram, 3806 £tup_pow”ed_ÿÎback , NULL , NULL); 3807 } } 3809  $£tup_muÉi_uuid128 (cÚ¡ * ‹¡_d©a ) 3811  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3812  ·¿m [] = { 0x01 }; 3814 `‹¡”_´št ("Powering on controller (with 128-bit UUID)"); 3816 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_SSP , d©a-> mgmt_šdex , 3817 ( ·¿m ),…¬am, NULL , NULL, NULL); 3819 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3820 ( add_uuid128_·¿m_1 ),‡dd_uuid128_param_1, 3821 NULL , NULL, NULL); 3823 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 3824 ( ·¿m ),…aram, 3825 £tup_pow”ed_ÿÎback , NULL , NULL); 3826 } } 3828  $£tup_muÉi_uuid128_2 (cÚ¡ * ‹¡_d©a ) 3830  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3831  ·¿m [] = { 0x01 }; 3832  uuid_·¿m [] = { 3836  i ; 3838 `‹¡”_´št ("Powering on controller (with many 128-bit UUIDs)"); 3840 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_SSP , d©a-> mgmt_šdex , 3841 ( ·¿m ),…¬am, NULL , NULL, NULL); 3843  i = 0; i < 13; i++) { 3844 uuid_·¿m [15] = i ; 3845 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3846 ( uuid_·¿m ), uuid_param, 3847 NULL , NULL, NULL); 3850 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 3851 ( ·¿m ),…aram, 3852 £tup_pow”ed_ÿÎback , NULL , NULL); 3853 } } 3855  $£tup_muÉi_uuid16 (cÚ¡ * ‹¡_d©a ) 3857  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3858  ·¿m [] = { 0x01 }; 3860 `‹¡”_´št ("Powering on controller (with SPP UUID)"); 3862 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_SSP , d©a-> mgmt_šdex , 3863 ( ·¿m ),…¬am, NULL , NULL, NULL); 3865 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3866 ( add_¥p_uuid_·¿m ),‡dd_spp_uuid_param, 3867 NULL , NULL, NULL); 3868 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3869 ( add_dun_uuid_·¿m ),‡dd_dun_uuid_param, 3870 NULL , NULL, NULL); 3871 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3872 ( add_sync_uuid_·¿m ),‡dd_sync_uuid_param, 3873 NULL , NULL, NULL); 3875 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 3876 ( ·¿m ),…aram, 3877 £tup_pow”ed_ÿÎback , NULL , NULL); 3878 } } 3880  $£tup_muÉi_uuid16_2 (cÚ¡ * ‹¡_d©a ) 3882  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3883  ·¿m [] = { 0x01 }; 3884  uuid_·¿m [] = { 3888  i ; 3890 `‹¡”_´št ("Powering on controller (with many 16-bit UUIDs)"); 3892 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_SSP , d©a-> mgmt_šdex , 3893 ( ·¿m ),…¬am, NULL , NULL, NULL); 3895  i = 0; i < 117; i++) { 3896 ušt16_t v® = `htobs ( i + 0x2000); 3897 `memýy (& uuid_·¿m [12], & v® , (val)); 3898 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3899 ( uuid_·¿m ), uuid_param, 3900 NULL , NULL, NULL); 3903 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 3904 ( ·¿m ),…aram, 3905 £tup_pow”ed_ÿÎback , NULL , NULL); 3906 } } 3908  $£tup_uuid_mix (cÚ¡ * ‹¡_d©a ) 3910  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3911  ·¿m [] = { 0x01 }; 3913 `‹¡”_´št ("Powering on controller (with mixed UUIDs)"); 3915 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_SSP , d©a-> mgmt_šdex , 3916 ( ·¿m ),…¬am, NULL , NULL, NULL); 3918 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3919 ( add_¥p_uuid_·¿m ),‡dd_spp_uuid_param, 3920 NULL , NULL, NULL); 3921 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3922 ( add_uuid32_·¿m_1 ),‡dd_uuid32_param_1, 3923 NULL , NULL, NULL); 3924 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3925 ( add_uuid128_·¿m_1 ),‡dd_uuid128_param_1, 3926 NULL , NULL, NULL); 3928 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3929 ( add_dun_uuid_·¿m ),‡dd_dun_uuid_param, 3930 NULL , NULL, NULL); 3931 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_UUID , d©a-> mgmt_šdex , 3932 ( add_uuid32_·¿m_2 ),‡dd_uuid32_param_2, 3933 NULL , NULL, NULL); 3935 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 3936 ( ·¿m ),…aram, 3937 £tup_pow”ed_ÿÎback , NULL , NULL); 3938 } } 3940  $£tup_add_deviû (cÚ¡ * ‹¡_d©a ) 3942  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3943  ·¿m [] = { 0x01 }; 3944 cÚ¡ * add_·¿m ; 3945 size_t add_·¿m_Ën ; 3947 `‹¡”_´št ("Powering on controller (with‡dded device))"); 3949 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_LE ) { 3950 add_·¿m = add_deviû_sucûss_·¿m_2 ; 3951 add_·¿m_Ën = ( add_deviû_sucûss_·¿m_2 ); 3953 add_·¿m = add_deviû_sucûss_·¿m_1 ; 3954 add_·¿m_Ën = ( add_deviû_sucûss_·¿m_1 ); 3957 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_ADD_DEVICE , d©a-> mgmt_šdex , 3958 add_·¿m_Ën , add_·¿m , NULL , NULL, NULL); 3960 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 3961 ( ·¿m ),…aram, 3962 £tup_pow”ed_ÿÎback , NULL , NULL); 3963 } } 3965  $£tup_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 3966 cÚ¡ * ·¿m , * u£r_d©a ) 3968  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 3970 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 3971 `‹¡”_£tup_çžed (); 3975 `‹¡”_´št ("Initial settings completed"); 3977 ià( d©a -> ‹¡_£tup ) 3978 d©a -> `‹¡_£tup (data); 3980 `£tup_btho¡ (); 3981 } } 3983  $pš_code_»que¡_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 3984 cÚ¡ * ·¿m , * u£r_d©a ) 3986 cÚ¡  mgmt_ev_pš_code_»que¡ * ev = ·¿m ; 3987  ‹¡_d©a * d©a = u£r_d©a ; 3988 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 3989  mgmt_ý_pš_code_»¶y ý ; 3991 `‹¡_cÚd™iÚ_com¶‘e ( d©a ); 3993 `mem£t (& ý , 0, (cp)); 3994 `memýy (& ý . addr , & ev ->addr, (cp.addr)); 3996 ià(! ‹¡ -> pš ) { 3997 `mgmt_»¶y ( d©a -> mgmt , MGMT_OP_PIN_CODE_NEG_REPLY , 3998 d©a -> mgmt_šdex , ( ý . addr ), &cp.addr, 3999 NULL , NULL, NULL); 4003 ý . pš_Ën = ‹¡ ->pin_len; 4004 `memýy ( ý . pš_code , ‹¡ -> pš ,e¡-> pš_Ën ); 4006 `mgmt_»¶y ( d©a -> mgmt , MGMT_OP_PIN_CODE_REPLY , d©a-> mgmt_šdex , 4007 ( ý ), &ý, NULL , NULL, NULL); 4008 } } 4010  $u£r_cÚfœm_»que¡_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 4011 cÚ¡ * ·¿m , 4012 * u£r_d©a ) 4014 cÚ¡  mgmt_ev_u£r_cÚfœm_»que¡ * ev = ·¿m ; 4015  ‹¡_d©a * d©a = u£r_d©a ; 4016 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 4017  mgmt_ý_u£r_cÚfœm_»¶y ý ; 4018 ušt16_t Ýcode ; 4020 ià( ‹¡ -> ju¡_wÜks ) { 4021 `‹¡”_w¬n ("User Confirmation„eceived for just-works case"); 4022 `‹¡”_‹¡_çžed (); 4026 `mem£t (& ý , 0, (cp)); 4027 `memýy (& ý . addr , & ev ->addr, (cp.addr)); 4029 ià( ‹¡ -> »jeù_cÚfœm ) 4030 Ýcode = MGMT_OP_USER_CONFIRM_NEG_REPLY ; 4032 Ýcode = MGMT_OP_USER_CONFIRM_REPLY ; 4034 `mgmt_»¶y ( d©a -> mgmt , Ýcode , d©a-> mgmt_šdex , ( ý ), &cp, 4035 NULL , NULL, NULL); 4036 } } 4038  $u£r_·sskey_»que¡_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 4039 cÚ¡ * ·¿m , 4040 * u£r_d©a ) 4042 cÚ¡  mgmt_ev_u£r_·sskey_»que¡ * ev = ·¿m ; 4043  ‹¡_d©a * d©a = u£r_d©a ; 4044 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 4045  mgmt_ý_u£r_·sskey_»¶y ý ; 4047 ià( ‹¡ -> ju¡_wÜks ) { 4048 `‹¡”_w¬n ("User Passkey Request for just-works case"); 4049 `‹¡”_‹¡_çžed (); 4053 `mem£t (& ý , 0, (cp)); 4054 `memýy (& ý . addr , & ev ->addr, (cp.addr)); 4056 ià( ‹¡ -> »jeù_cÚfœm ) { 4057 `mgmt_»¶y ( d©a -> mgmt , MGMT_OP_USER_PASSKEY_NEG_REPLY , 4058 d©a -> mgmt_šdex , ( ý . addr ), &cp.addr, 4059 NULL , NULL, NULL); 4063 `mgmt_»¶y ( d©a -> mgmt , MGMT_OP_USER_PASSKEY_REPLY , d©a-> mgmt_šdex , 4064 ( ý ), &ý, NULL , NULL, NULL); 4065 } } 4067  $‹¡_£tup (cÚ¡ * ‹¡_d©a ) 4069  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 4070 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 4071  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 4072 cÚ¡ ušt16_t * cmd ; 4074 ià(! ‹¡ ) 4075  ´oûed ; 4077 ià( ‹¡ -> pš ||e¡-> ex³ù_pš ) { 4078 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_PIN_CODE_REQUEST , 4079 d©a -> mgmt_šdex , pš_code_»que¡_ÿÎback , 4080 d©a , NULL ); 4081 `‹¡_add_cÚd™iÚ ( d©a ); 4084 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_USER_CONFIRM_REQUEST , 4085 d©a -> mgmt_šdex , u£r_cÚfœm_»que¡_ÿÎback , 4086 d©a , NULL ); 4088 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_USER_PASSKEY_REQUEST , 4089 d©a -> mgmt_šdex , u£r_·sskey_»que¡_ÿÎback , 4090 d©a , NULL ); 4092 ià( ‹¡ -> þ›Á_pš ) 4093 `btho¡_£t_pš_code ( btho¡ , ‹¡ -> þ›Á_pš , 4094 ‹¡ -> þ›Á_pš_Ën ); 4096 ià( ‹¡ -> þ›Á_io_ÿp ) 4097 `btho¡_£t_io_ÿ·bž™y ( btho¡ , ‹¡ -> þ›Á_io_ÿp ); 4099 ià( ‹¡ -> þ›Á_auth_»q ) 4100 `btho¡_£t_auth_»q ( btho¡ , ‹¡ -> þ›Á_auth_»q ); 4101 ià(! ‹¡ -> ju¡_wÜks ) 4102 `btho¡_£t_auth_»q ( btho¡ , 0x01); 4104 ià( ‹¡ -> þ›Á_»jeù_cÚfœm ) 4105 `btho¡_£t_»jeù_u£r_cÚfœm ( btho¡ , Œue ); 4107 ià( ‹¡ -> þ›Á_’abË_Ë ) 4108 `btho¡_wr™e_Ë_ho¡_suµÜ‹d ( btho¡ , 0x01); 4110 ià( ‹¡ -> þ›Á_’abË_sc ) 4111 `btho¡_£t_sc_suµÜt ( btho¡ , 0x01); 4113 ´oûed : 4114 ià(! ‹¡ || !‹¡-> £tup_£‰šgs ) { 4115 ià( d©a -> ‹¡_£tup ) 4116 d©a -> `‹¡_£tup (data); 4118 `‹¡”_£tup_com¶‘e (); 4122  cmd = ‹¡ -> £tup_£‰šgs ; *cmd; cmd++) { 4123  sim¶e_·¿m [] = { 0x01 }; 4124  discov_·¿m [] = { 0x01, 0x00, 0x00 }; 4125 * ·¿m = sim¶e_·¿m ; 4126 size_t ·¿m_size = ( sim¶e_·¿m ); 4127 mgmt_»que¡_func_t func = NULL ; 4131 ià(! cmd [1]) 4132 func = £tup_com¶‘e ; 4134 ià(* cmd =ð MGMT_OP_SET_DISCOVERABLE ) { 4135 ià( ‹¡ -> £tup_lim™ed_discov ) { 4136 discov_·¿m [0] = 0x02; 4137 discov_·¿m [1] = 0x01; 4139 ·¿m_size = ( discov_·¿m ); 4140 ·¿m = discov_·¿m ; 4143 ià(* cmd =ð MGMT_OP_SET_LE && ‹¡ -> £tup_nob»dr ) { 4144  off [] = { 0x00 }; 4145 `mgmt_£nd ( d©a -> mgmt , * cmd , d©a-> mgmt_šdex , 4146 ·¿m_size , ·¿m , NULL , NULL, NULL); 4147 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_BREDR , 4148 d©a -> mgmt_šdex , ( off ), off, 4149 func , d©a , NULL ); 4151 `mgmt_£nd ( d©a -> mgmt , * cmd , d©a-> mgmt_šdex , 4152 ·¿m_size , ·¿m , func , d©a , NULL ); 4155 } } 4157  $commªd_g’”ic_Ãw_£‰šgs ( ušt16_t šdex , ušt16_ˆ Ëngth , 4158 cÚ¡ * ·¿m , * u£r_d©a ) 4160  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 4162 `‹¡”_´št ("New settingsƒvent„eceived"); 4164 `mgmt_uÄegi¡” ( d©a -> mgmt , d©a-> mgmt_£‰šgs_id ); 4166 `‹¡”_‹¡_çžed (); 4167 } } 4169  $commªd_g’”ic_Ãw_£‰šgs_®t ( ušt16_t šdex , ušt16_ˆ Ëngth , 4170 cÚ¡ * ·¿m , * u£r_d©a ) 4172  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 4173 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 4174 ušt32_t £‰šgs ; 4176 ià( Ëngth != 4) { 4177 `‹¡”_w¬n ("Invalid…arameter size for‚ew settingsƒvent"); 4178 `‹¡”_‹¡_çžed (); 4182 £‰šgs = `g‘_Ë32 ( ·¿m ); 4184 `‹¡”_´št ("New s‘tšg 0x%08x„eûived", £‰šgs ); 4186 ià( ‹¡ -> ex³ù_£‰šgs_un£t ) { 4187 ià(( £‰šgs & ‹¡ -> ex³ù_£‰šgs_un£t ) != 0) 4189  dÚe ; 4192 ià(! ‹¡ -> ex³ù_£‰šgs_£t ) 4195 ià(( £‰šgs & ‹¡ -> ex³ù_£‰šgs_£t ) !=est->expect_settings_set) 4198 dÚe : 4199 `‹¡”_´št ("Unregistering‚ew settings‚otification"); 4201 `mgmt_uÄegi¡” ( d©a -> mgmt_®t , d©a-> mgmt_®t_£‰šgs_id ); 4203 `‹¡_cÚd™iÚ_com¶‘e ( d©a ); 4204 } } 4206  boÞ $v”ify_®t_ev (cÚ¡ * ·¿m , ušt16_t Ëngth ) 4208  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 4209 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 4211 ià( Ëngth !ð ‹¡ -> ex³ù_®t_ev_Ën ) { 4212 `‹¡”_w¬n ("Inv®id†’gth %u !ð%u", Ëngth , 4213 ‹¡ -> ex³ù_®t_ev_Ën ); 4214  çl£ ; 4217 ià( ‹¡ -> ex³ù_®t_ev_·¿m && 4218 `memcmp ( ‹¡ -> ex³ù_®t_ev_·¿m , ·¿m , Ëngth )) { 4219 `‹¡”_w¬n ("Event…arameters do‚ot match"); 4220  çl£ ; 4223  Œue ; 4224 } } 4226  $commªd_g’”ic_ev’t_®t ( ušt16_t šdex , ušt16_ˆ Ëngth , 4227 cÚ¡ * ·¿m , 4228 * u£r_d©a ) 4230  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 4231 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 4232 `boÞ (* v”ify )(cÚ¡ * ·¿m , ušt16_t Ëngth ); 4234 `‹¡”_´št ("New % ev’ˆ»ûived", `mgmt_ev¡r ( ‹¡ -> ex³ù_®t_ev )); 4236 `mgmt_uÄegi¡” ( d©a -> mgmt_®t , d©a-> mgmt_®t_ev_id ); 4238 ià( ‹¡ -> v”ify_®t_ev_func ) 4239 v”ify = ‹¡ -> v”ify_®t_ev_func ; 4241 v”ify = v”ify_®t_ev ; 4243 ià(! `v”ify ( ·¿m , Ëngth )) { 4244 `‹¡”_w¬n ("Incorrect %sƒvent…arameters", 4245 `mgmt_ev¡r ( ‹¡ -> ex³ù_®t_ev )); 4246 `‹¡”_‹¡_çžed (); 4250 `‹¡_cÚd™iÚ_com¶‘e ( d©a ); 4251 } } 4253  $commªd_g’”ic_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 4254 cÚ¡ * ·¿m , * u£r_d©a ) 4256  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 4257 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 4258 cÚ¡ * ex³ù_·¿m = ‹¡ ->expect_param; 4259 ušt16_t ex³ù_Ën = ‹¡ ->expect_len; 4261 `‹¡”_´št ("Command 0x%04x finished with status 0x%02x", 4262 ‹¡ -> £nd_Ýcode , ¡©us ); 4264 ià( ¡©us !ð ‹¡ -> ex³ù_¡©us ) { 4265 `‹¡”_‹¡_çžed (); 4269 ià( ‹¡ -> ex³ù_func ) 4270 ex³ù_·¿m = ‹¡ -> `ex³ù_func (& ex³ù_Ën ); 4272 ià( Ëngth !ð ex³ù_Ën ) { 4273 `‹¡”_‹¡_çžed (); 4277 ià( ex³ù_·¿m && ex³ù_Ën > 0 && 4278 `memcmp ( ·¿m , ex³ù_·¿m , Ëngth )) { 4279 `‹¡”_‹¡_çžed (); 4283 `‹¡_cÚd™iÚ_com¶‘e ( d©a ); 4284 } } 4286  $commªd_hci_ÿÎback ( ušt16_t Ýcode , cÚ¡ * ·¿m , 4287 ušt8_t Ëngth , * u£r_d©a ) 4289  ‹¡_d©a * d©a = u£r_d©a ; 4290 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 4291 cÚ¡ * ex³ù_hci_·¿m = ‹¡ ->expect_hci_param; 4292 ušt8_t ex³ù_hci_Ën = ‹¡ ->expect_hci_len; 4294 `‹¡”_´št ("HCI Commªd 0x%04x†’gth %u", Ýcode , Ëngth ); 4296 ià( Ýcode !ð ‹¡ -> ex³ù_hci_commªd ) 4299 ià( ‹¡ -> ex³ù_hci_func ) 4300 ex³ù_hci_·¿m = ‹¡ -> `ex³ù_hci_func (& ex³ù_hci_Ën ); 4302 ià( Ëngth !ð ex³ù_hci_Ën ) { 4303 `‹¡”_w¬n ("Invalid…arameter size for HCI command"); 4304 `‹¡”_‹¡_çžed (); 4308 ià( `memcmp ( ·¿m , ex³ù_hci_·¿m , Ëngth ) != 0) { 4309 `‹¡”_w¬n ("Unexpected HCI command…arameter value"); 4310 `‹¡”_‹¡_çžed (); 4314 `‹¡_cÚd™iÚ_com¶‘e ( d©a ); 4315 } } 4317  boÞ $pow”_off ( ušt16_t šdex ) 4319  sk , ”r ; 4321 sk = `hci_Ý’_dev ( šdex ); 4322 ià( sk < 0) 4323  çl£ ; 4325 ”r = `ioùl ( sk , HCIDEVDOWN , šdex ); 4327 `hci_þo£_dev ( sk ); 4329 ià( ”r < 0) 4330  çl£ ; 4332  Œue ; 4333 } } 4335  $‹¡_commªd_g’”ic (cÚ¡ * ‹¡_d©a ) 4337  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 4338 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 4339 cÚ¡ * £nd_·¿m = ‹¡ ->send_param; 4340 ušt16_t £nd_Ën = ‹¡ ->send_len; 4341  id ; 4342 ušt16_t šdex ; 4344 šdex = ‹¡ -> £nd_šdex_nÚe ? MGMT_INDEX_NONE : d©a -> mgmt_šdex ; 4346 ià( ‹¡ -> ex³ù_£‰šgs_£t ||e¡-> ex³ù_£‰šgs_un£t ) { 4347 `‹¡”_´št ("Registering‚ew settings‚otification"); 4349 id = `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_NEW_SETTINGS , šdex , 4350 commªd_g’”ic_Ãw_£‰šgs , NULL , NULL); 4351 d©a -> mgmt_£‰šgs_id = id ; 4353 id = `mgmt_»gi¡” ( d©a -> mgmt_®t , MGMT_EV_NEW_SETTINGS , šdex , 4354 commªd_g’”ic_Ãw_£‰šgs_®t , NULL , NULL); 4355 d©a -> mgmt_®t_£‰šgs_id = id ; 4356 `‹¡_add_cÚd™iÚ ( d©a ); 4359 ià( ‹¡ -> ex³ù_®t_ev ) { 4360 `‹¡”_´št ("Registering %s‚otification", 4361 `mgmt_ev¡r ( ‹¡ -> ex³ù_®t_ev )); 4362 id = `mgmt_»gi¡” ( d©a -> mgmt_®t , ‹¡ -> ex³ù_®t_ev , šdex , 4363 commªd_g’”ic_ev’t_®t , NULL , NULL); 4364 d©a -> mgmt_®t_ev_id = id ; 4365 `‹¡_add_cÚd™iÚ ( d©a ); 4368 ià( ‹¡ -> ex³ù_hci_commªd ) { 4369 `‹¡”_´št ("Registering HCI command callback"); 4370 `hc›mu_add_ma¡”_po¡_commªd_hook ( d©a -> hc›mu , 4371 commªd_hci_ÿÎback , d©a ); 4372 `‹¡_add_cÚd™iÚ ( d©a ); 4375 `‹¡”_´št ("S’dšg commªd 0x%04x", ‹¡ -> £nd_Ýcode ); 4377 ià( ‹¡ -> £nd_func ) 4378 £nd_·¿m = ‹¡ -> `£nd_func (& £nd_Ën ); 4380 ià( ‹¡ -> fÜû_pow”_off ) { 4381 `mgmt_£nd_nowa™ ( d©a -> mgmt , ‹¡ -> £nd_Ýcode , šdex , 4382 £nd_Ën , £nd_·¿m , 4383 commªd_g’”ic_ÿÎback , NULL , NULL); 4384 `pow”_off ( d©a -> mgmt_šdex ); 4386 `mgmt_£nd ( d©a -> mgmt , ‹¡ -> £nd_Ýcode , šdex , £nd_Ën , 4387 £nd_·¿m , commªd_g’”ic_ÿÎback , 4388 NULL , NULL); 4391 `‹¡_add_cÚd™iÚ ( d©a ); 4392 } } 4394  $·œšg_Ãw_cÚn ( ušt16_t hªdË , * u£r_d©a ) 4396  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 4397  btho¡ *bthost; 4399 `‹¡”_´št ("New cÚÃùiÚ w™h hªdË 0x%04x", hªdË ); 4401 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 4403 `btho¡_»que¡_auth ( btho¡ , hªdË ); 4404 } } 4406  $‹¡_·œšg_acû±Ü (cÚ¡ * ‹¡_d©a ) 4408  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 4409 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 4410 cÚ¡ ušt8_t * ma¡”_bdaddr ; 4411  btho¡ *bthost; 4412 ušt8_t addr_ty³ ; 4414 ià( ‹¡ -> ex³ù_®t_ev ) { 4415  id ; 4417 `‹¡”_´št ("Registering %s‚otification", 4418 `mgmt_ev¡r ( ‹¡ -> ex³ù_®t_ev )); 4419 id = `mgmt_»gi¡” ( d©a -> mgmt_®t , ‹¡ -> ex³ù_®t_ev , 4420 d©a -> mgmt_šdex , 4421 commªd_g’”ic_ev’t_®t , NULL , NULL); 4422 d©a -> mgmt_®t_ev_id = id ; 4423 `‹¡_add_cÚd™iÚ ( d©a ); 4426 ma¡”_bdaddr = `hc›mu_g‘_ma¡”_bdaddr ( d©a -> hc›mu ); 4427 ià(! ma¡”_bdaddr ) { 4428 `‹¡”_w¬n ("No master bdaddr"); 4429 `‹¡”_‹¡_çžed (); 4433 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 4434 `btho¡_£t_cÚÃù_cb ( btho¡ , ·œšg_Ãw_cÚn , d©a ); 4436 ià( d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_BREDRLE ) 4437 addr_ty³ = BDADDR_BREDR ; 4439 addr_ty³ = BDADDR_LE_PUBLIC ; 4441 `btho¡_hci_cÚÃù ( btho¡ , ma¡”_bdaddr , addr_ty³ ); 4442 } } 4444  $cÚÃùed_ev’t ( ušt16_t šdex , ušt16_ˆ Ëngth , cÚ¡ * ·¿m , 4445 * u£r_d©a ) 4447  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 4448 cÚ¡  g’”ic_d©a * ‹¡ = d©a -> ‹¡_d©a ; 4449 cÚ¡ * £nd_·¿m = ‹¡ ->send_param; 4450 ušt16_t £nd_Ën = ‹¡ ->send_len; 4452 `‹¡”_´št ("S’dšg commªd 0x%04x", ‹¡ -> £nd_Ýcode ); 4454 ià( ‹¡ -> £nd_func ) 4455 £nd_·¿m = ‹¡ -> `£nd_func (& £nd_Ën ); 4457 ià( ‹¡ -> fÜû_pow”_off ) { 4458 `mgmt_£nd_nowa™ ( d©a -> mgmt , ‹¡ -> £nd_Ýcode , šdex , 4459 £nd_Ën , £nd_·¿m , 4460 commªd_g’”ic_ÿÎback , NULL , NULL); 4461 `pow”_off ( d©a -> mgmt_šdex ); 4463 `mgmt_£nd ( d©a -> mgmt , ‹¡ -> £nd_Ýcode , šdex , £nd_Ën , 4464 £nd_·¿m , commªd_g’”ic_ÿÎback , 4465 NULL , NULL); 4468 `‹¡_add_cÚd™iÚ ( d©a ); 4471 `‹¡_cÚd™iÚ_com¶‘e ( d©a ); 4472 } } 4474  $‹¡_commªd_g’”ic_cÚÃù (cÚ¡ * ‹¡_d©a ) 4476  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 4477  id ; 4478 cÚ¡ ušt8_t * ma¡”_bdaddr ; 4479 ušt8_t addr_ty³ ; 4480  btho¡ *bthost; 4482 `‹¡”_´št ("Registering %s‚otification", 4483 `mgmt_ev¡r ( MGMT_EV_DEVICE_CONNECTED )); 4484 id = `mgmt_»gi¡” ( d©a -> mgmt_®t , MGMT_EV_DEVICE_CONNECTED , 4485 d©a -> mgmt_šdex , cÚÃùed_ev’t , 4486 NULL , NULL); 4487 d©a -> mgmt_®t_ev_id = id ; 4488 `‹¡_add_cÚd™iÚ ( d©a ); 4490 ma¡”_bdaddr = `hc›mu_g‘_ma¡”_bdaddr ( d©a -> hc›mu ); 4491 ià(! ma¡”_bdaddr ) { 4492 `‹¡”_w¬n ("No master bdaddr"); 4493 `‹¡”_‹¡_çžed (); 4497 addr_ty³ = d©a -> hc›mu_ty³ =ð HCIEMU_TYPE_BREDRLE ? BDADDR_BREDR : 4498 BDADDR_LE_PUBLIC ; 4500 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 4501 `btho¡_hci_cÚÃù ( btho¡ , ma¡”_bdaddr , addr_ty³ ); 4502 } } 4504  $maš ( ¬gc , * ¬gv []) 4506 `‹¡”_š™ (& ¬gc , & ¬gv ); 4508 `‹¡_b»d¾e ("Controller setup", 4509 NULL , NULL, cÚŒÞËr_£tup ); 4510 `‹¡_b»dr ("Controller setup (BR/EDR-only)", 4511 NULL , NULL, cÚŒÞËr_£tup ); 4512 `‹¡_Ë ("Controller setup (LE)", 4513 NULL , NULL, cÚŒÞËr_£tup ); 4515 `‹¡_b»d¾e ("Invalid command", 4516 & šv®id_commªd_‹¡ , 4517 NULL , ‹¡_commªd_g’”ic ); 4519 `‹¡_b»d¾e ("Read version - Success", 4520 & »ad_v”siÚ_sucûss_‹¡ , 4521 NULL , ‹¡_commªd_g’”ic ); 4522 `‹¡_b»d¾e ("Read version - Invalid…arameters", 4523 & »ad_v”siÚ_šv®id_·¿m_‹¡ , 4524 NULL , ‹¡_commªd_g’”ic ); 4525 `‹¡_b»d¾e ("Read version - Invalid index", 4526 & »ad_v”siÚ_šv®id_šdex_‹¡ , 4527 NULL , ‹¡_commªd_g’”ic ); 4528 `‹¡_b»d¾e ("Read commands - Invalid…arameters", 4529 & »ad_commªds_šv®id_·¿m_‹¡ , 4530 NULL , ‹¡_commªd_g’”ic ); 4531 `‹¡_b»d¾e ("Read commands - Invalid index", 4532 & »ad_commªds_šv®id_šdex_‹¡ , 4533 NULL , ‹¡_commªd_g’”ic ); 4534 `‹¡_b»d¾e ("Read index†ist - Invalid…arameters", 4535 & »ad_šdex_li¡_šv®id_·¿m_‹¡ , 4536 NULL , ‹¡_commªd_g’”ic ); 4537 `‹¡_b»d¾e ("Read index†ist - Invalid index", 4538 & »ad_šdex_li¡_šv®id_šdex_‹¡ , 4539 NULL , ‹¡_commªd_g’”ic ); 4540 `‹¡_b»d¾e ("Read info - Invalid…arameters", 4541 & »ad_šfo_šv®id_·¿m_‹¡ , 4542 NULL , ‹¡_commªd_g’”ic ); 4543 `‹¡_b»d¾e ("Read info - Invalid index", 4544 & »ad_šfo_šv®id_šdex_‹¡ , 4545 NULL , ‹¡_commªd_g’”ic ); 4547 `‹¡_b»d¾e ("Set…owered on - Success", 4548 & £t_pow”ed_Ú_sucûss_‹¡ , 4549 NULL , ‹¡_commªd_g’”ic ); 4550 `‹¡_b»d¾e ("Set…owered on - Invalid…arameters 1", 4551 & £t_pow”ed_Ú_šv®id_·¿m_‹¡_1 , 4552 NULL , ‹¡_commªd_g’”ic ); 4553 `‹¡_b»d¾e ("Set…owered on - Invalid…arameters 2", 4554 & £t_pow”ed_Ú_šv®id_·¿m_‹¡_2 , 4555 NULL , ‹¡_commªd_g’”ic ); 4556 `‹¡_b»d¾e ("Set…owered on - Invalid…arameters 3", 4557 & £t_pow”ed_Ú_šv®id_·¿m_‹¡_3 , 4558 NULL , ‹¡_commªd_g’”ic ); 4559 `‹¡_b»d¾e ("Set…owered on - Invalid index", 4560 & £t_pow”ed_Ú_šv®id_šdex_‹¡ , 4561 NULL , ‹¡_commªd_g’”ic ); 4563 `‹¡_b»d¾e ("Set…owered off - Success", 4564 & £t_pow”ed_off_sucûss_‹¡ , 4565 NULL , ‹¡_commªd_g’”ic ); 4566 `‹¡_b»d¾e ("Set…owered off - Class of Device", 4567 & £t_pow”ed_off_þass_‹¡ , 4568 £tup_þass , ‹¡_commªd_g’”ic ); 4569 `‹¡_b»d¾e ("Set…owered off - Invalid…arameters 1", 4570 & £t_pow”ed_off_šv®id_·¿m_‹¡_1 , 4571 NULL , ‹¡_commªd_g’”ic ); 4572 `‹¡_b»d¾e ("Set…owered off - Invalid…arameters 2", 4573 & £t_pow”ed_off_šv®id_·¿m_‹¡_2 , 4574 NULL , ‹¡_commªd_g’”ic ); 4575 `‹¡_b»d¾e ("Set…owered off - Invalid…arameters 3", 4576 & £t_pow”ed_off_šv®id_·¿m_‹¡_3 , 4577 NULL , ‹¡_commªd_g’”ic ); 4579 `‹¡_b»d¾e ("Set connectable on - Success 1", 4580 & £t_cÚÃùabË_Ú_sucûss_‹¡_1 , 4581 NULL , ‹¡_commªd_g’”ic ); 4582 `‹¡_b»d¾e ("Set connectable on - Success 2", 4583 & £t_cÚÃùabË_Ú_sucûss_‹¡_2 , 4584 NULL , ‹¡_commªd_g’”ic ); 4585 `‹¡_b»d¾e ("Set connectable on - Invalid…arameters 1", 4586 & £t_cÚÃùabË_Ú_šv®id_·¿m_‹¡_1 , 4587 NULL , ‹¡_commªd_g’”ic ); 4588 `‹¡_b»d¾e ("Set connectable on - Invalid…arameters 2", 4589 & £t_cÚÃùabË_Ú_šv®id_·¿m_‹¡_2 , 4590 NULL , ‹¡_commªd_g’”ic ); 4591 `‹¡_b»d¾e ("Set connectable on - Invalid…arameters 3", 4592 & £t_cÚÃùabË_Ú_šv®id_·¿m_‹¡_3 , 4593 NULL , ‹¡_commªd_g’”ic ); 4594 `‹¡_b»d¾e ("Set connectable on - Invalid index", 4595 & £t_cÚÃùabË_Ú_šv®id_šdex_‹¡ , 4596 NULL , ‹¡_commªd_g’”ic ); 4598 `‹¡_Ë ("Set connectable on (LE) - Success 1", 4599 & £t_cÚÃùabË_Ú_Ë_‹¡_1 , 4600 NULL , ‹¡_commªd_g’”ic ); 4601 `‹¡_Ë ("Set connectable on (LE) - Success 2", 4602 & £t_cÚÃùabË_Ú_Ë_‹¡_2 , 4603 NULL , ‹¡_commªd_g’”ic ); 4604 `‹¡_Ë ("Set connectable on (LE) - Success 3", 4605 & £t_cÚÃùabË_Ú_Ë_‹¡_3 , 4606 NULL , ‹¡_commªd_g’”ic ); 4608 `‹¡_b»d¾e ("Set connectable off - Success 1", 4609 & £t_cÚÃùabË_off_sucûss_‹¡_1 , 4610 NULL , ‹¡_commªd_g’”ic ); 4611 `‹¡_b»d¾e ("Set connectable off - Success 2", 4612 & £t_cÚÃùabË_off_sucûss_‹¡_2 , 4613 NULL , ‹¡_commªd_g’”ic ); 4614 `‹¡_b»d¾e ("Set connectable off - Success 3", 4615 & £t_cÚÃùabË_off_sucûss_‹¡_3 , 4616 NULL , ‹¡_commªd_g’”ic ); 4617 `‹¡_b»d¾e ("Set connectable off - Success 4", 4618 & £t_cÚÃùabË_off_sucûss_‹¡_4 , 4619 £tup_add_deviû , ‹¡_commªd_g’”ic ); 4621 `‹¡_Ë ("Set connectable off (LE) - Success 1", 4622 & £t_cÚÃùabË_off_Ë_‹¡_1 , 4623 NULL , ‹¡_commªd_g’”ic ); 4624 `‹¡_Ë ("Set connectable off (LE) - Success 2", 4625 & £t_cÚÃùabË_off_Ë_‹¡_2 , 4626 NULL , ‹¡_commªd_g’”ic ); 4627 `‹¡_Ë ("Set connectable off (LE) - Success 3", 4628 & £t_cÚÃùabË_off_Ë_‹¡_3 , 4629 NULL , ‹¡_commªd_g’”ic ); 4630 `‹¡_Ë ("Set connectable off (LE) - Success 4", 4631 & £t_cÚÃùabË_off_Ë_‹¡_4 , 4632 NULL , ‹¡_commªd_g’”ic ); 4634 `‹¡_b»d¾e ("Set fast connectable on - Success 1", 4635 & £t_ç¡_cÚn_Ú_sucûss_‹¡_1 , 4636 NULL , ‹¡_commªd_g’”ic ); 4637 `‹¡_Ë ("Set fast connectable on - Not Supported 1", 4638 & £t_ç¡_cÚn_Ú_nÙ_suµÜ‹d_‹¡_1 , 4639 NULL , ‹¡_commªd_g’”ic ); 4641 `‹¡_b»d¾e ("Set bondable on - Success", 4642 & £t_bÚdabË_Ú_sucûss_‹¡ , 4643 NULL , ‹¡_commªd_g’”ic ); 4644 `‹¡_b»d¾e ("Set bondable on - Invalid…arameters 1", 4645 & £t_bÚdabË_Ú_šv®id_·¿m_‹¡_1 , 4646 NULL , ‹¡_commªd_g’”ic ); 4647 `‹¡_b»d¾e ("Set bondable on - Invalid…arameters 2", 4648 & £t_bÚdabË_Ú_šv®id_·¿m_‹¡_2 , 4649 NULL , ‹¡_commªd_g’”ic ); 4650 `‹¡_b»d¾e ("Set bondable on - Invalid…arameters 3", 4651 & £t_bÚdabË_Ú_šv®id_·¿m_‹¡_3 , 4652 NULL , ‹¡_commªd_g’”ic ); 4653 `‹¡_b»d¾e ("Set bondable on - Invalid index", 4654 & £t_bÚdabË_Ú_šv®id_šdex_‹¡ , 4655 NULL , ‹¡_commªd_g’”ic ); 4657 `‹¡_b»d¾e ("Set discoverable on - Invalid…arameters 1", 4658 & £t_discov”abË_Ú_šv®id_·¿m_‹¡_1 , 4659 NULL , ‹¡_commªd_g’”ic ); 4660 `‹¡_b»d¾e ("Set discoverable on - Invalid…arameters 2", 4661 & £t_discov”abË_Ú_šv®id_·¿m_‹¡_2 , 4662 NULL , ‹¡_commªd_g’”ic ); 4663 `‹¡_b»d¾e ("Set discoverable on - Invalid…arameters 3", 4664 & £t_discov”abË_Ú_šv®id_·¿m_‹¡_3 , 4665 NULL , ‹¡_commªd_g’”ic ); 4666 `‹¡_b»d¾e ("Set discoverable on - Invalid…arameters 4", 4667 & £t_discov”abË_Ú_šv®id_·¿m_‹¡_4 , 4668 NULL , ‹¡_commªd_g’”ic ); 4669 `‹¡_b»d¾e ("Set discoverable on - Not…owered 1", 4670 & £t_discov”abË_Ú_nÙ_pow”ed_‹¡_1 , 4671 NULL , ‹¡_commªd_g’”ic ); 4672 `‹¡_b»d¾e ("Set discoverable on - Not…owered 2", 4673 & £t_discov”abË_Ú_nÙ_pow”ed_‹¡_2 , 4674 NULL , ‹¡_commªd_g’”ic ); 4675 `‹¡_b»d¾e ("Set discoverable on - Rejected 1", 4676 & £t_discov”abË_Ú_»jeùed_‹¡_1 , 4677 NULL , ‹¡_commªd_g’”ic ); 4678 `‹¡_b»d¾e ("Set discoverable on - Rejected 2", 4679 & £t_discov”abË_Ú_»jeùed_‹¡_2 , 4680 NULL , ‹¡_commªd_g’”ic ); 4681 `‹¡_b»d¾e ("Set discoverable on - Rejected 3", 4682 & £t_discov”abË_Ú_»jeùed_‹¡_3 , 4683 NULL , ‹¡_commªd_g’”ic ); 4684 `‹¡_b»d¾e ("Set discoverable on - Success 1", 4685 & £t_discov”abË_Ú_sucûss_‹¡_1 , 4686 NULL , ‹¡_commªd_g’”ic ); 4687 `‹¡_b»d¾e ("Set discoverable on - Success 2", 4688 & £t_discov”abË_Ú_sucûss_‹¡_2 , 4689 NULL , ‹¡_commªd_g’”ic ); 4690 `‹¡_Ë ("Set discoverable on (LE) - Success 1", 4691 & £t_discov_Ú_Ë_sucûss_1 , 4692 NULL , ‹¡_commªd_g’”ic ); 4693 `‹¡_b»d¾e ("Set discoverable off - Success 1", 4694 & £t_discov”abË_off_sucûss_‹¡_1 , 4695 NULL , ‹¡_commªd_g’”ic ); 4696 `‹¡_b»d¾e ("Set discoverable off - Success 2", 4697 & £t_discov”abË_off_sucûss_‹¡_2 , 4698 NULL , ‹¡_commªd_g’”ic ); 4699 `‹¡_b»d¾e ("Set†imited discoverable on - Success 1", 4700 & £t_lim™ed_discov_Ú_sucûss_1 , 4701 NULL , ‹¡_commªd_g’”ic ); 4702 `‹¡_b»d¾e ("Set†imited discoverable on - Success 2", 4703 & £t_lim™ed_discov_Ú_sucûss_2 , 4704 NULL , ‹¡_commªd_g’”ic ); 4705 `‹¡_b»d¾e ("Set†imited discoverable on - Success 3", 4706 & £t_lim™ed_discov_Ú_sucûss_3 , 4707 NULL , ‹¡_commªd_g’”ic ); 4708 `‹¡_Ë ("Set†imited discoverable on (LE) - Success 1", 4709 & £t_lim™ed_discov_Ú_Ë_sucûss_1 , 4710 NULL , ‹¡_commªd_g’”ic ); 4712 `‹¡_b»d¾e ("Set†ink security on - Success 1", 4713 & £t_lšk_£c_Ú_sucûss_‹¡_1 , 4714 NULL , ‹¡_commªd_g’”ic ); 4715 `‹¡_b»d¾e ("Set†ink security on - Success 2", 4716 & £t_lšk_£c_Ú_sucûss_‹¡_2 , 4717 NULL , ‹¡_commªd_g’”ic ); 4718 `‹¡_b»d¾e ("Set†ink security on - Success 3", 4719 & £t_lšk_£c_Ú_sucûss_‹¡_3 , 4720 NULL , ‹¡_commªd_g’”ic ); 4721 `‹¡_b»d¾e ("Set†ink security on - Invalid…arameters 1", 4722 & £t_lšk_£c_Ú_šv®id_·¿m_‹¡_1 , 4723 NULL , ‹¡_commªd_g’”ic ); 4724 `‹¡_b»d¾e ("Set†ink security on - Invalid…arameters 2", 4725 & £t_lšk_£c_Ú_šv®id_·¿m_‹¡_2 , 4726 NULL , ‹¡_commªd_g’”ic ); 4727 `‹¡_b»d¾e ("Set†ink security on - Invalid…arameters 3", 4728 & £t_lšk_£c_Ú_šv®id_·¿m_‹¡_3 , 4729 NULL , ‹¡_commªd_g’”ic ); 4730 `‹¡_b»d¾e ("Set†ink security on - Invalid index", 4731 & £t_lšk_£c_Ú_šv®id_šdex_‹¡ , 4732 NULL , ‹¡_commªd_g’”ic ); 4734 `‹¡_b»d¾e ("Set†ink security off - Success 1", 4735 & £t_lšk_£c_off_sucûss_‹¡_1 , 4736 NULL , ‹¡_commªd_g’”ic ); 4737 `‹¡_b»d¾e ("Set†ink security off - Success 2", 4738 & £t_lšk_£c_off_sucûss_‹¡_2 , 4739 NULL , ‹¡_commªd_g’”ic ); 4741 `‹¡_b»d¾e ("Set SSP on - Success 1", 4742 & £t_s¥_Ú_sucûss_‹¡_1 , 4743 NULL , ‹¡_commªd_g’”ic ); 4744 `‹¡_b»d¾e ("Set SSP on - Success 2", 4745 & £t_s¥_Ú_sucûss_‹¡_2 , 4746 NULL , ‹¡_commªd_g’”ic ); 4747 `‹¡_b»d¾e ("Set SSP on - Success 3", 4748 & £t_s¥_Ú_sucûss_‹¡_3 , 4749 NULL , ‹¡_commªd_g’”ic ); 4750 `‹¡_b»d¾e ("Set SSP on - Invalid…arameters 1", 4751 & £t_s¥_Ú_šv®id_·¿m_‹¡_1 , 4752 NULL , ‹¡_commªd_g’”ic ); 4753 `‹¡_b»d¾e ("Set SSP on - Invalid…arameters 2", 4754 & £t_s¥_Ú_šv®id_·¿m_‹¡_2 , 4755 NULL , ‹¡_commªd_g’”ic ); 4756 `‹¡_b»d¾e ("Set SSP on - Invalid…arameters 3", 4757 & £t_s¥_Ú_šv®id_·¿m_‹¡_3 , 4758 NULL , ‹¡_commªd_g’”ic ); 4759 `‹¡_b»d¾e ("Set SSP on - Invalid index", 4760 & £t_s¥_Ú_šv®id_šdex_‹¡ , 4761 NULL , ‹¡_commªd_g’”ic ); 4763 `‹¡_b»d¾e ("Set Secure Connections on - Success 1", 4764 & £t_sc_Ú_sucûss_‹¡_1 , 4765 NULL , ‹¡_commªd_g’”ic ); 4766 `‹¡_b»d¾e ("Set Secure Connections on - Success 2", 4767 & £t_sc_Ú_sucûss_‹¡_2 , 4768 NULL , ‹¡_commªd_g’”ic ); 4769 `‹¡_b»d¾e ("Set Secure Connections on - Invalid…arams 1", 4770 & £t_sc_Ú_šv®id_·¿m_‹¡_1 , 4771 NULL , ‹¡_commªd_g’”ic ); 4772 `‹¡_b»d¾e ("Set Secure Connections on - Invalid…arams 2", 4773 & £t_sc_Ú_šv®id_·¿m_‹¡_2 , 4774 NULL , ‹¡_commªd_g’”ic ); 4775 `‹¡_b»d¾e ("Set Secure Connections on - Invalid…arams 3", 4776 & £t_sc_Ú_šv®id_·¿m_‹¡_3 , 4777 NULL , ‹¡_commªd_g’”ic ); 4778 `‹¡_b»d¾e ("Set Secure Connections on - Invalid index", 4779 & £t_sc_Ú_šv®id_šdex_‹¡ , 4780 NULL , ‹¡_commªd_g’”ic ); 4781 `‹¡_b»dr ("Set Secure Connections on - Not supported 1", 4782 & £t_sc_Ú_nÙ_suµÜ‹d_‹¡_1 , 4783 NULL , ‹¡_commªd_g’”ic ); 4784 `‹¡_b»dr ("Set Secure Connections on - Not supported 2", 4785 & £t_sc_Ú_nÙ_suµÜ‹d_‹¡_2 , 4786 NULL , ‹¡_commªd_g’”ic ); 4788 `‹¡_b»d¾e ("Set Secure Connections Only on - Success 1", 4789 & £t_sc_Úly_Ú_sucûss_‹¡_1 , 4790 NULL , ‹¡_commªd_g’”ic ); 4791 `‹¡_b»d¾e ("Set Secure Connections Only on - Success 2", 4792 & £t_sc_Úly_Ú_sucûss_‹¡_2 , 4793 NULL , ‹¡_commªd_g’”ic ); 4795 `‹¡_b»d¾e ("Set High Speed on - Success", 4796 & £t_hs_Ú_sucûss_‹¡ , 4797 NULL , ‹¡_commªd_g’”ic ); 4798 `‹¡_b»d¾e ("Set High Speed on - Invalid…arameters 1", 4799 & £t_hs_Ú_šv®id_·¿m_‹¡_1 , 4800 NULL , ‹¡_commªd_g’”ic ); 4801 `‹¡_b»d¾e ("Set High Speed on - Invalid…arameters 2", 4802 & £t_hs_Ú_šv®id_·¿m_‹¡_2 , 4803 NULL , ‹¡_commªd_g’”ic ); 4804 `‹¡_b»d¾e ("Set High Speed on - Invalid…arameters 3", 4805 & £t_hs_Ú_šv®id_·¿m_‹¡_3 , 4806 NULL , ‹¡_commªd_g’”ic ); 4807 `‹¡_b»d¾e ("Set High Speed on - Invalid index", 4808 & £t_hs_Ú_šv®id_šdex_‹¡ , 4809 NULL , ‹¡_commªd_g’”ic ); 4811 `‹¡_b»d¾e ("Set Low Energy on - Success 1", 4812 & £t_Ë_Ú_sucûss_‹¡_1 , 4813 NULL , ‹¡_commªd_g’”ic ); 4814 `‹¡_b»d¾e ("Set Low Energy on - Success 2", 4815 & £t_Ë_Ú_sucûss_‹¡_2 , 4816 NULL , ‹¡_commªd_g’”ic ); 4817 `‹¡_b»d¾e ("Set Low Energy on - Success 3", 4818 & £t_Ë_Ú_sucûss_‹¡_3 , 4819 NULL , ‹¡_commªd_g’”ic ); 4820 `‹¡_b»d¾e ("Set Low Energy on - Invalid…arameters 1", 4821 & £t_Ë_Ú_šv®id_·¿m_‹¡_1 , 4822 NULL , ‹¡_commªd_g’”ic ); 4823 `‹¡_b»d¾e ("Set Low Energy on - Invalid…arameters 2", 4824 & £t_Ë_Ú_šv®id_·¿m_‹¡_2 , 4825 NULL , ‹¡_commªd_g’”ic ); 4826 `‹¡_b»d¾e ("Set Low Energy on - Invalid…arameters 3", 4827 & £t_Ë_Ú_šv®id_·¿m_‹¡_3 , 4828 NULL , ‹¡_commªd_g’”ic ); 4829 `‹¡_b»d¾e ("Set Low Energy on - Invalid index", 4830 & £t_Ë_Ú_šv®id_šdex_‹¡ , 4831 NULL , ‹¡_commªd_g’”ic ); 4833 `‹¡_b»d¾e ("Set Advertising on - Success 1", 4834 & £t_adv_Ú_sucûss_‹¡_1 , 4835 NULL , ‹¡_commªd_g’”ic ); 4836 `‹¡_b»d¾e ("Set Advertising on - Success 2", 4837 & £t_adv_Ú_sucûss_‹¡_2 , 4838 NULL , ‹¡_commªd_g’”ic ); 4839 `‹¡_b»d¾e ("Set Advertising on - Rejected 1", 4840 & £t_adv_Ú_»jeùed_‹¡_1 , 4841 NULL , ‹¡_commªd_g’”ic ); 4843 `‹¡_b»d¾e ("Set BR/EDR off - Success 1", 4844 & £t_b»dr_off_sucûss_‹¡_1 , 4845 NULL , ‹¡_commªd_g’”ic ); 4846 `‹¡_b»d¾e ("Set BR/EDR on - Success 1", 4847 & £t_b»dr_Ú_sucûss_‹¡_1 , 4848 NULL , ‹¡_commªd_g’”ic ); 4849 `‹¡_b»d¾e ("Set BR/EDR on - Success 2", 4850 & £t_b»dr_Ú_sucûss_‹¡_2 , 4851 NULL , ‹¡_commªd_g’”ic ); 4852 `‹¡_b»dr ("Set BR/EDR off - Not Supported 1", 4853 & £t_b»dr_off_nÙsuµ_‹¡ , 4854 NULL , ‹¡_commªd_g’”ic ); 4855 `‹¡_Ë ("Set BR/EDR off - Not Supported 2", 4856 & £t_b»dr_off_nÙsuµ_‹¡ , 4857 NULL , ‹¡_commªd_g’”ic ); 4858 `‹¡_b»d¾e ("Set BR/EDR off - Rejected 1", 4859 & £t_b»dr_off_çžu»_‹¡_1 , 4860 NULL , ‹¡_commªd_g’”ic ); 4861 `‹¡_b»d¾e ("Set BR/EDR off - Rejected 2", 4862 & £t_b»dr_off_çžu»_‹¡_2 , 4863 NULL , ‹¡_commªd_g’”ic ); 4864 `‹¡_b»d¾e ("Set BR/EDR off - Invalid Parameters 1", 4865 & £t_b»dr_off_çžu»_‹¡_3 , 4866 NULL , ‹¡_commªd_g’”ic ); 4868 `‹¡_b»dr ("Set Local Name - Success 1", 4869 & £t_loÿl_Çme_‹¡_1 , 4870 NULL , ‹¡_commªd_g’”ic ); 4871 `‹¡_b»dr ("Set Local Name - Success 2", 4872 & £t_loÿl_Çme_‹¡_2 , 4873 NULL , ‹¡_commªd_g’”ic ); 4874 `‹¡_b»dr ("Set Local Name - Success 3", 4875 & £t_loÿl_Çme_‹¡_3 , 4876 NULL , ‹¡_commªd_g’”ic ); 4878 `‹¡_b»d¾e ("Start Discovery - Not…owered 1", 4879 & ¡¬t_discov”y_nÙ_pow”ed_‹¡_1 , 4880 NULL , ‹¡_commªd_g’”ic ); 4881 `‹¡_b»d¾e ("Start Discovery - Invalid…arameters 1", 4882 & ¡¬t_discov”y_šv®id_·¿m_‹¡_1 , 4883 NULL , ‹¡_commªd_g’”ic ); 4884 `‹¡_b»d¾e ("Start Discovery - Not supported 1", 4885 & ¡¬t_discov”y_nÙ_suµÜ‹d_‹¡_1 , 4886 NULL , ‹¡_commªd_g’”ic ); 4887 `‹¡_b»d¾e ("Start Discovery - Success 1", 4888 & ¡¬t_discov”y_v®id_·¿m_‹¡_1 , 4889 NULL , ‹¡_commªd_g’”ic ); 4890 `‹¡_Ë ("Start Discovery - Success 2", 4891 & ¡¬t_discov”y_v®id_·¿m_‹¡_2 , 4892 NULL , ‹¡_commªd_g’”ic ); 4893 `‹¡_b»d¾e ("Start Discovery - Power Off 1", 4894 & ¡¬t_discov”y_v®id_·¿m_pow”_off_1 , 4895 NULL , ‹¡_commªd_g’”ic ); 4897 `‹¡_b»d¾e ("Stop Discovery - Success 1", 4898 & ¡Ý_discov”y_sucûss_‹¡_1 , 4899 £tup_¡¬t_discov”y , ‹¡_commªd_g’”ic ); 4900 `‹¡_b»dr ("Stop Discovery - BR/EDR (Inquiry) Success 1", 4901 & ¡Ý_discov”y_b»dr_sucûss_‹¡_1 , 4902 £tup_¡¬t_discov”y , ‹¡_commªd_g’”ic ); 4903 `‹¡_b»d¾e ("Stop Discovery - Rejected 1", 4904 & ¡Ý_discov”y_»jeùed_‹¡_1 , 4905 NULL , ‹¡_commªd_g’”ic ); 4906 `‹¡_b»d¾e ("Stop Discovery - Invalid…arameters 1", 4907 & ¡Ý_discov”y_šv®id_·¿m_‹¡_1 , 4908 £tup_¡¬t_discov”y , ‹¡_commªd_g’”ic ); 4910 `‹¡_b»d¾e ("Start Service Discovery - Not…owered 1", 4911 & ¡¬t_£rviû_discov”y_nÙ_pow”ed_‹¡_1 , 4912 NULL , ‹¡_commªd_g’”ic ); 4913 `‹¡_b»d¾e ("Start Service Discovery - Invalid…arameters 1", 4914 & ¡¬t_£rviû_discov”y_šv®id_·¿m_‹¡_1 , 4915 NULL , ‹¡_commªd_g’”ic ); 4916 `‹¡_b»d¾e ("Start Service Discovery - Not supported 1", 4917 & ¡¬t_£rviû_discov”y_nÙ_suµÜ‹d_‹¡_1 , 4918 NULL , ‹¡_commªd_g’”ic ); 4919 `‹¡_b»d¾e ("Start Service Discovery - Success 1", 4920 & ¡¬t_£rviû_discov”y_v®id_·¿m_‹¡_1 , 4921 NULL , ‹¡_commªd_g’”ic ); 4922 `‹¡_Ë ("Start Service Discovery - Success 2", 4923 & ¡¬t_£rviû_discov”y_v®id_·¿m_‹¡_2 , 4924 NULL , ‹¡_commªd_g’”ic ); 4926 `‹¡_b»d¾e ("Set Device Class - Success 1", 4927 & £t_dev_þass_v®id_·¿m_‹¡_1 , 4928 NULL , ‹¡_commªd_g’”ic ); 4929 `‹¡_b»d¾e ("Set Device Class - Success 2", 4930 & £t_dev_þass_v®id_·¿m_‹¡_2 , 4931 NULL , ‹¡_commªd_g’”ic ); 4932 `‹¡_b»d¾e ("Set Device Class - Invalid…arameters 1", 4933 & £t_dev_þass_šv®id_·¿m_‹¡_1 , 4934 NULL , ‹¡_commªd_g’”ic ); 4936 `‹¡_b»d¾e ("Add UUID - UUID-16 1", 4937 & add_uuid16_‹¡_1 , 4938 NULL , ‹¡_commªd_g’”ic ); 4939 `‹¡_b»d¾e ("Add UUID - UUID-16 multiple 1", 4940 & add_muÉi_uuid16_‹¡_1 , 4941 £tup_muÉi_uuid16 , ‹¡_commªd_g’”ic ); 4942 `‹¡_b»d¾e ("Add UUID - UUID-16…artial 1", 4943 & add_muÉi_uuid16_‹¡_2 , 4944 £tup_muÉi_uuid16_2 , ‹¡_commªd_g’”ic ); 4945 `‹¡_b»d¾e ("Add UUID - UUID-32 1", 4946 & add_uuid32_‹¡_1 , 4947 NULL , ‹¡_commªd_g’”ic ); 4948 `‹¡_b»d¾e ("Add UUID - UUID-32 multiple 1", 4949 & add_uuid32_muÉi_‹¡_1 , 4950 £tup_muÉi_uuid32 , ‹¡_commªd_g’”ic ); 4951 `‹¡_b»d¾e ("Add UUID - UUID-32…artial 1", 4952 & add_uuid32_muÉi_‹¡_2 , 4953 £tup_muÉi_uuid32_2 , ‹¡_commªd_g’”ic ); 4954 `‹¡_b»d¾e ("Add UUID - UUID-128 1", 4955 & add_uuid128_‹¡_1 , 4956 NULL , ‹¡_commªd_g’”ic ); 4957 `‹¡_b»d¾e ("Add UUID - UUID-128 multiple 1", 4958 & add_uuid128_muÉi_‹¡_1 , 4959 £tup_muÉi_uuid128 , ‹¡_commªd_g’”ic ); 4960 `‹¡_b»d¾e ("Add UUID - UUID-128…artial 1", 4961 & add_uuid128_muÉi_‹¡_2 , 4962 £tup_muÉi_uuid128_2 , ‹¡_commªd_g’”ic ); 4963 `‹¡_b»d¾e ("Add UUID - UUID mix", 4964 & add_uuid_mix_‹¡_1 , 4965 £tup_uuid_mix , ‹¡_commªd_g’”ic ); 4967 `‹¡_b»d¾e ("Load Link Keys - Empty List Success 1", 4968 & lßd_lšk_keys_sucûss_‹¡_1 , 4969 NULL , ‹¡_commªd_g’”ic ); 4970 `‹¡_b»d¾e ("Load Link Keys - Empty List Success 2", 4971 & lßd_lšk_keys_sucûss_‹¡_2 , 4972 NULL , ‹¡_commªd_g’”ic ); 4973 `‹¡_b»d¾e ("Load Link Keys - Invalid Parameters 1", 4974 & lßd_lšk_keys_šv®id_·¿ms_‹¡_1 , 4975 NULL , ‹¡_commªd_g’”ic ); 4976 `‹¡_b»d¾e ("Load Link Keys - Invalid Parameters 2", 4977 & lßd_lšk_keys_šv®id_·¿ms_‹¡_2 , 4978 NULL , ‹¡_commªd_g’”ic ); 4979 `‹¡_b»d¾e ("Load Link Keys - Invalid Parameters 3", 4980 & lßd_lšk_keys_šv®id_·¿ms_‹¡_3 , 4981 NULL , ‹¡_commªd_g’”ic ); 4983 `‹¡_b»d¾e ("Load Long Term Keys - Success 1", 4984 & lßd_Éks_sucûss_‹¡_1 , 4985 NULL , ‹¡_commªd_g’”ic ); 4986 `‹¡_b»d¾e ("Load Long Term Keys - Invalid Parameters 1", 4987 & lßd_Éks_šv®id_·¿ms_‹¡_1 , 4988 NULL , ‹¡_commªd_g’”ic ); 4989 `‹¡_b»d¾e ("Load Long Term Keys - Invalid Parameters 2", 4990 & lßd_Éks_šv®id_·¿ms_‹¡_2 , 4991 NULL , ‹¡_commªd_g’”ic ); 4992 `‹¡_b»d¾e ("Load Long Term Keys - Invalid Parameters 3", 4993 & lßd_Éks_šv®id_·¿ms_‹¡_3 , 4994 NULL , ‹¡_commªd_g’”ic ); 4995 `‹¡_b»d¾e ("Load Long Term Keys - Invalid Parameters 4", 4996 & lßd_Éks_šv®id_·¿ms_‹¡_4 , 4997 NULL , ‹¡_commªd_g’”ic ); 4999 `‹¡_b»d¾e ("Set IO Capability - Invalid Params 1", 5000 & £t_io_ÿp_šv®id_·¿m_‹¡_1 , 5001 NULL , ‹¡_commªd_g’”ic ); 5003 `‹¡_b»d¾e ("Pair Device - Not Powered 1", 5004 & ·œ_deviû_nÙ_pow”ed_‹¡_1 , 5005 NULL , ‹¡_commªd_g’”ic ); 5006 `‹¡_b»d¾e ("Pair Device - Power off 1", 5007 & ·œ_deviû_pow”_off_‹¡_1 , 5008 NULL , ‹¡_commªd_g’”ic ); 5009 `‹¡_b»d¾e ("Pair Device - Invalid Parameters 1", 5010 & ·œ_deviû_šv®id_·¿m_‹¡_1 , 5011 NULL , ‹¡_commªd_g’”ic ); 5012 `‹¡_b»d¾e ("Pair Device - Invalid Parameters 2", 5013 & ·œ_deviû_šv®id_·¿m_‹¡_2 , 5014 NULL , ‹¡_commªd_g’”ic ); 5015 `‹¡_b»d¾e ("Pair Device - Legacy Success 1", 5016 & ·œ_deviû_sucûss_‹¡_1 , 5017 NULL , ‹¡_commªd_g’”ic ); 5018 `‹¡_b»d¾e ("Pair Device - Legacy Non-bondable 1", 5019 & ·œ_deviû_Ëgacy_nÚbÚdabË_1 , 5020 NULL , ‹¡_commªd_g’”ic ); 5021 `‹¡_b»d¾e ("Pair Device - Sec Mode 3 Success 1", 5022 & ·œ_deviû_sucûss_‹¡_2 , 5023 NULL , ‹¡_commªd_g’”ic ); 5024 `‹¡_b»d¾e ("Pair Device - Legacy Reject 1", 5025 & ·œ_deviû_»jeù_‹¡_1 , 5026 NULL , ‹¡_commªd_g’”ic ); 5027 `‹¡_b»d¾e ("Pair Device - Legacy Reject 2", 5028 & ·œ_deviû_»jeù_‹¡_2 , 5029 NULL , ‹¡_commªd_g’”ic ); 5030 `‹¡_b»d¾e ("Pair Device - Sec Mode 3 Reject 1", 5031 & ·œ_deviû_»jeù_‹¡_3 , 5032 NULL , ‹¡_commªd_g’”ic ); 5033 `‹¡_b»d¾e ("Pair Device - Sec Mode 3 Reject 2", 5034 & ·œ_deviû_»jeù_‹¡_4 , 5035 NULL , ‹¡_commªd_g’”ic ); 5036 `‹¡_b»d¾e ("Pair Device - SSP Just-Works Success 1", 5037 & ·œ_deviû_s¥_‹¡_1 , 5038 NULL , ‹¡_commªd_g’”ic ); 5039 `‹¡_b»d¾e ("Pair Device - SSP Just-Works Success 2", 5040 & ·œ_deviû_s¥_‹¡_2 , 5041 NULL , ‹¡_commªd_g’”ic ); 5042 `‹¡_b»d¾e ("Pair Device - SSP Just-Works Success 3", 5043 & ·œ_deviû_s¥_‹¡_3 , 5044 NULL , ‹¡_commªd_g’”ic ); 5045 `‹¡_b»d¾e ("Pair Device - SSP Confirm Success 1", 5046 & ·œ_deviû_s¥_‹¡_4 , 5047 NULL , ‹¡_commªd_g’”ic ); 5048 `‹¡_b»d¾e ("Pair Device - SSP Confirm Success 2", 5049 & ·œ_deviû_s¥_‹¡_5 , 5050 NULL , ‹¡_commªd_g’”ic ); 5051 `‹¡_b»d¾e ("Pair Device - SSP Confirm Success 3", 5052 & ·œ_deviû_s¥_‹¡_6 , 5053 NULL , ‹¡_commªd_g’”ic ); 5054 `‹¡_b»d¾e ("Pair Device - SSP Confirm Reject 1", 5055 & ·œ_deviû_s¥_»jeù_1 , 5056 NULL , ‹¡_commªd_g’”ic ); 5057 `‹¡_b»d¾e ("Pair Device - SSP Confirm Reject 2", 5058 & ·œ_deviû_s¥_»jeù_2 , 5059 NULL , ‹¡_commªd_g’”ic ); 5060 `‹¡_b»d¾e ("Pair Device - SSP Non-bondable 1", 5061 & ·œ_deviû_s¥_nÚbÚdabË_1 , 5062 NULL , ‹¡_commªd_g’”ic ); 5063 `‹¡_b»d¾e ("Pair Device - SMP over BR/EDR Just-Works Success 1", 5064 & ·œ_deviû_smp_b»dr_‹¡_1 , 5065 NULL , ‹¡_commªd_g’”ic ); 5066 `‹¡_Ë ("Pair Device - LE Success 1", 5067 & ·œ_deviû_Ë_sucûss_‹¡_1 , 5068 NULL , ‹¡_commªd_g’”ic ); 5069 `‹¡_Ë ("Pair Device - LE Success 2", 5070 & ·œ_deviû_Ë_sucûss_‹¡_2 , 5071 NULL , ‹¡_commªd_g’”ic ); 5072 `‹¡_Ë ("Pair Device - LE Reject 1", 5073 & ·œ_deviû_Ë_»jeù_‹¡_1 , 5074 NULL , ‹¡_commªd_g’”ic ); 5075 `‹¡_Ë ("Pair Device - LE SC Legacy 1", 5076 & ·œ_deviû_Ë_sc_Ëgacy_‹¡_1 , 5077 NULL , ‹¡_commªd_g’”ic ); 5078 `‹¡_Ë ("Pair Device - LE SC Success 1", 5079 & ·œ_deviû_Ë_sc_sucûss_‹¡_1 , 5080 NULL , ‹¡_commªd_g’”ic ); 5081 `‹¡_Ë ("Pair Device - LE SC Success 2", 5082 & ·œ_deviû_Ë_sc_sucûss_‹¡_2 , 5083 NULL , ‹¡_commªd_g’”ic ); 5085 `‹¡_b»d¾e ("Pairing Acceptor - Legacy 1", 5086 & ·œšg_acû±Ü_Ëgacy_1 , NULL , 5087 ‹¡_·œšg_acû±Ü ); 5088 `‹¡_b»d¾e ("Pairing Acceptor - Legacy 2", 5089 & ·œšg_acû±Ü_Ëgacy_2 , NULL , 5090 ‹¡_·œšg_acû±Ü ); 5091 `‹¡_b»d¾e ("Pairing Acceptor - Legacy 3", 5092 & ·œšg_acû±Ü_Ëgacy_3 , NULL , 5093 ‹¡_·œšg_acû±Ü ); 5094 `‹¡_b»d¾e ("Pairing Acceptor - Link Sec 1", 5095 & ·œšg_acû±Ü_lšk£c_1 , NULL , 5096 ‹¡_·œšg_acû±Ü ); 5097 `‹¡_b»d¾e ("Pairing Acceptor - Link Sec 2", 5098 & ·œšg_acû±Ü_lšk£c_2 , NULL , 5099 ‹¡_·œšg_acû±Ü ); 5100 `‹¡_b»d¾e ("Pairing Acceptor - SSP 1", 5101 & ·œšg_acû±Ü_s¥_1 , £tup_·œšg_acû±Ü , 5102 ‹¡_·œšg_acû±Ü ); 5103 `‹¡_b»d¾e ("Pairing Acceptor - SSP 2", 5104 & ·œšg_acû±Ü_s¥_2 , £tup_·œšg_acû±Ü , 5105 ‹¡_·œšg_acû±Ü ); 5106 `‹¡_b»d¾e ("Pairing Acceptor - SSP 3", 5107 & ·œšg_acû±Ü_s¥_3 , £tup_·œšg_acû±Ü , 5108 ‹¡_·œšg_acû±Ü ); 5109 `‹¡_b»d¾e ("Pairing Acceptor - SSP 4", 5110 & ·œšg_acû±Ü_s¥_4 , £tup_·œšg_acû±Ü , 5111 ‹¡_·œšg_acû±Ü ); 5112 `‹¡_Ë ("Pairing Acceptor - LE 1", 5113 & ·œšg_acû±Ü_Ë_1 , £tup_·œšg_acû±Ü , 5114 ‹¡_·œšg_acû±Ü ); 5115 `‹¡_Ë ("Pairing Acceptor - LE 2", 5116 & ·œšg_acû±Ü_Ë_2 , £tup_·œšg_acû±Ü , 5117 ‹¡_·œšg_acû±Ü ); 5118 `‹¡_Ë ("Pairing Acceptor - LE 3", 5119 & ·œšg_acû±Ü_Ë_3 , £tup_·œšg_acû±Ü , 5120 ‹¡_·œšg_acû±Ü ); 5121 `‹¡_Ë ("Pairing Acceptor - LE 4", 5122 & ·œšg_acû±Ü_Ë_4 , £tup_·œšg_acû±Ü , 5123 ‹¡_·œšg_acû±Ü ); 5124 `‹¡_Ë ("Pairing Acceptor - LE 5", 5125 & ·œšg_acû±Ü_Ë_5 , £tup_·œšg_acû±Ü , 5126 ‹¡_·œšg_acû±Ü ); 5128 `‹¡_b»d¾e ("Unpair Device - Not Powered 1", 5129 & uÅaœ_deviû_nÙ_pow”ed_‹¡_1 , 5130 NULL , ‹¡_commªd_g’”ic ); 5131 `‹¡_b»d¾e ("Unpair Device - Invalid Parameters 1", 5132 & uÅaœ_deviû_šv®id_·¿m_‹¡_1 , 5133 NULL , ‹¡_commªd_g’”ic ); 5134 `‹¡_b»d¾e ("Unpair Device - Invalid Parameters 2", 5135 & uÅaœ_deviû_šv®id_·¿m_‹¡_2 , 5136 NULL , ‹¡_commªd_g’”ic ); 5138 `‹¡_b»d¾e ("Disconnect - Invalid Parameters 1", 5139 & discÚÃù_šv®id_·¿m_‹¡_1 , 5140 NULL , ‹¡_commªd_g’”ic ); 5142 `‹¡_b»d¾e ("Block Device - Invalid Parameters 1", 5143 & block_deviû_šv®id_·¿m_‹¡_1 , 5144 NULL , ‹¡_commªd_g’”ic ); 5146 `‹¡_b»d¾e ("Unblock Device - Invalid Parameters 1", 5147 & unblock_deviû_šv®id_·¿m_‹¡_1 , 5148 NULL , ‹¡_commªd_g’”ic ); 5150 `‹¡_b»d¾e ("Set Static Address - Success", 5151 & £t_¡©ic_addr_sucûss_‹¡ , 5152 NULL , ‹¡_commªd_g’”ic ); 5153 `‹¡_b»d¾e ("Set Static Address - Failure", 5154 & £t_¡©ic_addr_çžu»_‹¡ , 5155 NULL , ‹¡_commªd_g’”ic ); 5157 `‹¡_b»d¾e ("Set Scan Parameters - Success", 5158 & £t_sÿn_·¿ms_sucûss_‹¡ , 5159 NULL , ‹¡_commªd_g’”ic ); 5161 `‹¡_b»d¾e ("Load IRKs - Success 1", 5162 & lßd_œks_sucûss1_‹¡ , 5163 NULL , ‹¡_commªd_g’”ic ); 5164 `‹¡_b»d¾e ("Load IRKs - Success 2", 5165 & lßd_œks_sucûss2_‹¡ , 5166 NULL , ‹¡_commªd_g’”ic ); 5167 `‹¡_b»d¾e ("Load IRKs - Invalid Parameters 1", 5168 & lßd_œks_nv®_·¿m1_‹¡ , 5169 NULL , ‹¡_commªd_g’”ic ); 5170 `‹¡_b»d¾e ("Load IRKs - Invalid Parameters 2", 5171 & lßd_œks_nv®_·¿m2_‹¡ , 5172 NULL , ‹¡_commªd_g’”ic ); 5173 `‹¡_b»d¾e ("Load IRKs - Invalid Parameters 3", 5174 & lßd_œks_nv®_·¿m3_‹¡ , 5175 NULL , ‹¡_commªd_g’”ic ); 5176 `‹¡_b»dr ("Load IRKs - Not Supported", 5177 & lßd_œks_nÙ_suµÜ‹d_‹¡ , 5178 NULL , ‹¡_commªd_g’”ic ); 5180 `‹¡_b»d¾e ("Set Privacy - Success", 5181 & £t_´ivacy_sucûss_‹¡ , 5182 NULL , ‹¡_commªd_g’”ic ); 5183 `‹¡_b»d¾e ("Set Privacy - Rejected", 5184 & £t_´ivacy_pow”ed_‹¡ , 5185 NULL , ‹¡_commªd_g’”ic ); 5186 `‹¡_b»d¾e ("Set Privacy - Invalid Parameters", 5187 & £t_´ivacy_nv®_·¿m_‹¡ , 5188 NULL , ‹¡_commªd_g’”ic ); 5190 `‹¡_b»d¾e ("Get Conn Info - Success", 5191 & g‘_cÚn_šfo_sucûs1_‹¡ , NULL , 5192 ‹¡_commªd_g’”ic_cÚÃù ); 5193 `‹¡_b»d¾e ("Get Conn Info - Not Connected", 5194 & g‘_cÚn_šfo_ncÚ_‹¡ , NULL , 5195 ‹¡_commªd_g’”ic ); 5196 `‹¡_b»d¾e ("Get Conn Info - Power off", 5197 & g‘_cÚn_šfo_pow”_off_‹¡ , NULL , 5198 ‹¡_commªd_g’”ic_cÚÃù ); 5200 `‹¡_b»d¾e ("Load Connection Parameters - Invalid Params 1", 5201 & lßd_cÚn_·¿ms_çž_1 , 5202 NULL , ‹¡_commªd_g’”ic ); 5204 `‹¡_b»d¾e ("Add Device - Invalid Params 1", 5205 & add_deviû_çž_1 , 5206 NULL , ‹¡_commªd_g’”ic ); 5207 `‹¡_b»d¾e ("Add Device - Invalid Params 2", 5208 & add_deviû_çž_2 , 5209 NULL , ‹¡_commªd_g’”ic ); 5210 `‹¡_b»d¾e ("Add Device - Invalid Params 3", 5211 & add_deviû_çž_3 , 5212 NULL , ‹¡_commªd_g’”ic ); 5213 `‹¡_b»d¾e ("Add Device - Success 1", 5214 & add_deviû_sucûss_1 , 5215 NULL , ‹¡_commªd_g’”ic ); 5216 `‹¡_b»d¾e ("Add Device - Success 2", 5217 & add_deviû_sucûss_2 , 5218 NULL , ‹¡_commªd_g’”ic ); 5219 `‹¡_b»d¾e ("Add Device - Success 3", 5220 & add_deviû_sucûss_3 , 5221 NULL , ‹¡_commªd_g’”ic ); 5222 `‹¡_b»d¾e ("Add Device - Success 4", 5223 & add_deviû_sucûss_4 , 5224 NULL , ‹¡_commªd_g’”ic ); 5225 `‹¡_b»d¾e ("Add Device - Success 5", 5226 & add_deviû_sucûss_5 , 5227 NULL , ‹¡_commªd_g’”ic ); 5229 `‹¡_b»d¾e ("Remove Device - Invalid Params 1", 5230 & »move_deviû_çž_1 , 5231 NULL , ‹¡_commªd_g’”ic ); 5232 `‹¡_b»d¾e ("Remove Device - Invalid Params 2", 5233 & »move_deviû_çž_2 , 5234 NULL , ‹¡_commªd_g’”ic ); 5235 `‹¡_b»d¾e ("Remove Device - Success 1", 5236 & »move_deviû_sucûss_1 , 5237 £tup_add_deviû , ‹¡_commªd_g’”ic ); 5238 `‹¡_b»d¾e ("Remove Device - Success 2", 5239 & »move_deviû_sucûss_2 , 5240 £tup_add_deviû , ‹¡_commªd_g’”ic ); 5241 `‹¡_b»d¾e ("Remove Device - Success 3", 5242 & »move_deviû_sucûss_3 , 5243 £tup_add_deviû , ‹¡_commªd_g’”ic ); 5244 `‹¡_Ë ("Remove Device - Success 4", 5245 & »move_deviû_sucûss_4 , 5246 £tup_add_deviû , ‹¡_commªd_g’”ic ); 5247 `‹¡_Ë ("Remove Device - Success 5", 5248 & »move_deviû_sucûss_5 , 5249 £tup_add_deviû , ‹¡_commªd_g’”ic ); 5251  `‹¡”_run (); 5252 } } @tools/mpris-proxy.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~ 33  ~ 34  ~<¡ršg.h > 35  ~<š‰y³s.h > 37  ~ 38  ~ 39  ~ 41  #BLUEZ_BUS_NAME "Üg.bluez" ) 42  #BLUEZ_PATH "/Üg/bluez" ) 43  #BLUEZ_ADAPTER_INTERFACE "Üg.bluez.Ad­‹r1" ) 44  #BLUEZ_MEDIA_INTERFACE "Üg.bluez.MedŸ1" ) 45  #BLUEZ_MEDIA_PLAYER_INTERFACE "Üg.bluez.MedŸPÏy”1" ) 46  #BLUEZ_MEDIA_FOLDER_INTERFACE "Üg.bluez.MedŸFÞd”1" ) 47  #BLUEZ_MEDIA_ITEM_INTERFACE "Üg.bluez.MedŸI‹m1" ) 48  #BLUEZ_MEDIA_TRANSPORT_INTERFACE "Üg.bluez.MedŸT¿n¥Üt1" ) 49  #MPRIS_BUS_NAME "Üg.m´is.MedŸPÏy”2." ) 50  #MPRIS_INTERFACE "Üg.m´is.MedŸPÏy”2" ) 51  #MPRIS_PLAYER_INTERFACE "Üg.m´is.MedŸPÏy”2.PÏy”" ) 52  #MPRIS_TRACKLIST_INTERFACE "Üg.m´is.MedŸPÏy”2.T¿ckLi¡" ) 53  #MPRIS_PLAYLISTS_INTERFACE "Üg.m´is.MedŸPÏy”2.PÏyli¡s" ) 54  #MPRIS_PLAYER_PATH "/Üg/m´is/MedŸPÏy”2" ) 55  #ERROR_INTERFACE "Üg.m´is.MedŸPÏy”2.E¼Ü" ) 57  GMašLoÝ * gmaš_loÝ ; 58  GDBusProxy * gad­‹r = NULL ; 59  DBusCÚÃùiÚ * gsys = NULL ; 60  DBusCÚÃùiÚ * g£ssiÚ = NULL ; 61  GDBusCl›Á * gþ›Á = NULL ; 62  GSLi¡ * g¶ay”s = NULL ; 63  GSLi¡ * gŒª¥Üts = NULL ; 65  gboÞ—n gÝtiÚ_v”siÚ = FALSE ; 66  gboÞ—n gÝtiÚ_expÜt = FALSE ; 68  sŒackli¡ { 69 GDBusProxy * m´oxy ; 70 GSLi¡ * m™ems ; 73  s¶ay” { 74 * mbus_Çme ; 75 DBusCÚÃùiÚ * mcÚn ; 76 GDBusProxy * m´oxy ; 77 GDBusProxy * mfÞd” ; 78 GDBusProxy * mdeviû ; 79 GDBusProxy * mŒª¥Üt ; 80 GDBusProxy * m¶ayli¡ ; 81  Œackli¡ * mŒackli¡ ; 84 (* t·r£_m‘ad©a_func è( tDBusMes§geI‹r * t™” , cÚ¡ * tkey , 85 tDBusMes§geI‹r * tm‘ad©a ); 87  `diù_­³nd_’Œy ( DBusMes§geI‹r * diù , cÚ¡ * key ,  ty³ , 88 * v® ); 90  $sig_‹rm ( sig ) 92 `g_maš_loÝ_qu™ ( maš_loÝ ); 93 } } 95  DBusMes§ge * $g‘_®l ( DBusCÚÃùiÚ * cÚn , cÚ¡ * Çme ) 97 DBusMes§ge * msg , * »¶y ; 98 DBusE¼Ü ”r ; 99 cÚ¡ * içû = MPRIS_PLAYER_INTERFACE ; 101 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( Çme , MPRIS_PLAYER_PATH , 102 DBUS_INTERFACE_PROPERTIES , "GetAll"); 103 ià(! msg ) { 104 `årštf ( ¡d”r , "Can't‡llocate‚ew method call\n"); 105  NULL ; 108 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_STRING , & içû , 109 DBUS_TYPE_INVALID ); 111 `dbus_”rÜ_š™ (& ”r ); 113 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( cÚn , msg , -1, & ”r ); 115 `dbus_mes§ge_uÄef ( msg ); 117 ià(! »¶y ) { 118 ià( `dbus_”rÜ_is_£t (& ”r )) { 119 `årštf ( ¡d”r , "%s\n", ”r . mes§ge ); 120 `dbus_”rÜ_ä“ (& ”r ); 122  NULL ; 125  »¶y ; 126 } } 128  $­³nd_v¬ŸÁ ( DBusMes§geI‹r * ™” ,  ty³ , * v® ) 130 DBusMes§geI‹r v®ue ; 131  sig [2] = { ty³ , '\0' }; 133 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_VARIANT , sig , & v®ue ); 135 `dbus_mes§ge_™”_­³nd_basic (& v®ue , ty³ , v® ); 137 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v®ue ); 138 } } 140  $­³nd_¬¿y_v¬ŸÁ ( DBusMes§geI‹r * ™” ,  ty³ , * v® , 141  n_–em’ts ) 143 DBusMes§geI‹r v¬ŸÁ , ¬¿y ; 144  ty³_sig [2] = { ty³ , '\0' }; 145  ¬¿y_sig [3] = { DBUS_TYPE_ARRAY , ty³ , '\0' }; 147 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_VARIANT , 148 ¬¿y_sig , & v¬ŸÁ ); 150 `dbus_mes§ge_™”_Ý’_cÚš” (& v¬ŸÁ , DBUS_TYPE_ARRAY , 151 ty³_sig , & ¬¿y ); 153 ià( `dbus_ty³_is_fixed ( ty³ è=ð TRUE ) { 154 `dbus_mes§ge_™”_­³nd_fixed_¬¿y (& ¬¿y , ty³ , v® , 155 n_–em’ts ); 156 } ià( ty³ =ð DBUS_TYPE_STRING ||y³ =ð DBUS_TYPE_OBJECT_PATH ) { 157 cÚ¡ *** ¡r_¬¿y = v® ; 158  i ; 160  i = 0; i < n_–em’ts ; i++) 161 `dbus_mes§ge_™”_­³nd_basic (& ¬¿y , ty³ , 162 &((* ¡r_¬¿y )[ i ])); 165 `dbus_mes§ge_™”_þo£_cÚš” (& v¬ŸÁ , & ¬¿y ); 167 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v¬ŸÁ ); 168 } } 170  $diù_­³nd_¬¿y ( DBusMes§geI‹r * diù , cÚ¡ * key ,  ty³ , 171 * v® ,  n_–em’ts ) 173 DBusMes§geI‹r ’Œy ; 175 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , 176 NULL , & ’Œy ); 178 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & key ); 180 `­³nd_¬¿y_v¬ŸÁ (& ’Œy , ty³ , v® , n_–em’ts ); 182 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & ’Œy ); 183 } } 185  $­³nd_basic ( DBusMes§geI‹r * ba£ , DBusMes§geI‹¸* ™” , 186  ty³ ) 188 cÚ¡ * v®ue ; 190 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 191 `dbus_mes§ge_™”_­³nd_basic ( ba£ , ty³ , & v®ue ); 192 } } 194  ­³nd_™” ( DBusMes§geI‹r * ba£ , DBusMes§geI‹¸* ™” ); 195  $­³nd_cÚš” ( DBusMes§geI‹r * ba£ , DBusMes§geI‹¸* ™” , 196  ty³ ) 198 DBusMes§geI‹r ™”_sub , ba£_sub ; 199 * sig ; 201 `dbus_mes§ge_™”_»cur£ ( ™” , & ™”_sub ); 203  ty³ ) { 204  DBUS_TYPE_ARRAY : 205  DBUS_TYPE_VARIANT : 206 sig = `dbus_mes§ge_™”_g‘_sigÇtu» (& ™”_sub ); 209 sig = NULL ; 213 `dbus_mes§ge_™”_Ý’_cÚš” ( ba£ , ty³ , sig , & ba£_sub ); 215 ià( sig !ð NULL ) 216 `dbus_ä“ ( sig ); 218 `­³nd_™” (& ba£_sub , & ™”_sub ); 220 `dbus_mes§ge_™”_þo£_cÚš” ( ba£ , & ba£_sub ); 221 } } 223  $­³nd_™” ( DBusMes§geI‹r * ba£ , DBusMes§geI‹¸* ™” ) 225  ty³ ; 227 ( ty³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” )) != 228 DBUS_TYPE_INVALID ) { 229 ià( `dbus_ty³_is_basic ( ty³ )) 230 `­³nd_basic ( ba£ , ™” , ty³ ); 231 ià( `dbus_ty³_is_cÚš” ( ty³ )) 232 `­³nd_cÚš” ( ba£ , ™” , ty³ ); 234 `dbus_mes§ge_™”_Ãxt ( ™” ); 236 } } 238  $diù_­³nd_™” ( DBusMes§geI‹r * diù , cÚ¡ * key , 239 DBusMes§geI‹r * ™” ) 241 DBusMes§geI‹r ’Œy ; 243 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , 244 NULL , & ’Œy ); 246 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & key ); 248 `­³nd_™” (& ’Œy , ™” ); 250 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & ’Œy ); 251 } } 253  $·r£_m‘ad©a_’Œy ( DBusMes§geI‹r * ’Œy , cÚ¡ * key , 254 DBusMes§geI‹r * m‘ad©a ) 256 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ’Œy è!ð DBUS_TYPE_VARIANT ) 257  - EINVAL ; 259 `diù_­³nd_™” ( m‘ad©a , key , ’Œy ); 262 } } 264  $·r£_m‘ad©a ( DBusMes§geI‹r * ¬gs , DBusMes§geI‹¸* m‘ad©a , 265 ·r£_m‘ad©a_func func ) 267 DBusMes§geI‹r diù ; 268  ùy³ ; 270 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ¬gs ); 271 ià( ùy³ !ð DBUS_TYPE_ARRAY ) 272  - EINVAL ; 274 `dbus_mes§ge_™”_»cur£ ( ¬gs , & diù ); 276 ( ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& diù )) != 277 DBUS_TYPE_INVALID ) { 278 DBusMes§geI‹r ’Œy ; 279 cÚ¡ * key ; 281 ià( ùy³ !ð DBUS_TYPE_DICT_ENTRY ) 282  - EINVAL ; 284 `dbus_mes§ge_™”_»cur£ (& diù , & ’Œy ); 285 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy è!ð DBUS_TYPE_STRING ) 286  - EINVAL ; 288 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & key ); 289 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 291 ià( `func (& ’Œy , key , m‘ad©a ) < 0) 292  - EINVAL ; 294 `dbus_mes§ge_™”_Ãxt (& diù ); 298 } } 300  $­³nd_m‘ad©a ( DBusMes§geI‹r * ™” , DBusMes§geI‹¸* diù , 301 ·r£_m‘ad©a_func func ) 303 DBusMes§geI‹r v®ue , m‘ad©a ; 305 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_VARIANT , "a{sv}", 306 & v®ue ); 308 `dbus_mes§ge_™”_Ý’_cÚš” (& v®ue , DBUS_TYPE_ARRAY , 309 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 310 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 311 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & m‘ad©a ); 313 `·r£_m‘ad©a ( diù , & m‘ad©a , func ); 315 `dbus_mes§ge_™”_þo£_cÚš” (& v®ue , & m‘ad©a ); 316 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v®ue ); 317 } } 319  $diù_­³nd_’Œy ( DBusMes§geI‹r * diù , cÚ¡ * key ,  ty³ , 320 * v® ) 322 DBusMes§geI‹r ’Œy ; 324 ià( ty³ =ð DBUS_TYPE_STRING ) { 325 cÚ¡ * ¡r = *((cÚ¡ **è v® ); 326 ià( ¡r =ð NULL ) 330 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , 331 NULL , & ’Œy ); 333 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & key ); 335 ià( `¡rÿ£cmp ( key , "Metadata") == 0) 336 `­³nd_m‘ad©a (& ’Œy , v® , ·r£_m‘ad©a_’Œy ); 338 `­³nd_v¬ŸÁ (& ’Œy , ty³ , v® ); 340 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & ’Œy ); 341 } } 343 * $£nd”2·th (cÚ¡ * £nd” ) 345 * ·th ; 347 ·th = `g_¡rcÚÿt ("/", £nd” , NULL ); 348  `g_¡rd–im™ ( ·th , ":.", '_'); 349 } } 351  $cÝy_»¶y ( DBusP’dšgC®l * ÿÎ , * u£r_d©a ) 353 DBusMes§ge * msg = u£r_d©a ; 354 DBusMes§ge * »¶y = `dbus_³ndšg_ÿÎ_¡—l_»¶y ( ÿÎ ); 355 DBusMes§ge * cÝy ; 356 DBusMes§geI‹r ¬gs , ™” ; 358 cÝy = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 359 ià( cÝy =ð NULL ) { 360 `dbus_mes§ge_uÄef ( »¶y ); 364 `dbus_mes§ge_™”_š™_­³nd ( cÝy , & ™” ); 366 ià(! `dbus_mes§ge_™”_š™ ( »¶y , & ¬gs )) 367  dÚe ; 369 `­³nd_™” (& ™” , & ¬gs ); 371 `dbus_cÚÃùiÚ_£nd ( sys , cÝy , NULL ); 373 dÚe : 374 `dbus_mes§ge_uÄef ( cÝy ); 375 `dbus_mes§ge_uÄef ( »¶y ); 376 } } 378  DBusHªdËrResuÉ $¶ay”_mes§ge ( DBusCÚÃùiÚ * cÚn , 379 DBusMes§ge * msg , * d©a ) 381 * owÃr = d©a ; 382 DBusMes§ge * cÝy ; 383 DBusMes§geI‹r ¬gs , ™” ; 384 DBusP’dšgC®l * ÿÎ ; 386 `dbus_mes§ge_™”_š™ ( msg , & ¬gs ); 388 cÝy = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( owÃr , 389 MPRIS_PLAYER_PATH , 390 `dbus_mes§ge_g‘_š‹rçû ( msg ), 391 `dbus_mes§ge_g‘_memb” ( msg )); 392 ià( cÝy =ð NULL ) 393  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 395 `dbus_mes§ge_™”_š™_­³nd ( cÝy , & ™” ); 396 `­³nd_™” (& ™” , & ¬gs ); 398 ià(! `dbus_cÚÃùiÚ_£nd_w™h_»¶y ( £ssiÚ , cÝy , & ÿÎ , -1)) 399  dÚe ; 401 `dbus_mes§ge_»f ( msg ); 402 `dbus_³ndšg_ÿÎ_£t_nÙify ( ÿÎ , cÝy_»¶y , msg , NULL ); 403 `dbus_³ndšg_ÿÎ_uÄef ( ÿÎ ); 405 dÚe : 406 `dbus_mes§ge_uÄef ( cÝy ); 408  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 409 } } 411  ¶ay” * $fšd_¶ay”_by_bus_Çme (cÚ¡ * Çme ) 413 GSLi¡ * l ; 415  l = ¶ay”s ;†;† =†-> Ãxt ) { 416  ¶ay” *¶ay” = l -> d©a ; 418 ià( `¡rcmp ( ¶ay” -> bus_Çme , Çme ) == 0) 419  ¶ay” ; 422  NULL ; 423 } } 425 cÚ¡ DBusObjeùP©hVTabË g¶ay”_bË = { 426 . mes§ge_funùiÚ = ¶ay”_mes§ge , 429  $add_¶ay” ( DBusCÚÃùiÚ * cÚn , cÚ¡ * Çme , 430 cÚ¡ * £nd” ) 432 DBusMes§ge * »¶y = NULL ; 433 DBusMes§ge * msg ; 434 DBusMes§geI‹r ™” , ¬gs ; 435 DBusE¼Ü ”r ; 436 * ·th , * owÃr ; 437  ¶ay” *player; 439 ià(! ad­‹r ) 442 ¶ay” = `fšd_¶ay”_by_bus_Çme ( Çme ); 443 ià( ¶ay” =ð NULL ) { 444 »¶y = `g‘_®l ( cÚn , Çme ); 445 ià( »¶y =ð NULL ) 447 `dbus_mes§ge_™”_š™ ( »¶y , & ¬gs ); 450 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( BLUEZ_BUS_NAME , 451 `g_dbus_´oxy_g‘_·th ( ad­‹r ), 452 BLUEZ_MEDIA_INTERFACE , 454 ià(! msg ) { 455 `årštf ( ¡d”r , "Can't‡llocate‚ew method call\n"); 459 ·th = `£nd”2·th ( £nd” ); 460 `dbus_cÚÃùiÚ_g‘_objeù_·th_d©a ( sys , ·th , (**è& owÃr ); 462 ià( owÃr !ð NULL ) 463  dÚe ; 465 `dbus_mes§ge_™”_š™_­³nd ( msg , & ™” ); 467 `dbus_mes§ge_™”_­³nd_basic (& ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 469 ià( ¶ay” !ð NULL ) { 470 ià(! `g_dbus_g‘_´Ý”t›s ( ¶ay” -> cÚn , 471 MPRIS_PLAYER_PATH , 472 MPRIS_PLAYER_INTERFACE , 473 & ™” )) 474  dÚe ; 476 `­³nd_™” (& ™” , & ¬gs ); 477 `dbus_mes§ge_uÄef ( »¶y ); 480 `dbus_”rÜ_š™ (& ”r ); 482 owÃr = `¡rdup ( £nd” ); 484 ià(! `dbus_cÚÃùiÚ_»gi¡”_objeù_·th ( sys , ·th , & ¶ay”_bË , 485 owÃr )) { 486 `årštf ( ¡d”r , "Can't„egister object…ath for…layer\n"); 487 `ä“ ( owÃr ); 488  dÚe ; 491 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( sys , msg , -1, & ”r ); 492 ià(! »¶y ) { 493 `årštf ( ¡d”r , "Can't„egister…layer\n"); 494 `ä“ ( owÃr ); 495 ià( `dbus_”rÜ_is_£t (& ”r )) { 496 `årštf ( ¡d”r , "%s\n", ”r . mes§ge ); 497 `dbus_”rÜ_ä“ (& ”r ); 501 dÚe : 502 ià( »¶y ) 503 `dbus_mes§ge_uÄef ( »¶y ); 504 `dbus_mes§ge_uÄef ( msg ); 505 `g_ä“ ( ·th ); 506 } } 508  $»move_¶ay” ( DBusCÚÃùiÚ * cÚn , cÚ¡ * £nd” ) 510 DBusMes§ge * msg ; 511 * ·th , * owÃr ; 513 ià(! ad­‹r ) 516 ·th = `£nd”2·th ( £nd” ); 517 `dbus_cÚÃùiÚ_g‘_objeù_·th_d©a ( sys , ·th , (**è& owÃr ); 519 ià( owÃr =ð NULL ) { 520 `g_ä“ ( ·th ); 524 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( BLUEZ_BUS_NAME , 525 `g_dbus_´oxy_g‘_·th ( ad­‹r ), 526 BLUEZ_MEDIA_INTERFACE , 528 ià(! msg ) { 529 `årštf ( ¡d”r , "Can't‡llocate‚ew method call\n"); 530 `g_ä“ ( ·th ); 534 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_OBJECT_PATH , & ·th , 535 DBUS_TYPE_INVALID ); 537 `dbus_cÚÃùiÚ_£nd ( sys , msg , NULL ); 539 `dbus_cÚÃùiÚ_uÄegi¡”_objeù_·th ( sys , ·th ); 541 `dbus_mes§ge_uÄef ( msg ); 542 `g_ä“ ( ·th ); 543 `g_ä“ ( owÃr ); 544 } } 546  gboÞ—n $¶ay”_sigÇl ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 547 * u£r_d©a ) 549 DBusMes§ge * sigÇl ; 550 DBusMes§geI‹r ™” , ¬gs ; 551 * ·th , * owÃr ; 553 `dbus_mes§ge_™”_š™ ( msg , & ™” ); 555 ·th = `£nd”2·th ( `dbus_mes§ge_g‘_£nd” ( msg )); 556 `dbus_cÚÃùiÚ_g‘_objeù_·th_d©a ( sys , ·th , (**è& owÃr ); 558 ià( owÃr =ð NULL ) 559  dÚe ; 561 sigÇl = `dbus_mes§ge_Ãw_sigÇl ( ·th , `dbus_mes§ge_g‘_š‹rçû ( msg ), 562 `dbus_mes§ge_g‘_memb” ( msg )); 563 ià( sigÇl =ð NULL ) { 564 `årštf ( ¡d”r , "Unableo‡llocate‚ew %s.%s signal", 565 `dbus_mes§ge_g‘_š‹rçû ( msg ), 566 `dbus_mes§ge_g‘_memb” ( msg )); 567  dÚe ; 570 `dbus_mes§ge_™”_š™_­³nd ( sigÇl , & ¬gs ); 572 `­³nd_™” (& ¬gs , & ™” ); 574 `dbus_cÚÃùiÚ_£nd ( sys , sigÇl , NULL ); 575 `dbus_mes§ge_uÄef ( sigÇl ); 577 dÚe : 578 `g_ä“ ( ·th ); 580  TRUE ; 581 } } 583  gboÞ—n $Çme_owÃr_chªged ( DBusCÚÃùiÚ * cÚn , 584 DBusMes§ge * msg , * d©a ) 586 cÚ¡ * Çme , * Þd , * Ãw ; 588 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 589 DBUS_TYPE_STRING , & Çme , 590 DBUS_TYPE_STRING , & Þd , 591 DBUS_TYPE_STRING , & Ãw , 592 DBUS_TYPE_INVALID )) { 593 `årštf ( ¡d”r , "Invalid‡rguments for NameOwnerChanged signal"); 594  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 597 ià(! `g_¡r_has_´efix ( Çme , "org.mpris")) 598  DBUS_HANDLER_RESULT_NOT_YET_HANDLED ; 600 ià(* Ãw == '\0') { 601 `´štf ("¶ay” % © % di§µ—r\n", Çme , Þd ); 602 `»move_¶ay” ( cÚn , Þd ); 603 } ià( ÝtiÚ_expÜt || `fšd_¶ay”_by_bus_Çme ( Çme è=ð NULL ) { 604 `´štf ("¶ay” % © % found\n", Çme , Ãw ); 605 `add_¶ay” ( cÚn , Çme , Ãw ); 608  TRUE ; 609 } } 611 * $g‘_Çme_owÃr ( DBusCÚÃùiÚ * cÚn , cÚ¡ * Çme ) 613 DBusMes§ge * msg , * »¶y ; 614 DBusE¼Ü ”r ; 615 * owÃr ; 617 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( DBUS_SERVICE_DBUS , DBUS_PATH_DBUS , 618 DBUS_INTERFACE_DBUS , "GetNameOwner"); 620 ià(! msg ) { 621 `årštf ( ¡d”r , "Can't‡llocate‚ew method call\n"); 622  NULL ; 625 `dbus_mes§ge_­³nd_¬gs ( msg , DBUS_TYPE_STRING , & Çme , 626 DBUS_TYPE_INVALID ); 628 `dbus_”rÜ_š™ (& ”r ); 630 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( cÚn , msg , -1, & ”r ); 632 `dbus_mes§ge_uÄef ( msg ); 634 ià(! »¶y ) { 635 ià( `dbus_”rÜ_is_£t (& ”r )) { 636 `årštf ( ¡d”r , "%s\n", ”r . mes§ge ); 637 `dbus_”rÜ_ä“ (& ”r ); 639  NULL ; 642 ià(! `dbus_mes§ge_g‘_¬gs ( »¶y , NULL , 643 DBUS_TYPE_STRING , & owÃr , 644 DBUS_TYPE_INVALID )) { 645 `dbus_mes§ge_uÄef ( »¶y ); 646  NULL ; 649 owÃr = `g_¡rdup (owner); 651 `dbus_mes§ge_uÄef ( »¶y ); 653 `dbus_cÚÃùiÚ_æush ( cÚn ); 655  owÃr ; 656 } } 658  $·r£_li¡_Çmes ( DBusCÚÃùiÚ * cÚn , DBusMes§geI‹r * ¬gs ) 660 DBusMes§geI‹r ¬¿y ; 661  ùy³ ; 663 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ¬gs ); 664 ià( ùy³ !ð DBUS_TYPE_ARRAY ) 667 `dbus_mes§ge_™”_»cur£ ( ¬gs , & ¬¿y ); 669 ( ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y )) != 670 DBUS_TYPE_INVALID ) { 671 cÚ¡ * Çme ; 672 * owÃr ; 674 ià( ùy³ !ð DBUS_TYPE_STRING ) 675  Ãxt ; 677 `dbus_mes§ge_™”_g‘_basic (& ¬¿y , & Çme ); 679 ià(! `g_¡r_has_´efix ( Çme , "org.mpris")) 680  Ãxt ; 682 owÃr = `g‘_Çme_owÃr ( cÚn , Çme ); 684 ià( owÃr =ð NULL ) 685  Ãxt ; 687 `´štf ("¶ay” % © % found\n", Çme , owÃr ); 689 `add_¶ay” ( cÚn , Çme , owÃr ); 691 `g_ä“ ( owÃr ); 692 Ãxt : 693 `dbus_mes§ge_™”_Ãxt (& ¬¿y ); 695 } } 697  $li¡_Çmes ( DBusCÚÃùiÚ * cÚn ) 699 DBusMes§ge * msg , * »¶y ; 700 DBusMes§geI‹r ™” ; 701 DBusE¼Ü ”r ; 703 msg = `dbus_mes§ge_Ãw_m‘hod_ÿÎ ( DBUS_SERVICE_DBUS , DBUS_PATH_DBUS , 704 DBUS_INTERFACE_DBUS , "ListNames"); 706 ià(! msg ) { 707 `årštf ( ¡d”r , "Can't‡llocate‚ew method call\n"); 711 `dbus_”rÜ_š™ (& ”r ); 713 »¶y = `dbus_cÚÃùiÚ_£nd_w™h_»¶y_ªd_block ( cÚn , msg , -1, & ”r ); 715 `dbus_mes§ge_uÄef ( msg ); 717 ià(! »¶y ) { 718 ià( `dbus_”rÜ_is_£t (& ”r )) { 719 `årštf ( ¡d”r , "%s\n", ”r . mes§ge ); 720 `dbus_”rÜ_ä“ (& ”r ); 725 `dbus_mes§ge_™”_š™ ( »¶y , & ™” ); 727 `·r£_li¡_Çmes ( cÚn , & ™” ); 729 `dbus_mes§ge_uÄef ( »¶y ); 731 `dbus_cÚÃùiÚ_æush ( cÚn ); 732 } } 734  $u§ge () 736 `´štf ("Blu‘oÙh m´is-¶ay” v” %s\n\n", VERSION ); 738 `´štf ("Usage:\n"); 739 } } 741  GO±iÚEÁry gÝtiÚs [] = { 742 { "v”siÚ", 'v', 0, G_OPTION_ARG_NONE , & ÝtiÚ_v”siÚ , 744 { "expÜt", 'e', 0, G_OPTION_ARG_NONE , & ÝtiÚ_expÜt , 746 { NULL }, 749  $cÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 751 `´štf ("org.bluez‡ppeared\n"); 752 } } 754  $discÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 756 `´štf ("org.bluez disappeared\n"); 757 } } 759  $uÄegi¡”_Œackli¡ ( ¶ay” *player) 761  Œackli¡ *Œackli¡ = ¶ay” ->tracklist; 763 `g_¦i¡_ä“ ( Œackli¡ -> ™ems ); 764 `g_dbus_´oxy_uÄef ( Œackli¡ -> ´oxy ); 765 `g_ä“ ( Œackli¡ ); 766 ¶ay” -> Œackli¡ = NULL ; 767 } } 769  $¶ay”_ä“ (* d©a ) 771  ¶ay” *¶ay” = d©a ; 773 ià( ¶ay” -> Œackli¡ !ð NULL ) 774 `uÄegi¡”_Œackli¡ ( ¶ay” ); 776 ià( ¶ay” -> cÚn ) { 777 `dbus_cÚÃùiÚ_þo£ ( ¶ay” -> cÚn ); 778 `dbus_cÚÃùiÚ_uÄef ( ¶ay” -> cÚn ); 781 `g_dbus_´oxy_uÄef ( ¶ay” -> deviû ); 782 `g_dbus_´oxy_uÄef ( ¶ay” -> ´oxy ); 784 ià( ¶ay” -> Œª¥Üt ) 785 `g_dbus_´oxy_uÄef ( ¶ay” -> Œª¥Üt ); 787 ià( ¶ay” -> ¶ayli¡ ) 788 `g_dbus_´oxy_uÄef ( ¶ay” -> ¶ayli¡ ); 790 `g_ä“ ( ¶ay” -> bus_Çme ); 791 `g_ä“ ( ¶ay” ); 792 } } 794  s³ndšg_ÿÎ { 795  ¶ay” * m¶ay” ; 796 DBusMes§ge * mmsg ; 799  $³ndšg_ÿÎ_ä“ (* d©a ) 801  ³ndšg_ÿÎ * p = d©a ; 803 ià( p -> msg ) 804 `dbus_mes§ge_uÄef ( p -> msg ); 806 `g_ä“ ( p ); 807 } } 809  $¶ay”_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 811  ³ndšg_ÿÎ * p = u£r_d©a ; 812  ¶ay” *¶ay” = p ->player; 813 DBusMes§ge * msg = p ->msg; 814 DBusMes§ge * »¶y ; 815 DBusE¼Ü ”r ; 817 `dbus_”rÜ_š™ (& ”r ); 818 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”r , mes§ge )) { 819 `årštf ( ¡d”r , "”rÜ: %s", ”r . Çme ); 820 »¶y = `g_dbus_ü—‹_”rÜ ( msg , ”r . Çme , "%s",ƒ¼. mes§ge ); 821 `dbus_”rÜ_ä“ (& ”r ); 823 »¶y = `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 825 `g_dbus_£nd_mes§ge ( ¶ay” -> cÚn , »¶y ); 826 } } 828  $¶ay”_cÚŒÞ ( ¶ay” *¶ay”, DBusMes§ge * msg , 829 cÚ¡ * Çme ) 831  ³ndšg_ÿÎ * p ; 833 p = `g_Ãw0 ( ³ndšg_ÿÎ , 1); 834 p -> ¶ay” =…layer; 835 p -> msg = `dbus_mes§ge_»f (msg); 837 `g_dbus_´oxy_m‘hod_ÿÎ ( ¶ay” -> ´oxy , Çme , NULL , ¶ay”_»¶y , 838 p , ³ndšg_ÿÎ_ä“ ); 839 } } 841 cÚ¡ * $¡©us_to_¶ayback (cÚ¡ * ¡©us ) 843 ià( `¡rÿ£cmp ( ¡©us , "playing") == 0) 845 ià( `¡rÿ£cmp ( ¡©us , "paused") == 0) 849 } } 851 cÚ¡ * $¶ay”_g‘_¡©us ( ¶ay” *player) 853 cÚ¡ * ¡©us ; 854 DBusMes§geI‹r v®ue ; 856 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> ´oxy , "Stus", & v®ue )) { 857 `dbus_mes§ge_™”_g‘_basic (& v®ue , & ¡©us ); 858  `¡©us_to_¶ayback ( ¡©us ); 861 ià( ¶ay” -> Œª¥Üt =ð NULL ) 862  dÚe ; 864 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> Œª¥Üt , "S‹", & v®ue )) 865  dÚe ; 867 `dbus_mes§ge_™”_g‘_basic (& v®ue , & ¡©us ); 869 ià( `¡rÿ£cmp ( ¡©us , "active") == 0) 872 dÚe : 874 } } 876  DBusMes§ge * $¶ay”_toggË ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 877 * d©a ) 879  ¶ay” *¶ay” = d©a ; 880 cÚ¡ * ¡©us ; 882 ¡©us = `¶ay”_g‘_¡©us ( ¶ay” ); 884 ià( `¡rÿ£cmp ( ¡©us , "Playing") == 0) 885 `¶ay”_cÚŒÞ ( ¶ay” , msg , "Pause"); 887 `¶ay”_cÚŒÞ ( ¶ay” , msg , "Play"); 889  NULL ; 890 } } 892  DBusMes§ge * $¶ay”_¶ay ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 893 * d©a ) 895  ¶ay” *¶ay” = d©a ; 897 `¶ay”_cÚŒÞ ( ¶ay” , msg , "Play"); 899  NULL ; 900 } } 902  DBusMes§ge * $¶ay”_·u£ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 903 * d©a ) 905  ¶ay” *¶ay” = d©a ; 907 `¶ay”_cÚŒÞ ( ¶ay” , msg , "Pause"); 909  NULL ; 910 } } 912  DBusMes§ge * $¶ay”_¡Ý ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 913 * d©a ) 915  ¶ay” *¶ay” = d©a ; 917 `¶ay”_cÚŒÞ ( ¶ay” , msg , "Stop"); 919  NULL ; 920 } } 922  DBusMes§ge * $¶ay”_Ãxt ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 923 * d©a ) 925  ¶ay” *¶ay” = d©a ; 927 `¶ay”_cÚŒÞ ( ¶ay” , msg , "Next"); 929  NULL ; 930 } } 932  DBusMes§ge * $¶ay”_´evious ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 933 * d©a ) 935  ¶ay” *¶ay” = d©a ; 937 `¶ay”_cÚŒÞ ( ¶ay” , msg , "Previous"); 939  NULL ; 940 } } 942  gboÞ—n $¡©us_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 944  ¶ay” *¶ay” = d©a ; 946  `¶ay”_g‘_¡©us ( ¶ay” è!ð NULL ; 947 } } 949  gboÞ—n $g‘_¡©us (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 950 DBusMes§geI‹r * ™” , * d©a ) 952  ¶ay” *¶ay” = d©a ; 953 cÚ¡ * ¡©us ; 955 ¡©us = `¶ay”_g‘_¡©us ( ¶ay” ); 957 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¡©us ); 959  TRUE ; 960 } } 962  gboÞ—n $»³©_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 964 DBusMes§geI‹r ™” ; 965  ¶ay” *¶ay” = d©a ; 967  `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> ´oxy , "R•—t", & ™” ); 968 } } 970 cÚ¡ * $»³©_to_loÝ¡©us (cÚ¡ * v®ue ) 972 ià( `¡rÿ£cmp ( v®ue , "off") == 0) 974 ià( `¡rÿ£cmp ( v®ue , "singletrack") == 0) 976 ià( `¡rÿ£cmp ( v®ue , "alltracks") == 0) 979  NULL ; 980 } } 982  gboÞ—n $g‘_»³© (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 983 DBusMes§geI‹r * ™” , * d©a ) 985  ¶ay” *¶ay” = d©a ; 986 DBusMes§geI‹r v®ue ; 987 cÚ¡ * ¡©us ; 989 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> ´oxy , "R•—t", & v®ue )) 990  FALSE ; 992 `dbus_mes§ge_™”_g‘_basic (& v®ue , & ¡©us ); 994 ¡©us = `»³©_to_loÝ¡©us (status); 995 ià( ¡©us =ð NULL ) 996  FALSE ; 998 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¡©us ); 1000  TRUE ; 1001 } } 1003 cÚ¡ * $loÝ¡©us_to_»³© (cÚ¡ * v®ue ) 1005 ià( `¡rÿ£cmp ( v®ue , "None") == 0) 1007 ià( `¡rÿ£cmp ( v®ue , "Track") == 0) 1009 ià( `¡rÿ£cmp ( v®ue , "Playlist") == 0) 1012  NULL ; 1013 } } 1015  $´Ý”ty_»suÉ (cÚ¡ DBusE¼Ü * ”r , * u£r_d©a ) 1017 GDBusP’dšgPrÝ”tyS‘ id = `GPOINTER_TO_UINT ( u£r_d©a ); 1019 ià(! `dbus_”rÜ_is_£t ( ”r )) 1020  `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 1022 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , ”r -> Çme ,ƒ¼-> mes§ge ); 1023 } } 1025  $£t_»³© (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1026 DBusMes§geI‹r * ™” , GDBusP’dšgPrÝ”tyS‘ id , 1027 * d©a ) 1029  ¶ay” *¶ay” = d©a ; 1030 cÚ¡ * v®ue ; 1032 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) { 1033 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 1034 ERROR_INTERFACE ".InvalidArguments", 1039 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 1041 v®ue = `loÝ¡©us_to_»³© (value); 1042 ià( v®ue =ð NULL ) { 1043 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 1044 ERROR_INTERFACE ".InvalidArguments", 1049 `g_dbus_´oxy_£t_´Ý”ty_basic ( ¶ay” -> ´oxy , "Repeat", 1050 DBUS_TYPE_STRING , & v®ue , 1051 ´Ý”ty_»suÉ , `GUINT_TO_POINTER ( id ), 1052 NULL ); 1053 } } 1055  gboÞ—n $g‘_doubË (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1056 DBusMes§geI‹r * ™” , * d©a ) 1058  v®ue = 1.0; 1060 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_DOUBLE , & v®ue ); 1062  TRUE ; 1063 } } 1065  gboÞ—n $shufæe_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 1067 DBusMes§geI‹r ™” ; 1068  ¶ay” *¶ay” = d©a ; 1070  `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> ´oxy , "Shufæe", & ™” ); 1071 } } 1073  gboÞ—n $g‘_shufæe (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1074 DBusMes§geI‹r * ™” , * d©a ) 1076  ¶ay” *¶ay” = d©a ; 1077 DBusMes§geI‹r v®ue ; 1078 cÚ¡ * ¡ršg ; 1079 dbus_boÞ_t shufæe ; 1081 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> ´oxy , "Shufæe", & v®ue )) 1082  FALSE ; 1084 `dbus_mes§ge_™”_g‘_basic (& v®ue , & ¡ršg ); 1086 shufæe = `¡rcmp ( ¡ršg , "off") != 0; 1088 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & shufæe ); 1090  TRUE ; 1091 } } 1093  $£t_shufæe (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1094 DBusMes§geI‹r * ™” , GDBusP’dšgPrÝ”tyS‘ id , 1095 * d©a ) 1097  ¶ay” *¶ay” = d©a ; 1098 dbus_boÞ_t shufæe ; 1099 cÚ¡ * v®ue ; 1101 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_BOOLEAN ) { 1102 `g_dbus_³ndšg_´Ý”ty_”rÜ ( id , 1103 ERROR_INTERFACE ".InvalidArguments", 1108 `dbus_mes§ge_™”_g‘_basic ( ™” , & shufæe ); 1109 v®ue = shufæe ? "alltracks" : "off"; 1111 `g_dbus_´oxy_£t_´Ý”ty_basic ( ¶ay” -> ´oxy , "Shuffle", 1112 DBUS_TYPE_STRING , & v®ue , 1113 ´Ý”ty_»suÉ , `GUINT_TO_POINTER ( id ), 1114 NULL ); 1115 } } 1117  gboÞ—n $pos™iÚ_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 1119 DBusMes§geI‹r ™” ; 1120  ¶ay” *¶ay” = d©a ; 1122  `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> ´oxy , "Pos™iÚ", & ™” ); 1123 } } 1125  gboÞ—n $g‘_pos™iÚ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1126 DBusMes§geI‹r * ™” , * d©a ) 1128  ¶ay” *¶ay” = d©a ; 1129 DBusMes§geI‹r v¬ ; 1130 ušt32_t pos™iÚ ; 1131 št64_t v®ue ; 1133 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> ´oxy , "Pos™iÚ", & v¬ )) 1134  FALSE ; 1136 `dbus_mes§ge_™”_g‘_basic (& v¬ , & pos™iÚ ); 1138 v®ue = pos™iÚ * 1000ll; 1140 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_INT64 , & v®ue ); 1142  TRUE ; 1143 } } 1145  gboÞ—n $Œack_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 1147 DBusMes§geI‹r ™” ; 1148  ¶ay” *¶ay” = d©a ; 1150  `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> ´oxy , "T¿ck", & ™” ); 1151 } } 1153  gboÞ—n $·r£_¡ršg_m‘ad©a ( DBusMes§geI‹r * ™” , cÚ¡ * key , 1154 DBusMes§geI‹r * m‘ad©a ) 1156 cÚ¡ * v®ue ; 1158 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) 1159  FALSE ; 1161 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 1163 `diù_­³nd_’Œy ( m‘ad©a , key , DBUS_TYPE_STRING , & v®ue ); 1165  TRUE ; 1166 } } 1168  gboÞ—n $·r£_¬¿y_m‘ad©a ( DBusMes§geI‹r * ™” , cÚ¡ * key , 1169 DBusMes§geI‹r * m‘ad©a ) 1171 ** v®ue ; 1173 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_STRING ) 1174  FALSE ; 1176 v®ue = `dbus_m®loc0 ((*)); 1178 `dbus_mes§ge_™”_g‘_basic ( ™” , &( v®ue [0])); 1180 `diù_­³nd_¬¿y ( m‘ad©a , key , DBUS_TYPE_STRING , & v®ue , 1); 1182 `dbus_ä“ ( v®ue ); 1184  TRUE ; 1185 } } 1187  gboÞ—n $·r£_št64_m‘ad©a ( DBusMes§geI‹r * ™” , cÚ¡ * key , 1188 DBusMes§geI‹r * m‘ad©a ) 1190 ušt32_t du¿tiÚ ; 1191 št64_t v®ue ; 1193 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_UINT32 ) 1194  FALSE ; 1196 `dbus_mes§ge_™”_g‘_basic ( ™” , & du¿tiÚ ); 1198 v®ue = du¿tiÚ * 1000ll; 1200 `diù_­³nd_’Œy ( m‘ad©a , key , DBUS_TYPE_INT64 , & v®ue ); 1202  TRUE ; 1203 } } 1205  gboÞ—n $·r£_št32_m‘ad©a ( DBusMes§geI‹r * ™” , cÚ¡ * key , 1206 DBusMes§geI‹r * m‘ad©a ) 1208 ušt32_t v®ue ; 1210 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_UINT32 ) 1211  FALSE ; 1213 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 1215 `diù_­³nd_’Œy ( m‘ad©a , key , DBUS_TYPE_INT32 , & v®ue ); 1217  TRUE ; 1218 } } 1220  gboÞ—n $·r£_·th_m‘ad©a ( DBusMes§geI‹r * ™” , cÚ¡ * key , 1221 DBusMes§geI‹r * m‘ad©a ) 1223 cÚ¡ * v®ue ; 1225 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è!ð DBUS_TYPE_OBJECT_PATH ) 1226  FALSE ; 1228 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®ue ); 1230 `diù_­³nd_’Œy ( m‘ad©a , key , DBUS_TYPE_OBJECT_PATH , & v®ue ); 1232  TRUE ; 1233 } } 1235  $·r£_Œack_’Œy ( DBusMes§geI‹r * ’Œy , cÚ¡ * key , 1236 DBusMes§geI‹r * m‘ad©a ) 1238 DBusMes§geI‹r v¬ ; 1240 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ’Œy è!ð DBUS_TYPE_VARIANT ) 1241  - EINVAL ; 1243 `dbus_mes§ge_™”_»cur£ ( ’Œy , & v¬ ); 1245 ià( `¡rÿ£cmp ( key , "Title") == 0) { 1246 ià(! `·r£_¡ršg_m‘ad©a (& v¬ , "xe§m:t™Ë", m‘ad©a )) 1247  - EINVAL ; 1248 } ià( `¡rÿ£cmp ( key , "Artist") == 0) { 1249 ià(! `·r£_¬¿y_m‘ad©a (& v¬ , "xe§m:¬ti¡", m‘ad©a )) 1250  - EINVAL ; 1251 } ià( `¡rÿ£cmp ( key , "Album") == 0) { 1252 ià(! `·r£_¡ršg_m‘ad©a (& v¬ , "xe§m:®bum", m‘ad©a )) 1253  - EINVAL ; 1254 } ià( `¡rÿ£cmp ( key , "Genre") == 0) { 1255 ià(! `·r£_¬¿y_m‘ad©a (& v¬ , "xe§m:g’»", m‘ad©a )) 1256  - EINVAL ; 1257 } ià( `¡rÿ£cmp ( key , "Duration") == 0) { 1258 ià(! `·r£_št64_m‘ad©a (& v¬ , "m´is:Ëngth", m‘ad©a )) 1259  - EINVAL ; 1260 } ià( `¡rÿ£cmp ( key , "TrackNumber") == 0) { 1261 ià(! `·r£_št32_m‘ad©a (& v¬ , "xe§m:ŒackNumb”", m‘ad©a )) 1262  - EINVAL ; 1263 } ià( `¡rÿ£cmp ( key , "Item") == 0) { 1264 ià(! `·r£_·th_m‘ad©a (& v¬ , "m´is:Œackid", m‘ad©a )) 1265  - EINVAL ; 1269 } } 1271  gboÞ—n $g‘_Œack (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1272 DBusMes§geI‹r * ™” , * d©a ) 1274  ¶ay” *¶ay” = d©a ; 1275 DBusMes§geI‹r v¬ , m‘ad©a ; 1277 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> ´oxy , "T¿ck", & v¬ )) 1278  FALSE ; 1280 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1281 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1282 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 1283 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & m‘ad©a ); 1285 `·r£_m‘ad©a (& v¬ , & m‘ad©a , ·r£_Œack_’Œy ); 1287 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & m‘ad©a ); 1289  TRUE ; 1290 } } 1292  gboÞ—n $g‘_’abË (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1293 DBusMes§geI‹r * ™” , * d©a ) 1295 dbus_boÞ_t v®ue = TRUE ; 1297 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v®ue ); 1299  TRUE ; 1300 } } 1303  gboÞ—n $g‘_vÞume (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1304 DBusMes§geI‹r * ™” , * d©a ) 1306  ¶ay” *¶ay” = d©a ; 1307  v®ue = 0.0; 1308 ušt16_t vÞume ; 1309 DBusMes§geI‹r v¬ ; 1311 ià( ¶ay” -> Œª¥Üt =ð NULL ) 1312  dÚe ; 1314 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> Œª¥Üt , "VÞume", & v¬ )) 1315  dÚe ; 1317 `dbus_mes§ge_™”_g‘_basic (& v¬ , & vÞume ); 1319 v®ue = (è vÞume / 127; 1321 dÚe : 1322 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_DOUBLE , & v®ue ); 1324  TRUE ; 1325 } } 1327 cÚ¡ GDBusM‘hodTabË g¶ay”_m‘hods [] = { 1328 { GDBUS_ASYNC_METHOD ("PÏyPau£", NULL , NULL, ¶ay”_toggË ) }, 1329 { GDBUS_ASYNC_METHOD ("PÏy", NULL , NULL, ¶ay”_¶ay ) }, 1330 { GDBUS_ASYNC_METHOD ("Pau£", NULL , NULL, ¶ay”_·u£ ) }, 1331 { GDBUS_ASYNC_METHOD ("StÝ", NULL , NULL, ¶ay”_¡Ý ) }, 1332 { GDBUS_ASYNC_METHOD ("Next", NULL , NULL, ¶ay”_Ãxt ) }, 1333 { GDBUS_ASYNC_METHOD ("P»vious", NULL , NULL, ¶ay”_´evious ) }, 1337 cÚ¡ GDBusSigÇlTabË g¶ay”_sigÇls [] = { 1338 { GDBUS_SIGNAL ("S“ked", GDBUS_ARGS ({"Position", "x"})) }, 1342 cÚ¡ GDBusPrÝ”tyTabË g¶ay”_´Ý”t›s [] = { 1343 { "PÏybackStus", "s", g‘_¡©us , NULL , ¡©us_exi¡s }, 1344 { "LoÝStus", "s", g‘_»³© , £t_»³© , »³©_exi¡s }, 1345 { "R©e", "d", g‘_doubË , NULL , NULL }, 1346 { "MšimumR©e", "d", g‘_doubË , NULL , NULL }, 1347 { "MaximumR©e", "d", g‘_doubË , NULL , NULL }, 1348 { "Shufæe", "b", g‘_shufæe , £t_shufæe , shufæe_exi¡s }, 1349 { "Pos™iÚ", "x", g‘_pos™iÚ , NULL , pos™iÚ_exi¡s }, 1350 { "M‘ad©a", "a{sv}", g‘_Œack , NULL , Œack_exi¡s }, 1351 { "VÞume", "d", g‘_vÞume , NULL , NULL }, 1352 { "CªGoNext", "b", g‘_’abË , NULL , NULL }, 1353 { "CªGoP»vious", "b", g‘_’abË , NULL , NULL }, 1354 { "CªPÏy", "b", g‘_’abË , NULL , NULL }, 1355 { "CªPau£", "b", g‘_’abË , NULL , NULL }, 1356 { "CªS“k", "b", g‘_’abË , NULL , NULL }, 1357 { "CªCÚŒÞ", "b", g‘_’abË , NULL , NULL }, 1361  gboÞ—n $g‘_di§bË (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1362 DBusMes§geI‹r * ™” , * d©a ) 1364 dbus_boÞ_t v®ue = FALSE ; 1366 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v®ue ); 1368  TRUE ; 1369 } } 1371  gboÞ—n $g‘_Çme (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1372 DBusMes§geI‹r * ™” , * d©a ) 1374  ¶ay” *¶ay” = d©a ; 1375 DBusMes§geI‹r v¬ ; 1376 cÚ¡ * ®Ÿs ; 1377 * Çme ; 1379 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> deviû , "AlŸs", & v¬ )) 1380  FALSE ; 1382 `dbus_mes§ge_™”_g‘_basic (& v¬ , & ®Ÿs ); 1384 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> ´oxy , "Name", & v¬ )) { 1385 `dbus_mes§ge_™”_g‘_basic (& v¬ , & Çme ); 1386 Çme = `g_¡rcÚÿt ( ®Ÿs , " ",‚ame, NULL ); 1388 Çme = `g_¡rdup ( ®Ÿs ); 1390 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & Çme ); 1392 `g_ä“ ( Çme ); 1394  TRUE ; 1395 } } 1397 cÚ¡ GDBusM‘hodTabË gm´is_m‘hods [] = { 1401  gboÞ—n $g‘_Œackli¡ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1402 DBusMes§geI‹r * ™” , * d©a ) 1404  ¶ay” *¶ay” = d©a ; 1405 dbus_boÞ_t v®ue ; 1407 v®ue = ¶ay” -> Œackli¡ !ð NULL ? TRUE : FALSE ; 1409 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v®ue ); 1411  TRUE ; 1412 } } 1414 cÚ¡ GDBusPrÝ”tyTabË gm´is_´Ý”t›s [] = { 1415 { "CªQu™", "b", g‘_di§bË , NULL , NULL }, 1416 { "FuÎsü“n", "b", g‘_di§bË , NULL , NULL }, 1417 { "CªS‘FuÎsü“n", "b", g‘_di§bË , NULL , NULL }, 1418 { "CªRai£", "b", g‘_di§bË , NULL , NULL }, 1419 { "HasT¿ckLi¡", "b", g‘_Œackli¡ , NULL , NULL }, 1420 { "Id’t™y", "s", g‘_Çme , NULL , NULL }, 1424  GDBusProxy * $fšd_™em ( ¶ay” *¶ay”, cÚ¡ * ·th ) 1426  Œackli¡ *Œackli¡ = ¶ay” ->tracklist; 1427 GSLi¡ * l ; 1429  l = Œackli¡ -> ™ems ;†;† =†-> Ãxt ) { 1430 GDBusProxy * ´oxy = l -> d©a ; 1431 cÚ¡ * p = `g_dbus_´oxy_g‘_·th ( ´oxy ); 1433 ià( `g_¡r_equ® ( ·th , p )) 1434  ´oxy ; 1437  NULL ; 1438 } } 1440  $­³nd_™em_m‘ad©a (* d©a , * u£r_d©a ) 1442 GDBusProxy * ™em = d©a ; 1443 DBusMes§geI‹r * ™” = u£r_d©a ; 1444 DBusMes§geI‹r v¬ , m‘ad©a ; 1445 cÚ¡ * ·th = `g_dbus_´oxy_g‘_·th ( ™em ); 1447 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1448 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1449 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 1450 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & m‘ad©a ); 1452 `diù_­³nd_’Œy (& m‘ad©a , "m´is:Œackid", DBUS_TYPE_OBJECT_PATH , 1453 & ·th ); 1455 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ™em , "M‘ad©a", & v¬ )) 1456 `·r£_m‘ad©a (& v¬ , & m‘ad©a , ·r£_Œack_’Œy ); 1458 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & m‘ad©a ); 1461 } } 1463  DBusMes§ge * $Œackli¡_g‘_m‘ad©a ( DBusCÚÃùiÚ * cÚn , 1464 DBusMes§ge * msg , * d©a ) 1466  ¶ay” *¶ay” = d©a ; 1467 DBusMes§ge * »¶y ; 1468 DBusMes§geI‹r ¬gs , ¬¿y ; 1469 GSLi¡ * l = NULL ; 1471 `dbus_mes§ge_™”_š™ ( msg , & ¬gs ); 1473 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬gs è!ð DBUS_TYPE_ARRAY ) 1474  `g_dbus_ü—‹_”rÜ ( msg , 1475 ERROR_INTERFACE ".InvalidArguments", 1478 `dbus_mes§ge_™”_»cur£ (& ¬gs , & ¬¿y ); 1480  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y ) == 1481 DBUS_TYPE_OBJECT_PATH ) { 1482 cÚ¡ * ·th ; 1483 GDBusProxy * ™em ; 1485 `dbus_mes§ge_™”_g‘_basic (& ¬¿y , & ·th ); 1487 ™em = `fšd_™em ( ¶ay” , ·th ); 1488 ià( ™em =ð NULL ) 1489  `g_dbus_ü—‹_”rÜ ( msg , 1490 ERROR_INTERFACE ".InvalidArguments", 1493 l = `g_¦i¡_­³nd Ö, ™em ); 1495 `dbus_mes§ge_™”_Ãxt (& ¬¿y ); 1498 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 1500 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ¬gs ); 1502 `dbus_mes§ge_™”_Ý’_cÚš” (& ¬gs , DBUS_TYPE_ARRAY , 1503 DBUS_TYPE_ARRAY_AS_STRING 1504 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1505 DBUS_TYPE_STRING_AS_STRING 1506 DBUS_TYPE_VARIANT_AS_STRING 1507 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 1508 & ¬¿y ); 1510 `g_¦i¡_fÜ—ch ( l , ­³nd_™em_m‘ad©a , & ¬¿y ); 1512 `dbus_mes§ge_™”_þo£_cÚš” (& ¬gs , & ¬¿y ); 1514  »¶y ; 1515 } } 1517  $™em_¶ay_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1519  ³ndšg_ÿÎ * p = u£r_d©a ; 1520  ¶ay” *¶ay” = p ->player; 1521 DBusMes§ge * msg = p ->msg; 1522 DBusMes§ge * »¶y ; 1523 DBusE¼Ü ”r ; 1525 `dbus_”rÜ_š™ (& ”r ); 1526 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”r , mes§ge )) { 1527 `årštf ( ¡d”r , "”rÜ: %s", ”r . Çme ); 1528 »¶y = `g_dbus_ü—‹_”rÜ ( msg , ”r . Çme , "%s",ƒ¼. mes§ge ); 1529 `dbus_”rÜ_ä“ (& ”r ); 1531 »¶y = `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 1533 `g_dbus_£nd_mes§ge ( ¶ay” -> cÚn , »¶y ); 1534 } } 1536  $™em_¶ay ( ¶ay” *¶ay”, DBusMes§ge * msg , 1537 GDBusProxy * ™em ) 1539  ³ndšg_ÿÎ * p ; 1541 p = `g_Ãw0 ( ³ndšg_ÿÎ , 1); 1542 p -> ¶ay” =…layer; 1543 p -> msg = `dbus_mes§ge_»f (msg); 1545 `g_dbus_´oxy_m‘hod_ÿÎ ( ™em , "PÏy", NULL , ™em_¶ay_»¶y , 1546 p , ³ndšg_ÿÎ_ä“ ); 1547 } } 1549  DBusMes§ge * $Œackli¡_gÙo ( DBusCÚÃùiÚ * cÚn , 1550 DBusMes§ge * msg , * d©a ) 1552  ¶ay” *¶ay” = d©a ; 1553 GDBusProxy * ™em ; 1554 cÚ¡ * ·th ; 1556 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 1557 DBUS_TYPE_OBJECT_PATH , & ·th , 1558 DBUS_TYPE_INVALID )) 1559  `g_dbus_ü—‹_”rÜ ( msg , 1560 ERROR_INTERFACE ".InvalidArguments", 1563 ™em = `fšd_™em ( ¶ay” , ·th ); 1564 ià( ™em =ð NULL ) 1565  `g_dbus_ü—‹_”rÜ ( msg , 1566 ERROR_INTERFACE ".InvalidArguments", 1569 `™em_¶ay ( ¶ay” , msg , ™em ); 1571  NULL ; 1572 } } 1574  DBusMes§ge * $Œackli¡_add_Œack ( DBusCÚÃùiÚ * cÚn , 1575 DBusMes§ge * msg , * d©a ) 1577  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".NotImplemented", 1579 } } 1581  DBusMes§ge * $Œackli¡_»move_Œack ( DBusCÚÃùiÚ * cÚn , 1582 DBusMes§ge * msg , * d©a ) 1584  `g_dbus_ü—‹_”rÜ ( msg , ERROR_INTERFACE ".NotImplemented", 1586 } } 1588 cÚ¡ GDBusM‘hodTabË gŒackli¡_m‘hods [] = { 1589 { GDBUS_METHOD ("GetTracksMetadata", 1590 GDBUS_ARGS ({ "tracks", "ao" }), 1591 GDBUS_ARGS ({ "metadata", "aa{sv}" }), 1592 Œackli¡_g‘_m‘ad©a ) }, 1593 { GDBUS_METHOD ("AddTrack", 1594 GDBUS_ARGS ({ "uri", "s" }, { "after", "o" }, 1596 NULL , 1597 Œackli¡_add_Œack ) }, 1598 { GDBUS_METHOD ("RemoveTrack", 1599 GDBUS_ARGS ({ "Œack", "o" }), NULL , 1600 Œackli¡_»move_Œack ) }, 1601 { GDBUS_ASYNC_METHOD ("GoTo", 1602 GDBUS_ARGS ({ "Œack", "o" }), NULL , 1603 Œackli¡_gÙo ) }, 1607 cÚ¡ GDBusSigÇlTabË gŒackli¡_sigÇls [] = { 1608 { GDBUS_SIGNAL ("T¿ckAdded", GDBUS_ARGS ({"metadata", "a{sv}"}, 1610 { GDBUS_SIGNAL ("T¿ckRemoved", GDBUS_ARGS ({"track", "o"})) }, 1611 { GDBUS_SIGNAL ("T¿ckM‘ad©aChªged", GDBUS_ARGS ({"track", "o"}, 1616  gboÞ—n $Œackli¡_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 1618  ¶ay” *¶ay” = d©a ; 1620  ¶ay” -> Œackli¡ !ð NULL ; 1621 } } 1623  $­³nd_·th ( gpoš‹r d©a , gpoš‹¸ u£r_d©a ) 1625 GDBusProxy * ´oxy = d©a ; 1626 DBusMes§geI‹r * ™” = u£r_d©a ; 1627 cÚ¡ * ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 1629 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 1630 } } 1632  gboÞ—n $g‘_Œacks (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1633 DBusMes§geI‹r * ™” , * d©a ) 1635  ¶ay” *¶ay” = d©a ; 1636  Œackli¡ *Œackli¡ = ¶ay” ->tracklist; 1637 DBusMes§geI‹r v®ue ; 1639 ià( Œackli¡ =ð NULL ) 1640  FALSE ; 1642 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1643 DBUS_TYPE_OBJECT_PATH_AS_STRING , 1644 & v®ue ); 1645 `g_¦i¡_fÜ—ch ( ¶ay” -> Œackli¡ -> ™ems , ­³nd_·th , & v®ue ); 1646 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v®ue ); 1648  TRUE ; 1649 } } 1651 cÚ¡ GDBusPrÝ”tyTabË gŒackli¡_´Ý”t›s [] = { 1652 { "T¿cks", "ao", g‘_Œacks , NULL , Œackli¡_exi¡s }, 1653 { "CªEd™T¿cks", "b", g‘_di§bË , NULL , NULL }, 1657  $li¡_™ems_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 1659 DBusMes§geI‹r diù ; 1661 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1662 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1663 DBUS_TYPE_STRING_AS_STRING 1664 DBUS_TYPE_VARIANT_AS_STRING 1665 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 1666 & diù ); 1667 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 1668 } } 1670  $chªge_fÞd”_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1672  ¶ay” *¶ay” = u£r_d©a ; 1673  Œackli¡ *Œackli¡ = ¶ay” ->tracklist; 1674 DBusE¼Ü ”r ; 1676 `dbus_”rÜ_š™ (& ”r ); 1677 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”r , mes§ge )) { 1678 `årštf ( ¡d”r , "”rÜ: %s", ”r . Çme ); 1682 `g_dbus_em™_´Ý”ty_chªged ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 1683 MPRIS_PLAYLISTS_INTERFACE , 1686 `g_dbus_´oxy_m‘hod_ÿÎ ( Œackli¡ -> ´oxy , "ListItems", 1687 li¡_™ems_£tup , NULL , NULL, NULL); 1688 } } 1690  $chªge_fÞd”_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 1692  ¶ay” *¶ay” = u£r_d©a ; 1693 cÚ¡ * ·th ; 1695 ·th = `g_dbus_´oxy_g‘_·th ( ¶ay” -> ¶ayli¡ ); 1697 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 1698 } } 1700  DBusMes§ge * $¶ayli¡_aùiv©e ( DBusCÚÃùiÚ * cÚn , 1701 DBusMes§ge * msg , * d©a ) 1703  ¶ay” *¶ay” = d©a ; 1704  Œackli¡ *Œackli¡ = ¶ay” ->tracklist; 1705 cÚ¡ * ·th ; 1707 ià( ¶ay” -> ¶ayli¡ =ð NULL || Œackli¡ == NULL) 1708  `g_dbus_ü—‹_”rÜ ( msg , 1709 ERROR_INTERFACE ".InvalidArguments", 1712 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 1713 DBUS_TYPE_OBJECT_PATH , & ·th , 1714 DBUS_TYPE_INVALID )) 1715  `g_dbus_ü—‹_”rÜ ( msg , 1716 ERROR_INTERFACE ".InvalidArguments", 1719 ià(! `g_¡r_equ® ( ·th , `g_dbus_´oxy_g‘_·th ( ¶ay” -> ¶ayli¡ ))) 1720  `g_dbus_ü—‹_”rÜ ( msg , 1721 ERROR_INTERFACE ".InvalidArguments", 1724 `g_dbus_´oxy_m‘hod_ÿÎ ( Œackli¡ -> ´oxy , "ChangeFolder", 1725 chªge_fÞd”_£tup , chªge_fÞd”_»¶y , 1726 ¶ay” , NULL ); 1728  `g_dbus_ü—‹_»¶y ( msg , DBUS_TYPE_INVALID ); 1729 } } 1731  DBusMes§ge * $¶ayli¡_g‘ ( DBusCÚÃùiÚ * cÚn , DBusMes§ge * msg , 1732 * d©a ) 1734  ¶ay” *¶ay” = d©a ; 1735 ušt32_t šdex , couÁ ; 1736 cÚ¡ * Üd” ; 1737 dbus_boÞ_t »v”£ ; 1738 DBusMes§ge * »¶y ; 1739 DBusMes§geI‹r ™” , ’Œy , v®ue , Çme ; 1740 cÚ¡ * ¡ršg , * ·th ; 1741 cÚ¡ * em±y = ""; 1743 ià( ¶ay” -> ¶ayli¡ =ð NULL ) 1744  `g_dbus_ü—‹_”rÜ ( msg , 1745 ERROR_INTERFACE ".InvalidArguments", 1748 ià(! `dbus_mes§ge_g‘_¬gs ( msg , NULL , 1749 DBUS_TYPE_UINT32 , & šdex , 1750 DBUS_TYPE_UINT32 , & couÁ , 1751 DBUS_TYPE_STRING , & Üd” , 1752 DBUS_TYPE_BOOLEAN , & »v”£ , 1753 DBUS_TYPE_INVALID )) 1754  `g_dbus_ü—‹_”rÜ ( msg , 1755 ERROR_INTERFACE ".InvalidArguments", 1758 ·th = `g_dbus_´oxy_g‘_·th ( ¶ay” -> ¶ayli¡ ); 1760 »¶y = `dbus_mes§ge_Ãw_m‘hod_»tuº ( msg ); 1762 `dbus_mes§ge_™”_š™_­³nd ( »¶y , & ™” ); 1764 `dbus_mes§ge_™”_Ý’_cÚš” (& ™” , DBUS_TYPE_ARRAY , "(oss)", 1765 & ’Œy ); 1766 `dbus_mes§ge_™”_Ý’_cÚš” (& ’Œy , DBUS_TYPE_STRUCT , NULL , 1767 & v®ue ); 1768 `dbus_mes§ge_™”_­³nd_basic (& v®ue , DBUS_TYPE_OBJECT_PATH , & ·th ); 1769 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> ¶ayli¡ , "Name", & Çme )) { 1770 `dbus_mes§ge_™”_g‘_basic (& Çme , & ¡ršg ); 1771 `dbus_mes§ge_™”_­³nd_basic (& v®ue , DBUS_TYPE_STRING , 1772 & ¡ršg ); 1774 `dbus_mes§ge_™”_­³nd_basic (& v®ue , DBUS_TYPE_STRING , 1775 & ·th ); 1777 `dbus_mes§ge_™”_­³nd_basic (& v®ue , DBUS_TYPE_STRING , & em±y ); 1778 `dbus_mes§ge_™”_þo£_cÚš” (& ’Œy , & v®ue ); 1779 `dbus_mes§ge_™”_þo£_cÚš” (& ™” , & ’Œy ); 1781  »¶y ; 1782 } } 1784 cÚ¡ GDBusM‘hodTabË g¶ayli¡_m‘hods [] = { 1785 { GDBUS_METHOD ("ActivatePlaylist", 1786 GDBUS_ARGS ({ "¶ayli¡", "o" }), NULL , 1787 ¶ayli¡_aùiv©e ) }, 1788 { GDBUS_METHOD ("GetPlaylists", 1789 GDBUS_ARGS ({ "index", "u" }, { "maxcount", "u"}, 1791 GDBUS_ARGS ({ "playlists", "a(oss)"}), 1792 ¶ayli¡_g‘ ) }, 1796  gboÞ—n $¶ayli¡_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 1798  ¶ay” *¶ay” = d©a ; 1800  ¶ay” -> ¶ayli¡ !ð NULL ; 1801 } } 1803  gboÞ—n $g‘_¶ayli¡_couÁ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1804 DBusMes§geI‹r * ™” , * d©a ) 1806  ¶ay” *¶ay” = d©a ; 1807 ušt32_t couÁ = 1; 1809 ià( ¶ay” -> ¶ayli¡ =ð NULL ) 1810  FALSE ; 1812 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT32 , & couÁ ); 1814  TRUE ; 1815 } } 1817  gboÞ—n $g‘_Üd”šgs (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1818 DBusMes§geI‹r * ™” , * d©a ) 1820 DBusMes§geI‹r v®ue ; 1821 cÚ¡ * Üd” = "User"; 1823 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1824 DBUS_TYPE_OBJECT_PATH_AS_STRING , 1825 & v®ue ); 1826 `dbus_mes§ge_™”_­³nd_basic (& v®ue , DBUS_TYPE_STRING , & Üd” ); 1827 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v®ue ); 1829  TRUE ; 1830 } } 1832  gboÞ—n $g‘_aùive_¶ayli¡ (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 1833 DBusMes§geI‹r * ™” , * d©a ) 1835  ¶ay” *¶ay” = d©a ; 1836 DBusMes§geI‹r v®ue , ’Œy ; 1837 dbus_boÞ_t ’abËd = TRUE ; 1838 cÚ¡ * ·th , * em±y = ""; 1840 ià( ¶ay” -> ¶ayli¡ =ð NULL ) 1841  FALSE ; 1843 ·th = `g_dbus_´oxy_g‘_·th ( ¶ay” -> ¶ayli¡ ); 1845 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_STRUCT , 1846 NULL , & v®ue ); 1847 `dbus_mes§ge_™”_­³nd_basic (& v®ue , DBUS_TYPE_BOOLEAN , & ’abËd ); 1848 `dbus_mes§ge_™”_Ý’_cÚš” (& v®ue , DBUS_TYPE_STRUCT , NULL , 1849 & ’Œy ); 1850 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_OBJECT_PATH , & ·th ); 1851 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & ·th ); 1852 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & em±y ); 1853 `dbus_mes§ge_™”_þo£_cÚš” (& v®ue , & ’Œy ); 1854 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v®ue ); 1856  TRUE ; 1857 } } 1859 cÚ¡ GDBusPrÝ”tyTabË g¶ayli¡_´Ý”t›s [] = { 1860 { "PÏyli¡CouÁ", "u", g‘_¶ayli¡_couÁ , NULL , ¶ayli¡_exi¡s }, 1861 { "Ord”šgs", "as", g‘_Üd”šgs , NULL , NULL }, 1862 { "AùivePÏyli¡", "(b(oss))", g‘_aùive_¶ayli¡ , NULL , 1863 ¶ayli¡_exi¡s }, 1867  #a_z "abcdefghijklmnÝqr¡uvwxyz" ) 1868  #A_Z "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ) 1869  #_0_9 "_0123456789" ) 1871 * $m´is_bu¢ame (* Çme ) 1873 ià( `g_ascii_isdig™ ( Çme [0])) 1874  `g_¡rcÚÿt ( MPRIS_BUS_NAME , "bt_", 1875 `g_¡rÿnÚ ( Çme , A_Z a_z _0_9 , '_'), NULL ); 1877  `g_¡rcÚÿt ( MPRIS_BUS_NAME , 1878 `g_¡rÿnÚ ( Çme , A_Z a_z _0_9 , '_'), NULL ); 1879 } } 1881  GDBusProxy * $fšd_Œª¥Üt_by_·th (cÚ¡ * ·th ) 1883 GSLi¡ * l ; 1885  l = Œª¥Üts ;†;† =†-> Ãxt ) { 1886 GDBusProxy * Œª¥Üt = l -> d©a ; 1887 DBusMes§geI‹r ™” ; 1888 cÚ¡ * v®ue ; 1890 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( Œª¥Üt , "Deviû", & ™” )) 1893 `dbus_mes§ge_™”_g‘_basic (& ™” , & v®ue ); 1895 ià( `¡rcmp ( ·th , v®ue ) == 0) 1896  Œª¥Üt ; 1899  NULL ; 1900 } } 1902  ¶ay” * $fšd_¶ay” ( GDBusProxy * ´oxy ) 1904 GSLi¡ * l ; 1906  l = ¶ay”s ;†;† =†-> Ãxt ) { 1907  ¶ay” *¶ay” = l -> d©a ; 1908 cÚ¡ * ·th , * p ; 1910 ià( ¶ay” -> ´oxy ==…roxy) 1911  ¶ay” ; 1913 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 1914 p = `g_dbus_´oxy_g‘_·th ( ¶ay” -> ´oxy ); 1915 ià( `g_¡r_equ® ( ·th , p )) 1916  ¶ay” ; 1919  NULL ; 1920 } } 1922  $»gi¡”_Œackli¡ ( GDBusProxy * ´oxy ) 1924  ¶ay” *player; 1925  Œackli¡ *tracklist; 1927 ¶ay” = `fšd_¶ay” ( ´oxy ); 1928 ià( ¶ay” =ð NULL ) 1931 ià( ¶ay” -> Œackli¡ !ð NULL ) 1934 Œackli¡ = `g_Ãw0 (tracklist, 1); 1935 Œackli¡ -> ´oxy = `g_dbus_´oxy_»f (proxy); 1937 ¶ay” -> Œackli¡ =racklist; 1939 `g_dbus_em™_´Ý”ty_chªged ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 1940 MPRIS_INTERFACE , 1943 ià( ¶ay” -> ¶ayli¡ =ð NULL ) 1946 `g_dbus_´oxy_m‘hod_ÿÎ ( ¶ay” -> Œackli¡ -> ´oxy , "ChangeFolder", 1947 chªge_fÞd”_£tup , chªge_fÞd”_»¶y , 1948 ¶ay” , NULL ); 1949 } } 1951  $»gi¡”_¶ay” ( GDBusProxy * ´oxy ) 1953  ¶ay” *player; 1954 DBusMes§geI‹r ™” ; 1955 cÚ¡ * ·th , * ®Ÿs , * Çme ; 1956 * bu¢ame ; 1957 GDBusProxy * deviû , * Œª¥Üt ; 1959 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Deviû", & ™” )) 1962 `dbus_mes§ge_™”_g‘_basic (& ™” , & ·th ); 1964 deviû = `g_dbus_´oxy_Ãw ( þ›Á , ·th , "org.bluez.Device1"); 1965 ià( deviû =ð NULL ) 1968 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( deviû , "AlŸs", & ™” )) 1971 `dbus_mes§ge_™”_g‘_basic (& ™” , & ®Ÿs ); 1973 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Name", & ™” )) { 1974 `dbus_mes§ge_™”_g‘_basic (& ™” , & Çme ); 1975 bu¢ame = `g_¡rcÚÿt ( ®Ÿs , " ", Çme , NULL ); 1977 bu¢ame = `g_¡rdup ( ®Ÿs ); 1979 ¶ay” = `g_Ãw0 (player, 1); 1980 ¶ay” -> bus_Çme = `m´is_bu¢ame ( bu¢ame ); 1981 ¶ay” -> ´oxy = `g_dbus_´oxy_»f (proxy); 1982 ¶ay” -> deviû = device; 1984 `g_ä“ ( bu¢ame ); 1986 ¶ay”s = `g_¦i¡_´•’d ÕÏy”s, ¶ay” ); 1988 `´štf ("PÏy” % ü—‹d\n", ¶ay” -> bus_Çme ); 1990 ¶ay” -> cÚn = `g_dbus_£tup_´iv©e ( DBUS_BUS_SESSION ,…Ïy”-> bus_Çme , 1991 NULL ); 1992 ià(! £ssiÚ ) { 1993 `årštf ( ¡d”r , "Could‚ot„egister bus‚ame %s", 1994 ¶ay” -> bus_Çme ); 1995  çž ; 1998 ià(! `g_dbus_»gi¡”_š‹rçû ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 1999 MPRIS_INTERFACE , 2000 m´is_m‘hods , 2001 NULL , 2002 m´is_´Ý”t›s , 2003 ¶ay” , NULL )) { 2004 `årštf ( ¡d”r , "Could‚ot„egister interface %s", 2005 MPRIS_INTERFACE ); 2006  çž ; 2009 ià(! `g_dbus_»gi¡”_š‹rçû ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 2010 MPRIS_PLAYER_INTERFACE , 2011 ¶ay”_m‘hods , 2012 ¶ay”_sigÇls , 2013 ¶ay”_´Ý”t›s , 2014 ¶ay” , ¶ay”_ä“ )) { 2015 `årštf ( ¡d”r , "Could‚ot„egister interface %s", 2016 MPRIS_PLAYER_INTERFACE ); 2017  çž ; 2020 ià(! `g_dbus_»gi¡”_š‹rçû ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 2021 MPRIS_TRACKLIST_INTERFACE , 2022 Œackli¡_m‘hods , 2023 Œackli¡_sigÇls , 2024 Œackli¡_´Ý”t›s , 2025 ¶ay” , NULL )) { 2026 `årštf ( ¡d”r , "Could‚ot„egister interface %s", 2027 MPRIS_TRACKLIST_INTERFACE ); 2028  çž ; 2031 ià(! `g_dbus_»gi¡”_š‹rçû ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 2032 MPRIS_PLAYLISTS_INTERFACE , 2033 ¶ayli¡_m‘hods , 2034 NULL , 2035 ¶ayli¡_´Ý”t›s , 2036 ¶ay” , NULL )) { 2037 `årštf ( ¡d”r , "Could‚ot„egister interface %s", 2038 MPRIS_PLAYLISTS_INTERFACE ); 2039  çž ; 2042 Œª¥Üt = `fšd_Œª¥Üt_by_·th ( ·th ); 2043 ià( Œª¥Üt ) 2044 ¶ay” -> Œª¥Üt = `g_dbus_´oxy_»f (transport); 2048 çž : 2049 ¶ay”s = `g_¦i¡_»move ÕÏy”s, ¶ay” ); 2050 `¶ay”_ä“ ( ¶ay” ); 2051 } } 2053  ¶ay” * $fšd_¶ay”_by_deviû (cÚ¡ * deviû ) 2055 GSLi¡ * l ; 2057  l = ¶ay”s ;†;† =†-> Ãxt ) { 2058  ¶ay” *¶ay” = l -> d©a ; 2059 cÚ¡ * ·th = `g_dbus_´oxy_g‘_·th ( ¶ay” -> deviû ); 2061 ià( `g_¡rcmp0 ( deviû , ·th ) == 0) 2062  ¶ay” ; 2065  NULL ; 2066 } } 2068  $»gi¡”_Œª¥Üt ( GDBusProxy * ´oxy ) 2070  ¶ay” *player; 2071 DBusMes§geI‹r ™” ; 2072 cÚ¡ * ·th ; 2074 ià( `g_¦i¡_fšd ( Œª¥Üts , ´oxy è!ð NULL ) 2077 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "VÞume", & ™” )) 2080 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Deviû", & ™” )) 2083 `dbus_mes§ge_™”_g‘_basic (& ™” , & ·th ); 2085 Œª¥Üts = `g_¦i¡_­³nd Ñ¿n¥Üts, ´oxy ); 2087 ¶ay” = `fšd_¶ay”_by_deviû ( ·th ); 2088 ià( ¶ay” =ð NULL ||…Ïy”-> Œª¥Üt != NULL) 2091 ¶ay” -> Œª¥Üt = `g_dbus_´oxy_»f ( ´oxy ); 2092 } } 2094  ¶ay” * $fšd_¶ay”_by_™em (cÚ¡ * ™em ) 2096 GSLi¡ * l ; 2098  l = ¶ay”s ;†;† =†-> Ãxt ) { 2099  ¶ay” *¶ay” = l -> d©a ; 2100 cÚ¡ * ·th = `g_dbus_´oxy_g‘_·th ( ¶ay” -> ´oxy ); 2102 ià( `g_¡r_has_´efix ( ™em , ·th )) 2103  ¶ay” ; 2106  NULL ; 2107 } } 2109  $»gi¡”_¶ayli¡ ( ¶ay” *¶ay”, GDBusProxy * ´oxy ) 2111 cÚ¡ * ·th ; 2112 DBusMes§geI‹r ™” ; 2114 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> ´oxy , "PÏyli¡", & ™” )) 2117 `dbus_mes§ge_™”_g‘_basic (& ™” , & ·th ); 2119 ià(! `g_¡r_equ® ( ·th , `g_dbus_´oxy_g‘_·th ( ´oxy ))) 2122 ¶ay” -> ¶ayli¡ = `g_dbus_´oxy_»f ( ´oxy ); 2124 `g_dbus_em™_´Ý”ty_chªged ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 2125 MPRIS_PLAYLISTS_INTERFACE , 2128 ià( ¶ay” -> Œackli¡ =ð NULL ) 2131 `g_dbus_´oxy_m‘hod_ÿÎ ( ¶ay” -> Œackli¡ -> ´oxy , "ChangeFolder", 2132 chªge_fÞd”_£tup , chªge_fÞd”_»¶y , 2133 ¶ay” , NULL ); 2134 } } 2136  $»gi¡”_™em ( ¶ay” *¶ay”, GDBusProxy * ´oxy ) 2138  Œackli¡ *tracklist; 2139 cÚ¡ * ·th , * ¶ayli¡ ; 2140 DBusMes§ge * sigÇl ; 2141 DBusMes§geI‹r ™” , ¬gs , m‘ad©a ; 2142 GSLi¡ * l ; 2143 GDBusProxy * aá” ; 2145 ià( ¶ay” -> ¶ayli¡ =ð NULL ) { 2146 `»gi¡”_¶ayli¡ ( ¶ay” , ´oxy ); 2150 Œackli¡ = ¶ay” ->tracklist; 2151 ià( Œackli¡ =ð NULL ) 2154 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 2155 ¶ayli¡ = `g_dbus_´oxy_g‘_·th ( ¶ay” ->playlist); 2156 ià(! `g_¡r_has_´efix ( ·th , ¶ayli¡ )) 2159 l = `g_¦i¡_Ï¡ ( Œackli¡ -> ™ems ); 2160 Œackli¡ -> ™ems = `g_¦i¡_­³nd Ñ¿ckli¡->™ems, ´oxy ); 2162 `g_dbus_em™_´Ý”ty_chªged ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 2163 MPRIS_TRACKLIST_INTERFACE , 2166 ià( l =ð NULL ) 2169 sigÇl = `dbus_mes§ge_Ãw_sigÇl ( MPRIS_PLAYER_PATH , 2170 MPRIS_TRACKLIST_INTERFACE , 2172 ià(! sigÇl ) { 2173 `årštf ( ¡d”r , "Unableo‡llocate‚ew %s.TrackAdded signal", 2174 MPRIS_TRACKLIST_INTERFACE ); 2178 `dbus_mes§ge_™”_š™_­³nd ( sigÇl , & ¬gs ); 2180 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "M‘ad©a", & ™” )) { 2181 `dbus_mes§ge_uÄef ( sigÇl ); 2185 `dbus_mes§ge_™”_Ý’_cÚš” (& ¬gs , DBUS_TYPE_ARRAY , 2186 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 2187 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 2188 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & m‘ad©a ); 2190 `·r£_m‘ad©a (& ™” , & m‘ad©a , ·r£_Œack_’Œy ); 2192 `dbus_mes§ge_™”_þo£_cÚš” (& ¬gs , & m‘ad©a ); 2194 aá” = l -> d©a ; 2195 ·th = `g_dbus_´oxy_g‘_·th ( aá” ); 2196 `dbus_mes§ge_™”_­³nd_basic (& ¬gs , DBUS_TYPE_OBJECT_PATH , & ·th ); 2198 `g_dbus_£nd_mes§ge ( ¶ay” -> cÚn , sigÇl ); 2199 } } 2201  $´oxy_added ( GDBusProxy * ´oxy , * u£r_d©a ) 2203 cÚ¡ * š‹rçû ; 2204 cÚ¡ * ·th ; 2206 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 2207 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 2209 ià(! `¡rcmp ( š‹rçû , BLUEZ_ADAPTER_INTERFACE )) { 2210 ià( ad­‹r !ð NULL ) 2213 `´štf ("Blu‘oÙh Ad­‹¸% found\n", ·th ); 2214 ad­‹r = ´oxy ; 2215 `li¡_Çmes ( £ssiÚ ); 2216 } ià(! `¡rcmp ( š‹rçû , BLUEZ_MEDIA_PLAYER_INTERFACE )) { 2217 `´štf ("Blu‘oÙh PÏy” % found\n", ·th ); 2218 `»gi¡”_¶ay” ( ´oxy ); 2219 } ià(! `¡rcmp ( š‹rçû , BLUEZ_MEDIA_TRANSPORT_INTERFACE )) { 2220 `´štf ("Blu‘oÙh T¿n¥Üˆ% found\n", ·th ); 2221 `»gi¡”_Œª¥Üt ( ´oxy ); 2222 } ià(! `¡rcmp ( š‹rçû , BLUEZ_MEDIA_FOLDER_INTERFACE )) { 2223 `´štf ("Blu‘oÙh FÞd” % found\n", ·th ); 2224 `»gi¡”_Œackli¡ ( ´oxy ); 2225 } ià(! `¡rcmp ( š‹rçû , BLUEZ_MEDIA_ITEM_INTERFACE )) { 2226  ¶ay” *player; 2228 ¶ay” = `fšd_¶ay”_by_™em ( ·th ); 2229 ià( ¶ay” =ð NULL ) 2232 `´štf ("Blu‘oÙh I‹m % found\n", ·th ); 2233 `»gi¡”_™em ( ¶ay” , ´oxy ); 2235 } } 2237  $uÄegi¡”_¶ay” ( ¶ay” *player) 2239 ¶ay”s = `g_¦i¡_»move ÕÏy”s, ¶ay” ); 2241 ià( ¶ay” -> Œackli¡ !ð NULL ) { 2242 `g_dbus_uÄegi¡”_š‹rçû ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 2243 MPRIS_PLAYLISTS_INTERFACE ); 2244 `g_dbus_uÄegi¡”_š‹rçû ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 2245 MPRIS_TRACKLIST_INTERFACE ); 2248 `g_dbus_uÄegi¡”_š‹rçû ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 2249 MPRIS_INTERFACE ); 2251 `g_dbus_uÄegi¡”_š‹rçû ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 2252 MPRIS_PLAYER_INTERFACE ); 2253 } } 2255  ¶ay” * $fšd_¶ay”_by_Œª¥Üt ( GDBusProxy * ´oxy ) 2257 GSLi¡ * l ; 2259  l = ¶ay”s ;†;† =†-> Ãxt ) { 2260  ¶ay” *¶ay” = l -> d©a ; 2262 ià( ¶ay” -> Œª¥Üt =ð ´oxy ) 2263  ¶ay” ; 2266  NULL ; 2267 } } 2269  $uÄegi¡”_Œª¥Üt ( GDBusProxy * ´oxy ) 2271  ¶ay” *player; 2273 ià( `g_¦i¡_fšd ( Œª¥Üts , ´oxy è=ð NULL ) 2276 Œª¥Üts = `g_¦i¡_»move Ñ¿n¥Üts, ´oxy ); 2278 ¶ay” = `fšd_¶ay”_by_Œª¥Üt ( ´oxy ); 2279 ià( ¶ay” =ð NULL ) 2282 `g_dbus_´oxy_uÄef ( ¶ay” -> Œª¥Üt ); 2283 ¶ay” -> Œª¥Üt = NULL ; 2284 } } 2286  $uÄegi¡”_™em ( ¶ay” *¶ay”, GDBusProxy * ´oxy ) 2288  Œackli¡ *Œackli¡ = ¶ay” ->tracklist; 2289 cÚ¡ * ·th ; 2291 ià( Œackli¡ =ð NULL ) 2294 ià( `g_¦i¡_fšd ( Œackli¡ -> ™ems , ´oxy è=ð NULL ) 2297 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 2299 Œackli¡ -> ™ems = `g_¦i¡_»move Ñ¿ckli¡->™ems, ´oxy ); 2301 `g_dbus_em™_´Ý”ty_chªged ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 2302 MPRIS_TRACKLIST_INTERFACE , 2305 `g_dbus_em™_sigÇl ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 2306 MPRIS_TRACKLIST_INTERFACE , "TrackRemoved", 2307 DBUS_TYPE_OBJECT_PATH , & ·th , 2308 DBUS_TYPE_INVALID ); 2309 } } 2311  $»move_¶ay”s ( DBusCÚÃùiÚ * cÚn ) 2313 ** ·ths ; 2314  i ; 2316 `dbus_cÚÃùiÚ_li¡_»gi¡”ed ( cÚn , "/", & ·ths ); 2318  i = 0; ·ths [i]; i++) { 2319 * ·th ; 2320 * d©a ; 2322 ·th = `g_¡rdup_´štf ("/%s", ·ths [ i ]); 2323 `dbus_cÚÃùiÚ_g‘_objeù_·th_d©a ( sys , ·th , & d©a ); 2324 `dbus_cÚÃùiÚ_uÄegi¡”_objeù_·th ( sys , ·th ); 2326 `g_ä“ ( ·th ); 2327 `g_ä“ ( d©a ); 2330 `dbus_ä“_¡ršg_¬¿y ( ·ths ); 2331 } } 2333  $´oxy_»moved ( GDBusProxy * ´oxy , * u£r_d©a ) 2335 cÚ¡ * š‹rçû ; 2336 cÚ¡ * ·th ; 2338 ià( ad­‹r =ð NULL ) 2341 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 2342 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 2344 ià( `¡rcmp ( š‹rçû , BLUEZ_ADAPTER_INTERFACE ) == 0) { 2345 ià( ad­‹r !ð ´oxy ) 2347 `´štf ("Blu‘oÙh Ad­‹¸% »moved\n", ·th ); 2348 ad­‹r = NULL ; 2349 `»move_¶ay”s ( sys ); 2350 } ià( `¡rcmp ( š‹rçû , BLUEZ_MEDIA_PLAYER_INTERFACE ) == 0) { 2351  ¶ay” *player; 2353 ¶ay” = `fšd_¶ay” ( ´oxy ); 2354 ià( ¶ay” =ð NULL ) 2357 `´štf ("Blu‘oÙh PÏy” % »moved\n", ·th ); 2358 `uÄegi¡”_¶ay” ( ¶ay” ); 2359 } ià( `¡rcmp ( š‹rçû , BLUEZ_MEDIA_TRANSPORT_INTERFACE ) == 0) { 2360 `´štf ("Blu‘oÙh T¿n¥Üˆ% »moved\n", ·th ); 2361 `uÄegi¡”_Œª¥Üt ( ´oxy ); 2362 } ià( `¡rcmp ( š‹rçû , BLUEZ_MEDIA_ITEM_INTERFACE ) == 0) { 2363  ¶ay” *player; 2365 ¶ay” = `fšd_¶ay”_by_™em ( ·th ); 2366 ià( ¶ay” =ð NULL ) 2369 `´štf ("Blu‘oÙh I‹m % »moved\n", ·th ); 2370 `uÄegi¡”_™em ( ¶ay” , ´oxy ); 2372 } } 2374 cÚ¡ * $´Ý”ty_to_m´is (cÚ¡ * ´Ý”ty ) 2376 ià( `¡rÿ£cmp ( ´Ý”ty , "Repeat") == 0) 2378 ià( `¡rÿ£cmp ( ´Ý”ty , "Shuffle") == 0) 2380 ià( `¡rÿ£cmp ( ´Ý”ty , "Status") == 0) 2382 ià( `¡rÿ£cmp ( ´Ý”ty , "Position") == 0) 2384 ià( `¡rÿ£cmp ( ´Ý”ty , "Track") == 0) 2387  NULL ; 2388 } } 2390  $¶ay”_´Ý”ty_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 2391 DBusMes§geI‹r * ™” , * u£r_d©a ) 2393  ¶ay” *player; 2394 cÚ¡ * ´Ý”ty ; 2395 ušt32_t pos™iÚ ; 2396 ušt64_t v®ue ; 2398 ¶ay” = `fšd_¶ay” ( ´oxy ); 2399 ià( ¶ay” =ð NULL ) 2402 ´Ý”ty = `´Ý”ty_to_m´is ( Çme ); 2403 ià( ´Ý”ty =ð NULL ) 2406 `g_dbus_em™_´Ý”ty_chªged ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 2407 MPRIS_PLAYER_INTERFACE , 2408 ´Ý”ty ); 2410 ià( `¡rÿ£cmp ( Çme , "Position") != 0) 2413 `dbus_mes§ge_™”_g‘_basic ( ™” , & pos™iÚ ); 2415 v®ue = pos™iÚ * 1000ll; 2417 `g_dbus_em™_sigÇl ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 2418 MPRIS_PLAYER_INTERFACE , "Seeked", 2419 DBUS_TYPE_INT64 , & v®ue , 2420 DBUS_TYPE_INVALID ); 2421 } } 2423  $Œª¥Üt_´Ý”ty_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 2424 DBusMes§geI‹r * ™” , * u£r_d©a ) 2426  ¶ay” *player; 2427 DBusMes§geI‹r v¬ ; 2428 cÚ¡ * ·th ; 2430 ià( `¡rÿ£cmp ( Çme , "Volume") != 0 && strcasecmp(name, "State") != 0) 2433 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Deviû", & v¬ )) 2436 `dbus_mes§ge_™”_g‘_basic (& v¬ , & ·th ); 2438 ¶ay” = `fšd_¶ay”_by_deviû ( ·th ); 2439 ià( ¶ay” =ð NULL ) 2442 ià( `¡rÿ£cmp ( Çme , "State") == 0) { 2443 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ¶ay” -> ´oxy , "Stus", & v¬ )) 2444 `g_dbus_em™_´Ý”ty_chªged ( ¶ay” -> cÚn , 2445 MPRIS_PLAYER_PATH , 2446 MPRIS_PLAYER_INTERFACE , 2451 `g_dbus_em™_´Ý”ty_chªged ( ¶ay” -> cÚn , MPRIS_PLAYER_PATH , 2452 MPRIS_PLAYER_INTERFACE , 2453 Çme ); 2454 } } 2456  $™em_´Ý”ty_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 2457 DBusMes§geI‹r * ™” , * u£r_d©a ) 2459  ¶ay” *player; 2460 DBusMes§ge * sigÇl ; 2461 DBusMes§geI‹r ¬gs ; 2462 cÚ¡ * ·th ; 2464 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 2466 ¶ay” = `fšd_¶ay”_by_™em ( ·th ); 2467 ià( ¶ay” =ð NULL ) 2470 ià( `¡rÿ£cmp ( Çme , "Metadata") != 0) 2473 sigÇl = `dbus_mes§ge_Ãw_sigÇl ( MPRIS_PLAYER_PATH , 2474 MPRIS_TRACKLIST_INTERFACE , 2476 ià(! sigÇl ) { 2477 `årštf ( ¡d”r , "Unableo‡llocate‚ew %s.TrackAdded signal", 2478 MPRIS_TRACKLIST_INTERFACE ); 2482 `dbus_mes§ge_™”_š™_­³nd ( sigÇl , & ¬gs ); 2484 `dbus_mes§ge_™”_­³nd_basic (& ¬gs , DBUS_TYPE_OBJECT_PATH , & ·th ); 2486 `­³nd_™” (& ¬gs , ™” ); 2488 `g_dbus_£nd_mes§ge ( ¶ay” -> cÚn , sigÇl ); 2489 } } 2491  $´Ý”ty_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 2492 DBusMes§geI‹r * ™” , * u£r_d©a ) 2494 cÚ¡ * š‹rçû ; 2496 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 2498 ià( `¡rcmp ( š‹rçû , BLUEZ_MEDIA_PLAYER_INTERFACE ) == 0) 2499  `¶ay”_´Ý”ty_chªged ( ´oxy , Çme , ™” , u£r_d©a ); 2501 ià( `¡rcmp ( š‹rçû , BLUEZ_MEDIA_TRANSPORT_INTERFACE ) == 0) 2502  `Œª¥Üt_´Ý”ty_chªged ( ´oxy , Çme , ™” , 2503 u£r_d©a ); 2505 ià( `¡rcmp ( š‹rçû , BLUEZ_MEDIA_ITEM_INTERFACE ) == 0) 2506  `™em_´Ý”ty_chªged ( ´oxy , Çme , ™” , u£r_d©a ); 2507 } } 2509  $maš ( ¬gc , * ¬gv []) 2511 GO±iÚCÚ‹xt * cÚ‹xt ; 2512 GE¼Ü * ”rÜ = NULL ; 2513 gušt owÃr_w©ch , ´Ý”t›s_w©ch , sigÇl_w©ch ; 2514  sigaùiÚ § ; 2516 cÚ‹xt = `g_ÝtiÚ_cÚ‹xt_Ãw ( NULL ); 2517 `g_ÝtiÚ_cÚ‹xt_add_maš_’Œ›s ( cÚ‹xt , ÝtiÚs , NULL ); 2519 ià( `g_ÝtiÚ_cÚ‹xt_·r£ ( cÚ‹xt , & ¬gc , & ¬gv , & ”rÜ è=ð FALSE ) { 2520 ià( ”rÜ !ð NULL ) { 2521 `g_´š‹¼ ("%s\n", ”rÜ -> mes§ge ); 2522 `g_”rÜ_ä“ ( ”rÜ ); 2524 `g_´š‹¼ ("An unknownƒrror occurred\n"); 2525 `ex™ (1); 2528 `g_ÝtiÚ_cÚ‹xt_ä“ ( cÚ‹xt ); 2530 ià( ÝtiÚ_v”siÚ =ð TRUE ) { 2531 `u§ge (); 2532 `ex™ (0); 2535 maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 2537 sys = `g_dbus_£tup_bus ( DBUS_BUS_SYSTEM , NULL , NULL); 2538 ià(! sys ) { 2539 `årštf ( ¡d”r , "Can't get on system bus"); 2540 `ex™ (1); 2543 £ssiÚ = `g_dbus_£tup_bus ( DBUS_BUS_SESSION , NULL , NULL); 2544 ià(! £ssiÚ ) { 2545 `årštf ( ¡d”r , "Can't get on session bus"); 2546 `ex™ (1); 2549 owÃr_w©ch = `g_dbus_add_sigÇl_w©ch ( £ssiÚ , NULL , NULL, 2550 DBUS_INTERFACE_DBUS , 2552 Çme_owÃr_chªged , 2553 NULL , NULL); 2555 ´Ý”t›s_w©ch = `g_dbus_add_´Ý”t›s_w©ch ( £ssiÚ , NULL , NULL, 2556 MPRIS_PLAYER_INTERFACE , 2557 ¶ay”_sigÇl , 2558 NULL , NULL); 2560 sigÇl_w©ch = `g_dbus_add_sigÇl_w©ch ( £ssiÚ , NULL , NULL, 2561 MPRIS_PLAYER_INTERFACE , 2562 NULL , ¶ay”_sigÇl , 2563 NULL , NULL); 2565 `mem£t (& § , 0, (sa)); 2566 § . §_æags = SA_NOCLDSTOP ; 2567 § . §_hªdËr = sig_‹rm ; 2568 `sigaùiÚ ( SIGTERM , & § , NULL ); 2569 `sigaùiÚ ( SIGINT , & § , NULL ); 2571 þ›Á = `g_dbus_þ›Á_Ãw ( sys , BLUEZ_BUS_NAME , BLUEZ_PATH ); 2573 `g_dbus_þ›Á_£t_cÚÃù_w©ch ( þ›Á , cÚÃù_hªdËr , NULL ); 2574 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( þ›Á , discÚÃù_hªdËr , NULL ); 2576 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( þ›Á , ´oxy_added , ´oxy_»moved , 2577 ´Ý”ty_chªged , NULL ); 2579 `g_maš_loÝ_run ( maš_loÝ ); 2581 `g_dbus_»move_w©ch ( £ssiÚ , owÃr_w©ch ); 2582 `g_dbus_»move_w©ch ( £ssiÚ , ´Ý”t›s_w©ch ); 2583 `g_dbus_»move_w©ch ( £ssiÚ , sigÇl_w©ch ); 2585 `g_dbus_þ›Á_uÄef ( þ›Á ); 2587 `dbus_cÚÃùiÚ_uÄef ( £ssiÚ ); 2588 `dbus_cÚÃùiÚ_uÄef ( sys ); 2590 `g_maš_loÝ_uÄef ( maš_loÝ ); 2593 } } @tools/obex-client-tool.c 22 #ifdeà HAVE_CONFIG_H 23  ~"cÚfig.h " 26  ~ 27  ~ 28  ~ 29  ~ 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 33  ~<”ºo.h > 34  ~<¡dio.h > 36  ~<»adlše/»adlše.h > 37  ~<»adlše/hi¡Üy.h > 39  ~ 40  ~"btio/btio.h " 42  GMašLoÝ * gmaš_loÝ = NULL ; 43  GObex * gobex = NULL ; 45  gboÞ—n gÝtiÚ_·ck‘ = FALSE ; 46  gboÞ—n gÝtiÚ_blu‘oÙh = FALSE ; 47 * gÝtiÚ_sourû = NULL ; 48 * gÝtiÚ_de¡ = NULL ; 49  gÝtiÚ_chªÃl = -1; 50  gÝtiÚ_imtu = -1; 51  gÝtiÚ_omtu = -1; 53  $sig_‹rm ( sig ) 55 `g_´št ("T”mš©šg dutØsigÇÈ%d\n", sig ); 56 `g_maš_loÝ_qu™ ( maš_loÝ ); 57 } } 59  GO±iÚEÁry gÝtiÚs [] = { 60 { "unix", 'u', G_OPTION_FLAG_REVERSE , G_OPTION_ARG_NONE , 61 & ÝtiÚ_blu‘oÙh , "Use‡ UNIX socket" }, 62 { "blu‘oÙh", 'b', 0, G_OPTION_ARG_NONE , 63 & ÝtiÚ_blu‘oÙh , "Use Bluetooth" }, 64 { "sourû", 's', 0, G_OPTION_ARG_STRING , 65 & ÝtiÚ_sourû , "Bluetooth‡dapter‡ddress", 67 { "de¡š©iÚ", 'd', 0, G_OPTION_ARG_STRING , 68 & ÝtiÚ_de¡ , "Remote bluetooth‡ddress", 70 { "chªÃl", 'c', 0, G_OPTION_ARG_INT , 71 & ÝtiÚ_chªÃl , "Transport channel", "CHANNEL" }, 72 { "·ck‘", 'p', 0, G_OPTION_ARG_NONE , 73 & ÝtiÚ_·ck‘ , "Packet basedransport" }, 74 { "¡»am", 's', G_OPTION_FLAG_REVERSE , G_OPTION_ARG_NONE , 75 & ÝtiÚ_·ck‘ , "Stream basedransport" }, 76 { "šput-mtu", 'i', 0, G_OPTION_ARG_INT , 77 & ÝtiÚ_imtu , "Transport input MTU", "MTU" }, 78 { "ouut-mtu", 'o', 0, G_OPTION_ARG_INT , 79 & ÝtiÚ_omtu , "Transport output MTU", "MTU" }, 80 { NULL }, 83  $cÚn_com¶‘e ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 84 gpoš‹r u£r_d©a ) 86 ià( ”r !ð NULL ) 87 `g_´št ("CÚÃù fažed: %s\n", ”r -> mes§ge ); 89 `g_´št ("Connect succeeded\n"); 90 } } 92  $cmd_cÚÃù ( ¬gc , ** ¬gv ) 94 `g_obex_cÚÃù ( obex , cÚn_com¶‘e , NULL , NULL, G_OBEX_HDR_INVALID ); 95 } } 97  sŒªsãr_d©a { 98  mfd ; 101  $Œªsãr_com¶‘e ( GObex * obex , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 103  Œªsãr_d©a * d©a = u£r_d©a ; 105 ià( ”r !ð NULL ) 106 `g_´š‹¼ ("çžed: %s\n", ”r -> mes§ge ); 108 `g_´št ("transfer succeeded\n"); 110 `þo£ ( d©a -> fd ); 111 `g_ä“ ( d©a ); 112 } } 114  gssize $put_d©a_cb (* buf , gsize Ën , gpoš‹r u£r_d©a ) 116  Œªsãr_d©a * d©a = u£r_d©a ; 118  `»ad ( d©a -> fd , buf , Ën ); 119 } } 121  $cmd_put ( ¬gc , ** ¬gv ) 123  Œªsãr_d©a * d©a ; 124 GE¼Ü * ”r = NULL ; 125  fd ; 127 ià( ¬gc < 2) { 128 `g_´š‹¼ ("Filename„equired\n"); 132 fd = `Ý’ ( ¬gv [1], O_RDONLY | O_NOCTTY , 0); 133 ià( fd < 0) { 134 `g_´š‹¼ ("Ý’: %s\n", `¡»¼Ü ( ”ºo )); 138 d©a = `g_Ãw0 ( Œªsãr_d©a , 1); 139 d©a -> fd = fd; 141 `g_obex_put_»q ( obex , put_d©a_cb , Œªsãr_com¶‘e , d©a , & ”r , 142 G_OBEX_HDR_NAME , ¬gv [1], 143 G_OBEX_HDR_INVALID ); 144 ià( ”r !ð NULL ) { 145 `g_´š‹¼ ("puˆçžed: %s\n", ”r -> mes§ge ); 146 `g_”rÜ_ä“ ( ”r ); 147 `þo£ ( d©a -> fd ); 148 `g_ä“ ( d©a ); 150 } } 152  gboÞ—n $g‘_d©a_cb (cÚ¡ * buf , gsize Ën , gpoš‹r u£r_d©a ) 154  Œªsãr_d©a * d©a = u£r_d©a ; 156 ià( `wr™e ( d©a -> fd , buf , Ën ) < 0) { 157 `g_´š‹¼ ("wr™e: %s\n", `¡»¼Ü ( ”ºo )); 158  FALSE ; 161  TRUE ; 162 } } 164  $cmd_g‘ ( ¬gc , ** ¬gv ) 166  Œªsãr_d©a * d©a ; 167 GE¼Ü * ”r = NULL ; 168  fd ; 170 ià( ¬gc < 2) { 171 `g_´š‹¼ ("Filename„equired\n"); 175 fd = `Ý’ ( ¬gv [1], O_WRONLY | O_CREAT | O_NOCTTY , 0600); 176 ià( fd < 0) { 177 `g_´š‹¼ ("Ý’: %s\n", `¡»¼Ü ( ”ºo )); 181 d©a = `g_Ãw0 ( Œªsãr_d©a , 1); 182 d©a -> fd = fd; 184 `g_obex_g‘_»q ( obex , g‘_d©a_cb , Œªsãr_com¶‘e , d©a , & ”r , 185 G_OBEX_HDR_NAME , ¬gv [1], 186 G_OBEX_HDR_INVALID ); 187 ià( ”r !ð NULL ) { 188 `g_´š‹¼ ("g‘ fažed: %s\n", ”r -> mes§ge ); 189 `g_”rÜ_ä“ ( ”r ); 190 `þo£ ( d©a -> fd ); 191 `g_ä“ ( d©a ); 193 } } 195  cmd_h–p ( ¬gc , ** ¬gv ); 197  $cmd_ex™ ( ¬gc , ** ¬gv ) 199 `g_maš_loÝ_qu™ ( maš_loÝ ); 200 } } 203 cÚ¡ * mcmd ; 204 (* mfunc )( m¬gc , ** m¬gv ); 205 cÚ¡ * m·¿ms ; 206 cÚ¡ * mdesc ; 207 } gcommªds [] = { 208 { "h–p", cmd_h–p , "", "Showhis help"}, 209 { "ex™", cmd_ex™ , "", "Exit‡pplication" }, 210 { "qu™", cmd_ex™ , "", "Exit‡pplication" }, 211 { "cÚÃù", cmd_cÚÃù , "[target]", "OBEX Connect" }, 212 { "put", cmd_put , "", "Send‡ file" }, 213 { "g‘", cmd_g‘ , "", "Receive‡ file" }, 214 { NULL }, 217  $cmd_h–p ( ¬gc , ** ¬gv ) 219  i ; 221  i = 0; commªds [i]. cmd ; i++) 222 `´štf ("%-15 %-30 %s\n", commªds [ i ]. cmd , 223 commªds [ i ]. ·¿ms , commªds[i]. desc ); 224 } } 226  $·r£_lše (* lše_»ad ) 228 ** ¬gvp ; 229  ¬gý ; 230  i ; 232 ià( lše_»ad =ð NULL ) { 233 `g_´št ("\n"); 234 `g_maš_loÝ_qu™ ( maš_loÝ ); 238 lše_»ad = `g_¡r¡r (line_read); 240 ià(* lše_»ad == '\0') { 241 `ä“ ( lše_»ad ); 245 `add_hi¡Üy ( lše_»ad ); 247 `g_sh–l_·r£_¬gv ( lše_»ad , & ¬gý , & ¬gvp , NULL ); 249 `ä“ ( lše_»ad ); 251  i = 0; commªds [i]. cmd ; i++) 252 ià( `¡rÿ£cmp ( commªds [ i ]. cmd , ¬gvp [0]) == 0) 255 ià( commªds [ i ]. cmd ) 256 commªds [ i ]. `func ( ¬gý , ¬gvp ); 258 `g_´št ("%s: commªd‚Ù found\n", ¬gvp [0]); 260 `g_¡rä“v ( ¬gvp ); 261 } } 263  gboÞ—n $´om±_»ad ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , 264 gpoš‹r u£r_d©a ) 266 ià( cÚd & ( G_IO_HUP | G_IO_ERR | G_IO_NVAL )) { 267 `g_maš_loÝ_qu™ ( maš_loÝ ); 268  FALSE ; 271 `¾_ÿÎback_»ad_ch¬ (); 273  TRUE ; 274 } } 276  $discÚn_func ( GObex * obex , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 278 `g_´š‹¼ ("DiscÚÃùed: %s\n", ”r ?ƒ¼-> mes§ge : "(noƒrror)"); 279 `g_maš_loÝ_qu™ ( maš_loÝ ); 280 } } 282  $Œª¥Üt_cÚÃù ( GIOChªÃl * io , GObexT¿n¥ÜtTy³ Œª¥Üt ) 284 GIOChªÃl * šput ; 285 GIOCÚd™iÚ ev’ts ; 287 `g_io_chªÃl_£t_æags ( io , G_IO_FLAG_NONBLOCK , NULL ); 288 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 290 obex = `g_obex_Ãw ( io , Œª¥Üt , ÝtiÚ_imtu , ÝtiÚ_omtu ); 291 `g_obex_£t_discÚÃù_funùiÚ ( obex , discÚn_func , NULL ); 293 šput = `g_io_chªÃl_unix_Ãw ( STDIN_FILENO ); 294 `g_io_chªÃl_£t_þo£_Ú_uÄef ( šput , TRUE ); 295 ev’ts = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL ; 296 `g_io_add_w©ch ( šput , ev’ts , ´om±_»ad , NULL ); 297 `g_io_chªÃl_uÄef ( šput ); 298 `¾_ÿÎback_hªdËr_š¡®l ("þ›Á> ", ·r£_lše ); 299 } } 301  GIOChªÃl * $unix_cÚÃù ( GObexT¿n¥ÜtTy³ Œª¥Üt ) 303 GIOChªÃl * io ; 304  sockaddr_un addr = { 305 AF_UNIX , "\0/gobex/server" 307  sk , ”r , sock_ty³ ; 309 ià( ÝtiÚ_·ck‘ ) 310 sock_ty³ = SOCK_SEQPACKET ; 312 sock_ty³ = SOCK_STREAM ; 314 sk = `sock‘ ( PF_LOCAL , sock_ty³ , 0); 315 ià( sk < 0) { 316 ”r = ”ºo ; 317 `g_´š‹¼ ("Can't create unix socket: %s (%d)\n", 318 `¡»¼Ü ( ”r ),ƒrr); 319  NULL ; 322 ià( `cÚÃù ( sk , ( sockaddr *è& addr , (addr)) < 0) { 323 ”r = ”ºo ; 324 `g_´š‹¼ ("cÚÃù: % (%d)\n", `¡»¼Ü ( ”r ),ƒrr); 325  NULL ; 328 io = `g_io_chªÃl_unix_Ãw ( sk ); 330 `g_´št ("Unix sock‘ c»©ed: %d\n", sk ); 332 `Œª¥Üt_cÚÃù ( io , Œª¥Üt ); 334  io ; 335 } } 337  $cÚn_ÿÎback ( GIOChªÃl * io , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 339 GObexT¿n¥ÜtTy³ Œª¥Üt = `GPOINTER_TO_UINT ( u£r_d©a ); 341 ià( ”r !ð NULL ) { 342 `g_´š‹¼ ("%s\n", ”r -> mes§ge ); 346 `g_´št ("Bluetooth socket connected\n"); 348 `Œª¥Üt_cÚÃù ( io , Œª¥Üt ); 349 } } 351  GIOChªÃl * $l2ÿp_cÚÃù ( GObexT¿n¥ÜtTy³ Œª¥Üt , GE¼Ü ** ”r ) 353 ià( ÝtiÚ_sourû ) 354  `bt_io_cÚÃù ( cÚn_ÿÎback , 355 `GUINT_TO_POINTER ( Œª¥Üt ), 356 NULL , ”r , 357 BT_IO_OPT_SOURCE , ÝtiÚ_sourû , 358 BT_IO_OPT_DEST , ÝtiÚ_de¡ , 359 BT_IO_OPT_PSM , ÝtiÚ_chªÃl , 360 BT_IO_OPT_MODE , BT_IO_MODE_ERTM , 361 BT_IO_OPT_OMTU , ÝtiÚ_omtu , 362 BT_IO_OPT_IMTU , ÝtiÚ_imtu , 363 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 364 BT_IO_OPT_INVALID ); 366  `bt_io_cÚÃù ( cÚn_ÿÎback , 367 `GUINT_TO_POINTER ( Œª¥Üt ), 368 NULL , ”r , 369 BT_IO_OPT_DEST , ÝtiÚ_de¡ , 370 BT_IO_OPT_PSM , ÝtiÚ_chªÃl , 371 BT_IO_OPT_MODE , BT_IO_MODE_ERTM , 372 BT_IO_OPT_OMTU , ÝtiÚ_omtu , 373 BT_IO_OPT_IMTU , ÝtiÚ_imtu , 374 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 375 BT_IO_OPT_INVALID ); 376 } } 378  GIOChªÃl * $rfcomm_cÚÃù ( GObexT¿n¥ÜtTy³ Œª¥Üt , GE¼Ü ** ”r ) 380 ià( ÝtiÚ_sourû ) 381  `bt_io_cÚÃù ( cÚn_ÿÎback , 382 `GUINT_TO_POINTER ( Œª¥Üt ), 383 NULL , ”r , 384 BT_IO_OPT_SOURCE , ÝtiÚ_sourû , 385 BT_IO_OPT_DEST , ÝtiÚ_de¡ , 386 BT_IO_OPT_CHANNEL , ÝtiÚ_chªÃl , 387 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 388 BT_IO_OPT_INVALID ); 390  `bt_io_cÚÃù ( cÚn_ÿÎback , 391 `GUINT_TO_POINTER ( Œª¥Üt ), 392 NULL , ”r , 393 BT_IO_OPT_DEST , ÝtiÚ_de¡ , 394 BT_IO_OPT_CHANNEL , ÝtiÚ_chªÃl , 395 BT_IO_OPT_SEC_LEVEL , BT_IO_SEC_LOW , 396 BT_IO_OPT_INVALID ); 397 } } 399  GIOChªÃl * $blu‘oÙh_cÚÃù ( GObexT¿n¥ÜtTy³ Œª¥Üt ) 401 GIOChªÃl * io ; 402 GE¼Ü * ”r = NULL ; 404 ià( ÝtiÚ_de¡ =ð NULL || ÝtiÚ_chªÃl < 0) 405  NULL ; 407 ià( ÝtiÚ_chªÃl > 31) 408 io = `l2ÿp_cÚÃù ( Œª¥Üt , & ”r ); 410 io = `rfcomm_cÚÃù ( Œª¥Üt , & ”r ); 412 ià( io !ð NULL ) 413  io ; 415 `g_´š‹¼ ("%s\n", ”r -> mes§ge ); 416 `g_”rÜ_ä“ ( ”r ); 417  NULL ; 418 } } 420  $maš ( ¬gc , * ¬gv []) 422 GO±iÚCÚ‹xt * cÚ‹xt ; 423 GE¼Ü * ”r = NULL ; 424  sigaùiÚ § ; 425 GIOChªÃl * io ; 426 GObexT¿n¥ÜtTy³ Œª¥Üt ; 428 cÚ‹xt = `g_ÝtiÚ_cÚ‹xt_Ãw ( NULL ); 429 `g_ÝtiÚ_cÚ‹xt_add_maš_’Œ›s ( cÚ‹xt , ÝtiÚs , NULL ); 431 `g_ÝtiÚ_cÚ‹xt_·r£ ( cÚ‹xt , & ¬gc , & ¬gv , & ”r ); 432 ià( ”r !ð NULL ) { 433 `g_´š‹¼ ("%s\n", ”r -> mes§ge ); 434 `g_”rÜ_ä“ ( ”r ); 435 `ex™ ( EXIT_FAILURE ); 438 ià( ÝtiÚ_·ck‘ ) 439 Œª¥Üt = G_OBEX_TRANSPORT_PACKET ; 441 Œª¥Üt = G_OBEX_TRANSPORT_STREAM ; 443 ià( ÝtiÚ_blu‘oÙh ) 444 io = `blu‘oÙh_cÚÃù ( Œª¥Üt ); 446 io = `unix_cÚÃù ( Œª¥Üt ); 448 ià( io =ð NULL ) 449 `ex™ ( EXIT_FAILURE ); 451 `mem£t (& § , 0, (sa)); 452 § . §_hªdËr = sig_‹rm ; 453 `sigaùiÚ ( SIGINT , & § , NULL ); 454 `sigaùiÚ ( SIGTERM , & § , NULL ); 456 maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 458 `g_maš_loÝ_run ( maš_loÝ ); 460 `¾_ÿÎback_hªdËr_»move (); 461 `þ—r_hi¡Üy (); 462 `g_obex_uÄef ( obex ); 463 `g_ÝtiÚ_cÚ‹xt_ä“ ( cÚ‹xt ); 464 `g_maš_loÝ_uÄef ( maš_loÝ ); 466 `ex™ ( EXIT_SUCCESS ); 467 } } @tools/obex-server-tool.c 22 #ifdeà HAVE_CONFIG_H 23  ~"cÚfig.h " 26  ~ 27  ~ 28  ~ 29  ~ 30  ~ 31  ~<¡dlib.h > 32  ~<¡dio.h > 33  ~<¡ršg.h > 34  ~<”ºo.h > 36  ~ 37  ~"btio/btio.h " 39  GMašLoÝ * gmaš_loÝ = NULL ; 41  GSLi¡ * gþ›Ás = NULL ; 43  gboÞ—n gÝtiÚ_·ck‘ = FALSE ; 44  gboÞ—n gÝtiÚ_blu‘oÙh = FALSE ; 45  gÝtiÚ_chªÃl = -1; 46  gÝtiÚ_imtu = -1; 47  gÝtiÚ_omtu = -1; 48 * gÝtiÚ_roÙ = NULL ; 50  $sig_‹rm ( sig ) 52 `g_´št ("T”mš©šg dutØsigÇÈ%d\n", sig ); 53 `g_maš_loÝ_qu™ ( maš_loÝ ); 54 } } 56  GO±iÚEÁry gÝtiÚs [] = { 57 { "unix", 'u', G_OPTION_FLAG_REVERSE , G_OPTION_ARG_NONE , 58 & ÝtiÚ_blu‘oÙh , "Use‡ UNIX socket" }, 59 { "blu‘oÙh", 'b', 0, G_OPTION_ARG_NONE , 60 & ÝtiÚ_blu‘oÙh , "Use Bluetooth" }, 61 { "chªÃl", 'c', 0, G_OPTION_ARG_INT , 62 & ÝtiÚ_chªÃl , "Transport channel", "CHANNEL" }, 63 { "·ck‘", 'p', 0, G_OPTION_ARG_NONE , 64 & ÝtiÚ_·ck‘ , "Packet basedransport" }, 65 { "¡»am", 's', G_OPTION_FLAG_REVERSE , G_OPTION_ARG_NONE , 66 & ÝtiÚ_·ck‘ , "Stream basedransport" }, 67 { "roÙ", 'r', 0, G_OPTION_ARG_STRING , 68 & ÝtiÚ_roÙ , "Root dir", "/..." }, 69 { "šput-mtu", 'i', 0, G_OPTION_ARG_INT , 70 & ÝtiÚ_imtu , "Transport input MTU", "MTU" }, 71 { "ouut-mtu", 'o', 0, G_OPTION_ARG_INT , 72 & ÝtiÚ_omtu , "Transport output MTU", "MTU" }, 73 { NULL }, 76  $discÚn_func ( GObex * obex , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 78 `g_´št ("Cl›Á discÚÃùed: %s\n", ”r ?ƒ¼-> mes§ge : ""); 79 þ›Ás = `g_¦i¡_»move (þ›Ás, obex ); 80 `g_obex_uÄef ( obex ); 81 } } 83  sŒªsãr_d©a { 84  mfd ; 87  $Œªsãr_com¶‘e ( GObex * obex , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 89  Œªsãr_d©a * d©a = u£r_d©a ; 91 ià( ”r !ð NULL ) 92 `g_´š‹¼ ("Œªsã¸çžed: %s\n", ”r -> mes§ge ); 94 `g_´št ("transfer succeeded\n"); 96 `þo£ ( d©a -> fd ); 97 `g_ä“ ( d©a ); 98 } } 100  gboÞ—n $»cv_d©a (cÚ¡ * buf , gsize Ën , gpoš‹r u£r_d©a ) 102  Œªsãr_d©a * d©a = u£r_d©a ; 104 `g_´št ("»ûived %zu by‹ oàd©a\n", Ën ); 106 ià( `wr™e ( d©a -> fd , buf , Ën ) < 0) { 107 `g_´š‹¼ ("wr™e: %s\n", `¡»¼Ü ( ”ºo )); 108  FALSE ; 111  TRUE ; 112 } } 114  $hªdË_put ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 116 GE¼Ü * ”r = NULL ; 117 GObexH—d” * hdr ; 118 cÚ¡ * ty³ , * Çme ; 119  Œªsãr_d©a * d©a ; 120 gsize ty³_Ën ; 122 hdr = `g_obex_·ck‘_g‘_h—d” ( »q , G_OBEX_HDR_TYPE ); 123 ià( hdr !ð NULL ) { 124 `g_obex_h—d”_g‘_by‹s ( hdr , (cÚ¡ gušt8 **è& ty³ , 125 & ty³_Ën ); 126 ià( ty³ [ ty³_Ën - 1] != '\0') { 127 `g_´š‹¼ ("non-nulerminatedype header\n"); 128 ty³ = NULL ; 131 ty³ = NULL ; 133 hdr = `g_obex_·ck‘_g‘_h—d” ( »q , G_OBEX_HDR_NAME ); 134 ià( hdr !ð NULL ) 135 `g_obex_h—d”_g‘_unicode ( hdr , & Çme ); 137 Çme = NULL ; 139 `g_´št ("puˆty³ \"%s\"‚am\"%s\"\n", ty³ ?ype : "", 140 Çme ?‚ame : ""); 142 d©a = `g_Ãw0 ( Œªsãr_d©a , 1); 144 d©a -> fd = `Ý’ ( Çme , O_WRONLY | O_CREAT | O_NOCTTY , 0600); 145 ià( d©a -> fd < 0) { 146 `g_´š‹¼ ("Ý’(%s): %s\n", Çme , `¡»¼Ü ( ”ºo )); 147 `g_ä“ ( d©a ); 148 `g_obex_£nd_r¥ ( obex , G_OBEX_RSP_FORBIDDEN , NULL , 149 G_OBEX_HDR_INVALID ); 153 `g_obex_put_r¥ ( obex , »q , »cv_d©a , Œªsãr_com¶‘e , d©a , & ”r , 154 G_OBEX_HDR_INVALID ); 155 ià( ”r !ð NULL ) { 156 `g_´š‹¼ ("UÇbËØ£nd„e¥Ú£: %s\n", ”r -> mes§ge ); 157 `g_”rÜ_ä“ ( ”r ); 158 `g_ä“ ( d©a ); 160 } } 162  gssize $£nd_d©a (* buf , gsize Ën , gpoš‹r u£r_d©a ) 164  Œªsãr_d©a * d©a = u£r_d©a ; 165 gssize »t ; 167 »t = `»ad ( d©a -> fd , buf , Ën ); 168 `g_´št ("£ndšg %zu by‹ oàd©a\n", »t ); 170  »t ; 171 } } 173  $hªdË_g‘ ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 175 GE¼Ü * ”r = NULL ; 176  Œªsãr_d©a * d©a ; 177 cÚ¡ * ty³ , * Çme ; 178 GObexH—d” * hdr ; 179 gsize ty³_Ën ; 181 hdr = `g_obex_·ck‘_g‘_h—d” ( »q , G_OBEX_HDR_TYPE ); 182 ià( hdr !ð NULL ) { 183 `g_obex_h—d”_g‘_by‹s ( hdr , (cÚ¡ gušt8 **è& ty³ , 184 & ty³_Ën ); 185 ià( ty³ [ ty³_Ën - 1] != '\0') { 186 `g_´š‹¼ ("non-nulerminatedype header\n"); 187 ty³ = NULL ; 190 ty³ = NULL ; 192 hdr = `g_obex_·ck‘_g‘_h—d” ( »q , G_OBEX_HDR_NAME ); 193 ià( hdr !ð NULL ) 194 `g_obex_h—d”_g‘_unicode ( hdr , & Çme ); 196 Çme = NULL ; 198 `g_´št ("g‘y³ \"%s\"‚am\"%s\"\n", ty³ ?ype : "", 199 Çme ?‚ame : ""); 201 d©a = `g_Ãw0 ( Œªsãr_d©a , 1); 203 d©a -> fd = `Ý’ ( Çme , O_RDONLY | O_NOCTTY , 0); 204 ià( d©a -> fd < 0) { 205 `g_´š‹¼ ("Ý’(%s): %s\n", Çme , `¡»¼Ü ( ”ºo )); 206 `g_ä“ ( d©a ); 207 `g_obex_£nd_r¥ ( obex , G_OBEX_RSP_FORBIDDEN , NULL , 208 G_OBEX_HDR_INVALID ); 212 `g_obex_g‘_r¥ ( obex , £nd_d©a , Œªsãr_com¶‘e , d©a , & ”r , 213 G_OBEX_HDR_INVALID ); 214 ià( ”r !ð NULL ) { 215 `g_´š‹¼ ("UÇbËØ£nd„e¥Ú£: %s\n", ”r -> mes§ge ); 216 `g_”rÜ_ä“ ( ”r ); 217 `g_ä“ ( d©a ); 219 } } 221  $hªdË_cÚÃù ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 223 GObexPack‘ * r¥ ; 225 `g_´št ("connect\n"); 227 r¥ = `g_obex_·ck‘_Ãw ( G_OBEX_RSP_SUCCESS , TRUE , G_OBEX_HDR_INVALID ); 228 `g_obex_£nd ( obex , r¥ , NULL ); 229 } } 231  $Œª¥Üt_acû± ( GIOChªÃl * io ) 233 GObex * obex ; 234 GObexT¿n¥ÜtTy³ Œª¥Üt ; 236 `g_io_chªÃl_£t_æags ( io , G_IO_FLAG_NONBLOCK , NULL ); 237 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 239 ià( ÝtiÚ_·ck‘ ) 240 Œª¥Üt = G_OBEX_TRANSPORT_PACKET ; 242 Œª¥Üt = G_OBEX_TRANSPORT_STREAM ; 244 obex = `g_obex_Ãw ( io , Œª¥Üt , ÝtiÚ_imtu , ÝtiÚ_omtu ); 245 `g_obex_£t_discÚÃù_funùiÚ ( obex , discÚn_func , NULL ); 246 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_PUT , hªdË_put , NULL ); 247 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_GET , hªdË_g‘ , NULL ); 248 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_CONNECT , hªdË_cÚÃù , 249 NULL ); 250 þ›Ás = `g_¦i¡_­³nd (þ›Ás, obex ); 251 } } 253  gboÞ—n $unix_acû± ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , gpoš‹r d©a ) 255  sockaddr_un addr ; 256 sockËn_t add¾’ ; 257  sk , þi_sk ; 258 GIOChªÃl * io ; 260 ià( cÚd & G_IO_NVAL ) 261  FALSE ; 263 ià( cÚd & ( G_IO_HUP | G_IO_ERR )) { 264 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 265  FALSE ; 268 sk = `g_io_chªÃl_unix_g‘_fd ( chª ); 270 `mem£t (& addr , 0, (addr)); 271 add¾’ = ( addr ); 273 þi_sk = `acû± ( sk , ( sockaddr *è& addr , & add¾’ ); 274 ià( þi_sk < 0) { 275 `g_´š‹¼ ("acû±: % (%d)\n", `¡»¼Ü ( ”ºo ),ƒrrno); 276  TRUE ; 279 `g_´št ("Accepted‚ew client connection on unix socket (fd=%d)\n", 280 þi_sk ); 282 io = `g_io_chªÃl_unix_Ãw ( þi_sk ); 284 `Œª¥Üt_acû± ( io ); 285 `g_io_chªÃl_uÄef ( io ); 287  TRUE ; 288 } } 290  $blu‘oÙh_acû± ( GIOChªÃl * io , GE¼Ü * ”r , gpoš‹r d©a ) 292 ià( ”r ) { 293 `g_´š‹¼ ("acû±: %s\n", ”r -> mes§ge ); 297 `g_´št ("Accepted‚ew client connection on bluetooth socket\n"); 299 `Œª¥Üt_acû± ( io ); 300 } } 302  gboÞ—n $blu‘oÙh_w©ch ( GIOChªÃl * chª , GIOCÚd™iÚ cÚd , gpoš‹r d©a ) 304 ià( cÚd & G_IO_NVAL ) 305  FALSE ; 307 `g_io_chªÃl_shutdown ( chª , TRUE , NULL ); 308  FALSE ; 309 } } 311  GIOChªÃl * $l2ÿp_li¡’ ( GE¼Ü ** ”r ) 313  `bt_io_li¡’ ( blu‘oÙh_acû± , NULL , NULL, 314 NULL , ”r , 315 BT_IO_OPT_PSM , ÝtiÚ_chªÃl , 316 BT_IO_OPT_MODE , BT_IO_MODE_ERTM , 317 BT_IO_OPT_OMTU , ÝtiÚ_omtu , 318 BT_IO_OPT_IMTU , ÝtiÚ_imtu , 319 BT_IO_OPT_INVALID ); 320 } } 322  GIOChªÃl * $rfcomm_li¡’ ( GE¼Ü ** ”r ) 324  `bt_io_li¡’ ( blu‘oÙh_acû± , NULL , NULL, 325 NULL , ”r , 326 BT_IO_OPT_CHANNEL , ÝtiÚ_chªÃl , 327 BT_IO_OPT_INVALID ); 328 } } 330  gušt $blu‘oÙh_li¡’ () 332 GIOChªÃl * io ; 333 gušt id ; 334 GE¼Ü * ”r = NULL ; 336 ià( ÝtiÚ_chªÃl == -1) { 337 `g_´š‹¼ ("Bluetooth channel‚ot set\n"); 341 ià( ÝtiÚ_·ck‘ || ÝtiÚ_chªÃl > 31) 342 io = `l2ÿp_li¡’ (& ”r ); 344 io = `rfcomm_li¡’ (& ”r ); 346 ià( io =ð NULL ) { 347 `g_´š‹¼ ("%s\n", ”r -> mes§ge ); 348 `g_”rÜ_ä“ ( ”r ); 352 `g_´št ("Bluetooth socket created\n"); 354 id = `g_io_add_w©ch ( io , G_IO_HUP | G_IO_ERR | G_IO_NVAL , 355 blu‘oÙh_w©ch , NULL ); 357 `g_io_chªÃl_£t_æags ( io , G_IO_FLAG_NONBLOCK , NULL ); 358 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 359 `g_io_chªÃl_uÄef ( io ); 361  id ; 362 } } 364  gušt $unix_li¡’ () 366 GIOChªÃl * io ; 367  sockaddr_un addr = { 368 AF_UNIX , "\0/gobex/server" 370  sk , ”r , sock_ty³ ; 371 gušt id ; 373 ià( ÝtiÚ_·ck‘ ) 374 sock_ty³ = SOCK_SEQPACKET ; 376 sock_ty³ = SOCK_STREAM ; 378 sk = `sock‘ ( PF_LOCAL , sock_ty³ , 0); 379 ià( sk < 0) { 380 ”r = ”ºo ; 381 `g_´š‹¼ ("Can't create unix socket: %s (%d)\n", 382 `¡»¼Ü ( ”r ),ƒrr); 386 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 387 `g_´š‹¼ ("Can't bind unix socket: %s (%d)\n", 388 `¡»¼Ü ( ”ºo ),ƒrrno); 389 `þo£ ( sk ); 393 ià( `li¡’ ( sk , 1) < 0) { 394 `g_´š‹¼ ("Can't†isten on unix socket: %s (%d)\n", 395 `¡»¼Ü ( ”ºo ),ƒrrno); 396 `þo£ ( sk ); 400 `g_´št ("Unix sock‘ c»©ed: %d\n", sk ); 402 io = `g_io_chªÃl_unix_Ãw ( sk ); 403 id = `g_io_add_w©ch ( io , G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 404 unix_acû± , NULL ); 406 `g_io_chªÃl_£t_æags ( io , G_IO_FLAG_NONBLOCK , NULL ); 407 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 408 `g_io_chªÃl_uÄef ( io ); 410  id ; 411 } } 413  $maš ( ¬gc , * ¬gv []) 415 GO±iÚCÚ‹xt * cÚ‹xt ; 416 GE¼Ü * ”r = NULL ; 417  sigaùiÚ § ; 418 gušt £rv”_id ; 420 cÚ‹xt = `g_ÝtiÚ_cÚ‹xt_Ãw ( NULL ); 421 `g_ÝtiÚ_cÚ‹xt_add_maš_’Œ›s ( cÚ‹xt , ÝtiÚs , NULL ); 423 `g_ÝtiÚ_cÚ‹xt_·r£ ( cÚ‹xt , & ¬gc , & ¬gv , & ”r ); 424 ià( ”r !ð NULL ) { 425 `g_´š‹¼ ("%s\n", ”r -> mes§ge ); 426 `g_”rÜ_ä“ ( ”r ); 427 `ex™ ( EXIT_FAILURE ); 430 ià( ÝtiÚ_roÙ && `chdœ (option_root) < 0) { 431 `³¼Ü ("chdir:"); 432 `ex™ ( EXIT_FAILURE ); 435 ià( ÝtiÚ_blu‘oÙh ) 436 £rv”_id = `blu‘oÙh_li¡’ (); 438 £rv”_id = `unix_li¡’ (); 440 ià( £rv”_id == 0) 441 `ex™ ( EXIT_FAILURE ); 443 `mem£t (& § , 0, (sa)); 444 § . §_hªdËr = sig_‹rm ; 445 `sigaùiÚ ( SIGINT , & § , NULL ); 446 `sigaùiÚ ( SIGTERM , & § , NULL ); 448 maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 450 `g_maš_loÝ_run ( maš_loÝ ); 452 `g_sourû_»move ( £rv”_id ); 453 `g_¦i¡_ä“_fuÎ ( þ›Ás , ( GDe¡royNÙify è g_obex_uÄef ); 454 `g_ÝtiÚ_cÚ‹xt_ä“ ( cÚ‹xt ); 455 `g_maš_loÝ_uÄef ( maš_loÝ ); 457 `ex™ ( EXIT_SUCCESS ); 458 } } @tools/obexctl.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡dboÞ.h > 30  ~<”ºo.h > 31  ~ 32  ~<¡dlib.h > 33  ~ 34  ~ 35  ~<š‰y³s.h > 37  ~<»adlše/»adlše.h > 38  ~<»adlše/hi¡Üy.h > 39  ~ 40  ~ 42  ~<þ›Á/di¥Ïy.h > 45  #COLORED_NEW COLOR_GREEN "NEW" COLOR_OFF ) 46  #COLORED_CHG COLOR_YELLOW "CHG" COLOR_OFF ) 47  #COLORED_DEL COLOR_RED "DEL" COLOR_OFF ) 49  #PROMPT_ON COLOR_BLUE "[obex]" COLOR_OFF "# " ) 50  #PROMPT_OFF "[obex]# " ) 52  #OBEX_SESSION_INTERFACE "Üg.bluez.obex.SessiÚ1" ) 53  #OBEX_TRANSFER_INTERFACE "Üg.bluez.obex.T¿nsãr1" ) 54  #OBEX_CLIENT_INTERFACE "Üg.bluez.obex.Cl›Á1" ) 55  #OBEX_OPP_INTERFACE "Üg.bluez.obex.ObjeùPush1" ) 56  #OBEX_FTP_INTERFACE "Üg.bluez.obex.FžeT¿nsãr1" ) 57  #OBEX_PBAP_INTERFACE "Üg.bluez.obex.PhÚebookAcûss1" ) 58  #OBEX_MAP_INTERFACE "Üg.bluez.obex.Mes§geAcûss1" ) 59  #OBEX_MSG_INTERFACE "Üg.bluez.obex.Mes§ge1" ) 61  GMašLoÝ * gmaš_loÝ ; 62  DBusCÚÃùiÚ * gdbus_cÚn ; 63  GDBusProxy * gdeçuÉ_£ssiÚ ; 64  GSLi¡ * g£ssiÚs = NULL ; 65  GSLi¡ * gÝps = NULL ; 66  GSLi¡ * gáps = NULL ; 67  GSLi¡ * gpb­s = NULL ; 68  GSLi¡ * gm­s = NULL ; 69  GSLi¡ * gmsgs = NULL ; 70  GSLi¡ * gŒªsãrs = NULL ; 71  GDBusProxy * gþ›Á = NULL ; 73  sŒªsãr_d©a { 74 ušt64_t mŒªsã¼ed ; 75 ušt64_t msize ; 78  $cÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 80 `¾_£t_´om± ( PROMPT_ON ); 81 `´štf ("\r"); 82 `¾_Ú_Ãw_lše (); 83 `¾_»di¥Ïy (); 84 } } 86  $discÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 88 `¾_£t_´om± ( PROMPT_OFF ); 89 `´štf ("\r"); 90 `¾_Ú_Ãw_lše (); 91 `¾_»di¥Ïy (); 92 } } 94  $cmd_qu™ ( ¬gc , * ¬gv []) 96 `g_maš_loÝ_qu™ ( maš_loÝ ); 97 } } 99  $cÚÃù_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 101 DBusE¼Ü ”rÜ ; 103 `dbus_”rÜ_š™ (& ”rÜ ); 105 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 106 `¾_´štf ("FažedØcÚÃù: %s\n", ”rÜ . Çme ); 107 `dbus_”rÜ_ä“ (& ”rÜ ); 111 `¾_´štf ("Connection successful\n"); 112 } } 114  $­³nd_v¬ŸÁ ( DBusMes§geI‹r * ™” ,  ty³ , * v® ) 116 DBusMes§geI‹r v®ue ; 117  sig [2] = { ty³ , '\0' }; 119 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_VARIANT , sig , & v®ue ); 121 `dbus_mes§ge_™”_­³nd_basic (& v®ue , ty³ , v® ); 123 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v®ue ); 124 } } 126  $diù_­³nd_’Œy ( DBusMes§geI‹r * diù , cÚ¡ * key , 127  ty³ , * v® ) 129 DBusMes§geI‹r ’Œy ; 131 ià( ty³ =ð DBUS_TYPE_STRING ) { 132 cÚ¡ * ¡r = *((cÚ¡ **è v® ); 133 ià( ¡r =ð NULL ) 137 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , 138 NULL , & ’Œy ); 140 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & key ); 142 `­³nd_v¬ŸÁ (& ’Œy , ty³ , v® ); 144 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & ’Œy ); 145 } } 147  scÚÃù_¬gs { 148 * mdev ; 149 * mrg‘ ; 152  $cÚÃù_¬gs_ä“ (* d©a ) 154  cÚÃù_¬gs * ¬gs = d©a ; 156 `g_ä“ ( ¬gs -> dev ); 157 `g_ä“ ( ¬gs -> rg‘ ); 158 `g_ä“ ( ¬gs ); 159 } } 161  $cÚÃù_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 163  cÚÃù_¬gs * ¬gs = u£r_d©a ; 164 DBusMes§geI‹r diù ; 166 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¬gs -> dev ); 168 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 169 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 170 DBUS_TYPE_STRING_AS_STRING 171 DBUS_TYPE_VARIANT_AS_STRING 172 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 173 & diù ); 175 ià( ¬gs -> rg‘ =ð NULL ) 176  dÚe ; 178 `diù_­³nd_’Œy (& diù , "T¬g‘", DBUS_TYPE_STRING , & ¬gs -> rg‘ ); 180 dÚe : 181 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 182 } } 184  $cmd_cÚÃù ( ¬gc , * ¬gv []) 186  cÚÃù_¬gs * ¬gs ; 187 cÚ¡ * rg‘ = "opp"; 189 ià( ¬gc < 2) { 190 `¾_´štf ("Missing device‡ddress‡rgument\n"); 194 ià(! þ›Á ) { 195 `¾_´štf ("Client…roxy‚ot‡vailable\n"); 199 ià( ¬gc > 2) 200 rg‘ = ¬gv [2]; 202 ¬gs = `g_Ãw0 ( cÚÃù_¬gs , 1); 203 ¬gs -> dev = `g_¡rdup ( ¬gv [1]); 204 ¬gs -> rg‘ = `g_¡rdup (target); 206 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( þ›Á , "C»©eSessiÚ", cÚÃù_£tup , 207 cÚÃù_»¶y , ¬gs , cÚÃù_¬gs_ä“ è=ð FALSE ) { 208 `¾_´štf ("Failedo connect\n"); 212 `¾_´štf ("A‰em±šgØcÚÃùØ%s\n", ¬gv [1]); 213 } } 215  $discÚÃù_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 217 DBusE¼Ü ”rÜ ; 219 `dbus_”rÜ_š™ (& ”rÜ ); 221 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 222 `¾_´štf ("FažedØdiscÚÃù: %s\n", ”rÜ . Çme ); 223 `dbus_”rÜ_ä“ (& ”rÜ ); 227 `¾_´štf ("Disconnection successful\n"); 228 } } 230  $discÚÃù_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 232 GDBusProxy * ´oxy = u£r_d©a ; 233 cÚ¡ * ·th ; 235 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 237 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_OBJECT_PATH , & ·th ); 238 } } 240  GDBusProxy * $fšd_£ssiÚ (cÚ¡ * ·th ) 242 GSLi¡ * l ; 244  l = £ssiÚs ;†;† = `g_¦i¡_Ãxt (l)) { 245 GDBusProxy * ´oxy = l -> d©a ; 247 ià( `¡rcmp ( ·th , `g_dbus_´oxy_g‘_·th ( ´oxy )) == 0) 248  ´oxy ; 251  NULL ; 252 } } 254  $cmd_discÚÃù ( ¬gc , * ¬gv []) 256 GDBusProxy * ´oxy ; 258 ià( ¬gc > 1) 259 ´oxy = `fšd_£ssiÚ ( ¬gv [1]); 261 ´oxy = deçuÉ_£ssiÚ ; 263 ià( ´oxy =ð NULL ) { 264 `¾_´štf ("Session‚ot‡vailable\n"); 268 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( þ›Á , "RemoveSessiÚ", discÚÃù_£tup , 269 discÚÃù_»¶y , ´oxy , NULL è=ð FALSE ) { 270 `¾_´štf ("Failedo disconnect\n"); 274 `¾_´štf ("Attemptingo disconnecto %s\n", 275 `g_dbus_´oxy_g‘_·th ( ´oxy )); 276 } } 278 * $´oxy_desütiÚ ( GDBusProxy * ´oxy , cÚ¡ * t™Ë , 279 cÚ¡ * desütiÚ ) 281 cÚ¡ * ·th ; 283 ·th = `g_dbus_´oxy_g‘_·th ( ´oxy ); 285  `g_¡rdup_´štf ("%s%s%s%s %s ", 286 desütiÚ ? "[" : "", 287 desütiÚ ? : "", 288 desütiÚ ? "] " : "", 289 t™Ë , ·th ); 290 } } 292  $´št_´oxy ( GDBusProxy * ´oxy , cÚ¡ * t™Ë , 293 cÚ¡ * desütiÚ ) 295 * ¡r ; 297 ¡r = `´oxy_desütiÚ ( ´oxy , t™Ë , desütiÚ ); 299 `¾_´štf ("%s%s\n", ¡r , deçuÉ_£ssiÚ =ð ´oxy ? "[default]" : ""); 301 `g_ä“ ( ¡r ); 302 } } 304  $cmd_li¡ ( ¬gc , * ¬g []) 306 GSLi¡ * l ; 308  l = £ssiÚs ;†;† = `g_¦i¡_Ãxt (l)) { 309 GDBusProxy * ´oxy = l -> d©a ; 310 `´št_´oxy ( ´oxy , "SessiÚ", NULL ); 312 } } 314  boÞ $check_deçuÉ_£ssiÚ () 316 ià(! deçuÉ_£ssiÚ ) { 317 `¾_´štf ("No default session‡vailable\n"); 318  FALSE ; 321  TRUE ; 322 } } 324  $´št_™” (cÚ¡ * Ïb– , cÚ¡ * Çme , 325 DBusMes§geI‹r * ™” ) 327 dbus_boÞ_t v®boÞ ; 328 dbus_ušt64_t v®u64 ; 329 dbus_ušt32_t v®u32 ; 330 dbus_ušt16_t v®u16 ; 331 dbus_št16_t v®s16 ; 332 cÚ¡ * v®¡r ; 333 DBusMes§geI‹r sub™” ; 335 ià( ™” =ð NULL ) { 336 `¾_´štf ("%s% i nž\n", Ïb– , Çme ); 340  `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” )) { 341  DBUS_TYPE_INVALID : 342 `¾_´štf ("%s% i šv®id\n", Ïb– , Çme ); 344  DBUS_TYPE_STRING : 345  DBUS_TYPE_OBJECT_PATH : 346 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®¡r ); 347 `¾_´štf ("%s%s: %s\n", Ïb– , Çme , v®¡r ); 349  DBUS_TYPE_BOOLEAN : 350 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®boÞ ); 351 `¾_´štf ("%s%s: %s\n", Ïb– , Çme , 352 v®boÞ =ð TRUE ? "yes" : "no"); 354  DBUS_TYPE_UINT64 : 355 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®u64 ); 356 `¾_´štf ("%s%s: %" PRIu64 "\n", Ïb– , Çme , v®u64 ); 358  DBUS_TYPE_UINT32 : 359 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®u32 ); 360 `¾_´štf ("%s%s: 0x%08x\n", Ïb– , Çme , v®u32 ); 362  DBUS_TYPE_UINT16 : 363 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®u16 ); 364 `¾_´štf ("%s%s: 0x%04x\n", Ïb– , Çme , v®u16 ); 366  DBUS_TYPE_INT16 : 367 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®s16 ); 368 `¾_´štf ("%s%s: %d\n", Ïb– , Çme , v®s16 ); 370  DBUS_TYPE_VARIANT : 371 `dbus_mes§ge_™”_»cur£ ( ™” , & sub™” ); 372 `´št_™” ( Ïb– , Çme , & sub™” ); 374  DBUS_TYPE_ARRAY : 375 `dbus_mes§ge_™”_»cur£ ( ™” , & sub™” ); 376  `dbus_mes§ge_™”_g‘_¬g_ty³ (& sub™” ) != 377 DBUS_TYPE_INVALID ) { 378 `´št_™” ( Ïb– , Çme , & sub™” ); 379 `dbus_mes§ge_™”_Ãxt (& sub™” ); 382  DBUS_TYPE_DICT_ENTRY : 383 `dbus_mes§ge_™”_»cur£ ( ™” , & sub™” ); 384 `dbus_mes§ge_™”_g‘_basic (& sub™” , & v®¡r ); 385 `dbus_mes§ge_™”_Ãxt (& sub™” ); 386 `´št_™” ( Ïb– , v®¡r , & sub™” ); 389 `¾_´štf ("%s% ha unsuµÜ‹dy³\n", Ïb– , Çme ); 392 } } 394  $´št_´Ý”ty ( GDBusProxy * ´oxy , cÚ¡ * Çme ) 396 DBusMes§geI‹r ™” ; 398 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , Çme , & ™” è=ð FALSE ) 401 `´št_™” ("\t", Çme , & ™” ); 402 } } 404  $cmd_show ( ¬gc , * ¬gv []) 406 GDBusProxy * ´oxy ; 408 ià( ¬gc < 2) { 409 ià( `check_deçuÉ_£ssiÚ (è=ð FALSE ) 412 ´oxy = deçuÉ_£ssiÚ ; 414 ´oxy = `fšd_£ssiÚ ( ¬gv [1]); 415 ià(! ´oxy ) { 416 `¾_´štf ("SessiÚ % nÙ‡važabË\n", ¬gv [1]); 421 `¾_´štf ("SessiÚ %s\n", `g_dbus_´oxy_g‘_·th ( ´oxy )); 423 `´št_´Ý”ty ( ´oxy , "Destination"); 424 `´št_´Ý”ty ( ´oxy , "Target"); 425 } } 427  $£t_deçuÉ_£ssiÚ ( GDBusProxy * ´oxy ) 429 * desc ; 430 DBusMes§geI‹r ™” ; 432 deçuÉ_£ssiÚ = ´oxy ; 434 ià(! `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "De¡š©iÚ", & ™” )) { 435 desc = `g_¡rdup ( PROMPT_ON ); 436  dÚe ; 439 `dbus_mes§ge_™”_g‘_basic (& ™” , & desc ); 440 desc = `g_¡rdup_´štf ( COLOR_BLUE "[%s]" COLOR_OFF "# ", desc); 442 dÚe : 443 `¾_£t_´om± ( desc ); 444 `¾_»di¥Ïy (); 445 `g_ä“ ( desc ); 446 } } 448  $cmd_£Ëù ( ¬gc , * ¬gv []) 450 GDBusProxy * ´oxy ; 452 ià( ¬gc < 2) { 453 `¾_´štf ("Missing session‡ddress‡rgument\n"); 457 ´oxy = `fšd_£ssiÚ ( ¬gv [1]); 458 ià( ´oxy =ð NULL ) { 459 `¾_´štf ("SessiÚ % nÙ‡važabË\n", ¬gv [1]); 463 ià( deçuÉ_£ssiÚ =ð ´oxy ) 466 `£t_deçuÉ_£ssiÚ ( ´oxy ); 468 `´št_´oxy ( ´oxy , "SessiÚ", NULL ); 469 } } 471  GDBusProxy * $fšd_Œªsãr (cÚ¡ * ·th ) 473 GSLi¡ * l ; 475  l = Œªsãrs ;†;† = `g_¦i¡_Ãxt (l)) { 476 GDBusProxy * ´oxy = l -> d©a ; 478 ià( `¡rcmp ( ·th , `g_dbus_´oxy_g‘_·th ( ´oxy )) == 0) 479  ´oxy ; 482  NULL ; 483 } } 485  GDBusProxy * $fšd_mes§ge (cÚ¡ * ·th ) 487 GSLi¡ * l ; 489  l = msgs ;†;† = `g_¦i¡_Ãxt (l)) { 490 GDBusProxy * ´oxy = l -> d©a ; 492 ià( `¡rcmp ( ·th , `g_dbus_´oxy_g‘_·th ( ´oxy )) == 0) 493  ´oxy ; 496  NULL ; 497 } } 499  $Œªsãr_šfo ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 501 `¾_´štf ("T¿nsã¸%s\n", `g_dbus_´oxy_g‘_·th ( ´oxy )); 503 `´št_´Ý”ty ( ´oxy , "Session"); 504 `´št_´Ý”ty ( ´oxy , "Name"); 505 `´št_´Ý”ty ( ´oxy , "Type"); 506 `´št_´Ý”ty ( ´oxy , "Status"); 507 `´št_´Ý”ty ( ´oxy , "Time"); 508 `´št_´Ý”ty ( ´oxy , "Size"); 509 `´št_´Ý”ty ( ´oxy , "Transferred"); 510 `´št_´Ý”ty ( ´oxy , "Filename"); 511 } } 513  $mes§ge_šfo ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 515 `¾_´štf ("Mes§g%s\n", `g_dbus_´oxy_g‘_·th ( ´oxy )); 517 `´št_´Ý”ty ( ´oxy , "Folder"); 518 `´št_´Ý”ty ( ´oxy , "Subject"); 519 `´št_´Ý”ty ( ´oxy , "Timestamp"); 520 `´št_´Ý”ty ( ´oxy , "Sender"); 521 `´št_´Ý”ty ( ´oxy , "SenderAddress"); 522 `´št_´Ý”ty ( ´oxy , "ReplyTo"); 523 `´št_´Ý”ty ( ´oxy , "Recipient"); 524 `´št_´Ý”ty ( ´oxy , "RecipientAddress"); 525 `´št_´Ý”ty ( ´oxy , "Type"); 526 `´št_´Ý”ty ( ´oxy , "Size"); 527 `´št_´Ý”ty ( ´oxy , "Status"); 528 `´št_´Ý”ty ( ´oxy , "Priority"); 529 `´št_´Ý”ty ( ´oxy , "Read"); 530 `´št_´Ý”ty ( ´oxy , "Deleted"); 531 `´št_´Ý”ty ( ´oxy , "Sent"); 532 `´št_´Ý”ty ( ´oxy , "Protected"); 533 } } 535  $cmd_šfo ( ¬gc , * ¬gv []) 537 GDBusProxy * ´oxy ; 539 ià( ¬gc < 2) { 540 `¾_´štf ("Missing object…ath‡rgument\n"); 544 ´oxy = `fšd_Œªsãr ( ¬gv [1]); 545 ià( ´oxy ) { 546 `Œªsãr_šfo ( ´oxy , ¬gc , ¬gv ); 550 ´oxy = `fšd_mes§ge ( ¬gv [1]); 551 ià( ´oxy ) { 552 `mes§ge_šfo ( ´oxy , ¬gc , ¬gv ); 556 `¾_´štf ("Objeù % nÙ‡važabË\n", ¬gv [1]); 557 } } 559  $ÿnûl_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 561 DBusE¼Ü ”rÜ ; 563 `dbus_”rÜ_š™ (& ”rÜ ); 565 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 566 `¾_´štf ("FažedØÿnûl: %s\n", ”rÜ . Çme ); 567 `dbus_”rÜ_ä“ (& ”rÜ ); 571 `¾_´štf ("Cancel successful\n"); 572 } } 574  $cmd_ÿnûl ( ¬gc , * ¬gv []) 576 GDBusProxy * ´oxy ; 578 ià( ¬gc < 2) { 579 `¾_´štf ("Missingransfer‡ddress‡rgument\n"); 583 ´oxy = `fšd_Œªsãr ( ¬gv [1]); 584 ià(! ´oxy ) { 585 `¾_´štf ("T¿nsã¸% nÙ‡važabË\n", ¬gv [1]); 589 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "Cªûl", NULL , ÿnûl_»¶y , NULL, 590 NULL è=ð FALSE ) { 591 `¾_´štf ("Failedo cancelransfer\n"); 595 `¾_´štf ("Attemptingo cancelransfer %s\n", 596 `g_dbus_´oxy_g‘_·th ( ´oxy )); 597 } } 599  $su¥’d_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 601 DBusE¼Ü ”rÜ ; 603 `dbus_”rÜ_š™ (& ”rÜ ); 605 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 606 `¾_´štf ("FažedØsu¥’d: %s\n", ”rÜ . Çme ); 607 `dbus_”rÜ_ä“ (& ”rÜ ); 611 `¾_´štf ("Suspend successful\n"); 612 } } 614  $cmd_su¥’d ( ¬gc , * ¬gv []) 616 GDBusProxy * ´oxy ; 618 ià( ¬gc < 2) { 619 `¾_´štf ("Missingransfer‡ddress‡rgument\n"); 623 ´oxy = `fšd_Œªsãr ( ¬gv [1]); 624 ià(! ´oxy ) { 625 `¾_´štf ("T¿nsã¸% nÙ‡važabË\n", ¬gv [1]); 629 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "Su¥’d", NULL , su¥’d_»¶y , 630 NULL , NULLè=ð FALSE ) { 631 `¾_´štf ("Failedo suspendransfer\n"); 635 `¾_´štf ("Attemptingo suspendransfer %s\n", 636 `g_dbus_´oxy_g‘_·th ( ´oxy )); 637 } } 639  $»sume_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 641 DBusE¼Ü ”rÜ ; 643 `dbus_”rÜ_š™ (& ”rÜ ); 645 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 646 `¾_´štf ("FažedØ»sume: %s\n", ”rÜ . Çme ); 647 `dbus_”rÜ_ä“ (& ”rÜ ); 651 `¾_´štf ("Resume successful\n"); 652 } } 654  $cmd_»sume ( ¬gc , * ¬gv []) 656 GDBusProxy * ´oxy ; 658 ià( ¬gc < 2) { 659 `¾_´štf ("Missingransfer‡ddress‡rgument\n"); 663 ´oxy = `fšd_Œªsãr ( ¬gv [1]); 664 ià(! ´oxy ) { 665 `¾_´štf ("T¿nsã¸% nÙ‡važabË\n", ¬gv [1]); 669 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "Resume", NULL , »sume_»¶y , 670 NULL , NULLè=ð FALSE ) { 671 `¾_´štf ("Failedo„esumeransfer\n"); 675 `¾_´štf ("Attemptingo„esumeransfer %s\n", 676 `g_dbus_´oxy_g‘_·th ( ´oxy )); 677 } } 679  GDBusProxy * $fšd_Ýp (cÚ¡ * ·th ) 681 GSLi¡ * l ; 683  l = Ýps ;†;† = `g_¦i¡_Ãxt (l)) { 684 GDBusProxy * ´oxy = l -> d©a ; 686 ià( `¡rcmp ( ·th , `g_dbus_´oxy_g‘_·th ( ´oxy )) == 0) 687  ´oxy ; 690  NULL ; 691 } } 693  GDBusProxy * $fšd_m­ (cÚ¡ * ·th ) 695 GSLi¡ * l ; 697  l = m­s ;†;† = `g_¦i¡_Ãxt (l)) { 698 GDBusProxy * ´oxy = l -> d©a ; 700 ià( `¡rcmp ( ·th , `g_dbus_´oxy_g‘_·th ( ´oxy )) == 0) 701  ´oxy ; 704  NULL ; 705 } } 707  $´št_diù_™” ( DBusMes§geI‹r * ™” ) 709 DBusMes§geI‹r diù ; 710  ùy³ ; 712 ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” ); 713 ià( ùy³ !ð DBUS_TYPE_ARRAY ) 716 `dbus_mes§ge_™”_»cur£ ( ™” , & diù ); 718 ( ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& diù )) != 719 DBUS_TYPE_INVALID ) { 720 DBusMes§geI‹r ’Œy ; 721 cÚ¡ * key ; 723 ià( ùy³ !ð DBUS_TYPE_DICT_ENTRY ) 726 `dbus_mes§ge_™”_»cur£ (& diù , & ’Œy ); 727 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy è!ð DBUS_TYPE_STRING ) 730 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & key ); 731 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 733 `´št_™” ("\t", key , & ’Œy ); 735 `dbus_mes§ge_™”_Ãxt (& diù ); 737 } } 739  $´št_Œªsãr_™” ( DBusMes§geI‹r * ™” ) 741 cÚ¡ * ·th ; 743 `dbus_mes§ge_™”_g‘_basic ( ™” , & ·th ); 745 `¾_´štf ("T¿nsã¸%s\n", ·th ); 747 `dbus_mes§ge_™”_Ãxt ( ™” ); 749 `´št_diù_™” ( ™” ); 750 } } 752  $£nd_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 754 DBusMes§geI‹r ™” ; 755 DBusE¼Ü ”rÜ ; 757 `dbus_”rÜ_š™ (& ”rÜ ); 759 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 760 `¾_´štf ("FažedØ£nd: %s\n", ”rÜ . Çme ); 761 `dbus_”rÜ_ä“ (& ”rÜ ); 765 `dbus_mes§ge_™”_š™ ( mes§ge , & ™” ); 767 `´št_Œªsãr_™” (& ™” ); 768 } } 770  $£nd_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 772 cÚ¡ * fže = u£r_d©a ; 774 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & fže ); 775 } } 777  $Ýp_£nd ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 779 ià( ¬gc < 2) { 780 `¾_´štf ("Missing file‡rgument\n"); 784 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "S’dFže", £nd_£tup , £nd_»¶y , 785 `g_¡rdup ( ¬gv [1]), g_ä“ è=ð FALSE ) { 786 `¾_´štf ("Failedo send\n"); 790 `¾_´štf ("A‰em±šgØ£nd % tØ%s\n", ¬gv [1], 791 `g_dbus_´oxy_g‘_·th ( ´oxy )); 792 } } 794  $push_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 796 DBusMes§geI‹r ™” ; 797 DBusE¼Ü ”rÜ ; 799 `dbus_”rÜ_š™ (& ”rÜ ); 801 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 802 `¾_´štf ("FažedØPushMes§ge: %s\n", ”rÜ . Çme ); 803 `dbus_”rÜ_ä“ (& ”rÜ ); 807 `dbus_mes§ge_™”_š™ ( mes§ge , & ™” ); 809 `´št_Œªsãr_™” (& ™” ); 810 } } 812  $push_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 814 cÚ¡ * fže = u£r_d©a ; 815 cÚ¡ * fÞd” = ""; 816 DBusMes§geI‹r diù ; 818 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & fže ); 819 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & fÞd” ); 821 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 822 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 823 DBUS_TYPE_STRING_AS_STRING 824 DBUS_TYPE_VARIANT_AS_STRING 825 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 826 & diù ); 828 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 829 } } 831  $m­_£nd ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 833 ià( ¬gc < 2) { 834 `¾_´štf ("Missing file‡rgument\n"); 838 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "PushMes§ge", push_£tup , 839 push_»¶y , `g_¡rdup ( ¬gv [1]), 840 g_ä“ è=ð FALSE ) { 841 `¾_´štf ("Failedo send\n"); 845 `¾_´štf ("A‰em±šgØ£nd % tØ%s\n", ¬gv [1], 846 `g_dbus_´oxy_g‘_·th ( ´oxy )); 847 } } 849  $cmd_£nd ( ¬gc , * ¬gv []) 851 GDBusProxy * ´oxy ; 853 ià(! `check_deçuÉ_£ssiÚ ()) 856 ´oxy = `fšd_Ýp ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 857 ià( ´oxy ) { 858 `Ýp_£nd ( ´oxy , ¬gc , ¬gv ); 862 ´oxy = `fšd_m­ ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 863 ià( ´oxy ) { 864 `m­_£nd ( ´oxy , ¬gc , ¬gv ); 868 `¾_´štf ("Command‚ot supported\n"); 869 } } 871  $chªge_fÞd”_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 873 DBusE¼Ü ”rÜ ; 875 `dbus_”rÜ_š™ (& ”rÜ ); 877 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 878 `¾_´štf ("FažedØChªgeFÞd”: %s\n", ”rÜ . Çme ); 879 `dbus_”rÜ_ä“ (& ”rÜ ); 883 `¾_´štf ("ChangeFolder successful\n"); 884 } } 886  $chªge_fÞd”_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 888 cÚ¡ * fÞd” = u£r_d©a ; 890 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & fÞd” ); 891 } } 893  $£Ëù_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 895 DBusMes§geI‹r ™” ; 896 DBusE¼Ü ”rÜ ; 898 `dbus_”rÜ_š™ (& ”rÜ ); 900 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 901 `¾_´štf ("FažedØS–eù: %s\n", ”rÜ . Çme ); 902 `dbus_”rÜ_ä“ (& ”rÜ ); 906 `dbus_mes§ge_™”_š™ ( mes§ge , & ™” ); 908 `¾_´štf ("Select successful\n"); 909 } } 911  $£Ëù_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 913 cÚ¡ * fÞd” = u£r_d©a ; 914 cÚ¡ * loÿtiÚ = "int"; 916 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & loÿtiÚ ); 917 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & fÞd” ); 918 } } 920  $£tfÞd”_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 922 DBusE¼Ü ”rÜ ; 924 `dbus_”rÜ_š™ (& ”rÜ ); 926 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 927 `¾_´štf ("FažedØS‘FÞd”: %s\n", ”rÜ . Çme ); 928 `dbus_”rÜ_ä“ (& ”rÜ ); 932 `¾_´štf ("SetFolder successful\n"); 933 } } 935  $£tfÞd”_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 937 cÚ¡ * fÞd” = u£r_d©a ; 939 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & fÞd” ); 940 } } 942  GDBusProxy * $fšd_áp (cÚ¡ * ·th ) 944 GSLi¡ * l ; 946  l = áps ;†;† = `g_¦i¡_Ãxt (l)) { 947 GDBusProxy * ´oxy = l -> d©a ; 949 ià( `¡rcmp ( ·th , `g_dbus_´oxy_g‘_·th ( ´oxy )) == 0) 950  ´oxy ; 953  NULL ; 954 } } 956  GDBusProxy * $fšd_pb­ (cÚ¡ * ·th ) 958 GSLi¡ * l ; 960  l = pb­s ;†;† = `g_¦i¡_Ãxt (l)) { 961 GDBusProxy * ´oxy = l -> d©a ; 963 ià( `¡rcmp ( ·th , `g_dbus_´oxy_g‘_·th ( ´oxy )) == 0) 964  ´oxy ; 967  NULL ; 968 } } 970  $áp_cd ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 972 ià( ¬gc < 2) { 973 `¾_´štf ("Missing…ath‡rgument\n"); 977 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "ChªgeFÞd”", chªge_fÞd”_£tup , 978 chªge_fÞd”_»¶y , `g_¡rdup ( ¬gv [1]), 979 g_ä“ è=ð FALSE ) { 980 `¾_´štf ("Failedo ChangeFolder\n"); 984 `¾_´štf ("A‰em±šgØChªgeFÞd”Ø%s\n", ¬gv [1]); 985 } } 987  $pb­_cd ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 989 ià( ¬gc < 2) { 990 `¾_´štf ("Missing…ath‡rgument\n"); 994 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "S–eù", £Ëù_£tup , 995 £Ëù_»¶y , `g_¡rdup ( ¬gv [1]), 996 g_ä“ è=ð FALSE ) { 997 `¾_´štf ("Failedo Select\n"); 1001 `¾_´štf ("A‰em±šgØS–eùØ%s\n", ¬gv [1]); 1002 } } 1004  $m­_cd ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1006 ià( ¬gc < 2) { 1007 `¾_´štf ("Missing…ath‡rgument\n"); 1011 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "S‘FÞd”", £tfÞd”_£tup , 1012 £tfÞd”_»¶y , `g_¡rdup ( ¬gv [1]), 1013 g_ä“ è=ð FALSE ) { 1014 `¾_´štf ("Failedo SetFolder\n"); 1018 `¾_´štf ("A‰em±šgØS‘FÞd”Ø%s\n", ¬gv [1]); 1019 } } 1021  $cmd_cd ( ¬gc , * ¬gv []) 1023 GDBusProxy * ´oxy ; 1025 ià(! `check_deçuÉ_£ssiÚ ()) 1028 ´oxy = `fšd_áp ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 1029 ià( ´oxy ) { 1030 `áp_cd ( ´oxy , ¬gc , ¬gv ); 1034 ´oxy = `fšd_pb­ ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 1035 ià( ´oxy ) { 1036 `pb­_cd ( ´oxy , ¬gc , ¬gv ); 1040 ´oxy = `fšd_m­ ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 1041 ià( ´oxy ) { 1042 `m­_cd ( ´oxy , ¬gc , ¬gv ); 1046 `¾_´štf ("Command‚ot supported\n"); 1047 } } 1049  $li¡_fÞd”_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1051 DBusMes§geI‹r ™” , ¬¿y ; 1052 DBusE¼Ü ”rÜ ; 1054 `dbus_”rÜ_š™ (& ”rÜ ); 1056 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1057 `¾_´štf ("FažedØLi¡FÞd”: %s\n", ”rÜ . Çme ); 1058 `dbus_”rÜ_ä“ (& ”rÜ ); 1062 `dbus_mes§ge_™”_š™ ( mes§ge , & ™” ); 1064 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_ARRAY ) 1067 `dbus_mes§ge_™”_»cur£ (& ™” , & ¬¿y ); 1069  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y è!ð DBUS_TYPE_INVALID ) { 1070 `´št_diù_™” (& ¬¿y ); 1071 `dbus_mes§ge_™”_Ãxt (& ¬¿y ); 1073 } } 1075  $áp_ls ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1077 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "Li¡FÞd”", NULL , 1078 li¡_fÞd”_»¶y , NULL , 1079 NULL è=ð FALSE ) { 1080 `¾_´štf ("Failedo†s\n"); 1084 `¾_´štf ("Attemptingo ListFolder\n"); 1085 } } 1087  $·r£_li¡_»¶y ( DBusMes§ge * mes§ge ) 1089 DBusMes§geI‹r ™” , ¬¿y ; 1091 `dbus_mes§ge_™”_š™ ( mes§ge , & ™” ); 1093 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_ARRAY ) 1096 `dbus_mes§ge_™”_»cur£ (& ™” , & ¬¿y ); 1098  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y è!ð DBUS_TYPE_INVALID ) { 1099 DBusMes§geI‹r ’Œy ; 1100 cÚ¡ * vÿrd ; 1102 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y è!ð DBUS_TYPE_STRUCT ) 1105 `dbus_mes§ge_™”_»cur£ (& ¬¿y , & ’Œy ); 1107 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & vÿrd ); 1108 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 1109 `´št_™” ("\t", vÿrd , & ’Œy ); 1110 `dbus_mes§ge_™”_Ãxt (& ¬¿y ); 1112 } } 1114  $li¡_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1116 DBusE¼Ü ”rÜ ; 1118 `dbus_”rÜ_š™ (& ”rÜ ); 1120 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1121 `¾_´štf ("FažedØLi¡: %s\n", ”rÜ . Çme ); 1122 `dbus_”rÜ_ä“ (& ”rÜ ); 1126 `·r£_li¡_»¶y ( mes§ge ); 1127 } } 1129  $li¡_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 1131 DBusMes§geI‹r diù ; 1133 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1134 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1135 DBUS_TYPE_STRING_AS_STRING 1136 DBUS_TYPE_VARIANT_AS_STRING 1137 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 1138 & diù ); 1140 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 1141 } } 1143  $£¬ch_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1145 DBusE¼Ü ”rÜ ; 1147 `dbus_”rÜ_š™ (& ”rÜ ); 1149 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1150 `¾_´štf ("FažedØS—rch: %s\n", ”rÜ . Çme ); 1151 `dbus_”rÜ_ä“ (& ”rÜ ); 1155 `·r£_li¡_»¶y ( mes§ge ); 1156 } } 1158  $£¬ch_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 1160 cÚ¡ * v®ue = u£r_d©a ; 1161 cÚ¡ * f›ld ; 1162 DBusMes§geI‹r diù ; 1164 f›ld = `i§Íha ( v®ue [0]) ? "name" : "number"; 1166 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & f›ld ); 1167 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & v®ue ); 1169 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1170 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1171 DBUS_TYPE_STRING_AS_STRING 1172 DBUS_TYPE_VARIANT_AS_STRING 1173 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 1174 & diù ); 1176 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 1177 } } 1179  $pb­_£¬ch ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1181 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "S—rch", £¬ch_£tup , 1182 £¬ch_»¶y , `g_¡rdup ( ¬gv [1]), 1183 g_ä“ è=ð FALSE ) { 1184 `¾_´štf ("Failedo Search\n"); 1188 `¾_´štf ("Attemptingo Search\n"); 1189 } } 1191  $li¡_fÞd”s_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1193 DBusE¼Ü ”rÜ ; 1194 DBusMes§geI‹r ™” , ¬¿y ; 1196 `dbus_”rÜ_š™ (& ”rÜ ); 1198 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1199 `¾_´štf ("FažedØLi¡FÞd”s: %s\n", ”rÜ . Çme ); 1200 `dbus_”rÜ_ä“ (& ”rÜ ); 1204 `dbus_mes§ge_™”_š™ ( mes§ge , & ™” ); 1206 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_ARRAY ) 1209 `dbus_mes§ge_™”_»cur£ (& ™” , & ¬¿y ); 1211  `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y è!ð DBUS_TYPE_INVALID ) { 1212 `´št_diù_™” (& ¬¿y ); 1213 `dbus_mes§ge_™”_Ãxt (& ¬¿y ); 1215 } } 1217  $li¡_fÞd”s_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 1219 DBusMes§geI‹r diù ; 1221 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1222 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1223 DBUS_TYPE_STRING_AS_STRING 1224 DBUS_TYPE_VARIANT_AS_STRING 1225 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 1226 & diù ); 1228 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 1229 } } 1231  $li¡_mes§ges_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1233 DBusE¼Ü ”rÜ ; 1234 DBusMes§geI‹r ™” , ¬¿y ; 1235  ùy³ ; 1237 `dbus_”rÜ_š™ (& ”rÜ ); 1239 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1240 `¾_´štf ("FažedØLi¡FÞd”s: %s\n", ”rÜ . Çme ); 1241 `dbus_”rÜ_ä“ (& ”rÜ ); 1245 `dbus_mes§ge_™”_š™ ( mes§ge , & ™” ); 1247 ià( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è!ð DBUS_TYPE_ARRAY ) 1250 `dbus_mes§ge_™”_»cur£ (& ™” , & ¬¿y ); 1252 ( ùy³ = `dbus_mes§ge_™”_g‘_¬g_ty³ (& ¬¿y )) == 1253 DBUS_TYPE_DICT_ENTRY ) { 1254 DBusMes§geI‹r ’Œy ; 1255 cÚ¡ * obj ; 1257 `dbus_mes§ge_™”_»cur£ (& ¬¿y , & ’Œy ); 1258 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & obj ); 1259 `¾_´štf ("\t%s\n", obj ); 1260 `dbus_mes§ge_™”_Ãxt (& ¬¿y ); 1262 } } 1264  $li¡_mes§ges_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 1266 cÚ¡ * fÞd” = u£r_d©a ; 1267 DBusMes§geI‹r diù ; 1269 ià( `¡rcmp ( fÞd” , "*") == 0) 1270 fÞd” = ""; 1272 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & fÞd” ); 1274 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1275 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1276 DBUS_TYPE_STRING_AS_STRING 1277 DBUS_TYPE_VARIANT_AS_STRING 1278 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 1279 & diù ); 1281 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 1282 } } 1284  $pb­_li¡ ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1286 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "Li¡", li¡_£tup , li¡_»¶y , 1287 NULL , NULLè=ð FALSE ) { 1288 `¾_´štf ("Failedo List\n"); 1292 `¾_´štf ("Attemptingo List\n"); 1293 } } 1295  $g‘_size_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1297 GDBusProxy * ´oxy = u£r_d©a ; 1298 DBusE¼Ü ”rÜ ; 1299 DBusMes§geI‹r ™” ; 1301 `dbus_”rÜ_š™ (& ”rÜ ); 1303 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1304 `¾_´štf ("FažedØG‘Size: %s\n", ”rÜ . Çme ); 1305 `dbus_”rÜ_ä“ (& ”rÜ ); 1309 `dbus_mes§ge_™”_š™ ( mes§ge , & ™” ); 1311 `´št_™” ("\t", "Size", & ™” ); 1313 `pb­_li¡ ( ´oxy , 0, NULL ); 1314 } } 1316  $pb­_g‘_size ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1318 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "G‘Size", NULL , g‘_size_»¶y , 1319 ´oxy , NULL è=ð FALSE ) { 1320 `¾_´štf ("Failedo GetSize\n"); 1324 `¾_´štf ("Attemptingo GetSize\n"); 1325 } } 1327  $pb­_ls ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1329 ià( ¬gc > 1) { 1330 ià( `¡rcmp ("-l", ¬gv [1])) 1331 `pb­_£¬ch ( ´oxy , ¬gc , ¬gv ); 1333 `pb­_g‘_size ( ´oxy , ¬gc , ¬gv ); 1337 `pb­_li¡ ( ´oxy , ¬gc , ¬gv ); 1338 } } 1340  $m­_ls_mes§ges ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1342 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "Li¡Mes§ges", li¡_mes§ges_£tup , 1343 li¡_mes§ges_»¶y , `g_¡rdup ( ¬gv [1]), 1344 g_ä“ è=ð FALSE ) { 1345 `¾_´štf ("Failedo ListMessages\n"); 1349 `¾_´štf ("Attemptingo ListMessages\n"); 1350 } } 1352  $m­_ls ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1354 ià( ¬gc > 1) { 1355 `m­_ls_mes§ges ( ´oxy , ¬gc , ¬gv ); 1359 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "Li¡FÞd”s", li¡_fÞd”s_£tup , 1360 li¡_fÞd”s_»¶y , NULL , 1361 NULL è=ð FALSE ) { 1362 `¾_´štf ("Failedo ListFolders\n"); 1366 `¾_´štf ("Attemptingo ListFolders\n"); 1367 } } 1369  $cmd_ls ( ¬gc , * ¬gv []) 1371 GDBusProxy * ´oxy ; 1373 ià(! `check_deçuÉ_£ssiÚ ()) 1376 ´oxy = `fšd_áp ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 1377 ià( ´oxy ) { 1378 `áp_ls ( ´oxy , ¬gc , ¬gv ); 1382 ´oxy = `fšd_pb­ ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 1383 ià( ´oxy ) { 1384 `pb­_ls ( ´oxy , ¬gc , ¬gv ); 1388 ´oxy = `fšd_m­ ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 1389 ià( ´oxy ) { 1390 `m­_ls ( ´oxy , ¬gc , ¬gv ); 1394 `¾_´štf ("Command‚ot supported\n"); 1395 } } 1397  sý_¬gs { 1398 * msourû ; 1399 * mrg‘ ; 1402  $ý_ä“ (* d©a ) 1404  ý_¬gs * ¬gs = d©a ; 1406 `g_ä“ ( ¬gs -> sourû ); 1407 `g_ä“ ( ¬gs -> rg‘ ); 1408 `g_ä“ ( ¬gs ); 1409 } } 1411  ý_¬gs * $ý_Ãw (* ¬gv []) 1413  ý_¬gs * ¬gs ; 1414 cÚ¡ * sourû ; 1415 cÚ¡ * rg‘ ; 1417 sourû = `ršdex ( ¬gv [1], ':'); 1418 ià( sourû =ð NULL ) 1419 sourû = ¬gv [1]; 1421 sourû ++; 1423 rg‘ = `ršdex ( ¬gv [2], ':'); 1424 ià( rg‘ =ð NULL ) 1425 rg‘ = ¬gv [2]; 1427 rg‘ ++; 1429 ¬gs = `g_Ãw0 ( ý_¬gs , 1); 1430 ¬gs -> sourû = `g_¡rdup (source); 1431 ¬gs -> rg‘ = `g_¡rdup (target); 1433  ¬gs ; 1434 } } 1436  $ý_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 1438  ý_¬gs * ¬gs = u£r_d©a ; 1440 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¬gs -> sourû ); 1441 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¬gs -> rg‘ ); 1442 } } 1444  $cÝy_fže_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1446 DBusE¼Ü ”rÜ ; 1448 `dbus_”rÜ_š™ (& ”rÜ ); 1450 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1451 `¾_´štf ("FažedØCÝyFže: %s\n", ”rÜ . Çme ); 1452 `dbus_”rÜ_ä“ (& ”rÜ ); 1456 `¾_´štf ("CopyFile successful\n"); 1457 } } 1459  $áp_cÝy ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1461  ý_¬gs * ¬gs ; 1463 ¬gs = `ý_Ãw ( ¬gv ); 1465 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "CÝyFže", ý_£tup , 1466 cÝy_fže_»¶y , ¬gs , ý_ä“ è=ð FALSE ) { 1467 `¾_´štf ("Failedo CopyFile\n"); 1471 `¾_´štf ("Attemptingo CopyFile\n"); 1472 } } 1474  $g‘_fže_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1476 DBusE¼Ü ”rÜ ; 1477 DBusMes§geI‹r ™” ; 1479 `dbus_”rÜ_š™ (& ”rÜ ); 1481 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1482 `¾_´štf ("FažedØG‘Fže: %s\n", ”rÜ . Çme ); 1483 `dbus_”rÜ_ä“ (& ”rÜ ); 1487 `dbus_mes§ge_™”_š™ ( mes§ge , & ™” ); 1489 `´št_Œªsãr_™” (& ™” ); 1490 } } 1492  $g‘_fže_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 1494  ý_¬gs * ¬gs = u£r_d©a ; 1496 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¬gs -> rg‘ ); 1497 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¬gs -> sourû ); 1498 } } 1500  $áp_g‘ ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1502  ý_¬gs * ¬gs ; 1504 ià( `ršdex ( ¬gv [2], ':'è=ð NULL ) 1505  `áp_cÝy ( ´oxy , ¬gc , ¬gv ); 1507 ¬gs = `ý_Ãw ( ¬gv ); 1509 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "G‘Fže", g‘_fže_£tup , 1510 g‘_fže_»¶y , ¬gs , ý_ä“ è=ð FALSE ) { 1511 `¾_´štf ("Failedo GetFile\n"); 1515 `¾_´štf ("Attemptingo GetFile\n"); 1516 } } 1518  $put_fže_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1520 DBusE¼Ü ”rÜ ; 1521 DBusMes§geI‹r ™” ; 1523 `dbus_”rÜ_š™ (& ”rÜ ); 1525 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1526 `¾_´štf ("FažedØPutFže: %s\n", ”rÜ . Çme ); 1527 `dbus_”rÜ_ä“ (& ”rÜ ); 1531 `dbus_mes§ge_™”_š™ ( mes§ge , & ™” ); 1533 `´št_Œªsãr_™” (& ™” ); 1534 } } 1536  $áp_put ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1538  ý_¬gs * ¬gs ; 1540 ià( `ršdex ( ¬gv [2], ':'è!ð NULL ) { 1541 `¾_´štf ("Invalidarget file‡rgument\n"); 1545 ¬gs = `ý_Ãw ( ¬gv ); 1547 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "PutFže", ý_£tup , put_fže_»¶y , 1548 ¬gs , ý_ä“ è=ð FALSE ) { 1549 `¾_´štf ("Failedo PutFile\n"); 1553 `¾_´štf ("Attemptingo PutFile\n"); 1554 } } 1556  $áp_ý ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1558 ià( ¬gc < 2) { 1559 `¾_´štf ("Missing source file‡rgument\n"); 1563 ià( ¬gc < 3) { 1564 `¾_´štf ("Missingarget file‡rgument\n"); 1568 ià( `ršdex ( ¬gv [1], ':'è=ð NULL ) 1569  `áp_g‘ ( ´oxy , ¬gc , ¬gv ); 1571  `áp_put ( ´oxy , ¬gc , ¬gv ); 1572 } } 1574  $puÎ_®l_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1576 DBusE¼Ü ”rÜ ; 1578 `dbus_”rÜ_š™ (& ”rÜ ); 1580 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1581 `¾_´štf ("FažedØPuÎAÎ: %s\n", ”rÜ . Çme ); 1582 `dbus_”rÜ_ä“ (& ”rÜ ); 1587 `¾_´štf ("PullAll successful\n"); 1588 } } 1590  $puÎ_®l_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 1592 cÚ¡ * fže = u£r_d©a ; 1593 DBusMes§geI‹r diù ; 1595 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & fže ); 1597 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1598 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1599 DBUS_TYPE_STRING_AS_STRING 1600 DBUS_TYPE_VARIANT_AS_STRING 1601 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 1602 & diù ); 1604 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 1605 } } 1607  $pb­_puÎ_®l ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1609 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "PuÎAÎ", puÎ_®l_£tup , 1610 puÎ_®l_»¶y , `g_¡rdup ( ¬gv [2]), 1611 g_ä“ è=ð FALSE ) { 1612 `¾_´štf ("Failedo PullAll\n"); 1616 `¾_´štf ("Attemptingo PullAll\n"); 1617 } } 1619  $puÎ_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1621 DBusE¼Ü ”rÜ ; 1623 `dbus_”rÜ_š™ (& ”rÜ ); 1625 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1626 `¾_´štf ("FažedØPuÎ: %s\n", ”rÜ . Çme ); 1627 `dbus_”rÜ_ä“ (& ”rÜ ); 1632 `¾_´štf ("Pull successful\n"); 1633 } } 1635  $puÎ_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 1637  ý_¬gs * ¬gs = u£r_d©a ; 1638 DBusMes§geI‹r diù ; 1640 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¬gs -> sourû ); 1641 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & ¬gs -> rg‘ ); 1643 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 1644 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 1645 DBUS_TYPE_STRING_AS_STRING 1646 DBUS_TYPE_VARIANT_AS_STRING 1647 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , 1648 & diù ); 1650 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 1651 } } 1653  $pb­_puÎ ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1655  ý_¬gs * ¬gs ; 1657 ¬gs = `ý_Ãw ( ¬gv ); 1659 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "PuÎ", puÎ_£tup , puÎ_»¶y , 1660 ¬gs , ý_ä“ è=ð FALSE ) { 1661 `¾_´štf ("Failedo Pull\n"); 1665 `¾_´štf ("Attemptingo Pull\n"); 1666 } } 1668  $pb­_ý ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1670 ià( ¬gc < 2) { 1671 `¾_´štf ("Missing source file‡rgument\n"); 1675 ià( ¬gc < 3) { 1676 `¾_´štf ("Missingarget file‡rgument\n"); 1680 ià( `¡rcmp ( ¬gv [1], "*") == 0) 1681  `pb­_puÎ_®l ( ´oxy , ¬gc , ¬gv ); 1683  `pb­_puÎ ( ´oxy , ¬gc , ¬gv ); 1684 } } 1686  $g‘_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1688 DBusMes§geI‹r ™” ; 1689 DBusE¼Ü ”rÜ ; 1691 `dbus_”rÜ_š™ (& ”rÜ ); 1693 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1694 `¾_´štf ("FažedØG‘: %s\n", ”rÜ . Çme ); 1695 `dbus_”rÜ_ä“ (& ”rÜ ); 1699 `dbus_mes§ge_™”_š™ ( mes§ge , & ™” ); 1701 `´št_Œªsãr_™” (& ™” ); 1702 } } 1704  $g‘_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 1706 cÚ¡ * fže = u£r_d©a ; 1707 dbus_boÞ_t ©chm’t = TRUE ; 1709 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & fže ); 1710 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & ©chm’t ); 1711 } } 1713  $m­_ý ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1715 GDBusProxy * obj ; 1717 ià( ¬gc < 2) { 1718 `¾_´štf ("Missing message‡rgument\n"); 1722 obj = `fšd_mes§ge ( ¬gv [1]); 1723 ià( obj =ð NULL ) { 1724 `¾_´štf ("Invalid message‡rgument\n"); 1728 ià( ¬gc < 3) { 1729 `¾_´štf ("Missingarget file‡rgument\n"); 1733 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( obj , "G‘", g‘_£tup , g‘_»¶y , 1734 `g_¡rdup ( ¬gv [2]), g_ä“ è=ð FALSE ) { 1735 `¾_´štf ("Failedo Get\n"); 1739 `¾_´štf ("Attemptingo Get\n"); 1740 } } 1742  $cmd_ý ( ¬gc , * ¬gv []) 1745 GDBusProxy * ´oxy ; 1747 ià(! `check_deçuÉ_£ssiÚ ()) 1750 ´oxy = `fšd_áp ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 1751 ià( ´oxy ) { 1752 `áp_ý ( ´oxy , ¬gc , ¬gv ); 1756 ´oxy = `fšd_pb­ ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 1757 ià( ´oxy ) { 1758 `pb­_ý ( ´oxy , ¬gc , ¬gv ); 1762 ´oxy = `fšd_m­ ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 1763 ià( ´oxy ) { 1764 `m­_ý ( ´oxy , ¬gc , ¬gv ); 1768 `¾_´štf ("Command‚ot supported\n"); 1769 } } 1771  $move_fže_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1773 DBusE¼Ü ”rÜ ; 1775 `dbus_”rÜ_š™ (& ”rÜ ); 1777 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1778 `¾_´štf ("FažedØMoveFže: %s\n", ”rÜ . Çme ); 1779 `dbus_”rÜ_ä“ (& ”rÜ ); 1783 `¾_´štf ("MoveFile successful\n"); 1784 } } 1786  $cmd_mv ( ¬gc , * ¬gv []) 1788 GDBusProxy * ´oxy ; 1789  ý_¬gs * ¬gs ; 1791 ià(! `check_deçuÉ_£ssiÚ ()) 1794 ià( ¬gc < 2) { 1795 `¾_´štf ("Missing source file‡rgument\n"); 1799 ià( ¬gc < 3) { 1800 `¾_´štf ("Missingarget file‡rgument\n"); 1804 ´oxy = `fšd_áp ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 1805 ià( ´oxy =ð NULL ) { 1806 `¾_´štf ("Command‚ot supported\n"); 1810 ¬gs = `ý_Ãw ( ¬gv ); 1812 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "MoveFže", ý_£tup , 1813 move_fže_»¶y , ¬gs , ý_ä“ è=ð FALSE ) { 1814 `¾_´štf ("Failedo MoveFile\n"); 1818 `¾_´štf ("Attemptingo MoveFile\n"); 1819 } } 1821  $d–‘e_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1823 DBusE¼Ü ”rÜ ; 1825 `dbus_”rÜ_š™ (& ”rÜ ); 1827 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1828 `¾_´štf ("FažedØD–‘e: %s\n", ”rÜ . Çme ); 1829 `dbus_”rÜ_ä“ (& ”rÜ ); 1833 `¾_´štf ("Delete successful\n"); 1834 } } 1836  $d–‘e_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 1838 cÚ¡ * fže = u£r_d©a ; 1840 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & fže ); 1841 } } 1843  $áp_rm ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1845 ià( ¬gc < 2) { 1846 `¾_´štf ("Missing file‡rgument\n"); 1850 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "D–‘e", d–‘e_£tup , 1851 d–‘e_»¶y , `g_¡rdup ( ¬gv [1]), 1852 g_ä“ è=ð FALSE ) { 1853 `¾_´štf ("Failedo Delete\n"); 1857 `¾_´štf ("Attemptingo Delete\n"); 1858 } } 1860  $£t_d–‘e_»¶y (cÚ¡ DBusE¼Ü * ”rÜ , * u£r_d©a ) 1862 ià( `dbus_”rÜ_is_£t ( ”rÜ )) 1863 `¾_´štf ("FažedØ£ˆD–‘ed: %s\n", ”rÜ -> Çme ); 1865 `¾_´štf ("Set Deleted successful\n"); 1866 } } 1868  $m­_rm ( GDBusProxy * ´oxy ,  ¬gc , * ¬gv []) 1870 GDBusProxy * msg ; 1871 dbus_boÞ_t v®ue = TRUE ; 1873 ià( ¬gc < 2) { 1874 `¾_´štf ("Missing message‡rgument\n"); 1878 msg = `fšd_mes§ge ( ¬gv [1]); 1879 ià( msg =ð NULL ) { 1880 `¾_´štf ("Invalid message‡rgument\n"); 1884 ià( `g_dbus_´oxy_£t_´Ý”ty_basic ( msg , "D–‘ed", DBUS_TYPE_BOOLEAN , 1885 & v®ue , £t_d–‘e_»¶y , 1886 NULL , NULLè=ð FALSE ) { 1887 `¾_´štf ("Failedo set Deleted\n"); 1891 `¾_´štf ("Attemptingo set Deleted\n"); 1892 } } 1894  $cmd_rm ( ¬gc , * ¬gv []) 1896 GDBusProxy * ´oxy ; 1898 ià(! `check_deçuÉ_£ssiÚ ()) 1901 ´oxy = `fšd_áp ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 1902 ià( ´oxy ) { 1903 `áp_rm ( ´oxy , ¬gc , ¬gv ); 1907 ´oxy = `fšd_m­ ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 1908 ià( ´oxy ) { 1909 `m­_rm ( ´oxy , ¬gc , ¬gv ); 1913 `¾_´štf ("Command‚ot supported\n"); 1914 } } 1916  $ü—‹_fÞd”_»¶y ( DBusMes§ge * mes§ge , * u£r_d©a ) 1918 DBusE¼Ü ”rÜ ; 1920 `dbus_”rÜ_š™ (& ”rÜ ); 1922 ià( `dbus_£t_”rÜ_äom_mes§ge (& ”rÜ , mes§ge è=ð TRUE ) { 1923 `¾_´štf ("FažedØC»©eFÞd”: %s\n", ”rÜ . Çme ); 1924 `dbus_”rÜ_ä“ (& ”rÜ ); 1928 `¾_´štf ("CreateFolder successful\n"); 1929 } } 1931  $ü—‹_fÞd”_£tup ( DBusMes§geI‹r * ™” , * u£r_d©a ) 1933 cÚ¡ * fÞd” = u£r_d©a ; 1935 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & fÞd” ); 1936 } } 1938  $cmd_mkdœ ( ¬gc , * ¬gv []) 1940 GDBusProxy * ´oxy ; 1942 ià(! `check_deçuÉ_£ssiÚ ()) 1945 ià( ¬gc < 2) { 1946 `¾_´štf ("Missing folder‡rgument\n"); 1950 ´oxy = `fšd_áp ( `g_dbus_´oxy_g‘_·th ( deçuÉ_£ssiÚ )); 1951 ià( ´oxy =ð NULL ) { 1952 `¾_´štf ("Command‚ot supported\n"); 1956 ià( `g_dbus_´oxy_m‘hod_ÿÎ ( ´oxy , "C»©eFÞd”", ü—‹_fÞd”_£tup , 1957 ü—‹_fÞd”_»¶y , `g_¡rdup ( ¬gv [1]), 1958 g_ä“ è=ð FALSE ) { 1959 `¾_´štf ("Failedo CreateFolder\n"); 1963 `¾_´štf ("Attemptingo CreateFolder\n"); 1964 } } 1967 cÚ¡ * mcmd ; 1968 cÚ¡ * m¬g ; 1969 (* mfunc è( m¬gc , * m¬gv []); 1970 cÚ¡ * mdesc ; 1971 } gcmd_bË [] = { 1972 { "cÚÃù", " [uuid]", cmd_cÚÃù , "Connect session" }, 1973 { "discÚÃù", "[£ssiÚ]", cmd_discÚÃù , "Disconnect session" }, 1974 { "li¡", NULL , cmd_li¡ , "List‡vailable sessions" }, 1975 { "show", "[£ssiÚ]", cmd_show , "Session information" }, 1976 { "£Ëù", "<£ssiÚ>", cmd_£Ëù , "Select default session" }, 1977 { "šfo", "", cmd_šfo , "Object information" }, 1978 { "ÿnûl", "<Œªsãr>", cmd_ÿnûl , "Cancelransfer" }, 1979 { "su¥’d", "<Œªsãr>", cmd_su¥’d , "Suspendransfer" }, 1980 { "»sume", "<Œªsãr>", cmd_»sume , "Resumeransfer" }, 1981 { "£nd", "", cmd_£nd , "Send file" }, 1982 { "cd", "<·th>", cmd_cd , "Change current folder" }, 1983 { "ls", "<ÝtiÚs>", cmd_ls , "List current folder" }, 1984 { "ý", " ", cmd_ý , 1986 { "mv", " ", cmd_mv , 1988 { "rm", "", cmd_rm , "Delete file" }, 1989 { "mkdœ", "", cmd_mkdœ , "Create folder" }, 1990 { "qu™", NULL , cmd_qu™ , "Quit…rogram" }, 1991 { "ex™", NULL , cmd_qu™ }, 1996 * $cmd_g’”©Ü (cÚ¡ * ‹xt ,  ¡©e ) 1998  šdex , Ën ; 1999 cÚ¡ * cmd ; 2001 ià(! ¡©e ) { 2002 šdex = 0; 2003 Ën = `¡¾’ ( ‹xt ); 2006 ( cmd = cmd_bË [ šdex ].cmd)) { 2007 šdex ++; 2009 ià(! `¡ºcmp ( cmd , ‹xt , Ën )) 2010  `¡rdup ( cmd ); 2013  NULL ; 2014 } } 2016 ** $cmd_com¶‘iÚ (cÚ¡ * ‹xt ,  ¡¬t ,  ’d ) 2018 ** m©ches = NULL ; 2020 ià( ¡¬t == 0) { 2021 ¾_com¶‘iÚ_di¥Ïy_m©ches_hook = NULL ; 2022 m©ches = `¾_com¶‘iÚ_m©ches ( ‹xt , cmd_g’”©Ü ); 2025 ià(! m©ches ) 2026 ¾_©‹m±ed_com¶‘iÚ_ov” = 1; 2028  m©ches ; 2029 } } 2031  $¾_hªdËr (* šput ) 2033  ¬gc ; 2034 ** ¬gv = NULL ; 2035  i ; 2037 ià(! šput ) { 2038 `¾_š£¹_‹xt ("quit"); 2039 `¾_»di¥Ïy (); 2040 `¾_ülf (); 2041 `g_maš_loÝ_qu™ ( maš_loÝ ); 2045 ià(! `¡¾’ ( šput )) 2046  dÚe ; 2048 `g_¡r¡r ( šput ); 2049 `add_hi¡Üy ( šput ); 2051 ¬gv = `g_¡r¥l™ ( šput , " ", -1); 2052 ià( ¬gv =ð NULL ) 2053  dÚe ; 2055  ¬gc = 0; ¬gv [argc];) 2056 ¬gc ++; 2058 ià( ¬gc == 0) 2059  dÚe ; 2061  i = 0; cmd_bË [i]. cmd ; i++) { 2062 ià( `¡rcmp ( ¬gv [0], cmd_bË [ i ]. cmd )) 2065 ià( cmd_bË [ i ]. func ) { 2066 cmd_bË [ i ]. `func ( ¬gc , ¬gv ); 2067  dÚe ; 2071 ià( `¡rcmp ( ¬gv [0], "help")) { 2072 `´štf ("Invalid command\n"); 2073  dÚe ; 2076 `´štf ("Available commands:\n"); 2078  i = 0; cmd_bË [i]. cmd ; i++) { 2079 ià( cmd_bË [ i ]. desc ) 2080 `´štf (" % %-* %s\n", cmd_bË [ i ]. cmd , 2081 ()(25 - `¡¾’ ( cmd_bË [ i ]. cmd )), 2082 cmd_bË [ i ]. ¬g ? : "", 2083 cmd_bË [ i ]. desc ? : ""); 2086 dÚe : 2087 `g_¡rä“v ( ¬gv ); 2088 `ä“ ( šput ); 2089 } } 2091  gboÞ—n gÝtiÚ_v”siÚ = FALSE ; 2093  GO±iÚEÁry gÝtiÚs [] = { 2094 { "v”siÚ", 'v', 0, G_OPTION_ARG_NONE , & ÝtiÚ_v”siÚ , 2096 { NULL }, 2099  gboÞ—n $sigÇl_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd™iÚ , 2100 gpoš‹r u£r_d©a ) 2102  __‹rmš©ed = 0; 2103  sigÇlfd_sigšfo si ; 2104 ssize_t »suÉ ; 2105  fd ; 2107 ià( cÚd™iÚ & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 2108 `g_maš_loÝ_qu™ ( maš_loÝ ); 2109  FALSE ; 2112 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 2114 »suÉ = `»ad ( fd , & si , (si)); 2115 ià( »suÉ !ð( si )) 2116  FALSE ; 2118  si . ssi_signo ) { 2119  SIGINT : 2120 `¾_»¶aû_lše ("", 0); 2121 `¾_ülf (); 2122 `¾_Ú_Ãw_lše (); 2123 `¾_»di¥Ïy (); 2125  SIGTERM : 2126 ià( __‹rmš©ed == 0) { 2127 `¾_»¶aû_lše ("", 0); 2128 `¾_ülf (); 2129 `g_maš_loÝ_qu™ ( maš_loÝ ); 2132 __‹rmš©ed = 1; 2136  TRUE ; 2137 } } 2139  gušt $£tup_sigÇlfd () 2141 GIOChªÃl * chªÃl ; 2142 gušt sourû ; 2143 sig£t_t mask ; 2144  fd ; 2146 `sigem±y£t (& mask ); 2147 `sigadd£t (& mask , SIGINT ); 2148 `sigadd£t (& mask , SIGTERM ); 2150 ià( `sig´ocmask ( SIG_BLOCK , & mask , NULL ) < 0) { 2151 `³¼Ü ("Failedo set signal mask"); 2155 fd = `sigÇlfd (-1, & mask , 0); 2156 ià( fd < 0) { 2157 `³¼Ü ("Failedo create signal descriptor"); 2161 chªÃl = `g_io_chªÃl_unix_Ãw ( fd ); 2163 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 2164 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 2165 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 2167 sourû = `g_io_add_w©ch ( chªÃl , 2168 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 2169 sigÇl_hªdËr , NULL ); 2171 `g_io_chªÃl_uÄef ( chªÃl ); 2173  sourû ; 2174 } } 2176  gboÞ—n $šput_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd™iÚ , 2177 gpoš‹r u£r_d©a ) 2179 ià( cÚd™iÚ & ( G_IO_HUP | G_IO_ERR | G_IO_NVAL )) { 2180 `g_maš_loÝ_qu™ ( maš_loÝ ); 2181  FALSE ; 2184 `¾_ÿÎback_»ad_ch¬ (); 2185  TRUE ; 2186 } } 2188  gušt $£tup_¡ªd¬d_šput () 2190 GIOChªÃl * chªÃl ; 2191 gušt sourû ; 2193 chªÃl = `g_io_chªÃl_unix_Ãw ( `fž’o ( ¡dš )); 2195 sourû = `g_io_add_w©ch ( chªÃl , 2196 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 2197 šput_hªdËr , NULL ); 2199 `g_io_chªÃl_uÄef ( chªÃl ); 2201  sourû ; 2202 } } 2204  $þ›Á_added ( GDBusProxy * ´oxy ) 2206 ià( þ›Á =ð NULL ) 2207 þ›Á = ´oxy ; 2209 `´št_´oxy ( ´oxy , "Cl›Á", COLORED_NEW ); 2210 } } 2212  $£ssiÚ_added ( GDBusProxy * ´oxy ) 2214 £ssiÚs = `g_¦i¡_­³nd (£ssiÚs, ´oxy ); 2216 ià( deçuÉ_£ssiÚ =ð NULL ) 2217 `£t_deçuÉ_£ssiÚ ( ´oxy ); 2219 `´št_´oxy ( ´oxy , "SessiÚ", COLORED_NEW ); 2220 } } 2222  $´št_Œªsã¼ed ( Œªsãr_d©a * d©a , cÚ¡ * ¡r , 2223 DBusMes§geI‹r * ™” ) 2225 dbus_ušt64_t v®u64 ; 2226 ušt64_t ¥“d ; 2227  £cÚds , mšu‹s ; 2229 `dbus_mes§ge_™”_g‘_basic ( ™” , & v®u64 ); 2230 ¥“d = v®u64 - d©a -> Œªsã¼ed ; 2231 d©a -> Œªsã¼ed = v®u64 ; 2233 ià( d©a -> size == 0) { 2234 `¾_´štf ("%sT¿nsã¼ed: %" PRIu64 " (@%" PRIu64 "KB/s)\n", 2235 ¡r , v®u64 , ¥“d / 1000); 2239 £cÚds = ( d©a -> size - d©a-> Œªsã¼ed è/ ¥“d ; 2240 mšu‹s = £cÚds / 60; 2241 £cÚds %= 60; 2242 `¾_´štf ("%sT¿nsã¼ed: %" PRIu64 " (@%" PRIu64 "KB/s %02u:%02u)\n", 2243 ¡r , v®u64 , ¥“d / 1000, mšu‹s , £cÚds ); 2244 } } 2246  $Œªsãr_´Ý”ty_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 2247 DBusMes§geI‹r * ™” , * u£r_d©a ) 2249  Œªsãr_d©a * d©a = u£r_d©a ; 2250 * ¡r ; 2252 ¡r = `´oxy_desütiÚ ( ´oxy , "T¿nsãr", COLORED_CHG ); 2254 ià( `¡rcmp ( Çme , "Transferred") == 0) { 2255 `´št_Œªsã¼ed ( d©a , ¡r , ™” ); 2256  dÚe ; 2259 ià( `¡rcmp ( Çme , "Size") == 0) 2260 `dbus_mes§ge_™”_g‘_basic ( ™” , & d©a -> size ); 2262 `´št_™” ( ¡r , Çme , ™” ); 2264 dÚe : 2265 `g_ä“ ( ¡r ); 2266 } } 2268  $Œªsãr_de¡roy ( GDBusProxy * ´oxy , * u£r_d©a ) 2270  Œªsãr_d©a * d©a = u£r_d©a ; 2272 `g_ä“ ( d©a ); 2273 } } 2275  $Œªsãr_added ( GDBusProxy * ´oxy ) 2277  Œªsãr_d©a * d©a ; 2278 DBusMes§geI‹r ™” ; 2280 Œªsãrs = `g_¦i¡_­³nd Ñ¿nsãrs, ´oxy ); 2282 `´št_´oxy ( ´oxy , "T¿nsãr", COLORED_NEW ); 2284 d©a = `g_Ãw0 ( Œªsãr_d©a , 1); 2286 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "T¿nsã»d", & ™” )) 2287 `dbus_mes§ge_™”_g‘_basic (& ™” , & d©a -> Œªsã¼ed ); 2289 ià( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Size", & ™” )) 2290 `dbus_mes§ge_™”_g‘_basic (& ™” , & d©a -> size ); 2292 `g_dbus_´oxy_£t_´Ý”ty_w©ch ( ´oxy , Œªsãr_´Ý”ty_chªged , d©a ); 2293 `g_dbus_´oxy_£t_»moved_w©ch ( ´oxy , Œªsãr_de¡roy , d©a ); 2294 } } 2296  $Ýp_added ( GDBusProxy * ´oxy ) 2298 Ýps = `g_¦i¡_­³nd (Ýps, ´oxy ); 2300 `´št_´oxy ( ´oxy , "ObjeùPush", COLORED_NEW ); 2301 } } 2303  $áp_added ( GDBusProxy * ´oxy ) 2305 áps = `g_¦i¡_­³nd (áps, ´oxy ); 2307 `´št_´oxy ( ´oxy , "FžeT¿nsãr", COLORED_NEW ); 2308 } } 2310  $pb­_added ( GDBusProxy * ´oxy ) 2312 pb­s = `g_¦i¡_­³nd Õb­s, ´oxy ); 2314 `´št_´oxy ( ´oxy , "PhÚebookAcûss", COLORED_NEW ); 2315 } } 2317  $m­_added ( GDBusProxy * ´oxy ) 2319 m­s = `g_¦i¡_­³nd (m­s, ´oxy ); 2321 `´št_´oxy ( ´oxy , "Mes§geAcûss", COLORED_NEW ); 2322 } } 2324  $msg_added ( GDBusProxy * ´oxy ) 2326 msgs = `g_¦i¡_­³nd (msgs, ´oxy ); 2328 `´št_´oxy ( ´oxy , "Mes§ge", COLORED_NEW ); 2329 } } 2331  $´oxy_added ( GDBusProxy * ´oxy , * u£r_d©a ) 2333 cÚ¡ * š‹rçû ; 2335 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 2337 ià(! `¡rcmp ( š‹rçû , OBEX_CLIENT_INTERFACE )) 2338 `þ›Á_added ( ´oxy ); 2339 ià(! `¡rcmp ( š‹rçû , OBEX_SESSION_INTERFACE )) 2340 `£ssiÚ_added ( ´oxy ); 2341 ià(! `¡rcmp ( š‹rçû , OBEX_TRANSFER_INTERFACE )) 2342 `Œªsãr_added ( ´oxy ); 2343 ià(! `¡rcmp ( š‹rçû , OBEX_OPP_INTERFACE )) 2344 `Ýp_added ( ´oxy ); 2345 ià(! `¡rcmp ( š‹rçû , OBEX_FTP_INTERFACE )) 2346 `áp_added ( ´oxy ); 2347 ià(! `¡rcmp ( š‹rçû , OBEX_PBAP_INTERFACE )) 2348 `pb­_added ( ´oxy ); 2349 ià(! `¡rcmp ( š‹rçû , OBEX_MAP_INTERFACE )) 2350 `m­_added ( ´oxy ); 2351 ià(! `¡rcmp ( š‹rçû , OBEX_MSG_INTERFACE )) 2352 `msg_added ( ´oxy ); 2353 } } 2355  $þ›Á_»moved ( GDBusProxy * ´oxy ) 2357 `´št_´oxy ( ´oxy , "Cl›Á", COLORED_DEL ); 2359 ià( þ›Á =ð ´oxy ) 2360 þ›Á = NULL ; 2361 } } 2363  $£ssiÚ_»moved ( GDBusProxy * ´oxy ) 2365 `´št_´oxy ( ´oxy , "SessiÚ", COLORED_DEL ); 2367 ià( deçuÉ_£ssiÚ =ð ´oxy ) 2368 `£t_deçuÉ_£ssiÚ ( NULL ); 2370 £ssiÚs = `g_¦i¡_»move (£ssiÚs, ´oxy ); 2371 } } 2373  $Œªsãr_»moved ( GDBusProxy * ´oxy ) 2375 `´št_´oxy ( ´oxy , "T¿nsãr", COLORED_DEL ); 2377 Œªsãrs = `g_¦i¡_»move Ñ¿nsãrs, ´oxy ); 2378 } } 2380  $Ýp_»moved ( GDBusProxy * ´oxy ) 2382 `´št_´oxy ( ´oxy , "ObjeùPush", COLORED_DEL ); 2384 Ýps = `g_¦i¡_»move (Ýps, ´oxy ); 2385 } } 2387  $áp_»moved ( GDBusProxy * ´oxy ) 2389 `´št_´oxy ( ´oxy , "FžeT¿nsãr", COLORED_DEL ); 2391 áps = `g_¦i¡_»move (áps, ´oxy ); 2392 } } 2394  $pb­_»moved ( GDBusProxy * ´oxy ) 2396 `´št_´oxy ( ´oxy , "PhÚebookAcûss", COLORED_DEL ); 2398 pb­s = `g_¦i¡_»move Õb­s, ´oxy ); 2399 } } 2401  $m­_»moved ( GDBusProxy * ´oxy ) 2403 `´št_´oxy ( ´oxy , "Mes§geAcûss", COLORED_DEL ); 2405 m­s = `g_¦i¡_»move (m­s, ´oxy ); 2406 } } 2408  $msg_»moved ( GDBusProxy * ´oxy ) 2410 `´št_´oxy ( ´oxy , "Mes§ge", COLORED_DEL ); 2412 msgs = `g_¦i¡_»move (msgs, ´oxy ); 2413 } } 2415  $´oxy_»moved ( GDBusProxy * ´oxy , * u£r_d©a ) 2417 cÚ¡ * š‹rçû ; 2419 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 2421 ià(! `¡rcmp ( š‹rçû , OBEX_CLIENT_INTERFACE )) 2422 `þ›Á_»moved ( ´oxy ); 2423 ià(! `¡rcmp ( š‹rçû , OBEX_SESSION_INTERFACE )) 2424 `£ssiÚ_»moved ( ´oxy ); 2425 ià(! `¡rcmp ( š‹rçû , OBEX_TRANSFER_INTERFACE )) 2426 `Œªsãr_»moved ( ´oxy ); 2427 ià(! `¡rcmp ( š‹rçû , OBEX_OPP_INTERFACE )) 2428 `Ýp_»moved ( ´oxy ); 2429 ià(! `¡rcmp ( š‹rçû , OBEX_FTP_INTERFACE )) 2430 `áp_»moved ( ´oxy ); 2431 ià(! `¡rcmp ( š‹rçû , OBEX_PBAP_INTERFACE )) 2432 `pb­_»moved ( ´oxy ); 2433 ià(! `¡rcmp ( š‹rçû , OBEX_MAP_INTERFACE )) 2434 `m­_»moved ( ´oxy ); 2435 ià(! `¡rcmp ( š‹rçû , OBEX_MSG_INTERFACE )) 2436 `msg_»moved ( ´oxy ); 2437 } } 2439  $£ssiÚ_´Ý”ty_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 2440 DBusMes§geI‹r * ™” ) 2442 * ¡r ; 2444 ¡r = `´oxy_desütiÚ ( ´oxy , "SessiÚ", COLORED_CHG ); 2445 `´št_™” ( ¡r , Çme , ™” ); 2446 `g_ä“ ( ¡r ); 2447 } } 2449  $´Ý”ty_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 2450 DBusMes§geI‹r * ™” , * u£r_d©a ) 2452 cÚ¡ * š‹rçû ; 2454 š‹rçû = `g_dbus_´oxy_g‘_š‹rçû ( ´oxy ); 2456 ià(! `¡rcmp ( š‹rçû , OBEX_SESSION_INTERFACE )) 2457 `£ssiÚ_´Ý”ty_chªged ( ´oxy , Çme , ™” ); 2458 } } 2460  $maš ( ¬gc , * ¬gv []) 2462 GO±iÚCÚ‹xt * cÚ‹xt ; 2463 GE¼Ü * ”rÜ = NULL ; 2464 GDBusCl›Á * þ›Á ; 2465 gušt sigÇl , šput ; 2467 cÚ‹xt = `g_ÝtiÚ_cÚ‹xt_Ãw ( NULL ); 2468 `g_ÝtiÚ_cÚ‹xt_add_maš_’Œ›s ( cÚ‹xt , ÝtiÚs , NULL ); 2470 ià( `g_ÝtiÚ_cÚ‹xt_·r£ ( cÚ‹xt , & ¬gc , & ¬gv , & ”rÜ è=ð FALSE ) { 2471 ià( ”rÜ !ð NULL ) { 2472 `g_´š‹¼ ("%s\n", ”rÜ -> mes§ge ); 2473 `g_”rÜ_ä“ ( ”rÜ ); 2475 `g_´š‹¼ ("An unknownƒrror occurred\n"); 2476 `ex™ (1); 2479 `g_ÝtiÚ_cÚ‹xt_ä“ ( cÚ‹xt ); 2481 ià( ÝtiÚ_v”siÚ =ð TRUE ) { 2482 `´štf ("%s\n", VERSION ); 2483 `ex™ (0); 2486 maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 2487 dbus_cÚn = `g_dbus_£tup_bus ( DBUS_BUS_SESSION , NULL , NULL); 2489 ¾_©‹m±ed_com¶‘iÚ_funùiÚ = cmd_com¶‘iÚ ; 2491 ¾_”a£_em±y_lše = 1; 2492 `¾_ÿÎback_hªdËr_š¡®l ( NULL , ¾_hªdËr ); 2494 `¾_£t_´om± ( PROMPT_OFF ); 2495 `¾_»di¥Ïy (); 2497 šput = `£tup_¡ªd¬d_šput (); 2498 sigÇl = `£tup_sigÇlfd (); 2499 þ›Á = `g_dbus_þ›Á_Ãw ( dbus_cÚn , "org.bluez.obex", 2502 `g_dbus_þ›Á_£t_cÚÃù_w©ch ( þ›Á , cÚÃù_hªdËr , NULL ); 2503 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( þ›Á , discÚÃù_hªdËr , NULL ); 2505 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( þ›Á , ´oxy_added , ´oxy_»moved , 2506 ´Ý”ty_chªged , NULL ); 2508 `g_maš_loÝ_run ( maš_loÝ ); 2510 `g_dbus_þ›Á_uÄef ( þ›Á ); 2511 `g_sourû_»move ( sigÇl ); 2512 `g_sourû_»move ( šput ); 2514 `¾_mes§ge (""); 2515 `¾_ÿÎback_hªdËr_»move (); 2517 `dbus_cÚÃùiÚ_uÄef ( dbus_cÚn ); 2518 `g_maš_loÝ_uÄef ( maš_loÝ ); 2521 } } @tools/parser/amp.c 23 #ifdeà HAVE_CONFIG_H 24  ~ 27  ~"·r£r.h " 28  ~"lib/amp.h " 30  $amp_dump_chªli¡ ( Ëv– ,  amp_Žv * Žv , * ´efix ) 32  amp_chª_li¡ * chª_li¡ = (*è Žv -> v® ; 33  amp_couÁry_ŒËt * ŒËt ; 34  i , num ; 36 num = ( Žv -> Ën - (* chª_li¡ )è/ (* ŒËt ); 38 `´štf ("% Òumb” oàŒËt %d)\n", ´efix , num ); 40 `p_šd’t ( Ëv– +2, 0); 42 `´štf ("CouÁry code: %c%c%c\n", chª_li¡ -> couÁry_code [0], 43 chª_li¡ -> couÁry_code [1], chan_list->country_code[2]); 45  i = 0; i < num ; i++) { 46 ŒËt = & chª_li¡ -> ŒËts [ i ]; 48 `p_šd’t ( Ëv– +2, 0); 50 ià( ŒËt -> chªs . fœ¡_chªÃl >= 201) { 51 `´štf ("Regƒxt id %d„eg class %d coverage class %d\n", 52 ŒËt -> ext . »g_ex‹nsiÚ_id , 53 ŒËt -> ext . »g_þass , 54 ŒËt -> ext . cov”age_þass ); 56 ià( ŒËt -> chªs . num_chªÃls == 1) 57 `´štf ("Channel %d max…ower %d\n", 58 ŒËt -> chªs . fœ¡_chªÃl , 59 ŒËt -> chªs . max_pow” ); 61 `´štf ("Channels %d - %d max…ower %d\n", 62 ŒËt -> chªs . fœ¡_chªÃl , 63 ŒËt -> chªs . fœ¡_chªÃl + 64 ŒËt -> chªs . num_chªÃls , 65 ŒËt -> chªs . max_pow” ); 68 } } 70  $amp_assoc_dump ( Ëv– , ušt8_t * assoc , ušt16_t Ën ) 72  amp_Žv * Žv = (*è assoc ; 74 `p_šd’t ( Ëv– , 0); 75 `´štf ("Assoød©¨[ËÀ%d]:\n", Ën ); 77  Ën > (* Žv )) { 78 ušt16_t ŽvËn = `btohs ( Žv -> Ën ); 79  amp_·l_v” * v” ; 81 `p_šd’t ( Ëv– +1, 0); 83  Žv -> ty³ ) { 84  A2MP_MAC_ADDR_TYPE : 85 ià( ŽvËn != 6) 87 `´štf ("MAC: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n", 88 Žv -> v® [0],lv->val[1],lv->val[2], 89 Žv -> v® [3],lv->val[4],lv->val[5]); 92  A2MP_PREF_CHANLIST_TYPE : 93 `amp_dump_chªli¡ ( Ëv– , Žv , "Preferred Chan List"); 96  A2MP_CONNECTED_CHAN : 97 `amp_dump_chªli¡ ( Ëv– , Žv , "Connected Chan List"); 100  A2MP_PAL_CAP_TYPE : 101 ià( ŽvËn != 4) 103 `´štf ("PAL CAP: %2.2x %2.2x %2.2x %2.2x\n", 104 Žv -> v® [0],lv->val[1],lv->val[2], 105 Žv -> v® [3]); 108  A2MP_PAL_VER_INFO : 109 ià( ŽvËn != 5) 111 v” = ( amp_·l_v” *è Žv -> v® ; 112 `´štf ("PAL VER: %2.2x Comp ID: %4.4x SubVer: %4.4x\n", 113 v” ->v”, `btohs (v”-> com·ny_id ), 114 `btohs ( v” -> sub_v” )); 118 `´štf ("UÄecognizedy³ %d\n", Žv -> ty³ ); 122 Ën -ð ŽvËn + (* Žv ); 123 assoc +ð ŽvËn + (* Žv ); 124 Žv = ( amp_Žv *è assoc ; 126 } } @tools/parser/att.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~"·r£r.h " 36  #GATT_PRIM_SVC_UUID 0x2800 ) 37  #GATT_SND_SVC_UUID 0x2801 ) 38  #GATT_INCLUDE_UUID 0x2802 ) 39  #GATT_CHARAC_UUID 0x2803 ) 41  #GATT_CHARAC_DEVICE_NAME 0x2A00 ) 42  #GATT_CHARAC_APPEARANCE 0x2A01 ) 43  #GATT_CHARAC_PERIPHERAL_PRIV_FLAG 0x2A02 ) 44  #GATT_CHARAC_RECONNECTION_ADDRESS 0x2A03 ) 45  #GATT_CHARAC_PERIPHERAL_PREF_CONN 0x2A04 ) 46  #GATT_CHARAC_SERVICE_CHANGED 0x2A05 ) 48  #GATT_CHARAC_EXT_PROPER_UUID 0x2900 ) 49  #GATT_CHARAC_USER_DESC_UUID 0x2901 ) 50  #GATT_CLIENT_CHARAC_CFG_UUID 0x2902 ) 51  #GATT_SERVER_CHARAC_CFG_UUID 0x2903 ) 52  #GATT_CHARAC_FMT_UUID 0x2904 ) 53  #GATT_CHARAC_AGREG_FMT_UUID 0x2905 ) 58  #ATT_OP_ERROR 0x01 ) 59  #ATT_OP_MTU_REQ 0x02 ) 60  #ATT_OP_MTU_RESP 0x03 ) 61  #ATT_OP_FIND_INFO_REQ 0x04 ) 62  #ATT_OP_FIND_INFO_RESP 0x05 ) 63  #ATT_OP_FIND_BY_TYPE_REQ 0x06 ) 64  #ATT_OP_FIND_BY_TYPE_RESP 0x07 ) 65  #ATT_OP_READ_BY_TYPE_REQ 0x08 ) 66  #ATT_OP_READ_BY_TYPE_RESP 0x09 ) 67  #ATT_OP_READ_REQ 0x0A ) 68  #ATT_OP_READ_RESP 0x0B ) 69  #ATT_OP_READ_BLOB_REQ 0x0C ) 70  #ATT_OP_READ_BLOB_RESP 0x0D ) 71  #ATT_OP_READ_MULTI_REQ 0x0E ) 72  #ATT_OP_READ_MULTI_RESP 0x0F ) 73  #ATT_OP_READ_BY_GROUP_REQ 0x10 ) 74  #ATT_OP_READ_BY_GROUP_RESP 0x11 ) 75  #ATT_OP_WRITE_REQ 0x12 ) 76  #ATT_OP_WRITE_RESP 0x13 ) 77  #ATT_OP_WRITE_CMD 0x52 ) 78  #ATT_OP_PREP_WRITE_REQ 0x16 ) 79  #ATT_OP_PREP_WRITE_RESP 0x17 ) 80  #ATT_OP_EXEC_WRITE_REQ 0x18 ) 81  #ATT_OP_EXEC_WRITE_RESP 0x19 ) 82  #ATT_OP_HANDLE_NOTIFY 0x1B ) 83  #ATT_OP_HANDLE_IND 0x1D ) 84  #ATT_OP_HANDLE_CNF 0x1E ) 85  #ATT_OP_SIGNED_WRITE_CMD 0xD2 ) 88  #ATT_ECODE_INVALID_HANDLE 0x01 ) 89  #ATT_ECODE_READ_NOT_PERM 0x02 ) 90  #ATT_ECODE_WRITE_NOT_PERM 0x03 ) 91  #ATT_ECODE_INVALID_PDU 0x04 ) 92  #ATT_ECODE_INSUFF_AUTHEN 0x05 ) 93  #ATT_ECODE_REQ_NOT_SUPP 0x06 ) 94  #ATT_ECODE_INVALID_OFFSET 0x07 ) 95  #ATT_ECODE_INSUFF_AUTHO 0x08 ) 96  #ATT_ECODE_PREP_QUEUE_FULL 0x09 ) 97  #ATT_ECODE_ATTR_NOT_FOUND 0x0A ) 98  #ATT_ECODE_ATTR_NOT_LONG 0x0B ) 99  #ATT_ECODE_INSUFF_ENCR_KEY_SIZE 0x0C ) 100  #ATT_ECODE_INVAL_ATTR_VALUE_LEN 0x0D ) 101  #ATT_ECODE_UNLIKELY 0x0E ) 102  #ATT_ECODE_INSUFF_ENC 0x0F ) 103  #ATT_ECODE_UNSUPP_GRP_TYPE 0x10 ) 104  #ATT_ECODE_INSUFF_RESOURCES 0x11 ) 105  #ATT_ECODE_IO 0xFF ) 109 cÚ¡ * $©tÝ2¡r ( ušt8_t Ý ) 111  Ý ) { 112  ATT_OP_ERROR : 114  ATT_OP_MTU_REQ : 116  ATT_OP_MTU_RESP : 118  ATT_OP_FIND_INFO_REQ : 120  ATT_OP_FIND_INFO_RESP : 122  ATT_OP_FIND_BY_TYPE_REQ : 124  ATT_OP_FIND_BY_TYPE_RESP : 126  ATT_OP_READ_BY_TYPE_REQ : 128  ATT_OP_READ_BY_TYPE_RESP : 130  ATT_OP_READ_REQ : 132  ATT_OP_READ_RESP : 134  ATT_OP_READ_BLOB_REQ : 136  ATT_OP_READ_BLOB_RESP : 138  ATT_OP_READ_MULTI_REQ : 140  ATT_OP_READ_MULTI_RESP : 142  ATT_OP_READ_BY_GROUP_REQ : 144  ATT_OP_READ_BY_GROUP_RESP : 146  ATT_OP_WRITE_REQ : 148  ATT_OP_WRITE_RESP : 150  ATT_OP_WRITE_CMD : 152  ATT_OP_PREP_WRITE_REQ : 154  ATT_OP_PREP_WRITE_RESP : 156  ATT_OP_EXEC_WRITE_REQ : 158  ATT_OP_EXEC_WRITE_RESP : 160  ATT_OP_HANDLE_NOTIFY : 162  ATT_OP_HANDLE_IND : 164  ATT_OP_HANDLE_CNF : 166  ATT_OP_SIGNED_WRITE_CMD : 171 } } 173 cÚ¡ * $©‹¼Ü2¡r ( ušt8_t ”r ) 175  ”r ) { 176  ATT_ECODE_INVALID_HANDLE : 178  ATT_ECODE_READ_NOT_PERM : 180  ATT_ECODE_WRITE_NOT_PERM : 182  ATT_ECODE_INVALID_PDU : 184  ATT_ECODE_INSUFF_AUTHEN : 186  ATT_ECODE_REQ_NOT_SUPP : 188  ATT_ECODE_INVALID_OFFSET : 190  ATT_ECODE_INSUFF_AUTHO : 192  ATT_ECODE_PREP_QUEUE_FULL : 194  ATT_ECODE_ATTR_NOT_FOUND : 196  ATT_ECODE_ATTR_NOT_LONG : 198  ATT_ECODE_INSUFF_ENCR_KEY_SIZE : 200  ATT_ECODE_INVAL_ATTR_VALUE_LEN : 202  ATT_ECODE_UNLIKELY : 204  ATT_ECODE_INSUFF_ENC : 206  ATT_ECODE_UNSUPP_GRP_TYPE : 208  ATT_ECODE_INSUFF_RESOURCES : 210  ATT_ECODE_IO : 215 } } 217 cÚ¡ * $uuid2¡r ( ušt16_t uuid ) 219  uuid ) { 220  GATT_PRIM_SVC_UUID : 222  GATT_SND_SVC_UUID : 224  GATT_INCLUDE_UUID : 226  GATT_CHARAC_UUID : 228  GATT_CHARAC_DEVICE_NAME : 230  GATT_CHARAC_APPEARANCE : 232  GATT_CHARAC_PERIPHERAL_PRIV_FLAG : 234  GATT_CHARAC_RECONNECTION_ADDRESS : 236  GATT_CHARAC_PERIPHERAL_PREF_CONN : 238  GATT_CHARAC_SERVICE_CHANGED : 240  GATT_CHARAC_EXT_PROPER_UUID : 242  GATT_CHARAC_USER_DESC_UUID : 244  GATT_CLIENT_CHARAC_CFG_UUID : 246  GATT_SERVER_CHARAC_CFG_UUID : 248  GATT_CHARAC_FMT_UUID : 250  GATT_CHARAC_AGREG_FMT_UUID : 255 } } 257  $©t_”rÜ_dump ( Ëv– ,  äame * äm ) 259 ušt8_t Ý = `g‘_u8 ( äm ); 260 ušt16_t hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 261 ušt8_t ”r = `g‘_u8 ( äm ); 263 `p_šd’t ( Ëv– , äm ); 264 `´štf ("E¼Ü: % (%d)\n", `©‹¼Ü2¡r ( ”r ),ƒrr); 266 `p_šd’t ( Ëv– , äm ); 267 `´štf ("% (0x%.2xèÚ hªdË 0x%4.4x\n", `©tÝ2¡r ( Ý ), op, hªdË ); 268 } } 270  $©t_mtu_»q_dump ( Ëv– ,  äame * äm ) 272 ušt16_t þ›Á_rx_mtu = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 274 `p_šd’t ( Ëv– , äm ); 275 `´štf ("þ›Á„x mtu %d\n", þ›Á_rx_mtu ); 276 } } 278  $©t_mtu_»¥_dump ( Ëv– ,  äame * äm ) 280 ušt16_t £rv”_rx_mtu = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 282 `p_šd’t ( Ëv– , äm ); 283 `´štf ("£rv”„x mtu %d\n", £rv”_rx_mtu ); 284 } } 286  $©t_fšd_šfo_»q_dump ( Ëv– ,  äame * äm ) 288 ušt16_t ¡¬t = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 289 ušt16_t ’d = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 291 `p_šd’t ( Ëv– , äm ); 292 `´štf ("¡¬ˆ0x%4.4x,ƒnd 0x%4.4x\n", ¡¬t , ’d ); 293 } } 295  $´št_uuid128 ( äame * äm ) 297 ušt8_t uuid [16]; 298  i ; 300  i = 0; i < 16; i++) 301 uuid [15 - i ] = `g‘_u8 ( äm ); 303  i = 0; i < 16; i++) { 304 `´štf ("%02x", uuid [ i ]); 305 ià( i == 3 || i == 5 || i == 7 || i == 9) 306 `´štf ("-"); 308 } } 310  $©t_fšd_šfo_»¥_dump ( Ëv– ,  äame * äm ) 312 ušt8_t fmt = `g‘_u8 ( äm ); 314 `p_šd’t ( Ëv– , äm ); 316 ià( fmt == 0x01) { 317 `´štf ("format: uuid-16\n"); 319  äm -> Ën > 0) { 320 ušt16_t hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 321 ušt16_t uuid = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 322 `p_šd’t ( Ëv– + 1, äm ); 323 `´štf ("hªdË 0x%4.4x, uuid 0x%4.4x (%s)\n", hªdË , uuid , 324 `uuid2¡r ( uuid )); 327 `´štf ("format: uuid-128\n"); 329  äm -> Ën > 0) { 330 ušt16_t hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 332 `p_šd’t ( Ëv– + 1, äm ); 333 `´štf ("hªdË 0x%4.4x, uuid ", hªdË ); 334 `´št_uuid128 ( äm ); 335 `´štf ("\n"); 338 } } 340  $©t_fšd_by_ty³_»q_dump ( Ëv– ,  äame * äm ) 342 ušt16_t ¡¬t = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 343 ušt16_t ’d = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 344 ušt16_t uuid = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 346 `p_šd’t ( Ëv– , äm ); 347 `´štf ("¡¬ˆ0x%4.4x,ƒnd 0x%4.4x, uuid 0x%4.4x\n", ¡¬t , ’d , uuid ); 349 `p_šd’t ( Ëv– , äm ); 350 `´štf ("value"); 351  äm -> Ën > 0) 352 `´štf (" 0x%2.2x", `g‘_u8 ( äm )); 353 `´štf ("\n"); 354 } } 356  $©t_fšd_by_ty³_»¥_dump ( Ëv– ,  äame * äm ) 358  äm -> Ën > 0) { 359 ušt16_t uuid = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 360 ušt16_t ’d = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 362 `p_šd’t ( Ëv– , äm ); 363 `´štf ("Found‡ttr 0x%4.4x, groupƒnd handle 0x%4.4x\n", 364 uuid , ’d ); 366 } } 368  $©t_»ad_by_ty³_»q_dump ( Ëv– ,  äame * äm ) 370 ušt16_t ¡¬t = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 371 ušt16_t ’d = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 373 `p_šd’t ( Ëv– , äm ); 374 `´štf ("¡¬ˆ0x%4.4x,ƒnd 0x%4.4x\n", ¡¬t , ’d ); 376 `p_šd’t ( Ëv– , äm ); 377 ià( äm -> Ën == 2) { 378 `´štf ("ty³-uuid 0x%4.4x\n", `btohs ( `htÚs ( `g‘_u16 ( äm )))); 379 } ià( äm -> Ën == 16) { 380 `´štf ("type-uuid "); 381 `´št_uuid128 ( äm ); 382 `´štf ("\n"); 384 `´štf ("malformed uuid (expected 2 or 16 octets)\n"); 385 `p_šd’t ( Ëv– , äm ); 386 `¿w_dump ( Ëv– , äm ); 388 } } 390  $©t_»ad_by_ty³_»¥_dump ( Ëv– ,  äame * äm ) 392 ušt8_t Ëngth = `g‘_u8 ( äm ); 394 `p_šd’t ( Ëv– , äm ); 395 `´štf ("Ëngth: %d\n", Ëngth ); 397  äm -> Ën > 0) { 398 ušt16_t hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 399  v®_Ën = Ëngth - 2; 400  i ; 402 `p_šd’t ( Ëv– + 1, äm ); 403 `´štf ("hªdË 0x%4.4x, v®u", hªdË ); 404  i = 0; i < v®_Ën ; i++) { 405 `´štf ("0x%.2x ", `g‘_u8 ( äm )); 407 `´štf ("\n"); 409 } } 411  $©t_»ad_»q_dump ( Ëv– ,  äame * äm ) 413 ušt16_t hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 415 `p_šd’t ( Ëv– , äm ); 416 `´štf ("hªdË 0x%4.4x\n", hªdË ); 417 } } 419  $©t_»ad_blob_»q_dump ( Ëv– ,  äame * äm ) 421 ušt16_t hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 422 ušt16_t off£t = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 424 `p_šd’t ( Ëv– , äm ); 425 `´štf ("hªdË 0x%4.4x off£ˆ0x%4.4x\n", hªdË , off£t ); 426 } } 428  $©t_»ad_blob_»¥_dump ( Ëv– ,  äame * äm ) 430 `p_šd’t ( Ëv– , äm ); 431 `´štf ("value"); 433  äm -> Ën > 0) 434 `´štf (" 0x%2.2x", `g‘_u8 ( äm )); 435 `´štf ("\n"); 436 } } 438  $©t_»ad_muÉi_»q_dump ( Ëv– ,  äame * äm ) 440 `p_šd’t ( Ëv– , äm ); 441 `´štf ("Handles\n"); 443  äm -> Ën > 0) { 444 `p_šd’t ( Ëv– , äm ); 445 `´štf ("hªdË 0x%4.4x\n", `btohs ( `htÚs ( `g‘_u16 ( äm )))); 447 } } 449  $©t_»ad_muÉi_»¥_dump ( Ëv– ,  äame * äm ) 451 `p_šd’t ( Ëv– , äm ); 452 `´štf ("values"); 454  äm -> Ën > 0) 455 `´štf (" 0x%2.2x", `g‘_u8 ( äm )); 456 `´štf ("\n"); 457 } } 459  $©t_»ad_by_group_»¥_dump ( Ëv– ,  äame * äm ) 461 ušt8_t Ëngth = `g‘_u8 ( äm ); 463  äm -> Ën > 0) { 464 ušt16_t ©Œ_hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 465 ušt16_t ’d_g½_hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 466 ušt8_t »maššg = Ëngth - 4; 468 `p_šd’t ( Ëv– , äm ); 469 `´štf ("attr handle 0x%4.4x,ƒnd group handle 0x%4.4x\n", 470 ©Œ_hªdË , ’d_g½_hªdË ); 472 `p_šd’t ( Ëv– , äm ); 473 `´štf ("value"); 474  »maššg > 0) { 475 `´štf (" 0x%2.2x", `g‘_u8 ( äm )); 476 »maššg --; 478 `´štf ("\n"); 480 } } 482  $©t_wr™e_»q_dump ( Ëv– ,  äame * äm ) 484 ušt16_t hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 486 `p_šd’t ( Ëv– , äm ); 487 `´štf ("hªdË 0x%4.4x v®u", hªdË ); 489  äm -> Ën > 0) 490 `´štf (" 0x%2.2x", `g‘_u8 ( äm )); 491 `´štf ("\n"); 492 } } 494  $©t_sigÃd_wr™e_dump ( Ëv– ,  äame * äm ) 496 ušt16_t hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 497  v®ue_Ën = äm -> Ën - 12; 499 `p_šd’t ( Ëv– , äm ); 500 `´štf ("hªdË 0x%4.4x v®u", hªdË ); 502  v®ue_Ën --) 503 `´štf (" 0x%2.2x", `g‘_u8 ( äm )); 504 `´štf ("\n"); 506 `p_šd’t ( Ëv– , äm ); 507 `´štf ("auth signature "); 508  äm -> Ën > 0) 509 `´štf (" 0x%2.2x", `g‘_u8 ( äm )); 510 `´štf ("\n"); 511 } } 513  $©t_´•_wr™e_dump ( Ëv– ,  äame * äm ) 515 ušt16_t hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 516 ušt16_t v®_off£t = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 518 `p_šd’t ( Ëv– , äm ); 519 `´štf ("©Œ hªdË 0x%4.4x, v®uoff£ˆ0x%4.4x\n", hªdË , 520 v®_off£t ); 522 `p_šd’t ( Ëv– , äm ); 523 `´štf ("part‡ttr value "); 524  äm -> Ën > 0) 525 `´štf (" 0x%2.2x", `g‘_u8 ( äm )); 526 `´štf ("\n"); 527 } } 529  $©t_exec_wr™e_»q_dump ( Ëv– ,  äame * äm ) 531 ušt8_t æags = `g‘_u8 ( äm ); 533 `p_šd’t ( Ëv– , äm ); 534 ià( æags == 0x00) 535 `´štf ("cancel‡ll…repared writes "); 537 `´štf ("immediatelly write‡ll…ending…repared values "); 539 `´štf ("(0x%2.2x)\n", æags ); 540 } } 542  $©t_hªdË_nÙify_dump ( Ëv– ,  äame * äm ) 544 ušt16_t hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 546 `p_šd’t ( Ëv– , äm ); 547 `´štf ("hªdË 0x%4.4x\n", hªdË ); 549 `p_šd’t ( Ëv– , äm ); 550 `´štf ("value "); 551  äm -> Ën > 0) 552 `´štf ("0x%.2x ", `g‘_u8 ( äm )); 553 `´štf ("\n"); 554 } } 556  $©t_dump ( Ëv– ,  äame * äm ) 558 ušt8_t Ý ; 560 Ý = `g‘_u8 ( äm ); 562 `p_šd’t ( Ëv– , äm ); 563 `´štf ("ATT: % (0x%.2x)\n", `©tÝ2¡r ( Ý ), op); 565  Ý ) { 566  ATT_OP_ERROR : 567 `©t_”rÜ_dump ( Ëv– + 1, äm ); 569  ATT_OP_MTU_REQ : 570 `©t_mtu_»q_dump ( Ëv– + 1, äm ); 572  ATT_OP_MTU_RESP : 573 `©t_mtu_»¥_dump ( Ëv– + 1, äm ); 575  ATT_OP_FIND_INFO_REQ : 576 `©t_fšd_šfo_»q_dump ( Ëv– + 1, äm ); 578  ATT_OP_FIND_INFO_RESP : 579 `©t_fšd_šfo_»¥_dump ( Ëv– + 1, äm ); 581  ATT_OP_FIND_BY_TYPE_REQ : 582 `©t_fšd_by_ty³_»q_dump ( Ëv– + 1, äm ); 584  ATT_OP_FIND_BY_TYPE_RESP : 585 `©t_fšd_by_ty³_»¥_dump ( Ëv– + 1, äm ); 587  ATT_OP_READ_BY_TYPE_REQ : 588  ATT_OP_READ_BY_GROUP_REQ : 589 `©t_»ad_by_ty³_»q_dump ( Ëv– + 1, äm ); 591  ATT_OP_READ_BY_TYPE_RESP : 592 `©t_»ad_by_ty³_»¥_dump ( Ëv– + 1, äm ); 594  ATT_OP_READ_REQ : 595 `©t_»ad_»q_dump ( Ëv– + 1, äm ); 597  ATT_OP_READ_RESP : 598 `¿w_dump ( Ëv– + 1, äm ); 600  ATT_OP_READ_BLOB_REQ : 601 `©t_»ad_blob_»q_dump ( Ëv– + 1, äm ); 603  ATT_OP_READ_BLOB_RESP : 604 `©t_»ad_blob_»¥_dump ( Ëv– + 1, äm ); 606  ATT_OP_READ_MULTI_REQ : 607 `©t_»ad_muÉi_»q_dump ( Ëv– + 1, äm ); 609  ATT_OP_READ_MULTI_RESP : 610 `©t_»ad_muÉi_»¥_dump ( Ëv– + 1, äm ); 612  ATT_OP_READ_BY_GROUP_RESP : 613 `©t_»ad_by_group_»¥_dump ( Ëv– + 1, äm ); 615  ATT_OP_WRITE_REQ : 616  ATT_OP_WRITE_CMD : 617 `©t_wr™e_»q_dump ( Ëv– + 1, äm ); 619  ATT_OP_SIGNED_WRITE_CMD : 620 `©t_sigÃd_wr™e_dump ( Ëv– + 1, äm ); 622  ATT_OP_PREP_WRITE_REQ : 623  ATT_OP_PREP_WRITE_RESP : 624 `©t_´•_wr™e_dump ( Ëv– + 1, äm ); 626  ATT_OP_EXEC_WRITE_REQ : 627 `©t_exec_wr™e_»q_dump ( Ëv– + 1, äm ); 629  ATT_OP_HANDLE_NOTIFY : 630 `©t_hªdË_nÙify_dump ( Ëv– + 1, äm ); 633 `¿w_dump ( Ëv– , äm ); 636 } } @tools/parser/avctp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~"·r£r.h " 35  ~"sdp.h " 37 * $±2¡r ( ušt8_t hdr ) 39  hdr & 0x0c) { 51 } } 53  $avùp_dump ( Ëv– ,  äame * äm , ušt16_t psm ) 55 ušt8_t hdr ; 56 ušt16_t pid ; 58 `p_šd’t ( Ëv– , äm ); 60 hdr = `g‘_u8 ( äm ); 61 pid = `g‘_u16 ( äm ); 63 `´štf ("AVCTP %s: %s %s:…t 0x%02xransaction %d…id 0x%04x\n", 64 psm == 23 ? "Control" : "Browsing", 65 hdr & 0x02 ? "Response" : "Command", 66 `±2¡r ( hdr ), hd¸& 0x0c, hd¸>> 4, pid ); 68 ià( pid =ð SDP_UUID_AV_REMOTE ||…id =ð SDP_UUID_AV_REMOTE_TARGET ) 69 `avrý_dump ( Ëv– + 1, äm , hdr , psm ); 71 `¿w_dump ( Ëv– + 1, äm ); 72 } } @tools/parser/avdtp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~"·r£r.h " 36 * $si2¡r ( ušt8_t si ) 38  si & 0x7f) { 68 } } 70 * $±2¡r ( ušt8_t hdr ) 72  hdr & 0x0c) { 84 } } 86 * $mt2¡r ( ušt8_t hdr ) 88  hdr & 0x03) { 98 } } 100 * $medŸ2¡r ( ušt8_t ty³ ) 102  ty³ ) { 112 } } 114 * $codec2¡r ( ušt8_t ty³ , ušt8_ˆ codec ) 116  ty³ ) { 118  codec ) { 134  codec ) { 151 } } 153 * $vndcodec2¡r ( ušt32_t v’dÜ , ušt16_t vndcodec ) 155 ià( v’dÜ =ð0x0000004à&& vndcodec == 0x0001) 158 } } 160 * $ÿt2¡r ( ušt8_t ÿt ) 162  ÿt ) { 182 } } 184  $”rÜcode ( Ëv– ,  äame * äm ) 186 ušt8_t code ; 188 `p_šd’t ( Ëv– , äm ); 189 code = `g‘_u8 ( äm ); 190 `´štf ("E¼Ü cod%d\n", code ); 191 } } 193  $aý_£id ( Ëv– ,  äame * äm ) 195 ušt8_t £id ; 197 `p_šd’t ( Ëv– , äm ); 198 £id = `g‘_u8 ( äm ); 199 `´štf ("ACP SEID %d\n", £id >> 2); 200 } } 202  $aý_št_£id ( Ëv– ,  äame * äm ) 204 ušt8_t aý_£id , št_£id ; 206 `p_šd’t ( Ëv– , äm ); 207 aý_£id = `g‘_u8 ( äm ); 208 št_£id = `g‘_u8 ( äm ); 209 `´štf ("ACP SEID %d - INT SEID %d\n", aý_£id >> 2, št_£id >> 2); 210 } } 212  $ÿ·bž™›s ( Ëv– ,  äame * äm ) 214 ušt8_t ÿt , Ën ; 216  äm -> Ën > 1) { 217 `p_šd’t ( Ëv– , äm ); 218 ÿt = `g‘_u8 ( äm ); 219 Ën = `g‘_u8 ( äm ); 221 ià( ÿt == 7) { 222 ušt8_t ty³ , codec ; 223 ušt16_t tmp , äeq , vndcodec = 0; 224 ušt32_t b™¿‹ , v’dÜ = 0; 225  i ; 227 ty³ = `g‘_u8 ( äm ); 228 codec = `g‘_u8 ( äm ); 230 ià( codec == 255) { 231 v’dÜ = `btohl ( `htÚl ( `g‘_u32 ( äm ))); 232 vndcodec = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 234 `´štf ("% - % (%s)\n", `ÿt2¡r ( ÿt ), 235 `codec2¡r ( ty³ , codec ), 236 `vndcodec2¡r ( v’dÜ , vndcodec )); 238 `´štf ("% - %s\n", `ÿt2¡r ( ÿt ), 239 `codec2¡r ( ty³ , codec )); 242  codec ) { 244 tmp = `g‘_u8 ( äm ); 245 `p_šd’t ( Ëv– + 1, äm ); 246 ià( tmp & 0x80) 247 `´štf ("16kHz "); 248 ià( tmp & 0x40) 249 `´štf ("32kHz "); 250 ià( tmp & 0x20) 251 `´štf ("44.1kHz "); 252 ià( tmp & 0x10) 253 `´štf ("48kHz "); 254 `´štf ("\n"); 255 `p_šd’t ( Ëv– + 1, äm ); 256 ià( tmp & 0x08) 257 `´štf ("Mono "); 258 ià( tmp & 0x04) 259 `´štf ("DualChannel "); 260 ià( tmp & 0x02) 261 `´štf ("Stereo "); 262 ià( tmp & 0x01) 263 `´štf ("JointStereo "); 264 `´štf ("\n"); 265 tmp = `g‘_u8 ( äm ); 266 `p_šd’t ( Ëv– + 1, äm ); 267 ià( tmp & 0x80) 268 `´štf ("4 "); 269 ià( tmp & 0x40) 270 `´štf ("8 "); 271 ià( tmp & 0x20) 272 `´štf ("12 "); 273 ià( tmp & 0x10) 274 `´štf ("16 "); 275 `´štf ("Blocks\n"); 276 `p_šd’t ( Ëv– + 1, äm ); 277 ià( tmp & 0x08) 278 `´štf ("4 "); 279 ià( tmp & 0x04) 280 `´štf ("8 "); 281 `´štf ("Subbands\n"); 282 `p_šd’t ( Ëv– + 1, äm ); 283 ià( tmp & 0x02) 284 `´štf ("SNR "); 285 ià( tmp & 0x01) 286 `´štf ("Loudness "); 287 `´štf ("\n"); 288 tmp = `g‘_u8 ( äm ); 289 `p_šd’t ( Ëv– + 1, äm ); 290 `´štf ("B™poÞ Rªg%d-%d\n", tmp , `g‘_u8 ( äm )); 293 tmp = `g‘_u8 ( äm ); 294 `p_šd’t ( Ëv– + 1, äm ); 295 `´štf ("Layers: "); 296 ià( tmp & 0x80) 297 `´štf ("1 "); 298 ià( tmp & 0x40) 299 `´štf ("2 "); 300 ià( tmp & 0x20) 301 `´štf ("3 "); 302 `´štf ("\n"); 303 `p_šd’t ( Ëv– + 1, äm ); 304 `´štf ("CRC Protection: %s\n", 305 tmp & 0x10 ? "Yes" : "No"); 306 `p_šd’t ( Ëv– + 1, äm ); 307 ià( tmp & 0x08) 308 `´štf ("Mono "); 309 ià( tmp & 0x04) 310 `´štf ("DualChannel "); 311 ià( tmp & 0x02) 312 `´štf ("Stereo "); 313 ià( tmp & 0x01) 314 `´štf ("JointStereo "); 315 `´štf ("\n"); 316 tmp = `g‘_u8 ( äm ); 317 `p_šd’t ( Ëv– + 1, äm ); 318 `´štf ("Media Payload Format: RFC-2250 %s\n", 319 tmp & 0x40 ? "RFC-3119" : ""); 320 `p_šd’t ( Ëv– + 1, äm ); 321 ià( tmp & 0x20) 322 `´štf ("16kHz "); 323 ià( tmp & 0x10) 324 `´štf ("22.05kHz "); 325 ià( tmp & 0x08) 326 `´štf ("24kHz "); 327 ià( tmp & 0x04) 328 `´štf ("32kHz "); 329 ià( tmp & 0x02) 330 `´štf ("44.1kHz "); 331 ià( tmp & 0x01) 332 `´štf ("48kHz "); 333 `´štf ("\n"); 334 tmp = `g‘_u16 ( äm ); 335 `p_šd’t ( Ëv– + 1, äm ); 336 `´štf ("VBR: %s\n", 337 tmp & 0x8000 ? "Yes" : "No"); 338 `p_šd’t ( Ëv– + 1, äm ); 339 `´štf ("Bit Rate Indexes: "); 340 ià( tmp & 0x8000) { 341 `´štf ("n/a"); 343  i = 0; i < 15; i++, tmp >>= 1) 344 ià( tmp & 0x0001) 345 `´štf ("%d ", i ); 347 `´štf ("\n"); 350 tmp = `g‘_u8 ( äm ); 351 `p_šd’t ( Ëv– + 1, äm ); 352 ià( tmp & 0x80) 353 `´štf ("MPEG-2 AAC LC "); 354 ià( tmp & 0x40) 355 `´štf ("MPEG-4 AAC LC "); 356 ià( tmp & 0x20) 357 `´štf ("MPEG-4 AAC LTP "); 358 ià( tmp & 0x10) 359 `´štf ("MPEG-4 AAC scalable "); 360 `´štf ("\n"); 361 tmp = `g‘_u16 ( äm ); 362 äeq = tmp >> 4; 363 `p_šd’t ( Ëv– + 1, äm ); 364 ià( äeq & 0x0800) 365 `´štf ("8kHz "); 366 ià( äeq & 0x0400) 367 `´štf ("11.025kHz "); 368 ià( äeq & 0x0200) 369 `´štf ("12kHz "); 370 ià( äeq & 0x0100) 371 `´štf ("16kHz "); 372 ià( äeq & 0x0080) 373 `´štf ("22.05kHz "); 374 ià( äeq & 0x0040) 375 `´štf ("24kHz "); 376 ià( äeq & 0x0020) 377 `´štf ("32kHz "); 378 ià( äeq & 0x0010) 379 `´štf ("44.1kHz "); 380 ià( äeq & 0x0008) 381 `´štf ("48kHz "); 382 ià( äeq & 0x0004) 383 `´štf ("64kHz "); 384 ià( äeq & 0x0002) 385 `´štf ("88.2kHz "); 386 ià( äeq & 0x0001) 387 `´štf ("96kHz "); 388 `´štf ("\n"); 389 tmp >>= 2; 390 `p_šd’t ( Ëv– + 1, äm ); 391 ià( tmp & 0x02) 392 `´štf ("1 "); 393 ià( tmp & 0x01) 394 `´štf ("2 "); 395 `´štf ("Channels\n"); 396 tmp = `g‘_u8 ( äm ); 397 b™¿‹ = (( tmp & 0x7fè<< 16è| `g‘_u16 ( äm ); 398 `p_šd’t ( Ëv– + 1, äm ); 399 `´štf ("%ubp ", b™¿‹ ); 400 `´štf ("%s\n", tmp & 0x80 ? "VBR" : ""); 403 ià( v’dÜ == 0x0000004f && 404 vndcodec == 0x0001) { 405 tmp = `g‘_u8 ( äm ); 406 `p_šd’t ( Ëv– + 1, äm ); 407 ià( tmp & 0x80) 408 `´štf ("16kHz "); 409 ià( tmp & 0x40) 410 `´štf ("32kHz "); 411 ià( tmp & 0x20) 412 `´štf ("44.1kHz "); 413 ià( tmp & 0x10) 414 `´štf ("48kHz "); 415 `´štf ("\n"); 416 `p_šd’t ( Ëv– + 1, äm ); 417 ià( tmp & 0x02) 418 `´štf ("Stereo "); 419 ià( tmp & 0x01) 420 `´štf ("Mono "); 421 `´štf ("\n"); 424 `hex_dump ( Ëv– + 1, äm , Ën - 8); 425 äm -> ±r +ð( Ën - 8); 426 äm -> Ën -= (len - 8); 430 `hex_dump ( Ëv– + 1, äm , Ën - 2); 431 äm -> ±r +ð( Ën - 2); 432 äm -> Ën -= (len - 2); 436 `´štf ("%s\n", `ÿt2¡r ( ÿt )); 437 `hex_dump ( Ëv– + 1, äm , Ën ); 439 äm -> ±r +ð Ën ; 440 äm -> Ën -=†en; 443 } } 445  šlše  $discov” ( Ëv– , ušt8_t hdr ,  äame * äm ) 447 ušt8_t £id , ty³ ; 449  hdr & 0x03) { 451  äm -> Ën > 1) { 452 `p_šd’t ( Ëv– , äm ); 453 £id = `g‘_u8 ( äm ); 454 ty³ = `g‘_u8 ( äm ); 455 `´štf ("ACP SEID %d - %s %s%s\n", 456 £id >> 2, `medŸ2¡r ( ty³ >> 4), 457 ty³ & 0x08 ? "Sink" : "Source", 458 £id & 0x02 ? " (InUse)" : ""); 462 `”rÜcode ( Ëv– , äm ); 465 } } 467  šlše  $g‘_ÿ·bž™›s ( Ëv– , ušt8_t hdr ,  äame * äm ) 469  hdr & 0x03) { 471 `aý_£id ( Ëv– , äm ); 474 `ÿ·bž™›s ( Ëv– , äm ); 477 `”rÜcode ( Ëv– , äm ); 480 } } 482  šlše  $£t_cÚfigu¿tiÚ ( Ëv– , ušt8_t hdr ,  äame * äm ) 484 ušt8_t ÿt ; 486  hdr & 0x03) { 488 `aý_št_£id ( Ëv– , äm ); 489 `ÿ·bž™›s ( Ëv– , äm ); 492 `p_šd’t ( Ëv– , äm ); 493 ÿt = `g‘_u8 ( äm ); 494 `´štf ("%s\n", `ÿt2¡r ( ÿt )); 495 `”rÜcode ( Ëv– , äm ); 498 } } 500  šlše  $g‘_cÚfigu¿tiÚ ( Ëv– , ušt8_t hdr ,  äame * äm ) 502  hdr & 0x03) { 504 `aý_£id ( Ëv– , äm ); 506 `ÿ·bž™›s ( Ëv– , äm ); 509 `”rÜcode ( Ëv– , äm ); 512 } } 514  šlše  $»cÚfigu» ( Ëv– , ušt8_t hdr ,  äame * äm ) 516 ušt8_t ÿt ; 518  hdr & 0x03) { 520 `aý_£id ( Ëv– , äm ); 521 `ÿ·bž™›s ( Ëv– , äm ); 524 `p_šd’t ( Ëv– , äm ); 525 ÿt = `g‘_u8 ( äm ); 526 `´štf ("%s\n", `ÿt2¡r ( ÿt )); 527 `”rÜcode ( Ëv– , äm ); 530 } } 532  šlše  $Ý’_þo£_¡»am ( Ëv– , ušt8_t hdr ,  äame * äm ) 534  hdr & 0x03) { 536 `aý_£id ( Ëv– , äm ); 539 `”rÜcode ( Ëv– , äm ); 542 } } 544  šlše  $¡¬t_su¥’d_¡»am ( Ëv– , ušt8_t hdr ,  äame * äm ) 546  hdr & 0x03) { 548  äm -> Ën > 0) 549 `aý_£id ( Ëv– , äm ); 552 `aý_£id ( Ëv– , äm ); 553 `”rÜcode ( Ëv– , äm ); 556 } } 558  šlše  $abÜt_¡»amšg ( Ëv– , ušt8_t hdr ,  äame * äm ) 560  hdr & 0x03) { 562 `aý_£id ( Ëv– , äm ); 565 } } 567  šlše  $£cur™y ( Ëv– , ušt8_t hdr ,  äame * äm ) 569  hdr & 0x03) { 571 `aý_£id ( Ëv– , äm ); 573 `hex_dump ( Ëv– + 1, äm , frm-> Ën ); 574 äm -> ±r +ðäm-> Ën ; 575 äm -> Ën = 0; 578 `”rÜcode ( Ëv– , äm ); 581 } } 583  šlše  $d–ay_»pÜt ( Ëv– , ušt8_t hdr ,  äame * äm ) 585 ušt8_t £id ; 586 ušt16_t d–ay ; 588  hdr & 0x03) { 590 `p_šd’t ( Ëv– , äm ); 591 £id = `g‘_u8 ( äm ); 592 d–ay = `g‘_u16 ( äm ); 593 `´štf ("ACP SEID %d d–ay %u.%ums\n", £id >> 2, 594 d–ay / 10, delay % 10); 597 `”rÜcode ( Ëv– , äm ); 600 } } 602  $avd_dump ( Ëv– ,  äame * äm ) 604 ušt8_t hdr , sid , n¥ , ty³ ; 605 ušt16_t £qn ; 606 ušt32_t time , s¤c ; 608  äm -> num ) { 610 `p_šd’t ( Ëv– , äm ); 611 hdr = `g‘_u8 ( äm ); 613 n¥ = ( hdr & 0x0cè=ð0x04 ? `g‘_u8 ( äm ) : 0; 614 sid = hdr & 0x08 ? 0x00 : `g‘_u8 ( äm ); 616 `´štf ("AVDTP(s): %s %s:ransaction %d‚sp 0x%02x\n", 617 hdr & 0x08 ? `±2¡r (hdrè: `si2¡r ( sid ), 618 `mt2¡r ( hdr ), hd¸>> 4, n¥ ); 620  sid & 0x7f) { 622 `discov” ( Ëv– + 1, hdr , äm ); 626 `g‘_ÿ·bž™›s ( Ëv– + 1, hdr , äm ); 629 `£t_cÚfigu¿tiÚ ( Ëv– + 1, hdr , äm ); 632 `g‘_cÚfigu¿tiÚ ( Ëv– + 1, hdr , äm ); 635 `»cÚfigu» ( Ëv– + 1, hdr , äm ); 638 `Ý’_þo£_¡»am ( Ëv– + 1, hdr , äm ); 641 `¡¬t_su¥’d_¡»am ( Ëv– + 1, hdr , äm ); 644 `Ý’_þo£_¡»am ( Ëv– + 1, hdr , äm ); 647 `¡¬t_su¥’d_¡»am ( Ëv– + 1, hdr , äm ); 650 `abÜt_¡»amšg ( Ëv– + 1, hdr , äm ); 653 `£cur™y ( Ëv– + 1, hdr , äm ); 656 `d–ay_»pÜt ( Ëv– + 1, hdr , äm ); 663 `p_šd’t ( Ëv– , äm ); 664 hdr = `g‘_u8 ( äm ); 665 ty³ = `g‘_u8 ( äm ); 666 £qn = `g‘_u16 ( äm ); 667 time = `g‘_u32 ( äm ); 668 s¤c = `g‘_u32 ( äm ); 670 `´štf ("AVDTP(m): ver %d %s%scc %d %spt %d seqn %dime %d ssrc %d\n", 671 hdr >> 6, hdr & 0x20 ? "pad " : "", hdr & 0x10 ? "ext " : "", 672 hdr & 0xf, ty³ & 0x80 ? "m¬k " : "",y³ & 0x7f, £qn , time , s¤c ); 676 `¿w_dump ( Ëv– , äm ); 677 } } @tools/parser/avrcp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 33  ~<ùy³.h > 34  ~<š‰y³s.h > 36  ~"·r£r.h " 39  #AVC_CTYPE_CONTROL 0x0 ) 40  #AVC_CTYPE_STATUS 0x1 ) 41  #AVC_CTYPE_SPECIFIC_INQUIRY 0x2 ) 42  #AVC_CTYPE_NOTIFY 0x3 ) 43  #AVC_CTYPE_GENERAL_INQUIRY 0x4 ) 44  #AVC_CTYPE_NOT_IMPLEMENTED 0x8 ) 45  #AVC_CTYPE_ACCEPTED 0x9 ) 46  #AVC_CTYPE_REJECTED 0xA ) 47  #AVC_CTYPE_IN_TRANSITION 0xB ) 48  #AVC_CTYPE_STABLE 0xC ) 49  #AVC_CTYPE_CHANGED 0xD ) 50  #AVC_CTYPE_INTERIM 0xF ) 53  #AVC_SUBUNIT_MONITOR 0x00 ) 54  #AVC_SUBUNIT_AUDIO 0x01 ) 55  #AVC_SUBUNIT_PRINTER 0x02 ) 56  #AVC_SUBUNIT_DISC 0x03 ) 57  #AVC_SUBUNIT_TAPE 0x04 ) 58  #AVC_SUBUNIT_TURNER 0x05 ) 59  #AVC_SUBUNIT_CA 0x06 ) 60  #AVC_SUBUNIT_CAMERA 0x07 ) 61  #AVC_SUBUNIT_PANEL 0x09 ) 62  #AVC_SUBUNIT_BULLETIN_BOARD 0x0a ) 63  #AVC_SUBUNIT_CAMERA_STORAGE 0x0b ) 64  #AVC_SUBUNIT_VENDOR_UNIQUE 0x0c ) 65  #AVC_SUBUNIT_EXTENDED 0x1e ) 66  #AVC_SUBUNIT_UNIT 0x1f ) 69  #AVC_OP_VENDORDEP 0x00 ) 70  #AVC_OP_UNITINFO 0x30 ) 71  #AVC_OP_SUBUNITINFO 0x31 ) 72  #AVC_OP_PASSTHROUGH 0x7c ) 75  #AVC_PANEL_VOLUME_UP 0x41 ) 76  #AVC_PANEL_VOLUME_DOWN 0x42 ) 77  #AVC_PANEL_MUTE 0x43 ) 78  #AVC_PANEL_PLAY 0x44 ) 79  #AVC_PANEL_STOP 0x45 ) 80  #AVC_PANEL_PAUSE 0x46 ) 81  #AVC_PANEL_RECORD 0x47 ) 82  #AVC_PANEL_REWIND 0x48 ) 83  #AVC_PANEL_FAST_FORWARD 0x49 ) 84  #AVC_PANEL_EJECT 0x4a ) 85  #AVC_PANEL_FORWARD 0x4b ) 86  #AVC_PANEL_BACKWARD 0x4c ) 89  #AVRCP_PACKET_TYPE_SINGLE 0x00 ) 90  #AVRCP_PACKET_TYPE_START 0x01 ) 91  #AVRCP_PACKET_TYPE_CONTINUING 0x02 ) 92  #AVRCP_PACKET_TYPE_END 0x03 ) 95  #AVRCP_GET_CAPABILITIES 0x10 ) 96  #AVRCP_LIST_PLAYER_ATTRIBUTES 0x11 ) 97  #AVRCP_LIST_PLAYER_VALUES 0x12 ) 98  #AVRCP_GET_CURRENT_PLAYER_VALUE 0x13 ) 99  #AVRCP_SET_PLAYER_VALUE 0x14 ) 100  #AVRCP_GET_PLAYER_ATTRIBUTE_TEXT 0x15 ) 101  #AVRCP_GET_PLAYER_VALUE_TEXT 0x16 ) 102  #AVRCP_DISPLAYABLE_CHARSET 0x17 ) 103  #AVRCP_CT_BATTERY_STATUS 0x18 ) 104  #AVRCP_GET_ELEMENT_ATTRIBUTES 0x20 ) 105  #AVRCP_GET_PLAY_STATUS 0x30 ) 106  #AVRCP_REGISTER_NOTIFICATION 0x31 ) 107  #AVRCP_REQUEST_CONTINUING 0x40 ) 108  #AVRCP_ABORT_CONTINUING 0x41 ) 109  #AVRCP_SET_ABSOLUTE_VOLUME 0x50 ) 110  #AVRCP_SET_ADDRESSED_PLAYER 0x60 ) 111  #AVRCP_SET_BROWSED_PLAYER 0x70 ) 112  #AVRCP_GET_FOLDER_ITEMS 0x71 ) 113  #AVRCP_CHANGE_PATH 0x72 ) 114  #AVRCP_GET_ITEM_ATTRIBUTES 0x73 ) 115  #AVRCP_PLAY_ITEM 0x74 ) 116  #AVRCP_SEARCH 0x80 ) 117  #AVRCP_ADD_TO_NOW_PLAYING 0x90 ) 118  #AVRCP_GENERAL_REJECT 0xA0 ) 121  #AVRCP_EVENT_PLAYBACK_STATUS_CHANGED 0x01 ) 122  #AVRCP_EVENT_TRACK_CHANGED 0x02 ) 123  #AVRCP_EVENT_TRACK_REACHED_END 0x03 ) 124  #AVRCP_EVENT_TRACK_REACHED_START 0x04 ) 125  #AVRCP_EVENT_PLAYBACK_POS_CHANGED 0x05 ) 126  #AVRCP_EVENT_BATT_STATUS_CHANGED 0x06 ) 127  #AVRCP_EVENT_SYSTEM_STATUS_CHANGED 0x07 ) 128  #AVRCP_EVENT_PLAYER_APPLICATION_SETTING_CHANGED 0x08 ) 129  #AVRCP_EVENT_NOW_PLAYING_CONTENT_CHANGED 0x09 ) 130  #AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED 0x0a ) 131  #AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED 0x0b ) 132  #AVRCP_EVENT_UIDS_CHANGED 0x0c ) 133  #AVRCP_EVENT_VOLUME_CHANGED 0x0d ) 136  #AVRCP_STATUS_INVALID_COMMAND 0x00 ) 137  #AVRCP_STATUS_INVALID_PARAMETER 0x01 ) 138  #AVRCP_STATUS_NOT_FOUND 0x02 ) 139  #AVRCP_STATUS_INTERNAL_ERROR 0x03 ) 140  #AVRCP_STATUS_SUCCESS 0x04 ) 141  #AVRCP_STATUS_UID_CHANGED 0x05 ) 142  #AVRCP_STATUS_INVALID_DIRECTION 0x07 ) 143  #AVRCP_STATUS_NOT_DIRECTORY 0x08 ) 144  #AVRCP_STATUS_DOES_NOT_EXIST 0x09 ) 145  #AVRCP_STATUS_INVALID_SCOPE 0x0a ) 146  #AVRCP_STATUS_OUT_OF_BOUNDS 0x0b ) 147  #AVRCP_STATUS_IS_DIRECTORY 0x0c ) 148  #AVRCP_STATUS_MEDIA_IN_USE 0x0d ) 149  #AVRCP_STATUS_NOW_PLAYING_LIST_FULL 0x0e ) 150  #AVRCP_STATUS_SEARCH_NOT_SUPPORTED 0x0f ) 151  #AVRCP_STATUS_SEARCH_IN_PROGRESS 0x10 ) 152  #AVRCP_STATUS_INVALID_PLAYER_ID 0x11 ) 153  #AVRCP_STATUS_PLAYER_NOT_BROWSABLE 0x12 ) 154  #AVRCP_STATUS_PLAYER_NOT_ADDRESSED 0x13 ) 155  #AVRCP_STATUS_NO_VALID_SEARCH_RESULTS 0x14 ) 156  #AVRCP_STATUS_NO_AVAILABLE_PLAYERS 0x15 ) 157  #AVRCP_STATUS_ADDRESSED_PLAYER_CHANGED 0x16 ) 160  #AVRCP_ATTRIBUTE_ILEGAL 0x00 ) 161  #AVRCP_ATTRIBUTE_EQUALIZER 0x01 ) 162  #AVRCP_ATTRIBUTE_REPEAT_MODE 0x02 ) 163  #AVRCP_ATTRIBUTE_SHUFFLE 0x03 ) 164  #AVRCP_ATTRIBUTE_SCAN 0x04 ) 167  #AVRCP_MEDIA_ATTRIBUTE_ILLEGAL 0x0 ) 168  #AVRCP_MEDIA_ATTRIBUTE_TITLE 0x1 ) 169  #AVRCP_MEDIA_ATTRIBUTE_ARTIST 0x2 ) 170  #AVRCP_MEDIA_ATTRIBUTE_ALBUM 0x3 ) 171  #AVRCP_MEDIA_ATTRIBUTE_TRACK 0x4 ) 172  #AVRCP_MEDIA_ATTRIBUTE_TOTAL 0x5 ) 173  #AVRCP_MEDIA_ATTRIBUTE_GENRE 0x6 ) 174  #AVRCP_MEDIA_ATTRIBUTE_DURATION 0x7 ) 177  #AVRCP_PLAY_STATUS_STOPPED 0x00 ) 178  #AVRCP_PLAY_STATUS_PLAYING 0x01 ) 179  #AVRCP_PLAY_STATUS_PAUSED 0x02 ) 180  #AVRCP_PLAY_STATUS_FWD_SEEK 0x03 ) 181  #AVRCP_PLAY_STATUS_REV_SEEK 0x04 ) 182  #AVRCP_PLAY_STATUS_ERROR 0xFF ) 185  #AVRCP_MEDIA_PLAYER_LIST 0x00 ) 186  #AVRCP_MEDIA_PLAYER_VFS 0x01 ) 187  #AVRCP_MEDIA_SEARCH 0x02 ) 188  #AVRCP_MEDIA_NOW_PLAYING 0x03 ) 190  savrý_cÚtšušg { 191 ušt16_t mnum ; 192 ušt16_t msize ; 193 } gavrý_cÚtšušg ; 195 cÚ¡ * $ùy³2¡r ( ušt8_t ùy³ ) 197  ùy³ & 0x0f) { 198  AVC_CTYPE_CONTROL : 200  AVC_CTYPE_STATUS : 202  AVC_CTYPE_SPECIFIC_INQUIRY : 204  AVC_CTYPE_NOTIFY : 206  AVC_CTYPE_GENERAL_INQUIRY : 208  AVC_CTYPE_NOT_IMPLEMENTED : 210  AVC_CTYPE_ACCEPTED : 212  AVC_CTYPE_REJECTED : 214  AVC_CTYPE_IN_TRANSITION : 216  AVC_CTYPE_STABLE : 218  AVC_CTYPE_CHANGED : 220  AVC_CTYPE_INTERIM : 225 } } 227 cÚ¡ * $Ýcode2¡r ( ušt8_t Ýcode ) 229  Ýcode ) { 230  AVC_OP_VENDORDEP : 232  AVC_OP_UNITINFO : 234  AVC_OP_SUBUNITINFO : 236  AVC_OP_PASSTHROUGH : 241 } } 243 cÚ¡ * $±2¡r ( ušt8_t ± ) 245  ± ) { 246  AVRCP_PACKET_TYPE_SINGLE : 248  AVRCP_PACKET_TYPE_START : 250  AVRCP_PACKET_TYPE_CONTINUING : 252  AVRCP_PACKET_TYPE_END : 257 } } 259 cÚ¡ * $pdu2¡r ( ušt8_t pduid ) 261  pduid ) { 262  AVRCP_GET_CAPABILITIES : 264  AVRCP_LIST_PLAYER_ATTRIBUTES : 266  AVRCP_LIST_PLAYER_VALUES : 268  AVRCP_GET_CURRENT_PLAYER_VALUE : 270  AVRCP_SET_PLAYER_VALUE : 272  AVRCP_GET_PLAYER_ATTRIBUTE_TEXT : 274  AVRCP_GET_PLAYER_VALUE_TEXT : 276  AVRCP_DISPLAYABLE_CHARSET : 278  AVRCP_CT_BATTERY_STATUS : 280  AVRCP_GET_ELEMENT_ATTRIBUTES : 282  AVRCP_GET_PLAY_STATUS : 284  AVRCP_REGISTER_NOTIFICATION : 286  AVRCP_REQUEST_CONTINUING : 288  AVRCP_ABORT_CONTINUING : 290  AVRCP_SET_ABSOLUTE_VOLUME : 292  AVRCP_SET_ADDRESSED_PLAYER : 294  AVRCP_SET_BROWSED_PLAYER : 296  AVRCP_GET_FOLDER_ITEMS : 298  AVRCP_CHANGE_PATH : 300  AVRCP_GET_ITEM_ATTRIBUTES : 302  AVRCP_PLAY_ITEM : 304  AVRCP_SEARCH : 306  AVRCP_ADD_TO_NOW_PLAYING : 308  AVRCP_GENERAL_REJECT : 313 } } 315 * $ÿp2¡r ( ušt8_t ÿp ) 317  ÿp ) { 325 } } 327 * $ev’t2¡r ( ušt8_t ev’t ) 329  ev’t ) { 330  AVRCP_EVENT_PLAYBACK_STATUS_CHANGED : 332  AVRCP_EVENT_TRACK_CHANGED : 334  AVRCP_EVENT_TRACK_REACHED_END : 336  AVRCP_EVENT_TRACK_REACHED_START : 338  AVRCP_EVENT_PLAYBACK_POS_CHANGED : 340  AVRCP_EVENT_BATT_STATUS_CHANGED : 342  AVRCP_EVENT_SYSTEM_STATUS_CHANGED : 344  AVRCP_EVENT_PLAYER_APPLICATION_SETTING_CHANGED : 346  AVRCP_EVENT_NOW_PLAYING_CONTENT_CHANGED : 348  AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED : 350  AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED : 352  AVRCP_EVENT_UIDS_CHANGED : 354  AVRCP_EVENT_VOLUME_CHANGED : 359 } } 361 cÚ¡ * $”rÜ2¡r ( ušt8_t ¡©us ) 363  ¡©us ) { 364  AVRCP_STATUS_INVALID_COMMAND : 366  AVRCP_STATUS_INVALID_PARAMETER : 368  AVRCP_STATUS_NOT_FOUND : 370  AVRCP_STATUS_INTERNAL_ERROR : 372  AVRCP_STATUS_SUCCESS : 374  AVRCP_STATUS_UID_CHANGED : 376  AVRCP_STATUS_INVALID_DIRECTION : 378  AVRCP_STATUS_NOT_DIRECTORY : 380  AVRCP_STATUS_DOES_NOT_EXIST : 382  AVRCP_STATUS_INVALID_SCOPE : 384  AVRCP_STATUS_OUT_OF_BOUNDS : 386  AVRCP_STATUS_MEDIA_IN_USE : 388  AVRCP_STATUS_IS_DIRECTORY : 390  AVRCP_STATUS_NOW_PLAYING_LIST_FULL : 392  AVRCP_STATUS_SEARCH_NOT_SUPPORTED : 394  AVRCP_STATUS_SEARCH_IN_PROGRESS : 396  AVRCP_STATUS_INVALID_PLAYER_ID : 398  AVRCP_STATUS_PLAYER_NOT_BROWSABLE : 400  AVRCP_STATUS_PLAYER_NOT_ADDRESSED : 402  AVRCP_STATUS_NO_VALID_SEARCH_RESULTS : 404  AVRCP_STATUS_NO_AVAILABLE_PLAYERS : 406  AVRCP_STATUS_ADDRESSED_PLAYER_CHANGED : 411 } } 413  $avrý_»jeùed_dump ( Ëv– ,  äame * äm , ušt16_t Ën ) 415 ušt8_t ¡©us ; 417 `p_šd’t ( Ëv– , äm ); 419 ià( Ën < 1) { 420 `´štf ("PDU Malformed\n"); 421 `¿w_dump ( Ëv– , äm ); 425 ¡©us = `g‘_u8 ( äm ); 426 `´štf ("E¼Ü: 0x%02x (%s)\n", ¡©us , `”rÜ2¡r (status)); 427 } } 429  $avrý_g‘_ÿ·bž™›s_dump ( Ëv– ,  äame * äm , ušt16_t Ën ) 431 ušt8_t ÿp ; 432 ušt8_t couÁ ; 434 `p_šd’t ( Ëv– , äm ); 436 ià( Ën < 1) { 437 `´štf ("PDU Malformed\n"); 438 `¿w_dump ( Ëv– , äm ); 442 ÿp = `g‘_u8 ( äm ); 443 `´štf ("C­abž™yID: 0x%02x (%s)\n", ÿp , `ÿp2¡r (cap)); 445 ià( Ën == 1) 448 `p_šd’t ( Ëv– , äm ); 450 couÁ = `g‘_u8 ( äm ); 451 `´štf ("C­abž™yCouÁ: 0x%02x\n", couÁ ); 453  ÿp ) { 455 ; couÁ > 0; count--) { 456  i ; 458 `p_šd’t ( Ëv– , äm ); 460 `´štf ("%s: 0x", `ÿp2¡r ( ÿp )); 461  i = 0; i < 3; i++) 462 `´štf ("%02x", `g‘_u8 ( äm )); 463 `´štf ("\n"); 467 ; couÁ > 0; count--) { 468 ušt8_t ev’t ; 470 `p_šd’t ( Ëv– , äm ); 472 ev’t = `g‘_u8 ( äm ); 473 `´štf ("%s: 0x%02x (%s)\n", `ÿp2¡r ( ÿp ), ev’t , 474 `ev’t2¡r ( ev’t )); 478 `¿w_dump ( Ëv– , äm ); 480 } } 482 cÚ¡ * $©Œ2¡r ( ušt8_t ©Œ ) 484  ©Œ ) { 485  AVRCP_ATTRIBUTE_ILEGAL : 487  AVRCP_ATTRIBUTE_EQUALIZER : 489  AVRCP_ATTRIBUTE_REPEAT_MODE : 491  AVRCP_ATTRIBUTE_SHUFFLE : 493  AVRCP_ATTRIBUTE_SCAN : 498 } } 500  $avrý_li¡_¶ay”_©Œibu‹s_dump ( Ëv– ,  äame * äm , 501 ušt16_t Ën ) 503 ušt8_t num ; 505 ià( Ën == 0) 508 `p_šd’t ( Ëv– , äm ); 510 num = `g‘_u8 ( äm ); 511 `´štf ("A‰ribu‹CouÁ: 0x%02x\n", num ); 513 ; num > 0;‚um--) { 514 ušt8_t ©Œ ; 516 `p_šd’t ( Ëv– , äm ); 518 ©Œ = `g‘_u8 ( äm ); 519 `´štf ("A‰ribu‹ID: 0x%02x (%s)\n", ©Œ , `©Œ2¡r (attr)); 521 } } 523 cÚ¡ * $v®ue2¡r ( ušt8_t ©Œ , ušt8_ˆ v®ue ) 525  ©Œ ) { 526  AVRCP_ATTRIBUTE_ILEGAL : 528  AVRCP_ATTRIBUTE_EQUALIZER : 529  v®ue ) { 537  AVRCP_ATTRIBUTE_REPEAT_MODE : 538  v®ue ) { 550  AVRCP_ATTRIBUTE_SHUFFLE : 551  v®ue ) { 561  AVRCP_ATTRIBUTE_SCAN : 562  v®ue ) { 575 } } 577  $avrý_li¡_¶ay”_v®ues_dump ( Ëv– ,  äame * äm , 578 ušt8_t ùy³ , ušt16_t Ën ) 580  ušt8_t ©Œ = 0; 581 ušt8_t num ; 583 `p_šd’t ( Ëv– , äm ); 585 ià( Ën < 1) { 586 `´štf ("PDU Malformed\n"); 587 `¿w_dump ( Ëv– , äm ); 591 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 592  »¥Ú£ ; 594 ©Œ = `g‘_u8 ( äm ); 595 `´štf ("A‰ribu‹ID: 0x%02x (%s)\n", ©Œ , `©Œ2¡r (attr)); 599 »¥Ú£ : 600 num = `g‘_u8 ( äm ); 601 `´štf ("V®ueCouÁ: 0x%02x\n", num ); 603 ; num > 0;‚um--) { 604 ušt8_t v®ue ; 606 `p_šd’t ( Ëv– , äm ); 608 v®ue = `g‘_u8 ( äm ); 609 `´štf ("V®ueID: 0x%02x (%s)\n", v®ue , 610 `v®ue2¡r ( ©Œ , v®ue )); 612 } } 614  $avrý_g‘_cu¼’t_¶ay”_v®ue_dump ( Ëv– ,  äame * äm , 615 ušt8_t ùy³ , ušt16_t Ën ) 617 ušt8_t num ; 619 `p_šd’t ( Ëv– , äm ); 621 ià( Ën < 1) { 622 `´štf ("PDU Malformed\n"); 623 `¿w_dump ( Ëv– , äm ); 627 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 628  »¥Ú£ ; 630 num = `g‘_u8 ( äm ); 631 `´štf ("A‰ribu‹CouÁ: 0x%02x\n", num ); 633 ; num > 0;‚um--) { 634 ušt8_t ©Œ ; 636 `p_šd’t ( Ëv– , äm ); 638 ©Œ = `g‘_u8 ( äm ); 639 `´štf ("A‰ribu‹ID: 0x%02x (%s)\n", ©Œ , `©Œ2¡r (attr)); 644 »¥Ú£ : 645 num = `g‘_u8 ( äm ); 646 `´štf ("V®ueCouÁ: 0x%02x\n", num ); 648 ; num > 0;‚um--) { 649 ušt8_t ©Œ , v®ue ; 651 `p_šd’t ( Ëv– , äm ); 653 ©Œ = `g‘_u8 ( äm ); 654 `´štf ("A‰ribu‹ID: 0x%02x (%s)\n", ©Œ , `©Œ2¡r (attr)); 656 `p_šd’t ( Ëv– , äm ); 658 v®ue = `g‘_u8 ( äm ); 659 `´štf ("V®ueID: 0x%02x (%s)\n", v®ue , 660 `v®ue2¡r ( ©Œ , v®ue )); 662 } } 664  $avrý_£t_¶ay”_v®ue_dump ( Ëv– ,  äame * äm , 665 ušt8_t ùy³ , ušt16_t Ën ) 667 ušt8_t num ; 669 `p_šd’t ( Ëv– , äm ); 671 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 674 ià( Ën < 1) { 675 `´štf ("PDU Malformed\n"); 676 `¿w_dump ( Ëv– , äm ); 680 num = `g‘_u8 ( äm ); 681 `´štf ("A‰ribu‹CouÁ: 0x%02x\n", num ); 683 ; num > 0;‚um--) { 684 ušt8_t ©Œ , v®ue ; 686 `p_šd’t ( Ëv– , äm ); 688 ©Œ = `g‘_u8 ( äm ); 689 `´štf ("A‰ribu‹ID: 0x%02x (%s)\n", ©Œ , `©Œ2¡r (attr)); 691 `p_šd’t ( Ëv– , äm ); 693 v®ue = `g‘_u8 ( äm ); 694 `´štf ("V®ueID: 0x%02x (%s)\n", v®ue , 695 `v®ue2¡r ( ©Œ , v®ue )); 697 } } 699 cÚ¡ * $ch¬£t2¡r ( ušt16_t ch¬£t ) 701  ch¬£t ) { 730 } } 732  $avrý_g‘_¶ay”_©Œibu‹_‹xt_dump ( Ëv– ,  äame * äm , 733 ušt8_t ùy³ , ušt16_t Ën ) 735 ušt8_t num ; 737 `p_šd’t ( Ëv– , äm ); 739 ià( Ën < 1) { 740 `´štf ("PDU Malformed\n"); 741 `¿w_dump ( Ëv– , äm ); 745 num = `g‘_u8 ( äm ); 746 `´štf ("A‰ribu‹CouÁ: 0x%02x\n", num ); 748 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 749  »¥Ú£ ; 751 ; num > 0;‚um--) { 752 ušt8_t ©Œ ; 754 `p_šd’t ( Ëv– , äm ); 756 ©Œ = `g‘_u8 ( äm ); 757 `´štf ("A‰ribu‹ID: 0x%02x (%s)\n", ©Œ , `©Œ2¡r (attr)); 762 »¥Ú£ : 763 ; num > 0;‚um--) { 764 ušt8_t ©Œ , Ën ; 765 ušt16_t ch¬£t ; 767 `p_šd’t ( Ëv– , äm ); 769 ©Œ = `g‘_u8 ( äm ); 770 `´štf ("A‰ribu‹ID: 0x%02x (%s)\n", ©Œ , `©Œ2¡r (attr)); 772 `p_šd’t ( Ëv– , äm ); 774 ch¬£t = `g‘_u16 ( äm ); 775 `´štf ("Ch¬£tID: 0x%04x (%s)\n", ch¬£t , 776 `ch¬£t2¡r ( ch¬£t )); 778 `p_šd’t ( Ëv– , äm ); 780 Ën = `g‘_u8 ( äm ); 781 `´štf ("SŒšgL’gth: 0x%02x\n", Ën ); 783 `p_šd’t ( Ëv– , äm ); 785 `´štf ("String: "); 786 ; Ën > 0;†en--) { 787 ušt8_t c = `g‘_u8 ( äm ); 788 `´štf ("%1c", `i¥ršt ( c ) ? c : '.'); 790 `´štf ("\n"); 792 } } 794  $avrý_g‘_¶ay”_v®ue_‹xt_dump ( Ëv– ,  äame * äm , 795 ušt8_t ùy³ , ušt16_t Ën ) 797  ušt8_t ©Œ = 0; 798 ušt8_t num ; 800 `p_šd’t ( Ëv– , äm ); 802 ià( Ën < 1) { 803 `´štf ("PDU Malformed\n"); 804 `¿w_dump ( Ëv– , äm ); 808 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 809  »¥Ú£ ; 811 ©Œ = `g‘_u8 ( äm ); 812 `´štf ("A‰ribu‹ID: 0x%02x (%s)\n", ©Œ , `©Œ2¡r (attr)); 814 `p_šd’t ( Ëv– , äm ); 816 num = `g‘_u8 ( äm ); 817 `´štf ("V®ueCouÁ: 0x%02x\n", num ); 819 ; num > 0;‚um--) { 820 ušt8_t v®ue ; 822 `p_šd’t ( Ëv– , äm ); 824 v®ue = `g‘_u8 ( äm ); 825 `´štf ("V®ueID: 0x%02x (%s)\n", v®ue , 826 `v®ue2¡r ( ©Œ , v®ue )); 831 »¥Ú£ : 832 num = `g‘_u8 ( äm ); 833 `´štf ("V®ueCouÁ: 0x%02x\n", num ); 835 ; num > 0;‚um--) { 836 ušt8_t v®ue , Ën ; 837 ušt16_t ch¬£t ; 839 `p_šd’t ( Ëv– , äm ); 841 v®ue = `g‘_u8 ( äm ); 842 `´štf ("V®ueID: 0x%02x (%s)\n", v®ue , 843 `v®ue2¡r ( ©Œ , v®ue )); 845 `p_šd’t ( Ëv– , äm ); 847 ch¬£t = `g‘_u16 ( äm ); 848 `´štf ("Ch¬£tID: 0x%04x (%s)\n", ch¬£t , 849 `ch¬£t2¡r ( ch¬£t )); 851 `p_šd’t ( Ëv– , äm ); 853 Ën = `g‘_u8 ( äm ); 854 `´štf ("SŒšgL’gth: 0x%02x\n", Ën ); 856 `p_šd’t ( Ëv– , äm ); 858 `´štf ("String: "); 859 ; Ën > 0;†en--) { 860 ušt8_t c = `g‘_u8 ( äm ); 861 `´štf ("%1c", `i¥ršt ( c ) ? c : '.'); 863 `´štf ("\n"); 865 } } 867  $avrý_di¥ÏyabË_ch¬£t ( Ëv– ,  äame * äm , 868 ušt8_t ùy³ , ušt16_t Ën ) 870 ušt8_t num ; 872 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 875 `p_šd’t ( Ëv– , äm ); 877 ià( Ën < 2) { 878 `´štf ("PDU Malformed\n"); 879 `¿w_dump ( Ëv– , äm ); 883 num = `g‘_u8 ( äm ); 884 `´štf ("Ch¬£tCouÁ: 0x%02x\n", num ); 886 ; num > 0;‚um--) { 887 ušt16_t ch¬£t ; 889 `p_šd’t ( Ëv– , äm ); 891 ch¬£t = `g‘_u16 ( äm ); 892 `´štf ("Ch¬£tID: 0x%04x (%s)\n", ch¬£t , 893 `ch¬£t2¡r ( ch¬£t )); 895 } } 897 cÚ¡ * $¡©us2¡r ( ušt8_t ¡©us ) 899  ¡©us ) { 913 } } 915  $avrý_ù_b©‹ry_¡©us_dump ( Ëv– ,  äame * äm , 916 ušt8_t ùy³ , ušt16_t Ën ) 918 ušt8_t ¡©us ; 920 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 923 `p_šd’t ( Ëv– , äm ); 925 ¡©us = `g‘_u8 ( äm ); 926 `´štf ("B©‹ryStus: 0x%02x (%s)\n", ¡©us , `¡©us2¡r (status)); 927 } } 929 cÚ¡ * $medŸ‰r2¡r ( ušt32_t ©Œ ) 931  ©Œ ) { 932  AVRCP_MEDIA_ATTRIBUTE_ILLEGAL : 934  AVRCP_MEDIA_ATTRIBUTE_TITLE : 936  AVRCP_MEDIA_ATTRIBUTE_ARTIST : 938  AVRCP_MEDIA_ATTRIBUTE_ALBUM : 940  AVRCP_MEDIA_ATTRIBUTE_TRACK : 942  AVRCP_MEDIA_ATTRIBUTE_TOTAL : 944  AVRCP_MEDIA_ATTRIBUTE_GENRE : 946  AVRCP_MEDIA_ATTRIBUTE_DURATION : 951 } } 953  $avrý_g‘_–em’t_©Œibu‹s_dump ( Ëv– ,  äame * äm , 954 ušt8_t ùy³ , ušt16_t Ën , 955 ušt8_t ± ) 957 ušt64_t id ; 958 ušt8_t num ; 960 `p_šd’t ( Ëv– , äm ); 962 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 963  »¥Ú£ ; 965 ià( Ën < 9) { 966 `´štf ("PDU Malformed\n"); 967 `¿w_dump ( Ëv– , äm ); 971 id = `g‘_u64 ( äm ); 972 `´štf ("Id’tif›r: 0x%jx (%s)\n", id , id ? "Reserved" : "PLAYING"); 974 `p_šd’t ( Ëv– , äm ); 976 num = `g‘_u8 ( äm ); 977 `´štf ("A‰ribu‹CouÁ: 0x%02x\n", num ); 979 ; num > 0;‚um--) { 980 ušt32_t ©Œ ; 982 `p_šd’t ( Ëv– , äm ); 984 ©Œ = `g‘_u32 ( äm ); 985 `´štf ("A‰ribu‹: 0x%08x (%s)\n", ©Œ , `medŸ‰r2¡r (attr)); 990 »¥Ú£ : 991 ià( ± =ð AVRCP_PACKET_TYPE_SINGLE ||…ˆ=ð AVRCP_PACKET_TYPE_START ) { 992 ià( Ën < 1) { 993 `´štf ("PDU Malformed\n"); 994 `¿w_dump ( Ëv– , äm ); 998 num = `g‘_u8 ( äm ); 999 avrý_cÚtšušg . num =‚um; 1000 `´štf ("A‰ribu‹CouÁ: 0x%02x\n", num ); 1001 Ën --; 1003 num = avrý_cÚtšušg .num; 1005 ià( avrý_cÚtšušg . size > 0) { 1006 ušt16_t size ; 1008 ià( avrý_cÚtšušg . size > Ën ) { 1009 size = Ën ; 1010 avrý_cÚtšušg . size -ð Ën ; 1012 size = avrý_cÚtšušg .size; 1013 avrý_cÚtšušg . size = 0; 1016 `´štf ("ContinuingAttributeValue: "); 1017 ; size > 0; size--) { 1018 ušt8_t c = `g‘_u8 ( äm ); 1019 `´štf ("%1c", `i¥ršt ( c ) ? c : '.'); 1021 `´štf ("\n"); 1023 Ën -ð size ; 1027  num > 0 && Ën > 0) { 1028 ušt32_t ©Œ ; 1029 ušt16_t ch¬£t , ©ŒËn ; 1031 `p_šd’t ( Ëv– , äm ); 1033 ©Œ = `g‘_u32 ( äm ); 1034 `´štf ("A‰ribu‹: 0x%08x (%s)\n", ©Œ , `medŸ‰r2¡r (attr)); 1036 `p_šd’t ( Ëv– , äm ); 1038 ch¬£t = `g‘_u16 ( äm ); 1039 `´štf ("Ch¬£tID: 0x%04x (%s)\n", ch¬£t , 1040 `ch¬£t2¡r ( ch¬£t )); 1042 `p_šd’t ( Ëv– , äm ); 1043 ©ŒËn = `g‘_u16 ( äm ); 1044 `´štf ("A‰ribu‹V®ueL’gth: 0x%04x\n", ©ŒËn ); 1046 Ën -ð( ©Œ è+ ( ch¬£t è+ ( ©ŒËn ); 1047 num --; 1049 `p_šd’t ( Ëv– , äm ); 1051 `´štf ("AttributeValue: "); 1052 ; ©ŒËn > 0 && Ën > 0;‡ttrlen--,†en--) { 1053 ušt8_t c = `g‘_u8 ( äm ); 1054 `´štf ("%1c", `i¥ršt ( c ) ? c : '.'); 1056 `´štf ("\n"); 1058 ià( ©ŒËn > 0) 1059 avrý_cÚtšušg . size = ©ŒËn ; 1062 avrý_cÚtšušg . num =‚um; 1063 } } 1065 cÚ¡ * $¶ay¡©us2¡r ( ušt8_t ¡©us ) 1067  ¡©us ) { 1068  AVRCP_PLAY_STATUS_STOPPED : 1070  AVRCP_PLAY_STATUS_PLAYING : 1072  AVRCP_PLAY_STATUS_PAUSED : 1074  AVRCP_PLAY_STATUS_FWD_SEEK : 1076  AVRCP_PLAY_STATUS_REV_SEEK : 1078  AVRCP_PLAY_STATUS_ERROR : 1083 } } 1085  $avrý_g‘_¶ay_¡©us_dump ( Ëv– ,  äame * äm , 1086 ušt8_t ùy³ , ušt16_t Ën ) 1088 ušt32_t š‹rv® ; 1089 ušt8_t ¡©us ; 1091 ià( ùy³ <ð AVC_CTYPE_GENERAL_INQUIRY ) 1094 `p_šd’t ( Ëv– , äm ); 1096 ià( Ën < 9) { 1097 `´štf ("PDU Malformed\n"); 1098 `¿w_dump ( Ëv– , äm ); 1102 š‹rv® = `g‘_u32 ( äm ); 1103 `´štf ("SÚgL’gth: 0x%08x (%u mži£cÚds)\n", š‹rv® , interval); 1105 `p_šd’t ( Ëv– , äm ); 1107 š‹rv® = `g‘_u32 ( äm ); 1108 `´štf ("SÚgPos™iÚ: 0x%08x (%u mžicÚds)\n", š‹rv® , interval); 1110 `p_šd’t ( Ëv– , äm ); 1112 ¡©us = `g‘_u8 ( äm ); 1113 `´štf ("PÏyStus: 0x%02x (%s)\n", ¡©us , `¶ay¡©us2¡r (status)); 1114 } } 1116  $avrý_»gi¡”_nÙifiÿtiÚ_dump ( Ëv– ,  äame * äm , 1117 ušt8_t ùy³ , ušt16_t Ën ) 1119 ušt8_t ev’t , ¡©us ; 1120 ušt16_t uid ; 1121 ušt32_t š‹rv® ; 1122 ušt64_t id ; 1124 `p_šd’t ( Ëv– , äm ); 1126 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 1127  »¥Ú£ ; 1129 ià( Ën < 5) { 1130 `´štf ("PDU Malformed\n"); 1131 `¿w_dump ( Ëv– , äm ); 1135 ev’t = `g‘_u8 ( äm ); 1136 `´štf ("Ev’tID: 0x%02x (%s)\n", ev’t , `ev’t2¡r (event)); 1138 `p_šd’t ( Ëv– , äm ); 1140 š‹rv® = `g‘_u32 ( äm ); 1141 `´štf ("IÁ”v®: 0x%08x (%u secÚds)\n", š‹rv® , interval); 1145 »¥Ú£ : 1146 ià( Ën < 1) { 1147 `´štf ("PDU Malformed\n"); 1148 `¿w_dump ( Ëv– , äm ); 1152 ev’t = `g‘_u8 ( äm ); 1153 `´štf ("Ev’tID: 0x%02x (%s)\n", ev’t , `ev’t2¡r (event)); 1155 `p_šd’t ( Ëv– , äm ); 1157  ev’t ) { 1158  AVRCP_EVENT_PLAYBACK_STATUS_CHANGED : 1159 ¡©us = `g‘_u8 ( äm ); 1160 `´štf ("PÏyStus: 0x%02x (%s)\n", ¡©us , 1161 `¶ay¡©us2¡r ( ¡©us )); 1163  AVRCP_EVENT_TRACK_CHANGED : 1164 id = `g‘_u64 ( äm ); 1165 `´štf ("Id’tif›r: 0x%16" PRIx64 " (%" PRIu64 ")\n", id , id); 1167  AVRCP_EVENT_PLAYBACK_POS_CHANGED : 1168 š‹rv® = `g‘_u32 ( äm ); 1169 `´štf ("Pos™iÚ: 0x%08x (%u mži£cÚds)\n", š‹rv® , 1170 š‹rv® ); 1172  AVRCP_EVENT_BATT_STATUS_CHANGED : 1173 ¡©us = `g‘_u8 ( äm ); 1174 `´štf ("B©‹ryStus: 0x%02x (%s)\n", ¡©us , 1175 `¡©us2¡r ( ¡©us )); 1177  AVRCP_EVENT_SYSTEM_STATUS_CHANGED : 1178 ¡©us = `g‘_u8 ( äm ); 1179 `´štf ("Sy¡emStus: 0x%02x ", ¡©us ); 1180  ¡©us ) { 1182 `´štf ("(POWER_ON)\n"); 1185 `´štf ("(POWER_OFF)\n"); 1188 `´štf ("(UNPLUGGED)\n"); 1191 `´štf ("(UNKOWN)\n"); 1195  AVRCP_EVENT_PLAYER_APPLICATION_SETTING_CHANGED : 1196 ¡©us = `g‘_u8 ( äm ); 1197 `´štf ("A‰ribu‹CouÁ: 0x%02x\n", ¡©us ); 1199 ; ¡©us > 0; status--) { 1200 ušt8_t ©Œ , v®ue ; 1202 `p_šd’t ( Ëv– , äm ); 1204 ©Œ = `g‘_u8 ( äm ); 1205 `´štf ("A‰ribu‹ID: 0x%02x (%s)\n", ©Œ , 1206 `©Œ2¡r ( ©Œ )); 1208 `p_šd’t ( Ëv– , äm ); 1210 v®ue = `g‘_u8 ( äm ); 1211 `´štf ("V®ueID: 0x%02x (%s)\n", v®ue , 1212 `v®ue2¡r ( ©Œ , v®ue )); 1215  AVRCP_EVENT_VOLUME_CHANGED : 1216 ¡©us = `g‘_u8 ( äm ) & 0x7F; 1217 `´štf ("VÞume: %.2f%% (%d/127)\n", ¡©us /1.27, status); 1219  AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED : 1220 uid = `g‘_u16 ( äm ); 1221 `´štf ("PÏy”ID: 0x%04x (%u)\n", uid , uid); 1224 `p_šd’t ( Ëv– , äm ); 1226 uid = `g‘_u16 ( äm ); 1227 `´štf ("UIDCouÁ”: 0x%04x (%u)\n", uid , uid); 1229  AVRCP_EVENT_UIDS_CHANGED : 1230 uid = `g‘_u16 ( äm ); 1231 `´štf ("UIDCouÁ”: 0x%04x (%u)\n", uid , uid); 1234 } } 1236  $avrý_£t_absÞu‹_vÞume_dump ( Ëv– ,  äame * äm , 1237 ušt8_t ùy³ , ušt16_t Ën ) 1239 ušt8_t v®ue ; 1241 `p_šd’t ( Ëv– , äm ); 1243 ià( Ën < 1) { 1244 `´štf ("PDU Malformed\n"); 1245 `¿w_dump ( Ëv– , äm ); 1249 v®ue = `g‘_u8 ( äm ) & 0x7F; 1250 `´štf ("VÞume: %.2f%% (%d/127)\n", v®ue /1.27, value); 1251 } } 1253  $avrý_£t_add»s£d_¶ay” ( Ëv– ,  äame * äm , 1254 ušt8_t ùy³ , ušt16_t Ën ) 1256 ušt16_t id ; 1257 ušt8_t ¡©us ; 1259 `p_šd’t ( Ëv– , äm ); 1261 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 1262  »¥Ú£ ; 1264 ià( Ën < 2) { 1265 `´štf ("PDU Malformed\n"); 1266 `¿w_dump ( Ëv– , äm ); 1270 id = `g‘_u16 ( äm ); 1271 `´štf ("PÏy”ID: 0x%04x (%u)\n", id , id); 1274 »¥Ú£ : 1275 ià( Ën < 1) { 1276 `´štf ("PDU Malformed\n"); 1277 `¿w_dump ( Ëv– , äm ); 1281 ¡©us = `g‘_u8 ( äm ); 1282 `´štf ("Stus: 0x%02x (%s)\n", ¡©us , `”rÜ2¡r (status)); 1283 } } 1285  $avrý_£t_brow£d_¶ay”_dump ( Ëv– ,  äame * äm , 1286 ušt8_t hdr , ušt16_t Ën ) 1288 ušt32_t ™ems ; 1289 ušt16_t id , uids , ch¬£t ; 1290 ušt8_t ¡©us , fÞd”s ; 1292 `p_šd’t ( Ëv– , äm ); 1294 ià( hdr & 0x02) 1295  »¥Ú£ ; 1297 ià( Ën < 2) { 1298 `´štf ("PDU Malformed\n"); 1299 `¿w_dump ( Ëv– , äm ); 1303 id = `g‘_u16 ( äm ); 1304 `´štf ("PÏy”ID: 0x%04x (%u)\n", id , id); 1307 »¥Ú£ : 1308 ià( Ën != 1 &&†en < 10) { 1309 `´štf ("PDU Malformed\n"); 1310 `¿w_dump ( Ëv– , äm ); 1314 ¡©us = `g‘_u8 ( äm ); 1315 `´štf ("Stus: 0x%02x (%s)\n", ¡©us , `”rÜ2¡r (status)); 1317 ià( Ën == 1) 1320 `p_šd’t ( Ëv– , äm ); 1322 uids = `g‘_u16 ( äm ); 1323 `´štf ("UIDCouÁ”: 0x%04x (%u)\n", uids , uids); 1325 `p_šd’t ( Ëv– , äm ); 1327 ™ems = `g‘_u32 ( äm ); 1328 `´štf ("Numb” oàI‹ms: 0x%08x (%u)\n", ™ems , items); 1330 `p_šd’t ( Ëv– , äm ); 1332 ch¬£t = `g‘_u16 ( äm ); 1333 `´štf ("Ch¬£tID: 0x%04x (%s)\n", ch¬£t , `ch¬£t2¡r (charset)); 1335 `p_šd’t ( Ëv– , äm ); 1337 fÞd”s = `g‘_u8 ( äm ); 1338 `´štf ("FÞd” D•th: 0x%02x (%u)\n", fÞd”s , folders); 1340 ; fÞd”s > 0; folders--) { 1341 ušt16_t Ën ; 1343 `p_šd’t ( Ëv– , äm ); 1345 Ën = `g‘_u8 ( äm ); 1346 `´štf ("Folder: "); 1347 ; Ën > 0;†en--) { 1348 ušt8_t c = `g‘_u8 ( äm ); 1349 `´štf ("%1c", `i¥ršt ( c ) ? c : '.'); 1351 `´štf ("\n"); 1353 } } 1355 cÚ¡ * $scÝe2¡r ( ušt8_t scÝe ) 1357  scÝe ) { 1358  AVRCP_MEDIA_PLAYER_LIST : 1360  AVRCP_MEDIA_PLAYER_VFS : 1362  AVRCP_MEDIA_SEARCH : 1364  AVRCP_MEDIA_NOW_PLAYING : 1369 } } 1371  $avrý_¶ay_™em_dump ( Ëv– ,  äame * äm , 1372 ušt8_t ùy³ , ušt16_t Ën ) 1374 ušt64_t uid ; 1375 ušt32_t uidcouÁ” ; 1376 ušt8_t scÝe , ¡©us ; 1378 `p_šd’t ( Ëv– , äm ); 1380 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 1381  »¥Ú£ ; 1383 ià( Ën < 11) { 1384 `´štf ("PDU Malformed\n"); 1385 `¿w_dump ( Ëv– , äm ); 1389 scÝe = `g‘_u8 ( äm ); 1390 `´štf ("ScÝe: 0x%02x (%s)\n", scÝe , `scÝe2¡r (scope)); 1392 `p_šd’t ( Ëv– , äm ); 1394 uid = `g‘_u64 ( äm ); 1395 `´štf ("UID: 0x%16" PRIx64 " (%" PRIu64 ")\n", uid , uid); 1397 `p_šd’t ( Ëv– , äm ); 1399 uidcouÁ” = `g‘_u16 ( äm ); 1400 `´štf ("UIDCouÁ”: 0x%04x (%u)\n", uidcouÁ” , uidcounter); 1404 »¥Ú£ : 1405 ¡©us = `g‘_u8 ( äm ); 1406 `´štf ("Stus: 0x%02x (%s)\n", ¡©us , `”rÜ2¡r (status)); 1407 } } 1409  $avrý_add_to_now_¶ayšg_dump ( Ëv– ,  äame * äm , 1410 ušt8_t ùy³ , ušt16_t Ën ) 1412 ušt64_t uid ; 1413 ušt32_t uidcouÁ” ; 1414 ušt8_t scÝe , ¡©us ; 1416 `p_šd’t ( Ëv– , äm ); 1418 ià( ùy³ > AVC_CTYPE_GENERAL_INQUIRY ) 1419  »¥Ú£ ; 1421 ià( Ën < 11) { 1422 `´štf ("PDU Malformed\n"); 1423 `¿w_dump ( Ëv– , äm ); 1427 scÝe = `g‘_u8 ( äm ); 1428 `´štf ("ScÝe: 0x%02x (%s)\n", scÝe , `scÝe2¡r (scope)); 1430 `p_šd’t ( Ëv– , äm ); 1432 uid = `g‘_u64 ( äm ); 1433 `´štf ("UID: 0x%16" PRIx64 " (%" PRIu64 ")\n", uid , uid); 1435 `p_šd’t ( Ëv– , äm ); 1437 uidcouÁ” = `g‘_u16 ( äm ); 1438 `´štf ("UIDCouÁ”: 0x%04x (%u)\n", uidcouÁ” , uidcounter); 1442 »¥Ú£ : 1443 ¡©us = `g‘_u8 ( äm ); 1444 `´štf ("Stus: 0x%02x (%s)\n", ¡©us , `”rÜ2¡r (status)); 1445 } } 1447  $avrý_pdu_dump ( Ëv– ,  äame * äm , ušt8_t ùy³ ) 1449 ušt8_t pduid , ± ; 1450 ušt16_t Ën ; 1452 `p_šd’t ( Ëv– , äm ); 1454 pduid = `g‘_u8 ( äm ); 1455 ± = `g‘_u8 ( äm ); 1456 Ën = `g‘_u16 ( äm ); 1458 `´štf ("AVRCP: %s:…ˆ% ËÀ0x%04x\n", `pdu2¡r ( pduid ), 1459 `±2¡r ( ± ), Ën ); 1461 ià( Ën !ð äm ->len) { 1462 `p_šd’t ( Ëv– , äm ); 1463 `´štf ("PDU Malformed\n"); 1464 `¿w_dump ( Ëv– , äm ); 1468 ià( ùy³ =ð AVC_CTYPE_REJECTED ) { 1469 `avrý_»jeùed_dump ( Ëv– + 1, äm , Ën ); 1473  pduid ) { 1474  AVRCP_GET_CAPABILITIES : 1475 `avrý_g‘_ÿ·bž™›s_dump ( Ëv– + 1, äm , Ën ); 1477  AVRCP_LIST_PLAYER_ATTRIBUTES : 1478 `avrý_li¡_¶ay”_©Œibu‹s_dump ( Ëv– + 1, äm , Ën ); 1480  AVRCP_LIST_PLAYER_VALUES : 1481 `avrý_li¡_¶ay”_v®ues_dump ( Ëv– + 1, äm , ùy³ , Ën ); 1483  AVRCP_GET_CURRENT_PLAYER_VALUE : 1484 `avrý_g‘_cu¼’t_¶ay”_v®ue_dump ( Ëv– + 1, äm , ùy³ , 1485 Ën ); 1487  AVRCP_SET_PLAYER_VALUE : 1488 `avrý_£t_¶ay”_v®ue_dump ( Ëv– + 1, äm , ùy³ , Ën ); 1490  AVRCP_GET_PLAYER_ATTRIBUTE_TEXT : 1491 `avrý_g‘_¶ay”_©Œibu‹_‹xt_dump ( Ëv– + 1, äm , ùy³ , 1492 Ën ); 1494  AVRCP_GET_PLAYER_VALUE_TEXT : 1495 `avrý_g‘_¶ay”_v®ue_‹xt_dump ( Ëv– + 1, äm , ùy³ , Ën ); 1497  AVRCP_DISPLAYABLE_CHARSET : 1498 `avrý_di¥ÏyabË_ch¬£t ( Ëv– + 1, äm , ùy³ , Ën ); 1500  AVRCP_CT_BATTERY_STATUS : 1501 `avrý_ù_b©‹ry_¡©us_dump ( Ëv– + 1, äm , ùy³ , Ën ); 1503  AVRCP_GET_ELEMENT_ATTRIBUTES : 1504 `avrý_g‘_–em’t_©Œibu‹s_dump ( Ëv– + 1, äm , ùy³ , Ën , 1505 ± ); 1507  AVRCP_GET_PLAY_STATUS : 1508 `avrý_g‘_¶ay_¡©us_dump ( Ëv– + 1, äm , ùy³ , Ën ); 1510  AVRCP_REGISTER_NOTIFICATION : 1511 `avrý_»gi¡”_nÙifiÿtiÚ_dump ( Ëv– + 1, äm , ùy³ , Ën ); 1513  AVRCP_SET_ABSOLUTE_VOLUME : 1514 `avrý_£t_absÞu‹_vÞume_dump ( Ëv– + 1, äm , ùy³ , Ën ); 1516  AVRCP_SET_ADDRESSED_PLAYER : 1517 `avrý_£t_add»s£d_¶ay” ( Ëv– + 1, äm , ùy³ , Ën ); 1519  AVRCP_PLAY_ITEM : 1520 `avrý_¶ay_™em_dump ( Ëv– + 1, äm , ùy³ , Ën ); 1522  AVRCP_ADD_TO_NOW_PLAYING : 1523 `avrý_add_to_now_¶ayšg_dump ( Ëv– + 1, äm , ùy³ , Ën ); 1526 `¿w_dump ( Ëv– , äm ); 1528 } } 1530 * $Ý2¡r ( ušt8_t Ý ) 1532  Ý & 0x7f) { 1533  AVC_PANEL_VOLUME_UP : 1535  AVC_PANEL_VOLUME_DOWN : 1537  AVC_PANEL_MUTE : 1539  AVC_PANEL_PLAY : 1541  AVC_PANEL_STOP : 1543  AVC_PANEL_PAUSE : 1545  AVC_PANEL_RECORD : 1547  AVC_PANEL_REWIND : 1549  AVC_PANEL_FAST_FORWARD : 1551  AVC_PANEL_EJECT : 1553  AVC_PANEL_FORWARD : 1555  AVC_PANEL_BACKWARD : 1560 } } 1563  $avrý_·s¡hrough_dump ( Ëv– ,  äame * äm ) 1565 ušt8_t Ý , Ën ; 1567 `p_šd’t ( Ëv– , äm ); 1569 Ý = `g‘_u8 ( äm ); 1570 `´štf ("O³¿tiÚ: 0x%02x (% %s)\n", Ý , `Ý2¡r (op), 1571 Ý & 0x80 ? "Released" : "Pressed"); 1573 `p_šd’t ( Ëv– , äm ); 1575 Ën = `g‘_u8 ( äm ); 1577 `´štf ("L’ght: 0x%02x\n", Ën ); 1579 `¿w_dump ( Ëv– , äm ); 1580 } } 1582 cÚ¡ * $subun™2¡r ( ušt8_t subun™ ) 1584  subun™ ) { 1585  AVC_SUBUNIT_MONITOR : 1587  AVC_SUBUNIT_AUDIO : 1589  AVC_SUBUNIT_PRINTER : 1591  AVC_SUBUNIT_DISC : 1593  AVC_SUBUNIT_TAPE : 1595  AVC_SUBUNIT_TURNER : 1597  AVC_SUBUNIT_CA : 1599  AVC_SUBUNIT_CAMERA : 1601  AVC_SUBUNIT_PANEL : 1603  AVC_SUBUNIT_BULLETIN_BOARD : 1605  AVC_SUBUNIT_CAMERA_STORAGE : 1607  AVC_SUBUNIT_VENDOR_UNIQUE : 1609  AVC_SUBUNIT_EXTENDED : 1611  AVC_SUBUNIT_UNIT : 1616 } } 1618 cÚ¡ * $¶ay”ty³2¡r ( ušt8_t ty³ ) 1620  ty³ & 0x0F) { 1654 } } 1656 cÚ¡ * $¶ay”subty³2¡r ( ušt32_t subty³ ) 1658  subty³ & 0x03) { 1668 } } 1670  $avrý_medŸ_¶ay”_™em_dump ( Ëv– ,  äame * äm , 1671 ušt16_t Ën ) 1673 ušt16_t id , ch¬£t , Çm–’ ; 1674 ušt8_t ty³ , ¡©us ; 1675 ušt32_t subty³ ; 1676 ušt64_t ã©u»s [2]; 1678 `p_šd’t ( Ëv– , äm ); 1680 ià( Ën < 28) { 1681 `´štf ("PDU Malformed\n"); 1682 `¿w_dump ( Ëv– , äm ); 1686 id = `g‘_u16 ( äm ); 1687 `´štf ("PÏy”ID: 0x%04x (%u)\n", id , id); 1689 `p_šd’t ( Ëv– , äm ); 1691 ty³ = `g‘_u8 ( äm ); 1692 `´štf ("PÏy”Ty³: 0x%04x (%s)\n", ty³ , `¶ay”ty³2¡r (type)); 1694 `p_šd’t ( Ëv– , äm ); 1696 subty³ = `g‘_u32 ( äm ); 1697 `´štf ("PÏy”Subty³: 0x%08x (%s)\n", subty³ , 1698 `¶ay”subty³2¡r ( subty³ )); 1700 `p_šd’t ( Ëv– , äm ); 1702 ¡©us = `g‘_u8 ( äm ); 1703 `´štf ("PÏyStus: 0x%02x (%s)\n", ¡©us , `¶ay¡©us2¡r (status)); 1705 `p_šd’t ( Ëv– , äm ); 1707 `g‘_u128 ( äm , & ã©u»s [0], &features[1]); 1708 `´štf ("F—tu»s: 0x%16" PRIx64 "%16" PRIx64 "\n", ã©u»s [1], 1709 ã©u»s [0]); 1711 `p_šd’t ( Ëv– , äm ); 1713 ch¬£t = `g‘_u16 ( äm ); 1714 `´štf ("Ch¬£tID: 0x%04x (%s)\n", ch¬£t , `ch¬£t2¡r (charset)); 1716 `p_šd’t ( Ëv– , äm ); 1718 Çm–’ = `g‘_u16 ( äm ); 1719 `´štf ("NameL’gth: 0x%04x (%u)\n", Çm–’ ,‚amelen); 1721 `p_šd’t ( Ëv– , äm ); 1723 `´štf ("Name: "); 1724 ; Çm–’ > 0;‚amelen--) { 1725 ušt8_t c = `g‘_u8 ( äm ); 1726 `´štf ("%1c", `i¥ršt ( c ) ? c : '.'); 1728 `´štf ("\n"); 1729 } } 1731 cÚ¡ * $fÞd”ty³2¡r ( ušt8_t ty³ ) 1733  ty³ ) { 1751 } } 1753  $avrý_fÞd”_™em_dump ( Ëv– ,  äame * äm , ušt16_t Ën ) 1755 ušt8_t ty³ , ¶ayabË ; 1756 ušt16_t ch¬£t , Çm–’ ; 1757 ušt64_t uid ; 1759 `p_šd’t ( Ëv– , äm ); 1761 ià( Ën < 14) { 1762 `´štf ("PDU Malformed\n"); 1763 `¿w_dump ( Ëv– , äm ); 1767 uid = `g‘_u64 ( äm ); 1768 `´štf ("FÞd”UID: 0x%16" PRIx64 " (%" PRIu64 ")\n", uid , uid); 1770 `p_šd’t ( Ëv– , äm ); 1772 ty³ = `g‘_u8 ( äm ); 1773 `´štf ("FÞd”Ty³: 0x%02x (%s)\n", ty³ , `fÞd”ty³2¡r (type)); 1775 `p_šd’t ( Ëv– , äm ); 1777 ¶ayabË = `g‘_u8 ( äm ); 1778 `´štf ("IsPÏyabË: 0x%02x (%s)\n", ¶ayabË , 1779 ¶ayabË & 0x01 ? "True" : "False"); 1781 `p_šd’t ( Ëv– , äm ); 1783 ch¬£t = `g‘_u16 ( äm ); 1784 `´štf ("Ch¬£tID: 0x%04x (%s)\n", ch¬£t , `ch¬£t2¡r (charset)); 1786 `p_šd’t ( Ëv– , äm ); 1788 Çm–’ = `g‘_u16 ( äm ); 1789 `´štf ("NameL’gth: 0x%04x (%u)\n", Çm–’ ,‚amelen); 1791 `p_šd’t ( Ëv– , äm ); 1793 `´štf ("Name: "); 1794 ; Çm–’ > 0;‚amelen--) { 1795 ušt8_t c = `g‘_u8 ( äm ); 1796 `´štf ("%1c", `i¥ršt ( c ) ? c : '.'); 1798 `´štf ("\n"); 1799 } } 1801 cÚ¡ * $–em’‰y³2¡r ( ušt8_t ty³ ) 1803  ty³ ) { 1811 } } 1813  $avrý_©Œibu‹_’Œy_li¡_dump ( Ëv– ,  äame * äm , 1814 ušt8_t couÁ ) 1816 ; couÁ > 0; count--) { 1817 ušt32_t ©Œ ; 1818 ušt16_t ch¬£t ; 1819 ušt8_t Ën ; 1821 `p_šd’t ( Ëv– , äm ); 1823 ©Œ = `g‘_u32 ( äm ); 1824 `´štf ("A‰ribu‹ID: 0x%08x (%s)\n", ©Œ , `medŸ‰r2¡r (attr)); 1826 `p_šd’t ( Ëv– , äm ); 1828 ch¬£t = `g‘_u16 ( äm ); 1829 `´štf ("Ch¬£tID: 0x%04x (%s)\n", ch¬£t , 1830 `ch¬£t2¡r ( ch¬£t )); 1832 `p_šd’t ( Ëv– , äm ); 1834 Ën = `g‘_u16 ( äm ); 1835 `´štf ("A‰ribu‹L’gth: 0x%04x (%u)\n", Ën ,†en); 1837 `p_šd’t ( Ëv– , äm ); 1839 `´štf ("AttributeValue: "); 1840 ; Ën > 0;†en--) { 1841 ušt8_t c = `g‘_u8 ( äm ); 1842 `´štf ("%1c", `i¥ršt ( c ) ? c : '.'); 1844 `´štf ("\n"); 1846 } } 1848  $avrý_medŸ_–em’t_™em_dump ( Ëv– ,  äame * äm , 1849 ušt16_t Ën ) 1851 ušt64_t uid ; 1852 ušt16_t ch¬£t , Çm–’ ; 1853 ušt8_t ty³ , couÁ ; 1855 `p_šd’t ( Ëv– , äm ); 1857 ià( Ën < 14) { 1858 `´štf ("PDU Malformed\n"); 1859 `¿w_dump ( Ëv– , äm ); 1863 uid = `g‘_u64 ( äm ); 1864 `´štf ("EËm’tUID: 0x%16" PRIx64 " (%" PRIu64 ")\n", uid , uid); 1866 `p_šd’t ( Ëv– , äm ); 1868 ty³ = `g‘_u8 ( äm ); 1869 `´štf ("EËm’tTy³: 0x%02x (%s)\n", ty³ , `–em’‰y³2¡r (type)); 1871 `p_šd’t ( Ëv– , äm ); 1873 ch¬£t = `g‘_u16 ( äm ); 1874 `´štf ("Ch¬£tID: 0x%04x (%s)\n", ch¬£t , `ch¬£t2¡r (charset)); 1876 `p_šd’t ( Ëv– , äm ); 1878 Çm–’ = `g‘_u16 ( äm ); 1879 `´štf ("NameL’gth: 0x%04x (%u)\n", Çm–’ ,‚amelen); 1881 `p_šd’t ( Ëv– , äm ); 1883 `´štf ("Name: "); 1884 ; Çm–’ > 0;‚amelen--) { 1885 ušt8_t c = `g‘_u8 ( äm ); 1886 `´štf ("%1c", `i¥ršt ( c ) ? c : '.'); 1888 `´štf ("\n"); 1890 `p_šd’t ( Ëv– , äm ); 1892 couÁ = `g‘_u8 ( äm ); 1893 `´štf ("A‰ribu‹CouÁ: 0x%02x (%u)\n", couÁ , count); 1895 `avrý_©Œibu‹_’Œy_li¡_dump ( Ëv– , äm , couÁ ); 1896 } } 1898  $avrý_g‘_fÞd”_™ems_dump ( Ëv– ,  äame * äm , 1899 ušt8_t hdr , ušt16_t Ën ) 1901 ušt8_t scÝe , couÁ , ¡©us ; 1902 ušt32_t ¡¬t , ’d ; 1903 ušt16_t uid , num ; 1905 `p_šd’t ( Ëv– , äm ); 1907 ià( hdr & 0x02) 1908  »¥Ú£ ; 1910 ià( Ën < 10) { 1911 `´štf ("PDU Malformed\n"); 1912 `¿w_dump ( Ëv– , äm ); 1916 scÝe = `g‘_u8 ( äm ); 1917 `´štf ("ScÝe: 0x%02x (%s)\n", scÝe , `scÝe2¡r (scope)); 1919 `p_šd’t ( Ëv– , äm ); 1921 ¡¬t = `g‘_u32 ( äm ); 1922 `´štf ("S¹I‹m: 0x%08x (%u)\n", ¡¬t , start); 1924 `p_šd’t ( Ëv– , äm ); 1926 ’d = `g‘_u32 ( äm ); 1927 `´štf ("EndI‹m: 0x%08x (%u)\n", ’d ,ƒnd); 1929 `p_šd’t ( Ëv– , äm ); 1931 couÁ = `g‘_u8 ( äm ); 1932 `´štf ("A‰ribu‹CouÁ: 0x%02x (%u)\n", couÁ , count); 1934 ; couÁ > 0; count--) { 1935 ušt32_t ©Œ ; 1937 `p_šd’t ( Ëv– , äm ); 1939 ©Œ = `g‘_u32 ( äm ); 1940 `´štf ("A‰ribu‹ID: 0x%08x (%s)\n", ©Œ , `medŸ‰r2¡r (attr)); 1945 »¥Ú£ : 1946 ¡©us = `g‘_u8 ( äm ); 1947 `´štf ("Stus: 0x%02x (%s)\n", ¡©us , `”rÜ2¡r (status)); 1949 ià( Ën == 1) 1952 `p_šd’t ( Ëv– , äm ); 1954 uid = `g‘_u16 ( äm ); 1955 `´štf ("UIDCouÁ”: 0x%04x (%u)\n", uid , uid); 1957 `p_šd’t ( Ëv– , äm ); 1959 num = `g‘_u16 ( äm ); 1960 `´štf ("Numb” oàI‹ms: 0x%04x (%u)\n", num ,‚um); 1962 ; num > 0;‚um--) { 1963 ušt8_t ty³ ; 1964 ušt16_t Ën ; 1966 `p_šd’t ( Ëv– , äm ); 1968 ty³ = `g‘_u8 ( äm ); 1969 Ën = `g‘_u16 ( äm ); 1970  ty³ ) { 1972 `´štf ("Item: 0x01 (Media Player)) "); 1973 `´štf ("L’gth: 0x%04x (%u)\n", Ën ,†en); 1974 `avrý_medŸ_¶ay”_™em_dump ( Ëv– , äm , Ën ); 1977 `´štf ("Item: 0x02 (Folder) "); 1978 `´štf ("L’gth: 0x%04x (%u)\n", Ën ,†en); 1979 `avrý_fÞd”_™em_dump ( Ëv– , äm , Ën ); 1982 `´štf ("Item: 0x03 (Media Element) "); 1983 `´štf ("L’gth: 0x%04x (%u)\n", Ën ,†en); 1984 `avrý_medŸ_–em’t_™em_dump ( Ëv– , äm , Ën ); 1988 } } 1990 cÚ¡ * $dœ2¡r ( ušt8_t dœ ) 1992  dœ ) { 2000 } } 2002  $avrý_chªge_·th_dump ( Ëv– ,  äame * äm , ušt8_t hdr , 2003 ušt16_t Ën ) 2005 ušt64_t uid ; 2006 ušt32_t ™ems ; 2007 ušt16_t uidcouÁ” ; 2008 ušt8_t dœ , ¡©us ; 2010 `p_šd’t ( Ëv– , äm ); 2012 ià( hdr & 0x02) 2013  »¥Ú£ ; 2015 ià( Ën < 11) { 2016 `´štf ("PDU Malformed\n"); 2017 `¿w_dump ( Ëv– , äm ); 2021 uidcouÁ” = `g‘_u16 ( äm ); 2022 `´štf ("UIDCouÁ”: 0x%04x (%u)\n", uidcouÁ” , uidcounter); 2024 `p_šd’t ( Ëv– , äm ); 2026 dœ = `g‘_u8 ( äm ); 2027 `´štf ("DœeùiÚ: 0x%02x (%s)\n", dœ , `dœ2¡r (dir)); 2029 `p_šd’t ( Ëv– , äm ); 2031 uid = `g‘_u64 ( äm ); 2032 `´štf ("FÞd”UID: 0x%16" PRIx64 " (%" PRIu64 ")\n", uid , uid); 2036 »¥Ú£ : 2037 ¡©us = `g‘_u8 ( äm ); 2038 `´štf ("Stus: 0x%02x (%s)\n", ¡©us , `”rÜ2¡r (status)); 2040 ià( Ën == 1) 2043 `p_šd’t ( Ëv– , äm ); 2045 ™ems = `g‘_u32 ( äm ); 2046 `´štf ("Numb” oàI‹ms: 0x%04x (%u)", ™ems , items); 2047 } } 2049  $avrý_g‘_™em_©Œibu‹s_dump ( Ëv– ,  äame * äm , 2050 ušt8_t hdr , ušt16_t Ën ) 2052 ušt64_t uid ; 2053 ušt32_t uidcouÁ” ; 2054 ušt8_t scÝe , couÁ , ¡©us ; 2056 `p_šd’t ( Ëv– , äm ); 2058 ià( hdr & 0x02) 2059  »¥Ú£ ; 2061 ià( Ën < 12) { 2062 `´štf ("PDU Malformed\n"); 2063 `¿w_dump ( Ëv– , äm ); 2067 scÝe = `g‘_u8 ( äm ); 2068 `´štf ("ScÝe: 0x%02x (%s)\n", scÝe , `scÝe2¡r (scope)); 2070 `p_šd’t ( Ëv– , äm ); 2072 uid = `g‘_u64 ( äm ); 2073 `´štf ("UID: 0x%16" PRIx64 " (%" PRIu64 ")\n", uid , uid); 2075 `p_šd’t ( Ëv– , äm ); 2077 uidcouÁ” = `g‘_u16 ( äm ); 2078 `´štf ("UIDCouÁ”: 0x%04x (%u)\n", uidcouÁ” , uidcounter); 2080 `p_šd’t ( Ëv– , äm ); 2082 couÁ = `g‘_u8 ( äm ); 2083 `´štf ("A‰ribu‹CouÁ: 0x%02x (%u)\n", couÁ , count); 2085 ; couÁ > 0; count--) { 2086 ušt32_t ©Œ ; 2088 `p_šd’t ( Ëv– , äm ); 2090 ©Œ = `g‘_u32 ( äm ); 2091 `´štf ("A‰ribu‹ID: 0x%08x (%s)\n", ©Œ , `medŸ‰r2¡r (attr)); 2096 »¥Ú£ : 2097 ¡©us = `g‘_u8 ( äm ); 2098 `´štf ("Stus: 0x%02x (%s)\n", ¡©us , `”rÜ2¡r (status)); 2100 ià( Ën == 1) 2103 `p_šd’t ( Ëv– , äm ); 2105 couÁ = `g‘_u8 ( äm ); 2106 `´štf ("A‰ribu‹CouÁ: 0x%02x (%u)\n", couÁ , count); 2108 `avrý_©Œibu‹_’Œy_li¡_dump ( Ëv– , äm , couÁ ); 2109 } } 2111  $avrý_£¬ch_dump ( Ëv– ,  äame * äm , ušt8_t hdr , 2112 ušt16_t Ën ) 2114 ušt32_t uidcouÁ” , ™ems ; 2115 ušt16_t ch¬£t , Çm–’ ; 2116 ušt8_t ¡©us ; 2118 `p_šd’t ( Ëv– , äm ); 2120 ià( hdr & 0x02) 2121  »¥Ú£ ; 2123 ià( Ën < 4) { 2124 `´štf ("PDU Malformed\n"); 2125 `¿w_dump ( Ëv– , äm ); 2129 ch¬£t = `g‘_u16 ( äm ); 2130 `´štf ("Ch¬£tID: 0x%04x (%s)\n", ch¬£t , `ch¬£t2¡r (charset)); 2132 `p_šd’t ( Ëv– , äm ); 2134 Çm–’ = `g‘_u16 ( äm ); 2135 `´štf ("L’gth: 0x%04x (%u)\n", Çm–’ ,‚amelen); 2137 `p_šd’t ( Ëv– , äm ); 2139 `´štf ("String: "); 2140 ; Çm–’ > 0;‚amelen--) { 2141 ušt8_t c = `g‘_u8 ( äm ); 2142 `´štf ("%1c", `i¥ršt ( c ) ? c : '.'); 2144 `´štf ("\n"); 2148 »¥Ú£ : 2149 ¡©us = `g‘_u8 ( äm ); 2150 `´štf ("Stus: 0x%02x (%s)\n", ¡©us , `”rÜ2¡r (status)); 2152 ià( Ën == 1) 2155 `p_šd’t ( Ëv– , äm ); 2157 uidcouÁ” = `g‘_u16 ( äm ); 2158 `´štf ("UIDCouÁ”: 0x%04x (%u)\n", uidcouÁ” , uidcounter); 2160 `p_šd’t ( Ëv– , äm ); 2162 ™ems = `g‘_u32 ( äm ); 2163 `´štf ("Numb” oàI‹ms: 0x%04x (%u)", ™ems , items); 2164 } } 2166  $avrý_g’”®_»jeù_dump ( Ëv– ,  äame * äm , 2167 ušt8_t hdr , ušt16_t Ën ) 2169 ušt8_t ¡©us ; 2171 `p_šd’t ( Ëv– , äm ); 2173 ià( hdr & 0x02) 2174  »¥Ú£ ; 2176 `´štf ("PDU Malformed\n"); 2177 `¿w_dump ( Ëv– , äm ); 2180 »¥Ú£ : 2181 ¡©us = `g‘_u8 ( äm ); 2182 `´štf ("Stus: 0x%02x (%s)\n", ¡©us , `”rÜ2¡r (status)); 2183 } } 2185  $avrý_browsšg_dump ( Ëv– ,  äame * äm , ušt8_t hdr ) 2187 ušt8_t pduid ; 2188 ušt16_t Ën ; 2190 pduid = `g‘_u8 ( äm ); 2191 Ën = `g‘_u16 ( äm ); 2193 `´štf ("AVRCP: %s:†’ 0x%04x\n", `pdu2¡r ( pduid ), Ën ); 2195 ià( Ën !ð äm ->len) { 2196 `p_šd’t ( Ëv– , äm ); 2197 `´štf ("PDU Malformed\n"); 2198 `¿w_dump ( Ëv– , äm ); 2202  pduid ) { 2203  AVRCP_SET_BROWSED_PLAYER : 2204 `avrý_£t_brow£d_¶ay”_dump ( Ëv– + 1, äm , hdr , Ën ); 2206  AVRCP_GET_FOLDER_ITEMS : 2207 `avrý_g‘_fÞd”_™ems_dump ( Ëv– + 1, äm , hdr , Ën ); 2209  AVRCP_CHANGE_PATH : 2210 `avrý_chªge_·th_dump ( Ëv– + 1, äm , hdr , Ën ); 2212  AVRCP_GET_ITEM_ATTRIBUTES : 2213 `avrý_g‘_™em_©Œibu‹s_dump ( Ëv– + 1, äm , hdr , Ën ); 2215  AVRCP_SEARCH : 2216 `avrý_£¬ch_dump ( Ëv– + 1, äm , hdr , Ën ); 2218  AVRCP_GENERAL_REJECT : 2219 `avrý_g’”®_»jeù_dump ( Ëv– + 1, äm , hdr , Ën ); 2222 `¿w_dump ( Ëv– , äm ); 2224 } } 2226  $avrý_cÚŒÞ_dump ( Ëv– ,  äame * äm ) 2228 ušt8_t ùy³ , add»ss , subun™ , Ýcode , com·ny [3]; 2229  i ; 2231 ùy³ = `g‘_u8 ( äm ); 2232 add»ss = `g‘_u8 ( äm ); 2233 Ýcode = `g‘_u8 ( äm ); 2235 `´štf ("AV/C: %s:‡dd»s 0x%02x opcod0x%02x\n", `ùy³2¡r ( ùy³ ), 2236 add»ss , Ýcode ); 2238 `p_šd’t ( Ëv– + 1, äm ); 2240 subun™ = add»ss >> 3; 2241 `´štf ("Subun™: %s\n", `subun™2¡r ( subun™ )); 2243 `p_šd’t ( Ëv– + 1, äm ); 2245 `´štf ("Opcode: %s\n", `Ýcode2¡r ( Ýcode )); 2248 ià( subun™ !ð AVC_SUBUNIT_PANEL ) { 2249 `¿w_dump ( Ëv– , äm ); 2254 ià( ùy³ =ð AVC_CTYPE_NOT_IMPLEMENTED ) { 2255 `¿w_dump ( Ëv– , äm ); 2259  Ýcode ) { 2260  AVC_OP_PASSTHROUGH : 2261 `avrý_·s¡hrough_dump ( Ëv– + 1, äm ); 2263  AVC_OP_VENDORDEP : 2264 `p_šd’t ( Ëv– + 1, äm ); 2266 `´štf ("Company ID: 0x"); 2267  i = 0; i < 3; i++) { 2268 com·ny [ i ] = `g‘_u8 ( äm ); 2269 `´štf ("%02x", com·ny [ i ]); 2271 `´štf ("\n"); 2273 `avrý_pdu_dump ( Ëv– + 1, äm , ùy³ ); 2276 `¿w_dump ( Ëv– , äm ); 2278 } } 2280  $avrý_dump ( Ëv– ,  äame * äm , ušt8_t hdr , ušt16_t psm ) 2282 `p_šd’t ( Ëv– , äm ); 2284  psm ) { 2286 `avrý_cÚŒÞ_dump ( Ëv– , äm ); 2289 `avrý_browsšg_dump ( Ëv– , äm , hdr ); 2292 `¿w_dump ( Ëv– , äm ); 2294 } } @tools/parser/bnep.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 35  ~<Ãt/‘h”Ãt.h > 37  ~"·r£r.h " 40  #BNEP_GENERAL_ETHERNET 0x00 ) 41  #BNEP_CONTROL 0x01 ) 42  #BNEP_COMPRESSED_ETHERNET 0x02 ) 43  #BNEP_COMPRESSED_ETHERNET_SOURCE_ONLY 0x03 ) 44  #BNEP_COMPRESSED_ETHERNET_DEST_ONLY 0x04 ) 47  #BNEP_CONTROL_COMMAND_NOT_UNDERSTOOD 0x00 ) 48  #BNEP_SETUP_CONNECTION_REQUEST_MSG 0x01 ) 49  #BNEP_SETUP_CONNECTION_RESPONSE_MSG 0x02 ) 50  #BNEP_FILTER_NET_TYPE_SET_MSG 0x03 ) 51  #BNEP_FILTER_NET_TYPE_RESPONSE_MSG 0x04 ) 52  #BNEP_FILTER_MULT_ADDR_SET_MSG 0x05 ) 53  #BNEP_FILTER_MULT_ADDR_RESPONSE_MSG 0x06 ) 56  #BNEP_EXTENSION_CONTROL 0x00 ) 58 #iâdeà ETHERTYPE_IPV6 59  #ETHERTYPE_IPV6 ETH_P_IPV6 ) 62 * $g‘_maÿddr ( äame * äm ) 64  ¡r [20]; 65 * buf = äm -> ±r ; 67 `¥rštf ( ¡r , "%02x:%02x:%02x:%02x:%02x:%02x", 68 buf [0], buf[1], buf[2], buf[3], buf[4], buf[5]); 70 äm -> ±r += 6; 71 äm -> Ën -= 6; 73  ¡r ; 74 } } 76  $bÃp_cÚŒÞ ( Ëv– ,  äame * äm ,  h—d”_Ëngth ) 78 ušt8_t uuid_size ; 79  i , Ëngth ; 80 * s ; 81 ušt32_t uuid = 0; 82 ušt8_t ty³ = `g‘_u8 ( äm ); 84 `p_šd’t (++ Ëv– , äm ); 85  ty³ ) { 86  BNEP_CONTROL_COMMAND_NOT_UNDERSTOOD : 87 `´štf ("NÙ Und”¡ood(0x%02xèty³ 0x%02x\n", ty³ , `g‘_u8 ( äm )); 90  BNEP_SETUP_CONNECTION_REQUEST_MSG : 91 uuid_size = `g‘_u8 ( äm ); 92 `´štf ("S‘u°Req(0x%02xèsiz0x%02x ", ty³ , uuid_size ); 93  uuid_size ) { 95 uuid = `g‘_u16 ( äm ); 96 `´štf ("d¡ 0x%x", uuid ); 97 ià(( s = `g‘_uuid_Çme ( uuid )) != 0) 98 `´štf ("(%s)", s ); 99 uuid = `g‘_u16 ( äm ); 100 `´štf (" srø0x%x", uuid ); 101 ià(( s = `g‘_uuid_Çme ( uuid )) != 0) 102 `´štf ("(%s)", s ); 103 `´štf ("\n"); 106 uuid = `g‘_u32 ( äm ); 107 `´štf ("d¡ 0x%x", uuid ); 108 ià(( s = `g‘_uuid_Çme ( uuid )) != 0) 109 `´štf ("(%s)", s ); 110 uuid = `g‘_u32 ( äm ); 111 `´štf (" srø0x%x", uuid ); 112 ià(( s = `g‘_uuid_Çme ( uuid )) != 0) 113 `´štf ("(%s)", s ); 114 `´štf ("\n"); 117 uuid = `g‘_u32 ( äm ); 118 `´štf ("d¡ 0x%x", uuid ); 119 ià(( s = `g‘_uuid_Çme ( uuid )) != 0) 120 `´štf ("(%s)", s ); 121 äm -> ±r += 12; 122 äm -> Ën -= 12; 123 uuid = `g‘_u32 ( äm ); 124 `´štf (" srø0x%x", uuid ); 125 ià(( s = `g‘_uuid_Çme ( uuid )) != 0) 126 `´štf ("(%s)", s ); 127 `´štf ("\n"); 128 äm -> ±r += 12; 129 äm -> Ën -= 12; 132 äm -> ±r +ð( uuid_size * 2); 133 äm -> Ën -ð( uuid_size * 2); 138  BNEP_SETUP_CONNECTION_RESPONSE_MSG : 139 `´štf ("Setup Rsp(0x%02x)„es 0x%04x\n", 140 ty³ , `g‘_u16 ( äm )); 143  BNEP_FILTER_NET_TYPE_SET_MSG : 144 Ëngth = `g‘_u16 ( äm ); 145 `´štf ("Filter NetType Set(0x%02x)†en 0x%04x\n", 146 ty³ , Ëngth ); 147  i = 0; i < Ëngth / 4; i++) { 148 `p_šd’t ( Ëv– + 1, äm ); 149 `´štf ("0x%04x - ", `g‘_u16 ( äm )); 150 `´štf ("0x%04x\n", `g‘_u16 ( äm )); 154  BNEP_FILTER_NET_TYPE_RESPONSE_MSG : 155 `´štf ("Filter NetType Rsp(0x%02x)„es 0x%04x\n", 156 ty³ , `g‘_u16 ( äm )); 159  BNEP_FILTER_MULT_ADDR_SET_MSG : 160 Ëngth = `g‘_u16 ( äm ); 161 `´štf ("Filter MultAddr Set(0x%02x)†en 0x%04x\n", 162 ty³ , Ëngth ); 163  i = 0; i < Ëngth / 12; i++) { 164 `p_šd’t ( Ëv– + 1, äm ); 165 `´štf ("% - ", `g‘_maÿddr ( äm )); 166 `´štf ("%s\n", `g‘_maÿddr ( äm )); 170  BNEP_FILTER_MULT_ADDR_RESPONSE_MSG : 171 `´štf ("Filter MultAddr Rsp(0x%02x)„es 0x%04x\n", 172 ty³ , `g‘_u16 ( äm )); 176 `´štf ("UnknowÀcÚŒÞy³(0x%02x)\n", ty³ ); 177 `¿w_ndump ( Ëv– + 1, äm , h—d”_Ëngth - 1); 178 äm -> ±r +ð h—d”_Ëngth - 1; 179 äm -> Ën -ð h—d”_Ëngth - 1; 182 } } 184  $bÃp_ev®_ex‹nsiÚ ( Ëv– ,  äame * äm ) 186 ušt8_t ty³ = `g‘_u8 ( äm ); 187 ušt8_t Ëngth = `g‘_u8 ( äm ); 188  ex‹nsiÚ = ty³ & 0x80; 190 `p_šd’t ( Ëv– , äm ); 192  ty³ & 0x7f) { 193  BNEP_EXTENSION_CONTROL : 194 `´štf ("Ext Control(0x%02x|%s)†en 0x%02x\n", 195 ty³ & 0x7f, ex‹nsiÚ ? "1" : "0", Ëngth ); 196 `bÃp_cÚŒÞ ( Ëv– , äm , Ëngth ); 200 `´štf ("Ext Unknown(0x%02x|%s)†en 0x%02x\n", 201 ty³ & 0x7f, ex‹nsiÚ ? "1" : "0", Ëngth ); 202 `¿w_ndump ( Ëv– + 1, äm , Ëngth ); 203 äm -> ±r +ð Ëngth ; 204 äm -> Ën -ð Ëngth ; 207 ià( ex‹nsiÚ ) 208 `bÃp_ev®_ex‹nsiÚ ( Ëv– , äm ); 209 } } 211  $bÃp_dump ( Ëv– ,  äame * äm ) 213 ušt8_t ty³ = `g‘_u8 ( äm ); 214 ušt16_t ´Ùo = 0x0000; 215  ex‹nsiÚ = ty³ & 0x80; 217 `p_šd’t ( Ëv– , äm ); 219  ty³ & 0x7f) { 220  BNEP_CONTROL : 221 `´štf ("BNEP: Control(0x%02x|%s)\n", 222 ty³ & 0x7f, ex‹nsiÚ ? "1" : "0"); 223 `bÃp_cÚŒÞ ( Ëv– , äm , -1); 226  BNEP_COMPRESSED_ETHERNET : 227 `´štf ("BNEP: Compressed(0x%02x|%s)\n", 228 ty³ & 0x7f, ex‹nsiÚ ? "1" : "0"); 229 `p_šd’t (++ Ëv– , äm ); 230 ´Ùo = `g‘_u16 ( äm ); 231 `´štf ("[´ÙØ0x%04x]\n", ´Ùo ); 234  BNEP_GENERAL_ETHERNET : 235 `´štf ("BNEP: Generalƒthernet(0x%02x|%s)\n", 236 ty³ & 0x7f, ex‹nsiÚ ? "1" : "0"); 237 `p_šd’t (++ Ëv– , äm ); 238 `´štf ("d¡ % ", `g‘_maÿddr ( äm )); 239 `´štf ("¤ø% ", `g‘_maÿddr ( äm )); 240 ´Ùo = `g‘_u16 ( äm ); 241 `´štf ("[´ÙØ0x%04x]\n", ´Ùo ); 244  BNEP_COMPRESSED_ETHERNET_DEST_ONLY : 245 `´štf ("BNEP: Compressed DestOnly(0x%02x|%s)\n", 246 ty³ & 0x7f, ex‹nsiÚ ? "1" : "0"); 247 `p_šd’t (++ Ëv– , äm ); 248 `´štf ("d¡ % ", `g‘_maÿddr ( äm )); 249 ´Ùo = `g‘_u16 ( äm ); 250 `´štf ("[´ÙØ0x%04x]\n", ´Ùo ); 253  BNEP_COMPRESSED_ETHERNET_SOURCE_ONLY : 254 `´štf ("BNEP: Compressed SrcOnly(0x%02x|%s)\n", 255 ty³ & 0x7f, ex‹nsiÚ ? "1" : "0"); 256 `p_šd’t (++ Ëv– , äm ); 257 `´štf ("¤ø% ", `g‘_maÿddr ( äm )); 258 ´Ùo = `g‘_u16 ( äm ); 259 `´štf ("[´ÙØ0x%04x]\n", ´Ùo ); 263 `´štf ("(Unknown…acketype)\n"); 268 ià( ex‹nsiÚ ) 269 `bÃp_ev®_ex‹nsiÚ (++ Ëv– , äm ); 272 ià(( ty³ & 0x7fè=ð BNEP_CONTROL ) 276 ià( ´Ùo == 0x8100) { 277 `p_šd’t ( Ëv– , äm ); 278 `´štf ("802.1°H—d”: 0x%04x ", `g‘_u16 ( äm )); 279 ´Ùo = `g‘_u16 ( äm ); 280 `´štf ("[´ÙØ0x%04x]\n", ´Ùo ); 283 ià(!( ·r£r . æags & DUMP_VERBOSE )) { 284 `¿w_dump ( Ëv– , äm ); 288  ´Ùo ) { 289  ETHERTYPE_ARP : 290 `p_šd’t (++ Ëv– , äm ); 291 `´štf ("ARP: "); 292 `¬p_dump ( Ëv– , äm ); 295  ETHERTYPE_REVARP : 296 `p_šd’t (++ Ëv– , äm ); 297 `´štf ("RARP: "); 298 `¬p_dump ( Ëv– , äm ); 301  ETHERTYPE_IP : 302 `p_šd’t (++ Ëv– , äm ); 303 `´štf ("IP: "); 304 `_dump ( Ëv– , äm ); 307  ETHERTYPE_IPV6 : 308 `p_šd’t (++ Ëv– , äm ); 309 `´štf ("IPV6: "); 310 `_dump ( Ëv– , äm ); 314 `¿w_dump ( Ëv– , äm ); 317 } } @tools/parser/bpa.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~"·r£r.h " 36  #BPA_U8 ( äm è( `g‘_u8 (äm)) ) 37  #BPA_U16 ( äm è( `btohs ( `htÚs ( `g‘_u16 (äm)))) ) 38  #BPA_U32 ( äm è( `btohl ( `htÚl ( `g‘_u32 (äm)))) ) 40  $b·_dump ( Ëv– ,  äame * äm ) 42 ušt8_t id , ¡©us , chªÃl ; 43 ušt16_t num , Ën ; 44 ušt32_t time ; 46 id = `g‘_u8 ( äm ); 47 num = `g‘_u16 ( äm ); 48 Ën = `BPA_U16 ( äm ); 50 ¡©us = `g‘_u8 ( äm ); 51 time = `g‘_u32 ( äm ); 52 chªÃl = `g‘_u8 ( äm ); 54 `p_šd’t ( Ëv– , äm ); 55 `´štf ("BPA: id %d‚um %d†en %u status 0x%02xime %d channel %d\n", 56 id , num , Ën , ¡©us , time , chªÃl ); 58 `¿w_dump ( Ëv– , äm ); 59 } } @tools/parser/capi.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<ùy³.h > 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 35  ~"·r£r.h " 37  #CAPI_U8 ( äm è( `g‘_u8 (äm)) ) 38  #CAPI_U16 ( äm è( `btohs ( `htÚs ( `g‘_u16 (äm)))) ) 39  #CAPI_U32 ( äm è( `btohl ( `htÚl ( `g‘_u32 (äm)))) ) 41 * $cmd2¡r ( ušt8_t cmd ) 43  cmd ) { 79 } } 81 * $subcmd2¡r ( ušt8_t subcmd ) 83  subcmd ) { 95 } } 97 * $š‹rÝ£l2¡r ( ušt16_t £l ) 99  £l ) { 107 } } 109 * $func2¡r ( ušt16_t func ) 111  func ) { 131 } } 133 * $çcž™y£l2¡r ( ušt16_t £l ) 135  £l ) { 153 } } 155 * $šfo2¡r ( ušt16_t šfo ) 157  šfo ) { 225 } } 227  $´ofže ( Ëv– ,  äame * äm ) 229 ušt16_t nùr , nchn ; 230 ušt32_t v®ue ; 232 nùr = `CAPI_U16 ( äm ); 233 nchn = `CAPI_U16 ( äm ); 235 ià( nchn > 0) { 236 `p_šd’t ( Ëv– , äm ); 237 `´štf ("CÚŒÞËr: %d\n", nùr ); 238 `p_šd’t ( Ëv– , äm ); 239 `´štf ("Numb” oàB-chªÃls: %d\n", nchn ); 241 v®ue = `CAPI_U32 ( äm ); 242 `p_šd’t ( Ëv– , äm ); 243 `´štf ("Glob® o±iÚs: 0x%04x\n", v®ue ); 244 v®ue = `CAPI_U32 ( äm ); 245 `p_šd’t ( Ëv– , äm ); 246 `´štf ("B1…rÙocÞ suµÜt: 0x%08x\n", v®ue ); 247 v®ue = `CAPI_U32 ( äm ); 248 `p_šd’t ( Ëv– , äm ); 249 `´štf ("B2…rÙocÞ suµÜt: 0x%08x\n", v®ue ); 250 v®ue = `CAPI_U32 ( äm ); 251 `p_šd’t ( Ëv– , äm ); 252 `´štf ("B3…rÙocÞ suµÜt: 0x%08x\n", v®ue ); 254 äm -> ±r += 24; 255 äm -> Ën -= 24; 257 `p_šd’t ( Ëv– , äm ); 258 `´štf ("Manufacturer-specific information:\n"); 259 `hex_dump ( Ëv– , äm , 20); 261 `p_šd’t ( Ëv– , äm ); 262 `´štf ("Numb” oàcÚŒÞËrs: %d\n", nùr ); 264 } } 266  $cmd_commÚ ( Ëv– , ušt8_t subcmd ,  äame * äm ) 268 ušt32_t v® ; 269 ušt16_t šfo , ncci ; 270 ušt8_t ùr , ¶ci ; 272 v® = `CAPI_U32 ( äm ); 273 ùr = v® & 0xff; 274 ¶ci = ( v® & 0xff00) >> 8; 275 ncci = ( v® & 0xffff0000) >> 16; 277 `p_šd’t ( Ëv– , äm ); 278 `´štf ("CÚŒÞËr: %d %s\n", ùr & 0x7f, ctr & 0x80 ? "Ext." : "Int."); 280 ià( ¶ci > 0) { 281 `p_šd’t ( Ëv– , äm ); 282 `´štf ("PLCI: 0x%02x\n", ¶ci ); 285 ià( ncci > 0) { 286 `p_šd’t ( Ëv– , äm ); 287 `´štf ("NCCI: 0x%04x\n", ncci ); 290 ià( subcmd == 0x81) { 291 šfo = `CAPI_U16 ( äm ); 292 `p_šd’t ( Ëv– , äm ); 293 `´štf ("Info: 0x%04x (%s)\n", šfo , `šfo2¡r (info)); 295 } } 297  $cmd_®”t ( Ëv– , ušt8_t subcmd ,  äame * äm ) 299 ušt8_t Ën ; 301 `cmd_commÚ ( Ëv– , subcmd , äm ); 303 ià( subcmd == 0x80) { 304 Ën = `CAPI_U8 ( äm ); 305 ià( Ën > 0) { 306 `p_šd’t ( Ëv– , äm ); 307 `´štf ("Additional info:\n"); 308 `hex_dump ( Ëv– , äm , Ën ); 311 } } 313  $cmd_cÚÃù ( Ëv– , ušt8_t subcmd ,  äame * äm ) 315 ušt16_t c ; 316 ušt8_t Ën ; 318 `cmd_commÚ ( Ëv– , subcmd , äm ); 320 ià( subcmd == 0x81) 323 c = `CAPI_U16 ( äm ); 324 `p_šd’t ( Ëv– , äm ); 325 `´štf ("CIP v®ue: 0x%04x\n", c ); 327 Ën = `CAPI_U8 ( äm ); 328 äm -> ±r +ð Ën ; 329 äm -> Ën -=†en; 330 Ën = `CAPI_U8 ( äm ); 331 äm -> ±r +ð Ën ; 332 äm -> Ën -=†en; 333 Ën = `CAPI_U8 ( äm ); 334 äm -> ±r +ð Ën ; 335 äm -> Ën -=†en; 336 Ën = `CAPI_U8 ( äm ); 337 äm -> ±r +ð Ën ; 338 äm -> Ën -=†en; 340 `¿w_dump ( Ëv– , äm ); 341 } } 343  $cmd_discÚÃù ( Ëv– , ušt8_t subcmd ,  äame * äm ) 345 ušt16_t »asÚ ; 346 ušt8_t Ën ; 348 `cmd_commÚ ( Ëv– , subcmd , äm ); 350 ià( subcmd == 0x80) { 351 Ën = `CAPI_U8 ( äm ); 352 ià( Ën > 0) { 353 `p_šd’t ( Ëv– , äm ); 354 `´štf ("Additional info:\n"); 355 `hex_dump ( Ëv– , äm , Ën ); 359 ià( subcmd == 0x82) { 360 »asÚ = `CAPI_U16 ( äm ); 361 `p_šd’t ( Ëv– , äm ); 362 `´štf ("R—sÚ: 0x%04x (%s)\n", »asÚ , `šfo2¡r (reason)); 364 } } 366  $cmd_cÚÃù_aùive ( Ëv– , ušt8_t subcmd ,  äame * äm ) 368 ušt8_t Ën ; 370 `cmd_commÚ ( Ëv– , subcmd , äm ); 372 ià( subcmd == 0x82) { 373 Ën = `CAPI_U8 ( äm ); 374 ià( Ën > 0) { 375 `p_šd’t ( Ëv– , äm ); 376 `´štf ("Connected‚umber:\n"); 377 `hex_dump ( Ëv– , äm , Ën ); 380 Ën = `CAPI_U8 ( äm ); 381 ià( Ën > 0) { 382 `p_šd’t ( Ëv– , äm ); 383 `´štf ("Connected subaddress:\n"); 384 `hex_dump ( Ëv– , äm , Ën ); 387 Ën = `CAPI_U8 ( äm ); 388 ià( Ën > 0) { 389 `p_šd’t ( Ëv– , äm ); 390 `´štf ("LLC:\n"); 391 `hex_dump ( Ëv– , äm , Ën ); 394 } } 396  $cmd_li¡’ ( Ëv– , ušt8_t subcmd ,  äame * äm ) 398 ušt32_t mask ; 399 ušt8_t Ën ; 401 `cmd_commÚ ( Ëv– , subcmd , äm ); 403 ià( subcmd == 0x80) { 404 mask = `CAPI_U32 ( äm ); 405 `p_šd’t ( Ëv– , äm ); 406 `´štf ("InfØmask: 0x%08x\n", mask ); 408 mask = `CAPI_U32 ( äm ); 409 `p_šd’t ( Ëv– , äm ); 410 `´štf ("CIP mask: 0x%08x", mask ); 412 mask = `CAPI_U32 ( äm ); 413 ià( mask > 0) 414 `´štf (" 0x%08x\n", mask ); 416 `´štf ("\n"); 418 Ën = `CAPI_U8 ( äm ); 419 ià( Ën > 0) { 420 `p_šd’t ( Ëv– , äm ); 421 `´štf ("Calling…arty‚umber:\n"); 422 `hex_dump ( Ëv– , äm , Ën ); 424 äm -> ±r +ð Ën ; 425 äm -> Ën -=†en; 427 Ën = `CAPI_U8 ( äm ); 428 ià( Ën > 0) { 429 `p_šd’t ( Ëv– , äm ); 430 `´štf ("Calling…arty subaddress:\n"); 431 `hex_dump ( Ëv– , äm , Ën ); 433 äm -> ±r +ð Ën ; 434 äm -> Ën -=†en; 436 } } 438  $cmd_šfo ( Ëv– , ušt8_t subcmd ,  äame * äm ) 440 ušt8_t Ën ; 441 ušt16_t šfo ; 443 `cmd_commÚ ( Ëv– , subcmd , äm ); 445  subcmd ) { 447 Ën = `CAPI_U8 ( äm ); 448 ià( Ën > 0) { 449 `p_šd’t ( Ëv– , äm ); 450 `´štf ("Called…arty‚umber:\n"); 451 `hex_dump ( Ëv– , äm , Ën ); 453 äm -> ±r +ð Ën ; 454 äm -> Ën -=†en; 456 Ën = `CAPI_U8 ( äm ); 457 ià( Ën > 0) { 458 `p_šd’t ( Ëv– , äm ); 459 `´štf ("Additional info:\n"); 460 `hex_dump ( Ëv– , äm , Ën ); 465 šfo = `CAPI_U16 ( äm ); 466 `p_šd’t ( Ëv– , äm ); 467 `´štf ("InfØnumb”: %d\n", šfo ); 469 Ën = `CAPI_U8 ( äm ); 470 ià( Ën > 0) { 471 `p_šd’t ( Ëv– , äm ); 472 `´štf ("Infoƒlement:\n"); 473 `hex_dump ( Ëv– , äm , Ën ); 477 } } 479  $cmd_š‹rÝ”abž™y ( Ëv– , ušt8_t subcmd ,  äame * äm ) 481 ušt16_t £l , func , šfo ; 482 ušt16_t ncÚn , d©ablkút , d©ablkËn ; 483 ušt32_t ùr , v®ue , majÜ , mšÜ ; 485 šfo = ( subcmd =ð0x81è? `CAPI_U16 ( äm ) : 0; 486 £l = `CAPI_U16 ( äm ); 487 `CAPI_U8 ( äm ); 488 ià( subcmd != 0x83) { 489 func = `CAPI_U16 ( äm ); 490 `CAPI_U8 ( äm ); 492 func = 0; 494 `p_šd’t ( Ëv– , äm ); 495 `´štf ("S–eùÜ: 0x%04x (%s)\n", £l , `š‹rÝ£l2¡r (sel)); 497  £l ) { 499 `p_šd’t ( Ëv– , äm ); 500 `´štf ("FunùiÚ: %d (%s)\n", func , `func2¡r (func)); 502  subcmd ) { 504  func ) { 506 ncÚn = `CAPI_U16 ( äm ); 507 `p_šd’t ( Ëv– + 1, äm ); 508 `´štf ("maxLogiÿlCÚÃùiÚs: %d\n", ncÚn ); 509 d©ablkút = `CAPI_U16 ( äm ); 510 `p_šd’t ( Ëv– + 1, äm ); 511 `´štf ("maxBD©aBlocks: %d\n", d©ablkút ); 512 d©ablkËn = `CAPI_U16 ( äm ); 513 `p_šd’t ( Ëv– + 1, äm ); 514 `´štf ("maxBD©aL’: %d\n", d©ablkËn ); 520 ùr = `CAPI_U32 ( äm ); 521 `p_šd’t ( Ëv– + 1, äm ); 522 `´štf ("CÚŒÞËr: %d\n", ùr ); 525 `¿w_dump ( Ëv– + 1, äm ); 531  func ) { 534 šfo = `CAPI_U16 ( äm ); 535 `p_šd’t ( Ëv– + 1, äm ); 536 `´štf ("Info: 0x%04x (%s)\n", šfo , `šfo2¡r (info)); 539 šfo = `CAPI_U16 ( äm ); 540 `p_šd’t ( Ëv– + 1, äm ); 541 `´štf ("Info: 0x%04x (%s)\n", šfo , `šfo2¡r (info)); 542 `CAPI_U8 ( äm ); 543 `´ofže ( Ëv– + 1, äm ); 546 šfo = `CAPI_U16 ( äm ); 547 `p_šd’t ( Ëv– + 1, äm ); 548 `´štf ("Info: 0x%04x (%s)\n", šfo , `šfo2¡r (info)); 549 ùr = `CAPI_U32 ( äm ); 550 `p_šd’t ( Ëv– + 1, äm ); 551 `´štf ("CÚŒÞËr: %d\n", ùr ); 552 `CAPI_U8 ( äm ); 553 `p_šd’t ( Ëv– + 1, äm ); 554 `´štf ("Id’tifiÿtiÚ: \"%s\"\n", (*è äm -> ±r ); 557 v®ue = `CAPI_U32 ( äm ); 558 `p_šd’t ( Ëv– + 1, äm ); 559 `´štf ("R‘uº v®ue: 0x%04x\n", v®ue ); 560 ùr = `CAPI_U32 ( äm ); 561 `p_šd’t ( Ëv– + 1, äm ); 562 `´štf ("CÚŒÞËr: %d\n", ùr ); 563 `p_šd’t ( Ëv– + 1, äm ); 564 majÜ = `CAPI_U32 ( äm ); 565 mšÜ = `CAPI_U32 ( äm ); 566 `´štf ("CAPI: %d.%d\n", majÜ , mšÜ ); 567 majÜ = `CAPI_U32 ( äm ); 568 mšÜ = `CAPI_U32 ( äm ); 569 `p_šd’t ( Ëv– + 1, äm ); 570 `´štf ("Manufacture: %u.%01x%01x-%02u (%d.%d)\n", 571 ( majÜ & 0xf0) >> 4, (major & 0x0f) << 4, 572 ( mšÜ & 0xf0) >> 4, minor & 0x0f, 573 majÜ , mšÜ ); 576 v®ue = `CAPI_U32 ( äm ); 577 `p_šd’t ( Ëv– + 1, äm ); 578 `´štf ("R‘uº v®ue: 0x%04x\n", v®ue ); 579 ùr = `CAPI_U32 ( äm ); 580 `p_šd’t ( Ëv– + 1, äm ); 581 `´štf ("CÚŒÞËr: %d\n", ùr ); 582 `CAPI_U8 ( äm ); 583 `p_šd’t ( Ëv– + 1, äm ); 584 `´štf ("S”ŸÈnumb”: %.7s\n", (*è äm -> ±r ); 587 `¿w_dump ( Ëv– + 1, äm ); 593 `¿w_dump ( Ëv– , äm ); 599 `p_šd’t ( Ëv– , äm ); 600 `´štf ("FunùiÚ: %d\n", func ); 601 ià( subcmd == 0x81) { 602 `p_šd’t ( Ëv– , äm ); 603 `´štf ("Info: 0x%04x (%s)\n", šfo , `šfo2¡r (info)); 605 `¿w_dump ( Ëv– + 1, äm ); 608 } } 610  $cmd_çcž™y ( Ëv– , ušt8_t subcmd ,  äame * äm ) 612 ušt16_t £l ; 614 `cmd_commÚ ( Ëv– , subcmd , äm ); 616 £l = `CAPI_U16 ( äm ); 617 `CAPI_U8 ( äm ); 619 `p_šd’t ( Ëv– , äm ); 620 `´štf ("S–eùÜ: 0x%04x (%s)\n", £l , `çcž™y£l2¡r (sel)); 622 `¿w_dump ( Ëv– , äm ); 623 } } 625  $cmd_cÚÃù_b3 ( Ëv– , ušt8_t subcmd ,  äame * äm ) 627 ušt16_t »jeù ; 628 ušt8_t Ën ; 630 `cmd_commÚ ( Ëv– , subcmd , äm ); 632 ià( subcmd == 0x81) 635 ià( subcmd == 0x83) { 636 »jeù = `CAPI_U16 ( äm ); 637 `p_šd’t ( Ëv– , äm ); 638 `´štf ("Rejeù: 0x%04x (%s)\n", »jeù , `šfo2¡r (reject)); 641 Ën = `CAPI_U8 ( äm ); 642 ià( Ën > 0) { 643 `p_šd’t ( Ëv– , äm ); 644 `´štf ("NCPI:\n"); 645 `hex_dump ( Ëv– , äm , Ën ); 647 } } 649  $cmd_cÚÃù_b3_aùive ( Ëv– , ušt8_t subcmd ,  äame * äm ) 651 ušt8_t Ën ; 653 `cmd_commÚ ( Ëv– , subcmd , äm ); 655 ià( subcmd == 0x82) { 656 Ën = `CAPI_U8 ( äm ); 657 ià( Ën > 0) { 658 `p_šd’t ( Ëv– , äm ); 659 `´štf ("NCPI:\n"); 660 `hex_dump ( Ëv– , äm , Ën ); 663 } } 665  $cmd_discÚÃù_b3 ( Ëv– , ušt8_t subcmd ,  äame * äm ) 667 ušt16_t »asÚ ; 668 ušt8_t Ën ; 670 `cmd_commÚ ( Ëv– , subcmd , äm ); 672 ià( subcmd == 0x82) { 673 »asÚ = `CAPI_U16 ( äm ); 674 `p_šd’t ( Ëv– , äm ); 675 `´štf ("R—sÚ: 0x%04x (%s)\n", »asÚ , `šfo2¡r (reason)); 678 ià( subcmd == 0x80 || subcmd == 0x82) { 679 Ën = `CAPI_U8 ( äm ); 680 ià( Ën > 0) { 681 `p_šd’t ( Ëv– , äm ); 682 `´štf ("NCPI:\n"); 683 `hex_dump ( Ëv– , äm , Ën ); 686 } } 688  $cmd_d©a_b3 ( Ëv– , ušt8_t subcmd ,  äame * äm ) 690 ušt32_t d©a ; 691 ušt16_t Ëngth , hªdË , æags , šfo ; 693 `cmd_commÚ ( Ëv– , 0x00, äm ); 695 ià( subcmd == 0x81 || subcmd == 0x83) { 696 hªdË = `CAPI_U16 ( äm ); 697 `p_šd’t ( Ëv– , äm ); 698 `´štf ("D©¨hªdË: 0x%04x\n", hªdË ); 700 ià( subcmd == 0x81) { 701 šfo = `CAPI_U16 ( äm ); 702 `p_šd’t ( Ëv– , äm ); 703 `´štf ("Info: 0x%04x (%s)\n", šfo , `šfo2¡r (info)); 706 d©a = `CAPI_U32 ( äm ); 708 Ëngth = `CAPI_U16 ( äm ); 709 `p_šd’t ( Ëv– , äm ); 710 `´štf ("D©¨Ëngth: 0x%04x (%d by‹s)\n", Ëngth ,†ength); 712 hªdË = `CAPI_U16 ( äm ); 713 `p_šd’t ( Ëv– , äm ); 714 `´štf ("D©¨hªdË: 0x%04x\n", hªdË ); 716 æags = `CAPI_U16 ( äm ); 717 `p_šd’t ( Ëv– , äm ); 718 `´štf ("FÏgs: 0x%04x\n", æags ); 720 ià( d©a == 0) 721 (è `g‘_u64 ( äm ); 723 `¿w_dump ( Ëv– , äm ); 725 } } 727  $cmd_»£t_b3 ( Ëv– , ušt8_t subcmd ,  äame * äm ) 729 ušt8_t Ën ; 731 `cmd_commÚ ( Ëv– , subcmd , äm ); 733 ià( subcmd == 0x80 || subcmd == 0x82) { 734 Ën = `CAPI_U8 ( äm ); 735 ià( Ën > 0) { 736 `p_šd’t ( Ëv– , äm ); 737 `´štf ("NCPI:\n"); 738 `hex_dump ( Ëv– , äm , Ën ); 741 } } 743  $cmd_mªuçùu»r ( Ëv– , ušt8_t subcmd ,  äame * äm ) 745 ušt32_t ùr , þass , func ; 746 ušt16_t Ën ; 747 * id ; 749 ùr = `CAPI_U32 ( äm ); 750 `p_šd’t ( Ëv– , äm ); 751 `´štf ("CÚŒÞËr: %d\n", ùr ); 753 id = (*è äm -> ±r ; 754 `p_šd’t ( Ëv– , äm ); 755 ià( `i¥ršt ( id [0]) && isprint(id[1]) && isprint(id[2]) && isprint(id[3])) 756 `´štf ("Mªuçùu»r: %.4s", id ); 758 `´štf ("Manufacturer: 0x%02x 0x%02x 0x%02x 0x%02x", 759 id [0], id[1], id[2], id[3]); 760 äm -> ±r += 4; 761 äm -> Ën -= 4; 763 ià(! `¡ºcmp ((*è id , "AVM!", 4)) { 764 þass = `CAPI_U32 ( äm ); 765 func = `CAPI_U32 ( äm ); 766 Ën = `CAPI_U8 ( äm ); 767 ià( Ën == 0xff) 768 Ën = `CAPI_U16 ( äm ); 770 `´štf (" [þas %d funø%d†’ %d]\n", þass , func , Ën ); 772 `´štf ("\n"); 774 `¿w_dump ( Ëv– , äm ); 775 } } 777  $ÿpi_dump ( Ëv– ,  äame * äm ) 779 ušt16_t Ën , ­¶ , msgnum ; 780 ušt8_t cmd , subcmd ; 782 Ën = `CAPI_U16 ( äm ) - 8; 783 ­¶ = `CAPI_U16 ( äm ); 784 cmd = `CAPI_U8 ( äm ); 785 subcmd = `CAPI_U8 ( äm ); 786 msgnum = `CAPI_U16 ( äm ); 788 `p_šd’t ( Ëv– , äm ); 790 `´štf ("CAPI_%s_%s:‡ppl %d msgnum %d†en %d\n", 791 `cmd2¡r ( cmd ), `subcmd2¡r ( subcmd ), ­¶ , msgnum , Ën ); 793  cmd ) { 795 `cmd_®”t ( Ëv– + 1, subcmd , äm ); 798 `cmd_cÚÃù ( Ëv– + 1, subcmd , äm ); 801 `cmd_cÚÃù_aùive ( Ëv– + 1, subcmd , äm ); 804 `cmd_discÚÃù ( Ëv– + 1, subcmd , äm ); 807 `cmd_li¡’ ( Ëv– + 1, subcmd , äm ); 810 `cmd_šfo ( Ëv– + 1, subcmd , äm ); 813 `cmd_š‹rÝ”abž™y ( Ëv– + 1, subcmd , äm ); 816 `cmd_çcž™y ( Ëv– + 1, subcmd , äm ); 819 `cmd_cÚÃù_b3 ( Ëv– + 1, subcmd , äm ); 823 `cmd_cÚÃù_b3_aùive ( Ëv– + 1, subcmd , äm ); 826 `cmd_discÚÃù_b3 ( Ëv– + 1, subcmd , äm ); 829 `cmd_d©a_b3 ( Ëv– + 1, subcmd , äm ); 832 `cmd_»£t_b3 ( Ëv– + 1, subcmd , äm ); 835 `cmd_mªuçùu»r ( Ëv– + 1, subcmd , äm ); 838 `¿w_dump ( Ëv– , äm ); 839 äm -> ±r +ð Ën ; 840 äm -> Ën -=†en; 843 } } @tools/parser/cmtp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~"·r£r.h " 36  #TABLE_SIZE 10 ) 39 ušt16_t mhªdË ; 40 ušt16_t mcid ; 41  äame mmsg [16]; 42 } gbË [ TABLE_SIZE ]; 44  $add_£gm’t ( ušt8_t bid ,  äame * äm ,  Ën ) 46 ušt16_t hªdË = äm ->hªdË, cid = frm->cid; 47  äame * msg ; 48 * d©a ; 49  i , pos = -1; 51 ià( bid > 15) 54  i = 0; i < TABLE_SIZE ; i++) { 55 ià( bË [ i ]. hªdË =ðhªdË &&abË[i]. cid == cid) { 56 pos = i ; 60 ià( pos < 0 && ! bË [ i ]. hªdË && !bË[i]. cid ) 61 pos = i ; 64 ià( pos < 0) 67 bË [ pos ]. hªdË = handle; 68 bË [ pos ]. cid = cid; 69 msg = & bË [ pos ].msg[ bid ]; 71 d©a = `m®loc ( msg -> d©a_Ën + Ën ); 72 ià(! d©a ) 75 ià( msg -> d©a_Ën > 0) 76 `memýy ( d©a , msg ->d©a, msg-> d©a_Ën ); 78 `memýy ( d©a + msg -> d©a_Ën , äm -> ±r , Ën ); 79 `ä“ ( msg -> d©a ); 80 msg -> d©a = data; 81 msg -> d©a_Ën +ð Ën ; 82 msg -> ±r = msg-> d©a ; 83 msg -> Ën = msg-> d©a_Ën ; 84 msg -> š = äm ->in; 85 msg -> ts = äm ->ts; 86 msg -> hªdË = handle; 87 msg -> cid = cid; 88 } } 90  $ä“_£gm’t ( ušt8_t bid ,  äame * äm ) 92 ušt16_t hªdË = äm ->hªdË, cid = frm->cid; 93  äame * msg ; 94  i , Ën = 0, pos = -1; 96 ià( bid > 15) 99  i = 0; i < TABLE_SIZE ; i++) 100 ià( bË [ i ]. hªdË =ðhªdË &&abË[i]. cid == cid) { 101 pos = i ; 105 ià( pos < 0) 108 msg = & bË [ pos ].msg[ bid ]; 110 ià( msg -> d©a ) 111 `ä“ ( msg -> d©a ); 113 msg -> d©a = NULL ; 114 msg -> d©a_Ën = 0; 116  i = 0; i < 16; i++) 117 Ën +ð bË [ pos ]. msg [ i ]. d©a_Ën ; 119 ià(! Ën ) { 120 bË [ pos ]. hªdË = 0; 121 bË [ pos ]. cid = 0; 123 } } 125  äame * $g‘_£gm’t ( ušt8_t bid ,  äame * äm ) 127 ušt16_t hªdË = äm ->hªdË, cid = frm->cid; 128  i ; 130 ià( bid > 15) 131  NULL ; 133  i = 0; i < TABLE_SIZE ; i++) 134 ià( bË [ i ]. hªdË =ðhªdË &&abË[i]. cid == cid) 135  & bË [ i ]. msg [ bid ]; 137  NULL ; 138 } } 140 * $b¡2¡r ( ušt8_t b¡ ) 142  b¡ ) { 154 } } 156  $cm_dump ( Ëv– ,  äame * äm ) 158  äame * msg ; 159 ušt8_t hdr , bid ; 160 ušt16_t Ën ; 162  äm -> Ën > 0) { 164 hdr = `g‘_u8 ( äm ); 165 bid = ( hdr & 0x3c) >> 2; 167 ( hdr & 0xc0) >> 6) { 169 Ën = `g‘_u8 ( äm ); 172 Ën = `htÚs ( `g‘_u16 ( äm )); 175 Ën = 0; 179 `p_šd’t ( Ëv– , äm ); 181 `´štf ("CMTP: %s: id %d†’ %d\n", `b¡2¡r ( hdr & 0x03), bid , Ën ); 183  hdr & 0x03) { 185 `add_£gm’t ( bid , äm , Ën ); 186 msg = `g‘_£gm’t ( bid , äm ); 187 ià(! msg ) 190 ià(! `p_fž‹r ( FILT_CAPI )) 191 `ÿpi_dump ( Ëv– + 1, msg ); 193 `¿w_dump ( Ëv– , msg ); 195 `ä“_£gm’t ( bid , äm ); 198 `add_£gm’t ( bid , äm , Ën ); 201 `ä“_£gm’t ( bid , äm ); 205 äm -> ±r +ð Ën ; 206 äm -> Ën -=†en; 208 } } @tools/parser/csr.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~"·r£r.h " 36  #CSR_U8 ( äm è( `g‘_u8 (äm)) ) 37  #CSR_U16 ( äm è( `btohs ( `htÚs ( `g‘_u16 (äm)))) ) 38  #CSR_U32 ( äm è(( `CSR_U16 (ämè<< 16è+ CSR_U16(äm)) ) 39  #CSR_S16 ( äm è( `btohs ( `htÚs ( `g‘_u16 (äm)))) ) 41 * $ty³2¡r ( ušt16_t ty³ ) 43  ty³ ) { 53 } } 55  šlše  $v®u–ess_dump ( Ëv– , * ¡r ,  äame * äm ) 57 `p_šd’t ( Ëv– , äm ); 58 `´štf ("%s\n", ¡r ); 59 } } 61  šlše  $com¶ex_dump ( Ëv– , * ¡r ,  äame * äm ) 63 `p_šd’t ( Ëv– , äm ); 64 `´štf ("%s\n", ¡r ); 66 `¿w_dump ( Ëv– , äm ); 67 } } 69  šlše  $boÞ_dump ( Ëv– , * ¡r ,  äame * äm ) 71 ušt16_t v®ue ; 73 v®ue = `CSR_U16 ( äm ); 75 `p_šd’t ( Ëv– , äm ); 76 `´štf ("%s: v®u% (%d)\n", ¡r , v®ue ? "TRUE" : "FALSE", value); 77 } } 79  šlše  $št8_dump ( Ëv– , * ¡r ,  äame * äm ) 81 št16_t v®ue ; 83 v®ue = `CSR_S16 ( äm ); 85 `p_šd’t ( Ëv– , äm ); 86 `´štf ("%s: v®u%d (0x%2.2x)\n", ¡r , v®ue , value); 87 } } 89  šlše  $št16_dump ( Ëv– , * ¡r ,  äame * äm ) 91 št16_t v®ue ; 93 v®ue = `CSR_S16 ( äm ); 95 `p_šd’t ( Ëv– , äm ); 96 `´štf ("%s: v®u%d (0x%2.2x)\n", ¡r , v®ue , value); 97 } } 99  šlše  $ušt16_dump ( Ëv– , * ¡r ,  äame * äm ) 101 ušt16_t v®ue ; 103 v®ue = `CSR_U16 ( äm ); 105 `p_šd’t ( Ëv– , äm ); 106 `´štf ("%s: v®u%d (0x%4.4x)\n", ¡r , v®ue , value); 107 } } 109  šlše  $ušt32_dump ( Ëv– , * ¡r ,  äame * äm ) 111 ušt32_t v®ue ; 113 v®ue = `CSR_U32 ( äm ); 115 `p_šd’t ( Ëv– , äm ); 116 `´štf ("%s: v®u%d (0x%4.4x)\n", ¡r , v®ue , value); 117 } } 119  šlše  $bdaddr_dump ( Ëv– , * ¡r ,  äame * äm ) 121  addr [18]; 123 `p_ba2¡r ( äm -> ±r , addr ); 125 `p_šd’t ( Ëv– , äm ); 126 `´štf ("%s: bdadd¸%s\n", ¡r , addr ); 127 } } 129  šlše  $ã©u»s_dump ( Ëv– , * ¡r ,  äame * äm ) 131  ã©u»s [8]; 132  i ; 134 `memýy ( ã©u»s , äm -> ±r , 8); 136 `p_šd’t ( Ëv– , äm ); 137 `´štf ("%s: f—tu»s", ¡r ); 138  i = 0; i < 8; i++) 139 `´štf (" 0x%02x", ã©u»s [ i ]); 140 `´štf ("\n"); 141 } } 143  šlše  $commªds_dump ( Ëv– , * ¡r ,  äame * äm ) 145  commªds [64]; 146  i ; 148 `memýy ( commªds , äm -> ±r , frm-> Ën ); 150 `p_šd’t ( Ëv– , äm ); 151 `´štf ("%s: commªds", ¡r ); 152  i = 0; i < äm -> Ën ; i++) 153 `´štf (" 0x%02x", commªds [ i ]); 154 `´štf ("\n"); 155 } } 157  šlše  $hªdË_Ëngth_dump ( Ëv– , * ¡r ,  äame * äm ) 159 ušt16_t hªdË , Ëngth ; 161 hªdË = `CSR_U16 ( äm ); 162 Ëngth = `CSR_U16 ( äm ); 164 `p_šd’t ( Ëv– , äm ); 165 `´štf ("%s: hªdË %d†’gth %d\n", ¡r , hªdË , Ëngth ); 166 } } 168  šlše  $hªdË_þock_dump ( Ëv– , * ¡r ,  äame * äm ) 170 ušt16_t hªdË ; 171 ušt32_t þock ; 173 hªdË = `CSR_U16 ( äm ); 174 þock = `CSR_U32 ( äm ); 176 `p_šd’t ( Ëv– , äm ); 177 `´štf ("%s: hªdË %d clock 0x%4.4x\n", ¡r , hªdË , þock ); 178 } } 180  šlše  $¿diÙe¡_dump ( Ëv– , * ¡r ,  äame * äm ) 182 ušt16_t ‹¡id ; 184 ‹¡id = `CSR_U16 ( äm ); 186 `p_šd’t ( Ëv– , äm ); 187 `´štf ("%s:e¡ id %d\n", ¡r , ‹¡id ); 189 `¿w_dump ( Ëv– , äm ); 190 } } 192  šlše  $psmemty³_dump ( Ëv– , * ¡r ,  äame * äm ) 194 ušt16_t ¡Üe , ty³ ; 196 ¡Üe = `CSR_U16 ( äm ); 197 ty³ = `CSR_U16 ( äm ); 199 `p_šd’t ( Ëv– , äm ); 200 `´štf ("%s: stÜ0x%4.4xy³ %d\n", ¡r , ¡Üe , ty³ ); 201 } } 203  šlše  $p¢ext_dump ( Ëv– , * ¡r ,  äame * äm ) 205 ušt16_t key , ¡Ües , Ãxt ; 207 key = `CSR_U16 ( äm ); 208 ¡Ües = `CSR_U16 ( äm ); 209 Ãxt = `CSR_U16 ( äm ); 211 `p_šd’t ( Ëv– , äm ); 212 `´štf ("%s: key 0x%4.4x stÜe 0x%4.4x‚exˆ0x%4.4x\n", ¡r , key , ¡Ües , Ãxt ); 213 } } 215  šlše  $pssize_dump ( Ëv– , * ¡r ,  äame * äm ) 217 ušt16_t key , Ëngth ; 219 key = `CSR_U16 ( äm ); 220 Ëngth = `CSR_U16 ( äm ); 222 `p_šd’t ( Ëv– , äm ); 223 `´štf ("%s: key 0x%4.4x % 0x%4.4x\n", ¡r , key , 224 äm -> š ? "Ën" : "¡Ües", Ëngth ); 225 } } 227  šlše  $ps¡Ües_dump ( Ëv– , * ¡r ,  äame * äm ) 229 ušt16_t key , ¡Ües ; 231 key = `CSR_U16 ( äm ); 232 ¡Ües = `CSR_U16 ( äm ); 234 `p_šd’t ( Ëv– , äm ); 235 `´štf ("%s: key 0x%4.4x stÜe 0x%4.4x\n", ¡r , key , ¡Ües ); 236 } } 238  šlše  $pskey_dump ( Ëv– ,  äame * äm ) 240 ušt16_t key , Ëngth , ¡Ües ; 242 key = `CSR_U16 ( äm ); 243 Ëngth = `CSR_U16 ( äm ); 244 ¡Ües = `CSR_U16 ( äm ); 246 `p_šd’t ( Ëv– , äm ); 247 `´štf ("PSKEY: key 0x%4.4x†’ %d stÜe 0x%4.4x\n", key , Ëngth , ¡Ües ); 249  key ) { 251 `bdaddr_dump ( Ëv– + 1, "BDADDR", äm ); 254 `ušt16_dump ( Ëv– + 1, "COUNTRYCODE", äm ); 257 `ušt32_dump ( Ëv– + 1, "CLASSOFDEVICE", äm ); 260 `ušt16_dump ( Ëv– + 1, "DEVICE_DRIFT", äm ); 263 `ušt16_dump ( Ëv– + 1, "DEVICE_JITTER", äm ); 266 `ušt16_dump ( Ëv– + 1, "MAX_ACLS", äm ); 269 `ušt16_dump ( Ëv– + 1, "MAX_SCOS", äm ); 272 `ušt16_dump ( Ëv– + 1, "MAX_REMOTE_MASTERS", äm ); 275 `ušt16_dump ( Ëv– + 1, "ENC_KEY_LMIN", äm ); 278 `ušt16_dump ( Ëv– + 1, "ENC_KEY_LMAX", äm ); 281 `ã©u»s_dump ( Ëv– + 1, "LOCAL_SUPPORTED_FEATURES", äm ); 284 `commªds_dump ( Ëv– + 1, "LOCAL_SUPPORTED_COMMANDS", äm ); 287 `ušt16_dump ( Ëv– + 1, "HCI_LMP_LOCAL_VERSION", äm ); 290 `ušt16_dump ( Ëv– + 1, "LMP_REMOTE_VERSION", äm ); 293 `boÞ_dump ( Ëv– + 1, "HOSTIO_USE_HCI_EXTN", äm ); 296 `boÞ_dump ( Ëv– + 1, "HOSTIO_MAP_SCO_PCM", äm ); 299 `ušt16_dump ( Ëv– + 1, "UART_BAUDRATE", äm ); 302 `ušt16_dump ( Ëv– + 1, "ANA_FTRIM", äm ); 305 `ušt16_dump ( Ëv– + 1, "HOST_INTERFACE", äm ); 308 `ušt16_dump ( Ëv– + 1, "ANA_FREQ", äm ); 311 `ušt16_dump ( Ëv– + 1, "USB_VENDOR_ID", äm ); 314 `ušt16_dump ( Ëv– + 1, "USB_PRODUCT_ID", äm ); 317 `ušt16_dump ( Ëv– + 1, "USB_DFU_PRODUCT_ID", äm ); 320 `št16_dump ( Ëv– + 1, "INITIAL_BOOTMODE", äm ); 323 `¿w_dump ( Ëv– + 1, äm ); 326 } } 328  šlše  $bccmd_dump ( Ëv– ,  äame * äm ) 330 ušt16_t ty³ , Ëngth , £qno , v¬id , ¡©us ; 332 ty³ = `CSR_U16 ( äm ); 333 Ëngth = `CSR_U16 ( äm ); 334 £qno = `CSR_U16 ( äm ); 335 v¬id = `CSR_U16 ( äm ); 336 ¡©us = `CSR_U16 ( äm ); 338 `p_šd’t ( Ëv– , äm ); 339 `´štf ("BCCMD: %s:†en %d seqno %d varid 0x%4.4x status %d\n", 340 `ty³2¡r ( ty³ ), Ëngth , £qno , v¬id , ¡©us ); 342 ià(!( ·r£r . æags & DUMP_VERBOSE )) { 343 `¿w_dump ( Ëv– + 1, äm ); 347  v¬id ) { 349 `v®u–ess_dump ( Ëv– + 1, "PS_CLR_ALL", äm ); 352 `v®u–ess_dump ( Ëv– + 1, "PS_FACTORY_SET", äm ); 355 `ušt16_dump ( Ëv– + 1, "PS_CLR_ALL_STORES", äm ); 358 `ušt16_dump ( Ëv– + 1, "BC01_STATUS", äm ); 361 `ušt16_dump ( Ëv– + 1, "BUILDID", äm ); 364 `ušt16_dump ( Ëv– + 1, "CHIPVER", äm ); 367 `ušt16_dump ( Ëv– + 1, "CHIPREV", äm ); 370 `ušt16_dump ( Ëv– + 1, "INTERFACE_VERSION", äm ); 373 `ušt16_dump ( Ëv– + 1, "RAND", äm ); 376 `ušt16_dump ( Ëv– + 1, "MAX_CRYPT_KEY_LENGTH", äm ); 379 `ušt16_dump ( Ëv– + 1, "E2_APP_SIZE", äm ); 382 `ušt16_dump ( Ëv– + 1, "CHIPANAREV", äm ); 385 `ušt16_dump ( Ëv– + 1, "BUILDID_LOADER", äm ); 388 `ušt32_dump ( Ëv– + 1, "BT_CLOCK", äm ); 391 `p¢ext_dump ( Ëv– + 1, "PS_NEXT", äm ); 394 `pssize_dump ( Ëv– + 1, "PS_SIZE", äm ); 397 `hªdË_Ëngth_dump ( Ëv– + 1, "CRYPT_KEY_LENGTH", äm ); 400 `hªdË_þock_dump ( Ëv– + 1, "PICONET_INSTANCE", äm ); 403 `com¶ex_dump ( Ëv– + 1, "GET_CLR_EVT", äm ); 406 `com¶ex_dump ( Ëv– + 1, "GET_NEXT_BUILDDEF", äm ); 409 `com¶ex_dump ( Ëv– + 1, "E2_DEVICE", äm ); 412 `com¶ex_dump ( Ëv– + 1, "E2_APP_DATA", äm ); 415 `psmemty³_dump ( Ëv– + 1, "PS_MEMORY_TYPE", äm ); 418 `com¶ex_dump ( Ëv– + 1, "READ_BUILD_NAME", äm ); 421 `v®u–ess_dump ( Ëv– + 1, "COLD_RESET", äm ); 424 `v®u–ess_dump ( Ëv– + 1, "WARM_RESET", äm ); 427 `v®u–ess_dump ( Ëv– + 1, "COLD_HALT", äm ); 430 `v®u–ess_dump ( Ëv– + 1, "WARM_HALT", äm ); 433 `v®u–ess_dump ( Ëv– + 1, "INIT_BT_STACK", äm ); 436 `v®u–ess_dump ( Ëv– + 1, "ACTIVATE_BT_STACK", äm ); 439 `v®u–ess_dump ( Ëv– + 1, "ENABLE_TX", äm ); 442 `v®u–ess_dump ( Ëv– + 1, "DISABLE_TX", äm ); 445 `v®u–ess_dump ( Ëv– + 1, "RECAL", äm ); 448 `v®u–ess_dump ( Ëv– + 1, "PS_FACTORY_RESTORE", äm ); 451 `v®u–ess_dump ( Ëv– + 1, "PS_FACTORY_RESTORE_ALL", äm ); 454 `v®u–ess_dump ( Ëv– + 1, "PS_DEFRAG_RESET", äm ); 457 `v®u–ess_dump ( Ëv– + 1, "HOPPING_ON", äm ); 460 `v®u–ess_dump ( Ëv– + 1, "CANCEL_PAGE", äm ); 463 `ušt16_dump ( Ëv– + 1, "PS_CLR", äm ); 466 `ušt16_dump ( Ëv– + 1, "MAP_SCO_PCM", äm ); 469 `ušt16_dump ( Ëv– + 1, "SINGLE_CHAN", äm ); 472 `¿diÙe¡_dump ( Ëv– + 1, "RADIOTEST", äm ); 475 `ps¡Ües_dump ( Ëv– + 1, "PS_CLR_STORES", äm ); 478 `v®u–ess_dump ( Ëv– + 1, "NO_VARIABLE", äm ); 481 `ušt16_dump ( Ëv– + 1, "CONFIG_UART", äm ); 484 `ušt16_dump ( Ëv– + 1, "PANIC_ARG", äm ); 487 `ušt16_dump ( Ëv– + 1, "FAULT_ARG", äm ); 490 `št8_dump ( Ëv– + 1, "MAX_TX_POWER", äm ); 493 `št8_dump ( Ëv– + 1, "DEFAULT_TX_POWER", äm ); 496 `pskey_dump ( Ëv– + 1, äm ); 499 `¿w_dump ( Ëv– + 1, äm ); 502 } } 504 * $cid2¡r ( ušt8_t cid ) 506  cid & 0x3f) { 542 } } 544 * $äag2¡r ( ušt8_t äag ) 546  äag & 0xc0) { 556 } } 558  $c¤_dump ( Ëv– ,  äame * äm ) 560 ušt8_t desc , cid , ty³ ; 561 ušt16_t hªdË , ma¡” , addr ; 563 desc = `CSR_U8 ( äm ); 565 cid = desc & 0x3f; 567  cid ) { 569 `bccmd_dump ( Ëv– , äm ); 573 ty³ = `CSR_U8 ( äm ); 575 ià(! `p_fž‹r ( FILT_LMP )) { 576  ty³ ) { 578 äm -> hªdË = (( ušt8_t *èäm-> ±r )[17]; 579 äm -> ma¡” = 0; 580 äm -> Ën --; 581 `lmp_dump ( Ëv– , äm ); 584 äm -> hªdË = (( ušt8_t *èäm-> ±r )[17]; 585 äm -> ma¡” = 1; 586 äm -> Ën --; 587 `lmp_dump ( Ëv– , äm ); 590 hªdË = `CSR_U16 ( äm ); 591 ma¡” = `CSR_U16 ( äm ); 592 addr = `CSR_U16 ( äm ); 593 `p_šd’t ( Ëv– , äm ); 594 `´štf ("FHS: hªdË %d‡dd¸%d (%s)\n", hªdË , 595 addr , ma¡” ? "master" : "slave"); 596 ià(! ma¡” ) { 597  addr [18]; 598 `p_ba2¡r (( bdaddr_t *è äm -> ±r , addr ); 599 `p_šd’t ( Ëv– + 1, äm ); 600 `´štf ("bdaddr %s class " 601 "0x%2.2x%2.2x%2.2x\n", addr , 602 (( ušt8_t *è äm -> ±r )[8], 603 (( ušt8_t *è äm -> ±r )[7], 604 (( ušt8_t *è äm -> ±r )[6]); 608 `p_šd’t ( Ëv– , äm ); 609 `´štf ("LMP(r): duplicate (same SEQN)\n"); 614 `p_šd’t ( Ëv– , äm ); 615 `´štf ("CSR: Debug (ty³ 0x%2.2x)\n", ty³ ); 616 `¿w_dump ( Ëv– , äm ); 620 `p_šd’t ( Ëv– , äm ); 621 `´štf ("CSR: % (chªÃÈ%d)%s\n", `cid2¡r ( cid ), cid, `äag2¡r ( desc )); 622 `¿w_dump ( Ëv– , äm ); 625 } } @tools/parser/ericsson.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 31  ~"·r£r.h " 33  $”icssÚ_dump ( Ëv– ,  äame * äm ) 35 ušt8_t ev’t = `g‘_u8 ( äm ); 36 ušt8_t * buf = (ušt8_ˆ*è äm -> ±r ; 38 ià( ev’t != 0x10) { 39 `p_šd’t ( Ëv– , äm ); 40 `´štf ("EricssÚ:ƒv’ˆ0x%2.2x\n", ev’t ); 41 `¿w_dump ( Ëv– , äm ); 44 äm -> ma¡” = !( buf [0] & 0x01); 45 äm -> hªdË = buf [1] | (buf[2] << 8); 47 buf [5] = (buf[5] << 1) | (buf[3] & 0x01); 49 äm -> ±r += 5; 50 äm -> Ën -= 5; 52 `lmp_dump ( Ëv– , äm ); 53 } } @tools/parser/hci.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<ùy³.h > 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 36  ~"·r£r.h " 37  ~"lib/hci.h " 38  ~"lib/hci_lib.h " 39  ~"lib/amp.h " 41  ušt16_t gmªuçùu»r = DEFAULT_COMPID ; 43  šlše ušt16_t $g‘_mªuçùu»r () 45  ( mªuçùu»r =ð DEFAULT_COMPID ? ·r£r . defcompid : manufacturer); 46 } } 48  #EVENT_NUM 77 ) 49 * gev’t_¡r [ EVENT_NUM + 1] = { 130  #LE_EV_NUM 5 ) 131 * gev_Ë_m‘a_¡r [ LE_EV_NUM + 1] = { 140  #CMD_LINKCTL_NUM 60 ) 141 * gcmd_lškùl_¡r [ CMD_LINKCTL_NUM + 1] = { 205  #CMD_LINKPOL_NUM 17 ) 206 * gcmd_lškpÞ_¡r [ CMD_LINKPOL_NUM + 1] = { 227  #CMD_HOSTCTL_NUM 109 ) 228 * gcmd_ho¡ùl_¡r [ CMD_HOSTCTL_NUM + 1] = { 341  #CMD_INFO_NUM 10 ) 342 * gcmd_šfo_¡r [ CMD_INFO_NUM + 1] = { 356  #CMD_STATUS_NUM 11 ) 357 * gcmd_¡©us_¡r [ CMD_STATUS_NUM + 1] = { 372  #CMD_TESTING_NUM 4 ) 373 * gcmd_‹¡šg_¡r [ CMD_TESTING_NUM + 1] = { 381  #CMD_LE_NUM 31 ) 382 * gcmd_Ë_¡r [ CMD_LE_NUM + 1] = { 417  #ERROR_CODE_NUM 63 ) 418 * g”rÜ_code_¡r [ ERROR_CODE_NUM + 1] = { 485 * $¡©us2¡r ( ušt8_t ¡©us ) 487 * ¡r ; 489 ià( ¡©us <ð ERROR_CODE_NUM ) 490 ¡r = ”rÜ_code_¡r [ ¡©us ]; 492 ¡r = "Unknown"; 494  ¡r ; 495 } } 497 * $Ýcode2¡r ( ušt16_t Ýcode ) 499 ušt16_t ogf = `cmd_Ýcode_ogf ( Ýcode ); 500 ušt16_t ocf = `cmd_Ýcode_ocf ( Ýcode ); 501 * cmd ; 503  ogf ) { 504  OGF_INFO_PARAM : 505 ià( ocf <ð CMD_INFO_NUM ) 506 cmd = cmd_šfo_¡r [ ocf ]; 508 cmd = "Unknown"; 511  OGF_HOST_CTL : 512 ià( ocf <ð CMD_HOSTCTL_NUM ) 513 cmd = cmd_ho¡ùl_¡r [ ocf ]; 515 cmd = "Unknown"; 518  OGF_LINK_CTL : 519 ià( ocf <ð CMD_LINKCTL_NUM ) 520 cmd = cmd_lškùl_¡r [ ocf ]; 522 cmd = "Unknown"; 525  OGF_LINK_POLICY : 526 ià( ocf <ð CMD_LINKPOL_NUM ) 527 cmd = cmd_lškpÞ_¡r [ ocf ]; 529 cmd = "Unknown"; 532  OGF_STATUS_PARAM : 533 ià( ocf <ð CMD_STATUS_NUM ) 534 cmd = cmd_¡©us_¡r [ ocf ]; 536 cmd = "Unknown"; 539  OGF_TESTING_CMD : 540 ià( ocf <ð CMD_TESTING_NUM ) 541 cmd = cmd_‹¡šg_¡r [ ocf ]; 543 cmd = "Unknown"; 546  OGF_LE_CTL : 547 ià( ocf <ð CMD_LE_NUM ) 548 cmd = cmd_Ë_¡r [ ocf ]; 550 cmd = "Unknown"; 553  OGF_VENDOR_CMD : 554 cmd = "Vendor"; 558 cmd = "Unknown"; 562  cmd ; 563 } } 565 * $lškty³2¡r ( ušt8_t ty³ ) 567  ty³ ) { 577 } } 579 * $rÞe2¡r ( ušt8_t rÞe ) 581  rÞe ) { 589 } } 591 * $mode2¡r ( ušt8_t mode ) 593  mode ) { 605 } } 607 * $aœmode2¡r ( ušt8_t mode ) 609  mode ) { 621 } } 623 cÚ¡ * $bdadd¹y³2¡r ( ušt8_t ty³ ) 625  ty³ ) { 633 } } 635 cÚ¡ * $ev‰y³2¡r ( ušt8_t ty³ ) 637  ty³ ) { 651 } } 653 * $keyty³2¡r ( ušt8_t ty³ ) 655  ty³ ) { 673 } } 675 * $ÿ·bž™y2¡r ( ušt8_t ÿ·bž™y ) 677  ÿ·bž™y ) { 689 } } 691 * $auth’tiÿtiÚ2¡r ( ušt8_t auth’tiÿtiÚ ) 693  auth’tiÿtiÚ ) { 709 } } 711 * $ev’tmask2¡r (cÚ¡ ušt8_t mask [8]) 713  i ; 715  i = 0; i < 7; i++) { 716 ià( mask [ i ] != 0x00) 720  mask [7]) { 738 } } 740 * $Ëã©u»s2¡r (cÚ¡ ušt8_t ã©u»s [8]) 742 ià( ã©u»s [0] & 0x01) 746 } } 748 * $fž‹½Þicy2¡r ( ušt8_t pÞicy ) 750  pÞicy ) { 762 } } 764  šlše  $ext_šquœy_d©a_dump ( Ëv– ,  äame * äm , 765 ušt8_t * d©a ) 767 ušt8_t Ën = d©a [0]; 768 ušt8_t ty³ ; 769 * ¡r ; 770  i ; 772 ià( Ën == 0) 775 ty³ = d©a [1]; 776 d©a += 2; 777 Ën -= 1; 779  ty³ ) { 781 `p_šd’t ( Ëv– , äm ); 782 `´štf ("Flags:"); 783  i = 0; i < Ën ; i++) 784 `´štf (" 0x%2.2x", d©a [ i ]); 785 `´štf ("\n"); 790 `p_šd’t ( Ëv– , äm ); 791 `´štf ("%s service classes:", 792 ty³ == 0x02 ? "Shortened" : "Complete"); 794  i = 0; i < Ën / 2; i++) 795 `´štf (" 0x%4.4x", `g‘_Ë16 ( d©a + i * 2)); 797 `´štf ("\n"); 802 ¡r = `m®loc ( Ën + 1); 803 ià( ¡r ) { 804 `¢´štf ( ¡r , Ën + 1, "%s", (*è d©a ); 805  i = 0; i < Ën ; i++) 806 ià(! `i¥ršt ( ¡r [ i ])) 807 ¡r [ i ] = '.'; 808 `p_šd’t ( Ëv– , äm ); 809 `´štf ("%s†ocal‚ame: \'%s\'\n", 810 ty³ =ð0x08 ? "ShÜ‹Ãd" : "Com¶‘e", ¡r ); 811 `ä“ ( ¡r ); 816 `p_šd’t ( Ëv– , äm ); 817 `´štf ("TX…ow”†ev–: %d\n", *(( ušt8_t *è d©a )); 821 `p_šd’t ( Ëv– , äm ); 822 `´štf ("Unknownype 0x%02x with %d bytes data\n", 823 ty³ , Ën ); 826 } } 828  šlše  $ext_šquœy_»¥Ú£_dump ( Ëv– ,  äame * äm ) 830 * ±r = äm ->ptr; 831 ušt32_t Ën = äm ->len; 832 ušt8_t * d©a ; 833 ušt8_t Ëngth ; 835 d©a = äm -> ±r ; 836 Ëngth = `g‘_u8 ( äm ); 838  Ëngth > 0) { 839 `ext_šquœy_d©a_dump ( Ëv– , äm , d©a ); 841 äm -> ±r +ð Ëngth ; 842 äm -> Ën -ð Ëngth ; 844 d©a = äm -> ±r ; 845 Ëngth = `g‘_u8 ( äm ); 848 äm -> ±r =…tr + 849 ( EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE ); 850 äm -> Ën =†en + 851 ( EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE ); 852 } } 854  šlše  $bdaddr_commªd_dump ( Ëv– ,  äame * äm ) 856 bdaddr_t * bdaddr = äm -> ±r ; 857  addr [18]; 859 äm -> ±r +ð( bdaddr_t ); 860 äm -> Ën -ð( bdaddr_t ); 862 `p_šd’t ( Ëv– , äm ); 863 `p_ba2¡r ( bdaddr , addr ); 864 `´štf ("bdadd¸%s\n", addr ); 866 `¿w_dump ( Ëv– , äm ); 867 } } 869  šlše  $g’”ic_commªd_dump ( Ëv– ,  äame * äm ) 871 ušt16_t hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 873 `p_šd’t ( Ëv– , äm ); 874 `´štf ("hªdË %d\n", hªdË ); 876 `¿w_dump ( Ëv– , äm ); 877 } } 879  šlše  $g’”ic_wr™e_mode_dump ( Ëv– ,  äame * äm ) 881 ušt8_t mode = `g‘_u8 ( äm ); 883 `p_šd’t ( Ëv– , äm ); 884 `´štf ("mod0x%2.2x\n", mode ); 885 } } 887  šlše  $šquœy_dump ( Ëv– ,  äame * äm ) 889 šquœy_ý * ý = äm -> ±r ; 891 `p_šd’t ( Ëv– , äm ); 892 `´štf ("lap 0x%2.2x%2.2x%2.2x†en %d‚um %d\n", 893 ý -> Ïp [2], cp->Ïp[1], cp->Ïp[0], cp-> Ëngth , cp-> num_r¥ ); 894 } } 896  šlše  $³riodic_šquœy_dump ( Ëv– ,  äame * äm ) 898 ³riodic_šquœy_ý * ý = äm -> ±r ; 900 `p_šd’t ( Ëv– , äm ); 901 `´štf ("max %d min %d†ap 0x%2.2x%2.2x%2.2x†en %d‚um %d\n", 902 `btohs ( ý -> max_³riod ), btohs(ý-> mš_³riod ), 903 ý -> Ïp [2], cp->Ïp[1], cp->Ïp[0], cp-> Ëngth , cp-> num_r¥ ); 904 } } 906  šlše  $ü—‹_cÚn_dump ( Ëv– ,  äame * äm ) 908 ü—‹_cÚn_ý * ý = äm -> ±r ; 909 ušt16_t ±y³ = `btohs ( ý -> pkt_ty³ ); 910 ušt16_t þkoff£t = `btohs ( ý -> þock_off£t ); 911  addr [18], * ¡r ; 913 `p_šd’t ( Ëv– , äm ); 914 `p_ba2¡r (& ý -> bdaddr , addr ); 915 `´štf ("bdaddr %s…type 0x%4.4x„switch 0x%2.2x clkoffset 0x%4.4x%s\n", 916 addr , ±y³ , ý -> rÞe_sw™ch , 917 þkoff£t & 0x7fff, clkoffset & 0x8000 ? " (valid)" : ""); 919 ¡r = `hci_±y³to¡r ( ±y³ ); 920 ià( ¡r ) { 921 `p_šd’t ( Ëv– , äm ); 922 `´štf ("Pack‘y³: %s\n", ¡r ); 923 `ä“ ( ¡r ); 925 } } 927  šlše  $discÚÃù_dump ( Ëv– ,  äame * äm ) 929 discÚÃù_ý * ý = äm -> ±r ; 931 `p_šd’t ( Ëv– , äm ); 932 `´štf ("hªdË %d„—sÚ 0x%2.2x\n", `btohs ( ý -> hªdË ), cp-> »asÚ ); 934 `p_šd’t ( Ëv– , äm ); 935 `´štf ("R—sÚ: %s\n", `¡©us2¡r ( ý -> »asÚ )); 936 } } 938  šlše  $add_sco_dump ( Ëv– ,  äame * äm ) 940 add_sco_ý * ý = äm -> ±r ; 941 ušt16_t ±y³ = `btohs ( ý -> pkt_ty³ ); 942 * ¡r ; 944 `p_šd’t ( Ëv– , äm ); 945 `´štf ("hªdË %d…ty³ 0x%4.4x\n", `btohs ( ý -> hªdË ), ±y³ ); 947 ¡r = `hci_±y³to¡r ( ±y³ ); 948 ià( ¡r ) { 949 `p_šd’t ( Ëv– , äm ); 950 `´štf ("Pack‘y³: %s\n", ¡r ); 951 `ä“ ( ¡r ); 953 } } 955  šlše  $acû±_cÚn_»q_dump ( Ëv– ,  äame * äm ) 957 acû±_cÚn_»q_ý * ý = äm -> ±r ; 958  addr [18]; 960 `p_šd’t ( Ëv– , äm ); 961 `p_ba2¡r (& ý -> bdaddr , addr ); 962 `´štf ("bdadd¸% rÞ0x%2.2x\n", addr , ý -> rÞe ); 964 `p_šd’t ( Ëv– , äm ); 965 `´štf ("RÞe: %s\n", `rÞe2¡r ( ý -> rÞe )); 966 } } 968  šlše  $»jeù_cÚn_»q_dump ( Ëv– ,  äame * äm ) 970 »jeù_cÚn_»q_ý * ý = äm -> ±r ; 971  addr [18]; 973 `p_šd’t ( Ëv– , äm ); 974 `p_ba2¡r (& ý -> bdaddr , addr ); 975 `´štf ("bdadd¸% »asÚ 0x%2.2x\n", addr , ý -> »asÚ ); 977 `p_šd’t ( Ëv– , äm ); 978 `´štf ("R—sÚ: %s\n", `¡©us2¡r ( ý -> »asÚ )); 979 } } 981  šlše  $pš_code_»¶y_dump ( Ëv– ,  äame * äm ) 983 pš_code_»¶y_ý * ý = äm -> ±r ; 984  addr [18], pš [17]; 986 `p_šd’t ( Ëv– , äm ); 987 `p_ba2¡r (& ý -> bdaddr , addr ); 988 `mem£t ( pš , 0, (pin)); 989 ià( ·r£r . æags & DUMP_NOVENDOR ) 990 `mem£t ( pš , '*', ý -> pš_Ën ); 992 `memýy ( pš , ý -> pš_code , cp-> pš_Ën ); 993 `´štf ("bdadd¸% ËÀ%d…š \'%s\'\n", addr , ý -> pš_Ën , pš ); 994 } } 996  šlše  $lšk_key_»¶y_dump ( Ëv– ,  äame * äm ) 998 lšk_key_»¶y_ý * ý = äm -> ±r ; 999  addr [18]; 1000  i ; 1002 `p_šd’t ( Ëv– , äm ); 1003 `p_ba2¡r (& ý -> bdaddr , addr ); 1004 `´štf ("bdadd¸% key ", addr ); 1005  i = 0; i < 16; i++) 1006 ià( ·r£r . æags & DUMP_NOVENDOR ) 1007 `´štf ("**"); 1009 `´štf ("%2.2X", ý -> lšk_key [ i ]); 1010 `´štf ("\n"); 1011 } } 1013  šlše  $pš_code_Ãg_»¶y_dump ( Ëv– ,  äame * äm ) 1015 bdaddr_t * bdaddr = äm -> ±r ; 1016  addr [18]; 1018 `p_šd’t ( Ëv– , äm ); 1019 `p_ba2¡r ( bdaddr , addr ); 1020 `´štf ("bdadd¸%s\n", addr ); 1021 } } 1023  šlše  $u£r_·sskey_»¶y_dump ( Ëv– ,  äame * äm ) 1025 u£r_·sskey_»¶y_ý * ý = äm -> ±r ; 1026  addr [18]; 1028 `p_šd’t ( Ëv– , äm ); 1029 `p_ba2¡r (& ý -> bdaddr , addr ); 1030 `´štf ("bdadd¸% ·sskey %d\n", addr , `btohl ( ý -> ·sskey )); 1031 } } 1033  šlše  $»mÙe_oob_d©a_»¶y_dump ( Ëv– ,  äame * äm ) 1035 »mÙe_oob_d©a_»¶y_ý * ý = äm -> ±r ; 1036  addr [18]; 1037  i ; 1039 `p_šd’t ( Ëv– , äm ); 1040 `p_ba2¡r (& ý -> bdaddr , addr ); 1041 `´štf ("bdadd¸%s\n", addr ); 1043 `p_šd’t ( Ëv– , äm ); 1044 `´štf ("hash 0x"); 1045  i = 0; i < 16; i++) 1046 `´štf ("%02x", ý -> hash [ i ]); 1047 `´štf ("\n"); 1049 `p_šd’t ( Ëv– , äm ); 1050 `´štf ("randomizer 0x"); 1051  i = 0; i < 16; i++) 1052 `´štf ("%02x", ý -> ¿ndomiz” [ i ]); 1053 `´štf ("\n"); 1054 } } 1056  šlše  $io_ÿ·bž™y_»¶y_dump ( Ëv– ,  äame * äm ) 1058 io_ÿ·bž™y_»¶y_ý * ý = äm -> ±r ; 1059  addr [18]; 1061 `p_šd’t ( Ëv– , äm ); 1062 `p_ba2¡r (& ý -> bdaddr , addr ); 1063 `´štf ("bdaddr %s capability 0x%2.2x oob 0x%2.2x‡uth 0x%2.2x\n", 1064 addr , ý -> ÿ·bž™y , cp-> oob_d©a , 1065 ý -> auth’tiÿtiÚ ); 1067 `p_šd’t ( Ëv– , äm ); 1068 `´štf ("Capability: %s (OOB data %s)\n", 1069 `ÿ·bž™y2¡r ( ý -> ÿ·bž™y ), 1070 ý -> oob_d©a == 0x00 ? "not…resent" : "available"); 1072 `p_šd’t ( Ëv– , äm ); 1073 `´štf ("Auth’tiÿtiÚ: %s\n", `auth’tiÿtiÚ2¡r ( ý -> auth’tiÿtiÚ )); 1074 } } 1076  šlše  $£t_cÚn_’üy±_dump ( Ëv– ,  äame * äm ) 1078 £t_cÚn_’üy±_ý * ý = äm -> ±r ; 1080 `p_šd’t ( Ëv– , äm ); 1081 `´štf ("hªdË %dƒnüy± 0x%2.2x\n", `btohs ( ý -> hªdË ), cp-> ’üy± ); 1082 } } 1084  šlše  $»mÙe_Çme_»q_dump ( Ëv– ,  äame * äm ) 1086 »mÙe_Çme_»q_ý * ý = äm -> ±r ; 1087 ušt16_t þkoff£t = `btohs ( ý -> þock_off£t ); 1088  addr [18]; 1090 `p_šd’t ( Ëv– , äm ); 1091 `p_ba2¡r (& ý -> bdaddr , addr ); 1092 `´štf ("bdaddr %s mode %d clkoffset 0x%4.4x%s\n", 1093 addr , ý -> psÿn_»p_mode , 1094 þkoff£t & 0x7fff, clkoffset & 0x8000 ? " (valid)" : ""); 1095 } } 1097  šlše  $ma¡”_lšk_key_dump ( Ëv– ,  äame * äm ) 1099 ma¡”_lšk_key_ý * ý = äm -> ±r ; 1101 `p_šd’t ( Ëv– , äm ); 1102 `´štf ("æag %d\n", ý -> key_æag ); 1103 } } 1105  šlše  $»ad_»mÙe_ext_ã©u»s_dump ( Ëv– ,  äame * äm ) 1107 »ad_»mÙe_ext_ã©u»s_ý * ý = äm -> ±r ; 1109 `p_šd’t ( Ëv– , äm ); 1110 `´štf ("hªdË %d…ag%d\n", `btohs ( ý -> hªdË ), cp-> ·ge_num ); 1111 } } 1113  šlše  $£tup_sync_cÚn_dump ( Ëv– ,  äame * äm ) 1115 £tup_sync_cÚn_ý * ý = äm -> ±r ; 1117 `p_šd’t ( Ëv– , äm ); 1118 `´štf ("handle %d voice setting 0x%4.4x…type 0x%4.4x\n", 1119 `btohs ( ý -> hªdË ), btohs(ý-> voiû_£‰šg ), 1120 `btohs ( ý -> pkt_ty³ )); 1121 } } 1123  šlše  $ü—‹_physiÿl_lšk_dump ( Ëv– ,  äame * äm ) 1125 ü—‹_physiÿl_lšk_ý * ý = äm -> ±r ; 1126  i ; 1128 `p_šd’t ( Ëv– , äm ); 1129 `´štf ("phy handle 0x%2.2x key†ength %d keyype %d\n", 1130 ý -> hªdË , cp-> key_Ëngth , cp-> key_ty³ ); 1131 `p_šd’t ( Ëv– , äm ); 1132 `´štf ("key "); 1133  i = 0; i < ý -> key_Ëngth && cp->key_length <= 32; i++) 1134 `´štf ("%2.2x", ý -> key [ i ]); 1135 `´štf ("\n"); 1136 } } 1138  šlše  $ü—‹_logiÿl_lšk_dump ( Ëv– ,  äame * äm ) 1140 ü—‹_logiÿl_lšk_ý * ý = äm -> ±r ; 1141  i ; 1143 `p_šd’t ( Ëv– , äm ); 1144 `´štf ("phy hªdË 0x%2.2x\n", ý -> hªdË ); 1146 `p_šd’t ( Ëv– , äm ); 1147 `´štf ("tx_flow "); 1148  i = 0; i < 16; i++) 1149 `´štf ("%2.2x", ý -> tx_æow [ i ]); 1150 `´štf ("\n"); 1152 `p_šd’t ( Ëv– , äm ); 1153 `´štf ("rx_flow "); 1154  i = 0; i < 16; i++) 1155 `´štf ("%2.2x", ý -> rx_æow [ i ]); 1156 `´štf ("\n"); 1157 } } 1159  šlše  $hÞd_mode_dump ( Ëv– ,  äame * äm ) 1161 hÞd_mode_ý * ý = äm -> ±r ; 1163 `p_šd’t ( Ëv– , äm ); 1164 `´štf ("hªdË %d max %d mš %d\n", `btohs ( ý -> hªdË ), 1165 `btohs ( ý -> max_š‹rv® ), btohs(ý-> mš_š‹rv® )); 1166 } } 1168  šlše  $¢iff_mode_dump ( Ëv– ,  äame * äm ) 1170 ¢iff_mode_ý * ý = äm -> ±r ; 1172 `p_šd’t ( Ëv– , äm ); 1173 `´štf ("handle %d max %d min %d‡ttempt %dimeout %d\n", 1174 `btohs ( ý -> hªdË ), btohs(ý-> max_š‹rv® ), 1175 `btohs ( ý -> mš_š‹rv® ), btohs(ý-> ©‹m± ), btohs(ý-> timeout )); 1176 } } 1178  šlše  $qos_£tup_dump ( Ëv– ,  äame * äm ) 1180 qos_£tup_ý * ý = äm -> ±r ; 1182 `p_šd’t ( Ëv– , äm ); 1183 `´štf ("hªdË %d fÏg 0x%2.2x\n", `btohs ( ý -> hªdË ), cp-> æags ); 1185 `p_šd’t ( Ëv– , äm ); 1186 `´štf ("S”viûy³: %d\n", ý -> qos . £rviû_ty³ ); 1187 `p_šd’t ( Ëv– , äm ); 1188 `´štf ("Tok’„©e: %d\n", `btohl ( ý -> qos . tok’_¿‹ )); 1189 `p_šd’t ( Ëv– , äm ); 1190 `´štf ("P—k bªdw™h: %d\n", `btohl ( ý -> qos . ³ak_bªdwidth )); 1191 `p_šd’t ( Ëv– , äm ); 1192 `´štf ("L©’cy: %d\n", `btohl ( ý -> qos . Ï‹ncy )); 1193 `p_šd’t ( Ëv– , äm ); 1194 `´štf ("D–ay v¬ŸtiÚ: %d\n", `btohl ( ý -> qos . d–ay_v¬ŸtiÚ )); 1195 } } 1197  šlše  $wr™e_lšk_pÞicy_dump ( Ëv– ,  äame * äm ) 1199 wr™e_lšk_pÞicy_ý * ý = äm -> ±r ; 1200 ušt16_t pÞicy = `btohs ( ý ->policy); 1201 * ¡r ; 1203 `p_šd’t ( Ëv– , äm ); 1204 `´štf ("hªdË %d…Þicy 0x%2.2x\n", `btohs ( ý -> hªdË ), pÞicy ); 1206 ¡r = `hci_Íto¡r ( pÞicy ); 1207 ià( ¡r ) { 1208 `p_šd’t ( Ëv– , äm ); 1209 `´štf ("Lšk…Þicy: %s\n", ¡r ); 1210 `ä“ ( ¡r ); 1212 } } 1214  šlše  $wr™e_deçuÉ_lšk_pÞicy_dump ( Ëv– ,  äame * äm ) 1216 ušt16_t pÞicy = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 1217 * ¡r ; 1219 `p_šd’t ( Ëv– , äm ); 1220 `´štf ("pÞicy 0x%2.2x\n", pÞicy ); 1222 ¡r = `hci_Íto¡r ( pÞicy ); 1223 ià( ¡r ) { 1224 `p_šd’t ( Ëv– , äm ); 1225 `´štf ("Lšk…Þicy: %s\n", ¡r ); 1226 `ä“ ( ¡r ); 1228 } } 1230  šlše  $¢iff_sub¿tšg_dump ( Ëv– ,  äame * äm ) 1232 ¢iff_sub¿tšg_ý * ý = äm -> ±r ; 1234 `p_šd’t ( Ëv– , äm ); 1235 `´štf ("hªdË %d\n", `btohs ( ý -> hªdË )); 1237 `p_šd’t ( Ëv– , äm ); 1238 `´štf ("max†©’cy %d\n", `btohs ( ý -> max_Ï‹ncy )); 1240 `p_šd’t ( Ëv– , äm ); 1241 `´štf ("minimeout„emote %d†ocal %d\n", 1242 `btohs ( ý -> mš_»mÙe_timeout ), btohs(ý-> mš_loÿl_timeout )); 1243 } } 1245  šlše  $£t_ev’t_mask_dump ( Ëv– ,  äame * äm ) 1247 £t_ev’t_mask_ý * ý = äm -> ±r ; 1248  i ; 1250 `p_šd’t ( Ëv– , äm ); 1251 `´štf ("Mask: 0x"); 1252  i = 0; i < 8; i++) 1253 `´štf ("%2.2x", ý -> mask [ i ]); 1254 `´štf ("\n"); 1255 } } 1257  šlše  $£t_ev’t_æt_dump ( Ëv– ,  äame * äm ) 1259 £t_ev’t_æt_ý * ý = äm -> ±r ; 1260 ušt8_t dev_þass [3], dev_mask [3]; 1261  addr [18]; 1263 `p_šd’t ( Ëv– , äm ); 1264 `´štf ("ty³ %d cÚd™iÚ %d\n", ý -> æt_ty³ , 1265 ( ý -> æt_ty³ =ð0è? 0 : cp-> cÚd_ty³ ); 1267  ý -> æt_ty³ ) { 1268  FLT_CLEAR_ALL : 1269 `p_šd’t ( Ëv– , äm ); 1270 `´štf ("Clear‡ll filters\n"); 1272  FLT_INQ_RESULT : 1273 `p_šd’t ( Ëv– , äm ); 1274 `´štf ("Inquiry„esult"); 1275  ý -> cÚd_ty³ ) { 1276  INQ_RESULT_RETURN_ALL : 1277 `´štf (" for‡ll devices\n"); 1279  INQ_RESULT_RETURN_CLASS : 1280 `memýy ( dev_þass , ý -> cÚd™iÚ , 3); 1281 `memýy ( dev_mask , ý -> cÚd™iÚ + 3, 3); 1282 `´štf (" with class 0x%2.2x%2.2x%2.2x mask 0x%2.2x%2.2x%2.2x\n", 1283 dev_þass [2], dev_class[1], dev_class[0], 1284 dev_mask [2], dev_mask[1], dev_mask[0]); 1286  INQ_RESULT_RETURN_BDADDR : 1287 `p_ba2¡r (( bdaddr_t *è ý -> cÚd™iÚ , addr ); 1288 `´štf (" w™h bdadd¸%s\n", addr ); 1291 `´štf ("\n"); 1295  FLT_CONN_SETUP : 1296 `p_šd’t ( Ëv– , äm ); 1297 `´štf ("Connection setup"); 1298  ý -> cÚd_ty³ ) { 1299  CONN_SETUP_ALLOW_ALL : 1300  CONN_SETUP_ALLOW_CLASS : 1301  CONN_SETUP_ALLOW_BDADDR : 1303 `´štf ("\n"); 1308 } } 1310  šlše  $wr™e_pš_ty³_dump ( Ëv– ,  äame * äm ) 1312 wr™e_pš_ty³_ý * ý = äm -> ±r ; 1314 `p_šd’t ( Ëv– , äm ); 1315 `´štf ("ty³ %d\n", ý -> pš_ty³ ); 1316 } } 1318  šlše  $»que¡_¡Üed_lšk_key_dump ( Ëv– ,  äame * äm ) 1320 »ad_¡Üed_lšk_key_ý * ý = äm -> ±r ; 1321  addr [18]; 1323 `p_šd’t ( Ëv– , äm ); 1324 `p_ba2¡r (& ý -> bdaddr , addr ); 1325 `´štf ("bdadd¸% ®È%d\n", addr , ý -> »ad_®l ); 1326 } } 1328  šlše  $»tuº_lšk_keys_dump ( Ëv– ,  äame * äm ) 1330 ušt8_t num = `g‘_u8 ( äm ); 1331 ušt8_t key [16]; 1332  addr [18]; 1333  i , n ; 1335  n = 0;‚ < num ;‚++) { 1336 `p_ba2¡r ( äm -> ±r , addr ); 1337 `memýy ( key , äm -> ±r + 6, 16); 1339 `p_šd’t ( Ëv– , äm ); 1340 `´štf ("bdadd¸% key ", addr ); 1341  i = 0; i < 16; i++) 1342 ià( ·r£r . æags & DUMP_NOVENDOR ) 1343 `´štf ("**"); 1345 `´štf ("%2.2X", key [ i ]); 1346 `´štf ("\n"); 1348 äm -> ±r += 2; 1349 äm -> Ën -= 2; 1351 } } 1353  šlše  $chªge_loÿl_Çme_dump ( Ëv– ,  äame * äm ) 1355 chªge_loÿl_Çme_ý * ý = äm -> ±r ; 1356  Çme [249]; 1357  i ; 1359 `mem£t ( Çme , 0, (name)); 1360  i = 0; i < 248 && ý -> Çme [i]; i++) 1361 ià( `i¥ršt ( ý -> Çme [ i ])) 1362 Çme [ i ] = ý ->name[i]; 1364 Çme [ i ] = '.'; 1366 `p_šd’t ( Ëv– , äm ); 1367 `´štf ("Çm\'%s\'\n", Çme ); 1368 } } 1370  šlše  $wr™e_þass_of_dev_dump ( Ëv– ,  äame * äm ) 1372 wr™e_þass_of_dev_ý * ý = äm -> ±r ; 1374 `p_šd’t ( Ëv– , äm ); 1375 `´štf ("class 0x%2.2x%2.2x%2.2x\n", 1376 ý -> dev_þass [2], cp->dev_class[1], cp->dev_class[0]); 1377 } } 1379  šlše  $wr™e_voiû_£‰šg_dump ( Ëv– ,  äame * äm ) 1381 wr™e_voiû_£‰šg_ý * ý = äm -> ±r ; 1383 `p_šd’t ( Ëv– , äm ); 1384 `´štf ("voiû s‘tšg 0x%4.4x\n", `btohs ( ý -> voiû_£‰šg )); 1385 } } 1387  šlše  $wr™e_cu¼’t_Ÿc_Ïp_dump ( Ëv– ,  äame * äm ) 1389 wr™e_cu¼’t_Ÿc_Ïp_ý * ý = äm -> ±r ; 1390  i ; 1392  i = 0; i < ý -> num_cu¼’t_Ÿc ; i++) { 1393 `p_šd’t ( Ëv– , äm ); 1394 `´štf ("IAC 0x%2.2x%2.2x%2.2x", ý -> Ïp [ i ][2], cp->lap[i][1], cp->lap[i][0]); 1395 ià( ý -> Ïp [ i ][2] == 0x9e && cp->lap[i][1] == 0x8b) { 1396  ý -> Ïp [ i ][0]) { 1398 `´štf (" (Limited Inquiry Access Code)"); 1401 `´štf (" (General Inquiry Access Code)"); 1405 `´štf ("\n"); 1407 } } 1409  šlše  $wr™e_sÿn_’abË_dump ( Ëv– ,  äame * äm ) 1411 ušt8_t ’abË = `g‘_u8 ( äm ); 1413 `p_šd’t ( Ëv– , äm ); 1414 `´štf ("’abË %d\n", ’abË ); 1415 } } 1417  šlše  $wr™e_·ge_timeout_dump ( Ëv– ,  äame * äm ) 1419 wr™e_·ge_timeout_ý * ý = äm -> ±r ; 1421 `p_šd’t ( Ëv– , äm ); 1422 `´štf ("timeouˆ%d\n", `btohs ( ý -> timeout )); 1423 } } 1425  šlše  $wr™e_·ge_aùiv™y_dump ( Ëv– ,  äame * äm ) 1427 wr™e_·ge_aùiv™y_ý * ý = äm -> ±r ; 1429 `p_šd’t ( Ëv– , äm ); 1430 `´štf ("š‹rv® %d wšdow %d\n", `btohs ( ý -> š‹rv® ), btohs(ý-> wšdow )); 1431 } } 1433  šlše  $wr™e_šquœy_sÿn_ty³_dump ( Ëv– ,  äame * äm ) 1435 wr™e_šquœy_sÿn_ty³_ý * ý = äm -> ±r ; 1437 `p_šd’t ( Ëv– , äm ); 1438 `´štf ("ty³ %d\n", ý -> ty³ ); 1439 } } 1441  šlše  $wr™e_šquœy_mode_dump ( Ëv– ,  äame * äm ) 1443 wr™e_šquœy_mode_ý * ý = äm -> ±r ; 1445 `p_šd’t ( Ëv– , äm ); 1446 `´štf ("mod%d\n", ý -> mode ); 1447 } } 1449  šlše  $£t_afh_þassifiÿtiÚ_dump ( Ëv– ,  äame * äm ) 1451 £t_afh_þassifiÿtiÚ_ý * ý = äm -> ±r ; 1452  i ; 1454 `p_šd’t ( Ëv– , äm ); 1455 `´štf ("map 0x"); 1456  i = 0; i < 10; i++) 1457 `´štf ("%02x", ý -> m­ [ i ]); 1458 `´štf ("\n"); 1459 } } 1461  šlše  $wr™e_lšk_su³rvisiÚ_timeout_dump ( Ëv– ,  äame * äm ) 1463 wr™e_lšk_su³rvisiÚ_timeout_ý * ý = äm -> ±r ; 1465 `p_šd’t ( Ëv– , äm ); 1466 `´štf ("handle %dimeout %d\n", 1467 `btohs ( ý -> hªdË ), btohs(ý-> timeout )); 1468 } } 1470  šlše  $wr™e_ext_šquœy_»¥Ú£_dump ( Ëv– ,  äame * äm ) 1472 wr™e_ext_šquœy_»¥Ú£_ý * ý = äm -> ±r ; 1474 `p_šd’t ( Ëv– , äm ); 1475 `´štf ("ãø0x%2.2x\n", ý -> ãc ); 1477 äm -> ±r ++; 1478 äm -> Ën --; 1480 `ext_šquœy_»¥Ú£_dump ( Ëv– , äm ); 1481 } } 1483  šlše  $wr™e_šquœy_Œªsm™_pow”_Ëv–_dump ( Ëv– ,  äame * äm ) 1485 wr™e_šquœy_Œªsm™_pow”_Ëv–_ý * ý = äm -> ±r ; 1487 `p_šd’t ( Ëv– , äm ); 1488 `´štf ("Ëv– %d\n", ý -> Ëv– ); 1489 } } 1491  šlše  $wr™e_deçuÉ_”rÜ_d©a_»pÜtšg_dump ( Ëv– ,  äame * äm ) 1493 wr™e_deçuÉ_”rÜ_d©a_»pÜtšg_ý * ý = äm -> ±r ; 1495 `p_šd’t ( Ëv– , äm ); 1496 `´štf ("»pÜtšg %d\n", ý -> »pÜtšg ); 1497 } } 1499  šlše  $’hªûd_æush_dump ( Ëv– ,  äame * äm ) 1501 ’hªûd_æush_ý * ý = äm -> ±r ; 1503 `p_šd’t ( Ëv– , äm ); 1504 `´štf ("hªdË %dy³ %d\n", `btohs ( ý -> hªdË ), cp-> ty³ ); 1505 } } 1507  šlše  $£nd_key´ess_nÙify_dump ( Ëv– ,  äame * äm ) 1509 £nd_key´ess_nÙify_ý * ý = äm -> ±r ; 1510  addr [18]; 1512 `p_šd’t ( Ëv– , äm ); 1513 `p_ba2¡r (& ý -> bdaddr , addr ); 1514 `´štf ("bdadd¸% ty³ %d\n", addr , ý -> ty³ ); 1515 } } 1517  šlše  $»que¡_Œªsm™_pow”_Ëv–_dump ( Ëv– ,  äame * äm ) 1519 »ad_Œªsm™_pow”_Ëv–_ý * ý = äm -> ±r ; 1521 `p_šd’t ( Ëv– , äm ); 1522 `´štf ("handle %dype %d (%s)\n", 1523 `btohs ( ý -> hªdË ), cp-> ty³ , 1524 ý -> ty³ ? "maximum" : "current"); 1525 } } 1527  šlše  $»que¡_loÿl_ext_ã©u»s_dump ( Ëv– ,  äame * äm ) 1529 »ad_loÿl_ext_ã©u»s_ý * ý = äm -> ±r ; 1531 `p_šd’t ( Ëv– , äm ); 1532 `´štf ("·g%d\n", ý -> ·ge_num ); 1533 } } 1535  šlše  $»que¡_þock_dump ( Ëv– ,  äame * äm ) 1537 »ad_þock_ý * ý = äm -> ±r ; 1539 `p_šd’t ( Ëv– , äm ); 1540 `´štf ("handle %d which %d (%s)\n", 1541 `btohs ( ý -> hªdË ), cp-> which_þock , 1542 ý -> which_þock ? "piconet" : "local"); 1543 } } 1545  šlše  $ho¡_bufãr_size_dump ( Ëv– ,  äame * äm ) 1547 ho¡_bufãr_size_ý * ý = äm -> ±r ; 1549 `p_šd’t ( Ëv– , äm ); 1550 `´štf ("ACL MTU %d:%d SCO MTU %d:%d\n", 1551 `btohs ( ý -> aþ_mtu ), btohs(ý-> aþ_max_pkt ), 1552 ý -> sco_mtu , `btohs (ý-> sco_max_pkt )); 1553 } } 1555  šlše  $num_comp_pkts_dump ( Ëv– ,  äame * äm ) 1557 ušt8_t num = `g‘_u8 ( äm ); 1558 ušt16_t hªdË , ·ck‘s ; 1559  i ; 1561  i = 0; i < num ; i++) { 1562 hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 1563 ·ck‘s = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 1565 `p_šd’t ( Ëv– , äm ); 1566 `´štf ("hªdË %d…ack‘ %d\n", hªdË , ·ck‘s ); 1568 } } 1570  šlše  $Ë_ü—‹_cÚÃùiÚ_dump ( Ëv– ,  äame * äm ) 1572  addr [18]; 1573 Ë_ü—‹_cÚÃùiÚ_ý * ý = äm -> ±r ; 1575 `p_šd’t ( Ëv– , äm ); 1576 `p_ba2¡r (& ý -> ³”_bdaddr , addr ); 1577 `´štf ("bdadd¸% ty³ %d\n", addr , ý -> ³”_bdaddr_ty³ ); 1578 `p_šd’t ( Ëv– , äm ); 1579 `´štf ("interval %u window %u initiator_filter %u\n", 1580 `btohs ( ý -> š‹rv® ), btohs(ý-> wšdow ), cp-> š™ŸtÜ_fž‹r ); 1581 `p_šd’t ( Ëv– , äm ); 1582 `´štf ("own_bdaddr_type %u min_interval %u max_interval %u\n", 1583 ý -> own_bdaddr_ty³ , `btohs (ý-> mš_š‹rv® ), 1584 `btohs ( ý -> max_š‹rv® )); 1585 `p_šd’t ( Ëv– , äm ); 1586 `´štf ("latency %u supervision_to %u min_ce %u max_ce %u\n", 1587 `btohs ( ý -> Ï‹ncy ), btohs(ý-> su³rvisiÚ_timeout ), 1588 `btohs ( ý -> mš_û_Ëngth ), btohs(ý-> max_û_Ëngth )); 1589 } } 1591  šlše  $Ë_£t_ev’t_mask_dump ( Ëv– ,  äame * äm ) 1593  i ; 1594 Ë_£t_ev’t_mask_ý * ý = äm -> ±r ; 1596 `p_šd’t ( Ëv– , äm ); 1597 `´štf ("mask 0x"); 1598  i = 0; i < 8; i++) 1599 `´štf ("%.2x", ý -> mask [ i ]); 1601 `´štf (" (%s)\n", `ev’tmask2¡r ( ý -> mask )); 1602 } } 1604  šlše  $Ë_£t_¿ndom_add»ss_dump ( Ëv– ,  äame * äm ) 1606  addr [18]; 1607 Ë_£t_¿ndom_add»ss_ý * ý = äm -> ±r ; 1609 `p_šd’t ( Ëv– , äm ); 1610 `p_ba2¡r (& ý -> bdaddr , addr ); 1611 `´štf ("bdadd¸%s\n", addr ); 1612 } } 1615  šlše  $Ë_£t_adv”tisšg_·¿m‘”s_dump ( Ëv– ,  äame * äm ) 1617  addr [18]; 1618 Ë_£t_adv”tisšg_·¿m‘”s_ý * ý = äm -> ±r ; 1620 `p_šd’t ( Ëv– , äm ); 1621 `´štf ("mš %.3fms, max %.3fms\n", `btohs ( ý -> mš_š‹rv® ) * 0.625, 1622 `btohs ( ý -> max_š‹rv® ) * 0.625); 1624 `p_šd’t ( Ëv– , äm ); 1625 `´štf ("ty³ 0x%02x (%sèownbdadd¸0x%02x (%s)\n", ý -> advty³ , 1626 `ev‰y³2¡r ( ý -> advty³ ), cp-> own_bdaddr_ty³ , 1627 `bdadd¹y³2¡r ( ý -> own_bdaddr_ty³ )); 1629 `p_šd’t ( Ëv– , äm ); 1630 `p_ba2¡r (& ý -> dœeù_bdaddr , addr ); 1631 `´štf ("dœeùbdadd¸0x%02x (%sè%s\n", ý -> dœeù_bdaddr_ty³ , 1632 `bdadd¹y³2¡r ( ý -> dœeù_bdaddr_ty³ ), addr ); 1634 `p_šd’t ( Ëv– , äm ); 1635 `´štf ("channelmap 0x%02x filterpolicy 0x%02x (%s)\n", 1636 ý -> chª_m­ , cp-> fž‹r , `fž‹½Þicy2¡r (cp->filter)); 1637 } } 1639  šlše  $Ë_£t_sÿn_·¿m‘”s_dump ( Ëv– ,  äame * äm ) 1641 Ë_£t_sÿn_·¿m‘”s_ý * ý = äm -> ±r ; 1643 `p_šd’t ( Ëv– , äm ); 1644 `´štf ("ty³ 0x%02x (%s)\n", ý -> ty³ , 1645 ý -> ty³ == 0x00 ? "passive" : "active"); 1647 `p_šd’t ( Ëv– , äm ); 1648 `´štf ("š‹rv® %.3fm wšdow %.3fms\n", `btohs ( ý -> š‹rv® ) * 0.625, 1649 `btohs ( ý -> wšdow ) * 0.625); 1651 `p_šd’t ( Ëv– , äm ); 1652 `´štf ("owÀadd»ss: 0x%02x (%sèpÞicy: %s\n", ý -> own_bdaddr_ty³ , 1653 `bdadd¹y³2¡r ( ý -> own_bdaddr_ty³ ), 1654 ( ý -> fž‹r == 0x00 ? "All" : 1655 ( ý -> fž‹r == 0x01 ? "white†ist only" : "reserved"))); 1656 } } 1658  šlše  $Ë_£t_sÿn_’abË_dump ( Ëv– ,  äame * äm ) 1660 Ë_£t_sÿn_’abË_ý * ý = äm -> ±r ; 1662 `p_šd’t ( Ëv– , äm ); 1663 `´štf ("v®u0x%02x (%s)\n", ý -> ’abË , 1664 ( ý -> ’abË == 0x00 ? "scanning disabled" : 1667 `p_šd’t ( Ëv– , äm ); 1668 `´štf ("fž‹¸du¶iÿ‹ 0x%02x (%s)\n", ý -> fž‹r_dup , 1669 ( ý -> fž‹r_dup == 0x00 ? "disabled" : "enabled")); 1670 } } 1672  šlše  $wr™e_»mÙe_amp_assoc_cmd_dump ( Ëv– , 1673  äame * äm ) 1675 wr™e_»mÙe_amp_assoc_ý * ý = äm -> ±r ; 1677 `p_šd’t ( Ëv– , äm ); 1678 `´štf ("hªdË 0x%2.2x†’_so_ç¸%d„emaššg_ËÀ%d\n", ý -> hªdË , 1679 ý -> Ëngth_so_çr , cp-> »maššg_Ëngth ); 1681 `amp_assoc_dump ( Ëv– + 1, ý -> äagm’t , äm -> Ën - 5); 1682 } } 1684  šlše  $commªd_dump ( Ëv– ,  äame * äm ) 1686 hci_commªd_hdr * hdr = äm -> ±r ; 1687 ušt16_t Ýcode = `btohs ( hdr ->opcode); 1688 ušt16_t ogf = `cmd_Ýcode_ogf ( Ýcode ); 1689 ušt16_t ocf = `cmd_Ýcode_ocf ( Ýcode ); 1691 ià( `p_fž‹r ( FILT_HCI )) 1694 ià( ogf =ð OGF_VENDOR_CMD && ( ·r£r . æags & DUMP_NOVENDOR )) 1697 `p_šd’t ( Ëv– , äm ); 1698 `´štf ("HCI Command: %s (0x%2.2x|0x%4.4x)…len %d\n", 1699 `Ýcode2¡r ( Ýcode ), ogf , ocf , hdr -> ¶’ ); 1701 äm -> ±r +ð HCI_COMMAND_HDR_SIZE ; 1702 äm -> Ën -ð HCI_COMMAND_HDR_SIZE ; 1704 ià( ogf =ð OGF_VENDOR_CMD ) { 1705 ià( ocf =ð0 && `g‘_mªuçùu»r () == 10) { 1706 `c¤_dump ( Ëv– + 1, äm ); 1711 ià(!( ·r£r . æags & DUMP_VERBOSE )) { 1712 `¿w_dump ( Ëv– , äm ); 1716  ogf ) { 1717  OGF_LINK_CTL : 1718  ocf ) { 1719  OCF_INQUIRY : 1720 `šquœy_dump ( Ëv– + 1, äm ); 1722  OCF_PERIODIC_INQUIRY : 1723 `³riodic_šquœy_dump ( Ëv– + 1, äm ); 1725  OCF_INQUIRY_CANCEL : 1726  OCF_EXIT_PERIODIC_INQUIRY : 1728  OCF_CREATE_CONN : 1729 `ü—‹_cÚn_dump ( Ëv– + 1, äm ); 1731  OCF_DISCONNECT : 1732 `discÚÃù_dump ( Ëv– + 1, äm ); 1734  OCF_CREATE_CONN_CANCEL : 1735  OCF_REMOTE_NAME_REQ_CANCEL : 1736  OCF_ACCEPT_SYNC_CONN_REQ : 1737 `bdaddr_commªd_dump ( Ëv– + 1, äm ); 1739  OCF_ADD_SCO : 1740  OCF_SET_CONN_PTYPE : 1741 `add_sco_dump ( Ëv– + 1, äm ); 1743  OCF_ACCEPT_CONN_REQ : 1744 `acû±_cÚn_»q_dump ( Ëv– + 1, äm ); 1746  OCF_REJECT_CONN_REQ : 1747  OCF_REJECT_SYNC_CONN_REQ : 1748  OCF_IO_CAPABILITY_NEG_REPLY : 1749 `»jeù_cÚn_»q_dump ( Ëv– + 1, äm ); 1751  OCF_PIN_CODE_REPLY : 1752 `pš_code_»¶y_dump ( Ëv– + 1, äm ); 1754  OCF_LINK_KEY_REPLY : 1755 `lšk_key_»¶y_dump ( Ëv– + 1, äm ); 1757  OCF_PIN_CODE_NEG_REPLY : 1758  OCF_LINK_KEY_NEG_REPLY : 1759  OCF_USER_CONFIRM_REPLY : 1760  OCF_USER_CONFIRM_NEG_REPLY : 1761  OCF_USER_PASSKEY_NEG_REPLY : 1762  OCF_REMOTE_OOB_DATA_NEG_REPLY : 1763 `pš_code_Ãg_»¶y_dump ( Ëv– + 1, äm ); 1765  OCF_USER_PASSKEY_REPLY : 1766 `u£r_·sskey_»¶y_dump ( Ëv– + 1, äm ); 1768  OCF_REMOTE_OOB_DATA_REPLY : 1769 `»mÙe_oob_d©a_»¶y_dump ( Ëv– + 1, äm ); 1771  OCF_IO_CAPABILITY_REPLY : 1772 `io_ÿ·bž™y_»¶y_dump ( Ëv– + 1, äm ); 1774  OCF_SET_CONN_ENCRYPT : 1775 `£t_cÚn_’üy±_dump ( Ëv– + 1, äm ); 1777  OCF_AUTH_REQUESTED : 1778  OCF_CHANGE_CONN_LINK_KEY : 1779  OCF_READ_REMOTE_FEATURES : 1780  OCF_READ_REMOTE_VERSION : 1781  OCF_READ_CLOCK_OFFSET : 1782  OCF_READ_LMP_HANDLE : 1783  OCF_DISCONNECT_LOGICAL_LINK : 1784 `g’”ic_commªd_dump ( Ëv– + 1, äm ); 1786  OCF_MASTER_LINK_KEY : 1787 `ma¡”_lšk_key_dump ( Ëv– + 1, äm ); 1789  OCF_READ_REMOTE_EXT_FEATURES : 1790 `»ad_»mÙe_ext_ã©u»s_dump ( Ëv– + 1, äm ); 1792  OCF_REMOTE_NAME_REQ : 1793 `»mÙe_Çme_»q_dump ( Ëv– + 1, äm ); 1795  OCF_SETUP_SYNC_CONN : 1796 `£tup_sync_cÚn_dump ( Ëv– + 1, äm ); 1798  OCF_CREATE_PHYSICAL_LINK : 1799  OCF_ACCEPT_PHYSICAL_LINK : 1800 `ü—‹_physiÿl_lšk_dump ( Ëv– + 1, äm ); 1802  OCF_CREATE_LOGICAL_LINK : 1803  OCF_ACCEPT_LOGICAL_LINK : 1804 `ü—‹_logiÿl_lšk_dump ( Ëv– + 1, äm ); 1809  OGF_LINK_POLICY : 1810  ocf ) { 1811  OCF_HOLD_MODE : 1812  OCF_PARK_MODE : 1813 `hÞd_mode_dump ( Ëv– + 1, äm ); 1815  OCF_SNIFF_MODE : 1816 `¢iff_mode_dump ( Ëv– + 1, äm ); 1818  OCF_EXIT_SNIFF_MODE : 1819  OCF_EXIT_PARK_MODE : 1820  OCF_ROLE_DISCOVERY : 1821  OCF_READ_LINK_POLICY : 1822 `g’”ic_commªd_dump ( Ëv– + 1, äm ); 1824  OCF_READ_DEFAULT_LINK_POLICY : 1826  OCF_SWITCH_ROLE : 1827 `acû±_cÚn_»q_dump ( Ëv– + 1, äm ); 1829  OCF_QOS_SETUP : 1830 `qos_£tup_dump ( Ëv– + 1, äm ); 1832  OCF_WRITE_LINK_POLICY : 1833 `wr™e_lšk_pÞicy_dump ( Ëv– + 1, äm ); 1835  OCF_WRITE_DEFAULT_LINK_POLICY : 1836 `wr™e_deçuÉ_lšk_pÞicy_dump ( Ëv– + 1, äm ); 1838  OCF_SNIFF_SUBRATING : 1839 `¢iff_sub¿tšg_dump ( Ëv– + 1, äm ); 1844  OGF_HOST_CTL : 1845  ocf ) { 1846  OCF_RESET : 1847  OCF_CREATE_NEW_UNIT_KEY : 1849  OCF_SET_EVENT_MASK : 1850  OCF_SET_EVENT_MASK_PAGE_2 : 1851 `£t_ev’t_mask_dump ( Ëv– + 1, äm ); 1853  OCF_SET_EVENT_FLT : 1854 `£t_ev’t_æt_dump ( Ëv– + 1, äm ); 1856  OCF_WRITE_PIN_TYPE : 1857 `wr™e_pš_ty³_dump ( Ëv– + 1, äm ); 1859  OCF_READ_STORED_LINK_KEY : 1860  OCF_DELETE_STORED_LINK_KEY : 1861 `»que¡_¡Üed_lšk_key_dump ( Ëv– + 1, äm ); 1863  OCF_WRITE_STORED_LINK_KEY : 1864 `»tuº_lšk_keys_dump ( Ëv– + 1, äm ); 1866  OCF_CHANGE_LOCAL_NAME : 1867 `chªge_loÿl_Çme_dump ( Ëv– + 1, äm ); 1869  OCF_WRITE_CLASS_OF_DEV : 1870 `wr™e_þass_of_dev_dump ( Ëv– + 1, äm ); 1872  OCF_WRITE_VOICE_SETTING : 1873 `wr™e_voiû_£‰šg_dump ( Ëv– + 1, äm ); 1875  OCF_WRITE_CURRENT_IAC_LAP : 1876 `wr™e_cu¼’t_Ÿc_Ïp_dump ( Ëv– + 1, äm ); 1878  OCF_WRITE_SCAN_ENABLE : 1879  OCF_WRITE_AUTH_ENABLE : 1880  OCF_SET_CONTROLLER_TO_HOST_FC : 1881 `wr™e_sÿn_’abË_dump ( Ëv– + 1, äm ); 1883  OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT : 1884  OCF_WRITE_CONN_ACCEPT_TIMEOUT : 1885  OCF_WRITE_PAGE_TIMEOUT : 1886 `wr™e_·ge_timeout_dump ( Ëv– + 1, äm ); 1888  OCF_WRITE_PAGE_ACTIVITY : 1889  OCF_WRITE_INQ_ACTIVITY : 1890 `wr™e_·ge_aùiv™y_dump ( Ëv– + 1, äm ); 1892  OCF_WRITE_INQUIRY_SCAN_TYPE : 1893 `wr™e_šquœy_sÿn_ty³_dump ( Ëv– + 1, äm ); 1895  OCF_WRITE_ENCRYPT_MODE : 1896  OCF_WRITE_INQUIRY_MODE : 1897  OCF_WRITE_AFH_MODE : 1898 `wr™e_šquœy_mode_dump ( Ëv– + 1, äm ); 1900  OCF_SET_AFH_CLASSIFICATION : 1901 `£t_afh_þassifiÿtiÚ_dump ( Ëv– + 1, äm ); 1903  OCF_READ_TRANSMIT_POWER_LEVEL : 1904 `»que¡_Œªsm™_pow”_Ëv–_dump ( Ëv– + 1, äm ); 1906  OCF_HOST_BUFFER_SIZE : 1907 `ho¡_bufãr_size_dump ( Ëv– + 1, äm ); 1909  OCF_HOST_NUM_COMP_PKTS : 1910 `num_comp_pkts_dump ( Ëv– + 1, äm ); 1912  OCF_FLUSH : 1913  OCF_READ_LINK_SUPERVISION_TIMEOUT : 1914  OCF_REFRESH_ENCRYPTION_KEY : 1915  OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT : 1916 `g’”ic_commªd_dump ( Ëv– + 1, äm ); 1918  OCF_WRITE_LINK_SUPERVISION_TIMEOUT : 1919 `wr™e_lšk_su³rvisiÚ_timeout_dump ( Ëv– + 1, äm ); 1921  OCF_WRITE_EXT_INQUIRY_RESPONSE : 1922 `wr™e_ext_šquœy_»¥Ú£_dump ( Ëv– + 1, äm ); 1924  OCF_WRITE_SIMPLE_PAIRING_MODE : 1925  OCF_WRITE_FLOW_CONTROL_MODE : 1926 `g’”ic_wr™e_mode_dump ( Ëv– + 1, äm ); 1928  OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL : 1929 `wr™e_šquœy_Œªsm™_pow”_Ëv–_dump ( Ëv– + 1, äm ); 1931  OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING : 1932 `wr™e_deçuÉ_”rÜ_d©a_»pÜtšg_dump ( Ëv– + 1, äm ); 1934  OCF_ENHANCED_FLUSH : 1935 `’hªûd_æush_dump ( Ëv– + 1, äm ); 1937  OCF_SEND_KEYPRESS_NOTIFY : 1938 `£nd_key´ess_nÙify_dump ( Ëv– + 1, äm ); 1943  OGF_INFO_PARAM : 1944  ocf ) { 1945  OCF_READ_LOCAL_EXT_FEATURES : 1946 `»que¡_loÿl_ext_ã©u»s_dump ( Ëv– + 1, äm ); 1951  OGF_STATUS_PARAM : 1952  ocf ) { 1953  OCF_READ_LINK_QUALITY : 1954  OCF_READ_RSSI : 1955  OCF_READ_AFH_MAP : 1956 `g’”ic_commªd_dump ( Ëv– + 1, äm ); 1958  OCF_READ_CLOCK : 1959 `»que¡_þock_dump ( Ëv– + 1, äm ); 1961  OCF_WRITE_REMOTE_AMP_ASSOC : 1962 `wr™e_»mÙe_amp_assoc_cmd_dump ( Ëv– + 1, äm ); 1967  OGF_TESTING_CMD : 1968  ocf ) { 1969  OCF_WRITE_LOOPBACK_MODE : 1970  OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE : 1971 `g’”ic_wr™e_mode_dump ( Ëv– + 1, äm ); 1976  OGF_LE_CTL : 1977  ocf ) { 1978  OCF_LE_SET_EVENT_MASK : 1979 `Ë_£t_ev’t_mask_dump ( Ëv– + 1, äm ); 1981  OCF_LE_READ_BUFFER_SIZE : 1982  OCF_LE_READ_LOCAL_SUPPORTED_FEATURES : 1983  OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER : 1985  OCF_LE_SET_RANDOM_ADDRESS : 1986 `Ë_£t_¿ndom_add»ss_dump ( Ëv– + 1, äm ); 1988  OCF_LE_SET_ADVERTISING_PARAMETERS : 1989 `Ë_£t_adv”tisšg_·¿m‘”s_dump ( Ëv– + 1, äm ); 1991  OCF_LE_SET_SCAN_PARAMETERS : 1992 `Ë_£t_sÿn_·¿m‘”s_dump ( Ëv– + 1, äm ); 1994  OCF_LE_SET_SCAN_ENABLE : 1995 `Ë_£t_sÿn_’abË_dump ( Ëv– + 1, äm ); 1997  OCF_LE_CREATE_CONN : 1998 `Ë_ü—‹_cÚÃùiÚ_dump ( Ëv– + 1, äm ); 2004 `¿w_dump ( Ëv– , äm ); 2005 } } 2007  šlše  $¡©us_»¥Ú£_dump ( Ëv– ,  äame * äm ) 2009 ušt8_t ¡©us = `g‘_u8 ( äm ); 2011 `p_šd’t ( Ëv– , äm ); 2012 `´štf ("¡©u 0x%2.2x\n", ¡©us ); 2014 ià( ¡©us > 0) { 2015 `p_šd’t ( Ëv– , äm ); 2016 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ¡©us )); 2019 `¿w_dump ( Ëv– , äm ); 2020 } } 2022  šlše  $hªdË_»¥Ú£_dump ( Ëv– ,  äame * äm ) 2024 ušt16_t hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 2026 `p_šd’t ( Ëv– , äm ); 2027 `´štf ("hªdË %d\n", hªdË ); 2029 `¿w_dump ( Ëv– , äm ); 2030 } } 2032  šlše  $bdaddr_»¥Ú£_dump ( Ëv– ,  äame * äm ) 2034 ušt8_t ¡©us = `g‘_u8 ( äm ); 2035 bdaddr_t * bdaddr = äm -> ±r ; 2036  addr [18]; 2038 äm -> ±r +ð( bdaddr_t ); 2039 äm -> Ën -ð( bdaddr_t ); 2041 `p_šd’t ( Ëv– , äm ); 2042 `p_ba2¡r ( bdaddr , addr ); 2043 `´štf ("¡©u 0x%2.2x bdadd¸%s\n", ¡©us , addr ); 2045 ià( ¡©us > 0) { 2046 `p_šd’t ( Ëv– , äm ); 2047 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ¡©us )); 2050 `¿w_dump ( Ëv– , äm ); 2051 } } 2053  šlše  $»ad_d©a_block_size_dump ( Ëv– ,  äame * äm ) 2055 »ad_d©a_block_size_½ * ½ = äm -> ±r ; 2057 `p_šd’t ( Ëv– , äm ); 2058 `´štf ("¡©u 0x%2.2x\n", ½ -> ¡©us ); 2060 ià( ½ -> ¡©us > 0) { 2061 `p_šd’t ( Ëv– , äm ); 2062 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2064 `p_šd’t ( Ëv– , äm ); 2065 `´štf ("Max ACL %d Block†en %d Num blocks %d\n", 2066 `btohs ( ½ -> max_aþ_Ën ), btohsÔp-> d©a_block_Ën ), 2067 `btohs ( ½ -> num_blocks )); 2069 } } 2071  šlše  $g’”ic_»¥Ú£_dump ( Ëv– ,  äame * äm ) 2073 ušt8_t ¡©us = `g‘_u8 ( äm ); 2074 ušt16_t hªdË = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 2076 `p_šd’t ( Ëv– , äm ); 2077 `´štf ("¡©u 0x%2.2x hªdË %d\n", ¡©us , hªdË ); 2079 ià( ¡©us > 0) { 2080 `p_šd’t ( Ëv– , äm ); 2081 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ¡©us )); 2084 `¿w_dump ( Ëv– , äm ); 2085 } } 2087  šlše  $¡©us_mode_dump ( Ëv– ,  äame * äm ) 2089 ušt8_t ¡©us = `g‘_u8 ( äm ); 2090 ušt8_t mode = `g‘_u8 ( äm ); 2092 `p_šd’t ( Ëv– , äm ); 2093 `´štf ("¡©u 0x%2.2x mod0x%2.2x\n", ¡©us , mode ); 2095 ià( ¡©us > 0) { 2096 `p_šd’t ( Ëv– , äm ); 2097 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ¡©us )); 2099 } } 2101  šlše  $»ad_lšk_pÞicy_dump ( Ëv– ,  äame * äm ) 2103 »ad_lšk_pÞicy_½ * ½ = äm -> ±r ; 2104 ušt16_t pÞicy = `btohs ( ½ ->policy); 2105 * ¡r ; 2107 `p_šd’t ( Ëv– , äm ); 2108 `´štf ("status 0x%2.2x handle %d…olicy 0x%2.2x\n", 2109 ½ -> ¡©us , `btohs Ôp-> hªdË ), pÞicy ); 2111 ià( ½ -> ¡©us > 0) { 2112 `p_šd’t ( Ëv– , äm ); 2113 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2115 ¡r = `hci_Íto¡r ( pÞicy ); 2116 ià( ¡r ) { 2117 `p_šd’t ( Ëv– , äm ); 2118 `´štf ("Lšk…Þicy: %s\n", ¡r ); 2119 `ä“ ( ¡r ); 2122 } } 2124  šlše  $»ad_deçuÉ_lšk_pÞicy_dump ( Ëv– ,  äame * äm ) 2126 ušt8_t ¡©us = `g‘_u8 ( äm ); 2127 ušt16_t pÞicy = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 2128 * ¡r ; 2130 `p_šd’t ( Ëv– , äm ); 2131 `´štf ("¡©u 0x%2.2x…Þicy 0x%2.2x\n", ¡©us , pÞicy ); 2133 ià( ¡©us > 0) { 2134 `p_šd’t ( Ëv– , äm ); 2135 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ¡©us )); 2137 ¡r = `hci_Íto¡r ( pÞicy ); 2138 ià( ¡r ) { 2139 `p_šd’t ( Ëv– , äm ); 2140 `´štf ("Lšk…Þicy: %s\n", ¡r ); 2141 `ä“ ( ¡r ); 2144 } } 2146  šlše  $»ad_pš_ty³_dump ( Ëv– ,  äame * äm ) 2148 »ad_pš_ty³_½ * ½ = äm -> ±r ; 2150 `p_šd’t ( Ëv– , äm ); 2151 `´štf ("¡©u 0x%2.2xy³ %d\n", ½ -> ¡©us ,„p-> pš_ty³ ); 2153 ià( ½ -> ¡©us > 0) { 2154 `p_šd’t ( Ëv– , äm ); 2155 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2157 } } 2159  šlše  $»ad_¡Üed_lšk_key_dump ( Ëv– ,  äame * äm ) 2161 »ad_¡Üed_lšk_key_½ * ½ = äm -> ±r ; 2163 `p_šd’t ( Ëv– , äm ); 2164 `´štf ("status 0x%2.2x max %d‚um %d\n", 2165 ½ -> ¡©us ,„p-> max_keys ,„p-> num_keys ); 2167 ià( ½ -> ¡©us > 0) { 2168 `p_šd’t ( Ëv– , äm ); 2169 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2171 } } 2173  šlše  $wr™e_¡Üed_lšk_key_dump ( Ëv– ,  äame * äm ) 2175 wr™e_¡Üed_lšk_key_½ * ½ = äm -> ±r ; 2177 `p_šd’t ( Ëv– , äm ); 2178 `´štf ("¡©u 0x%2.2x wr™‹À%d\n", ½ -> ¡©us ,„p-> num_keys ); 2180 ià( ½ -> ¡©us > 0) { 2181 `p_šd’t ( Ëv– , äm ); 2182 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2184 } } 2186  šlše  $d–‘e_¡Üed_lšk_key_dump ( Ëv– ,  äame * äm ) 2188 d–‘e_¡Üed_lšk_key_½ * ½ = äm -> ±r ; 2190 `p_šd’t ( Ëv– , äm ); 2191 `´štf ("¡©u 0x%2.2x d–‘ed %d\n", ½ -> ¡©us , `btohs Ôp-> num_keys )); 2193 ià( ½ -> ¡©us > 0) { 2194 `p_šd’t ( Ëv– , äm ); 2195 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2197 } } 2199  šlše  $»ad_loÿl_Çme_dump ( Ëv– ,  äame * äm ) 2201 »ad_loÿl_Çme_½ * ½ = äm -> ±r ; 2202  Çme [249]; 2203  i ; 2205 `mem£t ( Çme , 0, (name)); 2206  i = 0; i < 248 && ½ -> Çme [i]; i++) 2207 ià( `i¥ršt ( ½ -> Çme [ i ])) 2208 Çme [ i ] = ½ ->name[i]; 2210 Çme [ i ] = '.'; 2212 `p_šd’t ( Ëv– , äm ); 2213 `´štf ("¡©u 0x%2.2x‚am\'%s\'\n", ½ -> ¡©us , Çme ); 2215 ià( ½ -> ¡©us > 0) { 2216 `p_šd’t ( Ëv– , äm ); 2217 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2219 } } 2221  šlše  $»ad_þass_of_dev_dump ( Ëv– ,  äame * äm ) 2223 »ad_þass_of_dev_½ * ½ = äm -> ±r ; 2225 `p_šd’t ( Ëv– , äm ); 2226 `´štf ("¡©u 0x%2.2x cÏs 0x%2.2x%2.2x%2.2x\n", ½ -> ¡©us , 2227 ½ -> dev_þass [2],„p->dev_class[1],„p->dev_class[0]); 2229 ià( ½ -> ¡©us > 0) { 2230 `p_šd’t ( Ëv– , äm ); 2231 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2233 } } 2235  šlše  $»ad_voiû_£‰šg_dump ( Ëv– ,  äame * äm ) 2237 »ad_voiû_£‰šg_½ * ½ = äm -> ±r ; 2239 `p_šd’t ( Ëv– , äm ); 2240 `´štf ("status 0x%2.2x voice setting 0x%4.4x\n", 2241 ½ -> ¡©us , `btohs Ôp-> voiû_£‰šg )); 2243 ià( ½ -> ¡©us > 0) { 2244 `p_šd’t ( Ëv– , äm ); 2245 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2247 } } 2249  šlše  $»ad_cu¼’t_Ÿc_Ïp_dump ( Ëv– ,  äame * äm ) 2251 »ad_cu¼’t_Ÿc_Ïp_½ * ½ = äm -> ±r ; 2252  i ; 2254  i = 0; i < ½ -> num_cu¼’t_Ÿc ; i++) { 2255 `p_šd’t ( Ëv– , äm ); 2256 `´štf ("IAC 0x%2.2x%2.2x%2.2x", ½ -> Ïp [ i ][2],„p->lap[i][1],„p->lap[i][0]); 2257 ià( ½ -> Ïp [ i ][2] == 0x9e &&„p->lap[i][1] == 0x8b) { 2258  ½ -> Ïp [ i ][0]) { 2260 `´štf (" (Limited Inquiry Access Code)"); 2263 `´štf (" (General Inquiry Access Code)"); 2267 `´štf ("\n"); 2269 } } 2271  šlše  $»ad_sÿn_’abË_dump ( Ëv– ,  äame * äm ) 2273 ušt8_t ¡©us = `g‘_u8 ( äm ); 2274 ušt8_t ’abË = `g‘_u8 ( äm ); 2276 `p_šd’t ( Ëv– , äm ); 2277 `´štf ("¡©u 0x%2.2xƒÇbË %d\n", ¡©us , ’abË ); 2279 ià( ¡©us > 0) { 2280 `p_šd’t ( Ëv– , äm ); 2281 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ¡©us )); 2283 } } 2285  šlše  $»ad_·ge_timeout_dump ( Ëv– ,  äame * äm ) 2287 »ad_·ge_timeout_½ * ½ = äm -> ±r ; 2289 `p_šd’t ( Ëv– , äm ); 2290 `´štf ("¡©u 0x%2.2ximeouˆ%d\n", ½ -> ¡©us , `btohs Ôp-> timeout )); 2292 ià( ½ -> ¡©us > 0) { 2293 `p_šd’t ( Ëv– , äm ); 2294 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2296 } } 2298  šlše  $»ad_·ge_aùiv™y_dump ( Ëv– ,  äame * äm ) 2300 »ad_·ge_aùiv™y_½ * ½ = äm -> ±r ; 2302 `p_šd’t ( Ëv– , äm ); 2303 `´štf ("status 0x%2.2x interval %d window %d\n", 2304 ½ -> ¡©us , `btohs Ôp-> š‹rv® ), btohsÔp-> wšdow )); 2306 ià( ½ -> ¡©us > 0) { 2307 `p_šd’t ( Ëv– , äm ); 2308 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2310 } } 2312  šlše  $»ad_šquœy_sÿn_ty³_dump ( Ëv– ,  äame * äm ) 2314 »ad_šquœy_sÿn_ty³_½ * ½ = äm -> ±r ; 2316 `p_šd’t ( Ëv– , äm ); 2317 `´štf ("¡©u 0x%2.2xy³ %d\n", ½ -> ¡©us ,„p-> ty³ ); 2319 ià( ½ -> ¡©us > 0) { 2320 `p_šd’t ( Ëv– , äm ); 2321 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2323 } } 2325  šlše  $»ad_šquœy_mode_dump ( Ëv– ,  äame * äm ) 2327 »ad_šquœy_mode_½ * ½ = äm -> ±r ; 2329 `p_šd’t ( Ëv– , äm ); 2330 `´štf ("¡©u 0x%2.2x mod%d\n", ½ -> ¡©us ,„p-> mode ); 2332 ià( ½ -> ¡©us > 0) { 2333 `p_šd’t ( Ëv– , äm ); 2334 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2336 } } 2338  šlše  $»ad_lšk_su³rvisiÚ_timeout_dump ( Ëv– ,  äame * äm ) 2340 »ad_lšk_su³rvisiÚ_timeout_½ * ½ = äm -> ±r ; 2342 `p_šd’t ( Ëv– , äm ); 2343 `´štf ("status 0x%2.2x handle %dimeout %d\n", 2344 ½ -> ¡©us , `btohs Ôp-> hªdË ), btohsÔp-> timeout )); 2346 ià( ½ -> ¡©us > 0) { 2347 `p_šd’t ( Ëv– , äm ); 2348 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2350 } } 2352  šlše  $»ad_Œªsm™_pow”_Ëv–_dump ( Ëv– ,  äame * äm ) 2354 »ad_Œªsm™_pow”_Ëv–_½ * ½ = äm -> ±r ; 2356 `p_šd’t ( Ëv– , äm ); 2357 `´štf ("status 0x%2.2x handle %d†evel %d\n", 2358 ½ -> ¡©us , `btohs Ôp-> hªdË ),„p-> Ëv– ); 2360 ià( ½ -> ¡©us > 0) { 2361 `p_šd’t ( Ëv– , äm ); 2362 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2364 } } 2366  šlše  $»ad_ext_šquœy_»¥Ú£_dump ( Ëv– ,  äame * äm ) 2368 »ad_ext_šquœy_»¥Ú£_½ * ½ = äm -> ±r ; 2370 `p_šd’t ( Ëv– , äm ); 2371 `´štf ("¡©u 0x%2.2x feø0x%2.2x\n", ½ -> ¡©us ,„p-> ãc ); 2373 ià( ½ -> ¡©us > 0) { 2374 `p_šd’t ( Ëv– , äm ); 2375 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2377 äm -> ±r += 2; 2378 äm -> Ën -= 2; 2380 `ext_šquœy_»¥Ú£_dump ( Ëv– , äm ); 2382 } } 2384  šlše  $»ad_šquœy_Œªsm™_pow”_Ëv–_dump ( Ëv– ,  äame * äm ) 2386 »ad_šquœy_Œªsm™_pow”_Ëv–_½ * ½ = äm -> ±r ; 2388 `p_šd’t ( Ëv– , äm ); 2389 `´štf ("¡©u 0x%2.2x†ev– %d\n", ½ -> ¡©us ,„p-> Ëv– ); 2391 ià( ½ -> ¡©us > 0) { 2392 `p_šd’t ( Ëv– , äm ); 2393 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2395 } } 2397  šlše  $»ad_deçuÉ_”rÜ_d©a_»pÜtšg_dump ( Ëv– ,  äame * äm ) 2399 »ad_deçuÉ_”rÜ_d©a_»pÜtšg_½ * ½ = äm -> ±r ; 2401 `p_šd’t ( Ëv– , äm ); 2402 `´štf ("¡©u 0x%2.2x„•Ütšg %d\n", ½ -> ¡©us ,„p-> »pÜtšg ); 2404 ià( ½ -> ¡©us > 0) { 2405 `p_šd’t ( Ëv– , äm ); 2406 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2408 } } 2410  šlše  $»ad_loÿl_oob_d©a_dump ( Ëv– ,  äame * äm ) 2412 »ad_loÿl_oob_d©a_½ * ½ = äm -> ±r ; 2413  i ; 2415 `p_šd’t ( Ëv– , äm ); 2416 `´štf ("¡©u 0x%2.2x\n", ½ -> ¡©us ); 2418 ià( ½ -> ¡©us > 0) { 2419 `p_šd’t ( Ëv– , äm ); 2420 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2422 `p_šd’t ( Ëv– , äm ); 2423 `´štf ("hash 0x"); 2424  i = 0; i < 16; i++) 2425 `´štf ("%02x", ½ -> hash [ i ]); 2426 `´štf ("\n"); 2428 `p_šd’t ( Ëv– , äm ); 2429 `´štf ("randomizer 0x"); 2430  i = 0; i < 16; i++) 2431 `´štf ("%02x", ½ -> ¿ndomiz” [ i ]); 2432 `´štf ("\n"); 2434 } } 2436  šlše  $»ad_loÿl_v”siÚ_dump ( Ëv– ,  äame * äm ) 2438 »ad_loÿl_v”siÚ_½ * ½ = äm -> ±r ; 2439 ušt16_t mªuçùu»r = `btohs ( ½ ->manufacturer); 2441 `p_šd’t ( Ëv– , äm ); 2442 `´štf ("¡©u 0x%2.2x\n", ½ -> ¡©us ); 2444 ià( ½ -> ¡©us > 0) { 2445 `p_šd’t ( Ëv– , äm ); 2446 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2448 * lmpv” = `lmp_v”to¡r ( ½ -> lmp_v” ); 2449 * hciv” = `hci_v”to¡r ( ½ -> hci_v” ); 2451 `p_šd’t ( Ëv– , äm ); 2452 `´štf ("HCI Version: %s (0x%x) HCI Revision: 0x%x\n", 2453 hciv” ? hciver : "n/a", 2454 ½ -> hci_v” , `btohs Ôp-> hci_»v )); 2455 `p_šd’t ( Ëv– , äm ); 2456 `´štf ("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n", 2457 lmpv” ?†mpver : "n/a", 2458 ½ -> lmp_v” , `btohs Ôp-> lmp_subv” )); 2459 `p_šd’t ( Ëv– , äm ); 2460 `´štf ("Manufacturer: %s (%d)\n", 2461 `bt_compidto¡r ( mªuçùu»r ), manufacturer); 2463 ià( lmpv” ) 2464 `ä“ ( lmpv” ); 2465 ià( hciv” ) 2466 `ä“ ( hciv” ); 2468 } } 2470  šlše  $»ad_loÿl_commªds_dump ( Ëv– ,  äame * äm ) 2472 »ad_loÿl_commªds_½ * ½ = äm -> ±r ; 2473  i , max = 0; 2475 `p_šd’t ( Ëv– , äm ); 2476 `´štf ("¡©u 0x%2.2x\n", ½ -> ¡©us ); 2478 ià( ½ -> ¡©us > 0) { 2479 `p_šd’t ( Ëv– , äm ); 2480 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2482  i = 0; i < 64; i++) 2483 ià( ½ -> commªds [ i ]) 2484 max = i + 1; 2485 `p_šd’t ( Ëv– , äm ); 2486 `´štf ("Commands: "); 2487  i = 0; i < ( max > 32 ? 32 : max); i++) 2488 `´štf ("%2.2x", ½ -> commªds [ i ]); 2489 `´štf ("\n"); 2490 ià( max > 32) { 2491 `p_šd’t ( Ëv– , äm ); 2492 `´štf (" "); 2493  i = 32; i < max ; i++) 2494 `´štf ("%2.2x", ½ -> commªds [ i ]); 2495 `´štf ("\n"); 2498 } } 2500  šlše  $»ad_loÿl_ã©u»s_dump ( Ëv– ,  äame * äm ) 2502 »ad_loÿl_ã©u»s_½ * ½ = äm -> ±r ; 2503  i ; 2505 `p_šd’t ( Ëv– , äm ); 2506 `´štf ("¡©u 0x%2.2x\n", ½ -> ¡©us ); 2508 ià( ½ -> ¡©us > 0) { 2509 `p_šd’t ( Ëv– , äm ); 2510 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2512 `p_šd’t ( Ëv– , äm ); 2513 `´štf ("Features:"); 2514  i = 0; i < 8; i++) 2515 `´štf (" 0x%2.2x", ½ -> ã©u»s [ i ]); 2516 `´štf ("\n"); 2518 } } 2520  šlše  $»ad_loÿl_ext_ã©u»s_dump ( Ëv– ,  äame * äm ) 2522 »ad_loÿl_ext_ã©u»s_½ * ½ = äm -> ±r ; 2523  i ; 2525 `p_šd’t ( Ëv– , äm ); 2526 `´štf ("status 0x%2.2x…age %d max %d\n", 2527 ½ -> ¡©us ,„p-> ·ge_num ,„p-> max_·ge_num ); 2529 ià( ½ -> ¡©us > 0) { 2530 `p_šd’t ( Ëv– , äm ); 2531 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2533 `p_šd’t ( Ëv– , äm ); 2534 `´štf ("Features:"); 2535  i = 0; i < 8; i++) 2536 `´štf (" 0x%2.2x", ½ -> ã©u»s [ i ]); 2537 `´štf ("\n"); 2539 } } 2541  šlše  $»ad_bufãr_size_dump ( Ëv– ,  äame * äm ) 2543 »ad_bufãr_size_½ * ½ = äm -> ±r ; 2545 `p_šd’t ( Ëv– , äm ); 2546 `´štf ("¡©u 0x%2.2x\n", ½ -> ¡©us ); 2548 ià( ½ -> ¡©us > 0) { 2549 `p_šd’t ( Ëv– , äm ); 2550 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2552 `p_šd’t ( Ëv– , äm ); 2553 `´štf ("ACL MTU %d:%d SCO MTU %d:%d\n", 2554 `btohs ( ½ -> aþ_mtu ), btohsÔp-> aþ_max_pkt ), 2555 ½ -> sco_mtu , `btohs Ôp-> sco_max_pkt )); 2557 } } 2559  šlše  $»ad_lšk_qu®™y_dump ( Ëv– ,  äame * äm ) 2561 »ad_lšk_qu®™y_½ * ½ = äm -> ±r ; 2563 `p_šd’t ( Ëv– , äm ); 2564 `´štf ("status 0x%2.2x handle %d†q %d\n", 2565 ½ -> ¡©us , `btohs Ôp-> hªdË ),„p-> lšk_qu®™y ); 2567 ià( ½ -> ¡©us > 0) { 2568 `p_šd’t ( Ëv– , äm ); 2569 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2571 } } 2573  šlše  $»ad_rssi_dump ( Ëv– ,  äame * äm ) 2575 »ad_rssi_½ * ½ = äm -> ±r ; 2577 `p_šd’t ( Ëv– , äm ); 2578 `´štf ("status 0x%2.2x handle %d„ssi %d\n", 2579 ½ -> ¡©us , `btohs Ôp-> hªdË ),„p-> rssi ); 2581 ià( ½ -> ¡©us > 0) { 2582 `p_šd’t ( Ëv– , äm ); 2583 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2585 } } 2587  šlše  $»ad_afh_m­_dump ( Ëv– ,  äame * äm ) 2589 »ad_afh_m­_½ * ½ = äm -> ±r ; 2590  i ; 2592 `p_šd’t ( Ëv– , äm ); 2593 `´štf ("status 0x%2.2x handle %d mode %d\n", 2594 ½ -> ¡©us , `btohs Ôp-> hªdË ),„p-> mode ); 2596 ià( ½ -> ¡©us > 0) { 2597 `p_šd’t ( Ëv– , äm ); 2598 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2600 `p_šd’t ( Ëv– , äm ); 2601 `´štf ("AFH map: 0x"); 2602  i = 0; i < 10; i++) 2603 `´štf ("%2.2x", ½ -> m­ [ i ]); 2604 `´štf ("\n"); 2606 } } 2608  šlše  $»ad_þock_dump ( Ëv– ,  äame * äm ) 2610 »ad_þock_½ * ½ = äm -> ±r ; 2612 `p_šd’t ( Ëv– , äm ); 2613 `´štf ("status 0x%2.2x handle %d clock 0x%4.4x‡ccuracy %d\n", 2614 ½ -> ¡©us , `btohs Ôp-> hªdË ), 2615 `btohl ( ½ -> þock ), `btohs Ôp-> accu¿cy )); 2617 ià( ½ -> ¡©us > 0) { 2618 `p_šd’t ( Ëv– , äm ); 2619 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2621 } } 2623  šlše  $»ad_loÿl_amp_šfo_dump ( Ëv– ,  äame * äm ) 2625 »ad_loÿl_amp_šfo_½ * ½ = äm -> ±r ; 2627 `p_šd’t ( Ëv– , äm ); 2628 `´štf ("status 0x%2.2x‡mp status 0x%2.2x\n", 2629 ½ -> ¡©us ,„p-> amp_¡©us ); 2630 ià( ½ -> ¡©us > 0) { 2631 `p_šd’t ( Ëv– , äm ); 2632 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2634 `p_šd’t ( Ëv– , äm ); 2635 `´štf ("total bandwidth %d, max guaranteed bandwidth %d\n", 2636 `btohl ( ½ -> tÙ®_bªdwidth ), 2637 `btohl ( ½ -> max_gu¬ª‹ed_bªdwidth )); 2638 `p_šd’t ( Ëv– , äm ); 2639 `´štf ("min†atency %d, max PDU %d, controllerype 0x%2.2x\n", 2640 `btohl ( ½ -> mš_Ï‹ncy ), btohlÔp-> max_pdu_size ), 2641 ½ -> cÚŒÞËr_ty³ ); 2642 `p_šd’t ( Ëv– , äm ); 2643 `´štf ("pal caps 0x%4.4x, max‡ssoc†en %d\n", 2644 `btohs ( ½ -> ·l_ÿps ), btohsÔp-> max_amp_assoc_Ëngth )); 2645 `p_šd’t ( Ëv– , äm ); 2646 `´štf ("max flushimeout %d, bestƒffort flushimeout %d\n", 2647 `btohl ( ½ -> max_æush_timeout ), 2648 `btohl ( ½ -> be¡_effÜt_æush_timeout )); 2650 } } 2652  šlše  $»ad_loÿl_amp_assoc_dump ( Ëv– ,  äame * äm ) 2654 »ad_loÿl_amp_assoc_½ * ½ = äm -> ±r ; 2655 ušt16_t Ën = `btohs ( ½ -> Ëngth ); 2657 `p_šd’t ( Ëv– , äm ); 2658 `´štf ("status 0x%2.2x handle 0x%2.2x„emaining†en %d\n", 2659 ½ -> ¡©us ,„p-> hªdË , Ën ); 2660 ià( ½ -> ¡©us > 0) { 2661 `p_šd’t ( Ëv– , äm ); 2662 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2664 `amp_assoc_dump ( Ëv– + 1, ½ -> äagm’t , Ën ); 2666 } } 2668  šlše  $wr™e_»mÙe_amp_assoc_dump ( Ëv– ,  äame * äm ) 2670 wr™e_»mÙe_amp_assoc_½ * ½ = äm -> ±r ; 2672 `p_šd’t ( Ëv– , äm ); 2673 `´štf ("¡©u 0x%2.2x hªdË 0x%2.2x\n", ½ -> ¡©us ,„p-> hªdË ); 2674 ià( ½ -> ¡©us > 0) { 2675 `p_šd’t ( Ëv– , äm ); 2676 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2678 } } 2680  šlše  $Ë_»ad_bufãr_size_»¥Ú£_dump ( Ëv– ,  äame * äm ) 2682 Ë_»ad_bufãr_size_½ * ½ = äm -> ±r ; 2684 `p_šd’t ( Ëv– , äm ); 2685 `´štf ("¡©u 0x%2.2x…kŽ’ 0x%4.4x maxpkˆ0x%2.2x\n", ½ -> ¡©us , 2686 ½ -> pkt_Ën ,„p-> max_pkt ); 2688 ià( ½ -> ¡©us > 0) { 2689 `p_šd’t ( Ëv– , äm ); 2690 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2692 } } 2694  šlše  $Ë_»ad_loÿl_suµÜ‹d_ã©u»s_dump ( Ëv– ,  äame * äm ) 2696  i ; 2697 Ë_»ad_loÿl_suµÜ‹d_ã©u»s_½ * ½ = äm -> ±r ; 2699 `p_šd’t ( Ëv– , äm ); 2700 `´štf ("¡©u 0x%2.2x f—tu» 0x", ½ -> ¡©us ); 2701  i = 0; i < 8; i++) 2702 `´štf ("%2.2x", ½ -> ã©u»s [ i ]); 2703 `´štf (" (%s)\n", `Ëã©u»s2¡r ( ½ -> ã©u»s )); 2705 ià( ½ -> ¡©us > 0) { 2706 `p_šd’t ( Ëv– , äm ); 2707 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2709 } } 2711  šlše  $Ë_»ad_adv”tisšg_chªÃl_tx_pow”_dump ( Ëv– ,  äame * äm ) 2713 Ë_»ad_adv”tisšg_chªÃl_tx_pow”_½ * ½ = äm -> ±r ; 2715 `p_šd’t ( Ëv– , äm ); 2716 `´štf ("¡©u 0x%2.2x†ev– 0x%x (dBm)\n", ½ -> ¡©us ,„p-> Ëv– ); 2718 ià( ½ -> ¡©us > 0) { 2719 `p_šd’t ( Ëv– , äm ); 2720 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( ½ -> ¡©us )); 2722 } } 2724  šlše  $cmd_com¶‘e_dump ( Ëv– ,  äame * äm ) 2726 evt_cmd_com¶‘e * evt = äm -> ±r ; 2727 ušt16_t Ýcode = `btohs ( evt ->opcode); 2728 ušt16_t ogf = `cmd_Ýcode_ogf ( Ýcode ); 2729 ušt16_t ocf = `cmd_Ýcode_ocf ( Ýcode ); 2731 ià( ogf =ð OGF_VENDOR_CMD && ( ·r£r . æags & DUMP_NOVENDOR )) 2734 `p_šd’t ( Ëv– , äm ); 2735 `´štf ("%s (0x%2.2x|0x%4.4x)‚cmd %d\n", 2736 `Ýcode2¡r ( Ýcode ), ogf , ocf , evt -> ncmd ); 2738 äm -> ±r +ð EVT_CMD_COMPLETE_SIZE ; 2739 äm -> Ën -ð EVT_CMD_COMPLETE_SIZE ; 2741 ià(!( ·r£r . æags & DUMP_VERBOSE )) { 2742 `¿w_dump ( Ëv– , äm ); 2746  ogf ) { 2747  OGF_LINK_CTL : 2748  ocf ) { 2749  OCF_INQUIRY_CANCEL : 2750  OCF_PERIODIC_INQUIRY : 2751  OCF_EXIT_PERIODIC_INQUIRY : 2752  OCF_READ_REMOTE_EXT_FEATURES : 2753 `¡©us_»¥Ú£_dump ( Ëv– , äm ); 2755  OCF_CREATE_CONN_CANCEL : 2756  OCF_REMOTE_NAME_REQ_CANCEL : 2757  OCF_PIN_CODE_REPLY : 2758  OCF_LINK_KEY_REPLY : 2759  OCF_PIN_CODE_NEG_REPLY : 2760  OCF_LINK_KEY_NEG_REPLY : 2761  OCF_USER_CONFIRM_REPLY : 2762  OCF_USER_CONFIRM_NEG_REPLY : 2763  OCF_USER_PASSKEY_REPLY : 2764  OCF_USER_PASSKEY_NEG_REPLY : 2765  OCF_REMOTE_OOB_DATA_REPLY : 2766  OCF_REMOTE_OOB_DATA_NEG_REPLY : 2767  OCF_IO_CAPABILITY_REPLY : 2768  OCF_IO_CAPABILITY_NEG_REPLY : 2769 `bdaddr_»¥Ú£_dump ( Ëv– , äm ); 2774  OGF_LINK_POLICY : 2775  ocf ) { 2776  OCF_READ_LINK_POLICY : 2777 `»ad_lšk_pÞicy_dump ( Ëv– , äm ); 2779  OCF_WRITE_LINK_POLICY : 2780  OCF_SNIFF_SUBRATING : 2781 `g’”ic_»¥Ú£_dump ( Ëv– , äm ); 2783  OCF_READ_DEFAULT_LINK_POLICY : 2784 `»ad_deçuÉ_lšk_pÞicy_dump ( Ëv– , äm ); 2786  OCF_WRITE_DEFAULT_LINK_POLICY : 2787 `¡©us_»¥Ú£_dump ( Ëv– , äm ); 2792  OGF_HOST_CTL : 2793  ocf ) { 2794  OCF_READ_PIN_TYPE : 2795 `»ad_pš_ty³_dump ( Ëv– , äm ); 2797  OCF_READ_STORED_LINK_KEY : 2798 `»ad_¡Üed_lšk_key_dump ( Ëv– , äm ); 2800  OCF_WRITE_STORED_LINK_KEY : 2801 `wr™e_¡Üed_lšk_key_dump ( Ëv– , äm ); 2803  OCF_DELETE_STORED_LINK_KEY : 2804 `d–‘e_¡Üed_lšk_key_dump ( Ëv– , äm ); 2806  OCF_READ_LOCAL_NAME : 2807 `»ad_loÿl_Çme_dump ( Ëv– , äm ); 2809  OCF_READ_CLASS_OF_DEV : 2810 `»ad_þass_of_dev_dump ( Ëv– , äm ); 2812  OCF_READ_VOICE_SETTING : 2813 `»ad_voiû_£‰šg_dump ( Ëv– , äm ); 2815  OCF_READ_CURRENT_IAC_LAP : 2816 `»ad_cu¼’t_Ÿc_Ïp_dump ( Ëv– , äm ); 2818  OCF_READ_SCAN_ENABLE : 2819  OCF_READ_AUTH_ENABLE : 2820 `»ad_sÿn_’abË_dump ( Ëv– , äm ); 2822  OCF_READ_CONN_ACCEPT_TIMEOUT : 2823  OCF_READ_PAGE_TIMEOUT : 2824  OCF_READ_LOGICAL_LINK_ACCEPT_TIMEOUT : 2825 `»ad_·ge_timeout_dump ( Ëv– , äm ); 2827  OCF_READ_PAGE_ACTIVITY : 2828  OCF_READ_INQ_ACTIVITY : 2829 `»ad_·ge_aùiv™y_dump ( Ëv– , äm ); 2831  OCF_READ_INQUIRY_SCAN_TYPE : 2832 `»ad_šquœy_sÿn_ty³_dump ( Ëv– , äm ); 2834  OCF_READ_ENCRYPT_MODE : 2835  OCF_READ_INQUIRY_MODE : 2836  OCF_READ_AFH_MODE : 2837 `»ad_šquœy_mode_dump ( Ëv– , äm ); 2839  OCF_READ_LINK_SUPERVISION_TIMEOUT : 2840 `»ad_lšk_su³rvisiÚ_timeout_dump ( Ëv– , äm ); 2842  OCF_READ_TRANSMIT_POWER_LEVEL : 2843 `»ad_Œªsm™_pow”_Ëv–_dump ( Ëv– , äm ); 2845  OCF_READ_EXT_INQUIRY_RESPONSE : 2846 `»ad_ext_šquœy_»¥Ú£_dump ( Ëv– , äm ); 2848  OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL : 2849 `»ad_šquœy_Œªsm™_pow”_Ëv–_dump ( Ëv– , äm ); 2851  OCF_READ_DEFAULT_ERROR_DATA_REPORTING : 2852 `»ad_deçuÉ_”rÜ_d©a_»pÜtšg_dump ( Ëv– , äm ); 2854  OCF_READ_LOCAL_OOB_DATA : 2855 `»ad_loÿl_oob_d©a_dump ( Ëv– , äm ); 2857  OCF_READ_SIMPLE_PAIRING_MODE : 2858  OCF_READ_FLOW_CONTROL_MODE : 2859 `¡©us_mode_dump ( Ëv– , äm ); 2861  OCF_FLUSH : 2862  OCF_WRITE_LINK_SUPERVISION_TIMEOUT : 2863 `g’”ic_»¥Ú£_dump ( Ëv– , äm ); 2865  OCF_RESET : 2866  OCF_SET_EVENT_MASK : 2867  OCF_SET_EVENT_FLT : 2868  OCF_WRITE_PIN_TYPE : 2869  OCF_CREATE_NEW_UNIT_KEY : 2870  OCF_CHANGE_LOCAL_NAME : 2871  OCF_WRITE_CLASS_OF_DEV : 2872  OCF_WRITE_VOICE_SETTING : 2873  OCF_WRITE_CURRENT_IAC_LAP : 2874  OCF_WRITE_SCAN_ENABLE : 2875  OCF_WRITE_AUTH_ENABLE : 2876  OCF_WRITE_ENCRYPT_MODE : 2877  OCF_WRITE_CONN_ACCEPT_TIMEOUT : 2878  OCF_WRITE_PAGE_TIMEOUT : 2879  OCF_WRITE_PAGE_ACTIVITY : 2880  OCF_WRITE_INQ_ACTIVITY : 2881  OCF_WRITE_INQUIRY_SCAN_TYPE : 2882  OCF_WRITE_INQUIRY_MODE : 2883  OCF_WRITE_AFH_MODE : 2884  OCF_SET_AFH_CLASSIFICATION : 2885  OCF_WRITE_EXT_INQUIRY_RESPONSE : 2886  OCF_WRITE_SIMPLE_PAIRING_MODE : 2887  OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL : 2888  OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING : 2889  OCF_SET_CONTROLLER_TO_HOST_FC : 2890  OCF_HOST_BUFFER_SIZE : 2891  OCF_REFRESH_ENCRYPTION_KEY : 2892  OCF_SEND_KEYPRESS_NOTIFY : 2893  OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT : 2894  OCF_SET_EVENT_MASK_PAGE_2 : 2895  OCF_WRITE_LOCATION_DATA : 2896  OCF_WRITE_FLOW_CONTROL_MODE : 2897  OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT : 2898  OCF_WRITE_BEST_EFFORT_FLUSH_TIMEOUT : 2899 `¡©us_»¥Ú£_dump ( Ëv– , äm ); 2904  OGF_INFO_PARAM : 2905  ocf ) { 2906  OCF_READ_LOCAL_VERSION : 2907 `»ad_loÿl_v”siÚ_dump ( Ëv– , äm ); 2909  OCF_READ_LOCAL_COMMANDS : 2910 `»ad_loÿl_commªds_dump ( Ëv– , äm ); 2912  OCF_READ_LOCAL_FEATURES : 2913 `»ad_loÿl_ã©u»s_dump ( Ëv– , äm ); 2915  OCF_READ_LOCAL_EXT_FEATURES : 2916 `»ad_loÿl_ext_ã©u»s_dump ( Ëv– , äm ); 2918  OCF_READ_BUFFER_SIZE : 2919 `»ad_bufãr_size_dump ( Ëv– , äm ); 2921  OCF_READ_BD_ADDR : 2922 `bdaddr_»¥Ú£_dump ( Ëv– , äm ); 2924  OCF_READ_DATA_BLOCK_SIZE : 2925 `»ad_d©a_block_size_dump ( Ëv– , äm ); 2930  OGF_STATUS_PARAM : 2931  ocf ) { 2932  OCF_READ_FAILED_CONTACT_COUNTER : 2933  OCF_RESET_FAILED_CONTACT_COUNTER : 2934 `¡©us_»¥Ú£_dump ( Ëv– , äm ); 2936  OCF_READ_LINK_QUALITY : 2937 `»ad_lšk_qu®™y_dump ( Ëv– , äm ); 2939  OCF_READ_RSSI : 2940 `»ad_rssi_dump ( Ëv– , äm ); 2942  OCF_READ_AFH_MAP : 2943 `»ad_afh_m­_dump ( Ëv– , äm ); 2945  OCF_READ_CLOCK : 2946 `»ad_þock_dump ( Ëv– , äm ); 2948  OCF_READ_LOCAL_AMP_INFO : 2949 `»ad_loÿl_amp_šfo_dump ( Ëv– , äm ); 2951  OCF_READ_LOCAL_AMP_ASSOC : 2952 `»ad_loÿl_amp_assoc_dump ( Ëv– , äm ); 2954  OCF_WRITE_REMOTE_AMP_ASSOC : 2955 `wr™e_»mÙe_amp_assoc_dump ( Ëv– , äm ); 2960  OGF_TESTING_CMD : 2961  ocf ) { 2962  OCF_READ_LOOPBACK_MODE : 2963 `¡©us_mode_dump ( Ëv– , äm ); 2965  OCF_WRITE_LOOPBACK_MODE : 2966  OCF_ENABLE_DEVICE_UNDER_TEST_MODE : 2967  OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE : 2968 `¡©us_»¥Ú£_dump ( Ëv– , äm ); 2973  OGF_LE_CTL : 2974  ocf ) { 2975  OCF_LE_SET_EVENT_MASK : 2976  OCF_LE_SET_RANDOM_ADDRESS : 2977  OCF_LE_SET_ADVERTISING_PARAMETERS : 2978  OCF_LE_SET_ADVERTISING_DATA : 2979  OCF_LE_SET_SCAN_RESPONSE_DATA : 2980  OCF_LE_SET_ADVERTISE_ENABLE : 2981  OCF_LE_SET_SCAN_PARAMETERS : 2982  OCF_LE_SET_SCAN_ENABLE : 2983  OCF_LE_CREATE_CONN : 2984  OCF_LE_CLEAR_WHITE_LIST : 2985  OCF_LE_ADD_DEVICE_TO_WHITE_LIST : 2986  OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST : 2987  OCF_LE_SET_HOST_CHANNEL_CLASSIFICATION : 2988  OCF_LE_RECEIVER_TEST : 2989  OCF_LE_TRANSMITTER_TEST : 2990 `¡©us_»¥Ú£_dump ( Ëv– , äm ); 2992  OCF_LE_READ_BUFFER_SIZE : 2993 `Ë_»ad_bufãr_size_»¥Ú£_dump ( Ëv– , äm ); 2995  OCF_LE_READ_LOCAL_SUPPORTED_FEATURES : 2996 `Ë_»ad_loÿl_suµÜ‹d_ã©u»s_dump ( Ëv– , äm ); 2998  OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER : 2999 `Ë_»ad_adv”tisšg_chªÃl_tx_pow”_dump ( Ëv– , äm ); 3005 `¿w_dump ( Ëv– , äm ); 3006 } } 3008  šlše  $cmd_¡©us_dump ( Ëv– ,  äame * äm ) 3010 evt_cmd_¡©us * evt = äm -> ±r ; 3011 ušt16_t Ýcode = `btohs ( evt ->opcode); 3012 ušt16_t ogf = `cmd_Ýcode_ogf ( Ýcode ); 3013 ušt16_t ocf = `cmd_Ýcode_ocf ( Ýcode ); 3015 ià( ogf =ð OGF_VENDOR_CMD && ( ·r£r . æags & DUMP_NOVENDOR )) 3018 `p_šd’t ( Ëv– , äm ); 3019 `´štf ("%s (0x%2.2x|0x%4.4x) status 0x%2.2x‚cmd %d\n", 3020 `Ýcode2¡r ( Ýcode ), ogf , ocf , evt -> ¡©us ,ƒvt-> ncmd ); 3022 ià( evt -> ¡©us > 0) { 3023 `p_šd’t ( Ëv– , äm ); 3024 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3026 } } 3028  šlše  $h¬dw¬e_”rÜ_dump ( Ëv– ,  äame * äm ) 3030 evt_h¬dw¬e_”rÜ * evt = äm -> ±r ; 3032 `p_šd’t ( Ëv– , äm ); 3033 `´štf ("cod%d\n", evt -> code ); 3034 } } 3036  šlše  $šq_»suÉ_dump ( Ëv– ,  äame * äm ) 3038 ušt8_t num = `g‘_u8 ( äm ); 3039  addr [18]; 3040  i ; 3042  i = 0; i < num ; i++) { 3043 šquœy_šfo * šfo = äm -> ±r ; 3045 `p_ba2¡r (& šfo -> bdaddr , addr ); 3047 `p_šd’t ( Ëv– , äm ); 3048 `´štf ("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x\n", 3049 addr , šfo -> psÿn_»p_mode , `btohs (šfo-> þock_off£t ), 3050 šfo -> dev_þass [2], info->dev_class[1], info->dev_class[0]); 3052 äm -> ±r +ð INQUIRY_INFO_SIZE ; 3053 äm -> Ën -ð INQUIRY_INFO_SIZE ; 3055 } } 3057  šlše  $cÚn_com¶‘e_dump ( Ëv– ,  äame * äm ) 3059 evt_cÚn_com¶‘e * evt = äm -> ±r ; 3060  addr [18]; 3062 `p_ba2¡r (& evt -> bdaddr , addr ); 3064 `p_šd’t ( Ëv– , äm ); 3065 `´štf ("status 0x%2.2x handle %d bdaddr %sype %sƒncrypt 0x%2.2x\n", 3066 evt -> ¡©us , `btohs Óvt-> hªdË ), addr , 3067 `lškty³2¡r ( evt -> lšk_ty³ ),ƒvt-> ’ü_mode ); 3069 ià( evt -> ¡©us > 0) { 3070 `p_šd’t ( Ëv– , äm ); 3071 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3073 } } 3075  šlše  $cÚn_»que¡_dump ( Ëv– ,  äame * äm ) 3077 evt_cÚn_»que¡ * evt = äm -> ±r ; 3078  addr [18]; 3080 `p_ba2¡r (& evt -> bdaddr , addr ); 3082 `p_šd’t ( Ëv– , äm ); 3083 `´štf ("bdaddr %s class 0x%2.2x%2.2x%2.2xype %s\n", 3084 addr , evt -> dev_þass [2],ƒvt->dev_class[1], 3085 evt -> dev_þass [0], `lškty³2¡r Óvt-> lšk_ty³ )); 3086 } } 3088  šlše  $discÚn_com¶‘e_dump ( Ëv– ,  äame * äm ) 3090 evt_discÚn_com¶‘e * evt = äm -> ±r ; 3092 `p_šd’t ( Ëv– , äm ); 3093 `´štf ("status 0x%2.2x handle %d„eason 0x%2.2x\n", 3094 evt -> ¡©us , `btohs Óvt-> hªdË ),ƒvt-> »asÚ ); 3096 ià( evt -> ¡©us > 0) { 3097 `p_šd’t ( Ëv– , äm ); 3098 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3099 } ià( evt -> »asÚ > 0) { 3100 `p_šd’t ( Ëv– , äm ); 3101 `´štf ("R—sÚ: %s\n", `¡©us2¡r ( evt -> »asÚ )); 3103 } } 3105  šlše  $»mÙe_Çme_»q_com¶‘e_dump ( Ëv– ,  äame * äm ) 3107 evt_»mÙe_Çme_»q_com¶‘e * evt = äm -> ±r ; 3108  addr [18], Çme [249]; 3109  i ; 3111 `p_ba2¡r (& evt -> bdaddr , addr ); 3113 `mem£t ( Çme , 0, (name)); 3114  i = 0; i < 248 && evt -> Çme [i]; i++) 3115 ià( `i¥ršt ( evt -> Çme [ i ])) 3116 Çme [ i ] = evt ->name[i]; 3118 Çme [ i ] = '.'; 3120 `p_šd’t ( Ëv– , äm ); 3121 `´štf ("¡©u 0x%2.2x bdadd¸% Çm'%s'\n", evt -> ¡©us , addr , Çme ); 3123 ià( evt -> ¡©us > 0) { 3124 `p_šd’t ( Ëv– , äm ); 3125 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3127 } } 3129  šlše  $ma¡”_lšk_key_com¶‘e_dump ( Ëv– ,  äame * äm ) 3131 evt_ma¡”_lšk_key_com¶‘e * evt = äm -> ±r ; 3133 `p_šd’t ( Ëv– , äm ); 3134 `´štf ("status 0x%2.2x handle %d flag %d\n", 3135 evt -> ¡©us , `btohs Óvt-> hªdË ),ƒvt-> key_æag ); 3137 ià( evt -> ¡©us > 0) { 3138 `p_šd’t ( Ëv– , äm ); 3139 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3141 } } 3143  šlše  $’üy±_chªge_dump ( Ëv– ,  äame * äm ) 3145 evt_’üy±_chªge * evt = äm -> ±r ; 3147 `p_šd’t ( Ëv– , äm ); 3148 `´štf ("status 0x%2.2x handle %dƒncrypt 0x%2.2x\n", 3149 evt -> ¡©us , `btohs Óvt-> hªdË ),ƒvt-> ’üy± ); 3151 ià( evt -> ¡©us > 0) { 3152 `p_šd’t ( Ëv– , äm ); 3153 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3155 } } 3157  šlše  $»ad_»mÙe_ã©u»s_com¶‘e_dump ( Ëv– ,  äame * äm ) 3159 evt_»ad_»mÙe_ã©u»s_com¶‘e * evt = äm -> ±r ; 3160  i ; 3162 `p_šd’t ( Ëv– , äm ); 3163 `´štf ("¡©u 0x%2.2x hªdË %d\n", evt -> ¡©us , `btohs Óvt-> hªdË )); 3165 ià( evt -> ¡©us > 0) { 3166 `p_šd’t ( Ëv– , äm ); 3167 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3169 `p_šd’t ( Ëv– , äm ); 3170 `´štf ("Features:"); 3171  i = 0; i < 8; i++) 3172 `´štf (" 0x%2.2x", evt -> ã©u»s [ i ]); 3173 `´štf ("\n"); 3175 } } 3177  šlše  $»ad_»mÙe_v”siÚ_com¶‘e_dump ( Ëv– ,  äame * äm ) 3179 evt_»ad_»mÙe_v”siÚ_com¶‘e * evt = äm -> ±r ; 3180 ušt16_t mªuçùu»r = `btohs ( evt ->manufacturer); 3182 `p_šd’t ( Ëv– , äm ); 3183 `´štf ("¡©u 0x%2.2x hªdË %d\n", evt -> ¡©us , `btohs Óvt-> hªdË )); 3185 ià( evt -> ¡©us > 0) { 3186 `p_šd’t ( Ëv– , äm ); 3187 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3189 * lmpv” = `lmp_v”to¡r ( evt -> lmp_v” ); 3191 `p_šd’t ( Ëv– , äm ); 3192 `´štf ("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n", 3193 lmpv” ?†mpv” : "n/a", evt -> lmp_v” , 3194 `btohs ( evt -> lmp_subv” )); 3195 `p_šd’t ( Ëv– , äm ); 3196 `´štf ("Manufacturer: %s (%d)\n", 3197 `bt_compidto¡r ( mªuçùu»r ), manufacturer); 3199 ià( lmpv” ) 3200 `ä“ ( lmpv” ); 3202 } } 3204  šlše  $qos_£tup_com¶‘e_dump ( Ëv– ,  äame * äm ) 3206 evt_qos_£tup_com¶‘e * evt = äm -> ±r ; 3208 `p_šd’t ( Ëv– , äm ); 3209 `´štf ("status 0x%2.2x handle %d flags %d\n", 3210 evt -> ¡©us , `btohs Óvt-> hªdË ),ƒvt-> æags ); 3212 ià( evt -> ¡©us > 0) { 3213 `p_šd’t ( Ëv– , äm ); 3214 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3216 `p_šd’t ( Ëv– , äm ); 3217 `´štf ("S”viûy³: %d\n", evt -> qos . £rviû_ty³ ); 3218 `p_šd’t ( Ëv– , äm ); 3219 `´štf ("Tok’„©e: %d\n", `btohl ( evt -> qos . tok’_¿‹ )); 3220 `p_šd’t ( Ëv– , äm ); 3221 `´štf ("P—k bªdw™h: %d\n", `btohl ( evt -> qos . ³ak_bªdwidth )); 3222 `p_šd’t ( Ëv– , äm ); 3223 `´štf ("L©’cy: %d\n", `btohl ( evt -> qos . Ï‹ncy )); 3224 `p_šd’t ( Ëv– , äm ); 3225 `´štf ("D–ay v¬ŸtiÚ: %d\n", `btohl ( evt -> qos . d–ay_v¬ŸtiÚ )); 3227 } } 3229  šlše  $rÞe_chªge_dump ( Ëv– ,  äame * äm ) 3231 evt_rÞe_chªge * evt = äm -> ±r ; 3232  addr [18]; 3234 `p_šd’t ( Ëv– , äm ); 3235 `p_ba2¡r (& evt -> bdaddr , addr ); 3236 `´štf ("status 0x%2.2x bdaddr %s„ole 0x%2.2x\n", 3237 evt -> ¡©us , addr ,ƒvt-> rÞe ); 3239 ià( evt -> ¡©us > 0) { 3240 `p_šd’t ( Ëv– , äm ); 3241 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3243 `p_šd’t ( Ëv– , äm ); 3244 `´štf ("RÞe: %s\n", `rÞe2¡r ( evt -> rÞe )); 3246 } } 3248  šlše  $mode_chªge_dump ( Ëv– ,  äame * äm ) 3250 evt_mode_chªge * evt = äm -> ±r ; 3252 `p_šd’t ( Ëv– , äm ); 3253 `´štf ("status 0x%2.2x handle %d mode 0x%2.2x interval %d\n", 3254 evt -> ¡©us , `btohs Óvt-> hªdË ),ƒvt-> mode , btohsÓvt-> š‹rv® )); 3256 ià( evt -> ¡©us > 0) { 3257 `p_šd’t ( Ëv– , äm ); 3258 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3260 `p_šd’t ( Ëv– , äm ); 3261 `´štf ("Mode: %s\n", `mode2¡r ( evt -> mode )); 3263 } } 3265  šlše  $pš_code_»q_dump ( Ëv– ,  äame * äm ) 3267 evt_pš_code_»q * evt = äm -> ±r ; 3268  addr [18]; 3270 `p_šd’t ( Ëv– , äm ); 3271 `p_ba2¡r (& evt -> bdaddr , addr ); 3272 `´štf ("bdadd¸%s\n", addr ); 3273 } } 3275  šlše  $lšk_key_nÙify_dump ( Ëv– ,  äame * äm ) 3277 evt_lšk_key_nÙify * evt = äm -> ±r ; 3278  addr [18]; 3279  i ; 3281 `p_šd’t ( Ëv– , äm ); 3282 `p_ba2¡r (& evt -> bdaddr , addr ); 3283 `´štf ("bdadd¸% key ", addr ); 3284  i = 0; i < 16; i++) 3285 ià( ·r£r . æags & DUMP_NOVENDOR ) 3286 `´štf ("**"); 3288 `´štf ("%2.2X", evt -> lšk_key [ i ]); 3289 `´štf ("y³ %d\n", evt -> key_ty³ ); 3291 `p_šd’t ( Ëv– , äm ); 3292 `´štf ("Ty³: %s\n", `keyty³2¡r ( evt -> key_ty³ )); 3293 } } 3295  šlše  $max_¦Ùs_chªge_dump ( Ëv– ,  äame * äm ) 3297 evt_max_¦Ùs_chªge * evt = äm -> ±r ; 3299 `p_šd’t ( Ëv– , äm ); 3300 `´štf ("hªdË %d slÙ %d\n", `btohs ( evt -> hªdË ),ƒvt-> max_¦Ùs ); 3301 } } 3303  šlše  $d©a_bufãr_ov”æow_dump ( Ëv– ,  äame * äm ) 3305 evt_d©a_bufãr_ov”æow * evt = äm -> ±r ; 3307 `p_šd’t ( Ëv– , äm ); 3308 `´štf ("ty³ %s\n", `lškty³2¡r ( evt -> lšk_ty³ )); 3309 } } 3311  šlše  $»ad_þock_off£t_com¶‘e_dump ( Ëv– ,  äame * äm ) 3313 evt_»ad_þock_off£t_com¶‘e * evt = äm -> ±r ; 3315 `p_šd’t ( Ëv– , äm ); 3316 `´štf ("status 0x%2.2x handle %d clkoffset 0x%4.4x\n", 3317 evt -> ¡©us , `btohs Óvt-> hªdË ), btohsÓvt-> þock_off£t )); 3319 ià( evt -> ¡©us > 0) { 3320 `p_šd’t ( Ëv– , äm ); 3321 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3323 } } 3325  šlše  $cÚn_±y³_chªged_dump ( Ëv– ,  äame * äm ) 3327 evt_cÚn_±y³_chªged * evt = äm -> ±r ; 3328 ušt16_t ±y³ = `btohs ( evt ->ptype); 3329 * ¡r ; 3331 `p_šd’t ( Ëv– , äm ); 3332 `´štf ("status 0x%2.2x handle %d…type 0x%4.4x\n", 3333 evt -> ¡©us , `btohs Óvt-> hªdË ), ±y³ ); 3335 ià( evt -> ¡©us > 0) { 3336 `p_šd’t ( Ëv– , äm ); 3337 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3339 ¡r = `hci_±y³to¡r ( ±y³ ); 3340 ià( ¡r ) { 3341 `p_šd’t ( Ëv– , äm ); 3342 `´štf ("Pack‘y³: %s\n", ¡r ); 3343 `ä“ ( ¡r ); 3346 } } 3348  šlše  $psÿn_»p_mode_chªge_dump ( Ëv– ,  äame * äm ) 3350 evt_psÿn_»p_mode_chªge * evt = äm -> ±r ; 3351  addr [18]; 3353 `p_šd’t ( Ëv– , äm ); 3354 `p_ba2¡r (& evt -> bdaddr , addr ); 3355 `´štf ("bdadd¸% mod%d\n", addr , evt -> psÿn_»p_mode ); 3356 } } 3358  šlše  $æow_¥ec_com¶‘e_dump ( Ëv– ,  äame * äm ) 3360 evt_æow_¥ec_com¶‘e * evt = äm -> ±r ; 3362 `p_šd’t ( Ëv– , äm ); 3363 `´štf ("status 0x%2.2x handle 0x%4.4x flags %d %s\n", 3364 evt -> ¡©us , `btohs Óvt-> hªdË ),ƒvt-> æags , 3365 evt -> dœeùiÚ == 0 ? "outgoing" : "incoming"); 3367 ià( evt -> ¡©us > 0) { 3368 `p_šd’t ( Ëv– , äm ); 3369 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3371 `p_šd’t ( Ëv– , äm ); 3372 `´štf ("S”viûy³: %d\n", evt -> qos . £rviû_ty³ ); 3373 `p_šd’t ( Ëv– , äm ); 3374 `´štf ("Tok’„©e: %d\n", `btohl ( evt -> qos . tok’_¿‹ )); 3375 `p_šd’t ( Ëv– , äm ); 3376 `´štf ("P—k bªdw™h: %d\n", `btohl ( evt -> qos . ³ak_bªdwidth )); 3377 `p_šd’t ( Ëv– , äm ); 3378 `´štf ("L©’cy: %d\n", `btohl ( evt -> qos . Ï‹ncy )); 3379 `p_šd’t ( Ëv– , äm ); 3380 `´štf ("D–ay v¬ŸtiÚ: %d\n", `btohl ( evt -> qos . d–ay_v¬ŸtiÚ )); 3382 } } 3384  šlše  $šq_»suÉ_w™h_rssi_dump ( Ëv– ,  äame * äm ) 3386 ušt8_t num = `g‘_u8 ( äm ); 3387  addr [18]; 3388  i ; 3390 ià(! num ) 3393 ià( äm -> Ën / num =ð INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE ) { 3394  i = 0; i < num ; i++) { 3395 šquœy_šfo_w™h_rssi_ªd_psÿn_mode * šfo = äm -> ±r ; 3397 `p_šd’t ( Ëv– , äm ); 3399 `p_ba2¡r (& šfo -> bdaddr , addr ); 3400 `´štf ("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x„ssi %d\n", 3401 addr , šfo -> psÿn_»p_mode , `btohs (šfo-> þock_off£t ), 3402 šfo -> dev_þass [2], info->dev_þass[1], info->dev_þass[0], info-> rssi ); 3404 äm -> ±r +ð INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE ; 3405 äm -> Ën -ð INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE ; 3408  i = 0; i < num ; i++) { 3409 šquœy_šfo_w™h_rssi * šfo = äm -> ±r ; 3411 `p_šd’t ( Ëv– , äm ); 3413 `p_ba2¡r (& šfo -> bdaddr , addr ); 3414 `´štf ("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x„ssi %d\n", 3415 addr , šfo -> psÿn_»p_mode , `btohs (šfo-> þock_off£t ), 3416 šfo -> dev_þass [2], info->dev_þass[1], info->dev_þass[0], info-> rssi ); 3418 äm -> ±r +ð INQUIRY_INFO_WITH_RSSI_SIZE ; 3419 äm -> Ën -ð INQUIRY_INFO_WITH_RSSI_SIZE ; 3422 } } 3424  šlše  $»ad_»mÙe_ext_ã©u»s_com¶‘e_dump ( Ëv– ,  äame * äm ) 3426 evt_»ad_»mÙe_ext_ã©u»s_com¶‘e * evt = äm -> ±r ; 3427  i ; 3429 `p_šd’t ( Ëv– , äm ); 3430 `´štf ("status 0x%2.2x handle %d…age %d max %d\n", 3431 evt -> ¡©us , `btohs Óvt-> hªdË ), 3432 evt -> ·ge_num ,ƒvt-> max_·ge_num ); 3434 ià( evt -> ¡©us > 0) { 3435 `p_šd’t ( Ëv– , äm ); 3436 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3438 `p_šd’t ( Ëv– , äm ); 3439 `´štf ("Features:"); 3440  i = 0; i < 8; i++) 3441 `´štf (" 0x%2.2x", evt -> ã©u»s [ i ]); 3442 `´štf ("\n"); 3444 } } 3446  šlše  $sync_cÚn_com¶‘e_dump ( Ëv– ,  äame * äm ) 3448 evt_sync_cÚn_com¶‘e * evt = äm -> ±r ; 3449  addr [18]; 3451 `p_ba2¡r (& evt -> bdaddr , addr ); 3453 `p_šd’t ( Ëv– , äm ); 3454 `´štf ("status 0x%2.2x handle %d bdaddr %sype %s\n", 3455 evt -> ¡©us , `btohs Óvt-> hªdË ), addr , 3456 evt -> lšk_ty³ == 0 ? "SCO" : "eSCO"); 3458 ià( evt -> ¡©us > 0) { 3459 `p_šd’t ( Ëv– , äm ); 3460 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3462 `p_šd’t ( Ëv– , äm ); 3463 `´štf ("Aœ mode: %s\n", `aœmode2¡r ( evt -> aœ_mode )); 3465 } } 3467  šlše  $sync_cÚn_chªged_dump ( Ëv– ,  äame * äm ) 3469 evt_sync_cÚn_chªged * evt = äm -> ±r ; 3471 `p_šd’t ( Ëv– , äm ); 3472 `´štf ("¡©u 0x%2.2x hªdË %d\n", evt -> ¡©us , `btohs Óvt-> hªdË )); 3474 ià( evt -> ¡©us > 0) { 3475 `p_šd’t ( Ëv– , äm ); 3476 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3478 } } 3480  šlše  $¢iff_sub¿tšg_ev’t_dump ( Ëv– ,  äame * äm ) 3482 evt_¢iff_sub¿tšg * evt = äm -> ±r ; 3484 `p_šd’t ( Ëv– , äm ); 3485 `´štf ("¡©u 0x%2.2x hªdË %d\n", evt -> ¡©us , `btohs Óvt-> hªdË )); 3487 ià( evt -> ¡©us > 0) { 3488 `p_šd’t ( Ëv– , äm ); 3489 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3491 `p_šd’t ( Ëv– , äm ); 3492 `´štf ("max†atencyransmit %d„eceive %d\n", 3493 `btohs ( evt -> max_tx_Ï‹ncy ), 3494 `btohs ( evt -> max_rx_Ï‹ncy )); 3496 `p_šd’t ( Ëv– , äm ); 3497 `´štf ("minimeout„emote %d†ocal %d\n", 3498 `btohs ( evt -> mš_»mÙe_timeout ), 3499 `btohs ( evt -> mš_loÿl_timeout )); 3501 } } 3503  šlše  $ex‹nded_šq_»suÉ_dump ( Ëv– ,  äame * äm ) 3505 ušt8_t num = `g‘_u8 ( äm ); 3506  addr [18]; 3507  i ; 3509  i = 0; i < num ; i++) { 3510 ex‹nded_šquœy_šfo * šfo = äm -> ±r ; 3512 `p_ba2¡r (& šfo -> bdaddr , addr ); 3514 `p_šd’t ( Ëv– , äm ); 3515 `´štf ("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x„ssi %d\n", 3516 addr , šfo -> psÿn_»p_mode , `btohs (šfo-> þock_off£t ), 3517 šfo -> dev_þass [2], info->dev_þass[1], info->dev_þass[0], info-> rssi ); 3519 äm -> ±r +ð INQUIRY_INFO_WITH_RSSI_SIZE ; 3520 äm -> Ën -ð INQUIRY_INFO_WITH_RSSI_SIZE ; 3522 `ext_šquœy_»¥Ú£_dump ( Ëv– , äm ); 3524 } } 3526  šlše  $lšk_su³rvisiÚ_timeout_chªged_dump ( Ëv– ,  äame * äm ) 3528 evt_lšk_su³rvisiÚ_timeout_chªged * evt = äm -> ±r ; 3530 `p_šd’t ( Ëv– , äm ); 3531 `´štf ("handle %dimeout %d\n", 3532 `btohs ( evt -> hªdË ), btohsÓvt-> timeout )); 3533 } } 3535  šlše  $u£r_·sskey_nÙify_dump ( Ëv– ,  äame * äm ) 3537 evt_u£r_·sskey_nÙify * evt = äm -> ±r ; 3538  addr [18]; 3540 `p_šd’t ( Ëv– , äm ); 3541 `p_ba2¡r (& evt -> bdaddr , addr ); 3542 `´štf ("bdadd¸% ·sskey %d\n", addr , `btohl ( evt -> ·sskey )); 3543 } } 3545  šlše  $key´ess_nÙify_dump ( Ëv– ,  äame * äm ) 3547 evt_key´ess_nÙify * evt = äm -> ±r ; 3548  addr [18]; 3550 `p_šd’t ( Ëv– , äm ); 3551 `p_ba2¡r (& evt -> bdaddr , addr ); 3552 `´štf ("bdadd¸% ty³ %d\n", addr , evt -> ty³ ); 3553 } } 3555  šlše  $»mÙe_ho¡_ã©u»s_nÙify_dump ( Ëv– ,  äame * äm ) 3557 evt_»mÙe_ho¡_ã©u»s_nÙify * evt = äm -> ±r ; 3558  addr [18]; 3559  i ; 3561 `p_šd’t ( Ëv– , äm ); 3562 `p_ba2¡r (& evt -> bdaddr , addr ); 3563 `´štf ("bdadd¸%s\n", addr ); 3565 `p_šd’t ( Ëv– , äm ); 3566 `´štf ("Features:"); 3567  i = 0; i < 8; i++) 3568 `´štf (" 0x%2.2x", evt -> ã©u»s [ i ]); 3569 `´štf ("\n"); 3570 } } 3572  šlše  $evt_Ë_cÚn_com¶‘e_dump ( Ëv– ,  äame * äm ) 3574 evt_Ë_cÚÃùiÚ_com¶‘e * evt = äm -> ±r ; 3575  addr [18]; 3577 `p_šd’t ( Ëv– , äm ); 3578 `´štf ("status 0x%2.2x handle %d,„ole %s\n", 3579 evt -> ¡©us , `btohs Óvt-> hªdË ), 3580 evt -> rÞe ? "slave" : "master"); 3582 `p_šd’t ( Ëv– , äm ); 3583 `p_ba2¡r (& evt -> ³”_bdaddr , addr ); 3584 `´štf ("bdadd¸% (%s)\n", addr , `bdadd¹y³2¡r ( evt -> ³”_bdaddr_ty³ )); 3585 } } 3587  šlše  $evt_Ë_adv”tisšg_»pÜt_dump ( Ëv– ,  äame * äm ) 3589 ušt8_t num_»pÜts = `g‘_u8 ( äm ); 3590 cÚ¡ ušt8_t RSSI_SIZE = 1; 3592  num_»pÜts --) { 3593  addr [18]; 3594 Ë_adv”tisšg_šfo * šfo = äm -> ±r ; 3595  off£t = 0; 3597 `p_ba2¡r (& šfo -> bdaddr , addr ); 3599 `p_šd’t ( Ëv– , äm ); 3600 `´štf ("% (%d)\n", `ev‰y³2¡r ( šfo -> evt_ty³ ), info->evt_type); 3602 `p_šd’t ( Ëv– , äm ); 3603 `´štf ("bdadd¸% (%s)\n", addr , 3604 `bdadd¹y³2¡r ( šfo -> bdaddr_ty³ )); 3606  off£t < šfo -> Ëngth ) { 3607  eœ_d©a_Ën = šfo -> d©a [ off£t ]; 3609 `ext_šquœy_d©a_dump ( Ëv– , äm , & šfo -> d©a [ off£t ]); 3611 off£t +ð eœ_d©a_Ën + 1; 3614 äm -> ±r +ð LE_ADVERTISING_INFO_SIZE + šfo -> Ëngth ; 3615 äm -> Ën -ð LE_ADVERTISING_INFO_SIZE + šfo -> Ëngth ; 3617 `p_šd’t ( Ëv– , äm ); 3618 `´štf ("RSSI: %d\n", (( št8_t *è äm -> ±r )[äm-> Ën - 1]); 3620 äm -> ±r +ð RSSI_SIZE ; 3621 äm -> Ën -ð RSSI_SIZE ; 3623 } } 3625  šlše  $evt_Ë_cÚn_upd©e_com¶‘e_dump ( Ëv– , 3626  äame * äm ) 3628 evt_Ë_cÚÃùiÚ_upd©e_com¶‘e * uevt = äm -> ±r ; 3630 `p_šd’t ( Ëv– , äm ); 3631 `´štf ("¡©u 0x%2.2x hªdË %d\n", uevt -> ¡©us , `btohs (uevt-> hªdË )); 3633 `p_šd’t ( Ëv– , äm ); 3634 `´štf ("interval %.2fms,†atency %.2fms, superv.imeout %.2fms\n", 3635 `btohs ( uevt -> š‹rv® è* 1.25, btohs(uevt-> Ï‹ncy ) * 1.25, 3636 `btohs ( uevt -> su³rvisiÚ_timeout ) * 10.0); 3637 } } 3639  šlše  $evt_Ë_»ad_»mÙe_u£d_ã©u»s_com¶‘e_dump ( Ëv– ,  äame * äm ) 3641  i ; 3642 evt_Ë_»ad_»mÙe_u£d_ã©u»s_com¶‘e * »vt = äm -> ±r ; 3644 `p_šd’t ( Ëv– , äm ); 3645 `´štf ("¡©u 0x%2.2x hªdË %d\n", »vt -> ¡©us , `btohs Ôevt-> hªdË )); 3647 ià( »vt -> ¡©us > 0) { 3648 `p_šd’t ( Ëv– , äm ); 3649 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( »vt -> ¡©us )); 3651 `p_šd’t ( Ëv– , äm ); 3652 `´štf ("Features:"); 3653  i = 0; i < 8; i++) 3654 `´štf (" 0x%2.2x", »vt -> ã©u»s [ i ]); 3655 `´štf ("\n"); 3657 } } 3659  šlše  $Ë_m‘a_ev_dump ( Ëv– ,  äame * äm ) 3661 evt_Ë_m‘a_ev’t * mevt = äm -> ±r ; 3662 ušt8_t subev’t ; 3664 subev’t = mevt ->subevent; 3666 äm -> ±r +ð EVT_LE_META_EVENT_SIZE ; 3667 äm -> Ën -ð EVT_LE_META_EVENT_SIZE ; 3669 `p_šd’t ( Ëv– , äm ); 3670 `´štf ("%s\n", ev_Ë_m‘a_¡r [ subev’t ]); 3672  mevt -> subev’t ) { 3673  EVT_LE_CONN_COMPLETE : 3674 `evt_Ë_cÚn_com¶‘e_dump ( Ëv– + 1, äm ); 3676  EVT_LE_ADVERTISING_REPORT : 3677 `evt_Ë_adv”tisšg_»pÜt_dump ( Ëv– + 1, äm ); 3679  EVT_LE_CONN_UPDATE_COMPLETE : 3680 `evt_Ë_cÚn_upd©e_com¶‘e_dump ( Ëv– + 1, äm ); 3682  EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE : 3683 `evt_Ë_»ad_»mÙe_u£d_ã©u»s_com¶‘e_dump ( Ëv– + 1, äm ); 3686 `¿w_dump ( Ëv– , äm ); 3689 } } 3691  šlše  $phys_lšk_com¶‘e_dump ( Ëv– ,  äame * äm ) 3693 evt_physiÿl_lšk_com¶‘e * evt = äm -> ±r ; 3695 `p_šd’t ( Ëv– , äm ); 3696 `´štf ("¡©u 0x%2.2x…hy hªdË 0x%2.2x\n", evt -> ¡©us ,ƒvt-> hªdË ); 3698 ià( evt -> ¡©us > 0) { 3699 `p_šd’t ( Ëv– , äm ); 3700 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3702 } } 3704  šlše  $discÚn_phys_lšk_com¶‘e_dump ( Ëv– ,  äame * äm ) 3706 evt_discÚn_physiÿl_lšk_com¶‘e * evt = äm -> ±r ; 3708 `p_šd’t ( Ëv– , äm ); 3709 `´štf ("status 0x%2.2x handle 0x%2.2x„eason 0x%2.2x\n", 3710 evt -> ¡©us ,ƒvt-> hªdË ,ƒvt-> »asÚ ); 3712 ià( evt -> ¡©us > 0) { 3713 `p_šd’t ( Ëv– , äm ); 3714 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3715 } ià( evt -> »asÚ > 0) { 3716 `p_šd’t ( Ëv– , äm ); 3717 `´štf ("R—sÚ: %s\n", `¡©us2¡r ( evt -> »asÚ )); 3719 } } 3721  šlše  $phys_lšk_loss_w¬nšg_dump ( Ëv– ,  äame * äm ) 3723 evt_physiÿl_lšk_loss_w¬nšg * evt = äm -> ±r ; 3725 `p_šd’t ( Ëv– , äm ); 3726 `´štf ("phy hªdË 0x%2.2x„—sÚ 0x%2.2x\n", evt -> hªdË ,ƒvt-> »asÚ ); 3727 } } 3729  šlše  $phys_lšk_hªdË_dump ( Ëv– ,  äame * äm ) 3731 evt_physiÿl_lšk_»cov”y * evt = äm -> ±r ; 3733 `p_šd’t ( Ëv– , äm ); 3734 `´štf ("phy hªdË 0x%2.2x\n", evt -> hªdË ); 3735 } } 3737  šlše  $logiÿl_lšk_com¶‘e_dump ( Ëv– ,  äame * äm ) 3739 evt_logiÿl_lšk_com¶‘e * evt = äm -> ±r ; 3741 `p_šd’t ( Ëv– , äm ); 3742 `´štf ("status 0x%2.2x†og handle 0x%4.4x…hy handle 0x%2.2x" 3744 evt -> ¡©us , `btohs Óvt-> log_hªdË ),ƒvt-> hªdË , 3745 evt -> tx_æow_id ); 3747 ià( evt -> ¡©us > 0) { 3748 `p_šd’t ( Ëv– , äm ); 3749 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3751 } } 3753  šlše  $æow_¥ec_modify_dump ( Ëv– ,  äame * äm ) 3755 evt_æow_¥ec_modify_com¶‘e * evt = äm -> ±r ; 3757 `p_šd’t ( Ëv– , äm ); 3758 `´štf ("status 0x%2.2x handle 0x%4.4x\n", 3759 evt -> ¡©us , `btohs Óvt-> hªdË )); 3761 ià( evt -> ¡©us > 0) { 3762 `p_šd’t ( Ëv– , äm ); 3763 `´štf ("E¼Ü: %s\n", `¡©us2¡r ( evt -> ¡©us )); 3765 } } 3767  šlše  $num_com¶‘ed_blocks_dump ( Ëv– ,  äame * äm ) 3769 evt_num_com¶‘ed_blocks * evt = äm -> ±r ; 3770  i ; 3772 `p_šd’t ( Ëv– , äm ); 3773 `´štf ("Total‚um blocks %d Num handles %d\n", 3774 `btohs ( evt -> tÙ®_num_blocks ),ƒvt-> num_hªdËs ); 3776  i = 0; i < evt -> num_hªdËs ; i++) { 3777 cm¶t_hªdË * h = & evt -> hªdËs [ i ]; 3779 `p_šd’t ( Ëv– + 1, äm ); 3780 `´štf ("Handle 0x%4.4x: Num complt…kts %d Num complt blks %d\n", 3781 `btohs ( h -> hªdË ), btohs(h-> num_cm¶t_pkts ), 3782 `btohs ( h -> num_cm¶t_blks )); 3784 } } 3786  šlše  $ev’t_dump ( Ëv– ,  äame * äm ) 3788 hci_ev’t_hdr * hdr = äm -> ±r ; 3789 ušt8_t ev’t = hdr -> evt ; 3791 ià( `p_fž‹r ( FILT_HCI )) 3794 ià( ev’t <ð EVENT_NUM ) { 3795 `p_šd’t ( Ëv– , äm ); 3796 `´štf ("HCI Event: %s (0x%2.2x)…len %d\n", 3797 ev’t_¡r [ hdr -> evt ], hdr->evt, hdr-> ¶’ ); 3798 } ià( hdr -> evt =ð EVT_TESTING ) { 3799 `p_šd’t ( Ëv– , äm ); 3800 `´štf ("HCI Ev’t: Te¡šg (0x%2.2x趒 %d\n", hdr -> evt , hdr-> ¶’ ); 3801 } ià( hdr -> evt =ð EVT_VENDOR ) { 3802 ušt16_t mªuçùu»r ; 3804 ià( ·r£r . æags & DUMP_NOVENDOR ) 3807 `p_šd’t ( Ëv– , äm ); 3808 `´štf ("HCI Ev’t: V’dÜ (0x%2.2x趒 %d\n", hdr -> evt , hdr-> ¶’ ); 3810 mªuçùu»r = `g‘_mªuçùu»r (); 3812  mªuçùu»r ) { 3816 äm -> ±r +ð HCI_EVENT_HDR_SIZE ; 3817 äm -> Ën -ð HCI_EVENT_HDR_SIZE ; 3818 `”icssÚ_dump ( Ëv– + 1, äm ); 3821 äm -> ±r +ð HCI_EVENT_HDR_SIZE ; 3822 äm -> Ën -ð HCI_EVENT_HDR_SIZE ; 3823 `c¤_dump ( Ëv– + 1, äm ); 3827 `p_šd’t ( Ëv– , äm ); 3828 `´štf ("HCI Ev’t: cod0x%2.2x…ËÀ%d\n", hdr -> evt , hdr-> ¶’ ); 3831 äm -> ±r +ð HCI_EVENT_HDR_SIZE ; 3832 äm -> Ën -ð HCI_EVENT_HDR_SIZE ; 3834 ià( ev’t =ð EVT_CMD_COMPLETE ) { 3835 evt_cmd_com¶‘e * cc = äm -> ±r ; 3836 ià( cc -> Ýcode =ð `cmd_Ýcode_·ck ( OGF_INFO_PARAM , OCF_READ_LOCAL_VERSION )) { 3837 »ad_loÿl_v”siÚ_½ * ½ = äm -> ±r + EVT_CMD_COMPLETE_SIZE ; 3838 mªuçùu»r = ½ ->manufacturer; 3842 ià( ev’t =ð EVT_DISCONN_COMPLETE ) { 3843 evt_discÚn_com¶‘e * evt = äm -> ±r ; 3844 `l2ÿp_þ—r ( `btohs ( evt -> hªdË )); 3847 ià(!( ·r£r . æags & DUMP_VERBOSE )) { 3848 `¿w_dump ( Ëv– , äm ); 3852  ev’t ) { 3853  EVT_LOOPBACK_COMMAND : 3854 `commªd_dump ( Ëv– + 1, äm ); 3856  EVT_CMD_COMPLETE : 3857 `cmd_com¶‘e_dump ( Ëv– + 1, äm ); 3859  EVT_CMD_STATUS : 3860 `cmd_¡©us_dump ( Ëv– + 1, äm ); 3862  EVT_HARDWARE_ERROR : 3863 `h¬dw¬e_”rÜ_dump ( Ëv– + 1, äm ); 3865  EVT_FLUSH_OCCURRED : 3866  EVT_QOS_VIOLATION : 3867 `hªdË_»¥Ú£_dump ( Ëv– + 1, äm ); 3869  EVT_INQUIRY_COMPLETE : 3870 `¡©us_»¥Ú£_dump ( Ëv– + 1, äm ); 3872  EVT_INQUIRY_RESULT : 3873 `šq_»suÉ_dump ( Ëv– + 1, äm ); 3875  EVT_CONN_COMPLETE : 3876 `cÚn_com¶‘e_dump ( Ëv– + 1, äm ); 3878  EVT_CONN_REQUEST : 3879 `cÚn_»que¡_dump ( Ëv– + 1, äm ); 3881  EVT_DISCONN_COMPLETE : 3882  EVT_DISCONNECT_LOGICAL_LINK_COMPLETE : 3883 `discÚn_com¶‘e_dump ( Ëv– + 1, äm ); 3885  EVT_AUTH_COMPLETE : 3886  EVT_CHANGE_CONN_LINK_KEY_COMPLETE : 3887 `g’”ic_»¥Ú£_dump ( Ëv– + 1, äm ); 3889  EVT_MASTER_LINK_KEY_COMPLETE : 3890 `ma¡”_lšk_key_com¶‘e_dump ( Ëv– + 1, äm ); 3892  EVT_REMOTE_NAME_REQ_COMPLETE : 3893 `»mÙe_Çme_»q_com¶‘e_dump ( Ëv– + 1, äm ); 3895  EVT_ENCRYPT_CHANGE : 3896 `’üy±_chªge_dump ( Ëv– + 1, äm ); 3898  EVT_READ_REMOTE_FEATURES_COMPLETE : 3899 `»ad_»mÙe_ã©u»s_com¶‘e_dump ( Ëv– + 1, äm ); 3901  EVT_READ_REMOTE_VERSION_COMPLETE : 3902 `»ad_»mÙe_v”siÚ_com¶‘e_dump ( Ëv– + 1, äm ); 3904  EVT_QOS_SETUP_COMPLETE : 3905 `qos_£tup_com¶‘e_dump ( Ëv– + 1, äm ); 3907  EVT_ROLE_CHANGE : 3908 `rÞe_chªge_dump ( Ëv– + 1, äm ); 3910  EVT_NUM_COMP_PKTS : 3911 `num_comp_pkts_dump ( Ëv– + 1, äm ); 3913  EVT_MODE_CHANGE : 3914 `mode_chªge_dump ( Ëv– + 1, äm ); 3916  EVT_RETURN_LINK_KEYS : 3917 `»tuº_lšk_keys_dump ( Ëv– + 1, äm ); 3919  EVT_PIN_CODE_REQ : 3920  EVT_LINK_KEY_REQ : 3921  EVT_IO_CAPABILITY_REQUEST : 3922  EVT_USER_PASSKEY_REQUEST : 3923  EVT_REMOTE_OOB_DATA_REQUEST : 3924 `pš_code_»q_dump ( Ëv– + 1, äm ); 3926  EVT_LINK_KEY_NOTIFY : 3927 `lšk_key_nÙify_dump ( Ëv– + 1, äm ); 3929  EVT_DATA_BUFFER_OVERFLOW : 3930 `d©a_bufãr_ov”æow_dump ( Ëv– + 1, äm ); 3932  EVT_MAX_SLOTS_CHANGE : 3933 `max_¦Ùs_chªge_dump ( Ëv– + 1, äm ); 3935  EVT_READ_CLOCK_OFFSET_COMPLETE : 3936 `»ad_þock_off£t_com¶‘e_dump ( Ëv– + 1, äm ); 3938  EVT_CONN_PTYPE_CHANGED : 3939 `cÚn_±y³_chªged_dump ( Ëv– + 1, äm ); 3941  EVT_PSCAN_REP_MODE_CHANGE : 3942 `psÿn_»p_mode_chªge_dump ( Ëv– + 1, äm ); 3944  EVT_FLOW_SPEC_COMPLETE : 3945 `æow_¥ec_com¶‘e_dump ( Ëv– + 1, äm ); 3947  EVT_INQUIRY_RESULT_WITH_RSSI : 3948 `šq_»suÉ_w™h_rssi_dump ( Ëv– + 1, äm ); 3950  EVT_READ_REMOTE_EXT_FEATURES_COMPLETE : 3951 `»ad_»mÙe_ext_ã©u»s_com¶‘e_dump ( Ëv– + 1, äm ); 3953  EVT_SYNC_CONN_COMPLETE : 3954 `sync_cÚn_com¶‘e_dump ( Ëv– + 1, äm ); 3956  EVT_SYNC_CONN_CHANGED : 3957 `sync_cÚn_chªged_dump ( Ëv– + 1, äm ); 3959  EVT_SNIFF_SUBRATING : 3960 `¢iff_sub¿tšg_ev’t_dump ( Ëv– + 1, äm ); 3962  EVT_EXTENDED_INQUIRY_RESULT : 3963 `ex‹nded_šq_»suÉ_dump ( Ëv– + 1, äm ); 3965  EVT_ENCRYPTION_KEY_REFRESH_COMPLETE : 3966 `g’”ic_»¥Ú£_dump ( Ëv– + 1, äm ); 3968  EVT_SIMPLE_PAIRING_COMPLETE : 3969 `bdaddr_»¥Ú£_dump ( Ëv– + 1, äm ); 3971  EVT_LINK_SUPERVISION_TIMEOUT_CHANGED : 3972 `lšk_su³rvisiÚ_timeout_chªged_dump ( Ëv– + 1, äm ); 3974  EVT_ENHANCED_FLUSH_COMPLETE : 3975 `g’”ic_commªd_dump ( Ëv– + 1, äm ); 3977  EVT_IO_CAPABILITY_RESPONSE : 3978 `io_ÿ·bž™y_»¶y_dump ( Ëv– + 1, äm ); 3980  EVT_USER_CONFIRM_REQUEST : 3981  EVT_USER_PASSKEY_NOTIFY : 3982 `u£r_·sskey_nÙify_dump ( Ëv– + 1, äm ); 3984  EVT_KEYPRESS_NOTIFY : 3985 `key´ess_nÙify_dump ( Ëv– + 1, äm ); 3987  EVT_REMOTE_HOST_FEATURES_NOTIFY : 3988 `»mÙe_ho¡_ã©u»s_nÙify_dump ( Ëv– + 1, äm ); 3990  EVT_LE_META_EVENT : 3991 `Ë_m‘a_ev_dump ( Ëv– + 1, äm ); 3993  EVT_PHYSICAL_LINK_COMPLETE : 3994 `phys_lšk_com¶‘e_dump ( Ëv– + 1, äm ); 3996  EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE : 3997 `discÚn_phys_lšk_com¶‘e_dump ( Ëv– + 1, äm ); 3999  EVT_PHYSICAL_LINK_LOSS_EARLY_WARNING : 4000 `phys_lšk_loss_w¬nšg_dump ( Ëv– + 1, äm ); 4002  EVT_PHYSICAL_LINK_RECOVERY : 4003  EVT_CHANNEL_SELECTED : 4004 `phys_lšk_hªdË_dump ( Ëv– + 1, äm ); 4006  EVT_LOGICAL_LINK_COMPLETE : 4007 `logiÿl_lšk_com¶‘e_dump ( Ëv– + 1, äm ); 4009  EVT_FLOW_SPEC_MODIFY_COMPLETE : 4010 `æow_¥ec_modify_dump ( Ëv– + 1, äm ); 4012  EVT_NUMBER_COMPLETED_BLOCKS : 4013 `num_com¶‘ed_blocks_dump ( Ëv– + 1, äm ); 4016 `¿w_dump ( Ëv– , äm ); 4019 } } 4021  šlše  $aþ_dump ( Ëv– ,  äame * äm ) 4023 hci_aþ_hdr * hdr = (*è äm -> ±r ; 4024 ušt16_t hªdË = `btohs ( hdr ->handle); 4025 ušt16_t dËn = `btohs ( hdr ->dlen); 4026 ušt8_t æags = `aþ_æags ( hªdË ); 4028 ià(! `p_fž‹r ( FILT_HCI )) { 4029 `p_šd’t ( Ëv– , äm ); 4030 `´štf ("ACL data: handle %d flags 0x%2.2x dlen %d\n", 4031 `aþ_hªdË ( hªdË ), æags , dËn ); 4032 Ëv– ++; 4035 äm -> ±r +ð HCI_ACL_HDR_SIZE ; 4036 äm -> Ën -ð HCI_ACL_HDR_SIZE ; 4037 äm -> æags = flags; 4038 äm -> hªdË = `aþ_hªdË (handle); 4040 ià( ·r£r . fž‹r & ~ FILT_HCI ) 4041 `l2ÿp_dump ( Ëv– , äm ); 4043 `¿w_dump ( Ëv– , äm ); 4044 } } 4046  šlše  $sco_dump ( Ëv– ,  äame * äm ) 4048 hci_sco_hdr * hdr = (*è äm -> ±r ; 4049 ušt16_t hªdË = `btohs ( hdr ->handle); 4050 ušt8_t æags = `aþ_æags ( hªdË ); 4051  Ën ; 4053 ià( äm -> audio_fd > `fž’o ( ¡d”r )) { 4054 Ën = `wr™e ( äm -> audio_fd , frm-> ±r + HCI_SCO_HDR_SIZE , hdr -> dËn ); 4055 ià( Ën < 0) 4059 ià(! `p_fž‹r ( FILT_SCO )) { 4060 `p_šd’t ( Ëv– , äm ); 4061 `´štf ("SCO data: handle %d flags 0x%2.2x dlen %d\n", 4062 `aþ_hªdË ( hªdË ), æags , hdr -> dËn ); 4063 Ëv– ++; 4065 äm -> ±r +ð HCI_SCO_HDR_SIZE ; 4066 äm -> Ën -ð HCI_SCO_HDR_SIZE ; 4067 `¿w_dump ( Ëv– , äm ); 4069 } } 4071  šlše  $v’dÜ_dump ( Ëv– ,  äame * äm ) 4073 ià( `p_fž‹r ( FILT_HCI )) 4076 ià( äm -> dev_id =ð HCI_DEV_NONE ) { 4077 ušt16_t deviû = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 4078 ušt16_t ´Ùo = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 4079 ušt16_t ty³ = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 4080 ušt16_t ¶’ = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 4082 `p_šd’t ( Ëv– , äm ); 4084 `´štf ("System %s: device hci%d…roto 0x%2.2xype 0x%2.2x…len %d\n", 4085 äm -> š ? "ev’t" : "commªd", deviû , ´Ùo , ty³ , ¶’ ); 4087 `¿w_dump ( Ëv– , äm ); 4091 ià( ·r£r . æags & DUMP_NOVENDOR ) 4094 ià( `g‘_mªuçùu»r () == 12) { 4095 `b·_dump ( Ëv– , äm ); 4099 `p_šd’t ( Ëv– , äm ); 4100 `´štf ("V’dÜ d©a:†’ %d\n", äm -> Ën ); 4101 `¿w_dump ( Ëv– , äm ); 4102 } } 4104  $hci_dump ( Ëv– ,  äame * äm ) 4106 ušt8_t ty³ = *(ušt8_ˆ*) äm -> ±r ; 4108 äm -> ±r ++; frm-> Ën --; 4110  ty³ ) { 4111  HCI_COMMAND_PKT : 4112 `commªd_dump ( Ëv– , äm ); 4115  HCI_EVENT_PKT : 4116 `ev’t_dump ( Ëv– , äm ); 4119  HCI_ACLDATA_PKT : 4120 `aþ_dump ( Ëv– , äm ); 4123  HCI_SCODATA_PKT : 4124 `sco_dump ( Ëv– , äm ); 4127  HCI_VENDOR_PKT : 4128 `v’dÜ_dump ( Ëv– , äm ); 4132 ià( `p_fž‹r ( FILT_HCI )) 4135 `p_šd’t ( Ëv– , äm ); 4136 `´štf ("Unknown:y³ 0x%2.2x†’ %d\n", ty³ , äm -> Ën ); 4137 `¿w_dump ( Ëv– , äm ); 4140 } } @tools/parser/hcrp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~"·r£r.h " 36 * $pid2¡r ( ušt16_t pid ) 38  pid ) { 62 } } 64 * $¡©us2¡r ( ušt16_t ¡©us ) 66  ¡©us ) { 78 } } 80  $hüp_dump ( Ëv– ,  äame * äm ) 82 ušt16_t pid , tid , ¶’ , ¡©us ; 83 ušt32_t üed™s ; 85 pid = `g‘_u16 ( äm ); 86 tid = `g‘_u16 ( äm ); 87 ¶’ = `g‘_u16 ( äm ); 89 `p_šd’t ( Ëv– , äm ); 91 `´štf ("HCRP %s %s:id 0x%x…len %d", 92 `pid2¡r ( pid ), äm -> š ? "r¥" : "cmd", tid , ¶’ ); 94 ià( äm -> š ) { 95 ¡©us = `g‘_u16 ( äm ); 96 `´štf (" stu %d (%s)\n", ¡©us , `¡©us2¡r (status)); 98 `´štf ("\n"); 100 ià( pid =ð0x0001 && ! äm -> š ) { 101 üed™s = `g‘_u32 ( äm ); 102 `p_šd’t ( Ëv– + 1, äm ); 103 `´štf ("üed™ %d\n", üed™s ); 106 ià( pid =ð0x0002 && äm -> š ) { 107 üed™s = `g‘_u32 ( äm ); 108 `p_šd’t ( Ëv– + 1, äm ); 109 `´štf ("üed™ %d\n", üed™s ); 112 `¿w_dump ( Ëv– + 1, äm ); 113 } } @tools/parser/hidp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~"·r£r.h " 36 * $ty³2¡r ( ušt8_t h—d ) 38  h—d & 0xf0) { 62 } } 64 * $»suÉ2¡r ( ušt8_t h—d ) 66  h—d & 0x0f) { 84 } } 86 * $Ý”©iÚ2¡r ( ušt8_t h—d ) 88  h—d & 0x0f) { 104 } } 106 * $»pÜt2¡r ( ušt8_t h—d ) 108  h—d & 0x03) { 120 } } 122 * $´ÙocÞ2¡r ( ušt8_t h—d ) 124  h—d & 0x01) { 132 } } 134  $hidp_dump ( Ëv– ,  äame * äm ) 136 ušt8_t hdr ; 137 * ·¿m ; 139 hdr = `g‘_u8 ( äm ); 141  hdr & 0xf0) { 143 ·¿m = `»suÉ2¡r ( hdr ); 146 ·¿m = `Ý”©iÚ2¡r ( hdr ); 150 ·¿m = `´ÙocÞ2¡r ( hdr ); 156 ·¿m = `»pÜt2¡r ( hdr ); 159 ·¿m = ""; 163 `p_šd’t ( Ëv– , äm ); 165 `´štf ("HIDP: %s: %s\n", `ty³2¡r ( hdr ), ·¿m ); 167 `¿w_dump ( Ëv– , äm ); 168 } } @tools/parser/l2cap.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 34  ~<š‰y³s.h > 36  ~"·r£r.h " 37  ~"sdp.h " 38  ~"l2ÿp.h " 39  ~"lib/hci.h " 40  ~"lib/a2mp.h " 41  ~"lib/amp.h " 44 ušt16_t mhªdË ; 45  äame mäm ; 46 } thªdË_šfo ; 47  #HANDLE_TABLE_SIZE 10 ) 49  hªdË_šfo ghªdË_bË [ HANDLE_TABLE_SIZE ]; 52 ušt16_t mhªdË ; 53 ušt16_t mcid ; 54 ušt16_t mpsm ; 55 ušt16_t mnum ; 56 ušt8_t mmode ; 57 ušt8_t mext_ù¾ ; 58 } tcid_šfo ; 59  #CID_TABLE_SIZE 20 ) 61  cid_šfo gcid_bË [2][ CID_TABLE_SIZE ]; 63  #SCID cid_bË [0] ) 64  #DCID cid_bË [1] ) 67  sã©u»s { 68 * mÇme ; 69  mæag ; 72  ã©u»s gl2ÿp_ã©u»s [] = { 73 { "Flow cÚŒÞ mode", L2CAP_FEAT_FLOWCTL }, 74 { "R‘¿nsmissiÚ mode", L2CAP_FEAT_RETRANS }, 75 { "Bi-dœeùiÚ® QoS", L2CAP_FEAT_BIDIR_QOS }, 76 { "Enhªûd R‘¿nsmissiÚ mode", L2CAP_FEAT_ERTM }, 77 { "SŒ—mšg mode", L2CAP_FEAT_STREAMING }, 78 { "FCS O±iÚ", L2CAP_FEAT_FCS }, 79 { "Ex‹nded Flow S³cifiÿtiÚ", L2CAP_FEAT_EXT_FLOW }, 80 { "Fixed ChªÃls", L2CAP_FEAT_FIXED_CHAN }, 81 { "Ex‹nded Wšdow Size", L2CAP_FEAT_EXT_WINDOW }, 82 { "Uniÿ¡ CÚÃùËs D©¨Reû±iÚ", L2CAP_FEAT_UCD }, 86  ã©u»s gl2ÿp_fix_chª [] = { 87 { "L2CAP SigÇΚg ChªÃl", L2CAP_FC_L2CAP }, 88 { "L2CAP CÚÆess", L2CAP_FC_CONNLESS }, 89 { "AMP Mªag” PrÙocÞ", L2CAP_FC_A2MP }, 93  äame * $add_hªdË ( ušt16_t hªdË ) 95  hªdË_šfo * t = hªdË_bË ; 96  i ; 98  i = 0; i < HANDLE_TABLE_SIZE ; i++) 99 ià(! t [ i ]. hªdË ) { 100 t [ i ]. hªdË = handle; 101  & t [ i ]. äm ; 103  NULL ; 104 } } 106  äame * $g‘_äame ( ušt16_t hªdË ) 108  hªdË_šfo * t = hªdË_bË ; 109  i ; 111  i = 0; i < HANDLE_TABLE_SIZE ; i++) 112 ià( t [ i ]. hªdË == handle) 113  & t [ i ]. äm ; 115  `add_hªdË ( hªdË ); 116 } } 118  $add_cid ( š , ušt16_t hªdË , ušt16_ˆ cid , ušt16_ˆ psm ) 120  cid_šfo * bË = cid_bË [ š ]; 121  i , pos = -1; 122 ušt16_t num = 1; 124  i = 0; i < CID_TABLE_SIZE ; i++) { 125 ià(( pos < 0 && ! bË [ i ]. cid ) ||able[i].cid == cid) 126 pos = i ; 127 ià( bË [ i ]. psm ==…sm) 128 num ++; 131 ià( pos >= 0) { 132 bË [ pos ]. hªdË = handle; 133 bË [ pos ]. cid = cid; 134 bË [ pos ]. psm =…sm; 135 bË [ pos ]. num =‚um; 136 bË [ pos ]. mode = 0; 138 } } 140  $d–_cid ( š , ušt16_t dcid , ušt16_ˆ scid ) 142  t , i ; 143 ušt16_t cid [2]; 145 ià(! š ) { 146 cid [0] = dcid ; 147 cid [1] = scid ; 149 cid [0] = scid ; 150 cid [1] = dcid ; 153  t = 0; < 2;++) { 154  i = 0; i < CID_TABLE_SIZE ; i++) 155 ià( cid_bË [ t ][ i ]. cid == cid[t]) { 156 cid_bË [ t ][ i ]. hªdË = 0; 157 cid_bË [ t ][ i ]. cid = 0; 158 cid_bË [ t ][ i ]. psm = 0; 159 cid_bË [ t ][ i ]. num = 0; 160 cid_bË [ t ][ i ]. mode = 0; 164 } } 166  $d–_hªdË ( ušt16_t hªdË ) 168  t , i ; 170  t = 0; < 2;++) { 171  i = 0; i < CID_TABLE_SIZE ; i++) 172 ià( cid_bË [ t ][ i ]. hªdË == handle) { 173 cid_bË [ t ][ i ]. hªdË = 0; 174 cid_bË [ t ][ i ]. cid = 0; 175 cid_bË [ t ][ i ]. psm = 0; 176 cid_bË [ t ][ i ]. num = 0; 177 cid_bË [ t ][ i ]. mode = 0; 181 } } 182  ušt16_t $g‘_psm ( š , ušt16_t hªdË , ušt16_ˆ cid ) 184  cid_šfo * bË = cid_bË [ š ]; 185  i ; 187  i = 0; i < CID_TABLE_SIZE ; i++) 188 ià( bË [ i ]. hªdË =ðhªdË &&abË[i]. cid == cid) 189  bË [ i ]. psm ; 190  ·r£r . deåsm ; 191 } } 193  ušt16_t $g‘_num ( š , ušt16_t hªdË , ušt16_ˆ cid ) 195  cid_šfo * bË = cid_bË [ š ]; 196  i ; 198  i = 0; i < CID_TABLE_SIZE ; i++) 199 ià( bË [ i ]. hªdË =ðhªdË &&abË[i]. cid == cid) 200  bË [ i ]. num ; 202 } } 204  $£t_mode ( š , ušt16_t hªdË , ušt16_ˆ cid , ušt8_t mode ) 206  cid_šfo * bË = cid_bË [ š ]; 207  i ; 209  i = 0; i < CID_TABLE_SIZE ; i++) 210 ià( bË [ i ]. hªdË =ðhªdË &&abË[i]. cid == cid) 211 bË [ i ]. mode = mode; 212 } } 214  ušt8_t $g‘_mode ( š , ušt16_t hªdË , ušt16_ˆ cid ) 216  cid_šfo * bË = cid_bË [ š ]; 217  i ; 219  i = 0; i < CID_TABLE_SIZE ; i++) 220 ià( bË [ i ]. hªdË =ðhªdË &&abË[i]. cid == cid) 221  bË [ i ]. mode ; 223 } } 225  $£t_ext_ù¾ ( š , ušt16_t hªdË , ušt16_ˆ cid , 226 ušt8_t ext_ù¾ ) 228  cid_šfo * bË = cid_bË [ š ]; 229  i ; 231  i = 0; i < CID_TABLE_SIZE ; i++) 232 ià( bË [ i ]. hªdË =ðhªdË &&abË[i]. cid == cid) 233 bË [ i ]. ext_ù¾ =ƒxt_ctrl; 234 } } 236  ušt8_t $g‘_ext_ù¾ ( š , ušt16_t hªdË , ušt16_ˆ cid ) 238  cid_šfo * bË = cid_bË [ š ]; 239  i ; 241  i = 0; i < CID_TABLE_SIZE ; i++) 242 ià( bË [ i ]. hªdË =ðhªdË &&abË[i]. cid == cid) 243  bË [ i ]. ext_ù¾ ; 245 } } 247  ušt32_t $g‘_v® ( ušt8_t * ±r , ušt8_ˆ Ën ) 249  Ën ) { 251  * ±r ; 253  `g‘_Ë16 ( ±r ); 255  `g‘_Ë32 ( ±r ); 258 } } 260 * $»asÚ2¡r ( ušt16_t »asÚ ) 262  »asÚ ) { 272 } } 274 * $a2m´—sÚ2¡r ( ušt16_t »asÚ ) 276  »asÚ ) { 277  A2MP_COMMAND_NOT_RECOGNIZED : 282 } } 284 * $cÚÄesuÉ2¡r ( ušt16_t »suÉ ) 286  »suÉ ) { 300 } } 302 * $¡©us2¡r ( ušt16_t ¡©us ) 304  ¡©us ) { 314 } } 316 * $cÚäesuÉ2¡r ( ušt16_t »suÉ ) 318  »suÉ ) { 319  L2CAP_CONF_SUCCESS : 321  L2CAP_CONF_UNACCEPT : 323  L2CAP_CONF_REJECT : 325  L2CAP_CONF_UNKNOWN : 327  L2CAP_CONF_PENDING : 329  L2CAP_CONF_EFS_REJECT : 334 } } 335 * $šfÜesuÉ2¡r ( ušt16_t »suÉ ) 337  »suÉ ) { 345 } } 347 * $ty³2¡r ( ušt8_t ty³ ) 349  ty³ ) { 350  L2CAP_SERVTYPE_NOTRAFFIC : 352  L2CAP_SERVTYPE_BESTEFFORT : 354  L2CAP_SERVTYPE_GUARANTEED : 359 } } 361 * $mode2¡r ( ušt8_t mode ) 363  mode ) { 377 } } 379 * $fcs2¡r ( ušt8_t fcs ) 381  fcs ) { 389 } } 391 * $§r2¡r ( ušt8_t §r ) 393  §r ) { 394  L2CAP_SAR_UNSEGMENTED : 396  L2CAP_SAR_START : 398  L2CAP_SAR_END : 400  L2CAP_SAR_CONTINUE : 406 } } 408 * $su³rvisÜy2¡r ( ušt8_t su³rvisÜy ) 410  su³rvisÜy ) { 411  L2CAP_SUPER_RR : 413  L2CAP_SUPER_REJ : 415  L2CAP_SUPER_RNR : 417  L2CAP_SUPER_SREJ : 422 } } 424 * $ampù¾ty³2¡r ( ušt8_t ty³ ) 426  ty³ ) { 427  HCI_BREDR : 429  HCI_AMP : 434 } } 436 * $ampù¾¡©us2¡r ( ušt8_t ¡©us ) 438  ¡©us ) { 439  AMP_CTRL_POWERED_DOWN : 441  AMP_CTRL_BLUETOOTH_ONLY : 443  AMP_CTRL_NO_CAPACITY : 445  AMP_CTRL_LOW_CAPACITY : 447  AMP_CTRL_MEDIUM_CAPACITY : 449  AMP_CTRL_HIGH_CAPACITY : 451  AMP_CTRL_FULL_CAPACITY : 457 } } 459 * $a2mp¡©us2¡r ( ušt8_t ¡©us ) 461  ¡©us ) { 462  A2MP_STATUS_SUCCESS : 464  A2MP_STATUS_INVALID_CTRL_ID : 469 } } 471 * $a2mpýl¡©us2¡r ( ušt8_t ¡©us ) 473  ¡©us ) { 474  A2MP_STATUS_SUCCESS : 476  A2MP_STATUS_INVALID_CTRL_ID : 478  A2MP_STATUS_UNABLE_START_LINK_CREATION : 480  A2MP_STATUS_COLLISION_OCCURED : 482  A2MP_STATUS_DISCONN_REQ_RECVD : 484  A2MP_STATUS_PHYS_LINK_EXISTS : 486  A2MP_STATUS_SECURITY_VIOLATION : 491 } } 493 * $a2mpd¶¡©us2¡r ( ušt8_t ¡©us ) 495  ¡©us ) { 496  A2MP_STATUS_SUCCESS : 498  A2MP_STATUS_INVALID_CTRL_ID : 500  A2MP_STATUS_NO_PHYSICAL_LINK_EXISTS : 505 } } 507  šlše  $commªd_»j ( Ëv– ,  äame * äm ) 509 l2ÿp_cmd_»j * h = äm -> ±r ; 510 ušt16_t »asÚ = `btohs ( h ->reason); 511 ušt32_t cid ; 513 `´štf ("Commªd„ej:„—sÚ %d", »asÚ ); 515  »asÚ ) { 517 `´štf (" mtu %d\n", `g‘_v® ( äm -> ±r + L2CAP_CMD_REJ_SIZE , 2)); 520 cid = `g‘_v® ( äm -> ±r + L2CAP_CMD_REJ_SIZE , 4); 521 `´štf (" dcid 0x%4.4x scid 0x%4.4x\n", cid & 0xffff, cid >> 16); 524 `´štf ("\n"); 528 `p_šd’t ( Ëv– + 1, äm ); 529 `´štf ("%s\n", `»asÚ2¡r ( »asÚ )); 530 } } 532  šlše  $cÚn_»q ( Ëv– ,  äame * äm ) 534 l2ÿp_cÚn_»q * h = äm -> ±r ; 535 ušt16_t psm = `btohs ( h ->psm); 536 ušt16_t scid = `btohs ( h ->scid); 538 `add_cid ( äm -> š , frm-> hªdË , scid , psm ); 540 ià( `p_fž‹r ( FILT_L2CAP )) 543 `´štf ("CÚÃù„eq:…sm %d scid 0x%4.4x\n", psm , scid ); 544 } } 546  šlše  $cÚn_r¥ ( Ëv– ,  äame * äm ) 548 l2ÿp_cÚn_r¥ * h = äm -> ±r ; 549 ušt16_t scid = `btohs ( h ->scid); 550 ušt16_t dcid = `btohs ( h ->dcid); 551 ušt16_t »suÉ = `btohs ( h ->result); 552 ušt16_t ¡©us = `btohs ( h ->status); 553 ušt16_t psm ; 555  h -> »suÉ ) { 556  L2CAP_CR_SUCCESS : 557 ià(( psm = `g‘_psm (! äm -> š , frm-> hªdË , scid ))) 558 `add_cid ( äm -> š , frm-> hªdË , dcid , psm ); 561  L2CAP_CR_PEND : 565 `d–_cid ( äm -> š , dcid , scid ); 569 ià( `p_fž‹r ( FILT_L2CAP )) 572 `´štf ("Connect„sp: dcid 0x%4.4x scid 0x%4.4x„esult %d status %d\n", 573 dcid , scid , »suÉ , ¡©us ); 575 `p_šd’t ( Ëv– + 1, äm ); 576 `´štf ("%s", `cÚÄesuÉ2¡r ( »suÉ )); 578 ià( »suÉ == 0x0001) 579 `´štf (" - %s\n", `¡©us2¡r ( ¡©us )); 581 `´štf ("\n"); 582 } } 584  $cÚf_rfc (* ±r ,  Ën ,  š , ušt16_t hªdË , 585 ušt16_t cid ) 587 ušt8_t mode ; 589 mode = *(( ušt8_t *è ±r ); 590 `£t_mode (! š , hªdË , cid , mode ); 592 `´štf ("RFC 0x%02x (%s", mode , `mode2¡r (mode)); 593 ià( mode >= 0x01 && mode <= 0x04) { 594 ušt8_t txwš , maxŒªs ; 595 ušt16_t ¹o , mto , mps ; 596 txwš = *(( ušt8_t *è( ±r + 1)); 597 maxŒªs = *(( ušt8_t *è( ±r + 2)); 598 ¹o = `g‘_Ë16 ( ±r + 3); 599 mto = `g‘_Ë16 ( ±r + 5); 600 mps = `g‘_Ë16 ( ±r + 7); 601 `´štf (", TxWin %d, MaxTx %d, RTo %d, MTo %d, MPS %d", 602 txwš , maxŒªs , ¹o , mto , mps ); 604 `´štf (")"); 605 } } 607  $cÚf_efs (* ±r ) 609 ušt8_t id , £r_ty³ ; 610 ušt16_t max_sdu ; 611 ušt32_t sdu_™ime , acûss_Ït , æush_to ; 613 id = `g‘_v® ( ±r , (id)); 614 £r_ty³ = `g‘_v® ( ±r + 1, (ser_type)); 615 max_sdu = `g‘_v® ( ±r + 2, (max_sdu)); 616 sdu_™ime = `g‘_v® ( ±r + 4, (sdu_itime)); 617 acûss_Ït = `g‘_v® ( ±r + 8, (access_lat)); 618 æush_to = `g‘_v® ( ±r + 12, (flush_to)); 620 `´štf ("EFS (Id 0x%02x, SerType %s, MaxSDU 0x%04x, SDUitime 0x%08x, " 622 id , `ty³2¡r ( £r_ty³ ), max_sdu , sdu_™ime , 623 acûss_Ït , æush_to ); 624 } } 626  $cÚf_fcs (* ±r ,  Ën ) 628 ušt8_t fcs ; 630 fcs = *(( ušt8_t *è ±r ); 631 `´štf ("FCS Option"); 632 ià( Ën > 0) 633 `´štf (" 0x%2.2x (%s)", fcs , `fcs2¡r (fcs)); 634 } } 636  $cÚf_Ýt ( Ëv– , * ±r ,  Ën ,  š , ušt16_t hªdË , 637 ušt16_t cid ) 639  šd’t = 0; 640 `p_šd’t ( Ëv– , 0); 641  Ën > 0) { 642 l2ÿp_cÚf_Ýt * h = ±r ; 644 ±r +ð L2CAP_CONF_OPT_SIZE + h -> Ën ; 645 Ën -ð L2CAP_CONF_OPT_SIZE + h ->len; 647 ià( h -> ty³ & 0x80) 648 `´štf ("["); 650 ià( šd’t ++) { 651 `´štf ("\n"); 652 `p_šd’t ( Ëv– , 0); 655  h -> ty³ & 0x7f) { 656  L2CAP_CONF_MTU : 657 `£t_mode ( š , hªdË , cid , 0x00); 658 `´štf ("MTU"); 659 ià( h -> Ën > 0) 660 `´štf (" %d", `g‘_v® ( h -> v® , h-> Ën )); 663  L2CAP_CONF_FLUSH_TO : 664 `´štf ("FlushTO"); 665 ià( h -> Ën > 0) 666 `´štf (" %d", `g‘_v® ( h -> v® , h-> Ën )); 669  L2CAP_CONF_QOS : 670 `´štf ("QoS"); 671 ià( h -> Ën > 0) 672 `´štf (" 0x%02x (%s)", *( h -> v® + 1), `ty³2¡r (*(h->val + 1))); 675  L2CAP_CONF_RFC : 676 `cÚf_rfc ( h -> v® , h-> Ën , š , hªdË , cid ); 679  L2CAP_CONF_FCS : 680 `cÚf_fcs ( h -> v® , h-> Ën ); 683  L2CAP_CONF_EFS : 684 `cÚf_efs ( h -> v® ); 687  L2CAP_CONF_EWS : 688 `´štf ("EWS"); 689 ià( h -> Ën > 0) 690 `´štf (" %d", `g‘_v® ( h -> v® , h-> Ën )); 691 `£t_ext_ù¾ ( š , hªdË , cid , 1); 695 `´štf ("UnknowÀÑy³ %2.2x,†’ %d)", h -> ty³ & 0x7f, h-> Ën ); 699 ià( h -> ty³ & 0x80) 700 `´štf ("] "); 702 `´štf (" "); 704 `´štf ("\n"); 705 } } 707  $cÚf_li¡ ( Ëv– , ušt8_t * li¡ ,  Ën ) 709  i ; 711 `p_šd’t ( Ëv– , 0); 712  i = 0; i < Ën ; i++) { 713  li¡ [ i ] & 0x7f) { 714  L2CAP_CONF_MTU : 715 `´štf ("MTU "); 717  L2CAP_CONF_FLUSH_TO : 718 `´štf ("FlushTo "); 720  L2CAP_CONF_QOS : 721 `´štf ("QoS "); 723  L2CAP_CONF_RFC : 724 `´štf ("RFC "); 726  L2CAP_CONF_FCS : 727 `´štf ("FCS "); 729  L2CAP_CONF_EFS : 730 `´štf ("EFS "); 732  L2CAP_CONF_EWS : 733 `´štf ("EWS "); 736 `´štf ("%2.2x ", li¡ [ i ] & 0x7f); 740 `´štf ("\n"); 741 } } 743  šlše  $cÚf_»q ( Ëv– , l2ÿp_cmd_hdr * cmd ,  äame * äm ) 745 l2ÿp_cÚf_»q * h = äm -> ±r ; 746 ušt16_t dcid = `btohs ( h ->dcid); 747  þ’ = `btohs ( cmd -> Ën è- L2CAP_CONF_REQ_SIZE ; 749 ià( `p_fž‹r ( FILT_L2CAP )) 752 `´štf ("Config„eq: dcid 0x%4.4x flags 0x%2.2x clen %d\n", 753 dcid , `btohs ( h -> æags ), þ’ ); 755 ià( þ’ > 0) 756 `cÚf_Ýt ( Ëv– + 1, h -> d©a , þ’ , äm -> š , frm-> hªdË , 757 dcid ); 758 } } 760  šlše  $cÚf_r¥ ( Ëv– , l2ÿp_cmd_hdr * cmd ,  äame * äm ) 762 l2ÿp_cÚf_r¥ * h = äm -> ±r ; 763 ušt16_t scid = `btohs ( h ->scid); 764 ušt16_t »suÉ = `btohs ( h ->result); 765  þ’ = `btohs ( cmd -> Ën è- L2CAP_CONF_RSP_SIZE ; 767 ià( `p_fž‹r ( FILT_L2CAP )) 770 `´štf ("Config„sp: scid 0x%4.4x flags 0x%2.2x„esult %d clen %d\n", 771 scid , `btohs ( h -> æags ), »suÉ , þ’ ); 773 ià( þ’ > 0) { 774 ià( »suÉ ) { 775 `p_šd’t ( Ëv– + 1, äm ); 776 `´štf ("%s\n", `cÚäesuÉ2¡r ( »suÉ )); 778 ià( »suÉ == 0x0003) 779 `cÚf_li¡ ( Ëv– + 1, h -> d©a , þ’ ); 781 `cÚf_Ýt ( Ëv– + 1, h -> d©a , þ’ , äm -> š , 782 äm -> hªdË , scid ); 784 `p_šd’t ( Ëv– + 1, äm ); 785 `´štf ("%s\n", `cÚäesuÉ2¡r ( »suÉ )); 787 } } 789  šlše  $discÚn_»q ( Ëv– ,  äame * äm ) 791 l2ÿp_discÚn_»q * h = äm -> ±r ; 793 ià( `p_fž‹r ( FILT_L2CAP )) 796 `´štf ("Disconn„eq: dcid 0x%4.4x scid 0x%4.4x\n", 797 `btohs ( h -> dcid ), btohs(h-> scid )); 798 } } 800  šlše  $discÚn_r¥ ( Ëv– ,  äame * äm ) 802 l2ÿp_discÚn_r¥ * h = äm -> ±r ; 803 ušt16_t dcid = `btohs ( h ->dcid); 804 ušt16_t scid = `btohs ( h ->scid); 806 `d–_cid ( äm -> š , dcid , scid ); 808 ià( `p_fž‹r ( FILT_L2CAP )) 811 `´štf ("Disconn„sp: dcid 0x%4.4x scid 0x%4.4x\n", 812 `btohs ( h -> dcid ), btohs(h-> scid )); 813 } } 815  šlše  $echo_»q ( Ëv– , l2ÿp_cmd_hdr * cmd ,  äame * äm ) 817 ià( `p_fž‹r ( FILT_L2CAP )) 820 `´štf ("EchØ»q: dËÀ%d\n", `btohs ( cmd -> Ën )); 821 `¿w_dump ( Ëv– , äm ); 822 } } 824  šlše  $echo_r¥ ( Ëv– , l2ÿp_cmd_hdr * cmd ,  äame * äm ) 826 ià( `p_fž‹r ( FILT_L2CAP )) 829 `´štf ("EchØr¥: dËÀ%d\n", `btohs ( cmd -> Ën )); 830 `¿w_dump ( Ëv– , äm ); 831 } } 833  $šfo_Ýt ( Ëv– ,  ty³ , * ±r ,  Ën ) 835 ušt32_t mask ; 836 ušt64_t fc_mask ; 837  i ; 839 `p_šd’t ( Ëv– , 0); 841  ty³ ) { 843 `´štf ("CÚÃùiÚËs MTU %d\n", `g‘_v® ( ±r , Ën )); 846 mask = `g‘_v® ( ±r , Ën ); 847 `´štf ("Ex‹nded f—tu» mask 0x%4.4x\n", mask ); 848 ià( ·r£r . æags & DUMP_VERBOSE ) 849  i =0; l2ÿp_ã©u»s [i]. Çme ; i++) 850 ià( mask & l2ÿp_ã©u»s [ i ]. æag ) { 851 `p_šd’t ( Ëv– + 1, 0); 852 `´štf ("%s\n", l2ÿp_ã©u»s [ i ]. Çme ); 856 fc_mask = `g‘_Ë64 ( ±r ); 857 `´štf ("Fixed chªÃÈli¡ 0x%8.8" PRIx64 "\n", fc_mask ); 858 ià( ·r£r . æags & DUMP_VERBOSE ) 859  i =0; l2ÿp_fix_chª [i]. Çme ; i++) 860 ià( fc_mask & l2ÿp_fix_chª [ i ]. æag ) { 861 `p_šd’t ( Ëv– + 1, 0); 862 `´štf ("%s\n", l2ÿp_fix_chª [ i ]. Çme ); 866 `´štf ("UnknowÀÖ’ %d)\n", Ën ); 869 } } 871  šlše  $šfo_»q ( Ëv– , l2ÿp_cmd_hdr * cmd ,  äame * äm ) 873 l2ÿp_šfo_»q * h = äm -> ±r ; 875 ià( `p_fž‹r ( FILT_L2CAP )) 878 `´štf ("InfØ»q:y³ %d\n", `btohs ( h -> ty³ )); 879 } } 881  šlše  $šfo_r¥ ( Ëv– , l2ÿp_cmd_hdr * cmd ,  äame * äm ) 883 l2ÿp_šfo_r¥ * h = äm -> ±r ; 884 ušt16_t ty³ = `btohs ( h ->type); 885 ušt16_t »suÉ = `btohs ( h ->result); 886  ž’ = `btohs ( cmd -> Ën è- L2CAP_INFO_RSP_SIZE ; 888 ià( `p_fž‹r ( FILT_L2CAP )) 891 `´štf ("InfØr¥:y³ %d„esuÉ %d\n", ty³ , »suÉ ); 893 ià( ž’ > 0) { 894 `šfo_Ýt ( Ëv– + 1, ty³ , h -> d©a , ž’ ); 896 `p_šd’t ( Ëv– + 1, äm ); 897 `´štf ("%s\n", `šfÜesuÉ2¡r ( »suÉ )); 899 } } 901  $l2ÿp_ù¾_ext_·r£ ( Ëv– ,  äame * äm , ušt32_t ù¾ ) 903 `p_šd’t ( Ëv– , äm ); 905 `´štf ("%s:", ù¾ & L2CAP_EXT_CTRL_FRAME_TYPE ? "S-frame" : "I-frame"); 907 ià( ù¾ & L2CAP_EXT_CTRL_FRAME_TYPE ) { 908 `´štf (" %s", `su³rvisÜy2¡r (( ù¾ & L2CAP_EXT_CTRL_SUPERVISE_MASK ) >> 909 L2CAP_EXT_CTRL_SUPER_SHIFT )); 911 ià( ù¾ & L2CAP_EXT_CTRL_POLL ) 912 `´štf (" P-bit"); 914 ušt8_t §r = ( ù¾ & L2CAP_EXT_CTRL_SAR_MASK ) >> 915 L2CAP_EXT_CTRL_SAR_SHIFT ; 916 `´štf (" %s", `§r2¡r ( §r )); 917 ià( §r =ð L2CAP_SAR_START ) { 918 ušt16_t Ën ; 919 Ën = `g‘_Ë16 ( äm -> ±r ); 920 äm -> ±r +ð L2CAP_SDULEN_SIZE ; 921 äm -> Ën -ð L2CAP_SDULEN_SIZE ; 922 `´štf (" (ËÀ%d)", Ën ); 924 `´štf (" TxSeq %d", ( ù¾ & L2CAP_EXT_CTRL_TXSEQ_MASK ) >> 925 L2CAP_EXT_CTRL_TXSEQ_SHIFT ); 928 `´štf (" ReqSeq %d", ( ù¾ & L2CAP_EXT_CTRL_REQSEQ_MASK ) >> 929 L2CAP_EXT_CTRL_REQSEQ_SHIFT ); 931 ià( ù¾ & L2CAP_EXT_CTRL_FINAL ) 932 `´štf (" F-bit"); 933 } } 935  $l2ÿp_ù¾_·r£ ( Ëv– ,  äame * äm , ušt32_t ù¾ ) 937 `p_šd’t ( Ëv– , äm ); 939 `´štf ("%s:", ù¾ & L2CAP_CTRL_FRAME_TYPE ? "S-frame" : "I-frame"); 941 ià( ù¾ & 0x01) { 942 `´štf (" %s", `su³rvisÜy2¡r (( ù¾ & L2CAP_CTRL_SUPERVISE_MASK ) >> 943 L2CAP_CTRL_SUPER_SHIFT )); 945 ià( ù¾ & L2CAP_CTRL_POLL ) 946 `´štf (" P-bit"); 948 ušt8_t §r = ( ù¾ & L2CAP_CTRL_SAR_MASK è>> L2CAP_CTRL_SAR_SHIFT ; 949 `´štf (" %s", `§r2¡r ( §r )); 950 ià( §r =ð L2CAP_SAR_START ) { 951 ušt16_t Ën ; 952 Ën = `g‘_Ë16 ( äm -> ±r ); 953 äm -> ±r +ð L2CAP_SDULEN_SIZE ; 954 äm -> Ën -ð L2CAP_SDULEN_SIZE ; 955 `´štf (" (ËÀ%d)", Ën ); 957 `´štf (" TxSeq %d", ( ù¾ & L2CAP_CTRL_TXSEQ_MASK è>> L2CAP_CTRL_TXSEQ_SHIFT ); 960 `´štf (" ReqSeq %d", ( ù¾ & L2CAP_CTRL_REQSEQ_MASK è>> L2CAP_CTRL_REQSEQ_SHIFT ); 962 ià( ù¾ & L2CAP_CTRL_FINAL ) 963 `´štf (" F-bit"); 964 } } 966  šlše  $ü—‹_»q ( Ëv– , l2ÿp_cmd_hdr * cmd ,  äame * äm ) 968 l2ÿp_ü—‹_»q * h = äm -> ±r ; 969 ušt16_t psm = `btohs ( h ->psm); 970 ušt16_t scid = `btohs ( h ->scid); 972 ià( `p_fž‹r ( FILT_L2CAP )) 975 `´štf ("Create chan„eq:…sm 0x%4.4x scid 0x%4.4x ctrl id %d\n", 976 psm , scid , h -> id ); 977 } } 979  šlše  $ü—‹_r¥ ( Ëv– , l2ÿp_cmd_hdr * cmd ,  äame * äm ) 981 l2ÿp_ü—‹_r¥ * h = äm -> ±r ; 982 ušt16_t scid = `btohs ( h ->scid); 983 ušt16_t dcid = `btohs ( h ->dcid); 984 ušt16_t »suÉ = `btohs ( h ->result); 985 ušt16_t ¡©us = `btohs ( h ->status); 987 ià( `p_fž‹r ( FILT_L2CAP )) 990 `´štf ("Create chan„sp: dcid 0x%4.4x scid 0x%4.4x„esult %d status %d\n", 991 dcid , scid , »suÉ , ¡©us ); 992 } } 994  šlše  $move_»q ( Ëv– , l2ÿp_cmd_hdr * cmd ,  äame * äm ) 996 l2ÿp_move_»q * h = äm -> ±r ; 997 ušt16_t icid = `btohs ( h ->icid); 999 ià( `p_fž‹r ( FILT_L2CAP )) 1002 `´štf ("Movchª„eq: icid 0x%4.4x cŒÈid %d\n", icid , h -> id ); 1003 } } 1005  šlše  $move_r¥ ( Ëv– , l2ÿp_cmd_hdr * cmd ,  äame * äm ) 1007 l2ÿp_move_r¥ * h = äm -> ±r ; 1008 ušt16_t icid = `btohs ( h ->icid); 1009 ušt16_t »suÉ = `btohs ( h ->result); 1011 ià( `p_fž‹r ( FILT_L2CAP )) 1014 `´štf ("Movchª„¥: icid 0x%4.4x„esuÉ %d\n", icid , »suÉ ); 1015 } } 1017  šlše  $move_cfm ( Ëv– , l2ÿp_cmd_hdr * cmd ,  äame * äm ) 1019 l2ÿp_move_cfm * h = äm -> ±r ; 1020 ušt16_t icid = `btohs ( h ->icid); 1021 ušt16_t »suÉ = `btohs ( h ->result); 1023 ià( `p_fž‹r ( FILT_L2CAP )) 1026 `´štf ("Movchª cfm: icid 0x%4.4x„esuÉ %d\n", icid , »suÉ ); 1027 } } 1029  šlše  $move_cfm_r¥ ( Ëv– , l2ÿp_cmd_hdr * cmd ,  äame * äm ) 1031 l2ÿp_move_cfm_r¥ * h = äm -> ±r ; 1032 ušt16_t icid = `btohs ( h ->icid); 1034 ià( `p_fž‹r ( FILT_L2CAP )) 1037 `´štf ("Movchª cfm„¥: icid 0x%4.4x\n", icid ); 1038 } } 1040  šlše  $a2mp_commªd_»j ( Ëv– ,  äame * äm ) 1042  a2mp_commªd_»j * h = äm -> ±r ; 1043 ušt16_t »asÚ = `btohs ( h ->reason); 1045 `´štf ("Commªd Rejeù:„—sÚ %d\n", »asÚ ); 1046 `p_šd’t ( Ëv– + 1, 0); 1047 `´štf ("%s\n", `a2m´—sÚ2¡r ( »asÚ )); 1048 } } 1050  šlše  $a2mp_discov”_»q ( Ëv– ,  äame * äm , ušt16_t Ën ) 1052  a2mp_discov”_»q * h = äm -> ±r ; 1053 ušt16_t mtu = `btohs ( h ->mtu); 1054 ušt8_t * où‘ = (ušt8_ˆ*)&( h -> mask ); 1055 ušt16_t mask ; 1056 ušt8_t ex‹nsiÚ ; 1058 `´štf ("Discov”„eq: mtu/mp %d ", mtu ); 1059 Ën -= 2; 1061 `´štf ("mask:"); 1064 Ën -= 2; 1065 mask = `g‘_Ë16 ( où‘ ); 1066 `´štf (" 0x%4.4x", mask ); 1068 ex‹nsiÚ = où‘ [1] & 0x80; 1069 où‘ += 2; 1070 } ( ex‹nsiÚ !ð0è&& ( Ën >= 2)); 1072 `´štf ("\n"); 1073 } } 1075  šlše  $a2mp_ù¾_li¡_dump ( Ëv– ,  a2mp_ù¾ * li¡ , ušt16_t Ën ) 1077 `p_šd’t ( Ëv– , 0); 1078 `´štf ("Controller†ist:\n"); 1080  Ën >= 3) { 1081 `p_šd’t ( Ëv– + 1, 0); 1082 `´štf ("id %dype %d (%s) status 0x%2.2x (%s)\n", 1083 li¡ -> id ,†i¡-> ty³ , `ampù¾ty³2¡r Öi¡->ty³),†i¡-> ¡©us , `ampù¾¡©us2¡r (list->status)); 1084 li¡ ++; 1085 Ën -= 3; 1088 } } 1090  šlše  $a2mp_discov”_r¥ ( Ëv– ,  äame * äm , ušt16_t Ën ) 1092  a2mp_discov”_r¥ * h = äm -> ±r ; 1093 ušt16_t mtu = `btohs ( h ->mtu); 1094 ušt8_t * où‘ = (ušt8_ˆ*)&( h -> mask ); 1095 ušt16_t mask ; 1096 ušt8_t ex‹nsiÚ ; 1098 `´štf ("Discov”„¥: mtu/mp %d ", mtu ); 1099 Ën -= 2; 1101 `´štf ("mask:"); 1104 Ën -= 2; 1105 mask = `g‘_Ë16 ( où‘ ); 1106 `´štf (" 0x%4.4x", mask ); 1108 ex‹nsiÚ = où‘ [1] & 0x80; 1109 où‘ += 2; 1110 } ( ex‹nsiÚ !ð0è&& ( Ën >= 2)); 1112 `´štf ("\n"); 1114 ià( Ën >= 3) { 1115 `a2mp_ù¾_li¡_dump ( Ëv– + 1, ( a2mp_ù¾ *è où‘ , Ën ); 1117 } } 1119  šlše  $a2mp_chªge_nÙify ( Ëv– ,  äame * äm , ušt16_t Ën ) 1121  a2mp_ù¾ * li¡ = äm -> ±r ; 1123 `´štf ("Change Notify\n"); 1125 ià( Ën >= 3) { 1126 `a2mp_ù¾_li¡_dump ( Ëv– + 1, li¡ , Ën ); 1128 } } 1130  šlše  $a2mp_chªge_r¥ ( Ëv– ,  äame * äm ) 1132 `´štf ("Change Response\n"); 1133 } } 1135  šlše  $a2mp_šfo_»q ( Ëv– ,  äame * äm ) 1137  a2mp_šfo_»q * h = äm -> ±r ; 1139 `´štf ("G‘ InfØ»q: id %d\n", h -> id ); 1140 } } 1142  šlše  $a2mp_šfo_r¥ ( Ëv– ,  äame * äm ) 1144  a2mp_šfo_r¥ * h = äm -> ±r ; 1146 `´štf ("Get Info„sp: id %d status %d (%s)\n", 1147 h -> id , h-> ¡©us , `a2mp¡©us2¡r (h->status)); 1149 `p_šd’t ( Ëv– + 1, 0); 1150 `´štf ("TÙ® bªdwidth %d\n", `btohl ( h -> tÙ®_bw )); 1151 `p_šd’t ( Ëv– + 1, 0); 1152 `´štf ("Max gu¬ª‹ed bªdwidth %d\n", `btohl ( h -> max_bw )); 1153 `p_šd’t ( Ëv– + 1, 0); 1154 `´štf ("Mš†©’cy %d\n", `btohl ( h -> mš_Ï‹ncy )); 1155 `p_šd’t ( Ëv– + 1, 0); 1156 `´štf ("P® c­abž™› 0x%4.4x\n", `btohs ( h -> ·l_ÿps )); 1157 `p_šd’t ( Ëv– + 1, 0); 1158 `´štf ("Assoøsiz%d\n", `btohs ( h -> assoc_size )); 1159 } } 1161  šlše  $a2mp_assoc_»q ( Ëv– ,  äame * äm ) 1163  a2mp_assoc_»q * h = äm -> ±r ; 1165 `´štf ("G‘ AMP Assoø»q: id %d\n", h -> id ); 1166 } } 1168  šlše  $a2mp_assoc_r¥ ( Ëv– ,  äame * äm , ušt16_t Ën ) 1170  a2mp_assoc_r¥ * h = äm -> ±r ; 1172 `´štf ("Get AMP Assoc„sp: id %d status (%d) %s\n", 1173 h -> id , h-> ¡©us , `a2mp¡©us2¡r (h->status)); 1174 `amp_assoc_dump ( Ëv– + 1, h -> assoc_d©a , Ën - (*h)); 1175 } } 1177  šlše  $a2mp_ü—‹_»q ( Ëv– ,  äame * äm , ušt16_t Ën ) 1179  a2mp_ü—‹_»q * h = äm -> ±r ; 1181 `´štf ("Create Physical Link„eq:†ocal id %d„emote id %d\n", 1182 h -> loÿl_id , h-> »mÙe_id ); 1183 `amp_assoc_dump ( Ëv– + 1, h -> assoc_d©a , Ën - (*h)); 1184 } } 1186  šlše  $a2mp_ü—‹_r¥ ( Ëv– ,  äame * äm ) 1188  a2mp_ü—‹_r¥ * h = äm -> ±r ; 1190 `´štf ("Create Physical Link„sp:†ocal id %d„emote id %d status %d\n", 1191 h -> loÿl_id , h-> »mÙe_id , h-> ¡©us ); 1192 `p_šd’t ( Ëv– +1, 0); 1193 `´štf ("%s\n", `a2mpýl¡©us2¡r ( h -> ¡©us )); 1194 } } 1196  šlše  $a2mp_discÚn_»q ( Ëv– ,  äame * äm ) 1198  a2mp_discÚn_»q * h = äm -> ±r ; 1200 `´štf ("Disconnect Physical Link„eq:†ocal id %d„emote id %d\n", 1201 h -> loÿl_id , h-> »mÙe_id ); 1202 } } 1204  šlše  $a2mp_discÚn_r¥ ( Ëv– ,  äame * äm ) 1206  a2mp_discÚn_r¥ * h = äm -> ±r ; 1208 `´štf ("Disconnect Physical Link„sp:†ocal id %d„emote id %d status %d\n", 1209 h -> loÿl_id , h-> »mÙe_id , h-> ¡©us ); 1210 `p_šd’t ( Ëv– +1, 0); 1211 `´štf ("%s\n", `a2mpd¶¡©us2¡r ( h -> ¡©us )); 1212 } } 1214  $l2ÿp_·r£ ( Ëv– ,  äame * äm ) 1216 l2ÿp_hdr * hdr = (*) äm -> ±r ; 1217 ušt16_t dËn = `btohs ( hdr -> Ën ); 1218 ušt16_t cid = `btohs ( hdr ->cid); 1219 ušt16_t psm ; 1221 äm -> ±r +ð L2CAP_HDR_SIZE ; 1222 äm -> Ën -ð L2CAP_HDR_SIZE ; 1224 ià( cid == 0x1) { 1227  äm -> Ën >ð L2CAP_CMD_HDR_SIZE ) { 1228 l2ÿp_cmd_hdr * hdr = äm -> ±r ; 1230 äm -> ±r +ð L2CAP_CMD_HDR_SIZE ; 1231 äm -> Ën -ð L2CAP_CMD_HDR_SIZE ; 1233 ià(! `p_fž‹r ( FILT_L2CAP )) { 1234 `p_šd’t ( Ëv– , äm ); 1235 `´štf ("L2CAP(s): "); 1238  hdr -> code ) { 1239  L2CAP_COMMAND_REJ : 1240 `commªd_»j ( Ëv– , äm ); 1243  L2CAP_CONN_REQ : 1244 `cÚn_»q ( Ëv– , äm ); 1247  L2CAP_CONN_RSP : 1248 `cÚn_r¥ ( Ëv– , äm ); 1251  L2CAP_CONF_REQ : 1252 `cÚf_»q ( Ëv– , hdr , äm ); 1255  L2CAP_CONF_RSP : 1256 `cÚf_r¥ ( Ëv– , hdr , äm ); 1259  L2CAP_DISCONN_REQ : 1260 `discÚn_»q ( Ëv– , äm ); 1263  L2CAP_DISCONN_RSP : 1264 `discÚn_r¥ ( Ëv– , äm ); 1267  L2CAP_ECHO_REQ : 1268 `echo_»q ( Ëv– , hdr , äm ); 1271  L2CAP_ECHO_RSP : 1272 `echo_r¥ ( Ëv– , hdr , äm ); 1275  L2CAP_INFO_REQ : 1276 `šfo_»q ( Ëv– , hdr , äm ); 1279  L2CAP_INFO_RSP : 1280 `šfo_r¥ ( Ëv– , hdr , äm ); 1283  L2CAP_CREATE_REQ : 1284 `ü—‹_»q ( Ëv– , hdr , äm ); 1287  L2CAP_CREATE_RSP : 1288 `ü—‹_r¥ ( Ëv– , hdr , äm ); 1291  L2CAP_MOVE_REQ : 1292 `move_»q ( Ëv– , hdr , äm ); 1295  L2CAP_MOVE_RSP : 1296 `move_r¥ ( Ëv– , hdr , äm ); 1299  L2CAP_MOVE_CFM : 1300 `move_cfm ( Ëv– , hdr , äm ); 1303  L2CAP_MOVE_CFM_RSP : 1304 `move_cfm_r¥ ( Ëv– , hdr , äm ); 1308 ià( `p_fž‹r ( FILT_L2CAP )) 1310 `´štf ("code 0x%2.2x ident %d†en %d\n", 1311 hdr -> code , hdr-> id’t , `btohs (hdr-> Ën )); 1312 `¿w_dump ( Ëv– , äm ); 1315 ià( äm -> Ën > `btohs ( hdr ->len)) { 1316 äm -> Ën -ð `btohs ( hdr ->len); 1317 äm -> ±r +ð `btohs ( hdr -> Ën ); 1319 äm -> Ën = 0; 1321 } ià( cid == 0x2) { 1324 ià( `p_fž‹r ( FILT_L2CAP )) 1327 psm = `g‘_Ë16 ( äm -> ±r ); 1328 äm -> ±r += 2; 1329 äm -> Ën -= 2; 1331 `p_šd’t ( Ëv– , äm ); 1332 `´štf ("L2CAP(c):†’ %d…sm %d\n", dËn , psm ); 1333 `¿w_dump ( Ëv– , äm ); 1334 } ià( cid == 0x3) { 1337 ià( `p_fž‹r ( FILT_A2MP )) 1341 äm -> ±r += 2; 1342 äm -> Ën -= 2; 1344  äm -> Ën >ð A2MP_HDR_SIZE ) { 1345  a2mp_hdr * hdr = äm -> ±r ; 1347 äm -> ±r +ð A2MP_HDR_SIZE ; 1348 äm -> Ën -ð A2MP_HDR_SIZE ; 1350 `p_šd’t ( Ëv– , äm ); 1351 `´štf ("A2MP: "); 1353  hdr -> code ) { 1354  A2MP_COMMAND_REJ : 1355 `a2mp_commªd_»j ( Ëv– , äm ); 1357  A2MP_DISCOVER_REQ : 1358 `a2mp_discov”_»q ( Ëv– , äm , `btohs ( hdr -> Ën )); 1360  A2MP_DISCOVER_RSP : 1361 `a2mp_discov”_r¥ ( Ëv– , äm , `btohs ( hdr -> Ën )); 1363  A2MP_CHANGE_NOTIFY : 1364 `a2mp_chªge_nÙify ( Ëv– , äm , `btohs ( hdr -> Ën )); 1366  A2MP_CHANGE_RSP : 1367 `a2mp_chªge_r¥ ( Ëv– , äm ); 1369  A2MP_INFO_REQ : 1370 `a2mp_šfo_»q ( Ëv– , äm ); 1372  A2MP_INFO_RSP : 1373 `a2mp_šfo_r¥ ( Ëv– , äm ); 1375  A2MP_ASSOC_REQ : 1376 `a2mp_assoc_»q ( Ëv– , äm ); 1378  A2MP_ASSOC_RSP : 1379 `a2mp_assoc_r¥ ( Ëv– , äm , `btohs ( hdr -> Ën )); 1381  A2MP_CREATE_REQ : 1382 `a2mp_ü—‹_»q ( Ëv– , äm , `btohs ( hdr -> Ën )); 1384  A2MP_CREATE_RSP : 1385 `a2mp_ü—‹_r¥ ( Ëv– , äm ); 1387  A2MP_DISCONN_REQ : 1388 `a2mp_discÚn_»q ( Ëv– , äm ); 1390  A2MP_DISCONN_RSP : 1391 `a2mp_discÚn_r¥ ( Ëv– , äm ); 1394 `´štf ("code 0x%2.2x ident %d†en %d\n", 1395 hdr -> code , hdr-> id’t , `btohs (hdr-> Ën )); 1396 `¿w_dump ( Ëv– , äm ); 1398 ià( äm -> Ën > `btohs ( hdr ->len)) { 1399 äm -> Ën -ð `btohs ( hdr ->len); 1400 äm -> ±r +ð `btohs ( hdr -> Ën ); 1402 äm -> Ën = 0; 1404 } ià( cid == 0x04) { 1405 ià(! `p_fž‹r ( FILT_ATT )) 1406 `©t_dump ( Ëv– , äm ); 1408 `¿w_dump ( Ëv– + 1, äm ); 1409 } ià( cid == 0x06) { 1410 ià(! `p_fž‹r ( FILT_SMP )) 1411 `smp_dump ( Ëv– , äm ); 1413 `¿w_dump ( Ëv– + 1, äm ); 1417 ušt8_t mode = `g‘_mode (! äm -> š , frm-> hªdË , cid ); 1418 ušt8_t ext_ù¾ = `g‘_ext_ù¾ (! äm -> š , frm-> hªdË , cid ); 1419 ušt16_t psm = `g‘_psm (! äm -> š , frm-> hªdË , cid ); 1420 ušt16_t fcs = 0; 1421 ušt32_t ´Ùo , ù¾ = 0; 1423 äm -> cid = cid; 1424 äm -> num = `g‘_num (!äm-> š , frm-> hªdË , cid ); 1426 ià( mode > 0) { 1427 ià( ext_ù¾ ) { 1428 ù¾ = `g‘_v® ( äm -> ±r , 4); 1429 äm -> ±r += 4; 1430 äm -> Ën -= 6; 1432 ù¾ = `g‘_v® ( äm -> ±r , 2); 1433 äm -> ±r += 2; 1434 äm -> Ën -= 4; 1436 fcs = `g‘_Ë16 ( äm -> ±r + frm-> Ën ); 1439 ià(! `p_fž‹r ( FILT_L2CAP )) { 1440 `p_šd’t ( Ëv– , äm ); 1441 `´štf ("L2CAP(d): cid 0x%4.4x†’ %d", cid , dËn ); 1442 ià( mode > 0) { 1443 ià( ext_ù¾ ) 1444 `´štf ("ƒxt_ù¾ 0x%8.8x fc 0x%4.4x", ù¾ , fcs ); 1446 `´štf (" cŒÈ0x%4.4x fc 0x%4.4x", ù¾ , fcs ); 1449 `´štf (" [psm %d]\n", psm ); 1450 Ëv– ++; 1451 ià( mode > 0) { 1452 ià( ext_ù¾ ) 1453 `l2ÿp_ù¾_ext_·r£ ( Ëv– , äm , ù¾ ); 1455 `l2ÿp_ù¾_·r£ ( Ëv– , äm , ù¾ ); 1457 `´štf ("\n"); 1461  psm ) { 1463 ià(! `p_fž‹r ( FILT_SDP )) 1464 `sdp_dump ( Ëv– + 1, äm ); 1466 `¿w_dump ( Ëv– + 1, äm ); 1470 ià(! `p_fž‹r ( FILT_RFCOMM )) 1471 `rfcomm_dump ( Ëv– , äm ); 1473 `¿w_dump ( Ëv– + 1, äm ); 1477 ià(! `p_fž‹r ( FILT_BNEP )) 1478 `bÃp_dump ( Ëv– , äm ); 1480 `¿w_dump ( Ëv– + 1, äm ); 1485 ià(! `p_fž‹r ( FILT_HIDP )) 1486 `hidp_dump ( Ëv– , äm ); 1488 `¿w_dump ( Ëv– + 1, äm ); 1493 ià(! `p_fž‹r ( FILT_AVCTP )) 1494 `avùp_dump ( Ëv– , äm , psm ); 1496 `¿w_dump ( Ëv– + 1, äm ); 1500 ià(! `p_fž‹r ( FILT_AVDTP )) 1501 `avd_dump ( Ëv– , äm ); 1503 `¿w_dump ( Ëv– + 1, äm ); 1507 ià(! `p_fž‹r ( FILT_ATT )) 1508 `©t_dump ( Ëv– , äm ); 1510 `¿w_dump ( Ëv– + 1, äm ); 1514 ´Ùo = `g‘_´Ùo ( äm -> hªdË , psm , 0); 1516  ´Ùo ) { 1517  SDP_UUID_CMTP : 1518 ià(! `p_fž‹r ( FILT_CMTP )) 1519 `cm_dump ( Ëv– , äm ); 1521 `¿w_dump ( Ëv– + 1, äm ); 1524  SDP_UUID_HARDCOPY_CONTROL_CHANNEL : 1525 ià(! `p_fž‹r ( FILT_HCRP )) 1526 `hüp_dump ( Ëv– , äm ); 1528 `¿w_dump ( Ëv– + 1, äm ); 1531  SDP_UUID_OBEX : 1532 ià(! `p_fž‹r ( FILT_OBEX )) 1533 `obex_dump ( Ëv– , äm ); 1535 `¿w_dump ( Ëv– + 1, äm ); 1539 ià( `p_fž‹r ( FILT_L2CAP )) 1542 `¿w_dump ( Ëv– , äm ); 1548 } } 1550  $l2ÿp_dump ( Ëv– ,  äame * äm ) 1552  äame * ä ; 1553 l2ÿp_hdr * hdr ; 1554 ušt16_t dËn ; 1556 ià(( äm -> æags & ACL_START è|| frm->æag =ð ACL_START_NO_FLUSH ) { 1557 hdr = äm -> ±r ; 1558 dËn = `btohs ( hdr -> Ën ); 1560 ià( dËn + L2CAP_HDR_SIZE < (è äm -> Ën ) { 1562 `¿w_dump ( Ëv– , äm ); 1566 ià((è äm -> Ën =ð( dËn + L2CAP_HDR_SIZE )) { 1568 `l2ÿp_·r£ ( Ëv– , äm ); 1572 ià(!( ä = `g‘_äame ( äm -> hªdË ))) { 1573 `årštf ( ¡d”r , "Notƒnough connection handles\n"); 1574 `¿w_dump ( Ëv– , äm ); 1578 ià( ä -> d©a ) 1579 `ä“ ( ä -> d©a ); 1581 ià(!( ä -> d©a = `m®loc ( dËn + L2CAP_HDR_SIZE ))) { 1582 `³¼Ü ("Can't‡llocate L2CAP„eassembly buffer"); 1585 `memýy ( ä -> d©a , äm -> ±r , frm-> Ën ); 1586 ä -> d©a_Ën = dËn + L2CAP_HDR_SIZE ; 1587 ä -> Ën = äm ->len; 1588 ä -> ±r = fr-> d©a ; 1589 ä -> dev_id = äm ->dev_id; 1590 ä -> š = äm ->in; 1591 ä -> ts = äm ->ts; 1592 ä -> hªdË = äm ->handle; 1593 ä -> cid = äm ->cid; 1594 ä -> num = äm ->num; 1595 ä -> dlci = äm ->dlci; 1596 ä -> chªÃl = äm ->channel; 1597 ä -> µpdump_fd = äm ->pppdump_fd; 1598 ä -> audio_fd = äm ->audio_fd; 1600 ià(!( ä = `g‘_äame ( äm -> hªdË ))) { 1601 `årštf ( ¡d”r , "Notƒnough connection handles\n"); 1602 `¿w_dump ( Ëv– , äm ); 1606 ià(! ä -> d©a ) { 1608 `¿w_dump ( Ëv– , äm ); 1612 ià( äm -> Ën > ( ä -> d©a_Ën - fr->len)) { 1614 `¿w_dump ( Ëv– , äm ); 1615 `ä“ ( ä -> d©a ); fr->d©¨ð NULL ; 1619 `memýy ( ä -> d©a + fr-> Ën , äm -> ±r , frm->len); 1620 ä -> Ën +ð äm ->len; 1622 ià( ä -> Ën =ðä-> d©a_Ën ) { 1624 `l2ÿp_·r£ ( Ëv– , ä ); 1626 `ä“ ( ä -> d©a ); fr->d©¨ð NULL ; 1630 } } 1632  $l2ÿp_þ—r ( ušt16_t hªdË ) 1634 `d–_hªdË ( hªdË ); 1635 } } @tools/parser/l2cap.h 25 #iâdeà __L2CAP_H 26  #__L2CAP_H ) 29  #L2CAP_COMMAND_REJ 0x01 ) 30  #L2CAP_CONN_REQ 0x02 ) 31  #L2CAP_CONN_RSP 0x03 ) 32  #L2CAP_CONF_REQ 0x04 ) 33  #L2CAP_CONF_RSP 0x05 ) 34  #L2CAP_DISCONN_REQ 0x06 ) 35  #L2CAP_DISCONN_RSP 0x07 ) 36  #L2CAP_ECHO_REQ 0x08 ) 37  #L2CAP_ECHO_RSP 0x09 ) 38  #L2CAP_INFO_REQ 0x0a ) 39  #L2CAP_INFO_RSP 0x0b ) 40  #L2CAP_CREATE_REQ 0x0c ) 41  #L2CAP_CREATE_RSP 0x0d ) 42  #L2CAP_MOVE_REQ 0x0e ) 43  #L2CAP_MOVE_RSP 0x0f ) 44  #L2CAP_MOVE_CFM 0x10 ) 45  #L2CAP_MOVE_CFM_RSP 0x11 ) 48  #L2CAP_FEAT_FLOWCTL 0x00000001 ) 49  #L2CAP_FEAT_RETRANS 0x00000002 ) 50  #L2CAP_FEAT_BIDIR_QOS 0x00000004 ) 51  #L2CAP_FEAT_ERTM 0x00000008 ) 52  #L2CAP_FEAT_STREAMING 0x00000010 ) 53  #L2CAP_FEAT_FCS 0x00000020 ) 54  #L2CAP_FEAT_EXT_FLOW 0x00000040 ) 55  #L2CAP_FEAT_FIXED_CHAN 0x00000080 ) 56  #L2CAP_FEAT_EXT_WINDOW 0x00000100 ) 57  #L2CAP_FEAT_UCD 0x00000200 ) 60  #L2CAP_CTRL_SAR_MASK 0xC000 ) 61  #L2CAP_CTRL_REQSEQ_MASK 0x3F00 ) 62  #L2CAP_CTRL_TXSEQ_MASK 0x007E ) 63  #L2CAP_CTRL_SUPERVISE_MASK 0x000C ) 65  #L2CAP_CTRL_RETRANS 0x0080 ) 66  #L2CAP_CTRL_FINAL 0x0080 ) 67  #L2CAP_CTRL_POLL 0x0010 ) 68  #L2CAP_CTRL_FRAME_TYPE 0x0001 ) 70  #L2CAP_CTRL_TXSEQ_SHIFT 1 ) 71  #L2CAP_CTRL_SUPER_SHIFT 2 ) 72  #L2CAP_CTRL_REQSEQ_SHIFT 8 ) 73  #L2CAP_CTRL_SAR_SHIFT 14 ) 75  #L2CAP_EXT_CTRL_TXSEQ_MASK 0xFFFC0000 ) 76  #L2CAP_EXT_CTRL_SAR_MASK 0x00030000 ) 77  #L2CAP_EXT_CTRL_SUPERVISE_MASK 0x00030000 ) 78  #L2CAP_EXT_CTRL_REQSEQ_MASK 0x0000FFFC ) 80  #L2CAP_EXT_CTRL_POLL 0x00040000 ) 81  #L2CAP_EXT_CTRL_FINAL 0x00000002 ) 82  #L2CAP_EXT_CTRL_FRAME_TYPE 0x00000001 ) 84  #L2CAP_EXT_CTRL_REQSEQ_SHIFT 2 ) 85  #L2CAP_EXT_CTRL_SAR_SHIFT 16 ) 86  #L2CAP_EXT_CTRL_SUPER_SHIFT 16 ) 87  #L2CAP_EXT_CTRL_TXSEQ_SHIFT 18 ) 90  #L2CAP_SUPER_RR 0x00 ) 91  #L2CAP_SUPER_REJ 0x01 ) 92  #L2CAP_SUPER_RNR 0x02 ) 93  #L2CAP_SUPER_SREJ 0x03 ) 96  #L2CAP_SAR_UNSEGMENTED 0x00 ) 97  #L2CAP_SAR_START 0x01 ) 98  #L2CAP_SAR_END 0x02 ) 99  #L2CAP_SAR_CONTINUE 0x03 ) 101  #L2CAP_SDULEN_SIZE 2 ) 104  #L2CAP_FC_L2CAP 0x02 ) 105  #L2CAP_FC_CONNLESS 0x04 ) 106  #L2CAP_FC_A2MP 0x08 ) 110 ušt16_t mËn ; 111 ušt16_t mcid ; 112 } t__©Œibu‹__ (( t·cked )è tl2ÿp_hdr ; 113  #L2CAP_HDR_SIZE 4 ) 116 ušt8_t mcode ; 117 ušt8_t mid’t ; 118 ušt16_t mËn ; 119 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cmd_hdr ; 120  #L2CAP_CMD_HDR_SIZE 4 ) 123 ušt16_t m»asÚ ; 124 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cmd_»j ; 125  #L2CAP_CMD_REJ_SIZE 2 ) 128 ušt16_t mpsm ; 129 ušt16_t mscid ; 130 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cÚn_»q ; 131  #L2CAP_CONN_REQ_SIZE 4 ) 134 ušt16_t mdcid ; 135 ušt16_t mscid ; 136 ušt16_t m»suÉ ; 137 ušt16_t m¡©us ; 138 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cÚn_r¥ ; 139  #L2CAP_CONN_RSP_SIZE 8 ) 142  #L2CAP_CR_SUCCESS 0x0000 ) 143  #L2CAP_CR_PEND 0x0001 ) 144  #L2CAP_CR_BAD_PSM 0x0002 ) 145  #L2CAP_CR_SEC_BLOCK 0x0003 ) 146  #L2CAP_CR_NO_MEM 0x0004 ) 149  #L2CAP_CS_NO_INFO 0x0000 ) 150  #L2CAP_CS_AUTHEN_PEND 0x0001 ) 151  #L2CAP_CS_AUTHOR_PEND 0x0002 ) 154 ušt16_t mdcid ; 155 ušt16_t mæags ; 156 ušt8_t md©a [0]; 157 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cÚf_»q ; 158  #L2CAP_CONF_REQ_SIZE 4 ) 161 ušt16_t mscid ; 162 ušt16_t mæags ; 163 ušt16_t m»suÉ ; 164 ušt8_t md©a [0]; 165 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cÚf_r¥ ; 166  #L2CAP_CONF_RSP_SIZE 6 ) 168  #L2CAP_CONF_SUCCESS 0x0000 ) 169  #L2CAP_CONF_UNACCEPT 0x0001 ) 170  #L2CAP_CONF_REJECT 0x0002 ) 171  #L2CAP_CONF_UNKNOWN 0x0003 ) 172  #L2CAP_CONF_PENDING 0x0004 ) 173  #L2CAP_CONF_EFS_REJECT 0x0005 ) 176 ušt8_t mty³ ; 177 ušt8_t mËn ; 178 ušt8_t mv® [0]; 179 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cÚf_Ýt ; 180  #L2CAP_CONF_OPT_SIZE 2 ) 182 #ifdeà __TIZEN_PATCH__ 184 ušt8_t mmode ; 185 ušt8_t mtxwš_size ; 186 ušt8_t mmax_Œªsm™ ; 187 ušt16_t m»Œªs_timeout ; 188 ušt16_t mmÚ™Ü_timeout ; 189 ušt16_t mmax_pdu_size ; 190 } t__©Œibu‹__ (( t·cked )è tl2ÿp_cÚf_rfc ; 191  #L2CAP_CONF_RFC_SIZE 9 ) 194  #L2CAP_CONF_MTU 0x01 ) 195  #L2CAP_CONF_FLUSH_TO 0x02 ) 196  #L2CAP_CONF_QOS 0x03 ) 197  #L2CAP_CONF_RFC 0x04 ) 198  #L2CAP_CONF_FCS 0x05 ) 199  #L2CAP_CONF_EFS 0x06 ) 200  #L2CAP_CONF_EWS 0x07 ) 202  #L2CAP_CONF_MAX_SIZE 22 ) 204  #L2CAP_MODE_BASIC 0x00 ) 205  #L2CAP_MODE_RETRANS 0x01 ) 206  #L2CAP_MODE_FLOWCTL 0x02 ) 207  #L2CAP_MODE_ERTM 0x03 ) 208  #L2CAP_MODE_STREAMING 0x04 ) 210  #L2CAP_SERVTYPE_NOTRAFFIC 0x00 ) 211  #L2CAP_SERVTYPE_BESTEFFORT 0x01 ) 212  #L2CAP_SERVTYPE_GUARANTEED 0x02 ) 215 ušt16_t mdcid ; 216 ušt16_t mscid ; 217 } t__©Œibu‹__ (( t·cked )è tl2ÿp_discÚn_»q ; 218  #L2CAP_DISCONN_REQ_SIZE 4 ) 221 ušt16_t mdcid ; 222 ušt16_t mscid ; 223 } t__©Œibu‹__ (( t·cked )è tl2ÿp_discÚn_r¥ ; 224  #L2CAP_DISCONN_RSP_SIZE 4 ) 227 ušt16_t mty³ ; 228 } t__©Œibu‹__ (( t·cked )è tl2ÿp_šfo_»q ; 229  #L2CAP_INFO_REQ_SIZE 2 ) 232 ušt16_t mty³ ; 233 ušt16_t m»suÉ ; 234 ušt8_t md©a [0]; 235 } t__©Œibu‹__ (( t·cked )è tl2ÿp_šfo_r¥ ; 236  #L2CAP_INFO_RSP_SIZE 4 ) 239  #L2CAP_IT_CL_MTU 0x0001 ) 240  #L2CAP_IT_FEAT_MASK 0x0002 ) 243  #L2CAP_IR_SUCCESS 0x0000 ) 244  #L2CAP_IR_NOTSUPP 0x0001 ) 247 ušt16_t mpsm ; 248 ušt16_t mscid ; 249 ušt8_t mid ; 250 } t__©Œibu‹__ (( t·cked )è tl2ÿp_ü—‹_»q ; 251  #L2CAP_CREATE_REQ_SIZE 5 ) 254 ušt16_t mdcid ; 255 ušt16_t mscid ; 256 ušt16_t m»suÉ ; 257 ušt16_t m¡©us ; 258 } t__©Œibu‹__ (( t·cked )è tl2ÿp_ü—‹_r¥ ; 259  #L2CAP_CREATE_RSP_SIZE 8 ) 262 ušt16_t micid ; 263 ušt8_t mid ; 264 } t__©Œibu‹__ (( t·cked )è tl2ÿp_move_»q ; 265  #L2CAP_MOVE_REQ_SIZE 3 ) 268 ušt16_t micid ; 269 ušt16_t m»suÉ ; 270 } t__©Œibu‹__ (( t·cked )è tl2ÿp_move_r¥ ; 271  #L2CAP_MOVE_RSP_SIZE 4 ) 274 ušt16_t micid ; 275 ušt16_t m»suÉ ; 276 } t__©Œibu‹__ (( t·cked )è tl2ÿp_move_cfm ; 277  #L2CAP_MOVE_CFM_SIZE 4 ) 280 ušt16_t micid ; 281 } t__©Œibu‹__ (( t·cked )è tl2ÿp_move_cfm_r¥ ; 282  #L2CAP_MOVE_CFM_RSP_SIZE 2 ) @tools/parser/lmp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~<ùy³.h > 31  ~ 33  ~"·r£r.h " 34  ~"lib/hci.h " 35  ~"lib/hci_lib.h " 37  #LMP_U8 ( äm è( `g‘_u8 (äm)) ) 38  #LMP_U16 ( äm è( `btohs ( `htÚs ( `g‘_u16 (äm)))) ) 39  #LMP_U32 ( äm è( `btohl ( `htÚl ( `g‘_u32 (äm)))) ) 42 mIN_RAND , 43 mCOMB_KEY_M , 44 mCOMB_KEY_S , 45 mAU_RAND_M , 46 mAU_RAND_S , 47 mSRES_M , 48 mSRES_S , 49 } g·œšg_¡©e = IN_RAND ; 52 ušt8_t mš_¿nd [16]; 53 ušt8_t mcomb_key_m [16]; 54 ušt8_t mcomb_key_s [16]; 55 ušt8_t mau_¿nd_m [16]; 56 ušt8_t mau_¿nd_s [16]; 57 ušt8_t m¤es_m [4]; 58 ušt8_t m¤es_s [4]; 59 } g·œšg_d©a ; 61  šlše  $·œšg_d©a_dump () 63  i ; 65 `p_šd’t (6, NULL ); 66 `´štf ("IN_RAND "); 67  i = 0; i < 16; i++) 68 `´štf ("%2.2x", ·œšg_d©a . š_¿nd [ i ]); 69 `´štf ("\n"); 71 `p_šd’t (6, NULL ); 72 `´štf ("COMB_KEY "); 73  i = 0; i < 16; i++) 74 `´štf ("%2.2x", ·œšg_d©a . comb_key_m [ i ]); 75 `´štf (" (M)\n"); 77 `p_šd’t (6, NULL ); 78 `´štf ("COMB_KEY "); 79  i = 0; i < 16; i++) 80 `´štf ("%2.2x", ·œšg_d©a . comb_key_s [ i ]); 81 `´štf (" (S)\n"); 83 `p_šd’t (6, NULL ); 84 `´štf ("AU_RAND "); 85  i = 0; i < 16; i++) 86 `´štf ("%2.2x", ·œšg_d©a . au_¿nd_m [ i ]); 87 `´štf (" SRES "); 88  i = 0; i < 4; i++) 89 `´štf ("%2.2x", ·œšg_d©a . ¤es_m [ i ]); 90 `´štf (" (M)\n"); 92 `p_šd’t (6, NULL ); 93 `´štf ("AU_RAND "); 94  i = 0; i < 16; i++) 95 `´štf ("%2.2x", ·œšg_d©a . au_¿nd_s [ i ]); 96 `´štf (" SRES "); 97  i = 0; i < 4; i++) 98 `´štf ("%2.2x", ·œšg_d©a . ¤es_s [ i ]); 99 `´štf (" (S)\n"); 100 } } 102  šlše  $š_¿nd ( äame * äm ) 104 ušt8_t * v® = äm -> ±r ; 106 `memýy ( ·œšg_d©a . š_¿nd , v® , 16); 107 ·œšg_¡©e = COMB_KEY_M ; 108 } } 110  šlše  $comb_key ( äame * äm ) 112 ušt8_t * v® = äm -> ±r ; 114  ·œšg_¡©e ) { 115  COMB_KEY_M : 116 `memýy ( ·œšg_d©a . comb_key_m , v® , 16); 117 ·œšg_¡©e = COMB_KEY_S ; 119  COMB_KEY_S : 120 `memýy ( ·œšg_d©a . comb_key_s , v® , 16); 121 ·œšg_¡©e = AU_RAND_M ; 123  IN_RAND : 124  AU_RAND_M : 125  AU_RAND_S : 126  SRES_M : 127  SRES_S : 129 ·œšg_¡©e = IN_RAND ; 132 } } 134  šlše  $au_¿nd ( äame * äm ) 136 ušt8_t * v® = äm -> ±r ; 138  ·œšg_¡©e ) { 139  AU_RAND_M : 140 `memýy ( ·œšg_d©a . au_¿nd_m , v® , 16); 141 ·œšg_¡©e = SRES_M ; 143  AU_RAND_S : 144 `memýy ( ·œšg_d©a . au_¿nd_s , v® , 16); 145 ·œšg_¡©e = SRES_S ; 147  COMB_KEY_M : 148  COMB_KEY_S : 149  IN_RAND : 150  SRES_M : 151  SRES_S : 153 ·œšg_¡©e = IN_RAND ; 156 } } 158  šlše  $¤es ( äame * äm ) 160 ušt8_t * v® = äm -> ±r ; 162  ·œšg_¡©e ) { 163  SRES_M : 164 `memýy ( ·œšg_d©a . ¤es_m , v® , 4); 165 ·œšg_¡©e = AU_RAND_S ; 167  SRES_S : 168 `memýy ( ·œšg_d©a . ¤es_s , v® , 4); 169 ·œšg_¡©e = IN_RAND ; 170 `·œšg_d©a_dump (); 172  COMB_KEY_M : 173  COMB_KEY_S : 174  IN_RAND : 175  AU_RAND_M : 176  AU_RAND_S : 178 ·œšg_¡©e = IN_RAND ; 181 } } 183 * $Ýcode2¡r ( ušt16_t Ýcode ) 185  Ýcode ) { 357 } } 359  šlše  $Çme_»q_dump ( Ëv– ,  äame * äm ) 361 ušt8_t off£t = `LMP_U8 ( äm ); 363 `p_šd’t ( Ëv– , äm ); 364 `´štf ("Çmoff£ˆ%d\n", off£t ); 365 } } 367  šlše  $Çme_»s_dump ( Ëv– ,  äame * äm ) 369 ušt8_t off£t = `LMP_U8 ( äm ); 370 ušt8_t Ëngth = `LMP_U8 ( äm ); 371 ušt8_t * Çme = äm -> ±r ; 372  i , size ; 374 äm -> ±r += 14; 375 äm -> Ën -= 14; 377 `p_šd’t ( Ëv– , äm ); 378 `´štf ("Çmoff£ˆ%d\n", off£t ); 380 `p_šd’t ( Ëv– , äm ); 381 `´štf ("ÇmËngth %d\n", Ëngth ); 383 size = Ëngth - off£t ; 384 ià( size > 14) 385 size = 14; 387 `p_šd’t ( Ëv– , äm ); 388 `´štf ("name fragment '"); 389  i = 0; i < size ; i++) 390 ià( `i¥ršt ( Çme [ i ])) 391 `´štf ("%c", Çme [ i ]); 393 `´štf ("."); 394 `´štf ("'\n"); 395 } } 397  šlše  $acû±ed_dump ( Ëv– ,  äame * äm ) 399 ušt8_t Ýcode = `LMP_U8 ( äm ); 401 `p_šd’t ( Ëv– , äm ); 402 `´štf ("Ý cod%d (%s)\n", Ýcode , `Ýcode2¡r (opcode)); 403 } } 405  šlše  $nÙ_acû±ed_dump ( Ëv– ,  äame * äm ) 407 ušt8_t Ýcode = `LMP_U8 ( äm ); 408 ušt8_t ”rÜ = `LMP_U8 ( äm ); 410 `p_šd’t ( Ëv– , äm ); 411 `´štf ("Ý cod%d (%s)\n", Ýcode , `Ýcode2¡r (opcode)); 413 `p_šd’t ( Ëv– , äm ); 414 `´štf ("”rÜ cod0x%2.2x\n", ”rÜ ); 415 } } 417  šlše  $þkoff£t_dump ( Ëv– ,  äame * äm ) 419 ušt16_t þkoff£t = `LMP_U16 ( äm ); 421 `p_šd’t ( Ëv– , äm ); 422 `´štf ("þock off£ˆ0x%4.4x\n", þkoff£t ); 423 } } 425  šlše  $d‘ach_dump ( Ëv– ,  äame * äm ) 427 ušt8_t ”rÜ = `LMP_U8 ( äm ); 429 `p_šd’t ( Ëv– , äm ); 430 `´štf ("”rÜ cod0x%2.2x\n", ”rÜ ); 431 } } 433  šlše  $¿ndom_numb”_dump ( Ëv– ,  äame * äm ) 435 ušt8_t * numb” = äm -> ±r ; 436  i ; 438 äm -> ±r += 16; 439 äm -> Ën -= 16; 441 `p_šd’t ( Ëv– , äm ); 442 `´štf ("random‚umber "); 443  i = 0; i < 16; i++) 444 `´štf ("%2.2x", numb” [ i ]); 445 `´štf ("\n"); 446 } } 448  šlše  $key_dump ( Ëv– ,  äame * äm ) 450 ušt8_t * key = äm -> ±r ; 451  i ; 453 äm -> ±r += 16; 454 äm -> Ën -= 16; 456 `p_šd’t ( Ëv– , äm ); 457 `´štf ("key "); 458  i = 0; i < 16; i++) 459 `´štf ("%2.2x", key [ i ]); 460 `´štf ("\n"); 461 } } 463  šlše  $auth_»¥_dump ( Ëv– ,  äame * äm ) 465 ušt8_t * »¥ = äm -> ±r ; 466  i ; 468 äm -> ±r += 4; 469 äm -> ±r -= 4; 471 `p_šd’t ( Ëv– , äm ); 472 `´štf ("authentication„esponse "); 473  i = 0; i < 4; i++) 474 `´štf ("%2.2x", »¥ [ i ]); 475 `´štf ("\n"); 476 } } 478  šlše  $’üy±iÚ_mode_»q_dump ( Ëv– ,  äame * äm ) 480 ušt8_t mode = `LMP_U8 ( äm ); 482 `p_šd’t ( Ëv– , äm ); 483 `´štf ("’üy±iÚ mod%d\n", mode ); 484 } } 486  šlše  $’üy±iÚ_key_size_»q_dump ( Ëv– ,  äame * äm ) 488 ušt8_t keysize = `LMP_U8 ( äm ); 490 `p_šd’t ( Ëv– , äm ); 491 `´štf ("key siz%d\n", keysize ); 492 } } 494  šlše  $sw™ch_»q_dump ( Ëv– ,  äame * äm ) 496 ušt32_t š¡ªt = `LMP_U32 ( äm ); 498 `p_šd’t ( Ëv– , äm ); 499 `´štf ("sw™ch in¡ªˆ0x%4.4x\n", š¡ªt ); 500 } } 502  šlše  $hÞd_dump ( Ëv– ,  äame * äm ) 504 ušt16_t time = `LMP_U16 ( äm ); 505 ušt32_t š¡ªt = `LMP_U32 ( äm ); 507 `p_šd’t ( Ëv– , äm ); 508 `´štf ("hÞdim0x%4.4x\n", time ); 510 `p_šd’t ( Ëv– , äm ); 511 `´štf ("hÞd in¡ªˆ0x%4.4x\n", š¡ªt ); 512 } } 514  šlše  $¢iff_»q_dump ( Ëv– ,  äame * äm ) 516 ušt8_t timšg = `LMP_U8 ( äm ); 517 ušt16_t d¢iff = `LMP_U16 ( äm ); 518 ušt16_t t¢iff = `LMP_U16 ( äm ); 519 ušt16_t ©‹m± = `LMP_U16 ( äm ); 520 ušt16_t timeout = `LMP_U16 ( äm ); 522 `p_šd’t ( Ëv– , äm ); 523 `´štf ("timšg cÚŒÞ fÏg 0x%2.2x\n", timšg ); 525 `p_šd’t ( Ëv– , äm ); 526 `´štf ("D_¢ifà%d T_¢ifà%d\n", d¢iff , t¢iff ); 528 `p_šd’t ( Ëv– , äm ); 529 `´štf ("¢ifà©‹m± %d\n", ©‹m± ); 531 `p_šd’t ( Ëv– , äm ); 532 `´štf ("¢ifàtimeouˆ%d\n", timeout ); 533 } } 535  šlše  $·rk_»q_dump ( Ëv– ,  äame * äm ) 537 ušt8_t timšg = `LMP_U8 ( äm ); 538 ušt16_t db = `LMP_U16 ( äm ); 539 ušt16_t tb = `LMP_U16 ( äm ); 540 ušt8_t nb = `LMP_U8 ( äm ); 541 ušt8_t xb = `LMP_U8 ( äm ); 542 ušt8_t pmaddr = `LMP_U8 ( äm ); 543 ušt8_t ¬addr = `LMP_U8 ( äm ); 544 ušt8_t nb¦“p = `LMP_U8 ( äm ); 545 ušt8_t db¦“p = `LMP_U8 ( äm ); 546 ušt8_t dacûss = `LMP_U8 ( äm ); 547 ušt8_t cûss = `LMP_U8 ( äm ); 548 ušt8_t n¦Ùs = `LMP_U8 ( äm ); 549 ušt8_t ÅÞl = `LMP_U8 ( äm ); 550 ušt8_t acûss = `LMP_U8 ( äm ); 552 `p_šd’t ( Ëv– , äm ); 553 `´štf ("timšg cÚŒÞ fÏg 0x%2.2x\n", timšg ); 555 `p_šd’t ( Ëv– , äm ); 556 `´štf ("D_B %d T_B %d N_B %d X_B %d\n", db , tb , nb , xb ); 558 `p_šd’t ( Ëv– , äm ); 559 `´štf ("PM_ADDR %d AR_ADDR %d\n", pmaddr , ¬addr ); 561 `p_šd’t ( Ëv– , äm ); 562 `´štf ("N_B¦“°%d D_B¦“°%d\n", nb¦“p , db¦“p ); 564 `p_šd’t ( Ëv– , äm ); 565 `´štf ("D_acûs %d T_acûs %d\n", dacûss , cûss ); 567 `p_šd’t ( Ëv– , äm ); 568 `´štf ("N_acc-¦Ù %d N_pÞÈ%d\n", n¦Ùs , ÅÞl ); 570 `p_šd’t ( Ëv– , äm ); 571 `´štf ("M_acûs %d\n", acûss & 0x0f); 573 `p_šd’t ( Ëv– , äm ); 574 `´štf ("acûs schem0x%2.2x\n", acûss >> 4); 575 } } 577  šlše  $modify_b—cÚ_dump ( Ëv– ,  äame * äm ) 579 ušt8_t timšg = `LMP_U8 ( äm ); 580 ušt16_t db = `LMP_U16 ( äm ); 581 ušt16_t tb = `LMP_U16 ( äm ); 582 ušt8_t nb = `LMP_U8 ( äm ); 583 ušt8_t xb = `LMP_U8 ( äm ); 584 ušt8_t dacûss = `LMP_U8 ( äm ); 585 ušt8_t cûss = `LMP_U8 ( äm ); 586 ušt8_t n¦Ùs = `LMP_U8 ( äm ); 587 ušt8_t ÅÞl = `LMP_U8 ( äm ); 588 ušt8_t acûss = `LMP_U8 ( äm ); 590 `p_šd’t ( Ëv– , äm ); 591 `´štf ("timšg cÚŒÞ fÏg 0x%2.2x\n", timšg ); 593 `p_šd’t ( Ëv– , äm ); 594 `´štf ("D_B %d T_B %d N_B %d X_B %d\n", db , tb , nb , xb ); 596 `p_šd’t ( Ëv– , äm ); 597 `´štf ("D_acûs %d T_acûs %d\n", dacûss , cûss ); 599 `p_šd’t ( Ëv– , äm ); 600 `´štf ("N_acc-¦Ù %d N_pÞÈ%d\n", n¦Ùs , ÅÞl ); 602 `p_šd’t ( Ëv– , äm ); 603 `´štf ("M_acûs %d\n", acûss & 0x0f); 605 `p_šd’t ( Ëv– , äm ); 606 `´štf ("acûs schem0x%2.2x\n", acûss >> 4); 607 } } 609  šlše  $pow”_»q_dump ( Ëv– ,  äame * äm ) 611 ušt8_t v® = `LMP_U8 ( äm ); 613 `p_šd’t ( Ëv– , äm ); 614 `´štf ("futu» u£ 0x%2.2x\n", v® ); 615 } } 617  šlše  $´eã¼ed_¿‹_dump ( Ëv– ,  äame * äm ) 619 ušt8_t ¿‹ = `LMP_U8 ( äm ); 621 `p_šd’t ( Ëv– , äm ); 622 `´štf ("d©¨¿‹ 0x%2.2x\n", ¿‹ ); 624 `p_šd’t ( Ëv– , äm ); 625 `´štf ("Basic: "); 627 `´štf ("%su£ FEC, ", ¿‹ & 0x01 ? "do‚ot " : ""); 629 ( ¿‹ >> 1) & 0x03) { 631 `´štf ("no…acket-size…reference\n"); 634 `´štf ("use 1-slot…ackets\n"); 637 `´štf ("use 3-slot…ackets\n"); 640 `´štf ("use 5-slot…ackets\n"); 644 `p_šd’t ( Ëv– , äm ); 645 `´štf ("EDR: "); 647 ( ¿‹ >> 3) & 0x03) { 649 `´štf ("use DM1…ackets, "); 652 `´štf ("use 2 Mbps…ackets, "); 655 `´štf ("use 3 Mbps…ackets, "); 658 `´štf ("reserved, \n"); 662 ( ¿‹ >> 5) & 0x03) { 664 `´štf ("no…acket-size…reference\n"); 667 `´štf ("use 1-slot…ackets\n"); 670 `´štf ("use 3-slot…ackets\n"); 673 `´štf ("use 5-slot…ackets\n"); 676 } } 678  šlše  $v”siÚ_dump ( Ëv– ,  äame * äm ) 680 ušt8_t v” = `LMP_U8 ( äm ); 681 ušt16_t compid = `LMP_U16 ( äm ); 682 ušt16_t subv” = `LMP_U16 ( äm ); 683 * tmp ; 685 `p_šd’t ( Ëv– , äm ); 686 tmp = `lmp_v”to¡r ( v” ); 687 `´štf ("V”sN¸%d (%s)\n", v” , tmp ); 688 `bt_ä“ ( tmp ); 690 `p_šd’t ( Ëv– , äm ); 691 `´štf ("CompId %d (%s)\n", compid , `bt_compidto¡r (compid)); 693 `p_šd’t ( Ëv– , äm ); 694 `´štf ("SubV”sN¸%d\n", subv” ); 695 } } 697  šlše  $ã©u»s_dump ( Ëv– ,  äame * äm ) 699 ušt8_t * ã©u»s = äm -> ±r ; 700  i ; 702 äm -> ±r += 8; 703 äm -> Ën -= 8; 705 `p_šd’t ( Ëv– , äm ); 706 `´štf ("features"); 707  i = 0; i < 8; i++) 708 `´štf (" 0x%2.2x", ã©u»s [ i ]); 709 `´štf ("\n"); 710 } } 712  šlše  $£t_afh_dump ( Ëv– ,  äame * äm ) 714 ušt32_t š¡ªt = `LMP_U32 ( äm ); 715 ušt8_t mode = `LMP_U8 ( äm ); 716 ušt8_t * m­ = äm -> ±r ; 717  i ; 719 äm -> ±r += 10; 720 äm -> Ën -= 10; 722 `p_šd’t ( Ëv– , äm ); 723 `´štf ("AFH_š¡ªˆ0x%04x\n", š¡ªt ); 725 `p_šd’t ( Ëv– , äm ); 726 `´štf ("AFH_mod%d\n", mode ); 728 `p_šd’t ( Ëv– , äm ); 729 `´štf ("AFH_channel_map 0x"); 730  i = 0; i < 10; i++) 731 `´štf ("%2.2x", m­ [ i ]); 732 `´štf ("\n"); 733 } } 735  šlše  $’ÿpsuÏ‹d_h—d”_dump ( Ëv– ,  äame * äm ) 737 ušt8_t majÜ = `LMP_U8 ( äm ); 738 ušt8_t mšÜ = `LMP_U8 ( äm ); 739 ušt8_t Ëngth = `LMP_U8 ( äm ); 741 `p_šd’t ( Ëv– , äm ); 742 `´štf ("majorype %d minorype %d…ayload†ength %d\n", 743 majÜ , mšÜ , Ëngth ); 745 ià( majÜ =ð1 && mšÜ == 1) { 746 `p_šd’t ( Ëv– , äm ); 747 `´štf ("P-192 Public Key\n"); 749 } } 751  šlše  $’ÿpsuÏ‹d_·ylßd_dump ( Ëv– ,  äame * äm ) 753 ušt8_t * v®ue = äm -> ±r ; 754  i ; 756 äm -> ±r += 16; 757 äm -> Ën -= 16; 759 `p_šd’t ( Ëv– , äm ); 760 `´štf ("data "); 761  i = 0; i < 16; i++) 762 `´štf ("%2.2x", v®ue [ i ]); 763 `´štf ("\n"); 764 } } 766  šlše  $sim¶e_·œšg_cÚfœm_dump ( Ëv– ,  äame * äm ) 768 ušt8_t * v®ue = äm -> ±r ; 769  i ; 771 äm -> ±r += 16; 772 äm -> Ën -= 16; 774 `p_šd’t ( Ëv– , äm ); 775 `´štf ("commitment value "); 776  i = 0; i < 16; i++) 777 `´štf ("%2.2x", v®ue [ i ]); 778 `´štf ("\n"); 779 } } 781  šlše  $sim¶e_·œšg_numb”_dump ( Ëv– ,  äame * äm ) 783 ušt8_t * v®ue = äm -> ±r ; 784  i ; 786 äm -> ±r += 16; 787 äm -> Ën -= 16; 789 `p_šd’t ( Ëv– , äm ); 790 `´štf ("nounce value "); 791  i = 0; i < 16; i++) 792 `´štf ("%2.2x", v®ue [ i ]); 793 `´štf ("\n"); 794 } } 796  šlše  $dhkey_check_dump ( Ëv– ,  äame * äm ) 798 ušt8_t * v®ue = äm -> ±r ; 799  i ; 801 äm -> ±r += 16; 802 äm -> Ën -= 16; 804 `p_šd’t ( Ëv– , äm ); 805 `´štf ("confirmation value "); 806  i = 0; i < 16; i++) 807 `´štf ("%2.2x", v®ue [ i ]); 808 `´štf ("\n"); 809 } } 811  šlše  $acû±ed_ext_dump ( Ëv– ,  äame * äm ) 813 ušt16_t Ýcode = `LMP_U8 ( äm ) + (LMP_U8(frm) << 7); 815 `p_šd’t ( Ëv– , äm ); 816 `´štf ("Ý cod%d/%d (%s)\n", Ýcode & 0x7f, opcod>> 7, `Ýcode2¡r (opcode)); 817 } } 819  šlše  $nÙ_acû±ed_ext_dump ( Ëv– ,  äame * äm ) 821 ušt16_t Ýcode = `LMP_U8 ( äm ) + (LMP_U8(frm) << 7); 822 ušt8_t ”rÜ = `LMP_U8 ( äm ); 824 `p_šd’t ( Ëv– , äm ); 825 `´štf ("Ý cod%d/%d (%s)\n", Ýcode & 0x7f, opcod>> 7, `Ýcode2¡r (opcode)); 827 `p_šd’t ( Ëv– , äm ); 828 `´štf ("”rÜ cod0x%2.2x\n", ”rÜ ); 829 } } 831  šlše  $ã©u»s_ext_dump ( Ëv– ,  äame * äm ) 833 ušt8_t ·ge = `LMP_U8 ( äm ); 834 ušt8_t max = `LMP_U8 ( äm ); 835 ušt8_t * ã©u»s = äm -> ±r ; 836  i ; 838 äm -> ±r += 8; 839 äm -> Ën -= 8; 841 `p_šd’t ( Ëv– , äm ); 842 `´štf ("ã©u» ·g%d\n", ·ge ); 844 `p_šd’t ( Ëv– , äm ); 845 `´štf ("max suµÜ‹d…ag%d\n", max ); 847 `p_šd’t ( Ëv– , äm ); 848 `´štf ("extended features"); 849  i = 0; i < 8; i++) 850 `´štf (" 0x%2.2x", ã©u»s [ i ]); 851 `´štf ("\n"); 852 } } 854  šlše  $qu®™y_of_£rviû_dump ( Ëv– ,  äame * äm ) 856 ušt16_t š‹rv® = `LMP_U16 ( äm ); 857 ušt8_t nbc = `LMP_U8 ( äm ); 859 `p_šd’t ( Ëv– , äm ); 860 `´štf ("pÞÈš‹rv® %d\n", š‹rv® ); 862 `p_šd’t ( Ëv– , äm ); 863 `´štf ("N_BC %d\n", nbc ); 864 } } 866  šlše  $sco_lšk_»q_dump ( Ëv– ,  äame * äm ) 868 ušt8_t hªdË = `LMP_U8 ( äm ); 869 ušt8_t timšg = `LMP_U8 ( äm ); 870 ušt8_t dsco = `LMP_U8 ( äm ); 871 ušt8_t tsco = `LMP_U8 ( äm ); 872 ušt8_t ·ck‘ = `LMP_U8 ( äm ); 873 ušt8_t aœmode = `LMP_U8 ( äm ); 875 `p_šd’t ( Ëv– , äm ); 876 `´štf ("SCO hªdË %d\n", hªdË ); 878 `p_šd’t ( Ëv– , äm ); 879 `´štf ("timšg cÚŒÞ fÏg 0x%2.2x\n", timšg ); 881 `p_šd’t ( Ëv– , äm ); 882 `´štf ("D_SCO %d T_SCO %d\n", dsco , tsco ); 884 `p_šd’t ( Ëv– , äm ); 885 `´štf ("SCO…ack‘ 0x%2.2x\n", ·ck‘ ); 887 `p_šd’t ( Ëv– , äm ); 888 `´štf ("aœ mod0x%2.2x\n", aœmode ); 889 } } 891  šlše  $»move_sco_lšk_»q_dump ( Ëv– ,  äame * äm ) 893 ušt8_t hªdË = `LMP_U8 ( äm ); 894 ušt8_t ”rÜ = `LMP_U8 ( äm ); 896 `p_šd’t ( Ëv– , äm ); 897 `´štf ("SCO hªdË %d\n", hªdË ); 899 `p_šd’t ( Ëv– , äm ); 900 `´štf ("”rÜ cod0x%2.2x\n", ”rÜ ); 901 } } 903  šlše  $max_¦Ùs_dump ( Ëv– ,  äame * äm ) 905 ušt8_t ¦Ùs = `LMP_U8 ( äm ); 907 `p_šd’t ( Ëv– , äm ); 908 `´štf ("max slÙ %d\n", ¦Ùs ); 909 } } 911  šlše  $timšg_accu¿cy_dump ( Ëv– ,  äame * äm ) 913 ušt8_t driá = `LMP_U8 ( äm ); 914 ušt8_t j™‹r = `LMP_U8 ( äm ); 916 `p_šd’t ( Ëv– , äm ); 917 `´štf ("driá %d\n", driá ); 919 `p_šd’t ( Ëv– , äm ); 920 `´štf ("j™‹¸%d\n", j™‹r ); 921 } } 923  šlše  $¦Ù_off£t_dump ( Ëv– ,  äame * äm ) 925 ušt16_t off£t = `LMP_U16 ( äm ); 926  addr [18]; 928 `p_ba2¡r (( bdaddr_t *è äm -> ±r , addr ); 930 `p_šd’t ( Ëv– , äm ); 931 `´štf ("¦Ù off£ˆ%d\n", off£t ); 933 `p_šd’t ( Ëv– , äm ); 934 `´štf ("BD_ADDR %s\n", addr ); 935 } } 937  šlše  $·ge_mode_dump ( Ëv– ,  äame * äm ) 939 ušt8_t scheme = `LMP_U8 ( äm ); 940 ušt8_t £‰šgs = `LMP_U8 ( äm ); 942 `p_šd’t ( Ëv– , äm ); 943 `´štf ("·gschem%d\n", scheme ); 945 `p_šd’t ( Ëv– , äm ); 946 `´štf ("·gschem£‰šg %d\n", £‰šgs ); 947 } } 949  šlše  $su³rvisiÚ_timeout_dump ( Ëv– ,  äame * äm ) 951 ušt16_t timeout = `LMP_U16 ( äm ); 953 `p_šd’t ( Ëv– , äm ); 954 `´štf ("su³rvisiÚimeouˆ%d\n", timeout ); 955 } } 957  šlše  $‹¡_cÚŒÞ_dump ( Ëv– ,  äame * äm ) 959 ušt8_t sûÇrio = `LMP_U8 ( äm ); 960 ušt8_t hÝpšg = `LMP_U8 ( äm ); 961 ušt8_t txäeq = `LMP_U8 ( äm ); 962 ušt8_t rxäeq = `LMP_U8 ( äm ); 963 ušt8_t pow” = `LMP_U8 ( äm ); 964 ušt8_t pÞl = `LMP_U8 ( äm ); 965 ušt8_t ·ck‘ = `LMP_U8 ( äm ); 966 ušt16_t Ëngth = `LMP_U16 ( äm ); 968 `p_šd’t ( Ëv– , äm ); 969 `´štf ("‹¡ sûÇriØ%d\n", sûÇrio ); 971 `p_šd’t ( Ëv– , äm ); 972 `´štf ("hÝpšg mod%d\n", hÝpšg ); 974 `p_šd’t ( Ëv– , äm ); 975 `´štf ("TX f»qu’cy %d\n", txäeq ); 977 `p_šd’t ( Ëv– , äm ); 978 `´štf ("RX f»qu’cy %d\n", rxäeq ); 980 `p_šd’t ( Ëv– , äm ); 981 `´štf ("pow” cÚŒÞ mod%d\n", pow” ); 983 `p_šd’t ( Ëv– , äm ); 984 `´štf ("pÞȳriod %d\n", pÞl ); 986 `p_šd’t ( Ëv– , äm ); 987 `´štf ("pÞȳriod %d\n", pÞl ); 989 `p_šd’t ( Ëv– , äm ); 990 `´štf ("·ck‘y³ 0x%2.2x\n", ·ck‘ ); 992 `p_šd’t ( Ëv– , äm ); 993 `´štf ("Ëngth oà‹¡ d©¨%d\n", Ëngth ); 994 } } 996  šlše  $’üy±iÚ_key_size_mask_»s_dump ( Ëv– ,  äame * äm ) 998 ušt16_t mask = `LMP_U16 ( äm ); 1000 `p_šd’t ( Ëv– , äm ); 1001 `´štf ("key sizmask 0x%4.4x\n", mask ); 1002 } } 1004  šlše  $·ck‘_ty³_bË_dump ( Ëv– ,  äame * äm ) 1006 ušt8_t ty³ = `LMP_U8 ( äm ); 1008 `p_šd’t ( Ëv– , äm ); 1009 `´štf ("·ck‘y³abË %d ", ty³ ); 1010  ty³ ) { 1012 `´štf ("(1Mbps only)\n"); 1015 `´štf ("(2/3Mbps)\n"); 1018 `´štf ("(Reserved)\n"); 1021 } } 1023  šlše  $esco_lšk_»q_dump ( Ëv– ,  äame * äm ) 1025 ušt8_t hªdË = `LMP_U8 ( äm ); 1026 ušt8_t Éaddr = `LMP_U8 ( äm ); 1027 ušt8_t timšg = `LMP_U8 ( äm ); 1028 ušt8_t desco = `LMP_U8 ( äm ); 1029 ušt8_t ‹sco = `LMP_U8 ( äm ); 1030 ušt8_t wesco = `LMP_U8 ( äm ); 1031 ušt8_t m¥kt = `LMP_U8 ( äm ); 1032 ušt8_t smpkt = `LMP_U8 ( äm ); 1033 ušt16_t m¦’ = `LMP_U16 ( äm ); 1034 ušt16_t smËn = `LMP_U16 ( äm ); 1035 ušt8_t aœmode = `LMP_U8 ( äm ); 1036 ušt8_t Ãg¡©e = `LMP_U8 ( äm ); 1038 `p_šd’t ( Ëv– , äm ); 1039 `´štf ("eSCO hªdË %d\n", hªdË ); 1041 `p_šd’t ( Ëv– , äm ); 1042 `´štf ("eSCO LT_ADDR %d\n", Éaddr ); 1044 `p_šd’t ( Ëv– , äm ); 1045 `´štf ("timšg cÚŒÞ fÏg 0x%2.2x\n", timšg ); 1047 `p_šd’t ( Ëv– , äm ); 1048 `´štf ("D_eSCO %d T_eSCO %d W_eSCO %d\n", desco , ‹sco , wesco ); 1050 `p_šd’t ( Ëv– , äm ); 1051 `´štf ("eSCO M->S…ack‘y³ 0x%2.2x†’gth %d\n", m¥kt , m¦’ ); 1053 `p_šd’t ( Ëv– , äm ); 1054 `´štf ("eSCO S->M…ack‘y³ 0x%2.2x†’gth %d\n", smpkt , smËn ); 1056 `p_šd’t ( Ëv– , äm ); 1057 `´štf ("aœ mod0x%2.2x\n", aœmode ); 1059 `p_šd’t ( Ëv– , äm ); 1060 `´štf ("ÃgÙŸtiÚ s‹ 0x%2.2x\n", Ãg¡©e ); 1061 } } 1063  šlše  $»move_esco_lšk_»q_dump ( Ëv– ,  äame * äm ) 1065 ušt8_t hªdË = `LMP_U8 ( äm ); 1066 ušt8_t ”rÜ = `LMP_U8 ( äm ); 1068 `p_šd’t ( Ëv– , äm ); 1069 `´štf ("eSCO hªdË %d\n", hªdË ); 1071 `p_šd’t ( Ëv– , äm ); 1072 `´štf ("”rÜ cod0x%2.2x\n", ”rÜ ); 1073 } } 1075  šlše  $chªÃl_þassifiÿtiÚ_»q_dump ( Ëv– ,  äame * äm ) 1077 ušt8_t mode = `LMP_U8 ( äm ); 1078 ušt16_t mš = `LMP_U16 ( äm ); 1079 ušt16_t max = `LMP_U16 ( äm ); 1081 `p_šd’t ( Ëv– , äm ); 1082 `´štf ("AFH„•Ütšg mod%d\n", mode ); 1084 `p_šd’t ( Ëv– , äm ); 1085 `´štf ("AFH mš iÁ”v® 0x%4.4x\n", mš ); 1087 `p_šd’t ( Ëv– , äm ); 1088 `´štf ("AFH max iÁ”v® 0x%4.4x\n", max ); 1089 } } 1091  šlše  $chªÃl_þassifiÿtiÚ_dump ( Ëv– ,  äame * äm ) 1093 ušt8_t * m­ = äm -> ±r ; 1094  i ; 1096 äm -> ±r += 10; 1097 äm -> Ën -= 10; 1099 `p_šd’t ( Ëv– , äm ); 1100 `´štf ("AFH channel classification 0x"); 1101  i = 0; i < 10; i++) 1102 `´štf ("%2.2x", m­ [ i ]); 1103 `´štf ("\n"); 1104 } } 1106  šlše  $¢iff_sub¿tšg_dump ( Ëv– ,  äame * äm ) 1108 ušt8_t sub¿‹ = `LMP_U8 ( äm ); 1109 ušt16_t timeout = `LMP_U16 ( äm ); 1110 ušt32_t š¡ªt = `LMP_U32 ( äm ); 1112 `p_šd’t ( Ëv– , äm ); 1113 `´štf ("max sub¿‹ %d\n", sub¿‹ ); 1115 `p_šd’t ( Ëv– , äm ); 1116 `´štf ("mš snifàtimeouˆ%d\n", timeout ); 1118 `p_šd’t ( Ëv– , äm ); 1119 `´štf ("sub¿‹ in¡ªˆ0x%4.4x\n", š¡ªt ); 1120 } } 1122  šlše  $io_ÿ·bž™y_dump ( Ëv– ,  äame * äm ) 1124 ušt8_t ÿ·bž™y = `LMP_U8 ( äm ); 1125 ušt8_t oob_d©a = `LMP_U8 ( äm ); 1126 ušt8_t auth’tiÿtiÚ = `LMP_U8 ( äm ); 1128 `p_šd’t ( Ëv– , äm ); 1129 `´štf ("capability 0x%2.2x oob 0x%2.2x‡uth 0x%2.2x\n", 1130 ÿ·bž™y , oob_d©a , auth’tiÿtiÚ ); 1131 } } 1133  šlše  $key´ess_nÙifiÿtiÚ_dump ( Ëv– ,  äame * äm ) 1135 ušt8_t v®ue = `LMP_U8 ( äm ); 1137 `p_šd’t ( Ëv– , äm ); 1138 `´štf ("nÙifiÿtiÚ v®u%d\n", v®ue ); 1139 } } 1141  $lmp_dump ( Ëv– ,  äame * äm ) 1143 ušt8_t tmp , tid ; 1144 ušt16_t Ýcode ; 1146 `p_šd’t ( Ëv– , äm ); 1148 tmp = `LMP_U8 ( äm ); 1149 tid = tmp & 0x01; 1150 Ýcode = ( tmp & 0xfe) >> 1; 1151 ià( Ýcode > 123) { 1152 tmp = `LMP_U8 ( äm ); 1153 Ýcode +ð tmp << 7; 1156 `´štf ("LMP(%c): %s(%c): ", äm -> ma¡” ? 's' : 'r', 1157 `Ýcode2¡r ( Ýcode ), tid ? 's' : 'm'); 1159 ià( Ýcode > 123) 1160 `´štf ("Ý cod%d/%d", Ýcode & 0x7f, opcode >> 7); 1162 `´štf ("Ý cod%d", Ýcode ); 1164 ià( äm -> hªdË > 17) 1165 `´štf (" hªdË %d\n", äm -> hªdË ); 1167 `´štf ("\n"); 1169 ià(!( ·r£r . æags & DUMP_VERBOSE )) { 1170 `¿w_dump ( Ëv– , äm ); 1174  Ýcode ) { 1176 `Çme_»q_dump ( Ëv– + 1, äm ); 1179 `Çme_»s_dump ( Ëv– + 1, äm ); 1182 `acû±ed_dump ( Ëv– + 1, äm ); 1185 `nÙ_acû±ed_dump ( Ëv– + 1, äm ); 1188 `þkoff£t_dump ( Ëv– + 1, äm ); 1191 `d‘ach_dump ( Ëv– + 1, äm ); 1194 `š_¿nd ( äm ); 1195 `¿ndom_numb”_dump ( Ëv– + 1, äm ); 1198 `comb_key ( äm ); 1199 `¿ndom_numb”_dump ( Ëv– + 1, äm ); 1202 `au_¿nd ( äm ); 1203 `¿ndom_numb”_dump ( Ëv– + 1, äm ); 1206 `¤es ( äm ); 1207 `auth_»¥_dump ( Ëv– + 1, äm ); 1211 `¿ndom_numb”_dump ( Ëv– + 1, äm ); 1215 `key_dump ( Ëv– + 1, äm ); 1218 `’üy±iÚ_mode_»q_dump ( Ëv– + 1, äm ); 1221 `’üy±iÚ_key_size_»q_dump ( Ëv– + 1, äm ); 1224 `sw™ch_»q_dump ( Ëv– + 1, äm ); 1228 `hÞd_dump ( Ëv– + 1, äm ); 1231 `¢iff_»q_dump ( Ëv– + 1, äm ); 1234 `·rk_»q_dump ( Ëv– + 1, äm ); 1237 `modify_b—cÚ_dump ( Ëv– + 1, äm ); 1241 `pow”_»q_dump ( Ëv– + 1, äm ); 1244 `´eã¼ed_¿‹_dump ( Ëv– + 1, äm ); 1248 `v”siÚ_dump ( Ëv– + 1, äm ); 1252 `ã©u»s_dump ( Ëv– + 1, äm ); 1256 `qu®™y_of_£rviû_dump ( Ëv– + 1, äm ); 1259 `sco_lšk_»q_dump ( Ëv– + 1, äm ); 1262 `»move_sco_lšk_»q_dump ( Ëv– + 1, äm ); 1266 `max_¦Ùs_dump ( Ëv– + 1, äm ); 1269 `timšg_accu¿cy_dump ( Ëv– + 1, äm ); 1272 `¦Ù_off£t_dump ( Ëv– + 1, äm ); 1276 `·ge_mode_dump ( Ëv– + 1, äm ); 1279 `su³rvisiÚ_timeout_dump ( Ëv– + 1, äm ); 1282 `‹¡_cÚŒÞ_dump ( Ëv– + 1, äm ); 1285 `’üy±iÚ_key_size_mask_»s_dump ( Ëv– + 1, äm ); 1288 `£t_afh_dump ( Ëv– + 1, äm ); 1291 `’ÿpsuÏ‹d_h—d”_dump ( Ëv– + 1, äm ); 1294 `’ÿpsuÏ‹d_·ylßd_dump ( Ëv– + 1, äm ); 1297 `sim¶e_·œšg_cÚfœm_dump ( Ëv– + 1, äm ); 1300 `sim¶e_·œšg_numb”_dump ( Ëv– + 1, äm ); 1303 `dhkey_check_dump ( Ëv– + 1, äm ); 1324 `acû±ed_ext_dump ( Ëv– + 1, äm ); 1327 `nÙ_acû±ed_ext_dump ( Ëv– + 1, äm ); 1331 `ã©u»s_ext_dump ( Ëv– + 1, äm ); 1334 `·ck‘_ty³_bË_dump ( Ëv– + 1, äm ); 1337 `esco_lšk_»q_dump ( Ëv– + 1, äm ); 1340 `»move_esco_lšk_»q_dump ( Ëv– + 1, äm ); 1343 `chªÃl_þassifiÿtiÚ_»q_dump ( Ëv– + 1, äm ); 1346 `chªÃl_þassifiÿtiÚ_dump ( Ëv– + 1, äm ); 1350 `¢iff_sub¿tšg_dump ( Ëv– + 1, äm ); 1354 `io_ÿ·bž™y_dump ( Ëv– + 1, äm ); 1357 `key´ess_nÙifiÿtiÚ_dump ( Ëv– + 1, äm ); 1361 `¿w_dump ( Ëv– , äm ); 1362 } } @tools/parser/obex.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~"·r£r.h " 36 * $Ýcode2¡r ( ušt8_t Ýcode ) 38  Ýcode & 0x7f) { 136 } } 138 * $hi2¡r ( ušt8_t hi ) 140  hi & 0x3f) { 194 } } 196  $·r£_h—d”s ( Ëv– ,  äame * äm ) 198 ušt8_t hi , hv8 ; 199 ušt16_t Ën ; 200 ušt32_t hv32 ; 202  äm -> Ën > 0) { 203 hi = `g‘_u8 ( äm ); 205 `p_šd’t ( Ëv– , äm ); 207 `´štf ("% (0x%02x)", `hi2¡r ( hi ), hi); 208  hi & 0xc0) { 210 ià( äm -> Ën < 2) { 211 `´štf ("\n"); 215 Ën = `g‘_u16 ( äm ) - 3; 216 `´štf (" = UnicodËngth %d\n", Ën ); 218 ià( äm -> Ën <†en) 221 `¿w_ndump ( Ëv– , äm , Ën ); 222 äm -> ±r +ð Ën ; 223 äm -> Ën -=†en; 227 ià( äm -> Ën < 2) { 228 `´štf ("\n"); 232 Ën = `g‘_u16 ( äm ) - 3; 233 `´štf (" = Sequ’û†’gth %d\n", Ën ); 235 ià( äm -> Ën <†en) 238 `¿w_ndump ( Ëv– , äm , Ën ); 239 äm -> ±r +ð Ën ; 240 äm -> Ën -=†en; 244 ià( äm -> Ën < 1) { 245 `´štf ("\n"); 249 hv8 = `g‘_u8 ( äm ); 250 `´štf (" = %d\n", hv8 ); 254 ià( äm -> Ën < 4) { 255 `´štf ("\n"); 259 hv32 = `g‘_u32 ( äm ); 260 `´štf (" = %u\n", hv32 ); 264 } } 266  $obex_dump ( Ëv– ,  äame * äm ) 268 ušt8_t Ï¡_Ýcode , Ýcode , ¡©us ; 269 ušt8_t v”siÚ , æags , cÚ¡ªts ; 270 ušt16_t Ëngth , pkŽ’ ; 272 äm = `add_äame (frm); 274  äm -> Ën > 2) { 275 Ýcode = `g‘_u8 ( äm ); 276 Ëngth = `g‘_u16 ( äm ); 277 ¡©us = Ýcode & 0x7f; 279 ià((è äm -> Ën < Ëngth - 3) { 280 äm -> ±r -= 3; 281 äm -> Ën += 3; 285 `p_šd’t ( Ëv– , äm ); 287 Ï¡_Ýcode = `g‘_Ýcode ( äm -> hªdË , frm-> dlci ); 289 ià(!( Ýcode & 0x70)) { 290 `´štf ("OBEX: %s cmd(%c):†en %d", 291 `Ýcode2¡r ( Ýcode ), 292 Ýcode & 0x80 ? 'f' : 'c', Ëngth ); 293 `£t_Ýcode ( äm -> hªdË , frm-> dlci , Ýcode ); 295 `´štf ("OBEX: %s„sp(%c): status %x%02d†en %d", 296 `Ýcode2¡r ( Ï¡_Ýcode ), 297 Ýcode & 0x80 ? 'f' : 'c', 298 ¡©us >> 4, stu & 0xf, Ëngth ); 299 Ýcode = Ï¡_Ýcode ; 302 ià( `g‘_¡©us ( äm -> hªdË , frm-> dlci ) == 0x10) 303 `´štf (" (continue)"); 305 `£t_¡©us ( äm -> hªdË , frm-> dlci , ¡©us ); 307 ià( äm -> Ën == 0) { 308 `´štf ("\n"); 312  Ýcode & 0x7f) { 314 ià( äm -> Ën < 4) { 315 `´štf ("\n"); 319 v”siÚ = `g‘_u8 ( äm ); 320 æags = `g‘_u8 ( äm ); 321 pkŽ’ = `g‘_u16 ( äm ); 322 `´štf (" version %d.%d flags %d mtu %d\n", 323 v”siÚ >> 4, v”siÚ & 0xf, æags , pkŽ’ ); 327 ià( äm -> Ën < 2) { 328 `´štf ("\n"); 332 æags = `g‘_u8 ( äm ); 333 cÚ¡ªts = `g‘_u8 ( äm ); 334 `´štf (" fÏg %d cÚ¡ªt %d\n", æags , cÚ¡ªts ); 338 `´štf ("\n"); 342 ià(( ¡©us & 0x70è&& ( ·r£r . æags & DUMP_VERBOSE )) { 343 `p_šd’t ( Ëv– , äm ); 344 `´štf ("Status %x%02d = %s\n", 345 ¡©us >> 4, status & 0xf, 346 `Ýcode2¡r ( ¡©us )); 349 `·r£_h—d”s ( Ëv– , äm ); 351 } } @tools/parser/parser.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<ùy³.h > 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 36  ~"·r£r.h " 37  ~"rfcomm.h " 39  ·r£r_t g·r£r ; 41  $š™_·r£r ( æags ,  fž‹r , 42  deåsm ,  defcompid , 43  µpdump_fd ,  audio_fd ) 45 ià(( æags & DUMP_RAW è&& !(æag & DUMP_TYPE_MASK )) 46 æags |ð DUMP_HEX ; 48 ·r£r . æags = flags; 49 ·r£r . fž‹r = filter; 50 ·r£r . deåsm = defpsm; 51 ·r£r . defcompid = defcompid; 52 ·r£r . ¡©e = 0; 53 ·r£r . µpdump_fd =…ppdump_fd; 54 ·r£r . audio_fd =‡udio_fd; 55 } } 57  #PROTO_TABLE_SIZE 20 ) 60 ušt16_t mhªdË ; 61 ušt16_t mpsm ; 62 ušt8_t mchªÃl ; 63 ušt32_t m´Ùo ; 64 } g´Ùo_bË [ PROTO_TABLE_SIZE ]; 66  $£t_´Ùo ( ušt16_t hªdË , ušt16_ˆ psm , ušt8_t chªÃl , ušt32_t ´Ùo ) 68  i , pos = -1; 70 ià( psm > 0 &&…sm < 0x1000 && ! chªÃl ) 73 ià(! psm && chªÃl ) 74 psm = RFCOMM_PSM ; 76  i = 0; i < PROTO_TABLE_SIZE ; i++) { 77 ià( ´Ùo_bË [ i ]. hªdË =ðhªdË &&…rÙo_bË[i]. psm =ðpsm &&…rÙo_bË[i]. chªÃl == channel) { 78 pos = i ; 82 ià( pos < 0 && ! ´Ùo_bË [ i ]. hªdË && !´Ùo_bË[i]. psm && !´Ùo_bË[i]. chªÃl ) 83 pos = i ; 86 ià( pos < 0) 89 ´Ùo_bË [ pos ]. hªdË = handle; 90 ´Ùo_bË [ pos ]. psm =…sm; 91 ´Ùo_bË [ pos ]. chªÃl = channel; 92 ´Ùo_bË [ pos ]. ´Ùo =…roto; 93 } } 95 ušt32_t $g‘_´Ùo ( ušt16_t hªdË , ušt16_ˆ psm , ušt8_t chªÃl ) 97  i , pos = -1; 99 ià(! psm && chªÃl ) 100 psm = RFCOMM_PSM ; 102  i = 0; i < PROTO_TABLE_SIZE ; i++) { 103 ià( ´Ùo_bË [ i ]. hªdË =ðhªdË &&…rÙo_bË[i]. psm =ðpsm &&…rÙo_bË[i]. chªÃl == channel) 104  ´Ùo_bË [ i ]. ´Ùo ; 106 ià(! ´Ùo_bË [ i ]. hªdË ) { 107 ià( ´Ùo_bË [ i ]. psm =ðpsm &&…rÙo_bË[i]. chªÃl == channel) 108 pos = i ; 112  ( pos < 0è? 0 : ´Ùo_bË [pos]. ´Ùo ; 113 } } 115  #FRAME_TABLE_SIZE 20 ) 118 ušt16_t mhªdË ; 119 ušt8_t mdlci ; 120 ušt8_t mÝcode ; 121 ušt8_t m¡©us ; 122  äame mäm ; 123 } gäame_bË [ FRAME_TABLE_SIZE ]; 125  $d–_äame ( ušt16_t hªdË , ušt8_t dlci ) 127  i ; 129  i = 0; i < FRAME_TABLE_SIZE ; i++) 130 ià( äame_bË [ i ]. hªdË == handle && 131 äame_bË [ i ]. dlci == dlci) { 132 äame_bË [ i ]. hªdË = 0; 133 äame_bË [ i ]. dlci = 0; 134 äame_bË [ i ]. Ýcode = 0; 135 äame_bË [ i ]. ¡©us = 0; 136 ià( äame_bË [ i ]. äm . d©a ) 137 `ä“ ( äame_bË [ i ]. äm . d©a ); 138 `mem£t (& äame_bË [ i ]. äm , 0, ( äame )); 141 } } 143  äame * $add_äame ( äame * äm ) 145  äame * ä ; 146 * d©a ; 147  i , pos = -1; 149  i = 0; i < FRAME_TABLE_SIZE ; i++) { 150 ià( äame_bË [ i ]. hªdË =ð äm ->handle && 151 äame_bË [ i ]. dlci =ð äm ->dlci) { 152 pos = i ; 156 ià( pos < 0 && ! äame_bË [ i ]. hªdË && !äame_bË[i]. dlci ) 157 pos = i ; 160 ià( pos < 0) 161  äm ; 163 äame_bË [ pos ]. hªdË = äm ->handle; 164 äame_bË [ pos ]. dlci = äm ->dlci; 165 ä = & äame_bË [ pos ]. äm ; 167 d©a = `m®loc ( ä -> Ën + äm ->len); 168 ià(! d©a ) { 169 `³¼Ü ("Can't‡llocate frame stream buffer"); 170 `d–_äame ( äm -> hªdË , frm-> dlci ); 171  äm ; 174 ià( ä -> Ën > 0) 175 `memýy ( d©a , ä -> ±r , fr-> Ën ); 177 ià( äm -> Ën > 0) 178 `memýy ( d©a + ä -> Ën , äm -> ±r , frm->len); 180 ià( ä -> d©a ) 181 `ä“ ( ä -> d©a ); 183 ä -> d©a = data; 184 ä -> d©a_Ën = fr-> Ën + äm ->len; 185 ä -> Ën = fr-> d©a_Ën ; 186 ä -> ±r = fr-> d©a ; 187 ä -> dev_id = äm ->dev_id; 188 ä -> š = äm ->in; 189 ä -> ts = äm ->ts; 190 ä -> hªdË = äm ->handle; 191 ä -> cid = äm ->cid; 192 ä -> num = äm ->num; 193 ä -> dlci = äm ->dlci; 194 ä -> chªÃl = äm ->channel; 195 ä -> µpdump_fd = äm ->pppdump_fd; 196 ä -> audio_fd = äm ->audio_fd; 198  ä ; 199 } } 201 ušt8_t $g‘_Ýcode ( ušt16_t hªdË , ušt8_t dlci ) 203  i ; 205  i = 0; i < FRAME_TABLE_SIZE ; i++) 206 ià( äame_bË [ i ]. hªdË == handle && 207 äame_bË [ i ]. dlci == dlci) 208  äame_bË [ i ]. Ýcode ; 211 } } 213  $£t_Ýcode ( ušt16_t hªdË , ušt8_t dlci , ušt8_ˆ Ýcode ) 215  i ; 217  i = 0; i < FRAME_TABLE_SIZE ; i++) 218 ià( äame_bË [ i ]. hªdË == handle && 219 äame_bË [ i ]. dlci == dlci) { 220 äame_bË [ i ]. Ýcode = opcode; 223 } } 225 ušt8_t $g‘_¡©us ( ušt16_t hªdË , ušt8_t dlci ) 227  i ; 229  i = 0; i < FRAME_TABLE_SIZE ; i++) 230 ià( äame_bË [ i ]. hªdË == handle && 231 äame_bË [ i ]. dlci == dlci) 232  äame_bË [ i ]. ¡©us ; 235 } } 237  $£t_¡©us ( ušt16_t hªdË , ušt8_t dlci , ušt8_ˆ ¡©us ) 239  i ; 241  i = 0; i < FRAME_TABLE_SIZE ; i++) 242 ià( äame_bË [ i ]. hªdË == handle && 243 äame_bË [ i ]. dlci == dlci) { 244 äame_bË [ i ]. ¡©us = status; 247 } } 249  $ascii_dump ( Ëv– ,  äame * äm ,  num ) 251 * buf = äm -> ±r ; 252  i , n ; 254 ià(( num < 0è|| (num > (è äm -> Ën )) 255 num = äm -> Ën ; 257  i = 0, n = 1; i < num ; i++,‚++) { 258 ià( n == 1) 259 `p_šd’t ( Ëv– , äm ); 260 `´štf ("%1ø", `i¥ršt ( buf [ i ]) ? buf[i] : '.'); 261 ià( n =ð DUMP_WIDTH ) { 262 `´štf ("\n"); 263 n = 0; 266 ià( i && n != 1) 267 `´štf ("\n"); 268 } } 270  $hex_dump ( Ëv– ,  äame * äm ,  num ) 272 * buf = äm -> ±r ; 273  i , n ; 275 ià(( num < 0è|| (num > (è äm -> Ën )) 276 num = äm -> Ën ; 278  i = 0, n = 1; i < num ; i++,‚++) { 279 ià( n == 1) 280 `p_šd’t ( Ëv– , äm ); 281 `´štf ("%2.2X ", buf [ i ]); 282 ià( n =ð DUMP_WIDTH ) { 283 `´štf ("\n"); 284 n = 0; 287 ià( i && n != 1) 288 `´štf ("\n"); 289 } } 291  $ext_dump ( Ëv– ,  äame * äm ,  num ) 293 * buf = äm -> ±r ; 294  i , n = 0, size ; 296 ià(( num < 0è|| (num > (è äm -> Ën )) 297 num = äm -> Ën ; 299  num > 0) { 300 `p_šd’t ( Ëv– , äm ); 301 `´štf ("%04x: ", n ); 303 size = num > 16 ? 16 :‚um; 305  i = 0; i < size ; i++) 306 `´štf ("%02x%s", buf [ i ], (i + 1) % 8 ? " " : " "); 307  i = size ; i < 16; i++) 308 `´štf (" %s", ( i + 1) % 8 ? " " : " "); 310  i = 0; i < size ; i++) 311 `´štf ("%1c", `i¥ršt ( buf [ i ]) ? buf[i] : '.'); 312 `´štf ("\n"); 314 buf +ð size ; 315 num -ð size ; 316 n +ð size ; 318 } } 320  $¿w_ndump ( Ëv– ,  äame * äm ,  num ) 322 ià(! äm -> Ën ) 325  ·r£r . æags & DUMP_TYPE_MASK ) { 326  DUMP_ASCII : 327 `ascii_dump ( Ëv– , äm , num ); 330  DUMP_HEX : 331 `hex_dump ( Ëv– , äm , num ); 334  DUMP_EXT : 335 `ext_dump ( Ëv– , äm , num ); 338 } } 340  $¿w_dump ( Ëv– ,  äame * äm ) 342 `¿w_ndump ( Ëv– , äm , -1); 343 } } @tools/parser/parser.h 25 #iâdeà __PARSER_H 26  #__PARSER_H ) 28  ~ 29  ~ 30  ~<Ãtš‘/š.h > 32  ~"lib/blu‘oÙh.h " 33  ~"¤c/sh¬ed/utž.h " 35  säame { 36 * md©a ; 37 ušt32_t md©a_Ën ; 38 * m±r ; 39 ušt32_t mËn ; 40 ušt16_t mdev_id ; 41 ušt8_t mš ; 42 ušt8_t mma¡” ; 43 ušt16_t mhªdË ; 44 ušt16_t mcid ; 45 ušt16_t mnum ; 46 ušt8_t mdlci ; 47 ušt8_t mchªÃl ; 48  mæags ; 49  timev® mts ; 50  mµpdump_fd ; 51  maudio_fd ; 55  #DUMP_WIDTH 20 ) 57  #DUMP_ASCII 0x0001 ) 58  #DUMP_HEX 0x0002 ) 59  #DUMP_EXT 0x0004 ) 60  #DUMP_RAW 0x0008 ) 61  #DUMP_BPA 0x0010 ) 62  #DUMP_TSTAMP 0x0100 ) 63  #DUMP_VERBOSE 0x0200 ) 64  #DUMP_BTSNOOP 0x1000 ) 65  #DUMP_PKTLOG 0x2000 ) 66  #DUMP_NOVENDOR 0x4000 ) 67  #DUMP_TYPE_MASK ( DUMP_ASCII | DUMP_HEX | DUMP_EXT ) ) 70  #FILT_LMP 0x0001 ) 71  #FILT_HCI 0x0002 ) 72  #FILT_SCO 0x0004 ) 73  #FILT_L2CAP 0x0008 ) 74  #FILT_RFCOMM 0x0010 ) 75  #FILT_SDP 0x0020 ) 76  #FILT_BNEP 0x0040 ) 77  #FILT_CMTP 0x0080 ) 78  #FILT_HIDP 0x0100 ) 79  #FILT_HCRP 0x0200 ) 80  #FILT_AVDTP 0x0400 ) 81  #FILT_AVCTP 0x0800 ) 82  #FILT_ATT 0x1000 ) 83  #FILT_SMP 0x2000 ) 84  #FILT_A2MP 0x4000 ) 86  #FILT_OBEX 0x00010000 ) 87  #FILT_CAPI 0x00020000 ) 88  #FILT_PPP 0x00040000 ) 89  #FILT_SAP 0x00080000 ) 90  #FILT_ERICSSON 0x10000000 ) 91  #FILT_CSR 0x1000000a ) 92  #FILT_DGA 0x1000000c ) 94  #STRUCT_OFFSET ( ty³ , memb” è(( ušt8_t *)&((Ñy³ *) NULL )->member) - \ 95 ( ušt8_t *)(( ty³ *) NULL )) ) 97  #STRUCT_END ( ty³ , memb” è( `STRUCT_OFFSET (type, member) + \ 98 ((( ty³ *) NULL )-> memb” )) ) 100  #DEFAULT_COMPID 65535 ) 102  s·r£r_t { 103  mæags ; 104  mfž‹r ; 105  mdeåsm ; 106  mdefcompid ; 107  m¡©e ; 108  mµpdump_fd ; 109  maudio_fd ; 112  ·r£r_t ·r£r ; 114  š™_·r£r ( æags ,  fž‹r , 115  deåsm ,  defcompid , 116  µpdump_fd ,  audio_fd ); 118  šlše  $p_fž‹r ( f ) 120  !( ·r£r . fž‹r & f ); 121 } } 123  šlše  $p_šd’t ( Ëv– ,  äame * f ) 125 ià( Ëv– < 0) { 126 ·r£r . ¡©e = 0; 130 ià(! ·r£r . ¡©e ) { 131 ià( ·r£r . æags & DUMP_TSTAMP ) { 132 ià( ·r£r . æags & DUMP_VERBOSE ) { 133  tm m; 134 time_t t = f -> ts . tv_£c ; 135 `loÿÉime_r (& t , & tm ); 136 `´štf ("%04d-%02d-%02d %02d:%02d:%02d.%06lu ", 137 tm . tm_y—r + 1900,m. tm_mÚ + 1,m. tm_mday , 138 tm . tm_hour ,m. tm_mš ,m. tm_£c , f -> ts . tv_u£c ); 140 `´štf ("%8lu.%06lu ", f -> ts . tv_£c , f->ts. tv_u£c ); 142 `´štf ("%ø", ( f -> š ? '>' : '<')); 143 ·r£r . ¡©e = 1; 145 `´štf (" "); 147 ià( Ëv– ) 148 `´štf ("%*c", ( Ëv– *2), ' '); 149 } } 151  šlše  $p_ba2¡r (cÚ¡ bdaddr_t * ba , * ¡r ) 153 ià( ·r£r . æags & DUMP_NOVENDOR ) { 154 ušt8_t b [6]; 156 `basw­ (( bdaddr_t *è b , ba ); 157 `¥rštf ( ¡r , "%2.2X:%2.2X:%2.2X:*:*:*", b [0], b[1], b[2]); 159 `ba2¡r ( ba , ¡r ); 160 } } 164  šlše ušt8_t $g‘_u8 ( äame * äm ) 166 ušt8_t * u8_±r = äm -> ±r ; 167 äm -> ±r += 1; 168 äm -> Ën -= 1; 169  * u8_±r ; 170 } } 172  šlše ušt16_t $g‘_u16 ( äame * äm ) 174 ušt16_t * u16_±r = äm -> ±r ; 175 äm -> ±r += 2; 176 äm -> Ën -= 2; 177  `g‘_be16 ( u16_±r ); 178 } } 180  šlše ušt32_t $g‘_u32 ( äame * äm ) 182 ušt32_t * u32_±r = äm -> ±r ; 183 äm -> ±r += 4; 184 äm -> Ën -= 4; 185  `g‘_be32 ( u32_±r ); 186 } } 188  šlše ušt64_t $g‘_u64 ( äame * äm ) 190 ušt64_t * u64_±r = äm -> ±r ; 191 ušt64_t u64 = `g‘_uÇligÃd ( u64_±r ), tmp ; 192 äm -> ±r += 8; 193 äm -> Ën -= 8; 194 tmp = `Áohl ( u64 & 0xffffffff); 195 u64 = ( tmp << 32è| `Áohl (u64 >> 32); 196  u64 ; 197 } } 199  šlše  $g‘_u128 ( äame * äm , ušt64_t * l , ušt64_ˆ* h ) 201 * h = `g‘_u64 ( äm ); 202 * l = `g‘_u64 ( äm ); 203 } } 205 * g‘_uuid_Çme ( uuid ); 207  £t_´Ùo ( ušt16_t hªdË , ušt16_ˆ psm , ušt8_t chªÃl , ušt32_t ´Ùo ); 208 ušt32_t g‘_´Ùo ( ušt16_t hªdË , ušt16_ˆ psm , ušt8_t chªÃl ); 210  äame * add_äame (äam* äm ); 211  d–_äame ( ušt16_t hªdË , ušt8_t dlci ); 213 ušt8_t g‘_Ýcode ( ušt16_t hªdË , ušt8_ˆ dlci ); 214  £t_Ýcode ( ušt16_t hªdË , ušt8_t dlci , ušt8_ˆ Ýcode ); 216 ušt8_t g‘_¡©us ( ušt16_t hªdË , ušt8_ˆ dlci ); 217  £t_¡©us ( ušt16_t hªdË , ušt8_t dlci , ušt8_ˆ ¡©us ); 219  l2ÿp_þ—r ( ušt16_t hªdË ); 221  ascii_dump ( Ëv– ,  äame * äm ,  num ); 222  hex_dump ( Ëv– ,  äame * äm ,  num ); 223  ext_dump ( Ëv– ,  äame * äm ,  num ); 224  ¿w_dump ( Ëv– ,  äame * äm ); 225  ¿w_ndump ( Ëv– ,  äame * äm ,  num ); 227  lmp_dump ( Ëv– ,  äame * äm ); 228  hci_dump ( Ëv– ,  äame * äm ); 229  l2ÿp_dump ( Ëv– ,  äame * äm ); 230  rfcomm_dump ( Ëv– ,  äame * äm ); 231  sdp_dump ( Ëv– ,  äame * äm ); 232  bÃp_dump ( Ëv– ,  äame * äm ); 233  cm_dump ( Ëv– ,  äame * äm ); 234  hidp_dump ( Ëv– ,  äame * äm ); 235  hüp_dump ( Ëv– ,  äame * äm ); 236  avd_dump ( Ëv– ,  äame * äm ); 237  avùp_dump ( Ëv– ,  äame * äm , ušt16_t psm ); 238  avrý_dump ( Ëv– ,  äame * äm , ušt8_t hdr , ušt16_t psm ); 239  ©t_dump ( Ëv– ,  äame * äm ); 240  smp_dump ( Ëv– ,  äame * äm ); 241  §p_dump ( Ëv– ,  äame * äm ); 243  obex_dump ( Ëv– ,  äame * äm ); 244  ÿpi_dump ( Ëv– ,  äame * äm ); 245  µp_dump ( Ëv– ,  äame * äm ); 246  ¬p_dump ( Ëv– ,  äame * äm ); 247  _dump ( Ëv– ,  äame * äm ); 248  ”icssÚ_dump ( Ëv– ,  äame * äm ); 249  c¤_dump ( Ëv– ,  äame * äm ); 250  b·_dump ( Ëv– ,  äame * äm ); 252  amp_assoc_dump ( Ëv– , ušt8_t * assoc , ušt16_t Ën ); 254  šlše  $·r£ ( äame * äm ) 256 `p_šd’t (-1, NULL ); 257 ià( ·r£r . æags & DUMP_RAW ) 258 `¿w_dump (0, äm ); 260 `hci_dump (0, äm ); 261 `fæush ( ¡dout ); 262 } } @tools/parser/ppp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~"·r£r.h " 36  #PPP_U8 ( äm è( `g‘_u8 (äm)) ) 37  #PPP_U16 ( äm è( `btohs ( `htÚs ( `g‘_u16 (äm)))) ) 38  #PPP_U32 ( äm è( `btohl ( `htÚl ( `g‘_u32 (äm)))) ) 40  gµp_Œaffic = 0; 42  gµp_magic1 [] = { 0x7e, 0xff, 0x03, 0xc0, 0x21 }; 43  gµp_magic2 [] = { 0x7e, 0xff, 0x7d, 0x23, 0xc0, 0x21 }; 44  gµp_magic3 [] = { 0x7e, 0x7d, 0xdf, 0x7d, 0x23, 0xc0, 0x21 }; 46  šlše  $check_fÜ_µp_Œaffic (* d©a ,  size ) 48  i ; 50  i = 0; i < size - ( µp_magic1 ); i++) 51 ià(! `memcmp ( d©a + i , µp_magic1 , (ppp_magic1))) { 52 µp_Œaffic = 1; 53  i ; 56  i = 0; i < size - ( µp_magic2 ); i++) 57 ià(! `memcmp ( d©a + i , µp_magic2 , (ppp_magic2))) { 58 µp_Œaffic = 1; 59  i ; 62  i = 0; i < size - ( µp_magic3 ); i++) 63 ià(! `memcmp ( d©a + i , µp_magic3 , (ppp_magic3))) { 64 µp_Œaffic = 1; 65  i ; 69 } } 71  šlše * $dœ2¡r ( ušt8_t š ) 73  š ? "DCE" : "DTE"; 74 } } 76  šlše * $´Ùo2¡r ( ušt16_t ´Ùo ) 78  ´Ùo ) { 98 } } 100  $hdlc_dump ( Ëv– ,  äame * äm ) 102 ušt8_t addr = `g‘_u8 ( äm ); 103 ušt8_t ù¾ = `g‘_u8 ( äm ); 104 ušt16_t fcs , ´Ùo ; 106 fcs = `g‘_uÇligÃd (( ušt16_t *è( äm -> ±r + frm-> Ën - 2)); 107 äm -> Ën -= 2; 109 `p_šd’t ( Ëv– , äm ); 111 ià( addr !ð0xfà|| ù¾ != 0x03) { 112 äm -> ±r -= 2; 113 äm -> Ën += 2; 114 `´štf ("HDLC: %s:†en %d fcs 0x%04x\n", 115 `dœ2¡r ( äm -> š ), frm-> Ën , fcs ); 117 `´štf ("HDLC: %s:‡ddr 0x%02x ctrl 0x%02x†en %d fcs 0x%04x\n", 118 `dœ2¡r ( äm -> š ), addr , ù¾ , frm-> Ën , fcs ); 120 ià(*(( ušt8_t *è äm -> ±r ) & 0x80) 121 ´Ùo = `g‘_u16 ( äm ); 123 ´Ùo = `g‘_u8 ( äm ); 125 `p_šd’t ( Ëv– + 1, äm ); 126 `´štf ("PPP: % (0x%04x):†’ %d\n", `´Ùo2¡r ( ´Ùo ),…rÙo, äm -> Ën ); 128 `¿w_dump ( Ëv– + 1, äm ); 129 } } 131  šlše  $un¦_äame ( Ëv– ,  äame * äm ,  Ën ) 133  äame msg ; 134 * d©a , * ±r ; 135  i , p = 0; 137 d©a = `m®loc ( Ën * 2); 138 ià(! d©a ) 141 ±r = äm ->ptr; 143  i = 0; i < Ën ; i++) { 144 ià( ±r [ i ] == 0x7d) { 145 d©a [ p ++] = ±r [ i + 1] ^ 0x20; 146 i ++; 148 d©a [ p ++] = ±r [ i ]; 151 `mem£t (& msg , 0, (msg)); 152 msg . d©a = data; 153 msg . d©a_Ën = Ën * 2; 154 msg . ±r = msg. d©a ; 155 msg . Ën = p ; 156 msg . š = äm ->in; 157 msg . ts = äm ->ts; 158 msg . hªdË = äm ->handle; 159 msg . cid = äm ->cid; 161 `hdlc_dump ( Ëv– , & msg ); 163 `ä“ ( d©a ); 164 } } 166  $µp_dump ( Ëv– ,  äame * äm ) 168 * ±r , * ’d ; 169  ”r , Ën , pos = 0; 171 ià( äm -> µpdump_fd > `fž’o ( ¡d”r )) { 172  id ; 173 ušt16_t Ën = `htÚs ( äm ->len); 174 ušt32_t ts = `htÚl ( äm ->ts. tv_£c & 0xffffffff); 176 id = 0x07; 177 ”r = `wr™e ( äm -> µpdump_fd , & id , 1); 178 ià( ”r < 0) 181 ”r = `wr™e ( äm -> µpdump_fd , & ts , 4); 182 ià( ”r < 0) 185 id = äm -> š ? 0x02 : 0x01; 186 ”r = `wr™e ( äm -> µpdump_fd , & id , 1); 187 ià( ”r < 0) 189 ”r = `wr™e ( äm -> µpdump_fd , & Ën , 2); 190 ià( ”r < 0) 192 ”r = `wr™e ( äm -> µpdump_fd , frm-> ±r , frm-> Ën ); 193 ià( ”r < 0) 197 ià(! µp_Œaffic ) { 198 pos = `check_fÜ_µp_Œaffic ( äm -> ±r , frm-> Ën ); 199 ià( pos < 0) { 200 `¿w_dump ( Ëv– , äm ); 204 ià( pos > 0) { 205 `¿w_ndump ( Ëv– , äm , pos ); 206 äm -> ±r +ð pos ; 207 äm -> Ën -ð pos ; 211 äm = `add_äame (frm); 213  äm -> Ën > 0) { 214 ±r = `memchr ( äm ->±r, 0x7e, frm-> Ën ); 215 ià(! ±r ) 218 ià( äm -> ±r !=…tr) { 219 äm -> Ën -ð( ±r - frm->ptr); 220 äm -> ±r =…tr; 223 ’d = `memchr ( äm -> ±r + 1, 0x7e, frm-> Ën - 1); 224 ià(! ’d ) 227 Ën = ’d - ±r - 1; 229 äm -> ±r ++; 230 äm -> Ën --; 232 ià( Ën > 0) { 233 `un¦_äame ( Ëv– , äm , Ën ); 235 äm -> ±r +ð Ën ; 236 äm -> Ën -=†en; 239 } } @tools/parser/rfcomm.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 35  ~"·r£r.h " 36  ~"rfcomm.h " 37  ~"sdp.h " 39 * gü_¡r [] = { 44  #CR_STR ( mcc_h—d è ü_¡r [mcc_h—d-> ty³ . ü ] ) 45  #GET_DLCI ( addr è(×ddr. £rv”_chn << 1è| (addr. d & 1)) ) 47  $´št_rfcomm_hdr ( lÚg_äame_h—d * h—d , ušt8_t * ±r ,  Ën ) 49 add»ss_f›ld addr = h—d ->addr; 50 ušt8_t ùr = h—d -> cÚŒÞ ; 51 ušt16_t ž’ = h—d -> Ëngth . b™s . Ën ; 52 ušt8_t pf , dlci , fcs ; 54 dlci = `GET_DLCI ( addr ); 55 pf = `GET_PF ( ùr ); 56 fcs = *( ±r + Ën - 1); 58 `´štf ("ü %d dlc˜%d…à%d iËÀ%d fc 0x%x ", addr . ü , dlci , pf , ž’ , fcs ); 59 } } 61  $´št_mcc ( mcc_lÚg_äame_h—d * mcc_h—d ) 63 `´štf ("mcc_ËÀ%d\n", mcc_h—d -> Ëngth . b™s . Ën ); 64 } } 66  šlše  $mcc_‹¡ ( Ëv– , ušt8_t * ±r ,  Ën , 67 lÚg_äame_h—d * h—d , mcc_lÚg_äame_h—d * mcc_h—d ) 69 `´štf ("TEST %s: ", `CR_STR ( mcc_h—d )); 70 `´št_rfcomm_hdr ( h—d , ±r , Ën ); 71 `´št_mcc ( mcc_h—d ); 73 `p_šd’t ( Ëv– , 0); 74 `´štf ("%*cTe¡ d©a: 0x ", Ëv– , ' '); 76  Ën > 1) { 77 `´štf ("%2.2x ", ( ušt8_t )* ±r ); 78 Ën --; 79 ±r ++; 82 `´štf ("\n"); 83 } } 84  šlše  $mcc_fcÚ ( Ëv– , ušt8_t * ±r ,  Ën , 85 lÚg_äame_h—d * h—d , mcc_lÚg_äame_h—d * mcc_h—d ) 87 `´štf ("FCON %s: ", `CR_STR ( mcc_h—d )); 88 `´št_rfcomm_hdr ( h—d , ±r , Ën ); 89 `´št_mcc ( mcc_h—d ); 90 } } 92  šlše  $mcc_fcoff ( Ëv– , ušt8_t * ±r ,  Ën , 93 lÚg_äame_h—d * h—d , mcc_lÚg_äame_h—d * mcc_h—d ) 95 `´štf ("FCOFF %s: ", `CR_STR ( mcc_h—d )); 96 `´št_rfcomm_hdr ( h—d , ±r , Ën ); 97 `´št_mcc ( mcc_h—d ); 98 } } 100  šlše  $mcc_msc ( Ëv– , ušt8_t * ±r ,  Ën , 101 lÚg_äame_h—d * h—d , mcc_lÚg_äame_h—d * mcc_h—d ) 103 msc_msg * msc = (*è( ±r - `STRUCT_END (msc_msg, mcc_s_h—d )); 105 `´štf ("MSC %s: ", `CR_STR ( mcc_h—d )); 106 `´št_rfcomm_hdr ( h—d , ±r , Ën ); 107 `´št_mcc ( mcc_h—d ); 108 `p_šd’t ( Ëv– , 0); 109 `´štf ("dlci %d fc %d„tc %d„tr %d ic %d dv %d", 110 `GET_DLCI ( msc -> dlci ), msc-> v24_sigs . fc , msc->v24_sigs. ¹c , 111 msc -> v24_sigs . ¹r , msc->v24_sigs. ic , msc->v24_sigs. dv ); 114 ià( Ën > `STRUCT_OFFSET ( msc_msg , fcs è- `STRUCT_END (msc_msg, v24_sigs )) { 115 b»ak_sigÇls * brk = (break_signals *) 116 ( ±r + `STRUCT_END ( msc_msg , v24_sigs )); 117 `´štf (" b1 %d b2 %d b3 %d†en %d\n", 118 brk -> b1 , brk-> b2 , brk-> b3 , brk-> Ën ); 120 `´štf ("\n"); 121 } } 123  šlše  $mcc_½n ( Ëv– , ušt8_t * ±r ,  Ën , 124 lÚg_äame_h—d * h—d , mcc_lÚg_äame_h—d * mcc_h—d ) 126 ½n_msg * ½n = (*è( ±r - `STRUCT_END Ô²_msg, mcc_s_h—d )); 128 `´štf ("RPN %s: ", `CR_STR ( mcc_h—d )); 129 `´št_rfcomm_hdr ( h—d , ±r , Ën ); 130 `´št_mcc ( mcc_h—d ); 132 `p_šd’t ( Ëv– , 0); 133 `´štf ("dlc˜%d ", `GET_DLCI ( ½n -> dlci )); 136 ià( Ën <ð `STRUCT_OFFSET ( ½n_msg , ½n_v® è- `STRUCT_END Ô²_msg, mcc_s_h—d )) { 137 `´štf ("\n"); 141 `´štf ("br %d db %d sb %d… %d…t %d xi %d xo %d\n", 142 ½n -> ½n_v® . b™_¿‹ ,„²->½n_v®. d©a_b™s , 143 ½n -> ½n_v® . ¡Ý_b™ ,„²->½n_v®. ·r™y , 144 ½n -> ½n_v® . ·r™y_ty³ ,„²->½n_v®. xÚ_šput , 145 ½n -> ½n_v® . xÚ_ouut ); 147 `p_šd’t ( Ëv– , 0); 148 `´štf ("rtri %d„tro %d„tci %d„tco %d xon %d xoff %d…m 0x%04x\n", 149 ½n -> ½n_v® . ¹r_šput ,„²->½n_v®. ¹r_ouut , 150 ½n -> ½n_v® . ¹c_šput ,„²->½n_v®. ¹c_ouut , 151 ½n -> ½n_v® . xÚ ,„²->½n_v®. xoff , `btohs Ô²->½n_v®. pm )); 152 } } 154  šlše  $mcc_¾s ( Ëv– , ušt8_t * ±r ,  Ën , 155 lÚg_äame_h—d * h—d , mcc_lÚg_äame_h—d * mcc_h—d ) 157 ¾s_msg * ¾s = (*è( ±r - `STRUCT_END Ôls_msg, mcc_s_h—d )); 159 `´štf ("RLS %s: ", `CR_STR ( mcc_h—d )); 160 `´št_rfcomm_hdr ( h—d , ±r , Ën ); 161 `´št_mcc ( mcc_h—d ); 162 `´štf ("dlc˜%dƒ¼Ü: %d", `GET_DLCI ( ¾s -> dlci ),„ls-> ”rÜ ); 163 } } 165  šlše  $mcc_² ( Ëv– , ušt8_t * ±r ,  Ën , 166 lÚg_äame_h—d * h—d , mcc_lÚg_äame_h—d * mcc_h—d ) 168 ²_msg * ² = (*è( ±r - `STRUCT_END Õn_msg, mcc_s_h—d )); 170 `´štf ("PN %s: ", `CR_STR ( mcc_h—d )); 171 `´št_rfcomm_hdr ( h—d , ±r , Ën ); 172 `´št_mcc ( mcc_h—d ); 174 `p_šd’t ( Ëv– , 0); 175 `´štf ("dlci %d frame_type %d credit_flow %d…ri %d‡ck_timer %d\n", 176 ² -> dlci ,…n-> äame_ty³ ,…n-> üed™_æow ,…n-> ´iÜ ,…n-> ack_tim” ); 177 `p_šd’t ( Ëv– , 0); 178 `´štf ("frame_size %d max_retrans %d credits %d\n", 179 `btohs ( ² -> äame_size ),…n-> max_nbrof_»Œªs ,…n-> üed™s ); 180 } } 182  šlše  $mcc_nsc ( Ëv– , ušt8_t * ±r ,  Ën , 183 lÚg_äame_h—d * h—d , mcc_lÚg_äame_h—d * mcc_h—d ) 186 nsc_msg * nsc = (*è( ±r - `STRUCT_END Òsc_msg, mcc_s_h—d )); 188 `´štf ("NSC %s: ", `CR_STR ( mcc_h—d )); 189 `´št_rfcomm_hdr ( h—d , ±r , Ën ); 190 `´št_mcc ( mcc_h—d ); 192 `p_šd’t ( Ëv– , 0); 193 `´štf ("cr %d, mcc_cmd_type %x\n", 194 nsc -> commªd_ty³ . ü ,‚sc->commªd_ty³. ty³ ); 195 } } 197  šlše  $mcc_äame ( Ëv– ,  äame * äm , lÚg_äame_h—d * h—d ) 199 mcc_shÜt_äame_h—d * mcc_shÜt_h—d_p = äm -> ±r ; 200 mcc_lÚg_äame_h—d mcc_h—d ; 201 ušt8_t hdr_size ; 203 iàÐ mcc_shÜt_h—d_p -> Ëngth . — =ð EA ) { 204 mcc_h—d . ty³ = mcc_shÜt_h—d_p ->type; 205 mcc_h—d . Ëngth . b™s . Ën = mcc_shÜt_h—d_p ->length.len; 206 hdr_size = ( mcc_shÜt_äame_h—d ); 208 mcc_h—d = *( mcc_lÚg_äame_h—d *) äm -> ±r ; 209 mcc_h—d . Ëngth . v® = `btohs (mcc_head.length.val); 210 hdr_size = ( mcc_lÚg_äame_h—d ); 213 äm -> ±r +ð hdr_size ; 214 äm -> Ën -ð hdr_size ; 216 `p_šd’t ( Ëv– , äm ); 217 `´štf ("RFCOMM(s): "); 219  mcc_h—d . ty³ .type) { 220  TEST : 221 `mcc_‹¡ ( Ëv– , äm -> ±r , frm-> Ën , h—d , & mcc_h—d ); 223  FCON : 224 `mcc_fcÚ ( Ëv– , äm -> ±r , frm-> Ën , h—d , & mcc_h—d ); 226  FCOFF : 227 `mcc_fcoff ( Ëv– , äm -> ±r , frm-> Ën , h—d , & mcc_h—d ); 229  MSC : 230 `mcc_msc ( Ëv– , äm -> ±r , frm-> Ën , h—d , & mcc_h—d ); 232  RPN : 233 `mcc_½n ( Ëv– , äm -> ±r , frm-> Ën , h—d , & mcc_h—d ); 235  RLS : 236 `mcc_¾s ( Ëv– , äm -> ±r , frm-> Ën , h—d , & mcc_h—d ); 238  PN : 239 `mcc_² ( Ëv– , äm -> ±r , frm-> Ën , h—d , & mcc_h—d ); 241  NSC : 242 `mcc_nsc ( Ëv– , äm -> ±r , frm-> Ën , h—d , & mcc_h—d ); 245 `´štf ("MCC mes§gty³ 0x%02x: ", mcc_h—d . ty³ .type); 246 `´št_rfcomm_hdr ( h—d , äm -> ±r , frm-> Ën ); 247 `´štf ("\n"); 249 äm -> Ën --; 250 `¿w_dump ( Ëv– , äm ); 252 } } 254  šlše  $uih_äame ( Ëv– ,  äame * äm , lÚg_äame_h—d * h—d ) 256 ušt32_t ´Ùo ; 258 ià(! h—d -> addr . £rv”_chn ) { 259 `mcc_äame ( Ëv– , äm , h—d ); 261 `p_šd’t ( Ëv– , äm ); 262 `´štf ("RFCOMM(d): UIH: "); 263 `´št_rfcomm_hdr ( h—d , äm -> ±r , frm-> Ën ); 264 ià( `GET_PF ( h—d -> cÚŒÞ )) { 265 `´štf ("üed™ %d\n", *( ušt8_t *)( äm -> ±r )); 266 äm -> ±r ++; 267 äm -> Ën --; 269 `´štf ("\n"); 271 äm -> Ën --; 272 äm -> dlci = `GET_DLCI ( h—d -> addr ); 273 äm -> chªÃl = h—d -> addr . £rv”_chn ; 275 ´Ùo = `g‘_´Ùo ( äm -> hªdË , RFCOMM_PSM , frm-> chªÃl ); 277 ià( äm -> Ën > 0) { 278  ´Ùo ) { 279  SDP_UUID_OBEX : 280 ià(! `p_fž‹r ( FILT_OBEX )) 281 `obex_dump ( Ëv– + 1, äm ); 283 `¿w_dump ( Ëv– , äm ); 286  SDP_UUID_LAN_ACCESS_PPP : 287  SDP_UUID_DIALUP_NETWORKING : 288 ià(! `p_fž‹r ( FILT_PPP )) 289 `µp_dump ( Ëv– + 1, äm ); 291 `¿w_dump ( Ëv– , äm ); 294  SDP_UUID_SIM_ACCESS : 295 ià(! `p_fž‹r ( FILT_SAP )) 296 `§p_dump ( Ëv– + 1, äm ); 298 `¿w_dump ( Ëv– , äm ); 302 ià( `p_fž‹r ( FILT_RFCOMM )) 305 `¿w_dump ( Ëv– , äm ); 310 } } 312  $rfcomm_dump ( Ëv– ,  äame * äm ) 314 ušt8_t hdr_size , ùr_ty³ ; 315 shÜt_äame_h—d * shÜt_h—d_p = (*è äm -> ±r ; 316 lÚg_äame_h—d h—d ; 318 ià( shÜt_h—d_p -> Ëngth . — =ð EA ) { 319 h—d . addr = shÜt_h—d_p ->addr; 320 h—d . cÚŒÞ = shÜt_h—d_p ->control; 321 h—d . Ëngth . b™s . Ën = shÜt_h—d_p ->length.len; 322 hdr_size = ( shÜt_äame_h—d ); 324 h—d = *( lÚg_äame_h—d *è äm -> ±r ; 325 h—d . Ëngth . v® = `btohs (head.length.val); 326 hdr_size = ( lÚg_äame_h—d ); 329 äm -> ±r +ð hdr_size ; 330 äm -> Ën -ð hdr_size ; 332 ùr_ty³ = `CLR_PF ( h—d . cÚŒÞ ); 334 ià( ùr_ty³ =ð UIH ) { 335 `uih_äame ( Ëv– , äm , & h—d ); 337 `p_šd’t ( Ëv– , äm ); 338 `´štf ("RFCOMM(s): "); 340  ùr_ty³ ) { 341  SABM : 342 `´štf ("SABM: "); 344  UA : 345 `´štf ("UA: "); 347  DM : 348 `´štf ("DM: "); 350  DISC : 351 `´štf ("DISC: "); 352 `d–_äame ( äm -> hªdË , `GET_DLCI ( h—d . addr )); 355 `´štf ("ERR: "); 357 `´št_rfcomm_hdr (& h—d , äm -> ±r , frm-> Ën ); 358 `´štf ("\n"); 360 } } @tools/parser/rfcomm.h 25 #iâdeà __RFCOMM_H 26  #__RFCOMM_H ) 28  ~<’dŸn.h > 30  #RFCOMM_PSM 3 ) 32  #TRUE 1 ) 33  #FALSE 0 ) 35  #RFCOMM_MAX_CONN 10 ) 36  #BT_NBR_DATAPORTS RFCOMM_MAX_CONN ) 38  #GET_BIT ( pos , b™f›ld è((b™f›ld[Õos)/32]è& (1 << (Õosè% 32))) ) 39  #SET_BIT ( pos , b™f›ld è((b™f›ld[Õos)/32]è|ð(1 << (Õosè% 32))) ) 40  #CLR_BIT ( pos , b™f›ld è((b™f›ld[Õos)/32]è&ð((1 << (Õosè% 32)è^ (~0))) ) 43  #SET_PF ( ùr è((ùrè| (1 << 4)) ) 45  #CLR_PF ( ùr è((ùrè& 0xef) ) 47  #GET_PF ( ùr è(((ùrè>> 4è& 0x1) ) 49  #MIN ( a , b è((×è< (b)è? (aè: (b)) ) 52  #sw­_lÚg_äame ( x è((x)-> h . Ëngth . v® = `Ë16_to_ýu ((x)->h.Ëngth.v®)) ) 53  #sw­_mcc_lÚg_äame ( x è( `sw­_lÚg_äame (x)) ) 56  #SHORT_CRC_CHECK 2 ) 58  #LONG_CRC_CHECK 3 ) 60  #SHORT_HDR 2 ) 62  #LONG_HDR 3 ) 65  #SHORT_PAYLOAD_SIZE 127 ) 67  #EA 1 ) 69  #FCS_SIZE 1 ) 71  #RFCOMM_MAX_HDR_SIZE 5 ) 73  #MAX_CREDITS 30 ) 74  #START_CREDITS 7 ) 75  #MIN_CREDITS 6 ) 77  #DEF_RFCOMM_MTU 127 ) 80  #SABM 0x2à ) 81  #UA 0x63 ) 82  #DM 0x0à ) 83  #DISC 0x43 ) 84  #UIH 0xeà ) 85  #UI 0x03 ) 87  #SABM_SIZE 4 ) 88  #UA_SIZE 4 ) 91  #PN (0x80 >> 2è ) 92  #PSC (0x40 >> 2è ) 93  #CLD (0xc0 >> 2è ) 94  #TEST (0x20 >> 2è ) 95  #FCON (0xa0 >> 2è ) 96  #FCOFF (0x60 >> 2è ) 97  #MSC (0xe0 >> 2è ) 98  #NSC (0x10 >> 2è ) 99  #RPN (0x90 >> 2è ) 100  #RLS (0x50 >> 2è ) 101  #SNC (0xd0 >> 2è ) 104  #DV 0x80 ) 105  #IC 0x40 ) 106  #RTR 0x08 ) 107  #RTC 0x04 ) 108  #FC 0x02 ) 110  #CTRL_CHAN 0 ) 111  #MCC_CMD 1 ) 112  #MCC_RSP 0 ) 114 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 116  s·¿m‘”_mask { 117 ušt8_t mb™_¿‹ :1; 118 ušt8_t md©a_b™s :1; 119 ušt8_t m¡Ý_b™ :1; 120 ušt8_t m·r™y :1; 121 ušt8_t m·r™y_ty³ :1; 122 ušt8_t mxÚ :1; 123 ušt8_t mxoff :1; 124 ušt8_t m»s1 :1; 125 ušt8_t mxÚ_šput :1; 126 ušt8_t mxÚ_ouut :1; 127 ušt8_t m¹r_šput :1; 128 ušt8_t m¹r_ouut :1; 129 ušt8_t m¹c_šput :1; 130 ušt8_t m¹c_ouut :1; 131 ušt8_t m»s2 :2; 132 } t__©Œibu‹__ (( t·cked )è t·¿m‘”_mask ; 134  s½n_v®ues { 135 ušt8_t mb™_¿‹ ; 136 ušt8_t md©a_b™s :2; 137 ušt8_t m¡Ý_b™ :1; 138 ušt8_t m·r™y :1; 139 ušt8_t m·r™y_ty³ :2; 140 ušt8_t m»s1 :2; 141 ušt8_t mxÚ_šput :1; 142 ušt8_t mxÚ_ouut :1; 143 ušt8_t m¹r_šput :1; 144 ušt8_t m¹r_ouut :1; 145 ušt8_t m¹c_šput :1; 146 ušt8_t m¹c_ouut :1; 147 ušt8_t m»s2 :2; 148 ušt8_t mxÚ ; 149 ušt8_t mxoff ; 150 ušt16_t mpm ; 152 } t__©Œibu‹__ (( t·cked )è t½n_v®ues ; 154 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 156  s·¿m‘”_mask { 157 ušt8_t m»s1 :1; 158 ušt8_t mxoff :1; 159 ušt8_t mxÚ :1; 160 ušt8_t m·r™y_ty³ :1; 161 ušt8_t m·r™y :1; 162 ušt8_t m¡Ý_b™ :1; 163 ušt8_t md©a_b™s :1; 164 ušt8_t mb™_¿‹ :1; 165 ušt8_t m»s2 :2; 166 ušt8_t m¹c_ouut :1; 167 ušt8_t m¹c_šput :1; 168 ušt8_t m¹r_ouut :1; 169 ušt8_t m¹r_šput :1; 170 ušt8_t mxÚ_ouut :1; 171 ušt8_t mxÚ_šput :1; 173 } t__©Œibu‹__ (( t·cked )è t·¿m‘”_mask ; 175  s½n_v®ues { 176 ušt8_t mb™_¿‹ ; 177 ušt8_t m»s1 :2; 178 ušt8_t m·r™y_ty³ :2; 179 ušt8_t m·r™y :1; 180 ušt8_t m¡Ý_b™ :1; 181 ušt8_t md©a_b™s :2; 182 ušt8_t m»s2 :2; 183 ušt8_t m¹c_ouut :1; 184 ušt8_t m¹c_šput :1; 185 ušt8_t m¹r_ouut :1; 186 ušt8_t m¹r_šput :1; 187 ušt8_t mxÚ_ouut :1; 188 ušt8_t mxÚ_šput :1; 189 ušt8_t mxÚ ; 190 ušt8_t mxoff ; 191 ušt16_t mpm ; 193 } t__©Œibu‹__ (( t·cked )è t½n_v®ues ; 203 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 205  sadd»ss_f›ld { 206 ušt8_t m— :1; 207 ušt8_t mü :1; 208 ušt8_t md :1; 209 ušt8_t m£rv”_chn :5; 210 } t__©Œibu‹__ (( t·cked )è tadd»ss_f›ld ; 212  sshÜt_Ëngth { 213 ušt8_t m— :1; 214 ušt8_t mËn :7; 215 } t__©Œibu‹__ (( t·cked )è tshÜt_Ëngth ; 217  ulÚg_Ëngth { 218  sb™s { 219 ušt8_t m— :1; 220  mËn :15; 221 } __©Œibu‹__ (( ·cked )è mb™s ; 222 ušt16_t mv® ; 223 } t__©Œibu‹__ (( t·cked )è tlÚg_Ëngth ; 225  sshÜt_äame_h—d { 226 add»ss_f›ld maddr ; 227 ušt8_t mcÚŒÞ ; 228 shÜt_Ëngth mËngth ; 229 } t__©Œibu‹__ (( t·cked )è tshÜt_äame_h—d ; 231  sshÜt_äame { 232 shÜt_äame_h—d mh ; 233 ušt8_t md©a [0]; 234 } t__©Œibu‹__ (( t·cked )è tshÜt_äame ; 236  slÚg_äame_h—d { 237 add»ss_f›ld maddr ; 238 ušt8_t mcÚŒÞ ; 239 lÚg_Ëngth mËngth ; 240 ušt8_t md©a [0]; 241 } t__©Œibu‹__ (( t·cked )è tlÚg_äame_h—d ; 243  slÚg_äame { 244 lÚg_äame_h—d mh ; 245 ušt8_t md©a [0]; 246 } t__©Œibu‹__ (( t·cked )è tlÚg_äame ; 249  smcc_ty³ { 250 ušt8_t m— :1; 251 ušt8_t mü :1; 252 ušt8_t mty³ :6; 253 } t__©Œibu‹__ (( t·cked )è tmcc_ty³ ; 255  smcc_shÜt_äame_h—d { 256 mcc_ty³ mty³ ; 257 shÜt_Ëngth mËngth ; 258 ušt8_t mv®ue [0]; 259 } t__©Œibu‹__ (( t·cked )è tmcc_shÜt_äame_h—d ; 261  smcc_shÜt_äame { 262 mcc_shÜt_äame_h—d mh ; 263 ušt8_t mv®ue [0]; 264 } t__©Œibu‹__ (( t·cked )è tmcc_shÜt_äame ; 266  smcc_lÚg_äame_h—d { 267 mcc_ty³ mty³ ; 268 lÚg_Ëngth mËngth ; 269 ušt8_t mv®ue [0]; 270 } t__©Œibu‹__ (( t·cked )è tmcc_lÚg_äame_h—d ; 272  smcc_lÚg_äame { 273 mcc_lÚg_äame_h—d mh ; 274 ušt8_t mv®ue [0]; 275 } t__©Œibu‹__ (( t·cked )è tmcc_lÚg_äame ; 278  sv24_sigÇls { 279 ušt8_t m— :1; 280 ušt8_t mfc :1; 281 ušt8_t m¹c :1; 282 ušt8_t m¹r :1; 283 ušt8_t m»£rved :2; 284 ušt8_t mic :1; 285 ušt8_t mdv :1; 286 } t__©Œibu‹__ (( t·cked )è tv24_sigÇls ; 288  sb»ak_sigÇls { 289 ušt8_t m— :1; 290 ušt8_t mb1 :1; 291 ušt8_t mb2 :1; 292 ušt8_t mb3 :1; 293 ušt8_t mËn :4; 294 } t__©Œibu‹__ (( t·cked )è tb»ak_sigÇls ; 296  smsc_msg { 297 shÜt_äame_h—d ms_h—d ; 298 mcc_shÜt_äame_h—d mmcc_s_h—d ; 299 add»ss_f›ld mdlci ; 300 v24_sigÇls mv24_sigs ; 302 ušt8_t mfcs ; 303 } t__©Œibu‹__ (( t·cked )è tmsc_msg ; 305  s½n_msg { 306 shÜt_äame_h—d ms_h—d ; 307 mcc_shÜt_äame_h—d mmcc_s_h—d ; 308 add»ss_f›ld mdlci ; 309 ½n_v®ues m½n_v® ; 310 ušt8_t mfcs ; 311 } t__©Œibu‹__ (( t·cked )è t½n_msg ; 314  s¾s_msg { 315 shÜt_äame_h—d ms_h—d ; 316 mcc_shÜt_äame_h—d mmcc_s_h—d ; 317 add»ss_f›ld mdlci ; 318 ušt8_t m”rÜ :4; 319 ušt8_t m»s :4; 320 ušt8_t mfcs ; 321 } t__©Œibu‹__ (( t·cked )è t¾s_msg ; 324  s²_msg { 325 shÜt_äame_h—d ms_h—d ; 326 mcc_shÜt_äame_h—d mmcc_s_h—d ; 328 ušt8_t mdlci :6; 329 ušt8_t m»s1 :2; 330 ušt8_t mäame_ty³ :4; 331 ušt8_t müed™_æow :4; 332 ušt8_t m´iÜ :6; 333 ušt8_t m»s2 :2; 334 ušt8_t mack_tim” ; 335 ušt16_t mäame_size :16; 336 ušt8_t mmax_nbrof_»Œªs ; 337 ušt8_t müed™s ; 338 ušt8_t mfcs ; 339 } t__©Œibu‹__ (( t·cked )è t²_msg ; 342  snsc_msg { 343 shÜt_äame_h—d ms_h—d ; 344 mcc_shÜt_äame_h—d mmcc_s_h—d ; 345 mcc_ty³ mcommªd_ty³ ; 346 ušt8_t mfcs ; 347 } t__©Œibu‹__ (( t·cked )è tnsc_msg ; 349 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 351  sadd»ss_f›ld { 352 ušt8_t m£rv”_chn :5; 353 ušt8_t md :1; 354 ušt8_t mü :1; 355 ušt8_t m— :1; 356 } t__©Œibu‹__ (( t·cked )è tadd»ss_f›ld ; 358  sshÜt_Ëngth { 359 ušt8_t mËn :7; 360 ušt8_t m— :1; 361 } t__©Œibu‹__ (( t·cked )è tshÜt_Ëngth ; 363  ulÚg_Ëngth { 364  sb™s { 365  mËn :15; 366 ušt8_t m— :1; 367 } __©Œibu‹__ (( ·cked )è mb™s ; 368 ušt16_t mv® ; 369 } t__©Œibu‹__ (( t·cked )è tlÚg_Ëngth ; 371  sshÜt_äame_h—d { 372 add»ss_f›ld maddr ; 373 ušt8_t mcÚŒÞ ; 374 shÜt_Ëngth mËngth ; 375 } t__©Œibu‹__ (( t·cked )è tshÜt_äame_h—d ; 377  sshÜt_äame { 378 shÜt_äame_h—d mh ; 379 ušt8_t md©a [0]; 380 } t__©Œibu‹__ (( t·cked )è tshÜt_äame ; 382  slÚg_äame_h—d { 383 add»ss_f›ld maddr ; 384 ušt8_t mcÚŒÞ ; 385 lÚg_Ëngth mËngth ; 386 ušt8_t md©a [0]; 387 } t__©Œibu‹__ (( t·cked )è tlÚg_äame_h—d ; 389  slÚg_äame { 390 lÚg_äame_h—d mh ; 391 ušt8_t md©a [0]; 392 } t__©Œibu‹__ (( t·cked )è tlÚg_äame ; 394  smcc_ty³ { 395 ušt8_t mty³ :6; 396 ušt8_t mü :1; 397 ušt8_t m— :1; 398 } t__©Œibu‹__ (( t·cked )è tmcc_ty³ ; 400  smcc_shÜt_äame_h—d { 401 mcc_ty³ mty³ ; 402 shÜt_Ëngth mËngth ; 403 ušt8_t mv®ue [0]; 404 } t__©Œibu‹__ (( t·cked )è tmcc_shÜt_äame_h—d ; 406  smcc_shÜt_äame { 407 mcc_shÜt_äame_h—d mh ; 408 ušt8_t mv®ue [0]; 409 } t__©Œibu‹__ (( t·cked )è tmcc_shÜt_äame ; 411  smcc_lÚg_äame_h—d { 412 mcc_ty³ mty³ ; 413 lÚg_Ëngth mËngth ; 414 ušt8_t mv®ue [0]; 415 } t__©Œibu‹__ (( t·cked )è tmcc_lÚg_äame_h—d ; 417  smcc_lÚg_äame { 418 mcc_lÚg_äame_h—d mh ; 419 ušt8_t mv®ue [0]; 420 } t__©Œibu‹__ (( t·cked )è tmcc_lÚg_äame ; 422  sv24_sigÇls { 423 ušt8_t mdv :1; 424 ušt8_t mic :1; 425 ušt8_t m»£rved :2; 426 ušt8_t m¹r :1; 427 ušt8_t m¹c :1; 428 ušt8_t mfc :1; 429 ušt8_t m— :1; 430 } t__©Œibu‹__ (( t·cked )è tv24_sigÇls ; 432  sb»ak_sigÇls { 433 ušt8_t mËn :4; 434 ušt8_t mb3 :1; 435 ušt8_t mb2 :1; 436 ušt8_t mb1 :1; 437 ušt8_t m— :1; 438 } t__©Œibu‹__ (( t·cked )è tb»ak_sigÇls ; 440  smsc_msg { 441 shÜt_äame_h—d ms_h—d ; 442 mcc_shÜt_äame_h—d mmcc_s_h—d ; 443 add»ss_f›ld mdlci ; 444 v24_sigÇls mv24_sigs ; 446 ušt8_t mfcs ; 447 } t__©Œibu‹__ (( t·cked )è tmsc_msg ; 449  s½n_msg { 450 shÜt_äame_h—d ms_h—d ; 451 mcc_shÜt_äame_h—d mmcc_s_h—d ; 452 add»ss_f›ld mdlci ; 453 ½n_v®ues m½n_v® ; 454 ušt8_t mfcs ; 455 } t__©Œibu‹__ (( t·cked )è t½n_msg ; 457  s¾s_msg { 458 shÜt_äame_h—d ms_h—d ; 459 mcc_shÜt_äame_h—d mmcc_s_h—d ; 460 add»ss_f›ld mdlci ; 461 ušt8_t m»s :4; 462 ušt8_t m”rÜ :4; 463 ušt8_t mfcs ; 464 } t__©Œibu‹__ (( t·cked )è t¾s_msg ; 466  s²_msg { 467 shÜt_äame_h—d ms_h—d ; 468 mcc_shÜt_äame_h—d mmcc_s_h—d ; 469 ušt8_t m»s1 :2; 470 ušt8_t mdlci :6; 471 ušt8_t müed™_æow :4; 472 ušt8_t mäame_ty³ :4; 473 ušt8_t m»s2 :2; 474 ušt8_t m´iÜ :6; 475 ušt8_t mack_tim” ; 476 ušt16_t mäame_size :16; 477 ušt8_t mmax_nbrof_»Œªs ; 478 ušt8_t müed™s ; 479 ušt8_t mfcs ; 480 } t__©Œibu‹__ (( t·cked )è t²_msg ; 482  snsc_msg { 483 shÜt_äame_h—d ms_h—d ; 484 mcc_shÜt_äame_h—d mmcc_s_h—d ; 485 mcc_ty³ mcommªd_ty³ ; 486 ušt8_t mfcs ; 487 } t__©Œibu‹__ (( t·cked )è tnsc_msg ; 491 #”rÜ ProûssÜ ’dŸÂess unknown ! @tools/parser/sap.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~"·r£r.h " 36  #PADDING4 ( x è((4 - ((xè& 0x03)è& 0x03) ) 38  #SAP_CONNECT_REQ 0x00 ) 39  #SAP_CONNECT_RESP 0x01 ) 40  #SAP_DISCONNECT_REQ 0x02 ) 41  #SAP_DISCONNECT_RESP 0x03 ) 42  #SAP_DISCONNECT_IND 0x04 ) 43  #SAP_TRANSFER_APDU_REQ 0x05 ) 44  #SAP_TRANSFER_APDU_RESP 0x06 ) 45  #SAP_TRANSFER_ATR_REQ 0x07 ) 46  #SAP_TRANSFER_ATR_RESP 0x08 ) 47  #SAP_POWER_SIM_OFF_REQ 0x09 ) 48  #SAP_POWER_SIM_OFF_RESP 0x0A ) 49  #SAP_POWER_SIM_ON_REQ 0x0B ) 50  #SAP_POWER_SIM_ON_RESP 0x0C ) 51  #SAP_RESET_SIM_REQ 0x0D ) 52  #SAP_RESET_SIM_RESP 0x0E ) 53  #SAP_TRANSFER_CARD_READER_STATUS_REQ 0x0F ) 54  #SAP_TRANSFER_CARD_READER_STATUS_RESP 0x10 ) 55  #SAP_STATUS_IND 0x11 ) 56  #SAP_ERROR_RESP 0x12 ) 57  #SAP_SET_TRANSPORT_PROTOCOL_REQ 0x13 ) 58  #SAP_SET_TRANSPORT_PROTOCOL_RESP 0x14 ) 60  #SAP_PARAM_ID_MAX_MSG_SIZE 0x00 ) 61  #SAP_PARAM_ID_CONN_STATUS 0x01 ) 62  #SAP_PARAM_ID_RESULT_CODE 0x02 ) 63  #SAP_PARAM_ID_DISCONNECT_IND 0x03 ) 64  #SAP_PARAM_ID_COMMAND_APDU 0x04 ) 65  #SAP_PARAM_ID_COMMAND_APDU7816 0x10 ) 66  #SAP_PARAM_ID_RESPONSE_APDU 0x05 ) 67  #SAP_PARAM_ID_ATR 0x06 ) 68  #SAP_PARAM_ID_CARD_READER_STATUS 0x07 ) 69  #SAP_PARAM_ID_STATUS_CHANGE 0x08 ) 70  #SAP_PARAM_ID_TRANSPORT_PROTOCOL 0x09 ) 72  #SAP_STATUS_OK 0x00 ) 73  #SAP_STATUS_CONNECTION_FAILED 0x01 ) 74  #SAP_STATUS_MAX_MSG_SIZE_NOT_SUPPORTED 0x02 ) 75  #SAP_STATUS_MAX_MSG_SIZE_TOO_SMALL 0x03 ) 76  #SAP_STATUS_OK_ONGOING_CALL 0x04 ) 78  #SAP_DISCONNECTION_TYPE_GRACEFUL 0x00 ) 79  #SAP_DISCONNECTION_TYPE_IMMEDIATE 0x01 ) 80  #SAP_DISCONNECTION_TYPE_CLIENT 0xFF ) 82  #SAP_RESULT_OK 0x00 ) 83  #SAP_RESULT_ERROR_NO_REASON 0x01 ) 84  #SAP_RESULT_ERROR_NOT_ACCESSIBLE 0x02 ) 85  #SAP_RESULT_ERROR_POWERED_OFF 0x03 ) 86  #SAP_RESULT_ERROR_CARD_REMOVED 0x04 ) 87  #SAP_RESULT_ERROR_POWERED_ON 0x05 ) 88  #SAP_RESULT_ERROR_NO_DATA 0x06 ) 89  #SAP_RESULT_NOT_SUPPORTED 0x07 ) 91  #SAP_STATUS_CHANGE_UNKNOWN_ERROR 0x00 ) 92  #SAP_STATUS_CHANGE_CARD_RESET 0x01 ) 93  #SAP_STATUS_CHANGE_CARD_NOT_ACCESSIBLE 0x02 ) 94  #SAP_STATUS_CHANGE_CARD_REMOVED 0x03 ) 95  #SAP_STATUS_CHANGE_CARD_INSERTED 0x04 ) 96  #SAP_STATUS_CHANGE_CARD_RECOVERED 0x05 ) 98  #SAP_TRANSPORT_PROTOCOL_T0 0x00 ) 99  #SAP_TRANSPORT_PROTOCOL_T1 0x01 ) 101 cÚ¡ * $msg2¡r ( ušt8_t msg ) 103  msg ) { 104  SAP_CONNECT_REQ : 106  SAP_CONNECT_RESP : 108  SAP_DISCONNECT_REQ : 110  SAP_DISCONNECT_RESP : 112  SAP_DISCONNECT_IND : 114  SAP_TRANSFER_APDU_REQ : 116  SAP_TRANSFER_APDU_RESP : 118  SAP_TRANSFER_ATR_REQ : 120  SAP_TRANSFER_ATR_RESP : 122  SAP_POWER_SIM_OFF_REQ : 124  SAP_POWER_SIM_OFF_RESP : 126  SAP_POWER_SIM_ON_REQ : 128  SAP_POWER_SIM_ON_RESP : 130  SAP_RESET_SIM_REQ : 132  SAP_RESET_SIM_RESP : 134  SAP_TRANSFER_CARD_READER_STATUS_REQ : 136  SAP_TRANSFER_CARD_READER_STATUS_RESP : 138  SAP_STATUS_IND : 140  SAP_ERROR_RESP : 142  SAP_SET_TRANSPORT_PROTOCOL_REQ : 144  SAP_SET_TRANSPORT_PROTOCOL_RESP : 149 } } 151 cÚ¡ * $·¿m2¡r ( ušt8_t ·¿m ) 153  ·¿m ) { 154  SAP_PARAM_ID_MAX_MSG_SIZE : 156  SAP_PARAM_ID_CONN_STATUS : 158  SAP_PARAM_ID_RESULT_CODE : 160  SAP_PARAM_ID_DISCONNECT_IND : 162  SAP_PARAM_ID_COMMAND_APDU : 164  SAP_PARAM_ID_COMMAND_APDU7816 : 166  SAP_PARAM_ID_RESPONSE_APDU : 168  SAP_PARAM_ID_ATR : 170  SAP_PARAM_ID_CARD_READER_STATUS : 172  SAP_PARAM_ID_STATUS_CHANGE : 174  SAP_PARAM_ID_TRANSPORT_PROTOCOL : 179 } } 181 cÚ¡ * $¡©us2¡r ( ušt8_t ¡©us ) 183  ¡©us ) { 184  SAP_STATUS_OK : 186  SAP_STATUS_CONNECTION_FAILED : 188  SAP_STATUS_MAX_MSG_SIZE_NOT_SUPPORTED : 190  SAP_STATUS_MAX_MSG_SIZE_TOO_SMALL : 192  SAP_STATUS_OK_ONGOING_CALL : 197 } } 199 cÚ¡ * $disùy³2¡r ( ušt8_t disùy³ ) 201  disùy³ ) { 202  SAP_DISCONNECTION_TYPE_GRACEFUL : 204  SAP_DISCONNECTION_TYPE_IMMEDIATE : 209 } } 211 cÚ¡ * $»suÉ2¡r ( ušt8_t »suÉ ) 213  »suÉ ) { 214  SAP_RESULT_OK : 216  SAP_RESULT_ERROR_NO_REASON : 218  SAP_RESULT_ERROR_NOT_ACCESSIBLE : 220  SAP_RESULT_ERROR_POWERED_OFF : 222  SAP_RESULT_ERROR_CARD_REMOVED : 224  SAP_RESULT_ERROR_POWERED_ON : 226  SAP_RESULT_ERROR_NO_DATA : 228  SAP_RESULT_NOT_SUPPORTED : 233 } } 235 cÚ¡ * $¡©uschg2¡r ( ušt8_t ¡©uschg ) 237  ¡©uschg ) { 238  SAP_STATUS_CHANGE_UNKNOWN_ERROR : 240  SAP_STATUS_CHANGE_CARD_RESET : 242  SAP_STATUS_CHANGE_CARD_NOT_ACCESSIBLE : 244  SAP_STATUS_CHANGE_CARD_REMOVED : 246  SAP_STATUS_CHANGE_CARD_INSERTED : 248  SAP_STATUS_CHANGE_CARD_RECOVERED : 253 } } 255 cÚ¡ * $´Ù2¡r ( ušt8_t ´Ù ) 257  ´Ù ) { 258  SAP_TRANSPORT_PROTOCOL_T0 : 260  SAP_TRANSPORT_PROTOCOL_T1 : 265 } } 267  $·r£_·¿m‘”s ( Ëv– ,  äame * äm ) 269 ušt8_t ·¿m ; 270 ušt16_t Ën ; 271 ušt8_t pv8 ; 273  äm -> Ën > 3) { 274 `p_šd’t ( Ëv– , äm ); 276 ·¿m = `g‘_u8 ( äm ); 277 `g‘_u8 ( äm ); 278 Ën = `g‘_u16 ( äm ); 280 `´štf ("% (0x%02xèËÀ%d = ", `·¿m2¡r ( ·¿m ),…¬am, Ën ); 282  ·¿m ) { 283  SAP_PARAM_ID_MAX_MSG_SIZE : 284 `´štf ("%d\n", `g‘_u16 ( äm )); 286  SAP_PARAM_ID_CONN_STATUS : 287 pv8 = `g‘_u8 ( äm ); 288 `´štf ("0x%02x (%s)\n", pv8 , `¡©us2¡r (pv8)); 290  SAP_PARAM_ID_RESULT_CODE : 291  SAP_PARAM_ID_CARD_READER_STATUS : 292 pv8 = `g‘_u8 ( äm ); 293 `´štf ("0x%02x (%s)\n", pv8 , `»suÉ2¡r (pv8)); 295  SAP_PARAM_ID_DISCONNECT_IND : 296 pv8 = `g‘_u8 ( äm ); 297 `´štf ("0x%02x (%s)\n", pv8 , `disùy³2¡r (pv8)); 299  SAP_PARAM_ID_STATUS_CHANGE : 300 pv8 = `g‘_u8 ( äm ); 301 `´štf ("0x%02x (%s)\n", pv8 , `¡©uschg2¡r (pv8)); 303  SAP_PARAM_ID_TRANSPORT_PROTOCOL : 304 pv8 = `g‘_u8 ( äm ); 305 `´štf ("0x%02x (%s)\n", pv8 , `´Ù2¡r (pv8)); 308 `´štf ("\n"); 309 `¿w_ndump ( Ëv– + 1, äm , Ën ); 310 äm -> ±r +ð Ën ; 311 äm -> Ën -=†en; 315 äm -> ±r +ð `PADDING4 ( Ën ); 316 äm -> Ën -ð `PADDING4 (len); 318 } } 320  $§p_dump ( Ëv– ,  äame * äm ) 322 ušt8_t msg , ·¿ms ; 324 msg = `g‘_u8 ( äm ); 325 ·¿ms = `g‘_u8 ( äm ); 328 `g‘_u16 ( äm ); 330 `p_šd’t ( Ëv– , äm ); 332 `´štf ("SAP: %s:…¬am %d\n", `msg2¡r ( msg ), ·¿ms ); 334 `·r£_·¿m‘”s ( Ëv– , äm ); 335 } } @tools/parser/sdp.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<ùy³.h > 32  ~ 33  ~<¡dlib.h > 34  ~<¡ršg.h > 36  ~"·r£r.h " 37  ~"sdp.h " 39  #SDP_ERROR_RSP 0x01 ) 40  #SDP_SERVICE_SEARCH_REQ 0x02 ) 41  #SDP_SERVICE_SEARCH_RSP 0x03 ) 42  #SDP_SERVICE_ATTR_REQ 0x04 ) 43  #SDP_SERVICE_ATTR_RSP 0x05 ) 44  #SDP_SERVICE_SEARCH_ATTR_REQ 0x06 ) 45  #SDP_SERVICE_SEARCH_ATTR_RSP 0x07 ) 48 ušt8_t mpid ; 49 ušt16_t mtid ; 50 ušt16_t mËn ; 51 } t__©Œibu‹__ (( t·cked )è tsdp_pdu_hdr ; 52  #SDP_PDU_HDR_SIZE 5 ) 55  #SDP_DE_NULL 0 ) 56  #SDP_DE_UINT 1 ) 57  #SDP_DE_INT 2 ) 58  #SDP_DE_UUID 3 ) 59  #SDP_DE_STRING 4 ) 60  #SDP_DE_BOOL 5 ) 61  #SDP_DE_SEQ 6 ) 62  #SDP_DE_ALT 7 ) 63  #SDP_DE_URL 8 ) 67  maddl_b™s ; 68  mnum_by‹s ; 69 } tsdp_siz_idx_lookup_bË_t ; 71  sdp_siz_idx_lookup_bË_t gsdp_siz_idx_lookup_bË [] = { 84  muuid ; 85 * mÇme ; 86 } tsdp_uuid_Çm_lookup_bË_t ; 88  sdp_uuid_Çm_lookup_bË_t gsdp_uuid_Çm_lookup_bË [] = { 89 { SDP_UUID_SDP , "SDP" }, 90 { SDP_UUID_UDP , "UDP" }, 91 { SDP_UUID_RFCOMM , "RFCOMM" }, 92 { SDP_UUID_TCP , "TCP" }, 93 { SDP_UUID_TCS_BIN , "TCS-BIN" }, 94 { SDP_UUID_TCS_AT , "TCS-AT" }, 95 { SDP_UUID_OBEX , "OBEX" }, 96 { SDP_UUID_IP , "IP" }, 97 { SDP_UUID_FTP , "FTP" }, 98 { SDP_UUID_HTTP , "HTTP" }, 99 { SDP_UUID_WSP , "WSP" }, 100 { SDP_UUID_L2CAP , "L2CAP" }, 101 { SDP_UUID_BNEP , "BNEP" }, 102 { SDP_UUID_HIDP , "HIDP" }, 103 { SDP_UUID_AVCTP , "AVCTP" }, 104 { SDP_UUID_AVDTP , "AVDTP" }, 105 { SDP_UUID_CMTP , "CMTP" }, 106 { SDP_UUID_UDI_C_PLANE , "UDI_C-Plane" }, 107 { SDP_UUID_SERVICE_DISCOVERY_SERVER , "SDServer" }, 108 { SDP_UUID_BROWSE_GROUP_DESCRIPTOR , "BrwsGrpDesc" }, 109 { SDP_UUID_PUBLIC_BROWSE_GROUP , "PubBrwsGrp" }, 110 { SDP_UUID_SERIAL_PORT , "SP" }, 111 { SDP_UUID_LAN_ACCESS_PPP , "LAN" }, 112 { SDP_UUID_DIALUP_NETWORKING , "DUN" }, 113 { SDP_UUID_IR_MC_SYNC , "IRMCSync" }, 114 { SDP_UUID_OBEX_OBJECT_PUSH , "OBEXObjPush" }, 115 { SDP_UUID_OBEX_FILE_TRANSFER , "OBEXObjTrnsf" }, 116 { SDP_UUID_IR_MC_SYNC_COMMAND , "IRMCSyncCmd" }, 117 { SDP_UUID_HEADSET , "Headset" }, 118 { SDP_UUID_CORDLESS_TELEPHONY , "CordlessTel" }, 119 { SDP_UUID_AUDIO_SOURCE , "AudioSource" }, 120 { SDP_UUID_AUDIO_SINK , "AudioSink" }, 121 { SDP_UUID_AV_REMOTE_TARGET , "AVRemTarget" }, 122 { SDP_UUID_ADVANCED_AUDIO , "AdvAudio" }, 123 { SDP_UUID_AV_REMOTE , "AVRemote" }, 124 { SDP_UUID_AV_REMOTE_CONTROLLER , "AVRemCt" }, 125 { SDP_UUID_INTERCOM , "Intercom" }, 126 { SDP_UUID_FAX , "Fax" }, 127 { SDP_UUID_HEADSET_AUDIO_GATEWAY , "Headset AG" }, 128 { SDP_UUID_WAP , "WAP" }, 129 { SDP_UUID_WAP_CLIENT , "WAP Client" }, 130 { SDP_UUID_PANU , "PANU" }, 131 { SDP_UUID_NAP , "NAP" }, 132 { SDP_UUID_GN , "GN" }, 133 { SDP_UUID_DIRECT_PRINTING , "DirectPrint" }, 134 { SDP_UUID_REFERENCE_PRINTING , "RefPrint" }, 135 { SDP_UUID_IMAGING , "Imaging" }, 136 { SDP_UUID_IMAGING_RESPONDER , "ImagingResp" }, 137 { SDP_UUID_HANDSFREE , "Handsfree" }, 138 { SDP_UUID_HANDSFREE_AUDIO_GATEWAY , "Handsfree AG" }, 139 { SDP_UUID_DIRECT_PRINTING_REF_OBJS , "RefObjsPrint" }, 140 { SDP_UUID_REFLECTED_UI , "ReflectedUI" }, 141 { SDP_UUID_BASIC_PRINTING , "BasicPrint" }, 142 { SDP_UUID_PRINTING_STATUS , "PrintStatus" }, 143 { SDP_UUID_HUMAN_INTERFACE_DEVICE , "HID" }, 144 { SDP_UUID_HARDCOPY_CABLE_REPLACE , "HCRP" }, 145 { SDP_UUID_HCR_PRINT , "HCRPrint" }, 146 { SDP_UUID_HCR_SCAN , "HCRScan" }, 147 { SDP_UUID_COMMON_ISDN_ACCESS , "CIP" }, 148 { SDP_UUID_UDI_MT , "UDI MT" }, 149 { SDP_UUID_UDI_TA , "UDI TA" }, 150 { SDP_UUID_AUDIO_VIDEO , "AudioVideo" }, 151 { SDP_UUID_SIM_ACCESS , "SAP" }, 152 { SDP_UUID_PHONEBOOK_ACCESS_PCE , "PBAP PCE" }, 153 { SDP_UUID_PHONEBOOK_ACCESS_PSE , "PBAP PSE" }, 154 { SDP_UUID_PHONEBOOK_ACCESS , "PBAP" }, 155 { SDP_UUID_PNP_INFORMATION , "PNPInfo" }, 156 { SDP_UUID_GENERIC_NETWORKING , "Networking" }, 157 { SDP_UUID_GENERIC_FILE_TRANSFER , "FileTrnsf" }, 158 { SDP_UUID_GENERIC_AUDIO , "Audio" }, 159 { SDP_UUID_GENERIC_TELEPHONY , "Telephony" }, 160 { SDP_UUID_UPNP_SERVICE , "UPNP" }, 161 { SDP_UUID_UPNP_IP_SERVICE , "UPNP IP" }, 162 { SDP_UUID_ESDP_UPNP_IP_PAN , "UPNP PAN" }, 163 { SDP_UUID_ESDP_UPNP_IP_LAP , "UPNP LAP" }, 164 { SDP_UUID_ESDP_UPNP_L2CAP , "UPNP L2CAP" }, 165 { SDP_UUID_VIDEO_SOURCE , "VideoSource" }, 166 { SDP_UUID_VIDEO_SINK , "VideoSink" }, 167 { SDP_UUID_VIDEO_DISTRIBUTION , "VideoDist" }, 168 { SDP_UUID_APPLE_AGENT , "AppleAgent" }, 171  #SDP_UUID_NAM_LOOKUP_TABLE_SIZE \ 172 (( sdp_uuid_Çm_lookup_bË )/( sdp_uuid_Çm_lookup_bË_t )) ) 176  m©Œ_id ; 177 * mÇme ; 178 } tsdp_©Œ_id_Çm_lookup_bË_t ; 180  sdp_©Œ_id_Çm_lookup_bË_t gsdp_©Œ_id_Çm_lookup_bË [] = { 181 { SDP_ATTR_ID_SERVICE_RECORD_HANDLE , "SrvRecHndl" }, 182 { SDP_ATTR_ID_SERVICE_CLASS_ID_LIST , "SrvClassIDList" }, 183 { SDP_ATTR_ID_SERVICE_RECORD_STATE , "SrvRecState" }, 184 { SDP_ATTR_ID_SERVICE_SERVICE_ID , "SrvID" }, 185 { SDP_ATTR_ID_PROTOCOL_DESCRIPTOR_LIST , "ProtocolDescList" }, 186 { SDP_ATTR_ID_BROWSE_GROUP_LIST , "BrwGrpList" }, 187 { SDP_ATTR_ID_LANGUAGE_BASE_ATTRIBUTE_ID_LIST , "LangBaseAttrIDList" }, 188 { SDP_ATTR_ID_SERVICE_INFO_TIME_TO_LIVE , "SrvInfoTimeToLive" }, 189 { SDP_ATTR_ID_SERVICE_AVAILABILITY , "SrvAvail" }, 190 { SDP_ATTR_ID_BLUETOOTH_PROFILE_DESCRIPTOR_LIST , "BTProfileDescList" }, 191 { SDP_ATTR_ID_DOCUMENTATION_URL , "DocURL" }, 192 { SDP_ATTR_ID_CLIENT_EXECUTABLE_URL , "ClientExeURL" }, 193 { SDP_ATTR_ID_ICON_URL , "IconURL" }, 194 { SDP_ATTR_ID_ADDITIONAL_PROTOCOL_DESC_LISTS , "AdditionalProtocolDescLists" }, 195 { SDP_ATTR_ID_SERVICE_NAME , "SrvName" }, 196 { SDP_ATTR_ID_SERVICE_DESCRIPTION , "SrvDesc" }, 197 { SDP_ATTR_ID_PROVIDER_NAME , "ProviderName" }, 198 { SDP_ATTR_ID_VERSION_NUMBER_LIST , "VersionNumList" }, 199 { SDP_ATTR_ID_GROUP_ID , "GrpID" }, 200 { SDP_ATTR_ID_SERVICE_DATABASE_STATE , "SrvDBState" }, 201 { SDP_ATTR_ID_SERVICE_VERSION , "SrvVersion" }, 202 { SDP_ATTR_ID_SECURITY_DESCRIPTION , "SecurityDescription"}, 203 { SDP_ATTR_ID_SUPPORTED_DATA_STORES_LIST , "SuppDataStoresList" }, 204 { SDP_ATTR_ID_SUPPORTED_FORMATS_LIST , "SuppFormatsList" }, 205 { SDP_ATTR_ID_NET_ACCESS_TYPE , "NetAccessType" }, 206 { SDP_ATTR_ID_MAX_NET_ACCESS_RATE , "MaxNetAccessRate" }, 207 { SDP_ATTR_ID_IPV4_SUBNET , "IPv4Subnet" }, 208 { SDP_ATTR_ID_IPV6_SUBNET , "IPv6Subnet" }, 209 { SDP_ATTR_ID_SUPPORTED_CAPABILITIES , "SuppCapabilities" }, 210 { SDP_ATTR_ID_SUPPORTED_FEATURES , "SuppFeatures" }, 211 { SDP_ATTR_ID_SUPPORTED_FUNCTIONS , "SuppFunctions" }, 212 { SDP_ATTR_ID_TOTAL_IMAGING_DATA_CAPACITY , "SuppTotalCapacity" }, 213 { SDP_ATTR_ID_SUPPORTED_REPOSITORIES , "SuppRepositories" }, 216  #SDP_ATTR_ID_NAM_LOOKUP_TABLE_SIZE \ 217 (( sdp_©Œ_id_Çm_lookup_bË )/( sdp_©Œ_id_Çm_lookup_bË_t )) ) 219 * $g‘_uuid_Çme ( uuid ) 221  i ; 223  i = 0; i < SDP_UUID_NAM_LOOKUP_TABLE_SIZE ; i++) { 224 ià( sdp_uuid_Çm_lookup_bË [ i ]. uuid == uuid) 225  sdp_uuid_Çm_lookup_bË [ i ]. Çme ; 229 } } 231  šlše * $g‘_©Œ_id_Çme ( ©Œ_id ) 233  i ; 235  i = 0; i < SDP_ATTR_ID_NAM_LOOKUP_TABLE_SIZE ; i++) 236 ià( sdp_©Œ_id_Çm_lookup_bË [ i ]. ©Œ_id ==‡ttr_id) 237  sdp_©Œ_id_Çm_lookup_bË [ i ]. Çme ; 239 } } 241  šlše ušt8_t $·r£_de_hdr ( äame * äm , * n ) 243 ušt8_t de_hdr = `g‘_u8 ( äm ); 244 ušt8_t de_ty³ = de_hdr >> 3; 245 ušt8_t siz_idx = de_hdr & 0x07; 248 ià( sdp_siz_idx_lookup_bË [ siz_idx ]. addl_b™s ) { 249  sdp_siz_idx_lookup_bË [ siz_idx ]. num_by‹s ) { 251 * n = `g‘_u8 ( äm ); ; 253 * n = `g‘_u16 ( äm ); ; 255 * n = `g‘_u32 ( äm ); ; 257 * n = `g‘_u64 ( äm ); ; 260 * n = sdp_siz_idx_lookup_bË [ siz_idx ]. num_by‹s ; 262  de_ty³ ; 263 } } 265  šlše  $´št_št ( ušt8_t de_ty³ ,  Ëv– ,  n ,  äame * äm , ušt16_t * psm , ušt8_ˆ* chªÃl ) 267 ušt64_t v® , v®2 ; 269  de_ty³ ) { 270  SDP_DE_UINT : 271 `´štf (" uint"); 273  SDP_DE_INT : 274 `´štf (" int"); 276  SDP_DE_BOOL : 277 `´štf (" bool"); 281  n ) { 283 v® = `g‘_u8 ( äm ); 284 ià( chªÃl && de_ty³ =ð SDP_DE_UINT ) 285 ià(* chªÃl == 0) 286 * chªÃl = v® ; 289 v® = `g‘_u16 ( äm ); 290 ià( psm && de_ty³ =ð SDP_DE_UINT ) 291 ià(* psm == 0) 292 * psm = v® ; 295 v® = `g‘_u32 ( äm ); 298 v® = `g‘_u64 ( äm ); 301 `g‘_u128 ( äm , & v® , & v®2 ); 302 `´štf (" 0x%jx", v®2 ); 303 ià( v® < 0x1000000000000000LL) 304 `´štf ("0"); 305 `´štf ("%jx", v® ); 308 `´štf ("ƒrr"); 309 äm -> ±r +ð n ; 310 äm -> Ën -ð n ; 314 `´štf (" 0x%jx", v® ); 315 } } 317  šlše  $´št_uuid ( n ,  äame * äm , ušt16_t * psm , ušt8_t * chªÃl ) 319 ušt32_t uuid = 0; 320 * s ; 321  i ; 323  n ) { 325 uuid = `g‘_u16 ( äm ); 326 s = "uuid-16"; 329 uuid = `g‘_u32 ( äm ); 330 s = "uuid-32"; 333 `´štf (" uuid-128 "); 334  i = 0; i < 16; i++) { 335 `´štf ("%02x", ((*è äm -> ±r )[ i ]); 336 ià( i == 3 || i == 5 || i == 7 || i == 9) 337 `´štf ("-"); 339 äm -> ±r += 16; 340 äm -> Ën -= 16; 343 `´štf (" *err*"); 344 äm -> ±r +ð n ; 345 äm -> Ën -ð n ; 349 ià( psm && *psm > 0 && *psm != 0xffff) { 350 `£t_´Ùo ( äm -> hªdË , * psm , 0, uuid ); 351 * psm = 0xffff; 354 ià( chªÃl && *channel > 0 && *channel != 0xff) { 355 `£t_´Ùo ( äm -> hªdË , * psm , * chªÃl , uuid ); 356 * chªÃl = 0xff; 359 `´štf (" % 0x%04x", s , uuid ); 360 ià(( s = `g‘_uuid_Çme ( uuid ))) 361 `´štf (" (%s)", s ); 362 } } 364  šlše  $´št_¡ršg ( n ,  äame * äm , cÚ¡ * Çme ) 366  i , hex = 0; 368  i = 0; i < n ; i++) { 369 ià( i =ð( n - 1è&& ((*è äm -> ±r )[i] == '\0') 372 ià(! `i¥ršt (((*è äm -> ±r )[ i ])) { 373 hex = 1; 378 `´štf (" %s", Çme ); 379 ià( hex ) { 380  i = 0; i < n ; i++) 381 `´štf (" %02x", ((*è äm -> ±r )[ i ]); 383 `´štf (" \""); 384  i = 0; i < n ; i++) 385 `´štf ("%c", ((*è äm -> ±r )[ i ]); 386 `´štf ("\""); 389 äm -> ±r +ð n ; 390 äm -> Ën -ð n ; 391 } } 393  šlše  ´št_de (,  äame * äm , * ¥l™ , ušt16_t * psm , ušt8_t * chªÃl ); 395  šlše  $´št_des ( ušt8_t de_ty³ ,  Ëv– ,  n ,  äame * äm , * ¥l™ , ušt16_t * psm , ušt8_ˆ* chªÃl ) 397  Ën = äm ->len; 398  Ën - (è äm ->ËÀ< n && () frm->len > 0) 399 `´št_de ( Ëv– , äm , ¥l™ , psm , chªÃl ); 400 } } 402  šlše  $´št_de ( Ëv– ,  äame * äm , * ¥l™ , ušt16_t * psm , ušt8_t * chªÃl ) 404  n = 0; 405 ušt8_t de_ty³ = `·r£_de_hdr ( äm , & n ); 407  de_ty³ ) { 408  SDP_DE_NULL : 409 `´štf ("‚ull"); 411  SDP_DE_UINT : 412  SDP_DE_INT : 413  SDP_DE_BOOL : 414 `´št_št ( de_ty³ , Ëv– , n , äm , psm , chªÃl ); 416  SDP_DE_UUID : 417 ià( ¥l™ ) { 420 ià(* ¥l™ ) { 421 `´štf ("\n"); 422 `p_šd’t ( Ëv– , NULL ); 424 ++* ¥l™ ; 426 `´št_uuid ( n , äm , psm , chªÃl ); 428  SDP_DE_URL : 429  SDP_DE_STRING : 430 `´št_¡ršg ( n , äm , de_ty³ =ð SDP_DE_URL ? "url": "str"); 432  SDP_DE_SEQ : 433 `´štf (" <"); 434 `´št_des ( de_ty³ , Ëv– , n , äm , ¥l™ , psm , chªÃl ); 435 `´štf (" >"); 437  SDP_DE_ALT : 438 `´štf (" ["); 439 `´št_des ( de_ty³ , Ëv– , n , äm , ¥l™ , psm , chªÃl ); 440 `´štf (" ]"); 443 } } 445  šlše  $´št_¤v_¤ch_·t ( Ëv– ,  äame * äm ) 447  Ën , n1 = 0, n2 = 0; 449 `p_šd’t ( Ëv– , äm ); 450 `´štf ("pat"); 452 ià( `·r£_de_hdr ( äm , & n1 è=ð SDP_DE_SEQ ) { 453 Ën = äm ->len; 454  Ën - (è äm ->ËÀ< n1 && () frm->len > 0) { 455 ià( `·r£_de_hdr ( äm , & n2 è=ð SDP_DE_UUID ) { 456 `´št_uuid ( n2 , äm , NULL , NULL); 458 `´štf ("\nERROR: Unexpected syntax (UUID)\n"); 459 `¿w_dump ( Ëv– , äm ); 462 `´štf ("\n"); 464 `´štf ("\nERROR: Unexpected syntax (SEQ)\n"); 465 `¿w_dump ( Ëv– , äm ); 467 } } 469  šlše  $´št_©Œ_id_li¡ ( Ëv– ,  äame * äm ) 471 ušt16_t ©Œ_id ; 472 ušt32_t ©Œ_id_¿nge ; 473  Ën , n1 = 0, n2 = 0; 475 `p_šd’t ( Ëv– , äm ); 476 `´štf ("aid(s)"); 478 ià( `·r£_de_hdr ( äm , & n1 è=ð SDP_DE_SEQ ) { 479 Ën = äm ->len; 480  Ën - (è äm ->ËÀ< n1 && () frm->len > 0) { 482 ià( `·r£_de_hdr ( äm , & n2 è=ð SDP_DE_UINT ) { 483 * Çme ; 484  n2 ) { 486 ©Œ_id = `g‘_u16 ( äm ); 487 Çme = `g‘_©Œ_id_Çme ( ©Œ_id ); 488 ià(! Çme ) 489 Çme = "unknown"; 490 `´štf (" 0x%04x (%s)", ©Œ_id , Çme ); 493 ©Œ_id_¿nge = `g‘_u32 ( äm ); 494 `´štf (" 0x%04x - 0x%04x", 495 ( ©Œ_id_¿nge >> 16), 496 ( ©Œ_id_¿nge & 0xFFFF)); 500 `´štf ("\nERROR: Unexpected syntax\n"); 501 `¿w_dump ( Ëv– , äm ); 504 `´štf ("\n"); 506 `´štf ("\nERROR: Unexpected syntax\n"); 507 `¿w_dump ( Ëv– , äm ); 509 } } 511  šlše  $´št_©Œ_li¡ ( Ëv– ,  äame * äm ) 513 ušt16_t ©Œ_id , psm ; 514 ušt8_t chªÃl ; 515  Ën , ¥l™ , n1 = 0, n2 = 0; 517 ià( `·r£_de_hdr ( äm , & n1 è=ð SDP_DE_SEQ ) { 518 Ën = äm ->len; 519  Ën - (è äm ->ËÀ< n1 && () frm->len > 0) { 521 ià( `·r£_de_hdr ( äm , & n2 è=ð SDP_DE_UINT &&‚2 =ð( ©Œ_id )) { 522 * Çme ; 523 ©Œ_id = `g‘_u16 ( äm ); 524 `p_šd’t ( Ëv– , 0); 525 Çme = `g‘_©Œ_id_Çme ( ©Œ_id ); 526 ià(! Çme ) 527 Çme = "unknown"; 528 `´štf ("aid 0x%04x (%s)\n", ©Œ_id , Çme ); 529 ¥l™ = ( ©Œ_id !ð SDP_ATTR_ID_PROTOCOL_DESCRIPTOR_LIST ); 530 psm = 0; 531 chªÃl = 0; 534 `p_šd’t ( Ëv– + 1, 0); 535 `´št_de ( Ëv– + 1, äm , ¥l™ ? NULL : &split, 536 ©Œ_id =ð SDP_ATTR_ID_PROTOCOL_DESCRIPTOR_LIST ? & psm : NULL , 537 ©Œ_id =ð SDP_ATTR_ID_PROTOCOL_DESCRIPTOR_LIST ? & chªÃl : NULL ); 538 `´štf ("\n"); 540 `´štf ("\nERROR: Unexpected syntax\n"); 541 `¿w_dump ( Ëv– , äm ); 546 `´štf ("\nERROR: Unexpected syntax\n"); 547 `¿w_dump ( Ëv– , äm ); 549 } } 551  šlše  $´št_©Œ_li¡s ( Ëv– ,  äame * äm ) 553  n = 0, út = 0; 554  couÁ = äm -> Ën ; 556 ià( `·r£_de_hdr ( äm , & n è=ð SDP_DE_SEQ ) { 557  couÁ - (è äm -> Ën < n && () frm->len > 0) { 558 `p_šd’t ( Ëv– , 0); 559 `´štf ("»cÜd #%d\n", út ++); 560 `´št_©Œ_li¡ ( Ëv– + 2, äm ); 563 `´štf ("\nERROR: Unexpected syntax\n"); 564 `¿w_dump ( Ëv– , äm ); 566 } } 568  šlše  $´št_cÚt_¡©e ( Ëv– , * buf ) 570 ušt8_t cÚt = buf [0]; 571  i ; 573 `p_šd’t ( Ëv– , 0); 574 `´štf ("cont"); 575  i = 0; i < cÚt + 1; i++) 576 `´štf (" %2.2X", buf [ i ]); 577 `´štf ("\n"); 578 } } 580 * $pid2¡r ( ušt8_t pid ) 582  pid ) { 583  SDP_ERROR_RSP : 585  SDP_SERVICE_SEARCH_REQ : 587  SDP_SERVICE_SEARCH_RSP : 589  SDP_SERVICE_ATTR_REQ : 591  SDP_SERVICE_ATTR_RSP : 593  SDP_SERVICE_SEARCH_ATTR_REQ : 595  SDP_SERVICE_SEARCH_ATTR_RSP : 600 } } 602  #FRAME_TABLE_SIZE 10 ) 604  äame gäame_bË [ FRAME_TABLE_SIZE ]; 606  $äame_add ( äame * äm ,  couÁ ) 608  äame * ä ; 609 * d©a ; 610  i , Ën = 0, pos = -1; 612  i = 0; i < FRAME_TABLE_SIZE ; i++) { 613 ià( äame_bË [ i ]. hªdË =ð äm ->handle && 614 äame_bË [ i ]. cid =ð äm ->cid) { 615 pos = i ; 616 Ën = äame_bË [ i ]. d©a_Ën ; 619 ià( pos < 0 && ! äame_bË [ i ]. hªdË ) 620 pos = i ; 623 ià( pos < 0 || couÁ <= 0) 624  - EIO ; 626 d©a = `m®loc ( Ën + couÁ ); 627 ià(! d©a ) 628  - ENOMEM ; 630 ä = & äame_bË [ pos ]; 632 ià( Ën > 0) { 633 `memýy ( d©a , ä ->d©a, Ën ); 634 `memýy ( d©a + Ën , äm -> ±r , couÁ ); 636 `memýy ( d©a , äm -> ±r , couÁ ); 638 ià( ä -> d©a ) 639 `ä“ ( ä -> d©a ); 641 ä -> d©a = data; 642 ä -> d©a_Ën = Ën + couÁ ; 643 ä -> Ën = fr-> d©a_Ën ; 644 ä -> ±r = fr-> d©a ; 645 ä -> dev_id = äm ->dev_id; 646 ä -> š = äm ->in; 647 ä -> ts = äm ->ts; 648 ä -> hªdË = äm ->handle; 649 ä -> cid = äm ->cid; 650 ä -> num = äm ->num; 651 ä -> chªÃl = äm ->channel; 652 ä -> µpdump_fd = äm ->pppdump_fd; 653 ä -> audio_fd = äm ->audio_fd; 655  pos ; 656 } } 658  äame * $äame_g‘ ( äame * äm ,  couÁ ) 660  pos ; 662 pos = `äame_add ( äm , couÁ ); 663 ià( pos < 0) 664  äm ; 666 äame_bË [ pos ]. hªdË = 0; 668  & äame_bË [ pos ]; 669 } } 671  $sdp_dump ( Ëv– ,  äame * äm ) 673 sdp_pdu_hdr * hdr = äm -> ±r ; 674 ušt16_t tid = `Áohs ( hdr ->tid); 675 ušt16_t Ën = `Áohs ( hdr ->len); 676 ušt16_t tÙ® , couÁ ; 677 ušt8_t cÚt ; 679 äm -> ±r +ð SDP_PDU_HDR_SIZE ; 680 äm -> Ën -ð SDP_PDU_HDR_SIZE ; 682 `p_šd’t ( Ëv– , äm ); 683 `´štf ("SDP %s:id 0x%x†’ 0x%x\n", `pid2¡r ( hdr -> pid ), tid , Ën ); 685  hdr -> pid ) { 686  SDP_ERROR_RSP : 687 `p_šd’t ( Ëv– + 1, äm ); 688 `´štf ("cod0x%x infØ", `g‘_u16 ( äm )); 689 ià( äm -> Ën > 0) 690 `hex_dump (0, äm , frm-> Ën ); 692 `´štf ("none\n"); 695  SDP_SERVICE_SEARCH_REQ : 697 `´št_¤v_¤ch_·t ( Ëv– + 1, äm ); 700 `p_šd’t ( Ëv– + 1, äm ); 701 `´štf ("max %d\n", `g‘_u16 ( äm )); 704 `´št_cÚt_¡©e ( Ëv– + 1, äm -> ±r ); 707  SDP_SERVICE_SEARCH_RSP : 709 tÙ® = `g‘_u16 ( äm ); 712 couÁ = `g‘_u16 ( äm ); 713 `p_šd’t ( Ëv– + 1, äm ); 714 ià( couÁ < tÙ® ) 715 `´štf ("couÁ %d oà%d\n", couÁ , tÙ® ); 717 `´štf ("couÁ %d\n", couÁ ); 720 ià( couÁ > 0) { 721  i ; 722 `p_šd’t ( Ëv– + 1, äm ); 723 `´štf ("hªdË%s", couÁ > 1 ? "s" : ""); 724  i = 0; i < couÁ ; i++) 725 `´štf (" 0x%x", `g‘_u32 ( äm )); 726 `´štf ("\n"); 730 `´št_cÚt_¡©e ( Ëv– + 1, äm -> ±r ); 733  SDP_SERVICE_ATTR_REQ : 735 `p_šd’t ( Ëv– + 1, äm ); 736 `´štf ("hªdË 0x%x\n", `g‘_u32 ( äm )); 739 `p_šd’t ( Ëv– + 1, äm ); 740 `´štf ("max %d\n", `g‘_u16 ( äm )); 743 `´št_©Œ_id_li¡ ( Ëv– + 1, äm ); 746 `´št_cÚt_¡©e ( Ëv– + 1, äm -> ±r ); 749  SDP_SERVICE_ATTR_RSP : 751 couÁ = `g‘_u16 ( äm ); 752 `p_šd’t ( Ëv– + 1, äm ); 753 `´štf ("couÁ %d\n", couÁ ); 756 cÚt = *(*)( äm -> ±r + couÁ ); 758 ià( cÚt == 0) { 760 `´št_©Œ_li¡ ( Ëv– + 1, `äame_g‘ ( äm , couÁ )); 762 `äame_add ( äm , couÁ ); 764 `´št_cÚt_¡©e ( Ëv– + 1, äm -> ±r + couÁ ); 767  SDP_SERVICE_SEARCH_ATTR_REQ : 769 `´št_¤v_¤ch_·t ( Ëv– + 1, äm ); 772 `p_šd’t ( Ëv– + 1, äm ); 773 `´štf ("max %d\n", `g‘_u16 ( äm )); 776 `´št_©Œ_id_li¡ ( Ëv– + 1, äm ); 779 `´št_cÚt_¡©e ( Ëv– + 1, äm -> ±r ); 782  SDP_SERVICE_SEARCH_ATTR_RSP : 784 couÁ = `g‘_u16 ( äm ); 785 `p_šd’t ( Ëv– + 1, äm ); 786 `´štf ("couÁ %d\n", couÁ ); 789 cÚt = *(*)( äm -> ±r + couÁ ); 791 ià( cÚt == 0) { 793 `´št_©Œ_li¡s ( Ëv– + 1, `äame_g‘ ( äm , couÁ )); 795 `äame_add ( äm , couÁ ); 797 `´št_cÚt_¡©e ( Ëv– + 1, äm -> ±r + couÁ ); 801 `¿w_dump ( Ëv– + 1, äm ); 804 } } @tools/parser/sdp.h 25 #iâdeà __SDP_H 26  #__SDP_H ) 29  #SDP_UUID_SDP 0x0001 ) 30  #SDP_UUID_UDP 0x0002 ) 31  #SDP_UUID_RFCOMM 0x0003 ) 32  #SDP_UUID_TCP 0x0004 ) 33  #SDP_UUID_TCS_BIN 0x0005 ) 34  #SDP_UUID_TCS_AT 0x0006 ) 35  #SDP_UUID_OBEX 0x0008 ) 36  #SDP_UUID_IP 0x0009 ) 37  #SDP_UUID_FTP 0x000A ) 38  #SDP_UUID_HTTP 0x000C ) 39  #SDP_UUID_WSP 0x000E ) 40  #SDP_UUID_BNEP 0x000F ) 41  #SDP_UUID_HIDP 0x0011 ) 42  #SDP_UUID_HARDCOPY_CONTROL_CHANNEL 0x0012 ) 43  #SDP_UUID_HARDCOPY_DATA_CHANNEL 0x0014 ) 44  #SDP_UUID_HARDCOPY_NOTIFICATION 0x0016 ) 45  #SDP_UUID_AVCTP 0x0017 ) 46  #SDP_UUID_AVDTP 0x0019 ) 47  #SDP_UUID_CMTP 0x001B ) 48  #SDP_UUID_UDI_C_PLANE 0x001D ) 49  #SDP_UUID_L2CAP 0x0100 ) 52  #SDP_UUID_SERVICE_DISCOVERY_SERVER 0x1000 ) 53  #SDP_UUID_BROWSE_GROUP_DESCRIPTOR 0x1001 ) 54  #SDP_UUID_PUBLIC_BROWSE_GROUP 0x1002 ) 55  #SDP_UUID_SERIAL_PORT 0x1101 ) 56  #SDP_UUID_LAN_ACCESS_PPP 0x1102 ) 57  #SDP_UUID_DIALUP_NETWORKING 0x1103 ) 58  #SDP_UUID_IR_MC_SYNC 0x1104 ) 59  #SDP_UUID_OBEX_OBJECT_PUSH 0x1105 ) 60  #SDP_UUID_OBEX_FILE_TRANSFER 0x1106 ) 61  #SDP_UUID_IR_MC_SYNC_COMMAND 0x1107 ) 62  #SDP_UUID_HEADSET 0x1108 ) 63  #SDP_UUID_CORDLESS_TELEPHONY 0x1109 ) 64  #SDP_UUID_AUDIO_SOURCE 0x110¨ ) 65  #SDP_UUID_AUDIO_SINK 0x110b ) 66  #SDP_UUID_AV_REMOTE_TARGET 0x110ø ) 67  #SDP_UUID_ADVANCED_AUDIO 0x110d ) 68  #SDP_UUID_AV_REMOTE 0x110 ) 69  #SDP_UUID_AV_REMOTE_CONTROLLER 0x110à ) 70  #SDP_UUID_INTERCOM 0x1110 ) 71  #SDP_UUID_FAX 0x1111 ) 72  #SDP_UUID_HEADSET_AUDIO_GATEWAY 0x1112 ) 73  #SDP_UUID_WAP 0x1113 ) 74  #SDP_UUID_WAP_CLIENT 0x1114 ) 75  #SDP_UUID_PANU 0x1115 ) 76  #SDP_UUID_NAP 0x1116 ) 77  #SDP_UUID_GN 0x1117 ) 78  #SDP_UUID_DIRECT_PRINTING 0x1118 ) 79  #SDP_UUID_REFERENCE_PRINTING 0x1119 ) 80  #SDP_UUID_IMAGING 0x111¨ ) 81  #SDP_UUID_IMAGING_RESPONDER 0x111b ) 82  #SDP_UUID_IMAGING_AUTOMATIC_ARCHIVE 0x111ø ) 83  #SDP_UUID_IMAGING_REFERENCED_OBJECTS 0x111d ) 84  #SDP_UUID_HANDSFREE 0x111e ) 85  #SDP_UUID_HANDSFREE_AUDIO_GATEWAY 0x111f ) 86  #SDP_UUID_DIRECT_PRINTING_REF_OBJS 0x1120 ) 87  #SDP_UUID_DIRECT_PRINTING_REFERENCE_OBJECTS 0x1120 ) 88  #SDP_UUID_REFLECTED_UI 0x1121 ) 89  #SDP_UUID_BASIC_PRINTING 0x1122 ) 90  #SDP_UUID_PRINTING_STATUS 0x1123 ) 91  #SDP_UUID_HUMAN_INTERFACE_DEVICE 0x1124 ) 92  #SDP_UUID_HARDCOPY_CABLE_REPLACE 0x1125 ) 93  #SDP_UUID_HCR_PRINT 0x1126 ) 94  #SDP_UUID_HCR_SCAN 0x1127 ) 95  #SDP_UUID_COMMON_ISDN_ACCESS 0x1128 ) 96  #SDP_UUID_UDI_MT 0x112¨ ) 97  #SDP_UUID_UDI_TA 0x112b ) 98  #SDP_UUID_AUDIO_VIDEO 0x112ø ) 99  #SDP_UUID_SIM_ACCESS 0x112d ) 100  #SDP_UUID_PHONEBOOK_ACCESS_PCE 0x112 ) 101  #SDP_UUID_PHONEBOOK_ACCESS_PSE 0x112à ) 102  #SDP_UUID_PHONEBOOK_ACCESS 0x1130 ) 103  #SDP_UUID_PNP_INFORMATION 0x1200 ) 104  #SDP_UUID_GENERIC_NETWORKING 0x1201 ) 105  #SDP_UUID_GENERIC_FILE_TRANSFER 0x1202 ) 106  #SDP_UUID_GENERIC_AUDIO 0x1203 ) 107  #SDP_UUID_GENERIC_TELEPHONY 0x1204 ) 108  #SDP_UUID_UPNP_SERVICE 0x1205 ) 109  #SDP_UUID_UPNP_IP_SERVICE 0x1206 ) 110  #SDP_UUID_ESDP_UPNP_IP_PAN 0x1300 ) 111  #SDP_UUID_ESDP_UPNP_IP_LAP 0x1301 ) 112  #SDP_UUID_ESDP_UPNP_L2CAP 0x1302 ) 113  #SDP_UUID_VIDEO_SOURCE 0x1303 ) 114  #SDP_UUID_VIDEO_SINK 0x1304 ) 115  #SDP_UUID_VIDEO_DISTRIBUTION 0x1305 ) 116  #SDP_UUID_APPLE_AGENT 0x2112 ) 119  #SDP_ATTR_ID_SERVICE_RECORD_HANDLE 0x0000 ) 120  #SDP_ATTR_ID_SERVICE_CLASS_ID_LIST 0x0001 ) 121  #SDP_ATTR_ID_SERVICE_RECORD_STATE 0x0002 ) 122  #SDP_ATTR_ID_SERVICE_SERVICE_ID 0x0003 ) 123  #SDP_ATTR_ID_PROTOCOL_DESCRIPTOR_LIST 0x0004 ) 124  #SDP_ATTR_ID_BROWSE_GROUP_LIST 0x0005 ) 125  #SDP_ATTR_ID_LANGUAGE_BASE_ATTRIBUTE_ID_LIST 0x0006 ) 126  #SDP_ATTR_ID_SERVICE_INFO_TIME_TO_LIVE 0x0007 ) 127  #SDP_ATTR_ID_SERVICE_AVAILABILITY 0x0008 ) 128  #SDP_ATTR_ID_BLUETOOTH_PROFILE_DESCRIPTOR_LIST 0x0009 ) 129  #SDP_ATTR_ID_DOCUMENTATION_URL 0x000A ) 130  #SDP_ATTR_ID_CLIENT_EXECUTABLE_URL 0x000B ) 131  #SDP_ATTR_ID_ICON_URL 0x000C ) 132  #SDP_ATTR_ID_ADDITIONAL_PROTOCOL_DESC_LISTS 0x000D ) 133  #SDP_ATTR_ID_SERVICE_NAME 0x0100 ) 134  #SDP_ATTR_ID_SERVICE_DESCRIPTION 0x0101 ) 135  #SDP_ATTR_ID_PROVIDER_NAME 0x0102 ) 136  #SDP_ATTR_ID_VERSION_NUMBER_LIST 0x0200 ) 137  #SDP_ATTR_ID_GROUP_ID 0x0200 ) 138  #SDP_ATTR_ID_SERVICE_DATABASE_STATE 0x0201 ) 139  #SDP_ATTR_ID_SERVICE_VERSION 0x0300 ) 141  #SDP_ATTR_ID_EXTERNAL_NETWORK 0x0301 ) 142  #SDP_ATTR_ID_SUPPORTED_DATA_STORES_LIST 0x0301 ) 143  #SDP_ATTR_ID_REMOTE_AUDIO_VOLUME_CONTROL 0x0302 ) 144  #SDP_ATTR_ID_SUPPORTED_FORMATS_LIST 0x0303 ) 145  #SDP_ATTR_ID_FAX_CLASS_1_SUPPORT 0x0302 ) 146  #SDP_ATTR_ID_FAX_CLASS_2_0_SUPPORT 0x0303 ) 147  #SDP_ATTR_ID_FAX_CLASS_2_SUPPORT 0x0304 ) 148  #SDP_ATTR_ID_AUDIO_FEEDBACK_SUPPORT 0x0305 ) 149  #SDP_ATTR_ID_SECURITY_DESCRIPTION 0x030¨ ) 150  #SDP_ATTR_ID_NET_ACCESS_TYPE 0x030b ) 151  #SDP_ATTR_ID_MAX_NET_ACCESS_RATE 0x030ø ) 152  #SDP_ATTR_ID_IPV4_SUBNET 0x030d ) 153  #SDP_ATTR_ID_IPV6_SUBNET 0x030 ) 155  #SDP_ATTR_ID_SUPPORTED_CAPABILITIES 0x0310 ) 156  #SDP_ATTR_ID_SUPPORTED_FEATURES 0x0311 ) 157  #SDP_ATTR_ID_SUPPORTED_FUNCTIONS 0x0312 ) 158  #SDP_ATTR_ID_TOTAL_IMAGING_DATA_CAPACITY 0x0313 ) 159  #SDP_ATTR_ID_SUPPORTED_REPOSITORIES 0x0314 ) @tools/parser/smp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~"·r£r.h " 37  #SMP_CMD_PAIRING_REQ 0x01 ) 38  #SMP_CMD_PAIRING_RESP 0x02 ) 39  #SMP_CMD_PAIRING_CONFIRM 0x03 ) 40  #SMP_CMD_PAIRING_RANDOM 0x04 ) 41  #SMP_CMD_PAIRING_FAILED 0x05 ) 42  #SMP_CMD_ENCRYPT_INFO 0x06 ) 43  #SMP_CMD_MASTER_IDENT 0x07 ) 44  #SMP_CMD_IDENT_INFO 0X08 ) 45  #SMP_CMD_IDENT_ADDR_INFO 0x09 ) 46  #SMP_CMD_SIGN_INFO 0x0a ) 47  #SMP_CMD_SECURITY_REQ 0x0b ) 50  #SMP_IO_DISPLAY_ONLY 0x00 ) 51  #SMP_IO_DISPLAY_YESNO 0x01 ) 52  #SMP_IO_KEYBOARD_ONLY 0x02 ) 53  #SMP_IO_NO_INPUT_OUTPUT 0x03 ) 54  #SMP_IO_KEYBOARD_DISPLAY 0x04 ) 57  #SMP_OOB_NOT_PRESENT 0x00 ) 58  #SMP_OOB_PRESENT 0x01 ) 60  #SMP_DIST_ENC_KEY 0x01 ) 61  #SMP_DIST_ID_KEY 0x02 ) 62  #SMP_DIST_SIGN 0x04 ) 64  #SMP_AUTH_NONE 0x00 ) 65  #SMP_AUTH_BONDING 0x01 ) 66  #SMP_AUTH_MITM 0x04 ) 68  #SMP_REASON_PASSKEY_ENTRY_FAILED 0x01 ) 69  #SMP_REASON_OOB_NOT_AVAIL 0x02 ) 70  #SMP_REASON_AUTH_REQUIREMENTS 0x03 ) 71  #SMP_REASON_CONFIRM_FAILED 0x04 ) 72  #SMP_REASON_PAIRING_NOTSUPP 0x05 ) 73  #SMP_REASON_ENC_KEY_SIZE 0x06 ) 74  #SMP_REASON_CMD_NOTSUPP 0x07 ) 75  #SMP_REASON_UNSPECIFIED 0x08 ) 76  #SMP_REASON_REPEATED_ATTEMPTS 0x09 ) 78 cÚ¡ * $smpcmd2¡r ( ušt8_t cmd ) 80  cmd ) { 81  SMP_CMD_PAIRING_REQ : 83  SMP_CMD_PAIRING_RESP : 85  SMP_CMD_PAIRING_CONFIRM : 87  SMP_CMD_PAIRING_RANDOM : 89  SMP_CMD_PAIRING_FAILED : 91  SMP_CMD_ENCRYPT_INFO : 93  SMP_CMD_MASTER_IDENT : 95  SMP_CMD_IDENT_INFO : 97  SMP_CMD_IDENT_ADDR_INFO : 99  SMP_CMD_SIGN_INFO : 101  SMP_CMD_SECURITY_REQ : 106 } } 108 cÚ¡ * $smpio2¡r ( ušt8_t ÿp ) 110  ÿp ) { 111  SMP_IO_DISPLAY_ONLY : 113  SMP_IO_DISPLAY_YESNO : 115  SMP_IO_KEYBOARD_ONLY : 117  SMP_IO_NO_INPUT_OUTPUT : 119  SMP_IO_KEYBOARD_DISPLAY : 124 } } 126 cÚ¡ * $sm´—sÚ2¡r ( ušt8_t »asÚ ) 128  »asÚ ) { 129  SMP_REASON_PASSKEY_ENTRY_FAILED : 131  SMP_REASON_OOB_NOT_AVAIL : 133  SMP_REASON_AUTH_REQUIREMENTS : 135  SMP_REASON_CONFIRM_FAILED : 137  SMP_REASON_PAIRING_NOTSUPP : 139  SMP_REASON_ENC_KEY_SIZE : 141  SMP_REASON_CMD_NOTSUPP : 143  SMP_REASON_UNSPECIFIED : 145  SMP_REASON_REPEATED_ATTEMPTS : 150 } } 152  $smp_cmd_·œšg_dump ( Ëv– ,  äame * äm ) 154 ušt8_t ÿp = `g‘_u8 ( äm ); 155 ušt8_t oob = `g‘_u8 ( äm ); 156 ušt8_t auth = `g‘_u8 ( äm ); 157 ušt8_t key_size = `g‘_u8 ( äm ); 158 ušt8_t št_di¡ = `g‘_u8 ( äm ); 159 ušt8_t »¥_di¡ = `g‘_u8 ( äm ); 161 `p_šd’t ( Ëv– , äm ); 162 `´štf ("ÿ·bž™y 0x%2.2x oob 0x%2.2x‡uth„eq 0x%2.2x\n", ÿp , oob , 163 auth ); 165 `p_šd’t ( Ëv– , äm ); 166 `´štf ("max key size 0x%2.2x init key dist 0x%2.2x " 167 "»¥ key di¡ 0x%2.2x\n", key_size , št_di¡ , »¥_di¡ ); 169 `p_šd’t ( Ëv– , äm ); 170 `´štf ("C­abž™y: % (OOB d©¨%s)\n", `smpio2¡r ( ÿp ), 171 oob == 0x00 ? "not…resent" : "available"); 173 `p_šd’t ( Ëv– , äm ); 174 `´štf ("Authentication: %s (%s)\n", 175 auth & SMP_AUTH_BONDING ? "Bonding" : "No Bonding", 176 auth & SMP_AUTH_MITM ? "MITM Protection" : 179 `p_šd’t ( Ëv– , äm ); 180 `´štf ("Initiator Key Distribution: %s %s %s\n", 181 št_di¡ & SMP_DIST_ENC_KEY ? "LTK" : "", 182 št_di¡ & SMP_DIST_ID_KEY ? "IRK" : "", 183 št_di¡ & SMP_DIST_SIGN ? "CSRK" : ""); 185 `p_šd’t ( Ëv– , äm ); 186 `´štf ("Responder Key Distribution: %s %s %s\n", 187 »¥_di¡ & SMP_DIST_ENC_KEY ? "LTK" : "", 188 »¥_di¡ & SMP_DIST_ID_KEY ? "IRK" : "", 189 »¥_di¡ & SMP_DIST_SIGN ? "CSRK" : ""); 190 } } 192  $smp_cmd_·œšg_cÚfœm_dump ( Ëv– ,  äame * äm ) 194  i ; 196 `p_šd’t ( Ëv– , äm ); 197 `´štf ("key "); 198  i = 0; i < 16; i++) 199 `´štf ("%2.2x", `g‘_u8 ( äm )); 200 `´štf ("\n"); 201 } } 203  $smp_cmd_·œšg_¿ndom_dump ( Ëv– ,  äame * äm ) 205  i ; 207 `p_šd’t ( Ëv– , äm ); 208 `´štf ("random "); 209  i = 0; i < 16; i++) 210 `´štf ("%2.2x", `g‘_u8 ( äm )); 211 `´štf ("\n"); 212 } } 214  $smp_cmd_·œšg_çžed_dump ( Ëv– ,  äame * äm ) 216 ušt8_t »asÚ = `g‘_u8 ( äm ); 218 `p_šd’t ( Ëv– , äm ); 219 `´štf ("»asÚ 0x%2.2x\n", »asÚ ); 221 `p_šd’t ( Ëv– , äm ); 222 `´štf ("R—sÚ %s\n", `sm´—sÚ2¡r ( »asÚ )); 223 } } 225  $smp_cmd_’üy±_šfo_dump ( Ëv– ,  äame * äm ) 227  i ; 229 `p_šd’t ( Ëv– , äm ); 230 `´štf ("LTK "); 231  i = 0; i < 16; i++) 232 `´štf ("%2.2x", `g‘_u8 ( äm )); 233 `´štf ("\n"); 234 } } 236  $smp_cmd_ma¡”_id’t_dump ( Ëv– ,  äame * äm ) 238 ušt16_t ediv = `btohs ( `htÚs ( `g‘_u16 ( äm ))); 239  i ; 241 `p_šd’t ( Ëv– , äm ); 242 `´štf ("EDIV 0x%4.4x ", ediv ); 244 `´štf ("Rand 0x"); 245  i = 0; i < 8; i++) 246 `´štf ("%2.2x", `g‘_u8 ( äm )); 247 `´štf ("\n"); 248 } } 250  $smp_cmd_id’t_šfo_dump ( Ëv– ,  äame * äm ) 252  i ; 254 `p_šd’t ( Ëv– , äm ); 255 `´štf ("IRK "); 256  i = 0; i < 16; i++) 257 `´štf ("%2.2x", `g‘_u8 ( äm )); 258 `´štf ("\n"); 259 } } 261  $smp_cmd_id’t_addr_šfo_dump ( Ëv– ,  äame * äm ) 263 ušt8_t ty³ = `g‘_u8 ( äm ); 264  addr [18]; 266 `p_šd’t ( Ëv– , äm ); 267 `p_ba2¡r (( bdaddr_t *è äm , addr ); 268 `´štf ("bdadd¸% (%s)\n", addr , ty³ == 0x00 ? "Public" : "Random"); 269 } } 271  $smp_cmd_sign_šfo_dump ( Ëv– ,  äame * äm ) 273  i ; 275 `p_šd’t ( Ëv– , äm ); 276 `´štf ("CSRK "); 277  i = 0; i < 16; i++) 278 `´štf ("%2.2x", `g‘_u8 ( äm )); 279 `´štf ("\n"); 280 } } 282  $smp_cmd_£cur™y_»q_dump ( Ëv– ,  äame * äm ) 284 ušt8_t auth = `g‘_u8 ( äm ); 286 `p_šd’t ( Ëv– , äm ); 287 `´štf ("auth„eq 0x%2.2x\n", auth ); 288 } } 290  $smp_dump ( Ëv– ,  äame * äm ) 292 ušt8_t cmd ; 294 cmd = `g‘_u8 ( äm ); 296 `p_šd’t ( Ëv– , äm ); 297 `´štf ("SMP: % (0x%.2x)\n", `smpcmd2¡r ( cmd ), cmd); 299  cmd ) { 300  SMP_CMD_PAIRING_REQ : 301 `smp_cmd_·œšg_dump ( Ëv– + 1, äm ); 303  SMP_CMD_PAIRING_RESP : 304 `smp_cmd_·œšg_dump ( Ëv– + 1, äm ); 306  SMP_CMD_PAIRING_CONFIRM : 307 `smp_cmd_·œšg_cÚfœm_dump ( Ëv– + 1, äm ); 309  SMP_CMD_PAIRING_RANDOM : 310 `smp_cmd_·œšg_¿ndom_dump ( Ëv– + 1, äm ); 312  SMP_CMD_PAIRING_FAILED : 313 `smp_cmd_·œšg_çžed_dump ( Ëv– + 1, äm ); 315  SMP_CMD_ENCRYPT_INFO : 316 `smp_cmd_’üy±_šfo_dump ( Ëv– + 1, äm ); 318  SMP_CMD_MASTER_IDENT : 319 `smp_cmd_ma¡”_id’t_dump ( Ëv– + 1, äm ); 321  SMP_CMD_IDENT_INFO : 322 `smp_cmd_id’t_šfo_dump ( Ëv– + 1, äm ); 324  SMP_CMD_IDENT_ADDR_INFO : 325 `smp_cmd_id’t_addr_šfo_dump ( Ëv– + 1, äm ); 327  SMP_CMD_SIGN_INFO : 328 `smp_cmd_sign_šfo_dump ( Ëv– + 1, äm ); 330  SMP_CMD_SECURITY_REQ : 331 `smp_cmd_£cur™y_»q_dump ( Ëv– + 1, äm ); 334 `¿w_dump ( Ëv– , äm ); 336 } } @tools/parser/tcpip.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~<Ãt/‘h”Ãt.h > 35  ~<Ãtš‘/š.h > 36  ~<Ãtš‘/.h > 37  ~<Ãtš‘/6.h > 38  ~<Ãtš‘/if_‘h”.h > 39  ~<¬·/š‘.h > 40  ~<Ãtdb.h > 42  ~"·r£r.h " 44  $¬p_dump ( Ëv– ,  äame * äm ) 46  i ; 47  buf [20]; 48  sockaddr_š §i ; 49  ‘h”_¬p * ¬p = (‘h”_¬°*è äm -> ±r ; 51 `´štf ("Src "); 52  i = 0; i < 5; i++) 53 `´štf ("%02x:", ¬p -> ¬p_sha [ i ]); 54 `´štf ("%02x", ¬p -> ¬p_sha [5]); 55 §i . sš_çmžy = AF_INET ; 56 `memýy (& §i . sš_addr , & ¬p -> ¬p_¥a , (sai.sin_addr)); 57 `g‘Çmešfo (( sockaddr *è& §i , (§i), buf , (buf), 58 NULL , 0, NI_NUMERICHOST ); 59 `´štf ("(%sè", buf ); 60 `´štf ("Tgt "); 61  i = 0; i < 5; i++) 62 `´štf ("%02x:", ¬p -> ¬p_tha [ i ]); 63 `´štf ("%02x", ¬p -> ¬p_tha [5]); 64 `memýy (& §i . sš_addr , & ¬p -> ¬p_a , (sai.sin_addr)); 65 `g‘Çmešfo (( sockaddr *è& §i , (§i), buf , (buf), 66 NULL , 0, NI_NUMERICHOST ); 67 `´štf ("(%s)\n", buf ); 68 äm -> ±r +ð( ‘h”_¬p ); 69 äm -> Ën -ð( ‘h”_¬p ); 70 `¿w_dump ( Ëv– , äm ); 71 } } 73  $_dump ( Ëv– ,  äame * äm ) 75  ¤c [50], d¡ [50]; 76  * = ( *è( äm -> ±r ); 77 ušt8_t ´Ùo ; 78  Ën ; 80 ià( -> _v == 4) { 81  sockaddr_š §i ; 82 ´Ùo = -> _p ; 83 Ën = -> _hl << 2; 84 `mem£t (& §i , 0, (sai)); 85 §i . sš_çmžy = AF_INET ; 86 `memýy (& §i . sš_addr , & -> _¤c , ( š_addr )); 87 `g‘Çmešfo (( sockaddr *è& §i , (sai), 88 ¤c , (¤c), NULL , 0, NI_NUMERICHOST ); 89 `memýy (& §i . sš_addr , & -> _d¡ , ( š_addr )); 90 `g‘Çmešfo (( sockaddr *è& §i , (sai), 91 d¡ , (d¡), NULL , 0, NI_NUMERICHOST ); 92 } ià( -> _v == 6) { 93  sockaddr_š6 §i6 ; 94  6_hdr * 6 = (6_hd¸*è ; 95 ´Ùo = 6 -> 6_nxt ; 96 Ën = ( 6_hdr ); 97 `mem£t (& §i6 , 0, (sai6)); 98 §i6 . sš6_çmžy = AF_INET6 ; 99 `memýy (& §i6 . sš6_addr , & 6 -> 6_¤c , ( š6_addr )); 100 `g‘Çmešfo (( sockaddr *è& §i6 , (sai6), 101 ¤c , (¤c), NULL , 0, NI_NUMERICHOST ); 102 `memýy (& §i6 . sš6_addr , & 6 -> 6_d¡ , ( š6_addr )); 103 `g‘Çmešfo (( sockaddr *è& §i6 , (sai6), 104 d¡ , (d¡), NULL , 0, NI_NUMERICHOST ); 106 `¿w_dump ( Ëv– , äm ); 110 `´štf ("¤ø% ", ¤c ); 111 `´štf ("d¡ %s\n", d¡ ); 113 äm -> ±r +ð Ën ; 114 äm -> Ën -=†en; 115 `p_šd’t (++ Ëv– , äm ); 117  ´Ùo ) { 118  IPPROTO_TCP : 119 `´štf ("TCP:\n"); 122  IPPROTO_UDP : 123 `´štf ("UDP:\n"); 126  IPPROTO_ICMP : 127 `´štf ("ICMP:\n"); 130  IPPROTO_ICMPV6 : 131 `´štf ("ICMPv6:\n"); 135 `´štf ("UnknowÀPrÙocÞ: 0x%02x\n", -> _p ); 139 `¿w_dump ( Ëv– , äm ); 140 } } @tools/rctest.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<ùy³.h > 32  ~ 33  ~ 34  ~<¡dlib.h > 35  ~ 36  ~ 37  ~ 38  ~ 39  ~ 40  ~ 41  ~ 43  ~ 44  ~ 45  ~ 46  ~ 47  ~ 48  ~ 50  ~"¤c/sh¬ed/utž.h " 54 mSEND , 55 mRECV , 56 mRECONNECT , 57 mMULTY , 58 mDUMP , 59 mCONNECT , 60 mCRECV , 61 mLSEND , 62 mAUTO , 65 * gbuf ; 68  gd©a_size = 127; 69  gnum_äames = -1; 72  gcouÁ = 1; 75  gd–ay = 0; 78  bdaddr_t gbdaddr ; 79  bdaddr_t gauto_bdaddr ; 80  ušt16_t guuid = 0x0000; 81  ušt8_t gchªÃl = 10; 83 * gfž’ame = NULL ; 84 * g§vefže = NULL ; 85  g§ve_fd = -1; 87  gma¡” = 0; 88  gauth = 0; 89  g’ü = 0; 90  g£cu» = 0; 91  gsockty³ = SOCK_STREAM ; 92  glšg” = 0; 93  gtime¡amp = 0; 94  gdeãr_£tup = 0; 95  g´iÜ™y = -1; 97  $tv2æ ( timev® tv ) 99  () tv . tv_£c + ()Ñv. tv_u£c /1000000.0); 100 } } 102  ušt8_t $g‘_chªÃl (cÚ¡ * svr , ušt16_t uuid ) 104 sdp_£ssiÚ_t * sdp ; 105 sdp_li¡_t * ¤ch , * ©Œs , * r¥ ; 106 uuid_t svþass ; 107 ušt16_t ©Œ ; 108 bdaddr_t d¡ ; 109 ušt8_t chªÃl = 0; 110  ”r ; 112 `¡r2ba ( svr , & d¡ ); 114 sdp = `sdp_cÚÃù (& bdaddr , & d¡ , SDP_RETRY_IF_BUSY ); 115 ià(! sdp ) 118 `sdp_uuid16_ü—‹ (& svþass , uuid ); 119 ¤ch = `sdp_li¡_­³nd ( NULL , & svþass ); 121 ©Œ = SDP_ATTR_PROTO_DESC_LIST ; 122 ©Œs = `sdp_li¡_­³nd ( NULL , & ©Œ ); 124 ”r = `sdp_£rviû_£¬ch_©Œ_»q ( sdp , ¤ch , 125 SDP_ATTR_REQ_INDIVIDUAL , ©Œs , & r¥ ); 126 ià( ”r ) 127  dÚe ; 129 ; r¥ ;„¥ =„¥-> Ãxt ) { 130 sdp_»cÜd_t * »c = (sdp_»cÜd_ˆ*è r¥ -> d©a ; 131 sdp_li¡_t * ´Ùos ; 133 ià(! `sdp_g‘_acûss_´Ùos ( »c , & ´Ùos )) { 134 chªÃl = `sdp_g‘_´Ùo_pÜt ( ´Ùos , RFCOMM_UUID ); 135 ià( chªÃl > 0) 140 dÚe : 141 `sdp_þo£ ( sdp ); 143  chªÃl ; 144 } } 146  $do_cÚÃù (cÚ¡ * svr ) 148  sockaddr_rc addr ; 149  rfcomm_cÚnšfo cÚn ; 150 sockËn_t ÝŽ’ ; 151  sk , Ýt ; 153 ià( uuid != 0x0000) 154 chªÃl = `g‘_chªÃl ( svr , uuid ); 156 ià( chªÃl == 0) { 157 `sy¦og ( LOG_ERR , "Can't get channel‚umber"); 162 sk = `sock‘ ( PF_BLUETOOTH , sockty³ , BTPROTO_RFCOMM ); 163 ià( sk < 0) { 164 `sy¦og ( LOG_ERR , "Can't create socket: %s (%d)", 165 `¡»¼Ü ( ”ºo ),ƒrrno); 170 `mem£t (& addr , 0, (addr)); 171 addr . rc_çmžy = AF_BLUETOOTH ; 173 ià( `bacmp (& auto_bdaddr , BDADDR_ANY )) 174 `baýy (& addr . rc_bdaddr , & auto_bdaddr ); 176 `baýy (& addr . rc_bdaddr , & bdaddr ); 178 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 179 `sy¦og ( LOG_ERR , "Can't bind socket: %s (%d)", 180 `¡»¼Ü ( ”ºo ),ƒrrno); 181  ”rÜ ; 186 ià( time¡amp ) { 187  t = 1; 189 ià( `£tsockÝt ( sk , SOL_SOCKET , SO_TIMESTAMP , & t , (t)) < 0) { 190 `sy¦og ( LOG_ERR , "Can'tƒnable SO_TIMESTAMP: %s (%d)", 191 `¡»¼Ü ( ”ºo ),ƒrrno); 192  ”rÜ ; 198 ià( lšg” ) { 199  lšg” l = { . l_Úoff = 1, . l_lšg” =†inger }; 201 ià( `£tsockÝt ( sk , SOL_SOCKET , SO_LINGER , & l , (l)) < 0) { 202 `sy¦og ( LOG_ERR , "Can'tƒnable SO_LINGER: %s (%d)", 203 `¡»¼Ü ( ”ºo ),ƒrrno); 204  ”rÜ ; 209 Ýt = 0; 210 ià( ma¡” ) 211 Ýt |ð RFCOMM_LM_MASTER ; 212 ià( auth ) 213 Ýt |ð RFCOMM_LM_AUTH ; 214 ià( ’ü ) 215 Ýt |ð RFCOMM_LM_ENCRYPT ; 216 ià( £cu» ) 217 Ýt |ð RFCOMM_LM_SECURE ; 219 ià( Ýt && `£tsockÝt ( sk , SOL_RFCOMM , RFCOMM_LM , &opt, (opt)) < 0) { 220 `sy¦og ( LOG_ERR , "Can't set RFCOMM†ink mode: %s (%d)", 221 `¡»¼Ü ( ”ºo ),ƒrrno); 222  ”rÜ ; 226 `mem£t (& addr , 0, (addr)); 227 addr . rc_çmžy = AF_BLUETOOTH ; 228 `¡r2ba ( svr , & addr . rc_bdaddr ); 229 addr . rc_chªÃl = chªÃl ; 231 ià( `cÚÃù ( sk , ( sockaddr *è& addr , (addr)) < 0) { 232 `sy¦og ( LOG_ERR , "Can't connect: %s (%d)", 233 `¡»¼Ü ( ”ºo ),ƒrrno); 234  ”rÜ ; 238 `mem£t (& cÚn , 0, (conn)); 239 ÝŽ’ = ( cÚn ); 241 ià( `g‘sockÝt ( sk , SOL_RFCOMM , RFCOMM_CONNINFO , & cÚn , & ÝŽ’ ) < 0) { 242 `sy¦og ( LOG_ERR , "Can't get RFCOMM connection information: %s (%d)", 243 `¡»¼Ü ( ”ºo ),ƒrrno); 247 ià( ´iÜ™y > 0 && `£tsockÝt ( sk , SOL_SOCKET , SO_PRIORITY , &priority, 248 ( ´iÜ™y )) < 0) { 249 `sy¦og ( LOG_ERR , "Can't set socket…riority: %s (%d)", 250 `¡»¼Ü ( ”ºo ),ƒrrno); 251  ”rÜ ; 254 ià( `g‘sockÝt ( sk , SOL_SOCKET , SO_PRIORITY , & Ýt , & ÝŽ’ ) < 0) { 255 `sy¦og ( LOG_ERR , "Can't get socket…riority: %s (%d)", 256 `¡»¼Ü ( ”ºo ),ƒrrno); 257  ”rÜ ; 260 `sy¦og ( LOG_INFO , "Connected [handle %d, class 0x%02x%02x%02x, " 261 "´iÜ™y %d]", cÚn . hci_hªdË , cÚn. dev_þass [2], 262 cÚn . dev_þass [1], cÚn.dev_þass[0], Ýt ); 264  sk ; 266 ”rÜ : 267 `þo£ ( sk ); 269 } } 271  do_li¡’ ((* hªdËr )( sk )) 273  sockaddr_rc addr ; 274  rfcomm_cÚnšfo cÚn ; 275 sockËn_t ÝŽ’ ; 276  sk , nsk , Ýt ; 277  ba [18]; 280 sk = `sock‘ ( PF_BLUETOOTH , sockty³ , BTPROTO_RFCOMM ); 281 ià( sk < 0) { 282 `sy¦og ( LOG_ERR , "Can't create socket: %s (%d)", 283 `¡»¼Ü ( ”ºo ),ƒrrno); 284 `ex™ (1); 288 `mem£t (& addr , 0, (addr)); 289 addr . rc_çmžy = AF_BLUETOOTH ; 290 `baýy (& addr . rc_bdaddr , & bdaddr ); 291 addr . rc_chªÃl = chªÃl ; 293 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 294 `sy¦og ( LOG_ERR , "Can't bind socket: %s (%d)", 295 `¡»¼Ü ( ”ºo ),ƒrrno); 296  ”rÜ ; 300 Ýt = 0; 301 ià( ma¡” ) 302 Ýt |ð RFCOMM_LM_MASTER ; 303 ià( auth ) 304 Ýt |ð RFCOMM_LM_AUTH ; 305 ià( ’ü ) 306 Ýt |ð RFCOMM_LM_ENCRYPT ; 307 ià( £cu» ) 308 Ýt |ð RFCOMM_LM_SECURE ; 310 ià( Ýt && `£tsockÝt ( sk , SOL_RFCOMM , RFCOMM_LM , &opt, (opt)) < 0) { 311 `sy¦og ( LOG_ERR , "Can't set RFCOMM†ink mode: %s (%d)", 312 `¡»¼Ü ( ”ºo ),ƒrrno); 313  ”rÜ ; 317 Ýt = deãr_£tup ; 319 ià( Ýt && `£tsockÝt ( sk , SOL_BLUETOOTH , BT_DEFER_SETUP , 320 & Ýt , (opt)) < 0) { 321 `sy¦og ( LOG_ERR , "Can'tƒnable deferred setup : %s (%d)", 322 `¡»¼Ü ( ”ºo ),ƒrrno); 323  ”rÜ ; 327 ià( `li¡’ ( sk , 10)) { 328 `sy¦og ( LOG_ERR ,"Can‚ot†isten onhe socket: %s (%d)", 329 `¡»¼Ü ( ”ºo ),ƒrrno); 330  ”rÜ ; 334 `mem£t (& addr , 0, (addr)); 335 ÝŽ’ = ( addr ); 337 ià( `g‘sockÇme ( sk , ( sockaddr *è& addr , & ÝŽ’ ) < 0) { 338 `sy¦og ( LOG_ERR , "Can't get socket‚ame: %s (%d)", 339 `¡»¼Ü ( ”ºo ),ƒrrno); 340  ”rÜ ; 343 chªÃl = addr . rc_chªÃl ; 345 `sy¦og ( LOG_INFO , "Wa™šg fÜ cÚÃùiÚ oÀchªÃÈ%d ...", chªÃl ); 348 `mem£t (& addr , 0, (addr)); 349 ÝŽ’ = ( addr ); 351 nsk = `acû± ( sk , ( sockaddr *è& addr , & ÝŽ’ ); 352 ià( nsk < 0) { 353 `sy¦og ( LOG_ERR ,"Accept failed: %s (%d)", 354 `¡»¼Ü ( ”ºo ),ƒrrno); 355  ”rÜ ; 357 ià( `fÜk ()) { 359 `þo£ ( nsk ); 363 `þo£ ( sk ); 366 `mem£t (& cÚn , 0, (conn)); 367 ÝŽ’ = ( cÚn ); 369 ià( `g‘sockÝt ( nsk , SOL_RFCOMM , RFCOMM_CONNINFO , & cÚn , & ÝŽ’ ) < 0) { 370 `sy¦og ( LOG_ERR , "Can't get RFCOMM connection information: %s (%d)", 371 `¡»¼Ü ( ”ºo ),ƒrrno); 376 ià( ´iÜ™y > 0 && `£tsockÝt ( sk , SOL_SOCKET , SO_PRIORITY , 377 & ´iÜ™y , (priority)) < 0) { 378 `sy¦og ( LOG_ERR , "Can't set socket…riority: %s (%d)", 379 `¡»¼Ü ( ”ºo ),ƒrrno); 380 `þo£ ( nsk ); 381  ”rÜ ; 384 ÝŽ’ = ( ´iÜ™y ); 385 ià( `g‘sockÝt ( nsk , SOL_SOCKET , SO_PRIORITY , & Ýt , & ÝŽ’ ) < 0) { 386 `sy¦og ( LOG_ERR , "Can't get socket…riority: %s (%d)", 387 `¡»¼Ü ( ”ºo ),ƒrrno); 388  ”rÜ ; 391 `ba2¡r (& addr . rc_bdaddr , ba ); 392 `sy¦og ( LOG_INFO , "Connect from %s [handle %d, " 394 ba , cÚn . hci_hªdË , cÚn. dev_þass [2], 395 cÚn . dev_þass [1], cÚn.dev_þass[0], Ýt ); 399 ià( time¡amp ) { 400  t = 1; 402 ià( `£tsockÝt ( nsk , SOL_SOCKET , SO_TIMESTAMP , & t , (t)) < 0) { 403 `sy¦og ( LOG_ERR , "Can'tƒnable SO_TIMESTAMP: %s (%d)", 404 `¡»¼Ü ( ”ºo ),ƒrrno); 405  ”rÜ ; 411 ià( lšg” ) { 412  lšg” l = { . l_Úoff = 1, . l_lšg” =†inger }; 414 ià( `£tsockÝt ( nsk , SOL_SOCKET , SO_LINGER , & l , (l)) < 0) { 415 `sy¦og ( LOG_ERR , "Can'tƒnable SO_LINGER: %s (%d)", 416 `¡»¼Ü ( ”ºo ),ƒrrno); 417 `þo£ ( nsk ); 418  ”rÜ ; 423 ià( deãr_£tup ) { 424 `sy¦og ( LOG_INFO , "Waiting for %d seconds", 425 `abs ( deãr_£tup ) - 1); 426 `¦“p ( `abs ( deãr_£tup ) - 1); 428 ià( deãr_£tup < 0) { 429 `þo£ ( nsk ); 430  ”rÜ ; 434 `hªdËr ( nsk ); 436 `sy¦og ( LOG_INFO , "Disconnect: %m"); 437 `ex™ (0); 440 ”rÜ : 441 `þo£ ( sk ); 442 `ex™ (1); 443 } } 445  $dump_mode ( sk ) 447  Ën ; 449 `sy¦og ( LOG_INFO , "Receiving ..."); 450 ( Ën = `»ad ( sk , buf , d©a_size )) > 0) 451 `sy¦og ( LOG_INFO , "Reûived %d by‹s", Ën ); 452 } } 454  $§ve_mode ( sk ) 456  Ën , »t ; 457 * b ; 459 b = `m®loc ( d©a_size ); 460 ià(! b ) { 461 `sy¦og ( LOG_ERR , "Failedo open fileo save„ecv data"); 465 `sy¦og ( LOG_INFO , "Receiving ..."); 466 ( Ën = `»ad ( sk , b , d©a_size )) > 0) { 467 »t = `wr™e ( §ve_fd , b , Ën ); 468 ià( »t < 0) 469  dÚe ; 472 dÚe : 473 `ä“ ( b ); 474 } } 476  $»cv_mode ( sk ) 478  timev® tv_beg , tv_’d , tv_diff ; 479  ts [30]; 480  tÙ® ; 482 `sy¦og ( LOG_INFO , "Receiving ..."); 484 `mem£t ( ts , 0, (ts)); 487 `g‘timeofday (& tv_beg , NULL ); 488 tÙ® = 0; 489  tÙ® < d©a_size ) { 492  r ; 494 ià(( r = `»cv ( sk , buf , d©a_size , 0)) < 0) { 495 ià( r < 0) 496 `sy¦og ( LOG_ERR , "Read failed: %s (%d)", 497 `¡»¼Ü ( ”ºo ),ƒrrno); 501 ià( time¡amp ) { 502  timev® tv ; 504 ià( `ioùl ( sk , SIOCGSTAMP , & tv ) < 0) { 505 time¡amp = 0; 506 `mem£t ( ts , 0, (ts)); 508 `¥rštf ( ts , "[%ld.%ld] ", 509 tv . tv_£c ,v. tv_u£c ); 515 sq = `btohl (*( ušt32_t *è buf ); 516 ià( £q !ð sq ) { 517 `sy¦og ( LOG_INFO , "£q missm©ch: %d -> %d", £q , sq ); 518 £q = sq ; 520 £q ++; 523 l = `btohs (*( ušt16_t *è( buf + 4)); 524 ià( r !ð l ) { 525 `sy¦og ( LOG_INFO , "sizmissm©ch: %d -> %d", r , l ); 530  i = 6; i < r ; i++) { 531 ià( buf [ i ] != 0x7f) 532 `sy¦og ( LOG_INFO , "d©¨missm©ch: by‹ %d 0x%2.2x", i , buf [i]); 535 tÙ® +ð r ; 537 `g‘timeofday (& tv_’d , NULL ); 539 `tim”sub (& tv_’d ,& tv_beg ,& tv_diff ); 541 `sy¦og ( LOG_INFO ,"%s%ld by‹ š %.2à£c, %.2àkB/s", ts , tÙ® , 542 `tv2æ ( tv_diff ), ()( tÙ® /v2fl(tv_diff) ) / 1024.0); 544 } } 546  $do_£nd ( sk ) 548 ušt32_t £q ; 549  i , fd , Ën ; 551 `sy¦og ( LOG_INFO ,"Sending ..."); 553 ià( fž’ame ) { 554 fd = `Ý’ ( fž’ame , O_RDONLY ); 555 ià( fd < 0) { 556 `sy¦og ( LOG_ERR , "Open failed: %s (%d)", 557 `¡»¼Ü ( ”ºo ),ƒrrno); 558 `ex™ (1); 560 Ën = `»ad ( fd , buf , d©a_size ); 561 `£nd ( sk , buf , Ën , 0); 564  i = 6; i < d©a_size ; i++) 565 buf [ i ] = 0x7f; 568 £q = 0; 569 ( num_äames == -1) || (num_frames-- > 0)) { 570 `put_Ë32 ( £q , buf ); 571 `put_Ë16 ( d©a_size , buf + 4); 573 £q ++; 575 ià( `£nd ( sk , buf , d©a_size , 0) <= 0) { 576 `sy¦og ( LOG_ERR , "Send failed: %s (%d)", 577 `¡»¼Ü ( ”ºo ),ƒrrno); 578 `ex™ (1); 581 ià( num_äames && d–ay && couÁ && !( £q % count)) 582 `u¦“p ( d–ay ); 584 } } 586  $£nd_mode ( sk ) 588 `do_£nd ( sk ); 590 `sy¦og ( LOG_INFO , "Closing channel ..."); 591 ià( `shutdown ( sk , SHUT_RDWR ) < 0) 592 `sy¦og ( LOG_INFO , "Close failed: %m"); 594 `sy¦og ( LOG_INFO , "Done"); 595 } } 597  $»cÚÃù_mode (* svr ) 600  sk = `do_cÚÃù ( svr ); 601 `þo£ ( sk ); 603 } } 605  $muÉi_cÚÃù_mode ( ¬gc , * ¬gv []) 607  i , n , sk ; 610  n = 0;‚ < ¬gc ;‚++) { 611  i = 0; i < couÁ ; i++) { 612 ià( `fÜk ()) 616 sk = `do_cÚÃù ( ¬gv [ n ]); 617 `u¦“p (500); 618 `þo£ ( sk ); 619 `ex™ (0); 622 `¦“p (4); 624 } } 626  $autom©ed_£nd_»cv () 628  sk ; 629  deviû [18]; 631 ià( `fÜk ()) { 632 ià(! §vefže ) { 634 `do_li¡’ ( »cv_mode ); 637 §ve_fd = `Ý’ ( §vefže , O_CREAT | O_WRONLY , 638 S_IRUSR | S_IWUSR ); 639 ià( §ve_fd < 0) 640 `sy¦og ( LOG_ERR , "Failedo open fileo save data"); 643 `do_li¡’ ( §ve_mode ); 645 `ba2¡r (& bdaddr , deviû ); 647 sk = `do_cÚÃù ( deviû ); 648 ià( sk < 0) 649 `ex™ (1); 650 `£nd_mode ( sk ); 652 } } 654  $sig_chžd_ex™ ( code ) 656 ià( §ve_fd >= 0) 657 `þo£ ( §ve_fd ); 659 `sy¦og ( LOG_INFO , "Exit"); 660 `ex™ (0); 661 } } 663  $u§ge () 665 `´štf ("rctest - RFCOMMesting\n" 667 `´štf ("\trctest [options] [bdaddr]\n"); 668 `´štf ("Modes:\n" 679 `´štf ("Options:\n" 694 } } 696  $maš ( ¬gc , * ¬gv []) 698  sigaùiÚ § ; 699  Ýt , sk , mode = RECV , Ãed_addr = 0; 701 `baýy (& bdaddr , BDADDR_ANY ); 702 `baýy (& auto_bdaddr , BDADDR_ANY ); 704 ( Ýt = `g‘Ýt ( ¬gc , ¬gv ,"rdscuwmÇ:b:i:P:U:B:O:N:MAESL:W:C:D:Y:T")è!ð EOF ) { 705  Ýt ) { 707 mode = RECV ; 711 mode = SEND ; 712 Ãed_addr = 1; 716 mode = LSEND ; 720 mode = CRECV ; 721 Ãed_addr = 1; 725 mode = DUMP ; 729 mode = RECONNECT ; 730 Ãed_addr = 1; 734 mode = CONNECT ; 735 Ãed_addr = 1; 739 mode = MULTY ; 740 Ãed_addr = 1; 744 mode = AUTO ; 746 ià(! `¡ºÿ£cmp ( Ýrg , "hci", 3)) 747 `hci_devba ( `©oi ( Ýrg + 3), & auto_bdaddr ); 749 `¡r2ba ( Ýrg , & auto_bdaddr ); 753 d©a_size = `©oi ( Ýrg ); 757 ià(! `¡ºÿ£cmp ( Ýrg , "hci", 3)) 758 `hci_devba ( `©oi ( Ýrg + 3), & bdaddr ); 760 `¡r2ba ( Ýrg , & bdaddr ); 764 chªÃl = `©oi ( Ýrg ); 768 ià(! `¡rÿ£cmp ( Ýrg , "spp")) 769 uuid = SERIAL_PORT_SVCLASS_ID ; 770 ià(! `¡ºÿ£cmp ( Ýrg , "0x", 2)) 771 uuid = `¡¹oul ( Ýrg + 2, NULL , 16); 773 uuid = `©oi ( Ýrg ); 777 ma¡” = 1; 781 auth = 1; 785 ’ü = 1; 789 £cu» = 1; 793 lšg” = `©oi ( Ýrg ); 797 deãr_£tup = `©oi ( Ýrg ); 801 fž’ame = `¡rdup ( Ýrg ); 805 §vefže = `¡rdup ( Ýrg ); 809 num_äames = `©oi ( Ýrg ); 813 couÁ = `©oi ( Ýrg ); 817 d–ay = `©oi ( Ýrg ) * 1000; 821 ´iÜ™y = `©oi ( Ýrg ); 825 time¡amp = 1; 829 `u§ge (); 830 `ex™ (1); 834 ià( Ãed_addr && !( ¬gc - Ýtšd )) { 835 `u§ge (); 836 `ex™ (1); 839 ià(!( buf = `m®loc ( d©a_size ))) { 840 `³¼Ü ("Can't‡llocate data buffer"); 841 `ex™ (1); 844 `mem£t (& § , 0, (sa)); 845 ià( mode =ð AUTO ) 846 § . §_hªdËr = sig_chžd_ex™ ; 848 § . §_hªdËr = SIG_IGN ; 849 § . §_æags = SA_NOCLDSTOP ; 850 `sigaùiÚ ( SIGCHLD , & § , NULL ); 852 `Ý’log ("rùe¡", LOG_PERROR | LOG_PID , LOG_LOCAL0 ); 854  mode ) { 855  RECV : 856 `do_li¡’ ( »cv_mode ); 859  CRECV : 860 sk = `do_cÚÃù ( ¬gv [ Ýtšd ]); 861 ià( sk < 0) 862 `ex™ (1); 863 `»cv_mode ( sk ); 866  DUMP : 867 `do_li¡’ ( dump_mode ); 870  SEND : 871 sk = `do_cÚÃù ( ¬gv [ Ýtšd ]); 872 ià( sk < 0) 873 `ex™ (1); 874 `£nd_mode ( sk ); 877  LSEND : 878 `do_li¡’ ( £nd_mode ); 881  RECONNECT : 882 `»cÚÃù_mode ( ¬gv [ Ýtšd ]); 885  MULTY : 886 `muÉi_cÚÃù_mode ( ¬gc - Ýtšd , ¬gv + optind); 889  CONNECT : 890 sk = `do_cÚÃù ( ¬gv [ Ýtšd ]); 891 ià( sk < 0) 892 `ex™ (1); 893 `dump_mode ( sk ); 896  AUTO : 897 `autom©ed_£nd_»cv (); 901 `sy¦og ( LOG_INFO , "Exit"); 903 `þo£log (); 906 } } @tools/rfcomm-tester.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~<¡dšt.h > 30  ~ 31  ~<”ºo.h > 32  ~<¡dboÞ.h > 34  ~ 36  ~"lib/blu‘oÙh.h " 37  ~"lib/mgmt.h " 38  ~"blu‘oÙh/rfcomm.h " 40  ~"mÚ™Ü/bt.h " 41  ~"emuÏtÜ/btho¡.h " 42  ~"emuÏtÜ/hc›mu.h " 44  ~"¤c/sh¬ed/‹¡”.h " 45  ~"¤c/sh¬ed/mgmt.h " 47  s‹¡_d©a { 48  mgmt * mmgmt ; 49 ušt16_t mmgmt_šdex ; 50  hc›mu * mhc›mu ; 51 hc›mu_ty³ mhc›mu_ty³ ; 52 cÚ¡ * m‹¡_d©a ; 53  mio_id ; 54 ušt16_t mcÚn_hªdË ; 57  srfcomm_þ›Á_d©a { 58 ušt8_t m£rv”_chªÃl ; 59 ušt8_t mþ›Á_chªÃl ; 60  mex³ùed_cÚÃù_”r ; 61 cÚ¡ ušt8_t * m£nd_d©a ; 62 cÚ¡ ušt8_t * m»ad_d©a ; 63 ušt16_t md©a_Ën ; 66  srfcomm_£rv”_d©a { 67 ušt8_t m£rv”_chªÃl ; 68 ušt8_t mþ›Á_chªÃl ; 69 boÞ mex³ùed_¡©us ; 70 cÚ¡ ušt8_t * m£nd_d©a ; 71 cÚ¡ ušt8_t * m»ad_d©a ; 72 ušt16_t md©a_Ën ; 75  $mgmt_debug (cÚ¡ * ¡r , * u£r_d©a ) 77 cÚ¡ * ´efix = u£r_d©a ; 79 `‹¡”_´št ("%s%s", ´efix , ¡r ); 80 } } 82  $»ad_šfo_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 83 cÚ¡ * ·¿m , * u£r_d©a ) 85  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 86 cÚ¡  mgmt_½_»ad_šfo * ½ = ·¿m ; 87  addr [18]; 88 ušt16_t mªuçùu»r ; 89 ušt32_t suµÜ‹d_£‰šgs , cu¼’t_£‰šgs ; 91 `‹¡”_´št ("Read Info callback"); 92 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 94 ià( ¡©us || ! ·¿m ) { 95 `‹¡”_´e_£tup_çžed (); 99 `ba2¡r (& ½ -> bdaddr , addr ); 100 mªuçùu»r = `btohs ( ½ ->manufacturer); 101 suµÜ‹d_£‰šgs = `btohl ( ½ ->supported_settings); 102 cu¼’t_£‰šgs = `btohl ( ½ ->current_settings); 104 `‹¡”_´št (" Add»ss: %s", addr ); 105 `‹¡”_´št (" V”siÚ: 0x%02x", ½ -> v”siÚ ); 106 `‹¡”_´št (" Mªuçùu»r: 0x%04x", mªuçùu»r ); 107 `‹¡”_´št (" SuµÜ‹d s‘tšgs: 0x%08x", suµÜ‹d_£‰šgs ); 108 `‹¡”_´št (" Cu¼’ˆ£‰šgs: 0x%08x", cu¼’t_£‰šgs ); 109 `‹¡”_´št (" Class: 0x%02x%02x%02x", 110 ½ -> dev_þass [2],„p->dev_class[1],„p->dev_class[0]); 111 `‹¡”_´št (" Name: %s", ½ -> Çme ); 112 `‹¡”_´št (" Sh܈Çme: %s", ½ -> shÜt_Çme ); 114 ià( `¡rcmp ( `hc›mu_g‘_add»ss ( d©a -> hc›mu ), addr )) { 115 `‹¡”_´e_£tup_çžed (); 119 `‹¡”_´e_£tup_com¶‘e (); 120 } } 122  $šdex_added_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 123 cÚ¡ * ·¿m , * u£r_d©a ) 125  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 127 `‹¡”_´št ("Index Added callback"); 128 `‹¡”_´št (" Index: 0x%04x", šdex ); 130 d©a -> mgmt_šdex = šdex ; 132 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_INFO , d©a-> mgmt_šdex , 0, NULL , 133 »ad_šfo_ÿÎback , NULL , NULL); 134 } } 136  $šdex_»moved_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 137 cÚ¡ * ·¿m , * u£r_d©a ) 139  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 141 `‹¡”_´št ("Index Removed callback"); 142 `‹¡”_´št (" Index: 0x%04x", šdex ); 144 ià( šdex !ð d©a -> mgmt_šdex ) 147 `mgmt_uÄegi¡”_šdex ( d©a -> mgmt , d©a-> mgmt_šdex ); 149 `mgmt_uÄef ( d©a -> mgmt ); 150 d©a -> mgmt = NULL ; 152 `‹¡”_po¡_‹¬down_com¶‘e (); 153 } } 155  $»ad_šdex_li¡_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 156 cÚ¡ * ·¿m , * u£r_d©a ) 158  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 160 `‹¡”_´št ("Read Index List callback"); 161 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 163 ià( ¡©us || ! ·¿m ) { 164 `‹¡”_´e_£tup_çžed (); 168 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_INDEX_ADDED , MGMT_INDEX_NONE , 169 šdex_added_ÿÎback , NULL , NULL); 171 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_INDEX_REMOVED , MGMT_INDEX_NONE , 172 šdex_»moved_ÿÎback , NULL , NULL); 174 d©a -> hc›mu = `hc›mu_Ãw (d©a-> hc›mu_ty³ ); 175 ià(! d©a -> hc›mu ) { 176 `‹¡”_w¬n ("Failedo setup HCIƒmulation"); 177 `‹¡”_´e_£tup_çžed (); 180 `‹¡”_´št ("New hciemu instance created"); 181 } } 183  $‹¡_´e_£tup (cÚ¡ * ‹¡_d©a ) 185  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 187 d©a -> mgmt = `mgmt_Ãw_deçuÉ (); 188 ià(! d©a -> mgmt ) { 189 `‹¡”_w¬n ("Failedo setup management interface"); 190 `‹¡”_´e_£tup_çžed (); 194 ià( `‹¡”_u£_debug ()) 195 `mgmt_£t_debug ( d©a -> mgmt , mgmt_debug , "mgmt: ", NULL ); 197 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_INDEX_LIST , MGMT_INDEX_NONE , 0, NULL , 198 »ad_šdex_li¡_ÿÎback , NULL , NULL); 199 } } 201  $‹¡_po¡_‹¬down (cÚ¡ * ‹¡_d©a ) 203  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 205 ià( d©a -> io_id > 0) { 206 `g_sourû_»move ( d©a -> io_id ); 207 d©a -> io_id = 0; 210 `hc›mu_uÄef ( d©a -> hc›mu ); 211 d©a -> hc›mu = NULL ; 212 } } 214  $‹¡_d©a_ä“ (* ‹¡_d©a ) 216  ‹¡_d©a * d©a =est_data; 218 `ä“ ( d©a ); 219 } } 221  $þ›Á_cÚÃùabË_com¶‘e ( ušt16_t Ýcode , ušt8_t ¡©us , 222 cÚ¡ * ·¿m , ušt8_t Ën , 223 * u£r_d©a ) 225  Ýcode ) { 226  BT_HCI_CMD_WRITE_SCAN_ENABLE : 232 `‹¡”_´št ("Cl›Á s‘ cÚÃùabË stu 0x%02x", ¡©us ); 234 ià( ¡©us ) 235 `‹¡”_£tup_çžed (); 237 `‹¡”_£tup_com¶‘e (); 238 } } 240  $£tup_pow”ed_þ›Á_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 241 cÚ¡ * ·¿m , * u£r_d©a ) 243  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 244  btho¡ *bthost; 246 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 247 `‹¡”_£tup_çžed (); 251 `‹¡”_´št ("Controller…owered on"); 253 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 254 `btho¡_£t_cmd_com¶‘e_cb ( btho¡ , þ›Á_cÚÃùabË_com¶‘e , d©a ); 255 `btho¡_wr™e_sÿn_’abË ( btho¡ , 0x03); 256 } } 258  $£tup_pow”ed_þ›Á (cÚ¡ * ‹¡_d©a ) 260  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 261  ·¿m [] = { 0x01 }; 263 `‹¡”_´št ("Powering on controller"); 265 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 266 ( ·¿m ),…¬am, £tup_pow”ed_þ›Á_ÿÎback , 267 NULL , NULL); 268 } } 270  $£tup_pow”ed_£rv”_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 271 cÚ¡ * ·¿m , * u£r_d©a ) 273 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 274 `‹¡”_£tup_çžed (); 278 `‹¡”_´št ("Controller…owered on"); 280 `‹¡”_£tup_com¶‘e (); 281 } } 283  $£tup_pow”ed_£rv” (cÚ¡ * ‹¡_d©a ) 285  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 286  ·¿m [] = { 0x01 }; 288 `‹¡”_´št ("Powering on controller"); 290 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_CONNECTABLE , d©a-> mgmt_šdex , 291 ( ·¿m ),…aram, 292 NULL , NULL, NULL); 294 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 295 ( ·¿m ),…¬am, £tup_pow”ed_£rv”_ÿÎback , 296 NULL , NULL); 297 } } 299 cÚ¡  rfcomm_þ›Á_d©a gcÚÃù_sucûss = { 300 . £rv”_chªÃl = 0x0c, 301 . gþ›Á_chªÃl = 0x0c 304 cÚ¡ ušt8_t gd©a [] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; 306 cÚ¡  rfcomm_þ›Á_d©a gcÚÃù_£nd_sucûss = { 307 . £rv”_chªÃl = 0x0c, 308 . gþ›Á_chªÃl = 0x0c, 309 . gd©a_Ën = ( d©a ), 310 . g£nd_d©a = d©a 313 cÚ¡  rfcomm_þ›Á_d©a gcÚÃù_»ad_sucûss = { 314 . £rv”_chªÃl = 0x0c, 315 . gþ›Á_chªÃl = 0x0c, 316 . gd©a_Ën = ( d©a ), 317 . g»ad_d©a = d©a 320 cÚ¡  rfcomm_þ›Á_d©a gcÚÃù_nv® = { 321 . £rv”_chªÃl = 0x0c, 322 . gþ›Á_chªÃl = 0x0e, 323 . gex³ùed_cÚÃù_”r = - ECONNREFUSED 326 cÚ¡  rfcomm_£rv”_d©a gli¡’_sucûss = { 327 . £rv”_chªÃl = 0x0c, 328 . gþ›Á_chªÃl = 0x0c, 329 . gex³ùed_¡©us = Œue 332 cÚ¡  rfcomm_£rv”_d©a gli¡’_£nd_sucûss = { 333 . £rv”_chªÃl = 0x0c, 334 . gþ›Á_chªÃl = 0x0c, 335 . gex³ùed_¡©us = Œue , 336 . gd©a_Ën = ( d©a ), 337 . g£nd_d©a = d©a 340 cÚ¡  rfcomm_£rv”_d©a gli¡’_»ad_sucûss = { 341 . £rv”_chªÃl = 0x0c, 342 . gþ›Á_chªÃl = 0x0c, 343 . gex³ùed_¡©us = Œue , 344 . gd©a_Ën = ( d©a ), 345 . g»ad_d©a = d©a 348 cÚ¡  rfcomm_£rv”_d©a gli¡’_nv® = { 349 . £rv”_chªÃl = 0x0c, 350 . gþ›Á_chªÃl = 0x0e, 351 . gex³ùed_¡©us = çl£ 354  $‹¡_basic (cÚ¡ * ‹¡_d©a ) 356  sk ; 358 sk = `sock‘ ( PF_BLUETOOTH , SOCK_STREAM , BTPROTO_RFCOMM ); 359 ià( sk < 0) { 360 `‹¡”_w¬n ("Cª'ˆü—‹ sock‘: % (%d)", `¡»¼Ü ( ”ºo ), 361 ”ºo ); 362 `‹¡”_‹¡_çžed (); 366 `þo£ ( sk ); 368 `‹¡”_‹¡_·s£d (); 369 } } 371  $ü—‹_rfcomm_sock ( bdaddr_t * add»ss , ušt8_t chªÃl ) 373  sk ; 374  sockaddr_rc addr ; 376 sk = `sock‘ ( PF_BLUETOOTH , SOCK_STREAM | SOCK_NONBLOCK , BTPROTO_RFCOMM ); 378 `mem£t (& addr , 0, (addr)); 379 addr . rc_çmžy = AF_BLUETOOTH ; 380 addr . rc_chªÃl = chªÃl ; 381 `baýy (& addr . rc_bdaddr , add»ss ); 383 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 384 `þo£ ( sk ); 388  sk ; 389 } } 391  $cÚÃù_rfcomm_sock ( sk , cÚ¡ bdaddr_t * bdaddr , ušt8_t chªÃl ) 393  sockaddr_rc addr ; 394  ”r ; 396 `mem£t (& addr , 0, (addr)); 397 addr . rc_çmžy = AF_BLUETOOTH ; 398 `baýy (& addr . rc_bdaddr , bdaddr ); 399 addr . rc_chªÃl = `htobs ( chªÃl ); 401 ”r = `cÚÃù ( sk , ( sockaddr *è& addr , (addr)); 402 ià( ”r < 0 && !( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINPROGRESS )) 403  ”r ; 406 } } 408  gboÞ—n $þ›Á_»ûived_d©a ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 409 gpoš‹r u£r_d©a ) 411  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 412 cÚ¡  rfcomm_þ›Á_d©a * þ›Á_d©a = d©a -> ‹¡_d©a ; 413  sk ; 414 ssize_t »t ; 415  buf [248]; 417 sk = `g_io_chªÃl_unix_g‘_fd ( io ); 419 »t = `»ad ( sk , buf , þ›Á_d©a -> d©a_Ën ); 420 ià( þ›Á_d©a -> d©a_Ën !ð »t ) { 421 `‹¡”_‹¡_çžed (); 422  çl£ ; 425 ià( `memcmp ( þ›Á_d©a -> »ad_d©a , buf , cl›Á_d©a-> d©a_Ën )) 426 `‹¡”_‹¡_çžed (); 428 `‹¡”_‹¡_·s£d (); 430  çl£ ; 431 } } 433  gboÞ—n $rc_cÚÃù_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 434 gpoš‹r u£r_d©a ) 436  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 437 cÚ¡  rfcomm_þ›Á_d©a * þ›Á_d©a = d©a -> ‹¡_d©a ; 438 sockËn_t Ën = (); 439  sk , ”r , sk_”r ; 441 d©a -> io_id = 0; 443 sk = `g_io_chªÃl_unix_g‘_fd ( io ); 445 ià( `g‘sockÝt ( sk , SOL_SOCKET , SO_ERROR , & sk_”r , & Ën ) < 0) 446 ”r = - ”ºo ; 448 ”r = - sk_”r ; 450 ià( þ›Á_d©a -> ex³ùed_cÚÃù_”r && 451 ”r =ð þ›Á_d©a -> ex³ùed_cÚÃù_”r ) { 452 `‹¡”_‹¡_·s£d (); 453  çl£ ; 456 ià( þ›Á_d©a -> £nd_d©a ) { 457 ssize_t »t ; 459 »t = `wr™e ( sk , þ›Á_d©a -> £nd_d©a , cl›Á_d©a-> d©a_Ën ); 460 ià( þ›Á_d©a -> d©a_Ën !ð »t ) 461 `‹¡”_‹¡_çžed (); 463  çl£ ; 464 } ià( þ›Á_d©a -> »ad_d©a ) { 465 `g_io_add_w©ch ( io , G_IO_IN , þ›Á_»ûived_d©a , NULL ); 466 `btho¡_£nd_rfcomm_d©a ( `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ), 467 d©a -> cÚn_hªdË , 468 þ›Á_d©a -> þ›Á_chªÃl , 469 þ›Á_d©a -> »ad_d©a , 470 þ›Á_d©a -> d©a_Ën ); 471  çl£ ; 474 ià( ”r < 0) 475 `‹¡”_‹¡_çžed (); 477 `‹¡”_‹¡_·s£d (); 479  çl£ ; 480 } } 482  $þ›Á_hook_func (cÚ¡ * d©a , ušt16_t Ën , 483 * u£r_d©a ) 485  ‹¡_d©a *‹¡_d©¨ð `‹¡”_g‘_d©a (); 486 cÚ¡  rfcomm_þ›Á_d©a * þ›Á_d©a = ‹¡_d©a ->test_data; 487 ssize_t »t ; 489 ià( þ›Á_d©a -> d©a_Ën !ð Ën ) { 490 `‹¡”_‹¡_çžed (); 494 »t = `memcmp ( þ›Á_d©a -> £nd_d©a , d©a , Ën ); 495 ià( »t ) 496 `‹¡”_‹¡_çžed (); 498 `‹¡”_‹¡_·s£d (); 499 } } 501  $£rv”_hook_func (cÚ¡ * d©a , ušt16_t Ën , 502 * u£r_d©a ) 504  ‹¡_d©a *‹¡_d©¨ð `‹¡”_g‘_d©a (); 505 cÚ¡  rfcomm_£rv”_d©a * £rv”_d©a = ‹¡_d©a ->test_data; 506 ssize_t »t ; 508 ià( £rv”_d©a -> d©a_Ën !ð Ën ) { 509 `‹¡”_‹¡_çžed (); 513 »t = `memcmp ( £rv”_d©a -> £nd_d©a , d©a , Ën ); 514 ià( »t ) 515 `‹¡”_‹¡_çžed (); 517 `‹¡”_‹¡_·s£d (); 518 } } 520  $rfcomm_cÚÃù_cb ( ušt16_t hªdË , ušt16_ˆ cid , 521 * u£r_d©a , boÞ ¡©us ) 523  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 524 cÚ¡  rfcomm_þ›Á_d©a * þ›Á_d©a = d©a -> ‹¡_d©a ; 525  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 527 ià( þ›Á_d©a -> £nd_d©a ) 528 `btho¡_add_rfcomm_chª_hook ( btho¡ , hªdË , 529 þ›Á_d©a -> þ›Á_chªÃl , 530 þ›Á_hook_func , NULL ); 531 ià( þ›Á_d©a -> »ad_d©a ) 532 d©a -> cÚn_hªdË = hªdË ; 533 } } 535  $‹¡_cÚÃù (cÚ¡ * ‹¡_d©a ) 537  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 538  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 539 cÚ¡  rfcomm_þ›Á_d©a * þ›Á_d©a = d©a -> ‹¡_d©a ; 540 cÚ¡ ušt8_t * þ›Á_addr , * ma¡”_addr ; 541 GIOChªÃl * io ; 542  sk ; 544 `btho¡_add_l2ÿp_£rv” ( btho¡ , 0x0003, NULL , NULL); 545 `btho¡_add_rfcomm_£rv” ( btho¡ , þ›Á_d©a -> £rv”_chªÃl , 546 rfcomm_cÚÃù_cb , NULL ); 548 ma¡”_addr = `hc›mu_g‘_ma¡”_bdaddr ( d©a -> hc›mu ); 549 þ›Á_addr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 551 sk = `ü—‹_rfcomm_sock (( bdaddr_t *è ma¡”_addr , 0); 553 ià( `cÚÃù_rfcomm_sock ( sk , (cÚ¡ bdaddr_t *è þ›Á_addr , 554 þ›Á_d©a -> þ›Á_chªÃl ) < 0) { 555 `þo£ ( sk ); 556 `‹¡”_‹¡_çžed (); 560 io = `g_io_chªÃl_unix_Ãw ( sk ); 561 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 563 d©a -> io_id = `g_io_add_w©ch ( io , G_IO_OUT , rc_cÚÃù_cb , NULL ); 565 `g_io_chªÃl_uÄef ( io ); 567 `‹¡”_´št ("CÚÃù iÀ´og»s %d", sk ); 568 } } 570  gboÞ—n $£rv”_»ûived_d©a ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 571 gpoš‹r u£r_d©a ) 573  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 574 cÚ¡  rfcomm_£rv”_d©a * £rv”_d©a = d©a -> ‹¡_d©a ; 575  buf [1024]; 576 ssize_t »t ; 577  sk ; 579 sk = `g_io_chªÃl_unix_g‘_fd ( io ); 581 »t = `»ad ( sk , buf , £rv”_d©a -> d©a_Ën ); 582 ià( »t !ð £rv”_d©a -> d©a_Ën ) { 583 `‹¡”_‹¡_çžed (); 584  çl£ ; 587 ià( `memcmp ( buf , £rv”_d©a -> »ad_d©a , s”v”_d©a-> d©a_Ën )) 588 `‹¡”_‹¡_çžed (); 590 `‹¡”_‹¡_·s£d (); 592  çl£ ; 593 } } 595  gboÞ—n $rfcomm_li¡’_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 596 gpoš‹r u£r_d©a ) 598  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 599 cÚ¡  rfcomm_£rv”_d©a * £rv”_d©a = d©a -> ‹¡_d©a ; 600  sk , Ãw_sk ; 602 d©a -> io_id = 0; 604 sk = `g_io_chªÃl_unix_g‘_fd ( io ); 606 Ãw_sk = `acû± ( sk , NULL , NULL); 607 ià( Ãw_sk < 0) { 608 `‹¡”_‹¡_çžed (); 609  çl£ ; 612 ià( £rv”_d©a -> £nd_d©a ) { 613 ssize_t »t ; 615 »t = `wr™e ( Ãw_sk , £rv”_d©a -> £nd_d©a , 616 £rv”_d©a -> d©a_Ën ); 617 ià( »t !ð £rv”_d©a -> d©a_Ën ) 618 `‹¡”_‹¡_çžed (); 620 `þo£ ( Ãw_sk ); 621  çl£ ; 622 } ià( £rv”_d©a -> »ad_d©a ) { 623 GIOChªÃl * Ãw_io ; 625 Ãw_io = `g_io_chªÃl_unix_Ãw ( Ãw_sk ); 626 `g_io_chªÃl_£t_þo£_Ú_uÄef ( Ãw_io , TRUE ); 628 d©a -> io_id = `g_io_add_w©ch ( Ãw_io , G_IO_IN , 629 £rv”_»ûived_d©a , NULL ); 631 `g_io_chªÃl_uÄef ( Ãw_io ); 632  çl£ ; 635 `þo£ ( Ãw_sk ); 637 `‹¡”_‹¡_·s£d (); 639  çl£ ; 640 } } 642  $cÚÃùiÚ_cb ( ušt16_t hªdË , ušt16_ˆ cid , * u£r_d©a , 643 boÞ ¡©us ) 645  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 646 cÚ¡  rfcomm_£rv”_d©a * £rv”_d©a = d©a -> ‹¡_d©a ; 647  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 649 ià( £rv”_d©a -> »ad_d©a ) { 650 d©a -> cÚn_hªdË = hªdË ; 651 `btho¡_£nd_rfcomm_d©a ( btho¡ , d©a -> cÚn_hªdË , 652 £rv”_d©a -> þ›Á_chªÃl , 653 £rv”_d©a -> »ad_d©a , 654 £rv”_d©a -> d©a_Ën ); 656 } ià( £rv”_d©a -> d©a_Ën ) { 660 ià( £rv”_d©a -> ex³ùed_¡©us =ð ¡©us ) 661 `‹¡”_‹¡_·s£d (); 663 `‹¡”_‹¡_çžed (); 664 } } 666  $þ›Á_Ãw_cÚn ( ušt16_t hªdË , * u£r_d©a ) 668  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 669 cÚ¡  rfcomm_£rv”_d©a * £rv”_d©a = d©a -> ‹¡_d©a ; 670  btho¡ *bthost; 672 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 673 `btho¡_add_rfcomm_chª_hook ( btho¡ , hªdË , 674 £rv”_d©a -> þ›Á_chªÃl , 675 £rv”_hook_func , NULL ); 676 `btho¡_cÚÃù_rfcomm ( btho¡ , hªdË , £rv”_d©a -> þ›Á_chªÃl , 677 cÚÃùiÚ_cb , NULL ); 678 } } 680  $‹¡_£rv” (cÚ¡ * ‹¡_d©a ) 682  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 683 cÚ¡  rfcomm_£rv”_d©a * £rv”_d©a = d©a -> ‹¡_d©a ; 684 cÚ¡ ušt8_t * ma¡”_addr ; 685  btho¡ *bthost; 686 GIOChªÃl * io ; 687  sk ; 689 ma¡”_addr = `hc›mu_g‘_ma¡”_bdaddr ( d©a -> hc›mu ); 691 sk = `ü—‹_rfcomm_sock (( bdaddr_t *è ma¡”_addr , 692 £rv”_d©a -> £rv”_chªÃl ); 693 ià( sk < 0) { 694 `‹¡”_‹¡_çžed (); 698 ià( `li¡’ ( sk , 5) < 0) { 699 `‹¡”_w¬n ("listening on socket failed: %s (%u)", 700 `¡»¼Ü ( ”ºo ),ƒrrno); 701 `‹¡”_‹¡_çžed (); 702 `þo£ ( sk ); 706 io = `g_io_chªÃl_unix_Ãw ( sk ); 707 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 709 d©a -> io_id = `g_io_add_w©ch ( io , G_IO_IN , rfcomm_li¡’_cb , NULL ); 710 `g_io_chªÃl_uÄef ( io ); 712 `‹¡”_´št ("Listening for connections"); 714 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 715 `btho¡_£t_cÚÃù_cb ( btho¡ , þ›Á_Ãw_cÚn , d©a ); 717 `btho¡_hci_cÚÃù ( btho¡ , ma¡”_addr , BDADDR_BREDR ); 718 } } 720  #‹¡_rfcomm ( Çme , d©a , £tup , func ) \ 722  ‹¡_d©a * u£r ; \ 723 u£r = `m®loc (( ‹¡_d©a )); \ 724 ià(! u£r ) \ 726 u£r -> hc›mu_ty³ = HCIEMU_TYPE_BREDR ; \ 727 u£r -> ‹¡_d©a = d©a ; \ 728 u£r -> io_id = 0; \ 729 `‹¡”_add_fuÎ ( Çme , d©a , \ 730 ‹¡_´e_£tup , £tup , func , NULL , \ 731 ‹¡_po¡_‹¬down , 2, u£r , ‹¡_d©a_ä“ ); \ 732 } 0) ) 734  $maš ( ¬gc , * ¬gv []) 736 `‹¡”_š™ (& ¬gc , & ¬gv ); 738 `‹¡_rfcomm ("BasiøRFCOMM Sock‘ - Sucûss", NULL , 739 £tup_pow”ed_þ›Á , ‹¡_basic ); 740 `‹¡_rfcomm ("BasiøRFCOMM Sock‘ Cl›Á - Sucûss", & cÚÃù_sucûss , 741 £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 742 `‹¡_rfcomm ("Basic RFCOMM Socket Client - Write Success", 743 & cÚÃù_£nd_sucûss , £tup_pow”ed_þ›Á , 744 ‹¡_cÚÃù ); 745 `‹¡_rfcomm ("Basic RFCOMM Socket Client - Read Success", 746 & cÚÃù_»ad_sucûss , £tup_pow”ed_þ›Á , 747 ‹¡_cÚÃù ); 748 `‹¡_rfcomm ("Basic RFCOMM Socket Client - Conn Refused", 749 & cÚÃù_nv® , £tup_pow”ed_þ›Á , ‹¡_cÚÃù ); 750 `‹¡_rfcomm ("BasiøRFCOMM Sock‘ S”v” - Sucûss", & li¡’_sucûss , 751 £tup_pow”ed_£rv” , ‹¡_£rv” ); 752 `‹¡_rfcomm ("Basic RFCOMM Socket Server - Write Success", 753 & li¡’_£nd_sucûss , £tup_pow”ed_£rv” , 754 ‹¡_£rv” ); 755 `‹¡_rfcomm ("Basic RFCOMM Socket Server - Read Success", 756 & li¡’_»ad_sucûss , £tup_pow”ed_£rv” , 757 ‹¡_£rv” ); 758 `‹¡_rfcomm ("BasiøRFCOMM Sock‘ S”v” - CÚÀRefu£d", & li¡’_nv® , 759 £tup_pow”ed_£rv” , ‹¡_£rv” ); 761  `‹¡”_run (); 762 } } @tools/rfcomm.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<”ºo.h > 30  ~ 31  ~ 32  ~<¡dlib.h > 33  ~<¡ršg.h > 34  ~ 35  ~ 36  ~<‹rmios.h > 37  ~ 38  ~ 39  ~ 40  ~ 41  ~ 43  ~ 44  ~ 45  ~ 46  ~ 48  grfcomm_¿w_‰y = 0; 49  gauth = 0; 50  g’üy±iÚ = 0; 51  g£cu» = 0; 52  gma¡” = 0; 53  glšg” = 0; 55 * grfcomm_¡©e [] = { 68 vÞ©ž sig_©omic_t g__io_ÿnûËd = 0; 70  $sig_hup ( sig ) 73 } } 75  $sig_‹rm ( sig ) 77 __io_ÿnûËd = 1; 78 } } 80 * $rfcomm_æag¡o¡r ( ušt32_t æags ) 82  ¡r [100]; 83 ¡r [0] = 0; 85 `¡rÿt ( ¡r , "["); 87 ià( æags & (1 << RFCOMM_REUSE_DLC )) 88 `¡rÿt ( ¡r , "reuse-dlc "); 90 ià( æags & (1 << RFCOMM_RELEASE_ONHUP )) 91 `¡rÿt ( ¡r , "release-on-hup "); 93 ià( æags & (1 << RFCOMM_TTY_ATTACHED )) 94 `¡rÿt ( ¡r , "tty-attached"); 96 `¡rÿt ( ¡r , "]"); 97  ¡r ; 98 } } 100  $´št_dev_šfo ( rfcomm_dev_šfo * di ) 102  ¤c [18], d¡ [18], addr [40]; 104 `ba2¡r (& di -> ¤c , src); ba2¡r(&di-> d¡ , dst); 106 ià( `bacmp (& di -> ¤c , BDADDR_ANY ) == 0) 107 `¥rštf ( addr , "%s", d¡ ); 109 `¥rštf ( addr , "% -> %s", ¤c , d¡ ); 111 `´štf ("rfcomm%d: %s channel %d %s %s\n", 112 di -> id , addr , di-> chªÃl , 113 rfcomm_¡©e [ di -> ¡©e ], 114 di -> æags ? `rfcomm_æag¡o¡r (di->flags) : ""); 115 } } 117  $´št_dev_li¡ ( ùl ,  æags ) 119  rfcomm_dev_li¡_»q * dl ; 120  rfcomm_dev_šfo * di ; 121  i ; 123 dl = `m®loc ((*dlè+ RFCOMM_MAX_DEV * (* di )); 124 ià(! dl ) { 125 `³¼Ü ("Can't‡llocate memory"); 126 `ex™ (1); 129 dl -> dev_num = RFCOMM_MAX_DEV ; 130 di = dl -> dev_šfo ; 132 ià( `ioùl ( ùl , RFCOMMGETDEVLIST , (*è dl ) < 0) { 133 `³¼Ü ("Can't get device†ist"); 134 `ä“ ( dl ); 135 `ex™ (1); 138  i = 0; i < dl -> dev_num ; i++) 139 `´št_dev_šfo ( di + i ); 140 `ä“ ( dl ); 141 } } 143  $ü—‹_dev ( ùl ,  dev , ušt32_t æags , bdaddr_t * bdaddr ,  ¬gc , ** ¬gv ) 145  rfcomm_dev_»q »q ; 146  ”r ; 148 `mem£t (& »q , 0, (req)); 149 »q . dev_id = dev ; 150 »q . æags = flags; 151 `baýy (& »q . ¤c , bdaddr ); 153 ià( ¬gc < 2) { 154 `årštf ( ¡d”r , "Missing dev…arameter"); 155  - EINVAL ; 158 `¡r2ba ( ¬gv [1], & »q . d¡ ); 160 ià( ¬gc > 2) 161 »q . chªÃl = `©oi ( ¬gv [2]); 163 »q . chªÃl = 1; 165 ”r = `ioùl ( ùl , RFCOMMCREATEDEV , & »q ); 166 ià( ”r == -1) { 167 ”r = - ”ºo ; 169 ià( ”r =ð- EOPNOTSUPP ) 170 `årštf ( ¡d”r , "RFCOMM TTY support‚ot‡vailable\n"); 172 `³¼Ü ("Can't create device"); 175  ”r ; 176 } } 178  $»Ëa£_dev ( ùl ,  dev , ušt32_t æags ) 180  rfcomm_dev_»q »q ; 181  ”r ; 183 `mem£t (& »q , 0, (req)); 184 »q . dev_id = dev ; 186 ”r = `ioùl ( ùl , RFCOMMRELEASEDEV , & »q ); 187 ià( ”r < 0) 188 `³¼Ü ("Can't„elease device"); 190  ”r ; 191 } } 193  $»Ëa£_®l ( ùl ) 195  rfcomm_dev_li¡_»q * dl ; 196  rfcomm_dev_šfo * di ; 197  i ; 199 dl = `m®loc ((*dlè+ RFCOMM_MAX_DEV * (* di )); 200 ià(! dl ) { 201 `³¼Ü ("Can't‡llocate memory"); 202 `ex™ (1); 205 dl -> dev_num = RFCOMM_MAX_DEV ; 206 di = dl -> dev_šfo ; 208 ià( `ioùl ( ùl , RFCOMMGETDEVLIST , (*è dl ) < 0) { 209 `³¼Ü ("Can't get device†ist"); 210 `ä“ ( dl ); 211 `ex™ (1); 214  i = 0; i < dl -> dev_num ; i++) 215 `»Ëa£_dev ( ùl , ( di + i )-> id , 0); 217 `ä“ ( dl ); 219 } } 221  $run_cmdlše ( pÞlfd * p , sig£t_t * sigs , * devÇme , 222  ¬gc , ** ¬gv ) 224  i ; 225 pid_t pid ; 226 ** cmd¬gv ; 228 cmd¬gv = `m®loc (( ¬gc + 1) * (*)); 229 ià(! cmd¬gv ) 232  i = 0; i < ¬gc ; i++) 233 cmd¬gv [ i ] = ( `¡rcmp ( ¬gv [i], "{}"è=ð0è? devÇme :‡rgv[i]; 234 cmd¬gv [ i ] = NULL ; 236 pid = `fÜk (); 238  pid ) { 240 i = `execvp ( cmd¬gv [0], cmdargv); 241 `årštf ( ¡d”r , "Couldn'tƒxecute command %s (errno=%d:%s)\n", 242 cmd¬gv [0], ”ºo , `¡»¼Ü (errno)); 245 `årštf ( ¡d”r , "Couldn't forkoƒxecute command %s\n", 246 cmd¬gv [0]); 250  ¡©us ; 251 pid_t chžd ; 252  time¥ec ts ; 254 chžd = `wa™pid (-1, & ¡©us , WNOHANG ); 255 ià( chžd =ð pid || (chžd < 0 && ”ºo !ð EAGAIN )) 258 p -> »v’ts = 0; 259 ts . tv_£c = 0; 260 ts . tv_n£c = 200; 261 ià( `µÞl ( p , 1, & ts , sigs è|| __io_ÿnûËd ) { 262 `kžl ( pid , SIGTERM ); 263 `wa™pid ( pid , & ¡©us , 0); 270 `ä“ ( cmd¬gv ); 271 } } 273  $cmd_cÚÃù ( ùl ,  dev , bdaddr_t * bdaddr ,  ¬gc , ** ¬gv ) 275  sockaddr_rc Ïddr , ¿ddr ; 276  rfcomm_dev_»q »q ; 277  ‹rmios ti ; 278  sigaùiÚ § ; 279  pÞlfd p ; 280 sig£t_t sigs ; 281 sockËn_t ®’ ; 282  d¡ [18], devÇme [ MAXPATHLEN ]; 283  sk , fd , Œy = 30; 285 Ïddr . rc_çmžy = AF_BLUETOOTH ; 286 `baýy (& Ïddr . rc_bdaddr , bdaddr ); 287 Ïddr . rc_chªÃl = 0; 289 ià( ¬gc < 2) { 290 `årštf ( ¡d”r , "Missing dev…arameter"); 294 ¿ddr . rc_çmžy = AF_BLUETOOTH ; 295 `¡r2ba ( ¬gv [1], & ¿ddr . rc_bdaddr ); 297 ià( ¬gc > 2) 298 ¿ddr . rc_chªÃl = `©oi ( ¬gv [2]); 300 ¿ddr . rc_chªÃl = 1; 302 sk = `sock‘ ( AF_BLUETOOTH , SOCK_STREAM , BTPROTO_RFCOMM ); 303 ià( sk < 0) { 304 `³¼Ü ("Can't create RFCOMM socket"); 308 ià( lšg” ) { 309  lšg” l = { . l_Úoff = 1, . l_lšg” =†inger }; 311 ià( `£tsockÝt ( sk , SOL_SOCKET , SO_LINGER , & l , (l)) < 0) { 312 `³¼Ü ("Can't set†inger option"); 317 ià( `bšd ( sk , ( sockaddr *è& Ïddr , (laddr)) < 0) { 318 `³¼Ü ("Can't bind RFCOMM socket"); 319 `þo£ ( sk ); 323 ià( `cÚÃù ( sk , ( sockaddr *è& ¿ddr , (raddr)) < 0) { 324 `³¼Ü ("Can't connect RFCOMM socket"); 325 `þo£ ( sk ); 329 ®’ = ( Ïddr ); 330 ià( `g‘sockÇme ( sk , ( sockaddr *)& Ïddr , & ®’ ) < 0) { 331 `³¼Ü ("Can't get RFCOMM socket‚ame"); 332 `þo£ ( sk ); 336 `mem£t (& »q , 0, (req)); 337 »q . dev_id = dev ; 338 »q . æags = (1 << RFCOMM_REUSE_DLC è| (1 << RFCOMM_RELEASE_ONHUP ); 340 `baýy (& »q . ¤c , & Ïddr . rc_bdaddr ); 341 `baýy (& »q . d¡ , & ¿ddr . rc_bdaddr ); 342 »q . chªÃl = ¿ddr . rc_chªÃl ; 344 dev = `ioùl ( sk , RFCOMMCREATEDEV , & »q ); 345 ià( dev < 0) { 346 `³¼Ü ("Can't create RFCOMM TTY"); 347 `þo£ ( sk ); 351 `¢´štf ( devÇme , MAXPATHLEN - 1, "/dev/rfcomm%d", dev ); 352 ( fd = `Ý’ ( devÇme , O_RDONLY | O_NOCTTY )) < 0) { 353 ià( ”ºo =ð EACCES ) { 354 `³¼Ü ("Can't open RFCOMM device"); 355  »Ëa£ ; 358 `¢´štf ( devÇme , MAXPATHLEN - 1, "/dev/blu‘oÙh/rfcomm/%d", dev ); 359 ià(( fd = `Ý’ ( devÇme , O_RDONLY | O_NOCTTY )) < 0) { 360 ià( Œy --) { 361 `¢´štf ( devÇme , MAXPATHLEN - 1, "/dev/rfcomm%d", dev ); 362 `u¦“p (100 * 1000); 365 `³¼Ü ("Can't open RFCOMM device"); 366  »Ëa£ ; 370 ià( rfcomm_¿w_‰y ) { 371 `tcæush ( fd , TCIOFLUSH ); 373 `cfmak”aw (& ti ); 374 `tc£‰r ( fd , TCSANOW , & ti ); 377 `þo£ ( sk ); 379 `ba2¡r (& »q . d¡ , dst); 380 `´štf ("CÚÃùed % tØ% Ú chªÃÈ%d\n", devÇme , d¡ , »q . chªÃl ); 381 `´štf ("Press CTRL-C for hangup\n"); 383 `mem£t (& § , 0, (sa)); 384 § . §_æags = SA_NOCLDSTOP ; 385 § . §_hªdËr = SIG_IGN ; 386 `sigaùiÚ ( SIGCHLD , & § , NULL ); 387 `sigaùiÚ ( SIGPIPE , & § , NULL ); 389 § . §_hªdËr = sig_‹rm ; 390 `sigaùiÚ ( SIGTERM , & § , NULL ); 391 `sigaùiÚ ( SIGINT , & § , NULL ); 393 § . §_hªdËr = sig_hup ; 394 `sigaùiÚ ( SIGHUP , & § , NULL ); 396 `sigfžl£t (& sigs ); 397 `sigd–£t (& sigs , SIGCHLD ); 398 `sigd–£t (& sigs , SIGPIPE ); 399 `sigd–£t (& sigs , SIGTERM ); 400 `sigd–£t (& sigs , SIGINT ); 401 `sigd–£t (& sigs , SIGHUP ); 403 p . fd = fd; 404 p . ev’ts = POLLERR | POLLHUP ; 406 ! __io_ÿnûËd ) { 407 p . »v’ts = 0; 408 ià( `µÞl (& p , 1, NULL , & sigs ) > 0) 412 `´štf ("Disconnected\n"); 414 `þo£ ( fd ); 417 »Ëa£ : 418 `mem£t (& »q , 0, (req)); 419 »q . dev_id = dev ; 420 »q . æags = (1 << RFCOMM_HANGUP_NOW ); 421 `ioùl ( ùl , RFCOMMRELEASEDEV , & »q ); 423 `þo£ ( sk ); 424 } } 426  $cmd_li¡’ ( ùl ,  dev , bdaddr_t * bdaddr ,  ¬gc , ** ¬gv ) 428  sockaddr_rc Ïddr , ¿ddr ; 429  rfcomm_dev_»q »q ; 430  ‹rmios ti ; 431  sigaùiÚ § ; 432  pÞlfd p ; 433 sig£t_t sigs ; 434 sockËn_t ®’ ; 435  d¡ [18], devÇme [ MAXPATHLEN ]; 436  sk , nsk , fd , lm , Œy = 30; 438 Ïddr . rc_çmžy = AF_BLUETOOTH ; 439 `baýy (& Ïddr . rc_bdaddr , bdaddr ); 440 Ïddr . rc_chªÃl = ( ¬gc < 2è? 1 : `©oi ( ¬gv [1]); 442 sk = `sock‘ ( AF_BLUETOOTH , SOCK_STREAM , BTPROTO_RFCOMM ); 443 ià( sk < 0) { 444 `³¼Ü ("Can't create RFCOMM socket"); 448 lm = 0; 449 ià( ma¡” ) 450 lm |ð RFCOMM_LM_MASTER ; 451 ià( auth ) 452 lm |ð RFCOMM_LM_AUTH ; 453 ià( ’üy±iÚ ) 454 lm |ð RFCOMM_LM_ENCRYPT ; 455 ià( £cu» ) 456 lm |ð RFCOMM_LM_SECURE ; 458 ià( lm && `£tsockÝt ( sk , SOL_RFCOMM , RFCOMM_LM , &lm, (lm)) < 0) { 459 `³¼Ü ("Can't set RFCOMM†ink mode"); 460 `þo£ ( sk ); 464 ià( `bšd ( sk , ( sockaddr *)& Ïddr , (laddr)) < 0) { 465 `³¼Ü ("Can't bind RFCOMM socket"); 466 `þo£ ( sk ); 470 `´štf ("Wa™šg fÜ cÚÃùiÚ oÀchªÃÈ%d\n", Ïddr . rc_chªÃl ); 472 `li¡’ ( sk , 10); 474 ®’ = ( ¿ddr ); 475 nsk = `acû± ( sk , ( sockaddr *è& ¿ddr , & ®’ ); 477 ®’ = ( Ïddr ); 478 ià( `g‘sockÇme ( nsk , ( sockaddr *)& Ïddr , & ®’ ) < 0) { 479 `³¼Ü ("Can't get RFCOMM socket‚ame"); 480 `þo£ ( nsk ); 484 ià( lšg” ) { 485  lšg” l = { . l_Úoff = 1, . l_lšg” =†inger }; 487 ià( `£tsockÝt ( nsk , SOL_SOCKET , SO_LINGER , & l , (l)) < 0) { 488 `³¼Ü ("Can't set†inger option"); 489 `þo£ ( nsk ); 494 `mem£t (& »q , 0, (req)); 495 »q . dev_id = dev ; 496 »q . æags = (1 << RFCOMM_REUSE_DLC è| (1 << RFCOMM_RELEASE_ONHUP ); 498 `baýy (& »q . ¤c , & Ïddr . rc_bdaddr ); 499 `baýy (& »q . d¡ , & ¿ddr . rc_bdaddr ); 500 »q . chªÃl = ¿ddr . rc_chªÃl ; 502 dev = `ioùl ( nsk , RFCOMMCREATEDEV , & »q ); 503 ià( dev < 0) { 504 `³¼Ü ("Can't create RFCOMM TTY"); 505 `þo£ ( sk ); 509 `¢´štf ( devÇme , MAXPATHLEN - 1, "/dev/rfcomm%d", dev ); 510 ( fd = `Ý’ ( devÇme , O_RDONLY | O_NOCTTY )) < 0) { 511 ià( ”ºo =ð EACCES ) { 512 `³¼Ü ("Can't open RFCOMM device"); 513  »Ëa£ ; 516 `¢´štf ( devÇme , MAXPATHLEN - 1, "/dev/blu‘oÙh/rfcomm/%d", dev ); 517 ià(( fd = `Ý’ ( devÇme , O_RDONLY | O_NOCTTY )) < 0) { 518 ià( Œy --) { 519 `¢´štf ( devÇme , MAXPATHLEN - 1, "/dev/rfcomm%d", dev ); 520 `u¦“p (100 * 1000); 523 `³¼Ü ("Can't open RFCOMM device"); 524  »Ëa£ ; 528 ià( rfcomm_¿w_‰y ) { 529 `tcæush ( fd , TCIOFLUSH ); 531 `cfmak”aw (& ti ); 532 `tc£‰r ( fd , TCSANOW , & ti ); 535 `þo£ ( sk ); 536 `þo£ ( nsk ); 538 `ba2¡r (& »q . d¡ , dst); 539 `´štf ("CÚÃùiÚ from % tØ%s\n", d¡ , devÇme ); 540 `´štf ("Press CTRL-C for hangup\n"); 542 `mem£t (& § , 0, (sa)); 543 § . §_æags = SA_NOCLDSTOP ; 544 § . §_hªdËr = SIG_IGN ; 545 `sigaùiÚ ( SIGCHLD , & § , NULL ); 546 `sigaùiÚ ( SIGPIPE , & § , NULL ); 548 § . §_hªdËr = sig_‹rm ; 549 `sigaùiÚ ( SIGTERM , & § , NULL ); 550 `sigaùiÚ ( SIGINT , & § , NULL ); 552 § . §_hªdËr = sig_hup ; 553 `sigaùiÚ ( SIGHUP , & § , NULL ); 555 `sigfžl£t (& sigs ); 556 `sigd–£t (& sigs , SIGCHLD ); 557 `sigd–£t (& sigs , SIGPIPE ); 558 `sigd–£t (& sigs , SIGTERM ); 559 `sigd–£t (& sigs , SIGINT ); 560 `sigd–£t (& sigs , SIGHUP ); 562 p . fd = fd; 563 p . ev’ts = POLLERR | POLLHUP ; 565 ià( ¬gc <= 2) { 566 ! __io_ÿnûËd ) { 567 p . »v’ts = 0; 568 ià( `µÞl (& p , 1, NULL , & sigs ) > 0) 572 `run_cmdlše (& p , & sigs , devÇme , ¬gc - 2, ¬gv + 2); 574 § . §_hªdËr = NULL ; 575 `sigaùiÚ ( SIGTERM , & § , NULL ); 576 `sigaùiÚ ( SIGINT , & § , NULL ); 578 `´štf ("Disconnected\n"); 580 `þo£ ( fd ); 583 »Ëa£ : 584 `mem£t (& »q , 0, (req)); 585 »q . dev_id = dev ; 586 »q . æags = (1 << RFCOMM_HANGUP_NOW ); 587 `ioùl ( ùl , RFCOMMRELEASEDEV , & »q ); 589 `þo£ ( sk ); 590 } } 592  $cmd_w©ch ( ùl ,  dev , bdaddr_t * bdaddr ,  ¬gc , ** ¬gv ) 594 ! __io_ÿnûËd ) { 595 `cmd_li¡’ ( ùl , dev , bdaddr , ¬gc , ¬gv ); 596 `u¦“p (10000); 598 } } 600  $cmd_ü—‹ ( ùl ,  dev , bdaddr_t * bdaddr ,  ¬gc , ** ¬gv ) 602 `ü—‹_dev ( ùl , dev , 0, bdaddr , ¬gc , ¬gv ); 603 } } 605  $cmd_»Ëa£ ( ùl ,  dev , bdaddr_t * bdaddr ,  ¬gc , ** ¬gv ) 607 ià( `¡rcmp ( ¬gv [0], "all") == 0) 608 `»Ëa£_®l ( ùl ); 610 `»Ëa£_dev ( ùl , dev , 0); 611 } } 613  $cmd_show ( ùl ,  dev , bdaddr_t * bdaddr ,  ¬gc , ** ¬gv ) 615 ià( `¡rcmp ( ¬gv [0], "all") == 0) 616 `´št_dev_li¡ ( ùl , 0); 618  rfcomm_dev_šfo di = { . id = `©oi ( ¬gv [0]) }; 619 ià( `ioùl ( ùl , RFCOMMGETDEVINFO , & di ) < 0) { 620 `³¼Ü ("Get info failed"); 621 `ex™ (1); 624 `´št_dev_šfo (& di ); 626 } } 629 * mcmd ; 630 * m®t ; 631 (* mfunc )( mùl ,  mdev , bdaddr_t * mbdaddr ,  m¬gc , ** m¬gv ); 632 * mÝt ; 633 * mdoc ; 634 } gcommªd [] = { 635 { "bšd", "ü—‹", cmd_ü—‹ , " [channel]", "Bind device" }, 636 { "»Ëa£", "unbšd", cmd_»Ëa£ , "", "Release device" }, 637 { "show", "šfo", cmd_show , "", "Show device" }, 638 { "cÚÃù", "cÚn", cmd_cÚÃù , " [channel]", "Connect device" }, 639 { "li¡’", "£rv”", cmd_li¡’ , " [channel [cmd]]", "Listen" }, 640 { "w©ch", "w©ch", cmd_w©ch , " [channel [cmd]]", "Watch" }, 641 { NULL , NULL, NULL, 0, 0 } 644  $u§ge () 646  i ; 648 `´štf ("RFCOMM cÚfigu¿tiÚ utž™y v” %s\n", VERSION ); 650 `´štf ("Usage:\n" 654 `´štf ("Options:\n" 666 `´štf ("Commands:\n"); 667  i = 0; commªd [i]. cmd ; i++) 668 `´štf ("\t%-8s %-24s\t%s\n", 669 commªd [ i ]. cmd , 670 commªd [ i ]. Ýt ? command[i].opt : " ", 671 commªd [ i ]. doc ); 672 `´štf ("\n"); 673 } } 675  ÝtiÚ gmaš_ÝtiÚs [] = { 688  $maš ( ¬gc , * ¬gv []) 690 bdaddr_t bdaddr ; 691  i , Ýt , ùl , dev_id , show_®l = 0; 693 `baýy (& bdaddr , BDADDR_ANY ); 695 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+i:¿hAESML:", maš_ÝtiÚs , NULL )) != -1) { 696  Ýt ) { 698 ià( `¡ºcmp ( Ýrg , "hci", 3) == 0) 699 `hci_devba ( `©oi ( Ýrg + 3), & bdaddr ); 701 `¡r2ba ( Ýrg , & bdaddr ); 705 rfcomm_¿w_‰y = 1; 709 show_®l = 1; 713 `u§ge (); 714 `ex™ (0); 717 auth = 1; 721 ’üy±iÚ = 1; 725 £cu» = 1; 729 ma¡” = 1; 733 lšg” = `©oi ( Ýrg ); 737 `ex™ (0); 741 ¬gc -ð Ýtšd ; 742 ¬gv +ð Ýtšd ; 743 Ýtšd = 0; 745 ià( ¬gc < 2) { 746 ià( ¬gc != 0) { 747 `u§ge (); 748 `ex™ (1); 750 show_®l = 1; 753 ùl = `sock‘ ( AF_BLUETOOTH , SOCK_RAW , BTPROTO_RFCOMM ); 754 ià( ùl < 0) { 755 `³¼Ü ("Can't open RFCOMM control socket"); 756 `ex™ (1); 759 ià( show_®l ) { 760 `´št_dev_li¡ ( ùl , 0); 761 `þo£ ( ùl ); 762 `ex™ (0); 765 ià( `¡ºcmp ( ¬gv [1], "/dev/rfcomm", 11) == 0) 766 dev_id = `©oi ( ¬gv [1] + 11); 767 ià( `¡ºcmp ( ¬gv [1], "rfcomm", 6) == 0) 768 dev_id = `©oi ( ¬gv [1] + 6); 770 dev_id = `©oi ( ¬gv [1]); 772  i = 0; commªd [i]. cmd ; i++) { 773 ià( `¡ºcmp ( commªd [ i ]. cmd , ¬gv [0], 4è&& sŒncmp(commªd[i]. ®t ,‡rgv[0], 4)) 775 ¬gc --; 776 ¬gv ++; 777 commªd [ i ]. `func ( ùl , dev_id , & bdaddr , ¬gc , ¬gv ); 778 `þo£ ( ùl ); 779 `ex™ (0); 782 `u§ge (); 784 `þo£ ( ùl ); 787 } } @tools/sco-tester.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~ 30  ~<”ºo.h > 31  ~<¡dboÞ.h > 33  ~ 35  ~"lib/blu‘oÙh.h " 36  ~"lib/sco.h " 37  ~"lib/mgmt.h " 39  ~"mÚ™Ü/bt.h " 40  ~"emuÏtÜ/btho¡.h " 41  ~"emuÏtÜ/hc›mu.h " 43  ~"¤c/sh¬ed/‹¡”.h " 44  ~"¤c/sh¬ed/mgmt.h " 46  s‹¡_d©a { 47 cÚ¡ * m‹¡_d©a ; 48  mgmt * mmgmt ; 49 ušt16_t mmgmt_šdex ; 50  hc›mu * mhc›mu ; 51 hc›mu_ty³ mhc›mu_ty³ ; 52  mio_id ; 53 boÞ mdi§bË_esco ; 56  ssco_þ›Á_d©a { 57  mex³ù_”r ; 60  $mgmt_debug (cÚ¡ * ¡r , * u£r_d©a ) 62 cÚ¡ * ´efix = u£r_d©a ; 64 `‹¡”_´št ("%s%s", ´efix , ¡r ); 65 } } 67  $»ad_šfo_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 68 cÚ¡ * ·¿m , * u£r_d©a ) 70  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 71 cÚ¡  mgmt_½_»ad_šfo * ½ = ·¿m ; 72  addr [18]; 73 ušt16_t mªuçùu»r ; 74 ušt32_t suµÜ‹d_£‰šgs , cu¼’t_£‰šgs ; 76 `‹¡”_´št ("Read Info callback"); 77 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 79 ià( ¡©us || ! ·¿m ) { 80 `‹¡”_´e_£tup_çžed (); 84 `ba2¡r (& ½ -> bdaddr , addr ); 85 mªuçùu»r = `btohs ( ½ ->manufacturer); 86 suµÜ‹d_£‰šgs = `btohl ( ½ ->supported_settings); 87 cu¼’t_£‰šgs = `btohl ( ½ ->current_settings); 89 `‹¡”_´št (" Add»ss: %s", addr ); 90 `‹¡”_´št (" V”siÚ: 0x%02x", ½ -> v”siÚ ); 91 `‹¡”_´št (" Mªuçùu»r: 0x%04x", mªuçùu»r ); 92 `‹¡”_´št (" SuµÜ‹d s‘tšgs: 0x%08x", suµÜ‹d_£‰šgs ); 93 `‹¡”_´št (" Cu¼’ˆ£‰šgs: 0x%08x", cu¼’t_£‰šgs ); 94 `‹¡”_´št (" Class: 0x%02x%02x%02x", 95 ½ -> dev_þass [2],„p->dev_class[1],„p->dev_class[0]); 96 `‹¡”_´št (" Name: %s", ½ -> Çme ); 97 `‹¡”_´št (" Sh܈Çme: %s", ½ -> shÜt_Çme ); 99 ià( `¡rcmp ( `hc›mu_g‘_add»ss ( d©a -> hc›mu ), addr )) { 100 `‹¡”_´e_£tup_çžed (); 104 `‹¡”_´e_£tup_com¶‘e (); 105 } } 107  $šdex_added_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 108 cÚ¡ * ·¿m , * u£r_d©a ) 110  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 112 `‹¡”_´št ("Index Added callback"); 113 `‹¡”_´št (" Index: 0x%04x", šdex ); 115 d©a -> mgmt_šdex = šdex ; 117 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_INFO , d©a-> mgmt_šdex , 0, NULL , 118 »ad_šfo_ÿÎback , NULL , NULL); 119 } } 121  $šdex_»moved_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 122 cÚ¡ * ·¿m , * u£r_d©a ) 124  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 126 `‹¡”_´št ("Index Removed callback"); 127 `‹¡”_´št (" Index: 0x%04x", šdex ); 129 ià( šdex !ð d©a -> mgmt_šdex ) 132 `mgmt_uÄegi¡”_šdex ( d©a -> mgmt , d©a-> mgmt_šdex ); 134 `mgmt_uÄef ( d©a -> mgmt ); 135 d©a -> mgmt = NULL ; 137 `‹¡”_po¡_‹¬down_com¶‘e (); 138 } } 140  $»ad_šdex_li¡_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 141 cÚ¡ * ·¿m , * u£r_d©a ) 143  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 145 `‹¡”_´št ("Read Index List callback"); 146 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 148 ià( ¡©us || ! ·¿m ) { 149 `‹¡”_´e_£tup_çžed (); 153 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_INDEX_ADDED , MGMT_INDEX_NONE , 154 šdex_added_ÿÎback , NULL , NULL); 156 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_INDEX_REMOVED , MGMT_INDEX_NONE , 157 šdex_»moved_ÿÎback , NULL , NULL); 159 d©a -> hc›mu = `hc›mu_Ãw ( HCIEMU_TYPE_BREDRLE ); 160 ià(! d©a -> hc›mu ) { 161 `‹¡”_w¬n ("Failedo setup HCIƒmulation"); 162 `‹¡”_´e_£tup_çžed (); 165 `‹¡”_´št ("New hciemu instance created"); 167 ià( d©a -> di§bË_esco ) { 168 ušt8_t * ã©u»s ; 170 `‹¡”_´št ("DisablingƒSCO…acketype support"); 172 ã©u»s = `hc›mu_g‘_ã©u»s ( d©a -> hc›mu ); 173 ià( ã©u»s ) 174 ã©u»s [3] &= ~0x80; 176 } } 178  $‹¡_´e_£tup (cÚ¡ * ‹¡_d©a ) 180  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 182 d©a -> mgmt = `mgmt_Ãw_deçuÉ (); 183 ià(! d©a -> mgmt ) { 184 `‹¡”_w¬n ("Failedo setup management interface"); 185 `‹¡”_´e_£tup_çžed (); 189 ià( `‹¡”_u£_debug ()) 190 `mgmt_£t_debug ( d©a -> mgmt , mgmt_debug , "mgmt: ", NULL ); 192 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_INDEX_LIST , MGMT_INDEX_NONE , 0, NULL , 193 »ad_šdex_li¡_ÿÎback , NULL , NULL); 194 } } 196  $‹¡_po¡_‹¬down (cÚ¡ * ‹¡_d©a ) 198  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 200 `hc›mu_uÄef ( d©a -> hc›mu ); 201 d©a -> hc›mu = NULL ; 202 } } 204  $‹¡_d©a_ä“ (* ‹¡_d©a ) 206  ‹¡_d©a * d©a =est_data; 208 ià( d©a -> io_id > 0) 209 `g_sourû_»move ( d©a -> io_id ); 211 `ä“ ( d©a ); 212 } } 214  #‹¡_sco_fuÎ ( Çme , d©a , £tup , func , _di§bË_esco ) \ 216  ‹¡_d©a * u£r ; \ 217 u£r = `m®loc (( ‹¡_d©a )); \ 218 ià(! u£r ) \ 220 u£r -> hc›mu_ty³ = HCIEMU_TYPE_BREDRLE ; \ 221 u£r -> io_id = 0; \ 222 u£r -> ‹¡_d©a = d©a ; \ 223 u£r -> di§bË_esco = _di§bË_esco ; \ 224 `‹¡”_add_fuÎ ( Çme , d©a , \ 225 ‹¡_´e_£tup , £tup , func , NULL , \ 226 ‹¡_po¡_‹¬down , 2, u£r , ‹¡_d©a_ä“ ); \ 227 } 0) ) 229  #‹¡_sco ( Çme , d©a , £tup , func ) \ 230 `‹¡_sco_fuÎ ( Çme , d©a , £tup , func , çl£ ) ) 232  #‹¡_sco_11 ( Çme , d©a , £tup , func ) \ 233 `‹¡_sco_fuÎ ( Çme , d©a , £tup , func , Œue ) ) 235 cÚ¡  sco_þ›Á_d©a gcÚÃù_sucûss = { 236 . ex³ù_”r = 0 239 cÚ¡  sco_þ›Á_d©a gcÚÃù_çžu» = { 240 . ex³ù_”r = EOPNOTSUPP 243  $þ›Á_cÚÃùabË_com¶‘e ( ušt16_t Ýcode , ušt8_t ¡©us , 244 cÚ¡ * ·¿m , ušt8_t Ën , 245 * u£r_d©a ) 247 ià( Ýcode !ð BT_HCI_CMD_WRITE_SCAN_ENABLE ) 250 `‹¡”_´št ("Cl›Á s‘ cÚÃùabË stu 0x%02x", ¡©us ); 252 ià( ¡©us ) 253 `‹¡”_£tup_çžed (); 255 `‹¡”_£tup_com¶‘e (); 256 } } 258  $£tup_pow”ed_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 259 cÚ¡ * ·¿m , * u£r_d©a ) 261  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 262  btho¡ *bthost; 264 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 265 `‹¡”_£tup_çžed (); 269 `‹¡”_´št ("Controller…owered on"); 271 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 272 `btho¡_£t_cmd_com¶‘e_cb ( btho¡ , þ›Á_cÚÃùabË_com¶‘e , d©a ); 273 `btho¡_wr™e_sÿn_’abË ( btho¡ , 0x03); 274 } } 276  $£tup_pow”ed (cÚ¡ * ‹¡_d©a ) 278  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 279  ·¿m [] = { 0x01 }; 281 `‹¡”_´št ("Powering on controller"); 283 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_CONNECTABLE , d©a-> mgmt_šdex , 284 ( ·¿m ),…aram, 285 NULL , NULL, NULL); 287 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_SSP , d©a-> mgmt_šdex , 288 ( ·¿m ),…¬am, NULL , NULL, NULL); 290 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_LE , d©a-> mgmt_šdex , 291 ( ·¿m ),…¬am, NULL , NULL, NULL); 293 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 294 ( ·¿m ),…aram, 295 £tup_pow”ed_ÿÎback , NULL , NULL); 296 } } 298  $‹¡_äamewÜk (cÚ¡ * ‹¡_d©a ) 300 `‹¡”_‹¡_·s£d (); 301 } } 303  $‹¡_sock‘ (cÚ¡ * ‹¡_d©a ) 305  sk ; 307 sk = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_SCO ); 308 ià( sk < 0) { 309 `‹¡”_w¬n ("Cª'ˆü—‹ sock‘: % (%d)", `¡»¼Ü ( ”ºo ), 310 ”ºo ); 311 `‹¡”_‹¡_çžed (); 315 `þo£ ( sk ); 317 `‹¡”_‹¡_·s£d (); 318 } } 320  $‹¡_g‘sockÝt (cÚ¡ * ‹¡_d©a ) 322  sk , ”r ; 323 sockËn_t Ën ; 324  bt_voiû voiû ; 326 sk = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_SCO ); 327 ià( sk < 0) { 328 `‹¡”_w¬n ("Cª'ˆü—‹ sock‘: % (%d)", `¡»¼Ü ( ”ºo ), 329 ”ºo ); 330 `‹¡”_‹¡_çžed (); 334 Ën = ( voiû ); 335 `mem£t (& voiû , 0, Ën ); 337 ”r = `g‘sockÝt ( sk , SOL_BLUETOOTH , BT_VOICE , & voiû , & Ën ); 338 ià( ”r < 0) { 339 `‹¡”_w¬n ("Can't get socket option : %s (%d)", 340 `¡»¼Ü ( ”ºo ),ƒrrno); 341 `‹¡”_‹¡_çžed (); 342  ’d ; 345 ià( voiû . £‰šg !ð BT_VOICE_CVSD_16BIT ) { 346 `‹¡”_w¬n ("Invalid voice setting"); 347 `‹¡”_‹¡_çžed (); 348  ’d ; 351 `‹¡”_‹¡_·s£d (); 353 ’d : 354 `þo£ ( sk ); 355 } } 357  $‹¡_£tsockÝt (cÚ¡ * ‹¡_d©a ) 359  sk , ”r ; 360 sockËn_t Ën ; 361  bt_voiû voiû ; 363 sk = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_SCO ); 364 ià( sk < 0) { 365 `‹¡”_w¬n ("Cª'ˆü—‹ sock‘: % (%d)", `¡»¼Ü ( ”ºo ), 366 ”ºo ); 367 `‹¡”_‹¡_çžed (); 368  ’d ; 372 Ën = ( voiû ); 373 `mem£t (& voiû , 0, Ën ); 375 ”r = `g‘sockÝt ( sk , SOL_BLUETOOTH , BT_VOICE , & voiû , & Ën ); 376 ià( ”r < 0) { 377 `‹¡”_w¬n ("Can't get socket option : %s (%d)", 378 `¡»¼Ü ( ”ºo ),ƒrrno); 379 `‹¡”_‹¡_çžed (); 380  ’d ; 383 ià( voiû . £‰šg !ð BT_VOICE_CVSD_16BIT ) { 384 `‹¡”_w¬n ("Invalid voice setting"); 385 `‹¡”_‹¡_çžed (); 386  ’d ; 389 `mem£t (& voiû , 0, (voice)); 390 voiû . £‰šg = BT_VOICE_TRANSPARENT ; 392 ”r = `£tsockÝt ( sk , SOL_BLUETOOTH , BT_VOICE , & voiû , (voice)); 393 ià( ”r < 0) { 394 `‹¡”_w¬n ("Can't set socket option : %s (%d)", 395 `¡»¼Ü ( ”ºo ),ƒrrno); 396 `‹¡”_‹¡_çžed (); 397  ’d ; 400 Ën = ( voiû ); 401 `mem£t (& voiû , 0, Ën ); 403 ”r = `g‘sockÝt ( sk , SOL_BLUETOOTH , BT_VOICE , & voiû , & Ën ); 404 ià( ”r < 0) { 405 `‹¡”_w¬n ("Can't get socket option : %s (%d)", 406 `¡»¼Ü ( ”ºo ),ƒrrno); 407 `‹¡”_‹¡_çžed (); 408  ’d ; 411 ià( voiû . £‰šg !ð BT_VOICE_TRANSPARENT ) { 412 `‹¡”_w¬n ("Invalid voice setting"); 413 `‹¡”_‹¡_çžed (); 414  ’d ; 417 `‹¡”_‹¡_·s£d (); 419 ’d : 420 `þo£ ( sk ); 421 } } 423  $ü—‹_sco_sock ( ‹¡_d©a * d©a ) 425 cÚ¡ ušt8_t * ma¡”_bdaddr ; 426  sockaddr_sco addr ; 427  sk , ”r ; 429 sk = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET | SOCK_NONBLOCK , 430 BTPROTO_SCO ); 431 ià( sk < 0) { 432 ”r = - ”ºo ; 433 `‹¡”_w¬n ("Cª'ˆü—‹ sock‘: % (%d)", `¡»¼Ü ( ”ºo ), 434 ”ºo ); 435  ”r ; 438 ma¡”_bdaddr = `hc›mu_g‘_ma¡”_bdaddr ( d©a -> hc›mu ); 439 ià(! ma¡”_bdaddr ) { 440 `‹¡”_w¬n ("No master bdaddr"); 441  - ENODEV ; 444 `mem£t (& addr , 0, (addr)); 445 addr . sco_çmžy = AF_BLUETOOTH ; 446 `baýy (& addr . sco_bdaddr , (*è ma¡”_bdaddr ); 448 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 449 ”r = - ”ºo ; 450 `‹¡”_w¬n ("Cª'ˆbšd sock‘: % (%d)", `¡»¼Ü ( ”ºo ), 451 ”ºo ); 452 `þo£ ( sk ); 453  ”r ; 456  sk ; 457 } } 459  $cÚÃù_sco_sock ( ‹¡_d©a * d©a ,  sk ) 461 cÚ¡ ušt8_t * þ›Á_bdaddr ; 462  sockaddr_sco addr ; 463  ”r ; 465 þ›Á_bdaddr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 466 ià(! þ›Á_bdaddr ) { 467 `‹¡”_w¬n ("No client bdaddr"); 468  - ENODEV ; 471 `mem£t (& addr , 0, (addr)); 472 addr . sco_çmžy = AF_BLUETOOTH ; 473 `baýy (& addr . sco_bdaddr , (*è þ›Á_bdaddr ); 475 ”r = `cÚÃù ( sk , ( sockaddr *è& addr , (addr)); 476 ià( ”r < 0 && !( ”ºo =ð EAGAIN ||ƒ¼nØ=ð EINPROGRESS )) { 477 ”r = - ”ºo ; 478 `‹¡”_w¬n ("Cª'ˆcÚÃù sock‘: % (%d)", `¡»¼Ü ( ”ºo ), 479 ”ºo ); 480  ”r ; 484 } } 486  gboÞ—n $sco_cÚÃù_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 487 gpoš‹r u£r_d©a ) 489  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 490 cÚ¡  sco_þ›Á_d©a * scod©a = d©a -> ‹¡_d©a ; 491  ”r , sk_”r , sk ; 492 sockËn_t Ën = ( sk_”r ); 494 d©a -> io_id = 0; 496 sk = `g_io_chªÃl_unix_g‘_fd ( io ); 498 ià( `g‘sockÝt ( sk , SOL_SOCKET , SO_ERROR , & sk_”r , & Ën ) < 0) 499 ”r = - ”ºo ; 501 ”r = - sk_”r ; 503 ià( ”r < 0) 504 `‹¡”_w¬n ("CÚÃù fažed: % (%d)", `¡»¼Ü (- ”r ), -err); 506 `‹¡”_´št ("Successfully connected"); 508 ià(- ”r !ð scod©a -> ex³ù_”r ) 509 `‹¡”_‹¡_çžed (); 511 `‹¡”_‹¡_·s£d (); 513  FALSE ; 514 } } 516  $‹¡_cÚÃù (cÚ¡ * ‹¡_d©a ) 518  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 519 GIOChªÃl * io ; 520  sk ; 522 sk = `ü—‹_sco_sock ( d©a ); 523 ià( sk < 0) { 524 `‹¡”_‹¡_çžed (); 528 ià( `cÚÃù_sco_sock ( d©a , sk ) < 0) { 529 `þo£ ( sk ); 530 `‹¡”_‹¡_çžed (); 534 io = `g_io_chªÃl_unix_Ãw ( sk ); 535 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , TRUE ); 537 d©a -> io_id = `g_io_add_w©ch ( io , G_IO_OUT , sco_cÚÃù_cb , NULL ); 539 `g_io_chªÃl_uÄef ( io ); 541 `‹¡”_´št ("Connect in…rogress"); 542 } } 544  $‹¡_cÚÃù_Œª¥ (cÚ¡ * ‹¡_d©a ) 546  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 547 cÚ¡  sco_þ›Á_d©a * scod©a = d©a -> ‹¡_d©a ; 548  sk , ”r ; 549  bt_voiû voiû ; 551 sk = `ü—‹_sco_sock ( d©a ); 552 ià( sk < 0) { 553 `‹¡”_‹¡_çžed (); 557 `mem£t (& voiû , 0, (voice)); 558 voiû . £‰šg = BT_VOICE_TRANSPARENT ; 560 ”r = `£tsockÝt ( sk , SOL_BLUETOOTH , BT_VOICE , & voiû , (voice)); 561 ià( ”r < 0) { 562 `‹¡”_w¬n ("Can't set socket option : %s (%d)", 563 `¡»¼Ü ( ”ºo ),ƒrrno); 564 `‹¡”_‹¡_çžed (); 565  ’d ; 568 ”r = `cÚÃù_sco_sock ( d©a , sk ); 570 `‹¡”_w¬n ("Connect„eturned %s (%d),ƒxpected %s (%d)", 571 `¡»¼Ü (- ”r ), -err, 572 `¡»¼Ü ( scod©a -> ex³ù_”r ), scodata->expect_err); 574 ià(- ”r !ð scod©a -> ex³ù_”r ) 575 `‹¡”_‹¡_çžed (); 577 `‹¡”_‹¡_·s£d (); 579 ’d : 580 `þo£ ( sk ); 581 } } 583  $maš ( ¬gc , * ¬gv []) 585 `‹¡”_š™ (& ¬gc , & ¬gv ); 587 `‹¡_sco ("BasiøF¿mewÜk - Sucûss", NULL , £tup_pow”ed , 588 ‹¡_äamewÜk ); 590 `‹¡_sco ("BasiøSCO Sock‘ - Sucûss", NULL , £tup_pow”ed , 591 ‹¡_sock‘ ); 593 `‹¡_sco ("BasiøSCO G‘ Sock‘ O±iÚ - Sucûss", NULL , £tup_pow”ed , 594 ‹¡_g‘sockÝt ); 596 `‹¡_sco ("BasiøSCO S‘ Sock‘ O±iÚ - Sucûss", NULL , £tup_pow”ed , 597 ‹¡_£tsockÝt ); 599 `‹¡_sco ("eSCO CVSD - Sucûss", & cÚÃù_sucûss , £tup_pow”ed , 600 ‹¡_cÚÃù ); 602 `‹¡_sco ("eSCO mSBC - Sucûss", & cÚÃù_sucûss , £tup_pow”ed , 603 ‹¡_cÚÃù_Œª¥ ); 605 `‹¡_sco_11 ("SCO CVSD 1.1 - Sucûss", & cÚÃù_sucûss , £tup_pow”ed , 606 ‹¡_cÚÃù ); 608 `‹¡_sco_11 ("SCO mSBC 1.1 - Fažu»", & cÚÃù_çžu» , £tup_pow”ed , 609 ‹¡_cÚÃù_Œª¥ ); 611  `‹¡”_run (); 612 } } @tools/scotest.c 25 #ifdeà HAVE_CONFIG_H 26  ~ 29  ~<¡dio.h > 30  ~<”ºo.h > 31  ~<ùy³.h > 32  ~ 33  ~<¡dlib.h > 34  ~ 35  ~ 36  ~ 37  ~ 38  ~ 40  ~ 41  ~ 43  ~"¤c/sh¬ed/utž.h " 47 mSEND , 48 mRECV , 49 mRECONNECT , 50 mMULTY , 51 mDUMP , 52 mCONNECT 55 * gbuf ; 58  gd©a_size = 672; 60  bdaddr_t gbdaddr ; 62  gdeãr_£tup = 0; 63  gvoiû = 0; 65  $tv2æ ( timev® tv ) 67  () tv . tv_£c + ()Ñv. tv_u£c /1000000.0); 68 } } 70  $do_cÚÃù (* svr ) 72  sockaddr_sco addr ; 73  sco_cÚnšfo cÚn ; 74 sockËn_t ÝŽ’ ; 75  sk ; 78 sk = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_SCO ); 79 ià( sk < 0) { 80 `sy¦og ( LOG_ERR , "Can't create socket: %s (%d)", 81 `¡»¼Ü ( ”ºo ),ƒrrno); 86 `mem£t (& addr , 0, (addr)); 87 addr . sco_çmžy = AF_BLUETOOTH ; 88 `baýy (& addr . sco_bdaddr , & bdaddr ); 90 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 91 `sy¦og ( LOG_ERR , "Can't bind socket: %s (%d)", 92 `¡»¼Ü ( ”ºo ),ƒrrno); 93  ”rÜ ; 96 ià( voiû ) { 97  bt_voiû Ýts ; 100 `mem£t (& Ýts , 0, (opts)); 101 Ýts . £‰šg = voiû ; 102 ià( `£tsockÝt ( sk , SOL_BLUETOOTH , BT_VOICE , & Ýts , (opts)) < 0) { 103 `sy¦og ( LOG_ERR , 105 `¡»¼Ü ( ”ºo ),ƒrrno); 106  ”rÜ ; 111 `mem£t (& addr , 0, (addr)); 112 addr . sco_çmžy = AF_BLUETOOTH ; 113 `¡r2ba ( svr , & addr . sco_bdaddr ); 115 ià( `cÚÃù ( sk , ( sockaddr *è& addr , (addr)) < 0) { 116 `sy¦og ( LOG_ERR , "Can't connect: %s (%d)", 117 `¡»¼Ü ( ”ºo ),ƒrrno); 118  ”rÜ ; 122 `mem£t (& cÚn , 0, (conn)); 123 ÝŽ’ = ( cÚn ); 125 ià( `g‘sockÝt ( sk , SOL_SCO , SCO_CONNINFO , & cÚn , & ÝŽ’ ) < 0) { 126 `sy¦og ( LOG_ERR , "Can't get SCO connection information: %s (%d)", 127 `¡»¼Ü ( ”ºo ),ƒrrno); 128  ”rÜ ; 131 `sy¦og ( LOG_INFO , "Connected [handle %d, class 0x%02x%02x%02x]", 132 cÚn . hci_hªdË , 133 cÚn . dev_þass [2], conn.dev_class[1], conn.dev_class[0]); 135  sk ; 137 ”rÜ : 138 `þo£ ( sk ); 140 } } 142  do_li¡’ ((* hªdËr )( sk )) 144  sockaddr_sco addr ; 145  sco_cÚnšfo cÚn ; 146 sockËn_t ÝŽ’ ; 147  sk , nsk ; 148  ba [18]; 151 sk = `sock‘ ( PF_BLUETOOTH , SOCK_SEQPACKET , BTPROTO_SCO ); 152 ià( sk < 0) { 153 `sy¦og ( LOG_ERR , "Can't create socket: %s (%d)", 154 `¡»¼Ü ( ”ºo ),ƒrrno); 155 `ex™ (1); 159 `mem£t (& addr , 0, (addr)); 160 addr . sco_çmžy = AF_BLUETOOTH ; 161 `baýy (& addr . sco_bdaddr , & bdaddr ); 163 ià( `bšd ( sk , ( sockaddr *è& addr , (addr)) < 0) { 164 `sy¦og ( LOG_ERR , "Can't bind socket: %s (%d)", 165 `¡»¼Ü ( ”ºo ),ƒrrno); 166  ”rÜ ; 170 ià( deãr_£tup && `£tsockÝt ( sk , SOL_BLUETOOTH , BT_DEFER_SETUP , 171 & deãr_£tup , (defer_setup)) < 0) { 172 `sy¦og ( LOG_ERR , "Can'tƒnable deferred setup : %s (%d)", 173 `¡»¼Ü ( ”ºo ),ƒrrno); 174  ”rÜ ; 178 ià( `li¡’ ( sk , 10)) { 179 `sy¦og ( LOG_ERR ,"Can‚ot†isten onhe socket: %s (%d)", 180 `¡»¼Ü ( ”ºo ),ƒrrno); 181  ”rÜ ; 184 `sy¦og ( LOG_INFO ,"Waiting for connection ..."); 187 `mem£t (& addr , 0, (addr)); 188 ÝŽ’ = ( addr ); 190 nsk = `acû± ( sk , ( sockaddr *è& addr , & ÝŽ’ ); 191 ià( nsk < 0) { 192 `sy¦og ( LOG_ERR ,"Accept failed: %s (%d)", 193 `¡»¼Ü ( ”ºo ),ƒrrno); 194  ”rÜ ; 196 ià( `fÜk ()) { 198 `þo£ ( nsk ); 202 `þo£ ( sk ); 205 `mem£t (& cÚn , 0, (conn)); 206 ÝŽ’ = ( cÚn ); 208 ià( `g‘sockÝt ( nsk , SOL_SCO , SCO_CONNINFO , & cÚn , & ÝŽ’ ) < 0) { 209 `sy¦og ( LOG_ERR , "Can't get SCO connection information: %s (%d)", 210 `¡»¼Ü ( ”ºo ),ƒrrno); 211 ià(! deãr_£tup ) { 212 `þo£ ( nsk ); 213 `ex™ (1); 217 `ba2¡r (& addr . sco_bdaddr , ba ); 218 `sy¦og ( LOG_INFO , "Connect from %s [handle %d, class 0x%02x%02x%02x]", 219 ba , cÚn . hci_hªdË , 220 cÚn . dev_þass [2], conn.dev_class[1], conn.dev_class[0]); 223 ià( deãr_£tup ) { 224 `sy¦og ( LOG_INFO , "Waiting for %d seconds", 225 `abs ( deãr_£tup ) - 1); 226 `¦“p ( `abs ( deãr_£tup ) - 1); 228 ià( deãr_£tup < 0) { 229 `þo£ ( nsk ); 230 `ex™ (1); 234 `hªdËr ( nsk ); 236 `sy¦og ( LOG_INFO , "Disconnect"); 237 `ex™ (0); 240 ”rÜ : 241 `þo£ ( sk ); 242 `ex™ (1); 243 } } 245  $dump_mode ( sk ) 247  bt_voiû Ýts ; 248  Ën ; 251 `mem£t (& Ýts , 0, (opts)); 252 Ýts . £‰šg = voiû ; 253 ià( `£tsockÝt ( sk , SOL_BLUETOOTH , BT_VOICE , & Ýts , (opts)) < 0) 254 `sy¦og ( LOG_ERR , "Can't set socket options: %s (%d)", 255 `¡»¼Ü ( ”ºo ),ƒrrno); 257 ià( deãr_£tup ) { 258 Ën = `»ad ( sk , buf , d©a_size ); 259 ià( Ën < 0) 260 `sy¦og ( LOG_ERR , "Initial„eadƒrror: %s (%d)", 261 `¡»¼Ü ( ”ºo ),ƒrrno); 263 `sy¦og ( LOG_INFO , "In™ŸÈby‹ %d", Ën ); 266 `sy¦og ( LOG_INFO ,"Receiving ..."); 267 ( Ën = `»ad ( sk , buf , d©a_size )) > 0) 268 `sy¦og ( LOG_INFO , "Reûv›d %d by‹s", Ën ); 269 } } 271  $»cv_mode ( sk ) 273  timev® tv_beg , tv_’d , tv_diff ; 274  bt_voiû Ýts ; 275  tÙ® ; 276  Ën ; 279 `mem£t (& Ýts , 0, (opts)); 280 Ýts . £‰šg = voiû ; 281 ià( `£tsockÝt ( sk , SOL_BLUETOOTH , BT_VOICE , & Ýts , (opts)) < 0) 282 `sy¦og ( LOG_ERR , "Can't set socket options: %s (%d)", 283 `¡»¼Ü ( ”ºo ),ƒrrno); 285 ià( deãr_£tup ) { 286 Ën = `»ad ( sk , buf , d©a_size ); 287 ià( Ën < 0) 288 `sy¦og ( LOG_ERR , "Initial„eadƒrror: %s (%d)", 289 `¡»¼Ü ( ”ºo ),ƒrrno); 291 `sy¦og ( LOG_INFO , "In™ŸÈby‹ %d", Ën ); 294 `sy¦og ( LOG_INFO , "Receiving ..."); 297 `g‘timeofday (& tv_beg , NULL ); 298 tÙ® = 0; 299  tÙ® < d©a_size ) { 300  r ; 301 ià(( r = `»cv ( sk , buf , d©a_size , 0)) <= 0) { 302 ià( r < 0) 303 `sy¦og ( LOG_ERR , "Read failed: %s (%d)", 304 `¡»¼Ü ( ”ºo ),ƒrrno); 305 ià( ”ºo !ð ENOTCONN ) 307 r = 0; 309 tÙ® +ð r ; 311 `g‘timeofday (& tv_’d , NULL ); 313 `tim”sub (& tv_’d , & tv_beg , & tv_diff ); 315 `sy¦og ( LOG_INFO ,"%ld by‹ š %.2fm s³ed %.2àkb", tÙ® , 316 `tv2æ ( tv_diff ) / 60.0, 317 ()Ð tÙ® / `tv2æ ( tv_diff ) ) / 1024.0 ); 319 } } 321  $£nd_mode (* svr ) 323  sco_ÝtiÚs so ; 324 sockËn_t Ën ; 325 ušt32_t £q ; 326  i , sk ; 328 ià(( sk = `do_cÚÃù ( svr )) < 0) { 329 `sy¦og ( LOG_ERR , "Can't connectohe server: %s (%d)", 330 `¡»¼Ü ( ”ºo ),ƒrrno); 331 `ex™ (1); 334 Ën = ( so ); 335 ià( `g‘sockÝt ( sk , SOL_SCO , SCO_OPTIONS , & so , & Ën ) < 0) { 336 `sy¦og ( LOG_ERR , "Can't get SCO options: %s (%d)", 337 `¡»¼Ü ( ”ºo ),ƒrrno); 338 `ex™ (1); 341 `sy¦og ( LOG_INFO ,"Sending ..."); 343  i = 6; i < so . mtu ; i++) 344 buf [ i ] = 0x7f; 346 £q = 0; 348 `put_Ë32 ( £q , buf ); 349 `put_Ë16 ( d©a_size , buf + 4); 351 £q ++; 353 ià( `£nd ( sk , buf , so . mtu , 0) <= 0) { 354 `sy¦og ( LOG_ERR , "Send failed: %s (%d)", 355 `¡»¼Ü ( ”ºo ),ƒrrno); 356 `ex™ (1); 359 `u¦“p (1); 361 } } 363  $»cÚÃù_mode (* svr ) 366  sk ; 368 ià(( sk = `do_cÚÃù ( svr )) < 0) { 369 `sy¦og ( LOG_ERR , "Can't connectohe server: %s (%d)", 370 `¡»¼Ü ( ”ºo ),ƒrrno); 371 `ex™ (1); 374 `þo£ ( sk ); 376 `¦“p (5); 378 } } 380  $muÉy_cÚÃù_mode (* svr ) 383  i , sk ; 385  i = 0; i < 10; i++){ 386 ià( `fÜk ()) 390 sk = `do_cÚÃù ( svr ); 391 ià( sk < 0) { 392 `sy¦og ( LOG_ERR , "Can't connectohe server: %s (%d)", 393 `¡»¼Ü ( ”ºo ),ƒrrno); 395 `þo£ ( sk ); 396 `ex™ (0); 399 `¦“p (19); 401 } } 403  $u§ge () 405 `´štf ("scotest - SCOesting\n" 407 `´štf ("\tscotest [options] [bd_addr]\n"); 408 `´štf ("Modes:\n" 419 } } 421  $maš ( ¬gc ,* ¬gv []) 423  sigaùiÚ § ; 424  Ýt , sk , mode = RECV ; 426 ( Ýt = `g‘Ýt ( ¬gc , ¬gv , "rdscmnb:W:V:")è!ð EOF ) { 427  Ýt ) { 429 mode = RECV ; 433 mode = SEND ; 437 mode = DUMP ; 441 mode = RECONNECT ; 445 mode = MULTY ; 449 mode = CONNECT ; 453 d©a_size = `©oi ( Ýrg ); 457 deãr_£tup = `©oi ( Ýrg ); 461 voiû = `¡¹Þ ( Ýrg , NULL , 0); 465 `u§ge (); 466 `ex™ (1); 470 ià(!( ¬gc - Ýtšd è&& ( mode !ð RECV && mod!ð DUMP )) { 471 `u§ge (); 472 `ex™ (1); 475 ià(!( buf = `m®loc ( d©a_size ))) { 476 `³¼Ü ("Can't‡llocate data buffer"); 477 `ex™ (1); 480 `mem£t (& § , 0, (sa)); 481 § . §_hªdËr = SIG_IGN ; 482 § . §_æags = SA_NOCLDSTOP ; 483 `sigaùiÚ ( SIGCHLD , & § , NULL ); 485 `Ý’log ("scÙe¡", LOG_PERROR | LOG_PID , LOG_LOCAL0 ); 487  mode ){ 488  RECV : 489 `do_li¡’ ( »cv_mode ); 492  DUMP : 493 `do_li¡’ ( dump_mode ); 496  SEND : 497 `£nd_mode ( ¬gv [ Ýtšd ]); 500  RECONNECT : 501 `»cÚÃù_mode ( ¬gv [ Ýtšd ]); 504  MULTY : 505 `muÉy_cÚÃù_mode ( ¬gv [ Ýtšd ]); 508  CONNECT : 509 sk = `do_cÚÃù ( ¬gv [ Ýtšd ]); 510 ià( sk < 0) 511 `ex™ (1); 512 `dump_mode ( sk ); 516 `sy¦og ( LOG_INFO , "Exit"); 518 `þo£log (); 521 } } @tools/sdptool.c 28 #ifdeà HAVE_CONFIG_H 29  ~ 32  ~<¡dio.h > 33  ~<”ºo.h > 34  ~<ùy³.h > 35  ~<¡dlib.h > 36  ~<¡ršg.h > 37  ~ 38  ~ 40  ~ 41  ~ 42  ~ 43  ~ 44  ~ 46  ~<Ãtš‘/š.h > 48  ~"¤c/sdp-xml.h " 50 #iâdeà APPLE_AGENT_SVCLASS_ID 51  #APPLE_AGENT_SVCLASS_ID 0x2112 ) 54  #fÜ_—ch_Ýt ( Ýt , , è(Ýt= `g‘Ýt_lÚg ( ¬gc , ¬gv , ? :"+", , 0)è!ð-1) ) 55  #N_ELEMENTS ( x è((xè/ ((x)[0])) ) 60  $e¡r2ba (* ¡r , bdaddr_t * ba ) 63 if(! `¡rcmp ( ¡r , "local")) { 64 `baýy ( ba , BDADDR_LOCAL ); 67  `¡r2ba ( ¡r , ba ); 68 } } 70  #DEFAULT_VIEW 0 ) 71  #TREE_VIEW 1 ) 72  #RAW_VIEW 2 ) 73  #XML_VIEW 3 ) 76  s£¬ch_cÚ‹xt { 77 * msvc ; 78 uuid_t mgroup ; 79  mv›w ; 80 ušt32_t mhªdË ; 83 (* thªdËr_t )( tbdaddr_t * tbdaddr ,  t£¬ch_cÚ‹xt * t¬g ); 85  UUID_¡r [ MAX_LEN_UUID_STR ]; 86  bdaddr_t š‹rçû ; 89  smemb”_def { 90 * Çme ; 94  s©Œib_def { 95  num ; 96 * Çme ; 97  memb”_def * memb”s ; 98  memb”_max ; 102  suuid_def { 103  num ; 104 * Çme ; 105  ©Œib_def * ©Œibs ; 106  ©Œib_max ; 110  s©Œib_cÚ‹xt { 111  uuid_def * £rviû ; 112  ©Œib_def * ©Œib ; 113  memb”_šdex ; 117  s£rviû_cÚ‹xt { 118  uuid_def * £rviû ; 122 * šd’t_¥aûs = " "; 127  #SERVICE_ATTR 0x1 ) 130  memb”_def ´ÙocÞ_memb”s [] = { 134 } }; 137  memb”_def g´ofže_memb”s [] = { 143  memb”_def gÏnguage_memb”s [] = { 150  ©Œib_def g©Œib_Çmes [] = { 151 { 0x0, "S”viûRecÜdHªdË", NULL , 0 }, 152 { 0x1, "S”viûCÏssIDLi¡", NULL , 0 }, 153 { 0x2, "S”viûRecÜdS‹", NULL , 0 }, 154 { 0x3, "S”viûID", NULL , 0 }, 156 ´ÙocÞ_memb”s , N_ELEMENTS (protocol_members) }, 157 { 0x5, "Brow£GroupLi¡", NULL , 0 }, 159 Ïnguage_memb”s , N_ELEMENTS (language_members) }, 160 { 0x7, "S”viûInfoTimeToLive", NULL , 0 }, 161 { 0x8, "S”viûAvažabž™y", NULL , 0 }, 163 ´ofže_memb”s , N_ELEMENTS (profile_members) }, 164 { 0xA, "Docum’tiÚURL", NULL , 0 }, 165 { 0xB, "Cl›ÁExecubËURL", NULL , 0 }, 166 { 0xC, "IcÚURL", NULL , 0 }, 167 { 0xD, "Add™iÚ®PrÙocÞDesütÜLi¡s", NULL , 0 }, 171 cÚ¡  g©Œib_max = N_ELEMENTS ( ©Œib_Çmes ); 174  ©Œib_def gsdp_©Œib_Çmes [] = { 175 { 0x200, "V”siÚNumb”Li¡", NULL , 0 }, 176 { 0x201, "S”viûD©aba£S‹", NULL , 0 }, 180  ©Œib_def gbrow£_©Œib_Çmes [] = { 181 { 0x200, "GroupID", NULL , 0 }, 185  ©Œib_def gdid_©Œib_Çmes [] = { 186 { 0x200, "S³cifiÿtiÚID", NULL , 0 }, 187 { 0x201, "V’dÜID", NULL , 0 }, 188 { 0x202, "ProduùID", NULL , 0 }, 189 { 0x203, "V”siÚ", NULL , 0 }, 190 { 0x204, "Prim¬yRecÜd", NULL , 0 }, 191 { 0x205, "V’dÜIDSourû", NULL , 0 }, 195  ©Œib_def ghid_©Œib_Çmes [] = { 196 { 0x200, "DeviûR–—£Num", NULL , 0 }, 197 { 0x201, "P¬£rV”siÚ", NULL , 0 }, 198 { 0x202, "DeviûSubþass", NULL , 0 }, 199 { 0x203, "CouÁryCode", NULL , 0 }, 200 { 0x204, "Vœtu®CabË", NULL , 0 }, 201 { 0x205, "RecÚÃùIn™Ÿ‹", NULL , 0 }, 202 { 0x206, "DesütÜLi¡", NULL , 0 }, 203 { 0x207, "LªgIDBa£Li¡", NULL , 0 }, 204 { 0x208, "SDPDi§bË", NULL , 0 }, 205 { 0x209, "B©‹ryPow”", NULL , 0 }, 206 { 0x20a, "RemÙeWakeup", NULL , 0 }, 207 { 0x20b, "ProfžeV”siÚ", NULL , 0 }, 208 { 0x20c, "Su³rvisiÚTimeout", NULL , 0 }, 209 { 0x20d, "NÜm®lyCÚÃùabË", NULL , 0 }, 210 { 0x20e, "BoÙDeviû", NULL , 0 }, 215  ©Œib_def g·n_©Œib_Çmes [] = { 216 { 0x200, "IpSubÃt", NULL , 0 }, 217 { 0x30A, "Secur™yDesütiÚ", NULL , 0 }, 218 { 0x30B, "N‘AcûssTy³", NULL , 0 }, 219 { 0x30C, "MaxN‘Acûs¤©e", NULL , 0 }, 220 { 0x30D, "IPv4SubÃt", NULL , 0 }, 221 { 0x30E, "IPv6SubÃt", NULL , 0 }, 226  ©Œib_def gaudio_©Œib_Çmes [] = { 227 { 0x302, "RemÙaudiØvÞumcÚŒÞ", NULL , 0 }, 231  ©Œib_def gœmc_©Œib_Çmes [] = { 232 { 0x0301, "SuµÜ‹dD©aStÜesLi¡", NULL , 0 }, 236  ©Œib_def ggÛp_©Œib_Çmes [] = { 237 { 0x200, "GÛpL2ÿpPsm", NULL , 0 }, 241  ©Œib_def gpb­_©Œib_Çmes [] = { 242 { 0x0314, "SuµÜ‹dR•os™Ü›s", NULL , 0 }, 243 { 0x0317, "Pb­SuµÜ‹dF—tu»s", NULL , 0 }, 247  ©Œib_def gmas_©Œib_Çmes [] = { 248 { 0x0315, "MASIn¡ªûID", NULL , 0 }, 249 { 0x0316, "SuµÜ‹dMes§geTy³s", NULL , 0 }, 250 { 0x0317, "M­SuµÜ‹dF—tu»s", NULL , 0 }, 254  ©Œib_def gmns_©Œib_Çmes [] = { 255 { 0x0317, "M­SuµÜ‹dF—tu»s", NULL , 0 }, 259  uuid_def guuid16_Çmes [] = { 261 { 0x0001, "SDP", NULL , 0 }, 262 { 0x0002, "UDP", NULL , 0 }, 263 { 0x0003, "RFCOMM", NULL , 0 }, 264 { 0x0004, "TCP", NULL , 0 }, 265 { 0x0005, "TCS-BIN", NULL , 0 }, 266 { 0x0006, "TCS-AT", NULL , 0 }, 267 { 0x0008, "OBEX", NULL , 0 }, 268 { 0x0009, "IP", NULL , 0 }, 269 { 0x000a, "FTP", NULL , 0 }, 270 { 0x000c, "HTTP", NULL , 0 }, 271 { 0x000e, "WSP", NULL , 0 }, 272 { 0x000f, "BNEP", NULL , 0 }, 273 { 0x0010, "UPnP/ESDP", NULL , 0 }, 274 { 0x0011, "HIDP", NULL , 0 }, 275 { 0x0012, "H¬dcÝyCÚŒÞChªÃl", NULL , 0 }, 276 { 0x0014, "H¬dcÝyD©aChªÃl", NULL , 0 }, 277 { 0x0016, "H¬dcÝyNÙifiÿtiÚ", NULL , 0 }, 278 { 0x0017, "AVCTP", NULL , 0 }, 279 { 0x0019, "AVDTP", NULL , 0 }, 280 { 0x001b, "CMTP", NULL , 0 }, 281 { 0x001d, "UDI_C-PÏÃ", NULL , 0 }, 282 { 0x0100, "L2CAP", NULL , 0 }, 285 sdp_©Œib_Çmes , N_ELEMENTS (sdp_attrib_names) }, 287 brow£_©Œib_Çmes , N_ELEMENTS (browse_attrib_names) }, 288 { 0x1002, "PublicBrow£Group", NULL , 0 }, 289 { 0x1101, "S”ŸlPÜt", NULL , 0 }, 290 { 0x1102, "LANAcûssUsšgPPP", NULL , 0 }, 291 { 0x1103, "DŸlupN‘wÜkšg (DUN)", NULL , 0 }, 293 œmc_©Œib_Çmes , N_ELEMENTS (irmc_attrib_names) }, 295 gÛp_©Œib_Çmes , N_ELEMENTS (goep_attrib_names) }, 297 gÛp_©Œib_Çmes , N_ELEMENTS (goep_attrib_names) }, 298 { 0x1107, "IrMCSyncCommªd", NULL , 0 }, 300 audio_©Œib_Çmes , N_ELEMENTS (audio_attrib_names) }, 301 { 0x1109, "CÜdËssT–•hÚy", NULL , 0 }, 302 { 0x110a, "AudioSourû", NULL , 0 }, 303 { 0x110b, "AudioSšk", NULL , 0 }, 304 { 0x110c, "RemÙeCÚŒÞT¬g‘", NULL , 0 }, 305 { 0x110d, "AdvªûdAudio", NULL , 0 }, 306 { 0x110e, "RemÙeCÚŒÞ", NULL , 0 }, 307 { 0x110f, "RemÙeCÚŒÞCÚŒÞËr", NULL , 0 }, 308 { 0x1110, "IÁ”com", NULL , 0 }, 309 { 0x1111, "Fax", NULL , 0 }, 310 { 0x1112, "H—d£tAudioG©eway", NULL , 0 }, 311 { 0x1113, "WAP", NULL , 0 }, 312 { 0x1114, "WAP Cl›Á", NULL , 0 }, 314 ·n_©Œib_Çmes , N_ELEMENTS (pan_attrib_names) }, 316 ·n_©Œib_Çmes , N_ELEMENTS (pan_attrib_names) }, 318 ·n_©Œib_Çmes , N_ELEMENTS (pan_attrib_names) }, 319 { 0x1118, "DœeùPrštšg (BPP)", NULL , 0 }, 320 { 0x1119, "Reã»nûPrštšg (BPP)", NULL , 0 }, 321 { 0x111a, "Imagšg (BIP)", NULL , 0 }, 322 { 0x111b, "ImagšgRe¥Úd” (BIP)", NULL , 0 }, 323 { 0x111c, "ImagšgAutom©icArchiv(BIP)", NULL , 0 }, 324 { 0x111d, "ImagšgReã»nûdObjeù (BIP)", NULL , 0 }, 325 { 0x111e, "Hªdsä“", NULL , 0 }, 326 { 0x111f, "Hªdsä“AudioG©eway", NULL , 0 }, 327 { 0x1120, "DœeùPrštšgReã»nûObjeùsS”viû (BPP)", NULL , 0 }, 328 { 0x1121, "ReæeùedUI (BPP)", NULL , 0 }, 329 { 0x1122, "BasicPrštšg (BPP)", NULL , 0 }, 330 { 0x1123, "PrštšgStu (BPP)", NULL , 0 }, 332 hid_©Œib_Çmes , N_ELEMENTS (hid_attrib_names) }, 333 { 0x1125, "H¬dcÝyCabËR•Ïûm’ˆ(HCR)", NULL , 0 }, 334 { 0x1126, "HCR_Pršˆ(HCR)", NULL , 0 }, 335 { 0x1127, "HCR_SÿÀ(HCR)", NULL , 0 }, 336 { 0x1128, "CommÚ ISDN Acûs (CIP)", NULL , 0 }, 337 { 0x112a, "UDI-MT", NULL , 0 }, 338 { 0x112b, "UDI-TA", NULL , 0 }, 339 { 0x112c, "Audio/Video", NULL , 0 }, 340 { 0x112d, "SIM Acûs (SAP)", NULL , 0 }, 341 { 0x112e, "PhÚebook Acûs (PBAPè- PCE", NULL , 0 }, 343 pb­_©Œib_Çmes , N_ELEMENTS (pbap_attrib_names) }, 344 { 0x1130, "PhÚebook Acûs (PBAP)", NULL , 0 }, 345 { 0x1131, "H—d£ˆ(HSP)", NULL , 0 }, 347 mas_©Œib_Çmes , N_ELEMENTS (mas_attrib_names) }, 349 mns_©Œib_Çmes , N_ELEMENTS (mns_attrib_names) }, 350 { 0x1134, "Mes§gAcûs (MAP)", NULL , 0 }, 353 did_©Œib_Çmes , N_ELEMENTS (did_attrib_names) }, 354 { 0x1201, "G’”icN‘wÜkšg", NULL , 0 }, 355 { 0x1202, "G’”icFžeT¿nsãr", NULL , 0 }, 357 audio_©Œib_Çmes , N_ELEMENTS (audio_attrib_names) }, 358 { 0x1204, "G’”icT–•hÚy", NULL , 0 }, 360 { 0x1303, "VideoSourû", NULL , 0 }, 361 { 0x1304, "VideoSšk", NULL , 0 }, 362 { 0x1305, "VideoDi¡ributiÚ", NULL , 0 }, 363 { 0x1400, "HDP", NULL , 0 }, 364 { 0x1401, "HDPSourû", NULL , 0 }, 365 { 0x1402, "HDPSšk", NULL , 0 }, 366 { 0x2112, "AµËAg’t", NULL , 0 }, 369 cÚ¡  guuid16_max = N_ELEMENTS ( uuid16_Çmes ); 371  sdp_d©a_´štf ( sdp_d©a_t *,  ©Œib_cÚ‹xt *, ); 378  $sdp_uuid_´štf ( uuid_t * uuid ,  ©Œib_cÚ‹xt * cÚ‹xt ,  šd’t ) 380 ià( uuid ) { 381 ià( uuid -> ty³ =ð SDP_UUID16 ) { 382 ušt16_t uuidNum = uuid -> v®ue . uuid16 ; 383  uuid_def * uuidDef = NULL ; 384  i ; 386  i = 0; i < uuid16_max ; i++) 387 ià( uuid16_Çmes [ i ]. num =ð uuidNum ) { 388 uuidDef = & uuid16_Çmes [ i ]; 393 ià( cÚ‹xt -> ©Œib && cÚ‹xt->©Œib-> num =ð SERVICE_ATTR ) { 395 cÚ‹xt -> £rviû = uuidDef ; 398 ià( uuidDef ) 399 `´štf ("%.*sUUID16 : 0x%.4x - %s\n", 400 šd’t , šd’t_¥aûs , uuidNum , uuidDef -> Çme ); 402 `´štf ("%.*sUUID16 : 0x%.4x\n", 403 šd’t , šd’t_¥aûs , uuidNum ); 404 } ià( uuid -> ty³ =ð SDP_UUID32 ) { 405  uuid_def * uuidDef = NULL ; 406  i ; 408 ià(!( uuid -> v®ue . uuid32 & 0xffff0000)) { 409 ušt16_t uuidNum = uuid -> v®ue . uuid32 ; 410  i = 0; i < uuid16_max ; i++) 411 ià( uuid16_Çmes [ i ]. num =ð uuidNum ) { 412 uuidDef = & uuid16_Çmes [ i ]; 417 ià( uuidDef ) 418 `´štf ("%.*sUUID32 : 0x%.8x - %s\n", 419 šd’t , šd’t_¥aûs , uuid -> v®ue . uuid32 , uuidDef -> Çme ); 421 `´štf ("%.*sUUID32 : 0x%.8x\n", 422 šd’t , šd’t_¥aûs , uuid -> v®ue . uuid32 ); 423 } ià( uuid -> ty³ =ð SDP_UUID128 ) { 424  d©a0 ; 425  d©a1 ; 426  d©a2 ; 427  d©a3 ; 428  d©a4 ; 429  d©a5 ; 431 `memýy (& d©a0 , & uuid -> v®ue . uuid128 . d©a [0], 4); 432 `memýy (& d©a1 , & uuid -> v®ue . uuid128 . d©a [4], 2); 433 `memýy (& d©a2 , & uuid -> v®ue . uuid128 . d©a [6], 2); 434 `memýy (& d©a3 , & uuid -> v®ue . uuid128 . d©a [8], 2); 435 `memýy (& d©a4 , & uuid -> v®ue . uuid128 . d©a [10], 4); 436 `memýy (& d©a5 , & uuid -> v®ue . uuid128 . d©a [14], 2); 438 `´štf ("%.*sUUID128 : 0x%.8x-%.4x-%.4x-%.4x-%.8x-%.4x\n", 439 šd’t , šd’t_¥aûs , 440 `Áohl ( d©a0 ), `Áohs ( d©a1 ),‚tohs( d©a2 ), 441 `Áohs ( d©a3 ), `Áohl ( d©a4 ),‚tohs( d©a5 )); 443 `´štf ("%.*sEnumype of UUID‚ot set\n", 444 šd’t , šd’t_¥aûs ); 446 `´štf ("%.*sNull…assedo…rint UUID\n", 447 šd’t , šd’t_¥aûs ); 448 } } 453  $´štf_d©a£q ( sdp_d©a_t * pD©a ,  ©Œib_cÚ‹xt * cÚ‹xt ,  šd’t ) 455 sdp_d©a_t * sdpd©a = NULL ; 457 sdpd©a = pD©a ; 458 ià( sdpd©a ) { 459 cÚ‹xt -> memb”_šdex = 0; 461 `sdp_d©a_´štf ( sdpd©a , cÚ‹xt , šd’t + 2); 462 sdpd©a = sdpd©a-> Ãxt ; 463 cÚ‹xt -> memb”_šdex ++; 464 }  sdpd©a ); 466 `´štf ("%.*sBrok’ d©a£q†šk\n", šd’t , šd’t_¥aûs ); 468 } } 474  $sdp_d©a_´štf ( sdp_d©a_t * sdpd©a ,  ©Œib_cÚ‹xt * cÚ‹xt ,  šd’t ) 476 * memb”_Çme = NULL ; 479 ià( cÚ‹xt && cÚ‹xt-> ©Œib && cÚ‹xt->©Œib-> memb”s && 480 cÚ‹xt -> memb”_šdex < cÚ‹xt-> ©Œib -> memb”_max ) { 481 memb”_Çme = cÚ‹xt -> ©Œib -> memb”s [cÚ‹xt-> memb”_šdex ]. Çme ; 484  sdpd©a -> dtd ) { 485  SDP_DATA_NIL : 486 `´štf ("%.*sNž\n", šd’t , šd’t_¥aûs ); 488  SDP_BOOL : 489  SDP_UINT8 : 490  SDP_UINT16 : 491  SDP_UINT32 : 492  SDP_UINT64 : 493  SDP_UINT128 : 494  SDP_INT8 : 495  SDP_INT16 : 496  SDP_INT32 : 497  SDP_INT64 : 498  SDP_INT128 : 499 ià( memb”_Çme ) { 500 `´štf ("%.*s%s (Integer) : 0x%x\n", 501 šd’t , šd’t_¥aûs , memb”_Çme , sdpd©a -> v® . ušt32 ); 503 `´štf ("%.*sIÁeg” : 0x%x\n", šd’t , šd’t_¥aûs , 504 sdpd©a -> v® . ušt32 ); 508  SDP_UUID16 : 509  SDP_UUID32 : 510  SDP_UUID128 : 512 `sdp_uuid_´štf (& sdpd©a -> v® . uuid , cÚ‹xt , šd’t ); 515  SDP_TEXT_STR8 : 516  SDP_TEXT_STR16 : 517  SDP_TEXT_STR32 : 518 ià( sdpd©a -> un™Size > (è `¡¾’ (sdpd©a-> v® . ¡r )) { 519  i ; 520 `´štf ("%.*sD©¨:", šd’t , šd’t_¥aûs ); 521  i = 0; i < sdpd©a -> un™Size ; i++) 522 `´štf (" %02x", (è sdpd©a -> v® . ¡r [ i ]); 523 `´štf ("\n"); 525 `´štf ("%.*sTexˆ: \"%s\"\n", šd’t , šd’t_¥aûs , sdpd©a -> v® . ¡r ); 527  SDP_URL_STR8 : 528  SDP_URL_STR16 : 529  SDP_URL_STR32 : 530 `´štf ("%.*sURL : %s\n", šd’t , šd’t_¥aûs , sdpd©a -> v® . ¡r ); 533  SDP_SEQ8 : 534  SDP_SEQ16 : 535  SDP_SEQ32 : 536 `´štf ("%.*sD©¨Sequ’û\n", šd’t , šd’t_¥aûs ); 537 `´štf_d©a£q ( sdpd©a -> v® . d©a£q , cÚ‹xt , šd’t ); 540  SDP_ALT8 : 541  SDP_ALT16 : 542  SDP_ALT32 : 543 `´štf ("%.*sD©¨Sequ’û AɔNjs\n", šd’t , šd’t_¥aûs ); 544 `´štf_d©a£q ( sdpd©a -> v® . d©a£q , cÚ‹xt , šd’t ); 547 } } 552  $´št_Œ“_©Œ_func (* v®ue , * u£rD©a ) 554 sdp_d©a_t * sdpd©a = v®ue ; 555 ušt16_t ©ŒId ; 556  £rviû_cÚ‹xt * £rviû = (£rviû_cÚ‹xˆ*è u£rD©a ; 557  ©Œib_cÚ‹xt cÚ‹xt ; 558  ©Œib_def * ©ŒDef = NULL ; 559  i ; 561 ià(! sdpd©a ) 564 ©ŒId = sdpd©a ->attrId; 566  i = 0; i < ©Œib_max ; i++) 567 ià( ©Œib_Çmes [ i ]. num =ð ©ŒId ) { 568 ©ŒDef = & ©Œib_Çmes [ i ]; 572 ià(( ©ŒDef =ð NULL è&& ( £rviû ->service != NULL) && 573 ( £rviû ->£rviû-> ©Œibs !ð NULL )) { 574  ©Œib_def * svc_©Œibs = £rviû ->£rviû-> ©Œibs ; 575  svc_©Œib_max = £rviû ->£rviû-> ©Œib_max ; 576  i = 0; i < svc_©Œib_max ; i++) 577 ià( svc_©Œibs [ i ]. num =ð ©ŒId ) { 578 ©ŒDef = & svc_©Œibs [ i ]; 583 ià( ©ŒDef ) 584 `´štf ("A‰ribu‹ Id’tif›¸: 0x%x - %s\n", ©ŒId , ©ŒDef -> Çme ); 586 `´štf ("A‰ribu‹ Id’tif›¸: 0x%x\n", ©ŒId ); 588 cÚ‹xt . £rviû = service->service; 589 cÚ‹xt . ©Œib = ©ŒDef ; 590 cÚ‹xt . memb”_šdex = 0; 592 `sdp_d©a_´štf ( sdpd©a , & cÚ‹xt , 2); 594 £rviû ->£rviû = cÚ‹xt .service; 595 } } 602  $´št_Œ“_©Œ ( sdp_»cÜd_t * »c ) 604 ià( »c &&„ec-> ©Œli¡ ) { 605  £rviû_cÚ‹xt £rviû = { NULL }; 606 `sdp_li¡_fÜ—ch ( »c -> ©Œli¡ , ´št_Œ“_©Œ_func , & £rviû ); 608 } } 610  $´št_¿w_d©a ( sdp_d©a_t * d©a ,  šd’t ) 612  uuid_def * def ; 613  i , hex ; 615 ià(! d©a ) 618  i = 0; i < šd’t ; i++) 619 `´štf ("\t"); 621  d©a -> dtd ) { 622  SDP_DATA_NIL : 623 `´štf ("NIL\n"); 625  SDP_BOOL : 626 `´štf ("BoÞ %s\n", d©a -> v® . ušt8 ? "True" : "False"); 628  SDP_UINT8 : 629 `´štf ("UINT8 0x%02x\n", d©a -> v® . ušt8 ); 631  SDP_UINT16 : 632 `´štf ("UINT16 0x%04x\n", d©a -> v® . ušt16 ); 634  SDP_UINT32 : 635 `´štf ("UINT32 0x%08x\n", d©a -> v® . ušt32 ); 637  SDP_UINT64 : 638 `´štf ("UINT64 0x%016jx\n", d©a -> v® . ušt64 ); 640  SDP_UINT128 : 641 `´štf ("UINT128 ...\n"); 643  SDP_INT8 : 644 `´štf ("INT8 %d\n", d©a -> v® . št8 ); 646  SDP_INT16 : 647 `´štf ("INT16 %d\n", d©a -> v® . št16 ); 649  SDP_INT32 : 650 `´štf ("INT32 %d\n", d©a -> v® . št32 ); 652  SDP_INT64 : 653 `´štf ("INT64 %jd\n", d©a -> v® . št64 ); 655  SDP_INT128 : 656 `´štf ("INT128 ...\n"); 658  SDP_UUID16 : 659  SDP_UUID32 : 660  SDP_UUID128 : 661  d©a -> v® . uuid . ty³ ) { 662  SDP_UUID16 : 663 def = NULL ; 664  i = 0; i < uuid16_max ; i++) 665 ià( uuid16_Çmes [ i ]. num =ð d©a -> v® . uuid . v®ue . uuid16 ) { 666 def = & uuid16_Çmes [ i ]; 669 ià( def ) 670 `´štf ("UUID16 0x%04x - %s\n", d©a -> v® . uuid . v®ue . uuid16 , def -> Çme ); 672 `´štf ("UUID16 0x%04x\n", d©a -> v® . uuid . v®ue . uuid16 ); 674  SDP_UUID32 : 675 def = NULL ; 676 ià(!( d©a -> v® . uuid . v®ue . uuid32 & 0xffff0000)) { 677 ušt16_t v®ue = d©a -> v® . uuid .v®ue. uuid32 ; 678  i = 0; i < uuid16_max ; i++) 679 ià( uuid16_Çmes [ i ]. num =ð v®ue ) { 680 def = & uuid16_Çmes [ i ]; 684 ià( def ) 685 `´štf ("UUID32 0x%08x - %s\n", d©a -> v® . uuid . v®ue . uuid32 , def -> Çme ); 687 `´štf ("UUID32 0x%08x\n", d©a -> v® . uuid . v®ue . uuid32 ); 689  SDP_UUID128 : 690 `´štf ("UUID128 "); 691  i = 0; i < 16; i++) { 692  i ) { 697 `´štf ("-"); 700 `´štf ("%02x", (è d©a -> v® . uuid . v®ue . uuid128 .d©a[ i ]); 702 `´štf ("\n"); 705 `´štf ("UUIDy³ 0x%02x\n", d©a -> v® . uuid . ty³ ); 709  SDP_TEXT_STR8 : 710  SDP_TEXT_STR16 : 711  SDP_TEXT_STR32 : 712 hex = 0; 713  i = 0; i < d©a -> un™Size ; i++) { 714 ià( i =ð( d©a -> un™Size - 1è&& d©a-> v® . ¡r [i] == '\0') 716 ià(! `i¥ršt ( d©a -> v® . ¡r [ i ])) { 717 hex = 1; 721 ià( hex ) { 722 `´štf ("Data"); 723  i = 0; i < d©a -> un™Size ; i++) 724 `´štf (" %02x", (è d©a -> v® . ¡r [ i ]); 726 `´štf ("String "); 727  i = 0; i < d©a -> un™Size ; i++) 728 `´štf ("%c", d©a -> v® . ¡r [ i ]); 730 `´štf ("\n"); 732  SDP_URL_STR8 : 733  SDP_URL_STR16 : 734  SDP_URL_STR32 : 735 `´štf ("URL %s\n", d©a -> v® . ¡r ); 737  SDP_SEQ8 : 738  SDP_SEQ16 : 739  SDP_SEQ32 : 740 `´štf ("Sequence\n"); 741 `´št_¿w_d©a ( d©a -> v® . d©a£q , šd’t + 1); 743  SDP_ALT8 : 744  SDP_ALT16 : 745  SDP_ALT32 : 746 `´štf ("Alternate\n"); 747 `´št_¿w_d©a ( d©a -> v® . d©a£q , šd’t + 1); 750 `´štf ("UnknowÀty³ 0x%02x\n", d©a -> dtd ); 754 `´št_¿w_d©a ( d©a -> Ãxt , šd’t ); 755 } } 757  $´št_¿w_©Œ_func (* v®ue , * u£rD©a ) 759 sdp_d©a_t * d©a = (sdp_d©a_ˆ*è v®ue ; 760  ©Œib_def * def = NULL ; 761  i ; 763 ià(! d©a ) 767  i = 0; i < ©Œib_max ; i++) 768 ià( ©Œib_Çmes [ i ]. num =ð d©a -> ©ŒId ) { 769 def = & ©Œib_Çmes [ i ]; 773 ià( def ) 774 `´štf ("\tA‰ribu‹ 0x%04x - %s\n", d©a -> ©ŒId , def -> Çme ); 776 `´štf ("\tA‰ribu‹ 0x%04x\n", d©a -> ©ŒId ); 778 `´št_¿w_d©a ( d©a , 2); 779 } } 781  $´št_¿w_©Œ ( sdp_»cÜd_t * »c ) 783 ià( »c &&„ec-> ©Œli¡ ) { 784 `´štf ("Sequence\n"); 785 `sdp_li¡_fÜ—ch ( »c -> ©Œli¡ , ´št_¿w_©Œ_func , 0); 787 } } 793  $£t_©Œib ( sdp_£ssiÚ_t * £ss , ušt32_t hªdË , ušt16_t ©Œib , * v®ue ) 795 sdp_li¡_t * ©Œid_li¡ ; 796 ušt32_t ¿nge = 0x0000ffff; 797 sdp_»cÜd_t * »c ; 798  »t ; 801 ©Œid_li¡ = `sdp_li¡_­³nd ( NULL , & ¿nge ); 802 »c = `sdp_£rviû_©Œ_»q ( £ss , hªdË , SDP_ATTR_REQ_RANGE , ©Œid_li¡ ); 803 `sdp_li¡_ä“ ( ©Œid_li¡ , NULL ); 805 ià(! »c ) { 806 `´štf ("Service get„equest failed.\n"); 811 ià(! `¡ºÿ£cmp ( v®ue , "u0x", 3)) { 813 ušt16_t v®ue_št = 0; 814 uuid_t v®ue_uuid ; 815 v®ue_št = `¡¹oul ( v®ue + 3, NULL , 16); 816 `sdp_uuid16_ü—‹ (& v®ue_uuid , v®ue_št ); 817 `´štf ("Adding‡ttrib 0x%X uuid16 0x%Xo„ecord 0x%X\n", 818 ©Œib , v®ue_št , hªdË ); 820 `sdp_©Œ_add_Ãw ( »c , ©Œib , SDP_UUID16 , & v®ue_uuid . v®ue . uuid16 ); 821 } ià(! `¡ºÿ£cmp ( v®ue , "0x", 2)) { 823 ušt32_t v®ue_št ; 824 v®ue_št = `¡¹oul ( v®ue + 2, NULL , 16); 825 `´štf ("Adding‡ttrib 0x%X int 0x%Xo„ecord 0x%X\n", 826 ©Œib , v®ue_št , hªdË ); 828 `sdp_©Œ_add_Ãw ( »c , ©Œib , SDP_UINT32 , & v®ue_št ); 831 `´štf ("Adding‡ttrib 0x%X string \"%s\"o„ecord 0x%X\n", 832 ©Œib , v®ue , hªdË ); 835 `sdp_©Œ_add_Ãw ( »c , ©Œib , SDP_TEXT_STR8 , v®ue ); 839 »t = `sdp_deviû_»cÜd_upd©e ( £ss , & š‹rçû , »c ); 840 ià( »t < 0) 841 `´štf ("S”viû RecÜd upd©çžed (%d).\n", ”ºo ); 842 `sdp_»cÜd_ä“ ( »c ); 843  »t ; 844 } } 846  ÝtiÚ g£t_ÝtiÚs [] = { 851 cÚ¡ * g£t_h–p = 858  $cmd_£‰r ( ¬gc , ** ¬gv ) 860  Ýt , ¡©us ; 861 ušt32_t hªdË ; 862 ušt16_t ©Œib ; 863 sdp_£ssiÚ_t * £ss ; 865 `fÜ_—ch_Ýt ( Ýt , £t_ÝtiÚs , NULL ) { 866  Ýt ) { 868 `´štf ("%s", £t_h–p ); 873 ¬gc -ð Ýtšd ; 874 ¬gv +ð Ýtšd ; 876 ià( ¬gc < 3) { 877 `´štf ("%s", £t_h–p ); 882 hªdË = `¡¹oul ( ¬gv [0], NULL , 16); 883 ©Œib = `¡¹oul ( ¬gv [1], NULL , 16); 886 £ss = `sdp_cÚÃù ( BDADDR_ANY , BDADDR_LOCAL , 0); 887 ià(! £ss ) 890 ¡©us = `£t_©Œib ( £ss , hªdË , ©Œib , ¬gv [2]); 891 `sdp_þo£ ( £ss ); 893  ¡©us ; 894 } } 900  $£t_©Œib£q ( sdp_£ssiÚ_t * £ssiÚ , ušt32_t hªdË , ušt16_t ©Œib ,  ¬gc , ** ¬gv ) 902 sdp_li¡_t * ©Œid_li¡ ; 903 ušt32_t ¿nge = 0x0000ffff; 904 sdp_»cÜd_t * »c ; 905 sdp_d©a_t * pSequ’ûHÞd” = NULL ; 906 ** dtdA¼ay ; 907 ** v®ueA¼ay ; 908 ** ®locA¼ay ; 909 ušt8_t uuid16 = SDP_UUID16 ; 910 ušt8_t ušt32 = SDP_UINT32 ; 911 ušt8_t ¡r8 = SDP_TEXT_STR8 ; 912  i , »t = 0; 915 ©Œid_li¡ = `sdp_li¡_­³nd ( NULL , & ¿nge ); 916 »c = `sdp_£rviû_©Œ_»q ( £ssiÚ , hªdË , SDP_ATTR_REQ_RANGE , ©Œid_li¡ ); 917 `sdp_li¡_ä“ ( ©Œid_li¡ , NULL ); 919 ià(! »c ) { 920 `´štf ("Service get„equest failed.\n"); 925 dtdA¼ay = (**) `m®loc ( ¬gc * (*)); 926 v®ueA¼ay = (**) `m®loc ( ¬gc * (*)); 927 ®locA¼ay = (**) `m®loc ( ¬gc * (*)); 930  i = 0; i < ¬gc ; i++) { 932 ià(! `¡ºÿ£cmp ( ¬gv [ i ], "u0x", 3)) { 934 ušt16_t v®ue_št = `¡¹oul (( ¬gv [ i ]è+ 3, NULL , 16); 935 uuid_t * v®ue_uuid = (uuid_ˆ*è `m®loc ((uuid_t)); 936 ®locA¼ay [ i ] = v®ue_uuid ; 937 `sdp_uuid16_ü—‹ ( v®ue_uuid , v®ue_št ); 939 `´štf ("Addšg uuid16 0x%XØ»cÜd 0x%X\n", v®ue_št , hªdË ); 940 dtdA¼ay [ i ] = & uuid16 ; 941 v®ueA¼ay [ i ] = & v®ue_uuid -> v®ue . uuid16 ; 942 } ià(! `¡ºÿ£cmp ( ¬gv [ i ], "0x", 2)) { 944 ušt32_t * v®ue_št = (ušt32_ˆ*è `m®loc (()); 945 ®locA¼ay [ i ] = v®ue_št ; 946 * v®ue_št = `¡¹oul (( ¬gv [ i ]è+ 2, NULL , 16); 948 `´štf ("Addšg iÁ 0x%XØ»cÜd 0x%X\n", * v®ue_št , hªdË ); 949 dtdA¼ay [ i ] = & ušt32 ; 950 v®ueA¼ay [ i ] = v®ue_št ; 953 `´štf ("Addšg sŒšg \"%s\"Ø»cÜd 0x%X\n", ¬gv [ i ], hªdË ); 954 dtdA¼ay [ i ] = & ¡r8 ; 955 v®ueA¼ay [ i ] = ¬gv [i]; 960 pSequ’ûHÞd” = `sdp_£q_®loc ( dtdA¼ay , v®ueA¼ay , ¬gc ); 961 ià( pSequ’ûHÞd” ) { 962 `sdp_©Œ_»¶aû ( »c , ©Œib , pSequ’ûHÞd” ); 965 »t = `sdp_deviû_»cÜd_upd©e ( £ssiÚ , & š‹rçû , »c ); 966 ià( »t < 0) 967 `´štf ("S”viû RecÜd upd©çžed (%d).\n", ”ºo ); 969 `´štf ("Failedo create…SequenceHolder\n"); 972  i = 0; i < ¬gc ; i++) 973 `ä“ ( ®locA¼ay [ i ]); 975 `ä“ ( dtdA¼ay ); 976 `ä“ ( v®ueA¼ay ); 977 `ä“ ( ®locA¼ay ); 979 `sdp_»cÜd_ä“ ( »c ); 981  »t ; 982 } } 984  ÝtiÚ g£q_ÝtiÚs [] = { 989 cÚ¡ * g£q_h–p = 997  $cmd_£t£q ( ¬gc , ** ¬gv ) 999  Ýt , ¡©us ; 1000 ušt32_t hªdË ; 1001 ušt16_t ©Œib ; 1002 sdp_£ssiÚ_t * £ss ; 1004 `fÜ_—ch_Ýt ( Ýt , £q_ÝtiÚs , NULL ) { 1005  Ýt ) { 1007 `´štf ("%s", £q_h–p ); 1012 ¬gc -ð Ýtšd ; 1013 ¬gv +ð Ýtšd ; 1015 ià( ¬gc < 3) { 1016 `´štf ("%s", £q_h–p ); 1021 hªdË = `¡¹oul ( ¬gv [0], NULL , 16); 1022 ©Œib = `¡¹oul ( ¬gv [1], NULL , 16); 1024 ¬gc -= 2; 1025 ¬gv += 2; 1028 £ss = `sdp_cÚÃù ( BDADDR_ANY , BDADDR_LOCAL , 0); 1029 ià(! £ss ) 1032 ¡©us = `£t_©Œib£q ( £ss , hªdË , ©Œib , ¬gc , ¬gv ); 1033 `sdp_þo£ ( £ss ); 1035  ¡©us ; 1036 } } 1038  $´št_£rviû_þass (* v®ue , * u£rD©a ) 1040  S”viûCÏssUUID_¡r [ MAX_LEN_SERVICECLASS_UUID_STR ]; 1041 uuid_t * uuid = (uuid_ˆ*) v®ue ; 1043 `sdp_uuid2¡º ( uuid , UUID_¡r , MAX_LEN_UUID_STR ); 1044 `sdp_svþass_uuid2¡º ( uuid , S”viûCÏssUUID_¡r , MAX_LEN_SERVICECLASS_UUID_STR ); 1045 ià( uuid -> ty³ !ð SDP_UUID128 ) 1046 `´štf (" \"%s\" (0x%s)\n", S”viûCÏssUUID_¡r , UUID_¡r ); 1048 `´štf (" UUID 128: %s\n", UUID_¡r ); 1049 } } 1051  $´št_£rviû_desc (* v®ue , * u£r ) 1053  ¡r [ MAX_LEN_PROTOCOL_UUID_STR ]; 1054 sdp_d©a_t * p = (sdp_d©a_ˆ*) v®ue , * s ; 1055  i = 0, ´Ùo = 0; 1057 ; p ;… =…-> Ãxt , i ++) { 1058  p -> dtd ) { 1059  SDP_UUID16 : 1060  SDP_UUID32 : 1061  SDP_UUID128 : 1062 `sdp_uuid2¡º (& p -> v® . uuid , UUID_¡r , MAX_LEN_UUID_STR ); 1063 `sdp_´Ùo_uuid2¡º (& p -> v® . uuid , ¡r , (str)); 1064 ´Ùo = `sdp_uuid_to_´Ùo (& p -> v® . uuid ); 1065 `´štf (" \"%s\" (0x%s)\n", ¡r , UUID_¡r ); 1067  SDP_UINT8 : 1068 ià( ´Ùo =ð RFCOMM_UUID ) 1069 `´štf (" ChªÃl: %d\n", p -> v® . ušt8 ); 1071 `´štf (" ušt8: 0x%02x\n", p -> v® . ušt8 ); 1073  SDP_UINT16 : 1074 ià( ´Ùo =ð L2CAP_UUID ) { 1075 ià( i == 1) 1076 `´štf (" PSM: %d\n", p -> v® . ušt16 ); 1078 `´štf (" V”siÚ: 0x%04x\n", p -> v® . ušt16 ); 1079 } ià( ´Ùo =ð BNEP_UUID ) 1080 ià( i == 1) 1081 `´štf (" V”siÚ: 0x%04x\n", p -> v® . ušt16 ); 1083 `´štf (" ušt16: 0x%04x\n", p -> v® . ušt16 ); 1085 `´štf (" ušt16: 0x%04x\n", p -> v® . ušt16 ); 1087  SDP_SEQ16 : 1088 `´štf (" SEQ16:"); 1089  s = p -> v® . d©a£q ; s; s = s-> Ãxt ) 1090 `´štf (" %x", s -> v® . ušt16 ); 1091 `´štf ("\n"); 1093  SDP_SEQ8 : 1094 `´štf (" SEQ8:"); 1095  s = p -> v® . d©a£q ; s; s = s-> Ãxt ) 1096 `´štf (" %x", s -> v® . ušt8 ); 1097 `´štf ("\n"); 1100 `´štf (" FIXME: dtd=0%x\n", p -> dtd ); 1104 } } 1106  $´št_Ïng_©Œ (* v®ue , * u£r ) 1108 sdp_Ïng_©Œ_t * Ïng = (sdp_Ïng_©Œ_ˆ*) v®ue ; 1109 `´štf (" code_ISO639: 0x%02x\n", Ïng -> code_ISO639 ); 1110 `´štf ("ƒncodšg: 0x%02x\n", Ïng -> ’codšg ); 1111 `´štf (" ba£_off£t: 0x%02x\n", Ïng -> ba£_off£t ); 1112 } } 1114  $´št_acûss_´Ùos (* v®ue , * u£rD©a ) 1116 sdp_li¡_t * ´ÙDescSeq = (sdp_li¡_ˆ*) v®ue ; 1117 `sdp_li¡_fÜ—ch ( ´ÙDescSeq , ´št_£rviû_desc , 0); 1118 } } 1120  $´št_´ofže_desc (* v®ue , * u£rD©a ) 1122 sdp_´ofže_desc_t * desc = (sdp_´ofže_desc_ˆ*) v®ue ; 1123  ¡r [ MAX_LEN_PROFILEDESCRIPTOR_UUID_STR ]; 1125 `sdp_uuid2¡º (& desc -> uuid , UUID_¡r , MAX_LEN_UUID_STR ); 1126 `sdp_´ofže_uuid2¡º (& desc -> uuid , ¡r , MAX_LEN_PROFILEDESCRIPTOR_UUID_STR ); 1128 `´štf (" \"%s\" (0x%s)\n", ¡r , UUID_¡r ); 1129 ià( desc -> v”siÚ ) 1130 `´štf (" V”siÚ: 0x%04x\n", desc -> v”siÚ ); 1131 } } 1136  $´št_£rviû_©Œ ( sdp_»cÜd_t * »c ) 1138 sdp_li¡_t * li¡ = 0, * ´Ùo = 0; 1140 `sdp_»cÜd_´št ( »c ); 1142 `´štf ("S”viû RecHªdË: 0x%x\n", »c -> hªdË ); 1144 ià( `sdp_g‘_£rviû_þas£s ( »c , & li¡ ) == 0) { 1145 `´štf ("Service Class ID List:\n"); 1146 `sdp_li¡_fÜ—ch ( li¡ , ´št_£rviû_þass , 0); 1147 `sdp_li¡_ä“ ( li¡ , ä“ ); 1149 ià( `sdp_g‘_acûss_´Ùos ( »c , & ´Ùo ) == 0) { 1150 `´štf ("Protocol Descriptor List:\n"); 1151 `sdp_li¡_fÜ—ch ( ´Ùo , ´št_acûss_´Ùos , 0); 1152 `sdp_li¡_fÜ—ch ( ´Ùo , ( sdp_li¡_func_t ) sdp_li¡_ä“ , 0); 1153 `sdp_li¡_ä“ ( ´Ùo , 0); 1155 ià( `sdp_g‘_Ïng_©Œ ( »c , & li¡ ) == 0) { 1156 `´štf ("Language Base Attr List:\n"); 1157 `sdp_li¡_fÜ—ch ( li¡ , ´št_Ïng_©Œ , 0); 1158 `sdp_li¡_ä“ ( li¡ , ä“ ); 1160 ià( `sdp_g‘_´ofže_descs ( »c , & li¡ ) == 0) { 1161 `´štf ("Profile Descriptor List:\n"); 1162 `sdp_li¡_fÜ—ch ( li¡ , ´št_´ofže_desc , 0); 1163 `sdp_li¡_ä“ ( li¡ , ä“ ); 1165 } } 1171 ušt32_t mhªdË ; 1172 * mÇme ; 1173 * m´ovid” ; 1174 * mdesc ; 1175  mþass ; 1176  m´ofže ; 1177 ušt16_t mpsm ; 1178 ušt8_t mchªÃl ; 1179 ušt8_t mÃtwÜk ; 1180 } tsvc_šfo_t ; 1182  $add_¥ ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 1184 sdp_li¡_t * svþass_id , * ­£q , * ´Ùo [2], * ´ofžes , * roÙ , * ­rÙo ; 1185 uuid_t roÙ_uuid , ¥_uuid , l2ÿp , rfcomm ; 1186 sdp_´ofže_desc_t ´ofže ; 1187 sdp_»cÜd_t »cÜd ; 1188 ušt8_t u8 = si -> chªÃl ? si->channel : 1; 1189 sdp_d©a_t * chªÃl ; 1190  »t = 0; 1192 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 1193 »cÜd . hªdË = si ->handle; 1194 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 1195 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 1196 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 1198 `sdp_uuid16_ü—‹ (& ¥_uuid , SERIAL_PORT_SVCLASS_ID ); 1199 svþass_id = `sdp_li¡_­³nd (0, & ¥_uuid ); 1200 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 1202 `sdp_uuid16_ü—‹ (& ´ofže . uuid , SERIAL_PORT_PROFILE_ID ); 1203 #ifdeà __TIZEN_PATCH__ 1204 ´ofže . v”siÚ = 0x0102; 1206 ´ofže . v”siÚ = 0x0100; 1208 ´ofžes = `sdp_li¡_­³nd (0, & ´ofže ); 1209 `sdp_£t_´ofže_descs (& »cÜd , ´ofžes ); 1211 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 1212 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp ); 1213 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 1215 `sdp_uuid16_ü—‹ (& rfcomm , RFCOMM_UUID ); 1216 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm ); 1217 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & u8 ); 1218 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 1219 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 1221 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 1222 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 1224 `sdp_add_Ïng_©Œ (& »cÜd ); 1226 `sdp_£t_šfo_©Œ (& »cÜd , "Serial Port", "BlueZ", "COM Port"); 1228 `sdp_£t_u¾_©Œ (& »cÜd , "http://www.bluez.org/", 1231 `sdp_£t_£rviû_id (& »cÜd , ¥_uuid ); 1232 `sdp_£t_£rviû_‰l (& »cÜd , 0xffff); 1233 `sdp_£t_£rviû_avaž (& »cÜd , 0xff); 1234 `sdp_£t_»cÜd_¡©e (& »cÜd , 0x00001234); 1236 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 1237 `´štf ("Service Record„egistration failed\n"); 1238 »t = -1; 1239  ’d ; 1242 `´štf ("Serial Port service„egistered\n"); 1244 ’d : 1245 `sdp_d©a_ä“ ( chªÃl ); 1246 `sdp_li¡_ä“ ( ´Ùo [0], 0); 1247 `sdp_li¡_ä“ ( ´Ùo [1], 0); 1248 `sdp_li¡_ä“ ( ­£q , 0); 1249 `sdp_li¡_ä“ ( ­rÙo , 0); 1250 `sdp_li¡_ä“ ( roÙ , 0); 1251 `sdp_li¡_ä“ ( svþass_id , 0); 1252 `sdp_li¡_ä“ ( ´ofžes , 0); 1254  »t ; 1255 } } 1257  $add_dun ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 1259 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ , * ­rÙo ; 1260 uuid_t roÙu , dun , gn , l2ÿp , rfcomm ; 1261 sdp_´ofže_desc_t ´ofže ; 1262 sdp_li¡_t * ´Ùo [2]; 1263 sdp_»cÜd_t »cÜd ; 1264 ušt8_t u8 = si -> chªÃl ? si->channel : 2; 1265 sdp_d©a_t * chªÃl ; 1266  »t = 0; 1268 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 1269 »cÜd . hªdË = si ->handle; 1271 `sdp_uuid16_ü—‹ (& roÙu , PUBLIC_BROWSE_GROUP ); 1272 roÙ = `sdp_li¡_­³nd (0, & roÙu ); 1273 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 1275 `sdp_uuid16_ü—‹ (& dun , DIALUP_NET_SVCLASS_ID ); 1276 svþass_id = `sdp_li¡_­³nd (0, & dun ); 1277 `sdp_uuid16_ü—‹ (& gn , GENERIC_NETWORKING_SVCLASS_ID ); 1278 svþass_id = `sdp_li¡_­³nd (svþass_id, & gn ); 1279 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 1281 `sdp_uuid16_ü—‹ (& ´ofže . uuid , DIALUP_NET_PROFILE_ID ); 1282 ´ofže . v”siÚ = 0x0100; 1283 pf£q = `sdp_li¡_­³nd (0, & ´ofže ); 1284 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 1286 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 1287 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp ); 1288 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 1290 `sdp_uuid16_ü—‹ (& rfcomm , RFCOMM_UUID ); 1291 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm ); 1292 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & u8 ); 1293 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 1294 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 1296 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 1297 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 1299 `sdp_£t_šfo_©Œ (& »cÜd , "Dial-Up Networking", 0, 0); 1301 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 1302 `´štf ("Service Record„egistration failed\n"); 1303 »t = -1; 1304  ’d ; 1307 `´štf ("Dial-Up Networking service„egistered\n"); 1309 ’d : 1310 `sdp_d©a_ä“ ( chªÃl ); 1311 `sdp_li¡_ä“ ( ´Ùo [0], 0); 1312 `sdp_li¡_ä“ ( ´Ùo [1], 0); 1313 `sdp_li¡_ä“ ( ­£q , 0); 1314 `sdp_li¡_ä“ ( ­rÙo , 0); 1316  »t ; 1317 } } 1319  $add_çx ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 1321 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 1322 uuid_t roÙ_uuid , çx_uuid , ‹l_uuid , l2ÿp_uuid , rfcomm_uuid ; 1323 sdp_´ofže_desc_t ´ofže ; 1324 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 1325 sdp_»cÜd_t »cÜd ; 1326 ušt8_t u8 = si -> chªÃl ? si->channel : 3; 1327 sdp_d©a_t * chªÃl ; 1328  »t = 0; 1330 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 1331 »cÜd . hªdË = si ->handle; 1333 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 1334 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 1335 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 1337 `sdp_uuid16_ü—‹ (& çx_uuid , FAX_SVCLASS_ID ); 1338 svþass_id = `sdp_li¡_­³nd (0, & çx_uuid ); 1339 `sdp_uuid16_ü—‹ (& ‹l_uuid , GENERIC_TELEPHONY_SVCLASS_ID ); 1340 svþass_id = `sdp_li¡_­³nd (svþass_id, & ‹l_uuid ); 1341 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 1343 `sdp_uuid16_ü—‹ (& ´ofže . uuid , FAX_PROFILE_ID ); 1344 ´ofže . v”siÚ = 0x0100; 1345 pf£q = `sdp_li¡_­³nd (0, & ´ofže ); 1346 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 1348 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 1349 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 1350 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 1352 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 1353 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm_uuid ); 1354 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & u8 ); 1355 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 1356 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 1358 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 1359 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 1361 `sdp_£t_šfo_©Œ (& »cÜd , "Fax", 0, 0); 1363 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 1364 `´štf ("Service Record„egistration failed\n"); 1365 »t = -1; 1366  ’d ; 1368 `´štf ("Fax service„egistered\n"); 1369 ’d : 1370 `sdp_d©a_ä“ ( chªÃl ); 1371 `sdp_li¡_ä“ ( ´Ùo [0], 0); 1372 `sdp_li¡_ä“ ( ´Ùo [1], 0); 1373 `sdp_li¡_ä“ ( ­£q , 0); 1374 `sdp_li¡_ä“ ( ­rÙo , 0); 1375  »t ; 1376 } } 1378  $add_Ïn ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 1380 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 1381 uuid_t roÙ_uuid , svþass_uuid , l2ÿp_uuid , rfcomm_uuid ; 1382 sdp_´ofže_desc_t ´ofže ; 1383 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 1384 sdp_»cÜd_t »cÜd ; 1385 ušt8_t u8 = si -> chªÃl ? si->channel : 4; 1386 sdp_d©a_t * chªÃl ; 1387  »t = 0; 1389 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 1390 »cÜd . hªdË = si ->handle; 1392 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 1393 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 1394 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 1396 `sdp_uuid16_ü—‹ (& svþass_uuid , LAN_ACCESS_SVCLASS_ID ); 1397 svþass_id = `sdp_li¡_­³nd (0, & svþass_uuid ); 1398 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 1400 `sdp_uuid16_ü—‹ (& ´ofže . uuid , LAN_ACCESS_PROFILE_ID ); 1401 ´ofže . v”siÚ = 0x0100; 1402 pf£q = `sdp_li¡_­³nd (0, & ´ofže ); 1403 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 1405 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 1406 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 1407 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 1409 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 1410 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm_uuid ); 1411 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & u8 ); 1412 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 1413 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 1415 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 1416 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 1418 `sdp_£t_šfo_©Œ (& »cÜd , "LAN Access over PPP", 0, 0); 1420 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 1421 `´štf ("Service Record„egistration failed\n"); 1422 »t = -1; 1423  ’d ; 1426 `´štf ("LAN Access service„egistered\n"); 1428 ’d : 1429 `sdp_d©a_ä“ ( chªÃl ); 1430 `sdp_li¡_ä“ ( ´Ùo [0], 0); 1431 `sdp_li¡_ä“ ( ´Ùo [1], 0); 1432 `sdp_li¡_ä“ ( ­£q , 0); 1433 `sdp_li¡_ä“ ( ­rÙo , 0); 1435  »t ; 1436 } } 1438  $add_h—d£t ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 1440 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 1441 uuid_t roÙ_uuid , svþass_uuid , ga_svþass_uuid , l2ÿp_uuid , rfcomm_uuid ; 1442 sdp_´ofže_desc_t ´ofže ; 1443 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 1444 sdp_»cÜd_t »cÜd ; 1445 ušt8_t u8 = si -> chªÃl ? si->channel : 5; 1446 sdp_d©a_t * chªÃl ; 1447  »t = 0; 1449 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 1450 »cÜd . hªdË = si ->handle; 1452 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 1453 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 1454 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 1456 `sdp_uuid16_ü—‹ (& svþass_uuid , HEADSET_SVCLASS_ID ); 1457 svþass_id = `sdp_li¡_­³nd (0, & svþass_uuid ); 1458 `sdp_uuid16_ü—‹ (& ga_svþass_uuid , GENERIC_AUDIO_SVCLASS_ID ); 1459 svþass_id = `sdp_li¡_­³nd (svþass_id, & ga_svþass_uuid ); 1460 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 1462 `sdp_uuid16_ü—‹ (& ´ofže . uuid , HEADSET_PROFILE_ID ); 1463 ´ofže . v”siÚ = 0x0100; 1464 pf£q = `sdp_li¡_­³nd (0, & ´ofže ); 1465 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 1467 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 1468 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 1469 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 1471 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 1472 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm_uuid ); 1473 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & u8 ); 1474 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 1475 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 1477 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 1478 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 1480 `sdp_£t_šfo_©Œ (& »cÜd , "Headset", 0, 0); 1482 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 1483 `´štf ("Service Record„egistration failed\n"); 1484 »t = -1; 1485  ’d ; 1488 `´štf ("Headset service„egistered\n"); 1490 ’d : 1491 `sdp_d©a_ä“ ( chªÃl ); 1492 `sdp_li¡_ä“ ( ´Ùo [0], 0); 1493 `sdp_li¡_ä“ ( ´Ùo [1], 0); 1494 `sdp_li¡_ä“ ( ­£q , 0); 1495 `sdp_li¡_ä“ ( ­rÙo , 0); 1497  »t ; 1498 } } 1500  $add_h—d£t_ag ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 1502 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 1503 uuid_t roÙ_uuid , svþass_uuid , ga_svþass_uuid , l2ÿp_uuid , rfcomm_uuid ; 1504 sdp_´ofže_desc_t ´ofže ; 1505 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 1506 sdp_»cÜd_t »cÜd ; 1507 ušt8_t u8 = si -> chªÃl ? si->channel : 7; 1508 sdp_d©a_t * chªÃl ; 1509 ušt8_t Ãtid = si -> ÃtwÜk ? si->network : 0x01; 1510 sdp_d©a_t * ÃtwÜk = `sdp_d©a_®loc ( SDP_UINT8 , & Ãtid ); 1511  »t = 0; 1513 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 1514 »cÜd . hªdË = si ->handle; 1516 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 1517 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 1518 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 1520 `sdp_uuid16_ü—‹ (& svþass_uuid , HEADSET_AGW_SVCLASS_ID ); 1521 svþass_id = `sdp_li¡_­³nd (0, & svþass_uuid ); 1522 `sdp_uuid16_ü—‹ (& ga_svþass_uuid , GENERIC_AUDIO_SVCLASS_ID ); 1523 svþass_id = `sdp_li¡_­³nd (svþass_id, & ga_svþass_uuid ); 1524 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 1526 `sdp_uuid16_ü—‹ (& ´ofže . uuid , HEADSET_PROFILE_ID ); 1527 ´ofže . v”siÚ = 0x0100; 1528 pf£q = `sdp_li¡_­³nd (0, & ´ofže ); 1529 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 1531 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 1532 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 1533 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 1535 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 1536 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm_uuid ); 1537 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & u8 ); 1538 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 1539 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 1541 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 1542 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 1544 `sdp_£t_šfo_©Œ (& »cÜd , "Voice Gateway", 0, 0); 1546 `sdp_©Œ_add (& »cÜd , SDP_ATTR_EXTERNAL_NETWORK , ÃtwÜk ); 1548 ià( `sdp_»cÜd_»gi¡” ( £ssiÚ , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 1549 `´štf ("Service Record„egistration failed\n"); 1550 »t = -1; 1551  ’d ; 1554 `´štf ("Headset AG service„egistered\n"); 1556 ’d : 1557 `sdp_d©a_ä“ ( chªÃl ); 1558 `sdp_li¡_ä“ ( ´Ùo [0], 0); 1559 `sdp_li¡_ä“ ( ´Ùo [1], 0); 1560 `sdp_li¡_ä“ ( ­£q , 0); 1561 `sdp_li¡_ä“ ( ­rÙo , 0); 1563  »t ; 1564 } } 1566  $add_hªdsä“ ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 1568 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 1569 uuid_t roÙ_uuid , svþass_uuid , ga_svþass_uuid , l2ÿp_uuid , rfcomm_uuid ; 1570 sdp_´ofže_desc_t ´ofže ; 1571 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 1572 sdp_»cÜd_t »cÜd ; 1573 ušt8_t u8 = si -> chªÃl ? si->channel : 6; 1574 ušt16_t u16 = 0x31; 1575 sdp_d©a_t * chªÃl , * ã©u»s ; 1576  »t = 0; 1578 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 1579 »cÜd . hªdË = si ->handle; 1581 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 1582 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 1583 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 1585 `sdp_uuid16_ü—‹ (& svþass_uuid , HANDSFREE_SVCLASS_ID ); 1586 svþass_id = `sdp_li¡_­³nd (0, & svþass_uuid ); 1587 `sdp_uuid16_ü—‹ (& ga_svþass_uuid , GENERIC_AUDIO_SVCLASS_ID ); 1588 svþass_id = `sdp_li¡_­³nd (svþass_id, & ga_svþass_uuid ); 1589 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 1591 `sdp_uuid16_ü—‹ (& ´ofže . uuid , HANDSFREE_PROFILE_ID ); 1592 ´ofže . v”siÚ = 0x0101; 1593 pf£q = `sdp_li¡_­³nd (0, & ´ofže ); 1594 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 1596 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 1597 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 1598 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 1600 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 1601 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm_uuid ); 1602 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & u8 ); 1603 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 1604 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 1606 ã©u»s = `sdp_d©a_®loc ( SDP_UINT16 , & u16 ); 1607 `sdp_©Œ_add (& »cÜd , SDP_ATTR_SUPPORTED_FEATURES , ã©u»s ); 1609 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 1610 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 1612 `sdp_£t_šfo_©Œ (& »cÜd , "Handsfree", 0, 0); 1614 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 1615 `´štf ("Service Record„egistration failed\n"); 1616 »t = -1; 1617  ’d ; 1620 `´štf ("Handsfree service„egistered\n"); 1622 ’d : 1623 `sdp_d©a_ä“ ( chªÃl ); 1624 `sdp_li¡_ä“ ( ´Ùo [0], 0); 1625 `sdp_li¡_ä“ ( ´Ùo [1], 0); 1626 `sdp_li¡_ä“ ( ­£q , 0); 1627 `sdp_li¡_ä“ ( ­rÙo , 0); 1629  »t ; 1630 } } 1632  $add_hªdsä“_ag ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 1634 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 1635 uuid_t roÙ_uuid , svþass_uuid , ga_svþass_uuid , l2ÿp_uuid , rfcomm_uuid ; 1636 sdp_´ofže_desc_t ´ofže ; 1637 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 1638 sdp_»cÜd_t »cÜd ; 1639 ušt8_t u8 = si -> chªÃl ? si->channel : 7; 1640 ušt16_t u16 = 0x17; 1641 sdp_d©a_t * chªÃl , * ã©u»s ; 1642 ušt8_t Ãtid = si -> ÃtwÜk ? si->network : 0x01; 1643 sdp_d©a_t * ÃtwÜk = `sdp_d©a_®loc ( SDP_UINT8 , & Ãtid ); 1644  »t = 0; 1646 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 1647 »cÜd . hªdË = si ->handle; 1649 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 1650 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 1651 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 1653 `sdp_uuid16_ü—‹ (& svþass_uuid , HANDSFREE_AGW_SVCLASS_ID ); 1654 svþass_id = `sdp_li¡_­³nd (0, & svþass_uuid ); 1655 `sdp_uuid16_ü—‹ (& ga_svþass_uuid , GENERIC_AUDIO_SVCLASS_ID ); 1656 svþass_id = `sdp_li¡_­³nd (svþass_id, & ga_svþass_uuid ); 1657 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 1659 `sdp_uuid16_ü—‹ (& ´ofže . uuid , HANDSFREE_PROFILE_ID ); 1660 ´ofže . v”siÚ = 0x0105; 1661 pf£q = `sdp_li¡_­³nd (0, & ´ofže ); 1662 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 1664 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 1665 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 1666 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 1668 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 1669 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm_uuid ); 1670 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & u8 ); 1671 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 1672 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 1674 ã©u»s = `sdp_d©a_®loc ( SDP_UINT16 , & u16 ); 1675 `sdp_©Œ_add (& »cÜd , SDP_ATTR_SUPPORTED_FEATURES , ã©u»s ); 1677 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 1678 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 1680 `sdp_£t_šfo_©Œ (& »cÜd , "Voice Gateway", 0, 0); 1682 `sdp_©Œ_add (& »cÜd , SDP_ATTR_EXTERNAL_NETWORK , ÃtwÜk ); 1684 ià( `sdp_»cÜd_»gi¡” ( £ssiÚ , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 1685 `´štf ("Service Record„egistration failed\n"); 1686 »t = -1; 1687  ’d ; 1690 `´štf ("Handsfree AG service„egistered\n"); 1692 ’d : 1693 `sdp_d©a_ä“ ( chªÃl ); 1694 `sdp_li¡_ä“ ( ´Ùo [0], 0); 1695 `sdp_li¡_ä“ ( ´Ùo [1], 0); 1696 `sdp_li¡_ä“ ( ­£q , 0); 1697 `sdp_li¡_ä“ ( ­rÙo , 0); 1699  »t ; 1700 } } 1702  $add_simacûss ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 1704 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 1705 uuid_t roÙ_uuid , svþass_uuid , ga_svþass_uuid , l2ÿp_uuid , rfcomm_uuid ; 1706 sdp_´ofže_desc_t ´ofže ; 1707 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 1708 sdp_»cÜd_t »cÜd ; 1709 ušt8_t u8 = si -> chªÃl ? si->channel : 8; 1710 ušt16_t u16 = 0x31; 1711 sdp_d©a_t * chªÃl , * ã©u»s ; 1712  »t = 0; 1714 `mem£t ((*)& »cÜd , 0, ( sdp_»cÜd_t )); 1715 »cÜd . hªdË = si ->handle; 1717 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 1718 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 1719 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 1721 `sdp_uuid16_ü—‹ (& svþass_uuid , SAP_SVCLASS_ID ); 1722 svþass_id = `sdp_li¡_­³nd (0, & svþass_uuid ); 1723 `sdp_uuid16_ü—‹ (& ga_svþass_uuid , GENERIC_TELEPHONY_SVCLASS_ID ); 1724 svþass_id = `sdp_li¡_­³nd (svþass_id, & ga_svþass_uuid ); 1725 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 1727 `sdp_uuid16_ü—‹ (& ´ofže . uuid , SAP_PROFILE_ID ); 1728 ´ofže . v”siÚ = 0x0101; 1729 pf£q = `sdp_li¡_­³nd (0, & ´ofže ); 1730 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 1732 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 1733 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 1734 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 1736 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 1737 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm_uuid ); 1738 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & u8 ); 1739 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 1740 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 1742 ã©u»s = `sdp_d©a_®loc ( SDP_UINT16 , & u16 ); 1743 `sdp_©Œ_add (& »cÜd , SDP_ATTR_SUPPORTED_FEATURES , ã©u»s ); 1745 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 1746 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 1748 `sdp_£t_šfo_©Œ (& »cÜd , "SIM Access", 0, 0); 1750 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 1751 `´štf ("Service Record„egistration failed\n"); 1752 »t = -1; 1753  ’d ; 1756 `´štf ("SIM Access service„egistered\n"); 1758 ’d : 1759 `sdp_d©a_ä“ ( chªÃl ); 1760 `sdp_li¡_ä“ ( ´Ùo [0], 0); 1761 `sdp_li¡_ä“ ( ´Ùo [1], 0); 1762 `sdp_li¡_ä“ ( ­£q , 0); 1763 `sdp_li¡_ä“ ( ­rÙo , 0); 1765  »t ; 1766 } } 1768  $add_Ýush ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 1770 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 1771 uuid_t roÙ_uuid , Ýush_uuid , l2ÿp_uuid , rfcomm_uuid , obex_uuid ; 1772 sdp_´ofže_desc_t ´ofže [1]; 1773 sdp_li¡_t * ­rÙo , * ´Ùo [3]; 1774 sdp_»cÜd_t »cÜd ; 1775 ušt8_t chª = si -> chªÃl ? si->channel : 9; 1776 sdp_d©a_t * chªÃl ; 1777 ušt8_t fÜm©s [] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff }; 1778 * dtds [( fÜm©s )], * v®ues [(formats)]; 1779  i ; 1780 ušt8_t dtd = SDP_UINT8 ; 1781 sdp_d©a_t * sæi¡ ; 1782  »t = 0; 1784 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 1785 »cÜd . hªdË = si ->handle; 1787 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 1788 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 1789 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 1791 `sdp_uuid16_ü—‹ (& Ýush_uuid , OBEX_OBJPUSH_SVCLASS_ID ); 1792 svþass_id = `sdp_li¡_­³nd (0, & Ýush_uuid ); 1793 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 1795 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , OBEX_OBJPUSH_PROFILE_ID ); 1796 ´ofže [0]. v”siÚ = 0x0100; 1797 pf£q = `sdp_li¡_­³nd (0, ´ofže ); 1798 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 1800 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 1801 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 1802 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 1804 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 1805 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm_uuid ); 1806 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & chª ); 1807 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 1808 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 1810 `sdp_uuid16_ü—‹ (& obex_uuid , OBEX_UUID ); 1811 ´Ùo [2] = `sdp_li¡_­³nd (0, & obex_uuid ); 1812 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [2]); 1814 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 1815 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 1817  i = 0; i < ( fÜm©s ); i++) { 1818 dtds [ i ] = & dtd ; 1819 v®ues [ i ] = & fÜm©s [i]; 1821 sæi¡ = `sdp_£q_®loc ( dtds , v®ues , ( fÜm©s )); 1822 `sdp_©Œ_add (& »cÜd , SDP_ATTR_SUPPORTED_FORMATS_LIST , sæi¡ ); 1824 `sdp_£t_šfo_©Œ (& »cÜd , "OBEX Object Push", 0, 0); 1826 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 1827 `´štf ("Service Record„egistration failed\n"); 1828 »t = -1; 1829  ’d ; 1832 `´štf ("OBEX Object Push service„egistered\n"); 1834 ’d : 1835 `sdp_d©a_ä“ ( chªÃl ); 1836 `sdp_li¡_ä“ ( ´Ùo [0], 0); 1837 `sdp_li¡_ä“ ( ´Ùo [1], 0); 1838 `sdp_li¡_ä“ ( ´Ùo [2], 0); 1839 `sdp_li¡_ä“ ( ­£q , 0); 1840 `sdp_li¡_ä“ ( pf£q , 0); 1841 `sdp_li¡_ä“ ( ­rÙo , 0); 1842 `sdp_li¡_ä“ ( roÙ , 0); 1843 `sdp_li¡_ä“ ( svþass_id , NULL ); 1845  »t ; 1846 } } 1848  $add_pb­ ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 1850 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 1851 uuid_t roÙ_uuid , pb­_uuid , l2ÿp_uuid , rfcomm_uuid , obex_uuid ; 1852 sdp_´ofže_desc_t ´ofže [1]; 1853 sdp_li¡_t * ­rÙo , * ´Ùo [3]; 1854 sdp_»cÜd_t »cÜd ; 1855 ušt8_t chª = si -> chªÃl ? si->channel : 19; 1856 sdp_d©a_t * chªÃl ; 1857 ušt8_t fÜm©s [] = {0x01}; 1858 ušt8_t dtd = SDP_UINT8 ; 1859 sdp_d©a_t * sæi¡ ; 1860  »t = 0; 1862 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 1863 »cÜd . hªdË = si ->handle; 1865 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 1866 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 1867 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 1869 `sdp_uuid16_ü—‹ (& pb­_uuid , PBAP_PSE_SVCLASS_ID ); 1870 svþass_id = `sdp_li¡_­³nd (0, & pb­_uuid ); 1871 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 1873 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , PBAP_PROFILE_ID ); 1874 ´ofže [0]. v”siÚ = 0x0100; 1875 pf£q = `sdp_li¡_­³nd (0, ´ofže ); 1876 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 1878 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 1879 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 1880 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 1882 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 1883 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm_uuid ); 1884 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & chª ); 1885 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 1886 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 1888 `sdp_uuid16_ü—‹ (& obex_uuid , OBEX_UUID ); 1889 ´Ùo [2] = `sdp_li¡_­³nd (0, & obex_uuid ); 1890 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [2]); 1892 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 1893 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 1895 sæi¡ = `sdp_d©a_®loc ( dtd , fÜm©s ); 1896 `sdp_©Œ_add (& »cÜd , SDP_ATTR_SUPPORTED_REPOSITORIES , sæi¡ ); 1898 `sdp_£t_šfo_©Œ (& »cÜd , "OBEX Phonebook Access Server", 0, 0); 1900 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , 1901 SDP_RECORD_PERSIST ) < 0) { 1902 `´štf ("Service Record„egistration failed\n"); 1903 »t = -1; 1904  ’d ; 1907 `´štf ("PBAP service„egistered\n"); 1909 ’d : 1910 `sdp_d©a_ä“ ( chªÃl ); 1911 `sdp_li¡_ä“ ( ´Ùo [0], 0); 1912 `sdp_li¡_ä“ ( ´Ùo [1], 0); 1913 `sdp_li¡_ä“ ( ´Ùo [2], 0); 1914 `sdp_li¡_ä“ ( ­£q , 0); 1915 `sdp_li¡_ä“ ( pf£q , 0); 1916 `sdp_li¡_ä“ ( ­rÙo , 0); 1917 `sdp_li¡_ä“ ( roÙ , 0); 1918 `sdp_li¡_ä“ ( svþass_id , 0); 1920  »t ; 1921 } } 1923  $add_m­ ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 1925 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 1926 uuid_t roÙ_uuid , m­_uuid , l2ÿp_uuid , rfcomm_uuid , obex_uuid ; 1927 sdp_´ofže_desc_t ´ofže [1]; 1928 sdp_li¡_t * ­rÙo , * ´Ùo [3]; 1929 sdp_»cÜd_t »cÜd ; 1930 ušt8_t chª = si -> chªÃl ? si->channel : 17; 1931 sdp_d©a_t * chªÃl ; 1932 ušt8_t msg_fÜm©s [] = {0x0f}; 1933 ušt32_t suµ_ã©u»s [] = {0x0000007f}; 1934 ušt8_t dtd_msg = SDP_UINT8 , dtd_sf = SDP_UINT32 ; 1935 sdp_d©a_t * smli¡ ; 1936 sdp_d©a_t * sæi¡ ; 1937  »t = 0; 1939 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 1940 »cÜd . hªdË = si ->handle; 1942 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 1943 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 1944 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 1946 `sdp_uuid16_ü—‹ (& m­_uuid , MAP_MSE_SVCLASS_ID ); 1947 svþass_id = `sdp_li¡_­³nd (0, & m­_uuid ); 1948 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 1950 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , MAP_PROFILE_ID ); 1951 ´ofže [0]. v”siÚ = 0x0100; 1952 pf£q = `sdp_li¡_­³nd (0, ´ofže ); 1953 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 1955 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 1956 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 1957 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 1959 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 1960 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm_uuid ); 1961 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & chª ); 1962 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 1963 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 1965 `sdp_uuid16_ü—‹ (& obex_uuid , OBEX_UUID ); 1966 ´Ùo [2] = `sdp_li¡_­³nd (0, & obex_uuid ); 1967 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [2]); 1969 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 1970 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 1972 smli¡ = `sdp_d©a_®loc ( dtd_msg , msg_fÜm©s ); 1973 `sdp_©Œ_add (& »cÜd , SDP_ATTR_SUPPORTED_MESSAGE_TYPES , smli¡ ); 1975 sæi¡ = `sdp_d©a_®loc ( dtd_sf , suµ_ã©u»s ); 1976 `sdp_©Œ_add (& »cÜd , SDP_ATTR_MAP_SUPPORTED_FEATURES , sæi¡ ); 1978 `sdp_£t_šfo_©Œ (& »cÜd , "OBEX Message Access Server", 0, 0); 1980 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , 1981 SDP_RECORD_PERSIST ) < 0) { 1982 `´štf ("Service Record„egistration failed\n"); 1983 »t = -1; 1984  ’d ; 1987 `´štf ("MAP service„egistered\n"); 1989 ’d : 1990 `sdp_d©a_ä“ ( chªÃl ); 1991 `sdp_li¡_ä“ ( ´Ùo [0], 0); 1992 `sdp_li¡_ä“ ( ´Ùo [1], 0); 1993 `sdp_li¡_ä“ ( ´Ùo [2], 0); 1994 `sdp_li¡_ä“ ( ­£q , 0); 1995 `sdp_li¡_ä“ ( pf£q , 0); 1996 `sdp_li¡_ä“ ( ­rÙo , 0); 1997 `sdp_li¡_ä“ ( roÙ , 0); 1998 `sdp_li¡_ä“ ( svþass_id , 0); 2000  »t ; 2001 } } 2003  $add_áp ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 2005 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2006 uuid_t roÙ_uuid , áº_uuid , l2ÿp_uuid , rfcomm_uuid , obex_uuid ; 2007 sdp_´ofže_desc_t ´ofže [1]; 2008 sdp_li¡_t * ­rÙo , * ´Ùo [3]; 2009 sdp_»cÜd_t »cÜd ; 2010 ušt8_t u8 = si -> chªÃl ? si->channel: 10; 2011 sdp_d©a_t * chªÃl ; 2012  »t = 0; 2014 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 2015 »cÜd . hªdË = si ->handle; 2017 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2018 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 2019 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 2021 `sdp_uuid16_ü—‹ (& áº_uuid , OBEX_FILETRANS_SVCLASS_ID ); 2022 svþass_id = `sdp_li¡_­³nd (0, & áº_uuid ); 2023 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 2025 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , OBEX_FILETRANS_PROFILE_ID ); 2026 ´ofže [0]. v”siÚ = 0x0100; 2027 pf£q = `sdp_li¡_­³nd (0, & ´ofže [0]); 2028 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 2030 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 2031 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 2032 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 2034 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 2035 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm_uuid ); 2036 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & u8 ); 2037 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 2038 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 2040 `sdp_uuid16_ü—‹ (& obex_uuid , OBEX_UUID ); 2041 ´Ùo [2] = `sdp_li¡_­³nd (0, & obex_uuid ); 2042 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [2]); 2044 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 2045 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 2047 `sdp_£t_šfo_©Œ (& »cÜd , "OBEX File Transfer", 0, 0); 2049 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 2050 `´štf ("Service Record„egistration failed\n"); 2051 »t = -1; 2052  ’d ; 2055 `´štf ("OBEX File Transfer service„egistered\n"); 2057 ’d : 2058 `sdp_d©a_ä“ ( chªÃl ); 2059 `sdp_li¡_ä“ ( ´Ùo [0], 0); 2060 `sdp_li¡_ä“ ( ´Ùo [1], 0); 2061 `sdp_li¡_ä“ ( ´Ùo [2], 0); 2062 `sdp_li¡_ä“ ( ­£q , 0); 2063 `sdp_li¡_ä“ ( ­rÙo , 0); 2065  »t ; 2066 } } 2068  $add_dœeù´št ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 2070 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2071 uuid_t roÙ_uuid , Ýush_uuid , l2ÿp_uuid , rfcomm_uuid , obex_uuid ; 2072 sdp_´ofže_desc_t ´ofže [1]; 2073 sdp_li¡_t * ­rÙo , * ´Ùo [3]; 2074 sdp_»cÜd_t »cÜd ; 2075 ušt8_t chª = si -> chªÃl ? si->channel : 12; 2076 sdp_d©a_t * chªÃl ; 2077  »t = 0; 2079 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 2080 »cÜd . hªdË = si ->handle; 2082 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2083 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 2084 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 2086 `sdp_uuid16_ü—‹ (& Ýush_uuid , DIRECT_PRINTING_SVCLASS_ID ); 2087 svþass_id = `sdp_li¡_­³nd (0, & Ýush_uuid ); 2088 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 2090 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , BASIC_PRINTING_PROFILE_ID ); 2091 ´ofže [0]. v”siÚ = 0x0100; 2092 pf£q = `sdp_li¡_­³nd (0, ´ofže ); 2093 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 2095 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 2096 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 2097 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 2099 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 2100 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm_uuid ); 2101 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & chª ); 2102 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 2103 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 2105 `sdp_uuid16_ü—‹ (& obex_uuid , OBEX_UUID ); 2106 ´Ùo [2] = `sdp_li¡_­³nd (0, & obex_uuid ); 2107 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [2]); 2109 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 2110 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 2112 `sdp_£t_šfo_©Œ (& »cÜd , "Direct Printing", 0, 0); 2114 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 2115 `´štf ("Service Record„egistration failed\n"); 2116 »t = -1; 2117  ’d ; 2120 `´štf ("Direct Printing service„egistered\n"); 2122 ’d : 2123 `sdp_d©a_ä“ ( chªÃl ); 2124 `sdp_li¡_ä“ ( ´Ùo [0], 0); 2125 `sdp_li¡_ä“ ( ´Ùo [1], 0); 2126 `sdp_li¡_ä“ ( ´Ùo [2], 0); 2127 `sdp_li¡_ä“ ( ­£q , 0); 2128 `sdp_li¡_ä“ ( ­rÙo , 0); 2130  »t ; 2131 } } 2133  $add_Çp ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 2135 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2136 uuid_t roÙ_uuid , áº_uuid , l2ÿp_uuid , bÃp_uuid ; 2137 sdp_´ofže_desc_t ´ofže [1]; 2138 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 2139 sdp_»cÜd_t »cÜd ; 2140 ušt16_t Í = 0x000f, v” = 0x0100; 2141 sdp_d©a_t * psm , * v”siÚ ; 2142  »t = 0; 2144 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 2145 »cÜd . hªdË = si ->handle; 2147 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2148 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 2149 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 2151 `sdp_uuid16_ü—‹ (& áº_uuid , NAP_SVCLASS_ID ); 2152 svþass_id = `sdp_li¡_­³nd (0, & áº_uuid ); 2153 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 2155 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , NAP_PROFILE_ID ); 2156 ´ofže [0]. v”siÚ = 0x0100; 2157 pf£q = `sdp_li¡_­³nd (0, & ´ofže [0]); 2158 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 2160 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 2161 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 2162 psm = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 2163 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], psm ); 2164 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 2166 `sdp_uuid16_ü—‹ (& bÃp_uuid , BNEP_UUID ); 2167 ´Ùo [1] = `sdp_li¡_­³nd (0, & bÃp_uuid ); 2168 v”siÚ = `sdp_d©a_®loc ( SDP_UINT16 , & v” ); 2169 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], v”siÚ ); 2172 ušt16_t ±y³ [4] = { 0x0010, 0x0020, 0x0030, 0x0040 }; 2173 sdp_d©a_t * h—d , * p£q ; 2174  p ; 2176  p = 0, h—d = NULL ;… < 4;…++) { 2177 sdp_d©a_t * d©a = `sdp_d©a_®loc ( SDP_UINT16 , & ±y³ [ p ]); 2178 h—d = `sdp_£q_­³nd (h—d, d©a ); 2180 p£q = `sdp_d©a_®loc ( SDP_SEQ16 , h—d ); 2181 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], p£q ); 2184 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 2186 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 2187 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 2189 `sdp_£t_šfo_©Œ (& »cÜd , "Network Access Point Service", 0, 0); 2191 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 2192 `´štf ("Service Record„egistration failed\n"); 2193 »t = -1; 2194  ’d ; 2197 `´štf ("NAP service„egistered\n"); 2199 ’d : 2200 `sdp_d©a_ä“ ( v”siÚ ); 2201 `sdp_d©a_ä“ ( psm ); 2202 `sdp_li¡_ä“ ( ´Ùo [0], 0); 2203 `sdp_li¡_ä“ ( ´Ùo [1], 0); 2204 `sdp_li¡_ä“ ( ­£q , 0); 2205 `sdp_li¡_ä“ ( ­rÙo , 0); 2207  »t ; 2208 } } 2210  $add_gn ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 2212 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2213 uuid_t roÙ_uuid , áº_uuid , l2ÿp_uuid , bÃp_uuid ; 2214 sdp_´ofže_desc_t ´ofže [1]; 2215 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 2216 sdp_»cÜd_t »cÜd ; 2217 ušt16_t Í = 0x000f, v” = 0x0100; 2218 sdp_d©a_t * psm , * v”siÚ ; 2219  »t = 0; 2221 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 2222 »cÜd . hªdË = si ->handle; 2224 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2225 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 2226 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 2228 `sdp_uuid16_ü—‹ (& áº_uuid , GN_SVCLASS_ID ); 2229 svþass_id = `sdp_li¡_­³nd (0, & áº_uuid ); 2230 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 2232 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , GN_PROFILE_ID ); 2233 ´ofže [0]. v”siÚ = 0x0100; 2234 pf£q = `sdp_li¡_­³nd (0, & ´ofže [0]); 2235 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 2237 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 2238 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 2239 psm = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 2240 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], psm ); 2241 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 2243 `sdp_uuid16_ü—‹ (& bÃp_uuid , BNEP_UUID ); 2244 ´Ùo [1] = `sdp_li¡_­³nd (0, & bÃp_uuid ); 2245 v”siÚ = `sdp_d©a_®loc ( SDP_UINT16 , & v” ); 2246 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], v”siÚ ); 2247 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 2249 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 2250 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 2252 `sdp_£t_šfo_©Œ (& »cÜd , "Group Network Service", 0, 0); 2254 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 2255 `´štf ("Service Record„egistration failed\n"); 2256 »t = -1; 2257  ’d ; 2260 `´štf ("GN service„egistered\n"); 2262 ’d : 2263 `sdp_d©a_ä“ ( v”siÚ ); 2264 `sdp_d©a_ä“ ( psm ); 2265 `sdp_li¡_ä“ ( ´Ùo [0], 0); 2266 `sdp_li¡_ä“ ( ´Ùo [1], 0); 2267 `sdp_li¡_ä“ ( ­£q , 0); 2268 `sdp_li¡_ä“ ( ­rÙo , 0); 2270  »t ; 2271 } } 2273  $add_·nu ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 2275 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2276 uuid_t roÙ_uuid , áº_uuid , l2ÿp_uuid , bÃp_uuid ; 2277 sdp_´ofže_desc_t ´ofže [1]; 2278 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 2279 sdp_»cÜd_t »cÜd ; 2280 ušt16_t Í = 0x000f, v” = 0x0100; 2281 sdp_d©a_t * psm , * v”siÚ ; 2282  »t = 0; 2284 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 2285 »cÜd . hªdË = si ->handle; 2287 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2288 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 2289 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 2290 `sdp_li¡_ä“ ( roÙ , NULL ); 2292 `sdp_uuid16_ü—‹ (& áº_uuid , PANU_SVCLASS_ID ); 2293 svþass_id = `sdp_li¡_­³nd ( NULL , & áº_uuid ); 2294 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 2295 `sdp_li¡_ä“ ( svþass_id , NULL ); 2297 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , PANU_PROFILE_ID ); 2298 ´ofže [0]. v”siÚ = 0x0100; 2299 pf£q = `sdp_li¡_­³nd ( NULL , & ´ofže [0]); 2300 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 2301 `sdp_li¡_ä“ ( pf£q , NULL ); 2303 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 2304 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp_uuid ); 2305 psm = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 2306 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], psm ); 2307 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 2309 `sdp_uuid16_ü—‹ (& bÃp_uuid , BNEP_UUID ); 2310 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & bÃp_uuid ); 2311 v”siÚ = `sdp_d©a_®loc ( SDP_UINT16 , & v” ); 2312 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], v”siÚ ); 2313 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 2315 ­rÙo = `sdp_li¡_­³nd ( NULL , ­£q ); 2316 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 2318 `sdp_£t_šfo_©Œ (& »cÜd , "PAN U£r", NULL , NULL); 2320 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 2321 `´štf ("Service Record„egistration failed\n"); 2322 »t = -1; 2323  ’d ; 2326 `´štf ("PANU service„egistered\n"); 2328 ’d : 2329 `sdp_d©a_ä“ ( v”siÚ ); 2330 `sdp_d©a_ä“ ( psm ); 2331 `sdp_li¡_ä“ ( ´Ùo [0], 0); 2332 `sdp_li¡_ä“ ( ´Ùo [1], 0); 2333 `sdp_li¡_ä“ ( ­£q , 0); 2334 `sdp_li¡_ä“ ( ­rÙo , 0); 2336  »t ; 2337 } } 2339  $add_hid_keyb ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 2341 sdp_»cÜd_t »cÜd ; 2342 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2343 uuid_t roÙ_uuid , hidkb_uuid , l2ÿp_uuid , hidp_uuid ; 2344 sdp_´ofže_desc_t ´ofže [1]; 2345 sdp_li¡_t * ­rÙo , * ´Ùo [3]; 2346 sdp_d©a_t * psm , * Ïng_l¡ , * Ïng_l¡2 , * hid_¥ec_l¡ , * hid_¥ec_l¡2 ; 2347  i ; 2348 ušt8_t dtd = SDP_UINT16 ; 2349 ušt8_t dtd2 = SDP_UINT8 ; 2350 ušt8_t dtd_d©a = SDP_TEXT_STR8 ; 2351 * dtds [2]; 2352 * v®ues [2]; 2353 * dtds2 [2]; 2354 * v®ues2 [2]; 2355  Ëng [2]; 2356 ušt8_t hid_¥ec_ty³ = 0x22; 2357 ušt16_t hid_©Œ_Ïng [] = { 0x409, 0x100 }; 2358 cÚ¡ ušt16_t ù¾ = 0x11; 2359 cÚ¡ ušt16_t šŒ = 0x13; 2360 cÚ¡ ušt16_t hid_©Œ [] = { 0x100, 0x111, 0x40, 0x0d, 0x01, 0x01 }; 2361 cÚ¡ ušt16_t hid_©Œ2 [] = { 0x0, 0x01, 0x100, 0x1f40, 0x01, 0x01 }; 2362 cÚ¡ ušt8_t hid_¥ec [] = { 2415 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 2416 »cÜd . hªdË = si ->handle; 2418 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2419 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 2420 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 2422 `sdp_add_Ïng_©Œ (& »cÜd ); 2424 `sdp_uuid16_ü—‹ (& hidkb_uuid , HID_SVCLASS_ID ); 2425 svþass_id = `sdp_li¡_­³nd (0, & hidkb_uuid ); 2426 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 2428 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , HID_PROFILE_ID ); 2429 ´ofže [0]. v”siÚ = 0x0100; 2430 pf£q = `sdp_li¡_­³nd (0, ´ofže ); 2431 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 2434 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 2435 ´Ùo [1] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 2436 psm = `sdp_d©a_®loc ( SDP_UINT16 , & ù¾ ); 2437 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], psm ); 2438 ­£q = `sdp_li¡_­³nd (0, ´Ùo [1]); 2440 `sdp_uuid16_ü—‹ (& hidp_uuid , HIDP_UUID ); 2441 ´Ùo [2] = `sdp_li¡_­³nd (0, & hidp_uuid ); 2442 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [2]); 2444 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 2445 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 2448 ´Ùo [1] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 2449 psm = `sdp_d©a_®loc ( SDP_UINT16 , & šŒ ); 2450 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], psm ); 2451 ­£q = `sdp_li¡_­³nd (0, ´Ùo [1]); 2453 `sdp_uuid16_ü—‹ (& hidp_uuid , HIDP_UUID ); 2454 ´Ùo [2] = `sdp_li¡_­³nd (0, & hidp_uuid ); 2455 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [2]); 2457 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 2458 `sdp_£t_add_acûss_´Ùos (& »cÜd , ­rÙo ); 2460 `sdp_£t_šfo_©Œ (& »cÜd , "HID Keybßrd", NULL , NULL); 2462  i = 0; i < ( hid_©Œ ) / 2; i++) 2463 `sdp_©Œ_add_Ãw (& »cÜd , 2464 SDP_ATTR_HID_DEVICE_RELEASE_NUMBER + i , 2465 SDP_UINT16 , & hid_©Œ [ i ]); 2467 dtds [0] = & dtd2 ; 2468 v®ues [0] = & hid_¥ec_ty³ ; 2469 dtds [1] = & dtd_d©a ; 2470 v®ues [1] = ( ušt8_t *è hid_¥ec ; 2471 Ëng [0] = 0; 2472 Ëng [1] = ( hid_¥ec ); 2473 hid_¥ec_l¡ = `sdp_£q_®loc_w™h_Ëngth ( dtds , v®ues , Ëng , 2); 2474 hid_¥ec_l¡2 = `sdp_d©a_®loc ( SDP_SEQ8 , hid_¥ec_l¡ ); 2475 `sdp_©Œ_add (& »cÜd , SDP_ATTR_HID_DESCRIPTOR_LIST , hid_¥ec_l¡2 ); 2477  i = 0; i < ( hid_©Œ_Ïng ) / 2; i++) { 2478 dtds2 [ i ] = & dtd ; 2479 v®ues2 [ i ] = & hid_©Œ_Ïng [i]; 2482 Ïng_l¡ = `sdp_£q_®loc ( dtds2 , v®ues2 , ( hid_©Œ_Ïng ) / 2); 2483 Ïng_l¡2 = `sdp_d©a_®loc ( SDP_SEQ8 , Ïng_l¡ ); 2484 `sdp_©Œ_add (& »cÜd , SDP_ATTR_HID_LANG_ID_BASE_LIST , Ïng_l¡2 ); 2486 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_SDP_DISABLE , SDP_UINT16 , & hid_©Œ2 [0]); 2488  i = 0; i < ( hid_©Œ2 ) / 2 - 1; i++) 2489 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_REMOTE_WAKEUP + i , 2490 SDP_UINT16 , & hid_©Œ2 [ i + 1]); 2492 ià( `sdp_»cÜd_»gi¡” ( £ssiÚ , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 2493 `´štf ("Service Record„egistration failed\n"); 2497 `´štf ("HID keyboard service„egistered\n"); 2500 } } 2502  $add_hid_wiimÙe ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 2504 sdp_»cÜd_t »cÜd ; 2505 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2506 uuid_t roÙ_uuid , hid_uuid , l2ÿp_uuid , hidp_uuid ; 2507 sdp_´ofže_desc_t ´ofže [1]; 2508 sdp_li¡_t * ­rÙo , * ´Ùo [3]; 2509 sdp_d©a_t * psm , * Ïng_l¡ , * Ïng_l¡2 , * hid_¥ec_l¡ , * hid_¥ec_l¡2 ; 2510  i ; 2511 ušt8_t dtd = SDP_UINT16 ; 2512 ušt8_t dtd2 = SDP_UINT8 ; 2513 ušt8_t dtd_d©a = SDP_TEXT_STR8 ; 2514 * dtds [2]; 2515 * v®ues [2]; 2516 * dtds2 [2]; 2517 * v®ues2 [2]; 2518  Ëng [2]; 2519 ušt8_t hid_¥ec_ty³ = 0x22; 2520 ušt16_t hid_©Œ_Ïng [] = { 0x409, 0x100 }; 2521 ušt16_t ù¾ = 0x11, šŒ = 0x13; 2522 ušt16_t hid_»Ëa£ = 0x0100, ·r£r_v”siÚ = 0x0111; 2523 ušt8_t subþass = 0x04, couÁry = 0x33; 2524 ušt8_t vœtu®_ÿbË = 0, »cÚÃù = 1, sdp_di§bË = 0; 2525 ušt8_t b©‹ry = 1, »mÙe_wakeup = 1; 2526 ušt16_t ´ofže_v”siÚ = 0x0100, su³rv_timeout = 0x0c80; 2527 ušt8_t nÜm_cÚÃù = 0, boÙ_deviû = 0; 2528 cÚ¡ ušt8_t hid_¥ec [] = { 2559 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 2560 »cÜd . hªdË = si ->handle; 2562 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2563 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 2564 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 2566 `sdp_uuid16_ü—‹ (& hid_uuid , HID_SVCLASS_ID ); 2567 svþass_id = `sdp_li¡_­³nd ( NULL , & hid_uuid ); 2568 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 2570 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , HID_PROFILE_ID ); 2571 ´ofže [0]. v”siÚ = 0x0100; 2572 pf£q = `sdp_li¡_­³nd ( NULL , ´ofže ); 2573 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 2575 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 2576 ´Ùo [1] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 2577 psm = `sdp_d©a_®loc ( SDP_UINT16 , & ù¾ ); 2578 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], psm ); 2579 ­£q = `sdp_li¡_­³nd (0, ´Ùo [1]); 2581 `sdp_uuid16_ü—‹ (& hidp_uuid , HIDP_UUID ); 2582 ´Ùo [2] = `sdp_li¡_­³nd (0, & hidp_uuid ); 2583 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [2]); 2585 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 2586 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 2588 ´Ùo [1] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 2589 psm = `sdp_d©a_®loc ( SDP_UINT16 , & šŒ ); 2590 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], psm ); 2591 ­£q = `sdp_li¡_­³nd (0, ´Ùo [1]); 2593 `sdp_uuid16_ü—‹ (& hidp_uuid , HIDP_UUID ); 2594 ´Ùo [2] = `sdp_li¡_­³nd (0, & hidp_uuid ); 2595 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [2]); 2597 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 2598 `sdp_£t_add_acûss_´Ùos (& »cÜd , ­rÙo ); 2600 `sdp_add_Ïng_©Œ (& »cÜd ); 2602 `sdp_£t_šfo_©Œ (& »cÜd , "Nintendo RVL-CNT-01", 2605 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_DEVICE_RELEASE_NUMBER , 2606 SDP_UINT16 , & hid_»Ëa£ ); 2608 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_PARSER_VERSION , 2609 SDP_UINT16 , & ·r£r_v”siÚ ); 2611 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_DEVICE_SUBCLASS , 2612 SDP_UINT8 , & subþass ); 2614 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_COUNTRY_CODE , 2615 SDP_UINT8 , & couÁry ); 2617 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_VIRTUAL_CABLE , 2618 SDP_BOOL , & vœtu®_ÿbË ); 2620 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_RECONNECT_INITIATE , 2621 SDP_BOOL , & »cÚÃù ); 2623 dtds [0] = & dtd2 ; 2624 v®ues [0] = & hid_¥ec_ty³ ; 2625 dtds [1] = & dtd_d©a ; 2626 v®ues [1] = ( ušt8_t *è hid_¥ec ; 2627 Ëng [0] = 0; 2628 Ëng [1] = ( hid_¥ec ); 2629 hid_¥ec_l¡ = `sdp_£q_®loc_w™h_Ëngth ( dtds , v®ues , Ëng , 2); 2630 hid_¥ec_l¡2 = `sdp_d©a_®loc ( SDP_SEQ8 , hid_¥ec_l¡ ); 2631 `sdp_©Œ_add (& »cÜd , SDP_ATTR_HID_DESCRIPTOR_LIST , hid_¥ec_l¡2 ); 2633  i = 0; i < ( hid_©Œ_Ïng ) / 2; i++) { 2634 dtds2 [ i ] = & dtd ; 2635 v®ues2 [ i ] = & hid_©Œ_Ïng [i]; 2638 Ïng_l¡ = `sdp_£q_®loc ( dtds2 , v®ues2 , ( hid_©Œ_Ïng ) / 2); 2639 Ïng_l¡2 = `sdp_d©a_®loc ( SDP_SEQ8 , Ïng_l¡ ); 2640 `sdp_©Œ_add (& »cÜd , SDP_ATTR_HID_LANG_ID_BASE_LIST , Ïng_l¡2 ); 2642 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_SDP_DISABLE , 2643 SDP_BOOL , & sdp_di§bË ); 2645 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_BATTERY_POWER , 2646 SDP_BOOL , & b©‹ry ); 2648 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_REMOTE_WAKEUP , 2649 SDP_BOOL , & »mÙe_wakeup ); 2651 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_PROFILE_VERSION , 2652 SDP_UINT16 , & ´ofže_v”siÚ ); 2654 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_SUPERVISION_TIMEOUT , 2655 SDP_UINT16 , & su³rv_timeout ); 2657 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_NORMALLY_CONNECTABLE , 2658 SDP_BOOL , & nÜm_cÚÃù ); 2660 `sdp_©Œ_add_Ãw (& »cÜd , SDP_ATTR_HID_BOOT_DEVICE , 2661 SDP_BOOL , & boÙ_deviû ); 2663 ià( `sdp_»cÜd_»gi¡” ( £ssiÚ , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 2664 `´štf ("Service Record„egistration failed\n"); 2668 `´štf ("Wii-Mote service„egistered\n"); 2671 } } 2673  $add_c ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 2675 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2676 uuid_t roÙ_uuid , l2ÿp , cm , c ; 2677 sdp_´ofže_desc_t ´ofže [1]; 2678 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 2679 sdp_»cÜd_t »cÜd ; 2680 ušt16_t psm = si ->psm ? si->psm : 0x1001; 2681 ušt8_t Ãtid = si -> ÃtwÜk ? si->network : 0x02; 2682 sdp_d©a_t * ÃtwÜk = `sdp_d©a_®loc ( SDP_UINT8 , & Ãtid ); 2683  »t = 0; 2685 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 2686 »cÜd . hªdË = si ->handle; 2688 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2689 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 2690 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 2692 `sdp_uuid16_ü—‹ (& c , CIP_SVCLASS_ID ); 2693 svþass_id = `sdp_li¡_­³nd (0, & c ); 2694 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 2696 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , CIP_PROFILE_ID ); 2697 ´ofže [0]. v”siÚ = 0x0100; 2698 pf£q = `sdp_li¡_­³nd (0, & ´ofže [0]); 2699 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 2701 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 2702 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp ); 2703 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 2704 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], `sdp_d©a_®loc ( SDP_UINT16 , & psm )); 2705 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [0]); 2707 `sdp_uuid16_ü—‹ (& cm , CMTP_UUID ); 2708 ´Ùo [1] = `sdp_li¡_­³nd (0, & cm ); 2709 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 2711 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 2712 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 2714 `sdp_©Œ_add (& »cÜd , SDP_ATTR_EXTERNAL_NETWORK , ÃtwÜk ); 2716 `sdp_£t_šfo_©Œ (& »cÜd , "Common ISDN Access", 0, 0); 2718 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 2719 `´štf ("Service Record„egistration failed\n"); 2720 »t = -1; 2721  ’d ; 2724 `´štf ("CIP service„egistered\n"); 2726 ’d : 2727 `sdp_li¡_ä“ ( ´Ùo [0], 0); 2728 `sdp_li¡_ä“ ( ´Ùo [1], 0); 2729 `sdp_li¡_ä“ ( ­£q , 0); 2730 `sdp_li¡_ä“ ( ­rÙo , 0); 2731 `sdp_d©a_ä“ ( ÃtwÜk ); 2733  »t ; 2734 } } 2736  $add_ùp ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 2738 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2739 uuid_t roÙ_uuid , l2ÿp , tcsbš , ùp ; 2740 sdp_´ofže_desc_t ´ofže [1]; 2741 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 2742 sdp_»cÜd_t »cÜd ; 2743 ušt8_t Ãtid = si -> ÃtwÜk ? si->network : 0x02; 2744 sdp_d©a_t * ÃtwÜk = `sdp_d©a_®loc ( SDP_UINT8 , & Ãtid ); 2745  »t = 0; 2747 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 2748 »cÜd . hªdË = si ->handle; 2750 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2751 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 2752 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 2754 `sdp_uuid16_ü—‹ (& ùp , CORDLESS_TELEPHONY_SVCLASS_ID ); 2755 svþass_id = `sdp_li¡_­³nd (0, & ùp ); 2756 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 2758 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , CORDLESS_TELEPHONY_PROFILE_ID ); 2759 ´ofže [0]. v”siÚ = 0x0100; 2760 pf£q = `sdp_li¡_­³nd (0, & ´ofže [0]); 2761 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 2763 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 2764 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp ); 2765 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 2767 `sdp_uuid16_ü—‹ (& tcsbš , TCS_BIN_UUID ); 2768 ´Ùo [1] = `sdp_li¡_­³nd (0, & tcsbš ); 2769 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 2771 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 2772 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 2774 `sdp_©Œ_add (& »cÜd , SDP_ATTR_EXTERNAL_NETWORK , ÃtwÜk ); 2776 `sdp_£t_šfo_©Œ (& »cÜd , "Cordless Telephony", 0, 0); 2778 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 2779 `´štf ("Service Record„egistration failed\n"); 2780 »t = -1; 2781  ’d ; 2784 `´štf ("CTP service„egistered\n"); 2786 ’d : 2787 `sdp_li¡_ä“ ( ´Ùo [0], 0); 2788 `sdp_li¡_ä“ ( ´Ùo [1], 0); 2789 `sdp_li¡_ä“ ( ­£q , 0); 2790 `sdp_li¡_ä“ ( ­rÙo , 0); 2791 `sdp_d©a_ä“ ( ÃtwÜk ); 2793  »t ; 2794 } } 2796  $add_a2sourû ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 2798 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2799 uuid_t roÙ_uuid , l2ÿp , avd , a2¤c ; 2800 sdp_´ofže_desc_t ´ofže [1]; 2801 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 2802 sdp_»cÜd_t »cÜd ; 2803 sdp_d©a_t * psm , * v”siÚ ; 2804 ušt16_t Í = 0x0019, v” = 0x0100; 2805  »t = 0; 2807 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 2808 »cÜd . hªdË = si ->handle; 2810 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2811 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 2812 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 2814 `sdp_uuid16_ü—‹ (& a2¤c , AUDIO_SOURCE_SVCLASS_ID ); 2815 svþass_id = `sdp_li¡_­³nd (0, & a2¤c ); 2816 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 2818 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , ADVANCED_AUDIO_PROFILE_ID ); 2819 ´ofže [0]. v”siÚ = 0x0100; 2820 pf£q = `sdp_li¡_­³nd (0, & ´ofže [0]); 2821 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 2823 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 2824 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp ); 2825 psm = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 2826 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], psm ); 2827 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 2829 `sdp_uuid16_ü—‹ (& avd , AVDTP_UUID ); 2830 ´Ùo [1] = `sdp_li¡_­³nd (0, & avd ); 2831 v”siÚ = `sdp_d©a_®loc ( SDP_UINT16 , & v” ); 2832 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], v”siÚ ); 2833 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 2835 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 2836 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 2838 `sdp_£t_šfo_©Œ (& »cÜd , "Audio Source", 0, 0); 2840 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 2841 `´štf ("Service Record„egistration failed\n"); 2842 »t = -1; 2843  dÚe ; 2846 `´štf ("Audio source service„egistered\n"); 2848 dÚe : 2849 `sdp_li¡_ä“ ( ´Ùo [0], 0); 2850 `sdp_li¡_ä“ ( ´Ùo [1], 0); 2851 `sdp_li¡_ä“ ( ­£q , 0); 2852 `sdp_li¡_ä“ ( ­rÙo , 0); 2854  »t ; 2855 } } 2857  $add_a2sšk ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 2859 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2860 uuid_t roÙ_uuid , l2ÿp , avd , a2¢k ; 2861 sdp_´ofže_desc_t ´ofže [1]; 2862 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 2863 sdp_»cÜd_t »cÜd ; 2864 sdp_d©a_t * psm , * v”siÚ ; 2865 ušt16_t Í = 0x0019, v” = 0x0100; 2866  »t = 0; 2868 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 2869 »cÜd . hªdË = si ->handle; 2871 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2872 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 2873 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 2875 `sdp_uuid16_ü—‹ (& a2¢k , AUDIO_SINK_SVCLASS_ID ); 2876 svþass_id = `sdp_li¡_­³nd (0, & a2¢k ); 2877 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 2879 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , ADVANCED_AUDIO_PROFILE_ID ); 2880 ´ofže [0]. v”siÚ = 0x0100; 2881 pf£q = `sdp_li¡_­³nd (0, & ´ofže [0]); 2882 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 2884 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 2885 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp ); 2886 psm = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 2887 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], psm ); 2888 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 2890 `sdp_uuid16_ü—‹ (& avd , AVDTP_UUID ); 2891 ´Ùo [1] = `sdp_li¡_­³nd (0, & avd ); 2892 v”siÚ = `sdp_d©a_®loc ( SDP_UINT16 , & v” ); 2893 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], v”siÚ ); 2894 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 2896 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 2897 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 2899 `sdp_£t_šfo_©Œ (& »cÜd , "Audio Sink", 0, 0); 2901 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 2902 `´štf ("Service Record„egistration failed\n"); 2903 »t = -1; 2904  dÚe ; 2907 `´štf ("Audio sink service„egistered\n"); 2909 dÚe : 2910 `sdp_li¡_ä“ ( ´Ùo [0], 0); 2911 `sdp_li¡_ä“ ( ´Ùo [1], 0); 2912 `sdp_li¡_ä“ ( ­£q , 0); 2913 `sdp_li¡_ä“ ( ­rÙo , 0); 2915  »t ; 2916 } } 2918  $add_avrù ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 2920 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2921 uuid_t roÙ_uuid , l2ÿp , avùp , avrù ; 2922 sdp_´ofže_desc_t ´ofže [1]; 2923 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 2924 sdp_»cÜd_t »cÜd ; 2925 sdp_d©a_t * psm , * v”siÚ , * ã©u»s ; 2926 ušt16_t Í = 0x0017, v” = 0x0100, ã© = 0x000f; 2927  »t = 0; 2929 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 2930 »cÜd . hªdË = si ->handle; 2932 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2933 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 2934 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 2936 `sdp_uuid16_ü—‹ (& avrù , AV_REMOTE_SVCLASS_ID ); 2937 svþass_id = `sdp_li¡_­³nd (0, & avrù ); 2938 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 2940 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , AV_REMOTE_PROFILE_ID ); 2941 ´ofže [0]. v”siÚ = 0x0100; 2942 pf£q = `sdp_li¡_­³nd (0, & ´ofže [0]); 2943 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 2945 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 2946 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp ); 2947 psm = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 2948 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], psm ); 2949 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 2951 `sdp_uuid16_ü—‹ (& avùp , AVCTP_UUID ); 2952 ´Ùo [1] = `sdp_li¡_­³nd (0, & avùp ); 2953 v”siÚ = `sdp_d©a_®loc ( SDP_UINT16 , & v” ); 2954 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], v”siÚ ); 2955 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 2957 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 2958 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 2960 ã©u»s = `sdp_d©a_®loc ( SDP_UINT16 , & ã© ); 2961 `sdp_©Œ_add (& »cÜd , SDP_ATTR_SUPPORTED_FEATURES , ã©u»s ); 2963 `sdp_£t_šfo_©Œ (& »cÜd , "AVRCP CT", 0, 0); 2965 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 2966 `´štf ("Service Record„egistration failed\n"); 2967 »t = -1; 2968  dÚe ; 2971 `´štf ("Remote control service„egistered\n"); 2973 dÚe : 2974 `sdp_li¡_ä“ ( ´Ùo [0], 0); 2975 `sdp_li¡_ä“ ( ´Ùo [1], 0); 2976 `sdp_li¡_ä“ ( ­£q , 0); 2977 `sdp_li¡_ä“ ( ­rÙo , 0); 2979  »t ; 2980 } } 2982  $add_av¹g ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 2984 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 2985 uuid_t roÙ_uuid , l2ÿp , avùp , av¹g ; 2986 sdp_´ofže_desc_t ´ofže [1]; 2987 sdp_li¡_t * ­rÙo , * ´Ùo [2]; 2988 sdp_»cÜd_t »cÜd ; 2989 sdp_d©a_t * psm , * v”siÚ , * ã©u»s ; 2990 ušt16_t Í = 0x0017, v” = 0x0100, ã© = 0x000f; 2991  »t = 0; 2993 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 2994 »cÜd . hªdË = si ->handle; 2996 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 2997 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 2998 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 3000 `sdp_uuid16_ü—‹ (& av¹g , AV_REMOTE_TARGET_SVCLASS_ID ); 3001 svþass_id = `sdp_li¡_­³nd (0, & av¹g ); 3002 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 3004 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , AV_REMOTE_PROFILE_ID ); 3005 ´ofže [0]. v”siÚ = 0x0100; 3006 pf£q = `sdp_li¡_­³nd (0, & ´ofže [0]); 3007 `sdp_£t_´ofže_descs (& »cÜd , pf£q ); 3009 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 3010 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp ); 3011 psm = `sdp_d©a_®loc ( SDP_UINT16 , & Í ); 3012 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], psm ); 3013 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 3015 `sdp_uuid16_ü—‹ (& avùp , AVCTP_UUID ); 3016 ´Ùo [1] = `sdp_li¡_­³nd (0, & avùp ); 3017 v”siÚ = `sdp_d©a_®loc ( SDP_UINT16 , & v” ); 3018 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], v”siÚ ); 3019 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 3021 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 3022 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 3024 ã©u»s = `sdp_d©a_®loc ( SDP_UINT16 , & ã© ); 3025 `sdp_©Œ_add (& »cÜd , SDP_ATTR_SUPPORTED_FEATURES , ã©u»s ); 3027 `sdp_£t_šfo_©Œ (& »cÜd , "AVRCP TG", 0, 0); 3029 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 3030 `´štf ("Service Record„egistration failed\n"); 3031 »t = -1; 3032  dÚe ; 3035 `´štf ("Remotearget service„egistered\n"); 3037 dÚe : 3038 `sdp_li¡_ä“ ( ´Ùo [0], 0); 3039 `sdp_li¡_ä“ ( ´Ùo [1], 0); 3040 `sdp_li¡_ä“ ( ­£q , 0); 3041 `sdp_li¡_ä“ ( ­rÙo , 0); 3043  »t ; 3044 } } 3046  $add_udi_ue ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 3048 sdp_»cÜd_t »cÜd ; 3049 sdp_li¡_t * roÙ , * svþass , * ´Ùo ; 3050 uuid_t roÙ_uuid , svþass_uuid , l2ÿp_uuid , rfcomm_uuid ; 3051 ušt8_t chªÃl = si ->channel ? si->channel: 18; 3053 `mem£t (& »cÜd , 0, (record)); 3054 »cÜd . hªdË = si ->handle; 3056 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 3057 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 3058 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 3059 `sdp_li¡_ä“ ( roÙ , NULL ); 3061 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 3062 ´Ùo = `sdp_li¡_­³nd ( NULL , sdp_li¡_­³nd(NULL, & l2ÿp_uuid )); 3064 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 3065 ´Ùo = `sdp_li¡_­³nd (proto, sdp_list_append( 3066 `sdp_li¡_­³nd ( NULL , & rfcomm_uuid ), `sdp_d©a_®loc ( SDP_UINT8 , & chªÃl ))); 3068 `sdp_£t_acûss_´Ùos (& »cÜd , `sdp_li¡_­³nd ( NULL , ´Ùo )); 3070 `sdp_uuid16_ü—‹ (& svþass_uuid , UDI_MT_SVCLASS_ID ); 3071 svþass = `sdp_li¡_­³nd ( NULL , & svþass_uuid ); 3072 `sdp_£t_£rviû_þas£s (& »cÜd , svþass ); 3073 `sdp_li¡_ä“ ( svþass , NULL ); 3075 `sdp_£t_šfo_©Œ (& »cÜd , "UDI UE", NULL , NULL); 3077 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 3078 `´štf ("Service Record„egistration failed\n"); 3082 `´štf ("UDI UE service„egistered\n"); 3085 } } 3087  $add_udi_‹ ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 3089 sdp_»cÜd_t »cÜd ; 3090 sdp_li¡_t * roÙ , * svþass , * ´Ùo ; 3091 uuid_t roÙ_uuid , svþass_uuid , l2ÿp_uuid , rfcomm_uuid ; 3092 ušt8_t chªÃl = si ->channel ? si->channel: 19; 3094 `mem£t (& »cÜd , 0, (record)); 3095 »cÜd . hªdË = si ->handle; 3097 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 3098 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 3099 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 3100 `sdp_li¡_ä“ ( roÙ , NULL ); 3102 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 3103 ´Ùo = `sdp_li¡_­³nd ( NULL , sdp_li¡_­³nd(NULL, & l2ÿp_uuid )); 3105 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 3106 ´Ùo = `sdp_li¡_­³nd (proto, sdp_list_append( 3107 `sdp_li¡_­³nd ( NULL , & rfcomm_uuid ), `sdp_d©a_®loc ( SDP_UINT8 , & chªÃl ))); 3109 `sdp_£t_acûss_´Ùos (& »cÜd , `sdp_li¡_­³nd ( NULL , ´Ùo )); 3111 `sdp_uuid16_ü—‹ (& svþass_uuid , UDI_TA_SVCLASS_ID ); 3112 svþass = `sdp_li¡_­³nd ( NULL , & svþass_uuid ); 3113 `sdp_£t_£rviû_þas£s (& »cÜd , svþass ); 3114 `sdp_li¡_ä“ ( svþass , NULL ); 3116 `sdp_£t_šfo_©Œ (& »cÜd , "UDI TE", NULL , NULL); 3118 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 3119 `´štf ("Service Record„egistration failed\n"); 3123 `´štf ("UDI TE service„egistered\n"); 3126 } } 3128  g¤1_uuid [] = { 0xbc, 0x19, 0x9c, 0x24, 0x95, 0x8b, 0x4c, 0xc0, 3131  $add_¤1 ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 3133 sdp_»cÜd_t »cÜd ; 3134 sdp_li¡_t * roÙ , * svþass ; 3135 uuid_t roÙ_uuid , svþass_uuid ; 3137 `mem£t (& »cÜd , 0, (record)); 3138 »cÜd . hªdË = si ->handle; 3140 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 3141 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 3142 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 3144 `sdp_uuid128_ü—‹ (& svþass_uuid , (*è ¤1_uuid ); 3145 svþass = `sdp_li¡_­³nd ( NULL , & svþass_uuid ); 3146 `sdp_£t_£rviû_þas£s (& »cÜd , svþass ); 3148 `sdp_£t_šfo_©Œ (& »cÜd , "TOSHIBA SR-1", NULL , NULL); 3150 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 3151 `´štf ("Service Record„egistration failed\n"); 3155 `´štf ("Toshiba Speech Recognition SR-1 service„ecord„egistered\n"); 3158 } } 3160  gsyncmls_uuid [] = { 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 3163  gsyncmlc_uuid [] = { 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x00, 3166  $add_syncml ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 3168 sdp_»cÜd_t »cÜd ; 3169 sdp_li¡_t * roÙ , * svþass , * ´Ùo ; 3170 uuid_t roÙ_uuid , svþass_uuid , l2ÿp_uuid , rfcomm_uuid , obex_uuid ; 3171 ušt8_t chªÃl = si ->channel ? si->channel: 15; 3173 `mem£t (& »cÜd , 0, (record)); 3174 »cÜd . hªdË = si ->handle; 3176 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 3177 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 3178 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 3180 `sdp_uuid128_ü—‹ (& svþass_uuid , (*è syncmlc_uuid ); 3181 svþass = `sdp_li¡_­³nd ( NULL , & svþass_uuid ); 3182 `sdp_£t_£rviû_þas£s (& »cÜd , svþass ); 3184 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 3185 ´Ùo = `sdp_li¡_­³nd ( NULL , sdp_li¡_­³nd(NULL, & l2ÿp_uuid )); 3187 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 3188 ´Ùo = `sdp_li¡_­³nd (proto, sdp_list_append( 3189 `sdp_li¡_­³nd ( NULL , & rfcomm_uuid ), `sdp_d©a_®loc ( SDP_UINT8 , & chªÃl ))); 3191 `sdp_uuid16_ü—‹ (& obex_uuid , OBEX_UUID ); 3192 ´Ùo = `sdp_li¡_­³nd ÕrÙo, sdp_li¡_­³nd( NULL , & obex_uuid )); 3194 `sdp_£t_acûss_´Ùos (& »cÜd , `sdp_li¡_­³nd ( NULL , ´Ùo )); 3196 `sdp_£t_šfo_©Œ (& »cÜd , "SyncML Cl›Á", NULL , NULL); 3198 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 3199 `´štf ("Service Record„egistration failed\n"); 3203 `´štf ("SyncML Client service„ecord„egistered\n"); 3206 } } 3208  gasync_uuid [] = { 0x03, 0x50, 0x27, 0x8F, 0x3D, 0xCA, 0x4E, 0x62, 3211  $add_aùivesync ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 3213 sdp_»cÜd_t »cÜd ; 3214 sdp_li¡_t * roÙ , * svþass , * ´Ùo ; 3215 uuid_t roÙ_uuid , svþass_uuid , l2ÿp_uuid , rfcomm_uuid ; 3216 ušt8_t chªÃl = si ->channel ? si->channel: 21; 3218 `mem£t (& »cÜd , 0, (record)); 3219 »cÜd . hªdË = si ->handle; 3221 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 3222 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 3223 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 3225 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 3226 ´Ùo = `sdp_li¡_­³nd ( NULL , sdp_li¡_­³nd(NULL, & l2ÿp_uuid )); 3228 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 3229 ´Ùo = `sdp_li¡_­³nd (proto, sdp_list_append( 3230 `sdp_li¡_­³nd ( NULL , & rfcomm_uuid ), `sdp_d©a_®loc ( SDP_UINT8 , & chªÃl ))); 3232 `sdp_£t_acûss_´Ùos (& »cÜd , `sdp_li¡_­³nd ( NULL , ´Ùo )); 3234 `sdp_uuid128_ü—‹ (& svþass_uuid , (*è async_uuid ); 3235 svþass = `sdp_li¡_­³nd ( NULL , & svþass_uuid ); 3236 `sdp_£t_£rviû_þas£s (& »cÜd , svþass ); 3238 `sdp_£t_šfo_©Œ (& »cÜd , "Miüosoá AùiveSync", NULL , NULL); 3240 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 3241 `´štf ("Service Record„egistration failed\n"); 3245 `´štf ("ActiveSync service„ecord„egistered\n"); 3248 } } 3250  ghÙsync_uuid [] = { 0xD8, 0x0C, 0xF9, 0xEA, 0x13, 0x4C, 0x11, 0xD5, 3253  $add_hÙsync ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 3255 sdp_»cÜd_t »cÜd ; 3256 sdp_li¡_t * roÙ , * svþass , * ´Ùo ; 3257 uuid_t roÙ_uuid , svþass_uuid , l2ÿp_uuid , rfcomm_uuid ; 3258 ušt8_t chªÃl = si ->channel ? si->channel: 22; 3260 `mem£t (& »cÜd , 0, (record)); 3261 »cÜd . hªdË = si ->handle; 3263 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 3264 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 3265 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 3267 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 3268 ´Ùo = `sdp_li¡_­³nd ( NULL , sdp_li¡_­³nd(NULL, & l2ÿp_uuid )); 3270 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 3271 ´Ùo = `sdp_li¡_­³nd (proto, sdp_list_append( 3272 `sdp_li¡_­³nd ( NULL , & rfcomm_uuid ), `sdp_d©a_®loc ( SDP_UINT8 , & chªÃl ))); 3274 `sdp_£t_acûss_´Ùos (& »cÜd , `sdp_li¡_­³nd ( NULL , ´Ùo )); 3276 `sdp_uuid128_ü—‹ (& svþass_uuid , (*è hÙsync_uuid ); 3277 svþass = `sdp_li¡_­³nd ( NULL , & svþass_uuid ); 3278 `sdp_£t_£rviû_þas£s (& »cÜd , svþass ); 3280 `sdp_£t_šfo_©Œ (& »cÜd , "P®mOS HÙSync", NULL , NULL); 3282 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 3283 `´štf ("Service Record„egistration failed\n"); 3287 `´štf ("HotSync service„ecord„egistered\n"); 3290 } } 3292  g·lmos_uuid [] = { 0xF5, 0xBE, 0xB6, 0x51, 0x41, 0x71, 0x40, 0x51, 3295  $add_·lmos ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 3297 sdp_»cÜd_t »cÜd ; 3298 sdp_li¡_t * roÙ , * svþass ; 3299 uuid_t roÙ_uuid , svþass_uuid ; 3301 `mem£t (& »cÜd , 0, (record)); 3302 »cÜd . hªdË = si ->handle; 3304 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 3305 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 3306 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 3308 `sdp_uuid128_ü—‹ (& svþass_uuid , (*è ·lmos_uuid ); 3309 svþass = `sdp_li¡_­³nd ( NULL , & svþass_uuid ); 3310 `sdp_£t_£rviû_þas£s (& »cÜd , svþass ); 3312 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 3313 `´štf ("Service Record„egistration failed\n"); 3317 `´štf ("PalmOS service„ecord„egistered\n"); 3320 } } 3322  gnokid_uuid [] = { 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x10, 0x00, 3325  $add_nokŸid ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 3327 sdp_»cÜd_t »cÜd ; 3328 sdp_li¡_t * roÙ , * svþass ; 3329 uuid_t roÙ_uuid , svþass_uuid ; 3330 ušt16_t v”id = 0x005f; 3331 sdp_d©a_t * v”siÚ = `sdp_d©a_®loc ( SDP_UINT16 , & v”id ); 3333 `mem£t (& »cÜd , 0, (record)); 3334 »cÜd . hªdË = si ->handle; 3336 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 3337 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 3338 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 3340 `sdp_uuid128_ü—‹ (& svþass_uuid , (*è nokid_uuid ); 3341 svþass = `sdp_li¡_­³nd ( NULL , & svþass_uuid ); 3342 `sdp_£t_£rviû_þas£s (& »cÜd , svþass ); 3344 `sdp_©Œ_add (& »cÜd , SDP_ATTR_SERVICE_VERSION , v”siÚ ); 3346 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 3347 `´štf ("Service Record„egistration failed\n"); 3348 `sdp_d©a_ä“ ( v”siÚ ); 3352 `´štf ("Nokia ID service„ecord„egistered\n"); 3355 } } 3357  gpcsu™e_uuid [] = { 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x10, 0x00, 3360  $add_pcsu™e ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 3362 sdp_»cÜd_t »cÜd ; 3363 sdp_li¡_t * roÙ , * svþass , * ´Ùo ; 3364 uuid_t roÙ_uuid , svþass_uuid , l2ÿp_uuid , rfcomm_uuid ; 3365 ušt8_t chªÃl = si ->channel ? si->channel: 14; 3367 `mem£t (& »cÜd , 0, (record)); 3368 »cÜd . hªdË = si ->handle; 3370 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 3371 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 3372 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 3374 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 3375 ´Ùo = `sdp_li¡_­³nd ( NULL , sdp_li¡_­³nd(NULL, & l2ÿp_uuid )); 3377 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 3378 ´Ùo = `sdp_li¡_­³nd (proto, sdp_list_append( 3379 `sdp_li¡_­³nd ( NULL , & rfcomm_uuid ), `sdp_d©a_®loc ( SDP_UINT8 , & chªÃl ))); 3381 `sdp_£t_acûss_´Ùos (& »cÜd , `sdp_li¡_­³nd ( NULL , ´Ùo )); 3383 `sdp_uuid128_ü—‹ (& svþass_uuid , (*è pcsu™e_uuid ); 3384 svþass = `sdp_li¡_­³nd ( NULL , & svþass_uuid ); 3385 `sdp_£t_£rviû_þas£s (& »cÜd , svþass ); 3387 `sdp_£t_šfo_©Œ (& »cÜd , "NokŸ PC Su™e", NULL , NULL); 3389 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 3390 `´štf ("Service Record„egistration failed\n"); 3394 `´štf ("Nokia PC Suite service„egistered\n"); 3397 } } 3399  gnáp_uuid [] = { 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x10, 0x00, 3402  gnsyncml_uuid [] = { 0x00, 0x00, 0x56, 0x01, 0x00, 0x00, 0x10, 0x00, 3405  gngage_uuid [] = { 0x00, 0x00, 0x13, 0x01, 0x00, 0x00, 0x10, 0x00, 3408  g­¶e_uuid [] = { 0xf0, 0x72, 0x2e, 0x20, 0x0f, 0x8b, 0x4e, 0x90, 3411  gŸp_uuid [] = { 0x00, 0x00, 0x00, 0x00, 0xde, 0xca, 0xfa, 0xde, 3414  $add_­¶e ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 3416 sdp_»cÜd_t »cÜd ; 3417 sdp_li¡_t * roÙ ; 3418 uuid_t roÙ_uuid ; 3419 ušt32_t ©Œ783 = 0x00000000; 3420 ušt32_t ©Œ785 = 0x00000002; 3421 ušt16_t ©Œ786 = 0x1234; 3423 `mem£t (& »cÜd , 0, (record)); 3424 »cÜd . hªdË = si ->handle; 3426 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 3427 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 3428 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 3430 `sdp_©Œ_add_Ãw (& »cÜd , 0x0780, SDP_UUID128 , (*è ­¶e_uuid ); 3431 `sdp_©Œ_add_Ãw (& »cÜd , 0x0781, SDP_TEXT_STR8 , (*) "Macmini"); 3432 `sdp_©Œ_add_Ãw (& »cÜd , 0x0782, SDP_TEXT_STR8 , (*) "PowerMac10,1"); 3433 `sdp_©Œ_add_Ãw (& »cÜd , 0x0783, SDP_UINT32 , (*è& ©Œ783 ); 3434 `sdp_©Œ_add_Ãw (& »cÜd , 0x0784, SDP_TEXT_STR8 , (*) "1.6.6f22"); 3435 `sdp_©Œ_add_Ãw (& »cÜd , 0x0785, SDP_UINT32 , (*è& ©Œ785 ); 3436 `sdp_©Œ_add_Ãw (& »cÜd , 0x0786, SDP_UUID16 , (*è& ©Œ786 ); 3438 `sdp_£t_šfo_©Œ (& »cÜd , "AµË Macštosh A‰ribu‹s", NULL , NULL); 3440 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 3441 `´štf ("Service Record„egistration failed\n"); 3445 `´štf ("Apple‡ttribute service„egistered\n"); 3448 } } 3450  $add_isync ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 3452 sdp_»cÜd_t »cÜd ; 3453 sdp_li¡_t * roÙ , * svþass , * ´Ùo ; 3454 uuid_t roÙ_uuid , svþass_uuid , £rŸl_uuid , l2ÿp_uuid , rfcomm_uuid ; 3455 ušt8_t chªÃl = si ->channel ? si->channel : 16; 3457 `mem£t (& »cÜd , 0, (record)); 3458 »cÜd . hªdË = si ->handle; 3460 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 3461 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 3462 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 3464 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 3465 ´Ùo = `sdp_li¡_­³nd ( NULL , sdp_li¡_­³nd(NULL, & l2ÿp_uuid )); 3467 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 3468 ´Ùo = `sdp_li¡_­³nd (proto, sdp_list_append( 3469 `sdp_li¡_­³nd ( NULL , & rfcomm_uuid ), `sdp_d©a_®loc ( SDP_UINT8 , & chªÃl ))); 3471 `sdp_£t_acûss_´Ùos (& »cÜd , `sdp_li¡_­³nd ( NULL , ´Ùo )); 3473 `sdp_uuid16_ü—‹ (& £rŸl_uuid , SERIAL_PORT_SVCLASS_ID ); 3474 svþass = `sdp_li¡_­³nd ( NULL , & £rŸl_uuid ); 3476 `sdp_uuid16_ü—‹ (& svþass_uuid , APPLE_AGENT_SVCLASS_ID ); 3477 svþass = `sdp_li¡_­³nd (svþass, & svþass_uuid ); 3479 `sdp_£t_£rviû_þas£s (& »cÜd , svþass ); 3481 `sdp_£t_šfo_©Œ (& »cÜd , "AppleAgent", "Bluetooth‡cceptor", "Apple Computer Ltd."); 3483 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 3484 `´štf ("Service Record„egistration failed\n"); 3488 `´štf ("Apple iSync service„egistered\n"); 3491 } } 3493  $add_£mchÏ ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 3495 sdp_»cÜd_t »cÜd ; 3496 sdp_´ofže_desc_t ´ofže ; 3497 sdp_li¡_t * roÙ , * svþass , * ´Ùo , * ´ofžes ; 3498 uuid_t roÙ_uuid , £rviû_uuid , l2ÿp_uuid , £mchÏ_uuid ; 3499 ušt16_t psm = 0xf0f9; 3501 `mem£t (& »cÜd , 0, (record)); 3502 »cÜd . hªdË = si ->handle; 3504 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 3505 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 3506 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 3508 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 3509 ´Ùo = `sdp_li¡_­³nd ( NULL , sdp_list_append( 3510 `sdp_li¡_­³nd ( NULL , & l2ÿp_uuid ), `sdp_d©a_®loc ( SDP_UINT16 , & psm ))); 3512 `sdp_uuid32_ü—‹ (& £mchÏ_uuid , 0x8e770300); 3513 ´Ùo = `sdp_li¡_­³nd ÕrÙo, sdp_li¡_­³nd( NULL , & £mchÏ_uuid )); 3515 `sdp_£t_acûss_´Ùos (& »cÜd , `sdp_li¡_­³nd ( NULL , ´Ùo )); 3517 `sdp_uuid32_ü—‹ (& £rviû_uuid , 0x8e771301); 3518 svþass = `sdp_li¡_­³nd ( NULL , & £rviû_uuid ); 3520 `sdp_£t_£rviû_þas£s (& »cÜd , svþass ); 3522 `sdp_uuid32_ü—‹ (& ´ofže . uuid , 0x8e771302); 3524 ´ofže . v”siÚ = 0x0100; 3525 ´ofžes = `sdp_li¡_­³nd ( NULL , & ´ofže ); 3526 `sdp_£t_´ofže_descs (& »cÜd , ´ofžes ); 3528 `sdp_£t_šfo_©Œ (& »cÜd , "SEMC HLA", NULL , NULL); 3530 ià( `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , SDP_RECORD_PERSIST ) < 0) { 3531 `´štf ("Service Record„egistration failed\n"); 3536 `´štf ("SEMC HLA service„egistered\n"); 3539 } } 3541  $add_g©t ( sdp_£ssiÚ_t * £ssiÚ , svc_šfo_t * si ) 3543 sdp_li¡_t * svþass_id , * ­£q , * ´Ùo [2], * ´ofžes , * roÙ , * ­rÙo ; 3544 uuid_t roÙ_uuid , ´Ùo_uuid , g©t_uuid , l2ÿp ; 3545 sdp_´ofže_desc_t ´ofže ; 3546 sdp_»cÜd_t »cÜd ; 3547 sdp_d©a_t * psm , * sh , * eh ; 3548 ušt16_t ©t_psm = 27, ¡¬t = 0x0001, ’d = 0x000f; 3549  »t ; 3551 `mem£t (& »cÜd , 0, ( sdp_»cÜd_t )); 3552 »cÜd . hªdË = si ->handle; 3553 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 3554 roÙ = `sdp_li¡_­³nd ( NULL , & roÙ_uuid ); 3555 `sdp_£t_brow£_groups (& »cÜd , roÙ ); 3556 `sdp_li¡_ä“ ( roÙ , NULL ); 3558 `sdp_uuid16_ü—‹ (& g©t_uuid , GENERIC_ATTRIB_SVCLASS_ID ); 3559 svþass_id = `sdp_li¡_­³nd ( NULL , & g©t_uuid ); 3560 `sdp_£t_£rviû_þas£s (& »cÜd , svþass_id ); 3561 `sdp_li¡_ä“ ( svþass_id , NULL ); 3563 `sdp_uuid16_ü—‹ (& ´ofže . uuid , GENERIC_ATTRIB_PROFILE_ID ); 3564 ´ofže . v”siÚ = 0x0100; 3565 ´ofžes = `sdp_li¡_­³nd ( NULL , & ´ofže ); 3566 `sdp_£t_´ofže_descs (& »cÜd , ´ofžes ); 3567 `sdp_li¡_ä“ ( ´ofžes , NULL ); 3569 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 3570 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp ); 3571 psm = `sdp_d©a_®loc ( SDP_UINT16 , & ©t_psm ); 3572 ´Ùo [0] = `sdp_li¡_­³nd ÕrÙo[0], psm ); 3573 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 3575 `sdp_uuid16_ü—‹ (& ´Ùo_uuid , ATT_UUID ); 3576 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & ´Ùo_uuid ); 3577 sh = `sdp_d©a_®loc ( SDP_UINT16 , & ¡¬t ); 3578 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], sh ); 3579 eh = `sdp_d©a_®loc ( SDP_UINT16 , & ’d ); 3580 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], eh ); 3581 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 3583 ­rÙo = `sdp_li¡_­³nd ( NULL , ­£q ); 3584 `sdp_£t_acûss_´Ùos (& »cÜd , ­rÙo ); 3586 `sdp_£t_šfo_©Œ (& »cÜd , "G’”iøA‰ribu‹ Profže", "BlueZ", NULL ); 3588 `sdp_£t_u¾_©Œ (& »cÜd , "http://www.bluez.org/", 3591 `sdp_£t_£rviû_id (& »cÜd , g©t_uuid ); 3593 »t = `sdp_deviû_»cÜd_»gi¡” ( £ssiÚ , & š‹rçû , & »cÜd , 3594 SDP_RECORD_PERSIST ); 3595 ià( »t < 0) 3596 `´štf ("Service Record„egistration failed\n"); 3598 `´štf ("Generic Attribute Profile Service„egistered\n"); 3600 `sdp_d©a_ä“ ( psm ); 3601 `sdp_d©a_ä“ ( sh ); 3602 `sdp_d©a_ä“ ( eh ); 3603 `sdp_li¡_ä“ ( ´Ùo [0], NULL ); 3604 `sdp_li¡_ä“ ( ´Ùo [1], NULL ); 3605 `sdp_li¡_ä“ ( ­£q , NULL ); 3606 `sdp_li¡_ä“ ( ­rÙo , NULL ); 3608  »t ; 3609 } } 3612 * mÇme ; 3613 ušt32_t mþass ; 3614 (* madd )( sdp_£ssiÚ_t * m£ss , svc_šfo_t * msi ); 3615 * muuid ; 3616 } g£rviû [] = { 3617 { "DID", PNP_INFO_SVCLASS_ID , NULL , }, 3619 { "SP", SERIAL_PORT_SVCLASS_ID , add_¥ }, 3620 { "DUN", DIALUP_NET_SVCLASS_ID , add_dun }, 3621 { "LAN", LAN_ACCESS_SVCLASS_ID , add_Ïn }, 3622 { "FAX", FAX_SVCLASS_ID , add_çx }, 3623 { "OPUSH", OBEX_OBJPUSH_SVCLASS_ID , add_Ýush }, 3624 { "FTP", OBEX_FILETRANS_SVCLASS_ID , add_áp }, 3625 { "PRINT", DIRECT_PRINTING_SVCLASS_ID , add_dœeù´št }, 3627 { "HS", HEADSET_SVCLASS_ID , add_h—d£t }, 3628 { "HSAG", HEADSET_AGW_SVCLASS_ID , add_h—d£t_ag }, 3629 { "HF", HANDSFREE_SVCLASS_ID , add_hªdsä“ }, 3630 { "HFAG", HANDSFREE_AGW_SVCLASS_ID , add_hªdsä“_ag }, 3631 { "SAP", SAP_SVCLASS_ID , add_simacûss }, 3632 { "PBAP", PBAP_SVCLASS_ID , add_pb­ , }, 3634 { "MAP", MAP_SVCLASS_ID , add_m­ , }, 3635 { "NAP", NAP_SVCLASS_ID , add_Çp }, 3636 { "GN", GN_SVCLASS_ID , add_gn }, 3637 { "PANU", PANU_SVCLASS_ID , add_·nu }, 3639 { "HCRP", HCR_SVCLASS_ID , NULL }, 3640 { "HID", HID_SVCLASS_ID , NULL }, 3641 { "KEYB", HID_SVCLASS_ID , add_hid_keyb }, 3642 { "WIIMOTE", HID_SVCLASS_ID , add_hid_wiimÙe }, 3643 { "CIP", CIP_SVCLASS_ID , add_c }, 3644 { "CTP", CORDLESS_TELEPHONY_SVCLASS_ID , add_ùp }, 3646 { "A2SRC", AUDIO_SOURCE_SVCLASS_ID , add_a2sourû }, 3647 { "A2SNK", AUDIO_SINK_SVCLASS_ID , add_a2sšk }, 3648 { "AVRCT", AV_REMOTE_SVCLASS_ID , add_avrù }, 3649 { "AVRTG", AV_REMOTE_TARGET_SVCLASS_ID , add_av¹g }, 3651 { "UDIUE", UDI_MT_SVCLASS_ID , add_udi_ue }, 3652 { "UDITE", UDI_TA_SVCLASS_ID , add_udi_‹ }, 3654 { "SEMCHLA", 0x8e771301, add_£mchÏ }, 3656 { "SR1", 0, add_¤1 , ¤1_uuid }, 3657 { "SYNCML", 0, add_syncml , syncmlc_uuid }, 3658 { "SYNCMLSERV", 0, NULL , syncmls_uuid }, 3659 { "ACTIVESYNC", 0, add_aùivesync , async_uuid }, 3660 { "HOTSYNC", 0, add_hÙsync , hÙsync_uuid }, 3661 { "PALMOS", 0, add_·lmos , ·lmos_uuid }, 3662 { "NOKID", 0, add_nokŸid , nokid_uuid }, 3663 { "PCSUITE", 0, add_pcsu™e , pcsu™e_uuid }, 3664 { "NFTP", 0, NULL , náp_uuid }, 3665 { "NSYNCML", 0, NULL , nsyncml_uuid }, 3666 { "NGAGE", 0, NULL , ngage_uuid }, 3667 { "APPLE", 0, add_­¶e , ­¶e_uuid }, 3668 { "IAP", 0, NULL , Ÿp_uuid }, 3670 { "ISYNC", APPLE_AGENT_SVCLASS_ID , add_isync , }, 3671 { "GATT", GENERIC_ATTRIB_SVCLASS_ID , add_g©t , }, 3677  $add_£rviû ( bdaddr_t * bdaddr , svc_šfo_t * si ) 3679 sdp_£ssiÚ_t * £ss ; 3680  i , »t = -1; 3682 ià(! si -> Çme ) 3685 £ss = `sdp_cÚÃù (& š‹rçû , BDADDR_LOCAL , SDP_RETRY_IF_BUSY ); 3686 ià(! £ss ) 3689  i = 0; £rviû [i]. Çme ; i++) 3690 ià(! `¡rÿ£cmp ( £rviû [ i ]. Çme , si ->name)) { 3691 ià( £rviû [ i ]. add ) 3692 »t = £rviû [ i ]. `add ( £ss , si ); 3693  dÚe ; 3696 `´štf ("UnknowÀ£rviû‚ame: %s\n", si -> Çme ); 3698 dÚe : 3699 `ä“ ( si -> Çme ); 3700 `sdp_þo£ ( £ss ); 3702  »t ; 3703 } } 3705  ÝtiÚ gadd_ÝtiÚs [] = { 3714 cÚ¡ * gadd_h–p = 3718  $cmd_add ( ¬gc , ** ¬gv ) 3720 svc_šfo_t si ; 3721  Ýt ; 3723 `mem£t (& si , 0, (si)); 3724 si . hªdË = 0xffffffff; 3726 `fÜ_—ch_Ýt ( Ýt , add_ÝtiÚs , 0) { 3727  Ýt ) { 3729 ià( `¡ºÿ£cmp ( Ýrg , "0x", 2)) 3730 si . hªdË = `©oi ( Ýrg ); 3732 si . hªdË = `¡¹Þ ( Ýrg + 2, NULL , 16); 3735 ià( `¡ºÿ£cmp ( Ýrg , "0x", 2)) 3736 si . psm = `©oi ( Ýrg ); 3738 si . psm = `¡¹Þ ( Ýrg + 2, NULL , 16); 3741 ià( `¡ºÿ£cmp ( Ýrg , "0x", 2)) 3742 si . chªÃl = `©oi ( Ýrg ); 3744 si . chªÃl = `¡¹Þ ( Ýrg + 2, NULL , 16); 3747 ià( `¡ºÿ£cmp ( Ýrg , "0x", 2)) 3748 si . ÃtwÜk = `©oi ( Ýrg ); 3750 si . ÃtwÜk = `¡¹Þ ( Ýrg + 2, NULL , 16); 3753 `´štf ("%s", add_h–p ); 3758 ¬gc -ð Ýtšd ; 3759 ¬gv +ð Ýtšd ; 3761 ià( ¬gc < 1) { 3762 `´štf ("%s", add_h–p ); 3766 si . Çme = `¡rdup ( ¬gv [0]); 3768  `add_£rviû (0, & si ); 3769 } } 3772  $d–_£rviû ( bdaddr_t * bdaddr , * ¬g ) 3774 ušt32_t hªdË , ¿nge = 0x0000ffff; 3775 sdp_li¡_t * ©Œ ; 3776 sdp_£ssiÚ_t * £ss ; 3777 sdp_»cÜd_t * »c ; 3779 ià(! ¬g ) { 3780 `´štf ("Record handle was‚ot specified.\n"); 3784 £ss = `sdp_cÚÃù (& š‹rçû , BDADDR_LOCAL , SDP_RETRY_IF_BUSY ); 3785 ià(! £ss ) { 3786 `´štf ("No†ocal SDP server!\n"); 3790 hªdË = `¡¹oul ((*) ¬g , 0, 16); 3791 ©Œ = `sdp_li¡_­³nd (0, & ¿nge ); 3792 »c = `sdp_£rviû_©Œ_»q ( £ss , hªdË , SDP_ATTR_REQ_RANGE , ©Œ ); 3793 `sdp_li¡_ä“ ( ©Œ , 0); 3795 ià(! »c ) { 3796 `´štf ("Service Record‚ot found.\n"); 3797 `sdp_þo£ ( £ss ); 3801 ià( `sdp_deviû_»cÜd_uÄegi¡” ( £ss , & š‹rçû , »c )) { 3802 `´štf ("FažedØuÄegi¡” s”viû„ecÜd: %s\n", `¡»¼Ü ( ”ºo )); 3803 `sdp_þo£ ( £ss ); 3807 `´štf ("Service Record deleted.\n"); 3808 `sdp_þo£ ( £ss ); 3811 } } 3813  ÝtiÚ gd–_ÝtiÚs [] = { 3818 cÚ¡ * gd–_h–p = 3822  $cmd_d– ( ¬gc , ** ¬gv ) 3824  Ýt ; 3826 `fÜ_—ch_Ýt ( Ýt , d–_ÝtiÚs , 0) { 3827  Ýt ) { 3829 `´štf ("%s", d–_h–p ); 3834 ¬gc -ð Ýtšd ; 3835 ¬gv +ð Ýtšd ; 3837 ià( ¬gc < 1) { 3838 `´štf ("%s", d–_h–p ); 3842  `d–_£rviû ( NULL , ¬gv [0]); 3843 } } 3848  $šquœy ( hªdËr_t hªdËr , * ¬g ) 3850 šquœy_šfo ii [20]; 3851 ušt8_t couÁ = 0; 3852  i ; 3854 `´štf ("Inquiring ...\n"); 3855 ià( `sdp_g’”®_šquœy ( ii , 20, 8, & couÁ ) < 0) { 3856 `´štf ("Inquiry failed\n"); 3860  i = 0; i < couÁ ; i++) 3861 `hªdËr (& ii [ i ]. bdaddr , ¬g ); 3862 } } 3864  $dÝrštf (* d©a , cÚ¡ * ¡r ) 3866 `´štf ("%s", ¡r ); 3867 } } 3872  $do_£¬ch ( bdaddr_t * bdaddr ,  £¬ch_cÚ‹xt * cÚ‹xt ) 3874 sdp_li¡_t * ©Œid , * £¬ch , * £q , * Ãxt ; 3875 ušt32_t ¿nge = 0x0000ffff; 3876  ¡r [20]; 3877 sdp_£ssiÚ_t * £ss ; 3879 ià(! bdaddr ) { 3880 `šquœy ( do_£¬ch , cÚ‹xt ); 3884 £ss = `sdp_cÚÃù (& š‹rçû , bdaddr , SDP_RETRY_IF_BUSY ); 3885 `ba2¡r ( bdaddr , ¡r ); 3886 ià(! £ss ) { 3887 `´štf ("FažedØcÚÃùØSDP s”v” oÀ%s: %s\n", ¡r , `¡»¼Ü ( ”ºo )); 3891 ià( cÚ‹xt -> v›w !ð RAW_VIEW ) { 3892 ià( cÚ‹xt -> svc ) 3893 `´štf ("S—rchšg fÜ % Ú % ...\n", cÚ‹xt -> svc , ¡r ); 3895 `´štf ("Browsšg % ...\n", ¡r ); 3898 ©Œid = `sdp_li¡_­³nd (0, & ¿nge ); 3899 £¬ch = `sdp_li¡_­³nd (0, & cÚ‹xt -> group ); 3900 ià( `sdp_£rviû_£¬ch_©Œ_»q ( £ss , £¬ch , SDP_ATTR_REQ_RANGE , ©Œid , & £q )) { 3901 `´štf ("S”viû S—rch fažed: %s\n", `¡»¼Ü ( ”ºo )); 3902 `sdp_li¡_ä“ ( ©Œid , 0); 3903 `sdp_li¡_ä“ ( £¬ch , 0); 3904 `sdp_þo£ ( £ss ); 3907 `sdp_li¡_ä“ ( ©Œid , 0); 3908 `sdp_li¡_ä“ ( £¬ch , 0); 3910 ; £q ; seq = Ãxt ) { 3911 sdp_»cÜd_t * »c = (sdp_»cÜd_ˆ*è £q -> d©a ; 3912  £¬ch_cÚ‹xt sub_cÚ‹xt ; 3914  cÚ‹xt -> v›w ) { 3915  DEFAULT_VIEW : 3917 `´št_£rviû_©Œ ( »c ); 3918 `´štf ("\n"); 3920  TREE_VIEW : 3922 `´št_Œ“_©Œ ( »c ); 3923 `´štf ("\n"); 3925  XML_VIEW : 3927 `cÚv”t_sdp_»cÜd_to_xml ( »c , 0, dÝrštf ); 3931 `´št_¿w_©Œ ( »c ); 3936 `memýy (& sub_cÚ‹xt , cÚ‹xt , ( £¬ch_cÚ‹xt )); 3938 ià( `sdp_g‘_group_id ( »c , & sub_cÚ‹xt . group ) != -1) { 3940 ià( sub_cÚ‹xt . group . v®ue . uuid16 !ð cÚ‹xt ->group.value.uuid16) 3941 `do_£¬ch ( bdaddr , & sub_cÚ‹xt ); 3943 Ãxt = £q ->next; 3944 `ä“ ( £q ); 3945 `sdp_»cÜd_ä“ ( »c ); 3948 `sdp_þo£ ( £ss ); 3950 } } 3952  ÝtiÚ gbrow£_ÝtiÚs [] = { 3962 cÚ¡ * gbrow£_h–p = 3970  $cmd_brow£ ( ¬gc , ** ¬gv ) 3972  £¬ch_cÚ‹xt cÚ‹xt ; 3973  Ýt , num ; 3976 `mem£t (& cÚ‹xt , '\0', ( £¬ch_cÚ‹xt )); 3978 `sdp_uuid16_ü—‹ (& cÚ‹xt . group , PUBLIC_BROWSE_GROUP ); 3980 `fÜ_—ch_Ýt ( Ýt , brow£_ÝtiÚs , 0) { 3981  Ýt ) { 3983 cÚ‹xt . v›w = TREE_VIEW ; 3986 cÚ‹xt . v›w = RAW_VIEW ; 3989 cÚ‹xt . v›w = XML_VIEW ; 3992 ià( `ssÿnf ( Ýrg , "%i", & num ) != 1 ||‚um < 0 ||‚um > 0xffff) { 3993 `´štf ("Inv®id uuid %s\n", Ýrg ); 3996 `sdp_uuid16_ü—‹ (& cÚ‹xt . group , num ); 3999 `sdp_uuid16_ü—‹ (& cÚ‹xt . group , L2CAP_UUID ); 4002 `´štf ("%s", brow£_h–p ); 4007 ¬gc -ð Ýtšd ; 4008 ¬gv +ð Ýtšd ; 4010 ià( ¬gc >= 1) { 4011 bdaddr_t bdaddr ; 4012 `e¡r2ba ( ¬gv [0], & bdaddr ); 4013  `do_£¬ch (& bdaddr , & cÚ‹xt ); 4016  `do_£¬ch ( NULL , & cÚ‹xt ); 4017 } } 4019  ÝtiÚ g£¬ch_ÝtiÚs [] = { 4028 cÚ¡ * g£¬ch_h–p = 4041  $cmd_£¬ch ( ¬gc , ** ¬gv ) 4043  £¬ch_cÚ‹xt cÚ‹xt ; 4044 * uuid = NULL ; 4045 ušt32_t þass = 0; 4046 bdaddr_t bdaddr ; 4047  has_addr = 0; 4048  i ; 4049  Ýt ; 4052 `mem£t (& cÚ‹xt , '\0', ( £¬ch_cÚ‹xt )); 4054 `fÜ_—ch_Ýt ( Ýt , £¬ch_ÝtiÚs , 0) { 4055  Ýt ) { 4057 `e¡r2ba ( Ýrg , & bdaddr ); 4058 has_addr = 1; 4061 cÚ‹xt . v›w = TREE_VIEW ; 4064 cÚ‹xt . v›w = RAW_VIEW ; 4067 cÚ‹xt . v›w = XML_VIEW ; 4070 `´štf ("%s", £¬ch_h–p ); 4075 ¬gc -ð Ýtšd ; 4076 ¬gv +ð Ýtšd ; 4078 ià( ¬gc < 1) { 4079 `´štf ("%s", £¬ch_h–p ); 4085 cÚ‹xt . svc = `¡rdup ( ¬gv [0]); 4086 ià(! `¡ºÿ£cmp ( cÚ‹xt . svc , "0x", 2)) { 4087  num ; 4089 `ssÿnf ( cÚ‹xt . svc + 2, "%X", & num ); 4090 þass = num ; 4091 `´štf ("CÏs 0x%X\n", þass ); 4095  i = 0; £rviû [i]. Çme ; i++) 4096 ià( `¡rÿ£cmp ( cÚ‹xt . svc , £rviû [ i ]. Çme ) == 0) { 4097 þass = £rviû [ i ].class; 4098 uuid = £rviû [ i ].uuid; 4101 ià(! þass && ! uuid ) { 4102 `´štf ("UnknowÀ£rviû %s\n", cÚ‹xt . svc ); 4107 ià( þass ) { 4108 ià( þass & 0xffff0000) 4109 `sdp_uuid32_ü—‹ (& cÚ‹xt . group , þass ); 4111 ušt16_t þass16 = þass & 0xffff; 4112 `sdp_uuid16_ü—‹ (& cÚ‹xt . group , þass16 ); 4115 `sdp_uuid128_ü—‹ (& cÚ‹xt . group , uuid ); 4117 ià( has_addr ) 4118  `do_£¬ch (& bdaddr , & cÚ‹xt ); 4120  `do_£¬ch ( NULL , & cÚ‹xt ); 4121 } } 4127  $g‘_£rviû ( bdaddr_t * bdaddr ,  £¬ch_cÚ‹xt * cÚ‹xt ,  qu™e ) 4129 sdp_li¡_t * ©Œid ; 4130 ušt32_t ¿nge = 0x0000ffff; 4131 sdp_»cÜd_t * »c ; 4132 sdp_£ssiÚ_t * £ssiÚ = `sdp_cÚÃù (& š‹rçû , bdaddr , SDP_RETRY_IF_BUSY ); 4134 ià(! £ssiÚ ) { 4135  ¡r [20]; 4136 `ba2¡r ( bdaddr , ¡r ); 4137 `´štf ("FažedØcÚÃùØSDP s”v” oÀ%s: %s\n", ¡r , `¡»¼Ü ( ”ºo )); 4141 ©Œid = `sdp_li¡_­³nd (0, & ¿nge ); 4142 »c = `sdp_£rviû_©Œ_»q ( £ssiÚ , cÚ‹xt -> hªdË , SDP_ATTR_REQ_RANGE , ©Œid ); 4143 `sdp_li¡_ä“ ( ©Œid , 0); 4144 `sdp_þo£ ( £ssiÚ ); 4146 ià(! »c ) { 4147 ià(! qu™e ) { 4148 `´štf ("Service get„equest failed.\n"); 4154  cÚ‹xt -> v›w ) { 4155  DEFAULT_VIEW : 4157 `´št_£rviû_©Œ ( »c ); 4158 `´štf ("\n"); 4160  TREE_VIEW : 4162 `´št_Œ“_©Œ ( »c ); 4163 `´štf ("\n"); 4165  XML_VIEW : 4167 `cÚv”t_sdp_»cÜd_to_xml ( »c , 0, dÝrštf ); 4171 `´št_¿w_©Œ ( »c ); 4175 `sdp_»cÜd_ä“ ( »c ); 4177 } } 4179  ÝtiÚ g»cÜds_ÝtiÚs [] = { 4187 cÚ¡ * g»cÜds_h–p = 4194  $cmd_»cÜds ( ¬gc , ** ¬gv ) 4196  £¬ch_cÚ‹xt cÚ‹xt ; 4197 ušt32_t ba£ [] = { 0x10000, 0x10300, 0x10500, 4201 bdaddr_t bdaddr ; 4202  i , n , num = 32; 4203  Ýt , ”r = 0; 4206 `mem£t (& cÚ‹xt , '\0', ( £¬ch_cÚ‹xt )); 4208 `fÜ_—ch_Ýt ( Ýt , »cÜds_ÝtiÚs , 0) { 4209  Ýt ) { 4211 cÚ‹xt . v›w = TREE_VIEW ; 4214 cÚ‹xt . v›w = RAW_VIEW ; 4217 cÚ‹xt . v›w = XML_VIEW ; 4220 `´štf ("%s", »cÜds_h–p ); 4225 ¬gc -ð Ýtšd ; 4226 ¬gv +ð Ýtšd ; 4228 ià( ¬gc < 1) { 4229 `´štf ("%s", »cÜds_h–p ); 4234 `e¡r2ba ( ¬gv [0], & bdaddr ); 4236  i = 0; i < ( ba£ è/ ( ušt32_t ); i++) 4237  n = 0;‚ < num ;‚++) { 4238 cÚ‹xt . hªdË = ba£ [ i ] + n ; 4239 ”r = `g‘_£rviû (& bdaddr , & cÚ‹xt , 1); 4240 ià( ”r < 0) 4245 } } 4247  ÝtiÚ gg‘_ÝtiÚs [] = { 4256 cÚ¡ * gg‘_h–p = 4263  $cmd_g‘ ( ¬gc , ** ¬gv ) 4265  £¬ch_cÚ‹xt cÚ‹xt ; 4266 bdaddr_t bdaddr ; 4267  has_addr = 0; 4268  Ýt ; 4271 `mem£t (& cÚ‹xt , '\0', ( £¬ch_cÚ‹xt )); 4273 `fÜ_—ch_Ýt ( Ýt , g‘_ÝtiÚs , 0) { 4274  Ýt ) { 4276 `e¡r2ba ( Ýrg , & bdaddr ); 4277 has_addr = 1; 4280 cÚ‹xt . v›w = TREE_VIEW ; 4283 cÚ‹xt . v›w = RAW_VIEW ; 4286 cÚ‹xt . v›w = XML_VIEW ; 4289 `´štf ("%s", g‘_h–p ); 4294 ¬gc -ð Ýtšd ; 4295 ¬gv +ð Ýtšd ; 4297 ià( ¬gc < 1) { 4298 `´štf ("%s", g‘_h–p ); 4303 cÚ‹xt . hªdË = `¡¹oul ( ¬gv [0], 0, 16); 4305  `g‘_£rviû ( has_addr ? & bdaddr : BDADDR_LOCAL , & cÚ‹xt , 0); 4306 } } 4309 * mcmd ; 4310 (* mfunc )( m¬gc , ** m¬gv ); 4311 * mdoc ; 4312 } gcommªd [] = { 4313 { "£¬ch", cmd_£¬ch , "Search for‡ service" }, 4314 { "brow£", cmd_brow£ , "Browse‡ll‡vailable services" }, 4315 { "»cÜds", cmd_»cÜds , "Request‡ll„ecords" }, 4316 { "add", cmd_add , "Add†ocal service" }, 4317 { "d–", cmd_d– , "Delete†ocal service" }, 4318 { "g‘", cmd_g‘ , "Get†ocal service" }, 4319 { "£‰r", cmd_£‰r , "Set/Add‡ttributeo‡ SDP„ecord" }, 4320 { "£t£q", cmd_£t£q , "Set/Add‡ttribute sequenceo‡ SDP„ecord" }, 4324  $u§ge () 4326  i , pos = 0; 4328 `´štf ("sd±oÞ - SDPoÞ v%s\n", VERSION ); 4329 `´štf ("Usage:\n" 4331 `´štf ("Options:\n" 4335 `´štf ("Commands:\n"); 4336  i = 0; commªd [i]. cmd ; i++) 4337 `´štf ("\t%-4s\t\t%s\n", commªd [ i ]. cmd , commªd[i]. doc ); 4339 `´štf ("\nServices:\n\t"); 4340  i = 0; £rviû [i]. Çme ; i++) { 4341 `´štf ("% ", £rviû [ i ]. Çme ); 4342 pos +ð `¡¾’ ( £rviû [ i ]. Çme ) + 1; 4343 ià( pos > 60) { 4344 `´štf ("\n\t"); 4345 pos = 0; 4348 `´štf ("\n"); 4349 } } 4351  ÝtiÚ gmaš_ÝtiÚs [] = { 4357  $maš ( ¬gc , * ¬gv []) 4359  i , Ýt ; 4361 `baýy (& š‹rçû , BDADDR_ANY ); 4363 ( Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "+i:h", maš_ÝtiÚs , NULL )) != -1) { 4364  Ýt ) { 4366 ià(! `¡ºcmp ( Ýrg , "hci", 3)) 4367 `hci_devba ( `©oi ( Ýrg + 3), & š‹rçû ); 4369 `¡r2ba ( Ýrg , & š‹rçû ); 4373 `u§ge (); 4374 `ex™ (0); 4377 `ex™ (1); 4381 ¬gc -ð Ýtšd ; 4382 ¬gv +ð Ýtšd ; 4383 Ýtšd = 0; 4385 ià( ¬gc < 1) { 4386 `u§ge (); 4387 `ex™ (1); 4390  i = 0; commªd [i]. cmd ; i++) 4391 ià( `¡ºcmp ( commªd [ i ]. cmd , ¬gv [0], 4) == 0) 4392  commªd [ i ]. `func ( ¬gc , ¬gv ); 4395 } } @tools/seq2bseq.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~ 30  ~ 31  ~<¡ršg.h > 32  ~<¡dlib.h > 33  ~ 34  ~<”ºo.h > 35  ~ 37  $cÚv”t_lše ( fd , cÚ¡ * lše ) 39 cÚ¡ * ±r = lše ; 40  ¡r [3]; 41  v® ; 43 ià( lše [0] == '*' ||†ine[0] == '\r' ||†ine[0] == '\n') 47 ¡r [0] = * ±r ++; 48 ¡r [1] = * ±r ++; 49 ¡r [2] = '\0'; 51 v® = `¡¹Þ ( ¡r , NULL , 16); 53 ià( `wr™e ( fd , & v® , 1) < 0) 54  - ”ºo ; 56 ià(* ±r == '\r' || *ptr == '\n') 59 * ±r == ' ') 60 ±r ++; 64 } } 66  $cÚv”t_fže (cÚ¡ * šput_·th , cÚ¡ * ouut_·th ) 68 size_t lše_size = 1024; 69  lše_bufãr [ lše_size ]; 70 * ·th ; 71 cÚ¡ * ±r ; 72 FILE * å ; 73  ¡© ¡ ; 74 off_t cur = 0; 75  fd ; 77 ià( ouut_·th ) { 78 ·th = `¡rdup ( ouut_·th ); 79 ià(! ·th ) { 80 `³¼Ü ("Failedo‡llocate string"); 84 ±r = `¡¼chr ( šput_·th , '.'); 85 ià( ±r ) { 86 ·th = `m®loc ( ±r - šput_·th + 6); 87 ià(! ·th ) { 88 `³¼Ü ("Failedo‡llocate string"); 91 `¡ºýy ( ·th , šput_·th , ±r - input_path); 92 `¡rýy ( ·th + ( ±r - šput_·th ), ".bseq"); 94 ià( `a¥rštf (& ·th , "%s.b£q", šput_·th ) < 0) { 95 `³¼Ü ("Failedo‡llocate string"); 101 `´štf ("CÚv”tšg % tØ%s\n", šput_·th , ·th ); 103 fd = `Ý’ ( ·th , O_WRONLY | O_CREAT | O_TRUNC , 0644); 105 `ä“ ( ·th ); 107 ià( fd < 0) { 108 `³¼Ü ("Failedo create output file"); 112 ià( `¡© ( šput_·th , & ¡ ) < 0) { 113 `årštf ( ¡d”r , "Failed get file size\n"); 114 `þo£ ( fd ); 118 ià( ¡ . ¡_size == 0) { 119 `årštf ( ¡d”r , "Empty file\n"); 120 `þo£ ( fd ); 124 å = `fÝ’ ( šput_·th , "r"); 125 ià(! å ) { 126 `årštf ( ¡d”r , "Failedo open input file\n"); 127 `þo£ ( fd ); 132 * ¡r ; 133  ”r ; 135 ¡r = `fg‘s ( lše_bufãr , lše_size - 1, å ); 136 ià(! ¡r ) 139 cur +ð `¡¾’ ( ¡r ); 141 ”r = `cÚv”t_lše ( fd , ¡r ); 142 ià( ”r < 0) { 143 `årštf ( ¡d”r , "Failedo convert file (%s)\n", 144 `¡»¼Ü (- ”r )); 149 `fþo£ ( å ); 151 `þo£ ( fd ); 152 } } 154  $u§ge () 156 `´štf ("Intel Bluetooth firmware converter\n" 158 `´štf ("\tseq2bseq [options] \n"); 159 `´štf ("Options:\n" 162 } } 164 cÚ¡  ÝtiÚ gmaš_ÝtiÚs [] = { 165 { "ouut", »quœed_¬gum’t , NULL , 'o' }, 166 { "v”siÚ", no_¬gum’t , NULL , 'v' }, 167 { "h–p", no_¬gum’t , NULL , 'h' }, 171  $maš ( ¬gc , * ¬gv []) 173 cÚ¡ * ouut_·th = NULL ; 174  i ; 177  Ýt ; 179 Ýt = `g‘Ýt_lÚg ( ¬gc , ¬gv , "o:vh", maš_ÝtiÚs , NULL ); 180 ià( Ýt < 0) 183  Ýt ) { 185 ouut_·th = Ýrg ; 188 `´štf ("%s\n", VERSION ); 189  EXIT_SUCCESS ; 191 `u§ge (); 192  EXIT_SUCCESS ; 194  EXIT_FAILURE ; 198 ià( ¬gc - Ýtšd < 1) { 199 `årštf ( ¡d”r , "No input firmware files…rovided\n"); 200  EXIT_FAILURE ; 203 ià( ouut_·th && ¬gc - Ýtšd > 1) { 204 `årštf ( ¡d”r , "Only single input firmware supported\n"); 205  EXIT_FAILURE ; 208  i = Ýtšd ; i < ¬gc ; i++) 209 `cÚv”t_fže ( ¬gv [ i ], ouut_·th ); 211  EXIT_SUCCESS ; 212 } } @tools/smp-tester.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dlib.h > 29  ~ 30  ~<”ºo.h > 31  ~<¡dboÞ.h > 32  ~ 34  ~ 36  ~"lib/blu‘oÙh.h " 37  ~"lib/hci.h " 38  ~"lib/mgmt.h " 40  ~"mÚ™Ü/bt.h " 41  ~"emuÏtÜ/btho¡.h " 42  ~"emuÏtÜ/hc›mu.h " 44  ~"¤c/sh¬ed/üy±o.h " 45  ~"¤c/sh¬ed/ecc.h " 46  ~"¤c/sh¬ed/‹¡”.h " 47  ~"¤c/sh¬ed/mgmt.h " 49  #SMP_CID 0x0006 ) 51  s‹¡_d©a { 52 cÚ¡ * m‹¡_d©a ; 53  mgmt * mmgmt ; 54 ušt16_t mmgmt_šdex ; 55  hc›mu * mhc›mu ; 56 hc›mu_ty³ mhc›mu_ty³ ; 57  mio_id ; 58 ušt8_t mŸ [6]; 59 ušt8_t mŸ_ty³ ; 60 ušt8_t m¿ [6]; 61 ušt8_t m¿_ty³ ; 62 boÞ mout ; 63 ušt16_t mhªdË ; 64 size_t mcouÁ” ; 65  bt_üy±o * müy±o ; 66 ušt8_t mtk [16]; 67 ušt8_t m´nd [16]; 68 ušt8_t m¼nd [16]; 69 ušt8_t mpúf [16]; 70 ušt8_t m´eq [7]; 71 ušt8_t m´¥ [7]; 72 ušt8_t mÉk [16]; 73 ušt8_t m»mÙe_pk [64]; 74 ušt8_t mloÿl_pk [64]; 75 ušt8_t mloÿl_sk [32]; 76 ušt8_t mdhkey [32]; 77  munm‘_cÚd™iÚs ; 80  ssmp_»q_r¥ { 81 cÚ¡ * m£nd ; 82 ušt16_t m£nd_Ën ; 83 cÚ¡ * mex³ù ; 84 ušt16_t mex³ù_Ën ; 87  ssmp_d©a { 88 cÚ¡  smp_»q_r¥ * m»q ; 89 size_t m»q_couÁ ; 90 boÞ mm™m ; 91 ušt16_t mex³ù_hci_commªd ; 92 cÚ¡ * mex³ù_hci_·¿m ; 93 ušt8_t mex³ù_hci_Ën ; 94 cÚ¡ * (* mex³ù_hci_func )( ušt8_t * mËn ); 95 boÞ msc ; 98  $mgmt_debug (cÚ¡ * ¡r , * u£r_d©a ) 100 cÚ¡ * ´efix = u£r_d©a ; 102 `‹¡”_´št ("%s%s", ´efix , ¡r ); 103 } } 105  $»ad_šfo_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 106 cÚ¡ * ·¿m , * u£r_d©a ) 108  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 109 cÚ¡  mgmt_½_»ad_šfo * ½ = ·¿m ; 110  addr [18]; 111 ušt16_t mªuçùu»r ; 112 ušt32_t suµÜ‹d_£‰šgs , cu¼’t_£‰šgs ; 114 `‹¡”_´št ("Read Info callback"); 115 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 117 ià( ¡©us || ! ·¿m ) { 118 `‹¡”_´e_£tup_çžed (); 122 `ba2¡r (& ½ -> bdaddr , addr ); 123 mªuçùu»r = `btohs ( ½ ->manufacturer); 124 suµÜ‹d_£‰šgs = `btohl ( ½ ->supported_settings); 125 cu¼’t_£‰šgs = `btohl ( ½ ->current_settings); 127 `‹¡”_´št (" Add»ss: %s", addr ); 128 `‹¡”_´št (" V”siÚ: 0x%02x", ½ -> v”siÚ ); 129 `‹¡”_´št (" Mªuçùu»r: 0x%04x", mªuçùu»r ); 130 `‹¡”_´št (" SuµÜ‹d s‘tšgs: 0x%08x", suµÜ‹d_£‰šgs ); 131 `‹¡”_´št (" Cu¼’ˆ£‰šgs: 0x%08x", cu¼’t_£‰šgs ); 132 `‹¡”_´št (" Class: 0x%02x%02x%02x", 133 ½ -> dev_þass [2],„p->dev_class[1],„p->dev_class[0]); 134 `‹¡”_´št (" Name: %s", ½ -> Çme ); 135 `‹¡”_´št (" Sh܈Çme: %s", ½ -> shÜt_Çme ); 137 ià( `¡rcmp ( `hc›mu_g‘_add»ss ( d©a -> hc›mu ), addr )) { 138 `‹¡”_´e_£tup_çžed (); 142 `‹¡”_´e_£tup_com¶‘e (); 143 } } 145  $šdex_added_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 146 cÚ¡ * ·¿m , * u£r_d©a ) 148  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 150 `‹¡”_´št ("Index Added callback"); 151 `‹¡”_´št (" Index: 0x%04x", šdex ); 153 d©a -> mgmt_šdex = šdex ; 155 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_INFO , d©a-> mgmt_šdex , 0, NULL , 156 »ad_šfo_ÿÎback , NULL , NULL); 157 } } 159  $šdex_»moved_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 160 cÚ¡ * ·¿m , * u£r_d©a ) 162  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 164 `‹¡”_´št ("Index Removed callback"); 165 `‹¡”_´št (" Index: 0x%04x", šdex ); 167 ià( šdex !ð d©a -> mgmt_šdex ) 170 `mgmt_uÄegi¡”_šdex ( d©a -> mgmt , d©a-> mgmt_šdex ); 172 `mgmt_uÄef ( d©a -> mgmt ); 173 d©a -> mgmt = NULL ; 175 `‹¡”_po¡_‹¬down_com¶‘e (); 176 } } 178  $»ad_šdex_li¡_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 179 cÚ¡ * ·¿m , * u£r_d©a ) 181  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 183 `‹¡”_´št ("Read Index List callback"); 184 `‹¡”_´št (" Stus: 0x%02x", ¡©us ); 186 ià( ¡©us || ! ·¿m ) { 187 `‹¡”_´e_£tup_çžed (); 191 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_INDEX_ADDED , MGMT_INDEX_NONE , 192 šdex_added_ÿÎback , NULL , NULL); 194 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_INDEX_REMOVED , MGMT_INDEX_NONE , 195 šdex_»moved_ÿÎback , NULL , NULL); 197 d©a -> hc›mu = `hc›mu_Ãw (d©a-> hc›mu_ty³ ); 198 ià(! d©a -> hc›mu ) { 199 `‹¡”_w¬n ("Failedo setup HCIƒmulation"); 200 `‹¡”_´e_£tup_çžed (); 203 `‹¡”_´št ("New hciemu instance created"); 204 } } 206  $‹¡_´e_£tup (cÚ¡ * ‹¡_d©a ) 208  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 210 d©a -> üy±o = `bt_üy±o_Ãw (); 211 ià(! d©a -> üy±o ) { 212 `‹¡”_w¬n ("Failedo setup crypto"); 213 `‹¡”_´e_£tup_çžed (); 217 d©a -> mgmt = `mgmt_Ãw_deçuÉ (); 218 ià(! d©a -> mgmt ) { 219 `‹¡”_w¬n ("Failedo setup management interface"); 220 `bt_üy±o_uÄef ( d©a -> üy±o ); 221 `‹¡”_´e_£tup_çžed (); 225 ià( `‹¡”_u£_debug ()) 226 `mgmt_£t_debug ( d©a -> mgmt , mgmt_debug , "mgmt: ", NULL ); 228 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_READ_INDEX_LIST , MGMT_INDEX_NONE , 0, NULL , 229 »ad_šdex_li¡_ÿÎback , NULL , NULL); 230 } } 232  $‹¡_po¡_‹¬down (cÚ¡ * ‹¡_d©a ) 234  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 236 ià( d©a -> io_id > 0) { 237 `g_sourû_»move ( d©a -> io_id ); 238 d©a -> io_id = 0; 241 ià( d©a -> üy±o ) { 242 `bt_üy±o_uÄef ( d©a -> üy±o ); 243 d©a -> üy±o = NULL ; 246 `hc›mu_uÄef ( d©a -> hc›mu ); 247 d©a -> hc›mu = NULL ; 248 } } 250  $‹¡_d©a_ä“ (* ‹¡_d©a ) 252  ‹¡_d©a * d©a =est_data; 254 `ä“ ( d©a ); 255 } } 257  $‹¡_add_cÚd™iÚ ( ‹¡_d©a * d©a ) 259 d©a -> unm‘_cÚd™iÚs ++; 261 `‹¡”_´št ("Te¡ cÚd™iÚ‡dded,Ù® %d", d©a -> unm‘_cÚd™iÚs ); 262 } } 264  $‹¡_cÚd™iÚ_com¶‘e ( ‹¡_d©a * d©a ) 266 d©a -> unm‘_cÚd™iÚs --; 268 `‹¡”_´št ("Test condition complete, %d†eft", 269 d©a -> unm‘_cÚd™iÚs ); 271 ià( d©a -> unm‘_cÚd™iÚs > 0) 274 `‹¡”_‹¡_·s£d (); 275 } } 277  #‹¡_smp ( Çme , d©a , £tup , func ) \ 279  ‹¡_d©a * u£r ; \ 280 u£r = `ÿÎoc (1, ( ‹¡_d©a )); \ 281 ià(! u£r ) \ 283 u£r -> hc›mu_ty³ = HCIEMU_TYPE_BREDRLE ; \ 284 u£r -> ‹¡_d©a = d©a ; \ 285 `‹¡”_add_fuÎ ( Çme , d©a , \ 286 ‹¡_´e_£tup , £tup , func , NULL , \ 287 ‹¡_po¡_‹¬down , 2, u£r , ‹¡_d©a_ä“ ); \ 288 } 0) ) 290 cÚ¡ ušt8_t gsmp_nv®_»q_1 [] = { 0x0b, 0x00 }; 291 cÚ¡ ušt8_t gsmp_nv®_»q_1_r¥ [] = { 0x05, 0x07 }; 293 cÚ¡  smp_»q_r¥ gnv®_»q_1 [] = { 294 { smp_nv®_»q_1 , (smp_nval_req_1), 295 smp_nv®_»q_1_r¥ , (smp_nval_req_1_rsp) }, 298 cÚ¡  smp_d©a gsmp_£rv”_nv®_»q_1_‹¡ = { 299 . »q = nv®_»q_1 , 300 . g»q_couÁ = G_N_ELEMENTS ( nv®_»q_1 ), 303 cÚ¡ ušt8_t gsmp_nv®_»q_2 [7] = { 0x01 }; 304 cÚ¡ ušt8_t gsmp_nv®_»q_2_r¥ [] = { 0x05, 0x06 }; 306 cÚ¡  smp_»q_r¥ g¤v_nv®_»q_1 [] = { 307 { smp_nv®_»q_2 , (smp_nval_req_2), 308 smp_nv®_»q_2_r¥ , (smp_nval_req_2_rsp) }, 311 cÚ¡  smp_d©a gsmp_£rv”_nv®_»q_2_‹¡ = { 312 . »q = ¤v_nv®_»q_1 , 313 . g»q_couÁ = G_N_ELEMENTS ( ¤v_nv®_»q_1 ), 316 cÚ¡ ušt8_t gsmp_nv®_»q_3 [] = { 0x01, 0xff }; 317 cÚ¡ ušt8_t gsmp_nv®_»q_3_r¥ [] = { 0x05, 0x0a }; 319 cÚ¡  smp_»q_r¥ g¤v_nv®_»q_2 [] = { 320 { smp_nv®_»q_3 , (smp_nval_req_3), 321 smp_nv®_»q_3_r¥ , (smp_nval_req_3_rsp) }, 324 cÚ¡  smp_d©a gsmp_£rv”_nv®_»q_3_‹¡ = { 325 . »q = ¤v_nv®_»q_2 , 326 . g»q_couÁ = G_N_ELEMENTS ( ¤v_nv®_»q_2 ), 329 cÚ¡ ušt8_t gsmp_nv®_»q_4 [] = { 0xff, 0xff }; 330 cÚ¡ ušt8_t gsmp_nv®_»q_4_r¥ [] = { 0x05, 0x07 }; 332 cÚ¡  smp_»q_r¥ g¤v_nv®_»q_3 [] = { 333 { smp_nv®_»q_4 , (smp_nv®_»q_4), NULL , 0 }, 336 cÚ¡ ušt8_t gsmp_basic_»q_1 [] = { 0x01, 344 cÚ¡ ušt8_t gsmp_basic_»q_1_r¥ [] = { 0x02, 353 cÚ¡ ušt8_t gsmp_cÚfœm_»q_1 [17] = { 0x03 }; 354 cÚ¡ ušt8_t gsmp_¿ndom_»q_1 [17] = { 0x04 }; 356 cÚ¡  smp_»q_r¥ g¤v_basic_»q_1 [] = { 357 { smp_basic_»q_1 , (smp_basic_req_1), 358 smp_basic_»q_1_r¥ , (smp_basic_req_1_rsp) }, 359 { smp_cÚfœm_»q_1 , (smp_confirm_req_1), 360 smp_cÚfœm_»q_1 , (smp_confirm_req_1) }, 361 { smp_¿ndom_»q_1 , (smp_random_req_1), 362 smp_¿ndom_»q_1 , (smp_random_req_1) }, 365 cÚ¡  smp_d©a gsmp_£rv”_basic_»q_1_‹¡ = { 366 . »q = ¤v_basic_»q_1 , 367 . g»q_couÁ = G_N_ELEMENTS ( ¤v_basic_»q_1 ), 370 cÚ¡  smp_»q_r¥ gþi_basic_»q_1 [] = { 371 { NULL , 0, smp_basic_»q_1 , (smp_basic_req_1) }, 372 { smp_basic_»q_1_r¥ , (smp_basic_req_1_rsp), 373 smp_cÚfœm_»q_1 , (smp_confirm_req_1) }, 374 { smp_cÚfœm_»q_1 , (smp_confirm_req_1), 375 smp_¿ndom_»q_1 , (smp_random_req_1) }, 376 { smp_¿ndom_»q_1 , (smp_¿ndom_»q_1), NULL , 0 }, 379 cÚ¡  smp_d©a gsmp_þ›Á_basic_»q_1_‹¡ = { 380 . »q = þi_basic_»q_1 , 381 . g»q_couÁ = G_N_ELEMENTS ( þi_basic_»q_1 ), 384 cÚ¡ ušt8_t gsmp_basic_»q_2 [] = { 0x01, 393 cÚ¡  smp_»q_r¥ gþi_basic_»q_2 [] = { 394 { NULL , 0, smp_basic_»q_2 , (smp_basic_req_2) }, 395 { smp_basic_»q_1_r¥ , (smp_basic_req_1_rsp), 396 smp_cÚfœm_»q_1 , (smp_confirm_req_1) }, 397 { smp_cÚfœm_»q_1 , (smp_confirm_req_1), 398 smp_¿ndom_»q_1 , (smp_random_req_1) }, 399 { smp_¿ndom_»q_1 , (smp_¿ndom_»q_1), NULL , 0 }, 402 cÚ¡  smp_d©a gsmp_þ›Á_basic_»q_2_‹¡ = { 403 . »q = þi_basic_»q_2 , 404 . g»q_couÁ = G_N_ELEMENTS ( þi_basic_»q_1 ), 405 . gm™m = Œue , 408  $u£r_cÚfœm_»que¡_ÿÎback ( ušt16_t šdex , ušt16_ˆ Ëngth , 409 cÚ¡ * ·¿m , 410 * u£r_d©a ) 412 cÚ¡  mgmt_ev_u£r_cÚfœm_»que¡ * ev = ·¿m ; 413  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 414  mgmt_ý_u£r_cÚfœm_»¶y ý ; 416 `mem£t (& ý , 0, (cp)); 417 `memýy (& ý . addr , & ev ->addr, (cp.addr)); 419 `mgmt_»¶y ( d©a -> mgmt , MGMT_OP_USER_CONFIRM_REPLY , 420 d©a -> mgmt_šdex , ( ý ), &ý, NULL , NULL, NULL); 421 } } 423 cÚ¡ ušt8_t gsmp_sc_»q_1 [] = { 0x01, 432 cÚ¡  smp_»q_r¥ gþi_sc_»q_1 [] = { 433 { NULL , 0, smp_sc_»q_1 , (smp_sc_req_1) }, 434 { smp_basic_»q_1_r¥ , (smp_basic_req_1_rsp), 435 smp_cÚfœm_»q_1 , (smp_confirm_req_1) }, 436 { smp_cÚfœm_»q_1 , (smp_confirm_req_1), 437 smp_¿ndom_»q_1 , (smp_random_req_1) }, 438 { smp_¿ndom_»q_1 , (smp_¿ndom_»q_1), NULL , 0 }, 441 cÚ¡  smp_d©a gsmp_þ›Á_sc_»q_1_‹¡ = { 442 . »q = þi_sc_»q_1 , 443 . g»q_couÁ = G_N_ELEMENTS ( þi_sc_»q_1 ), 444 . gsc = Œue , 447 cÚ¡ ušt8_t gsmp_sc_r¥_1 [] = { 0x02, 456 cÚ¡ ušt8_t gsmp_sc_pk [65] = { 0x0c }; 458 cÚ¡ ušt8_t gsmp_sc_çžed_r¥_1 [] = { 0x05, 0x08 }; 460 cÚ¡  smp_»q_r¥ gþi_sc_»q_2 [] = { 461 { NULL , 0, smp_sc_»q_1 , (smp_sc_req_1) }, 462 { smp_sc_r¥_1 , (smp_sc_r¥_1), smp_sc_pk , (smp_sc_pk) }, 463 { smp_sc_pk , (smp_sc_pk), NULL , 0 }, 464 { smp_cÚfœm_»q_1 , (smp_confirm_req_1), 465 smp_¿ndom_»q_1 , (smp_random_req_1) }, 466 { smp_¿ndom_»q_1 , (smp_¿ndom_»q_1), NULL , 0 }, 469 cÚ¡  smp_d©a gsmp_þ›Á_sc_»q_2_‹¡ = { 470 . »q = þi_sc_»q_2 , 471 . g»q_couÁ = G_N_ELEMENTS ( þi_sc_»q_2 ), 472 . gsc = Œue , 475  $þ›Á_cÚÃùabË_com¶‘e ( ušt16_t Ýcode , ušt8_t ¡©us , 476 cÚ¡ * ·¿m , ušt8_t Ën , 477 * u£r_d©a ) 479 ià( Ýcode !ð BT_HCI_CMD_LE_SET_ADV_ENABLE ) 482 `‹¡”_´št ("Cl›Á s‘ cÚÃùabË stu 0x%02x", ¡©us ); 484 ià( ¡©us ) 485 `‹¡”_£tup_çžed (); 487 `‹¡”_£tup_com¶‘e (); 488 } } 490  $£tup_pow”ed_þ›Á_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 491 cÚ¡ * ·¿m , * u£r_d©a ) 493  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 494  btho¡ *bthost; 496 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 497 `‹¡”_£tup_çžed (); 501 `‹¡”_´št ("Controller…owered on"); 503 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 504 `btho¡_£t_cmd_com¶‘e_cb ( btho¡ , þ›Á_cÚÃùabË_com¶‘e , d©a ); 505 `btho¡_£t_adv_’abË ( btho¡ , 0x01, 0x00); 506 } } 508  $make_pk ( ‹¡_d©a * d©a ) 510 ià(! `ecc_make_key ( d©a -> loÿl_pk , d©a-> loÿl_sk )) { 511 `‹¡”_´št ("Failedo general†ocal ECDH keypair"); 512 `‹¡”_£tup_çžed (); 515 } } 517  $£tup_pow”ed_þ›Á (cÚ¡ * ‹¡_d©a ) 519  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 520 cÚ¡  smp_d©a * smp = d©a -> ‹¡_d©a ; 521  ·¿m [] = { 0x01 }; 523 `‹¡”_´št ("Powering on controller"); 525 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_LE , d©a-> mgmt_šdex , 526 ( ·¿m ),…¬am, NULL , NULL, NULL); 527 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_BONDABLE , d©a-> mgmt_šdex , 528 ( ·¿m ),…¬am, NULL , NULL, NULL); 529 ià( smp -> sc ) { 530 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_SSP , d©a-> mgmt_šdex , 531 ( ·¿m ),…¬am, NULL , NULL, NULL); 532 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_SECURE_CONN , 533 d©a -> mgmt_šdex , ( ·¿m ),…¬am, NULL , 534 NULL , NULL); 535 `make_pk ( d©a ); 538 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 539 ( ·¿m ),…¬am, £tup_pow”ed_þ›Á_ÿÎback , 540 NULL , NULL); 541 } } 543  $·œ_deviû_com¶‘e ( ušt8_t ¡©us , ušt16_t Ëngth , 544 cÚ¡ * ·¿m , * u£r_d©a ) 546 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 547 `‹¡”_w¬n ("Paœšg fažed: %s", `mgmt_”r¡r ( ¡©us )); 551 `‹¡”_´št ("Pairing succeedded"); 552 } } 554 cÚ¡ * $g‘_pdu (cÚ¡ ušt8_t * pdu ) 556  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 557 cÚ¡  smp_d©a * smp = d©a -> ‹¡_d©a ; 558 ušt8_t Ýcode = pdu [0]; 559  ušt8_t buf [65]; 561  Ýcode ) { 563 `memýy ( d©a -> ´eq , pdu , (data->preq)); 566 `memýy ( d©a -> ´¥ , pdu , (data->prsp)); 569 buf [0] = pdu [0]; 570 ià( smp -> sc ) 571 `bt_üy±o_f4 ( d©a -> üy±o , d©a-> loÿl_pk , 572 d©a -> »mÙe_pk , d©a-> ´nd , 0, 573 & buf [1]); 575 `bt_üy±o_c1 ( d©a -> üy±o , d©a-> tk , d©a-> ´nd , 576 d©a -> ´¥ , d©a-> ´eq , d©a-> Ÿ_ty³ , 577 d©a -> Ÿ , d©a-> ¿_ty³ , d©a-> ¿ , 578 & buf [1]); 579  buf ; 581 buf [0] = pdu [0]; 582 `memýy (& buf [1], d©a -> ´nd , 16); 583  buf ; 585 buf [0] = pdu [0]; 586 `memýy (& buf [1], d©a -> loÿl_pk , 64); 587  buf ; 592  pdu ; 593 } } 595  boÞ $v”ify_¿ndom (cÚ¡ ušt8_t ºd [16]) 597  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 598 ušt8_t cÚfœm [16]; 600 ià(! `bt_üy±o_c1 ( d©a -> üy±o , d©a-> tk , d©a-> ¼nd , d©a-> ´¥ , 601 d©a -> ´eq , d©a-> Ÿ_ty³ , d©a-> Ÿ , 602 d©a -> ¿_ty³ , d©a-> ¿ , cÚfœm )) 603  çl£ ; 605 ià( `memcmp ( d©a -> púf , cÚfœm , (data->pcnf) != 0)) { 606 `‹¡”_w¬n ("Confirmation values don't match"); 607  çl£ ; 610 ià( d©a -> out ) { 611  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 612 `bt_üy±o_s1 ( d©a -> üy±o , d©a-> tk , d©a-> ¼nd , d©a-> ´nd , 613 d©a -> Ék ); 614 `btho¡_Ë_¡¬t_’üy± ( btho¡ , d©a -> hªdË , d©a-> Ék ); 616 `bt_üy±o_s1 ( d©a -> üy±o , d©a-> tk , d©a-> ´nd , d©a-> ¼nd , 617 d©a -> Ék ); 620  Œue ; 621 } } 623  boÞ $sc_¿ndom ( ‹¡_d©a *test_data) 625  Œue ; 626 } } 628  $smp_£rv” (cÚ¡ * d©a , ušt16_t Ën , * u£r_d©a ) 630  ‹¡_d©a *‹¡_d©¨ð u£r_d©a ; 631  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( ‹¡_d©a -> hc›mu ); 632 cÚ¡  smp_d©a * smp = ‹¡_d©a ->test_data; 633 cÚ¡  smp_»q_r¥ * »q ; 634 ušt8_t Ýcode ; 635 cÚ¡ * pdu ; 637 ià( Ën < 1) { 638 `‹¡”_w¬n ("Receivedoo small SMP PDU"); 639  çžed ; 642 Ýcode = *((cÚ¡ ušt8_t *è d©a ); 644 `‹¡”_´št ("Reûived SMP opcod0x%02x", Ýcode ); 646 ià( ‹¡_d©a -> couÁ” >ð smp -> »q_couÁ ) { 647 `‹¡_cÚd™iÚ_com¶‘e ( ‹¡_d©a ); 651 »q = & smp ->»q[ ‹¡_d©a -> couÁ” ++]; 652 ià(! »q -> ex³ù ) 653  Ãxt ; 655 ià( »q -> ex³ù_Ën !ð Ën ) { 656 `‹¡”_w¬n ("Unexpected SMP PDU†ength (%u != %u)", 657 Ën , »q -> ex³ù_Ën ); 658  çžed ; 661  Ýcode ) { 663 `memýy ( ‹¡_d©a -> ´eq , d©a , (test_data->preq)); 666 `memýy ( ‹¡_d©a -> ´¥ , d©a , (test_data->prsp)); 669 `memýy ( ‹¡_d©a -> púf , d©a + 1, 16); 670  Ãxt ; 672 `memýy ( ‹¡_d©a -> ¼nd , d©a + 1, 16); 673 ià( smp -> sc ) { 674 ià(! `sc_¿ndom ( ‹¡_d©a )) 675  çžed ; 677 ià(! `v”ify_¿ndom ( d©a + 1)) 678  çžed ; 680  Ãxt ; 682 `memýy ( ‹¡_d©a -> »mÙe_pk , d©a + 1, 64); 683 `ecdh_sh¬ed_£ü‘ ( ‹¡_d©a -> »mÙe_pk ,e¡_d©a-> loÿl_sk , 684 ‹¡_d©a -> dhkey ); 685  Ãxt ; 690 ià( `memcmp ( »q -> ex³ù , d©a , Ën ) != 0) { 691 `‹¡”_w¬n ("Unexpected SMP PDU"); 692  çžed ; 695 Ãxt : 696  Œue ) { 697 ià( smp -> »q_couÁ =ð ‹¡_d©a -> couÁ” ) { 698 `‹¡_cÚd™iÚ_com¶‘e ( ‹¡_d©a ); 702 »q = & smp ->»q[ ‹¡_d©a -> couÁ” ]; 704 pdu = `g‘_pdu ( »q -> £nd ); 705 `btho¡_£nd_cid ( btho¡ , ‹¡_d©a -> hªdË , SMP_CID , pdu , 706 »q -> £nd_Ën ); 707 ià( »q -> ex³ù ) 710 ‹¡_d©a -> couÁ” ++; 715 çžed : 716 `‹¡”_‹¡_çžed (); 717 } } 719  $commªd_hci_ÿÎback ( ušt16_t Ýcode , cÚ¡ * ·¿m , 720 ušt8_t Ëngth , * u£r_d©a ) 722  ‹¡_d©a * d©a = u£r_d©a ; 723 cÚ¡  smp_d©a * smp = d©a -> ‹¡_d©a ; 724 cÚ¡ * ex³ù_hci_·¿m = smp ->expect_hci_param; 725 ušt8_t ex³ù_hci_Ën = smp ->expect_hci_len; 727 `‹¡”_´št ("HCI Commªd 0x%04x†’gth %u", Ýcode , Ëngth ); 729 ià( Ýcode !ð smp -> ex³ù_hci_commªd ) 732 ià( smp -> ex³ù_hci_func ) 733 ex³ù_hci_·¿m = smp -> `ex³ù_hci_func (& ex³ù_hci_Ën ); 735 ià( Ëngth !ð ex³ù_hci_Ën ) { 736 `‹¡”_w¬n ("Invalid…arameter size for HCI command"); 737 `‹¡”_‹¡_çžed (); 741 ià( `memcmp ( ·¿m , ex³ù_hci_·¿m , Ëngth ) != 0) { 742 `‹¡”_w¬n ("Unexpected HCI command…arameter value"); 743 `‹¡”_‹¡_çžed (); 747 `‹¡_cÚd™iÚ_com¶‘e ( d©a ); 748 } } 750  $smp_Ãw_cÚn ( ušt16_t hªdË , * u£r_d©a ) 752  ‹¡_d©a * d©a = u£r_d©a ; 753 cÚ¡  smp_d©a * smp = d©a -> ‹¡_d©a ; 754  btho¡ *btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 755 cÚ¡  smp_»q_r¥ * »q ; 756 cÚ¡ * pdu ; 758 `‹¡”_´št ("New SMP cl›Á cÚÃùiÚ w™h hªdË 0x%04x", hªdË ); 760 d©a -> hªdË = handle; 762 `btho¡_add_cid_hook ( btho¡ , hªdË , SMP_CID , smp_£rv” , d©a ); 764 ià( smp -> »q_couÁ =ð d©a -> couÁ” ) 767 »q = & smp ->»q[ d©a -> couÁ” ]; 769 ià(! »q -> £nd ) 772 `‹¡”_´št ("Sending SMP PDU"); 774 pdu = `g‘_pdu ( »q -> £nd ); 775 `btho¡_£nd_cid ( btho¡ , hªdË , SMP_CID , pdu , »q -> £nd_Ën ); 777 ià(! »q -> ex³ù ) 778 `‹¡_cÚd™iÚ_com¶‘e ( d©a ); 779 } } 781  $š™_bdaddr ( ‹¡_d©a * d©a ) 783 cÚ¡ ušt8_t * ma¡”_bdaddr , * þ›Á_bdaddr ; 785 ma¡”_bdaddr = `hc›mu_g‘_ma¡”_bdaddr ( d©a -> hc›mu ); 786 ià(! ma¡”_bdaddr ) { 787 `‹¡”_w¬n ("No master bdaddr"); 788 `‹¡”_‹¡_çžed (); 792 þ›Á_bdaddr = `hc›mu_g‘_þ›Á_bdaddr ( d©a -> hc›mu ); 793 ià(! þ›Á_bdaddr ) { 794 `‹¡”_w¬n ("No client bdaddr"); 795 `‹¡”_‹¡_çžed (); 799 d©a -> Ÿ_ty³ = LE_PUBLIC_ADDRESS ; 800 d©a -> ¿_ty³ = LE_PUBLIC_ADDRESS ; 802 ià( d©a -> out ) { 803 `memýy ( d©a -> Ÿ , þ›Á_bdaddr , (data->ia)); 804 `memýy ( d©a -> ¿ , ma¡”_bdaddr , (data->ra)); 806 `memýy ( d©a -> Ÿ , ma¡”_bdaddr , (data->ia)); 807 `memýy ( d©a -> ¿ , þ›Á_bdaddr , (data->ra)); 809 } } 811  $‹¡_þ›Á (cÚ¡ * ‹¡_d©a ) 813  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 814 cÚ¡  smp_d©a * smp = d©a -> ‹¡_d©a ; 815  mgmt_ý_·œ_deviû ý ; 816  btho¡ *bthost; 818 `š™_bdaddr ( d©a ); 820 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 821 `btho¡_£t_cÚÃù_cb ( btho¡ , smp_Ãw_cÚn , d©a ); 822 `‹¡_add_cÚd™iÚ ( d©a ); 824 ià( smp -> ex³ù_hci_commªd ) { 825 `‹¡”_´št ("Registering HCI command callback"); 826 `hc›mu_add_ma¡”_po¡_commªd_hook ( d©a -> hc›mu , 827 commªd_hci_ÿÎback , d©a ); 828 `‹¡_add_cÚd™iÚ ( d©a ); 831 `memýy (& ý . addr . bdaddr , d©a -> ¿ , (data->ra)); 832 ý . addr . ty³ = BDADDR_LE_PUBLIC ; 833 ià( smp -> m™m ) 834 ý . io_ÿp = 0x04; 836 ý . io_ÿp = 0x03; 838 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_PAIR_DEVICE , d©a-> mgmt_šdex , 839 ( ý ), &ý, ·œ_deviû_com¶‘e , NULL , NULL); 841 `‹¡”_´št ("Pairing in…rogress"); 842 } } 844  $£tup_pow”ed_£rv”_ÿÎback ( ušt8_t ¡©us , ušt16_t Ëngth , 845 cÚ¡ * ·¿m , * u£r_d©a ) 847 ià( ¡©us !ð MGMT_STATUS_SUCCESS ) { 848 `‹¡”_£tup_çžed (); 852 `‹¡”_´št ("Controller…owered on"); 854 `‹¡”_£tup_com¶‘e (); 855 } } 857  $£tup_pow”ed_£rv” (cÚ¡ * ‹¡_d©a ) 859  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 860 cÚ¡  smp_d©a * smp = d©a -> ‹¡_d©a ; 861  ·¿m [] = { 0x01 }; 863 `mgmt_»gi¡” ( d©a -> mgmt , MGMT_EV_USER_CONFIRM_REQUEST , 864 d©a -> mgmt_šdex , u£r_cÚfœm_»que¡_ÿÎback , 865 d©a , NULL ); 867 `‹¡”_´št ("Powering on controller"); 869 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_LE , d©a-> mgmt_šdex , 870 ( ·¿m ),…¬am, NULL , NULL, NULL); 871 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_BONDABLE , d©a-> mgmt_šdex , 872 ( ·¿m ),…¬am, NULL , NULL, NULL); 873 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_CONNECTABLE , d©a-> mgmt_šdex , 874 ( ·¿m ),…¬am, NULL , NULL, NULL); 875 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_ADVERTISING , d©a-> mgmt_šdex , 876 ( ·¿m ),…¬am, NULL , NULL, NULL); 877 ià( smp -> sc ) { 878 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_SECURE_CONN , 879 d©a -> mgmt_šdex , ( ·¿m ),…¬am, NULL , 880 NULL , NULL); 881 `make_pk ( d©a ); 884 `mgmt_£nd ( d©a -> mgmt , MGMT_OP_SET_POWERED , d©a-> mgmt_šdex , 885 ( ·¿m ),…¬am, £tup_pow”ed_£rv”_ÿÎback , 886 NULL , NULL); 887 } } 889  $‹¡_£rv” (cÚ¡ * ‹¡_d©a ) 891  ‹¡_d©a * d©a = `‹¡”_g‘_d©a (); 892 cÚ¡  smp_d©a * smp = d©a -> ‹¡_d©a ; 893  btho¡ *bthost; 895 d©a -> out = Œue ; 897 `š™_bdaddr ( d©a ); 899 btho¡ = `hc›mu_þ›Á_g‘_ho¡ ( d©a -> hc›mu ); 900 `btho¡_£t_cÚÃù_cb ( btho¡ , smp_Ãw_cÚn , d©a ); 901 `‹¡_add_cÚd™iÚ ( d©a ); 903 `btho¡_hci_cÚÃù ( btho¡ , d©a -> ¿ , BDADDR_LE_PUBLIC ); 905 ià( smp -> ex³ù_hci_commªd ) { 906 `‹¡”_´št ("Registering HCI command callback"); 907 `hc›mu_add_ma¡”_po¡_commªd_hook ( d©a -> hc›mu , 908 commªd_hci_ÿÎback , d©a ); 909 `‹¡_add_cÚd™iÚ ( d©a ); 911 } } 913  $maš ( ¬gc , * ¬gv []) 915 `‹¡”_š™ (& ¬gc , & ¬gv ); 917 `‹¡_smp ("SMP Server - Basic Request 1", 918 & smp_£rv”_basic_»q_1_‹¡ , 919 £tup_pow”ed_£rv” , ‹¡_£rv” ); 920 `‹¡_smp ("SMP Server - Invalid Request 1", 921 & smp_£rv”_nv®_»q_1_‹¡ , 922 £tup_pow”ed_£rv” , ‹¡_£rv” ); 923 `‹¡_smp ("SMP Server - Invalid Request 2", 924 & smp_£rv”_nv®_»q_2_‹¡ , 925 £tup_pow”ed_£rv” , ‹¡_£rv” ); 926 `‹¡_smp ("SMP Server - Invalid Request 3", 927 & smp_£rv”_nv®_»q_3_‹¡ , 928 £tup_pow”ed_£rv” , ‹¡_£rv” ); 930 `‹¡_smp ("SMP Client - Basic Request 1", 931 & smp_þ›Á_basic_»q_1_‹¡ , 932 £tup_pow”ed_þ›Á , ‹¡_þ›Á ); 933 `‹¡_smp ("SMP Client - Basic Request 2", 934 & smp_þ›Á_basic_»q_2_‹¡ , 935 £tup_pow”ed_þ›Á , ‹¡_þ›Á ); 937 `‹¡_smp ("SMP Client - SC Request 1", 938 & smp_þ›Á_sc_»q_1_‹¡ , 939 £tup_pow”ed_þ›Á , ‹¡_þ›Á ); 940 `‹¡_smp ("SMP Client - SC Request 2", 941 & smp_þ›Á_sc_»q_2_‹¡ , 942 £tup_pow”ed_þ›Á , ‹¡_þ›Á ); 944  `‹¡”_run (); 945 } } @tools/ubcsp.c 29 #ifdeà HAVE_CONFIG_H 30  ~ 43  ~"ubc¥.h " 45 #ià SHOW_PACKET_ERRORS || SHOW_LE_STATES 46  ~<¡dio.h > 47  ~ 50  ušt16 ubc¥_ÿlc_üc ( ušt8 ch , ušt16 üc ); 51  ušt16 ubc¥_üc_»v”£ (uint16); 61 cÚ¡ ušt8 gubc¥_Ë_bufãr [4][4] = 72 #ià UBCSP_CRC 73 cÚ¡ ušt8 gubc¥_£nd_Ë_h—d” [4] = 78 cÚ¡ ušt8 gubc¥_£nd_Ë_h—d” [4] = 92  ubc¥_cÚfigu¿tiÚ gubc¥_cÚfig ; 97  ušt8 gubc¥_£nd_ack_h—d” [4] = 104 cÚ¡ ušt8 gubc¥_de¦ [2] = 106 SLIP_FRAME , SLIP_ESCAPE , 111  ušt8 gÃxt_Ë_·ck‘ [16] = 113 ubc¥_Ë_sync , 114 ubc¥_Ë_cÚf , 115 ubc¥_Ë_nÚe , 116 ubc¥_Ë_nÚe , 117 ubc¥_Ë_sync_»¥ , 118 ubc¥_Ë_sync_»¥ , 119 ubc¥_Ë_nÚe , 120 ubc¥_Ë_nÚe , 121 ubc¥_Ë_nÚe , 122 ubc¥_Ë_cÚf_»¥ , 123 ubc¥_Ë_cÚf_»¥ , 124 ubc¥_Ë_nÚe , 129  ušt8 gubc¥_£nd_h—d” [4]; 130  ušt8 gubc¥_£nd_üc [2]; 134  ušt8 gubc¥_»ûive_h—d” [4]; 150  $ubc¥_š™Ÿlize () 152 ubc¥_cÚfig . ack_numb” = 0; 153 ubc¥_cÚfig . £qu’û_numb” = 0; 154 ubc¥_cÚfig . £nd_±r = 0; 155 ubc¥_cÚfig . £nd_size = 0; 156 ubc¥_cÚfig . »ûive_šdex = -4; 158 ubc¥_cÚfig . d–ay = 0; 160 #ià SHOW_LE_STATES 161 `´štf ("Hello Link Uninitialized\n"); 164 ubc¥_cÚfig . lšk_e¡ablishm’t_¡©e = ubc¥_Ë_unš™Ÿlized ; 165 ubc¥_cÚfig . lšk_e¡ablishm’t_·ck‘ = ubc¥_Ë_sync ; 166 } } 178  $ubc¥_£nd_·ck‘ ( ubc¥_·ck‘ * £nd_·ck‘ ) 182 ubc¥_cÚfig . £nd_·ck‘ = send_packet; 187 ubc¥_cÚfig . £nd_size = 0; 188 ubc¥_cÚfig . £nd_±r = 0; 189 } } 201  $ubc¥_»ûive_·ck‘ ( ubc¥_·ck‘ * »ûive_·ck‘ ) 205 ubc¥_cÚfig . »ûive_·ck‘ =„eceive_packet; 209 ubc¥_cÚfig . »ûive_šdex = -4; 210 } } 221 #ifdeà UBCSP_CRC 223  ušt16 $ubc¥_ÿlc_üc ( ušt8 ch , ušt16 üc ) 227 cÚ¡ ušt16 üc_bË [] = 237 üc = (üø>> 4è^ üc_bË [(üø^ ch ) & 0x000f]; 238 üc = (üø>> 4è^ üc_bË [(üø^ ( ch >> 4)) & 0x000f]; 240  üc ; 241 } } 251  ušt16 $ubc¥_üc_»v”£ ( ušt16 üc ) 253 št32 254 b , 255 »v ; 259  b = 0, »v =0; b < 16; b++) 261 »v =„ev << 1; 262 »v |ð( üc & 1); 263 üc = crc >> 1; 266  »v ; 267 } } 281  $ubc¥_put_¦_u¬t ( ušt8 ch ) 290 ià( ch =ð SLIP_FRAME ) 292 `put_u¬t ( SLIP_ESCAPE ); 293 ubc¥_cÚfig . £nd_¦_esÿ³ = SLIP_ESCAPE_FRAME ; 295 ià( ch =ð SLIP_ESCAPE ) 297 `put_u¬t ( SLIP_ESCAPE ); 298 ubc¥_cÚfig . £nd_¦_esÿ³ = SLIP_ESCAPE_ESCAPE ; 304 `put_u¬t ( ch ); 306 } } 318  ušt32 $ubc¥_which_Ë_·ylßd (cÚ¡ ušt8 * ·ylßd ) 320  št32 321 où‘ , 322 loÝ ; 327  loÝ = 0;†oop < 4;†oop ++) 329  où‘ = 0; octet < 4; octet ++) 331 ià( ·ylßd [ où‘ ] !ð ubc¥_Ë_bufãr [ loÝ ][octet]) 334  bad_m©ch_loÝ ; 340  loÝ ; 343 bad_m©ch_loÝ : 350 } } 361  ušt8 $ubc¥_»ûv›d_·ck‘ () 363  ušt8 364 »ûive_üc , 365 »ûive_£q , 366 »ûive_ack , 367 aùiv™y ; 369 #ià UBCSP_CRC 370  št32 371 loÝ ; 373  ušt16 374 üc ; 377  ušt16 378 Ëngth ; 382 aùiv™y = 0; 388 ià((( ubc¥_»ûive_h—d” [0] + ubcsp_receive_header[1] + ubcsp_receive_header[2] + ubcsp_receive_header[3]) & 0xff) != 0xff) 392 #ià SHOW_PACKET_ERRORS 393 `´štf ("\n######################## Header Checksum Error %02X %02X %02X %02X\n", 394 ubc¥_»ûive_h—d” [0], 395 ubc¥_»ûive_h—d” [1], 396 ubc¥_»ûive_h—d” [2], 397 ubc¥_»ûive_h—d” [3]); 403 ubc¥_cÚfig . £nd_ack = 1; 405  aùiv™y ; 410 ubc¥_cÚfig . »ûive_·ck‘ -> »lŸbË = ( ubc¥_»ûive_h—d” [0] & 0x80) >> 7; 412 »ûive_üc = ( ubc¥_»ûive_h—d” [0] & 0x40) >> 6; 413 »ûive_ack = ( ubc¥_»ûive_h—d” [0] & 0x38) >> 3; 414 »ûive_£q = ( ubc¥_»ûive_h—d” [0] & 0x07); 416 ubc¥_cÚfig . »ûive_·ck‘ -> chªÃl = ( ubc¥_»ûive_h—d” [1] & 0x0f); 418 Ëngth = 419 (( ubc¥_»ûive_h—d” [1] & 0xf0) >> 4) | 420 ( ubc¥_»ûive_h—d” [2] << 4); 422 #ià SHOW_PACKET_ERRORS 423 ià( ubc¥_cÚfig . »ûive_·ck‘ -> »lŸbË ) 425 `´štf (" : %10d Recv SEQ: %d ACK %d\n", 426 `G‘TickCouÁ () % 100000, 427 »ûive_£q , 428 »ûive_ack ); 430 ià( ubc¥_cÚfig . »ûive_·ck‘ -> chªÃl != 1) 432 `´štf (" : %10d Recv ACK %d\n", 433 `G‘TickCouÁ () % 100000, 434 »ûive_ack ); 440 #ià UBCSP_CRC 441 ià( »ûive_üc ) 446 ià( Ëngth + 2 !ð ubc¥_cÚfig . »ûive_šdex ) 450 #ià SHOW_PACKET_ERRORS 451 `´štf ("\n######################## Sl L’gth E¼Ü (W™h CRCè%d,%d\n", Ëngth , ubc¥_cÚfig . »ûive_šdex - 2); 457 ubc¥_cÚfig . £nd_ack = 1; 458  aùiv™y ; 463 ubc¥_cÚfig . »ûive_šdex -= 2; 467 üc = 0xffff; 471  loÝ = 0;†oop < 4;†oop ++) 473 üc = `ubc¥_ÿlc_üc ( ubc¥_»ûive_h—d” [ loÝ ], crc); 478  loÝ = 0;†oÝ < ubc¥_cÚfig . »ûive_šdex ;†oop ++) 480 üc = `ubc¥_ÿlc_üc ( ubc¥_cÚfig . »ûive_·ck‘ -> ·ylßd [ loÝ ], crc); 485 üc = `ubc¥_üc_»v”£ (crc); 491 ((( üc & 0xff00è>> 8è!ð ubc¥_cÚfig . »ûive_·ck‘ -> ·ylßd [ubc¥_cÚfig. »ûive_šdex ]) || 492 (( üc & 0xffè!ð ubc¥_cÚfig . »ûive_·ck‘ -> ·ylßd [ubc¥_cÚfig. »ûive_šdex + 1]) 495 #ià SHOW_PACKET_ERRORS 496 `´štf ("\n######################## CRC Error\n"); 502 ubc¥_cÚfig . £nd_ack = 1; 503  aùiv™y ; 511 ià( Ëngth !ð ubc¥_cÚfig . »ûive_šdex ) 515 #ià SHOW_PACKET_ERRORS 516 `´štf ("\n######################## Sl L’gth E¼Ü (NØCRCè%d,%d\n", Ëngth , ubc¥_cÚfig . »ûive_šdex ); 522 ubc¥_cÚfig . £nd_ack = 1; 523  aùiv™y ; 525 #ià UBCSP_CRC 533 ià( »ûive_ack !ð ubc¥_cÚfig . £qu’û_numb” ) 540 ( ubc¥_cÚfig . £nd_·ck‘ ) && 541 ( ubc¥_cÚfig . £nd_·ck‘ -> »lŸbË ) 547 ubc¥_cÚfig . £nd_·ck‘ = 0; 548 ubc¥_cÚfig . £qu’û_numb” ++; 549 ubc¥_cÚfig . d–ay = 0; 553 aùiv™y |ð UBCSP_PACKET_SENT ; 561 ià( ubc¥_cÚfig . »ûive_·ck‘ -> chªÃl == 1) 565 ubc¥_cÚfig . d–ay = 0; 570  `ubc¥_which_Ë_·ylßd ( ubc¥_cÚfig . »ûive_·ck‘ -> ·ylßd )) 576 #ià SHOW_LE_STATES 577 `´štf ("Recv SYNC\n"); 584 ià( ubc¥_cÚfig . lšk_e¡ablishm’t_¡©e < ubc¥_Ë_aùive ) 586 ubc¥_cÚfig . lšk_e¡ablishm’t_»¥ = 1; 592 #ià SHOW_LE_STATES 593 `´štf ("\n\n\n\n\nPEER RESET\n\n"); 598 `ubc¥_š™Ÿlize (); 602  UBCSP_PEER_RESET ; 611 #ià SHOW_LE_STATES 612 `´štf ("Recv SYNC RESP\n"); 617 ià( ubc¥_cÚfig . lšk_e¡ablishm’t_¡©e < ubc¥_Ë_š™Ÿlized ) 619 #ià SHOW_LE_STATES 620 `´štf ("Link Initialized\n"); 622 ubc¥_cÚfig . lšk_e¡ablishm’t_¡©e = ubc¥_Ë_š™Ÿlized ; 632 #ià SHOW_LE_STATES 633 `´štf ("Recv CONF\n"); 639 ià( ubc¥_cÚfig . lšk_e¡ablishm’t_¡©e >ð ubc¥_Ë_š™Ÿlized ) 641 ubc¥_cÚfig . lšk_e¡ablishm’t_»¥ = 2; 651 #ià SHOW_LE_STATES 652 `´štf ("Recv CONF RESP\n"); 657 ià( ubc¥_cÚfig . lšk_e¡ablishm’t_¡©e < ubc¥_Ë_aùive ) 659 #ià SHOW_LE_STATES 660 `´štf ("Link Active\n"); 663 ubc¥_cÚfig . lšk_e¡ablishm’t_¡©e = ubc¥_Ë_aùive ; 664 ubc¥_cÚfig . £nd_size = 0; 666  aùiv™y | UBCSP_PACKET_SENT ; 675 ià( ubc¥_cÚfig . »ûive_šdex ) 680 ià( ubc¥_cÚfig . lšk_e¡ablishm’t_¡©e =ð ubc¥_Ë_aùive ) 682 ià( ubc¥_cÚfig . »ûive_·ck‘ -> »lŸbË ) 687 ubc¥_cÚfig . £nd_ack = 1; 692 ià( »ûive_£q =ð ubc¥_cÚfig . ack_numb” ) 697 ubc¥_cÚfig . ack_numb” ++; 702 ubc¥_cÚfig . »ûive_·ck‘ -> Ëngth =†ength; 703 ubc¥_cÚfig . »ûive_·ck‘ = 0; 708 aùiv™y |ð UBCSP_PACKET_RECEIVED | UBCSP_PACKET_ACK ; 716 ubc¥_cÚfig . »ûive_·ck‘ -> Ëngth =†ength; 717 ubc¥_cÚfig . »ûive_·ck‘ = 0; 721 aùiv™y |ð UBCSP_PACKET_RECEIVED ; 728  aùiv™y ; 729 } } 743  $ubc¥_£tup_·ck‘ ( ušt8 * ·¹1 , ušt8 ÿlc , ušt8 * ·¹2 , ušt16 Ën2 ) 747 ià( ÿlc ) 749 ·¹1 [3] = 750 ~( ·¹1 [0] +…art1[1] +…art1[2]); 755 ubc¥_cÚfig . £nd_±r = ·¹1 ; 756 ubc¥_cÚfig . £nd_size = 4; 760 ubc¥_cÚfig . Ãxt_£nd_±r = ·¹2 ; 761 ubc¥_cÚfig . Ãxt_£nd_size = Ën2 ; 763 #ià UBCSP_CRC 766 ubc¥_cÚfig . £nd_üc = -1; 768 ubc¥_cÚfig . Ãed_£nd_üc = 1; 770 } } 781  ušt8 $ubc¥_£Á_·ck‘ () 783 ià( ubc¥_cÚfig . £nd_·ck‘ ) 785 ià(! ubc¥_cÚfig . £nd_·ck‘ -> »lŸbË ) 791 ubc¥_cÚfig . £nd_·ck‘ = 0; 795  UBCSP_PACKET_SENT ; 803 } } 829 ušt8 $ubc¥_pÞl ( ušt8 * aùiv™y ) 831 ušt8 832 d–ay = UBCSP_POLL_TIME_IMMEDIATE ; 834 ušt8 835 v®ue ; 839 * aùiv™y = 0; 843 ià(! ubc¥_cÚfig . d–ay ) 847 ià( ubc¥_cÚfig . £nd_size ) 851 ià( ubc¥_cÚfig . £nd_¦_esÿ³ ) 856 `put_u¬t ( ubc¥_cÚfig . £nd_¦_esÿ³ ); 858 ubc¥_cÚfig . £nd_¦_esÿ³ = 0; 862 #ià UBCSP_CRC 865 v®ue = * ubc¥_cÚfig . £nd_±r ++; 867 ubc¥_cÚfig . £nd_üc = `ubc¥_ÿlc_üc ( v®ue , ubcsp_config.send_crc); 871 `ubc¥_put_¦_u¬t ( v®ue ); 875 `ubc¥_put_¦_u¬t (* ubc¥_cÚfig . £nd_±r ++); 881 ià((! ubc¥_cÚfig . £nd_¦_esÿ³ è&& ((ubc¥_cÚfig. £nd_size = ubcsp_config.send_size - 1) == 0)) 887 ubc¥_cÚfig . £nd_±r = ubc¥_cÚfig. Ãxt_£nd_±r ; 888 ubc¥_cÚfig . £nd_size = ubc¥_cÚfig. Ãxt_£nd_size ; 889 ubc¥_cÚfig . Ãxt_£nd_±r = 0; 890 ubc¥_cÚfig . Ãxt_£nd_size = 0; 892 #ià UBCSP_CRC 896 ià(! ubc¥_cÚfig . £nd_±r ) 898 ià( ubc¥_cÚfig . Ãed_£nd_üc ) 902 ubc¥_cÚfig . Ãed_£nd_üc = 0; 904 ubc¥_cÚfig . £nd_üc = `ubc¥_üc_»v”£ (ubcsp_config.send_crc); 908 ubc¥_£nd_üc [0] = ( ušt8 è( ubc¥_cÚfig . £nd_üc >> 8); 909 ubc¥_£nd_üc [1] = ( ušt8 è ubc¥_cÚfig . £nd_üc ; 913 ubc¥_cÚfig . £nd_±r = ubc¥_£nd_üc ; 914 ubc¥_cÚfig . £nd_size = 2; 923 `put_u¬t ( SLIP_FRAME ); 927 * aùiv™y |ð `ubc¥_£Á_·ck‘ (); 931 d–ay = UBCSP_POLL_TIME_DELAY ; 938 ià(! ubc¥_cÚfig . £nd_±r ) 942 `put_u¬t ( SLIP_FRAME ); 946 * aùiv™y |ð `ubc¥_£Á_·ck‘ (); 950 d–ay = UBCSP_POLL_TIME_DELAY ; 955 ià( ubc¥_cÚfig . lšk_e¡ablishm’t_·ck‘ =ð ubc¥_Ë_nÚe ) 960 ià( ubc¥_cÚfig . lšk_e¡ablishm’t_»¥ & 2) 964 `put_u¬t ( SLIP_FRAME ); 968 `ubc¥_£tup_·ck‘ (( ušt8 *è ubc¥_£nd_Ë_h—d” , 0, (ušt8*è ubc¥_Ë_bufãr [ ubc¥_Ë_cÚf_»¥ ], 4); 972 ubc¥_cÚfig . lšk_e¡ablishm’t_»¥ = 0; 974 ià( ubc¥_cÚfig . £nd_·ck‘ ) 980 `put_u¬t ( SLIP_FRAME ); 984 ubc¥_£nd_h—d” [0] = 985 ( ubc¥_cÚfig . £nd_·ck‘ -> »lŸbË << 7) | 986 #ià UBCSP_CRC 989 ( ubc¥_cÚfig . ack_numb” << 3) | 990 ( ubc¥_cÚfig . £qu’û_numb” ); 993 ubc¥_£nd_h—d” [1] = 994 ( ubc¥_cÚfig . £nd_·ck‘ -> chªÃl & 0x0f) | 995 (( ubc¥_cÚfig . £nd_·ck‘ -> Ëngth << 4) & 0xf0); 997 ubc¥_£nd_h—d” [2] = 998 ( ubc¥_cÚfig . £nd_·ck‘ -> Ëngth >> 4) & 0xff; 1002 `ubc¥_£tup_·ck‘ (( ušt8 *è ubc¥_£nd_h—d” , 1, ubc¥_cÚfig . £nd_·ck‘ -> ·ylßd , ubc¥_cÚfig.£nd_·ck‘-> Ëngth ); 1006 ubc¥_cÚfig . £nd_ack = 0; 1008 #ià SHOW_PACKET_ERRORS 1009 `´štf (" : %10d Send %d Ack %d\n", 1010 `G‘TickCouÁ () % 100000, 1011 ubc¥_cÚfig . £qu’û_numb” , 1012 ubc¥_cÚfig . ack_numb” ); 1015 ià( ubc¥_cÚfig . £nd_ack ) 1019 `put_u¬t ( SLIP_FRAME ); 1021 #ià SHOW_PACKET_ERRORS 1022 `´štf (" : %10d Send ACK %d\n", 1023 `G‘TickCouÁ () % 100000, 1024 ubc¥_cÚfig . ack_numb” ); 1029 ubc¥_£nd_ack_h—d” [0] = 1030 #ià UBCSP_CRC 1033 ( ubc¥_cÚfig . ack_numb” << 3); 1037 `ubc¥_£tup_·ck‘ ( ubc¥_£nd_ack_h—d” , 1, 0, 0); 1041 ubc¥_cÚfig . £nd_ack = 0; 1048 d–ay = UBCSP_POLL_TIME_DELAY ; 1053 #ià SHOW_PACKET_ERRORS 1061 `put_u¬t ( SLIP_FRAME ); 1066 `ubc¥_£tup_·ck‘ (( ušt8 *è ubc¥_£nd_Ë_h—d” , 0, (ušt8*è ubc¥_Ë_bufãr [ ubc¥_cÚfig . lšk_e¡ablishm’t_·ck‘ ], 4); 1070 ubc¥_cÚfig . d–ay = 0; 1074 ubc¥_cÚfig . lšk_e¡ablishm’t_·ck‘ = Ãxt_Ë_·ck‘ [ubc¥_cÚfig. lšk_e¡ablishm’t_¡©e + ubc¥_cÚfig. lšk_e¡ablishm’t_»¥ * 4]; 1078 ubc¥_cÚfig . lšk_e¡ablishm’t_»¥ = 0; 1086 ( ubc¥_cÚfig . »ûive_·ck‘ è&& ( `g‘_u¬t (& v®ue ))) 1090 ià( ubc¥_cÚfig . »ûive_¦_esÿ³ ) 1095 v®ue = ubc¥_de¦ [v®u- SLIP_ESCAPE_FRAME ]; 1097 ubc¥_cÚfig . »ûive_¦_esÿ³ = 0; 1102 ià( v®ue =ð SLIP_FRAME ) 1106 ià( ubc¥_cÚfig . »ûive_šdex >= 0) 1110 * aùiv™y |ð `ubc¥_»ûv›d_·ck‘ (); 1112 ià(* aùiv™y & UBCSP_PACKET_ACK ) 1115 ubc¥_cÚfig . d–ay = 0; 1121 ubc¥_cÚfig . »ûive_šdex = -4; 1125  fšished_»ûive ; 1127 ià( v®ue =ð SLIP_ESCAPE ) 1132 ubc¥_cÚfig . »ûive_¦_esÿ³ = 1; 1134  fšished_»ûive ; 1138 ià( ubc¥_cÚfig . »ûive_šdex < 0) 1142 ubc¥_»ûive_h—d” [ ubc¥_cÚfig . »ûive_šdex + 4] = v®ue ; 1144 ubc¥_cÚfig . »ûive_šdex ++; 1146 ià( ubc¥_cÚfig . »ûive_šdex < ubc¥_cÚfig. »ûive_·ck‘ -> Ëngth ) 1153 ubc¥_cÚfig . »ûive_·ck‘ -> ·ylßd [ubc¥_cÚfig. »ûive_šdex ] = v®ue ; 1155 ubc¥_cÚfig . »ûive_šdex ++; 1158 fšished_»ûive : 1163 ià( ubc¥_cÚfig . d–ay > 0) 1168 ubc¥_cÚfig . d–ay --; 1174 ubc¥_cÚfig . d–ay = delay; 1179  ubc¥_cÚfig . d–ay ; 1180 } } @tools/ubcsp.h 29 #iâdeà UBCSP_INCLUDE_H 30  #UBCSP_INCLUDE_H ) 43  #UBCSP_CRC 1 ) 46  tušt8 ; 47  tušt16 ; 48  tušt32 ; 49 sigÃd  tšt8 ; 50 sigÃd  tšt16 ; 51 sigÃd  tšt32 ; 56  #SHOW_PACKET_ERRORS 0 ) 59  #SHOW_LE_STATES 0 ) 69  subc¥_·ck‘ 71 ušt8 mchªÃl ; 72 ušt8 m»lŸbË ; 73 ušt8 mu£_üc ; 74 ušt16 mËngth ; 75 ušt8 * m·ylßd ; 87 eubc¥_lšk_e¡ablishm’t_¡©e 89 mubc¥_Ë_unš™Ÿlized , 90 mubc¥_Ë_š™Ÿlized , 91 mubc¥_Ë_aùive 94 eubc¥_lšk_e¡ablishm’t_·ck‘ 96 mubc¥_Ë_sync , 97 mubc¥_Ë_sync_»¥ , 98 mubc¥_Ë_cÚf , 99 mubc¥_Ë_cÚf_»¥ , 100 mubc¥_Ë_nÚe 103  subc¥_cÚfigu¿tiÚ 105 ušt8 mlšk_e¡ablishm’t_¡©e ; 106 ušt8 mlšk_e¡ablishm’t_»¥ ; 107 ušt8 mlšk_e¡ablishm’t_·ck‘ ; 109 ušt8 m£qu’û_numb” :3; 110 ušt8 mack_numb” :3; 111 ušt8 m£nd_ack ; 112  ubc¥_·ck‘ * m£nd_·ck‘ ; 113  ubc¥_·ck‘ * m»ûive_·ck‘ ; 115 ušt8 m»ûive_h—d”_checksum ; 116 ušt8 m»ûive_¦_esÿ³ ; 117 št32 m»ûive_šdex ; 119 ušt8 m£nd_h—d”_checksum ; 120 #ifdeà UBCSP_CRC 121 ušt8 mÃed_£nd_üc ; 122 ušt16 m£nd_üc ; 124 ušt8 m£nd_¦_esÿ³ ; 126 ušt8 * m£nd_±r ; 127 št32 m£nd_size ; 128 ušt8 * mÃxt_£nd_±r ; 129 št32 mÃxt_£nd_size ; 131 št8 md–ay ; 140  #UBCSP_PACKET_SENT 0x01 ) 141  #UBCSP_PACKET_RECEIVED 0x02 ) 142  #UBCSP_PEER_RESET 0x04 ) 143  #UBCSP_PACKET_ACK 0x08 ) 151  ubc¥_š™Ÿlize (); 152  ubc¥_£nd_·ck‘ ( ubc¥_·ck‘ * £nd_·ck‘ ); 153  ubc¥_»ûive_·ck‘ ( ubc¥_·ck‘ * »ûive_·ck‘ ); 154 ušt8 ubc¥_pÞl (ušt8 * aùiv™y ); 162  #SLIP_FRAME 0xC0 ) 163  #SLIP_ESCAPE 0xDB ) 164  #SLIP_ESCAPE_FRAME 0xDC ) 165  #SLIP_ESCAPE_ESCAPE 0xDD ) 183  put_u¬t ( ušt8 ); 194 ušt8 g‘_u¬t (uint8 *); 202  #UBCSP_POLL_TIME_IMMEDIATE 0 ) 203  #UBCSP_POLL_TIME_DELAY 25 ) @unit/test-avctp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~<¡dlib.h > 30  ~<¡dboÞ.h > 31  ~<š‰y³s.h > 32  ~<¡ršg.h > 33  ~ 34  ~ 36  ~ 38  ~"¤c/sh¬ed/utž.h " 39  ~"¤c/log.h " 41  ~"ªdroid/avùp.h " 43  s‹¡_pdu { 44 boÞ mv®id ; 45 cÚ¡ ušt8_t * md©a ; 46 size_t msize ; 49  s‹¡_d©a { 50 * m‹¡_Çme ; 51  ‹¡_pdu * mpdu_li¡ ; 54  scÚ‹xt { 55 GMašLoÝ * mmaš_loÝ ; 56  avùp * m£ssiÚ ; 57 gušt msourû ; 58 gušt m´oûss ; 59  mfd ; 60  mpdu_off£t ; 61 cÚ¡  ‹¡_d©a * md©a ; 64  #d©a ( ¬gs ...è((cÚ¡ []è{‡rg }) ) 66  #¿w_pdu ( ¬gs ...) \ 68 . v®id = Œue , \ 69 . d©a = `d©a ( ¬gs ), \ 70 . size = ( `d©a ( ¬gs )), \ 71 } ) 73  #defše_‹¡ ( Çme , funùiÚ , ¬gs ...) \ 75 cÚ¡  ‹¡_pdu pdus [] = { \ 76 ¬gs , { } \ 78  ‹¡_d©a d©a ; \ 79 d©a . ‹¡_Çme = `g_¡rdup ( Çme ); \ 80 d©a . pdu_li¡ = `g_m®loc (( pdus )); \ 81 `memýy ( d©a . pdu_li¡ , pdus , (pdus)); \ 82 `g_‹¡_add_d©a_func ( Çme , & d©a , funùiÚ ); \ 83 } 0) ) 85  $‹¡_debug (cÚ¡ * ¡r , * u£r_d©a ) 87 cÚ¡ * ´efix = u£r_d©a ; 89 `g_´št ("%s%s\n", ´efix , ¡r ); 90 } } 92  $‹¡_ä“ ( gcÚ¡poš‹r u£r_d©a ) 94 cÚ¡  ‹¡_d©a * d©a = u£r_d©a ; 96 `g_ä“ ( d©a -> ‹¡_Çme ); 97 `g_ä“ ( d©a -> pdu_li¡ ); 98 } } 100  gboÞ—n $cÚ‹xt_qu™ ( gpoš‹r u£r_d©a ) 102  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 104 ià( cÚ‹xt -> ´oûss > 0) 105 `g_sourû_»move ( cÚ‹xt -> ´oûss ); 107 `g_maš_loÝ_qu™ ( cÚ‹xt -> maš_loÝ ); 109  FALSE ; 110 } } 112  gboÞ—n $£nd_pdu ( gpoš‹r u£r_d©a ) 114  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 115 cÚ¡  ‹¡_pdu * pdu ; 116 ssize_t Ën ; 118 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 120 Ën = `wr™e ( cÚ‹xt -> fd , pdu -> d©a ,…du-> size ); 122 ià( `g_‹¡_v”bo£ ()) 123 `utž_hexdump ('<', pdu -> d©a , Ën , ‹¡_debug , "AVCTP: "); 125 `g_as£¹_cmpšt ( Ën , ==, pdu -> size ); 127 cÚ‹xt -> ´oûss = 0; 128  FALSE ; 129 } } 131  $cÚ‹xt_´oûss ( cÚ‹xt *context) 133 ià(! cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ]. v®id ) { 134 `cÚ‹xt_qu™ ( cÚ‹xt ); 138 cÚ‹xt -> ´oûss = `g_idË_add ( £nd_pdu , context); 139 } } 141  gboÞ—n $‹¡_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 142 gpoš‹r u£r_d©a ) 144  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 145 cÚ¡  ‹¡_pdu * pdu ; 146  buf [512]; 147 ssize_t Ën ; 148  fd ; 150 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 152 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 153 cÚ‹xt -> sourû = 0; 154 `g_´št ("%s: cÚd %x\n", __func__ , cÚd ); 155  FALSE ; 158 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 160 Ën = `»ad ( fd , buf , (buf)); 162 `g_as£¹ ( Ën > 0); 164 ià( `g_‹¡_v”bo£ ()) 165 `utž_hexdump ('>', buf , Ën , ‹¡_debug , "AVCTP: "); 167 `g_as£¹_cmpšt ( Ën , ==, pdu -> size ); 169 `g_as£¹ ( `memcmp ( buf , pdu -> d©a ,…du-> size ) == 0); 171 `cÚ‹xt_´oûss ( cÚ‹xt ); 173  TRUE ; 174 } } 176  cÚ‹xt * $ü—‹_cÚ‹xt ( ušt16_t v”siÚ , gcÚ¡poš‹r d©a ) 178  cÚ‹xt *cÚ‹xˆð `g_Ãw0 (context, 1); 179 GIOChªÃl * chªÃl ; 180  ”r , sv [2]; 182 cÚ‹xt -> maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 183 `g_as£¹ ( cÚ‹xt -> maš_loÝ ); 185 ”r = `sock‘·œ ( AF_UNIX , SOCK_SEQPACKET | SOCK_CLOEXEC , 0, sv ); 186 `g_as£¹ ( ”r == 0); 188 cÚ‹xt -> £ssiÚ = `avùp_Ãw ( sv [0], 672, 672, v”siÚ ); 189 `g_as£¹ ( cÚ‹xt -> £ssiÚ !ð NULL ); 191 chªÃl = `g_io_chªÃl_unix_Ãw ( sv [1]); 193 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 194 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 195 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 197 cÚ‹xt -> sourû = `g_io_add_w©ch ( chªÃl , 198 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 199 ‹¡_hªdËr , cÚ‹xt ); 200 `g_as£¹ ( cÚ‹xt -> sourû > 0); 202 `g_io_chªÃl_uÄef ( chªÃl ); 204 cÚ‹xt -> fd = sv [1]; 205 cÚ‹xt -> d©a = data; 207  cÚ‹xt ; 208 } } 210  $de¡roy_cÚ‹xt ( cÚ‹xt *context) 212 ià( cÚ‹xt -> sourû > 0) 213 `g_sourû_»move ( cÚ‹xt -> sourû ); 215 `avùp_shutdown ( cÚ‹xt -> £ssiÚ ); 217 `g_maš_loÝ_uÄef ( cÚ‹xt -> maš_loÝ ); 219 `‹¡_ä“ ( cÚ‹xt -> d©a ); 220 `g_ä“ ( cÚ‹xt ); 221 } } 223  $execu‹_cÚ‹xt ( cÚ‹xt *context) 225 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 227 `de¡roy_cÚ‹xt ( cÚ‹xt ); 228 } } 230  ssize_t $hªdËr ( avùp * £ssiÚ , 231 ušt8_t Œª§ùiÚ , ušt8_ˆ* code , 232 ušt8_t * subun™ , ušt8_ˆ* Ý”ªds , 233 size_t Ý”ªd_couÁ , * u£r_d©a ) 235 `DBG ("transaction %d code %d subunit %d operand_count %zu", 236 Œª§ùiÚ , * code , * subun™ , Ý”ªd_couÁ ); 238 `g_as£¹_cmpšt ( Œª§ùiÚ , ==, 0); 239 `g_as£¹_cmpšt (* code , ==, 0); 240 `g_as£¹_cmpšt (* subun™ , ==, 0); 241 `g_as£¹_cmpšt ( Ý”ªd_couÁ , ==, 0); 243  Ý”ªd_couÁ ; 244 } } 246  gboÞ—n $hªdËr_»¥Ú£ ( avùp * £ssiÚ , 247 ušt8_t code , ušt8_ˆ subun™ , 248 ušt8_t * Ý”ªds , size_t Ý”ªd_couÁ , 249 * u£r_d©a ) 251  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 253 `DBG ("cod0x%02x subun™ %d o³¿nd_couÁ %zu", code , subun™ , 254 Ý”ªd_couÁ ); 256 `g_as£¹_cmpšt ( code , ==, 0x0a); 257 `g_as£¹_cmpšt ( subun™ , ==, 0); 258 `g_as£¹_cmpšt ( Ý”ªd_couÁ , ==, 0); 260  `cÚ‹xt_qu™ ( cÚ‹xt ); 261 } } 263  $‹¡_þ›Á ( gcÚ¡poš‹r d©a ) 265  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (0x0100, d©a ); 267 `avùp_£nd_v’dÜ_»q ( cÚ‹xt -> £ssiÚ , AVC_CTYPE_CONTROL , 0, NULL , 268 0, hªdËr_»¥Ú£ , cÚ‹xt ); 270 `execu‹_cÚ‹xt ( cÚ‹xt ); 271 } } 273  $‹¡_£rv” ( gcÚ¡poš‹r d©a ) 275  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (0x0100, d©a ); 277 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/NFR/BV-03-C")) { 278  »t ; 280 »t = `avùp_»gi¡”_pdu_hªdËr ( cÚ‹xt -> £ssiÚ , 281 AVC_OP_VENDORDEP , hªdËr , NULL ); 282 `DBG ("»ˆ%d", »t ); 283 `g_as£¹_cmpšt ( »t , !=, 0); 286 `g_idË_add ( £nd_pdu , cÚ‹xt ); 288 `execu‹_cÚ‹xt ( cÚ‹xt ); 289 } } 291  $‹¡_dummy ( gcÚ¡poš‹r d©a ) 293  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (0x0100, d©a ); 295 `de¡roy_cÚ‹xt ( cÚ‹xt ); 296 } } 298  $maš ( ¬gc , * ¬gv []) 300 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 302 ià( `g_‹¡_v”bo£ ()) 303 `__btd_log_š™ ("*", 0); 312 `defše_‹¡ ("/TP/CCM/BV-01-C", ‹¡_dummy , `¿w_pdu (0x00)); 313 `defše_‹¡ ("/TP/CCM/BV-02-C", ‹¡_dummy , `¿w_pdu (0x00)); 314 `defše_‹¡ ("/TP/CCM/BV-03-C", ‹¡_dummy , `¿w_pdu (0x00)); 315 `defše_‹¡ ("/TP/CCM/BV-04-C", ‹¡_dummy , `¿w_pdu (0x00)); 319 `defše_‹¡ ("/TP/NFR/BV-01-C", ‹¡_þ›Á , 320 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x00, 0x00)); 322 `defše_‹¡ ("/TP/NFR/BV-02-C", ‹¡_£rv” , 323 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x00, 0x00), 324 `¿w_pdu (0x02, 0x11, 0x0e, 0x0a, 0x00, 0x00)); 326 `defše_‹¡ ("/TP/NFR/BV-03-C", ‹¡_£rv” , 327 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x00, 0x00), 328 `¿w_pdu (0x02, 0x11, 0x0e, 0x00, 0x00, 0x00)); 330 `defše_‹¡ ("/TP/NFR/BV-04-C", ‹¡_þ›Á , 331 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x00, 0x00), 332 `¿w_pdu (0x02, 0x11, 0x0e, 0x0a, 0x00, 0x00)); 334 `defše_‹¡ ("/TP/NFR/BI-01-C", ‹¡_£rv” , 335 `¿w_pdu (0x00, 0xff, 0xff, 0x00, 0x00, 0x00), 336 `¿w_pdu (0x03, 0xff, 0xff)); 338  `g_‹¡_run (); 339 } } @unit/test-avdtp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~<¡dlib.h > 30  ~<¡dboÞ.h > 31  ~<š‰y³s.h > 32  ~<¡ršg.h > 33  ~ 34  ~ 36  ~ 38  ~"¤c/sh¬ed/utž.h " 39  ~"¤c/log.h " 40  ~"ªdroid/avd.h " 42  s‹¡_pdu { 43 boÞ mv®id ; 44 boÞ mäagm’‹d ; 45 cÚ¡ ušt8_t * md©a ; 46 size_t msize ; 49  s‹¡_d©a { 50 * m‹¡_Çme ; 51  ‹¡_pdu * mpdu_li¡ ; 54  #d©a ( ¬gs ...è((cÚ¡ []è{‡rg }) ) 56  #¿w_pdu ( ¬gs ...) \ 58 . v®id = Œue , \ 59 . d©a = `d©a ( ¬gs ), \ 60 . size = ( `d©a ( ¬gs )), \ 61 } ) 63  #äg_pdu ( ¬gs ...) \ 65 . v®id = Œue , \ 66 . äagm’‹d = Œue , \ 67 . d©a = `d©a ( ¬gs ), \ 68 . size = ( `d©a ( ¬gs )), \ 69 } ) 71  #defše_‹¡ ( Çme , funùiÚ , ¬gs ...) \ 73 cÚ¡  ‹¡_pdu pdus [] = { \ 74 ¬gs , { } \ 76  ‹¡_d©a d©a ; \ 77 d©a . ‹¡_Çme = `g_¡rdup ( Çme ); \ 78 d©a . pdu_li¡ = `g_m®loc (( pdus )); \ 79 `memýy ( d©a . pdu_li¡ , pdus , (pdus)); \ 80 `g_‹¡_add_d©a_func ( Çme , & d©a , funùiÚ ); \ 81 } 0) ) 83  scÚ‹xt { 84 GMašLoÝ * mmaš_loÝ ; 85  avd * m£ssiÚ ; 86  avd_loÿl_£p * m£p ; 87  avd_¡»am * m¡»am ; 88 gušt msourû ; 89 gušt m´oûss ; 90  mfd ; 91  mmtu ; 92 gboÞ—n m³ndšg_Ý’ ; 93 gboÞ—n m³ndšg_su¥’d ; 94  mpdu_off£t ; 95 cÚ¡  ‹¡_d©a * md©a ; 98  $‹¡_debug (cÚ¡ * ¡r , * u£r_d©a ) 100 cÚ¡ * ´efix = u£r_d©a ; 102 `g_´št ("%s%s\n", ´efix , ¡r ); 103 } } 105  $‹¡_ä“ ( gcÚ¡poš‹r u£r_d©a ) 107 cÚ¡  ‹¡_d©a * d©a = u£r_d©a ; 109 `g_ä“ ( d©a -> ‹¡_Çme ); 110 `g_ä“ ( d©a -> pdu_li¡ ); 111 } } 113  gboÞ—n $cÚ‹xt_qu™ ( gpoš‹r u£r_d©a ) 115  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 117 ià( cÚ‹xt -> ´oûss > 0) 118 `g_sourû_»move ( cÚ‹xt -> ´oûss ); 120 `g_maš_loÝ_qu™ ( cÚ‹xt -> maš_loÝ ); 122  FALSE ; 123 } } 125  gboÞ—n $£nd_pdu ( gpoš‹r u£r_d©a ) 127  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 128 cÚ¡  ‹¡_pdu * pdu ; 129 ssize_t Ën ; 131 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 133 Ën = `wr™e ( cÚ‹xt -> fd , pdu -> d©a ,…du-> size ); 135 ià( `g_‹¡_v”bo£ ()) 136 `utž_hexdump ('<', pdu -> d©a , Ën , ‹¡_debug , "AVDTP: "); 138 `g_as£¹_cmpšt ( Ën , ==, pdu -> size ); 140 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-02-C")) 141 `g_timeout_add_£cÚds (1, cÚ‹xt_qu™ , cÚ‹xt ); 143 ià( pdu -> äagm’‹d ) 144  `£nd_pdu ( u£r_d©a ); 146 cÚ‹xt -> ´oûss = 0; 147  FALSE ; 148 } } 150  $cÚ‹xt_´oûss ( cÚ‹xt *context) 152 ià(! cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ]. v®id ) { 153 `cÚ‹xt_qu™ ( cÚ‹xt ); 157 cÚ‹xt -> ´oûss = `g_idË_add ( £nd_pdu , context); 158 } } 160  gboÞ—n $Œª¥Üt_Ý’ ( avd_¡»am * ¡»am ) 162  fd ; 164 fd = `Ý’ ("/dev/nuÎ", O_RDWR , 0); 165 ià( fd < 0) 166 `g_as£¹_nÙ_»ached (); 168  `avd_¡»am_£t_Œª¥Üt ( ¡»am , fd , 672, 672); 169 } } 171  gboÞ—n $‹¡_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 172 gpoš‹r u£r_d©a ) 174  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 175 cÚ¡  ‹¡_pdu * pdu ; 176  buf [512]; 177 ssize_t Ën ; 178  fd ; 180 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 182 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 183 cÚ‹xt -> sourû = 0; 184  FALSE ; 187 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 189 Ën = `»ad ( fd , buf , (buf)); 191 `g_as£¹ ( Ën > 0); 193 ià( `g_‹¡_v”bo£ ()) 194 `utž_hexdump ('>', buf , Ën , ‹¡_debug , "AVDTP: "); 196 `g_as£¹_cmpšt ( Ën , ==, pdu -> size ); 198 `g_as£¹ ( `memcmp ( buf , pdu -> d©a ,…du-> size ) == 0); 200 ià( cÚ‹xt -> ³ndšg_Ý’ ) { 201 cÚ‹xt -> ³ndšg_Ý’ = FALSE ; 202 `g_as£¹ ( `Œª¥Üt_Ý’ ( cÚ‹xt -> ¡»am )); 205 ià( cÚ‹xt -> ³ndšg_su¥’d ) { 206  »t ; 208 cÚ‹xt -> ³ndšg_su¥’d = FALSE ; 209 »t = `avd_su¥’d ( cÚ‹xt -> £ssiÚ , cÚ‹xt-> ¡»am ); 210 `g_as£¹_cmpšt ( »t , ==, 0); 213 ià(! pdu -> äagm’‹d ) 214 `cÚ‹xt_´oûss ( cÚ‹xt ); 216  TRUE ; 217 } } 219  cÚ‹xt * $cÚ‹xt_Ãw ( ušt16_t v”siÚ , ušt16_ˆ imtu , 220 ušt16_t omtu , gcÚ¡poš‹r d©a ) 222  cÚ‹xt *cÚ‹xˆð `g_Ãw0 (context, 1); 223 GIOChªÃl * chªÃl ; 224  ”r , sv [2]; 226 cÚ‹xt -> maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 227 `g_as£¹ ( cÚ‹xt -> maš_loÝ ); 229 ”r = `sock‘·œ ( AF_UNIX , SOCK_SEQPACKET | SOCK_CLOEXEC , 0, sv ); 230 `g_as£¹ ( ”r == 0); 232 cÚ‹xt -> £ssiÚ = `avd_Ãw ( sv [0], imtu , omtu , v”siÚ ); 233 `g_as£¹ ( cÚ‹xt -> £ssiÚ !ð NULL ); 235 chªÃl = `g_io_chªÃl_unix_Ãw ( sv [1]); 237 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 238 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 239 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 241 cÚ‹xt -> sourû = `g_io_add_w©ch ( chªÃl , 242 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 243 ‹¡_hªdËr , cÚ‹xt ); 244 `g_as£¹ ( cÚ‹xt -> sourû > 0); 246 `g_io_chªÃl_uÄef ( chªÃl ); 248 cÚ‹xt -> fd = sv [1]; 249 cÚ‹xt -> d©a = data; 251  cÚ‹xt ; 252 } } 254  cÚ‹xt * $ü—‹_cÚ‹xt ( ušt16_t v”siÚ , gcÚ¡poš‹r d©a ) 256  `cÚ‹xt_Ãw ( v”siÚ , 672, 672, d©a ); 257 } } 259  $execu‹_cÚ‹xt ( cÚ‹xt *context) 261 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 263 ià( cÚ‹xt -> sourû > 0) 264 `g_sourû_»move ( cÚ‹xt -> sourû ); 265 `avd_uÄef ( cÚ‹xt -> £ssiÚ ); 267 `g_maš_loÝ_uÄef ( cÚ‹xt -> maš_loÝ ); 269 `‹¡_ä“ ( cÚ‹xt -> d©a ); 270 `g_ä“ ( cÚ‹xt ); 271 } } 273  gboÞ—n $£p_g‘ÿp_šd ( avd * £ssiÚ , 274  avd_loÿl_£p * £p , 275 GSLi¡ ** ÿps , ušt8_t * ”r , 276 * u£r_d©a ) 278  avd_£rviû_ÿ·bž™y * medŸ_Œª¥Üt , * medŸ_codec ; 279  avd_medŸ_codec_ÿ·bž™y * codec_ÿps ; 280 ušt8_t ÿp [4] = { 0xff, 0xff, 2, 64 }; 282 * ÿps = NULL ; 284 medŸ_Œª¥Üt = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_TRANSPORT , 285 NULL , 0); 287 * ÿps = `g_¦i¡_­³nd (*ÿps, medŸ_Œª¥Üt ); 289 codec_ÿps = `g_m®loc0 ((*codec_ÿpsè+ ( ÿp )); 290 codec_ÿps -> medŸ_ty³ = AVDTP_MEDIA_TYPE_AUDIO ; 291 codec_ÿps -> medŸ_codec_ty³ = 0x00; 292 `memýy ( codec_ÿps -> d©a , ÿp , (cap)); 294 medŸ_codec = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_CODEC , codec_ÿps , 295 (* codec_ÿps è+ ( ÿp )); 297 * ÿps = `g_¦i¡_­³nd (*ÿps, medŸ_codec ); 298 `g_ä“ ( codec_ÿps ); 300  TRUE ; 301 } } 303  gboÞ—n $£p_Ý’_šd ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 304  avd_¡»am * ¡»am , ušt8_t * ”r , 305 * u£r_d©a ) 307  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 309 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-18-C")) { 310 * ”r = 0xc0; 311  FALSE ; 314 cÚ‹xt -> ³ndšg_Ý’ = TRUE ; 315 cÚ‹xt -> ¡»am = stream; 317  TRUE ; 318 } } 320  gboÞ—n $£p_£tcÚf_šd ( avd * £ssiÚ , 321  avd_loÿl_£p * £p , 322  avd_¡»am * ¡»am , 323 GSLi¡ * ÿps , 324 avd_£t_cÚfigu¿tiÚ_cb cb , 325 * u£r_d©a ) 327  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 329 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-09-C")) 330  FALSE ; 332 `cb ( £ssiÚ , ¡»am , NULL ); 334  TRUE ; 335 } } 337  gboÞ—n $£p_¡¬t_šd ( avd * £ssiÚ , 338  avd_loÿl_£p * £p , 339  avd_¡»am * ¡»am , 340 ušt8_t * ”r , 341 * u£r_d©a ) 343  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 345 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-21-C")) { 346 * ”r = 0xc0; 347  FALSE ; 350 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-25-C")) 351 cÚ‹xt -> ³ndšg_su¥’d = TRUE ; 353  TRUE ; 354 } } 356  gboÞ—n $£p_þo£_šd ( avd * £ssiÚ , 357  avd_loÿl_£p * £p , 358  avd_¡»am * ¡»am , 359 ušt8_t * ”r , 360 * u£r_d©a ) 362  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 364 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-24-C")) { 365 * ”r = 0xc0; 366  FALSE ; 369  TRUE ; 370 } } 372  gboÞ—n $£p_su¥’d_šd ( avd * £ssiÚ , 373  avd_loÿl_£p * £p , 374  avd_¡»am * ¡»am , 375 ušt8_t * ”r , 376 * u£r_d©a ) 378  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 380 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-27-C")) { 381 * ”r = 0xc0; 382  FALSE ; 385  TRUE ; 386 } } 388  avd_£p_šd g£p_šd = { 389 . g‘_ÿ·bž™y = £p_g‘ÿp_šd , 390 . g£t_cÚfigu¿tiÚ = £p_£tcÚf_šd , 391 . gÝ’ = £p_Ý’_šd , 392 . gþo£ = £p_þo£_šd , 393 . g¡¬t = £p_¡¬t_šd , 394 . gsu¥’d = £p_su¥’d_šd , 397  $£p_£tcÚf_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 398  avd_¡»am * ¡»am , 399  avd_”rÜ * ”r , * u£r_d©a ) 401  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 402  »t ; 404 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-07-C")) { 405 `g_as£¹ ( ”r !ð NULL ); 406 `g_as£¹_cmpšt ( `avd_”rÜ_”rÜ_code ( ”r ), ==, 0x13); 407 `cÚ‹xt_qu™ ( cÚ‹xt ); 411 `g_as£¹ ( ”r =ð NULL ); 413 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BV-11-C") || 414 `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-10-C")) 415 »t = `avd_g‘_cÚfigu¿tiÚ ( £ssiÚ , ¡»am ); 416 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BV-23-C")) 417 »t = `avd_abÜt ( £ssiÚ , ¡»am ); 419 »t = `avd_Ý’ ( £ssiÚ , ¡»am ); 421 `g_as£¹_cmpšt ( »t , ==, 0); 422 } } 424  $£p_g‘cÚf_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 425  avd_¡»am * ¡»am , 426  avd_”rÜ * ”r , * u£r_d©a ) 428  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 430 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-10-C")) { 431 `g_as£¹ ( ”r !ð NULL ); 432 `g_as£¹_cmpšt ( `avd_”rÜ_”rÜ_code ( ”r ), ==, 0x12); 434 `g_as£¹ ( ”r =ð NULL ); 436 `cÚ‹xt_qu™ ( cÚ‹xt ); 437 } } 439  $£p_Ý’_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 440  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 441 * u£r_d©a ) 443  »t ; 445 `g_as£¹ ( ”r =ð NULL ); 447 `g_as£¹ ( `Œª¥Üt_Ý’ ( ¡»am )); 449 »t = `avd_¡¬t ( £ssiÚ , ¡»am ); 450 `g_as£¹_cmpšt ( »t , ==, 0); 451 } } 453  $£p_¡¬t_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 454  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 455 * u£r_d©a ) 457  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 458  »t ; 460 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-19-C") || 461 `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-22-C")) { 462 `g_as£¹ ( ”r !ð NULL ); 463 `g_as£¹_cmpšt ( `avd_”rÜ_”rÜ_code ( ”r ), ==, 0x31); 464 `cÚ‹xt_qu™ ( cÚ‹xt ); 468 `g_as£¹ ( ”r =ð NULL ); 470 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BV-19-C")) 471 »t = `avd_þo£ ( £ssiÚ , ¡»am , FALSE ); 473 »t = `avd_su¥’d ( £ssiÚ , ¡»am ); 475 `g_as£¹_cmpšt ( »t , ==, 0); 476 } } 478  $£p_su¥’d_cfm ( avd * £ssiÚ ,  avd_loÿl_£p * £p , 479  avd_¡»am * ¡»am ,  avd_”rÜ * ”r , 480 * u£r_d©a ) 482  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 484 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-25-C")) { 485 `g_as£¹ ( ”r !ð NULL ); 486 `g_as£¹_cmpšt ( `avd_”rÜ_”rÜ_code ( ”r ), ==, 0x31); 487 `cÚ‹xt_qu™ ( cÚ‹xt ); 489 } } 491  avd_£p_cfm g£p_cfm = { 492 . £t_cÚfigu¿tiÚ = £p_£tcÚf_cfm , 493 . gg‘_cÚfigu¿tiÚ = £p_g‘cÚf_cfm , 494 . gÝ’ = £p_Ý’_cfm , 495 . g¡¬t = £p_¡¬t_cfm , 496 . gsu¥’d = £p_su¥’d_cfm , 499  $‹¡_£rv” ( gcÚ¡poš‹r d©a ) 501  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (0x0100, d©a ); 502  avd_loÿl_£p * £p ; 504 £p = `avd_»gi¡”_£p ( AVDTP_SEP_TYPE_SOURCE , AVDTP_MEDIA_TYPE_AUDIO , 505 0x00, FALSE , & £p_šd , & £p_cfm , 506 cÚ‹xt ); 508 `g_idË_add ( £nd_pdu , cÚ‹xt ); 510 `execu‹_cÚ‹xt ( cÚ‹xt ); 512 `avd_uÄegi¡”_£p ( £p ); 513 } } 515  $‹¡_£rv”_1_3 ( gcÚ¡poš‹r d©a ) 517  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (0x0103, d©a ); 518  avd_loÿl_£p * £p ; 520 £p = `avd_»gi¡”_£p ( AVDTP_SEP_TYPE_SOURCE , AVDTP_MEDIA_TYPE_AUDIO , 521 0x00, TRUE , & £p_šd , NULL , cÚ‹xt ); 523 `g_idË_add ( £nd_pdu , cÚ‹xt ); 525 `execu‹_cÚ‹xt ( cÚ‹xt ); 527 `avd_uÄegi¡”_£p ( £p ); 528 } } 530  $‹¡_£rv”_1_3_sšk ( gcÚ¡poš‹r d©a ) 532  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (0x0103, d©a ); 533  avd_loÿl_£p * £p ; 535 £p = `avd_»gi¡”_£p ( AVDTP_SEP_TYPE_SINK , AVDTP_MEDIA_TYPE_AUDIO , 536 0x00, TRUE , & £p_šd , NULL , cÚ‹xt ); 538 `g_idË_add ( £nd_pdu , cÚ‹xt ); 540 `execu‹_cÚ‹xt ( cÚ‹xt ); 542 `avd_uÄegi¡”_£p ( £p ); 543 } } 545  $‹¡_£rv”_0_£p ( gcÚ¡poš‹r d©a ) 547  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (0x0100, d©a ); 549 `g_idË_add ( £nd_pdu , cÚ‹xt ); 551 `execu‹_cÚ‹xt ( cÚ‹xt ); 552 } } 554  gboÞ—n $£p_g‘ÿp_šd_äg ( avd * £ssiÚ , 555  avd_loÿl_£p * £p , 556 GSLi¡ ** ÿps , ušt8_t * ”r , 557 * u£r_d©a ) 559  avd_£rviû_ÿ·bž™y * medŸ_Œª¥Üt , * medŸ_codec ; 560  avd_£rviû_ÿ·bž™y * cÚ‹Á_´ÙeùiÚ ; 561  avd_medŸ_codec_ÿ·bž™y * codec_ÿps ; 562 ušt8_t ÿp [4] = { 0xff, 0xff, 2, 64 }; 563 ušt8_t äg_ÿp [96] = {}; 565 * ÿps = NULL ; 567 medŸ_Œª¥Üt = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_TRANSPORT , 568 NULL , 0); 570 * ÿps = `g_¦i¡_­³nd (*ÿps, medŸ_Œª¥Üt ); 572 codec_ÿps = `g_m®loc0 ((*codec_ÿpsè+ ( ÿp )); 573 codec_ÿps -> medŸ_ty³ = AVDTP_MEDIA_TYPE_AUDIO ; 574 codec_ÿps -> medŸ_codec_ty³ = 0x00; 575 `memýy ( codec_ÿps -> d©a , ÿp , (cap)); 577 medŸ_codec = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_CODEC , codec_ÿps , 578 (* codec_ÿps è+ ( ÿp )); 580 * ÿps = `g_¦i¡_­³nd (*ÿps, medŸ_codec ); 581 `g_ä“ ( codec_ÿps ); 583 cÚ‹Á_´ÙeùiÚ = `avd_£rviû_ÿp_Ãw ( AVDTP_CONTENT_PROTECTION , 584 äg_ÿp , (frg_cap)); 585 * ÿps = `g_¦i¡_­³nd (*ÿps, cÚ‹Á_´ÙeùiÚ ); 587  TRUE ; 588 } } 590  avd_£p_šd g£p_šd_äg = { 591 . g‘_ÿ·bž™y = £p_g‘ÿp_šd_äg , 594  $‹¡_£rv”_äg ( gcÚ¡poš‹r d©a ) 596  cÚ‹xt *cÚ‹xˆð `cÚ‹xt_Ãw (0x0100, 48, 48, d©a ); 597  avd_loÿl_£p * £p ; 599 £p = `avd_»gi¡”_£p ( AVDTP_SEP_TYPE_SOURCE , AVDTP_MEDIA_TYPE_AUDIO , 600 0x00, TRUE , & £p_šd_äg , 601 NULL , cÚ‹xt ); 603 `g_idË_add ( £nd_pdu , cÚ‹xt ); 605 `execu‹_cÚ‹xt ( cÚ‹xt ); 607 `avd_uÄegi¡”_£p ( £p ); 608 } } 610  $discov”_cb ( avd * £ssiÚ , GSLi¡ * £ps , 611  avd_”rÜ * ”r , * u£r_d©a ) 613  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 614  avd_¡»am * ¡»am ; 615  avd_»mÙe_£p * r£p ; 616  avd_£rviû_ÿ·bž™y * medŸ_Œª¥Üt , * medŸ_codec ; 617  avd_medŸ_codec_ÿ·bž™y * ÿp ; 618 GSLi¡ * ÿps ; 619 ušt8_t d©a [4] = { 0x21, 0x02, 2, 32 }; 620  »t ; 622 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BV-05-C") || 623 `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BV-07-C") || 624 `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BV-25-C")) 627 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-01-C")) { 628 `g_as£¹ ( ”r !ð NULL ); 629 `g_as£¹_cmpšt ( `avd_”rÜ_”rÜ_code ( ”r ), ==, 0x01); 630 `cÚ‹xt_qu™ ( cÚ‹xt ); 634 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-04-C") || 635 `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/SMG/BI-32-C")) { 636 `g_as£¹ ( ”r !ð NULL ); 637 `g_as£¹_cmpšt ( `avd_”rÜ_”rÜ_code ( ”r ), ==, 0x11); 638 `cÚ‹xt_qu™ ( cÚ‹xt ); 642 `g_as£¹ ( ”r =ð NULL ); 643 `g_as£¹_cmpšt ( `g_¦i¡_Ëngth ( £ps ), !=, 0); 645 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/SIG/FRA/BV-02-C")) { 646 `g_as£¹ ( ”r =ð NULL ); 647 `cÚ‹xt_qu™ ( cÚ‹xt ); 651 r£p = `avd_fšd_»mÙe_£p ( £ssiÚ , cÚ‹xt -> £p ); 652 `g_as£¹ ( r£p !ð NULL ); 654 medŸ_Œª¥Üt = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_TRANSPORT , 655 NULL , 0); 657 ÿps = `g_¦i¡_­³nd ( NULL , medŸ_Œª¥Üt ); 659 ÿp = `g_m®loc0 ((*ÿpè+ ( d©a )); 660 ÿp -> medŸ_ty³ = AVDTP_MEDIA_TYPE_AUDIO ; 661 ÿp -> medŸ_codec_ty³ = 0x00; 662 `memýy ( ÿp -> d©a , data, (data)); 664 medŸ_codec = `avd_£rviû_ÿp_Ãw ( AVDTP_MEDIA_CODEC , ÿp , 665 (* ÿp è+ ( d©a )); 667 ÿps = `g_¦i¡_­³nd (ÿps, medŸ_codec ); 668 `g_ä“ ( ÿp ); 670 »t = `avd_£t_cÚfigu¿tiÚ ( £ssiÚ , r£p , cÚ‹xt -> £p , ÿps , 671 & ¡»am ); 672 `g_as£¹_cmpšt ( »t , ==, 0); 674 `g_¦i¡_ä“_fuÎ ( ÿps , g_ä“ ); 675 } } 677  $‹¡_þ›Á ( gcÚ¡poš‹r d©a ) 679  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (0x0100, d©a ); 680  avd_loÿl_£p * £p ; 682 £p = `avd_»gi¡”_£p ( AVDTP_SEP_TYPE_SINK , AVDTP_MEDIA_TYPE_AUDIO , 683 0x00, FALSE , NULL , & £p_cfm , 684 cÚ‹xt ); 685 cÚ‹xt -> £p = sep; 687 `avd_discov” ( cÚ‹xt -> £ssiÚ , discov”_cb , context); 689 `execu‹_cÚ‹xt ( cÚ‹xt ); 691 `avd_uÄegi¡”_£p ( £p ); 692 } } 694  $‹¡_þ›Á_1_3 ( gcÚ¡poš‹r d©a ) 696  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (0x0103, d©a ); 697  avd_loÿl_£p * £p ; 699 £p = `avd_»gi¡”_£p ( AVDTP_SEP_TYPE_SINK , AVDTP_MEDIA_TYPE_AUDIO , 700 0x00, TRUE , NULL , & £p_cfm , 701 cÚ‹xt ); 702 cÚ‹xt -> £p = sep; 704 `avd_discov” ( cÚ‹xt -> £ssiÚ , discov”_cb , context); 706 `execu‹_cÚ‹xt ( cÚ‹xt ); 708 `avd_uÄegi¡”_£p ( £p ); 709 } } 711  $‹¡_þ›Á_äg ( gcÚ¡poš‹r d©a ) 713  cÚ‹xt *cÚ‹xˆð `cÚ‹xt_Ãw (0x0100, 48, 48, d©a ); 714  avd_loÿl_£p * £p ; 716 £p = `avd_»gi¡”_£p ( AVDTP_SEP_TYPE_SINK , AVDTP_MEDIA_TYPE_AUDIO , 717 0x00, TRUE , NULL , & £p_cfm , 718 cÚ‹xt ); 719 cÚ‹xt -> £p = sep; 721 `avd_discov” ( cÚ‹xt -> £ssiÚ , discov”_cb , context); 723 `execu‹_cÚ‹xt ( cÚ‹xt ); 725 `avd_uÄegi¡”_£p ( £p ); 726 } } 728  $maš ( ¬gc , * ¬gv []) 730 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 732 ià( `g_‹¡_v”bo£ ()) 733 `__btd_log_š™ ("*", 0); 741 `defše_‹¡ ("/TP/SIG/SMG/BV-05-C", ‹¡_þ›Á , 742 `¿w_pdu (0x00, 0x01)); 743 `defše_‹¡ ("/TP/SIG/SMG/BV-06-C", ‹¡_£rv” , 744 `¿w_pdu (0x00, 0x01), 745 `¿w_pdu (0x02, 0x01, 0x04, 0x00)); 746 `defše_‹¡ ("/TP/SIG/SMG/BV-07-C", ‹¡_þ›Á , 747 `¿w_pdu (0x10, 0x01), 748 `¿w_pdu (0x12, 0x01, 0x04, 0x00), 749 `¿w_pdu (0x20, 0x02, 0x04)); 750 `defše_‹¡ ("/TP/SIG/SMG/BV-08-C", ‹¡_£rv” , 751 `¿w_pdu (0x00, 0x01), 752 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 753 `¿w_pdu (0x10, 0x02, 0x04), 754 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 756 `defše_‹¡ ("/TP/SIG/SMG/BV-09-C", ‹¡_þ›Á , 757 `¿w_pdu (0x30, 0x01), 758 `¿w_pdu (0x32, 0x01, 0x04, 0x00), 759 `¿w_pdu (0x40, 0x02, 0x04), 760 `¿w_pdu (0x42, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 762 `¿w_pdu (0x50, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 764 `defše_‹¡ ("/TP/SIG/SMG/BV-10-C", ‹¡_£rv” , 765 `¿w_pdu (0x00, 0x01), 766 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 767 `¿w_pdu (0x10, 0x02, 0x04), 768 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 770 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 772 `¿w_pdu (0x22, 0x03)); 773 `defše_‹¡ ("/TP/SIG/SMG/BV-11-C", ‹¡_þ›Á , 774 `¿w_pdu (0x60, 0x01), 775 `¿w_pdu (0x62, 0x01, 0x04, 0x00), 776 `¿w_pdu (0x70, 0x02, 0x04), 777 `¿w_pdu (0x72, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 779 `¿w_pdu (0x80, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 781 `¿w_pdu (0x82, 0x03), 782 `¿w_pdu (0x90, 0x04, 0x04)); 783 `defše_‹¡ ("/TP/SIG/SMG/BV-12-C", ‹¡_£rv” , 784 `¿w_pdu (0x00, 0x01), 785 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 786 `¿w_pdu (0x10, 0x02, 0x04), 787 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 789 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 791 `¿w_pdu (0x22, 0x03), 792 `¿w_pdu (0x30, 0x04, 0x04), 793 `¿w_pdu (0x32, 0x04, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 795 `defše_‹¡ ("/TP/SIG/SMG/BV-15-C", ‹¡_þ›Á , 796 `¿w_pdu (0xa0, 0x01), 797 `¿w_pdu (0xa2, 0x01, 0x04, 0x00), 798 `¿w_pdu (0xb0, 0x02, 0x04), 799 `¿w_pdu (0xb2, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 801 `¿w_pdu (0xc0, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 803 `¿w_pdu (0xc2, 0x03), 804 `¿w_pdu (0xd0, 0x06, 0x04)); 805 `defše_‹¡ ("/TP/SIG/SMG/BV-16-C", ‹¡_£rv” , 806 `¿w_pdu (0x00, 0x01), 807 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 808 `¿w_pdu (0x10, 0x02, 0x04), 809 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 811 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 813 `¿w_pdu (0x22, 0x03), 814 `¿w_pdu (0x30, 0x06, 0x04), 815 `¿w_pdu (0x32, 0x06)); 816 `defše_‹¡ ("/TP/SIG/SMG/BV-17-C", ‹¡_þ›Á , 817 `¿w_pdu (0xe0, 0x01), 818 `¿w_pdu (0xe2, 0x01, 0x04, 0x00), 819 `¿w_pdu (0xf0, 0x02, 0x04), 820 `¿w_pdu (0xf2, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 822 `¿w_pdu (0x00, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 824 `¿w_pdu (0x02, 0x03), 825 `¿w_pdu (0x10, 0x06, 0x04), 826 `¿w_pdu (0x12, 0x06), 827 `¿w_pdu (0x20, 0x07, 0x04)); 828 `defše_‹¡ ("/TP/SIG/SMG/BV-18-C", ‹¡_£rv” , 829 `¿w_pdu (0x00, 0x01), 830 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 831 `¿w_pdu (0x10, 0x02, 0x04), 832 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 834 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 836 `¿w_pdu (0x22, 0x03), 837 `¿w_pdu (0x30, 0x06, 0x04), 838 `¿w_pdu (0x32, 0x06), 839 `¿w_pdu (0x40, 0x07, 0x04), 840 `¿w_pdu (0x42, 0x07)); 841 `defše_‹¡ ("/TP/SIG/SMG/BV-19-C", ‹¡_þ›Á , 842 `¿w_pdu (0x30, 0x01), 843 `¿w_pdu (0x32, 0x01, 0x04, 0x00), 844 `¿w_pdu (0x40, 0x02, 0x04), 845 `¿w_pdu (0x42, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 847 `¿w_pdu (0x50, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 849 `¿w_pdu (0x52, 0x03), 850 `¿w_pdu (0x60, 0x06, 0x04), 851 `¿w_pdu (0x62, 0x06), 852 `¿w_pdu (0x70, 0x07, 0x04), 853 `¿w_pdu (0x72, 0x07), 854 `¿w_pdu (0x80, 0x08, 0x04)); 855 `defše_‹¡ ("/TP/SIG/SMG/BV-20-C", ‹¡_£rv” , 856 `¿w_pdu (0x00, 0x01), 857 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 858 `¿w_pdu (0x10, 0x02, 0x04), 859 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 861 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 863 `¿w_pdu (0x22, 0x03), 864 `¿w_pdu (0x30, 0x06, 0x04), 865 `¿w_pdu (0x32, 0x06), 866 `¿w_pdu (0x40, 0x07, 0x04), 867 `¿w_pdu (0x42, 0x07), 868 `¿w_pdu (0x50, 0x08, 0x04), 869 `¿w_pdu (0x52, 0x08)); 870 `defše_‹¡ ("/TP/SIG/SMG/BV-21-C", ‹¡_þ›Á , 871 `¿w_pdu (0x90, 0x01), 872 `¿w_pdu (0x92, 0x01, 0x04, 0x00), 873 `¿w_pdu (0xa0, 0x02, 0x04), 874 `¿w_pdu (0xa2, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 876 `¿w_pdu (0xb0, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 878 `¿w_pdu (0xb2, 0x03), 879 `¿w_pdu (0xc0, 0x06, 0x04), 880 `¿w_pdu (0xc2, 0x06), 881 `¿w_pdu (0xd0, 0x07, 0x04), 882 `¿w_pdu (0xd2, 0x07), 883 `¿w_pdu (0xe0, 0x09, 0x04)); 884 `defše_‹¡ ("/TP/SIG/SMG/BV-22-C", ‹¡_£rv” , 885 `¿w_pdu (0x00, 0x01), 886 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 887 `¿w_pdu (0x10, 0x02, 0x04), 888 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 890 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 892 `¿w_pdu (0x22, 0x03), 893 `¿w_pdu (0x30, 0x06, 0x04), 894 `¿w_pdu (0x32, 0x06), 895 `¿w_pdu (0x40, 0x07, 0x04), 896 `¿w_pdu (0x42, 0x07), 897 `¿w_pdu (0x50, 0x09, 0x04), 898 `¿w_pdu (0x52, 0x09)); 899 `defše_‹¡ ("/TP/SIG/SMG/BV-23-C", ‹¡_þ›Á , 900 `¿w_pdu (0xf0, 0x01), 901 `¿w_pdu (0xf2, 0x01, 0x04, 0x00), 902 `¿w_pdu (0x00, 0x02, 0x04), 903 `¿w_pdu (0x02, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 905 `¿w_pdu (0x10, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 907 `¿w_pdu (0x12, 0x03), 908 `¿w_pdu (0x20, 0x0a, 0x04)); 909 `defše_‹¡ ("/TP/SIG/SMG/BV-24-C", ‹¡_£rv” , 910 `¿w_pdu (0x00, 0x01), 911 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 912 `¿w_pdu (0x10, 0x02, 0x04), 913 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 915 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 917 `¿w_pdu (0x22, 0x03), 918 `¿w_pdu (0x30, 0x0a, 0x04), 919 `¿w_pdu (0x32, 0x0a)); 920 `defše_‹¡ ("/TP/SIG/SMG/BV-25-C", ‹¡_þ›Á_1_3 , 921 `¿w_pdu (0x30, 0x01), 922 `¿w_pdu (0x32, 0x01, 0x04, 0x00), 923 `¿w_pdu (0x40, 0x0c, 0x04)); 924 `defše_‹¡ ("/TP/SIG/SMG/BV-26-C", ‹¡_£rv”_1_3 , 925 `¿w_pdu (0x00, 0x01), 926 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 927 `¿w_pdu (0x10, 0x0c, 0x04), 928 `¿w_pdu (0x12, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 930 `defše_‹¡ ("/TP/SIG/SMG/BV-27-C", ‹¡_£rv”_1_3 , 931 `¿w_pdu (0x00, 0x01), 932 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 933 `¿w_pdu (0x10, 0x02, 0x04), 934 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 936 `defše_‹¡ ("/TP/SIG/SMG/BV-28-C", ‹¡_þ›Á_1_3 , 937 `¿w_pdu (0x50, 0x01), 938 `¿w_pdu (0x52, 0x01, 0x04, 0x00), 939 `¿w_pdu (0x60, 0x0c, 0x04), 940 `¿w_pdu (0x62, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 942 `¿w_pdu (0x70, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 944 `defše_‹¡ ("/TP/SIG/SMG/BV-31-C", ‹¡_þ›Á_1_3 , 945 `¿w_pdu (0x80, 0x01), 946 `¿w_pdu (0x82, 0x01, 0x04, 0x00), 947 `¿w_pdu (0x90, 0x0c, 0x04), 948 `¿w_pdu (0x92, 0x0c, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 951 `¿w_pdu (0xa0, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 954 `defše_‹¡ ("/TP/SIG/SMG/BI-01-C", ‹¡_þ›Á , 955 `¿w_pdu (0xb0, 0x01), 956 `¿w_pdu (0xb3, 0x01, 0x01)); 957 `defše_‹¡ ("/TP/SIG/SMG/BI-02-C", ‹¡_£rv” , 958 `¿w_pdu (0x01, 0x01)); 959 `defše_‹¡ ("/TP/SIG/SMG/BI-03-C", ‹¡_£rv”_0_£p , 960 `¿w_pdu (0x00, 0x01), 961 `¿w_pdu (0x03, 0x01, 0x19)); 962 `defše_‹¡ ("/TP/SIG/SMG/BI-04-C", ‹¡_þ›Á , 963 `¿w_pdu (0xc0, 0x01), 964 `¿w_pdu (0xc2, 0x01, 0x04, 0x00), 965 `¿w_pdu (0xd0, 0x02, 0x04), 966 `¿w_pdu (0xd3, 0x02, 0x11)); 967 `defše_‹¡ ("/TP/SIG/SMG/BI-05-C", ‹¡_£rv” , 968 `¿w_pdu (0x00, 0x01), 969 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 970 `¿w_pdu (0x10, 0x02), 971 `¿w_pdu (0x13, 0x02, 0x11)); 972 `defše_‹¡ ("/TP/SIG/SMG/BI-06-C", ‹¡_£rv” , 973 `¿w_pdu (0x00, 0x01), 974 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 975 `¿w_pdu (0x10, 0x02, 0x00), 976 `¿w_pdu (0x13, 0x02, 0x12)); 977 `defše_‹¡ ("/TP/SIG/SMG/BI-07-C", ‹¡_þ›Á , 978 `¿w_pdu (0xe0, 0x01), 979 `¿w_pdu (0xe2, 0x01, 0x04, 0x00), 980 `¿w_pdu (0xf0, 0x02, 0x04), 981 `¿w_pdu (0xf2, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 983 `¿w_pdu (0x00, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 985 `¿w_pdu (0x03, 0x03, 0x00, 0x13)); 986 `defše_‹¡ ("/TP/SIG/SMG/BI-08-C", ‹¡_£rv” , 987 `¿w_pdu (0x00, 0x01), 988 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 989 `¿w_pdu (0x10, 0x02, 0x04), 990 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 992 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 994 `¿w_pdu (0x22, 0x03), 995 `¿w_pdu (0x30, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 997 `¿w_pdu (0x33, 0x03, 0x00, 0x13)); 998 `defše_‹¡ ("/TP/SIG/SMG/BI-09-C", ‹¡_£rv” , 999 `¿w_pdu (0x00, 0x01), 1000 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1001 `¿w_pdu (0x10, 0x02, 0x04), 1002 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1004 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1006 `¿w_pdu (0x23, 0x03, 0x00, 0x29)); 1007 `defše_‹¡ ("/TP/SIG/SMG/BI-10-C", ‹¡_þ›Á , 1008 `¿w_pdu (0x10, 0x01), 1009 `¿w_pdu (0x12, 0x01, 0x04, 0x00), 1010 `¿w_pdu (0x20, 0x02, 0x04), 1011 `¿w_pdu (0x22, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1013 `¿w_pdu (0x30, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1015 `¿w_pdu (0x32, 0x03), 1016 `¿w_pdu (0x40, 0x04, 0x04), 1017 `¿w_pdu (0x43, 0x04, 0x12)); 1018 `defše_‹¡ ("/TP/SIG/SMG/BI-11-C", ‹¡_£rv” , 1019 `¿w_pdu (0x00, 0x01), 1020 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1021 `¿w_pdu (0x10, 0x02, 0x04), 1022 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1024 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1026 `¿w_pdu (0x22, 0x03), 1027 `¿w_pdu (0x30, 0x04, 0x00), 1028 `¿w_pdu (0x33, 0x04, 0x12)); 1029 `defše_‹¡ ("/TP/SIG/SMG/BI-17-C", ‹¡_£rv” , 1030 `¿w_pdu (0x00, 0x01), 1031 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1032 `¿w_pdu (0x10, 0x02, 0x04), 1033 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1035 `¿w_pdu (0x30, 0x06, 0x04), 1036 `¿w_pdu (0x33, 0x06, 0x31)); 1037 `defše_‹¡ ("/TP/SIG/SMG/BI-18-C", ‹¡_£rv” , 1038 `¿w_pdu (0x00, 0x01), 1039 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1040 `¿w_pdu (0x10, 0x02, 0x04), 1041 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1043 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1045 `¿w_pdu (0x22, 0x03), 1046 `¿w_pdu (0x30, 0x06, 0x04), 1047 `¿w_pdu (0x33, 0x06, 0xc0)); 1048 `defše_‹¡ ("/TP/SIG/SMG/BI-19-C", ‹¡_þ›Á , 1049 `¿w_pdu (0x50, 0x01), 1050 `¿w_pdu (0x52, 0x01, 0x04, 0x00), 1051 `¿w_pdu (0x60, 0x02, 0x04), 1052 `¿w_pdu (0x62, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1054 `¿w_pdu (0x70, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1056 `¿w_pdu (0x72, 0x03), 1057 `¿w_pdu (0x80, 0x06, 0x04), 1058 `¿w_pdu (0x82, 0x06), 1059 `¿w_pdu (0x90, 0x07, 0x04), 1060 `¿w_pdu (0x93, 0x07, 0x04, 0x31)); 1061 `defše_‹¡ ("/TP/SIG/SMG/BI-20-C", ‹¡_£rv” , 1062 `¿w_pdu (0x00, 0x01), 1063 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1064 `¿w_pdu (0x10, 0x02, 0x04), 1065 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1067 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1069 `¿w_pdu (0x22, 0x03), 1070 `¿w_pdu (0x30, 0x07, 0x04), 1071 `¿w_pdu (0x33, 0x07, 0x04, 0x31)); 1072 `defše_‹¡ ("/TP/SIG/SMG/BI-21-C", ‹¡_£rv” , 1073 `¿w_pdu (0x00, 0x01), 1074 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1075 `¿w_pdu (0x10, 0x02, 0x04), 1076 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1078 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1080 `¿w_pdu (0x22, 0x03), 1081 `¿w_pdu (0x30, 0x06, 0x04), 1082 `¿w_pdu (0x32, 0x06), 1083 `¿w_pdu (0x40, 0x07, 0x04), 1084 `¿w_pdu (0x43, 0x07, 0x04, 0xc0)); 1085 `defše_‹¡ ("/TP/SIG/SMG/BI-22-C", ‹¡_þ›Á , 1086 `¿w_pdu (0xa0, 0x01), 1087 `¿w_pdu (0xa2, 0x01, 0x04, 0x00), 1088 `¿w_pdu (0xb0, 0x02, 0x04), 1089 `¿w_pdu (0xb2, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1091 `¿w_pdu (0xc0, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1093 `¿w_pdu (0xc2, 0x03), 1094 `¿w_pdu (0xd0, 0x06, 0x04), 1095 `¿w_pdu (0xd2, 0x06), 1096 `¿w_pdu (0xe0, 0x07, 0x04), 1097 `¿w_pdu (0xe3, 0x07, 0x04, 0x31)); 1098 `defše_‹¡ ("/TP/SIG/SMG/BI-23-C", ‹¡_£rv” , 1099 `¿w_pdu (0x00, 0x01), 1100 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1101 `¿w_pdu (0x10, 0x02, 0x04), 1102 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1104 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1106 `¿w_pdu (0x22, 0x03), 1107 `¿w_pdu (0x30, 0x06, 0x04), 1108 `¿w_pdu (0x32, 0x06), 1109 `¿w_pdu (0x40, 0x08, 0x00), 1110 `¿w_pdu (0x43, 0x08, 0x12)); 1111 `defše_‹¡ ("/TP/SIG/SMG/BI-24-C", ‹¡_£rv” , 1112 `¿w_pdu (0x00, 0x01), 1113 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1114 `¿w_pdu (0x10, 0x02, 0x04), 1115 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1117 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1119 `¿w_pdu (0x22, 0x03), 1120 `¿w_pdu (0x30, 0x06, 0x04), 1121 `¿w_pdu (0x32, 0x06), 1122 `¿w_pdu (0x40, 0x08, 0x04), 1123 `¿w_pdu (0x43, 0x08, 0xc0)); 1124 `defše_‹¡ ("/TP/SIG/SMG/BI-25-C", ‹¡_£rv” , 1125 `¿w_pdu (0x00, 0x01), 1126 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1127 `¿w_pdu (0x10, 0x02, 0x04), 1128 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1130 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1132 `¿w_pdu (0x22, 0x03), 1133 `¿w_pdu (0x30, 0x06, 0x04), 1134 `¿w_pdu (0x32, 0x06), 1135 `¿w_pdu (0x40, 0x07, 0x04), 1136 `¿w_pdu (0x42, 0x07), 1137 `¿w_pdu (0xf0, 0x09, 0x04), 1138 `¿w_pdu (0xf3, 0x09, 0x04, 0x31)); 1139 `defše_‹¡ ("/TP/SIG/SMG/BI-26-C", ‹¡_£rv” , 1140 `¿w_pdu (0x00, 0x01), 1141 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1142 `¿w_pdu (0x10, 0x02, 0x04), 1143 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1145 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1147 `¿w_pdu (0x22, 0x03), 1148 `¿w_pdu (0x30, 0x06, 0x04), 1149 `¿w_pdu (0x32, 0x06), 1150 `¿w_pdu (0x40, 0x09, 0x04), 1151 `¿w_pdu (0x43, 0x09, 0x04, 0x31)); 1152 `defše_‹¡ ("/TP/SIG/SMG/BI-27-C", ‹¡_£rv” , 1153 `¿w_pdu (0x00, 0x01), 1154 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1155 `¿w_pdu (0x10, 0x02, 0x04), 1156 `¿w_pdu (0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1158 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1160 `¿w_pdu (0x22, 0x03), 1161 `¿w_pdu (0x30, 0x06, 0x04), 1162 `¿w_pdu (0x32, 0x06), 1163 `¿w_pdu (0x40, 0x07, 0x04), 1164 `¿w_pdu (0x42, 0x07), 1165 `¿w_pdu (0x50, 0x09, 0x04), 1166 `¿w_pdu (0x53, 0x09, 0x04, 0xc0)); 1167 `defše_‹¡ ("/TP/SIG/SMG/BI-28-C", ‹¡_£rv” , 1168 `¿w_pdu (0x00, 0xff), 1169 `¿w_pdu (0x01, 0x3f)); 1170 `defše_‹¡ ("/TP/SIG/SMG/BI-30-C", ‹¡_þ›Á , 1171 `¿w_pdu (0x00, 0x01), 1172 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1173 `¿w_pdu (0x10, 0x02, 0x04), 1174 `¿w_pdu (0x12, 0x02, 0xee, 0x01, 0x00, 0x01, 0x00, 0x07, 1176 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1178 `defše_‹¡ ("/TP/SIG/SMG/ESR04/BI-28-C", ‹¡_£rv” , 1179 `¿w_pdu (0x00, 0x3f), 1180 `¿w_pdu (0x01, 0x3f)); 1181 `defše_‹¡ ("/TP/SIG/SMG/BI-32-C", ‹¡_þ›Á_1_3 , 1182 `¿w_pdu (0x30, 0x01), 1183 `¿w_pdu (0x32, 0x01, 0x04, 0x00), 1184 `¿w_pdu (0x40, 0x0c, 0x04), 1185 `¿w_pdu (0x43, 0x0c, 0x11)); 1186 `defše_‹¡ ("/TP/SIG/SMG/BI-33-C", ‹¡_£rv”_1_3 , 1187 `¿w_pdu (0x00, 0x01), 1188 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1189 `¿w_pdu (0x10, 0x0c), 1190 `¿w_pdu (0x13, 0x0c, 0x11)); 1191 `defše_‹¡ ("/TP/SIG/SMG/BI-35-C", ‹¡_þ›Á_1_3 , 1192 `¿w_pdu (0x50, 0x01), 1193 `¿w_pdu (0x52, 0x01, 0x04, 0x00), 1194 `¿w_pdu (0x60, 0x0c, 0x04), 1195 `¿w_pdu (0x62, 0x0c, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 1198 `¿w_pdu (0x70, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1201 `defše_‹¡ ("/TP/SIG/SMG/BI-36-C", ‹¡_þ›Á_1_3 , 1202 `¿w_pdu (0x80, 0x01), 1203 `¿w_pdu (0x82, 0x01, 0x04, 0x00), 1204 `¿w_pdu (0x90, 0x0c, 0x04), 1205 `¿w_pdu (0x92, 0x0c, 0xee, 0x01, 0x00, 0x01, 0x00, 0x07, 1207 `¿w_pdu (0xa0, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1216 `defše_‹¡ ("/TP/SIG/FRA/BV-01-C", ‹¡_£rv”_äg , 1217 `¿w_pdu (0x00, 0x01), 1218 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1219 `¿w_pdu (0x10, 0x02, 0x04), 1220 `äg_pdu (0x16, 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 1227 `äg_pdu (0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1234 `¿w_pdu (0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1237 `defše_‹¡ ("/TP/SIG/FRA/BV-02-C", ‹¡_þ›Á_äg , 1238 `¿w_pdu (0xb0, 0x01), 1239 `¿w_pdu (0xb2, 0x01, 0x04, 0x00), 1240 `¿w_pdu (0xc0, 0x02, 0x04), 1241 `äg_pdu (0xc6, 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 1248 `äg_pdu (0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1255 `¿w_pdu (0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1265 `defše_‹¡ ("/TP/SIG/SYN/BV-01-C", ‹¡_£rv”_1_3_sšk , 1266 `¿w_pdu (0x00, 0x01), 1267 `¿w_pdu (0x02, 0x01, 0x04, 0x08), 1268 `¿w_pdu (0x10, 0x0c, 0x04), 1269 `¿w_pdu (0x12, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1271 `defše_‹¡ ("/TP/SIG/SYN/BV-02-C", ‹¡_þ›Á_1_3 , 1272 `¿w_pdu (0xd0, 0x01), 1273 `¿w_pdu (0xd2, 0x01, 0x04, 0x00), 1274 `¿w_pdu (0xe0, 0x0c, 0x04), 1275 `¿w_pdu (0xe2, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1277 `¿w_pdu (0xf0, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1280 `defše_‹¡ ("/TP/SIG/SYN/BV-03-C", ‹¡_£rv”_1_3_sšk , 1281 `¿w_pdu (0x00, 0x01), 1282 `¿w_pdu (0x02, 0x01, 0x04, 0x08), 1283 `¿w_pdu (0x10, 0x0c, 0x04), 1284 `¿w_pdu (0x12, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1286 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1289 `¿w_pdu (0x22, 0x03), 1290 `¿w_pdu (0x00, 0x0d, 0x04, 0x00, 0x00)); 1291 `defše_‹¡ ("/TP/SIG/SYN/BV-04-C", ‹¡_þ›Á_1_3 , 1292 `¿w_pdu (0x10, 0x01), 1293 `¿w_pdu (0x12, 0x01, 0x04, 0x00), 1294 `¿w_pdu (0x20, 0x0c, 0x04), 1295 `¿w_pdu (0x22, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1297 `¿w_pdu (0x30, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1300 `¿w_pdu (0x32, 0x03), 1301 `¿w_pdu (0x40, 0x0d, 0x04, 0x00, 0x00)); 1302 `defše_‹¡ ("/TP/SIG/SYN/BV-05-C", ‹¡_£rv”_1_3 , 1303 `¿w_pdu (0x00, 0x01), 1304 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1305 `¿w_pdu (0x10, 0x0c, 0x04), 1306 `¿w_pdu (0x12, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1308 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1311 `¿w_pdu (0x22, 0x03), 1312 `¿w_pdu (0x30, 0x06, 0x04), 1313 `¿w_pdu (0x32, 0x06), 1314 `¿w_pdu (0x40, 0x0d, 0x04, 0x00, 0x00), 1315 `¿w_pdu (0x42, 0x0d)); 1316 `defše_‹¡ ("/TP/SIG/SYN/BV-06-C", ‹¡_£rv”_1_3 , 1317 `¿w_pdu (0x00, 0x01), 1318 `¿w_pdu (0x02, 0x01, 0x04, 0x00), 1319 `¿w_pdu (0x10, 0x0c, 0x04), 1320 `¿w_pdu (0x12, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00, 1322 `¿w_pdu (0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06, 1325 `¿w_pdu (0x22, 0x03), 1326 `¿w_pdu (0x30, 0x06, 0x04), 1327 `¿w_pdu (0x32, 0x06), 1328 `¿w_pdu (0x40, 0x07, 0x04), 1329 `¿w_pdu (0x42, 0x07), 1330 `¿w_pdu (0x50, 0x0d, 0x04, 0x00, 0x00), 1331 `¿w_pdu (0x52, 0x0d)); 1333  `g_‹¡_run (); 1334 } } @unit/test-avrcp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~<¡dlib.h > 30  ~<¡dboÞ.h > 31  ~<š‰y³s.h > 32  ~<¡ršg.h > 33  ~ 34  ~<”ºo.h > 35  ~ 37  ~ 39  ~"¤c/sh¬ed/utž.h " 40  ~"¤c/log.h " 41  ~"lib/blu‘oÙh.h " 43  ~"ªdroid/avùp.h " 44  ~"ªdroid/avrý-lib.h " 46  s‹¡_pdu { 47 boÞ mv®id ; 48 boÞ mäagm’‹d ; 49 boÞ mcÚtšušg ; 50 boÞ mbrow£ ; 51 cÚ¡ ušt8_t * md©a ; 52 size_t msize ; 55  s‹¡_d©a { 56 * m‹¡_Çme ; 57  ‹¡_pdu * mpdu_li¡ ; 60  scÚ‹xt { 61 GMašLoÝ * mmaš_loÝ ; 62  avrý * m£ssiÚ ; 63 gušt msourû ; 64 gušt mbrow£_sourû ; 65 gušt m´oûss ; 66  mfd ; 67  mbrow£_fd ; 68  mpdu_off£t ; 69 cÚ¡  ‹¡_d©a * md©a ; 72  #d©a ( ¬gs ...è((cÚ¡ []è{‡rg }) ) 74  #¿w_pdu ( ¬gs ...) \ 76 . v®id = Œue , \ 77 . d©a = `d©a ( ¬gs ), \ 78 . size = ( `d©a ( ¬gs )), \ 79 } ) 81  #brs_pdu ( ¬gs ...) \ 83 . v®id = Œue , \ 84 . brow£ = Œue , \ 85 . d©a = `d©a ( ¬gs ), \ 86 . size = ( `d©a ( ¬gs )), \ 87 } ) 89  #äg_pdu ( ¬gs ...) \ 91 . v®id = Œue , \ 92 . äagm’‹d = Œue , \ 93 . d©a = `d©a ( ¬gs ), \ 94 . size = ( `d©a ( ¬gs )), \ 95 } ) 97  #cÚt_pdu ( ¬gs ...) \ 99 . v®id = Œue , \ 100 . cÚtšušg = Œue , \ 101 . d©a = `d©a ( ¬gs ), \ 102 . size = ( `d©a ( ¬gs )), \ 103 } ) 105  #defše_‹¡ ( Çme , funùiÚ , ¬gs ...) \ 107 cÚ¡  ‹¡_pdu pdus [] = { \ 108 ¬gs , { } \ 110  ‹¡_d©a d©a ; \ 111 d©a . ‹¡_Çme = `g_¡rdup ( Çme ); \ 112 d©a . pdu_li¡ = `g_m®loc (( pdus )); \ 113 `memýy ( d©a . pdu_li¡ , pdus , (pdus)); \ 114 `g_‹¡_add_d©a_func ( Çme , & d©a , funùiÚ ); \ 115 } 0) ) 117  $‹¡_debug (cÚ¡ * ¡r , * u£r_d©a ) 119 cÚ¡ * ´efix = u£r_d©a ; 121 `g_´št ("%s%s\n", ´efix , ¡r ); 122 } } 124  $‹¡_ä“ ( gcÚ¡poš‹r u£r_d©a ) 126 cÚ¡  ‹¡_d©a * d©a = u£r_d©a ; 128 `g_ä“ ( d©a -> ‹¡_Çme ); 129 `g_ä“ ( d©a -> pdu_li¡ ); 130 } } 132  gboÞ—n $cÚ‹xt_qu™ ( gpoš‹r u£r_d©a ) 134  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 136 ià( cÚ‹xt -> ´oûss > 0) 137 `g_sourû_»move ( cÚ‹xt -> ´oûss ); 139 `g_maš_loÝ_qu™ ( cÚ‹xt -> maš_loÝ ); 141  FALSE ; 142 } } 144  gboÞ—n $£nd_pdu ( gpoš‹r u£r_d©a ) 146  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 147 cÚ¡  ‹¡_pdu * pdu ; 148 ssize_t Ën ; 150 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 152 ià( pdu -> brow£ ) 153 Ën = `wr™e ( cÚ‹xt -> brow£_fd , pdu -> d©a ,…du-> size ); 155 Ën = `wr™e ( cÚ‹xt -> fd , pdu -> d©a ,…du-> size ); 157 ià( `g_‹¡_v”bo£ ()) 158 `utž_hexdump ('<', pdu -> d©a , Ën , ‹¡_debug , "AVRCP: "); 160 `g_as£¹_cmpšt ( Ën , ==, pdu -> size ); 162 ià( pdu -> äagm’‹d ) 163  `£nd_pdu ( u£r_d©a ); 165 cÚ‹xt -> ´oûss = 0; 166  FALSE ; 167 } } 169  $cÚ‹xt_´oûss ( cÚ‹xt *context) 171 ià(! cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ]. v®id ) { 172 `cÚ‹xt_qu™ ( cÚ‹xt ); 176 cÚ‹xt -> ´oûss = `g_idË_add ( £nd_pdu , context); 177 } } 179  gboÞ—n $‹¡_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 180 gpoš‹r u£r_d©a ) 182  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 183 cÚ¡  ‹¡_pdu * pdu ; 184  buf [512]; 185 ssize_t Ën ; 186  fd ; 188 `DBG (""); 190 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 192 `g_as£¹ (! pdu -> brow£ ); 194 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 195 cÚ‹xt -> sourû = 0; 196 `g_´št ("%s: cÚd %x\n", __func__ , cÚd ); 197  FALSE ; 200 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 202 Ën = `»ad ( fd , buf , (buf)); 204 `g_as£¹ ( Ën > 0); 206 ià( `g_‹¡_v”bo£ ()) 207 `utž_hexdump ('>', buf , Ën , ‹¡_debug , "AVRCP: "); 209 ià(! pdu -> cÚtšušg ) 210 `g_as£¹_cmpšt ( Ën , ==, pdu -> size ); 212 `g_as£¹ ( `memcmp ( buf , pdu -> d©a ,…du-> size ) == 0); 214 ià(! pdu -> äagm’‹d ) 215 `cÚ‹xt_´oûss ( cÚ‹xt ); 217  TRUE ; 218 } } 220  gboÞ—n $brow£_‹¡_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 221 gpoš‹r u£r_d©a ) 223  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 224 cÚ¡  ‹¡_pdu * pdu ; 225  buf [512]; 226 ssize_t Ën ; 227  fd ; 229 `DBG (""); 231 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 233 `g_as£¹ ( pdu -> brow£ ); 235 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 236 cÚ‹xt -> brow£_sourû = 0; 237 `g_´št ("%s: cÚd %x\n", __func__ , cÚd ); 238  FALSE ; 241 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 243 Ën = `»ad ( fd , buf , (buf)); 245 `g_as£¹ ( Ën > 0); 247 ià( `g_‹¡_v”bo£ ()) 248 `utž_hexdump ('>', buf , Ën , ‹¡_debug , "AVRCP: "); 250 `g_as£¹_cmpšt ( Ën , ==, pdu -> size ); 252 `g_as£¹ ( `memcmp ( buf , pdu -> d©a ,…du-> size ) == 0); 254 ià(! pdu -> äagm’‹d ) 255 `cÚ‹xt_´oûss ( cÚ‹xt ); 257  TRUE ; 258 } } 260  cÚ‹xt * $ü—‹_cÚ‹xt ( ušt16_t v”siÚ , gcÚ¡poš‹r d©a ) 262  cÚ‹xt *cÚ‹xˆð `g_Ãw0 (context, 1); 263 GIOChªÃl * chªÃl ; 264  ”r , sv [2]; 266 `DBG (""); 268 cÚ‹xt -> maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 269 `g_as£¹ ( cÚ‹xt -> maš_loÝ ); 273 ”r = `sock‘·œ ( AF_UNIX , SOCK_SEQPACKET | SOCK_CLOEXEC , 0, sv ); 274 `g_as£¹ (! ”r ); 276 cÚ‹xt -> £ssiÚ = `avrý_Ãw ( sv [0], 672, 672, v”siÚ ); 277 `g_as£¹ ( cÚ‹xt -> £ssiÚ !ð NULL ); 279 chªÃl = `g_io_chªÃl_unix_Ãw ( sv [1]); 281 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 282 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 283 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 285 cÚ‹xt -> sourû = `g_io_add_w©ch ( chªÃl , 286 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 287 ‹¡_hªdËr , cÚ‹xt ); 288 `g_as£¹ ( cÚ‹xt -> sourû > 0); 290 `g_io_chªÃl_uÄef ( chªÃl ); 292 cÚ‹xt -> fd = sv [1]; 296 ”r = `sock‘·œ ( AF_UNIX , SOCK_SEQPACKET | SOCK_CLOEXEC , 0, sv ); 297 `g_as£¹ (! ”r ); 299 ”r = `avrý_cÚÃù_browsšg ( cÚ‹xt -> £ssiÚ , sv [0], 672, 672); 300 `g_as£¹ (! ”r ); 302 chªÃl = `g_io_chªÃl_unix_Ãw ( sv [1]); 304 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 305 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 306 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 308 cÚ‹xt -> brow£_sourû = `g_io_add_w©ch ( chªÃl , 309 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 310 brow£_‹¡_hªdËr , cÚ‹xt ); 311 `g_as£¹ ( cÚ‹xt -> brow£_sourû > 0); 313 `g_io_chªÃl_uÄef ( chªÃl ); 315 cÚ‹xt -> brow£_fd = sv [1]; 317 cÚ‹xt -> d©a = data; 319  cÚ‹xt ; 320 } } 322  $de¡roy_cÚ‹xt ( cÚ‹xt *context) 324 ià( cÚ‹xt -> sourû > 0) 325 `g_sourû_»move ( cÚ‹xt -> sourû ); 327 `avrý_shutdown ( cÚ‹xt -> £ssiÚ ); 329 ià( cÚ‹xt -> brow£_sourû > 0) 330 `g_sourû_»move ( cÚ‹xt -> brow£_sourû ); 332 `g_maš_loÝ_uÄef ( cÚ‹xt -> maš_loÝ ); 334 `‹¡_ä“ ( cÚ‹xt -> d©a ); 335 `g_ä“ ( cÚ‹xt ); 336 } } 338  $‹¡_dummy ( gcÚ¡poš‹r d©a ) 340  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (0x0100, d©a ); 342 `de¡roy_cÚ‹xt ( cÚ‹xt ); 343 } } 345  $execu‹_cÚ‹xt ( cÚ‹xt *context) 347 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 349 `de¡roy_cÚ‹xt ( cÚ‹xt ); 350 } } 352  boÞ $hªdË_¶ay ( avrý * £ssiÚ , boÞ ´es£d , * u£r_d©a ) 354 `DBG (""); 356  Œue ; 357 } } 359  boÞ $hªdË_vÞume_up ( avrý * £ssiÚ , boÞ ´es£d , 360 * u£r_d©a ) 362 `DBG (""); 364  Œue ; 365 } } 367  boÞ $hªdË_chªÃl_up ( avrý * £ssiÚ , boÞ ´es£d , 368 * u£r_d©a ) 370 `DBG (""); 372  Œue ; 373 } } 375  boÞ $hªdË_£Ëù ( avrý * £ssiÚ , boÞ ´es£d , * u£r_d©a ) 377 `DBG (""); 379  Œue ; 380 } } 382  boÞ $hªdË_v’dÜ_uniq ( avrý * £ssiÚ , boÞ ´es£d , 383 * u£r_d©a ) 385 `DBG (""); 387  Œue ; 388 } } 390 cÚ¡  avrý_·s¡hrough_hªdËr g·s¡hrough_hªdËrs [] = { 391 { AVC_PLAY , hªdË_¶ay }, 392 { AVC_VOLUME_UP , hªdË_vÞume_up }, 393 { AVC_CHANNEL_UP , hªdË_chªÃl_up }, 394 { AVC_SELECT , hªdË_£Ëù }, 395 { AVC_VENDOR_UNIQUE , hªdË_v’dÜ_uniq }, 399  $g‘_ÿ·bž™›s ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 400 * u£r_d©a ) 402  - EINVAL ; 403 } } 405  $li¡_©Œibu‹s ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 406 * u£r_d©a ) 408 `DBG (""); 410 `avrý_li¡_¶ay”_©Œibu‹s_r¥ ( £ssiÚ , Œª§ùiÚ , 0, NULL ); 413 } } 415  $g‘_©Œibu‹_‹xt ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 416 ušt8_t numb” , ušt8_ˆ* ©Œs , 417 * u£r_d©a ) 419 cÚ¡ * ‹xt [ numb” ]; 421 `DBG (""); 423 ià( numb” ) { 424 `mem£t ( ‹xt , 0, numb” ); 425 ‹xt [0] = "equalizer"; 428 `avrý_g‘_¶ay”_©Œibu‹_‹xt_r¥ ( £ssiÚ , Œª§ùiÚ , numb” , ©Œs , 429 ‹xt ); 432 } } 434  $li¡_v®ues ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 435 ušt8_t ©Œ , * u£r_d©a ) 437 `DBG (""); 439 `avrý_li¡_¶ay”_v®ues_r¥ ( £ssiÚ , Œª§ùiÚ , 0, NULL ); 441  - EINVAL ; 442 } } 444  $g‘_v®ue_‹xt ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 445 ušt8_t ©Œ , ušt8_ˆ numb” , ušt8_ˆ* v®ues , 446 * u£r_d©a ) 448 cÚ¡ * ‹xt [ numb” ]; 450 `DBG (""); 452 ià( numb” ) { 453 `mem£t ( ‹xt , 0, numb” ); 454 ‹xt [0] = "on"; 457 `avrý_g‘_¶ay”_v®ues_‹xt_r¥ ( £ssiÚ , Œª§ùiÚ , numb” , 458 v®ues , ‹xt ); 460  - EINVAL ; 461 } } 463  $g‘_v®ue ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 464 ušt8_t numb” , ušt8_ˆ* ©Œs , * u£r_d©a ) 466 ušt8_t v®ues [ numb” ]; 468 `DBG (""); 470 `mem£t ( v®ues , 0, numb” ); 472 `avrý_g‘_cu¼’t_¶ay”_v®ue_r¥ ( £ssiÚ , Œª§ùiÚ , numb” , ©Œs , 473 v®ues ); 476 } } 478  $£t_v®ue ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 479 ušt8_t numb” , ušt8_ˆ* ©Œs , ušt8_ˆ* v®ues , 480 * u£r_d©a ) 482 `DBG (""); 484 `avrý_£t_¶ay”_v®ue_r¥ ( £ssiÚ , Œª§ùiÚ ); 487 } } 489  $g‘_¶ay_¡©us ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 490 * u£r_d©a ) 492 `DBG (""); 494 `avrý_g‘_¶ay_¡©us_r¥ ( £ssiÚ , Œª§ùiÚ , 0xaaaaaaaa, 0xbbbbbbbb, 498 } } 500  $g‘_–em’t_©Œibu‹s ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 501 ušt64_t uid , ušt8_t numb” , 502 ušt32_t * ©Œs , * u£r_d©a ) 504  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 506 `DBG (""); 508 ià( `g_¡r_has_´efix ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/RCR")) { 509 ušt8_t ·¿ms [1024]; 511 `mem£t ( ·¿ms , 0x00, (params) / 2); 512 `mem£t ( ·¿ms + ((params) / 2), 0xff, (params) / 2); 514 `avrý_g‘_–em’t_©Œs_r¥ ( £ssiÚ , Œª§ùiÚ , ·¿ms , 515 ( ·¿ms )); 517 `avrý_g‘_–em’t_©Œs_r¥ ( £ssiÚ , Œª§ùiÚ , NULL , 0); 520 } } 522  $Œack_chªged ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 523 ušt32_t š‹rv® , * u£r_d©a ) 525  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 526 ušt64_t Œack ; 528 `DBG (""); 530 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/NFY/BV-05-C") || 531 `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/NFY/BV-08-C")) 532 `mem£t (& Œack , 0, (track)); 534 `mem£t (& Œack , 0xff, (track)); 536 `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_INTERIM , 537 AVRCP_EVENT_TRACK_CHANGED , 538 & Œack , (track)); 540 `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_CHANGED , 541 AVRCP_EVENT_TRACK_CHANGED , 542 & Œack , (track)); 545 } } 547  $£‰šgs_chªged ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 548 ušt32_t š‹rv® , * u£r_d©a ) 550 ušt8_t £‰šgs [3]; 552 `DBG (""); 554 £‰šgs [0] = 0x01; 555 £‰šgs [1] = 0x01; 556 £‰šgs [2] = 0x02; 558 `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_INTERIM , 559 AVRCP_EVENT_SETTINGS_CHANGED , 560 £‰šgs , (settings)); 562 `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_CHANGED , 563 AVRCP_EVENT_SETTINGS_CHANGED , 564 £‰šgs , (settings)); 567 } } 569  $avažabË_¶ay”s_chªged ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 570 ušt32_t š‹rv® , * u£r_d©a ) 572 `DBG (""); 574 `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_INTERIM , 575 AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED , 576 NULL , 0); 578 `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_CHANGED , 579 AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED , 580 NULL , 0); 583 } } 585  $add»s£d_¶ay”_chªged ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 586 ušt32_t š‹rv® , * u£r_d©a ) 588 ušt16_t ¶ay” [2]; 590 `DBG (""); 592 ¶ay” [0] = 0x0001; 593 ¶ay” [1] = 0x0001; 595 `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_INTERIM , 596 AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED , 597 ¶ay” , (player)); 599 ¶ay” [0] = 0x0200; 600 ¶ay” [1] = 0x0200; 602 `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_CHANGED , 603 AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED , 604 ¶ay” , (player)); 607 } } 609  $uids_chªged ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 610 ušt32_t š‹rv® , * u£r_d©a ) 612  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 613 ušt16_t couÁ” ; 615 `DBG (""); 617 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/CB/BV-09-C")) 618 couÁ” = 0x0000; 620 couÁ” = 0x0001; 622 `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_INTERIM , 623 AVRCP_EVENT_UIDS_CHANGED , 624 & couÁ” , (counter)); 626 ià(! `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/CB/BV-11-C") && 627 ! `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/CB/BI-05-C")) 630 couÁ” = 0x0200; 632 `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_CHANGED , 633 AVRCP_EVENT_UIDS_CHANGED , 634 & couÁ” , (counter)); 637 } } 639  $now_¶ayšg_cÚ‹Á_chªged ( avrý * £ssiÚ , 640 ušt8_t Œª§ùiÚ , ušt32_t š‹rv® , 641 * u£r_d©a ) 643 `DBG (""); 645 `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_INTERIM , 646 AVRCP_EVENT_NOW_PLAYING_CONTENT_CHANGED , 647 NULL , 0); 649 `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_CHANGED , 650 AVRCP_EVENT_NOW_PLAYING_CONTENT_CHANGED , 651 NULL , 0); 654 } } 656  $vÞume_chªged ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 657 ušt32_t š‹rv® , * u£r_d©a ) 659 ušt8_t vÞume = 0x00; 661 `DBG (""); 663 `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_INTERIM , 664 AVRCP_EVENT_VOLUME_CHANGED , 665 & vÞume , (volume)); 667 vÞume = 0x01; 669 `avrý_»gi¡”_nÙifiÿtiÚ_r¥ ( £ssiÚ , Œª§ùiÚ , AVC_CTYPE_CHANGED , 670 AVRCP_EVENT_VOLUME_CHANGED , 671 & vÞume , (volume)); 674 } } 676  $»gi¡”_nÙifiÿtiÚ ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 677 ušt8_t ev’t , ušt32_t š‹rv® , 678 * u£r_d©a ) 680 `DBG (""); 682  ev’t ) { 683  AVRCP_EVENT_TRACK_CHANGED : 684  `Œack_chªged ( £ssiÚ , Œª§ùiÚ , š‹rv® , u£r_d©a ); 685  AVRCP_EVENT_SETTINGS_CHANGED : 686  `£‰šgs_chªged ( £ssiÚ , Œª§ùiÚ , š‹rv® , 687 u£r_d©a ); 688  AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED : 689  `avažabË_¶ay”s_chªged ( £ssiÚ , Œª§ùiÚ , š‹rv® , 690 u£r_d©a ); 691  AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED : 692  `add»s£d_¶ay”_chªged ( £ssiÚ , Œª§ùiÚ , š‹rv® , 693 u£r_d©a ); 694  AVRCP_EVENT_UIDS_CHANGED : 695  `uids_chªged ( £ssiÚ , Œª§ùiÚ , š‹rv® , u£r_d©a ); 696  AVRCP_EVENT_NOW_PLAYING_CONTENT_CHANGED : 697  `now_¶ayšg_cÚ‹Á_chªged ( £ssiÚ , Œª§ùiÚ , 698 š‹rv® , u£r_d©a ); 699  AVRCP_EVENT_VOLUME_CHANGED : 700  `vÞume_chªged ( £ssiÚ , Œª§ùiÚ , 701 š‹rv® , u£r_d©a ); 703  - EINVAL ; 705 } } 707  $£t_vÞume ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 708 ušt8_t vÞume , * u£r_d©a ) 710 `DBG (""); 712 `avrý_£t_vÞume_r¥ ( £ssiÚ , Œª§ùiÚ , vÞume ); 715 } } 717  $£t_add»s£d ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 718 ušt16_t id , * u£r_d©a ) 720  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 721 ušt8_t ¡©us ; 723 `DBG (""); 725 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MPS/BI-01-C")) 726 ¡©us = AVRCP_STATUS_INVALID_PLAYER_ID ; 728 ¡©us = AVRCP_STATUS_SUCCESS ; 730 `avrý_£t_add»s£d_¶ay”_r¥ ( £ssiÚ , Œª§ùiÚ , ¡©us ); 733 } } 735  $£t_brow£d ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 736 ušt16_t id , * u£r_d©a ) 738  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 739 cÚ¡ * fÞd”s [1] = { "Filesystem" }; 741 `DBG (""); 743 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MPS/BI-02-C")) 744 `avrý_£t_brow£d_¶ay”_r¥ ( £ssiÚ , Œª§ùiÚ , 745 AVRCP_STATUS_INVALID_PLAYER_ID , 746 0, 0, 0, NULL ); 748 `avrý_£t_brow£d_¶ay”_r¥ ( £ssiÚ , Œª§ùiÚ , 749 AVRCP_STATUS_SUCCESS , 750 0xabcd, 0, 1, fÞd”s ); 753 } } 755  $g‘_fÞd”_™ems ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 756 ušt8_t scÝe , ušt32_t ¡¬t , ušt32_ˆ ’d , 757 ušt16_t numb” , ušt32_t * ©Œs , 758 * u£r_d©a ) 760  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 762 `DBG (""); 764 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/CB/BI-02-C")) 765  - ERANGE ; 767 ià( ¡¬t > 1) 768  - ERANGE ; 770 `avrý_g‘_fÞd”_™ems_r¥ ( £ssiÚ , Œª§ùiÚ , AVRCP_STATUS_SUCCESS , 771 0xabcd, 0, NULL , NULL, NULL); 774 } } 776  $chªge_·th ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 777 ušt16_t couÁ” , ušt8_t dœeùiÚ , 778 ušt64_t uid , * u£r_d©a ) 780 `DBG (""); 782 ià(! uid ) 783  - ENOTDIR ; 785 `avrý_chªge_·th_r¥ ( £ssiÚ , Œª§ùiÚ , AVRCP_STATUS_SUCCESS , 0); 788 } } 790  $g‘_™em_©Œibu‹s ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 791 ušt8_t scÝe , ušt64_t uid , 792 ušt16_t couÁ” , ušt8_t numb” , 793 ušt32_t * ©Œs , * u£r_d©a ) 795  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 796 ušt8_t ¡©us ; 798 `DBG (""); 800 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/CB/BI-05-C")) 801 ¡©us = AVRCP_STATUS_UID_CHANGED ; 803 ¡©us = AVRCP_STATUS_SUCCESS ; 805 `avrý_g‘_™em_©Œibu‹s_r¥ ( £ssiÚ , Œª§ùiÚ , ¡©us , 0, NULL , 806 NULL ); 809 } } 811  $¶ay_™em ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , ušt8_ˆ scÝe , 812 ušt64_t uid , ušt16_t couÁ” , * u£r_d©a ) 814 `DBG (""); 816 ià(! uid ) 817  - ENOENT ; 819 `avrý_¶ay_™em_r¥ ( £ssiÚ , Œª§ùiÚ , AVRCP_STATUS_SUCCESS ); 822 } } 824  $£¬ch ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 825 cÚ¡ * ¡ršg , * u£r_d©a ) 827 `DBG (""); 829 `avrý_£¬ch_r¥ ( £ssiÚ , Œª§ùiÚ , AVRCP_STATUS_SUCCESS , 0xaabb, 0); 832 } } 834  $add_to_now_¶ayšg ( avrý * £ssiÚ , ušt8_t Œª§ùiÚ , 835 ušt8_t scÝe , ušt64_t uid , ušt16_t couÁ” , 836 * u£r_d©a ) 838 `DBG (""); 840 ià(! uid ) 841  - ENOENT ; 843 `avrý_add_to_now_¶ayšg_r¥ ( £ssiÚ , Œª§ùiÚ , 844 AVRCP_STATUS_SUCCESS ); 847 } } 849 cÚ¡  avrý_cÚŒÞ_šd gcÚŒÞ_šd = { 850 . g‘_ÿ·bž™›s = get_capabilities, 851 . gli¡_©Œibu‹s = li¡_©Œibu‹s , 852 . gg‘_©Œibu‹_‹xt = g‘_©Œibu‹_‹xt , 853 . gli¡_v®ues = li¡_v®ues , 854 . gg‘_v®ue_‹xt = g‘_v®ue_‹xt , 855 . gg‘_v®ue = g‘_v®ue , 856 . g£t_v®ue = £t_v®ue , 857 . gg‘_¶ay_¡©us = g‘_¶ay_¡©us , 858 . gg‘_–em’t_©Œibu‹s = g‘_–em’t_©Œibu‹s , 859 . g»gi¡”_nÙifiÿtiÚ = »gi¡”_nÙifiÿtiÚ , 860 . g£t_vÞume = £t_vÞume , 861 . g£t_add»s£d = £t_add»s£d , 862 . g£t_brow£d = £t_brow£d , 863 . gg‘_fÞd”_™ems = g‘_fÞd”_™ems , 864 . gchªge_·th = chªge_·th , 865 . gg‘_™em_©Œibu‹s = g‘_™em_©Œibu‹s , 866 . g¶ay_™em = ¶ay_™em , 867 . g£¬ch = £¬ch , 868 . gadd_to_now_¶ayšg = add_to_now_¶ayšg , 871  $‹¡_£rv” ( gcÚ¡poš‹r d©a ) 873  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (0x0100, d©a ); 875 `avrý_£t_·s¡hrough_hªdËrs ( cÚ‹xt -> £ssiÚ , ·s¡hrough_hªdËrs , 876 cÚ‹xt ); 877 `avrý_»gi¡”_¶ay” ( cÚ‹xt -> £ssiÚ , & cÚŒÞ_šd , NULL , context); 879 `g_idË_add ( £nd_pdu , cÚ‹xt ); 881 `execu‹_cÚ‹xt ( cÚ‹xt ); 882 } } 884  $g‘_fÞd”_™ems_r¥ ( avrý * £ssiÚ ,  ”r , 885 ušt16_t couÁ” , ušt16_ˆ numb” , 886 ušt8_t * ·¿ms , * u£r_d©a ) 888  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 890 `DBG (""); 892 `g_as£¹_cmpšt ( ”r , ==, 0); 893 `g_as£¹_cmpšt ( couÁ” , ==, 0xabcd); 894 `g_as£¹_cmpšt ( numb” , ==, 0); 896 `cÚ‹xt_qu™ ( cÚ‹xt ); 897 } } 899  $£t_vÞume_r¥ ( avrý * £ssiÚ ,  ”r , ušt8_t vÞume , 900 * u£r_d©a ) 902  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 904 `g_as£¹_cmpšt ( ”r , ==, 0); 905 `g_as£¹_cmpšt ( vÞume , ==, 1); 907 `cÚ‹xt_qu™ ( cÚ‹xt ); 908 } } 910  boÞ $»gi¡”_nÙifiÿtiÚ_r¥ ( avrý * £ssiÚ ,  ”r , 911 ušt8_t code , ušt8_ˆ ev’t , 912 ušt8_t * ·¿ms , * u£r_d©a ) 914  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 916 `DBG (""); 918 `g_as£¹_cmpšt ( ”r , ==, 0); 920  ev’t ) { 921  AVRCP_EVENT_VOLUME_CHANGED : 922 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/VLH/BV-03-C")) { 923 `g_as£¹_cmpšt ( ·¿ms [0], ==, 0); 925 } ià( code =ð AVC_CTYPE_INTERIM ) { 926 `g_as£¹_cmpšt ( ·¿ms [0], ==, 0); 927  Œue ; 929 `g_as£¹_cmpšt ( ·¿ms [0], ==, 1); 933 `cÚ‹xt_qu™ ( cÚ‹xt ); 935  çl£ ; 936 } } 938 cÚ¡  avrý_cÚŒÞ_cfm gcÚŒÞ_cfm = { 939 . »gi¡”_nÙifiÿtiÚ = »gi¡”_nÙifiÿtiÚ_r¥ , 940 . g£t_vÞume = £t_vÞume_r¥ , 941 . gg‘_fÞd”_™ems = g‘_fÞd”_™ems_r¥ , 944  $‹¡_þ›Á ( gcÚ¡poš‹r d©a ) 946  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (0x0100, d©a ); 948 `avrý_»gi¡”_¶ay” ( cÚ‹xt -> £ssiÚ , NULL , & cÚŒÞ_cfm , context); 950 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MPS/BV-01-C")) 951 `avrý_£t_add»s£d_¶ay” ( cÚ‹xt -> £ssiÚ , 0xabcd); 953 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MPS/BV-03-C")) 954 `avrý_£t_brow£d_¶ay” ( cÚ‹xt -> £ssiÚ , 0xabcd); 956 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MPS/BV-06-C") || 957 `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MPS/BV-08-C")) 958 `avrý_g‘_fÞd”_™ems ( cÚ‹xt -> £ssiÚ , 959 AVRCP_MEDIA_PLAYER_LIST , 0, 2, 0, NULL ); 961 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MPS/BV-01-I")) 962 `avrý_g‘_fÞd”_™ems ( cÚ‹xt -> £ssiÚ , 963 AVRCP_MEDIA_PLAYER_LIST , 0, 2, 0, NULL ); 965 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/CB/BV-01-C")) 966 `avrý_g‘_fÞd”_™ems ( cÚ‹xt -> £ssiÚ , 967 AVRCP_MEDIA_PLAYER_VFS , 0, 2, 0, NULL ); 969 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/CB/BV-04-C")) 970 `avrý_chªge_·th ( cÚ‹xt -> £ssiÚ , 0x01, 0x01, 0xaabb); 972 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/CB/BV-07-C")) 973 `avrý_g‘_™em_©Œibu‹s ( cÚ‹xt -> £ssiÚ , 974 AVRCP_MEDIA_PLAYER_VFS , 0x01, 0xaabb, 975 0, NULL ); 977 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/SRC/BV-01-C")) 978 `avrý_£¬ch ( cÚ‹xt -> £ssiÚ , "Country"); 980 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/SRC/BV-03-C")) 981 `avrý_g‘_fÞd”_™ems ( cÚ‹xt -> £ssiÚ , AVRCP_MEDIA_SEARCH , 982 0, 2, 0, NULL ); 984 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/SRC/BV-05-C")) 985 `avrý_g‘_™em_©Œibu‹s ( cÚ‹xt -> £ssiÚ , 986 AVRCP_MEDIA_SEARCH , 0x01, 0xaabb, 987 0, NULL ); 989 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/NP/BV-01-C")) 990 `avrý_¶ay_™em ( cÚ‹xt -> £ssiÚ , AVRCP_MEDIA_NOW_PLAYING , 1, 993 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/NP/BV-03-C")) 994 `avrý_add_to_now_¶ayšg ( cÚ‹xt -> £ssiÚ , 995 AVRCP_MEDIA_NOW_PLAYING , 0x01, 0xaabb); 997 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/NP/BV-05-C")) 998 `avrý_g‘_fÞd”_™ems ( cÚ‹xt -> £ssiÚ , 999 AVRCP_MEDIA_NOW_PLAYING , 0, 2, 0, NULL ); 1001 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MCN/NP/BV-08-C")) 1002 `avrý_g‘_™em_©Œibu‹s ( cÚ‹xt -> £ssiÚ , 1003 AVRCP_MEDIA_NOW_PLAYING , 0x01, 0xaabb, 1004 0, NULL ); 1006 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/CFG/BV-01-C")) 1007 `avrý_g‘_ÿ·bž™›s ( cÚ‹xt -> £ssiÚ , CAP_EVENTS_SUPPORTED ); 1009 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/PAS/BV-01-C")) 1010 `avrý_li¡_¶ay”_©Œibu‹s ( cÚ‹xt -> £ssiÚ ); 1012 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/PAS/BV-03-C")) { 1013 ušt8_t ©Œs [2] = { AVRCP_ATTRIBUTE_EQUALIZER , 1014 AVRCP_ATTRIBUTE_REPEAT_MODE }; 1016 `avrý_g‘_¶ay”_©Œibu‹_‹xt ( cÚ‹xt -> £ssiÚ , ( ©Œs ), 1017 ©Œs ); 1020 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/PAS/BV-05-C")) 1021 `avrý_li¡_¶ay”_v®ues ( cÚ‹xt -> £ssiÚ , 1022 AVRCP_ATTRIBUTE_EQUALIZER ); 1024 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/PAS/BV-07-C")) { 1025 ušt8_t v®ues [2] = { AVRCP_EQUALIZER_OFF , AVRCP_EQUALIZER_ON }; 1027 `avrý_g‘_¶ay”_v®ue_‹xt ( cÚ‹xt -> £ssiÚ , 1028 AVRCP_ATTRIBUTE_EQUALIZER , 1029 ( v®ues ), values); 1032 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/PAS/BV-09-C")) { 1033 ušt8_t ©Œs [2] = { AVRCP_ATTRIBUTE_EQUALIZER , 1034 AVRCP_ATTRIBUTE_REPEAT_MODE }; 1036 `avrý_g‘_cu¼’t_¶ay”_v®ue ( cÚ‹xt -> £ssiÚ , ( ©Œs ), 1037 ©Œs ); 1040 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/PAS/BV-11-C")) { 1041 ušt8_t ©Œs [2] = { AVRCP_ATTRIBUTE_EQUALIZER , 1042 AVRCP_ATTRIBUTE_REPEAT_MODE }; 1043 ušt8_t v®ues [2] = { 0xaa, 0xff }; 1045 `avrý_£t_¶ay”_v®ue ( cÚ‹xt -> £ssiÚ , ( ©Œs ),‡ttrs, 1046 v®ues ); 1049 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MDI/BV-01-C")) 1050 `avrý_g‘_¶ay_¡©us ( cÚ‹xt -> £ssiÚ ); 1052 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/MDI/BV-03-C")) 1053 `avrý_g‘_–em’t_©Œibu‹s ( cÚ‹xt -> £ssiÚ ); 1055 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/NFY/BV-01-C")) 1056 `avrý_»gi¡”_nÙifiÿtiÚ ( cÚ‹xt -> £ssiÚ , 1057 AVRCP_EVENT_STATUS_CHANGED , 0); 1059 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/BGN/BV-01-I")) 1060 `avrý_£nd_·s¡hrough ( cÚ‹xt -> £ssiÚ , IEEEID_BTSIG , 1061 AVC_VENDOR_NEXT_GROUP ); 1063 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/BGN/BV-02-I")) 1064 `avrý_£nd_·s¡hrough ( cÚ‹xt -> £ssiÚ , IEEEID_BTSIG , 1065 AVC_VENDOR_PREV_GROUP ); 1067 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/VLH/BV-01-C")) 1068 `avrý_£t_vÞume ( cÚ‹xt -> £ssiÚ , 0x00); 1070 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/VLH/BV-03-C")) 1071 `avrý_»gi¡”_nÙifiÿtiÚ ( cÚ‹xt -> £ssiÚ , 1072 AVRCP_EVENT_VOLUME_CHANGED , 0); 1074 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/VLH/BI-03-C")) 1075 `avrý_£t_vÞume ( cÚ‹xt -> £ssiÚ , 0x01); 1077 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/VLH/BI-04-C")) 1078 `avrý_»gi¡”_nÙifiÿtiÚ ( cÚ‹xt -> £ssiÚ , 1079 AVRCP_EVENT_VOLUME_CHANGED , 0); 1081 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/PTH/BV-01-C")) 1082 `avrý_£nd_·s¡hrough ( cÚ‹xt -> £ssiÚ , 0, AVC_PLAY ); 1084 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/TP/PTH/BV-02-C")) 1085 `avrý_£nd_·s¡hrough ( cÚ‹xt -> £ssiÚ , 0, AVC_FAST_FORWARD ); 1087 `execu‹_cÚ‹xt ( cÚ‹xt ); 1088 } } 1090  $maš ( ¬gc , * ¬gv []) 1092 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 1094 ià( `g_‹¡_v”bo£ ()) 1095 `__btd_log_š™ ("*", 0); 1100 `defše_‹¡ ("/TP/MPS/BV-01-C", ‹¡_þ›Á , 1101 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x00, 1106 `defše_‹¡ ("/TP/MPS/BV-02-C", ‹¡_£rv” , 1107 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x00, 1108 0x00, 0x19, 0x58, AVRCP_SET_ADDRESSED_PLAYER , 1110 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_STABLE , 1112 AVRCP_SET_ADDRESSED_PLAYER , 1116 `defše_‹¡ ("/TP/MPS/BV-03-C", ‹¡_þ›Á , 1117 `brs_pdu (0x00, 0x11, 0x0e, 0x70, 0x00, 0x02, 1121 `defše_‹¡ ("/TP/MPS/BV-04-C", ‹¡_£rv” , 1122 `brs_pdu (0x00, 0x11, 0x0e, 0x70, 0x00, 0x02, 1124 `brs_pdu (0x02, 0x11, 0x0e, 0x70, 0x00, 0x16, 1131 `defše_‹¡ ("/TP/MPS/BV-05-C", ‹¡_£rv” , 1132 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1133 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1136 `äg_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 1137 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1140 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED , 0x48, 0x00, 1141 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1146 `defše_‹¡ ("/TP/MPS/BV-06-C", ‹¡_þ›Á , 1147 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1148 0x00, 0x0a, AVRCP_MEDIA_PLAYER_LIST , 1152 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1156 `defše_‹¡ ("/TP/MPS/BV-07-C", ‹¡_£rv” , 1157 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1158 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1161 `äg_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 1162 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1164 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED , 0x48, 0x00, 1165 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1169 `defše_‹¡ ("/TP/MPS/BV-08-C", ‹¡_þ›Á , 1170 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1171 0x00, 0x0a, AVRCP_MEDIA_PLAYER_LIST , 1177 `defše_‹¡ ("/TP/MPS/BV-09-C", ‹¡_£rv” , 1178 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1179 0x00, 0x0a, AVRCP_MEDIA_PLAYER_LIST , 1183 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1187 `defše_‹¡ ("/TP/MPS/BI-01-C", ‹¡_£rv” , 1188 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x00, 1189 0x00, 0x19, 0x58, AVRCP_SET_ADDRESSED_PLAYER , 1191 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_STABLE , 1193 AVRCP_SET_ADDRESSED_PLAYER , 1197 `defše_‹¡ ("/TP/MPS/BI-02-C", ‹¡_£rv” , 1198 `brs_pdu (0x00, 0x11, 0x0e, 0x70, 0x00, 0x02, 1200 `brs_pdu (0x02, 0x11, 0x0e, 0x70, 0x00, 0x01, 1209 `defše_‹¡ ("/TP/MCN/CB/BV-01-C", ‹¡_þ›Á , 1210 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1211 0x00, 0x0a, AVRCP_MEDIA_PLAYER_VFS , 1217 `defše_‹¡ ("/TP/MCN/CB/BV-02-C", ‹¡_£rv” , 1218 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1219 0x00, 0x0a, AVRCP_MEDIA_PLAYER_VFS , 1223 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1227 `defše_‹¡ ("/TP/MCN/CB/BV-03-C", ‹¡_£rv” , 1228 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x00, 1229 0x00, 0x19, 0x58, AVRCP_SET_ADDRESSED_PLAYER , 1231 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_STABLE , 1233 AVRCP_SET_ADDRESSED_PLAYER , 1235 `brs_pdu (0x00, 0x11, 0x0e, 0x70, 0x00, 0x02, 1237 `brs_pdu (0x02, 0x11, 0x0e, 0x70, 0x00, 0x16, 1242 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1243 0x00, 0x0a, AVRCP_MEDIA_PLAYER_VFS , 1247 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1251 `defše_‹¡ ("/TP/MCN/CB/BV-04-C", ‹¡_þ›Á , 1252 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_CHANGE_PATH , 1260 `defše_‹¡ ("/TP/MCN/CB/BV-05-C", ‹¡_£rv” , 1261 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_CHANGE_PATH , 1267 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_CHANGE_PATH , 1271 `defše_‹¡ ("/TP/MCN/CB/BV-06-C", ‹¡_£rv” , 1272 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_CHANGE_PATH , 1278 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_CHANGE_PATH , 1282 `defše_‹¡ ("/TP/MCN/CB/BV-07-C", ‹¡_þ›Á , 1283 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES , 1284 0x00, 0x0c, AVRCP_MEDIA_PLAYER_VFS , 1291 `defše_‹¡ ("/TP/MCN/CB/BV-08-C", ‹¡_£rv” , 1292 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES , 1293 0x00, 0x0c, AVRCP_MEDIA_PLAYER_VFS , 1298 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES , 1302 `defše_‹¡ ("/TP/MCN/CB/BV-09-C", ‹¡_£rv” , 1303 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1304 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1307 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 1308 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1313 `defše_‹¡ ("/TP/MCN/CB/BV-10-C", ‹¡_£rv” , 1314 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1315 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1318 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 1319 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1324 `defše_‹¡ ("/TP/MCN/CB/BV-11-C", ‹¡_£rv” , 1325 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1326 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1329 `äg_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 1330 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1333 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED , 0x48, 0x00, 1334 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1339 `defše_‹¡ ("/TP/MCN/CB/BI-01-C", ‹¡_£rv” , 1340 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1341 0x00, 0x0a, AVRCP_MEDIA_PLAYER_VFS , 1345 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1349 `defše_‹¡ ("/TP/MCN/CB/BI-02-C", ‹¡_£rv” , 1350 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1351 0x00, 0x0a, AVRCP_MEDIA_PLAYER_VFS , 1355 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1359 `defše_‹¡ ("/TP/MCN/CB/BI-03-C", ‹¡_£rv” , 1360 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1361 0x00, 0x0a, AVRCP_MEDIA_PLAYER_VFS , 1365 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1369 `defše_‹¡ ("/TP/MCN/CB/BI-04-C", ‹¡_£rv” , 1370 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_CHANGE_PATH , 1376 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_CHANGE_PATH , 1380 `defše_‹¡ ("/TP/MCN/CB/BI-05-C", ‹¡_£rv” , 1381 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1382 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1385 `äg_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 1386 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1389 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED , 0x48, 0x00, 1390 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1393 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES , 1394 0x00, 0x0c, AVRCP_MEDIA_NOW_PLAYING , 1399 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES , 1405 `defše_‹¡ ("/TP/MCN/SRC/BV-01-C", ‹¡_þ›Á , 1406 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_SEARCH , 1411 `defše_‹¡ ("/TP/MCN/SRC/BV-02-C", ‹¡_£rv” , 1412 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_SEARCH , 1416 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_SEARCH , 1422 `defše_‹¡ ("/TP/MCN/SRC/BV-03-C", ‹¡_þ›Á , 1423 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1424 0x00, 0x0a, AVRCP_MEDIA_SEARCH , 1430 `defše_‹¡ ("/TP/MCN/SCR/BV-04-C", ‹¡_£rv” , 1431 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1432 0x00, 0x0a, AVRCP_MEDIA_SEARCH , 1436 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1440 `defše_‹¡ ("/TP/MCN/SRC/BV-05-C", ‹¡_þ›Á , 1441 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES , 1442 0x00, 0x0c, AVRCP_MEDIA_SEARCH , 1449 `defše_‹¡ ("/TP/MCN/SRC/BV-06-C", ‹¡_£rv” , 1450 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES , 1451 0x00, 0x0c, AVRCP_MEDIA_SEARCH , 1456 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES , 1462 `defše_‹¡ ("/TP/MCN/NP/BV-01-C", ‹¡_þ›Á , 1463 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_PLAY_ITEM , 1464 0x00, 0x0b, AVRCP_MEDIA_NOW_PLAYING , 1469 `defše_‹¡ ("/TP/MCN/NP/BV-02-C", ‹¡_£rv” , 1470 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_PLAY_ITEM , 1471 0x00, 0x0b, AVRCP_MEDIA_NOW_PLAYING , 1474 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_PLAY_ITEM , 1478 `defše_‹¡ ("/TP/MCN/NP/BV-03-C", ‹¡_þ›Á , 1479 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_ADD_TO_NOW_PLAYING , 1480 0x00, 0x0b, AVRCP_MEDIA_NOW_PLAYING , 1486 `defše_‹¡ ("/TP/MCN/NP/BV-04-C", ‹¡_£rv” , 1487 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_ADD_TO_NOW_PLAYING , 1488 0x00, 0x0b, AVRCP_MEDIA_NOW_PLAYING , 1492 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_ADD_TO_NOW_PLAYING , 1496 `defše_‹¡ ("/TP/MCN/NP/BV-05-C", ‹¡_þ›Á , 1497 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1498 0x00, 0x0a, AVRCP_MEDIA_NOW_PLAYING , 1504 `defše_‹¡ ("/TP/MCN/NP/BV-06-C", ‹¡_£rv” , 1505 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1506 0x00, 0x0a, AVRCP_MEDIA_NOW_PLAYING , 1510 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1514 `defše_‹¡ ("/TP/MCN/NP/BV-07-C", ‹¡_£rv” , 1515 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1516 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1519 `äg_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 1520 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1522 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED , 0x48, 0x00, 1523 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1527 `defše_‹¡ ("/TP/MCN/NP/BV-08-C", ‹¡_þ›Á , 1528 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES , 1529 0x00, 0x0c, AVRCP_MEDIA_NOW_PLAYING , 1536 `defše_‹¡ ("/TP/MCN/CB/BV-09-C", ‹¡_£rv” , 1537 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES , 1538 0x00, 0x0c, AVRCP_MEDIA_NOW_PLAYING , 1543 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES , 1547 `defše_‹¡ ("/TP/MCN/NP/BI-01-C", ‹¡_£rv” , 1548 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_PLAY_ITEM , 1549 0x00, 0x0b, AVRCP_MEDIA_NOW_PLAYING , 1553 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_PLAY_ITEM , 1557 `defše_‹¡ ("/TP/MCN/NP/BI-02-C", ‹¡_£rv” , 1558 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_ADD_TO_NOW_PLAYING , 1559 0x00, 0x0b, AVRCP_MEDIA_NOW_PLAYING , 1563 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_ADD_TO_NOW_PLAYING , 1569 `defše_‹¡ ("/TP/MPS/BV-01-I", ‹¡_þ›Á , 1570 `brs_pdu (0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS , 1571 0x00, 0x0a, AVRCP_MEDIA_PLAYER_LIST , 1583 `defše_‹¡ ("/TP/CON/BV-01-C", ‹¡_dummy , `¿w_pdu (0x00)); 1584 `defše_‹¡ ("/TP/CON/BV-02-C", ‹¡_dummy , `¿w_pdu (0x00)); 1585 `defše_‹¡ ("/TP/CON/BV-03-C", ‹¡_dummy , `¿w_pdu (0x00)); 1586 `defše_‹¡ ("/TP/CON/BV-04-C", ‹¡_dummy , `¿w_pdu (0x00)); 1587 `defše_‹¡ ("/TP/CON/BV-05-C", ‹¡_dummy , `¿w_pdu (0x00)); 1596 `defše_‹¡ ("/TP/CEC/BV-01-I", ‹¡_dummy , `¿w_pdu (0x00)); 1597 `defše_‹¡ ("/TP/CEC/BV-02-I", ‹¡_dummy , `¿w_pdu (0x00)); 1598 `defše_‹¡ ("/TP/CRC/BV-01-I", ‹¡_dummy , `¿w_pdu (0x00)); 1599 `defše_‹¡ ("/TP/CRC/BV-02-I", ‹¡_dummy , `¿w_pdu (0x00)); 1603 `defše_‹¡ ("/TP/ICC/BV-01-I", ‹¡_£rv” , 1604 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0xf8, 0x30, 1606 `¿w_pdu (0x02, 0x11, 0x0e, 0x0c, 0xf8, 0x30, 1609 `defše_‹¡ ("/TP/ICC/BV-02-I", ‹¡_£rv” , 1610 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0xf8, 0x31, 1612 `¿w_pdu (0x02, 0x11, 0x0e, 0x0c, 0xf8, 0x31, 1615 `defše_‹¡ ("/TP/PTT/BV-01-I", ‹¡_£rv” , 1616 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x7c, 1618 `¿w_pdu (0x02, 0x11, 0x0e, 0x09, 0x48, 0x7c, 1621 `defše_‹¡ ("/TP/PTT/BV-02-I", ‹¡_£rv” , 1622 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x7c, 1623 AVC_VOLUME_UP , 0x00), 1624 `¿w_pdu (0x02, 0x11, 0x0e, 0x09, 0x48, 0x7c, 1625 AVC_VOLUME_UP , 0x00)); 1627 `defše_‹¡ ("/TP/PTT/BV-03-I", ‹¡_£rv” , 1628 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x7c, 1629 AVC_CHANNEL_UP , 0x00), 1630 `¿w_pdu (0x02, 0x11, 0x0e, 0x09, 0x48, 0x7c, 1631 AVC_CHANNEL_UP , 0x00)); 1633 `defše_‹¡ ("/TP/PTT/BV-04-I", ‹¡_£rv” , 1634 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x7c, 1635 AVC_SELECT , 0x00), 1636 `¿w_pdu (0x02, 0x11, 0x0e, 0x09, 0x48, 0x7c, 1637 AVC_SELECT , 0x00)); 1639 `defše_‹¡ ("/TP/PTT/BV-05-I", ‹¡_£rv” , 1640 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x7c, 1641 AVC_PLAY , 0x00), 1642 `¿w_pdu (0x02, 0x11, 0x0e, 0x09, 0x48, 0x7c, 1643 AVC_PLAY , 0x00), 1644 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x7c, 1645 AVC_PLAY | 0x80, 0x00), 1646 `¿w_pdu (0x02, 0x11, 0x0e, 0x09, 0x48, 0x7c, 1647 AVC_PLAY | 0x80, 0x00)); 1651 `defše_‹¡ ("/TP/CFG/BV-01-C", ‹¡_þ›Á , 1652 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1656 `defše_‹¡ ("/TP/CFG/BV-02-C", ‹¡_£rv” , 1657 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1660 `¿w_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 1664 `defše_‹¡ ("/TP/CFG/BI-01-C", ‹¡_£rv” , 1665 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1668 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED , 1671 AVRCP_STATUS_INVALID_PARAM )); 1675 `defše_‹¡ ("/TP/PAS/BV-01-C", ‹¡_þ›Á , 1676 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1680 `defše_‹¡ ("/TP/PAS/BV-02-C", ‹¡_£rv” , 1681 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1684 `¿w_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 1688 `defše_‹¡ ("/TP/PAS/BV-03-C", ‹¡_þ›Á , 1689 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1691 AVRCP_GET_PLAYER_ATTRIBUTE_TEXT , 1693 AVRCP_ATTRIBUTE_EQUALIZER , 1694 AVRCP_ATTRIBUTE_REPEAT_MODE )); 1696 `defše_‹¡ ("/TP/PAS/BV-04-C", ‹¡_£rv” , 1697 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1699 AVRCP_GET_PLAYER_ATTRIBUTE_TEXT , 1701 `¿w_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 1703 AVRCP_GET_PLAYER_ATTRIBUTE_TEXT , 1708 `defše_‹¡ ("/TP/PAS/BV-05-C", ‹¡_þ›Á , 1709 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1711 AVRCP_LIST_PLAYER_VALUES , 1713 AVRCP_ATTRIBUTE_EQUALIZER )); 1715 `defše_‹¡ ("/TP/PAS/BV-06-C", ‹¡_£rv” , 1716 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1718 AVRCP_LIST_PLAYER_VALUES , 1719 0x00, 0x00, 0x01, AVRCP_ATTRIBUTE_EQUALIZER ), 1720 `¿w_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 1722 AVRCP_LIST_PLAYER_VALUES , 1725 `defše_‹¡ ("/TP/PAS/BV-07-C", ‹¡_þ›Á , 1726 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1728 AVRCP_GET_PLAYER_VALUE_TEXT , 1730 AVRCP_ATTRIBUTE_EQUALIZER , 0x02, 1731 AVRCP_EQUALIZER_OFF , 1732 AVRCP_EQUALIZER_ON )); 1734 `defše_‹¡ ("/TP/PAS/BV-08-C", ‹¡_£rv” , 1735 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1737 AVRCP_GET_PLAYER_VALUE_TEXT , 1738 0x00, 0x00, 0x03, AVRCP_ATTRIBUTE_EQUALIZER , 1740 `¿w_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 1742 AVRCP_GET_PLAYER_VALUE_TEXT , 1746 `defše_‹¡ ("/TP/PAS/BV-09-C", ‹¡_þ›Á , 1747 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1749 AVRCP_GET_CURRENT_PLAYER_VALUE , 1751 AVRCP_ATTRIBUTE_EQUALIZER , 1752 AVRCP_ATTRIBUTE_REPEAT_MODE )); 1754 `defše_‹¡ ("/TP/PAS/BV-10-C", ‹¡_£rv” , 1755 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1757 AVRCP_GET_CURRENT_PLAYER_VALUE , 1759 AVRCP_ATTRIBUTE_EQUALIZER , 1760 AVRCP_ATTRIBUTE_REPEAT_MODE ), 1761 `¿w_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 1763 AVRCP_GET_CURRENT_PLAYER_VALUE , 1765 AVRCP_ATTRIBUTE_EQUALIZER , 0x00, 1766 AVRCP_ATTRIBUTE_REPEAT_MODE , 0x00)); 1768 `defše_‹¡ ("/TP/PAS/BV-11-C", ‹¡_þ›Á , 1769 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x00, 1771 AVRCP_SET_PLAYER_VALUE , 1773 AVRCP_ATTRIBUTE_EQUALIZER , 0xaa, 1774 AVRCP_ATTRIBUTE_REPEAT_MODE , 0xff)); 1777 `defše_‹¡ ("/TP/PAS/BI-01-C", ‹¡_£rv” , 1778 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1780 AVRCP_GET_PLAYER_ATTRIBUTE_TEXT , 1784 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED , 1786 AVRCP_GET_PLAYER_ATTRIBUTE_TEXT , 1787 0x00, 0x00, 0x01, AVRCP_STATUS_INVALID_PARAM )); 1790 `defše_‹¡ ("/TP/PAS/BI-02-C", ‹¡_£rv” , 1791 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1793 AVRCP_LIST_PLAYER_VALUES , 1797 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED , 1799 AVRCP_LIST_PLAYER_VALUES , 1800 0x00, 0x00, 0x01, AVRCP_STATUS_INVALID_PARAM )); 1803 `defše_‹¡ ("/TP/PAS/BI-03-C", ‹¡_£rv” , 1804 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1806 AVRCP_GET_PLAYER_VALUE_TEXT , 1807 0x00, 0x00, 0x03, AVRCP_ATTRIBUTE_EQUALIZER , 1811 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED , 1813 AVRCP_GET_PLAYER_VALUE_TEXT , 1814 0x00, 0x00, 0x01, AVRCP_STATUS_INVALID_PARAM )); 1817 `defše_‹¡ ("/TP/PAS/BI-04-C", ‹¡_£rv” , 1818 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1820 AVRCP_GET_CURRENT_PLAYER_VALUE , 1824 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED , 1826 AVRCP_GET_CURRENT_PLAYER_VALUE , 1827 0x00, 0x00, 0x01, AVRCP_STATUS_INVALID_PARAM )); 1830 `defše_‹¡ ("/TP/PAS/BI-05-C", ‹¡_£rv” , 1831 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x00, 1833 AVRCP_SET_PLAYER_VALUE , 1835 AVRCP_ATTRIBUTE_REPEAT_MODE , 0x7f), 1836 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED , 1838 AVRCP_SET_PLAYER_VALUE , 1839 0x00, 0x00, 0x01, AVRCP_STATUS_INVALID_PARAM )); 1844 `defše_‹¡ ("/TP/MDI/BV-01-C", ‹¡_þ›Á , 1845 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1846 0x00, 0x19, 0x58, AVRCP_GET_PLAY_STATUS , 1850 `defše_‹¡ ("/TP/MDI/BV-02-C", ‹¡_£rv” , 1851 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1852 0x00, 0x19, 0x58, AVRCP_GET_PLAY_STATUS , 1854 `¿w_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 1855 0x00, 0x19, 0x58, AVRCP_GET_PLAY_STATUS , 1862 `defše_‹¡ ("/TP/MDI/BV-03-C", ‹¡_þ›Á , 1863 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1864 0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES , 1869 `defše_‹¡ ("/TP/MDI/BV-04-C", ‹¡_£rv” , 1870 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1871 0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES , 1874 `¿w_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 1875 0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES , 1879 `defše_‹¡ ("/TP/MDI/BV-05-C", ‹¡_£rv” , 1880 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 1881 0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES , 1885 `¿w_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 1886 0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES , 1892 `defše_‹¡ ("/TP/NFY/BV-01-C", ‹¡_þ›Á , 1893 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1894 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1895 0x00, 0x00, 0x05, AVRCP_EVENT_STATUS_CHANGED , 1899 `defše_‹¡ ("/TP/NFY/BV-02-C", ‹¡_£rv” , 1900 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1901 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1902 0x00, 0x00, 0x05, AVRCP_EVENT_TRACK_CHANGED , 1904 `äg_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 1905 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1906 0x00, 0x00, 0x09, AVRCP_EVENT_TRACK_CHANGED , 1909 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED , 0x48, 0x00, 1910 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1911 0x00, 0x00, 0x09, AVRCP_EVENT_TRACK_CHANGED , 1916 `defše_‹¡ ("/TP/NFY/BV-03-C", ‹¡_£rv” , 1917 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1918 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1920 AVRCP_EVENT_SETTINGS_CHANGED , 1922 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 1923 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1925 AVRCP_EVENT_SETTINGS_CHANGED , 1927 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED , 0x48, 0x00, 1928 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1930 AVRCP_EVENT_SETTINGS_CHANGED , 1934 `defše_‹¡ ("/TP/NFY/BV-04-C", ‹¡_£rv” , 1935 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1936 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1937 0x00, 0x00, 0x05, AVRCP_EVENT_TRACK_CHANGED , 1939 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 1940 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1941 0x00, 0x00, 0x09, AVRCP_EVENT_TRACK_CHANGED , 1946 `defše_‹¡ ("/TP/NFY/BV-05-C", ‹¡_£rv” , 1947 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1948 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1949 0x00, 0x00, 0x05, AVRCP_EVENT_TRACK_CHANGED , 1951 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 1952 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1953 0x00, 0x00, 0x09, AVRCP_EVENT_TRACK_CHANGED , 1958 `defše_‹¡ ("/TP/NFY/BV-08-C", ‹¡_£rv” , 1959 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1960 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1961 0x00, 0x00, 0x05, AVRCP_EVENT_TRACK_CHANGED , 1963 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 1964 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1965 0x00, 0x00, 0x09, AVRCP_EVENT_TRACK_CHANGED , 1970 `defše_‹¡ ("/TP/NFY/BI-01-C", ‹¡_£rv” , 1971 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1972 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 1977 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED , 1979 AVRCP_REGISTER_NOTIFICATION , 1980 0x00, 0x00, 0x01, AVRCP_STATUS_INVALID_PARAM )); 1985 `defše_‹¡ ("/TP/INV/BI-01-C", ‹¡_£rv” , 1986 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 1991 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED , 1994 AVRCP_STATUS_INVALID_COMMAND )); 1997 `defše_‹¡ ("/TP/INV/BI-02-C", ‹¡_£rv” , 1998 `brs_pdu (0x00, 0x11, 0x0e, 0xff, 0x00, 0x00), 1999 `brs_pdu (0x02, 0x11, 0x0e, AVRCP_GENERAL_REJECT , 2000 0x00, 0x01, AVRCP_STATUS_INVALID_COMMAND )); 2003 `defše_‹¡ ("/TP/BGN/BV-01-I", ‹¡_þ›Á , 2004 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 2005 AVC_OP_PASSTHROUGH , 2006 AVC_VENDOR_UNIQUE , 0x05, 0x00, 0x19, 2007 0x58, 0x00, AVC_VENDOR_NEXT_GROUP )); 2010 `defše_‹¡ ("/TP/BGN/BV-01-I", ‹¡_£rv” , 2011 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 2012 AVC_OP_PASSTHROUGH , 2013 AVC_VENDOR_UNIQUE , 0x05, 0x00, 0x19, 2014 0x58, 0x00, AVC_VENDOR_NEXT_GROUP ), 2015 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_ACCEPTED , 2016 0x48, AVC_OP_PASSTHROUGH , 2017 AVC_VENDOR_UNIQUE , 0x05, 0x00, 0x19, 2018 0x58, 0x00, AVC_VENDOR_NEXT_GROUP )); 2021 `defše_‹¡ ("/TP/BGN/BV-02-I", ‹¡_þ›Á , 2022 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 2023 AVC_OP_PASSTHROUGH , 2024 AVC_VENDOR_UNIQUE , 0x05, 0x00, 0x19, 2025 0x58, 0x00, AVC_VENDOR_PREV_GROUP )); 2028 `defše_‹¡ ("/TP/BGN/BV-02-I", ‹¡_£rv” , 2029 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 2030 AVC_OP_PASSTHROUGH , 2031 AVC_VENDOR_UNIQUE , 0x05, 0x00, 0x19, 2032 0x58, 0x00, AVC_VENDOR_PREV_GROUP ), 2033 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_ACCEPTED , 2034 0x48, AVC_OP_PASSTHROUGH , 2035 AVC_VENDOR_UNIQUE , 0x05, 0x00, 0x19, 2036 0x58, 0x00, AVC_VENDOR_PREV_GROUP )); 2041 `defše_‹¡ ("/TP/VLH/BV-01-C", ‹¡_þ›Á , 2042 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x00, 2043 0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME , 2047 `defše_‹¡ ("/TP/VLH/BV-02-C", ‹¡_£rv” , 2048 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x00, 2049 0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME , 2051 `¿w_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 2052 0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME , 2056 `defše_‹¡ ("/TP/VLH/BV-03-C", ‹¡_þ›Á , 2057 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 2058 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 2061 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 2062 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 2067 `defše_‹¡ ("/TP/VLH/BV-04-C", ‹¡_£rv” , 2068 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 2069 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 2072 `äg_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 2073 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 2076 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED , 0x48, 0x00, 2077 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 2082 `defše_‹¡ ("/TP/VLH/BI-01-C", ‹¡_£rv” , 2083 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x00, 2084 0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME , 2086 `¿w_pdu (0x02, 0x11, 0x0e, 0x0a, 0x48, 0x00, 2087 0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME , 2091 `defše_‹¡ ("/TP/VLH/BI-02-C", ‹¡_£rv” , 2092 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x00, 2093 0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME , 2095 `¿w_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 2096 0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME , 2100 `defše_‹¡ ("/TP/VLH/BI-03-C", ‹¡_þ›Á , 2101 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x00, 2102 0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME , 2104 `¿w_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 2105 0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME , 2109 `defše_‹¡ ("/TP/VLH/BI-04-C", ‹¡_þ›Á , 2110 `¿w_pdu (0x00, 0x11, 0x0e, 0x03, 0x48, 0x00, 2111 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 2114 `äg_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM , 0x48, 0x00, 2115 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 2118 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED , 0x48, 0x00, 2119 0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION , 2126 `defše_‹¡ ("/TP/PTH/BV-01-C", ‹¡_þ›Á , 2127 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 2128 AVC_OP_PASSTHROUGH , AVC_PLAY , 0x00), 2129 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_ACCEPTED , 0x48, 2130 AVC_OP_PASSTHROUGH , AVC_PLAY ), 2131 `¿w_pdu (0x10, 0x11, 0x0e, 0x00, 0x48, 2132 AVC_OP_PASSTHROUGH , AVC_PLAY | 0x80, 0x00)); 2134 `defše_‹¡ ("/TP/PTH/BV-02-C", ‹¡_þ›Á , 2135 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 2136 AVC_OP_PASSTHROUGH , AVC_FAST_FORWARD , 0x00), 2137 `¿w_pdu (0x02, 0x11, 0x0e, AVC_CTYPE_ACCEPTED , 0x48, 2138 AVC_OP_PASSTHROUGH , AVC_FAST_FORWARD ), 2139 `¿w_pdu (0x10, 0x11, 0x0e, 0x00, 0x48, 2140 AVC_OP_PASSTHROUGH , AVC_FAST_FORWARD | 0x80, 2142 `¿w_pdu (0x12, 0x11, 0x0e, AVC_CTYPE_ACCEPTED , 0x48, 2143 AVC_OP_PASSTHROUGH , AVC_FAST_FORWARD | 0x80), 2144 `¿w_pdu (0x20, 0x11, 0x0e, 0x00, 0x48, 2145 AVC_OP_PASSTHROUGH , AVC_FAST_FORWARD , 0x00)); 2148 `defše_‹¡ ("/TP/RCR/BV-02-C", ‹¡_£rv” , 2149 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 2150 0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES , 2153 `cÚt_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 2154 0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES , 2156 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x00, 2157 0x00, 0x19, 0x58, AVRCP_REQUEST_CONTINUING , 2158 0x00, 0x00, 0x01, AVRCP_GET_ELEMENT_ATTRIBUTES ), 2159 `cÚt_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 2160 0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES , 2162 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x00, 2163 0x00, 0x19, 0x58, AVRCP_REQUEST_CONTINUING , 2164 0x00, 0x00, 0x01, AVRCP_GET_ELEMENT_ATTRIBUTES ), 2165 `cÚt_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 2166 0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES , 2170 `defše_‹¡ ("/TP/RCR/BV-04-C", ‹¡_£rv” , 2171 `¿w_pdu (0x00, 0x11, 0x0e, 0x01, 0x48, 0x00, 2172 0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES , 2175 `cÚt_pdu (0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00, 2176 0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES , 2178 `¿w_pdu (0x00, 0x11, 0x0e, 0x00, 0x48, 0x00, 2179 0x00, 0x19, 0x58, AVRCP_ABORT_CONTINUING , 2180 0x00, 0x00, 0x01, AVRCP_GET_ELEMENT_ATTRIBUTES ), 2181 `¿w_pdu (0x02, 0x11, 0x0e, 0x09, 0x48, 0x00, 2182 0x00, 0x19, 0x58, AVRCP_ABORT_CONTINUING , 2185  `g_‹¡_run (); 2186 } } @unit/test-crc.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~"mÚ™Ü/üc.h " 30  ~ 32  süc_d©a { 33 cÚ¡ * m·ck‘ ; 34 size_t msize ; 35 ušt32_t müc_š™ ; 38 cÚ¡  g·ck‘_1 [] = { 45 cÚ¡  üc_d©a güc_1 = { 46 . ·ck‘ = ·ck‘_1 , 47 . gsize = ( ·ck‘_1 ), 50 cÚ¡  g·ck‘_2 [] = { 57 cÚ¡  üc_d©a güc_2 = { 58 . ·ck‘ = ·ck‘_2 , 59 . gsize = ( ·ck‘_2 ), 62 cÚ¡  g·ck‘_3 [] = { 69 cÚ¡  üc_d©a güc_3 = { 70 . ·ck‘ = ·ck‘_3 , 71 . gsize = ( ·ck‘_3 ), 74 cÚ¡  g·ck‘_4 [] = { 81 cÚ¡  üc_d©a güc_4 = { 82 . ·ck‘ = ·ck‘_4 , 83 . gsize = ( ·ck‘_4 ), 86 cÚ¡  g·ck‘_5 [] = { 92 cÚ¡  üc_d©a güc_5 = { 93 . ·ck‘ = ·ck‘_5 , 94 . gsize = ( ·ck‘_5 ), 97 cÚ¡  g·ck‘_6 [] = { 104 cÚ¡  üc_d©a güc_6 = { 105 . ·ck‘ = ·ck‘_6 , 106 . gsize = ( ·ck‘_6 ), 109 cÚ¡  g·ck‘_7 [] = { 118 cÚ¡  üc_d©a güc_7 = { 119 . ·ck‘ = ·ck‘_7 , 120 . gsize = ( ·ck‘_7 ), 123 cÚ¡  g·ck‘_8 [] = { 128 cÚ¡  üc_d©a güc_8 = { 129 . ·ck‘ = ·ck‘_8 , 130 . gsize = ( ·ck‘_8 ), 131 . güc_š™ = 0x161dbe, 134 cÚ¡  g·ck‘_9 [] = { 141 cÚ¡  üc_d©a güc_9 = { 142 . ·ck‘ = ·ck‘_9 , 143 . gsize = ( ·ck‘_9 ), 144 . güc_š™ = 0x161dbe, 147  $‹¡_üc ( gcÚ¡poš‹r d©a ) 149 cÚ¡  üc_d©a * ‹¡_d©a = d©a ; 150 cÚ¡ ušt8_t * buf = ‹¡_d©a -> ·ck‘ +e¡_d©a-> size - 3; 151 ušt32_t üc_š™ , üc_v®ue , üc , »v ; 153 ià( ‹¡_d©a -> üc_š™ ) 154 üc_š™ = `üc24_b™_»v”£ ( ‹¡_d©a ->crc_init); 156 üc_š™ = `üc24_b™_»v”£ (0x555555); 158 üc_v®ue = buf [0] | buf[1] << 8 | buf[2] << 16; 160 üc = `üc24_ÿlcuÏ‹ ( üc_š™ , ‹¡_d©a -> ·ck‘ + 4, 161 ‹¡_d©a -> size - 7); 163 ià( `g_‹¡_v”bo£ ()) 164 `g_´št ("CRC: 0x%6.6x, Calculated: 0x%6.6x\n", 165 üc_v®ue , üc ); 167 `g_as£¹ ( üc_v®ue =ð üc ); 169 »v = `üc24_»v”£ ( üc_v®ue , ‹¡_d©a -> ·ck‘ + 4, 170 ‹¡_d©a -> size - 7); 172 ià( `g_‹¡_v”bo£ ()) 173 `g_´št ("Preset: 0x%6.6x, Calculated: 0x%6.6x\n", 174 üc_š™ , »v ); 176 `g_as£¹ ( üc_š™ =ð »v ); 177 } } 179  $maš ( ¬gc , * ¬gv []) 181 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 183 `g_‹¡_add_d©a_func ("/üc/1", & üc_1 , ‹¡_üc ); 184 `g_‹¡_add_d©a_func ("/üc/2", & üc_2 , ‹¡_üc ); 185 `g_‹¡_add_d©a_func ("/üc/3", & üc_3 , ‹¡_üc ); 186 `g_‹¡_add_d©a_func ("/üc/4", & üc_4 , ‹¡_üc ); 187 `g_‹¡_add_d©a_func ("/üc/5", & üc_5 , ‹¡_üc ); 188 `g_‹¡_add_d©a_func ("/üc/6", & üc_6 , ‹¡_üc ); 189 `g_‹¡_add_d©a_func ("/üc/7", & üc_7 , ‹¡_üc ); 190 `g_‹¡_add_d©a_func ("/üc/8", & üc_8 , ‹¡_üc ); 191 `g_‹¡_add_d©a_func ("/üc/9", & üc_9 , ‹¡_üc ); 193  `g_‹¡_run (); 194 } } @unit/test-crypto.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~"¤c/sh¬ed/üy±o.h " 30  ~<¡ršg.h > 31  ~ 33  bt_üy±o * güy±o ; 35  s‹¡_d©a { 36 cÚ¡ ušt8_t * mmsg ; 37 ušt16_t mmsg_Ën ; 38 cÚ¡ ušt8_t * mt ; 41 cÚ¡ ušt8_t gkey [] = { 46 cÚ¡ ušt8_t gmsg_1 [] = { 0x00 }; 48 cÚ¡ ušt8_t gt_msg_1 [] = { 52 cÚ¡  ‹¡_d©a g‹¡_d©a_1 = { 53 . msg = msg_1 , 54 . gmsg_Ën = 0, 55 . gt = t_msg_1 58 cÚ¡ ušt8_t gmsg_2 [] = { 64 cÚ¡ ušt8_t gt_msg_2 [] = { 68 cÚ¡  ‹¡_d©a g‹¡_d©a_2 = { 69 . msg = msg_2 , 70 . gmsg_Ën = 16, 71 . gt = t_msg_2 74 cÚ¡ ušt8_t gmsg_3 [] = { 81 cÚ¡ ušt8_t gt_msg_3 [12] = { 85 cÚ¡  ‹¡_d©a g‹¡_d©a_3 = { 86 . msg = msg_3 , 87 . gmsg_Ën = 40, 88 . gt = t_msg_3 91 cÚ¡ ušt8_t gmsg_4 [] = { 100 cÚ¡ ušt8_t gt_msg_4 [12] = { 104 cÚ¡  ‹¡_d©a g‹¡_d©a_4 = { 105 . msg = msg_4 , 106 . gmsg_Ën = 64, 107 . gt = t_msg_4 110  $´št_buf (cÚ¡ ušt8_t * t , ušt8_ˆ Ën ) 112  i ; 114  i = 0; i < Ën ; i++) 115 `g_´št ("0x%02x, ", t [ i ]); 117 `g_´št ("\n"); 118 } } 120  boÞ $»suÉ_com·» (cÚ¡ ušt8_t exp [12], ušt8_ˆ »s [12]) 122  i ; 123  i = 0; i < 12; i++) 124 ià( exp [ i ] !ð »s [i]) 125  çl£ ; 127  Œue ; 128 } } 130  $‹¡_sign ( gcÚ¡poš‹r d©a ) 132 ušt8_t t [12]; 133 cÚ¡  ‹¡_d©a * d = d©a ; 135 `mem£t ( t , 0, 12); 136 ià(! `bt_üy±o_sign_©t ( üy±o , key , d -> msg , d-> msg_Ën , 0, t )) 137 `g_as£¹ ( Œue ); 139 ià( `g_‹¡_v”bo£ ()) { 140 `g_´št ("Result T: "); 141 `´št_buf ( t , 12); 142 `g_´št ("Expected T:"); 143 `´št_buf ( d -> t , 12); 146 `g_as£¹ ( `»suÉ_com·» ( d -> t ,)); 147 } } 149  $maš ( ¬gc , * ¬gv []) 151  ex™_¡©us ; 153 üy±o = `bt_üy±o_Ãw (); 154 ià(! üy±o ) 157 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 159 `g_‹¡_add_d©a_func ("/üy±o/sign_©t_1", & ‹¡_d©a_1 , ‹¡_sign ); 160 `g_‹¡_add_d©a_func ("/üy±o/sign_©t_2", & ‹¡_d©a_2 , ‹¡_sign ); 161 `g_‹¡_add_d©a_func ("/üy±o/sign_©t_3", & ‹¡_d©a_3 , ‹¡_sign ); 162 `g_‹¡_add_d©a_func ("/üy±o/sign_©t_4", & ‹¡_d©a_4 , ‹¡_sign ); 164 ex™_¡©us = `g_‹¡_run (); 166 `bt_üy±o_uÄef ( üy±o ); 168  ex™_¡©us ; 169 } } @unit/test-ecc.c 27 #ifdeà HAVE_CONFIG_H 28  ~ 31  ~ 33  ~<¡dio.h > 34  ~<¡dboÞ.h > 35  ~<¡ršg.h > 36  ~ 37  ~ 39  ~"¤c/sh¬ed/ecc.h " 41  $vli_´št ( ušt8_t * vli , size_t size ) 43  size ) { 44 `´štf ("%02X ", vli [ size - 1]); 45 size --; 47 } } 49  #PAIR_COUNT 200 ) 51  $‹¡_muÉi () 53 ušt8_t public1 [64], public2 [64]; 54 ušt8_t ´iv©e1 [32], ´iv©e2 [32]; 55 ušt8_t sh¬ed1 [32], sh¬ed2 [32]; 56  i ; 58 ià( `g_‹¡_v”bo£ ()) 59 `g_´št ("Te¡šg %u„ªdom…riv©key…aœs", PAIR_COUNT ); 61  i = 0; i < PAIR_COUNT ; i++) { 62 ià( `g_‹¡_v”bo£ ()) { 63 `´štf ("."); 64 `fæush ( ¡dout ); 67 `ecc_make_key ( public1 , ´iv©e1 ); 68 `ecc_make_key ( public2 , ´iv©e2 ); 70 `ecdh_sh¬ed_£ü‘ ( public1 , ´iv©e2 , sh¬ed1 ); 71 `ecdh_sh¬ed_£ü‘ ( public2 , ´iv©e1 , sh¬ed2 ); 73 ià( `memcmp ( sh¬ed1 , sh¬ed2 , (shared1)) != 0) { 74 `´štf ("Shared secrets‡re‚ot identical!\n"); 75 `´štf ("Shared secret 1 = "); 76 `vli_´št ( sh¬ed1 , (shared1)); 77 `´štf ("\n"); 78 `´štf ("Shared secret 2 = "); 79 `vli_´št ( sh¬ed2 , (shared2)); 80 `´štf ("\n"); 81 `´štf ("Private key 1 = "); 82 `vli_´št ( ´iv©e1 , (private1)); 83 `´štf ("\n"); 84 `´štf ("Private key 2 = "); 85 `vli_´št ( ´iv©e2 , (private2)); 86 `´štf ("\n"); 87 `g_as£¹_nÙ_»ached (); 91 ià( `g_‹¡_v”bo£ ()) 92 `´štf ("\n"); 93 } } 95  $´št_buf (cÚ¡ * Ïb– , ušt8_t * buf , size_t Ën ) 97 size_t i ; 99 `´štf ("% ", Ïb– ); 101  i = 0; i < Ën ; i++) 102 `´štf ("%02x", buf [ i ]); 104 `´štf ("\n"); 105 } } 107  $‹¡_§m¶e ( ušt8_t ´iv_a [32], ušt8_ˆ ´iv_b [32], 108 ušt8_t pub_a [64], ušt8_ˆ pub_b [64], 109 ušt8_t dhkey [32]) 111 ušt8_t dhkey_a [32], dhkey_b [32]; 112  çžs = 0; 114 `ecdh_sh¬ed_£ü‘ ( pub_b , ´iv_a , dhkey_a ); 115 `ecdh_sh¬ed_£ü‘ ( pub_a , ´iv_b , dhkey_b ); 117 ià( `g_‹¡_v”bo£ ()) { 118 `´št_buf ("DHKey ", dhkey , 32); 119 `´št_buf ("DHKey A", dhkey_a , 32); 120 `´št_buf ("DHKey B", dhkey_b , 32); 123 ià( `memcmp ( dhkey_a , dhkey , 32)) { 124 ià( `g_‹¡_v”bo£ ()) 125 `´štf ("DHKey A doesn't match!\n"); 126 çžs ++; 128 ià( `g_‹¡_v”bo£ ()) 129 `´štf ("DHKey A matches :)\n"); 132 ià( `memcmp ( dhkey_b , dhkey , 32)) { 133 ià( `g_‹¡_v”bo£ ()) 134 `´štf ("DHKey B doesn't match!\n"); 135 çžs ++; 137 ià( `g_‹¡_v”bo£ ()) 138 `´štf ("DHKey B matches :)\n"); 141  çžs ; 142 } } 144  $‹¡_§m¶e_1 () 146 ušt8_t ´iv_a [32] = { 0xbd, 0x1a, 0x3c, 0xcd, 0xa6, 0xb8, 0x99, 0x58, 151 ušt8_t ´iv_b [32] = { 0xfd, 0xc5, 0x7f, 0xf4, 0x49, 0xdd, 0x4f, 0x6b, 156 ušt8_t pub_a [64] = { 0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc, 166 ušt8_t pub_b [64] = { 0x90, 0xa1, 0xaa, 0x2f, 0xb2, 0x77, 0x90, 0x55, 176 ušt8_t dhkey [32] = { 0x98, 0xa6, 0xbf, 0x73, 0xf3, 0x34, 0x8d, 0x86, 181  çžs ; 183 çžs = `‹¡_§m¶e ( ´iv_a , ´iv_b , pub_a , pub_b , dhkey ); 185 `g_as£¹ ( çžs == 0); 186 } } 188  $‹¡_§m¶e_2 () 190 ušt8_t ´iv_a [32] = { 0x63, 0x76, 0x45, 0xd0, 0xf7, 0x73, 0xac, 0xb7, 195 ušt8_t ´iv_b [32] = { 0xba, 0x30, 0x55, 0x50, 0x19, 0xa2, 0xca, 0xa3, 200 ušt8_t pub_a [64] = { 0xdd, 0x78, 0x5c, 0x74, 0x03, 0x9b, 0x7e, 0x98, 210 ušt8_t pub_b [64] = { 0xcc, 0x00, 0x65, 0xe1, 0xf5, 0x6c, 0x0d, 0xcf, 220 ušt8_t dhkey [32] = { 0x69, 0xeb, 0x21, 0x32, 0xf2, 0xc6, 0x05, 0x41, 225  çžs ; 227 çžs = `‹¡_§m¶e ( ´iv_a , ´iv_b , pub_a , pub_b , dhkey ); 229 `g_as£¹ ( çžs == 0); 230 } } 232  $‹¡_§m¶e_3 () 234 ušt8_t ´iv_a [32] = { 0xbd, 0x1a, 0x3c, 0xcd, 0xa6, 0xb8, 0x99, 0x58, 239 ušt8_t pub_a [64] = { 0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc, 249 ušt8_t dhkey [32] = { 0x2d, 0xab, 0x00, 0x48, 0xcb, 0xb3, 0x7b, 0xda, 254  çžs ; 256 çžs = `‹¡_§m¶e ( ´iv_a ,…riv_a, pub_a ,…ub_a, dhkey ); 258 `g_as£¹ ( çžs == 0); 259 } } 261  $maš ( ¬gc , * ¬gv []) 263 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 265 `g_‹¡_add_func ("/ecdh/muÉi", ‹¡_muÉi ); 267 `g_‹¡_add_func ("/ecdh/§m¶e/1", ‹¡_§m¶e_1 ); 268 `g_‹¡_add_func ("/ecdh/§m¶e/2", ‹¡_§m¶e_2 ); 269 `g_‹¡_add_func ("/ecdh/§m¶e/3", ‹¡_§m¶e_3 ); 271  `g_‹¡_run (); 272 } } @unit/test-eir.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dboÞ.h > 30  ~ 32  ~ 33  ~ 34  ~ 36  ~"¤c/eœ.h " 38  s‹¡_d©a { 39 cÚ¡ * meœ_d©a ; 40 size_t meœ_size ; 41  mæags ; 42 cÚ¡ * mÇme ; 43 boÞ mÇme_com¶‘e ; 44 št8_t mtx_pow” ; 45 cÚ¡ ** muuid ; 48 cÚ¡  gmacbookaœ_d©a [] = { 81 cÚ¡ * gmacbookaœ_uuid [] = { 90 NULL 93 cÚ¡  ‹¡_d©a gmacbookaœ_‹¡ = { 94 . eœ_d©a = macbookaœ_d©a , 95 . geœ_size = ( macbookaœ_d©a ), 96 . gÇme = "Marcel’s MacBook Air", 97 . gÇme_com¶‘e = Œue , 98 . gtx_pow” = 127, 99 . guuid = macbookaœ_uuid , 102 cÚ¡  ghÚe5_d©a [] = { 135 cÚ¡ * ghÚe5_uuid [] = { 144 NULL 147 cÚ¡  ‹¡_d©a ghÚe5_‹¡ = { 148 . eœ_d©a = hÚe5_d©a , 149 . geœ_size = ( hÚe5_d©a ), 150 . gÇme = "Marcel’s iPhone 5", 151 . gÇme_com¶‘e = Œue , 152 . gtx_pow” = 127, 153 . guuid = hÚe5_uuid , 156 cÚ¡  gadmši_d©a [] = { 189 cÚ¡ * gadmši_uuid [] = { 196 NULL 199 cÚ¡  ‹¡_d©a gadmši_‹¡ = { 200 . eœ_d©a = admši_d©a , 201 . geœ_size = ( admši_d©a ), 202 . gÇme = "Marcel's iPad mini", 203 . gÇme_com¶‘e = Œue , 204 . gtx_pow” = 127, 205 . guuid = admši_uuid , 208 cÚ¡  ggiga£t_¦400h_d©a [] = { 241 cÚ¡ * ggiga£t_¦400h_uuid [] = { 247 NULL 250 cÚ¡  ‹¡_d©a ggiga£t_¦400h_‹¡ = { 251 . eœ_d©a = giga£t_¦400h_d©a , 252 . geœ_size = ( giga£t_¦400h_d©a ), 253 . gÇme = "Marcel's SL400H", 254 . gÇme_com¶‘e = Œue , 255 . gtx_pow” = 127, 256 . guuid = giga£t_¦400h_uuid , 259 cÚ¡  ggiga£t_¦910_d©a [] = { 292 cÚ¡ * ggiga£t_¦910_uuid [] = { 298 NULL 301 cÚ¡  ‹¡_d©a ggiga£t_¦910_‹¡ = { 302 . eœ_d©a = giga£t_¦910_d©a , 303 . geœ_size = ( giga£t_¦910_d©a ), 304 . gÇme = "Marcel's SL910", 305 . gÇme_com¶‘e = Œue , 306 . gtx_pow” = 127, 307 . guuid = giga£t_¦910_uuid , 310 cÚ¡  gnokŸ_bh907_d©a [] = { 343 cÚ¡ * gnokŸ_bh907_uuid [] = { 351 NULL 354 cÚ¡  ‹¡_d©a gnokŸ_bh907_‹¡ = { 355 . eœ_d©a = nokŸ_bh907_d©a , 356 . geœ_size = ( nokŸ_bh907_d©a ), 357 . gÇme = "Nokia Reaction BH-907", 358 . gÇme_com¶‘e = Œue , 359 . gtx_pow” = 4, 360 . guuid = nokŸ_bh907_uuid , 363 cÚ¡  gfu–bªd_d©a [] = { 396 cÚ¡ * gfu–bªd_uuid [] = { 398 NULL 401 cÚ¡  ‹¡_d©a gfu–bªd_‹¡ = { 402 . eœ_d©a = fu–bªd_d©a , 403 . geœ_size = ( fu–bªd_d©a ), 404 . gÇme = "Nike+ FuelBand", 405 . gÇme_com¶‘e = Œue , 406 . gtx_pow” = 0, 407 . guuid = fu–bªd_uuid , 410 cÚ¡  gbluesc_d©a [] = { 417 cÚ¡ * gbluesc_uuid [] = { 419 NULL 422 cÚ¡  ‹¡_d©a gbluesc_‹¡ = { 423 . eœ_d©a = bluesc_d©a , 424 . geœ_size = ( bluesc_d©a ), 425 . gæags = 0x06, 426 . gÇme = "Wahoo BlueSC v1.4", 427 . gÇme_com¶‘e = Œue , 428 . gtx_pow” = 127, 429 . guuid = bluesc_uuid , 432 cÚ¡  gwahoo_sÿË_d©a [] = { 439 cÚ¡ * gwahoo_sÿË_uuid [] = { 441 NULL 444 cÚ¡  ‹¡_d©a gwahoo_sÿË_‹¡ = { 445 . eœ_d©a = wahoo_sÿË_d©a , 446 . geœ_size = ( wahoo_sÿË_d©a ), 447 . gæags = 0x06, 448 . gÇme = "Wahoo Scale v1.3", 449 . gÇme_com¶‘e = Œue , 450 . gtx_pow” = 127, 451 . guuid = wahoo_sÿË_uuid , 454 cÚ¡  gmio_®pha_d©a [] = { 459 cÚ¡ * gmio_®pha_uuid [] = { 461 NULL 464 cÚ¡  ‹¡_d©a gmio_®pha_‹¡ = { 465 . eœ_d©a = mio_®pha_d©a , 466 . geœ_size = ( mio_®pha_d©a ), 467 . gæags = 0x06, 468 . gÇme = "ALPHA", 469 . gÇme_com¶‘e = Œue , 470 . gtx_pow” = 127, 471 . guuid = mio_®pha_uuid , 474 cÚ¡  gcookoo_d©a [] = { 480 cÚ¡ * gcookoo_uuid [] = { 483 NULL 486 cÚ¡  ‹¡_d©a gcookoo_‹¡ = { 487 . eœ_d©a = cookoo_d©a , 488 . geœ_size = ( cookoo_d©a ), 489 . gæags = 0x05, 490 . gÇme = "COOKOO watch", 491 . gÇme_com¶‘e = Œue , 492 . gtx_pow” = 127, 493 . guuid = cookoo_uuid , 496 cÚ¡  gc™iz’_adv_d©a [] = { 503 cÚ¡  ‹¡_d©a gc™iz’_adv_‹¡ = { 504 . eœ_d©a = c™iz’_adv_d©a , 505 . geœ_size = ( c™iz’_adv_d©a ), 506 . gæags = 0x05, 507 . gÇme = "Eco-Drive Proximity", 508 . gÇme_com¶‘e = Œue , 509 . gtx_pow” = 127, 512 cÚ¡  gc™iz’_sÿn_d©a [] = { 518 cÚ¡ * gc™iz’_sÿn_uuid [] = { 520 NULL 523 cÚ¡  ‹¡_d©a gc™iz’_sÿn_‹¡ = { 524 . eœ_d©a = c™iz’_sÿn_d©a , 525 . geœ_size = ( c™iz’_sÿn_d©a ), 526 . gtx_pow” = 0, 527 . guuid = c™iz’_sÿn_uuid , 530  $‹¡_basic () 532  eœ_d©a d©a ; 533  buf [ HCI_MAX_EIR_LENGTH ]; 535 `mem£t ( buf , 0, (buf)); 536 `mem£t (& d©a , 0, (data)); 538 `eœ_·r£ (& d©a , buf , HCI_MAX_EIR_LENGTH ); 539 `g_as£¹ ( d©a . £rviûs =ð NULL ); 540 `g_as£¹ ( d©a . Çme =ð NULL ); 542 `eœ_d©a_ä“ (& d©a ); 543 } } 545  $‹¡_·rsšg ( gcÚ¡poš‹r d©a ) 547 cÚ¡  ‹¡_d©a * ‹¡ = d©a ; 548  eœ_d©a eœ ; 550 `mem£t (& eœ , 0, (eir)); 552 `eœ_·r£ (& eœ , ‹¡ -> eœ_d©a ,e¡-> eœ_size ); 554 ià( `g_‹¡_v”bo£ (è=ð TRUE ) { 555 GSLi¡ * li¡ ; 557 `g_´št ("FÏgs: %d\n", eœ . æags ); 558 `g_´št ("Name: %s\n", eœ . Çme ); 559 `g_´št ("TX…ow”: %d\n", eœ . tx_pow” ); 561  li¡ = eœ . £rviûs ;†i¡;†i¡ =†i¡-> Ãxt ) { 562 * uuid_¡r = li¡ -> d©a ; 563 `g_´št ("UUID: %s\n", uuid_¡r ); 567 `g_as£¹ ( eœ . æags =ð ‹¡ ->flags); 569 ià( ‹¡ -> Çme ) { 570 `g_as£¹_cmp¡r ( eœ . Çme , ==, ‹¡ ->name); 571 `g_as£¹ ( eœ . Çme_com¶‘e =ð ‹¡ ->name_complete); 573 `g_as£¹ ( eœ . Çme =ð NULL ); 576 `g_as£¹ ( eœ . tx_pow” =ð ‹¡ ->tx_power); 578 ià( ‹¡ -> uuid ) { 579 GSLi¡ * li¡ ; 580  n = 0; 582  li¡ = eœ . £rviûs ;†i¡;†i¡ =†i¡-> Ãxt , n ++) { 583 * uuid_¡r = li¡ -> d©a ; 584 `g_as£¹ ( ‹¡ -> uuid [ n ]); 585 `g_as£¹_cmp¡r ( ‹¡ -> uuid [ n ], ==, uuid_¡r ); 588 `g_as£¹ ( eœ . £rviûs =ð NULL ); 591 `eœ_d©a_ä“ (& eœ ); 592 } } 594  $maš ( ¬gc , * ¬gv []) 596 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 598 `g_‹¡_add_func ("/eœ/basic", ‹¡_basic ); 600 `g_‹¡_add_d©a_func ("/eœ/macbookaœ", & macbookaœ_‹¡ , ‹¡_·rsšg ); 601 `g_‹¡_add_d©a_func ("/eœ/hÚe5", & hÚe5_‹¡ , ‹¡_·rsšg ); 602 `g_‹¡_add_d©a_func ("/eœ/admši", & admši_‹¡ , ‹¡_·rsšg ); 603 `g_‹¡_add_d©a_func ("/eœ/¦400h", & giga£t_¦400h_‹¡ , ‹¡_·rsšg ); 604 `g_‹¡_add_d©a_func ("/eœ/¦910", & giga£t_¦910_‹¡ , ‹¡_·rsšg ); 605 `g_‹¡_add_d©a_func ("/eœ/bh907", & nokŸ_bh907_‹¡ , ‹¡_·rsšg ); 606 `g_‹¡_add_d©a_func ("/eœ/fu–bªd", & fu–bªd_‹¡ , ‹¡_·rsšg ); 607 `g_‹¡_add_d©a_func ("/ad/bluesc", & bluesc_‹¡ , ‹¡_·rsšg ); 608 `g_‹¡_add_d©a_func ("/ad/wahoosÿË", & wahoo_sÿË_‹¡ , ‹¡_·rsšg ); 609 `g_‹¡_add_d©a_func ("/ad/mißÍha", & mio_®pha_‹¡ , ‹¡_·rsšg ); 610 `g_‹¡_add_d©a_func ("/ad/cookoo", & cookoo_‹¡ , ‹¡_·rsšg ); 611 `g_‹¡_add_d©a_func ("/ad/c™iz’1", & c™iz’_adv_‹¡ , ‹¡_·rsšg ); 612 `g_‹¡_add_d©a_func ("/ad/c™iz’2", & c™iz’_sÿn_‹¡ , ‹¡_·rsšg ); 614  `g_‹¡_run (); 615 } } @unit/test-gatt.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~<¡dlib.h > 30  ~<¡dboÞ.h > 31  ~<š‰y³s.h > 32  ~<¡ršg.h > 33  ~ 34  ~ 36  ~ 38  ~"lib/uuid.h " 39  ~"¤c/sh¬ed/utž.h " 40  ~"¤c/sh¬ed/©t.h " 41  ~"¤c/sh¬ed/g©t-h–³rs.h " 42  ~"¤c/sh¬ed/queue.h " 43  ~"¤c/sh¬ed/g©t-db.h " 44  ~"¤c/sh¬ed/g©t-£rv”.h " 45  ~"¤c/sh¬ed/g©t-þ›Á.h " 47  s‹¡_pdu { 48 boÞ mv®id ; 49 cÚ¡ ušt8_t * md©a ; 50 size_t msize ; 53 ecÚ‹xt_ty³ { 54 mATT , 55 mCLIENT , 56 mSERVER 59  s‹¡_d©a { 60 * m‹¡_Çme ; 61  ‹¡_pdu * mpdu_li¡ ; 62 cÚ‹xt_ty³ mcÚ‹xt_ty³ ; 63 bt_uuid_t * muuid ; 64  g©t_db * msourû_db ; 65 cÚ¡ * m¡• ; 68  scÚ‹xt { 69 GMašLoÝ * mmaš_loÝ ; 70  bt_g©t_þ›Á * mþ›Á ; 71  bt_g©t_£rv” * m£rv” ; 72  bt_©t * m©t ; 73  g©t_db * mþ›Á_db ; 74  g©t_db * m£rv”_db ; 75 gušt msourû ; 76 gušt m´oûss ; 77  mfd ; 78  mpdu_off£t ; 79 cÚ¡  ‹¡_d©a * md©a ; 82  #d©a ( ¬gs ...è((cÚ¡ []è{‡rg }) ) 84  #¿w_pdu ( ¬gs ...) \ 86 . v®id = Œue , \ 87 . d©a = `d©a ( ¬gs ), \ 88 . size = ( `d©a ( ¬gs )), \ 89 } ) 91  #defše_‹¡ ( Çme , funùiÚ , ty³ , bt_uuid , db , \ 92 ‹¡_¡• , ¬gs ...) \ 94 cÚ¡  ‹¡_pdu pdus [] = { \ 95 ¬gs , { } \ 97  ‹¡_d©a d©a ; \ 98 d©a . ‹¡_Çme = `g_¡rdup ( Çme ); \ 99 d©a . cÚ‹xt_ty³ = ty³ ; \ 100 d©a . uuid = bt_uuid ; \ 101 d©a . ¡• = ‹¡_¡• ; \ 102 d©a . sourû_db = db ; \ 103 d©a . pdu_li¡ = `g_m®loc (( pdus )); \ 104 `memýy ( d©a . pdu_li¡ , pdus , (pdus)); \ 105 `g_‹¡_add_d©a_func ( Çme , & d©a , funùiÚ ); \ 106 } 0) ) 108  #defše_‹¡_©t ( Çme , funùiÚ , bt_uuid , ‹¡_¡• , ¬gs ...) \ 109 `defše_‹¡ ( Çme , funùiÚ , ATT , bt_uuid , NULL , ‹¡_¡• , ¬gs ) ) 111  #defše_‹¡_þ›Á ( Çme , funùiÚ , sourû_db , ‹¡_¡• , ¬gs ...)\ 112 `defše_‹¡ ( Çme , funùiÚ , CLIENT , NULL , sourû_db , ‹¡_¡• , ¬gs ) ) 114  #defše_‹¡_£rv” ( Çme , funùiÚ , sourû_db , ‹¡_¡• , ¬gs ...)\ 115 `defše_‹¡ ( Çme , funùiÚ , SERVER , NULL , sourû_db , ‹¡_¡• , ¬gs ) ) 117  #MTU_EXCHANGE_CLIENT_PDUS \ 118 `¿w_pdu (0x02, 0x00, 0x02), \ 119 `¿w_pdu (0x03, 0x00, 0x02) ) 121  #SERVICE_DATA_1_PDUS \ 122 MTU_EXCHANGE_CLIENT_PDUS , \ 123 `¿w_pdu (0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), \ 124 `¿w_pdu (0x11, 0x06, 0x01, 0x00, 0x04, 0x00, 0x01, 0x18),\ 125 `¿w_pdu (0x10, 0x05, 0x00, 0xff, 0xff, 0x00, 0x28), \ 126 `¿w_pdu (0x11, 0x06, 0x05, 0x00, 0x08, 0x00, 0x0d, 0x18),\ 127 `¿w_pdu (0x10, 0x09, 0x00, 0xff, 0xff, 0x00, 0x28), \ 128 `¿w_pdu (0x01, 0x10, 0x09, 0x00, 0x0a), \ 129 `¿w_pdu (0x10, 0x01, 0x00, 0xff, 0xff, 0x01, 0x28), \ 130 `¿w_pdu (0x01, 0x10, 0x01, 0x00, 0x0a), \ 131 `¿w_pdu (0x08, 0x01, 0x00, 0x04, 0x00, 0x02, 0x28), \ 132 `¿w_pdu (0x01, 0x08, 0x01, 0x00, 0x0a), \ 133 `¿w_pdu (0x08, 0x05, 0x00, 0x08, 0x00, 0x02, 0x28), \ 134 `¿w_pdu (0x01, 0x08, 0x05, 0x00, 0x0a), \ 135 `¿w_pdu (0x08, 0x01, 0x00, 0x04, 0x00, 0x03, 0x28), \ 136 `¿w_pdu (0x09, 0x07, 0x02, 0x00, 0x02, 0x03, 0x00, 0x00, \ 138 `¿w_pdu (0x08, 0x03, 0x00, 0x04, 0x00, 0x03, 0x28), \ 139 `¿w_pdu (0x01, 0x08, 0x03, 0x00, 0x0a), \ 140 `¿w_pdu (0x04, 0x04, 0x00, 0x04, 0x00), \ 141 `¿w_pdu (0x05, 0x01, 0x04, 0x00, 0x01, 0x29), \ 142 `¿w_pdu (0x08, 0x05, 0x00, 0x08, 0x00, 0x03, 0x28), \ 143 `¿w_pdu (0x09, 0x07, 0x06, 0x00, 0x02, 0x07, 0x00, 0x29, \ 145 `¿w_pdu (0x08, 0x07, 0x00, 0x08, 0x00, 0x03, 0x28), \ 146 `¿w_pdu (0x01, 0x08, 0x07, 0x00, 0x0a), \ 147 `¿w_pdu (0x04, 0x08, 0x00, 0x08, 0x00), \ 148 `¿w_pdu (0x05, 0x01, 0x08, 0x00, 0x01, 0x29) ) 150  #PRIMARY_DISC_SMALL_DB \ 151 `¿w_pdu (0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), \ 152 `¿w_pdu (0x11, 0x06, 0x10, 0xF0, 0x15, 0xF0, 0x00, 0x18, \ 153 0xFF, 0xFF, 0xFF, 0xFF, 0x0a, 0x18) ) 155  #SECONDARY_DISC_SMALL_DB \ 156 `¿w_pdu (0x10, 0x01, 0x00, 0xff, 0xff, 0x01, 0x28), \ 157 `¿w_pdu (0x11, 0x06, 0x01, 0x00, 0x0F, 0x00, 0x0a, 0x18),\ 158 `¿w_pdu (0x10, 0x10, 0x00, 0xff, 0xff, 0x01, 0x28), \ 159 `¿w_pdu (0x01, 0x10, 0x10, 0x00, 0x0a) ) 161  #SERVER_MTU_EXCHANGE_PDU `¿w_pdu (0x02, 0x17, 0x00) ) 163  bt_uuid_t guuid_16 = { 164 . ty³ = BT_UUID16 , 165 . gv®ue . gu16 = 0x1800 168  bt_uuid_t guuid_ch¬_16 = { 169 . ty³ = BT_UUID16 , 170 . gv®ue . gu16 = 0x2a0d 173  bt_uuid_t guuid_128 = { 174 . ty³ = BT_UUID128 , 175 . gv®ue . gu128 . gd©a = {0x00, 0x00, 0x18, 0x0d, 0x00, 0x00, 0x10, 0x00, 179  bt_uuid_t guuid_ch¬_128 = { 180 . ty³ = BT_UUID128 , 181 . gv®ue . gu128 . gd©a = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 185  $‹¡_debug (cÚ¡ * ¡r , * u£r_d©a ) 187 cÚ¡ * ´efix = u£r_d©a ; 189 `g_´št ("%s%s\n", ´efix , ¡r ); 190 } } 192  $‹¡_ä“ ( gcÚ¡poš‹r u£r_d©a ) 194 cÚ¡  ‹¡_d©a * d©a = u£r_d©a ; 196 `g_ä“ ( d©a -> ‹¡_Çme ); 197 `g_ä“ ( d©a -> pdu_li¡ ); 198 } } 200  gboÞ—n $cÚ‹xt_qu™ ( gpoš‹r u£r_d©a ) 202  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 204 ià( cÚ‹xt -> ´oûss > 0) 205 `g_sourû_»move ( cÚ‹xt -> ´oûss ); 207 `g_maš_loÝ_qu™ ( cÚ‹xt -> maš_loÝ ); 209  FALSE ; 210 } } 212  gboÞ—n $£nd_pdu ( gpoš‹r u£r_d©a ) 214  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 215 cÚ¡  ‹¡_pdu * pdu ; 216 ssize_t Ën ; 218 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 220 Ën = `wr™e ( cÚ‹xt -> fd , pdu -> d©a ,…du-> size ); 222 ià( `g_‹¡_v”bo£ ()) 223 `utž_hexdump ('<', pdu -> d©a , Ën , ‹¡_debug , "GATT: "); 225 `g_as£¹_cmpšt ( Ën , ==, pdu -> size ); 227 cÚ‹xt -> ´oûss = 0; 228  FALSE ; 229 } } 231  $cÚ‹xt_´oûss ( cÚ‹xt *context) 234 ià(! cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ]. v®id ) { 235 `cÚ‹xt_qu™ ( cÚ‹xt ); 239 cÚ‹xt -> ´oûss = `g_idË_add ( £nd_pdu , context); 240 } } 242  gboÞ—n $‹¡_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 243 gpoš‹r u£r_d©a ) 245  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 246 cÚ¡  ‹¡_pdu * pdu ; 247  buf [512]; 248 ssize_t Ën ; 249  fd ; 251 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 253 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 254 cÚ‹xt -> sourû = 0; 255 `g_´št ("%s: cÚd %x\n", __func__ , cÚd ); 256  FALSE ; 259 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 261 Ën = `»ad ( fd , buf , (buf)); 263 `g_as£¹ ( Ën > 0); 265 ià( `g_‹¡_v”bo£ ()) 266 `utž_hexdump ('>', buf , Ën , ‹¡_debug , "GATT: "); 268 `g_as£¹_cmpšt ( Ën , ==, pdu -> size ); 270 `g_as£¹ ( `memcmp ( buf , pdu -> d©a ,…du-> size ) == 0); 272 `cÚ‹xt_´oûss ( cÚ‹xt ); 274  TRUE ; 275 } } 277  $´št_debug (cÚ¡ * ¡r , * u£r_d©a ) 279 cÚ¡ * ´efix = u£r_d©a ; 281 `g_´št ("%s%s\n", ´efix , ¡r ); 282 } } 284 (* t‹¡_¡•_t )( tcÚ‹xt *context); 286  s‹¡_¡• { 287 ‹¡_¡•_t func ; 288 ušt16_t hªdË ; 289 ušt16_t ’d_hªdË ; 290 ušt8_t uuid [16]; 291 ušt8_t ex³ùed_©t_ecode ; 292 cÚ¡ ušt8_t * v®ue ; 293 ušt16_t Ëngth ; 296  sdb_©Œibu‹_‹¡_d©a { 297  g©t_db_©Œibu‹ * m©ch ; 298 boÞ found ; 301  boÞ $m©chšg_desc_d©a ( g©t_db_©Œibu‹ * a , 302  g©t_db_©Œibu‹ * b ) 304 ušt16_t a_hªdË , b_hªdË ; 305 cÚ¡ bt_uuid_t * a_uuid , * b_uuid ; 307 a_hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( a ); 308 b_hªdË = `g©t_db_©Œibu‹_g‘_hªdË ( b ); 310 a_uuid = `g©t_db_©Œibu‹_g‘_ty³ ( a ); 311 b_uuid = `g©t_db_©Œibu‹_g‘_ty³ ( b ); 313  a_hªdË =ð b_hªdË && ! `bt_uuid_cmp ( a_uuid , b_uuid ); 314 } } 316  $fšd_m©chšg_desc ( g©t_db_©Œibu‹ * sourû_desc_©Œ , 317 * u£r_d©a ) 319  db_©Œibu‹_‹¡_d©a * desc_‹¡_d©a = u£r_d©a ; 321 ià( desc_‹¡_d©a -> found ) 324 desc_‹¡_d©a -> found = `m©chšg_desc_d©a (desc_‹¡_d©a-> m©ch , 325 sourû_desc_©Œ ); 326 } } 328  $m©ch_descs ( g©t_db_©Œibu‹ * þ›Á_desc_©Œ , 329 * u£r_d©a ) 331  g©t_db_©Œibu‹ * sourû_ch¬_©Œ = u£r_d©a ; 332  db_©Œibu‹_‹¡_d©a desc_‹¡_d©a ; 334 desc_‹¡_d©a . m©ch = þ›Á_desc_©Œ ; 335 desc_‹¡_d©a . found = çl£ ; 337 `g©t_db_£rviû_fÜ—ch_desc ( sourû_ch¬_©Œ , fšd_m©chšg_desc , 338 & desc_‹¡_d©a ); 340 `g_as£¹ ( desc_‹¡_d©a . found ); 341 } } 343  boÞ $m©chšg_ch¬_d©a ( g©t_db_©Œibu‹ * a , 344  g©t_db_©Œibu‹ * b ) 346 ušt16_t a_hªdË , b_hªdË , a_v®ue_hªdË , b_v®ue_hªdË ; 347 ušt8_t a_´Ý”t›s , b_´Ý”t›s ; 348 bt_uuid_t a_uuid , b_uuid ; 350 `g©t_db_©Œibu‹_g‘_ch¬_d©a ( a , & a_hªdË , & a_v®ue_hªdË , 351 & a_´Ý”t›s , & a_uuid ); 352 `g©t_db_©Œibu‹_g‘_ch¬_d©a ( b , & b_hªdË , & b_v®ue_hªdË , 353 & b_´Ý”t›s , & b_uuid ); 355  a_hªdË =ð b_hªdË && a_v®ue_hªdË =ð b_v®ue_hªdË && 356 a_´Ý”t›s =ð b_´Ý”t›s && 357 ! `bt_uuid_cmp (& a_uuid , & b_uuid ); 358 } } 360  $fšd_m©chšg_ch¬ ( g©t_db_©Œibu‹ * sourû_ch¬_©Œ , 361 * u£r_d©a ) 363  db_©Œibu‹_‹¡_d©a * ch¬_‹¡_d©a = u£r_d©a ; 365 ià( ch¬_‹¡_d©a -> found ) 368 ià( `m©chšg_ch¬_d©a ( ch¬_‹¡_d©a -> m©ch , sourû_ch¬_©Œ )) { 370 `g©t_db_£rviû_fÜ—ch_desc ( ch¬_‹¡_d©a -> m©ch , m©ch_descs , 371 sourû_ch¬_©Œ ); 372 ch¬_‹¡_d©a -> found = Œue ; 374 } } 376  $m©ch_ch¬s ( g©t_db_©Œibu‹ * þ›Á_ch¬_©Œ , 377 * u£r_d©a ) 379  g©t_db_©Œibu‹ * sourû_£rv_©Œ = u£r_d©a ; 380  db_©Œibu‹_‹¡_d©a ch¬_‹¡_d©a ; 382 ch¬_‹¡_d©a . m©ch = þ›Á_ch¬_©Œ ; 383 ch¬_‹¡_d©a . found = çl£ ; 385 `g©t_db_£rviû_fÜ—ch_ch¬ ( sourû_£rv_©Œ , fšd_m©chšg_ch¬ , 386 & ch¬_‹¡_d©a ); 388 `g_as£¹ ( ch¬_‹¡_d©a . found ); 389 } } 391  boÞ $m©chšg_£rviû_d©a ( g©t_db_©Œibu‹ * a , 392  g©t_db_©Œibu‹ * b ) 394 ušt16_t a_¡¬t , b_¡¬t , a_’d , b_’d ; 395 boÞ a_´im¬y , b_´im¬y ; 396 bt_uuid_t a_uuid , b_uuid ; 398 `g©t_db_©Œibu‹_g‘_£rviû_d©a ( a , & a_¡¬t , & a_’d , & a_´im¬y , 399 & a_uuid ); 400 `g©t_db_©Œibu‹_g‘_£rviû_d©a ( b , & b_¡¬t , & b_’d , & b_´im¬y , 401 & b_uuid ); 403  a_¡¬t =ð b_¡¬t && a_’d =ð b_’d && a_´im¬y =ð b_´im¬y && 404 ! `bt_uuid_cmp (& a_uuid , & b_uuid ); 405 } } 407  $fšd_m©chšg_£rviû ( g©t_db_©Œibu‹ * sourû_£rv_©Œ , 408 * u£r_d©a ) 410  db_©Œibu‹_‹¡_d©a * £rv_‹¡_d©a = u£r_d©a ; 412 ià( £rv_‹¡_d©a -> found ) 415 ià( `m©chšg_£rviû_d©a ( £rv_‹¡_d©a -> m©ch , sourû_£rv_©Œ )) { 416 `g©t_db_£rviû_fÜ—ch_ch¬ ( £rv_‹¡_d©a -> m©ch , m©ch_ch¬s , 417 sourû_£rv_©Œ ); 418 £rv_‹¡_d©a -> found = Œue ; 420 } } 422  $m©ch_£rviûs ( g©t_db_©Œibu‹ * þ›Á_£rv_©Œ , 423 * u£r_d©a ) 425  g©t_db * sourû_db = u£r_d©a ; 426  db_©Œibu‹_‹¡_d©a £rv_‹¡_d©a ; 428 £rv_‹¡_d©a . m©ch = þ›Á_£rv_©Œ ; 429 £rv_‹¡_d©a . found = çl£ ; 431 `g©t_db_fÜ—ch_£rviû ( sourû_db , NULL , 432 fšd_m©chšg_£rviû , & £rv_‹¡_d©a ); 434 `g_as£¹ ( £rv_‹¡_d©a . found ); 435 } } 437  $þ›Á_»ady_cb ( boÞ sucûss , ušt8_t ©t_ecode , * u£r_d©a ) 439  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 441 `g_as£¹ ( sucûss ); 443 ià(! cÚ‹xt -> d©a -> sourû_db ) { 444 `cÚ‹xt_qu™ ( cÚ‹xt ); 448 `g_as£¹ ( cÚ‹xt -> þ›Á ); 449 `g_as£¹ ( cÚ‹xt -> þ›Á_db ); 451 `g©t_db_fÜ—ch_£rviû ( cÚ‹xt -> þ›Á_db , NULL , m©ch_£rviûs , 452 cÚ‹xt -> d©a -> sourû_db ); 454 ià( cÚ‹xt -> d©a -> ¡• ) { 455 cÚ¡  ‹¡_¡• * ¡• = cÚ‹xt -> d©a ->step; 457 ¡• -> `func ( cÚ‹xt ); 461 `cÚ‹xt_qu™ ( cÚ‹xt ); 462 } } 464  cÚ‹xt * $ü—‹_cÚ‹xt ( ušt16_t mtu , gcÚ¡poš‹r d©a ) 466  cÚ‹xt *cÚ‹xˆð `g_Ãw0 (context, 1); 467 cÚ¡  ‹¡_d©a *‹¡_d©¨ð d©a ; 468 GIOChªÃl * chªÃl ; 469  ”r , sv [2]; 470  bt_©t * ©t ; 472 cÚ‹xt -> maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 473 `g_as£¹ ( cÚ‹xt -> maš_loÝ ); 475 ”r = `sock‘·œ ( AF_UNIX , SOCK_SEQPACKET | SOCK_CLOEXEC , 0, sv ); 476 `g_as£¹ ( ”r == 0); 478 ©t = `bt_©t_Ãw ( sv [0]); 479 `g_as£¹ ( ©t ); 481  ‹¡_d©a -> cÚ‹xt_ty³ ) { 482  ATT : 483 cÚ‹xt -> ©t =‡tt; 485 ià( `g_‹¡_v”bo£ ()) 486 `bt_©t_£t_debug ( cÚ‹xt -> ©t , ´št_debug , "bt_att:", 487 NULL ); 489 `bt_g©t_exchªge_mtu ( cÚ‹xt -> ©t , mtu , NULL , NULL, NULL); 491  SERVER : 492 cÚ‹xt -> £rv”_db = `g©t_db_»f ( ‹¡_d©a -> sourû_db ); 493 `g_as£¹ ( cÚ‹xt -> £rv”_db ); 495 cÚ‹xt -> £rv” = `bt_g©t_£rv”_Ãw (cÚ‹xt-> £rv”_db , ©t , 496 mtu ); 497 `g_as£¹ ( cÚ‹xt -> £rv” ); 499 ià( `g_‹¡_v”bo£ ()) 500 `bt_g©t_£rv”_£t_debug ( cÚ‹xt -> £rv” , ´št_debug , 501 "bt_g©t_£rv”:", NULL ); 502 `bt_©t_uÄef ( ©t ); 504  CLIENT : 505 cÚ‹xt -> þ›Á_db = `g©t_db_Ãw (); 506 `g_as£¹ ( cÚ‹xt -> þ›Á_db ); 508 cÚ‹xt -> þ›Á = `bt_g©t_þ›Á_Ãw (cÚ‹xt-> þ›Á_db , ©t , 509 mtu ); 510 `g_as£¹ ( cÚ‹xt -> þ›Á ); 512 ià( `g_‹¡_v”bo£ ()) 513 `bt_g©t_þ›Á_£t_debug ( cÚ‹xt -> þ›Á , ´št_debug , 514 "bt_g©t_þ›Á:", NULL ); 516 `bt_g©t_þ›Á_£t_»ady_hªdËr ( cÚ‹xt -> þ›Á , 517 þ›Á_»ady_cb , cÚ‹xt , NULL ); 519 `bt_©t_uÄef ( ©t ); 525 chªÃl = `g_io_chªÃl_unix_Ãw ( sv [1]); 527 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 528 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 529 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 531 cÚ‹xt -> sourû = `g_io_add_w©ch ( chªÃl , 532 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 533 ‹¡_hªdËr , cÚ‹xt ); 534 `g_as£¹ ( cÚ‹xt -> sourû > 0); 536 `g_io_chªÃl_uÄef ( chªÃl ); 538 cÚ‹xt -> fd = sv [1]; 539 cÚ‹xt -> d©a = data; 541  cÚ‹xt ; 542 } } 544  $g’”ic_£¬ch_cb ( boÞ sucûss , ušt8_t ©t_ecode , 545  bt_g©t_»suÉ * »suÉ , 546 * u£r_d©a ) 548  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 550 `g_as£¹ ( sucûss ); 552 `cÚ‹xt_qu™ ( cÚ‹xt ); 553 } } 555  $de¡roy_cÚ‹xt ( cÚ‹xt *context) 557 ià( cÚ‹xt -> sourû > 0) 558 `g_sourû_»move ( cÚ‹xt -> sourû ); 560 `bt_g©t_þ›Á_uÄef ( cÚ‹xt -> þ›Á ); 561 `bt_g©t_£rv”_uÄef ( cÚ‹xt -> £rv” ); 562 `g©t_db_uÄef ( cÚ‹xt -> þ›Á_db ); 563 `g©t_db_uÄef ( cÚ‹xt -> £rv”_db ); 565 ià( cÚ‹xt -> ©t ) 566 `bt_©t_uÄef ( cÚ‹xt -> ©t ); 568 `g_maš_loÝ_uÄef ( cÚ‹xt -> maš_loÝ ); 570 `‹¡_ä“ ( cÚ‹xt -> d©a ); 571 `g_ä“ ( cÚ‹xt ); 572 } } 574  $execu‹_cÚ‹xt ( cÚ‹xt *context) 576 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 578 `de¡roy_cÚ‹xt ( cÚ‹xt ); 579 } } 581  $‹¡_»ad_cb ( boÞ sucûss , ušt8_t ©t_ecode , 582 cÚ¡ ušt8_t * v®ue , ušt16_t Ëngth , 583 * u£r_d©a ) 585  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 586 cÚ¡  ‹¡_¡• * ¡• = cÚ‹xt -> d©a ->step; 588 `g_as£¹ ( ©t_ecode =ð ¡• -> ex³ùed_©t_ecode ); 590 ià( sucûss ) { 591 `g_as£¹ ( Ëngth =ð ¡• ->length); 592 `g_as£¹ ( `memcmp ( v®ue , ¡• ->v®ue, Ëngth ) == 0); 595 `cÚ‹xt_qu™ ( cÚ‹xt ); 596 } } 598  $‹¡_»ad ( cÚ‹xt *context) 600 cÚ¡  ‹¡_¡• * ¡• = cÚ‹xt -> d©a ->step; 602 `g_as£¹ ( `bt_g©t_þ›Á_»ad_v®ue ( cÚ‹xt -> þ›Á , ¡• -> hªdË , 603 ‹¡_»ad_cb , cÚ‹xt , NULL )); 604 } } 606 cÚ¡ ušt8_t g»ad_d©a_1 [] = {0x01, 0x02, 0x03}; 608 cÚ¡  ‹¡_¡• g‹¡_»ad_1 = { 609 . hªdË = 0x0003, 610 . gfunc = ‹¡_»ad , 611 . gex³ùed_©t_ecode = 0, 612 . gv®ue = »ad_d©a_1 , 613 . gËngth = 0x03 616 cÚ¡  ‹¡_¡• g‹¡_»ad_2 = { 617 . hªdË = 0x0000, 618 . gfunc = ‹¡_»ad , 619 . gex³ùed_©t_ecode = 0x01, 622 cÚ¡  ‹¡_¡• g‹¡_»ad_3 = { 623 . hªdË = 0x0003, 624 . gfunc = ‹¡_»ad , 625 . gex³ùed_©t_ecode = 0x02, 628 cÚ¡  ‹¡_¡• g‹¡_»ad_4 = { 629 . hªdË = 0x0003, 630 . gfunc = ‹¡_»ad , 631 . gex³ùed_©t_ecode = 0x08, 634  $©t_wr™e_cb ( g©t_db_©Œibu‹ * ©t ,  ”r , 635 * u£r_d©a ) 637 `g_as£¹ (! ”r ); 638 } } 640  g©t_db_©Œibu‹ * $add_ch¬_w™h_v®ue ( g©t_db * db , 641  g©t_db_©Œibu‹ * £rviû_©t , 642 bt_uuid_t * uuid , 643 ušt32_t ©t_³rmissiÚs , 644 ušt8_t ch¬_´Ý”t›s , 645 cÚ¡ * v®ue , size_t Ën ) 647  g©t_db_©Œibu‹ * ©Œib ; 649 ©Œib = `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rviû_©t , uuid , 650 ©t_³rmissiÚs , 651 ch¬_´Ý”t›s , 652 NULL , NULL, 653 NULL ); 655 `g©t_db_©Œibu‹_wr™e ( ©Œib , 0, v®ue , Ën , 0x00, NULL , ©t_wr™e_cb , 656 NULL ); 658  ©Œib ; 659 } } 661  g©t_db_©Œibu‹ * $add_ccc ( g©t_db_©Œibu‹ * chrc_©t , 662 boÞ wr™abË ) 664  g©t_db_©Œibu‹ * desc_©t ; 665 bt_uuid_t uuid ; 666 ušt32_t ³rmissiÚs = BT_ATT_PERM_READ ; 667 ušt16_t tmp ; 669 ià( wr™abË ) 670 ³rmissiÚs |ð BT_ATT_PERM_WRITE ; 672 `bt_uuid16_ü—‹ (& uuid , GATT_CLIENT_CHARAC_CFG_UUID ); 673 desc_©t = `g©t_db_£rviû_add_desütÜ ( chrc_©t , & uuid , ³rmissiÚs , 674 NULL , NULL, NULL); 676 tmp = 0x0000; 677 `g©t_db_©Œibu‹_wr™e ( desc_©t , 0, ( ušt8_t *)& tmp , ( ušt16_t ), 678 0x00, NULL , ©t_wr™e_cb , NULL); 680  desc_©t ; 681 } } 683  g©t_db_©Œibu‹ * 684 $add_u£r_desütiÚ ( g©t_db_©Œibu‹ * chrc_©t , cÚ¡ * desc , 685 boÞ wr™abË ) 687  g©t_db_©Œibu‹ * desc_©t ; 688 bt_uuid_t uuid ; 689 ušt32_t ³rmissiÚs = BT_ATT_PERM_READ ; 691 ià( wr™abË ) 692 ³rmissiÚs |ð BT_ATT_PERM_WRITE ; 694 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_USER_DESC_UUID ); 695 desc_©t = `g©t_db_£rviû_add_desütÜ ( chrc_©t , & uuid , ³rmissiÚs , 696 NULL , NULL, NULL); 698 `g©t_db_©Œibu‹_wr™e ( desc_©t , 0, ( ušt8_t *) desc , `¡¾’ (desc), 699 0x00, NULL , ©t_wr™e_cb , NULL); 701  desc_©t ; 702 } } 705  $g©t_db_©Œibu‹ (* tadd_£rviû_func è( tg©t_db * tdb , 706 tušt16_t thªdË , 707 tboÞ t´im¬y , 708 tušt16_t texŒa_hªdËs ); 710  g©t_db_©Œibu‹ * 711 $add_deviû_šfÜm©iÚ_£rviû ( g©t_db * db , ušt16_t hªdË , 712 boÞ ´im¬y , ušt16_t exŒa_hªdËs ) 714 bt_uuid_t uuid ; 715  g©t_db_©Œibu‹ * £rv_©t ; 717 `bt_¡ršg_to_uuid (& uuid , DEVICE_INFORMATION_UUID ); 718 £rv_©t = `g©t_db_š£¹_£rviû ( db , hªdË , & uuid , ´im¬y , 719 1 + exŒa_hªdËs ); 721  £rv_©t ; 722 } } 724  g©t_db_©Œibu‹ * $add_g­ ( g©t_db * db , ušt16_t hªdË , 725 boÞ ´im¬y , 726 ušt16_t exŒa_hªdËs ) 728 bt_uuid_t uuid ; 729  g©t_db_©Œibu‹ * £rv_©t ; 731 `bt_¡ršg_to_uuid (& uuid , GAP_UUID ); 732 £rv_©t = `g©t_db_š£¹_£rviû ( db , hªdË , & uuid , ´im¬y , 733 1 + exŒa_hªdËs ); 735  £rv_©t ; 736 } } 738  g©t_db * $make_£rviû_d©a_1_db () 740  g©t_db * db = `g©t_db_Ãw (); 741  g©t_db_©Œibu‹ * £rv_©t , * chrc_©t ; 742 bt_uuid_t uuid ; 744 `bt_uuid16_ü—‹ (& uuid , 0x1801); 745 £rv_©t = `g©t_db_š£¹_£rviû ( db , 0x0001, & uuid , Œue , 4); 747 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_DEVICE_NAME ); 748 chrc_©t = `add_ch¬_w™h_v®ue ( db , £rv_©t , & uuid , BT_ATT_PERM_READ , 749 BT_GATT_CHRC_PROP_READ , "BlueZ", 5); 751 `add_u£r_desütiÚ ( chrc_©t , "Deviû Name", çl£ ); 753 `g©t_db_£rviû_£t_aùive ( £rv_©t , Œue ); 755 `bt_uuid16_ü—‹ (& uuid , 0x180d); 756 £rv_©t = `g©t_db_š£¹_£rviû ( db , 0x0005, & uuid , Œue , 4); 758 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_MANUFACTURER_NAME_STRING ); 759 chrc_©t = `g©t_db_£rviû_add_ch¬aù”i¡ic ( £rv_©t , & uuid , 760 BT_ATT_PERM_READ , 761 BT_GATT_CHRC_PROP_READ , 762 NULL , NULL, NULL); 764 `add_u£r_desütiÚ ( chrc_©t , "Mªuçùu»¸Name", çl£ ); 766 `g©t_db_£rviû_£t_aùive ( £rv_©t , Œue ); 768  db ; 769 } } 787  g©t_db * $make_‹¡_¥ec_sm®l_db () 789  g©t_db * db ; 790  g©t_db_©Œibu‹ * £rv_©t , * dis_©t ; 791 bt_uuid_t uuid ; 792 cÚ¡ * mªuf_deviû_¡ršg = "BlueZ"; 793 cÚ¡ * deviû_Çme_¡ršg = "BlueZ Unit Tester"; 794 cÚ¡ * u£r_desc_mªuf_Çme = "Manufacturer Name"; 795 ušt16_t u16_v®ue ; 796 ušt8_t u8_v®ue ; 798 db = `g©t_db_Ãw (); 800 dis_©t = `add_deviû_šfÜm©iÚ_£rviû ( db , 0x0001, çl£ , 15); 802 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_MANUFACTURER_NAME_STRING ); 803 `add_ch¬_w™h_v®ue ( db , dis_©t , & uuid , BT_ATT_PERM_READ , 804 BT_GATT_CHRC_PROP_READ , 805 mªuf_deviû_¡ršg , 806 `¡¾’ ( mªuf_deviû_¡ršg )); 807 `add_ccc ( dis_©t , çl£ ); 808 `add_u£r_desütiÚ ( dis_©t , u£r_desc_mªuf_Çme , çl£ ); 810 `g©t_db_£rviû_£t_aùive ( dis_©t , Œue ); 812 £rv_©t = `add_g­ ( db , 0xF010, Œue , 5); 814 `g©t_db_£rviû_add_šþuded ( £rv_©t , dis_©t ); 816 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_DEVICE_NAME ); 817 `add_ch¬_w™h_v®ue ( db , £rv_©t , & uuid , BT_ATT_PERM_READ , 818 BT_GATT_CHRC_PROP_READ , 819 deviû_Çme_¡ršg , 820 `¡¾’ ( deviû_Çme_¡ršg )); 822 `bt_¡ršg_to_uuid (& uuid , "0000B009-0000-0000-0123-456789abcdef"); 823 u8_v®ue = 0x09; 824 `add_ch¬_w™h_v®ue ( db , £rv_©t , & uuid , BT_ATT_PERM_READ , 825 BT_GATT_CHRC_PROP_READ , 826 & u8_v®ue , ( ušt8_t )); 828 `g©t_db_£rviû_£t_aùive ( £rv_©t , Œue ); 830 u16_v®ue = 0x0000; 831 `bt_uuid16_ü—‹ (& uuid , GATT_CHARAC_APPEARANCE ); 832 `add_ch¬_w™h_v®ue ( db , £rv_©t , & uuid , BT_ATT_PERM_READ , 833 BT_GATT_CHRC_PROP_READ , & u16_v®ue , 834 ( ušt16_t )); 837 £rv_©t = `add_deviû_šfÜm©iÚ_£rviû ( db , 0xFFFF, Œue , 0); 839 `g©t_db_£rviû_£t_aùive ( £rv_©t , Œue ); 841  db ; 842 } } 844  $‹¡_þ›Á ( gcÚ¡poš‹r d©a ) 846  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (512, d©a ); 848 `execu‹_cÚ‹xt ( cÚ‹xt ); 849 } } 851  $‹¡_£rv” ( gcÚ¡poš‹r d©a ) 853  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (512, d©a ); 854 ssize_t Ën ; 855 cÚ¡  ‹¡_pdu pdu = SERVER_MTU_EXCHANGE_PDU ; 857 Ën = `wr™e ( cÚ‹xt -> fd , pdu . d©a ,…du. size ); 859 `g_as£¹_cmpšt ( Ën , ==, pdu . size ); 861 ià( `g_‹¡_v”bo£ ()) 862 `utž_hexdump ('<', pdu . d©a , Ën , ‹¡_debug , "GATT: "); 864 `execu‹_cÚ‹xt ( cÚ‹xt ); 865 } } 867  $‹¡_£¬ch_´im¬y ( gcÚ¡poš‹r d©a ) 869  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (512, d©a ); 870 cÚ¡  ‹¡_d©a *‹¡_d©¨ð d©a ; 872 `bt_g©t_discov”_®l_´im¬y_£rviûs ( cÚ‹xt -> ©t , ‹¡_d©a -> uuid , 873 g’”ic_£¬ch_cb , 874 cÚ‹xt , NULL ); 876 `execu‹_cÚ‹xt ( cÚ‹xt ); 877 } } 879  $‹¡_£¬ch_šþuded ( gcÚ¡poš‹r d©a ) 881  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (512, d©a ); 883 `bt_g©t_discov”_šþuded_£rviûs ( cÚ‹xt -> ©t , 0x0001, 0xffff, 884 g’”ic_£¬ch_cb , 885 cÚ‹xt , NULL ); 887 `execu‹_cÚ‹xt ( cÚ‹xt ); 888 } } 890  $‹¡_£¬ch_ch¬s ( gcÚ¡poš‹r d©a ) 892  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (512, d©a ); 894 `g_as£¹ ( `bt_g©t_discov”_ch¬aù”i¡ics ( cÚ‹xt -> ©t , 0x0010, 0x0020, 895 g’”ic_£¬ch_cb , 896 cÚ‹xt , NULL )); 898 `execu‹_cÚ‹xt ( cÚ‹xt ); 899 } } 901  $‹¡_£¬ch_descs ( gcÚ¡poš‹r d©a ) 903  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (512, d©a ); 905 `g_as£¹ ( `bt_g©t_discov”_desütÜs ( cÚ‹xt -> ©t , 0x0013, 0x0016, 906 g’”ic_£¬ch_cb , 907 cÚ‹xt , NULL )); 909 `execu‹_cÚ‹xt ( cÚ‹xt ); 910 } } 912 cÚ¡  ‹¡_¡• g‹¡_»ad_by_ty³_1 = { 913 . hªdË = 0x0001, 914 . g’d_hªdË = 0xffff, 915 . gex³ùed_©t_ecode = 0x0a, 916 . gv®ue = »ad_d©a_1 , 917 . gËngth = 0x03 920 cÚ¡  ‹¡_¡• g‹¡_»ad_by_ty³_2 = { 921 . hªdË = 0x0001, 922 . g’d_hªdË = 0xffff, 923 . gex³ùed_©t_ecode = 0x02, 926 cÚ¡  ‹¡_¡• g‹¡_»ad_by_ty³_3 = { 927 . hªdË = 0x0001, 928 . g’d_hªdË = 0xffff, 929 . gex³ùed_©t_ecode = 0x0a, 932 cÚ¡  ‹¡_¡• g‹¡_»ad_by_ty³_4 = { 933 . hªdË = 0x0001, 934 . g’d_hªdË = 0xffff, 935 . gex³ùed_©t_ecode = 0x08, 938 cÚ¡  ‹¡_¡• g‹¡_»ad_by_ty³_5 = { 939 . hªdË = 0x0001, 940 . g’d_hªdË = 0xffff, 941 . gex³ùed_©t_ecode = 0x05, 944 cÚ¡  ‹¡_¡• g‹¡_»ad_by_ty³_6 = { 945 . hªdË = 0x0001, 946 . g’d_hªdË = 0xffff, 947 . gex³ùed_©t_ecode = 0x0c, 950  $muÉË_»ad_cb ( boÞ sucûss , ušt8_t ©t_ecode , 951 cÚ¡ ušt8_t * v®ue , ušt16_t Ëngth , 952 * u£r_d©a ) 954  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 955 cÚ¡  ‹¡_¡• * ¡• = cÚ‹xt -> d©a ->step; 957 `g_as£¹ ( ©t_ecode =ð ¡• -> ex³ùed_©t_ecode ); 959 ià( sucûss ) { 960 `g_as£¹ ( Ëngth =ð ¡• ->length); 961 `g_as£¹ ( `memcmp ( v®ue , ¡• ->v®ue, Ëngth ) == 0); 964 `cÚ‹xt_qu™ ( cÚ‹xt ); 965 } } 967  $‹¡_muÉË_»ad ( cÚ‹xt *context) 969 cÚ¡  ‹¡_¡• * ¡• = cÚ‹xt -> d©a ->step; 970 ušt16_t hªdËs [2]; 972 hªdËs [0] = ¡• -> hªdË ; 973 hªdËs [1] = ¡• -> ’d_hªdË ; 975 `g_as£¹ ( `bt_g©t_þ›Á_»ad_muÉË ( cÚ‹xt -> þ›Á , hªdËs , 2, 976 muÉË_»ad_cb , cÚ‹xt , 977 NULL )); 978 } } 980 cÚ¡  ‹¡_¡• g‹¡_muÉË_»ad_1 = { 981 . hªdË = 0x0003, 982 . g’d_hªdË = 0x0007, 983 . gfunc = ‹¡_muÉË_»ad , 984 . gv®ue = »ad_d©a_1 , 985 . gËngth = 0x03 988 cÚ¡  ‹¡_¡• g‹¡_muÉË_»ad_2 = { 989 . hªdË = 0x0003, 990 . g’d_hªdË = 0x0007, 991 . gfunc = ‹¡_muÉË_»ad , 992 . gex³ùed_©t_ecode = 0x02 995 cÚ¡  ‹¡_¡• g‹¡_muÉË_»ad_3 = { 996 . hªdË = 0x0003, 997 . g’d_hªdË = 0x0007, 998 . gfunc = ‹¡_muÉË_»ad , 999 . gex³ùed_©t_ecode = 0x01 1002 cÚ¡  ‹¡_¡• g‹¡_muÉË_»ad_4 = { 1003 . hªdË = 0x0003, 1004 . g’d_hªdË = 0x0007, 1005 . gfunc = ‹¡_muÉË_»ad , 1006 . gex³ùed_©t_ecode = 0x08 1009 cÚ¡  ‹¡_¡• g‹¡_muÉË_»ad_5 = { 1010 . hªdË = 0x0003, 1011 . g’d_hªdË = 0x0007, 1012 . gfunc = ‹¡_muÉË_»ad , 1013 . gex³ùed_©t_ecode = 0x05 1016 cÚ¡  ‹¡_¡• g‹¡_muÉË_»ad_6 = { 1017 . hªdË = 0x0003, 1018 . g’d_hªdË = 0x0007, 1019 . gfunc = ‹¡_muÉË_»ad , 1020 . gex³ùed_©t_ecode = 0x0c 1023  $»ad_by_ty³_cb ( boÞ sucûss , ušt8_t ©t_ecode , 1024  bt_g©t_»suÉ * »suÉ , 1025 * u£r_d©a ) 1027  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 1028 cÚ¡  ‹¡_¡• * ¡• = cÚ‹xt -> d©a ->step; 1029  bt_g©t_™” ™” ; 1031 `g_as£¹ ( ©t_ecode =ð ¡• -> ex³ùed_©t_ecode ); 1033 ià( sucûss ) { 1034 ušt16_t Ëngth , hªdË ; 1035 cÚ¡ ušt8_t * v®ue ; 1037 `g_as£¹ ( `bt_g©t_™”_š™ (& ™” , »suÉ )); 1038 `g_as£¹ ( `bt_g©t_™”_Ãxt_»ad_by_ty³ (& ™” , & hªdË , & Ëngth , 1039 & v®ue )); 1040 `g_as£¹ ( Ëngth =ð ¡• ->length); 1041 `g_as£¹ (! `memcmp ( v®ue , ¡• ->v®ue, Ëngth )); 1043 `g_as£¹ (! `bt_g©t_™”_Ãxt_»ad_by_ty³ (& ™” , & hªdË , 1044 & Ëngth , & v®ue )); 1047 `cÚ‹xt_qu™ ( cÚ‹xt ); 1048 } } 1050  $‹¡_»ad_by_ty³ ( gcÚ¡poš‹r d©a ) 1052  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (512, d©a ); 1053 cÚ¡  ‹¡_d©a *‹¡_d©¨ð d©a ; 1054 cÚ¡  ‹¡_¡• * ¡• = cÚ‹xt -> d©a ->step; 1056 `g_as£¹ ( `bt_g©t_»ad_by_ty³ ( cÚ‹xt -> ©t , ¡• -> hªdË , 1057 ¡• -> ’d_hªdË , ‹¡_d©a -> uuid , 1058 »ad_by_ty³_cb , cÚ‹xt , NULL )); 1060 `execu‹_cÚ‹xt ( cÚ‹xt ); 1061 } } 1063  $maš ( ¬gc , * ¬gv []) 1065  g©t_db * £rviû_db_1 , * ts_sm®l_db ; 1067 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 1069 £rviû_db_1 = `make_£rviû_d©a_1_db (); 1070 ts_sm®l_db = `make_‹¡_¥ec_sm®l_db (); 1079 `defše_‹¡_þ›Á ("/TP/GAC/CL/BV-01-C", ‹¡_þ›Á , NULL , NULL, 1080 `¿w_pdu (0x02, 0x00, 0x02)); 1082 `defše_‹¡_£rv” ("/TP/GAC/SR/BV-01-C", ‹¡_£rv” , £rviû_db_1 , 1083 NULL , 1084 `¿w_pdu (0x03, 0x00, 0x02)); 1092 `defše_‹¡_©t ("/TP/GAD/CL/BV-01-C", ‹¡_£¬ch_´im¬y , NULL , NULL, 1093 `¿w_pdu (0x02, 0x00, 0x02), 1094 `¿w_pdu (0x03, 0x00, 0x02), 1095 `¿w_pdu (0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), 1096 `¿w_pdu (0x11, 0x06, 0x10, 0x00, 0x13, 0x00, 0x00, 0x18, 1099 `¿w_pdu (0x10, 0x33, 0x00, 0xff, 0xff, 0x00, 0x28), 1100 `¿w_pdu (0x11, 0x14, 0x90, 0x00, 0x96, 0x00, 0xef, 0xcd, 1104 `¿w_pdu (0x10, 0x97, 0x00, 0xff, 0xff, 0x00, 0x28), 1105 `¿w_pdu (0x01, 0x10, 0x97, 0x00, 0x0a)); 1107 `defše_‹¡_©t ("/TP/GAD/CL/BV-01-C-sm®l", ‹¡_£¬ch_´im¬y , NULL , 1108 NULL , 1109 MTU_EXCHANGE_CLIENT_PDUS , 1110 PRIMARY_DISC_SMALL_DB ); 1112 `defše_‹¡_£rv” ("/TP/GAD/SR/BV-01-C", ‹¡_£rv” , £rviû_db_1 , 1113 NULL , 1114 `¿w_pdu (0x03, 0x00, 0x02), 1115 `¿w_pdu (0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), 1116 `¿w_pdu (0x11, 0x06, 0x01, 0x00, 0x04, 0x00, 0x01, 0x18, 1118 `¿w_pdu (0x10, 0x06, 0x00, 0xff, 0xff, 0x00, 0x28), 1119 `¿w_pdu (0x01, 0x10, 0x06, 0x00, 0x0a)); 1121 `defše_‹¡_£rv” ("/TP/GAD/SR/BV-01-C-sm®l", ‹¡_£rv” , ts_sm®l_db , 1122 NULL , 1123 `¿w_pdu (0x03, 0x00, 0x02), 1124 PRIMARY_DISC_SMALL_DB ); 1126 `defše_‹¡_©t ("/TP/GAD/CL/BV-02-C-1", ‹¡_£¬ch_´im¬y , & uuid_16 , 1127 NULL , 1128 MTU_EXCHANGE_CLIENT_PDUS , 1129 `¿w_pdu (0x06, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28, 0x00, 1131 `¿w_pdu (0x07, 0x01, 0x00, 0x07, 0x00), 1132 `¿w_pdu (0x06, 0x08, 0x00, 0xff, 0xff, 0x00, 0x28, 0x00, 1134 `¿w_pdu (0x01, 0x06, 0x08, 0x00, 0x0a)); 1136 `defše_‹¡_©t ("/TP/GAD/CL/BV-02-C-2", ‹¡_£¬ch_´im¬y , & uuid_128 , 1137 NULL , 1138 MTU_EXCHANGE_CLIENT_PDUS , 1139 `¿w_pdu (0x06, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28, 0xfb, 1143 `¿w_pdu (0x07, 0x10, 0x00, 0x17, 0x00), 1144 `¿w_pdu (0x06, 0x18, 0x00, 0xff, 0xff, 0x00, 0x28, 0xfb, 1148 `¿w_pdu (0x01, 0x06, 0x08, 0x00, 0x0a)); 1150 `defše_‹¡_©t ("/TP/GAD/CL/BV-03-C", ‹¡_£¬ch_šþuded , NULL , 1151 NULL , 1152 MTU_EXCHANGE_CLIENT_PDUS , 1153 `¿w_pdu (0x08, 0x01, 0x00, 0xff, 0xff, 0x02, 0x28), 1154 `¿w_pdu (0x09, 0x08, 0x02, 0x00, 0x10, 0x00, 0x1f, 0x00, 1156 `¿w_pdu (0x08, 0x03, 0x00, 0xff, 0xff, 0x02, 0x28), 1157 `¿w_pdu (0x09, 0x06, 0x03, 0x00, 0x20, 0x00, 0x2f, 0x00, 1159 `¿w_pdu (0x0a, 0x20, 0x00), 1160 `¿w_pdu (0x0b, 0x00, 0x00, 0x3e, 0x39, 0x00, 0x00, 0x00, 1163 `¿w_pdu (0x0a, 0x30, 0x00), 1164 `¿w_pdu (0x0b, 0x00, 0x00, 0x3b, 0x39, 0x00, 0x00, 0x00, 1167 `¿w_pdu (0x08, 0x05, 0x00, 0xff, 0xff, 0x02, 0x28), 1168 `¿w_pdu (0x09, 0x08, 0x05, 0x00, 0x40, 0x00, 0x4f, 0x00, 1170 `¿w_pdu (0x08, 0x06, 0x00, 0xff, 0xff, 0x02, 0x28), 1171 `¿w_pdu (0x01, 0x08, 0x06, 0x00, 0x0a)); 1173 `defše_‹¡_©t ("/TP/GAD/CL/BV-04-C", ‹¡_£¬ch_ch¬s , NULL , 1174 NULL , 1175 MTU_EXCHANGE_CLIENT_PDUS , 1176 `¿w_pdu (0x08, 0x10, 0x00, 0x20, 0x00, 0x03, 0x28), 1177 `¿w_pdu (0x09, 0x07, 0x11, 0x00, 02, 0x12, 0x00, 0x25, 1179 `¿w_pdu (0x08, 0x12, 0x00, 0x20, 0x00, 0x03, 0x28), 1180 `¿w_pdu (0x09, 0x15, 0x13, 0x00, 0x02, 0x14, 0x00, 0x85, 1184 `¿w_pdu (0x08, 0x14, 0x00, 0x20, 0x00, 0x03, 0x28), 1185 `¿w_pdu (0x01, 0x08, 0x12, 0x00, 0x0a)); 1187 `defše_‹¡_©t ("/TP/GAD/CL/BV-06-C", ‹¡_£¬ch_descs , NULL , NULL, 1188 MTU_EXCHANGE_CLIENT_PDUS , 1189 `¿w_pdu (0x04, 0x13, 0x00, 0x16, 0x00), 1190 `¿w_pdu (0x05, 0x01, 0x13, 0x00, 0x02, 0x29, 0x14, 0x00, 1192 `¿w_pdu (0x04, 0x15, 0x00, 0x16, 0x00), 1193 `¿w_pdu (0x05, 0x01, 0x15, 0x00, 0x04, 0x29, 0x16, 0x00, 1196 `defše_‹¡_þ›Á ("/TP/GAR/CL/BV-01-C", ‹¡_þ›Á , £rviû_db_1 , 1197 & ‹¡_»ad_1 , 1198 SERVICE_DATA_1_PDUS , 1199 `¿w_pdu (0x0a, 0x03, 0x00), 1200 `¿w_pdu (0x0b, 0x01, 0x02, 0x03)); 1202 `defše_‹¡_þ›Á ("/TP/GAR/CL/BI-01-C", ‹¡_þ›Á , £rviû_db_1 , 1203 & ‹¡_»ad_2 , 1204 SERVICE_DATA_1_PDUS , 1205 `¿w_pdu (0x0a, 0x00, 0x00), 1206 `¿w_pdu (0x01, 0x0a, 0x00, 0x00, 0x01)); 1208 `defše_‹¡_þ›Á ("/TP/GAR/CL/BI-02-C", ‹¡_þ›Á , £rviû_db_1 , 1209 & ‹¡_»ad_3 , 1210 SERVICE_DATA_1_PDUS , 1211 `¿w_pdu (0x0a, 0x03, 0x00), 1212 `¿w_pdu (0x01, 0x0a, 0x03, 0x00, 0x02)); 1214 `defše_‹¡_þ›Á ("/TP/GAR/CL/BI-03-C", ‹¡_þ›Á , £rviû_db_1 , 1215 & ‹¡_»ad_4 , 1216 SERVICE_DATA_1_PDUS , 1217 `¿w_pdu (0x0a, 0x03, 0x00), 1218 `¿w_pdu (0x01, 0x0a, 0x03, 0x00, 0x08)); 1220 `defše_‹¡_©t ("/TP/GAR/CL/BV-03-C-1", ‹¡_»ad_by_ty³ , 1221 & uuid_ch¬_16 , & ‹¡_»ad_by_ty³_1 , 1222 `¿w_pdu (0x02, 0x00, 0x02), 1223 `¿w_pdu (0x03, 0x00, 0x02), 1224 `¿w_pdu (0x08, 0x01, 0x00, 0xff, 0xff, 0x0d, 0x2a), 1225 `¿w_pdu (0x09, 0x05, 0x0a, 0x00, 0x01, 0x02, 0x03), 1226 `¿w_pdu (0x08, 0x0b, 0x00, 0xff, 0xff, 0x0d, 0x2a), 1227 `¿w_pdu (0x01, 0x08, 0x0b, 0x00, 0x0a)); 1229 `defše_‹¡_©t ("/TP/GAR/CL/BV-03-C-2", ‹¡_»ad_by_ty³ , 1230 & uuid_ch¬_128 , & ‹¡_»ad_by_ty³_1 , 1231 `¿w_pdu (0x02, 0x00, 0x02), 1232 `¿w_pdu (0x03, 0x00, 0x02), 1233 `¿w_pdu (0x08, 0x01, 0x00, 0xff, 0xff, 0x0f, 0x0e, 0x0d, 1237 `¿w_pdu (0x09, 0x05, 0x0a, 0x00, 0x01, 0x02, 0x03), 1238 `¿w_pdu (0x08, 0x0b, 0x00, 0xff, 0xff, 0x0f, 0x0e, 0x0d, 1242 `¿w_pdu (0x01, 0x08, 0x0b, 0x00, 0x0a)); 1244 `defše_‹¡_©t ("/TP/GAR/CL/BI-06-C", ‹¡_»ad_by_ty³ , & uuid_ch¬_16 , 1245 & ‹¡_»ad_by_ty³_2 , 1246 MTU_EXCHANGE_CLIENT_PDUS , 1247 `¿w_pdu (0x08, 0x01, 0x00, 0xff, 0xff, 0x0d, 0x2a), 1248 `¿w_pdu (0x01, 0x08, 0x0b, 0x00, 0x02)); 1250 `defše_‹¡_©t ("/TP/GAR/CL/BI-07-C", ‹¡_»ad_by_ty³ , & uuid_ch¬_16 , 1251 & ‹¡_»ad_by_ty³_3 , 1252 MTU_EXCHANGE_CLIENT_PDUS , 1253 `¿w_pdu (0x08, 0x01, 0x00, 0xff, 0xff, 0x0d, 0x2a), 1254 `¿w_pdu (0x01, 0x08, 0x0b, 0x00, 0x0a)); 1256 `defše_‹¡_©t ("/TP/GAR/CL/BI-09-C", ‹¡_»ad_by_ty³ , & uuid_ch¬_16 , 1257 & ‹¡_»ad_by_ty³_4 , 1258 MTU_EXCHANGE_CLIENT_PDUS , 1259 `¿w_pdu (0x08, 0x01, 0x00, 0xff, 0xff, 0x0d, 0x2a), 1260 `¿w_pdu (0x01, 0x08, 0x0b, 0x00, 0x08)); 1262 `defše_‹¡_©t ("/TP/GAR/CL/BI-10-C", ‹¡_»ad_by_ty³ , & uuid_ch¬_16 , 1263 & ‹¡_»ad_by_ty³_5 , 1264 MTU_EXCHANGE_CLIENT_PDUS , 1265 `¿w_pdu (0x08, 0x01, 0x00, 0xff, 0xff, 0x0d, 0x2a), 1266 `¿w_pdu (0x01, 0x08, 0x0b, 0x00, 0x05)); 1268 `defše_‹¡_©t ("/TP/GAR/CL/BI-11-C", ‹¡_»ad_by_ty³ , & uuid_ch¬_16 , 1269 & ‹¡_»ad_by_ty³_6 , 1270 MTU_EXCHANGE_CLIENT_PDUS , 1271 `¿w_pdu (0x08, 0x01, 0x00, 0xff, 0xff, 0x0d, 0x2a), 1272 `¿w_pdu (0x01, 0x08, 0x0b, 0x00, 0x0c)); 1274 `defše_‹¡_þ›Á ("/TP/GAR/CL/BV-05-C", ‹¡_þ›Á , £rviû_db_1 , 1275 & ‹¡_muÉË_»ad_1 , 1276 SERVICE_DATA_1_PDUS , 1277 `¿w_pdu (0x0e, 0x03, 0x00, 0x07, 0x00), 1278 `¿w_pdu (0x0f, 0x01, 0x02, 0x03)); 1280 `defše_‹¡_þ›Á ("/TP/GAR/CL/BI-18-C", ‹¡_þ›Á , £rviû_db_1 , 1281 & ‹¡_muÉË_»ad_2 , 1282 SERVICE_DATA_1_PDUS , 1283 `¿w_pdu (0x0e, 0x03, 0x00, 0x07, 0x00), 1284 `¿w_pdu (0x01, 0x0e, 0x03, 0x00, 0x02)); 1286 `defše_‹¡_þ›Á ("/TP/GAR/CL/BI-19-C", ‹¡_þ›Á , £rviû_db_1 , 1287 & ‹¡_muÉË_»ad_3 , 1288 SERVICE_DATA_1_PDUS , 1289 `¿w_pdu (0x0e, 0x03, 0x00, 0x07, 0x00), 1290 `¿w_pdu (0x01, 0x0e, 0x03, 0x00, 0x01)); 1292 `defše_‹¡_þ›Á ("/TP/GAR/CL/BI-20-C", ‹¡_þ›Á , £rviû_db_1 , 1293 & ‹¡_muÉË_»ad_4 , 1294 SERVICE_DATA_1_PDUS , 1295 `¿w_pdu (0x0e, 0x03, 0x00, 0x07, 0x00), 1296 `¿w_pdu (0x01, 0x0e, 0x03, 0x00, 0x08)); 1298 `defše_‹¡_þ›Á ("/TP/GAR/CL/BI-21-C", ‹¡_þ›Á , £rviû_db_1 , 1299 & ‹¡_muÉË_»ad_5 , 1300 SERVICE_DATA_1_PDUS , 1301 `¿w_pdu (0x0e, 0x03, 0x00, 0x07, 0x00), 1302 `¿w_pdu (0x01, 0x0e, 0x03, 0x00, 0x05)); 1304 `defše_‹¡_þ›Á ("/TP/GAR/CL/BI-21-C", ‹¡_þ›Á , £rviû_db_1 , 1305 & ‹¡_muÉË_»ad_6 , 1306 SERVICE_DATA_1_PDUS , 1307 `¿w_pdu (0x0e, 0x03, 0x00, 0x07, 0x00), 1308 `¿w_pdu (0x01, 0x0e, 0x03, 0x00, 0x0c)); 1310  `g_‹¡_run (); 1311 } } @unit/test-gattrib.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~<¡dlib.h > 30  ~<¡dboÞ.h > 31  ~<š‰y³s.h > 32  ~<¡ršg.h > 33  ~ 34  ~ 36  ~ 38  ~"¤c/sh¬ed/utž.h " 39  ~"lib/uuid.h " 40  ~"©Œib/©t.h " 41  ~"©Œib/g©Œib.h " 42  ~"¤c/log.h " 44  #DEFAULT_MTU 23 ) 46  #d©a ( ¬gs ...è((cÚ¡ []è{‡rg }) ) 48  s‹¡_pdu { 49 boÞ mv®id ; 50 boÞ m£Á ; 51 boÞ m»ûived ; 52 cÚ¡ ušt8_t * md©a ; 53 size_t msize ; 56  #pdu ( ¬gs ...) \ 58 . v®id = Œue , \ 59 . £Á = çl£ , \ 60 . »ûived = çl£ , \ 61 . d©a = `d©a ( ¬gs ), \ 62 . size = ( `d©a ( ¬gs )), \ 63 } ) 65  scÚ‹xt { 66 GMašLoÝ * mmaš_loÝ ; 67 GIOChªÃl * m©t_io ; 68 GIOChªÃl * m£rv”_io ; 69 GA‰rib * m©t ; 72  $£tup_cÚ‹xt ( cÚ‹xt * cxt , gcÚ¡poš‹r d©a ) 74  ”r , sv [2]; 76 cxt -> maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 77 `g_as£¹ ( cxt -> maš_loÝ !ð NULL ); 79 ”r = `sock‘·œ ( AF_UNIX , SOCK_SEQPACKET | SOCK_CLOEXEC , 0, sv ); 80 `g_as£¹ ( ”r == 0); 82 cxt -> ©t_io = `g_io_chªÃl_unix_Ãw ( sv [0]); 83 `g_as£¹ ( cxt -> ©t_io !ð NULL ); 85 `g_io_chªÃl_£t_þo£_Ú_uÄef ( cxt -> ©t_io , TRUE ); 87 cxt -> £rv”_io = `g_io_chªÃl_unix_Ãw ( sv [1]); 88 `g_as£¹ ( cxt -> £rv”_io !ð NULL ); 90 `g_io_chªÃl_£t_þo£_Ú_uÄef ( cxt -> £rv”_io , TRUE ); 91 `g_io_chªÃl_£t_’codšg ( cxt -> £rv”_io , NULL , NULL); 92 `g_io_chªÃl_£t_bufã»d ( cxt -> £rv”_io , FALSE ); 94 cxt -> ©t = `g_©Œib_Ãw (cxt-> ©t_io , DEFAULT_MTU ); 95 `g_as£¹ ( cxt -> ©t !ð NULL ); 96 } } 98  $‹¬down_cÚ‹xt ( cÚ‹xt * cxt , gcÚ¡poš‹r d©a ) 100 ià( cxt -> ©t ) 101 `g_©Œib_uÄef ( cxt -> ©t ); 103 `g_io_chªÃl_uÄef ( cxt -> £rv”_io ); 105 `g_io_chªÃl_uÄef ( cxt -> ©t_io ); 107 `g_maš_loÝ_uÄef ( cxt -> maš_loÝ ); 108 } } 111  $‹¡_debug (cÚ¡ * ¡r , * u£r_d©a ) 113 cÚ¡ * ´efix = u£r_d©a ; 115 `g_´št ("%s%s\n", ´efix , ¡r ); 116 } } 118  $de¡roy_ÿÇry_šüem’t ( gpoš‹r d©a ) 120 * ÿÇry = d©a ; 121 (* ÿÇry )++; 122 } } 124  $‹¡_»fcouÁ ( cÚ‹xt * cxt , gcÚ¡poš‹r unu£d ) 126 GA‰rib * exŒa_»f ; 127  de¡roy_ÿÇry = 0; 129 `g_©Œib_£t_de¡roy_funùiÚ ( cxt -> ©t , de¡roy_ÿÇry_šüem’t , 130 & de¡roy_ÿÇry ); 132 exŒa_»f = `g_©Œib_»f ( cxt -> ©t ); 134 `g_as£¹ ( exŒa_»f =ð cxt -> ©t ); 136 `g_as£¹ ( de¡roy_ÿÇry == 0); 138 `g_©Œib_uÄef ( exŒa_»f ); 140 `g_as£¹ ( de¡roy_ÿÇry == 0); 142 `g_©Œib_uÄef ( cxt -> ©t ); 144 `g_as£¹ ( de¡roy_ÿÇry == 1); 147 cxt -> ©t = NULL ; 148 } } 150  $‹¡_g‘_chªÃl ( cÚ‹xt * cxt , gcÚ¡poš‹r unu£d ) 152 GIOChªÃl * chª ; 154 chª = `g_©Œib_g‘_chªÃl ( cxt -> ©t ); 156 `g_as£¹ ( chª =ð cxt -> ©t_io ); 157 } } 159  sex³ù_»¥Ú£ { 160  ‹¡_pdu mex³ù ; 161  ‹¡_pdu m»¥Úd ; 162 GSourûFunc m»ûive_cb ; 163 gpoš‹r mu£r_d©a ; 166  gboÞ—n $‹¡_þ›Á ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 167 gpoš‹r d©a ) 169  ex³ù_»¥Ú£ * ü = d©a ; 170  fd ; 171 ušt8_t buf [256]; 172 ssize_t Ën ; 173  cmp ; 175 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) 176  FALSE ; 178 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 180 Ën = `»ad ( fd , buf , (buf)); 182 `g_as£¹ ( Ën > 0); 183 `g_as£¹_cmpšt ( Ën , ==, ü -> ex³ù . size ); 185 ià( `g_‹¡_v”bo£ ()) 186 `utž_hexdump ('?', ü -> ex³ù . d©a , cr->ex³ù. size , 187 ‹¡_debug , "test_client: "); 189 cmp = `memcmp ( ü -> ex³ù . d©a , buf , Ën ); 191 `g_as£¹ ( cmp == 0); 193 ü -> ex³ù . »ûived = Œue ; 195 ià( ü -> »ûive_cb !ð NULL ) 196 ü -> `»ûive_cb (ü-> u£r_d©a ); 198 ià( ü -> »¥Úd . v®id ) { 199 ià( `g_‹¡_v”bo£ ()) 200 `utž_hexdump ('<', ü -> »¥Úd . d©a , cr->»¥Úd. size , 201 ‹¡_debug , "test_client: "); 202 Ën = `wr™e ( fd , ü -> »¥Úd . d©a , cr->»¥Úd. size ); 204 `g_as£¹_cmpšt ( Ën , ==, ü -> »¥Úd . size ); 206 ü -> »¥Úd . £Á = Œue ; 209  TRUE ; 210 } } 212  s»suÉ_d©a { 213 gušt8 m¡©us ; 214 gušt8 * mpdu ; 215 gušt16 mËn ; 216 GSourûFunc mcom¶‘e_cb ; 217 gpoš‹r mu£r_d©a ; 220  $»suÉ_ÿÇry ( gušt8 ¡©us , cÚ¡ gušt8 * pdu , gušt16 Ën , 221 gpoš‹r d©a ) 223  »suÉ_d©a * »suÉ = d©a ; 225 »suÉ -> ¡©us = status; 226 »suÉ -> pdu = `g_m®loc0 ( Ën ); 227 `memýy ( »suÉ -> pdu ,…du, Ën ); 228 »suÉ -> Ën =†en; 230 ià( `g_‹¡_v”bo£ ()) 231 `utž_hexdump ('<', pdu , Ën , ‹¡_debug , "result_canary: "); 233 ià( »suÉ -> com¶‘e_cb !ð NULL ) 234 »suÉ -> `com¶‘e_cb ÔesuÉ-> u£r_d©a ); 235 } } 237  gboÞ—n $cÚ‹xt_¡Ý_maš_loÝ ( gpoš‹r u£r_d©a ) 239  cÚ‹xt * cxt = u£r_d©a ; 241 `g_maš_loÝ_qu™ ( cxt -> maš_loÝ ); 242  FALSE ; 243 } } 245  $‹¡_£nd ( cÚ‹xt * cxt , gcÚ¡poš‹r unu£d ) 247  cmp ; 248  »suÉ_d©a »suÉs ; 249  ex³ù_»¥Ú£ d©a = { 250 . ex³ù = `pdu (0x02, 0x00, 0x02), 251 . »¥Úd = `pdu (0x03, 0x02, 0x03, 0x04), 252 . »ûive_cb = NULL , 253 . u£r_d©a = NULL , 256 `g_io_add_w©ch ( cxt -> £rv”_io , G_IO_IN | G_IO_HUP | G_IO_ERR | 257 G_IO_NVAL , ‹¡_þ›Á , & d©a ); 259 »suÉs . com¶‘e_cb = cÚ‹xt_¡Ý_maš_loÝ ; 260 »suÉs . u£r_d©a = cxt ; 262 `g_©Œib_£nd ( cxt -> ©t , 0, d©a . ex³ù .d©a, d©a.ex³ù. size , 263 »suÉ_ÿÇry , ( gpoš‹r è& »suÉs , NULL ); 265 `g_maš_loÝ_run ( cxt -> maš_loÝ ); 267 `g_as£¹ ( »suÉs . pdu !ð NULL ); 269 `g_as£¹_cmpšt ( »suÉs . Ën , ==, d©a . »¥Úd . size ); 271 cmp = `memcmp ( »suÉs . pdu , d©a . »¥Úd .d©a,„esuÉs. Ën ); 273 `g_as£¹ ( cmp == 0); 275 `g_ä“ ( »suÉs . pdu ); 276 } } 278  sev’t_šfo { 279  cÚ‹xt * mcÚ‹xt ; 280  mev’t_id ; 283  gboÞ—n $ÿnûl_exi¡šg_©Œib_ev’t ( gpoš‹r u£r_d©a ) 285  ev’t_šfo * šfo = u£r_d©a ; 286 gboÞ—n ÿnûËd ; 288 ÿnûËd = `g_©Œib_ÿnûl ( šfo -> cÚ‹xt -> ©t , info-> ev’t_id ); 290 `g_as£¹ ( ÿnûËd ); 292 `g_idË_add ( cÚ‹xt_¡Ý_maš_loÝ , šfo -> cÚ‹xt ); 294  FALSE ; 295 } } 297  $‹¡_ÿnûl ( cÚ‹xt * cxt , gcÚ¡poš‹r unu£d ) 299 gboÞ—n ÿnûËd ; 300  »suÉ_d©a »suÉs ; 301  ev’t_šfo šfo ; 302  ex³ù_»¥Ú£ d©a = { 303 . ex³ù = `pdu (0x02, 0x00, 0x02), 304 . »¥Úd = `pdu (0x03, 0x02, 0x03, 0x04), 307 `g_io_add_w©ch ( cxt -> £rv”_io , 308 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 309 ‹¡_þ›Á , & d©a ); 311 »suÉs . pdu = NULL ; 313 šfo . cÚ‹xt = cxt ; 314 šfo . ev’t_id = `g_©Œib_£nd ( cxt -> ©t , 0, d©a . ex³ù .data, 315 d©a . ex³ù . size , »suÉ_ÿÇry , 316 & »suÉs , NULL ); 318 d©a . »ûive_cb = ÿnûl_exi¡šg_©Œib_ev’t ; 319 d©a . u£r_d©a = & šfo ; 321 `g_maš_loÝ_run ( cxt -> maš_loÝ ); 323 `g_as£¹ ( »suÉs . pdu =ð NULL ); 325 »suÉs . pdu = NULL ; 326 d©a . ex³ù . »ûived = çl£ ; 327 d©a . »¥Úd . £Á = çl£ ; 329 šfo . ev’t_id = `g_©Œib_£nd ( cxt -> ©t , 0, d©a . ex³ù .data, 330 d©a . ex³ù . size , »suÉ_ÿÇry , 331 & »suÉs , NULL ); 333 ÿnûËd = `g_©Œib_ÿnûl ( cxt -> ©t , šfo . ev’t_id ); 334 `g_as£¹ ( ÿnûËd ); 336 `g_idË_add ( cÚ‹xt_¡Ý_maš_loÝ , šfo . cÚ‹xt ); 338 `g_maš_loÝ_run ( cxt -> maš_loÝ ); 340 `g_as£¹ (! d©a . ex³ù . »ûived ); 341 `g_as£¹ (! d©a . »¥Úd . £Á ); 342 `g_as£¹ ( »suÉs . pdu =ð NULL ); 345 ÿnûËd = `g_©Œib_ÿnûl ( cxt -> ©t , 42); 346 `g_as£¹ (! ÿnûËd ); 347 } } 349  $£nd_‹¡_pdus ( gpoš‹r cÚ‹xt ,  ‹¡_pdu * pdus ) 351  cÚ‹xt * cxt = context; 352 size_t Ën ; 353  fd ; 354  ‹¡_pdu * cur_pdu ; 356 fd = `g_io_chªÃl_unix_g‘_fd ( cxt -> £rv”_io ); 358  cur_pdu = pdus ; cur_pdu-> v®id ; cur_pdu++) 359 cur_pdu -> £Á = çl£ ; 361  cur_pdu = pdus ; cur_pdu-> v®id ; cur_pdu++) { 362 ià( `g_‹¡_v”bo£ ()) 363 `utž_hexdump ('>', cur_pdu -> d©a , cur_pdu-> size , 364 ‹¡_debug , "send_test_pdus: "); 365 Ën = `wr™e ( fd , cur_pdu -> d©a , cur_pdu-> size ); 366 `g_as£¹_cmpšt ( Ën , ==, cur_pdu -> size ); 367 cur_pdu -> £Á = Œue ; 370 `g_idË_add ( cÚ‹xt_¡Ý_maš_loÝ , cxt ); 371 `g_maš_loÝ_run ( cxt -> maš_loÝ ); 372 } } 374  #PDU_MTU_RESP `pdu ( ATT_OP_MTU_RESP , 0x17) ) 375  #PDU_FIND_INFO_REQ `pdu ( ATT_OP_FIND_INFO_REQ , 0x01, 0x00, 0xFF, 0xFF) ) 376  #PDU_NO_ATT_ERR `pdu ( ATT_OP_ERROR , ATT_OP_FIND_INFO_REQ , 0x00, 0x00, 0x0A) ) 377  #PDU_IND_NODATA `pdu ( ATT_OP_HANDLE_IND , 0x01, 0x00) ) 378  #PDU_INVALID_IND `pdu ( ATT_OP_HANDLE_IND , 0x14) ) 379  #PDU_IND_DATA `pdu ( ATT_OP_HANDLE_IND , 0x14, 0x00, 0x01) ) 381  sex³ù_‹¡_d©a { 382  ‹¡_pdu * mex³ùed ; 383 GA‰rib * m©t ; 386  $nÙify_ÿÇry_ex³ù (cÚ¡ gušt8 * pdu , gušt16 Ën , gpoš‹r d©a ) 388  ex³ù_‹¡_d©a * ex³ù = d©a ; 389  ‹¡_pdu * ex³ùed = ex³ù ->expected; 390  cmp ; 392 ià( `g_‹¡_v”bo£ ()) 393 `utž_hexdump ('<', pdu , Ën , ‹¡_debug , 396  ex³ùed -> v®id &&ƒx³ùed-> »ûived ) 397 ex³ùed ++; 399 `g_as£¹ ( ex³ùed -> v®id ); 401 ià( `g_‹¡_v”bo£ ()) 402 `utž_hexdump ('?', ex³ùed -> d©a ,ƒx³ùed-> size , ‹¡_debug , 405 `g_as£¹_cmpšt ( ex³ùed -> size , ==, Ën ); 407 cmp = `memcmp ( pdu , ex³ùed -> d©a ,ƒx³ùed-> size ); 409 `g_as£¹ ( cmp == 0); 411 ex³ùed -> »ûived = Œue ; 413 ià( pdu [0] =ð ATT_OP_FIND_INFO_REQ ) { 414  ‹¡_pdu no_©Œibu‹s = PDU_NO_ATT_ERR ; 415  »qid ; 417 »qid = `g_©Œib_£nd ( ex³ù -> ©t , 0, no_©Œibu‹s . d©a , 418 no_©Œibu‹s . size , NULL , NULL, NULL); 419 `g_as£¹ ( »qid != 0); 421 } } 423  $‹¡_»gi¡” ( cÚ‹xt * cxt , gcÚ¡poš‹r u£r_d©a ) 425 gušt »g_id ; 426 gboÞ—n ÿnûËd ; 427  ‹¡_pdu pdus [] = { 431 PDU_FIND_INFO_REQ , 435 PDU_IND_NODATA , 439 PDU_INVALID_IND , 443 PDU_IND_DATA , 446  ‹¡_pdu »q_pdus [] = { PDU_FIND_INFO_REQ , { } }; 447  ‹¡_pdu ®l_šd_pdus [] = { 448 PDU_IND_NODATA , 449 PDU_INVALID_IND , 450 PDU_IND_DATA , 453  ‹¡_pdu fÞlowed_šd_pdus [] = { PDU_IND_DATA , { } }; 454  ‹¡_pdu * cu¼’t_pdu ; 455  ex³ù_‹¡_d©a ex³ù ; 457 ex³ù . ©t = cxt ->att; 462 `£nd_‹¡_pdus ( cxt , pdus ); 464 ià( `g_‹¡_v”bo£ ()) 465 `g_´št ("ALL_REQS, ALL_HANDLES\r\n"); 467 ex³ù . ex³ùed = »q_pdus ; 468 »g_id = `g_©Œib_»gi¡” ( cxt -> ©t , GATTRIB_ALL_REQS , 469 GATTRIB_ALL_HANDLES , nÙify_ÿÇry_ex³ù , 470 & ex³ù , NULL ); 472 `£nd_‹¡_pdus ( cxt , pdus ); 474 ÿnûËd = `g_©Œib_uÄegi¡” ( cxt -> ©t , »g_id ); 476 `g_as£¹ ( ÿnûËd ); 478  cu¼’t_pdu = »q_pdus ; cu¼’t_pdu-> v®id ; current_pdu++) 479 `g_as£¹ ( cu¼’t_pdu -> »ûived ); 481 ià( `g_‹¡_v”bo£ ()) 482 `g_´št ("IND, ALL_HANDLES\r\n"); 484 ex³ù . ex³ùed = ®l_šd_pdus ; 485 »g_id = `g_©Œib_»gi¡” ( cxt -> ©t , ATT_OP_HANDLE_IND , 486 GATTRIB_ALL_HANDLES , nÙify_ÿÇry_ex³ù , 487 & ex³ù , NULL ); 489 `£nd_‹¡_pdus ( cxt , pdus ); 491 ÿnûËd = `g_©Œib_uÄegi¡” ( cxt -> ©t , »g_id ); 493 `g_as£¹ ( ÿnûËd ); 495  cu¼’t_pdu = ®l_šd_pdus ; cu¼’t_pdu-> v®id ; current_pdu++) 496 `g_as£¹ ( cu¼’t_pdu -> »ûived ); 498 ià( `g_‹¡_v”bo£ ()) 499 `g_´št ("IND, 0x0014\r\n"); 501 ex³ù . ex³ùed = fÞlowed_šd_pdus ; 502 »g_id = `g_©Œib_»gi¡” ( cxt -> ©t , ATT_OP_HANDLE_IND , 0x0014, 503 nÙify_ÿÇry_ex³ù , & ex³ù , NULL ); 505 `£nd_‹¡_pdus ( cxt , pdus ); 507 ÿnûËd = `g_©Œib_uÄegi¡” ( cxt -> ©t , »g_id ); 509 `g_as£¹ ( ÿnûËd ); 511  cu¼’t_pdu = fÞlowed_šd_pdus ; cu¼’t_pdu-> v®id ; current_pdu++) 512 `g_as£¹ ( cu¼’t_pdu -> »ûived ); 514 ÿnûËd = `g_©Œib_uÄegi¡” ( cxt -> ©t , »g_id ); 516 `g_as£¹ (! ÿnûËd ); 517 } } 519  $‹¡_bufãrs ( cÚ‹xt * cxt , gcÚ¡poš‹r unu£d ) 521 size_t buæ’ ; 522 ušt8_t * buf ; 523 gboÞ—n sucûss ; 525 buf = `g_©Œib_g‘_bufãr ( cxt -> ©t , & buæ’ ); 526 `g_as£¹ ( buf != 0); 527 `g_as£¹_cmpšt ( buæ’ , ==, DEFAULT_MTU ); 529 sucûss = `g_©Œib_£t_mtu ( cxt -> ©t , 5); 530 `g_as£¹ (! sucûss ); 532 sucûss = `g_©Œib_£t_mtu ( cxt -> ©t , 255); 533 `g_as£¹ ( sucûss ); 535 buf = `g_©Œib_g‘_bufãr ( cxt -> ©t , & buæ’ ); 536 `g_as£¹ ( buf != 0); 537 `g_as£¹_cmpšt ( buæ’ , ==, 255); 538 } } 540  $maš ( ¬gc , * ¬gv []) 542 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 544 ià( `g_‹¡_v”bo£ ()) 545 `__btd_log_š™ ("*", 0); 550 `g_‹¡_add ("/g©Œib/»fcouÁ",  cÚ‹xt , NULL , £tup_cÚ‹xt , 551 ‹¡_»fcouÁ , ‹¬down_cÚ‹xt ); 552 `g_‹¡_add ("/g©Œib/g‘_chªÃl",  cÚ‹xt , NULL , £tup_cÚ‹xt , 553 ‹¡_g‘_chªÃl , ‹¬down_cÚ‹xt ); 554 `g_‹¡_add ("/g©Œib/£nd",  cÚ‹xt , NULL , £tup_cÚ‹xt , 555 ‹¡_£nd , ‹¬down_cÚ‹xt ); 556 `g_‹¡_add ("/g©Œib/ÿnûl",  cÚ‹xt , NULL , £tup_cÚ‹xt , 557 ‹¡_ÿnûl , ‹¬down_cÚ‹xt ); 558 `g_‹¡_add ("/g©Œib/»gi¡”",  cÚ‹xt , NULL , £tup_cÚ‹xt , 559 ‹¡_»gi¡” , ‹¬down_cÚ‹xt ); 560 `g_‹¡_add ("/g©Œib/bufãrs",  cÚ‹xt , NULL , £tup_cÚ‹xt , 561 ‹¡_bufãrs , ‹¬down_cÚ‹xt ); 563  `g_‹¡_run (); 564 } } @unit/test-gdbus-client.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~ 31  #SERVICE_NAME "Üg.bluez.un™.‹¡-gdbus-þ›Á" ) 32  #SERVICE_NAME1 "Üg.bluez.un™.‹¡-gdbus-þ›Á1" ) 33  #SERVICE_PATH "/Üg/bluez/un™/‹¡_gdbus_þ›Á" ) 35  scÚ‹xt { 36 GMašLoÝ * mmaš_loÝ ; 37 DBusCÚÃùiÚ * mdbus_cÚn ; 38 GDBusCl›Á * mdbus_þ›Á ; 39 GDBusProxy * m´oxy ; 40 * md©a ; 41 gboÞ—n mþ›Á_»ady ; 42 gušt mtimeout_sourû ; 45 cÚ¡ GDBusM‘hodTabË gm‘hods [] = { 49 cÚ¡ GDBusSigÇlTabË gsigÇls [] = { 53 cÚ¡ GDBusPrÝ”tyTabË g´Ý”t›s [] = { 57  cÚ‹xt * $ü—‹_cÚ‹xt () 59  cÚ‹xt *cÚ‹xˆð `g_Ãw0 (context, 1); 60 DBusE¼Ü ”r ; 62 cÚ‹xt -> maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 63 ià( cÚ‹xt -> maš_loÝ =ð NULL ) { 64 `g_ä“ ( cÚ‹xt ); 65  NULL ; 68 `dbus_”rÜ_š™ (& ”r ); 70 cÚ‹xt -> dbus_cÚn = `g_dbus_£tup_´iv©e ( DBUS_BUS_SESSION , 71 SERVICE_NAME , & ”r ); 72 ià( cÚ‹xt -> dbus_cÚn =ð NULL ) { 73 ià( `dbus_”rÜ_is_£t (& ”r )) { 74 ià( `g_‹¡_v”bo£ ()) 75 `g_´š‹¼ ("D-Bus setup failed: %s\n", 76 ”r . mes§ge ); 77 `dbus_”rÜ_ä“ (& ”r ); 80 `g_maš_loÝ_uÄef ( cÚ‹xt -> maš_loÝ ); 81 `g_ä“ ( cÚ‹xt ); 82  NULL ; 86 `dbus_cÚÃùiÚ_£t_ex™_Ú_discÚÃù ( cÚ‹xt -> dbus_cÚn , FALSE ); 88 `g_dbus_©ch_objeù_mªag” ( cÚ‹xt -> dbus_cÚn ); 89 cÚ‹xt -> þ›Á_»ady = FALSE ; 91  cÚ‹xt ; 92 } } 94  $de¡roy_cÚ‹xt ( cÚ‹xt *context) 96 ià( cÚ‹xt =ð NULL ) 99 ià( cÚ‹xt -> timeout_sourû > 0) 100 `g_sourû_»move ( cÚ‹xt -> timeout_sourû ); 102 `g_dbus_d‘ach_objeù_mªag” ( cÚ‹xt -> dbus_cÚn ); 104 `dbus_cÚÃùiÚ_æush ( cÚ‹xt -> dbus_cÚn ); 105 `dbus_cÚÃùiÚ_þo£ ( cÚ‹xt -> dbus_cÚn ); 106 `dbus_cÚÃùiÚ_uÄef ( cÚ‹xt -> dbus_cÚn ); 108 `g_maš_loÝ_uÄef ( cÚ‹xt -> maš_loÝ ); 110 `g_ä“ ( cÚ‹xt -> d©a ); 111 `g_ä“ ( cÚ‹xt ); 112 } } 114  gboÞ—n $timeout_hªdËr ( gpoš‹r u£r_d©a ) 116  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 118 ià( `g_‹¡_v”bo£ ()) 119 `g_´št ("timeoutriggered\n"); 121 cÚ‹xt -> timeout_sourû = 0; 123 `g_dbus_þ›Á_uÄef ( cÚ‹xt -> dbus_þ›Á ); 125  FALSE ; 126 } } 128  $cÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 130  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 132 ià( `g_‹¡_v”bo£ ()) 133 `g_´št ("service connected\n"); 135 `g_dbus_þ›Á_uÄef ( cÚ‹xt -> dbus_þ›Á ); 136 } } 138  $discÚÃù_hªdËr ( DBusCÚÃùiÚ * cÚÃùiÚ , * u£r_d©a ) 140  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 142 ià( `g_‹¡_v”bo£ ()) 143 `g_´št ("service disconnected\n"); 145 `g_maš_loÝ_qu™ ( cÚ‹xt -> maš_loÝ ); 146 } } 148  $sim¶e_þ›Á () 150  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 152 ià( cÚ‹xt =ð NULL ) 155 cÚ‹xt -> dbus_þ›Á = `g_dbus_þ›Á_Ãw (cÚ‹xt-> dbus_cÚn , 156 SERVICE_NAME , SERVICE_PATH ); 158 `g_dbus_þ›Á_£t_cÚÃù_w©ch ( cÚ‹xt -> dbus_þ›Á , 159 cÚÃù_hªdËr , cÚ‹xt ); 160 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( cÚ‹xt -> dbus_þ›Á , 161 discÚÃù_hªdËr , cÚ‹xt ); 163 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 165 `de¡roy_cÚ‹xt ( cÚ‹xt ); 166 } } 168  $þ›Á_cÚÃù_discÚÃù () 170  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 172 ià( cÚ‹xt =ð NULL ) 175 `g_dbus_»gi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 176 SERVICE_PATH , SERVICE_NAME , 177 m‘hods , sigÇls , ´Ý”t›s , NULL , NULL); 179 cÚ‹xt -> dbus_þ›Á = `g_dbus_þ›Á_Ãw (cÚ‹xt-> dbus_cÚn , 180 SERVICE_NAME , SERVICE_PATH ); 182 `g_dbus_þ›Á_£t_cÚÃù_w©ch ( cÚ‹xt -> dbus_þ›Á , 183 cÚÃù_hªdËr , cÚ‹xt ); 184 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( cÚ‹xt -> dbus_þ›Á , 185 discÚÃù_hªdËr , cÚ‹xt ); 187 cÚ‹xt -> timeout_sourû = `g_timeout_add_£cÚds (10, timeout_hªdËr , 188 cÚ‹xt ); 190 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 192 `g_dbus_uÄegi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 193 SERVICE_PATH , SERVICE_NAME ); 195 `de¡roy_cÚ‹xt ( cÚ‹xt ); 196 } } 198  $­³nd_v¬ŸÁ ( DBusMes§geI‹r * ™” ,  ty³ , * v® ) 200 DBusMes§geI‹r v®ue ; 201  sig [2] = { ty³ , '\0' }; 203 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_VARIANT , sig , & v®ue ); 205 `dbus_mes§ge_™”_­³nd_basic (& v®ue , ty³ , v® ); 207 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & v®ue ); 208 } } 210  $diù_­³nd_’Œy ( DBusMes§geI‹r * diù , cÚ¡ * key ,  ty³ , 211 * v® ) 213 DBusMes§geI‹r ’Œy ; 215 ià( ty³ =ð DBUS_TYPE_STRING ) { 216 cÚ¡ * ¡r = *((cÚ¡ **è v® ); 217 ià( ¡r =ð NULL ) 221 `dbus_mes§ge_™”_Ý’_cÚš” ( diù , DBUS_TYPE_DICT_ENTRY , 222 NULL , & ’Œy ); 224 `dbus_mes§ge_™”_­³nd_basic (& ’Œy , DBUS_TYPE_STRING , & key ); 226 `­³nd_v¬ŸÁ (& ’Œy , ty³ , v® ); 228 `dbus_mes§ge_™”_þo£_cÚš” ( diù , & ’Œy ); 229 } } 231  gboÞ—n $g‘_diù (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 232 DBusMes§geI‹r * ™” , * d©a ) 234 DBusMes§geI‹r diù ; 235 cÚ¡ * ¡ršg = "value"; 236 dbus_boÞ_t boÞ—n = TRUE ; 238 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , 239 DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING 240 DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING 241 DBUS_DICT_ENTRY_END_CHAR_AS_STRING , & diù ); 243 `diù_­³nd_’Œy (& diù , "SŒšg", DBUS_TYPE_STRING , & ¡ršg ); 244 `diù_­³nd_’Œy (& diù , "BoÞ—n", DBUS_TYPE_BOOLEAN , & boÞ—n ); 246 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & diù ); 248  TRUE ; 249 } } 251  $´oxy_g‘_diù ( GDBusProxy * ´oxy , * u£r_d©a ) 253  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 254 DBusMes§geI‹r ™” , diù , v¬1 , v¬2 , ’Œy1 , ’Œy2 ; 255 cÚ¡ * ¡ršg ; 256 dbus_boÞ_t boÞ—n ; 258 ià( `g_‹¡_v”bo£ ()) 259 `g_´št ("proxy %s found\n", 260 `g_dbus_´oxy_g‘_š‹rçû ( ´oxy )); 262 `g_as£¹ ( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Diù", & ™” )); 263 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è=ð DBUS_TYPE_ARRAY ); 265 `dbus_mes§ge_™”_»cur£ (& ™” , & diù ); 266 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& diù ) == 267 DBUS_TYPE_DICT_ENTRY ); 269 `dbus_mes§ge_™”_»cur£ (& diù , & ’Œy1 ); 270 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy1 è=ð DBUS_TYPE_STRING ); 272 `dbus_mes§ge_™”_g‘_basic (& ’Œy1 , & ¡ršg ); 273 `g_as£¹ ( `g_¡rcmp0 ( ¡ršg , "String") == 0); 275 `dbus_mes§ge_™”_Ãxt (& ’Œy1 ); 276 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy1 è=ð DBUS_TYPE_VARIANT ); 278 `dbus_mes§ge_™”_»cur£ (& ’Œy1 , & v¬1 ); 279 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& v¬1 è=ð DBUS_TYPE_STRING ); 281 `dbus_mes§ge_™”_g‘_basic (& v¬1 , & ¡ršg ); 282 `g_as£¹ ( `g_¡rcmp0 ( ¡ršg , "value") == 0); 284 `dbus_mes§ge_™”_Ãxt (& diù ); 285 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& diù ) == 286 DBUS_TYPE_DICT_ENTRY ); 288 `dbus_mes§ge_™”_»cur£ (& diù , & ’Œy2 ); 289 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy2 è=ð DBUS_TYPE_STRING ); 291 `dbus_mes§ge_™”_g‘_basic (& ’Œy2 , & ¡ršg ); 292 `g_as£¹ ( `g_¡rcmp0 ( ¡ršg , "Boolean") == 0); 294 `dbus_mes§ge_™”_Ãxt (& ’Œy2 ); 295 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy2 è=ð DBUS_TYPE_VARIANT ); 297 `dbus_mes§ge_™”_»cur£ (& ’Œy2 , & v¬2 ); 298 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& v¬2 è=ð DBUS_TYPE_BOOLEAN ); 300 `dbus_mes§ge_™”_g‘_basic (& v¬2 , & boÞ—n ); 301 `g_as£¹ ( boÞ—n =ð TRUE ); 303 `dbus_mes§ge_™”_Ãxt (& diù ); 304 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& diù è=ð DBUS_TYPE_INVALID ); 306 `g_dbus_þ›Á_uÄef ( cÚ‹xt -> dbus_þ›Á ); 307 } } 309  $þ›Á_g‘_diù_´Ý”ty () 311  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 312 cÚ¡ GDBusPrÝ”tyTabË diù_´Ý”t›s [] = { 313 { "Diù", "a{sv}", g‘_diù }, 317 ià( cÚ‹xt =ð NULL ) 320 `g_dbus_»gi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 321 SERVICE_PATH , SERVICE_NAME , 322 m‘hods , sigÇls , diù_´Ý”t›s , 323 NULL , NULL); 325 cÚ‹xt -> dbus_þ›Á = `g_dbus_þ›Á_Ãw (cÚ‹xt-> dbus_cÚn , 326 SERVICE_NAME , SERVICE_PATH ); 328 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( cÚ‹xt -> dbus_þ›Á , 329 discÚÃù_hªdËr , cÚ‹xt ); 330 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( cÚ‹xt -> dbus_þ›Á , ´oxy_g‘_diù , 331 NULL , NULL, cÚ‹xt ); 333 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 335 `g_dbus_uÄegi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 336 SERVICE_PATH , SERVICE_NAME ); 338 `de¡roy_cÚ‹xt ( cÚ‹xt ); 339 } } 341  $´oxy_g‘_¡ršg ( GDBusProxy * ´oxy , * u£r_d©a ) 343  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 344 DBusMes§geI‹r ™” ; 345 cÚ¡ * ¡ršg ; 347 ià( `g_‹¡_v”bo£ ()) 348 `g_´št ("proxy %s found\n", 349 `g_dbus_´oxy_g‘_š‹rçû ( ´oxy )); 351 `g_as£¹ ( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "SŒšg", & ™” )); 352 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è=ð DBUS_TYPE_STRING ); 354 `dbus_mes§ge_™”_g‘_basic (& ™” , & ¡ršg ); 355 `g_as£¹ ( `g_¡rcmp0 ( ¡ršg , "value") == 0); 357 `g_dbus_þ›Á_uÄef ( cÚ‹xt -> dbus_þ›Á ); 358 } } 360  gboÞ—n $g‘_¡ršg (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 361 DBusMes§geI‹r * ™” , * d©a ) 363  cÚ‹xt *cÚ‹xˆð d©a ; 365 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_STRING , & cÚ‹xt -> d©a ); 367  TRUE ; 368 } } 370  $þ›Á_g‘_¡ršg_´Ý”ty () 372  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 373 cÚ¡ GDBusPrÝ”tyTabË ¡ršg_´Ý”t›s [] = { 374 { "SŒšg", "s", g‘_¡ršg }, 378 ià( cÚ‹xt =ð NULL ) 381 cÚ‹xt -> d©a = `g_¡rdup ("value"); 382 `g_dbus_»gi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 383 SERVICE_PATH , SERVICE_NAME , 384 m‘hods , sigÇls , ¡ršg_´Ý”t›s , 385 cÚ‹xt , NULL ); 387 cÚ‹xt -> dbus_þ›Á = `g_dbus_þ›Á_Ãw (cÚ‹xt-> dbus_cÚn , 388 SERVICE_NAME , SERVICE_PATH ); 390 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( cÚ‹xt -> dbus_þ›Á , 391 discÚÃù_hªdËr , cÚ‹xt ); 392 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( cÚ‹xt -> dbus_þ›Á , ´oxy_g‘_¡ršg , 393 NULL , NULL, cÚ‹xt ); 395 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 397 `g_dbus_uÄegi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 398 SERVICE_PATH , SERVICE_NAME ); 400 `de¡roy_cÚ‹xt ( cÚ‹xt ); 401 } } 403  $´oxy_g‘_boÞ—n ( GDBusProxy * ´oxy , * u£r_d©a ) 405  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 406 DBusMes§geI‹r ™” ; 407 dbus_boÞ_t v®ue ; 409 ià( `g_‹¡_v”bo£ ()) 410 `g_´št ("proxy %s found\n", 411 `g_dbus_´oxy_g‘_š‹rçû ( ´oxy )); 413 `g_as£¹ ( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "BoÞ—n", & ™” )); 414 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è=ð DBUS_TYPE_BOOLEAN ); 416 `dbus_mes§ge_™”_g‘_basic (& ™” , & v®ue ); 417 `g_as£¹ ( v®ue =ð TRUE ); 419 `g_dbus_þ›Á_uÄef ( cÚ‹xt -> dbus_þ›Á ); 420 } } 422  gboÞ—n $g‘_boÞ—n (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 423 DBusMes§geI‹r * ™” , * d©a ) 425 dbus_boÞ_t v®ue = TRUE ; 427 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_BOOLEAN , & v®ue ); 429  TRUE ; 430 } } 432  $þ›Á_g‘_boÞ—n_´Ý”ty () 434  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 435 cÚ¡ GDBusPrÝ”tyTabË boÞ—n_´Ý”t›s [] = { 436 { "BoÞ—n", "b", g‘_boÞ—n }, 440 ià( cÚ‹xt =ð NULL ) 443 `g_dbus_»gi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 444 SERVICE_PATH , SERVICE_NAME , 445 m‘hods , sigÇls , boÞ—n_´Ý”t›s , 446 NULL , NULL); 448 cÚ‹xt -> dbus_þ›Á = `g_dbus_þ›Á_Ãw (cÚ‹xt-> dbus_cÚn , 449 SERVICE_NAME , SERVICE_PATH ); 451 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( cÚ‹xt -> dbus_þ›Á , 452 ´oxy_g‘_boÞ—n , 453 NULL , NULL, cÚ‹xt ); 454 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( cÚ‹xt -> dbus_þ›Á , 455 discÚÃù_hªdËr , cÚ‹xt ); 457 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 459 `g_dbus_uÄegi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 460 SERVICE_PATH , SERVICE_NAME ); 462 `de¡roy_cÚ‹xt ( cÚ‹xt ); 463 } } 465  $´oxy_g‘_¬¿y ( GDBusProxy * ´oxy , * u£r_d©a ) 467  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 468 DBusMes§geI‹r ™” , ’Œy ; 469 cÚ¡ * v®ue1 , * v®ue2 ; 471 ià( `g_‹¡_v”bo£ ()) 472 `g_´št ("proxy %s found\n", 473 `g_dbus_´oxy_g‘_š‹rçû ( ´oxy )); 475 `g_as£¹ ( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "A¼ay", & ™” )); 476 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è=ð DBUS_TYPE_ARRAY ); 478 `dbus_mes§ge_™”_»cur£ (& ™” , & ’Œy ); 479 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy è=ð DBUS_TYPE_STRING ); 481 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & v®ue1 ); 482 `g_as£¹ ( `g_¡rcmp0 ( v®ue1 , "value1") == 0); 484 `dbus_mes§ge_™”_Ãxt (& ’Œy ); 485 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ’Œy è=ð DBUS_TYPE_STRING ); 487 `dbus_mes§ge_™”_g‘_basic (& ’Œy , & v®ue2 ); 488 `g_as£¹ ( `g_¡rcmp0 ( v®ue2 , "value2") == 0); 490 `g_dbus_þ›Á_uÄef ( cÚ‹xt -> dbus_þ›Á ); 491 } } 493  gboÞ—n $g‘_¬¿y (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 494 DBusMes§geI‹r * ™” , * d©a ) 496 cÚ¡ * v®ue [2] = { "value1", "value2" }; 497 DBusMes§geI‹r ¬¿y ; 499 `dbus_mes§ge_™”_Ý’_cÚš” ( ™” , DBUS_TYPE_ARRAY , "s", & ¬¿y ); 501 `dbus_mes§ge_™”_­³nd_basic (& ¬¿y , DBUS_TYPE_STRING , & v®ue [0]); 502 `dbus_mes§ge_™”_­³nd_basic (& ¬¿y , DBUS_TYPE_STRING , & v®ue [1]); 504 `dbus_mes§ge_™”_þo£_cÚš” ( ™” , & ¬¿y ); 506  TRUE ; 507 } } 509  $þ›Á_g‘_¬¿y_´Ý”ty () 511  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 512 cÚ¡ GDBusPrÝ”tyTabË ¬¿y_´Ý”t›s [] = { 513 { "A¼ay", "as", g‘_¬¿y }, 517 ià( cÚ‹xt =ð NULL ) 520 `g_dbus_»gi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 521 SERVICE_PATH , SERVICE_NAME , 522 m‘hods , sigÇls , ¬¿y_´Ý”t›s , 523 NULL , NULL); 525 cÚ‹xt -> dbus_þ›Á = `g_dbus_þ›Á_Ãw (cÚ‹xt-> dbus_cÚn , 526 SERVICE_NAME , SERVICE_PATH ); 528 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( cÚ‹xt -> dbus_þ›Á , ´oxy_g‘_¬¿y , 529 NULL , NULL, cÚ‹xt ); 530 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( cÚ‹xt -> dbus_þ›Á , 531 discÚÃù_hªdËr , cÚ‹xt ); 533 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 535 `g_dbus_uÄegi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 536 SERVICE_PATH , SERVICE_NAME ); 538 `de¡roy_cÚ‹xt ( cÚ‹xt ); 539 } } 541  $´oxy_g‘_ušt64 ( GDBusProxy * ´oxy , * u£r_d©a ) 543  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 544 DBusMes§geI‹r ™” ; 545 gušt64 v®ue ; 547 ià( `g_‹¡_v”bo£ ()) 548 `g_´št ("proxy %s found\n", 549 `g_dbus_´oxy_g‘_š‹rçû ( ´oxy )); 551 `g_as£¹ ( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "Numb”", & ™” )); 552 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è=ð DBUS_TYPE_UINT64 ); 554 `dbus_mes§ge_™”_g‘_basic (& ™” , & v®ue ); 555 `g_as£¹ ( v®ue =ð G_MAXUINT64 ); 557 `g_dbus_þ›Á_uÄef ( cÚ‹xt -> dbus_þ›Á ); 558 } } 560  gboÞ—n $g‘_ušt64 (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 561 DBusMes§geI‹r * ™” , * d©a ) 563 gušt64 v®ue = G_MAXUINT64 ; 565 `dbus_mes§ge_™”_­³nd_basic ( ™” , DBUS_TYPE_UINT64 , & v®ue ); 567  TRUE ; 568 } } 570  $þ›Á_g‘_ušt64_´Ý”ty () 572  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 573 cÚ¡ GDBusPrÝ”tyTabË ušt64_´Ý”t›s [] = { 574 { "Numb”", "t", g‘_ušt64 }, 578 ià( cÚ‹xt =ð NULL ) 581 `g_dbus_»gi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 582 SERVICE_PATH , SERVICE_NAME , 583 m‘hods , sigÇls , ušt64_´Ý”t›s , 584 NULL , NULL); 586 cÚ‹xt -> dbus_þ›Á = `g_dbus_þ›Á_Ãw (cÚ‹xt-> dbus_cÚn , 587 SERVICE_NAME , SERVICE_PATH ); 589 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( cÚ‹xt -> dbus_þ›Á , 590 ´oxy_g‘_ušt64 , 591 NULL , NULL, cÚ‹xt ); 592 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( cÚ‹xt -> dbus_þ›Á , 593 discÚÃù_hªdËr , cÚ‹xt ); 595 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 597 `g_dbus_uÄegi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 598 SERVICE_PATH , SERVICE_NAME ); 600 `de¡roy_cÚ‹xt ( cÚ‹xt ); 601 } } 603  $´Ý”ty_£t_sucûss (cÚ¡ DBusE¼Ü * ”r , * u£r_d©a ) 605 `g_as£¹ (! `dbus_”rÜ_is_£t ( ”r )); 606 } } 608  $´oxy_£t_¡ršg ( GDBusProxy * ´oxy , * u£r_d©a ) 610 DBusMes§geI‹r ™” ; 611 cÚ¡ * ¡ršg ; 613 ià( `g_‹¡_v”bo£ ()) 614 `g_´št ("proxy %s found\n", 615 `g_dbus_´oxy_g‘_š‹rçû ( ´oxy )); 617 `g_as£¹ ( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "SŒšg", & ™” )); 618 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ (& ™” è=ð DBUS_TYPE_STRING ); 620 `dbus_mes§ge_™”_g‘_basic (& ™” , & ¡ršg ); 621 `g_as£¹ ( `g_¡rcmp0 ( ¡ršg , "value") == 0); 623 ¡ršg = "value1"; 624 `g_as£¹ ( `g_dbus_´oxy_£t_´Ý”ty_basic ( ´oxy , "String", 625 DBUS_TYPE_STRING , & ¡ršg , 626 ´Ý”ty_£t_sucûss , u£r_d©a , 627 NULL )); 628 } } 630  $´Ý”ty_¡ršg_chªged ( GDBusProxy * ´oxy , cÚ¡ * Çme , 631 DBusMes§geI‹r * ™” , * u£r_d©a ) 633  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 634 cÚ¡ * ¡ršg ; 636 ià( `g_‹¡_v”bo£ ()) 637 `g_´št ("´Ý”ty % chªged\n", Çme ); 639 `g_as£¹ ( `g_¡rcmp0 ( Çme , "String") == 0); 640 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è=ð DBUS_TYPE_STRING ); 642 `dbus_mes§ge_™”_g‘_basic ( ™” , & ¡ršg ); 643 `g_as£¹ ( `g_¡rcmp0 ( ¡ršg , "value1") == 0); 645 `g_dbus_þ›Á_uÄef ( cÚ‹xt -> dbus_þ›Á ); 646 } } 648  $£t_¡ršg (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , 649 DBusMes§geI‹r * ™” , GDBusP’dšgPrÝ”tyS‘ id , 650 * d©a ) 652  cÚ‹xt *cÚ‹xˆð d©a ; 653 cÚ¡ * ¡ršg ; 655 `g_as£¹ ( `dbus_mes§ge_™”_g‘_¬g_ty³ ( ™” è=ð DBUS_TYPE_STRING ); 657 `dbus_mes§ge_™”_g‘_basic ( ™” , & ¡ršg ); 658 `g_as£¹ ( `g_¡rcmp0 ( ¡ršg , "value1") == 0); 660 `g_ä“ ( cÚ‹xt -> d©a ); 661 cÚ‹xt -> d©a = `g_¡rdup ( ¡ršg ); 663 `g_dbus_em™_´Ý”ty_chªged ( cÚ‹xt -> dbus_cÚn , SERVICE_PATH , 664 SERVICE_NAME , "String"); 666 `g_dbus_³ndšg_´Ý”ty_sucûss ( id ); 667 } } 669  $þ›Á_£t_¡ršg_´Ý”ty () 671  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 672 cÚ¡ GDBusPrÝ”tyTabË ¡ršg_´Ý”t›s [] = { 673 { "SŒšg", "s", g‘_¡ršg , £t_¡ršg }, 677 ià( cÚ‹xt =ð NULL ) 680 cÚ‹xt -> d©a = `g_¡rdup ("value"); 681 `g_dbus_»gi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 682 SERVICE_PATH , SERVICE_NAME , 683 m‘hods , sigÇls , ¡ršg_´Ý”t›s , 684 cÚ‹xt , NULL ); 686 cÚ‹xt -> dbus_þ›Á = `g_dbus_þ›Á_Ãw (cÚ‹xt-> dbus_cÚn , 687 SERVICE_NAME , SERVICE_PATH ); 689 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( cÚ‹xt -> dbus_þ›Á , 690 discÚÃù_hªdËr , cÚ‹xt ); 691 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( cÚ‹xt -> dbus_þ›Á , ´oxy_£t_¡ršg , 692 NULL , ´Ý”ty_¡ršg_chªged , 693 cÚ‹xt ); 695 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 697 `g_dbus_uÄegi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 698 SERVICE_PATH , SERVICE_NAME ); 700 `de¡roy_cÚ‹xt ( cÚ‹xt ); 701 } } 703  gboÞ—n $¡ršg_exi¡s (cÚ¡ GDBusPrÝ”tyTabË * ´Ý”ty , * d©a ) 705  cÚ‹xt *cÚ‹xˆð d©a ; 707  cÚ‹xt -> d©a !ð NULL ; 708 } } 710  gboÞ—n $timeout_‹¡ ( gpoš‹r u£r_d©a ) 712  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 714 ià( `g_‹¡_v”bo£ ()) 715 `g_´št ("timeoutriggered\n"); 717 cÚ‹xt -> timeout_sourû = 0; 719 `g_as£¹_nÙ_»ached (); 721  FALSE ; 722 } } 724  gboÞ—n $em™_¡ršg_chªge (* u£r_d©a ) 726  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 728 cÚ‹xt -> d©a = `g_¡rdup ("value1"); 730 `g_dbus_em™_´Ý”ty_chªged ( cÚ‹xt -> dbus_cÚn , SERVICE_PATH , 731 SERVICE_NAME , "String"); 733 cÚ‹xt -> timeout_sourû = `g_timeout_add_£cÚds (2, timeout_‹¡ , 734 cÚ‹xt ); 736  FALSE ; 737 } } 739  $´oxy_¡ršg_chªged ( GDBusProxy * ´oxy , * u£r_d©a ) 741  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 742 DBusMes§geI‹r ™” ; 744 ià( `g_‹¡_v”bo£ ()) 745 `g_´št ("proxy %s found\n", 746 `g_dbus_´oxy_g‘_š‹rçû ( ´oxy )); 748 `g_as£¹ (! `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "SŒšg", & ™” )); 750 `g_idË_add ( em™_¡ršg_chªge , cÚ‹xt ); 751 } } 753  $þ›Á_¡ršg_chªged () 755  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 756 cÚ¡ GDBusPrÝ”tyTabË ¡ršg_´Ý”t›s [] = { 757 { "SŒšg", "s", g‘_¡ršg , NULL , ¡ršg_exi¡s }, 761 ià( cÚ‹xt =ð NULL ) 764 `g_dbus_»gi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 765 SERVICE_PATH , SERVICE_NAME , 766 m‘hods , sigÇls , ¡ršg_´Ý”t›s , 767 cÚ‹xt , NULL ); 769 cÚ‹xt -> dbus_þ›Á = `g_dbus_þ›Á_Ãw (cÚ‹xt-> dbus_cÚn , 770 SERVICE_NAME , SERVICE_PATH ); 772 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( cÚ‹xt -> dbus_þ›Á , 773 discÚÃù_hªdËr , cÚ‹xt ); 774 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( cÚ‹xt -> dbus_þ›Á , 775 ´oxy_¡ršg_chªged , NULL , 776 ´Ý”ty_¡ršg_chªged , 777 cÚ‹xt ); 779 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 781 `g_dbus_uÄegi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 782 SERVICE_PATH , SERVICE_NAME ); 784 `de¡roy_cÚ‹xt ( cÚ‹xt ); 785 } } 787  $´Ý”ty_check_Üd” (cÚ¡ DBusE¼Ü * ”r , * u£r_d©a ) 789  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 790 GDBusProxy * ´oxy = cÚ‹xt ->proxy; 791 DBusMes§geI‹r ™” ; 792 cÚ¡ * ¡ršg ; 794 `g_as£¹ (! `dbus_”rÜ_is_£t ( ”r )); 796 `g_as£¹ ( `g_dbus_´oxy_g‘_´Ý”ty ( ´oxy , "SŒšg", & ™” )); 798 `dbus_mes§ge_™”_g‘_basic (& ™” , & ¡ršg ); 799 `g_as£¹ ( `g_¡rcmp0 ( ¡ršg , "value1") == 0); 801 `g_dbus_þ›Á_uÄef ( cÚ‹xt -> dbus_þ›Á ); 802 } } 804  $´oxy_check_Üd” ( GDBusProxy * ´oxy , * u£r_d©a ) 806  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 807 cÚ¡ * ¡ršg ; 809 ià( `g_‹¡_v”bo£ ()) 810 `g_´št ("proxy %s found\n", 811 `g_dbus_´oxy_g‘_š‹rçû ( ´oxy )); 813 cÚ‹xt -> ´oxy =…roxy; 814 ¡ršg = "value1"; 815 `g_as£¹ ( `g_dbus_´oxy_£t_´Ý”ty_basic ( ´oxy , "String", 816 DBUS_TYPE_STRING , & ¡ršg , 817 ´Ý”ty_check_Üd” , cÚ‹xt , 818 NULL )); 819 } } 821  $þ›Á_check_Üd” () 823  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 824 cÚ¡ GDBusPrÝ”tyTabË ¡ršg_´Ý”t›s [] = { 825 { "SŒšg", "s", g‘_¡ršg , £t_¡ršg , ¡ršg_exi¡s }, 829 ià( cÚ‹xt =ð NULL ) 832 cÚ‹xt -> d©a = `g_¡rdup ("value"); 833 `g_dbus_»gi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 834 SERVICE_PATH , SERVICE_NAME , 835 m‘hods , sigÇls , ¡ršg_´Ý”t›s , 836 cÚ‹xt , NULL ); 838 cÚ‹xt -> dbus_þ›Á = `g_dbus_þ›Á_Ãw (cÚ‹xt-> dbus_cÚn , 839 SERVICE_NAME , SERVICE_PATH ); 841 `g_dbus_þ›Á_£t_discÚÃù_w©ch ( cÚ‹xt -> dbus_þ›Á , 842 discÚÃù_hªdËr , cÚ‹xt ); 843 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( cÚ‹xt -> dbus_þ›Á , 844 ´oxy_check_Üd” , NULL , NULL, 845 cÚ‹xt ); 847 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 849 `g_dbus_uÄegi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 850 SERVICE_PATH , SERVICE_NAME ); 852 `de¡roy_cÚ‹xt ( cÚ‹xt ); 853 } } 855  $´oxy_»moved ( GDBusProxy * ´oxy , * u£r_d©a ) 857  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 859 ià( `g_‹¡_v”bo£ ()) 860 `g_´št ("proxy„emoved\n"); 862 `g_maš_loÝ_qu™ ( cÚ‹xt -> maš_loÝ ); 863 } } 865  $´oxy_£t_»moved ( GDBusProxy * ´oxy , * u£r_d©a ) 867  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 869 ià( `g_‹¡_v”bo£ ()) 870 `g_´št ("proxy %s found\n", 871 `g_dbus_´oxy_g‘_š‹rçû ( ´oxy )); 873 `g_as£¹ ( `g_dbus_´oxy_£t_»moved_w©ch ( ´oxy , ´oxy_»moved , cÚ‹xt )); 875 cÚ‹xt -> timeout_sourû = `g_timeout_add_£cÚds (2, timeout_‹¡ , 876 cÚ‹xt ); 878 `g_dbus_uÄegi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , SERVICE_PATH , 879 SERVICE_NAME ); 880 } } 882  $þ›Á_´oxy_»moved () 884  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 885 cÚ¡ GDBusPrÝ”tyTabË ¡ršg_´Ý”t›s [] = { 886 { "SŒšg", "s", g‘_¡ršg , £t_¡ršg , ¡ršg_exi¡s }, 890 ià( cÚ‹xt =ð NULL ) 893 `g_dbus_»gi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 894 SERVICE_PATH , SERVICE_NAME , 895 m‘hods , sigÇls , ¡ršg_´Ý”t›s , 896 cÚ‹xt , NULL ); 898 cÚ‹xt -> dbus_þ›Á = `g_dbus_þ›Á_Ãw (cÚ‹xt-> dbus_cÚn , 899 SERVICE_NAME , SERVICE_PATH ); 901 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( cÚ‹xt -> dbus_þ›Á , 902 ´oxy_£t_»moved , NULL , NULL, 903 cÚ‹xt ); 905 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 907 `de¡roy_cÚ‹xt ( cÚ‹xt ); 908 } } 910  $´oxy_fÜû_discÚÃù ( GDBusProxy * ´oxy , * u£r_d©a ) 912  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 913 DBusCÚÃùiÚ * cÚn = cÚ‹xt -> d©a ; 915 ià( `g_‹¡_v”bo£ ()) 916 `g_´št ("proxy %s found\n", 917 `g_dbus_´oxy_g‘_š‹rçû ( ´oxy )); 919 `g_as£¹ ( `g_dbus_´oxy_£t_»moved_w©ch ( ´oxy , ´oxy_»moved , cÚ‹xt )); 921 cÚ‹xt -> timeout_sourû = `g_timeout_add_£cÚds (2, timeout_‹¡ , 922 cÚ‹xt ); 924 `dbus_cÚÃùiÚ_æush ( cÚn ); 925 `dbus_cÚÃùiÚ_þo£ ( cÚn ); 926 cÚ‹xt -> d©a = NULL ; 927 } } 929  $þ›Á_fÜû_discÚÃù () 931  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 932 DBusCÚÃùiÚ * cÚn ; 933 cÚ¡ GDBusPrÝ”tyTabË ¡ršg_´Ý”t›s [] = { 934 { "SŒšg", "s", g‘_¡ršg , £t_¡ršg , ¡ršg_exi¡s }, 938 ià( cÚ‹xt =ð NULL ) 941 cÚn = `g_dbus_£tup_´iv©e ( DBUS_BUS_SESSION , SERVICE_NAME1 , NULL ); 942 `g_as£¹ ( cÚn !ð NULL ); 945 `dbus_cÚÃùiÚ_£t_ex™_Ú_discÚÃù ( cÚn , FALSE ); 946 `g_dbus_©ch_objeù_mªag” ( cÚn ); 947 cÚ‹xt -> d©a = cÚn ; 949 `g_dbus_»gi¡”_š‹rçû ( cÚn , SERVICE_PATH , SERVICE_NAME1 , 950 m‘hods , sigÇls , ¡ršg_´Ý”t›s , 951 cÚ‹xt , NULL ); 953 cÚ‹xt -> dbus_þ›Á = `g_dbus_þ›Á_Ãw (cÚ‹xt-> dbus_cÚn , 954 SERVICE_NAME1 , SERVICE_PATH ); 956 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( cÚ‹xt -> dbus_þ›Á , 957 ´oxy_fÜû_discÚÃù , NULL , NULL, 958 cÚ‹xt ); 960 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 962 `g_dbus_uÄegi¡”_š‹rçû ( cÚn , SERVICE_PATH , SERVICE_NAME1 ); 963 `g_dbus_d‘ach_objeù_mªag” ( cÚn ); 964 `dbus_cÚÃùiÚ_uÄef ( cÚn ); 966 `de¡roy_cÚ‹xt ( cÚ‹xt ); 967 } } 969  $þ›Á_»ady_w©ch ( GDBusCl›Á * þ›Á , * u£r_d©a ) 971  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 973 cÚ‹xt -> þ›Á_»ady = TRUE ; 974 } } 976  $´oxy_added ( GDBusProxy * ´oxy , * u£r_d©a ) 978  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 985 `g_as£¹ ( cÚ‹xt -> þ›Á_»ady =ð FALSE ); 987 `g_maš_loÝ_qu™ ( cÚ‹xt -> maš_loÝ ); 988 } } 990  $þ›Á_»ady () 992  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 993 cÚ¡ GDBusPrÝ”tyTabË ¡ršg_´Ý”t›s [] = { 994 { "SŒšg", "s", g‘_¡ršg , £t_¡ršg , ¡ršg_exi¡s }, 998 ià( cÚ‹xt =ð NULL ) 1001 `g_dbus_»gi¡”_š‹rçû ( cÚ‹xt -> dbus_cÚn , 1002 SERVICE_PATH , SERVICE_NAME , 1003 m‘hods , sigÇls , ¡ršg_´Ý”t›s , 1004 cÚ‹xt , NULL ); 1006 cÚ‹xt -> dbus_þ›Á = `g_dbus_þ›Á_Ãw (cÚ‹xt-> dbus_cÚn , 1007 SERVICE_NAME , SERVICE_PATH ); 1009 `g_dbus_þ›Á_£t_»ady_w©ch ( cÚ‹xt -> dbus_þ›Á , þ›Á_»ady_w©ch , 1010 cÚ‹xt ); 1011 `g_dbus_þ›Á_£t_´oxy_hªdËrs ( cÚ‹xt -> dbus_þ›Á , 1012 ´oxy_added , NULL , NULL, cÚ‹xt ); 1014 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 1016 `de¡roy_cÚ‹xt ( cÚ‹xt ); 1017 } } 1019  $maš ( ¬gc , * ¬gv []) 1021 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 1023 `g_‹¡_add_func ("/gdbus/sim¶e_þ›Á", sim¶e_þ›Á ); 1025 `g_‹¡_add_func ("/gdbus/client_connect_disconnect", 1026 þ›Á_cÚÃù_discÚÃù ); 1028 `g_‹¡_add_func ("/gdbus/client_get_string_property", 1029 þ›Á_g‘_¡ršg_´Ý”ty ); 1031 `g_‹¡_add_func ("/gdbus/client_get_boolean_property", 1032 þ›Á_g‘_boÞ—n_´Ý”ty ); 1034 `g_‹¡_add_func ("/gdbus/client_get_uint64_property", 1035 þ›Á_g‘_ušt64_´Ý”ty ); 1037 `g_‹¡_add_func ("/gdbus/client_get_array_property", 1038 þ›Á_g‘_¬¿y_´Ý”ty ); 1040 `g_‹¡_add_func ("/gdbus/client_get_dict_property", 1041 þ›Á_g‘_diù_´Ý”ty ); 1043 `g_‹¡_add_func ("/gdbus/client_set_string_property", 1044 þ›Á_£t_¡ršg_´Ý”ty ); 1046 `g_‹¡_add_func ("/gdbus/client_string_changed", 1047 þ›Á_¡ršg_chªged ); 1049 `g_‹¡_add_func ("/gdbus/þ›Á_check_Üd”", þ›Á_check_Üd” ); 1051 `g_‹¡_add_func ("/gdbus/þ›Á_´oxy_»moved", þ›Á_´oxy_»moved ); 1053 `g_‹¡_add_func ("/gdbus/client_force_disconnect", 1054 þ›Á_fÜû_discÚÃù ); 1056 `g_‹¡_add_func ("/gdbus/þ›Á_»ady", þ›Á_»ady ); 1058  `g_‹¡_run (); 1059 } } @unit/test-gobex-apparam.c 23 #ifdeà HAVE_CONFIG_H 24  ~"cÚfig.h " 27  ~<¡dšt.h > 28  ~<¡ršg.h > 30  ~ 32  ~"utž.h " 34  #TAG_U8 0x00 ) 35  #TAG_U16 0x01 ) 36  #TAG_U32 0x02 ) 37  #TAG_U64 0x03 ) 38  #TAG_STRING 0x04 ) 39  #TAG_BYTES 0x05 ) 41  ušt8_t gg_nv®_shÜt [] = { TAG_U8 }; 42  ušt8_t gg_nv®_d©a [] = { TAG_U8 , 0x01 }; 43  ušt8_t gg_nv®2_shÜt [] = { TAG_U8 , 0x01, 0x1, TAG_U16 }; 44  ušt8_t gg_nv®2_d©a [] = { TAG_U8 , 0x01, 0x1, TAG_U16 , 0x02 }; 45  ušt8_t gg_ušt8 [] = { TAG_U8 , 0x01, 0x01 }; 46  ušt8_t gg_ušt16 [] = { TAG_U16 , 0x02, 0x01, 0x02 }; 47  ušt8_t gg_ušt32 [] = { TAG_U32 , 0x04, 0x01, 0x02, 0x03, 0x04 }; 48  ušt8_t gg_ušt64 [] = { TAG_U64 , 0x08, 0x01, 0x02, 0x03, 0x04, 50  ušt8_t gg_¡ršg [] = { TAG_STRING , 0x04, 'A', 'B', 'C', '\0' }; 51  ušt8_t gg_by‹s [257] = { TAG_BYTES , 0xFF }; 52  ušt8_t gg_muÉi [] = { TAG_U8 , 0x01, 0x01, 53 TAG_U16 , 0x02, 0x01, 0x02, 54 TAG_U32 , 0x04, 0x01, 0x02, 0x03, 0x04, 55 TAG_U64 , 0x08, 0x01, 0x02, 0x03, 0x04, 57 TAG_STRING , 0x04, 'A', 'B', 'C', '\0' }; 60  GObexAµ¬am * $·r£_ªd_decode (cÚ¡ * d©a , gsize size ) 62 GObexAµ¬am * ­·¿m ; 63 gušt8 ’coded [1024]; 64 gsize Ën ; 66 ­·¿m = `g_obex_­·¿m_decode ( d©a , size ); 68 `g_as£¹ ( ­·¿m !ð NULL ); 70 Ën = `g_obex_­·¿m_’code ( ­·¿m , ’coded , (encoded)); 72 `as£¹_memequ® ( d©a , size , ’coded , Ën ); 74  ­·¿m ; 75 } } 77  $‹¡_­·¿m_nv®_shÜt () 79 GObexAµ¬am * ­·¿m ; 81 ­·¿m = `g_obex_­·¿m_decode ( g_nv®_shÜt , 82 ( g_nv®_shÜt )); 84 `g_as£¹ ( ­·¿m =ð NULL ); 85 } } 87  $‹¡_­·¿m_nv®_d©a () 89 GObexAµ¬am * ­·¿m ; 91 ­·¿m = `g_obex_­·¿m_decode ( g_nv®_d©a , 92 ( g_nv®_d©a )); 94 `g_as£¹ ( ­·¿m =ð NULL ); 95 } } 97  $‹¡_­·¿m_nv®2_shÜt () 99 GObexAµ¬am * ­·¿m ; 101 ­·¿m = `g_obex_­·¿m_decode ( g_nv®2_shÜt , 102 ( g_nv®2_shÜt )); 104 `g_as£¹ ( ­·¿m =ð NULL ); 105 } } 107  $‹¡_­·¿m_nv®2_d©a () 109 GObexAµ¬am * ­·¿m ; 111 ­·¿m = `g_obex_­·¿m_decode ( g_nv®2_d©a , 112 ( g_nv®2_d©a )); 114 `g_as£¹ ( ­·¿m =ð NULL ); 115 } } 117  $‹¡_­·¿m_g‘_ušt8 () 119 GObexAµ¬am * ­·¿m ; 120 gušt8 d©a ; 121 gboÞ—n »t ; 123 ­·¿m = `·r£_ªd_decode ( g_ušt8 , (tag_uint8)); 125 »t = `g_obex_­·¿m_g‘_ušt8 ( ­·¿m , TAG_U8 , & d©a ); 127 `g_as£¹ ( »t =ð TRUE ); 128 `g_as£¹ ( d©a == 0x01); 130 `g_obex_­·¿m_ä“ ( ­·¿m ); 131 } } 133  $‹¡_­·¿m_g‘_ušt16 () 135 GObexAµ¬am * ­·¿m ; 136 ušt16_t d©a ; 137 gboÞ—n »t ; 139 ­·¿m = `·r£_ªd_decode ( g_ušt16 , (tag_uint16)); 141 »t = `g_obex_­·¿m_g‘_ušt16 ( ­·¿m , TAG_U16 , & d©a ); 143 `g_as£¹ ( »t =ð TRUE ); 144 `g_as£¹ ( d©a == 0x0102); 146 `g_obex_­·¿m_ä“ ( ­·¿m ); 147 } } 149  $‹¡_­·¿m_g‘_ušt32 () 151 GObexAµ¬am * ­·¿m ; 152 ušt32_t d©a ; 153 gboÞ—n »t ; 155 ­·¿m = `·r£_ªd_decode ( g_ušt32 , (tag_uint32)); 157 »t = `g_obex_­·¿m_g‘_ušt32 ( ­·¿m , TAG_U32 , & d©a ); 159 `g_as£¹ ( »t =ð TRUE ); 160 `g_as£¹ ( d©a == 0x01020304); 162 `g_obex_­·¿m_ä“ ( ­·¿m ); 163 } } 165  $‹¡_­·¿m_g‘_ušt64 () 167 GObexAµ¬am * ­·¿m ; 168 ušt64_t d©a ; 169 gboÞ—n »t ; 171 ­·¿m = `·r£_ªd_decode ( g_ušt64 , (tag_uint64)); 173 »t = `g_obex_­·¿m_g‘_ušt64 ( ­·¿m , TAG_U64 , & d©a ); 175 `g_as£¹ ( »t =ð TRUE ); 176 `g_as£¹ ( d©a == 0x0102030405060708); 178 `g_obex_­·¿m_ä“ ( ­·¿m ); 179 } } 181  $‹¡_­·¿m_g‘_¡ršg () 183 GObexAµ¬am * ­·¿m ; 184 * ¡ršg ; 186 ­·¿m = `·r£_ªd_decode ( g_¡ršg , (tag_string)); 188 ¡ršg = `g_obex_­·¿m_g‘_¡ršg ( ­·¿m , TAG_STRING ); 190 `g_as£¹ ( ¡ršg !ð NULL ); 191 `g_as£¹_cmp¡r ( ¡ršg , ==, "ABC"); 193 `g_ä“ ( ¡ršg ); 194 `g_obex_­·¿m_ä“ ( ­·¿m ); 195 } } 197  $‹¡_­·¿m_g‘_by‹s () 199 GObexAµ¬am * ­·¿m ; 200 cÚ¡ ušt8_t * d©a ; 201 gsize Ën ; 202 gboÞ—n »t ; 204 ­·¿m = `·r£_ªd_decode ( g_by‹s , (tag_bytes)); 206 »t = `g_obex_­·¿m_g‘_by‹s ( ­·¿m , TAG_BYTES , & d©a , & Ën ); 208 `g_as£¹ ( »t =ð TRUE ); 209 `as£¹_memequ® ( g_by‹s + 2, Ñag_by‹sè- 2, d©a , Ën ); 211 `g_obex_­·¿m_ä“ ( ­·¿m ); 212 } } 214  $‹¡_­·¿m_g‘_muÉi () 216 GObexAµ¬am * ­·¿m ; 217 * ¡ršg ; 218 ušt8_t d©a8 ; 219 ušt16_t d©a16 ; 220 ušt32_t d©a32 ; 221 ušt64_t d©a64 ; 222 gboÞ—n »t ; 224 ­·¿m = `g_obex_­·¿m_decode ( g_muÉi , (tag_multi)); 226 `g_as£¹ ( ­·¿m !ð NULL ); 228 »t = `g_obex_­·¿m_g‘_ušt8 ( ­·¿m , TAG_U8 , & d©a8 ); 230 `g_as£¹ ( »t =ð TRUE ); 231 `g_as£¹ ( d©a8 == 0x01); 233 »t = `g_obex_­·¿m_g‘_ušt16 ( ­·¿m , TAG_U16 , & d©a16 ); 235 `g_as£¹ ( »t =ð TRUE ); 236 `g_as£¹ ( d©a16 == 0x0102); 238 »t = `g_obex_­·¿m_g‘_ušt32 ( ­·¿m , TAG_U32 , & d©a32 ); 240 `g_as£¹ ( »t =ð TRUE ); 241 `g_as£¹ ( d©a32 == 0x01020304); 243 »t = `g_obex_­·¿m_g‘_ušt64 ( ­·¿m , TAG_U64 , & d©a64 ); 245 `g_as£¹ ( »t =ð TRUE ); 246 `g_as£¹ ( d©a64 == 0x0102030405060708); 248 ¡ršg = `g_obex_­·¿m_g‘_¡ršg ( ­·¿m , TAG_STRING ); 250 `g_as£¹ ( ¡ršg !ð NULL ); 251 `g_as£¹_cmp¡r ( ¡ršg , ==, "ABC"); 253 `g_ä“ ( ¡ršg ); 255 `g_obex_­·¿m_ä“ ( ­·¿m ); 256 } } 258  $‹¡_­·¿m_£t_ušt8 () 260 GObexAµ¬am * ­·¿m ; 261 gušt8 buf [1024]; 262 gsize Ën ; 264 ­·¿m = `g_obex_­·¿m_£t_ušt8 ( NULL , TAG_U8 , 0x01); 265 `g_as£¹ ( ­·¿m !ð NULL ); 267 Ën = `g_obex_­·¿m_’code ( ­·¿m , buf , (buf)); 268 `as£¹_memequ® ( g_ušt8 , Ñag_ušt8), buf , Ën ); 270 `g_obex_­·¿m_ä“ ( ­·¿m ); 271 } } 273  $‹¡_­·¿m_£t_ušt16 () 275 GObexAµ¬am * ­·¿m ; 276 gušt8 buf [1024]; 277 gsize Ën ; 279 ­·¿m = `g_obex_­·¿m_£t_ušt16 ( NULL , TAG_U16 , 0x0102); 280 `g_as£¹ ( ­·¿m !ð NULL ); 282 Ën = `g_obex_­·¿m_’code ( ­·¿m , buf , (buf)); 283 `as£¹_memequ® ( g_ušt16 , Ñag_ušt16), buf , Ën ); 285 `g_obex_­·¿m_ä“ ( ­·¿m ); 286 } } 288  $‹¡_­·¿m_£t_ušt32 () 290 GObexAµ¬am * ­·¿m ; 291 gušt8 buf [1024]; 292 gsize Ën ; 294 ­·¿m = `g_obex_­·¿m_£t_ušt32 ( NULL , TAG_U32 , 0x01020304); 295 `g_as£¹ ( ­·¿m !ð NULL ); 297 Ën = `g_obex_­·¿m_’code ( ­·¿m , buf , (buf)); 298 `as£¹_memequ® ( g_ušt32 , Ñag_ušt32), buf , Ën ); 300 `g_obex_­·¿m_ä“ ( ­·¿m ); 301 } } 303  $‹¡_­·¿m_£t_ušt64 () 305 GObexAµ¬am * ­·¿m ; 306 gušt8 buf [1024]; 307 gsize Ën ; 309 ­·¿m = `g_obex_­·¿m_£t_ušt64 ( NULL , TAG_U64 , 0x0102030405060708); 310 `g_as£¹ ( ­·¿m !ð NULL ); 312 Ën = `g_obex_­·¿m_’code ( ­·¿m , buf , (buf)); 313 `as£¹_memequ® ( g_ušt64 , Ñag_ušt64), buf , Ën ); 315 `g_obex_­·¿m_ä“ ( ­·¿m ); 316 } } 318  $‹¡_­·¿m_£t_¡ršg () 320 GObexAµ¬am * ­·¿m ; 321 gušt8 buf [1024]; 322 gsize Ën ; 324 ­·¿m = `g_obex_­·¿m_£t_¡ršg ( NULL , TAG_STRING , "ABC"); 325 `g_as£¹ ( ­·¿m !ð NULL ); 327 Ën = `g_obex_­·¿m_’code ( ­·¿m , buf , (buf)); 328 `as£¹_memequ® ( g_¡ršg , Ñag_¡ršg), buf , Ën ); 330 `g_obex_­·¿m_ä“ ( ­·¿m ); 331 } } 333  $‹¡_­·¿m_£t_by‹s () 335 GObexAµ¬am * ­·¿m ; 336 gušt8 buf [1024]; 337 gsize Ën ; 339 ­·¿m = `g_obex_­·¿m_£t_by‹s ( NULL , TAG_BYTES , g_by‹s + 2, 255); 340 `g_as£¹ ( ­·¿m !ð NULL ); 342 Ën = `g_obex_­·¿m_’code ( ­·¿m , buf , (buf)); 343 `as£¹_memequ® ( g_by‹s , Ñag_by‹s), buf , Ën ); 345 `g_obex_­·¿m_ä“ ( ­·¿m ); 346 } } 348  $‹¡_­·¿m_£t_muÉi () 350 GObexAµ¬am * ­·¿m ; 351 gušt8 buf [1024]; 352 gsize Ën ; 354 ­·¿m = `g_obex_­·¿m_£t_ušt8 ( NULL , TAG_U8 , 0x01); 356 `g_as£¹ ( ­·¿m !ð NULL ); 358 ­·¿m = `g_obex_­·¿m_£t_ušt16 ×µ¬am, TAG_U16 , 0x0102); 360 `g_as£¹ ( ­·¿m !ð NULL ); 362 ­·¿m = `g_obex_­·¿m_£t_ušt32 ×µ¬am, TAG_U32 , 0x01020304); 364 `g_as£¹ ( ­·¿m !ð NULL ); 366 ­·¿m = `g_obex_­·¿m_£t_ušt64 ×µ¬am, TAG_U64 , 369 `g_as£¹ ( ­·¿m !ð NULL ); 371 ­·¿m = `g_obex_­·¿m_£t_¡ršg ×µ¬am, TAG_STRING , "ABC"); 373 `g_as£¹ ( ­·¿m !ð NULL ); 375 Ën = `g_obex_­·¿m_’code ( ­·¿m , buf , (buf)); 377 `g_as£¹_cmpušt ( Ën , ==, ( g_muÉi )); 379 `g_obex_­·¿m_ä“ ( ­·¿m ); 380 } } 382  $maš ( ¬gc , * ¬gv []) 384 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 386 `g_‹¡_add_func ("/gobex/test_apparam_nval_short", 387 ‹¡_­·¿m_nv®_shÜt ); 388 `g_‹¡_add_func ("/gobex/test_apparam_nval_data", 389 ‹¡_­·¿m_nv®_d©a ); 391 `g_‹¡_add_func ("/gobex/test_apparam_nval2_short", 392 ‹¡_­·¿m_nv®2_shÜt ); 393 `g_‹¡_add_func ("/gobex/test_apparam_nval2_data", 394 ‹¡_­·¿m_nv®2_d©a ); 396 `g_‹¡_add_func ("/gobex/test_apparam_get_uint8", 397 ‹¡_­·¿m_g‘_ušt8 ); 398 `g_‹¡_add_func ("/gobex/test_apparam_get_uint16", 399 ‹¡_­·¿m_g‘_ušt16 ); 400 `g_‹¡_add_func ("/gobex/test_apparam_get_uint32", 401 ‹¡_­·¿m_g‘_ušt32 ); 402 `g_‹¡_add_func ("/gobex/test_apparam_get_uint64", 403 ‹¡_­·¿m_g‘_ušt64 ); 404 `g_‹¡_add_func ("/gobex/test_apparam_get_string", 405 ‹¡_­·¿m_g‘_¡ršg ); 406 `g_‹¡_add_func ("/gobex/test_apparam_get_bytes", 407 ‹¡_­·¿m_g‘_by‹s ); 408 `g_‹¡_add_func ("/gobex/test_apparam_get_multi", 409 ‹¡_­·¿m_g‘_muÉi ); 411 `g_‹¡_add_func ("/gobex/test_apparam_set_uint8", 412 ‹¡_­·¿m_£t_ušt8 ); 413 `g_‹¡_add_func ("/gobex/test_apparam_set_uint16", 414 ‹¡_­·¿m_£t_ušt16 ); 415 `g_‹¡_add_func ("/gobex/test_apparam_set_uint32", 416 ‹¡_­·¿m_£t_ušt32 ); 417 `g_‹¡_add_func ("/gobex/test_apparam_set_uint64", 418 ‹¡_­·¿m_£t_ušt64 ); 419 `g_‹¡_add_func ("/gobex/test_apparam_set_string", 420 ‹¡_­·¿m_£t_¡ršg ); 421 `g_‹¡_add_func ("/gobex/test_apparam_set_bytes", 422 ‹¡_­·¿m_£t_by‹s ); 423 `g_‹¡_add_func ("/gobex/test_apparam_set_multi", 424 ‹¡_­·¿m_£t_muÉi ); 426  `g_‹¡_run (); 427 } } @unit/test-gobex-header.c 23 #ifdeà HAVE_CONFIG_H 24  ~"cÚfig.h " 27  ~<¡dšt.h > 28  ~<¡ršg.h > 30  ~ 32  ~"utž.h " 34  ušt8_t ghdr_cÚnid [] = { G_OBEX_HDR_CONNECTION , 1, 2, 3, 4 }; 35  ušt8_t ghdr_Çme_em±y [] = { G_OBEX_HDR_NAME , 0x00, 0x03 }; 36  ušt8_t ghdr_Çme_ascii [] = { G_OBEX_HDR_NAME , 0x00, 0x0b, 39  ušt8_t ghdr_Çme_umÏut [] = { G_OBEX_HDR_NAME , 0x00, 0x0b, 42  ušt8_t ghdr_body [] = { G_OBEX_HDR_BODY , 0x00, 0x07, 1, 2, 3, 4 }; 43  ušt8_t ghdr_aùiÚid [] = { G_OBEX_HDR_ACTION , 0xab }; 45  ušt8_t ghdr_ušt32_nv® [] = { G_OBEX_HDR_CONNECTION , 1, 2 }; 46  ušt8_t ghdr_unicode_nv®_shÜt [] = { G_OBEX_HDR_NAME , 0x12, 0x34, 49  ušt8_t ghdr_unicode_nv®_d©a [] = { G_OBEX_HDR_NAME , 0x00, 0x01, 51  ušt8_t ghdr_by‹s_nv®_shÜt [] = { G_OBEX_HDR_BODY , 0xab, 0xcd, 53  ušt8_t ghdr_by‹s_nv®_d©a [] = { G_OBEX_HDR_BODY , 0xab }; 54  ušt8_t ghdr_by‹s_nv®_Ën [] = { G_OBEX_HDR_BODY , 0x00, 0x00 }; 55  ušt8_t ghdr_­·¿m [] = { G_OBEX_HDR_APPARAM , 0x00, 0x09, 0x00, 0x04, 58  $‹¡_h—d”_Çme_em±y () 60 GObexH—d” * h—d” ; 61 ušt8_t buf [1024]; 62 size_t Ën ; 64 h—d” = `g_obex_h—d”_Ãw_unicode ( G_OBEX_HDR_NAME , ""); 66 `g_as£¹ ( h—d” !ð NULL ); 68 Ën = `g_obex_h—d”_’code ( h—d” , buf , (buf)); 70 `as£¹_memequ® ( hdr_Çme_em±y , (hdr_Çme_em±y), buf , Ën ); 72 `g_obex_h—d”_ä“ ( h—d” ); 73 } } 75  $‹¡_h—d”_Çme_ascii () 77 GObexH—d” * h—d” ; 78 ušt8_t buf [1024]; 79 size_t Ën ; 81 h—d” = `g_obex_h—d”_Ãw_unicode ( G_OBEX_HDR_NAME , "foo"); 83 `g_as£¹ ( h—d” !ð NULL ); 85 Ën = `g_obex_h—d”_’code ( h—d” , buf , (buf)); 87 `as£¹_memequ® ( hdr_Çme_ascii , (hdr_Çme_ascii), buf , Ën ); 89 `g_obex_h—d”_ä“ ( h—d” ); 90 } } 92  $‹¡_h—d”_Çme_umÏut () 94 GObexH—d” * h—d” ; 95 ušt8_t buf [1024]; 96 size_t Ën ; 98 h—d” = `g_obex_h—d”_Ãw_unicode ( G_OBEX_HDR_NAME , "åäö"); 100 `g_as£¹ ( h—d” !ð NULL ); 102 Ën = `g_obex_h—d”_’code ( h—d” , buf , (buf)); 104 `as£¹_memequ® ( hdr_Çme_umÏut , (hdr_Çme_umÏut), buf , Ën ); 106 `g_obex_h—d”_ä“ ( h—d” ); 107 } } 109  $‹¡_h—d”_by‹s () 111 GObexH—d” * h—d” ; 112 ušt8_t buf [1024], d©a [] = { 1, 2, 3, 4 }; 113 size_t Ën ; 115 h—d” = `g_obex_h—d”_Ãw_by‹s ( G_OBEX_HDR_BODY , d©a , (data)); 116 `g_as£¹ ( h—d” !ð NULL ); 118 Ën = `g_obex_h—d”_’code ( h—d” , buf , (buf)); 120 `as£¹_memequ® ( hdr_body , (hdr_body), buf , Ën ); 122 `g_obex_h—d”_ä“ ( h—d” ); 123 } } 125  $‹¡_h—d”_­·¿m () 127 GObexH—d” * h—d” ; 128 GObexAµ¬am * ­·¿m ; 129 ušt8_t buf [1024]; 130 size_t Ën ; 132 ­·¿m = `g_obex_­·¿m_£t_ušt32 ( NULL , 0, 0x01020304); 133 `g_as£¹ ( ­·¿m !ð NULL ); 135 h—d” = `g_obex_h—d”_Ãw_­·¿m ( ­·¿m ); 136 `g_as£¹ ( h—d” !ð NULL ); 138 Ën = `g_obex_h—d”_’code ( h—d” , buf , (buf)); 140 `as£¹_memequ® ( hdr_­·¿m , (hdr_­·¿m), buf , Ën ); 142 `g_obex_­·¿m_ä“ ( ­·¿m ); 143 `g_obex_h—d”_ä“ ( h—d” ); 144 } } 146  $‹¡_h—d”_ušt8 () 148 GObexH—d” * h—d” ; 149 ušt8_t buf [1024]; 150 size_t Ën ; 152 h—d” = `g_obex_h—d”_Ãw_ušt8 ( G_OBEX_HDR_ACTION , 0xab); 154 `g_as£¹ ( h—d” !ð NULL ); 156 Ën = `g_obex_h—d”_’code ( h—d” , buf , (buf)); 158 `as£¹_memequ® ( hdr_aùiÚid , (hdr_aùiÚid), buf , Ën ); 160 `g_obex_h—d”_ä“ ( h—d” ); 161 } } 163  $‹¡_h—d”_ušt32 () 165 GObexH—d” * h—d” ; 166 ušt8_t buf [1024]; 167 size_t Ën ; 169 h—d” = `g_obex_h—d”_Ãw_ušt32 ( G_OBEX_HDR_CONNECTION , 0x01020304); 170 Ën = `g_obex_h—d”_’code ( h—d” , buf , (buf)); 172 `as£¹_memequ® ( hdr_cÚnid , (hdr_cÚnid), buf , Ën ); 174 `g_obex_h—d”_ä“ ( h—d” ); 175 } } 177  GObexH—d” * $·r£_ªd_’code ( ušt8_t * buf , size_t buf_Ën ) 179 GObexH—d” * h—d” ; 180 ušt8_t ’coded [1024]; 181 size_t Ën ; 182 GE¼Ü * ”r = NULL ; 184 h—d” = `g_obex_h—d”_decode ( buf , buf_Ën , G_OBEX_DATA_REF , & Ën , 185 & ”r ); 186 `g_as£¹_no_”rÜ ( ”r ); 187 `g_as£¹_cmpušt ( Ën , ==, buf_Ën ); 189 Ën = `g_obex_h—d”_’code ( h—d” , ’coded , (encoded)); 191 `as£¹_memequ® ( buf , buf_Ën , ’coded , Ën ); 193  h—d” ; 194 } } 196  $‹¡_h—d”_’code_cÚnid () 198 GObexH—d” * h—d” ; 199 gboÞ—n »t ; 200 gušt32 v® ; 202 h—d” = `·r£_ªd_’code ( hdr_cÚnid , (hdr_connid)); 204 »t = `g_obex_h—d”_g‘_ušt32 ( h—d” , & v® ); 206 `g_as£¹ ( »t =ð TRUE ); 207 `g_as£¹ ( v® == 0x01020304); 209 `g_obex_h—d”_ä“ ( h—d” ); 210 } } 212  $‹¡_h—d”_’code_Çme_ascii () 214 GObexH—d” * h—d” ; 215 cÚ¡ * ¡r ; 216 gboÞ—n »t ; 218 h—d” = `·r£_ªd_’code ( hdr_Çme_ascii , (hdr_name_ascii)); 220 »t = `g_obex_h—d”_g‘_unicode ( h—d” , & ¡r ); 222 `g_as£¹ ( »t =ð TRUE ); 223 `g_as£¹_cmp¡r ( ¡r , ==, "foo"); 225 `g_obex_h—d”_ä“ ( h—d” ); 226 } } 228  $‹¡_h—d”_’code_Çme_umÏut () 230 GObexH—d” * h—d” ; 231 cÚ¡ * ¡r ; 232 gboÞ—n »t ; 234 h—d” = `·r£_ªd_’code ( hdr_Çme_umÏut , (hdr_name_umlaut)); 236 »t = `g_obex_h—d”_g‘_unicode ( h—d” , & ¡r ); 238 `g_as£¹ ( »t =ð TRUE ); 239 `g_as£¹_cmp¡r ( ¡r , ==, "åäö"); 241 `g_obex_h—d”_ä“ ( h—d” ); 242 } } 244  $‹¡_h—d”_’code_Çme_em±y () 246 GObexH—d” * h—d” ; 247 cÚ¡ * ¡r ; 248 gboÞ—n »t ; 250 h—d” = `·r£_ªd_’code ( hdr_Çme_em±y , (hdr_name_empty)); 252 »t = `g_obex_h—d”_g‘_unicode ( h—d” , & ¡r ); 254 `g_as£¹ ( »t =ð TRUE ); 255 `g_as£¹_cmp¡r ( ¡r , ==, ""); 257 `g_obex_h—d”_ä“ ( h—d” ); 258 } } 260  $‹¡_h—d”_’code_body () 262 GObexH—d” * h—d” ; 263 gušt8 ex³ùed [] = { 1, 2, 3, 4}; 264 cÚ¡ gušt8 * buf ; 265 size_t Ën ; 266 gboÞ—n »t ; 268 h—d” = `·r£_ªd_’code ( hdr_body , (hdr_body)); 270 »t = `g_obex_h—d”_g‘_by‹s ( h—d” , & buf , & Ën ); 272 `g_as£¹ ( »t =ð TRUE ); 273 `as£¹_memequ® ( ex³ùed , Óx³ùed), buf , Ën ); 275 `g_obex_h—d”_ä“ ( h—d” ); 276 } } 278  $‹¡_h—d”_’code_­·¿m () 280 GObexH—d” * h—d” ; 281 GObexAµ¬am * ­·¿m ; 282 gboÞ—n »t ; 283 gušt32 d©a ; 285 h—d” = `·r£_ªd_’code ( hdr_­·¿m , (hdr_apparam)); 287 ­·¿m = `g_obex_h—d”_g‘_­·¿m ( h—d” ); 288 `g_as£¹ ( ­·¿m !ð NULL ); 290 »t = `g_obex_­·¿m_g‘_ušt32 ( ­·¿m , 0x00, & d©a ); 291 `g_as£¹ ( »t =ð TRUE ); 292 `g_as£¹ ( d©a == 0x01020304); 294 `g_obex_­·¿m_ä“ ( ­·¿m ); 295 `g_obex_h—d”_ä“ ( h—d” ); 296 } } 298  $‹¡_h—d”_’code_aùiÚid () 300 GObexH—d” * h—d” ; 301 gboÞ—n »t ; 302 gušt8 v® ; 304 h—d” = `·r£_ªd_’code ( hdr_aùiÚid , (hdr_actionid)); 306 »t = `g_obex_h—d”_g‘_ušt8 ( h—d” , & v® ); 308 `g_as£¹ ( »t =ð TRUE ); 309 `g_as£¹_cmpušt ( v® , ==, 0xab); 311 `g_obex_h—d”_ä“ ( h—d” ); 312 } } 314  $‹¡_decode_h—d”_cÚnid () 316 GObexH—d” * h—d” ; 317 size_t ·r£d ; 318 GE¼Ü * ”r = NULL ; 320 h—d” = `g_obex_h—d”_decode ( hdr_cÚnid , (hdr_connid), 321 G_OBEX_DATA_REF , & ·r£d , & ”r ); 322 `g_as£¹_no_”rÜ ( ”r ); 324 `g_as£¹_cmpušt ( ·r£d , ==, ( hdr_cÚnid )); 326 `g_obex_h—d”_ä“ ( h—d” ); 327 } } 329  $‹¡_decode_h—d”_Çme_ascii () 331 GObexH—d” * h—d” ; 332 size_t ·r£d ; 333 GE¼Ü * ”r = NULL ; 335 h—d” = `g_obex_h—d”_decode ( hdr_Çme_ascii , (hdr_name_ascii), 336 G_OBEX_DATA_REF , & ·r£d , & ”r ); 337 `g_as£¹_no_”rÜ ( ”r ); 339 `g_as£¹_cmpušt ( ·r£d , ==, ( hdr_Çme_ascii )); 341 `g_obex_h—d”_ä“ ( h—d” ); 342 } } 344  $‹¡_decode_h—d”_Çme_em±y () 346 GObexH—d” * h—d” ; 347 size_t ·r£d ; 348 GE¼Ü * ”r = NULL ; 350 h—d” = `g_obex_h—d”_decode ( hdr_Çme_em±y , (hdr_name_empty), 351 G_OBEX_DATA_REF , & ·r£d , & ”r ); 352 `g_as£¹_no_”rÜ ( ”r ); 354 `g_as£¹_cmpušt ( ·r£d , ==, ( hdr_Çme_em±y )); 356 `g_obex_h—d”_ä“ ( h—d” ); 357 } } 359  $‹¡_decode_h—d”_Çme_umÏut () 361 GObexH—d” * h—d” ; 362 size_t ·r£d ; 363 GE¼Ü * ”r = NULL ; 365 h—d” = `g_obex_h—d”_decode ( hdr_Çme_umÏut , (hdr_name_umlaut), 366 G_OBEX_DATA_REF , & ·r£d , & ”r ); 367 `g_as£¹_no_”rÜ ( ”r ); 369 `g_as£¹_cmpušt ( ·r£d , ==, ( hdr_Çme_umÏut )); 371 `g_obex_h—d”_ä“ ( h—d” ); 372 } } 374  $‹¡_decode_h—d”_body () 376 GObexH—d” * h—d” ; 377 size_t ·r£d ; 378 GE¼Ü * ”r = NULL ; 380 h—d” = `g_obex_h—d”_decode ( hdr_body , (hdr_body), 381 G_OBEX_DATA_COPY , & ·r£d , & ”r ); 382 `g_as£¹_no_”rÜ ( ”r ); 384 `g_as£¹_cmpušt ( ·r£d , ==, ( hdr_body )); 386 `g_obex_h—d”_ä“ ( h—d” ); 387 } } 389  $‹¡_decode_h—d”_body_extd©a () 391 GObexH—d” * h—d” ; 392 size_t ·r£d ; 393 GE¼Ü * ”r = NULL ; 395 h—d” = `g_obex_h—d”_decode ( hdr_body , (hdr_body), 396 G_OBEX_DATA_REF , & ·r£d , & ”r ); 397 `g_as£¹_no_”rÜ ( ”r ); 399 `g_as£¹_cmpušt ( ·r£d , ==, ( hdr_body )); 401 `g_obex_h—d”_ä“ ( h—d” ); 402 } } 404  $‹¡_decode_h—d”_aùiÚid () 406 GObexH—d” * h—d” ; 407 size_t ·r£d ; 408 GE¼Ü * ”r = NULL ; 410 h—d” = `g_obex_h—d”_decode ( hdr_aùiÚid , (hdr_actionid), 411 G_OBEX_DATA_REF , & ·r£d , & ”r ); 412 `g_as£¹_no_”rÜ ( ”r ); 414 `g_as£¹_cmpušt ( ·r£d , ==, ( hdr_aùiÚid )); 416 `g_obex_h—d”_ä“ ( h—d” ); 417 } } 419  $decode_h—d”_nv® ( ušt8_t * buf , size_t Ën ) 421 GObexH—d” * h—d” ; 422 size_t ·r£d ; 423 GE¼Ü * ”r = NULL ; 425 h—d” = `g_obex_h—d”_decode ( buf , Ën , G_OBEX_DATA_REF , & ·r£d , 426 & ”r ); 427 `g_as£¹_”rÜ ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_PARSE_ERROR ); 428 `g_as£¹ ( h—d” =ð NULL ); 429 `g_”rÜ_ä“ ( ”r ); 430 } } 432  $‹¡_decode_h—d”_ušt32_nv® () 434 `decode_h—d”_nv® ( hdr_ušt32_nv® , (hdr_uint32_nval)); 435 } } 437  $‹¡_decode_h—d”_unicode_nv®_shÜt () 439 `decode_h—d”_nv® ( hdr_unicode_nv®_shÜt , 440 ( hdr_unicode_nv®_shÜt )); 441 } } 443  $‹¡_decode_h—d”_unicode_nv®_d©a () 445 `decode_h—d”_nv® ( hdr_unicode_nv®_d©a , 446 ( hdr_unicode_nv®_d©a )); 447 } } 449  $‹¡_decode_h—d”_by‹s_nv®_shÜt () 451 `decode_h—d”_nv® ( hdr_by‹s_nv®_shÜt , (hdr_bytes_nval_short)); 452 } } 454  $‹¡_decode_h—d”_by‹s_nv®_d©a () 456 `decode_h—d”_nv® ( hdr_by‹s_nv®_d©a , (hdr_bytes_nval_data)); 457 } } 459  $‹¡_decode_h—d”_by‹s_nv®_Ën () 461 `decode_h—d”_nv® ( hdr_by‹s_nv®_Ën , (hdr_bytes_nval_len)); 462 } } 464  $‹¡_decode_h—d”_muÉi () 466 GObexH—d” * h—d” ; 467 GBy‹A¼ay * buf ; 468 size_t ·r£d ; 469 GE¼Ü * ”r = NULL ; 471 buf = `g_by‹_¬¿y_sized_Ãw (( hdr_cÚnid ) + 472 ( hdr_Çme_ascii ) + 473 ( hdr_aùiÚid ) + 474 ( hdr_body )); 476 `g_by‹_¬¿y_­³nd ( buf , hdr_cÚnid , (hdr_connid)); 477 `g_by‹_¬¿y_­³nd ( buf , hdr_Çme_ascii , (hdr_name_ascii)); 478 `g_by‹_¬¿y_­³nd ( buf , hdr_aùiÚid , (hdr_actionid)); 479 `g_by‹_¬¿y_­³nd ( buf , hdr_body , (hdr_body)); 481 h—d” = `g_obex_h—d”_decode ( buf -> d©a , buf-> Ën , G_OBEX_DATA_REF , 482 & ·r£d , & ”r ); 483 `g_as£¹_no_”rÜ ( ”r ); 484 `g_as£¹_cmpušt ( ·r£d , ==, ( hdr_cÚnid )); 485 `g_by‹_¬¿y_»move_¿nge ( buf , 0, ·r£d ); 486 `g_obex_h—d”_ä“ ( h—d” ); 488 h—d” = `g_obex_h—d”_decode ( buf -> d©a , buf-> Ën , G_OBEX_DATA_REF , 489 & ·r£d , & ”r ); 490 `g_as£¹_no_”rÜ ( ”r ); 491 `g_as£¹_cmpušt ( ·r£d , ==, ( hdr_Çme_ascii )); 492 `g_by‹_¬¿y_»move_¿nge ( buf , 0, ·r£d ); 493 `g_obex_h—d”_ä“ ( h—d” ); 495 h—d” = `g_obex_h—d”_decode ( buf -> d©a , buf-> Ën , G_OBEX_DATA_REF , 496 & ·r£d , & ”r ); 497 `g_as£¹_no_”rÜ ( ”r ); 498 `g_as£¹_cmpušt ( ·r£d , ==, ( hdr_aùiÚid )); 499 `g_by‹_¬¿y_»move_¿nge ( buf , 0, ·r£d ); 500 `g_obex_h—d”_ä“ ( h—d” ); 502 h—d” = `g_obex_h—d”_decode ( buf -> d©a , buf-> Ën , G_OBEX_DATA_REF , 503 & ·r£d , & ”r ); 504 `g_as£¹_no_”rÜ ( ”r ); 505 `g_as£¹_cmpušt ( ·r£d , ==, ( hdr_body )); 506 `g_by‹_¬¿y_»move_¿nge ( buf , 0, ·r£d ); 507 `g_obex_h—d”_ä“ ( h—d” ); 509 `g_by‹_¬¿y_uÄef ( buf ); 510 } } 512  $maš ( ¬gc , * ¬gv []) 514 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 516 `g_‹¡_add_func ("/gobex/test_decode_header_connid", 517 ‹¡_decode_h—d”_cÚnid ); 518 `g_‹¡_add_func ("/gobex/test_decode_header_name_empty", 519 ‹¡_decode_h—d”_Çme_em±y ); 520 `g_‹¡_add_func ("/gobex/test_decode_header_name_ascii", 521 ‹¡_decode_h—d”_Çme_ascii ); 522 `g_‹¡_add_func ("/gobex/test_decode_header_name_umlaut", 523 ‹¡_decode_h—d”_Çme_umÏut ); 524 `g_‹¡_add_func ("/gobex/test_decode_header_body", 525 ‹¡_decode_h—d”_body ); 526 `g_‹¡_add_func ("/gobex/test_decode_header_body_extdata", 527 ‹¡_decode_h—d”_body_extd©a ); 528 `g_‹¡_add_func ("/gobex/test_decode_header_actionid", 529 ‹¡_decode_h—d”_aùiÚid ); 530 `g_‹¡_add_func ("/gobex/test_decode_header_multi", 531 ‹¡_decode_h—d”_muÉi ); 533 `g_‹¡_add_func ("/gobex/test_decode_header_uint32_nval", 534 ‹¡_decode_h—d”_ušt32_nv® ); 535 `g_‹¡_add_func ("/gobex/test_decode_header_unicode_nval_short", 536 ‹¡_decode_h—d”_unicode_nv®_shÜt ); 537 `g_‹¡_add_func ("/gobex/test_decode_header_unicode_nval_data", 538 ‹¡_decode_h—d”_unicode_nv®_d©a ); 539 `g_‹¡_add_func ("/gobex/test_decode_header_bytes_nval_short", 540 ‹¡_decode_h—d”_by‹s_nv®_shÜt ); 541 `g_‹¡_add_func ("/gobex/test_decode_header_bytes_nval_data", 542 ‹¡_decode_h—d”_by‹s_nv®_d©a ); 543 `g_‹¡_add_func ("/gobex/test_decode_header_bytes_nval_len", 544 ‹¡_decode_h—d”_by‹s_nv®_Ën ); 546 `g_‹¡_add_func ("/gobex/test_header_encode_connid", 547 ‹¡_h—d”_’code_cÚnid ); 548 `g_‹¡_add_func ("/gobex/test_header_encode_name_empty", 549 ‹¡_h—d”_’code_Çme_em±y ); 550 `g_‹¡_add_func ("/gobex/test_header_encode_name_ascii", 551 ‹¡_h—d”_’code_Çme_ascii ); 552 `g_‹¡_add_func ("/gobex/test_header_encode_name_umlaut", 553 ‹¡_h—d”_’code_Çme_umÏut ); 554 `g_‹¡_add_func ("/gobex/test_header_encode_body", 555 ‹¡_h—d”_’code_body ); 556 `g_‹¡_add_func ("/gobex/test_header_encode_connid", 557 ‹¡_h—d”_’code_aùiÚid ); 558 `g_‹¡_add_func ("/gobex/test_header_encode_apparam", 559 ‹¡_h—d”_’code_­·¿m ); 561 `g_‹¡_add_func ("/gobex/test_header_name_empty", 562 ‹¡_h—d”_Çme_em±y ); 563 `g_‹¡_add_func ("/gobex/test_header_name_ascii", 564 ‹¡_h—d”_Çme_ascii ); 565 `g_‹¡_add_func ("/gobex/test_header_name_umlaut", 566 ‹¡_h—d”_Çme_umÏut ); 567 `g_‹¡_add_func ("/gobex/‹¡_h—d”_by‹s", ‹¡_h—d”_by‹s ); 568 `g_‹¡_add_func ("/gobex/‹¡_h—d”_ušt8", ‹¡_h—d”_ušt8 ); 569 `g_‹¡_add_func ("/gobex/‹¡_h—d”_ušt32", ‹¡_h—d”_ušt32 ); 570 `g_‹¡_add_func ("/gobex/‹¡_h—d”_­·¿m", ‹¡_h—d”_­·¿m ); 572  `g_‹¡_run (); 573 } } @unit/test-gobex-packet.c 23 #ifdeà HAVE_CONFIG_H 24  ~"cÚfig.h " 27  ~<¡dšt.h > 28  ~<¡ršg.h > 29  ~<”ºo.h > 31  ~ 33  ~"utž.h " 35  ušt8_t gpkt_cÚÃù [] = { G_OBEX_OP_CONNECT , 0x00, 0x0c, 37 G_OBEX_HDR_TARGET , 39  ušt8_t gpkt_put_aùiÚ [] = { G_OBEX_OP_PUT , 0x00, 0x05, 40 G_OBEX_HDR_ACTION , 0xab }; 41  ušt8_t gpkt_put_body [] = { G_OBEX_OP_PUT , 0x00, 0x0a, 42 G_OBEX_HDR_BODY , 0x00, 0x07, 44  ušt8_t gpkt_put [] = { G_OBEX_OP_PUT , 0x00, 0x03 }; 46  ušt8_t gpkt_nv®_Ën [] = { G_OBEX_OP_PUT , 0xab, 0xcd, 0x12 }; 48  gušt8 gpkt_put_lÚg [] = { G_OBEX_OP_PUT , 0x00, 0x32, 49 G_OBEX_HDR_CONNECTION , 0x01, 0x02, 0x03, 0x04, 50 G_OBEX_HDR_TYPE , 0x00, 0x0b, 52 G_OBEX_HDR_NAME , 0x00, 0x15, 54 G_OBEX_HDR_ACTION , 0xab, 55 G_OBEX_HDR_BODY , 0x00, 0x08, 58  $‹¡_pkt () 60 GObexPack‘ * pkt ; 62 pkt = `g_obex_·ck‘_Ãw ( G_OBEX_OP_PUT , TRUE , G_OBEX_HDR_INVALID ); 64 `g_as£¹ ( pkt !ð NULL ); 66 `g_obex_·ck‘_ä“ ( pkt ); 67 } } 69  $‹¡_decode_pkt () 71 GObexPack‘ * pkt ; 72 GE¼Ü * ”r = NULL ; 74 pkt = `g_obex_·ck‘_decode ( pkt_put , (pkt_put), 0, 75 G_OBEX_DATA_REF , & ”r ); 76 `g_as£¹_no_”rÜ ( ”r ); 78 `g_obex_·ck‘_ä“ ( pkt ); 79 } } 81  $‹¡_decode_pkt_h—d” () 83 GObexPack‘ * pkt ; 84 GObexH—d” * h—d” ; 85 GE¼Ü * ”r = NULL ; 86 gboÞ—n »t ; 87 gušt8 v® ; 89 pkt = `g_obex_·ck‘_decode ( pkt_put_aùiÚ , (pkt_put_action), 90 0, G_OBEX_DATA_REF , & ”r ); 91 `g_as£¹_no_”rÜ ( ”r ); 93 h—d” = `g_obex_·ck‘_g‘_h—d” ( pkt , G_OBEX_HDR_ACTION ); 94 `g_as£¹ ( h—d” !ð NULL ); 96 »t = `g_obex_h—d”_g‘_ušt8 ( h—d” , & v® ); 97 `g_as£¹ ( »t =ð TRUE ); 98 `g_as£¹ ( v® == 0xab); 100 `g_obex_·ck‘_ä“ ( pkt ); 101 } } 103  $‹¡_decode_cÚÃù () 105 GObexPack‘ * pkt ; 106 GObexH—d” * h—d” ; 107 GE¼Ü * ”r = NULL ; 108 gboÞ—n »t ; 109 cÚ¡ gušt8 * buf ; 110 gušt8 rg‘ [] = { 0xab, 0xcd }; 111 gsize Ën ; 113 pkt = `g_obex_·ck‘_decode ( pkt_cÚÃù , (pkt_connect), 114 4, G_OBEX_DATA_REF , & ”r ); 115 `g_as£¹_no_”rÜ ( ”r ); 116 `g_as£¹ ( pkt !ð NULL ); 118 h—d” = `g_obex_·ck‘_g‘_h—d” ( pkt , G_OBEX_HDR_TARGET ); 119 `g_as£¹ ( h—d” !ð NULL ); 121 »t = `g_obex_h—d”_g‘_by‹s ( h—d” , & buf , & Ën ); 122 `g_as£¹ ( »t =ð TRUE ); 123 `as£¹_memequ® ( rg‘ , Ѭg‘), buf , Ën ); 125 `g_obex_·ck‘_ä“ ( pkt ); 126 } } 128  $‹¡_decode_nv® () 130 GObexPack‘ * pkt ; 131 GE¼Ü * ”r = NULL ; 133 pkt = `g_obex_·ck‘_decode ( pkt_nv®_Ën , (pkt_nval_len), 0, 134 G_OBEX_DATA_REF , & ”r ); 135 `g_as£¹_”rÜ ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_PARSE_ERROR ); 136 `g_as£¹ ( pkt =ð NULL ); 138 `g_”rÜ_ä“ ( ”r ); 139 } } 141  $‹¡_decode_’code () 143 GObexPack‘ * pkt ; 144 GE¼Ü * ”r = NULL ; 145 ušt8_t buf [255]; 146 gssize Ën ; 148 pkt = `g_obex_·ck‘_decode ( pkt_put_aùiÚ , (pkt_put_action), 149 0, G_OBEX_DATA_REF , & ”r ); 150 `g_as£¹_no_”rÜ ( ”r ); 152 Ën = `g_obex_·ck‘_’code ( pkt , buf , (buf)); 153 ià( Ën < 0) { 154 `g_´š‹¼ ("Encodšg fažed: %s\n", `g_¡»¼Ü (- Ën )); 155 `g_as£¹_nÙ_»ached (); 158 `as£¹_memequ® ( pkt_put_aùiÚ , Õkt_put_aùiÚ), buf , Ën ); 160 `g_obex_·ck‘_ä“ ( pkt ); 161 } } 163  gssize $g‘_body_d©a (* buf , gsize Ën , gpoš‹r u£r_d©a ) 165 ušt8_t d©a [] = { 1, 2, 3, 4 }; 167 `memýy ( buf , d©a , (data)); 169  ( d©a ); 170 } } 172  $‹¡_’code_Ú_demªd () 174 GObexPack‘ * pkt ; 175 ušt8_t buf [255]; 176 gssize Ën ; 178 pkt = `g_obex_·ck‘_Ãw ( G_OBEX_OP_PUT , FALSE , G_OBEX_HDR_INVALID ); 179 `g_obex_·ck‘_add_body ( pkt , g‘_body_d©a , NULL ); 181 Ën = `g_obex_·ck‘_’code ( pkt , buf , (buf)); 182 ià( Ën < 0) { 183 `g_´š‹¼ ("Encodšg fažed: %s\n", `g_¡»¼Ü (- Ën )); 184 `g_as£¹_nÙ_»ached (); 187 `as£¹_memequ® ( pkt_put_body , Õkt_put_body), buf , Ën ); 189 `g_obex_·ck‘_ä“ ( pkt ); 190 } } 192  gssize $g‘_body_d©a_çž (* buf , gsize Ën , gpoš‹r u£r_d©a ) 194  - EIO ; 195 } } 197  $‹¡_’code_Ú_demªd_çž () 199 GObexPack‘ * pkt ; 200 ušt8_t buf [255]; 201 gssize Ën ; 203 pkt = `g_obex_·ck‘_Ãw ( G_OBEX_OP_PUT , FALSE , G_OBEX_HDR_INVALID ); 204 `g_obex_·ck‘_add_body ( pkt , g‘_body_d©a_çž , NULL ); 206 Ën = `g_obex_·ck‘_’code ( pkt , buf , (buf)); 208 `g_as£¹_cmpšt ( Ën , ==, - EIO ); 210 `g_obex_·ck‘_ä“ ( pkt ); 211 } } 213  $‹¡_ü—‹_¬gs () 215 GObexPack‘ * pkt ; 216 gušt8 buf [255], body [] = { 0x00, 0x01, 0x02, 0x03, 0x04 }; 217 gssize Ën ; 219 pkt = `g_obex_·ck‘_Ãw ( G_OBEX_OP_PUT , FALSE , 220 G_OBEX_HDR_CONNECTION , 0x01020304, 221 G_OBEX_HDR_TYPE , "foo/b¬", `¡¾’ ("foo/bar") + 1, 222 G_OBEX_HDR_NAME , "file.txt", 223 G_OBEX_HDR_ACTION , 0xab, 224 G_OBEX_HDR_BODY , body , (body), 225 G_OBEX_HDR_INVALID ); 227 `g_as£¹ ( pkt !ð NULL ); 229 Ën = `g_obex_·ck‘_’code ( pkt , buf , (buf)); 230 `g_as£¹ ( Ën > 0); 232 `as£¹_memequ® ( pkt_put_lÚg , Õkt_put_lÚg), buf , Ën ); 234 `g_obex_·ck‘_ä“ ( pkt ); 235 } } 237  $maš ( ¬gc , * ¬gv []) 239 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 241 `g_‹¡_add_func ("/gobex/‹¡_pkt", ‹¡_pkt ); 242 `g_‹¡_add_func ("/gobex/‹¡_decode_pkt", ‹¡_decode_pkt ); 243 `g_‹¡_add_func ("/gobex/test_decode_pkt_header", 244 ‹¡_decode_pkt_h—d” ); 245 `g_‹¡_add_func ("/gobex/test_decode_connect", 246 ‹¡_decode_cÚÃù ); 248 `g_‹¡_add_func ("/gobex/‹¡_decode_nv®", ‹¡_decode_nv® ); 250 `g_‹¡_add_func ("/gobex/‹¡_’code_pkt", ‹¡_decode_’code ); 252 `g_‹¡_add_func ("/gobex/‹¡_’code_Ú_demªd", ‹¡_’code_Ú_demªd ); 253 `g_‹¡_add_func ("/gobex/test_encode_on_demand_fail", 254 ‹¡_’code_Ú_demªd_çž ); 256 `g_‹¡_add_func ("/gobex/‹¡_ü—‹_¬gs", ‹¡_ü—‹_¬gs ); 258  `g_‹¡_run (); 259 } } @unit/test-gobex-transfer.c 23 #ifdeà HAVE_CONFIG_H 24  ~"cÚfig.h " 27  ~<¡dlib.h > 28  ~ 29  ~ 30  ~ 31  ~<”ºo.h > 32  ~ 33  ~<¡ršg.h > 34  ~<¡dšt.h > 35  ~ 37  ~ 39  ~"utž.h " 41  #FINAL_BIT 0x80 ) 42  #RANDOM_PACKETS 4 ) 44  gušt8 gput_»q_fœ¡ [] = { G_OBEX_OP_PUT , 0x00, 0x30, 45 G_OBEX_HDR_TYPE , 0x00, 0x0b, 47 G_OBEX_HDR_NAME , 0x00, 0x15, 49 G_OBEX_HDR_BODY , 0x00, 0x0d, 52  gušt8 gput_»q_fœ¡_¤m [] = { G_OBEX_OP_PUT , 0x00, 0x32, 53 G_OBEX_HDR_TYPE , 0x00, 0x0b, 55 G_OBEX_HDR_NAME , 0x00, 0x15, 57 G_OBEX_HDR_SRM , G_OBEX_SRM_ENABLE , 58 G_OBEX_HDR_BODY , 0x00, 0x0d, 61  gušt8 gput_»q_z”o [255] = { G_OBEX_OP_PUT , 0x00, 0xff, 62 G_OBEX_HDR_BODY , 0x00, 0xfc }; 64  gušt8 gput_»q_Ï¡ [] = { G_OBEX_OP_PUT | FINAL_BIT , 0x00, 0x06, 65 G_OBEX_HDR_BODY_END , 0x00, 0x03 }; 67  gušt8 gabÜt_»q [] = { G_OBEX_OP_ABORT | FINAL_BIT , 0x00, 0x03 }; 69  gušt8 gput_r¥_fœ¡ [] = { G_OBEX_RSP_CONTINUE | FINAL_BIT , 71  gušt8 gput_r¥_fœ¡_¤m [] = { G_OBEX_RSP_CONTINUE | FINAL_BIT , 73 G_OBEX_HDR_SRM , 0x01 }; 74  gušt8 gput_r¥_fœ¡_¤m_wa™ [] = { G_OBEX_RSP_CONTINUE | FINAL_BIT , 76 G_OBEX_HDR_SRM , 0x01, 77 G_OBEX_HDR_SRMP , 0x01 }; 78  gušt8 gput_r¥_Ï¡ [] = { G_OBEX_RSP_SUCCESS | FINAL_BIT , 0x00, 0x03 }; 80  gušt8 gg‘_»q_fœ¡ [] = { G_OBEX_OP_GET | FINAL_BIT , 0x00, 0x23, 81 G_OBEX_HDR_TYPE , 0x00, 0x0b, 83 G_OBEX_HDR_NAME , 0x00, 0x15, 86  gušt8 gg‘_»q_fœ¡_­p [] = { G_OBEX_OP_GET | FINAL_BIT , 0x00, 0x2a, 87 G_OBEX_HDR_TYPE , 0x00, 0x0b, 89 G_OBEX_HDR_NAME , 0x00, 0x15, 91 G_OBEX_HDR_APPARAM , 0x00, 0x07, 94  gušt8 gg‘_»q_fœ¡_¤m [] = { G_OBEX_OP_GET | FINAL_BIT , 0x00, 0x25, 95 G_OBEX_HDR_SRM , 0x01, 96 G_OBEX_HDR_TYPE , 0x00, 0x0b, 98 G_OBEX_HDR_NAME , 0x00, 0x15, 101  gušt8 gg‘_»q_fœ¡_¤m_wa™ [] = { G_OBEX_OP_GET | FINAL_BIT , 0x00, 0x27, 102 G_OBEX_HDR_SRM , 0x01, 103 G_OBEX_HDR_TYPE , 0x00, 0x0b, 105 G_OBEX_HDR_NAME , 0x00, 0x15, 107 G_OBEX_HDR_SRMP , 0x01 }; 109  gušt8 gg‘_»q_¤m_wa™ [] = { G_OBEX_OP_GET | FINAL_BIT , 0x00, 0x05, 110 G_OBEX_HDR_SRMP , 0x01 }; 112  gušt8 gg‘_»q_Ï¡ [] = { G_OBEX_OP_GET | FINAL_BIT , 0x00, 0x03, }; 114  gušt8 gg‘_r¥_fœ¡_­p [] = { G_OBEX_RSP_CONTINUE | FINAL_BIT , 0x00, 0x0A, 115 G_OBEX_HDR_APPARAM , 0x00, 0x07, 117  gušt8 gg‘_r¥_fœ¡ [] = { G_OBEX_RSP_CONTINUE | FINAL_BIT , 0x00, 0x10, 118 G_OBEX_HDR_BODY , 0x00, 0x0d, 120  gušt8 gg‘_r¥_fœ¡_¤m [] = { G_OBEX_RSP_CONTINUE | FINAL_BIT , 0x00, 0x12, 121 G_OBEX_HDR_SRM , 0x01, 122 G_OBEX_HDR_BODY , 0x00, 0x0d, 124  gušt8 gg‘_r¥_fœ¡_¤m_wa™_Ãxt [] = { G_OBEX_RSP_CONTINUE | FINAL_BIT , 126 G_OBEX_HDR_SRM , 0x01, 127 G_OBEX_HDR_SRMP , 0x02, 128 G_OBEX_HDR_BODY , 0x00, 0x0d, 130  gušt8 gg‘_r¥_¤m_wa™ [] = { G_OBEX_RSP_CONTINUE | FINAL_BIT , 132  gušt8 gg‘_r¥_z”o [255] = { G_OBEX_RSP_CONTINUE | FINAL_BIT , 0x00, 0xff, 133 G_OBEX_HDR_BODY , 0x00, 0xfc }; 134  gušt8 gg‘_r¥_z”o_wa™_Ãxt [255] = { G_OBEX_RSP_CONTINUE | FINAL_BIT , 136 G_OBEX_HDR_SRMP , 0x02, 137 G_OBEX_HDR_BODY , 0x00, 0xfa }; 138  gušt8 gg‘_r¥_Ï¡ [] = { G_OBEX_RSP_SUCCESS | FINAL_BIT , 0x00, 0x06, 139 G_OBEX_HDR_BODY_END , 0x00, 0x03 }; 141  gušt8 gcÚn_»q [] = { G_OBEX_OP_CONNECT | FINAL_BIT , 0x00, 0x07, 143  gušt8 gcÚn_r¥ [] = { G_OBEX_RSP_SUCCESS | FINAL_BIT , 0x00, 0x0c, 145 G_OBEX_HDR_CONNECTION , 0x00, 0x00, 148  gušt8 gcÚn_»q_¤m [] = { G_OBEX_OP_CONNECT | FINAL_BIT , 0x00, 0x09, 150 G_OBEX_HDR_SRM , 0x02 }; 151  gušt8 gcÚn_r¥_¤m [] = { G_OBEX_RSP_SUCCESS | FINAL_BIT , 0x00, 0x0e, 153 G_OBEX_HDR_CONNECTION , 0x00, 0x00, 155 G_OBEX_HDR_SRM , 0x01 }; 157  gušt8 guÇvažabË_r¥ [] = { G_OBEX_RSP_SERVICE_UNAVAILABLE | FINAL_BIT , 160  gušt8 gcÚn_g‘_»q_fœ¡ [] = { G_OBEX_OP_GET | FINAL_BIT , 0x00, 0x28, 161 G_OBEX_HDR_CONNECTION , 0x00, 0x00, 0x00, 0x01, 162 G_OBEX_HDR_TYPE , 0x00, 0x0b, 164 G_OBEX_HDR_NAME , 0x00, 0x15, 167  gušt8 gcÚn_g‘_»q_wrg [] = { G_OBEX_OP_GET | FINAL_BIT , 0x00, 0x28, 168 G_OBEX_HDR_CONNECTION , 0x00, 0x00, 0x00, 0xFF, 169 G_OBEX_HDR_TYPE , 0x00, 0x0b, 171 G_OBEX_HDR_NAME , 0x00, 0x15, 174  gušt8 gcÚn_put_»q_fœ¡ [] = { G_OBEX_OP_PUT , 0x00, 0x35, 175 G_OBEX_HDR_CONNECTION , 0x00, 0x00, 0x00, 0x01, 176 G_OBEX_HDR_TYPE , 0x00, 0x0b, 178 G_OBEX_HDR_NAME , 0x00, 0x15, 180 G_OBEX_HDR_BODY , 0x00, 0x0d, 183  gušt8 ghdr_ty³ [] = "foo/bar"; 184  gušt8 ghdr_­p [] = { 0, 1, 2, 3 }; 185  gušt8 gbody_d©a [] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 187  $Œªsãr_com¶‘e ( GObex * obex , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 189  ‹¡_d©a * d = u£r_d©a ; 191 ià( ”r !ð NULL ) 192 d -> ”r = `g_”rÜ_cÝy (err); 194 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 195 } } 197  gboÞ—n $»sume_obex ( gpoš‹r u£r_d©a ) 199  ‹¡_d©a * d = u£r_d©a ; 201 ià(! `g_maš_loÝ_is_rušg ( d -> mašloÝ )) 202  FALSE ; 204 `g_obex_»sume ( d -> obex ); 206  FALSE ; 207 } } 209  gssize $´ovide_£q (* buf , gsize Ën , gpoš‹r u£r_d©a ) 211  ‹¡_d©a * d = u£r_d©a ; 212  fd ; 213 gssize »t ; 215 ià( d -> couÁ =ð RANDOM_PACKETS - 1) 218 fd = `Ý’ ("/dev/u¿ndom", O_RDONLY | O_NOCTTY , 0); 219 ià( fd < 0) { 220 `g_£t_”rÜ (& d -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 221 "Ý’(/dev/u¿ndom): %s", `¡»¼Ü ( ”ºo )); 222 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 226 »t = `»ad ( fd , buf , Ën ); 227 `þo£ ( fd ); 228  »t ; 229 } } 231  gssize $´ovide_—gaš (* buf , gsize Ën , gpoš‹r u£r_d©a ) 233  ‹¡_d©a * d = u£r_d©a ; 235 ià( d -> couÁ > 0) 238 ià( Ën < ( body_d©a )) { 239 `g_£t_”rÜ (& d -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 240 "GÙ d©¨»que¡ fÜ oÆy %zu by‹s", Ën ); 241 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 245 ià( d -> ´ovide_d–ay > 0) { 246 `g_timeout_add ( d -> ´ovide_d–ay , »sume_obex , d); 247 d -> ´ovide_d–ay = 0; 248  - EAGAIN ; 251 `memýy ( buf , body_d©a , (body_data)); 253  ( body_d©a ); 254 } } 256  gssize $´ovide_d©a (* buf , gsize Ën , gpoš‹r u£r_d©a ) 258  ‹¡_d©a * d = u£r_d©a ; 260 ià( d -> tÙ® > 0) 263 ià( Ën < ( body_d©a )) { 264 `g_£t_”rÜ (& d -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 265 "GÙ d©¨»que¡ fÜ oÆy %zu by‹s", Ën ); 266 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 270 `memýy ( buf , body_d©a , (body_data)); 272 ià( d -> ´ovide_d–ay > 0) { 273 `g_obex_su¥’d ( d -> obex ); 274 `g_timeout_add ( d -> ´ovide_d–ay , »sume_obex , d); 277 d -> tÙ® +ð( body_d©a ); 279  ( body_d©a ); 280 } } 282  $‹¡_put_»q () 284 GIOChªÃl * io ; 285 GIOCÚd™iÚ cÚd ; 286 gušt io_id , tim”_id ; 287 GObex * obex ; 288  ‹¡_d©a d = { 0, NULL , { 289 { put_»q_fœ¡ , (put_req_first) }, 290 { put_»q_Ï¡ , (put_req_last) } }, { 291 { put_r¥_fœ¡ , (put_rsp_first) }, 292 { put_r¥_Ï¡ , (put_rsp_last) } } }; 294 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 296 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 297 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 299 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 301 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 303 `g_obex_put_»q ( obex , ´ovide_d©a , Œªsãr_com¶‘e , & d , &d. ”r , 304 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 305 G_OBEX_HDR_NAME , "file.txt", 306 G_OBEX_HDR_INVALID ); 307 `g_as£¹_no_”rÜ ( d . ”r ); 309 `g_maš_loÝ_run ( d . mašloÝ ); 311 `g_as£¹_cmpušt ( d . couÁ , ==, 2); 313 `g_maš_loÝ_uÄef ( d . mašloÝ ); 315 `g_sourû_»move ( tim”_id ); 316 `g_io_chªÃl_uÄef ( io ); 317 `g_sourû_»move ( io_id ); 318 `g_obex_uÄef ( obex ); 320 `g_as£¹_no_”rÜ ( d . ”r ); 321 } } 323  gboÞ—n $rcv_d©a (cÚ¡ * buf , gsize Ën , gpoš‹r u£r_d©a ) 325  ‹¡_d©a * d = u£r_d©a ; 327 ià( Ën !ð( body_d©a )) 328 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 329 "UÃx³ùed by‹ couÁ %zu", Ën ); 331 ià( `memcmp ( buf , body_d©a , (body_data)) != 0) { 332 `dump_bufs ( body_d©a , (body_d©a), buf , Ën ); 333 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 334 "UÃx³ùed by‹ couÁ %zu", Ën ); 337  TRUE ; 338 } } 340  $hªdË_put ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 342  ‹¡_d©a * d = u£r_d©a ; 343 gušt8 Ý = `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , NULL ); 344 gušt id ; 346 ià( Ý !ð G_OBEX_OP_PUT ) { 347 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 348 "UÃx³ùed opcod0x%02x", Ý ); 349 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 353 id = `g_obex_put_r¥ ( obex , »q , rcv_d©a , Œªsãr_com¶‘e , d , &d-> ”r , 354 G_OBEX_HDR_INVALID ); 355 ià( id == 0) 356 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 357 } } 359  $‹¡_put_r¥ () 361 GIOChªÃl * io ; 362 GIOCÚd™iÚ cÚd ; 363 gušt io_id , tim”_id ; 364 GObex * obex ; 365  ‹¡_d©a d = { 0, NULL , { 366 { put_r¥_fœ¡ , (put_rsp_first) }, 367 { put_r¥_Ï¡ , (put_rsp_last) } }, { 368 { put_»q_Ï¡ , (put_req_last) }, 369 { NULL , 0 } } }; 371 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 373 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 374 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 376 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 378 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 380 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_PUT , hªdË_put , & d ); 382 `g_io_chªÃl_wr™e_ch¬s ( io , (*è put_»q_fœ¡ , 383 ( put_»q_fœ¡ ), NULL , & d . ”r ); 384 `g_as£¹_no_”rÜ ( d . ”r ); 386 `g_maš_loÝ_run ( d . mašloÝ ); 388 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 390 `g_maš_loÝ_uÄef ( d . mašloÝ ); 392 `g_sourû_»move ( tim”_id ); 393 `g_io_chªÃl_uÄef ( io ); 394 `g_sourû_»move ( io_id ); 395 `g_obex_uÄef ( obex ); 397 `g_as£¹_no_”rÜ ( d . ”r ); 398 } } 400  gboÞ—n $rcv_£q (cÚ¡ * buf , gsize Ën , gpoš‹r u£r_d©a ) 402  TRUE ; 403 } } 405  $hªdË_put_£q ( GObex * obex , GObexPack‘ * »q , 406 gpoš‹r u£r_d©a ) 408  ‹¡_d©a * d = u£r_d©a ; 409 gušt8 Ý = `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , NULL ); 410 gušt id ; 412 ià( Ý !ð G_OBEX_OP_PUT ) { 413 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 414 "UÃx³ùed opcod0x%02x", Ý ); 415 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 419 id = `g_obex_put_r¥ ( obex , »q , rcv_£q , Œªsãr_com¶‘e , d , 420 & d -> ”r , G_OBEX_HDR_INVALID ); 421 ià( id == 0) 422 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 423 } } 425  $‹¡_¡»am_put_r¥ () 427 GIOChªÃl * io ; 428 GIOCÚd™iÚ cÚd ; 429 gušt io_id , tim”_id ; 430 GObex * obex ; 431  ‹¡_d©a d = { 0, NULL , { 432 { put_r¥_fœ¡ , (put_rsp_first) }, 433 { put_r¥_fœ¡ , (put_rsp_first) }, 434 { put_r¥_fœ¡ , (put_rsp_first) }, 435 { put_r¥_Ï¡ , (put_rsp_last) } }, { 436 { put_»q_z”o , (put_req_zero) }, 437 { put_»q_z”o , (put_req_zero) }, 438 { put_»q_Ï¡ , (put_req_last) }, 439 { NULL , -1 } } }; 441 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 443 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 444 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 446 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 448 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 450 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_PUT , hªdË_put_£q , 451 & d ); 453 `g_io_chªÃl_wr™e_ch¬s ( io , (*è put_»q_fœ¡ , 454 ( put_»q_fœ¡ ), NULL , & d . ”r ); 455 `g_as£¹_no_”rÜ ( d . ”r ); 457 `g_maš_loÝ_run ( d . mašloÝ ); 459 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS - 1); 461 `g_maš_loÝ_uÄef ( d . mašloÝ ); 463 `g_sourû_»move ( tim”_id ); 464 `g_io_chªÃl_uÄef ( io ); 465 `g_sourû_»move ( io_id ); 466 `g_obex_uÄef ( obex ); 468 `g_as£¹_no_”rÜ ( d . ”r ); 469 } } 471  gboÞ—n $ÿnûl_Œªsãr ( gpoš‹r u£r_d©a ) 473  ‹¡_d©a * d = u£r_d©a ; 475 ià( d -> id > 0) 476 `g_obex_ÿnûl_Œªsãr ( d -> id , Œªsãr_com¶‘e , u£r_d©a ); 478  FALSE ; 479 } } 481  gssize $abÜt_d©a (* buf , gsize Ën , gpoš‹r u£r_d©a ) 483 `g_idË_add_fuÎ ( G_PRIORITY_HIGH , ÿnûl_Œªsãr , u£r_d©a , NULL ); 484  `´ovide_d©a ( buf , Ën , u£r_d©a ); 485 } } 487  $‹¡_¡»am_put_»q_abÜt () 489 GIOChªÃl * io ; 490 GIOCÚd™iÚ cÚd ; 491 gušt io_id , tim”_id ; 492 GObex * obex ; 493  ‹¡_d©a d = { 0, NULL , { 494 { put_»q_fœ¡ , (put_req_first) }, 495 { abÜt_»q , (abort_req) } }, { 496 { put_r¥_Ï¡ , (put_rsp_last) } } }; 498 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 500 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 501 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 503 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 505 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 507 d . id = `g_obex_put_»q ( obex , abÜt_d©a , Œªsãr_com¶‘e , &d, &d. ”r , 508 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 509 G_OBEX_HDR_NAME , "file.txt", 510 G_OBEX_HDR_INVALID ); 511 `g_as£¹_no_”rÜ ( d . ”r ); 513 `g_maš_loÝ_run ( d . mašloÝ ); 515 `g_as£¹_cmpušt ( d . couÁ , ==, 2); 517 `g_maš_loÝ_uÄef ( d . mašloÝ ); 519 `g_sourû_»move ( tim”_id ); 520 `g_io_chªÃl_uÄef ( io ); 521 `g_sourû_»move ( io_id ); 522 `g_obex_uÄef ( obex ); 524 `g_as£¹_”rÜ ( d . ”r , G_OBEX_ERROR , G_OBEX_ERROR_CANCELLED ); 525 `g_”rÜ_ä“ ( d . ”r ); 526 } } 528  $‹¡_¡»am_put_r¥_abÜt () 530 GIOChªÃl * io ; 531 GIOCÚd™iÚ cÚd ; 532 gušt io_id , tim”_id ; 533 GObex * obex ; 534  ‹¡_d©a d = { 0, NULL , { 535 { put_r¥_fœ¡ , (put_rsp_first) }, 536 { put_r¥_fœ¡ , (put_rsp_first) }, 537 { put_r¥_fœ¡ , (put_rsp_first) }, 538 { put_r¥_Ï¡ , (put_rsp_last) } }, { 539 { put_»q_z”o , (put_req_zero) }, 540 { abÜt_»q , (abort_req) }, 541 { NULL , -1 }, 542 { NULL , -1 } } }; 544 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 546 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 547 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 549 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 551 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 553 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_PUT , hªdË_put_£q , & d ); 555 `g_io_chªÃl_wr™e_ch¬s ( io , (*è put_»q_fœ¡ , 556 ( put_»q_fœ¡ ), NULL , & d . ”r ); 557 `g_as£¹_no_”rÜ ( d . ”r ); 559 `g_maš_loÝ_run ( d . mašloÝ ); 561 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS - 2); 563 `g_maš_loÝ_uÄef ( d . mašloÝ ); 565 `g_sourû_»move ( tim”_id ); 566 `g_io_chªÃl_uÄef ( io ); 567 `g_sourû_»move ( io_id ); 568 `g_obex_uÄef ( obex ); 570 `g_as£¹_”rÜ ( d . ”r , G_OBEX_ERROR , G_OBEX_ERROR_CANCELLED ); 571 `g_”rÜ_ä“ ( d . ”r ); 572 } } 574  $hªdË_put_£q_wa™ ( GObex * obex , GObexPack‘ * »q , 575 gpoš‹r u£r_d©a ) 577  ‹¡_d©a * d = u£r_d©a ; 578 gušt8 Ý = `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , NULL ); 579 gušt id ; 581 ià( Ý !ð G_OBEX_OP_PUT ) { 582 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 583 "UÃx³ùed opcod0x%02x", Ý ); 584 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 588 id = `g_obex_put_r¥ ( obex , »q , rcv_£q , Œªsãr_com¶‘e , d , 589 & d -> ”r , 590 G_OBEX_HDR_SRMP , G_OBEX_SRMP_WAIT , 591 G_OBEX_HDR_INVALID ); 592 ià( id == 0) 593 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 594 } } 596  $‹¡_·ck‘_put_r¥_wa™ () 598 GIOChªÃl * io ; 599 GIOCÚd™iÚ cÚd ; 600 gušt io_id , tim”_id ; 601 GObex * obex ; 602  ‹¡_d©a d = { 0, NULL , { 603 { put_r¥_fœ¡_¤m_wa™ , (put_rsp_first_srm_wait) }, 604 { put_r¥_fœ¡ , (put_rsp_first) }, 605 { NULL , -1 }, 606 { put_r¥_Ï¡ , (put_rsp_last) } }, { 607 { put_»q_z”o , (put_req_zero) }, 608 { put_»q_z”o , (put_req_zero) }, 609 { put_»q_Ï¡ , (put_req_last) }, 610 { NULL , 0 } } }; 612 `ü—‹_’dpošts (& obex , & io , SOCK_SEQPACKET ); 614 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 615 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 617 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 619 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 621 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_PUT , 622 hªdË_put_£q_wa™ , & d ); 624 `g_io_chªÃl_wr™e_ch¬s ( io , (*è put_»q_fœ¡_¤m , 625 ( put_»q_fœ¡_¤m ), NULL , 626 & d . ”r ); 627 `g_as£¹_no_”rÜ ( d . ”r ); 629 `g_maš_loÝ_run ( d . mašloÝ ); 631 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS ); 633 `g_maš_loÝ_uÄef ( d . mašloÝ ); 635 `g_sourû_»move ( tim”_id ); 636 `g_io_chªÃl_uÄef ( io ); 637 `g_sourû_»move ( io_id ); 638 `g_obex_uÄef ( obex ); 640 `g_as£¹_no_”rÜ ( d . ”r ); 641 } } 643  $‹¡_·ck‘_put_r¥ () 645 GIOChªÃl * io ; 646 GIOCÚd™iÚ cÚd ; 647 gušt io_id , tim”_id ; 648 GObex * obex ; 649  ‹¡_d©a d = { 0, NULL , { 650 { put_r¥_fœ¡_¤m , (put_rsp_first_srm) }, 651 { NULL , -1 }, 652 { NULL , -1 }, 653 { put_r¥_Ï¡ , (put_rsp_last) } }, { 654 { put_»q_z”o , (put_req_zero) }, 655 { put_»q_z”o , (put_req_zero) }, 656 { put_»q_Ï¡ , (put_req_last) }, 657 { NULL , 0 } } }; 659 `ü—‹_’dpošts (& obex , & io , SOCK_SEQPACKET ); 661 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 662 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 664 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 666 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 668 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_PUT , hªdË_put_£q , & d ); 670 `g_io_chªÃl_wr™e_ch¬s ( io , (*è put_»q_fœ¡_¤m , 671 ( put_»q_fœ¡_¤m ), NULL , 672 & d . ”r ); 673 `g_as£¹_no_”rÜ ( d . ”r ); 675 `g_maš_loÝ_run ( d . mašloÝ ); 677 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS ); 679 `g_maš_loÝ_uÄef ( d . mašloÝ ); 681 `g_sourû_»move ( tim”_id ); 682 `g_io_chªÃl_uÄef ( io ); 683 `g_sourû_»move ( io_id ); 684 `g_obex_uÄef ( obex ); 686 `g_as£¹_no_”rÜ ( d . ”r ); 687 } } 689  $‹¡_g‘_»q () 691 GIOChªÃl * io ; 692 GIOCÚd™iÚ cÚd ; 693 gušt io_id , tim”_id ; 694 GObex * obex ; 695  ‹¡_d©a d = { 0, NULL , { 696 { g‘_»q_fœ¡ , (get_req_first) }, 697 { g‘_»q_Ï¡ , (get_req_last) } }, { 698 { g‘_r¥_fœ¡ , (get_rsp_first) }, 699 { g‘_r¥_Ï¡ , (get_rsp_last) } } }; 701 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 703 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 704 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 706 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 708 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 710 `g_obex_g‘_»q ( obex , rcv_d©a , Œªsãr_com¶‘e , & d , &d. ”r , 711 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 712 G_OBEX_HDR_NAME , "file.txt", 713 G_OBEX_HDR_INVALID ); 714 `g_as£¹_no_”rÜ ( d . ”r ); 716 `g_maš_loÝ_run ( d . mašloÝ ); 718 `g_as£¹_cmpušt ( d . couÁ , ==, 2); 720 `g_maš_loÝ_uÄef ( d . mašloÝ ); 722 `g_sourû_»move ( tim”_id ); 723 `g_io_chªÃl_uÄef ( io ); 724 `g_sourû_»move ( io_id ); 725 `g_obex_uÄef ( obex ); 727 `g_as£¹_no_”rÜ ( d . ”r ); 728 } } 730  $‹¡_¡»am_g‘_»q () 732 GIOChªÃl * io ; 733 GIOCÚd™iÚ cÚd ; 734 gušt io_id , tim”_id ; 735 GObex * obex ; 736  ‹¡_d©a d = { 0, NULL , { 737 { g‘_»q_fœ¡ , (get_req_first) }, 738 { NULL , 0 }, 739 { NULL , 0 }, 740 { g‘_»q_Ï¡ , (get_req_last) } }, { 741 { g‘_r¥_fœ¡ , (get_rsp_first) }, 742 { g‘_r¥_z”o , (get_rsp_zero) }, 743 { g‘_r¥_z”o , (get_rsp_zero) }, 744 { g‘_r¥_Ï¡ , (get_rsp_last) } } }; 746 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 748 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 749 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 751 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 753 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 755 `g_obex_g‘_»q ( obex , rcv_£q , Œªsãr_com¶‘e , & d , &d. ”r , 756 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 757 G_OBEX_HDR_NAME , "file.txt", 758 G_OBEX_HDR_INVALID ); 759 `g_as£¹_no_”rÜ ( d . ”r ); 761 `g_maš_loÝ_run ( d . mašloÝ ); 763 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS ); 765 `g_maš_loÝ_uÄef ( d . mašloÝ ); 767 `g_sourû_»move ( tim”_id ); 768 `g_io_chªÃl_uÄef ( io ); 769 `g_sourû_»move ( io_id ); 770 `g_obex_uÄef ( obex ); 772 `g_as£¹_no_”rÜ ( d . ”r ); 773 } } 775  $‹¡_·ck‘_g‘_»q () 777 GIOChªÃl * io ; 778 GIOCÚd™iÚ cÚd ; 779 gušt io_id , tim”_id ; 780 GObex * obex ; 781  ‹¡_d©a d = { 0, NULL , { 782 { g‘_»q_fœ¡_¤m , (get_req_first_srm) }, 783 { NULL , -1 }, 784 { NULL , -1 }, 785 { g‘_»q_Ï¡ , (get_req_last) } }, { 786 { g‘_r¥_fœ¡_¤m , (get_rsp_first_srm) }, 787 { g‘_r¥_z”o , (get_rsp_zero) }, 788 { g‘_r¥_z”o , (get_rsp_zero) }, 789 { g‘_r¥_Ï¡ , (get_rsp_last) } } }; 791 `ü—‹_’dpošts (& obex , & io , SOCK_SEQPACKET ); 793 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 794 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 796 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 798 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 800 `g_obex_g‘_»q ( obex , rcv_£q , Œªsãr_com¶‘e , & d , &d. ”r , 801 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 802 G_OBEX_HDR_NAME , "file.txt", 803 G_OBEX_HDR_INVALID ); 804 `g_as£¹_no_”rÜ ( d . ”r ); 806 `g_maš_loÝ_run ( d . mašloÝ ); 808 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS ); 810 `g_maš_loÝ_uÄef ( d . mašloÝ ); 812 `g_sourû_»move ( tim”_id ); 813 `g_io_chªÃl_uÄef ( io ); 814 `g_sourû_»move ( io_id ); 815 `g_obex_uÄef ( obex ); 817 `g_as£¹_no_”rÜ ( d . ”r ); 818 } } 820  $‹¡_·ck‘_g‘_»q_wa™ () 822 GIOChªÃl * io ; 823 GIOCÚd™iÚ cÚd ; 824 gušt io_id , tim”_id ; 825 GObex * obex ; 826  ‹¡_d©a d = { 0, NULL , { 827 { g‘_»q_fœ¡_¤m_wa™ , (get_req_first_srm_wait) }, 828 { g‘_»q_Ï¡ , (get_req_last) }, 829 { NULL , -1 }, 830 { g‘_»q_Ï¡ , (get_req_last) } }, { 831 { g‘_r¥_fœ¡_¤m , (get_rsp_first_srm) }, 832 { g‘_r¥_z”o , (get_rsp_zero) }, 833 { g‘_r¥_z”o , (get_rsp_zero) }, 834 { g‘_r¥_Ï¡ , (get_rsp_last) } } }; 836 `ü—‹_’dpošts (& obex , & io , SOCK_SEQPACKET ); 838 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 839 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 841 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 843 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 845 `g_obex_g‘_»q ( obex , rcv_£q , Œªsãr_com¶‘e , & d , &d. ”r , 846 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 847 G_OBEX_HDR_NAME , "file.txt", 848 G_OBEX_HDR_SRMP , G_OBEX_SRMP_WAIT , 849 G_OBEX_HDR_INVALID ); 850 `g_as£¹_no_”rÜ ( d . ”r ); 852 `g_maš_loÝ_run ( d . mašloÝ ); 854 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS ); 856 `g_maš_loÝ_uÄef ( d . mašloÝ ); 858 `g_sourû_»move ( tim”_id ); 859 `g_io_chªÃl_uÄef ( io ); 860 `g_sourû_»move ( io_id ); 861 `g_obex_uÄef ( obex ); 863 `g_as£¹_no_”rÜ ( d . ”r ); 864 } } 866  gboÞ—n $rcv_£q_d–ay (cÚ¡ * buf , gsize Ën , gpoš‹r u£r_d©a ) 868  ‹¡_d©a * d = u£r_d©a ; 870 ià( d -> ´ovide_d–ay > 0) { 871 `g_obex_su¥’d ( d -> obex ); 872 `g_timeout_add_£cÚds ( d -> ´ovide_d–ay , »sume_obex , d); 873 d -> ´ovide_d–ay = 0; 876  TRUE ; 877 } } 879  $‹¡_·ck‘_g‘_»q_su¥’d_»sume () 881 GIOChªÃl * io ; 882 GIOCÚd™iÚ cÚd ; 883 gušt io_id , tim”_id ; 884 GObex * obex ; 885  ‹¡_d©a d = { 0, NULL , { 886 { g‘_»q_fœ¡_¤m , (get_req_first_srm) }, 887 { g‘_»q_¤m_wa™ , (get_req_srm_wait) }, 888 { g‘_»q_¤m_wa™ , (get_req_srm_wait) }, 889 { g‘_»q_Ï¡ , (get_req_last) } }, { 890 { g‘_r¥_fœ¡_¤m , (get_rsp_first_srm) }, 891 { g‘_r¥_¤m_wa™ , (get_rsp_srm_wait) }, 892 { g‘_r¥_¤m_wa™ , (get_rsp_srm_wait) }, 893 { g‘_r¥_Ï¡ , (get_rsp_last) } } }; 895 `ü—‹_’dpošts (& obex , & io , SOCK_SEQPACKET ); 896 d . obex = obex; 897 d . ´ovide_d–ay = 1; 899 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 900 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 902 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 904 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 906 `g_obex_g‘_»q ( obex , rcv_£q_d–ay , Œªsãr_com¶‘e , & d , &d. ”r , 907 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 908 G_OBEX_HDR_NAME , "file.txt", 909 G_OBEX_HDR_INVALID ); 910 `g_as£¹_no_”rÜ ( d . ”r ); 912 `g_maš_loÝ_run ( d . mašloÝ ); 914 `g_as£¹_cmpušt ( d . couÁ , ==, 4); 916 `g_maš_loÝ_uÄef ( d . mašloÝ ); 918 `g_sourû_»move ( tim”_id ); 919 `g_io_chªÃl_uÄef ( io ); 920 `g_sourû_»move ( io_id ); 921 `g_obex_uÄef ( obex ); 923 `g_as£¹_no_”rÜ ( d . ”r ); 924 } } 926  $‹¡_·ck‘_g‘_»q_wa™_Ãxt () 928 GIOChªÃl * io ; 929 GIOCÚd™iÚ cÚd ; 930 gušt io_id , tim”_id ; 931 GObex * obex ; 932  ‹¡_d©a d = { 0, NULL , { 933 { g‘_»q_fœ¡_¤m , (get_req_first_srm) }, 934 { g‘_»q_Ï¡ , (get_req_last) }, 935 { g‘_»q_Ï¡ , (get_req_last) }, 936 { g‘_»q_Ï¡ , (get_req_last) } }, { 937 { g‘_r¥_fœ¡_¤m_wa™_Ãxt , 938 ( g‘_r¥_fœ¡_¤m_wa™_Ãxt ) }, 939 { g‘_r¥_z”o_wa™_Ãxt , (get_rsp_zero_wait_next) }, 940 { g‘_r¥_z”o_wa™_Ãxt , (get_rsp_zero_wait_next) }, 941 { g‘_r¥_Ï¡ , (get_rsp_last) } } }; 943 `ü—‹_’dpošts (& obex , & io , SOCK_SEQPACKET ); 945 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 946 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 948 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 950 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 952 `g_obex_g‘_»q ( obex , rcv_£q , Œªsãr_com¶‘e , & d , &d. ”r , 953 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 954 G_OBEX_HDR_NAME , "file.txt", 955 G_OBEX_HDR_INVALID ); 956 `g_as£¹_no_”rÜ ( d . ”r ); 958 `g_maš_loÝ_run ( d . mašloÝ ); 960 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS ); 962 `g_maš_loÝ_uÄef ( d . mašloÝ ); 964 `g_sourû_»move ( tim”_id ); 965 `g_io_chªÃl_uÄef ( io ); 966 `g_sourû_»move ( io_id ); 967 `g_obex_uÄef ( obex ); 969 `g_as£¹_no_”rÜ ( d . ”r ); 970 } } 972  $‹¡_g‘_»q_­p () 974 GIOChªÃl * io ; 975 GIOCÚd™iÚ cÚd ; 976 gušt io_id , tim”_id ; 977 GObex * obex ; 978  ‹¡_d©a d = { 0, NULL , { 979 { g‘_»q_fœ¡_­p , (get_req_first_app) }, 980 { g‘_»q_Ï¡ , (get_req_last) }, 981 { g‘_»q_Ï¡ , (get_req_last) } }, { 982 { g‘_r¥_fœ¡_­p , (get_rsp_first_app) }, 983 { g‘_r¥_fœ¡ , (get_rsp_first) }, 984 { g‘_r¥_Ï¡ , (get_rsp_last) } } }; 986 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 988 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 989 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 991 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 993 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 995 `g_obex_g‘_»q ( obex , rcv_d©a , Œªsãr_com¶‘e , & d , &d. ”r , 996 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 997 G_OBEX_HDR_NAME , "file.txt", 998 G_OBEX_HDR_APPARAM , hdr_­p , (hdr_app), 999 G_OBEX_HDR_INVALID ); 1000 `g_as£¹_no_”rÜ ( d . ”r ); 1002 `g_maš_loÝ_run ( d . mašloÝ ); 1004 `g_as£¹_cmpušt ( d . couÁ , ==, 3); 1006 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1008 `g_sourû_»move ( tim”_id ); 1009 `g_io_chªÃl_uÄef ( io ); 1010 `g_sourû_»move ( io_id ); 1011 `g_obex_uÄef ( obex ); 1013 `g_as£¹_no_”rÜ ( d . ”r ); 1014 } } 1016  $hªdË_g‘_—gaš ( GObex * obex , GObexPack‘ * »q , 1017 gpoš‹r u£r_d©a ) 1019  ‹¡_d©a * d = u£r_d©a ; 1020 gušt8 Ý = `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , NULL ); 1021 gušt id ; 1023 ià( Ý !ð G_OBEX_OP_GET ) { 1024 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 1025 "UÃx³ùed opcod0x%02x", Ý ); 1026 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1030 id = `g_obex_g‘_r¥ ( obex , ´ovide_—gaš , Œªsãr_com¶‘e , d , 1031 & d -> ”r , G_OBEX_HDR_INVALID ); 1032 ià( id == 0) 1033 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1034 } } 1036  $hªdË_g‘ ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 1038  ‹¡_d©a * d = u£r_d©a ; 1039 gušt8 Ý = `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , NULL ); 1040 gušt id ; 1042 ià( Ý !ð G_OBEX_OP_GET ) { 1043 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 1044 "UÃx³ùed opcod0x%02x", Ý ); 1045 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1049 id = `g_obex_g‘_r¥ ( obex , ´ovide_d©a , Œªsãr_com¶‘e , d , &d-> ”r , 1050 G_OBEX_HDR_INVALID ); 1051 ià( id == 0) 1052 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1053 } } 1055  $‹¡_¡»am_put_»q () 1057 GIOChªÃl * io ; 1058 GIOCÚd™iÚ cÚd ; 1059 gušt io_id , tim”_id ; 1060 GObex * obex ; 1061  ‹¡_d©a d = { 0, NULL , { 1062 { NULL , 0 }, 1063 { NULL , 0 }, 1064 { NULL , 0 }, 1065 { put_»q_Ï¡ , (put_req_last) } }, { 1066 { put_r¥_fœ¡ , (put_rsp_first) }, 1067 { put_r¥_fœ¡ , (put_rsp_first) }, 1068 { put_r¥_fœ¡ , (put_rsp_first) }, 1069 { put_r¥_Ï¡ , (put_rsp_last) } } }; 1071 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1072 d . obex = obex; 1074 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1075 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1077 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1079 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1081 `g_obex_put_»q ( obex , ´ovide_£q , Œªsãr_com¶‘e , & d , &d. ”r , 1082 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 1083 G_OBEX_HDR_NAME , "random.bin", 1084 G_OBEX_HDR_INVALID ); 1085 `g_as£¹_no_”rÜ ( d . ”r ); 1087 `g_maš_loÝ_run ( d . mašloÝ ); 1089 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS ); 1091 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1093 `g_sourû_»move ( tim”_id ); 1094 `g_io_chªÃl_uÄef ( io ); 1095 `g_sourû_»move ( io_id ); 1096 `g_obex_uÄef ( obex ); 1098 `g_as£¹_no_”rÜ ( d . ”r ); 1099 } } 1101  gssize $´ovide_£q_d–ay (* buf , gsize Ën , gpoš‹r u£r_d©a ) 1103  ‹¡_d©a * d = u£r_d©a ; 1104  fd ; 1105 gssize »t ; 1107 ià( d -> ´ovide_d–ay > 0) { 1108 `g_obex_su¥’d ( d -> obex ); 1109 `g_timeout_add_£cÚds ( d -> ´ovide_d–ay , »sume_obex , d); 1110 d -> ´ovide_d–ay = 0; 1113 ià( d -> couÁ =ð RANDOM_PACKETS - 1) 1116 fd = `Ý’ ("/dev/u¿ndom", O_RDONLY | O_NOCTTY , 0); 1117 ià( fd < 0) { 1118 `g_£t_”rÜ (& d -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 1119 "Ý’(/dev/u¿ndom): %s", `¡»¼Ü ( ”ºo )); 1120 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1124 »t = `»ad ( fd , buf , Ën ); 1125 `þo£ ( fd ); 1126  »t ; 1127 } } 1129  $‹¡_·ck‘_put_»q_su¥’d_»sume () 1131 GIOChªÃl * io ; 1132 GIOCÚd™iÚ cÚd ; 1133 gušt io_id ; 1134 GObex * obex ; 1135  ‹¡_d©a d = { 0, NULL , { 1136 { NULL , 0 }, 1137 { NULL , 0 }, 1138 { NULL , 0 }, 1139 { put_»q_Ï¡ , (put_req_last) } }, { 1140 { put_r¥_fœ¡_¤m , (put_rsp_first_srm) }, 1141 { NULL , 0 }, 1142 { NULL , 0 }, 1143 { put_r¥_Ï¡ , (put_rsp_last) } } }; 1145 `ü—‹_’dpošts (& obex , & io , SOCK_SEQPACKET ); 1146 d . obex = obex; 1147 d . ´ovide_d–ay = 1; 1149 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1150 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1152 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1154 `g_obex_put_»q ( obex , ´ovide_£q_d–ay , Œªsãr_com¶‘e , & d , &d. ”r , 1155 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 1156 G_OBEX_HDR_NAME , "random.bin", 1157 G_OBEX_HDR_INVALID ); 1158 `g_as£¹_no_”rÜ ( d . ”r ); 1160 `g_maš_loÝ_run ( d . mašloÝ ); 1162 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS ); 1164 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1166 `g_io_chªÃl_uÄef ( io ); 1167 `g_sourû_»move ( io_id ); 1168 `g_obex_uÄef ( obex ); 1170 `g_as£¹_no_”rÜ ( d . ”r ); 1171 } } 1173  $‹¡_·ck‘_put_»q_wa™ () 1175 GIOChªÃl * io ; 1176 GIOCÚd™iÚ cÚd ; 1177 gušt io_id , tim”_id ; 1178 GObex * obex ; 1179  ‹¡_d©a d = { 0, NULL , { 1180 { NULL , 0 }, 1181 { NULL , 0 }, 1182 { NULL , 0 }, 1183 { put_»q_Ï¡ , (put_req_last) } }, { 1184 { put_r¥_fœ¡_¤m_wa™ , (put_rsp_first_srm_wait) }, 1185 { put_r¥_fœ¡ , (put_rsp_first) }, 1186 { NULL , 0 }, 1187 { put_r¥_Ï¡ , (put_rsp_last) } } }; 1189 `ü—‹_’dpošts (& obex , & io , SOCK_SEQPACKET ); 1190 d . obex = obex; 1192 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1193 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1195 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1197 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1199 `g_obex_put_»q ( obex , ´ovide_£q , Œªsãr_com¶‘e , & d , &d. ”r , 1200 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 1201 G_OBEX_HDR_NAME , "random.bin", 1202 G_OBEX_HDR_INVALID ); 1203 `g_as£¹_no_”rÜ ( d . ”r ); 1205 `g_maš_loÝ_run ( d . mašloÝ ); 1207 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS ); 1209 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1211 `g_sourû_»move ( tim”_id ); 1212 `g_io_chªÃl_uÄef ( io ); 1213 `g_sourû_»move ( io_id ); 1214 `g_obex_uÄef ( obex ); 1216 `g_as£¹_no_”rÜ ( d . ”r ); 1217 } } 1219  $‹¡_·ck‘_put_»q () 1221 GIOChªÃl * io ; 1222 GIOCÚd™iÚ cÚd ; 1223 gušt io_id , tim”_id ; 1224 GObex * obex ; 1225  ‹¡_d©a d = { 0, NULL , { 1226 { NULL , 0 }, 1227 { NULL , 0 }, 1228 { NULL , 0 }, 1229 { put_»q_Ï¡ , (put_req_last) } }, { 1230 { put_r¥_fœ¡_¤m , (put_rsp_first_srm) }, 1231 { NULL , 0 }, 1232 { NULL , 0 }, 1233 { put_r¥_Ï¡ , (put_rsp_last) } } }; 1235 `ü—‹_’dpošts (& obex , & io , SOCK_SEQPACKET ); 1236 d . obex = obex; 1238 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1239 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1241 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1243 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1245 `g_obex_put_»q ( obex , ´ovide_£q , Œªsãr_com¶‘e , & d , &d. ”r , 1246 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 1247 G_OBEX_HDR_NAME , "random.bin", 1248 G_OBEX_HDR_INVALID ); 1249 `g_as£¹_no_”rÜ ( d . ”r ); 1251 `g_maš_loÝ_run ( d . mašloÝ ); 1253 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS ); 1255 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1257 `g_sourû_»move ( tim”_id ); 1258 `g_io_chªÃl_uÄef ( io ); 1259 `g_sourû_»move ( io_id ); 1260 `g_obex_uÄef ( obex ); 1262 `g_as£¹_no_”rÜ ( d . ”r ); 1263 } } 1265  $‹¡_put_»q_—gaš () 1267 GIOChªÃl * io ; 1268 GIOCÚd™iÚ cÚd ; 1269 gušt io_id , tim”_id ; 1270 GObex * obex ; 1271  ‹¡_d©a d = { 0, NULL , { 1272 { put_»q_fœ¡ , (put_req_first) }, 1273 { put_»q_Ï¡ , (put_req_last) } }, { 1274 { put_r¥_fœ¡ , (put_rsp_first) }, 1275 { put_r¥_Ï¡ , (put_rsp_last) } } }; 1277 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1278 d . obex = obex; 1279 d . ´ovide_d–ay = 200; 1281 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1282 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1284 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1286 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1288 `g_obex_put_»q ( obex , ´ovide_—gaš , Œªsãr_com¶‘e , & d , &d. ”r , 1289 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 1290 G_OBEX_HDR_NAME , "file.txt", 1291 G_OBEX_HDR_INVALID ); 1292 `g_as£¹_no_”rÜ ( d . ”r ); 1294 `g_maš_loÝ_run ( d . mašloÝ ); 1296 `g_as£¹_cmpušt ( d . couÁ , ==, 2); 1298 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1300 `g_sourû_»move ( tim”_id ); 1301 `g_io_chªÃl_uÄef ( io ); 1302 `g_sourû_»move ( io_id ); 1303 `g_obex_uÄef ( obex ); 1305 `g_as£¹_no_”rÜ ( d . ”r ); 1306 } } 1308  $‹¡_g‘_r¥ () 1310 GIOChªÃl * io ; 1311 GIOCÚd™iÚ cÚd ; 1312 gušt io_id , tim”_id ; 1313 GObex * obex ; 1314  ‹¡_d©a d = { 0, NULL , { 1315 { g‘_r¥_fœ¡ , (get_rsp_first) }, 1316 { g‘_r¥_Ï¡ , (get_rsp_last) } }, { 1317 { g‘_»q_Ï¡ , (get_req_last) }, 1318 { NULL , 0 } } }; 1320 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1322 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1323 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1325 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1327 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1329 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_GET , hªdË_g‘ , & d ); 1331 `g_io_chªÃl_wr™e_ch¬s ( io , (*è g‘_»q_fœ¡ , 1332 ( g‘_»q_fœ¡ ), NULL , & d . ”r ); 1333 `g_as£¹_no_”rÜ ( d . ”r ); 1335 `g_maš_loÝ_run ( d . mašloÝ ); 1337 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 1339 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1341 `g_sourû_»move ( tim”_id ); 1342 `g_io_chªÃl_uÄef ( io ); 1343 `g_sourû_»move ( io_id ); 1344 `g_obex_uÄef ( obex ); 1346 `g_as£¹_no_”rÜ ( d . ”r ); 1347 } } 1349  $hªdË_g‘_£q ( GObex * obex , GObexPack‘ * »q , 1350 gpoš‹r u£r_d©a ) 1352  ‹¡_d©a * d = u£r_d©a ; 1353 gušt8 Ý = `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , NULL ); 1354 gušt id ; 1356 ià( Ý !ð G_OBEX_OP_GET ) { 1357 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 1358 "UÃx³ùed opcod0x%02x", Ý ); 1359 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1363 id = `g_obex_g‘_r¥ ( obex , ´ovide_£q , Œªsãr_com¶‘e , d , 1364 & d -> ”r , G_OBEX_HDR_INVALID ); 1365 ià( id == 0) 1366 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1367 } } 1369  $‹¡_¡»am_g‘_r¥ () 1371 GIOChªÃl * io ; 1372 GIOCÚd™iÚ cÚd ; 1373 gušt io_id , tim”_id ; 1374 GObex * obex ; 1375  ‹¡_d©a d = { 0, NULL , { 1376 { NULL , 0 }, 1377 { NULL , 0 }, 1378 { NULL , 0 }, 1379 { g‘_r¥_Ï¡ , (get_rsp_last) } }, { 1380 { g‘_»q_Ï¡ , (get_req_last) }, 1381 { g‘_»q_Ï¡ , (get_req_last) }, 1382 { g‘_»q_Ï¡ , (get_req_last) } } }; 1384 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1386 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1387 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1389 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1391 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1393 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_GET , hªdË_g‘_£q , & d ); 1395 `g_io_chªÃl_wr™e_ch¬s ( io , (*è g‘_»q_fœ¡ , 1396 ( g‘_»q_fœ¡ ), NULL , & d . ”r ); 1397 `g_as£¹_no_”rÜ ( d . ”r ); 1399 `g_maš_loÝ_run ( d . mašloÝ ); 1401 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS - 1); 1403 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1405 `g_sourû_»move ( tim”_id ); 1406 `g_io_chªÃl_uÄef ( io ); 1407 `g_sourû_»move ( io_id ); 1408 `g_obex_uÄef ( obex ); 1410 `g_as£¹_no_”rÜ ( d . ”r ); 1411 } } 1413  $‹¡_·ck‘_g‘_r¥ () 1415 GIOChªÃl * io ; 1416 GIOCÚd™iÚ cÚd ; 1417 gušt io_id , tim”_id ; 1418 GObex * obex ; 1419  ‹¡_d©a d = { 0, NULL , { 1420 { NULL , 0 }, 1421 { NULL , 0 }, 1422 { NULL , 0 }, 1423 { g‘_r¥_Ï¡ , (get_rsp_last) } }, { 1424 { NULL , 0 }, 1425 { NULL , 0 }, 1426 { g‘_»q_Ï¡ , (get_req_last) } } }; 1428 `ü—‹_’dpošts (& obex , & io , SOCK_SEQPACKET ); 1430 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1431 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1433 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1435 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1437 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_GET , hªdË_g‘_£q , & d ); 1439 `g_io_chªÃl_wr™e_ch¬s ( io , (*è g‘_»q_fœ¡_¤m , 1440 ( g‘_»q_fœ¡_¤m ), NULL , 1441 & d . ”r ); 1442 `g_as£¹_no_”rÜ ( d . ”r ); 1444 `g_maš_loÝ_run ( d . mašloÝ ); 1446 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS - 1); 1448 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1450 `g_sourû_»move ( tim”_id ); 1451 `g_io_chªÃl_uÄef ( io ); 1452 `g_sourû_»move ( io_id ); 1453 `g_obex_uÄef ( obex ); 1455 `g_as£¹_no_”rÜ ( d . ”r ); 1456 } } 1458  $hªdË_g‘_£q_¤m_wa™ ( GObex * obex , GObexPack‘ * »q , 1459 gpoš‹r u£r_d©a ) 1461  ‹¡_d©a * d = u£r_d©a ; 1462 gušt8 Ý = `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , NULL ); 1463 gušt id ; 1465 ià( Ý !ð G_OBEX_OP_GET ) { 1466 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 1467 "UÃx³ùed opcod0x%02x", Ý ); 1468 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1472 id = `g_obex_g‘_r¥ ( obex , ´ovide_£q , Œªsãr_com¶‘e , d , 1473 & d -> ”r , 1474 G_OBEX_HDR_SRMP , G_OBEX_SRMP_WAIT , 1475 G_OBEX_HDR_INVALID ); 1476 ià( id == 0) 1477 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1478 } } 1480  $‹¡_·ck‘_g‘_r¥_wa™ () 1482 GIOChªÃl * io ; 1483 GIOCÚd™iÚ cÚd ; 1484 gušt io_id , tim”_id ; 1485 GObex * obex ; 1486  ‹¡_d©a d = { 0, NULL , { 1487 { NULL , 0 }, 1488 { NULL , 0 }, 1489 { NULL , 0 }, 1490 { g‘_r¥_Ï¡ , (get_rsp_last) } }, { 1491 { g‘_»q_Ï¡ , (get_req_last) }, 1492 { NULL , 0 }, 1493 { g‘_»q_Ï¡ , (get_req_last) } } }; 1495 `ü—‹_’dpošts (& obex , & io , SOCK_SEQPACKET ); 1497 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1498 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1500 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1502 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1504 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_GET , 1505 hªdË_g‘_£q_¤m_wa™ , & d ); 1507 `g_io_chªÃl_wr™e_ch¬s ( io , (*è g‘_»q_fœ¡_¤m , 1508 ( g‘_»q_fœ¡_¤m ), NULL , 1509 & d . ”r ); 1510 `g_as£¹_no_”rÜ ( d . ”r ); 1512 `g_maš_loÝ_run ( d . mašloÝ ); 1514 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS - 1); 1516 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1518 `g_sourû_»move ( tim”_id ); 1519 `g_io_chªÃl_uÄef ( io ); 1520 `g_sourû_»move ( io_id ); 1521 `g_obex_uÄef ( obex ); 1523 `g_as£¹_no_”rÜ ( d . ”r ); 1524 } } 1526  $hªdË_g‘_­p ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 1528  ‹¡_d©a * d = u£r_d©a ; 1529 gušt8 Ý = `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , NULL ); 1530 GObexPack‘ * r¥ ; 1532 ià( Ý !ð G_OBEX_OP_GET ) { 1533 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 1534 "UÃx³ùed opcod0x%02x", Ý ); 1535 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1539 `g_obex_add_»que¡_funùiÚ ( d -> obex , G_OBEX_OP_GET , hªdË_g‘ , d); 1541 r¥ = `g_obex_·ck‘_Ãw ( G_OBEX_RSP_CONTINUE , TRUE , 1542 G_OBEX_HDR_APPARAM , hdr_­p , (hdr_app), 1543 G_OBEX_HDR_INVALID ); 1545 ià( `g_obex_£nd ( d -> obex , r¥ , NULL è=ð FALSE ) 1546 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1547 } } 1549  $‹¡_g‘_r¥_­p () 1551 GIOChªÃl * io ; 1552 GIOCÚd™iÚ cÚd ; 1553 gušt io_id , tim”_id ; 1554 GObex * obex ; 1555  ‹¡_d©a d = { 0, NULL , { 1556 { g‘_r¥_fœ¡_­p , (get_rsp_first_app) }, 1557 { g‘_r¥_fœ¡ , (get_rsp_first) }, 1558 { g‘_r¥_Ï¡ , (get_rsp_last) } }, { 1559 { g‘_»q_fœ¡ , (get_req_first) }, 1560 { g‘_»q_Ï¡ , (get_req_last) }, 1561 { NULL , 0 } } }; 1563 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1564 d . obex = obex; 1566 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1567 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1569 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1571 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1573 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_GET , hªdË_g‘_­p , & d ); 1575 `g_io_chªÃl_wr™e_ch¬s ( io , (*è g‘_»q_fœ¡_­p , 1576 ( g‘_»q_fœ¡_­p ), NULL , & d . ”r ); 1577 `g_as£¹_no_”rÜ ( d . ”r ); 1579 `g_maš_loÝ_run ( d . mašloÝ ); 1581 `g_as£¹_cmpušt ( d . couÁ , ==, 2); 1583 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1585 `g_sourû_»move ( tim”_id ); 1586 `g_io_chªÃl_uÄef ( io ); 1587 `g_sourû_»move ( io_id ); 1588 `g_obex_uÄef ( obex ); 1590 `g_as£¹_no_”rÜ ( d . ”r ); 1591 } } 1593  $‹¡_put_»q_d–ay () 1595 GIOChªÃl * io ; 1596 GIOCÚd™iÚ cÚd ; 1597 gušt io_id , tim”_id ; 1598 GObex * obex ; 1599  ‹¡_d©a d = { 0, NULL , { 1600 { put_»q_fœ¡ , (put_req_first) }, 1601 { put_»q_Ï¡ , (put_req_last) } }, { 1602 { put_r¥_fœ¡ , (put_rsp_first) }, 1603 { put_r¥_Ï¡ , (put_rsp_last) } } }; 1605 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1606 d . obex = obex; 1607 d . ´ovide_d–ay = 200; 1609 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1610 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1612 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1614 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1616 `g_obex_put_»q ( obex , ´ovide_d©a , Œªsãr_com¶‘e , & d , &d. ”r , 1617 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 1618 G_OBEX_HDR_NAME , "file.txt", 1619 G_OBEX_HDR_INVALID ); 1620 `g_as£¹_no_”rÜ ( d . ”r ); 1622 `g_maš_loÝ_run ( d . mašloÝ ); 1624 `g_as£¹_cmpušt ( d . couÁ , ==, 2); 1626 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1628 `g_sourû_»move ( tim”_id ); 1629 `g_io_chªÃl_uÄef ( io ); 1630 `g_sourû_»move ( io_id ); 1631 `g_obex_uÄef ( obex ); 1633 `g_as£¹_no_”rÜ ( d . ”r ); 1634 } } 1636  $‹¡_g‘_r¥_d–ay () 1638 GIOChªÃl * io ; 1639 GIOCÚd™iÚ cÚd ; 1640 gušt io_id , tim”_id ; 1641 GObex * obex ; 1642  ‹¡_d©a d = { 0, NULL , { 1643 { g‘_r¥_fœ¡ , (get_rsp_first) }, 1644 { g‘_r¥_Ï¡ , (get_rsp_last) } }, { 1645 { g‘_»q_Ï¡ , (get_req_last) }, 1646 { NULL , 0 } } }; 1648 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1649 d . obex = obex; 1650 d . ´ovide_d–ay = 200; 1652 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1653 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1655 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1657 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1659 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_GET , hªdË_g‘ , & d ); 1661 `g_io_chªÃl_wr™e_ch¬s ( io , (*è g‘_»q_fœ¡ , 1662 ( g‘_»q_fœ¡ ), NULL , & d . ”r ); 1663 `g_as£¹_no_”rÜ ( d . ”r ); 1665 `g_maš_loÝ_run ( d . mašloÝ ); 1667 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 1669 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1671 `g_sourû_»move ( tim”_id ); 1672 `g_io_chªÃl_uÄef ( io ); 1673 `g_sourû_»move ( io_id ); 1674 `g_obex_uÄef ( obex ); 1676 `g_as£¹_no_”rÜ ( d . ”r ); 1677 } } 1679  gboÞ—n $rcv_d©a_d–ay (cÚ¡ * buf , gsize Ën , gpoš‹r u£r_d©a ) 1681  ‹¡_d©a * d = u£r_d©a ; 1683 ià( Ën !ð( body_d©a )) 1684 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 1685 "UÃx³ùed by‹ couÁ %zu", Ën ); 1687 ià( `memcmp ( buf , body_d©a , (body_data)) != 0) { 1688 `dump_bufs ( body_d©a , (body_d©a), buf , Ën ); 1689 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 1690 "UÃx³ùed by‹ couÁ %zu", Ën ); 1693 ià( d -> ´ovide_d–ay > 0) { 1694 `g_obex_su¥’d ( d -> obex ); 1695 `g_timeout_add ( d -> ´ovide_d–ay , »sume_obex , d); 1698  TRUE ; 1699 } } 1701  $hªdË_put_d–ay ( GObex * obex , GObexPack‘ * »q , gpoš‹r u£r_d©a ) 1703  ‹¡_d©a * d = u£r_d©a ; 1704 gušt8 Ý = `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , NULL ); 1705 gušt id ; 1707 ià( Ý !ð G_OBEX_OP_PUT ) { 1708 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 1709 "UÃx³ùed opcod0x%02x", Ý ); 1710 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1714 id = `g_obex_put_r¥ ( obex , »q , rcv_d©a_d–ay , Œªsãr_com¶‘e , d , 1715 & d -> ”r , G_OBEX_HDR_INVALID ); 1716 ià( id == 0) 1717 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1718 } } 1720  $‹¡_put_r¥_d–ay () 1722 GIOChªÃl * io ; 1723 GIOCÚd™iÚ cÚd ; 1724 gušt io_id , tim”_id ; 1725 GObex * obex ; 1726  ‹¡_d©a d = { 0, NULL , { 1727 { put_r¥_fœ¡ , (put_rsp_first) }, 1728 { put_r¥_Ï¡ , (put_rsp_last) } }, { 1729 { put_»q_Ï¡ , (put_req_last) }, 1730 { NULL , 0 } } }; 1732 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1733 d . obex = obex; 1734 d . ´ovide_d–ay = 200; 1736 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1737 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1739 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1741 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1743 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_PUT , hªdË_put_d–ay , & d ); 1745 `g_io_chªÃl_wr™e_ch¬s ( io , (*è put_»q_fœ¡ , 1746 ( put_»q_fœ¡ ), NULL , & d . ”r ); 1747 `g_as£¹_no_”rÜ ( d . ”r ); 1749 `g_maš_loÝ_run ( d . mašloÝ ); 1751 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 1753 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1755 `g_sourû_»move ( tim”_id ); 1756 `g_io_chªÃl_uÄef ( io ); 1757 `g_sourû_»move ( io_id ); 1758 `g_obex_uÄef ( obex ); 1760 `g_as£¹_no_”rÜ ( d . ”r ); 1761 } } 1763  $‹¡_g‘_»q_d–ay () 1765 GIOChªÃl * io ; 1766 GIOCÚd™iÚ cÚd ; 1767 gušt io_id , tim”_id ; 1768 GObex * obex ; 1769  ‹¡_d©a d = { 0, NULL , { 1770 { g‘_»q_fœ¡ , (get_req_first) }, 1771 { g‘_»q_Ï¡ , (get_req_last) } }, { 1772 { g‘_r¥_fœ¡ , (get_rsp_first) }, 1773 { g‘_r¥_Ï¡ , (get_rsp_last) } } }; 1775 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1776 d . obex = obex; 1777 d . ´ovide_d–ay = 200; 1779 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1780 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1782 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1784 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1786 `g_obex_g‘_»q ( obex , rcv_d©a_d–ay , Œªsãr_com¶‘e , & d , &d. ”r , 1787 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 1788 G_OBEX_HDR_NAME , "file.txt", 1789 G_OBEX_HDR_INVALID ); 1790 `g_as£¹_no_”rÜ ( d . ”r ); 1792 `g_maš_loÝ_run ( d . mašloÝ ); 1794 `g_as£¹_cmpušt ( d . couÁ , ==, 2); 1796 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1798 `g_sourû_»move ( tim”_id ); 1799 `g_io_chªÃl_uÄef ( io ); 1800 `g_sourû_»move ( io_id ); 1801 `g_obex_uÄef ( obex ); 1803 `g_as£¹_no_”rÜ ( d . ”r ); 1804 } } 1806  $‹¡_g‘_r¥_—gaš () 1808 GIOChªÃl * io ; 1809 GIOCÚd™iÚ cÚd ; 1810 gušt io_id , tim”_id ; 1811 GObex * obex ; 1812  ‹¡_d©a d = { 0, NULL , { 1813 { g‘_r¥_fœ¡ , (get_rsp_first) }, 1814 { g‘_r¥_Ï¡ , (get_rsp_last) } }, { 1815 { g‘_»q_Ï¡ , (get_req_last) }, 1816 { NULL , 0 } } }; 1818 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1819 d . obex = obex; 1820 d . ´ovide_d–ay = 200; 1822 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1823 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1825 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1827 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1829 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_GET , hªdË_g‘_—gaš , 1830 & d ); 1832 `g_io_chªÃl_wr™e_ch¬s ( io , (*è g‘_»q_fœ¡ , 1833 ( g‘_»q_fœ¡ ), NULL , & d . ”r ); 1834 `g_as£¹_no_”rÜ ( d . ”r ); 1836 `g_maš_loÝ_run ( d . mašloÝ ); 1838 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 1840 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1842 `g_sourû_»move ( tim”_id ); 1843 `g_io_chªÃl_uÄef ( io ); 1844 `g_sourû_»move ( io_id ); 1845 `g_obex_uÄef ( obex ); 1847 `g_as£¹_no_”rÜ ( d . ”r ); 1848 } } 1850  $cÚn_com¶‘e ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 1851 gpoš‹r u£r_d©a ) 1853  ‹¡_d©a * d = u£r_d©a ; 1855 ià( ”r !ð NULL ) 1856 d -> ”r = `g_”rÜ_cÝy (err); 1858 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1859 } } 1861  $‹¡_cÚn_»q () 1863 GIOChªÃl * io ; 1864 GIOCÚd™iÚ cÚd ; 1865 gušt io_id , tim”_id ; 1866 GObex * obex ; 1867  ‹¡_d©a d = { 0, NULL , { 1868 { cÚn_»q , (conn_req) } }, { 1869 { cÚn_r¥ , (conn_rsp) } } }; 1871 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1872 d . obex = obex; 1874 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1875 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1877 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1879 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1881 `g_obex_cÚÃù ( obex , cÚn_com¶‘e , & d , &d. ”r , G_OBEX_HDR_INVALID ); 1882 `g_as£¹_no_”rÜ ( d . ”r ); 1884 `g_maš_loÝ_run ( d . mašloÝ ); 1886 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 1888 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1890 `g_sourû_»move ( tim”_id ); 1891 `g_io_chªÃl_uÄef ( io ); 1892 `g_sourû_»move ( io_id ); 1893 `g_obex_uÄef ( obex ); 1895 `g_as£¹_no_”rÜ ( d . ”r ); 1896 } } 1898  $hªdË_cÚn_r¥ ( GObex * obex , GObexPack‘ * »q , 1899 gpoš‹r u£r_d©a ) 1901  ‹¡_d©a * d = u£r_d©a ; 1902 gušt8 Ý = `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , NULL ); 1903 GObexPack‘ * r¥ ; 1905 ià( Ý !ð G_OBEX_OP_CONNECT ) { 1906 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 1907 "UÃx³ùed opcod0x%02x", Ý ); 1908 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1912 r¥ = `g_obex_·ck‘_Ãw ( G_OBEX_RSP_SUCCESS , TRUE , 1913 G_OBEX_HDR_CONNECTION , 1, 1914 G_OBEX_HDR_INVALID ); 1915 `g_obex_£nd ( obex , r¥ , & d -> ”r ); 1916 } } 1918  $‹¡_cÚn_r¥ () 1920 GIOChªÃl * io ; 1921 GIOCÚd™iÚ cÚd ; 1922 gušt io_id , tim”_id ; 1923 GObex * obex ; 1924  ‹¡_d©a d = { 0, NULL , { 1925 { cÚn_r¥ , (conn_rsp) } }, { 1926 { NULL , -1 } } }; 1928 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1929 d . obex = obex; 1931 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1932 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1934 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1936 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1938 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_CONNECT , 1939 hªdË_cÚn_r¥ , & d ); 1941 `g_io_chªÃl_wr™e_ch¬s ( io , (*è cÚn_»q , (conn_req), 1942 NULL , & d . ”r ); 1943 `g_as£¹_no_”rÜ ( d . ”r ); 1945 `g_maš_loÝ_run ( d . mašloÝ ); 1947 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 1949 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1951 `g_sourû_»move ( tim”_id ); 1952 `g_io_chªÃl_uÄef ( io ); 1953 ià(! d . io_com¶‘ed ) 1954 `g_sourû_»move ( io_id ); 1955 `g_obex_uÄef ( obex ); 1957 `g_as£¹_no_”rÜ ( d . ”r ); 1958 } } 1960  $cÚn_com¶‘e_g‘_»q ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 1961 gpoš‹r u£r_d©a ) 1963  ‹¡_d©a * d = u£r_d©a ; 1965 ià( ”r !ð NULL ) { 1966 d -> ”r = `g_”rÜ_cÝy (err); 1967 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 1970 `g_obex_g‘_»q ( obex , rcv_d©a , Œªsãr_com¶‘e , d , &d-> ”r , 1971 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 1972 G_OBEX_HDR_NAME , "file.txt", 1973 G_OBEX_HDR_INVALID ); 1974 } } 1976  $‹¡_cÚn_g‘_»q () 1978 GIOChªÃl * io ; 1979 GIOCÚd™iÚ cÚd ; 1980 gušt io_id , tim”_id ; 1981 GObex * obex ; 1982  ‹¡_d©a d = { 0, NULL , { 1983 { cÚn_»q , (conn_req) }, 1984 { cÚn_g‘_»q_fœ¡ , (conn_get_req_first) }, 1985 { g‘_»q_Ï¡ , (get_req_last) }}, { 1986 { cÚn_r¥ , (conn_rsp) } , 1987 { g‘_r¥_fœ¡ , (get_rsp_first) }, 1988 { g‘_r¥_Ï¡ , (get_rsp_last) } } }; 1990 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1991 d . obex = obex; 1993 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1994 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1996 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1998 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 2000 `g_obex_cÚÃù ( obex , cÚn_com¶‘e_g‘_»q , & d , &d. ”r , 2001 G_OBEX_HDR_INVALID ); 2002 `g_as£¹_no_”rÜ ( d . ”r ); 2004 `g_maš_loÝ_run ( d . mašloÝ ); 2006 `g_as£¹_cmpušt ( d . couÁ , ==, 3); 2008 `g_maš_loÝ_uÄef ( d . mašloÝ ); 2010 `g_sourû_»move ( tim”_id ); 2011 `g_io_chªÃl_uÄef ( io ); 2012 `g_sourû_»move ( io_id ); 2013 `g_obex_uÄef ( obex ); 2015 `g_as£¹_no_”rÜ ( d . ”r ); 2016 } } 2018  $‹¡_cÚn_g‘_r¥ () 2020 GIOChªÃl * io ; 2021 GIOCÚd™iÚ cÚd ; 2022 gušt io_id , tim”_id ; 2023 GObex * obex ; 2024  ‹¡_d©a d = { 0, NULL , { 2025 { cÚn_r¥ , (conn_rsp) }, 2026 { g‘_r¥_fœ¡ , (get_rsp_first) }, 2027 { g‘_r¥_Ï¡ , (get_rsp_last) } }, { 2028 { cÚn_g‘_»q_fœ¡ , (conn_get_req_first) }, 2029 { g‘_»q_Ï¡ , (get_req_last) }, 2030 { NULL , 0 } } }; 2032 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 2033 d . obex = obex; 2035 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 2036 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 2038 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 2040 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 2042 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_CONNECT , 2043 hªdË_cÚn_r¥ , & d ); 2045 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_GET , 2046 hªdË_g‘ , & d ); 2048 `g_io_chªÃl_wr™e_ch¬s ( io , (*è cÚn_»q , (conn_req), 2049 NULL , & d . ”r ); 2050 `g_as£¹_no_”rÜ ( d . ”r ); 2052 `g_maš_loÝ_run ( d . mašloÝ ); 2054 `g_as£¹_cmpušt ( d . couÁ , ==, 2); 2056 `g_maš_loÝ_uÄef ( d . mašloÝ ); 2058 `g_sourû_»move ( tim”_id ); 2059 `g_io_chªÃl_uÄef ( io ); 2060 `g_sourû_»move ( io_id ); 2061 `g_obex_uÄef ( obex ); 2063 `g_as£¹_no_”rÜ ( d . ”r ); 2064 } } 2066  $cÚn_com¶‘e_put_»q ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 2067 gpoš‹r u£r_d©a ) 2069  ‹¡_d©a * d = u£r_d©a ; 2071 ià( ”r !ð NULL ) { 2072 d -> ”r = `g_”rÜ_cÝy (err); 2073 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 2076 `g_obex_put_»q ( obex , ´ovide_d©a , Œªsãr_com¶‘e , d , &d-> ”r , 2077 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 2078 G_OBEX_HDR_NAME , "file.txt", 2079 G_OBEX_HDR_INVALID ); 2080 } } 2082  $‹¡_cÚn_put_»q () 2084 GIOChªÃl * io ; 2085 GIOCÚd™iÚ cÚd ; 2086 gušt io_id , tim”_id ; 2087 GObex * obex ; 2088  ‹¡_d©a d = { 0, NULL , { 2089 { cÚn_»q , (conn_req) }, 2090 { cÚn_put_»q_fœ¡ , (conn_put_req_first) }, 2091 { put_»q_Ï¡ , (put_req_last) }}, { 2092 { cÚn_r¥ , (conn_rsp) } , 2093 { put_r¥_fœ¡ , (put_rsp_first) }, 2094 { put_r¥_Ï¡ , (put_rsp_last) } } }; 2096 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 2097 d . obex = obex; 2099 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 2100 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 2102 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 2104 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 2106 `g_obex_cÚÃù ( obex , cÚn_com¶‘e_put_»q , & d , &d. ”r , 2107 G_OBEX_HDR_INVALID ); 2108 `g_as£¹_no_”rÜ ( d . ”r ); 2110 `g_maš_loÝ_run ( d . mašloÝ ); 2112 `g_as£¹_cmpušt ( d . couÁ , ==, 3); 2114 `g_maš_loÝ_uÄef ( d . mašloÝ ); 2116 `g_sourû_»move ( tim”_id ); 2117 `g_io_chªÃl_uÄef ( io ); 2118 `g_sourû_»move ( io_id ); 2119 `g_obex_uÄef ( obex ); 2121 `g_as£¹_no_”rÜ ( d . ”r ); 2122 } } 2124  $‹¡_cÚn_put_r¥ () 2126 GIOChªÃl * io ; 2127 GIOCÚd™iÚ cÚd ; 2128 gušt io_id , tim”_id ; 2129 GObex * obex ; 2130  ‹¡_d©a d = { 0, NULL , { 2131 { cÚn_r¥ , (conn_rsp) }, 2132 { put_r¥_fœ¡ , (put_rsp_first) }, 2133 { put_r¥_Ï¡ , (put_rsp_last) } }, { 2134 { cÚn_put_»q_fœ¡ , (conn_put_req_first) }, 2135 { put_»q_Ï¡ , (put_req_last) }, 2136 { NULL , 0 } } }; 2138 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 2139 d . obex = obex; 2141 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 2142 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 2144 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 2146 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 2148 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_CONNECT , 2149 hªdË_cÚn_r¥ , & d ); 2151 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_PUT , 2152 hªdË_put , & d ); 2154 `g_io_chªÃl_wr™e_ch¬s ( io , (*è cÚn_»q , (conn_req), 2155 NULL , & d . ”r ); 2156 `g_as£¹_no_”rÜ ( d . ”r ); 2158 `g_maš_loÝ_run ( d . mašloÝ ); 2160 `g_as£¹_cmpušt ( d . couÁ , ==, 2); 2162 `g_maš_loÝ_uÄef ( d . mašloÝ ); 2164 `g_sourû_»move ( tim”_id ); 2165 `g_io_chªÃl_uÄef ( io ); 2166 `g_sourû_»move ( io_id ); 2167 `g_obex_uÄef ( obex ); 2169 `g_as£¹_no_”rÜ ( d . ”r ); 2170 } } 2172  $‹¡_cÚn_g‘_wrg_r¥ () 2174 GIOChªÃl * io ; 2175 GIOCÚd™iÚ cÚd ; 2176 gušt io_id , tim”_id ; 2177 GObex * obex ; 2178  ‹¡_d©a d = { 0, NULL , { 2179 { cÚn_r¥ , (conn_rsp) }, 2180 { uÇvažabË_r¥ , (unavailable_rsp) } }, { 2181 { cÚn_g‘_»q_wrg , (conn_get_req_wrg) }, 2182 { NULL , -1 } } }; 2184 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 2185 d . obex = obex; 2187 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 2188 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 2190 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 2192 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 2194 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_CONNECT , 2195 hªdË_cÚn_r¥ , & d ); 2197 `g_io_chªÃl_wr™e_ch¬s ( io , (*è cÚn_»q , (conn_req), 2198 NULL , & d . ”r ); 2199 `g_as£¹_no_”rÜ ( d . ”r ); 2201 `g_maš_loÝ_run ( d . mašloÝ ); 2203 `g_as£¹_cmpušt ( d . couÁ , ==, 2); 2205 `g_maš_loÝ_uÄef ( d . mašloÝ ); 2207 `g_sourû_»move ( tim”_id ); 2208 `g_io_chªÃl_uÄef ( io ); 2209 ià(! d . io_com¶‘ed ) 2210 `g_sourû_»move ( io_id ); 2211 `g_obex_uÄef ( obex ); 2213 `g_as£¹_no_”rÜ ( d . ”r ); 2214 } } 2216  $cÚn_com¶‘e_put_»q_£q ( GObex * obex , GE¼Ü * ”r , 2217 GObexPack‘ * r¥ , gpoš‹r u£r_d©a ) 2219  ‹¡_d©a * d = u£r_d©a ; 2221 ià( ”r !ð NULL ) { 2222 d -> ”r = `g_”rÜ_cÝy (err); 2223 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 2226 `g_obex_put_»q ( obex , ´ovide_£q , Œªsãr_com¶‘e , d , &d-> ”r , 2227 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 2228 G_OBEX_HDR_NAME , "random.bin", 2229 G_OBEX_HDR_INVALID ); 2230 } } 2232  $‹¡_cÚn_put_»q_£q () 2234 GIOChªÃl * io ; 2235 GIOCÚd™iÚ cÚd ; 2236 gušt io_id , tim”_id ; 2237 GObex * obex ; 2238  ‹¡_d©a d = { 0, NULL , { 2239 { cÚn_»q , (conn_req) } , 2240 { NULL , 0 }, 2241 { NULL , 0 }, 2242 { put_»q_Ï¡ , (put_req_last) } }, { 2243 { cÚn_r¥ , (conn_rsp) } , 2244 { put_r¥_fœ¡ , (put_rsp_first) }, 2245 { put_r¥_fœ¡ , (put_rsp_first) }, 2246 { put_r¥_Ï¡ , (put_rsp_last) } } }; 2248 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 2249 d . obex = obex; 2251 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 2252 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 2254 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 2256 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 2258 `g_obex_cÚÃù ( obex , cÚn_com¶‘e_put_»q_£q , & d , &d. ”r , 2259 G_OBEX_HDR_INVALID ); 2260 `g_as£¹_no_”rÜ ( d . ”r ); 2262 `g_maš_loÝ_run ( d . mašloÝ ); 2264 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS ); 2266 `g_maš_loÝ_uÄef ( d . mašloÝ ); 2268 `g_sourû_»move ( tim”_id ); 2269 `g_io_chªÃl_uÄef ( io ); 2270 `g_sourû_»move ( io_id ); 2271 `g_obex_uÄef ( obex ); 2273 `g_as£¹_no_”rÜ ( d . ”r ); 2274 } } 2276  $cÚn_com¶‘e_put_»q_£q_¤m ( GObex * obex , GE¼Ü * ”r , 2277 GObexPack‘ * r¥ , gpoš‹r u£r_d©a ) 2279  ‹¡_d©a * d = u£r_d©a ; 2281 ià( ”r !ð NULL ) { 2282 d -> ”r = `g_”rÜ_cÝy (err); 2283 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 2286 `g_obex_put_»q ( obex , ´ovide_£q , Œªsãr_com¶‘e , d , &d-> ”r , 2287 G_OBEX_HDR_TYPE , hdr_ty³ , (hdr_type), 2288 G_OBEX_HDR_NAME , "random.bin", 2289 G_OBEX_HDR_INVALID ); 2290 } } 2292  $‹¡_cÚn_put_»q_£q_¤m () 2294 GIOChªÃl * io ; 2295 GIOCÚd™iÚ cÚd ; 2296 gušt io_id , tim”_id ; 2297 GObex * obex ; 2298  ‹¡_d©a d = { 0, NULL , { 2299 { cÚn_»q_¤m , (conn_req_srm) } , 2300 { NULL , 0 }, 2301 { NULL , 0 }, 2302 { put_»q_Ï¡ , (put_req_last) } }, { 2303 { cÚn_r¥_¤m , (conn_rsp_srm) } , 2304 { NULL , 0 }, 2305 { NULL , 0 }, 2306 { put_r¥_Ï¡ , (put_rsp_last) } } }; 2308 `ü—‹_’dpošts (& obex , & io , SOCK_SEQPACKET ); 2309 d . obex = obex; 2311 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 2312 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 2314 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 2316 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 2318 `g_obex_cÚÃù ( obex , cÚn_com¶‘e_put_»q_£q_¤m , & d , &d. ”r , 2319 G_OBEX_HDR_SRM , G_OBEX_SRM_INDICATE , 2320 G_OBEX_HDR_INVALID ); 2321 `g_as£¹_no_”rÜ ( d . ”r ); 2323 `g_maš_loÝ_run ( d . mašloÝ ); 2325 `g_as£¹_cmpušt ( d . couÁ , ==, RANDOM_PACKETS ); 2327 `g_maš_loÝ_uÄef ( d . mašloÝ ); 2329 `g_sourû_»move ( tim”_id ); 2330 `g_io_chªÃl_uÄef ( io ); 2331 `g_sourû_»move ( io_id ); 2332 `g_obex_uÄef ( obex ); 2334 `g_as£¹_no_”rÜ ( d . ”r ); 2335 } } 2337  $maš ( ¬gc , * ¬gv []) 2339 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 2341 `g_‹¡_add_func ("/gobex/‹¡_cÚn_»q", ‹¡_cÚn_»q ); 2342 `g_‹¡_add_func ("/gobex/‹¡_cÚn_r¥", ‹¡_cÚn_r¥ ); 2344 `g_‹¡_add_func ("/gobex/‹¡_put_»q", ‹¡_put_»q ); 2345 `g_‹¡_add_func ("/gobex/‹¡_put_r¥", ‹¡_put_r¥ ); 2347 `g_‹¡_add_func ("/gobex/‹¡_g‘_»q", ‹¡_g‘_»q ); 2348 `g_‹¡_add_func ("/gobex/‹¡_g‘_r¥", ‹¡_g‘_r¥ ); 2350 `g_‹¡_add_func ("/gobex/‹¡_g‘_»q_­p", ‹¡_g‘_»q_­p ); 2351 `g_‹¡_add_func ("/gobex/‹¡_g‘_r¥_­p", ‹¡_g‘_r¥_­p ); 2353 `g_‹¡_add_func ("/gobex/‹¡_put_»q_d–ay", ‹¡_put_»q_d–ay ); 2354 `g_‹¡_add_func ("/gobex/‹¡_put_r¥_d–ay", ‹¡_put_r¥_d–ay ); 2356 `g_‹¡_add_func ("/gobex/‹¡_g‘_»q_d–ay", ‹¡_g‘_»q_d–ay ); 2357 `g_‹¡_add_func ("/gobex/‹¡_g‘_r¥_d–ay", ‹¡_g‘_r¥_d–ay ); 2359 `g_‹¡_add_func ("/gobex/‹¡_put_»q_—gaš", ‹¡_put_»q_—gaš ); 2360 `g_‹¡_add_func ("/gobex/‹¡_g‘_»q_—gaš", ‹¡_g‘_r¥_—gaš ); 2362 `g_‹¡_add_func ("/gobex/‹¡_¡»am_put_»q", ‹¡_¡»am_put_»q ); 2363 `g_‹¡_add_func ("/gobex/‹¡_¡»am_put_r¥", ‹¡_¡»am_put_r¥ ); 2365 `g_‹¡_add_func ("/gobex/test_stream_put_req_abort", 2366 ‹¡_¡»am_put_»q_abÜt ); 2367 `g_‹¡_add_func ("/gobex/test_stream_put_rsp_abort", 2368 ‹¡_¡»am_put_r¥_abÜt ); 2370 `g_‹¡_add_func ("/gobex/‹¡_¡»am_g‘_»q", ‹¡_¡»am_g‘_»q ); 2371 `g_‹¡_add_func ("/gobex/‹¡_¡»am_g‘_r¥", ‹¡_¡»am_g‘_r¥ ); 2373 `g_‹¡_add_func ("/gobex/‹¡_cÚn_g‘_»q", ‹¡_cÚn_g‘_»q ); 2374 `g_‹¡_add_func ("/gobex/‹¡_cÚn_g‘_r¥", ‹¡_cÚn_g‘_r¥ ); 2376 `g_‹¡_add_func ("/gobex/‹¡_cÚn_put_»q", ‹¡_cÚn_put_»q ); 2377 `g_‹¡_add_func ("/gobex/‹¡_cÚn_put_r¥", ‹¡_cÚn_put_r¥ ); 2379 `g_‹¡_add_func ("/gobex/‹¡_cÚn_g‘_wrg_r¥", ‹¡_cÚn_g‘_wrg_r¥ ); 2381 `g_‹¡_add_func ("/gobex/test_conn_put_req_seq", 2382 ‹¡_cÚn_put_»q_£q ); 2384 `g_‹¡_add_func ("/gobex/‹¡_·ck‘_put_»q", ‹¡_·ck‘_put_»q ); 2385 `g_‹¡_add_func ("/gobex/test_packet_put_req_wait", 2386 ‹¡_·ck‘_put_»q_wa™ ); 2387 `g_‹¡_add_func ("/gobex/test_packet_put_req_suspend_resume", 2388 ‹¡_·ck‘_put_»q_su¥’d_»sume ); 2390 `g_‹¡_add_func ("/gobex/‹¡_·ck‘_put_r¥", ‹¡_·ck‘_put_r¥ ); 2391 `g_‹¡_add_func ("/gobex/test_packet_put_rsp_wait", 2392 ‹¡_·ck‘_put_r¥_wa™ ); 2394 `g_‹¡_add_func ("/gobex/‹¡_·ck‘_g‘_r¥", ‹¡_·ck‘_g‘_r¥ ); 2395 `g_‹¡_add_func ("/gobex/test_packet_get_rsp_wait", 2396 ‹¡_·ck‘_g‘_r¥_wa™ ); 2398 `g_‹¡_add_func ("/gobex/‹¡_·ck‘_g‘_»q", ‹¡_·ck‘_g‘_»q ); 2399 `g_‹¡_add_func ("/gobex/test_packet_get_req_wait", 2400 ‹¡_·ck‘_g‘_»q_wa™ ); 2401 `g_‹¡_add_func ("/gobex/test_packet_get_req_suspend_resume", 2402 ‹¡_·ck‘_g‘_»q_su¥’d_»sume ); 2404 `g_‹¡_add_func ("/gobex/test_packet_get_req_wait_next", 2405 ‹¡_·ck‘_g‘_»q_wa™_Ãxt ); 2407 `g_‹¡_add_func ("/gobex/test_conn_put_req_seq_srm", 2408 ‹¡_cÚn_put_»q_£q_¤m ); 2410  `g_‹¡_run (); 2411 } } @unit/test-gobex.c 23 #ifdeà HAVE_CONFIG_H 24  ~"cÚfig.h " 27  ~<¡dlib.h > 28  ~ 29  ~ 30  ~<”ºo.h > 31  ~ 32  ~<¡ršg.h > 33  ~<¡dšt.h > 35  ~ 37  ~"utž.h " 39  #FINAL_BIT 0x80 ) 41  GMašLoÝ * gmašloÝ = NULL ; 43  ušt8_t gpkt_cÚÃù_»q [] = { G_OBEX_OP_CONNECT | FINAL_BIT , 45  ušt8_t gpkt_cÚÃù_r¥ [] = { 0x20 | FINAL_BIT , 0x00, 0x07, 48  ušt8_t gpkt_discÚÃù_»q [] = { G_OBEX_OP_DISCONNECT | FINAL_BIT , 50  ušt8_t gpkt_discÚÃù_r¥ [] = { 0x20 | FINAL_BIT , 0x00, 0x03 }; 52  ušt8_t gpkt_uÇuth_r¥ [] = { 0x41 | FINAL_BIT , 0x00, 0x1c, 58  ušt8_t gpkt_auth_»q [] = { G_OBEX_OP_CONNECT | FINAL_BIT , 0x00, 0x1c, 64  ušt8_t gpkt_auth_r¥ [] = { 0x20 | FINAL_BIT , 0x00, 0x07, 67  ušt8_t gpkt_£©h_»q [] = { G_OBEX_OP_SETPATH | FINAL_BIT , 0x00, 0x10, 69 G_OBEX_HDR_NAME , 0x00, 0x0b, 71  ušt8_t gpkt_£©h_up_»q [] = { G_OBEX_OP_SETPATH | FINAL_BIT , 73  ušt8_t gpkt_£©h_up_down_»q [] = { G_OBEX_OP_SETPATH | FINAL_BIT , 75 G_OBEX_HDR_NAME , 0x00, 0x0b, 77  ušt8_t gpkt_sucûss_r¥ [] = { 0x20 | FINAL_BIT , 0x00, 0x03 }; 79  ušt8_t gpkt_mkdœ_»q [] = { G_OBEX_OP_SETPATH | FINAL_BIT , 0x00, 0x10, 81 G_OBEX_HDR_NAME , 0x00, 0x0b, 84  ušt8_t gpkt_d–‘e_»q [] = { G_OBEX_OP_PUT | FINAL_BIT , 0x00, 0x16, 85 G_OBEX_HDR_NAME , 0x00, 0x13, 88  ušt8_t gpkt_cÝy_»q [] = { G_OBEX_OP_ACTION | FINAL_BIT , 0x00, 0x1b, 89 G_OBEX_HDR_ACTION , 0x00, 90 G_OBEX_HDR_NAME , 0x00, 0x0b, 92 G_OBEX_HDR_DESTNAME , 0x00, 0x0b, 94  ušt8_t gpkt_move_»q [] = { G_OBEX_OP_ACTION | FINAL_BIT , 0x00, 0x1b, 95 G_OBEX_HDR_ACTION , 0x01, 96 G_OBEX_HDR_NAME , 0x00, 0x0b, 98 G_OBEX_HDR_DESTNAME , 0x00, 0x0b, 101  ušt8_t gpkt_nv®_cÚÃù_r¥ [] = { 0x10 | FINAL_BIT , 0x00, 0x05, 103  ušt8_t gpkt_abÜt_r¥ [] = { 0x90, 0x00, 0x03 }; 104  ušt8_t gpkt_nv®_shÜt_r¥ [] = { 0x10 | FINAL_BIT , 0x12 }; 105  ušt8_t gpkt_put_body [] = { G_OBEX_OP_PUT , 0x00, 0x0a, 106 G_OBEX_HDR_BODY , 0x00, 0x07, 109  gboÞ—n $timeout ( gpoš‹r u£r_d©a ) 111 GE¼Ü ** ”r = u£r_d©a ; 113 ià(! `g_maš_loÝ_is_rušg ( mašloÝ )) 114  FALSE ; 116 `g_£t_”rÜ ( ”r , TEST_ERROR , TEST_ERROR_TIMEOUT , "Timed out"); 118 `g_maš_loÝ_qu™ ( mašloÝ ); 120  FALSE ; 121 } } 123  $cÚÃù_r¥ ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 124 gpoš‹r u£r_d©a ) 126 gušt8 r¥_code ; 127 gboÞ—n fš® ; 128 GE¼Ü ** ‹¡_”r = u£r_d©a ; 130 ià( ”r !ð NULL ) { 131 `g_as£¹ (* ‹¡_”r =ð NULL ); 132 * ‹¡_”r = `g_”rÜ_cÝy ( ”r ); 133  dÚe ; 136 r¥_code = `g_obex_·ck‘_g‘_Ý”©iÚ ( r¥ , & fš® ); 137 ià( r¥_code != 0x20) { 138 `g_£t_”rÜ ( ‹¡_”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 139 "UÃx³ùed„e¥Ú£ 0x%02x", r¥_code ); 140  dÚe ; 143 ià(! fš® ) { 144 `g_£t_”rÜ ( ‹¡_”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 146  dÚe ; 149 dÚe : 150 `g_maš_loÝ_qu™ ( mašloÝ ); 151 } } 153  $nv®_cÚÃù_r¥ ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 154 gpoš‹r u£r_d©a ) 156 GE¼Ü ** ‹¡_”r = u£r_d©a ; 158 ià(! `g_”rÜ_m©ches ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_PARSE_ERROR )) 159 `g_£t_”rÜ ( ‹¡_”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 162 `g_maš_loÝ_qu™ ( mašloÝ ); 163 } } 165  $timeout_r¥ ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 166 gpoš‹r u£r_d©a ) 168 GE¼Ü ** ‹¡_”r = u£r_d©a ; 170 ià(! `g_”rÜ_m©ches ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_TIMEOUT )) 171 `g_£t_”rÜ ( ‹¡_”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 174 `g_maš_loÝ_qu™ ( mašloÝ ); 175 } } 177  gboÞ—n $»cv_ªd_£nd ( GIOChªÃl * io , * d©a , gsize Ën , 178 GE¼Ü ** ”r ) 180 gsize by‹s_wr™‹n , rby‹s ; 181  buf [255]; 182 GIOStus ¡©us ; 184 ¡©us = `g_io_chªÃl_»ad_ch¬s ( io , buf , (buf), & rby‹s , NULL ); 185 ià( ¡©us !ð G_IO_STATUS_NORMAL ) { 186 `g_£t_”rÜ ( ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 187 "»ad fažed w™h stu %d", ¡©us ); 188  FALSE ; 191 ià( d©a =ð NULL ) 192  TRUE ; 194 `g_io_chªÃl_wr™e_ch¬s ( io , d©a , Ën , & by‹s_wr™‹n , NULL ); 195 ià( by‹s_wr™‹n !ð Ën ) { 196 `g_£t_”rÜ ( ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 198  FALSE ; 201  TRUE ; 202 } } 204  gboÞ—n $£nd_cÚÃù_r¥ ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 205 gpoš‹r u£r_d©a ) 207 GE¼Ü ** ”r = u£r_d©a ; 209 ià(! `»cv_ªd_£nd ( io , pkt_cÚÃù_r¥ , Õkt_cÚÃù_r¥), ”r )) 210 `g_maš_loÝ_qu™ ( mašloÝ ); 212  FALSE ; 213 } } 215  gboÞ—n $£nd_nv®_cÚÃù_r¥ ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 216 gpoš‹r u£r_d©a ) 218 GE¼Ü ** ”r = u£r_d©a ; 220 ià(! `»cv_ªd_£nd ( io , pkt_nv®_cÚÃù_r¥ , 221 ( pkt_nv®_cÚÃù_r¥ ), ”r )) 222 `g_maš_loÝ_qu™ ( mašloÝ ); 224  FALSE ; 225 } } 227  gboÞ—n $£nd_nv®_shÜt_r¥ ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 228 gpoš‹r u£r_d©a ) 230 GE¼Ü ** ”r = u£r_d©a ; 232 ià(! `»cv_ªd_£nd ( io , pkt_nv®_shÜt_r¥ , 233 ( pkt_nv®_shÜt_r¥ ), ”r )) 234 `g_maš_loÝ_qu™ ( mašloÝ ); 236  FALSE ; 237 } } 239  gboÞ—n $£nd_nÙhšg ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 240 gpoš‹r u£r_d©a ) 242 GE¼Ü ** ”r = u£r_d©a ; 244 ià(! `»cv_ªd_£nd ( io , NULL , 0, ”r )) 245 `g_maš_loÝ_qu™ ( mašloÝ ); 247  FALSE ; 248 } } 250  $£nd_»q ( GObexPack‘ * »q , GObexRe¥Ú£Func r¥_func , 251 GIOFunc £nd_r¥_func ,  »q_timeout , 252  Œª¥Üt_ty³ ) 254 GE¼Ü * g”r = NULL ; 255 GIOChªÃl * io ; 256 GIOCÚd™iÚ cÚd ; 257 gušt tim”_id , ‹¡_time ; 258 GObex * obex ; 260 `ü—‹_’dpošts (& obex , & io , Œª¥Üt_ty³ ); 262 `g_obex_£nd_»q ( obex , »q , »q_timeout , r¥_func , & g”r , &gerr); 263 `g_as£¹_no_”rÜ ( g”r ); 265 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 266 `g_io_add_w©ch ( io , cÚd , £nd_r¥_func , & g”r ); 268 mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 270 ià( »q_timeout > 0) 271 ‹¡_time = »q_timeout + 1; 273 ‹¡_time = 1; 275 tim”_id = `g_timeout_add_£cÚds ( ‹¡_time , timeout , & g”r ); 277 `g_maš_loÝ_run ( mašloÝ ); 279 `g_maš_loÝ_uÄef ( mašloÝ ); 280 mašloÝ = NULL ; 282 `g_sourû_»move ( tim”_id ); 283 `g_io_chªÃl_uÄef ( io ); 284 `g_obex_uÄef ( obex ); 286 `g_as£¹_no_”rÜ ( g”r ); 287 } } 289  $£nd_cÚÃù ( GObexRe¥Ú£Func r¥_func , GIOFunc £nd_r¥_func , 290  »q_timeout ,  Œª¥Üt_ty³ ) 292 GObexPack‘ * »q ; 293 gušt8 cÚÃù_d©a [] = { 0x10, 0x00, 0x10, 0x00 }; 295 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_CONNECT , TRUE , G_OBEX_HDR_INVALID ); 296 `g_as£¹ ( »q !ð NULL ); 298 `g_obex_·ck‘_£t_d©a ( »q , cÚÃù_d©a , (connect_data), 299 G_OBEX_DATA_REF ); 301 `£nd_»q ( »q , r¥_func , £nd_r¥_func , »q_timeout , Œª¥Üt_ty³ ); 302 } } 304  $‹¡_£nd_cÚÃù_»q_¡»am () 306 `£nd_cÚÃù ( cÚÃù_r¥ , £nd_cÚÃù_r¥ , -1, SOCK_STREAM ); 307 } } 309  $‹¡_£nd_cÚÃù_»q_pkt () 311 `£nd_cÚÃù ( cÚÃù_r¥ , £nd_cÚÃù_r¥ , -1, SOCK_SEQPACKET ); 312 } } 314  $‹¡_£nd_nv®_cÚÃù_»q_¡»am () 316 `£nd_cÚÃù ( nv®_cÚÃù_r¥ , £nd_nv®_cÚÃù_r¥ , -1, SOCK_STREAM ); 317 } } 319  $‹¡_£nd_nv®_cÚÃù_»q_pkt () 321 `£nd_cÚÃù ( nv®_cÚÃù_r¥ , £nd_nv®_cÚÃù_r¥ , -1, 322 SOCK_SEQPACKET ); 323 } } 325  $‹¡_£nd_nv®_cÚÃù_»q_shÜt_pkt () 327 `£nd_cÚÃù ( nv®_cÚÃù_r¥ , £nd_nv®_shÜt_r¥ , -1, 328 SOCK_SEQPACKET ); 329 } } 331  $‹¡_£nd_cÚÃù_»q_timeout_¡»am () 333 `£nd_cÚÃù ( timeout_r¥ , £nd_nÙhšg , 0, SOCK_STREAM ); 334 } } 336  $‹¡_£nd_cÚÃù_»q_timeout_pkt () 338 `£nd_cÚÃù ( timeout_r¥ , £nd_nÙhšg , 0, SOCK_SEQPACKET ); 339 } } 341  s»q_šfo { 342 GObex * mobex ; 343 gušt mid ; 344 GE¼Ü * m”r ; 347  $»q_dÚe ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 348 gpoš‹r u£r_d©a ) 350  »q_šfo * r = u£r_d©a ; 352 ià(! `g_”rÜ_m©ches ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_CANCELLED )) 353 `g_£t_”rÜ (& r -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 356 `g_maš_loÝ_qu™ ( mašloÝ ); 357 } } 359  $‹¡_ÿnûl_»q_immedŸ‹ () 361 GObexPack‘ * »q ; 362  »q_šfo r ; 363 gboÞ—n »t ; 365 `ü—‹_’dpošts (& r . obex , NULL , SOCK_STREAM ); 367 r . ”r = NULL ; 369 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_PUT , TRUE , G_OBEX_HDR_INVALID ); 370 r . id = `g_obex_£nd_»q Ô. obex , »q , -1, »q_dÚe , &r, &r. ”r ); 371 `g_as£¹_no_”rÜ ( r . ”r ); 372 `g_as£¹ ( r . id != 0); 374 »t = `g_obex_ÿnûl_»q ( r . obex ,„. id , FALSE ); 375 `g_as£¹ ( »t =ð TRUE ); 377 mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 379 `g_maš_loÝ_run ( mašloÝ ); 381 `g_as£¹_no_”rÜ ( r . ”r ); 383 `g_obex_uÄef ( r . obex ); 384 `g_maš_loÝ_uÄef ( mašloÝ ); 385 } } 387  gboÞ—n $ÿnûl_£rv” ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , 388 gpoš‹r u£r_d©a ) 390  »q_šfo * r = u£r_d©a ; 391 GIOStus ¡©us ; 392 gsize by‹s_wr™‹n , rby‹s ; 393  buf [255]; 395 ¡©us = `g_io_chªÃl_»ad_ch¬s ( io , buf , (buf), & rby‹s , NULL ); 396 ià( ¡©us !ð G_IO_STATUS_NORMAL ) { 397 `g_£t_”rÜ (& r -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 398 "R—dšg d©¨çžed w™h stu %d", ¡©us ); 399  çžed ; 402 ià( rby‹s < 3) { 403 `g_£t_”rÜ (& r -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 405  çžed ; 408 ià(( ušt8_t è buf [0] =ð( G_OBEX_OP_PUT | FINAL_BIT )) { 409 ià(! `g_obex_ÿnûl_»q ( r -> obex ,„-> id , FALSE )) { 410 `g_£t_”rÜ (& r -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 412  çžed ; 414  TRUE ; 417 ià(( ušt8_t è buf [0] !ð( G_OBEX_OP_ABORT | FINAL_BIT )) { 418 `g_£t_”rÜ (& r -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 420  çžed ; 423 `g_io_chªÃl_wr™e_ch¬s ( io , (*è pkt_abÜt_r¥ , 424 ( pkt_abÜt_r¥ ), & by‹s_wr™‹n , NULL ); 425 ià( by‹s_wr™‹n !ð( pkt_abÜt_r¥ )) { 426 `g_£t_”rÜ (& r -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 428  çžed ; 431  TRUE ; 433 çžed : 434 `g_maš_loÝ_qu™ ( mašloÝ ); 435  FALSE ; 436 } } 438  $‹¡_ÿnûl_»q_d–ay ( Œª¥Üt_ty³ ) 440 GIOChªÃl * io ; 441 gušt io_id , tim”_id ; 442  »q_šfo r ; 443 GObexPack‘ * »q ; 444 GIOCÚd™iÚ cÚd ; 446 `ü—‹_’dpošts (& r . obex , & io , Œª¥Üt_ty³ ); 448 r . ”r = NULL ; 450 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_PUT , TRUE , G_OBEX_HDR_INVALID ); 451 r . id = `g_obex_£nd_»q Ô. obex , »q , -1, »q_dÚe , &r, &r. ”r ); 452 `g_as£¹_no_”rÜ ( r . ”r ); 453 `g_as£¹ ( r . id != 0); 455 mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 457 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 458 io_id = `g_io_add_w©ch ( io , cÚd , ÿnûl_£rv” , & r ); 460 tim”_id = `g_timeout_add_£cÚds (2, timeout , & r . ”r ); 462 `g_maš_loÝ_run ( mašloÝ ); 464 `g_as£¹_no_”rÜ ( r . ”r ); 466 `g_sourû_»move ( tim”_id ); 467 `g_io_chªÃl_uÄef ( io ); 468 `g_sourû_»move ( io_id ); 469 `g_obex_uÄef ( r . obex ); 470 `g_maš_loÝ_uÄef ( mašloÝ ); 471 } } 473  $‹¡_ÿnûl_»q_d–ay_¡»am () 475 `‹¡_ÿnûl_»q_d–ay ( SOCK_STREAM ); 476 } } 478  $‹¡_ÿnûl_»q_d–ay_pkt () 480 `‹¡_ÿnûl_»q_d–ay ( SOCK_SEQPACKET ); 481 } } 483  srcv_buf_šfo { 484 GE¼Ü * m”r ; 485 cÚ¡ gušt8 * mbuf ; 486 gsize mËn ; 487 gboÞ—n mcom¶‘ed ; 490  gboÞ—n $rcv_d©a ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , gpoš‹r u£r_d©a ) 492  rcv_buf_šfo * r = u£r_d©a ; 493 GIOStus ¡©us ; 494 gsize rby‹s ; 495  buf [255]; 497 ià( cÚd & ( G_IO_HUP | G_IO_ERR | G_IO_NVAL )) { 498 `g_£t_”rÜ (& r -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 499 "UÃx³ùed cÚd™iÚ %d oÀsock‘", cÚd ); 500  dÚe ; 503 ¡©us = `g_io_chªÃl_»ad_ch¬s ( io , buf , (buf), & rby‹s , NULL ); 504 ià( ¡©us !ð G_IO_STATUS_NORMAL ) { 505 `g_£t_”rÜ (& r -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 506 "R—dšg d©¨çžed w™h stu %d", ¡©us ); 507  dÚe ; 510 ià( rby‹s !ð r -> Ën ) { 511 `g_£t_”rÜ (& r -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 513 rby‹s , ( pkt_cÚÃù_»q )); 514 `dump_bufs ( r -> buf ,„-> Ën , buf, rby‹s ); 515  dÚe ; 518 ià( `memcmp ( buf , r ->buf, rby‹s ) != 0) { 519 `g_£t_”rÜ (& r -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 521 `dump_bufs ( r -> buf ,„-> Ën , buf, rby‹s ); 522  dÚe ; 525 dÚe : 526 `g_maš_loÝ_qu™ ( mašloÝ ); 527 r -> com¶‘ed = TRUE ; 528  FALSE ; 529 } } 531  $‹¡_£nd_cÚÃù ( Œª¥Üt_ty³ ) 533 gušt8 cÚÃù_d©a [] = { 0x10, 0x00, 0x10, 0x00 }; 534  rcv_buf_šfo r ; 535 GIOChªÃl * io ; 536 GIOCÚd™iÚ cÚd ; 537 GObexPack‘ * »q ; 538 gušt io_id , tim”_id ; 539 GObex * obex ; 541 `ü—‹_’dpošts (& obex , & io , Œª¥Üt_ty³ ); 543 `mem£t (& r , 0, (r)); 544 r . buf = pkt_cÚÃù_»q ; 545 r . Ën = ( pkt_cÚÃù_»q ); 547 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_CONNECT , TRUE , G_OBEX_HDR_INVALID ); 548 `g_as£¹ ( »q !ð NULL ); 550 `g_obex_·ck‘_£t_d©a ( »q , cÚÃù_d©a , (connect_data), 551 G_OBEX_DATA_REF ); 552 `g_obex_£nd ( obex , »q , & r . ”r ); 553 `g_as£¹_no_”rÜ ( r . ”r ); 555 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 556 io_id = `g_io_add_w©ch ( io , cÚd , rcv_d©a , & r ); 558 mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 560 tim”_id = `g_timeout_add_£cÚds (1, timeout , & r . ”r ); 562 `g_maš_loÝ_run ( mašloÝ ); 564 `g_maš_loÝ_uÄef ( mašloÝ ); 565 mašloÝ = NULL ; 567 `g_sourû_»move ( tim”_id ); 568 `g_io_chªÃl_uÄef ( io ); 569 ià(! r . com¶‘ed ) 570 `g_sourû_»move ( io_id ); 571 `g_obex_uÄef ( obex ); 573 `g_as£¹_no_”rÜ ( r . ”r ); 574 } } 576  $‹¡_£nd_cÚÃù_¡»am () 578 `‹¡_£nd_cÚÃù ( SOCK_STREAM ); 579 } } 581  $‹¡_£nd_cÚÃù_pkt () 583 `‹¡_£nd_cÚÃù ( SOCK_SEQPACKET ); 584 } } 586  $uÃx³ùed_discÚn ( GObex * obex , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 588 GE¼Ü ** ‹¡_”r = u£r_d©a ; 590 ià(! `g_”rÜ_m©ches ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_PARSE_ERROR )) 591 `g_£t_”rÜ ( ‹¡_”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 594 `g_maš_loÝ_qu™ ( mašloÝ ); 595 } } 597  $‹¡_»cv_uÃx³ùed () 599 GE¼Ü * ”r = NULL ; 600 GObexPack‘ * »q ; 601 GIOChªÃl * io ; 602 gušt tim”_id ; 603 GObex * obex ; 604 gušt8 buf [255]; 605 gssize Ën ; 607 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 609 `g_obex_£t_discÚÃù_funùiÚ ( obex , uÃx³ùed_discÚn , & ”r ); 611 »q = `g_obex_·ck‘_Ãw ( G_OBEX_RSP_CONTINUE , TRUE , G_OBEX_HDR_INVALID ); 612 Ën = `g_obex_·ck‘_’code ( »q , buf , (buf)); 613 `g_obex_·ck‘_ä“ ( »q ); 614 `g_as£¹_cmpšt ( Ën , >=, 0); 616 `g_io_chªÃl_wr™e_ch¬s ( io , (*è buf , Ën , NULL , & ”r ); 617 `g_as£¹_no_”rÜ ( ”r ); 619 mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 621 tim”_id = `g_timeout_add_£cÚds (1, timeout , & ”r ); 623 `g_maš_loÝ_run ( mašloÝ ); 625 `g_maš_loÝ_uÄef ( mašloÝ ); 626 mašloÝ = NULL ; 628 `g_sourû_»move ( tim”_id ); 629 `g_io_chªÃl_uÄef ( io ); 630 `g_obex_uÄef ( obex ); 632 `g_as£¹_no_”rÜ ( ”r ); 633 } } 635  gssize $g‘_body_d©a (* buf , gsize Ën , gpoš‹r u£r_d©a ) 637 ušt8_t d©a [] = { 1, 2, 3, 4 }; 639 `memýy ( buf , d©a , (data)); 641  ( d©a ); 642 } } 644  gssize $g‘_body_d©a_çž (* buf , gsize Ën , gpoš‹r u£r_d©a ) 646 `g_maš_loÝ_qu™ ( mašloÝ ); 648 } } 650  $‹¡_£nd_Ú_demªd ( Œª¥Üt_ty³ , GObexD©aProduûr func ) 652  rcv_buf_šfo r ; 653 GIOChªÃl * io ; 654 GIOCÚd™iÚ cÚd ; 655 GObexPack‘ * »q ; 656 gušt io_id , tim”_id ; 657 GObex * obex ; 659 `ü—‹_’dpošts (& obex , & io , Œª¥Üt_ty³ ); 661 `mem£t (& r , 0, (r)); 662 r . buf = pkt_put_body ; 663 r . Ën = ( pkt_put_body ); 665 »q = `g_obex_·ck‘_Ãw ( G_OBEX_OP_PUT , FALSE , G_OBEX_HDR_INVALID ); 666 `g_obex_·ck‘_add_body ( »q , func , & r ); 668 `g_obex_£nd ( obex , »q , & r . ”r ); 669 `g_as£¹_no_”rÜ ( r . ”r ); 671 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 672 io_id = `g_io_add_w©ch ( io , cÚd , rcv_d©a , & r ); 674 mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 676 tim”_id = `g_timeout_add_£cÚds (1, timeout , & r . ”r ); 678 `g_maš_loÝ_run ( mašloÝ ); 680 `g_maš_loÝ_uÄef ( mašloÝ ); 681 mašloÝ = NULL ; 683 `g_sourû_»move ( tim”_id ); 684 `g_io_chªÃl_uÄef ( io ); 685 ià(! r . com¶‘ed ) 686 `g_sourû_»move ( io_id ); 687 `g_obex_uÄef ( obex ); 689 `g_as£¹_no_”rÜ ( r . ”r ); 690 } } 692  $‹¡_£nd_Ú_demªd_¡»am () 694 `‹¡_£nd_Ú_demªd ( SOCK_STREAM , g‘_body_d©a ); 695 } } 697  $‹¡_£nd_Ú_demªd_pkt () 699 `‹¡_£nd_Ú_demªd ( SOCK_SEQPACKET , g‘_body_d©a ); 700 } } 702  $‹¡_£nd_Ú_demªd_çž_¡»am () 704 `‹¡_£nd_Ú_demªd ( SOCK_STREAM , g‘_body_d©a_çž ); 705 } } 707  $‹¡_£nd_Ú_demªd_çž_pkt () 709 `‹¡_£nd_Ú_demªd ( SOCK_SEQPACKET , g‘_body_d©a_çž ); 710 } } 712  $hªdË_cÚÃù_»q ( GObex * obex , GObexPack‘ * »q , 713 gpoš‹r u£r_d©a ) 715 GE¼Ü ** ‹¡_”r = u£r_d©a ; 717 ià( `g_obex_·ck‘_g‘_Ý”©iÚ ( »q , NULL è!ð G_OBEX_OP_CONNECT ) 718 `g_£t_”rÜ ( ‹¡_”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 720 `g_maš_loÝ_qu™ ( mašloÝ ); 722 } } 724  $hªdË_cÚÃù_”r ( GObex * obex , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 726 GE¼Ü ** ‹¡_”r = u£r_d©a ; 728 `g_maš_loÝ_qu™ ( mašloÝ ); 730 ià( ”r !ð NULL ) 731 * ‹¡_”r = `g_”rÜ_cÝy ( ”r ); 733 * ‹¡_”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_UNEXPECTED , 735 } } 737  $»cv_cÚÃù ( Œª¥Üt_ty³ ) 739 GE¼Ü * g”r = NULL ; 740 gušt tim”_id ; 741 GObex * obex ; 742 GIOChªÃl * io ; 743 GIOStus ¡©us ; 744 gsize by‹s_wr™‹n ; 746 `ü—‹_’dpošts (& obex , & io , Œª¥Üt_ty³ ); 748 `g_obex_add_»que¡_funùiÚ ( obex , G_OBEX_OP_CONNECT , 749 hªdË_cÚÃù_»q , & g”r ); 750 `g_obex_£t_discÚÃù_funùiÚ ( obex , hªdË_cÚÃù_”r , & g”r ); 752 ¡©us = `g_io_chªÃl_wr™e_ch¬s ( io , (*è pkt_cÚÃù_»q , 753 ( pkt_cÚÃù_»q ), 754 & by‹s_wr™‹n , NULL ); 755 `g_as£¹_cmpšt ( ¡©us , ==, G_IO_STATUS_NORMAL ); 756 `g_as£¹_cmpušt ( by‹s_wr™‹n , ==, ( pkt_cÚÃù_»q )); 758 mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 760 tim”_id = `g_timeout_add_£cÚds (1, timeout , & g”r ); 762 `g_maš_loÝ_run ( mašloÝ ); 764 `g_sourû_»move ( tim”_id ); 765 `g_obex_uÄef ( obex ); 766 `g_io_chªÃl_uÄef ( io ); 768 `g_maš_loÝ_uÄef ( mašloÝ ); 769 mašloÝ = NULL ; 771 `g_as£¹_no_”rÜ ( g”r ); 772 } } 774  $‹¡_»cv_cÚÃù_¡»am () 776 `»cv_cÚÃù ( SOCK_STREAM ); 777 } } 779  $‹¡_»cv_cÚÃù_pkt () 781 `»cv_cÚÃù ( SOCK_SEQPACKET ); 782 } } 784  $discÚn_ev ( GObex * obex , GE¼Ü * ”r , gpoš‹r u£r_d©a ) 786 GE¼Ü ** ‹¡_”r = u£r_d©a ; 788 ià(! `g_”rÜ_m©ches ( ”r , G_OBEX_ERROR , G_OBEX_ERROR_DISCONNECTED )) 789 `g_£t_”rÜ ( ‹¡_”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 792 `g_maš_loÝ_qu™ ( mašloÝ ); 793 } } 795  $‹¡_discÚÃù () 797 GE¼Ü * g”r = NULL ; 798 gušt tim”_id ; 799 GObex * obex ; 800 GIOChªÃl * io ; 802 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 804 `g_obex_£t_discÚÃù_funùiÚ ( obex , discÚn_ev , & g”r ); 806 tim”_id = `g_timeout_add_£cÚds (1, timeout , & g”r ); 808 mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 810 `g_io_chªÃl_shutdown ( io , FALSE , NULL ); 812 `g_maš_loÝ_run ( mašloÝ ); 814 `g_as£¹_no_”rÜ ( g”r ); 816 `g_sourû_»move ( tim”_id ); 817 `g_io_chªÃl_uÄef ( io ); 818 `g_obex_uÄef ( obex ); 820 `g_maš_loÝ_uÄef ( mašloÝ ); 821 mašloÝ = NULL ; 822 } } 824  $‹¡_»f_uÄef () 826 GObex * obex ; 828 obex = `ü—‹_gobex ( STDIN_FILENO , G_OBEX_TRANSPORT_STREAM , FALSE ); 830 `g_as£¹ ( obex !ð NULL ); 832 obex = `g_obex_»f (obex); 834 `g_obex_uÄef ( obex ); 835 `g_obex_uÄef ( obex ); 836 } } 838  $‹¡_basic () 840 GObex * obex ; 842 obex = `ü—‹_gobex ( STDIN_FILENO , G_OBEX_TRANSPORT_STREAM , FALSE ); 844 `g_as£¹ ( obex !ð NULL ); 846 `g_obex_uÄef ( obex ); 847 } } 849  $‹¡_nuÎ_io () 851 GObex * obex ; 853 obex = `g_obex_Ãw ( NULL , 0, -1, -1); 855 `g_as£¹ ( obex =ð NULL ); 856 } } 858  $»q_com¶‘e ( GObex * obex , GE¼Ü * ”r , GObexPack‘ * r¥ , 859 gpoš‹r u£r_d©a ) 861  ‹¡_d©a * d = u£r_d©a ; 863 ià( ”r !ð NULL ) 864 d -> ”r = `g_”rÜ_cÝy (err); 866 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 867 } } 869  $‹¡_cÚÃù () 871 GIOChªÃl * io ; 872 GIOCÚd™iÚ cÚd ; 873 gušt io_id , tim”_id ; 874 GObex * obex ; 875  ‹¡_d©a d = { 0, NULL , { 876 { pkt_cÚÃù_»q , (pkt_connect_req) } }, { 877 { pkt_cÚÃù_r¥ , (pkt_connect_rsp) } } }; 879 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 881 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 882 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 884 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 886 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 888 `g_obex_cÚÃù ( obex , »q_com¶‘e , & d , &d. ”r , G_OBEX_HDR_INVALID ); 889 `g_as£¹_no_”rÜ ( d . ”r ); 891 `g_maš_loÝ_run ( d . mašloÝ ); 893 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 895 `g_maš_loÝ_uÄef ( d . mašloÝ ); 897 `g_sourû_»move ( tim”_id ); 898 `g_io_chªÃl_uÄef ( io ); 899 `g_sourû_»move ( io_id ); 900 `g_obex_uÄef ( obex ); 902 `g_as£¹_no_”rÜ ( d . ”r ); 903 } } 905  $‹¡_obex_discÚÃù () 907 GIOChªÃl * io ; 908 GIOCÚd™iÚ cÚd ; 909 gušt io_id , tim”_id ; 910 GObex * obex ; 911  ‹¡_d©a d = { 0, NULL , { 912 { pkt_discÚÃù_»q , (pkt_disconnect_req) } }, { 913 { pkt_discÚÃù_r¥ , (pkt_disconnect_rsp) } } }; 915 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 917 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 918 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 920 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 922 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 924 `g_obex_discÚÃù ( obex , »q_com¶‘e , & d , &d. ”r ); 925 `g_as£¹_no_”rÜ ( d . ”r ); 927 `g_maš_loÝ_run ( d . mašloÝ ); 929 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 931 `g_maš_loÝ_uÄef ( d . mašloÝ ); 933 `g_sourû_»move ( tim”_id ); 934 `g_io_chªÃl_uÄef ( io ); 935 `g_sourû_»move ( io_id ); 936 `g_obex_uÄef ( obex ); 938 `g_as£¹_no_”rÜ ( d . ”r ); 939 } } 941  $‹¡_auth () 943 GIOChªÃl * io ; 944 GIOCÚd™iÚ cÚd ; 945 gušt io_id , tim”_id ; 946 GObex * obex ; 947  ‹¡_d©a d = { 0, NULL , { 948 { pkt_cÚÃù_»q , (pkt_connect_req) }, 949 { pkt_auth_»q , (pkt_auth_req) } }, { 950 { pkt_uÇuth_r¥ , (pkt_unauth_rsp) }, 951 { pkt_auth_r¥ , (pkt_auth_rsp) } }, 954 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 956 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 957 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 959 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 961 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 963 `g_obex_cÚÃù ( obex , »q_com¶‘e , & d , &d. ”r , G_OBEX_HDR_INVALID ); 964 `g_as£¹_no_”rÜ ( d . ”r ); 966 `g_maš_loÝ_run ( d . mašloÝ ); 968 `g_as£¹_cmpušt ( d . couÁ , ==, 2); 970 `g_maš_loÝ_uÄef ( d . mašloÝ ); 972 `g_sourû_»move ( tim”_id ); 973 `g_io_chªÃl_uÄef ( io ); 974 `g_sourû_»move ( io_id ); 975 `g_obex_uÄef ( obex ); 977 `g_as£¹_no_”rÜ ( d . ”r ); 978 } } 980  $‹¡_auth_çž () 982 GIOChªÃl * io ; 983 GIOCÚd™iÚ cÚd ; 984 gušt io_id , tim”_id ; 985 GObex * obex ; 986  ‹¡_d©a d = { 0, NULL , { 987 { pkt_cÚÃù_»q , (pkt_connect_req) }, 988 { pkt_auth_»q , (pkt_auth_req) } }, { 989 { pkt_uÇuth_r¥ , (pkt_unauth_rsp) }, 990 { pkt_uÇuth_r¥ , (pkt_unauth_rsp) } }, 993 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 995 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 996 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 998 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1000 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1002 `g_obex_cÚÃù ( obex , »q_com¶‘e , & d , &d. ”r , G_OBEX_HDR_INVALID ); 1003 `g_as£¹_no_”rÜ ( d . ”r ); 1005 `g_maš_loÝ_run ( d . mašloÝ ); 1007 `g_as£¹_cmpušt ( d . couÁ , ==, 2); 1009 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1011 `g_sourû_»move ( tim”_id ); 1012 `g_io_chªÃl_uÄef ( io ); 1013 `g_sourû_»move ( io_id ); 1014 `g_obex_uÄef ( obex ); 1016 `g_as£¹_no_”rÜ ( d . ”r ); 1017 } } 1019  $‹¡_£©h () 1021 GIOChªÃl * io ; 1022 GIOCÚd™iÚ cÚd ; 1023 gušt io_id , tim”_id ; 1024 GObex * obex ; 1025  ‹¡_d©a d = { 0, NULL , { 1026 { pkt_£©h_»q , (pkt_setpath_req) } }, { 1027 { pkt_sucûss_r¥ , (pkt_success_rsp) } } }; 1029 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1031 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1032 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1034 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1036 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1038 `g_obex_£©h ( obex , "dœ", »q_com¶‘e , & d , &d. ”r ); 1039 `g_as£¹_no_”rÜ ( d . ”r ); 1041 `g_maš_loÝ_run ( d . mašloÝ ); 1043 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 1045 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1047 `g_sourû_»move ( tim”_id ); 1048 `g_io_chªÃl_uÄef ( io ); 1049 `g_sourû_»move ( io_id ); 1050 `g_obex_uÄef ( obex ); 1052 `g_as£¹_no_”rÜ ( d . ”r ); 1053 } } 1055  $‹¡_£©h_up () 1057 GIOChªÃl * io ; 1058 GIOCÚd™iÚ cÚd ; 1059 gušt io_id , tim”_id ; 1060 GObex * obex ; 1061  ‹¡_d©a d = { 0, NULL , { 1062 { pkt_£©h_up_»q , (pkt_setpath_up_req) } }, { 1063 { pkt_sucûss_r¥ , (pkt_success_rsp) } } }; 1065 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1067 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1068 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1070 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1072 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1074 `g_obex_£©h ( obex , "..", »q_com¶‘e , & d , &d. ”r ); 1075 `g_as£¹_no_”rÜ ( d . ”r ); 1077 `g_maš_loÝ_run ( d . mašloÝ ); 1079 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 1081 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1083 `g_sourû_»move ( tim”_id ); 1084 `g_io_chªÃl_uÄef ( io ); 1085 `g_sourû_»move ( io_id ); 1086 `g_obex_uÄef ( obex ); 1088 `g_as£¹_no_”rÜ ( d . ”r ); 1089 } } 1091  $‹¡_£©h_up_down () 1093 GIOChªÃl * io ; 1094 GIOCÚd™iÚ cÚd ; 1095 gušt io_id , tim”_id ; 1096 GObex * obex ; 1097  ‹¡_d©a d = { 0, NULL , { 1098 { pkt_£©h_up_down_»q , 1099 ( pkt_£©h_up_down_»q ) } }, { 1100 { pkt_sucûss_r¥ , (pkt_success_rsp) } } }; 1102 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1104 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1105 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1107 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1109 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1111 `g_obex_£©h ( obex , "../dœ", »q_com¶‘e , & d , &d. ”r ); 1112 `g_as£¹_no_”rÜ ( d . ”r ); 1114 `g_maš_loÝ_run ( d . mašloÝ ); 1116 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 1118 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1120 `g_sourû_»move ( tim”_id ); 1121 `g_io_chªÃl_uÄef ( io ); 1122 `g_sourû_»move ( io_id ); 1123 `g_obex_uÄef ( obex ); 1125 `g_as£¹_no_”rÜ ( d . ”r ); 1126 } } 1128  $‹¡_mkdœ () 1130 GIOChªÃl * io ; 1131 GIOCÚd™iÚ cÚd ; 1132 gušt io_id , tim”_id ; 1133 GObex * obex ; 1134  ‹¡_d©a d = { 0, NULL , { 1135 { pkt_mkdœ_»q , (pkt_mkdir_req) } }, { 1136 { pkt_sucûss_r¥ , (pkt_success_rsp) } } }; 1138 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1140 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1141 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1143 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1145 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1147 `g_obex_mkdœ ( obex , "dœ", »q_com¶‘e , & d , &d. ”r ); 1148 `g_as£¹_no_”rÜ ( d . ”r ); 1150 `g_maš_loÝ_run ( d . mašloÝ ); 1152 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 1154 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1156 `g_sourû_»move ( tim”_id ); 1157 `g_io_chªÃl_uÄef ( io ); 1158 `g_sourû_»move ( io_id ); 1159 `g_obex_uÄef ( obex ); 1161 `g_as£¹_no_”rÜ ( d . ”r ); 1162 } } 1164  $‹¡_d–‘e () 1166 GIOChªÃl * io ; 1167 GIOCÚd™iÚ cÚd ; 1168 gušt io_id , tim”_id ; 1169 GObex * obex ; 1170  ‹¡_d©a d = { 0, NULL , { 1171 { pkt_d–‘e_»q , (pkt_delete_req) } }, { 1172 { pkt_sucûss_r¥ , (pkt_success_rsp) } } }; 1174 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1176 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1177 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1179 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1181 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1183 `g_obex_d–‘e ( obex , "foo.txt", »q_com¶‘e , & d , &d. ”r ); 1184 `g_as£¹_no_”rÜ ( d . ”r ); 1186 `g_maš_loÝ_run ( d . mašloÝ ); 1188 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 1190 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1192 `g_sourû_»move ( tim”_id ); 1193 `g_io_chªÃl_uÄef ( io ); 1194 `g_sourû_»move ( io_id ); 1195 `g_obex_uÄef ( obex ); 1197 `g_as£¹_no_”rÜ ( d . ”r ); 1198 } } 1200  $‹¡_cÝy () 1202 GIOChªÃl * io ; 1203 GIOCÚd™iÚ cÚd ; 1204 gušt io_id , tim”_id ; 1205 GObex * obex ; 1206  ‹¡_d©a d = { 0, NULL , { 1207 { pkt_cÝy_»q , (pkt_copy_req) } }, { 1208 { pkt_sucûss_r¥ , (pkt_success_rsp) } } }; 1210 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1212 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1213 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1215 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1217 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1219 `g_obex_cÝy ( obex , "foo", "b¬", »q_com¶‘e , & d , &d. ”r ); 1220 `g_as£¹_no_”rÜ ( d . ”r ); 1222 `g_maš_loÝ_run ( d . mašloÝ ); 1224 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 1226 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1228 `g_sourû_»move ( tim”_id ); 1229 `g_io_chªÃl_uÄef ( io ); 1230 `g_sourû_»move ( io_id ); 1231 `g_obex_uÄef ( obex ); 1233 `g_as£¹_no_”rÜ ( d . ”r ); 1234 } } 1236  $‹¡_move () 1238 GIOChªÃl * io ; 1239 GIOCÚd™iÚ cÚd ; 1240 gušt io_id , tim”_id ; 1241 GObex * obex ; 1242  ‹¡_d©a d = { 0, NULL , { 1243 { pkt_move_»q , (pkt_move_req) } }, { 1244 { pkt_sucûss_r¥ , (pkt_success_rsp) } } }; 1246 `ü—‹_’dpošts (& obex , & io , SOCK_STREAM ); 1248 cÚd = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL ; 1249 io_id = `g_io_add_w©ch ( io , cÚd , ‹¡_io_cb , & d ); 1251 d . mašloÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 1253 tim”_id = `g_timeout_add_£cÚds (1, ‹¡_timeout , & d ); 1255 `g_obex_move ( obex , "foo", "b¬", »q_com¶‘e , & d , &d. ”r ); 1256 `g_as£¹_no_”rÜ ( d . ”r ); 1258 `g_maš_loÝ_run ( d . mašloÝ ); 1260 `g_as£¹_cmpušt ( d . couÁ , ==, 1); 1262 `g_maš_loÝ_uÄef ( d . mašloÝ ); 1264 `g_sourû_»move ( tim”_id ); 1265 `g_io_chªÃl_uÄef ( io ); 1266 `g_sourû_»move ( io_id ); 1267 `g_obex_uÄef ( obex ); 1269 `g_as£¹_no_”rÜ ( d . ”r ); 1270 } } 1272  $maš ( ¬gc , * ¬gv []) 1274 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 1276 `g_‹¡_add_func ("/gobex/nuÎ_io", ‹¡_nuÎ_io ); 1277 `g_‹¡_add_func ("/gobex/basic", ‹¡_basic ); 1278 `g_‹¡_add_func ("/gobex/»f_uÄef", ‹¡_»f_uÄef ); 1280 `g_‹¡_add_func ("/gobex/‹¡_discÚÃù", ‹¡_discÚÃù ); 1282 `g_‹¡_add_func ("/gobex/test_recv_connect_stream", 1283 ‹¡_»cv_cÚÃù_¡»am ); 1284 `g_‹¡_add_func ("/gobex/test_recv_connect_pkt", 1285 ‹¡_»cv_cÚÃù_pkt ); 1286 `g_‹¡_add_func ("/gobex/test_send_connect_stream", 1287 ‹¡_£nd_cÚÃù_¡»am ); 1288 `g_‹¡_add_func ("/gobex/test_send_connect_pkt", 1289 ‹¡_£nd_cÚÃù_pkt ); 1290 `g_‹¡_add_func ("/gobex/test_recv_unexpected", 1291 ‹¡_»cv_uÃx³ùed ); 1292 `g_‹¡_add_func ("/gobex/test_send_on_demand_stream", 1293 ‹¡_£nd_Ú_demªd_¡»am ); 1294 `g_‹¡_add_func ("/gobex/test_send_on_demand_pkt", 1295 ‹¡_£nd_Ú_demªd_pkt ); 1296 `g_‹¡_add_func ("/gobex/test_send_on_demand_fail_stream", 1297 ‹¡_£nd_Ú_demªd_çž_¡»am ); 1298 `g_‹¡_add_func ("/gobex/test_send_on_demand_fail_pkt", 1299 ‹¡_£nd_Ú_demªd_çž_pkt ); 1300 `g_‹¡_add_func ("/gobex/test_send_connect_req_stream", 1301 ‹¡_£nd_cÚÃù_»q_¡»am ); 1302 `g_‹¡_add_func ("/gobex/test_send_connect_req_pkt", 1303 ‹¡_£nd_cÚÃù_»q_pkt ); 1304 `g_‹¡_add_func ("/gobex/test_send_nval_connect_req_stream", 1305 ‹¡_£nd_nv®_cÚÃù_»q_¡»am ); 1306 `g_‹¡_add_func ("/gobex/test_send_nval_connect_req_pkt", 1307 ‹¡_£nd_nv®_cÚÃù_»q_pkt ); 1308 `g_‹¡_add_func ("/gobex/test_send_nval_connect_req_short_pkt", 1309 ‹¡_£nd_nv®_cÚÃù_»q_shÜt_pkt ); 1310 `g_‹¡_add_func ("/gobex/test_send_connect_req_timeout_stream", 1311 ‹¡_£nd_cÚÃù_»q_timeout_¡»am ); 1312 `g_‹¡_add_func ("/gobex/test_send_connect_req_timeout_pkt", 1313 ‹¡_£nd_cÚÃù_»q_timeout_pkt ); 1316 `g_‹¡_add_func ("/gobex/test_cancel_req_immediate", 1317 ‹¡_ÿnûl_»q_immedŸ‹ ); 1318 `g_‹¡_add_func ("/gobex/test_cancel_req_delay_stream", 1319 ‹¡_ÿnûl_»q_d–ay_¡»am ); 1320 `g_‹¡_add_func ("/gobex/test_cancel_req_delay_pkt", 1321 ‹¡_ÿnûl_»q_d–ay_pkt ); 1323 `g_‹¡_add_func ("/gobex/‹¡_cÚÃù", ‹¡_cÚÃù ); 1324 `g_‹¡_add_func ("/gobex/‹¡_obex_discÚÃù", ‹¡_obex_discÚÃù ); 1325 `g_‹¡_add_func ("/gobex/‹¡_auth", ‹¡_auth ); 1326 `g_‹¡_add_func ("/gobex/‹¡_auth_çž", ‹¡_auth_çž ); 1328 `g_‹¡_add_func ("/gobex/‹¡_£©h", ‹¡_£©h ); 1329 `g_‹¡_add_func ("/gobex/‹¡_£©h_up", ‹¡_£©h_up ); 1330 `g_‹¡_add_func ("/gobex/‹¡_£©h_up_down", ‹¡_£©h_up_down ); 1332 `g_‹¡_add_func ("/gobex/‹¡_mkdœ", ‹¡_mkdœ ); 1334 `g_‹¡_add_func ("/gobex/‹¡_d–‘e", ‹¡_d–‘e ); 1336 `g_‹¡_add_func ("/gobex/‹¡_cÝy", ‹¡_cÝy ); 1337 `g_‹¡_add_func ("/gobex/‹¡_move", ‹¡_move ); 1339  `g_‹¡_run (); 1340 } } @unit/test-hfp.c 24  ~ 25  ~ 26  ~<¡dšt.h > 27  ~<¡dio.h > 28  ~<¡ršg.h > 30  ~ 31  ~"¤c/sh¬ed/hå.h " 33  scÚ‹xt { 34 GMašLoÝ * mmaš_loÝ ; 35 gušt mw©ch_id ; 36  mfd_£rv” ; 37  mfd_þ›Á ; 38  hå_gw * mhå ; 39  hå_hf * mhå_hf ; 40 cÚ¡  ‹¡_d©a * md©a ; 41  mpdu_off£t ; 44  s‹¡_pdu { 45 boÞ mv®id ; 46 cÚ¡ ušt8_t * md©a ; 47 size_t msize ; 48 hå_gw_cmd_ty³ mty³ ; 49 boÞ mäagm’‹d ; 52  s‹¡_d©a { 53 * m‹¡_Çme ; 54  ‹¡_pdu * mpdu_li¡ ; 55 hå_»suÉ_func_t m»suÉ_func ; 56 hå_»¥Ú£_func_t m»¥Ú£_func ; 57 hå_hf_»suÉ_func_t mhf_»suÉ_func ; 58 GIOFunc m‹¡_hªdËr ; 61  #d©a ( ¬gs ...è((cÚ¡ []è{‡rg }) ) 63  #¿w_pdu ( ¬gs ...) \ 65 . v®id = Œue , \ 66 . d©a = `d©a ( ¬gs ), \ 67 . size = ( `d©a ( ¬gs )), \ 68 } ) 70  #d©a_’d () \ 72 . v®id = çl£ , \ 73 } ) 75  #ty³_pdu ( cmd_ty³ , ¬gs ...) \ 77 . v®id = Œue , \ 78 . d©a = `d©a ( ¬gs ), \ 79 . size = ( `d©a ( ¬gs )), \ 80 . ty³ = cmd_ty³ , \ 81 } ) 83  #äg_pdu ( ¬gs ...) \ 85 . v®id = Œue , \ 86 . d©a = `d©a ( ¬gs ), \ 87 . size = ( `d©a ( ¬gs )), \ 88 . äagm’‹d = Œue , \ 89 } ) 91  #defše_‹¡ ( Çme , funùiÚ , »suÉ_funùiÚ , ¬gs ...) \ 93 cÚ¡  ‹¡_pdu pdus [] = { \ 94 ¬gs , { } \ 96  ‹¡_d©a d©a ; \ 97 d©a . ‹¡_Çme = `g_¡rdup ( Çme ); \ 98 d©a . pdu_li¡ = `g_m®loc (( pdus )); \ 99 d©a . »suÉ_func = »suÉ_funùiÚ ; \ 100 `memýy ( d©a . pdu_li¡ , pdus , (pdus)); \ 101 `g_‹¡_add_d©a_func ( Çme , & d©a , funùiÚ ); \ 102 d©a . ‹¡_hªdËr =est_handler; \ 103 } 0) ) 105  #defše_hf_‹¡ ( Çme , funùiÚ , »suÉ_func , »¥Ú£_funùiÚ , \ 106 ¬gs ...)\ 108 cÚ¡  ‹¡_pdu pdus [] = { \ 109 ¬gs , { } \ 111  ‹¡_d©a d©a ; \ 112 d©a . ‹¡_Çme = `g_¡rdup ( Çme ); \ 113 d©a . pdu_li¡ = `g_m®loc (( pdus )); \ 114 d©a . hf_»suÉ_func = »suÉ_func ; \ 115 d©a . »¥Ú£_func = »¥Ú£_funùiÚ ; \ 116 `memýy ( d©a . pdu_li¡ , pdus , (pdus)); \ 117 `g_‹¡_add_d©a_func ( Çme , & d©a , funùiÚ ); \ 118 d©a . ‹¡_hªdËr = ‹¡_hf_hªdËr ; \ 119 } 0) ) 121  $cÚ‹xt_qu™ ( cÚ‹xt *context) 123 `g_maš_loÝ_qu™ ( cÚ‹xt -> maš_loÝ ); 124 } } 126  $‹¡_ä“ ( gcÚ¡poš‹r u£r_d©a ) 128 cÚ¡  ‹¡_d©a * d©a = u£r_d©a ; 130 `g_ä“ ( d©a -> ‹¡_Çme ); 131 `g_ä“ ( d©a -> pdu_li¡ ); 132 } } 134  gboÞ—n $‹¡_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 135 gpoš‹r u£r_d©a ) 137  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 138 cÚ¡  ‹¡_pdu * pdu ; 140 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 142 `g_as£¹ (! pdu -> v®id ); 143 `cÚ‹xt_qu™ ( cÚ‹xt ); 145 cÚ‹xt -> w©ch_id = 0; 147  FALSE ; 148 } } 150  gboÞ—n $£nd_pdu ( gpoš‹r u£r_d©a ) 152  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 153 cÚ¡  ‹¡_pdu * pdu ; 154 ssize_t Ën ; 156 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 157 ià(! pdu || !pdu-> v®id ) 158  FALSE ; 160 Ën = `wr™e ( cÚ‹xt -> fd_£rv” , pdu -> d©a ,…du-> size ); 161 `g_as£¹_cmpšt ( Ën , ==, pdu -> size ); 163 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ]; 164 ià( pdu -> äagm’‹d ) 165 `g_idË_add ( £nd_pdu , cÚ‹xt ); 167  FALSE ; 168 } } 170  gboÞ—n $‹¡_hf_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 171 gpoš‹r u£r_d©a ) 173  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 174 gch¬ buf [60]; 175 gsize by‹s_»ad ; 176 GE¼Ü * ”rÜ = NULL ; 178 ià( cÚd & ( G_IO_HUP | G_IO_ERR | G_IO_NVAL )) 179  dÚe ; 182 `g_io_chªÃl_»ad_ch¬s ( chªÃl , buf , 60, & by‹s_»ad , & ”rÜ ); 184 `£nd_pdu ( cÚ‹xt ); 186  TRUE ; 188 dÚe : 189 `cÚ‹xt_qu™ ( cÚ‹xt ); 190 cÚ‹xt -> w©ch_id = 0; 192  FALSE ; 193 } } 195  $cmd_hªdËr (cÚ¡ * commªd , * u£r_d©a ) 197  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 198 cÚ¡  ‹¡_pdu * pdu ; 199  cmd_Ën = `¡¾’ ( commªd ); 201 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 203 `g_as£¹ ( cmd_Ën =ð pdu -> size ); 204 `g_as£¹ (! `memcmp ( commªd , pdu -> d©a , cmd_Ën )); 206 `hå_gw_£nd_»suÉ ( cÚ‹xt -> hå , HFP_RESULT_ERROR ); 207 } } 209  $´efix_hªdËr ( hå_cÚ‹xt * »suÉ , 210 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 212  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 213 cÚ¡  ‹¡_pdu * pdu ; 215 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 217 `g_as£¹ ( ty³ =ð pdu ->type); 219 `hå_gw_£nd_»suÉ ( cÚ‹xt -> hå , HFP_RESULT_ERROR ); 220 } } 222  cÚ‹xt * $ü—‹_cÚ‹xt ( gcÚ¡poš‹r d©a ) 224  cÚ‹xt *cÚ‹xˆð `g_Ãw0 (context, 1); 225 GIOChªÃl * chªÃl ; 226  ”r , sv [2]; 227 cÚ¡  ‹¡_d©a * d = d©a ; 229 cÚ‹xt -> maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 230 `g_as£¹ ( cÚ‹xt -> maš_loÝ ); 232 ”r = `sock‘·œ ( AF_UNIX , SOCK_SEQPACKET | SOCK_CLOEXEC , 0, sv ); 233 `g_as£¹ ( ”r == 0); 235 chªÃl = `g_io_chªÃl_unix_Ãw ( sv [1]); 237 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 238 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 239 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 241 cÚ‹xt -> w©ch_id = `g_io_add_w©ch ( chªÃl , 242 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 243 d -> ‹¡_hªdËr , cÚ‹xt ); 245 `g_as£¹ ( cÚ‹xt -> w©ch_id > 0); 247 `g_io_chªÃl_uÄef ( chªÃl ); 249 cÚ‹xt -> fd_£rv” = sv [1]; 250 cÚ‹xt -> fd_þ›Á = sv [0]; 251 cÚ‹xt -> d©a = data; 253  cÚ‹xt ; 254 } } 256  $execu‹_cÚ‹xt ( cÚ‹xt *context) 258 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 260 ià( cÚ‹xt -> w©ch_id ) 261 `g_sourû_»move ( cÚ‹xt -> w©ch_id ); 263 `g_maš_loÝ_uÄef ( cÚ‹xt -> maš_loÝ ); 265 `‹¡_ä“ ( cÚ‹xt -> d©a ); 267 ià( cÚ‹xt -> hå ) 268 `hå_gw_uÄef ( cÚ‹xt -> hå ); 270 ià( cÚ‹xt -> hå_hf ) 271 `hå_hf_uÄef ( cÚ‹xt -> hå_hf ); 273 `g_ä“ ( cÚ‹xt ); 274 } } 276  $‹¡_š™ ( gcÚ¡poš‹r d©a ) 278  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 280 cÚ‹xt -> hå = `hå_gw_Ãw (cÚ‹xt-> fd_þ›Á ); 282 `g_as£¹ ( cÚ‹xt -> hå ); 283 `g_as£¹ ( `hå_gw_£t_þo£_Ú_uÄef ( cÚ‹xt -> hå , Œue )); 285 `hå_gw_uÄef ( cÚ‹xt -> hå ); 286 cÚ‹xt -> hå = NULL ; 288 `execu‹_cÚ‹xt ( cÚ‹xt ); 289 } } 291  $‹¡_commªd_hªdËr ( gcÚ¡poš‹r d©a ) 293  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 294 cÚ¡  ‹¡_pdu * pdu ; 295 ssize_t Ën ; 296 boÞ »t ; 298 cÚ‹xt -> hå = `hå_gw_Ãw (cÚ‹xt-> fd_þ›Á ); 299 `g_as£¹ ( cÚ‹xt -> hå ); 301 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 303 »t = `hå_gw_£t_þo£_Ú_uÄef ( cÚ‹xt -> hå , Œue ); 304 `g_as£¹ ( »t ); 306 »t = `hå_gw_£t_commªd_hªdËr ( cÚ‹xt -> hå , cmd_hªdËr , 307 cÚ‹xt , NULL ); 308 `g_as£¹ ( »t ); 310 Ën = `wr™e ( cÚ‹xt -> fd_£rv” , pdu -> d©a ,…du-> size ); 311 `g_as£¹_cmpšt ( Ën , ==, pdu -> size ); 313 `execu‹_cÚ‹xt ( cÚ‹xt ); 314 } } 316  $‹¡_»gi¡” ( gcÚ¡poš‹r d©a ) 318  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 319 cÚ¡  ‹¡_pdu * pdu ; 320 ssize_t Ën ; 321 boÞ »t ; 323 cÚ‹xt -> hå = `hå_gw_Ãw (cÚ‹xt-> fd_þ›Á ); 324 `g_as£¹ ( cÚ‹xt -> hå ); 326 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 328 »t = `hå_gw_£t_þo£_Ú_uÄef ( cÚ‹xt -> hå , Œue ); 329 `g_as£¹ ( »t ); 331 ià( cÚ‹xt -> d©a -> »suÉ_func ) { 332 »t = `hå_gw_»gi¡” ( cÚ‹xt -> hå , cÚ‹xt-> d©a -> »suÉ_func , 333 (*) pdu -> d©a , cÚ‹xt , NULL ); 334 `g_as£¹ ( »t ); 337 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 339 Ën = `wr™e ( cÚ‹xt -> fd_£rv” , pdu -> d©a ,…du-> size ); 340 `g_as£¹_cmpšt ( Ën , ==, pdu -> size ); 342 `execu‹_cÚ‹xt ( cÚ‹xt ); 343 } } 345  $‹¡_äagm’‹d ( gcÚ¡poš‹r d©a ) 347  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 348 boÞ »t ; 350 cÚ‹xt -> hå = `hå_gw_Ãw (cÚ‹xt-> fd_þ›Á ); 351 `g_as£¹ ( cÚ‹xt -> hå ); 353 »t = `hå_gw_£t_þo£_Ú_uÄef ( cÚ‹xt -> hå , Œue ); 354 `g_as£¹ ( »t ); 356 `g_idË_add ( £nd_pdu , cÚ‹xt ); 358 `execu‹_cÚ‹xt ( cÚ‹xt ); 359 } } 361  $‹¡_£nd_ªd_þo£ ( gcÚ¡poš‹r d©a ) 363  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 364 boÞ »t ; 366 cÚ‹xt -> hå = `hå_gw_Ãw (cÚ‹xt-> fd_þ›Á ); 367 `g_as£¹ ( cÚ‹xt -> hå ); 369 »t = `hå_gw_£t_þo£_Ú_uÄef ( cÚ‹xt -> hå , Œue ); 370 `g_as£¹ ( »t ); 372 `£nd_pdu ( cÚ‹xt ); 374 `hå_gw_uÄef ( cÚ‹xt -> hå ); 375 cÚ‹xt -> hå = NULL ; 377 `execu‹_cÚ‹xt ( cÚ‹xt ); 378 } } 380  $check_u¡ršg_1 ( hå_cÚ‹xt * »suÉ , 381 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 383  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 384 cÚ¡  ‹¡_pdu * pdu ; 385  i = 3, j = 0; 386  ¡r [10]; 388 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 390 `g_as£¹ ( ty³ =ð pdu ->type); 392 `g_as£¹ ( `hå_cÚ‹xt_g‘_unquÙed_¡ršg ( »suÉ , ¡r , (str))); 394  cÚ‹xt -> d©a -> pdu_li¡ [1].d©a[ i ] != '\r') { 395 `g_as£¹ ( j < ( ¡r )); 396 `g_as£¹ ( ¡r [ j ] =ð cÚ‹xt -> d©a -> pdu_li¡ [1].d©a[ i ]); 398 i ++; 399 j ++; 402 `g_as£¹ ( ¡r [ j ] == '\0'); 404 `hå_gw_£nd_»suÉ ( cÚ‹xt -> hå , HFP_RESULT_ERROR ); 405 } } 407  $check_u¡ršg_2 ( hå_cÚ‹xt * »suÉ , 408 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 410  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 411 cÚ¡  ‹¡_pdu * pdu ; 412  ¡r [10]; 414 `mem£t ( ¡r , 'X', (str)); 416 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 418 `g_as£¹ ( ty³ =ð pdu ->type); 420 `g_as£¹ (! `hå_cÚ‹xt_g‘_unquÙed_¡ršg ( »suÉ , ¡r , 3)); 422 `g_as£¹ ( ¡r [3] == 'X'); 424 `hå_gw_£nd_»suÉ ( cÚ‹xt -> hå , HFP_RESULT_ERROR ); 425 } } 427  $check_¡ršg_1 ( hå_cÚ‹xt * »suÉ , 428 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 430  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 431 cÚ¡  ‹¡_pdu * pdu ; 432  i = 4, j = 0; 433  ¡r [10]; 435 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 437 `g_as£¹ ( ty³ =ð pdu ->type); 439 `g_as£¹ ( `hå_cÚ‹xt_g‘_¡ršg ( »suÉ , ¡r , (str))); 441  cÚ‹xt -> d©a -> pdu_li¡ [1].d©a[ i ] != '\"') { 442 `g_as£¹ ( j < ( ¡r )); 443 `g_as£¹ ( ¡r [ j ] =ð cÚ‹xt -> d©a -> pdu_li¡ [1].d©a[ i ]); 445 i ++; 446 j ++; 449 `g_as£¹ ( cÚ‹xt -> d©a -> pdu_li¡ [1].d©a[ i ] == '\"'); 450 `g_as£¹ ( ¡r [ j ] == '\0'); 452 `hå_gw_£nd_»suÉ ( cÚ‹xt -> hå , HFP_RESULT_ERROR ); 453 } } 455  $check_¡ršg_2 ( hå_cÚ‹xt * »suÉ , 456 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 458  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 459 cÚ¡  ‹¡_pdu * pdu ; 460  ¡r [10]; 462 `mem£t ( ¡r , 'X', (str)); 464 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 466 `g_as£¹ ( ty³ =ð pdu ->type); 468 `g_as£¹ (! `hå_cÚ‹xt_g‘_¡ršg ( »suÉ , ¡r , 3)); 470 `g_as£¹ ( ¡r [3] == 'X'); 472 `hå_gw_£nd_»suÉ ( cÚ‹xt -> hå , HFP_RESULT_ERROR ); 473 } } 475  $check_¡ršg_3 ( hå_cÚ‹xt * »suÉ , 476 hå_gw_cmd_ty³ ty³ , * u£r_d©a ) 478  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 479 cÚ¡  ‹¡_pdu * pdu ; 481 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 483 `g_as£¹ ( ty³ =ð pdu ->type); 485 `hå_gw_£nd_»suÉ ( cÚ‹xt -> hå , HFP_RESULT_ERROR ); 486 } } 488  $‹¡_hf_š™ ( gcÚ¡poš‹r d©a ) 490  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 492 cÚ‹xt -> hå_hf = `hå_hf_Ãw (cÚ‹xt-> fd_þ›Á ); 493 `g_as£¹ ( cÚ‹xt -> hå_hf ); 494 `g_as£¹ ( `hå_hf_£t_þo£_Ú_uÄef ( cÚ‹xt -> hå_hf , Œue )); 496 `hå_hf_uÄef ( cÚ‹xt -> hå_hf ); 497 cÚ‹xt -> hå_hf = NULL ; 499 `execu‹_cÚ‹xt ( cÚ‹xt ); 500 } } 502  boÞ gunsÞic™ed_»¥ = çl£ ; 504  $hf_unsÞic™ed_»¥_cb ( hå_cÚ‹xt * cÚ‹xt , 505 * u£r_d©a ) { 506 unsÞic™ed_»¥ = Œue ; 507 } } 509  $hf_»¥Ú£_w™h_d©a ( hå_»suÉ »s , 510 hå_”rÜ cme_”r , 511 * u£r_d©a ) 513  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 515 `g_as£¹ ( unsÞic™ed_»¥ ); 516 unsÞic™ed_»¥ = çl£ ; 518 `hå_hf_discÚÃù ( cÚ‹xt -> hå_hf ); 519 } } 521  $hf_cme_”rÜ_»¥Ú£_cb ( hå_»suÉ »s , 522 hå_”rÜ cme_”r , 523 * u£r_d©a ) 525  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 527 `g_as£¹_cmpšt ( »s , ==, HFP_RESULT_CME_ERROR ); 528 `g_as£¹_cmpšt ( cme_”r , ==, 30); 530 `hå_hf_discÚÃù ( cÚ‹xt -> hå_hf ); 531 } } 533  $hf_»¥Ú£_cb ( hå_»suÉ »s , hå_”rÜ cme_”r , 534 * u£r_d©a ) 536  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 538 `hå_hf_discÚÃù ( cÚ‹xt -> hå_hf ); 539 } } 541  $‹¡_hf_£nd_commªd ( gcÚ¡poš‹r d©a ) 543  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 544 cÚ¡  ‹¡_pdu * pdu ; 545 boÞ »t ; 547 cÚ‹xt -> hå_hf = `hå_hf_Ãw (cÚ‹xt-> fd_þ›Á ); 548 `g_as£¹ ( cÚ‹xt -> hå_hf ); 550 »t = `hå_hf_£t_þo£_Ú_uÄef ( cÚ‹xt -> hå_hf , Œue ); 551 `g_as£¹ ( »t ); 553 ià( cÚ‹xt -> d©a -> »¥Ú£_func ) { 554 ià( cÚ‹xt -> d©a -> hf_»suÉ_func ) { 555 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 557 »t = `hå_hf_»gi¡” ( cÚ‹xt -> hå_hf , 558 cÚ‹xt -> d©a -> hf_»suÉ_func , 559 (*) pdu -> d©a , 560 NULL , NULL); 561 `g_as£¹ ( »t ); 564 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 566 »t = `hå_hf_£nd_commªd ( cÚ‹xt -> hå_hf , 567 cÚ‹xt -> d©a -> »¥Ú£_func , 568 cÚ‹xt , (*) pdu -> d©a ); 569 `g_as£¹ ( »t ); 572 `execu‹_cÚ‹xt ( cÚ‹xt ); 573 } } 574  $hf_chld_»suÉ_hªdËr ( hå_cÚ‹xt * hf_cÚ‹xt , 575 * u£r_d©a ) 577  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 578  ¡r [3]; 580 `g_as£¹ ( hf_cÚ‹xt ); 581 `g_as£¹ ( `hå_cÚ‹xt_g‘_unquÙed_¡ršg ( hf_cÚ‹xt , ¡r , 582 ( ¡r ))); 583 `g_as£¹_cmp¡r ( ¡r , ==, "1"); 584 `g_as£¹ ( `hå_cÚ‹xt_g‘_unquÙed_¡ršg ( hf_cÚ‹xt , ¡r , 585 ( ¡r ))); 586 `g_as£¹_cmp¡r ( ¡r , ==, "2x"); 588 `hå_hf_discÚÃù ( cÚ‹xt -> hå_hf ); 589 } } 591  $hf_chld_sk_f›ld ( hå_cÚ‹xt * hf_cÚ‹xt , 592 * u£r_d©a ) 594  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 595  ¡r [3]; 597 `g_as£¹ ( hf_cÚ‹xt ); 599 `hå_cÚ‹xt_sk_f›ld ( hf_cÚ‹xt ); 601 `g_as£¹ ( `hå_cÚ‹xt_g‘_unquÙed_¡ršg ( hf_cÚ‹xt , ¡r , 602 ( ¡r ))); 603 `g_as£¹_cmp¡r ( ¡r , ==, "2x"); 605 `hå_hf_discÚÃù ( cÚ‹xt -> hå_hf ); 606 } } 608  $hf_þcc_»suÉ_hªdËr ( hå_cÚ‹xt * hf_cÚ‹xt , 609 * u£r_d©a ) 611  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 612  Çme [10]; 613 ušt32_t v®1 , v®2 ; 615 `g_as£¹ ( hf_cÚ‹xt ); 616 `g_as£¹ ( `hå_cÚ‹xt_Ý’_cÚš” ( hf_cÚ‹xt )); 617 `g_as£¹ ( `hå_cÚ‹xt_g‘_¡ršg ( hf_cÚ‹xt , Çme , (name))); 618 `g_as£¹_cmp¡r ( Çme , ==, "call"); 619 `g_as£¹ ( `hå_cÚ‹xt_Ý’_cÚš” ( hf_cÚ‹xt )); 620 `g_as£¹ ( `hå_cÚ‹xt_g‘_numb” ( hf_cÚ‹xt , & v®1 )); 621 `g_as£¹_cmpšt ( v®1 , ==, 0); 622 `g_as£¹ ( `hå_cÚ‹xt_g‘_numb” ( hf_cÚ‹xt , & v®1 )); 623 `g_as£¹_cmpšt ( v®1 , ==, 1); 624 `g_as£¹ ( `hå_cÚ‹xt_þo£_cÚš” ( hf_cÚ‹xt )); 625 `g_as£¹ ( `hå_cÚ‹xt_þo£_cÚš” ( hf_cÚ‹xt )); 627 `g_as£¹ ( `hå_cÚ‹xt_Ý’_cÚš” ( hf_cÚ‹xt )); 628 `g_as£¹ ( `hå_cÚ‹xt_g‘_¡ršg ( hf_cÚ‹xt , Çme , (name))); 629 `g_as£¹_cmp¡r ( Çme , ==, "callsetup"); 630 `g_as£¹ ( `hå_cÚ‹xt_Ý’_cÚš” ( hf_cÚ‹xt )); 631 `g_as£¹ ( `hå_cÚ‹xt_g‘_¿nge ( hf_cÚ‹xt , & v®1 , & v®2 )); 632 `g_as£¹_cmpšt ( v®1 , ==, 0); 633 `g_as£¹_cmpšt ( v®2 , ==, 3); 634 `g_as£¹ ( `hå_cÚ‹xt_þo£_cÚš” ( hf_cÚ‹xt )); 635 `g_as£¹ ( `hå_cÚ‹xt_þo£_cÚš” ( hf_cÚ‹xt )); 637 `hå_hf_discÚÃù ( cÚ‹xt -> hå_hf ); 638 } } 640  $hf_»suÉ_hªdËr ( hå_cÚ‹xt * »suÉ , 641 * u£r_d©a ) 643  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 645 `hå_hf_discÚÃù ( cÚ‹xt -> hå_hf ); 646 } } 648  $‹¡_hf_unsÞic™ed ( gcÚ¡poš‹r d©a ) 650  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 651 boÞ »t ; 653 cÚ‹xt -> hå_hf = `hå_hf_Ãw (cÚ‹xt-> fd_þ›Á ); 654 `g_as£¹ ( cÚ‹xt -> hå_hf ); 656 »t = `hå_hf_£t_þo£_Ú_uÄef ( cÚ‹xt -> hå_hf , Œue ); 657 `g_as£¹ ( »t ); 659 ià( cÚ‹xt -> d©a -> hf_»suÉ_func ) { 660 cÚ¡  ‹¡_pdu * pdu ; 662 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 664 »t = `hå_hf_»gi¡” ( cÚ‹xt -> hå_hf , 665 cÚ‹xt -> d©a -> hf_»suÉ_func , 666 (*) pdu -> d©a , cÚ‹xt , 667 NULL ); 668 `g_as£¹ ( »t ); 671 `£nd_pdu ( cÚ‹xt ); 673 `execu‹_cÚ‹xt ( cÚ‹xt ); 674 } } 676  $‹¡_hf_robu¡Ãss ( gcÚ¡poš‹r d©a ) 678  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 679 boÞ »t ; 681 cÚ‹xt -> hå_hf = `hå_hf_Ãw (cÚ‹xt-> fd_þ›Á ); 682 `g_as£¹ ( cÚ‹xt -> hå_hf ); 684 »t = `hå_hf_£t_þo£_Ú_uÄef ( cÚ‹xt -> hå_hf , Œue ); 685 `g_as£¹ ( »t ); 687 `£nd_pdu ( cÚ‹xt ); 689 `hå_hf_uÄef ( cÚ‹xt -> hå_hf ); 690 cÚ‹xt -> hå_hf = NULL ; 692 `execu‹_cÚ‹xt ( cÚ‹xt ); 693 } } 695  $maš ( ¬gc , * ¬gv []) 697 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 699 `defše_‹¡ ("/hå/‹¡_š™", ‹¡_š™ , NULL , `d©a_’d ()); 700 `defše_‹¡ ("/hå/‹¡_cmd_hªdËr_1", ‹¡_commªd_hªdËr , NULL , 701 `¿w_pdu ('A', 'T', '+', 'B', 'R', 'S', 'F', '\r'), 702 `¿w_pdu ('A', 'T', '+', 'B', 'R', 'S', 'F'), 703 `d©a_’d ()); 704 `defše_‹¡ ("/hå/‹¡_cmd_hªdËr_2", ‹¡_commªd_hªdËr , NULL , 705 `¿w_pdu ('A', 'T', 'D', '1', '2', '3', '4', '\r'), 706 `¿w_pdu ('A', 'T', 'D', '1', '2', '3', '4'), 707 `d©a_’d ()); 708 `defše_‹¡ ("/hå/‹¡_»gi¡”_1", ‹¡_»gi¡” , ´efix_hªdËr , 709 `¿w_pdu ('+', 'B', 'R', 'S', 'F', '\0'), 710 `¿w_pdu ('A', 'T', '+', 'B', 'R', 'S', 'F', '\r'), 711 `ty³_pdu ( HFP_GW_CMD_TYPE_COMMAND , 0), 712 `d©a_’d ()); 713 `defše_‹¡ ("/hå/‹¡_»gi¡”_2", ‹¡_»gi¡” , ´efix_hªdËr , 714 `¿w_pdu ('+', 'B', 'R', 'S', 'F', '\0'), 715 `¿w_pdu ('A', 'T', '+', 'B', 'R', 'S', 'F', '=', '\r'), 716 `ty³_pdu ( HFP_GW_CMD_TYPE_SET , 0), 717 `d©a_’d ()); 718 `defše_‹¡ ("/hå/‹¡_»gi¡”_3", ‹¡_»gi¡” , ´efix_hªdËr , 719 `¿w_pdu ('+', 'B', 'R', 'S', 'F', '\0'), 720 `¿w_pdu ('A', 'T', '+', 'B', 'R', 'S', 'F', '?', '\r'), 721 `ty³_pdu ( HFP_GW_CMD_TYPE_READ , 0), 722 `d©a_’d ()); 723 `defše_‹¡ ("/hå/‹¡_»gi¡”_4", ‹¡_»gi¡” , ´efix_hªdËr , 724 `¿w_pdu ('+', 'B', 'R', 'S', 'F', '\0'), 725 `¿w_pdu ('A', 'T', '+', 'B', 'R', 'S', 'F', '=', '?', 727 `ty³_pdu ( HFP_GW_CMD_TYPE_TEST , 0), 728 `d©a_’d ()); 729 `defše_‹¡ ("/hå/‹¡_»gi¡”_5", ‹¡_»gi¡” , ´efix_hªdËr , 730 `¿w_pdu ('D', '\0'), 731 `¿w_pdu ('A', 'T', 'D', '1', '2', '3', '4', '5', '\r'), 732 `ty³_pdu ( HFP_GW_CMD_TYPE_SET , 0), 733 `d©a_’d ()); 734 `defše_‹¡ ("/hå/‹¡_äagm’‹d_1", ‹¡_äagm’‹d , NULL , 735 `äg_pdu ('A'), frg_pdu('T'), frg_pdu('+'), frg_pdu('B'), 736 `äg_pdu ('R'), frg_pdu('S'), frg_pdu('F'), frg_pdu('\r'), 737 `d©a_’d ()); 738 `defše_‹¡ ("/hå/‹¡_u¡ršg_1", ‹¡_»gi¡” , check_u¡ršg_1 , 739 `¿w_pdu ('D', '\0'), 740 `¿w_pdu ('A', 'T', 'D', '0', '1', '2', '3', '\r'), 741 `ty³_pdu ( HFP_GW_CMD_TYPE_SET , 0), 742 `d©a_’d ()); 743 `defše_‹¡ ("/hå/‹¡_u¡ršg_2", ‹¡_»gi¡” , check_u¡ršg_2 , 744 `¿w_pdu ('D', '\0'), 745 `¿w_pdu ('A', 'T', 'D', '0', '1', '2', '3', '\r'), 746 `ty³_pdu ( HFP_GW_CMD_TYPE_SET , 0), 747 `d©a_’d ()); 748 `defše_‹¡ ("/hå/‹¡_¡ršg_1", ‹¡_»gi¡” , check_¡ršg_1 , 749 `¿w_pdu ('D', '\0'), 750 `¿w_pdu ('A', 'T', 'D', '\"', '0', '1', '2', '3', '\"', 752 `ty³_pdu ( HFP_GW_CMD_TYPE_SET , 0), 753 `d©a_’d ()); 754 `defše_‹¡ ("/hå/‹¡_¡ršg_2", ‹¡_»gi¡” , check_¡ršg_2 , 755 `¿w_pdu ('D', '\0'), 756 `¿w_pdu ('A', 'T', 'D', '\"', '0', '1', '2', '3', '\"', 758 `ty³_pdu ( HFP_GW_CMD_TYPE_SET , 0), 759 `d©a_’d ()); 760 `defše_‹¡ ("/hå/‹¡_cÜru±ed_1", ‹¡_»gi¡” , check_¡ršg_3 , 761 `¿w_pdu ('D', '\0'), 762 `¿w_pdu ('\r', 'A', 'T', 'D', '\"', '0', '1', '2', '3', 764 `ty³_pdu ( HFP_GW_CMD_TYPE_SET , 0), 765 `d©a_’d ()); 766 `defše_‹¡ ("/hå/‹¡_em±y", ‹¡_£nd_ªd_þo£ , NULL , 767 `¿w_pdu ('\r'), 768 `d©a_’d ()); 769 `defše_hf_‹¡ ("/hå_hf/‹¡_š™", ‹¡_hf_š™ , NULL , NULL, 770 `d©a_’d ()); 771 `defše_hf_‹¡ ("/hå_hf/‹¡_£nd_commªd_1", ‹¡_hf_£nd_commªd , 772 NULL , hf_»¥Ú£_cb , 773 `¿w_pdu ('A', 'T', '+', 'B', 'R', 'S', 'F', '\0'), 774 `¿w_pdu ('\r', '\n', 'O', 'k', '\r', '\n'), 775 `d©a_’d ()); 777 `defše_hf_‹¡ ("/hå_hf/‹¡_£nd_commªd_2", ‹¡_hf_£nd_commªd , 778 hf_unsÞic™ed_»¥_cb , 779 hf_»¥Ú£_w™h_d©a , 780 `¿w_pdu ('+', 'B', 'R', 'S', 'F', '\0'), 781 `¿w_pdu ('A', 'T', '+', 'B', 'R', 'S', 'F', '\0'), 782 `äg_pdu ('\r', '\n', '+', 'B', 'R', 'S', 'F', '\r', 784 `äg_pdu ('\r', '\n', 'O', 'k', '\r', '\n'), 785 `d©a_’d ()); 787 `defše_hf_‹¡ ("/hå_hf/‹¡_£nd_commªd_3", ‹¡_hf_£nd_commªd , 788 NULL , hf_cme_”rÜ_»¥Ú£_cb , 789 `¿w_pdu ('A', 'T', '+', 'C', 'H', 'L', 'D', '=', 791 `äg_pdu ('\r', '\n', '+', 'C', 'M', 'E', ' ', 'E'), 792 `äg_pdu ('R', 'R', 'O', 'R', ':', '3', '0', '\r', '\n'), 793 `d©a_’d ()); 795 `defše_hf_‹¡ ("/hå_hf/‹¡_unsÞic™ed_1", ‹¡_hf_unsÞic™ed , 796 hf_»suÉ_hªdËr , NULL , 797 `¿w_pdu ('+', 'C', 'L', 'C', 'C', '\0'), 798 `äg_pdu ('\r', '\n', '+', 'C', 'L', 'C'), 799 `äg_pdu ('C', '\r', '\n'), 800 `d©a_’d ()); 802 `defše_hf_‹¡ ("/hå_hf/‹¡_unsÞic™ed_2", ‹¡_hf_unsÞic™ed , 803 hf_»suÉ_hªdËr , NULL , 804 `¿w_pdu ('+', 'C', 'L', 'C', 'C', '\0'), 805 `äg_pdu ('\r', '\n', '+', 'C', 'L', 'C', 'C', ':', '1'), 806 `äg_pdu (',', '3', ',', '0', '\r', '\n'), 807 `d©a_’d ()); 809 `defše_hf_‹¡ ("/hå_hf/‹¡_unsÞic™ed_3", ‹¡_hf_unsÞic™ed , 810 hf_»suÉ_hªdËr , NULL , 811 `¿w_pdu ('+', 'C', 'L', 'C', 'C', '\0'), 812 `äg_pdu ('\r'), frg_pdu('\n'), frg_pdu('+'), 813 `äg_pdu ('C'), frg_pdu('L'), frg_pdu('C'), frg_pdu('C'), 814 `äg_pdu (':'), frg_pdu('1'), frg_pdu(','), frg_pdu('3'), 815 `äg_pdu (','), frg_pdu('0'), frg_pdu('\r'), 816 `äg_pdu ('\n'), 817 `d©a_’d ()); 819 `defše_hf_‹¡ ("/hå_hf/‹¡_cÜru±ed_1", ‹¡_hf_unsÞic™ed , 820 hf_»suÉ_hªdËr , NULL , 821 `¿w_pdu ('+', 'C', 'L', 'C', 'C', '\0'), 822 `äg_pdu ('\r', 'X', '\r', '\n'), 823 `äg_pdu ('+', 'C', 'L', 'C', 'C', ':', '1', ',', '3'), 824 `äg_pdu (',', '0', '\r', '\n'), 825 `d©a_’d ()); 827 `defše_hf_‹¡ ("/hå_hf/‹¡_cÜru±ed_2", ‹¡_hf_unsÞic™ed , 828 hf_»suÉ_hªdËr , NULL , 829 `¿w_pdu ('+', 'C', 'L', 'C', 'C', '\0'), 830 `¿w_pdu ('+', 'C', 'L', 'C', 'C', '\r', '\n'), 831 `d©a_’d ()); 833 `defše_hf_‹¡ ("/hå_hf/‹¡_em±y", ‹¡_hf_robu¡Ãss , NULL , NULL, 834 `¿w_pdu ('\r'), `d©a_’d ()); 836 `defše_hf_‹¡ ("/hå_hf/‹¡_unknown", ‹¡_hf_robu¡Ãss , NULL , NULL, 837 `¿w_pdu ('\r', '\n', 'B', 'R', '\r', '\n'), 838 `d©a_’d ()); 840 `defše_hf_‹¡ ("/hå_hf/‹¡_cÚ‹xt_·r£r_1", ‹¡_hf_unsÞic™ed , 841 hf_þcc_»suÉ_hªdËr , NULL , 842 `¿w_pdu ('+', 'C', 'L', 'C', 'C', '\0'), 843 `äg_pdu ('+', 'C', 'L', 'C', 'C', ':'), 844 `äg_pdu ('(', '\"', 'c', 'a', 'l', 'l', '\"'), 845 `äg_pdu ('(', '0', ',', '1', ')', ')', ','), 846 `äg_pdu ('(', '\"', 'c', 'a', 'l', 'l', 's', 'e', 't'), 847 `äg_pdu ('u', 'p', '\"', ',', '(', '0', '-', '3', ')'), 848 `äg_pdu (')', '\r', '\n'), 849 `d©a_’d ()); 851 `defše_hf_‹¡ ("/hå_hf/‹¡_cÚ‹xt_·r£r_2", ‹¡_hf_unsÞic™ed , 852 hf_chld_»suÉ_hªdËr , NULL , 853 `¿w_pdu ('+', 'C', 'H', 'L', 'D', '\0'), 854 `äg_pdu ('+', 'C', 'H', 'L', 'D', ':'), 855 `äg_pdu ('1', ',', '2', 'x', '\r', '\n'), 856 `d©a_’d ()); 858 `defše_hf_‹¡ ("/hå_hf/‹¡_cÚ‹xt_sk_f›ld", ‹¡_hf_unsÞic™ed , 859 hf_chld_sk_f›ld , NULL , 860 `¿w_pdu ('+', 'C', 'H', 'L', 'D', '\0'), 861 `äg_pdu ('+', 'C', 'H', 'L', 'D', ':'), 862 `äg_pdu ('1', ',', '2', 'x', '\r', '\n'), 863 `d©a_’d ()); 865  `g_‹¡_run (); 866 } } @unit/test-lib.c 25 #ifdeà HAVE_CONFIG_H 26  ~"cÚfig.h " 29  ~ 30  ~<¡dlib.h > 31  ~<”ºo.h > 33  ~"¤c/sh¬ed/utž.h " 35  ~"lib/sdp.h " 36  ~"lib/sdp_lib.h " 38  $‹¡_Áoh64 () 40 ušt64_t ‹¡ = 0x123456789abcdef; 42 `g_as£¹ ( `Áoh64 ( ‹¡ è=ð `be64toh (test)); 43 `g_as£¹ ( `Áoh64 ( ‹¡ è=ð `be64_to_ýu (test)); 44 } } 46  $‹¡_htÚ64 () 48 ušt64_t ‹¡ = 0x123456789abcdef; 50 `g_as£¹ ( `htÚ64 ( ‹¡ è=ð `htobe64 (test)); 51 `g_as£¹ ( `htÚ64 ( ‹¡ è=ð `ýu_to_be64 (test)); 52 } } 54  $‹¡_sdp_g‘_acûss_´Ùos_v®id () 56 sdp_»cÜd_t * »c ; 57 sdp_li¡_t * ­rÙo , * ­£q , * ´Ùo [2]; 58 cÚ¡ ušt8_t u8 = 1; 59 uuid_t l2ÿp , rfcomm ; 60 sdp_d©a_t * chªÃl ; 61  ”r ; 63 »c = `sdp_»cÜd_®loc (); 64 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 65 ´Ùo [0] = `sdp_li¡_­³nd ( NULL , & l2ÿp ); 66 ­£q = `sdp_li¡_­³nd ( NULL , ´Ùo [0]); 68 `sdp_uuid16_ü—‹ (& rfcomm , RFCOMM_UUID ); 69 ´Ùo [1] = `sdp_li¡_­³nd ( NULL , & rfcomm ); 70 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & u8 ); 71 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 72 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 74 ­rÙo = `sdp_li¡_­³nd ( NULL , ­£q ); 75 `sdp_£t_acûss_´Ùos ( »c , ­rÙo ); 76 `sdp_£t_add_acûss_´Ùos ( »c , ­rÙo ); 77 `sdp_d©a_ä“ ( chªÃl ); 78 `sdp_li¡_ä“ ( ´Ùo [0], NULL ); 79 `sdp_li¡_ä“ ( ´Ùo [1], NULL ); 80 `sdp_li¡_ä“ ( ­£q , NULL ); 81 `sdp_li¡_ä“ ( ­rÙo , NULL ); 83 ”r = `sdp_g‘_acûss_´Ùos ( »c , & ­rÙo ); 84 `g_as£¹ ( ”r == 0); 85 `sdp_li¡_fÜ—ch ( ­rÙo , ( sdp_li¡_func_t è sdp_li¡_ä“ , NULL ); 86 `sdp_li¡_ä“ ( ­rÙo , NULL ); 88 ”r = `sdp_g‘_add_acûss_´Ùos ( »c , & ­rÙo ); 89 `g_as£¹ ( ”r == 0); 90 `sdp_li¡_fÜ—ch ( ­rÙo , ( sdp_li¡_func_t è sdp_li¡_ä“ , NULL ); 91 `sdp_li¡_ä“ ( ­rÙo , NULL ); 93 `sdp_»cÜd_ä“ ( »c ); 94 } } 96  $‹¡_sdp_g‘_acûss_´Ùos_nod©a () 98 sdp_»cÜd_t * »c ; 99 sdp_li¡_t * ­rÙo ; 100  ”r ; 102 »c = `sdp_»cÜd_®loc (); 104 ”r = `sdp_g‘_acûss_´Ùos ( »c , & ­rÙo ); 105 `g_as£¹ ( ”r =ð-1 && ”ºo =ð ENODATA ); 107 ”r = `sdp_g‘_add_acûss_´Ùos ( »c , & ­rÙo ); 108 `g_as£¹ ( ”r =ð-1 && ”ºo =ð ENODATA ); 110 `sdp_»cÜd_ä“ ( »c ); 111 } } 113  $‹¡_sdp_g‘_acûss_´Ùos_šv®id_dtd1 () 115 cÚ¡ ušt32_t u32 = 0xdeadbeeb; 116 sdp_»cÜd_t * »c ; 117 sdp_li¡_t * ­rÙo ; 118 sdp_d©a_t * d©a ; 119  ”r ; 121 »c = `sdp_»cÜd_®loc (); 123 d©a = `sdp_d©a_®loc ( SDP_UINT32 , & u32 ); 124 `g_as£¹ ( d©a !ð NULL ); 125 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_PROTO_DESC_LIST , d©a ); 127 ”r = `sdp_g‘_acûss_´Ùos ( »c , & ­rÙo ); 128 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 130 d©a = `sdp_d©a_®loc ( SDP_UINT32 , & u32 ); 131 `g_as£¹ ( d©a !ð NULL ); 132 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_ADD_PROTO_DESC_LIST , d©a ); 134 ”r = `sdp_g‘_add_acûss_´Ùos ( »c , & ­rÙo ); 135 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 137 `sdp_»cÜd_ä“ ( »c ); 138 } } 140  $‹¡_sdp_g‘_acûss_´Ùos_šv®id_dtd2 () 142 ušt8_t dtd = SDP_UINT8 , u8 = 0xff; 143 * dtds = & dtd , * v®ues = & u8 ; 144 sdp_»cÜd_t * »c ; 145 sdp_li¡_t * ­rÙo ; 146 sdp_d©a_t * d©a ; 147  ”r ; 149 »c = `sdp_»cÜd_®loc (); 151 d©a = `sdp_£q_®loc (& dtds , & v®ues , 1); 152 `g_as£¹ ( d©a !ð NULL ); 153 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_PROTO_DESC_LIST , d©a ); 155 ”r = `sdp_g‘_acûss_´Ùos ( »c , & ­rÙo ); 156 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 158 d©a = `sdp_£q_®loc (& dtds , & v®ues , 1); 159 `g_as£¹ ( d©a !ð NULL ); 160 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_ADD_PROTO_DESC_LIST , d©a ); 162 ”r = `sdp_g‘_add_acûss_´Ùos ( »c , & ­rÙo ); 163 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 165 `sdp_»cÜd_ä“ ( »c ); 166 } } 168  $‹¡_sdp_g‘_Ïng_©Œ_v®id () 170 sdp_»cÜd_t * »c ; 171 sdp_li¡_t * li¡ ; 172  ”r ; 174 »c = `sdp_»cÜd_®loc (); 175 `sdp_add_Ïng_©Œ ( »c ); 177 ”r = `sdp_g‘_Ïng_©Œ ( »c , & li¡ ); 178 `g_as£¹ ( ”r == 0); 180 `sdp_li¡_ä“ ( li¡ , ä“ ); 181 `sdp_»cÜd_ä“ ( »c ); 182 } } 184  $‹¡_sdp_g‘_Ïng_©Œ_nod©a () 186 sdp_»cÜd_t * »c ; 187 sdp_li¡_t * li¡ ; 188  ”r ; 190 »c = `sdp_»cÜd_®loc (); 192 ”r = `sdp_g‘_Ïng_©Œ ( »c , & li¡ ); 193 `g_as£¹ ( ”r =ð-1 && ”ºo =ð ENODATA ); 195 `sdp_»cÜd_ä“ ( »c ); 196 } } 198  $‹¡_sdp_g‘_Ïng_©Œ_šv®id_dtd () 200 ušt8_t dtd1 = SDP_UINT16 , dtd2 = SDP_UINT32 ; 201 ušt32_t u32 = 0xdeadbeeb; 202 ušt16_t u16 = 0x1234; 203 * dtds1 [] = { & dtd1 , & dtd2 , &dtd2 }; 204 * v®ues1 [] = { & u16 , & u32 , &u32 }; 205 * dtds2 [] = { & dtd1 , &dtd1, & dtd2 }; 206 * v®ues2 [] = { & u16 , &u16, & u32 }; 207 sdp_»cÜd_t * »c ; 208 sdp_d©a_t * d©a ; 209 sdp_li¡_t * li¡ ; 210  ”r ; 212 »c = `sdp_»cÜd_®loc (); 215 d©a = `sdp_d©a_®loc ( SDP_UINT32 , & u32 ); 216 `g_as£¹ ( d©a !ð NULL ); 217 `sdp_©Œ_add ( »c , SDP_ATTR_LANG_BASE_ATTR_ID_LIST , d©a ); 218 ”r = `sdp_g‘_Ïng_©Œ ( »c , & li¡ ); 219 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 222 d©a = `sdp_£q_®loc (& dtds1 [1], & v®ues1 [1], 1); 223 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_LANG_BASE_ATTR_ID_LIST , d©a ); 224 ”r = `sdp_g‘_Ïng_©Œ ( »c , & li¡ ); 225 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 228 d©a = `sdp_£q_®loc ( dtds2 , v®ues2 , 2); 229 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_LANG_BASE_ATTR_ID_LIST , d©a ); 230 ”r = `sdp_g‘_Ïng_©Œ ( »c , & li¡ ); 231 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 234 d©a = `sdp_£q_®loc ( dtds1 , v®ues1 , 3); 235 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_LANG_BASE_ATTR_ID_LIST , d©a ); 236 ”r = `sdp_g‘_Ïng_©Œ ( »c , & li¡ ); 237 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 240 d©a = `sdp_£q_®loc ( dtds2 , v®ues2 , 3); 241 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_LANG_BASE_ATTR_ID_LIST , d©a ); 242 ”r = `sdp_g‘_Ïng_©Œ ( »c , & li¡ ); 243 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 245 `sdp_»cÜd_ä“ ( »c ); 246 } } 248  $‹¡_sdp_g‘_´ofže_descs_v®id () 250 sdp_´ofže_desc_t ´ofže ; 251 sdp_»cÜd_t * »c ; 252 sdp_li¡_t * li¡ ; 253  ”r ; 255 »c = `sdp_»cÜd_®loc (); 257 `sdp_uuid16_ü—‹ (& ´ofže . uuid , NAP_PROFILE_ID ); 258 ´ofže . v”siÚ = 0x0100; 259 li¡ = `sdp_li¡_­³nd ( NULL , & ´ofže ); 260 ”r = `sdp_£t_´ofže_descs ( »c , li¡ ); 261 `sdp_li¡_ä“ ( li¡ , NULL ); 262 `g_as£¹ ( ”r == 0); 264 li¡ = NULL ; 265 ”r = `sdp_g‘_´ofže_descs ( »c , & li¡ ); 266 `sdp_li¡_ä“ ( li¡ , ä“ ); 267 `g_as£¹ ( ”r =ð0 && li¡ !ð NULL ); 269 `sdp_»cÜd_ä“ ( »c ); 270 } } 272  $‹¡_sdp_g‘_´ofže_descs_nod©a () 274 sdp_»cÜd_t * »c ; 275 sdp_li¡_t * li¡ ; 276  ”r ; 278 »c = `sdp_»cÜd_®loc (); 280 ”r = `sdp_g‘_´ofže_descs ( »c , & li¡ ); 281 `g_as£¹ ( ”r =ð-1 && ”ºo =ð ENODATA ); 283 `sdp_»cÜd_ä“ ( »c ); 284 } } 286  $‹¡_sdp_g‘_´ofže_descs_šv®id_dtd () 288 ušt8_t dtd1 = SDP_UUID16 , dtd2 = SDP_UINT32 ; 289 ušt32_t u32 = 0xdeadbeeb; 290 ušt16_t u16 = 0x1234; 291 * dtds [1], * v®ues [1]; 292 * dtds2 [] = { & dtd1 , & dtd2 }; 293 * v®ues2 [] = { & u16 , & u32 }; 294 sdp_»cÜd_t * »c ; 295 sdp_d©a_t * d©a ; 296 sdp_li¡_t * li¡ ; 297  ”r ; 299 »c = `sdp_»cÜd_®loc (); 302 d©a = `sdp_d©a_®loc ( SDP_UINT32 , & u32 ); 303 `g_as£¹ ( d©a !ð NULL ); 304 `sdp_©Œ_add ( »c , SDP_ATTR_PFILE_DESC_LIST , d©a ); 305 ”r = `sdp_g‘_´ofže_descs ( »c , & li¡ ); 306 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 309 d©a = `sdp_£q_®loc ( NULL , NULL, 0); 310 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_PFILE_DESC_LIST , d©a ); 311 ”r = `sdp_g‘_´ofže_descs ( »c , & li¡ ); 312 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 315 d©a = `sdp_£q_®loc (& dtds2 [1], & v®ues2 [1], 1); 316 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_PFILE_DESC_LIST , d©a ); 317 ”r = `sdp_g‘_´ofže_descs ( »c , & li¡ ); 318 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 321 d©a = `sdp_£q_®loc ( NULL , NULL, 0); 322 dtds [0] = & d©a -> dtd ; 323 v®ues [0] = d©a ; 324 d©a = `sdp_£q_®loc ( dtds , v®ues , 1); 325 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_PFILE_DESC_LIST , d©a ); 326 ”r = `sdp_g‘_´ofže_descs ( »c , & li¡ ); 327 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 330 d©a = `sdp_£q_®loc (& dtds2 [1], & v®ues2 [1], 1); 331 dtds [0] = & d©a -> dtd ; 332 v®ues [0] = d©a ; 333 d©a = `sdp_£q_®loc ( dtds , v®ues , 1); 334 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_PFILE_DESC_LIST , d©a ); 335 ”r = `sdp_g‘_´ofže_descs ( »c , & li¡ ); 336 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 339 d©a = `sdp_£q_®loc ( dtds2 , v®ues2 , 1); 340 dtds [0] = & d©a -> dtd ; 341 v®ues [0] = d©a ; 342 d©a = `sdp_£q_®loc ( dtds , v®ues , 1); 343 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_PFILE_DESC_LIST , d©a ); 344 ”r = `sdp_g‘_´ofže_descs ( »c , & li¡ ); 345 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 348 d©a = `sdp_£q_®loc ( dtds2 , v®ues2 , 2); 349 dtds [0] = & d©a -> dtd ; 350 v®ues [0] = d©a ; 351 d©a = `sdp_£q_®loc ( dtds , v®ues , 1); 352 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_PFILE_DESC_LIST , d©a ); 353 ”r = `sdp_g‘_´ofže_descs ( »c , & li¡ ); 354 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 356 `sdp_»cÜd_ä“ ( »c ); 357 } } 359  $‹¡_sdp_g‘_´ofže_descs_wÜk¬ound () 361 ušt8_t dtd1 = SDP_UUID16 , dtd2 = SDP_UINT16 , dtd3 = SDP_UINT32 ; 362 ušt16_t u16 = 0x1234; 363 ušt32_t u32 = 0xdeadbeeb; 364 * dtds [] = { & dtd1 , & dtd2 }; 365 * v®ues [] = { & u16 , &u16 }; 366 * dtds2 [] = { & dtd1 , & dtd3 }; 367 * v®ues2 [] = { & u16 , & u32 }; 368 sdp_»cÜd_t * »c ; 369 sdp_d©a_t * d©a ; 370 sdp_li¡_t * li¡ ; 371  ”r ; 373 »c = `sdp_»cÜd_®loc (); 376 d©a = `sdp_£q_®loc ( dtds , v®ues , 1); 377 `sdp_©Œ_add ( »c , SDP_ATTR_PFILE_DESC_LIST , d©a ); 378 li¡ = NULL ; 379 ”r = `sdp_g‘_´ofže_descs ( »c , & li¡ ); 380 `sdp_li¡_ä“ ( li¡ , ä“ ); 381 `g_as£¹ ( ”r =ð0 && li¡ !ð NULL ); 384 d©a = `sdp_£q_®loc ( dtds , v®ues , 2); 385 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_PFILE_DESC_LIST , d©a ); 386 li¡ = NULL ; 387 ”r = `sdp_g‘_´ofže_descs ( »c , & li¡ ); 388 `sdp_li¡_ä“ ( li¡ , ä“ ); 389 `g_as£¹ ( ”r =ð0 && li¡ !ð NULL ); 392 d©a = `sdp_£q_®loc ( dtds , v®ues , 1); 393 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_PFILE_DESC_LIST , d©a ); 394 li¡ = NULL ; 395 ”r = `sdp_g‘_´ofže_descs ( »c , & li¡ ); 396 `sdp_li¡_ä“ ( li¡ , ä“ ); 397 `g_as£¹ ( ”r =ð0 && li¡ !ð NULL ); 400 d©a = `sdp_£q_®loc ( dtds2 , v®ues2 , 2); 401 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_PFILE_DESC_LIST , d©a ); 402 li¡ = NULL ; 403 ”r = `sdp_g‘_´ofže_descs ( »c , & li¡ ); 404 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 406 `sdp_»cÜd_ä“ ( »c ); 407 } } 409  $‹¡_sdp_g‘_£rv”_v” () 411 ušt16_t u16 = 0x1234; 412 ušt32_t u32 = 0xdeadbeeb; 413 ušt8_t dtd1 = SDP_UINT16 , dtd2 = SDP_UINT32 ; 414 * dtds1 [] = { & dtd1 }; 415 * v®ues1 [] = { & u16 }; 416 * dtds2 [] = { & dtd2 }; 417 * v®ues2 [] = { & u32 }; 418 sdp_»cÜd_t * »c ; 419 sdp_d©a_t * d©a ; 420 sdp_li¡_t * li¡ ; 421  ”r ; 423 »c = `sdp_»cÜd_®loc (); 425 ”r = `sdp_g‘_£rv”_v” ( »c , & li¡ ); 426 `g_as£¹ ( ”r =ð-1 && ”ºo =ð ENODATA ); 429 d©a = `sdp_£q_®loc ( dtds1 , v®ues1 , 1); 430 `sdp_©Œ_add ( »c , SDP_ATTR_VERSION_NUM_LIST , d©a ); 431 ”r = `sdp_g‘_£rv”_v” ( »c , & li¡ ); 432 `g_as£¹ ( ”r =ð0 && li¡ !ð NULL ); 433 `sdp_li¡_ä“ ( li¡ , NULL ); 436 d©a = `sdp_d©a_®loc ( SDP_UINT32 , & u32 ); 437 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_VERSION_NUM_LIST , d©a ); 438 ”r = `sdp_g‘_£rv”_v” ( »c , & li¡ ); 439 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 442 d©a = `sdp_£q_®loc ( NULL , NULL, 0); 443 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_VERSION_NUM_LIST , d©a ); 444 ”r = `sdp_g‘_£rv”_v” ( »c , & li¡ ); 445 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 448 d©a = `sdp_£q_®loc ( dtds2 , v®ues2 , 1); 449 `sdp_©Œ_»¶aû ( »c , SDP_ATTR_VERSION_NUM_LIST , d©a ); 450 ”r = `sdp_g‘_£rv”_v” ( »c , & li¡ ); 451 `g_as£¹ ( ”r =ð-1 && ”ºo =ð EINVAL ); 453 `sdp_»cÜd_ä“ ( »c ); 454 } } 456  $maš ( ¬gc , * ¬gv []) 458 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 460 `g_‹¡_add_func ("/lib/Áoh64", ‹¡_Áoh64 ); 461 `g_‹¡_add_func ("/lib/htÚ64", ‹¡_htÚ64 ); 463 `g_‹¡_add_func ("/lib/sdp_get_access_protos/valid", 464 ‹¡_sdp_g‘_acûss_´Ùos_v®id ); 465 `g_‹¡_add_func ("/lib/sdp_get_access_protos/nodata", 466 ‹¡_sdp_g‘_acûss_´Ùos_nod©a ); 467 `g_‹¡_add_func ("/lib/sdp_get_access_protos/invalid_dtd1", 468 ‹¡_sdp_g‘_acûss_´Ùos_šv®id_dtd1 ); 469 `g_‹¡_add_func ("/lib/sdp_get_access_protos/invalid_dtd2", 470 ‹¡_sdp_g‘_acûss_´Ùos_šv®id_dtd2 ); 472 `g_‹¡_add_func ("/lib/sdp_get_lang_attr/valid", 473 ‹¡_sdp_g‘_Ïng_©Œ_v®id ); 474 `g_‹¡_add_func ("/lib/sdp_get_lang_attr/nodata", 475 ‹¡_sdp_g‘_Ïng_©Œ_nod©a ); 476 `g_‹¡_add_func ("/lib/sdp_get_lang_attr/invalid_dtd", 477 ‹¡_sdp_g‘_Ïng_©Œ_šv®id_dtd ); 479 `g_‹¡_add_func ("/lib/sdp_get_profile_descs/valid", 480 ‹¡_sdp_g‘_´ofže_descs_v®id ); 481 `g_‹¡_add_func ("/lib/sdp_get_profile_descs/nodata", 482 ‹¡_sdp_g‘_´ofže_descs_nod©a ); 483 `g_‹¡_add_func ("/lib/sdp_get_profile_descs/invalid_dtd", 484 ‹¡_sdp_g‘_´ofže_descs_šv®id_dtd ); 486 `g_‹¡_add_func ("/lib/sdp_get_profile_descs/workaround", 487 ‹¡_sdp_g‘_´ofže_descs_wÜk¬ound ); 489 `g_‹¡_add_func ("/lib/sdp_g‘_£rv”_v”", ‹¡_sdp_g‘_£rv”_v” ); 491  `g_‹¡_run (); 492 } } @unit/test-mgmt.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dboÞ.h > 29  ~ 30  ~ 32  ~ 34  ~"lib/blu‘oÙh.h " 35  ~"lib/mgmt.h " 37  ~"¤c/sh¬ed/mgmt.h " 39  scÚ‹xt { 40 GMašLoÝ * mmaš_loÝ ; 41  mfd ; 42  mgmt * mmgmt_þ›Á ; 43 gušt m£rv”_sourû ; 44 GLi¡ * mhªdËr_li¡ ; 47 eaùiÚ { 48 mACTION_PASSED , 49 mACTION_IGNORE , 50 mACTION_RESPOND , 53  shªdËr { 54 cÚ¡ * mcmd_d©a ; 55 ušt16_t mcmd_size ; 56 cÚ¡ * mr¥_d©a ; 57 ušt16_t mr¥_size ; 58 ušt8_t mr¥_¡©us ; 59 boÞ mm©ch_´efix ; 60 aùiÚ maùiÚ ; 63  $mgmt_debug (cÚ¡ * ¡r , * u£r_d©a ) 65 cÚ¡ * ´efix = u£r_d©a ; 67 `g_´št ("%s%s\n", ´efix , ¡r ); 68 } } 70  $cÚ‹xt_qu™ ( cÚ‹xt *context) 72 `g_maš_loÝ_qu™ ( cÚ‹xt -> maš_loÝ ); 73 } } 75  $check_aùiÚs ( cÚ‹xt *cÚ‹xt,  fd , 76 cÚ¡ * d©a , ušt16_t size ) 78 GLi¡ * li¡ ; 80  li¡ = `g_li¡_fœ¡ ( cÚ‹xt -> hªdËr_li¡ );†ist; 81 li¡ = `g_li¡_Ãxt (list)) { 82  hªdËr *hªd˸ð li¡ -> d©a ; 83  »t ; 85 ià( hªdËr -> m©ch_´efix ) { 86 ià( size < hªdËr -> cmd_size ) 89 ià( size !ð hªdËr -> cmd_size ) 93 ià( `memcmp ( d©a , hªdËr -> cmd_d©a , hªdËr-> cmd_size )) 96  hªdËr -> aùiÚ ) { 97  ACTION_PASSED : 98 `cÚ‹xt_qu™ ( cÚ‹xt ); 100  ACTION_RESPOND : 101 »t = `wr™e ( fd , hªdËr -> r¥_d©a , hªdËr-> r¥_size ); 102 `g_as£¹ ( »t >= 0); 104  ACTION_IGNORE : 109 `g_‹¡_mes§ge ("Command‚ot handled\n"); 110 `g_as£¹_nÙ_»ached (); 111 } } 113  gboÞ—n $£rv”_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 114 gpoš‹r u£r_d©a ) 116  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 117  buf [512]; 118 ssize_t »suÉ ; 119  fd ; 121 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) 122  FALSE ; 124 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 126 »suÉ = `»ad ( fd , buf , (buf)); 127 ià( »suÉ < 0) 128  FALSE ; 130 `check_aùiÚs ( cÚ‹xt , fd , buf , »suÉ ); 132  TRUE ; 133 } } 135  cÚ‹xt * $ü—‹_cÚ‹xt () 137  cÚ‹xt *cÚ‹xˆð `g_Ãw0 (context, 1); 138 GIOChªÃl * chªÃl ; 139  ”r , sv [2]; 141 cÚ‹xt -> maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 142 `g_as£¹ ( cÚ‹xt -> maš_loÝ ); 144 ”r = `sock‘·œ ( AF_UNIX , SOCK_SEQPACKET | SOCK_CLOEXEC , 0, sv ); 145 `g_as£¹ ( ”r == 0); 147 cÚ‹xt -> fd = sv [0]; 148 chªÃl = `g_io_chªÃl_unix_Ãw ( sv [0]); 150 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 151 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 152 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 154 cÚ‹xt -> £rv”_sourû = `g_io_add_w©ch ( chªÃl , 155 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 156 £rv”_hªdËr , cÚ‹xt ); 157 `g_as£¹ ( cÚ‹xt -> £rv”_sourû > 0); 159 `g_io_chªÃl_uÄef ( chªÃl ); 161 cÚ‹xt -> mgmt_þ›Á = `mgmt_Ãw ( sv [1]); 162 `g_as£¹ ( cÚ‹xt -> mgmt_þ›Á ); 164 ià( `g_‹¡_v”bo£ (è=ð TRUE ) 165 `mgmt_£t_debug ( cÚ‹xt -> mgmt_þ›Á , 166 mgmt_debug , "mgmt: ", NULL ); 168 `mgmt_£t_þo£_Ú_uÄef ( cÚ‹xt -> mgmt_þ›Á , Œue ); 170  cÚ‹xt ; 171 } } 173  $execu‹_cÚ‹xt ( cÚ‹xt *context) 175 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 177 `g_li¡_ä“_fuÎ ( cÚ‹xt -> hªdËr_li¡ , g_ä“ ); 179 `g_sourû_»move ( cÚ‹xt -> £rv”_sourû ); 181 `mgmt_uÄef ( cÚ‹xt -> mgmt_þ›Á ); 183 `g_maš_loÝ_uÄef ( cÚ‹xt -> maš_loÝ ); 185 `g_ä“ ( cÚ‹xt ); 186 } } 188  $add_aùiÚ ( cÚ‹xt *context, 189 cÚ¡ * cmd_d©a , ušt16_t cmd_size , 190 cÚ¡ * r¥_d©a , ušt16_t r¥_size , 191 ušt8_t r¥_¡©us , boÞ m©ch_´efix , 192 aùiÚ ‡ction) 194  hªdËr *hªd˸ð `g_Ãw0 (handler, 1); 196 hªdËr -> cmd_d©a = cmd_data; 197 hªdËr -> cmd_size = cmd_size; 198 hªdËr -> r¥_d©a =„sp_data; 199 hªdËr -> r¥_size =„sp_size; 200 hªdËr -> r¥_¡©us =„sp_status; 201 hªdËr -> m©ch_´efix = match_prefix; 202 hªdËr -> aùiÚ =‡ction; 204 cÚ‹xt -> hªdËr_li¡ = `g_li¡_­³nd (cÚ‹xt->hªdËr_li¡, hªdËr ); 205 } } 207  scommªd_‹¡_d©a { 208 ušt16_t mÝcode ; 209 ušt16_t mšdex ; 210 ušt16_t mËngth ; 211 cÚ¡ * m·¿m ; 212 cÚ¡ * mcmd_d©a ; 213 ušt16_t mcmd_size ; 214 cÚ¡ * mr¥_d©a ; 215 ušt16_t mr¥_size ; 216 ušt8_t mr¥_¡©us ; 219 cÚ¡  g»ad_v”siÚ_commªd [] = 221 cÚ¡  g»ad_v”siÚ_»¥Ú£ [] = 225 cÚ¡  commªd_‹¡_d©a gcommªd_‹¡_1 = { 226 . Ýcode = MGMT_OP_READ_VERSION , 227 . gšdex = MGMT_INDEX_NONE , 228 . gcmd_d©a = »ad_v”siÚ_commªd , 229 . gcmd_size = ( »ad_v”siÚ_commªd ), 230 . gr¥_d©a = »ad_v”siÚ_»¥Ú£ , 231 . gr¥_size = ( »ad_v”siÚ_»¥Ú£ ), 232 . gr¥_¡©us = MGMT_STATUS_SUCCESS , 235 cÚ¡  g»ad_šfo_commªd [] = 238 cÚ¡  commªd_‹¡_d©a gcommªd_‹¡_2 = { 239 . Ýcode = MGMT_OP_READ_INFO , 240 . gšdex = 512, 241 . gcmd_d©a = »ad_šfo_commªd , 242 . gcmd_size = ( »ad_šfo_commªd ), 245 cÚ¡  gšv®id_šdex_»¥Ú£ [] = 249 cÚ¡  commªd_‹¡_d©a gcommªd_‹¡_3 = { 250 . Ýcode = MGMT_OP_READ_VERSION , 251 . gšdex = MGMT_INDEX_NONE , 252 . gcmd_d©a = »ad_v”siÚ_commªd , 253 . gcmd_size = ( »ad_v”siÚ_commªd ), 254 . gr¥_d©a = šv®id_šdex_»¥Ú£ , 255 . gr¥_size = ( šv®id_šdex_»¥Ú£ ), 256 . gr¥_¡©us = MGMT_STATUS_INVALID_INDEX , 259 cÚ¡  gev’t_šdex_added [] = 262 cÚ¡  commªd_‹¡_d©a gev’t_‹¡_1 = { 263 . Ýcode = MGMT_EV_INDEX_ADDED , 264 . gšdex = MGMT_INDEX_NONE , 265 . gcmd_d©a = ev’t_šdex_added , 266 . gcmd_size = ( ev’t_šdex_added ), 269  $‹¡_commªd ( gcÚ¡poš‹r d©a ) 271 cÚ¡  commªd_‹¡_d©a * ‹¡ = d©a ; 272  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 274 `add_aùiÚ ( cÚ‹xt , ‹¡ -> cmd_d©a ,e¡-> cmd_size , 275 ‹¡ -> r¥_d©a ,e¡-> r¥_size ,e¡-> r¥_¡©us , 276 çl£ , ACTION_PASSED ); 278 `mgmt_£nd ( cÚ‹xt -> mgmt_þ›Á , ‹¡ -> Ýcode ,e¡-> šdex , 279 ‹¡ -> Ëngth ,e¡-> ·¿m , 280 NULL ,NULL, NULL); 282 `execu‹_cÚ‹xt ( cÚ‹xt ); 283 } } 285  $»¥Ú£_cb ( ušt8_t ¡©us , ušt16_t Ëngth , cÚ¡ * ·¿m , 286 * u£r_d©a ) 288  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 289  hªdËr *hªd˸ð cÚ‹xt -> hªdËr_li¡ -> d©a ; 291 `g_as£¹_cmpšt ( ¡©us , ==, hªdËr -> r¥_¡©us ); 293 `cÚ‹xt_qu™ ( cÚ‹xt ); 294 } } 296  $‹¡_»¥Ú£ ( gcÚ¡poš‹r d©a ) 298 cÚ¡  commªd_‹¡_d©a * ‹¡ = d©a ; 299  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 301 `add_aùiÚ ( cÚ‹xt , ‹¡ -> cmd_d©a ,e¡-> cmd_size , 302 ‹¡ -> r¥_d©a ,e¡-> r¥_size ,e¡-> r¥_¡©us , 303 çl£ , ACTION_RESPOND ); 305 `mgmt_£nd ( cÚ‹xt -> mgmt_þ›Á , ‹¡ -> Ýcode ,e¡-> šdex , 306 ‹¡ -> Ëngth ,e¡-> ·¿m , 307 »¥Ú£_cb , cÚ‹xt , NULL ); 309 `execu‹_cÚ‹xt ( cÚ‹xt ); 310 } } 312  $ev’t_cb ( ušt16_t šdex , ušt16_ˆ Ëngth , cÚ¡ * ·¿m , 313 * u£r_d©a ) 315  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 317 ià( `g_‹¡_v”bo£ ()) 318 `´štf ("Event„eceived\n"); 320 `cÚ‹xt_qu™ ( cÚ‹xt ); 321 } } 323  $‹¡_ev’t ( gcÚ¡poš‹r d©a ) 325 cÚ¡  commªd_‹¡_d©a * ‹¡ = d©a ; 326  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 328 `mgmt_»gi¡” ( cÚ‹xt -> mgmt_þ›Á , ‹¡ -> Ýcode ,e¡-> šdex , 329 ev’t_cb , cÚ‹xt , NULL ); 331 `g_as£¹_cmpšt ( `wr™e ( cÚ‹xt -> fd , ‹¡ -> cmd_d©a ,e¡-> cmd_size ), ==, 332 ‹¡ -> cmd_size ); 334 `execu‹_cÚ‹xt ( cÚ‹xt ); 335 } } 337  $‹¡_ev’t2 ( gcÚ¡poš‹r d©a ) 339 cÚ¡  commªd_‹¡_d©a * ‹¡ = d©a ; 340  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 342 `mgmt_»gi¡” ( cÚ‹xt -> mgmt_þ›Á , ‹¡ -> Ýcode ,e¡-> šdex , 343 ev’t_cb , cÚ‹xt , NULL ); 344 `mgmt_»gi¡” ( cÚ‹xt -> mgmt_þ›Á , ‹¡ -> Ýcode ,e¡-> šdex , 345 ev’t_cb , cÚ‹xt , NULL ); 347 `g_as£¹_cmpšt ( `wr™e ( cÚ‹xt -> fd , ‹¡ -> cmd_d©a ,e¡-> cmd_size ), ==, 348 ‹¡ -> cmd_size ); 350 `execu‹_cÚ‹xt ( cÚ‹xt ); 351 } } 353  $uÄegi¡”_®l_cb ( ušt16_t šdex , ušt16_ˆ Ëngth , 354 cÚ¡ * ·¿m , * u£r_d©a ) 356  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 358 `mgmt_uÄegi¡”_®l ( cÚ‹xt -> mgmt_þ›Á ); 360 `cÚ‹xt_qu™ ( cÚ‹xt ); 361 } } 363  $‹¡_uÄegi¡”_®l ( gcÚ¡poš‹r d©a ) 365 cÚ¡  commªd_‹¡_d©a * ‹¡ = d©a ; 366  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 368 `mgmt_»gi¡” ( cÚ‹xt -> mgmt_þ›Á , ‹¡ -> Ýcode ,e¡-> šdex , 369 uÄegi¡”_®l_cb , cÚ‹xt , NULL ); 370 `mgmt_»gi¡” ( cÚ‹xt -> mgmt_þ›Á , ‹¡ -> Ýcode ,e¡-> šdex , 371 ev’t_cb , cÚ‹xt , NULL ); 373 `g_as£¹_cmpšt ( `wr™e ( cÚ‹xt -> fd , ‹¡ -> cmd_d©a ,e¡-> cmd_size ), ==, 374 ‹¡ -> cmd_size ); 376 `execu‹_cÚ‹xt ( cÚ‹xt ); 377 } } 379  $uÄegi¡”_šdex_cb ( ušt16_t šdex , ušt16_ˆ Ëngth , 380 cÚ¡ * ·¿m , * u£r_d©a ) 382  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 384 `mgmt_uÄegi¡”_šdex ( cÚ‹xt -> mgmt_þ›Á , šdex ); 386 `cÚ‹xt_qu™ ( cÚ‹xt ); 387 } } 389  $de¡roy_cb ( ušt16_t šdex , ušt16_ˆ Ëngth , cÚ¡ * ·¿m , 390 * u£r_d©a ) 392  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 394 `mgmt_uÄef ( cÚ‹xt -> mgmt_þ›Á ); 395 cÚ‹xt -> mgmt_þ›Á = NULL ; 397 `cÚ‹xt_qu™ ( cÚ‹xt ); 398 } } 400  $‹¡_uÄegi¡”_šdex ( gcÚ¡poš‹r d©a ) 402 cÚ¡  commªd_‹¡_d©a * ‹¡ = d©a ; 403  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 405 `mgmt_»gi¡” ( cÚ‹xt -> mgmt_þ›Á , ‹¡ -> Ýcode ,e¡-> šdex , 406 uÄegi¡”_šdex_cb , cÚ‹xt , NULL ); 407 `mgmt_»gi¡” ( cÚ‹xt -> mgmt_þ›Á , ‹¡ -> Ýcode ,e¡-> šdex , 408 ev’t_cb , cÚ‹xt , NULL ); 410 `g_as£¹_cmpšt ( `wr™e ( cÚ‹xt -> fd , ‹¡ -> cmd_d©a ,e¡-> cmd_size ), ==, 411 ‹¡ -> cmd_size ); 413 `execu‹_cÚ‹xt ( cÚ‹xt ); 414 } } 416  $‹¡_de¡roy ( gcÚ¡poš‹r d©a ) 418 cÚ¡  commªd_‹¡_d©a * ‹¡ = d©a ; 419  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 421 `mgmt_»gi¡” ( cÚ‹xt -> mgmt_þ›Á , ‹¡ -> Ýcode ,e¡-> šdex , 422 de¡roy_cb , cÚ‹xt , NULL ); 423 `mgmt_»gi¡” ( cÚ‹xt -> mgmt_þ›Á , ‹¡ -> Ýcode ,e¡-> šdex , 424 ev’t_cb , cÚ‹xt , NULL ); 426 `g_as£¹_cmpšt ( `wr™e ( cÚ‹xt -> fd , ‹¡ -> cmd_d©a ,e¡-> cmd_size ), ==, 427 ‹¡ -> cmd_size ); 429 `execu‹_cÚ‹xt ( cÚ‹xt ); 430 } } 432  $maš ( ¬gc , * ¬gv []) 434 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 436 `g_‹¡_add_d©a_func ("/mgmt/commªd/1", & commªd_‹¡_1 , ‹¡_commªd ); 437 `g_‹¡_add_d©a_func ("/mgmt/commªd/2", & commªd_‹¡_2 , ‹¡_commªd ); 439 `g_‹¡_add_d©a_func ("/mgmt/»¥Ú£/1", & commªd_‹¡_1 , 440 ‹¡_»¥Ú£ ); 441 `g_‹¡_add_d©a_func ("/mgmt/»¥Ú£/2", & commªd_‹¡_3 , 442 ‹¡_»¥Ú£ ); 444 `g_‹¡_add_d©a_func ("/mgmt/ev’t/1", & ev’t_‹¡_1 , ‹¡_ev’t ); 445 `g_‹¡_add_d©a_func ("/mgmt/ev’t/2", & ev’t_‹¡_1 , ‹¡_ev’t2 ); 447 `g_‹¡_add_d©a_func ("/mgmt/uÄegi¡”/1", & ev’t_‹¡_1 , 448 ‹¡_uÄegi¡”_®l ); 449 `g_‹¡_add_d©a_func ("/mgmt/uÄegi¡”/2", & ev’t_‹¡_1 , 450 ‹¡_uÄegi¡”_šdex ); 452 `g_‹¡_add_d©a_func ("/mgmt/de¡roy/1", & ev’t_‹¡_1 , ‹¡_de¡roy ); 454  `g_‹¡_run (); 455 } } @unit/test-queue.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 30  ~"¤c/sh¬ed/utž.h " 31  ~"¤c/sh¬ed/queue.h " 33  $‹¡_basic () 35  queue *queue; 36  n , i ; 38 queue = `queue_Ãw (); 39 `g_as£¹ ( queue !ð NULL ); 41  n = 0;‚ < 1024;‚++) { 42  i = 1; i < n + 2; i++) 43 `queue_push_ž ( queue , `UINT_TO_PTR ( i )); 45 `g_as£¹ ( `queue_Ëngth ( queue è=ð n + 1); 47  i = 1; i < n + 2; i++) { 48 * ±r ; 50 ±r = `queue_pÝ_h—d ( queue ); 51 `g_as£¹ ( ±r !ð NULL ); 52 `g_as£¹ ( i =ð `PTR_TO_UINT ( ±r )); 55 `g_as£¹ ( `queue_i£m±y ( queue è=ð Œue ); 58 `queue_de¡roy ( queue , NULL ); 59 } } 61  $fÜ—ch_de¡roy (* d©a , * u£r_d©a ) 63  queue *queuð u£r_d©a ; 65 `queue_de¡roy ( queue , NULL ); 66 } } 68  $‹¡_fÜ—ch_de¡roy () 70  queue *queue; 72 queue = `queue_Ãw (); 73 `g_as£¹ ( queue !ð NULL ); 75 `queue_push_ž ( queue , `UINT_TO_PTR (1)); 76 `queue_push_ž ( queue , `UINT_TO_PTR (2)); 78 `queue_fÜ—ch ( queue , fÜ—ch_de¡roy , queue); 79 } } 81  $fÜ—ch_»move (* d©a , * u£r_d©a ) 83  queue *queuð u£r_d©a ; 85 `g_as£¹ ( `queue_»move ( queue , d©a )); 86 } } 88  $‹¡_fÜ—ch_»move () 90  queue *queue; 92 queue = `queue_Ãw (); 93 `g_as£¹ ( queue !ð NULL ); 95 `queue_push_ž ( queue , `UINT_TO_PTR (1)); 96 `queue_push_ž ( queue , `UINT_TO_PTR (2)); 98 `queue_fÜ—ch ( queue , fÜ—ch_»move , queue); 99 `queue_de¡roy ( queue , NULL ); 100 } } 102  $fÜ—ch_»move_®l (* d©a , * u£r_d©a ) 104  queue *queuð u£r_d©a ; 106 `queue_»move_®l ( queue , NULL , NULL, NULL); 107 } } 109  $‹¡_fÜ—ch_»move_®l () 111  queue *queue; 113 queue = `queue_Ãw (); 114 `g_as£¹ ( queue !ð NULL ); 116 `queue_push_ž ( queue , `UINT_TO_PTR (1)); 117 `queue_push_ž ( queue , `UINT_TO_PTR (2)); 119 `queue_fÜ—ch ( queue , fÜ—ch_»move_®l , queue); 120 `queue_de¡roy ( queue , NULL ); 121 } } 123  $fÜ—ch_»move_backw¬d (* d©a , * u£r_d©a ) 125  queue *queuð u£r_d©a ; 127 `queue_»move ( queue , `UINT_TO_PTR (2)); 128 `queue_»move ( queue , `UINT_TO_PTR (1)); 129 } } 131  $‹¡_fÜ—ch_»move_backw¬d () 133  queue *queue; 135 queue = `queue_Ãw (); 136 `g_as£¹ ( queue !ð NULL ); 138 `queue_push_ž ( queue , `UINT_TO_PTR (1)); 139 `queue_push_ž ( queue , `UINT_TO_PTR (2)); 141 `queue_fÜ—ch ( queue , fÜ—ch_»move_backw¬d , queue); 142 `queue_de¡roy ( queue , NULL ); 143 } } 145  queue * g¡©ic_queue ; 147  $de¡roy_»move (* u£r_d©a ) 149 `queue_»move ( ¡©ic_queue , u£r_d©a ); 150 } } 152  $‹¡_de¡roy_»move () 154 ¡©ic_queue = `queue_Ãw (); 156 `g_as£¹ ( ¡©ic_queue !ð NULL ); 158 `queue_push_ž ( ¡©ic_queue , `UINT_TO_PTR (1)); 159 `queue_push_ž ( ¡©ic_queue , `UINT_TO_PTR (2)); 161 `queue_de¡roy ( ¡©ic_queue , de¡roy_»move ); 162 } } 164  $‹¡_push_aá” () 166  queue *queue; 167  Ën , i ; 169 queue = `queue_Ãw (); 170 `g_as£¹ ( queue !ð NULL ); 176 `g_as£¹ ( `queue_push_ž ( queue , NULL )); 177 `g_as£¹ ( `queue_push_ž ( queue , `UINT_TO_PTR (2))); 178 `g_as£¹ ( `queue_push_ž ( queue , `UINT_TO_PTR (5))); 179 `g_as£¹ ( `queue_Ëngth ( queue ) == 3); 182 `g_as£¹ (! `queue_push_aá” ( queue , `UINT_TO_PTR (6), UINT_TO_PTR(1))); 185 `g_as£¹ ( `queue_push_aá” ( queue , NULL , `UINT_TO_PTR (1))); 186 `g_as£¹ ( `queue_push_aá” ( queue , `UINT_TO_PTR (2), UINT_TO_PTR(3))); 187 `g_as£¹ ( `queue_push_aá” ( queue , `UINT_TO_PTR (3), UINT_TO_PTR(4))); 188 `g_as£¹ ( `queue_push_aá” ( queue , `UINT_TO_PTR (5), UINT_TO_PTR(6))); 190 `g_as£¹ ( `queue_³ek_h—d ( queue è=ð NULL ); 191 `g_as£¹ ( `queue_³ek_ž ( queue è=ð `UINT_TO_PTR (6)); 197 Ën = `queue_Ëngth ( queue ); 198 `g_as£¹ ( Ën == 7); 200  i = 0; i < 7; i++) 201 `g_as£¹ ( `queue_pÝ_h—d ( queue è=ð `UINT_TO_PTR ( i )); 204 `g_as£¹ ( `queue_push_h—d ( queue , `UINT_TO_PTR (1))); 205 `g_as£¹ ( `queue_push_h—d ( queue , `UINT_TO_PTR (1))); 206 `g_as£¹ ( `queue_push_h—d ( queue , `UINT_TO_PTR (1))); 207 `g_as£¹ ( `queue_push_aá” ( queue , `UINT_TO_PTR (1), UINT_TO_PTR(0))); 209 `g_as£¹ ( `queue_pÝ_h—d ( queue è=ð `UINT_TO_PTR (1)); 210 `g_as£¹ ( `queue_pÝ_h—d ( queue è=ð `UINT_TO_PTR (0)); 211 `g_as£¹ ( `queue_pÝ_h—d ( queue è=ð `UINT_TO_PTR (1)); 212 `g_as£¹ ( `queue_pÝ_h—d ( queue è=ð `UINT_TO_PTR (1)); 214 `queue_de¡roy ( queue , NULL ); 215 } } 217  $maš ( ¬gc , * ¬gv []) 219 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 221 `g_‹¡_add_func ("/queue/basic", ‹¡_basic ); 222 `g_‹¡_add_func ("/queue/fÜ—ch_de¡roy", ‹¡_fÜ—ch_de¡roy ); 223 `g_‹¡_add_func ("/queue/fÜ—ch_»move", ‹¡_fÜ—ch_»move ); 224 `g_‹¡_add_func ("/queue/fÜ—ch_»move_®l", ‹¡_fÜ—ch_»move_®l ); 225 `g_‹¡_add_func ("/queue/foreach_remove_backward", 226 ‹¡_fÜ—ch_»move_backw¬d ); 227 `g_‹¡_add_func ("/queue/de¡roy_»move", ‹¡_de¡roy_»move ); 228 `g_‹¡_add_func ("/queue/push_aá”", ‹¡_push_aá” ); 230  `g_‹¡_run (); 231 } } @unit/test-ringbuf.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~<¡ršg.h > 30  ~<¡dšt.h > 32  ~ 34  ~"¤c/sh¬ed/ršgbuf.h " 36  $Æpo2 ( x ) 38 x --; 39 x |= (x >> 1); 40 x |= (x >> 2); 41 x |= (x >> 4); 42 x |= (x >> 8); 43 x |= (x >> 16); 44  x + 1; 45 } } 47  $æs ( x ) 49  x ? (xè* 8 - `__bužtš_þz (x) : 0; 50 } } 52  $®ign_pow”2 ( u ) 54  1 << `æs ( u - 1); 55 } } 57  $‹¡_pow”2 () 59 size_t i ; 61  i = 1; i < 1000000; i++) { 62 size_t size1 , size2 , size3 = 1; 64 size1 = `Æpo2 ( i ); 65 size2 = `®ign_pow”2 ( i ); 68  size3 < i && size3 < SIZE_MAX ) 69 size3 <<= 1; 71 ià( `g_‹¡_v”bo£ ()) 72 `g_´št ("%zu -> size1=%zu size2=%zu size3=%zu\n", 73 i , size1 , size2 , size3 ); 75 `g_as£¹ ( size1 =ð size2 ); 76 `g_as£¹ ( size2 =ð size3 ); 77 `g_as£¹ ( size3 =ð size1 ); 79 } } 81  $‹¡_®loc () 83  i ; 85  i = 2; i < 10000; i++) { 86  ršgbuf * rb ; 88 ià( `g_‹¡_v”bo£ ()) 89 `g_´št ("I‹¿tiÚ %i\n", i ); 91 rb = `ršgbuf_Ãw ( i ); 92 `g_as£¹ ( rb !ð NULL ); 94 `g_as£¹ ( `ršgbuf_ÿ·c™y ( rb è=ð `ršgbuf_avaž (rb)); 96 `ršgbuf_ä“ ( rb ); 98 } } 100  $‹¡_´štf () 102  size_t rb_size = 500; 103  size_t rb_ÿ· = 512; 104  ršgbuf * rb ; 105  i ; 107 rb = `ršgbuf_Ãw ( rb_size ); 108 `g_as£¹ ( rb !ð NULL ); 109 `g_as£¹ ( `ršgbuf_ÿ·c™y ( rb è=ð rb_ÿ· ); 111  i = 0; i < 10000; i++) { 112 size_t Ën , couÁ = i % rb_ÿ· ; 113 * ¡r , * ±r ; 115 ià(! couÁ ) 118 ià( `g_‹¡_v”bo£ ()) 119 `g_´št ("I‹¿tiÚ %i\n", i ); 121 Ën = `a¥rštf (& ¡r , "%*c", (è couÁ , 'x'); 122 `g_as£¹ ( Ën =ð couÁ ); 124 Ën = `ršgbuf_´štf ( rb , "%s", ¡r ); 125 `g_as£¹ ( Ën =ð couÁ ); 126 `g_as£¹ ( `ršgbuf_Ën ( rb è=ð couÁ ); 127 `g_as£¹ ( `ršgbuf_avaž ( rb è=ð rb_ÿ· - Ën ); 129 ±r = `ršgbuf_³ek ( rb , 0, & Ën ); 130 `g_as£¹ ( ±r !ð NULL ); 131 `g_as£¹ ( Ën =ð couÁ ); 132 `g_as£¹ ( `¡ºcmp ( ¡r , ±r , Ën ) == 0); 134 Ën = `ršgbuf_d¿š ( rb , couÁ ); 135 `g_as£¹ ( Ën =ð couÁ ); 136 `g_as£¹ ( `ršgbuf_Ën ( rb ) == 0); 137 `g_as£¹ ( `ršgbuf_avaž ( rb è=ð rb_ÿ· ); 139 `ä“ ( ¡r ); 142 `ršgbuf_ä“ ( rb ); 143 } } 145  $maš ( ¬gc , * ¬gv []) 147 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 149 `g_‹¡_add_func ("/ršgbuf/pow”2", ‹¡_pow”2 ); 150 `g_‹¡_add_func ("/ršgbuf/®loc", ‹¡_®loc ); 151 `g_‹¡_add_func ("/ršgbuf/´štf", ‹¡_´štf ); 153  `g_‹¡_run (); 154 } } @unit/test-sdp.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~<¡dlib.h > 30  ~<¡dboÞ.h > 31  ~ 33  ~ 35  ~"lib/blu‘oÙh.h " 36  ~"lib/sdp.h " 37  ~"lib/sdp_lib.h " 39  ~"¤c/sh¬ed/utž.h " 40  ~"¤c/log.h " 41  ~"¤c/sdpd.h " 43  ssdp_pdu { 44 boÞ mv®id ; 45 cÚ¡ * m¿w_d©a ; 46 size_t m¿w_size ; 47 ušt8_t mcÚt_Ën ; 50  s‹¡_d©a { 51  mmtu ; 52  sdp_pdu * mpdu_li¡ ; 55  #¿w_d©a ( ¬gs ...è((cÚ¡ []è{‡rg }) ) 56  #bužd_u128 ( ¬gs ...è((cÚ¡ ušt128_t è{ . d©a = {‡rg } }) ) 58  #¿w_pdu ( ¬gs ...) \ 60 . v®id = Œue , \ 61 . ¿w_d©a = `¿w_d©a ( ¬gs ), \ 62 . ¿w_size = ( `¿w_d©a ( ¬gs )), \ 63 } ) 65  #¿w_pdu_cÚt ( cÚt , ¬gs ...) \ 67 . v®id = Œue , \ 68 . ¿w_d©a = `¿w_d©a ( ¬gs ), \ 69 . ¿w_size = ( `¿w_d©a ( ¬gs )), \ 70 . cÚt_Ën = cÚt , \ 71 } ) 73  #defše_‹¡ ( Çme , _mtu , ¬gs ...) \ 75 cÚ¡  sdp_pdu pdus [] = { \ 76 ¬gs , { } \ 78  ‹¡_d©a d©a ; \ 79 d©a . mtu = _mtu ; \ 80 d©a . pdu_li¡ = `g_m®loc (( pdus )); \ 81 `memýy ( d©a . pdu_li¡ , pdus , (pdus)); \ 82 `g_‹¡_add_d©a_func ( Çme , & d©a , ‹¡_sdp ); \ 83 } 0) ) 85  #defše_ss ( Çme , ¬gs ...è `defše_‹¡ ("/TP/SERVER/SS/"‚ame, 48,‡rgs) ) 86  #defše_§ ( Çme , ¬gs ...è `defše_‹¡ ("/TP/SERVER/SA/"‚ame, 48,‡rgs) ) 87  #defše_s§ ( Çme , ¬gs ...è `defše_‹¡ ("/TP/SERVER/SSA/"‚ame, 48,‡rgs) ) 88  #defše_brw ( Çme , ¬gs ...è `defše_‹¡ ("/TP/SERVER/BRW/"‚ame, 672,‡rgs) ) 91  s‹¡_d©a_de { 92 cÚ¡ * mšput_d©a ; 93 size_t mšput_size ; 94 sdp_d©a_t mex³ùed ; 97  #exp_d©a ( _dtd , v®_ty³ , v®_d©a ) \ 98 ((cÚ¡ sdp_d©a_t ) { \ 99 . dtd = _dtd , \ 100 . v® . v®_ty³ = v®_d©a , \ 101 }) ) 103  #defše_‹¡_de_©Œ ( Çme , šput , exp ) \ 105  ‹¡_d©a_de d©a ; \ 106 d©a . šput_d©a = šput ; \ 107 d©a . šput_size = ( šput ); \ 108 d©a . ex³ùed = exp ; \ 109 `g_‹¡_add_d©a_func ("/sdp/DE/ATTR/" Çme , & d©a , \ 110 ‹¡_sdp_de_©Œ ); \ 111 } 0) ) 113  scÚ‹xt { 114 GMašLoÝ * mmaš_loÝ ; 115 gušt m£rv”_sourû ; 116 gušt mþ›Á_sourû ; 117  mfd ; 118  mmtu ; 119 ušt8_t mcÚt_d©a [16]; 120 ušt8_t mcÚt_size ; 121  mpdu_off£t ; 122 cÚ¡  sdp_pdu * mpdu_li¡ ; 125  $sdp_debug (cÚ¡ * ¡r , * u£r_d©a ) 127 cÚ¡ * ´efix = u£r_d©a ; 129 `g_´št ("%s%s\n", ´efix , ¡r ); 130 } } 132  $cÚ‹xt_qu™ ( cÚ‹xt *context) 134 `g_maš_loÝ_qu™ ( cÚ‹xt -> maš_loÝ ); 135 } } 137  gboÞ—n $£rv”_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 138 gpoš‹r u£r_d©a ) 140  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 141 sdp_pdu_hdr_t hdr ; 142 * buf ; 143 size_t size ; 144 ssize_t Ën ; 145  fd ; 147 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 149 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 150 `sdp_svcdb_cÞËù_®l ( fd ); 151  FALSE ; 154 Ën = `»cv ( fd , & hdr , ( sdp_pdu_hdr_t ), MSG_PEEK ); 155 ià( Ën !ð( sdp_pdu_hdr_t )) { 156 `sdp_svcdb_cÞËù_®l ( fd ); 157  FALSE ; 160 size = ( sdp_pdu_hdr_t è+ `Áohs ( hdr . ¶’ ); 162 buf = `m®loc ( size ); 163 ià(! buf ) 164  TRUE ; 166 Ën = `»cv ( fd , buf , size , 0); 167 ià( Ën <= 0) { 168 `sdp_svcdb_cÞËù_®l ( fd ); 169 `ä“ ( buf ); 170  FALSE ; 173 ià( `g_‹¡_v”bo£ (è=ð TRUE ) 174 `utž_hexdump ('<', buf , Ën , sdp_debug , "SDP: "); 176 `hªdË_š‹º®_»que¡ ( fd , cÚ‹xt -> mtu , buf , Ën ); 178  TRUE ; 179 } } 181  gboÞ—n $£nd_pdu ( gpoš‹r u£r_d©a ) 183  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 184 cÚ¡  sdp_pdu * »q_pdu ; 185 ušt16_t pdu_Ën ; 186 * buf ; 187 ssize_t Ën ; 189 »q_pdu = & cÚ‹xt -> pdu_li¡ [cÚ‹xt-> pdu_off£t ]; 191 pdu_Ën = »q_pdu -> ¿w_size + cÚ‹xt -> cÚt_size ; 193 buf = `g_m®loc0 ( pdu_Ën ); 195 `memýy ( buf , »q_pdu -> ¿w_d©a ,„eq_pdu-> ¿w_size ); 197 ià( cÚ‹xt -> cÚt_size > 0) 198 `memýy ( buf + »q_pdu -> ¿w_size , cÚ‹xt -> cÚt_d©a , 199 cÚ‹xt -> cÚt_size ); 201 Ën = `wr™e ( cÚ‹xt -> fd , buf , pdu_Ën ); 203 `g_ä“ ( buf ); 205 `g_as£¹ ( Ën =ð pdu_Ën ); 207  FALSE ; 208 } } 210  $cÚ‹xt_šüem’t ( cÚ‹xt *context) 212 cÚ‹xt -> pdu_off£t += 2; 214 ià(! cÚ‹xt -> pdu_li¡ [cÚ‹xt-> pdu_off£t ]. v®id ) { 215 `cÚ‹xt_qu™ ( cÚ‹xt ); 219 `g_idË_add ( £nd_pdu , cÚ‹xt ); 220 } } 222  gboÞ—n $þ›Á_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 223 gpoš‹r u£r_d©a ) 225  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 226 cÚ¡  sdp_pdu * r¥_pdu ; 227  buf [512]; 228 ssize_t Ën ; 229  fd ; 231 r¥_pdu = & cÚ‹xt -> pdu_li¡ [cÚ‹xt-> pdu_off£t + 1]; 233 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) 234  FALSE ; 236 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 238 Ën = `»ad ( fd , buf , (buf)); 239 ià( Ën < 0) 240  FALSE ; 242 ià( `g_‹¡_v”bo£ (è=ð TRUE ) 243 `utž_hexdump ('>', buf , Ën , sdp_debug , "SDP: "); 245 `g_as£¹ ( Ën > 0); 246 `g_as£¹ (( size_t è Ën =ð r¥_pdu -> ¿w_size +„¥_pdu-> cÚt_Ën ); 248 `g_as£¹ ( `memcmp ( buf , r¥_pdu -> ¿w_d©a ,„¥_pdu-> ¿w_size ) == 0); 250 ià( r¥_pdu -> cÚt_Ën > 0) 251 `memýy ( cÚ‹xt -> cÚt_d©a , buf + r¥_pdu -> ¿w_size , 252 r¥_pdu -> cÚt_Ën ); 254 cÚ‹xt -> cÚt_size = r¥_pdu -> cÚt_Ën ; 256 `cÚ‹xt_šüem’t ( cÚ‹xt ); 258  TRUE ; 259 } } 261  $upd©e_db_time¡amp () 263 } } 265  $»gi¡”_£rŸl_pÜt () 267 sdp_li¡_t * svþass_id , * ­£q , * ´Ùo [2], * ´ofžes , * roÙ , * ­rÙo ; 268 uuid_t roÙ_uuid , ¥_uuid , l2ÿp , rfcomm ; 269 sdp_´ofže_desc_t ´ofže ; 270 ušt8_t u8 = 1; 271 sdp_d©a_t * sdp_d©a , * chªÃl ; 272 sdp_»cÜd_t * »cÜd = `sdp_»cÜd_®loc (); 274 »cÜd -> hªdË = `sdp_Ãxt_hªdË (); 276 `sdp_»cÜd_add ( BDADDR_ANY , »cÜd ); 277 sdp_d©a = `sdp_d©a_®loc ( SDP_UINT32 , & »cÜd -> hªdË ); 278 `sdp_©Œ_add ( »cÜd , SDP_ATTR_RECORD_HANDLE , sdp_d©a ); 280 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 281 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 282 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 283 `sdp_li¡_ä“ ( roÙ , 0); 285 `sdp_uuid16_ü—‹ (& ¥_uuid , SERIAL_PORT_SVCLASS_ID ); 286 svþass_id = `sdp_li¡_­³nd (0, & ¥_uuid ); 287 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 288 `sdp_li¡_ä“ ( svþass_id , 0); 290 `sdp_uuid16_ü—‹ (& ´ofže . uuid , SERIAL_PORT_PROFILE_ID ); 291 ´ofže . v”siÚ = 0x0100; 292 ´ofžes = `sdp_li¡_­³nd (0, & ´ofže ); 293 `sdp_£t_´ofže_descs ( »cÜd , ´ofžes ); 294 `sdp_li¡_ä“ ( ´ofžes , 0); 296 `sdp_uuid16_ü—‹ (& l2ÿp , L2CAP_UUID ); 297 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp ); 298 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 300 `sdp_uuid16_ü—‹ (& rfcomm , RFCOMM_UUID ); 301 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm ); 302 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & u8 ); 303 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 304 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 306 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 307 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 309 `sdp_add_Ïng_©Œ ( »cÜd ); 311 `sdp_£t_šfo_©Œ ( »cÜd , "Serial Port", "BlueZ", "COM Port"); 313 `sdp_£t_u¾_©Œ ( »cÜd , "http://www.bluez.org/", 316 `sdp_£t_£rviû_id ( »cÜd , ¥_uuid ); 317 `sdp_£t_£rviû_‰l ( »cÜd , 0xffff); 318 `sdp_£t_£rviû_avaž ( »cÜd , 0xff); 319 `sdp_£t_»cÜd_¡©e ( »cÜd , 0x00001234); 321 `sdp_d©a_ä“ ( chªÃl ); 322 `sdp_li¡_ä“ ( ´Ùo [0], 0); 323 `sdp_li¡_ä“ ( ´Ùo [1], 0); 324 `sdp_li¡_ä“ ( ­£q , 0); 325 `sdp_li¡_ä“ ( ­rÙo , 0); 327 `upd©e_db_time¡amp (); 328 } } 330  $»gi¡”_objeù_push () 332 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 333 uuid_t roÙ_uuid , Ýush_uuid , l2ÿp_uuid , rfcomm_uuid , obex_uuid ; 334 sdp_´ofže_desc_t ´ofže [1]; 335 sdp_li¡_t * ­rÙo , * ´Ùo [3]; 336 ušt8_t chª = 9; 337 sdp_d©a_t * chªÃl ; 338 ušt8_t fÜm©s [] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff }; 339 * dtds [( fÜm©s )], * v®ues [(formats)]; 340  i ; 341 ušt8_t dtd = SDP_UINT8 ; 342 sdp_d©a_t * sdp_d©a , * sæi¡ ; 343 sdp_»cÜd_t * »cÜd = `sdp_»cÜd_®loc (); 345 »cÜd -> hªdË = `sdp_Ãxt_hªdË (); 347 `sdp_»cÜd_add ( BDADDR_ANY , »cÜd ); 348 sdp_d©a = `sdp_d©a_®loc ( SDP_UINT32 , & »cÜd -> hªdË ); 349 `sdp_©Œ_add ( »cÜd , SDP_ATTR_RECORD_HANDLE , sdp_d©a ); 351 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 352 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 353 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 355 `sdp_uuid16_ü—‹ (& Ýush_uuid , OBEX_OBJPUSH_SVCLASS_ID ); 356 svþass_id = `sdp_li¡_­³nd (0, & Ýush_uuid ); 357 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 359 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , OBEX_OBJPUSH_PROFILE_ID ); 360 ´ofže [0]. v”siÚ = 0x0100; 361 pf£q = `sdp_li¡_­³nd (0, ´ofže ); 362 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 364 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 365 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 366 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 368 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 369 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm_uuid ); 370 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & chª ); 371 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 372 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 374 `sdp_uuid16_ü—‹ (& obex_uuid , OBEX_UUID ); 375 ´Ùo [2] = `sdp_li¡_­³nd (0, & obex_uuid ); 376 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [2]); 378 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 379 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 381  i = 0; i < ( fÜm©s ); i++) { 382 dtds [ i ] = & dtd ; 383 v®ues [ i ] = & fÜm©s [i]; 385 sæi¡ = `sdp_£q_®loc ( dtds , v®ues , ( fÜm©s )); 386 `sdp_©Œ_add ( »cÜd , SDP_ATTR_SUPPORTED_FORMATS_LIST , sæi¡ ); 388 `sdp_£t_šfo_©Œ ( »cÜd , "OBEX Object Push", 0, 0); 390 `sdp_d©a_ä“ ( chªÃl ); 391 `sdp_li¡_ä“ ( roÙ , 0); 392 `sdp_li¡_ä“ ( svþass_id , 0); 393 `sdp_li¡_ä“ ( pf£q , 0); 394 `sdp_li¡_ä“ ( ´Ùo [0], 0); 395 `sdp_li¡_ä“ ( ´Ùo [1], 0); 396 `sdp_li¡_ä“ ( ´Ùo [2], 0); 397 `sdp_li¡_ä“ ( ­£q , 0); 398 `sdp_li¡_ä“ ( ­rÙo , 0); 400 `upd©e_db_time¡amp (); 401 } } 403  $»gi¡”_hid_keybßrd () 405 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 406 uuid_t roÙ_uuid , hidkb_uuid , l2ÿp_uuid , hidp_uuid ; 407 sdp_´ofže_desc_t ´ofže [1]; 408 sdp_li¡_t * ­rÙo , * ´Ùo [3]; 409 sdp_d©a_t * psm , * Ïng_l¡ , * Ïng_l¡2 , * hid_¥ec_l¡ , * hid_¥ec_l¡2 ; 410  i ; 411 ušt8_t dtd = SDP_UINT16 ; 412 ušt8_t dtd2 = SDP_UINT8 ; 413 ušt8_t dtd_d©a = SDP_TEXT_STR8 ; 414 * dtds [2]; 415 * v®ues [2]; 416 * dtds2 [2]; 417 * v®ues2 [2]; 418  Ëng [2]; 419 ušt8_t hid_¥ec_ty³ = 0x22; 420 ušt16_t hid_©Œ_Ïng [] = { 0x409, 0x100 }; 421 cÚ¡ ušt16_t ù¾ = 0x11; 422 cÚ¡ ušt16_t šŒ = 0x13; 423 cÚ¡ ušt16_t hid_©Œ [] = { 0x100, 0x111, 0x40, 0x0d, 425 cÚ¡ ušt16_t hid_©Œ2 [] = { 0x0, 0x01, 0x100, 0x1f40, 427 cÚ¡ ušt8_t hid_¥ec [] = { 479 sdp_d©a_t * sdp_d©a ; 480 sdp_»cÜd_t * »cÜd = `sdp_»cÜd_®loc (); 482 »cÜd -> hªdË = `sdp_Ãxt_hªdË (); 484 `sdp_»cÜd_add ( BDADDR_ANY , »cÜd ); 485 sdp_d©a = `sdp_d©a_®loc ( SDP_UINT32 , & »cÜd -> hªdË ); 486 `sdp_©Œ_add ( »cÜd , SDP_ATTR_RECORD_HANDLE , sdp_d©a ); 488 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 489 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 490 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 491 `sdp_li¡_ä“ ( roÙ , 0); 493 `sdp_add_Ïng_©Œ ( »cÜd ); 495 `sdp_uuid16_ü—‹ (& hidkb_uuid , HID_SVCLASS_ID ); 496 svþass_id = `sdp_li¡_­³nd (0, & hidkb_uuid ); 497 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 498 `sdp_li¡_ä“ ( svþass_id , 0); 500 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , HID_PROFILE_ID ); 501 ´ofže [0]. v”siÚ = 0x0100; 502 pf£q = `sdp_li¡_­³nd (0, ´ofže ); 503 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 504 `sdp_li¡_ä“ ( pf£q , 0); 507 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 508 ´Ùo [1] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 509 psm = `sdp_d©a_®loc ( SDP_UINT16 , & ù¾ ); 510 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], psm ); 511 ­£q = `sdp_li¡_­³nd (0, ´Ùo [1]); 513 `sdp_uuid16_ü—‹ (& hidp_uuid , HIDP_UUID ); 514 ´Ùo [2] = `sdp_li¡_­³nd (0, & hidp_uuid ); 515 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [2]); 517 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 518 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 520 `sdp_d©a_ä“ ( psm ); 521 `sdp_li¡_ä“ ( ´Ùo [1], 0); 522 `sdp_li¡_ä“ ( ´Ùo [2], 0); 523 `sdp_li¡_ä“ ( ­£q , 0); 524 `sdp_li¡_ä“ ( ­rÙo , 0); 527 ´Ùo [1] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 528 psm = `sdp_d©a_®loc ( SDP_UINT16 , & šŒ ); 529 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], psm ); 530 ­£q = `sdp_li¡_­³nd (0, ´Ùo [1]); 532 `sdp_uuid16_ü—‹ (& hidp_uuid , HIDP_UUID ); 533 ´Ùo [2] = `sdp_li¡_­³nd (0, & hidp_uuid ); 534 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [2]); 536 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 537 `sdp_£t_add_acûss_´Ùos ( »cÜd , ­rÙo ); 539 `sdp_d©a_ä“ ( psm ); 540 `sdp_li¡_ä“ ( ´Ùo [1], 0); 541 `sdp_li¡_ä“ ( ´Ùo [2], 0); 542 `sdp_li¡_ä“ ( ­£q , 0); 543 `sdp_li¡_ä“ ( ­rÙo , 0); 545 `sdp_£t_šfo_©Œ ( »cÜd , "HID Keybßrd", NULL , NULL); 547  i = 0; i < ( hid_©Œ ) / 2; i++) 548 `sdp_©Œ_add_Ãw ( »cÜd , 549 SDP_ATTR_HID_DEVICE_RELEASE_NUMBER + i , 550 SDP_UINT16 , & hid_©Œ [ i ]); 552 dtds [0] = & dtd2 ; 553 v®ues [0] = & hid_¥ec_ty³ ; 554 dtds [1] = & dtd_d©a ; 555 v®ues [1] = ( ušt8_t *è hid_¥ec ; 556 Ëng [0] = 0; 557 Ëng [1] = ( hid_¥ec ); 558 hid_¥ec_l¡ = `sdp_£q_®loc_w™h_Ëngth ( dtds , v®ues , Ëng , 2); 559 hid_¥ec_l¡2 = `sdp_d©a_®loc ( SDP_SEQ8 , hid_¥ec_l¡ ); 560 `sdp_©Œ_add ( »cÜd , SDP_ATTR_HID_DESCRIPTOR_LIST , hid_¥ec_l¡2 ); 562  i = 0; i < ( hid_©Œ_Ïng ) / 2; i++) { 563 dtds2 [ i ] = & dtd ; 564 v®ues2 [ i ] = & hid_©Œ_Ïng [i]; 567 Ïng_l¡ = `sdp_£q_®loc ( dtds2 , v®ues2 , ( hid_©Œ_Ïng ) / 2); 568 Ïng_l¡2 = `sdp_d©a_®loc ( SDP_SEQ8 , Ïng_l¡ ); 569 `sdp_©Œ_add ( »cÜd , SDP_ATTR_HID_LANG_ID_BASE_LIST , Ïng_l¡2 ); 571 `sdp_©Œ_add_Ãw ( »cÜd , SDP_ATTR_HID_SDP_DISABLE , 572 SDP_UINT16 , & hid_©Œ2 [0]); 574  i = 0; i < ( hid_©Œ2 ) / 2 - 1; i++) 575 `sdp_©Œ_add_Ãw ( »cÜd , SDP_ATTR_HID_REMOTE_WAKEUP + i , 576 SDP_UINT16 , & hid_©Œ2 [ i + 1]); 578 `upd©e_db_time¡amp (); 579 } } 581  $»gi¡”_fže_Œªsãr () 583 sdp_li¡_t * svþass_id , * pf£q , * ­£q , * roÙ ; 584 uuid_t roÙ_uuid , áº_uuid , l2ÿp_uuid , rfcomm_uuid , obex_uuid ; 585 sdp_´ofže_desc_t ´ofže [1]; 586 sdp_li¡_t * ­rÙo , * ´Ùo [3]; 587 ušt8_t u8 = 10; 588 sdp_d©a_t * sdp_d©a , * chªÃl ; 589 sdp_»cÜd_t * »cÜd = `sdp_»cÜd_®loc (); 591 »cÜd -> hªdË = `sdp_Ãxt_hªdË (); 593 `sdp_»cÜd_add ( BDADDR_ANY , »cÜd ); 594 sdp_d©a = `sdp_d©a_®loc ( SDP_UINT32 , & »cÜd -> hªdË ); 595 `sdp_©Œ_add ( »cÜd , SDP_ATTR_RECORD_HANDLE , sdp_d©a ); 597 `sdp_uuid16_ü—‹ (& roÙ_uuid , PUBLIC_BROWSE_GROUP ); 598 roÙ = `sdp_li¡_­³nd (0, & roÙ_uuid ); 599 `sdp_£t_brow£_groups ( »cÜd , roÙ ); 601 `sdp_uuid16_ü—‹ (& áº_uuid , OBEX_FILETRANS_SVCLASS_ID ); 602 svþass_id = `sdp_li¡_­³nd (0, & áº_uuid ); 603 `sdp_£t_£rviû_þas£s ( »cÜd , svþass_id ); 605 `sdp_uuid16_ü—‹ (& ´ofže [0]. uuid , OBEX_FILETRANS_PROFILE_ID ); 606 ´ofže [0]. v”siÚ = 0x0100; 607 pf£q = `sdp_li¡_­³nd (0, & ´ofže [0]); 608 `sdp_£t_´ofže_descs ( »cÜd , pf£q ); 610 `sdp_uuid16_ü—‹ (& l2ÿp_uuid , L2CAP_UUID ); 611 ´Ùo [0] = `sdp_li¡_­³nd (0, & l2ÿp_uuid ); 612 ­£q = `sdp_li¡_­³nd (0, ´Ùo [0]); 614 `sdp_uuid16_ü—‹ (& rfcomm_uuid , RFCOMM_UUID ); 615 ´Ùo [1] = `sdp_li¡_­³nd (0, & rfcomm_uuid ); 616 chªÃl = `sdp_d©a_®loc ( SDP_UINT8 , & u8 ); 617 ´Ùo [1] = `sdp_li¡_­³nd ÕrÙo[1], chªÃl ); 618 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [1]); 620 `sdp_uuid16_ü—‹ (& obex_uuid , OBEX_UUID ); 621 ´Ùo [2] = `sdp_li¡_­³nd (0, & obex_uuid ); 622 ­£q = `sdp_li¡_­³nd ×p£q, ´Ùo [2]); 624 ­rÙo = `sdp_li¡_­³nd (0, ­£q ); 625 `sdp_£t_acûss_´Ùos ( »cÜd , ­rÙo ); 627 `sdp_£t_šfo_©Œ ( »cÜd , "OBEX File Transfer", 0, 0); 629 `sdp_d©a_ä“ ( chªÃl ); 630 `sdp_li¡_ä“ ( roÙ , 0); 631 `sdp_li¡_ä“ ( svþass_id , 0); 632 `sdp_li¡_ä“ ( pf£q , 0); 633 `sdp_li¡_ä“ ( ´Ùo [0], 0); 634 `sdp_li¡_ä“ ( ´Ùo [1], 0); 635 `sdp_li¡_ä“ ( ´Ùo [2], 0); 636 `sdp_li¡_ä“ ( ­£q , 0); 637 `sdp_li¡_ä“ ( ­rÙo , 0); 639 `upd©e_db_time¡amp (); 640 } } 642  cÚ‹xt * $ü—‹_cÚ‹xt () 644  cÚ‹xt *cÚ‹xˆð `g_Ãw0 (context, 1); 645 GIOChªÃl * chªÃl ; 646  ”r , sv [2]; 648 cÚ‹xt -> maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 649 `g_as£¹ ( cÚ‹xt -> maš_loÝ ); 651 ”r = `sock‘·œ ( AF_UNIX , SOCK_SEQPACKET | SOCK_CLOEXEC , 0, sv ); 652 `g_as£¹ ( ”r == 0); 654 chªÃl = `g_io_chªÃl_unix_Ãw ( sv [0]); 656 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 657 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 658 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 660 cÚ‹xt -> £rv”_sourû = `g_io_add_w©ch ( chªÃl , 661 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 662 £rv”_hªdËr , cÚ‹xt ); 663 `g_as£¹ ( cÚ‹xt -> £rv”_sourû > 0); 665 `g_io_chªÃl_uÄef ( chªÃl ); 667 chªÃl = `g_io_chªÃl_unix_Ãw ( sv [1]); 669 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 670 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 671 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 673 cÚ‹xt -> þ›Á_sourû = `g_io_add_w©ch ( chªÃl , 674 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 675 þ›Á_hªdËr , cÚ‹xt ); 676 `g_as£¹ ( cÚ‹xt -> þ›Á_sourû > 0); 678 `g_io_chªÃl_uÄef ( chªÃl ); 680 cÚ‹xt -> fd = sv [1]; 682 `£t_fixed_db_time¡amp (0x496f0654); 684 `»gi¡”_public_brow£_group (); 685 `»gi¡”_£rv”_£rviû (); 687 `»gi¡”_£rŸl_pÜt (); 688 `»gi¡”_objeù_push (); 689 `»gi¡”_hid_keybßrd (); 690 `»gi¡”_fže_Œªsãr (); 691 `»gi¡”_fže_Œªsãr (); 692 `»gi¡”_fže_Œªsãr (); 693 `»gi¡”_fže_Œªsãr (); 694 `»gi¡”_fže_Œªsãr (); 696  cÚ‹xt ; 697 } } 699  $execu‹_cÚ‹xt ( cÚ‹xt *context) 701 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 703 `sdp_svcdb_cÞËù_®l ( cÚ‹xt -> fd ); 704 `sdp_svcdb_»£t (); 706 `g_sourû_»move ( cÚ‹xt -> £rv”_sourû ); 707 `g_sourû_»move ( cÚ‹xt -> þ›Á_sourû ); 709 `g_maš_loÝ_uÄef ( cÚ‹xt -> maš_loÝ ); 711 `g_ä“ ( cÚ‹xt ); 712 } } 714  $‹¡_sdp ( gcÚ¡poš‹r d©a ) 716 cÚ¡  ‹¡_d©a * ‹¡ = d©a ; 717  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt (); 719 cÚ‹xt -> mtu = ‹¡ ->mtu; 720 cÚ‹xt -> pdu_li¡ = ‹¡ ->pdu_list; 722 `g_idË_add ( £nd_pdu , cÚ‹xt ); 724 `execu‹_cÚ‹xt ( cÚ‹xt ); 726 `g_ä“ ( ‹¡ -> pdu_li¡ ); 727 } } 729  $‹¡_sdp_de_©Œ ( gcÚ¡poš‹r d©a ) 731 cÚ¡  ‹¡_d©a_de * ‹¡ = d©a ; 732 ušt128_t u128 ; 733 sdp_d©a_t * d ; 734  size = 0; 736 d = `sdp_exŒaù_©Œ ( ‹¡ -> šput_d©a ,e¡-> šput_size , & size , NULL ); 737 `g_as£¹ ( d !ð NULL ); 738 `g_as£¹_cmpušt ( ‹¡ -> šput_size , ==, size ); 739 `g_as£¹_cmpušt ( ‹¡ -> ex³ùed . dtd , ==, d ->dtd); 741 ià( `g_‹¡_v”bo£ (è=ð TRUE ) 742 `g_´št ("DTD=0x%02x\n", d -> dtd ); 744  d -> dtd ) { 745  SDP_TEXT_STR8 : 746  SDP_TEXT_STR16 : 747  SDP_URL_STR8 : 748  SDP_URL_STR16 : 749 `g_as£¹_cmp¡r ( ‹¡ -> ex³ùed . v® . ¡r , ==, d ->val.str); 751  SDP_DATA_NIL : 752  SDP_UINT8 : 753 `g_as£¹_cmpušt ( ‹¡ -> ex³ùed . v® . ušt8 , ==, d ->val.uint8); 755  SDP_UINT16 : 756 `g_as£¹_cmpušt ( ‹¡ -> ex³ùed . v® . ušt16 , ==, d ->val.uint16); 758  SDP_UINT32 : 759 `g_as£¹_cmpušt ( ‹¡ -> ex³ùed . v® . ušt32 , ==, d ->val.uint32); 761  SDP_UINT64 : 762 `g_as£¹_cmpušt ( ‹¡ -> ex³ùed . v® . ušt64 , ==, d ->val.uint64); 764  SDP_BOOL : 765  SDP_INT8 : 766 `g_as£¹_cmpušt ( ‹¡ -> ex³ùed . v® . št8 , ==, d ->val.int8); 768  SDP_INT16 : 769 `g_as£¹_cmpušt ( ‹¡ -> ex³ùed . v® . št16 , ==, d ->val.int16); 771  SDP_INT32 : 772 `g_as£¹_cmpušt ( ‹¡ -> ex³ùed . v® . št32 , ==, d ->val.int32); 774  SDP_INT64 : 775 `g_as£¹_cmpušt ( ‹¡ -> ex³ùed . v® . št64 , ==, d ->val.int64); 777  SDP_UINT128 : 778  SDP_INT128 : 780 `htÚ128 (& d -> v® . ušt128 , & u128 ); 781 `g_as£¹ ( `memcmp (& ‹¡ -> ex³ùed . v® . ušt128 , & u128 , 782 ( ušt128_t )) == 0); 785 `g_as£¹_nÙ_»ached (); 788 `sdp_d©a_ä“ ( d ); 789 } } 791  $maš ( ¬gc , * ¬gv []) 793 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 795 ià( `g_‹¡_v”bo£ ()) 796 `__btd_log_š™ ("*", 0); 804 `defše_ss ("BV-01-C/UUID-16", 805 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x08, 0x35, 0x03, 0x19, 807 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 809 `defše_ss ("BV-01-C/UUID-32", 810 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x0a, 0x35, 0x05, 0x1a, 812 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 814 `defše_ss ("BV-01-C/UUID-128", 815 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 819 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 828 `defše_ss ("BV-03-C/UUID-16", 829 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x08, 0x35, 0x03, 0x19, 831 `¿w_pdu_cÚt (8, 0x03, 0x00, 0x01, 0x00, 0x29, 0x00, 0x08, 0x00, 836 `¿w_pdu_cÚt (8, 0x02, 0x00, 0x02, 0x00, 0x10, 0x35, 0x03, 0x19, 838 `¿w_pdu (0x03, 0x00, 0x02, 0x00, 0x09, 0x00, 0x08, 0x00, 840 `defše_ss ("BV-03-C/UUID-32", 841 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x0a, 0x35, 0x05, 0x1a, 843 `¿w_pdu_cÚt (8, 0x03, 0x00, 0x01, 0x00, 0x29, 0x00, 0x08, 0x00, 848 `¿w_pdu_cÚt (8, 0x02, 0x00, 0x02, 0x00, 0x12, 0x35, 0x05, 0x1a, 850 `¿w_pdu (0x03, 0x00, 0x02, 0x00, 0x09, 0x00, 0x08, 0x00, 852 `defše_ss ("BV-03-C/UUID-128", 853 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 857 `¿w_pdu_cÚt (8, 0x03, 0x00, 0x01, 0x00, 0x29, 0x00, 0x08, 0x00, 862 `¿w_pdu_cÚt (8, 0x02, 0x00, 0x02, 0x00, 0x1e, 0x35, 0x11, 0x1c, 866 `¿w_pdu (0x03, 0x00, 0x02, 0x00, 0x09, 0x00, 0x08, 0x00, 875 `defše_ss ("BV-04-C/UUID-16", 876 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x08, 0x35, 0x03, 0x19, 878 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 880 `defše_ss ("BV-04-C/UUID-128", 881 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 885 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 887 `defše_ss ("BV-04-C/UUID-32", 888 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x0a, 0x35, 0x05, 0x1a, 890 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 899 `defše_ss ("BI-01-C/UUID-16", 900 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 902 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x04)); 903 `defše_ss ("BI-01-C/UUID-32", 904 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 906 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x04)); 907 `defše_ss ("BI-01-C/UUID-128", 908 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 912 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x04)); 920 `defše_ss ("BI-02-C/UUID-16", 921 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x06, 0x35, 0x03, 0x19, 923 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03)); 924 `defše_ss ("BI-02-C/UUID-32", 925 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x08, 0x35, 0x05, 0x1a, 927 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03)); 928 `defše_ss ("BI-02-C/UUID-128", 929 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x14, 0x35, 0x11, 0x1c, 933 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03)); 940 `defše_§ ("BV-01-C", 941 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 945 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 947 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 950 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x0d, 0x00, 0x0a, 0x35, 960 `defše_§ ("BV-03-C", 961 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 965 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 967 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x01, 0x00, 970 `¿w_pdu_cÚt (8, 0x05, 0x00, 0x01, 0x00, 0x12, 0x00, 0x07, 0x35, 972 `¿w_pdu_cÚt (8, 0x04, 0x00, 0x02, 0x00, 0x17, 0x00, 0x01, 0x00, 975 `¿w_pdu_cÚt (8, 0x05, 0x00, 0x02, 0x00, 0x12, 0x00, 0x07, 0x01, 977 `¿w_pdu_cÚt (8, 0x04, 0x00, 0x03, 0x00, 0x17, 0x00, 0x01, 0x00, 980 `¿w_pdu (0x05, 0x00, 0x03, 0x00, 0x07, 0x00, 0x04, 0x03, 989 `defše_§ ("BV-04-C", 990 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 994 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 996 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 999 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x0b, 0x00, 0x08, 0x35, 1008 `defše_§ ("BV-05-C", 1009 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1013 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1015 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1018 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x1b, 0x00, 0x18, 0x35, 1029 `defše_§ ("BV-06-C", 1030 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1034 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1036 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1039 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x0d, 0x00, 0x0a, 0x35, 1049 `defše_§ ("BV-07-C", 1050 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1054 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1056 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1059 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x0d, 0x00, 0x0a, 0x35, 1069 `defše_§ ("BV-08-C", 1070 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1074 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1076 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1079 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x0d, 0x00, 0x0a, 0x35, 1089 `defše_§ ("BV-09-C", 1090 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1094 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1096 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1099 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x13, 0x00, 0x10, 0x35, 1109 `defše_§ ("BV-10-C", 1110 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1114 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1116 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1119 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x07, 0x35, 1128 `defše_§ ("BV-11-C", 1129 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1133 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1135 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1138 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x1f, 0x00, 0x1c, 0x35, 1150 `defše_§ ("BV-12-C", 1151 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1155 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1157 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1160 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x13, 0x00, 0x10, 0x35, 1163 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 1166 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x15, 0x00, 0x12, 0x35, 1177 `defše_§ ("BV-13-C", 1178 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1182 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1184 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1187 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x13, 0x00, 0x10, 0x35, 1190 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1193 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x12, 0x00, 0x0f, 0x35, 1203 `defše_§ ("BV-14-C", 1204 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1208 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1210 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1213 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x13, 0x00, 0x10, 0x35, 1216 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1219 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1229 `defše_§ ("BV-15-C", 1230 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1234 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1236 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x00, 0x00, 1239 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x0d, 0x00, 0x0a, 0x35, 1249 `defše_§ ("BV-16-C", 1250 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1254 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1256 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x00, 0x00, 1259 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x0d, 0x00, 0x0a, 0x35, 1269 `defše_§ ("BV-17-C", 1270 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1274 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1276 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1279 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x12, 0x00, 0x0f, 0x35, 1289 `defše_§ ("BV-18-C", 1290 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1294 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1296 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1299 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x1f, 0x00, 0x1c, 0x35, 1311 `defše_§ ("BV-19-C", 1312 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1316 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1318 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1321 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x1f, 0x00, 0x1c, 0x35, 1333 `defše_§ ("BV-20-C", 1334 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1338 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1340 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1343 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x05, 0x00, 0x02, 0x35, 1352 `defše_§ ("BV-21-C", 1353 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1357 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1359 `¿w_pdu (0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 1362 `¿w_pdu (0x05, 0x00, 0x02, 0x00, 0x19, 0x00, 0x16, 0x35, 1373 `defše_§ ("BI-01-C", 1374 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0xff, 0xff, 0xff, 1377 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02)); 1385 `defše_§ ("BI-02-C", 1386 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1390 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1392 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0a, 0x00, 0x01, 0x00, 1394 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03)); 1402 `defše_§ ("BI-03-C", 1403 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 1407 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 1409 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x11, 0x00, 0x01, 0x00, 1412 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x04)); 1421 `defše_s§ ("BV-01-C/UUID-16", 1422 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1425 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x05, 0x00, 0x02, 0x35, 1427 `defše_s§ ("BV-01-C/UUID-32", 1428 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1431 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x05, 0x00, 0x02, 0x35, 1433 `defše_s§ ("BV-01-C/UUID-128", 1434 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1438 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x05, 0x00, 0x02, 0x35, 1448 `defše_s§ ("BV-02-C/UUID-16", 1449 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1452 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x05, 0x00, 0x02, 0x35, 1454 `defše_s§ ("BV-02-C/UUID-32", 1455 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1458 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x05, 0x00, 0x02, 0x35, 1460 `defše_s§ ("BV-02-C/UUID-128", 1461 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1465 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x05, 0x00, 0x02, 0x35, 1475 `defše_s§ ("BV-03-C/UUID-16", 1476 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1479 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x05, 0x00, 0x02, 0x35, 1481 `defše_s§ ("BV-03-C/UUID-32", 1482 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1485 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x05, 0x00, 0x02, 0x35, 1487 `defše_s§ ("BV-03-C/UUID-128", 1488 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1492 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x05, 0x00, 0x02, 0x35, 1502 `defše_s§ ("BV-04-C/UUID-16", 1503 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1506 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1509 `defše_s§ ("BV-04-C/UUID-32", 1510 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1513 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1516 `defše_s§ ("BV-04-C/UUID-128", 1517 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1521 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1532 `defše_s§ ("BV-06-C/UUID-16", 1533 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x10, 0x35, 0x03, 0x19, 1536 `¿w_pdu_cÚt (8, 0x07, 0x00, 0x01, 0x00, 0x12, 0x00, 0x07, 0x35, 1538 `¿w_pdu_cÚt (8, 0x06, 0x00, 0x02, 0x00, 0x18, 0x35, 0x03, 0x19, 1541 `¿w_pdu_cÚt (8, 0x07, 0x00, 0x02, 0x00, 0x12, 0x00, 0x07, 0x0a, 1543 `¿w_pdu_cÚt (8, 0x06, 0x00, 0x03, 0x00, 0x18, 0x35, 0x03, 0x19, 1546 `¿w_pdu (0x07, 0x00, 0x03, 0x00, 0x09, 0x00, 0x06, 0x01, 1548 `defše_s§ ("BV-06-C/UUID-32", 1549 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x12, 0x35, 0x05, 0x1a, 1552 `¿w_pdu_cÚt (8, 0x07, 0x00, 0x01, 0x00, 0x12, 0x00, 0x07, 0x35, 1554 `¿w_pdu_cÚt (8, 0x06, 0x00, 0x02, 0x00, 0x1a, 0x35, 0x05, 0x1a, 1557 `¿w_pdu_cÚt (8, 0x07, 0x00, 0x02, 0x00, 0x12, 0x00, 0x07, 0x0a, 1559 `¿w_pdu_cÚt (8, 0x06, 0x00, 0x03, 0x00, 0x1a, 0x35, 0x05, 0x1a, 1562 `¿w_pdu (0x07, 0x00, 0x03, 0x00, 0x09, 0x00, 0x06, 0x01, 1564 `defše_s§ ("BV-06-C/UUID-128", 1565 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1e, 0x35, 0x11, 0x1c, 1570 `¿w_pdu_cÚt (8, 0x07, 0x00, 0x01, 0x00, 0x12, 0x00, 0x07, 0x35, 1572 `¿w_pdu_cÚt (8, 0x06, 0x00, 0x02, 0x00, 0x26, 0x35, 0x11, 0x1c, 1577 `¿w_pdu_cÚt (8, 0x07, 0x00, 0x02, 0x00, 0x12, 0x00, 0x07, 0x0a, 1579 `¿w_pdu_cÚt (8, 0x06, 0x00, 0x03, 0x00, 0x26, 0x35, 0x11, 0x1c, 1584 `¿w_pdu (0x07, 0x00, 0x03, 0x00, 0x09, 0x00, 0x06, 0x01, 1594 `defše_s§ ("BV-07-C/UUID-16", 1595 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1598 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1601 `defše_s§ ("BV-07-C/UUID-32", 1602 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1605 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1608 `defše_s§ ("BV-07-C/UUID-128", 1609 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1613 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1624 `defše_s§ ("BV-08-C/UUID-16", 1625 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1628 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1631 `defše_s§ ("BV-08-C/UUID-32", 1632 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1635 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1638 `defše_s§ ("BV-08-C/UUID-128", 1639 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1643 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1654 `defše_s§ ("BV-09-C/UUID-16", 1655 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1658 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1661 `defše_s§ ("BV-09-C/UUID-32", 1662 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1665 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1668 `defše_s§ ("BV-09-C/UUID-128", 1669 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1673 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1684 `defše_s§ ("BV-10-C/UUID-16", 1685 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1688 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 1691 `defše_s§ ("BV-10-C/UUID-32", 1692 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1695 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 1698 `defše_s§ ("BV-10-C/UUID-128", 1699 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1703 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 1714 `defše_s§ ("BV-11-C/UUID-16", 1715 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1718 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x1d, 0x00, 0x1a, 0x35, 1723 `defše_s§ ("BV-11-C/UUID-32", 1724 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1727 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x1d, 0x00, 0x1a, 0x35, 1732 `defše_s§ ("BV-11-C/UUID-128", 1733 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1737 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x1d, 0x00, 0x1a, 0x35, 1750 `defše_s§ ("BV-12-C/UUID-16", 1751 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1754 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1757 `defše_s§ ("BV-12-C/UUID-32", 1758 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1761 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1764 `defše_s§ ("BV-12-C/UUID-128", 1765 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1769 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 1780 `defše_s§ ("BV-13-C/UUID-16", 1781 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1784 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x15, 0x00, 0x12, 0x35, 1788 `defše_s§ ("BV-13-C/UUID-32", 1789 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1792 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x15, 0x00, 0x12, 0x35, 1796 `defše_s§ ("BV-13-C/UUID-128", 1797 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1801 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x15, 0x00, 0x12, 0x35, 1813 `defše_s§ ("BV-14-C/UUID-16", 1814 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1817 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x09, 0x35, 1820 `defše_s§ ("BV-14-C/UUID-32", 1821 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1824 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x09, 0x35, 1827 `defše_s§ ("BV-14-C/UUID-128", 1828 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1832 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x09, 0x35, 1843 `defše_s§ ("BV-15-C/UUID-16", 1844 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1847 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x35, 1852 `defše_s§ ("BV-15-C/UUID-32", 1853 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1856 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x35, 1861 `defše_s§ ("BV-15-C/UUID-128", 1862 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1866 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x35, 1879 `defše_s§ ("BV-16-C/UUID-16", 1880 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1883 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x15, 0x00, 0x12, 0x35, 1887 `¿w_pdu (0x06, 0x00, 0x02, 0x00, 0x0d, 0x35, 0x03, 0x19, 1890 `¿w_pdu (0x07, 0x00, 0x02, 0x00, 0x17, 0x00, 0x14, 0x35, 1894 `defše_s§ ("BV-16-C/UUID-32", 1895 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1898 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x15, 0x00, 0x12, 0x35, 1902 `¿w_pdu (0x06, 0x00, 0x02, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1905 `¿w_pdu (0x07, 0x00, 0x02, 0x00, 0x17, 0x00, 0x14, 0x35, 1909 `defše_s§ ("BV-16-C/UUID-128", 1910 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1914 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x15, 0x00, 0x12, 0x35, 1918 `¿w_pdu (0x06, 0x00, 0x02, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1922 `¿w_pdu (0x07, 0x00, 0x02, 0x00, 0x17, 0x00, 0x14, 0x35, 1934 `defše_s§ ("BV-17-C/UUID-16", 1935 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1938 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x15, 0x00, 0x12, 0x35, 1942 `¿w_pdu (0x06, 0x00, 0x02, 0x00, 0x0d, 0x35, 0x03, 0x19, 1945 `¿w_pdu (0x07, 0x00, 0x02, 0x00, 0x14, 0x00, 0x11, 0x35, 1949 `defše_s§ ("BV-17-C/UUID-32", 1950 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1953 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x15, 0x00, 0x12, 0x35, 1957 `¿w_pdu (0x06, 0x00, 0x02, 0x00, 0x0f, 0x35, 0x05, 0x1a, 1960 `¿w_pdu (0x07, 0x00, 0x02, 0x00, 0x14, 0x00, 0x11, 0x35, 1964 `defše_s§ ("BV-17-C/UUID-128", 1965 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1969 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x15, 0x00, 0x12, 0x35, 1973 `¿w_pdu (0x06, 0x00, 0x02, 0x00, 0x1b, 0x35, 0x11, 0x1c, 1977 `¿w_pdu (0x07, 0x00, 0x02, 0x00, 0x14, 0x00, 0x11, 0x35, 1989 `defše_s§ ("BV-18-C/UUID-16", 1990 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 1993 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x15, 0x00, 0x12, 0x35, 1997 `¿w_pdu (0x06, 0x00, 0x02, 0x00, 0x0d, 0x35, 0x03, 0x19, 2000 `¿w_pdu (0x07, 0x00, 0x02, 0x00, 0x11, 0x00, 0x0e, 0x35, 2003 `defše_s§ ("BV-18-C/UUID-32", 2004 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 2007 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x15, 0x00, 0x12, 0x35, 2011 `¿w_pdu (0x06, 0x00, 0x02, 0x00, 0x0f, 0x35, 0x05, 0x1a, 2014 `¿w_pdu (0x07, 0x00, 0x02, 0x00, 0x11, 0x00, 0x0e, 0x35, 2017 `defše_s§ ("BV-18-C/UUID-128", 2018 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 2022 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x15, 0x00, 0x12, 0x35, 2026 `¿w_pdu (0x06, 0x00, 0x02, 0x00, 0x1b, 0x35, 0x11, 0x1c, 2030 `¿w_pdu (0x07, 0x00, 0x02, 0x00, 0x11, 0x00, 0x0e, 0x35, 2041 `defše_s§ ("BV-19-C/UUID-16", 2042 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 2045 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 2048 `defše_s§ ("BV-19-C/UUID-32", 2049 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 2052 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 2055 `defše_s§ ("BV-19-C/UUID-128", 2056 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 2060 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0c, 0x35, 2071 `defše_s§ ("BV-20-C/UUID-16", 2072 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 2075 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x14, 0x00, 0x11, 0x35, 2079 `defše_s§ ("BV-20-C/UUID-32", 2080 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 2083 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x14, 0x00, 0x11, 0x35, 2087 `defše_s§ ("BV-20-C/UUID-128", 2088 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 2092 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x14, 0x00, 0x11, 0x35, 2104 `defše_s§ ("BV-21-C/UUID-16", 2105 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 2108 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x35, 2113 `defše_s§ ("BV-21-C/UUID-32", 2114 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 2117 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x35, 2122 `defše_s§ ("BV-21-C/UUID-128", 2123 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 2127 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x35, 2140 `defše_s§ ("BV-22-C/UUID-16", 2141 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 2144 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x35, 2149 `defše_s§ ("BV-22-C/UUID-32", 2150 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 2153 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x35, 2158 `defše_s§ ("BV-22-C/UUID-128", 2159 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 2163 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x35, 2176 `defše_s§ ("BV-23-C/UUID-16", 2177 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 2180 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x1b, 0x00, 0x18, 0x35, 2184 `defše_s§ ("BV-23-C/UUID-32", 2185 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 2188 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x1b, 0x00, 0x18, 0x35, 2192 `defše_s§ ("BV-23-C/UUID-128", 2193 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 2197 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x1b, 0x00, 0x18, 0x35, 2209 `defše_s§ ("BI-01-C/UUID-16", 2210 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0b, 0x35, 0x03, 0x19, 2212 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03)); 2213 `defše_s§ ("BI-01-C/UUID-32", 2214 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x05, 0x1a, 2217 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03)); 2218 `defše_s§ ("BI-01-C/UUID-128", 2219 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x19, 0x35, 0x11, 0x1c, 2223 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03)); 2232 `defše_s§ ("BI-02-C/UUID-16", 2233 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x12, 0x35, 0x03, 0x19, 2236 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x04)); 2237 `defše_s§ ("BI-02-C/UUID-32", 2238 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x14, 0x35, 0x05, 0x1a, 2241 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x04)); 2242 `defše_s§ ("BI-02-C/UUID-128", 2243 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x20, 0x35, 0x11, 0x1c, 2247 `¿w_pdu (0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x04)); 2255 `defše_brw ("BV-01-C/UUID-16", 2256 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x08, 0x35, 0x03, 0x19, 2258 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x25, 0x00, 0x08, 0x00, 2264 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2267 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2270 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2273 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2276 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2279 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2282 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2285 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2288 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2291 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2294 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2297 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2300 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2303 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2306 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2309 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2312 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x08, 0x35, 0x03, 0x19, 2314 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 2316 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x00, 2319 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0b, 0x00, 0x08, 0x35, 2321 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x08, 0x35, 0x03, 0x19, 2323 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x25, 0x00, 0x08, 0x00, 2329 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2332 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2335 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2338 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2341 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2344 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2347 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2350 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2353 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2356 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2359 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2362 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2365 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2368 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2371 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2374 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2377 `defše_brw ("BV-01-C/UUID-32", 2378 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x0a, 0x35, 0x05, 0x1a, 2380 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x25, 0x00, 0x08, 0x00, 2386 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2389 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2392 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2395 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2398 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2401 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2404 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2407 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2410 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2413 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2416 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2419 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2422 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2425 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2428 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2431 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2434 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x0a, 0x35, 0x05, 0x1a, 2436 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 2438 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x00, 2441 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0b, 0x00, 0x08, 0x35, 2443 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x0a, 0x35, 0x05, 0x1a, 2445 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x25, 0x00, 0x08, 0x00, 2451 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2454 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2457 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2460 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2463 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2466 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2469 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2472 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2475 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2478 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2481 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2484 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2487 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2490 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2493 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2496 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2499 `defše_brw ("BV-01-C/UUID-128", 2500 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 2504 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x25, 0x00, 0x08, 0x00, 2510 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2513 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2516 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2519 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2522 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2525 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2528 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2531 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2534 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2537 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2540 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2543 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2546 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2549 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2552 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2555 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2558 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 2562 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x09, 0x00, 0x01, 0x00, 2564 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x00, 2567 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0b, 0x00, 0x08, 0x35, 2569 `¿w_pdu (0x02, 0x00, 0x01, 0x00, 0x16, 0x35, 0x11, 0x1c, 2573 `¿w_pdu (0x03, 0x00, 0x01, 0x00, 0x25, 0x00, 0x08, 0x00, 2579 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2582 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2585 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2588 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2591 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2594 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2597 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2600 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2603 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2606 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2609 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2612 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2615 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2618 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2621 `¿w_pdu (0x04, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x01, 0x00, 2624 `¿w_pdu (0x05, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2634 `defše_brw ("BV-02-C/UUID-16", 2635 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 2638 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x55, 0x00, 0x52, 0x35, 2650 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 2653 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2656 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0d, 0x35, 0x03, 0x19, 2659 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x55, 0x00, 0x52, 0x35, 2671 `defše_brw ("BV-02-C/UUID-32", 2672 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 2675 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x55, 0x00, 0x52, 0x35, 2687 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 2690 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2693 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x0f, 0x35, 0x05, 0x1a, 2696 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x55, 0x00, 0x52, 0x35, 2708 `defše_brw ("BV-02-C/UUID-128", 2709 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 2713 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x55, 0x00, 0x52, 0x35, 2725 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 2729 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x0a, 0x35, 2732 `¿w_pdu (0x06, 0x00, 0x01, 0x00, 0x1b, 0x35, 0x11, 0x1c, 2736 `¿w_pdu (0x07, 0x00, 0x01, 0x00, 0x55, 0x00, 0x52, 0x35, 2754 `defše_‹¡_de_©Œ ("TEXT_STR8/empty", 2755 `¿w_d©a (0x25, 0x00), 2756 `exp_d©a ( SDP_TEXT_STR8 , ¡r , "")); 2757 `defše_‹¡_de_©Œ ("TEXT_STR8", 2758 `¿w_d©a (0x25, 0x04, 0x41, 0x42, 0x43, 0x44), 2759 `exp_d©a ( SDP_TEXT_STR8 , ¡r , "ABCD")); 2760 `defše_‹¡_de_©Œ ("TEXT_STR16", 2761 `¿w_d©a (0x26, 0x00, 0x04, 0x41, 0x42, 0x43, 0x44), 2762 `exp_d©a ( SDP_TEXT_STR16 , ¡r , "ABCD")); 2763 `defše_‹¡_de_©Œ ("URL_STR8", 2764 `¿w_d©a (0x45, 0x15, 0x68, 0x74, 0x74, 0x70, 0x3a, 2768 `exp_d©a ( SDP_URL_STR8 , ¡r , "http://www.bluez.org/")); 2769 `defše_‹¡_de_©Œ ("URL_STR16", 2770 `¿w_d©a (0x46, 0x00, 0x15, 0x68, 0x74, 0x74, 0x70, 2774 `exp_d©a ( SDP_URL_STR16 , ¡r , "http://www.bluez.org/")); 2775 `defše_‹¡_de_©Œ ("NIL", 2776 `¿w_d©a (0x00), 2777 `exp_d©a ( SDP_DATA_NIL , ušt8 , 0)); 2778 `defše_‹¡_de_©Œ ("UINT8", 2779 `¿w_d©a (0x08, 0xff), 2780 `exp_d©a ( SDP_UINT8 , ušt8 , UINT8_MAX )); 2781 `defše_‹¡_de_©Œ ("INT8", 2782 `¿w_d©a (0x10, 0x80), 2783 `exp_d©a ( SDP_INT8 , št8 , INT8_MIN )); 2784 `defše_‹¡_de_©Œ ("BOOL", 2785 `¿w_d©a (0x28, 0x01), 2786 `exp_d©a ( SDP_BOOL , št8 , 1)); 2787 `defše_‹¡_de_©Œ ("UINT16", 2788 `¿w_d©a (0x09, 0xff, 0xff), 2789 `exp_d©a ( SDP_UINT16 , ušt16 , UINT16_MAX )); 2790 `defše_‹¡_de_©Œ ("INT16", 2791 `¿w_d©a (0x11, 0x80, 0x00), 2792 `exp_d©a ( SDP_INT16 , št16 , INT16_MIN )); 2793 `defše_‹¡_de_©Œ ("UINT32", 2794 `¿w_d©a (0x0A, 0xff, 0xff, 0xff, 0xff), 2795 `exp_d©a ( SDP_UINT32 , ušt32 , UINT32_MAX )); 2796 `defše_‹¡_de_©Œ ("INT32", 2797 `¿w_d©a (0x12, 0x80, 0x00, 0x00, 0x00), 2798 `exp_d©a ( SDP_INT32 , št32 , INT32_MIN )); 2799 `defše_‹¡_de_©Œ ("UINT64", 2800 `¿w_d©a (0x0B, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 2802 `exp_d©a ( SDP_UINT64 , ušt64 , UINT64_MAX )); 2803 `defše_‹¡_de_©Œ ("INT64", 2804 `¿w_d©a (0x13, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2806 `exp_d©a ( SDP_INT64 , št64 , INT64_MIN )); 2808 `defše_‹¡_de_©Œ ("UINT128", 2809 `¿w_d©a (0x0C, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 2812 `exp_d©a ( SDP_UINT128 , ušt128 , 2813 `bužd_u128 (0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 2816 `defše_‹¡_de_©Œ ("INT128", 2817 `¿w_d©a (0x14, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 2820 `exp_d©a ( SDP_INT128 , ušt128 , 2821 `bužd_u128 (0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 2825  `g_‹¡_run (); 2826 } } @unit/test-textfile.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~<¡dio.h > 29  ~ 30  ~ 31  ~<¡dlib.h > 32  ~<¡ršg.h > 34  ~ 36  ~"¤c/‹xtfže.h " 38 cÚ¡  g‹¡_·thÇme [] = "/tmp/textfile"; 40  $utž_ü—‹_em±y () 42  fd ; 44 fd = `ü—t ( ‹¡_·thÇme , 0644); 45 ià( fd < 0) 48 ià( `árunÿ‹ ( fd , 0) < 0) 49  dÚe ; 51 dÚe : 52 `þo£ ( fd ); 53 } } 55  $utž_ü—‹_·gesize () 57  v®ue [512]; 58  i ; 59  fd , size ; 61 size = `g‘·gesize (); 62 ià( size < 0) 65 fd = `ü—t ( ‹¡_·thÇme , 0644); 66 ià( fd < 0) 69 ià( `árunÿ‹ ( fd , 0) < 0) 70  dÚe ; 72 `mem£t ( v®ue , 0, (value)); 73  i = 0; i < ( size / ( v®ue )); i++) { 74 ià( `wr™e ( fd , v®ue , (value)) < 0) 78 dÚe : 79 `þo£ ( fd ); 80 } } 82  $‹¡_·gesize () 84  key [18], * ¡r ; 85  size ; 87 size = `g‘·gesize (); 88 `g_as£¹ ( size >= 4096); 90 ià( `g_‹¡_v”bo£ ()) 91 `g_´št ("Sy¡em u£ ¨·gsizoà%d by‹s\n", size ); 93 `utž_ü—‹_·gesize (); 95 `¥rštf ( key , "11:11:11:11:11:11"); 96 ¡r = `‹xtfže_g‘ ( ‹¡_·thÇme , key ); 98 ià( `g_‹¡_v”bo£ ()) 99 `g_´št ("%s\n", ¡r ); 101 `g_as£¹ ( ¡r =ð NULL ); 102 } } 104  $‹¡_d–‘e () 106  key [18], v®ue [512], * ¡r ; 108 `utž_ü—‹_em±y (); 110 `¥rštf ( key , "00:00:00:00:00:00"); 111 `g_as£¹ ( `‹xtfže_d– ( ‹¡_·thÇme , key ) == 0); 113 `mem£t ( v®ue , 0, (value)); 114 `g_as£¹ ( `‹xtfže_put ( ‹¡_·thÇme , key , v®ue ) == 0); 116 ¡r = `‹xtfže_g‘ ( ‹¡_·thÇme , key ); 117 `g_as£¹ ( ¡r !ð NULL ); 119 ià( `g_‹¡_v”bo£ ()) 120 `g_´št ("%s\n", ¡r ); 122 `g_ä“ ( ¡r ); 123 } } 125  $‹¡_ov”wr™e () 127  key [18], v®ue [512], * ¡r ; 129 `utž_ü—‹_em±y (); 131 `¥rštf ( key , "00:00:00:00:00:00"); 132 `mem£t ( v®ue , 0, (value)); 133 `g_as£¹ ( `‹xtfže_put ( ‹¡_·thÇme , key , v®ue ) == 0); 135 `¢´štf ( v®ue , (value), "Test"); 136 `g_as£¹ ( `‹xtfže_put ( ‹¡_·thÇme , key , v®ue ) == 0); 138 `g_as£¹ ( `‹xtfže_put ( ‹¡_·thÇme , key , v®ue ) == 0); 140 `g_as£¹ ( `‹xtfže_put ( ‹¡_·thÇme , key , v®ue ) == 0); 142 `g_as£¹ ( `‹xtfže_d– ( ‹¡_·thÇme , key ) == 0); 144 ¡r = `‹xtfže_g‘ ( ‹¡_·thÇme , key ); 146 ià( `g_‹¡_v”bo£ ()) 147 `g_´št ("%s\n", ¡r ); 149 `g_as£¹ ( ¡r =ð NULL ); 150 } } 152  $check_’Œy (* key , * v®ue , * d©a ) 154  max = `GPOINTER_TO_UINT ( d©a ); 155  Ën ; 157 Ën = `¡¹Þ ( key + 16, NULL , 16); 158 ià( Ën == 1) 159 Ën = max ; 161 ià( `g_‹¡_v”bo£ ()) 162 `g_´št ("% %s\n", key , v®ue ); 164 `g_as£¹ ( `¡¾’ ( v®ue è=ð Ën ); 165 } } 167  $‹¡_muÉË () 169  key [18], v®ue [512], * ¡r ; 170  i , j , max = 10; 172 `utž_ü—‹_em±y (); 174  i = 1; i < max + 1; i++) { 175 `¥rštf ( key , "00:00:00:00:00:%02X", i ); 177 `mem£t ( v®ue , 0, (value)); 178  j = 0; j < i ; j++) 179 v®ue [ j ] = 'x'; 181 `g_as£¹ ( `‹xtfže_put ( ‹¡_·thÇme , key , v®ue ) == 0); 183 ¡r = `‹xtfže_g‘ ( ‹¡_·thÇme , key ); 185 ià( `g_‹¡_v”bo£ ()) 186 `g_´št ("% %s\n", key , ¡r ); 188 `g_as£¹ ( ¡r !ð NULL ); 189 `g_as£¹ ( `¡rcmp ( ¡r , v®ue ) == 0); 191 `ä“ ( ¡r ); 194 `¥rštf ( key , "00:00:00:00:00:%02X", max ); 196 `mem£t ( v®ue , 0, (value)); 197  j = 0; j < max ; j++) 198 v®ue [ j ] = 'y'; 200 `g_as£¹ ( `‹xtfže_put ( ‹¡_·thÇme , key , v®ue ) == 0); 202 ¡r = `‹xtfže_g‘ ( ‹¡_·thÇme , key ); 204 ià( `g_‹¡_v”bo£ ()) 205 `g_´št ("% %s\n", key , ¡r ); 207 `g_as£¹ ( ¡r !ð NULL ); 208 `g_as£¹ ( `¡rcmp ( ¡r , v®ue ) == 0); 210 `ä“ ( ¡r ); 212 `¥rštf ( key , "00:00:00:00:00:%02X", 1); 214 `mem£t ( v®ue , 0, (value)); 215  j = 0; j < max ; j++) 216 v®ue [ j ] = 'z'; 218 `g_as£¹ ( `‹xtfže_put ( ‹¡_·thÇme , key , v®ue ) == 0); 220 ¡r = `‹xtfže_g‘ ( ‹¡_·thÇme , key ); 222 ià( `g_‹¡_v”bo£ ()) 223 `g_´št ("% %s\n", key , ¡r ); 225 `g_as£¹ ( ¡r !ð NULL ); 226 `g_as£¹ ( `¡rcmp ( ¡r , v®ue ) == 0); 228 `ä“ ( ¡r ); 230  i = 1; i < max + 1; i++) { 231 `¥rštf ( key , "00:00:00:00:00:%02X", i ); 232 ¡r = `‹xtfže_g‘ ( ‹¡_·thÇme , key ); 234 ià( `g_‹¡_v”bo£ ()) 235 `g_´št ("% %s\n", key , ¡r ); 237 `g_as£¹ ( ¡r !ð NULL ); 239 ià( i == 1) 240 `g_as£¹ ( `¡¾’ ( ¡r è=ð max ); 242 `g_as£¹ ( `¡¾’ ( ¡r è=ð i ); 244 `g_ä“ ( ¡r ); 247 `¥rštf ( key , "00:00:00:00:00:%02X", 2); 248 `g_as£¹ ( `‹xtfže_d– ( ‹¡_·thÇme , key ) == 0); 250 `¥rštf ( key , "00:00:00:00:00:%02X", max - 3); 251 `g_as£¹ ( `‹xtfže_d– ( ‹¡_·thÇme , key ) == 0); 253 `‹xtfže_fÜ—ch ( ‹¡_·thÇme , check_’Œy , `GUINT_TO_POINTER ( max )); 255 `¥rštf ( key , "00:00:00:00:00:%02X", 1); 256 `g_as£¹ ( `‹xtfže_d– ( ‹¡_·thÇme , key ) == 0); 258 `¥rštf ( key , "00:00:00:00:00:%02X", max ); 259 `g_as£¹ ( `‹xtfže_d– ( ‹¡_·thÇme , key ) == 0); 261 `¥rštf ( key , "00:00:00:00:00:%02X", max + 1); 262 `g_as£¹ ( `‹xtfže_d– ( ‹¡_·thÇme , key ) == 0); 264 `‹xtfže_fÜ—ch ( ‹¡_·thÇme , check_’Œy , `GUINT_TO_POINTER ( max )); 265 } } 267  $maš ( ¬gc , * ¬gv []) 269 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 271 `g_‹¡_add_func ("/‹xtfže/·gesize", ‹¡_·gesize ); 272 `g_‹¡_add_func ("/‹xtfže/d–‘e", ‹¡_d–‘e ); 273 `g_‹¡_add_func ("/‹xtfže/ov”wr™e", ‹¡_ov”wr™e ); 274 `g_‹¡_add_func ("/‹xtfže/muÉË", ‹¡_muÉË ); 276  `g_‹¡_run (); 277 } } @unit/test-uhid.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 29  ~<¡dlib.h > 30  ~<¡dboÞ.h > 31  ~<š‰y³s.h > 32  ~<¡ršg.h > 33  ~ 34  ~ 36  ~ 38  ~"¤c/sh¬ed/uhid.h " 39  ~"¤c/sh¬ed/utž.h " 41  s‹¡_pdu { 42 boÞ mv®id ; 43 cÚ¡ ušt8_t * md©a ; 44 size_t msize ; 47  s‹¡_d©a { 48 * m‹¡_Çme ; 49  ‹¡_pdu * mpdu_li¡ ; 52  scÚ‹xt { 53 GMašLoÝ * mmaš_loÝ ; 54  bt_uhid * muhid ; 55 gušt msourû ; 56 gušt m´oûss ; 57  mfd ; 58  mpdu_off£t ; 59 cÚ¡  ‹¡_d©a * md©a ; 62  #ev’t ( ¬gs ...) \ 64 . v®id = Œue , \ 65 . d©a = (*è ¬gs , \ 66 . size = (* ¬gs ), \ 67 } ) 69  #defše_‹¡ ( Çme , funùiÚ , ¬gs ...) \ 71 cÚ¡  ‹¡_pdu pdus [] = { \ 72 ¬gs , { } \ 74  ‹¡_d©a d©a ; \ 75 d©a . ‹¡_Çme = `g_¡rdup ( Çme ); \ 76 d©a . pdu_li¡ = `g_m®loc (( pdus )); \ 77 `memýy ( d©a . pdu_li¡ , pdus , (pdus)); \ 78 `g_‹¡_add_d©a_func ( Çme , & d©a , funùiÚ ); \ 79 } 0) ) 81  $‹¡_debug (cÚ¡ * ¡r , * u£r_d©a ) 83 cÚ¡ * ´efix = u£r_d©a ; 85 `g_´št ("%s%s\n", ´efix , ¡r ); 86 } } 88  $‹¡_ä“ ( gcÚ¡poš‹r u£r_d©a ) 90 cÚ¡  ‹¡_d©a * d©a = u£r_d©a ; 92 `g_ä“ ( d©a -> ‹¡_Çme ); 93 `g_ä“ ( d©a -> pdu_li¡ ); 94 } } 96  gboÞ—n $cÚ‹xt_qu™ ( gpoš‹r u£r_d©a ) 98  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 100 ià( cÚ‹xt -> ´oûss > 0) 101 `g_sourû_»move ( cÚ‹xt -> ´oûss ); 103 `g_maš_loÝ_qu™ ( cÚ‹xt -> maš_loÝ ); 105  FALSE ; 106 } } 108  gboÞ—n $£nd_pdu ( gpoš‹r u£r_d©a ) 110  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 111 cÚ¡  ‹¡_pdu * pdu ; 112 ssize_t Ën ; 114 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 116 Ën = `wr™e ( cÚ‹xt -> fd , pdu -> d©a ,…du-> size ); 118 ià( `g_‹¡_v”bo£ ()) 119 `utž_hexdump ('<', pdu -> d©a , Ën , ‹¡_debug , "uHID: "); 121 `g_as£¹_cmpšt ( Ën , ==, pdu -> size ); 123 cÚ‹xt -> ´oûss = 0; 124  FALSE ; 125 } } 127  $cÚ‹xt_´oûss ( cÚ‹xt *context) 129 ià(! cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ]. v®id ) { 130 `cÚ‹xt_qu™ ( cÚ‹xt ); 134 cÚ‹xt -> ´oûss = `g_idË_add ( £nd_pdu , context); 135 } } 137  gboÞ—n $‹¡_hªdËr ( GIOChªÃl * chªÃl , GIOCÚd™iÚ cÚd , 138 gpoš‹r u£r_d©a ) 140  cÚ‹xt *cÚ‹xˆð u£r_d©a ; 141 cÚ¡  ‹¡_pdu * pdu ; 142  buf [( uhid_ev’t )]; 143 ssize_t Ën ; 144  fd ; 146 pdu = & cÚ‹xt -> d©a -> pdu_li¡ [cÚ‹xt-> pdu_off£t ++]; 148 ià( cÚd & ( G_IO_NVAL | G_IO_ERR | G_IO_HUP )) { 149 cÚ‹xt -> sourû = 0; 150 `g_´št ("%s: cÚd %x\n", __func__ , cÚd ); 151  FALSE ; 154 fd = `g_io_chªÃl_unix_g‘_fd ( chªÃl ); 156 Ën = `»ad ( fd , buf , (buf)); 158 `g_as£¹ ( Ën > 0); 160 ià( `g_‹¡_v”bo£ ()) 161 `utž_hexdump ('>', buf , Ën , ‹¡_debug , "uHID: "); 163 `g_as£¹_cmpšt ( Ën , ==, pdu -> size ); 165 `g_as£¹ ( `memcmp ( buf , pdu -> d©a ,…du-> size ) == 0); 167 `cÚ‹xt_´oûss ( cÚ‹xt ); 169  TRUE ; 170 } } 172  cÚ‹xt * $ü—‹_cÚ‹xt ( gcÚ¡poš‹r d©a ) 174  cÚ‹xt *cÚ‹xˆð `g_Ãw0 (context, 1); 175 GIOChªÃl * chªÃl ; 176  ”r , sv [2]; 178 cÚ‹xt -> maš_loÝ = `g_maš_loÝ_Ãw ( NULL , FALSE ); 179 `g_as£¹ ( cÚ‹xt -> maš_loÝ ); 181 ”r = `sock‘·œ ( AF_UNIX , SOCK_SEQPACKET | SOCK_CLOEXEC , 0, sv ); 182 `g_as£¹ ( ”r == 0); 184 cÚ‹xt -> uhid = `bt_uhid_Ãw ( sv [0]); 185 `g_as£¹ ( cÚ‹xt -> uhid !ð NULL ); 187 chªÃl = `g_io_chªÃl_unix_Ãw ( sv [1]); 189 `g_io_chªÃl_£t_þo£_Ú_uÄef ( chªÃl , TRUE ); 190 `g_io_chªÃl_£t_’codšg ( chªÃl , NULL , NULL); 191 `g_io_chªÃl_£t_bufã»d ( chªÃl , FALSE ); 193 cÚ‹xt -> sourû = `g_io_add_w©ch ( chªÃl , 194 G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL , 195 ‹¡_hªdËr , cÚ‹xt ); 196 `g_as£¹ ( cÚ‹xt -> sourû > 0); 198 `g_io_chªÃl_uÄef ( chªÃl ); 200 cÚ‹xt -> fd = sv [1]; 201 cÚ‹xt -> d©a = data; 203  cÚ‹xt ; 204 } } 206  $de¡roy_cÚ‹xt ( cÚ‹xt *context) 208 ià( cÚ‹xt -> sourû > 0) 209 `g_sourû_»move ( cÚ‹xt -> sourû ); 211 `bt_uhid_uÄef ( cÚ‹xt -> uhid ); 213 `g_maš_loÝ_uÄef ( cÚ‹xt -> maš_loÝ ); 215 `‹¡_ä“ ( cÚ‹xt -> d©a ); 216 `g_ä“ ( cÚ‹xt ); 217 } } 219  $execu‹_cÚ‹xt ( cÚ‹xt *context) 221 `g_maš_loÝ_run ( cÚ‹xt -> maš_loÝ ); 223 `de¡roy_cÚ‹xt ( cÚ‹xt ); 224 } } 226 cÚ¡  uhid_ev’t gev_ü—‹ = { 227 . ty³ = UHID_CREATE , 230 cÚ¡  uhid_ev’t gev_de¡roy = { 231 . ty³ = UHID_DESTROY , 234 cÚ¡  uhid_ev’t gev_ã©u»_ªsw” = { 235 . ty³ = UHID_FEATURE_ANSWER , 238 cÚ¡  uhid_ev’t gev_šput = { 239 . ty³ = UHID_INPUT , 242 cÚ¡  uhid_ev’t gev_ouut = { 243 . ty³ = UHID_OUTPUT , 246 cÚ¡  uhid_ev’t gev_ã©u» = { 247 . ty³ = UHID_FEATURE , 250  $‹¡_þ›Á ( gcÚ¡poš‹r d©a ) 252  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 254 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/uhid/command/create")) 255 `bt_uhid_£nd ( cÚ‹xt -> uhid , & ev_ü—‹ ); 257 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/uhid/command/destroy")) 258 `bt_uhid_£nd ( cÚ‹xt -> uhid , & ev_de¡roy ); 260 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , 262 `bt_uhid_£nd ( cÚ‹xt -> uhid , & ev_ã©u»_ªsw” ); 264 ià( `g_¡r_equ® ( cÚ‹xt -> d©a -> ‹¡_Çme , "/uhid/command/input")) 265 `bt_uhid_£nd ( cÚ‹xt -> uhid , & ev_šput ); 267 `execu‹_cÚ‹xt ( cÚ‹xt ); 268 } } 270  $hªdË_ouut ( uhid_ev’t * ev , * u£r_d©a ) 272 `g_as£¹_cmpšt ( ev -> ty³ , ==, UHID_OUTPUT ); 274 `cÚ‹xt_qu™ ( u£r_d©a ); 275 } } 277  $hªdË_ã©u» ( uhid_ev’t * ev , * u£r_d©a ) 279 `g_as£¹_cmpšt ( ev -> ty³ , ==, UHID_FEATURE ); 281 `cÚ‹xt_qu™ ( u£r_d©a ); 282 } } 284  $‹¡_£rv” ( gcÚ¡poš‹r d©a ) 286  cÚ‹xt *cÚ‹xˆð `ü—‹_cÚ‹xt ( d©a ); 288 `bt_uhid_»gi¡” ( cÚ‹xt -> uhid , UHID_OUTPUT , hªdË_ouut , context); 289 `bt_uhid_»gi¡” ( cÚ‹xt -> uhid , UHID_FEATURE , hªdË_ã©u» , context); 291 `g_idË_add ( £nd_pdu , cÚ‹xt ); 293 `execu‹_cÚ‹xt ( cÚ‹xt ); 294 } } 296  $maš ( ¬gc , * ¬gv []) 298 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 300 `defše_‹¡ ("/uhid/commªd/ü—‹", ‹¡_þ›Á , `ev’t (& ev_ü—‹ )); 301 `defše_‹¡ ("/uhid/commªd/de¡roy", ‹¡_þ›Á , `ev’t (& ev_de¡roy )); 302 `defše_‹¡ ("/uhid/commªd/ã©u»_ªsw”", ‹¡_þ›Á , 303 `ev’t (& ev_ã©u»_ªsw” )); 304 `defše_‹¡ ("/uhid/commªd/šput", ‹¡_þ›Á , `ev’t (& ev_šput )); 306 `defše_‹¡ ("/uhid/ev’t/ouut", ‹¡_£rv” , `ev’t (& ev_ouut )); 307 `defše_‹¡ ("/uhid/ev’t/ã©u»", ‹¡_£rv” , `ev’t (& ev_ã©u» )); 309  `g_‹¡_run (); 310 } } @unit/test-uuid.c 24 #ifdeà HAVE_CONFIG_H 25  ~ 28  ~ 30  ~ 32  ~"lib/uuid.h " 34  suuid_‹¡_d©a { 35 cÚ¡ * m¡r ; 36 ušt16_t mv®16 ; 37 ušt32_t mv®32 ; 38 * mbš¬y ; 39 ušt8_t mty³ ; 40 cÚ¡ * m¡r128 ; 41 * mbš¬y128 ; 44  guuid_ba£_bš¬y [] = { 48  uuid_‹¡_d©a guuid_ba£ = { 49 . ¡r = "0000", 50 . gv®16 = 0x0000, 51 . gty³ = BT_UUID16 , 52 . g¡r128 = "00000000-0000-1000-8000-00805f9b34fb", 53 . gbš¬y128 = uuid_ba£_bš¬y , 56  guuid_six‹’_bš¬y [] = { 60  uuid_‹¡_d©a guuid_six‹’1 = { 61 . ¡r = "0x1234", 62 . gv®16 = 0x1234, 63 . gty³ = BT_UUID16 , 64 . g¡r128 = "00001234-0000-1000-8000-00805F9B34FB", 65 . gbš¬y128 = uuid_six‹’_bš¬y , 68  uuid_‹¡_d©a guuid_six‹’2 = { 69 . ¡r = "1234", 70 . gv®16 = 0x1234, 71 . gty³ = BT_UUID16 , 72 . g¡r128 = "00001234-0000-1000-8000-00805F9B34FB", 73 . gbš¬y128 = uuid_six‹’_bš¬y , 76  guuid_32_bš¬y [] = { 80  uuid_‹¡_d©a guuid_32_1 = { 81 . ¡r = "0x12345678", 82 . gv®32 = 0x12345678, 83 . gty³ = BT_UUID32 , 84 . g¡r128 = "12345678-0000-1000-8000-00805F9B34FB", 85 . gbš¬y128 = uuid_32_bš¬y , 88  uuid_‹¡_d©a guuid_32_2 = { 89 . ¡r = "12345678", 90 . gv®32 = 0x12345678, 91 . gty³ = BT_UUID32 , 92 . g¡r128 = "12345678-0000-1000-8000-00805F9B34FB", 93 . gbš¬y128 = uuid_32_bš¬y , 96  guuid_128_bš¬y [] = { 100  uuid_‹¡_d©a guuid_128 = { 101 . ¡r = "F0000000-0000-1000-8000-00805f9b34fb", 102 . gbš¬y = uuid_128_bš¬y , 103 . gty³ = BT_UUID128 , 104 . g¡r128 = "F0000000-0000-1000-8000-00805f9b34fb", 105 . gbš¬y128 = uuid_128_bš¬y , 108  $‹¡_uuid ( gcÚ¡poš‹r d©a ) 110 cÚ¡  uuid_‹¡_d©a * ‹¡_d©a = d©a ; 111 bt_uuid_t uuid ; 113 `g_as£¹ ( `bt_¡ršg_to_uuid (& uuid , ‹¡_d©a -> ¡r ) == 0); 114 `g_as£¹ ( uuid . ty³ =ð ‹¡_d©a ->type); 116  uuid . ty³ ) { 117  BT_UUID16 : 118 `g_as£¹ ( uuid . v®ue . u16 =ð ‹¡_d©a -> v®16 ); 120  BT_UUID32 : 121 `g_as£¹ ( uuid . v®ue . u32 =ð ‹¡_d©a -> v®32 ); 123  BT_UUID128 : 128 `g_as£¹ ( `memcmp (& uuid . v®ue . u128 , ‹¡_d©a -> bš¬y , 16) == 0); 130  BT_UUID_UNSPEC : 134 } } 136  $‹¡_¡r ( gcÚ¡poš‹r d©a ) 138 cÚ¡  uuid_‹¡_d©a * ‹¡_d©a = d©a ; 139 cÚ¡ * ¡r ; 140  buf [128]; 141 bt_uuid_t uuid ; 143 ià( `g_¡r_has_´efix ( ‹¡_d©a -> ¡r , "0x"è=ð TRUE ) 144 ¡r = ‹¡_d©a ->str + 2; 146 ¡r = ‹¡_d©a ->str; 148 `g_as£¹ ( `bt_¡ršg_to_uuid (& uuid , ‹¡_d©a -> ¡r ) == 0); 150 `bt_uuid_to_¡ršg (& uuid , buf , (buf)); 151 `g_as£¹ ( `¡rÿ£cmp ( buf , ¡r ) == 0); 153  ‹¡_d©a -> ty³ ) { 154  BT_UUID16 : 155 `bt_uuid16_ü—‹ (& uuid , ‹¡_d©a -> v®16 ); 157  BT_UUID32 : 158 `bt_uuid32_ü—‹ (& uuid , ‹¡_d©a -> v®32 ); 164 `bt_uuid_to_¡ršg (& uuid , buf , (buf)); 165 `g_as£¹ ( `¡rÿ£cmp ( buf , ¡r ) == 0); 166 } } 168  $‹¡_cmp ( gcÚ¡poš‹r d©a ) 170 cÚ¡  uuid_‹¡_d©a * ‹¡_d©a = d©a ; 171 bt_uuid_t uuid1 , uuid2 ; 173 `g_as£¹ ( `bt_¡ršg_to_uuid (& uuid1 , ‹¡_d©a -> ¡r ) == 0); 174 `g_as£¹ ( `bt_¡ršg_to_uuid (& uuid2 , ‹¡_d©a -> ¡r128 ) == 0); 176 `g_as£¹ ( `bt_uuid_cmp (& uuid1 , & uuid2 ) == 0); 177 } } 179 cÚ¡  uuid_‹¡_d©a gcom´ess [] = { 181 . ¡r = "00001234-0000-1000-8000-00805f9b34fb", 182 . gty³ = BT_UUID16 , 183 . gv®16 = 0x1234, 185 . g¡r = "0000FFFF-0000-1000-8000-00805f9b34fb", 186 . gty³ = BT_UUID16 , 187 . gv®16 = 0xFFFF, 189 . g¡r = "0000FFFF-0000-1000-8000-00805F9B34FB", 190 . gty³ = BT_UUID16 , 191 . gv®16 = 0xFFFF, 193 . g¡r = "F0000000-0000-1000-8000-00805f9b34fb", 194 . gty³ = BT_UUID128 , 195 . gbš¬y = uuid_128_bš¬y , 199 cÚ¡ * gm®fÜmed [] = { 215 NULL , 218  $‹¡_m®fÜmed ( gcÚ¡poš‹r d©a ) 220 cÚ¡ * ¡r = d©a ; 221 bt_uuid_t uuid ; 223 `g_as£¹ ( `bt_¡ršg_to_uuid (& uuid , ¡r ) != 0); 224 } } 226  $maš ( ¬gc , * ¬gv []) 228 size_t i ; 230 `g_‹¡_š™ (& ¬gc , & ¬gv , NULL ); 232 `g_‹¡_add_d©a_func ("/uuid/ba£", & uuid_ba£ , ‹¡_uuid ); 233 `g_‹¡_add_d©a_func ("/uuid/ba£/¡r", & uuid_ba£ , ‹¡_¡r ); 234 `g_‹¡_add_d©a_func ("/uuid/ba£/cmp", & uuid_ba£ , ‹¡_cmp ); 236 `g_‹¡_add_d©a_func ("/uuid/six‹’1", & uuid_six‹’1 , ‹¡_uuid ); 237 `g_‹¡_add_d©a_func ("/uuid/six‹’1/¡r", & uuid_six‹’1 , ‹¡_¡r ); 238 `g_‹¡_add_d©a_func ("/uuid/six‹’1/cmp", & uuid_six‹’1 , ‹¡_cmp ); 240 `g_‹¡_add_d©a_func ("/uuid/six‹’2", & uuid_six‹’2 , ‹¡_uuid ); 241 `g_‹¡_add_d©a_func ("/uuid/six‹’2/¡r", & uuid_six‹’2 , ‹¡_¡r ); 242 `g_‹¡_add_d©a_func ("/uuid/six‹’2/cmp", & uuid_six‹’2 , ‹¡_cmp ); 244 `g_‹¡_add_d©a_func ("/uuid/thœtytwo1", & uuid_32_1 , ‹¡_uuid ); 245 `g_‹¡_add_d©a_func ("/uuid/thœtytwo1/¡r", & uuid_32_1 , ‹¡_¡r ); 246 `g_‹¡_add_d©a_func ("/uuid/thœtytwo1/cmp", & uuid_32_1 , ‹¡_cmp ); 248 `g_‹¡_add_d©a_func ("/uuid/thœtytwo2", & uuid_32_2 , ‹¡_uuid ); 249 `g_‹¡_add_d©a_func ("/uuid/thr™ytwo2/¡r", & uuid_32_2 , ‹¡_¡r ); 250 `g_‹¡_add_d©a_func ("/uuid/thœtytwo2/cmp", & uuid_32_2 , ‹¡_cmp ); 252 `g_‹¡_add_d©a_func ("/uuid/Ú‘w’tyeight", & uuid_128 , ‹¡_uuid ); 253 `g_‹¡_add_d©a_func ("/uuid/Ú‘w’tyeight/¡r", & uuid_128 , ‹¡_¡r ); 254 `g_‹¡_add_d©a_func ("/uuid/Ú‘w’tyeight/cmp", & uuid_128 , ‹¡_cmp ); 256  i = 0; m®fÜmed [i]; i++) { 257 * ‹¡·th ; 259 ‹¡·th = `g_¡rdup_´štf ("/uuid/m®fÜmed/%s", m®fÜmed [ i ]); 260 `g_‹¡_add_d©a_func ( ‹¡·th , m®fÜmed [ i ], ‹¡_m®fÜmed ); 261 `g_ä“ ( ‹¡·th ); 264  i = 0; i < (( com´ess ) / (compress[0])); i++) { 265 * ‹¡·th ; 267 ‹¡·th = `g_¡rdup_´štf ("/uuid/compress/%s", 268 com´ess [ i ]. ¡r ); 269 `g_‹¡_add_d©a_func ( ‹¡·th , com´ess + i , ‹¡_uuid ); 270 `g_ä“ ( ‹¡·th ); 273  `g_‹¡_run (); 274 } } @unit/util.c 22 #ifdeà HAVE_CONFIG_H 23  ~"cÚfig.h " 26  ~ 27  ~ 28  ~ 29  ~<¡dlib.h > 30  ~<¡dšt.h > 31  ~<¡ršg.h > 32  ~<”ºo.h > 34  ~ 36  ~"utž.h " 38 GQu¬k $‹¡_”rÜ_qu¬k () 40  `g_qu¬k_äom_¡©ic_¡ršg ("test-error-quark"); 41 } } 43  $dump_by‹s (cÚ¡ ušt8_t * buf , size_t buf_Ën ) 45 size_t i ; 47  i = 0; i < buf_Ën ; i++) 48 `g_´š‹¼ ("%02x ", buf [ i ]); 50 `g_´š‹¼ ("\n"); 51 } } 53  $dump_bufs (cÚ¡ * mem1 , size_t Ën1 , cÚ¡ * mem2 , size_ˆ Ën2 ) 55 `g_´š‹¼ ("\nExpected: "); 56 `dump_by‹s ( mem1 , Ën1 ); 57 `g_´š‹¼ ("Got: "); 58 `dump_by‹s ( mem2 , Ën2 ); 59 } } 61  $as£¹_memequ® (cÚ¡ * mem1 , size_t Ën1 , 62 cÚ¡ * mem2 , size_t Ën2 ) 64 ià( Ën1 =ð Ën2 && `memcmp ( mem1 , mem2 ,†en1) == 0) 67 `dump_bufs ( mem1 , Ën1 , mem2 , Ën2 ); 69 `g_as£¹ (0); 70 } } 72 GObex * $ü—‹_gobex ( fd , GObexT¿n¥ÜtTy³ Œª¥Üt_ty³ , 73 gboÞ—n þo£_Ú_uÄef ) 75 GIOChªÃl * io ; 76 GObex * obex ; 78 io = `g_io_chªÃl_unix_Ãw ( fd ); 79 `g_as£¹ ( io !ð NULL ); 81 `g_io_chªÃl_£t_þo£_Ú_uÄef ( io , þo£_Ú_uÄef ); 83 obex = `g_obex_Ãw ( io , Œª¥Üt_ty³ , -1, -1); 84 `g_io_chªÃl_uÄef ( io ); 86  obex ; 87 } } 89  $ü—‹_’dpošts ( GObex ** obex , GIOChªÃl ** io ,  sock_ty³ ) 91 GObexT¿n¥ÜtTy³ Œª¥Üt_ty³ ; 92  sv [2]; 94 ià( `sock‘·œ ( AF_UNIX , sock_ty³ | SOCK_NONBLOCK , 0, sv ) < 0) { 95 `g_´š‹¼ ("sock‘·œ: %s", `¡»¼Ü ( ”ºo )); 96 `abÜt (); 99 ià( sock_ty³ =ð SOCK_STREAM ) 100 Œª¥Üt_ty³ = G_OBEX_TRANSPORT_STREAM ; 102 Œª¥Üt_ty³ = G_OBEX_TRANSPORT_PACKET ; 104 * obex = `ü—‹_gobex ( sv [0], Œª¥Üt_ty³ , TRUE ); 105 `g_as£¹ (* obex !ð NULL ); 107 ià( io =ð NULL ) { 108 `þo£ ( sv [1]); 112 * io = `g_io_chªÃl_unix_Ãw ( sv [1]); 113 `g_as£¹ (* io !ð NULL ); 115 `g_io_chªÃl_£t_’codšg (* io , NULL , NULL); 116 `g_io_chªÃl_£t_bufã»d (* io , FALSE ); 117 `g_io_chªÃl_£t_þo£_Ú_uÄef (* io , TRUE ); 118 } } 120 gboÞ—n $‹¡_timeout ( gpoš‹r u£r_d©a ) 122  ‹¡_d©a * d = u£r_d©a ; 124 ià(! `g_maš_loÝ_is_rušg ( d -> mašloÝ )) 125  FALSE ; 127 d -> ”r = `g_”rÜ_Ãw ( TEST_ERROR , TEST_ERROR_TIMEOUT , "Timed out"); 129 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 131  FALSE ; 132 } } 134 gboÞ—n $‹¡_io_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , gpoš‹r u£r_d©a ) 136  ‹¡_d©a * d = u£r_d©a ; 137 GIOStus ¡©us ; 138 gsize by‹s_wr™‹n , rby‹s , £nd_buf_Ën , ex³ù_Ën ; 139  buf [65535]; 140 cÚ¡ * £nd_buf , * ex³ù ; 142 ex³ù = d -> »cv [d-> couÁ ]. d©a ; 143 ex³ù_Ën = d -> »cv [d-> couÁ ]. Ën ; 144 £nd_buf = d -> £nd [d-> couÁ ]. d©a ; 145 £nd_buf_Ën = d -> £nd [d-> couÁ ]. Ën ; 147 d -> couÁ ++; 149 ià(!( cÚd & G_IO_IN )) 150  £nd ; 152 ¡©us = `g_io_chªÃl_»ad_ch¬s ( io , buf , (buf), & rby‹s , NULL ); 153 ià( ¡©us !ð G_IO_STATUS_NORMAL ) { 154 `g_´št ("io_cb couÁ %u\n", d -> couÁ ); 155 `g_£t_”rÜ (& d -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 156 "R—dšg d©¨çžed w™h stu %d", ¡©us ); 157  çžed ; 160 ià( rby‹s < ex³ù_Ën ) { 161 `g_´št ("io_cb couÁ %u\n", d -> couÁ ); 162 `dump_bufs ( ex³ù , ex³ù_Ën , buf , rby‹s ); 163 `g_£t_”rÜ (& d -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 165  çžed ; 168 ià( `memcmp ( buf , ex³ù , ex³ù_Ën ) != 0) { 169 `g_´št ("io_cb couÁ %u\n", d -> couÁ ); 170 `dump_bufs ( ex³ù , ex³ù_Ën , buf , rby‹s ); 171 `g_£t_”rÜ (& d -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 173  çžed ; 176 £nd : 177 ià(( gssize è £nd_buf_Ën < 0) 178  çžed ; 180 `g_io_chªÃl_wr™e_ch¬s ( io , £nd_buf , £nd_buf_Ën , & by‹s_wr™‹n , 181 NULL ); 182 ià( by‹s_wr™‹n !ð £nd_buf_Ën ) { 183 `g_´št ("io_cb couÁ %u\n", d -> couÁ ); 184 `g_£t_”rÜ (& d -> ”r , TEST_ERROR , TEST_ERROR_UNEXPECTED , 186  çžed ; 189 ià( d -> »cv [d-> couÁ ]. Ën < 0 || ( gssize è ex³ù_Ën < 0) 190  `‹¡_io_cb ( io , G_IO_OUT , u£r_d©a ); 192  TRUE ; 194 çžed : 195 `g_maš_loÝ_qu™ ( d -> mašloÝ ); 196 d -> io_com¶‘ed = TRUE ; 197  FALSE ; 198 } } @unit/util.h 22  ~ 25 mTEST_ERROR_TIMEOUT , 26 mTEST_ERROR_UNEXPECTED , 29  s‹¡_buf { 30 cÚ¡ * md©a ; 31 gssize mËn ; 34  s‹¡_d©a { 35 gušt mcouÁ ; 36 GE¼Ü * m”r ; 37  ‹¡_buf m»cv [4]; 38  ‹¡_buf m£nd [4]; 39 gušt m´ovide_d–ay ; 40 GObex * mobex ; 41 gušt mid ; 42 gsize mtÙ® ; 43 GMašLoÝ * mmašloÝ ; 44 gboÞ—n mio_com¶‘ed ; 47  #TEST_ERROR `‹¡_”rÜ_qu¬k () ) 48 GQu¬k ‹¡_”rÜ_qu¬k (); 50  dump_bufs (cÚ¡ * mem1 , size_t Ën1 , cÚ¡ * mem2 , size_ˆ Ën2 ); 51  as£¹_memequ® (cÚ¡ * mem1 , size_t Ën1 , 52 cÚ¡ * mem2 , size_t Ën2 ); 54 GObex * ü—‹_gobex ( fd , GObexT¿n¥ÜtTy³ Œª¥Üt_ty³ , 55 gboÞ—n þo£_Ú_uÄef ); 56  ü—‹_’dpošts ( GObex ** obex , GIOChªÃl ** io ,  sock_ty³ ); 58 gboÞ—n ‹¡_io_cb ( GIOChªÃl * io , GIOCÚd™iÚ cÚd , gpoš‹r u£r_d©a ); 59 gboÞ—n ‹¡_timeout ( gpoš‹r u£r_d©a ); @/usr/include/alloca.h 19 #iâdef _ALLOCA_H 20  #_ALLOCA_H 1 ) 22  ~<ã©u»s.h > 24  #__Ãed_size_t ) 25  ~<¡ddef.h > 27 g__BEGIN_DECLS 30 #undeà ®loÿ 33 * $®loÿ ( size_t __size è __THROW ; 35 #ifdef __GNUC__ 36  #®loÿ ( size è `__bužtš_®loÿ (size) ) 39 __END_DECLS @/usr/include/arpa/inet.h 19 #iâdeà _ARPA_INET_H 20  #_ARPA_INET_H 1 ) 22  ~<ã©u»s.h > 23  ~<Ãtš‘/š.h > 26 #iâdeà __sockËn_t_defšed 27  __sockËn_t tsockËn_t ; 28  #__sockËn_t_defšed ) 31 __BEGIN_DECLS 35 š_addr_t $š‘_addr ( __cÚ¡ * __ý è __THROW ; 38 š_addr_t $š‘_Êaof ( š_addr __š è __THROW ; 42  š_addr $š‘_mak—ddr ( š_addr_t __Ãt , in_addr_ˆ __ho¡ ) 43 __THROW ; 46 š_addr_t $š‘_Ãtof ( š_addr __š è __THROW ; 50 š_addr_t $š‘_ÃtwÜk ( __cÚ¡ * __ý è __THROW ; 54 * $š‘_Áß ( š_addr __š è __THROW ; 59  $š‘_±Ú ( __af , __cÚ¡ * __»¡riù __ý , 60 * __»¡riù __buf è __THROW ; 65 __cÚ¡ * $š‘_ÁÝ ( __af , __cÚ¡ * __»¡riù __ý , 66 * __»¡riù __buf , sockËn_t __Ën ) 67 __THROW ; 71 #ifdeà __USE_MISC 74  $š‘_©Ú ( __cÚ¡ * __ý ,  š_addr * __šp è __THROW ; 78 * $š‘_à ( š_addr_t __Ãt , * __buf , size_t __Ën è __THROW ; 83 * $š‘_Ãt_ÁÝ ( __af , __cÚ¡ * __ý ,  __b™s , 84 * __buf , size_t __Ën è __THROW ; 89  $š‘_Ãt_±Ú ( __af , __cÚ¡ * __ý , 90 * __buf , size_t __Ën è __THROW ; 95  $š‘_n§p_addr ( __cÚ¡ * __ý , 96 * __buf ,  __Ën è __THROW ; 100 * $š‘_n§p_Áß ( __Ën , __cÚ¡ * __ý , 101 * __buf è __THROW ; 104 __END_DECLS @/usr/include/assert.h 24 #ifdef _ASSERT_H 26 #undeà _ASSERT_H 27 #undeà as£¹ 28 #undeà __ASSERT_VOID_CAST 30 #ifdef __USE_GNU 31 #undeà as£¹_³¼Ü 36  #_ASSERT_H 1 ) 37  ~<ã©u»s.h > 39 #ià defšed __ýlu¥lus && __GNUC_PREREQ (2,95) 40  #__ASSERT_VOID_CAST ¡©ic_ÿ¡ <> ) 42  #__ASSERT_VOID_CAST () ) 50 #ifdef NDEBUG 52  #as£¹ ( ex´ è( `__ASSERT_VOID_CAST (0)) ) 60 #ifdef __USE_GNU 61  #as£¹_³¼Ü ( ”ºum è( `__ASSERT_VOID_CAST (0)) ) 66 #iâdeà _ASSERT_H_DECLS 67  #_ASSERT_H_DECLS ) 68 __BEGIN_DECLS 71  $__as£¹_çž ( __cÚ¡ * __as£¹iÚ , __cÚ¡ * __fže , 72  __lše , __cÚ¡ * __funùiÚ ) 73 __THROW `__©Œibu‹__ (( __nÜ‘uº__ )); 76  $__as£¹_³¼Ü_çž ( __”ºum , __cÚ¡ * __fže , 77  __lše , 78 __cÚ¡ * __funùiÚ ) 79 __THROW `__©Œibu‹__ (( __nÜ‘uº__ )); 84  $__as£¹ (cÚ¡ * __as£¹iÚ , cÚ¡ * __fže ,  __lše ) 85 __THROW `__©Œibu‹__ (( __nÜ‘uº__ )); 88 __END_DECLS 91  #as£¹ ( ex´ ) \ 92 (( ex´ ) \ 93 ? `__ASSERT_VOID_CAST (0) \ 94 : `__as£¹_çž ( `__STRING ( ex´ ), __FILE__ , __LINE__ , __ASSERT_FUNCTION )) ) 96 #ifdef __USE_GNU 97  #as£¹_³¼Ü ( ”ºum ) \ 98 (!( ”ºum ) \ 99 ? `__ASSERT_VOID_CAST (0) \ 100 : `__as£¹_³¼Ü_çž (( ”ºum ), __FILE__ , __LINE__ , __ASSERT_FUNCTION )) ) 108 #ià defšed __ýlu¥lus ? `__GNUC_PREREQ (2, 6) : __GNUC_PREREQ (2, 4) 109  #__ASSERT_FUNCTION __PRETTY_FUNCTION__ ) 111 #ià defšed __STDC_VERSION__ && __STDC_VERSION__ >= 199901L 112  #__ASSERT_FUNCTION __func__ ) 114  #__ASSERT_FUNCTION (( __cÚ¡ *è0) ) @/usr/include/byteswap.h 19 #iâdeà _BYTESWAP_H 20  #_BYTESWAP_H 1 ) 23  ~ 30  #bsw­_16 ( x è `__bsw­_16 (x) ) 33  #bsw­_32 ( x è `__bsw­_32 (x) ) 35 #ià defšed __GNUC__ && __GNUC__ >= 2 37  #bsw­_64 ( x è `__bsw­_64 (x) ) @/usr/include/ctype.h 24 #iâdef _CTYPE_H 25  #_CTYPE_H 1 ) 27  ~<ã©u»s.h > 28  ~ 30 g__BEGIN_DECLS 32 #iâdeà _ISb™ 41  ~<’dŸn.h > 42 #ià __BYTE_ORDER =ð __BIG_ENDIAN 43  #_ISb™ ( b™ è(1 << (b™)) ) 45  #_ISb™ ( b™ è((b™è< 8 ? ((1 << (b™)è<< 8è: ((1 << (b™)è>> 8)) ) 50 m_ISuµ” = _ISb™ (0), 51 m_ISlow” = _ISb™ (1), 52 m_IS®pha = _ISb™ (2), 53 m_ISdig™ = _ISb™ (3), 54 m_ISxdig™ = _ISb™ (4), 55 m_IS¥aû = _ISb™ (5), 56 m_IS´št = _ISb™ (6), 57 m_ISg¿ph = _ISb™ (7), 58 m_ISbÏnk = _ISb™ (8), 59 m_ISúŒl = _ISb™ (9), 60 m_ISpunù = _ISb™ (10), 61 m_IS®num = _ISb™ (11) 81 __cÚ¡ ** $__ùy³_b_loc () 82 __THROW `__©Œibu‹__ (( __cÚ¡ )); 83 __cÚ¡ __št32_t ** $__ùy³_tÞow”_loc () 84 __THROW `__©Œibu‹__ (( __cÚ¡ )); 85 __cÚ¡ __št32_t ** $__ùy³_touµ”_loc () 86 __THROW `__©Œibu‹__ (( __cÚ¡ )); 89 #iâdeà __ýlu¥lus 90  #__isùy³ ( c , ty³ ) \ 91 ((* `__ùy³_b_loc ())[(è( c )] & (è ty³ ) ) 92 #–ià defšed __USE_EXTERN_INLINES 93  #__isùy³_f ( ty³ ) \ 94 __ex‹º_šlše \ 95 is ## `ty³ ( __c è __THROW \ 97  (* `__ùy³_b_loc ())[(è( __c )] & (è _IS ## ty³ ; \ 98 } ) } 101  #__i§scii ( c è(((cè& ~0x7fè=ð0è ) 102  #__tßscii ( c è((cè& 0x7fè ) 104  #__exùy³ ( Çme è  `Çme (è __THROW ) 106 __BEGIN_NAMESPACE_STD 112 __exùy³ ( i§Êum ); 113 __exùy³ ( i§Íha ); 114 __exùy³ ( isúŒl ); 115 __exùy³ ( isdig™ ); 116 __exùy³ ( i¦ow” ); 117 __exùy³ ( isg¿ph ); 118 __exùy³ ( i¥ršt ); 119 __exùy³ ( i¥unù ); 120 __exùy³ ( is¥aû ); 121 __exùy³ ( isuµ” ); 122 __exùy³ ( isxdig™ ); 126  $tÞow” ( __c è __THROW ; 129  $touµ” ( __c è __THROW ; 131 __END_NAMESPACE_STD 135 #ifdef __USE_ISOC99 136 __BEGIN_NAMESPACE_C99 138 `__exùy³ ( isbÏnk ); 140 __END_NAMESPACE_C99 143 #ifdeà __USE_GNU 145  $isùy³ ( __c ,  __mask è __THROW ; 148 #ià defšed __USE_SVID || defšed __USE_MISC || defšed __USE_XOPEN 152  $i§scii ( __c è __THROW ; 156  $tßscii ( __c è __THROW ; 160 `__exùy³ ( _touµ” ); 161 `__exùy³ ( _tÞow” ); 165  #__tobody ( c , f , a , ¬gs ) \ 166 ( __ex‹nsiÚ__ \ 167 ({  __»s ; \ 168 ià( ( c ) > 1) \ 170 ià( `__bužtš_cÚ¡ªt_p ( c )) \ 172  __c = ( c ); \ 173 __»s = __c < -128 || __ø> 255 ? __ø: ( a )[__c]; \ 176 __»s = f ¬gs ; \ 179 __»s = ( a )[(è( c )]; \ 180 __»s ; } })) ) 182 #ià! defšed __NO_CTYPE 183 #ifdeà __isùy³_f 184 $__isùy³_f ( ®num ) 185 $__isùy³_f ( ®pha ) 186 $__isùy³_f ( úŒl ) 187 $__isùy³_f ( dig™ ) 188 $__isùy³_f ( low” ) 189 $__isùy³_f ( g¿ph ) 190 $__isùy³_f ( ´št ) 191 $__isùy³_f ( punù ) 192 $__isùy³_f ( ¥aû ) 193 $__isùy³_f ( uµ” ) 194 $__isùy³_f ( xdig™ ) 195 #ifdeà __USE_ISOC99 196 $__isùy³_f ( bÏnk ) 198 #–ià defšed __isùy³ 199  #i§Êum ( c è `__isùy³ ((c), _IS®num ) ) 200  #i§Íha ( c è `__isùy³ ((c), _IS®pha ) ) 201  #isúŒl ( c è `__isùy³ ((c), _ISúŒl ) ) 202  #isdig™ ( c è `__isùy³ ((c), _ISdig™ ) ) 203  #i¦ow” ( c è `__isùy³ ((c), _ISlow” ) ) 204  #isg¿ph ( c è `__isùy³ ((c), _ISg¿ph ) ) 205  #i¥ršt ( c è `__isùy³ ((c), _IS´št ) ) 206  #i¥unù ( c è `__isùy³ ((c), _ISpunù ) ) 207  #is¥aû ( c è `__isùy³ ((c), _IS¥aû ) ) 208  #isuµ” ( c è `__isùy³ ((c), _ISuµ” ) ) 209  #isxdig™ ( c è `__isùy³ ((c), _ISxdig™ ) ) 210 #ifdeà __USE_ISOC99 211  #isbÏnk ( c è `__isùy³ ((c), _ISbÏnk ) ) 215 #ifdeà __USE_EXTERN_INLINES 216 __ex‹º_šlše  217 `__NTH ( $tÞow” ( __c )) 219  __c >ð-128 && __ø< 256 ? (* `__ùy³_tÞow”_loc ())[__c] : __c; 220 } } 222 __ex‹º_šlše  223 __NTH ( $touµ” ( __c )) 225  __c >ð-128 && __ø< 256 ? (* `__ùy³_touµ”_loc ())[__c] : __c; 226 } } 229 #ià __GNUC__ >ð2 && defšed __OPTIMIZE__ && !defšed __ýlu¥lus 230  #tÞow” ( c è `__tobody (c, tÞow” , * `__ùy³_tÞow”_loc (), (c)) ) 231  #touµ” ( c è `__tobody (c, touµ” , * `__ùy³_touµ”_loc (), (c)) ) 234 #ià defšed __USE_SVID || defšed __USE_MISC || defšed __USE_XOPEN 235  #i§scii ( c è `__i§scii (c) ) 236  #tßscii ( c è `__tßscii (c) ) 238  #_tÞow” ( c è((è(* `__ùy³_tÞow”_loc ())[(è(c)]) ) 239  #_touµ” ( c è((è(* `__ùy³_touµ”_loc ())[(è(c)]) ) 245 #ifdeà __USE_XOPEN2K8 259  ~ 263  #__isùy³_l ( c , ty³ , loÿË ) \ 264 (( loÿË )-> __ùy³_b [(è( c )] & (è ty³ ) ) 266  #__exùy³_l ( Çme ) \ 267  `Çme (, __loÿË_t è __THROW ) 273 __exùy³_l ( i§Êum_l ); 274 __exùy³_l ( i§Íha_l ); 275 __exùy³_l ( isúŒl_l ); 276 __exùy³_l ( isdig™_l ); 277 __exùy³_l ( i¦ow”_l ); 278 __exùy³_l ( isg¿ph_l ); 279 __exùy³_l ( i¥ršt_l ); 280 __exùy³_l ( i¥unù_l ); 281 __exùy³_l ( is¥aû_l ); 282 __exùy³_l ( isuµ”_l ); 283 __exùy³_l ( isxdig™_l ); 285 __exùy³_l ( isbÏnk_l ); 289  $__tÞow”_l ( __c , __loÿË_t __l è __THROW ; 290  $tÞow”_l ( __c , __loÿË_t __l è __THROW ; 293  $__touµ”_l ( __c , __loÿË_t __l è __THROW ; 294  $touµ”_l ( __c , __loÿË_t __l è __THROW ; 296 #ià __GNUC__ >ð2 && defšed __OPTIMIZE__ && !defšed __ýlu¥lus 297  #__tÞow”_l ( c , loÿË ) \ 298 `__tobody ( c , __tÞow”_l , ( loÿË )-> __ùy³_tÞow” , (c,†oÿË)) ) 299  #__touµ”_l ( c , loÿË ) \ 300 `__tobody ( c , __touµ”_l , ( loÿË )-> __ùy³_touµ” , (c,†oÿË)) ) 301  #tÞow”_l ( c , loÿË è `__tÞow”_l ((c), (loÿË)) ) 302  #touµ”_l ( c , loÿË è `__touµ”_l ((c), (loÿË)) ) 306 #iâdeà __NO_CTYPE 307  #__i§Êum_l ( c , l è `__isùy³_l ((c), _IS®num , (l)) ) 308  #__i§Íha_l ( c , l è `__isùy³_l ((c), _IS®pha , (l)) ) 309  #__isúŒl_l ( c , l è `__isùy³_l ((c), _ISúŒl , (l)) ) 310  #__isdig™_l ( c , l è `__isùy³_l ((c), _ISdig™ , (l)) ) 311  #__i¦ow”_l ( c , l è `__isùy³_l ((c), _ISlow” , (l)) ) 312  #__isg¿ph_l ( c , l è `__isùy³_l ((c), _ISg¿ph , (l)) ) 313  #__i¥ršt_l ( c , l è `__isùy³_l ((c), _IS´št , (l)) ) 314  #__i¥unù_l ( c , l è `__isùy³_l ((c), _ISpunù , (l)) ) 315  #__is¥aû_l ( c , l è `__isùy³_l ((c), _IS¥aû , (l)) ) 316  #__isuµ”_l ( c , l è `__isùy³_l ((c), _ISuµ” , (l)) ) 317  #__isxdig™_l ( c , l è `__isùy³_l ((c), _ISxdig™ , (l)) ) 319  #__isbÏnk_l ( c , l è `__isùy³_l ((c), _ISbÏnk , (l)) ) 321 #ià defšed __USE_SVID || defšed __USE_MISC 322  #__i§scii_l ( c , l è(Ö), `__i§scii (c)) ) 323  #__tßscii_l ( c , l è(Ö), `__tßscii (c)) ) 326  #i§Êum_l ( c , l è `__i§Êum_l ((c), (l)) ) 327  #i§Íha_l ( c , l è `__i§Íha_l ((c), (l)) ) 328  #isúŒl_l ( c , l è `__isúŒl_l ((c), (l)) ) 329  #isdig™_l ( c , l è `__isdig™_l ((c), (l)) ) 330  #i¦ow”_l ( c , l è `__i¦ow”_l ((c), (l)) ) 331  #isg¿ph_l ( c , l è `__isg¿ph_l ((c), (l)) ) 332  #i¥ršt_l ( c , l è `__i¥ršt_l ((c), (l)) ) 333  #i¥unù_l ( c , l è `__i¥unù_l ((c), (l)) ) 334  #is¥aû_l ( c , l è `__is¥aû_l ((c), (l)) ) 335  #isuµ”_l ( c , l è `__isuµ”_l ((c), (l)) ) 336  #isxdig™_l ( c , l è `__isxdig™_l ((c), (l)) ) 338  #isbÏnk_l ( c , l è `__isbÏnk_l ((c), (l)) ) 340 #ià defšed __USE_SVID || defšed __USE_MISC 341  #i§scii_l ( c , l è `__i§scii_l ((c), (l)) ) 342  #tßscii_l ( c , l è `__tßscii_l ((c), (l)) ) 349 __END_DECLS @/usr/include/dirent.h 24 #iâdef _DIRENT_H 25  #_DIRENT_H 1 ) 27  ~<ã©u»s.h > 29 g__BEGIN_DECLS 31  ~ 33 #ifdeà __USE_XOPEN 34 #iâdeà __šo_t_defšed 35 #iâdeà __USE_FILE_OFFSET64 36  __šo_t tšo_t ; 38  __šo64_t tšo_t ; 40  #__šo_t_defšed ) 42 #ià defšed __USE_LARGEFILE64 && !defšed __šo64_t_defšed 43  __šo64_t tšo64_t ; 44  #__šo64_t_defšed ) 63  ~ 65 #ià( defšed __USE_BSD || defšed __USE_MISC è&& !defšed d_fž’o 66  #d_šo d_fž’o ) 83 #ifdeà _DIRENT_HAVE_D_NAMLEN 84  #_D_EXACT_NAMLEN ( d è((d)-> d_ÇmËn ) ) 85  #_D_ALLOC_NAMLEN ( d è( `_D_EXACT_NAMLEN (dè+ 1) ) 87  #_D_EXACT_NAMLEN ( d è( `¡¾’ ((d)-> d_Çme )) ) 88 #ifdeà _DIRENT_HAVE_D_RECLEN 89  #_D_ALLOC_NAMLEN ( d è(((*è(dè+ (d)-> d_»þ’ è- &(d)-> d_Çme [0]) ) 91  #_D_ALLOC_NAMLEN ( d è( (d)-> d_Çme > 1 ?  (d)->d_name : \ 92 `_D_EXACT_NAMLEN ( d è+ 1) ) 97 #ifdeà __USE_BSD 101 mDT_UNKNOWN = 0, 102  #DT_UNKNOWN DT_UNKNOWN ) 103 mDT_FIFO = 1, 104  #DT_FIFO DT_FIFO ) 105 mDT_CHR = 2, 106  #DT_CHR DT_CHR ) 107 mDT_DIR = 4, 108  #DT_DIR DT_DIR ) 109 mDT_BLK = 6, 110  #DT_BLK DT_BLK ) 111 mDT_REG = 8, 112  #DT_REG DT_REG ) 113 mDT_LNK = 10, 114  #DT_LNK DT_LNK ) 115 mDT_SOCK = 12, 116  #DT_SOCK DT_SOCK ) 117 mDT_WHT = 14 118  #DT_WHT DT_WHT ) 122  #IFTODT ( mode è(((modeè& 0170000è>> 12) ) 123  #DTTOIF ( dœty³ è((dœty³è<< 12) ) 129  __dœ¡»am tDIR ; 136 DIR * $Ý’dœ ( __cÚ¡ * __Çme è `__nÚnuÎ ((1)); 138 #ifdeà __USE_XOPEN2K8 143 DIR * `fdÝ’dœ ( __fd ); 151  $þo£dœ ( DIR * __dœp è `__nÚnuÎ ((1)); 163 #iâdeà __USE_FILE_OFFSET64 164  dœ’t * $»addœ ( DIR * __dœp è `__nÚnuÎ ((1)); 166 #ifdeà __REDIRECT 167  dœ’t * `__REDIRECT ( »addœ , ( DIR * __dœp ), »addœ64 ) 168 `__nÚnuÎ ((1)); 170  #»addœ »addœ64 ) 174 #ifdeà __USE_LARGEFILE64 175  dœ’t64 * $»addœ64 ( DIR * __dœp è `__nÚnuÎ ((1)); 178 #ià defšed __USE_POSIX || defšed __USE_MISC 184 #iâdeà __USE_FILE_OFFSET64 185  $»addœ_r ( DIR * __»¡riù __dœp , 186  dœ’t * __»¡riù __’Œy , 187  dœ’t ** __»¡riù __»suÉ ) 188 `__nÚnuÎ ((1, 2, 3)); 190 #ifdeà __REDIRECT 191  `__REDIRECT ( »addœ_r , 192 ( DIR * __»¡riù __dœp , 193  dœ’t * __»¡riù __’Œy , 194  dœ’t ** __»¡riù __»suÉ ), 195 »addœ64_r è `__nÚnuÎ ((1, 2, 3)); 197  #»addœ_r »addœ64_r ) 201 #ifdeà __USE_LARGEFILE64 202  $»addœ64_r ( DIR * __»¡riù __dœp , 203  dœ’t64 * __»¡riù __’Œy , 204  dœ’t64 ** __»¡riù __»suÉ ) 205 `__nÚnuÎ ((1, 2, 3)); 210  $»wšddœ ( DIR * __dœp è __THROW `__nÚnuÎ ((1)); 212 #ià defšed __USE_BSD || defšed __USE_MISC || defšed __USE_XOPEN 213  ~ 216  $£ekdœ ( DIR * __dœp ,  __pos è __THROW `__nÚnuÎ ((1)); 219  $‹Îdœ ( DIR * __dœp è __THROW `__nÚnuÎ ((1)); 222 #ià defšed __USE_BSD || defšed __USE_MISC || defšed __USE_XOPEN2K8 225  $dœfd ( DIR * __dœp è __THROW `__nÚnuÎ ((1)); 227 #ià defšed __OPTIMIZE__ && defšed _DIR_dœfd 228  #dœfd ( dœp è `_DIR_dœfd (dœp) ) 231 #ià defšed __USE_BSD || defšed __USE_MISC 232 #iâdeà MAXNAMLEN 234  ~ 237 #ifdeà NAME_MAX 238  #MAXNAMLEN NAME_MAX ) 240  #MAXNAMLEN 255 ) 245  #__Ãed_size_t ) 246  ~<¡ddef.h > 255 #iâdeà __USE_FILE_OFFSET64 256  `sÿndœ ( __cÚ¡ * __»¡riù __dœ , 257  dœ’t *** __»¡riù __Çm–i¡ , 258 (* __£ËùÜ è( __cÚ¡  dœ’t *), 259 (* __cmp è( __cÚ¡  dœ’t **, 260 __cÚ¡  dœ’t **)) 261 `__nÚnuÎ ((1, 2)); 263 #ifdeà __REDIRECT 264  `__REDIRECT ( sÿndœ , 265 ( __cÚ¡ * __»¡riù __dœ , 266  dœ’t *** __»¡riù __Çm–i¡ , 267 (* __£ËùÜ è( __cÚ¡  dœ’t *), 268 (* __cmp è( __cÚ¡  dœ’t **, 269 __cÚ¡  dœ’t **)), 270 sÿndœ64 è `__nÚnuÎ ((1, 2)); 272  #sÿndœ sÿndœ64 ) 276 #ià defšed __USE_GNU && defšed __USE_LARGEFILE64 279  `sÿndœ64 ( __cÚ¡ * __»¡riù __dœ , 280  dœ’t64 *** __»¡riù __Çm–i¡ , 281 (* __£ËùÜ è( __cÚ¡  dœ’t64 *), 282 (* __cmp è( __cÚ¡  dœ’t64 **, 283 __cÚ¡  dœ’t64 **)) 284 `__nÚnuÎ ((1, 2)); 287 #ifdeà __USE_GNU 293 #iâdeà __USE_FILE_OFFSET64 294  `sÿndœ© ( __dfd , __cÚ¡ * __»¡riù __dœ , 295  dœ’t *** __»¡riù __Çm–i¡ , 296 (* __£ËùÜ è( __cÚ¡  dœ’t *), 297 (* __cmp è( __cÚ¡  dœ’t **, 298 __cÚ¡  dœ’t **)) 299 `__nÚnuÎ ((2, 3)); 301 #ifdeà __REDIRECT 302  `__REDIRECT ( sÿndœ© , 303 ( __dfd , __cÚ¡ * __»¡riù __dœ , 304  dœ’t *** __»¡riù __Çm–i¡ , 305 (* __£ËùÜ è( __cÚ¡  dœ’t *), 306 (* __cmp è( __cÚ¡  dœ’t **, 307 __cÚ¡  dœ’t **)), 308 sÿndœ©64 è `__nÚnuÎ ((2, 3)); 310  #sÿndœ© sÿndœ©64 ) 316  `sÿndœ©64 ( __dfd , __cÚ¡ * __»¡riù __dœ , 317  dœ’t64 *** __»¡riù __Çm–i¡ , 318 (* __£ËùÜ è( __cÚ¡  dœ’t64 *), 319 (* __cmp è( __cÚ¡  dœ’t64 **, 320 __cÚ¡  dœ’t64 **)) 321 `__nÚnuÎ ((2, 3)); 325 #iâdeà __USE_FILE_OFFSET64 326  $®phasÜt ( __cÚ¡  dœ’t ** __e1 , 327 __cÚ¡  dœ’t ** __e2 ) 328 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 330 #ifdeà __REDIRECT 331  `__REDIRECT_NTH ( ®phasÜt , 332 ( __cÚ¡  dœ’t ** __e1 , 333 __cÚ¡  dœ’t ** __e2 ), 334 ®phasÜt64 è __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 336  #®phasÜt ®phasÜt64 ) 340 #ià defšed __USE_GNU && defšed __USE_LARGEFILE64 341  $®phasÜt64 ( __cÚ¡  dœ’t64 ** __e1 , 342 __cÚ¡  dœ’t64 ** __e2 ) 343 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 348 #ià defšed __USE_BSD || defšed __USE_MISC 353 #iâdeà __USE_FILE_OFFSET64 354 __ssize_t $g‘dœ’Œ›s ( __fd , * __»¡riù __buf , 355 size_t __nby‹s , 356 __off_t * __»¡riù __ba£p ) 357 __THROW `__nÚnuÎ ((2, 4)); 359 #ifdeà __REDIRECT 360 __ssize_t `__REDIRECT_NTH ( g‘dœ’Œ›s , 361 ( __fd , * __»¡riù __buf , 362 size_t __nby‹s , 363 __off64_t * __»¡riù __ba£p ), 364 g‘dœ’Œ›s64 è `__nÚnuÎ ((2, 4)); 366  #g‘dœ’Œ›s g‘dœ’Œ›s64 ) 370 #ifdeà __USE_LARGEFILE64 371 __ssize_t $g‘dœ’Œ›s64 ( __fd , * __»¡riù __buf , 372 size_t __nby‹s , 373 __off64_t * __»¡riù __ba£p ) 374 __THROW `__nÚnuÎ ((2, 4)); 378 #ifdeà __USE_GNU 380 #iâdeà __USE_FILE_OFFSET64 381  $v”siÚsÜt ( __cÚ¡  dœ’t ** __e1 , 382 __cÚ¡  dœ’t ** __e2 ) 383 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 385 #ifdeà __REDIRECT 386  `__REDIRECT_NTH ( v”siÚsÜt , 387 ( __cÚ¡  dœ’t ** __e1 , 388 __cÚ¡  dœ’t ** __e2 ), 389 v”siÚsÜt64 ) 390 __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 392  #v”siÚsÜt v”siÚsÜt64 ) 396 #ifdeà __USE_LARGEFILE64 397  $v”siÚsÜt64 ( __cÚ¡  dœ’t64 ** __e1 , 398 __cÚ¡  dœ’t64 ** __e2 ) 399 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 403 __END_DECLS @/usr/include/dlfcn.h 20 #iâdef _DLFCN_H 21  #_DLFCN_H 1 ) 23  ~<ã©u»s.h > 24  #__Ãed_size_t ) 25  ~<¡ddef.h > 28  ~ 31 #ifdeà __USE_GNU 36  #RTLD_NEXT ((*è-1l) ) 41  #RTLD_DEFAULT ((*è0) ) 45  tLmid_t ; 48  #LM_ID_BASE 0 ) 49  #LM_ID_NEWLM -1 ) 53 __BEGIN_DECLS 57 * $dlÝ’ ( __cÚ¡ * __fže ,  __mode è __THROW ; 61  $dlþo£ (* __hªdË è __THROW `__nÚnuÎ ((1)); 65 * $dlsym (* __»¡riù __hªdË , 66 __cÚ¡ * __»¡riù __Çme è __THROW `__nÚnuÎ ((2)); 68 #ifdeà __USE_GNU 70 * $dlmÝ’ ( Lmid_t __nsid , __cÚ¡ * __fže ,  __mode è __THROW ; 74 * $dlvsym (* __»¡riù __hªdË , 75 __cÚ¡ * __»¡riù __Çme , 76 __cÚ¡ * __»¡riù __v”siÚ ) 77 __THROW `__nÚnuÎ ((2, 3)); 83 * $dË¼Ü (è __THROW ; 86 #ifdeà __USE_GNU 91 __cÚ¡ * dli_âame ; 92 * dli_fba£ ; 93 __cÚ¡ * dli_¢ame ; 94 * dli_§ddr ; 95 } tDl_šfo ; 99  $dÏddr ( __cÚ¡ * __add»ss , Dl_šfo * __šfo ) 100 __THROW `__nÚnuÎ ((2)); 103  $dÏddr1 ( __cÚ¡ * __add»ss , Dl_šfo * __šfo , 104 ** __exŒa_šfo ,  __æags è __THROW `__nÚnuÎ ((2)); 112 RTLD_DL_SYMENT = 1, 115 RTLD_DL_LINKMAP = 2 124  $dlšfo (* __»¡riù __hªdË , 125  __»que¡ , * __»¡riù __¬g ) 126 __THROW `__nÚnuÎ ((1, 3)); 132 RTLD_DI_LMID = 1, 136 RTLD_DI_LINKMAP = 2, 138 RTLD_DI_CONFIGADDR = 3, 145 RTLD_DI_SERINFO = 4, 146 RTLD_DI_SERINFOSIZE = 5, 150 RTLD_DI_ORIGIN = 6, 152 RTLD_DI_PROFILENAME = 7, 153 RTLD_DI_PROFILEOUT = 8, 158 RTLD_DI_TLS_MODID = 9, 164 RTLD_DI_TLS_DATA = 10, 166 RTLD_DI_MAX = 10 174 * dls_Çme ; 175  dls_æags ; 176 } tDl_£½©h ; 182 size_t dls_size ; 183  dls_út ; 184 Dl_£½©h dls_£½©h [1]; 185 } tDl_£ršfo ; 189 __END_DECLS @/usr/include/endian.h 19 #iâdef _ENDIAN_H 20  #_ENDIAN_H 1 ) 22  ~<ã©u»s.h > 32  #__LITTLE_ENDIAN 1234 ) 33  #__BIG_ENDIAN 4321 ) 34  #__PDP_ENDIAN 3412 ) 37  ~ 41 #iâdeà __FLOAT_WORD_ORDER 42  #__FLOAT_WORD_ORDER __BYTE_ORDER ) 45 #ifdef __USE_BSD 46  #LITTLE_ENDIAN __LITTLE_ENDIAN ) 47  #BIG_ENDIAN __BIG_ENDIAN ) 48  #PDP_ENDIAN __PDP_ENDIAN ) 49  #BYTE_ORDER __BYTE_ORDER ) 52 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 53  #__LONG_LONG_PAIR ( HI , LO èLO, ) HI 54 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 55  #__LONG_LONG_PAIR ( HI , LO èHI, ) LO 59 #ifdeà __USE_BSD 61  ~ 63 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 64  #htobe16 ( x è `__bsw­_16 (x) ) 65  #htÞe16 ( x è(x) ) 66  #be16toh ( x è `__bsw­_16 (x) ) 67  #Ë16toh ( x è(x) ) 69  #htobe32 ( x è `__bsw­_32 (x) ) 70  #htÞe32 ( x è(x) ) 71  #be32toh ( x è `__bsw­_32 (x) ) 72  #Ë32toh ( x è(x) ) 74  #htobe64 ( x è `__bsw­_64 (x) ) 75  #htÞe64 ( x è(x) ) 76  #be64toh ( x è `__bsw­_64 (x) ) 77  #Ë64toh ( x è(x) ) 79  #htobe16 ( x è(x) ) 80  #htÞe16 ( x è `__bsw­_16 (x) ) 81  #be16toh ( x è(x) ) 82  #Ë16toh ( x è `__bsw­_16 (x) ) 84  #htobe32 ( x è(x) ) 85  #htÞe32 ( x è `__bsw­_32 (x) ) 86  #be32toh ( x è(x) ) 87  #Ë32toh ( x è `__bsw­_32 (x) ) 89  #htobe64 ( x è(x) ) 90  #htÞe64 ( x è `__bsw­_64 (x) ) 91  #be64toh ( x è(x) ) 92  #Ë64toh ( x è `__bsw­_64 (x) ) @/usr/include/errno.h 23 #iâdef _ERRNO_H 27 #iâdef __Ãed_Em©h 28  #_ERRNO_H 1 ) 29  ~<ã©u»s.h > 32 g__BEGIN_DECLS 36  ~ 37 #undeà __Ãed_Em©h 39 #ifdef _ERRNO_H 46 #iâdef ”ºo 47  ”ºo ; 50 #ifdeà __USE_GNU 55 * ´og¿m_švoÿtiÚ_Çme , * ´og¿m_švoÿtiÚ_shÜt_Çme ; 59 g__END_DECLS 67 #ià defšed __USE_GNU || defšed __Ãed_”rÜ_t 68 #iâdeà __”rÜ_t_defšed 69  t”rÜ_t ; 70  #__”rÜ_t_defšed 1 ) 72 #undeà __Ãed_”rÜ_t @/usr/include/error.h 20 #iâdeà _ERROR_H 21  #_ERROR_H 1 ) 23  ~<ã©u»s.h > 26 __BEGIN_DECLS 32  $”rÜ ( __¡©us ,  __”ºum , __cÚ¡ * __fÜm© , ...) 33 `__©Œibu‹__ (( `__fÜm©__ ( __´štf__ , 3, 4))); 35  $”rÜ_©_lše ( __¡©us ,  __”ºum , __cÚ¡ * __âame , 36  __lš’o , __cÚ¡ * __fÜm© , ...) 37 `__©Œibu‹__ (( `__fÜm©__ ( __´štf__ , 5, 6))); 42 (* ”rÜ_´št_´ogÇme ) (); 45  ”rÜ_mes§ge_couÁ ; 49  ”rÜ_Úe_³r_lše ; 52 #ià defšed __ex‹º_®ways_šlše && defšed __va_¬g_·ck 53  ~ 56 __END_DECLS @/usr/include/fcntl.h 24 #iâdef _FCNTL_H 25  #_FCNTL_H 1 ) 27  ~<ã©u»s.h > 30 g__BEGIN_DECLS 34  ~ 37 #ià defšed __USE_XOPEN || defšed __USE_XOPEN2K8 38  ~ 39  #__Ãed_time¥ec ) 40  ~ 41  ~ 43  #S_IFMT __S_IFMT ) 44  #S_IFDIR __S_IFDIR ) 45  #S_IFCHR __S_IFCHR ) 46  #S_IFBLK __S_IFBLK ) 47  #S_IFREG __S_IFREG ) 48 #ifdeà __S_IFIFO 49  #S_IFIFO __S_IFIFO ) 51 #ifdeà __S_IFLNK 52  #S_IFLNK __S_IFLNK ) 54 #ià( defšed __USE_UNIX98 || defšed __USE_XOPEN2K8 è&& defšed __S_IFSOCK 55  #S_IFSOCK __S_IFSOCK ) 60  #S_ISUID __S_ISUID ) 61  #S_ISGID __S_ISGID ) 63 #ià defšed __USE_BSD || defšed __USE_MISC || defšed __USE_XOPEN 65  #S_ISVTX __S_ISVTX ) 68  #S_IRUSR __S_IREAD ) 69  #S_IWUSR __S_IWRITE ) 70  #S_IXUSR __S_IEXEC ) 72  #S_IRWXU ( __S_IREAD | __S_IWRITE | __S_IEXEC ) ) 74  #S_IRGRP ( S_IRUSR >> 3è ) 75  #S_IWGRP ( S_IWUSR >> 3è ) 76  #S_IXGRP ( S_IXUSR >> 3è ) 78  #S_IRWXG ( S_IRWXU >> 3) ) 80  #S_IROTH ( S_IRGRP >> 3è ) 81  #S_IWOTH ( S_IWGRP >> 3è ) 82  #S_IXOTH ( S_IXGRP >> 3è ) 84  #S_IRWXO ( S_IRWXG >> 3) ) 87 #ifdef __USE_MISC 88 #iâdeà R_OK 91  #R_OK 4 ) 92  #W_OK 2 ) 93  #X_OK 1 ) 94  #F_OK 0 ) 99 #ià defšed __USE_XOPEN || defšed __USE_XOPEN2K8 100  #SEEK_SET 0 ) 101  #SEEK_CUR 1 ) 102  #SEEK_END 2 ) 110  fúŽ ( __fd ,  __cmd , ...); 118 #iâdeà __USE_FILE_OFFSET64 119  $Ý’ ( __cÚ¡ * __fže ,  __oæag , ...è `__nÚnuÎ ((1)); 121 #ifdeà __REDIRECT 122  `__REDIRECT ( Ý’ , ( __cÚ¡ * __fže ,  __oæag , ...), Ý’64 ) 123 `__nÚnuÎ ((1)); 125  #Ý’ Ý’64 ) 128 #ifdeà __USE_LARGEFILE64 129  $Ý’64 ( __cÚ¡ * __fže ,  __oæag , ...è `__nÚnuÎ ((1)); 132 #ifdeà __USE_ATFILE 142 #iâdeà __USE_FILE_OFFSET64 143  $Ý’© ( __fd , __cÚ¡ * __fže ,  __oæag , ...) 144 `__nÚnuÎ ((2)); 146 #ifdeà __REDIRECT 147  `__REDIRECT ( Ý’© , ( __fd , __cÚ¡ * __fže ,  __oæag , 148 ...), Ý’©64 è `__nÚnuÎ ((2)); 150  #Ý’© Ý’©64 ) 153 #ifdeà __USE_LARGEFILE64 154  $Ý’©64 ( __fd , __cÚ¡ * __fže ,  __oæag , ...) 155 `__nÚnuÎ ((2)); 164 #iâdeà __USE_FILE_OFFSET64 165  $ü—t ( __cÚ¡ * __fže , __mode_t __mode è `__nÚnuÎ ((1)); 167 #ifdeà __REDIRECT 168  `__REDIRECT ( ü—t , ( __cÚ¡ * __fže , __mode_t __mode ), 169 ü—t64 è `__nÚnuÎ ((1)); 171  #ü—t ü—t64 ) 174 #ifdeà __USE_LARGEFILE64 175  $ü—t64 ( __cÚ¡ * __fže , __mode_t __mode è `__nÚnuÎ ((1)); 178 #ià! defšed F_LOCK && (defšed __USE_MISC || (defšed __USE_XOPEN_EXTENDED \ 179 && ! defšed __USE_POSIX )) 188  #F_ULOCK 0 ) 189  #F_LOCK 1 ) 190  #F_TLOCK 2 ) 191  #F_TEST 3 ) 193 #iâdeà __USE_FILE_OFFSET64 194  `lockf ( __fd ,  __cmd , __off_t __Ën ); 196 #ifdeà __REDIRECT 197  `__REDIRECT ( lockf , ( __fd ,  __cmd , __off64_t __Ën ), lockf64 ); 199  #lockf lockf64 ) 202 #ifdeà __USE_LARGEFILE64 203  `lockf64 ( __fd ,  __cmd , __off64_t __Ën ); 207 #ifdeà __USE_XOPEN2K 210 #iâdeà __USE_FILE_OFFSET64 211  $posix_çdvi£ ( __fd , __off_t __off£t , __off_ˆ __Ën , 212  __advi£ è __THROW ; 214 #ifdeà __REDIRECT_NTH 215  `__REDIRECT_NTH ( posix_çdvi£ , ( __fd , __off64_t __off£t , 216 __off64_t __Ën ,  __advi£ ), 217 posix_çdvi£64 ); 219  #posix_çdvi£ posix_çdvi£64 ) 222 #ifdeà __USE_LARGEFILE64 223  $posix_çdvi£64 ( __fd , __off64_t __off£t , __off64_ˆ __Ën , 224  __advi£ è __THROW ; 232 #iâdeà __USE_FILE_OFFSET64 233  `posix_çÎoÿ‹ ( __fd , __off_t __off£t , __off_ˆ __Ën ); 235 #ifdeà __REDIRECT 236  `__REDIRECT ( posix_çÎoÿ‹ , ( __fd , __off64_t __off£t , 237 __off64_t __Ën ), 238 posix_çÎoÿ‹64 ); 240  #posix_çÎoÿ‹ posix_çÎoÿ‹64 ) 243 #ifdeà __USE_LARGEFILE64 244  `posix_çÎoÿ‹64 ( __fd , __off64_t __off£t , __off64_ˆ __Ën ); 250 #ià __USE_FORTIFY_LEVEL > 0 && defšed __ex‹º_®ways_šlše \ 251 && defšed __va_¬g_·ck_Ën 252  ~ 255 __END_DECLS @/usr/include/getopt.h 21 #iâdeà _GETOPT_H 23 #iâdeà __Ãed_g‘Ýt 24  #_GETOPT_H 1 ) 34 #ià! defšed __GNU_LIBRARY__ 35  ~<ùy³.h > 38 #iâdeà __THROW 39 #iâdeà __GNUC_PREREQ 40  #__GNUC_PREREQ ( maj , mš è(0) ) 42 #ià defšed __ýlu¥lus && __GNUC_PREREQ (2,8) 43  #__THROW `throw () ) 45  #__THROW ) 49 #ifdef __ýlu¥lus 59 * Ýrg ; 73  Ýtšd ; 78  Ý‹¼ ; 82  ÝtÝt ; 84 #iâdeà __Ãed_g‘Ýt 106  sÝtiÚ 108 cÚ¡ * gÇme ; 111  ghas_¬g ; 112 * gæag ; 113  gv® ; 118  #no_¬gum’t 0 ) 119  #»quœed_¬gum’t 1 ) 120  #ÝtiÚ®_¬gum’t 2 ) 148 #ifdeà __GNU_LIBRARY__ 152  g‘Ýt ( ___¬gc , *cÚ¡ * ___¬gv , cÚ¡ * __shÜtÝts ) 153 __THROW ; 155 #ià defšed __Ãed_g‘Ýt && defšed __USE_POSIX2 \ 156 && ! defšed g__USE_POSIX_IMPLICITLY && !defšed g__USE_GNU 160 #ifdeà __REDIRECT 161  __REDIRECT_NTH ( g‘Ýt , ( ___¬gc , *cÚ¡ * ___¬gv , 162 cÚ¡ * __shÜtÝts ), 163 __posix_g‘Ýt ); 165  __posix_g‘Ýt ( ___¬gc , *cÚ¡ * ___¬gv , 166 cÚ¡ * __shÜtÝts è __THROW ; 167  #g‘Ýt __posix_g‘Ýt ) 171  g‘Ýt (); 174 #iâdeà __Ãed_g‘Ýt 175  g‘Ýt_lÚg ( ___¬gc , *cÚ¡ * ___¬gv , 176 cÚ¡ * __shÜtÝts , 177 cÚ¡  ÝtiÚ * __lÚgÝts , * __lÚgšd ) 178 __THROW ; 179  g‘Ýt_lÚg_Úly ( ___¬gc , *cÚ¡ * ___¬gv , 180 cÚ¡ * __shÜtÝts , 181 cÚ¡  ÝtiÚ * __lÚgÝts , * __lÚgšd ) 182 __THROW ; 186 #ifdef __ýlu¥lus 191 #undeà __Ãed_g‘Ýt @/usr/include/inttypes.h 23 #iâdeà _INTTYPES_H 24  #_INTTYPES_H 1 ) 26  ~<ã©u»s.h > 28  ~<¡dšt.h > 31 #iâdeà ____gwch¬_t_defšed 32 #ifdeà __ýlu¥lus 33  #__gwch¬_t wch¬_t ) 34 #–ià defšed __WCHAR_TYPE__ 35  __WCHAR_TYPE__ t__gwch¬_t ; 37  #__Ãed_wch¬_t ) 38  ~<¡ddef.h > 39  wch¬_t t__gwch¬_t ; 41  #____gwch¬_t_defšed 1 ) 47 #ià! defšed __ýlu¥lus || defšed __STDC_FORMAT_MACROS 49 #ià __WORDSIZE == 64 50  #__PRI64_PREFIX "l" ) 51  #__PRIPTR_PREFIX "l" ) 53  #__PRI64_PREFIX "Î" ) 54  #__PRIPTR_PREFIX ) 60  #PRId8 "d" ) 61  #PRId16 "d" ) 62  #PRId32 "d" ) 63  #PRId64 __PRI64_PREFIX "d" ) 65  #PRIdLEAST8 "d" ) 66  #PRIdLEAST16 "d" ) 67  #PRIdLEAST32 "d" ) 68  #PRIdLEAST64 __PRI64_PREFIX "d" ) 70  #PRIdFAST8 "d" ) 71  #PRIdFAST16 __PRIPTR_PREFIX "d" ) 72  #PRIdFAST32 __PRIPTR_PREFIX "d" ) 73  #PRIdFAST64 __PRI64_PREFIX "d" ) 76  #PRIi8 "i" ) 77  #PRIi16 "i" ) 78  #PRIi32 "i" ) 79  #PRIi64 __PRI64_PREFIX "i" ) 81  #PRIiLEAST8 "i" ) 82  #PRIiLEAST16 "i" ) 83  #PRIiLEAST32 "i" ) 84  #PRIiLEAST64 __PRI64_PREFIX "i" ) 86  #PRIiFAST8 "i" ) 87  #PRIiFAST16 __PRIPTR_PREFIX "i" ) 88  #PRIiFAST32 __PRIPTR_PREFIX "i" ) 89  #PRIiFAST64 __PRI64_PREFIX "i" ) 92  #PRIo8 "o" ) 93  #PRIo16 "o" ) 94  #PRIo32 "o" ) 95  #PRIo64 __PRI64_PREFIX "o" ) 97  #PRIoLEAST8 "o" ) 98  #PRIoLEAST16 "o" ) 99  #PRIoLEAST32 "o" ) 100  #PRIoLEAST64 __PRI64_PREFIX "o" ) 102  #PRIoFAST8 "o" ) 103  #PRIoFAST16 __PRIPTR_PREFIX "o" ) 104  #PRIoFAST32 __PRIPTR_PREFIX "o" ) 105  #PRIoFAST64 __PRI64_PREFIX "o" ) 108  #PRIu8 "u" ) 109  #PRIu16 "u" ) 110  #PRIu32 "u" ) 111  #PRIu64 __PRI64_PREFIX "u" ) 113  #PRIuLEAST8 "u" ) 114  #PRIuLEAST16 "u" ) 115  #PRIuLEAST32 "u" ) 116  #PRIuLEAST64 __PRI64_PREFIX "u" ) 118  #PRIuFAST8 "u" ) 119  #PRIuFAST16 __PRIPTR_PREFIX "u" ) 120  #PRIuFAST32 __PRIPTR_PREFIX "u" ) 121  #PRIuFAST64 __PRI64_PREFIX "u" ) 124  #PRIx8 "x" ) 125  #PRIx16 "x" ) 126  #PRIx32 "x" ) 127  #PRIx64 __PRI64_PREFIX "x" ) 129  #PRIxLEAST8 "x" ) 130  #PRIxLEAST16 "x" ) 131  #PRIxLEAST32 "x" ) 132  #PRIxLEAST64 __PRI64_PREFIX "x" ) 134  #PRIxFAST8 "x" ) 135  #PRIxFAST16 __PRIPTR_PREFIX "x" ) 136  #PRIxFAST32 __PRIPTR_PREFIX "x" ) 137  #PRIxFAST64 __PRI64_PREFIX "x" ) 140  #PRIX8 "X" ) 141  #PRIX16 "X" ) 142  #PRIX32 "X" ) 143  #PRIX64 __PRI64_PREFIX "X" ) 145  #PRIXLEAST8 "X" ) 146  #PRIXLEAST16 "X" ) 147  #PRIXLEAST32 "X" ) 148  #PRIXLEAST64 __PRI64_PREFIX "X" ) 150  #PRIXFAST8 "X" ) 151  #PRIXFAST16 __PRIPTR_PREFIX "X" ) 152  #PRIXFAST32 __PRIPTR_PREFIX "X" ) 153  #PRIXFAST64 __PRI64_PREFIX "X" ) 157  #PRIdMAX __PRI64_PREFIX "d" ) 158  #PRIiMAX __PRI64_PREFIX "i" ) 159  #PRIoMAX __PRI64_PREFIX "o" ) 160  #PRIuMAX __PRI64_PREFIX "u" ) 161  #PRIxMAX __PRI64_PREFIX "x" ) 162  #PRIXMAX __PRI64_PREFIX "X" ) 166  #PRIdPTR __PRIPTR_PREFIX "d" ) 167  #PRIiPTR __PRIPTR_PREFIX "i" ) 168  #PRIoPTR __PRIPTR_PREFIX "o" ) 169  #PRIuPTR __PRIPTR_PREFIX "u" ) 170  #PRIxPTR __PRIPTR_PREFIX "x" ) 171  #PRIXPTR __PRIPTR_PREFIX "X" ) 177  #SCNd8 "hhd" ) 178  #SCNd16 "hd" ) 179  #SCNd32 "d" ) 180  #SCNd64 __PRI64_PREFIX "d" ) 182  #SCNdLEAST8 "hhd" ) 183  #SCNdLEAST16 "hd" ) 184  #SCNdLEAST32 "d" ) 185  #SCNdLEAST64 __PRI64_PREFIX "d" ) 187  #SCNdFAST8 "hhd" ) 188  #SCNdFAST16 __PRIPTR_PREFIX "d" ) 189  #SCNdFAST32 __PRIPTR_PREFIX "d" ) 190  #SCNdFAST64 __PRI64_PREFIX "d" ) 193  #SCNi8 "hhi" ) 194  #SCNi16 "hi" ) 195  #SCNi32 "i" ) 196  #SCNi64 __PRI64_PREFIX "i" ) 198  #SCNiLEAST8 "hhi" ) 199  #SCNiLEAST16 "hi" ) 200  #SCNiLEAST32 "i" ) 201  #SCNiLEAST64 __PRI64_PREFIX "i" ) 203  #SCNiFAST8 "hhi" ) 204  #SCNiFAST16 __PRIPTR_PREFIX "i" ) 205  #SCNiFAST32 __PRIPTR_PREFIX "i" ) 206  #SCNiFAST64 __PRI64_PREFIX "i" ) 209  #SCNu8 "hhu" ) 210  #SCNu16 "hu" ) 211  #SCNu32 "u" ) 212  #SCNu64 __PRI64_PREFIX "u" ) 214  #SCNuLEAST8 "hhu" ) 215  #SCNuLEAST16 "hu" ) 216  #SCNuLEAST32 "u" ) 217  #SCNuLEAST64 __PRI64_PREFIX "u" ) 219  #SCNuFAST8 "hhu" ) 220  #SCNuFAST16 __PRIPTR_PREFIX "u" ) 221  #SCNuFAST32 __PRIPTR_PREFIX "u" ) 222  #SCNuFAST64 __PRI64_PREFIX "u" ) 225  #SCNo8 "hho" ) 226  #SCNo16 "ho" ) 227  #SCNo32 "o" ) 228  #SCNo64 __PRI64_PREFIX "o" ) 230  #SCNoLEAST8 "hho" ) 231  #SCNoLEAST16 "ho" ) 232  #SCNoLEAST32 "o" ) 233  #SCNoLEAST64 __PRI64_PREFIX "o" ) 235  #SCNoFAST8 "hho" ) 236  #SCNoFAST16 __PRIPTR_PREFIX "o" ) 237  #SCNoFAST32 __PRIPTR_PREFIX "o" ) 238  #SCNoFAST64 __PRI64_PREFIX "o" ) 241  #SCNx8 "hhx" ) 242  #SCNx16 "hx" ) 243  #SCNx32 "x" ) 244  #SCNx64 __PRI64_PREFIX "x" ) 246  #SCNxLEAST8 "hhx" ) 247  #SCNxLEAST16 "hx" ) 248  #SCNxLEAST32 "x" ) 249  #SCNxLEAST64 __PRI64_PREFIX "x" ) 251  #SCNxFAST8 "hhx" ) 252  #SCNxFAST16 __PRIPTR_PREFIX "x" ) 253  #SCNxFAST32 __PRIPTR_PREFIX "x" ) 254  #SCNxFAST64 __PRI64_PREFIX "x" ) 258  #SCNdMAX __PRI64_PREFIX "d" ) 259  #SCNiMAX __PRI64_PREFIX "i" ) 260  #SCNoMAX __PRI64_PREFIX "o" ) 261  #SCNuMAX __PRI64_PREFIX "u" ) 262  #SCNxMAX __PRI64_PREFIX "x" ) 265  #SCNdPTR __PRIPTR_PREFIX "d" ) 266  #SCNiPTR __PRIPTR_PREFIX "i" ) 267  #SCNoPTR __PRIPTR_PREFIX "o" ) 268  #SCNuPTR __PRIPTR_PREFIX "u" ) 269  #SCNxPTR __PRIPTR_PREFIX "x" ) 274 g__BEGIN_DECLS 276 #ià __WORDSIZE == 64 281  mquÙ ; 282  m»m ; 283 } timaxdiv_t ; 290  mquÙ ; 291  m»m ; 292 } timaxdiv_t ; 298 štmax_t $imaxabs ( štmax_t __n è __THROW `__©Œibu‹__ (( __cÚ¡__ )); 301 imaxdiv_t $imaxdiv ( štmax_t __num” , iÁmax_ˆ __d’om ) 302 __THROW `__©Œibu‹__ (( __cÚ¡__ )); 305 štmax_t $¡¹oimax ( __cÚ¡ * __»¡riù __ÅŒ , 306 ** __»¡riù __’d±r ,  __ba£ è __THROW ; 309 uštmax_t $¡¹oumax ( __cÚ¡ * __»¡riù __ÅŒ , 310 ** __»¡riù __’d±r ,  __ba£ è __THROW ; 313 štmax_t $wc¡oimax ( __cÚ¡ __gwch¬_t * __»¡riù __ÅŒ , 314 __gwch¬_t ** __»¡riù __’d±r ,  __ba£ ) 315 __THROW ; 318 uštmax_t $wc¡oumax ( __cÚ¡ __gwch¬_t * __»¡riù __ÅŒ , 319 __gwch¬_t ** __»¡riù __’d±r ,  __ba£ ) 320 __THROW ; 322 #ifdeà __USE_EXTERN_INLINES 324 #ià __WORDSIZE == 64 326  $__¡¹Þ_š‹º® ( __cÚ¡ * __»¡riù __ÅŒ , 327 ** __»¡riù __’d±r , 328  __ba£ ,  __group ) 329 __THROW `__nÚnuÎ ((1)è __wur ; 331 __ex‹º_šlše štmax_t 332 `__NTH ( $¡¹oimax ( __cÚ¡ * __»¡riù ÅŒ , **__»¡riù ’d±r , 333  ba£ )) 335  `__¡¹Þ_š‹º® ( ÅŒ , ’d±r , ba£ , 0); 336 } } 338  $__¡¹oul_š‹º® ( __cÚ¡ * 339 __»¡riù __ÅŒ , 340 ** __»¡riù __’d±r , 341  __ba£ ,  __group ) 342 __THROW `__nÚnuÎ ((1)è __wur ; 344 __ex‹º_šlše uštmax_t 345 `__NTH ( $¡¹oumax ( __cÚ¡ * __»¡riù ÅŒ , **__»¡riù ’d±r , 346  ba£ )) 348  `__¡¹oul_š‹º® ( ÅŒ , ’d±r , ba£ , 0); 349 } } 351  $__wc¡Þ_š‹º® ( __cÚ¡ __gwch¬_t * __»¡riù __ÅŒ , 352 __gwch¬_t ** __»¡riù __’d±r , 353  __ba£ ,  __group ) 354 __THROW `__nÚnuÎ ((1)è __wur ; 356 __ex‹º_šlše štmax_t 357 `__NTH ( $wc¡oimax ( __cÚ¡ __gwch¬_t * __»¡riù ÅŒ , 358 __gwch¬_t ** __»¡riù ’d±r ,  ba£ )) 360  `__wc¡Þ_š‹º® ( ÅŒ , ’d±r , ba£ , 0); 361 } } 363  $__wc¡oul_š‹º® ( __cÚ¡ __gwch¬_t * 364 __»¡riù __ÅŒ , 365 __gwch¬_t ** 366 __»¡riù __’d±r , 367  __ba£ ,  __group ) 368 __THROW `__nÚnuÎ ((1)è __wur ; 370 __ex‹º_šlše uštmax_t 371 `__NTH ( $wc¡oumax ( __cÚ¡ __gwch¬_t * __»¡riù ÅŒ , 372 __gwch¬_t ** __»¡riù ’d±r ,  ba£ )) 374  `__wc¡oul_š‹º® ( ÅŒ , ’d±r , ba£ , 0); 375 } } 379 __ex‹nsiÚ__ 380  $__¡¹Þl_š‹º® ( __cÚ¡ * __»¡riù __ÅŒ , 381 ** __»¡riù __’d±r , 382  __ba£ ,  __group ) 383 __THROW `__nÚnuÎ ((1)è __wur ; 385 __ex‹º_šlše štmax_t 386 `__NTH ( $¡¹oimax ( __cÚ¡ * __»¡riù ÅŒ , **__»¡riù ’d±r , 387  ba£ )) 389  `__¡¹Þl_š‹º® ( ÅŒ , ’d±r , ba£ , 0); 390 } } 392 __ex‹nsiÚ__ 393  $__¡¹ouÎ_š‹º® ( __cÚ¡ * 394 __»¡riù __ÅŒ , 396 __»¡riù __’d±r , 397  __ba£ , 398  __group ) 399 __THROW `__nÚnuÎ ((1)è __wur ; 401 __ex‹º_šlše uštmax_t 402 `__NTH ( $¡¹oumax ( __cÚ¡ * __»¡riù ÅŒ , **__»¡riù ’d±r , 403  ba£ )) 405  `__¡¹ouÎ_š‹º® ( ÅŒ , ’d±r , ba£ , 0); 406 } } 408 __ex‹nsiÚ__ 409  $__wc¡Þl_š‹º® ( __cÚ¡ __gwch¬_t * 410 __»¡riù __ÅŒ , 411 __gwch¬_t ** __»¡riù __’d±r , 412  __ba£ ,  __group ) 413 __THROW `__nÚnuÎ ((1)è __wur ; 415 __ex‹º_šlše štmax_t 416 `__NTH ( $wc¡oimax ( __cÚ¡ __gwch¬_t * __»¡riù ÅŒ , 417 __gwch¬_t ** __»¡riù ’d±r ,  ba£ )) 419  `__wc¡Þl_š‹º® ( ÅŒ , ’d±r , ba£ , 0); 420 } } 423 __ex‹nsiÚ__ 424  $__wc¡ouÎ_š‹º® ( __cÚ¡ __gwch¬_t * 425 __»¡riù __ÅŒ , 426 __gwch¬_t ** 427 __»¡riù __’d±r , 428  __ba£ , 429  __group ) 430 __THROW `__nÚnuÎ ((1)è __wur ; 432 __ex‹º_šlše uštmax_t 433 `__NTH ( $wc¡oumax ( __cÚ¡ __gwch¬_t * __»¡riù ÅŒ , 434 __gwch¬_t ** __»¡riù ’d±r ,  ba£ )) 436  `__wc¡ouÎ_š‹º® ( ÅŒ , ’d±r , ba£ , 0); 437 } } 442 g__END_DECLS @/usr/include/libgen.h 19 #iâdeà _LIBGEN_H 20  #_LIBGEN_H 1 ) 22  ~<ã©u»s.h > 24 __BEGIN_DECLS 27 * $dœÇme (* __·th è __THROW ; 35 * $__xpg_ba£Çme (* __·th è __THROW ; 36  #ba£Çme __xpg_ba£Çme ) 38 __END_DECLS @/usr/include/limits.h 24 #iâdeà _LIBC_LIMITS_H_ 25  #_LIBC_LIMITS_H_ 1 ) 27  ~<ã©u»s.h > 33  #MB_LEN_MAX 16 ) 38 #ià! defšed __GNUC__ || __GNUC__ < 2 43 #iâdeà _LIMITS_H 44  #_LIMITS_H 1 ) 46  ~ 55  #CHAR_BIT 8 ) 58  #SCHAR_MIN (-128) ) 59  #SCHAR_MAX 127 ) 62  #UCHAR_MAX 255 ) 65 #ifdeà __CHAR_UNSIGNED__ 66  #CHAR_MIN 0 ) 67  #CHAR_MAX UCHAR_MAX ) 69  #CHAR_MIN SCHAR_MIN ) 70  #CHAR_MAX SCHAR_MAX ) 74  #SHRT_MIN (-32768) ) 75  #SHRT_MAX 32767 ) 78  #USHRT_MAX 65535 ) 81  #INT_MIN (- INT_MAX - 1) ) 82  #INT_MAX 2147483647 ) 85  #UINT_MAX 4294967295U ) 88 #ià __WORDSIZE == 64 89  #LONG_MAX 9223372036854775807L ) 91  #LONG_MAX 2147483647L ) 93  #LONG_MIN (- LONG_MAX - 1L) ) 96 #ià __WORDSIZE == 64 97  #ULONG_MAX 18446744073709551615UL ) 99  #ULONG_MAX 4294967295UL ) 102 #ifdeà __USE_ISOC99 105  #LLONG_MAX 9223372036854775807LL ) 106  #LLONG_MIN (- LLONG_MAX - 1LL) ) 109  #ULLONG_MAX 18446744073709551615ULL ) 123 #ià defšed __GNUC__ && !defšed _GCC_LIMITS_H_ 125 #šþude_Ãxˆ< lim™s . h > 131 #ià defšed __USE_ISOC99 && defšed __GNUC__ 132 #iâdeà LLONG_MIN 133  #LLONG_MIN (- LLONG_MAX -1) ) 135 #iâdeà LLONG_MAX 136  #LLONG_MAX __LONG_LONG_MAX__ ) 138 #iâdeà ULLONG_MAX 139  #ULLONG_MAX ( LLONG_MAX * 2ULL + 1) ) 143 #ifdef __USE_POSIX 145  ~ 148 #ifdef __USE_POSIX2 149  ~ 152 #ifdef __USE_XOPEN 153  ~ @/usr/include/linux/hid.h 1 #iâdeà __HID_H 2  #__HID_H ) 34  #USB_INTERFACE_CLASS_HID 3 ) 40  #USB_INTERFACE_SUBCLASS_BOOT 1 ) 41  #USB_INTERFACE_PROTOCOL_KEYBOARD 1 ) 42  #USB_INTERFACE_PROTOCOL_MOUSE 2 ) 48  #HID_REQ_GET_REPORT 0x01 ) 49  #HID_REQ_GET_IDLE 0x02 ) 50  #HID_REQ_GET_PROTOCOL 0x03 ) 51  #HID_REQ_SET_REPORT 0x09 ) 52  #HID_REQ_SET_IDLE 0x0A ) 53  #HID_REQ_SET_PROTOCOL 0x0B ) 59  #HID_DT_HID ( USB_TYPE_CLASS | 0x01) ) 60  #HID_DT_REPORT ( USB_TYPE_CLASS | 0x02) ) 61  #HID_DT_PHYSICAL ( USB_TYPE_CLASS | 0x03) ) 63  #HID_MAX_DESCRIPTOR_SIZE 4096 ) @/usr/include/linux/hiddev.h 1 #iâdeà _HIDDEV_H 2  #_HIDDEV_H ) 30  ~ 36  shiddev_ev’t { 37  mhid ; 38 sigÃd  mv®ue ; 41  shiddev_devšfo { 42 __u32 mbu¡y³ ; 43 __u32 mbu¢um ; 44 __u32 mdevnum ; 45 __u32 miâum ; 46 __s16 mv’dÜ ; 47 __s16 m´oduù ; 48 __s16 mv”siÚ ; 49 __u32 mnum_­¶iÿtiÚs ; 52  shiddev_cÞËùiÚ_šfo { 53 __u32 mšdex ; 54 __u32 mty³ ; 55 __u32 mu§ge ; 56 __u32 mËv– ; 59  #HID_STRING_SIZE 256 ) 60  shiddev_¡ršg_desütÜ { 61 __s32 mšdex ; 62  mv®ue [ HID_STRING_SIZE ]; 65  shiddev_»pÜt_šfo { 66 __u32 m»pÜt_ty³ ; 67 __u32 m»pÜt_id ; 68 __u32 mnum_f›lds ; 78  #HID_REPORT_ID_UNKNOWN 0xffffffff ) 79  #HID_REPORT_ID_FIRST 0x00000100 ) 80  #HID_REPORT_ID_NEXT 0x00000200 ) 81  #HID_REPORT_ID_MASK 0x000000ff ) 82  #HID_REPORT_ID_MAX 0x000000ff ) 84  #HID_REPORT_TYPE_INPUT 1 ) 85  #HID_REPORT_TYPE_OUTPUT 2 ) 86  #HID_REPORT_TYPE_FEATURE 3 ) 87  #HID_REPORT_TYPE_MIN 1 ) 88  #HID_REPORT_TYPE_MAX 3 ) 90  shiddev_f›ld_šfo { 91 __u32 m»pÜt_ty³ ; 92 __u32 m»pÜt_id ; 93 __u32 mf›ld_šdex ; 94 __u32 mmaxu§ge ; 95 __u32 mæags ; 96 __u32 mphysiÿl ; 97 __u32 mlogiÿl ; 98 __u32 m­¶iÿtiÚ ; 99 __s32 mlogiÿl_mšimum ; 100 __s32 mlogiÿl_maximum ; 101 __s32 mphysiÿl_mšimum ; 102 __s32 mphysiÿl_maximum ; 103 __u32 mun™_expÚ’t ; 104 __u32 mun™ ; 110  #HID_FIELD_CONSTANT 0x001 ) 111  #HID_FIELD_VARIABLE 0x002 ) 112  #HID_FIELD_RELATIVE 0x004 ) 113  #HID_FIELD_WRAP 0x008 ) 114  #HID_FIELD_NONLINEAR 0x010 ) 115  #HID_FIELD_NO_PREFERRED 0x020 ) 116  #HID_FIELD_NULL_STATE 0x040 ) 117  #HID_FIELD_VOLATILE 0x080 ) 118  #HID_FIELD_BUFFERED_BYTE 0x100 ) 120  shiddev_u§ge_»f { 121 __u32 m»pÜt_ty³ ; 122 __u32 m»pÜt_id ; 123 __u32 mf›ld_šdex ; 124 __u32 mu§ge_šdex ; 125 __u32 mu§ge_code ; 126 __s32 mv®ue ; 131  #HID_MAX_MULTI_USAGES 1024 ) 132  shiddev_u§ge_»f_muÉi { 133  hiddev_u§ge_»f mu»f ; 134 __u32 mnum_v®ues ; 135 __s32 mv®ues [ HID_MAX_MULTI_USAGES ]; 142  #HID_FIELD_INDEX_NONE 0xffffffff ) 148  #HID_VERSION 0x010004 ) 154  #HIDIOCGVERSION `_IOR ('H', 0x01, ) ) 155  #HIDIOCAPPLICATION `_IO ('H', 0x02) ) 156  #HIDIOCGDEVINFO `_IOR ('H', 0x03,  hiddev_devšfo ) ) 157  #HIDIOCGSTRING `_IOR ('H', 0x04,  hiddev_¡ršg_desütÜ ) ) 158  #HIDIOCINITREPORT `_IO ('H', 0x05) ) 159  #HIDIOCGNAME ( Ën è `_IOC ( _IOC_READ , 'H', 0x06,†’) ) 160  #HIDIOCGREPORT `_IOW ('H', 0x07,  hiddev_»pÜt_šfo ) ) 161  #HIDIOCSREPORT `_IOW ('H', 0x08,  hiddev_»pÜt_šfo ) ) 162  #HIDIOCGREPORTINFO `_IOWR ('H', 0x09,  hiddev_»pÜt_šfo ) ) 163  #HIDIOCGFIELDINFO `_IOWR ('H', 0x0A,  hiddev_f›ld_šfo ) ) 164  #HIDIOCGUSAGE `_IOWR ('H', 0x0B,  hiddev_u§ge_»f ) ) 165  #HIDIOCSUSAGE `_IOW ('H', 0x0C,  hiddev_u§ge_»f ) ) 166  #HIDIOCGUCODE `_IOWR ('H', 0x0D,  hiddev_u§ge_»f ) ) 167  #HIDIOCGFLAG `_IOR ('H', 0x0E, ) ) 168  #HIDIOCSFLAG `_IOW ('H', 0x0F, ) ) 169  #HIDIOCGCOLLECTIONINDEX `_IOW ('H', 0x10,  hiddev_u§ge_»f ) ) 170  #HIDIOCGCOLLECTIONINFO `_IOWR ('H', 0x11,  hiddev_cÞËùiÚ_šfo ) ) 171  #HIDIOCGPHYS ( Ën è `_IOC ( _IOC_READ , 'H', 0x12,†’) ) 174  #HIDIOCGUSAGES `_IOWR ('H', 0x13,  hiddev_u§ge_»f_muÉi ) ) 175  #HIDIOCSUSAGES `_IOW ('H', 0x14,  hiddev_u§ge_»f_muÉi ) ) 180  #HIDDEV_FLAG_UREF 0x1 ) 181  #HIDDEV_FLAG_REPORT 0x2 ) 182  #HIDDEV_FLAGS 0x3 ) @/usr/include/linux/hidraw.h 1 #iâdeà _HIDRAW_H 2  #_HIDRAW_H ) 18  ~ 19  ~ 21  shid¿w_»pÜt_desütÜ { 22 __u32 msize ; 23 __u8 mv®ue [ HID_MAX_DESCRIPTOR_SIZE ]; 26  shid¿w_devšfo { 27 __u32 mbu¡y³ ; 28 __s16 mv’dÜ ; 29 __s16 m´oduù ; 33  #HIDIOCGRDESCSIZE `_IOR ('H', 0x01, ) ) 34  #HIDIOCGRDESC `_IOR ('H', 0x02,  hid¿w_»pÜt_desütÜ ) ) 35  #HIDIOCGRAWINFO `_IOR ('H', 0x03,  hid¿w_devšfo ) ) 36  #HIDIOCGRAWNAME ( Ën è `_IOC ( _IOC_READ , 'H', 0x04,†’) ) 37  #HIDIOCGRAWPHYS ( Ën è `_IOC ( _IOC_READ , 'H', 0x05,†’) ) 39  #HIDIOCSFEATURE ( Ën è `_IOC ( _IOC_WRITE | _IOC_READ , 'H', 0x06,†’) ) 40  #HIDIOCGFEATURE ( Ën è `_IOC ( _IOC_WRITE | _IOC_READ , 'H', 0x07,†’) ) 42  #HIDRAW_FIRST_MINOR 0 ) 43  #HIDRAW_MAX_DEVICES 64 ) 45  #HIDRAW_BUFFER_SIZE 64 ) @/usr/include/linux/if_alg.h 13 #iâdeà _LINUX_IF_ALG_H 14  #_LINUX_IF_ALG_H ) 16  ~ 18  ssockaddr_®g { 19 __u16 m§lg_çmžy ; 20 __u8 m§lg_ty³ [14]; 21 __u32 m§lg_ã© ; 22 __u32 m§lg_mask ; 23 __u8 m§lg_Çme [64]; 26  saf_®g_iv { 27 __u32 mivËn ; 28 __u8 miv [0]; 32  #ALG_SET_KEY 1 ) 33  #ALG_SET_IV 2 ) 34  #ALG_SET_OP 3 ) 37  #ALG_OP_DECRYPT 0 ) 38  #ALG_OP_ENCRYPT 1 ) @/usr/include/linux/if_bridge.h 13 #iâdeà _LINUX_IF_BRIDGE_H 14  #_LINUX_IF_BRIDGE_H ) 16  ~ 18  #SYSFS_BRIDGE_ATTR "bridge" ) 19  #SYSFS_BRIDGE_FDB "brfÜw¬d" ) 20  #SYSFS_BRIDGE_PORT_SUBDIR "brif" ) 21  #SYSFS_BRIDGE_PORT_ATTR "b½Üt" ) 22  #SYSFS_BRIDGE_PORT_LINK "bridge" ) 24  #BRCTL_VERSION 1 ) 26  #BRCTL_GET_VERSION 0 ) 27  #BRCTL_GET_BRIDGES 1 ) 28  #BRCTL_ADD_BRIDGE 2 ) 29  #BRCTL_DEL_BRIDGE 3 ) 30  #BRCTL_ADD_IF 4 ) 31  #BRCTL_DEL_IF 5 ) 32  #BRCTL_GET_BRIDGE_INFO 6 ) 33  #BRCTL_GET_PORT_LIST 7 ) 34  #BRCTL_SET_BRIDGE_FORWARD_DELAY 8 ) 35  #BRCTL_SET_BRIDGE_HELLO_TIME 9 ) 36  #BRCTL_SET_BRIDGE_MAX_AGE 10 ) 37  #BRCTL_SET_AGEING_TIME 11 ) 38  #BRCTL_SET_GC_INTERVAL 12 ) 39  #BRCTL_GET_PORT_INFO 13 ) 40  #BRCTL_SET_BRIDGE_STP_STATE 14 ) 41  #BRCTL_SET_BRIDGE_PRIORITY 15 ) 42  #BRCTL_SET_PORT_PRIORITY 16 ) 43  #BRCTL_SET_PATH_COST 17 ) 44  #BRCTL_GET_FDB_ENTRIES 18 ) 46  #BR_STATE_DISABLED 0 ) 47  #BR_STATE_LISTENING 1 ) 48  #BR_STATE_LEARNING 2 ) 49  #BR_STATE_FORWARDING 3 ) 50  #BR_STATE_BLOCKING 4 ) 52  s__bridge_šfo { 53 __u64 mdesigÇ‹d_roÙ ; 54 __u64 mbridge_id ; 55 __u32 mroÙ_·th_co¡ ; 56 __u32 mmax_age ; 57 __u32 mh–lo_time ; 58 __u32 mfÜw¬d_d–ay ; 59 __u32 mbridge_max_age ; 60 __u32 mbridge_h–lo_time ; 61 __u32 mbridge_fÜw¬d_d–ay ; 62 __u8 mtÝÞogy_chªge ; 63 __u8 mtÝÞogy_chªge_d‘eùed ; 64 __u8 mroÙ_pÜt ; 65 __u8 m¡p_’abËd ; 66 __u32 magešg_time ; 67 __u32 mgc_š‹rv® ; 68 __u32 mh–lo_tim”_v®ue ; 69 __u32 mtú_tim”_v®ue ; 70 __u32 mtÝÞogy_chªge_tim”_v®ue ; 71 __u32 mgc_tim”_v®ue ; 74  s__pÜt_šfo { 75 __u64 mdesigÇ‹d_roÙ ; 76 __u64 mdesigÇ‹d_bridge ; 77 __u16 mpÜt_id ; 78 __u16 mdesigÇ‹d_pÜt ; 79 __u32 m·th_co¡ ; 80 __u32 mdesigÇ‹d_co¡ ; 81 __u8 m¡©e ; 82 __u8 mtÝ_chªge_ack ; 83 __u8 mcÚfig_³ndšg ; 84 __u8 munu£d0 ; 85 __u32 mmes§ge_age_tim”_v®ue ; 86 __u32 mfÜw¬d_d–ay_tim”_v®ue ; 87 __u32 mhÞd_tim”_v®ue ; 90  s__fdb_’Œy { 91 __u8 mmac_addr [6]; 92 __u8 mpÜt_no ; 93 __u8 mis_loÿl ; 94 __u32 magešg_tim”_v®ue ; 95 __u8 mpÜt_hi ; 96 __u8 m·d0 ; 97 __u16 munu£d ; @/usr/include/linux/input.h 1 #iâdeà _INPUT_H 2  #_INPUT_H ) 12  ~ 13  ~ 14  ~ 15  ~ 21  sšput_ev’t { 22  timev® mtime ; 23 __u16 mty³ ; 24 __u16 mcode ; 25 __s32 mv®ue ; 32  #EV_VERSION 0x010001 ) 38  sšput_id { 39 __u16 mbu¡y³ ; 40 __u16 mv’dÜ ; 41 __u16 m´oduù ; 42 __u16 mv”siÚ ; 64  sšput_absšfo { 65 __s32 mv®ue ; 66 __s32 mmšimum ; 67 __s32 mmaximum ; 68 __s32 mfuzz ; 69 __s32 mæ© ; 70 __s32 m»sÞutiÚ ; 88  sšput_keym­_’Œy { 89  #INPUT_KEYMAP_BY_INDEX (1 << 0) ) 90 __u8 mæags ; 91 __u8 mËn ; 92 __u16 mšdex ; 93 __u32 mkeycode ; 94 __u8 msÿncode [32]; 97  #EVIOCGVERSION `_IOR ('E', 0x01, è ) 98  #EVIOCGID `_IOR ('E', 0x02,  šput_id è ) 99  #EVIOCGREP `_IOR ('E', 0x03, [2]è ) 100  #EVIOCSREP `_IOW ('E', 0x03, [2]è ) 102  #EVIOCGKEYCODE `_IOR ('E', 0x04, [2]è ) 103  #EVIOCGKEYCODE_V2 `_IOR ('E', 0x04,  šput_keym­_’Œy ) ) 104  #EVIOCSKEYCODE `_IOW ('E', 0x04, [2]è ) 105  #EVIOCSKEYCODE_V2 `_IOW ('E', 0x04,  šput_keym­_’Œy ) ) 107  #EVIOCGNAME ( Ën è `_IOC ( _IOC_READ , 'E', 0x06,†’è ) 108  #EVIOCGPHYS ( Ën è `_IOC ( _IOC_READ , 'E', 0x07,†’è ) 109  #EVIOCGUNIQ ( Ën è `_IOC ( _IOC_READ , 'E', 0x08,†’è ) 110  #EVIOCGPROP ( Ën è `_IOC ( _IOC_READ , 'E', 0x09,†’è ) 112  #EVIOCGKEY ( Ën è `_IOC ( _IOC_READ , 'E', 0x18,†’è ) 113  #EVIOCGLED ( Ën è `_IOC ( _IOC_READ , 'E', 0x19,†’è ) 114  #EVIOCGSND ( Ën è `_IOC ( _IOC_READ , 'E', 0x1a,†’è ) 115  #EVIOCGSW ( Ën è `_IOC ( _IOC_READ , 'E', 0x1b,†’è ) 117  #EVIOCGBIT ( ev , Ën è `_IOC ( _IOC_READ , 'E', 0x20 + (ev),†’è ) 118  #EVIOCGABS ( abs è `_IOR ('E', 0x40 + (abs),  šput_absšfo è ) 119  #EVIOCSABS ( abs è `_IOW ('E', 0xc0 + (abs),  šput_absšfo è ) 121  #EVIOCSFF `_IOC ( _IOC_WRITE , 'E', 0x80, ( ff_efãù )è ) 122  #EVIOCRMFF `_IOW ('E', 0x81, è ) 123  #EVIOCGEFFECTS `_IOR ('E', 0x84, è ) 125  #EVIOCGRAB `_IOW ('E', 0x90, è ) 131  #INPUT_PROP_POINTER 0x00 ) 132  #INPUT_PROP_DIRECT 0x01 ) 133  #INPUT_PROP_BUTTONPAD 0x02 ) 134  #INPUT_PROP_SEMI_MT 0x03 ) 136  #INPUT_PROP_MAX 0x1f ) 137  #INPUT_PROP_CNT ( INPUT_PROP_MAX + 1) ) 143  #EV_SYN 0x00 ) 144  #EV_KEY 0x01 ) 145  #EV_REL 0x02 ) 146  #EV_ABS 0x03 ) 147  #EV_MSC 0x04 ) 148  #EV_SW 0x05 ) 149  #EV_LED 0x11 ) 150  #EV_SND 0x12 ) 151  #EV_REP 0x14 ) 152  #EV_FF 0x15 ) 153  #EV_PWR 0x16 ) 154  #EV_FF_STATUS 0x17 ) 155  #EV_MAX 0x1f ) 156  #EV_CNT ( EV_MAX +1) ) 162  #SYN_REPORT 0 ) 163  #SYN_CONFIG 1 ) 164  #SYN_MT_REPORT 2 ) 165  #SYN_DROPPED 3 ) 178  #KEY_RESERVED 0 ) 179  #KEY_ESC 1 ) 180  #KEY_1 2 ) 181  #KEY_2 3 ) 182  #KEY_3 4 ) 183  #KEY_4 5 ) 184  #KEY_5 6 ) 185  #KEY_6 7 ) 186  #KEY_7 8 ) 187  #KEY_8 9 ) 188  #KEY_9 10 ) 189  #KEY_0 11 ) 190  #KEY_MINUS 12 ) 191  #KEY_EQUAL 13 ) 192  #KEY_BACKSPACE 14 ) 193  #KEY_TAB 15 ) 194  #KEY_Q 16 ) 195  #KEY_W 17 ) 196  #KEY_E 18 ) 197  #KEY_R 19 ) 198  #KEY_T 20 ) 199  #KEY_Y 21 ) 200  #KEY_U 22 ) 201  #KEY_I 23 ) 202  #KEY_O 24 ) 203  #KEY_P 25 ) 204  #KEY_LEFTBRACE 26 ) 205  #KEY_RIGHTBRACE 27 ) 206  #KEY_ENTER 28 ) 207  #KEY_LEFTCTRL 29 ) 208  #KEY_A 30 ) 209  #KEY_S 31 ) 210  #KEY_D 32 ) 211  #KEY_F 33 ) 212  #KEY_G 34 ) 213  #KEY_H 35 ) 214  #KEY_J 36 ) 215  #KEY_K 37 ) 216  #KEY_L 38 ) 217  #KEY_SEMICOLON 39 ) 218  #KEY_APOSTROPHE 40 ) 219  #KEY_GRAVE 41 ) 220  #KEY_LEFTSHIFT 42 ) 221  #KEY_BACKSLASH 43 ) 222  #KEY_Z 44 ) 223  #KEY_X 45 ) 224  #KEY_C 46 ) 225  #KEY_V 47 ) 226  #KEY_B 48 ) 227  #KEY_N 49 ) 228  #KEY_M 50 ) 229  #KEY_COMMA 51 ) 230  #KEY_DOT 52 ) 231  #KEY_SLASH 53 ) 232  #KEY_RIGHTSHIFT 54 ) 233  #KEY_KPASTERISK 55 ) 234  #KEY_LEFTALT 56 ) 235  #KEY_SPACE 57 ) 236  #KEY_CAPSLOCK 58 ) 237  #KEY_F1 59 ) 238  #KEY_F2 60 ) 239  #KEY_F3 61 ) 240  #KEY_F4 62 ) 241  #KEY_F5 63 ) 242  #KEY_F6 64 ) 243  #KEY_F7 65 ) 244  #KEY_F8 66 ) 245  #KEY_F9 67 ) 246  #KEY_F10 68 ) 247  #KEY_NUMLOCK 69 ) 248  #KEY_SCROLLLOCK 70 ) 249  #KEY_KP7 71 ) 250  #KEY_KP8 72 ) 251  #KEY_KP9 73 ) 252  #KEY_KPMINUS 74 ) 253  #KEY_KP4 75 ) 254  #KEY_KP5 76 ) 255  #KEY_KP6 77 ) 256  #KEY_KPPLUS 78 ) 257  #KEY_KP1 79 ) 258  #KEY_KP2 80 ) 259  #KEY_KP3 81 ) 260  #KEY_KP0 82 ) 261  #KEY_KPDOT 83 ) 263  #KEY_ZENKAKUHANKAKU 85 ) 264  #KEY_102ND 86 ) 265  #KEY_F11 87 ) 266  #KEY_F12 88 ) 267  #KEY_RO 89 ) 268  #KEY_KATAKANA 90 ) 269  #KEY_HIRAGANA 91 ) 270  #KEY_HENKAN 92 ) 271  #KEY_KATAKANAHIRAGANA 93 ) 272  #KEY_MUHENKAN 94 ) 273  #KEY_KPJPCOMMA 95 ) 274  #KEY_KPENTER 96 ) 275  #KEY_RIGHTCTRL 97 ) 276  #KEY_KPSLASH 98 ) 277  #KEY_SYSRQ 99 ) 278  #KEY_RIGHTALT 100 ) 279  #KEY_LINEFEED 101 ) 280  #KEY_HOME 102 ) 281  #KEY_UP 103 ) 282  #KEY_PAGEUP 104 ) 283  #KEY_LEFT 105 ) 284  #KEY_RIGHT 106 ) 285  #KEY_END 107 ) 286  #KEY_DOWN 108 ) 287  #KEY_PAGEDOWN 109 ) 288  #KEY_INSERT 110 ) 289  #KEY_DELETE 111 ) 290  #KEY_MACRO 112 ) 291  #KEY_MUTE 113 ) 292  #KEY_VOLUMEDOWN 114 ) 293  #KEY_VOLUMEUP 115 ) 294  #KEY_POWER 116 ) 295  #KEY_KPEQUAL 117 ) 296  #KEY_KPPLUSMINUS 118 ) 297  #KEY_PAUSE 119 ) 298  #KEY_SCALE 120 ) 300  #KEY_KPCOMMA 121 ) 301  #KEY_HANGEUL 122 ) 302  #KEY_HANGUEL KEY_HANGEUL ) 303  #KEY_HANJA 123 ) 304  #KEY_YEN 124 ) 305  #KEY_LEFTMETA 125 ) 306  #KEY_RIGHTMETA 126 ) 307  #KEY_COMPOSE 127 ) 309  #KEY_STOP 128 ) 310  #KEY_AGAIN 129 ) 311  #KEY_PROPS 130 ) 312  #KEY_UNDO 131 ) 313  #KEY_FRONT 132 ) 314  #KEY_COPY 133 ) 315  #KEY_OPEN 134 ) 316  #KEY_PASTE 135 ) 317  #KEY_FIND 136 ) 318  #KEY_CUT 137 ) 319  #KEY_HELP 138 ) 320  #KEY_MENU 139 ) 321  #KEY_CALC 140 ) 322  #KEY_SETUP 141 ) 323  #KEY_SLEEP 142 ) 324  #KEY_WAKEUP 143 ) 325  #KEY_FILE 144 ) 326  #KEY_SENDFILE 145 ) 327  #KEY_DELETEFILE 146 ) 328  #KEY_XFER 147 ) 329  #KEY_PROG1 148 ) 330  #KEY_PROG2 149 ) 331  #KEY_WWW 150 ) 332  #KEY_MSDOS 151 ) 333  #KEY_COFFEE 152 ) 334  #KEY_SCREENLOCK KEY_COFFEE ) 335  #KEY_DIRECTION 153 ) 336  #KEY_CYCLEWINDOWS 154 ) 337  #KEY_MAIL 155 ) 338  #KEY_BOOKMARKS 156 ) 339  #KEY_COMPUTER 157 ) 340  #KEY_BACK 158 ) 341  #KEY_FORWARD 159 ) 342  #KEY_CLOSECD 160 ) 343  #KEY_EJECTCD 161 ) 344  #KEY_EJECTCLOSECD 162 ) 345  #KEY_NEXTSONG 163 ) 346  #KEY_PLAYPAUSE 164 ) 347  #KEY_PREVIOUSSONG 165 ) 348  #KEY_STOPCD 166 ) 349  #KEY_RECORD 167 ) 350  #KEY_REWIND 168 ) 351  #KEY_PHONE 169 ) 352  #KEY_ISO 170 ) 353  #KEY_CONFIG 171 ) 354  #KEY_HOMEPAGE 172 ) 355  #KEY_REFRESH 173 ) 356  #KEY_EXIT 174 ) 357  #KEY_MOVE 175 ) 358  #KEY_EDIT 176 ) 359  #KEY_SCROLLUP 177 ) 360  #KEY_SCROLLDOWN 178 ) 361  #KEY_KPLEFTPAREN 179 ) 362  #KEY_KPRIGHTPAREN 180 ) 363  #KEY_NEW 181 ) 364  #KEY_REDO 182 ) 366  #KEY_F13 183 ) 367  #KEY_F14 184 ) 368  #KEY_F15 185 ) 369  #KEY_F16 186 ) 370  #KEY_F17 187 ) 371  #KEY_F18 188 ) 372  #KEY_F19 189 ) 373  #KEY_F20 190 ) 374  #KEY_F21 191 ) 375  #KEY_F22 192 ) 376  #KEY_F23 193 ) 377  #KEY_F24 194 ) 379  #KEY_PLAYCD 200 ) 380  #KEY_PAUSECD 201 ) 381  #KEY_PROG3 202 ) 382  #KEY_PROG4 203 ) 383  #KEY_DASHBOARD 204 ) 384  #KEY_SUSPEND 205 ) 385  #KEY_CLOSE 206 ) 386  #KEY_PLAY 207 ) 387  #KEY_FASTFORWARD 208 ) 388  #KEY_BASSBOOST 209 ) 389  #KEY_PRINT 210 ) 390  #KEY_HP 211 ) 391  #KEY_CAMERA 212 ) 392  #KEY_SOUND 213 ) 393  #KEY_QUESTION 214 ) 394  #KEY_EMAIL 215 ) 395  #KEY_CHAT 216 ) 396  #KEY_SEARCH 217 ) 397  #KEY_CONNECT 218 ) 398  #KEY_FINANCE 219 ) 399  #KEY_SPORT 220 ) 400  #KEY_SHOP 221 ) 401  #KEY_ALTERASE 222 ) 402  #KEY_CANCEL 223 ) 403  #KEY_BRIGHTNESSDOWN 224 ) 404  #KEY_BRIGHTNESSUP 225 ) 405  #KEY_MEDIA 226 ) 407  #KEY_SWITCHVIDEOMODE 227 ) 409  #KEY_KBDILLUMTOGGLE 228 ) 410  #KEY_KBDILLUMDOWN 229 ) 411  #KEY_KBDILLUMUP 230 ) 413  #KEY_SEND 231 ) 414  #KEY_REPLY 232 ) 415  #KEY_FORWARDMAIL 233 ) 416  #KEY_SAVE 234 ) 417  #KEY_DOCUMENTS 235 ) 419  #KEY_BATTERY 236 ) 421  #KEY_BLUETOOTH 237 ) 422  #KEY_WLAN 238 ) 423  #KEY_UWB 239 ) 425  #KEY_UNKNOWN 240 ) 427  #KEY_VIDEO_NEXT 241 ) 428  #KEY_VIDEO_PREV 242 ) 429  #KEY_BRIGHTNESS_CYCLE 243 ) 430  #KEY_BRIGHTNESS_ZERO 244 ) 431  #KEY_DISPLAY_OFF 245 ) 433  #KEY_WIMAX 246 ) 434  #KEY_RFKILL 247 ) 436  #KEY_MICMUTE 248 ) 440  #BTN_MISC 0x100 ) 441  #BTN_0 0x100 ) 442  #BTN_1 0x101 ) 443  #BTN_2 0x102 ) 444  #BTN_3 0x103 ) 445  #BTN_4 0x104 ) 446  #BTN_5 0x105 ) 447  #BTN_6 0x106 ) 448  #BTN_7 0x107 ) 449  #BTN_8 0x108 ) 450  #BTN_9 0x109 ) 452  #BTN_MOUSE 0x110 ) 453  #BTN_LEFT 0x110 ) 454  #BTN_RIGHT 0x111 ) 455  #BTN_MIDDLE 0x112 ) 456  #BTN_SIDE 0x113 ) 457  #BTN_EXTRA 0x114 ) 458  #BTN_FORWARD 0x115 ) 459  #BTN_BACK 0x116 ) 460  #BTN_TASK 0x117 ) 462  #BTN_JOYSTICK 0x120 ) 463  #BTN_TRIGGER 0x120 ) 464  #BTN_THUMB 0x121 ) 465  #BTN_THUMB2 0x122 ) 466  #BTN_TOP 0x123 ) 467  #BTN_TOP2 0x124 ) 468  #BTN_PINKIE 0x125 ) 469  #BTN_BASE 0x126 ) 470  #BTN_BASE2 0x127 ) 471  #BTN_BASE3 0x128 ) 472  #BTN_BASE4 0x129 ) 473  #BTN_BASE5 0x12a ) 474  #BTN_BASE6 0x12b ) 475  #BTN_DEAD 0x12f ) 477  #BTN_GAMEPAD 0x130 ) 478  #BTN_A 0x130 ) 479  #BTN_B 0x131 ) 480  #BTN_C 0x132 ) 481  #BTN_X 0x133 ) 482  #BTN_Y 0x134 ) 483  #BTN_Z 0x135 ) 484  #BTN_TL 0x136 ) 485  #BTN_TR 0x137 ) 486  #BTN_TL2 0x138 ) 487  #BTN_TR2 0x139 ) 488  #BTN_SELECT 0x13a ) 489  #BTN_START 0x13b ) 490  #BTN_MODE 0x13c ) 491  #BTN_THUMBL 0x13d ) 492  #BTN_THUMBR 0x13e ) 494  #BTN_DIGI 0x140 ) 495  #BTN_TOOL_PEN 0x140 ) 496  #BTN_TOOL_RUBBER 0x141 ) 497  #BTN_TOOL_BRUSH 0x142 ) 498  #BTN_TOOL_PENCIL 0x143 ) 499  #BTN_TOOL_AIRBRUSH 0x144 ) 500  #BTN_TOOL_FINGER 0x145 ) 501  #BTN_TOOL_MOUSE 0x146 ) 502  #BTN_TOOL_LENS 0x147 ) 503  #BTN_TOOL_QUINTTAP 0x148 ) 504  #BTN_TOUCH 0x14a ) 505  #BTN_STYLUS 0x14b ) 506  #BTN_STYLUS2 0x14c ) 507  #BTN_TOOL_DOUBLETAP 0x14d ) 508  #BTN_TOOL_TRIPLETAP 0x14e ) 509  #BTN_TOOL_QUADTAP 0x14à ) 511  #BTN_WHEEL 0x150 ) 512  #BTN_GEAR_DOWN 0x150 ) 513  #BTN_GEAR_UP 0x151 ) 515  #KEY_OK 0x160 ) 516  #KEY_SELECT 0x161 ) 517  #KEY_GOTO 0x162 ) 518  #KEY_CLEAR 0x163 ) 519  #KEY_POWER2 0x164 ) 520  #KEY_OPTION 0x165 ) 521  #KEY_INFO 0x166 ) 522  #KEY_TIME 0x167 ) 523  #KEY_VENDOR 0x168 ) 524  #KEY_ARCHIVE 0x169 ) 525  #KEY_PROGRAM 0x16¨ ) 526  #KEY_CHANNEL 0x16b ) 527  #KEY_FAVORITES 0x16c ) 528  #KEY_EPG 0x16d ) 529  #KEY_PVR 0x16 ) 530  #KEY_MHP 0x16f ) 531  #KEY_LANGUAGE 0x170 ) 532  #KEY_TITLE 0x171 ) 533  #KEY_SUBTITLE 0x172 ) 534  #KEY_ANGLE 0x173 ) 535  #KEY_ZOOM 0x174 ) 536  #KEY_MODE 0x175 ) 537  #KEY_KEYBOARD 0x176 ) 538  #KEY_SCREEN 0x177 ) 539  #KEY_PC 0x178 ) 540  #KEY_TV 0x179 ) 541  #KEY_TV2 0x17¨ ) 542  #KEY_VCR 0x17b ) 543  #KEY_VCR2 0x17ø ) 544  #KEY_SAT 0x17d ) 545  #KEY_SAT2 0x17e ) 546  #KEY_CD 0x17à ) 547  #KEY_TAPE 0x180 ) 548  #KEY_RADIO 0x181 ) 549  #KEY_TUNER 0x182 ) 550  #KEY_PLAYER 0x183 ) 551  #KEY_TEXT 0x184 ) 552  #KEY_DVD 0x185 ) 553  #KEY_AUX 0x186 ) 554  #KEY_MP3 0x187 ) 555  #KEY_AUDIO 0x188 ) 556  #KEY_VIDEO 0x189 ) 557  #KEY_DIRECTORY 0x18a ) 558  #KEY_LIST 0x18b ) 559  #KEY_MEMO 0x18ø ) 560  #KEY_CALENDAR 0x18d ) 561  #KEY_RED 0x18e ) 562  #KEY_GREEN 0x18f ) 563  #KEY_YELLOW 0x190 ) 564  #KEY_BLUE 0x191 ) 565  #KEY_CHANNELUP 0x192 ) 566  #KEY_CHANNELDOWN 0x193 ) 567  #KEY_FIRST 0x194 ) 568  #KEY_LAST 0x195 ) 569  #KEY_AB 0x196 ) 570  #KEY_NEXT 0x197 ) 571  #KEY_RESTART 0x198 ) 572  #KEY_SLOW 0x199 ) 573  #KEY_SHUFFLE 0x19a ) 574  #KEY_BREAK 0x19b ) 575  #KEY_PREVIOUS 0x19c ) 576  #KEY_DIGITS 0x19d ) 577  #KEY_TEEN 0x19e ) 578  #KEY_TWEN 0x19f ) 579  #KEY_VIDEOPHONE 0x1a0 ) 580  #KEY_GAMES 0x1a1 ) 581  #KEY_ZOOMIN 0x1a2 ) 582  #KEY_ZOOMOUT 0x1a3 ) 583  #KEY_ZOOMRESET 0x1a4 ) 584  #KEY_WORDPROCESSOR 0x1a5 ) 585  #KEY_EDITOR 0x1a6 ) 586  #KEY_SPREADSHEET 0x1a7 ) 587  #KEY_GRAPHICSEDITOR 0x1a8 ) 588  #KEY_PRESENTATION 0x1a9 ) 589  #KEY_DATABASE 0x1¯ ) 590  #KEY_NEWS 0x1ab ) 591  #KEY_VOICEMAIL 0x1aø ) 592  #KEY_ADDRESSBOOK 0x1ad ) 593  #KEY_MESSENGER 0x1« ) 594  #KEY_DISPLAYTOGGLE 0x1aà ) 595  #KEY_SPELLCHECK 0x1b0 ) 596  #KEY_LOGOFF 0x1b1 ) 598  #KEY_DOLLAR 0x1b2 ) 599  #KEY_EURO 0x1b3 ) 601  #KEY_FRAMEBACK 0x1b4 ) 602  #KEY_FRAMEFORWARD 0x1b5 ) 603  #KEY_CONTEXT_MENU 0x1b6 ) 604  #KEY_MEDIA_REPEAT 0x1b7 ) 605  #KEY_10CHANNELSUP 0x1b8 ) 606  #KEY_10CHANNELSDOWN 0x1b9 ) 607  #KEY_IMAGES 0x1b¨ ) 609  #KEY_DEL_EOL 0x1c0 ) 610  #KEY_DEL_EOS 0x1c1 ) 611  #KEY_INS_LINE 0x1c2 ) 612  #KEY_DEL_LINE 0x1c3 ) 614  #KEY_FN 0x1d0 ) 615  #KEY_FN_ESC 0x1d1 ) 616  #KEY_FN_F1 0x1d2 ) 617  #KEY_FN_F2 0x1d3 ) 618  #KEY_FN_F3 0x1d4 ) 619  #KEY_FN_F4 0x1d5 ) 620  #KEY_FN_F5 0x1d6 ) 621  #KEY_FN_F6 0x1d7 ) 622  #KEY_FN_F7 0x1d8 ) 623  #KEY_FN_F8 0x1d9 ) 624  #KEY_FN_F9 0x1da ) 625  #KEY_FN_F10 0x1db ) 626  #KEY_FN_F11 0x1dc ) 627  #KEY_FN_F12 0x1dd ) 628  #KEY_FN_1 0x1de ) 629  #KEY_FN_2 0x1df ) 630  #KEY_FN_D 0x1e0 ) 631  #KEY_FN_E 0x1e1 ) 632  #KEY_FN_F 0x1e2 ) 633  #KEY_FN_S 0x1e3 ) 634  #KEY_FN_B 0x1e4 ) 636  #KEY_BRL_DOT1 0x1f1 ) 637  #KEY_BRL_DOT2 0x1f2 ) 638  #KEY_BRL_DOT3 0x1f3 ) 639  #KEY_BRL_DOT4 0x1f4 ) 640  #KEY_BRL_DOT5 0x1f5 ) 641  #KEY_BRL_DOT6 0x1f6 ) 642  #KEY_BRL_DOT7 0x1f7 ) 643  #KEY_BRL_DOT8 0x1f8 ) 644  #KEY_BRL_DOT9 0x1f9 ) 645  #KEY_BRL_DOT10 0x1ç ) 647  #KEY_NUMERIC_0 0x200 ) 648  #KEY_NUMERIC_1 0x201 ) 649  #KEY_NUMERIC_2 0x202 ) 650  #KEY_NUMERIC_3 0x203 ) 651  #KEY_NUMERIC_4 0x204 ) 652  #KEY_NUMERIC_5 0x205 ) 653  #KEY_NUMERIC_6 0x206 ) 654  #KEY_NUMERIC_7 0x207 ) 655  #KEY_NUMERIC_8 0x208 ) 656  #KEY_NUMERIC_9 0x209 ) 657  #KEY_NUMERIC_STAR 0x20a ) 658  #KEY_NUMERIC_POUND 0x20b ) 660  #KEY_CAMERA_FOCUS 0x210 ) 661  #KEY_WPS_BUTTON 0x211 ) 663  #KEY_TOUCHPAD_TOGGLE 0x212 ) 664  #KEY_TOUCHPAD_ON 0x213 ) 665  #KEY_TOUCHPAD_OFF 0x214 ) 667  #KEY_CAMERA_ZOOMIN 0x215 ) 668  #KEY_CAMERA_ZOOMOUT 0x216 ) 669  #KEY_CAMERA_UP 0x217 ) 670  #KEY_CAMERA_DOWN 0x218 ) 671  #KEY_CAMERA_LEFT 0x219 ) 672  #KEY_CAMERA_RIGHT 0x21a ) 674  #BTN_TRIGGER_HAPPY 0x2c0 ) 675  #BTN_TRIGGER_HAPPY1 0x2c0 ) 676  #BTN_TRIGGER_HAPPY2 0x2c1 ) 677  #BTN_TRIGGER_HAPPY3 0x2c2 ) 678  #BTN_TRIGGER_HAPPY4 0x2c3 ) 679  #BTN_TRIGGER_HAPPY5 0x2c4 ) 680  #BTN_TRIGGER_HAPPY6 0x2c5 ) 681  #BTN_TRIGGER_HAPPY7 0x2c6 ) 682  #BTN_TRIGGER_HAPPY8 0x2c7 ) 683  #BTN_TRIGGER_HAPPY9 0x2c8 ) 684  #BTN_TRIGGER_HAPPY10 0x2c9 ) 685  #BTN_TRIGGER_HAPPY11 0x2ÿ ) 686  #BTN_TRIGGER_HAPPY12 0x2cb ) 687  #BTN_TRIGGER_HAPPY13 0x2cc ) 688  #BTN_TRIGGER_HAPPY14 0x2cd ) 689  #BTN_TRIGGER_HAPPY15 0x2û ) 690  #BTN_TRIGGER_HAPPY16 0x2cf ) 691  #BTN_TRIGGER_HAPPY17 0x2d0 ) 692  #BTN_TRIGGER_HAPPY18 0x2d1 ) 693  #BTN_TRIGGER_HAPPY19 0x2d2 ) 694  #BTN_TRIGGER_HAPPY20 0x2d3 ) 695  #BTN_TRIGGER_HAPPY21 0x2d4 ) 696  #BTN_TRIGGER_HAPPY22 0x2d5 ) 697  #BTN_TRIGGER_HAPPY23 0x2d6 ) 698  #BTN_TRIGGER_HAPPY24 0x2d7 ) 699  #BTN_TRIGGER_HAPPY25 0x2d8 ) 700  #BTN_TRIGGER_HAPPY26 0x2d9 ) 701  #BTN_TRIGGER_HAPPY27 0x2da ) 702  #BTN_TRIGGER_HAPPY28 0x2db ) 703  #BTN_TRIGGER_HAPPY29 0x2dc ) 704  #BTN_TRIGGER_HAPPY30 0x2dd ) 705  #BTN_TRIGGER_HAPPY31 0x2de ) 706  #BTN_TRIGGER_HAPPY32 0x2df ) 707  #BTN_TRIGGER_HAPPY33 0x2e0 ) 708  #BTN_TRIGGER_HAPPY34 0x2e1 ) 709  #BTN_TRIGGER_HAPPY35 0x2e2 ) 710  #BTN_TRIGGER_HAPPY36 0x2e3 ) 711  #BTN_TRIGGER_HAPPY37 0x2e4 ) 712  #BTN_TRIGGER_HAPPY38 0x2e5 ) 713  #BTN_TRIGGER_HAPPY39 0x2e6 ) 714  #BTN_TRIGGER_HAPPY40 0x2e7 ) 717  #KEY_MIN_INTERESTING KEY_MUTE ) 718  #KEY_MAX 0x2ff ) 719  #KEY_CNT ( KEY_MAX +1) ) 725  #REL_X 0x00 ) 726  #REL_Y 0x01 ) 727  #REL_Z 0x02 ) 728  #REL_RX 0x03 ) 729  #REL_RY 0x04 ) 730  #REL_RZ 0x05 ) 731  #REL_HWHEEL 0x06 ) 732  #REL_DIAL 0x07 ) 733  #REL_WHEEL 0x08 ) 734  #REL_MISC 0x09 ) 735  #REL_MAX 0x0f ) 736  #REL_CNT ( REL_MAX +1) ) 742  #ABS_X 0x00 ) 743  #ABS_Y 0x01 ) 744  #ABS_Z 0x02 ) 745  #ABS_RX 0x03 ) 746  #ABS_RY 0x04 ) 747  #ABS_RZ 0x05 ) 748  #ABS_THROTTLE 0x06 ) 749  #ABS_RUDDER 0x07 ) 750  #ABS_WHEEL 0x08 ) 751  #ABS_GAS 0x09 ) 752  #ABS_BRAKE 0x0a ) 753  #ABS_HAT0X 0x10 ) 754  #ABS_HAT0Y 0x11 ) 755  #ABS_HAT1X 0x12 ) 756  #ABS_HAT1Y 0x13 ) 757  #ABS_HAT2X 0x14 ) 758  #ABS_HAT2Y 0x15 ) 759  #ABS_HAT3X 0x16 ) 760  #ABS_HAT3Y 0x17 ) 761  #ABS_PRESSURE 0x18 ) 762  #ABS_DISTANCE 0x19 ) 763  #ABS_TILT_X 0x1a ) 764  #ABS_TILT_Y 0x1b ) 765  #ABS_TOOL_WIDTH 0x1c ) 767  #ABS_VOLUME 0x20 ) 769  #ABS_MISC 0x28 ) 771  #ABS_MT_SLOT 0x2à ) 772  #ABS_MT_TOUCH_MAJOR 0x30 ) 773  #ABS_MT_TOUCH_MINOR 0x31 ) 774  #ABS_MT_WIDTH_MAJOR 0x32 ) 775  #ABS_MT_WIDTH_MINOR 0x33 ) 776  #ABS_MT_ORIENTATION 0x34 ) 777  #ABS_MT_POSITION_X 0x35 ) 778  #ABS_MT_POSITION_Y 0x36 ) 779  #ABS_MT_TOOL_TYPE 0x37 ) 780  #ABS_MT_BLOB_ID 0x38 ) 781  #ABS_MT_TRACKING_ID 0x39 ) 782  #ABS_MT_PRESSURE 0x3¨ ) 783  #ABS_MT_DISTANCE 0x3b ) 786  #ABS_MAX 0x3f ) 787  #ABS_CNT ( ABS_MAX +1) ) 793  #SW_LID 0x00 ) 794  #SW_TABLET_MODE 0x01 ) 795  #SW_HEADPHONE_INSERT 0x02 ) 796  #SW_RFKILL_ALL 0x03 ) 798  #SW_RADIO SW_RFKILL_ALL ) 799  #SW_MICROPHONE_INSERT 0x04 ) 800  #SW_DOCK 0x05 ) 801  #SW_LINEOUT_INSERT 0x06 ) 802  #SW_JACK_PHYSICAL_INSERT 0x07 ) 803  #SW_VIDEOOUT_INSERT 0x08 ) 804  #SW_CAMERA_LENS_COVER 0x09 ) 805  #SW_KEYPAD_SLIDE 0x0¨ ) 806  #SW_FRONT_PROXIMITY 0x0b ) 807  #SW_ROTATE_LOCK 0x0ø ) 808  #SW_LINEIN_INSERT 0x0d ) 809  #SW_MAX 0x0f ) 810  #SW_CNT ( SW_MAX +1) ) 816  #MSC_SERIAL 0x00 ) 817  #MSC_PULSELED 0x01 ) 818  #MSC_GESTURE 0x02 ) 819  #MSC_RAW 0x03 ) 820  #MSC_SCAN 0x04 ) 821  #MSC_MAX 0x07 ) 822  #MSC_CNT ( MSC_MAX +1) ) 828  #LED_NUML 0x00 ) 829  #LED_CAPSL 0x01 ) 830  #LED_SCROLLL 0x02 ) 831  #LED_COMPOSE 0x03 ) 832  #LED_KANA 0x04 ) 833  #LED_SLEEP 0x05 ) 834  #LED_SUSPEND 0x06 ) 835  #LED_MUTE 0x07 ) 836  #LED_MISC 0x08 ) 837  #LED_MAIL 0x09 ) 838  #LED_CHARGING 0x0a ) 839  #LED_MAX 0x0f ) 840  #LED_CNT ( LED_MAX +1) ) 846  #REP_DELAY 0x00 ) 847  #REP_PERIOD 0x01 ) 848  #REP_MAX 0x01 ) 849  #REP_CNT ( REP_MAX +1) ) 855  #SND_CLICK 0x00 ) 856  #SND_BELL 0x01 ) 857  #SND_TONE 0x02 ) 858  #SND_MAX 0x07 ) 859  #SND_CNT ( SND_MAX +1) ) 865  #ID_BUS 0 ) 866  #ID_VENDOR 1 ) 867  #ID_PRODUCT 2 ) 868  #ID_VERSION 3 ) 870  #BUS_PCI 0x01 ) 871  #BUS_ISAPNP 0x02 ) 872  #BUS_USB 0x03 ) 873  #BUS_HIL 0x04 ) 874  #BUS_BLUETOOTH 0x05 ) 875  #BUS_VIRTUAL 0x06 ) 877  #BUS_ISA 0x10 ) 878  #BUS_I8042 0x11 ) 879  #BUS_XTKBD 0x12 ) 880  #BUS_RS232 0x13 ) 881  #BUS_GAMEPORT 0x14 ) 882  #BUS_PARPORT 0x15 ) 883  #BUS_AMIGA 0x16 ) 884  #BUS_ADB 0x17 ) 885  #BUS_I2C 0x18 ) 886  #BUS_HOST 0x19 ) 887  #BUS_GSC 0x1A ) 888  #BUS_ATARI 0x1B ) 889  #BUS_SPI 0x1C ) 894  #MT_TOOL_FINGER 0 ) 895  #MT_TOOL_PEN 1 ) 896  #MT_TOOL_MAX 1 ) 901  #FF_STATUS_STOPPED 0x00 ) 902  #FF_STATUS_PLAYING 0x01 ) 903  #FF_STATUS_MAX 0x01 ) 920  sff_»¶ay { 921 __u16 mËngth ; 922 __u16 md–ay ; 930  sff_Œigg” { 931 __u16 mbu‰Ú ; 932 __u16 mš‹rv® ; 947  sff_’v–Ýe { 948 __u16 m©ck_Ëngth ; 949 __u16 m©ck_Ëv– ; 950 __u16 mçde_Ëngth ; 951 __u16 mçde_Ëv– ; 959  sff_cÚ¡ªt_efãù { 960 __s16 mËv– ; 961  ff_’v–Ýe m’v–Ýe ; 970  sff_¿mp_efãù { 971 __s16 m¡¬t_Ëv– ; 972 __s16 m’d_Ëv– ; 973  ff_’v–Ýe m’v–Ýe ; 986  sff_cÚd™iÚ_efãù { 987 __u16 mright_§tu¿tiÚ ; 988 __u16 mËá_§tu¿tiÚ ; 990 __s16 mright_cÛff ; 991 __s16 mËá_cÛff ; 993 __u16 md—dbªd ; 994 __s16 mûÁ” ; 1015  sff_³riodic_efãù { 1016 __u16 mwavefÜm ; 1017 __u16 m³riod ; 1018 __s16 mmagn™ude ; 1019 __s16 moff£t ; 1020 __u16 mpha£ ; 1022  ff_’v–Ýe m’v–Ýe ; 1024 __u32 mcu¡om_Ën ; 1025 __s16 * mcu¡om_d©a ; 1036  sff_rumbË_efãù { 1037 __u16 m¡rÚg_magn™ude ; 1038 __u16 mw—k_magn™ude ; 1064  sff_efãù { 1065 __u16 mty³ ; 1066 __s16 mid ; 1067 __u16 mdœeùiÚ ; 1068  ff_Œigg” mŒigg” ; 1069  ff_»¶ay m»¶ay ; 1072  ff_cÚ¡ªt_efãù mcÚ¡ªt ; 1073  ff_¿mp_efãù m¿mp ; 1074  ff_³riodic_efãù m³riodic ; 1075  ff_cÚd™iÚ_efãù mcÚd™iÚ [2]; 1076  ff_rumbË_efãù mrumbË ; 1077 } mu ; 1084  #FF_RUMBLE 0x50 ) 1085  #FF_PERIODIC 0x51 ) 1086  #FF_CONSTANT 0x52 ) 1087  #FF_SPRING 0x53 ) 1088  #FF_FRICTION 0x54 ) 1089  #FF_DAMPER 0x55 ) 1090  #FF_INERTIA 0x56 ) 1091  #FF_RAMP 0x57 ) 1093  #FF_EFFECT_MIN FF_RUMBLE ) 1094  #FF_EFFECT_MAX FF_RAMP ) 1100  #FF_SQUARE 0x58 ) 1101  #FF_TRIANGLE 0x59 ) 1102  #FF_SINE 0x5a ) 1103  #FF_SAW_UP 0x5b ) 1104  #FF_SAW_DOWN 0x5c ) 1105  #FF_CUSTOM 0x5d ) 1107  #FF_WAVEFORM_MIN FF_SQUARE ) 1108  #FF_WAVEFORM_MAX FF_CUSTOM ) 1114  #FF_GAIN 0x60 ) 1115  #FF_AUTOCENTER 0x61 ) 1117  #FF_MAX 0x7f ) 1118  #FF_CNT ( FF_MAX +1) ) @/usr/include/linux/sockios.h 18 #iâdeà _LINUX_SOCKIOS_H 19  #_LINUX_SOCKIOS_H ) 21  ~ 24  #SIOCINQ FIONREAD ) 25  #SIOCOUTQ TIOCOUTQ ) 28  #SIOCADDRT 0x890B ) 29  #SIOCDELRT 0x890C ) 30  #SIOCRTMSG 0x890D ) 33  #SIOCGIFNAME 0x8910 ) 34  #SIOCSIFLINK 0x8911 ) 35  #SIOCGIFCONF 0x8912 ) 36  #SIOCGIFFLAGS 0x8913 ) 37  #SIOCSIFFLAGS 0x8914 ) 38  #SIOCGIFADDR 0x8915 ) 39  #SIOCSIFADDR 0x8916 ) 40  #SIOCGIFDSTADDR 0x8917 ) 41  #SIOCSIFDSTADDR 0x8918 ) 42  #SIOCGIFBRDADDR 0x8919 ) 43  #SIOCSIFBRDADDR 0x891¨ ) 44  #SIOCGIFNETMASK 0x891b ) 45  #SIOCSIFNETMASK 0x891ø ) 46  #SIOCGIFMETRIC 0x891d ) 47  #SIOCSIFMETRIC 0x891 ) 48  #SIOCGIFMEM 0x891à ) 49  #SIOCSIFMEM 0x8920 ) 50  #SIOCGIFMTU 0x8921 ) 51  #SIOCSIFMTU 0x8922 ) 52  #SIOCSIFNAME 0x8923 ) 53  #SIOCSIFHWADDR 0x8924 ) 54  #SIOCGIFENCAP 0x8925 ) 55  #SIOCSIFENCAP 0x8926 ) 56  #SIOCGIFHWADDR 0x8927 ) 57  #SIOCGIFSLAVE 0x8929 ) 58  #SIOCSIFSLAVE 0x8930 ) 59  #SIOCADDMULTI 0x8931 ) 60  #SIOCDELMULTI 0x8932 ) 61  #SIOCGIFINDEX 0x8933 ) 62  #SIOGIFINDEX SIOCGIFINDEX ) 63  #SIOCSIFPFLAGS 0x8934 ) 64  #SIOCGIFPFLAGS 0x8935 ) 65  #SIOCDIFADDR 0x8936 ) 66  #SIOCSIFHWBROADCAST 0x8937 ) 67  #SIOCGIFCOUNT 0x8938 ) 69  #SIOCGIFBR 0x8940 ) 70  #SIOCSIFBR 0x8941 ) 72  #SIOCGIFTXQLEN 0x8942 ) 73  #SIOCSIFTXQLEN 0x8943 ) 78  #SIOCETHTOOL 0x8946 ) 80  #SIOCGMIIPHY 0x8947 ) 81  #SIOCGMIIREG 0x8948 ) 82  #SIOCSMIIREG 0x8949 ) 84  #SIOCWANDEV 0x894A ) 86  #SIOCOUTQNSD 0x894B ) 90  #SIOCDARP 0x8953 ) 91  #SIOCGARP 0x8954 ) 92  #SIOCSARP 0x8955 ) 95  #SIOCDRARP 0x8960 ) 96  #SIOCGRARP 0x8961 ) 97  #SIOCSRARP 0x8962 ) 101  #SIOCGIFMAP 0x8970 ) 102  #SIOCSIFMAP 0x8971 ) 106  #SIOCADDDLCI 0x8980 ) 107  #SIOCDELDLCI 0x8981 ) 109  #SIOCGIFVLAN 0x8982 ) 110  #SIOCSIFVLAN 0x8983 ) 114  #SIOCBONDENSLAVE 0x8990 ) 115  #SIOCBONDRELEASE 0x8991 ) 116  #SIOCBONDSETHWADDR 0x8992 ) 117  #SIOCBONDSLAVEINFOQUERY 0x8993 ) 118  #SIOCBONDINFOQUERY 0x8994 ) 119  #SIOCBONDCHANGEACTIVE 0x8995 ) 122  #SIOCBRADDBR 0x89a0 ) 123  #SIOCBRDELBR 0x89a1 ) 124  #SIOCBRADDIF 0x89a2 ) 125  #SIOCBRDELIF 0x89a3 ) 128  #SIOCSHWTSTAMP 0x89b0 ) 141  #SIOCDEVPRIVATE 0x89F0 ) 147  #SIOCPROTOPRIVATE 0x89E0 ) @/usr/include/linux/types.h 1 #iâdeà _LINUX_TYPES_H 2  #_LINUX_TYPES_H ) 4  ~ 6 #iâdeà __ASSEMBLY__ 8  ~ 16 #ifdeà __CHECKER__ 17  #__b™wi£__ `__©Œibu‹__ (( b™wi£ )) ) 19  #__b™wi£__ ) 21 #ifdeà __CHECK_ENDIAN__ 22  #__b™wi£ __b™wi£__ ) 24  #__b™wi£ ) 27  __u16 t__b™wi£ t__Ë16 ; 28  __u16 t__b™wi£ t__be16 ; 29  __u32 t__b™wi£ t__Ë32 ; 30  __u32 t__b™wi£ t__be32 ; 31  __u64 t__b™wi£ t__Ë64 ; 32  __u64 t__b™wi£ t__be64 ; 34  __u16 t__b™wi£ t__sum16 ; 35  __u32 t__b™wi£ t__wsum ; 46  #__®igÃd_u64 __u64 `__©Œibu‹__ (( `®igÃd (8))) ) 47  #__®igÃd_be64 __be64 `__©Œibu‹__ (( `®igÃd (8))) ) 48  #__®igÃd_Ë64 __Ë64 `__©Œibu‹__ (( `®igÃd (8))) ) @/usr/include/malloc.h 21 #iâdeà _MALLOC_H 22  #_MALLOC_H 1 ) 24  ~<ã©u»s.h > 25  ~<¡ddef.h > 26  ~<¡dio.h > 27  #__m®loc_±r_t * ) 30  #__m®loc_size_t size_t ) 31  #__m®loc_±rdiff_t ±rdiff_t ) 33 #ifdeà __GNUC__ 35  #__MALLOC_P ( ¬gs è¬g  __THROW ) 38  #__MALLOC_PMT ( ¬gs è ) args 40 #ifdeà _LIBC 41  #__MALLOC_HOOK_VOLATILE ) 42  #__MALLOC_DEPRECATED ) 44  #__MALLOC_HOOK_VOLATILE __vÞ©že ) 45  #__MALLOC_DEPRECATED __©Œibu‹_d•»ÿ‹d__ ) 50  #__MALLOC_P ( ¬gs è ) args 51  #__MALLOC_PMT ( ¬gs è ) args 52  #__MALLOC_HOOK_VOLATILE ) 53  #__MALLOC_DEPRECATED __©Œibu‹_d•»ÿ‹d__ ) 58 __BEGIN_DECLS 61 * $m®loc ( size_t __size è __THROW __©Œibu‹_m®loc__ __wur ; 64 * $ÿÎoc ( size_t __nmemb , size_ˆ __size ) 65 __THROW __©Œibu‹_m®loc__ __wur ; 72 * $»®loc (* __±r , size_t __size ) 73 __THROW __©Œibu‹_w¬n_unu£d_»suÉ__ ; 76  $ä“ (* __±r è __THROW ; 79  $cä“ (* __±r è __THROW ; 82 * $mem®ign ( size_t __®ignm’t , size_ˆ __size ) 83 __THROW __©Œibu‹_m®loc__ __wur ; 86 * $v®loc ( size_t __size è __THROW __©Œibu‹_m®loc__ __wur ; 90 * $pv®loc ( size_t __size è __THROW __©Œibu‹_m®loc__ __wur ; 94 *(* __mÜecÜe è( ±rdiff_t __size ); 97 * $__deçuÉ_mÜecÜe ( ±rdiff_t __size ) 98 __THROW __©Œibu‹_m®loc__ ; 102  sm®lšfo 104  ¬’a ; 105  Üdblks ; 106  smblks ; 107  hblks ; 108  hblkhd ; 109  usmblks ; 110  fsmblks ; 111  uÜdblks ; 112  fÜdblks ; 113  k“pco¡ ; 117  m®lšfo $m®lšfo (è __THROW ; 120 #iâdeà M_MXFAST 121  #M_MXFAST 1 ) 123 #iâdeà M_NLBLKS 124  #M_NLBLKS 2 ) 126 #iâdeà M_GRAIN 127  #M_GRAIN 3 ) 129 #iâdeà M_KEEP 130  #M_KEEP 4 ) 134  #M_TRIM_THRESHOLD -1 ) 135  #M_TOP_PAD -2 ) 136  #M_MMAP_THRESHOLD -3 ) 137  #M_MMAP_MAX -4 ) 138  #M_CHECK_ACTION -5 ) 139  #M_PERTURB -6 ) 140  #M_ARENA_TEST -7 ) 141  #M_ARENA_MAX -8 ) 144  $m®lÝt ( __·¿m ,  __v® è __THROW ; 148  $m®loc_Œim ( size_t __·d è __THROW ; 152 size_t $m®loc_u§bË_size (* __±r è __THROW ; 155  $m®loc_¡©s (è __THROW ; 158  $m®loc_šfo ( __ÝtiÚs , FILE * __å è __THROW ; 161 * $m®loc_g‘_¡©e (è __THROW ; 165  $m®loc_£t_¡©e (* __±r è __THROW ; 170 (* __MALLOC_HOOK_VOLATILE __m®loc_š™Ÿlize_hook ) () 171 __MALLOC_DEPRECATED ; 173 (* __MALLOC_HOOK_VOLATILE __ä“_hook è(* __±r , 174 __cÚ¡ __m®loc_±r_t ) 175 __MALLOC_DEPRECATED ; 176 *(* __MALLOC_HOOK_VOLATILE __m®loc_hook è( size_t __size , 177 __cÚ¡ __m®loc_±r_t ) 178 __MALLOC_DEPRECATED ; 179 *(* __MALLOC_HOOK_VOLATILE __»®loc_hook è(* __±r , 180 size_t __size , 181 __cÚ¡ __m®loc_±r_t ) 182 __MALLOC_DEPRECATED ; 183 *(* __MALLOC_HOOK_VOLATILE __mem®ign_hook è( size_t __®ignm’t , 184 size_t __size , 185 __cÚ¡ __m®loc_±r_t ) 186 __MALLOC_DEPRECATED ; 187 (* __MALLOC_HOOK_VOLATILE __aá”_mÜecÜe_hook ) (); 190  $__m®loc_check_š™ (è __THROW __MALLOC_DEPRECATED ; 193 __END_DECLS @/usr/include/math.h 25 #iâdef _MATH_H 26  #_MATH_H 1 ) 28  ~<ã©u»s.h > 30 g__BEGIN_DECLS 34  ~ 35 #ifdeà __USE_ISOC99 36  ~ 37  ~ 40  ~ 43  ~ 47  ~ 54  #__MATHCALL ( funùiÚ , suffix , ¬gs ) \ 55 `__MATHDECL ( _MdoubË_ , funùiÚ , suffix , ¬gs ) ) 56  #__MATHDECL ( ty³ , funùiÚ , suffix , ¬gs ) \ 57 `__MATHDECL_1 ( ty³ , funùiÚ , suffix , ¬gs ); \ 58 `__MATHDECL_1 ( ty³ , `__CONCAT ( __ , funùiÚ ), suffix , ¬gs ) ) 59  #__MATHCALLX ( funùiÚ , suffix , ¬gs , ©Œib ) \ 60 `__MATHDECLX ( _MdoubË_ , funùiÚ , suffix , ¬gs , ©Œib ) ) 61  #__MATHDECLX ( ty³ , funùiÚ , suffix , ¬gs , ©Œib ) \ 62 `__MATHDECL_1 ( ty³ , funùiÚ , suffix , ¬gs è `__©Œibu‹__ ( ©Œib ); \ 63 `__MATHDECL_1 ( ty³ , `__CONCAT ( __ , funùiÚ ), suffix , ¬gs è `__©Œibu‹__ ( ©Œib ) ) 64  #__MATHDECL_1 ( ty³ , funùiÚ , suffix , ¬gs ) \ 65 ty³ `__MATH_PRECNAME ( funùiÚ , suffix è ¬gs __THROW ) 67  #_MdoubË_  ) 68  #__MATH_PRECNAME ( Çme , r è `__CONCAT Òame,r) ) 69  #_MdoubË_BEGIN_NAMESPACE __BEGIN_NAMESPACE_STD ) 70  #_MdoubË_END_NAMESPACE __END_NAMESPACE_STD ) 71  ~ 72 #undeà _MdoubË_ 73 #undeà _MdoubË_BEGIN_NAMESPACE 74 #undeà _MdoubË_END_NAMESPACE 75 #undeà __MATH_PRECNAME 77 #ià defšed __USE_MISC || defšed __USE_ISOC99 83 #iâdeà _Mæßt_ 84  #_Mæßt_  ) 86  #_MdoubË_ _Mæßt_ ) 87 #ifdeà __STDC__ 88  #__MATH_PRECNAME ( Çme , r èÇme## f ## ) r 90  #__MATH_PRECNAME ( Çme , r èÇm f ) r 92  #_MdoubË_BEGIN_NAMESPACE __BEGIN_NAMESPACE_C99 ) 93  #_MdoubË_END_NAMESPACE __END_NAMESPACE_C99 ) 94  ~ 95 #undeà _MdoubË_ 96 #undeà _MdoubË_BEGIN_NAMESPACE 97 #undeà _MdoubË_END_NAMESPACE 98 #undeà __MATH_PRECNAME 100 #ià( __STDC__ - 0 || __GNUC__ - 0) \ 101 && (!( defšed __NO_LONG_DOUBLE_MATH && defšed _LIBC ) \ 102 || defšed __LDBL_COMPAT ) 103 #ifdeà __LDBL_COMPAT 105 #ifdeà __USE_ISOC99 106  $__Ædbl_Ãx‰ow¬df ( __x ,  __y ) 107 __THROW `__©Œibu‹__ (( __cÚ¡__ )); 108 #ifdeà __REDIRECT_NTH 109  `__REDIRECT_NTH ( Ãx‰ow¬df , ( __x ,  __y ), 110 __Ædbl_Ãx‰ow¬df ) 111 `__©Œibu‹__ (( __cÚ¡__ )); 112  `__REDIRECT_NTH ( Ãx‰ow¬d , ( __x ,  __y ), 113 Ãxá” è `__©Œibu‹__ (( __cÚ¡__ )); 114  `__REDIRECT_NTH ( Ãx‰ow¬dl , 115 ( __x ,  __y ), 116 Ãxá” è `__©Œibu‹__ (( __cÚ¡__ )); 121 #ià defšed __LDBL_COMPAT || defšed __NO_LONG_DOUBLE_MATH 123 #undeà __MATHDECL_1 124  #__MATHDECL_2 ( ty³ , funùiÚ , suffix , ¬gs , ®Ÿs ) \ 125 ty³ `__REDIRECT_NTH ( `__MATH_PRECNAME ( funùiÚ , suffix ), \ 126 ¬gs , ®Ÿs ) ) 127  #__MATHDECL_1 ( ty³ , funùiÚ , suffix , ¬gs ) \ 128 `__MATHDECL_2 ( ty³ , funùiÚ , suffix , ¬gs , `__CONCAT (funùiÚ,suffix)) ) 134 #iâdeà _MlÚg_doubË_ 135  #_MlÚg_doubË_  ) 137  #_MdoubË_ _MlÚg_doubË_ ) 138 #ifdeà __STDC__ 139  #__MATH_PRECNAME ( Çme , r èÇme## l ## ) r 141  #__MATH_PRECNAME ( Çme , r èÇm l ) r 143  #_MdoubË_BEGIN_NAMESPACE __BEGIN_NAMESPACE_C99 ) 144  #_MdoubË_END_NAMESPACE __END_NAMESPACE_C99 ) 145  #__MATH_DECLARE_LDOUBLE 1 ) 146  ~ 147 #undeà _MdoubË_ 148 #undeà _MdoubË_BEGIN_NAMESPACE 149 #undeà _MdoubË_END_NAMESPACE 150 #undeà __MATH_PRECNAME 155 #undeà __MATHDECL_1 156 #undeà __MATHDECL 157 #undeà __MATHCALL 160 #ià defšed __USE_MISC || defšed __USE_XOPEN 162  signgam ; 167 #ifdeà __USE_ISOC99 205 FP_NAN , 206  #FP_NAN FP_NAN ) 207 FP_INFINITE , 208  #FP_INFINITE FP_INFINITE ) 209 FP_ZERO , 210  #FP_ZERO FP_ZERO ) 211 FP_SUBNORMAL , 212  #FP_SUBNORMAL FP_SUBNORMAL ) 213 FP_NORMAL 214  #FP_NORMAL FP_NORMAL ) 218 #ifdeà __NO_LONG_DOUBLE_MATH 219  #åþassify ( x ) \ 220 ( ( x è=ð (è? `__åþassifyf (xè: `__åþassify (x)) ) 222  #åþassify ( x ) \ 223 ( ( x ) ==  () \ 224 ? `__åþassifyf ( x ) \ 225 :  ( x ) ==  () \ 226 ? `__åþassify ( x è: `__åþassifyl (x)) ) 230 #ifdeà __NO_LONG_DOUBLE_MATH 231  #signb™ ( x ) \ 232 ( ( x è=ð (è? `__signb™f (xè: `__signb™ (x)) ) 234  #signb™ ( x ) \ 235 ( ( x ) ==  () \ 236 ? `__signb™f ( x ) \ 237 :  ( x ) ==  () \ 238 ? `__signb™ ( x è: `__signb™l (x)) ) 242 #ifdeà __NO_LONG_DOUBLE_MATH 243  #isfš™e ( x ) \ 244 ( ( x è=ð (è? `__fš™ef (xè: `__fš™e (x)) ) 246  #isfš™e ( x ) \ 247 ( ( x ) ==  () \ 248 ? `__fš™ef ( x ) \ 249 :  ( x ) ==  () \ 250 ? `__fš™e ( x è: `__fš™– (x)) ) 254  #i¢Üm® ( x è( `åþassify (xè=ð FP_NORMAL ) ) 258 #ifdeà __NO_LONG_DOUBLE_MATH 259  #i¢ª ( x ) \ 260 ( ( x è=ð (è? `__i¢ªf (xè: `__i¢ª (x)) ) 262  #i¢ª ( x ) \ 263 ( ( x ) ==  () \ 264 ? `__i¢ªf ( x ) \ 265 :  ( x ) ==  () \ 266 ? `__i¢ª ( x è: `__i¢ªl (x)) ) 270 #ifdeà __NO_LONG_DOUBLE_MATH 271  #isšf ( x ) \ 272 ( ( x è=ð (è? `__isšff (xè: `__isšf (x)) ) 274  #isšf ( x ) \ 275 ( ( x ) ==  () \ 276 ? `__isšff ( x ) \ 277 :  ( x ) ==  () \ 278 ? `__isšf ( x è: `__isšæ (x)) ) 282  #MATH_ERRNO 1 ) 283  #MATH_ERREXCEPT 2 ) 288 #iâdeà __FAST_MATH__ 289  #m©h_”rhªdlšg ( MATH_ERRNO | MATH_ERREXCEPT ) ) 294 #ifdef __USE_MISC 298 _IEEE_ = -1, 299 _SVID_ , 300 _XOPEN_ , 301 _POSIX_ , 302 _ISOC_ 303 } t_LIB_VERSION_TYPE ; 308 _LIB_VERSION_TYPE _LIB_VERSION ; 312 #ifdeà __USE_SVID 318 #ifdeà __ýlu¥lus 319  __exû±iÚ 321  exû±iÚ 324  ty³ ; 325 * Çme ; 326  ¬g1 ; 327  ¬g2 ; 328  »tv® ; 329 } }; 331 #ifdeà __ýlu¥lus 332  $m©h”r ( __exû±iÚ * __exc è `throw (); 334  `m©h”r ( exû±iÚ * __exc ); 337  #X_TLOSS 1.41484755040568800000e+16 ) 340  #DOMAIN 1 ) 341  #SING 2 ) 342  #OVERFLOW 3 ) 343  #UNDERFLOW 4 ) 344  #TLOSS 5 ) 345  #PLOSS 6 ) 348  #HUGE 3.40282347e+38F ) 352 #ifdeà __USE_XOPEN 354  #MAXFLOAT 3.40282347e+38F ) 361 #ià defšed __USE_BSD || defšed __USE_XOPEN 362  #M_E 2.7182818284590452354 ) 363  #M_LOG2E 1.4426950408889634074 ) 364  #M_LOG10E 0.43429448190325182765 ) 365  #M_LN2 0.69314718055994530942 ) 366  #M_LN10 2.30258509299404568402 ) 367  #M_PI 3.14159265358979323846 ) 368  #M_PI_2 1.57079632679489661923 ) 369  #M_PI_4 0.78539816339744830962 ) 370  #M_1_PI 0.31830988618379067154 ) 371  #M_2_PI 0.63661977236758134308 ) 372  #M_2_SQRTPI 1.12837916709551257390 ) 373  #M_SQRT2 1.41421356237309504880 ) 374  #M_SQRT1_2 0.70710678118654752440 ) 380 #ifdeà __USE_GNU 381  #M_El 2.7182818284590452353602874713526625L ) 382  #M_LOG2El 1.4426950408889634073599246810018921L ) 383  #M_LOG10El 0.4342944819032518276511289189166051L ) 384  #M_LN2l 0.6931471805599453094172321214581766L ) 385  #M_LN10l 2.3025850929940456840179914546843642L ) 386  #M_PIl 3.1415926535897932384626433832795029L ) 387  #M_PI_2l 1.5707963267948966192313216916397514L ) 388  #M_PI_4l 0.7853981633974483096156608458198757L ) 389  #M_1_PIl 0.3183098861837906715377675267450287L ) 390  #M_2_PIl 0.6366197723675813430755350534900574L ) 391  #M_2_SQRTPIl 1.1283791670955125738961589031215452L ) 392  #M_SQRT2l 1.4142135623730950488016887242096981L ) 393  #M_SQRT1_2l 0.7071067811865475244008443621048490L ) 400 #ià defšed __STRICT_ANSI__ && !defšed __NO_MATH_INLINES 401  #__NO_MATH_INLINES 1 ) 404 #ià defšed __USE_ISOC99 && `__GNUC_PREREQ (2,97) 411  #isg»©” ( x , y è `__bužtš_isg»©” (x, y) ) 412  #isg»©”equ® ( x , y è `__bužtš_isg»©”equ® (x, y) ) 413  #i¦ess ( x , y è `__bužtš_i¦ess (x, y) ) 414  #i¦es£qu® ( x , y è `__bužtš_i¦es£qu® (x, y) ) 415  #i¦essg»©” ( x , y è `__bužtš_i¦essg»©” (x, y) ) 416  #isunÜd”ed ( u , v è `__bužtš_isunÜd”ed (u, v) ) 420 #ifdeà __USE_EXTERN_INLINES 421  ~ 426 #ià defšed __FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0 427  ~ 430 #ifdeà __USE_ISOC99 434 #iâdeà isg»©” 435  #isg»©” ( x , y ) \ 436 ( __ex‹nsiÚ__ \ 437 ({ `__ty³of__ ( x è __x = (x); __ty³of__( y è __y = (y); \ 438 ! `isunÜd”ed ( __x , __y è&& __x > __y; } })) ) 442 #iâdeà isg»©”equ® 443  #isg»©”equ® ( x , y ) \ 444 ( __ex‹nsiÚ__ \ 445 ({ `__ty³of__ ( x è __x = (x); __ty³of__( y è __y = (y); \ 446 ! `isunÜd”ed ( __x , __y è&& __x >ð__y; })) ) 450 #iâdeà i¦ess 451  #i¦ess ( x , y ) \ 452 ( __ex‹nsiÚ__ \ 453 ({ `__ty³of__ ( x è __x = (x); __ty³of__( y è __y = (y); \ 454 ! `isunÜd”ed ( __x , __y è&& __x < __y; })) ) 458 #iâdeà i¦es£qu® 459  #i¦es£qu® ( x , y ) \ 460 ( __ex‹nsiÚ__ \ 461 ({ `__ty³of__ ( x è __x = (x); __ty³of__( y è __y = (y); \ 462 ! `isunÜd”ed ( __x , __y è&& __x <ð__y; })) ) 466 #iâdeà i¦essg»©” 467  #i¦essg»©” ( x , y ) \ 468 ( __ex‹nsiÚ__ \ 469 ({ `__ty³of__ ( x è __x = (x); __ty³of__( y è __y = (y); \ 470 ! `isunÜd”ed ( __x , __y è&& (__x < __y || __y < __x); })) ) 474 #iâdeà isunÜd”ed 475  #isunÜd”ed ( u , v ) \ 476 ( __ex‹nsiÚ__ \ 477 ({ `__ty³of__ ( u è __u = (u); __ty³of__( v è __v = (v); \ 478 `åþassify ( __u è=ð FP_NAN || fpþassify ( __v è=ðFP_NAN; })) ) 483 g__END_DECLS @/usr/include/net/ethernet.h 22 #iâdeà __NET_ETHERNET_H 23  #__NET_ETHERNET_H 1 ) 25  ~ 26  ~ 27  ~ 29 __BEGIN_DECLS 33  s‘h”_addr 35 u_št8_t m‘h”_addr_où‘ [ ETH_ALEN ]; 36 } __©Œibu‹__ (( __·cked__ )); 39  s‘h”_h—d” 41 u_št8_t m‘h”_dho¡ [ ETH_ALEN ]; 42 u_št8_t m‘h”_sho¡ [ ETH_ALEN ]; 43 u_št16_t m‘h”_ty³ ; 44 } __©Œibu‹__ (( __·cked__ )); 47  #ETHERTYPE_PUP 0x0200 ) 48  #ETHERTYPE_SPRITE 0x0500 ) 49  #ETHERTYPE_IP 0x0800 ) 50  #ETHERTYPE_ARP 0x0806 ) 51  #ETHERTYPE_REVARP 0x8035 ) 52  #ETHERTYPE_AT 0x809B ) 53  #ETHERTYPE_AARP 0x80F3 ) 54  #ETHERTYPE_VLAN 0x8100 ) 55  #ETHERTYPE_IPX 0x8137 ) 56  #ETHERTYPE_IPV6 0x86dd ) 57  #ETHERTYPE_LOOPBACK 0x9000 ) 60  #ETHER_ADDR_LEN ETH_ALEN ) 61  #ETHER_TYPE_LEN 2 ) 62  #ETHER_CRC_LEN 4 ) 63  #ETHER_HDR_LEN ETH_HLEN ) 64  #ETHER_MIN_LEN ( ETH_ZLEN + ETHER_CRC_LEN è ) 65  #ETHER_MAX_LEN ( ETH_FRAME_LEN + ETHER_CRC_LEN è ) 68  #ETHER_IS_VALID_LEN ( foo ) \ 69 (( foo è>ð ETHER_MIN_LEN && (fooè<ð ETHER_MAX_LEN ) ) 76  #ETHERTYPE_TRAIL 0x1000 ) 77  #ETHERTYPE_NTRAILER 16 ) 79  #ETHERMTU ETH_DATA_LEN ) 80  #ETHERMIN ( ETHER_MIN_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN ) ) 82 g__END_DECLS @/usr/include/net/if.h 20 #iâdeà _NET_IF_H 21  #_NET_IF_H 1 ) 23  ~<ã©u»s.h > 25 #ifdeà __USE_MISC 26  ~ 27  ~ 32  #IF_NAMESIZE 16 ) 34  sif_Çmešdex 36  mif_šdex ; 37 * mif_Çme ; 41 #ifdeà __USE_MISC 45 mIFF_UP = 0x1, 46  #IFF_UP IFF_UP ) 47 mIFF_BROADCAST = 0x2, 48  #IFF_BROADCAST IFF_BROADCAST ) 49 mIFF_DEBUG = 0x4, 50  #IFF_DEBUG IFF_DEBUG ) 51 mIFF_LOOPBACK = 0x8, 52  #IFF_LOOPBACK IFF_LOOPBACK ) 53 mIFF_POINTOPOINT = 0x10, 54  #IFF_POINTOPOINT IFF_POINTOPOINT ) 55 mIFF_NOTRAILERS = 0x20, 56  #IFF_NOTRAILERS IFF_NOTRAILERS ) 57 mIFF_RUNNING = 0x40, 58  #IFF_RUNNING IFF_RUNNING ) 59 mIFF_NOARP = 0x80, 60  #IFF_NOARP IFF_NOARP ) 61 mIFF_PROMISC = 0x100, 62  #IFF_PROMISC IFF_PROMISC ) 65 mIFF_ALLMULTI = 0x200, 66  #IFF_ALLMULTI IFF_ALLMULTI ) 68 mIFF_MASTER = 0x400, 69  #IFF_MASTER IFF_MASTER ) 70 mIFF_SLAVE = 0x800, 71  #IFF_SLAVE IFF_SLAVE ) 73 mIFF_MULTICAST = 0x1000, 74  #IFF_MULTICAST IFF_MULTICAST ) 76 mIFF_PORTSEL = 0x2000, 77  #IFF_PORTSEL IFF_PORTSEL ) 78 mIFF_AUTOMEDIA = 0x4000, 79  #IFF_AUTOMEDIA IFF_AUTOMEDIA ) 80 mIFF_DYNAMIC = 0x8000 81  #IFF_DYNAMIC IFF_DYNAMIC ) 89  siçddr 91  sockaddr miç_addr ; 94  sockaddr mifu_brßdaddr ; 95  sockaddr mifu_d¡addr ; 96 } miç_ifu ; 97  içû * miç_iå ; 98  içddr * miç_Ãxt ; 101  #iç_brßdaddr iç_ifu . ifu_brßdaddr ) 102  #iç_d¡addr iç_ifu . ifu_d¡addr ) 112  sifm­ 114  mmem_¡¬t ; 115  mmem_’d ; 116  mba£_addr ; 117  mœq ; 118  mdma ; 119  mpÜt ; 127  siäeq 129  #IFHWADDRLEN 6 ) 130  #IFNAMSIZ IF_NAMESIZE ) 133  miän_Çme [ IFNAMSIZ ]; 134 } miä_iän ; 138  sockaddr miäu_addr ; 139  sockaddr miäu_d¡addr ; 140  sockaddr miäu_brßdaddr ; 141  sockaddr miäu_Ãtmask ; 142  sockaddr miäu_hwaddr ; 143  miäu_æags ; 144  miäu_iv®ue ; 145  miäu_mtu ; 146  ifm­ miäu_m­ ; 147  miäu_¦ave [ IFNAMSIZ ]; 148  miäu_ÃwÇme [ IFNAMSIZ ]; 149 __ÿddr_t miäu_d©a ; 150 } miä_iäu ; 152  #iä_Çme iä_iän . iän_Çme ) 153  #iä_hwaddr iä_iäu . iäu_hwaddr ) 154  #iä_addr iä_iäu . iäu_addr ) 155  #iä_d¡addr iä_iäu . iäu_d¡addr ) 156  #iä_brßdaddr iä_iäu . iäu_brßdaddr ) 157  #iä_Ãtmask iä_iäu . iäu_Ãtmask ) 158  #iä_æags iä_iäu . iäu_æags ) 159  #iä_m‘ric iä_iäu . iäu_iv®ue ) 160  #iä_mtu iä_iäu . iäu_mtu ) 161  #iä_m­ iä_iäu . iäu_m­ ) 162  #iä_¦ave iä_iäu . iäu_¦ave ) 163  #iä_d©a iä_iäu . iäu_d©a ) 164  #iä_ifšdex iä_iäu . iäu_iv®ue ) 165  #iä_bªdwidth iä_iäu . iäu_iv®ue ) 166  #iä_qËn iä_iäu . iäu_iv®ue ) 167  #iä_ÃwÇme iä_iäu . iäu_ÃwÇme ) 168  #_IOT_iäeq `_IOT ( `_IOTS (), IFNAMSIZ ,_IOTS(),16,0,0) ) 169  #_IOT_iäeq_shÜt `_IOT ( `_IOTS (), IFNAMSIZ ,_IOTS(),1,0,0) ) 170  #_IOT_iäeq_št `_IOT ( `_IOTS (), IFNAMSIZ ,_IOTS(),1,0,0) ) 177  sifcÚf 179  mifc_Ën ; 182 __ÿddr_t mifcu_buf ; 183  iäeq * mifcu_»q ; 184 } mifc_ifcu ; 186  #ifc_buf ifc_ifcu . ifcu_buf ) 187  #ifc_»q ifc_ifcu . ifcu_»q ) 188  #_IOT_ifcÚf `_IOT ( `_IOTS ( ifcÚf ),1,0,0,0,0è ) 191 __BEGIN_DECLS 194  $if_Çm‘ošdex ( __cÚ¡ * __iâame è __THROW ; 195 * $if_šdextÚame ( __ifšdex , * __iâame è __THROW ; 198  if_Çmešdex * $if_Çmešdex (è __THROW ; 201  $if_ä“Çmešdex ( if_Çmešdex * __±r è __THROW ; 203 __END_DECLS @/usr/include/netdb.h 23 #iâdef _NETDB_H 24  #_NETDB_H 1 ) 26  ~<ã©u»s.h > 28  ~<Ãtš‘/š.h > 29  ~<¡dšt.h > 30 #ifdeà __USE_MISC 33  ~<½c/Ãtdb.h > 36 #ifdeà __USE_GNU 37  #__Ãed_sigev’t_t ) 38  ~ 39  #__Ãed_time¥ec ) 40  ~ 43  ~ 46  #_PATH_HEQUIV "/‘c/ho¡s.equiv" ) 47  #_PATH_HOSTS "/‘c/ho¡s" ) 48  #_PATH_NETWORKS "/‘c/ÃtwÜks" ) 49  #_PATH_NSSWITCH_CONF "/‘c/nssw™ch.cÚf" ) 50  #_PATH_PROTOCOLS "/‘c/´ÙocÞs" ) 51  #_PATH_SERVICES "/‘c/£rviûs" ) 54 g__BEGIN_DECLS 56 #ià defšed __USE_MISC || !defšed __USE_XOPEN2K8 59  #h_”ºo (* `__h_”ºo_loÿtiÚ ()) ) 62 * $__h_”ºo_loÿtiÚ (è __THROW `__©Œibu‹__ (( __cÚ¡__ )); 66  #HOST_NOT_FOUND 1 ) 67  #TRY_AGAIN 2 ) 69  #NO_RECOVERY 3 ) 71  #NO_DATA 4 ) 74 #ià defšed __USE_MISC || defšed __USE_GNU 75  #NETDB_INTERNAL -1 ) 76  #NETDB_SUCCESS 0 ) 77  #NO_ADDRESS NO_DATA ) 80 #ifdeà __USE_XOPEN2K 82  #IPPORT_RESERVED 1024 ) 85 #ifdeà __USE_GNU 87  #SCOPE_DELIMITER '%' ) 90 #ifdeà __USE_MISC 93  $h”rÜ ( __cÚ¡ * __¡r è __THROW ; 96 __cÚ¡ * $h¡»¼Ü ( __”r_num è __THROW ; 101  sho¡’t 103 * h_Çme ; 104 ** h_®Ÿ£s ; 105  h_add¹y³ ; 106  h_Ëngth ; 107 ** h_addr_li¡ ; 108 #ià defšed __USE_MISC || defšed __USE_GNU 109  #h_addr h_addr_li¡ [0] ) 118  `£tho¡’t ( __¡ay_Ý’ ); 124  `’dho¡’t (); 131  ho¡’t * `g‘ho¡’t (); 138  ho¡’t * `g‘ho¡byaddr ( __cÚ¡ * __addr , __sockËn_t __Ën , 139  __ty³ ); 145  ho¡’t * `g‘ho¡byÇme ( __cÚ¡ * __Çme ); 147 #ifdeà __USE_MISC 156  ho¡’t * `g‘ho¡byÇme2 ( __cÚ¡ * __Çme ,  __af ); 168  `g‘ho¡’t_r ( ho¡’t * __»¡riù __»suÉ_buf , 169 * __»¡riù __buf , size_t __buæ’ , 170  ho¡’t ** __»¡riù __»suÉ , 171 * __»¡riù __h_”ºÝ ); 173  `g‘ho¡byaddr_r ( __cÚ¡ * __»¡riù __addr , __sockËn_t __Ën , 174  __ty³ , 175  ho¡’t * __»¡riù __»suÉ_buf , 176 * __»¡riù __buf , size_t __buæ’ , 177  ho¡’t ** __»¡riù __»suÉ , 178 * __»¡riù __h_”ºÝ ); 180  `g‘ho¡byÇme_r ( __cÚ¡ * __»¡riù __Çme , 181  ho¡’t * __»¡riù __»suÉ_buf , 182 * __»¡riù __buf , size_t __buæ’ , 183  ho¡’t ** __»¡riù __»suÉ , 184 * __»¡riù __h_”ºÝ ); 186  `g‘ho¡byÇme2_r ( __cÚ¡ * __»¡riù __Çme ,  __af , 187  ho¡’t * __»¡riù __»suÉ_buf , 188 * __»¡riù __buf , size_t __buæ’ , 189  ho¡’t ** __»¡riù __»suÉ , 190 * __»¡riù __h_”ºÝ ); 199  `£Š‘’t ( __¡ay_Ý’ ); 205  `’dËÁ (); 212  ËÁ * `g‘ËÁ (); 219  ËÁ * `g‘Ãtbyaddr ( ušt32_t __Ãt ,  __ty³ ); 225  ËÁ * `g‘ÃtbyÇme ( __cÚ¡ * __Çme ); 227 #ifdef __USE_MISC 238  `g‘ËÁ_r ( ËÁ * __»¡riù __»suÉ_buf , 239 * __»¡riù __buf , size_t __buæ’ , 240  ËÁ ** __»¡riù __»suÉ , 241 * __»¡riù __h_”ºÝ ); 243  `g‘Ãtbyaddr_r ( ušt32_t __Ãt ,  __ty³ , 244  ËÁ * __»¡riù __»suÉ_buf , 245 * __»¡riù __buf , size_t __buæ’ , 246  ËÁ ** __»¡riù __»suÉ , 247 * __»¡riù __h_”ºÝ ); 249  `g‘ÃtbyÇme_r ( __cÚ¡ * __»¡riù __Çme , 250  ËÁ * __»¡riù __»suÉ_buf , 251 * __»¡riù __buf , size_t __buæ’ , 252  ËÁ ** __»¡riù __»suÉ , 253 * __»¡riù __h_”ºÝ ); 258  s£rv’t 260 * s_Çme ; 261 ** s_®Ÿ£s ; 262  s_pÜt ; 263 * s_´Ùo ; 271  `£t£rv’t ( __¡ay_Ý’ ); 277  `’d£rv’t (); 284  £rv’t * `g‘£rv’t (); 291  £rv’t * `g‘£rvbyÇme ( __cÚ¡ * __Çme , 292 __cÚ¡ * __´Ùo ); 299  £rv’t * `g‘£rvbypÜt ( __pÜt , __cÚ¡ * __´Ùo ); 302 #ifdef __USE_MISC 310  `g‘£rv’t_r ( £rv’t * __»¡riù __»suÉ_buf , 311 * __»¡riù __buf , size_t __buæ’ , 312  £rv’t ** __»¡riù __»suÉ ); 314  `g‘£rvbyÇme_r ( __cÚ¡ * __»¡riù __Çme , 315 __cÚ¡ * __»¡riù __´Ùo , 316  £rv’t * __»¡riù __»suÉ_buf , 317 * __»¡riù __buf , size_t __buæ’ , 318  £rv’t ** __»¡riù __»suÉ ); 320  `g‘£rvbypÜt_r ( __pÜt , __cÚ¡ * __»¡riù __´Ùo , 321  £rv’t * __»¡riù __»suÉ_buf , 322 * __»¡riù __buf , size_t __buæ’ , 323  £rv’t ** __»¡riù __»suÉ ); 328  s´ÙÛÁ 330 * p_Çme ; 331 ** p_®Ÿ£s ; 332  p_´Ùo ; 340  `£rÙÛÁ ( __¡ay_Ý’ ); 346  `’d´ÙÛÁ (); 353  ´ÙÛÁ * `g‘´ÙÛÁ (); 359  ´ÙÛÁ * `g‘´ÙobyÇme ( __cÚ¡ * __Çme ); 365  ´ÙÛÁ * `g‘´Ùobynumb” ( __´Ùo ); 368 #ifdef __USE_MISC 376  `g‘´ÙÛÁ_r ( ´ÙÛÁ * __»¡riù __»suÉ_buf , 377 * __»¡riù __buf , size_t __buæ’ , 378  ´ÙÛÁ ** __»¡riù __»suÉ ); 380  `g‘´ÙobyÇme_r ( __cÚ¡ * __»¡riù __Çme , 381  ´ÙÛÁ * __»¡riù __»suÉ_buf , 382 * __»¡riù __buf , size_t __buæ’ , 383  ´ÙÛÁ ** __»¡riù __»suÉ ); 385  `g‘´Ùobynumb”_r ( __´Ùo , 386  ´ÙÛÁ * __»¡riù __»suÉ_buf , 387 * __»¡riù __buf , size_t __buæ’ , 388  ´ÙÛÁ ** __»¡riù __»suÉ ); 397  `£Š‘g»Á ( __cÚ¡ * __Ãtgroup ); 405  `’dÃtg»Á (); 414  `g‘Ãtg»Á (** __»¡riù __ho¡p , 415 ** __»¡riù __u£½ , 416 ** __»¡riù __domašp ); 425  `šÃtgr ( __cÚ¡ * __Ãtgroup , __cÚ¡ * __ho¡ , 426 __cÚ¡ * __u£r , __cÚ¡ * __domaš ); 434  `g‘Ãtg»Á_r (** __»¡riù __ho¡p , 435 ** __»¡riù __u£½ , 436 ** __»¡riù __domašp , 437 * __»¡riù __bufãr , size_t __buæ’ ); 441 #ifdeà __USE_BSD 453  `rcmd (** __»¡riù __aho¡ ,  __½Üt , 454 __cÚ¡ * __»¡riù __locu£r , 455 __cÚ¡ * __»¡riù __»mu£r , 456 __cÚ¡ * __»¡riù __cmd , *__»¡riù __fd2p ); 465  `rcmd_af (** __»¡riù __aho¡ ,  __½Üt , 466 __cÚ¡ * __»¡riù __locu£r , 467 __cÚ¡ * __»¡riù __»mu£r , 468 __cÚ¡ * __»¡riù __cmd , *__»¡riù __fd2p , 469 §_çmžy_t __af ); 481  `»xec (** __»¡riù __aho¡ ,  __½Üt , 482 __cÚ¡ * __»¡riù __Çme , 483 __cÚ¡ * __»¡riù __·ss , 484 __cÚ¡ * __»¡riù __cmd , *__»¡riù __fd2p ); 493  `»xec_af (** __»¡riù __aho¡ ,  __½Üt , 494 __cÚ¡ * __»¡riù __Çme , 495 __cÚ¡ * __»¡riù __·ss , 496 __cÚ¡ * __»¡riù __cmd , *__»¡riù __fd2p , 497 §_çmžy_t __af ); 507  `ru£rok ( __cÚ¡ * __rho¡ ,  __su£r , 508 __cÚ¡ * __»mu£r , __cÚ¡ * __locu£r ); 517  `ru£rok_af ( __cÚ¡ * __rho¡ ,  __su£r , 518 __cÚ¡ * __»mu£r , __cÚ¡ * __locu£r , 519 §_çmžy_t __af ); 530  `œu£rok ( ušt32_t __¿ddr ,  __su£r , 531 __cÚ¡ * __»mu£r , __cÚ¡ * __locu£r ); 541  `œu£rok_af ( __cÚ¡ * __¿ddr ,  __su£r , 542 __cÚ¡ * __»mu£r , __cÚ¡ * __locu£r , 543 §_çmžy_t __af ); 553  `¼esvpÜt (* __®pÜt ); 562  `¼esvpÜt_af (* __®pÜt , §_çmžy_t __af ); 567 #ifdef __USE_POSIX 569  saddršfo 571  ai_æags ; 572  ai_çmžy ; 573  ai_sockty³ ; 574  ai_´ÙocÞ ; 575 sockËn_t ai_add¾’ ; 576  sockaddr * ai_addr ; 577 * ai_ÿnÚÇme ; 578  addršfo * ai_Ãxt ; 581 #ifdeà __USE_GNU 583  sgaicb 585 cÚ¡ * ¬_Çme ; 586 cÚ¡ * ¬_£rviû ; 587 cÚ¡  addršfo * ¬_»que¡ ; 588  addršfo * ¬_»suÉ ; 590  __»tuº ; 591  __unu£d [5]; 595  #GAI_WAIT 0 ) 596  #GAI_NOWAIT 1 ) 600  #AI_PASSIVE 0x0001 ) 601  #AI_CANONNAME 0x0002 ) 602  #AI_NUMERICHOST 0x0004 ) 603  #AI_V4MAPPED 0x0008 ) 604  #AI_ALL 0x0010 ) 605  #AI_ADDRCONFIG 0x0020 ) 607 #ifdeà __USE_GNU 608  #AI_IDN 0x0040 ) 611  #AI_CANONIDN 0x0080 ) 612  #AI_IDN_ALLOW_UNASSIGNED 0x0100 ) 614  #AI_IDN_USE_STD3_ASCII_RULES 0x0200 ) 617  #AI_NUMERICSERV 0x0400 ) 620  #EAI_BADFLAGS -1 ) 621  #EAI_NONAME -2 ) 622  #EAI_AGAIN -3 ) 623  #EAI_FAIL -4 ) 624  #EAI_FAMILY -6 ) 625  #EAI_SOCKTYPE -7 ) 626  #EAI_SERVICE -8 ) 627  #EAI_MEMORY -10 ) 628  #EAI_SYSTEM -11 ) 629  #EAI_OVERFLOW -12 ) 630 #ifdeà __USE_GNU 631  #EAI_NODATA -5 ) 632  #EAI_ADDRFAMILY -9 ) 633  #EAI_INPROGRESS -100 ) 634  #EAI_CANCELED -101 ) 635  #EAI_NOTCANCELED -102 ) 636  #EAI_ALLDONE -103 ) 637  #EAI_INTR -104 ) 638  #EAI_IDN_ENCODE -105 ) 641 #ifdeà __USE_MISC 642  #NI_MAXHOST 1025 ) 643  #NI_MAXSERV 32 ) 646  #NI_NUMERICHOST 1 ) 647  #NI_NUMERICSERV 2 ) 648  #NI_NOFQDN 4 ) 649  #NI_NAMEREQD 8 ) 650  #NI_DGRAM 16 ) 651 #ifdeà __USE_GNU 652  #NI_IDN 32 ) 653  #NI_IDN_ALLOW_UNASSIGNED 64 ) 655  #NI_IDN_USE_STD3_ASCII_RULES 128 ) 664  `g‘addršfo ( __cÚ¡ * __»¡riù __Çme , 665 __cÚ¡ * __»¡riù __£rviû , 666 __cÚ¡  addršfo * __»¡riù __»q , 667  addršfo ** __»¡riù __·i ); 670  $ä“addršfo ( addršfo * __ai è __THROW ; 673 __cÚ¡ * $gai_¡»¼Ü ( __ecode è __THROW ; 679  `g‘Çmešfo ( __cÚ¡  sockaddr * __»¡riù __§ , 680 sockËn_t __§Ën , * __»¡riù __ho¡ , 681 sockËn_t __ho¡Ën , * __»¡riù __£rv , 682 sockËn_t __£rvËn ,  __æags ); 685 #ifdeà __USE_GNU 694  `g‘addršfo_a ( __mode ,  gaicb * __li¡ [ __»¡riù_¬r ], 695  __’t ,  sigev’t * __»¡riù __sig ); 705  `gai_su¥’d ( __cÚ¡  gaicb *__cÚ¡ __li¡ [],  __’t , 706 __cÚ¡  time¥ec * __timeout ); 709  $gai_”rÜ ( gaicb * __»q è __THROW ; 712  $gai_ÿnûl ( gaicb * __gaicbp è __THROW ; 715 __END_DECLS @/usr/include/netinet/if_ether.h 19 #iâdeà __NETINET_IF_ETHER_H 21  #__NETINET_IF_ETHER_H 1 ) 22  ~<ã©u»s.h > 23  ~ 26  ~ 28 #ifdeà __USE_BSD 61  ~<Ãt/‘h”Ãt.h > 62  ~<Ãt/if_¬p.h > 64 __BEGIN_DECLS 72  s‘h”_¬p { 73  ¬phdr m—_hdr ; 74 u_št8_t m¬p_sha [ ETH_ALEN ]; 75 u_št8_t m¬p_¥a [4]; 76 u_št8_t m¬p_tha [ ETH_ALEN ]; 77 u_št8_t m¬p_a [4]; 79  #¬p_hrd —_hdr . ¬_hrd ) 80  #¬p_´o —_hdr . ¬_´o ) 81  #¬p_hÊ —_hdr . ¬_hÊ ) 82  #¬p_¶n —_hdr . ¬_¶n ) 83  #¬p_Ý —_hdr . ¬_Ý ) 90  #ETHER_MAP_IP_MULTICAST ( addr , ’addr ) \ 94 ( ’addr )[0] = 0x01; \ 95 ( ’addr )[1] = 0x00; \ 96 ( ’addr )[2] = 0x5e; \ 97 ( ’addr )[3] = (( u_št8_t *) addr )[1] & 0x7f; \ 98 ( ’addr )[4] = (( u_št8_t *) addr )[2]; \ 99 ( ’addr )[5] = (( u_št8_t *) addr )[3]; \ 100 } ) 102 g__END_DECLS @/usr/include/netinet/in.h 20 #iâdef _NETINET_IN_H 21  #_NETINET_IN_H 1 ) 23  ~<ã©u»s.h > 24  ~<¡dšt.h > 25  ~ 26  ~ 29 __BEGIN_DECLS 34 mIPPROTO_IP = 0, 35  #IPPROTO_IP IPPROTO_IP ) 36 mIPPROTO_HOPOPTS = 0, 37  #IPPROTO_HOPOPTS IPPROTO_HOPOPTS ) 38 mIPPROTO_ICMP = 1, 39  #IPPROTO_ICMP IPPROTO_ICMP ) 40 mIPPROTO_IGMP = 2, 41  #IPPROTO_IGMP IPPROTO_IGMP ) 42 mIPPROTO_IPIP = 4, 43  #IPPROTO_IPIP IPPROTO_IPIP ) 44 mIPPROTO_TCP = 6, 45  #IPPROTO_TCP IPPROTO_TCP ) 46 mIPPROTO_EGP = 8, 47  #IPPROTO_EGP IPPROTO_EGP ) 48 mIPPROTO_PUP = 12, 49  #IPPROTO_PUP IPPROTO_PUP ) 50 mIPPROTO_UDP = 17, 51  #IPPROTO_UDP IPPROTO_UDP ) 52 mIPPROTO_IDP = 22, 53  #IPPROTO_IDP IPPROTO_IDP ) 54 mIPPROTO_TP = 29, 55  #IPPROTO_TP IPPROTO_TP ) 56 mIPPROTO_DCCP = 33, 57  #IPPROTO_DCCP IPPROTO_DCCP ) 58 mIPPROTO_IPV6 = 41, 59  #IPPROTO_IPV6 IPPROTO_IPV6 ) 60 mIPPROTO_ROUTING = 43, 61  #IPPROTO_ROUTING IPPROTO_ROUTING ) 62 mIPPROTO_FRAGMENT = 44, 63  #IPPROTO_FRAGMENT IPPROTO_FRAGMENT ) 64 mIPPROTO_RSVP = 46, 65  #IPPROTO_RSVP IPPROTO_RSVP ) 66 mIPPROTO_GRE = 47, 67  #IPPROTO_GRE IPPROTO_GRE ) 68 mIPPROTO_ESP = 50, 69  #IPPROTO_ESP IPPROTO_ESP ) 70 mIPPROTO_AH = 51, 71  #IPPROTO_AH IPPROTO_AH ) 72 mIPPROTO_ICMPV6 = 58, 73  #IPPROTO_ICMPV6 IPPROTO_ICMPV6 ) 74 mIPPROTO_NONE = 59, 75  #IPPROTO_NONE IPPROTO_NONE ) 76 mIPPROTO_DSTOPTS = 60, 77  #IPPROTO_DSTOPTS IPPROTO_DSTOPTS ) 78 mIPPROTO_MTP = 92, 79  #IPPROTO_MTP IPPROTO_MTP ) 80 mIPPROTO_ENCAP = 98, 81  #IPPROTO_ENCAP IPPROTO_ENCAP ) 82 mIPPROTO_PIM = 103, 83  #IPPROTO_PIM IPPROTO_PIM ) 84 mIPPROTO_COMP = 108, 85  #IPPROTO_COMP IPPROTO_COMP ) 86 mIPPROTO_SCTP = 132, 87  #IPPROTO_SCTP IPPROTO_SCTP ) 88 mIPPROTO_UDPLITE = 136, 89  #IPPROTO_UDPLITE IPPROTO_UDPLITE ) 90 mIPPROTO_RAW = 255, 91  #IPPROTO_RAW IPPROTO_RAW ) 92 mIPPROTO_MAX 97  ušt16_t tš_pÜt_t ; 102 mIPPORT_ECHO = 7, 103 mIPPORT_DISCARD = 9, 104 mIPPORT_SYSTAT = 11, 105 mIPPORT_DAYTIME = 13, 106 mIPPORT_NETSTAT = 15, 107 mIPPORT_FTP = 21, 108 mIPPORT_TELNET = 23, 109 mIPPORT_SMTP = 25, 110 mIPPORT_TIMESERVER = 37, 111 mIPPORT_NAMESERVER = 42, 112 mIPPORT_WHOIS = 43, 113 mIPPORT_MTP = 57, 115 mIPPORT_TFTP = 69, 116 mIPPORT_RJE = 77, 117 mIPPORT_FINGER = 79, 118 mIPPORT_TTYLINK = 87, 119 mIPPORT_SUPDUP = 95, 122 mIPPORT_EXECSERVER = 512, 123 mIPPORT_LOGINSERVER = 513, 124 mIPPORT_CMDSERVER = 514, 125 mIPPORT_EFSSERVER = 520, 128 mIPPORT_BIFFUDP = 512, 129 mIPPORT_WHOSERVER = 513, 130 mIPPORT_ROUTESERVER = 520, 133 mIPPORT_RESERVED = 1024, 136 mIPPORT_USERRESERVED = 5000 141  ušt32_t tš_addr_t ; 142  sš_addr 144 š_addr_t ms_addr ; 153  #IN_CLASSA ( a è(((( š_addr_t )×)è& 0x80000000è=ð0) ) 154  #IN_CLASSA_NET 0xff000000 ) 155  #IN_CLASSA_NSHIFT 24 ) 156  #IN_CLASSA_HOST (0xfffffffà& ~ IN_CLASSA_NET ) ) 157  #IN_CLASSA_MAX 128 ) 159  #IN_CLASSB ( a è(((( š_addr_t )×)è& 0xc0000000è=ð0x80000000) ) 160  #IN_CLASSB_NET 0xffff0000 ) 161  #IN_CLASSB_NSHIFT 16 ) 162  #IN_CLASSB_HOST (0xfffffffà& ~ IN_CLASSB_NET ) ) 163  #IN_CLASSB_MAX 65536 ) 165  #IN_CLASSC ( a è(((( š_addr_t )×)è& 0xe0000000è=ð0xc0000000) ) 166  #IN_CLASSC_NET 0xffffff00 ) 167  #IN_CLASSC_NSHIFT 8 ) 168  #IN_CLASSC_HOST (0xfffffffà& ~ IN_CLASSC_NET ) ) 170  #IN_CLASSD ( a è(((( š_addr_t )×)è& 0xf0000000è=ð0xe0000000) ) 171  #IN_MULTICAST ( a è `IN_CLASSD ×) ) 173  #IN_EXPERIMENTAL ( a è(((( š_addr_t )×)è& 0xe0000000è=ð0xe0000000) ) 174  #IN_BADCLASS ( a è(((( š_addr_t )×)è& 0xf0000000è=ð0xf0000000) ) 177  #INADDR_ANY (( š_addr_t è0x00000000) ) 179  #INADDR_BROADCAST (( š_addr_t è0xffffffff) ) 181  #INADDR_NONE (( š_addr_t è0xffffffff) ) 184  #IN_LOOPBACKNET 127 ) 186 #iâdeà INADDR_LOOPBACK 187  #INADDR_LOOPBACK (( š_addr_t è0x7f000001è ) 191  #INADDR_UNSPEC_GROUP (( š_addr_t è0xe0000000è ) 192  #INADDR_ALLHOSTS_GROUP (( š_addr_t è0xe0000001è ) 193  #INADDR_ALLRTRS_GROUP (( š_addr_t è0xe0000002è ) 194  #INADDR_MAX_LOCAL_GROUP (( š_addr_t è0xe00000ffè ) 198  sš6_addr 202 ušt8_t m__u6_addr8 [16]; 203 #ià defšed __USE_MISC || defšed __USE_GNU 204 ušt16_t m__u6_addr16 [8]; 205 ušt32_t m__u6_addr32 [4]; 207 } m__š6_u ; 208  #s6_addr __š6_u . __u6_addr8 ) 209 #ià defšed __USE_MISC || defšed __USE_GNU 210  #s6_addr16 __š6_u . __u6_addr16 ) 211  #s6_addr32 __š6_u . __u6_addr32 ) 215 cÚ¡  š6_addr š6addr_ªy ; 216 cÚ¡  š6_addr š6addr_loÝback ; 217  #IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } ) 218  #IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } ) 220  #INET_ADDRSTRLEN 16 ) 221  #INET6_ADDRSTRLEN 46 ) 225  ssockaddr_š 227 __SOCKADDR_COMMON ( sš_ ); 228 š_pÜt_t msš_pÜt ; 229  š_addr msš_addr ; 232  msš_z”o [ ( sockaddr ) - 233 __SOCKADDR_COMMON_SIZE - 234  ( š_pÜt_t ) - 235  ( š_addr )]; 239  ssockaddr_š6 241 __SOCKADDR_COMMON ( sš6_ ); 242 š_pÜt_t msš6_pÜt ; 243 ušt32_t msš6_æowšfo ; 244  š6_addr msš6_addr ; 245 ušt32_t msš6_scÝe_id ; 249 #ià defšed __USE_MISC || defšed __USE_GNU 251  s_m»q 254  š_addr mimr_muÉŸddr ; 257  š_addr mimr_š‹rçû ; 260  s_m»q_sourû 263  š_addr mimr_muÉŸddr ; 266  š_addr mimr_š‹rçû ; 269  š_addr mimr_sourûaddr ; 275  sv6_m»q 278  š6_addr mv6mr_muÉŸddr ; 281  mv6mr_š‹rçû ; 285 #ià defšed __USE_MISC || defšed __USE_GNU 287  sgroup_»q 290 ušt32_t mgr_š‹rçû ; 293  sockaddr_¡Üage mgr_group ; 296  sgroup_sourû_»q 299 ušt32_t mg¤_š‹rçû ; 302  sockaddr_¡Üage mg¤_group ; 305  sockaddr_¡Üage mg¤_sourû ; 310  s_msfž‹r 313  š_addr mimsf_muÉŸddr ; 316  š_addr mimsf_š‹rçû ; 319 ušt32_t mimsf_fmode ; 322 ušt32_t mimsf_num¤c ; 324  š_addr mimsf_¦i¡ [1]; 327  #IP_MSFILTER_SIZE ( num¤c è( ( _msfž‹r ) \ 328 -  ( š_addr ) \ 329 + ( num¤c è*  ( š_addr )) ) 331  sgroup_fž‹r 334 ušt32_t mgf_š‹rçû ; 337  sockaddr_¡Üage mgf_group ; 340 ušt32_t mgf_fmode ; 343 ušt32_t mgf_num¤c ; 345  sockaddr_¡Üage mgf_¦i¡ [1]; 348  #GROUP_FILTER_SIZE ( num¤c è( ( group_fž‹r ) \ 349 -  ( sockaddr_¡Üage ) \ 350 + (( num¤c ) \ 351 *  ( sockaddr_¡Üage ))) ) 356  ~ 365 ušt32_t $Áohl ( ušt32_t __ÃŽÚg è __THROW `__©Œibu‹__ (( __cÚ¡__ )); 366 ušt16_t $Áohs ( ušt16_t __ÃtshÜt ) 367 __THROW `__©Œibu‹__ (( __cÚ¡__ )); 368 ušt32_t $htÚl ( ušt32_t __ho¡lÚg ) 369 __THROW `__©Œibu‹__ (( __cÚ¡__ )); 370 ušt16_t $htÚs ( ušt16_t __ho¡shÜt ) 371 __THROW `__©Œibu‹__ (( __cÚ¡__ )); 373  ~<’dŸn.h > 376  ~ 378 #ifdeà __OPTIMIZE__ 382 #ià __BYTE_ORDER =ð __BIG_ENDIAN 385  #Áohl ( x è(x) ) 386  #Áohs ( x è(x) ) 387  #htÚl ( x è(x) ) 388  #htÚs ( x è(x) ) 390 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 391  #Áohl ( x è `__bsw­_32 (x) ) 392  #Áohs ( x è `__bsw­_16 (x) ) 393  #htÚl ( x è `__bsw­_32 (x) ) 394  #htÚs ( x è `__bsw­_16 (x) ) 399 #ifdeà __GNUC__ 400  #IN6_IS_ADDR_UNSPECIFIED ( a ) \ 401 ( __ex‹nsiÚ__ \ 402 ({ __cÚ¡  š6_addr * __a = (__cÚ¡ š6_add¸*è( a ); \ 403 __a -> s6_addr32 [0] == 0 \ 404 && __a -> s6_addr32 [1] == 0 \ 405 && __a -> s6_addr32 [2] == 0 \ 406 && __a -> s6_addr32 [3] =ð0; } })) ) 408  #IN6_IS_ADDR_LOOPBACK ( a ) \ 409 ( __ex‹nsiÚ__ \ 410 ({ __cÚ¡  š6_addr * __a = (__cÚ¡ š6_add¸*è( a ); \ 411 __a -> s6_addr32 [0] == 0 \ 412 && __a -> s6_addr32 [1] == 0 \ 413 && __a -> s6_addr32 [2] == 0 \ 414 && __a -> s6_addr32 [3] =ð `htÚl (1); })) ) 416  #IN6_IS_ADDR_LINKLOCAL ( a ) \ 417 ( __ex‹nsiÚ__ \ 418 ({ __cÚ¡  š6_addr * __a = (__cÚ¡ š6_add¸*è( a ); \ 419 ( __a -> s6_addr32 [0] & `htÚl (0xffc00000)è=ðhtÚÈ(0xã800000); })) ) 421  #IN6_IS_ADDR_SITELOCAL ( a ) \ 422 ( __ex‹nsiÚ__ \ 423 ({ __cÚ¡  š6_addr * __a = (__cÚ¡ š6_add¸*è( a ); \ 424 ( __a -> s6_addr32 [0] & `htÚl (0xffc00000)è=ðhtÚÈ(0xãc00000); })) ) 426  #IN6_IS_ADDR_V4MAPPED ( a ) \ 427 ( __ex‹nsiÚ__ \ 428 ({ __cÚ¡  š6_addr * __a = (__cÚ¡ š6_add¸*è( a ); \ 429 __a -> s6_addr32 [0] == 0 \ 430 && __a -> s6_addr32 [1] == 0 \ 431 && __a -> s6_addr32 [2] =ð `htÚl (0xffff); })) ) 433  #IN6_IS_ADDR_V4COMPAT ( a ) \ 434 ( __ex‹nsiÚ__ \ 435 ({ __cÚ¡  š6_addr * __a = (__cÚ¡ š6_add¸*è( a ); \ 436 __a -> s6_addr32 [0] == 0 \ 437 && __a -> s6_addr32 [1] == 0 \ 438 && __a -> s6_addr32 [2] == 0 \ 439 && `Áohl ( __a -> s6_addr32 [3]è> 1; })) ) 441  #IN6_ARE_ADDR_EQUAL ( a , b ) \ 442 ( __ex‹nsiÚ__ \ 443 ({ __cÚ¡  š6_addr * __a = (__cÚ¡ š6_add¸*è( a ); \ 444 __cÚ¡  š6_addr * __b = (__cÚ¡ š6_add¸*è( b ); \ 445 __a -> s6_addr32 [0] =ð __b ->s6_addr32[0] \ 446 && __a -> s6_addr32 [1] =ð __b ->s6_addr32[1] \ 447 && __a -> s6_addr32 [2] =ð __b ->s6_addr32[2] \ 448 && __a -> s6_addr32 [3] =ð __b ->s6_addr32[3]; })) ) 450  #IN6_IS_ADDR_UNSPECIFIED ( a ) \ 451 ((( __cÚ¡ ušt32_t *è( a ))[0] == 0 \ 452 && (( __cÚ¡ ušt32_t *è( a ))[1] == 0 \ 453 && (( __cÚ¡ ušt32_t *è( a ))[2] == 0 \ 454 && (( __cÚ¡ ušt32_t *è( a ))[3] =ð0) ) 456  #IN6_IS_ADDR_LOOPBACK ( a ) \ 457 ((( __cÚ¡ ušt32_t *è( a ))[0] == 0 \ 458 && (( __cÚ¡ ušt32_t *è( a ))[1] == 0 \ 459 && (( __cÚ¡ ušt32_t *è( a ))[2] == 0 \ 460 && (( __cÚ¡ ušt32_t *è( a ))[3] =ð `htÚl (1)) ) 462  #IN6_IS_ADDR_LINKLOCAL ( a ) \ 463 (((( __cÚ¡ ušt32_t *è( a ))[0] & `htÚl (0xffc00000)) \ 464 =ð `htÚl (0xã800000)) ) 466  #IN6_IS_ADDR_SITELOCAL ( a ) \ 467 (((( __cÚ¡ ušt32_t *è( a ))[0] & `htÚl (0xffc00000)) \ 468 =ð `htÚl (0xãc00000)) ) 470  #IN6_IS_ADDR_V4MAPPED ( a ) \ 471 (((( __cÚ¡ ušt32_t *è( a ))[0] == 0) \ 472 && ((( __cÚ¡ ušt32_t *è( a ))[1] == 0) \ 473 && ((( __cÚ¡ ušt32_t *è( a ))[2] =ð `htÚl (0xffff))) ) 475  #IN6_IS_ADDR_V4COMPAT ( a ) \ 476 (((( __cÚ¡ ušt32_t *è( a ))[0] == 0) \ 477 && ((( __cÚ¡ ušt32_t *è( a ))[1] == 0) \ 478 && ((( __cÚ¡ ušt32_t *è( a ))[2] == 0) \ 479 && ( `Áohl ((( __cÚ¡ ušt32_t *è( a ))[3]è> 1)) ) 481  #IN6_ARE_ADDR_EQUAL ( a , b ) \ 482 (((( __cÚ¡ ušt32_t *è( a ))[0] =ð((__cÚ¡ ušt32_ˆ*è( b ))[0]) \ 483 && ((( __cÚ¡ ušt32_t *è( a ))[1] =ð((__cÚ¡ ušt32_ˆ*è( b ))[1]) \ 484 && ((( __cÚ¡ ušt32_t *è( a ))[2] =ð((__cÚ¡ ušt32_ˆ*è( b ))[2]) \ 485 && ((( __cÚ¡ ušt32_t *è( a ))[3] =ð((__cÚ¡ ušt32_ˆ*è( b ))[3])) ) 488  #IN6_IS_ADDR_MULTICAST ( a è((( __cÚ¡ ušt8_t *è×))[0] =ð0xff) ) 490 #ià defšed __USE_MISC || defšed __USE_GNU 492  $bšd»svpÜt ( __sockfd ,  sockaddr_š * __sock_š è __THROW ; 495  $bšd»svpÜt6 ( __sockfd ,  sockaddr_š6 * __sock_š ) 496 __THROW ; 500  #IN6_IS_ADDR_MC_NODELOCAL ( a ) \ 501 ( `IN6_IS_ADDR_MULTICAST ( a ) \ 502 && (((( __cÚ¡ ušt8_t *è( a ))[1] & 0xfè=ð0x1)) ) 504  #IN6_IS_ADDR_MC_LINKLOCAL ( a ) \ 505 ( `IN6_IS_ADDR_MULTICAST ( a ) \ 506 && (((( __cÚ¡ ušt8_t *è( a ))[1] & 0xfè=ð0x2)) ) 508  #IN6_IS_ADDR_MC_SITELOCAL ( a ) \ 509 ( `IN6_IS_ADDR_MULTICAST ( a ) \ 510 && (((( __cÚ¡ ušt8_t *è( a ))[1] & 0xfè=ð0x5)) ) 512  #IN6_IS_ADDR_MC_ORGLOCAL ( a ) \ 513 ( `IN6_IS_ADDR_MULTICAST ( a ) \ 514 && (((( __cÚ¡ ušt8_t *è( a ))[1] & 0xfè=ð0x8)) ) 516  #IN6_IS_ADDR_MC_GLOBAL ( a ) \ 517 ( `IN6_IS_ADDR_MULTICAST ( a ) \ 518 && (((( __cÚ¡ ušt8_t *è( a ))[1] & 0xfè=ð0xe)) ) 521 #ifdeà __USE_GNU 523  sš6_pktšfo 525  š6_addr i6_addr ; 526  i6_ifšdex ; 530  s6_mtušfo 532  sockaddr_š6 6m_addr ; 533 ušt32_t 6m_mtu ; 538  $š‘6_ÝtiÚ_¥aû ( __nby‹s ) 539 __THROW __©Œibu‹_d•»ÿ‹d__ ; 540  $š‘6_ÝtiÚ_š™ (* __bp ,  cmsghdr ** __cmsgp , 541  __ty³ è __THROW __©Œibu‹_d•»ÿ‹d__ ; 542  $š‘6_ÝtiÚ_­³nd ( cmsghdr * __cmsg , 543 __cÚ¡ ušt8_t * __ty³p ,  __muÉx , 544  __¶usy è __THROW __©Œibu‹_d•»ÿ‹d__ ; 545 ušt8_t * $š‘6_ÝtiÚ_®loc ( cmsghdr * __cmsg ,  __d©®’ , 546  __muÉx ,  __¶usy ) 547 __THROW __©Œibu‹_d•»ÿ‹d__ ; 548  $š‘6_ÝtiÚ_Ãxt ( __cÚ¡  cmsghdr * __cmsg , 549 ušt8_t ** __Œp ) 550 __THROW __©Œibu‹_d•»ÿ‹d__ ; 551  $š‘6_ÝtiÚ_fšd ( __cÚ¡  cmsghdr * __cmsg , 552 ušt8_t ** __Œp ,  __ty³ ) 553 __THROW __©Œibu‹_d•»ÿ‹d__ ; 557  $š‘6_Ýt_š™ (* __extbuf , sockËn_t __exŽ’ è __THROW ; 558  $š‘6_Ýt_­³nd (* __extbuf , sockËn_t __exŽ’ ,  __off£t , 559 ušt8_t __ty³ , sockËn_t __Ën , ušt8_ˆ __®ign , 560 ** __d©abuå è __THROW ; 561  $š‘6_Ýt_fšish (* __extbuf , sockËn_t __exŽ’ ,  __off£t ) 562 __THROW ; 563  $š‘6_Ýt_£t_v® (* __d©abuf ,  __off£t , * __v® , 564 sockËn_t __v®Ën è __THROW ; 565  $š‘6_Ýt_Ãxt (* __extbuf , sockËn_t __exŽ’ ,  __off£t , 566 ušt8_t * __ty³p , sockËn_t * __ËÅ , 567 ** __d©abuå è __THROW ; 568  $š‘6_Ýt_fšd (* __extbuf , sockËn_t __exŽ’ ,  __off£t , 569 ušt8_t __ty³ , sockËn_t * __ËÅ , 570 ** __d©abuå è __THROW ; 571  $š‘6_Ýt_g‘_v® (* __d©abuf ,  __off£t , * __v® , 572 sockËn_t __v®Ën è __THROW ; 576 sockËn_t $š‘6_¹h_¥aû ( __ty³ ,  __£gm’ts è __THROW ; 577 * $š‘6_¹h_š™ (* __bp , sockËn_t __bp_Ën ,  __ty³ , 578  __£gm’ts è __THROW ; 579  $š‘6_¹h_add (* __bp , __cÚ¡  š6_addr * __addr è __THROW ; 580  $š‘6_¹h_»v”£ ( __cÚ¡ * __š , * __out è __THROW ; 581  $š‘6_¹h_£gm’ts ( __cÚ¡ * __bp è __THROW ; 582  š6_addr * $š‘6_¹h_g‘addr ( __cÚ¡ * __bp ,  __šdex ) 583 __THROW ; 589  $g‘v4sourûfž‹r ( __s ,  š_addr __š‹rçû_addr , 590  š_addr __group , ušt32_t * __fmode , 591 ušt32_t * __num¤c ,  š_addr * __¦i¡ ) 592 __THROW ; 595  $£tv4sourûfž‹r ( __s ,  š_addr __š‹rçû_addr , 596  š_addr __group , ušt32_t __fmode , 597 ušt32_t __num¤c , 598 __cÚ¡  š_addr * __¦i¡ ) 599 __THROW ; 603  $g‘sourûfž‹r ( __s , ušt32_t __š‹rçû_addr , 604 __cÚ¡  sockaddr * __group , 605 sockËn_t __grou¶’ , ušt32_t * __fmode , 606 ušt32_t * __num¤c , 607  sockaddr_¡Üage * __¦i¡ è __THROW ; 610  $£tsourûfž‹r ( __s , ušt32_t __š‹rçû_addr , 611 __cÚ¡  sockaddr * __group , 612 sockËn_t __grou¶’ , ušt32_t __fmode , 613 ušt32_t __num¤c , 614 __cÚ¡  sockaddr_¡Üage * __¦i¡ è __THROW ; 617 __END_DECLS @/usr/include/netinet/ip.h 19 #iâdeà __NETINET_IP_H 20  #__NETINET_IP_H 1 ) 22  ~<ã©u»s.h > 23  ~ 25  ~<Ãtš‘/š.h > 27 __BEGIN_DECLS 29  stime¡amp 31 u_št8_t mËn ; 32 u_št8_t m±r ; 33 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 34  mæags :4; 35  mov”æow :4; 36 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 37  mov”æow :4; 38  mæags :4; 42 u_št32_t md©a [9]; 45  shdr 47 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 48  mihl :4; 49  mv”siÚ :4; 50 #–ià __BYTE_ORDER =ð __BIG_ENDIAN 51  mv”siÚ :4; 52  mihl :4; 56 u_št8_t mtos ; 57 u_št16_t mtÙ_Ën ; 58 u_št16_t mid ; 59 u_št16_t mäag_off ; 60 u_št8_t m‰l ; 61 u_št8_t m´ÙocÞ ; 62 u_št16_t mcheck ; 63 u_št32_t m§ddr ; 64 u_št32_t mdaddr ; 68 #ifdeà __USE_BSD 108  s 110 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 111  m_hl :4; 112  m_v :4; 114 #ià __BYTE_ORDER =ð __BIG_ENDIAN 115  m_v :4; 116  m_hl :4; 118 u_št8_t m_tos ; 119 u_shÜt m_Ën ; 120 u_shÜt m_id ; 121 u_shÜt m_off ; 122  #IP_RF 0x8000 ) 123  #IP_DF 0x4000 ) 124  #IP_MF 0x2000 ) 125  #IP_OFFMASK 0x1ffà ) 126 u_št8_t m_‰l ; 127 u_št8_t m_p ; 128 u_shÜt m_sum ; 129  š_addr m_¤c , m_d¡ ; 135  s_time¡amp 137 u_št8_t mt_code ; 138 u_št8_t mt_Ën ; 139 u_št8_t mt_±r ; 140 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 141  mt_æg :4; 142  mt_oæw :4; 144 #ià __BYTE_ORDER =ð __BIG_ENDIAN 145  mt_oæw :4; 146  mt_æg :4; 148 u_št32_t md©a [9]; 152  #IPVERSION 4 ) 153  #IP_MAXPACKET 65535 ) 161  #IPTOS_ECN_MASK 0x03 ) 162  #IPTOS_ECN ( x è((xè& IPTOS_ECN_MASK ) ) 163  #IPTOS_ECN_NOT_ECT 0x00 ) 164  #IPTOS_ECN_ECT1 0x01 ) 165  #IPTOS_ECN_ECT0 0x02 ) 166  #IPTOS_ECN_CE 0x03 ) 174  #IPTOS_DSCP_MASK 0xfc ) 175  #IPTOS_DSCP ( x è((xè& IPTOS_DSCP_MASK ) ) 176  #IPTOS_DSCP_AF11 0x28 ) 177  #IPTOS_DSCP_AF12 0x30 ) 178  #IPTOS_DSCP_AF13 0x38 ) 179  #IPTOS_DSCP_AF21 0x48 ) 180  #IPTOS_DSCP_AF22 0x50 ) 181  #IPTOS_DSCP_AF23 0x58 ) 182  #IPTOS_DSCP_AF31 0x68 ) 183  #IPTOS_DSCP_AF32 0x70 ) 184  #IPTOS_DSCP_AF33 0x78 ) 185  #IPTOS_DSCP_AF41 0x88 ) 186  #IPTOS_DSCP_AF42 0x90 ) 187  #IPTOS_DSCP_AF43 0x98 ) 188  #IPTOS_DSCP_EF 0xb8 ) 195  #IPTOS_CLASS_MASK 0xe0 ) 196  #IPTOS_CLASS ( þass è((þassè& IPTOS_CLASS_MASK ) ) 197  #IPTOS_CLASS_CS0 0x00 ) 198  #IPTOS_CLASS_CS1 0x20 ) 199  #IPTOS_CLASS_CS2 0x40 ) 200  #IPTOS_CLASS_CS3 0x60 ) 201  #IPTOS_CLASS_CS4 0x80 ) 202  #IPTOS_CLASS_CS5 0xa0 ) 203  #IPTOS_CLASS_CS6 0xc0 ) 204  #IPTOS_CLASS_CS7 0xe0 ) 206  #IPTOS_CLASS_DEFAULT IPTOS_CLASS_CS0 ) 212  #IPTOS_TOS_MASK 0x1E ) 213  #IPTOS_TOS ( tos è(Ñosè& IPTOS_TOS_MASK ) ) 214  #IPTOS_LOWDELAY 0x10 ) 215  #IPTOS_THROUGHPUT 0x08 ) 216  #IPTOS_RELIABILITY 0x04 ) 217  #IPTOS_LOWCOST 0x02 ) 218  #IPTOS_MINCOST IPTOS_LOWCOST ) 223  #IPTOS_PREC_MASK IPTOS_CLASS_MASK ) 224  #IPTOS_PREC ( tos è `IPTOS_CLASS Ños) ) 225  #IPTOS_PREC_NETCONTROL IPTOS_CLASS_CS7 ) 226  #IPTOS_PREC_INTERNETCONTROL IPTOS_CLASS_CS6 ) 227  #IPTOS_PREC_CRITIC_ECP IPTOS_CLASS_CS5 ) 228  #IPTOS_PREC_FLASHOVERRIDE IPTOS_CLASS_CS4 ) 229  #IPTOS_PREC_FLASH IPTOS_CLASS_CS3 ) 230  #IPTOS_PREC_IMMEDIATE IPTOS_CLASS_CS2 ) 231  #IPTOS_PREC_PRIORITY IPTOS_CLASS_CS1 ) 232  #IPTOS_PREC_ROUTINE IPTOS_CLASS_CS0 ) 237  #IPOPT_COPY 0x80 ) 238  #IPOPT_CLASS_MASK 0x60 ) 239  #IPOPT_NUMBER_MASK 0x1f ) 241  #IPOPT_COPIED ( o è((oè& IPOPT_COPY ) ) 242  #IPOPT_CLASS ( o è((oè& IPOPT_CLASS_MASK ) ) 243  #IPOPT_NUMBER ( o è((oè& IPOPT_NUMBER_MASK ) ) 245  #IPOPT_CONTROL 0x00 ) 246  #IPOPT_RESERVED1 0x20 ) 247  #IPOPT_DEBMEAS 0x40 ) 248  #IPOPT_MEASUREMENT IPOPT_DEBMEAS ) 249  #IPOPT_RESERVED2 0x60 ) 251  #IPOPT_EOL 0 ) 252  #IPOPT_END IPOPT_EOL ) 253  #IPOPT_NOP 1 ) 254  #IPOPT_NOOP IPOPT_NOP ) 256  #IPOPT_RR 7 ) 257  #IPOPT_TS 68 ) 258  #IPOPT_TIMESTAMP IPOPT_TS ) 259  #IPOPT_SECURITY 130 ) 260  #IPOPT_SEC IPOPT_SECURITY ) 261  #IPOPT_LSRR 131 ) 262  #IPOPT_SATID 136 ) 263  #IPOPT_SID IPOPT_SATID ) 264  #IPOPT_SSRR 137 ) 265  #IPOPT_RA 148 ) 270  #IPOPT_OPTVAL 0 ) 271  #IPOPT_OLEN 1 ) 272  #IPOPT_OFFSET 2 ) 273  #IPOPT_MINOFF 4 ) 275  #MAX_IPOPTLEN 40 ) 278  #IPOPT_TS_TSONLY 0 ) 279  #IPOPT_TS_TSANDADDR 1 ) 280  #IPOPT_TS_PRESPEC 3 ) 283  #IPOPT_SECUR_UNCLASS 0x0000 ) 284  #IPOPT_SECUR_CONFID 0xf135 ) 285  #IPOPT_SECUR_EFTO 0x789a ) 286  #IPOPT_SECUR_MMMM 0xbc4d ) 287  #IPOPT_SECUR_RESTR 0xaf13 ) 288  #IPOPT_SECUR_SECRET 0xd788 ) 289  #IPOPT_SECUR_TOPSECRET 0x6bc5 ) 294  #MAXTTL 255 ) 295  #IPDEFTTL 64 ) 296  #IPFRAGTTL 60 ) 297  #IPTTLDEC 1 ) 299  #IP_MSS 576 ) 301 g__END_DECLS @/usr/include/netinet/ip6.h 19 #iâdeà _NETINET_IP6_H 20  #_NETINET_IP6_H 1 ) 22  ~<š‰y³s.h > 23  ~<Ãtš‘/š.h > 25  s6_hdr 29  s6_hdrùl 31 ušt32_t m6_un1_æow ; 33 ušt16_t m6_un1_¶’ ; 34 ušt8_t m6_un1_nxt ; 35 ušt8_t m6_un1_hlim ; 36 } m6_un1 ; 37 ušt8_t m6_un2_vfc ; 38 } m6_ùlun ; 39  š6_addr m6_¤c ; 40  š6_addr m6_d¡ ; 43  #6_vfc 6_ùlun . 6_un2_vfc ) 44  #6_æow 6_ùlun . 6_un1 . 6_un1_æow ) 45  #6_¶’ 6_ùlun . 6_un1 . 6_un1_¶’ ) 46  #6_nxt 6_ùlun . 6_un1 . 6_un1_nxt ) 47  #6_hlim 6_ùlun . 6_un1 . 6_un1_hlim ) 48  #6_hÝs 6_ùlun . 6_un1 . 6_un1_hlim ) 51  s6_ext 53 ušt8_t m6e_nxt ; 54 ušt8_t m6e_Ën ; 58  s6_hbh 60 ušt8_t m6h_nxt ; 61 ušt8_t m6h_Ën ; 66  s6_de¡ 68 ušt8_t m6d_nxt ; 69 ušt8_t m6d_Ën ; 74  s6_¹hdr 76 ušt8_t m6r_nxt ; 77 ušt8_t m6r_Ën ; 78 ušt8_t m6r_ty³ ; 79 ušt8_t m6r_£gËá ; 84  s6_¹hdr0 86 ušt8_t m6r0_nxt ; 87 ušt8_t m6r0_Ën ; 88 ušt8_t m6r0_ty³ ; 89 ušt8_t m6r0_£gËá ; 90 ušt8_t m6r0_»£rved ; 91 ušt8_t m6r0_¦m­ [3]; 93  š6_addr m6r0_addr [0]; 97  s6_äag 99 ušt8_t m6f_nxt ; 100 ušt8_t m6f_»£rved ; 101 ušt16_t m6f_ofæg ; 102 ušt32_t m6f_id’t ; 105 #ià BYTE_ORDER =ð BIG_ENDIAN 106  #IP6F_OFF_MASK 0xfff8 ) 107  #IP6F_RESERVED_MASK 0x0006 ) 108  #IP6F_MORE_FRAG 0x0001 ) 110  #IP6F_OFF_MASK 0xf8fà ) 111  #IP6F_RESERVED_MASK 0x0600 ) 112  #IP6F_MORE_FRAG 0x0100 ) 116  s6_Ýt 118 ušt8_t m6o_ty³ ; 119 ušt8_t m6o_Ën ; 126  #IP6OPT_TYPE ( o è((oè& 0xc0) ) 127  #IP6OPT_TYPE_SKIP 0x00 ) 128  #IP6OPT_TYPE_DISCARD 0x40 ) 129  #IP6OPT_TYPE_FORCEICMP 0x80 ) 130  #IP6OPT_TYPE_ICMP 0xc0 ) 131  #IP6OPT_TYPE_MUTABLE 0x20 ) 134  #IP6OPT_PAD1 0 ) 135  #IP6OPT_PADN 1 ) 137  #IP6OPT_JUMBO 0xc2 ) 138  #IP6OPT_NSAP_ADDR 0xc3 ) 139  #IP6OPT_TUNNEL_LIMIT 0x04 ) 140  #IP6OPT_ROUTER_ALERT 0x05 ) 143  s6_Ýt_jumbo 145 ušt8_t m6oj_ty³ ; 146 ušt8_t m6oj_Ën ; 147 ušt8_t m6oj_jumbo_Ën [4]; 149  #IP6OPT_JUMBO_LEN 6 ) 152  s6_Ýt_n§p 154 ušt8_t m6Ú_ty³ ; 155 ušt8_t m6Ú_Ën ; 156 ušt8_t m6Ú_¤c_n§p_Ën ; 157 ušt8_t m6Ú_d¡_n§p_Ën ; 163  s6_Ýt_tu– 165 ušt8_t m6Ù_ty³ ; 166 ušt8_t m6Ù_Ën ; 167 ušt8_t m6Ù_’ÿp_lim™ ; 171  s6_Ýt_rou‹r 173 ušt8_t m6Ü_ty³ ; 174 ušt8_t m6Ü_Ën ; 175 ušt8_t m6Ü_v®ue [2]; 179 #ià BYTE_ORDER =ð BIG_ENDIAN 180  #IP6_ALERT_MLD 0x0000 ) 181  #IP6_ALERT_RSVP 0x0001 ) 182  #IP6_ALERT_AN 0x0002 ) 184  #IP6_ALERT_MLD 0x0000 ) 185  #IP6_ALERT_RSVP 0x0100 ) 186  #IP6_ALERT_AN 0x0200 ) @/usr/include/poll.h 1  ~ @/usr/include/pthread.h 20 #iâdeà _PTHREAD_H 21  #_PTHREAD_H 1 ) 23  ~<ã©u»s.h > 24  ~<’dŸn.h > 25  ~ 26  ~ 28  ~ 29  ~ 30  ~ 36 mPTHREAD_CREATE_JOINABLE , 37  #PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE ) 38 mPTHREAD_CREATE_DETACHED 39  #PTHREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED ) 46 mPTHREAD_MUTEX_TIMED_NP , 47 mPTHREAD_MUTEX_RECURSIVE_NP , 48 mPTHREAD_MUTEX_ERRORCHECK_NP , 49 mPTHREAD_MUTEX_ADAPTIVE_NP 50 #ià defšed __USE_UNIX98 || defšed __USE_XOPEN2K8 52 mPTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP , 53 mPTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP , 54 mPTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP , 55 mPTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL 57 #ifdeà __USE_GNU 59 , mPTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP 64 #ifdeà __USE_XOPEN2K 68 mPTHREAD_MUTEX_STALLED , 69 mPTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED , 70 mPTHREAD_MUTEX_ROBUST , 71 mPTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST 76 #ifdeà __USE_UNIX98 80 mPTHREAD_PRIO_NONE , 81 mPTHREAD_PRIO_INHERIT , 82 mPTHREAD_PRIO_PROTECT 88 #ià __WORDSIZE == 64 89  #PTHREAD_MUTEX_INITIALIZER \ 90 { { 0, 0, 0, 0, 0, 0, { 0, 0 } } } ) 91 #ifdeà __USE_GNU 92  #PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ 93 { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP , 0, { 0, 0 } } } ) 94  #PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ 95 { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP , 0, { 0, 0 } } } ) 96  #PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ 97 { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP , 0, { 0, 0 } } } ) 100  #PTHREAD_MUTEX_INITIALIZER \ 101 { { 0, 0, 0, 0, 0, { 0 } } } ) 102 #ifdeà __USE_GNU 103  #PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ 104 { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP , 0, { 0 } } } ) 105  #PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ 106 { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP , 0, { 0 } } } ) 107  #PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ 108 { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP , 0, { 0 } } } ) 114 #ià defšed __USE_UNIX98 || defšed __USE_XOPEN2K 117 mPTHREAD_RWLOCK_PREFER_READER_NP , 118 mPTHREAD_RWLOCK_PREFER_WRITER_NP , 119 mPTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP , 120 mPTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP 124  #PTHREAD_RWLOCK_INITIALIZER \ 125 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } ) 126 #ifdeà __USE_GNU 127 #ià __WORDSIZE == 64 128  #PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ 130 PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } } ) 132 #ià __BYTE_ORDER =ð __LITTLE_ENDIAN 133  #PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ 134 { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP , \ 135 0, 0, 0, 0 } } ) 137  #PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ 138 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP ,\ 139 0 } } ) 149 mPTHREAD_INHERIT_SCHED , 150  #PTHREAD_INHERIT_SCHED PTHREAD_INHERIT_SCHED ) 151 mPTHREAD_EXPLICIT_SCHED 152  #PTHREAD_EXPLICIT_SCHED PTHREAD_EXPLICIT_SCHED ) 159 mPTHREAD_SCOPE_SYSTEM , 160  #PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_SYSTEM ) 161 mPTHREAD_SCOPE_PROCESS 162  #PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_PROCESS ) 169 mPTHREAD_PROCESS_PRIVATE , 170  #PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE ) 171 mPTHREAD_PROCESS_SHARED 172  #PTHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED ) 178  #PTHREAD_COND_INITIALIZER { { 0, 0, 0, 0, 0, (*è0, 0, 0 } } ) 182  s_±h»ad_þ—nup_bufãr 184 (* m__routše ) (*); 185 * m__¬g ; 186  m__ÿnûÉy³ ; 187  _±h»ad_þ—nup_bufãr * m__´ev ; 193 mPTHREAD_CANCEL_ENABLE , 194  #PTHREAD_CANCEL_ENABLE PTHREAD_CANCEL_ENABLE ) 195 mPTHREAD_CANCEL_DISABLE 196  #PTHREAD_CANCEL_DISABLE PTHREAD_CANCEL_DISABLE ) 200 mPTHREAD_CANCEL_DEFERRED , 201  #PTHREAD_CANCEL_DEFERRED PTHREAD_CANCEL_DEFERRED ) 202 mPTHREAD_CANCEL_ASYNCHRONOUS 203  #PTHREAD_CANCEL_ASYNCHRONOUS PTHREAD_CANCEL_ASYNCHRONOUS ) 205  #PTHREAD_CANCELED ((*è-1) ) 209  #PTHREAD_ONCE_INIT 0 ) 212 #ifdeà __USE_XOPEN2K 216  #PTHREAD_BARRIER_SERIAL_THREAD -1 ) 220 __BEGIN_DECLS 225  ±h»ad_ü—‹ ( ±h»ad_t * __»¡riù __Ãwth»ad , 226 __cÚ¡ ±h»ad_©Œ_t * __»¡riù __©Œ , 227 *(* __¡¬t_routše ) (*), 228 * __»¡riù __¬g è __THROWNL __nÚnuÎ ((1, 3)); 234  $±h»ad_ex™ (* __»tv® è `__©Œibu‹__ (( __nÜ‘uº__ )); 242  `±h»ad_još ( ±h»ad_t __th , ** __th»ad_»tuº ); 244 #ifdeà __USE_GNU 247  $±h»ad_Œyjoš_Å ( ±h»ad_t __th , ** __th»ad_»tuº è __THROW ; 255  `±h»ad_timedjoš_Å ( ±h»ad_t __th , ** __th»ad_»tuº , 256 __cÚ¡  time¥ec * __ab¡ime ); 263  $±h»ad_d‘ach ( ±h»ad_t __th è __THROW ; 267 ±h»ad_t $±h»ad_£lf (è __THROW `__©Œibu‹__ (( __cÚ¡__ )); 270  $±h»ad_equ® ( ±h»ad_t __th»ad1 ,…th»ad_ˆ __th»ad2 è __THROW ; 278  $±h»ad_©Œ_š™ ( ±h»ad_©Œ_t * __©Œ è __THROW `__nÚnuÎ ((1)); 281  $±h»ad_©Œ_de¡roy ( ±h»ad_©Œ_t * __©Œ ) 282 __THROW `__nÚnuÎ ((1)); 285  $±h»ad_©Œ_g‘d‘ach¡©e ( __cÚ¡ ±h»ad_©Œ_t * __©Œ , 286 * __d‘ach¡©e ) 287 __THROW `__nÚnuÎ ((1, 2)); 290  $±h»ad_©Œ_£td‘ach¡©e ( ±h»ad_©Œ_t * __©Œ , 291  __d‘ach¡©e ) 292 __THROW `__nÚnuÎ ((1)); 296  $±h»ad_©Œ_g‘gu¬dsize ( __cÚ¡ ±h»ad_©Œ_t * __©Œ , 297 size_t * __gu¬dsize ) 298 __THROW `__nÚnuÎ ((1, 2)); 301  $±h»ad_©Œ_£tgu¬dsize ( ±h»ad_©Œ_t * __©Œ , 302 size_t __gu¬dsize ) 303 __THROW `__nÚnuÎ ((1)); 307  $±h»ad_©Œ_g‘sched·¿m ( __cÚ¡ ±h»ad_©Œ_t * __»¡riù 308 __©Œ , 309  sched_·¿m * __»¡riù __·¿m ) 310 __THROW `__nÚnuÎ ((1, 2)); 313  $±h»ad_©Œ_£tsched·¿m ( ±h»ad_©Œ_t * __»¡riù __©Œ , 314 __cÚ¡  sched_·¿m * __»¡riù 315 __·¿m è __THROW `__nÚnuÎ ((1, 2)); 318  $±h»ad_©Œ_g‘schedpÞicy ( __cÚ¡ ±h»ad_©Œ_t * __»¡riù 319 __©Œ , * __»¡riù __pÞicy ) 320 __THROW `__nÚnuÎ ((1, 2)); 323  $±h»ad_©Œ_£tschedpÞicy ( ±h»ad_©Œ_t * __©Œ ,  __pÞicy ) 324 __THROW `__nÚnuÎ ((1)); 327  $±h»ad_©Œ_g‘šh”™sched ( __cÚ¡ ±h»ad_©Œ_t * __»¡riù 328 __©Œ , * __»¡riù __šh”™ ) 329 __THROW `__nÚnuÎ ((1, 2)); 332  $±h»ad_©Œ_£tšh”™sched ( ±h»ad_©Œ_t * __©Œ , 333  __šh”™ ) 334 __THROW `__nÚnuÎ ((1)); 338  $±h»ad_©Œ_g‘scÝe ( __cÚ¡ ±h»ad_©Œ_t * __»¡riù __©Œ , 339 * __»¡riù __scÝe ) 340 __THROW `__nÚnuÎ ((1, 2)); 343  $±h»ad_©Œ_£tscÝe ( ±h»ad_©Œ_t * __©Œ ,  __scÝe ) 344 __THROW `__nÚnuÎ ((1)); 347  $±h»ad_©Œ_g‘¡ackaddr ( __cÚ¡ ±h»ad_©Œ_t * __»¡riù 348 __©Œ , ** __»¡riù __¡ackaddr ) 349 __THROW `__nÚnuÎ ((1, 2)è __©Œibu‹_d•»ÿ‹d__ ; 355  $±h»ad_©Œ_£t¡ackaddr ( ±h»ad_©Œ_t * __©Œ , 356 * __¡ackaddr ) 357 __THROW `__nÚnuÎ ((1)è __©Œibu‹_d•»ÿ‹d__ ; 360  $±h»ad_©Œ_g‘¡acksize ( __cÚ¡ ±h»ad_©Œ_t * __»¡riù 361 __©Œ , size_t * __»¡riù __¡acksize ) 362 __THROW `__nÚnuÎ ((1, 2)); 367  $±h»ad_©Œ_£t¡acksize ( ±h»ad_©Œ_t * __©Œ , 368 size_t __¡acksize ) 369 __THROW `__nÚnuÎ ((1)); 371 #ifdeà __USE_XOPEN2K 373  $±h»ad_©Œ_g‘¡ack ( __cÚ¡ ±h»ad_©Œ_t * __»¡riù __©Œ , 374 ** __»¡riù __¡ackaddr , 375 size_t * __»¡riù __¡acksize ) 376 __THROW `__nÚnuÎ ((1, 2, 3)); 381  $±h»ad_©Œ_£t¡ack ( ±h»ad_©Œ_t * __©Œ , * __¡ackaddr , 382 size_t __¡acksize è __THROW `__nÚnuÎ ((1)); 385 #ifdeà __USE_GNU 388  $±h»ad_©Œ_£ffš™y_Å ( ±h»ad_©Œ_t * __©Œ , 389 size_t __ýu£tsize , 390 __cÚ¡ ýu_£t_t * __ýu£t ) 391 __THROW `__nÚnuÎ ((1, 3)); 395  $±h»ad_©Œ_g‘affš™y_Å ( __cÚ¡ ±h»ad_©Œ_t * __©Œ , 396 size_t __ýu£tsize , 397 ýu_£t_t * __ýu£t ) 398 __THROW `__nÚnuÎ ((1, 3)); 404  $±h»ad_g‘©Œ_Å ( ±h»ad_t __th , ±h»ad_©Œ_t * __©Œ ) 405 __THROW `__nÚnuÎ ((2)); 413  $±h»ad_£tsched·¿m ( ±h»ad_t __rg‘_th»ad ,  __pÞicy , 414 __cÚ¡  sched_·¿m * __·¿m ) 415 __THROW `__nÚnuÎ ((3)); 418  $±h»ad_g‘sched·¿m ( ±h»ad_t __rg‘_th»ad , 419 * __»¡riù __pÞicy , 420  sched_·¿m * __»¡riù __·¿m ) 421 __THROW `__nÚnuÎ ((2, 3)); 424  $±h»ad_£tsched´io ( ±h»ad_t __rg‘_th»ad ,  __´io ) 425 __THROW ; 428 #ifdeà __USE_GNU 430  $±h»ad_g‘Çme_Å ( ±h»ad_t __rg‘_th»ad , * __buf , 431 size_t __buæ’ ) 432 __THROW `__nÚnuÎ ((2)); 435  $±h»ad_£Šame_Å ( ±h»ad_t __rg‘_th»ad , __cÚ¡ * __Çme ) 436 __THROW `__nÚnuÎ ((2)); 440 #ifdeà __USE_UNIX98 442  $±h»ad_g‘cÚcu¼’cy (è __THROW ; 445  $±h»ad_£tcÚcu¼’cy ( __Ëv– è __THROW ; 448 #ifdeà __USE_GNU 453  $±h»ad_y›ld (è __THROW ; 458  $±h»ad_£ffš™y_Å ( ±h»ad_t __th , size_t __ýu£tsize , 459 __cÚ¡ ýu_£t_t * __ýu£t ) 460 __THROW `__nÚnuÎ ((3)); 463  $±h»ad_g‘affš™y_Å ( ±h»ad_t __th , size_t __ýu£tsize , 464 ýu_£t_t * __ýu£t ) 465 __THROW `__nÚnuÎ ((3)); 478  `±h»ad_Úû ( ±h»ad_Úû_t * __Úû_cÚŒÞ , 479 (* __š™_routše è()è `__nÚnuÎ ((1, 2)); 490  `±h»ad_£tÿnûl¡©e ( __¡©e , * __Þd¡©e ); 494  `±h»ad_£tÿnûÉy³ ( __ty³ , * __Þdty³ ); 497  `±h»ad_ÿnûl ( ±h»ad_t __th ); 502  `±h»ad_‹¡ÿnûl (); 511 __jmp_buf __ÿnûl_jmp_buf ; 512  __mask_was_§ved ; 513 } __ÿnûl_jmp_buf [1]; 514 * __·d [4]; 515 } t__±h»ad_unwšd_buf_t t__©Œibu‹__ (( t__®igÃd__ )); 518 #iâdeà __þ—nup_fù_©Œibu‹ 519  #__þ—nup_fù_©Œibu‹ ) 524  s__±h»ad_þ—nup_äame 526 (* __ÿnûl_routše ) (*); 527 * __ÿnûl_¬g ; 528  __do_™ ; 529  __ÿnûl_ty³ ; 532 #ià defšed __GNUC__ && defšed __EXCEPTIONS 533 #ifdeà __ýlu¥lus 535 þas  c__±h»ad_þ—nup_þass 537 (* __ÿnûl_routše ) (*); 538 * __ÿnûl_¬g ; 539  __do_™ ; 540  __ÿnûl_ty³ ; 542 public : 543 `__±h»ad_þ—nup_þass ((* __fù è(*), * __¬g ) 544 : `__ÿnûl_routše ( __fù ), `__ÿnûl_¬g ( __¬g ), $__do_™ (1) { } 545 ~ $__±h»ad_þ—nup_þass (è{ ià( __do_™ è `__ÿnûl_routše ( __ÿnûl_¬g ); } } 546  $__£tdo™ ( __Ãwv® è{ __do_™ = __Ãwv®; } } 547  $__deãr (è{ `±h»ad_£tÿnûÉy³ ( PTHREAD_CANCEL_DEFERRED , 548 & __ÿnûl_ty³ ); } } 549  $__»¡Üe (ècÚ¡ { `±h»ad_£tÿnûÉy³ ( __ÿnûl_ty³ , 0); } } 559  #±h»ad_þ—nup_push ( routše , ¬g ) \ 561 __±h»ad_þ—nup_þass `__þäame ( routše , ¬g ) ) 565  #±h»ad_þ—nup_pÝ ( execu‹ ) \ 566 __þäame . `__£tdo™ ( execu‹ ); \ 567 } 0) ) 569 #ifdeà __USE_GNU 573  #±h»ad_þ—nup_push_deãr_Å ( routše , ¬g ) \ 575 __±h»ad_þ—nup_þass `__þäame ( routše , ¬g ); \ 576 __þäame . `__deãr () ) 581  #±h»ad_þ—nup_pÝ_»¡Üe_Å ( execu‹ ) \ 582 __þäame . `__»¡Üe (); \ 583 __þäame . `__£tdo™ ( execu‹ ); \ 584 } 0) ) 591 __ex‹º_šlše  592 $__±h»ad_þ—nup_routše ( __±h»ad_þ—nup_äame * __äame ) 594 ià( __äame -> __do_™ ) 595 __äame -> `__ÿnûl_routše (__äame-> __ÿnûl_¬g ); 596 } } 605  #±h»ad_þ—nup_push ( routše , ¬g ) \ 607  __±h»ad_þ—nup_äame __þäame \ 608 `__©Œibu‹__ (( `__þ—nup__ ( __±h»ad_þ—nup_routše ))) \ 609 ð{ . __ÿnûl_routše = ( routše ), . __ÿnûl_¬g = ( ¬g ), \ 610 . __do_™ = 1 }; ) 614  #±h»ad_þ—nup_pÝ ( execu‹ ) \ 615 __þäame . __do_™ = ( execu‹ ); \ 616 } 0) ) 618 #ifdeà __USE_GNU 622  #±h»ad_þ—nup_push_deãr_Å ( routše , ¬g ) \ 624  __±h»ad_þ—nup_äame __þäame \ 625 `__©Œibu‹__ (( `__þ—nup__ ( __±h»ad_þ—nup_routše ))) \ 626 ð{ . __ÿnûl_routše = ( routše ), . __ÿnûl_¬g = ( ¬g ), \ 627 . __do_™ = 1 }; \ 628 (è `±h»ad_£tÿnûÉy³ ( PTHREAD_CANCEL_DEFERRED , \ 629 & __þäame . __ÿnûl_ty³ ) ) 634  #±h»ad_þ—nup_pÝ_»¡Üe_Å ( execu‹ ) \ 635 (è `±h»ad_£tÿnûÉy³ ( __þäame . __ÿnûl_ty³ , NULL ); \ 636 __þäame . __do_™ = ( execu‹ ); \ 637 } 0) ) 648  #±h»ad_þ—nup_push ( routše , ¬g ) \ 650 __±h»ad_unwšd_buf_t __ÿnûl_buf ; \ 651 (* __ÿnûl_routše è(*èð( routše ); \ 652 * __ÿnûl_¬g = ( ¬g ); \ 653  __nÙ_fœ¡_ÿÎ = `__sig£tjmp (( __jmp_buf_g *) (*) \ 654 __ÿnûl_buf . __ÿnûl_jmp_buf , 0); \ 655 ià( `__bužtš_ex³ù ( __nÙ_fœ¡_ÿÎ , 0)) \ 657 `__ÿnûl_routše ( __ÿnûl_¬g ); \ 658 `__±h»ad_unwšd_Ãxt (& __ÿnûl_buf ); \ 662 `__±h»ad_»gi¡”_ÿnûl (& __ÿnûl_buf ); \ 663 dØ{ ) 664  __±h»ad_»gi¡”_ÿnûl ( __±h»ad_unwšd_buf_t * __buf ) 665 __þ—nup_fù_©Œibu‹ ; 669  #±h»ad_þ—nup_pÝ ( execu‹ ) \ 672 `__±h»ad_uÄegi¡”_ÿnûl (& __ÿnûl_buf ); \ 673 ià( execu‹ ) \ 674 `__ÿnûl_routše ( __ÿnûl_¬g ); \ 675 } 0) ) 676  $__±h»ad_uÄegi¡”_ÿnûl ( __±h»ad_unwšd_buf_t * __buf ) 677 __þ—nup_fù_©Œibu‹ ; 679 #ifdeà __USE_GNU 683  #±h»ad_þ—nup_push_deãr_Å ( routše , ¬g ) \ 685 __±h»ad_unwšd_buf_t __ÿnûl_buf ; \ 686 (* __ÿnûl_routše è(*èð( routše ); \ 687 * __ÿnûl_¬g = ( ¬g ); \ 688  __nÙ_fœ¡_ÿÎ = `__sig£tjmp (( __jmp_buf_g *) (*) \ 689 __ÿnûl_buf . __ÿnûl_jmp_buf , 0); \ 690 ià( `__bužtš_ex³ù ( __nÙ_fœ¡_ÿÎ , 0)) \ 692 `__ÿnûl_routše ( __ÿnûl_¬g ); \ 693 `__±h»ad_unwšd_Ãxt (& __ÿnûl_buf ); \ 697 `__±h»ad_»gi¡”_ÿnûl_deãr (& __ÿnûl_buf ); \ 698 dØ{ ) 699  `__±h»ad_»gi¡”_ÿnûl_deãr ( __±h»ad_unwšd_buf_t * __buf ) 700 __þ—nup_fù_©Œibu‹ ; 705  #±h»ad_þ—nup_pÝ_»¡Üe_Å ( execu‹ ) \ 708 `__±h»ad_uÄegi¡”_ÿnûl_»¡Üe (& __ÿnûl_buf ); \ 709 ià( execu‹ ) \ 710 `__ÿnûl_routše ( __ÿnûl_¬g ); \ 711 } } 0) ) 712  $__±h»ad_uÄegi¡”_ÿnûl_»¡Üe ( __±h»ad_unwšd_buf_t * __buf ) 713 __þ—nup_fù_©Œibu‹ ; 717  $__±h»ad_unwšd_Ãxt ( __±h»ad_unwšd_buf_t * __buf ) 718 __þ—nup_fù_©Œibu‹ `__©Œibu‹__ (( __nÜ‘uº__ )) 719 #iâdeà SHARED 720 `__©Œibu‹__ (( __w—k__ )) 726  __jmp_buf_g ; 727  $__sig£tjmp ( __jmp_buf_g * __’v ,  __§vemask è __THROW ; 733  $±h»ad_mu‹x_š™ ( ±h»ad_mu‹x_t * __mu‹x , 734 __cÚ¡ ±h»ad_mu‹x©Œ_t * __mu‹x©Œ ) 735 __THROW `__nÚnuÎ ((1)); 738  $±h»ad_mu‹x_de¡roy ( ±h»ad_mu‹x_t * __mu‹x ) 739 __THROW `__nÚnuÎ ((1)); 742  $±h»ad_mu‹x_Œylock ( ±h»ad_mu‹x_t * __mu‹x ) 743 __THROWNL `__nÚnuÎ ((1)); 746  $±h»ad_mu‹x_lock ( ±h»ad_mu‹x_t * __mu‹x ) 747 __THROWNL `__nÚnuÎ ((1)); 749 #ifdeà __USE_XOPEN2K 751  $±h»ad_mu‹x_timedlock ( ±h»ad_mu‹x_t * __»¡riù __mu‹x , 752 __cÚ¡  time¥ec * __»¡riù 753 __ab¡ime è __THROWNL `__nÚnuÎ ((1, 2)); 757  $±h»ad_mu‹x_uÆock ( ±h»ad_mu‹x_t * __mu‹x ) 758 __THROWNL `__nÚnuÎ ((1)); 762  $±h»ad_mu‹x_g‘´ioûžšg ( __cÚ¡ ±h»ad_mu‹x_t * 763 __»¡riù __mu‹x , 764 * __»¡riù __´ioûžšg ) 765 __THROW `__nÚnuÎ ((1, 2)); 769  $±h»ad_mu‹x_£rioûžšg ( ±h»ad_mu‹x_t * __»¡riù __mu‹x , 770  __´ioûžšg , 771 * __»¡riù __Þd_ûžšg ) 772 __THROW `__nÚnuÎ ((1, 3)); 775 #ifdeà __USE_XOPEN2K8 777  $±h»ad_mu‹x_cÚsi¡’t ( ±h»ad_mu‹x_t * __mu‹x ) 778 __THROW `__nÚnuÎ ((1)); 779 #ifdeà __USE_GNU 780  $±h»ad_mu‹x_cÚsi¡’t_Å ( ±h»ad_mu‹x_t * __mu‹x ) 781 __THROW `__nÚnuÎ ((1)); 790  $±h»ad_mu‹x©Œ_š™ ( ±h»ad_mu‹x©Œ_t * __©Œ ) 791 __THROW `__nÚnuÎ ((1)); 794  $±h»ad_mu‹x©Œ_de¡roy ( ±h»ad_mu‹x©Œ_t * __©Œ ) 795 __THROW `__nÚnuÎ ((1)); 798  $±h»ad_mu‹x©Œ_g‘psh¬ed ( __cÚ¡ ±h»ad_mu‹x©Œ_t * 799 __»¡riù __©Œ , 800 * __»¡riù __psh¬ed ) 801 __THROW `__nÚnuÎ ((1, 2)); 804  $±h»ad_mu‹x©Œ_£sh¬ed ( ±h»ad_mu‹x©Œ_t * __©Œ , 805  __psh¬ed ) 806 __THROW `__nÚnuÎ ((1)); 808 #ià defšed __USE_UNIX98 || defšed __USE_XOPEN2K8 810  $±h»ad_mu‹x©Œ_g‘ty³ ( __cÚ¡ ±h»ad_mu‹x©Œ_t * __»¡riù 811 __©Œ , * __»¡riù __kšd ) 812 __THROW `__nÚnuÎ ((1, 2)); 817  $±h»ad_mu‹x©Œ_£‰y³ ( ±h»ad_mu‹x©Œ_t * __©Œ ,  __kšd ) 818 __THROW `__nÚnuÎ ((1)); 822  $±h»ad_mu‹x©Œ_g‘´ÙocÞ ( __cÚ¡ ±h»ad_mu‹x©Œ_t * 823 __»¡riù __©Œ , 824 * __»¡riù __´ÙocÞ ) 825 __THROW `__nÚnuÎ ((1, 2)); 829  $±h»ad_mu‹x©Œ_£rÙocÞ ( ±h»ad_mu‹x©Œ_t * __©Œ , 830  __´ÙocÞ ) 831 __THROW `__nÚnuÎ ((1)); 834  $±h»ad_mu‹x©Œ_g‘´ioûžšg ( __cÚ¡ ±h»ad_mu‹x©Œ_t * 835 __»¡riù __©Œ , 836 * __»¡riù __´ioûžšg ) 837 __THROW `__nÚnuÎ ((1, 2)); 840  $±h»ad_mu‹x©Œ_£rioûžšg ( ±h»ad_mu‹x©Œ_t * __©Œ , 841  __´ioûžšg ) 842 __THROW `__nÚnuÎ ((1)); 844 #ifdeà __USE_XOPEN2K 846  $±h»ad_mu‹x©Œ_g‘robu¡ ( __cÚ¡ ±h»ad_mu‹x©Œ_t * __©Œ , 847 * __robu¡Ãss ) 848 __THROW `__nÚnuÎ ((1, 2)); 849 #ifdeà __USE_GNU 850  $±h»ad_mu‹x©Œ_g‘robu¡_Å ( __cÚ¡ ±h»ad_mu‹x©Œ_t * __©Œ , 851 * __robu¡Ãss ) 852 __THROW `__nÚnuÎ ((1, 2)); 856  $±h»ad_mu‹x©Œ_£Œobu¡ ( ±h»ad_mu‹x©Œ_t * __©Œ , 857  __robu¡Ãss ) 858 __THROW `__nÚnuÎ ((1)); 859 #ifdeà __USE_GNU 860  $±h»ad_mu‹x©Œ_£Œobu¡_Å ( ±h»ad_mu‹x©Œ_t * __©Œ , 861  __robu¡Ãss ) 862 __THROW `__nÚnuÎ ((1)); 867 #ià defšed __USE_UNIX98 || defšed __USE_XOPEN2K 872  $±h»ad_rwlock_š™ ( ±h»ad_rwlock_t * __»¡riù __rwlock , 873 __cÚ¡ ±h»ad_rwlock©Œ_t * __»¡riù 874 __©Œ è __THROW `__nÚnuÎ ((1)); 877  $±h»ad_rwlock_de¡roy ( ±h»ad_rwlock_t * __rwlock ) 878 __THROW `__nÚnuÎ ((1)); 881  $±h»ad_rwlock_rdlock ( ±h»ad_rwlock_t * __rwlock ) 882 __THROWNL `__nÚnuÎ ((1)); 885  $±h»ad_rwlock_Œyrdlock ( ±h»ad_rwlock_t * __rwlock ) 886 __THROWNL `__nÚnuÎ ((1)); 888 #ifdeà __USE_XOPEN2K 890  $±h»ad_rwlock_timedrdlock ( ±h»ad_rwlock_t * __»¡riù __rwlock , 891 __cÚ¡  time¥ec * __»¡riù 892 __ab¡ime è __THROWNL `__nÚnuÎ ((1, 2)); 896  $±h»ad_rwlock_w¾ock ( ±h»ad_rwlock_t * __rwlock ) 897 __THROWNL `__nÚnuÎ ((1)); 900  $±h»ad_rwlock_Œyw¾ock ( ±h»ad_rwlock_t * __rwlock ) 901 __THROWNL `__nÚnuÎ ((1)); 903 #ifdeà __USE_XOPEN2K 905  $±h»ad_rwlock_timedw¾ock ( ±h»ad_rwlock_t * __»¡riù __rwlock , 906 __cÚ¡  time¥ec * __»¡riù 907 __ab¡ime è __THROWNL `__nÚnuÎ ((1, 2)); 911  $±h»ad_rwlock_uÆock ( ±h»ad_rwlock_t * __rwlock ) 912 __THROWNL `__nÚnuÎ ((1)); 918  $±h»ad_rwlock©Œ_š™ ( ±h»ad_rwlock©Œ_t * __©Œ ) 919 __THROW `__nÚnuÎ ((1)); 922  $±h»ad_rwlock©Œ_de¡roy ( ±h»ad_rwlock©Œ_t * __©Œ ) 923 __THROW `__nÚnuÎ ((1)); 926  $±h»ad_rwlock©Œ_g‘psh¬ed ( __cÚ¡ ±h»ad_rwlock©Œ_t * 927 __»¡riù __©Œ , 928 * __»¡riù __psh¬ed ) 929 __THROW `__nÚnuÎ ((1, 2)); 932  $±h»ad_rwlock©Œ_£sh¬ed ( ±h»ad_rwlock©Œ_t * __©Œ , 933  __psh¬ed ) 934 __THROW `__nÚnuÎ ((1)); 937  $±h»ad_rwlock©Œ_g‘kšd_Å ( __cÚ¡ ±h»ad_rwlock©Œ_t * 938 __»¡riù __©Œ , 939 * __»¡riù __´ef ) 940 __THROW `__nÚnuÎ ((1, 2)); 943  $±h»ad_rwlock©Œ_£tkšd_Å ( ±h»ad_rwlock©Œ_t * __©Œ , 944  __´ef è __THROW `__nÚnuÎ ((1)); 952  $±h»ad_cÚd_š™ ( ±h»ad_cÚd_t * __»¡riù __cÚd , 953 __cÚ¡ ±h»ad_cÚd©Œ_t * __»¡riù 954 __cÚd_©Œ è __THROW `__nÚnuÎ ((1)); 957  $±h»ad_cÚd_de¡roy ( ±h»ad_cÚd_t * __cÚd ) 958 __THROW `__nÚnuÎ ((1)); 961  $±h»ad_cÚd_sigÇl ( ±h»ad_cÚd_t * __cÚd ) 962 __THROWNL `__nÚnuÎ ((1)); 965  $±h»ad_cÚd_brßdÿ¡ ( ±h»ad_cÚd_t * __cÚd ) 966 __THROWNL `__nÚnuÎ ((1)); 973  $±h»ad_cÚd_wa™ ( ±h»ad_cÚd_t * __»¡riù __cÚd , 974 ±h»ad_mu‹x_t * __»¡riù __mu‹x ) 975 `__nÚnuÎ ((1, 2)); 984  $±h»ad_cÚd_timedwa™ ( ±h»ad_cÚd_t * __»¡riù __cÚd , 985 ±h»ad_mu‹x_t * __»¡riù __mu‹x , 986 __cÚ¡  time¥ec * __»¡riù 987 __ab¡ime è `__nÚnuÎ ((1, 2, 3)); 992  $±h»ad_cÚd©Œ_š™ ( ±h»ad_cÚd©Œ_t * __©Œ ) 993 __THROW `__nÚnuÎ ((1)); 996  $±h»ad_cÚd©Œ_de¡roy ( ±h»ad_cÚd©Œ_t * __©Œ ) 997 __THROW `__nÚnuÎ ((1)); 1000  $±h»ad_cÚd©Œ_g‘psh¬ed ( __cÚ¡ ±h»ad_cÚd©Œ_t * 1001 __»¡riù __©Œ , 1002 * __»¡riù __psh¬ed ) 1003 __THROW `__nÚnuÎ ((1, 2)); 1006  $±h»ad_cÚd©Œ_£sh¬ed ( ±h»ad_cÚd©Œ_t * __©Œ , 1007  __psh¬ed è __THROW `__nÚnuÎ ((1)); 1009 #ifdeà __USE_XOPEN2K 1011  $±h»ad_cÚd©Œ_g‘þock ( __cÚ¡ ±h»ad_cÚd©Œ_t * 1012 __»¡riù __©Œ , 1013 __þockid_t * __»¡riù __þock_id ) 1014 __THROW `__nÚnuÎ ((1, 2)); 1017  $±h»ad_cÚd©Œ_£tþock ( ±h»ad_cÚd©Œ_t * __©Œ , 1018 __þockid_t __þock_id ) 1019 __THROW `__nÚnuÎ ((1)); 1023 #ifdeà __USE_XOPEN2K 1028  $±h»ad_¥š_š™ ( ±h»ad_¥šlock_t * __lock ,  __psh¬ed ) 1029 __THROW `__nÚnuÎ ((1)); 1032  $±h»ad_¥š_de¡roy ( ±h»ad_¥šlock_t * __lock ) 1033 __THROW `__nÚnuÎ ((1)); 1036  $±h»ad_¥š_lock ( ±h»ad_¥šlock_t * __lock ) 1037 __THROWNL `__nÚnuÎ ((1)); 1040  $±h»ad_¥š_Œylock ( ±h»ad_¥šlock_t * __lock ) 1041 __THROWNL `__nÚnuÎ ((1)); 1044  $±h»ad_¥š_uÆock ( ±h»ad_¥šlock_t * __lock ) 1045 __THROWNL `__nÚnuÎ ((1)); 1052  $±h»ad_b¬r›r_š™ ( ±h»ad_b¬r›r_t * __»¡riù __b¬r›r , 1053 __cÚ¡ ±h»ad_b¬r›¿‰r_t * __»¡riù 1054 __©Œ ,  __couÁ ) 1055 __THROW `__nÚnuÎ ((1)); 1058  $±h»ad_b¬r›r_de¡roy ( ±h»ad_b¬r›r_t * __b¬r›r ) 1059 __THROW `__nÚnuÎ ((1)); 1062  $±h»ad_b¬r›r_wa™ ( ±h»ad_b¬r›r_t * __b¬r›r ) 1063 __THROWNL `__nÚnuÎ ((1)); 1067  $±h»ad_b¬r›¿‰r_š™ ( ±h»ad_b¬r›¿‰r_t * __©Œ ) 1068 __THROW `__nÚnuÎ ((1)); 1071  $±h»ad_b¬r›¿‰r_de¡roy ( ±h»ad_b¬r›¿‰r_t * __©Œ ) 1072 __THROW `__nÚnuÎ ((1)); 1075  $±h»ad_b¬r›¿‰r_g‘psh¬ed ( __cÚ¡ ±h»ad_b¬r›¿‰r_t * 1076 __»¡riù __©Œ , 1077 * __»¡riù __psh¬ed ) 1078 __THROW `__nÚnuÎ ((1, 2)); 1081  $±h»ad_b¬r›¿‰r_£sh¬ed ( ±h»ad_b¬r›¿‰r_t * __©Œ , 1082  __psh¬ed ) 1083 __THROW `__nÚnuÎ ((1)); 1095  `±h»ad_key_ü—‹ ( ±h»ad_key_t * __key , 1096 (* __de¡r_funùiÚ ) (*)) 1097 __THROW `__nÚnuÎ ((1)); 1100  $±h»ad_key_d–‘e ( ±h»ad_key_t __key è __THROW ; 1103 * $±h»ad_g‘¥ecific ( ±h»ad_key_t __key è __THROW ; 1106  $±h»ad_£t¥ecific ( ±h»ad_key_t __key , 1107 __cÚ¡ * __poš‹r è __THROW ; 1110 #ifdeà __USE_XOPEN2K 1112  $±h»ad_g‘ýuþockid ( ±h»ad_t __th»ad_id , 1113 __þockid_t * __þock_id ) 1114 __THROW `__nÚnuÎ ((2)); 1129  `±h»ad_©fÜk ((* __´•¬e ) (), 1130 (* __·»Á ) (), 1131 (* __chžd è()è __THROW ; 1134 #ifdeà __USE_EXTERN_INLINES 1136 __ex‹º_šlše  1137 `__NTH ( $±h»ad_equ® ( ±h»ad_t __th»ad1 ,…th»ad_ˆ __th»ad2 )) 1139  __th»ad1 =ð __th»ad2 ; 1140 } } 1143 g__END_DECLS @/usr/include/signal.h 23 #iâdef _SIGNAL_H 25 #ià! defšed __Ãed_sig_©omic_t && !defšed __Ãed_sig£t_t 26  #_SIGNAL_H ) 29  ~<ã©u»s.h > 31 g__BEGIN_DECLS 33  ~ 37 #ià defšed __Ãed_sig_©omic_t || defšed _SIGNAL_H 38 #iâdeà __sig_©omic_t_defšed 39  #__sig_©omic_t_defšed ) 40 __BEGIN_NAMESPACE_STD 41  __sig_©omic_t tsig_©omic_t ; 42 g__END_NAMESPACE_STD 44 #undeà __Ãed_sig_©omic_t 47 #ià defšed __Ãed_sig£t_t || (defšed _SIGNAL_H && defšed __USE_POSIX ) 48 #iâdeà __sig£t_t_defšed 49  #__sig£t_t_defšed ) 50  __sig£t_t tsig£t_t ; 52 #undeà __Ãed_sig£t_t 55 #ifdeà _SIGNAL_H 57  ~ 58  ~ 60 #ià defšed __USE_XOPEN || defšed __USE_XOPEN2K 61 #iâdeà __pid_t_defšed 62  __pid_t tpid_t ; 63  #__pid_t_defšed ) 65 #ifdeà __USE_XOPEN 67 #iâdeà __uid_t_defšed 68  __uid_t tuid_t ; 69  #__uid_t_defšed ) 73 #ifdeà __USE_POSIX199309 75  #__Ãed_time¥ec ) 76  ~ 79  ~ 84 (* t__sighªdËr_t ) (); 89 __sighªdËr_t $__sysv_sigÇl ( __sig , __sighªdËr_t __hªdËr ) 90 __THROW ; 91 #ifdeà __USE_GNU 92 __sighªdËr_t $sysv_sigÇl ( __sig , __sighªdËr_t __hªdËr ) 93 __THROW ; 99 __BEGIN_NAMESPACE_STD 100 #ifdeà __USE_BSD 101 __sighªdËr_t $sigÇl ( __sig , __sighªdËr_t __hªdËr ) 102 __THROW ; 105 #ifdeà __REDIRECT_NTH 106 __sighªdËr_t `__REDIRECT_NTH ( sigÇl , 107 ( __sig , __sighªdËr_t __hªdËr ), 108 __sysv_sigÇl ); 110  #sigÇl __sysv_sigÇl ) 113 __END_NAMESPACE_STD 115 #ifdeà __USE_XOPEN 118 __sighªdËr_t $bsd_sigÇl ( __sig , __sighªdËr_t __hªdËr ) 119 __THROW ; 125 #ifdeà __USE_POSIX 126  $kžl ( __pid_t __pid ,  __sig è __THROW ; 129 #ià defšed __USE_BSD || defšed __USE_XOPEN_EXTENDED 133  $kžÍg ( __pid_t __pg½ ,  __sig è __THROW ; 136 __BEGIN_NAMESPACE_STD 138  $¿i£ ( __sig è __THROW ; 139 __END_NAMESPACE_STD 141 #ifdeà __USE_SVID 143 __sighªdËr_t $ssigÇl ( __sig , __sighªdËr_t __hªdËr ) 144 __THROW ; 145  $gsigÇl ( __sig è __THROW ; 148 #ià defšed __USE_MISC || defšed __USE_XOPEN2K 150  `psigÇl ( __sig , __cÚ¡ * __s ); 153 #ifdeà __USE_XOPEN2K 155  `psigšfo ( __cÚ¡ sigšfo_t * __pšfo , __cÚ¡ * __s ); 168  `__sig·u£ ( __sig_Ü_mask ,  __is_sig ); 170 #ifdeà __FAVOR_BSD 173  $sig·u£ ( __mask è __THROW __©Œibu‹_d•»ÿ‹d__ ; 175 #ifdeà __USE_XOPEN 176 #ifdeà __GNUC__ 177  $sig·u£ ( __sig è `__asm__ ("__xpg_sigpause"); 180  #sig·u£ ( sig è `__sig·u£ ((sig), 1) ) 186 #ifdeà __USE_BSD 193  #sigmask ( sig è `__sigmask (sig) ) 196  $sigblock ( __mask è __THROW __©Œibu‹_d•»ÿ‹d__ ; 199  $sig£tmask ( __mask è __THROW __©Œibu‹_d•»ÿ‹d__ ; 202  $sigg‘mask (è __THROW __©Œibu‹_d•»ÿ‹d__ ; 206 #ifdeà __USE_MISC 207  #NSIG _NSIG ) 210 #ifdeà __USE_GNU 211  __sighªdËr_t tsighªdËr_t ; 215 #ifdeà __USE_BSD 216  __sighªdËr_t tsig_t ; 219 #ifdeà __USE_POSIX 222  $sigem±y£t ( sig£t_t * __£t è __THROW `__nÚnuÎ ((1)); 225  $sigfžl£t ( sig£t_t * __£t è __THROW `__nÚnuÎ ((1)); 228  $sigadd£t ( sig£t_t * __£t ,  __signo è __THROW `__nÚnuÎ ((1)); 231  $sigd–£t ( sig£t_t * __£t ,  __signo è __THROW `__nÚnuÎ ((1)); 234  $sigismemb” ( __cÚ¡ sig£t_t * __£t ,  __signo ) 235 __THROW `__nÚnuÎ ((1)); 237 #ifdeà __USE_GNU 239  $sigi£m±y£t ( __cÚ¡ sig£t_t * __£t è __THROW `__nÚnuÎ ((1)); 242  $sigªd£t ( sig£t_t * __£t , __cÚ¡ sig£t_ˆ* __Ëá , 243 __cÚ¡ sig£t_t * __right è __THROW `__nÚnuÎ ((1, 2, 3)); 246  $sigÜ£t ( sig£t_t * __£t , __cÚ¡ sig£t_ˆ* __Ëá , 247 __cÚ¡ sig£t_t * __right è __THROW `__nÚnuÎ ((1, 2, 3)); 252  ~ 255  $sig´ocmask ( __how , __cÚ¡ sig£t_t * __»¡riù __£t , 256 sig£t_t * __»¡riù __o£t è __THROW ; 263  $sigsu¥’d ( __cÚ¡ sig£t_t * __£t è `__nÚnuÎ ((1)); 266  $sigaùiÚ ( __sig , __cÚ¡  sigaùiÚ * __»¡riù __aù , 267  sigaùiÚ * __»¡riù __ßù è __THROW ; 270  $sig³ndšg ( sig£t_t * __£t è __THROW `__nÚnuÎ ((1)); 277  $sigwa™ ( __cÚ¡ sig£t_t * __»¡riù __£t , *__»¡riù __sig ) 278 `__nÚnuÎ ((1, 2)); 280 #ifdeà __USE_POSIX199309 285  $sigwa™šfo ( __cÚ¡ sig£t_t * __»¡riù __£t , 286 sigšfo_t * __»¡riù __šfo è `__nÚnuÎ ((1)); 293  $sigtimedwa™ ( __cÚ¡ sig£t_t * __»¡riù __£t , 294 sigšfo_t * __»¡riù __šfo , 295 __cÚ¡  time¥ec * __»¡riù __timeout ) 296 `__nÚnuÎ ((1)); 300  $sigqueue ( __pid_t __pid ,  __sig , __cÚ¡  sigv® __v® ) 301 __THROW ; 306 #ifdeà __USE_BSD 310 __cÚ¡ *__cÚ¡ _sys_sigli¡ [ _NSIG ]; 311 __cÚ¡ *__cÚ¡ sys_sigli¡ [ _NSIG ]; 314  ssigvec 316 __sighªdËr_t sv_hªdËr ; 317  sv_mask ; 319  sv_æags ; 320  #sv_Ú¡ack sv_æags ) 324  #SV_ONSTACK (1 << 0) ) 325  #SV_INTERRUPT (1 << 1) ) 326  #SV_RESETHAND (1 << 2) ) 334  $sigvec ( __sig , __cÚ¡  sigvec * __vec , 335  sigvec * __ovec è __THROW ; 339  ~ 342  $sig»tuº ( sigcÚ‹xt * __sý è __THROW ; 347 #ià defšed __USE_BSD || defšed __USE_XOPEN_EXTENDED || defšed __USE_XOPEN2K8 348  #__Ãed_size_t ) 349  ~<¡ddef.h > 354  $sigš‹¼u± ( __sig ,  __š‹¼u± è __THROW ; 356  ~ 357 #ià defšed __USE_XOPEN || defšed __USE_XOPEN2K8 359  ~ 365  $sig¡ack ( sig¡ack * __ss , sig¡ack * __oss ) 366 __THROW __©Œibu‹_d•»ÿ‹d__ ; 370  $sig®t¡ack ( __cÚ¡  sig®t¡ack * __»¡riù __ss , 371  sig®t¡ack * __»¡riù __oss è __THROW ; 375 #ifdeà __USE_XOPEN_EXTENDED 379  $sighÞd ( __sig è __THROW ; 382  $sig»l£ ( __sig è __THROW ; 385  $sigignÜe ( __sig è __THROW ; 388 __sighªdËr_t $sig£t ( __sig , __sighªdËr_t __di¥ è __THROW ; 391 #ià defšed __USE_POSIX199506 || defšed __USE_UNIX98 394  ~ 395  ~ 402  $__libc_cu¼’t_sig¹mš (è __THROW ; 404  $__libc_cu¼’t_sig¹max (è __THROW ; 408 __END_DECLS @/usr/include/stdint.h 23 #iâdeà _STDINT_H 24  #_STDINT_H 1 ) 26  ~<ã©u»s.h > 27  ~ 28  ~ 35 #iâdeà __št8_t_defšed 36  #__št8_t_defšed ) 37 sigÃd  tšt8_t ; 38  tšt16_t ; 39  tšt32_t ; 40 #ià __WORDSIZE == 64 41  tšt64_t ; 43 __ex‹nsiÚ__ 44  tšt64_t ; 49  tušt8_t ; 50  tušt16_t ; 51 #iâdeà __ušt32_t_defšed 52  tušt32_t ; 53  #__ušt32_t_defšed ) 55 #ià __WORDSIZE == 64 56  tušt64_t ; 58 __ex‹nsiÚ__ 59  tušt64_t ; 66 sigÃd  tšt_Ëa¡8_t ; 67  tšt_Ëa¡16_t ; 68  tšt_Ëa¡32_t ; 69 #ià __WORDSIZE == 64 70  tšt_Ëa¡64_t ; 72 __ex‹nsiÚ__ 73  tšt_Ëa¡64_t ; 77  tušt_Ëa¡8_t ; 78  tušt_Ëa¡16_t ; 79  tušt_Ëa¡32_t ; 80 #ià __WORDSIZE == 64 81  tušt_Ëa¡64_t ; 83 __ex‹nsiÚ__ 84  tušt_Ëa¡64_t ; 91 sigÃd  tšt_ç¡8_t ; 92 #ià __WORDSIZE == 64 93  tšt_ç¡16_t ; 94  tšt_ç¡32_t ; 95  tšt_ç¡64_t ; 97  tšt_ç¡16_t ; 98  tšt_ç¡32_t ; 99 __ex‹nsiÚ__ 100  tšt_ç¡64_t ; 104  tušt_ç¡8_t ; 105 #ià __WORDSIZE == 64 106  tušt_ç¡16_t ; 107  tušt_ç¡32_t ; 108  tušt_ç¡64_t ; 110  tušt_ç¡16_t ; 111  tušt_ç¡32_t ; 112 __ex‹nsiÚ__ 113  tušt_ç¡64_t ; 118 #ià __WORDSIZE == 64 119 #iâdeà __šŒ_t_defšed 120  tšŒ_t ; 121  #__šŒ_t_defšed ) 123  tušŒ_t ; 125 #iâdeà __šŒ_t_defšed 126  tšŒ_t ; 127  #__šŒ_t_defšed ) 129  tušŒ_t ; 134 #ià __WORDSIZE == 64 135  tštmax_t ; 136  tuštmax_t ; 138 __ex‹nsiÚ__ 139  tštmax_t ; 140 __ex‹nsiÚ__ 141  tuštmax_t ; 147 #ià! defšed __ýlu¥lus || defšed __STDC_LIMIT_MACROS 149 #ià __WORDSIZE == 64 150  #__INT64_C ( c èø## L ) 151  #__UINT64_C ( c èø## UL ) 153  #__INT64_C ( c èø## LL ) 154  #__UINT64_C ( c èø## ULL ) 160  #INT8_MIN (-128) ) 161  #INT16_MIN (-32767-1) ) 162  #INT32_MIN (-2147483647-1) ) 163  #INT64_MIN (- `__INT64_C (9223372036854775807)-1) ) 165  #INT8_MAX (127) ) 166  #INT16_MAX (32767) ) 167  #INT32_MAX (2147483647) ) 168  #INT64_MAX ( `__INT64_C (9223372036854775807)) ) 171  #UINT8_MAX (255) ) 172  #UINT16_MAX (65535) ) 173  #UINT32_MAX (4294967295U) ) 174  #UINT64_MAX ( `__UINT64_C (18446744073709551615)) ) 178  #INT_LEAST8_MIN (-128) ) 179  #INT_LEAST16_MIN (-32767-1) ) 180  #INT_LEAST32_MIN (-2147483647-1) ) 181  #INT_LEAST64_MIN (- `__INT64_C (9223372036854775807)-1) ) 183  #INT_LEAST8_MAX (127) ) 184  #INT_LEAST16_MAX (32767) ) 185  #INT_LEAST32_MAX (2147483647) ) 186  #INT_LEAST64_MAX ( `__INT64_C (9223372036854775807)) ) 189  #UINT_LEAST8_MAX (255) ) 190  #UINT_LEAST16_MAX (65535) ) 191  #UINT_LEAST32_MAX (4294967295U) ) 192  #UINT_LEAST64_MAX ( `__UINT64_C (18446744073709551615)) ) 196  #INT_FAST8_MIN (-128) ) 197 #ià __WORDSIZE == 64 198  #INT_FAST16_MIN (-9223372036854775807L-1) ) 199  #INT_FAST32_MIN (-9223372036854775807L-1) ) 201  #INT_FAST16_MIN (-2147483647-1) ) 202  #INT_FAST32_MIN (-2147483647-1) ) 204  #INT_FAST64_MIN (- `__INT64_C (9223372036854775807)-1) ) 206  #INT_FAST8_MAX (127) ) 207 #ià __WORDSIZE == 64 208  #INT_FAST16_MAX (9223372036854775807L) ) 209  #INT_FAST32_MAX (9223372036854775807L) ) 211  #INT_FAST16_MAX (2147483647) ) 212  #INT_FAST32_MAX (2147483647) ) 214  #INT_FAST64_MAX ( `__INT64_C (9223372036854775807)) ) 217  #UINT_FAST8_MAX (255) ) 218 #ià __WORDSIZE == 64 219  #UINT_FAST16_MAX (18446744073709551615UL) ) 220  #UINT_FAST32_MAX (18446744073709551615UL) ) 222  #UINT_FAST16_MAX (4294967295U) ) 223  #UINT_FAST32_MAX (4294967295U) ) 225  #UINT_FAST64_MAX ( `__UINT64_C (18446744073709551615)) ) 229 #ià __WORDSIZE == 64 230  #INTPTR_MIN (-9223372036854775807L-1) ) 231  #INTPTR_MAX (9223372036854775807L) ) 232  #UINTPTR_MAX (18446744073709551615UL) ) 234  #INTPTR_MIN (-2147483647-1) ) 235  #INTPTR_MAX (2147483647) ) 236  #UINTPTR_MAX (4294967295U) ) 241  #INTMAX_MIN (- `__INT64_C (9223372036854775807)-1) ) 243  #INTMAX_MAX ( `__INT64_C (9223372036854775807)) ) 246  #UINTMAX_MAX ( `__UINT64_C (18446744073709551615)) ) 252 #ià __WORDSIZE == 64 253  #PTRDIFF_MIN (-9223372036854775807L-1) ) 254  #PTRDIFF_MAX (9223372036854775807L) ) 256  #PTRDIFF_MIN (-2147483647-1) ) 257  #PTRDIFF_MAX (2147483647) ) 261  #SIG_ATOMIC_MIN (-2147483647-1) ) 262  #SIG_ATOMIC_MAX (2147483647) ) 265 #ià __WORDSIZE == 64 266  #SIZE_MAX (18446744073709551615UL) ) 268  #SIZE_MAX (4294967295U) ) 272 #iâdeà WCHAR_MIN 274  #WCHAR_MIN __WCHAR_MIN ) 275  #WCHAR_MAX __WCHAR_MAX ) 279  #WINT_MIN (0u) ) 280  #WINT_MAX (4294967295u) ) 287 #ià! defšed __ýlu¥lus || defšed __STDC_CONSTANT_MACROS 290  #INT8_C ( c è ) c 291  #INT16_C ( c è ) c 292  #INT32_C ( c è ) c 293 #ià __WORDSIZE == 64 294  #INT64_C ( c èø## L ) 296  #INT64_C ( c èø## LL ) 300  #UINT8_C ( c è ) c 301  #UINT16_C ( c è ) c 302  #UINT32_C ( c èø## U ) 303 #ià __WORDSIZE == 64 304  #UINT64_C ( c èø## UL ) 306  #UINT64_C ( c èø## ULL ) 310 #ià __WORDSIZE == 64 311  #INTMAX_C ( c èø## L ) 312  #UINTMAX_C ( c èø## UL ) 314  #INTMAX_C ( c èø## LL ) 315  #UINTMAX_C ( c èø## ULL ) @/usr/include/stdio.h 24 #iâdeà _STDIO_H 26 #ià! defšed __Ãed_FILE && !defšed __Ãed___FILE 27  #_STDIO_H 1 ) 28  ~<ã©u»s.h > 30 g__BEGIN_DECLS 32  #__Ãed_size_t ) 33  #__Ãed_NULL ) 34  ~<¡ddef.h > 36  ~ 37  #__Ãed_FILE ) 38  #__Ãed___FILE ) 42 #ià! defšed __FILE_defšed && defšed __Ãed_FILE 45  g_IO_FILE ; 47 __BEGIN_NAMESPACE_STD 49  _IO_FILE tFILE ; 50 g__END_NAMESPACE_STD 51 #ià defšed __USE_LARGEFILE64 || defšed __USE_SVID || defšed __USE_POSIX \ 52 || defšed g__USE_BSD || defšed g__USE_ISOC99 || defšed g__USE_XOPEN \ 53 || defšed __USE_POSIX2 54 $__USING_NAMESPACE_STD ( FILE ) 57  #__FILE_defšed 1 ) 59 #undeà __Ãed_FILE 62 #ià! defšed ____FILE_defšed && defšed __Ãed___FILE 65  _IO_FILE t__FILE ; 67  #____FILE_defšed 1 ) 69 #undeà __Ãed___FILE 72 #ifdef _STDIO_H 73  #_STDIO_USES_IOSTREAM ) 75  ~ 77 #ià defšed __USE_XOPEN || defšed __USE_XOPEN2K8 78 #ifdeà __GNUC__ 79 #iâdeà _VA_LIST_DEFINED 80  _G_va_li¡ tva_li¡ ; 81  #_VA_LIST_DEFINED ) 84  ~<¡d¬g.h > 88 #ifdeà __USE_XOPEN2K8 89 #iâdeà __off_t_defšed 90 #iâdeà __USE_FILE_OFFSET64 91  __off_t toff_t ; 93  __off64_t toff_t ; 95  #__off_t_defšed ) 97 #ià defšed __USE_LARGEFILE64 && !defšed __off64_t_defšed 98  __off64_t toff64_t ; 99  #__off64_t_defšed ) 102 #iâdeà __ssize_t_defšed 103  __ssize_t tssize_t ; 104  #__ssize_t_defšed ) 109 __BEGIN_NAMESPACE_STD 110 #iâdeà __USE_FILE_OFFSET64 111  _G_åos_t tåos_t ; 113  _G_åos64_t tåos_t ; 115 __END_NAMESPACE_STD 116 #ifdeà __USE_LARGEFILE64 117  _G_åos64_t tåos64_t ; 121  #_IOFBF 0 ) 122  #_IOLBF 1 ) 123  #_IONBF 2 ) 127 #iâdeà BUFSIZ 128  #BUFSIZ _IO_BUFSIZ ) 134 #iâdeà EOF 135  #EOF (-1) ) 141  #SEEK_SET 0 ) 142  #SEEK_CUR 1 ) 143  #SEEK_END 2 ) 144 #ifdeà __USE_GNU 145  #SEEK_DATA 3 ) 146  #SEEK_HOLE 4 ) 150 #ià defšed __USE_SVID || defšed __USE_XOPEN 152  #P_tmpdœ "/tmp" ) 165  ~ 169  _IO_FILE * ¡dš ; 170  _IO_FILE * ¡dout ; 171  _IO_FILE * ¡d”r ; 173  #¡dš ¡dš ) 174  #¡dout ¡dout ) 175  #¡d”r ¡d”r ) 177 __BEGIN_NAMESPACE_STD 179  $»move ( __cÚ¡ * __fž’ame è __THROW ; 181  $»Çme ( __cÚ¡ * __Þd , __cÚ¡ * __Ãw è __THROW ; 182 __END_NAMESPACE_STD 184 #ifdeà __USE_ATFILE 186  $»Çm—t ( __Þdfd , __cÚ¡ * __Þd ,  __Ãwfd , 187 __cÚ¡ * __Ãw è __THROW ; 190 __BEGIN_NAMESPACE_STD 195 #iâdeà __USE_FILE_OFFSET64 196 FILE * $tmpfže (è __wur ; 198 #ifdeà __REDIRECT 199 FILE * `__REDIRECT ( tmpfže , (), tmpfže64 è __wur ; 201  #tmpfže tmpfže64 ) 205 #ifdeà __USE_LARGEFILE64 206 FILE * $tmpfže64 (è __wur ; 210 * $tm²am (* __s è __THROW __wur ; 211 __END_NAMESPACE_STD 213 #ifdeà __USE_MISC 216 * $tm²am_r (* __s è __THROW __wur ; 220 #ià defšed __USE_SVID || defšed __USE_XOPEN 228 * $‹m²am ( __cÚ¡ * __dœ , __cÚ¡ * __pfx ) 229 __THROW __©Œibu‹_m®loc__ __wur ; 233 __BEGIN_NAMESPACE_STD 238  `fþo£ ( FILE * __¡»am ); 243  `fæush ( FILE * __¡»am ); 244 __END_NAMESPACE_STD 246 #ifdeà __USE_MISC 253  `fæush_uÆocked ( FILE * __¡»am ); 256 #ifdeà __USE_GNU 263  `fþo£®l (); 267 __BEGIN_NAMESPACE_STD 268 #iâdeà __USE_FILE_OFFSET64 273 FILE * $fÝ’ ( __cÚ¡ * __»¡riù __fž’ame , 274 __cÚ¡ * __»¡riù __modes è __wur ; 279 FILE * $äeÝ’ ( __cÚ¡ * __»¡riù __fž’ame , 280 __cÚ¡ * __»¡riù __modes , 281 FILE * __»¡riù __¡»am è __wur ; 283 #ifdeà __REDIRECT 284 FILE * `__REDIRECT ( fÝ’ , ( __cÚ¡ * __»¡riù __fž’ame , 285 __cÚ¡ * __»¡riù __modes ), fÝ’64 ) 286 __wur ; 287 FILE * `__REDIRECT ( äeÝ’ , ( __cÚ¡ * __»¡riù __fž’ame , 288 __cÚ¡ * __»¡riù __modes , 289 FILE * __»¡riù __¡»am ), äeÝ’64 ) 290 __wur ; 292  #fÝ’ fÝ’64 ) 293  #äeÝ’ äeÝ’64 ) 296 __END_NAMESPACE_STD 297 #ifdeà __USE_LARGEFILE64 298 FILE * $fÝ’64 ( __cÚ¡ * __»¡riù __fž’ame , 299 __cÚ¡ * __»¡riù __modes è __wur ; 300 FILE * $äeÝ’64 ( __cÚ¡ * __»¡riù __fž’ame , 301 __cÚ¡ * __»¡riù __modes , 302 FILE * __»¡riù __¡»am è __wur ; 305 #ifdef __USE_POSIX 307 FILE * $fdÝ’ ( __fd , __cÚ¡ * __modes è __THROW __wur ; 310 #ifdef __USE_GNU 313 FILE * $fÝ’cook› (* __»¡riù __magic_cook› , 314 __cÚ¡ * __»¡riù __modes , 315 _IO_cook›_io_funùiÚs_t __io_funcs è __THROW __wur ; 318 #ifdeà __USE_XOPEN2K8 320 FILE * $fmemÝ’ (* __s , size_t __Ën , __cÚ¡ * __modes ) 321 __THROW __wur ; 326 FILE * $Ý’_mem¡»am (** __buæoc , size_t * __siz–oc è __THROW __wur ; 330 __BEGIN_NAMESPACE_STD 333  $£tbuf ( FILE * __»¡riù __¡»am , *__»¡riù __buf è __THROW ; 337  $£tvbuf ( FILE * __»¡riù __¡»am , *__»¡riù __buf , 338  __modes , size_t __n è __THROW ; 339 __END_NAMESPACE_STD 341 #ifdef __USE_BSD 344  $£tbufãr ( FILE * __»¡riù __¡»am , *__»¡riù __buf , 345 size_t __size è __THROW ; 348  $£Žšebuf ( FILE * __¡»am è __THROW ; 352 __BEGIN_NAMESPACE_STD 357  `årštf ( FILE * __»¡riù __¡»am , 358 __cÚ¡ * __»¡riù __fÜm© , ...); 363  `´štf ( __cÚ¡ * __»¡riù __fÜm© , ...); 365  $¥rštf (* __»¡riù __s , 366 __cÚ¡ * __»¡riù __fÜm© , ...è __THROWNL ; 372  `vårštf ( FILE * __»¡riù __s , __cÚ¡ *__»¡riù __fÜm© , 373 _G_va_li¡ __¬g ); 378  `v´štf ( __cÚ¡ * __»¡riù __fÜm© , _G_va_li¡ __¬g ); 380  $v¥rštf (* __»¡riù __s , __cÚ¡ *__»¡riù __fÜm© , 381 _G_va_li¡ __¬g è __THROWNL ; 382 __END_NAMESPACE_STD 384 #ià defšed __USE_BSD || defšed __USE_ISOC99 || defšed __USE_UNIX98 385 __BEGIN_NAMESPACE_C99 387  $¢´štf (* __»¡riù __s , size_t __maxËn , 388 __cÚ¡ * __»¡riù __fÜm© , ...) 389 __THROWNL `__©Œibu‹__ (( `__fÜm©__ ( __´štf__ , 3, 4))); 391  $v¢´štf (* __»¡riù __s , size_t __maxËn , 392 __cÚ¡ * __»¡riù __fÜm© , _G_va_li¡ __¬g ) 393 __THROWNL `__©Œibu‹__ (( `__fÜm©__ ( __´štf__ , 3, 0))); 394 __END_NAMESPACE_C99 397 #ifdeà __USE_GNU 400  $va¥rštf (** __»¡riù __±r , __cÚ¡ *__»¡riù __f , 401 _G_va_li¡ __¬g ) 402 __THROWNL `__©Œibu‹__ (( $__fÜm©__ ( __´štf__ , 2, 0))è __wur ; 403  $__a¥rštf (** __»¡riù __±r , 404 __cÚ¡ * __»¡riù __fmt , ...) 405 __THROWNL `__©Œibu‹__ (( $__fÜm©__ ( __´štf__ , 2, 3))è __wur ; 406  $a¥rštf (** __»¡riù __±r , 407 __cÚ¡ * __»¡riù __fmt , ...) 408 __THROWNL `__©Œibu‹__ (( $__fÜm©__ ( __´štf__ , 2, 3))è __wur ; 411 #ifdeà __USE_XOPEN2K8 418  $vd´štf ( __fd , __cÚ¡ * __»¡riù __fmt , 419 _G_va_li¡ __¬g ) 420 `__©Œibu‹__ (( `__fÜm©__ ( __´štf__ , 2, 0))); 421  $d´štf ( __fd , __cÚ¡ * __»¡riù __fmt , ...) 422 `__©Œibu‹__ (( `__fÜm©__ ( __´štf__ , 2, 3))); 426 __BEGIN_NAMESPACE_STD 431  $fsÿnf ( FILE * __»¡riù __¡»am , 432 __cÚ¡ * __»¡riù __fÜm© , ...è __wur ; 437  $sÿnf ( __cÚ¡ * __»¡riù __fÜm© , ...è __wur ; 439  $ssÿnf ( __cÚ¡ * __»¡riù __s , 440 __cÚ¡ * __»¡riù __fÜm© , ...è __THROW ; 442 #ià defšed __USE_ISOC99 && !defšed __USE_GNU \ 443 && (! defšed __LDBL_COMPAT || !defšed __REDIRECT ) \ 444 && ( defšed __STRICT_ANSI__ || defšed __USE_XOPEN2K ) 445 #ifdeà __REDIRECT 449  `__REDIRECT ( fsÿnf , ( FILE * __»¡riù __¡»am , 450 __cÚ¡ * __»¡riù __fÜm© , ...), 451 __isoc99_fsÿnf è __wur ; 452  `__REDIRECT ( sÿnf , ( __cÚ¡ * __»¡riù __fÜm© , ...), 453 __isoc99_sÿnf è __wur ; 454  `__REDIRECT_NTH ( ssÿnf , ( __cÚ¡ * __»¡riù __s , 455 __cÚ¡ * __»¡riù __fÜm© , ...), 456 __isoc99_ssÿnf ); 458  $__isoc99_fsÿnf ( FILE * __»¡riù __¡»am , 459 __cÚ¡ * __»¡riù __fÜm© , ...è __wur ; 460  $__isoc99_sÿnf ( __cÚ¡ * __»¡riù __fÜm© , ...è __wur ; 461  $__isoc99_ssÿnf ( __cÚ¡ * __»¡riù __s , 462 __cÚ¡ * __»¡riù __fÜm© , ...è __THROW ; 463  #fsÿnf __isoc99_fsÿnf ) 464  #sÿnf __isoc99_sÿnf ) 465  #ssÿnf __isoc99_ssÿnf ) 469 __END_NAMESPACE_STD 471 #ifdef __USE_ISOC99 472 __BEGIN_NAMESPACE_C99 477  $vfsÿnf ( FILE * __»¡riù __s , __cÚ¡ *__»¡riù __fÜm© , 478 _G_va_li¡ __¬g ) 479 `__©Œibu‹__ (( $__fÜm©__ ( __sÿnf__ , 2, 0))è __wur ; 485  $vsÿnf ( __cÚ¡ * __»¡riù __fÜm© , _G_va_li¡ __¬g ) 486 `__©Œibu‹__ (( $__fÜm©__ ( __sÿnf__ , 1, 0))è __wur ; 489  $vssÿnf ( __cÚ¡ * __»¡riù __s , 490 __cÚ¡ * __»¡riù __fÜm© , _G_va_li¡ __¬g ) 491 __THROW `__©Œibu‹__ (( `__fÜm©__ ( __sÿnf__ , 2, 0))); 493 #ià! defšed __USE_GNU \ 494 && (! defšed __LDBL_COMPAT || !defšed __REDIRECT ) \ 495 && ( defšed __STRICT_ANSI__ || defšed __USE_XOPEN2K ) 496 #ifdeà __REDIRECT 500  `__REDIRECT ( vfsÿnf , 501 ( FILE * __»¡riù __s , 502 __cÚ¡ * __»¡riù __fÜm© , _G_va_li¡ __¬g ), 503 __isoc99_vfsÿnf ) 504 `__©Œibu‹__ (( $__fÜm©__ ( __sÿnf__ , 2, 0))è __wur ; 505  `__REDIRECT ( vsÿnf , ( __cÚ¡ * __»¡riù __fÜm© , 506 _G_va_li¡ __¬g ), __isoc99_vsÿnf ) 507 `__©Œibu‹__ (( $__fÜm©__ ( __sÿnf__ , 1, 0))è __wur ; 508  `__REDIRECT_NTH ( vssÿnf , 509 ( __cÚ¡ * __»¡riù __s , 510 __cÚ¡ * __»¡riù __fÜm© , 511 _G_va_li¡ __¬g ), __isoc99_vssÿnf ) 512 `__©Œibu‹__ (( `__fÜm©__ ( __sÿnf__ , 2, 0))); 514  $__isoc99_vfsÿnf ( FILE * __»¡riù __s , 515 __cÚ¡ * __»¡riù __fÜm© , 516 _G_va_li¡ __¬g è __wur ; 517  $__isoc99_vsÿnf ( __cÚ¡ * __»¡riù __fÜm© , 518 _G_va_li¡ __¬g è __wur ; 519  $__isoc99_vssÿnf ( __cÚ¡ * __»¡riù __s , 520 __cÚ¡ * __»¡riù __fÜm© , 521 _G_va_li¡ __¬g è __THROW ; 522  #vfsÿnf __isoc99_vfsÿnf ) 523  #vsÿnf __isoc99_vsÿnf ) 524  #vssÿnf __isoc99_vssÿnf ) 528 __END_NAMESPACE_C99 532 __BEGIN_NAMESPACE_STD 537  `fg‘c ( FILE * __¡»am ); 538  `g‘c ( FILE * __¡»am ); 544  `g‘ch¬ (); 545 __END_NAMESPACE_STD 549  #g‘c ( _å è `_IO_g‘c (_å) ) 551 #ià defšed __USE_POSIX || defšed __USE_MISC 556  `g‘c_uÆocked ( FILE * __¡»am ); 557  `g‘ch¬_uÆocked (); 560 #ifdeà __USE_MISC 567  `fg‘c_uÆocked ( FILE * __¡»am ); 571 __BEGIN_NAMESPACE_STD 579  `åutc ( __c , FILE * __¡»am ); 580  `putc ( __c , FILE * __¡»am ); 586  `putch¬ ( __c ); 587 __END_NAMESPACE_STD 591  #putc ( _ch , _å è `_IO_putc (_ch, _å) ) 593 #ifdeà __USE_MISC 600  `åutc_uÆocked ( __c , FILE * __¡»am ); 603 #ià defšed __USE_POSIX || defšed __USE_MISC 608  `putc_uÆocked ( __c , FILE * __¡»am ); 609  `putch¬_uÆocked ( __c ); 613 #ià defšed __USE_SVID || defšed __USE_MISC \ 614 || ( defšed __USE_XOPEN && !defšed __USE_XOPEN2K ) 616  `g‘w ( FILE * __¡»am ); 619  `putw ( __w , FILE * __¡»am ); 623 __BEGIN_NAMESPACE_STD 628 * $fg‘s (* __»¡riù __s ,  __n , FILE *__»¡riù __¡»am ) 629 __wur ; 636 * $g‘s (* __s è __wur ; 637 __END_NAMESPACE_STD 639 #ifdeà __USE_GNU 646 * $fg‘s_uÆocked (* __»¡riù __s ,  __n , 647 FILE * __»¡riù __¡»am è __wur ; 651 #ifdef __USE_XOPEN2K8 662 _IO_ssize_t $__g‘d–im (** __»¡riù __lš•Œ , 663 size_t * __»¡riù __n ,  __d–im™” , 664 FILE * __»¡riù __¡»am è __wur ; 665 _IO_ssize_t $g‘d–im (** __»¡riù __lš•Œ , 666 size_t * __»¡riù __n ,  __d–im™” , 667 FILE * __»¡riù __¡»am è __wur ; 675 _IO_ssize_t $g‘lše (** __»¡riù __lš•Œ , 676 size_t * __»¡riù __n , 677 FILE * __»¡riù __¡»am è __wur ; 681 __BEGIN_NAMESPACE_STD 686  `åuts ( __cÚ¡ * __»¡riù __s , FILE *__»¡riù __¡»am ); 692  `puts ( __cÚ¡ * __s ); 699  `ung‘c ( __c , FILE * __¡»am ); 706 size_t $ä—d (* __»¡riù __±r , size_t __size , 707 size_t __n , FILE * __»¡riù __¡»am è __wur ; 712 size_t `fwr™e ( __cÚ¡ * __»¡riù __±r , size_ˆ __size , 713 size_t __n , FILE * __»¡riù __s ); 714 __END_NAMESPACE_STD 716 #ifdeà __USE_GNU 723  `åuts_uÆocked ( __cÚ¡ * __»¡riù __s , 724 FILE * __»¡riù __¡»am ); 727 #ifdeà __USE_MISC 734 size_t $ä—d_uÆocked (* __»¡riù __±r , size_t __size , 735 size_t __n , FILE * __»¡riù __¡»am è __wur ; 736 size_t `fwr™e_uÆocked ( __cÚ¡ * __»¡riù __±r , size_ˆ __size , 737 size_t __n , FILE * __»¡riù __¡»am ); 741 __BEGIN_NAMESPACE_STD 746  `f£ek ( FILE * __¡»am ,  __off ,  __wh’û ); 751  $á–l ( FILE * __¡»am è __wur ; 756  `»wšd ( FILE * __¡»am ); 757 __END_NAMESPACE_STD 764 #ià defšed __USE_LARGEFILE || defšed __USE_XOPEN2K 765 #iâdeà __USE_FILE_OFFSET64 770  `f£eko ( FILE * __¡»am , __off_t __off ,  __wh’û ); 775 __off_t $á–lo ( FILE * __¡»am è __wur ; 777 #ifdeà __REDIRECT 778  `__REDIRECT ( f£eko , 779 ( FILE * __¡»am , __off64_t __off ,  __wh’û ), 780 f£eko64 ); 781 __off64_t `__REDIRECT ( á–lo , ( FILE * __¡»am ), á–lo64 ); 783  #f£eko f£eko64 ) 784  #á–lo á–lo64 ) 789 __BEGIN_NAMESPACE_STD 790 #iâdeà __USE_FILE_OFFSET64 795  `fg‘pos ( FILE * __»¡riù __¡»am , åos_t *__»¡riù __pos ); 800  `f£os ( FILE * __¡»am , __cÚ¡ åos_t * __pos ); 802 #ifdeà __REDIRECT 803  `__REDIRECT ( fg‘pos , ( FILE * __»¡riù __¡»am , 804 åos_t * __»¡riù __pos ), fg‘pos64 ); 805  `__REDIRECT ( f£os , 806 ( FILE * __¡»am , __cÚ¡ åos_t * __pos ), f£os64 ); 808  #fg‘pos fg‘pos64 ) 809  #f£os f£os64 ) 812 __END_NAMESPACE_STD 814 #ifdeà __USE_LARGEFILE64 815  `f£eko64 ( FILE * __¡»am , __off64_t __off ,  __wh’û ); 816 __off64_t $á–lo64 ( FILE * __¡»am è __wur ; 817  `fg‘pos64 ( FILE * __»¡riù __¡»am , åos64_t *__»¡riù __pos ); 818  `f£os64 ( FILE * __¡»am , __cÚ¡ åos64_t * __pos ); 821 __BEGIN_NAMESPACE_STD 823  $þ—»¼ ( FILE * __¡»am è __THROW ; 825  $ãof ( FILE * __¡»am è __THROW __wur ; 827  $ã¼Ü ( FILE * __¡»am è __THROW __wur ; 828 __END_NAMESPACE_STD 830 #ifdeà __USE_MISC 832  $þ—»¼_uÆocked ( FILE * __¡»am è __THROW ; 833  $ãof_uÆocked ( FILE * __¡»am è __THROW __wur ; 834  $ã¼Ü_uÆocked ( FILE * __¡»am è __THROW __wur ; 838 __BEGIN_NAMESPACE_STD 843  `³¼Ü ( __cÚ¡ * __s ); 844 __END_NAMESPACE_STD 850  ~ 853 #ifdef __USE_POSIX 855  $fž’o ( FILE * __¡»am è __THROW __wur ; 858 #ifdeà __USE_MISC 860  $fž’o_uÆocked ( FILE * __¡»am è __THROW __wur ; 864 #ià( defšed __USE_POSIX2 || defšed __USE_SVID || defšed __USE_BSD || \ 865 defšed __USE_MISC ) 870 FILE * $pÝ’ ( __cÚ¡ * __commªd , __cÚ¡ * __modes è __wur ; 876  `pþo£ ( FILE * __¡»am ); 880 #ifdef __USE_POSIX 882 * $ù”mid (* __s è __THROW ; 886 #ifdeà __USE_XOPEN 888 * `cu£rid (* __s ); 892 #ifdef __USE_GNU 893  ob¡ack ; 896  $ob¡ack_´štf ( ob¡ack * __»¡riù __ob¡ack , 897 __cÚ¡ * __»¡riù __fÜm© , ...) 898 __THROWNL `__©Œibu‹__ (( `__fÜm©__ ( __´štf__ , 2, 3))); 899  $ob¡ack_v´štf ( ob¡ack * __»¡riù __ob¡ack , 900 __cÚ¡ * __»¡riù __fÜm© , 901 _G_va_li¡ __¬gs ) 902 __THROWNL `__©Œibu‹__ (( `__fÜm©__ ( __´štf__ , 2, 0))); 906 #ià defšed __USE_POSIX || defšed __USE_MISC 910  $æockfže ( FILE * __¡»am è __THROW ; 914  $árylockfže ( FILE * __¡»am è __THROW __wur ; 917  $fuÆockfže ( FILE * __¡»am è __THROW ; 920 #ià defšed __USE_XOPEN && !defšed __USE_XOPEN2K && !defšed __USE_GNU 924  #__Ãed_g‘Ýt ) 925  ~ 930 #ifdeà __USE_EXTERN_INLINES 931  ~ 933 #ià __USE_FORTIFY_LEVEL > 0 && defšed __ex‹º_®ways_šlše 934  ~ 936 #ifdeà __LDBL_COMPAT 937  ~ 940 __END_DECLS @/usr/include/stdlib.h 23 #iâdef _STDLIB_H 25  ~<ã©u»s.h > 28  #__Ãed_size_t ) 29 #iâdeà __Ãed_m®loc_ªd_ÿÎoc 30  #__Ãed_wch¬_t ) 31  #__Ãed_NULL ) 33  ~<¡ddef.h > 35 g__BEGIN_DECLS 37 #iâdeà __Ãed_m®loc_ªd_ÿÎoc 38  #_STDLIB_H 1 ) 40 #ià( defšed __USE_XOPEN || defšed __USE_XOPEN2K8 è&& !defšed _SYS_WAIT_H 42  ~ 43  ~ 45 #ifdeà __USE_BSD 50 #ià defšed __GNUC__ && !defšed __ýlu¥lus 51  #__WAIT_INT ( ¡©us ) \ 52 ( `__ex‹nsiÚ__ (((uniÚ { `__ty³of ( ¡©us è __š ;  __i ; }) \ 53 { . __š = ( ¡©us è}). __i )) ) 55  #__WAIT_INT ( ¡©us è(*(*è&(¡©us)) ) 63 #ià! defšed __GNUC__ || __GNUC__ < 2 || defšed __ýlu¥lus 64  #__WAIT_STATUS * ) 65  #__WAIT_STATUS_DEFN * ) 70  wa™ * m__u±r ; 71 * m__Œ ; 72 } t__WAIT_STATUS t__©Œibu‹__ (( t__Œª¥¬’t_uniÚ__ )); 73  #__WAIT_STATUS_DEFN * ) 78  #__WAIT_INT ( ¡©us è(¡©us) ) 79  #__WAIT_STATUS * ) 80  #__WAIT_STATUS_DEFN * ) 85  #WEXITSTATUS ( ¡©us è `__WEXITSTATUS ( `__WAIT_INT (¡©us)) ) 86  #WTERMSIG ( ¡©us è `__WTERMSIG ( `__WAIT_INT (¡©us)) ) 87  #WSTOPSIG ( ¡©us è `__WSTOPSIG ( `__WAIT_INT (¡©us)) ) 88  #WIFEXITED ( ¡©us è `__WIFEXITED ( `__WAIT_INT (¡©us)) ) 89  #WIFSIGNALED ( ¡©us è `__WIFSIGNALED ( `__WAIT_INT (¡©us)) ) 90  #WIFSTOPPED ( ¡©us è `__WIFSTOPPED ( `__WAIT_INT (¡©us)) ) 91 #ifdeà __WIFCONTINUED 92  #WIFCONTINUED ( ¡©us è `__WIFCONTINUED ( `__WAIT_INT (¡©us)) ) 96 __BEGIN_NAMESPACE_STD 100  mquÙ ; 101  m»m ; 102 } tdiv_t ; 105 #iâdeà __ldiv_t_defšed 108  mquÙ ; 109  m»m ; 110 } tldiv_t ; 111  #__ldiv_t_defšed 1 ) 113 g__END_NAMESPACE_STD 115 #ià defšed __USE_ISOC99 && !defšed __Îdiv_t_defšed 116 __BEGIN_NAMESPACE_C99 118 __ex‹nsiÚ__ struct 120  mquÙ ; 121  m»m ; 122 } tÎdiv_t ; 123  #__Îdiv_t_defšed 1 ) 124 g__END_NAMESPACE_C99 129  #RAND_MAX 2147483647 ) 134  #EXIT_FAILURE 1 ) 135  #EXIT_SUCCESS 0 ) 139  #MB_CUR_MAX ( `__ùy³_g‘_mb_cur_max ()) ) 140 size_t $__ùy³_g‘_mb_cur_max (è __THROW __wur ; 143 __BEGIN_NAMESPACE_STD 145  $©of ( __cÚ¡ * __ÅŒ ) 146 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)è __wur ; 148  $©oi ( __cÚ¡ * __ÅŒ ) 149 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)è __wur ; 151  $©Þ ( __cÚ¡ * __ÅŒ ) 152 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)è __wur ; 153 __END_NAMESPACE_STD 155 #ià defšed __USE_ISOC99 || (defšed __GLIBC_HAVE_LONG_LONG && defšed __USE_MISC ) 156 __BEGIN_NAMESPACE_C99 158 __ex‹nsiÚ__  $©Þl ( __cÚ¡ * __ÅŒ ) 159 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)è __wur ; 160 __END_NAMESPACE_C99 163 __BEGIN_NAMESPACE_STD 165  $¡¹od ( __cÚ¡ * __»¡riù __ÅŒ , 166 ** __»¡riù __’d±r ) 167 __THROW `__nÚnuÎ ((1)è __wur ; 168 __END_NAMESPACE_STD 170 #ifdef __USE_ISOC99 171 __BEGIN_NAMESPACE_C99 173  $¡¹of ( __cÚ¡ * __»¡riù __ÅŒ , 174 ** __»¡riù __’d±r è __THROW `__nÚnuÎ ((1)è __wur ; 176  $¡¹Þd ( __cÚ¡ * __»¡riù __ÅŒ , 177 ** __»¡riù __’d±r ) 178 __THROW `__nÚnuÎ ((1)è __wur ; 179 __END_NAMESPACE_C99 182 __BEGIN_NAMESPACE_STD 184  $¡¹Þ ( __cÚ¡ * __»¡riù __ÅŒ , 185 ** __»¡riù __’d±r ,  __ba£ ) 186 __THROW `__nÚnuÎ ((1)è __wur ; 188  $¡¹oul ( __cÚ¡ * __»¡riù __ÅŒ , 189 ** __»¡riù __’d±r ,  __ba£ ) 190 __THROW `__nÚnuÎ ((1)è __wur ; 191 __END_NAMESPACE_STD 193 #ià defšed __GLIBC_HAVE_LONG_LONG && defšed __USE_BSD 195 __ex‹nsiÚ__ 196  $¡¹oq ( __cÚ¡ * __»¡riù __ÅŒ , 197 ** __»¡riù __’d±r ,  __ba£ ) 198 __THROW `__nÚnuÎ ((1)è __wur ; 200 __ex‹nsiÚ__ 201  $¡¹ouq ( __cÚ¡ * __»¡riù __ÅŒ , 202 ** __»¡riù __’d±r ,  __ba£ ) 203 __THROW `__nÚnuÎ ((1)è __wur ; 206 #ià defšed __USE_ISOC99 || (defšed __GLIBC_HAVE_LONG_LONG && defšed __USE_MISC ) 207 __BEGIN_NAMESPACE_C99 209 __ex‹nsiÚ__ 210  $¡¹Þl ( __cÚ¡ * __»¡riù __ÅŒ , 211 ** __»¡riù __’d±r ,  __ba£ ) 212 __THROW `__nÚnuÎ ((1)è __wur ; 214 __ex‹nsiÚ__ 215  $¡¹ouÎ ( __cÚ¡ * __»¡riù __ÅŒ , 216 ** __»¡riù __’d±r ,  __ba£ ) 217 __THROW `__nÚnuÎ ((1)è __wur ; 218 __END_NAMESPACE_C99 222 #ifdeà __USE_GNU 236  ~ 240  $¡¹Þ_l ( __cÚ¡ * __»¡riù __ÅŒ , 241 ** __»¡riù __’d±r ,  __ba£ , 242 __loÿË_t __loc è __THROW `__nÚnuÎ ((1, 4)è __wur ; 244  $¡¹oul_l ( __cÚ¡ * __»¡riù __ÅŒ , 245 ** __»¡riù __’d±r , 246  __ba£ , __loÿË_t __loc ) 247 __THROW `__nÚnuÎ ((1, 4)è __wur ; 249 __ex‹nsiÚ__ 250  $¡¹Þl_l ( __cÚ¡ * __»¡riù __ÅŒ , 251 ** __»¡riù __’d±r ,  __ba£ , 252 __loÿË_t __loc ) 253 __THROW `__nÚnuÎ ((1, 4)è __wur ; 255 __ex‹nsiÚ__ 256  $¡¹ouÎ_l ( __cÚ¡ * __»¡riù __ÅŒ , 257 ** __»¡riù __’d±r , 258  __ba£ , __loÿË_t __loc ) 259 __THROW `__nÚnuÎ ((1, 4)è __wur ; 261  $¡¹od_l ( __cÚ¡ * __»¡riù __ÅŒ , 262 ** __»¡riù __’d±r , __loÿË_t __loc ) 263 __THROW `__nÚnuÎ ((1, 3)è __wur ; 265  $¡¹of_l ( __cÚ¡ * __»¡riù __ÅŒ , 266 ** __»¡riù __’d±r , __loÿË_t __loc ) 267 __THROW `__nÚnuÎ ((1, 3)è __wur ; 269  $¡¹Þd_l ( __cÚ¡ * __»¡riù __ÅŒ , 270 ** __»¡riù __’d±r , 271 __loÿË_t __loc ) 272 __THROW `__nÚnuÎ ((1, 3)è __wur ; 276 #ifdeà __USE_EXTERN_INLINES 277 __BEGIN_NAMESPACE_STD 278 __ex‹º_šlše  279 `__NTH ( $©of ( __cÚ¡ * __ÅŒ )) 281  `¡¹od ( __ÅŒ , (**è NULL ); 282 } } 283 __ex‹º_šlše  284 __NTH ( $©oi ( __cÚ¡ * __ÅŒ )) 286  (è `¡¹Þ ( __ÅŒ , (**è NULL , 10); 287 } } 288 __ex‹º_šlše  289 __NTH ( $©Þ ( __cÚ¡ * __ÅŒ )) 291  `¡¹Þ ( __ÅŒ , (**è NULL , 10); 292 } } 293 g__END_NAMESPACE_STD 295 #ià defšed __USE_MISC || defšed __USE_ISOC99 296 __BEGIN_NAMESPACE_C99 297 __ex‹nsiÚ__ __ex‹º_šlše  298 __NTH ( $©Þl ( __cÚ¡ * __ÅŒ )) 300  `¡¹Þl ( __ÅŒ , (**è NULL , 10); 301 } } 302 g__END_NAMESPACE_C99 307 #ià defšed __USE_SVID || defšed __USE_XOPEN_EXTENDED 311 * $l64a ( __n è __THROW __wur ; 314  $a64l ( __cÚ¡ * __s ) 315 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)è __wur ; 319 #ià defšed __USE_SVID || defšed __USE_XOPEN_EXTENDED || defšed __USE_BSD 320  ~ 327  $¿ndom (è __THROW ; 330  $¤ªdom ( __£ed è __THROW ; 336 * $š™¡©e ( __£ed , * __¡©ebuf , 337 size_t __¡©–’ è __THROW `__nÚnuÎ ((2)); 341 * $£t¡©e (* __¡©ebuf è __THROW `__nÚnuÎ ((1)); 344 #ifdeà __USE_MISC 349  s¿ndom_d©a 351 št32_t * åŒ ; 352 št32_t * ½Œ ; 353 št32_t * ¡©e ; 354  ¿nd_ty³ ; 355  ¿nd_deg ; 356  ¿nd_£p ; 357 št32_t * ’d_±r ; 360  $¿ndom_r ( ¿ndom_d©a * __»¡riù __buf , 361 št32_t * __»¡riù __»suÉ è __THROW `__nÚnuÎ ((1, 2)); 363  $¤ªdom_r ( __£ed ,  ¿ndom_d©a * __buf ) 364 __THROW `__nÚnuÎ ((2)); 366  $š™¡©e_r ( __£ed , * __»¡riù __¡©ebuf , 367 size_t __¡©–’ , 368  ¿ndom_d©a * __»¡riù __buf ) 369 __THROW `__nÚnuÎ ((2, 4)); 371  $£t¡©e_r (* __»¡riù __¡©ebuf , 372  ¿ndom_d©a * __»¡riù __buf ) 373 __THROW `__nÚnuÎ ((1, 2)); 378 __BEGIN_NAMESPACE_STD 380  $¿nd (è __THROW ; 382  $¤ªd ( __£ed è __THROW ; 383 __END_NAMESPACE_STD 385 #ifdeà __USE_POSIX 387  $¿nd_r (* __£ed è __THROW ; 391 #ià defšed __USE_SVID || defšed __USE_XOPEN 395  $d¿nd48 (è __THROW ; 396  $”ªd48 ( __xsubi [3]è __THROW `__nÚnuÎ ((1)); 399  $̪d48 (è __THROW ; 400  $Īd48 ( __xsubi [3]) 401 __THROW `__nÚnuÎ ((1)); 404  $m¿nd48 (è __THROW ; 405  $j¿nd48 ( __xsubi [3]) 406 __THROW `__nÚnuÎ ((1)); 409  $¤ªd48 ( __£edv® è __THROW ; 410 * $£ed48 ( __£ed16v [3]) 411 __THROW `__nÚnuÎ ((1)); 412  $lcÚg48 ( __·¿m [7]è __THROW `__nÚnuÎ ((1)); 414 #ifdeà __USE_MISC 418  sd¿nd48_d©a 420  __x [3]; 421  __Þd_x [3]; 422  __c ; 423  __š™ ; 424  __a ; 428  $d¿nd48_r ( d¿nd48_d©a * __»¡riù __bufãr , 429 * __»¡riù __»suÉ è __THROW `__nÚnuÎ ((1, 2)); 430  $”ªd48_r ( __xsubi [3], 431  d¿nd48_d©a * __»¡riù __bufãr , 432 * __»¡riù __»suÉ è __THROW `__nÚnuÎ ((1, 2)); 435  $̪d48_r ( d¿nd48_d©a * __»¡riù __bufãr , 436 * __»¡riù __»suÉ ) 437 __THROW `__nÚnuÎ ((1, 2)); 438  $Īd48_r ( __xsubi [3], 439  d¿nd48_d©a * __»¡riù __bufãr , 440 * __»¡riù __»suÉ ) 441 __THROW `__nÚnuÎ ((1, 2)); 444  $m¿nd48_r ( d¿nd48_d©a * __»¡riù __bufãr , 445 * __»¡riù __»suÉ ) 446 __THROW `__nÚnuÎ ((1, 2)); 447  $j¿nd48_r ( __xsubi [3], 448  d¿nd48_d©a * __»¡riù __bufãr , 449 * __»¡riù __»suÉ ) 450 __THROW `__nÚnuÎ ((1, 2)); 453  $¤ªd48_r ( __£edv® ,  d¿nd48_d©a * __bufãr ) 454 __THROW `__nÚnuÎ ((2)); 456  $£ed48_r ( __£ed16v [3], 457  d¿nd48_d©a * __bufãr è __THROW `__nÚnuÎ ((1, 2)); 459  $lcÚg48_r ( __·¿m [7], 460  d¿nd48_d©a * __bufãr ) 461 __THROW `__nÚnuÎ ((1, 2)); 467 #iâdeà __m®loc_ªd_ÿÎoc_defšed 468  #__m®loc_ªd_ÿÎoc_defšed ) 469 __BEGIN_NAMESPACE_STD 471 * $m®loc ( size_t __size è __THROW __©Œibu‹_m®loc__ __wur ; 473 * $ÿÎoc ( size_t __nmemb , size_ˆ __size ) 474 __THROW __©Œibu‹_m®loc__ __wur ; 475 __END_NAMESPACE_STD 478 #iâdeà __Ãed_m®loc_ªd_ÿÎoc 479 __BEGIN_NAMESPACE_STD 485 * $»®loc (* __±r , size_t __size ) 486 __THROW __©Œibu‹_w¬n_unu£d_»suÉ__ ; 488  $ä“ (* __±r è __THROW ; 489 __END_NAMESPACE_STD 491 #ifdef __USE_MISC 493  $cä“ (* __±r è __THROW ; 496 #ià defšed __USE_GNU || defšed __USE_BSD || defšed __USE_MISC 497  ~<®loÿ.h > 500 #ià( defšed __USE_XOPEN_EXTENDED && !defšed __USE_XOPEN2K ) \ 501 || defšed __USE_BSD 503 * $v®loc ( size_t __size è __THROW __©Œibu‹_m®loc__ __wur ; 506 #ifdeà __USE_XOPEN2K 508  $posix_mem®ign (** __mem±r , size_t __®ignm’t , size_ˆ __size ) 509 __THROW `__nÚnuÎ ((1)è __wur ; 512 __BEGIN_NAMESPACE_STD 514  $abÜt (è __THROW `__©Œibu‹__ (( __nÜ‘uº__ )); 518  `©ex™ ((* __func è()è __THROW `__nÚnuÎ ((1)); 520 #ifdeà __USE_GNU 524 #ifdeà __ýlu¥lus 525 "C++"  `©_quick_ex™ ((* __func ) ()) 526 __THROW `__asm ("©_quick_ex™"è `__nÚnuÎ ((1)); 528  `©_quick_ex™ ((* __func è()è __THROW `__nÚnuÎ ((1)); 531 __END_NAMESPACE_STD 533 #ifdef __USE_MISC 536  `Ú_ex™ ((* __func è( __¡©us , * __¬g ), *__arg) 537 __THROW `__nÚnuÎ ((1)); 540 __BEGIN_NAMESPACE_STD 544  $ex™ ( __¡©us è __THROW `__©Œibu‹__ (( __nÜ‘uº__ )); 546 #ifdeà __USE_GNU 552  $quick_ex™ ( __¡©us è __THROW `__©Œibu‹__ (( __nÜ‘uº__ )); 554 __END_NAMESPACE_STD 556 #ifdeà __USE_ISOC99 557 __BEGIN_NAMESPACE_C99 560  $_Ex™ ( __¡©us è __THROW `__©Œibu‹__ (( __nÜ‘uº__ )); 561 __END_NAMESPACE_C99 565 __BEGIN_NAMESPACE_STD 567 * $g‘’v ( __cÚ¡ * __Çme è __THROW `__nÚnuÎ ((1)è __wur ; 568 __END_NAMESPACE_STD 572 * $__£cu»_g‘’v ( __cÚ¡ * __Çme ) 573 __THROW `__nÚnuÎ ((1)è __wur ; 575 #ià defšed __USE_SVID || defšed __USE_XOPEN 579  $pu‹nv (* __¡ršg è __THROW `__nÚnuÎ ((1)); 582 #ià defšed __USE_BSD || defšed __USE_XOPEN2K 585  $£‹nv ( __cÚ¡ * __Çme , __cÚ¡ * __v®ue ,  __»¶aû ) 586 __THROW `__nÚnuÎ ((2)); 589  $un£‹nv ( __cÚ¡ * __Çme è __THROW `__nÚnuÎ ((1)); 592 #ifdef __USE_MISC 596  $þ—»nv (è __THROW ; 600 #ià defšed __USE_MISC \ 601 || ( defšed __USE_XOPEN_EXTENDED && !defšed __USE_XOPEN2K ) 606 * $mk‹mp (* __‹m¶©e è __THROW `__nÚnuÎ ((1)è __wur ; 609 #ià defšed __USE_MISC || defšed __USE_XOPEN_EXTENDED \ 610 || defšed __USE_XOPEN2K8 619 #iâdeà __USE_FILE_OFFSET64 620  $mk¡emp (* __‹m¶©e è `__nÚnuÎ ((1)è __wur ; 622 #ifdeà __REDIRECT 623  `__REDIRECT ( mk¡emp , (* __‹m¶©e ), mk¡emp64 ) 624 `__nÚnuÎ ((1)è __wur ; 626  #mk¡emp mk¡emp64 ) 629 #ifdeà __USE_LARGEFILE64 630  $mk¡emp64 (* __‹m¶©e è `__nÚnuÎ ((1)è __wur ; 634 #ifdeà __USE_MISC 641 #iâdeà __USE_FILE_OFFSET64 642  $mk¡emps (* __‹m¶©e ,  __suffixËn è `__nÚnuÎ ((1)è __wur ; 644 #ifdeà __REDIRECT 645  `__REDIRECT ( mk¡emps , (* __‹m¶©e ,  __suffixËn ), 646 mk¡emps64 è `__nÚnuÎ ((1)è __wur ; 648  #mk¡emps mk¡emps64 ) 651 #ifdeà __USE_LARGEFILE64 652  $mk¡emps64 (* __‹m¶©e ,  __suffixËn ) 653 `__nÚnuÎ ((1)è __wur ; 657 #ià defšed __USE_BSD || defšed __USE_XOPEN2K8 663 * $mkd‹mp (* __‹m¶©e è __THROW `__nÚnuÎ ((1)è __wur ; 666 #ifdeà __USE_GNU 673 #iâdeà __USE_FILE_OFFSET64 674  $mko¡emp (* __‹m¶©e ,  __æags è `__nÚnuÎ ((1)è __wur ; 676 #ifdeà __REDIRECT 677  `__REDIRECT ( mko¡emp , (* __‹m¶©e ,  __æags ), mko¡emp64 ) 678 `__nÚnuÎ ((1)è __wur ; 680  #mko¡emp mko¡emp64 ) 683 #ifdeà __USE_LARGEFILE64 684  $mko¡emp64 (* __‹m¶©e ,  __æags è `__nÚnuÎ ((1)è __wur ; 693 #iâdeà __USE_FILE_OFFSET64 694  $mko¡emps (* __‹m¶©e ,  __suffixËn ,  __æags ) 695 `__nÚnuÎ ((1)è __wur ; 697 #ifdeà __REDIRECT 698  `__REDIRECT ( mko¡emps , (* __‹m¶©e ,  __suffixËn , 699  __æags ), mko¡emps64 ) 700 `__nÚnuÎ ((1)è __wur ; 702  #mko¡emps mko¡emps64 ) 705 #ifdeà __USE_LARGEFILE64 706  $mko¡emps64 (* __‹m¶©e ,  __suffixËn ,  __æags ) 707 `__nÚnuÎ ((1)è __wur ; 712 __BEGIN_NAMESPACE_STD 717  $sy¡em ( __cÚ¡ * __commªd è __wur ; 718 __END_NAMESPACE_STD 721 #ifdef __USE_GNU 724 * $ÿnÚiÿlize_fže_Çme ( __cÚ¡ * __Çme ) 725 __THROW `__nÚnuÎ ((1)è __wur ; 728 #ià defšed __USE_BSD || defšed __USE_XOPEN_EXTENDED 734 * $»®·th ( __cÚ¡ * __»¡riù __Çme , 735 * __»¡riù __»sÞved è __THROW __wur ; 740 #iâdeà __COMPAR_FN_T 741  #__COMPAR_FN_T ) 742 (* t__com·r_â_t è( t__cÚ¡ *, __const *); 744 #ifdef __USE_GNU 745  __com·r_â_t tcom·risÚ_â_t ; 748 #ifdeà __USE_GNU 749 (* t__com·r_d_â_t è( t__cÚ¡ *, __const *, *); 752 __BEGIN_NAMESPACE_STD 755 * $b£¬ch ( __cÚ¡ * __key , __cÚ¡ * __ba£ , 756 size_t __nmemb , size_ˆ __size , __com·r_â_t __com·r ) 757 `__nÚnuÎ ((1, 2, 5)è __wur ; 761  $qsÜt (* __ba£ , size_t __nmemb , size_ˆ __size , 762 __com·r_â_t __com·r è `__nÚnuÎ ((1, 4)); 763 #ifdeà __USE_GNU 764  $qsÜt_r (* __ba£ , size_t __nmemb , size_ˆ __size , 765 __com·r_d_â_t __com·r , * __¬g ) 766 `__nÚnuÎ ((1, 4)); 771  $abs ( __x è __THROW `__©Œibu‹__ (( __cÚ¡__ )è __wur ; 772  $Ïbs ( __x è __THROW `__©Œibu‹__ (( __cÚ¡__ )è __wur ; 773 __END_NAMESPACE_STD 775 #ifdeà __USE_ISOC99 776 __ex‹nsiÚ__  $Îabs ( __x ) 777 __THROW `__©Œibu‹__ (( __cÚ¡__ )è __wur ; 781 __BEGIN_NAMESPACE_STD 785 div_t $div ( __num” ,  __d’om ) 786 __THROW `__©Œibu‹__ (( __cÚ¡__ )è __wur ; 787 ldiv_t $ldiv ( __num” ,  __d’om ) 788 __THROW `__©Œibu‹__ (( __cÚ¡__ )è __wur ; 789 __END_NAMESPACE_STD 791 #ifdeà __USE_ISOC99 792 __BEGIN_NAMESPACE_C99 793 __ex‹nsiÚ__ Îdiv_t $Îdiv ( __num” , 794  __d’om ) 795 __THROW `__©Œibu‹__ (( __cÚ¡__ )è __wur ; 796 __END_NAMESPACE_C99 800 #ià( defšed __USE_XOPEN_EXTENDED && !defšed __USE_XOPEN2K ) \ 801 || defšed __USE_SVID 808 * $ecvt ( __v®ue ,  __ndig™ , * __»¡riù __deýt , 809 * __»¡riù __sign è __THROW `__nÚnuÎ ((3, 4)è __wur ; 814 * $fcvt ( __v®ue ,  __ndig™ , * __»¡riù __deýt , 815 * __»¡riù __sign è __THROW `__nÚnuÎ ((3, 4)è __wur ; 820 * $gcvt ( __v®ue ,  __ndig™ , * __buf ) 821 __THROW `__nÚnuÎ ((3)è __wur ; 824 #ifdeà __USE_MISC 826 * $qecvt ( __v®ue ,  __ndig™ , 827 * __»¡riù __deýt , *__»¡riù __sign ) 828 __THROW `__nÚnuÎ ((3, 4)è __wur ; 829 * $qfcvt ( __v®ue ,  __ndig™ , 830 * __»¡riù __deýt , *__»¡riù __sign ) 831 __THROW `__nÚnuÎ ((3, 4)è __wur ; 832 * $qgcvt ( __v®ue ,  __ndig™ , * __buf ) 833 __THROW `__nÚnuÎ ((3)è __wur ; 838  $ecvt_r ( __v®ue ,  __ndig™ , * __»¡riù __deýt , 839 * __»¡riù __sign , *__»¡riù __buf , 840 size_t __Ën è __THROW `__nÚnuÎ ((3, 4, 5)); 841  $fcvt_r ( __v®ue ,  __ndig™ , * __»¡riù __deýt , 842 * __»¡riù __sign , *__»¡riù __buf , 843 size_t __Ën è __THROW `__nÚnuÎ ((3, 4, 5)); 845  $qecvt_r ( __v®ue ,  __ndig™ , 846 * __»¡riù __deýt , *__»¡riù __sign , 847 * __»¡riù __buf , size_t __Ën ) 848 __THROW `__nÚnuÎ ((3, 4, 5)); 849  $qfcvt_r ( __v®ue ,  __ndig™ , 850 * __»¡riù __deýt , *__»¡riù __sign , 851 * __»¡riù __buf , size_t __Ën ) 852 __THROW `__nÚnuÎ ((3, 4, 5)); 857 __BEGIN_NAMESPACE_STD 860  $mbËn ( __cÚ¡ * __s , size_t __n è __THROW __wur ; 863  $mbtowc ( wch¬_t * __»¡riù __pwc , 864 __cÚ¡ * __»¡riù __s , size_t __n è __THROW __wur ; 867  $wùomb (* __s , wch¬_t __wch¬ è __THROW __wur ; 871 size_t $mb¡owcs ( wch¬_t * __»¡riù __pwcs , 872 __cÚ¡ * __»¡riù __s , size_t __n è __THROW ; 874 size_t $wc¡ombs (* __»¡riù __s , 875 __cÚ¡ wch¬_t * __»¡riù __pwcs , size_t __n ) 876 __THROW ; 877 __END_NAMESPACE_STD 880 #ifdeà __USE_SVID 885  $½m©ch ( __cÚ¡ * __»¥Ú£ è __THROW `__nÚnuÎ ((1)è __wur ; 889 #ià defšed __USE_XOPEN_EXTENDED || defšed __USE_XOPEN2K8 896  $g‘subÝt (** __»¡riù __ÝtiÚp , 897 * __cÚ¡ * __»¡riù __tok’s , 898 ** __»¡riù __v®u• ) 899 __THROW `__nÚnuÎ ((1, 2, 3)è __wur ; 903 #ifdeà __USE_XOPEN 905  $£tkey ( __cÚ¡ * __key è __THROW `__nÚnuÎ ((1)); 911 #ifdeà __USE_XOPEN2KXSI 913  $posix_Ý’± ( __oæag è __wur ; 916 #ifdeà __USE_XOPEN 921  $g¿Á± ( __fd è __THROW ; 925  $uÆock± ( __fd è __THROW ; 930 * $±¢ame ( __fd è __THROW __wur ; 933 #ifdeà __USE_GNU 937  $±¢ame_r ( __fd , * __buf , size_t __buæ’ ) 938 __THROW `__nÚnuÎ ((2)); 941  `g‘± (); 944 #ifdeà __USE_BSD 948  $g‘lßdavg ( __lßdavg [],  __ÃËm ) 949 __THROW `__nÚnuÎ ((1)); 954 #ià __USE_FORTIFY_LEVEL > 0 && defšed __ex‹º_®ways_šlše 955  ~ 957 #ifdeà __LDBL_COMPAT 958  ~ 962 #undeà __Ãed_m®loc_ªd_ÿÎoc 964 __END_DECLS @/usr/include/string.h 24 #iâdef _STRING_H 25  #_STRING_H 1 ) 27  ~<ã©u»s.h > 29 g__BEGIN_DECLS 32  #__Ãed_size_t ) 33  #__Ãed_NULL ) 34  ~<¡ddef.h > 37 #ià defšed __ýlu¥lus && __GNUC_PREREQ (4, 4) 38  #__CORRECT_ISO_CPP_STRING_H_PROTO ) 42 __BEGIN_NAMESPACE_STD 44 * $memýy (* __»¡riù __de¡ , 45 __cÚ¡ * __»¡riù __¤c , size_t __n ) 46 __THROW `__nÚnuÎ ((1, 2)); 49 * $memmove (* __de¡ , __cÚ¡ * __¤c , size_t __n ) 50 __THROW `__nÚnuÎ ((1, 2)); 51 __END_NAMESPACE_STD 56 #ià defšed __USE_SVID || defšed __USE_BSD || defšed __USE_XOPEN 57 * $memcýy (* __»¡riù __de¡ , __cÚ¡ *__»¡riù __¤c , 58  __c , size_t __n ) 59 __THROW `__nÚnuÎ ((1, 2)); 63 __BEGIN_NAMESPACE_STD 65 * $mem£t (* __s ,  __c , size_t __n è __THROW `__nÚnuÎ ((1)); 68  $memcmp ( __cÚ¡ * __s1 , __cÚ¡ * __s2 , size_t __n ) 69 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 72 #ifdeà __CORRECT_ISO_CPP_STRING_H_PROTO 75 * `memchr (* __s ,  __c , size_t __n ) 76 __THROW `__asm ("memchr"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 77 __cÚ¡ * `memchr (__cÚ¡ * __s ,  __c , size_t __n ) 78 __THROW `__asm ("memchr"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 80 #ifdeà __OPTIMIZE__ 81 __ex‹º_®ways_šlše * 82 `memchr (* __s ,  __c , size_t __n è __THROW 84  `__bužtš_memchr ( __s , __c , __n ); 87 __ex‹º_®ways_šlše __cÚ¡ * 88 `memchr ( __cÚ¡ * __s ,  __c , size_t __n è __THROW 90  `__bužtš_memchr ( __s , __c , __n ); 93 } } 95 * $memchr ( __cÚ¡ * __s ,  __c , size_t __n ) 96 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 98 __END_NAMESPACE_STD 100 #ifdeà __USE_GNU 103 #ifdeà __CORRECT_ISO_CPP_STRING_H_PROTO 104 "C++" * $¿wmemchr (* __s ,  __c ) 105 __THROW `__asm ("¿wmemchr"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 106 "C++" __cÚ¡ * $¿wmemchr ( __cÚ¡ * __s ,  __c ) 107 __THROW `__asm ("¿wmemchr"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 109 * $¿wmemchr ( __cÚ¡ * __s ,  __c ) 110 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 114 #ifdeà __CORRECT_ISO_CPP_STRING_H_PROTO 115 "C++" * $memrchr (* __s ,  __c , size_t __n ) 116 __THROW `__asm ("memrchr"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 117 "C++" __cÚ¡ * $memrchr ( __cÚ¡ * __s ,  __c , size_t __n ) 118 __THROW `__asm ("memrchr"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 120 * $memrchr ( __cÚ¡ * __s ,  __c , size_t __n ) 121 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 126 __BEGIN_NAMESPACE_STD 128 * $¡rýy (* __»¡riù __de¡ , __cÚ¡ *__»¡riù __¤c ) 129 __THROW `__nÚnuÎ ((1, 2)); 131 * $¡ºýy (* __»¡riù __de¡ , 132 __cÚ¡ * __»¡riù __¤c , size_t __n ) 133 __THROW `__nÚnuÎ ((1, 2)); 136 * $¡rÿt (* __»¡riù __de¡ , __cÚ¡ *__»¡riù __¤c ) 137 __THROW `__nÚnuÎ ((1, 2)); 139 * $¡ºÿt (* __»¡riù __de¡ , __cÚ¡ *__»¡riù __¤c , 140 size_t __n è __THROW `__nÚnuÎ ((1, 2)); 143  $¡rcmp ( __cÚ¡ * __s1 , __cÚ¡ * __s2 ) 144 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 146  $¡ºcmp ( __cÚ¡ * __s1 , __cÚ¡ * __s2 , size_t __n ) 147 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 150  $¡rcÞl ( __cÚ¡ * __s1 , __cÚ¡ * __s2 ) 151 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 153 size_t $¡rxäm (* __»¡riù __de¡ , 154 __cÚ¡ * __»¡riù __¤c , size_t __n ) 155 __THROW `__nÚnuÎ ((2)); 156 __END_NAMESPACE_STD 158 #ifdeà __USE_XOPEN2K8 162  ~ 165  $¡rcÞl_l ( __cÚ¡ * __s1 , __cÚ¡ * __s2 , __loÿË_t __l ) 166 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2, 3)); 168 size_t $¡rxäm_l (* __de¡ , __cÚ¡ * __¤c , size_t __n , 169 __loÿË_t __l è __THROW `__nÚnuÎ ((2, 4)); 172 #ià defšed __USE_SVID || defšed __USE_BSD || defšed __USE_XOPEN_EXTENDED \ 173 || defšed __USE_XOPEN2K8 175 * $¡rdup ( __cÚ¡ * __s ) 176 __THROW __©Œibu‹_m®loc__ `__nÚnuÎ ((1)); 182 #ià defšed __USE_XOPEN2K8 183 * $¡ºdup ( __cÚ¡ * __¡ršg , size_t __n ) 184 __THROW __©Œibu‹_m®loc__ `__nÚnuÎ ((1)); 187 #ià defšed __USE_GNU && defšed __GNUC__ 189  #¡rdu· ( s ) \ 190 ( __ex‹nsiÚ__ \ 192 __cÚ¡ * __Þd = ( s ); \ 193 size_t __Ën = `¡¾’ ( __Þd ) + 1; \ 194 * __Ãw = (*è `__bužtš_®loÿ ( __Ën ); \ 195 (*è `memýy ( __Ãw , __Þd , __Ën ); \ 196 } })) ) 199  #¡ºdu· ( s , n ) \ 200 ( __ex‹nsiÚ__ \ 202 __cÚ¡ * __Þd = ( s ); \ 203 size_t __Ën = `¡ºËn ( __Þd , ( n )); \ 204 * __Ãw = (*è `__bužtš_®loÿ ( __Ën + 1); \ 205 __Ãw [ __Ën ] = '\0'; \ 206 (*è `memýy ( __Ãw , __Þd , __Ën ); \ 207 })) ) 210 g__BEGIN_NAMESPACE_STD 212 #ifdeà __CORRECT_ISO_CPP_STRING_H_PROTO 215 * ¡rchr (* __s ,  __c ) 216 __THROW __asm ("¡rchr"è __©Œibu‹_pu»__ __nÚnuÎ ((1)); 217 __cÚ¡ * ¡rchr (__cÚ¡ * __s ,  __c ) 218 __THROW __asm ("¡rchr"è __©Œibu‹_pu»__ __nÚnuÎ ((1)); 220 #ifdeà __OPTIMIZE__ 221 __ex‹º_®ways_šlše * 222 ¡rchr (* __s ,  __c è g__THROW 224  __bužtš_¡rchr ( __s , __c ); 227 __ex‹º_®ways_šlše __cÚ¡ * 228 ¡rchr ( __cÚ¡ * __s ,  __c è g__THROW 230  __bužtš_¡rchr ( __s , __c ); 235 * $¡rchr ( __cÚ¡ * __s ,  __c ) 236 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 239 #ifdeà __CORRECT_ISO_CPP_STRING_H_PROTO 242 * `¡¼chr (* __s ,  __c ) 243 __THROW `__asm ("¡¼chr"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 244 __cÚ¡ * `¡¼chr (__cÚ¡ * __s ,  __c ) 245 __THROW `__asm ("¡¼chr"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 247 #ifdeà __OPTIMIZE__ 248 __ex‹º_®ways_šlše * 249 `¡¼chr (* __s ,  __c è __THROW 251  `__bužtš_¡¼chr ( __s , __c ); 254 __ex‹º_®ways_šlše __cÚ¡ * 255 `¡¼chr ( __cÚ¡ * __s ,  __c è __THROW 257  `__bužtš_¡¼chr ( __s , __c ); 260 } } 262 * $¡¼chr ( __cÚ¡ * __s ,  __c ) 263 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 265 __END_NAMESPACE_STD 267 #ifdeà __USE_GNU 270 #ifdeà __CORRECT_ISO_CPP_STRING_H_PROTO 271 "C++" * $¡rchºul (* __s ,  __c ) 272 __THROW `__asm ("¡rchºul"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 273 "C++" __cÚ¡ * $¡rchºul ( __cÚ¡ * __s ,  __c ) 274 __THROW `__asm ("¡rchºul"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 276 * $¡rchºul ( __cÚ¡ * __s ,  __c ) 277 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 281 __BEGIN_NAMESPACE_STD 284 size_t $¡rc¥n ( __cÚ¡ * __s , __cÚ¡ * __»jeù ) 285 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 288 size_t $¡r¥n ( __cÚ¡ * __s , __cÚ¡ * __acû± ) 289 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 291 #ifdeà __CORRECT_ISO_CPP_STRING_H_PROTO 294 * `¡½brk (* __s , __cÚ¡ * __acû± ) 295 __THROW `__asm ("¡½brk"è __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 296 __cÚ¡ * `¡½brk (__cÚ¡ * __s , __cÚ¡ * __acû± ) 297 __THROW `__asm ("¡½brk"è __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 299 #ifdeà __OPTIMIZE__ 300 __ex‹º_®ways_šlše * 301 `¡½brk (* __s , __cÚ¡ * __acû± è __THROW 303  `__bužtš_¡½brk ( __s , __acû± ); 306 __ex‹º_®ways_šlše __cÚ¡ * 307 `¡½brk ( __cÚ¡ * __s , __cÚ¡ * __acû± è __THROW 309  `__bužtš_¡½brk ( __s , __acû± ); 312 } } 314 * $¡½brk ( __cÚ¡ * __s , __cÚ¡ * __acû± ) 315 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 318 #ifdeà __CORRECT_ISO_CPP_STRING_H_PROTO 321 * `¡r¡r (* __hay¡ack , __cÚ¡ * __ÃedË ) 322 __THROW `__asm ("¡r¡r"è __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 323 __cÚ¡ * `¡r¡r (__cÚ¡ * __hay¡ack , 324 __cÚ¡ * __ÃedË ) 325 __THROW `__asm ("¡r¡r"è __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 327 #ifdeà __OPTIMIZE__ 328 __ex‹º_®ways_šlše * 329 `¡r¡r (* __hay¡ack , __cÚ¡ * __ÃedË è __THROW 331  `__bužtš_¡r¡r ( __hay¡ack , __ÃedË ); 334 __ex‹º_®ways_šlše __cÚ¡ * 335 `¡r¡r ( __cÚ¡ * __hay¡ack , __cÚ¡ * __ÃedË è __THROW 337  `__bužtš_¡r¡r ( __hay¡ack , __ÃedË ); 340 } } 342 * $¡r¡r ( __cÚ¡ * __hay¡ack , __cÚ¡ * __ÃedË ) 343 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 348 * $¡¹ok (* __»¡riù __s , __cÚ¡ *__»¡riù __d–im ) 349 __THROW `__nÚnuÎ ((2)); 350 __END_NAMESPACE_STD 354 * $__¡¹ok_r (* __»¡riù __s , 355 __cÚ¡ * __»¡riù __d–im , 356 ** __»¡riù __§ve_±r ) 357 __THROW `__nÚnuÎ ((2, 3)); 358 #ià defšed __USE_POSIX || defšed __USE_MISC 359 * $¡¹ok_r (* __»¡riù __s , __cÚ¡ *__»¡riù __d–im , 360 ** __»¡riù __§ve_±r ) 361 __THROW `__nÚnuÎ ((2, 3)); 364 #ifdeà __USE_GNU 366 #ifdeà __CORRECT_ISO_CPP_STRING_H_PROTO 367 "C++" * $¡rÿ£¡r (* __hay¡ack , __cÚ¡ * __ÃedË ) 368 __THROW `__asm ("¡rÿ£¡r"è __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 369 "C++" __cÚ¡ * $¡rÿ£¡r ( __cÚ¡ * __hay¡ack , 370 __cÚ¡ * __ÃedË ) 371 __THROW `__asm ("¡rÿ£¡r"è __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 373 * $¡rÿ£¡r ( __cÚ¡ * __hay¡ack , __cÚ¡ * __ÃedË ) 374 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 378 #ifdeà __USE_GNU 382 * $memmem ( __cÚ¡ * __hay¡ack , size_t __hay¡ackËn , 383 __cÚ¡ * __ÃedË , size_t __ÃedËËn ) 384 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 3)); 388 * $__mempýy (* __»¡riù __de¡ , 389 __cÚ¡ * __»¡riù __¤c , size_t __n ) 390 __THROW `__nÚnuÎ ((1, 2)); 391 * $mempýy (* __»¡riù __de¡ , 392 __cÚ¡ * __»¡riù __¤c , size_t __n ) 393 __THROW `__nÚnuÎ ((1, 2)); 397 __BEGIN_NAMESPACE_STD 399 size_t $¡¾’ ( __cÚ¡ * __s ) 400 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 401 __END_NAMESPACE_STD 403 #ifdef __USE_XOPEN2K8 406 size_t $¡ºËn ( __cÚ¡ * __¡ršg , size_t __maxËn ) 407 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 411 __BEGIN_NAMESPACE_STD 413 * $¡»¼Ü ( __”ºum è __THROW ; 414 __END_NAMESPACE_STD 415 #ià defšed __USE_XOPEN2K || defšed __USE_MISC 423 #ià defšed __USE_XOPEN2K && !defšed __USE_GNU 426 #ifdeà __REDIRECT_NTH 427  `__REDIRECT_NTH ( ¡»¼Ü_r , 428 ( __”ºum , * __buf , size_t __buæ’ ), 429 __xpg_¡»¼Ü_r è `__nÚnuÎ ((2)); 431  $__xpg_¡»¼Ü_r ( __”ºum , * __buf , size_t __buæ’ ) 432 __THROW `__nÚnuÎ ((2)); 433  #¡»¼Ü_r __xpg_¡»¼Ü_r ) 438 * $¡»¼Ü_r ( __”ºum , * __buf , size_t __buæ’ ) 439 __THROW `__nÚnuÎ ((2)); 443 #ifdeà __USE_XOPEN2K8 445 * $¡»¼Ü_l ( __”ºum , __loÿË_t __l è __THROW ; 451  $__bz”o (* __s , size_t __n è __THROW `__nÚnuÎ ((1)); 453 #ifdeà __USE_BSD 455  $bcÝy ( __cÚ¡ * __¤c , * __de¡ , size_t __n ) 456 __THROW `__nÚnuÎ ((1, 2)); 459  $bz”o (* __s , size_t __n è __THROW `__nÚnuÎ ((1)); 462  $bcmp ( __cÚ¡ * __s1 , __cÚ¡ * __s2 , size_t __n ) 463 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 466 #ifdeà __CORRECT_ISO_CPP_STRING_H_PROTO 469 * `šdex (* __s ,  __c ) 470 __THROW `__asm ("šdex"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 471 __cÚ¡ * `šdex (__cÚ¡ * __s ,  __c ) 472 __THROW `__asm ("šdex"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 474 #ià defšed __OPTIMIZE__ && !defšed __CORRECT_ISO_CPP_STRINGS_H_PROTO 475 __ex‹º_®ways_šlše * 476 `šdex (* __s ,  __c è __THROW 478  `__bužtš_šdex ( __s , __c ); 481 __ex‹º_®ways_šlše __cÚ¡ * 482 `šdex ( __cÚ¡ * __s ,  __c è __THROW 484  `__bužtš_šdex ( __s , __c ); 487 } } 489 * $šdex ( __cÚ¡ * __s ,  __c ) 490 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 494 #ifdeà __CORRECT_ISO_CPP_STRING_H_PROTO 497 * `ršdex (* __s ,  __c ) 498 __THROW `__asm ("ršdex"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 499 __cÚ¡ * `ršdex (__cÚ¡ * __s ,  __c ) 500 __THROW `__asm ("ršdex"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 502 #ià defšed __OPTIMIZE__ && !defšed __CORRECT_ISO_CPP_STRINGS_H_PROTO 503 __ex‹º_®ways_šlše * 504 `ršdex (* __s ,  __c è __THROW 506  `__bužtš_ršdex ( __s , __c ); 509 __ex‹º_®ways_šlše __cÚ¡ * 510 `ršdex ( __cÚ¡ * __s ,  __c è __THROW 512  `__bužtš_ršdex ( __s , __c ); 515 } } 517 * $ršdex ( __cÚ¡ * __s ,  __c ) 518 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 523  $ffs ( __i è __THROW `__©Œibu‹__ (( __cÚ¡__ )); 527 #ifdef __USE_GNU 528  $ff¦ ( __l è __THROW `__©Œibu‹__ (( __cÚ¡__ )); 529 #ifdeà __GNUC__ 530 __ex‹nsiÚ__  $ff¦l ( __Î ) 531 __THROW `__©Œibu‹__ (( __cÚ¡__ )); 536  $¡rÿ£cmp ( __cÚ¡ * __s1 , __cÚ¡ * __s2 ) 537 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 540  $¡ºÿ£cmp ( __cÚ¡ * __s1 , __cÚ¡ * __s2 , size_t __n ) 541 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 544 #ifdef __USE_GNU 547  $¡rÿ£cmp_l ( __cÚ¡ * __s1 , __cÚ¡ * __s2 , 548 __loÿË_t __loc ) 549 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2, 3)); 551  $¡ºÿ£cmp_l ( __cÚ¡ * __s1 , __cÚ¡ * __s2 , 552 size_t __n , __loÿË_t __loc ) 553 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2, 4)); 556 #ifdef __USE_BSD 559 * $¡r£p (** __»¡riù __¡ršgp , 560 __cÚ¡ * __»¡riù __d–im ) 561 __THROW `__nÚnuÎ ((1, 2)); 564 #ifdef __USE_XOPEN2K8 566 * $¡rsigÇl ( __sig è __THROW ; 569 * $__¡pýy (* __»¡riù __de¡ , __cÚ¡ *__»¡riù __¤c ) 570 __THROW `__nÚnuÎ ((1, 2)); 571 * $¡pýy (* __»¡riù __de¡ , __cÚ¡ *__»¡riù __¤c ) 572 __THROW `__nÚnuÎ ((1, 2)); 576 * $__¡²ýy (* __»¡riù __de¡ , 577 __cÚ¡ * __»¡riù __¤c , size_t __n ) 578 __THROW `__nÚnuÎ ((1, 2)); 579 * $¡²ýy (* __»¡riù __de¡ , 580 __cÚ¡ * __»¡riù __¤c , size_t __n ) 581 __THROW `__nÚnuÎ ((1, 2)); 584 #ifdef __USE_GNU 586  $¡rv”scmp ( __cÚ¡ * __s1 , __cÚ¡ * __s2 ) 587 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2)); 590 * $¡räy (* __¡ršg è __THROW `__nÚnuÎ ((1)); 593 * $memäob (* __s , size_t __n è __THROW `__nÚnuÎ ((1)); 595 #iâdeà ba£Çme 600 #ifdeà __CORRECT_ISO_CPP_STRING_H_PROTO 601 "C++" * $ba£Çme (* __fž’ame ) 602 __THROW `__asm ("ba£Çme"è `__nÚnuÎ ((1)); 603 "C++" __cÚ¡ * $ba£Çme ( __cÚ¡ * __fž’ame ) 604 __THROW `__asm ("ba£Çme"è `__nÚnuÎ ((1)); 606 * $ba£Çme ( __cÚ¡ * __fž’ame è __THROW `__nÚnuÎ ((1)); 612 #ià defšed __GNUC__ && __GNUC__ >= 2 613 #ià defšed __OPTIMIZE__ && !defšed __OPTIMIZE_SIZE__ \ 614 && ! defšed __NO_INLINE__ && !defšed __ýlu¥lus 634  ~ 637  ~ 640 #ià __USE_FORTIFY_LEVEL > 0 && defšed __ex‹º_®ways_šlše 642  ~ 646 __END_DECLS @/usr/include/strings.h 20 #iâdef _STRINGS_H 21  #_STRINGS_H 1 ) 26 #ià! defšed _STRING_H || !defšed __USE_BSD 28  ~<ã©u»s.h > 29  #__Ãed_size_t ) 30  ~<¡ddef.h > 33 #ià defšed __ýlu¥lus && __GNUC_PREREQ (4, 4) 34  #__CORRECT_ISO_CPP_STRINGS_H_PROTO ) 37 g__BEGIN_DECLS 39 #ià defšed __USE_MISC || !defšed __USE_XOPEN2K8 41  $bcmp ( __cÚ¡ * __s1 , __cÚ¡ * __s2 , size_t __n ) 42 __THROW __©Œibu‹_pu»__ ; 45  $bcÝy ( __cÚ¡ * __¤c , * __de¡ , size_t __n è __THROW ; 48  $bz”o (* __s , size_t __n è __THROW ; 51 #ifdeà __CORRECT_ISO_CPP_STRINGS_H_PROTO 54 * `šdex (* __s ,  __c ) 55 __THROW `__asm ("šdex"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 56 __cÚ¡ * `šdex (__cÚ¡ * __s ,  __c ) 57 __THROW `__asm ("šdex"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 59 #ià defšed __OPTIMIZE__ && !defšed __CORRECT_ISO_CPP_STRING_H_PROTO 60 __ex‹º_®ways_šlše * 61 `šdex (* __s ,  __c è __THROW 63  `__bužtš_šdex ( __s , __c ); 66 __ex‹º_®ways_šlše __cÚ¡ * 67 `šdex ( __cÚ¡ * __s ,  __c è __THROW 69  `__bužtš_šdex ( __s , __c ); 72 } } 74 * $šdex ( __cÚ¡ * __s ,  __c ) 75 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 79 #ifdeà __CORRECT_ISO_CPP_STRINGS_H_PROTO 82 * `ršdex (* __s ,  __c ) 83 __THROW `__asm ("ršdex"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 84 __cÚ¡ * `ršdex (__cÚ¡ * __s ,  __c ) 85 __THROW `__asm ("ršdex"è __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 87 #ià defšed __OPTIMIZE__ && !defšed __CORRECT_ISO_CPP_STRING_H_PROTO 88 __ex‹º_®ways_šlše * 89 `ršdex (* __s ,  __c è __THROW 91  `__bužtš_ršdex ( __s , __c ); 94 __ex‹º_®ways_šlše __cÚ¡ * 95 `ršdex ( __cÚ¡ * __s ,  __c è __THROW 97  `__bužtš_ršdex ( __s , __c ); 100 } } 102 * $ršdex ( __cÚ¡ * __s ,  __c ) 103 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1)); 107 #ià defšed __USE_MISC || !defšed __USE_XOPEN2K8 || defšed __USE_XOPEN2K8XSI 110  $ffs ( __i è __THROW `__©Œibu‹__ ((const)); 114  $¡rÿ£cmp ( __cÚ¡ * __s1 , __cÚ¡ * __s2 ) 115 __THROW __©Œibu‹_pu»__ ; 118  $¡ºÿ£cmp ( __cÚ¡ * __s1 , __cÚ¡ * __s2 , size_t __n ) 119 __THROW __©Œibu‹_pu»__ ; 121 #ifdef __USE_XOPEN2K8 125  ~ 129  $¡rÿ£cmp_l ( __cÚ¡ * __s1 , __cÚ¡ * __s2 , 130 __loÿË_t __loc ) 131 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2, 3)); 133  $¡ºÿ£cmp_l ( __cÚ¡ * __s1 , __cÚ¡ * __s2 , 134 size_t __n , __loÿË_t __loc ) 135 __THROW __©Œibu‹_pu»__ `__nÚnuÎ ((1, 2, 4)); 138 __END_DECLS @/usr/include/syslog.h 1  ~ @/usr/include/termios.h 23 #iâdef _TERMIOS_H 24  #_TERMIOS_H 1 ) 26  ~<ã©u»s.h > 27 #ià defšed __USE_UNIX98 || defšed __USE_XOPEN2K8 29  ~ 30 #iâdeà __pid_t_defšed 31  __pid_t tpid_t ; 32  #__pid_t_defšed ) 36 g__BEGIN_DECLS 40  ~ 42 #ifdeà __USE_BSD 45  #CCEQ ( v® , c è((cè=ð(v®è&& (v®è!ð _POSIX_VDISABLE ) ) 49 ¥“d_t $cfg‘o¥“d ( __cÚ¡  ‹rmios * __‹rmios_p è __THROW ; 52 ¥“d_t $cfg‘i¥“d ( __cÚ¡  ‹rmios * __‹rmios_p è __THROW ; 55  $cf£to¥“d ( ‹rmios * __‹rmios_p , ¥“d_t __¥“d è __THROW ; 58  $cf£ti¥“d ( ‹rmios * __‹rmios_p , ¥“d_t __¥“d è __THROW ; 60 #ifdef __USE_BSD 62  $cf£t¥“d ( ‹rmios * __‹rmios_p , ¥“d_t __¥“d è __THROW ; 67  $tcg‘©Œ ( __fd ,  ‹rmios * __‹rmios_p è __THROW ; 71  $tc£‰r ( __fd ,  __ÝtiÚ®_aùiÚs , 72 __cÚ¡  ‹rmios * __‹rmios_p è __THROW ; 75 #ifdef __USE_BSD 77  $cfmak”aw ( ‹rmios * __‹rmios_p è __THROW ; 81  $tc£ndb»ak ( __fd ,  __du¿tiÚ è __THROW ; 87  `tcd¿š ( __fd ); 91  $tcæush ( __fd ,  __queue_£ËùÜ è __THROW ; 95  $tcæow ( __fd ,  __aùiÚ è __THROW ; 98 #ifdeà __USE_UNIX98 100 __pid_t $tcg‘sid ( __fd è __THROW ; 104 #ifdeà __USE_BSD 105  ~ 108 __END_DECLS @/usr/include/time.h 23 #iâdef _TIME_H 25 #ià(! defšed __Ãed_time_t && !defšed __Ãed_þock_t && \ 26 ! defšed g__Ãed_time¥ec ) 27  #_TIME_H 1 ) 28  ~<ã©u»s.h > 30 g__BEGIN_DECLS 34 #ifdef _TIME_H 36  #__Ãed_size_t ) 37  #__Ãed_NULL ) 38  ~<¡ddef.h > 42  ~ 45 #ià! defšed __STRICT_ANSI__ && !defšed __USE_XOPEN2K 46 #iâdeà CLK_TCK 47  #CLK_TCK CLOCKS_PER_SEC ) 53 #ià! defšed __þock_t_defšed && (defšed _TIME_H || defšed __Ãed_þock_t ) 54  #__þock_t_defšed 1 ) 56  ~ 58 __BEGIN_NAMESPACE_STD 60  __þock_t tþock_t ; 61 g__END_NAMESPACE_STD 62 #ià defšed __USE_XOPEN || defšed __USE_POSIX || defšed __USE_MISC 63 $__USING_NAMESPACE_STD ( þock_t ) 67 #undeà __Ãed_þock_t 69 #ià! defšed __time_t_defšed && (defšed _TIME_H || defšed __Ãed_time_t ) 70  #__time_t_defšed 1 ) 72  ~ 74 __BEGIN_NAMESPACE_STD 76  __time_t ttime_t ; 77 __END_NAMESPACE_STD 78 #ià defšed __USE_POSIX || defšed __USE_MISC || defšed __USE_SVID 79 $__USING_NAMESPACE_STD ( time_t ) 83 #undeà __Ãed_time_t 85 #ià! defšed __þockid_t_defšed && \ 86 (( defšed _TIME_H && defšed __USE_POSIX199309 è|| defšed __Ãed_þockid_t ) 87  #__þockid_t_defšed 1 ) 89  ~ 92  __þockid_t tþockid_t ; 95 #undeà __þockid_time_t 97 #ià! defšed __tim”_t_defšed && \ 98 (( defšed _TIME_H && defšed __USE_POSIX199309 è|| defšed __Ãed_tim”_t ) 99  #__tim”_t_defšed 1 ) 101  ~ 104  __tim”_t ttim”_t ; 107 #undeà __Ãed_tim”_t 110 #ià! defšed __time¥ec_defšed && \ 111 (( defšed _TIME_H && \ 112 ( defšed __USE_POSIX199309 || defšed __USE_MISC )) || \ 113 defšed __Ãed_time¥ec ) 114  #__time¥ec_defšed 1 ) 116  ~ 120  stime¥ec 122 __time_t tv_£c ; 123  tv_n£c ; 127 #undeà __Ãed_time¥ec 130 #ifdef _TIME_H 131 __BEGIN_NAMESPACE_STD 133  stm 135  tm_£c ; 136  tm_mš ; 137  tm_hour ; 138  tm_mday ; 139  tm_mÚ ; 140  tm_y—r ; 141  tm_wday ; 142  tm_yday ; 143  tm_isd¡ ; 145 #ifdef __USE_BSD 146  tm_gmtoff ; 147 __cÚ¡ * tm_zÚe ; 149  __tm_gmtoff ; 150 __cÚ¡ * __tm_zÚe ; 153 __END_NAMESPACE_STD 154 #ià defšed __USE_XOPEN || defšed __USE_POSIX || defšed __USE_MISC 155 $__USING_NAMESPACE_STD ( tm ) 159 #ifdeà __USE_POSIX199309 161  s™im”¥ec 163  time¥ec ™_š‹rv® ; 164  time¥ec ™_v®ue ; 168  sigev’t ; 172 #ifdeà __USE_XOPEN2K 173 #iâdeà __pid_t_defšed 174  __pid_t tpid_t ; 175  #__pid_t_defšed ) 180 __BEGIN_NAMESPACE_STD 183 þock_t $þock (è __THROW ; 186 time_t $time ( time_t * __tim” è __THROW ; 189  $difáime ( time_t __time1 ,ime_ˆ __time0 ) 190 __THROW `__©Œibu‹__ (( __cÚ¡__ )); 193 time_t $mktime ( tm * __ è __THROW ; 199 size_t $¡ráime (* __»¡riù __s , size_t __maxsize , 200 __cÚ¡ * __»¡riù __fÜm© , 201 __cÚ¡  tm * __»¡riù __ è __THROW ; 202 __END_NAMESPACE_STD 204 #ifdeà __USE_XOPEN 207 * $¡½time ( __cÚ¡ * __»¡riù __s , 208 __cÚ¡ * __»¡riù __fmt ,  tm * __ ) 209 __THROW ; 212 #ifdeà __USE_XOPEN2K8 215  ~ 217 size_t $¡ráime_l (* __»¡riù __s , size_t __maxsize , 218 __cÚ¡ * __»¡riù __fÜm© , 219 __cÚ¡  tm * __»¡riù __ , 220 __loÿË_t __loc è __THROW ; 223 #ifdeà __USE_GNU 224 * $¡½time_l ( __cÚ¡ * __»¡riù __s , 225 __cÚ¡ * __»¡riù __fmt ,  tm * __ , 226 __loÿË_t __loc è __THROW ; 230 __BEGIN_NAMESPACE_STD 233  tm * $gmtime ( __cÚ¡ time_t * __tim” è __THROW ; 237  tm * $loÿÉime ( __cÚ¡ time_t * __tim” è __THROW ; 238 __END_NAMESPACE_STD 240 #ià defšed __USE_POSIX || defšed __USE_MISC 243  tm * $gmtime_r ( __cÚ¡ time_t * __»¡riù __tim” , 244  tm * __»¡riù __ è __THROW ; 248  tm * $loÿÉime_r ( __cÚ¡ time_t * __»¡riù __tim” , 249  tm * __»¡riù __ è __THROW ; 252 __BEGIN_NAMESPACE_STD 255 * $asùime ( __cÚ¡  tm * __ è __THROW ; 258 * $ùime ( __cÚ¡ time_t * __tim” è __THROW ; 259 __END_NAMESPACE_STD 261 #ià defšed __USE_POSIX || defšed __USE_MISC 266 * $asùime_r ( __cÚ¡  tm * __»¡riù __ , 267 * __»¡riù __buf è __THROW ; 270 * $ùime_r ( __cÚ¡ time_t * __»¡riù __tim” , 271 * __»¡riù __buf è __THROW ; 276 * __tzÇme [2]; 277  __daylight ; 278  __timezÚe ; 281 #ifdef __USE_POSIX 283 * tzÇme [2]; 287  $tz£t (è __THROW ; 290 #ià defšed __USE_SVID || defšed __USE_XOPEN 291  daylight ; 292  timezÚe ; 295 #ifdeà __USE_SVID 298  $¡ime ( __cÚ¡ time_t * __wh’ è __THROW ; 304  #__i¦—p ( y—r ) \ 305 (( y—r è% 4 =ð0 && ((y—rè% 100 !ð0 || (y—rè% 400 =ð0)) ) 308 #ifdeà __USE_MISC 313 time_t $timegm ( tm * __ è __THROW ; 316 time_t $tim–oÿl ( tm * __ è __THROW ; 319  $dysize ( __y—r è __THROW `__©Œibu‹__ (( __cÚ¡__ )); 323 #ifdeà __USE_POSIX199309 328  `Çno¦“p ( __cÚ¡  time¥ec * __»que¡ed_time , 329  time¥ec * __»maššg ); 333  $þock_g‘»s ( þockid_t __þock_id ,  time¥ec * __»s è __THROW ; 336  $þock_g‘time ( þockid_t __þock_id ,  time¥ec * __ è __THROW ; 339  $þock_£‰ime ( þockid_t __þock_id , __cÚ¡  time¥ec * __ ) 340 __THROW ; 342 #ifdeà __USE_XOPEN2K 347  `þock_Çno¦“p ( þockid_t __þock_id ,  __æags , 348 __cÚ¡  time¥ec * __»q , 349  time¥ec * __»m ); 352  $þock_g‘ýuþockid ( pid_t __pid , þockid_t * __þock_id è __THROW ; 357  $tim”_ü—‹ ( þockid_t __þock_id , 358  sigev’t * __»¡riù __evp , 359 tim”_t * __»¡riù __tim”id è __THROW ; 362  $tim”_d–‘e ( tim”_t __tim”id è __THROW ; 365  $tim”_£‰ime ( tim”_t __tim”id ,  __æags , 366 __cÚ¡  ™im”¥ec * __»¡riù __v®ue , 367  ™im”¥ec * __»¡riù __ov®ue è __THROW ; 370  $tim”_g‘time ( tim”_t __tim”id ,  ™im”¥ec * __v®ue ) 371 __THROW ; 374  $tim”_g‘ov”run ( tim”_t __tim”id è __THROW ; 378 #ifdeà __USE_XOPEN_EXTENDED 390  g‘d©e_”r ; 399  tm * `g‘d©e ( __cÚ¡ * __¡ršg ); 402 #ifdeà __USE_GNU 413  `g‘d©e_r ( __cÚ¡ * __»¡riù __¡ršg , 414  tm * __»¡riù __»sbuå ); 417 __END_DECLS @/usr/include/unistd.h 23 #iâdef _UNISTD_H 24  #_UNISTD_H 1 ) 26  ~<ã©u»s.h > 28 g__BEGIN_DECLS 33 #ifdeà __USE_XOPEN2K8 35  #_POSIX_VERSION 200809L ) 36 #–ià defšed __USE_XOPEN2K 38  #_POSIX_VERSION 200112L ) 39 #–ià defšed __USE_POSIX199506 41  #_POSIX_VERSION 199506L ) 42 #–ià defšed __USE_POSIX199309 44  #_POSIX_VERSION 199309L ) 47  #_POSIX_VERSION 199009L ) 53 #ifdeà __USE_XOPEN2K8 54  #__POSIX2_THIS_VERSION 200809L ) 56 #–ià defšed __USE_XOPEN2K 58  #__POSIX2_THIS_VERSION 200112L ) 59 #–ià defšed __USE_POSIX199506 61  #__POSIX2_THIS_VERSION 199506L ) 64  #__POSIX2_THIS_VERSION 199209L ) 68  #_POSIX2_VERSION __POSIX2_THIS_VERSION ) 72  #_POSIX2_C_BIND __POSIX2_THIS_VERSION ) 76  #_POSIX2_C_DEV __POSIX2_THIS_VERSION ) 80  #_POSIX2_SW_DEV __POSIX2_THIS_VERSION ) 84  #_POSIX2_LOCALEDEF __POSIX2_THIS_VERSION ) 87 #ifdeà __USE_XOPEN2K8 88  #_XOPEN_VERSION 700 ) 89 #–ià defšed __USE_XOPEN2K 90  #_XOPEN_VERSION 600 ) 91 #–ià defšed __USE_UNIX98 92  #_XOPEN_VERSION 500 ) 94  #_XOPEN_VERSION 4 ) 98  #_XOPEN_XCU_VERSION 4 ) 101  #_XOPEN_XPG2 1 ) 102  #_XOPEN_XPG3 1 ) 103  #_XOPEN_XPG4 1 ) 106  #_XOPEN_UNIX 1 ) 109  #_XOPEN_CRYPT 1 ) 113  #_XOPEN_ENH_I18N 1 ) 116  #_XOPEN_LEGACY 1 ) 203  ~ 206 #ià defšed __USE_UNIX98 || defšed __USE_XOPEN2K 207  ~ 211  #STDIN_FILENO 0 ) 212  #STDOUT_FILENO 1 ) 213  #STDERR_FILENO 2 ) 218  ~ 220 #iâdef __ssize_t_defšed 221  __ssize_t tssize_t ; 222  #__ssize_t_defšed ) 225  #__Ãed_size_t ) 226  #__Ãed_NULL ) 227  ~<¡ddef.h > 229 #ià defšed __USE_XOPEN || defšed __USE_XOPEN2K 232 #iâdeà __gid_t_defšed 233  __gid_t tgid_t ; 234  #__gid_t_defšed ) 237 #iâdeà __uid_t_defšed 238  __uid_t tuid_t ; 239  #__uid_t_defšed ) 242 #iâdeà __off_t_defšed 243 #iâdeà __USE_FILE_OFFSET64 244  __off_t toff_t ; 246  __off64_t toff_t ; 248  #__off_t_defšed ) 250 #ià defšed __USE_LARGEFILE64 && !defšed __off64_t_defšed 251  __off64_t toff64_t ; 252  #__off64_t_defšed ) 255 #iâdeà __u£cÚds_t_defšed 256  __u£cÚds_t tu£cÚds_t ; 257  #__u£cÚds_t_defšed ) 260 #iâdeà __pid_t_defšed 261  __pid_t tpid_t ; 262  #__pid_t_defšed ) 266 #ià defšed __USE_MISC || defšed __USE_XOPEN_EXTENDED || defšed __USE_XOPEN2K 267 #iâdeà __šŒ_t_defšed 268  __šŒ_t tšŒ_t ; 269  #__šŒ_t_defšed ) 273 #ià defšed __USE_BSD || defšed __USE_XOPEN 274 #iâdeà __sockËn_t_defšed 275  __sockËn_t tsockËn_t ; 276  #__sockËn_t_defšed ) 282  #R_OK 4 ) 283  #W_OK 2 ) 284  #X_OK 1 ) 285  #F_OK 0 ) 288  $acûss ( __cÚ¡ * __Çme ,  __ty³ è __THROW `__nÚnuÎ ((1)); 290 #ifdeà __USE_GNU 293  $euidacûss ( __cÚ¡ * __Çme ,  __ty³ ) 294 __THROW `__nÚnuÎ ((1)); 297  $—cûss ( __cÚ¡ * __Çme ,  __ty³ ) 298 __THROW `__nÚnuÎ ((1)); 301 #ifdeà __USE_ATFILE 305  $çcûs§t ( __fd , __cÚ¡ * __fže ,  __ty³ ,  __æag ) 306 __THROW `__nÚnuÎ ((2)è __wur ; 311 #iâdef _STDIO_H 312  #SEEK_SET 0 ) 313  #SEEK_CUR 1 ) 314  #SEEK_END 2 ) 315 #ifdeà __USE_GNU 316  #SEEK_DATA 3 ) 317  #SEEK_HOLE 4 ) 321 #ià defšed __USE_BSD && !defšed L_SET 323  #L_SET SEEK_SET ) 324  #L_INCR SEEK_CUR ) 325  #L_XTND SEEK_END ) 334 #iâdeà __USE_FILE_OFFSET64 335 __off_t $l£ek ( __fd , __off_t __off£t ,  __wh’û è __THROW ; 337 #ifdeà __REDIRECT_NTH 338 __off64_t `__REDIRECT_NTH ( l£ek , 339 ( __fd , __off64_t __off£t ,  __wh’û ), 340 l£ek64 ); 342  #l£ek l£ek64 ) 345 #ifdeà __USE_LARGEFILE64 346 __off64_t $l£ek64 ( __fd , __off64_t __off£t ,  __wh’û ) 347 __THROW ; 354  `þo£ ( __fd ); 361 ssize_t $»ad ( __fd , * __buf , size_t __nby‹s è __wur ; 367 ssize_t $wr™e ( __fd , __cÚ¡ * __buf , size_t __n è __wur ; 369 #ià defšed __USE_UNIX98 || defšed __USE_XOPEN2K8 370 #iâdeà __USE_FILE_OFFSET64 377 ssize_t $´—d ( __fd , * __buf , size_t __nby‹s , 378 __off_t __off£t è __wur ; 385 ssize_t $pwr™e ( __fd , __cÚ¡ * __buf , size_t __n , 386 __off_t __off£t è __wur ; 388 #ifdeà __REDIRECT 389 ssize_t `__REDIRECT ( ´—d , ( __fd , * __buf , size_t __nby‹s , 390 __off64_t __off£t ), 391 ´—d64 è __wur ; 392 ssize_t `__REDIRECT ( pwr™e , ( __fd , __cÚ¡ * __buf , 393 size_t __nby‹s , __off64_t __off£t ), 394 pwr™e64 è __wur ; 396  #´—d ´—d64 ) 397  #pwr™e pwr™e64 ) 401 #ifdeà __USE_LARGEFILE64 405 ssize_t $´—d64 ( __fd , * __buf , size_t __nby‹s , 406 __off64_t __off£t è __wur ; 409 ssize_t $pwr™e64 ( __fd , __cÚ¡ * __buf , size_t __n , 410 __off64_t __off£t è __wur ; 418  $pe ( __pedes [2]è __THROW __wur ; 420 #ifdeà __USE_GNU 423  $pe2 ( __pedes [2],  __æags è __THROW __wur ; 433  $®¬m ( __£cÚds è __THROW ; 445  `¦“p ( __£cÚds ); 447 #ià( defšed __USE_XOPEN_EXTENDED && !defšed __USE_XOPEN2K8 ) \ 448 || defšed __USE_BSD 453 __u£cÚds_t $u®¬m ( __u£cÚds_t __v®ue , __u£cÚds_ˆ __š‹rv® ) 454 __THROW ; 461  `u¦“p ( __u£cÚds_t __u£cÚds ); 470  `·u£ (); 474  $chown ( __cÚ¡ * __fže , __uid_t __owÃr , __gid_t __group ) 475 __THROW `__nÚnuÎ ((1)è __wur ; 477 #ià defšed __USE_BSD || defšed __USE_XOPEN_EXTENDED || defšed __USE_XOPEN2K8 479  $fchown ( __fd , __uid_t __owÃr , __gid_t __group è __THROW __wur ; 484  $lchown ( __cÚ¡ * __fže , __uid_t __owÃr , __gid_t __group ) 485 __THROW `__nÚnuÎ ((1)è __wur ; 489 #ifdeà __USE_ATFILE 492  $fchowÇt ( __fd , __cÚ¡ * __fže , __uid_t __owÃr , 493 __gid_t __group ,  __æag ) 494 __THROW `__nÚnuÎ ((2)è __wur ; 498  $chdœ ( __cÚ¡ * __·th è __THROW `__nÚnuÎ ((1)è __wur ; 500 #ià defšed __USE_BSD || defšed __USE_XOPEN_EXTENDED || defšed __USE_XOPEN2K8 502  $fchdœ ( __fd è __THROW __wur ; 512 * $g‘cwd (* __buf , size_t __size è __THROW __wur ; 514 #ifdef __USE_GNU 518 * $g‘_cu¼’t_dœ_Çme (è __THROW ; 521 #ià( defšed __USE_XOPEN_EXTENDED && !defšed __USE_XOPEN2K8 ) \ 522 || defšed __USE_BSD 526 * $g‘wd (* __buf ) 527 __THROW `__nÚnuÎ ((1)è __©Œibu‹_d•»ÿ‹d__ __wur ; 532  $dup ( __fd è __THROW __wur ; 535  $dup2 ( __fd ,  __fd2 è __THROW ; 537 #ifdeà __USE_GNU 540  $dup3 ( __fd ,  __fd2 ,  __æags è __THROW ; 544 ** __’vœÚ ; 545 #ifdeà __USE_GNU 546 ** ’vœÚ ; 552  $execve ( __cÚ¡ * __·th , *__cÚ¡ __¬gv [], 553 * __cÚ¡ __’vp []è __THROW `__nÚnuÎ ((1, 2)); 555 #ifdeà __USE_XOPEN2K8 558  $ãxecve ( __fd , * __cÚ¡ __¬gv [], *__cÚ¡ __’vp []) 559 __THROW `__nÚnuÎ ((2)); 564  $execv ( __cÚ¡ * __·th , *__cÚ¡ __¬gv []) 565 __THROW `__nÚnuÎ ((1, 2)); 569  $exeþe ( __cÚ¡ * __·th , __cÚ¡ * __¬g , ...) 570 __THROW `__nÚnuÎ ((1, 2)); 574  $exeþ ( __cÚ¡ * __·th , __cÚ¡ * __¬g , ...) 575 __THROW `__nÚnuÎ ((1, 2)); 579  $execvp ( __cÚ¡ * __fže , *__cÚ¡ __¬gv []) 580 __THROW `__nÚnuÎ ((1, 2)); 585  $exeþp ( __cÚ¡ * __fže , __cÚ¡ * __¬g , ...) 586 __THROW `__nÚnuÎ ((1, 2)); 588 #ifdeà __USE_GNU 591  $execv³ ( __cÚ¡ * __fže , *__cÚ¡ __¬gv [], 592 * __cÚ¡ __’vp []) 593 __THROW `__nÚnuÎ ((1, 2)); 597 #ià defšed __USE_MISC || defšed __USE_XOPEN 599  $niû ( __šc è __THROW __wur ; 604  $_ex™ ( __¡©us è `__©Œibu‹__ (( __nÜ‘uº__ )); 610  ~ 613  $·thcÚf ( __cÚ¡ * __·th ,  __Çme ) 614 __THROW `__nÚnuÎ ((1)); 617  $å©hcÚf ( __fd ,  __Çme è __THROW ; 620  $syscÚf ( __Çme è __THROW ; 622 #ifdef __USE_POSIX2 624 size_t $cÚf¡r ( __Çme , * __buf , size_t __Ën è __THROW ; 629 __pid_t $g‘pid (è __THROW ; 632 __pid_t $g‘µid (è __THROW ; 636 #iâdeà __FAVOR_BSD 637 __pid_t $g‘pg½ (è __THROW ; 639 #ifdeà __REDIRECT_NTH 640 __pid_t `__REDIRECT_NTH ( g‘pg½ , (__pid_ˆ __pid ), __g‘pgid ); 642  #g‘pg½ __g‘pgid ) 647 __pid_t $__g‘pgid ( __pid_t __pid è __THROW ; 648 #ià defšed __USE_XOPEN_EXTENDED || defšed __USE_XOPEN2K8 649 __pid_t $g‘pgid ( __pid_t __pid è __THROW ; 656  $£gid ( __pid_t __pid , __pid_ˆ __pgid è __THROW ; 658 #ià defšed __USE_SVID || defšed __USE_BSD || defšed __USE_XOPEN_EXTENDED 669 #iâdeà __FAVOR_BSD 673  $£g½ (è __THROW ; 678 #ifdeà __REDIRECT_NTH 679  `__REDIRECT_NTH ( £g½ , ( __pid_t __pid , __pid_ˆ __pg½ ), £gid ); 681  #£g½ £gid ) 690 __pid_t $£tsid (è __THROW ; 692 #ià defšed __USE_XOPEN_EXTENDED || defšed __USE_XOPEN2K8 694 __pid_t $g‘sid ( __pid_t __pid è __THROW ; 698 __uid_t $g‘uid (è __THROW ; 701 __uid_t $g‘euid (è __THROW ; 704 __gid_t $g‘gid (è __THROW ; 707 __gid_t $g‘egid (è __THROW ; 712  $g‘groups ( __size , __gid_t __li¡ []è __THROW __wur ; 714 #ifdef __USE_GNU 716  $group_memb” ( __gid_t __gid è __THROW ; 723  $£tuid ( __uid_t __uid è __THROW ; 725 #ià defšed __USE_BSD || defšed __USE_XOPEN_EXTENDED 728  $£Œeuid ( __uid_t __ruid , __uid_ˆ __euid è __THROW ; 731 #ià defšed __USE_BSD || defšed __USE_XOPEN2K 733  $£‹uid ( __uid_t __uid è __THROW ; 740  $£tgid ( __gid_t __gid è __THROW ; 742 #ià defšed __USE_BSD || defšed __USE_XOPEN_EXTENDED 745  $£Œegid ( __gid_t __rgid , __gid_ˆ __egid è __THROW ; 748 #ià defšed __USE_BSD || defšed __USE_XOPEN2K 750  $£‹gid ( __gid_t __gid è __THROW ; 753 #ifdeà __USE_GNU 756  $g‘»suid ( __uid_t * __ruid , __uid_ˆ* __euid , __uid_ˆ* __suid ) 757 __THROW ; 761  $g‘»sgid ( __gid_t * __rgid , __gid_ˆ* __egid , __gid_ˆ* __sgid ) 762 __THROW ; 766  $£Œesuid ( __uid_t __ruid , __uid_ˆ __euid , __uid_ˆ __suid ) 767 __THROW ; 771  $£Œesgid ( __gid_t __rgid , __gid_ˆ __egid , __gid_ˆ __sgid ) 772 __THROW ; 779 __pid_t $fÜk (è __THROWNL ; 781 #ià( defšed __USE_XOPEN_EXTENDED && !defšed __USE_XOPEN2K8 ) \ 782 || defšed __USE_BSD 787 __pid_t $vfÜk (è __THROW ; 793 * $‰yÇme ( __fd è __THROW ; 797  $‰yÇme_r ( __fd , * __buf , size_t __buæ’ ) 798 __THROW `__nÚnuÎ ((2)è __wur ; 802  $i§‰y ( __fd è __THROW ; 804 #ià defšed __USE_BSD \ 805 || ( defšed __USE_XOPEN_EXTENDED && !defšed __USE_UNIX98 ) 808  $‰y¦Ù (è __THROW ; 813  $lšk ( __cÚ¡ * __äom , __cÚ¡ * __to ) 814 __THROW `__nÚnuÎ ((1, 2)è __wur ; 816 #ifdeà __USE_ATFILE 819  $lšk© ( __äomfd , __cÚ¡ * __äom ,  __tofd , 820 __cÚ¡ * __to ,  __æags ) 821 __THROW `__nÚnuÎ ((2, 4)è __wur ; 824 #ià defšed __USE_BSD || defšed __USE_XOPEN_EXTENDED || defšed __USE_XOPEN2K 826  $symlšk ( __cÚ¡ * __äom , __cÚ¡ * __to ) 827 __THROW `__nÚnuÎ ((1, 2)è __wur ; 832 ssize_t $»adlšk ( __cÚ¡ * __»¡riù __·th , 833 * __»¡riù __buf , size_t __Ën ) 834 __THROW `__nÚnuÎ ((1, 2)è __wur ; 837 #ifdeà __USE_ATFILE 839  $symlšk© ( __cÚ¡ * __äom ,  __tofd , 840 __cÚ¡ * __to è __THROW `__nÚnuÎ ((1, 3)è __wur ; 843 ssize_t $»adlšk© ( __fd , __cÚ¡ * __»¡riù __·th , 844 * __»¡riù __buf , size_t __Ën ) 845 __THROW `__nÚnuÎ ((2, 3)è __wur ; 849  $uÆšk ( __cÚ¡ * __Çme è __THROW `__nÚnuÎ ((1)); 851 #ifdeà __USE_ATFILE 853  $uÆšk© ( __fd , __cÚ¡ * __Çme ,  __æag ) 854 __THROW `__nÚnuÎ ((2)); 858  $rmdœ ( __cÚ¡ * __·th è __THROW `__nÚnuÎ ((1)); 862 __pid_t $tcg‘pg½ ( __fd è __THROW ; 865  $tc£g½ ( __fd , __pid_t __pg½_id è __THROW ; 872 * `g‘logš (); 873 #ià defšed __USE_REENTRANT || defšed __USE_POSIX199506 880  $g‘logš_r (* __Çme , size_t __Çme_Ën è `__nÚnuÎ ((1)); 883 #ifdef __USE_BSD 885  $£Žogš ( __cÚ¡ * __Çme è __THROW `__nÚnuÎ ((1)); 889 #ifdef __USE_POSIX2 893  #__Ãed_g‘Ýt ) 894  ~ 898 #ià defšed __USE_BSD || defšed __USE_UNIX98 || defšed __USE_XOPEN2K 902  $g‘ho¡Çme (* __Çme , size_t __Ën è __THROW `__nÚnuÎ ((1)); 906 #ià defšed __USE_BSD || (defšed __USE_XOPEN && !defšed __USE_UNIX98 ) 909  $£tho¡Çme ( __cÚ¡ * __Çme , size_t __Ën ) 910 __THROW `__nÚnuÎ ((1)è __wur ; 914  $£tho¡id ( __id è __THROW __wur ; 920  $g‘domašÇme (* __Çme , size_t __Ën ) 921 __THROW `__nÚnuÎ ((1)è __wur ; 922  $£tdomašÇme ( __cÚ¡ * __Çme , size_t __Ën ) 923 __THROW `__nÚnuÎ ((1)è __wur ; 929  $vhªgup (è __THROW ; 932  $»voke ( __cÚ¡ * __fže è __THROW `__nÚnuÎ ((1)è __wur ; 940  $´ofž (* __§m¶e_bufãr , size_t __size , 941 size_t __off£t ,  __sÿË ) 942 __THROW `__nÚnuÎ ((1)); 948  $acù ( __cÚ¡ * __Çme è __THROW ; 952 * $g‘u£rsh–l (è __THROW ; 953  $’du£rsh–l (è __THROW ; 954  $£tu£rsh–l (è __THROW ; 960  $d«mÚ ( __nochdœ ,  __noþo£ è __THROW __wur ; 964 #ià defšed __USE_BSD || (defšed __USE_XOPEN && !defšed __USE_XOPEN2K ) 967  $chroÙ ( __cÚ¡ * __·th è __THROW `__nÚnuÎ ((1)è __wur ; 971 * $g‘·ss ( __cÚ¡ * __´om± è `__nÚnuÎ ((1)); 975 #ià defšed __USE_BSD || defšed __USE_XOPEN || defšed __USE_XOPEN2K 980  `fsync ( __fd ); 984 #ifdeà __USE_GNU 987  $syncfs ( __fd è __THROW ; 991 #ià defšed __USE_BSD || defšed __USE_XOPEN_EXTENDED 994  `g‘ho¡id (); 997  $sync (è __THROW ; 1000 #ià defšed __USE_BSD || !defšed __USE_XOPEN2K 1003  $g‘·gesize (è __THROW `__©Œibu‹__ (( __cÚ¡__ )); 1008  $g‘dbËsize (è __THROW ; 1014 #ià defšed __USE_BSD || defšed __USE_XOPEN_EXTENDED || defšed __USE_XOPEN2K8 1017 #iâdeà __USE_FILE_OFFSET64 1018  $Œunÿ‹ ( __cÚ¡ * __fže , __off_t __Ëngth ) 1019 __THROW `__nÚnuÎ ((1)è __wur ; 1021 #ifdeà __REDIRECT_NTH 1022  `__REDIRECT_NTH ( Œunÿ‹ , 1023 ( __cÚ¡ * __fže , __off64_t __Ëngth ), 1024 Œunÿ‹64 è `__nÚnuÎ ((1)è __wur ; 1026  #Œunÿ‹ Œunÿ‹64 ) 1029 #ifdeà __USE_LARGEFILE64 1030  $Œunÿ‹64 ( __cÚ¡ * __fže , __off64_t __Ëngth ) 1031 __THROW `__nÚnuÎ ((1)è __wur ; 1036 #ià defšed __USE_BSD || defšed __USE_XOPEN_EXTENDED || defšed __USE_XOPEN2K 1039 #iâdeà __USE_FILE_OFFSET64 1040  $árunÿ‹ ( __fd , __off_t __Ëngth è __THROW __wur ; 1042 #ifdeà __REDIRECT_NTH 1043  `__REDIRECT_NTH ( árunÿ‹ , ( __fd , __off64_t __Ëngth ), 1044 árunÿ‹64 è __wur ; 1046  #árunÿ‹ árunÿ‹64 ) 1049 #ifdeà __USE_LARGEFILE64 1050  $árunÿ‹64 ( __fd , __off64_t __Ëngth è __THROW __wur ; 1056 #ià( defšed __USE_XOPEN_EXTENDED && !defšed __USE_XOPEN2K ) \ 1057 || defšed __USE_MISC 1061  $brk (* __addr è __THROW __wur ; 1067 * $sbrk ( šŒ_t __d– è __THROW ; 1071 #ifdeà __USE_MISC 1082  $sysÿÎ ( __sy¢o , ...è __THROW ; 1087 #ià( defšed __USE_MISC || defšed __USE_XOPEN_EXTENDED è&& !defšed F_LOCK 1099  #F_ULOCK 0 ) 1100  #F_LOCK 1 ) 1101  #F_TLOCK 2 ) 1102  #F_TEST 3 ) 1104 #iâdeà __USE_FILE_OFFSET64 1105  $lockf ( __fd ,  __cmd , __off_t __Ën è __wur ; 1107 #ifdeà __REDIRECT 1108  `__REDIRECT ( lockf , ( __fd ,  __cmd , __off64_t __Ën ), 1109 lockf64 è __wur ; 1111  #lockf lockf64 ) 1114 #ifdeà __USE_LARGEFILE64 1115  $lockf64 ( __fd ,  __cmd , __off64_t __Ën è __wur ; 1120 #ifdeà __USE_GNU 1125  #TEMP_FAILURE_RETRY ( ex´essiÚ ) \ 1126 ( __ex‹nsiÚ__ \ 1127 ({  __»suÉ ; \ 1128 dØ __»suÉ = (è( ex´essiÚ ); \ 1129  __»suÉ =ð-1L && ”ºo =ð EINTR ); \ 1130 __»suÉ ; } })) ) 1133 #ià defšed __USE_POSIX199309 || defšed __USE_UNIX98 1136  fd©async ( __fždes ); 1142 #ifdef __USE_XOPEN 1144 * $üy± ( __cÚ¡ * __key , __cÚ¡ * __§É ) 1145 __THROW `__nÚnuÎ ((1, 2)); 1149  $’üy± (* __libc_block ,  __edæag è __THROW `__nÚnuÎ ((1)); 1156  $swab ( __cÚ¡ * __»¡riù __äom , *__»¡riù __to , 1157 ssize_t __n è __THROW `__nÚnuÎ ((1, 2)); 1163 #ià defšed __USE_XOPEN || defšed __USE_XOPEN2K8 1165 * $ù”mid (* __s è __THROW ; 1170 #ià __USE_FORTIFY_LEVEL > 0 && defšed __ex‹º_®ways_šlše 1171  ~ 1174 __END_DECLS @/usr/include/features.h 20 #iâdef _FEATURES_H 21  #_FEATURES_H 1 ) 98 #undeà __USE_ISOC99 99 #undeà __USE_ISOC95 100 #undeà __USE_POSIX 101 #undeà __USE_POSIX2 102 #undeà __USE_POSIX199309 103 #undeà __USE_POSIX199506 104 #undeà __USE_XOPEN 105 #undeà __USE_XOPEN_EXTENDED 106 #undeà __USE_UNIX98 107 #undeà __USE_XOPEN2K 108 #undeà __USE_XOPEN2KXSI 109 #undeà __USE_XOPEN2K8 110 #undeà __USE_XOPEN2K8XSI 111 #undeà __USE_LARGEFILE 112 #undeà __USE_LARGEFILE64 113 #undeà __USE_FILE_OFFSET64 114 #undeà __USE_BSD 115 #undeà __USE_SVID 116 #undeà __USE_MISC 117 #undeà __USE_ATFILE 118 #undeà __USE_GNU 119 #undeà __USE_REENTRANT 120 #undeà __USE_FORTIFY_LEVEL 121 #undeà __FAVOR_BSD 122 #undeà __KERNEL_STRICT_NAMES 126 #iâdeà _LOOSE_KERNEL_NAMES 127  #__KERNEL_STRICT_NAMES ) 131  #__USE_ANSI 1 ) 140 #ià defšed __GNUC__ && defšed __GNUC_MINOR__ 141  #__GNUC_PREREQ ( maj , mš ) \ 142 (( __GNUC__ << 16è+ __GNUC_MINOR__ >ð(( maj è<< 16è+ ( mš )) ) 144  #__GNUC_PREREQ ( maj , mš è0 ) 149 #ià defšed _BSD_SOURCE && \ 150 !( defšed g_POSIX_SOURCE || defšed g_POSIX_C_SOURCE || \ 151 defšed g_XOPEN_SOURCE || defšed g_GNU_SOURCE || defšed g_SVID_SOURCE ) 152  #__FAVOR_BSD 1 ) 156 #ifdeà _GNU_SOURCE 157 #undeà _ISOC95_SOURCE 158  #_ISOC95_SOURCE 1 ) 159 #undeà _ISOC99_SOURCE 160  #_ISOC99_SOURCE 1 ) 161 #undeà _POSIX_SOURCE 162  #_POSIX_SOURCE 1 ) 163 #undeà _POSIX_C_SOURCE 164  #_POSIX_C_SOURCE 200809L ) 165 #undeà _XOPEN_SOURCE 166  #_XOPEN_SOURCE 700 ) 167 #undeà _XOPEN_SOURCE_EXTENDED 168  #_XOPEN_SOURCE_EXTENDED 1 ) 169 #undeà _LARGEFILE64_SOURCE 170  #_LARGEFILE64_SOURCE 1 ) 171 #undeà _BSD_SOURCE 172  #_BSD_SOURCE 1 ) 173 #undeà _SVID_SOURCE 174  #_SVID_SOURCE 1 ) 175 #undeà _ATFILE_SOURCE 176  #_ATFILE_SOURCE 1 ) 181 #ià(! defšed __STRICT_ANSI__ && !defšed _ISOC99_SOURCE && \ 182 ! defšed g_POSIX_SOURCE && !defšed g_POSIX_C_SOURCE && \ 183 ! defšed g_XOPEN_SOURCE && !defšed g_BSD_SOURCE && !defšed g_SVID_SOURCE ) 184  #_BSD_SOURCE 1 ) 185  #_SVID_SOURCE 1 ) 192 #ià( defšed _ISOC99_SOURCE || defšed _ISOC9X_SOURCE \ 193 || ( defšed g__STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) 194  #__USE_ISOC99 1 ) 198 #ià( defšed _ISOC99_SOURCE || defšed _ISOC9X_SOURCE \ 199 || ( defšed __STDC_VERSION__ && __STDC_VERSION__ >= 199409L)) 200  #__USE_ISOC95 1 ) 205 #ià((! defšed __STRICT_ANSI__ || ( _XOPEN_SOURCE - 0) >= 500) && \ 206 ! defšed _POSIX_SOURCE && !defšed _POSIX_C_SOURCE ) 207  #_POSIX_SOURCE 1 ) 208 #ià defšed _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 500 209  #_POSIX_C_SOURCE 2 ) 210 #–ià defšed _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 600 211  #_POSIX_C_SOURCE 199506L ) 212 #–ià defšed _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 700 213  #_POSIX_C_SOURCE 200112L ) 215  #_POSIX_C_SOURCE 200809L ) 217  #__USE_POSIX_IMPLICITLY 1 ) 220 #ià defšed _POSIX_SOURCE || _POSIX_C_SOURCE >ð1 || defšed _XOPEN_SOURCE 221  #__USE_POSIX 1 ) 224 #ià defšed _POSIX_C_SOURCE && _POSIX_C_SOURCE >ð2 || defšed _XOPEN_SOURCE 225  #__USE_POSIX2 1 ) 228 #ià( _POSIX_C_SOURCE - 0) >= 199309L 229  #__USE_POSIX199309 1 ) 232 #ià( _POSIX_C_SOURCE - 0) >= 199506L 233  #__USE_POSIX199506 1 ) 236 #ià( _POSIX_C_SOURCE - 0) >= 200112L 237  #__USE_XOPEN2K 1 ) 238 #undeà __USE_ISOC95 239  #__USE_ISOC95 1 ) 240 #undeà __USE_ISOC99 241  #__USE_ISOC99 1 ) 244 #ià( _POSIX_C_SOURCE - 0) >= 200809L 245  #__USE_XOPEN2K8 1 ) 246 #undeà _ATFILE_SOURCE 247  #_ATFILE_SOURCE 1 ) 250 #ifdef _XOPEN_SOURCE 251  #__USE_XOPEN 1 ) 252 #ià( _XOPEN_SOURCE - 0) >= 500 253  #__USE_XOPEN_EXTENDED 1 ) 254  #__USE_UNIX98 1 ) 255 #undeà _LARGEFILE_SOURCE 256  #_LARGEFILE_SOURCE 1 ) 257 #ià( _XOPEN_SOURCE - 0) >= 600 258 #ià( _XOPEN_SOURCE - 0) >= 700 259  #__USE_XOPEN2K8 1 ) 260  #__USE_XOPEN2K8XSI 1 ) 262  #__USE_XOPEN2K 1 ) 263  #__USE_XOPEN2KXSI 1 ) 264 #undeà __USE_ISOC95 265  #__USE_ISOC95 1 ) 266 #undeà __USE_ISOC99 267  #__USE_ISOC99 1 ) 270 #ifdeà _XOPEN_SOURCE_EXTENDED 271  #__USE_XOPEN_EXTENDED 1 ) 276 #ifdeà _LARGEFILE_SOURCE 277  #__USE_LARGEFILE 1 ) 280 #ifdeà _LARGEFILE64_SOURCE 281  #__USE_LARGEFILE64 1 ) 284 #ià defšed _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64 285  #__USE_FILE_OFFSET64 1 ) 288 #ià defšed _BSD_SOURCE || defšed _SVID_SOURCE 289  #__USE_MISC 1 ) 292 #ifdef _BSD_SOURCE 293  #__USE_BSD 1 ) 296 #ifdef _SVID_SOURCE 297  #__USE_SVID 1 ) 300 #ifdef _ATFILE_SOURCE 301  #__USE_ATFILE 1 ) 304 #ifdef _GNU_SOURCE 305  #__USE_GNU 1 ) 308 #ià defšed _REENTRANT || defšed _THREAD_SAFE 309  #__USE_REENTRANT 1 ) 312 #ià defšed _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0 \ 313 && __GNUC_PREREQ (4, 1è&& defšed g__OPTIMIZE__ && __OPTIMIZE__ > 0 314 #ià _FORTIFY_SOURCE > 1 315  #__USE_FORTIFY_LEVEL 2 ) 317  #__USE_FORTIFY_LEVEL 1 ) 320  #__USE_FORTIFY_LEVEL 0 ) 324  ~ 327  #__STDC_ISO_10646__ 200009L ) 335 #undeà __GNU_LIBRARY__ 336  #__GNU_LIBRARY__ 6 ) 340  #__GLIBC__ 2 ) 341  #__GLIBC_MINOR__ 15 ) 343  #__GLIBC_PREREQ ( maj , mš ) \ 344 (( __GLIBC__ << 16è+ __GLIBC_MINOR__ >ð(( maj è<< 16è+ ( mš )) ) 347 #ià defšed __GNUC__ \ 348 || ( defšed g__PGI && defšed g__i386__ ) \ 349 || ( defšed g__INTEL_COMPILER && (defšed g__i386__ || defšed g__Ÿ64__ )) \ 350 || ( defšed g__STDC_VERSION__ && __STDC_VERSION__ >= 199901L) 351  #__GLIBC_HAVE_LONG_LONG 1 ) 355 #iâdeà __ASSEMBLER__ 356 #iâdeà _SYS_CDEFS_H 357  ~ 362 #ià defšed __USE_FILE_OFFSET64 && !defšed __REDIRECT 363  #__USE_LARGEFILE 1 ) 364  #__USE_LARGEFILE64 1 ) 370 #ià __GNUC_PREREQ (2, 7è&& defšed __OPTIMIZE__ \ 371 && ! defšed g__OPTIMIZE_SIZE__ && !defšed g__NO_INLINE__ \ 372 && defšed g__ex‹º_šlše 373  #__USE_EXTERN_INLINES 1 ) 378 #ià __GNUC_PREREQ (2, 7è&& defšed __OPTIMIZE__ \ 379 && ( defšed g_LIBC || !defšed g__OPTIMIZE_SIZE__ è&& !defšed g__NO_INLINE__ \ 380 && defšed g__ex‹º_šlše 381  #__USE_EXTERN_INLINES_IN_LIBC 1 ) 389  ~ @/usr/include/libio.h 29 #iâdeà _IO_STDIO_H 30  #_IO_STDIO_H ) 32  ~<_G_cÚfig.h > 34  #_IO_pos_t _G_åos_t ) 35  #_IO_åos_t _G_åos_t ) 36  #_IO_åos64_t _G_åos64_t ) 37  #_IO_size_t _G_size_t ) 38  #_IO_ssize_t _G_ssize_t ) 39  #_IO_off_t _G_off_t ) 40  #_IO_off64_t _G_off64_t ) 41  #_IO_pid_t _G_pid_t ) 42  #_IO_uid_t _G_uid_t ) 43  #_IO_icÚv_t _G_icÚv_t ) 44  #_IO_HAVE_SYS_WAIT _G_HAVE_SYS_WAIT ) 45  #_IO_HAVE_ST_BLKSIZE _G_HAVE_ST_BLKSIZE ) 46  #_IO_BUFSIZ _G_BUFSIZ ) 47  #_IO_va_li¡ _G_va_li¡ ) 48  #_IO_wšt_t _G_wšt_t ) 50 #ifdeà _G_NEED_STDARG_H 52  #__Ãed___va_li¡ ) 53  ~<¡d¬g.h > 54 #ifdeà __GNUC_VA_LIST 55 #undeà _IO_va_li¡ 56  #_IO_va_li¡ __gnuc_va_li¡ ) 60 #iâdeà __P 61 #ià _G_HAVE_SYS_CDEFS 62  ~ 64 #ifdeà __STDC__ 65  #__P ( p è ) p 66  #__PMT ( p è ) p 68  #__P ( p è() ) 69  #__PMT ( p è() ) 75 #iâdeà _PARAMS 76  #_PARAMS ( ´Ùos è `__P ÕrÙos) ) 79 #iâdeà __STDC__ 81 cÚ¡ ) 84  #_IO_UNIFIED_JUMPTABLES 1 ) 85 #iâdeà _G_HAVE_PRINTF_FP 86  #_IO_USE_DTOA 1 ) 89 #iâdeà EOF 90  #EOF (-1) ) 92 #iâdeà NULL 93 #ià defšed __GNUG__ && \ 94 ( g__GNUC__ > 2 || (__GNUC__ =ð2 && __GNUC_MINOR__ >= 8)) 95  #NULL ( __nuÎ ) ) 97 #ià! defšed ( __ýlu¥lus ) 98  #NULL ((*)0) ) 100  #NULL (0) ) 105  #_IOS_INPUT 1 ) 106  #_IOS_OUTPUT 2 ) 107  #_IOS_ATEND 4 ) 108  #_IOS_APPEND 8 ) 109  #_IOS_TRUNC 16 ) 110  #_IOS_NOCREATE 32 ) 111  #_IOS_NOREPLACE 64 ) 112  #_IOS_BIN 128 ) 120  #_IO_MAGIC 0xFBAD0000 ) 121  #_OLD_STDIO_MAGIC 0xFABC0000 ) 122  #_IO_MAGIC_MASK 0xFFFF0000 ) 123  #_IO_USER_BUF 1 ) 124  #_IO_UNBUFFERED 2 ) 125  #_IO_NO_READS 4 ) 126  #_IO_NO_WRITES 8 ) 127  #_IO_EOF_SEEN 0x10 ) 128  #_IO_ERR_SEEN 0x20 ) 129  #_IO_DELETE_DONT_CLOSE 0x40 ) 130  #_IO_LINKED 0x80 ) 131  #_IO_IN_BACKUP 0x100 ) 132  #_IO_LINE_BUF 0x200 ) 133  #_IO_TIED_PUT_GET 0x400 ) 134  #_IO_CURRENTLY_PUTTING 0x800 ) 135  #_IO_IS_APPENDING 0x1000 ) 136  #_IO_IS_FILEBUF 0x2000 ) 137  #_IO_BAD_SEEN 0x4000 ) 138  #_IO_USER_LOCK 0x8000 ) 140  #_IO_FLAGS2_MMAP 1 ) 141  #_IO_FLAGS2_NOTCANCEL 2 ) 142 #ifdeà _LIBC 143  #_IO_FLAGS2_FORTIFY 4 ) 145  #_IO_FLAGS2_USER_WBUF 8 ) 146 #ifdeà _LIBC 147  #_IO_FLAGS2_SCANF_STD 16 ) 148  #_IO_FLAGS2_NOCLOSE 32 ) 149  #_IO_FLAGS2_CLOEXEC 64 ) 153  #_IO_SKIPWS 01 ) 154  #_IO_LEFT 02 ) 155  #_IO_RIGHT 04 ) 156  #_IO_INTERNAL 010 ) 157  #_IO_DEC 020 ) 158  #_IO_OCT 040 ) 159  #_IO_HEX 0100 ) 160  #_IO_SHOWBASE 0200 ) 161  #_IO_SHOWPOINT 0400 ) 162  #_IO_UPPERCASE 01000 ) 163  #_IO_SHOWPOS 02000 ) 164  #_IO_SCIENTIFIC 04000 ) 165  #_IO_FIXED 010000 ) 166  #_IO_UNITBUF 020000 ) 167  #_IO_STDIO 040000 ) 168  #_IO_DONT_CLOSE 0100000 ) 169  #_IO_BOOLALPHA 0200000 ) 172  _IO_jump_t ;  g_IO_FILE ; 175 #ifdeà _IO_MTSAFE_IO 176 #ià defšed __GLIBC__ && __GLIBC__ >= 2 177  ~ 182  t_IO_lock_t ; 188  s_IO_m¬k” { 189  _IO_m¬k” * m_Ãxt ; 190  _IO_FILE * m_sbuf ; 194  m_pos ; 196  £t_¡»ampos ( ¡»ampos ¥ è{ m_¥os = sp; } 197  £t_off£t ( off£t è{ m_pos = off£t; m_¥os = ( ¡»ampos )(-2); } 198 mpublic : 199 ¡»amm¬k” ( ¡»ambuf * sb ); 200 ~ ¡»amm¬k” (); 201  §všg (è{  m_¥os == -2; } 202  d– ( ¡»amm¬k” &); 203  d– (); 208 e__codecvt_»suÉ 210 m__codecvt_ok , 211 m__codecvt_·¹Ÿl , 212 m__codecvt_”rÜ , 213 m__codecvt_nocÚv 216 #ià defšed _LIBC || defšed _GLIBCPP_USE_WCHAR_T 219  s_IO_codecvt 221 (* m__codecvt_de¡r è( m_IO_codecvt *); 222 __codecvt_»suÉ (* __codecvt_do_out è( m_IO_codecvt *, 223 m__mb¡©e_t *, 224 cÚ¡ mwch¬_t *, 225 cÚ¡ mwch¬_t *, 226 cÚ¡ mwch¬_t **, *, 228 __codecvt_»suÉ (* __codecvt_do_unshiá è( m_IO_codecvt *, 229 m__mb¡©e_t *, *, 231 __codecvt_»suÉ (* __codecvt_do_š è( m_IO_codecvt *, 232 m__mb¡©e_t *, 234 cÚ¡ **, mwch¬_t *, 235 mwch¬_t *, wchar_t **); 236 (* m__codecvt_do_’codšg è( m_IO_codecvt *); 237 (* m__codecvt_do_®ways_nocÚv è( m_IO_codecvt *); 238 (* m__codecvt_do_Ëngth è( m_IO_codecvt *, m__mb¡©e_t *, 239 cÚ¡ *, cÚ¡ *, m_IO_size_t ); 240 (* m__codecvt_do_max_Ëngth è( m_IO_codecvt *); 242 _IO_icÚv_t m__cd_š ; 243 _IO_icÚv_t m__cd_out ; 247  s_IO_wide_d©a 249 wch¬_t * m_IO_»ad_±r ; 250 wch¬_t * m_IO_»ad_’d ; 251 wch¬_t * m_IO_»ad_ba£ ; 252 wch¬_t * m_IO_wr™e_ba£ ; 253 wch¬_t * m_IO_wr™e_±r ; 254 wch¬_t * m_IO_wr™e_’d ; 255 wch¬_t * m_IO_buf_ba£ ; 256 wch¬_t * m_IO_buf_’d ; 258 wch¬_t * m_IO_§ve_ba£ ; 259 wch¬_t * m_IO_backup_ba£ ; 261 wch¬_t * m_IO_§ve_’d ; 263 __mb¡©e_t m_IO_¡©e ; 264 __mb¡©e_t m_IO_Ï¡_¡©e ; 265  _IO_codecvt m_codecvt ; 267 wch¬_t m_shÜtbuf [1]; 269 cÚ¡  _IO_jump_t * m_wide_vbË ; 273  s_IO_FILE { 274  m_æags ; 275  #_IO_fže_æags _æags ) 279 * m_IO_»ad_±r ; 280 * m_IO_»ad_’d ; 281 * m_IO_»ad_ba£ ; 282 * m_IO_wr™e_ba£ ; 283 * m_IO_wr™e_±r ; 284 * m_IO_wr™e_’d ; 285 * m_IO_buf_ba£ ; 286 * m_IO_buf_’d ; 288 * m_IO_§ve_ba£ ; 289 * m_IO_backup_ba£ ; 290 * m_IO_§ve_’d ; 292  _IO_m¬k” * m_m¬k”s ; 294  _IO_FILE * m_chaš ; 296  m_fž’o ; 298  m_blksize ; 300  m_æags2 ; 302 _IO_off_t m_Þd_off£t ; 304  #__HAVE_COLUMN ) 306  m_cur_cÞumn ; 307 sigÃd  m_vbË_off£t ; 308  m_shÜtbuf [1]; 312 _IO_lock_t * m_lock ; 313 #ifdeà _IO_USE_OLD_IO_FILE 316  s_IO_FILE_com¶‘e 318  _IO_FILE m_fže ; 320 #ià defšed _G_IO_IO_FILE_VERSION && _G_IO_IO_FILE_VERSION == 0x20001 321 _IO_off64_t m_off£t ; 322 #ià defšed _LIBC || defšed _GLIBCPP_USE_WCHAR_T 324  _IO_codecvt * m_codecvt ; 325  _IO_wide_d©a * m_wide_d©a ; 326  _IO_FILE * m_ä“»s_li¡ ; 327 * m_ä“»s_buf ; 328 size_t m_ä“»s_size ; 330 * m__·d1 ; 331 * m__·d2 ; 332 * m__·d3 ; 333 * m__·d4 ; 334 size_t m__·d5 ; 336  m_mode ; 338  m_unu£d2 [15 *  (è- 4 *  (*è-  ( size_t )]; 342 #iâdeà __ýlu¥lus 343  _IO_FILE t_IO_FILE ; 346  g_IO_FILE_¶us ; 348  _IO_FILE_¶us _IO_2_1_¡dš_ ; 349  _IO_FILE_¶us _IO_2_1_¡dout_ ; 350  _IO_FILE_¶us _IO_2_1_¡d”r_ ; 351 #iâdeà _LIBC 352  #_IO_¡dš (( _IO_FILE *)(& _IO_2_1_¡dš_ )) ) 353  #_IO_¡dout (( _IO_FILE *)(& _IO_2_1_¡dout_ )) ) 354  #_IO_¡d”r (( _IO_FILE *)(& _IO_2_1_¡d”r_ )) ) 356 _IO_FILE * _IO_¡dš ©Œibu‹_hidd’ ; 357 _IO_FILE * _IO_¡dout ©Œibu‹_hidd’ ; 358 _IO_FILE * _IO_¡d”r ©Œibu‹_hidd’ ; 366  __ssize_t t__io_»ad_â (* t__cook› , * t__buf , tsize_t t__nby‹s ); 374  __ssize_t t__io_wr™e_â (* t__cook› , t__cÚ¡ * t__buf , 375 tsize_t t__n ); 383  t__io_£ek_â (* t__cook› , t_IO_off64_t * t__pos ,  t__w ); 386  t__io_þo£_â (* t__cook› ); 389 #ifdeà _GNU_SOURCE 391  __io_»ad_â tcook›_»ad_funùiÚ_t ; 392  __io_wr™e_â tcook›_wr™e_funùiÚ_t ; 393  __io_£ek_â tcook›_£ek_funùiÚ_t ; 394  __io_þo£_â tcook›_þo£_funùiÚ_t ; 399 __io_»ad_â * m»ad ; 400 __io_wr™e_â * mwr™e ; 401 __io_£ek_â * m£ek ; 402 __io_þo£_â * mþo£ ; 403 } t_IO_cook›_io_funùiÚs_t ; 404  _IO_cook›_io_funùiÚs_t tcook›_io_funùiÚs_t ; 406  g_IO_cook›_fže ; 409  _IO_cook›_š™ ( _IO_cook›_fže * __cfže ,  __»ad_wr™e , 410 * __cook› , _IO_cook›_io_funùiÚs_t __âs ); 414 #ifdeà __ýlu¥lus 418  __und”æow ( _IO_FILE *); 419  __uæow ( _IO_FILE *); 420  __ov”æow ( _IO_FILE *, ); 421 #ià defšed _LIBC || defšed _GLIBCPP_USE_WCHAR_T 422 _IO_wšt_t __wund”æow ( _IO_FILE *); 423 _IO_wšt_t __wuæow ( _IO_FILE *); 424 _IO_wšt_t __wov”æow ( _IO_FILE *, _IO_wint_t); 427 #ià __GNUC__ >= 3 428  #_IO_BE ( ex´ , »s è `__bužtš_ex³ù (Óx´),„es) ) 430  #_IO_BE ( ex´ , »s èÓx´) ) 433  #_IO_g‘c_uÆocked ( _å ) \ 434 ( `_IO_BE (( _å )-> _IO_»ad_±r >ð(_å)-> _IO_»ad_’d , 0) \ 435 ? `__uæow ( _å è: *(*è(_å)-> _IO_»ad_±r ++) ) 436  #_IO_³ekc_uÆocked ( _å ) \ 437 ( `_IO_BE (( _å )-> _IO_»ad_±r >ð(_å)-> _IO_»ad_’d , 0) \ 438 && `__und”æow ( _å è=ð EOF ? EOF \ 439 : *(*è( _å )-> _IO_»ad_±r ) ) 440  #_IO_putc_uÆocked ( _ch , _å ) \ 441 ( `_IO_BE (( _å )-> _IO_wr™e_±r >ð(_å)-> _IO_wr™e_’d , 0) \ 442 ? `__ov”æow ( _å , (è( _ch )) \ 443 : (è(*( _å )-> _IO_wr™e_±r ++ = ( _ch ))) ) 445 #ià defšed _LIBC || defšed _GLIBCPP_USE_WCHAR_T 446  #_IO_g‘wc_uÆocked ( _å ) \ 447 ( `_IO_BE (( _å )-> _wide_d©a =ð NULL \ 448 || (( _å )-> _wide_d©a -> _IO_»ad_±r \ 449 >ð( _å )-> _wide_d©a -> _IO_»ad_’d ), 0) \ 450 ? `__wuæow ( _å è: ( _IO_wšt_t è*(_å)-> _wide_d©a -> _IO_»ad_±r ++) ) 451  #_IO_putwc_uÆocked ( _wch , _å ) \ 452 ( `_IO_BE (( _å )-> _wide_d©a =ð NULL \ 453 || (( _å )-> _wide_d©a -> _IO_wr™e_±r \ 454 >ð( _å )-> _wide_d©a -> _IO_wr™e_’d ), 0) \ 455 ? `__wov”æow ( _å , _wch ) \ 456 : ( _IO_wšt_t è(*( _å )-> _wide_d©a -> _IO_wr™e_±r ++ = ( _wch ))) ) 459  #_IO_ãof_uÆocked ( __å è(((__å)-> _æags & _IO_EOF_SEEN è!ð0) ) 460  #_IO_ã¼Ü_uÆocked ( __å è(((__å)-> _æags & _IO_ERR_SEEN è!ð0) ) 462  _IO_g‘c ( _IO_FILE * __å ); 463  _IO_putc ( __c , _IO_FILE * __å ); 464  _IO_ãof ( _IO_FILE * __å è __THROW ; 465  _IO_ã¼Ü ( _IO_FILE * __å è __THROW ; 467  _IO_³ekc_locked ( _IO_FILE * __å ); 470  #_IO_PENDING_OUTPUT_COUNT ( _å ) \ 471 (( _å )-> _IO_wr™e_±r - (_å)-> _IO_wr™e_ba£ ) ) 473  _IO_æockfže ( _IO_FILE *è __THROW ; 474  _IO_fuÆockfže ( _IO_FILE *è __THROW ; 475  _IO_árylockfže ( _IO_FILE *è __THROW ; 477 #ifdeà _IO_MTSAFE_IO 478  #_IO_³ekc ( _å è `_IO_³ekc_locked (_å) ) 479  #_IO_æockfže ( _å ) \ 480 ià((( _å )-> _æags & _IO_USER_LOCK è=ð0è `_IO_æockfže (_å) ) 481  #_IO_fuÆockfže ( _å ) \ 482 ià((( _å )-> _æags & _IO_USER_LOCK è=ð0è `_IO_fuÆockfže (_å) ) 484  #_IO_³ekc ( _å è `_IO_³ekc_uÆocked (_å) ) 485  #_IO_æockfže ( _å è ) 486  #_IO_fuÆockfže ( _å è ) 487  #_IO_árylockfže ( _å è ) 488  #_IO_þ—nup_»giÚ_¡¬t ( _fù , _å è ) 489  #_IO_þ—nup_»giÚ_’d ( _Do™ è ) 492  _IO_vfsÿnf ( _IO_FILE * __»¡riù , const * __restrict, 493 _IO_va_li¡ , * __»¡riù ); 494  _IO_vårštf ( _IO_FILE * __»¡riù , const *__restrict, 495 _IO_va_li¡ ); 496 _IO_ssize_t _IO_·dn ( _IO_FILE *, , _IO_ssize_t); 497 _IO_size_t _IO_sg‘n ( _IO_FILE *, *, _IO_size_t); 499 _IO_off64_t _IO_£ekoff ( _IO_FILE *, _IO_off64_t, , ); 500 _IO_off64_t _IO_£ekpos ( _IO_FILE *, _IO_off64_t, ); 502  _IO_ä“_backup_¬— ( _IO_FILE *è __THROW ; 504 #ià defšed _LIBC || defšed _GLIBCPP_USE_WCHAR_T 505 _IO_wšt_t _IO_g‘wc ( _IO_FILE * __å ); 506 _IO_wšt_t _IO_putwc ( wch¬_t __wc , _IO_FILE * __å ); 507  _IO_fwide ( _IO_FILE * __å ,  __mode è __THROW ; 508 #ià __GNUC__ >= 2 511 #ià defšed _LIBC && defšed SHARED 512  ~ 513 #ià SHLIB_COMPAT ( libc , GLIBC_2_0 , GLIBC_2_1 ) 514  #_IO_fwide_maybe_šcom·tibË \ 515 ( `__bužtš_ex³ù (& _IO_¡dš_u£d =ð NULL , 0)) ) 516 cÚ¡  _IO_¡dš_u£d ; 517 w—k_ex‹º ( _IO_¡dš_u£d ); 520 #iâdeà _IO_fwide_maybe_šcom·tibË 521  #_IO_fwide_maybe_šcom·tibË (0) ) 525  #_IO_fwide ( __å , __mode ) \ 526 ({  __»suÉ = ( __mode ); \ 527 ià( __»suÉ < 0 && ! _IO_fwide_maybe_šcom·tibË ) \ 529 ià(( __å )-> _mode == 0) \ 531 ( __å )-> _mode = -1; \ 532 __»suÉ = ( __å )-> _mode ; \ 534 ià( `__bužtš_cÚ¡ªt_p ( __mode ) && (__mode) == 0) \ 535 __»suÉ = _IO_fwide_maybe_šcom·tibË ? -1 : ( __å )-> _mode ; \ 537 __»suÉ = `_IO_fwide ( __å , __result); \ 538 __»suÉ ; }) ) 541  _IO_vfwsÿnf ( _IO_FILE * __»¡riù , cÚ¡ wch¬_t * __restrict, 542 _IO_va_li¡ , * __»¡riù ); 543  _IO_vfw´štf ( _IO_FILE * __»¡riù , cÚ¡ wch¬_t *__restrict, 544 _IO_va_li¡ ); 545 _IO_ssize_t _IO_w·dn ( _IO_FILE *, wšt_t , _IO_ssize_t); 546  _IO_ä“_wbackup_¬— ( _IO_FILE *è __THROW ; 549 #ifdeà __LDBL_COMPAT 550  ~ 553 #ifdeà __ýlu¥lus @/usr/include/linux/if_ether.h 21 #iâdeà _LINUX_IF_ETHER_H 22  #_LINUX_IF_ETHER_H ) 24  ~ 31  #ETH_ALEN 6 ) 32  #ETH_HLEN 14 ) 33  #ETH_ZLEN 60 ) 34  #ETH_DATA_LEN 1500 ) 35  #ETH_FRAME_LEN 1514 ) 36  #ETH_FCS_LEN 4 ) 42  #ETH_P_LOOP 0x0060 ) 43  #ETH_P_PUP 0x0200 ) 44  #ETH_P_PUPAT 0x0201 ) 45  #ETH_P_IP 0x0800 ) 46  #ETH_P_X25 0x0805 ) 47  #ETH_P_ARP 0x0806 ) 48  #ETH_P_BPQ 0x08FF ) 49  #ETH_P_IEEEPUP 0x0a00 ) 50  #ETH_P_IEEEPUPAT 0x0a01 ) 51  #ETH_P_DEC 0x6000 ) 52  #ETH_P_DNA_DL 0x6001 ) 53  #ETH_P_DNA_RC 0x6002 ) 54  #ETH_P_DNA_RT 0x6003 ) 55  #ETH_P_LAT 0x6004 ) 56  #ETH_P_DIAG 0x6005 ) 57  #ETH_P_CUST 0x6006 ) 58  #ETH_P_SCA 0x6007 ) 59  #ETH_P_TEB 0x6558 ) 60  #ETH_P_RARP 0x8035 ) 61  #ETH_P_ATALK 0x809B ) 62  #ETH_P_AARP 0x80F3 ) 63  #ETH_P_8021Q 0x8100 ) 64  #ETH_P_IPX 0x8137 ) 65  #ETH_P_IPV6 0x86DD ) 66  #ETH_P_PAUSE 0x8808 ) 67  #ETH_P_SLOW 0x8809 ) 68  #ETH_P_WCCP 0x883E ) 70  #ETH_P_PPP_DISC 0x8863 ) 71  #ETH_P_PPP_SES 0x8864 ) 72  #ETH_P_MPLS_UC 0x8847 ) 73  #ETH_P_MPLS_MC 0x8848 ) 74  #ETH_P_ATMMPOA 0x884ø ) 75  #ETH_P_LINK_CTL 0x886ø ) 76  #ETH_P_ATMFATE 0x8884 ) 79  #ETH_P_PAE 0x888E ) 80  #ETH_P_AOE 0x88A2 ) 81  #ETH_P_8021AD 0x88A8 ) 82  #ETH_P_TIPC 0x88CA ) 83  #ETH_P_8021AH 0x88E7 ) 84  #ETH_P_1588 0x88F7 ) 85  #ETH_P_FCOE 0x8906 ) 86  #ETH_P_TDLS 0x890D ) 87  #ETH_P_FIP 0x8914 ) 88  #ETH_P_QINQ1 0x9100 ) 89  #ETH_P_QINQ2 0x9200 ) 90  #ETH_P_QINQ3 0x9300 ) 91  #ETH_P_EDSA 0xDADA ) 92  #ETH_P_AF_IUCV 0xFBFB ) 98  #ETH_P_802_3 0x0001 ) 99  #ETH_P_AX25 0x0002 ) 100  #ETH_P_ALL 0x0003 ) 101  #ETH_P_802_2 0x0004 ) 102  #ETH_P_SNAP 0x0005 ) 103  #ETH_P_DDCMP 0x0006 ) 104  #ETH_P_WAN_PPP 0x0007 ) 105  #ETH_P_PPP_MP 0x0008 ) 106  #ETH_P_LOCALTALK 0x0009 ) 107  #ETH_P_CAN 0x000C ) 108  #ETH_P_PPPTALK 0x0010 ) 109  #ETH_P_TR_802_2 0x0011 ) 110  #ETH_P_MOBITEX 0x0015 ) 111  #ETH_P_CONTROL 0x0016 ) 112  #ETH_P_IRDA 0x0017 ) 113  #ETH_P_ECONET 0x0018 ) 114  #ETH_P_HDLC 0x0019 ) 115  #ETH_P_ARCNET 0x001A ) 116  #ETH_P_DSA 0x001B ) 117  #ETH_P_TRAILER 0x001C ) 118  #ETH_P_PHONET 0x00F5 ) 119  #ETH_P_IEEE802154 0x00F6 ) 120  #ETH_P_CAIF 0x00F7 ) 126  s‘hhdr { 127  mh_de¡ [ ETH_ALEN ]; 128  mh_sourû [ ETH_ALEN ]; 129 __be16 mh_´Ùo ; 130 } __©Œibu‹__ (( ·cked )); @/usr/include/linux/posix_types.h 1 #iâdeà _LINUX_POSIX_TYPES_H 2  #_LINUX_POSIX_TYPES_H ) 4  ~ 21 #undeà __NFDBITS 22  #__NFDBITS (8 * ()) ) 24 #undeà __FD_SETSIZE 25  #__FD_SETSIZE 1024 ) 27 #undeà __FDSET_LONGS 28  #__FDSET_LONGS ( __FD_SETSIZE / __NFDBITS ) ) 30 #undeà __FDELT 31  #__FDELT ( d è((dè/ __NFDBITS ) ) 33 #undeà __FDMASK 34  #__FDMASK ( d è(1UL << ((dè% __NFDBITS )) ) 37  mfds_b™s [ __FDSET_LONGS ]; 38 } t__k”Ãl_fd_£t ; 41 (* t__k”Ãl_sighªdËr_t )(); 44  t__k”Ãl_key_t ; 45  t__k”Ãl_mqd_t ; 47  ~ @/usr/include/net/if_arp.h 23 #iâdeà _NET_IF_ARP_H 25  #_NET_IF_ARP_H 1 ) 26  ~ 28  ~ 29  ~ 31 g__BEGIN_DECLS 34  #MAX_ADDR_LEN 7 ) 40  #ARPOP_REQUEST 1 ) 41  #ARPOP_REPLY 2 ) 42  #ARPOP_RREQUEST 3 ) 43  #ARPOP_RREPLY 4 ) 44  #ARPOP_InREQUEST 8 ) 45  #ARPOP_InREPLY 9 ) 46  #ARPOP_NAK 10 ) 55  s¬phdr 57  m¬_hrd ; 58  m¬_´o ; 59  m¬_hÊ ; 60  m¬_¶n ; 61  m¬_Ý ; 65  m__¬_sha [ ETH_ALEN ]; 66  m__¬_s [4]; 67  m__¬_tha [ ETH_ALEN ]; 68  m__¬_t [4]; 74  #ARPHRD_NETROM 0 ) 75  #ARPHRD_ETHER 1 ) 76  #ARPHRD_EETHER 2 ) 77  #ARPHRD_AX25 3 ) 78  #ARPHRD_PRONET 4 ) 79  #ARPHRD_CHAOS 5 ) 80  #ARPHRD_IEEE802 6 ) 81  #ARPHRD_ARCNET 7 ) 82  #ARPHRD_APPLETLK 8 ) 83  #ARPHRD_DLCI 15 ) 84  #ARPHRD_ATM 19 ) 85  #ARPHRD_METRICOM 23 ) 86  #ARPHRD_IEEE1394 24 ) 87  #ARPHRD_EUI64 27 ) 88  #ARPHRD_INFINIBAND 32 ) 91  #ARPHRD_SLIP 256 ) 92  #ARPHRD_CSLIP 257 ) 93  #ARPHRD_SLIP6 258 ) 94  #ARPHRD_CSLIP6 259 ) 95  #ARPHRD_RSRVD 260 ) 96  #ARPHRD_ADAPT 264 ) 97  #ARPHRD_ROSE 270 ) 98  #ARPHRD_X25 271 ) 99  #ARPHRD_HWX25 272 ) 100  #ARPHRD_PPP 512 ) 101  #ARPHRD_CISCO 513 ) 102  #ARPHRD_HDLC ARPHRD_CISCO ) 103  #ARPHRD_LAPB 516 ) 104  #ARPHRD_DDCMP 517 ) 105  #ARPHRD_RAWHDLC 518 ) 107  #ARPHRD_TUNNEL 768 ) 108  #ARPHRD_TUNNEL6 769 ) 109  #ARPHRD_FRAD 770 ) 110  #ARPHRD_SKIP 771 ) 111  #ARPHRD_LOOPBACK 772 ) 112  #ARPHRD_LOCALTLK 773 ) 113  #ARPHRD_FDDI 774 ) 114  #ARPHRD_BIF 775 ) 115  #ARPHRD_SIT 776 ) 116  #ARPHRD_IPDDP 777 ) 117  #ARPHRD_IPGRE 778 ) 118  #ARPHRD_PIMREG 779 ) 119  #ARPHRD_HIPPI 780 ) 120  #ARPHRD_ASH 781 ) 121  #ARPHRD_ECONET 782 ) 122  #ARPHRD_IRDA 783 ) 123  #ARPHRD_FCPP 784 ) 124  #ARPHRD_FCAL 785 ) 125  #ARPHRD_FCPL 786 ) 126  #ARPHRD_FCFABRIC 787 ) 127  #ARPHRD_IEEE802_TR 800 ) 128  #ARPHRD_IEEE80211 801 ) 129  #ARPHRD_IEEE80211_PRISM 802 ) 130  #ARPHRD_IEEE80211_RADIOTAP 803 ) 131  #ARPHRD_IEEE802154 804 ) 132  #ARPHRD_IEEE802154_PHY 805 ) 134  #ARPHRD_VOID 0xFFFF ) 135  #ARPHRD_NONE 0xFFFE ) 139  s¬´eq 141  sockaddr m¬p_· ; 142  sockaddr m¬p_ha ; 143  m¬p_æags ; 144  sockaddr m¬p_Ãtmask ; 145  m¬p_dev [16]; 148  s¬´eq_Þd 150  sockaddr m¬p_· ; 151  sockaddr m¬p_ha ; 152  m¬p_æags ; 153  sockaddr m¬p_Ãtmask ; 157  #ATF_COM 0x02 ) 158  #ATF_PERM 0x04 ) 159  #ATF_PUBL 0x08 ) 160  #ATF_USETRAILERS 0x10 ) 161  #ATF_NETMASK 0x20 ) 163  #ATF_DONTPUB 0x40 ) 164  #ATF_MAGIC 0x80 ) 168  #ARPD_UPDATE 0x01 ) 169  #ARPD_LOOKUP 0x02 ) 170  #ARPD_FLUSH 0x03 ) 172  s¬pd_»que¡ 174  m»q ; 175 u_št32_t m ; 176  mdev ; 177  m¡amp ; 178  mupd©ed ; 179  mha [ MAX_ADDR_LEN ]; 182 g__END_DECLS @/usr/include/rpc/netdb.h 36 #iâdeà _RPC_NETDB_H 37  #_RPC_NETDB_H 1 ) 39  ~<ã©u»s.h > 41  #__Ãed_size_t ) 42  ~<¡ddef.h > 44 __BEGIN_DECLS 46  s½ûÁ 48 * mr_Çme ; 49 ** mr_®Ÿ£s ; 50  mr_numb” ; 53  $£ŒpûÁ ( __¡ayÝ’ è __THROW ; 54  $’d½ûÁ (è __THROW ; 55  ½ûÁ * $g‘½cbyÇme ( __cÚ¡ * __Çme è __THROW ; 56  ½ûÁ * $g‘½cbynumb” ( __numb” è __THROW ; 57  ½ûÁ * $g‘½ûÁ (è __THROW ; 59 #ifdeà __USE_MISC 60  $g‘½cbyÇme_r ( __cÚ¡ * __Çme ,  ½ûÁ * __»suÉ_buf , 61 * __bufãr , size_t __buæ’ , 62  ½ûÁ ** __»suÉ è __THROW ; 64  $g‘½cbynumb”_r ( __numb” ,  ½ûÁ * __»suÉ_buf , 65 * __bufãr , size_t __buæ’ , 66  ½ûÁ ** __»suÉ è __THROW ; 68  $g‘½ûÁ_r ( ½ûÁ * __»suÉ_buf , * __bufãr , 69 size_t __buæ’ ,  ½ûÁ ** __»suÉ è __THROW ; 72 __END_DECLS @/usr/include/sched.h 21 #iâdef _SCHED_H 22  #_SCHED_H 1 ) 24  ~<ã©u»s.h > 27  ~ 29  #__Ãed_size_t ) 30  ~<¡ddef.h > 32  #__Ãed_time_t ) 33  #__Ãed_time¥ec ) 34  ~ 36 #iâdeà __pid_t_defšed 37  __pid_t tpid_t ; 38  #__pid_t_defšed ) 43  ~ 45  #sched_´iÜ™y __sched_´iÜ™y ) 48 __BEGIN_DECLS 51  $sched_£¬am ( __pid_t __pid , __cÚ¡  sched_·¿m * __·¿m ) 52 __THROW ; 55  $sched_g‘·¿m ( __pid_t __pid ,  sched_·¿m * __·¿m è __THROW ; 58  $sched_£tscheduËr ( __pid_t __pid ,  __pÞicy , 59 __cÚ¡  sched_·¿m * __·¿m è __THROW ; 62  $sched_g‘scheduËr ( __pid_t __pid è __THROW ; 65  $sched_y›ld (è __THROW ; 68  $sched_g‘_´iÜ™y_max ( __®gÜ™hm è __THROW ; 71  $sched_g‘_´iÜ™y_mš ( __®gÜ™hm è __THROW ; 74  $sched_¼_g‘_š‹rv® ( __pid_t __pid ,  time¥ec * __t è __THROW ; 77 #ifdeà __USE_GNU 79  #CPU_SETSIZE __CPU_SETSIZE ) 80  #CPU_SET ( ýu , ýu£ è `__CPU_SET_S (ýu,  ( ýu_£t_t ), cpu£) ) 81  #CPU_CLR ( ýu , ýu£ è `__CPU_CLR_S (ýu,  ( ýu_£t_t ), cpu£) ) 82  #CPU_ISSET ( ýu , ýu£ è `__CPU_ISSET_S (ýu,  ( ýu_£t_t ), \ 83 ýu£ ) ) 84  #CPU_ZERO ( ýu£ è `__CPU_ZERO_S ( ( ýu_£t_t ), cpu£) ) 85  #CPU_COUNT ( ýu£ è `__CPU_COUNT_S ( ( ýu_£t_t ), cpu£) ) 87  #CPU_SET_S ( ýu , £tsize , ýu£ è `__CPU_SET_S (ýu, s‘size, cpu£) ) 88  #CPU_CLR_S ( ýu , £tsize , ýu£ è `__CPU_CLR_S (ýu, s‘size, cpu£) ) 89  #CPU_ISSET_S ( ýu , £tsize , ýu£ è `__CPU_ISSET_S (cpu, setsize, \ 90 ýu£ ) ) 91  #CPU_ZERO_S ( £tsize , ýu£ è `__CPU_ZERO_S (£tsize, cpu£) ) 92  #CPU_COUNT_S ( £tsize , ýu£ è `__CPU_COUNT_S (£tsize, cpu£) ) 94  #CPU_EQUAL ( ýu£1 , ýu£2 ) \ 95 `__CPU_EQUAL_S ( ( ýu_£t_t ), ýu£1 , ýu£2 ) ) 96  #CPU_EQUAL_S ( £tsize , ýu£1 , ýu£2 ) \ 97 `__CPU_EQUAL_S ( £tsize , ýu£1 , ýu£2 ) ) 99  #CPU_AND ( de¡£t , ¤c£t1 , ¤c£t2 ) \ 100 `__CPU_OP_S ( ( ýu_£t_t ), de¡£t , ¤c£t1 , ¤c£t2 , &) ) 101  #CPU_OR ( de¡£t , ¤c£t1 , ¤c£t2 ) \ 102 `__CPU_OP_S ( ( ýu_£t_t ), de¡£t , ¤c£t1 , ¤c£t2 , |) ) 103  #CPU_XOR ( de¡£t , ¤c£t1 , ¤c£t2 ) \ 104 `__CPU_OP_S ( ( ýu_£t_t ), de¡£t , ¤c£t1 , ¤c£t2 , ^) ) 105  #CPU_AND_S ( £tsize , de¡£t , ¤c£t1 , ¤c£t2 ) \ 106 `__CPU_OP_S ( £tsize , de¡£t , ¤c£t1 , ¤c£t2 , &) ) 107  #CPU_OR_S ( £tsize , de¡£t , ¤c£t1 , ¤c£t2 ) \ 108 `__CPU_OP_S ( £tsize , de¡£t , ¤c£t1 , ¤c£t2 , |) ) 109  #CPU_XOR_S ( £tsize , de¡£t , ¤c£t1 , ¤c£t2 ) \ 110 `__CPU_OP_S ( £tsize , de¡£t , ¤c£t1 , ¤c£t2 , ^) ) 112  #CPU_ALLOC_SIZE ( couÁ è `__CPU_ALLOC_SIZE (couÁ) ) 113  #CPU_ALLOC ( couÁ è `__CPU_ALLOC (couÁ) ) 114  #CPU_FREE ( ýu£t è `__CPU_FREE (ýu£t) ) 118  $sched_£ffš™y ( __pid_t __pid , size_t __ýu£tsize , 119 __cÚ¡ ýu_£t_t * __ýu£t è __THROW ; 122  $sched_g‘affš™y ( __pid_t __pid , size_t __ýu£tsize , 123 ýu_£t_t * __ýu£t è __THROW ; 126 __END_DECLS @/usr/include/xlocale.h 21 #iâdeà _XLOCALE_H 22  #_XLOCALE_H 1 ) 28  s__loÿË_¡ruù 31  __loÿË_d©a * m__loÿËs [13]; 34 cÚ¡ * m__ùy³_b ; 35 cÚ¡ * m__ùy³_tÞow” ; 36 cÚ¡ * m__ùy³_touµ” ; 39 cÚ¡ * m__Çmes [13]; 40 } * t__loÿË_t ; 43  __loÿË_t tloÿË_t ; @/usr/include/_G_config.h 4 #iâdeà _G_cÚfig_h 5  #_G_cÚfig_h 1 ) 9  ~ 10  #__Ãed_size_t ) 11 #ià defšed _LIBC || defšed _GLIBCPP_USE_WCHAR_T 12  #__Ãed_wch¬_t ) 14  #__Ãed_NULL ) 15  ~<¡ddef.h > 16  #__Ãed_mb¡©e_t ) 17 #ià defšed _LIBC || defšed _GLIBCPP_USE_WCHAR_T 18  #__Ãed_wšt_t ) 20  ~ 21  #_G_size_t size_t ) 24 __off_t m__pos ; 25 __mb¡©e_t m__¡©e ; 26 } t_G_åos_t ; 29 __off64_t m__pos ; 30 __mb¡©e_t m__¡©e ; 31 } t_G_åos64_t ; 32  #_G_ssize_t __ssize_t ) 33  #_G_off_t __off_t ) 34  #_G_off64_t __off64_t ) 35  #_G_pid_t __pid_t ) 36  #_G_uid_t __uid_t ) 37  #_G_wch¬_t wch¬_t ) 38  #_G_wšt_t wšt_t ) 39  #_G_¡©64 ¡©64 ) 40 #ià defšed _LIBC || defšed _GLIBCPP_USE_WCHAR_T 41  ~ 44  __gcÚv_šfo m__cd ; 47  __gcÚv_šfo m__cd ; 48  __gcÚv_¡•_d©a m__d©a ; 49 } m__combšed ; 50 } t_G_icÚv_t ; 53  t_G_št16_t t__©Œibu‹__ (( t__mode__ ( t__HI__ ))); 54  t_G_št32_t t__©Œibu‹__ (( t__mode__ ( t__SI__ ))); 55  t_G_ušt16_t t__©Œibu‹__ (( t__mode__ ( t__HI__ ))); 56  t_G_ušt32_t t__©Œibu‹__ (( t__mode__ ( t__SI__ ))); 58  #_G_HAVE_BOOL 1 ) 62  #_G_HAVE_ATEXIT 1 ) 63  #_G_HAVE_SYS_CDEFS 1 ) 64  #_G_HAVE_SYS_WAIT 1 ) 65  #_G_NEED_STDARG_H 1 ) 66  #_G_va_li¡ __gnuc_va_li¡ ) 68  #_G_HAVE_PRINTF_FP 1 ) 69  #_G_HAVE_MMAP 1 ) 70  #_G_HAVE_MREMAP 1 ) 71  #_G_HAVE_LONG_DOUBLE_IO 1 ) 72  #_G_HAVE_IO_FILE_OPEN 1 ) 73  #_G_HAVE_IO_GETLINE_INFO 1 ) 75  #_G_IO_IO_FILE_VERSION 0x20001 ) 77  #_G_OPEN64 __Ý’64 ) 78  #_G_LSEEK64 __l£ek64 ) 79  #_G_MMAP64 __mm­64 ) 80  #_G_FSTAT64 ( fd , buf è `__fx¡©64 ( _STAT_VER , fd, buf) ) 83  #_G_HAVE_ST_BLKSIZE `defšed ( _STATBUF_ST_BLKSIZE ) ) 85  #_G_BUFSIZ 8192 ) 88  #_G_NAMES_HAVE_UNDERSCORE 0 ) 89  #_G_VTABLE_LABEL_HAS_LENGTH 1 ) 90  #_G_USING_THUNKS 1 ) 91  #_G_VTABLE_LABEL_PREFIX "__vt_" ) 92  #_G_VTABLE_LABEL_PREFIX_ID __vt_ ) 95 #ià defšed __ýlu¥lus || defšed __STDC__ 96  #_G_ARGS ( ARGLIST è ) ARGLIST 98  #_G_ARGS ( ARGLIST è() ) @/usr/include/linux/stddef.h 1 #iâdeà _LINUX_STDDEF_H 2  #_LINUX_STDDEF_H ) 6 #undeà NULL 7 #ià defšed ( __ýlu¥lus ) 8  #NULL 0 ) 10  #NULL ((*)0) ) @/usr/include/gconv.h 23 #iâdeà _GCONV_H 24  #_GCONV_H 1 ) 26  ~<ã©u»s.h > 27  #__Ãed_mb¡©e_t ) 28  #__Ãed_wšt_t ) 29  ~ 30  #__Ãed_size_t ) 31  #__Ãed_wch¬_t ) 32  ~<¡ddef.h > 35  #__UNKNOWN_10646_CHAR (( wch¬_t è0xfffd) ) 40 m__GCONV_OK = 0, 41 m__GCONV_NOCONV , 42 m__GCONV_NODB , 43 m__GCONV_NOMEM , 45 m__GCONV_EMPTY_INPUT , 46 m__GCONV_FULL_OUTPUT , 47 m__GCONV_ILLEGAL_INPUT , 48 m__GCONV_INCOMPLETE_INPUT , 50 m__GCONV_ILLEGAL_DESCRIPTOR , 51 m__GCONV_INTERNAL_ERROR 58 m__GCONV_IS_LAST = 0x0001, 59 m__GCONV_IGNORE_ERRORS = 0x0002, 60 m__GCONV_SWAP = 0x0004 65  g__gcÚv_¡• ; 66  g__gcÚv_¡•_d©a ; 67  g__gcÚv_lßded_objeù ; 68  g__gcÚv_Œªs_d©a ; 72 (* t__gcÚv_fù è( t__gcÚv_¡• *,  t__gcÚv_¡•_d©a *, 73 t__cÚ¡ **, __const *, 74 **, tsize_t *, , ); 77  $wšt_t (* t__gcÚv_btowc_fù è( t__gcÚv_¡• *, ); 80 (* t__gcÚv_š™_fù è( t__gcÚv_¡• *); 81 (* t__gcÚv_’d_fù è( t__gcÚv_¡• *); 85 (* t__gcÚv_Œªs_fù è( t__gcÚv_¡• *, 86  t__gcÚv_¡•_d©a *, *, 87 t__cÚ¡ *, 88 t__cÚ¡ **, 89 t__cÚ¡ *, **, 90 tsize_t *); 93 (* t__gcÚv_Œªs_cÚ‹xt_fù è(*, t__cÚ¡ *, 94 t__cÚ¡ *, 98 (* t__gcÚv_Œªs_qu”y_fù è( t__cÚ¡ *, __const ***, 99 tsize_t *); 102 (* t__gcÚv_Œªs_š™_fù ) (**, const *); 103 (* t__gcÚv_Œªs_’d_fù ) (*); 105  s__gcÚv_Œªs_d©a 108 __gcÚv_Œªs_fù __Œªs_fù ; 109 __gcÚv_Œªs_cÚ‹xt_fù __Œªs_cÚ‹xt_fù ; 110 __gcÚv_Œªs_’d_fù __Œªs_’d_fù ; 111 * __d©a ; 112  __gcÚv_Œªs_d©a * __Ãxt ; 117  s__gcÚv_¡• 119  __gcÚv_lßded_objeù * __shlib_hªdË ; 120 __cÚ¡ * __modÇme ; 122  __couÁ” ; 124 * __äom_Çme ; 125 * __to_Çme ; 127 __gcÚv_fù __fù ; 128 __gcÚv_btowc_fù __btowc_fù ; 129 __gcÚv_š™_fù __š™_fù ; 130 __gcÚv_’d_fù __’d_fù ; 134  __mš_Ãeded_äom ; 135  __max_Ãeded_äom ; 136  __mš_Ãeded_to ; 137  __max_Ãeded_to ; 140  __¡©eful ; 142 * __d©a ; 147  s__gcÚv_¡•_d©a 149 * __outbuf ; 150 * __outbuãnd ; 154  __æags ; 158  __švoÿtiÚ_couÁ” ; 162  __š‹º®_u£ ; 164 __mb¡©e_t * __¡©• ; 165 __mb¡©e_t __¡©e ; 169  __gcÚv_Œªs_d©a * __Œªs ; 174  s__gcÚv_šfo 176 size_t __n¡•s ; 177  __gcÚv_¡• * __¡•s ; 178 __ex‹nsiÚ__  __gcÚv_¡•_d©a __d©a __æex¬r ; 179 } * t__gcÚv_t ; @/usr/include/wchar.h 24 #iâdeà _WCHAR_H 26 #ià! defšed __Ãed_mb¡©e_t && !defšed __Ãed_wšt_t 27  #_WCHAR_H 1 ) 28  ~<ã©u»s.h > 31 #ifdeà _WCHAR_H 33  #__Ãed___FILE ) 34 #ià defšed __USE_UNIX98 || defšed __USE_XOPEN2K 35  #__Ãed_FILE ) 37  ~<¡dio.h > 39  #__Ãed___va_li¡ ) 40  ~<¡d¬g.h > 42  ~ 45  #__Ãed_size_t ) 46  #__Ãed_wch¬_t ) 47  #__Ãed_NULL ) 49 #ià defšed _WCHAR_H || defšed __Ãed_wšt_t || !defšed __WINT_TYPE__ 50 #undeà __Ãed_wšt_t 51  #__Ãed_wšt_t ) 52  ~<¡ddef.h > 56 #iâdeà _WINT_T 61  #_WINT_T ) 62  twšt_t ; 66 #ià defšed __ýlu¥lus && defšed _GLIBCPP_USE_NAMESPACES \ 67 && defšed __WINT_TYPE__ 68 __BEGIN_NAMESPACE_STD 69  __WINT_TYPE__ twšt_t ; 70 g__END_NAMESPACE_STD 75 #ià defšed __ýlu¥lus && __GNUC_PREREQ (4, 4) 76  #__CORRECT_ISO_CPP_WCHAR_H_PROTO ) 80 #ià( defšed _WCHAR_H || defšed __Ãed_mb¡©e_t è&& !defšed __mb¡©e_t_defšed 81  #__mb¡©e_t_defšed 1 ) 85  m__couÁ ; 88 #ifdeà __WINT_TYPE__ 89 __WINT_TYPE__ m__wch ; 91 wšt_t m__wch ; 93  m__wchb [4]; 94 } m__v®ue ; 95 } t__mb¡©e_t ; 97 #undeà __Ãed_mb¡©e_t 102 #ifdeà _WCHAR_H 104 __BEGIN_NAMESPACE_C99 106  __mb¡©e_t tmb¡©e_t ; 107 g__END_NAMESPACE_C99 108 #ifdeà __USE_GNU 109 $__USING_NAMESPACE_C99 ( mb¡©e_t ) 112 #iâdeà WCHAR_MIN 114  #WCHAR_MIN __WCHAR_MIN ) 115  #WCHAR_MAX __WCHAR_MAX ) 118 #iâdeà WEOF 119  #WEOF (0xffffffffu) ) 124 #ià defšed __USE_XOPEN && !defšed __USE_UNIX98 125  ~ 129 __BEGIN_DECLS 131 __BEGIN_NAMESPACE_STD 134  tm ; 135 __END_NAMESPACE_STD 139 $__USING_NAMESPACE_STD ( tm ) 142 __BEGIN_NAMESPACE_STD 144 wch¬_t * $wcsýy ( wch¬_t * __»¡riù __de¡ , 145 __cÚ¡ wch¬_t * __»¡riù __¤c è __THROW ; 147 wch¬_t * $wc¢ýy ( wch¬_t * __»¡riù __de¡ , 148 __cÚ¡ wch¬_t * __»¡riù __¤c , size_t __n ) 149 __THROW ; 152 wch¬_t * $wcsÿt ( wch¬_t * __»¡riù __de¡ , 153 __cÚ¡ wch¬_t * __»¡riù __¤c è __THROW ; 155 wch¬_t * $wc¢ÿt ( wch¬_t * __»¡riù __de¡ , 156 __cÚ¡ wch¬_t * __»¡riù __¤c , size_t __n ) 157 __THROW ; 160  $wcscmp ( __cÚ¡ wch¬_t * __s1 , __cÚ¡ wch¬_ˆ* __s2 ) 161 __THROW __©Œibu‹_pu»__ ; 163  $wc¢cmp ( __cÚ¡ wch¬_t * __s1 , __cÚ¡ wch¬_ˆ* __s2 , size_t __n ) 164 __THROW __©Œibu‹_pu»__ ; 165 __END_NAMESPACE_STD 167 #ifdeà __USE_XOPEN2K8 169  $wcsÿ£cmp ( __cÚ¡ wch¬_t * __s1 , __cÚ¡ wch¬_ˆ* __s2 è __THROW ; 172  $wc¢ÿ£cmp ( __cÚ¡ wch¬_t * __s1 , __cÚ¡ wch¬_ˆ* __s2 , 173 size_t __n è __THROW ; 177  ~ 179  $wcsÿ£cmp_l ( __cÚ¡ wch¬_t * __s1 , __cÚ¡ wch¬_ˆ* __s2 , 180 __loÿË_t __loc è __THROW ; 182  $wc¢ÿ£cmp_l ( __cÚ¡ wch¬_t * __s1 , __cÚ¡ wch¬_ˆ* __s2 , 183 size_t __n , __loÿË_t __loc è __THROW ; 186 __BEGIN_NAMESPACE_STD 189  $wcscÞl ( __cÚ¡ wch¬_t * __s1 , __cÚ¡ wch¬_ˆ* __s2 è __THROW ; 193 size_t $wcsxäm ( wch¬_t * __»¡riù __s1 , 194 __cÚ¡ wch¬_t * __»¡riù __s2 , size_t __n è __THROW ; 195 __END_NAMESPACE_STD 197 #ifdeà __USE_XOPEN2K8 203  $wcscÞl_l ( __cÚ¡ wch¬_t * __s1 , __cÚ¡ wch¬_ˆ* __s2 , 204 __loÿË_t __loc è __THROW ; 209 size_t $wcsxäm_l ( wch¬_t * __s1 , __cÚ¡ wch¬_ˆ* __s2 , 210 size_t __n , __loÿË_t __loc è __THROW ; 213 wch¬_t * $wcsdup ( __cÚ¡ wch¬_t * __s è __THROW __©Œibu‹_m®loc__ ; 216 __BEGIN_NAMESPACE_STD 218 #ifdeà __CORRECT_ISO_CPP_WCHAR_H_PROTO 219 "C++" wch¬_t * $wcschr ( wch¬_t * __wcs , wch¬_ˆ __wc ) 220 __THROW `__asm ("wcschr"è __©Œibu‹_pu»__ ; 221 "C++" __cÚ¡ wch¬_t * $wcschr ( __cÚ¡ wch¬_t * __wcs , wch¬_ˆ __wc ) 222 __THROW `__asm ("wcschr"è __©Œibu‹_pu»__ ; 224 wch¬_t * $wcschr ( __cÚ¡ wch¬_t * __wcs , wch¬_ˆ __wc ) 225 __THROW __©Œibu‹_pu»__ ; 228 #ifdeà __CORRECT_ISO_CPP_WCHAR_H_PROTO 229 "C++" wch¬_t * $wc¤chr ( wch¬_t * __wcs , wch¬_ˆ __wc ) 230 __THROW `__asm ("wc¤chr"è __©Œibu‹_pu»__ ; 231 "C++" __cÚ¡ wch¬_t * $wc¤chr ( __cÚ¡ wch¬_t * __wcs , wch¬_ˆ __wc ) 232 __THROW `__asm ("wc¤chr"è __©Œibu‹_pu»__ ; 234 wch¬_t * $wc¤chr ( __cÚ¡ wch¬_t * __wcs , wch¬_ˆ __wc ) 235 __THROW __©Œibu‹_pu»__ ; 237 __END_NAMESPACE_STD 239 #ifdeà __USE_GNU 242 wch¬_t * $wcschºul ( __cÚ¡ wch¬_t * __s , wch¬_ˆ __wc ) 243 __THROW __©Œibu‹_pu»__ ; 246 __BEGIN_NAMESPACE_STD 249 size_t $wcsc¥n ( __cÚ¡ wch¬_t * __wcs , __cÚ¡ wch¬_ˆ* __»jeù ) 250 __THROW __©Œibu‹_pu»__ ; 253 size_t $wcs¥n ( __cÚ¡ wch¬_t * __wcs , __cÚ¡ wch¬_ˆ* __acû± ) 254 __THROW __©Œibu‹_pu»__ ; 256 #ifdeà __CORRECT_ISO_CPP_WCHAR_H_PROTO 257 "C++" wch¬_t * $wc¥brk ( wch¬_t * __wcs , __cÚ¡ wch¬_ˆ* __acû± ) 258 __THROW `__asm ("wc¥brk"è __©Œibu‹_pu»__ ; 259 "C++" __cÚ¡ wch¬_t * $wc¥brk ( __cÚ¡ wch¬_t * __wcs , 260 __cÚ¡ wch¬_t * __acû± ) 261 __THROW `__asm ("wc¥brk"è __©Œibu‹_pu»__ ; 263 wch¬_t * $wc¥brk ( __cÚ¡ wch¬_t * __wcs , __cÚ¡ wch¬_ˆ* __acû± ) 264 __THROW __©Œibu‹_pu»__ ; 267 #ifdeà __CORRECT_ISO_CPP_WCHAR_H_PROTO 268 "C++" wch¬_t * $wcs¡r ( wch¬_t * __hay¡ack , __cÚ¡ wch¬_ˆ* __ÃedË ) 269 __THROW `__asm ("wcs¡r"è __©Œibu‹_pu»__ ; 270 "C++" __cÚ¡ wch¬_t * $wcs¡r ( __cÚ¡ wch¬_t * __hay¡ack , 271 __cÚ¡ wch¬_t * __ÃedË ) 272 __THROW `__asm ("wcs¡r"è __©Œibu‹_pu»__ ; 274 wch¬_t * $wcs¡r ( __cÚ¡ wch¬_t * __hay¡ack , __cÚ¡ wch¬_ˆ* __ÃedË ) 275 __THROW __©Œibu‹_pu»__ ; 279 wch¬_t * $wc¡ok ( wch¬_t * __»¡riù __s , 280 __cÚ¡ wch¬_t * __»¡riù __d–im , 281 wch¬_t ** __»¡riù __±r è __THROW ; 284 size_t $wc¦’ ( __cÚ¡ wch¬_t * __s è __THROW __©Œibu‹_pu»__ ; 285 __END_NAMESPACE_STD 287 #ifdeà __USE_XOPEN 289 #ifdeà __CORRECT_ISO_CPP_WCHAR_H_PROTO 290 "C++" wch¬_t * $wcswcs ( wch¬_t * __hay¡ack , __cÚ¡ wch¬_ˆ* __ÃedË ) 291 __THROW `__asm ("wcswcs"è __©Œibu‹_pu»__ ; 292 "C++" __cÚ¡ wch¬_t * $wcswcs ( __cÚ¡ wch¬_t * __hay¡ack , 293 __cÚ¡ wch¬_t * __ÃedË ) 294 __THROW `__asm ("wcswcs"è __©Œibu‹_pu»__ ; 296 wch¬_t * $wcswcs ( __cÚ¡ wch¬_t * __hay¡ack , __cÚ¡ wch¬_ˆ* __ÃedË ) 297 __THROW __©Œibu‹_pu»__ ; 301 #ifdeà __USE_XOPEN2K8 303 size_t $wc¢Ën ( __cÚ¡ wch¬_t * __s , size_t __maxËn ) 304 __THROW __©Œibu‹_pu»__ ; 308 __BEGIN_NAMESPACE_STD 310 #ifdeà __CORRECT_ISO_CPP_WCHAR_H_PROTO 311 "C++" wch¬_t * $wmemchr ( wch¬_t * __s , wch¬_ˆ __c , size_t __n ) 312 __THROW `__asm ("wmemchr"è __©Œibu‹_pu»__ ; 313 "C++" __cÚ¡ wch¬_t * $wmemchr ( __cÚ¡ wch¬_t * __s , wch¬_ˆ __c , 314 size_t __n ) 315 __THROW `__asm ("wmemchr"è __©Œibu‹_pu»__ ; 317 wch¬_t * $wmemchr ( __cÚ¡ wch¬_t * __s , wch¬_ˆ __c , size_t __n ) 318 __THROW __©Œibu‹_pu»__ ; 322  $wmemcmp ( __cÚ¡ wch¬_t * __s1 , __cÚ¡ wch¬_ˆ* __s2 , size_t __n ) 323 __THROW __©Œibu‹_pu»__ ; 326 wch¬_t * $wmemýy ( wch¬_t * __»¡riù __s1 , 327 __cÚ¡ wch¬_t * __»¡riù __s2 , size_t __n è __THROW ; 331 wch¬_t * $wmemmove ( wch¬_t * __s1 , __cÚ¡ wch¬_ˆ* __s2 , size_t __n ) 332 __THROW ; 335 wch¬_t * $wmem£t ( wch¬_t * __s , wch¬_ˆ __c , size_t __n è __THROW ; 336 __END_NAMESPACE_STD 338 #ifdeà __USE_GNU 341 wch¬_t * $wmempýy ( wch¬_t * __»¡riù __s1 , 342 __cÚ¡ wch¬_t * __»¡riù __s2 , size_t __n ) 343 __THROW ; 347 __BEGIN_NAMESPACE_STD 350 wšt_t $btowc ( __c è __THROW ; 354  $wùob ( wšt_t __c è __THROW ; 358  $mbsš™ ( __cÚ¡ mb¡©e_t * __ps è __THROW __©Œibu‹_pu»__ ; 362 size_t $mb¹owc ( wch¬_t * __»¡riù __pwc , 363 __cÚ¡ * __»¡riù __s , size_t __n , 364 mb¡©e_t * __p è __THROW ; 367 size_t $wütomb (* __»¡riù __s , wch¬_t __wc , 368 mb¡©e_t * __»¡riù __ps è __THROW ; 371 size_t $__mb¾’ ( __cÚ¡ * __»¡riù __s , size_t __n , 372 mb¡©e_t * __»¡riù __ps è __THROW ; 373 size_t $mb¾’ ( __cÚ¡ * __»¡riù __s , size_t __n , 374 mb¡©e_t * __»¡riù __ps è __THROW ; 375 __END_NAMESPACE_STD 377 #ifdeà __USE_EXTERN_INLINES 383 wšt_t $__btowc_®Ÿs ( __c è `__asm ("btowc"); 384 __ex‹º_šlše wšt_t 385 `__NTH ( $btowc ( __c )) 386 {  ( `__bužtš_cÚ¡ªt_p ( __c ) && __c >= '\0' && __c <= '\x7f' 387 ? ( wšt_t è __c : `__btowc_®Ÿs (__c)); } } 389  $__wùob_®Ÿs ( wšt_t __c è `__asm ("wctob"); 390 __ex‹º_šlše  391 `__NTH ( $wùob ( wšt_t __wc )) 392 {  ( `__bužtš_cÚ¡ªt_p ( __wc è&& __wø>ð L '\0' && __wc <= L'\x7f' 393 ? (è __wc : `__wùob_®Ÿs (__wc)); } } 395 __ex‹º_šlše size_t 396 __NTH ( $mb¾’ ( __cÚ¡ * __»¡riù __s , size_t __n , 397 mb¡©e_t * __»¡riù __ps )) 398 {  ( __ps !ð NULL 399 ? `mb¹owc ( NULL , __s , __n , __ps è: `__mb¾’ (__s, __n, NULL)); } } 402 __BEGIN_NAMESPACE_STD 405 size_t $mb¤towcs ( wch¬_t * __»¡riù __d¡ , 406 __cÚ¡ ** __»¡riù __¤c , size_t __Ën , 407 mb¡©e_t * __»¡riù __ps è __THROW ; 411 size_t $wc¤tombs (* __»¡riù __d¡ , 412 __cÚ¡ wch¬_t ** __»¡riù __¤c , size_t __Ën , 413 mb¡©e_t * __»¡riù __ps è __THROW ; 414 __END_NAMESPACE_STD 417 #ifdef __USE_XOPEN2K8 420 size_t $mb¢¹owcs ( wch¬_t * __»¡riù __d¡ , 421 __cÚ¡ ** __»¡riù __¤c , size_t __nmc , 422 size_t __Ën , mb¡©e_t * __»¡riù __ps è __THROW ; 426 size_t $wc¢¹ombs (* __»¡riù __d¡ , 427 __cÚ¡ wch¬_t ** __»¡riù __¤c , 428 size_t __nwc , size_ˆ __Ën , 429 mb¡©e_t * __»¡riù __ps è __THROW ; 434 #ifdeà __USE_XOPEN 436  $wcwidth ( wch¬_t __c è __THROW ; 440  $wcswidth ( __cÚ¡ wch¬_t * __s , size_t __n è __THROW ; 444 __BEGIN_NAMESPACE_STD 447  $wc¡od ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 448 wch¬_t ** __»¡riù __’d±r è __THROW ; 449 __END_NAMESPACE_STD 451 #ifdeà __USE_ISOC99 452 __BEGIN_NAMESPACE_C99 454  $wc¡of ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 455 wch¬_t ** __»¡riù __’d±r è __THROW ; 456  $wc¡Þd ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 457 wch¬_t ** __»¡riù __’d±r è __THROW ; 458 __END_NAMESPACE_C99 462 __BEGIN_NAMESPACE_STD 465  $wc¡Þ ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 466 wch¬_t ** __»¡riù __’d±r ,  __ba£ è __THROW ; 470  $wc¡oul ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 471 wch¬_t ** __»¡riù __’d±r ,  __ba£ ) 472 __THROW ; 473 __END_NAMESPACE_STD 475 #ià defšed __USE_ISOC99 || (defšed __GNUC__ && defšed __USE_GNU ) 476 __BEGIN_NAMESPACE_C99 479 __ex‹nsiÚ__ 480  $wc¡Þl ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 481 wch¬_t ** __»¡riù __’d±r ,  __ba£ ) 482 __THROW ; 486 __ex‹nsiÚ__ 487  $wc¡ouÎ ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 488 wch¬_t ** __»¡riù __’d±r , 489  __ba£ è __THROW ; 490 __END_NAMESPACE_C99 493 #ià defšed __GNUC__ && defšed __USE_GNU 496 __ex‹nsiÚ__ 497  $wc¡oq ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 498 wch¬_t ** __»¡riù __’d±r ,  __ba£ ) 499 __THROW ; 503 __ex‹nsiÚ__ 504  $wc¡ouq ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 505 wch¬_t ** __»¡riù __’d±r , 506  __ba£ è __THROW ; 509 #ifdeà __USE_GNU 523  ~ 527  $wc¡Þ_l ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 528 wch¬_t ** __»¡riù __’d±r ,  __ba£ , 529 __loÿË_t __loc è __THROW ; 531  $wc¡oul_l ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 532 wch¬_t ** __»¡riù __’d±r , 533  __ba£ , __loÿË_t __loc è __THROW ; 535 __ex‹nsiÚ__ 536  $wc¡Þl_l ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 537 wch¬_t ** __»¡riù __’d±r , 538  __ba£ , __loÿË_t __loc è __THROW ; 540 __ex‹nsiÚ__ 541  $wc¡ouÎ_l ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 542 wch¬_t ** __»¡riù __’d±r , 543  __ba£ , __loÿË_t __loc ) 544 __THROW ; 546  $wc¡od_l ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 547 wch¬_t ** __»¡riù __’d±r , __loÿË_t __loc ) 548 __THROW ; 550  $wc¡of_l ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 551 wch¬_t ** __»¡riù __’d±r , __loÿË_t __loc ) 552 __THROW ; 554  $wc¡Þd_l ( __cÚ¡ wch¬_t * __»¡riù __ÅŒ , 555 wch¬_t ** __»¡riù __’d±r , 556 __loÿË_t __loc è __THROW ; 560 #ifdeà __USE_XOPEN2K8 563 wch¬_t * $wýýy ( wch¬_t * __»¡riù __de¡ , 564 __cÚ¡ wch¬_t * __»¡riù __¤c è __THROW ; 568 wch¬_t * $wýnýy ( wch¬_t * __»¡riù __de¡ , 569 __cÚ¡ wch¬_t * __»¡riù __¤c , size_t __n ) 570 __THROW ; 577 __FILE * $Ý’_wmem¡»am ( wch¬_t ** __buæoc , size_t * __siz–oc è __THROW ; 580 #ià defšed __USE_ISOC95 || defšed __USE_UNIX98 581 __BEGIN_NAMESPACE_STD 584  $fwide ( __FILE * __å ,  __mode è __THROW ; 591  `fw´štf ( __FILE * __»¡riù __¡»am , 592 __cÚ¡ wch¬_t * __»¡riù __fÜm© , ...) 598  `w´štf ( __cÚ¡ wch¬_t * __»¡riù __fÜm© , ...) 601  $sw´štf ( wch¬_t * __»¡riù __s , size_t __n , 602 __cÚ¡ wch¬_t * __»¡riù __fÜm© , ...) 603 __THROW ; 609  `vfw´štf ( __FILE * __»¡riù __s , 610 __cÚ¡ wch¬_t * __»¡riù __fÜm© , 611 __gnuc_va_li¡ __¬g ) 617  `vw´štf ( __cÚ¡ wch¬_t * __»¡riù __fÜm© , 618 __gnuc_va_li¡ __¬g ) 622  $vsw´štf ( wch¬_t * __»¡riù __s , size_t __n , 623 __cÚ¡ wch¬_t * __»¡riù __fÜm© , 624 __gnuc_va_li¡ __¬g ) 625 __THROW ; 632  `fwsÿnf ( __FILE * __»¡riù __¡»am , 633 __cÚ¡ wch¬_t * __»¡riù __fÜm© , ...) 639  `wsÿnf ( __cÚ¡ wch¬_t * __»¡riù __fÜm© , ...) 642  $swsÿnf ( __cÚ¡ wch¬_t * __»¡riù __s , 643 __cÚ¡ wch¬_t * __»¡riù __fÜm© , ...) 644 __THROW ; 646 #ià defšed __USE_ISOC99 && !defšed __USE_GNU \ 647 && (! defšed __LDBL_COMPAT || !defšed __REDIRECT ) \ 648 && ( defšed __STRICT_ANSI__ || defšed __USE_XOPEN2K ) 649 #ifdeà __REDIRECT 653  `__REDIRECT ( fwsÿnf , ( __FILE * __»¡riù __¡»am , 654 __cÚ¡ wch¬_t * __»¡riù __fÜm© , ...), 655 __isoc99_fwsÿnf ) 657  `__REDIRECT ( wsÿnf , ( __cÚ¡ wch¬_t * __»¡riù __fÜm© , ...), 658 __isoc99_wsÿnf ) 660  `__REDIRECT_NTH ( swsÿnf , ( __cÚ¡ wch¬_t * __»¡riù __s , 661 __cÚ¡ wch¬_t * __»¡riù __fÜm© , 662 ...), __isoc99_swsÿnf ) 665  `__isoc99_fwsÿnf ( __FILE * __»¡riù __¡»am , 666 __cÚ¡ wch¬_t * __»¡riù __fÜm© , ...); 667  `__isoc99_wsÿnf ( __cÚ¡ wch¬_t * __»¡riù __fÜm© , ...); 668  $__isoc99_swsÿnf ( __cÚ¡ wch¬_t * __»¡riù __s , 669 __cÚ¡ wch¬_t * __»¡riù __fÜm© , ...) 670 __THROW ; 671  #fwsÿnf __isoc99_fwsÿnf ) 672  #wsÿnf __isoc99_wsÿnf ) 673  #swsÿnf __isoc99_swsÿnf ) 677 __END_NAMESPACE_STD 680 #ifdeà __USE_ISOC99 681 __BEGIN_NAMESPACE_C99 686  `vfwsÿnf ( __FILE * __»¡riù __s , 687 __cÚ¡ wch¬_t * __»¡riù __fÜm© , 688 __gnuc_va_li¡ __¬g ) 694  `vwsÿnf ( __cÚ¡ wch¬_t * __»¡riù __fÜm© , 695 __gnuc_va_li¡ __¬g ) 698  $vswsÿnf ( __cÚ¡ wch¬_t * __»¡riù __s , 699 __cÚ¡ wch¬_t * __»¡riù __fÜm© , 700 __gnuc_va_li¡ __¬g ) 701 __THROW ; 703 #ià! defšed __USE_GNU \ 704 && (! defšed __LDBL_COMPAT || !defšed __REDIRECT ) \ 705 && ( defšed __STRICT_ANSI__ || defšed __USE_XOPEN2K ) 706 #ifdeà __REDIRECT 707  `__REDIRECT ( vfwsÿnf , ( __FILE * __»¡riù __s , 708 __cÚ¡ wch¬_t * __»¡riù __fÜm© , 709 __gnuc_va_li¡ __¬g ), __isoc99_vfwsÿnf ) 711  `__REDIRECT ( vwsÿnf , ( __cÚ¡ wch¬_t * __»¡riù __fÜm© , 712 __gnuc_va_li¡ __¬g ), __isoc99_vwsÿnf ) 714  `__REDIRECT_NTH ( vswsÿnf , ( __cÚ¡ wch¬_t * __»¡riù __s , 715 __cÚ¡ wch¬_t * __»¡riù __fÜm© , 716 __gnuc_va_li¡ __¬g ), __isoc99_vswsÿnf ) 719  `__isoc99_vfwsÿnf ( __FILE * __»¡riù __s , 720 __cÚ¡ wch¬_t * __»¡riù __fÜm© , 721 __gnuc_va_li¡ __¬g ); 722  `__isoc99_vwsÿnf ( __cÚ¡ wch¬_t * __»¡riù __fÜm© , 723 __gnuc_va_li¡ __¬g ); 724  $__isoc99_vswsÿnf ( __cÚ¡ wch¬_t * __»¡riù __s , 725 __cÚ¡ wch¬_t * __»¡riù __fÜm© , 726 __gnuc_va_li¡ __¬g è __THROW ; 727  #vfwsÿnf __isoc99_vfwsÿnf ) 728  #vwsÿnf __isoc99_vwsÿnf ) 729  #vswsÿnf __isoc99_vswsÿnf ) 733 __END_NAMESPACE_C99 737 __BEGIN_NAMESPACE_STD 742 wšt_t `fg‘wc ( __FILE * __¡»am ); 743 wšt_t `g‘wc ( __FILE * __¡»am ); 749 wšt_t `g‘wch¬ (); 756 wšt_t `åutwc ( wch¬_t __wc , __FILE * __¡»am ); 757 wšt_t `putwc ( wch¬_t __wc , __FILE * __¡»am ); 763 wšt_t `putwch¬ ( wch¬_t __wc ); 771 wch¬_t * `fg‘ws (wch¬_ˆ* __»¡riù __ws ,  __n , 772 __FILE * __»¡riù __¡»am ); 778  `åutws ( __cÚ¡ wch¬_t * __»¡riù __ws , 779 __FILE * __»¡riù __¡»am ); 786 wšt_t `ung‘wc (wšt_ˆ __wc , __FILE * __¡»am ); 787 __END_NAMESPACE_STD 790 #ifdeà __USE_GNU 798 wšt_t `g‘wc_uÆocked ( __FILE * __¡»am ); 799 wšt_t `g‘wch¬_uÆocked (); 807 wšt_t `fg‘wc_uÆocked ( __FILE * __¡»am ); 815 wšt_t `åutwc_uÆocked ( wch¬_t __wc , __FILE * __¡»am ); 824 wšt_t `putwc_uÆocked ( wch¬_t __wc , __FILE * __¡»am ); 825 wšt_t `putwch¬_uÆocked ( wch¬_t __wc ); 834 wch¬_t * `fg‘ws_uÆocked (wch¬_ˆ* __»¡riù __ws ,  __n , 835 __FILE * __»¡riù __¡»am ); 843  `åutws_uÆocked ( __cÚ¡ wch¬_t * __»¡riù __ws , 844 __FILE * __»¡riù __¡»am ); 848 __BEGIN_NAMESPACE_C99 852 size_t $wcsáime ( wch¬_t * __»¡riù __s , size_t __maxsize , 853 __cÚ¡ wch¬_t * __»¡riù __fÜm© , 854 __cÚ¡  tm * __»¡riù __ è __THROW ; 855 __END_NAMESPACE_C99 857 #ifdeà __USE_GNU 858  ~ 862 size_t $wcsáime_l ( wch¬_t * __»¡riù __s , size_t __maxsize , 863 __cÚ¡ wch¬_t * __»¡riù __fÜm© , 864 __cÚ¡  tm * __»¡riù __ , 865 __loÿË_t __loc è __THROW ; 874 #ià defšed __USE_UNIX98 && !defšed __USE_GNU 875  #__Ãed_iswxxx ) 876  ~ 880 #ià __USE_FORTIFY_LEVEL > 0 && defšed __ex‹º_®ways_šlše 881  ~ 884 #ifdeà __LDBL_COMPAT 885  ~ 888 __END_DECLS 896 #undeà __Ãed_mb¡©e_t 897 #undeà __Ãed_wšt_t @/usr/include/wctype.h 24 #iâdeà _WCTYPE_H 26  ~<ã©u»s.h > 27  ~ 29 #iâdeà __Ãed_iswxxx 30  #_WCTYPE_H 1 ) 33  #__Ãed_wšt_t ) 34  ~ 38 #iâdeà WEOF 39  #WEOF (0xffffffffu) ) 42 #undeà __Ãed_iswxxx 47 #iâdeà __iswxxx_defšed 48  #__iswxxx_defšed 1 ) 50 __BEGIN_NAMESPACE_C99 53  twùy³_t ; 54 g__END_NAMESPACE_C99 56 #iâdeà _ISwb™ 61  ~<’dŸn.h > 62 #ià __BYTE_ORDER =ð __BIG_ENDIAN 63  #_ISwb™ ( b™ è(1 << (b™)) ) 65  #_ISwb™ ( b™ ) \ 66 (( b™ ) < 8 ? () ((1UL << (bit)) << 24) \ 67 : (( b™ ) < 16 ? () ((1UL << (bit)) << 8) \ 68 : (( b™ ) < 24 ? () ((1UL << (bit)) >> 8) \ 69 : (è((1UL << ( b™ )è>> 24)))) ) 74 m__ISwuµ” = 0, 75 m__ISwlow” = 1, 76 m__ISw®pha = 2, 77 m__ISwdig™ = 3, 78 m__ISwxdig™ = 4, 79 m__ISw¥aû = 5, 80 m__ISw´št = 6, 81 m__ISwg¿ph = 7, 82 m__ISwbÏnk = 8, 83 m__ISwúŒl = 9, 84 m__ISwpunù = 10, 85 m__ISw®num = 11, 87 m_ISwuµ” = _ISwb™ ( __ISwuµ” ), 88 m_ISwlow” = _ISwb™ ( __ISwlow” ), 89 m_ISw®pha = _ISwb™ ( __ISw®pha ), 90 m_ISwdig™ = _ISwb™ ( __ISwdig™ ), 91 m_ISwxdig™ = _ISwb™ ( __ISwxdig™ ), 92 m_ISw¥aû = _ISwb™ ( __ISw¥aû ), 93 m_ISw´št = _ISwb™ ( __ISw´št ), 94 m_ISwg¿ph = _ISwb™ ( __ISwg¿ph ), 95 m_ISwbÏnk = _ISwb™ ( __ISwbÏnk ), 96 m_ISwúŒl = _ISwb™ ( __ISwúŒl ), 97 m_ISwpunù = _ISwb™ ( __ISwpunù ), 98 m_ISw®num = _ISwb™ ( __ISw®num ) 103 __BEGIN_DECLS 105 __BEGIN_NAMESPACE_C99 112  $isw®num ( wšt_t __wc è __THROW ; 118  $isw®pha ( wšt_t __wc è __THROW ; 121  $iswúŒl ( wšt_t __wc è __THROW ; 125  $iswdig™ ( wšt_t __wc è __THROW ; 129  $iswg¿ph ( wšt_t __wc è __THROW ; 134  $iswlow” ( wšt_t __wc è __THROW ; 137  $isw´št ( wšt_t __wc è __THROW ; 142  $iswpunù ( wšt_t __wc è __THROW ; 147  $isw¥aû ( wšt_t __wc è __THROW ; 152  $iswuµ” ( wšt_t __wc è __THROW ; 157  $iswxdig™ ( wšt_t __wc è __THROW ; 162 #ifdeà __USE_ISOC99 163  $iswbÏnk ( wšt_t __wc è __THROW ; 172 wùy³_t $wùy³ ( __cÚ¡ * __´Ý”ty è __THROW ; 176  $iswùy³ ( wšt_t __wc , wùy³_t __desc è __THROW ; 177 __END_NAMESPACE_C99 184 __BEGIN_NAMESPACE_C99 187  __cÚ¡ t__št32_t * twù¿ns_t ; 188 __END_NAMESPACE_C99 189 #ifdeà __USE_GNU 190 $__USING_NAMESPACE_C99 ( wù¿ns_t ) 193 __BEGIN_NAMESPACE_C99 195 wšt_t $towlow” ( wšt_t __wc è __THROW ; 198 wšt_t $towuµ” ( wšt_t __wc è __THROW ; 199 __END_NAMESPACE_C99 201 __END_DECLS 208 #ifdeà _WCTYPE_H 214 __BEGIN_DECLS 216 __BEGIN_NAMESPACE_C99 219 wù¿ns_t $wù¿ns ( __cÚ¡ * __´Ý”ty è __THROW ; 222 wšt_t $towù¿ns ( wšt_t __wc , wù¿ns_t __desc è __THROW ; 223 __END_NAMESPACE_C99 225 #ifdeà __USE_XOPEN2K8 227  ~ 231  $isw®num_l ( wšt_t __wc , __loÿË_t __loÿË è __THROW ; 237  $isw®pha_l ( wšt_t __wc , __loÿË_t __loÿË è __THROW ; 240  $iswúŒl_l ( wšt_t __wc , __loÿË_t __loÿË è __THROW ; 244  $iswdig™_l ( wšt_t __wc , __loÿË_t __loÿË è __THROW ; 248  $iswg¿ph_l ( wšt_t __wc , __loÿË_t __loÿË è __THROW ; 253  $iswlow”_l ( wšt_t __wc , __loÿË_t __loÿË è __THROW ; 256  $isw´št_l ( wšt_t __wc , __loÿË_t __loÿË è __THROW ; 261  $iswpunù_l ( wšt_t __wc , __loÿË_t __loÿË è __THROW ; 266  $isw¥aû_l ( wšt_t __wc , __loÿË_t __loÿË è __THROW ; 271  $iswuµ”_l ( wšt_t __wc , __loÿË_t __loÿË è __THROW ; 276  $iswxdig™_l ( wšt_t __wc , __loÿË_t __loÿË è __THROW ; 281  $iswbÏnk_l ( wšt_t __wc , __loÿË_t __loÿË è __THROW ; 285 wùy³_t $wùy³_l ( __cÚ¡ * __´Ý”ty , __loÿË_t __loÿË ) 286 __THROW ; 290  $iswùy³_l ( wšt_t __wc , wùy³_t __desc , __loÿË_t __loÿË ) 291 __THROW ; 299 wšt_t $towlow”_l ( wšt_t __wc , __loÿË_t __loÿË è __THROW ; 302 wšt_t $towuµ”_l ( wšt_t __wc , __loÿË_t __loÿË è __THROW ; 306 wù¿ns_t $wù¿ns_l ( __cÚ¡ * __´Ý”ty , __loÿË_t __loÿË ) 307 __THROW ; 310 wšt_t $towù¿ns_l ( wšt_t __wc , wù¿ns_t __desc , 311 __loÿË_t __loÿË è __THROW ; 315 __END_DECLS @ 1 . 1 /usr/include 693 13973 android/a2dp-sink.c android/a2dp-sink.h android/a2dp.c android/a2dp.h android/audio-msg.h android/audio_utils/resampler.c android/audio_utils/resampler.h android/avctp.c android/avctp.h android/avdtp.c android/avdtp.h android/avdtptest.c android/avrcp-lib.c android/avrcp-lib.h android/avrcp.c android/avrcp.h android/bas.c android/bas.h android/bluetooth.c android/bluetooth.h android/bluetoothd-snoop.c android/bluetoothd-wrapper.c android/client/haltest.c android/client/history.c android/client/history.h android/client/if-audio.c android/client/if-av-sink.c android/client/if-av.c android/client/if-bt.c android/client/if-gatt.c android/client/if-hf-client.c android/client/if-hf.c android/client/if-hh.c android/client/if-hl.c android/client/if-main.h android/client/if-mce.c android/client/if-pan.c android/client/if-rc-ctrl.c android/client/if-rc.c android/client/if-sco.c android/client/if-sock.c android/client/pollhandler.c android/client/pollhandler.h android/client/tabcompletion.c android/client/terminal.c android/client/terminal.h android/cutils/properties.h android/dis.c android/dis.h android/gatt.c android/gatt.h android/hal-a2dp-sink.c android/hal-a2dp.c android/hal-audio-aptx.c android/hal-audio-sbc.c android/hal-audio.c android/hal-audio.h android/hal-avrcp-ctrl.c android/hal-avrcp.c android/hal-bluetooth.c android/hal-gatt.c android/hal-handsfree-client.c android/hal-handsfree.c android/hal-health.c android/hal-hidhost.c android/hal-ipc.c android/hal-ipc.h android/hal-log.h android/hal-map-client.c android/hal-msg.h android/hal-pan.c android/hal-sco.c android/hal-socket.c android/hal-utils.c android/hal-utils.h android/hal.h android/handsfree-client.c android/handsfree-client.h android/handsfree.c android/handsfree.h android/hardware/audio.h android/hardware/audio_effect.h android/hardware/bluetooth.h android/hardware/bt_av.h android/hardware/bt_gatt.h android/hardware/bt_gatt_client.h android/hardware/bt_gatt_server.h android/hardware/bt_gatt_types.h android/hardware/bt_hf.h android/hardware/bt_hf_client.h android/hardware/bt_hh.h android/hardware/bt_hl.h android/hardware/bt_mce.h android/hardware/bt_pan.h android/hardware/bt_rc.h android/hardware/bt_sock.h android/hardware/hardware.c android/hardware/hardware.h android/health.c android/health.h android/hidhost.c android/hidhost.h android/hog.c android/hog.h android/ipc-common.h android/ipc-tester.c android/ipc.c android/ipc.h android/log.c android/main.c android/map-client.c android/map-client.h android/pan.c android/pan.h android/sco-msg.h android/sco.c android/sco.h android/scpp.c android/scpp.h android/socket.c android/socket.h android/system-emulator.c android/system/audio.h android/test-ipc.c android/tester-a2dp.c android/tester-avrcp.c android/tester-bluetooth.c android/tester-gatt.c android/tester-hdp.c android/tester-hidhost.c android/tester-main.c android/tester-main.h android/tester-map-client.c android/tester-pan.c android/tester-socket.c android/utils.h attrib/att-database.h attrib/att.c attrib/att.h attrib/client.c attrib/client.h attrib/gatt-service.c attrib/gatt-service.h attrib/gatt.c attrib/gatt.h attrib/gattrib.c attrib/gattrib.h attrib/gatttool.c attrib/gatttool.h attrib/interactive.c attrib/utils.c btio/btio.c btio/btio.h client/agent.c client/agent.h client/display.c client/display.h client/main.c emulator/amp.c emulator/amp.h emulator/b1ee.c emulator/btdev.c emulator/btdev.h emulator/bthost.c emulator/bthost.h emulator/hciemu.c emulator/hciemu.h emulator/hfp.c emulator/le.c emulator/le.h emulator/main.c emulator/phy.c emulator/phy.h emulator/serial.c emulator/serial.h emulator/server.c emulator/server.h emulator/smp.c emulator/vhci.c emulator/vhci.h gdbus/client.c gdbus/gdbus.h gdbus/mainloop.c gdbus/object.c gdbus/polkit.c gdbus/watch.c gobex/gobex-apparam.c gobex/gobex-apparam.h gobex/gobex-debug.h gobex/gobex-defs.c gobex/gobex-defs.h gobex/gobex-header.c gobex/gobex-header.h gobex/gobex-packet.c gobex/gobex-packet.h gobex/gobex-transfer.c gobex/gobex.c gobex/gobex.h lib/a2mp.h lib/amp.h lib/bluetooth.c lib/bluetooth.h lib/bnep.h lib/cmtp.h lib/hci.c lib/hci.h lib/hci_lib.h lib/hidp.h lib/l2cap.h lib/mgmt.h lib/rfcomm.h lib/sco.h lib/sdp.c lib/sdp.h lib/sdp_lib.h lib/uuid.c lib/uuid.h monitor/analyze.c monitor/analyze.h monitor/avctp.c monitor/avctp.h monitor/bt.h monitor/btsnoop.c monitor/btsnoop.h monitor/control.c monitor/control.h monitor/crc.c monitor/crc.h monitor/display.c monitor/display.h monitor/ellisys.c monitor/ellisys.h monitor/hcidump.c monitor/hcidump.h monitor/hwdb.c monitor/hwdb.h monitor/keys.c monitor/keys.h monitor/l2cap.c monitor/l2cap.h monitor/ll.c monitor/ll.h monitor/lmp.c monitor/lmp.h monitor/main.c monitor/mainloop.c monitor/mainloop.h monitor/packet.c monitor/packet.h monitor/rfcomm.c monitor/rfcomm.h monitor/sdp.c monitor/sdp.h monitor/uuid.c monitor/uuid.h monitor/vendor.c monitor/vendor.h obexd/client/bluetooth.c obexd/client/bluetooth.h obexd/client/dbus.c obexd/client/dbus.h obexd/client/driver.c obexd/client/driver.h obexd/client/ftp.c obexd/client/ftp.h obexd/client/manager.c obexd/client/manager.h obexd/client/map-event.c obexd/client/map-event.h obexd/client/map.c obexd/client/map.h obexd/client/mns-tizen.c obexd/client/mns-tizen.h obexd/client/mns.c obexd/client/opp.c obexd/client/opp.h obexd/client/pbap.c obexd/client/pbap.h obexd/client/session.c obexd/client/session.h obexd/client/sync.c obexd/client/sync.h obexd/client/transfer.c obexd/client/transfer.h obexd/client/transport.c obexd/client/transport.h obexd/plugins/bluetooth.c obexd/plugins/filesystem.c obexd/plugins/filesystem.h obexd/plugins/ftp.c obexd/plugins/ftp.h obexd/plugins/irmc.c obexd/plugins/mas.c obexd/plugins/messages-dummy.c obexd/plugins/messages-tizen.c obexd/plugins/messages-tracker.c obexd/plugins/messages.h obexd/plugins/opp.c obexd/plugins/pbap.c obexd/plugins/pcsuite.c obexd/plugins/phonebook-dummy.c obexd/plugins/phonebook-ebook.c obexd/plugins/phonebook-tizen.c obexd/plugins/phonebook-tracker.c obexd/plugins/phonebook.h obexd/plugins/syncevolution.c obexd/plugins/vcard.c obexd/plugins/vcard.h obexd/src/log.c obexd/src/log.h obexd/src/main.c obexd/src/manager.c obexd/src/manager.h obexd/src/map_ap.h obexd/src/mimetype.c obexd/src/mimetype.h obexd/src/obex-priv.h obexd/src/obex.c obexd/src/obex.h obexd/src/obexd.h obexd/src/plugin.c obexd/src/plugin.h obexd/src/server.c obexd/src/server.h obexd/src/service.c obexd/src/service.h obexd/src/transport.c obexd/src/transport.h plugins/autopair.c plugins/dbusoob.c plugins/external-dummy.c plugins/gatt-example.c plugins/hostname.c plugins/neard.c plugins/policy.c plugins/sixaxis.c plugins/wiimote.c profiles/alert/server.c profiles/audio/a2dp-codecs.h profiles/audio/a2dp.c profiles/audio/a2dp.h profiles/audio/avctp.c profiles/audio/avctp.h profiles/audio/avdtp.c profiles/audio/avdtp.h profiles/audio/avrcp.c profiles/audio/avrcp.h profiles/audio/control.c profiles/audio/control.h profiles/audio/media.c profiles/audio/media.h profiles/audio/player.c profiles/audio/player.h profiles/audio/sink.c profiles/audio/sink.h profiles/audio/source.c profiles/audio/source.h profiles/audio/transport.c profiles/audio/transport.h profiles/cups/cups.h profiles/cups/hcrp.c profiles/cups/main.c profiles/cups/sdp.c profiles/cups/spp.c profiles/cyclingspeed/cyclingspeed.c profiles/deviceinfo/deviceinfo.c profiles/gap/gas.c profiles/health/hdp.c profiles/health/hdp.h profiles/health/hdp_main.c profiles/health/hdp_manager.c profiles/health/hdp_manager.h profiles/health/hdp_types.h profiles/health/hdp_util.c profiles/health/hdp_util.h profiles/health/mcap.c profiles/health/mcap.h profiles/heartrate/heartrate.c profiles/iap/main.c profiles/input/device.c profiles/input/device.h profiles/input/hidp_defs.h profiles/input/hog.c profiles/input/manager.c profiles/input/server.c profiles/input/server.h profiles/input/suspend-dummy.c profiles/input/suspend.h profiles/input/uhid_copy.h profiles/network/bnep.c profiles/network/bnep.h profiles/network/connection.c profiles/network/connection.h profiles/network/manager.c profiles/network/server.c profiles/network/server.h profiles/proximity/immalert.c profiles/proximity/immalert.h profiles/proximity/linkloss.c profiles/proximity/linkloss.h profiles/proximity/main.c profiles/proximity/manager.c profiles/proximity/manager.h profiles/proximity/monitor.c profiles/proximity/monitor.h profiles/proximity/reporter.c profiles/proximity/reporter.h profiles/sap/main.c profiles/sap/manager.c profiles/sap/manager.h profiles/sap/sap-dummy.c profiles/sap/sap-u8500.c profiles/sap/sap.h profiles/sap/server.c profiles/sap/server.h profiles/scanparam/scan.c profiles/thermometer/thermometer.c profiles/time/server.c src/adapter.c src/adapter.h src/agent.c src/agent.h src/attio.h src/attrib-server.c src/attrib-server.h src/dbus-common.c src/dbus-common.h src/device.c src/device.h src/eir.c src/eir.h src/error.c src/error.h src/gatt-client.c src/gatt-client.h src/gatt-dbus.c src/gatt-dbus.h src/gatt.c src/gatt.h src/hcid.h src/log.c src/log.h src/main.c src/oob.c src/oob.h src/oui.c src/oui.h src/plugin.c src/plugin.h src/profile.c src/profile.h src/rfkill.c src/sdp-client.c src/sdp-client.h src/sdp-xml.c src/sdp-xml.h src/sdpd-database.c src/sdpd-request.c src/sdpd-server.c src/sdpd-service.c src/sdpd.h src/service.c src/service.h src/shared/att-types.h src/shared/att.c src/shared/att.h src/shared/btsnoop.c src/shared/btsnoop.h src/shared/crypto.c src/shared/crypto.h src/shared/ecc.c src/shared/ecc.h src/shared/gap.c src/shared/gap.h src/shared/gatt-client.c src/shared/gatt-client.h src/shared/gatt-db.c src/shared/gatt-db.h src/shared/gatt-helpers.c src/shared/gatt-helpers.h src/shared/gatt-server.c src/shared/gatt-server.h src/shared/hci-crypto.c src/shared/hci-crypto.h src/shared/hci.c src/shared/hci.h src/shared/hfp.c src/shared/hfp.h src/shared/io-glib.c src/shared/io-mainloop.c src/shared/io.h src/shared/mgmt.c src/shared/mgmt.h src/shared/pcap.c src/shared/pcap.h src/shared/queue.c src/shared/queue.h src/shared/ringbuf.c src/shared/ringbuf.h src/shared/tester.c src/shared/tester.h src/shared/timeout-glib.c src/shared/timeout-mainloop.c src/shared/timeout.h src/shared/uhid.c src/shared/uhid.h src/shared/util.c src/shared/util.h src/storage.c src/storage.h src/systemd.c src/systemd.h src/textfile.c src/textfile.h src/uinput.h src/uuid-helper.c src/uuid-helper.h tools/3dsp.c tools/amptest.c tools/avinfo.c tools/avtest.c tools/bccmd.c tools/bdaddr.c tools/bluemoon.c tools/bluetooth-player.c tools/btattach.c tools/btgatt-client.c tools/btgatt-server.c tools/btinfo.c tools/btiotest.c tools/btmgmt.c tools/btproxy.c tools/btsnoop.c tools/ciptool.c tools/cltest.c tools/csr.c tools/csr.h tools/csr_3wire.c tools/csr_bcsp.c tools/csr_h4.c tools/csr_hci.c tools/csr_usb.c tools/gap-tester.c tools/gatt-service.c tools/hci-tester.c tools/hciattach.c tools/hciattach.h tools/hciattach_ath3k.c tools/hciattach_bcm43xx.c tools/hciattach_intel.c tools/hciattach_qualcomm.c tools/hciattach_st.c tools/hciattach_ti.c tools/hciattach_tialt.c tools/hciconfig.c tools/hcidump.c tools/hcieventmask.c tools/hcisecfilter.c tools/hcitool.c tools/hex2hcd.c tools/hid2hci.c tools/hwdb.c tools/ibeacon.c tools/l2cap-tester.c tools/l2ping.c tools/l2test.c tools/mcaptest.c tools/mgmt-tester.c tools/mpris-proxy.c tools/obex-client-tool.c tools/obex-server-tool.c tools/obexctl.c tools/parser/amp.c tools/parser/att.c tools/parser/avctp.c tools/parser/avdtp.c tools/parser/avrcp.c tools/parser/bnep.c tools/parser/bpa.c tools/parser/capi.c tools/parser/cmtp.c tools/parser/csr.c tools/parser/ericsson.c tools/parser/hci.c tools/parser/hcrp.c tools/parser/hidp.c tools/parser/l2cap.c tools/parser/l2cap.h tools/parser/lmp.c tools/parser/obex.c tools/parser/parser.c tools/parser/parser.h tools/parser/ppp.c tools/parser/rfcomm.c tools/parser/rfcomm.h tools/parser/sap.c tools/parser/sdp.c tools/parser/sdp.h tools/parser/smp.c tools/parser/tcpip.c tools/rctest.c tools/rfcomm-tester.c tools/rfcomm.c tools/sco-tester.c tools/scotest.c tools/sdptool.c tools/seq2bseq.c tools/smp-tester.c tools/ubcsp.c tools/ubcsp.h unit/test-avctp.c unit/test-avdtp.c unit/test-avrcp.c unit/test-crc.c unit/test-crypto.c unit/test-ecc.c unit/test-eir.c unit/test-gatt.c unit/test-gattrib.c unit/test-gdbus-client.c unit/test-gobex-apparam.c unit/test-gobex-header.c unit/test-gobex-packet.c unit/test-gobex-transfer.c unit/test-gobex.c unit/test-hfp.c unit/test-lib.c unit/test-mgmt.c unit/test-queue.c unit/test-ringbuf.c unit/test-sdp.c unit/test-textfile.c unit/test-uhid.c unit/test-uuid.c unit/util.c unit/util.h /usr/include/alloca.h /usr/include/arpa/inet.h /usr/include/assert.h /usr/include/byteswap.h /usr/include/ctype.h /usr/include/dirent.h /usr/include/dlfcn.h /usr/include/endian.h /usr/include/errno.h /usr/include/error.h /usr/include/fcntl.h /usr/include/getopt.h /usr/include/inttypes.h /usr/include/libgen.h /usr/include/limits.h /usr/include/linux/hid.h /usr/include/linux/hiddev.h /usr/include/linux/hidraw.h /usr/include/linux/if_alg.h /usr/include/linux/if_bridge.h /usr/include/linux/input.h /usr/include/linux/sockios.h /usr/include/linux/types.h /usr/include/malloc.h /usr/include/math.h /usr/include/net/ethernet.h /usr/include/net/if.h /usr/include/netdb.h /usr/include/netinet/if_ether.h /usr/include/netinet/in.h /usr/include/netinet/ip.h /usr/include/netinet/ip6.h /usr/include/poll.h /usr/include/pthread.h /usr/include/signal.h /usr/include/stdint.h /usr/include/stdio.h /usr/include/stdlib.h /usr/include/string.h /usr/include/strings.h /usr/include/syslog.h /usr/include/termios.h /usr/include/time.h /usr/include/unistd.h /usr/include/features.h /usr/include/libio.h /usr/include/linux/if_ether.h /usr/include/linux/posix_types.h /usr/include/net/if_arp.h /usr/include/rpc/netdb.h /usr/include/sched.h /usr/include/xlocale.h /usr/include/_G_config.h /usr/include/linux/stddef.h /usr/include/gconv.h /usr/include/wchar.h /usr/include/wctype.h